From cc1920749eb81f346badaf55fbf79620cb718a55 Mon Sep 17 00:00:00 2001 From: Justine Tunney Date: Thu, 24 Jun 2021 12:31:26 -0700 Subject: [PATCH] Add SSL to redbean Your redbean can now interoperate with clients that require TLS crypto. This is accomplished using a protocol polyglot that lets us distinguish between HTTP and HTTPS regardless of the port number. Certificates will be generated automatically, if none are supplied by the user. Footprint increases by only a few hundred kb so redbean in MODY=tiny is now 1.0mb - Add lseek() polyfills for ZIP executable - Automatically polyfill /tmp/FOO paths on NT - Fix readdir() / ftw() / nftw() bugs on Windows - Introduce -B flag for slower SSL that's stronger - Remove mbedtls features Cosmopolitan doesn't need - Have base64 decoder support the uri-safe alternative - Remove Truncated HMAC because it's forbidden by the IETF - Add all the mbedtls test suites and make them go 3x faster - Support opendir() / readdir() / closedir() on ZIP executable - Use Everest for ECDHE-ECDSA because it's so good it's so good - Add tinier implementation of sha1 since it's not worth the rom - Add chi-square monte-carlo mean correlation tests for getrandom() - Source entropy on Windows from the proper interface everyone uses We're continuing to outperform NGINX and other servers on raw message throughput. Using SSL means that instead of 1,000,000 qps you can get around 300,000 qps. However redbean isn't as fast as NGINX yet at SSL handshakes, since redbean can do 2,627 per second and NGINX does 4.3k Right now, the SSL UX story works best if you give your redbean a key signing key since that can be easily generated by openssl using a one liner then redbean will do all the things that are impossibly hard to do like signing ecdsa and rsa certificates that'll work in chrome. We should integrate the let's encrypt acme protocol in the future. Live Demo: https://redbean.justine.lol/ Root Cert: https://redbean.justine.lol/redbean1.crt --- Makefile | 9 +- examples/examples.mk | 3 +- examples/rusage.c | 114 +- examples/stringbuffer.c | 55 + examples/tls.c | 153 - examples/walk.c | 12 +- libc/calls/internal.h | 2 +- libc/calls/lseek.c | 7 +- libc/calls/mkntpath.c | 28 +- libc/calls/pread.c | 5 +- libc/calls/struct/dirent.h | 2 +- libc/calls/time.c | 12 +- libc/crypto/crypto.mk | 56 - libc/crypto/kaessbox.S | 57 - libc/crypto/kaessboxinverse.S | 57 - libc/crypto/rijndael.c | 72 - libc/crypto/rijndael.h | 58 - libc/crypto/rijndaelinit.c | 68 - libc/crypto/unrijndael.c | 64 - libc/crypto/unrijndaelinit.c | 69 - libc/dns/gethoststxt.c | 7 +- libc/dns/hoststxt.h | 1 - libc/dns/resolvedns.c | 2 +- libc/dns/resolvednsreverse.c | 2 +- libc/dns/resolvehostsreverse.c | 43 +- libc/dns/resolvehoststxt.c | 35 +- libc/dns/sorthoststxt.c | 49 - libc/fmt/pflink.h | 6 +- libc/isystem/windows.h | 24 + libc/log/oncrashthunks.S | 9 + libc/log/showcrashreports.c | 4 + libc/log/vflogf.c | 15 +- libc/nexgen32e/vendor.internal.h | 69 +- libc/nexgen32e/x86info.h | 9 +- libc/nt/advapi32/SystemFunction036.s | 12 + libc/nt/enum/lang.h | 392 + libc/nt/errors.h | 2 + libc/nt/iphlpapi.h | 13 +- libc/nt/kernel32/LocalFree.s | 13 + libc/nt/master.sh | 3 +- libc/nt/memory.h | 2 + libc/nt/nt.mk | 19 + libc/nt/runtime.h | 1 + libc/nt/struct/ipadapteraddresses.h | 191 +- libc/rand/getrandom.c | 201 +- libc/rand/rand.h | 13 +- libc/rand/rand.mk | 2 +- libc/rand/rand64.c | 70 +- libc/rand/rdrand.c | 25 +- libc/rand/rdseed.c | 32 +- libc/runtime/assertfail.c | 4 +- libc/sock/gethostips.c | 122 + libc/sock/getsockopt-nt.c | 6 +- libc/sock/inet_ntop.c | 63 +- libc/sock/internal.h | 4 +- libc/sock/sock.h | 51 +- libc/sock/sock.mk | 7 +- libc/stdio/dirstream.c | 142 +- libc/str/mbsrtowcs.c | 22 - libc/sysv/calls/sys_getrandom.s | 2 +- libc/sysv/consts.sh | 3 +- libc/sysv/consts/SIGEMT.S | 2 + libc/sysv/consts/grnd.h | 6 +- libc/sysv/consts/sig.h | 76 +- libc/sysv/syscalls.sh | 2 +- libc/testlib/formatstr.c | 28 +- libc/time/strftime.c | 1 - libc/x/x.h | 4 +- libc/{rand/devrand.c => zipos/lseek.c} | 54 +- libc/zipos/open.c | 22 +- libc/zipos/zipos.S | 1 + libc/zipos/zipos.internal.h | 1 + net/http/decodebase64.c | 12 +- net/http/headerhassubstring.c | 2 +- net/http/http.h | 46 +- net/http/parsehttprequest.c | 8 +- net/http/parsehttpresponse.c | 187 + test/dsp/tty/ttymove_test.c | 48 +- test/libc/crypto/rijndael_test.c | 335 - test/libc/crypto/test.mk | 52 - test/libc/dns/parsehoststxt_test.c | 17 +- test/libc/dns/resolvehostsreverse_test.c | 77 + test/libc/dns/resolvehoststxt_test.c | 2 - test/libc/rand/devrand_test.c | 18 +- test/libc/rand/getrandom_test.c | 237 + test/libc/rand/rand_test.c | 19 +- test/libc/rand/test.mk | 7 +- test/libc/sock/inet_ntop_test.c | 44 + test/libc/sock/inet_pton_test.c | 9 + test/libc/stdio/dirstream_test.c | 20 +- test/libc/stdio/test.mk | 4 +- test/libc/str/test.mk | 1 + test/libc/test.mk | 1 - test/net/http/decodebase64_test.c | 109 + test/net/http/encodebase64_test.c | 81 +- test/net/http/isreasonablepath_test.c | 2 + test/net/http/parsehttprequest_test.c | 6 +- test/net/http/parsehttpresponse_test.c | 175 + test/net/http/parseurl_test.c | 10 + test/net/http/test.mk | 3 +- test/tool/net/mbedtls_test.c | 114 + test/tool/net/redbean_test.c | 10 +- test/tool/net/test.mk | 1 + third_party/infozip/infozip.mk | 114 +- third_party/infozip/zip/zip.c | 3 + third_party/lz4cli/lz4frame.c | 12 +- third_party/mbedtls/README.cosmo | 49 +- third_party/mbedtls/README.md | 247 - third_party/mbedtls/aes.c | 168 +- third_party/mbedtls/aes.h | 118 +- third_party/mbedtls/aesni.c | 42 +- third_party/mbedtls/aesni.h | 46 +- third_party/mbedtls/arc4.c | 201 - third_party/mbedtls/arc4.h | 145 - third_party/mbedtls/aria.c | 1078 -- third_party/mbedtls/aria.h | 369 - third_party/mbedtls/asn1.h | 44 +- third_party/mbedtls/asn1parse.c | 34 +- third_party/mbedtls/asn1write.c | 301 +- third_party/mbedtls/asn1write.h | 385 +- third_party/mbedtls/base64.c | 213 +- third_party/mbedtls/base64.h | 104 +- third_party/mbedtls/bignum.c | 892 +- third_party/mbedtls/bignum.h | 975 +- third_party/mbedtls/blowfish.c | 697 - third_party/mbedtls/blowfish.h | 285 - third_party/mbedtls/bn_mul.h | 59 +- third_party/mbedtls/camellia.c | 1113 -- third_party/mbedtls/camellia.h | 324 - third_party/mbedtls/ccm.c | 238 +- third_party/mbedtls/ccm.h | 339 +- third_party/mbedtls/certs.c | 11 +- third_party/mbedtls/certs.h | 30 +- third_party/mbedtls/chacha20.c | 39 +- third_party/mbedtls/chacha20.h | 40 +- third_party/mbedtls/chachapoly.c | 26 +- third_party/mbedtls/chachapoly.h | 41 +- .../mbedtls/{check_config.h => check.h} | 498 +- third_party/mbedtls/check_crypto_config.h | 74 - third_party/mbedtls/cipher.c | 63 +- third_party/mbedtls/cipher.h | 132 +- third_party/mbedtls/cipher_internal.h | 71 +- third_party/mbedtls/cipher_wrap.c | 943 +- third_party/mbedtls/cmac.c | 1092 -- third_party/mbedtls/cmac.h | 213 - third_party/mbedtls/common.h | 46 +- third_party/mbedtls/compat-1.3.h | 2531 ---- third_party/mbedtls/config.h | 3195 +---- third_party/mbedtls/config_psa.h | 546 - third_party/mbedtls/crypto.h | 3774 ------ third_party/mbedtls/crypto_compat.h | 383 - third_party/mbedtls/crypto_config.h | 98 - third_party/mbedtls/crypto_driver_common.h | 52 - third_party/mbedtls/crypto_extra.h | 717 -- third_party/mbedtls/crypto_platform.h | 87 - third_party/mbedtls/crypto_se_driver.h | 1396 -- third_party/mbedtls/crypto_sizes.h | 1090 -- third_party/mbedtls/crypto_struct.h | 467 - third_party/mbedtls/crypto_types.h | 380 - third_party/mbedtls/crypto_values.h | 2016 --- third_party/mbedtls/ctr_drbg.c | 83 +- third_party/mbedtls/ctr_drbg.h | 158 +- third_party/mbedtls/debug.c | 98 +- third_party/mbedtls/debug.h | 189 +- third_party/mbedtls/des.c | 55 +- third_party/mbedtls/des.h | 37 +- third_party/mbedtls/dhm.c | 36 +- third_party/mbedtls/dhm.h | 72 +- third_party/mbedtls/ecdh.c | 17 +- third_party/mbedtls/ecdh.h | 54 +- third_party/mbedtls/ecdsa.c | 64 +- third_party/mbedtls/ecdsa.h | 177 +- third_party/mbedtls/ecjpake.c | 1151 -- third_party/mbedtls/ecjpake.h | 277 - third_party/mbedtls/ecp.c | 905 +- third_party/mbedtls/ecp.h | 1025 +- third_party/mbedtls/ecp_curves.c | 42 +- third_party/mbedtls/ecp_internal.h | 66 +- third_party/mbedtls/endian.h | 51 + third_party/mbedtls/entropy.c | 293 +- third_party/mbedtls/entropy.h | 227 +- third_party/mbedtls/entropy_poll.c | 295 +- third_party/mbedtls/entropy_poll.h | 116 +- third_party/mbedtls/error.c | 336 +- third_party/mbedtls/error.h | 30 +- third_party/mbedtls/everest.c | 1219 ++ third_party/mbedtls/everest.h | 52 + third_party/mbedtls/gcm.c | 83 +- third_party/mbedtls/gcm.h | 42 +- third_party/mbedtls/getalertdescription.c | 84 + third_party/mbedtls/getciphersuitename.c | 753 ++ third_party/mbedtls/havege.c | 241 - third_party/mbedtls/havege.h | 80 - third_party/mbedtls/hkdf.c | 20 +- third_party/mbedtls/hkdf.h | 33 +- third_party/mbedtls/hmac_drbg.c | 367 +- third_party/mbedtls/hmac_drbg.h | 470 +- third_party/mbedtls/iana.h | 12 + third_party/mbedtls/isciphersuitegood.c | 51 + third_party/mbedtls/mbedtls.mk | 22 +- third_party/mbedtls/md.c | 107 +- third_party/mbedtls/md.h | 79 +- third_party/mbedtls/md2.c | 365 - third_party/mbedtls/md2.h | 305 - third_party/mbedtls/md4.c | 489 - third_party/mbedtls/md4.h | 309 - third_party/mbedtls/md5.c | 205 +- third_party/mbedtls/md5.h | 305 +- third_party/mbedtls/md_internal.h | 37 +- .../mbedtls/mdtype.c | 51 +- third_party/mbedtls/memory_buffer_alloc.c | 59 +- third_party/mbedtls/memory_buffer_alloc.h | 32 +- third_party/mbedtls/net.h | 37 - third_party/mbedtls/net_sockets.c | 657 - third_party/mbedtls/net_sockets.h | 288 - third_party/mbedtls/nist_kw.c | 52 +- third_party/mbedtls/nist_kw.h | 45 +- third_party/mbedtls/oid.c | 33 +- third_party/mbedtls/oid.h | 51 +- third_party/mbedtls/padlock.c | 165 - third_party/mbedtls/padlock.h | 125 - .../rand32.c => third_party/mbedtls/param.c | 41 +- third_party/mbedtls/pem.c | 36 +- third_party/mbedtls/pem.h | 30 +- third_party/mbedtls/pk.c | 521 +- third_party/mbedtls/pk.h | 727 +- third_party/mbedtls/pk_internal.h | 48 +- third_party/mbedtls/pk_wrap.c | 441 +- third_party/mbedtls/pkcs11.c | 238 - third_party/mbedtls/pkcs11.h | 248 - third_party/mbedtls/pkcs12.c | 361 - third_party/mbedtls/pkcs12.h | 129 - third_party/mbedtls/pkcs5.c | 30 +- third_party/mbedtls/pkcs5.h | 35 +- third_party/mbedtls/pkparse.c | 229 +- .../mbedtls/pktype.c | 49 +- third_party/mbedtls/pkwrite.c | 110 +- third_party/mbedtls/platform.c | 389 +- third_party/mbedtls/platform.h | 450 +- third_party/mbedtls/platform_time.h | 82 - third_party/mbedtls/platform_util.c | 134 - third_party/mbedtls/platform_util.h | 193 - third_party/mbedtls/poly1305.c | 33 +- third_party/mbedtls/poly1305.h | 40 +- third_party/mbedtls/psa_crypto.c | 6166 --------- third_party/mbedtls/psa_crypto_client.c | 84 - third_party/mbedtls/psa_crypto_core.h | 416 - .../mbedtls/psa_crypto_driver_wrappers.c | 1071 -- .../mbedtls/psa_crypto_driver_wrappers.h | 135 - third_party/mbedtls/psa_crypto_ecp.c | 667 - third_party/mbedtls/psa_crypto_ecp.h | 258 - third_party/mbedtls/psa_crypto_invasive.h | 88 - third_party/mbedtls/psa_crypto_its.h | 149 - third_party/mbedtls/psa_crypto_random_impl.h | 179 - third_party/mbedtls/psa_crypto_rsa.c | 709 -- third_party/mbedtls/psa_crypto_rsa.h | 252 - third_party/mbedtls/psa_crypto_se.c | 382 - third_party/mbedtls/psa_crypto_se.h | 204 - .../mbedtls/psa_crypto_service_integration.h | 41 - .../mbedtls/psa_crypto_slot_management.c | 487 - .../mbedtls/psa_crypto_slot_management.h | 228 - third_party/mbedtls/psa_crypto_storage.c | 536 - third_party/mbedtls/psa_crypto_storage.h | 399 - third_party/mbedtls/psa_its_file.c | 258 - third_party/mbedtls/psa_util.h | 508 - third_party/mbedtls/rando.c | 16 +- third_party/mbedtls/ripemd160.c | 564 - third_party/mbedtls/ripemd160.h | 235 - third_party/mbedtls/rsa.c | 102 +- third_party/mbedtls/rsa.h | 119 +- third_party/mbedtls/rsa_internal.c | 18 +- third_party/mbedtls/rsa_internal.h | 65 +- third_party/mbedtls/san.c | 89 + third_party/mbedtls/san.h | 18 + third_party/mbedtls/sha1.c | 299 +- third_party/mbedtls/sha1.h | 352 +- third_party/mbedtls/sha256.c | 104 +- third_party/mbedtls/sha256.h | 163 +- third_party/mbedtls/sha512.c | 349 +- third_party/mbedtls/sha512.h | 308 +- third_party/mbedtls/sheesh.h | 18 - .../mbedtls/sigalg.c | 48 +- third_party/mbedtls/srtp.c | 35 + third_party/mbedtls/ssl.h | 3174 +---- third_party/mbedtls/ssl_cache.c | 53 +- third_party/mbedtls/ssl_cache.h | 41 +- third_party/mbedtls/ssl_ciphersuites.c | 327 +- third_party/mbedtls/ssl_ciphersuites.h | 289 +- third_party/mbedtls/ssl_cli.c | 566 +- third_party/mbedtls/ssl_cookie.c | 65 +- third_party/mbedtls/ssl_cookie.h | 38 +- third_party/mbedtls/ssl_internal.h | 180 +- third_party/mbedtls/ssl_invasive.h | 63 +- third_party/mbedtls/ssl_msg.c | 436 +- third_party/mbedtls/ssl_srv.c | 441 +- third_party/mbedtls/ssl_ticket.c | 57 +- third_party/mbedtls/ssl_ticket.h | 42 +- third_party/mbedtls/ssl_tls.c | 3273 +++-- third_party/mbedtls/ssl_tls13_keys.c | 177 +- third_party/mbedtls/ssl_tls13_keys.h | 317 +- third_party/mbedtls/test/data/.gitignore | 3 + third_party/mbedtls/test/data/Makefile | 1167 ++ third_party/mbedtls/test/data/Readme-x509.txt | 131 + .../mbedtls/test/data/base64/cli_cid.txt | 2 + .../test/data/base64/cli_ciphersuite.txt | 2 + .../mbedtls/test/data/base64/cli_def.txt | 2 + .../mbedtls/test/data/base64/cli_min_cfg.txt | 2 + .../mbedtls/test/data/base64/cli_no_alpn.txt | 3 + .../test/data/base64/cli_no_keep_cert.txt | 2 + .../mbedtls/test/data/base64/cli_no_mfl.txt | 2 + .../test/data/base64/cli_no_packing.txt | 2 + .../mbedtls/test/data/base64/def_b64_ff.bin | 5 + .../test/data/base64/def_b64_too_big_1.txt | 2 + .../test/data/base64/def_b64_too_big_2.txt | 2 + .../test/data/base64/def_b64_too_big_3.txt | 2 + .../mbedtls/test/data/base64/def_bad_b64.txt | 2 + .../mbedtls/test/data/base64/empty.txt | 0 .../mbedtls/test/data/base64/mfl_1024.txt | 2 + .../mbedtls/test/data/base64/mtu_10000.txt | 2 + .../mbedtls/test/data/base64/srv_cid.txt | 2 + .../test/data/base64/srv_ciphersuite.txt | 2 + .../mbedtls/test/data/base64/srv_def.txt | 2 + .../mbedtls/test/data/base64/srv_min_cfg.txt | 2 + .../mbedtls/test/data/base64/srv_no_alpn.txt | 2 + .../test/data/base64/srv_no_keep_cert.txt | 2 + .../mbedtls/test/data/base64/srv_no_mfl.txt | 2 + .../test/data/base64/srv_no_packing.txt | 2 + .../mbedtls/test/data/base64/v2.19.1.txt | 2 + .../mbedtls/test/data/bitstring-in-dn.pem | 51 + .../mbedtls/test/data/cert_example_multi.crt | 17 + .../test/data/cert_example_multi_nocn.crt | 13 + .../test/data/cert_example_wildcard.crt | 20 + third_party/mbedtls/test/data/cert_md2.crt | 20 + third_party/mbedtls/test/data/cert_md2.csr | 16 + third_party/mbedtls/test/data/cert_md4.crt | 20 + third_party/mbedtls/test/data/cert_md4.csr | 16 + third_party/mbedtls/test/data/cert_md5.crt | 20 + third_party/mbedtls/test/data/cert_md5.csr | 16 + third_party/mbedtls/test/data/cert_sha1.crt | 20 + third_party/mbedtls/test/data/cert_sha224.crt | 20 + third_party/mbedtls/test/data/cert_sha256.crt | 20 + third_party/mbedtls/test/data/cert_sha384.crt | 20 + third_party/mbedtls/test/data/cert_sha512.crt | 20 + .../mbedtls/test/data/cert_v1_with_ext.crt | 23 + .../mbedtls/test/data/cli-rsa-sha1.crt | 20 + .../test/data/cli-rsa-sha256-badalg.crt.der | Bin 0 -> 835 bytes .../mbedtls/test/data/cli-rsa-sha256.crt | 20 + .../mbedtls/test/data/cli-rsa-sha256.crt.der | Bin 0 -> 835 bytes .../mbedtls/test/data/cli-rsa-sha256.key.der | Bin 0 -> 1192 bytes third_party/mbedtls/test/data/cli-rsa.key | 27 + third_party/mbedtls/test/data/cli-rsa.key.der | Bin 0 -> 1192 bytes third_party/mbedtls/test/data/cli.opensslconf | 4 + third_party/mbedtls/test/data/cli2.crt | 13 + third_party/mbedtls/test/data/cli2.crt.der | Bin 0 -> 483 bytes third_party/mbedtls/test/data/cli2.key | 5 + third_party/mbedtls/test/data/cli2.key.der | Bin 0 -> 121 bytes third_party/mbedtls/test/data/crl-ec-sha1.pem | 10 + .../mbedtls/test/data/crl-ec-sha224.pem | 10 + .../mbedtls/test/data/crl-ec-sha256.pem | 10 + .../mbedtls/test/data/crl-ec-sha384.pem | 10 + .../mbedtls/test/data/crl-ec-sha512.pem | 10 + third_party/mbedtls/test/data/crl-future.pem | 11 + .../test/data/crl-futureRevocationDate.pem | 11 + third_party/mbedtls/test/data/crl-idp.pem | 12 + third_party/mbedtls/test/data/crl-idpnc.pem | 12 + .../data/crl-malformed-trailing-spaces.pem | 20 + .../test/data/crl-rsa-pss-sha1-badsign.pem | 14 + .../mbedtls/test/data/crl-rsa-pss-sha1.pem | 14 + .../mbedtls/test/data/crl-rsa-pss-sha224.pem | 16 + .../mbedtls/test/data/crl-rsa-pss-sha256.pem | 16 + .../mbedtls/test/data/crl-rsa-pss-sha384.pem | 16 + .../mbedtls/test/data/crl-rsa-pss-sha512.pem | 16 + third_party/mbedtls/test/data/crl.pem | 11 + .../mbedtls/test/data/crl_cat_ec-rsa.pem | 21 + .../mbedtls/test/data/crl_cat_ecfut-rsa.pem | 22 + .../mbedtls/test/data/crl_cat_rsa-ec.pem | 21 + .../test/data/crl_cat_rsabadpem-ec.pem | 21 + third_party/mbedtls/test/data/crl_expired.pem | 11 + third_party/mbedtls/test/data/crl_md2.pem | 11 + third_party/mbedtls/test/data/crl_md4.pem | 11 + third_party/mbedtls/test/data/crl_md5.pem | 11 + third_party/mbedtls/test/data/crl_sha1.pem | 11 + third_party/mbedtls/test/data/crl_sha224.pem | 11 + third_party/mbedtls/test/data/crl_sha256.pem | 11 + third_party/mbedtls/test/data/crl_sha384.pem | 11 + third_party/mbedtls/test/data/crl_sha512.pem | 11 + .../mbedtls/test/data/crt_cat_rsaexp-ec.pem | 21 + third_party/mbedtls/test/data/dh.1000.pem | 34 + third_party/mbedtls/test/data/dh.optlen.pem | 58 + third_party/mbedtls/test/data/dhparams.pem | 5 + .../mbedtls/test/data/dir-maxpath/00.crt | 11 + .../mbedtls/test/data/dir-maxpath/00.key | 8 + .../mbedtls/test/data/dir-maxpath/01.crt | 13 + .../mbedtls/test/data/dir-maxpath/01.key | 8 + .../mbedtls/test/data/dir-maxpath/02.crt | 12 + .../mbedtls/test/data/dir-maxpath/02.key | 8 + .../mbedtls/test/data/dir-maxpath/03.crt | 12 + .../mbedtls/test/data/dir-maxpath/03.key | 8 + .../mbedtls/test/data/dir-maxpath/04.crt | 12 + .../mbedtls/test/data/dir-maxpath/04.key | 8 + .../mbedtls/test/data/dir-maxpath/05.crt | 12 + .../mbedtls/test/data/dir-maxpath/05.key | 8 + .../mbedtls/test/data/dir-maxpath/06.crt | 12 + .../mbedtls/test/data/dir-maxpath/06.key | 8 + .../mbedtls/test/data/dir-maxpath/07.crt | 12 + .../mbedtls/test/data/dir-maxpath/07.key | 8 + .../mbedtls/test/data/dir-maxpath/08.crt | 12 + .../mbedtls/test/data/dir-maxpath/08.key | 8 + .../mbedtls/test/data/dir-maxpath/09.crt | 12 + .../mbedtls/test/data/dir-maxpath/09.key | 8 + .../mbedtls/test/data/dir-maxpath/10.crt | 12 + .../mbedtls/test/data/dir-maxpath/10.key | 8 + .../mbedtls/test/data/dir-maxpath/11.crt | 12 + .../mbedtls/test/data/dir-maxpath/11.key | 8 + .../mbedtls/test/data/dir-maxpath/12.crt | 12 + .../mbedtls/test/data/dir-maxpath/12.key | 8 + .../mbedtls/test/data/dir-maxpath/13.crt | 12 + .../mbedtls/test/data/dir-maxpath/13.key | 8 + .../mbedtls/test/data/dir-maxpath/14.crt | 12 + .../mbedtls/test/data/dir-maxpath/14.key | 8 + .../mbedtls/test/data/dir-maxpath/15.crt | 12 + .../mbedtls/test/data/dir-maxpath/15.key | 8 + .../mbedtls/test/data/dir-maxpath/16.crt | 12 + .../mbedtls/test/data/dir-maxpath/16.key | 8 + .../mbedtls/test/data/dir-maxpath/17.crt | 12 + .../mbedtls/test/data/dir-maxpath/17.key | 8 + .../mbedtls/test/data/dir-maxpath/18.crt | 12 + .../mbedtls/test/data/dir-maxpath/18.key | 8 + .../mbedtls/test/data/dir-maxpath/19.crt | 12 + .../mbedtls/test/data/dir-maxpath/19.key | 8 + .../mbedtls/test/data/dir-maxpath/20.crt | 12 + .../mbedtls/test/data/dir-maxpath/20.key | 8 + .../mbedtls/test/data/dir-maxpath/Readme.txt | 10 + .../mbedtls/test/data/dir-maxpath/c00.pem | 11 + .../mbedtls/test/data/dir-maxpath/c01.pem | 24 + .../mbedtls/test/data/dir-maxpath/c02.pem | 36 + .../mbedtls/test/data/dir-maxpath/c03.pem | 48 + .../mbedtls/test/data/dir-maxpath/c04.pem | 60 + .../mbedtls/test/data/dir-maxpath/c05.pem | 72 + .../mbedtls/test/data/dir-maxpath/c06.pem | 84 + .../mbedtls/test/data/dir-maxpath/c07.pem | 96 + .../mbedtls/test/data/dir-maxpath/c08.pem | 108 + .../mbedtls/test/data/dir-maxpath/c09.pem | 120 + .../mbedtls/test/data/dir-maxpath/c10.pem | 132 + .../mbedtls/test/data/dir-maxpath/c11.pem | 144 + .../mbedtls/test/data/dir-maxpath/c12.pem | 156 + .../mbedtls/test/data/dir-maxpath/c13.pem | 168 + .../mbedtls/test/data/dir-maxpath/c14.pem | 180 + .../mbedtls/test/data/dir-maxpath/c15.pem | 192 + .../mbedtls/test/data/dir-maxpath/c16.pem | 204 + .../mbedtls/test/data/dir-maxpath/c17.pem | 216 + .../mbedtls/test/data/dir-maxpath/c18.pem | 228 + .../mbedtls/test/data/dir-maxpath/c19.pem | 240 + .../mbedtls/test/data/dir-maxpath/c20.pem | 252 + .../test/data/dir-maxpath/int.opensslconf | 4 + .../mbedtls/test/data/dir-maxpath/long.sh | 50 + .../mbedtls/test/data/dir1/test-ca.crt | 80 + .../mbedtls/test/data/dir2/test-ca.crt | 80 + .../mbedtls/test/data/dir2/test-ca2.crt | 15 + third_party/mbedtls/test/data/dir3/Readme | 1 + .../mbedtls/test/data/dir3/test-ca.crt | 80 + .../mbedtls/test/data/dir3/test-ca2.crt | 15 + third_party/mbedtls/test/data/dir4/Readme | 47 + third_party/mbedtls/test/data/dir4/cert11.crt | 18 + third_party/mbedtls/test/data/dir4/cert12.crt | 19 + third_party/mbedtls/test/data/dir4/cert13.crt | 19 + third_party/mbedtls/test/data/dir4/cert14.crt | 19 + third_party/mbedtls/test/data/dir4/cert21.crt | 18 + third_party/mbedtls/test/data/dir4/cert22.crt | 19 + third_party/mbedtls/test/data/dir4/cert23.crt | 19 + third_party/mbedtls/test/data/dir4/cert31.crt | 18 + third_party/mbedtls/test/data/dir4/cert32.crt | 19 + third_party/mbedtls/test/data/dir4/cert33.crt | 19 + third_party/mbedtls/test/data/dir4/cert34.crt | 19 + third_party/mbedtls/test/data/dir4/cert41.crt | 18 + third_party/mbedtls/test/data/dir4/cert42.crt | 19 + third_party/mbedtls/test/data/dir4/cert43.crt | 19 + third_party/mbedtls/test/data/dir4/cert44.crt | 19 + third_party/mbedtls/test/data/dir4/cert45.crt | 19 + third_party/mbedtls/test/data/dir4/cert51.crt | 18 + third_party/mbedtls/test/data/dir4/cert52.crt | 19 + third_party/mbedtls/test/data/dir4/cert53.crt | 19 + third_party/mbedtls/test/data/dir4/cert54.crt | 19 + third_party/mbedtls/test/data/dir4/cert61.crt | 18 + third_party/mbedtls/test/data/dir4/cert62.crt | 19 + third_party/mbedtls/test/data/dir4/cert63.crt | 19 + third_party/mbedtls/test/data/dir4/cert71.crt | 18 + third_party/mbedtls/test/data/dir4/cert72.crt | 19 + third_party/mbedtls/test/data/dir4/cert73.crt | 19 + third_party/mbedtls/test/data/dir4/cert74.crt | 19 + third_party/mbedtls/test/data/dir4/cert81.crt | 11 + third_party/mbedtls/test/data/dir4/cert82.crt | 11 + third_party/mbedtls/test/data/dir4/cert83.crt | 11 + third_party/mbedtls/test/data/dir4/cert91.crt | 11 + third_party/mbedtls/test/data/dir4/cert92.crt | 11 + third_party/mbedtls/test/data/ec_224_prv.pem | 5 + third_party/mbedtls/test/data/ec_224_pub.pem | 4 + .../mbedtls/test/data/ec_256_long_prv.pem | 5 + third_party/mbedtls/test/data/ec_256_prv.pem | 5 + third_party/mbedtls/test/data/ec_256_pub.pem | 4 + third_party/mbedtls/test/data/ec_384_prv.pem | 6 + third_party/mbedtls/test/data/ec_384_pub.pem | 5 + third_party/mbedtls/test/data/ec_521_prv.pem | 7 + third_party/mbedtls/test/data/ec_521_pub.pem | 6 + .../mbedtls/test/data/ec_521_short_prv.pem | 7 + .../mbedtls/test/data/ec_bp256_prv.pem | 5 + .../mbedtls/test/data/ec_bp256_pub.pem | 4 + .../mbedtls/test/data/ec_bp384_prv.pem | 6 + .../mbedtls/test/data/ec_bp384_pub.pem | 5 + .../mbedtls/test/data/ec_bp512_prv.pem | 7 + .../mbedtls/test/data/ec_bp512_pub.pem | 6 + third_party/mbedtls/test/data/ec_prv.pk8.der | Bin 0 -> 113 bytes third_party/mbedtls/test/data/ec_prv.pk8.pem | 5 + .../mbedtls/test/data/ec_prv.pk8.pw.der | Bin 0 -> 148 bytes .../mbedtls/test/data/ec_prv.pk8.pw.pem | 6 + .../mbedtls/test/data/ec_prv.pk8nopub.der | Bin 0 -> 67 bytes .../mbedtls/test/data/ec_prv.pk8nopub.pem | 4 + .../test/data/ec_prv.pk8nopubparam.der | Bin 0 -> 79 bytes .../test/data/ec_prv.pk8nopubparam.pem | 4 + .../mbedtls/test/data/ec_prv.pk8param.der | Bin 0 -> 150 bytes .../mbedtls/test/data/ec_prv.pk8param.pem | 5 + third_party/mbedtls/test/data/ec_prv.sec1.der | Bin 0 -> 97 bytes third_party/mbedtls/test/data/ec_prv.sec1.pem | 5 + .../mbedtls/test/data/ec_prv.sec1.pw.pem | 8 + .../mbedtls/test/data/ec_prv.specdom.der | Bin 0 -> 214 bytes third_party/mbedtls/test/data/ec_pub.der | Bin 0 -> 75 bytes third_party/mbedtls/test/data/ec_pub.pem | 4 + .../mbedtls/test/data/enco-ca-prstr.pem | 15 + .../mbedtls/test/data/enco-cert-utf8str.pem | 14 + third_party/mbedtls/test/data/format_gen.key | 16 + third_party/mbedtls/test/data/format_gen.pub | 6 + .../mbedtls/test/data/format_pkcs12.fmt | Bin 0 -> 3381 bytes third_party/mbedtls/test/data/format_rsa.key | 15 + third_party/mbedtls/test/data/hash_file_1 | Bin 0 -> 5120 bytes third_party/mbedtls/test/data/hash_file_2 | 2 + third_party/mbedtls/test/data/hash_file_3 | Bin 0 -> 13 bytes third_party/mbedtls/test/data/hash_file_4 | 0 third_party/mbedtls/test/data/hash_file_5 | 1 + .../test/data/keyUsage.decipherOnly.crt | 14 + third_party/mbedtls/test/data/mpi_10 | 1 + third_party/mbedtls/test/data/mpi_too_big | 1 + third_party/mbedtls/test/data/mpi_write | 1 + .../mbedtls/test/data/multiple_san.crt | 12 + .../test/data/non-ascii-string-in-issuer.crt | 22 + third_party/mbedtls/test/data/passwd.psk | 1 + third_party/mbedtls/test/data/print_c.pl | 50 + third_party/mbedtls/test/data/rsa4096_prv.pem | 51 + third_party/mbedtls/test/data/rsa4096_pub.pem | 14 + third_party/mbedtls/test/data/rsa512.key | 9 + third_party/mbedtls/test/data/rsa521.key | 9 + third_party/mbedtls/test/data/rsa522.key | 9 + third_party/mbedtls/test/data/rsa528.key | 9 + .../mbedtls/test/data/rsa_pkcs1_1024_3des.pem | 18 + .../test/data/rsa_pkcs1_1024_aes128.pem | 18 + .../test/data/rsa_pkcs1_1024_aes192.pem | 18 + .../test/data/rsa_pkcs1_1024_aes256.pem | 18 + .../test/data/rsa_pkcs1_1024_clear.pem | 15 + .../mbedtls/test/data/rsa_pkcs1_1024_des.pem | 18 + .../mbedtls/test/data/rsa_pkcs1_2048_3des.pem | 30 + .../test/data/rsa_pkcs1_2048_aes128.pem | 30 + .../test/data/rsa_pkcs1_2048_aes192.pem | 30 + .../test/data/rsa_pkcs1_2048_aes256.pem | 30 + .../test/data/rsa_pkcs1_2048_clear.pem | 27 + .../mbedtls/test/data/rsa_pkcs1_2048_des.pem | 30 + .../test/data/rsa_pkcs1_2048_public.der | Bin 0 -> 270 bytes .../test/data/rsa_pkcs1_2048_public.pem | 8 + .../mbedtls/test/data/rsa_pkcs1_4096_3des.pem | 54 + .../test/data/rsa_pkcs1_4096_aes128.pem | 54 + .../test/data/rsa_pkcs1_4096_aes192.pem | 54 + .../test/data/rsa_pkcs1_4096_aes256.pem | 54 + .../test/data/rsa_pkcs1_4096_clear.pem | 51 + .../mbedtls/test/data/rsa_pkcs1_4096_des.pem | 54 + .../test/data/rsa_pkcs8_1024_public.der | Bin 0 -> 162 bytes .../test/data/rsa_pkcs8_2048_public.der | Bin 0 -> 294 bytes .../test/data/rsa_pkcs8_2048_public.pem | 9 + .../data/rsa_pkcs8_pbe_sha1_1024_2des.der | Bin 0 -> 678 bytes .../data/rsa_pkcs8_pbe_sha1_1024_2des.pem | 17 + .../data/rsa_pkcs8_pbe_sha1_1024_3des.der | Bin 0 -> 678 bytes .../data/rsa_pkcs8_pbe_sha1_1024_3des.pem | 17 + .../data/rsa_pkcs8_pbe_sha1_1024_rc4_128.der | Bin 0 -> 674 bytes .../data/rsa_pkcs8_pbe_sha1_1024_rc4_128.pem | 17 + .../data/rsa_pkcs8_pbe_sha1_2048_2des.der | Bin 0 -> 1262 bytes .../data/rsa_pkcs8_pbe_sha1_2048_2des.pem | 29 + .../data/rsa_pkcs8_pbe_sha1_2048_3des.der | Bin 0 -> 1262 bytes .../data/rsa_pkcs8_pbe_sha1_2048_3des.pem | 29 + .../data/rsa_pkcs8_pbe_sha1_2048_rc4_128.der | Bin 0 -> 1256 bytes .../data/rsa_pkcs8_pbe_sha1_2048_rc4_128.pem | 29 + .../data/rsa_pkcs8_pbe_sha1_4096_2des.der | Bin 0 -> 2414 bytes .../data/rsa_pkcs8_pbe_sha1_4096_2des.pem | 53 + .../data/rsa_pkcs8_pbe_sha1_4096_3des.der | Bin 0 -> 2414 bytes .../data/rsa_pkcs8_pbe_sha1_4096_3des.pem | 53 + .../data/rsa_pkcs8_pbe_sha1_4096_rc4_128.der | Bin 0 -> 2412 bytes .../data/rsa_pkcs8_pbe_sha1_4096_rc4_128.pem | 53 + .../data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.der | Bin 0 -> 714 bytes .../data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem | 17 + ...sa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der | Bin 0 -> 728 bytes ...sa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem | 18 + ...sa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der | Bin 0 -> 728 bytes ...sa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem | 18 + ...sa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der | Bin 0 -> 728 bytes ...sa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem | 18 + ...sa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der | Bin 0 -> 728 bytes ...sa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem | 18 + .../data/rsa_pkcs8_pbes2_pbkdf2_1024_des.der | Bin 0 -> 711 bytes .../data/rsa_pkcs8_pbes2_pbkdf2_1024_des.pem | 17 + ...rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der | Bin 0 -> 725 bytes ...rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem | 18 + ...rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der | Bin 0 -> 725 bytes ...rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem | 18 + ...rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der | Bin 0 -> 725 bytes ...rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem | 18 + ...rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der | Bin 0 -> 725 bytes ...rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem | 18 + .../data/rsa_pkcs8_pbes2_pbkdf2_2048_3des.der | Bin 0 -> 1298 bytes .../data/rsa_pkcs8_pbes2_pbkdf2_2048_3des.pem | 30 + ...sa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der | Bin 0 -> 1312 bytes ...sa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem | 30 + ...sa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der | Bin 0 -> 1312 bytes ...sa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem | 30 + ...sa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der | Bin 0 -> 1312 bytes ...sa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem | 30 + ...sa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der | Bin 0 -> 1312 bytes ...sa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem | 30 + .../data/rsa_pkcs8_pbes2_pbkdf2_2048_des.der | Bin 0 -> 1295 bytes .../data/rsa_pkcs8_pbes2_pbkdf2_2048_des.pem | 29 + ...rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der | Bin 0 -> 1309 bytes ...rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem | 30 + ...rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der | Bin 0 -> 1309 bytes ...rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem | 30 + ...rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der | Bin 0 -> 1309 bytes ...rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem | 30 + ...rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der | Bin 0 -> 1309 bytes ...rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem | 30 + .../data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.der | Bin 0 -> 2450 bytes .../data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem | 54 + ...sa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der | Bin 0 -> 2464 bytes ...sa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem | 54 + ...sa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der | Bin 0 -> 2464 bytes ...sa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem | 54 + ...sa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der | Bin 0 -> 2464 bytes ...sa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem | 54 + ...sa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der | Bin 0 -> 2464 bytes ...sa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem | 54 + .../data/rsa_pkcs8_pbes2_pbkdf2_4096_des.der | Bin 0 -> 2447 bytes .../data/rsa_pkcs8_pbes2_pbkdf2_4096_des.pem | 53 + ...rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der | Bin 0 -> 2461 bytes ...rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem | 54 + ...rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der | Bin 0 -> 2461 bytes ...rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem | 54 + ...rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der | Bin 0 -> 2461 bytes ...rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem | 54 + ...rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der | Bin 0 -> 2461 bytes ...rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem | 54 + .../mbedtls/test/data/server1-ms.req.sha256 | 16 + .../mbedtls/test/data/server1-nospace.crt | 21 + third_party/mbedtls/test/data/server1-v1.crt | 19 + third_party/mbedtls/test/data/server1.ca.crt | 20 + third_party/mbedtls/test/data/server1.ca.der | Bin 0 -> 841 bytes .../mbedtls/test/data/server1.ca_noauthid.crt | 19 + .../mbedtls/test/data/server1.cert_type.crt | 20 + .../data/server1.cert_type.crt.openssl.v3_ext | 5 + .../test/data/server1.cert_type_noauthid.crt | 20 + third_party/mbedtls/test/data/server1.crt | 20 + third_party/mbedtls/test/data/server1.crt.der | Bin 0 -> 835 bytes .../test/data/server1.crt.openssl.v3_ext | 4 + third_party/mbedtls/test/data/server1.csr | 16 + third_party/mbedtls/test/data/server1.der | Bin 0 -> 835 bytes .../mbedtls/test/data/server1.ext_ku.crt | 22 + third_party/mbedtls/test/data/server1.key | 27 + .../mbedtls/test/data/server1.key_usage.crt | 20 + .../data/server1.key_usage.crt.openssl.v3_ext | 5 + .../test/data/server1.key_usage_noauthid.crt | 20 + .../mbedtls/test/data/server1.noauthid.crt | 19 + third_party/mbedtls/test/data/server1.pubkey | 9 + .../mbedtls/test/data/server1.req.cert_type | 17 + .../test/data/server1.req.cert_type_empty | 17 + .../mbedtls/test/data/server1.req.key_usage | 17 + .../test/data/server1.req.key_usage_empty | 17 + .../mbedtls/test/data/server1.req.ku-ct | 17 + third_party/mbedtls/test/data/server1.req.md4 | 16 + third_party/mbedtls/test/data/server1.req.md5 | 16 + .../mbedtls/test/data/server1.req.sha1 | 16 + .../mbedtls/test/data/server1.req.sha224 | 16 + .../mbedtls/test/data/server1.req.sha256 | 16 + .../mbedtls/test/data/server1.req.sha384 | 16 + .../mbedtls/test/data/server1.req.sha512 | 16 + third_party/mbedtls/test/data/server1.v1.crt | 18 + .../mbedtls/test/data/server10-badsign.crt | 10 + .../mbedtls/test/data/server10-bs_int3.pem | 22 + third_party/mbedtls/test/data/server10.crt | 10 + third_party/mbedtls/test/data/server10.key | 5 + .../mbedtls/test/data/server10_int3-bs.pem | 22 + .../test/data/server10_int3_int-ca2.crt | 40 + .../test/data/server10_int3_int-ca2_ca.crt | 120 + .../data/server10_int3_spurious_int-ca2.crt | 64 + third_party/mbedtls/test/data/server1_ca.crt | 40 + .../mbedtls/test/data/server1_csr.opensslconf | 10 + .../test/data/server1_pathlen_int_max-1.crt | 20 + .../test/data/server1_pathlen_int_max.crt | 20 + .../mbedtls/test/data/server2-badsign.crt | 20 + .../mbedtls/test/data/server2-sha256.crt | 20 + .../mbedtls/test/data/server2-sha256.crt.der | Bin 0 -> 827 bytes .../mbedtls/test/data/server2-v1-chain.crt | 38 + third_party/mbedtls/test/data/server2-v1.crt | 19 + third_party/mbedtls/test/data/server2.crt | 20 + third_party/mbedtls/test/data/server2.crt.der | Bin 0 -> 827 bytes third_party/mbedtls/test/data/server2.der | Bin 0 -> 827 bytes third_party/mbedtls/test/data/server2.key | 27 + third_party/mbedtls/test/data/server2.key.der | Bin 0 -> 1192 bytes third_party/mbedtls/test/data/server2.key.enc | 30 + .../mbedtls/test/data/server2.ku-ds.crt | 21 + .../mbedtls/test/data/server2.ku-ds_ke.crt | 21 + .../mbedtls/test/data/server2.ku-ka.crt | 21 + .../mbedtls/test/data/server2.ku-ke.crt | 21 + third_party/mbedtls/test/data/server3.crt | 17 + third_party/mbedtls/test/data/server3.key | 5 + third_party/mbedtls/test/data/server4.crt | 18 + third_party/mbedtls/test/data/server4.key | 27 + .../mbedtls/test/data/server5-badsign.crt | 14 + .../mbedtls/test/data/server5-der0.crt | Bin 0 -> 547 bytes .../mbedtls/test/data/server5-der1a.crt | Bin 0 -> 548 bytes .../mbedtls/test/data/server5-der1b.crt | Bin 0 -> 548 bytes .../mbedtls/test/data/server5-der2.crt | Bin 0 -> 549 bytes .../mbedtls/test/data/server5-der4.crt | Bin 0 -> 551 bytes .../mbedtls/test/data/server5-der8.crt | Bin 0 -> 555 bytes .../mbedtls/test/data/server5-der9.crt | Bin 0 -> 556 bytes .../mbedtls/test/data/server5-expired.crt | 14 + third_party/mbedtls/test/data/server5-fan.crt | 10 + .../mbedtls/test/data/server5-future.crt | 14 + .../mbedtls/test/data/server5-othername.crt | 11 + .../mbedtls/test/data/server5-selfsigned.crt | 12 + .../mbedtls/test/data/server5-sha1.crt | 14 + .../mbedtls/test/data/server5-sha224.crt | 14 + .../mbedtls/test/data/server5-sha384.crt | 14 + .../mbedtls/test/data/server5-sha512.crt | 14 + .../mbedtls/test/data/server5-ss-expired.crt | 12 + .../mbedtls/test/data/server5-ss-forgeca.crt | 11 + .../test/data/server5-tricky-ip-san.crt | 11 + .../data/server5-unsupported_othername.crt | 12 + third_party/mbedtls/test/data/server5.crt | 14 + third_party/mbedtls/test/data/server5.crt.der | Bin 0 -> 547 bytes .../mbedtls/test/data/server5.eku-cli.crt | 13 + .../mbedtls/test/data/server5.eku-cs.crt | 13 + .../mbedtls/test/data/server5.eku-cs_any.crt | 13 + .../mbedtls/test/data/server5.eku-srv.crt | 13 + .../mbedtls/test/data/server5.eku-srv_cli.crt | 13 + third_party/mbedtls/test/data/server5.key | 5 + third_party/mbedtls/test/data/server5.key.der | Bin 0 -> 121 bytes third_party/mbedtls/test/data/server5.key.enc | 8 + .../mbedtls/test/data/server5.ku-ds.crt | 14 + .../mbedtls/test/data/server5.ku-ka.crt | 14 + .../mbedtls/test/data/server5.ku-ke.crt | 14 + .../mbedtls/test/data/server5.req.ku.sha1 | 8 + .../mbedtls/test/data/server5.req.sha1 | 8 + .../mbedtls/test/data/server5.req.sha224 | 8 + .../mbedtls/test/data/server5.req.sha256 | 8 + .../mbedtls/test/data/server5.req.sha384 | 8 + .../mbedtls/test/data/server5.req.sha512 | 8 + .../mbedtls/test/data/server6-ss-child.crt | 13 + third_party/mbedtls/test/data/server6.crt | 14 + third_party/mbedtls/test/data/server6.key | 5 + .../mbedtls/test/data/server7-badsign.crt | 47 + .../mbedtls/test/data/server7-expired.crt | 47 + .../mbedtls/test/data/server7-future.crt | 47 + third_party/mbedtls/test/data/server7.crt | 23 + third_party/mbedtls/test/data/server7.key | 5 + .../mbedtls/test/data/server7_all_space.crt | 47 + .../mbedtls/test/data/server7_int-ca-exp.crt | 47 + .../mbedtls/test/data/server7_int-ca.crt | 47 + .../mbedtls/test/data/server7_int-ca_ca2.crt | 62 + .../mbedtls/test/data/server7_pem_space.crt | 47 + .../test/data/server7_spurious_int-ca.crt | 65 + .../test/data/server7_trailing_space.crt | 47 + third_party/mbedtls/test/data/server8.crt | 18 + third_party/mbedtls/test/data/server8.key | 27 + .../mbedtls/test/data/server8_int-ca2.crt | 36 + .../mbedtls/test/data/server9-bad-mgfhash.crt | 20 + .../mbedtls/test/data/server9-bad-saltlen.crt | 20 + .../mbedtls/test/data/server9-badsign.crt | 19 + .../mbedtls/test/data/server9-defaults.crt | 19 + .../mbedtls/test/data/server9-sha224.crt | 20 + .../mbedtls/test/data/server9-sha256.crt | 20 + .../mbedtls/test/data/server9-sha384.crt | 20 + .../mbedtls/test/data/server9-sha512.crt | 20 + .../mbedtls/test/data/server9-with-ca.crt | 99 + third_party/mbedtls/test/data/server9.crt | 19 + third_party/mbedtls/test/data/server9.key | 15 + .../mbedtls/test/data/server9.req.sha1 | 11 + .../mbedtls/test/data/server9.req.sha224 | 12 + .../mbedtls/test/data/server9.req.sha256 | 12 + .../mbedtls/test/data/server9.req.sha384 | 12 + .../mbedtls/test/data/server9.req.sha512 | 12 + .../mbedtls/test/data/test-ca-alt-good.crt | 41 + third_party/mbedtls/test/data/test-ca-alt.crt | 21 + third_party/mbedtls/test/data/test-ca-alt.csr | 16 + third_party/mbedtls/test/data/test-ca-alt.key | 27 + .../mbedtls/test/data/test-ca-any_policy.crt | 19 + .../test/data/test-ca-any_policy_ec.crt | 12 + .../test-ca-any_policy_with_qualifier.crt | 20 + .../test-ca-any_policy_with_qualifier_ec.crt | 13 + .../mbedtls/test/data/test-ca-good-alt.crt | 41 + .../test/data/test-ca-multi_policy.crt | 19 + .../test/data/test-ca-multi_policy_ec.crt | 12 + .../mbedtls/test/data/test-ca-sha1.crt | 20 + .../mbedtls/test/data/test-ca-sha1.crt.der | Bin 0 -> 837 bytes .../mbedtls/test/data/test-ca-sha256.crt | 20 + .../mbedtls/test/data/test-ca-sha256.crt.der | Bin 0 -> 837 bytes .../test/data/test-ca-unsupported_policy.crt | 19 + .../data/test-ca-unsupported_policy_ec.crt | 12 + third_party/mbedtls/test/data/test-ca-v1.crt | 19 + third_party/mbedtls/test/data/test-ca.crt | 20 + third_party/mbedtls/test/data/test-ca.crt.der | Bin 0 -> 837 bytes third_party/mbedtls/test/data/test-ca.der | Bin 0 -> 837 bytes third_party/mbedtls/test/data/test-ca.key | 30 + third_party/mbedtls/test/data/test-ca.key.der | Bin 0 -> 1192 bytes .../mbedtls/test/data/test-ca.opensslconf | 77 + .../mbedtls/test/data/test-ca.server1.db | 2 + .../test/data/test-ca.server1.future-crl.db | 2 + .../test-ca.server1.future-crl.opensslconf | 18 + .../test/data/test-ca.server1.opensslconf | 18 + .../mbedtls/test/data/test-ca2-expired.crt | 13 + third_party/mbedtls/test/data/test-ca2.crt | 13 + .../mbedtls/test/data/test-ca2.crt.der | Bin 0 -> 520 bytes third_party/mbedtls/test/data/test-ca2.key | 6 + .../mbedtls/test/data/test-ca2.key.der | Bin 0 -> 167 bytes .../mbedtls/test/data/test-ca2.key.enc | 9 + .../mbedtls/test/data/test-ca2.ku-crl.crt | 12 + .../mbedtls/test/data/test-ca2.ku-crt.crt | 12 + .../mbedtls/test/data/test-ca2.ku-crt_crl.crt | 12 + .../mbedtls/test/data/test-ca2.ku-ds.crt | 12 + .../test/data/test-ca2_cat-future-invalid.crt | 27 + .../test/data/test-ca2_cat-future-present.crt | 28 + .../test/data/test-ca2_cat-past-invalid.crt | 27 + .../test/data/test-ca2_cat-past-present.crt | 28 + .../test/data/test-ca2_cat-present-future.crt | 28 + .../test/data/test-ca2_cat-present-past.crt | 28 + .../mbedtls/test/data/test-ca_cat12.crt | 35 + .../mbedtls/test/data/test-ca_cat21.crt | 35 + .../mbedtls/test/data/test-ca_printable.crt | 21 + .../mbedtls/test/data/test-ca_uppercase.crt | 21 + .../mbedtls/test/data/test-ca_utf8.crt | 21 + .../mbedtls/test/data/test-int-ca-exp.crt | 24 + third_party/mbedtls/test/data/test-int-ca.crt | 24 + third_party/mbedtls/test/data/test-int-ca.key | 51 + .../mbedtls/test/data/test-int-ca2.crt | 18 + .../mbedtls/test/data/test-int-ca2.key | 6 + .../test/data/test-int-ca3-badsign.crt | 12 + .../mbedtls/test/data/test-int-ca3.crt | 12 + .../mbedtls/test/data/test-int-ca3.key | 8 + third_party/mbedtls/test/lib.c | 1085 ++ third_party/mbedtls/test/lib.h | 230 + third_party/mbedtls/test/test.inc | 16 + third_party/mbedtls/test/test.mk | 1338 ++ third_party/mbedtls/test/test_suite_aes.cbc.c | 1109 ++ .../mbedtls/test/test_suite_aes.cbc.datax | 216 + third_party/mbedtls/test/test_suite_aes.cfb.c | 1108 ++ .../mbedtls/test/test_suite_aes.cfb.datax | 468 + third_party/mbedtls/test/test_suite_aes.ecb.c | 1099 ++ .../mbedtls/test/test_suite_aes.ecb.datax | 231 + third_party/mbedtls/test/test_suite_aes.ofb.c | 1108 ++ .../mbedtls/test/test_suite_aes.ofb.datax | 32 + .../mbedtls/test/test_suite_aes.rest.c | 1118 ++ .../mbedtls/test/test_suite_aes.rest.datax | 22 + third_party/mbedtls/test/test_suite_aes.xts.c | 1109 ++ .../mbedtls/test/test_suite_aes.xts.datax | 141 + .../mbedtls/test/test_suite_asn1parse.c | 1259 ++ .../mbedtls/test/test_suite_asn1parse.datax | 633 + .../mbedtls/test/test_suite_asn1write.c | 908 ++ .../mbedtls/test/test_suite_asn1write.datax | 369 + third_party/mbedtls/test/test_suite_base64.c | 471 + .../mbedtls/test/test_suite_base64.datax | 187 + .../mbedtls/test/test_suite_blowfish.c | 728 ++ .../mbedtls/test/test_suite_blowfish.datax | 315 + third_party/mbedtls/test/test_suite_ccm.c | 953 ++ third_party/mbedtls/test/test_suite_ccm.datax | 1526 +++ .../mbedtls/test/test_suite_chacha20.c | 413 + .../mbedtls/test/test_suite_chacha20.datax | 30 + .../mbedtls/test/test_suite_chachapoly.c | 619 + .../mbedtls/test/test_suite_chachapoly.datax | 28 + .../mbedtls/test/test_suite_cipher.aes.c | 2238 ++++ .../mbedtls/test/test_suite_cipher.aes.datax | 1804 +++ .../mbedtls/test/test_suite_cipher.blowfish.c | 2114 +++ .../test/test_suite_cipher.blowfish.datax | 608 + .../mbedtls/test/test_suite_cipher.ccm.c | 2065 +++ .../mbedtls/test/test_suite_cipher.ccm.datax | 864 ++ .../mbedtls/test/test_suite_cipher.chacha20.c | 2028 +++ .../test/test_suite_cipher.chacha20.datax | 112 + .../test/test_suite_cipher.chachapoly.c | 2028 +++ .../test/test_suite_cipher.chachapoly.datax | 124 + .../mbedtls/test/test_suite_cipher.des.c | 2031 +++ .../mbedtls/test/test_suite_cipher.des.datax | 604 + .../mbedtls/test/test_suite_cipher.gcm.c | 2099 +++ .../mbedtls/test/test_suite_cipher.gcm.datax | 4748 +++++++ .../mbedtls/test/test_suite_cipher.misc.c | 2009 +++ .../mbedtls/test/test_suite_cipher.misc.datax | 6 + .../mbedtls/test/test_suite_cipher.nist_kw.c | 2062 +++ .../test/test_suite_cipher.nist_kw.datax | 280 + .../mbedtls/test/test_suite_cipher.null.c | 2028 +++ .../mbedtls/test/test_suite_cipher.null.datax | 96 + .../mbedtls/test/test_suite_cipher.padding.c | 2200 ++++ .../test/test_suite_cipher.padding.datax | 236 + .../mbedtls/test/test_suite_ctr_drbg.c | 739 ++ .../mbedtls/test/test_suite_ctr_drbg.datax | 1101 ++ third_party/mbedtls/test/test_suite_des.c | 685 + third_party/mbedtls/test/test_suite_des.datax | 252 + third_party/mbedtls/test/test_suite_dhm.c | 621 + third_party/mbedtls/test/test_suite_dhm.datax | 39 + third_party/mbedtls/test/test_suite_ecdh.c | 1073 ++ .../mbedtls/test/test_suite_ecdh.datax | 110 + third_party/mbedtls/test/test_suite_ecdsa.c | 1007 ++ .../mbedtls/test/test_suite_ecdsa.datax | 327 + third_party/mbedtls/test/test_suite_ecjpake.c | 662 + .../mbedtls/test/test_suite_ecjpake.datax | 237 + third_party/mbedtls/test/test_suite_ecp.c | 1903 +++ third_party/mbedtls/test/test_suite_ecp.datax | 511 + third_party/mbedtls/test/test_suite_entropy.c | 975 ++ .../mbedtls/test/test_suite_entropy.datax | 89 + third_party/mbedtls/test/test_suite_error.c | 328 + .../mbedtls/test/test_suite_error.datax | 21 + .../mbedtls/test/test_suite_gcm.aes128_de.c | 642 + .../test/test_suite_gcm.aes128_de.datax | 680 + .../mbedtls/test/test_suite_gcm.aes128_en.c | 642 + .../test/test_suite_gcm.aes128_en.datax | 680 + .../mbedtls/test/test_suite_gcm.aes192_de.c | 642 + .../test/test_suite_gcm.aes192_de.datax | 680 + .../mbedtls/test/test_suite_gcm.aes192_en.c | 642 + .../test/test_suite_gcm.aes192_en.datax | 680 + .../mbedtls/test/test_suite_gcm.aes256_de.c | 642 + .../test/test_suite_gcm.aes256_de.datax | 680 + .../mbedtls/test/test_suite_gcm.aes256_en.c | 642 + .../test/test_suite_gcm.aes256_en.datax | 680 + .../mbedtls/test/test_suite_gcm.misc.c | 618 + .../mbedtls/test/test_suite_gcm.misc.datax | 6 + third_party/mbedtls/test/test_suite_hkdf.c | 485 + .../mbedtls/test/test_suite_hkdf.datax | 99 + .../mbedtls/test/test_suite_hmac_drbg.misc.c | 700 + .../test/test_suite_hmac_drbg.misc.datax | 83 + .../test/test_suite_hmac_drbg.no_reseed.c | 695 + .../test/test_suite_hmac_drbg.no_reseed.datax | 1200 ++ .../mbedtls/test/test_suite_hmac_drbg.nopr.c | 695 + .../test/test_suite_hmac_drbg.nopr.datax | 1200 ++ .../mbedtls/test/test_suite_hmac_drbg.pr.c | 695 + .../test/test_suite_hmac_drbg.pr.datax | 1200 ++ third_party/mbedtls/test/test_suite_md.c | 875 ++ third_party/mbedtls/test/test_suite_md.datax | 1226 ++ third_party/mbedtls/test/test_suite_mdx.c | 481 + third_party/mbedtls/test/test_suite_mdx.datax | 99 + .../test/test_suite_memory_buffer_alloc.c | 583 + .../test/test_suite_memory_buffer_alloc.datax | 24 + third_party/mbedtls/test/test_suite_mpi.c | 2343 ++++ third_party/mbedtls/test/test_suite_mpi.datax | 1015 ++ third_party/mbedtls/test/test_suite_net.c | 402 + third_party/mbedtls/test/test_suite_net.datax | 9 + third_party/mbedtls/test/test_suite_nist_kw.c | 720 ++ .../mbedtls/test/test_suite_nist_kw.datax | 484 + third_party/mbedtls/test/test_suite_oid.c | 522 + third_party/mbedtls/test/test_suite_oid.datax | 91 + third_party/mbedtls/test/test_suite_pem.c | 375 + third_party/mbedtls/test/test_suite_pem.datax | 39 + third_party/mbedtls/test/test_suite_pk.c | 2113 +++ third_party/mbedtls/test/test_suite_pk.datax | 305 + .../mbedtls/test/test_suite_pkcs1_v15.c | 697 + .../mbedtls/test/test_suite_pkcs1_v15.datax | 132 + .../mbedtls/test/test_suite_pkcs1_v21.c | 639 + .../mbedtls/test/test_suite_pkcs1_v21.datax | 886 ++ third_party/mbedtls/test/test_suite_pkcs5.c | 476 + .../mbedtls/test/test_suite_pkcs5.datax | 215 + third_party/mbedtls/test/test_suite_pkparse.c | 684 + .../mbedtls/test/test_suite_pkparse.datax | 1156 ++ third_party/mbedtls/test/test_suite_pkwrite.c | 430 + .../mbedtls/test/test_suite_pkwrite.datax | 48 + .../mbedtls/test/test_suite_poly1305.c | 426 + .../mbedtls/test/test_suite_poly1305.datax | 43 + third_party/mbedtls/test/test_suite_random.c | 661 + .../mbedtls/test/test_suite_random.datax | 46 + third_party/mbedtls/test/test_suite_rsa.c | 2607 ++++ third_party/mbedtls/test/test_suite_rsa.datax | 608 + third_party/mbedtls/test/test_suite_shax.c | 769 ++ .../mbedtls/test/test_suite_shax.datax | 190 + third_party/mbedtls/test/test_suite_ssl.c | 6424 ++++++++++ third_party/mbedtls/test/test_suite_ssl.datax | 10634 ++++++++++++++++ third_party/mbedtls/test/test_suite_timing.c | 366 + .../mbedtls/test/test_suite_timing.datax | 18 + third_party/mbedtls/test/test_suite_version.c | 372 + .../mbedtls/test/test_suite_version.datax | 16 + .../mbedtls/test/test_suite_x509parse.c | 2719 ++++ .../mbedtls/test/test_suite_x509parse.datax | 2828 ++++ .../mbedtls/test/test_suite_x509write.c | 862 ++ .../mbedtls/test/test_suite_x509write.datax | 113 + third_party/mbedtls/threading.c | 188 - third_party/mbedtls/threading.h | 122 - third_party/mbedtls/timing.c | 525 - third_party/mbedtls/timing.h | 152 - third_party/mbedtls/version.c | 46 - third_party/mbedtls/version.h | 33 +- third_party/mbedtls/version_features.c | 867 -- third_party/mbedtls/x509.c | 420 +- third_party/mbedtls/x509.h | 222 +- third_party/mbedtls/x509_create.c | 25 +- third_party/mbedtls/x509_crl.c | 44 +- third_party/mbedtls/x509_crl.h | 32 +- third_party/mbedtls/x509_crt.c | 1664 ++- third_party/mbedtls/x509_crt.h | 833 +- third_party/mbedtls/x509_csr.c | 115 +- third_party/mbedtls/x509_csr.h | 310 +- third_party/mbedtls/x509write_crt.c | 323 +- third_party/mbedtls/x509write_csr.c | 244 +- third_party/mbedtls/xtea.c | 277 - third_party/mbedtls/xtea.h | 137 - third_party/mbedtls/zeroize.c | 27 + third_party/musl/ftw.h | 14 +- third_party/musl/nftw.c | 2 +- third_party/sqlite3/shell.c | 356 +- third_party/sqlite3/sqlite3.mk | 7 + tool/build/calculator.inc | 1 - tool/build/lib/buffer.c | 27 +- tool/build/runitd.c | 41 +- tool/emacs/c.lang | 1 - tool/emacs/cosmo-c-builtins.el | 3 +- tool/emacs/cosmo-c-types.el | 2 + tool/emacs/cosmo-cpp-constants.el | 1 + tool/emacs/cosmo-stuff.el | 54 +- tool/emacs/ctest-mode.el | 1 - tool/net/.help.txt | 89 +- tool/net/.init.lua | 1 + tool/net/counters.inc | 11 + tool/net/demo/.init.lua | 1 + tool/net/net.mk | 112 +- tool/net/redbean.c | 1306 +- tool/viz/cpuid.c | 13 +- tool/viz/fliphex.c | 29 + .../invmixcolumns.c => tool/viz/ntmaster.c | 86 +- 1032 files changed, 152673 insertions(+), 69310 deletions(-) create mode 100644 examples/stringbuffer.c delete mode 100644 examples/tls.c delete mode 100644 libc/crypto/crypto.mk delete mode 100644 libc/crypto/kaessbox.S delete mode 100644 libc/crypto/kaessboxinverse.S delete mode 100644 libc/crypto/rijndael.c delete mode 100644 libc/crypto/rijndael.h delete mode 100644 libc/crypto/rijndaelinit.c delete mode 100644 libc/crypto/unrijndael.c delete mode 100644 libc/crypto/unrijndaelinit.c delete mode 100644 libc/dns/sorthoststxt.c create mode 100644 libc/nt/advapi32/SystemFunction036.s create mode 100644 libc/nt/enum/lang.h create mode 100644 libc/sock/gethostips.c create mode 100644 libc/sysv/consts/SIGEMT.S rename libc/{rand/devrand.c => zipos/lseek.c} (69%) create mode 100644 net/http/parsehttpresponse.c delete mode 100644 test/libc/crypto/rijndael_test.c delete mode 100644 test/libc/crypto/test.mk create mode 100644 test/libc/dns/resolvehostsreverse_test.c create mode 100644 test/libc/rand/getrandom_test.c create mode 100644 test/net/http/decodebase64_test.c create mode 100644 test/net/http/parsehttpresponse_test.c create mode 100644 test/tool/net/mbedtls_test.c delete mode 100644 third_party/mbedtls/README.md delete mode 100644 third_party/mbedtls/arc4.c delete mode 100644 third_party/mbedtls/arc4.h delete mode 100644 third_party/mbedtls/aria.c delete mode 100644 third_party/mbedtls/aria.h delete mode 100644 third_party/mbedtls/blowfish.c delete mode 100644 third_party/mbedtls/blowfish.h delete mode 100644 third_party/mbedtls/camellia.c delete mode 100644 third_party/mbedtls/camellia.h rename third_party/mbedtls/{check_config.h => check.h} (65%) delete mode 100644 third_party/mbedtls/check_crypto_config.h delete mode 100644 third_party/mbedtls/cmac.c delete mode 100644 third_party/mbedtls/cmac.h delete mode 100644 third_party/mbedtls/compat-1.3.h delete mode 100644 third_party/mbedtls/config_psa.h delete mode 100644 third_party/mbedtls/crypto.h delete mode 100644 third_party/mbedtls/crypto_compat.h delete mode 100644 third_party/mbedtls/crypto_config.h delete mode 100644 third_party/mbedtls/crypto_driver_common.h delete mode 100644 third_party/mbedtls/crypto_extra.h delete mode 100644 third_party/mbedtls/crypto_platform.h delete mode 100644 third_party/mbedtls/crypto_se_driver.h delete mode 100644 third_party/mbedtls/crypto_sizes.h delete mode 100644 third_party/mbedtls/crypto_struct.h delete mode 100644 third_party/mbedtls/crypto_types.h delete mode 100644 third_party/mbedtls/crypto_values.h delete mode 100644 third_party/mbedtls/ecjpake.c delete mode 100644 third_party/mbedtls/ecjpake.h create mode 100644 third_party/mbedtls/endian.h create mode 100644 third_party/mbedtls/everest.c create mode 100644 third_party/mbedtls/everest.h create mode 100644 third_party/mbedtls/getalertdescription.c create mode 100644 third_party/mbedtls/getciphersuitename.c delete mode 100644 third_party/mbedtls/havege.c delete mode 100644 third_party/mbedtls/havege.h create mode 100644 third_party/mbedtls/iana.h create mode 100644 third_party/mbedtls/isciphersuitegood.c delete mode 100644 third_party/mbedtls/md2.c delete mode 100644 third_party/mbedtls/md2.h delete mode 100644 third_party/mbedtls/md4.c delete mode 100644 third_party/mbedtls/md4.h rename libc/rand/g_rando32.c => third_party/mbedtls/mdtype.c (67%) delete mode 100644 third_party/mbedtls/net.h delete mode 100644 third_party/mbedtls/net_sockets.c delete mode 100644 third_party/mbedtls/net_sockets.h delete mode 100644 third_party/mbedtls/padlock.c delete mode 100644 third_party/mbedtls/padlock.h rename libc/rand/rand32.c => third_party/mbedtls/param.c (72%) delete mode 100644 third_party/mbedtls/pkcs11.c delete mode 100644 third_party/mbedtls/pkcs11.h delete mode 100644 third_party/mbedtls/pkcs12.c delete mode 100644 third_party/mbedtls/pkcs12.h rename libc/rand/g_rando64.c => third_party/mbedtls/pktype.c (67%) delete mode 100644 third_party/mbedtls/platform_time.h delete mode 100644 third_party/mbedtls/platform_util.c delete mode 100644 third_party/mbedtls/platform_util.h delete mode 100644 third_party/mbedtls/psa_crypto.c delete mode 100644 third_party/mbedtls/psa_crypto_client.c delete mode 100644 third_party/mbedtls/psa_crypto_core.h delete mode 100644 third_party/mbedtls/psa_crypto_driver_wrappers.c delete mode 100644 third_party/mbedtls/psa_crypto_driver_wrappers.h delete mode 100644 third_party/mbedtls/psa_crypto_ecp.c delete mode 100644 third_party/mbedtls/psa_crypto_ecp.h delete mode 100644 third_party/mbedtls/psa_crypto_invasive.h delete mode 100644 third_party/mbedtls/psa_crypto_its.h delete mode 100644 third_party/mbedtls/psa_crypto_random_impl.h delete mode 100644 third_party/mbedtls/psa_crypto_rsa.c delete mode 100644 third_party/mbedtls/psa_crypto_rsa.h delete mode 100644 third_party/mbedtls/psa_crypto_se.c delete mode 100644 third_party/mbedtls/psa_crypto_se.h delete mode 100644 third_party/mbedtls/psa_crypto_service_integration.h delete mode 100644 third_party/mbedtls/psa_crypto_slot_management.c delete mode 100644 third_party/mbedtls/psa_crypto_slot_management.h delete mode 100644 third_party/mbedtls/psa_crypto_storage.c delete mode 100644 third_party/mbedtls/psa_crypto_storage.h delete mode 100644 third_party/mbedtls/psa_its_file.c delete mode 100644 third_party/mbedtls/psa_util.h delete mode 100644 third_party/mbedtls/ripemd160.c delete mode 100644 third_party/mbedtls/ripemd160.h create mode 100644 third_party/mbedtls/san.c create mode 100644 third_party/mbedtls/san.h delete mode 100644 third_party/mbedtls/sheesh.h rename libc/rand/winrandish.c => third_party/mbedtls/sigalg.c (67%) create mode 100644 third_party/mbedtls/srtp.c create mode 100644 third_party/mbedtls/test/data/.gitignore create mode 100644 third_party/mbedtls/test/data/Makefile create mode 100644 third_party/mbedtls/test/data/Readme-x509.txt create mode 100644 third_party/mbedtls/test/data/base64/cli_cid.txt create mode 100644 third_party/mbedtls/test/data/base64/cli_ciphersuite.txt create mode 100644 third_party/mbedtls/test/data/base64/cli_def.txt create mode 100644 third_party/mbedtls/test/data/base64/cli_min_cfg.txt create mode 100644 third_party/mbedtls/test/data/base64/cli_no_alpn.txt create mode 100644 third_party/mbedtls/test/data/base64/cli_no_keep_cert.txt create mode 100644 third_party/mbedtls/test/data/base64/cli_no_mfl.txt create mode 100644 third_party/mbedtls/test/data/base64/cli_no_packing.txt create mode 100644 third_party/mbedtls/test/data/base64/def_b64_ff.bin create mode 100644 third_party/mbedtls/test/data/base64/def_b64_too_big_1.txt create mode 100644 third_party/mbedtls/test/data/base64/def_b64_too_big_2.txt create mode 100644 third_party/mbedtls/test/data/base64/def_b64_too_big_3.txt create mode 100644 third_party/mbedtls/test/data/base64/def_bad_b64.txt create mode 100644 third_party/mbedtls/test/data/base64/empty.txt create mode 100644 third_party/mbedtls/test/data/base64/mfl_1024.txt create mode 100644 third_party/mbedtls/test/data/base64/mtu_10000.txt create mode 100644 third_party/mbedtls/test/data/base64/srv_cid.txt create mode 100644 third_party/mbedtls/test/data/base64/srv_ciphersuite.txt create mode 100644 third_party/mbedtls/test/data/base64/srv_def.txt create mode 100644 third_party/mbedtls/test/data/base64/srv_min_cfg.txt create mode 100644 third_party/mbedtls/test/data/base64/srv_no_alpn.txt create mode 100644 third_party/mbedtls/test/data/base64/srv_no_keep_cert.txt create mode 100644 third_party/mbedtls/test/data/base64/srv_no_mfl.txt create mode 100644 third_party/mbedtls/test/data/base64/srv_no_packing.txt create mode 100644 third_party/mbedtls/test/data/base64/v2.19.1.txt create mode 100644 third_party/mbedtls/test/data/bitstring-in-dn.pem create mode 100644 third_party/mbedtls/test/data/cert_example_multi.crt create mode 100644 third_party/mbedtls/test/data/cert_example_multi_nocn.crt create mode 100644 third_party/mbedtls/test/data/cert_example_wildcard.crt create mode 100644 third_party/mbedtls/test/data/cert_md2.crt create mode 100644 third_party/mbedtls/test/data/cert_md2.csr create mode 100644 third_party/mbedtls/test/data/cert_md4.crt create mode 100644 third_party/mbedtls/test/data/cert_md4.csr create mode 100644 third_party/mbedtls/test/data/cert_md5.crt create mode 100644 third_party/mbedtls/test/data/cert_md5.csr create mode 100644 third_party/mbedtls/test/data/cert_sha1.crt create mode 100644 third_party/mbedtls/test/data/cert_sha224.crt create mode 100644 third_party/mbedtls/test/data/cert_sha256.crt create mode 100644 third_party/mbedtls/test/data/cert_sha384.crt create mode 100644 third_party/mbedtls/test/data/cert_sha512.crt create mode 100644 third_party/mbedtls/test/data/cert_v1_with_ext.crt create mode 100644 third_party/mbedtls/test/data/cli-rsa-sha1.crt create mode 100644 third_party/mbedtls/test/data/cli-rsa-sha256-badalg.crt.der create mode 100644 third_party/mbedtls/test/data/cli-rsa-sha256.crt create mode 100644 third_party/mbedtls/test/data/cli-rsa-sha256.crt.der create mode 100644 third_party/mbedtls/test/data/cli-rsa-sha256.key.der create mode 100644 third_party/mbedtls/test/data/cli-rsa.key create mode 100644 third_party/mbedtls/test/data/cli-rsa.key.der create mode 100644 third_party/mbedtls/test/data/cli.opensslconf create mode 100644 third_party/mbedtls/test/data/cli2.crt create mode 100644 third_party/mbedtls/test/data/cli2.crt.der create mode 100644 third_party/mbedtls/test/data/cli2.key create mode 100644 third_party/mbedtls/test/data/cli2.key.der create mode 100644 third_party/mbedtls/test/data/crl-ec-sha1.pem create mode 100644 third_party/mbedtls/test/data/crl-ec-sha224.pem create mode 100644 third_party/mbedtls/test/data/crl-ec-sha256.pem create mode 100644 third_party/mbedtls/test/data/crl-ec-sha384.pem create mode 100644 third_party/mbedtls/test/data/crl-ec-sha512.pem create mode 100644 third_party/mbedtls/test/data/crl-future.pem create mode 100644 third_party/mbedtls/test/data/crl-futureRevocationDate.pem create mode 100644 third_party/mbedtls/test/data/crl-idp.pem create mode 100644 third_party/mbedtls/test/data/crl-idpnc.pem create mode 100644 third_party/mbedtls/test/data/crl-malformed-trailing-spaces.pem create mode 100644 third_party/mbedtls/test/data/crl-rsa-pss-sha1-badsign.pem create mode 100644 third_party/mbedtls/test/data/crl-rsa-pss-sha1.pem create mode 100644 third_party/mbedtls/test/data/crl-rsa-pss-sha224.pem create mode 100644 third_party/mbedtls/test/data/crl-rsa-pss-sha256.pem create mode 100644 third_party/mbedtls/test/data/crl-rsa-pss-sha384.pem create mode 100644 third_party/mbedtls/test/data/crl-rsa-pss-sha512.pem create mode 100644 third_party/mbedtls/test/data/crl.pem create mode 100644 third_party/mbedtls/test/data/crl_cat_ec-rsa.pem create mode 100644 third_party/mbedtls/test/data/crl_cat_ecfut-rsa.pem create mode 100644 third_party/mbedtls/test/data/crl_cat_rsa-ec.pem create mode 100644 third_party/mbedtls/test/data/crl_cat_rsabadpem-ec.pem create mode 100644 third_party/mbedtls/test/data/crl_expired.pem create mode 100644 third_party/mbedtls/test/data/crl_md2.pem create mode 100644 third_party/mbedtls/test/data/crl_md4.pem create mode 100644 third_party/mbedtls/test/data/crl_md5.pem create mode 100644 third_party/mbedtls/test/data/crl_sha1.pem create mode 100644 third_party/mbedtls/test/data/crl_sha224.pem create mode 100644 third_party/mbedtls/test/data/crl_sha256.pem create mode 100644 third_party/mbedtls/test/data/crl_sha384.pem create mode 100644 third_party/mbedtls/test/data/crl_sha512.pem create mode 100644 third_party/mbedtls/test/data/crt_cat_rsaexp-ec.pem create mode 100644 third_party/mbedtls/test/data/dh.1000.pem create mode 100644 third_party/mbedtls/test/data/dh.optlen.pem create mode 100644 third_party/mbedtls/test/data/dhparams.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/00.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/00.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/01.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/01.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/02.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/02.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/03.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/03.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/04.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/04.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/05.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/05.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/06.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/06.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/07.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/07.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/08.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/08.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/09.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/09.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/10.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/10.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/11.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/11.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/12.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/12.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/13.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/13.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/14.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/14.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/15.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/15.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/16.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/16.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/17.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/17.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/18.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/18.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/19.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/19.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/20.crt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/20.key create mode 100644 third_party/mbedtls/test/data/dir-maxpath/Readme.txt create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c00.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c01.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c02.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c03.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c04.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c05.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c06.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c07.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c08.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c09.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c10.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c11.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c12.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c13.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c14.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c15.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c16.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c17.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c18.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c19.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/c20.pem create mode 100644 third_party/mbedtls/test/data/dir-maxpath/int.opensslconf create mode 100755 third_party/mbedtls/test/data/dir-maxpath/long.sh create mode 100644 third_party/mbedtls/test/data/dir1/test-ca.crt create mode 100644 third_party/mbedtls/test/data/dir2/test-ca.crt create mode 100644 third_party/mbedtls/test/data/dir2/test-ca2.crt create mode 100644 third_party/mbedtls/test/data/dir3/Readme create mode 100644 third_party/mbedtls/test/data/dir3/test-ca.crt create mode 100644 third_party/mbedtls/test/data/dir3/test-ca2.crt create mode 100644 third_party/mbedtls/test/data/dir4/Readme create mode 100644 third_party/mbedtls/test/data/dir4/cert11.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert12.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert13.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert14.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert21.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert22.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert23.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert31.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert32.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert33.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert34.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert41.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert42.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert43.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert44.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert45.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert51.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert52.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert53.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert54.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert61.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert62.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert63.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert71.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert72.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert73.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert74.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert81.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert82.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert83.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert91.crt create mode 100644 third_party/mbedtls/test/data/dir4/cert92.crt create mode 100644 third_party/mbedtls/test/data/ec_224_prv.pem create mode 100644 third_party/mbedtls/test/data/ec_224_pub.pem create mode 100644 third_party/mbedtls/test/data/ec_256_long_prv.pem create mode 100644 third_party/mbedtls/test/data/ec_256_prv.pem create mode 100644 third_party/mbedtls/test/data/ec_256_pub.pem create mode 100644 third_party/mbedtls/test/data/ec_384_prv.pem create mode 100644 third_party/mbedtls/test/data/ec_384_pub.pem create mode 100644 third_party/mbedtls/test/data/ec_521_prv.pem create mode 100644 third_party/mbedtls/test/data/ec_521_pub.pem create mode 100644 third_party/mbedtls/test/data/ec_521_short_prv.pem create mode 100644 third_party/mbedtls/test/data/ec_bp256_prv.pem create mode 100644 third_party/mbedtls/test/data/ec_bp256_pub.pem create mode 100644 third_party/mbedtls/test/data/ec_bp384_prv.pem create mode 100644 third_party/mbedtls/test/data/ec_bp384_pub.pem create mode 100644 third_party/mbedtls/test/data/ec_bp512_prv.pem create mode 100644 third_party/mbedtls/test/data/ec_bp512_pub.pem create mode 100644 third_party/mbedtls/test/data/ec_prv.pk8.der create mode 100644 third_party/mbedtls/test/data/ec_prv.pk8.pem create mode 100644 third_party/mbedtls/test/data/ec_prv.pk8.pw.der create mode 100644 third_party/mbedtls/test/data/ec_prv.pk8.pw.pem create mode 100644 third_party/mbedtls/test/data/ec_prv.pk8nopub.der create mode 100644 third_party/mbedtls/test/data/ec_prv.pk8nopub.pem create mode 100644 third_party/mbedtls/test/data/ec_prv.pk8nopubparam.der create mode 100644 third_party/mbedtls/test/data/ec_prv.pk8nopubparam.pem create mode 100644 third_party/mbedtls/test/data/ec_prv.pk8param.der create mode 100644 third_party/mbedtls/test/data/ec_prv.pk8param.pem create mode 100644 third_party/mbedtls/test/data/ec_prv.sec1.der create mode 100644 third_party/mbedtls/test/data/ec_prv.sec1.pem create mode 100644 third_party/mbedtls/test/data/ec_prv.sec1.pw.pem create mode 100644 third_party/mbedtls/test/data/ec_prv.specdom.der create mode 100644 third_party/mbedtls/test/data/ec_pub.der create mode 100644 third_party/mbedtls/test/data/ec_pub.pem create mode 100644 third_party/mbedtls/test/data/enco-ca-prstr.pem create mode 100644 third_party/mbedtls/test/data/enco-cert-utf8str.pem create mode 100644 third_party/mbedtls/test/data/format_gen.key create mode 100644 third_party/mbedtls/test/data/format_gen.pub create mode 100644 third_party/mbedtls/test/data/format_pkcs12.fmt create mode 100644 third_party/mbedtls/test/data/format_rsa.key create mode 100644 third_party/mbedtls/test/data/hash_file_1 create mode 100644 third_party/mbedtls/test/data/hash_file_2 create mode 100644 third_party/mbedtls/test/data/hash_file_3 create mode 100644 third_party/mbedtls/test/data/hash_file_4 create mode 100644 third_party/mbedtls/test/data/hash_file_5 create mode 100644 third_party/mbedtls/test/data/keyUsage.decipherOnly.crt create mode 100644 third_party/mbedtls/test/data/mpi_10 create mode 100644 third_party/mbedtls/test/data/mpi_too_big create mode 100644 third_party/mbedtls/test/data/mpi_write create mode 100644 third_party/mbedtls/test/data/multiple_san.crt create mode 100644 third_party/mbedtls/test/data/non-ascii-string-in-issuer.crt create mode 100644 third_party/mbedtls/test/data/passwd.psk create mode 100755 third_party/mbedtls/test/data/print_c.pl create mode 100644 third_party/mbedtls/test/data/rsa4096_prv.pem create mode 100644 third_party/mbedtls/test/data/rsa4096_pub.pem create mode 100644 third_party/mbedtls/test/data/rsa512.key create mode 100644 third_party/mbedtls/test/data/rsa521.key create mode 100644 third_party/mbedtls/test/data/rsa522.key create mode 100644 third_party/mbedtls/test/data/rsa528.key create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_1024_3des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_1024_aes128.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_1024_aes192.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_1024_aes256.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_1024_clear.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_1024_des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_2048_3des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_2048_aes128.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_2048_aes192.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_2048_aes256.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_2048_clear.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_2048_des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_2048_public.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_2048_public.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_4096_3des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_4096_aes128.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_4096_aes192.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_4096_aes256.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_4096_clear.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs1_4096_des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_1024_public.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_2048_public.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_2048_public.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_2des.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_2des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_3des.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_3des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_rc4_128.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_rc4_128.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_2des.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_2des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_3des.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_3des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_rc4_128.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_rc4_128.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_2des.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_2des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_3des.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_3des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_rc4_128.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_rc4_128.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der create mode 100644 third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem create mode 100644 third_party/mbedtls/test/data/server1-ms.req.sha256 create mode 100644 third_party/mbedtls/test/data/server1-nospace.crt create mode 100644 third_party/mbedtls/test/data/server1-v1.crt create mode 100644 third_party/mbedtls/test/data/server1.ca.crt create mode 100644 third_party/mbedtls/test/data/server1.ca.der create mode 100644 third_party/mbedtls/test/data/server1.ca_noauthid.crt create mode 100644 third_party/mbedtls/test/data/server1.cert_type.crt create mode 100644 third_party/mbedtls/test/data/server1.cert_type.crt.openssl.v3_ext create mode 100644 third_party/mbedtls/test/data/server1.cert_type_noauthid.crt create mode 100644 third_party/mbedtls/test/data/server1.crt create mode 100644 third_party/mbedtls/test/data/server1.crt.der create mode 100644 third_party/mbedtls/test/data/server1.crt.openssl.v3_ext create mode 100644 third_party/mbedtls/test/data/server1.csr create mode 100644 third_party/mbedtls/test/data/server1.der create mode 100644 third_party/mbedtls/test/data/server1.ext_ku.crt create mode 100644 third_party/mbedtls/test/data/server1.key create mode 100644 third_party/mbedtls/test/data/server1.key_usage.crt create mode 100644 third_party/mbedtls/test/data/server1.key_usage.crt.openssl.v3_ext create mode 100644 third_party/mbedtls/test/data/server1.key_usage_noauthid.crt create mode 100644 third_party/mbedtls/test/data/server1.noauthid.crt create mode 100644 third_party/mbedtls/test/data/server1.pubkey create mode 100644 third_party/mbedtls/test/data/server1.req.cert_type create mode 100644 third_party/mbedtls/test/data/server1.req.cert_type_empty create mode 100644 third_party/mbedtls/test/data/server1.req.key_usage create mode 100644 third_party/mbedtls/test/data/server1.req.key_usage_empty create mode 100644 third_party/mbedtls/test/data/server1.req.ku-ct create mode 100644 third_party/mbedtls/test/data/server1.req.md4 create mode 100644 third_party/mbedtls/test/data/server1.req.md5 create mode 100644 third_party/mbedtls/test/data/server1.req.sha1 create mode 100644 third_party/mbedtls/test/data/server1.req.sha224 create mode 100644 third_party/mbedtls/test/data/server1.req.sha256 create mode 100644 third_party/mbedtls/test/data/server1.req.sha384 create mode 100644 third_party/mbedtls/test/data/server1.req.sha512 create mode 100644 third_party/mbedtls/test/data/server1.v1.crt create mode 100644 third_party/mbedtls/test/data/server10-badsign.crt create mode 100644 third_party/mbedtls/test/data/server10-bs_int3.pem create mode 100644 third_party/mbedtls/test/data/server10.crt create mode 100644 third_party/mbedtls/test/data/server10.key create mode 100644 third_party/mbedtls/test/data/server10_int3-bs.pem create mode 100644 third_party/mbedtls/test/data/server10_int3_int-ca2.crt create mode 100644 third_party/mbedtls/test/data/server10_int3_int-ca2_ca.crt create mode 100644 third_party/mbedtls/test/data/server10_int3_spurious_int-ca2.crt create mode 100644 third_party/mbedtls/test/data/server1_ca.crt create mode 100644 third_party/mbedtls/test/data/server1_csr.opensslconf create mode 100644 third_party/mbedtls/test/data/server1_pathlen_int_max-1.crt create mode 100644 third_party/mbedtls/test/data/server1_pathlen_int_max.crt create mode 100644 third_party/mbedtls/test/data/server2-badsign.crt create mode 100644 third_party/mbedtls/test/data/server2-sha256.crt create mode 100644 third_party/mbedtls/test/data/server2-sha256.crt.der create mode 100644 third_party/mbedtls/test/data/server2-v1-chain.crt create mode 100644 third_party/mbedtls/test/data/server2-v1.crt create mode 100644 third_party/mbedtls/test/data/server2.crt create mode 100644 third_party/mbedtls/test/data/server2.crt.der create mode 100644 third_party/mbedtls/test/data/server2.der create mode 100644 third_party/mbedtls/test/data/server2.key create mode 100644 third_party/mbedtls/test/data/server2.key.der create mode 100644 third_party/mbedtls/test/data/server2.key.enc create mode 100644 third_party/mbedtls/test/data/server2.ku-ds.crt create mode 100644 third_party/mbedtls/test/data/server2.ku-ds_ke.crt create mode 100644 third_party/mbedtls/test/data/server2.ku-ka.crt create mode 100644 third_party/mbedtls/test/data/server2.ku-ke.crt create mode 100644 third_party/mbedtls/test/data/server3.crt create mode 100644 third_party/mbedtls/test/data/server3.key create mode 100644 third_party/mbedtls/test/data/server4.crt create mode 100644 third_party/mbedtls/test/data/server4.key create mode 100644 third_party/mbedtls/test/data/server5-badsign.crt create mode 100644 third_party/mbedtls/test/data/server5-der0.crt create mode 100644 third_party/mbedtls/test/data/server5-der1a.crt create mode 100644 third_party/mbedtls/test/data/server5-der1b.crt create mode 100644 third_party/mbedtls/test/data/server5-der2.crt create mode 100644 third_party/mbedtls/test/data/server5-der4.crt create mode 100644 third_party/mbedtls/test/data/server5-der8.crt create mode 100644 third_party/mbedtls/test/data/server5-der9.crt create mode 100644 third_party/mbedtls/test/data/server5-expired.crt create mode 100644 third_party/mbedtls/test/data/server5-fan.crt create mode 100644 third_party/mbedtls/test/data/server5-future.crt create mode 100644 third_party/mbedtls/test/data/server5-othername.crt create mode 100644 third_party/mbedtls/test/data/server5-selfsigned.crt create mode 100644 third_party/mbedtls/test/data/server5-sha1.crt create mode 100644 third_party/mbedtls/test/data/server5-sha224.crt create mode 100644 third_party/mbedtls/test/data/server5-sha384.crt create mode 100644 third_party/mbedtls/test/data/server5-sha512.crt create mode 100644 third_party/mbedtls/test/data/server5-ss-expired.crt create mode 100644 third_party/mbedtls/test/data/server5-ss-forgeca.crt create mode 100644 third_party/mbedtls/test/data/server5-tricky-ip-san.crt create mode 100644 third_party/mbedtls/test/data/server5-unsupported_othername.crt create mode 100644 third_party/mbedtls/test/data/server5.crt create mode 100644 third_party/mbedtls/test/data/server5.crt.der create mode 100644 third_party/mbedtls/test/data/server5.eku-cli.crt create mode 100644 third_party/mbedtls/test/data/server5.eku-cs.crt create mode 100644 third_party/mbedtls/test/data/server5.eku-cs_any.crt create mode 100644 third_party/mbedtls/test/data/server5.eku-srv.crt create mode 100644 third_party/mbedtls/test/data/server5.eku-srv_cli.crt create mode 100644 third_party/mbedtls/test/data/server5.key create mode 100644 third_party/mbedtls/test/data/server5.key.der create mode 100644 third_party/mbedtls/test/data/server5.key.enc create mode 100644 third_party/mbedtls/test/data/server5.ku-ds.crt create mode 100644 third_party/mbedtls/test/data/server5.ku-ka.crt create mode 100644 third_party/mbedtls/test/data/server5.ku-ke.crt create mode 100644 third_party/mbedtls/test/data/server5.req.ku.sha1 create mode 100644 third_party/mbedtls/test/data/server5.req.sha1 create mode 100644 third_party/mbedtls/test/data/server5.req.sha224 create mode 100644 third_party/mbedtls/test/data/server5.req.sha256 create mode 100644 third_party/mbedtls/test/data/server5.req.sha384 create mode 100644 third_party/mbedtls/test/data/server5.req.sha512 create mode 100644 third_party/mbedtls/test/data/server6-ss-child.crt create mode 100644 third_party/mbedtls/test/data/server6.crt create mode 100644 third_party/mbedtls/test/data/server6.key create mode 100644 third_party/mbedtls/test/data/server7-badsign.crt create mode 100644 third_party/mbedtls/test/data/server7-expired.crt create mode 100644 third_party/mbedtls/test/data/server7-future.crt create mode 100644 third_party/mbedtls/test/data/server7.crt create mode 100644 third_party/mbedtls/test/data/server7.key create mode 100644 third_party/mbedtls/test/data/server7_all_space.crt create mode 100644 third_party/mbedtls/test/data/server7_int-ca-exp.crt create mode 100644 third_party/mbedtls/test/data/server7_int-ca.crt create mode 100644 third_party/mbedtls/test/data/server7_int-ca_ca2.crt create mode 100644 third_party/mbedtls/test/data/server7_pem_space.crt create mode 100644 third_party/mbedtls/test/data/server7_spurious_int-ca.crt create mode 100644 third_party/mbedtls/test/data/server7_trailing_space.crt create mode 100644 third_party/mbedtls/test/data/server8.crt create mode 100644 third_party/mbedtls/test/data/server8.key create mode 100644 third_party/mbedtls/test/data/server8_int-ca2.crt create mode 100644 third_party/mbedtls/test/data/server9-bad-mgfhash.crt create mode 100644 third_party/mbedtls/test/data/server9-bad-saltlen.crt create mode 100644 third_party/mbedtls/test/data/server9-badsign.crt create mode 100644 third_party/mbedtls/test/data/server9-defaults.crt create mode 100644 third_party/mbedtls/test/data/server9-sha224.crt create mode 100644 third_party/mbedtls/test/data/server9-sha256.crt create mode 100644 third_party/mbedtls/test/data/server9-sha384.crt create mode 100644 third_party/mbedtls/test/data/server9-sha512.crt create mode 100644 third_party/mbedtls/test/data/server9-with-ca.crt create mode 100644 third_party/mbedtls/test/data/server9.crt create mode 100644 third_party/mbedtls/test/data/server9.key create mode 100644 third_party/mbedtls/test/data/server9.req.sha1 create mode 100644 third_party/mbedtls/test/data/server9.req.sha224 create mode 100644 third_party/mbedtls/test/data/server9.req.sha256 create mode 100644 third_party/mbedtls/test/data/server9.req.sha384 create mode 100644 third_party/mbedtls/test/data/server9.req.sha512 create mode 100644 third_party/mbedtls/test/data/test-ca-alt-good.crt create mode 100644 third_party/mbedtls/test/data/test-ca-alt.crt create mode 100644 third_party/mbedtls/test/data/test-ca-alt.csr create mode 100644 third_party/mbedtls/test/data/test-ca-alt.key create mode 100644 third_party/mbedtls/test/data/test-ca-any_policy.crt create mode 100644 third_party/mbedtls/test/data/test-ca-any_policy_ec.crt create mode 100644 third_party/mbedtls/test/data/test-ca-any_policy_with_qualifier.crt create mode 100644 third_party/mbedtls/test/data/test-ca-any_policy_with_qualifier_ec.crt create mode 100644 third_party/mbedtls/test/data/test-ca-good-alt.crt create mode 100644 third_party/mbedtls/test/data/test-ca-multi_policy.crt create mode 100644 third_party/mbedtls/test/data/test-ca-multi_policy_ec.crt create mode 100644 third_party/mbedtls/test/data/test-ca-sha1.crt create mode 100644 third_party/mbedtls/test/data/test-ca-sha1.crt.der create mode 100644 third_party/mbedtls/test/data/test-ca-sha256.crt create mode 100644 third_party/mbedtls/test/data/test-ca-sha256.crt.der create mode 100644 third_party/mbedtls/test/data/test-ca-unsupported_policy.crt create mode 100644 third_party/mbedtls/test/data/test-ca-unsupported_policy_ec.crt create mode 100644 third_party/mbedtls/test/data/test-ca-v1.crt create mode 100644 third_party/mbedtls/test/data/test-ca.crt create mode 100644 third_party/mbedtls/test/data/test-ca.crt.der create mode 100644 third_party/mbedtls/test/data/test-ca.der create mode 100644 third_party/mbedtls/test/data/test-ca.key create mode 100644 third_party/mbedtls/test/data/test-ca.key.der create mode 100644 third_party/mbedtls/test/data/test-ca.opensslconf create mode 100644 third_party/mbedtls/test/data/test-ca.server1.db create mode 100644 third_party/mbedtls/test/data/test-ca.server1.future-crl.db create mode 100644 third_party/mbedtls/test/data/test-ca.server1.future-crl.opensslconf create mode 100644 third_party/mbedtls/test/data/test-ca.server1.opensslconf create mode 100644 third_party/mbedtls/test/data/test-ca2-expired.crt create mode 100644 third_party/mbedtls/test/data/test-ca2.crt create mode 100644 third_party/mbedtls/test/data/test-ca2.crt.der create mode 100644 third_party/mbedtls/test/data/test-ca2.key create mode 100644 third_party/mbedtls/test/data/test-ca2.key.der create mode 100644 third_party/mbedtls/test/data/test-ca2.key.enc create mode 100644 third_party/mbedtls/test/data/test-ca2.ku-crl.crt create mode 100644 third_party/mbedtls/test/data/test-ca2.ku-crt.crt create mode 100644 third_party/mbedtls/test/data/test-ca2.ku-crt_crl.crt create mode 100644 third_party/mbedtls/test/data/test-ca2.ku-ds.crt create mode 100644 third_party/mbedtls/test/data/test-ca2_cat-future-invalid.crt create mode 100644 third_party/mbedtls/test/data/test-ca2_cat-future-present.crt create mode 100644 third_party/mbedtls/test/data/test-ca2_cat-past-invalid.crt create mode 100644 third_party/mbedtls/test/data/test-ca2_cat-past-present.crt create mode 100644 third_party/mbedtls/test/data/test-ca2_cat-present-future.crt create mode 100644 third_party/mbedtls/test/data/test-ca2_cat-present-past.crt create mode 100644 third_party/mbedtls/test/data/test-ca_cat12.crt create mode 100644 third_party/mbedtls/test/data/test-ca_cat21.crt create mode 100644 third_party/mbedtls/test/data/test-ca_printable.crt create mode 100644 third_party/mbedtls/test/data/test-ca_uppercase.crt create mode 100644 third_party/mbedtls/test/data/test-ca_utf8.crt create mode 100644 third_party/mbedtls/test/data/test-int-ca-exp.crt create mode 100644 third_party/mbedtls/test/data/test-int-ca.crt create mode 100644 third_party/mbedtls/test/data/test-int-ca.key create mode 100644 third_party/mbedtls/test/data/test-int-ca2.crt create mode 100644 third_party/mbedtls/test/data/test-int-ca2.key create mode 100644 third_party/mbedtls/test/data/test-int-ca3-badsign.crt create mode 100644 third_party/mbedtls/test/data/test-int-ca3.crt create mode 100644 third_party/mbedtls/test/data/test-int-ca3.key create mode 100644 third_party/mbedtls/test/lib.c create mode 100644 third_party/mbedtls/test/lib.h create mode 100644 third_party/mbedtls/test/test.inc create mode 100644 third_party/mbedtls/test/test.mk create mode 100644 third_party/mbedtls/test/test_suite_aes.cbc.c create mode 100644 third_party/mbedtls/test/test_suite_aes.cbc.datax create mode 100644 third_party/mbedtls/test/test_suite_aes.cfb.c create mode 100644 third_party/mbedtls/test/test_suite_aes.cfb.datax create mode 100644 third_party/mbedtls/test/test_suite_aes.ecb.c create mode 100644 third_party/mbedtls/test/test_suite_aes.ecb.datax create mode 100644 third_party/mbedtls/test/test_suite_aes.ofb.c create mode 100644 third_party/mbedtls/test/test_suite_aes.ofb.datax create mode 100644 third_party/mbedtls/test/test_suite_aes.rest.c create mode 100644 third_party/mbedtls/test/test_suite_aes.rest.datax create mode 100644 third_party/mbedtls/test/test_suite_aes.xts.c create mode 100644 third_party/mbedtls/test/test_suite_aes.xts.datax create mode 100644 third_party/mbedtls/test/test_suite_asn1parse.c create mode 100644 third_party/mbedtls/test/test_suite_asn1parse.datax create mode 100644 third_party/mbedtls/test/test_suite_asn1write.c create mode 100644 third_party/mbedtls/test/test_suite_asn1write.datax create mode 100644 third_party/mbedtls/test/test_suite_base64.c create mode 100644 third_party/mbedtls/test/test_suite_base64.datax create mode 100644 third_party/mbedtls/test/test_suite_blowfish.c create mode 100644 third_party/mbedtls/test/test_suite_blowfish.datax create mode 100644 third_party/mbedtls/test/test_suite_ccm.c create mode 100644 third_party/mbedtls/test/test_suite_ccm.datax create mode 100644 third_party/mbedtls/test/test_suite_chacha20.c create mode 100644 third_party/mbedtls/test/test_suite_chacha20.datax create mode 100644 third_party/mbedtls/test/test_suite_chachapoly.c create mode 100644 third_party/mbedtls/test/test_suite_chachapoly.datax create mode 100644 third_party/mbedtls/test/test_suite_cipher.aes.c create mode 100644 third_party/mbedtls/test/test_suite_cipher.aes.datax create mode 100644 third_party/mbedtls/test/test_suite_cipher.blowfish.c create mode 100644 third_party/mbedtls/test/test_suite_cipher.blowfish.datax create mode 100644 third_party/mbedtls/test/test_suite_cipher.ccm.c create mode 100644 third_party/mbedtls/test/test_suite_cipher.ccm.datax create mode 100644 third_party/mbedtls/test/test_suite_cipher.chacha20.c create mode 100644 third_party/mbedtls/test/test_suite_cipher.chacha20.datax create mode 100644 third_party/mbedtls/test/test_suite_cipher.chachapoly.c create mode 100644 third_party/mbedtls/test/test_suite_cipher.chachapoly.datax create mode 100644 third_party/mbedtls/test/test_suite_cipher.des.c create mode 100644 third_party/mbedtls/test/test_suite_cipher.des.datax create mode 100644 third_party/mbedtls/test/test_suite_cipher.gcm.c create mode 100644 third_party/mbedtls/test/test_suite_cipher.gcm.datax create mode 100644 third_party/mbedtls/test/test_suite_cipher.misc.c create mode 100644 third_party/mbedtls/test/test_suite_cipher.misc.datax create mode 100644 third_party/mbedtls/test/test_suite_cipher.nist_kw.c create mode 100644 third_party/mbedtls/test/test_suite_cipher.nist_kw.datax create mode 100644 third_party/mbedtls/test/test_suite_cipher.null.c create mode 100644 third_party/mbedtls/test/test_suite_cipher.null.datax create mode 100644 third_party/mbedtls/test/test_suite_cipher.padding.c create mode 100644 third_party/mbedtls/test/test_suite_cipher.padding.datax create mode 100644 third_party/mbedtls/test/test_suite_ctr_drbg.c create mode 100644 third_party/mbedtls/test/test_suite_ctr_drbg.datax create mode 100644 third_party/mbedtls/test/test_suite_des.c create mode 100644 third_party/mbedtls/test/test_suite_des.datax create mode 100644 third_party/mbedtls/test/test_suite_dhm.c create mode 100644 third_party/mbedtls/test/test_suite_dhm.datax create mode 100644 third_party/mbedtls/test/test_suite_ecdh.c create mode 100644 third_party/mbedtls/test/test_suite_ecdh.datax create mode 100644 third_party/mbedtls/test/test_suite_ecdsa.c create mode 100644 third_party/mbedtls/test/test_suite_ecdsa.datax create mode 100644 third_party/mbedtls/test/test_suite_ecjpake.c create mode 100644 third_party/mbedtls/test/test_suite_ecjpake.datax create mode 100644 third_party/mbedtls/test/test_suite_ecp.c create mode 100644 third_party/mbedtls/test/test_suite_ecp.datax create mode 100644 third_party/mbedtls/test/test_suite_entropy.c create mode 100644 third_party/mbedtls/test/test_suite_entropy.datax create mode 100644 third_party/mbedtls/test/test_suite_error.c create mode 100644 third_party/mbedtls/test/test_suite_error.datax create mode 100644 third_party/mbedtls/test/test_suite_gcm.aes128_de.c create mode 100644 third_party/mbedtls/test/test_suite_gcm.aes128_de.datax create mode 100644 third_party/mbedtls/test/test_suite_gcm.aes128_en.c create mode 100644 third_party/mbedtls/test/test_suite_gcm.aes128_en.datax create mode 100644 third_party/mbedtls/test/test_suite_gcm.aes192_de.c create mode 100644 third_party/mbedtls/test/test_suite_gcm.aes192_de.datax create mode 100644 third_party/mbedtls/test/test_suite_gcm.aes192_en.c create mode 100644 third_party/mbedtls/test/test_suite_gcm.aes192_en.datax create mode 100644 third_party/mbedtls/test/test_suite_gcm.aes256_de.c create mode 100644 third_party/mbedtls/test/test_suite_gcm.aes256_de.datax create mode 100644 third_party/mbedtls/test/test_suite_gcm.aes256_en.c create mode 100644 third_party/mbedtls/test/test_suite_gcm.aes256_en.datax create mode 100644 third_party/mbedtls/test/test_suite_gcm.misc.c create mode 100644 third_party/mbedtls/test/test_suite_gcm.misc.datax create mode 100644 third_party/mbedtls/test/test_suite_hkdf.c create mode 100644 third_party/mbedtls/test/test_suite_hkdf.datax create mode 100644 third_party/mbedtls/test/test_suite_hmac_drbg.misc.c create mode 100644 third_party/mbedtls/test/test_suite_hmac_drbg.misc.datax create mode 100644 third_party/mbedtls/test/test_suite_hmac_drbg.no_reseed.c create mode 100644 third_party/mbedtls/test/test_suite_hmac_drbg.no_reseed.datax create mode 100644 third_party/mbedtls/test/test_suite_hmac_drbg.nopr.c create mode 100644 third_party/mbedtls/test/test_suite_hmac_drbg.nopr.datax create mode 100644 third_party/mbedtls/test/test_suite_hmac_drbg.pr.c create mode 100644 third_party/mbedtls/test/test_suite_hmac_drbg.pr.datax create mode 100644 third_party/mbedtls/test/test_suite_md.c create mode 100644 third_party/mbedtls/test/test_suite_md.datax create mode 100644 third_party/mbedtls/test/test_suite_mdx.c create mode 100644 third_party/mbedtls/test/test_suite_mdx.datax create mode 100644 third_party/mbedtls/test/test_suite_memory_buffer_alloc.c create mode 100644 third_party/mbedtls/test/test_suite_memory_buffer_alloc.datax create mode 100644 third_party/mbedtls/test/test_suite_mpi.c create mode 100644 third_party/mbedtls/test/test_suite_mpi.datax create mode 100644 third_party/mbedtls/test/test_suite_net.c create mode 100644 third_party/mbedtls/test/test_suite_net.datax create mode 100644 third_party/mbedtls/test/test_suite_nist_kw.c create mode 100644 third_party/mbedtls/test/test_suite_nist_kw.datax create mode 100644 third_party/mbedtls/test/test_suite_oid.c create mode 100644 third_party/mbedtls/test/test_suite_oid.datax create mode 100644 third_party/mbedtls/test/test_suite_pem.c create mode 100644 third_party/mbedtls/test/test_suite_pem.datax create mode 100644 third_party/mbedtls/test/test_suite_pk.c create mode 100644 third_party/mbedtls/test/test_suite_pk.datax create mode 100644 third_party/mbedtls/test/test_suite_pkcs1_v15.c create mode 100644 third_party/mbedtls/test/test_suite_pkcs1_v15.datax create mode 100644 third_party/mbedtls/test/test_suite_pkcs1_v21.c create mode 100644 third_party/mbedtls/test/test_suite_pkcs1_v21.datax create mode 100644 third_party/mbedtls/test/test_suite_pkcs5.c create mode 100644 third_party/mbedtls/test/test_suite_pkcs5.datax create mode 100644 third_party/mbedtls/test/test_suite_pkparse.c create mode 100644 third_party/mbedtls/test/test_suite_pkparse.datax create mode 100644 third_party/mbedtls/test/test_suite_pkwrite.c create mode 100644 third_party/mbedtls/test/test_suite_pkwrite.datax create mode 100644 third_party/mbedtls/test/test_suite_poly1305.c create mode 100644 third_party/mbedtls/test/test_suite_poly1305.datax create mode 100644 third_party/mbedtls/test/test_suite_random.c create mode 100644 third_party/mbedtls/test/test_suite_random.datax create mode 100644 third_party/mbedtls/test/test_suite_rsa.c create mode 100644 third_party/mbedtls/test/test_suite_rsa.datax create mode 100644 third_party/mbedtls/test/test_suite_shax.c create mode 100644 third_party/mbedtls/test/test_suite_shax.datax create mode 100644 third_party/mbedtls/test/test_suite_ssl.c create mode 100644 third_party/mbedtls/test/test_suite_ssl.datax create mode 100644 third_party/mbedtls/test/test_suite_timing.c create mode 100644 third_party/mbedtls/test/test_suite_timing.datax create mode 100644 third_party/mbedtls/test/test_suite_version.c create mode 100644 third_party/mbedtls/test/test_suite_version.datax create mode 100644 third_party/mbedtls/test/test_suite_x509parse.c create mode 100644 third_party/mbedtls/test/test_suite_x509parse.datax create mode 100644 third_party/mbedtls/test/test_suite_x509write.c create mode 100644 third_party/mbedtls/test/test_suite_x509write.datax delete mode 100644 third_party/mbedtls/threading.c delete mode 100644 third_party/mbedtls/threading.h delete mode 100644 third_party/mbedtls/timing.c delete mode 100644 third_party/mbedtls/timing.h delete mode 100644 third_party/mbedtls/version.c delete mode 100644 third_party/mbedtls/version_features.c delete mode 100644 third_party/mbedtls/xtea.c delete mode 100644 third_party/mbedtls/xtea.h create mode 100644 third_party/mbedtls/zeroize.c create mode 100644 tool/viz/fliphex.c rename libc/crypto/invmixcolumns.c => tool/viz/ntmaster.c (56%) diff --git a/Makefile b/Makefile index 39befd1de..bfc3cb0cd 100644 --- a/Makefile +++ b/Makefile @@ -129,15 +129,15 @@ include libc/libc.mk #─┘ include libc/sock/sock.mk #─┐ include dsp/tty/tty.mk # ├──ONLINE RUNTIME include libc/dns/dns.mk # │ You can communicate with the network -include libc/crypto/crypto.mk # │ -include net/http/http.mk #─┘ -include third_party/regex/regex.mk +include net/http/http.mk # │ +include third_party/regex/regex.mk #─┘ include third_party/third_party.mk include libc/testlib/testlib.mk include tool/viz/lib/vizlib.mk include third_party/lua/lua.mk include third_party/sqlite3/sqlite3.mk include third_party/mbedtls/mbedtls.mk +include third_party/mbedtls/test/test.mk include third_party/quickjs/quickjs.mk include third_party/lz4cli/lz4cli.mk include third_party/infozip/infozip.mk @@ -162,7 +162,6 @@ include test/libc/nexgen32e/test.mk include test/libc/runtime/test.mk include test/libc/sock/test.mk include test/libc/bits/test.mk -include test/libc/crypto/test.mk include test/libc/str/test.mk include test/libc/unicode/test.mk include test/libc/calls/test.mk @@ -237,7 +236,6 @@ loc: o/$(MODE)/tool/build/summy.com $(XARGS) wc -l | grep total | awk '{print $$1}' | $< COSMOPOLITAN_OBJECTS = \ - LIBC_CRYPTO \ LIBC_DNS \ LIBC_SOCK \ LIBC_NT_WS2_32 \ @@ -287,7 +285,6 @@ COSMOPOLITAN_HEADERS = \ LIBC_ALG \ LIBC_BITS \ LIBC_CALLS \ - LIBC_CRYPTO \ LIBC_DNS \ LIBC_ELF \ LIBC_FMT \ diff --git a/examples/examples.mk b/examples/examples.mk index d3390ea1c..577184647 100644 --- a/examples/examples.mk +++ b/examples/examples.mk @@ -45,6 +45,7 @@ EXAMPLES_DIRECTDEPS = \ LIBC_LOG \ LIBC_MEM \ LIBC_NEXGEN32E \ + LIBC_NT_IPHLPAPI \ LIBC_NT_KERNEL32 \ LIBC_NT_NTDLL \ LIBC_NT_USER32 \ @@ -69,8 +70,8 @@ EXAMPLES_DIRECTDEPS = \ THIRD_PARTY_DLMALLOC \ THIRD_PARTY_GDTOA \ THIRD_PARTY_GETOPT \ - THIRD_PARTY_MBEDTLS \ THIRD_PARTY_LUA \ + THIRD_PARTY_MBEDTLS \ THIRD_PARTY_MUSL \ THIRD_PARTY_STB \ THIRD_PARTY_XED \ diff --git a/examples/rusage.c b/examples/rusage.c index 47bd9deb1..1e74bc918 100644 --- a/examples/rusage.c +++ b/examples/rusage.c @@ -8,58 +8,116 @@ ╚─────────────────────────────────────────────────────────────────*/ #endif #include "libc/calls/calls.h" +#include "libc/calls/sigbits.h" #include "libc/calls/struct/rusage.h" +#include "libc/errno.h" #include "libc/log/check.h" #include "libc/log/log.h" #include "libc/math.h" +#include "libc/runtime/clktck.h" #include "libc/runtime/runtime.h" #include "libc/stdio/stdio.h" #include "libc/str/str.h" #include "libc/sysv/consts/fileno.h" +#include "libc/sysv/consts/sig.h" #include "libc/time/time.h" -void Show(const char *name, long measurement, const char *unit) { - fprintf(stderr, "%-*s%,*d %s\n", 32, name, 32, measurement, unit); +#define PREFIX "\e[1mRL\e[0m: " + +static void PrintResourceReport(struct rusage *ru) { + long utime, stime; + long double ticks; + if (ru->ru_maxrss) { + fprintf(stderr, "%sballooned to %,ldkb in size\n", PREFIX, ru->ru_maxrss); + } + if ((utime = ru->ru_utime.tv_sec * 1000000 + ru->ru_utime.tv_usec) | + (stime = ru->ru_stime.tv_sec * 1000000 + ru->ru_stime.tv_usec)) { + ticks = ceill((long double)(utime + stime) / (1000000.L / CLK_TCK)); + fprintf(stderr, "%sneeded %,ldµs cpu (%d%% kernel)\n", PREFIX, + utime + stime, (int)((long double)stime / (utime + stime) * 100)); + if (ru->ru_idrss) { + fprintf(stderr, "%sneeded %,ldkb memory on average\n", PREFIX, + lroundl(ru->ru_idrss / ticks)); + } + if (ru->ru_isrss) { + fprintf(stderr, "%sneeded %,ldkb stack on average\n", PREFIX, + lroundl(ru->ru_isrss / ticks)); + } + if (ru->ru_ixrss) { + fprintf(stderr, "%smapped %,ldkb shared on average\n", PREFIX, + lroundl(ru->ru_ixrss / ticks)); + } + } + if (ru->ru_minflt || ru->ru_majflt) { + fprintf(stderr, "%scaused %,ld page faults (%d%% memcpy)\n", PREFIX, + ru->ru_minflt + ru->ru_majflt, + (int)((long double)ru->ru_minflt / (ru->ru_minflt + ru->ru_majflt) * + 100)); + } + if (ru->ru_nvcsw + ru->ru_nivcsw > 1) { + fprintf(stderr, "%s%,ld context switches (%d%% consensual)\n", PREFIX, + ru->ru_nvcsw + ru->ru_nivcsw, + (int)((long double)ru->ru_nvcsw / (ru->ru_nvcsw + ru->ru_nivcsw) * + 100)); + } + if (ru->ru_msgrcv || ru->ru_msgsnd) { + fprintf(stderr, "%sreceived %,ld message%s and sent %,ld\n", PREFIX, + ru->ru_msgrcv, ru->ru_msgrcv == 1 ? "" : "s", ru->ru_msgsnd); + } + if (ru->ru_inblock || ru->ru_oublock) { + fprintf(stderr, "%sperformed %,ld read%s and %,ld write i/o operations\n", + PREFIX, ru->ru_inblock, ru->ru_inblock == 1 ? "" : "s", + ru->ru_oublock); + } + if (ru->ru_nsignals) { + fprintf(stderr, "%sreceived %,ld signals\n", PREFIX, ru->ru_nsignals); + } + if (ru->ru_nswap) { + fprintf(stderr, "%sgot swapped %,ld times\n", PREFIX, ru->ru_nswap); + } } -long TvToNs(struct timeval tv) { - return tv.tv_sec * 1000000000 + tv.tv_usec * 1000; -} +struct rusage rusage; int main(int argc, char *argv[]) { int pid, wstatus; long double ts1, ts2; - struct rusage rusage; + sigset_t chldmask, savemask; + struct sigaction dflt, ignore, saveint, savequit; if (argc < 2) { fprintf(stderr, "Usage: %s PROG [ARGS...]\n", argv[0]); return 1; } - memset(&rusage, -1, sizeof(rusage)); - CHECK_GT(argc, 1); + dflt.sa_flags = 0; + dflt.sa_handler = SIG_DFL; + sigemptyset(&dflt.sa_mask); + ignore.sa_flags = 0; + ignore.sa_handler = SIG_IGN; + sigemptyset(&ignore.sa_mask); + sigaction(SIGINT, &ignore, &saveint); + sigaction(SIGQUIT, &ignore, &savequit); + sigemptyset(&chldmask); + sigaddset(&chldmask, SIGCHLD); + sigprocmask(SIG_BLOCK, &chldmask, &savemask); ts1 = nowl(); - if (!(pid = vfork())) { + CHECK_NE(-1, (pid = vfork())); + if (!pid) { + sigaction(SIGINT, &dflt, 0); + sigaction(SIGQUIT, &dflt, 0); + sigprocmask(SIG_SETMASK, &savemask, 0); execvp(argv[1], argv + 1); - abort(); + _Exit(127); + } + while (wait4(pid, &wstatus, 0, &rusage) == -1) { + CHECK_EQ(EINTR, errno); } - CHECK_NE(-1, wait4(pid, &wstatus, 0, &rusage)); ts2 = nowl(); - Show("wall time", lroundl((ts2 - ts1) * 1e9l), "ns"); - Show("user time", TvToNs(rusage.ru_utime), "ns"); - Show("sys time", TvToNs(rusage.ru_stime), "ns"); - Show("maximum resident set size", rusage.ru_maxrss, ""); - Show("integral shared memory size", rusage.ru_ixrss, ""); - Show("integral unshared data size", rusage.ru_idrss, ""); - Show("integral unshared stack size", rusage.ru_isrss, ""); - Show("minor page faults", rusage.ru_minflt, ""); - Show("major page faults", rusage.ru_majflt, ""); - Show("swaps", rusage.ru_nswap, ""); - Show("block input ops", rusage.ru_inblock, ""); - Show("block output ops", rusage.ru_oublock, ""); - Show("ipc messages sent", rusage.ru_msgsnd, ""); - Show("ipc messages received", rusage.ru_msgrcv, ""); - Show("signals received", rusage.ru_nsignals, ""); - Show("voluntary context switches", rusage.ru_nvcsw, ""); - Show("involuntary context switches", rusage.ru_nivcsw, ""); + sigaction(SIGINT, &saveint, 0); + sigaction(SIGQUIT, &savequit, 0); + sigprocmask(SIG_SETMASK, &savemask, 0); + fprintf(stderr, "%stook %,ldµs wall time\n", PREFIX, + (int64_t)((ts2 - ts1) * 1e6)); + PrintResourceReport(&rusage); if (WIFEXITED(wstatus)) { return WEXITSTATUS(wstatus); } else { diff --git a/examples/stringbuffer.c b/examples/stringbuffer.c new file mode 100644 index 000000000..b215aae8a --- /dev/null +++ b/examples/stringbuffer.c @@ -0,0 +1,55 @@ +#if 0 +/*─────────────────────────────────────────────────────────────────╗ +│ To the extent possible under law, Justine Tunney has waived │ +│ all copyright and related or neighboring rights to this file, │ +│ as it is written in the following disclaimers: │ +│ • http://unlicense.org/ │ +│ • http://creativecommons.org/publicdomain/zero/1.0/ │ +╚─────────────────────────────────────────────────────────────────*/ +#endif +#include "libc/calls/calls.h" +#include "libc/fmt/fmt.h" + +/** + * @fileoverview Fast Growable Strings Tutorial + */ + +struct Buffer { + size_t i, n; + char *p; +}; + +int AppendFmt(struct Buffer *b, const char *fmt, ...) { + int n; + char *p; + va_list va, vb; + va_start(va, fmt); + va_copy(vb, va); + n = vsnprintf(b->p + b->i, b->n - b->i, fmt, va); + if (n >= b->n - b->i) { + do { + if (b->n) { + b->n += b->n >> 1; /* this is the important line */ + } else { + b->n = 16; + } + } while (b->i + n > b->n); + b->p = realloc(b->p, b->n); + vsnprintf(b->p + b->i, b->n - b->i, fmt, vb); + } + va_end(vb); + va_end(va); + b->i += n; + return n; +} + +int main(int argc, char *argv[]) { + struct Buffer b = {0}; + AppendFmt(&b, "hello "); + AppendFmt(&b, " world\n"); + AppendFmt(&b, "%d arg%s\n", argc, argc == 1 ? "" : "s"); + AppendFmt(&b, "%s\n", "have a nice day"); + write(1, b.p, b.i); + free(b.p); + return 0; +} diff --git a/examples/tls.c b/examples/tls.c deleted file mode 100644 index 6383bbad1..000000000 --- a/examples/tls.c +++ /dev/null @@ -1,153 +0,0 @@ -#if 0 -/*─────────────────────────────────────────────────────────────────╗ -│ To the extent possible under law, Justine Tunney has waived │ -│ all copyright and related or neighboring rights to this file, │ -│ as it is written in the following disclaimers: │ -│ • http://unlicense.org/ │ -│ • http://creativecommons.org/publicdomain/zero/1.0/ │ -╚─────────────────────────────────────────────────────────────────*/ -#endif -#include "libc/log/check.h" -#include "libc/stdio/stdio.h" -#include "libc/str/str.h" -#include "third_party/mbedtls/ctr_drbg.h" -#include "third_party/mbedtls/dhm.h" -#include "third_party/mbedtls/entropy.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/net_sockets.h" -#include "third_party/mbedtls/pk.h" -#include "third_party/mbedtls/platform.h" -#include "third_party/mbedtls/ssl.h" -#include "third_party/mbedtls/ssl_cache.h" -#include "third_party/mbedtls/x509_crt.h" - -#define R(e) \ - if ((r = e)) goto Die - -char buf[1024], ebuf[100]; -mbedtls_net_context server, client; -mbedtls_x509_crt cert; -mbedtls_x509_crt cacert; -mbedtls_entropy_context entropy; -mbedtls_ssl_cache_context cache; -mbedtls_ctr_drbg_context ctrdrbg; -mbedtls_pk_context pkey; -mbedtls_ssl_config conf; -mbedtls_ssl_context ssl; - -void OnDebug(void *ctx, int lev, const char *file, int line, const char *str) { - fprintf(stderr, "%s:%04d: %s", file, line, str); - fflush(stderr); -} - -int main(int argc, char *argv[]) { - int r, len; - - system("openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem " - "-days 3650 -nodes -subj '/CN=localhost'"); - - mbedtls_net_init(&server); - mbedtls_net_init(&client); - mbedtls_ssl_init(&ssl); - mbedtls_ssl_config_init(&conf); - mbedtls_ssl_cache_init(&cache); - mbedtls_entropy_init(&entropy); - mbedtls_x509_crt_init(&cert); - mbedtls_pk_init(&pkey); - mbedtls_ctr_drbg_init(&ctrdrbg); - - R(mbedtls_pk_parse_keyfile(&pkey, "key.pem", 0)); - R(mbedtls_x509_crt_parse_file(&cert, "cert.pem")); - R(mbedtls_net_bind(&server, "0.0.0.0", "8080", MBEDTLS_NET_PROTO_TCP)); - R(mbedtls_ctr_drbg_seed(&ctrdrbg, mbedtls_entropy_func, &entropy, - (const unsigned char *)"redbean", 7)); - R(mbedtls_ssl_config_defaults(&conf, MBEDTLS_SSL_IS_SERVER, - MBEDTLS_SSL_TRANSPORT_STREAM, - MBEDTLS_SSL_PRESET_DEFAULT)); - mbedtls_ssl_conf_rng(&conf, mbedtls_ctr_drbg_random, &ctrdrbg); - mbedtls_ssl_conf_dbg(&conf, OnDebug, 0); - mbedtls_ssl_conf_session_cache(&conf, &cache, mbedtls_ssl_cache_get, - mbedtls_ssl_cache_set); - R(mbedtls_ssl_conf_own_cert(&conf, &cert, &pkey)); - R(mbedtls_ssl_setup(&ssl, &conf)); - -Reset: - mbedtls_net_free(&client); - R(mbedtls_ssl_session_reset(&ssl)); - R(mbedtls_net_accept(&server, &client, 0, 0, 0)); - mbedtls_ssl_set_bio(&ssl, &client, mbedtls_net_send, mbedtls_net_recv, 0); - - while ((r = mbedtls_ssl_handshake(&ssl)) != 0) { - if (r != MBEDTLS_ERR_SSL_WANT_READ && r != MBEDTLS_ERR_SSL_WANT_WRITE) { - printf(" failed\n ! mbedtls_ssl_handshake returned %d\n", r); - goto Reset; - } - } - - do { - len = sizeof(buf) - 1; - memset(buf, 0, sizeof(buf)); - r = mbedtls_ssl_read(&ssl, (void *)buf, len); - if (r == MBEDTLS_ERR_SSL_WANT_READ || r == MBEDTLS_ERR_SSL_WANT_WRITE) - continue; - if (r <= 0) { - switch (r) { - case MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY: - printf("connection was closed gracefully\n"); - break; - case MBEDTLS_ERR_NET_CONN_RESET: - printf("connection was reset by peer\n"); - break; - default: - printf("mbedtls_ssl_read returned -0x%x\n", -r); - break; - } - break; - } - len = r; - printf("%d bytes read\n%s", len, buf); - if (r > 0) break; - } while (1); - - len = sprintf(buf, - "HTTP/1.0 200 OK\r\n" - "Content-Type: text/html\r\n" - "\r\n" - "

Mbed TLS Test Server

\r\n" - "

Successful connection using: %s\r\n", - mbedtls_ssl_get_ciphersuite(&ssl)); - - while ((r = mbedtls_ssl_write(&ssl, (void *)buf, len)) <= 0) { - if (r == MBEDTLS_ERR_NET_CONN_RESET) { - printf("failed\n ! peer closed the connection\n"); - goto Reset; - } - if (r != MBEDTLS_ERR_SSL_WANT_READ && r != MBEDTLS_ERR_SSL_WANT_WRITE) { - printf("failed\n ! mbedtls_ssl_write returned %d\n", r); - exit(1); - } - } - - while ((r = mbedtls_ssl_close_notify(&ssl)) < 0) { - if (r != MBEDTLS_ERR_SSL_WANT_READ && r != MBEDTLS_ERR_SSL_WANT_WRITE) { - printf("error: mbedtls_ssl_close_notify returned %d\n", r); - goto Reset; - } - } - - printf("ok\n"); - - r = 0; - goto Reset; - - mbedtls_net_free(&client); - mbedtls_net_free(&server); - mbedtls_x509_crt_free(&cert); - mbedtls_pk_free(&pkey); - mbedtls_ssl_cache_free(&cache); - return 0; -Die: - mbedtls_strerror(r, ebuf, 100); - printf("last error was: %d - %s\n", r, ebuf); - return 1; -} diff --git a/examples/walk.c b/examples/walk.c index 31f5fc405..c55296189 100644 --- a/examples/walk.c +++ b/examples/walk.c @@ -9,9 +9,13 @@ #endif #include "libc/calls/calls.h" #include "libc/calls/struct/stat.h" -#include "libc/log/log.h" +#include "libc/errno.h" +#include "libc/runtime/gc.h" #include "libc/runtime/runtime.h" +#include "libc/stdio/stdio.h" +#include "libc/str/str.h" #include "libc/sysv/consts/exit.h" +#include "libc/x/x.h" #include "third_party/musl/ftw.h" /** @@ -42,10 +46,12 @@ static int display_info(const char *fpath, const struct stat *sb, int tflag, int main(int argc, char *argv[]) { int flags = 0; + const char *dir; if (argc > 2 && strchr(argv[2], 'd') != NULL) flags |= FTW_DEPTH; if (argc > 2 && strchr(argv[2], 'p') != NULL) flags |= FTW_PHYS; - if (nftw((argc < 2) ? "." : argv[1], display_info, 20, flags) == -1) { - perror("nftw"); + dir = argc < 2 ? "." : argv[1]; + if (nftw(dir, display_info, 20, flags) == -1) { + fprintf(stderr, "nftw() failed: %s: %s\n", strerror(errno), dir); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); diff --git a/libc/calls/internal.h b/libc/calls/internal.h index c1fe14ccf..03b439079 100644 --- a/libc/calls/internal.h +++ b/libc/calls/internal.h @@ -117,7 +117,7 @@ i32 __sys_openat(i32, const char *, i32, u32) hidden; i32 __sys_pipe2(i32[hasatleast 2], u32) hidden; i32 __sys_utimensat(i32, const char *, const struct timespec *, i32) hidden; i32 __sys_wait4(i32, i32 *, i32, struct rusage *) hidden; -i32 getdents(i32, char *, u32, i64 *) hidden; +i32 getdents(i32, void *, u32, i64 *) hidden; i32 sys_chdir(const char *) hidden; i32 sys_clock_gettime(i32, struct timespec *) hidden; i32 sys_close(i32) hidden; diff --git a/libc/calls/lseek.c b/libc/calls/lseek.c index 2cc889dd0..50ff252a3 100644 --- a/libc/calls/lseek.c +++ b/libc/calls/lseek.c @@ -16,9 +16,11 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/bits/weaken.h" #include "libc/calls/calls.h" #include "libc/calls/internal.h" #include "libc/dce.h" +#include "libc/zipos/zipos.internal.h" /** * Changes current position of file descriptor/handle. @@ -30,7 +32,10 @@ * @asyncsignalsafe */ int64_t lseek(int fd, int64_t offset, unsigned whence) { - if (!IsWindows() && !IsOpenbsd() && !IsNetbsd()) { + if (fd < g_fds.n && g_fds.p[fd].kind == kFdZip) { + return weaken(__zipos_lseek)( + (struct ZiposHandle *)(intptr_t)g_fds.p[fd].handle, offset, whence); + } else if (!IsWindows() && !IsOpenbsd() && !IsNetbsd()) { return sys_lseek(fd, offset, whence, 0); } else if (IsOpenbsd() || IsNetbsd()) { return sys_lseek(fd, offset, offset, whence); diff --git a/libc/calls/mkntpath.c b/libc/calls/mkntpath.c index 1c53b3a7f..e6822f98b 100644 --- a/libc/calls/mkntpath.c +++ b/libc/calls/mkntpath.c @@ -18,6 +18,7 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/calls/internal.h" #include "libc/calls/ntmagicpaths.internal.h" +#include "libc/nt/systeminfo.h" #include "libc/str/oldutf16.internal.h" #include "libc/str/str.h" #include "libc/str/tpdecode.internal.h" @@ -70,15 +71,30 @@ textwindows int __mkntpath2(const char *path, * 4. Reserve ≥10 for CreateNamedPipe "\\.\pipe\" prefix requirement * 5. Reserve ≥13 for mkdir() i.e. 1+8+3+1, e.g. "\\ffffffff.xxx\0" */ - size_t i, n; + char *q; + char16_t *p; + size_t i, n, m, z; if (!path) return efault(); path = FixNtMagicPath(path, flags); - n = tprecode8to16(path16, PATH_MAX - 16, path).ax; - if (n == PATH_MAX - 16 - 1) return enametoolong(); + p = path16; + q = path; + z = PATH_MAX - 16; + if (q[0] == '/' && q[1] == 't' && q[2] == 'm' && q[3] == 'p' && + (q[4] == '/' || !q[4])) { + m = GetTempPath(z, p); + if (!q[4]) return m; + q += 5; + p += m; + z -= m; + } else { + m = 0; + } + n = tprecode8to16(p, z, q).ax; + if (n == z - 1) return enametoolong(); for (i = 0; i < n; ++i) { - if (path16[i] == '/') { - path16[i] = '\\'; + if (p[i] == '/') { + p[i] = '\\'; } } - return n; + return m + n; } diff --git a/libc/calls/pread.c b/libc/calls/pread.c index cd138221c..5fd167800 100644 --- a/libc/calls/pread.c +++ b/libc/calls/pread.c @@ -44,8 +44,9 @@ ssize_t pread(int fd, void *buf, size_t size, int64_t offset) { ssize_t rc; if (fd == -1 || offset < 0) return einval(); if (__isfdkind(fd, kFdZip)) { - rc = weaken(__zipos_read)( - (struct ZiposHandle *)(intptr_t)g_fds.p[fd].handle, buf, size, offset); + rc = + weaken(__zipos_read)((struct ZiposHandle *)(intptr_t)g_fds.p[fd].handle, + (struct iovec[]){{buf, size}}, 1, offset); } else if (!IsWindows()) { rc = sys_pread(fd, buf, size, offset, offset); } else if (__isfdkind(fd, kFdFile)) { diff --git a/libc/calls/struct/dirent.h b/libc/calls/struct/dirent.h index 5d45840e1..4107c5722 100644 --- a/libc/calls/struct/dirent.h +++ b/libc/calls/struct/dirent.h @@ -6,7 +6,7 @@ struct dirent { /* linux getdents64 abi */ uint64_t d_ino; /* inode number */ int64_t d_off; /* implementation-dependent location number */ uint16_t d_reclen; /* byte length of this whole struct and string */ - uint8_t d_type; /* DT_UNKNOWN, DT_BLK, DT_DIR, etc. */ + uint8_t d_type; /* DT_REG, DT_DIR, DT_UNKNOWN, DT_BLK, etc. */ char d_name[256]; /* NUL-terminated basename */ }; diff --git a/libc/calls/time.c b/libc/calls/time.c index acb5cb7f0..6fbf62d32 100644 --- a/libc/calls/time.c +++ b/libc/calls/time.c @@ -27,15 +27,11 @@ * @asyncsignalsafe */ int64_t time(int64_t *opt_out_ret) { - int64_t rc; + int64_t secs; struct timeval tv; - if (gettimeofday(&tv, NULL) == -1) { - rc = -1; - } else { - rc = tv.tv_sec; - } + secs = nowl(); if (opt_out_ret) { - *opt_out_ret = rc; + *opt_out_ret = secs; } - return rc; + return secs; } diff --git a/libc/crypto/crypto.mk b/libc/crypto/crypto.mk deleted file mode 100644 index 0c6be2155..000000000 --- a/libc/crypto/crypto.mk +++ /dev/null @@ -1,56 +0,0 @@ -#-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐ -#───vi: set et ft=make ts=8 tw=8 fenc=utf-8 :vi───────────────────────┘ - -PKGS += LIBC_CRYPTO - -LIBC_CRYPTO_ARTIFACTS += LIBC_CRYPTO_A -LIBC_CRYPTO = $(LIBC_CRYPTO_A_DEPS) $(LIBC_CRYPTO_A) -LIBC_CRYPTO_A = o/$(MODE)/libc/crypto/crypto.a -LIBC_CRYPTO_A_FILES := $(wildcard libc/crypto/*) -LIBC_CRYPTO_A_HDRS = $(filter %.h,$(LIBC_CRYPTO_A_FILES)) -LIBC_CRYPTO_A_SRCS_A = $(filter %.s,$(LIBC_CRYPTO_A_FILES)) -LIBC_CRYPTO_A_SRCS_S = $(filter %.S,$(LIBC_CRYPTO_A_FILES)) -LIBC_CRYPTO_A_SRCS_C = $(filter %.c,$(LIBC_CRYPTO_A_FILES)) - -LIBC_CRYPTO_A_SRCS = \ - $(LIBC_CRYPTO_A_SRCS_A) \ - $(LIBC_CRYPTO_A_SRCS_S) \ - $(LIBC_CRYPTO_A_SRCS_C) - -LIBC_CRYPTO_A_OBJS = \ - $(LIBC_CRYPTO_A_SRCS_A:%.s=o/$(MODE)/%.o) \ - $(LIBC_CRYPTO_A_SRCS_S:%.S=o/$(MODE)/%.o) \ - $(LIBC_CRYPTO_A_SRCS_C:%.c=o/$(MODE)/%.o) - -LIBC_CRYPTO_A_CHECKS = \ - $(LIBC_CRYPTO_A).pkg \ - $(LIBC_CRYPTO_A_HDRS:%=o/$(MODE)/%.ok) - -LIBC_CRYPTO_A_DIRECTDEPS = \ - LIBC_INTRIN \ - LIBC_STUBS \ - LIBC_NEXGEN32E - -LIBC_CRYPTO_A_DEPS := \ - $(call uniq,$(foreach x,$(LIBC_CRYPTO_A_DIRECTDEPS),$($(x)))) - -$(LIBC_CRYPTO_A): \ - libc/crypto/ \ - $(LIBC_CRYPTO_A).pkg \ - $(LIBC_CRYPTO_A_OBJS) - -$(LIBC_CRYPTO_A).pkg: \ - $(LIBC_CRYPTO_A_OBJS) \ - $(foreach x,$(LIBC_CRYPTO_A_DIRECTDEPS),$($(x)_A).pkg) - -LIBC_CRYPTO_LIBS = $(foreach x,$(LIBC_CRYPTO_ARTIFACTS),$($(x))) -LIBC_CRYPTO_SRCS = $(foreach x,$(LIBC_CRYPTO_ARTIFACTS),$($(x)_SRCS)) -LIBC_CRYPTO_HDRS = $(foreach x,$(LIBC_CRYPTO_ARTIFACTS),$($(x)_HDRS)) -LIBC_CRYPTO_BINS = $(foreach x,$(LIBC_CRYPTO_ARTIFACTS),$($(x)_BINS)) -LIBC_CRYPTO_CHECKS = $(foreach x,$(LIBC_CRYPTO_ARTIFACTS),$($(x)_CHECKS)) -LIBC_CRYPTO_OBJS = $(foreach x,$(LIBC_CRYPTO_ARTIFACTS),$($(x)_OBJS)) -LIBC_CRYPTO_TESTS = $(foreach x,$(LIBC_CRYPTO_ARTIFACTS),$($(x)_TESTS)) -$(LIBC_CRYPTO_OBJS): $(BUILD_FILES) libc/crypto/crypto.mk - -.PHONY: o/$(MODE)/libc/crypto -o/$(MODE)/libc/crypto: $(LIBC_CRYPTO_CHECKS) diff --git a/libc/crypto/kaessbox.S b/libc/crypto/kaessbox.S deleted file mode 100644 index 38e95a2ce..000000000 --- a/libc/crypto/kaessbox.S +++ /dev/null @@ -1,57 +0,0 @@ -/*-*- mode:unix-assembly; indent-tabs-mode:t; tab-width:8; coding:utf-8 -*-│ -│vi: set et ft=asm ts=8 tw=8 fenc=utf-8 :vi│ -╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ -│ │ -│ Permission to use, copy, modify, and/or distribute this software for │ -│ any purpose with or without fee is hereby granted, provided that the │ -│ above copyright notice and this permission notice appear in all copies. │ -│ │ -│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ -│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ -│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ -│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ -│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ -│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ -│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ -│ PERFORMANCE OF THIS SOFTWARE. │ -╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/macros.internal.h" - - .rodata - .align 64 # for cacheline yoinking -kAesSbox: - .byte 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5 - .byte 0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76 - .byte 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0 - .byte 0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0 - .byte 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc - .byte 0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15 - .byte 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a - .byte 0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75 - .byte 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0 - .byte 0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84 - .byte 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b - .byte 0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf - .byte 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85 - .byte 0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8 - .byte 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5 - .byte 0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2 - .byte 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17 - .byte 0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73 - .byte 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88 - .byte 0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb - .byte 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c - .byte 0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79 - .byte 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9 - .byte 0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08 - .byte 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6 - .byte 0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a - .byte 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e - .byte 0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e - .byte 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94 - .byte 0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf - .byte 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68 - .byte 0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16 - .endfn kAesSbox,globl,hidden - .previous diff --git a/libc/crypto/kaessboxinverse.S b/libc/crypto/kaessboxinverse.S deleted file mode 100644 index 19456688a..000000000 --- a/libc/crypto/kaessboxinverse.S +++ /dev/null @@ -1,57 +0,0 @@ -/*-*- mode:unix-assembly; indent-tabs-mode:t; tab-width:8; coding:utf-8 -*-│ -│vi: set et ft=asm ts=8 tw=8 fenc=utf-8 :vi│ -╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ -│ │ -│ Permission to use, copy, modify, and/or distribute this software for │ -│ any purpose with or without fee is hereby granted, provided that the │ -│ above copyright notice and this permission notice appear in all copies. │ -│ │ -│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ -│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ -│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ -│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ -│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ -│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ -│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ -│ PERFORMANCE OF THIS SOFTWARE. │ -╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/macros.internal.h" - - .rodata - .align 64 # for cacheline yoinking -kAesSboxInverse: - .byte 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38 - .byte 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb - .byte 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87 - .byte 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb - .byte 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d - .byte 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e - .byte 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2 - .byte 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25 - .byte 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16 - .byte 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92 - .byte 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda - .byte 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84 - .byte 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a - .byte 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06 - .byte 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02 - .byte 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b - .byte 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea - .byte 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73 - .byte 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85 - .byte 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e - .byte 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89 - .byte 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b - .byte 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20 - .byte 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4 - .byte 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31 - .byte 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f - .byte 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d - .byte 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef - .byte 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0 - .byte 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61 - .byte 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26 - .byte 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d - .endfn kAesSboxInverse,globl,hidden - .previous diff --git a/libc/crypto/rijndael.c b/libc/crypto/rijndael.c deleted file mode 100644 index 8efc81b28..000000000 --- a/libc/crypto/rijndael.c +++ /dev/null @@ -1,72 +0,0 @@ -/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ -│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ -╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ -│ │ -│ Permission to use, copy, modify, and/or distribute this software for │ -│ any purpose with or without fee is hereby granted, provided that the │ -│ above copyright notice and this permission notice appear in all copies. │ -│ │ -│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ -│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ -│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ -│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ -│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ -│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ -│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ -│ PERFORMANCE OF THIS SOFTWARE. │ -╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/bits/emmintrin.internal.h" -#include "libc/crypto/rijndael.h" -#include "libc/nexgen32e/x86feature.h" - -forceinline aes_block_t rijndael_westmere(uint32_t n, aes_block_t x, - const struct Rijndael *ctx) { - uint32_t i; - x ^= ctx->rk[0].xmm; - for (i = 1; i < n; ++i) { - asm("aesenc\t%2,%0" : "=x"(x) : "0"(x), "m"(ctx->rk[i].xmm)); - } - asm("aesenclast\t%2,%0" : "=x"(x) : "0"(x), "m"(ctx->rk[i].xmm)); - return x; -} - -static noinline aes_block_t rijndael_pure(uint32_t n, aes_block_t x, - const struct Rijndael *ctx) { - uint32_t i, j; - __v16qu b1, b2; - aes_block_t u1, u2, u3, u4; - x ^= ctx->rk[0].xmm; - for (i = 1; i < n + 1; ++i) { - b2 = b1 = (__v16qu)x; - for (j = 0; j < 16; ++j) { - b2[j % 4 + 13 * j / 4 % 4 * 4] = kAesSbox[b1[j]]; - } - u1 = (aes_block_t)b2; - if (i != n) { - u2 = u1 >> 010 | u1 << 030; - u3 = u1 ^ u2; - u4 = u3 & 0x80808080; - u3 = ((u3 ^ u4) << 1) ^ ((u4 >> 7) * 0x1b); - u1 = u3 ^ u2 ^ (u1 >> 020 | u1 << 020) ^ (u1 >> 030 | u1 << 010); - } - x = ctx->rk[i].xmm ^ u1; - } - return x; -} - -/** - * Encrypts paragraph w/ AES. - * - * @param n is 14 for AES-256, 12 for AES-192, and 10 for AES-128 - * @param x is 128-bit chunk of plaintext to encrypt - * @param ctx was initialized by rijndaelinit() - * @return result of transformation - */ -aes_block_t rijndael(uint32_t n, aes_block_t x, const struct Rijndael *ctx) { - if (X86_HAVE(AES)) { - return rijndael_westmere(n, x, ctx); - } else { - return rijndael_pure(n, x, ctx); - } -} diff --git a/libc/crypto/rijndael.h b/libc/crypto/rijndael.h deleted file mode 100644 index 647fdf206..000000000 --- a/libc/crypto/rijndael.h +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef COSMOPOLITAN_LIBC_CRYPTO_RIJNDAEL_H_ -#define COSMOPOLITAN_LIBC_CRYPTO_RIJNDAEL_H_ -#ifndef __STRICT_ANSI__ -#include "libc/str/str.h" -#if !(__ASSEMBLER__ + __LINKER__ + 0) -COSMOPOLITAN_C_START_ -/*───────────────────────────────────────────────────────────────────────────│─╗ -│ cosmopolitan § cryptography » advanced encryption standard ─╬─│┼ -╚────────────────────────────────────────────────────────────────────────────│─┘ - AES-256 Latency x86 2010+ SSE2 - ─────────────── ───────── ────── - rijndael(14, block, &ctx) 23 ns 218 ns - unrijndael(14, block, &ctx) 23 ns 690 ns - rijndaelinit(&ctx, 14, k1, k2) 136 ns 135 ns - unrijndaelinit(&ctx, 14, k1, k2) 186 ns 639 ns - - Untrustworthy System Viability x86 2010+ SSE2 - ────────────────────────────── ───────── ────── - rijndael(14, block, &ctx) A C - unrijndael(14, block, &ctx) A C - rijndaelinit(&ctx, 14, k1, k2) B B - unrijndaelinit(&ctx, 14, k1, k2) B C - - Comparison Cosmo Rijndael Tiny-AES - ────────────────────────────── ─────── ──────── ──────── - Generalized Math Yes Yes No - Footprint 1,782 b 9,258 b 903 b - Performance (New Hardware) ~20 ns ~40 ns ~400 ns - Performance (Old Hardware) ~400 ns ~40 ns ~400 ns */ - -typedef uint32_t aes_block_t _Vector_size(16) forcealign(16); - -struct Rijndael { - union { - aes_block_t xmm; - uint32_t u32[4]; - uint8_t u8[16]; - } rk[15]; -}; - -void rijndaelinit(struct Rijndael *, uint32_t, aes_block_t, aes_block_t); -aes_block_t rijndael(uint32_t, aes_block_t, const struct Rijndael *); -void unrijndaelinit(struct Rijndael *, uint32_t, aes_block_t, aes_block_t); -aes_block_t unrijndael(uint32_t, aes_block_t, const struct Rijndael *); - -/*───────────────────────────────────────────────────────────────────────────│─╗ -│ cosmopolitan § cryptography » implementation details ─╬─│┼ -╚────────────────────────────────────────────────────────────────────────────│*/ - -extern const uint8_t kAesSbox[256] forcealign(64); -extern const uint8_t kAesSboxInverse[256] forcealign(64); - -aes_block_t InvMixColumns(aes_block_t) hidden; - -COSMOPOLITAN_C_END_ -#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ -#endif /* !ANSI */ -#endif /* COSMOPOLITAN_LIBC_CRYPTO_RIJNDAEL_H_ */ diff --git a/libc/crypto/rijndaelinit.c b/libc/crypto/rijndaelinit.c deleted file mode 100644 index b0c1adea7..000000000 --- a/libc/crypto/rijndaelinit.c +++ /dev/null @@ -1,68 +0,0 @@ -/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ -│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ -╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ -│ │ -│ Permission to use, copy, modify, and/or distribute this software for │ -│ any purpose with or without fee is hereby granted, provided that the │ -│ above copyright notice and this permission notice appear in all copies. │ -│ │ -│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ -│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ -│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ -│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ -│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ -│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ -│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ -│ PERFORMANCE OF THIS SOFTWARE. │ -╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/assert.h" -#include "libc/bits/bits.h" -#include "libc/bits/xmmintrin.internal.h" -#include "libc/crypto/rijndael.h" -#include "libc/dce.h" -#include "libc/str/internal.h" - -#define ROR(w, k) (CheckUnsigned(w) >> (k) | (w) << (sizeof(w) * 8 - (k))) - -static const uint8_t Rcon[11] = {0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, - 0x20, 0x40, 0x80, 0x1b, 0x36}; - -forceinline uint32_t SubRot(uint32_t t) { - uint32_t j; - for (j = 0; j < 4; j++) { - t = (t & -256) | kAesSbox[t & 255]; - t = ROR(t, 8); - } - return t; -} - -/** - * Computes key schedule for rijndael(). - * - * @param ctx receives round keys - * @param n is 14 for AES-256, 12 for AES-192, and 10 for AES-128 - * @param k1/k2 holds the master key - */ -void rijndaelinit(struct Rijndael *ctx, uint32_t n, aes_block_t k1, - aes_block_t k2) { -#define Nk (n - 6) -#define W(i) (ctx->rk[(i) / 4].u32[(i) % 4]) -#define K(i) ((i) < 4 ? k1[i] : k2[(i)-4]) - uint32_t i, t; - ctx->rk[0].xmm = k1; - ctx->rk[1].xmm = k2; - for (i = Nk; i < 4 * (n + 1); ++i) { - t = W(i - 1); - if (i % Nk == 0) { - t = ROR(t, 8); - t = SubRot(t); - t ^= Rcon[i / Nk]; - } else if (Nk > 6 && i % Nk == 4) { - t = SubRot(t); - } - W(i) = W(i - Nk) ^ t; - } - XMM_DESTROY(k1); - XMM_DESTROY(k2); -} diff --git a/libc/crypto/unrijndael.c b/libc/crypto/unrijndael.c deleted file mode 100644 index eb8d6da32..000000000 --- a/libc/crypto/unrijndael.c +++ /dev/null @@ -1,64 +0,0 @@ -/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ -│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ -╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ -│ │ -│ Permission to use, copy, modify, and/or distribute this software for │ -│ any purpose with or without fee is hereby granted, provided that the │ -│ above copyright notice and this permission notice appear in all copies. │ -│ │ -│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ -│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ -│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ -│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ -│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ -│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ -│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ -│ PERFORMANCE OF THIS SOFTWARE. │ -╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/bits/emmintrin.internal.h" -#include "libc/crypto/rijndael.h" -#include "libc/nexgen32e/x86feature.h" - -forceinline aes_block_t unrijndael_westmere(uint32_t n, aes_block_t x, - const struct Rijndael *ctx) { - x ^= ctx->rk[n--].xmm; - do { - asm("aesdec\t%2,%0" : "=x"(x) : "0"(x), "m"(ctx->rk[n].xmm)); - } while (--n); - asm("aesdeclast\t%2,%0" : "=x"(x) : "0"(x), "m"(ctx->rk[n].xmm)); - return x; -} - -static noinline aes_block_t unrijndael_pure(uint32_t n, aes_block_t x, - const struct Rijndael *ctx) { - uint32_t j; - __v16qu b1, b2; - x ^= ctx->rk[n--].xmm; - do { - b2 = b1 = (__v16qu)x; - for (j = 0; j < 16; ++j) { - b2[j] = kAesSboxInverse[b1[j % 4 + j * 13 / 4 % 4 * 4]]; - } - x = (aes_block_t)b2; - if (n) x = InvMixColumns(x); - x ^= ctx->rk[n].xmm; - } while (n--); - return x; -} - -/** - * Decrypts paragraph w/ AES. - * - * @param n is 14 for AES-256, 12 for AES-192, and 10 for AES-128 - * @param x is 128-bit chunk of ciphertext to decrypt - * @param ctx was initialized by unrijndaelinit() - * @return result of transformation - */ -aes_block_t unrijndael(uint32_t n, aes_block_t x, const struct Rijndael *ctx) { - if (X86_HAVE(AES)) { - return unrijndael_westmere(n, x, ctx); - } else { - return unrijndael_pure(n, x, ctx); - } -} diff --git a/libc/crypto/unrijndaelinit.c b/libc/crypto/unrijndaelinit.c deleted file mode 100644 index af7c5239f..000000000 --- a/libc/crypto/unrijndaelinit.c +++ /dev/null @@ -1,69 +0,0 @@ -/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ -│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ -╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ -│ │ -│ Permission to use, copy, modify, and/or distribute this software for │ -│ any purpose with or without fee is hereby granted, provided that the │ -│ above copyright notice and this permission notice appear in all copies. │ -│ │ -│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ -│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ -│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ -│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ -│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ -│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ -│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ -│ PERFORMANCE OF THIS SOFTWARE. │ -╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/assert.h" -#include "libc/bits/xmmintrin.internal.h" -#include "libc/crypto/rijndael.h" -#include "libc/nexgen32e/x86feature.h" - -static void unrijndaelinit_westmere(struct Rijndael *ctx, uint32_t n, - aes_block_t k1, aes_block_t k2) { - uint32_t i; - aes_block_t x; - assert(n > 1); - rijndaelinit(ctx, n, k1, k2); - i = 1; - do { - x = ctx->rk[i].xmm; - asm("aesimc\t%1,%0" : "=x"(x) : "0"(x)); - ctx->rk[i].xmm = x; - } while (++i < n); - XMM_DESTROY(x); -} - -static relegated noinline void unrijndaelinit_pure(struct Rijndael *ctx, - uint32_t n, aes_block_t k1, - aes_block_t k2) { - uint32_t i; - aes_block_t x; - assert(n > 1); - rijndaelinit(ctx, n, k1, k2); - i = 1; - do { - x = ctx->rk[i].xmm; - x = InvMixColumns(x); - ctx->rk[i].xmm = x; - } while (++i < n); - XMM_DESTROY(x); -} - -/** - * Computes key schedule for unrijndael(). - * - * @param rk receives round keys - * @param n is 14 for AES-256, 12 for AES-192, and 10 for AES-128 - * @param k1/k2 holds the master key - */ -void unrijndaelinit(struct Rijndael *ctx, uint32_t n, aes_block_t k1, - aes_block_t k2) { - if (X86_HAVE(AES)) { - return unrijndaelinit_westmere(ctx, n, k1, k2); - } else { - return unrijndaelinit_pure(ctx, n, k1, k2); - } -} diff --git a/libc/dns/gethoststxt.c b/libc/dns/gethoststxt.c index ab6a5cb04..d7a3603b9 100644 --- a/libc/dns/gethoststxt.c +++ b/libc/dns/gethoststxt.c @@ -35,7 +35,7 @@ static struct HostsTxtInitialStaticMemory { char strings[64]; } g_hoststxt_init; -static textwindows noinline char *getnthoststxtpath(char *pathbuf, +static textwindows noinline char *GetNtHostsTxtPath(char *pathbuf, uint32_t size) { const char *const kWinHostsPath = "\\drivers\\etc\\hosts"; uint32_t len = GetSystemDirectoryA(&pathbuf[0], size); @@ -49,7 +49,7 @@ static textwindows noinline char *getnthoststxtpath(char *pathbuf, } /** - * Returns parsed sorted singleton hardcoded hostname→ip4 map. + * Returns hosts.txt map. * * @note yoinking realloc() ensures there's no size limits */ @@ -68,13 +68,12 @@ const struct HostsTxt *GetHostsTxt(void) { __cxa_atexit(FreeHostsTxt, &g_hoststxt, NULL); path = "/etc/hosts"; if (IsWindows()) { - path = firstnonnull(getnthoststxtpath(pathbuf, ARRAYLEN(pathbuf)), path); + path = firstnonnull(GetNtHostsTxtPath(pathbuf, ARRAYLEN(pathbuf)), path); } if (!(f = fopen(path, "r")) || ParseHostsTxt(g_hoststxt, f) == -1) { /* TODO(jart): Elevate robustness. */ } fclose(f); - SortHostsTxt(g_hoststxt); } return g_hoststxt; } diff --git a/libc/dns/hoststxt.h b/libc/dns/hoststxt.h index 70cbab571..86189175e 100644 --- a/libc/dns/hoststxt.h +++ b/libc/dns/hoststxt.h @@ -29,7 +29,6 @@ struct HostsTxt { const struct HostsTxt *GetHostsTxt(void) returnsnonnull; void FreeHostsTxt(struct HostsTxt **) paramsnonnull(); int ParseHostsTxt(struct HostsTxt *, FILE *) paramsnonnull(); -void SortHostsTxt(struct HostsTxt *) paramsnonnull(); int ResolveHostsTxt(const struct HostsTxt *, int, const char *, struct sockaddr *, uint32_t, const char **) paramsnonnull((1, 3)); diff --git a/libc/dns/resolvedns.c b/libc/dns/resolvedns.c index 79d9fef19..9c3b78e96 100644 --- a/libc/dns/resolvedns.c +++ b/libc/dns/resolvedns.c @@ -59,7 +59,7 @@ int ResolveDns(const struct ResolvConf *resolvconf, int af, const char *name, if (!resolvconf->nameservers.i) return 0; memset(&h, 0, sizeof(h)); rc = ebadmsg(); - h.id = rand32(); + h.id = rand64(); h.bf1 = 1; /* recursion desired */ h.qdcount = 1; q.qname = name; diff --git a/libc/dns/resolvednsreverse.c b/libc/dns/resolvednsreverse.c index 5af5bfe67..a0efe532e 100644 --- a/libc/dns/resolvednsreverse.c +++ b/libc/dns/resolvednsreverse.c @@ -68,7 +68,7 @@ int ResolveDnsReverse(const struct ResolvConf *resolvconf, int af, if (!resolvconf->nameservers.i) return 0; memset(&h, 0, sizeof(h)); rc = ebadmsg(); - h.id = rand32(); + h.id = rand64(); h.bf1 = 1; /* recursion desired */ h.qdcount = 1; q.qname = name; diff --git a/libc/dns/resolvehostsreverse.c b/libc/dns/resolvehostsreverse.c index 78f320294..c0eaf69e9 100644 --- a/libc/dns/resolvehostsreverse.c +++ b/libc/dns/resolvehostsreverse.c @@ -1,8 +1,27 @@ - +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/alg/alg.h" +#include "libc/bits/bits.h" #include "libc/dns/consts.h" #include "libc/dns/dns.h" #include "libc/dns/hoststxt.h" +#include "libc/fmt/fmt.h" #include "libc/sock/sock.h" #include "libc/str/str.h" #include "libc/sysv/consts/af.h" @@ -16,30 +35,18 @@ * @param ip is IP address in binary (sin_addr) * @param buf is buffer to store the name * @param bufsize is length of buf - * * @return 1 if found, 0 if not found, or -1 w/ errno * @error EAFNOSUPPORT */ int ResolveHostsReverse(const struct HostsTxt *ht, int af, const uint8_t *ip, char *buf, size_t bufsize) { - struct HostsTxtEntry *entry = NULL; - uint32_t v1, v2; - + size_t i; if (af != AF_INET && af != AF_UNSPEC) return eafnosupport(); - if (!ht->entries.p || !buf || bufsize == 0) return -1; - - v1 = *((uint32_t *)ip); - for (size_t j = 0; j < ht->entries.i; j++) { - v2 = *((uint32_t *)ht->entries.p[j].ip); - if (v1 == v2) { - entry = &(ht->entries.p[j]); - break; + for (i = 0; i < ht->entries.i; ++i) { + if (READ32LE(ip) == READ32LE(ht->entries.p[i].ip)) { + snprintf(buf, bufsize, "%s", ht->strings.p + ht->entries.p[i].name); + return 1; } } - - if (entry) { - strncpy(buf, &ht->strings.p[entry->name], bufsize); - return 1; - } return 0; } diff --git a/libc/dns/resolvehoststxt.c b/libc/dns/resolvehoststxt.c index f5858b2f3..c07245581 100644 --- a/libc/dns/resolvehoststxt.c +++ b/libc/dns/resolvehoststxt.c @@ -25,17 +25,9 @@ #include "libc/sysv/consts/af.h" #include "libc/sysv/errfuns.h" -static int hoststxtgetcmp(const char *node, const struct HostsTxtEntry *entry, - const char *strings) { - return CompareDnsNames(node, &strings[entry->name]); -} - /** * Finds address associated with name in HOSTS.TXT table. * - * This function performs binary search, so SortHostsTxt() must be - * called on the table beforehand. - * * @param ht can be GetHostsTxt() * @param af can be AF_INET, AF_UNSPEC * @param name can be a local or fully-qualified hostname @@ -49,21 +41,22 @@ static int hoststxtgetcmp(const char *node, const struct HostsTxtEntry *entry, int ResolveHostsTxt(const struct HostsTxt *ht, int af, const char *name, struct sockaddr *addr, uint32_t addrsize, const char **canon) { + size_t i; struct sockaddr_in *addr4; - struct HostsTxtEntry *entry; if (af != AF_INET && af != AF_UNSPEC) return eafnosupport(); - if ((entry = bsearch_r(name, ht->entries.p, ht->entries.i, - sizeof(struct HostsTxtEntry), (void *)hoststxtgetcmp, - ht->strings.p))) { - if (addr) { - if (addrsize < kMinSockaddr4Size) return einval(); - addr4 = (struct sockaddr_in *)addr; - addr4->sin_family = AF_INET; - memcpy(&addr4->sin_addr.s_addr, &entry->ip[0], 4); + for (i = 0; i < ht->entries.i; ++i) { + if (!CompareDnsNames(name, ht->strings.p + ht->entries.p[i].name)) { + if (addr) { + if (addrsize < kMinSockaddr4Size) return einval(); + addr4 = (struct sockaddr_in *)addr; + addr4->sin_family = AF_INET; + memcpy(&addr4->sin_addr.s_addr, &ht->entries.p[i].ip[0], 4); + } + if (canon) { + *canon = ht->strings.p + ht->entries.p[i].canon; + } + return 1; } - if (canon) *canon = &ht->strings.p[entry->canon]; - return 1; - } else { - return 0; } + return 0; } diff --git a/libc/dns/sorthoststxt.c b/libc/dns/sorthoststxt.c deleted file mode 100644 index e32cc452c..000000000 --- a/libc/dns/sorthoststxt.c +++ /dev/null @@ -1,49 +0,0 @@ -/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ -│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ -╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ -│ │ -│ Permission to use, copy, modify, and/or distribute this software for │ -│ any purpose with or without fee is hereby granted, provided that the │ -│ above copyright notice and this permission notice appear in all copies. │ -│ │ -│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ -│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ -│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ -│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ -│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ -│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ -│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ -│ PERFORMANCE OF THIS SOFTWARE. │ -╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/alg/alg.h" -#include "libc/dns/dns.h" -#include "libc/dns/hoststxt.h" - -/** - * Compares hostnames in HOSTS.TXT table. - * @see CompareDnsNames(), ParseHostsTxt() - */ -static int cmphoststxt(const struct HostsTxtEntry *e1, - const struct HostsTxtEntry *e2, const char *strings) { - if (e1 == e2) return 0; - return CompareDnsNames(&strings[e1->name], &strings[e2->name]); -} - -/** - * Sorts entries in HOSTS.TXT table. - * - * This function enables ResolveHostsTxt() to be called so hard-coded - * hostname lookups take logarithmic time; you can blackhole all the - * spam you want, in your /etc/hosts file. - * - * The sorted order, defined by CompareDnsNames(), also makes it - * possible to efficiently search for subdomains, once the initial sort - * is done. - */ -void SortHostsTxt(struct HostsTxt *ht) { - if (ht->entries.p) { - qsort_r(ht->entries.p, ht->entries.i, sizeof(*ht->entries.p), - (void *)cmphoststxt, ht->strings.p); - } -} diff --git a/libc/fmt/pflink.h b/libc/fmt/pflink.h index 65c503155..e8c8be11f 100644 --- a/libc/fmt/pflink.h +++ b/libc/fmt/pflink.h @@ -18,7 +18,8 @@ * format strings are constexprs that only contain directives. */ -#define PFLINK(FMT) \ +#define PFLINK(...) _PFLINK(__VA_ARGS__) +#define _PFLINK(FMT, ...) \ ({ \ if (___PFLINK(FMT, strpbrk, "faAeg")) STATIC_YOINK("__fmt_dtoa"); \ if (___PFLINK(FMT, strpbrk, "cmrqs")) { \ @@ -34,7 +35,8 @@ FMT; \ }) -#define SFLINK(FMT) \ +#define SFLINK(...) _SFLINK(__VA_ARGS__) +#define _SFLINK(FMT) \ ({ \ if (___PFLINK(FMT, strchr, 'm')) { \ STATIC_YOINK("malloc"); \ diff --git a/libc/isystem/windows.h b/libc/isystem/windows.h index 2d07481aa..295f8bfc8 100644 --- a/libc/isystem/windows.h +++ b/libc/isystem/windows.h @@ -246,6 +246,30 @@ #define HUMPD int64_t #define HWND int64_t +#define ADDRESS_FAMILY uint16_t +#define TUNNEL_TYPE uint32_t +#define NET_IF_CONNECTION_TYPE uint32_t +#define NET_IF_COMPARTMENT_ID uint32_t +#define IFTYPE uint32_t +#define NL_PREFIX_ORIGIN uint32_t +#define NL_SUFFIX_ORIGIN uint32_t +#define NL_DAD_STATE uint32_t +#define NET_IF_NETWORK_GUID struct NtGuid +#define IP_PREFIX_ORIGIN NL_PREFIX_ORIGIN +#define IP_SUFFIX_ORIGIN NL_SUFFIX_ORIGIN +#define IP_DAD_STATE NL_DAD_STATE +#define IP_ADAPTER_ADDRESSES struct NtIpAdapterAddresses +#define PIP_ADAPTER_ADDRESSES struct NtIpAdapterAddresses* +#define IP_ADAPTER_UNICAST_ADDRESS struct NtIpAdapterUnicastAddressLh +#define PIP_ADAPTER_UNICAST_ADDRESS struct NtIpAdapterUnicastAddressLh* +#define IP_ADAPTER_ANYCAST_ADDRESS struct NtIpAdapterAnycastAddressXp +#define PIP_ADAPTER_ANYCAST_ADDRESS struct NtIpAdapterAnycastAddressXp* +#define IP_ADAPTER_MULTICAST_ADDRESS struct NtIpAdapterMulticastAddressXp +#define PIP_ADAPTER_MULTICAST_ADDRESS struct NtIpAdapterMulticastAddressXp* +#define IP_ADAPTER_DNS_SERVER_ADDRESS struct NtIpAdapterDnsServerAddressXp +#define IP_ADAPTER_PREFIX struct NtIpAdapterPrefixXp +#define PIP_ADAPTER_PREFIX struct NtIpAdapterPrefixXp* + #define _GENERIC_MAPPING NtGenericMapping #define GENERIC_MAPPING struct NtGenericMapping #define PGENERIC_MAPPING struct NtGenericMapping* diff --git a/libc/log/oncrashthunks.S b/libc/log/oncrashthunks.S index b5f317500..5d295cab0 100644 --- a/libc/log/oncrashthunks.S +++ b/libc/log/oncrashthunks.S @@ -88,4 +88,13 @@ __oncrash_sigbus: ret .endfn __oncrash_sigbus,globl + .org 11*7 +__oncrash_sigpipe: + push %rbp + mov %rsp,%rbp + call __oncrash + pop %rbp + ret + .endfn __oncrash_sigpipe,globl + .endobj __oncrash_thunks,globl diff --git a/libc/log/showcrashreports.c b/libc/log/showcrashreports.c index c07acccf7..ae6a94ab5 100644 --- a/libc/log/showcrashreports.c +++ b/libc/log/showcrashreports.c @@ -16,15 +16,18 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/assert.h" #include "libc/bits/bits.h" #include "libc/calls/calls.h" #include "libc/calls/sigbits.h" #include "libc/calls/typedef/sigaction_f.h" #include "libc/dce.h" +#include "libc/log/check.h" #include "libc/log/internal.h" #include "libc/log/log.h" #include "libc/macros.internal.h" #include "libc/nt/signals.h" +#include "libc/runtime/symbols.internal.h" #include "libc/str/str.h" #include "libc/sysv/consts/sa.h" #include "libc/sysv/consts/sig.h" @@ -61,6 +64,7 @@ void showcrashreports(void) { kCrashSigs[4] = SIGTRAP; /* bad system call */ kCrashSigs[5] = SIGABRT; /* abort() called */ kCrashSigs[6] = SIGBUS; /* misaligned, noncanonical ptr, etc. */ + kCrashSigs[7] = SIGPIPE; /* write to closed thing */ /* : oncrashthunks.S */ memset(&sa, 0, sizeof(sa)); sa.sa_flags = SA_RESETHAND; diff --git a/libc/log/vflogf.c b/libc/log/vflogf.c index 70f3537d1..7339ac0af 100644 --- a/libc/log/vflogf.c +++ b/libc/log/vflogf.c @@ -40,20 +40,7 @@ static struct timespec vflogf_ts; static int vflogf_loglevel2char(unsigned level) { - switch (level) { - case kLogInfo: - return 'I'; - case kLogDebug: - return 'D'; - case kLogWarn: - return 'W'; - case kLogFatal: - return 'F'; - case kLogVerbose: - return 'V'; - default: - return '?'; - } + return "FEWIVDYZ"[level & 7]; } /** diff --git a/libc/nexgen32e/vendor.internal.h b/libc/nexgen32e/vendor.internal.h index dc8916554..7f74f9495 100644 --- a/libc/nexgen32e/vendor.internal.h +++ b/libc/nexgen32e/vendor.internal.h @@ -3,63 +3,20 @@ #include "libc/nexgen32e/kcpuids.h" #if !(__ASSEMBLER__ + __LINKER__ + 0) -/* - * Known 80x86 Vendors (CPUID.0 EBX+EDX+ECX) - * - * ╤ ╤ - * GenuineIntel - * AuthenticAMD - * GenuineCosmo - * NexGenDriven - * AMDisbetter! - * CentaurHauls - * TransmetaCPU - * GenuineTMx86 - * CyrixInstead - * UMC UMC UMC - * SiS SiS SiS - * Geode by NSC - * RiseRiseRise - * Vortex86 SoC - * VIA VIA VIA - * VMwareVMware - * XenVMMXenVMM - * Microsoft Hv - * └────┐ │ - * G ⊕ t = 0x33 Intel - * A ⊕ A = 0x00 AMD - * G ⊕ s = 0x34 Cosmopolitan - * N ⊕ v = 0x38 NexGen (Modern x86) - * A ⊕ e = 0x24 AMD (Rank & File) - * C ⊕ u = 0x36 Via (DBA Centaur) - * T ⊕ C = 0x17 Transmeta (Historical) - * G ⊕ x = 0x3f Transmeta (Historical) - * C ⊕ e = 0x26 Cyrix (Historical) - * U ⊕ M = 0x18 UMC (Taiwan) - * S ⊕ i = 0x3a SiS (Historical) - * G ⊕ N = 0x09 National Semiconductors (OLPC) - * R ⊕ i = 0x3b Rise Technology (Historical) - * V ⊕ S = 0x05 DM&P (Vortex86) - * V ⊕ I = 0x1f Via - * V ⊕ a = 0x37 VMware - * X ⊕ V = 0x0e Xen - * M ⊕ = 0x6d Microsoft (Win10 Hyper-V) - * │ │ - * │ │ perfect - * │ │ 𝑕(𝑠)=𝑠₀⊕𝑠₉ - * ╧ ╧ - * - * @note Parallels Desktop CPU brand string is " lrpepyh vr " since even - * folks designing microprocessor emulators apparently struggle w/ - * endianness lool. - */ -#define IsAuthenticAMD() (_KCPUIDS_VENDOR() == 0x00) -#define IsGenuineIntel() (_KCPUIDS_VENDOR() == 0x33) -#define IsGenuineCosmo() (_KCPUIDS_VENDOR() == 0x34) +#define IsAuthenticAMD() \ + (kCpuids[KCPUIDS_0H][KCPUIDS_EBX] == 0x68747541 /* Auth */ && \ + kCpuids[KCPUIDS_0H][KCPUIDS_EDX] == 0x69746e65 /* enti */ && \ + kCpuids[KCPUIDS_0H][KCPUIDS_ECX] == 0x444d4163 /* cAMD */) -#define _KCPUIDS_VENDOR() \ - (((kCpuids[KCPUIDS_0H][KCPUIDS_EBX] >> 000) & 0xff) ^ \ - ((kCpuids[KCPUIDS_0H][KCPUIDS_ECX] >> 010) & 0xff)) +#define IsGenuineIntel() \ + (kCpuids[KCPUIDS_0H][KCPUIDS_EBX] == 0x756e6547 /* Genu */ && \ + kCpuids[KCPUIDS_0H][KCPUIDS_EDX] == 0x49656e69 /* ineI */ && \ + kCpuids[KCPUIDS_0H][KCPUIDS_ECX] == 0x6c65746e /* ntel */) + +#define IsGenuineCosmo() \ + (kCpuids[KCPUIDS_0H][KCPUIDS_EBX] == 0x756e6547 /* Genu */ && \ + kCpuids[KCPUIDS_0H][KCPUIDS_EDX] == 0x43656e69 /* ineC */ && \ + kCpuids[KCPUIDS_0H][KCPUIDS_ECX] == 0x6f6d736f /* osmo */) #endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ #endif /* COSMOPOLITAN_LIBC_NEXGEN32E_VENDOR_H_ */ diff --git a/libc/nexgen32e/x86info.h b/libc/nexgen32e/x86info.h index 739559e41..3e25acc08 100644 --- a/libc/nexgen32e/x86info.h +++ b/libc/nexgen32e/x86info.h @@ -10,11 +10,12 @@ #define kX86CpuExtfamilyid ((KCPUIDS(1H, EAX) >> 20) & 255) #define kX86CpuFamily \ - (kX86CpuFamilyid + (kX86CpuFamily == 15 ? kX86CpuExtfamilyid : 0)) + (kX86CpuFamilyid + (kX86CpuFamilyid == 15 ? kX86CpuExtfamilyid : 0)) -#define kX86CpuModel \ - (kX86CpuModelid | \ - (kX86CpuFamily == 6 || kX86CpuFamily == 15 ? kX86CpuExtmodelid : 0) << 4) +#define kX86CpuModel \ + (kX86CpuModelid | \ + (kX86CpuFamilyid == 6 || kX86CpuFamilyid == 15 ? kX86CpuExtmodelid : 0) \ + << 4) #define kX86ProcessorModelKey \ (kX86CpuExtfamilyid << 12 | kX86CpuFamilyid << 8 | kX86CpuExtmodelid << 4 | \ diff --git a/libc/nt/advapi32/SystemFunction036.s b/libc/nt/advapi32/SystemFunction036.s new file mode 100644 index 000000000..706b5abe7 --- /dev/null +++ b/libc/nt/advapi32/SystemFunction036.s @@ -0,0 +1,12 @@ +.include "o/libc/nt/codegen.inc" +.imp advapi32,__imp_SystemFunction036,SystemFunction036,0 + + .text.windows +RtlGenRandom: + push %rbp + mov %rsp,%rbp + .profilable + mov __imp_SystemFunction036(%rip),%rax + jmp __sysv2nt + .endfn RtlGenRandom,globl + .previous diff --git a/libc/nt/enum/lang.h b/libc/nt/enum/lang.h new file mode 100644 index 000000000..4183946ba --- /dev/null +++ b/libc/nt/enum/lang.h @@ -0,0 +1,392 @@ +#ifndef COSMOPOLITAN_LIBC_NT_ENUM_LANG_H_ +#define COSMOPOLITAN_LIBC_NT_ENUM_LANG_H_ + +#define MAKELANGID(p, s) ((((uint16_t)(s)) << 10) | (uint16_t)(p)) + +#define kNtLangNeutral 0x00 +#define kNtLangInvariant 0x7f +#define kNtLangAfrikaans 0x36 +#define kNtLangAlbanian 0x1c +#define kNtLangAlsatian 0x84 +#define kNtLangAmharic 0x5e +#define kNtLangArabic 0x01 +#define kNtLangArmenian 0x2b +#define kNtLangAssamese 0x4d +#define kNtLangAzeri 0x2c +#define kNtLangAzerbaijani 0x2c +#define kNtLangBangla 0x45 +#define kNtLangBashkir 0x6d +#define kNtLangBasque 0x2d +#define kNtLangBelarusian 0x23 +#define kNtLangBengali 0x45 +#define kNtLangBreton 0x7e +#define kNtLangBosnian 0x1a +#define kNtLangBosnianNeutral 0x781a +#define kNtLangBulgarian 0x02 +#define kNtLangCatalan 0x03 +#define kNtLangCentralKurdish 0x92 +#define kNtLangCherokee 0x5c +#define kNtLangChinese 0x04 +#define kNtLangChineseSimplified 0x04 +#define kNtLangChineseTraditional 0x7c04 +#define kNtLangCorsican 0x83 +#define kNtLangCroatian 0x1a +#define kNtLangCzech 0x05 +#define kNtLangDanish 0x06 +#define kNtLangDari 0x8c +#define kNtLangDivehi 0x65 +#define kNtLangDutch 0x13 +#define kNtLangEnglish 0x09 +#define kNtLangEstonian 0x25 +#define kNtLangFaeroese 0x38 +#define kNtLangFarsi 0x29 +#define kNtLangFilipino 0x64 +#define kNtLangFinnish 0x0b +#define kNtLangFrench 0x0c +#define kNtLangFrisian 0x62 +#define kNtLangFulah 0x67 +#define kNtLangGalician 0x56 +#define kNtLangGeorgian 0x37 +#define kNtLangGerman 0x07 +#define kNtLangGreek 0x08 +#define kNtLangGreenlandic 0x6f +#define kNtLangGujarati 0x47 +#define kNtLangHausa 0x68 +#define kNtLangHawaiian 0x75 +#define kNtLangHebrew 0x0d +#define kNtLangHindi 0x39 +#define kNtLangHungarian 0x0e +#define kNtLangIcelandic 0x0f +#define kNtLangIgbo 0x70 +#define kNtLangIndonesian 0x21 +#define kNtLangInuktitut 0x5d +#define kNtLangIrish 0x3c +#define kNtLangItalian 0x10 +#define kNtLangJapanese 0x11 +#define kNtLangKannada 0x4b +#define kNtLangKashmiri 0x60 +#define kNtLangKazak 0x3f +#define kNtLangKhmer 0x53 +#define kNtLangKiche 0x86 +#define kNtLangKinyarwanda 0x87 +#define kNtLangKonkani 0x57 +#define kNtLangKorean 0x12 +#define kNtLangKyrgyz 0x40 +#define kNtLangLao 0x54 +#define kNtLangLatvian 0x26 +#define kNtLangLithuanian 0x27 +#define kNtLangLowerSorbian 0x2e +#define kNtLangLuxembourgish 0x6e +#define kNtLangMacedonian 0x2f +#define kNtLangMalay 0x3e +#define kNtLangMalayalam 0x4c +#define kNtLangMaltese 0x3a +#define kNtLangManipuri 0x58 +#define kNtLangMaori 0x81 +#define kNtLangMapudungun 0x7a +#define kNtLangMarathi 0x4e +#define kNtLangMohawk 0x7c +#define kNtLangMongolian 0x50 +#define kNtLangNepali 0x61 +#define kNtLangNorwegian 0x14 +#define kNtLangOccitan 0x82 +#define kNtLangOdia 0x48 +#define kNtLangOriya 0x48 +#define kNtLangPashto 0x63 +#define kNtLangPersian 0x29 +#define kNtLangPolish 0x15 +#define kNtLangPortuguese 0x16 +#define kNtLangPular 0x67 +#define kNtLangPunjabi 0x46 +#define kNtLangQuechua 0x6b +#define kNtLangRomanian 0x18 +#define kNtLangRomansh 0x17 +#define kNtLangRussian 0x19 +#define kNtLangSakha 0x85 +#define kNtLangSami 0x3b +#define kNtLangSanskrit 0x4f +#define kNtLangScottishGaelic 0x91 +#define kNtLangSerbian 0x1a +#define kNtLangSerbianNeutral 0x7c1a +#define kNtLangSindhi 0x59 +#define kNtLangSinhalese 0x5b +#define kNtLangSlovak 0x1b +#define kNtLangSlovenian 0x24 +#define kNtLangSotho 0x6c +#define kNtLangSpanish 0x0a +#define kNtLangSwahili 0x41 +#define kNtLangSwedish 0x1d +#define kNtLangSyriac 0x5a +#define kNtLangTajik 0x28 +#define kNtLangTamazight 0x5f +#define kNtLangTamil 0x49 +#define kNtLangTatar 0x44 +#define kNtLangTelugu 0x4a +#define kNtLangThai 0x1e +#define kNtLangTibetan 0x51 +#define kNtLangTigrigna 0x73 +#define kNtLangTigrinya 0x73 +#define kNtLangTswana 0x32 +#define kNtLangTurkish 0x1f +#define kNtLangTurkmen 0x42 +#define kNtLangUighur 0x80 +#define kNtLangUkrainian 0x22 +#define kNtLangUpperSorbian 0x2e +#define kNtLangUrdu 0x20 +#define kNtLangUzbek 0x43 +#define kNtLangValencian 0x03 +#define kNtLangVietnamese 0x2a +#define kNtLangWelsh 0x52 +#define kNtLangWolof 0x88 +#define kNtLangXhosa 0x34 +#define kNtLangYakut 0x85 +#define kNtLangYi 0x78 +#define kNtLangYoruba 0x6a +#define kNtLangZulu 0x35 + +#define kNtSublangNeutral 0x00 +#define kNtSublangDefault 0x01 +#define kNtSublangSysDefault 0x02 +#define kNtSublangCustomDefault 0x03 +#define kNtSublangCustomUnspecified 0x04 +#define kNtSublangUiCustomDefault 0x05 +#define kNtSublangAfrikaansSouthAfrica 0x01 +#define kNtSublangAlbanianAlbania 0x01 +#define kNtSublangAlsatianFrance 0x01 +#define kNtSublangAmharicEthiopia 0x01 +#define kNtSublangArabicSaudiArabia 0x01 +#define kNtSublangArabicIraq 0x02 +#define kNtSublangArabicEgypt 0x03 +#define kNtSublangArabicLibya 0x04 +#define kNtSublangArabicAlgeria 0x05 +#define kNtSublangArabicMorocco 0x06 +#define kNtSublangArabicTunisia 0x07 +#define kNtSublangArabicOman 0x08 +#define kNtSublangArabicYemen 0x09 +#define kNtSublangArabicSyria 0x0a +#define kNtSublangArabicJordan 0x0b +#define kNtSublangArabicLebanon 0x0c +#define kNtSublangArabicKuwait 0x0d +#define kNtSublangArabicUae 0x0e +#define kNtSublangArabicBahrain 0x0f +#define kNtSublangArabicQatar 0x10 +#define kNtSublangArmenianArmenia 0x01 +#define kNtSublangAssameseIndia 0x01 +#define kNtSublangAzeriLatin 0x01 +#define kNtSublangAzeriCyrillic 0x02 +#define kNtSublangAzerbaijaniAzerbaijanLatin 0x01 +#define kNtSublangAzerbaijaniAzerbaijanCyrillic 0x02 +#define kNtSublangBanglaIndia 0x01 +#define kNtSublangBanglaBangladesh 0x02 +#define kNtSublangBashkirRussia 0x01 +#define kNtSublangBasqueBasque 0x01 +#define kNtSublangBelarusianBelarus 0x01 +#define kNtSublangBengaliIndia 0x01 +#define kNtSublangBengaliBangladesh 0x02 +#define kNtSublangBosnianBosniaHerzegovinaLatin 0x05 +#define kNtSublangBosnianBosniaHerzegovinaCyrillic 0x08 +#define kNtSublangBretonFrance 0x01 +#define kNtSublangBulgarianBulgaria 0x01 +#define kNtSublangCatalanCatalan 0x01 +#define kNtSublangCentralKurdishIraq 0x01 +#define kNtSublangCherokeeCherokee 0x01 +#define kNtSublangChineseTraditional 0x01 +#define kNtSublangChineseSimplified 0x02 +#define kNtSublangChineseHongkong 0x03 +#define kNtSublangChineseSingapore 0x04 +#define kNtSublangChineseMacau 0x05 +#define kNtSublangCorsicanFrance 0x01 +#define kNtSublangCzechCzechRepublic 0x01 +#define kNtSublangCroatianCroatia 0x01 +#define kNtSublangCroatianBosniaHerzegovinaLatin 0x04 +#define kNtSublangDanishDenmark 0x01 +#define kNtSublangDariAfghanistan 0x01 +#define kNtSublangDivehiMaldives 0x01 +#define kNtSublangDutch 0x01 +#define kNtSublangDutchBelgian 0x02 +#define kNtSublangEnglishUs 0x01 +#define kNtSublangEnglishUk 0x02 +#define kNtSublangEnglishAus 0x03 +#define kNtSublangEnglishCan 0x04 +#define kNtSublangEnglishNz 0x05 +#define kNtSublangEnglishEire 0x06 +#define kNtSublangEnglishSouthAfrica 0x07 +#define kNtSublangEnglishJamaica 0x08 +#define kNtSublangEnglishCaribbean 0x09 +#define kNtSublangEnglishBelize 0x0a +#define kNtSublangEnglishTrinidad 0x0b +#define kNtSublangEnglishZimbabwe 0x0c +#define kNtSublangEnglishPhilippines 0x0d +#define kNtSublangEnglishIndia 0x10 +#define kNtSublangEnglishMalaysia 0x11 +#define kNtSublangEnglishSingapore 0x12 +#define kNtSublangEstonianEstonia 0x01 +#define kNtSublangFaeroeseFaroeIslands 0x01 +#define kNtSublangFilipinoPhilippines 0x01 +#define kNtSublangFinnishFinland 0x01 +#define kNtSublangFrench 0x01 +#define kNtSublangFrenchBelgian 0x02 +#define kNtSublangFrenchCanadian 0x03 +#define kNtSublangFrenchSwiss 0x04 +#define kNtSublangFrenchLuxembourg 0x05 +#define kNtSublangFrenchMonaco 0x06 +#define kNtSublangFrisianNetherlands 0x01 +#define kNtSublangFulahSenegal 0x02 +#define kNtSublangGalicianGalician 0x01 +#define kNtSublangGeorgianGeorgia 0x01 +#define kNtSublangGerman 0x01 +#define kNtSublangGermanSwiss 0x02 +#define kNtSublangGermanAustrian 0x03 +#define kNtSublangGermanLuxembourg 0x04 +#define kNtSublangGermanLiechtenstein 0x05 +#define kNtSublangGreekGreece 0x01 +#define kNtSublangGreenlandicGreenland 0x01 +#define kNtSublangGujaratiIndia 0x01 +#define kNtSublangHausaNigeriaLatin 0x01 +#define kNtSublangHawaiianUs 0x01 +#define kNtSublangHebrewIsrael 0x01 +#define kNtSublangHindiIndia 0x01 +#define kNtSublangHungarianHungary 0x01 +#define kNtSublangIcelandicIceland 0x01 +#define kNtSublangIgboNigeria 0x01 +#define kNtSublangIndonesianIndonesia 0x01 +#define kNtSublangInuktitutCanada 0x01 +#define kNtSublangInuktitutCanadaLatin 0x02 +#define kNtSublangIrishIreland 0x02 +#define kNtSublangItalian 0x01 +#define kNtSublangItalianSwiss 0x02 +#define kNtSublangJapaneseJapan 0x01 +#define kNtSublangKannadaIndia 0x01 +#define kNtSublangKashmiriSasia 0x02 +#define kNtSublangKashmiriIndia 0x02 +#define kNtSublangKazakKazakhstan 0x01 +#define kNtSublangKhmerCambodia 0x01 +#define kNtSublangKicheGuatemala 0x01 +#define kNtSublangKinyarwandaRwanda 0x01 +#define kNtSublangKonkaniIndia 0x01 +#define kNtSublangKorean 0x01 +#define kNtSublangKyrgyzKyrgyzstan 0x01 +#define kNtSublangLaoLao 0x01 +#define kNtSublangLatvianLatvia 0x01 +#define kNtSublangLithuanian 0x01 +#define kNtSublangLowerSorbianGermany 0x02 +#define kNtSublangLuxembourgishLuxembourg 0x01 +#define kNtSublangMacedonianMacedonia 0x01 +#define kNtSublangMalayMalaysia 0x01 +#define kNtSublangMalayBruneiDarussalam 0x02 +#define kNtSublangMalayalamIndia 0x01 +#define kNtSublangMalteseMalta 0x01 +#define kNtSublangMaoriNewZealand 0x01 +#define kNtSublangMapudungunChile 0x01 +#define kNtSublangMarathiIndia 0x01 +#define kNtSublangMohawkMohawk 0x01 +#define kNtSublangMongolianCyrillicMongolia 0x01 +#define kNtSublangMongolianPrc 0x02 +#define kNtSublangNepaliIndia 0x02 +#define kNtSublangNepaliNepal 0x01 +#define kNtSublangNorwegianBokmal 0x01 +#define kNtSublangNorwegianNynorsk 0x02 +#define kNtSublangOccitanFrance 0x01 +#define kNtSublangOdiaIndia 0x01 +#define kNtSublangOriyaIndia 0x01 +#define kNtSublangPashtoAfghanistan 0x01 +#define kNtSublangPersianIran 0x01 +#define kNtSublangPolishPoland 0x01 +#define kNtSublangPortuguese 0x02 +#define kNtSublangPortugueseBrazilian 0x01 +#define kNtSublangPularSenegal 0x02 +#define kNtSublangPunjabiIndia 0x01 +#define kNtSublangPunjabiPakistan 0x02 +#define kNtSublangQuechuaBolivia 0x01 +#define kNtSublangQuechuaEcuador 0x02 +#define kNtSublangQuechuaPeru 0x03 +#define kNtSublangRomanianRomania 0x01 +#define kNtSublangRomanshSwitzerland 0x01 +#define kNtSublangRussianRussia 0x01 +#define kNtSublangSakhaRussia 0x01 +#define kNtSublangSamiNorthernNorway 0x01 +#define kNtSublangSamiNorthernSweden 0x02 +#define kNtSublangSamiNorthernFinland 0x03 +#define kNtSublangSamiLuleNorway 0x04 +#define kNtSublangSamiLuleSweden 0x05 +#define kNtSublangSamiSouthernNorway 0x06 +#define kNtSublangSamiSouthernSweden 0x07 +#define kNtSublangSamiSkoltFinland 0x08 +#define kNtSublangSamiInariFinland 0x09 +#define kNtSublangSanskritIndia 0x01 +#define kNtSublangScottishGaelic 0x01 +#define kNtSublangSerbianBosniaHerzegovinaLatin 0x06 +#define kNtSublangSerbianBosniaHerzegovinaCyrillic 0x07 +#define kNtSublangSerbianMontenegroLatin 0x0b +#define kNtSublangSerbianMontenegroCyrillic 0x0c +#define kNtSublangSerbianSerbiaLatin 0x09 +#define kNtSublangSerbianSerbiaCyrillic 0x0a +#define kNtSublangSerbianCroatia 0x01 +#define kNtSublangSerbianLatin 0x02 +#define kNtSublangSerbianCyrillic 0x03 +#define kNtSublangSindhiIndia 0x01 +#define kNtSublangSindhiPakistan 0x02 +#define kNtSublangSindhiAfghanistan 0x02 +#define kNtSublangSinhaleseSriLanka 0x01 +#define kNtSublangSothoNorthernSouthAfrica 0x01 +#define kNtSublangSlovakSlovakia 0x01 +#define kNtSublangSlovenianSlovenia 0x01 +#define kNtSublangSpanish 0x01 +#define kNtSublangSpanishMexican 0x02 +#define kNtSublangSpanishModern 0x03 +#define kNtSublangSpanishGuatemala 0x04 +#define kNtSublangSpanishCostaRica 0x05 +#define kNtSublangSpanishPanama 0x06 +#define kNtSublangSpanishDominicanRepublic 0x07 +#define kNtSublangSpanishVenezuela 0x08 +#define kNtSublangSpanishColombia 0x09 +#define kNtSublangSpanishPeru 0x0a +#define kNtSublangSpanishArgentina 0x0b +#define kNtSublangSpanishEcuador 0x0c +#define kNtSublangSpanishChile 0x0d +#define kNtSublangSpanishUruguay 0x0e +#define kNtSublangSpanishParaguay 0x0f +#define kNtSublangSpanishBolivia 0x10 +#define kNtSublangSpanishElSalvador 0x11 +#define kNtSublangSpanishHonduras 0x12 +#define kNtSublangSpanishNicaragua 0x13 +#define kNtSublangSpanishPuertoRico 0x14 +#define kNtSublangSpanishUs 0x15 +#define kNtSublangSwahiliKenya 0x01 +#define kNtSublangSwedish 0x01 +#define kNtSublangSwedishFinland 0x02 +#define kNtSublangSyriacSyria 0x01 +#define kNtSublangTajikTajikistan 0x01 +#define kNtSublangTamazightAlgeriaLatin 0x02 +#define kNtSublangTamazightMoroccoTifinagh 0x04 +#define kNtSublangTamilIndia 0x01 +#define kNtSublangTamilSriLanka 0x02 +#define kNtSublangTatarRussia 0x01 +#define kNtSublangTeluguIndia 0x01 +#define kNtSublangThaiThailand 0x01 +#define kNtSublangTibetanPrc 0x01 +#define kNtSublangTigrignaEritrea 0x02 +#define kNtSublangTigrinyaEritrea 0x02 +#define kNtSublangTigrinyaEthiopia 0x01 +#define kNtSublangTswanaBotswana 0x02 +#define kNtSublangTswanaSouthAfrica 0x01 +#define kNtSublangTurkishTurkey 0x01 +#define kNtSublangTurkmenTurkmenistan 0x01 +#define kNtSublangUighurPrc 0x01 +#define kNtSublangUkrainianUkraine 0x01 +#define kNtSublangUpperSorbianGermany 0x01 +#define kNtSublangUrduPakistan 0x01 +#define kNtSublangUrduIndia 0x02 +#define kNtSublangUzbekLatin 0x01 +#define kNtSublangUzbekCyrillic 0x02 +#define kNtSublangValencianValencia 0x02 +#define kNtSublangVietnameseVietnam 0x01 +#define kNtSublangWelshUnitedKingdom 0x01 +#define kNtSublangWolofSenegal 0x01 +#define kNtSublangXhosaSouthAfrica 0x01 +#define kNtSublangYakutRussia 0x01 +#define kNtSublangYiPrc 0x01 +#define kNtSublangYorubaNigeria 0x01 +#define kNtSublangZuluSouthAfrica 0x01 + +#endif /* COSMOPOLITAN_LIBC_NT_ENUM_LANG_H_ */ diff --git a/libc/nt/errors.h b/libc/nt/errors.h index e0a212672..d4edd0882 100644 --- a/libc/nt/errors.h +++ b/libc/nt/errors.h @@ -1,6 +1,8 @@ #ifndef COSMOPOLITAN_NT_ERRORS_H_ #define COSMOPOLITAN_NT_ERRORS_H_ +#define kNtNoError 0 + #define kNtErrorInsufficientBuffer 122 #define kNtErrorSuccess 0 diff --git a/libc/nt/iphlpapi.h b/libc/nt/iphlpapi.h index 1ac975986..ce9c31a6d 100644 --- a/libc/nt/iphlpapi.h +++ b/libc/nt/iphlpapi.h @@ -1,6 +1,5 @@ #ifndef COSMOPOLITAN_LIBC_NT_IPHLPAPI_H_ #define COSMOPOLITAN_LIBC_NT_IPHLPAPI_H_ - #include "libc/nt/struct/ipadapteraddresses.h" #if !(__ASSEMBLER__ + __LINKER__ + 0) COSMOPOLITAN_C_START_ @@ -26,17 +25,13 @@ COSMOPOLITAN_C_START_ ▒▒░░░▒▒▒░░░▒▒░▒▒▒▓▓▒ ▒▓▓▓▒▒▒▒▒▒▒▒░░░░▒▒▒▒▒ ███ ░▒▓ ░▓▓▓▓▒▒▒▒▒▒▒▒░░░░▒▒▒▒▓ ▓██ ╔────────────────────────────────────────────────────────────────▀▀▀─────────│─╗ -│ cosmopolitan § new technology » ip helper API ─╬─│┼ +│ cosmopolitan § new technology » ip helper api ─╬─│┼ ╚────────────────────────────────────────────────────────────────────────────│*/ -uint32_t GetAdaptersAddresses( - uint32_t Family, - uint32_t Flags, - void * Reserved, - NtIpAdapterAddresses *AdapterAddresses, - uint32_t *SizePointer); +uint32_t GetAdaptersAddresses(uint32_t Family, uint32_t Flags, void *Reserved, + NtIpAdapterAddresses *AdapterAddresses, + uint32_t *SizePointer); COSMOPOLITAN_C_END_ #endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ - #endif /* COSMOPOLITAN_LIBC_NT_IPHLPAPI_H_ */ diff --git a/libc/nt/kernel32/LocalFree.s b/libc/nt/kernel32/LocalFree.s index f578074fb..3a78502cc 100644 --- a/libc/nt/kernel32/LocalFree.s +++ b/libc/nt/kernel32/LocalFree.s @@ -1,2 +1,15 @@ .include "o/libc/nt/codegen.inc" .imp kernel32,__imp_LocalFree,LocalFree,0 + + .text.windows +LocalFree: + push %rbp + mov %rsp,%rbp + .profilable + mov %rdi,%rcx + sub $32,%rsp + call *__imp_LocalFree(%rip) + leave + ret + .endfn LocalFree,globl + .previous diff --git a/libc/nt/master.sh b/libc/nt/master.sh index 957778c2b..a21310191 100755 --- a/libc/nt/master.sh +++ b/libc/nt/master.sh @@ -3223,7 +3223,7 @@ imp 'LocalAlloc' LocalAlloc kernel32 0 # KernelBase imp 'LocalCompact' LocalCompact kernel32 970 imp 'LocalFileTimeToFileTime' LocalFileTimeToFileTime kernel32 0 # KernelBase imp 'LocalFlags' LocalFlags kernel32 972 -imp 'LocalFree' LocalFree kernel32 0 # KernelBase +imp 'LocalFree' LocalFree kernel32 0 1 # KernelBase imp 'LocalHandle' LocalHandle kernel32 974 imp 'LocalLock' LocalLock kernel32 0 # KernelBase imp 'LocalReAlloc' LocalReAlloc kernel32 0 # KernelBase @@ -5087,6 +5087,7 @@ imp 'RtlFreeThreadActivationContextStack' RtlFreeThreadActivationContextStack imp 'RtlFreeUnicodeString' RtlFreeUnicodeString ntdll 1000 1 imp 'RtlFreeUserStack' RtlFreeUserStack ntdll 1001 imp 'RtlGUIDFromString' RtlGUIDFromString ntdll 1002 +imp 'RtlGenRandom' SystemFunction036 advapi32 0 2 imp 'RtlGenerate8dot3Name' RtlGenerate8dot3Name ntdll 1003 imp 'RtlGetAce' RtlGetAce ntdll 1004 imp 'RtlGetActiveActivationContext' RtlGetActiveActivationContext ntdll 1005 diff --git a/libc/nt/memory.h b/libc/nt/memory.h index 391ac328c..07b51842d 100644 --- a/libc/nt/memory.h +++ b/libc/nt/memory.h @@ -34,6 +34,8 @@ #if !(__ASSEMBLER__ + __LINKER__ + 0) COSMOPOLITAN_C_START_ +void *LocalFree(void *hMem); + int64_t CreateFileMappingNuma( int64_t opt_hFile /* -1ul is MAP_ANONYMOUS */, const struct NtSecurityAttributes *opt_lpFileMappingAttributes, diff --git a/libc/nt/nt.mk b/libc/nt/nt.mk index c1687aa4d..b95dd5901 100644 --- a/libc/nt/nt.mk +++ b/libc/nt/nt.mk @@ -313,6 +313,25 @@ $(LIBC_NT_SHELL32_A).pkg: \ #─────────────────────────────────────────────────────────────────────────────── +LIBC_NT_ARTIFACTS += LIBC_NT_IPHLPAPI_A +LIBC_NT_IPHLPAPI = $(LIBC_NT_IPHLPAPI_A_DEPS) $(LIBC_NT_IPHLPAPI_A) +LIBC_NT_IPHLPAPI_A = o/$(MODE)/libc/nt/iphlpapi.a +LIBC_NT_IPHLPAPI_A_SRCS := $(wildcard libc/nt/iphlpapi/*.s) +LIBC_NT_IPHLPAPI_A_OBJS = $(LIBC_NT_IPHLPAPI_A_SRCS:%.s=o/$(MODE)/%.o) +LIBC_NT_IPHLPAPI_A_CHECKS = $(LIBC_NT_IPHLPAPI_A).pkg +LIBC_NT_IPHLPAPI_A_DIRECTDEPS = LIBC_NT_KERNEL32 +LIBC_NT_IPHLPAPI_A_DEPS := \ + $(call uniq,$(foreach x,$(LIBC_NT_IPHLPAPI_A_DIRECTDEPS),$($(x)))) +$(LIBC_NT_IPHLPAPI_A): \ + libc/nt/iphlpapi/ \ + $(LIBC_NT_IPHLPAPI_A).pkg \ + $(LIBC_NT_IPHLPAPI_A_OBJS) +$(LIBC_NT_IPHLPAPI_A).pkg: \ + $(LIBC_NT_IPHLPAPI_A_OBJS) \ + $(foreach x,$(LIBC_NT_IPHLPAPI_A_DIRECTDEPS),$($(x)_A).pkg) + +#─────────────────────────────────────────────────────────────────────────────── + $(LIBC_NT_OBJS): o/libc/nt/codegen.inc o/libc/nt/codegen.inc: \ diff --git a/libc/nt/runtime.h b/libc/nt/runtime.h index 282ecf907..58a3f0537 100644 --- a/libc/nt/runtime.h +++ b/libc/nt/runtime.h @@ -39,6 +39,7 @@ bool32 CloseHandle(int64_t hObject) nothrow nocallback; intptr_t GetStdHandle(int64_t nStdHandle) nosideeffect; bool32 SetStdHandle(int64_t nStdHandle, int64_t hHandle); bool32 SetDefaultDllDirectories(unsigned dirflags); +bool32 RtlGenRandom(void *RandomBuffer, uint32_t RandomBufferLength); #if ShouldUseMsabiAttribute() #include "libc/nt/thunk/runtime.inc" diff --git a/libc/nt/struct/ipadapteraddresses.h b/libc/nt/struct/ipadapteraddresses.h index bf6a85adf..a8d169ac5 100644 --- a/libc/nt/struct/ipadapteraddresses.h +++ b/libc/nt/struct/ipadapteraddresses.h @@ -1,15 +1,13 @@ #ifndef COSMOPOLITAN_LIBC_NT_STRUCT_IP_ADAPTER_ADDRESSES_H_ #define COSMOPOLITAN_LIBC_NT_STRUCT_IP_ADAPTER_ADDRESSES_H_ - #include "libc/nt/winsock.h" - #if !(__ASSEMBLER__ + __LINKER__ + 0) COSMOPOLITAN_C_START_ /* Constants ----------------------------------------------------------- */ -#define kNtMaxAdapterAddressLength 8 -#define kNtMaxDnsSuffixStringLength 256 -#define kNtMaxDhcpv6DuidLength 130 +#define kNtMaxAdapterAddressLength 8 +#define kNtMaxDnsSuffixStringLength 256 +#define kNtMaxDhcpv6DuidLength 130 /* Values for the 'Flags' parameter of GetAdaptersAddresses */ #define kNtGaaFlagSkipUnicast 0x0001 @@ -26,7 +24,8 @@ COSMOPOLITAN_C_START_ #define kNtGaaFlagSkipDnsInfo 0x0800 /* Values for the IfType parameter - * See: https://docs.microsoft.com/en-us/windows/win32/api/iptypes/ns-iptypes-ip_adapter_addresses_lh + * See: + * https://docs.microsoft.com/en-us/windows/win32/api/iptypes/ns-iptypes-ip_adapter_addresses_lh */ #define kNtIfTypeOther 1 #define kNtIfTypeEthernetCsmacd 6 @@ -38,9 +37,8 @@ COSMOPOLITAN_C_START_ #define kNtIfTypeTunnel 131 #define kNtIfTypeIeee1394 144 /* firewire */ - /* Enums --------------------------------------------------------------- */ -typedef enum { +typedef enum { kNtIpPrefixOriginOther, kNtIpPrefixOriginManual, kNtIpPrefixOriginWellKnown, @@ -49,7 +47,7 @@ typedef enum { kNtIpPrefixOriginUnchanged } NtPrefixOrigin; -typedef enum { +typedef enum { kNtNlsoOther, kNtNlsoManual, kNtNlsoWellKnown, @@ -65,7 +63,7 @@ typedef enum { kNtIpSuffixOriginUnchanged } NtSuffixOrigin; -typedef enum { +typedef enum { kNtNldsInvalid, kNtNldsTentative, kNtNldsDuplicate, @@ -89,10 +87,10 @@ typedef enum { } NtIfOperStatus; typedef enum { - kNtNetIfConnectionDedicated = 1, - kNtNetIfConnectionPassive = 2, - kNtNetIfConnectionDemand = 3, - kNtNetIfConnectionMaximum = 4 + kNtNetIfConnectionDedicated = 1, + kNtNetIfConnectionPassive = 2, + kNtNetIfConnectionDemand = 3, + kNtNetIfConnectionMaximum = 4 } NtNetIfConnectionType; typedef enum { @@ -105,7 +103,6 @@ typedef enum { kNtTunnelTypeIphttps = 15 } NtTunnelType; - /* Inner Types --------------------------------------------------------- */ typedef struct _NtIpAdapterUnicastAddress { union { @@ -115,15 +112,15 @@ typedef struct _NtIpAdapterUnicastAddress { uint32_t Flags; }; }; - struct _NtIpAdapterUnicastAddress * Next; - struct NtSocketAddress Address; - NtPrefixOrigin PrefixOrigin; - NtSuffixOrigin SuffixOrigin; - NtDadState DadState; - uint32_t ValidLifetime; - uint32_t PreferredLifetime; - uint32_t LeaseLifetime; - uint8_t OnLinkPrefixLength; + struct _NtIpAdapterUnicastAddress *Next; + struct NtSocketAddress Address; + NtPrefixOrigin PrefixOrigin; + NtSuffixOrigin SuffixOrigin; + NtDadState DadState; + uint32_t ValidLifetime; + uint32_t PreferredLifetime; + uint32_t LeaseLifetime; + uint8_t OnLinkPrefixLength; } NtIpAdapterUnicastAddress; typedef struct NtIpAdapterAnycastAddress { @@ -135,7 +132,7 @@ typedef struct NtIpAdapterAnycastAddress { }; }; struct _NtIpAdapterAnycastAddress *Next; - struct NtSocketAddress Address; + struct NtSocketAddress Address; } NtIpAdapterAnycastAddress; typedef struct NtIpAdapterMulticastAddress { @@ -147,10 +144,9 @@ typedef struct NtIpAdapterMulticastAddress { }; }; struct _NtIpAdapterMulticastAddress *Next; - struct NtSocketAddress Address; + struct NtSocketAddress Address; } NtIpAdapterMulticastAddress; - typedef struct _NtIpAdapterDnsServerAddress { union { uint64_t Alignment; @@ -160,32 +156,32 @@ typedef struct _NtIpAdapterDnsServerAddress { }; }; struct _NtIpAdapterDnsServerAddress *Next; - struct NtSocketAddress Address; + struct NtSocketAddress Address; } NtIpAdapterDnsServerAddress; typedef struct _NtIpAdapterPrefix { - union { - uint64_t Alignment; - struct { - uint32_t Length; - uint32_t Flags; - }; + union { + uint64_t Alignment; + struct { + uint32_t Length; + uint32_t Flags; }; - struct _NtIpAdapterPrefix *Next; - struct NtSocketAddress Address; - uint32_t PrefixLength; + }; + struct _NtIpAdapterPrefix *Next; + struct NtSocketAddress Address; + uint32_t PrefixLength; } NtIpAdapterPrefix; typedef struct _NtIpAdapterWinsServerAddress { - union { - uint64_t Alignment; - struct { - uint32_t Length; - uint32_t Reserved; - }; + union { + uint64_t Alignment; + struct { + uint32_t Length; + uint32_t Reserved; }; - struct _NtIpAdapterWinsServerAddress *Next; - struct NtSocketAddress Address; + }; + struct _NtIpAdapterWinsServerAddress *Next; + struct NtSocketAddress Address; } NtIpAdapterWinsServerAddress; typedef struct _NtIpAdapterGatewayAddress { @@ -197,53 +193,50 @@ typedef struct _NtIpAdapterGatewayAddress { }; }; struct _NtIpAdapterGatewayAddress *Next; - struct NtSocketAddress Address; + struct NtSocketAddress Address; } NtIpAdapterGatewayAddress; typedef struct _NtGUID { - uint32_t Data1; - uint16_t Data2; - uint16_t Data3; - uint8_t Data4[8]; + uint32_t Data1; + uint16_t Data2; + uint16_t Data3; + uint8_t Data4[8]; } NtGUID; -typedef union _NtNetLUID -{ - uint64_t Value; - struct - { - uint64_t Reserved:24; - uint64_t NetLuidIndex:24; - uint64_t IfType:16; - }Info; +typedef union _NtNetLUID { + uint64_t Value; + struct { + uint64_t Reserved : 24; + uint64_t NetLuidIndex : 24; + uint64_t IfType : 16; + } Info; } NtNetLUID; typedef struct _NtIpAdapterDnsSuffix { - struct _NtIpAdapterDnsSuffix *Next; - uint16_t String[kNtMaxDnsSuffixStringLength]; + struct _NtIpAdapterDnsSuffix *Next; + uint16_t String[kNtMaxDnsSuffixStringLength]; } NtIpAdapterDnsSuffix; - /* Top level ----------------------------------------------------------- */ typedef struct _NtIpAdapterAddresses { union { uint64_t Alignment; struct { - uint32_t Length; - uint32_t IfIndex; + uint32_t Length; + uint32_t IfIndex; }; }; - struct _NtIpAdapterAddresses * Next; - char * AdapterName; - NtIpAdapterUnicastAddress * FirstUnicastAddress; - NtIpAdapterAnycastAddress * FirstAnycastAddress; - NtIpAdapterMulticastAddress * FirstMulticastAddress; - NtIpAdapterDnsServerAddress * FirstDnsServerAddress; - uint16_t * DnsSuffix; - uint16_t * Description; - uint16_t * FriendlyName; - uint8_t PhysicalAddress[kNtMaxAdapterAddressLength]; - uint32_t PhysicalAddressLength; + struct _NtIpAdapterAddresses *Next; + char *AdapterName; + NtIpAdapterUnicastAddress *FirstUnicastAddress; + NtIpAdapterAnycastAddress *FirstAnycastAddress; + NtIpAdapterMulticastAddress *FirstMulticastAddress; + NtIpAdapterDnsServerAddress *FirstDnsServerAddress; + uint16_t *DnsSuffix; + uint16_t *Description; + uint16_t *FriendlyName; + uint8_t PhysicalAddress[kNtMaxAdapterAddressLength]; + uint32_t PhysicalAddressLength; union { uint32_t Flags; struct { @@ -259,33 +252,31 @@ typedef struct _NtIpAdapterAddresses { uint32_t Ipv6ManagedAddressConfigurationSupported : 1; }; }; - uint32_t Mtu; - uint32_t IfType; - NtIfOperStatus OperStatus; - uint32_t Ipv6IfIndex; - uint32_t ZoneIndices[16]; - NtIpAdapterPrefix * FirstPrefix; - uint64_t TransmitLinkSpeed; - uint64_t ReceiveLinkSpeed; - NtIpAdapterWinsServerAddress * FirstWinsServerAddress; - NtIpAdapterGatewayAddress * FirstGatewayAddress; - uint32_t Ipv4Metric; - uint32_t Ipv6Metric; - NtNetLUID Luid; - struct NtSocketAddress Dhcpv4Server; - uint32_t CompartmentId; - NtGUID NetworkGuid; - NtNetIfConnectionType ConnectionType; - NtTunnelType TunnelType; - struct NtSocketAddress Dhcpv6Server; - uint8_t Dhcpv6ClientDuid[kNtMaxDhcpv6DuidLength]; - uint32_t Dhcpv6ClientDuidLength; - uint32_t Dhcpv6Iaid; - NtIpAdapterDnsSuffix * FirstDnsSuffix; + uint32_t Mtu; + uint32_t IfType; + NtIfOperStatus OperStatus; + uint32_t Ipv6IfIndex; + uint32_t ZoneIndices[16]; + NtIpAdapterPrefix *FirstPrefix; + uint64_t TransmitLinkSpeed; + uint64_t ReceiveLinkSpeed; + NtIpAdapterWinsServerAddress *FirstWinsServerAddress; + NtIpAdapterGatewayAddress *FirstGatewayAddress; + uint32_t Ipv4Metric; + uint32_t Ipv6Metric; + NtNetLUID Luid; + struct NtSocketAddress Dhcpv4Server; + uint32_t CompartmentId; + NtGUID NetworkGuid; + NtNetIfConnectionType ConnectionType; + NtTunnelType TunnelType; + struct NtSocketAddress Dhcpv6Server; + uint8_t Dhcpv6ClientDuid[kNtMaxDhcpv6DuidLength]; + uint32_t Dhcpv6ClientDuidLength; + uint32_t Dhcpv6Iaid; + NtIpAdapterDnsSuffix *FirstDnsSuffix; } NtIpAdapterAddresses; - COSMOPOLITAN_C_END_ #endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ #endif /* COSMOPOLITAN_LIBC_NT_STRUCT_IP_ADAPTER_ADDRESSES_H_ */ - diff --git a/libc/rand/getrandom.c b/libc/rand/getrandom.c index 81464207f..9c8262bc9 100644 --- a/libc/rand/getrandom.c +++ b/libc/rand/getrandom.c @@ -16,35 +16,196 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/bits/safemacros.internal.h" +#include "libc/bits/bits.h" +#include "libc/calls/calls.h" #include "libc/calls/internal.h" +#include "libc/dce.h" #include "libc/errno.h" +#include "libc/nexgen32e/kcpuids.h" +#include "libc/nexgen32e/rdtsc.h" +#include "libc/nexgen32e/vendor.internal.h" +#include "libc/nexgen32e/x86feature.h" +#include "libc/nexgen32e/x86info.h" +#include "libc/nt/runtime.h" #include "libc/rand/rand.h" +#include "libc/rand/xorshift.h" #include "libc/runtime/runtime.h" #include "libc/str/str.h" +#include "libc/sysv/consts/at.h" +#include "libc/sysv/consts/auxv.h" +#include "libc/sysv/consts/grnd.h" +#include "libc/sysv/consts/o.h" +#include "libc/sysv/errfuns.h" + +static bool have_getrandom; /** - * Returns random bytes appropriate for random seeding. + * Returns cryptographic random data. * - * @param size should be the smallest value that meets your requirements - * @param flags may be GRND_{RANDOM,NONBLOCK} - * @return number of bytes copied on success; or -1 w/ errno, which - * indicates only that the request couldn't be serviced by the host - * kernel; this wrapper will still fill the buffer with random bytes - * from fallback sources no matter what + * This random number seed generator blends information from: + * + * - getrandom() on Linux + * - getentropy() on XNU and OpenBSD + * - sysctl(KERN_ARND) on FreeBSD and NetBSD + * - RDSEED on Broadwell+ and Xen+ unless GRND_NORDRND + * - RDRAND on Ivybridge+ and Xen+ unless GRND_NORDRND|GRND_RANDOM + * + * The following flags may be specified: + * + * - GRND_NORDRND: Don't source rando from hardware. + * - GRND_NOSYSTEM: Don't source rando from operating system. + * - GRND_RANDOM: Halt the entire system while I tap an entropy pool + * so small that it's hard to use statistics to test if it's random + * - GRND_NONBLOCK: Do not wait for i/o events or me to jiggle my + * mouse, and instead return immediately the moment data isn't + * available, even if the result needs to be -1 w/ EAGAIN + * + * This function is safe to use with fork() and vfork(). It will also + * close any file descriptor it ends up needing before it returns. + * + * @asyncsignalsafe + * @vforksafe */ -ssize_t getrandom(void *buf, size_t size, unsigned flags) { - ssize_t rc = sys_getrandom(buf, size, flags); - size_t i = rc == -1 ? 0 : (size_t)rc; - if (i > size) abort(); - if (i < size) { - unsigned char *p = buf; - int olderr = errno; - do { - uint64_t i64 = rand64(); - memcpy(&p[i], &i64, min(sizeof(i64), size - i)); - } while ((i += sizeof(uint64_t)) < size); - errno = olderr; +ssize_t getrandom(void *p, size_t n, unsigned f) { + char cf; + ssize_t rc; + uint64_t x; + size_t i, j, m; + int fd, cmd[2]; + sigset_t neu, old; + if (n > 256) n = 256; + if (!IsTiny() && + (f & ~(GRND_RANDOM | GRND_NONBLOCK | GRND_NORDRND | GRND_NOSYSTEM))) { + return einval(); + } + if (!(f & GRND_NOSYSTEM)) { + if (IsWindows()) { + if (RtlGenRandom(p, n)) { + rc = n; + } else { + return __winerr(); + } + } else if (IsFreebsd() || IsNetbsd()) { + if (IsFreebsd()) { + cmd[0] = 1; /* CTL_KERN */ + cmd[1] = 37; /* KERN_ARND */ + } else { + cmd[0] = 1; /* CTL_KERN */ + cmd[1] = 81; /* KERN_ARND */ + } + m = n; + if ((rc = sysctl(cmd, 2, p, &m, 0, 0)) != -1) { + rc = m; + } + } else if (have_getrandom) { + if ((rc = sys_getrandom(p, n, f & (GRND_RANDOM | GRND_NONBLOCK))) != -1) { + if (!rc && (IsXnu() || IsOpenbsd())) { + rc = n; + } + } + } else if ((fd = __sys_openat( + AT_FDCWD, + (f & GRND_RANDOM) ? "/dev/random" : "/dev/urandom", + O_RDONLY | ((f & GRND_NONBLOCK) ? O_NONBLOCK : 0), 0)) != + -1) { + rc = sys_read(fd, p, n); + sys_close(fd); + } else { + return enosys(); + } + } else { + memset(p, 0, n); + rc = n; + } + if (rc != -1) { + if (!IsTiny()) { + if (rc < 0 || rc > n) { + abort(); + } + if (f & (GRND_RANDOM | GRND_NONBLOCK)) { + if (n && !rc) { + abort(); + } + } else { + if (rc != n) { + abort(); + } + } + } + if (!(f & GRND_NORDRND)) { + if (X86_HAVE(RDSEED)) { + for (i = j = 0; i < rc; ++j) { + /* CF=1: Destination register valid. Quoth Intel DRNG-SIG 4.1.3 */ + asm volatile(CFLAG_ASM("rdseed\t%1") + : CFLAG_CONSTRAINT(cf), "=r"(x) + : /* no inputs */ + : "cc"); + if (cf) { + j = 0; + if (i + 8 <= rc) { + x ^= READ64LE((char *)p + i); + WRITE64LE((char *)p + i, x); + i += 8; + } else { + for (; i < rc; x >>= 8) { + ((char *)p)[i++] ^= x; + } + } + } else if (j == 10) { + asm volatile("pause"); + } + } + rc = i; + } else if (X86_HAVE(RDRND)) { + for (i = j = 0; i < rc; ++j) { + /* CF=1: Destination register valid. Quoth Intel DRNG-SIG 4.1.3 */ + asm volatile(CFLAG_ASM("rdrand\t%1") + : CFLAG_CONSTRAINT(cf), "=r"(x) + : /* no inputs */ + : "cc"); + if (cf) { + j = 0; + if (i + 8 <= rc) { + x ^= READ64LE((char *)p + i); + WRITE64LE((char *)p + i, x); + i += 8; + } else { + for (; i < rc; x >>= 8) { + ((char *)p)[i++] ^= x; + } + } + } else if (j == 10) { + asm volatile("pause"); + } + } + rc = i; + } else if (f & GRND_NOSYSTEM) { + return enosys(); + } + } } return rc; } + +static textstartup void getrandom_init(int argc, char **argv, char **envp, + intptr_t *auxv) { + extern unsigned kMutableCpuids[KCPUIDS_LEN][4] asm("kCpuids"); + /* + * Clear RDRAND on AMD models before Zen and then some + * since it's not only slow but can freeze after sleep + * https://bugzilla.redhat.com/show_bug.cgi?id=1150286 + */ + if ((X86_HAVE(RDRND) || X86_HAVE(RDSEED)) && + (IsAuthenticAMD() && + (kX86CpuFamily < 0x17 || + (kX86CpuFamily == 0x17 && + (0x70 <= kX86CpuModel && kX86CpuModel <= 0x7F))))) { + kMutableCpuids[KCPUIDS_1H][KCPUIDS_ECX] &= ~(1u << 30); + kMutableCpuids[KCPUIDS_7H][KCPUIDS_EBX] &= ~(1u << 18); + } + if (sys_getrandom(0, 0, 0) == 0) { + have_getrandom = true; + } +} + +const void *const g_getrandom_init[] initarray = {getrandom_init}; diff --git a/libc/rand/rand.h b/libc/rand/rand.h index e56ad4f73..85b139359 100644 --- a/libc/rand/rand.h +++ b/libc/rand/rand.h @@ -6,12 +6,11 @@ COSMOPOLITAN_C_START_ │ cosmopolitan § random ─╬─│┼ ╚────────────────────────────────────────────────────────────────────────────│*/ -#define RAND_MAX __INT_MAX__ /* only applies to rand() */ -void srand(uint64_t) nothrow nocallback; /* seeds rand() only */ -int rand(void) nothrow nocallback; /* ≥0 unseeded lcg prng */ -uint32_t rand32(void) nothrow nocallback; /* random as possible rng */ -uint64_t rand64(void) nothrow nocallback; /* random as possible rng */ -double poz(double); /* verify our claims */ +#define RAND_MAX __INT_MAX__ +void srand(uint64_t) nothrow nocallback; +int rand(void) nothrow nocallback; +uint64_t rand64(void) nothrow nocallback; +double poz(double); double pochisq(double, int); void rt_init(int); void rt_add(void *, int); @@ -20,8 +19,6 @@ void *rngset(void *, size_t, uint64_t (*)(void), size_t) paramsnonnull(); char *strfry(char *); int getentropy(void *, size_t); ssize_t getrandom(void *, size_t, unsigned); -int devrand(void *, size_t); -int64_t winrandish(void); uint64_t rdrand(void); uint64_t rdseed(void); float randf(void); diff --git a/libc/rand/rand.mk b/libc/rand/rand.mk index 64dc2011c..e3c5f54d0 100644 --- a/libc/rand/rand.mk +++ b/libc/rand/rand.mk @@ -27,7 +27,7 @@ LIBC_RAND_A_DIRECTDEPS = \ LIBC_CALLS \ LIBC_INTRIN \ LIBC_NEXGEN32E \ - LIBC_NT_KERNEL32 \ + LIBC_NT_ADVAPI32 \ LIBC_STR \ LIBC_STUBS \ LIBC_SYSV \ diff --git a/libc/rand/rand64.c b/libc/rand/rand64.c index b3e1d163a..c41ad0bac 100644 --- a/libc/rand/rand64.c +++ b/libc/rand/rand64.c @@ -16,34 +16,58 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/dce.h" -#include "libc/nexgen32e/x86feature.h" +#include "libc/bits/bits.h" +#include "libc/calls/calls.h" +#include "libc/nexgen32e/rdtsc.h" #include "libc/rand/rand.h" -#include "libc/rand/xorshift.h" +#include "libc/runtime/runtime.h" +#include "libc/sysv/consts/auxv.h" -hidden extern uint64_t g_rando64; +static uint64_t thepool; /** - * Returns nondeterministic random number. + * Returns nondeterministic random data. * - * This function uses a good random source if it's available, which - * takes ~400 cycles (~99ns). Otherwise it's seeded at program start - * with the system provided random value and may perform a few - * microseconds worth of system calls to get a good value. + * This random number seed generator blends information from: * - * @see rngset() + * - rdtsc() hardware clock + * - getpid() process identifier + * - getauxval(AT_RANDOM) on Linux + * + * It's 100% guaranteed to not hard block the system. + * + * @see rngset(), getrandom() + * @asyncsignalsafe + * @vforksafe */ -nodebuginfo uint64_t rand64(void) { - uint64_t res; - if (X86_HAVE(RDRND)) { - res = rdrand(); - } else { - if (IsWindows()) { - res = winrandish(); - } else { - devrand(&res, sizeof(res)); - } - res ^= MarsagliaXorshift64(&g_rando64); - } - return res; +uint64_t rand64(void) { + register uint64_t t; + t = thepool; + t ^= getpid() * 11400714819643198487ull + 123456789123456789; + t ^= t << 13; + t ^= t >> 7; + t ^= t << 17; + t ^= rdtsc() * 11400714819643198487ull + 123456789123456789; + t ^= t << 13; + t ^= t >> 7; + t ^= t << 17; + thepool ^= t; + return t; } + +static textstartup void rand64_init(int argc, char **argv, char **envp, + intptr_t *auxv) { + uint64_t t; + t = kStartTsc * 88172645463325252 + 123456789123456789; + if (AT_RANDOM) { + for (; auxv[0]; auxv += 2) { + if (auxv[0] == AT_RANDOM) { + t ^= READ64LE((const char *)auxv[1]); + break; + } + } + } + thepool = t; +} + +const void *const g_rand64_init[] initarray = {rand64_init}; diff --git a/libc/rand/rdrand.c b/libc/rand/rdrand.c index 892d28eb2..64aa2315d 100644 --- a/libc/rand/rdrand.c +++ b/libc/rand/rdrand.c @@ -16,31 +16,8 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/assert.h" -#include "libc/bits/bits.h" -#include "libc/calls/calls.h" -#include "libc/nexgen32e/x86feature.h" #include "libc/rand/rand.h" -/** - * Intel Secure Key Digital Random Number Generator - * Introduced w/ Ivy Bridge c. 2013 and Excavator c. 2015 - * @see rdseed(), rand32(), rand64(), and randcpy() - */ uint64_t rdrand(void) { - char cf; - size_t i; - uint64_t res; - assert(X86_HAVE(RDRND)); - for (;;) { - for (i = 0; i < 10; ++i) { - /* CF=1: Destination register valid. Quoth Intel DRNG-SIG 4.1.3 */ - asm volatile(CFLAG_ASM("rdrand\t%1") - : CFLAG_CONSTRAINT(cf), "=r"(res) - : /* no inputs */ - : "cc"); - if (cf) return res; - } - asm volatile("rep nop"); /* unlikely 140 cycle spin */ - } + return rand64(); } diff --git a/libc/rand/rdseed.c b/libc/rand/rdseed.c index 30aeb12d3..a58dbf306 100644 --- a/libc/rand/rdseed.c +++ b/libc/rand/rdseed.c @@ -16,31 +16,17 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/assert.h" -#include "libc/bits/bits.h" -#include "libc/calls/calls.h" -#include "libc/nexgen32e/x86feature.h" #include "libc/rand/rand.h" +#include "libc/sysv/consts/grnd.h" -/** - * Intel Securer Key Digital Random Number Generator - * Introduced w/ Ivy Bridge c. 2013 and Excavator c. 2015 - * @see rdrand(), rand32(), rand64(), and randcpy() - */ uint64_t rdseed(void) { - char cf; - size_t i; - uint64_t res; - assert(X86_HAVE(RDSEED)); - for (;;) { - for (i = 0; i < 10; ++i) { - /* CF=1: Destination register valid. Quoth Intel DRNG-SIG 4.1.3 */ - asm volatile(CFLAG_ASM("rdseed\t%1") - : CFLAG_CONSTRAINT(cf), "=r"(res) - : /* no inputs */ - : "cc"); - if (cf) return res; - } - asm volatile("rep nop"); /* unlikely 140 cycle spin */ + register uint64_t x; + volatile uint64_t b; + if (getrandom(&b, 8, GRND_NONBLOCK | GRND_RANDOM) == 8) { + x = b; + b = 0; + } else { + x = (uint64_t)rand() << 62 | (uint64_t)rand() << 31 | rand(); } + return x; } diff --git a/libc/runtime/assertfail.c b/libc/runtime/assertfail.c index bfbf58ebe..ad37a218e 100644 --- a/libc/runtime/assertfail.c +++ b/libc/runtime/assertfail.c @@ -89,9 +89,9 @@ relegated wontreturn noasan void __assert_fail(const char *expr, if (line < 1) line = 1; for (i = 0; line; line /= 10) linebuf[i++] = '0' + line % 10; while (i) *p++ = linebuf[--i]; - p = __assert_stpcpy(p, ":"); + p = __assert_stpcpy(p, ": assert("); p = __assert_stpcpy(p, expr); - p = __assert_stpcpy(p, "\r\n"); + p = __assert_stpcpy(p, ")\r\n"); __assert_write(msg, p - msg); if (weaken(__die)) weaken(__die)(); } diff --git a/libc/sock/gethostips.c b/libc/sock/gethostips.c new file mode 100644 index 000000000..dd85e9a23 --- /dev/null +++ b/libc/sock/gethostips.c @@ -0,0 +1,122 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/bits/bits.h" +#include "libc/calls/internal.h" +#include "libc/mem/mem.h" +#include "libc/nt/errors.h" +#include "libc/nt/iphlpapi.h" +#include "libc/sock/sock.h" +#include "libc/str/str.h" +#include "libc/sysv/consts/af.h" +#include "libc/sysv/consts/ipproto.h" +#include "libc/sysv/consts/sio.h" +#include "libc/sysv/consts/sock.h" + +/* TODO(jart): DELETE */ + +static uint32_t *GetUnixIps(void) { + int fd, n; + uint64_t z; + uint32_t *a; + char *b, *p, *e, c[16]; + if ((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP)) == -1) return 0; + a = 0; + n = 0; + z = 15000; + b = malloc(z); + memcpy(c, &z, 8); + memcpy(c + (IsXnu() ? 4 : 8), &b, 8); + if (sys_ioctl(fd, SIOCGIFCONF, &c) != -1) { + for (p = b, e = p + MIN(z, READ32LE(c)); p + 16 + 16 <= e; + p += IsBsd() ? 16 + MAX(16, p[16] & 255) : 40) { + if ((p[IsBsd() ? 17 : 16] & 255) != AF_INET) continue; + a = realloc(a, ++n * sizeof(*a)); + a[n - 1] = READ32BE(p + 20); + } + a = realloc(a, ++n * sizeof(*a)); + a[n - 1] = 0; + } + close(fd); + free(b); + return a; +} + +static textwindows uint32_t *GetWindowsIps(void) { + uint32_t i, z, n, rc, *a; + NtIpAdapterUnicastAddress *u; + NtIpAdapterAddresses *p, *ifaces; + i = 0; + z = 15000; + do { + if (!(ifaces = malloc(z))) return 0; + rc = GetAdaptersAddresses(AF_INET, + kNtGaaFlagSkipAnycast | kNtGaaFlagSkipMulticast | + kNtGaaFlagSkipDnsServer | + kNtGaaFlagSkipFriendlyName, + 0, ifaces, &z); + if (rc != kNtErrorBufferOverflow) break; + free(ifaces); + ifaces = 0; + } while (++i < 3); + if (rc == kNtErrorNoData) { + a = calloc(1, sizeof(*a)); + } else if (rc == kNtNoError) { + for (a = 0, n = 0, p = ifaces; p; p = p->Next) { + if (p->OperStatus != kNtIfOperStatusUp) continue; + for (u = p->FirstUnicastAddress; u; u = u->Next) { + if (u->Address.lpSockaddr->sa_family != AF_INET) continue; + a = realloc(a, ++n * sizeof(*a)); + a[n - 1] = ntohl( + ((struct sockaddr_in *)u->Address.lpSockaddr)->sin_addr.s_addr); + } + } + a = realloc(a, ++n * sizeof(*a)); + a[n - 1] = 0; + } else { + __winerr(); + a = 0; + } + free(ifaces); + return a; +} + +/** + * Returns IP addresses of system. + * + * Normally return values will look like `{0x7f000001, 0x0a0a0a7c, 0}` + * which means the same thing as `{"127.0.0.1", "10.10.10.124", 0}`. + * Returned IPs will IPv4 anycast addresses bound to network interfaces + * which come in a NULL-terminated array with no particular ordering. + * + * uint32_t *ip, *ips = GetIps(); + * for (ip = ips; *ip; ++ip) { + * printf("%hhu.%hhu.%hhu.%hhu\n", *ip >> 24, *ip >> 16, *ip >> 8, *ip); + * } + * + * This function supports Windows, Linux, XNU, FreeBSD, NetBSD, OpenBSD. + * + * @return null-terminated ip array on success, or null w/ errno + */ +uint32_t *GetHostIps(void) { + if (!IsWindows()) { + return GetUnixIps(); + } else { + return GetWindowsIps(); + } +} diff --git a/libc/sock/getsockopt-nt.c b/libc/sock/getsockopt-nt.c index 7f589a176..49ccc4ee7 100644 --- a/libc/sock/getsockopt-nt.c +++ b/libc/sock/getsockopt-nt.c @@ -24,11 +24,11 @@ #include "libc/sysv/errfuns.h" textwindows int sys_getsockopt_nt(struct Fd *fd, int level, int optname, - void *out_opt_optval, uint32_t *out_optlen) { + void *out_opt_optval, uint32_t *out_optlen) { /* TODO(jart): Use WSAIoctl? */ assert(fd->kind == kFdSocket); - if (__sys_getsockopt_nt(fd->handle, level, optname, out_opt_optval, out_optlen) != - -1) { + if (__sys_getsockopt_nt(fd->handle, level, optname, out_opt_optval, + out_optlen) != -1) { return 0; } else { return __winsockerr(); diff --git a/libc/sock/inet_ntop.c b/libc/sock/inet_ntop.c index 66df9cbd3..3e8fbe99c 100644 --- a/libc/sock/inet_ntop.c +++ b/libc/sock/inet_ntop.c @@ -23,27 +23,70 @@ /** * Formats internet address to string. * - * @param af can be AF_INET + * @param af can be AF_INET or AF_INET6 * @param src is the binary-encoded address, e.g. &addr->sin_addr * @param dst is the output string buffer - * @param size is bytes in dst, which needs 16+ for IPv4 + * @param size needs to be 16+ for IPv4 and 72+ for IPv6 * @return dst on success or NULL w/ errno */ const char *inet_ntop(int af, const void *src, char *dst, uint32_t size) { char *p; - unsigned char *ip4; - if (src) { + unsigned char *ip; + int i, t, a, b, c, d; + p = dst; + if ((ip = src)) { if (af == AF_INET) { if (size >= 16) { - p = dst; - ip4 = src; - p += uint64toarray_radix10(ip4[0], p); + p += uint64toarray_radix10(ip[0], p); *p++ = '.'; - p += uint64toarray_radix10(ip4[1], p); + p += uint64toarray_radix10(ip[1], p); *p++ = '.'; - p += uint64toarray_radix10(ip4[2], p); + p += uint64toarray_radix10(ip[2], p); *p++ = '.'; - p += uint64toarray_radix10(ip4[3], p); + p += uint64toarray_radix10(ip[3], p); + *p = '\0'; + return dst; + } else { + enospc(); + } + } else if (af == AF_INET6) { + if (size >= 16 * 4 + 8) { + t = 0; + i = 0; + for (i = 0; i < 16; i += 2) { + switch (t) { + case 0: + if (!ip[i] && !ip[i + 1]) { + t = 1; + *p++ = ':'; + *p++ = ':'; + continue; + } else if (i) { + *p++ = ':'; + } + break; + case 1: + if (!ip[i] && !ip[i + 1]) { + continue; + } else { + t = 2; + } + break; + case 2: + *p++ = ':'; + break; + default: + unreachable; + } + a = (ip[i + 0] & 0xF0) >> 4; + b = (ip[i + 0] & 0x0F) >> 0; + c = (ip[i + 1] & 0xF0) >> 4; + d = (ip[i + 1] & 0x0F) >> 0; + if (a) *p++ = "0123456789abcdef"[a]; + if (a || b) *p++ = "0123456789abcdef"[b]; + if (a || b || c) *p++ = "0123456789abcdef"[c]; + *p++ = "0123456789abcdef"[d]; + } *p = '\0'; return dst; } else { diff --git a/libc/sock/internal.h b/libc/sock/internal.h index d19bf1c88..94ae89e19 100644 --- a/libc/sock/internal.h +++ b/libc/sock/internal.h @@ -181,7 +181,7 @@ int sys_close_epoll(int) hidden; * Converts sockaddr (Linux/Windows) → sockaddr_bsd (XNU/BSD). */ forceinline void sockaddr2bsd(void *saddr) { - uint8_t *p; + char *p; uint16_t fam; if (saddr) { p = saddr; @@ -195,7 +195,7 @@ forceinline void sockaddr2bsd(void *saddr) { * Converts sockaddr_in_bsd (XNU/BSD) → sockaddr (Linux/Windows). */ forceinline void sockaddr2linux(void *saddr) { - uint8_t *p, fam; + char *p, fam; if (saddr) { p = saddr; fam = p[1]; diff --git a/libc/sock/sock.h b/libc/sock/sock.h index 025af0f31..c196ae08c 100644 --- a/libc/sock/sock.h +++ b/libc/sock/sock.h @@ -81,7 +81,6 @@ struct msghdr { /* Linux+NT ABI */ uint32_t msg_flags; /* MSG_XXX */ }; - /* * Structure used in SIOCGIFCONF request. * Used to retrieve interface configuration @@ -89,50 +88,47 @@ struct msghdr { /* Linux+NT ABI */ * must know all networks accessible). */ struct ifconf { - uint64_t ifc_len; /* size of buffer */ + uint64_t ifc_len; /* size of buffer */ union { char *ifcu_buf; struct ifreq *ifcu_req; } ifc_ifcu; }; - /* Shortcuts to the ifconf buffer or ifreq array */ -#define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */ -#define ifc_req ifc_ifcu.ifcu_req /* array of structures */ +#define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */ +#define ifc_req ifc_ifcu.ifcu_req /* array of structures */ -#define IFHWADDRLEN 6 -#define IF_NAMESIZE 16 -#define IFNAMSIZ IF_NAMESIZE +#define IFHWADDRLEN 6 +#define IF_NAMESIZE 16 +#define IFNAMSIZ IF_NAMESIZE struct ifreq { union { - char ifrn_name[IFNAMSIZ]; /* Interface name, e.g. "en0". */ + char ifrn_name[IFNAMSIZ]; /* Interface name, e.g. "en0". */ } ifr_ifrn; union { - struct sockaddr ifru_addr; /* SIOCGIFADDR */ - struct sockaddr ifru_dstaddr; /* SIOCGIFDSTADDR */ - struct sockaddr ifru_netmask; /* SIOCGIFNETMASK */ - struct sockaddr ifru_broadaddr; /* SIOCGIFBRDADDR */ - short ifru_flags; /* SIOCGIFFLAGS */ - char ifru_pad[24]; /* ifru_map is the largest, just pad */ + struct sockaddr ifru_addr; /* SIOCGIFADDR */ + struct sockaddr ifru_dstaddr; /* SIOCGIFDSTADDR */ + struct sockaddr ifru_netmask; /* SIOCGIFNETMASK */ + struct sockaddr ifru_broadaddr; /* SIOCGIFBRDADDR */ + short ifru_flags; /* SIOCGIFFLAGS */ + char ifru_pad[24]; /* ifru_map is the largest, just pad */ } ifr_ifru; }; -#define ifr_name ifr_ifrn.ifrn_name /* interface name */ -#define ifr_addr ifr_ifru.ifru_addr /* address */ -#define ifr_netmask ifr_ifru.ifru_netmask /* netmask */ -#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */ -#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* destination address */ -#define ifr_flags ifr_ifru.ifru_flags /* flags */ - -#define _IOT_ifreq _IOT(_IOTS(char),IFNAMSIZ,_IOTS(char),16,0,0) -#define _IOT_ifreq_short _IOT(_IOTS(char),IFNAMSIZ,_IOTS(short),1,0,0) -#define _IOT_ifreq_int _IOT(_IOTS(char),IFNAMSIZ,_IOTS(int),1,0,0) - -#define IFF_UP (1<<0) +#define ifr_name ifr_ifrn.ifrn_name /* interface name */ +#define ifr_addr ifr_ifru.ifru_addr /* address */ +#define ifr_netmask ifr_ifru.ifru_netmask /* netmask */ +#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */ +#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* destination address */ +#define ifr_flags ifr_ifru.ifru_flags /* flags */ +#define _IOT_ifreq _IOT(_IOTS(char), IFNAMSIZ, _IOTS(char), 16, 0, 0) +#define _IOT_ifreq_short _IOT(_IOTS(char), IFNAMSIZ, _IOTS(short), 1, 0, 0) +#define _IOT_ifreq_int _IOT(_IOTS(char), IFNAMSIZ, _IOTS(int), 1, 0, 0) +#define IFF_UP (1 << 0) const char *inet_ntop(int, const void *, char *, uint32_t); int inet_aton(const char *, struct in_addr *); @@ -140,6 +136,7 @@ int inet_pton(int, const char *, void *); uint32_t inet_addr(const char *); char *inet_ntoa(struct in_addr); int parseport(const char *); +uint32_t *GetHostIps(void); int socket(int, int, int) nodiscard; int accept(int, void *, uint32_t *) nodiscard; diff --git a/libc/sock/sock.mk b/libc/sock/sock.mk index 2f1ee038f..ec58139a3 100644 --- a/libc/sock/sock.mk +++ b/libc/sock/sock.mk @@ -24,11 +24,9 @@ LIBC_SOCK_A_DIRECTDEPS = \ LIBC_FMT \ LIBC_INTRIN \ LIBC_MEM \ - LIBC_TIME \ - LIBC_STR \ - LIBC_UNICODE \ LIBC_NEXGEN32E \ LIBC_NT_ADVAPI32 \ + LIBC_NT_IPHLPAPI \ LIBC_NT_KERNEL32 \ LIBC_NT_MSWSOCK \ LIBC_NT_NTDLL \ @@ -37,8 +35,11 @@ LIBC_SOCK_A_DIRECTDEPS = \ LIBC_RUNTIME \ LIBC_STDIO \ LIBC_STR \ + LIBC_STR \ LIBC_STUBS \ LIBC_SYSV_CALLS \ + LIBC_TIME \ + LIBC_UNICODE \ LIBC_SYSV LIBC_SOCK_A_DEPS := \ diff --git a/libc/stdio/dirstream.c b/libc/stdio/dirstream.c index 77940a08a..5aafa41b1 100644 --- a/libc/stdio/dirstream.c +++ b/libc/stdio/dirstream.c @@ -16,7 +16,10 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/assert.h" #include "libc/bits/bits.h" +#include "libc/bits/weaken.h" +#include "libc/calls/calls.h" #include "libc/calls/internal.h" #include "libc/calls/struct/dirent.h" #include "libc/dce.h" @@ -27,10 +30,13 @@ #include "libc/nt/files.h" #include "libc/nt/runtime.h" #include "libc/nt/struct/win32finddata.h" +#include "libc/nt/synchronization.h" #include "libc/str/str.h" #include "libc/sysv/consts/dt.h" #include "libc/sysv/consts/o.h" #include "libc/sysv/errfuns.h" +#include "libc/zip.h" +#include "libc/zipos/zipos.internal.h" /** * @fileoverview Directory Streams for Linux+Mac+Windows+FreeBSD+OpenBSD. @@ -46,14 +52,21 @@ * Directory stream object. */ struct dirstream { + bool iszip; int64_t fd; int64_t tell; + struct { + uint64_t offset; + uint64_t records; + uint8_t *prefix; + size_t prefixlen; + } zip; struct dirent ent; union { struct { unsigned buf_pos; unsigned buf_end; - char buf[BUFSIZ]; + uint64_t buf[BUFSIZ / 8]; }; struct { bool isdone; @@ -100,7 +113,9 @@ struct dirent_netbsd { static textwindows DIR *opendir_nt_impl(char16_t name[PATH_MAX], size_t len) { DIR *res; if (len + 2 + 1 <= PATH_MAX) { - if (name[len - 1] != u'\\') name[len++] = u'\\'; + if (len > 1 && name[len - 1] != u'\\') { + name[len++] = u'\\'; + } name[len++] = u'*'; name[len] = u'\0'; if ((res = calloc(1, sizeof(DIR)))) { @@ -141,34 +156,39 @@ static textwindows noinline DIR *fdopendir_nt(int fd) { return NULL; } +static textwindows uint8_t GetNtDirentType(struct NtWin32FindData *w) { + switch (w->dwFileType) { + case kNtFileTypeDisk: + return DT_BLK; + case kNtFileTypeChar: + return DT_CHR; + case kNtFileTypePipe: + return DT_FIFO; + default: + if (w->dwFileAttributes & kNtFileAttributeDirectory) { + return DT_DIR; + } else { + return DT_REG; + } + } +} + static textwindows noinline struct dirent *readdir_nt(DIR *dir) { + size_t i; if (!dir->isdone) { memset(&dir->ent, 0, sizeof(dir->ent)); - dir->ent.d_ino = 0; + dir->ent.d_ino++; dir->ent.d_off = dir->tell++; - dir->ent.d_reclen = sizeof(dir->ent) + - tprecode16to8(dir->ent.d_name, sizeof(dir->ent.d_name), - dir->windata.cFileName) - .ax + - 1; - switch (dir->windata.dwFileType) { - case kNtFileTypeDisk: - dir->ent.d_type = DT_BLK; - break; - case kNtFileTypeChar: - dir->ent.d_type = DT_CHR; - break; - case kNtFileTypePipe: - dir->ent.d_type = DT_FIFO; - break; - default: - if (dir->windata.dwFileAttributes & kNtFileAttributeDirectory) { - dir->ent.d_type = DT_DIR; - } else { - dir->ent.d_type = DT_REG; - } - break; + dir->ent.d_reclen = + tprecode16to8(dir->ent.d_name, sizeof(dir->ent.d_name) - 2, + dir->windata.cFileName) + .ax; + for (i = 0; i < dir->ent.d_reclen; ++i) { + if (dir->ent.d_name[i] == '\\') { + dir->ent.d_name[i] = '/'; + } } + dir->ent.d_type = GetNtDirentType(&dir->windata); dir->isdone = !FindNextFile(dir->fd, &dir->windata); return &dir->ent; } else { @@ -194,10 +214,29 @@ static textwindows noinline struct dirent *readdir_nt(DIR *dir) { DIR *opendir(const char *name) { int fd; DIR *res; - if (!IsWindows()) { + struct Zipos *zip; + struct ZiposUri zipname; + if (weaken(__zipos_get) && weaken(__zipos_parseuri)(name, &zipname) != -1) { + zip = weaken(__zipos_get)(); + res = calloc(1, sizeof(DIR)); + res->iszip = true; + res->fd = -1; + res->zip.offset = GetZipCdirOffset(zip->cdir); + res->zip.records = GetZipCdirRecords(zip->cdir); + res->zip.prefix = malloc(zipname.len + 2); + memcpy(res->zip.prefix, zipname.path, zipname.len); + if (zipname.len && res->zip.prefix[zipname.len - 1] != '/') { + res->zip.prefix[zipname.len++] = '/'; + } + res->zip.prefix[zipname.len] = '\0'; + res->zip.prefixlen = zipname.len; + return res; + } else if (!IsWindows()) { res = NULL; if ((fd = open(name, O_RDONLY | O_DIRECTORY | O_CLOEXEC)) != -1) { - if (!(res = fdopendir(fd))) close(fd); + if (!(res = fdopendir(fd))) { + close(fd); + } } return res; } else { @@ -234,13 +273,44 @@ DIR *fdopendir(int fd) { * differentiated by setting errno to 0 beforehand */ struct dirent *readdir(DIR *dir) { - int rc; + size_t n; long basep; + int rc, mode; + uint8_t *s, *p; + struct Zipos *zip; struct dirent *ent; struct dirent_bsd *bsd; struct dirent_netbsd *nbsd; struct dirent_openbsd *obsd; - if (!IsWindows()) { + if (dir->iszip) { + ent = 0; + zip = weaken(__zipos_get)(); + while (!ent && dir->tell < dir->zip.records) { + assert(ZIP_CFILE_MAGIC(zip->map + dir->zip.offset) == kZipCfileHdrMagic); + s = ZIP_CFILE_NAME(zip->map + dir->zip.offset); + n = ZIP_CFILE_NAMESIZE(zip->map + dir->zip.offset); + if (dir->zip.prefixlen < n && + !memcmp(dir->zip.prefix, s, dir->zip.prefixlen)) { + s += dir->zip.prefixlen; + n -= dir->zip.prefixlen; + p = memchr(s, '/', n); + if (!p || p + 1 - s == n) { + if (p + 1 - s == n) --n; + mode = GetZipCfileMode(zip->map + dir->zip.offset); + ent = (struct dirent *)dir->buf; + ent->d_ino++; + ent->d_off = dir->zip.offset; + ent->d_reclen = MIN(n, 255); + ent->d_type = S_ISDIR(mode) ? DT_DIR : DT_REG; + memcpy(ent->d_name, s, ent->d_reclen); + ent->d_name[ent->d_reclen] = 0; + } + } + dir->zip.offset += ZIP_CFILE_HDRSIZE(zip->map + dir->zip.offset); + dir->tell++; + } + return ent; + } else if (!IsWindows()) { if (dir->buf_pos >= dir->buf_end) { basep = dir->tell; /* TODO(jart): what does xnu do */ rc = getdents(dir->fd, dir->buf, sizeof(dir->buf) - 256, &basep); @@ -249,11 +319,11 @@ struct dirent *readdir(DIR *dir) { dir->buf_end = rc; } if (IsLinux()) { - ent = (struct dirent *)(dir->buf + dir->buf_pos); + ent = (struct dirent *)((char *)dir->buf + dir->buf_pos); dir->buf_pos += ent->d_reclen; dir->tell = ent->d_off; } else if (IsOpenbsd()) { - obsd = (struct dirent_openbsd *)(dir->buf + dir->buf_pos); + obsd = (struct dirent_openbsd *)((char *)dir->buf + dir->buf_pos); dir->buf_pos += obsd->d_reclen; ent = &dir->ent; ent->d_ino = obsd->d_fileno; @@ -262,7 +332,7 @@ struct dirent *readdir(DIR *dir) { ent->d_type = obsd->d_type; memcpy(ent->d_name, obsd->d_name, obsd->d_namlen + 1); } else if (IsNetbsd()) { - nbsd = (struct dirent_netbsd *)(dir->buf + dir->buf_pos); + nbsd = (struct dirent_netbsd *)((char *)dir->buf + dir->buf_pos); dir->buf_pos += nbsd->d_reclen; ent = &dir->ent; ent->d_ino = nbsd->d_fileno; @@ -271,7 +341,7 @@ struct dirent *readdir(DIR *dir) { ent->d_type = nbsd->d_type; memcpy(ent->d_name, nbsd->d_name, MAX(256, nbsd->d_namlen + 1)); } else { - bsd = (struct dirent_bsd *)(dir->buf + dir->buf_pos); + bsd = (struct dirent_bsd *)((char *)dir->buf + dir->buf_pos); dir->buf_pos += bsd->d_reclen; ent = &dir->ent; ent->d_ino = bsd->d_fileno; @@ -293,7 +363,10 @@ struct dirent *readdir(DIR *dir) { int closedir(DIR *dir) { int rc; if (dir) { - if (!IsWindows()) { + if (dir->iszip) { + free(dir->zip.prefix); + rc = 0; + } else if (!IsWindows()) { rc = close(dir->fd); } else { rc = FindClose(dir->fd) ? 0 : __winerr(); @@ -316,6 +389,7 @@ long telldir(DIR *dir) { * Returns file descriptor associated with DIR object. */ int dirfd(DIR *dir) { + if (dir->iszip) return eopnotsupp(); if (IsWindows()) return eopnotsupp(); return dir->fd; } diff --git a/libc/str/mbsrtowcs.c b/libc/str/mbsrtowcs.c index ac9d67ede..3e90b46bc 100644 --- a/libc/str/mbsrtowcs.c +++ b/libc/str/mbsrtowcs.c @@ -66,15 +66,6 @@ size_t mbsrtowcs(wchar_t *ws, const char **src, size_t wn, mbstate_t *st) { } if (!ws) for (;;) { -#ifdef __GNUC__ - typedef uint32_t __attribute__((__may_alias__)) w32; - if (*s - 1u < 0x7f && (uintptr_t)s % 4 == 0) { - while (!((*(w32 *)s | *(w32 *)s - 0x01010101) & 0x80808080)) { - s += 4; - wn -= 4; - } - } -#endif if (*s - 1u < 0x7f) { s++; wn--; @@ -111,19 +102,6 @@ size_t mbsrtowcs(wchar_t *ws, const char **src, size_t wn, mbstate_t *st) { *src = (const void *)s; return wn0; } -#ifdef __GNUC__ - typedef uint32_t __attribute__((__may_alias__)) w32; - if (*s - 1u < 0x7f && (uintptr_t)s % 4 == 0) { - while (wn >= 5 && - !((*(w32 *)s | *(w32 *)s - 0x01010101) & 0x80808080)) { - *ws++ = *s++; - *ws++ = *s++; - *ws++ = *s++; - *ws++ = *s++; - wn -= 4; - } - } -#endif if (*s - 1u < 0x7f) { *ws++ = *s++; wn--; diff --git a/libc/sysv/calls/sys_getrandom.s b/libc/sysv/calls/sys_getrandom.s index b1523dcd5..f6ddb33f1 100644 --- a/libc/sysv/calls/sys_getrandom.s +++ b/libc/sysv/calls/sys_getrandom.s @@ -1,2 +1,2 @@ .include "o/libc/sysv/macros.internal.inc" -.scall sys_getrandom,0x05b00723321f413e,globl,hidden +.scall sys_getrandom,0xfff00723321f413e,globl,hidden diff --git a/libc/sysv/consts.sh b/libc/sysv/consts.sh index 140445c56..8ec8a2c76 100755 --- a/libc/sysv/consts.sh +++ b/libc/sysv/consts.sh @@ -151,6 +151,7 @@ syscon sig SIGIO 29 23 23 23 23 29 # bsd consensus syscon sig SIGSYS 31 12 12 12 12 31 # wut; bsd consensus syscon sig SIGRTMAX 0 0 126 0 63 0 syscon sig SIGRTMIN 0 0 65 0 33 0 +syscon sig SIGEMT 0 7 7 7 7 0 # not implemented in most community editions of system five; consider doing this using SIGUSR1 or SIGUSR2 instead syscon compat SIGPOLL 29 23 23 23 23 29 # same as SIGIO syscon compat SIGIOT 6 6 6 6 6 6 # PDP-11 feature; same as SIGABRT syscon compat SIGPWR 30 30 30 30 32 30 # not implemented in most community editions of system five; consider doing this using SIGUSR1 or SIGUSR2 instead @@ -170,7 +171,7 @@ syscon open O_APPEND 0x00000400 8 8 8 8 0x00000004 # bsd consensus syscon open O_CREAT 0x00000040 0x00000200 0x00000200 0x00000200 0x00000200 0x00000040 # bsd consensus & NT faked as Linux syscon open O_EXCL 0x00000080 0x00000800 0x00000800 0x00000800 0x00000800 0x00000080 # bsd consensus & NT faked as Linux syscon open O_TRUNC 0x00000200 0x00000400 0x00000400 0x00000400 0x00000400 0x00000200 # bsd consensus & NT faked as Linux -syscon open O_DIRECTORY 0x00010000 0x00100000 0x00020000 0x00020000 0x00200000 0x02000000 # kNtFileFlagBackupSemantics +syscon open O_DIRECTORY 0x00010000 0x00100000 0x00020000 0x00020000 0x00200000 0x02000000 # useful hint on UNIX, but required on NT (see kNtFileFlagBackupSemantics) syscon open O_DIRECT 0x00004000 0 0x00010000 0 0x00080000 0x00200000 # kNtFileFlagNoBuffering>>8 syscon open O_CLOEXEC 0x00080000 0x01000000 0x00100000 0x00010000 0x00400000 0x00080000 # NT faked as Linux syscon open O_TMPFILE 0x00410000 0 0 0 0 0x04000100 # Linux 3.11+ (c. 2013) & kNtFileAttributeTemporary|kNtFileFlagDeleteOnClose diff --git a/libc/sysv/consts/SIGEMT.S b/libc/sysv/consts/SIGEMT.S new file mode 100644 index 000000000..a0d4291fd --- /dev/null +++ b/libc/sysv/consts/SIGEMT.S @@ -0,0 +1,2 @@ +#include "libc/sysv/consts/syscon.internal.h" +.syscon sig,SIGEMT,0,7,7,7,7,0 diff --git a/libc/sysv/consts/grnd.h b/libc/sysv/consts/grnd.h index f9eba9185..82c93189e 100644 --- a/libc/sysv/consts/grnd.h +++ b/libc/sysv/consts/grnd.h @@ -2,7 +2,9 @@ #define COSMOPOLITAN_LIBC_SYSV_CONSTS_GRND_H_ #include "libc/runtime/symbolic.h" -#define GRND_NONBLOCK LITERALLY(1) -#define GRND_RANDOM LITERALLY(2) +#define GRND_NONBLOCK 1 +#define GRND_RANDOM 2 +#define GRND_NORDRND 64 +#define GRND_NOSYSTEM 128 #endif /* COSMOPOLITAN_LIBC_SYSV_CONSTS_GRND_H_ */ diff --git a/libc/sysv/consts/sig.h b/libc/sysv/consts/sig.h index 3ef18e8e0..909a26e12 100644 --- a/libc/sysv/consts/sig.h +++ b/libc/sysv/consts/sig.h @@ -41,6 +41,7 @@ extern const long SIGVTALRM; extern const long SIGWINCH; extern const long SIGXCPU; extern const long SIGXFSZ; +extern const long SIGEMT; extern const long SIG_ATOMIC_MIN; extern const long SIG_BLOCK; @@ -50,47 +51,48 @@ extern const long SIG_UNBLOCK; COSMOPOLITAN_C_END_ #endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ -#define SIGABRT LITERALLY(6) -#define SIGALRM LITERALLY(14) -#define SIGBUS SYMBOLIC(SIGBUS) -#define SIGCHLD SYMBOLIC(SIGCHLD) -#define SIGCONT SYMBOLIC(SIGCONT) -#define SIGFPE LITERALLY(8) -#define SIGHUP LITERALLY(1) -#define SIGILL LITERALLY(4) -#define SIGINT LITERALLY(2) -#define SIGIO SYMBOLIC(SIGIO) -#define SIGIOT LITERALLY(6) -#define SIGKILL LITERALLY(9) -#define SIGPIPE LITERALLY(13) -#define SIGPOLL SYMBOLIC(SIGPOLL) -#define SIGPROF LITERALLY(27) -#define SIGPWR SYMBOLIC(SIGPWR) -#define SIGQUIT LITERALLY(3) -#define SIGRTMAX SYMBOLIC(SIGRTMAX) -#define SIGRTMIN SYMBOLIC(SIGRTMIN) -#define SIGSEGV LITERALLY(11) +#define SIGABRT LITERALLY(6) +#define SIGALRM LITERALLY(14) +#define SIGBUS SYMBOLIC(SIGBUS) +#define SIGCHLD SYMBOLIC(SIGCHLD) +#define SIGCONT SYMBOLIC(SIGCONT) +#define SIGFPE LITERALLY(8) +#define SIGHUP LITERALLY(1) +#define SIGILL LITERALLY(4) +#define SIGINT LITERALLY(2) +#define SIGIO SYMBOLIC(SIGIO) +#define SIGIOT LITERALLY(6) +#define SIGKILL LITERALLY(9) +#define SIGPIPE LITERALLY(13) +#define SIGPOLL SYMBOLIC(SIGPOLL) +#define SIGPROF LITERALLY(27) +#define SIGPWR SYMBOLIC(SIGPWR) +#define SIGQUIT LITERALLY(3) +#define SIGRTMAX SYMBOLIC(SIGRTMAX) +#define SIGRTMIN SYMBOLIC(SIGRTMIN) +#define SIGSEGV LITERALLY(11) #define SIGSTKFLT SYMBOLIC(SIGSTKFLT) -#define SIGSTKSZ SYMBOLIC(SIGSTKSZ) -#define SIGSTOP SYMBOLIC(SIGSTOP) -#define SIGSYS SYMBOLIC(SIGSYS) -#define SIGTERM LITERALLY(15) -#define SIGTRAP LITERALLY(5) -#define SIGTSTP SYMBOLIC(SIGTSTP) -#define SIGTTIN LITERALLY(21) -#define SIGTTOU LITERALLY(22) +#define SIGSTKSZ SYMBOLIC(SIGSTKSZ) +#define SIGSTOP SYMBOLIC(SIGSTOP) +#define SIGSYS SYMBOLIC(SIGSYS) +#define SIGTERM LITERALLY(15) +#define SIGTRAP LITERALLY(5) +#define SIGTSTP SYMBOLIC(SIGTSTP) +#define SIGTTIN LITERALLY(21) +#define SIGTTOU LITERALLY(22) #define SIGUNUSED SYMBOLIC(SIGUNUSED) -#define SIGURG SYMBOLIC(SIGURG) -#define SIGUSR1 SYMBOLIC(SIGUSR1) -#define SIGUSR2 SYMBOLIC(SIGUSR2) +#define SIGURG SYMBOLIC(SIGURG) +#define SIGUSR1 SYMBOLIC(SIGUSR1) +#define SIGUSR2 SYMBOLIC(SIGUSR2) #define SIGVTALRM LITERALLY(26) -#define SIGWINCH LITERALLY(28) -#define SIGXCPU LITERALLY(24) -#define SIGXFSZ LITERALLY(25) +#define SIGWINCH LITERALLY(28) +#define SIGXCPU LITERALLY(24) +#define SIGXFSZ LITERALLY(25) +#define SIGEMT SYMBOLIC(SIGEMT) #define SIG_ATOMIC_MIN SYMBOLIC(SIG_ATOMIC_MIN) -#define SIG_BLOCK SYMBOLIC(SIG_BLOCK) -#define SIG_SETMASK SYMBOLIC(SIG_SETMASK) -#define SIG_UNBLOCK SYMBOLIC(SIG_UNBLOCK) +#define SIG_BLOCK SYMBOLIC(SIG_BLOCK) +#define SIG_SETMASK SYMBOLIC(SIG_SETMASK) +#define SIG_UNBLOCK SYMBOLIC(SIG_UNBLOCK) #endif /* COSMOPOLITAN_LIBC_SYSV_CONSTS_SIG_H_ */ diff --git a/libc/sysv/syscalls.sh b/libc/sysv/syscalls.sh index 7acd419cb..24b420e6d 100755 --- a/libc/sysv/syscalls.sh +++ b/libc/sysv/syscalls.sh @@ -349,7 +349,7 @@ scall sched_setattr 0xfffffffffffff13a globl # ├─ desktop replaced with ta scall sched_getattr 0xfffffffffffff13b globl # ├─ karen sandler requires systemd init and boot for tablet gui scall renameat2 0xfffffffffffff13c globl # └─ debian founder ian murdock found strangled with vacuum cord scall seccomp 0xfffffffffffff13d globl -scall sys_getrandom 0x05b00723321f413e globl hidden # Linux 3.17+ and getentropy() on XNU/OpenBSD +scall sys_getrandom 0xfff00723321f413e globl hidden # Linux 3.17+ and getentropy() on XNU/OpenBSD, coming to NetBSD in 9.2 scall memfd_create 0xfffffffffffff13f globl # wut scall kexec_file_load 0xfffffffffffff140 globl scall bpf 0xfffffffffffff141 globl diff --git a/libc/testlib/formatstr.c b/libc/testlib/formatstr.c index 0757f67cb..5e9a24460 100644 --- a/libc/testlib/formatstr.c +++ b/libc/testlib/formatstr.c @@ -25,17 +25,21 @@ * Turns string into code. */ nodiscard testonly char *testlib_formatstr(size_t cw, const void *s, int n) { - switch (cw) { - case 1: - if (n == -1) n = s ? strlen(s) : 0; - return xasprintf("%`'.*s", n, s); - case 2: - if (n == -1) n = s ? strlen16(s) : 0; - return xasprintf("%`'.*hs", n, s); - case 4: - if (n == -1) n = s ? wcslen(s) : 0; - return xasprintf("%`'.*ls", n, s); - default: - abort(); + if (s) { + switch (cw) { + case 1: + if (n == -1) n = s ? strlen(s) : 0; + return xasprintf("%`'.*s", n, s); + case 2: + if (n == -1) n = s ? strlen16(s) : 0; + return xasprintf("%`'.*hs", n, s); + case 4: + if (n == -1) n = s ? wcslen(s) : 0; + return xasprintf("%`'.*ls", n, s); + default: + abort(); + } + } else { + return strdup("NULL"); } } diff --git a/libc/time/strftime.c b/libc/time/strftime.c index fce7fb70b..70082babd 100644 --- a/libc/time/strftime.c +++ b/libc/time/strftime.c @@ -381,7 +381,6 @@ static char *strftime_timefmt(char *p, const char *pe, const char *format, */ size_t strftime(char *s, size_t size, const char *f, const struct tm *t) { char *p; - assert(t); p = strftime_timefmt(s, s + size, f, t); if (p < s + size) { *p = '\0'; diff --git a/libc/x/x.h b/libc/x/x.h index 5bab222f5..e842ddbd0 100644 --- a/libc/x/x.h +++ b/libc/x/x.h @@ -75,7 +75,9 @@ char *xiso8601ts(struct timespec *) mallocesque; │ cosmopolitan § eXtended apis » input / output ─╬─│┼ ╚────────────────────────────────────────────────────────────────────────────│*/ -char *xslurp(const char *, size_t *) paramsnonnull((1)) _XMALPG nodiscard; +char *xslurp(const char *, size_t *) + paramsnonnull((1)) returnspointerwithnoaliases + returnsaligned((PAGESIZE)) nodiscard; int xbarf(const char *, const void *, size_t); /*───────────────────────────────────────────────────────────────────────────│─╗ diff --git a/libc/rand/devrand.c b/libc/zipos/lseek.c similarity index 69% rename from libc/rand/devrand.c rename to libc/zipos/lseek.c index 044cd7300..8d463a335 100644 --- a/libc/rand/devrand.c +++ b/libc/zipos/lseek.c @@ -1,7 +1,7 @@ /*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ │vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ ╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ │ │ │ Permission to use, copy, modify, and/or distribute this software for │ │ any purpose with or without fee is hereby granted, provided that the │ @@ -16,38 +16,36 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/bits/bits.h" -#include "libc/dce.h" -#include "libc/rand/rand.h" -#include "libc/str/str.h" -#include "libc/calls/internal.h" #include "libc/calls/calls.h" #include "libc/sysv/errfuns.h" -#include "libc/sysv/consts/at.h" -#include "libc/sysv/consts/nr.h" -#include "libc/sysv/consts/o.h" +#include "libc/zipos/zipos.internal.h" /** - * Reads random bytes from system pseudo random number api. - * @return 0 on success or -1 w/ errno + * Changes current position of zip file handle. + * + * @param offset is the relative byte count + * @param whence can be SEEK_SET, SEEK_CUR, or SEEK_END + * @return new position relative to beginning, or -1 on error + * @asyncsignalsafe */ -int devrand(void *buf, size_t size) { - int fd; - size_t got; - ssize_t rc; - unsigned char *p, *pe; - fd = -1; - if (IsWindows()) return enosys(); - if ((fd = sys_openat(AT_FDCWD, "/dev/urandom", O_RDONLY, 0)) == -1) { - return -1; +int64_t __zipos_lseek(struct ZiposHandle *h, int64_t offset, unsigned whence) { + int64_t i; + switch (whence) { + case SEEK_SET: + i = offset; + break; + case SEEK_CUR: + i = h->pos + offset; + break; + case SEEK_END: + i = h->size - offset; + break; + default: + return einval(); } - p = buf; - pe = p + size; - while (p < pe) { - if ((rc = sys_read(fd, p, pe - p)) == -1) break; - if (!(got = (size_t)rc)) break; - p += got; + if (i < 0) { + return einval(); } - sys_close(fd); - return p == pe ? 0 : -1; + h->pos = i; + return i; } diff --git a/libc/zipos/open.c b/libc/zipos/open.c index e4e4705b9..dfef788ac 100644 --- a/libc/zipos/open.c +++ b/libc/zipos/open.c @@ -94,18 +94,16 @@ static int __zipos_load(struct Zipos *zipos, size_t cf, unsigned flags, kZipCompressionDeflate); if (!(h = calloc(1, sizeof(*h)))) return -1; h->cfile = cf; - if ((h->size = GetZipLfileUncompressedSize(zipos->map + lf))) { - if (ZIP_LFILE_COMPRESSIONMETHOD(zipos->map + lf)) { - assert(GetZipLfileCompressedSize(zipos->map + lf)); - if ((h->freeme = malloc(h->size)) && - (IsTiny() ? __zipos_inflate_tiny : __zipos_inflate_fast)( - h, ZIP_LFILE_CONTENT(zipos->map + lf), - GetZipLfileCompressedSize(zipos->map + lf)) != -1) { - h->mem = h->freeme; - } - } else { - h->mem = ZIP_LFILE_CONTENT(zipos->map + lf); + h->size = GetZipLfileUncompressedSize(zipos->map + lf); + if (ZIP_LFILE_COMPRESSIONMETHOD(zipos->map + lf)) { + if ((h->freeme = malloc(h->size)) && + (IsTiny() ? __zipos_inflate_tiny : __zipos_inflate_fast)( + h, ZIP_LFILE_CONTENT(zipos->map + lf), + GetZipLfileCompressedSize(zipos->map + lf)) != -1) { + h->mem = h->freeme; } + } else { + h->mem = ZIP_LFILE_CONTENT(zipos->map + lf); } if (!IsTiny() && h->mem && crc32_z(0, h->mem, h->size) != ZIP_LFILE_CRC32(zipos->map + lf)) { @@ -138,7 +136,7 @@ int __zipos_open(const struct ZiposUri *name, unsigned flags, int mode) { ssize_t cf; sigset_t oldmask; struct Zipos *zipos; - assert((flags & O_ACCMODE) == O_RDONLY); + if ((flags & O_ACCMODE) != O_RDONLY) return einval(); if ((zipos = __zipos_get())) { if ((cf = __zipos_find(zipos, name)) != -1) { fd = __zipos_load(zipos, cf, flags, mode); diff --git a/libc/zipos/zipos.S b/libc/zipos/zipos.S index 44259a173..9108c76c7 100644 --- a/libc/zipos/zipos.S +++ b/libc/zipos/zipos.S @@ -27,6 +27,7 @@ .yoink __zipos_close .yoink __zipos_fstat .yoink __zipos_open + .yoink __zipos_lseek .yoink __zipos_parseuri .yoink __zipos_read .yoink __zipos_stat diff --git a/libc/zipos/zipos.internal.h b/libc/zipos/zipos.internal.h index 23d42e508..c5960d3ab 100644 --- a/libc/zipos/zipos.internal.h +++ b/libc/zipos/zipos.internal.h @@ -40,6 +40,7 @@ ssize_t __zipos_read(struct ZiposHandle *, const struct iovec *, size_t, ssize_t) hidden; ssize_t __zipos_write(struct ZiposHandle *, const struct iovec *, size_t, ssize_t) hidden; +int64_t __zipos_lseek(struct ZiposHandle *, int64_t, unsigned) hidden; COSMOPOLITAN_C_END_ #endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ diff --git a/net/http/decodebase64.c b/net/http/decodebase64.c index 4a8cc9ec1..26d5844c2 100644 --- a/net/http/decodebase64.c +++ b/net/http/decodebase64.c @@ -16,6 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/macros.internal.h" #include "libc/mem/mem.h" #include "libc/str/str.h" #include "net/http/escape.h" @@ -23,10 +24,10 @@ static const signed char kBase64[256] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0x00 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0x10 - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, // 0x20 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, 62, -1, 63, // 0x20 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -2, -1, -1, // 0x30 -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, // 0x40 - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, // 0x50 + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, 63, // 0x50 -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, // 0x60 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1, // 0x70 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 0x80 @@ -42,6 +43,11 @@ static const signed char kBase64[256] = { /** * Decodes base64 ascii representation to binary. * + * This supports the following alphabets: + * + * - ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ + * - ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_ + * * @param data is input value * @param size if -1 implies strlen * @param out_size if non-NULL receives output length @@ -53,7 +59,7 @@ char *DecodeBase64(const char *data, size_t size, size_t *out_size) { int a, b, c, d, w; const char *p, *pe; if (size == -1) size = data ? strlen(data) : 0; - if ((r = malloc(size / 4 * 3 + 1))) { + if ((r = malloc(ROUNDUP(size, 4) / 4 * 3 + 1))) { q = r; p = data; pe = p + size; diff --git a/net/http/headerhassubstring.c b/net/http/headerhassubstring.c index 75ccca9ee..59103b4d9 100644 --- a/net/http/headerhassubstring.c +++ b/net/http/headerhassubstring.c @@ -30,7 +30,7 @@ * @param n is byte length of s where -1 implies strlen * @return true if substring present */ -bool HeaderHas(struct HttpRequest *m, const char *b, int h, const char *s, +bool HeaderHas(struct HttpMessage *m, const char *b, int h, const char *s, size_t n) { size_t i; assert(0 <= h && h < kHttpHeadersMax); diff --git a/net/http/http.h b/net/http/http.h index 81922a427..a2d3f5ae8 100644 --- a/net/http/http.h +++ b/net/http/http.h @@ -99,27 +99,32 @@ #if !(__ASSEMBLER__ + __LINKER__ + 0) COSMOPOLITAN_C_START_ -struct HttpRequestSlice { +struct HttpSlice { short a, b; }; -struct HttpRequest { - int i, a; +struct HttpHeader { + struct HttpSlice k; + struct HttpSlice v; +}; + +struct HttpHeaders { + unsigned n; + struct HttpHeader *p; +}; + +struct HttpMessage { + int i, a, status; unsigned char t; unsigned char method; unsigned char version; - struct HttpRequestSlice k; - struct HttpRequestSlice uri; - struct HttpRequestSlice scratch; - struct HttpRequestSlice headers[kHttpHeadersMax]; - struct HttpRequestSlice xmethod; - struct HttpRequestHeaders { - unsigned n; - struct HttpRequestHeader { - struct HttpRequestSlice k; - struct HttpRequestSlice v; - } * p; - } xheaders; + struct HttpSlice k; + struct HttpSlice uri; + struct HttpSlice scratch; + struct HttpSlice message; + struct HttpSlice headers[kHttpHeadersMax]; + struct HttpSlice xmethod; + struct HttpHeaders xheaders; }; extern const char kHttpToken[256]; @@ -130,10 +135,13 @@ const char *GetHttpReason(int); const char *GetHttpHeaderName(int); int GetHttpHeader(const char *, size_t); int GetHttpMethod(const char *, size_t); -void InitHttpRequest(struct HttpRequest *); -void DestroyHttpRequest(struct HttpRequest *); -int ParseHttpRequest(struct HttpRequest *, const char *, size_t); -bool HeaderHas(struct HttpRequest *, const char *, int, const char *, size_t); +void InitHttpRequest(struct HttpMessage *); +void DestroyHttpRequest(struct HttpMessage *); +int ParseHttpRequest(struct HttpMessage *, const char *, size_t); +void InitHttpResponse(struct HttpMessage *); +void DestroyHttpResponse(struct HttpMessage *); +int ParseHttpResponse(struct HttpMessage *, const char *, size_t); +bool HeaderHas(struct HttpMessage *, const char *, int, const char *, size_t); int64_t ParseContentLength(const char *, size_t); char *FormatHttpDateTime(char[hasatleast 30], struct tm *); bool ParseHttpRange(const char *, size_t, long, long *, long *); diff --git a/net/http/parsehttprequest.c b/net/http/parsehttprequest.c index 6fea1c1fb..2d00c9b4d 100644 --- a/net/http/parsehttprequest.c +++ b/net/http/parsehttprequest.c @@ -35,14 +35,14 @@ enum { START, METHOD, URI, VERSION, HKEY, HSEP, HVAL, CR1, LF1, LF2 }; /** * Initializes HTTP request parser. */ -void InitHttpRequest(struct HttpRequest *r) { +void InitHttpRequest(struct HttpMessage *r) { memset(r, 0, sizeof(*r)); } /** * Destroys HTTP request parser. */ -void DestroyHttpRequest(struct HttpRequest *r) { +void DestroyHttpRequest(struct HttpMessage *r) { if (r->xheaders.p) { free(r->xheaders.p); r->xheaders.p = NULL; @@ -83,9 +83,9 @@ void DestroyHttpRequest(struct HttpRequest *r) { * @see HTTP/1.1 RFC2616 RFC2068 * @see HTTP/1.0 RFC1945 */ -int ParseHttpRequest(struct HttpRequest *r, const char *p, size_t n) { +int ParseHttpRequest(struct HttpMessage *r, const char *p, size_t n) { int c, h, i; - struct HttpRequestHeader *x; + struct HttpHeader *x; for (n = MIN(n, LIMIT); r->i < n; ++r->i) { c = p[r->i] & 0xff; switch (r->t) { diff --git a/net/http/parsehttpresponse.c b/net/http/parsehttpresponse.c new file mode 100644 index 000000000..fe6e9793d --- /dev/null +++ b/net/http/parsehttpresponse.c @@ -0,0 +1,187 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/bits/bits.h" +#include "libc/limits.h" +#include "libc/macros.internal.h" +#include "libc/mem/mem.h" +#include "libc/str/str.h" +#include "libc/sysv/errfuns.h" +#include "net/http/http.h" + +#define LIMIT (SHRT_MAX - 2) + +enum { START, VERSION, STATUS, MESSAGE, HKEY, HSEP, HVAL, CR1, LF1, LF2 }; + +/** + * Initializes HTTP response parser. + */ +void InitHttpResponse(struct HttpMessage *r) { + memset(r, 0, sizeof(*r)); +} + +/** + * Destroys HTTP response parser. + */ +void DestroyHttpResponse(struct HttpMessage *r) { + if (r->xheaders.p) { + free(r->xheaders.p); + r->xheaders.p = NULL; + r->xheaders.n = 0; + } +} + +/** + * Parses HTTP response. + */ +int ParseHttpResponse(struct HttpMessage *r, const char *p, size_t n) { + int c, h, i; + struct HttpHeader *x; + for (n = MIN(n, LIMIT); r->i < n; ++r->i) { + c = p[r->i] & 0xff; + switch (r->t) { + case START: + if (c == '\r' || c == '\n') break; /* RFC7230 § 3.5 */ + if (c != 'H') return ebadmsg(); + r->t = VERSION; + r->a = r->i; + break; + case VERSION: + if (c == ' ') { + if (r->i - r->a == 8 && + (READ64BE(p + r->a) & 0xFFFFFFFFFF00FF00) == 0x485454502F002E00 && + isdigit(p[r->a + 5]) && isdigit(p[r->a + 7])) { + r->version = (p[r->a + 5] - '0') * 10 + (p[r->a + 7] - '0'); + r->t = STATUS; + } else { + return ebadmsg(); + } + } + break; + case STATUS: + for (;;) { + if (c == ' ' || c == '\r' || c == '\n') { + if (r->status < 100) return ebadmsg(); + if (c == ' ') { + r->a = r->i + 1; + r->t = MESSAGE; + } else { + r->t = c == '\r' ? CR1 : LF1; + } + break; + } else if ('0' <= c && c <= '9') { + r->status *= 10; + r->status += c - '0'; + if (r->status > 999) return ebadmsg(); + } else { + return ebadmsg(); + } + if (++r->i == n) break; + c = p[r->i] & 0xff; + } + break; + case MESSAGE: + for (;;) { + if (c == '\r' || c == '\n') { + r->message.a = r->a; + r->message.b = r->i; + r->t = c == '\r' ? CR1 : LF1; + break; + } else if (c < 0x20 || (0x7F <= c && c < 0xA0)) { + return ebadmsg(); + } + if (++r->i == n) break; + c = p[r->i] & 0xff; + } + break; + case CR1: + if (c != '\n') return ebadmsg(); + r->t = LF1; + break; + case LF1: + if (c == '\r') { + r->t = LF2; + break; + } else if (c == '\n') { + return ++r->i; + } else if (!kHttpToken[c]) { + return ebadmsg(); /* RFC7230 § 3.2.4 */ + } + r->k.a = r->i; + r->t = HKEY; + break; + case HKEY: + for (;;) { + if (c == ':') { + r->k.b = r->i; + r->t = HSEP; + break; + } else if (!kHttpToken[c]) { + return ebadmsg(); + } + if (++r->i == n) break; + c = p[r->i] & 0xff; + } + break; + case HSEP: + if (c == ' ' || c == '\t') break; + r->a = r->i; + r->t = HVAL; + /* fallthrough */ + case HVAL: + for (;;) { + if (c == '\r' || c == '\n') { + i = r->i; + while (i > r->a && (p[i - 1] == ' ' || p[i - 1] == '\t')) --i; + if ((h = GetHttpHeader(p + r->k.a, r->k.b - r->k.a)) != -1 && + (!r->headers[h].a || !kHttpRepeatable[h])) { + r->headers[h].a = r->a; + r->headers[h].b = i; + } else if ((x = realloc( + r->xheaders.p, + (r->xheaders.n + 1) * sizeof(*r->xheaders.p)))) { + x[r->xheaders.n].k = r->k; + x[r->xheaders.n].v.a = r->a; + x[r->xheaders.n].v.b = i; + r->xheaders.p = x; + ++r->xheaders.n; + } + r->t = c == '\r' ? CR1 : LF1; + break; + } else if ((c < 0x20 && c != '\t') || (0x7F <= c && c < 0xA0)) { + return ebadmsg(); + } + if (++r->i == n) break; + c = p[r->i] & 0xff; + } + break; + case LF2: + if (c == '\n') { + return ++r->i; + } + return ebadmsg(); + default: + unreachable; + } + } + if (r->i < LIMIT) { + return 0; + } else { + return ebadmsg(); + } +} diff --git a/test/dsp/tty/ttymove_test.c b/test/dsp/tty/ttymove_test.c index 0a0e7c668..14f2683c0 100644 --- a/test/dsp/tty/ttymove_test.c +++ b/test/dsp/tty/ttymove_test.c @@ -26,7 +26,9 @@ char p[16]; struct TtyCursor c; -void SetUp(void) { rngset(p, sizeof(p), rand64, -1); } +void SetUp(void) { + rngset(p, sizeof(p), rand64, -1); +} TEST(ttymove, sameCoord_doesNothing) { c.y = 0; @@ -144,47 +146,3 @@ TEST(ttymove, left) { c.y = 70, c.x = 70; MOVE("\e[2D", 70, 68); } - -/* TEST(ttymove, bench_absmove) { */ -/* EZBENCH( */ -/* { */ -/* c.y = 70; */ -/* c.x = 30; */ -/* }, */ -/* ttymove(&c, p, 7, 9)); */ -/* ASSERT_STREQ("\e[8;10H", p); */ -/* } */ - -/* TEST(ttymove, bench_crlf) { */ -/* EZBENCH( */ -/* { */ -/* c.y = 0; */ -/* c.x = 10; */ -/* }, */ -/* ttymove(&c, p, 1, 0)); */ -/* ASSERT_STREQ("\r\n", p); */ -/* } */ - -/* TEST(ttymove, bench_forward1) { */ -/* EZBENCH( */ -/* { */ -/* c.y = 0; */ -/* c.x = 10; */ -/* }, */ -/* ttymove(&c, p, 0, 11)); */ -/* ASSERT_STREQ("\e[C", p); */ -/* } */ - -/* TEST(ttymove, bench_forward2) { */ -/* int y2, x2; */ -/* EZBENCH( */ -/* { */ -/* y2 = rand32() & 127; */ -/* x2 = rand32() & 127; */ -/* c.y = rand32() & 127; */ -/* c.x = rand32() & 127; */ -/* }, */ -/* ttymove(&c, p, y2, x2)); */ -/* int z; */ -/* EZBENCH(z = rand32() & 127, _memcpy(&z, "\e[2C", 4)); */ -/* } */ diff --git a/test/libc/crypto/rijndael_test.c b/test/libc/crypto/rijndael_test.c deleted file mode 100644 index 9cb433666..000000000 --- a/test/libc/crypto/rijndael_test.c +++ /dev/null @@ -1,335 +0,0 @@ -/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ -│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ -╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ -│ │ -│ Permission to use, copy, modify, and/or distribute this software for │ -│ any purpose with or without fee is hereby granted, provided that the │ -│ above copyright notice and this permission notice appear in all copies. │ -│ │ -│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ -│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ -│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ -│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ -│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ -│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ -│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ -│ PERFORMANCE OF THIS SOFTWARE. │ -╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/crypto/rijndael.h" -#include "libc/dce.h" -#include "libc/fmt/bing.internal.h" -#include "libc/runtime/internal.h" -#include "libc/str/str.h" -#include "libc/sysv/consts/prot.h" -#include "libc/testlib/testlib.h" - -/** - * Test vectors published by: - * - * Morris Dworkin - * National Institute of Standards and Technology - * Recommendation for Block Cipher Modes of Operation: Methods and Techniques - * SP 800-38A (DOI) - * December 2001 - */ - -FIXTURE(rijndael, disableHardwareExtensions) { - memset((/*unconst*/ void *)kCpuids, 0, sizeof(kCpuids)); -} - -/** - * F.1.1: ECB-AES128.Encrypt - * - * Key 2b7e151628aed2a6abf7158809cf4f3c - * - * Block No. 1 - * Plaintext 6bc1bee22e409f96e93d7e117393172a - * Input Block 6bc1bee22e409f96e93d7e117393172a - * Output Block 3ad77bb40d7a3660a89ecaf32466ef97 - * Ciphertext 3ad77bb40d7a3660a89ecaf32466ef97 - * - * Block No. 2 - * Plaintext ae2d8a571e03ac9c9eb76fac45af8e51 - * Input Block ae2d8a571e03ac9c9eb76fac45af8e51 - * Output Block f5d3d58503b9699de785895a96fdbaaf - * Ciphertext f5d3d58503b9699de785895a96fdbaaf - * - * Block No. 3 - * Plaintext 30c81c46a35ce411e5fbc1191a0a52ef - * Input Block 30c81c46a35ce411e5fbc1191a0a52ef - * Output Block 43b1cd7f598ece23881b00e3ed030688 - * Ciphertext 43b1cd7f598ece23881b00e3ed030688 - * - * Block No. 4 - * Plaintext f69f2445df4f9b17ad2b417be66c3710 - * Input Block f69f2445df4f9b17ad2b417be66c3710 - * Output Block 7b0c785e27e8ad3f8223207104725dd4 - * Ciphertext 7b0c785e27e8ad3f8223207104725dd4 - */ -TEST(aes128, testNistEcbRijndael) { - struct Rijndael ctx; - aes_block_t k1, block; - unhexbuf(&k1, 16, "2b7e151628aed2a6abf7158809cf4f3c"); - rijndaelinit(&ctx, 10, k1, k1); - unhexbuf(&block, 16, "6bc1bee22e409f96e93d7e117393172a"); - block = rijndael(10, block, &ctx); - EXPECT_BINEQ("3ad77bb40d7a3660a89ecaf32466ef97", &block); - unhexbuf(&block, 16, "ae2d8a571e03ac9c9eb76fac45af8e51"); - block = rijndael(10, block, &ctx); - EXPECT_BINEQ("f5d3d58503b9699de785895a96fdbaaf", &block); - unhexbuf(&block, 16, "30c81c46a35ce411e5fbc1191a0a52ef"); - block = rijndael(10, block, &ctx); - EXPECT_BINEQ("43b1cd7f598ece23881b00e3ed030688", &block); - unhexbuf(&block, 16, "f69f2445df4f9b17ad2b417be66c3710"); - block = rijndael(10, block, &ctx); - EXPECT_BINEQ("7b0c785e27e8ad3f8223207104725dd4", &block); -} - -/** - * F.1.2: ECB-AES128.Decrypt - * - * Key 2b7e151628aed2a6abf7158809cf4f3c - * - * Block No. 1 - * Plaintext 3ad77bb40d7a3660a89ecaf32466ef97 - * Input Block 3ad77bb40d7a3660a89ecaf32466ef97 - * Output Block 6bc1bee22e409f96e93d7e117393172a - * Ciphertext 6bc1bee22e409f96e93d7e117393172a - * - * Block No. 2 - * Plaintext f5d3d58503b9699de785895a96fdbaaf - * Input Block f5d3d58503b9699de785895a96fdbaaf - * Output Block ae2d8a571e03ac9c9eb76fac45af8e51 - * Ciphertext ae2d8a571e03ac9c9eb76fac45af8e51 - * - * Block No. 3 - * Plaintext 43b1cd7f598ece23881b00e3ed030688 - * Input Block 43b1cd7f598ece23881b00e3ed030688 - * Output Block 30c81c46a35ce411e5fbc1191a0a52ef - * Ciphertext 30c81c46a35ce411e5fbc1191a0a52ef - * - * Block No. 4 - * Plaintext 7b0c785e27e8ad3f8223207104725dd4 - * Input Block 7b0c785e27e8ad3f8223207104725dd4 - * Output Block f69f2445df4f9b17ad2b417be66c3710 - * Ciphertext f69f2445df4f9b17ad2b417be66c3710 - */ -TEST(aes128, testNistEcbUnrijndael) { - struct Rijndael ctx; - aes_block_t k1, block; - unhexbuf(&k1, 16, "2b7e151628aed2a6abf7158809cf4f3c"); - unrijndaelinit(&ctx, 10, k1, k1); - unhexbuf(&block, 16, "3ad77bb40d7a3660a89ecaf32466ef97"); - block = unrijndael(10, block, &ctx); - EXPECT_BINEQ("6bc1bee22e409f96e93d7e117393172a", &block); - unhexbuf(&block, 16, "f5d3d58503b9699de785895a96fdbaaf"); - block = unrijndael(10, block, &ctx); - EXPECT_BINEQ("ae2d8a571e03ac9c9eb76fac45af8e51", &block); - unhexbuf(&block, 16, "43b1cd7f598ece23881b00e3ed030688"); - block = unrijndael(10, block, &ctx); - EXPECT_BINEQ("30c81c46a35ce411e5fbc1191a0a52ef", &block); - unhexbuf(&block, 16, "7b0c785e27e8ad3f8223207104725dd4"); - block = unrijndael(10, block, &ctx); - EXPECT_BINEQ("f69f2445df4f9b17ad2b417be66c3710", &block); -} - -/** - * F.1.3: ECB-AES192.Encrypt - * - * Key 8e73b0f7da0e6452c810f32b809079e5 - * 62f8ead2522c6b7b - * - * Block No. 1 - * Plaintext 6bc1bee22e409f96e93d7e117393172a - * Input Block 6bc1bee22e409f96e93d7e117393172a - * Output Block bd334f1d6e45f25ff712a214571fa5cc - * Ciphertext bd334f1d6e45f25ff712a214571fa5cc - * - * Block No. 2 - * Plaintext ae2d8a571e03ac9c9eb76fac45af8e51 - * Input Block ae2d8a571e03ac9c9eb76fac45af8e51 - * Output Block 974104846d0ad3ad7734ecb3ecee4eef - * Ciphertext 974104846d0ad3ad7734ecb3ecee4eef - * - * Block No. 3 - * Plaintext 30c81c46a35ce411e5fbc1191a0a52ef - * Input Block 30c81c46a35ce411e5fbc1191a0a52ef - * Output Block ef7afd2270e2e60adce0ba2face6444e - * Ciphertext ef7afd2270e2e60adce0ba2face6444e - * - * Block No. 4 - * Plaintext f69f2445df4f9b17ad2b417be66c3710 - * Input Block f69f2445df4f9b17ad2b417be66c3710 - * Output Block 9a4b41ba738d6c72fb16691603c18e0e - * Ciphertext 9a4b41ba738d6c72fb16691603c18e0e - */ -TEST(aes192, testNistEcbRijndael) { - struct Rijndael ctx; - aes_block_t k1, k2, block; - unhexbuf(&k1, 16, "8e73b0f7da0e6452c810f32b809079e5"); - unhexbuf(&k2, 16, "62f8ead2522c6b7bDEADBEEFFEEDFACE"); - rijndaelinit(&ctx, 12, k1, k2); - unhexbuf(&block, 16, "6bc1bee22e409f96e93d7e117393172a"); - block = rijndael(12, block, &ctx); - EXPECT_BINEQ("bd334f1d6e45f25ff712a214571fa5cc", &block); - unhexbuf(&block, 16, "ae2d8a571e03ac9c9eb76fac45af8e51"); - block = rijndael(12, block, &ctx); - EXPECT_BINEQ("974104846d0ad3ad7734ecb3ecee4eef", &block); - unhexbuf(&block, 16, "30c81c46a35ce411e5fbc1191a0a52ef"); - block = rijndael(12, block, &ctx); - EXPECT_BINEQ("ef7afd2270e2e60adce0ba2face6444e", &block); - unhexbuf(&block, 16, "f69f2445df4f9b17ad2b417be66c3710"); - block = rijndael(12, block, &ctx); - EXPECT_BINEQ("9a4b41ba738d6c72fb16691603c18e0e", &block); -} - -/** - * F.1.4: ECB-AES192.Decrypt - * - * Key 8e73b0f7da0e6452c810f32b809079e5 - * 62f8ead2522c6b7b - * - * Block No. 1 - * Plaintext bd334f1d6e45f25ff712a214571fa5cc - * Input Block bd334f1d6e45f25ff712a214571fa5cc - * Output Block 6bc1bee22e409f96e93d7e117393172a - * Ciphertext 6bc1bee22e409f96e93d7e117393172a - * - * Block No. 2 - * Plaintext 974104846d0ad3ad7734ecb3ecee4eef - * Input Block 974104846d0ad3ad7734ecb3ecee4eef - * Output Block ae2d8a571e03ac9c9eb76fac45af8e51 - * Ciphertext ae2d8a571e03ac9c9eb76fac45af8e51 - * - * Block No. 3 - * Plaintext ef7afd2270e2e60adce0ba2face6444e - * Input Block ef7afd2270e2e60adce0ba2face6444e - * Output Block 30c81c46a35ce411e5fbc1191a0a52ef - * Ciphertext 30c81c46a35ce411e5fbc1191a0a52ef - * - * Block No. 4 - * Plaintext 9a4b41ba738d6c72fb16691603c18e0e - * Input Block 9a4b41ba738d6c72fb16691603c18e0e - * Output Block f69f2445df4f9b17ad2b417be66c3710 - * Ciphertext f69f2445df4f9b17ad2b417be66c3710 - */ -TEST(aes192, testNistEcbUnrijndael) { - struct Rijndael ctx; - aes_block_t k1, k2, block; - unhexbuf(&k1, 16, "8e73b0f7da0e6452c810f32b809079e5"); - unhexbuf(&k2, 16, "62f8ead2522c6b7bDEADBEEFFEEDFACE"); - unrijndaelinit(&ctx, 12, k1, k2); - unhexbuf(&block, 16, "bd334f1d6e45f25ff712a214571fa5cc"); - block = unrijndael(12, block, &ctx); - EXPECT_BINEQ("6bc1bee22e409f96e93d7e117393172a", &block); - unhexbuf(&block, 16, "974104846d0ad3ad7734ecb3ecee4eef"); - block = unrijndael(12, block, &ctx); - EXPECT_BINEQ("ae2d8a571e03ac9c9eb76fac45af8e51", &block); - unhexbuf(&block, 16, "ef7afd2270e2e60adce0ba2face6444e"); - block = unrijndael(12, block, &ctx); - EXPECT_BINEQ("30c81c46a35ce411e5fbc1191a0a52ef", &block); - unhexbuf(&block, 16, "9a4b41ba738d6c72fb16691603c18e0e"); - block = unrijndael(12, block, &ctx); - EXPECT_BINEQ("f69f2445df4f9b17ad2b417be66c3710", &block); -} - -/** - * F.1.5: ECB-AES256.Encrypt - * - * Key 603deb1015ca71be2b73aef0857d7781 - * 1f352c073b6108d72d9810a30914dff4 - * - * Block No. 1 - * Plaintext 6bc1bee22e409f96e93d7e117393172a - * Input Block 6bc1bee22e409f96e93d7e117393172a - * Output Block f3eed1bdb5d2a03c064b5a7e3db181f8 - * Ciphertext f3eed1bdb5d2a03c064b5a7e3db181f8 - * - * Block No. 2 - * Plaintext ae2d8a571e03ac9c9eb76fac45af8e51 - * Input Block ae2d8a571e03ac9c9eb76fac45af8e51 - * Output Block 591ccb10d410ed26dc5ba74a31362870 - * Ciphertext 591ccb10d410ed26dc5ba74a31362870 - * - * Block No. 3 - * Plaintext 30c81c46a35ce411e5fbc1191a0a52ef - * Input Block 30c81c46a35ce411e5fbc1191a0a52ef - * Output Block b6ed21b99ca6f4f9f153e7b1beafed1d - * Ciphertext b6ed21b99ca6f4f9f153e7b1beafed1d - * - * Block No. 4 - * Plaintext f69f2445df4f9b17ad2b417be66c3710 - * Input Block f69f2445df4f9b17ad2b417be66c3710 - * Output Block 23304b7a39f9f3ff067d8d8f9e24ecc7 - * Ciphertext 23304b7a39f9f3ff067d8d8f9e24ecc7 - */ -TEST(aes256, testNistEcbRijndael) { - struct Rijndael ctx; - aes_block_t k1, k2, block; - unhexbuf(&k1, 16, "603deb1015ca71be2b73aef0857d7781"); - unhexbuf(&k2, 16, "1f352c073b6108d72d9810a30914dff4"); - rijndaelinit(&ctx, 14, k1, k2); - unhexbuf(&block, 16, "6bc1bee22e409f96e93d7e117393172a"); - block = rijndael(14, block, &ctx); - EXPECT_BINEQ("f3eed1bdb5d2a03c064b5a7e3db181f8", &block); - unhexbuf(&block, 16, "ae2d8a571e03ac9c9eb76fac45af8e51"); - block = rijndael(14, block, &ctx); - EXPECT_BINEQ("591ccb10d410ed26dc5ba74a31362870", &block); - unhexbuf(&block, 16, "30c81c46a35ce411e5fbc1191a0a52ef"); - block = rijndael(14, block, &ctx); - EXPECT_BINEQ("b6ed21b99ca6f4f9f153e7b1beafed1d", &block); - unhexbuf(&block, 16, "f69f2445df4f9b17ad2b417be66c3710"); - block = rijndael(14, block, &ctx); - EXPECT_BINEQ("23304b7a39f9f3ff067d8d8f9e24ecc7", &block); -} - -/** - * F.1.6: ECB-AES256.Decrypt - * - * Key 603deb1015ca71be2b73aef0857d7781 - * 1f352c073b6108d72d9810a30914dff4 - * - * Block No. 1 - * Input Block f3eed1bdb5d2a03c064b5a7e3db181f8 - * Plaintext f3eed1bdb5d2a03c064b5a7e3db181f8 - * Ciphertext 6bc1bee22e409f96e93d7e117393172a - * Output Block 6bc1bee22e409f96e93d7e117393172a - * - * Block No. 2 - * Input Block 591ccb10d410ed26dc5ba74a31362870 - * Plaintext 591ccb10d410ed26dc5ba74a31362870 - * Ciphertext ae2d8a571e03ac9c9eb76fac45af8e51 - * Output Block ae2d8a571e03ac9c9eb76fac45af8e51 - * - * Block No. 3 - * Input Block b6ed21b99ca6f4f9f153e7b1beafed1d - * Plaintext b6ed21b99ca6f4f9f153e7b1beafed1d - * Ciphertext 30c81c46a35ce411e5fbc1191a0a52ef - * Output Block 30c81c46a35ce411e5fbc1191a0a52ef - * - * Block No. 4 - * Input Block 23304b7a39f9f3ff067d8d8f9e24ecc7 - * Plaintext 23304b7a39f9f3ff067d8d8f9e24ecc7 - * Ciphertext f69f2445df4f9b17ad2b417be66c3710 - * Output Block f69f2445df4f9b17ad2b417be66c3710 - */ -TEST(aes256, testNistEcbUnrijndael) { - struct Rijndael ctx; - aes_block_t k1, k2, block; - unhexbuf(&k1, 16, "603deb1015ca71be2b73aef0857d7781"); - unhexbuf(&k2, 16, "1f352c073b6108d72d9810a30914dff4"); - unrijndaelinit(&ctx, 14, k1, k2); - unhexbuf(&block, 16, "f3eed1bdb5d2a03c064b5a7e3db181f8"); - block = unrijndael(14, block, &ctx); - EXPECT_BINEQ("6bc1bee22e409f96e93d7e117393172a", &block); - unhexbuf(&block, 16, "591ccb10d410ed26dc5ba74a31362870"); - block = unrijndael(14, block, &ctx); - EXPECT_BINEQ("ae2d8a571e03ac9c9eb76fac45af8e51", &block); - unhexbuf(&block, 16, "b6ed21b99ca6f4f9f153e7b1beafed1d"); - block = unrijndael(14, block, &ctx); - EXPECT_BINEQ("30c81c46a35ce411e5fbc1191a0a52ef", &block); - unhexbuf(&block, 16, "23304b7a39f9f3ff067d8d8f9e24ecc7"); - block = unrijndael(14, block, &ctx); - EXPECT_BINEQ("f69f2445df4f9b17ad2b417be66c3710", &block); -} diff --git a/test/libc/crypto/test.mk b/test/libc/crypto/test.mk deleted file mode 100644 index 5b7d429bc..000000000 --- a/test/libc/crypto/test.mk +++ /dev/null @@ -1,52 +0,0 @@ -#-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐ -#───vi: set et ft=make ts=8 tw=8 fenc=utf-8 :vi───────────────────────┘ - -PKGS += TEST_LIBC_CRYPTO - -TEST_LIBC_CRYPTO_SRCS := $(wildcard test/libc/crypto/*.c) -TEST_LIBC_CRYPTO_SRCS_TEST = $(filter %_test.c,$(TEST_LIBC_CRYPTO_SRCS)) -TEST_LIBC_CRYPTO_COMS = $(TEST_LIBC_CRYPTO_OBJS:%.o=%.com) - -TEST_LIBC_CRYPTO_OBJS = \ - $(TEST_LIBC_CRYPTO_SRCS:%.c=o/$(MODE)/%.o) - -TEST_LIBC_CRYPTO_BINS = \ - $(TEST_LIBC_CRYPTO_COMS) \ - $(TEST_LIBC_CRYPTO_COMS:%=%.dbg) - -TEST_LIBC_CRYPTO_TESTS = \ - $(TEST_LIBC_CRYPTO_SRCS_TEST:%.c=o/$(MODE)/%.com.ok) - -TEST_LIBC_CRYPTO_CHECKS = \ - $(TEST_LIBC_CRYPTO_SRCS_TEST:%.c=o/$(MODE)/%.com.runs) - -TEST_LIBC_CRYPTO_DIRECTDEPS = \ - LIBC_CRYPTO \ - LIBC_FMT \ - LIBC_INTRIN \ - LIBC_NEXGEN32E \ - LIBC_RUNTIME \ - LIBC_STR \ - LIBC_STUBS \ - LIBC_TESTLIB - -TEST_LIBC_CRYPTO_DEPS := \ - $(call uniq,$(foreach x,$(TEST_LIBC_CRYPTO_DIRECTDEPS),$($(x)))) - -o/$(MODE)/test/libc/crypto/crypto.pkg: \ - $(TEST_LIBC_CRYPTO_OBJS) \ - $(foreach x,$(TEST_LIBC_CRYPTO_DIRECTDEPS),$($(x)_A).pkg) - -o/$(MODE)/test/libc/crypto/%.com.dbg: \ - $(TEST_LIBC_CRYPTO_DEPS) \ - o/$(MODE)/test/libc/crypto/%.o \ - o/$(MODE)/test/libc/crypto/crypto.pkg \ - $(LIBC_TESTMAIN) \ - $(CRT) \ - $(APE) - @$(APELINK) - -.PHONY: o/$(MODE)/test/libc/crypto -o/$(MODE)/test/libc/crypto: \ - $(TEST_LIBC_CRYPTO_BINS) \ - $(TEST_LIBC_CRYPTO_CHECKS) diff --git a/test/libc/dns/parsehoststxt_test.c b/test/libc/dns/parsehoststxt_test.c index 8d8adb9b9..0e1b69b97 100644 --- a/test/libc/dns/parsehoststxt_test.c +++ b/test/libc/dns/parsehoststxt_test.c @@ -48,20 +48,19 @@ TEST(ParseHostsTxt, testCorrectlyTokenizesAndSorts) { ASSERT_EQ(1, fwrite(kInput, strlen(kInput), 1, f)); rewind(f); ASSERT_EQ(0, ParseHostsTxt(ht, f)); - SortHostsTxt(ht); ASSERT_EQ(4, ht->entries.i); - EXPECT_STREQ("cat.example.", &ht->strings.p[ht->entries.p[0].name]); - EXPECT_STREQ("cat.example.", &ht->strings.p[ht->entries.p[0].canon]); - EXPECT_STREQ("203.0.113.2", ParseIp(ht->entries.p[0].ip)); - EXPECT_STREQ("lol.example.", &ht->strings.p[ht->entries.p[1].name]); + EXPECT_STREQ("lol.example.", &ht->strings.p[ht->entries.p[0].name]); + EXPECT_STREQ("lol.example.", &ht->strings.p[ht->entries.p[0].canon]); + EXPECT_STREQ("203.0.113.1", ParseIp(ht->entries.p[0].ip)); + EXPECT_STREQ("lol", &ht->strings.p[ht->entries.p[1].name]); EXPECT_STREQ("lol.example.", &ht->strings.p[ht->entries.p[1].canon]); EXPECT_STREQ("203.0.113.1", ParseIp(ht->entries.p[1].ip)); - EXPECT_STREQ("cat", &ht->strings.p[ht->entries.p[2].name]); + EXPECT_STREQ("cat.example.", &ht->strings.p[ht->entries.p[2].name]); EXPECT_STREQ("cat.example.", &ht->strings.p[ht->entries.p[2].canon]); EXPECT_STREQ("203.0.113.2", ParseIp(ht->entries.p[2].ip)); - EXPECT_STREQ("lol", &ht->strings.p[ht->entries.p[3].name]); - EXPECT_STREQ("lol.example.", &ht->strings.p[ht->entries.p[3].canon]); - EXPECT_STREQ("203.0.113.1", ParseIp(ht->entries.p[3].ip)); + EXPECT_STREQ("cat", &ht->strings.p[ht->entries.p[3].name]); + EXPECT_STREQ("cat.example.", &ht->strings.p[ht->entries.p[3].canon]); + EXPECT_STREQ("203.0.113.2", ParseIp(ht->entries.p[3].ip)); FreeHostsTxt(&ht); fclose(f); } diff --git a/test/libc/dns/resolvehostsreverse_test.c b/test/libc/dns/resolvehostsreverse_test.c new file mode 100644 index 000000000..5adcf4208 --- /dev/null +++ b/test/libc/dns/resolvehostsreverse_test.c @@ -0,0 +1,77 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/dns/hoststxt.h" +#include "libc/sysv/consts/af.h" +#include "libc/testlib/testlib.h" + +TEST(ParseHostsTxt, testNotFound) { + const char kInput[] = "# this is a comment\n" + "# IP HOST1 HOST2\n" + "203.0.113.1 lol.example lol\n" + "203.0.113.2 cat.example cat\n"; + char name[256]; + uint8_t ip[4] = {127, 0, 113, 1}; + struct HostsTxt *ht = calloc(1, sizeof(struct HostsTxt)); + FILE *f = fmemopen(NULL, BUFSIZ, "r+"); + ASSERT_EQ(1, fwrite(kInput, strlen(kInput), 1, f)); + rewind(f); + ASSERT_EQ(0, ParseHostsTxt(ht, f)); + ASSERT_EQ(4, ht->entries.i); + ASSERT_EQ(0, ResolveHostsReverse(ht, AF_INET, ip, name, sizeof(name))); + FreeHostsTxt(&ht); + fclose(f); +} + +TEST(ParseHostsTxt, testFirstLookup) { + const char kInput[] = "# this is a comment\n" + "# IP HOST1 HOST2\n" + "203.0.113.1 lol.example lol\n" + "203.0.113.2 cat.example cat\n"; + char name[256]; + uint8_t ip[4] = {203, 0, 113, 1}; + struct HostsTxt *ht = calloc(1, sizeof(struct HostsTxt)); + FILE *f = fmemopen(NULL, BUFSIZ, "r+"); + ASSERT_EQ(1, fwrite(kInput, strlen(kInput), 1, f)); + rewind(f); + ASSERT_EQ(0, ParseHostsTxt(ht, f)); + ASSERT_EQ(4, ht->entries.i); + ASSERT_EQ(1, ResolveHostsReverse(ht, AF_INET, ip, name, sizeof(name))); + EXPECT_STREQ("lol.example", name); + FreeHostsTxt(&ht); + fclose(f); +} + +TEST(ParseHostsTxt, testSecondLookup) { + const char kInput[] = "# this is a comment\n" + "# IP HOST1 HOST2\n" + "203.0.113.1 lol.example lol\n" + "203.0.113.2 cat.example cat\n"; + char name[256]; + uint8_t ip[4] = {203, 0, 113, 2}; + struct HostsTxt *ht = calloc(1, sizeof(struct HostsTxt)); + FILE *f = fmemopen(NULL, BUFSIZ, "r+"); + ASSERT_EQ(1, fwrite(kInput, strlen(kInput), 1, f)); + rewind(f); + ASSERT_EQ(0, ParseHostsTxt(ht, f)); + ASSERT_EQ(4, ht->entries.i); + ASSERT_EQ(1, ResolveHostsReverse(ht, AF_INET, ip, name, sizeof(name))); + EXPECT_STREQ("cat.example", name); + FreeHostsTxt(&ht); + fclose(f); +} diff --git a/test/libc/dns/resolvehoststxt_test.c b/test/libc/dns/resolvehoststxt_test.c index 758ee4970..8bff7bd33 100644 --- a/test/libc/dns/resolvehoststxt_test.c +++ b/test/libc/dns/resolvehoststxt_test.c @@ -49,7 +49,6 @@ TEST(ResolveHostsTxt, testBasicLookups) { struct HostsTxt *ht = calloc(1, sizeof(struct HostsTxt)); FILE *f = fmemopen(kInput, strlen(kInput), "r+"); ASSERT_EQ(0, ParseHostsTxt(ht, f)); - SortHostsTxt(ht); ASSERT_EQ(5, ht->entries.i); EXPECT_STREQ("127.0.0.1", EzIp4Lookup(ht, "localhost")); EXPECT_STREQ("203.0.113.1", EzIp4Lookup(ht, "lol")); @@ -66,7 +65,6 @@ TEST(ResolveHostsTxt, testCanonicalize) { struct HostsTxt *ht = calloc(1, sizeof(struct HostsTxt)); FILE *f = fmemopen(kInput, strlen(kInput), "r+"); ASSERT_EQ(0, ParseHostsTxt(ht, f)); - SortHostsTxt(ht); ASSERT_EQ(5, ht->entries.i); EXPECT_STREQ("localhost", EzCanonicalize(ht, "localhost")); EXPECT_STREQ("lol.example.", EzCanonicalize(ht, "lol")); diff --git a/test/libc/rand/devrand_test.c b/test/libc/rand/devrand_test.c index f27303399..2de7c3b6a 100644 --- a/test/libc/rand/devrand_test.c +++ b/test/libc/rand/devrand_test.c @@ -22,18 +22,12 @@ #include "libc/str/str.h" #include "libc/testlib/testlib.h" -TEST(devrand, test) { - if (IsWindows()) return; - const size_t kSize = 8; - void *A = malloc(kSize); - void *B = malloc(kSize); - memset(A, 0, kSize); - memset(B, 0, kSize); - EXPECT_EQ(0, devrand(A, kSize)); - EXPECT_EQ(0, devrand(B, kSize)); +TEST(getrandom, test) { + void *A = gc(calloc(1, 8)); + void *B = gc(calloc(1, 8)); + EXPECT_EQ(8, getrandom(A, 8, 0)); + EXPECT_EQ(8, getrandom(B, 8, 0)); EXPECT_BINNE(u"        ", A); EXPECT_BINNE(u"        ", B); - EXPECT_NE(0, memcmp(A, B, kSize)); - free(B); - free(A); + EXPECT_NE(0, memcmp(A, B, 8)); } diff --git a/test/libc/rand/getrandom_test.c b/test/libc/rand/getrandom_test.c new file mode 100644 index 000000000..b79f39966 --- /dev/null +++ b/test/libc/rand/getrandom_test.c @@ -0,0 +1,237 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/log/check.h" +#include "libc/math.h" +#include "libc/rand/lcg.internal.h" +#include "libc/rand/rand.h" +#include "libc/stdio/stdio.h" +#include "libc/sysv/consts/grnd.h" +#include "libc/testlib/testlib.h" + +/* JustReturnZero */ +/* entropy: 0 */ +/* chi-square: 2.55e+07 */ +/* chi-square percent: 0 */ +/* mean: 0 */ +/* monte-carlo-pi: 27.324 */ +/* serial-correlation: -100000 */ + +/* JustIncrement */ +/* entropy: 2.63951 */ +/* chi-square: 1.443e+07 */ +/* chi-square percent: 0 */ +/* mean: 18.8803 */ +/* monte-carlo-pi: 27.324 */ +/* serial-correlation: 0.0092003 */ + +/* UNIX Sixth Edition */ +/* entropy: 8 */ +/* chi-square: 0.1536 */ +/* chi-square percent: 1 */ +/* mean: 127.502 */ +/* monte-carlo-pi: 3.4192 */ +/* serial-correlation: -0.470645 */ + +/* UNIX Seventh Edition */ +/* entropy: 7.99818 */ +/* chi-square: 251.843 */ +/* chi-square percent: 0.544128 */ +/* mean: 127.955 */ +/* monte-carlo-pi: 0.675703 */ +/* serial-correlation: -0.00207669 */ + +/* KnuthLcg */ +/* entropy: 7.99835 */ +/* chi-square: 228.383 */ +/* chi-square percent: 0.883476 */ +/* mean: 127.1 */ +/* monte-carlo-pi: 0.561935 */ +/* serial-correlation: -0.0038954 */ + +/* rand64 */ +/* entropy: 7.99832 */ +/* chi-square: 233.267 */ +/* chi-square percent: 0.831821 */ +/* mean: 127.427 */ +/* monte-carlo-pi: 0.0271532 */ +/* serial-correlation: -0.00255319 */ + +/* Rand64LowByte */ +/* entropy: 7.99798 */ +/* chi-square: 278.344 */ +/* chi-square percent: 0.150796 */ +/* mean: 127.88 */ +/* monte-carlo-pi: 0.00340573 */ +/* serial-correlation: 0.00162231 */ + +/* GetRandomNoSystem */ +/* entropy: 7.99819 */ +/* chi-square: 249.743 */ +/* chi-square percent: 0.58114 */ +/* mean: 127.124 */ +/* monte-carlo-pi: 0.293716 */ +/* serial-correlation: 0.00198516 */ + +/* GetRandomNoRdrrnd */ +/* entropy: 7.99816 */ +/* chi-square: 254.797 */ +/* chi-square percent: 0.491811 */ +/* mean: 127.308 */ +/* monte-carlo-pi: 0.0118738 */ +/* serial-correlation: 0.000197669 */ + +/* GetRandom */ +/* entropy: 7.99808 */ +/* chi-square: 266.737 */ +/* chi-square percent: 0.294131 */ +/* mean: 127.178 */ +/* monte-carlo-pi: 0.0577122 */ +/* serial-correlation: 0.00598793 */ + +typedef uint64_t (*random_f)(void); + +static uint32_t randx = 1; + +uint64_t JustReturnZero(void) { + return 0; +} + +uint64_t JustIncrement(void) { + static uint64_t x; + return x++; +} + +uint16_t SixthEditionRand(void) { + static int16_t gorp; + gorp = (gorp + 625) & 077777; + return gorp; +} + +uint64_t SixthEditionLowByte(void) { + unsigned i; + uint64_t x; + for (x = i = 0; i < 8; ++i) { + x <<= 8; + x |= SixthEditionRand() & 255; + } + return x; +} + +uint32_t SeventhEditionRand(void) { + return ((randx = randx * 1103515245 + 12345) >> 16) & 077777; +} + +uint64_t SeventhEditionLowByte(void) { + unsigned i; + uint64_t x; + for (x = i = 0; i < 8; ++i) { + x <<= 8; + x |= SeventhEditionRand() & 255; + } + return x; +} + +uint64_t KnuthLcg(void) { + unsigned i; + uint64_t x; + for (x = i = 0; i < 8; ++i) { + x <<= 8; + x |= rand() & 255; + } + return x; +} + +uint64_t Rand64LowByte(void) { + unsigned i; + uint64_t x; + for (x = i = 0; i < 8; ++i) { + x <<= 8; + x |= rand64() & 255; + } + return x; +} + +uint64_t GetRandomNoRdrrnd(void) { + uint64_t x; + ASSERT_EQ(8, getrandom(&x, 8, GRND_NORDRND)); + return x; +} + +uint64_t GetRandomNoSystem(void) { + uint64_t x; + ASSERT_EQ(8, getrandom(&x, 8, GRND_NOSYSTEM)); + return x; +} + +uint64_t GetRandom(void) { + uint64_t x; + ASSERT_EQ(8, getrandom(&x, 8, 0)); + return x; +} + +static const struct RandomFunction { + const char *s; + random_f f; + bool r; +} kRandomFunctions[] = { + {"JustReturnZero", JustReturnZero, false}, // + {"JustIncrement", JustIncrement, false}, // + {"SixthEditionLowByte", SixthEditionLowByte, false}, // + {"SeventhEditionLowByte", SeventhEditionLowByte, false}, // + {"KnuthLcg", KnuthLcg, false}, // + {"rand64", rand64, true}, // + {"Rand64LowByte", Rand64LowByte, true}, // + {"GetRandomNoRdrrnd", GetRandomNoRdrrnd, true}, // + {"GetRandomNoSystem", GetRandomNoSystem, true}, // + {"GetRandom", GetRandom, true}, // +}; + +TEST(getrandom, sanityTest) { + uint64_t q; + size_t i, j, k; + double montepi, chip, scc, ent, mean, chisq; + for (k = 0; k < 1; ++k) { + for (j = 0; j < ARRAYLEN(kRandomFunctions); ++j) { + rt_init(0); + for (i = 0; i + 8 <= 100000; i += 8) { + q = kRandomFunctions[j].f(); + rt_add(&q, 8); + } + rt_end(&ent, &chisq, &mean, &montepi, &scc); + chip = pochisq(chisq, 255); +#if 0 + fprintf(stderr, "\n"); + fprintf(stderr, "/* %-32s */\n", kRandomFunctions[j].s); + fprintf(stderr, "/* entropy: %-12g */\n", ent); + fprintf(stderr, "/* chi-square: %-12g */\n", chisq); + fprintf(stderr, "/* chi-square percent: %-12g */\n", chip); + fprintf(stderr, "/* mean: %-12g */\n", mean); + fprintf(stderr, "/* monte-carlo-pi: %-12g */\n", + 100 * fabs(M_PI - montepi) / M_PI); + fprintf(stderr, "/* serial-correlation: %-12g */\n", scc); +#endif + if (kRandomFunctions[j].r) { + CHECK_GE(chisq, 180, "%s", kRandomFunctions[j].s); + CHECK_GE(ent * 10, 78, "%s", kRandomFunctions[j].s); + CHECK_LT(fabs(scc) * 100, 5, "%s", kRandomFunctions[j].s); + CHECK_LT(fabs(128 - mean), 3, "%s", kRandomFunctions[j].s); + } + } + } +} diff --git a/test/libc/rand/rand_test.c b/test/libc/rand/rand_test.c index 4cfaf8ce3..db75b9188 100644 --- a/test/libc/rand/rand_test.c +++ b/test/libc/rand/rand_test.c @@ -16,7 +16,9 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/bits/bits.h" #include "libc/rand/rand.h" +#include "libc/testlib/hyperion.h" #include "libc/testlib/testlib.h" TEST(rand002, alwaysReturnsPositiveNumbers) { @@ -34,11 +36,18 @@ TEST(rand003, srandSmokeTest) { ASSERT_EQ(1059165278, rand()); } -TEST(rand004, rand32SmokeTest) { - ASSERT_TRUE(rand32() != rand32() || rand32() != rand32() || - rand32() != rand32() || rand32() != rand32()); -} - TEST(rand005, rand64SmokeTest) { ASSERT_TRUE(rand64() != rand64() || rand64() != rand64()); } + +TEST(rand64, test) { + char *p; + size_t i; + uint64_t x; + p = memcpy(malloc(kHyperionSize), kHyperion, kHyperionSize); + for (i = 0; i < kHyperionSize / 8; ++i) { + x = rand64(); + WRITE64LE(p + i * 8, x); + } + free(p); +} diff --git a/test/libc/rand/test.mk b/test/libc/rand/test.mk index 54134fffc..b2305ba51 100644 --- a/test/libc/rand/test.mk +++ b/test/libc/rand/test.mk @@ -21,15 +21,20 @@ TEST_LIBC_RAND_CHECKS = \ TEST_LIBC_RAND_DIRECTDEPS = \ LIBC_FMT \ LIBC_INTRIN \ + LIBC_TINYMATH \ LIBC_MEM \ LIBC_NEXGEN32E \ LIBC_RAND \ LIBC_RUNTIME \ + LIBC_STDIO \ LIBC_STR \ LIBC_STUBS \ + LIBC_LOG \ LIBC_SYSV \ LIBC_TESTLIB \ - LIBC_X + LIBC_UNICODE \ + LIBC_X \ + THIRD_PARTY_GDTOA TEST_LIBC_RAND_DEPS := \ $(call uniq,$(foreach x,$(TEST_LIBC_RAND_DIRECTDEPS),$($(x)))) diff --git a/test/libc/sock/inet_ntop_test.c b/test/libc/sock/inet_ntop_test.c index f7b78ea08..261bbcd70 100644 --- a/test/libc/sock/inet_ntop_test.c +++ b/test/libc/sock/inet_ntop_test.c @@ -54,3 +54,47 @@ TEST(inet_ntop, testNoSpace) { ASSERT_STREQ("", buf); free(buf); } + +TEST(inet_ntop, ipv6_testMin_isJustColons) { + char buf[72]; + uint8_t ip[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + EXPECT_STREQ("::", inet_ntop(AF_INET6, ip, buf, sizeof(buf))); +} + +TEST(inet_ntop, ipv6_testMax) { + char buf[72]; + uint8_t ip[16] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + EXPECT_STREQ("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", + inet_ntop(AF_INET6, ip, buf, sizeof(buf))); +} + +TEST(inet_ntop, ipv6_loopback_isColonsThenJustOne) { + char buf[72]; + uint8_t ip[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}; + EXPECT_STREQ("::1", inet_ntop(AF_INET6, ip, buf, sizeof(buf))); +} + +TEST(inet_ntop, ipv6_rfc4291example) { + char buf[72]; + uint8_t ip[16] = {0x20, 0x01, 0x0D, 0xB8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x08, 0x00, 0x20, 0x0C, 0x41, 0x7A}; + EXPECT_STREQ("2001:db8::8:800:200c:417a", + inet_ntop(AF_INET6, ip, buf, sizeof(buf))); +} + +TEST(inet_ntop, ipv6_leading) { + char buf[72]; + uint8_t ip[16] = {0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + EXPECT_STREQ("1::", inet_ntop(AF_INET6, ip, buf, sizeof(buf))); +} + +TEST(inet_ntop, ipv6_kindOfLeading) { + char buf[72]; + uint8_t ip[16] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + EXPECT_STREQ("100::", inet_ntop(AF_INET6, ip, buf, sizeof(buf))); +} diff --git a/test/libc/sock/inet_pton_test.c b/test/libc/sock/inet_pton_test.c index 30415f079..b3db98c31 100644 --- a/test/libc/sock/inet_pton_test.c +++ b/test/libc/sock/inet_pton_test.c @@ -31,6 +31,15 @@ TEST(inet_pton, testLocalhost) { EXPECT_EQ(1, addr[3]); } +TEST(inet_pton, testAny) { + uint8_t addr[4] = {255, 255, 255, 255}; + EXPECT_EQ(1, inet_pton(AF_INET, "0.0.0.0", &addr)); + EXPECT_EQ(0, addr[0]); + EXPECT_EQ(0, addr[1]); + EXPECT_EQ(0, addr[2]); + EXPECT_EQ(0, addr[3]); +} + TEST(inet_pton, testShortAddress_doesntFillFullValue) { uint8_t addr[4] = {255, 255, 255, 255}; EXPECT_EQ(0, inet_pton(AF_INET, "127.0.0", &addr)); diff --git a/test/libc/stdio/dirstream_test.c b/test/libc/stdio/dirstream_test.c index a1f844fbe..79637c95f 100644 --- a/test/libc/stdio/dirstream_test.c +++ b/test/libc/stdio/dirstream_test.c @@ -25,17 +25,18 @@ #include "libc/testlib/testlib.h" #include "libc/x/x.h" +STATIC_YOINK("zip_uri_support"); + TEST(dirstream, test) { DIR *dir; struct dirent *ent; char *dpath, *file1, *file2; - dpath = gc(xasprintf("%s%s%lu", kTmpPath, "dirstream", rand32())); + dpath = gc(xasprintf("%s%s%lu", kTmpPath, "dirstream", rand64())); file1 = gc(xasprintf("%s/%s", dpath, "foo")); file2 = gc(xasprintf("%s/%s", dpath, "bar")); EXPECT_NE(-1, mkdir(dpath, 0755)); EXPECT_NE(-1, touch(file1, 0644)); EXPECT_NE(-1, touch(file2, 0644)); - EXPECT_TRUE(NULL != (dir = opendir(dpath))); bool hasfoo = false; bool hasbar = false; @@ -46,8 +47,21 @@ TEST(dirstream, test) { EXPECT_TRUE(hasfoo); EXPECT_TRUE(hasbar); EXPECT_NE(-1, closedir(dir)); - EXPECT_NE(-1, unlink(file2)); EXPECT_NE(-1, unlink(file1)); EXPECT_NE(-1, rmdir(dpath)); } + +TEST(dirstream, zipTest) { + bool foundNewYork = false; + DIR *d; + struct dirent *e; + const char *path = "zip:usr/share/zoneinfo/"; + ASSERT_NE(0, _gc(xiso8601ts(NULL))); + ASSERT_NE(NULL, (d = opendir(path))); + while ((e = readdir(d))) { + foundNewYork |= !strcmp(e->d_name, "New_York"); + } + closedir(d); + EXPECT_TRUE(foundNewYork); +} diff --git a/test/libc/stdio/test.mk b/test/libc/stdio/test.mk index b8e23cd75..b34595313 100644 --- a/test/libc/stdio/test.mk +++ b/test/libc/stdio/test.mk @@ -36,8 +36,10 @@ TEST_LIBC_STDIO_DIRECTDEPS = \ LIBC_STUBS \ LIBC_SYSV \ LIBC_TESTLIB \ + LIBC_TIME \ LIBC_UNICODE \ - LIBC_X + LIBC_X \ + LIBC_ZIPOS TEST_LIBC_STDIO_DEPS := \ $(call uniq,$(foreach x,$(TEST_LIBC_STDIO_DIRECTDEPS),$($(x)))) diff --git a/test/libc/str/test.mk b/test/libc/str/test.mk index a6dc739e5..1079bca88 100644 --- a/test/libc/str/test.mk +++ b/test/libc/str/test.mk @@ -40,6 +40,7 @@ TEST_LIBC_STR_DIRECTDEPS = \ LIBC_UNICODE \ LIBC_X \ LIBC_ZIPOS \ + THIRD_PARTY_MBEDTLS \ THIRD_PARTY_REGEX \ THIRD_PARTY_ZLIB diff --git a/test/libc/test.mk b/test/libc/test.mk index 9760fc5c4..2cd4731ff 100644 --- a/test/libc/test.mk +++ b/test/libc/test.mk @@ -6,7 +6,6 @@ o/$(MODE)/test/libc: \ o/$(MODE)/test/libc/alg \ o/$(MODE)/test/libc/bits \ o/$(MODE)/test/libc/calls \ - o/$(MODE)/test/libc/crypto \ o/$(MODE)/test/libc/dns \ o/$(MODE)/test/libc/fmt \ o/$(MODE)/test/libc/intrin \ diff --git a/test/net/http/decodebase64_test.c b/test/net/http/decodebase64_test.c new file mode 100644 index 000000000..b173629ba --- /dev/null +++ b/test/net/http/decodebase64_test.c @@ -0,0 +1,109 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/testlib/testlib.h" +#include "net/http/escape.h" + +size_t i, n, m; +char *p, *q, b[32]; + +TEST(DecodeBase64, paddingIsOptional) { + EXPECT_BINEQ(u" ", gc(DecodeBase64("", 0, 0))); + EXPECT_BINEQ(u"  ", gc(DecodeBase64("AA", 2, 0))); + EXPECT_BINEQ(u"♦ ", gc(DecodeBase64("BB", 2, 0))); + EXPECT_BINEQ(u"   ", gc(DecodeBase64("AAA", 3, 0))); + EXPECT_BINEQ(u"    ", gc(DecodeBase64("AAAA", 4, 0))); + EXPECT_BINEQ(u"λ ", gc(DecodeBase64("/w", 2, 0))); + EXPECT_BINEQ(u"λλ ", gc(DecodeBase64("//8", 3, 0))); + EXPECT_BINEQ(u"λλλ ", gc(DecodeBase64("////", 4, 0))); + EXPECT_BINEQ(u"hello ", gc(DecodeBase64("aGVsbG8", 7, 0))); + EXPECT_BINEQ(u"hello ", gc(DecodeBase64("aGVsbG8", -1, 0))); +} + +TEST(DecodeBase64, altUrlFormat) { + EXPECT_BINEQ(u"λ ", gc(DecodeBase64("_w", 2, 0))); + EXPECT_BINEQ(u"λλ ", gc(DecodeBase64("__8", 3, 0))); + EXPECT_BINEQ(u"λλλ ", gc(DecodeBase64("____", 4, 0))); +} + +TEST(DecodeBase64, test) { + EXPECT_BINEQ(u" ", gc(DecodeBase64("", 0, 0))); + EXPECT_BINEQ(u"  ", gc(DecodeBase64("AA==", 4, 0))); + EXPECT_BINEQ(u"♦ ", gc(DecodeBase64("BB==", 4, 0))); + EXPECT_BINEQ(u"   ", gc(DecodeBase64("AAA=", 4, 0))); + EXPECT_BINEQ(u"    ", gc(DecodeBase64("AAAA", 4, 0))); + EXPECT_BINEQ(u"λ ", gc(DecodeBase64("/w==", 4, 0))); + EXPECT_BINEQ(u"λλ ", gc(DecodeBase64("//8=", 4, 0))); + EXPECT_BINEQ(u"λλλ ", gc(DecodeBase64("////", 4, 0))); + EXPECT_BINEQ(u"hello ", gc(DecodeBase64("aGVsbG8=", 8, 0))); + EXPECT_BINEQ(u"hello ", gc(DecodeBase64("aGVsbG8=", -1, 0))); + EXPECT_EQ( + 0, + memcmp( + "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020" + "\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041" + "\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062" + "\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103" + "\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124" + "\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145" + "\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166" + "\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207" + "\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230" + "\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251" + "\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272" + "\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313" + "\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334" + "\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355" + "\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376" + "\377", + gc(DecodeBase64( + "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUm\r\n" + "JygpKissLS4vMDEy\r\n" + "MzQ1Njc4OTo7PD0+\r\n" + "P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2Rl\r\n" + "ZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+\r\n" + "AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeY\r\n" + "mZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/\r\n" + "wMHCw8TFxsfIycrL\r\n" + "zM3Oz9DR0tPU1dbX2Nna29zd3t/\r\n" + "g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+\r\n" + "/w==\r\n", + -1, &n)), + 256)); + EXPECT_EQ(256, n); +} + +TEST(DecodeBase64, testSeparators_skipsOverThemAtAnyState) { + EXPECT_BINEQ(u" ", gc(DecodeBase64(" ", 1, 0))); + EXPECT_BINEQ(u"  ", gc(DecodeBase64(" A A = = ", 9, 0))); + EXPECT_BINEQ(u"♦ ", gc(DecodeBase64(" B B = = ", 4, 0))); + EXPECT_BINEQ(u"hello ", gc(DecodeBase64("a\nG\nV\ns\nb\nG\n8\n=\n", 16, 0))); +} + +TEST(DecodeBase64, testInvalidSequences_skipsOverThem) { + EXPECT_BINEQ(u" ", gc(DecodeBase64("A===", 4, 0))); + EXPECT_BINEQ(u" ", gc(DecodeBase64("B===", 4, 0))); + EXPECT_BINEQ(u"♦ ", gc(DecodeBase64("B===BB==", 8, 0))); + EXPECT_BINEQ(u"♦ ", gc(DecodeBase64("====BB==", 8, 0))); +} + +TEST(DecodeBase64, testOom_returnsNullAndSetsSizeToZero) { + n = 31337; + EXPECT_EQ(NULL, DecodeBase64("hello", 0x1000000000000, &n)); + EXPECT_EQ(0, n); +} diff --git a/test/net/http/encodebase64_test.c b/test/net/http/encodebase64_test.c index 24d5f4465..14639b878 100644 --- a/test/net/http/encodebase64_test.c +++ b/test/net/http/encodebase64_test.c @@ -24,6 +24,7 @@ #include "libc/testlib/hyperion.h" #include "libc/testlib/testlib.h" #include "net/http/escape.h" +#include "third_party/mbedtls/base64.h" size_t i, n, m; char *p, *q, b[32]; @@ -65,73 +66,6 @@ TEST(EncodeBase64, test) { EXPECT_EQ(344, n); } -TEST(DecodeBase64, test) { - EXPECT_BINEQ(u" ", gc(DecodeBase64("", 0, 0))); - EXPECT_BINEQ(u"  ", gc(DecodeBase64("AA==", 4, 0))); - EXPECT_BINEQ(u"♦ ", gc(DecodeBase64("BB==", 4, 0))); - EXPECT_BINEQ(u"   ", gc(DecodeBase64("AAA=", 4, 0))); - EXPECT_BINEQ(u"    ", gc(DecodeBase64("AAAA", 4, 0))); - EXPECT_BINEQ(u"λ ", gc(DecodeBase64("/w==", 4, 0))); - EXPECT_BINEQ(u"λλ ", gc(DecodeBase64("//8=", 4, 0))); - EXPECT_BINEQ(u"λλλ ", gc(DecodeBase64("////", 4, 0))); - EXPECT_BINEQ(u"hello ", gc(DecodeBase64("aGVsbG8=", 8, 0))); - EXPECT_BINEQ(u"hello ", gc(DecodeBase64("aGVsbG8=", -1, 0))); - EXPECT_EQ( - 0, - memcmp( - "\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020" - "\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041" - "\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062" - "\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103" - "\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124" - "\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145" - "\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166" - "\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207" - "\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230" - "\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251" - "\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272" - "\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313" - "\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334" - "\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355" - "\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376" - "\377", - gc(DecodeBase64( - "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUm\r\n" - "JygpKissLS4vMDEy\r\n" - "MzQ1Njc4OTo7PD0+\r\n" - "P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2Rl\r\n" - "ZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+\r\n" - "AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeY\r\n" - "mZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/\r\n" - "wMHCw8TFxsfIycrL\r\n" - "zM3Oz9DR0tPU1dbX2Nna29zd3t/\r\n" - "g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+\r\n" - "/w==\r\n", - -1, &n)), - 256)); - EXPECT_EQ(256, n); -} - -TEST(DecodeBase64, testSeparators_skipsOverThemAtAnyState) { - EXPECT_BINEQ(u" ", gc(DecodeBase64(" ", 1, 0))); - EXPECT_BINEQ(u"  ", gc(DecodeBase64(" A A = = ", 9, 0))); - EXPECT_BINEQ(u"♦ ", gc(DecodeBase64(" B B = = ", 4, 0))); - EXPECT_BINEQ(u"hello ", gc(DecodeBase64("a\nG\nV\ns\nb\nG\n8\n=\n", 16, 0))); -} - -TEST(DecodeBase64, testInvalidSequences_skipsOverThem) { - EXPECT_BINEQ(u" ", gc(DecodeBase64("A===", 4, 0))); - EXPECT_BINEQ(u" ", gc(DecodeBase64("B===", 4, 0))); - EXPECT_BINEQ(u"♦ ", gc(DecodeBase64("B===BB==", 8, 0))); - EXPECT_BINEQ(u"♦ ", gc(DecodeBase64("====BB==", 8, 0))); -} - -TEST(DecodeBase64, testOom_returnsNullAndSetsSizeToZero) { - n = 31337; - EXPECT_EQ(NULL, DecodeBase64("hello", 0x1000000000000, &n)); - EXPECT_EQ(0, n); -} - TEST(EncodeBase64, testOom_returnsNullAndSetsSizeToZero) { n = 31337; EXPECT_EQ(NULL, EncodeBase64("hello", 0x1000000000000, &n)); @@ -165,3 +99,16 @@ BENCH(EncodeBase64, bench) { p = gc(EncodeBase64(kHyperion, kHyperionSize, &n)); EZBENCH2("DecodeBase64", donothing, free(DecodeBase64(p, n, 0))); } + +BENCH(MbedtlsEncodeBase64, bench) { + size_t olen; + size_t dlen = kHyperionSize * 4; + uint8_t *dst = gc(malloc(dlen)); + uint8_t *res = gc(malloc(dlen)); + EZBENCH2("mbedtls_base64_encode", donothing, + mbedtls_base64_encode(dst, dlen, &olen, (void *)kHyperion, + kHyperionSize)); + EZBENCH2("mbedtls_base64_decode", donothing, + mbedtls_base64_decode(res, dlen, &olen, dst, olen)); + ASSERT_EQ(0, memcmp(res, kHyperion, olen)); +} diff --git a/test/net/http/isreasonablepath_test.c b/test/net/http/isreasonablepath_test.c index 7348d5a87..88e3e19da 100644 --- a/test/net/http/isreasonablepath_test.c +++ b/test/net/http/isreasonablepath_test.c @@ -26,6 +26,8 @@ TEST(IsReasonablePath, test) { EXPECT_TRUE(IsReasonablePath("/index.html", 11)); EXPECT_TRUE(IsReasonablePath("/index.html", -1)); EXPECT_TRUE(IsReasonablePath("/redbean.png", -1)); + EXPECT_TRUE(IsReasonablePath("/.ca.key", -1)); + EXPECT_TRUE(IsReasonablePath(".ca.key", -1)); } TEST(IsReasonablePath, testEmptyString_allowedIfYouLikeImplicitLeadingSlash) { diff --git a/test/net/http/parsehttprequest_test.c b/test/net/http/parsehttprequest_test.c index cf9cb22b9..6b8532e9a 100644 --- a/test/net/http/parsehttprequest_test.c +++ b/test/net/http/parsehttprequest_test.c @@ -28,9 +28,9 @@ #include "libc/x/x.h" #include "net/http/http.h" -struct HttpRequest req[1]; +struct HttpMessage req[1]; -static char *slice(const char *m, struct HttpRequestSlice s) { +static char *slice(const char *m, struct HttpSlice s) { char *p; p = xmalloc(s.b - s.a + 1); memcpy(p, m + s.a, s.b - s.a); @@ -47,7 +47,7 @@ void TearDown(void) { } TEST(ParseHttpRequest, soLittleState) { - ASSERT_LE(sizeof(struct HttpRequest), 512); + ASSERT_LE(sizeof(struct HttpMessage), 512); } TEST(ParseHttpRequest, testEmpty_tooShort) { diff --git a/test/net/http/parsehttpresponse_test.c b/test/net/http/parsehttpresponse_test.c new file mode 100644 index 000000000..f27ebc475 --- /dev/null +++ b/test/net/http/parsehttpresponse_test.c @@ -0,0 +1,175 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/log/check.h" +#include "libc/str/str.h" +#include "libc/testlib/ezbench.h" +#include "libc/testlib/testlib.h" +#include "libc/x/x.h" +#include "net/http/http.h" + +struct HttpMessage req[1]; + +static char *slice(const char *m, struct HttpSlice s) { + char *p; + p = xmalloc(s.b - s.a + 1); + memcpy(p, m + s.a, s.b - s.a); + p[s.b - s.a] = 0; + return p; +} + +void SetUp(void) { + InitHttpResponse(req); +} + +void TearDown(void) { + DestroyHttpResponse(req); +} + +TEST(ParseHttpResponse, soLittleState) { + ASSERT_LE(sizeof(struct HttpMessage), 512); +} + +TEST(ParseHttpResponse, testEmpty_tooShort) { + EXPECT_EQ(0, ParseHttpResponse(req, "", 0)); +} + +TEST(ParseHttpResponse, testTooShort) { + EXPECT_EQ(0, ParseHttpResponse(req, "\r\n", 2)); +} + +TEST(ParseHttpResponse, testNoHeaders) { + static const char m[] = "HTTP/1.0 200 OK\r\n\r\n"; + EXPECT_EQ(strlen(m), ParseHttpResponse(req, m, strlen(m))); + EXPECT_EQ(200, req->status); + EXPECT_STREQ("OK", gc(slice(m, req->message))); + EXPECT_EQ(10, req->version); +} + +TEST(ParseHttpResponse, testSomeHeaders) { + static const char m[] = "\ +HTTP/1.0 200 OK\r\n\ +Host: foo.example\r\n\ +Content-Length: 0\r\n\ +\r\n"; + EXPECT_EQ(strlen(m), ParseHttpResponse(req, m, strlen(m))); + EXPECT_EQ(200, req->status); + EXPECT_STREQ("OK", gc(slice(m, req->message))); + EXPECT_EQ(10, req->version); + EXPECT_STREQ("foo.example", gc(slice(m, req->headers[kHttpHost]))); + EXPECT_STREQ("0", gc(slice(m, req->headers[kHttpContentLength]))); + EXPECT_STREQ("", gc(slice(m, req->headers[kHttpEtag]))); +} + +TEST(ParseHttpResponse, testHttp101) { + static const char m[] = "HTTP/1.1 300 OMG\r\n\r\n"; + EXPECT_EQ(strlen(m), ParseHttpResponse(req, m, strlen(m))); + EXPECT_EQ(300, req->status); + EXPECT_STREQ("OMG", gc(slice(m, req->message))); + EXPECT_EQ(11, req->version); +} + +TEST(ParseHttpResponse, testHttp100) { + static const char m[] = "HTTP/1.0 404 Not Found\r\n\r\n"; + EXPECT_EQ(strlen(m), ParseHttpResponse(req, m, strlen(m))); + EXPECT_EQ(404, req->status); + EXPECT_STREQ("Not Found", gc(slice(m, req->message))); + EXPECT_EQ(10, req->version); +} + +void DoTiniestHttpResponse(void) { + static const char m[] = "\ +HTTP/1.0 200\r\n\ +\r\n"; + InitHttpResponse(req); + ParseHttpResponse(req, m, sizeof(m)); + DestroyHttpResponse(req); +} + +void DoTinyHttpResponse(void) { + static const char m[] = "\ +HTTP/1.0 200\r\n\ +Accept-Encoding: gzip\r\n\ +\r\n"; + InitHttpResponse(req); + ParseHttpResponse(req, m, sizeof(m)); + DestroyHttpResponse(req); +} + +void DoStandardChromeResponse(void) { + static const char m[] = "\ +HTTP/1.1 200 OK\r\n\ +Host: 10.10.10.124:8080\r\n\ +Connection: keep-alive\r\n\ +User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\r\n\ +DNT: \t1 \r\n\ +Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8\r\n\ +Referer: http://10.10.10.124:8080/\r\n\ +Accept-Encoding: gzip, deflate\r\n\ +Accept-Language: en-US,en;q=0.9\r\n\ +\r\n"; + InitHttpResponse(req); + CHECK_EQ(sizeof(m) - 1, ParseHttpResponse(req, m, sizeof(m))); + DestroyHttpResponse(req); +} + +void DoUnstandardChromeResponse(void) { + static const char m[] = "\ +HTTP/1.1 200 OK\r\n\ +X-Host: 10.10.10.124:8080\r\n\ +X-Connection: keep-alive\r\n\ +X-User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\r\n\ +X-DNT: \t1 \r\n\ +X-Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8\r\n\ +X-Referer: http://10.10.10.124:8080/\r\n\ +X-Accept-Encoding: gzip, deflate\r\n\ +X-Accept-Language: en-US,en;q=0.9\r\n\ +\r\n"; + InitHttpResponse(req); + CHECK_EQ(sizeof(m) - 1, ParseHttpResponse(req, m, sizeof(m))); + DestroyHttpResponse(req); +} + +BENCH(ParseHttpResponse, bench) { + EZBENCH2("DoTiniestHttpResponse", donothing, DoTiniestHttpResponse()); + EZBENCH2("DoTinyHttpResponse", donothing, DoTinyHttpResponse()); + EZBENCH2("DoStandardChromeResponse", donothing, DoStandardChromeResponse()); + EZBENCH2("DoUnstandardChromeResponse", donothing, + DoUnstandardChromeResponse()); +} + +BENCH(HeaderHas, bench) { + static const char m[] = "\ +HTTP/1.1 200 OK\r\n\ +X-In-Your-Way-A: a\r\n\ +X-In-Your-Way-B: b\r\n\ +X-In-Your-Way-C: b\r\n\ +Accept-Encoding: deflate\r\n\ +ACCEPT-ENCODING: gzip\r\n\ +ACCEPT-encoding: bzip2\r\n\ +\r\n"; + EXPECT_EQ(strlen(m), ParseHttpResponse(req, m, strlen(m))); + EZBENCH2("HeaderHas text/plain", donothing, + HeaderHas(req, m, kHttpAccept, "text/plain", 7)); + EZBENCH2("HeaderHas deflate", donothing, + HeaderHas(req, m, kHttpAcceptEncoding, "deflate", 7)); + EZBENCH2("HeaderHas gzip", donothing, + HeaderHas(req, m, kHttpAcceptEncoding, "gzip", 4)); + EZBENCH2("IsMimeType", donothing, + IsMimeType("text/plain; charset=utf-8", -1, "text/plain")); +} diff --git a/test/net/http/parseurl_test.c b/test/net/http/parseurl_test.c index ca462f70a..94655498b 100644 --- a/test/net/http/parseurl_test.c +++ b/test/net/http/parseurl_test.c @@ -362,6 +362,16 @@ TEST(ParseUrl, testObviouslyIllegalIpLiteral_getsTreatedAsRegName) { ASSERT_STREQ("//vf.%3A%3A1%00", gc(EncodeUrl(&h, 0))); } +TEST(ParseHost, testEmpty) { + struct Url h = {0}; + gc(ParseHost("", -1, &h)); + gc(h.params.p); + ASSERT_EQ(0, h.host.n); + ASSERT_EQ(0, h.port.n); + ASSERT_NE(0, h.host.p); + ASSERT_EQ(0, h.port.p); +} + TEST(ParseHost, test) { struct Url h = {0}; gc(ParseHost("foo.example:80", -1, &h)); diff --git a/test/net/http/test.mk b/test/net/http/test.mk index 8b69c523a..c64b41546 100644 --- a/test/net/http/test.mk +++ b/test/net/http/test.mk @@ -21,7 +21,8 @@ TEST_NET_HTTP_CHECKS = \ TEST_NET_HTTP_DIRECTDEPS = \ NET_HTTP \ - LIBC_TESTLIB + LIBC_TESTLIB \ + THIRD_PARTY_MBEDTLS TEST_NET_HTTP_DEPS := \ $(call uniq,$(foreach x,$(TEST_NET_HTTP_DIRECTDEPS),$($(x)))) diff --git a/test/tool/net/mbedtls_test.c b/test/tool/net/mbedtls_test.c new file mode 100644 index 000000000..8c710f094 --- /dev/null +++ b/test/tool/net/mbedtls_test.c @@ -0,0 +1,114 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/testlib/testlib.h" +#include "third_party/mbedtls/aes.h" +#include "third_party/mbedtls/base64.h" +#include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/chacha20.h" +#include "third_party/mbedtls/chachapoly.h" +#include "third_party/mbedtls/ctr_drbg.h" +#include "third_party/mbedtls/des.h" +#include "third_party/mbedtls/dhm.h" +#include "third_party/mbedtls/ecp.h" +#include "third_party/mbedtls/entropy.h" +#include "third_party/mbedtls/gcm.h" +#include "third_party/mbedtls/hmac_drbg.h" +#include "third_party/mbedtls/md5.h" +#include "third_party/mbedtls/memory_buffer_alloc.h" +#include "third_party/mbedtls/nist_kw.h" +#include "third_party/mbedtls/pkcs5.h" +#include "third_party/mbedtls/poly1305.h" +#include "third_party/mbedtls/rsa.h" +#include "third_party/mbedtls/sha1.h" +#include "third_party/mbedtls/sha256.h" +#include "third_party/mbedtls/sha512.h" +#include "third_party/mbedtls/x509.h" + +#ifdef MBEDTLS_SELF_TEST + +TEST(mbedtls, test) { +#ifdef MBEDTLS_DES_C + EXPECT_EQ(0, mbedtls_des_self_test(0)); +#endif +#ifdef MBEDTLS_CTR_DRBG_C + EXPECT_EQ(0, mbedtls_ctr_drbg_self_test(0)); +#endif +#ifdef MBEDTLS_HMAC_DRBG_C + EXPECT_EQ(0, mbedtls_hmac_drbg_self_test(0)); +#endif +#ifdef MBEDTLS_ENTROPY_C + EXPECT_EQ(0, mbedtls_entropy_self_test(0)); +#endif +#ifdef MBEDTLS_POLY1305_C + EXPECT_EQ(0, mbedtls_poly1305_self_test(0)); +#endif +#ifdef MBEDTLS_RSA_C + EXPECT_EQ(0, mbedtls_rsa_self_test(0)); +#endif +#ifdef MBEDTLS_BIGNUM_C + EXPECT_EQ(0, mbedtls_mpi_self_test(0)); +#endif +#ifdef MBEDTLS_PKCS5_C + EXPECT_EQ(0, mbedtls_pkcs5_self_test(0)); +#endif +#ifdef MBEDTLS_DHM_C + EXPECT_EQ(0, mbedtls_dhm_self_test(0)); +#endif +#ifdef MBEDTLS_GCM_C + EXPECT_EQ(0, mbedtls_gcm_self_test(0)); +#endif +#ifdef MBEDTLS_X509_USE_C + EXPECT_EQ(0, mbedtls_x509_self_test(0)); +#endif +#ifdef MBEDTLS_CHACHA20_C + EXPECT_EQ(0, mbedtls_chacha20_self_test(0)); +#endif +#ifdef MBEDTLS_CHACHAPOLY_C + EXPECT_EQ(0, mbedtls_chachapoly_self_test(0)); +#endif +#ifdef MBEDTLS_MEMORY_BUFFER_ALLOC_C + EXPECT_EQ(0, mbedtls_memory_buffer_alloc_self_test(0)); +#endif +#ifdef MBEDTLS_AES_C + EXPECT_EQ(0, mbedtls_aes_self_test(0)); +#endif +#ifdef MBEDTLS_BASE64_C + EXPECT_EQ(0, mbedtls_base64_self_test(0)); +#endif +#ifdef MBEDTLS_ECP_C + EXPECT_EQ(0, mbedtls_ecp_self_test(0)); +#endif +#ifdef MBEDTLS_MD5_C + EXPECT_EQ(0, mbedtls_md5_self_test(0)); +#endif +#ifdef MBEDTLS_SHA1_C + EXPECT_EQ(0, mbedtls_sha1_self_test(0)); +#endif +#ifdef MBEDTLS_SHA256_C + EXPECT_EQ(0, mbedtls_sha256_self_test(0)); +#endif +#ifdef MBEDTLS_SHA512_C + EXPECT_EQ(0, mbedtls_sha512_self_test(0)); +#endif +#ifdef MBEDTLS_NIST_KW_C + EXPECT_EQ(0, mbedtls_nist_kw_self_test(0)); +#endif +} + +#endif /* MBEDTLS_SELF_TEST */ diff --git a/test/tool/net/redbean_test.c b/test/tool/net/redbean_test.c index 50c46f227..c03844047 100644 --- a/test/tool/net/redbean_test.c +++ b/test/tool/net/redbean_test.c @@ -110,9 +110,9 @@ TEST(redbean, testOptions) { int pid, pipefds[2]; sigset_t chldmask, savemask; sigaddset(&chldmask, SIGCHLD); - sigprocmask(SIG_BLOCK, &chldmask, &savemask); + CHECK_NE(-1, sigprocmask(SIG_BLOCK, &chldmask, &savemask)); ASSERT_NE(-1, pipe(pipefds)); - ASSERT_NE(-1, (pid = vfork())); + ASSERT_NE(-1, (pid = fork())); if (!pid) { close(pipefds[0]); dup2(pipefds[1], 1); @@ -135,6 +135,7 @@ TEST(redbean, testOptions) { gc(SendHttpRequest("OPTIONS * HTTP/1.1\n\n")))); EXPECT_NE(-1, kill(pid, SIGTERM)); EXPECT_NE(-1, wait(0)); + CHECK_NE(-1, sigprocmask(SIG_SETMASK, &savemask, 0)); } TEST(redbean, testPipeline) { @@ -143,9 +144,9 @@ TEST(redbean, testPipeline) { int pid, pipefds[2]; sigset_t chldmask, savemask; sigaddset(&chldmask, SIGCHLD); - sigprocmask(SIG_BLOCK, &chldmask, &savemask); + CHECK_NE(-1, sigprocmask(SIG_BLOCK, &chldmask, &savemask)); ASSERT_NE(-1, pipe(pipefds)); - ASSERT_NE(-1, (pid = vfork())); + ASSERT_NE(-1, (pid = fork())); if (!pid) { close(pipefds[0]); dup2(pipefds[1], 1); @@ -177,4 +178,5 @@ TEST(redbean, testPipeline) { "OPTIONS * HTTP/1.1\n\n")))); EXPECT_NE(-1, kill(pid, SIGTERM)); EXPECT_NE(-1, wait(0)); + CHECK_NE(-1, sigprocmask(SIG_SETMASK, &savemask, 0)); } diff --git a/test/tool/net/test.mk b/test/tool/net/test.mk index 6b9baed62..6e94cd8f5 100644 --- a/test/tool/net/test.mk +++ b/test/tool/net/test.mk @@ -44,6 +44,7 @@ TEST_TOOL_NET_DIRECTDEPS = \ LIBC_X \ LIBC_ZIPOS \ THIRD_PARTY_REGEX \ + THIRD_PARTY_MBEDTLS \ THIRD_PARTY_SQLITE3 TEST_TOOL_NET_DEPS := \ diff --git a/third_party/infozip/infozip.mk b/third_party/infozip/infozip.mk index 74a572f12..827acdc9f 100644 --- a/third_party/infozip/infozip.mk +++ b/third_party/infozip/infozip.mk @@ -1,92 +1,93 @@ #-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐ #───vi: set et ft=make ts=8 tw=8 fenc=utf-8 :vi───────────────────────┘ + PKGS += THIRD_PARTY_ZIP THIRD_PARTY_ZIP_FILES = $(wildcard third_party/infozip/zip/*) third_party/infozip/zip/unix/unix.c THIRD_PARTY_ZIP_SRCS_C = $(filter %.c,$(THIRD_PARTY_ZIP_FILES)) THIRD_PARTY_ZIP = $(THIRD_PARTY_ZIP_COMS) $(THIRD_PARTY_ZIP_COMS:%=%.dbg) -THIRD_PARTY_ZIP_COMS = \ +THIRD_PARTY_ZIP_COMS = \ o/$(MODE)/third_party/infozip/zip.com \ o/$(MODE)/third_party/infozip/zipsplit.com \ o/$(MODE)/third_party/infozip/zipnote.com \ o/$(MODE)/third_party/infozip/zipcloak.com -THIRD_PARTY_ZIP_OBJS = $(sort \ +THIRD_PARTY_ZIP_OBJS = $(sort \ $(THIRD_PARTY_ZIP_COM_OBJS) \ - $(THIRD_PARTY_ZIPCLOAK_OBJS) \ + $(THIRD_PARTY_ZIPCLOAK_OBJS) \ $(THIRD_PARTY_ZIPNOTE_OBJS) \ - $(THIRD_PARTY_ZIPSPLIT_OBJS) \ + $(THIRD_PARTY_ZIPSPLIT_OBJS) \ ) -THIRD_PARTY_ZIP_UTIL_OBJS1 = \ - o/$(MODE)/third_party/infozip/zip/globals.o \ - o/$(MODE)/third_party/infozip/zip/unix/unix_.o \ - o/$(MODE)/third_party/infozip/zip/zipfile_.o \ - o/$(MODE)/third_party/infozip/zip/fileio_.o \ +THIRD_PARTY_ZIP_UTIL_OBJS1 = \ + o/$(MODE)/third_party/infozip/zip/globals.o \ + o/$(MODE)/third_party/infozip/zip/unix/unix_.o \ + o/$(MODE)/third_party/infozip/zip/zipfile_.o \ + o/$(MODE)/third_party/infozip/zip/fileio_.o \ o/$(MODE)/third_party/infozip/zip/util_.o -THIRD_PARTY_ZIP_UTIL_OBJS2 = \ - o/$(MODE)/third_party/infozip/zip/crypt_.o \ +THIRD_PARTY_ZIP_UTIL_OBJS2 = \ + o/$(MODE)/third_party/infozip/zip/crypt_.o \ o/$(MODE)/third_party/infozip/zip/crc32_.o -THIRD_PARTY_ZIP_UTIL_OBJS = \ - $(THIRD_PARTY_ZIP_UTIL_OBJS1) \ +THIRD_PARTY_ZIP_UTIL_OBJS = \ + $(THIRD_PARTY_ZIP_UTIL_OBJS1) \ $(THIRD_PARTY_ZIP_UTIL_OBJS2) -THIRD_PARTY_ZIP_COM_OBJS = \ - o/$(MODE)/third_party/infozip/zip/zip.o \ - o/$(MODE)/third_party/infozip/zip/zipfile.o \ - o/$(MODE)/third_party/infozip/zip/zipup.o \ - o/$(MODE)/third_party/infozip/zip/fileio.o \ - o/$(MODE)/third_party/infozip/zip/util.o \ - o/$(MODE)/third_party/infozip/zip/globals.o \ - o/$(MODE)/third_party/infozip/zip/crypt.o \ - o/$(MODE)/third_party/infozip/zip/ttyio.o \ - o/$(MODE)/third_party/infozip/zip/unix/unix.o \ - o/$(MODE)/third_party/infozip/zip/crc32.o \ - o/$(MODE)/third_party/infozip/zip/zbz2err.o \ - o/$(MODE)/third_party/infozip/zip/deflate.o \ +THIRD_PARTY_ZIP_COM_OBJS = \ + o/$(MODE)/third_party/infozip/zip/zip.o \ + o/$(MODE)/third_party/infozip/zip/zipfile.o \ + o/$(MODE)/third_party/infozip/zip/zipup.o \ + o/$(MODE)/third_party/infozip/zip/fileio.o \ + o/$(MODE)/third_party/infozip/zip/util.o \ + o/$(MODE)/third_party/infozip/zip/globals.o \ + o/$(MODE)/third_party/infozip/zip/crypt.o \ + o/$(MODE)/third_party/infozip/zip/ttyio.o \ + o/$(MODE)/third_party/infozip/zip/unix/unix.o \ + o/$(MODE)/third_party/infozip/zip/crc32.o \ + o/$(MODE)/third_party/infozip/zip/zbz2err.o \ + o/$(MODE)/third_party/infozip/zip/deflate.o \ o/$(MODE)/third_party/infozip/zip/trees.o -THIRD_PARTY_ZIPSPLIT_OBJS = \ - o/$(MODE)/third_party/infozip/zip/zipsplit.o \ +THIRD_PARTY_ZIPSPLIT_OBJS = \ + o/$(MODE)/third_party/infozip/zip/zipsplit.o \ $(THIRD_PARTY_ZIP_UTIL_OBJS1) -THIRD_PARTY_ZIPNOTE_OBJS = \ - o/$(MODE)/third_party/infozip/zip/zipnote.o \ +THIRD_PARTY_ZIPNOTE_OBJS = \ + o/$(MODE)/third_party/infozip/zip/zipnote.o \ $(THIRD_PARTY_ZIP_UTIL_OBJS1) -THIRD_PARTY_ZIPCLOAK_OBJS = \ - o/$(MODE)/third_party/infozip/zip/zipcloak.o \ - o/$(MODE)/third_party/infozip/zip/ttyio.o \ - $(THIRD_PARTY_ZIP_UTIL_OBJS1) \ +THIRD_PARTY_ZIPCLOAK_OBJS = \ + o/$(MODE)/third_party/infozip/zip/zipcloak.o \ + o/$(MODE)/third_party/infozip/zip/ttyio.o \ + $(THIRD_PARTY_ZIP_UTIL_OBJS1) \ $(THIRD_PARTY_ZIP_UTIL_OBJS2) -THIRD_PARTY_ZIP_LARGE_OBJS = \ - o/$(MODE)/third_party/infozip/zip/zip.o \ +THIRD_PARTY_ZIP_LARGE_OBJS = \ + o/$(MODE)/third_party/infozip/zip/zip.o \ o/$(MODE)/third_party/infozip/zip/zipsplit.o \ - o/$(MODE)/third_party/infozip/zip/fileio.o \ + o/$(MODE)/third_party/infozip/zip/fileio.o \ o/$(MODE)/third_party/infozip/zip/fileio_.o o/$(MODE)/third_party/infozip/zip/%_.o: third_party/infozip/zip/%.c @$(COMPILE) -AOBJECTIFY.c $(OBJECTIFY.c) $(OUTPUT_OPTION) -DUTIL $< -$(THIRD_PARTY_ZIP_OBJS): \ - OVERRIDE_CFLAGS += \ - -DUNIX \ - -DMMAP \ +$(THIRD_PARTY_ZIP_OBJS): \ + OVERRIDE_CFLAGS += \ + -DUNIX \ + -DMMAP \ -DUNICODE_SUPPORT \ -DUSE_EF_UT_TIME \ - -DLARGE_FILE_SUPPORT \ + -DLARGE_FILE_SUPPORT \ -DHAVE_DIRENT_H \ -DHAVE_TERMIOS_H \ -DNO_BZIP2_SUPPORT -$(THIRD_PARTY_ZIP_LARGE_OBJS): \ +$(THIRD_PARTY_ZIP_LARGE_OBJS): \ OVERRIDE_CFLAGS += -DSTACK_FRAME_UNLIMITED -THIRD_PARTY_ZIP_DIRECTDEPS = \ +THIRD_PARTY_ZIP_DIRECTDEPS = \ LIBC_ERRNO \ LIBC_LIMITS \ LIBC_ALG \ @@ -99,36 +100,47 @@ THIRD_PARTY_ZIP_DIRECTDEPS = \ LIBC_TIME \ LIBC_UNICODE -THIRD_PARTY_ZIP_DEPS := \ +THIRD_PARTY_ZIP_DEPS := \ $(call uniq,$(foreach x,$(THIRD_PARTY_ZIP_DIRECTDEPS),$($(x)))) o/$(MODE)/third_party/infozip/zip.com.dbg: \ $(THIRD_PARTY_ZIP_DEPS) \ $(THIRD_PARTY_ZIP_COM_OBJS) \ - $(CRT) \ + $(CRT) \ $(APE) @$(APELINK) o/$(MODE)/third_party/infozip/zipsplit.com.dbg: \ $(THIRD_PARTY_ZIP_DEPS) \ - $(THIRD_PARTY_ZIPSPLIT_OBJS) \ - $(CRT) \ + $(THIRD_PARTY_ZIPSPLIT_OBJS) \ + $(CRT) \ $(APE) @$(APELINK) o/$(MODE)/third_party/infozip/zipnote.com.dbg: \ $(THIRD_PARTY_ZIP_DEPS) \ $(THIRD_PARTY_ZIPNOTE_OBJS) \ - $(CRT) \ + $(CRT) \ $(APE) @$(APELINK) o/$(MODE)/third_party/infozip/zipcloak.com.dbg: \ - $(THIRD_PARTY_ZIP_DEPS) \ + $(THIRD_PARTY_ZIP_DEPS) \ $(THIRD_PARTY_ZIPCLOAK_OBJS) \ - $(CRT) \ + $(CRT) \ $(APE) @$(APELINK) +o/$(MODE)/host/third_party/infozip/zip.com.dbg: \ + o/$(MODE)/third_party/infozip/zip.com.dbg + @mkdir -p $(@D) + cp -f $< $@ + +o/$(MODE)/host/third_party/infozip/zip.com: \ + o/$(MODE)/third_party/infozip/zip.com \ + o/$(MODE)/host/third_party/infozip/zip.com.dbg + cp -f $< $@ + $@ -h >/dev/null + .PHONY: o/$(MODE)/third_party/infozip o/$(MODE)/third_party/infozip: $(THIRD_PARTY_ZIP) diff --git a/third_party/infozip/zip/zip.c b/third_party/infozip/zip/zip.c index 1c9cfc0a2..216059129 100644 --- a/third_party/infozip/zip/zip.c +++ b/third_party/infozip/zip/zip.c @@ -30,6 +30,8 @@ #include "third_party/infozip/zip/crypt.h" #include "third_party/infozip/zip/ttyio.h" #include "libc/str/str.h" +#include "libc/log/log.h" +#include "libc/dce.h" #include "libc/errno.h" #ifdef VMS # include @@ -2191,6 +2193,7 @@ char **argv; /* command line tokens */ char **args = NULL; /* could be wide argv */ + if (!IsTiny()) showcrashreports(); #ifdef THEOS /* the argument expansion from the standard library is full of bugs */ diff --git a/third_party/lz4cli/lz4frame.c b/third_party/lz4cli/lz4frame.c index 45778b389..2d979164a 100644 --- a/third_party/lz4cli/lz4frame.c +++ b/third_party/lz4cli/lz4frame.c @@ -67,6 +67,7 @@ You can contact the author at : #define ALLOC(s) malloc(s) #define ALLOC_AND_ZERO(s) calloc(1,s) #define FREEMEM free +#include "libc/assert.h" #include "libc/str/str.h" /* memset, memcpy, memmove */ #define MEM_INIT memset @@ -84,17 +85,6 @@ You can contact the author at : #include "third_party/lz4cli/xxhash.h" -/*-************************************ -* Debug -**************************************/ -#if defined(LZ4_DEBUG) && (LZ4_DEBUG>=1) -# include "libc/runtime/runtime.h" -#else -# ifndef assert -# define assert(condition) ((void)0) -# endif -#endif - #define LZ4F_STATIC_ASSERT(c) { enum { LZ4F_static_assert = 1/(int)(!!(c)) }; } /* use only *after* variable declarations */ #if defined(LZ4_DEBUG) && (LZ4_DEBUG>=2) && !defined(DEBUGLOG) diff --git a/third_party/mbedtls/README.cosmo b/third_party/mbedtls/README.cosmo index 5aa672bf7..deb4a0878 100644 --- a/third_party/mbedtls/README.cosmo +++ b/third_party/mbedtls/README.cosmo @@ -1,2 +1,47 @@ -Source: -https://github.com/ARMmbed/mbedtls/archive/refs/tags/v2.26.0.tar.gz +DESCRIPTION + + Mbed TLS is a crypto library built by ARM that's been released + under a more permissive license than alternatives like OpenSSL + and is useful for interoperating with systems that require TLS + +SOURCE + + https://github.com/ARMmbed/mbedtls/archive/refs/tags/v2.26.0.tar.gz + +LICENSE + + Apache 2.o + +LOCAL CHANGES + + - Reduce build+test latency from 15 seconds to 5 seconds. + + - Features have been added that enable this library to produce SSL + certificates that can be used by Google Chrome. This required we + add featurces for editing Subject Alternative Names and Extended + Key Usage X.509 extension fields since upstream mbedtls can only + do that currently for Netscape Navigator. + + - Local changes needed to be made to test_suite_ssl.datax due to it + not taking into consideration disabled features like DTLS. + + - Local changes needed to be made to test_suite_x509parse.datax due + to the features we added for subject alternative name parsing. + + - We've slimmed things down to meet our own specific local needs. + For example, we don't need the PSA code since we don't target ARM + hardware. We also don't need algorithms like camellia, blowfish, + ripemd, arc4, ecjpake, etc. We want security code that's simple, + readable, and easy to maintain. For example, the formally verified + eliptic curve diffie-helman code was 38 files and most of it was + dead code which could be consolidated into one < 1 kLOC file. + + - The only breaking API change that's been made is to redefine int + arrays of things like long lists of ciphersuites to be uint8_t or + uint16_t instead when appropriate. + + - Exported test code so it (a) doesn't have python as a build time + dependency, (b) doesn't print to stdout on success, (c) bundles + its dependencies inside a zip container so the tests are able to + run hermetically if the binary is scp'd to some machine, and (d) + doesn't have large amounts of duplicated generated code. diff --git a/third_party/mbedtls/README.md b/third_party/mbedtls/README.md deleted file mode 100644 index ac2a6ab44..000000000 --- a/third_party/mbedtls/README.md +++ /dev/null @@ -1,247 +0,0 @@ -README for Mbed TLS -=================== - -Mbed TLS is a C library that implements cryptographic primitives, X.509 certificate manipulation and the SSL/TLS and DTLS protocols. Its small code footprint makes it suitable for embedded systems. - -Mbed TLS includes a reference implementation of the [PSA Cryptography API](#psa-cryptography-api). This is currently a preview for evaluation purposes only. - -Configuration -------------- - -Mbed TLS should build out of the box on most systems. Some platform specific options are available in the fully documented configuration file `include/mbedtls/config.h`, which is also the place where features can be selected. This file can be edited manually, or in a more programmatic way using the Python 3 script `scripts/config.py` (use `--help` for usage instructions). - -Compiler options can be set using conventional environment variables such as `CC` and `CFLAGS` when using the Make and CMake build system (see below). - -We provide some non-standard configurations focused on specific use cases in the `configs/` directory. You can read more about those in `configs/README.txt` - -Documentation -------------- - -Documentation for the Mbed TLS interfaces in the default library configuration is available as part of the [Mbed TLS documentation](https://tls.mbed.org/api/). - -To generate a local copy of the library documentation in HTML format, tailored to your compile-time configuration: - -1. Make sure that [Doxygen](http://www.doxygen.nl/) is installed. We use version 1.8.11 but slightly older or more recent versions should work. -1. Run `make apidoc`. -1. Browse `apidoc/index.html` or `apidoc/modules.html`. - -Compiling ---------- - -There are currently three active build systems used within Mbed TLS releases: - -- GNU Make -- CMake -- Microsoft Visual Studio (Microsoft Visual Studio 2013 or later) - -The main systems used for development are CMake and GNU Make. Those systems are always complete and up-to-date. The others should reflect all changes present in the CMake and Make build system, although features may not be ported there automatically. - -The Make and CMake build systems create three libraries: libmbedcrypto, libmbedx509, and libmbedtls. Note that libmbedtls depends on libmbedx509 and libmbedcrypto, and libmbedx509 depends on libmbedcrypto. As a result, some linkers will expect flags to be in a specific order, for example the GNU linker wants `-lmbedtls -lmbedx509 -lmbedcrypto`. Also, when loading shared libraries using dlopen(), you'll need to load libmbedcrypto first, then libmbedx509, before you can load libmbedtls. - -### Tool versions - -You need the following tools to build the library with the provided makefiles: - -* GNU Make or a build tool that CMake supports. -* A C99 toolchain (compiler, linker, archiver). We actively test with GCC 5.4, Clang 3.8, IAR8 and Visual Studio 2013. More recent versions should work. Slightly older versions may work. -* Python 3 to generate the test code. -* Perl to run the tests. - -### Make - -We require GNU Make. To build the library and the sample programs, GNU Make and a C compiler are sufficient. Some of the more advanced build targets require some Unix/Linux tools. - -We intentionally only use a minimum of functionality in the makefiles in order to keep them as simple and independent of different toolchains as possible, to allow users to more easily move between different platforms. Users who need more features are recommended to use CMake. - -In order to build from the source code using GNU Make, just enter at the command line: - - make - -In order to run the tests, enter: - - make check - -The tests need Python to be built and Perl to be run. If you don't have one of them installed, you can skip building the tests with: - - make no_test - -You'll still be able to run a much smaller set of tests with: - - programs/test/selftest - -In order to build for a Windows platform, you should use `WINDOWS_BUILD=1` if the target is Windows but the build environment is Unix-like (for instance when cross-compiling, or compiling from an MSYS shell), and `WINDOWS=1` if the build environment is a Windows shell (for instance using mingw32-make) (in that case some targets will not be available). - -Setting the variable `SHARED` in your environment will build shared libraries in addition to the static libraries. Setting `DEBUG` gives you a debug build. You can override `CFLAGS` and `LDFLAGS` by setting them in your environment or on the make command line; compiler warning options may be overridden separately using `WARNING_CFLAGS`. Some directory-specific options (for example, `-I` directives) are still preserved. - -Please note that setting `CFLAGS` overrides its default value of `-O2` and setting `WARNING_CFLAGS` overrides its default value (starting with `-Wall -Wextra`), so if you just want to add some warning options to the default ones, you can do so by setting `CFLAGS=-O2 -Werror` for example. Setting `WARNING_CFLAGS` is useful when you want to get rid of its default content (for example because your compiler doesn't accept `-Wall` as an option). Directory-specific options cannot be overridden from the command line. - -Depending on your platform, you might run into some issues. Please check the Makefiles in `library/`, `programs/` and `tests/` for options to manually add or remove for specific platforms. You can also check [the Mbed TLS Knowledge Base](https://tls.mbed.org/kb) for articles on your platform or issue. - -In case you find that you need to do something else as well, please let us know what, so we can add it to the [Mbed TLS Knowledge Base](https://tls.mbed.org/kb). - -### CMake - -In order to build the source using CMake in a separate directory (recommended), just enter at the command line: - - mkdir /path/to/build_dir && cd /path/to/build_dir - cmake /path/to/mbedtls_source - cmake --build . - -In order to run the tests, enter: - - ctest - -The test suites need Python to be built and Perl to be executed. If you don't have one of these installed, you'll want to disable the test suites with: - - cmake -DENABLE_TESTING=Off /path/to/mbedtls_source - -If you disabled the test suites, but kept the programs enabled, you can still run a much smaller set of tests with: - - programs/test/selftest - -To configure CMake for building shared libraries, use: - - cmake -DUSE_SHARED_MBEDTLS_LIBRARY=On /path/to/mbedtls_source - -There are many different build modes available within the CMake buildsystem. Most of them are available for gcc and clang, though some are compiler-specific: - -- `Release`. This generates the default code without any unnecessary information in the binary files. -- `Debug`. This generates debug information and disables optimization of the code. -- `Coverage`. This generates code coverage information in addition to debug information. -- `ASan`. This instruments the code with AddressSanitizer to check for memory errors. (This includes LeakSanitizer, with recent version of gcc and clang.) (With recent version of clang, this mode also instruments the code with UndefinedSanitizer to check for undefined behaviour.) -- `ASanDbg`. Same as ASan but slower, with debug information and better stack traces. -- `MemSan`. This instruments the code with MemorySanitizer to check for uninitialised memory reads. Experimental, needs recent clang on Linux/x86\_64. -- `MemSanDbg`. Same as MemSan but slower, with debug information, better stack traces and origin tracking. -- `Check`. This activates the compiler warnings that depend on optimization and treats all warnings as errors. - -Switching build modes in CMake is simple. For debug mode, enter at the command line: - - cmake -D CMAKE_BUILD_TYPE=Debug /path/to/mbedtls_source - -To list other available CMake options, use: - - cmake -LH - -Note that, with CMake, you can't adjust the compiler or its flags after the -initial invocation of cmake. This means that `CC=your_cc make` and `make -CC=your_cc` will *not* work (similarly with `CFLAGS` and other variables). -These variables need to be adjusted when invoking cmake for the first time, -for example: - - CC=your_cc cmake /path/to/mbedtls_source - -If you already invoked cmake and want to change those settings, you need to -remove the build directory and create it again. - -Note that it is possible to build in-place; this will however overwrite the -provided Makefiles (see `scripts/tmp_ignore_makefiles.sh` if you want to -prevent `git status` from showing them as modified). In order to do so, from -the Mbed TLS source directory, use: - - cmake . - make - -If you want to change `CC` or `CFLAGS` afterwards, you will need to remove the -CMake cache. This can be done with the following command using GNU find: - - find . -iname '*cmake*' -not -name CMakeLists.txt -exec rm -rf {} + - -You can now make the desired change: - - CC=your_cc cmake . - make - -Regarding variables, also note that if you set CFLAGS when invoking cmake, -your value of CFLAGS doesn't override the content provided by cmake (depending -on the build mode as seen above), it's merely prepended to it. - -#### Mbed TLS as a subproject - -Mbed TLS supports being built as a CMake subproject. One can -use `add_subdirectory()` from a parent CMake project to include Mbed TLS as a -subproject. - -### Microsoft Visual Studio - -The build files for Microsoft Visual Studio are generated for Visual Studio 2010. - -The solution file `mbedTLS.sln` contains all the basic projects needed to build the library and all the programs. The files in tests are not generated and compiled, as these need Python and perl environments as well. However, the selftest program in `programs/test/` is still available. - -Example programs ----------------- - -We've included example programs for a lot of different features and uses in [`programs/`](programs/README.md). -Please note that the goal of these sample programs is to demonstrate specific features of the library, and the code may need to be adapted to build a real-world application. - -Tests ------ - -Mbed TLS includes an elaborate test suite in `tests/` that initially requires Python to generate the tests files (e.g. `test\_suite\_mpi.c`). These files are generated from a `function file` (e.g. `suites/test\_suite\_mpi.function`) and a `data file` (e.g. `suites/test\_suite\_mpi.data`). The `function file` contains the test functions. The `data file` contains the test cases, specified as parameters that will be passed to the test function. - -For machines with a Unix shell and OpenSSL (and optionally GnuTLS) installed, additional test scripts are available: - -- `tests/ssl-opt.sh` runs integration tests for various TLS options (renegotiation, resumption, etc.) and tests interoperability of these options with other implementations. -- `tests/compat.sh` tests interoperability of every ciphersuite with other implementations. -- `tests/scripts/test-ref-configs.pl` test builds in various reduced configurations. -- `tests/scripts/key-exchanges.pl` test builds in configurations with a single key exchange enabled -- `tests/scripts/all.sh` runs a combination of the above tests, plus some more, with various build options (such as ASan, full `config.h`, etc). - -Porting Mbed TLS ----------------- - -Mbed TLS can be ported to many different architectures, OS's and platforms. Before starting a port, you may find the following Knowledge Base articles useful: - -- [Porting Mbed TLS to a new environment or OS](https://tls.mbed.org/kb/how-to/how-do-i-port-mbed-tls-to-a-new-environment-OS) -- [What external dependencies does Mbed TLS rely on?](https://tls.mbed.org/kb/development/what-external-dependencies-does-mbedtls-rely-on) -- [How do I configure Mbed TLS](https://tls.mbed.org/kb/compiling-and-building/how-do-i-configure-mbedtls) - -PSA cryptography API --------------------- - -### PSA API design - -Arm's [Platform Security Architecture (PSA)](https://developer.arm.com/architectures/security-architectures/platform-security-architecture) is a holistic set of threat models, security analyses, hardware and firmware architecture specifications, and an open source firmware reference implementation. PSA provides a recipe, based on industry best practice, that allows security to be consistently designed in, at both a hardware and firmware level. - -The [PSA cryptography API](https://armmbed.github.io/mbed-crypto/psa/#application-programming-interface) provides access to a set of cryptographic primitives. It has a dual purpose. First, it can be used in a PSA-compliant platform to build services, such as secure boot, secure storage and secure communication. Second, it can also be used independently of other PSA components on any platform. - -The design goals of the PSA cryptography API include: - -* The API distinguishes caller memory from internal memory, which allows the library to be implemented in an isolated space for additional security. Library calls can be implemented as direct function calls if isolation is not desired, and as remote procedure calls if isolation is desired. -* The structure of internal data is hidden to the application, which allows substituting alternative implementations at build time or run time, for example, in order to take advantage of hardware accelerators. -* All access to the keys happens through key identifiers, which allows support for external cryptoprocessors that is transparent to applications. -* The interface to algorithms is generic, favoring algorithm agility. -* The interface is designed to be easy to use and hard to accidentally misuse. - -Arm welcomes feedback on the design of the API. If you think something could be improved, please open an issue on our Github repository. Alternatively, if you prefer to provide your feedback privately, please email us at [`mbed-crypto@arm.com`](mailto:mbed-crypto@arm.com). All feedback received by email is treated confidentially. - -### PSA API documentation - -A browsable copy of the PSA Cryptography API documents is available on the [PSA cryptography interfaces documentation portal](https://armmbed.github.io/mbed-crypto/psa/#application-programming-interface) in [PDF](https://armmbed.github.io/mbed-crypto/PSA_Cryptography_API_Specification.pdf) and [HTML](https://armmbed.github.io/mbed-crypto/html/index.html) formats. - -### PSA implementation in Mbed TLS - -Mbed TLS includes a reference implementation of the PSA Cryptography API. -This implementation is not yet as mature as the rest of the library. Some parts of the code have not been reviewed as thoroughly, and some parts of the PSA implementation are not yet well optimized for code size. - -The X.509 and TLS code can use PSA cryptography for a limited subset of operations. To enable this support, activate the compilation option `MBEDTLS_USE_PSA_CRYPTO` in `config.h`. - -There are currently a few deviations where the library does not yet implement the latest version of the specification. Please refer to the [compliance issues on Github](https://github.com/ARMmbed/mbed-crypto/labels/compliance) for an up-to-date list. - -### Upcoming features - -Future releases of this library will include: - -* A driver programming interface, which makes it possible to use hardware accelerators instead of the default software implementation for chosen algorithms. -* Support for external keys to be stored and manipulated exclusively in a separate cryptoprocessor. -* A configuration mechanism to compile only the algorithms you need for your application. -* A wider set of cryptographic algorithms. - -License -------- - -Unless specifically indicated otherwise in a file, Mbed TLS files are provided under the [Apache-2.0](https://spdx.org/licenses/Apache-2.0.html) license. See the [LICENSE](LICENSE) file for the full text of this license. Contributors must accept that their contributions are made under both the Apache-2.0 AND [GPL-2.0-or-later](https://spdx.org/licenses/GPL-2.0-or-later.html) licenses. This enables LTS (Long Term Support) branches of the software to be provided under either the Apache-2.0 OR GPL-2.0-or-later licenses. - -Contributing ------------- - -We gratefully accept bug reports and contributions from the community. Please see the [contributing guidelines](CONTRIBUTING.md) for details on how to do this. diff --git a/third_party/mbedtls/aes.c b/third_party/mbedtls/aes.c index 60486daee..5a6b2fcdc 100644 --- a/third_party/mbedtls/aes.c +++ b/third_party/mbedtls/aes.c @@ -1,10 +1,18 @@ -/* clang-format off */ +#include "libc/bits/bits.h" +#include "libc/nexgen32e/x86feature.h" +#include "third_party/mbedtls/aes.h" +#include "third_party/mbedtls/aesni.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * FIPS-197 compliant AES implementation * @@ -31,61 +39,17 @@ asm(".include \"libc/disclaimer.inc\""); * http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf */ -#include "libc/nexgen32e/x86feature.h" -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_AES_C) - -#include "third_party/mbedtls/aes.h" -#include "third_party/mbedtls/platform.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" -#if defined(MBEDTLS_PADLOCK_C) -#include "third_party/mbedtls/padlock.h" -#endif -#if defined(MBEDTLS_AESNI_C) -#include "third_party/mbedtls/aesni.h" -#endif - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - #if !defined(MBEDTLS_AES_ALT) -/* Parameter validation macros based on platform_util.h */ #define AES_VALIDATE_RET( cond ) \ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_AES_BAD_INPUT_DATA ) #define AES_VALIDATE( cond ) \ MBEDTLS_INTERNAL_VALIDATE( cond ) -/* - * 32-bit integer manipulation macros (little endian) - */ -#ifndef GET_UINT32_LE -#define GET_UINT32_LE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] ) \ - | ( (uint32_t) (b)[(i) + 1] << 8 ) \ - | ( (uint32_t) (b)[(i) + 2] << 16 ) \ - | ( (uint32_t) (b)[(i) + 3] << 24 ); \ -} -#endif - -#ifndef PUT_UINT32_LE -#define PUT_UINT32_LE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( ( (n) ) & 0xFF ); \ - (b)[(i) + 1] = (unsigned char) ( ( (n) >> 8 ) & 0xFF ); \ - (b)[(i) + 2] = (unsigned char) ( ( (n) >> 16 ) & 0xFF ); \ - (b)[(i) + 3] = (unsigned char) ( ( (n) >> 24 ) & 0xFF ); \ -} -#endif +#define GET_UINT32_LE(n,b,i) (n) = READ32LE((b) + (i)) +#define PUT_UINT32_LE(n,b,i) WRITE32LE((b) + (i), n) #if defined(MBEDTLS_PADLOCK_C) && \ ( defined(MBEDTLS_HAVE_X86) || defined(MBEDTLS_PADLOCK_ALIGN16) ) @@ -928,15 +892,6 @@ int mbedtls_internal_aes_encrypt( mbedtls_aes_context *ctx, } #endif /* !MBEDTLS_AES_ENCRYPT_ALT */ -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_aes_encrypt( mbedtls_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ) -{ - mbedtls_internal_aes_encrypt( ctx, input, output ); -} -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - /* * AES-ECB block decryption */ @@ -1001,15 +956,6 @@ int mbedtls_internal_aes_decrypt( mbedtls_aes_context *ctx, } #endif /* !MBEDTLS_AES_DECRYPT_ALT */ -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_aes_decrypt( mbedtls_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ) -{ - mbedtls_internal_aes_decrypt( ctx, input, output ); -} -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - /* * AES-ECB block encryption/decryption */ @@ -1052,11 +998,11 @@ int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx, * AES-CBC buffer encryption/decryption */ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) { int i; unsigned char temp[16]; @@ -1122,35 +1068,6 @@ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, #if defined(MBEDTLS_CIPHER_MODE_XTS) -/* Endianess with 64 bits values */ -#ifndef GET_UINT64_LE -#define GET_UINT64_LE(n,b,i) \ -{ \ - (n) = ( (uint64_t) (b)[(i) + 7] << 56 ) \ - | ( (uint64_t) (b)[(i) + 6] << 48 ) \ - | ( (uint64_t) (b)[(i) + 5] << 40 ) \ - | ( (uint64_t) (b)[(i) + 4] << 32 ) \ - | ( (uint64_t) (b)[(i) + 3] << 24 ) \ - | ( (uint64_t) (b)[(i) + 2] << 16 ) \ - | ( (uint64_t) (b)[(i) + 1] << 8 ) \ - | ( (uint64_t) (b)[(i) ] ); \ -} -#endif - -#ifndef PUT_UINT64_LE -#define PUT_UINT64_LE(n,b,i) \ -{ \ - (b)[(i) + 7] = (unsigned char) ( (n) >> 56 ); \ - (b)[(i) + 6] = (unsigned char) ( (n) >> 48 ); \ - (b)[(i) + 5] = (unsigned char) ( (n) >> 40 ); \ - (b)[(i) + 4] = (unsigned char) ( (n) >> 32 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) ] = (unsigned char) ( (n) ); \ -} -#endif - typedef unsigned char mbedtls_be128[16]; /* @@ -1165,15 +1082,12 @@ static void mbedtls_gf128mul_x_ble( unsigned char r[16], const unsigned char x[16] ) { uint64_t a, b, ra, rb; - - GET_UINT64_LE( a, x, 0 ); - GET_UINT64_LE( b, x, 8 ); - + a = READ64LE(x + 0); + b = READ64LE(x + 8); ra = ( a << 1 ) ^ 0x0087 >> ( 8 - ( ( b >> 63 ) << 3 ) ); rb = ( a >> 63 ) | ( b << 1 ); - - PUT_UINT64_LE( ra, r, 0 ); - PUT_UINT64_LE( rb, r, 8 ); + WRITE64LE(r + 0, ra ); + WRITE64LE(r + 8, rb ); } /* @@ -1840,30 +1754,15 @@ int mbedtls_aes_self_test( int verbose ) if( mode == MBEDTLS_AES_DECRYPT ) { - ret = mbedtls_aes_setkey_dec( &ctx, key, keybits ); + mbedtls_aes_setkey_dec( &ctx, key, keybits ); aes_tests = aes_test_ecb_dec[u]; } else { - ret = mbedtls_aes_setkey_enc( &ctx, key, keybits ); + mbedtls_aes_setkey_enc( &ctx, key, keybits ); aes_tests = aes_test_ecb_enc[u]; } - /* - * AES-192 is an optional feature that may be unavailable when - * there is an alternative underlying implementation i.e. when - * MBEDTLS_AES_ALT is defined. - */ - if( ret == MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { - mbedtls_printf( "skipped\n" ); - continue; - } - else if( ret != 0 ) - { - goto exit; - } - for( j = 0; j < 10000; j++ ) { ret = mbedtls_aes_crypt_ecb( &ctx, mode, buf, buf ); @@ -1918,12 +1817,7 @@ int mbedtls_aes_self_test( int verbose ) * there is an alternative underlying implementation i.e. when * MBEDTLS_AES_ALT is defined. */ - if( ret == MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { - mbedtls_printf( "skipped\n" ); - continue; - } - else if( ret != 0 ) + if( ret != 0 ) { goto exit; } @@ -1983,12 +1877,7 @@ int mbedtls_aes_self_test( int verbose ) * there is an alternative underlying implementation i.e. when * MBEDTLS_AES_ALT is defined. */ - if( ret == MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { - mbedtls_printf( "skipped\n" ); - continue; - } - else if( ret != 0 ) + if( ret != 0 ) { goto exit; } @@ -2046,12 +1935,7 @@ int mbedtls_aes_self_test( int verbose ) * there is an alternative underlying implementation i.e. when * MBEDTLS_AES_ALT is defined. */ - if( ret == MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { - mbedtls_printf( "skipped\n" ); - continue; - } - else if( ret != 0 ) + if( ret != 0 ) { goto exit; } diff --git a/third_party/mbedtls/aes.h b/third_party/mbedtls/aes.h index 80466bee6..4c9a00e3c 100644 --- a/third_party/mbedtls/aes.h +++ b/third_party/mbedtls/aes.h @@ -1,53 +1,8 @@ -/* clang-format off */ - -/** - * \file aes.h - * - * \brief This file contains AES definitions and functions. - * - * The Advanced Encryption Standard (AES) specifies a FIPS-approved - * cryptographic algorithm that can be used to protect electronic - * data. - * - * The AES algorithm is a symmetric block cipher that can - * encrypt and decrypt information. For more information, see - * FIPS Publication 197: Advanced Encryption Standard and - * ISO/IEC 18033-2:2006: Information technology -- Security - * techniques -- Encryption algorithms -- Part 2: Asymmetric - * ciphers. - * - * The AES-XTS block mode is standardized by NIST SP 800-38E - * - * and described in detail by IEEE P1619 - * . - */ - -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MBEDTLS_AES_H -#define MBEDTLS_AES_H - -#if !defined(MBEDTLS_CONFIG_FILE) +#ifndef MBEDTLS_AES_H_ +#define MBEDTLS_AES_H_ #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - +COSMOPOLITAN_C_START_ +/* clang-format off */ /* padlock.c and aesni.c rely on these values! */ #define MBEDTLS_AES_ENCRYPT 1 /**< AES encryption. */ @@ -66,19 +21,6 @@ /* MBEDTLS_ERR_AES_HW_ACCEL_FAILED is deprecated and should not be used. */ #define MBEDTLS_ERR_AES_HW_ACCEL_FAILED -0x0025 /**< AES hardware accelerator failed. */ -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(MBEDTLS_AES_ALT) -// Regular implementation -// - /** * \brief The AES context-type definition. */ @@ -110,10 +52,6 @@ typedef struct mbedtls_aes_xts_context } mbedtls_aes_xts_context; #endif /* MBEDTLS_CIPHER_MODE_XTS */ -#else /* MBEDTLS_AES_ALT */ -/* #include "third_party/mbedtls/aes_alt.h" */ -#endif /* MBEDTLS_AES_ALT */ - /** * \brief This function initializes the specified AES context. * @@ -617,45 +555,6 @@ int mbedtls_internal_aes_decrypt( mbedtls_aes_context *ctx, const unsigned char input[16], unsigned char output[16] ); -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief Deprecated internal AES block encryption function - * without return value. - * - * \deprecated Superseded by mbedtls_internal_aes_encrypt() - * - * \param ctx The AES context to use for encryption. - * \param input Plaintext block. - * \param output Output (ciphertext) block. - */ -MBEDTLS_DEPRECATED void mbedtls_aes_encrypt( mbedtls_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ); - -/** - * \brief Deprecated internal AES block decryption function - * without return value. - * - * \deprecated Superseded by mbedtls_internal_aes_decrypt() - * - * \param ctx The AES context to use for decryption. - * \param input Ciphertext block. - * \param output Output (plaintext) block. - */ -MBEDTLS_DEPRECATED void mbedtls_aes_decrypt( mbedtls_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - - -#if defined(MBEDTLS_SELF_TEST) /** * \brief Checkup routine. * @@ -664,10 +563,5 @@ MBEDTLS_DEPRECATED void mbedtls_aes_decrypt( mbedtls_aes_context *ctx, */ int mbedtls_aes_self_test( int verbose ); -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* aes.h */ +COSMOPOLITAN_C_END_ +#endif /* MBEDTLS_AES_H_ */ diff --git a/third_party/mbedtls/aesni.c b/third_party/mbedtls/aesni.c index 9f34b5fca..19ac5f399 100644 --- a/third_party/mbedtls/aesni.c +++ b/third_party/mbedtls/aesni.c @@ -1,10 +1,14 @@ -/* clang-format off */ +#include "libc/str/str.h" +#include "third_party/mbedtls/aesni.h" +#include "third_party/mbedtls/common.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * AES-NI support functions * @@ -29,24 +33,7 @@ asm(".include \"libc/disclaimer.inc\""); * [CLMUL-WP] http://software.intel.com/en-us/articles/intel-carry-less-multiplication-instruction-and-its-usage-for-computing-the-gcm-mode/ */ -#include "libc/str/str.h" -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_AESNI_C) - -#if defined(__has_feature) -#if __has_feature(memory_sanitizer) -#warning "MBEDTLS_AESNI_C is known to cause spurious error reports with some memory sanitizers as they do not understand the assembly code." -#endif -#endif - -#include "third_party/mbedtls/aesni.h" - - -#ifndef asm -#define asm __asm -#endif - #if defined(MBEDTLS_HAVE_X86_64) /* @@ -79,9 +66,9 @@ asm(".include \"libc/disclaimer.inc\""); * AES-NI AES-ECB block en(de)cryption */ int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) + int mode, + const unsigned char input[16], + unsigned char output[16] ) { asm( "movdqu (%3), %%xmm0 \n\t" // load input "movdqu (%1), %%xmm1 \n\t" // load round key 0 @@ -125,8 +112,8 @@ int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx, * Based on [CLMUL-WP] algorithms 1 (with equation 27) and 5. */ void mbedtls_aesni_gcm_mult( unsigned char c[16], - const unsigned char a[16], - const unsigned char b[16] ) + const unsigned char a[16], + const unsigned char b[16] ) { unsigned char aa[16], bb[16], cc[16]; size_t i; @@ -236,7 +223,7 @@ void mbedtls_aesni_gcm_mult( unsigned char c[16], * Compute decryption round keys from encryption round keys */ void mbedtls_aesni_inverse_key( unsigned char *invkey, - const unsigned char *fwdkey, int nr ) + const unsigned char *fwdkey, int nr ) { unsigned char *ik = invkey; const unsigned char *fk = fwdkey + 16 * nr; @@ -431,8 +418,8 @@ static void aesni_setkey_enc_256( unsigned char *rk, * Key expansion, wrapper */ int mbedtls_aesni_setkey_enc( unsigned char *rk, - const unsigned char *key, - size_t bits ) + const unsigned char *key, + size_t bits ) { switch( bits ) { @@ -446,5 +433,4 @@ int mbedtls_aesni_setkey_enc( unsigned char *rk, } #endif /* MBEDTLS_HAVE_X86_64 */ - #endif /* MBEDTLS_AESNI_C */ diff --git a/third_party/mbedtls/aesni.h b/third_party/mbedtls/aesni.h index 01ab9c46b..e7bc4f69c 100644 --- a/third_party/mbedtls/aesni.h +++ b/third_party/mbedtls/aesni.h @@ -1,51 +1,12 @@ -/* clang-format off */ - -/** - * \file aesni.h - * - * \brief AES-NI for hardware AES acceleration on some Intel processors - * - * \warning These functions are only for internal use by other library - * functions; you must not call them directly. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_AESNI_H #define MBEDTLS_AESNI_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/aes.h" +#include "third_party/mbedtls/config.h" +/* clang-format off */ #define MBEDTLS_AESNI_AES 0x02000000u #define MBEDTLS_AESNI_CLMUL 0x00000002u -#if defined(MBEDTLS_HAVE_ASM) && defined(__GNUC__) && \ - ( defined(__amd64__) || defined(__x86_64__) ) && \ - ! defined(MBEDTLS_HAVE_X86_64) -#define MBEDTLS_HAVE_X86_64 -#endif - -#if defined(MBEDTLS_HAVE_X86_64) - #ifdef __cplusplus extern "C" { #endif @@ -132,7 +93,4 @@ int mbedtls_aesni_setkey_enc( unsigned char *rk, #ifdef __cplusplus } #endif - -#endif /* MBEDTLS_HAVE_X86_64 */ - #endif /* MBEDTLS_AESNI_H */ diff --git a/third_party/mbedtls/arc4.c b/third_party/mbedtls/arc4.c deleted file mode 100644 index 02b8623a3..000000000 --- a/third_party/mbedtls/arc4.c +++ /dev/null @@ -1,201 +0,0 @@ -/* clang-format off */ - -asm(".ident\t\"\\n\\n\ -Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); -asm(".include \"libc/disclaimer.inc\""); - -/* - * An implementation of the ARCFOUR algorithm - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * The ARCFOUR algorithm was publicly disclosed on 94/09. - * - * http://groups.google.com/group/sci.crypt/msg/10a300c9d21afca0 - */ - -#include "libc/str/str.h" -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_ARC4_C) - -#include "third_party/mbedtls/arc4.h" -#include "third_party/mbedtls/platform_util.h" - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - -#if !defined(MBEDTLS_ARC4_ALT) - -void mbedtls_arc4_init( mbedtls_arc4_context *ctx ) -{ - memset( ctx, 0, sizeof( mbedtls_arc4_context ) ); -} - -void mbedtls_arc4_free( mbedtls_arc4_context *ctx ) -{ - if( ctx == NULL ) - return; - - mbedtls_platform_zeroize( ctx, sizeof( mbedtls_arc4_context ) ); -} - -/* - * ARC4 key schedule - */ -void mbedtls_arc4_setup( mbedtls_arc4_context *ctx, const unsigned char *key, - unsigned int keylen ) -{ - int i, j, a; - unsigned int k; - unsigned char *m; - - ctx->x = 0; - ctx->y = 0; - m = ctx->m; - - for( i = 0; i < 256; i++ ) - m[i] = (unsigned char) i; - - j = k = 0; - - for( i = 0; i < 256; i++, k++ ) - { - if( k >= keylen ) k = 0; - - a = m[i]; - j = ( j + a + key[k] ) & 0xFF; - m[i] = m[j]; - m[j] = (unsigned char) a; - } -} - -/* - * ARC4 cipher function - */ -int mbedtls_arc4_crypt( mbedtls_arc4_context *ctx, size_t length, const unsigned char *input, - unsigned char *output ) -{ - int x, y, a, b; - size_t i; - unsigned char *m; - - x = ctx->x; - y = ctx->y; - m = ctx->m; - - for( i = 0; i < length; i++ ) - { - x = ( x + 1 ) & 0xFF; a = m[x]; - y = ( y + a ) & 0xFF; b = m[y]; - - m[x] = (unsigned char) b; - m[y] = (unsigned char) a; - - output[i] = (unsigned char) - ( input[i] ^ m[(unsigned char)( a + b )] ); - } - - ctx->x = x; - ctx->y = y; - - return( 0 ); -} - -#endif /* !MBEDTLS_ARC4_ALT */ - -#if defined(MBEDTLS_SELF_TEST) -/* - * ARC4 tests vectors as posted by Eric Rescorla in sep. 1994: - * - * http://groups.google.com/group/comp.security.misc/msg/10a300c9d21afca0 - */ -static const unsigned char arc4_test_key[3][8] = -{ - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}; - -static const unsigned char arc4_test_pt[3][8] = -{ - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}; - -static const unsigned char arc4_test_ct[3][8] = -{ - { 0x75, 0xB7, 0x87, 0x80, 0x99, 0xE0, 0xC5, 0x96 }, - { 0x74, 0x94, 0xC2, 0xE7, 0x10, 0x4B, 0x08, 0x79 }, - { 0xDE, 0x18, 0x89, 0x41, 0xA3, 0x37, 0x5D, 0x3A } -}; - -/* - * Checkup routine - */ -int mbedtls_arc4_self_test( int verbose ) -{ - int i, ret = 0; - unsigned char ibuf[8]; - unsigned char obuf[8]; - mbedtls_arc4_context ctx; - - mbedtls_arc4_init( &ctx ); - - for( i = 0; i < 3; i++ ) - { - if( verbose != 0 ) - mbedtls_printf( " ARC4 test #%d: ", i + 1 ); - - memcpy( ibuf, arc4_test_pt[i], 8 ); - - mbedtls_arc4_setup( &ctx, arc4_test_key[i], 8 ); - mbedtls_arc4_crypt( &ctx, 8, ibuf, obuf ); - - if( memcmp( obuf, arc4_test_ct[i], 8 ) != 0 ) - { - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - } - - if( verbose != 0 ) - mbedtls_printf( "\n" ); - -exit: - mbedtls_arc4_free( &ctx ); - - return( ret ); -} - -#endif /* MBEDTLS_SELF_TEST */ - -#endif /* MBEDTLS_ARC4_C */ diff --git a/third_party/mbedtls/arc4.h b/third_party/mbedtls/arc4.h deleted file mode 100644 index 494444314..000000000 --- a/third_party/mbedtls/arc4.h +++ /dev/null @@ -1,145 +0,0 @@ -/* clang-format off */ - -/** - * \file arc4.h - * - * \brief The ARCFOUR stream cipher - * - * \warning ARC4 is considered a weak cipher and its use constitutes a - * security risk. We recommend considering stronger ciphers instead. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#ifndef MBEDTLS_ARC4_H -#define MBEDTLS_ARC4_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -/* MBEDTLS_ERR_ARC4_HW_ACCEL_FAILED is deprecated and should not be used. */ -#define MBEDTLS_ERR_ARC4_HW_ACCEL_FAILED -0x0019 /**< ARC4 hardware accelerator failed. */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(MBEDTLS_ARC4_ALT) -// Regular implementation -// - -/** - * \brief ARC4 context structure - * - * \warning ARC4 is considered a weak cipher and its use constitutes a - * security risk. We recommend considering stronger ciphers instead. - * - */ -typedef struct mbedtls_arc4_context -{ - int x; /*!< permutation index */ - int y; /*!< permutation index */ - unsigned char m[256]; /*!< permutation table */ -} -mbedtls_arc4_context; - -#else /* MBEDTLS_ARC4_ALT */ -/* #include "third_party/mbedtls/arc4_alt.h" */ -#endif /* MBEDTLS_ARC4_ALT */ - -/** - * \brief Initialize ARC4 context - * - * \param ctx ARC4 context to be initialized - * - * \warning ARC4 is considered a weak cipher and its use constitutes a - * security risk. We recommend considering stronger ciphers - * instead. - * - */ -void mbedtls_arc4_init( mbedtls_arc4_context *ctx ); - -/** - * \brief Clear ARC4 context - * - * \param ctx ARC4 context to be cleared - * - * \warning ARC4 is considered a weak cipher and its use constitutes a - * security risk. We recommend considering stronger ciphers - * instead. - * - */ -void mbedtls_arc4_free( mbedtls_arc4_context *ctx ); - -/** - * \brief ARC4 key schedule - * - * \param ctx ARC4 context to be setup - * \param key the secret key - * \param keylen length of the key, in bytes - * - * \warning ARC4 is considered a weak cipher and its use constitutes a - * security risk. We recommend considering stronger ciphers - * instead. - * - */ -void mbedtls_arc4_setup( mbedtls_arc4_context *ctx, const unsigned char *key, - unsigned int keylen ); - -/** - * \brief ARC4 cipher function - * - * \param ctx ARC4 context - * \param length length of the input data - * \param input buffer holding the input data - * \param output buffer for the output data - * - * \return 0 if successful - * - * \warning ARC4 is considered a weak cipher and its use constitutes a - * security risk. We recommend considering stronger ciphers - * instead. - * - */ -int mbedtls_arc4_crypt( mbedtls_arc4_context *ctx, size_t length, const unsigned char *input, - unsigned char *output ); - -#if defined(MBEDTLS_SELF_TEST) - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - * - * \warning ARC4 is considered a weak cipher and its use constitutes a - * security risk. We recommend considering stronger ciphers - * instead. - * - */ -int mbedtls_arc4_self_test( int verbose ); - -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* arc4.h */ diff --git a/third_party/mbedtls/aria.c b/third_party/mbedtls/aria.c deleted file mode 100644 index d480cd94e..000000000 --- a/third_party/mbedtls/aria.c +++ /dev/null @@ -1,1078 +0,0 @@ -/* clang-format off */ - -asm(".ident\t\"\\n\\n\ -Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); -asm(".include \"libc/disclaimer.inc\""); - -/* - * ARIA implementation - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * This implementation is based on the following standards: - * [1] http://210.104.33.10/ARIA/doc/ARIA-specification-e.pdf - * [2] https://tools.ietf.org/html/rfc5794 - */ - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_ARIA_C) - -#include "third_party/mbedtls/aria.h" - - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - -#if !defined(MBEDTLS_ARIA_ALT) - -#include "third_party/mbedtls/platform_util.h" - -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif - -/* Parameter validation macros */ -#define ARIA_VALIDATE_RET( cond ) \ - MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_ARIA_BAD_INPUT_DATA ) -#define ARIA_VALIDATE( cond ) \ - MBEDTLS_INTERNAL_VALIDATE( cond ) - -/* - * 32-bit integer manipulation macros (little endian) - */ -#ifndef GET_UINT32_LE -#define GET_UINT32_LE( n, b, i ) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] ) \ - | ( (uint32_t) (b)[(i) + 1] << 8 ) \ - | ( (uint32_t) (b)[(i) + 2] << 16 ) \ - | ( (uint32_t) (b)[(i) + 3] << 24 ); \ -} -#endif - -#ifndef PUT_UINT32_LE -#define PUT_UINT32_LE( n, b, i ) \ -{ \ - (b)[(i) ] = (unsigned char) ( ( (n) ) & 0xFF ); \ - (b)[(i) + 1] = (unsigned char) ( ( (n) >> 8 ) & 0xFF ); \ - (b)[(i) + 2] = (unsigned char) ( ( (n) >> 16 ) & 0xFF ); \ - (b)[(i) + 3] = (unsigned char) ( ( (n) >> 24 ) & 0xFF ); \ -} -#endif - -/* - * modify byte order: ( A B C D ) -> ( B A D C ), i.e. swap pairs of bytes - * - * This is submatrix P1 in [1] Appendix B.1 - * - * Common compilers fail to translate this to minimal number of instructions, - * so let's provide asm versions for common platforms with C fallback. - */ -#if defined(MBEDTLS_HAVE_ASM) -#if defined(__arm__) /* rev16 available from v6 up */ -/* armcc5 --gnu defines __GNUC__ but doesn't support GNU's extended asm */ -#if defined(__GNUC__) && \ - ( !defined(__ARMCC_VERSION) || __ARMCC_VERSION >= 6000000 ) && \ - __ARM_ARCH >= 6 -static inline uint32_t aria_p1( uint32_t x ) -{ - uint32_t r; - __asm( "rev16 %0, %1" : "=l" (r) : "l" (x) ); - return( r ); -} -#define ARIA_P1 aria_p1 -#elif defined(__ARMCC_VERSION) && __ARMCC_VERSION < 6000000 && \ - ( __TARGET_ARCH_ARM >= 6 || __TARGET_ARCH_THUMB >= 3 ) -static inline uint32_t aria_p1( uint32_t x ) -{ - uint32_t r; - __asm( "rev16 r, x" ); - return( r ); -} -#define ARIA_P1 aria_p1 -#endif -#endif /* arm */ -#if defined(__GNUC__) && \ - defined(__i386__) || defined(__amd64__) || defined( __x86_64__) -/* I couldn't find an Intel equivalent of rev16, so two instructions */ -#define ARIA_P1(x) ARIA_P2( ARIA_P3( x ) ) -#endif /* x86 gnuc */ -#endif /* MBEDTLS_HAVE_ASM && GNUC */ -#if !defined(ARIA_P1) -#define ARIA_P1(x) ((((x) >> 8) & 0x00FF00FF) ^ (((x) & 0x00FF00FF) << 8)) -#endif - -/* - * modify byte order: ( A B C D ) -> ( C D A B ), i.e. rotate by 16 bits - * - * This is submatrix P2 in [1] Appendix B.1 - * - * Common compilers will translate this to a single instruction. - */ -#define ARIA_P2(x) (((x) >> 16) ^ ((x) << 16)) - -/* - * modify byte order: ( A B C D ) -> ( D C B A ), i.e. change endianness - * - * This is submatrix P3 in [1] Appendix B.1 - * - * Some compilers fail to translate this to a single instruction, - * so let's provide asm versions for common platforms with C fallback. - */ -#if defined(MBEDTLS_HAVE_ASM) -#if defined(__arm__) /* rev available from v6 up */ -/* armcc5 --gnu defines __GNUC__ but doesn't support GNU's extended asm */ -#if defined(__GNUC__) && \ - ( !defined(__ARMCC_VERSION) || __ARMCC_VERSION >= 6000000 ) && \ - __ARM_ARCH >= 6 -static inline uint32_t aria_p3( uint32_t x ) -{ - uint32_t r; - __asm( "rev %0, %1" : "=l" (r) : "l" (x) ); - return( r ); -} -#define ARIA_P3 aria_p3 -#elif defined(__ARMCC_VERSION) && __ARMCC_VERSION < 6000000 && \ - ( __TARGET_ARCH_ARM >= 6 || __TARGET_ARCH_THUMB >= 3 ) -static inline uint32_t aria_p3( uint32_t x ) -{ - uint32_t r; - __asm( "rev r, x" ); - return( r ); -} -#define ARIA_P3 aria_p3 -#endif -#endif /* arm */ -#if defined(__GNUC__) && \ - defined(__i386__) || defined(__amd64__) || defined( __x86_64__) -static inline uint32_t aria_p3( uint32_t x ) -{ - __asm( "bswap %0" : "=r" (x) : "0" (x) ); - return( x ); -} -#define ARIA_P3 aria_p3 -#endif /* x86 gnuc */ -#endif /* MBEDTLS_HAVE_ASM && GNUC */ -#if !defined(ARIA_P3) -#define ARIA_P3(x) ARIA_P2( ARIA_P1 ( x ) ) -#endif - -/* - * ARIA Affine Transform - * (a, b, c, d) = state in/out - * - * If we denote the first byte of input by 0, ..., the last byte by f, - * then inputs are: a = 0123, b = 4567, c = 89ab, d = cdef. - * - * Reading [1] 2.4 or [2] 2.4.3 in columns and performing simple - * rearrangements on adjacent pairs, output is: - * - * a = 3210 + 4545 + 6767 + 88aa + 99bb + dccd + effe - * = 3210 + 4567 + 6745 + 89ab + 98ba + dcfe + efcd - * b = 0101 + 2323 + 5476 + 8998 + baab + eecc + ffdd - * = 0123 + 2301 + 5476 + 89ab + ba98 + efcd + fedc - * c = 0022 + 1133 + 4554 + 7667 + ab89 + dcdc + fefe - * = 0123 + 1032 + 4567 + 7654 + ab89 + dcfe + fedc - * d = 1001 + 2332 + 6644 + 7755 + 9898 + baba + cdef - * = 1032 + 2301 + 6745 + 7654 + 98ba + ba98 + cdef - * - * Note: another presentation of the A transform can be found as the first - * half of App. B.1 in [1] in terms of 4-byte operators P1, P2, P3 and P4. - * The implementation below uses only P1 and P2 as they are sufficient. - */ -static inline void aria_a( uint32_t *a, uint32_t *b, - uint32_t *c, uint32_t *d ) -{ - uint32_t ta, tb, tc; - ta = *b; // 4567 - *b = *a; // 0123 - *a = ARIA_P2( ta ); // 6745 - tb = ARIA_P2( *d ); // efcd - *d = ARIA_P1( *c ); // 98ba - *c = ARIA_P1( tb ); // fedc - ta ^= *d; // 4567+98ba - tc = ARIA_P2( *b ); // 2301 - ta = ARIA_P1( ta ) ^ tc ^ *c; // 2301+5476+89ab+fedc - tb ^= ARIA_P2( *d ); // ba98+efcd - tc ^= ARIA_P1( *a ); // 2301+7654 - *b ^= ta ^ tb; // 0123+2301+5476+89ab+ba98+efcd+fedc OUT - tb = ARIA_P2( tb ) ^ ta; // 2301+5476+89ab+98ba+cdef+fedc - *a ^= ARIA_P1( tb ); // 3210+4567+6745+89ab+98ba+dcfe+efcd OUT - ta = ARIA_P2( ta ); // 0123+7654+ab89+dcfe - *d ^= ARIA_P1( ta ) ^ tc; // 1032+2301+6745+7654+98ba+ba98+cdef OUT - tc = ARIA_P2( tc ); // 0123+5476 - *c ^= ARIA_P1( tc ) ^ ta; // 0123+1032+4567+7654+ab89+dcfe+fedc OUT -} - -/* - * ARIA Substitution Layer SL1 / SL2 - * (a, b, c, d) = state in/out - * (sa, sb, sc, sd) = 256 8-bit S-Boxes (see below) - * - * By passing sb1, sb2, is1, is2 as S-Boxes you get SL1 - * By passing is1, is2, sb1, sb2 as S-Boxes you get SL2 - */ -static inline void aria_sl( uint32_t *a, uint32_t *b, - uint32_t *c, uint32_t *d, - const uint8_t sa[256], const uint8_t sb[256], - const uint8_t sc[256], const uint8_t sd[256] ) -{ - *a = ( (uint32_t) sa[ *a & 0xFF] ) ^ - (((uint32_t) sb[(*a >> 8) & 0xFF]) << 8) ^ - (((uint32_t) sc[(*a >> 16) & 0xFF]) << 16) ^ - (((uint32_t) sd[ *a >> 24 ]) << 24); - *b = ( (uint32_t) sa[ *b & 0xFF] ) ^ - (((uint32_t) sb[(*b >> 8) & 0xFF]) << 8) ^ - (((uint32_t) sc[(*b >> 16) & 0xFF]) << 16) ^ - (((uint32_t) sd[ *b >> 24 ]) << 24); - *c = ( (uint32_t) sa[ *c & 0xFF] ) ^ - (((uint32_t) sb[(*c >> 8) & 0xFF]) << 8) ^ - (((uint32_t) sc[(*c >> 16) & 0xFF]) << 16) ^ - (((uint32_t) sd[ *c >> 24 ]) << 24); - *d = ( (uint32_t) sa[ *d & 0xFF] ) ^ - (((uint32_t) sb[(*d >> 8) & 0xFF]) << 8) ^ - (((uint32_t) sc[(*d >> 16) & 0xFF]) << 16) ^ - (((uint32_t) sd[ *d >> 24 ]) << 24); -} - -/* - * S-Boxes - */ -static const uint8_t aria_sb1[256] = -{ - 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, - 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, - 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 0xB7, 0xFD, 0x93, 0x26, - 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, - 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, - 0xEB, 0x27, 0xB2, 0x75, 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, - 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, 0x53, 0xD1, 0x00, 0xED, - 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, - 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, - 0x50, 0x3C, 0x9F, 0xA8, 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, - 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 0xCD, 0x0C, 0x13, 0xEC, - 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, - 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, - 0xDE, 0x5E, 0x0B, 0xDB, 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, - 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, 0xE7, 0xC8, 0x37, 0x6D, - 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, - 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, - 0x4B, 0xBD, 0x8B, 0x8A, 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, - 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, 0xE1, 0xF8, 0x98, 0x11, - 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, - 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, - 0xB0, 0x54, 0xBB, 0x16 -}; - -static const uint8_t aria_sb2[256] = -{ - 0xE2, 0x4E, 0x54, 0xFC, 0x94, 0xC2, 0x4A, 0xCC, 0x62, 0x0D, 0x6A, 0x46, - 0x3C, 0x4D, 0x8B, 0xD1, 0x5E, 0xFA, 0x64, 0xCB, 0xB4, 0x97, 0xBE, 0x2B, - 0xBC, 0x77, 0x2E, 0x03, 0xD3, 0x19, 0x59, 0xC1, 0x1D, 0x06, 0x41, 0x6B, - 0x55, 0xF0, 0x99, 0x69, 0xEA, 0x9C, 0x18, 0xAE, 0x63, 0xDF, 0xE7, 0xBB, - 0x00, 0x73, 0x66, 0xFB, 0x96, 0x4C, 0x85, 0xE4, 0x3A, 0x09, 0x45, 0xAA, - 0x0F, 0xEE, 0x10, 0xEB, 0x2D, 0x7F, 0xF4, 0x29, 0xAC, 0xCF, 0xAD, 0x91, - 0x8D, 0x78, 0xC8, 0x95, 0xF9, 0x2F, 0xCE, 0xCD, 0x08, 0x7A, 0x88, 0x38, - 0x5C, 0x83, 0x2A, 0x28, 0x47, 0xDB, 0xB8, 0xC7, 0x93, 0xA4, 0x12, 0x53, - 0xFF, 0x87, 0x0E, 0x31, 0x36, 0x21, 0x58, 0x48, 0x01, 0x8E, 0x37, 0x74, - 0x32, 0xCA, 0xE9, 0xB1, 0xB7, 0xAB, 0x0C, 0xD7, 0xC4, 0x56, 0x42, 0x26, - 0x07, 0x98, 0x60, 0xD9, 0xB6, 0xB9, 0x11, 0x40, 0xEC, 0x20, 0x8C, 0xBD, - 0xA0, 0xC9, 0x84, 0x04, 0x49, 0x23, 0xF1, 0x4F, 0x50, 0x1F, 0x13, 0xDC, - 0xD8, 0xC0, 0x9E, 0x57, 0xE3, 0xC3, 0x7B, 0x65, 0x3B, 0x02, 0x8F, 0x3E, - 0xE8, 0x25, 0x92, 0xE5, 0x15, 0xDD, 0xFD, 0x17, 0xA9, 0xBF, 0xD4, 0x9A, - 0x7E, 0xC5, 0x39, 0x67, 0xFE, 0x76, 0x9D, 0x43, 0xA7, 0xE1, 0xD0, 0xF5, - 0x68, 0xF2, 0x1B, 0x34, 0x70, 0x05, 0xA3, 0x8A, 0xD5, 0x79, 0x86, 0xA8, - 0x30, 0xC6, 0x51, 0x4B, 0x1E, 0xA6, 0x27, 0xF6, 0x35, 0xD2, 0x6E, 0x24, - 0x16, 0x82, 0x5F, 0xDA, 0xE6, 0x75, 0xA2, 0xEF, 0x2C, 0xB2, 0x1C, 0x9F, - 0x5D, 0x6F, 0x80, 0x0A, 0x72, 0x44, 0x9B, 0x6C, 0x90, 0x0B, 0x5B, 0x33, - 0x7D, 0x5A, 0x52, 0xF3, 0x61, 0xA1, 0xF7, 0xB0, 0xD6, 0x3F, 0x7C, 0x6D, - 0xED, 0x14, 0xE0, 0xA5, 0x3D, 0x22, 0xB3, 0xF8, 0x89, 0xDE, 0x71, 0x1A, - 0xAF, 0xBA, 0xB5, 0x81 -}; - -static const uint8_t aria_is1[256] = -{ - 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, - 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, - 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, 0x54, 0x7B, 0x94, 0x32, - 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, - 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, - 0x6D, 0x8B, 0xD1, 0x25, 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, - 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, 0x6C, 0x70, 0x48, 0x50, - 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, - 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, - 0xB8, 0xB3, 0x45, 0x06, 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, - 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, 0x3A, 0x91, 0x11, 0x41, - 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, - 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, - 0x1C, 0x75, 0xDF, 0x6E, 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, - 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, 0xFC, 0x56, 0x3E, 0x4B, - 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, - 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, - 0x27, 0x80, 0xEC, 0x5F, 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, - 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, 0xA0, 0xE0, 0x3B, 0x4D, - 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, - 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, - 0x55, 0x21, 0x0C, 0x7D -}; - -static const uint8_t aria_is2[256] = -{ - 0x30, 0x68, 0x99, 0x1B, 0x87, 0xB9, 0x21, 0x78, 0x50, 0x39, 0xDB, 0xE1, - 0x72, 0x09, 0x62, 0x3C, 0x3E, 0x7E, 0x5E, 0x8E, 0xF1, 0xA0, 0xCC, 0xA3, - 0x2A, 0x1D, 0xFB, 0xB6, 0xD6, 0x20, 0xC4, 0x8D, 0x81, 0x65, 0xF5, 0x89, - 0xCB, 0x9D, 0x77, 0xC6, 0x57, 0x43, 0x56, 0x17, 0xD4, 0x40, 0x1A, 0x4D, - 0xC0, 0x63, 0x6C, 0xE3, 0xB7, 0xC8, 0x64, 0x6A, 0x53, 0xAA, 0x38, 0x98, - 0x0C, 0xF4, 0x9B, 0xED, 0x7F, 0x22, 0x76, 0xAF, 0xDD, 0x3A, 0x0B, 0x58, - 0x67, 0x88, 0x06, 0xC3, 0x35, 0x0D, 0x01, 0x8B, 0x8C, 0xC2, 0xE6, 0x5F, - 0x02, 0x24, 0x75, 0x93, 0x66, 0x1E, 0xE5, 0xE2, 0x54, 0xD8, 0x10, 0xCE, - 0x7A, 0xE8, 0x08, 0x2C, 0x12, 0x97, 0x32, 0xAB, 0xB4, 0x27, 0x0A, 0x23, - 0xDF, 0xEF, 0xCA, 0xD9, 0xB8, 0xFA, 0xDC, 0x31, 0x6B, 0xD1, 0xAD, 0x19, - 0x49, 0xBD, 0x51, 0x96, 0xEE, 0xE4, 0xA8, 0x41, 0xDA, 0xFF, 0xCD, 0x55, - 0x86, 0x36, 0xBE, 0x61, 0x52, 0xF8, 0xBB, 0x0E, 0x82, 0x48, 0x69, 0x9A, - 0xE0, 0x47, 0x9E, 0x5C, 0x04, 0x4B, 0x34, 0x15, 0x79, 0x26, 0xA7, 0xDE, - 0x29, 0xAE, 0x92, 0xD7, 0x84, 0xE9, 0xD2, 0xBA, 0x5D, 0xF3, 0xC5, 0xB0, - 0xBF, 0xA4, 0x3B, 0x71, 0x44, 0x46, 0x2B, 0xFC, 0xEB, 0x6F, 0xD5, 0xF6, - 0x14, 0xFE, 0x7C, 0x70, 0x5A, 0x7D, 0xFD, 0x2F, 0x18, 0x83, 0x16, 0xA5, - 0x91, 0x1F, 0x05, 0x95, 0x74, 0xA9, 0xC1, 0x5B, 0x4A, 0x85, 0x6D, 0x13, - 0x07, 0x4F, 0x4E, 0x45, 0xB2, 0x0F, 0xC9, 0x1C, 0xA6, 0xBC, 0xEC, 0x73, - 0x90, 0x7B, 0xCF, 0x59, 0x8F, 0xA1, 0xF9, 0x2D, 0xF2, 0xB1, 0x00, 0x94, - 0x37, 0x9F, 0xD0, 0x2E, 0x9C, 0x6E, 0x28, 0x3F, 0x80, 0xF0, 0x3D, 0xD3, - 0x25, 0x8A, 0xB5, 0xE7, 0x42, 0xB3, 0xC7, 0xEA, 0xF7, 0x4C, 0x11, 0x33, - 0x03, 0xA2, 0xAC, 0x60 -}; - -/* - * Helper for key schedule: r = FO( p, k ) ^ x - */ -static void aria_fo_xor( uint32_t r[4], const uint32_t p[4], - const uint32_t k[4], const uint32_t x[4] ) -{ - uint32_t a, b, c, d; - - a = p[0] ^ k[0]; - b = p[1] ^ k[1]; - c = p[2] ^ k[2]; - d = p[3] ^ k[3]; - - aria_sl( &a, &b, &c, &d, aria_sb1, aria_sb2, aria_is1, aria_is2 ); - aria_a( &a, &b, &c, &d ); - - r[0] = a ^ x[0]; - r[1] = b ^ x[1]; - r[2] = c ^ x[2]; - r[3] = d ^ x[3]; -} - -/* - * Helper for key schedule: r = FE( p, k ) ^ x - */ -static void aria_fe_xor( uint32_t r[4], const uint32_t p[4], - const uint32_t k[4], const uint32_t x[4] ) -{ - uint32_t a, b, c, d; - - a = p[0] ^ k[0]; - b = p[1] ^ k[1]; - c = p[2] ^ k[2]; - d = p[3] ^ k[3]; - - aria_sl( &a, &b, &c, &d, aria_is1, aria_is2, aria_sb1, aria_sb2 ); - aria_a( &a, &b, &c, &d ); - - r[0] = a ^ x[0]; - r[1] = b ^ x[1]; - r[2] = c ^ x[2]; - r[3] = d ^ x[3]; -} - -/* - * Big endian 128-bit rotation: r = a ^ (b <<< n), used only in key setup. - * - * We chose to store bytes into 32-bit words in little-endian format (see - * GET/PUT_UINT32_LE) so we need to reverse bytes here. - */ -static void aria_rot128( uint32_t r[4], const uint32_t a[4], - const uint32_t b[4], uint8_t n ) -{ - uint8_t i, j; - uint32_t t, u; - - const uint8_t n1 = n % 32; // bit offset - const uint8_t n2 = n1 ? 32 - n1 : 0; // reverse bit offset - - j = ( n / 32 ) % 4; // initial word offset - t = ARIA_P3( b[j] ); // big endian - for( i = 0; i < 4; i++ ) - { - j = ( j + 1 ) % 4; // get next word, big endian - u = ARIA_P3( b[j] ); - t <<= n1; // rotate - t |= u >> n2; - t = ARIA_P3( t ); // back to little endian - r[i] = a[i] ^ t; // store - t = u; // move to next word - } -} - -/* - * Set encryption key - */ -int mbedtls_aria_setkey_enc( mbedtls_aria_context *ctx, - const unsigned char *key, unsigned int keybits ) -{ - /* round constant masks */ - const uint32_t rc[3][4] = - { - { 0xB7C17C51, 0x940A2227, 0xE8AB13FE, 0xE06E9AFA }, - { 0xCC4AB16D, 0x20C8219E, 0xD5B128FF, 0xB0E25DEF }, - { 0x1D3792DB, 0x70E92621, 0x75972403, 0x0EC9E804 } - }; - - int i; - uint32_t w[4][4], *w2; - ARIA_VALIDATE_RET( ctx != NULL ); - ARIA_VALIDATE_RET( key != NULL ); - - if( keybits != 128 && keybits != 192 && keybits != 256 ) - return( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA ); - - /* Copy key to W0 (and potential remainder to W1) */ - GET_UINT32_LE( w[0][0], key, 0 ); - GET_UINT32_LE( w[0][1], key, 4 ); - GET_UINT32_LE( w[0][2], key, 8 ); - GET_UINT32_LE( w[0][3], key, 12 ); - - memset( w[1], 0, 16 ); - if( keybits >= 192 ) - { - GET_UINT32_LE( w[1][0], key, 16 ); // 192 bit key - GET_UINT32_LE( w[1][1], key, 20 ); - } - if( keybits == 256 ) - { - GET_UINT32_LE( w[1][2], key, 24 ); // 256 bit key - GET_UINT32_LE( w[1][3], key, 28 ); - } - - i = ( keybits - 128 ) >> 6; // index: 0, 1, 2 - ctx->nr = 12 + 2 * i; // no. rounds: 12, 14, 16 - - aria_fo_xor( w[1], w[0], rc[i], w[1] ); // W1 = FO(W0, CK1) ^ KR - i = i < 2 ? i + 1 : 0; - aria_fe_xor( w[2], w[1], rc[i], w[0] ); // W2 = FE(W1, CK2) ^ W0 - i = i < 2 ? i + 1 : 0; - aria_fo_xor( w[3], w[2], rc[i], w[1] ); // W3 = FO(W2, CK3) ^ W1 - - for( i = 0; i < 4; i++ ) // create round keys - { - w2 = w[(i + 1) & 3]; - aria_rot128( ctx->rk[i ], w[i], w2, 128 - 19 ); - aria_rot128( ctx->rk[i + 4], w[i], w2, 128 - 31 ); - aria_rot128( ctx->rk[i + 8], w[i], w2, 61 ); - aria_rot128( ctx->rk[i + 12], w[i], w2, 31 ); - } - aria_rot128( ctx->rk[16], w[0], w[1], 19 ); - - /* w holds enough info to reconstruct the round keys */ - mbedtls_platform_zeroize( w, sizeof( w ) ); - - return( 0 ); -} - -/* - * Set decryption key - */ -int mbedtls_aria_setkey_dec( mbedtls_aria_context *ctx, - const unsigned char *key, unsigned int keybits ) -{ - int i, j, k, ret; - ARIA_VALIDATE_RET( ctx != NULL ); - ARIA_VALIDATE_RET( key != NULL ); - - ret = mbedtls_aria_setkey_enc( ctx, key, keybits ); - if( ret != 0 ) - return( ret ); - - /* flip the order of round keys */ - for( i = 0, j = ctx->nr; i < j; i++, j-- ) - { - for( k = 0; k < 4; k++ ) - { - uint32_t t = ctx->rk[i][k]; - ctx->rk[i][k] = ctx->rk[j][k]; - ctx->rk[j][k] = t; - } - } - - /* apply affine transform to middle keys */ - for( i = 1; i < ctx->nr; i++ ) - { - aria_a( &ctx->rk[i][0], &ctx->rk[i][1], - &ctx->rk[i][2], &ctx->rk[i][3] ); - } - - return( 0 ); -} - -/* - * Encrypt a block - */ -int mbedtls_aria_crypt_ecb( mbedtls_aria_context *ctx, - const unsigned char input[MBEDTLS_ARIA_BLOCKSIZE], - unsigned char output[MBEDTLS_ARIA_BLOCKSIZE] ) -{ - int i; - - uint32_t a, b, c, d; - ARIA_VALIDATE_RET( ctx != NULL ); - ARIA_VALIDATE_RET( input != NULL ); - ARIA_VALIDATE_RET( output != NULL ); - - GET_UINT32_LE( a, input, 0 ); - GET_UINT32_LE( b, input, 4 ); - GET_UINT32_LE( c, input, 8 ); - GET_UINT32_LE( d, input, 12 ); - - i = 0; - while( 1 ) - { - a ^= ctx->rk[i][0]; - b ^= ctx->rk[i][1]; - c ^= ctx->rk[i][2]; - d ^= ctx->rk[i][3]; - i++; - - aria_sl( &a, &b, &c, &d, aria_sb1, aria_sb2, aria_is1, aria_is2 ); - aria_a( &a, &b, &c, &d ); - - a ^= ctx->rk[i][0]; - b ^= ctx->rk[i][1]; - c ^= ctx->rk[i][2]; - d ^= ctx->rk[i][3]; - i++; - - aria_sl( &a, &b, &c, &d, aria_is1, aria_is2, aria_sb1, aria_sb2 ); - if( i >= ctx->nr ) - break; - aria_a( &a, &b, &c, &d ); - } - - /* final key mixing */ - a ^= ctx->rk[i][0]; - b ^= ctx->rk[i][1]; - c ^= ctx->rk[i][2]; - d ^= ctx->rk[i][3]; - - PUT_UINT32_LE( a, output, 0 ); - PUT_UINT32_LE( b, output, 4 ); - PUT_UINT32_LE( c, output, 8 ); - PUT_UINT32_LE( d, output, 12 ); - - return( 0 ); -} - -/* Initialize context */ -void mbedtls_aria_init( mbedtls_aria_context *ctx ) -{ - ARIA_VALIDATE( ctx != NULL ); - memset( ctx, 0, sizeof( mbedtls_aria_context ) ); -} - -/* Clear context */ -void mbedtls_aria_free( mbedtls_aria_context *ctx ) -{ - if( ctx == NULL ) - return; - - mbedtls_platform_zeroize( ctx, sizeof( mbedtls_aria_context ) ); -} - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -/* - * ARIA-CBC buffer encryption/decryption - */ -int mbedtls_aria_crypt_cbc( mbedtls_aria_context *ctx, - int mode, - size_t length, - unsigned char iv[MBEDTLS_ARIA_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ) -{ - int i; - unsigned char temp[MBEDTLS_ARIA_BLOCKSIZE]; - - ARIA_VALIDATE_RET( ctx != NULL ); - ARIA_VALIDATE_RET( mode == MBEDTLS_ARIA_ENCRYPT || - mode == MBEDTLS_ARIA_DECRYPT ); - ARIA_VALIDATE_RET( length == 0 || input != NULL ); - ARIA_VALIDATE_RET( length == 0 || output != NULL ); - ARIA_VALIDATE_RET( iv != NULL ); - - if( length % MBEDTLS_ARIA_BLOCKSIZE ) - return( MBEDTLS_ERR_ARIA_INVALID_INPUT_LENGTH ); - - if( mode == MBEDTLS_ARIA_DECRYPT ) - { - while( length > 0 ) - { - memcpy( temp, input, MBEDTLS_ARIA_BLOCKSIZE ); - mbedtls_aria_crypt_ecb( ctx, input, output ); - - for( i = 0; i < MBEDTLS_ARIA_BLOCKSIZE; i++ ) - output[i] = (unsigned char)( output[i] ^ iv[i] ); - - memcpy( iv, temp, MBEDTLS_ARIA_BLOCKSIZE ); - - input += MBEDTLS_ARIA_BLOCKSIZE; - output += MBEDTLS_ARIA_BLOCKSIZE; - length -= MBEDTLS_ARIA_BLOCKSIZE; - } - } - else - { - while( length > 0 ) - { - for( i = 0; i < MBEDTLS_ARIA_BLOCKSIZE; i++ ) - output[i] = (unsigned char)( input[i] ^ iv[i] ); - - mbedtls_aria_crypt_ecb( ctx, output, output ); - memcpy( iv, output, MBEDTLS_ARIA_BLOCKSIZE ); - - input += MBEDTLS_ARIA_BLOCKSIZE; - output += MBEDTLS_ARIA_BLOCKSIZE; - length -= MBEDTLS_ARIA_BLOCKSIZE; - } - } - - return( 0 ); -} -#endif /* MBEDTLS_CIPHER_MODE_CBC */ - -#if defined(MBEDTLS_CIPHER_MODE_CFB) -/* - * ARIA-CFB128 buffer encryption/decryption - */ -int mbedtls_aria_crypt_cfb128( mbedtls_aria_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[MBEDTLS_ARIA_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ) -{ - unsigned char c; - size_t n; - - ARIA_VALIDATE_RET( ctx != NULL ); - ARIA_VALIDATE_RET( mode == MBEDTLS_ARIA_ENCRYPT || - mode == MBEDTLS_ARIA_DECRYPT ); - ARIA_VALIDATE_RET( length == 0 || input != NULL ); - ARIA_VALIDATE_RET( length == 0 || output != NULL ); - ARIA_VALIDATE_RET( iv != NULL ); - ARIA_VALIDATE_RET( iv_off != NULL ); - - n = *iv_off; - - /* An overly large value of n can lead to an unlimited - * buffer overflow. Therefore, guard against this - * outside of parameter validation. */ - if( n >= MBEDTLS_ARIA_BLOCKSIZE ) - return( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA ); - - if( mode == MBEDTLS_ARIA_DECRYPT ) - { - while( length-- ) - { - if( n == 0 ) - mbedtls_aria_crypt_ecb( ctx, iv, iv ); - - c = *input++; - *output++ = c ^ iv[n]; - iv[n] = c; - - n = ( n + 1 ) & 0x0F; - } - } - else - { - while( length-- ) - { - if( n == 0 ) - mbedtls_aria_crypt_ecb( ctx, iv, iv ); - - iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); - - n = ( n + 1 ) & 0x0F; - } - } - - *iv_off = n; - - return( 0 ); -} -#endif /* MBEDTLS_CIPHER_MODE_CFB */ - -#if defined(MBEDTLS_CIPHER_MODE_CTR) -/* - * ARIA-CTR buffer encryption/decryption - */ -int mbedtls_aria_crypt_ctr( mbedtls_aria_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[MBEDTLS_ARIA_BLOCKSIZE], - unsigned char stream_block[MBEDTLS_ARIA_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ) -{ - int c, i; - size_t n; - - ARIA_VALIDATE_RET( ctx != NULL ); - ARIA_VALIDATE_RET( length == 0 || input != NULL ); - ARIA_VALIDATE_RET( length == 0 || output != NULL ); - ARIA_VALIDATE_RET( nonce_counter != NULL ); - ARIA_VALIDATE_RET( stream_block != NULL ); - ARIA_VALIDATE_RET( nc_off != NULL ); - - n = *nc_off; - /* An overly large value of n can lead to an unlimited - * buffer overflow. Therefore, guard against this - * outside of parameter validation. */ - if( n >= MBEDTLS_ARIA_BLOCKSIZE ) - return( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA ); - - while( length-- ) - { - if( n == 0 ) { - mbedtls_aria_crypt_ecb( ctx, nonce_counter, - stream_block ); - - for( i = MBEDTLS_ARIA_BLOCKSIZE; i > 0; i-- ) - if( ++nonce_counter[i - 1] != 0 ) - break; - } - c = *input++; - *output++ = (unsigned char)( c ^ stream_block[n] ); - - n = ( n + 1 ) & 0x0F; - } - - *nc_off = n; - - return( 0 ); -} -#endif /* MBEDTLS_CIPHER_MODE_CTR */ -#endif /* !MBEDTLS_ARIA_ALT */ - -#if defined(MBEDTLS_SELF_TEST) - -/* - * Basic ARIA ECB test vectors from RFC 5794 - */ -static const uint8_t aria_test1_ecb_key[32] = // test key -{ - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // 128 bit - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, // 192 bit - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F // 256 bit -}; - -static const uint8_t aria_test1_ecb_pt[MBEDTLS_ARIA_BLOCKSIZE] = // plaintext -{ - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, // same for all - 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF // key sizes -}; - -static const uint8_t aria_test1_ecb_ct[3][MBEDTLS_ARIA_BLOCKSIZE] = // ciphertext -{ - { 0xD7, 0x18, 0xFB, 0xD6, 0xAB, 0x64, 0x4C, 0x73, // 128 bit - 0x9D, 0xA9, 0x5F, 0x3B, 0xE6, 0x45, 0x17, 0x78 }, - { 0x26, 0x44, 0x9C, 0x18, 0x05, 0xDB, 0xE7, 0xAA, // 192 bit - 0x25, 0xA4, 0x68, 0xCE, 0x26, 0x3A, 0x9E, 0x79 }, - { 0xF9, 0x2B, 0xD7, 0xC7, 0x9F, 0xB7, 0x2E, 0x2F, // 256 bit - 0x2B, 0x8F, 0x80, 0xC1, 0x97, 0x2D, 0x24, 0xFC } -}; - -/* - * Mode tests from "Test Vectors for ARIA" Version 1.0 - * http://210.104.33.10/ARIA/doc/ARIA-testvector-e.pdf - */ -#if (defined(MBEDTLS_CIPHER_MODE_CBC) || defined(MBEDTLS_CIPHER_MODE_CFB) || \ - defined(MBEDTLS_CIPHER_MODE_CTR)) -static const uint8_t aria_test2_key[32] = -{ - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, // 128 bit - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, // 192 bit - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff // 256 bit -}; - -static const uint8_t aria_test2_pt[48] = -{ - 0x11, 0x11, 0x11, 0x11, 0xaa, 0xaa, 0xaa, 0xaa, // same for all - 0x11, 0x11, 0x11, 0x11, 0xbb, 0xbb, 0xbb, 0xbb, - 0x11, 0x11, 0x11, 0x11, 0xcc, 0xcc, 0xcc, 0xcc, - 0x11, 0x11, 0x11, 0x11, 0xdd, 0xdd, 0xdd, 0xdd, - 0x22, 0x22, 0x22, 0x22, 0xaa, 0xaa, 0xaa, 0xaa, - 0x22, 0x22, 0x22, 0x22, 0xbb, 0xbb, 0xbb, 0xbb, -}; -#endif - -#if (defined(MBEDTLS_CIPHER_MODE_CBC) || defined(MBEDTLS_CIPHER_MODE_CFB)) -static const uint8_t aria_test2_iv[MBEDTLS_ARIA_BLOCKSIZE] = -{ - 0x0f, 0x1e, 0x2d, 0x3c, 0x4b, 0x5a, 0x69, 0x78, // same for CBC, CFB - 0x87, 0x96, 0xa5, 0xb4, 0xc3, 0xd2, 0xe1, 0xf0 // CTR has zero IV -}; -#endif - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -static const uint8_t aria_test2_cbc_ct[3][48] = // CBC ciphertext -{ - { 0x49, 0xd6, 0x18, 0x60, 0xb1, 0x49, 0x09, 0x10, // 128-bit key - 0x9c, 0xef, 0x0d, 0x22, 0xa9, 0x26, 0x81, 0x34, - 0xfa, 0xdf, 0x9f, 0xb2, 0x31, 0x51, 0xe9, 0x64, - 0x5f, 0xba, 0x75, 0x01, 0x8b, 0xdb, 0x15, 0x38, - 0xb5, 0x33, 0x34, 0x63, 0x4b, 0xbf, 0x7d, 0x4c, - 0xd4, 0xb5, 0x37, 0x70, 0x33, 0x06, 0x0c, 0x15 }, - { 0xaf, 0xe6, 0xcf, 0x23, 0x97, 0x4b, 0x53, 0x3c, // 192-bit key - 0x67, 0x2a, 0x82, 0x62, 0x64, 0xea, 0x78, 0x5f, - 0x4e, 0x4f, 0x7f, 0x78, 0x0d, 0xc7, 0xf3, 0xf1, - 0xe0, 0x96, 0x2b, 0x80, 0x90, 0x23, 0x86, 0xd5, - 0x14, 0xe9, 0xc3, 0xe7, 0x72, 0x59, 0xde, 0x92, - 0xdd, 0x11, 0x02, 0xff, 0xab, 0x08, 0x6c, 0x1e }, - { 0x52, 0x3a, 0x8a, 0x80, 0x6a, 0xe6, 0x21, 0xf1, // 256-bit key - 0x55, 0xfd, 0xd2, 0x8d, 0xbc, 0x34, 0xe1, 0xab, - 0x7b, 0x9b, 0x42, 0x43, 0x2a, 0xd8, 0xb2, 0xef, - 0xb9, 0x6e, 0x23, 0xb1, 0x3f, 0x0a, 0x6e, 0x52, - 0xf3, 0x61, 0x85, 0xd5, 0x0a, 0xd0, 0x02, 0xc5, - 0xf6, 0x01, 0xbe, 0xe5, 0x49, 0x3f, 0x11, 0x8b } -}; -#endif /* MBEDTLS_CIPHER_MODE_CBC */ - -#if defined(MBEDTLS_CIPHER_MODE_CFB) -static const uint8_t aria_test2_cfb_ct[3][48] = // CFB ciphertext -{ - { 0x37, 0x20, 0xe5, 0x3b, 0xa7, 0xd6, 0x15, 0x38, // 128-bit key - 0x34, 0x06, 0xb0, 0x9f, 0x0a, 0x05, 0xa2, 0x00, - 0xc0, 0x7c, 0x21, 0xe6, 0x37, 0x0f, 0x41, 0x3a, - 0x5d, 0x13, 0x25, 0x00, 0xa6, 0x82, 0x85, 0x01, - 0x7c, 0x61, 0xb4, 0x34, 0xc7, 0xb7, 0xca, 0x96, - 0x85, 0xa5, 0x10, 0x71, 0x86, 0x1e, 0x4d, 0x4b }, - { 0x41, 0x71, 0xf7, 0x19, 0x2b, 0xf4, 0x49, 0x54, // 192-bit key - 0x94, 0xd2, 0x73, 0x61, 0x29, 0x64, 0x0f, 0x5c, - 0x4d, 0x87, 0xa9, 0xa2, 0x13, 0x66, 0x4c, 0x94, - 0x48, 0x47, 0x7c, 0x6e, 0xcc, 0x20, 0x13, 0x59, - 0x8d, 0x97, 0x66, 0x95, 0x2d, 0xd8, 0xc3, 0x86, - 0x8f, 0x17, 0xe3, 0x6e, 0xf6, 0x6f, 0xd8, 0x4b }, - { 0x26, 0x83, 0x47, 0x05, 0xb0, 0xf2, 0xc0, 0xe2, // 256-bit key - 0x58, 0x8d, 0x4a, 0x7f, 0x09, 0x00, 0x96, 0x35, - 0xf2, 0x8b, 0xb9, 0x3d, 0x8c, 0x31, 0xf8, 0x70, - 0xec, 0x1e, 0x0b, 0xdb, 0x08, 0x2b, 0x66, 0xfa, - 0x40, 0x2d, 0xd9, 0xc2, 0x02, 0xbe, 0x30, 0x0c, - 0x45, 0x17, 0xd1, 0x96, 0xb1, 0x4d, 0x4c, 0xe1 } -}; -#endif /* MBEDTLS_CIPHER_MODE_CFB */ - -#if defined(MBEDTLS_CIPHER_MODE_CTR) -static const uint8_t aria_test2_ctr_ct[3][48] = // CTR ciphertext -{ - { 0xac, 0x5d, 0x7d, 0xe8, 0x05, 0xa0, 0xbf, 0x1c, // 128-bit key - 0x57, 0xc8, 0x54, 0x50, 0x1a, 0xf6, 0x0f, 0xa1, - 0x14, 0x97, 0xe2, 0xa3, 0x45, 0x19, 0xde, 0xa1, - 0x56, 0x9e, 0x91, 0xe5, 0xb5, 0xcc, 0xae, 0x2f, - 0xf3, 0xbf, 0xa1, 0xbf, 0x97, 0x5f, 0x45, 0x71, - 0xf4, 0x8b, 0xe1, 0x91, 0x61, 0x35, 0x46, 0xc3 }, - { 0x08, 0x62, 0x5c, 0xa8, 0xfe, 0x56, 0x9c, 0x19, // 192-bit key - 0xba, 0x7a, 0xf3, 0x76, 0x0a, 0x6e, 0xd1, 0xce, - 0xf4, 0xd1, 0x99, 0x26, 0x3e, 0x99, 0x9d, 0xde, - 0x14, 0x08, 0x2d, 0xbb, 0xa7, 0x56, 0x0b, 0x79, - 0xa4, 0xc6, 0xb4, 0x56, 0xb8, 0x70, 0x7d, 0xce, - 0x75, 0x1f, 0x98, 0x54, 0xf1, 0x88, 0x93, 0xdf }, - { 0x30, 0x02, 0x6c, 0x32, 0x96, 0x66, 0x14, 0x17, // 256-bit key - 0x21, 0x17, 0x8b, 0x99, 0xc0, 0xa1, 0xf1, 0xb2, - 0xf0, 0x69, 0x40, 0x25, 0x3f, 0x7b, 0x30, 0x89, - 0xe2, 0xa3, 0x0e, 0xa8, 0x6a, 0xa3, 0xc8, 0x8f, - 0x59, 0x40, 0xf0, 0x5a, 0xd7, 0xee, 0x41, 0xd7, - 0x13, 0x47, 0xbb, 0x72, 0x61, 0xe3, 0x48, 0xf1 } -}; -#endif /* MBEDTLS_CIPHER_MODE_CFB */ - -#define ARIA_SELF_TEST_IF_FAIL \ - { \ - if( verbose ) \ - mbedtls_printf( "failed\n" ); \ - return( 1 ); \ - } else { \ - if( verbose ) \ - mbedtls_printf( "passed\n" ); \ - } - -/* - * Checkup routine - */ -int mbedtls_aria_self_test( int verbose ) -{ - int i; - uint8_t blk[MBEDTLS_ARIA_BLOCKSIZE]; - mbedtls_aria_context ctx; - -#if (defined(MBEDTLS_CIPHER_MODE_CFB) || defined(MBEDTLS_CIPHER_MODE_CTR)) - size_t j; -#endif - -#if (defined(MBEDTLS_CIPHER_MODE_CBC) || \ - defined(MBEDTLS_CIPHER_MODE_CFB) || \ - defined(MBEDTLS_CIPHER_MODE_CTR)) - uint8_t buf[48], iv[MBEDTLS_ARIA_BLOCKSIZE]; -#endif - - /* - * Test set 1 - */ - for( i = 0; i < 3; i++ ) - { - /* test ECB encryption */ - if( verbose ) - mbedtls_printf( " ARIA-ECB-%d (enc): ", 128 + 64 * i ); - mbedtls_aria_setkey_enc( &ctx, aria_test1_ecb_key, 128 + 64 * i ); - mbedtls_aria_crypt_ecb( &ctx, aria_test1_ecb_pt, blk ); - if( memcmp( blk, aria_test1_ecb_ct[i], MBEDTLS_ARIA_BLOCKSIZE ) != 0 ) - ARIA_SELF_TEST_IF_FAIL; - - /* test ECB decryption */ - if( verbose ) - mbedtls_printf( " ARIA-ECB-%d (dec): ", 128 + 64 * i ); - mbedtls_aria_setkey_dec( &ctx, aria_test1_ecb_key, 128 + 64 * i ); - mbedtls_aria_crypt_ecb( &ctx, aria_test1_ecb_ct[i], blk ); - if( memcmp( blk, aria_test1_ecb_pt, MBEDTLS_ARIA_BLOCKSIZE ) != 0 ) - ARIA_SELF_TEST_IF_FAIL; - } - if( verbose ) - mbedtls_printf( "\n" ); - - /* - * Test set 2 - */ -#if defined(MBEDTLS_CIPHER_MODE_CBC) - for( i = 0; i < 3; i++ ) - { - /* Test CBC encryption */ - if( verbose ) - mbedtls_printf( " ARIA-CBC-%d (enc): ", 128 + 64 * i ); - mbedtls_aria_setkey_enc( &ctx, aria_test2_key, 128 + 64 * i ); - memcpy( iv, aria_test2_iv, MBEDTLS_ARIA_BLOCKSIZE ); - memset( buf, 0x55, sizeof( buf ) ); - mbedtls_aria_crypt_cbc( &ctx, MBEDTLS_ARIA_ENCRYPT, 48, iv, - aria_test2_pt, buf ); - if( memcmp( buf, aria_test2_cbc_ct[i], 48 ) != 0 ) - ARIA_SELF_TEST_IF_FAIL; - - /* Test CBC decryption */ - if( verbose ) - mbedtls_printf( " ARIA-CBC-%d (dec): ", 128 + 64 * i ); - mbedtls_aria_setkey_dec( &ctx, aria_test2_key, 128 + 64 * i ); - memcpy( iv, aria_test2_iv, MBEDTLS_ARIA_BLOCKSIZE ); - memset( buf, 0xAA, sizeof( buf ) ); - mbedtls_aria_crypt_cbc( &ctx, MBEDTLS_ARIA_DECRYPT, 48, iv, - aria_test2_cbc_ct[i], buf ); - if( memcmp( buf, aria_test2_pt, 48 ) != 0 ) - ARIA_SELF_TEST_IF_FAIL; - } - if( verbose ) - mbedtls_printf( "\n" ); - -#endif /* MBEDTLS_CIPHER_MODE_CBC */ - -#if defined(MBEDTLS_CIPHER_MODE_CFB) - for( i = 0; i < 3; i++ ) - { - /* Test CFB encryption */ - if( verbose ) - mbedtls_printf( " ARIA-CFB-%d (enc): ", 128 + 64 * i ); - mbedtls_aria_setkey_enc( &ctx, aria_test2_key, 128 + 64 * i ); - memcpy( iv, aria_test2_iv, MBEDTLS_ARIA_BLOCKSIZE ); - memset( buf, 0x55, sizeof( buf ) ); - j = 0; - mbedtls_aria_crypt_cfb128( &ctx, MBEDTLS_ARIA_ENCRYPT, 48, &j, iv, - aria_test2_pt, buf ); - if( memcmp( buf, aria_test2_cfb_ct[i], 48 ) != 0 ) - ARIA_SELF_TEST_IF_FAIL; - - /* Test CFB decryption */ - if( verbose ) - mbedtls_printf( " ARIA-CFB-%d (dec): ", 128 + 64 * i ); - mbedtls_aria_setkey_enc( &ctx, aria_test2_key, 128 + 64 * i ); - memcpy( iv, aria_test2_iv, MBEDTLS_ARIA_BLOCKSIZE ); - memset( buf, 0xAA, sizeof( buf ) ); - j = 0; - mbedtls_aria_crypt_cfb128( &ctx, MBEDTLS_ARIA_DECRYPT, 48, &j, - iv, aria_test2_cfb_ct[i], buf ); - if( memcmp( buf, aria_test2_pt, 48 ) != 0 ) - ARIA_SELF_TEST_IF_FAIL; - } - if( verbose ) - mbedtls_printf( "\n" ); -#endif /* MBEDTLS_CIPHER_MODE_CFB */ - -#if defined(MBEDTLS_CIPHER_MODE_CTR) - for( i = 0; i < 3; i++ ) - { - /* Test CTR encryption */ - if( verbose ) - mbedtls_printf( " ARIA-CTR-%d (enc): ", 128 + 64 * i ); - mbedtls_aria_setkey_enc( &ctx, aria_test2_key, 128 + 64 * i ); - memset( iv, 0, MBEDTLS_ARIA_BLOCKSIZE ); // IV = 0 - memset( buf, 0x55, sizeof( buf ) ); - j = 0; - mbedtls_aria_crypt_ctr( &ctx, 48, &j, iv, blk, - aria_test2_pt, buf ); - if( memcmp( buf, aria_test2_ctr_ct[i], 48 ) != 0 ) - ARIA_SELF_TEST_IF_FAIL; - - /* Test CTR decryption */ - if( verbose ) - mbedtls_printf( " ARIA-CTR-%d (dec): ", 128 + 64 * i ); - mbedtls_aria_setkey_enc( &ctx, aria_test2_key, 128 + 64 * i ); - memset( iv, 0, MBEDTLS_ARIA_BLOCKSIZE ); // IV = 0 - memset( buf, 0xAA, sizeof( buf ) ); - j = 0; - mbedtls_aria_crypt_ctr( &ctx, 48, &j, iv, blk, - aria_test2_ctr_ct[i], buf ); - if( memcmp( buf, aria_test2_pt, 48 ) != 0 ) - ARIA_SELF_TEST_IF_FAIL; - } - if( verbose ) - mbedtls_printf( "\n" ); -#endif /* MBEDTLS_CIPHER_MODE_CTR */ - - return( 0 ); -} - -#endif /* MBEDTLS_SELF_TEST */ - -#endif /* MBEDTLS_ARIA_C */ diff --git a/third_party/mbedtls/aria.h b/third_party/mbedtls/aria.h deleted file mode 100644 index 60981cfb4..000000000 --- a/third_party/mbedtls/aria.h +++ /dev/null @@ -1,369 +0,0 @@ -/* clang-format off */ - -/** - * \file aria.h - * - * \brief ARIA block cipher - * - * The ARIA algorithm is a symmetric block cipher that can encrypt and - * decrypt information. It is defined by the Korean Agency for - * Technology and Standards (KATS) in KS X 1213:2004 (in - * Korean, but see http://210.104.33.10/ARIA/index-e.html in English) - * and also described by the IETF in RFC 5794. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MBEDTLS_ARIA_H -#define MBEDTLS_ARIA_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -#include "third_party/mbedtls/platform_util.h" - -#define MBEDTLS_ARIA_ENCRYPT 1 /**< ARIA encryption. */ -#define MBEDTLS_ARIA_DECRYPT 0 /**< ARIA decryption. */ - -#define MBEDTLS_ARIA_BLOCKSIZE 16 /**< ARIA block size in bytes. */ -#define MBEDTLS_ARIA_MAX_ROUNDS 16 /**< Maxiumum number of rounds in ARIA. */ -#define MBEDTLS_ARIA_MAX_KEYSIZE 32 /**< Maximum size of an ARIA key in bytes. */ - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#define MBEDTLS_ERR_ARIA_INVALID_KEY_LENGTH MBEDTLS_DEPRECATED_NUMERIC_CONSTANT( -0x005C ) -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ -#define MBEDTLS_ERR_ARIA_BAD_INPUT_DATA -0x005C /**< Bad input data. */ - -#define MBEDTLS_ERR_ARIA_INVALID_INPUT_LENGTH -0x005E /**< Invalid data input length. */ - -/* MBEDTLS_ERR_ARIA_FEATURE_UNAVAILABLE is deprecated and should not be used. - */ -#define MBEDTLS_ERR_ARIA_FEATURE_UNAVAILABLE -0x005A /**< Feature not available. For example, an unsupported ARIA key size. */ - -/* MBEDTLS_ERR_ARIA_HW_ACCEL_FAILED is deprecated and should not be used. */ -#define MBEDTLS_ERR_ARIA_HW_ACCEL_FAILED -0x0058 /**< ARIA hardware accelerator failed. */ - -#if !defined(MBEDTLS_ARIA_ALT) -// Regular implementation -// - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief The ARIA context-type definition. - */ -typedef struct mbedtls_aria_context -{ - unsigned char nr; /*!< The number of rounds (12, 14 or 16) */ - /*! The ARIA round keys. */ - uint32_t rk[MBEDTLS_ARIA_MAX_ROUNDS + 1][MBEDTLS_ARIA_BLOCKSIZE / 4]; -} -mbedtls_aria_context; - -#else /* MBEDTLS_ARIA_ALT */ -/* #include "third_party/mbedtls/aria_alt.h" */ -#endif /* MBEDTLS_ARIA_ALT */ - -/** - * \brief This function initializes the specified ARIA context. - * - * It must be the first API called before using - * the context. - * - * \param ctx The ARIA context to initialize. This must not be \c NULL. - */ -void mbedtls_aria_init( mbedtls_aria_context *ctx ); - -/** - * \brief This function releases and clears the specified ARIA context. - * - * \param ctx The ARIA context to clear. This may be \c NULL, in which - * case this function returns immediately. If it is not \c NULL, - * it must point to an initialized ARIA context. - */ -void mbedtls_aria_free( mbedtls_aria_context *ctx ); - -/** - * \brief This function sets the encryption key. - * - * \param ctx The ARIA context to which the key should be bound. - * This must be initialized. - * \param key The encryption key. This must be a readable buffer - * of size \p keybits Bits. - * \param keybits The size of \p key in Bits. Valid options are: - *

- * - * \return \c 0 on success. - * \return A negative error code on failure. - */ -int mbedtls_aria_setkey_enc( mbedtls_aria_context *ctx, - const unsigned char *key, - unsigned int keybits ); - -/** - * \brief This function sets the decryption key. - * - * \param ctx The ARIA context to which the key should be bound. - * This must be initialized. - * \param key The decryption key. This must be a readable buffer - * of size \p keybits Bits. - * \param keybits The size of data passed. Valid options are: - * - * - * \return \c 0 on success. - * \return A negative error code on failure. - */ -int mbedtls_aria_setkey_dec( mbedtls_aria_context *ctx, - const unsigned char *key, - unsigned int keybits ); - -/** - * \brief This function performs an ARIA single-block encryption or - * decryption operation. - * - * It performs encryption or decryption (depending on whether - * the key was set for encryption on decryption) on the input - * data buffer defined in the \p input parameter. - * - * mbedtls_aria_init(), and either mbedtls_aria_setkey_enc() or - * mbedtls_aria_setkey_dec() must be called before the first - * call to this API with the same context. - * - * \param ctx The ARIA context to use for encryption or decryption. - * This must be initialized and bound to a key. - * \param input The 16-Byte buffer holding the input data. - * \param output The 16-Byte buffer holding the output data. - - * \return \c 0 on success. - * \return A negative error code on failure. - */ -int mbedtls_aria_crypt_ecb( mbedtls_aria_context *ctx, - const unsigned char input[MBEDTLS_ARIA_BLOCKSIZE], - unsigned char output[MBEDTLS_ARIA_BLOCKSIZE] ); - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -/** - * \brief This function performs an ARIA-CBC encryption or decryption operation - * on full blocks. - * - * It performs the operation defined in the \p mode - * parameter (encrypt/decrypt), on the input data buffer defined in - * the \p input parameter. - * - * It can be called as many times as needed, until all the input - * data is processed. mbedtls_aria_init(), and either - * mbedtls_aria_setkey_enc() or mbedtls_aria_setkey_dec() must be called - * before the first call to this API with the same context. - * - * \note This function operates on aligned blocks, that is, the input size - * must be a multiple of the ARIA block size of 16 Bytes. - * - * \note Upon exit, the content of the IV is updated so that you can - * call the same function again on the next - * block(s) of data and get the same result as if it was - * encrypted in one call. This allows a "streaming" usage. - * If you need to retain the contents of the IV, you should - * either save it manually or use the cipher module instead. - * - * - * \param ctx The ARIA context to use for encryption or decryption. - * This must be initialized and bound to a key. - * \param mode The mode of operation. This must be either - * #MBEDTLS_ARIA_ENCRYPT for encryption, or - * #MBEDTLS_ARIA_DECRYPT for decryption. - * \param length The length of the input data in Bytes. This must be a - * multiple of the block size (16 Bytes). - * \param iv Initialization vector (updated after use). - * This must be a readable buffer of size 16 Bytes. - * \param input The buffer holding the input data. This must - * be a readable buffer of length \p length Bytes. - * \param output The buffer holding the output data. This must - * be a writable buffer of length \p length Bytes. - * - * \return \c 0 on success. - * \return A negative error code on failure. - */ -int mbedtls_aria_crypt_cbc( mbedtls_aria_context *ctx, - int mode, - size_t length, - unsigned char iv[MBEDTLS_ARIA_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ); -#endif /* MBEDTLS_CIPHER_MODE_CBC */ - -#if defined(MBEDTLS_CIPHER_MODE_CFB) -/** - * \brief This function performs an ARIA-CFB128 encryption or decryption - * operation. - * - * It performs the operation defined in the \p mode - * parameter (encrypt or decrypt), on the input data buffer - * defined in the \p input parameter. - * - * For CFB, you must set up the context with mbedtls_aria_setkey_enc(), - * regardless of whether you are performing an encryption or decryption - * operation, that is, regardless of the \p mode parameter. This is - * because CFB mode uses the same key schedule for encryption and - * decryption. - * - * \note Upon exit, the content of the IV is updated so that you can - * call the same function again on the next - * block(s) of data and get the same result as if it was - * encrypted in one call. This allows a "streaming" usage. - * If you need to retain the contents of the - * IV, you must either save it manually or use the cipher - * module instead. - * - * - * \param ctx The ARIA context to use for encryption or decryption. - * This must be initialized and bound to a key. - * \param mode The mode of operation. This must be either - * #MBEDTLS_ARIA_ENCRYPT for encryption, or - * #MBEDTLS_ARIA_DECRYPT for decryption. - * \param length The length of the input data \p input in Bytes. - * \param iv_off The offset in IV (updated after use). - * This must not be larger than 15. - * \param iv The initialization vector (updated after use). - * This must be a readable buffer of size 16 Bytes. - * \param input The buffer holding the input data. This must - * be a readable buffer of length \p length Bytes. - * \param output The buffer holding the output data. This must - * be a writable buffer of length \p length Bytes. - * - * \return \c 0 on success. - * \return A negative error code on failure. - */ -int mbedtls_aria_crypt_cfb128( mbedtls_aria_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[MBEDTLS_ARIA_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ); -#endif /* MBEDTLS_CIPHER_MODE_CFB */ - -#if defined(MBEDTLS_CIPHER_MODE_CTR) -/** - * \brief This function performs an ARIA-CTR encryption or decryption - * operation. - * - * This function performs the operation defined in the \p mode - * parameter (encrypt/decrypt), on the input data buffer - * defined in the \p input parameter. - * - * Due to the nature of CTR, you must use the same key schedule - * for both encryption and decryption operations. Therefore, you - * must use the context initialized with mbedtls_aria_setkey_enc() - * for both #MBEDTLS_ARIA_ENCRYPT and #MBEDTLS_ARIA_DECRYPT. - * - * \warning You must never reuse a nonce value with the same key. Doing so - * would void the encryption for the two messages encrypted with - * the same nonce and key. - * - * There are two common strategies for managing nonces with CTR: - * - * 1. You can handle everything as a single message processed over - * successive calls to this function. In that case, you want to - * set \p nonce_counter and \p nc_off to 0 for the first call, and - * then preserve the values of \p nonce_counter, \p nc_off and \p - * stream_block across calls to this function as they will be - * updated by this function. - * - * With this strategy, you must not encrypt more than 2**128 - * blocks of data with the same key. - * - * 2. You can encrypt separate messages by dividing the \p - * nonce_counter buffer in two areas: the first one used for a - * per-message nonce, handled by yourself, and the second one - * updated by this function internally. - * - * For example, you might reserve the first 12 bytes for the - * per-message nonce, and the last 4 bytes for internal use. In that - * case, before calling this function on a new message you need to - * set the first 12 bytes of \p nonce_counter to your chosen nonce - * value, the last 4 to 0, and \p nc_off to 0 (which will cause \p - * stream_block to be ignored). That way, you can encrypt at most - * 2**96 messages of up to 2**32 blocks each with the same key. - * - * The per-message nonce (or information sufficient to reconstruct - * it) needs to be communicated with the ciphertext and must be unique. - * The recommended way to ensure uniqueness is to use a message - * counter. An alternative is to generate random nonces, but this - * limits the number of messages that can be securely encrypted: - * for example, with 96-bit random nonces, you should not encrypt - * more than 2**32 messages with the same key. - * - * Note that for both stategies, sizes are measured in blocks and - * that an ARIA block is 16 bytes. - * - * \warning Upon return, \p stream_block contains sensitive data. Its - * content must not be written to insecure storage and should be - * securely discarded as soon as it's no longer needed. - * - * \param ctx The ARIA context to use for encryption or decryption. - * This must be initialized and bound to a key. - * \param length The length of the input data \p input in Bytes. - * \param nc_off The offset in Bytes in the current \p stream_block, - * for resuming within the current cipher stream. The - * offset pointer should be \c 0 at the start of a - * stream. This must not be larger than \c 15 Bytes. - * \param nonce_counter The 128-bit nonce and counter. This must point to - * a read/write buffer of length \c 16 bytes. - * \param stream_block The saved stream block for resuming. This must - * point to a read/write buffer of length \c 16 bytes. - * This is overwritten by the function. - * \param input The buffer holding the input data. This must - * be a readable buffer of length \p length Bytes. - * \param output The buffer holding the output data. This must - * be a writable buffer of length \p length Bytes. - * - * \return \c 0 on success. - * \return A negative error code on failure. - */ -int mbedtls_aria_crypt_ctr( mbedtls_aria_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[MBEDTLS_ARIA_BLOCKSIZE], - unsigned char stream_block[MBEDTLS_ARIA_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ); -#endif /* MBEDTLS_CIPHER_MODE_CTR */ - -#if defined(MBEDTLS_SELF_TEST) -/** - * \brief Checkup routine. - * - * \return \c 0 on success, or \c 1 on failure. - */ -int mbedtls_aria_self_test( int verbose ); -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* aria.h */ diff --git a/third_party/mbedtls/asn1.h b/third_party/mbedtls/asn1.h index be8bb783d..4732c530a 100644 --- a/third_party/mbedtls/asn1.h +++ b/third_party/mbedtls/asn1.h @@ -1,38 +1,8 @@ -/* clang-format off */ -/** - * \file asn1.h - * - * \brief Generic ASN.1 parsing - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_ASN1_H #define MBEDTLS_ASN1_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -#if defined(MBEDTLS_BIGNUM_C) #include "third_party/mbedtls/bignum.h" -#endif +#include "third_party/mbedtls/config.h" +/* clang-format off */ /** * \addtogroup asn1_module @@ -546,8 +516,8 @@ int mbedtls_asn1_get_mpi( unsigned char **p, * \return 0 if successful or a specific ASN.1 or MPI error code. */ int mbedtls_asn1_get_alg( unsigned char **p, - const unsigned char *end, - mbedtls_asn1_buf *alg, mbedtls_asn1_buf *params ); + const unsigned char *end, + mbedtls_asn1_buf *alg, mbedtls_asn1_buf *params ); /** * \brief Retrieve an AlgorithmIdentifier ASN.1 sequence with NULL or no @@ -565,8 +535,8 @@ int mbedtls_asn1_get_alg( unsigned char **p, * \return 0 if successful or a specific ASN.1 or MPI error code. */ int mbedtls_asn1_get_alg_null( unsigned char **p, - const unsigned char *end, - mbedtls_asn1_buf *alg ); + const unsigned char *end, + mbedtls_asn1_buf *alg ); /** * \brief Find a specific named_data entry in a sequence or list based on @@ -579,7 +549,7 @@ int mbedtls_asn1_get_alg_null( unsigned char **p, * \return NULL if not found, or a pointer to the existing entry. */ mbedtls_asn1_named_data *mbedtls_asn1_find_named_data( mbedtls_asn1_named_data *list, - const char *oid, size_t len ); + const char *oid, size_t len ); /** * \brief Free a mbedtls_asn1_named_data entry diff --git a/third_party/mbedtls/asn1parse.c b/third_party/mbedtls/asn1parse.c index eee4662fe..c296b9032 100644 --- a/third_party/mbedtls/asn1parse.c +++ b/third_party/mbedtls/asn1parse.c @@ -1,3 +1,15 @@ +#include "third_party/mbedtls/asn1.h" +#include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" + +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + /* clang-format off */ /* * Generic ASN.1 parsing @@ -17,31 +29,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#include "third_party/mbedtls/common.h" - -asm(".ident\t\"\\n\\n\ -Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); -asm(".include \"libc/disclaimer.inc\""); #if defined(MBEDTLS_ASN1_PARSE_C) -#include "third_party/mbedtls/asn1.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_BIGNUM_C) -#include "third_party/mbedtls/bignum.h" -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - /* * ASN.1 DER decoding routines */ diff --git a/third_party/mbedtls/asn1write.c b/third_party/mbedtls/asn1write.c index 4ed8bf7d1..dd0fe9b24 100644 --- a/third_party/mbedtls/asn1write.c +++ b/third_party/mbedtls/asn1write.c @@ -1,10 +1,15 @@ -/* clang-format off */ +#include "third_party/mbedtls/asn1write.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * ASN.1 buffer writing functionality * @@ -24,21 +29,20 @@ asm(".include \"libc/disclaimer.inc\""); * limitations under the License. */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_ASN1_WRITE_C) -#include "third_party/mbedtls/asn1write.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - +/** + * \brief Write a length field in ASN.1 format. + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * \param len The length value to write. + * + * \return The number of bytes written to \p p on success. + * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. + */ int mbedtls_asn1_write_len( unsigned char **p, unsigned char *start, size_t len ) { if( len < 0x80 ) @@ -103,6 +107,18 @@ int mbedtls_asn1_write_len( unsigned char **p, unsigned char *start, size_t len #endif } +/** + * \brief Write an ASN.1 tag in ASN.1 format. + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * \param tag The tag to write. + * + * \return The number of bytes written to \p p on success. + * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. + */ int mbedtls_asn1_write_tag( unsigned char **p, unsigned char *start, unsigned char tag ) { if( *p - start < 1 ) @@ -113,6 +129,19 @@ int mbedtls_asn1_write_tag( unsigned char **p, unsigned char *start, unsigned ch return( 1 ); } +/** + * \brief Write raw buffer data. + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * \param buf The data buffer to write. + * \param size The length of the data buffer. + * + * \return The number of bytes written to \p p on success. + * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. + */ int mbedtls_asn1_write_raw_buffer( unsigned char **p, unsigned char *start, const unsigned char *buf, size_t size ) { @@ -129,6 +158,20 @@ int mbedtls_asn1_write_raw_buffer( unsigned char **p, unsigned char *start, } #if defined(MBEDTLS_BIGNUM_C) +/** + * \brief Write a arbitrary-precision number (#MBEDTLS_ASN1_INTEGER) + * in ASN.1 format. + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * \param X The MPI to write. + * It must be non-negative. + * + * \return The number of bytes written to \p p on success. + * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. + */ int mbedtls_asn1_write_mpi( unsigned char **p, unsigned char *start, const mbedtls_mpi *X ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; @@ -166,6 +209,18 @@ cleanup: } #endif /* MBEDTLS_BIGNUM_C */ +/** + * \brief Write a NULL tag (#MBEDTLS_ASN1_NULL) with zero data + * in ASN.1 format. + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * + * \return The number of bytes written to \p p on success. + * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. + */ int mbedtls_asn1_write_null( unsigned char **p, unsigned char *start ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; @@ -179,8 +234,22 @@ int mbedtls_asn1_write_null( unsigned char **p, unsigned char *start ) return( (int) len ); } +/** + * \brief Write an OID tag (#MBEDTLS_ASN1_OID) and data + * in ASN.1 format. + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * \param oid The OID to write. + * \param oid_len The length of the OID. + * + * \return The number of bytes written to \p p on success. + * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. + */ int mbedtls_asn1_write_oid( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len ) + const char *oid, size_t oid_len ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t len = 0; @@ -193,6 +262,21 @@ int mbedtls_asn1_write_oid( unsigned char **p, unsigned char *start, return( (int) len ); } +/** + * \brief Write an AlgorithmIdentifier sequence in ASN.1 format. + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * \param oid The OID of the algorithm to write. + * \param oid_len The length of the algorithm's OID. + * \param par_len The length of the parameters, which must be already written. + * If 0, NULL parameters are added + * + * \return The number of bytes written to \p p on success. + * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. + */ int mbedtls_asn1_write_algorithm_identifier( unsigned char **p, unsigned char *start, const char *oid, size_t oid_len, size_t par_len ) @@ -214,6 +298,19 @@ int mbedtls_asn1_write_algorithm_identifier( unsigned char **p, unsigned char *s return( (int) len ); } +/** + * \brief Write a boolean tag (#MBEDTLS_ASN1_BOOLEAN) and value + * in ASN.1 format. + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * \param boolean The boolean value to write, either \c 0 or \c 1. + * + * \return The number of bytes written to \p p on success. + * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. + */ int mbedtls_asn1_write_bool( unsigned char **p, unsigned char *start, int boolean ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; @@ -260,18 +357,62 @@ static int asn1_write_tagged_int( unsigned char **p, unsigned char *start, int v return( (int) len ); } +/** + * \brief Write an int tag (#MBEDTLS_ASN1_INTEGER) and value + * in ASN.1 format. + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * \param val The integer value to write. + * It must be non-negative. + * + * \return The number of bytes written to \p p on success. + * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. + */ int mbedtls_asn1_write_int( unsigned char **p, unsigned char *start, int val ) { return( asn1_write_tagged_int( p, start, val, MBEDTLS_ASN1_INTEGER ) ); } +/** + * \brief Write an enum tag (#MBEDTLS_ASN1_ENUMERATED) and value + * in ASN.1 format. + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * \param val The integer value to write. + * + * \return The number of bytes written to \p p on success. + * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. + */ int mbedtls_asn1_write_enum( unsigned char **p, unsigned char *start, int val ) { return( asn1_write_tagged_int( p, start, val, MBEDTLS_ASN1_ENUMERATED ) ); } -int mbedtls_asn1_write_tagged_string( unsigned char **p, unsigned char *start, int tag, - const char *text, size_t text_len ) +/** + * \brief Write a string in ASN.1 format using a specific + * string encoding tag. + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * \param tag The string encoding tag to write, e.g. + * #MBEDTLS_ASN1_UTF8_STRING. + * \param text The string to write. + * \param text_len The length of \p text in bytes (which might + * be strictly larger than the number of characters). + * + * \return The number of bytes written to \p p on success. + * \return A negative error code on failure. + */ +int mbedtls_asn1_write_tagged_string( unsigned char **p, unsigned char *start, + int tag, const char *text, size_t text_len ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t len = 0; @@ -285,24 +426,86 @@ int mbedtls_asn1_write_tagged_string( unsigned char **p, unsigned char *start, i return( (int) len ); } +/** + * \brief Write a UTF8 string in ASN.1 format using the UTF8String + * string encoding tag (#MBEDTLS_ASN1_UTF8_STRING). + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * \param text The string to write. + * \param text_len The length of \p text in bytes (which might + * be strictly larger than the number of characters). + * + * \return The number of bytes written to \p p on success. + * \return A negative error code on failure. + */ int mbedtls_asn1_write_utf8_string( unsigned char **p, unsigned char *start, - const char *text, size_t text_len ) + const char *text, size_t text_len ) { return( mbedtls_asn1_write_tagged_string(p, start, MBEDTLS_ASN1_UTF8_STRING, text, text_len) ); } +/** + * \brief Write a string in ASN.1 format using the PrintableString + * string encoding tag (#MBEDTLS_ASN1_PRINTABLE_STRING). + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * \param text The string to write. + * \param text_len The length of \p text in bytes (which might + * be strictly larger than the number of characters). + * + * \return The number of bytes written to \p p on success. + * \return A negative error code on failure. + */ int mbedtls_asn1_write_printable_string( unsigned char **p, unsigned char *start, - const char *text, size_t text_len ) + const char *text, size_t text_len ) { return( mbedtls_asn1_write_tagged_string(p, start, MBEDTLS_ASN1_PRINTABLE_STRING, text, text_len) ); } +/** + * \brief Write a string in ASN.1 format using the IA5String + * string encoding tag (#MBEDTLS_ASN1_IA5_STRING). + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * \param text The string to write. + * \param text_len The length of \p text in bytes (which might + * be strictly larger than the number of characters). + * + * \return The number of bytes written to \p p on success. + * \return A negative error code on failure. + */ int mbedtls_asn1_write_ia5_string( unsigned char **p, unsigned char *start, const char *text, size_t text_len ) { return( mbedtls_asn1_write_tagged_string(p, start, MBEDTLS_ASN1_IA5_STRING, text, text_len) ); } +/** + * \brief This function writes a named bitstring tag + * (#MBEDTLS_ASN1_BIT_STRING) and value in ASN.1 format. + * + * As stated in RFC 5280 Appendix B, trailing zeroes are + * omitted when encoding named bitstrings in DER. + * + * \note This function works backwards within the data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer which is used for bounds-checking. + * \param buf The bitstring to write. + * \param bits The total number of bits in the bitstring. + * + * \return The number of bytes written to \p p on success. + * \return A negative error code on failure. + */ int mbedtls_asn1_write_named_bitstring( unsigned char **p, unsigned char *start, const unsigned char *buf, @@ -346,6 +549,20 @@ int mbedtls_asn1_write_named_bitstring( unsigned char **p, return( mbedtls_asn1_write_bitstring( p, start, buf, bits ) ); } +/** + * \brief Write a bitstring tag (#MBEDTLS_ASN1_BIT_STRING) and + * value in ASN.1 format. + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * \param buf The bitstring to write. + * \param bits The total number of bits in the bitstring. + * + * \return The number of bytes written to \p p on success. + * \return A negative error code on failure. + */ int mbedtls_asn1_write_bitstring( unsigned char **p, unsigned char *start, const unsigned char *buf, size_t bits ) { @@ -379,6 +596,20 @@ int mbedtls_asn1_write_bitstring( unsigned char **p, unsigned char *start, return( (int) len ); } +/** + * \brief Write an octet string tag (#MBEDTLS_ASN1_OCTET_STRING) + * and value in ASN.1 format. + * + * \note This function works backwards in data buffer. + * + * \param p The reference to the current position pointer. + * \param start The start of the buffer, for bounds-checking. + * \param buf The buffer holding the data to write. + * \param size The length of the data buffer \p buf. + * + * \return The number of bytes written to \p p on success. + * \return A negative error code on failure. + */ int mbedtls_asn1_write_octet_string( unsigned char **p, unsigned char *start, const unsigned char *buf, size_t size ) { @@ -414,11 +645,31 @@ static mbedtls_asn1_named_data *asn1_find_named_data( return( list ); } -mbedtls_asn1_named_data *mbedtls_asn1_store_named_data( - mbedtls_asn1_named_data **head, - const char *oid, size_t oid_len, - const unsigned char *val, - size_t val_len ) +/** + * \brief Create or find a specific named_data entry for writing in a + * sequence or list based on the OID. If not already in there, + * a new entry is added to the head of the list. + * Warning: Destructive behaviour for the val data! + * + * \param list The pointer to the location of the head of the list to seek + * through (will be updated in case of a new entry). + * \param oid The OID to look for. + * \param oid_len The size of the OID. + * \param val The associated data to store. If this is \c NULL, + * no data is copied to the new or existing buffer. + * \param val_len The minimum length of the data buffer needed. + * If this is 0, do not allocate a buffer for the associated + * data. + * If the OID was already present, enlarge, shrink or free + * the existing buffer to fit \p val_len. + * + * \return A pointer to the new / existing entry on success. + * \return \c NULL if if there was a memory allocation error. + */ +mbedtls_asn1_named_data *mbedtls_asn1_store_named_data(mbedtls_asn1_named_data **head, + const char *oid, size_t oid_len, + const unsigned char *val, + size_t val_len ) { mbedtls_asn1_named_data *cur; diff --git a/third_party/mbedtls/asn1write.h b/third_party/mbedtls/asn1write.h index f2ecf217b..0d0f5c953 100644 --- a/third_party/mbedtls/asn1write.h +++ b/third_party/mbedtls/asn1write.h @@ -1,36 +1,9 @@ -/* clang-format off */ - -/** - * \file asn1write.h - * - * \brief ASN.1 buffer writing functionality - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_ASN1_WRITE_H -#define MBEDTLS_ASN1_WRITE_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - +#ifndef MBEDTLS_ASN1_WRITE_H_ +#define MBEDTLS_ASN1_WRITE_H_ #include "third_party/mbedtls/asn1.h" +#include "third_party/mbedtls/config.h" +COSMOPOLITAN_C_START_ +/* clang-format off */ #define MBEDTLS_ASN1_CHK_ADD(g, f) \ do \ @@ -41,332 +14,24 @@ (g) += ret; \ } while( 0 ) -#ifdef __cplusplus -extern "C" { -#endif +int mbedtls_asn1_write_len( unsigned char **, unsigned char *, size_t ); +int mbedtls_asn1_write_tag( unsigned char **, unsigned char *, unsigned char ); +int mbedtls_asn1_write_raw_buffer( unsigned char **, unsigned char *, const unsigned char *, size_t ); +int mbedtls_asn1_write_mpi( unsigned char **, unsigned char *, const mbedtls_mpi * ); +int mbedtls_asn1_write_null( unsigned char **, unsigned char * ); +int mbedtls_asn1_write_oid( unsigned char **, unsigned char *, const char *, size_t ); +int mbedtls_asn1_write_algorithm_identifier( unsigned char **, unsigned char *, const char *, size_t, size_t ); +int mbedtls_asn1_write_bool( unsigned char **, unsigned char *, int ); +int mbedtls_asn1_write_int( unsigned char **, unsigned char *, int ); +int mbedtls_asn1_write_enum( unsigned char **, unsigned char *, int ); +int mbedtls_asn1_write_tagged_string( unsigned char **, unsigned char *, int, const char *, size_t ); +int mbedtls_asn1_write_printable_string( unsigned char **, unsigned char *, const char *, size_t ); +int mbedtls_asn1_write_utf8_string( unsigned char **, unsigned char *, const char *, size_t ); +int mbedtls_asn1_write_ia5_string( unsigned char **, unsigned char *, const char *, size_t ); +int mbedtls_asn1_write_bitstring( unsigned char **, unsigned char *, const unsigned char *, size_t ); +int mbedtls_asn1_write_named_bitstring( unsigned char **, unsigned char *, const unsigned char *, size_t ); +int mbedtls_asn1_write_octet_string( unsigned char **, unsigned char *, const unsigned char *, size_t ); +mbedtls_asn1_named_data *mbedtls_asn1_store_named_data( mbedtls_asn1_named_data **, const char *, size_t, const unsigned char *, size_t ); -/** - * \brief Write a length field in ASN.1 format. - * - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * \param len The length value to write. - * - * \return The number of bytes written to \p p on success. - * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. - */ -int mbedtls_asn1_write_len( unsigned char **p, unsigned char *start, - size_t len ); -/** - * \brief Write an ASN.1 tag in ASN.1 format. - * - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * \param tag The tag to write. - * - * \return The number of bytes written to \p p on success. - * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. - */ -int mbedtls_asn1_write_tag( unsigned char **p, unsigned char *start, - unsigned char tag ); - -/** - * \brief Write raw buffer data. - * - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * \param buf The data buffer to write. - * \param size The length of the data buffer. - * - * \return The number of bytes written to \p p on success. - * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. - */ -int mbedtls_asn1_write_raw_buffer( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t size ); - -#if defined(MBEDTLS_BIGNUM_C) -/** - * \brief Write a arbitrary-precision number (#MBEDTLS_ASN1_INTEGER) - * in ASN.1 format. - * - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * \param X The MPI to write. - * It must be non-negative. - * - * \return The number of bytes written to \p p on success. - * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. - */ -int mbedtls_asn1_write_mpi( unsigned char **p, unsigned char *start, - const mbedtls_mpi *X ); -#endif /* MBEDTLS_BIGNUM_C */ - -/** - * \brief Write a NULL tag (#MBEDTLS_ASN1_NULL) with zero data - * in ASN.1 format. - * - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * - * \return The number of bytes written to \p p on success. - * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. - */ -int mbedtls_asn1_write_null( unsigned char **p, unsigned char *start ); - -/** - * \brief Write an OID tag (#MBEDTLS_ASN1_OID) and data - * in ASN.1 format. - * - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * \param oid The OID to write. - * \param oid_len The length of the OID. - * - * \return The number of bytes written to \p p on success. - * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. - */ -int mbedtls_asn1_write_oid( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len ); - -/** - * \brief Write an AlgorithmIdentifier sequence in ASN.1 format. - * - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * \param oid The OID of the algorithm to write. - * \param oid_len The length of the algorithm's OID. - * \param par_len The length of the parameters, which must be already written. - * If 0, NULL parameters are added - * - * \return The number of bytes written to \p p on success. - * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. - */ -int mbedtls_asn1_write_algorithm_identifier( unsigned char **p, - unsigned char *start, - const char *oid, size_t oid_len, - size_t par_len ); - -/** - * \brief Write a boolean tag (#MBEDTLS_ASN1_BOOLEAN) and value - * in ASN.1 format. - * - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * \param boolean The boolean value to write, either \c 0 or \c 1. - * - * \return The number of bytes written to \p p on success. - * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. - */ -int mbedtls_asn1_write_bool( unsigned char **p, unsigned char *start, - int boolean ); - -/** - * \brief Write an int tag (#MBEDTLS_ASN1_INTEGER) and value - * in ASN.1 format. - * - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * \param val The integer value to write. - * It must be non-negative. - * - * \return The number of bytes written to \p p on success. - * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. - */ -int mbedtls_asn1_write_int( unsigned char **p, unsigned char *start, int val ); - -/** - * \brief Write an enum tag (#MBEDTLS_ASN1_ENUMERATED) and value - * in ASN.1 format. - * - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * \param val The integer value to write. - * - * \return The number of bytes written to \p p on success. - * \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure. - */ -int mbedtls_asn1_write_enum( unsigned char **p, unsigned char *start, int val ); - -/** - * \brief Write a string in ASN.1 format using a specific - * string encoding tag. - - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * \param tag The string encoding tag to write, e.g. - * #MBEDTLS_ASN1_UTF8_STRING. - * \param text The string to write. - * \param text_len The length of \p text in bytes (which might - * be strictly larger than the number of characters). - * - * \return The number of bytes written to \p p on success. - * \return A negative error code on failure. - */ -int mbedtls_asn1_write_tagged_string( unsigned char **p, unsigned char *start, - int tag, const char *text, - size_t text_len ); - -/** - * \brief Write a string in ASN.1 format using the PrintableString - * string encoding tag (#MBEDTLS_ASN1_PRINTABLE_STRING). - * - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * \param text The string to write. - * \param text_len The length of \p text in bytes (which might - * be strictly larger than the number of characters). - * - * \return The number of bytes written to \p p on success. - * \return A negative error code on failure. - */ -int mbedtls_asn1_write_printable_string( unsigned char **p, - unsigned char *start, - const char *text, size_t text_len ); - -/** - * \brief Write a UTF8 string in ASN.1 format using the UTF8String - * string encoding tag (#MBEDTLS_ASN1_UTF8_STRING). - * - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * \param text The string to write. - * \param text_len The length of \p text in bytes (which might - * be strictly larger than the number of characters). - * - * \return The number of bytes written to \p p on success. - * \return A negative error code on failure. - */ -int mbedtls_asn1_write_utf8_string( unsigned char **p, unsigned char *start, - const char *text, size_t text_len ); - -/** - * \brief Write a string in ASN.1 format using the IA5String - * string encoding tag (#MBEDTLS_ASN1_IA5_STRING). - * - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * \param text The string to write. - * \param text_len The length of \p text in bytes (which might - * be strictly larger than the number of characters). - * - * \return The number of bytes written to \p p on success. - * \return A negative error code on failure. - */ -int mbedtls_asn1_write_ia5_string( unsigned char **p, unsigned char *start, - const char *text, size_t text_len ); - -/** - * \brief Write a bitstring tag (#MBEDTLS_ASN1_BIT_STRING) and - * value in ASN.1 format. - * - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * \param buf The bitstring to write. - * \param bits The total number of bits in the bitstring. - * - * \return The number of bytes written to \p p on success. - * \return A negative error code on failure. - */ -int mbedtls_asn1_write_bitstring( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t bits ); - -/** - * \brief This function writes a named bitstring tag - * (#MBEDTLS_ASN1_BIT_STRING) and value in ASN.1 format. - * - * As stated in RFC 5280 Appendix B, trailing zeroes are - * omitted when encoding named bitstrings in DER. - * - * \note This function works backwards within the data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer which is used for bounds-checking. - * \param buf The bitstring to write. - * \param bits The total number of bits in the bitstring. - * - * \return The number of bytes written to \p p on success. - * \return A negative error code on failure. - */ -int mbedtls_asn1_write_named_bitstring( unsigned char **p, - unsigned char *start, - const unsigned char *buf, - size_t bits ); - -/** - * \brief Write an octet string tag (#MBEDTLS_ASN1_OCTET_STRING) - * and value in ASN.1 format. - * - * \note This function works backwards in data buffer. - * - * \param p The reference to the current position pointer. - * \param start The start of the buffer, for bounds-checking. - * \param buf The buffer holding the data to write. - * \param size The length of the data buffer \p buf. - * - * \return The number of bytes written to \p p on success. - * \return A negative error code on failure. - */ -int mbedtls_asn1_write_octet_string( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t size ); - -/** - * \brief Create or find a specific named_data entry for writing in a - * sequence or list based on the OID. If not already in there, - * a new entry is added to the head of the list. - * Warning: Destructive behaviour for the val data! - * - * \param list The pointer to the location of the head of the list to seek - * through (will be updated in case of a new entry). - * \param oid The OID to look for. - * \param oid_len The size of the OID. - * \param val The associated data to store. If this is \c NULL, - * no data is copied to the new or existing buffer. - * \param val_len The minimum length of the data buffer needed. - * If this is 0, do not allocate a buffer for the associated - * data. - * If the OID was already present, enlarge, shrink or free - * the existing buffer to fit \p val_len. - * - * \return A pointer to the new / existing entry on success. - * \return \c NULL if if there was a memory allocation error. - */ -mbedtls_asn1_named_data *mbedtls_asn1_store_named_data( mbedtls_asn1_named_data **list, - const char *oid, size_t oid_len, - const unsigned char *val, - size_t val_len ); - -#ifdef __cplusplus -} -#endif - -#endif /* MBEDTLS_ASN1_WRITE_H */ +COSMOPOLITAN_C_END_ +#endif /* MBEDTLS_ASN1_WRITE_H_ */ diff --git a/third_party/mbedtls/base64.c b/third_party/mbedtls/base64.c index 09c7c4bbc..55e4c872e 100644 --- a/third_party/mbedtls/base64.c +++ b/third_party/mbedtls/base64.c @@ -1,10 +1,14 @@ -/* clang-format off */ +#include "third_party/mbedtls/base64.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * RFC 1521 base64 encoding/decoding * @@ -24,31 +28,9 @@ asm(".include \"libc/disclaimer.inc\""); * limitations under the License. */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_BASE64_C) -#include "third_party/mbedtls/base64.h" - - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - -static const unsigned char base64_enc_map[64] = -{ - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', - 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', - 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', - 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', - 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', - 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', '+', '/' -}; +#define ENC "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" static const unsigned char base64_dec_map[128] = { @@ -70,27 +52,16 @@ static const unsigned char base64_dec_map[128] = #define BASE64_SIZE_T_MAX ( (size_t) -1 ) /* SIZE_T_MAX is not standard */ /* - * Constant flow conditional assignment to unsigned char - */ -static void mbedtls_base64_cond_assign_uchar( unsigned char * dest, const unsigned char * const src, - unsigned char condition ) + * Constant flow conditional assignment to unsigned char +*/ +static void mbedtls_base64_cond_assign_uchar( unsigned char * dest, + const unsigned char * const src, + unsigned char condition ) { - /* MSVC has a warning about unary minus on unsigned integer types, - * but this is well-defined and precisely what we want to do here. */ -#if defined(_MSC_VER) -#pragma warning( push ) -#pragma warning( disable : 4146 ) -#endif - /* Generate bitmask from condition, mask will either be 0xFF or 0 */ unsigned char mask = ( condition | -condition ); mask >>= 7; mask = -mask; - -#if defined(_MSC_VER) -#pragma warning( pop ) -#endif - *dest = ( ( *src ) & mask ) | ( ( *dest ) & ~mask ); } @@ -98,24 +69,12 @@ static void mbedtls_base64_cond_assign_uchar( unsigned char * dest, const unsign * Constant flow conditional assignment to uint_32 */ static void mbedtls_base64_cond_assign_uint32( uint32_t * dest, const uint32_t src, - uint32_t condition ) + uint32_t condition ) { - /* MSVC has a warning about unary minus on unsigned integer types, - * but this is well-defined and precisely what we want to do here. */ -#if defined(_MSC_VER) -#pragma warning( push ) -#pragma warning( disable : 4146 ) -#endif - /* Generate bitmask from condition, mask will either be 0xFFFFFFFF or 0 */ uint32_t mask = ( condition | -condition ); mask >>= 31; mask = -mask; - -#if defined(_MSC_VER) -#pragma warning( pop ) -#endif - *dest = ( src & mask ) | ( ( *dest ) & ~mask ); } @@ -125,23 +84,9 @@ static void mbedtls_base64_cond_assign_uint32( uint32_t * dest, const uint32_t s static unsigned char mbedtls_base64_eq( size_t in_a, size_t in_b ) { size_t difference = in_a ^ in_b; - - /* MSVC has a warning about unary minus on unsigned integer types, - * but this is well-defined and precisely what we want to do here. */ -#if defined(_MSC_VER) -#pragma warning( push ) -#pragma warning( disable : 4146 ) -#endif - difference |= -difference; - -#if defined(_MSC_VER) -#pragma warning( pop ) -#endif - /* cope with the varying size of size_t per platform */ difference >>= ( sizeof( difference ) * 8 - 1 ); - return (unsigned char) ( 1 ^ difference ); } @@ -149,7 +94,8 @@ static unsigned char mbedtls_base64_eq( size_t in_a, size_t in_b ) * Constant flow lookup into table. */ static unsigned char mbedtls_base64_table_lookup( const unsigned char * const table, - const size_t table_size, const size_t table_index ) + const size_t table_size, + const size_t table_index ) { size_t i; unsigned char result = 0; @@ -162,89 +108,80 @@ static unsigned char mbedtls_base64_table_lookup( const unsigned char * const ta return result; } -/* - * Encode a buffer into base64 format +/** + * \brief Encode a buffer into base64 format + * + * \param dst destination buffer + * \param dlen size of the destination buffer + * \param olen number of bytes written + * \param src source buffer + * \param slen amount of data to be encoded + * + * \return 0 if successful, or MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL. + * *olen is always updated to reflect the amount + * of data that has (or would have) been written. + * If that length cannot be represented, then no data is + * written to the buffer and *olen is set to the maximum + * length representable as a size_t. + * + * \note Call this function with dlen = 0 to obtain the + * required buffer size in *olen */ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ) + const unsigned char *src, size_t slen ) { + unsigned w; size_t i, n; - int C1, C2, C3; - unsigned char *p; - - if( slen == 0 ) - { + unsigned char *q; + const unsigned char *p, *pe; + if( !slen ) { + if (dlen) *dst = 0; *olen = 0; - return( 0 ); + return 0; } - n = slen / 3 + ( slen % 3 != 0 ); - - if( n > ( BASE64_SIZE_T_MAX - 1 ) / 4 ) - { + if( n > ( BASE64_SIZE_T_MAX - 1 ) / 4 ) { *olen = BASE64_SIZE_T_MAX; - return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); + return MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL; } - n *= 4; - - if( ( dlen < n + 1 ) || ( NULL == dst ) ) - { + if( ( dlen < n + 1 ) || !dst ) { *olen = n + 1; - return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); + return MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL; } - - n = ( slen / 3 ) * 3; - - for( i = 0, p = dst; i < n; i += 3 ) - { - C1 = *src++; - C2 = *src++; - C3 = *src++; - - *p++ = mbedtls_base64_table_lookup( base64_enc_map, sizeof( base64_enc_map ), - ( ( C1 >> 2 ) & 0x3F ) ); - - *p++ = mbedtls_base64_table_lookup( base64_enc_map, sizeof( base64_enc_map ), - ( ( ( ( C1 & 3 ) << 4 ) + ( C2 >> 4 ) ) & 0x3F ) ); - - *p++ = mbedtls_base64_table_lookup( base64_enc_map, sizeof( base64_enc_map ), - ( ( ( ( C2 & 15 ) << 2 ) + ( C3 >> 6 ) ) & 0x3F ) ); - - *p++ = mbedtls_base64_table_lookup( base64_enc_map, sizeof( base64_enc_map ), - ( C3 & 0x3F ) ); + for (q = dst, p = src, pe = p + slen; p < pe; p += 3) { + w = p[0] << 020; + if (p + 1 < pe) w |= p[1] << 010; + if (p + 2 < pe) w |= p[2] << 000; + *q++ = ENC[(w >> 18) & 077]; + *q++ = ENC[(w >> 12) & 077]; + *q++ = p + 1 < pe ? ENC[(w >> 6) & 077] : '='; + *q++ = p + 2 < pe ? ENC[w & 077] : '='; } - - if( i < slen ) - { - C1 = *src++; - C2 = ( ( i + 1 ) < slen ) ? *src++ : 0; - - *p++ = mbedtls_base64_table_lookup( base64_enc_map, sizeof( base64_enc_map ), - ( ( C1 >> 2 ) & 0x3F ) ); - - *p++ = mbedtls_base64_table_lookup( base64_enc_map, sizeof( base64_enc_map ), - ( ( ( ( C1 & 3 ) << 4 ) + ( C2 >> 4 ) ) & 0x3F ) ); - - if( ( i + 1 ) < slen ) - *p++ = mbedtls_base64_table_lookup( base64_enc_map, sizeof( base64_enc_map ), - ( ( ( C2 & 15 ) << 2 ) & 0x3F ) ); - else *p++ = '='; - - *p++ = '='; - } - - *olen = p - dst; - *p = 0; - - return( 0 ); + *olen = n; + *q = 0; + return 0; } -/* - * Decode a base64-formatted buffer +/** + * \brief Decode a base64-formatted buffer + * + * \param dst destination buffer (can be NULL for checking size) + * \param dlen size of the destination buffer + * \param olen number of bytes written + * \param src source buffer + * \param slen amount of data to be decoded + * + * \return 0 if successful, MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL, or + * MBEDTLS_ERR_BASE64_INVALID_CHARACTER if the input data is + * not correct. *olen is always updated to reflect the amount + * of data that has (or would have) been written. + * + * \note Call this function with *dst = NULL or dlen = 0 to obtain + * the required buffer size in *olen */ int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ) + const unsigned char *src, size_t slen ) { size_t i, n; uint32_t j, x; @@ -352,8 +289,10 @@ static const unsigned char base64_test_enc[] = "JEhuVodiWr2/F9mixBcaAZTtjx4Rs9cJDLbpEG8i7hPK" "swcFdsn6MWwINP+Nwmw4AEPpVJevUEvRQbqVMVoLlw=="; -/* - * Checkup routine +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed */ int mbedtls_base64_self_test( int verbose ) { diff --git a/third_party/mbedtls/base64.h b/third_party/mbedtls/base64.h index c079a2321..a68583974 100644 --- a/third_party/mbedtls/base64.h +++ b/third_party/mbedtls/base64.h @@ -1,97 +1,15 @@ +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_BASE64_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_BASE64_H_ +#include "third_party/mbedtls/config.h" +COSMOPOLITAN_C_START_ /* clang-format off */ -/** - * \file base64.h - * - * \brief RFC 1521 base64 encoding/decoding - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_BASE64_H -#define MBEDTLS_BASE64_H +#define MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL -0x002A /**< Output buffer too small. */ +#define MBEDTLS_ERR_BASE64_INVALID_CHARACTER -0x002C /**< Invalid character in input. */ -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif +int mbedtls_base64_encode(unsigned char *, size_t, size_t *, const unsigned char *, size_t); +int mbedtls_base64_decode(unsigned char *, size_t, size_t *, const unsigned char *, size_t); +int mbedtls_base64_self_test(int); - -#define MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL -0x002A /**< Output buffer too small. */ -#define MBEDTLS_ERR_BASE64_INVALID_CHARACTER -0x002C /**< Invalid character in input. */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Encode a buffer into base64 format - * - * \param dst destination buffer - * \param dlen size of the destination buffer - * \param olen number of bytes written - * \param src source buffer - * \param slen amount of data to be encoded - * - * \return 0 if successful, or MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL. - * *olen is always updated to reflect the amount - * of data that has (or would have) been written. - * If that length cannot be represented, then no data is - * written to the buffer and *olen is set to the maximum - * length representable as a size_t. - * - * \note Call this function with dlen = 0 to obtain the - * required buffer size in *olen - */ -int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ); - -/** - * \brief Decode a base64-formatted buffer - * - * \param dst destination buffer (can be NULL for checking size) - * \param dlen size of the destination buffer - * \param olen number of bytes written - * \param src source buffer - * \param slen amount of data to be decoded - * - * \return 0 if successful, MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL, or - * MBEDTLS_ERR_BASE64_INVALID_CHARACTER if the input data is - * not correct. *olen is always updated to reflect the amount - * of data that has (or would have) been written. - * - * \note Call this function with *dst = NULL or dlen = 0 to obtain - * the required buffer size in *olen - */ -int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ); - -#if defined(MBEDTLS_SELF_TEST) -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int mbedtls_base64_self_test( int verbose ); - -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* base64.h */ +COSMOPOLITAN_C_END_ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_BASE64_H_ */ diff --git a/third_party/mbedtls/bignum.c b/third_party/mbedtls/bignum.c index b99a87289..2a89b3e4b 100644 --- a/third_party/mbedtls/bignum.c +++ b/third_party/mbedtls/bignum.c @@ -1,5 +1,17 @@ -/* clang-format off */ +#include "libc/log/log.h" +#include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/bn_mul.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * Multi-precision integer library * @@ -35,24 +47,8 @@ * */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_BIGNUM_C) -#include "third_party/mbedtls/bignum.h" -#include "third_party/mbedtls/bn_mul.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - #define MPI_VALIDATE_RET( cond ) \ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_MPI_BAD_INPUT_DATA ) #define MPI_VALIDATE( cond ) \ @@ -77,8 +73,13 @@ static void mbedtls_mpi_zeroize( mbedtls_mpi_uint *v, size_t n ) mbedtls_platform_zeroize( v, ciL * n ); } -/* - * Initialize one MPI +/** + * \brief Initialize an MPI context. + * + * This makes the MPI ready to be set or freed, + * but does not define a value for the MPI. + * + * \param X The MPI context to initialize. This must not be \c NULL. */ void mbedtls_mpi_init( mbedtls_mpi *X ) { @@ -89,8 +90,12 @@ void mbedtls_mpi_init( mbedtls_mpi *X ) X->p = NULL; } -/* - * Unallocate one MPI +/** + * \brief This function frees the components of an MPI context. + * + * \param X The MPI context to be cleared. This may be \c NULL, + * in which case this function is a no-op. If it is + * not \c NULL, it must point to an initialized MPI. */ void mbedtls_mpi_free( mbedtls_mpi *X ) { @@ -108,8 +113,18 @@ void mbedtls_mpi_free( mbedtls_mpi *X ) X->p = NULL; } -/* - * Enlarge to the specified number of limbs +/** + * \brief Enlarge an MPI to the specified number of limbs. + * + * \note This function does nothing if the MPI is + * already large enough. + * + * \param X The MPI to grow. It must be initialized. + * \param nblimbs The target number of limbs. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. + * \return Another negative error code on other kinds of failure. */ int mbedtls_mpi_grow( mbedtls_mpi *X, size_t nblimbs ) { @@ -138,9 +153,20 @@ int mbedtls_mpi_grow( mbedtls_mpi *X, size_t nblimbs ) return( 0 ); } -/* - * Resize down as much as possible, - * while keeping at least the specified number of limbs +/** + * \brief This function resizes an MPI downwards, keeping at least the + * specified number of limbs. + * + * If \c X is smaller than \c nblimbs, it is resized up + * instead. + * + * \param X The MPI to shrink. This must point to an initialized MPI. + * \param nblimbs The minimum number of limbs to keep. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed + * (this can only happen when resizing up). + * \return Another negative error code on other kinds of failure. */ int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs ) { @@ -180,8 +206,18 @@ int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs ) return( 0 ); } -/* - * Copy the contents of Y into X +/** + * \brief Make a copy of an MPI. + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param Y The source MPI. This must point to an initialized MPI. + * + * \note The limb-buffer in the destination MPI is enlarged + * if necessary to hold the value in the source MPI. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. + * \return Another negative error code on other kinds of failure. */ int mbedtls_mpi_copy( mbedtls_mpi *X, const mbedtls_mpi *Y ) { @@ -222,8 +258,11 @@ cleanup: return( ret ); } -/* - * Swap the contents of X and Y +/** + * \brief Swap the contents of two MPIs. + * + * \param X The first MPI. It must be initialized. + * \param Y The second MPI. It must be initialized. */ void mbedtls_mpi_swap( mbedtls_mpi *X, mbedtls_mpi *Y ) { @@ -252,10 +291,29 @@ static void mpi_safe_cond_assign( size_t n, dest[i] = dest[i] * ( 1 - assign ) + src[i] * assign; } -/* - * Conditionally assign X = Y, without leaking information - * about whether the assignment was made or not. - * (Leaking information about the respective sizes of X and Y is ok however.) +/** + * \brief Perform a safe conditional copy of MPI which doesn't + * reveal whether the condition was true or not. + * + * \param X The MPI to conditionally assign to. This must point + * to an initialized MPI. + * \param Y The MPI to be assigned from. This must point to an + * initialized MPI. + * \param assign The condition deciding whether to perform the + * assignment or not. Possible values: + * * \c 1: Perform the assignment `X = Y`. + * * \c 0: Keep the original value of \p X. + * + * \note This function is equivalent to + * `if( assign ) mbedtls_mpi_copy( X, Y );` + * except that it avoids leaking any information about whether + * the assignment was done or not (the above code may leak + * information through branch prediction and/or memory access + * patterns analysis). + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. + * \return Another negative error code on other kinds of failure. */ int mbedtls_mpi_safe_cond_assign( mbedtls_mpi *X, const mbedtls_mpi *Y, unsigned char assign ) { @@ -280,11 +338,28 @@ cleanup: return( ret ); } -/* - * Conditionally swap X and Y, without leaking information - * about whether the swap was made or not. - * Here it is not ok to simply swap the pointers, which whould lead to - * different memory access patterns when X and Y are used afterwards. +/** + * \brief Perform a safe conditional swap which doesn't + * reveal whether the condition was true or not. + * + * \param X The first MPI. This must be initialized. + * \param Y The second MPI. This must be initialized. + * \param assign The condition deciding whether to perform + * the swap or not. Possible values: + * * \c 1: Swap the values of \p X and \p Y. + * * \c 0: Keep the original values of \p X and \p Y. + * + * \note This function is equivalent to + * if( assign ) mbedtls_mpi_swap( X, Y ); + * except that it avoids leaking any information about whether + * the assignment was done or not (the above code may leak + * information through branch prediction and/or memory access + * patterns analysis). + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. + * \return Another negative error code on other kinds of failure. + * */ int mbedtls_mpi_safe_cond_swap( mbedtls_mpi *X, mbedtls_mpi *Y, unsigned char swap ) { @@ -319,8 +394,15 @@ cleanup: return( ret ); } -/* - * Set value from integer +/** + * \brief Store integer value in MPI. + * + * \param X The MPI to set. This must be initialized. + * \param z The value to use. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. + * \return Another negative error code on other kinds of failure. */ int mbedtls_mpi_lset( mbedtls_mpi *X, mbedtls_mpi_sint z ) { @@ -338,8 +420,15 @@ cleanup: return( ret ); } -/* - * Get a specific bit +/** + * \brief Get a specific bit from an MPI. + * + * \param X The MPI to query. This must be initialized. + * \param pos Zero-based index of the bit to query. + * + * \return \c 0 or \c 1 on success, depending on whether bit \c pos + * of \c X is unset or set. + * \return A negative error code on failure. */ int mbedtls_mpi_get_bit( const mbedtls_mpi *X, size_t pos ) { @@ -355,8 +444,20 @@ int mbedtls_mpi_get_bit( const mbedtls_mpi *X, size_t pos ) #define GET_BYTE( X, i ) \ ( ( ( X )->p[( i ) / ciL] >> ( ( ( i ) % ciL ) * 8 ) ) & 0xff ) -/* - * Set a bit to a specific value of 0 or 1 +/** + * \brief Modify a specific bit in an MPI. + * + * \note This function will grow the target MPI if necessary to set a + * bit to \c 1 in a not yet existing limb. It will not grow if + * the bit should be set to \c 0. + * + * \param X The MPI to modify. This must be initialized. + * \param pos Zero-based index of the bit to modify. + * \param val The desired value of bit \c pos: \c 0 or \c 1. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. + * \return Another negative error code on other kinds of failure. */ int mbedtls_mpi_set_bit( mbedtls_mpi *X, size_t pos, unsigned char val ) { @@ -384,8 +485,17 @@ cleanup: return( ret ); } -/* - * Return the number of less significant zero-bits +/** + * \brief Return the number of bits of value \c 0 before the + * least significant bit of value \c 1. + * + * \note This is the same as the zero-based index of + * the least significant bit of value \c 1. + * + * \param X The MPI to query. + * + * \return The number of bits of value \c 0 before the least significant + * bit of value \c 1 in \p X. */ size_t mbedtls_mpi_lsb( const mbedtls_mpi *X ) { @@ -403,23 +513,22 @@ size_t mbedtls_mpi_lsb( const mbedtls_mpi *X ) /* * Count leading zero bits in a given integer */ -static size_t mbedtls_clz( const mbedtls_mpi_uint x ) +static inline size_t mbedtls_clz( const mbedtls_mpi_uint x ) { - size_t j; - mbedtls_mpi_uint mask = (mbedtls_mpi_uint) 1 << (biL - 1); - - for( j = 0; j < biL; j++ ) - { - if( x & mask ) break; - - mask >>= 1; - } - - return j; + return x ? __builtin_clzll(x) : biL; } -/* - * Return the number of bits +/** + * \brief Return the number of bits up to and including the most + * significant bit of value \c 1. + * + * * \note This is same as the one-based index of the most + * significant bit of value \c 1. + * + * \param X The MPI to query. This must point to an initialized MPI. + * + * \return The number of bits up to and including the most + * significant bit of value \c 1. */ size_t mbedtls_mpi_bitlen( const mbedtls_mpi *X ) { @@ -437,8 +546,18 @@ size_t mbedtls_mpi_bitlen( const mbedtls_mpi *X ) return( ( i * biL ) + j ); } -/* - * Return the total size in bytes +/** + * \brief Return the total size of an MPI value in bytes. + * + * \param X The MPI to use. This must point to an initialized MPI. + * + * \note The value returned by this function may be less than + * the number of bytes used to store \p X internally. + * This happens if and only if there are trailing bytes + * of value zero. + * + * \return The least number of bytes capable of storing + * the absolute value of \p X. */ size_t mbedtls_mpi_size( const mbedtls_mpi *X ) { @@ -462,8 +581,15 @@ static int mpi_get_digit( mbedtls_mpi_uint *d, int radix, char c ) return( 0 ); } -/* - * Import from an ASCII string +/** + * \brief Import an MPI from an ASCII string. + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param radix The numeric base of the input string. + * \param s Null-terminated string buffer. + * + * \return \c 0 if successful. + * \return A negative error code on failure. */ int mbedtls_mpi_read_string( mbedtls_mpi *X, int radix, const char *s ) { @@ -575,8 +701,27 @@ cleanup: return( ret ); } -/* - * Export into an ASCII string +/** + * \brief Export an MPI to an ASCII string. + * + * \param X The source MPI. This must point to an initialized MPI. + * \param radix The numeric base of the output string. + * \param buf The buffer to write the string to. This must be writable + * buffer of length \p buflen Bytes. + * \param buflen The available size in Bytes of \p buf. + * \param olen The address at which to store the length of the string + * written, including the final \c NULL byte. This must + * not be \c NULL. + * + * \note You can call this function with `buflen == 0` to obtain the + * minimum required buffer size in `*olen`. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if the target buffer \p buf + * is too small to hold the value of \p X in the desired base. + * In this case, `*olen` is nonetheless updated to contain the + * size of \p buf required for a successful call. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_write_string( const mbedtls_mpi *X, int radix, char *buf, size_t buflen, size_t *olen ) @@ -663,8 +808,26 @@ cleanup: } #if defined(MBEDTLS_FS_IO) -/* - * Read X from an opened file +/** + * \brief Read an MPI from a line in an opened file. + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param radix The numeric base of the string representation used + * in the source line. + * \param fin The input file handle to use. This must not be \c NULL. + * + * \note On success, this function advances the file stream + * to the end of the current line or to EOF. + * + * The function returns \c 0 on an empty line. + * + * Leading whitespaces are ignored, as is a + * '0x' prefix for radix \c 16. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if the file read buffer + * is too small. + * \return Another negative error code on failure. */ int mbedtls_mpi_read_file( mbedtls_mpi *X, int radix, FILE *fin ) { @@ -702,8 +865,20 @@ int mbedtls_mpi_read_file( mbedtls_mpi *X, int radix, FILE *fin ) return( mbedtls_mpi_read_string( X, radix, p + 1 ) ); } -/* - * Write X into an opened file (or stdout if fout == NULL) +/** + * \brief Export an MPI into an opened file. + * + * \param p A string prefix to emit prior to the MPI data. + * For example, this might be a label, or "0x" when + * printing in base \c 16. This may be \c NULL if no prefix + * is needed. + * \param X The source MPI. This must point to an initialized MPI. + * \param radix The numeric base to be used in the emitted string. + * \param fout The output file handle. This may be \c NULL, in which case + * the output is written to \c stdout. + * + * \return \c 0 if successful. + * \return A negative error code on failure. */ int mbedtls_mpi_write_file( const char *p, const mbedtls_mpi *X, int radix, FILE *fout ) { @@ -745,67 +920,13 @@ cleanup: } #endif /* MBEDTLS_FS_IO */ - -/* Convert a big-endian byte array aligned to the size of mbedtls_mpi_uint - * into the storage form used by mbedtls_mpi. */ - -static mbedtls_mpi_uint mpi_uint_bigendian_to_host_c( mbedtls_mpi_uint x ) -{ - uint8_t i; - unsigned char *x_ptr; - mbedtls_mpi_uint tmp = 0; - - for( i = 0, x_ptr = (unsigned char*) &x; i < ciL; i++, x_ptr++ ) - { - tmp <<= CHAR_BIT; - tmp |= (mbedtls_mpi_uint) *x_ptr; - } - - return( tmp ); -} - -static mbedtls_mpi_uint mpi_uint_bigendian_to_host( mbedtls_mpi_uint x ) -{ -#if defined(__BYTE_ORDER__) - -/* Nothing to do on bigendian systems. */ -#if ( __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ ) - return( x ); -#endif /* __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ */ - -#if ( __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ ) - -/* For GCC and Clang, have builtins for byte swapping. */ -#if defined(__GNUC__) && defined(__GNUC_PREREQ) -#if __GNUC_PREREQ(4,3) -#define have_bswap +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +#define mpi_uint_bigendian_to_host(x) (x) +#elif __SIZEOF_LONG__ == 8 +#define mpi_uint_bigendian_to_host(x) __builtin_bswap64(x) +#elif __SIZEOF_LONG__ == 4 +#define mpi_uint_bigendian_to_host(x) __builtin_bswap32(x) #endif -#endif - -#if defined(__clang__) && defined(__has_builtin) -#if __has_builtin(__builtin_bswap32) && \ - __has_builtin(__builtin_bswap64) -#define have_bswap -#endif -#endif - -#if defined(have_bswap) - /* The compiler is hopefully able to statically evaluate this! */ - switch( sizeof(mbedtls_mpi_uint) ) - { - case 4: - return( __builtin_bswap32(x) ); - case 8: - return( __builtin_bswap64(x) ); - } -#endif -#endif /* __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ */ -#endif /* __BYTE_ORDER__ */ - - /* Fall back to C-based reordering if we don't know the byte order - * or we couldn't use a compiler-specific builtin. */ - return( mpi_uint_bigendian_to_host_c( x ) ); -} static void mpi_bigendian_to_host( mbedtls_mpi_uint * const p, size_t limbs ) { @@ -836,8 +957,17 @@ static void mpi_bigendian_to_host( mbedtls_mpi_uint * const p, size_t limbs ) } } -/* - * Import X from unsigned binary data, little endian +/** + * \brief Import X from unsigned binary data, little endian + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param buf The input buffer. This must be a readable buffer of length + * \p buflen Bytes. + * \param buflen The length of the input buffer \p p in Bytes. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_read_binary_le( mbedtls_mpi *X, const unsigned char *buf, size_t buflen ) @@ -869,8 +999,17 @@ cleanup: return( ret ); } -/* - * Import X from unsigned binary data, big endian +/** + * \brief Import an MPI from unsigned big endian binary data. + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param buf The input buffer. This must be a readable buffer of length + * \p buflen Bytes. + * \param buflen The length of the input buffer \p p in Bytes. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_read_binary( mbedtls_mpi *X, const unsigned char *buf, size_t buflen ) { @@ -911,8 +1050,20 @@ cleanup: return( ret ); } -/* - * Export X into unsigned binary data, little endian +/** + * \brief Export X into unsigned binary data, little endian. + * Always fills the whole buffer, which will end with zeros + * if the number is smaller. + * + * \param X The source MPI. This must point to an initialized MPI. + * \param buf The output buffer. This must be a writable buffer of length + * \p buflen Bytes. + * \param buflen The size of the output buffer \p buf in Bytes. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if \p buf isn't + * large enough to hold the value of \p X. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_write_binary_le( const mbedtls_mpi *X, unsigned char *buf, size_t buflen ) @@ -950,8 +1101,20 @@ int mbedtls_mpi_write_binary_le( const mbedtls_mpi *X, return( 0 ); } -/* - * Export X into unsigned binary data, big endian +/** + * \brief Export X into unsigned binary data, big endian. + * Always fills the whole buffer, which will start with zeros + * if the number is smaller. + * + * \param X The source MPI. This must point to an initialized MPI. + * \param buf The output buffer. This must be a writable buffer of length + * \p buflen Bytes. + * \param buflen The size of the output buffer \p buf in Bytes. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if \p buf isn't + * large enough to hold the value of \p X. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_write_binary( const mbedtls_mpi *X, unsigned char *buf, size_t buflen ) @@ -996,8 +1159,15 @@ int mbedtls_mpi_write_binary( const mbedtls_mpi *X, return( 0 ); } -/* - * Left-shift: X <<= count +/** + * \brief Perform a left-shift on an MPI: X <<= count + * + * \param X The MPI to shift. This must point to an initialized MPI. + * \param count The number of bits to shift by. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_shift_l( mbedtls_mpi *X, size_t count ) { @@ -1047,8 +1217,15 @@ cleanup: return( ret ); } -/* - * Right-shift: X >>= count +/** + * \brief Perform a right-shift on an MPI: X >>= count + * + * \param X The MPI to shift. This must point to an initialized MPI. + * \param count The number of bits to shift by. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_shift_r( mbedtls_mpi *X, size_t count ) { @@ -1091,8 +1268,15 @@ int mbedtls_mpi_shift_r( mbedtls_mpi *X, size_t count ) return( 0 ); } -/* - * Compare unsigned values +/** + * \brief Compare the absolute values of two MPIs. + * + * \param X The left-hand MPI. This must point to an initialized MPI. + * \param Y The right-hand MPI. This must point to an initialized MPI. + * + * \return \c 1 if `|X|` is greater than `|Y|`. + * \return \c -1 if `|X|` is lesser than `|Y|`. + * \return \c 0 if `|X|` is equal to `|Y|`. */ int mbedtls_mpi_cmp_abs( const mbedtls_mpi *X, const mbedtls_mpi *Y ) { @@ -1123,8 +1307,15 @@ int mbedtls_mpi_cmp_abs( const mbedtls_mpi *X, const mbedtls_mpi *Y ) return( 0 ); } -/* - * Compare signed values +/** + * \brief Compare two MPIs. + * + * \param X The left-hand MPI. This must point to an initialized MPI. + * \param Y The right-hand MPI. This must point to an initialized MPI. + * + * \return \c 1 if \p X is greater than \p Y. + * \return \c -1 if \p X is lesser than \p Y. + * \return \c 0 if \p X is equal to \p Y. */ int mbedtls_mpi_cmp_mpi( const mbedtls_mpi *X, const mbedtls_mpi *Y ) { @@ -1193,8 +1384,20 @@ static unsigned ct_lt_mpi_uint( const mbedtls_mpi_uint x, return (unsigned) ret; } -/* - * Compare signed values in constant time +/** + * \brief Check if an MPI is less than the other in constant time. + * + * \param X The left-hand MPI. This must point to an initialized MPI + * with the same allocated length as Y. + * \param Y The right-hand MPI. This must point to an initialized MPI + * with the same allocated length as X. + * \param ret The result of the comparison: + * \c 1 if \p X is less than \p Y. + * \c 0 if \p X is greater than or equal to \p Y. + * + * \return 0 on success. + * \return MBEDTLS_ERR_MPI_BAD_INPUT_DATA if the allocated length of + * the two input MPIs is not the same. */ int mbedtls_mpi_lt_mpi_ct( const mbedtls_mpi *X, const mbedtls_mpi *Y, unsigned *ret ) @@ -1259,8 +1462,15 @@ int mbedtls_mpi_lt_mpi_ct( const mbedtls_mpi *X, const mbedtls_mpi *Y, return( 0 ); } -/* - * Compare signed values +/** + * \brief Compare an MPI with an integer. + * + * \param X The left-hand MPI. This must point to an initialized MPI. + * \param z The integer value to compare \p X to. + * + * \return \c 1 if \p X is greater than \p z. + * \return \c -1 if \p X is lesser than \p z. + * \return \c 0 if \p X is equal to \p z. */ int mbedtls_mpi_cmp_int( const mbedtls_mpi *X, mbedtls_mpi_sint z ) { @@ -1276,8 +1486,16 @@ int mbedtls_mpi_cmp_int( const mbedtls_mpi *X, mbedtls_mpi_sint z ) return( mbedtls_mpi_cmp_mpi( X, &Y ) ); } -/* - * Unsigned addition: X = |A| + |B| (HAC 14.7) +/** + * \brief Perform an unsigned addition of MPIs: X = |A| + |B| + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param A The first summand. This must point to an initialized MPI. + * \param B The second summand. This must point to an initialized MPI. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_add_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B ) { @@ -1366,8 +1584,17 @@ static mbedtls_mpi_uint mpi_sub_hlp( size_t n, return( c ); } -/* - * Unsigned subtraction: X = |A| - |B| (HAC 14.9, 14.10) +/** + * \brief Perform an unsigned subtraction of MPIs: X = |A| - |B| + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param A The minuend. This must point to an initialized MPI. + * \param B The subtrahend. This must point to an initialized MPI. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_NEGATIVE_VALUE if \p B is greater than \p A. + * \return Another negative error code on different kinds of failure. + * */ int mbedtls_mpi_sub_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B ) { @@ -1430,8 +1657,16 @@ cleanup: return( ret ); } -/* - * Signed addition: X = A + B +/** + * \brief Perform a signed addition of MPIs: X = A + B + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param A The first summand. This must point to an initialized MPI. + * \param B The second summand. This must point to an initialized MPI. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_add_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B ) { @@ -1465,8 +1700,16 @@ cleanup: return( ret ); } -/* - * Signed subtraction: X = A - B +/** + * \brief Perform a signed subtraction of MPIs: X = A - B + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param A The minuend. This must point to an initialized MPI. + * \param B The subtrahend. This must point to an initialized MPI. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_sub_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B ) { @@ -1500,8 +1743,16 @@ cleanup: return( ret ); } -/* - * Signed addition: X = A + b +/** + * \brief Perform a signed addition of an MPI and an integer: X = A + b + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param A The first summand. This must point to an initialized MPI. + * \param b The second summand. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_add_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint b ) { @@ -1518,8 +1769,17 @@ int mbedtls_mpi_add_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint return( mbedtls_mpi_add_mpi( X, A, &_B ) ); } -/* - * Signed subtraction: X = A - b +/** + * \brief Perform a signed subtraction of an MPI and an integer: + * X = A - b + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param A The minuend. This must point to an initialized MPI. + * \param b The subtrahend. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_sub_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint b ) { @@ -1539,17 +1799,10 @@ int mbedtls_mpi_sub_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint /* * Helper for mbedtls_mpi multiplication */ -static -#if defined(__APPLE__) && defined(__arm__) -/* - * Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn) - * appears to need this to prevent bad ARM code generation at -O3. - */ -__attribute__ ((noinline)) -#endif -void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mpi_uint b ) +static void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mpi_uint b ) { - mbedtls_mpi_uint c = 0, t = 0; + uint128_t axdx; + mbedtls_mpi_uint c = 0, t = 0, ax, dx, z; #if defined(MULADDC_HUIT) for( ; i >= 8; i -= 8 ) @@ -1566,6 +1819,7 @@ void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mp MULADDC_STOP } #else /* MULADDC_HUIT */ + for( ; i >= 16; i -= 16 ) { MULADDC_INIT @@ -1573,31 +1827,28 @@ void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mp MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_STOP } - for( ; i >= 8; i -= 8 ) { MULADDC_INIT MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_CORE - MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_STOP } - for( ; i > 0; i-- ) { MULADDC_INIT MULADDC_CORE MULADDC_STOP } + #endif /* MULADDC_HUIT */ t++; @@ -1608,8 +1859,17 @@ void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mp while( c != 0 ); } -/* - * Baseline multiplication: X = A * B (HAC 14.12) +/** + * \brief Perform a multiplication of two MPIs: X = A * B + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param A The first factor. This must point to an initialized MPI. + * \param B The second factor. This must point to an initialized MPI. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return Another negative error code on different kinds of failure. + * */ int mbedtls_mpi_mul_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *B ) { @@ -1648,8 +1908,18 @@ cleanup: return( ret ); } -/* - * Baseline multiplication: X = A * b +/** + * \brief Perform a multiplication of an MPI with an unsigned integer: + * X = A * b + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param A The first factor. This must point to an initialized MPI. + * \param b The second factor. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return Another negative error code on different kinds of failure. + * */ int mbedtls_mpi_mul_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_uint b ) { @@ -1671,7 +1941,9 @@ int mbedtls_mpi_mul_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_uint * mbedtls_mpi_uint divisor, d */ static mbedtls_mpi_uint mbedtls_int_div_int( mbedtls_mpi_uint u1, - mbedtls_mpi_uint u0, mbedtls_mpi_uint d, mbedtls_mpi_uint *r ) + mbedtls_mpi_uint u0, + mbedtls_mpi_uint d, + mbedtls_mpi_uint *r ) { #if defined(MBEDTLS_HAVE_UDBL) mbedtls_t_udbl dividend, quotient; @@ -1762,8 +2034,23 @@ static mbedtls_mpi_uint mbedtls_int_div_int( mbedtls_mpi_uint u1, #endif } -/* - * Division by mbedtls_mpi: A = Q * B + R (HAC 14.20) +/** + * \brief Perform a division with remainder of two MPIs: + * A = Q * B + R + * + * \param Q The destination MPI for the quotient. + * This may be \c NULL if the value of the + * quotient is not needed. + * \param R The destination MPI for the remainder value. + * This may be \c NULL if the value of the + * remainder is not needed. + * \param A The dividend. This must point to an initialized MPi. + * \param B The divisor. This must point to an initialized MPI. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. + * \return #MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if \p B equals zero. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, const mbedtls_mpi *B ) @@ -1890,8 +2177,23 @@ cleanup: return( ret ); } -/* - * Division by int: A = Q * b + R +/** + * \brief Perform a division with remainder of an MPI by an integer: + * A = Q * b + R + * + * \param Q The destination MPI for the quotient. + * This may be \c NULL if the value of the + * quotient is not needed. + * \param R The destination MPI for the remainder value. + * This may be \c NULL if the value of the + * remainder is not needed. + * \param A The dividend. This must point to an initialized MPi. + * \param b The divisor. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. + * \return #MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if \p b equals zero. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_div_int( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, @@ -1909,8 +2211,22 @@ int mbedtls_mpi_div_int( mbedtls_mpi *Q, mbedtls_mpi *R, return( mbedtls_mpi_div_mpi( Q, R, A, &_B ) ); } -/* - * Modulo: R = A mod B +/** + * \brief Perform a modular reduction. R = A mod B + * + * \param R The destination MPI for the residue value. + * This must point to an initialized MPI. + * \param A The MPI to compute the residue of. + * This must point to an initialized MPI. + * \param B The base of the modular reduction. + * This must point to an initialized MPI. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return #MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if \p B equals zero. + * \return #MBEDTLS_ERR_MPI_NEGATIVE_VALUE if \p B is negative. + * \return Another negative error code on different kinds of failure. + * */ int mbedtls_mpi_mod_mpi( mbedtls_mpi *R, const mbedtls_mpi *A, const mbedtls_mpi *B ) { @@ -1935,8 +2251,21 @@ cleanup: return( ret ); } -/* - * Modulo: r = A mod b +/** + * \brief Perform a modular reduction with respect to an integer. + * r = A mod b + * + * \param r The address at which to store the residue. + * This must not be \c NULL. + * \param A The MPI to compute the residue of. + * This must point to an initialized MPi. + * \param b The integer base of the modular reduction. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return #MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if \p b equals zero. + * \return #MBEDTLS_ERR_MPI_NEGATIVE_VALUE if \p b is negative. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_mod_int( mbedtls_mpi_uint *r, const mbedtls_mpi *A, mbedtls_mpi_sint b ) { @@ -2011,7 +2340,8 @@ static void mpi_montg_init( mbedtls_mpi_uint *mm, const mbedtls_mpi *N ) *mm = ~x + 1; } -/** Montgomery multiplication: A = A * B * R^-1 mod N (HAC 14.36) +/** + * Montgomery multiplication: A = A * B * R^-1 mod N (HAC 14.36) * * \param[in,out] A One of the numbers to multiply. * It must have at least as many limbs as N @@ -2097,8 +2427,31 @@ static void mpi_montred( mbedtls_mpi *A, const mbedtls_mpi *N, mpi_montmul( A, &U, N, mm, T ); } -/* - * Sliding-window exponentiation: X = A^E mod N (HAC 14.85) +/** + * \brief Perform a sliding-window exponentiation: X = A^E mod N + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param A The base of the exponentiation. + * This must point to an initialized MPI. + * \param E The exponent MPI. This must point to an initialized MPI. + * \param N The base for the modular reduction. This must point to an + * initialized MPI. + * \param _RR A helper MPI depending solely on \p N which can be used to + * speed-up multiple modular exponentiations for the same value + * of \p N. This may be \c NULL. If it is not \c NULL, it must + * point to an initialized MPI. If it hasn't been used after + * the call to mbedtls_mpi_init(), this function will compute + * the helper value and store it in \p _RR for reuse on + * subsequent calls to this function. Otherwise, the function + * will assume that \p _RR holds the helper value set by a + * previous call to mbedtls_mpi_exp_mod(), and reuse it. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return #MBEDTLS_ERR_MPI_BAD_INPUT_DATA if \c N is negative or + * even, or if \c E is negative. + * \return Another negative error code on different kinds of failures. + * */ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *E, const mbedtls_mpi *N, @@ -2318,8 +2671,16 @@ cleanup: return( ret ); } -/* - * Greatest common divisor: G = gcd(A, B) (HAC 14.54) +/** + * \brief Compute the greatest common divisor: G = gcd(A, B) + * + * \param G The destination MPI. This must point to an initialized MPI. + * \param A The first operand. This must point to an initialized MPI. + * \param B The second operand. This must point to an initialized MPI. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return Another negative error code on different kinds of failure. */ int mbedtls_mpi_gcd( mbedtls_mpi *G, const mbedtls_mpi *A, const mbedtls_mpi *B ) { @@ -2374,16 +2735,30 @@ cleanup: return( ret ); } -/* - * Fill X with size bytes of random. +/** + * \brief Fill an MPI with a number of random bytes. * - * Use a temporary bytes representation to make sure the result is the same - * regardless of the platform endianness (useful when f_rng is actually - * deterministic, eg for tests). + * Use a temporary bytes representation to make sure the result is the + * same regardless of the platform endianness (useful when f_rng is + * actually deterministic, eg for tests). + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param size The number of random bytes to generate. + * \param f_rng The RNG function to use. This must not be \c NULL. + * \param p_rng The RNG parameter to be passed to \p f_rng. This may be + * \c NULL if \p f_rng doesn't need a context argument. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return Another negative error code on failure. + * + * \note The bytes obtained from the RNG are interpreted + * as a big-endian representation of an MPI; this can + * be relevant in applications like deterministic ECDSA. */ int mbedtls_mpi_fill_random( mbedtls_mpi *X, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t const limbs = CHARS_TO_LIMBS( size ); @@ -2411,8 +2786,21 @@ cleanup: return( ret ); } -/* - * Modular inverse: X = A^-1 mod N (HAC 14.61 / 14.64) +/** + * \brief Compute the modular inverse: X = A^-1 mod N + * + * \param X The destination MPI. This must point to an initialized MPI. + * \param A The MPI to calculate the modular inverse of. This must point + * to an initialized MPI. + * \param N The base of the modular inversion. This must point to an + * initialized MPI. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return #MBEDTLS_ERR_MPI_BAD_INPUT_DATA if \p N is less than + * or equal to one. + * \return #MBEDTLS_ERR_MPI_NOT_ACCEPTABLE if \p has no modular inverse + * with respect to \p N. */ int mbedtls_mpi_inv_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi *N ) { @@ -2511,7 +2899,7 @@ cleanup: #if defined(MBEDTLS_GENPRIME) -static const int small_prime[] = +static const short small_prime[] = { 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, @@ -2662,8 +3050,32 @@ cleanup: return( ret ); } -/* - * Pseudo-primality test: small factors, then Miller-Rabin +/** + * \brief Miller-Rabin primality test. + * + * \warning If \p X is potentially generated by an adversary, for example + * when validating cryptographic parameters that you didn't + * generate yourself and that are supposed to be prime, then + * \p rounds should be at least the half of the security + * strength of the cryptographic algorithm. On the other hand, + * if \p X is chosen uniformly or non-adversially (as is the + * case when mbedtls_mpi_gen_prime calls this function), then + * \p rounds can be much lower. + * + * \param X The MPI to check for primality. + * This must point to an initialized MPI. + * \param rounds The number of bases to perform the Miller-Rabin primality + * test for. The probability of returning 0 on a composite is + * at most 2-2*\p rounds. + * \param f_rng The RNG function to use. This must not be \c NULL. + * \param p_rng The RNG parameter to be passed to \p f_rng. + * This may be \c NULL if \p f_rng doesn't use + * a context parameter. + * + * \return \c 0 if successful, i.e. \p X is probably prime. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return #MBEDTLS_ERR_MPI_NOT_ACCEPTABLE if \p X is not prime. + * \return Another negative error code on other kinds of failure. */ int mbedtls_mpi_is_prime_ext( const mbedtls_mpi *X, int rounds, int (*f_rng)(void *, unsigned char *, size_t), @@ -2696,44 +3108,34 @@ int mbedtls_mpi_is_prime_ext( const mbedtls_mpi *X, int rounds, return( mpi_miller_rabin( &XX, rounds, f_rng, p_rng ) ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -/* - * Pseudo-primality test, error probability 2^-80 - */ -int mbedtls_mpi_is_prime( const mbedtls_mpi *X, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - MPI_VALIDATE_RET( X != NULL ); - MPI_VALIDATE_RET( f_rng != NULL ); - - /* - * In the past our key generation aimed for an error rate of at most - * 2^-80. Since this function is deprecated, aim for the same certainty - * here as well. - */ - return( mbedtls_mpi_is_prime_ext( X, 40, f_rng, p_rng ) ); -} -#endif - -/* - * Prime number generation +/** + * \brief Generate a prime number. * - * To generate an RSA key in a way recommended by FIPS 186-4, both primes must - * be either 1024 bits or 1536 bits long, and flags must contain - * MBEDTLS_MPI_GEN_PRIME_FLAG_LOW_ERR. + * To generate an RSA key in a way recommended by FIPS + * 186-4, both primes must be either 1024 bits or 1536 + * bits long, and flags must contain + * MBEDTLS_MPI_GEN_PRIME_FLAG_LOW_ERR. + * + * \param X The destination MPI to store the generated prime in. + * This must point to an initialized MPi. + * \param nbits The required size of the destination MPI in bits. + * This must be between \c 3 and #MBEDTLS_MPI_MAX_BITS. + * \param flags A mask of flags of type #mbedtls_mpi_gen_prime_flag_t. + * \param f_rng The RNG function to use. This must not be \c NULL. + * \param p_rng The RNG parameter to be passed to \p f_rng. + * This may be \c NULL if \p f_rng doesn't use + * a context parameter. + * + * \return \c 0 if successful, in which case \p X holds a + * probably prime number. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. + * \return #MBEDTLS_ERR_MPI_BAD_INPUT_DATA if `nbits` is not between + * \c 3 and #MBEDTLS_MPI_MAX_BITS. */ int mbedtls_mpi_gen_prime( mbedtls_mpi *X, size_t nbits, int flags, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { -#ifdef MBEDTLS_HAVE_INT64 -// ceil(2^63.5) -#define CEIL_MAXUINT_DIV_SQRT2 0xb504f333f9de6485ULL -#else -// ceil(2^31.5) -#define CEIL_MAXUINT_DIV_SQRT2 0xb504f334U -#endif int ret = MBEDTLS_ERR_MPI_NOT_ACCEPTABLE; size_t k, n; int rounds; @@ -2775,7 +3177,7 @@ int mbedtls_mpi_gen_prime( mbedtls_mpi *X, size_t nbits, int flags, { MBEDTLS_MPI_CHK( mbedtls_mpi_fill_random( X, n * ciL, f_rng, p_rng ) ); /* make sure generated number is at least (nbits-1)+0.5 bits (FIPS 186-4 §B.3.3 steps 4.4, 5.5) */ - if( X->p[n-1] < CEIL_MAXUINT_DIV_SQRT2 ) continue; + if( X->p[n-1] < 0xb504f333f9de6485ULL /* ceil(2^63.5) */ ) continue; k = n * biL; if( k > nbits ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( X, k - nbits ) ); @@ -2856,8 +3258,10 @@ static const int gcd_pairs[GCD_PAIR_COUNT][3] = { 768454923, 542167814, 1 } }; -/* - * Checkup routine +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed */ int mbedtls_mpi_self_test( int verbose ) { diff --git a/third_party/mbedtls/bignum.h b/third_party/mbedtls/bignum.h index 7ce4083fe..995c6cd53 100644 --- a/third_party/mbedtls/bignum.h +++ b/third_party/mbedtls/bignum.h @@ -1,38 +1,9 @@ -/* clang-format off */ -/** - * \file bignum.h - * - * \brief Multi-precision integer library - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_BIGNUM_H -#define MBEDTLS_BIGNUM_H +#ifndef MBEDTLS_BIGNUM_H_ +#define MBEDTLS_BIGNUM_H_ #include "libc/stdio/stdio.h" - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -#if defined(MBEDTLS_FS_IO) -#endif +COSMOPOLITAN_C_START_ +/* clang-format off */ #define MBEDTLS_ERR_MPI_FILE_IO_ERROR -0x0002 /**< An error occurred while reading from or writing to a file. */ #define MBEDTLS_ERR_MPI_BAD_INPUT_DATA -0x0004 /**< Bad input parameters to function. */ @@ -103,79 +74,8 @@ #define MBEDTLS_LN_2_DIV_LN_10_SCALE100 332 #define MBEDTLS_MPI_RW_BUFFER_SIZE ( ((MBEDTLS_MPI_MAX_BITS_SCALE100 + MBEDTLS_LN_2_DIV_LN_10_SCALE100 - 1) / MBEDTLS_LN_2_DIV_LN_10_SCALE100) + 10 + 6 ) -/* - * Define the base integer type, architecture-wise. - * - * 32 or 64-bit integer types can be forced regardless of the underlying - * architecture by defining MBEDTLS_HAVE_INT32 or MBEDTLS_HAVE_INT64 - * respectively and undefining MBEDTLS_HAVE_ASM. - * - * Double-width integers (e.g. 128-bit in 64-bit architectures) can be - * disabled by defining MBEDTLS_NO_UDBL_DIVISION. - */ -#if !defined(MBEDTLS_HAVE_INT32) - #if defined(_MSC_VER) && defined(_M_AMD64) - /* Always choose 64-bit when using MSC */ - #if !defined(MBEDTLS_HAVE_INT64) - #define MBEDTLS_HAVE_INT64 - #endif /* !MBEDTLS_HAVE_INT64 */ - typedef int64_t mbedtls_mpi_sint; - typedef uint64_t mbedtls_mpi_uint; - #elif defined(__GNUC__) && ( \ - defined(__amd64__) || defined(__x86_64__) || \ - defined(__ppc64__) || defined(__powerpc64__) || \ - defined(__ia64__) || defined(__alpha__) || \ - ( defined(__sparc__) && defined(__arch64__) ) || \ - defined(__s390x__) || defined(__mips64) || \ - defined(__aarch64__) ) - #if !defined(MBEDTLS_HAVE_INT64) - #define MBEDTLS_HAVE_INT64 - #endif /* MBEDTLS_HAVE_INT64 */ - typedef int64_t mbedtls_mpi_sint; - typedef uint64_t mbedtls_mpi_uint; - #if !defined(MBEDTLS_NO_UDBL_DIVISION) - /* mbedtls_t_udbl defined as 128-bit unsigned int */ - typedef unsigned int mbedtls_t_udbl __attribute__((mode(TI))); - #define MBEDTLS_HAVE_UDBL - #endif /* !MBEDTLS_NO_UDBL_DIVISION */ - #elif defined(__ARMCC_VERSION) && defined(__aarch64__) - /* - * __ARMCC_VERSION is defined for both armcc and armclang and - * __aarch64__ is only defined by armclang when compiling 64-bit code - */ - #if !defined(MBEDTLS_HAVE_INT64) - #define MBEDTLS_HAVE_INT64 - #endif /* !MBEDTLS_HAVE_INT64 */ - typedef int64_t mbedtls_mpi_sint; - typedef uint64_t mbedtls_mpi_uint; - #if !defined(MBEDTLS_NO_UDBL_DIVISION) - /* mbedtls_t_udbl defined as 128-bit unsigned int */ - typedef __uint128_t mbedtls_t_udbl; - #define MBEDTLS_HAVE_UDBL - #endif /* !MBEDTLS_NO_UDBL_DIVISION */ - #elif defined(MBEDTLS_HAVE_INT64) - /* Force 64-bit integers with unknown compiler */ - typedef int64_t mbedtls_mpi_sint; - typedef uint64_t mbedtls_mpi_uint; - #endif -#endif /* !MBEDTLS_HAVE_INT32 */ - -#if !defined(MBEDTLS_HAVE_INT64) - /* Default to 32-bit compilation */ - #if !defined(MBEDTLS_HAVE_INT32) - #define MBEDTLS_HAVE_INT32 - #endif /* !MBEDTLS_HAVE_INT32 */ - typedef int32_t mbedtls_mpi_sint; - typedef uint32_t mbedtls_mpi_uint; - #if !defined(MBEDTLS_NO_UDBL_DIVISION) - typedef uint64_t mbedtls_t_udbl; - #define MBEDTLS_HAVE_UDBL - #endif /* !MBEDTLS_NO_UDBL_DIVISION */ -#endif /* !MBEDTLS_HAVE_INT64 */ - -#ifdef __cplusplus -extern "C" { -#endif +typedef int64_t mbedtls_mpi_sint; +typedef uint64_t mbedtls_mpi_uint; /** * \brief MPI structure @@ -188,782 +88,6 @@ typedef struct mbedtls_mpi } mbedtls_mpi; -/** - * \brief Initialize an MPI context. - * - * This makes the MPI ready to be set or freed, - * but does not define a value for the MPI. - * - * \param X The MPI context to initialize. This must not be \c NULL. - */ -void mbedtls_mpi_init( mbedtls_mpi *X ); - -/** - * \brief This function frees the components of an MPI context. - * - * \param X The MPI context to be cleared. This may be \c NULL, - * in which case this function is a no-op. If it is - * not \c NULL, it must point to an initialized MPI. - */ -void mbedtls_mpi_free( mbedtls_mpi *X ); - -/** - * \brief Enlarge an MPI to the specified number of limbs. - * - * \note This function does nothing if the MPI is - * already large enough. - * - * \param X The MPI to grow. It must be initialized. - * \param nblimbs The target number of limbs. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_mpi_grow( mbedtls_mpi *X, size_t nblimbs ); - -/** - * \brief This function resizes an MPI downwards, keeping at least the - * specified number of limbs. - * - * If \c X is smaller than \c nblimbs, it is resized up - * instead. - * - * \param X The MPI to shrink. This must point to an initialized MPI. - * \param nblimbs The minimum number of limbs to keep. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed - * (this can only happen when resizing up). - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs ); - -/** - * \brief Make a copy of an MPI. - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param Y The source MPI. This must point to an initialized MPI. - * - * \note The limb-buffer in the destination MPI is enlarged - * if necessary to hold the value in the source MPI. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_mpi_copy( mbedtls_mpi *X, const mbedtls_mpi *Y ); - -/** - * \brief Swap the contents of two MPIs. - * - * \param X The first MPI. It must be initialized. - * \param Y The second MPI. It must be initialized. - */ -void mbedtls_mpi_swap( mbedtls_mpi *X, mbedtls_mpi *Y ); - -/** - * \brief Perform a safe conditional copy of MPI which doesn't - * reveal whether the condition was true or not. - * - * \param X The MPI to conditionally assign to. This must point - * to an initialized MPI. - * \param Y The MPI to be assigned from. This must point to an - * initialized MPI. - * \param assign The condition deciding whether to perform the - * assignment or not. Possible values: - * * \c 1: Perform the assignment `X = Y`. - * * \c 0: Keep the original value of \p X. - * - * \note This function is equivalent to - * `if( assign ) mbedtls_mpi_copy( X, Y );` - * except that it avoids leaking any information about whether - * the assignment was done or not (the above code may leak - * information through branch prediction and/or memory access - * patterns analysis). - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_mpi_safe_cond_assign( mbedtls_mpi *X, const mbedtls_mpi *Y, unsigned char assign ); - -/** - * \brief Perform a safe conditional swap which doesn't - * reveal whether the condition was true or not. - * - * \param X The first MPI. This must be initialized. - * \param Y The second MPI. This must be initialized. - * \param assign The condition deciding whether to perform - * the swap or not. Possible values: - * * \c 1: Swap the values of \p X and \p Y. - * * \c 0: Keep the original values of \p X and \p Y. - * - * \note This function is equivalent to - * if( assign ) mbedtls_mpi_swap( X, Y ); - * except that it avoids leaking any information about whether - * the assignment was done or not (the above code may leak - * information through branch prediction and/or memory access - * patterns analysis). - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. - * \return Another negative error code on other kinds of failure. - * - */ -int mbedtls_mpi_safe_cond_swap( mbedtls_mpi *X, mbedtls_mpi *Y, unsigned char assign ); - -/** - * \brief Store integer value in MPI. - * - * \param X The MPI to set. This must be initialized. - * \param z The value to use. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_mpi_lset( mbedtls_mpi *X, mbedtls_mpi_sint z ); - -/** - * \brief Get a specific bit from an MPI. - * - * \param X The MPI to query. This must be initialized. - * \param pos Zero-based index of the bit to query. - * - * \return \c 0 or \c 1 on success, depending on whether bit \c pos - * of \c X is unset or set. - * \return A negative error code on failure. - */ -int mbedtls_mpi_get_bit( const mbedtls_mpi *X, size_t pos ); - -/** - * \brief Modify a specific bit in an MPI. - * - * \note This function will grow the target MPI if necessary to set a - * bit to \c 1 in a not yet existing limb. It will not grow if - * the bit should be set to \c 0. - * - * \param X The MPI to modify. This must be initialized. - * \param pos Zero-based index of the bit to modify. - * \param val The desired value of bit \c pos: \c 0 or \c 1. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_mpi_set_bit( mbedtls_mpi *X, size_t pos, unsigned char val ); - -/** - * \brief Return the number of bits of value \c 0 before the - * least significant bit of value \c 1. - * - * \note This is the same as the zero-based index of - * the least significant bit of value \c 1. - * - * \param X The MPI to query. - * - * \return The number of bits of value \c 0 before the least significant - * bit of value \c 1 in \p X. - */ -size_t mbedtls_mpi_lsb( const mbedtls_mpi *X ); - -/** - * \brief Return the number of bits up to and including the most - * significant bit of value \c 1. - * - * * \note This is same as the one-based index of the most - * significant bit of value \c 1. - * - * \param X The MPI to query. This must point to an initialized MPI. - * - * \return The number of bits up to and including the most - * significant bit of value \c 1. - */ -size_t mbedtls_mpi_bitlen( const mbedtls_mpi *X ); - -/** - * \brief Return the total size of an MPI value in bytes. - * - * \param X The MPI to use. This must point to an initialized MPI. - * - * \note The value returned by this function may be less than - * the number of bytes used to store \p X internally. - * This happens if and only if there are trailing bytes - * of value zero. - * - * \return The least number of bytes capable of storing - * the absolute value of \p X. - */ -size_t mbedtls_mpi_size( const mbedtls_mpi *X ); - -/** - * \brief Import an MPI from an ASCII string. - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param radix The numeric base of the input string. - * \param s Null-terminated string buffer. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_mpi_read_string( mbedtls_mpi *X, int radix, const char *s ); - -/** - * \brief Export an MPI to an ASCII string. - * - * \param X The source MPI. This must point to an initialized MPI. - * \param radix The numeric base of the output string. - * \param buf The buffer to write the string to. This must be writable - * buffer of length \p buflen Bytes. - * \param buflen The available size in Bytes of \p buf. - * \param olen The address at which to store the length of the string - * written, including the final \c NULL byte. This must - * not be \c NULL. - * - * \note You can call this function with `buflen == 0` to obtain the - * minimum required buffer size in `*olen`. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if the target buffer \p buf - * is too small to hold the value of \p X in the desired base. - * In this case, `*olen` is nonetheless updated to contain the - * size of \p buf required for a successful call. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_write_string( const mbedtls_mpi *X, int radix, - char *buf, size_t buflen, size_t *olen ); - -#if defined(MBEDTLS_FS_IO) -/** - * \brief Read an MPI from a line in an opened file. - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param radix The numeric base of the string representation used - * in the source line. - * \param fin The input file handle to use. This must not be \c NULL. - * - * \note On success, this function advances the file stream - * to the end of the current line or to EOF. - * - * The function returns \c 0 on an empty line. - * - * Leading whitespaces are ignored, as is a - * '0x' prefix for radix \c 16. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if the file read buffer - * is too small. - * \return Another negative error code on failure. - */ -int mbedtls_mpi_read_file( mbedtls_mpi *X, int radix, FILE *fin ); - -/** - * \brief Export an MPI into an opened file. - * - * \param p A string prefix to emit prior to the MPI data. - * For example, this might be a label, or "0x" when - * printing in base \c 16. This may be \c NULL if no prefix - * is needed. - * \param X The source MPI. This must point to an initialized MPI. - * \param radix The numeric base to be used in the emitted string. - * \param fout The output file handle. This may be \c NULL, in which case - * the output is written to \c stdout. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_mpi_write_file( const char *p, const mbedtls_mpi *X, - int radix, FILE *fout ); -#endif /* MBEDTLS_FS_IO */ - -/** - * \brief Import an MPI from unsigned big endian binary data. - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param buf The input buffer. This must be a readable buffer of length - * \p buflen Bytes. - * \param buflen The length of the input buffer \p p in Bytes. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_read_binary( mbedtls_mpi *X, const unsigned char *buf, - size_t buflen ); - -/** - * \brief Import X from unsigned binary data, little endian - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param buf The input buffer. This must be a readable buffer of length - * \p buflen Bytes. - * \param buflen The length of the input buffer \p p in Bytes. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_read_binary_le( mbedtls_mpi *X, - const unsigned char *buf, size_t buflen ); - -/** - * \brief Export X into unsigned binary data, big endian. - * Always fills the whole buffer, which will start with zeros - * if the number is smaller. - * - * \param X The source MPI. This must point to an initialized MPI. - * \param buf The output buffer. This must be a writable buffer of length - * \p buflen Bytes. - * \param buflen The size of the output buffer \p buf in Bytes. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if \p buf isn't - * large enough to hold the value of \p X. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_write_binary( const mbedtls_mpi *X, unsigned char *buf, - size_t buflen ); - -/** - * \brief Export X into unsigned binary data, little endian. - * Always fills the whole buffer, which will end with zeros - * if the number is smaller. - * - * \param X The source MPI. This must point to an initialized MPI. - * \param buf The output buffer. This must be a writable buffer of length - * \p buflen Bytes. - * \param buflen The size of the output buffer \p buf in Bytes. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL if \p buf isn't - * large enough to hold the value of \p X. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_write_binary_le( const mbedtls_mpi *X, - unsigned char *buf, size_t buflen ); - -/** - * \brief Perform a left-shift on an MPI: X <<= count - * - * \param X The MPI to shift. This must point to an initialized MPI. - * \param count The number of bits to shift by. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_shift_l( mbedtls_mpi *X, size_t count ); - -/** - * \brief Perform a right-shift on an MPI: X >>= count - * - * \param X The MPI to shift. This must point to an initialized MPI. - * \param count The number of bits to shift by. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_shift_r( mbedtls_mpi *X, size_t count ); - -/** - * \brief Compare the absolute values of two MPIs. - * - * \param X The left-hand MPI. This must point to an initialized MPI. - * \param Y The right-hand MPI. This must point to an initialized MPI. - * - * \return \c 1 if `|X|` is greater than `|Y|`. - * \return \c -1 if `|X|` is lesser than `|Y|`. - * \return \c 0 if `|X|` is equal to `|Y|`. - */ -int mbedtls_mpi_cmp_abs( const mbedtls_mpi *X, const mbedtls_mpi *Y ); - -/** - * \brief Compare two MPIs. - * - * \param X The left-hand MPI. This must point to an initialized MPI. - * \param Y The right-hand MPI. This must point to an initialized MPI. - * - * \return \c 1 if \p X is greater than \p Y. - * \return \c -1 if \p X is lesser than \p Y. - * \return \c 0 if \p X is equal to \p Y. - */ -int mbedtls_mpi_cmp_mpi( const mbedtls_mpi *X, const mbedtls_mpi *Y ); - -/** - * \brief Check if an MPI is less than the other in constant time. - * - * \param X The left-hand MPI. This must point to an initialized MPI - * with the same allocated length as Y. - * \param Y The right-hand MPI. This must point to an initialized MPI - * with the same allocated length as X. - * \param ret The result of the comparison: - * \c 1 if \p X is less than \p Y. - * \c 0 if \p X is greater than or equal to \p Y. - * - * \return 0 on success. - * \return MBEDTLS_ERR_MPI_BAD_INPUT_DATA if the allocated length of - * the two input MPIs is not the same. - */ -int mbedtls_mpi_lt_mpi_ct( const mbedtls_mpi *X, const mbedtls_mpi *Y, - unsigned *ret ); - -/** - * \brief Compare an MPI with an integer. - * - * \param X The left-hand MPI. This must point to an initialized MPI. - * \param z The integer value to compare \p X to. - * - * \return \c 1 if \p X is greater than \p z. - * \return \c -1 if \p X is lesser than \p z. - * \return \c 0 if \p X is equal to \p z. - */ -int mbedtls_mpi_cmp_int( const mbedtls_mpi *X, mbedtls_mpi_sint z ); - -/** - * \brief Perform an unsigned addition of MPIs: X = |A| + |B| - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param A The first summand. This must point to an initialized MPI. - * \param B The second summand. This must point to an initialized MPI. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_add_abs( mbedtls_mpi *X, const mbedtls_mpi *A, - const mbedtls_mpi *B ); - -/** - * \brief Perform an unsigned subtraction of MPIs: X = |A| - |B| - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param A The minuend. This must point to an initialized MPI. - * \param B The subtrahend. This must point to an initialized MPI. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_NEGATIVE_VALUE if \p B is greater than \p A. - * \return Another negative error code on different kinds of failure. - * - */ -int mbedtls_mpi_sub_abs( mbedtls_mpi *X, const mbedtls_mpi *A, - const mbedtls_mpi *B ); - -/** - * \brief Perform a signed addition of MPIs: X = A + B - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param A The first summand. This must point to an initialized MPI. - * \param B The second summand. This must point to an initialized MPI. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_add_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, - const mbedtls_mpi *B ); - -/** - * \brief Perform a signed subtraction of MPIs: X = A - B - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param A The minuend. This must point to an initialized MPI. - * \param B The subtrahend. This must point to an initialized MPI. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_sub_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, - const mbedtls_mpi *B ); - -/** - * \brief Perform a signed addition of an MPI and an integer: X = A + b - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param A The first summand. This must point to an initialized MPI. - * \param b The second summand. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_add_int( mbedtls_mpi *X, const mbedtls_mpi *A, - mbedtls_mpi_sint b ); - -/** - * \brief Perform a signed subtraction of an MPI and an integer: - * X = A - b - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param A The minuend. This must point to an initialized MPI. - * \param b The subtrahend. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_sub_int( mbedtls_mpi *X, const mbedtls_mpi *A, - mbedtls_mpi_sint b ); - -/** - * \brief Perform a multiplication of two MPIs: X = A * B - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param A The first factor. This must point to an initialized MPI. - * \param B The second factor. This must point to an initialized MPI. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return Another negative error code on different kinds of failure. - * - */ -int mbedtls_mpi_mul_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, - const mbedtls_mpi *B ); - -/** - * \brief Perform a multiplication of an MPI with an unsigned integer: - * X = A * b - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param A The first factor. This must point to an initialized MPI. - * \param b The second factor. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return Another negative error code on different kinds of failure. - * - */ -int mbedtls_mpi_mul_int( mbedtls_mpi *X, const mbedtls_mpi *A, - mbedtls_mpi_uint b ); - -/** - * \brief Perform a division with remainder of two MPIs: - * A = Q * B + R - * - * \param Q The destination MPI for the quotient. - * This may be \c NULL if the value of the - * quotient is not needed. - * \param R The destination MPI for the remainder value. - * This may be \c NULL if the value of the - * remainder is not needed. - * \param A The dividend. This must point to an initialized MPi. - * \param B The divisor. This must point to an initialized MPI. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. - * \return #MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if \p B equals zero. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, - const mbedtls_mpi *B ); - -/** - * \brief Perform a division with remainder of an MPI by an integer: - * A = Q * b + R - * - * \param Q The destination MPI for the quotient. - * This may be \c NULL if the value of the - * quotient is not needed. - * \param R The destination MPI for the remainder value. - * This may be \c NULL if the value of the - * remainder is not needed. - * \param A The dividend. This must point to an initialized MPi. - * \param b The divisor. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. - * \return #MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if \p b equals zero. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_div_int( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, - mbedtls_mpi_sint b ); - -/** - * \brief Perform a modular reduction. R = A mod B - * - * \param R The destination MPI for the residue value. - * This must point to an initialized MPI. - * \param A The MPI to compute the residue of. - * This must point to an initialized MPI. - * \param B The base of the modular reduction. - * This must point to an initialized MPI. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return #MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if \p B equals zero. - * \return #MBEDTLS_ERR_MPI_NEGATIVE_VALUE if \p B is negative. - * \return Another negative error code on different kinds of failure. - * - */ -int mbedtls_mpi_mod_mpi( mbedtls_mpi *R, const mbedtls_mpi *A, - const mbedtls_mpi *B ); - -/** - * \brief Perform a modular reduction with respect to an integer. - * r = A mod b - * - * \param r The address at which to store the residue. - * This must not be \c NULL. - * \param A The MPI to compute the residue of. - * This must point to an initialized MPi. - * \param b The integer base of the modular reduction. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return #MBEDTLS_ERR_MPI_DIVISION_BY_ZERO if \p b equals zero. - * \return #MBEDTLS_ERR_MPI_NEGATIVE_VALUE if \p b is negative. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_mod_int( mbedtls_mpi_uint *r, const mbedtls_mpi *A, - mbedtls_mpi_sint b ); - -/** - * \brief Perform a sliding-window exponentiation: X = A^E mod N - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param A The base of the exponentiation. - * This must point to an initialized MPI. - * \param E The exponent MPI. This must point to an initialized MPI. - * \param N The base for the modular reduction. This must point to an - * initialized MPI. - * \param _RR A helper MPI depending solely on \p N which can be used to - * speed-up multiple modular exponentiations for the same value - * of \p N. This may be \c NULL. If it is not \c NULL, it must - * point to an initialized MPI. If it hasn't been used after - * the call to mbedtls_mpi_init(), this function will compute - * the helper value and store it in \p _RR for reuse on - * subsequent calls to this function. Otherwise, the function - * will assume that \p _RR holds the helper value set by a - * previous call to mbedtls_mpi_exp_mod(), and reuse it. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return #MBEDTLS_ERR_MPI_BAD_INPUT_DATA if \c N is negative or - * even, or if \c E is negative. - * \return Another negative error code on different kinds of failures. - * - */ -int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, - const mbedtls_mpi *E, const mbedtls_mpi *N, - mbedtls_mpi *_RR ); - -/** - * \brief Fill an MPI with a number of random bytes. - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param size The number of random bytes to generate. - * \param f_rng The RNG function to use. This must not be \c NULL. - * \param p_rng The RNG parameter to be passed to \p f_rng. This may be - * \c NULL if \p f_rng doesn't need a context argument. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return Another negative error code on failure. - * - * \note The bytes obtained from the RNG are interpreted - * as a big-endian representation of an MPI; this can - * be relevant in applications like deterministic ECDSA. - */ -int mbedtls_mpi_fill_random( mbedtls_mpi *X, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Compute the greatest common divisor: G = gcd(A, B) - * - * \param G The destination MPI. This must point to an initialized MPI. - * \param A The first operand. This must point to an initialized MPI. - * \param B The second operand. This must point to an initialized MPI. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_mpi_gcd( mbedtls_mpi *G, const mbedtls_mpi *A, - const mbedtls_mpi *B ); - -/** - * \brief Compute the modular inverse: X = A^-1 mod N - * - * \param X The destination MPI. This must point to an initialized MPI. - * \param A The MPI to calculate the modular inverse of. This must point - * to an initialized MPI. - * \param N The base of the modular inversion. This must point to an - * initialized MPI. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return #MBEDTLS_ERR_MPI_BAD_INPUT_DATA if \p N is less than - * or equal to one. - * \return #MBEDTLS_ERR_MPI_NOT_ACCEPTABLE if \p has no modular inverse - * with respect to \p N. - */ -int mbedtls_mpi_inv_mod( mbedtls_mpi *X, const mbedtls_mpi *A, - const mbedtls_mpi *N ); - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief Perform a Miller-Rabin primality test with error - * probability of 2-80. - * - * \deprecated Superseded by mbedtls_mpi_is_prime_ext() which allows - * specifying the number of Miller-Rabin rounds. - * - * \param X The MPI to check for primality. - * This must point to an initialized MPI. - * \param f_rng The RNG function to use. This must not be \c NULL. - * \param p_rng The RNG parameter to be passed to \p f_rng. - * This may be \c NULL if \p f_rng doesn't use a - * context parameter. - * - * \return \c 0 if successful, i.e. \p X is probably prime. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return #MBEDTLS_ERR_MPI_NOT_ACCEPTABLE if \p X is not prime. - * \return Another negative error code on other kinds of failure. - */ -MBEDTLS_DEPRECATED int mbedtls_mpi_is_prime( const mbedtls_mpi *X, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -/** - * \brief Miller-Rabin primality test. - * - * \warning If \p X is potentially generated by an adversary, for example - * when validating cryptographic parameters that you didn't - * generate yourself and that are supposed to be prime, then - * \p rounds should be at least the half of the security - * strength of the cryptographic algorithm. On the other hand, - * if \p X is chosen uniformly or non-adversially (as is the - * case when mbedtls_mpi_gen_prime calls this function), then - * \p rounds can be much lower. - * - * \param X The MPI to check for primality. - * This must point to an initialized MPI. - * \param rounds The number of bases to perform the Miller-Rabin primality - * test for. The probability of returning 0 on a composite is - * at most 2-2*\p rounds. - * \param f_rng The RNG function to use. This must not be \c NULL. - * \param p_rng The RNG parameter to be passed to \p f_rng. - * This may be \c NULL if \p f_rng doesn't use - * a context parameter. - * - * \return \c 0 if successful, i.e. \p X is probably prime. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return #MBEDTLS_ERR_MPI_NOT_ACCEPTABLE if \p X is not prime. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_mpi_is_prime_ext( const mbedtls_mpi *X, int rounds, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); /** * \brief Flags for mbedtls_mpi_gen_prime() * @@ -975,42 +99,53 @@ typedef enum { MBEDTLS_MPI_GEN_PRIME_FLAG_LOW_ERR = 0x0002, /**< lower error rate from 2-80 to 2-128 */ } mbedtls_mpi_gen_prime_flag_t; -/** - * \brief Generate a prime number. - * - * \param X The destination MPI to store the generated prime in. - * This must point to an initialized MPi. - * \param nbits The required size of the destination MPI in bits. - * This must be between \c 3 and #MBEDTLS_MPI_MAX_BITS. - * \param flags A mask of flags of type #mbedtls_mpi_gen_prime_flag_t. - * \param f_rng The RNG function to use. This must not be \c NULL. - * \param p_rng The RNG parameter to be passed to \p f_rng. - * This may be \c NULL if \p f_rng doesn't use - * a context parameter. - * - * \return \c 0 if successful, in which case \p X holds a - * probably prime number. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if a memory allocation failed. - * \return #MBEDTLS_ERR_MPI_BAD_INPUT_DATA if `nbits` is not between - * \c 3 and #MBEDTLS_MPI_MAX_BITS. - */ -int mbedtls_mpi_gen_prime( mbedtls_mpi *X, size_t nbits, int flags, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); +void mbedtls_mpi_init( mbedtls_mpi * ); +void mbedtls_mpi_free( mbedtls_mpi * ); +int mbedtls_mpi_grow( mbedtls_mpi *, size_t ); +int mbedtls_mpi_shrink( mbedtls_mpi *, size_t ); +int mbedtls_mpi_copy( mbedtls_mpi *, const mbedtls_mpi * ); +void mbedtls_mpi_swap( mbedtls_mpi *, mbedtls_mpi * ); +int mbedtls_mpi_safe_cond_assign( mbedtls_mpi *, const mbedtls_mpi *, unsigned char ); +int mbedtls_mpi_safe_cond_swap( mbedtls_mpi *, mbedtls_mpi *, unsigned char ); +int mbedtls_mpi_lset( mbedtls_mpi *, mbedtls_mpi_sint ); +int mbedtls_mpi_get_bit( const mbedtls_mpi *, size_t ); +int mbedtls_mpi_set_bit( mbedtls_mpi *, size_t, unsigned char ); +size_t mbedtls_mpi_lsb( const mbedtls_mpi * ); +size_t mbedtls_mpi_bitlen( const mbedtls_mpi * ); +size_t mbedtls_mpi_size( const mbedtls_mpi * ); +int mbedtls_mpi_read_string( mbedtls_mpi *, int, const char * ); +int mbedtls_mpi_write_string( const mbedtls_mpi *, int, char *, size_t, size_t * ); +int mbedtls_mpi_read_file( mbedtls_mpi *, int, FILE * ); +int mbedtls_mpi_write_file( const char *, const mbedtls_mpi *, int, FILE * ); +int mbedtls_mpi_read_binary( mbedtls_mpi *, const unsigned char *, size_t ); +int mbedtls_mpi_read_binary_le( mbedtls_mpi *, const unsigned char *, size_t ); +int mbedtls_mpi_write_binary( const mbedtls_mpi *, unsigned char *, size_t ); +int mbedtls_mpi_write_binary_le( const mbedtls_mpi *, unsigned char *, size_t ); +int mbedtls_mpi_shift_l( mbedtls_mpi *, size_t ); +int mbedtls_mpi_shift_r( mbedtls_mpi *, size_t ); +int mbedtls_mpi_cmp_abs( const mbedtls_mpi *, const mbedtls_mpi * ); +int mbedtls_mpi_cmp_mpi( const mbedtls_mpi *, const mbedtls_mpi * ); +int mbedtls_mpi_lt_mpi_ct( const mbedtls_mpi *, const mbedtls_mpi *, unsigned * ); +int mbedtls_mpi_cmp_int( const mbedtls_mpi *, mbedtls_mpi_sint ); +int mbedtls_mpi_add_abs( mbedtls_mpi *, const mbedtls_mpi *, const mbedtls_mpi * ); +int mbedtls_mpi_sub_abs( mbedtls_mpi *, const mbedtls_mpi *, const mbedtls_mpi * ); +int mbedtls_mpi_add_mpi( mbedtls_mpi *, const mbedtls_mpi *, const mbedtls_mpi * ); +int mbedtls_mpi_sub_mpi( mbedtls_mpi *, const mbedtls_mpi *, const mbedtls_mpi * ); +int mbedtls_mpi_add_int( mbedtls_mpi *, const mbedtls_mpi *, mbedtls_mpi_sint ); +int mbedtls_mpi_sub_int( mbedtls_mpi *, const mbedtls_mpi *, mbedtls_mpi_sint ); +int mbedtls_mpi_mul_mpi( mbedtls_mpi *, const mbedtls_mpi *, const mbedtls_mpi * ); +int mbedtls_mpi_mul_int( mbedtls_mpi *, const mbedtls_mpi *, mbedtls_mpi_uint ); +int mbedtls_mpi_div_mpi( mbedtls_mpi *, mbedtls_mpi *, const mbedtls_mpi *, const mbedtls_mpi * ); +int mbedtls_mpi_div_int( mbedtls_mpi *, mbedtls_mpi *, const mbedtls_mpi *, mbedtls_mpi_sint ); +int mbedtls_mpi_mod_mpi( mbedtls_mpi *, const mbedtls_mpi *, const mbedtls_mpi * ); +int mbedtls_mpi_mod_int( mbedtls_mpi_uint *, const mbedtls_mpi *, mbedtls_mpi_sint ); +int mbedtls_mpi_exp_mod( mbedtls_mpi *, const mbedtls_mpi *, const mbedtls_mpi *, const mbedtls_mpi *, mbedtls_mpi * ); +int mbedtls_mpi_fill_random( mbedtls_mpi *, size_t, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_mpi_gcd( mbedtls_mpi *, const mbedtls_mpi *, const mbedtls_mpi * ); +int mbedtls_mpi_inv_mod( mbedtls_mpi *, const mbedtls_mpi *, const mbedtls_mpi * ); +int mbedtls_mpi_is_prime_ext( const mbedtls_mpi *, int, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_mpi_gen_prime( mbedtls_mpi *, size_t, int, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_mpi_self_test( int ); -#if defined(MBEDTLS_SELF_TEST) - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int mbedtls_mpi_self_test( int verbose ); - -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* bignum.h */ +COSMOPOLITAN_C_END_ +#endif /* MBEDTLS_BIGNUM_H_ */ diff --git a/third_party/mbedtls/blowfish.c b/third_party/mbedtls/blowfish.c deleted file mode 100644 index f2679fd75..000000000 --- a/third_party/mbedtls/blowfish.c +++ /dev/null @@ -1,697 +0,0 @@ -/* clang-format off */ - -asm(".ident\t\"\\n\\n\ -Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); -asm(".include \"libc/disclaimer.inc\""); - -/* - * Blowfish implementation - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * The Blowfish block cipher was designed by Bruce Schneier in 1993. - * http://www.schneier.com/blowfish.html - * http://en.wikipedia.org/wiki/Blowfish_%28cipher%29 - * - */ - -#include "libc/str/str.h" -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_BLOWFISH_C) - -#include "third_party/mbedtls/blowfish.h" -#include "third_party/mbedtls/platform_util.h" - - -#if !defined(MBEDTLS_BLOWFISH_ALT) - -/* Parameter validation macros */ -#define BLOWFISH_VALIDATE_RET( cond ) \ - MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA ) -#define BLOWFISH_VALIDATE( cond ) \ - MBEDTLS_INTERNAL_VALIDATE( cond ) - -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - -static const uint32_t P[MBEDTLS_BLOWFISH_ROUNDS + 2] = { - 0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L, - 0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L, - 0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL, - 0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L, - 0x9216D5D9L, 0x8979FB1BL -}; - -/* declarations of data at the end of this file */ -static const uint32_t S[4][256]; - -static uint32_t F( mbedtls_blowfish_context *ctx, uint32_t x ) -{ - unsigned short a, b, c, d; - uint32_t y; - - d = (unsigned short)(x & 0xFF); - x >>= 8; - c = (unsigned short)(x & 0xFF); - x >>= 8; - b = (unsigned short)(x & 0xFF); - x >>= 8; - a = (unsigned short)(x & 0xFF); - y = ctx->S[0][a] + ctx->S[1][b]; - y = y ^ ctx->S[2][c]; - y = y + ctx->S[3][d]; - - return( y ); -} - -static void blowfish_enc( mbedtls_blowfish_context *ctx, uint32_t *xl, uint32_t *xr ) -{ - uint32_t Xl, Xr, temp; - short i; - - Xl = *xl; - Xr = *xr; - - for( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS; ++i ) - { - Xl = Xl ^ ctx->P[i]; - Xr = F( ctx, Xl ) ^ Xr; - - temp = Xl; - Xl = Xr; - Xr = temp; - } - - temp = Xl; - Xl = Xr; - Xr = temp; - - Xr = Xr ^ ctx->P[MBEDTLS_BLOWFISH_ROUNDS]; - Xl = Xl ^ ctx->P[MBEDTLS_BLOWFISH_ROUNDS + 1]; - - *xl = Xl; - *xr = Xr; -} - -static void blowfish_dec( mbedtls_blowfish_context *ctx, uint32_t *xl, uint32_t *xr ) -{ - uint32_t Xl, Xr, temp; - short i; - - Xl = *xl; - Xr = *xr; - - for( i = MBEDTLS_BLOWFISH_ROUNDS + 1; i > 1; --i ) - { - Xl = Xl ^ ctx->P[i]; - Xr = F( ctx, Xl ) ^ Xr; - - temp = Xl; - Xl = Xr; - Xr = temp; - } - - temp = Xl; - Xl = Xr; - Xr = temp; - - Xr = Xr ^ ctx->P[1]; - Xl = Xl ^ ctx->P[0]; - - *xl = Xl; - *xr = Xr; -} - -void mbedtls_blowfish_init( mbedtls_blowfish_context *ctx ) -{ - BLOWFISH_VALIDATE( ctx != NULL ); - memset( ctx, 0, sizeof( mbedtls_blowfish_context ) ); -} - -void mbedtls_blowfish_free( mbedtls_blowfish_context *ctx ) -{ - if( ctx == NULL ) - return; - - mbedtls_platform_zeroize( ctx, sizeof( mbedtls_blowfish_context ) ); -} - -/* - * Blowfish key schedule - */ -int mbedtls_blowfish_setkey( mbedtls_blowfish_context *ctx, - const unsigned char *key, - unsigned int keybits ) -{ - unsigned int i, j, k; - uint32_t data, datal, datar; - BLOWFISH_VALIDATE_RET( ctx != NULL ); - BLOWFISH_VALIDATE_RET( key != NULL ); - - if( keybits < MBEDTLS_BLOWFISH_MIN_KEY_BITS || - keybits > MBEDTLS_BLOWFISH_MAX_KEY_BITS || - keybits % 8 != 0 ) - { - return( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA ); - } - - keybits >>= 3; - - for( i = 0; i < 4; i++ ) - { - for( j = 0; j < 256; j++ ) - ctx->S[i][j] = S[i][j]; - } - - j = 0; - for( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS + 2; ++i ) - { - data = 0x00000000; - for( k = 0; k < 4; ++k ) - { - data = ( data << 8 ) | key[j++]; - if( j >= keybits ) - j = 0; - } - ctx->P[i] = P[i] ^ data; - } - - datal = 0x00000000; - datar = 0x00000000; - - for( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS + 2; i += 2 ) - { - blowfish_enc( ctx, &datal, &datar ); - ctx->P[i] = datal; - ctx->P[i + 1] = datar; - } - - for( i = 0; i < 4; i++ ) - { - for( j = 0; j < 256; j += 2 ) - { - blowfish_enc( ctx, &datal, &datar ); - ctx->S[i][j] = datal; - ctx->S[i][j + 1] = datar; - } - } - return( 0 ); -} - -/* - * Blowfish-ECB block encryption/decryption - */ -int mbedtls_blowfish_crypt_ecb( mbedtls_blowfish_context *ctx, - int mode, - const unsigned char input[MBEDTLS_BLOWFISH_BLOCKSIZE], - unsigned char output[MBEDTLS_BLOWFISH_BLOCKSIZE] ) -{ - uint32_t X0, X1; - BLOWFISH_VALIDATE_RET( ctx != NULL ); - BLOWFISH_VALIDATE_RET( mode == MBEDTLS_BLOWFISH_ENCRYPT || - mode == MBEDTLS_BLOWFISH_DECRYPT ); - BLOWFISH_VALIDATE_RET( input != NULL ); - BLOWFISH_VALIDATE_RET( output != NULL ); - - GET_UINT32_BE( X0, input, 0 ); - GET_UINT32_BE( X1, input, 4 ); - - if( mode == MBEDTLS_BLOWFISH_DECRYPT ) - { - blowfish_dec( ctx, &X0, &X1 ); - } - else /* MBEDTLS_BLOWFISH_ENCRYPT */ - { - blowfish_enc( ctx, &X0, &X1 ); - } - - PUT_UINT32_BE( X0, output, 0 ); - PUT_UINT32_BE( X1, output, 4 ); - - return( 0 ); -} - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -/* - * Blowfish-CBC buffer encryption/decryption - */ -int mbedtls_blowfish_crypt_cbc( mbedtls_blowfish_context *ctx, - int mode, - size_t length, - unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ) -{ - int i; - unsigned char temp[MBEDTLS_BLOWFISH_BLOCKSIZE]; - BLOWFISH_VALIDATE_RET( ctx != NULL ); - BLOWFISH_VALIDATE_RET( mode == MBEDTLS_BLOWFISH_ENCRYPT || - mode == MBEDTLS_BLOWFISH_DECRYPT ); - BLOWFISH_VALIDATE_RET( iv != NULL ); - BLOWFISH_VALIDATE_RET( length == 0 || input != NULL ); - BLOWFISH_VALIDATE_RET( length == 0 || output != NULL ); - - if( length % MBEDTLS_BLOWFISH_BLOCKSIZE ) - return( MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH ); - - if( mode == MBEDTLS_BLOWFISH_DECRYPT ) - { - while( length > 0 ) - { - memcpy( temp, input, MBEDTLS_BLOWFISH_BLOCKSIZE ); - mbedtls_blowfish_crypt_ecb( ctx, mode, input, output ); - - for( i = 0; i < MBEDTLS_BLOWFISH_BLOCKSIZE;i++ ) - output[i] = (unsigned char)( output[i] ^ iv[i] ); - - memcpy( iv, temp, MBEDTLS_BLOWFISH_BLOCKSIZE ); - - input += MBEDTLS_BLOWFISH_BLOCKSIZE; - output += MBEDTLS_BLOWFISH_BLOCKSIZE; - length -= MBEDTLS_BLOWFISH_BLOCKSIZE; - } - } - else - { - while( length > 0 ) - { - for( i = 0; i < MBEDTLS_BLOWFISH_BLOCKSIZE; i++ ) - output[i] = (unsigned char)( input[i] ^ iv[i] ); - - mbedtls_blowfish_crypt_ecb( ctx, mode, output, output ); - memcpy( iv, output, MBEDTLS_BLOWFISH_BLOCKSIZE ); - - input += MBEDTLS_BLOWFISH_BLOCKSIZE; - output += MBEDTLS_BLOWFISH_BLOCKSIZE; - length -= MBEDTLS_BLOWFISH_BLOCKSIZE; - } - } - - return( 0 ); -} -#endif /* MBEDTLS_CIPHER_MODE_CBC */ - -#if defined(MBEDTLS_CIPHER_MODE_CFB) -/* - * Blowfish CFB buffer encryption/decryption - */ -int mbedtls_blowfish_crypt_cfb64( mbedtls_blowfish_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ) -{ - int c; - size_t n; - - BLOWFISH_VALIDATE_RET( ctx != NULL ); - BLOWFISH_VALIDATE_RET( mode == MBEDTLS_BLOWFISH_ENCRYPT || - mode == MBEDTLS_BLOWFISH_DECRYPT ); - BLOWFISH_VALIDATE_RET( iv != NULL ); - BLOWFISH_VALIDATE_RET( iv_off != NULL ); - BLOWFISH_VALIDATE_RET( length == 0 || input != NULL ); - BLOWFISH_VALIDATE_RET( length == 0 || output != NULL ); - - n = *iv_off; - if( n >= 8 ) - return( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA ); - - if( mode == MBEDTLS_BLOWFISH_DECRYPT ) - { - while( length-- ) - { - if( n == 0 ) - mbedtls_blowfish_crypt_ecb( ctx, MBEDTLS_BLOWFISH_ENCRYPT, iv, iv ); - - c = *input++; - *output++ = (unsigned char)( c ^ iv[n] ); - iv[n] = (unsigned char) c; - - n = ( n + 1 ) % MBEDTLS_BLOWFISH_BLOCKSIZE; - } - } - else - { - while( length-- ) - { - if( n == 0 ) - mbedtls_blowfish_crypt_ecb( ctx, MBEDTLS_BLOWFISH_ENCRYPT, iv, iv ); - - iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); - - n = ( n + 1 ) % MBEDTLS_BLOWFISH_BLOCKSIZE; - } - } - - *iv_off = n; - - return( 0 ); -} -#endif /*MBEDTLS_CIPHER_MODE_CFB */ - -#if defined(MBEDTLS_CIPHER_MODE_CTR) -/* - * Blowfish CTR buffer encryption/decryption - */ -int mbedtls_blowfish_crypt_ctr( mbedtls_blowfish_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[MBEDTLS_BLOWFISH_BLOCKSIZE], - unsigned char stream_block[MBEDTLS_BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ) -{ - int c, i; - size_t n; - BLOWFISH_VALIDATE_RET( ctx != NULL ); - BLOWFISH_VALIDATE_RET( nonce_counter != NULL ); - BLOWFISH_VALIDATE_RET( stream_block != NULL ); - BLOWFISH_VALIDATE_RET( nc_off != NULL ); - BLOWFISH_VALIDATE_RET( length == 0 || input != NULL ); - BLOWFISH_VALIDATE_RET( length == 0 || output != NULL ); - - n = *nc_off; - if( n >= 8 ) - return( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA ); - - while( length-- ) - { - if( n == 0 ) { - mbedtls_blowfish_crypt_ecb( ctx, MBEDTLS_BLOWFISH_ENCRYPT, nonce_counter, - stream_block ); - - for( i = MBEDTLS_BLOWFISH_BLOCKSIZE; i > 0; i-- ) - if( ++nonce_counter[i - 1] != 0 ) - break; - } - c = *input++; - *output++ = (unsigned char)( c ^ stream_block[n] ); - - n = ( n + 1 ) % MBEDTLS_BLOWFISH_BLOCKSIZE; - } - - *nc_off = n; - - return( 0 ); -} -#endif /* MBEDTLS_CIPHER_MODE_CTR */ - -static const uint32_t S[4][256] = { - { 0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L, - 0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L, - 0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L, - 0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL, - 0x0D95748FL, 0x728EB658L, 0x718BCD58L, 0x82154AEEL, - 0x7B54A41DL, 0xC25A59B5L, 0x9C30D539L, 0x2AF26013L, - 0xC5D1B023L, 0x286085F0L, 0xCA417918L, 0xB8DB38EFL, - 0x8E79DCB0L, 0x603A180EL, 0x6C9E0E8BL, 0xB01E8A3EL, - 0xD71577C1L, 0xBD314B27L, 0x78AF2FDAL, 0x55605C60L, - 0xE65525F3L, 0xAA55AB94L, 0x57489862L, 0x63E81440L, - 0x55CA396AL, 0x2AAB10B6L, 0xB4CC5C34L, 0x1141E8CEL, - 0xA15486AFL, 0x7C72E993L, 0xB3EE1411L, 0x636FBC2AL, - 0x2BA9C55DL, 0x741831F6L, 0xCE5C3E16L, 0x9B87931EL, - 0xAFD6BA33L, 0x6C24CF5CL, 0x7A325381L, 0x28958677L, - 0x3B8F4898L, 0x6B4BB9AFL, 0xC4BFE81BL, 0x66282193L, - 0x61D809CCL, 0xFB21A991L, 0x487CAC60L, 0x5DEC8032L, - 0xEF845D5DL, 0xE98575B1L, 0xDC262302L, 0xEB651B88L, - 0x23893E81L, 0xD396ACC5L, 0x0F6D6FF3L, 0x83F44239L, - 0x2E0B4482L, 0xA4842004L, 0x69C8F04AL, 0x9E1F9B5EL, - 0x21C66842L, 0xF6E96C9AL, 0x670C9C61L, 0xABD388F0L, - 0x6A51A0D2L, 0xD8542F68L, 0x960FA728L, 0xAB5133A3L, - 0x6EEF0B6CL, 0x137A3BE4L, 0xBA3BF050L, 0x7EFB2A98L, - 0xA1F1651DL, 0x39AF0176L, 0x66CA593EL, 0x82430E88L, - 0x8CEE8619L, 0x456F9FB4L, 0x7D84A5C3L, 0x3B8B5EBEL, - 0xE06F75D8L, 0x85C12073L, 0x401A449FL, 0x56C16AA6L, - 0x4ED3AA62L, 0x363F7706L, 0x1BFEDF72L, 0x429B023DL, - 0x37D0D724L, 0xD00A1248L, 0xDB0FEAD3L, 0x49F1C09BL, - 0x075372C9L, 0x80991B7BL, 0x25D479D8L, 0xF6E8DEF7L, - 0xE3FE501AL, 0xB6794C3BL, 0x976CE0BDL, 0x04C006BAL, - 0xC1A94FB6L, 0x409F60C4L, 0x5E5C9EC2L, 0x196A2463L, - 0x68FB6FAFL, 0x3E6C53B5L, 0x1339B2EBL, 0x3B52EC6FL, - 0x6DFC511FL, 0x9B30952CL, 0xCC814544L, 0xAF5EBD09L, - 0xBEE3D004L, 0xDE334AFDL, 0x660F2807L, 0x192E4BB3L, - 0xC0CBA857L, 0x45C8740FL, 0xD20B5F39L, 0xB9D3FBDBL, - 0x5579C0BDL, 0x1A60320AL, 0xD6A100C6L, 0x402C7279L, - 0x679F25FEL, 0xFB1FA3CCL, 0x8EA5E9F8L, 0xDB3222F8L, - 0x3C7516DFL, 0xFD616B15L, 0x2F501EC8L, 0xAD0552ABL, - 0x323DB5FAL, 0xFD238760L, 0x53317B48L, 0x3E00DF82L, - 0x9E5C57BBL, 0xCA6F8CA0L, 0x1A87562EL, 0xDF1769DBL, - 0xD542A8F6L, 0x287EFFC3L, 0xAC6732C6L, 0x8C4F5573L, - 0x695B27B0L, 0xBBCA58C8L, 0xE1FFA35DL, 0xB8F011A0L, - 0x10FA3D98L, 0xFD2183B8L, 0x4AFCB56CL, 0x2DD1D35BL, - 0x9A53E479L, 0xB6F84565L, 0xD28E49BCL, 0x4BFB9790L, - 0xE1DDF2DAL, 0xA4CB7E33L, 0x62FB1341L, 0xCEE4C6E8L, - 0xEF20CADAL, 0x36774C01L, 0xD07E9EFEL, 0x2BF11FB4L, - 0x95DBDA4DL, 0xAE909198L, 0xEAAD8E71L, 0x6B93D5A0L, - 0xD08ED1D0L, 0xAFC725E0L, 0x8E3C5B2FL, 0x8E7594B7L, - 0x8FF6E2FBL, 0xF2122B64L, 0x8888B812L, 0x900DF01CL, - 0x4FAD5EA0L, 0x688FC31CL, 0xD1CFF191L, 0xB3A8C1ADL, - 0x2F2F2218L, 0xBE0E1777L, 0xEA752DFEL, 0x8B021FA1L, - 0xE5A0CC0FL, 0xB56F74E8L, 0x18ACF3D6L, 0xCE89E299L, - 0xB4A84FE0L, 0xFD13E0B7L, 0x7CC43B81L, 0xD2ADA8D9L, - 0x165FA266L, 0x80957705L, 0x93CC7314L, 0x211A1477L, - 0xE6AD2065L, 0x77B5FA86L, 0xC75442F5L, 0xFB9D35CFL, - 0xEBCDAF0CL, 0x7B3E89A0L, 0xD6411BD3L, 0xAE1E7E49L, - 0x00250E2DL, 0x2071B35EL, 0x226800BBL, 0x57B8E0AFL, - 0x2464369BL, 0xF009B91EL, 0x5563911DL, 0x59DFA6AAL, - 0x78C14389L, 0xD95A537FL, 0x207D5BA2L, 0x02E5B9C5L, - 0x83260376L, 0x6295CFA9L, 0x11C81968L, 0x4E734A41L, - 0xB3472DCAL, 0x7B14A94AL, 0x1B510052L, 0x9A532915L, - 0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L, - 0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L, - 0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L, - 0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL }, - { 0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L, - 0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L, - 0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L, - 0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL, - 0x3F54989AL, 0x5B429D65L, 0x6B8FE4D6L, 0x99F73FD6L, - 0xA1D29C07L, 0xEFE830F5L, 0x4D2D38E6L, 0xF0255DC1L, - 0x4CDD2086L, 0x8470EB26L, 0x6382E9C6L, 0x021ECC5EL, - 0x09686B3FL, 0x3EBAEFC9L, 0x3C971814L, 0x6B6A70A1L, - 0x687F3584L, 0x52A0E286L, 0xB79C5305L, 0xAA500737L, - 0x3E07841CL, 0x7FDEAE5CL, 0x8E7D44ECL, 0x5716F2B8L, - 0xB03ADA37L, 0xF0500C0DL, 0xF01C1F04L, 0x0200B3FFL, - 0xAE0CF51AL, 0x3CB574B2L, 0x25837A58L, 0xDC0921BDL, - 0xD19113F9L, 0x7CA92FF6L, 0x94324773L, 0x22F54701L, - 0x3AE5E581L, 0x37C2DADCL, 0xC8B57634L, 0x9AF3DDA7L, - 0xA9446146L, 0x0FD0030EL, 0xECC8C73EL, 0xA4751E41L, - 0xE238CD99L, 0x3BEA0E2FL, 0x3280BBA1L, 0x183EB331L, - 0x4E548B38L, 0x4F6DB908L, 0x6F420D03L, 0xF60A04BFL, - 0x2CB81290L, 0x24977C79L, 0x5679B072L, 0xBCAF89AFL, - 0xDE9A771FL, 0xD9930810L, 0xB38BAE12L, 0xDCCF3F2EL, - 0x5512721FL, 0x2E6B7124L, 0x501ADDE6L, 0x9F84CD87L, - 0x7A584718L, 0x7408DA17L, 0xBC9F9ABCL, 0xE94B7D8CL, - 0xEC7AEC3AL, 0xDB851DFAL, 0x63094366L, 0xC464C3D2L, - 0xEF1C1847L, 0x3215D908L, 0xDD433B37L, 0x24C2BA16L, - 0x12A14D43L, 0x2A65C451L, 0x50940002L, 0x133AE4DDL, - 0x71DFF89EL, 0x10314E55L, 0x81AC77D6L, 0x5F11199BL, - 0x043556F1L, 0xD7A3C76BL, 0x3C11183BL, 0x5924A509L, - 0xF28FE6EDL, 0x97F1FBFAL, 0x9EBABF2CL, 0x1E153C6EL, - 0x86E34570L, 0xEAE96FB1L, 0x860E5E0AL, 0x5A3E2AB3L, - 0x771FE71CL, 0x4E3D06FAL, 0x2965DCB9L, 0x99E71D0FL, - 0x803E89D6L, 0x5266C825L, 0x2E4CC978L, 0x9C10B36AL, - 0xC6150EBAL, 0x94E2EA78L, 0xA5FC3C53L, 0x1E0A2DF4L, - 0xF2F74EA7L, 0x361D2B3DL, 0x1939260FL, 0x19C27960L, - 0x5223A708L, 0xF71312B6L, 0xEBADFE6EL, 0xEAC31F66L, - 0xE3BC4595L, 0xA67BC883L, 0xB17F37D1L, 0x018CFF28L, - 0xC332DDEFL, 0xBE6C5AA5L, 0x65582185L, 0x68AB9802L, - 0xEECEA50FL, 0xDB2F953BL, 0x2AEF7DADL, 0x5B6E2F84L, - 0x1521B628L, 0x29076170L, 0xECDD4775L, 0x619F1510L, - 0x13CCA830L, 0xEB61BD96L, 0x0334FE1EL, 0xAA0363CFL, - 0xB5735C90L, 0x4C70A239L, 0xD59E9E0BL, 0xCBAADE14L, - 0xEECC86BCL, 0x60622CA7L, 0x9CAB5CABL, 0xB2F3846EL, - 0x648B1EAFL, 0x19BDF0CAL, 0xA02369B9L, 0x655ABB50L, - 0x40685A32L, 0x3C2AB4B3L, 0x319EE9D5L, 0xC021B8F7L, - 0x9B540B19L, 0x875FA099L, 0x95F7997EL, 0x623D7DA8L, - 0xF837889AL, 0x97E32D77L, 0x11ED935FL, 0x16681281L, - 0x0E358829L, 0xC7E61FD6L, 0x96DEDFA1L, 0x7858BA99L, - 0x57F584A5L, 0x1B227263L, 0x9B83C3FFL, 0x1AC24696L, - 0xCDB30AEBL, 0x532E3054L, 0x8FD948E4L, 0x6DBC3128L, - 0x58EBF2EFL, 0x34C6FFEAL, 0xFE28ED61L, 0xEE7C3C73L, - 0x5D4A14D9L, 0xE864B7E3L, 0x42105D14L, 0x203E13E0L, - 0x45EEE2B6L, 0xA3AAABEAL, 0xDB6C4F15L, 0xFACB4FD0L, - 0xC742F442L, 0xEF6ABBB5L, 0x654F3B1DL, 0x41CD2105L, - 0xD81E799EL, 0x86854DC7L, 0xE44B476AL, 0x3D816250L, - 0xCF62A1F2L, 0x5B8D2646L, 0xFC8883A0L, 0xC1C7B6A3L, - 0x7F1524C3L, 0x69CB7492L, 0x47848A0BL, 0x5692B285L, - 0x095BBF00L, 0xAD19489DL, 0x1462B174L, 0x23820E00L, - 0x58428D2AL, 0x0C55F5EAL, 0x1DADF43EL, 0x233F7061L, - 0x3372F092L, 0x8D937E41L, 0xD65FECF1L, 0x6C223BDBL, - 0x7CDE3759L, 0xCBEE7460L, 0x4085F2A7L, 0xCE77326EL, - 0xA6078084L, 0x19F8509EL, 0xE8EFD855L, 0x61D99735L, - 0xA969A7AAL, 0xC50C06C2L, 0x5A04ABFCL, 0x800BCADCL, - 0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L, - 0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L, - 0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L, - 0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L }, - { 0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L, - 0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L, - 0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL, - 0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L, - 0x4D95FC1DL, 0x96B591AFL, 0x70F4DDD3L, 0x66A02F45L, - 0xBFBC09ECL, 0x03BD9785L, 0x7FAC6DD0L, 0x31CB8504L, - 0x96EB27B3L, 0x55FD3941L, 0xDA2547E6L, 0xABCA0A9AL, - 0x28507825L, 0x530429F4L, 0x0A2C86DAL, 0xE9B66DFBL, - 0x68DC1462L, 0xD7486900L, 0x680EC0A4L, 0x27A18DEEL, - 0x4F3FFEA2L, 0xE887AD8CL, 0xB58CE006L, 0x7AF4D6B6L, - 0xAACE1E7CL, 0xD3375FECL, 0xCE78A399L, 0x406B2A42L, - 0x20FE9E35L, 0xD9F385B9L, 0xEE39D7ABL, 0x3B124E8BL, - 0x1DC9FAF7L, 0x4B6D1856L, 0x26A36631L, 0xEAE397B2L, - 0x3A6EFA74L, 0xDD5B4332L, 0x6841E7F7L, 0xCA7820FBL, - 0xFB0AF54EL, 0xD8FEB397L, 0x454056ACL, 0xBA489527L, - 0x55533A3AL, 0x20838D87L, 0xFE6BA9B7L, 0xD096954BL, - 0x55A867BCL, 0xA1159A58L, 0xCCA92963L, 0x99E1DB33L, - 0xA62A4A56L, 0x3F3125F9L, 0x5EF47E1CL, 0x9029317CL, - 0xFDF8E802L, 0x04272F70L, 0x80BB155CL, 0x05282CE3L, - 0x95C11548L, 0xE4C66D22L, 0x48C1133FL, 0xC70F86DCL, - 0x07F9C9EEL, 0x41041F0FL, 0x404779A4L, 0x5D886E17L, - 0x325F51EBL, 0xD59BC0D1L, 0xF2BCC18FL, 0x41113564L, - 0x257B7834L, 0x602A9C60L, 0xDFF8E8A3L, 0x1F636C1BL, - 0x0E12B4C2L, 0x02E1329EL, 0xAF664FD1L, 0xCAD18115L, - 0x6B2395E0L, 0x333E92E1L, 0x3B240B62L, 0xEEBEB922L, - 0x85B2A20EL, 0xE6BA0D99L, 0xDE720C8CL, 0x2DA2F728L, - 0xD0127845L, 0x95B794FDL, 0x647D0862L, 0xE7CCF5F0L, - 0x5449A36FL, 0x877D48FAL, 0xC39DFD27L, 0xF33E8D1EL, - 0x0A476341L, 0x992EFF74L, 0x3A6F6EABL, 0xF4F8FD37L, - 0xA812DC60L, 0xA1EBDDF8L, 0x991BE14CL, 0xDB6E6B0DL, - 0xC67B5510L, 0x6D672C37L, 0x2765D43BL, 0xDCD0E804L, - 0xF1290DC7L, 0xCC00FFA3L, 0xB5390F92L, 0x690FED0BL, - 0x667B9FFBL, 0xCEDB7D9CL, 0xA091CF0BL, 0xD9155EA3L, - 0xBB132F88L, 0x515BAD24L, 0x7B9479BFL, 0x763BD6EBL, - 0x37392EB3L, 0xCC115979L, 0x8026E297L, 0xF42E312DL, - 0x6842ADA7L, 0xC66A2B3BL, 0x12754CCCL, 0x782EF11CL, - 0x6A124237L, 0xB79251E7L, 0x06A1BBE6L, 0x4BFB6350L, - 0x1A6B1018L, 0x11CAEDFAL, 0x3D25BDD8L, 0xE2E1C3C9L, - 0x44421659L, 0x0A121386L, 0xD90CEC6EL, 0xD5ABEA2AL, - 0x64AF674EL, 0xDA86A85FL, 0xBEBFE988L, 0x64E4C3FEL, - 0x9DBC8057L, 0xF0F7C086L, 0x60787BF8L, 0x6003604DL, - 0xD1FD8346L, 0xF6381FB0L, 0x7745AE04L, 0xD736FCCCL, - 0x83426B33L, 0xF01EAB71L, 0xB0804187L, 0x3C005E5FL, - 0x77A057BEL, 0xBDE8AE24L, 0x55464299L, 0xBF582E61L, - 0x4E58F48FL, 0xF2DDFDA2L, 0xF474EF38L, 0x8789BDC2L, - 0x5366F9C3L, 0xC8B38E74L, 0xB475F255L, 0x46FCD9B9L, - 0x7AEB2661L, 0x8B1DDF84L, 0x846A0E79L, 0x915F95E2L, - 0x466E598EL, 0x20B45770L, 0x8CD55591L, 0xC902DE4CL, - 0xB90BACE1L, 0xBB8205D0L, 0x11A86248L, 0x7574A99EL, - 0xB77F19B6L, 0xE0A9DC09L, 0x662D09A1L, 0xC4324633L, - 0xE85A1F02L, 0x09F0BE8CL, 0x4A99A025L, 0x1D6EFE10L, - 0x1AB93D1DL, 0x0BA5A4DFL, 0xA186F20FL, 0x2868F169L, - 0xDCB7DA83L, 0x573906FEL, 0xA1E2CE9BL, 0x4FCD7F52L, - 0x50115E01L, 0xA70683FAL, 0xA002B5C4L, 0x0DE6D027L, - 0x9AF88C27L, 0x773F8641L, 0xC3604C06L, 0x61A806B5L, - 0xF0177A28L, 0xC0F586E0L, 0x006058AAL, 0x30DC7D62L, - 0x11E69ED7L, 0x2338EA63L, 0x53C2DD94L, 0xC2C21634L, - 0xBBCBEE56L, 0x90BCB6DEL, 0xEBFC7DA1L, 0xCE591D76L, - 0x6F05E409L, 0x4B7C0188L, 0x39720A3DL, 0x7C927C24L, - 0x86E3725FL, 0x724D9DB9L, 0x1AC15BB4L, 0xD39EB8FCL, - 0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L, - 0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL, - 0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L, - 0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L }, - { 0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL, - 0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL, - 0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL, - 0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L, - 0x5748AB2FL, 0xBC946E79L, 0xC6A376D2L, 0x6549C2C8L, - 0x530FF8EEL, 0x468DDE7DL, 0xD5730A1DL, 0x4CD04DC6L, - 0x2939BBDBL, 0xA9BA4650L, 0xAC9526E8L, 0xBE5EE304L, - 0xA1FAD5F0L, 0x6A2D519AL, 0x63EF8CE2L, 0x9A86EE22L, - 0xC089C2B8L, 0x43242EF6L, 0xA51E03AAL, 0x9CF2D0A4L, - 0x83C061BAL, 0x9BE96A4DL, 0x8FE51550L, 0xBA645BD6L, - 0x2826A2F9L, 0xA73A3AE1L, 0x4BA99586L, 0xEF5562E9L, - 0xC72FEFD3L, 0xF752F7DAL, 0x3F046F69L, 0x77FA0A59L, - 0x80E4A915L, 0x87B08601L, 0x9B09E6ADL, 0x3B3EE593L, - 0xE990FD5AL, 0x9E34D797L, 0x2CF0B7D9L, 0x022B8B51L, - 0x96D5AC3AL, 0x017DA67DL, 0xD1CF3ED6L, 0x7C7D2D28L, - 0x1F9F25CFL, 0xADF2B89BL, 0x5AD6B472L, 0x5A88F54CL, - 0xE029AC71L, 0xE019A5E6L, 0x47B0ACFDL, 0xED93FA9BL, - 0xE8D3C48DL, 0x283B57CCL, 0xF8D56629L, 0x79132E28L, - 0x785F0191L, 0xED756055L, 0xF7960E44L, 0xE3D35E8CL, - 0x15056DD4L, 0x88F46DBAL, 0x03A16125L, 0x0564F0BDL, - 0xC3EB9E15L, 0x3C9057A2L, 0x97271AECL, 0xA93A072AL, - 0x1B3F6D9BL, 0x1E6321F5L, 0xF59C66FBL, 0x26DCF319L, - 0x7533D928L, 0xB155FDF5L, 0x03563482L, 0x8ABA3CBBL, - 0x28517711L, 0xC20AD9F8L, 0xABCC5167L, 0xCCAD925FL, - 0x4DE81751L, 0x3830DC8EL, 0x379D5862L, 0x9320F991L, - 0xEA7A90C2L, 0xFB3E7BCEL, 0x5121CE64L, 0x774FBE32L, - 0xA8B6E37EL, 0xC3293D46L, 0x48DE5369L, 0x6413E680L, - 0xA2AE0810L, 0xDD6DB224L, 0x69852DFDL, 0x09072166L, - 0xB39A460AL, 0x6445C0DDL, 0x586CDECFL, 0x1C20C8AEL, - 0x5BBEF7DDL, 0x1B588D40L, 0xCCD2017FL, 0x6BB4E3BBL, - 0xDDA26A7EL, 0x3A59FF45L, 0x3E350A44L, 0xBCB4CDD5L, - 0x72EACEA8L, 0xFA6484BBL, 0x8D6612AEL, 0xBF3C6F47L, - 0xD29BE463L, 0x542F5D9EL, 0xAEC2771BL, 0xF64E6370L, - 0x740E0D8DL, 0xE75B1357L, 0xF8721671L, 0xAF537D5DL, - 0x4040CB08L, 0x4EB4E2CCL, 0x34D2466AL, 0x0115AF84L, - 0xE1B00428L, 0x95983A1DL, 0x06B89FB4L, 0xCE6EA048L, - 0x6F3F3B82L, 0x3520AB82L, 0x011A1D4BL, 0x277227F8L, - 0x611560B1L, 0xE7933FDCL, 0xBB3A792BL, 0x344525BDL, - 0xA08839E1L, 0x51CE794BL, 0x2F32C9B7L, 0xA01FBAC9L, - 0xE01CC87EL, 0xBCC7D1F6L, 0xCF0111C3L, 0xA1E8AAC7L, - 0x1A908749L, 0xD44FBD9AL, 0xD0DADECBL, 0xD50ADA38L, - 0x0339C32AL, 0xC6913667L, 0x8DF9317CL, 0xE0B12B4FL, - 0xF79E59B7L, 0x43F5BB3AL, 0xF2D519FFL, 0x27D9459CL, - 0xBF97222CL, 0x15E6FC2AL, 0x0F91FC71L, 0x9B941525L, - 0xFAE59361L, 0xCEB69CEBL, 0xC2A86459L, 0x12BAA8D1L, - 0xB6C1075EL, 0xE3056A0CL, 0x10D25065L, 0xCB03A442L, - 0xE0EC6E0EL, 0x1698DB3BL, 0x4C98A0BEL, 0x3278E964L, - 0x9F1F9532L, 0xE0D392DFL, 0xD3A0342BL, 0x8971F21EL, - 0x1B0A7441L, 0x4BA3348CL, 0xC5BE7120L, 0xC37632D8L, - 0xDF359F8DL, 0x9B992F2EL, 0xE60B6F47L, 0x0FE3F11DL, - 0xE54CDA54L, 0x1EDAD891L, 0xCE6279CFL, 0xCD3E7E6FL, - 0x1618B166L, 0xFD2C1D05L, 0x848FD2C5L, 0xF6FB2299L, - 0xF523F357L, 0xA6327623L, 0x93A83531L, 0x56CCCD02L, - 0xACF08162L, 0x5A75EBB5L, 0x6E163697L, 0x88D273CCL, - 0xDE966292L, 0x81B949D0L, 0x4C50901BL, 0x71C65614L, - 0xE6C6C7BDL, 0x327A140AL, 0x45E1D006L, 0xC3F27B9AL, - 0xC9AA53FDL, 0x62A80F00L, 0xBB25BFE2L, 0x35BDD2F6L, - 0x71126905L, 0xB2040222L, 0xB6CBCF7CL, 0xCD769C2BL, - 0x53113EC0L, 0x1640E3D3L, 0x38ABBD60L, 0x2547ADF0L, - 0xBA38209CL, 0xF746CE76L, 0x77AFA1C5L, 0x20756060L, - 0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL, - 0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L, - 0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL, - 0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L } -}; - -#endif /* !MBEDTLS_BLOWFISH_ALT */ -#endif /* MBEDTLS_BLOWFISH_C */ diff --git a/third_party/mbedtls/blowfish.h b/third_party/mbedtls/blowfish.h deleted file mode 100644 index 08a73902a..000000000 --- a/third_party/mbedtls/blowfish.h +++ /dev/null @@ -1,285 +0,0 @@ -/* clang-format off */ - -/** - * \file blowfish.h - * - * \brief Blowfish block cipher - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_BLOWFISH_H -#define MBEDTLS_BLOWFISH_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -#include "third_party/mbedtls/platform_util.h" - -#define MBEDTLS_BLOWFISH_ENCRYPT 1 -#define MBEDTLS_BLOWFISH_DECRYPT 0 -#define MBEDTLS_BLOWFISH_MAX_KEY_BITS 448 -#define MBEDTLS_BLOWFISH_MIN_KEY_BITS 32 -#define MBEDTLS_BLOWFISH_ROUNDS 16 /**< Rounds to use. When increasing this value, make sure to extend the initialisation vectors */ -#define MBEDTLS_BLOWFISH_BLOCKSIZE 8 /* Blowfish uses 64 bit blocks */ - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#define MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH MBEDTLS_DEPRECATED_NUMERIC_CONSTANT( -0x0016 ) -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ -#define MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA -0x0016 /**< Bad input data. */ - -#define MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH -0x0018 /**< Invalid data input length. */ - -/* MBEDTLS_ERR_BLOWFISH_HW_ACCEL_FAILED is deprecated and should not be used. - */ -#define MBEDTLS_ERR_BLOWFISH_HW_ACCEL_FAILED -0x0017 /**< Blowfish hardware accelerator failed. */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(MBEDTLS_BLOWFISH_ALT) -// Regular implementation -// - -/** - * \brief Blowfish context structure - */ -typedef struct mbedtls_blowfish_context -{ - uint32_t P[MBEDTLS_BLOWFISH_ROUNDS + 2]; /*!< Blowfish round keys */ - uint32_t S[4][256]; /*!< key dependent S-boxes */ -} -mbedtls_blowfish_context; - -#else /* MBEDTLS_BLOWFISH_ALT */ -/* #include "third_party/mbedtls/blowfish_alt.h" */ -#endif /* MBEDTLS_BLOWFISH_ALT */ - -/** - * \brief Initialize a Blowfish context. - * - * \param ctx The Blowfish context to be initialized. - * This must not be \c NULL. - */ -void mbedtls_blowfish_init( mbedtls_blowfish_context *ctx ); - -/** - * \brief Clear a Blowfish context. - * - * \param ctx The Blowfish context to be cleared. - * This may be \c NULL, in which case this function - * returns immediately. If it is not \c NULL, it must - * point to an initialized Blowfish context. - */ -void mbedtls_blowfish_free( mbedtls_blowfish_context *ctx ); - -/** - * \brief Perform a Blowfish key schedule operation. - * - * \param ctx The Blowfish context to perform the key schedule on. - * \param key The encryption key. This must be a readable buffer of - * length \p keybits Bits. - * \param keybits The length of \p key in Bits. This must be between - * \c 32 and \c 448 and a multiple of \c 8. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_blowfish_setkey( mbedtls_blowfish_context *ctx, const unsigned char *key, - unsigned int keybits ); - -/** - * \brief Perform a Blowfish-ECB block encryption/decryption operation. - * - * \param ctx The Blowfish context to use. This must be initialized - * and bound to a key. - * \param mode The mode of operation. Possible values are - * #MBEDTLS_BLOWFISH_ENCRYPT for encryption, or - * #MBEDTLS_BLOWFISH_DECRYPT for decryption. - * \param input The input block. This must be a readable buffer - * of size \c 8 Bytes. - * \param output The output block. This must be a writable buffer - * of size \c 8 Bytes. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_blowfish_crypt_ecb( mbedtls_blowfish_context *ctx, - int mode, - const unsigned char input[MBEDTLS_BLOWFISH_BLOCKSIZE], - unsigned char output[MBEDTLS_BLOWFISH_BLOCKSIZE] ); - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -/** - * \brief Perform a Blowfish-CBC buffer encryption/decryption operation. - * - * \note Upon exit, the content of the IV is updated so that you can - * call the function same function again on the following - * block(s) of data and get the same result as if it was - * encrypted in one call. This allows a "streaming" usage. - * If on the other hand you need to retain the contents of the - * IV, you should either save it manually or use the cipher - * module instead. - * - * \param ctx The Blowfish context to use. This must be initialized - * and bound to a key. - * \param mode The mode of operation. Possible values are - * #MBEDTLS_BLOWFISH_ENCRYPT for encryption, or - * #MBEDTLS_BLOWFISH_DECRYPT for decryption. - * \param length The length of the input data in Bytes. This must be - * multiple of \c 8. - * \param iv The initialization vector. This must be a read/write buffer - * of length \c 8 Bytes. It is updated by this function. - * \param input The input data. This must be a readable buffer of length - * \p length Bytes. - * \param output The output data. This must be a writable buffer of length - * \p length Bytes. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_blowfish_crypt_cbc( mbedtls_blowfish_context *ctx, - int mode, - size_t length, - unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ); -#endif /* MBEDTLS_CIPHER_MODE_CBC */ - -#if defined(MBEDTLS_CIPHER_MODE_CFB) -/** - * \brief Perform a Blowfish CFB buffer encryption/decryption operation. - * - * \note Upon exit, the content of the IV is updated so that you can - * call the function same function again on the following - * block(s) of data and get the same result as if it was - * encrypted in one call. This allows a "streaming" usage. - * If on the other hand you need to retain the contents of the - * IV, you should either save it manually or use the cipher - * module instead. - * - * \param ctx The Blowfish context to use. This must be initialized - * and bound to a key. - * \param mode The mode of operation. Possible values are - * #MBEDTLS_BLOWFISH_ENCRYPT for encryption, or - * #MBEDTLS_BLOWFISH_DECRYPT for decryption. - * \param length The length of the input data in Bytes. - * \param iv_off The offset in the initialiation vector. - * The value pointed to must be smaller than \c 8 Bytes. - * It is updated by this function to support the aforementioned - * streaming usage. - * \param iv The initialization vector. This must be a read/write buffer - * of size \c 8 Bytes. It is updated after use. - * \param input The input data. This must be a readable buffer of length - * \p length Bytes. - * \param output The output data. This must be a writable buffer of length - * \p length Bytes. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_blowfish_crypt_cfb64( mbedtls_blowfish_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ); -#endif /*MBEDTLS_CIPHER_MODE_CFB */ - -#if defined(MBEDTLS_CIPHER_MODE_CTR) -/** - * \brief Perform a Blowfish-CTR buffer encryption/decryption operation. - * - * \warning You must never reuse a nonce value with the same key. Doing so - * would void the encryption for the two messages encrypted with - * the same nonce and key. - * - * There are two common strategies for managing nonces with CTR: - * - * 1. You can handle everything as a single message processed over - * successive calls to this function. In that case, you want to - * set \p nonce_counter and \p nc_off to 0 for the first call, and - * then preserve the values of \p nonce_counter, \p nc_off and \p - * stream_block across calls to this function as they will be - * updated by this function. - * - * With this strategy, you must not encrypt more than 2**64 - * blocks of data with the same key. - * - * 2. You can encrypt separate messages by dividing the \p - * nonce_counter buffer in two areas: the first one used for a - * per-message nonce, handled by yourself, and the second one - * updated by this function internally. - * - * For example, you might reserve the first 4 bytes for the - * per-message nonce, and the last 4 bytes for internal use. In that - * case, before calling this function on a new message you need to - * set the first 4 bytes of \p nonce_counter to your chosen nonce - * value, the last 4 to 0, and \p nc_off to 0 (which will cause \p - * stream_block to be ignored). That way, you can encrypt at most - * 2**32 messages of up to 2**32 blocks each with the same key. - * - * The per-message nonce (or information sufficient to reconstruct - * it) needs to be communicated with the ciphertext and must be unique. - * The recommended way to ensure uniqueness is to use a message - * counter. - * - * Note that for both stategies, sizes are measured in blocks and - * that a Blowfish block is 8 bytes. - * - * \warning Upon return, \p stream_block contains sensitive data. Its - * content must not be written to insecure storage and should be - * securely discarded as soon as it's no longer needed. - * - * \param ctx The Blowfish context to use. This must be initialized - * and bound to a key. - * \param length The length of the input data in Bytes. - * \param nc_off The offset in the current stream_block (for resuming - * within current cipher stream). The offset pointer - * should be \c 0 at the start of a stream and must be - * smaller than \c 8. It is updated by this function. - * \param nonce_counter The 64-bit nonce and counter. This must point to a - * read/write buffer of length \c 8 Bytes. - * \param stream_block The saved stream-block for resuming. This must point to - * a read/write buffer of length \c 8 Bytes. - * \param input The input data. This must be a readable buffer of - * length \p length Bytes. - * \param output The output data. This must be a writable buffer of - * length \p length Bytes. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_blowfish_crypt_ctr( mbedtls_blowfish_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[MBEDTLS_BLOWFISH_BLOCKSIZE], - unsigned char stream_block[MBEDTLS_BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ); -#endif /* MBEDTLS_CIPHER_MODE_CTR */ - -#ifdef __cplusplus -} -#endif - -#endif /* blowfish.h */ diff --git a/third_party/mbedtls/bn_mul.h b/third_party/mbedtls/bn_mul.h index 917890cd3..a84720a15 100644 --- a/third_party/mbedtls/bn_mul.h +++ b/third_party/mbedtls/bn_mul.h @@ -1,50 +1,8 @@ -/* clang-format off */ - -/** - * \file bn_mul.h - * - * \brief Multi-precision integer library - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * Multiply source vector [s] with b, add result - * to destination vector [d] and set carry c. - * - * Currently supports: - * - * . IA-32 (386+) . AMD64 / EM64T - * . IA-32 (SSE2) . Motorola 68000 - * . PowerPC, 32-bit . MicroBlaze - * . PowerPC, 64-bit . TriCore - * . SPARC v8 . ARM v3+ - * . Alpha . MIPS32 - * . C, longlong . C, generic - */ #ifndef MBEDTLS_BN_MUL_H #define MBEDTLS_BN_MUL_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/config.h" +/* clang-format off */ #if defined(MBEDTLS_HAVE_ASM) @@ -174,10 +132,10 @@ #if defined(__amd64__) || defined (__x86_64__) +#if 1 #define MULADDC_INIT \ asm( \ "xorq %%r8, %%r8\n" - #define MULADDC_CORE \ "movq (%%rsi), %%rax\n" \ "mulq %%rbx\n" \ @@ -189,12 +147,21 @@ "addq %%rax, (%%rdi)\n" \ "adcq %%rdx, %%rcx\n" \ "addq $8, %%rdi\n" - #define MULADDC_STOP \ : "+c" (c), "+D" (d), "+S" (s) \ : "b" (b) \ : "rax", "rdx", "r8" \ ); +#else +#define MULADDC_INIT +#define MULADDC_STOP +#define MULADDC_CORE \ + ax = *s++; \ + axdx = (uint128_t)ax * b + c; \ + t = *d; \ + *d++ = t + (uint64_t)axdx; \ + c = (t + (uint64_t)axdx < t) + (uint64_t)(axdx >> 64); +#endif #endif /* AMD64 */ diff --git a/third_party/mbedtls/camellia.c b/third_party/mbedtls/camellia.c deleted file mode 100644 index 45bfa3220..000000000 --- a/third_party/mbedtls/camellia.c +++ /dev/null @@ -1,1113 +0,0 @@ -/* clang-format off */ - -asm(".ident\t\"\\n\\n\ -Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); -asm(".include \"libc/disclaimer.inc\""); - -/* - * Camellia implementation - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * The Camellia block cipher was designed by NTT and Mitsubishi Electric - * Corporation. - * - * http://info.isl.ntt.co.jp/crypt/eng/camellia/dl/01espec.pdf - */ - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_CAMELLIA_C) - -#include "third_party/mbedtls/camellia.h" -#include "third_party/mbedtls/platform_util.h" - - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - -#if !defined(MBEDTLS_CAMELLIA_ALT) - -/* Parameter validation macros */ -#define CAMELLIA_VALIDATE_RET( cond ) \ - MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA ) -#define CAMELLIA_VALIDATE( cond ) \ - MBEDTLS_INTERNAL_VALIDATE( cond ) - -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - -static const unsigned char SIGMA_CHARS[6][8] = -{ - { 0xa0, 0x9e, 0x66, 0x7f, 0x3b, 0xcc, 0x90, 0x8b }, - { 0xb6, 0x7a, 0xe8, 0x58, 0x4c, 0xaa, 0x73, 0xb2 }, - { 0xc6, 0xef, 0x37, 0x2f, 0xe9, 0x4f, 0x82, 0xbe }, - { 0x54, 0xff, 0x53, 0xa5, 0xf1, 0xd3, 0x6f, 0x1c }, - { 0x10, 0xe5, 0x27, 0xfa, 0xde, 0x68, 0x2d, 0x1d }, - { 0xb0, 0x56, 0x88, 0xc2, 0xb3, 0xe6, 0xc1, 0xfd } -}; - -#if defined(MBEDTLS_CAMELLIA_SMALL_MEMORY) - -static const unsigned char FSb[256] = -{ - 112,130, 44,236,179, 39,192,229,228,133, 87, 53,234, 12,174, 65, - 35,239,107,147, 69, 25,165, 33,237, 14, 79, 78, 29,101,146,189, - 134,184,175,143,124,235, 31,206, 62, 48,220, 95, 94,197, 11, 26, - 166,225, 57,202,213, 71, 93, 61,217, 1, 90,214, 81, 86,108, 77, - 139, 13,154,102,251,204,176, 45,116, 18, 43, 32,240,177,132,153, - 223, 76,203,194, 52,126,118, 5,109,183,169, 49,209, 23, 4,215, - 20, 88, 58, 97,222, 27, 17, 28, 50, 15,156, 22, 83, 24,242, 34, - 254, 68,207,178,195,181,122,145, 36, 8,232,168, 96,252,105, 80, - 170,208,160,125,161,137, 98,151, 84, 91, 30,149,224,255,100,210, - 16,196, 0, 72,163,247,117,219,138, 3,230,218, 9, 63,221,148, - 135, 92,131, 2,205, 74,144, 51,115,103,246,243,157,127,191,226, - 82,155,216, 38,200, 55,198, 59,129,150,111, 75, 19,190, 99, 46, - 233,121,167,140,159,110,188,142, 41,245,249,182, 47,253,180, 89, - 120,152, 6,106,231, 70,113,186,212, 37,171, 66,136,162,141,250, - 114, 7,185, 85,248,238,172, 10, 54, 73, 42,104, 60, 56,241,164, - 64, 40,211,123,187,201, 67,193, 21,227,173,244,119,199,128,158 -}; - -#define SBOX1(n) FSb[(n)] -#define SBOX2(n) (unsigned char)((FSb[(n)] >> 7 ^ FSb[(n)] << 1) & 0xff) -#define SBOX3(n) (unsigned char)((FSb[(n)] >> 1 ^ FSb[(n)] << 7) & 0xff) -#define SBOX4(n) FSb[((n) << 1 ^ (n) >> 7) &0xff] - -#else /* MBEDTLS_CAMELLIA_SMALL_MEMORY */ - -static const unsigned char FSb[256] = -{ - 112, 130, 44, 236, 179, 39, 192, 229, 228, 133, 87, 53, 234, 12, 174, 65, - 35, 239, 107, 147, 69, 25, 165, 33, 237, 14, 79, 78, 29, 101, 146, 189, - 134, 184, 175, 143, 124, 235, 31, 206, 62, 48, 220, 95, 94, 197, 11, 26, - 166, 225, 57, 202, 213, 71, 93, 61, 217, 1, 90, 214, 81, 86, 108, 77, - 139, 13, 154, 102, 251, 204, 176, 45, 116, 18, 43, 32, 240, 177, 132, 153, - 223, 76, 203, 194, 52, 126, 118, 5, 109, 183, 169, 49, 209, 23, 4, 215, - 20, 88, 58, 97, 222, 27, 17, 28, 50, 15, 156, 22, 83, 24, 242, 34, - 254, 68, 207, 178, 195, 181, 122, 145, 36, 8, 232, 168, 96, 252, 105, 80, - 170, 208, 160, 125, 161, 137, 98, 151, 84, 91, 30, 149, 224, 255, 100, 210, - 16, 196, 0, 72, 163, 247, 117, 219, 138, 3, 230, 218, 9, 63, 221, 148, - 135, 92, 131, 2, 205, 74, 144, 51, 115, 103, 246, 243, 157, 127, 191, 226, - 82, 155, 216, 38, 200, 55, 198, 59, 129, 150, 111, 75, 19, 190, 99, 46, - 233, 121, 167, 140, 159, 110, 188, 142, 41, 245, 249, 182, 47, 253, 180, 89, - 120, 152, 6, 106, 231, 70, 113, 186, 212, 37, 171, 66, 136, 162, 141, 250, - 114, 7, 185, 85, 248, 238, 172, 10, 54, 73, 42, 104, 60, 56, 241, 164, - 64, 40, 211, 123, 187, 201, 67, 193, 21, 227, 173, 244, 119, 199, 128, 158 -}; - -static const unsigned char FSb2[256] = -{ - 224, 5, 88, 217, 103, 78, 129, 203, 201, 11, 174, 106, 213, 24, 93, 130, - 70, 223, 214, 39, 138, 50, 75, 66, 219, 28, 158, 156, 58, 202, 37, 123, - 13, 113, 95, 31, 248, 215, 62, 157, 124, 96, 185, 190, 188, 139, 22, 52, - 77, 195, 114, 149, 171, 142, 186, 122, 179, 2, 180, 173, 162, 172, 216, 154, - 23, 26, 53, 204, 247, 153, 97, 90, 232, 36, 86, 64, 225, 99, 9, 51, - 191, 152, 151, 133, 104, 252, 236, 10, 218, 111, 83, 98, 163, 46, 8, 175, - 40, 176, 116, 194, 189, 54, 34, 56, 100, 30, 57, 44, 166, 48, 229, 68, - 253, 136, 159, 101, 135, 107, 244, 35, 72, 16, 209, 81, 192, 249, 210, 160, - 85, 161, 65, 250, 67, 19, 196, 47, 168, 182, 60, 43, 193, 255, 200, 165, - 32, 137, 0, 144, 71, 239, 234, 183, 21, 6, 205, 181, 18, 126, 187, 41, - 15, 184, 7, 4, 155, 148, 33, 102, 230, 206, 237, 231, 59, 254, 127, 197, - 164, 55, 177, 76, 145, 110, 141, 118, 3, 45, 222, 150, 38, 125, 198, 92, - 211, 242, 79, 25, 63, 220, 121, 29, 82, 235, 243, 109, 94, 251, 105, 178, - 240, 49, 12, 212, 207, 140, 226, 117, 169, 74, 87, 132, 17, 69, 27, 245, - 228, 14, 115, 170, 241, 221, 89, 20, 108, 146, 84, 208, 120, 112, 227, 73, - 128, 80, 167, 246, 119, 147, 134, 131, 42, 199, 91, 233, 238, 143, 1, 61 -}; - -static const unsigned char FSb3[256] = -{ - 56, 65, 22, 118, 217, 147, 96, 242, 114, 194, 171, 154, 117, 6, 87, 160, - 145, 247, 181, 201, 162, 140, 210, 144, 246, 7, 167, 39, 142, 178, 73, 222, - 67, 92, 215, 199, 62, 245, 143, 103, 31, 24, 110, 175, 47, 226, 133, 13, - 83, 240, 156, 101, 234, 163, 174, 158, 236, 128, 45, 107, 168, 43, 54, 166, - 197, 134, 77, 51, 253, 102, 88, 150, 58, 9, 149, 16, 120, 216, 66, 204, - 239, 38, 229, 97, 26, 63, 59, 130, 182, 219, 212, 152, 232, 139, 2, 235, - 10, 44, 29, 176, 111, 141, 136, 14, 25, 135, 78, 11, 169, 12, 121, 17, - 127, 34, 231, 89, 225, 218, 61, 200, 18, 4, 116, 84, 48, 126, 180, 40, - 85, 104, 80, 190, 208, 196, 49, 203, 42, 173, 15, 202, 112, 255, 50, 105, - 8, 98, 0, 36, 209, 251, 186, 237, 69, 129, 115, 109, 132, 159, 238, 74, - 195, 46, 193, 1, 230, 37, 72, 153, 185, 179, 123, 249, 206, 191, 223, 113, - 41, 205, 108, 19, 100, 155, 99, 157, 192, 75, 183, 165, 137, 95, 177, 23, - 244, 188, 211, 70, 207, 55, 94, 71, 148, 250, 252, 91, 151, 254, 90, 172, - 60, 76, 3, 53, 243, 35, 184, 93, 106, 146, 213, 33, 68, 81, 198, 125, - 57, 131, 220, 170, 124, 119, 86, 5, 27, 164, 21, 52, 30, 28, 248, 82, - 32, 20, 233, 189, 221, 228, 161, 224, 138, 241, 214, 122, 187, 227, 64, 79 -}; - -static const unsigned char FSb4[256] = -{ - 112, 44, 179, 192, 228, 87, 234, 174, 35, 107, 69, 165, 237, 79, 29, 146, - 134, 175, 124, 31, 62, 220, 94, 11, 166, 57, 213, 93, 217, 90, 81, 108, - 139, 154, 251, 176, 116, 43, 240, 132, 223, 203, 52, 118, 109, 169, 209, 4, - 20, 58, 222, 17, 50, 156, 83, 242, 254, 207, 195, 122, 36, 232, 96, 105, - 170, 160, 161, 98, 84, 30, 224, 100, 16, 0, 163, 117, 138, 230, 9, 221, - 135, 131, 205, 144, 115, 246, 157, 191, 82, 216, 200, 198, 129, 111, 19, 99, - 233, 167, 159, 188, 41, 249, 47, 180, 120, 6, 231, 113, 212, 171, 136, 141, - 114, 185, 248, 172, 54, 42, 60, 241, 64, 211, 187, 67, 21, 173, 119, 128, - 130, 236, 39, 229, 133, 53, 12, 65, 239, 147, 25, 33, 14, 78, 101, 189, - 184, 143, 235, 206, 48, 95, 197, 26, 225, 202, 71, 61, 1, 214, 86, 77, - 13, 102, 204, 45, 18, 32, 177, 153, 76, 194, 126, 5, 183, 49, 23, 215, - 88, 97, 27, 28, 15, 22, 24, 34, 68, 178, 181, 145, 8, 168, 252, 80, - 208, 125, 137, 151, 91, 149, 255, 210, 196, 72, 247, 219, 3, 218, 63, 148, - 92, 2, 74, 51, 103, 243, 127, 226, 155, 38, 55, 59, 150, 75, 190, 46, - 121, 140, 110, 142, 245, 182, 253, 89, 152, 106, 70, 186, 37, 66, 162, 250, - 7, 85, 238, 10, 73, 104, 56, 164, 40, 123, 201, 193, 227, 244, 199, 158 -}; - -#define SBOX1(n) FSb[(n)] -#define SBOX2(n) FSb2[(n)] -#define SBOX3(n) FSb3[(n)] -#define SBOX4(n) FSb4[(n)] - -#endif /* MBEDTLS_CAMELLIA_SMALL_MEMORY */ - -static const unsigned char shifts[2][4][4] = -{ - { - { 1, 1, 1, 1 }, /* KL */ - { 0, 0, 0, 0 }, /* KR */ - { 1, 1, 1, 1 }, /* KA */ - { 0, 0, 0, 0 } /* KB */ - }, - { - { 1, 0, 1, 1 }, /* KL */ - { 1, 1, 0, 1 }, /* KR */ - { 1, 1, 1, 0 }, /* KA */ - { 1, 1, 0, 1 } /* KB */ - } -}; - -static const signed char indexes[2][4][20] = -{ - { - { 0, 1, 2, 3, 8, 9, 10, 11, 38, 39, - 36, 37, 23, 20, 21, 22, 27, -1, -1, 26 }, /* KL -> RK */ - { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, /* KR -> RK */ - { 4, 5, 6, 7, 12, 13, 14, 15, 16, 17, - 18, 19, -1, 24, 25, -1, 31, 28, 29, 30 }, /* KA -> RK */ - { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } /* KB -> RK */ - }, - { - { 0, 1, 2, 3, 61, 62, 63, 60, -1, -1, - -1, -1, 27, 24, 25, 26, 35, 32, 33, 34 }, /* KL -> RK */ - { -1, -1, -1, -1, 8, 9, 10, 11, 16, 17, - 18, 19, -1, -1, -1, -1, 39, 36, 37, 38 }, /* KR -> RK */ - { -1, -1, -1, -1, 12, 13, 14, 15, 58, 59, - 56, 57, 31, 28, 29, 30, -1, -1, -1, -1 }, /* KA -> RK */ - { 4, 5, 6, 7, 65, 66, 67, 64, 20, 21, - 22, 23, -1, -1, -1, -1, 43, 40, 41, 42 } /* KB -> RK */ - } -}; - -static const signed char transposes[2][20] = -{ - { - 21, 22, 23, 20, - -1, -1, -1, -1, - 18, 19, 16, 17, - 11, 8, 9, 10, - 15, 12, 13, 14 - }, - { - 25, 26, 27, 24, - 29, 30, 31, 28, - 18, 19, 16, 17, - -1, -1, -1, -1, - -1, -1, -1, -1 - } -}; - -/* Shift macro for 128 bit strings with rotation smaller than 32 bits (!) */ -#define ROTL(DEST, SRC, SHIFT) \ -{ \ - (DEST)[0] = (SRC)[0] << (SHIFT) ^ (SRC)[1] >> (32 - (SHIFT)); \ - (DEST)[1] = (SRC)[1] << (SHIFT) ^ (SRC)[2] >> (32 - (SHIFT)); \ - (DEST)[2] = (SRC)[2] << (SHIFT) ^ (SRC)[3] >> (32 - (SHIFT)); \ - (DEST)[3] = (SRC)[3] << (SHIFT) ^ (SRC)[0] >> (32 - (SHIFT)); \ -} - -#define FL(XL, XR, KL, KR) \ -{ \ - (XR) = ((((XL) & (KL)) << 1) | (((XL) & (KL)) >> 31)) ^ (XR); \ - (XL) = ((XR) | (KR)) ^ (XL); \ -} - -#define FLInv(YL, YR, KL, KR) \ -{ \ - (YL) = ((YR) | (KR)) ^ (YL); \ - (YR) = ((((YL) & (KL)) << 1) | (((YL) & (KL)) >> 31)) ^ (YR); \ -} - -#define SHIFT_AND_PLACE(INDEX, OFFSET) \ -{ \ - TK[0] = KC[(OFFSET) * 4 + 0]; \ - TK[1] = KC[(OFFSET) * 4 + 1]; \ - TK[2] = KC[(OFFSET) * 4 + 2]; \ - TK[3] = KC[(OFFSET) * 4 + 3]; \ - \ - for( i = 1; i <= 4; i++ ) \ - if( shifts[(INDEX)][(OFFSET)][i -1] ) \ - ROTL(TK + i * 4, TK, ( 15 * i ) % 32); \ - \ - for( i = 0; i < 20; i++ ) \ - if( indexes[(INDEX)][(OFFSET)][i] != -1 ) { \ - RK[indexes[(INDEX)][(OFFSET)][i]] = TK[ i ]; \ - } \ -} - -static void camellia_feistel( const uint32_t x[2], const uint32_t k[2], - uint32_t z[2]) -{ - uint32_t I0, I1; - I0 = x[0] ^ k[0]; - I1 = x[1] ^ k[1]; - - I0 = ((uint32_t) SBOX1((I0 >> 24) & 0xFF) << 24) | - ((uint32_t) SBOX2((I0 >> 16) & 0xFF) << 16) | - ((uint32_t) SBOX3((I0 >> 8) & 0xFF) << 8) | - ((uint32_t) SBOX4((I0 ) & 0xFF) ); - I1 = ((uint32_t) SBOX2((I1 >> 24) & 0xFF) << 24) | - ((uint32_t) SBOX3((I1 >> 16) & 0xFF) << 16) | - ((uint32_t) SBOX4((I1 >> 8) & 0xFF) << 8) | - ((uint32_t) SBOX1((I1 ) & 0xFF) ); - - I0 ^= (I1 << 8) | (I1 >> 24); - I1 ^= (I0 << 16) | (I0 >> 16); - I0 ^= (I1 >> 8) | (I1 << 24); - I1 ^= (I0 >> 8) | (I0 << 24); - - z[0] ^= I1; - z[1] ^= I0; -} - -void mbedtls_camellia_init( mbedtls_camellia_context *ctx ) -{ - CAMELLIA_VALIDATE( ctx != NULL ); - memset( ctx, 0, sizeof( mbedtls_camellia_context ) ); -} - -void mbedtls_camellia_free( mbedtls_camellia_context *ctx ) -{ - if( ctx == NULL ) - return; - - mbedtls_platform_zeroize( ctx, sizeof( mbedtls_camellia_context ) ); -} - -/* - * Camellia key schedule (encryption) - */ -int mbedtls_camellia_setkey_enc( mbedtls_camellia_context *ctx, - const unsigned char *key, - unsigned int keybits ) -{ - int idx; - size_t i; - uint32_t *RK; - unsigned char t[64]; - uint32_t SIGMA[6][2]; - uint32_t KC[16]; - uint32_t TK[20]; - - CAMELLIA_VALIDATE_RET( ctx != NULL ); - CAMELLIA_VALIDATE_RET( key != NULL ); - - RK = ctx->rk; - - memset( t, 0, 64 ); - memset( RK, 0, sizeof(ctx->rk) ); - - switch( keybits ) - { - case 128: ctx->nr = 3; idx = 0; break; - case 192: - case 256: ctx->nr = 4; idx = 1; break; - default : return( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA ); - } - - for( i = 0; i < keybits / 8; ++i ) - t[i] = key[i]; - - if( keybits == 192 ) { - for( i = 0; i < 8; i++ ) - t[24 + i] = ~t[16 + i]; - } - - /* - * Prepare SIGMA values - */ - for( i = 0; i < 6; i++ ) { - GET_UINT32_BE( SIGMA[i][0], SIGMA_CHARS[i], 0 ); - GET_UINT32_BE( SIGMA[i][1], SIGMA_CHARS[i], 4 ); - } - - /* - * Key storage in KC - * Order: KL, KR, KA, KB - */ - memset( KC, 0, sizeof(KC) ); - - /* Store KL, KR */ - for( i = 0; i < 8; i++ ) - GET_UINT32_BE( KC[i], t, i * 4 ); - - /* Generate KA */ - for( i = 0; i < 4; ++i ) - KC[8 + i] = KC[i] ^ KC[4 + i]; - - camellia_feistel( KC + 8, SIGMA[0], KC + 10 ); - camellia_feistel( KC + 10, SIGMA[1], KC + 8 ); - - for( i = 0; i < 4; ++i ) - KC[8 + i] ^= KC[i]; - - camellia_feistel( KC + 8, SIGMA[2], KC + 10 ); - camellia_feistel( KC + 10, SIGMA[3], KC + 8 ); - - if( keybits > 128 ) { - /* Generate KB */ - for( i = 0; i < 4; ++i ) - KC[12 + i] = KC[4 + i] ^ KC[8 + i]; - - camellia_feistel( KC + 12, SIGMA[4], KC + 14 ); - camellia_feistel( KC + 14, SIGMA[5], KC + 12 ); - } - - /* - * Generating subkeys - */ - - /* Manipulating KL */ - SHIFT_AND_PLACE( idx, 0 ); - - /* Manipulating KR */ - if( keybits > 128 ) { - SHIFT_AND_PLACE( idx, 1 ); - } - - /* Manipulating KA */ - SHIFT_AND_PLACE( idx, 2 ); - - /* Manipulating KB */ - if( keybits > 128 ) { - SHIFT_AND_PLACE( idx, 3 ); - } - - /* Do transpositions */ - for( i = 0; i < 20; i++ ) { - if( transposes[idx][i] != -1 ) { - RK[32 + 12 * idx + i] = RK[transposes[idx][i]]; - } - } - - return( 0 ); -} - -/* - * Camellia key schedule (decryption) - */ -int mbedtls_camellia_setkey_dec( mbedtls_camellia_context *ctx, - const unsigned char *key, - unsigned int keybits ) -{ - int idx, ret; - size_t i; - mbedtls_camellia_context cty; - uint32_t *RK; - uint32_t *SK; - CAMELLIA_VALIDATE_RET( ctx != NULL ); - CAMELLIA_VALIDATE_RET( key != NULL ); - - mbedtls_camellia_init( &cty ); - - /* Also checks keybits */ - if( ( ret = mbedtls_camellia_setkey_enc( &cty, key, keybits ) ) != 0 ) - goto exit; - - ctx->nr = cty.nr; - idx = ( ctx->nr == 4 ); - - RK = ctx->rk; - SK = cty.rk + 24 * 2 + 8 * idx * 2; - - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - - for( i = 22 + 8 * idx, SK -= 6; i > 0; i--, SK -= 4 ) - { - *RK++ = *SK++; - *RK++ = *SK++; - } - - SK -= 2; - - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - -exit: - mbedtls_camellia_free( &cty ); - - return( ret ); -} - -/* - * Camellia-ECB block encryption/decryption - */ -int mbedtls_camellia_crypt_ecb( mbedtls_camellia_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) -{ - int NR; - uint32_t *RK, X[4]; - CAMELLIA_VALIDATE_RET( ctx != NULL ); - CAMELLIA_VALIDATE_RET( mode == MBEDTLS_CAMELLIA_ENCRYPT || - mode == MBEDTLS_CAMELLIA_DECRYPT ); - CAMELLIA_VALIDATE_RET( input != NULL ); - CAMELLIA_VALIDATE_RET( output != NULL ); - - ( (void) mode ); - - NR = ctx->nr; - RK = ctx->rk; - - GET_UINT32_BE( X[0], input, 0 ); - GET_UINT32_BE( X[1], input, 4 ); - GET_UINT32_BE( X[2], input, 8 ); - GET_UINT32_BE( X[3], input, 12 ); - - X[0] ^= *RK++; - X[1] ^= *RK++; - X[2] ^= *RK++; - X[3] ^= *RK++; - - while( NR ) { - --NR; - camellia_feistel( X, RK, X + 2 ); - RK += 2; - camellia_feistel( X + 2, RK, X ); - RK += 2; - camellia_feistel( X, RK, X + 2 ); - RK += 2; - camellia_feistel( X + 2, RK, X ); - RK += 2; - camellia_feistel( X, RK, X + 2 ); - RK += 2; - camellia_feistel( X + 2, RK, X ); - RK += 2; - - if( NR ) { - FL(X[0], X[1], RK[0], RK[1]); - RK += 2; - FLInv(X[2], X[3], RK[0], RK[1]); - RK += 2; - } - } - - X[2] ^= *RK++; - X[3] ^= *RK++; - X[0] ^= *RK++; - X[1] ^= *RK++; - - PUT_UINT32_BE( X[2], output, 0 ); - PUT_UINT32_BE( X[3], output, 4 ); - PUT_UINT32_BE( X[0], output, 8 ); - PUT_UINT32_BE( X[1], output, 12 ); - - return( 0 ); -} - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -/* - * Camellia-CBC buffer encryption/decryption - */ -int mbedtls_camellia_crypt_cbc( mbedtls_camellia_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) -{ - int i; - unsigned char temp[16]; - CAMELLIA_VALIDATE_RET( ctx != NULL ); - CAMELLIA_VALIDATE_RET( mode == MBEDTLS_CAMELLIA_ENCRYPT || - mode == MBEDTLS_CAMELLIA_DECRYPT ); - CAMELLIA_VALIDATE_RET( iv != NULL ); - CAMELLIA_VALIDATE_RET( length == 0 || input != NULL ); - CAMELLIA_VALIDATE_RET( length == 0 || output != NULL ); - - if( length % 16 ) - return( MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH ); - - if( mode == MBEDTLS_CAMELLIA_DECRYPT ) - { - while( length > 0 ) - { - memcpy( temp, input, 16 ); - mbedtls_camellia_crypt_ecb( ctx, mode, input, output ); - - for( i = 0; i < 16; i++ ) - output[i] = (unsigned char)( output[i] ^ iv[i] ); - - memcpy( iv, temp, 16 ); - - input += 16; - output += 16; - length -= 16; - } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 16; i++ ) - output[i] = (unsigned char)( input[i] ^ iv[i] ); - - mbedtls_camellia_crypt_ecb( ctx, mode, output, output ); - memcpy( iv, output, 16 ); - - input += 16; - output += 16; - length -= 16; - } - } - - return( 0 ); -} -#endif /* MBEDTLS_CIPHER_MODE_CBC */ - -#if defined(MBEDTLS_CIPHER_MODE_CFB) -/* - * Camellia-CFB128 buffer encryption/decryption - */ -int mbedtls_camellia_crypt_cfb128( mbedtls_camellia_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) -{ - int c; - size_t n; - CAMELLIA_VALIDATE_RET( ctx != NULL ); - CAMELLIA_VALIDATE_RET( mode == MBEDTLS_CAMELLIA_ENCRYPT || - mode == MBEDTLS_CAMELLIA_DECRYPT ); - CAMELLIA_VALIDATE_RET( iv != NULL ); - CAMELLIA_VALIDATE_RET( iv_off != NULL ); - CAMELLIA_VALIDATE_RET( length == 0 || input != NULL ); - CAMELLIA_VALIDATE_RET( length == 0 || output != NULL ); - - n = *iv_off; - if( n >= 16 ) - return( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA ); - - if( mode == MBEDTLS_CAMELLIA_DECRYPT ) - { - while( length-- ) - { - if( n == 0 ) - mbedtls_camellia_crypt_ecb( ctx, MBEDTLS_CAMELLIA_ENCRYPT, iv, iv ); - - c = *input++; - *output++ = (unsigned char)( c ^ iv[n] ); - iv[n] = (unsigned char) c; - - n = ( n + 1 ) & 0x0F; - } - } - else - { - while( length-- ) - { - if( n == 0 ) - mbedtls_camellia_crypt_ecb( ctx, MBEDTLS_CAMELLIA_ENCRYPT, iv, iv ); - - iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); - - n = ( n + 1 ) & 0x0F; - } - } - - *iv_off = n; - - return( 0 ); -} -#endif /* MBEDTLS_CIPHER_MODE_CFB */ - -#if defined(MBEDTLS_CIPHER_MODE_CTR) -/* - * Camellia-CTR buffer encryption/decryption - */ -int mbedtls_camellia_crypt_ctr( mbedtls_camellia_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[16], - unsigned char stream_block[16], - const unsigned char *input, - unsigned char *output ) -{ - int c, i; - size_t n; - CAMELLIA_VALIDATE_RET( ctx != NULL ); - CAMELLIA_VALIDATE_RET( nonce_counter != NULL ); - CAMELLIA_VALIDATE_RET( stream_block != NULL ); - CAMELLIA_VALIDATE_RET( nc_off != NULL ); - CAMELLIA_VALIDATE_RET( length == 0 || input != NULL ); - CAMELLIA_VALIDATE_RET( length == 0 || output != NULL ); - - n = *nc_off; - if( n >= 16 ) - return( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA ); - - while( length-- ) - { - if( n == 0 ) { - mbedtls_camellia_crypt_ecb( ctx, MBEDTLS_CAMELLIA_ENCRYPT, nonce_counter, - stream_block ); - - for( i = 16; i > 0; i-- ) - if( ++nonce_counter[i - 1] != 0 ) - break; - } - c = *input++; - *output++ = (unsigned char)( c ^ stream_block[n] ); - - n = ( n + 1 ) & 0x0F; - } - - *nc_off = n; - - return( 0 ); -} -#endif /* MBEDTLS_CIPHER_MODE_CTR */ -#endif /* !MBEDTLS_CAMELLIA_ALT */ - -#if defined(MBEDTLS_SELF_TEST) - -/* - * Camellia test vectors from: - * - * http://info.isl.ntt.co.jp/crypt/eng/camellia/technology.html: - * http://info.isl.ntt.co.jp/crypt/eng/camellia/dl/cryptrec/intermediate.txt - * http://info.isl.ntt.co.jp/crypt/eng/camellia/dl/cryptrec/t_camellia.txt - * (For each bitlength: Key 0, Nr 39) - */ -#define CAMELLIA_TESTS_ECB 2 - -static const unsigned char camellia_test_ecb_key[3][CAMELLIA_TESTS_ECB][32] = -{ - { - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } - }, - { - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 }, - { 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, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, - { 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 unsigned char camellia_test_ecb_plain[CAMELLIA_TESTS_ECB][16] = -{ - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }, - { 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } -}; - -static const unsigned char camellia_test_ecb_cipher[3][CAMELLIA_TESTS_ECB][16] = -{ - { - { 0x67, 0x67, 0x31, 0x38, 0x54, 0x96, 0x69, 0x73, - 0x08, 0x57, 0x06, 0x56, 0x48, 0xea, 0xbe, 0x43 }, - { 0x38, 0x3C, 0x6C, 0x2A, 0xAB, 0xEF, 0x7F, 0xDE, - 0x25, 0xCD, 0x47, 0x0B, 0xF7, 0x74, 0xA3, 0x31 } - }, - { - { 0xb4, 0x99, 0x34, 0x01, 0xb3, 0xe9, 0x96, 0xf8, - 0x4e, 0xe5, 0xce, 0xe7, 0xd7, 0x9b, 0x09, 0xb9 }, - { 0xD1, 0x76, 0x3F, 0xC0, 0x19, 0xD7, 0x7C, 0xC9, - 0x30, 0xBF, 0xF2, 0xA5, 0x6F, 0x7C, 0x93, 0x64 } - }, - { - { 0x9a, 0xcc, 0x23, 0x7d, 0xff, 0x16, 0xd7, 0x6c, - 0x20, 0xef, 0x7c, 0x91, 0x9e, 0x3a, 0x75, 0x09 }, - { 0x05, 0x03, 0xFB, 0x10, 0xAB, 0x24, 0x1E, 0x7C, - 0xF4, 0x5D, 0x8C, 0xDE, 0xEE, 0x47, 0x43, 0x35 } - } -}; - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -#define CAMELLIA_TESTS_CBC 3 - -static const unsigned char camellia_test_cbc_key[3][32] = -{ - { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, - 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C } - , - { 0x8E, 0x73, 0xB0, 0xF7, 0xDA, 0x0E, 0x64, 0x52, - 0xC8, 0x10, 0xF3, 0x2B, 0x80, 0x90, 0x79, 0xE5, - 0x62, 0xF8, 0xEA, 0xD2, 0x52, 0x2C, 0x6B, 0x7B } - , - { 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, - 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, - 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, - 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 } -}; - -static const unsigned char camellia_test_cbc_iv[16] = - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F } -; - -static const unsigned char camellia_test_cbc_plain[CAMELLIA_TESTS_CBC][16] = -{ - { 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, - 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A }, - { 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, - 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51 }, - { 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11, - 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF } - -}; - -static const unsigned char camellia_test_cbc_cipher[3][CAMELLIA_TESTS_CBC][16] = -{ - { - { 0x16, 0x07, 0xCF, 0x49, 0x4B, 0x36, 0xBB, 0xF0, - 0x0D, 0xAE, 0xB0, 0xB5, 0x03, 0xC8, 0x31, 0xAB }, - { 0xA2, 0xF2, 0xCF, 0x67, 0x16, 0x29, 0xEF, 0x78, - 0x40, 0xC5, 0xA5, 0xDF, 0xB5, 0x07, 0x48, 0x87 }, - { 0x0F, 0x06, 0x16, 0x50, 0x08, 0xCF, 0x8B, 0x8B, - 0x5A, 0x63, 0x58, 0x63, 0x62, 0x54, 0x3E, 0x54 } - }, - { - { 0x2A, 0x48, 0x30, 0xAB, 0x5A, 0xC4, 0xA1, 0xA2, - 0x40, 0x59, 0x55, 0xFD, 0x21, 0x95, 0xCF, 0x93 }, - { 0x5D, 0x5A, 0x86, 0x9B, 0xD1, 0x4C, 0xE5, 0x42, - 0x64, 0xF8, 0x92, 0xA6, 0xDD, 0x2E, 0xC3, 0xD5 }, - { 0x37, 0xD3, 0x59, 0xC3, 0x34, 0x98, 0x36, 0xD8, - 0x84, 0xE3, 0x10, 0xAD, 0xDF, 0x68, 0xC4, 0x49 } - }, - { - { 0xE6, 0xCF, 0xA3, 0x5F, 0xC0, 0x2B, 0x13, 0x4A, - 0x4D, 0x2C, 0x0B, 0x67, 0x37, 0xAC, 0x3E, 0xDA }, - { 0x36, 0xCB, 0xEB, 0x73, 0xBD, 0x50, 0x4B, 0x40, - 0x70, 0xB1, 0xB7, 0xDE, 0x2B, 0x21, 0xEB, 0x50 }, - { 0xE3, 0x1A, 0x60, 0x55, 0x29, 0x7D, 0x96, 0xCA, - 0x33, 0x30, 0xCD, 0xF1, 0xB1, 0x86, 0x0A, 0x83 } - } -}; -#endif /* MBEDTLS_CIPHER_MODE_CBC */ - -#if defined(MBEDTLS_CIPHER_MODE_CTR) -/* - * Camellia-CTR test vectors from: - * - * http://www.faqs.org/rfcs/rfc5528.html - */ - -static const unsigned char camellia_test_ctr_key[3][16] = -{ - { 0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC, - 0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E }, - { 0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7, - 0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63 }, - { 0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8, - 0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC } -}; - -static const unsigned char camellia_test_ctr_nonce_counter[3][16] = -{ - { 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59, - 0xDA, 0x48, 0xD9, 0x0B, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F, - 0x4A, 0x17, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x01 } -}; - -static const unsigned char camellia_test_ctr_pt[3][48] = -{ - { 0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62, - 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67 }, - - { 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 }, - - { 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 } -}; - -static const unsigned char camellia_test_ctr_ct[3][48] = -{ - { 0xD0, 0x9D, 0xC2, 0x9A, 0x82, 0x14, 0x61, 0x9A, - 0x20, 0x87, 0x7C, 0x76, 0xDB, 0x1F, 0x0B, 0x3F }, - { 0xDB, 0xF3, 0xC7, 0x8D, 0xC0, 0x83, 0x96, 0xD4, - 0xDA, 0x7C, 0x90, 0x77, 0x65, 0xBB, 0xCB, 0x44, - 0x2B, 0x8E, 0x8E, 0x0F, 0x31, 0xF0, 0xDC, 0xA7, - 0x2C, 0x74, 0x17, 0xE3, 0x53, 0x60, 0xE0, 0x48 }, - { 0xB1, 0x9D, 0x1F, 0xCD, 0xCB, 0x75, 0xEB, 0x88, - 0x2F, 0x84, 0x9C, 0xE2, 0x4D, 0x85, 0xCF, 0x73, - 0x9C, 0xE6, 0x4B, 0x2B, 0x5C, 0x9D, 0x73, 0xF1, - 0x4F, 0x2D, 0x5D, 0x9D, 0xCE, 0x98, 0x89, 0xCD, - 0xDF, 0x50, 0x86, 0x96 } -}; - -static const int camellia_test_ctr_len[3] = - { 16, 32, 36 }; -#endif /* MBEDTLS_CIPHER_MODE_CTR */ - -/* - * Checkup routine - */ -int mbedtls_camellia_self_test( int verbose ) -{ - int i, j, u, v; - unsigned char key[32]; - unsigned char buf[64]; - unsigned char src[16]; - unsigned char dst[16]; -#if defined(MBEDTLS_CIPHER_MODE_CBC) - unsigned char iv[16]; -#endif -#if defined(MBEDTLS_CIPHER_MODE_CTR) - size_t offset, len; - unsigned char nonce_counter[16]; - unsigned char stream_block[16]; -#endif - - mbedtls_camellia_context ctx; - - memset( key, 0, 32 ); - - for( j = 0; j < 6; j++ ) { - u = j >> 1; - v = j & 1; - - if( verbose != 0 ) - mbedtls_printf( " CAMELLIA-ECB-%3d (%s): ", 128 + u * 64, - (v == MBEDTLS_CAMELLIA_DECRYPT) ? "dec" : "enc"); - - for( i = 0; i < CAMELLIA_TESTS_ECB; i++ ) { - memcpy( key, camellia_test_ecb_key[u][i], 16 + 8 * u ); - - if( v == MBEDTLS_CAMELLIA_DECRYPT ) { - mbedtls_camellia_setkey_dec( &ctx, key, 128 + u * 64 ); - memcpy( src, camellia_test_ecb_cipher[u][i], 16 ); - memcpy( dst, camellia_test_ecb_plain[i], 16 ); - } else { /* MBEDTLS_CAMELLIA_ENCRYPT */ - mbedtls_camellia_setkey_enc( &ctx, key, 128 + u * 64 ); - memcpy( src, camellia_test_ecb_plain[i], 16 ); - memcpy( dst, camellia_test_ecb_cipher[u][i], 16 ); - } - - mbedtls_camellia_crypt_ecb( &ctx, v, src, buf ); - - if( memcmp( buf, dst, 16 ) != 0 ) - { - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - - return( 1 ); - } - } - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - } - - if( verbose != 0 ) - mbedtls_printf( "\n" ); - -#if defined(MBEDTLS_CIPHER_MODE_CBC) - /* - * CBC mode - */ - for( j = 0; j < 6; j++ ) - { - u = j >> 1; - v = j & 1; - - if( verbose != 0 ) - mbedtls_printf( " CAMELLIA-CBC-%3d (%s): ", 128 + u * 64, - ( v == MBEDTLS_CAMELLIA_DECRYPT ) ? "dec" : "enc" ); - - memcpy( src, camellia_test_cbc_iv, 16 ); - memcpy( dst, camellia_test_cbc_iv, 16 ); - memcpy( key, camellia_test_cbc_key[u], 16 + 8 * u ); - - if( v == MBEDTLS_CAMELLIA_DECRYPT ) { - mbedtls_camellia_setkey_dec( &ctx, key, 128 + u * 64 ); - } else { - mbedtls_camellia_setkey_enc( &ctx, key, 128 + u * 64 ); - } - - for( i = 0; i < CAMELLIA_TESTS_CBC; i++ ) { - - if( v == MBEDTLS_CAMELLIA_DECRYPT ) { - memcpy( iv , src, 16 ); - memcpy( src, camellia_test_cbc_cipher[u][i], 16 ); - memcpy( dst, camellia_test_cbc_plain[i], 16 ); - } else { /* MBEDTLS_CAMELLIA_ENCRYPT */ - memcpy( iv , dst, 16 ); - memcpy( src, camellia_test_cbc_plain[i], 16 ); - memcpy( dst, camellia_test_cbc_cipher[u][i], 16 ); - } - - mbedtls_camellia_crypt_cbc( &ctx, v, 16, iv, src, buf ); - - if( memcmp( buf, dst, 16 ) != 0 ) - { - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - - return( 1 ); - } - } - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - } -#endif /* MBEDTLS_CIPHER_MODE_CBC */ - - if( verbose != 0 ) - mbedtls_printf( "\n" ); - -#if defined(MBEDTLS_CIPHER_MODE_CTR) - /* - * CTR mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - v = i & 1; - - if( verbose != 0 ) - mbedtls_printf( " CAMELLIA-CTR-128 (%s): ", - ( v == MBEDTLS_CAMELLIA_DECRYPT ) ? "dec" : "enc" ); - - memcpy( nonce_counter, camellia_test_ctr_nonce_counter[u], 16 ); - memcpy( key, camellia_test_ctr_key[u], 16 ); - - offset = 0; - mbedtls_camellia_setkey_enc( &ctx, key, 128 ); - - if( v == MBEDTLS_CAMELLIA_DECRYPT ) - { - len = camellia_test_ctr_len[u]; - memcpy( buf, camellia_test_ctr_ct[u], len ); - - mbedtls_camellia_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); - - if( memcmp( buf, camellia_test_ctr_pt[u], len ) != 0 ) - { - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - - return( 1 ); - } - } - else - { - len = camellia_test_ctr_len[u]; - memcpy( buf, camellia_test_ctr_pt[u], len ); - - mbedtls_camellia_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); - - if( memcmp( buf, camellia_test_ctr_ct[u], len ) != 0 ) - { - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - - return( 1 ); - } - } - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - } - - if( verbose != 0 ) - mbedtls_printf( "\n" ); -#endif /* MBEDTLS_CIPHER_MODE_CTR */ - - return( 0 ); -} - -#endif /* MBEDTLS_SELF_TEST */ - -#endif /* MBEDTLS_CAMELLIA_C */ diff --git a/third_party/mbedtls/camellia.h b/third_party/mbedtls/camellia.h deleted file mode 100644 index 3163afaaf..000000000 --- a/third_party/mbedtls/camellia.h +++ /dev/null @@ -1,324 +0,0 @@ -/* clang-format off */ - -/** - * \file camellia.h - * - * \brief Camellia block cipher - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_CAMELLIA_H -#define MBEDTLS_CAMELLIA_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -#include "third_party/mbedtls/platform_util.h" - -#define MBEDTLS_CAMELLIA_ENCRYPT 1 -#define MBEDTLS_CAMELLIA_DECRYPT 0 - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#define MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH MBEDTLS_DEPRECATED_NUMERIC_CONSTANT( -0x0024 ) -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ -#define MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA -0x0024 /**< Bad input data. */ - -#define MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH -0x0026 /**< Invalid data input length. */ - -/* MBEDTLS_ERR_CAMELLIA_HW_ACCEL_FAILED is deprecated and should not be used. - */ -#define MBEDTLS_ERR_CAMELLIA_HW_ACCEL_FAILED -0x0027 /**< Camellia hardware accelerator failed. */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(MBEDTLS_CAMELLIA_ALT) -// Regular implementation -// - -/** - * \brief CAMELLIA context structure - */ -typedef struct mbedtls_camellia_context -{ - int nr; /*!< number of rounds */ - uint32_t rk[68]; /*!< CAMELLIA round keys */ -} -mbedtls_camellia_context; - -#else /* MBEDTLS_CAMELLIA_ALT */ -/* #include "third_party/mbedtls/camellia_alt.h" */ -#endif /* MBEDTLS_CAMELLIA_ALT */ - -/** - * \brief Initialize a CAMELLIA context. - * - * \param ctx The CAMELLIA context to be initialized. - * This must not be \c NULL. - */ -void mbedtls_camellia_init( mbedtls_camellia_context *ctx ); - -/** - * \brief Clear a CAMELLIA context. - * - * \param ctx The CAMELLIA context to be cleared. This may be \c NULL, - * in which case this function returns immediately. If it is not - * \c NULL, it must be initialized. - */ -void mbedtls_camellia_free( mbedtls_camellia_context *ctx ); - -/** - * \brief Perform a CAMELLIA key schedule operation for encryption. - * - * \param ctx The CAMELLIA context to use. This must be initialized. - * \param key The encryption key to use. This must be a readable buffer - * of size \p keybits Bits. - * \param keybits The length of \p key in Bits. This must be either \c 128, - * \c 192 or \c 256. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_camellia_setkey_enc( mbedtls_camellia_context *ctx, - const unsigned char *key, - unsigned int keybits ); - -/** - * \brief Perform a CAMELLIA key schedule operation for decryption. - * - * \param ctx The CAMELLIA context to use. This must be initialized. - * \param key The decryption key. This must be a readable buffer - * of size \p keybits Bits. - * \param keybits The length of \p key in Bits. This must be either \c 128, - * \c 192 or \c 256. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_camellia_setkey_dec( mbedtls_camellia_context *ctx, - const unsigned char *key, - unsigned int keybits ); - -/** - * \brief Perform a CAMELLIA-ECB block encryption/decryption operation. - * - * \param ctx The CAMELLIA context to use. This must be initialized - * and bound to a key. - * \param mode The mode of operation. This must be either - * #MBEDTLS_CAMELLIA_ENCRYPT or #MBEDTLS_CAMELLIA_DECRYPT. - * \param input The input block. This must be a readable buffer - * of size \c 16 Bytes. - * \param output The output block. This must be a writable buffer - * of size \c 16 Bytes. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_camellia_crypt_ecb( mbedtls_camellia_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ); - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -/** - * \brief Perform a CAMELLIA-CBC buffer encryption/decryption operation. - * - * \note Upon exit, the content of the IV is updated so that you can - * call the function same function again on the following - * block(s) of data and get the same result as if it was - * encrypted in one call. This allows a "streaming" usage. - * If on the other hand you need to retain the contents of the - * IV, you should either save it manually or use the cipher - * module instead. - * - * \param ctx The CAMELLIA context to use. This must be initialized - * and bound to a key. - * \param mode The mode of operation. This must be either - * #MBEDTLS_CAMELLIA_ENCRYPT or #MBEDTLS_CAMELLIA_DECRYPT. - * \param length The length in Bytes of the input data \p input. - * This must be a multiple of \c 16 Bytes. - * \param iv The initialization vector. This must be a read/write buffer - * of length \c 16 Bytes. It is updated to allow streaming - * use as explained above. - * \param input The buffer holding the input data. This must point to a - * readable buffer of length \p length Bytes. - * \param output The buffer holding the output data. This must point to a - * writable buffer of length \p length Bytes. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_camellia_crypt_cbc( mbedtls_camellia_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ); -#endif /* MBEDTLS_CIPHER_MODE_CBC */ - -#if defined(MBEDTLS_CIPHER_MODE_CFB) -/** - * \brief Perform a CAMELLIA-CFB128 buffer encryption/decryption - * operation. - * - * \note Due to the nature of CFB mode, you should use the same - * key for both encryption and decryption. In particular, calls - * to this function should be preceded by a key-schedule via - * mbedtls_camellia_setkey_enc() regardless of whether \p mode - * is #MBEDTLS_CAMELLIA_ENCRYPT or #MBEDTLS_CAMELLIA_DECRYPT. - * - * \note Upon exit, the content of the IV is updated so that you can - * call the function same function again on the following - * block(s) of data and get the same result as if it was - * encrypted in one call. This allows a "streaming" usage. - * If on the other hand you need to retain the contents of the - * IV, you should either save it manually or use the cipher - * module instead. - * - * \param ctx The CAMELLIA context to use. This must be initialized - * and bound to a key. - * \param mode The mode of operation. This must be either - * #MBEDTLS_CAMELLIA_ENCRYPT or #MBEDTLS_CAMELLIA_DECRYPT. - * \param length The length of the input data \p input. Any value is allowed. - * \param iv_off The current offset in the IV. This must be smaller - * than \c 16 Bytes. It is updated after this call to allow - * the aforementioned streaming usage. - * \param iv The initialization vector. This must be a read/write buffer - * of length \c 16 Bytes. It is updated after this call to - * allow the aforementioned streaming usage. - * \param input The buffer holding the input data. This must be a readable - * buffer of size \p length Bytes. - * \param output The buffer to hold the output data. This must be a writable - * buffer of length \p length Bytes. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_camellia_crypt_cfb128( mbedtls_camellia_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ); -#endif /* MBEDTLS_CIPHER_MODE_CFB */ - -#if defined(MBEDTLS_CIPHER_MODE_CTR) -/** - * \brief Perform a CAMELLIA-CTR buffer encryption/decryption operation. - * - * *note Due to the nature of CTR mode, you should use the same - * key for both encryption and decryption. In particular, calls - * to this function should be preceded by a key-schedule via - * mbedtls_camellia_setkey_enc() regardless of whether \p mode - * is #MBEDTLS_CAMELLIA_ENCRYPT or #MBEDTLS_CAMELLIA_DECRYPT. - * - * \warning You must never reuse a nonce value with the same key. Doing so - * would void the encryption for the two messages encrypted with - * the same nonce and key. - * - * There are two common strategies for managing nonces with CTR: - * - * 1. You can handle everything as a single message processed over - * successive calls to this function. In that case, you want to - * set \p nonce_counter and \p nc_off to 0 for the first call, and - * then preserve the values of \p nonce_counter, \p nc_off and \p - * stream_block across calls to this function as they will be - * updated by this function. - * - * With this strategy, you must not encrypt more than 2**128 - * blocks of data with the same key. - * - * 2. You can encrypt separate messages by dividing the \p - * nonce_counter buffer in two areas: the first one used for a - * per-message nonce, handled by yourself, and the second one - * updated by this function internally. - * - * For example, you might reserve the first \c 12 Bytes for the - * per-message nonce, and the last \c 4 Bytes for internal use. - * In that case, before calling this function on a new message you - * need to set the first \c 12 Bytes of \p nonce_counter to your - * chosen nonce value, the last four to \c 0, and \p nc_off to \c 0 - * (which will cause \p stream_block to be ignored). That way, you - * can encrypt at most \c 2**96 messages of up to \c 2**32 blocks - * each with the same key. - * - * The per-message nonce (or information sufficient to reconstruct - * it) needs to be communicated with the ciphertext and must be - * unique. The recommended way to ensure uniqueness is to use a - * message counter. An alternative is to generate random nonces, - * but this limits the number of messages that can be securely - * encrypted: for example, with 96-bit random nonces, you should - * not encrypt more than 2**32 messages with the same key. - * - * Note that for both stategies, sizes are measured in blocks and - * that a CAMELLIA block is \c 16 Bytes. - * - * \warning Upon return, \p stream_block contains sensitive data. Its - * content must not be written to insecure storage and should be - * securely discarded as soon as it's no longer needed. - * - * \param ctx The CAMELLIA context to use. This must be initialized - * and bound to a key. - * \param length The length of the input data \p input in Bytes. - * Any value is allowed. - * \param nc_off The offset in the current \p stream_block (for resuming - * within current cipher stream). The offset pointer to - * should be \c 0 at the start of a stream. It is updated - * at the end of this call. - * \param nonce_counter The 128-bit nonce and counter. This must be a read/write - * buffer of length \c 16 Bytes. - * \param stream_block The saved stream-block for resuming. This must be a - * read/write buffer of length \c 16 Bytes. - * \param input The input data stream. This must be a readable buffer of - * size \p length Bytes. - * \param output The output data stream. This must be a writable buffer - * of size \p length Bytes. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_camellia_crypt_ctr( mbedtls_camellia_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[16], - unsigned char stream_block[16], - const unsigned char *input, - unsigned char *output ); -#endif /* MBEDTLS_CIPHER_MODE_CTR */ - -#if defined(MBEDTLS_SELF_TEST) - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int mbedtls_camellia_self_test( int verbose ); - -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* camellia.h */ diff --git a/third_party/mbedtls/ccm.c b/third_party/mbedtls/ccm.c index f91082f67..ca6f80cdb 100644 --- a/third_party/mbedtls/ccm.c +++ b/third_party/mbedtls/ccm.c @@ -1,10 +1,15 @@ -/* clang-format off */ +#include "third_party/mbedtls/ccm.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * NIST SP800-38C compliant CCM implementation * @@ -24,33 +29,36 @@ asm(".include \"libc/disclaimer.inc\""); * limitations under the License. */ -/* +/** + * \file ccm.c + * + * \brief This file provides an API for the CCM authenticated encryption + * mode for block ciphers. + * + * CCM combines Counter mode encryption with CBC-MAC authentication + * for 128-bit block ciphers. + * + * Input to CCM includes the following elements: + * + * * Definition of CCM: * http://csrc.nist.gov/publications/nistpubs/800-38C/SP800-38C_updated-July20_2007.pdf * RFC 3610 "Counter with CBC-MAC (CCM)" * * Related: * RFC 5116 "An Interface and Algorithms for Authenticated Encryption" + * + * Definition of CCM*: + * IEEE 802.15.4 - IEEE Standard for Local and metropolitan area networks + * Integer representation is fixed most-significant-octet-first order and + * the representation of octets is most-significant-bit-first order. This is + * consistent with RFC 3610. */ -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_CCM_C) - -#include "third_party/mbedtls/ccm.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - -#if defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_AES_C) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */ - -#if !defined(MBEDTLS_CCM_ALT) - #define CCM_VALIDATE_RET( cond ) \ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_CCM_BAD_INPUT ) #define CCM_VALIDATE( cond ) \ @@ -59,8 +67,12 @@ asm(".include \"libc/disclaimer.inc\""); #define CCM_ENCRYPT 0 #define CCM_DECRYPT 1 -/* - * Initialize context +/** + * \brief This function initializes the specified CCM context, + * to make references valid, and prepare the context + * for mbedtls_ccm_setkey() or mbedtls_ccm_free(). + * + * \param ctx The CCM context to initialize. This must not be \c NULL. */ void mbedtls_ccm_init( mbedtls_ccm_context *ctx ) { @@ -68,6 +80,19 @@ void mbedtls_ccm_init( mbedtls_ccm_context *ctx ) memset( ctx, 0, sizeof( mbedtls_ccm_context ) ); } +/** + * \brief This function initializes the CCM context set in the + * \p ctx parameter and sets the encryption key. + * + * \param ctx The CCM context to initialize. This must be an initialized + * context. + * \param cipher The 128-bit block cipher to use. + * \param key The encryption key. This must not be \c NULL. + * \param keybits The key size in bits. This must be acceptable by the cipher. + * + * \return \c 0 on success. + * \return A CCM or cipher-specific error code on failure. + */ int mbedtls_ccm_setkey( mbedtls_ccm_context *ctx, mbedtls_cipher_id_t cipher, const unsigned char *key, @@ -101,8 +126,12 @@ int mbedtls_ccm_setkey( mbedtls_ccm_context *ctx, return( 0 ); } -/* - * Free context +/** + * \brief This function releases and clears the specified CCM context + * and underlying cipher sub-context. + * + * \param ctx The CCM context to clear. If this is \c NULL, the function + * has no effect. Otherwise, this must be initialized. */ void mbedtls_ccm_free( mbedtls_ccm_context *ctx ) { @@ -318,8 +347,47 @@ static int ccm_auth_crypt( mbedtls_ccm_context *ctx, int mode, size_t length, return( 0 ); } -/* - * Authenticated encryption +/** + * \brief This function encrypts a buffer using CCM*. + * + * \note The tag is written to a separate buffer. To concatenate + * the \p tag with the \p output, as done in RFC-3610: + * Counter with CBC-MAC (CCM), use + * \p tag = \p output + \p length, and make sure that the + * output buffer is at least \p length + \p tag_len wide. + * + * \note When using this function in a variable tag length context, + * the tag length has to be encoded into the \p iv passed to + * this function. + * + * \param ctx The CCM context to use for encryption. This must be + * initialized and bound to a key. + * \param length The length of the input data in Bytes. + * \param iv The initialization vector (nonce). This must be a readable + * buffer of at least \p iv_len Bytes. + * \param iv_len The length of the nonce in Bytes: 7, 8, 9, 10, 11, 12, + * or 13. The length L of the message length field is + * 15 - \p iv_len. + * \param add The additional data field. This must be a readable buffer of + * at least \p add_len Bytes. + * \param add_len The length of additional data in Bytes. + * This must be less than 2^16 - 2^8. + * \param input The buffer holding the input data. If \p length is greater + * than zero, \p input must be a readable buffer of at least + * that length. + * \param output The buffer holding the output data. If \p length is greater + * than zero, \p output must be a writable buffer of at least + * that length. + * \param tag The buffer holding the authentication field. This must be a + * writable buffer of at least \p tag_len Bytes. + * \param tag_len The length of the authentication field to generate in Bytes: + * 0, 4, 6, 8, 10, 12, 14 or 16. + * + * \warning Passing \c 0 as \p tag_len means that the message is no + * longer authenticated. + * + * \return \c 0 on success. + * \return A CCM or cipher-specific error code on failure. */ int mbedtls_ccm_star_encrypt_and_tag( mbedtls_ccm_context *ctx, size_t length, const unsigned char *iv, size_t iv_len, @@ -337,6 +405,42 @@ int mbedtls_ccm_star_encrypt_and_tag( mbedtls_ccm_context *ctx, size_t length, add, add_len, input, output, tag, tag_len ) ); } +/** + * \brief This function encrypts a buffer using CCM. + * + * \note The tag is written to a separate buffer. To concatenate + * the \p tag with the \p output, as done in RFC-3610: + * Counter with CBC-MAC (CCM), use + * \p tag = \p output + \p length, and make sure that the + * output buffer is at least \p length + \p tag_len wide. + * + * \param ctx The CCM context to use for encryption. This must be + * initialized and bound to a key. + * \param length The length of the input data in Bytes. + * \param iv The initialization vector (nonce). This must be a readable + * buffer of at least \p iv_len Bytes. + * \param iv_len The length of the nonce in Bytes: 7, 8, 9, 10, 11, 12, + * or 13. The length L of the message length field is + * 15 - \p iv_len. + * \param add The additional data field. If \p add_len is greater than + * zero, \p add must be a readable buffer of at least that + * length. + * \param add_len The length of additional data in Bytes. + * This must be less than `2^16 - 2^8`. + * \param input The buffer holding the input data. If \p length is greater + * than zero, \p input must be a readable buffer of at least + * that length. + * \param output The buffer holding the output data. If \p length is greater + * than zero, \p output must be a writable buffer of at least + * that length. + * \param tag The buffer holding the authentication field. This must be a + * writable buffer of at least \p tag_len Bytes. + * \param tag_len The length of the authentication field to generate in Bytes: + * 4, 6, 8, 10, 12, 14 or 16. + * + * \return \c 0 on success. + * \return A CCM or cipher-specific error code on failure. + */ int mbedtls_ccm_encrypt_and_tag( mbedtls_ccm_context *ctx, size_t length, const unsigned char *iv, size_t iv_len, const unsigned char *add, size_t add_len, @@ -356,8 +460,44 @@ int mbedtls_ccm_encrypt_and_tag( mbedtls_ccm_context *ctx, size_t length, add_len, input, output, tag, tag_len ) ); } -/* - * Authenticated decryption +/** + * \brief This function performs a CCM* authenticated decryption of a + * buffer. + * + * \note When using this function in a variable tag length context, + * the tag length has to be decoded from \p iv and passed to + * this function as \p tag_len. (\p tag needs to be adjusted + * accordingly.) + * + * \param ctx The CCM context to use for decryption. This must be + * initialized and bound to a key. + * \param length The length of the input data in Bytes. + * \param iv The initialization vector (nonce). This must be a readable + * buffer of at least \p iv_len Bytes. + * \param iv_len The length of the nonce in Bytes: 7, 8, 9, 10, 11, 12, + * or 13. The length L of the message length field is + * 15 - \p iv_len. + * \param add The additional data field. This must be a readable buffer of + * at least that \p add_len Bytes. + * \param add_len The length of additional data in Bytes. + * This must be less than 2^16 - 2^8. + * \param input The buffer holding the input data. If \p length is greater + * than zero, \p input must be a readable buffer of at least + * that length. + * \param output The buffer holding the output data. If \p length is greater + * than zero, \p output must be a writable buffer of at least + * that length. + * \param tag The buffer holding the authentication field. This must be a + * readable buffer of at least \p tag_len Bytes. + * \param tag_len The length of the authentication field in Bytes. + * 0, 4, 6, 8, 10, 12, 14 or 16. + * + * \warning Passing \c 0 as \p tag_len means that the message is nos + * longer authenticated. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_CCM_AUTH_FAILED if the tag does not match. + * \return A cipher-specific error code on calculation failure. */ int mbedtls_ccm_star_auth_decrypt( mbedtls_ccm_context *ctx, size_t length, const unsigned char *iv, size_t iv_len, @@ -397,6 +537,37 @@ int mbedtls_ccm_star_auth_decrypt( mbedtls_ccm_context *ctx, size_t length, return( 0 ); } +/** + * \brief This function performs a CCM authenticated decryption of a + * buffer. + * + * \param ctx The CCM context to use for decryption. This must be + * initialized and bound to a key. + * \param length The length of the input data in Bytes. + * \param iv The initialization vector (nonce). This must be a readable + * buffer of at least \p iv_len Bytes. + * \param iv_len The length of the nonce in Bytes: 7, 8, 9, 10, 11, 12, + * or 13. The length L of the message length field is + * 15 - \p iv_len. + * \param add The additional data field. This must be a readable buffer + * of at least that \p add_len Bytes.. + * \param add_len The length of additional data in Bytes. + * This must be less than 2^16 - 2^8. + * \param input The buffer holding the input data. If \p length is greater + * than zero, \p input must be a readable buffer of at least + * that length. + * \param output The buffer holding the output data. If \p length is greater + * than zero, \p output must be a writable buffer of at least + * that length. + * \param tag The buffer holding the authentication field. This must be a + * readable buffer of at least \p tag_len Bytes. + * \param tag_len The length of the authentication field to generate in Bytes: + * 4, 6, 8, 10, 12, 14 or 16. + * + * \return \c 0 on success. This indicates that the message is + * authentic. \return #MBEDTLS_ERR_CCM_AUTH_FAILED if the tag does not + * match. \return A cipher-specific error code on calculation failure. + */ int mbedtls_ccm_auth_decrypt( mbedtls_ccm_context *ctx, size_t length, const unsigned char *iv, size_t iv_len, const unsigned char *add, size_t add_len, @@ -416,7 +587,6 @@ int mbedtls_ccm_auth_decrypt( mbedtls_ccm_context *ctx, size_t length, return( mbedtls_ccm_star_auth_decrypt( ctx, length, iv, iv_len, add, add_len, input, output, tag, tag_len ) ); } -#endif /* !MBEDTLS_CCM_ALT */ #if defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_AES_C) /* @@ -467,6 +637,12 @@ static const unsigned char res_test_data[NB_TESTS][CCM_SELFTEST_CT_MAX_LEN] = { 0x48, 0x43, 0x92, 0xfb, 0xc1, 0xb0, 0x99, 0x51 } }; +/** + * \brief The CCM checkup routine. + * + * \return \c 0 on success. + * \return \c 1 on failure. + */ int mbedtls_ccm_self_test( int verbose ) { mbedtls_ccm_context ctx; @@ -547,5 +723,3 @@ int mbedtls_ccm_self_test( int verbose ) } #endif /* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */ - -#endif /* MBEDTLS_CCM_C */ diff --git a/third_party/mbedtls/ccm.h b/third_party/mbedtls/ccm.h index 09556f1ae..ced88b0c8 100644 --- a/third_party/mbedtls/ccm.h +++ b/third_party/mbedtls/ccm.h @@ -1,310 +1,53 @@ -/* clang-format off */ - -/** - * \file ccm.h - * - * \brief This file provides an API for the CCM authenticated encryption - * mode for block ciphers. - * - * CCM combines Counter mode encryption with CBC-MAC authentication - * for 128-bit block ciphers. - * - * Input to CCM includes the following elements: - * - * - * Definition of CCM: - * http://csrc.nist.gov/publications/nistpubs/800-38C/SP800-38C_updated-July20_2007.pdf - * RFC 3610 "Counter with CBC-MAC (CCM)" - * - * Related: - * RFC 5116 "An Interface and Algorithms for Authenticated Encryption" - * - * Definition of CCM*: - * IEEE 802.15.4 - IEEE Standard for Local and metropolitan area networks - * Integer representation is fixed most-significant-octet-first order and - * the representation of octets is most-significant-bit-first order. This is - * consistent with RFC 3610. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MBEDTLS_CCM_H -#define MBEDTLS_CCM_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_CCM_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_CCM_H_ #include "third_party/mbedtls/cipher.h" +#if !(__ASSEMBLER__ + __LINKER__ + 0) +COSMOPOLITAN_C_START_ -#define MBEDTLS_ERR_CCM_BAD_INPUT -0x000D /**< Bad input parameters to the function. */ -#define MBEDTLS_ERR_CCM_AUTH_FAILED -0x000F /**< Authenticated decryption failed. */ +#define MBEDTLS_ERR_CCM_BAD_INPUT \ + -0x000D /**< Bad input parameters to the function. */ +#define MBEDTLS_ERR_CCM_AUTH_FAILED \ + -0x000F /**< Authenticated decryption failed. */ /* MBEDTLS_ERR_CCM_HW_ACCEL_FAILED is deprecated and should not be used. */ -#define MBEDTLS_ERR_CCM_HW_ACCEL_FAILED -0x0011 /**< CCM hardware accelerator failed. */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(MBEDTLS_CCM_ALT) -// Regular implementation -// +#define MBEDTLS_ERR_CCM_HW_ACCEL_FAILED \ + -0x0011 /**< CCM hardware accelerator failed. */ /** * \brief The CCM context-type definition. The CCM context is passed * to the APIs called. */ -typedef struct mbedtls_ccm_context -{ - mbedtls_cipher_context_t cipher_ctx; /*!< The cipher context used. */ -} -mbedtls_ccm_context; +typedef struct mbedtls_ccm_context { + mbedtls_cipher_context_t cipher_ctx; /*!< The cipher context used. */ +} mbedtls_ccm_context; -#else /* MBEDTLS_CCM_ALT */ -/* #include "third_party/mbedtls/ccm_alt.h" */ -#endif /* MBEDTLS_CCM_ALT */ +void mbedtls_ccm_init(mbedtls_ccm_context *); +int mbedtls_ccm_setkey(mbedtls_ccm_context *, mbedtls_cipher_id_t, + const unsigned char *, unsigned int); +void mbedtls_ccm_free(mbedtls_ccm_context *); +int mbedtls_ccm_encrypt_and_tag(mbedtls_ccm_context *, size_t, + const unsigned char *, size_t, + const unsigned char *, size_t, + const unsigned char *, unsigned char *, + unsigned char *, size_t); +int mbedtls_ccm_star_encrypt_and_tag(mbedtls_ccm_context *, size_t, + const unsigned char *, size_t, + const unsigned char *, size_t, + const unsigned char *, unsigned char *, + unsigned char *, size_t); +int mbedtls_ccm_auth_decrypt(mbedtls_ccm_context *, size_t, + const unsigned char *, size_t, + const unsigned char *, size_t, + const unsigned char *, unsigned char *, + const unsigned char *, size_t); +int mbedtls_ccm_star_auth_decrypt(mbedtls_ccm_context *, size_t, + const unsigned char *, size_t, + const unsigned char *, size_t, + const unsigned char *, unsigned char *, + const unsigned char *, size_t); -/** - * \brief This function initializes the specified CCM context, - * to make references valid, and prepare the context - * for mbedtls_ccm_setkey() or mbedtls_ccm_free(). - * - * \param ctx The CCM context to initialize. This must not be \c NULL. - */ -void mbedtls_ccm_init( mbedtls_ccm_context *ctx ); +int mbedtls_ccm_self_test(int); -/** - * \brief This function initializes the CCM context set in the - * \p ctx parameter and sets the encryption key. - * - * \param ctx The CCM context to initialize. This must be an initialized - * context. - * \param cipher The 128-bit block cipher to use. - * \param key The encryption key. This must not be \c NULL. - * \param keybits The key size in bits. This must be acceptable by the cipher. - * - * \return \c 0 on success. - * \return A CCM or cipher-specific error code on failure. - */ -int mbedtls_ccm_setkey( mbedtls_ccm_context *ctx, - mbedtls_cipher_id_t cipher, - const unsigned char *key, - unsigned int keybits ); - -/** - * \brief This function releases and clears the specified CCM context - * and underlying cipher sub-context. - * - * \param ctx The CCM context to clear. If this is \c NULL, the function - * has no effect. Otherwise, this must be initialized. - */ -void mbedtls_ccm_free( mbedtls_ccm_context *ctx ); - -/** - * \brief This function encrypts a buffer using CCM. - * - * \note The tag is written to a separate buffer. To concatenate - * the \p tag with the \p output, as done in RFC-3610: - * Counter with CBC-MAC (CCM), use - * \p tag = \p output + \p length, and make sure that the - * output buffer is at least \p length + \p tag_len wide. - * - * \param ctx The CCM context to use for encryption. This must be - * initialized and bound to a key. - * \param length The length of the input data in Bytes. - * \param iv The initialization vector (nonce). This must be a readable - * buffer of at least \p iv_len Bytes. - * \param iv_len The length of the nonce in Bytes: 7, 8, 9, 10, 11, 12, - * or 13. The length L of the message length field is - * 15 - \p iv_len. - * \param add The additional data field. If \p add_len is greater than - * zero, \p add must be a readable buffer of at least that - * length. - * \param add_len The length of additional data in Bytes. - * This must be less than `2^16 - 2^8`. - * \param input The buffer holding the input data. If \p length is greater - * than zero, \p input must be a readable buffer of at least - * that length. - * \param output The buffer holding the output data. If \p length is greater - * than zero, \p output must be a writable buffer of at least - * that length. - * \param tag The buffer holding the authentication field. This must be a - * writable buffer of at least \p tag_len Bytes. - * \param tag_len The length of the authentication field to generate in Bytes: - * 4, 6, 8, 10, 12, 14 or 16. - * - * \return \c 0 on success. - * \return A CCM or cipher-specific error code on failure. - */ -int mbedtls_ccm_encrypt_and_tag( mbedtls_ccm_context *ctx, size_t length, - const unsigned char *iv, size_t iv_len, - const unsigned char *add, size_t add_len, - const unsigned char *input, unsigned char *output, - unsigned char *tag, size_t tag_len ); - -/** - * \brief This function encrypts a buffer using CCM*. - * - * \note The tag is written to a separate buffer. To concatenate - * the \p tag with the \p output, as done in RFC-3610: - * Counter with CBC-MAC (CCM), use - * \p tag = \p output + \p length, and make sure that the - * output buffer is at least \p length + \p tag_len wide. - * - * \note When using this function in a variable tag length context, - * the tag length has to be encoded into the \p iv passed to - * this function. - * - * \param ctx The CCM context to use for encryption. This must be - * initialized and bound to a key. - * \param length The length of the input data in Bytes. - * \param iv The initialization vector (nonce). This must be a readable - * buffer of at least \p iv_len Bytes. - * \param iv_len The length of the nonce in Bytes: 7, 8, 9, 10, 11, 12, - * or 13. The length L of the message length field is - * 15 - \p iv_len. - * \param add The additional data field. This must be a readable buffer of - * at least \p add_len Bytes. - * \param add_len The length of additional data in Bytes. - * This must be less than 2^16 - 2^8. - * \param input The buffer holding the input data. If \p length is greater - * than zero, \p input must be a readable buffer of at least - * that length. - * \param output The buffer holding the output data. If \p length is greater - * than zero, \p output must be a writable buffer of at least - * that length. - * \param tag The buffer holding the authentication field. This must be a - * writable buffer of at least \p tag_len Bytes. - * \param tag_len The length of the authentication field to generate in Bytes: - * 0, 4, 6, 8, 10, 12, 14 or 16. - * - * \warning Passing \c 0 as \p tag_len means that the message is no - * longer authenticated. - * - * \return \c 0 on success. - * \return A CCM or cipher-specific error code on failure. - */ -int mbedtls_ccm_star_encrypt_and_tag( mbedtls_ccm_context *ctx, size_t length, - const unsigned char *iv, size_t iv_len, - const unsigned char *add, size_t add_len, - const unsigned char *input, unsigned char *output, - unsigned char *tag, size_t tag_len ); - -/** - * \brief This function performs a CCM authenticated decryption of a - * buffer. - * - * \param ctx The CCM context to use for decryption. This must be - * initialized and bound to a key. - * \param length The length of the input data in Bytes. - * \param iv The initialization vector (nonce). This must be a readable - * buffer of at least \p iv_len Bytes. - * \param iv_len The length of the nonce in Bytes: 7, 8, 9, 10, 11, 12, - * or 13. The length L of the message length field is - * 15 - \p iv_len. - * \param add The additional data field. This must be a readable buffer - * of at least that \p add_len Bytes.. - * \param add_len The length of additional data in Bytes. - * This must be less than 2^16 - 2^8. - * \param input The buffer holding the input data. If \p length is greater - * than zero, \p input must be a readable buffer of at least - * that length. - * \param output The buffer holding the output data. If \p length is greater - * than zero, \p output must be a writable buffer of at least - * that length. - * \param tag The buffer holding the authentication field. This must be a - * readable buffer of at least \p tag_len Bytes. - * \param tag_len The length of the authentication field to generate in Bytes: - * 4, 6, 8, 10, 12, 14 or 16. - * - * \return \c 0 on success. This indicates that the message is authentic. - * \return #MBEDTLS_ERR_CCM_AUTH_FAILED if the tag does not match. - * \return A cipher-specific error code on calculation failure. - */ -int mbedtls_ccm_auth_decrypt( mbedtls_ccm_context *ctx, size_t length, - const unsigned char *iv, size_t iv_len, - const unsigned char *add, size_t add_len, - const unsigned char *input, unsigned char *output, - const unsigned char *tag, size_t tag_len ); - -/** - * \brief This function performs a CCM* authenticated decryption of a - * buffer. - * - * \note When using this function in a variable tag length context, - * the tag length has to be decoded from \p iv and passed to - * this function as \p tag_len. (\p tag needs to be adjusted - * accordingly.) - * - * \param ctx The CCM context to use for decryption. This must be - * initialized and bound to a key. - * \param length The length of the input data in Bytes. - * \param iv The initialization vector (nonce). This must be a readable - * buffer of at least \p iv_len Bytes. - * \param iv_len The length of the nonce in Bytes: 7, 8, 9, 10, 11, 12, - * or 13. The length L of the message length field is - * 15 - \p iv_len. - * \param add The additional data field. This must be a readable buffer of - * at least that \p add_len Bytes. - * \param add_len The length of additional data in Bytes. - * This must be less than 2^16 - 2^8. - * \param input The buffer holding the input data. If \p length is greater - * than zero, \p input must be a readable buffer of at least - * that length. - * \param output The buffer holding the output data. If \p length is greater - * than zero, \p output must be a writable buffer of at least - * that length. - * \param tag The buffer holding the authentication field. This must be a - * readable buffer of at least \p tag_len Bytes. - * \param tag_len The length of the authentication field in Bytes. - * 0, 4, 6, 8, 10, 12, 14 or 16. - * - * \warning Passing \c 0 as \p tag_len means that the message is nos - * longer authenticated. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_CCM_AUTH_FAILED if the tag does not match. - * \return A cipher-specific error code on calculation failure. - */ -int mbedtls_ccm_star_auth_decrypt( mbedtls_ccm_context *ctx, size_t length, - const unsigned char *iv, size_t iv_len, - const unsigned char *add, size_t add_len, - const unsigned char *input, unsigned char *output, - const unsigned char *tag, size_t tag_len ); - -#if defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_AES_C) -/** - * \brief The CCM checkup routine. - * - * \return \c 0 on success. - * \return \c 1 on failure. - */ -int mbedtls_ccm_self_test( int verbose ); -#endif /* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */ - -#ifdef __cplusplus -} -#endif - -#endif /* MBEDTLS_CCM_H */ +COSMOPOLITAN_C_END_ +#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_CCM_H_ */ diff --git a/third_party/mbedtls/certs.c b/third_party/mbedtls/certs.c index 8b5749d20..76236f130 100644 --- a/third_party/mbedtls/certs.c +++ b/third_party/mbedtls/certs.c @@ -1,10 +1,13 @@ -/* clang-format off */ +#include "third_party/mbedtls/certs.h" +#include "third_party/mbedtls/common.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * X.509 test certificates * @@ -24,10 +27,6 @@ asm(".include \"libc/disclaimer.inc\""); * limitations under the License. */ -#include "third_party/mbedtls/common.h" - -#include "third_party/mbedtls/certs.h" - #if defined(MBEDTLS_CERTS_C) /* diff --git a/third_party/mbedtls/certs.h b/third_party/mbedtls/certs.h index 691427dbb..a98b20584 100644 --- a/third_party/mbedtls/certs.h +++ b/third_party/mbedtls/certs.h @@ -1,35 +1,7 @@ -/* clang-format off */ - -/** - * \file certs.h - * - * \brief Sample certificates and DHM parameters for testing - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_CERTS_H #define MBEDTLS_CERTS_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - +/* clang-format off */ #ifdef __cplusplus extern "C" { diff --git a/third_party/mbedtls/chacha20.c b/third_party/mbedtls/chacha20.c index 2df9c8369..1db0a4d82 100644 --- a/third_party/mbedtls/chacha20.c +++ b/third_party/mbedtls/chacha20.c @@ -1,10 +1,17 @@ -/* clang-format off */ +#include "libc/bits/bits.h" +#include "libc/stdio/stdio.h" +#include "third_party/mbedtls/chacha20.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /** * \file chacha20.c * @@ -27,43 +34,17 @@ asm(".include \"libc/disclaimer.inc\""); * See the License for the specific language governing permissions and * limitations under the License. */ - -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_CHACHA20_C) -#include "third_party/mbedtls/chacha20.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - #if !defined(MBEDTLS_CHACHA20_ALT) -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif - /* Parameter validation macros */ #define CHACHA20_VALIDATE_RET( cond ) \ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA ) #define CHACHA20_VALIDATE( cond ) \ MBEDTLS_INTERNAL_VALIDATE( cond ) -#define BYTES_TO_U32_LE( data, offset ) \ - ( (uint32_t) (data)[offset] \ - | (uint32_t) ( (uint32_t) (data)[( offset ) + 1] << 8 ) \ - | (uint32_t) ( (uint32_t) (data)[( offset ) + 2] << 16 ) \ - | (uint32_t) ( (uint32_t) (data)[( offset ) + 3] << 24 ) \ - ) +#define BYTES_TO_U32_LE( data, offset ) READ32LE((data) + (offset)) #define ROTL32( value, amount ) \ ( (uint32_t) ( (value) << (amount) ) | ( (value) >> ( 32 - (amount) ) ) ) diff --git a/third_party/mbedtls/chacha20.h b/third_party/mbedtls/chacha20.h index 623303e07..7a3e1f457 100644 --- a/third_party/mbedtls/chacha20.h +++ b/third_party/mbedtls/chacha20.h @@ -1,45 +1,7 @@ -/* clang-format off */ - -/** - * \file chacha20.h - * - * \brief This file contains ChaCha20 definitions and functions. - * - * ChaCha20 is a stream cipher that can encrypt and decrypt - * information. ChaCha was created by Daniel Bernstein as a variant of - * its Salsa cipher https://cr.yp.to/chacha/chacha-20080128.pdf - * ChaCha20 is the variant with 20 rounds, that was also standardized - * in RFC 7539. - * - * \author Daniel King - */ - -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - #ifndef MBEDTLS_CHACHA20_H #define MBEDTLS_CHACHA20_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - +/* clang-format off */ #define MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA -0x0051 /**< Invalid input parameter(s). */ diff --git a/third_party/mbedtls/chachapoly.c b/third_party/mbedtls/chachapoly.c index 3dd6e1100..fdcbe8ae7 100644 --- a/third_party/mbedtls/chachapoly.c +++ b/third_party/mbedtls/chachapoly.c @@ -1,5 +1,15 @@ -/* clang-format off */ +#include "third_party/mbedtls/chachapoly.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /** * \file chachapoly.c * @@ -20,23 +30,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#include "third_party/mbedtls/common.h" #if defined(MBEDTLS_CHACHAPOLY_C) -#include "third_party/mbedtls/chachapoly.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - #if !defined(MBEDTLS_CHACHAPOLY_ALT) /* Parameter validation macros */ diff --git a/third_party/mbedtls/chachapoly.h b/third_party/mbedtls/chachapoly.h index 70167292e..0db090638 100644 --- a/third_party/mbedtls/chachapoly.h +++ b/third_party/mbedtls/chachapoly.h @@ -1,47 +1,8 @@ -/* clang-format off */ - -/** - * \file chachapoly.h - * - * \brief This file contains the AEAD-ChaCha20-Poly1305 definitions and - * functions. - * - * ChaCha20-Poly1305 is an algorithm for Authenticated Encryption - * with Associated Data (AEAD) that can be used to encrypt and - * authenticate data. It is based on ChaCha20 and Poly1305 by Daniel - * Bernstein and was standardized in RFC 7539. - * - * \author Daniel King - */ - -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - #ifndef MBEDTLS_CHACHAPOLY_H #define MBEDTLS_CHACHAPOLY_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -/* for shared error codes */ #include "third_party/mbedtls/poly1305.h" +/* clang-format off */ #define MBEDTLS_ERR_CHACHAPOLY_BAD_STATE -0x0054 /**< The requested operation is not permitted in the current state. */ #define MBEDTLS_ERR_CHACHAPOLY_AUTH_FAILED -0x0056 /**< Authenticated decryption failed: data was not authentic. */ diff --git a/third_party/mbedtls/check_config.h b/third_party/mbedtls/check.h similarity index 65% rename from third_party/mbedtls/check_config.h rename to third_party/mbedtls/check.h index e440724b4..16cfa303d 100644 --- a/third_party/mbedtls/check_config.h +++ b/third_party/mbedtls/check.h @@ -1,61 +1,7 @@ +#ifndef MBEDTLS_CHECK_H +#define MBEDTLS_CHECK_H /* clang-format off */ -/** - * \file check_config.h - * - * \brief Consistency checks for configuration options - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * It is recommended to include this file from your config.h - * in order to catch dependency issues early. - */ - -#ifndef MBEDTLS_CHECK_CONFIG_H -#define MBEDTLS_CHECK_CONFIG_H - -/* - * We assume CHAR_BIT is 8 in many places. In practice, this is true on our - * target platforms, so not an issue, but let's just be extra sure. - */ -#if CHAR_BIT != 8 -#error "mbed TLS requires a platform with 8-bit chars" -#endif - -#if defined(_WIN32) -#if !defined(MBEDTLS_PLATFORM_C) -#error "MBEDTLS_PLATFORM_C is required on Windows" -#endif - -/* Fix the config here. Not convenient to put an #ifdef _WIN32 in config.h as - * it would confuse config.py. */ -#if !defined(MBEDTLS_PLATFORM_SNPRINTF_ALT) && \ - !defined(MBEDTLS_PLATFORM_SNPRINTF_MACRO) -#define MBEDTLS_PLATFORM_SNPRINTF_ALT -#endif - -#if !defined(MBEDTLS_PLATFORM_VSNPRINTF_ALT) && \ - !defined(MBEDTLS_PLATFORM_VSNPRINTF_MACRO) -#define MBEDTLS_PLATFORM_VSNPRINTF_ALT -#endif -#endif /* _WIN32 */ - #if defined(TARGET_LIKE_MBED) && \ ( defined(MBEDTLS_NET_C) || defined(MBEDTLS_TIMING_C) ) #error "The NET and TIMING modules are not available for mbed OS - please use the network and timing functions provided by mbed OS" @@ -124,8 +70,7 @@ #endif #if defined(MBEDTLS_ECP_RESTARTABLE) && \ - ( defined(MBEDTLS_USE_PSA_CRYPTO) || \ - defined(MBEDTLS_ECDH_COMPUTE_SHARED_ALT) || \ + ( defined(MBEDTLS_ECDH_COMPUTE_SHARED_ALT) || \ defined(MBEDTLS_ECDH_GEN_PUBLIC_ALT) || \ defined(MBEDTLS_ECDSA_SIGN_ALT) || \ defined(MBEDTLS_ECDSA_VERIFY_ALT) || \ @@ -257,10 +202,6 @@ #error "MBEDTLS_ECP_NO_FALLBACK defined, but no alternative implementation enabled" #endif -#if defined(MBEDTLS_HAVEGE_C) && !defined(MBEDTLS_TIMING_C) -#error "MBEDTLS_HAVEGE_C defined, but not all prerequisites" -#endif - #if defined(MBEDTLS_HKDF_C) && !defined(MBEDTLS_MD_C) #error "MBEDTLS_HKDF_C defined, but not all prerequisites" #endif @@ -334,11 +275,6 @@ #error "!MBEDTLS_SSL_KEEP_PEER_CERTIFICATE requires MBEDTLS_SHA512_C, MBEDTLS_SHA256_C or MBEDTLS_SHA1_C" #endif -#if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) && \ - ( !defined(MBEDTLS_PLATFORM_C) || !defined(MBEDTLS_PLATFORM_MEMORY) ) -#error "MBEDTLS_MEMORY_BUFFER_ALLOC_C defined, but not all prerequisites" -#endif - #if defined(MBEDTLS_MEMORY_BACKTRACE) && !defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) #error "MBEDTLS_MEMORY_BACKTRACE defined, but not all prerequesites" #endif @@ -384,247 +320,6 @@ #endif #endif /* MBEDTLS_PKCS11_C */ -#if defined(MBEDTLS_PLATFORM_EXIT_ALT) && !defined(MBEDTLS_PLATFORM_C) -#error "MBEDTLS_PLATFORM_EXIT_ALT defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_EXIT_MACRO) && !defined(MBEDTLS_PLATFORM_C) -#error "MBEDTLS_PLATFORM_EXIT_MACRO defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_EXIT_MACRO) &&\ - ( defined(MBEDTLS_PLATFORM_STD_EXIT) ||\ - defined(MBEDTLS_PLATFORM_EXIT_ALT) ) -#error "MBEDTLS_PLATFORM_EXIT_MACRO and MBEDTLS_PLATFORM_STD_EXIT/MBEDTLS_PLATFORM_EXIT_ALT cannot be defined simultaneously" -#endif - -#if defined(MBEDTLS_PLATFORM_TIME_ALT) &&\ - ( !defined(MBEDTLS_PLATFORM_C) ||\ - !defined(MBEDTLS_HAVE_TIME) ) -#error "MBEDTLS_PLATFORM_TIME_ALT defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_TIME_MACRO) &&\ - ( !defined(MBEDTLS_PLATFORM_C) ||\ - !defined(MBEDTLS_HAVE_TIME) ) -#error "MBEDTLS_PLATFORM_TIME_MACRO defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_TIME_TYPE_MACRO) &&\ - ( !defined(MBEDTLS_PLATFORM_C) ||\ - !defined(MBEDTLS_HAVE_TIME) ) -#error "MBEDTLS_PLATFORM_TIME_TYPE_MACRO defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_TIME_MACRO) &&\ - ( defined(MBEDTLS_PLATFORM_STD_TIME) ||\ - defined(MBEDTLS_PLATFORM_TIME_ALT) ) -#error "MBEDTLS_PLATFORM_TIME_MACRO and MBEDTLS_PLATFORM_STD_TIME/MBEDTLS_PLATFORM_TIME_ALT cannot be defined simultaneously" -#endif - -#if defined(MBEDTLS_PLATFORM_TIME_TYPE_MACRO) &&\ - ( defined(MBEDTLS_PLATFORM_STD_TIME) ||\ - defined(MBEDTLS_PLATFORM_TIME_ALT) ) -#error "MBEDTLS_PLATFORM_TIME_TYPE_MACRO and MBEDTLS_PLATFORM_STD_TIME/MBEDTLS_PLATFORM_TIME_ALT cannot be defined simultaneously" -#endif - -#if defined(MBEDTLS_PLATFORM_FPRINTF_ALT) && !defined(MBEDTLS_PLATFORM_C) -#error "MBEDTLS_PLATFORM_FPRINTF_ALT defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_FPRINTF_MACRO) && !defined(MBEDTLS_PLATFORM_C) -#error "MBEDTLS_PLATFORM_FPRINTF_MACRO defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_FPRINTF_MACRO) &&\ - ( defined(MBEDTLS_PLATFORM_STD_FPRINTF) ||\ - defined(MBEDTLS_PLATFORM_FPRINTF_ALT) ) -#error "MBEDTLS_PLATFORM_FPRINTF_MACRO and MBEDTLS_PLATFORM_STD_FPRINTF/MBEDTLS_PLATFORM_FPRINTF_ALT cannot be defined simultaneously" -#endif - -#if defined(MBEDTLS_PLATFORM_FREE_MACRO) &&\ - ( !defined(MBEDTLS_PLATFORM_C) || !defined(MBEDTLS_PLATFORM_MEMORY) ) -#error "MBEDTLS_PLATFORM_FREE_MACRO defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_FREE_MACRO) &&\ - defined(MBEDTLS_PLATFORM_STD_FREE) -#error "MBEDTLS_PLATFORM_FREE_MACRO and MBEDTLS_PLATFORM_STD_FREE cannot be defined simultaneously" -#endif - -#if defined(MBEDTLS_PLATFORM_FREE_MACRO) && !defined(MBEDTLS_PLATFORM_CALLOC_MACRO) -#error "MBEDTLS_PLATFORM_CALLOC_MACRO must be defined if MBEDTLS_PLATFORM_FREE_MACRO is" -#endif - -#if defined(MBEDTLS_PLATFORM_CALLOC_MACRO) &&\ - ( !defined(MBEDTLS_PLATFORM_C) || !defined(MBEDTLS_PLATFORM_MEMORY) ) -#error "MBEDTLS_PLATFORM_CALLOC_MACRO defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_CALLOC_MACRO) &&\ - defined(MBEDTLS_PLATFORM_STD_CALLOC) -#error "MBEDTLS_PLATFORM_CALLOC_MACRO and MBEDTLS_PLATFORM_STD_CALLOC cannot be defined simultaneously" -#endif - -#if defined(MBEDTLS_PLATFORM_CALLOC_MACRO) && !defined(MBEDTLS_PLATFORM_FREE_MACRO) -#error "MBEDTLS_PLATFORM_FREE_MACRO must be defined if MBEDTLS_PLATFORM_CALLOC_MACRO is" -#endif - -#if defined(MBEDTLS_PLATFORM_MEMORY) && !defined(MBEDTLS_PLATFORM_C) -#error "MBEDTLS_PLATFORM_MEMORY defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_PRINTF_ALT) && !defined(MBEDTLS_PLATFORM_C) -#error "MBEDTLS_PLATFORM_PRINTF_ALT defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_PRINTF_MACRO) && !defined(MBEDTLS_PLATFORM_C) -#error "MBEDTLS_PLATFORM_PRINTF_MACRO defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_PRINTF_MACRO) &&\ - ( defined(MBEDTLS_PLATFORM_STD_PRINTF) ||\ - defined(MBEDTLS_PLATFORM_PRINTF_ALT) ) -#error "MBEDTLS_PLATFORM_PRINTF_MACRO and MBEDTLS_PLATFORM_STD_PRINTF/MBEDTLS_PLATFORM_PRINTF_ALT cannot be defined simultaneously" -#endif - -#if defined(MBEDTLS_PLATFORM_SNPRINTF_ALT) && !defined(MBEDTLS_PLATFORM_C) -#error "MBEDTLS_PLATFORM_SNPRINTF_ALT defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_SNPRINTF_MACRO) && !defined(MBEDTLS_PLATFORM_C) -#error "MBEDTLS_PLATFORM_SNPRINTF_MACRO defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_SNPRINTF_MACRO) &&\ - ( defined(MBEDTLS_PLATFORM_STD_SNPRINTF) ||\ - defined(MBEDTLS_PLATFORM_SNPRINTF_ALT) ) -#error "MBEDTLS_PLATFORM_SNPRINTF_MACRO and MBEDTLS_PLATFORM_STD_SNPRINTF/MBEDTLS_PLATFORM_SNPRINTF_ALT cannot be defined simultaneously" -#endif - -#if defined(MBEDTLS_PLATFORM_STD_MEM_HDR) &&\ - !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS) -#error "MBEDTLS_PLATFORM_STD_MEM_HDR defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_STD_CALLOC) && !defined(MBEDTLS_PLATFORM_MEMORY) -#error "MBEDTLS_PLATFORM_STD_CALLOC defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_STD_CALLOC) && !defined(MBEDTLS_PLATFORM_MEMORY) -#error "MBEDTLS_PLATFORM_STD_CALLOC defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_STD_FREE) && !defined(MBEDTLS_PLATFORM_MEMORY) -#error "MBEDTLS_PLATFORM_STD_FREE defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_STD_EXIT) &&\ - !defined(MBEDTLS_PLATFORM_EXIT_ALT) -#error "MBEDTLS_PLATFORM_STD_EXIT defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_STD_TIME) &&\ - ( !defined(MBEDTLS_PLATFORM_TIME_ALT) ||\ - !defined(MBEDTLS_HAVE_TIME) ) -#error "MBEDTLS_PLATFORM_STD_TIME defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_STD_FPRINTF) &&\ - !defined(MBEDTLS_PLATFORM_FPRINTF_ALT) -#error "MBEDTLS_PLATFORM_STD_FPRINTF defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_STD_PRINTF) &&\ - !defined(MBEDTLS_PLATFORM_PRINTF_ALT) -#error "MBEDTLS_PLATFORM_STD_PRINTF defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_STD_SNPRINTF) &&\ - !defined(MBEDTLS_PLATFORM_SNPRINTF_ALT) -#error "MBEDTLS_PLATFORM_STD_SNPRINTF defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_ENTROPY_NV_SEED) &&\ - ( !defined(MBEDTLS_PLATFORM_C) || !defined(MBEDTLS_ENTROPY_C) ) -#error "MBEDTLS_ENTROPY_NV_SEED defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_NV_SEED_ALT) &&\ - !defined(MBEDTLS_ENTROPY_NV_SEED) -#error "MBEDTLS_PLATFORM_NV_SEED_ALT defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_STD_NV_SEED_READ) &&\ - !defined(MBEDTLS_PLATFORM_NV_SEED_ALT) -#error "MBEDTLS_PLATFORM_STD_NV_SEED_READ defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_STD_NV_SEED_WRITE) &&\ - !defined(MBEDTLS_PLATFORM_NV_SEED_ALT) -#error "MBEDTLS_PLATFORM_STD_NV_SEED_WRITE defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PLATFORM_NV_SEED_READ_MACRO) &&\ - ( defined(MBEDTLS_PLATFORM_STD_NV_SEED_READ) ||\ - defined(MBEDTLS_PLATFORM_NV_SEED_ALT) ) -#error "MBEDTLS_PLATFORM_NV_SEED_READ_MACRO and MBEDTLS_PLATFORM_STD_NV_SEED_READ cannot be defined simultaneously" -#endif - -#if defined(MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO) &&\ - ( defined(MBEDTLS_PLATFORM_STD_NV_SEED_WRITE) ||\ - defined(MBEDTLS_PLATFORM_NV_SEED_ALT) ) -#error "MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO and MBEDTLS_PLATFORM_STD_NV_SEED_WRITE cannot be defined simultaneously" -#endif - -#if defined(MBEDTLS_PSA_CRYPTO_C) && \ - !( ( ( defined(MBEDTLS_CTR_DRBG_C) || defined(MBEDTLS_HMAC_DRBG_C) ) && \ - defined(MBEDTLS_ENTROPY_C) ) || \ - defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) ) -#error "MBEDTLS_PSA_CRYPTO_C defined, but not all prerequisites (missing RNG)" -#endif - -#if defined(MBEDTLS_PSA_CRYPTO_SPM) && !defined(MBEDTLS_PSA_CRYPTO_C) -#error "MBEDTLS_PSA_CRYPTO_SPM defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) && \ - ! ( defined(MBEDTLS_PSA_CRYPTO_C) && \ - defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) ) -#error "MBEDTLS_PSA_CRYPTO_SE_C defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) && \ - ! defined(MBEDTLS_PSA_CRYPTO_C) -#error "MBEDTLS_PSA_CRYPTO_STORAGE_C defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PSA_INJECT_ENTROPY) && \ - !( defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) && \ - defined(MBEDTLS_ENTROPY_NV_SEED) ) -#error "MBEDTLS_PSA_INJECT_ENTROPY defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PSA_INJECT_ENTROPY) && \ - !defined(MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES) -#error "MBEDTLS_PSA_INJECT_ENTROPY is not compatible with actual entropy sources" -#endif - -#if defined(MBEDTLS_PSA_INJECT_ENTROPY) && \ - defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) -#error "MBEDTLS_PSA_INJECT_ENTROPY is not compatible with MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG" -#endif - -#if defined(MBEDTLS_PSA_ITS_FILE_C) && \ - !defined(MBEDTLS_FS_IO) -#error "MBEDTLS_PSA_ITS_FILE_C defined, but not all prerequisites" -#endif - -#if defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER) && \ - defined(MBEDTLS_USE_PSA_CRYPTO) -#error "MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER defined, but it cannot coexist with MBEDTLS_USE_PSA_CRYPTO." -#endif - #if defined(MBEDTLS_RSA_C) && ( !defined(MBEDTLS_BIGNUM_C) || \ !defined(MBEDTLS_OID_C) ) #error "MBEDTLS_RSA_C defined, but not all prerequisites" @@ -635,11 +330,6 @@ #error "MBEDTLS_RSA_C defined, but none of the PKCS1 versions enabled" #endif -#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) && \ - ( !defined(MBEDTLS_RSA_C) || !defined(MBEDTLS_PKCS1_V21) ) -#error "MBEDTLS_X509_RSASSA_PSS_SUPPORT defined, but not all prerequisites" -#endif - #if defined(MBEDTLS_SHA512_NO_SHA384) && !defined(MBEDTLS_SHA512_C) #error "MBEDTLS_SHA512_NO_SHA384 defined without MBEDTLS_SHA512_C" #endif @@ -783,7 +473,7 @@ #if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING) && \ !defined(MBEDTLS_SSL_PROTO_SSL3) && !defined(MBEDTLS_SSL_PROTO_TLS1) -#error "MBEDTLS_SSL_CBC_RECORD_SPLITTING defined, but not all prerequisites" +#undef MBEDTLS_SSL_CBC_RECORD_SPLITTING #endif #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) && \ @@ -791,29 +481,6 @@ #error "MBEDTLS_SSL_SERVER_NAME_INDICATION defined, but not all prerequisites" #endif -#if defined(MBEDTLS_THREADING_PTHREAD) -#if !defined(MBEDTLS_THREADING_C) || defined(MBEDTLS_THREADING_IMPL) -#error "MBEDTLS_THREADING_PTHREAD defined, but not all prerequisites" -#endif -#define MBEDTLS_THREADING_IMPL -#endif - -#if defined(MBEDTLS_THREADING_ALT) -#if !defined(MBEDTLS_THREADING_C) || defined(MBEDTLS_THREADING_IMPL) -#error "MBEDTLS_THREADING_ALT defined, but not all prerequisites" -#endif -#define MBEDTLS_THREADING_IMPL -#endif - -#if defined(MBEDTLS_THREADING_C) && !defined(MBEDTLS_THREADING_IMPL) -#error "MBEDTLS_THREADING_C defined, single threading implementation required" -#endif -#undef MBEDTLS_THREADING_IMPL - -#if defined(MBEDTLS_USE_PSA_CRYPTO) && !defined(MBEDTLS_PSA_CRYPTO_C) -#error "MBEDTLS_USE_PSA_CRYPTO defined, but not all prerequisites" -#endif - #if defined(MBEDTLS_VERSION_FEATURES) && !defined(MBEDTLS_VERSION_C) #error "MBEDTLS_VERSION_FEATURES defined, but not all prerequisites" #endif @@ -895,6 +562,161 @@ #error "MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH defined, but not all prerequisites" #endif +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CCM_C) || defined(MBEDTLS_CHACHAPOLY_C) +#define MBEDTLS_CIPHER_MODE_AEAD +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +#define MBEDTLS_CIPHER_MODE_WITH_PADDING +#endif + +#if defined(MBEDTLS_ARC4_C) || defined(MBEDTLS_CIPHER_NULL_CIPHER) || \ + defined(MBEDTLS_CHACHA20_C) +#define MBEDTLS_CIPHER_MODE_STREAM +#endif + +/* Key exchanges using a certificate */ +#if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) +#define MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED +#endif + +/* Key exchanges allowing client certificate requests */ +#if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) +#define MBEDTLS_KEY_EXCHANGE_CERT_REQ_ALLOWED_ENABLED +#endif + +/* Key exchanges involving server signature in ServerKeyExchange */ +#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) +#define MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED +#endif + +/* Key exchanges using ECDH */ +#if defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) +#define MBEDTLS_KEY_EXCHANGE_SOME_ECDH_ENABLED +#endif + +/* Key exchanges that don't involve ephemeral keys */ +#if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_SOME_ECDH_ENABLED) +#define MBEDTLS_KEY_EXCHANGE_SOME_NON_PFS_ENABLED +#endif + +/* Key exchanges that involve ephemeral keys */ +#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) +#define MBEDTLS_KEY_EXCHANGE_SOME_PFS_ENABLED +#endif + +/* Key exchanges using a PSK */ +#if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) +#define MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED +#endif + +/* Key exchanges using DHE */ +#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) +#define MBEDTLS_KEY_EXCHANGE_SOME_DHE_ENABLED +#endif + +/* Key exchanges using ECDHE */ +#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) +#define MBEDTLS_KEY_EXCHANGE_SOME_ECDHE_ENABLED +#endif + +/* Shorthand for restartable ECC */ +#if defined(MBEDTLS_ECP_RESTARTABLE) && \ + defined(MBEDTLS_SSL_CLI_C) && \ + defined(MBEDTLS_SSL_PROTO_TLS1_2) && \ + defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) +#define MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED +#endif + +/* Flags indicating whether to include code that is specific to certain + * types of curves. These flags are for internal library use only. */ +#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) || \ + defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) || \ + defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) || \ + defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) || \ + defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) || \ + defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) || \ + defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) || \ + defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) || \ + defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED) || \ + defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED) || \ + defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) +#define MBEDTLS_ECP_SHORT_WEIERSTRASS_ENABLED +#endif +#if defined(MBEDTLS_ECP_DP_CURVE25519_ENABLED) || \ + defined(MBEDTLS_ECP_DP_CURVE448_ENABLED) +#define MBEDTLS_ECP_MONTGOMERY_ENABLED +#endif + +/* This macro determines whether CBC is supported. */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) && \ + ( defined(MBEDTLS_AES_C) || \ + defined(MBEDTLS_CAMELLIA_C) || \ + defined(MBEDTLS_ARIA_C) || \ + defined(MBEDTLS_DES_C) ) +#define MBEDTLS_SSL_SOME_SUITES_USE_CBC +#endif + +/* This macro determines whether the CBC construct used in TLS 1.0-1.2 (as + * opposed to the very different CBC construct used in SSLv3) is supported. */ +#if defined(MBEDTLS_SSL_SOME_SUITES_USE_CBC) && \ + ( defined(MBEDTLS_SSL_PROTO_TLS1) || \ + defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ + defined(MBEDTLS_SSL_PROTO_TLS1_2) ) +#define MBEDTLS_SSL_SOME_SUITES_USE_TLS_CBC +#endif + +#if defined(MBEDTLS_ARC4_C) || defined(MBEDTLS_CIPHER_NULL_CIPHER) || \ + defined(MBEDTLS_SSL_SOME_SUITES_USE_CBC) +#define MBEDTLS_SSL_SOME_MODES_USE_MAC +#endif + +#if defined(MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED) && \ + !defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) +#define MBEDTLS_SSL_PEER_CERT_DIGEST_MAX_LEN 48 +#if defined(MBEDTLS_SHA256_C) +#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE MBEDTLS_MD_SHA256 +#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_LEN 32 +#elif defined(MBEDTLS_SHA512_C) +#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE MBEDTLS_MD_SHA384 +#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_LEN 48 +#elif defined(MBEDTLS_SHA1_C) +#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE MBEDTLS_MD_SHA1 +#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_LEN 20 +#else +/* This is already checked in check.h, but be sure. */ +#error "Bad configuration - need SHA-1, SHA-256 or SHA-512 enabled to compute digest of peer CRT." +#endif +#endif + /* * Avoid warning from -pedantic. This is a convenient place for this * workaround since this is included by every single file before the @@ -902,4 +724,4 @@ */ typedef int mbedtls_iso_c_forbids_empty_translation_units; -#endif /* MBEDTLS_CHECK_CONFIG_H */ +#endif /* MBEDTLS_CHECK_H */ diff --git a/third_party/mbedtls/check_crypto_config.h b/third_party/mbedtls/check_crypto_config.h deleted file mode 100644 index 09c0766eb..000000000 --- a/third_party/mbedtls/check_crypto_config.h +++ /dev/null @@ -1,74 +0,0 @@ -/* clang-format off */ - -/** - * \file check_crypto_config.h - * - * \brief Consistency checks for PSA configuration options - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * It is recommended to include this file from your crypto_config.h - * in order to catch dependency issues early. - */ - -#ifndef MBEDTLS_CHECK_CRYPTO_CONFIG_H -#define MBEDTLS_CHECK_CRYPTO_CONFIG_H - -#if defined(PSA_WANT_ALG_DETERMINISTIC_ECDSA) && \ - !( defined(PSA_WANT_KEY_TYPE_ECC_KEY_PAIR) || \ - defined(PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY) ) -#error "PSA_WANT_ALG_DETERMINISTIC_ECDSA defined, but not all prerequisites" -#endif - -#if defined(PSA_WANT_ALG_ECDSA) && \ - !( defined(PSA_WANT_KEY_TYPE_ECC_KEY_PAIR) || \ - defined(PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY) ) -#error "PSA_WANT_ALG_ECDSA defined, but not all prerequisites" -#endif - -#if defined(PSA_WANT_ALG_RSA_PKCS1V15_CRYPT) && \ - !( defined(PSA_WANT_KEY_TYPE_RSA_KEY_PAIR) || \ - defined(PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY) ) -#error "PSA_WANT_ALG_RSA_PKCS1V15_CRYPT defined, but not all prerequisites" -#endif - -#if defined(PSA_WANT_ALG_RSA_PKCS1V15_SIGN) && \ - !( defined(PSA_WANT_KEY_TYPE_RSA_KEY_PAIR) || \ - defined(PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY) ) -#error "PSA_WANT_ALG_RSA_PKCS1V15_SIGN defined, but not all prerequisites" -#endif - -#if defined(PSA_WANT_ALG_RSA_OAEP) && \ - !( defined(PSA_WANT_KEY_TYPE_RSA_KEY_PAIR) || \ - defined(PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY) ) -#error "PSA_WANT_ALG_RSA_OAEP defined, but not all prerequisites" -#endif - -#if defined(PSA_WANT_ALG_RSA_PSS) && \ - !( defined(PSA_WANT_KEY_TYPE_RSA_KEY_PAIR) || \ - defined(PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY) ) -#error "PSA_WANT_ALG_RSA_PSS defined, but not all prerequisites" -#endif - -#if defined(PSA_WANT_KEY_TYPE_ECC_KEY_PAIR) && \ - !defined(PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY) -#error "PSA_WANT_KEY_TYPE_ECC_KEY_PAIR defined, but not all prerequisites" -#endif - -#endif /* MBEDTLS_CHECK_CRYPTO_CONFIG_H */ diff --git a/third_party/mbedtls/cipher.c b/third_party/mbedtls/cipher.c index f14ade685..5f5ee84a5 100644 --- a/third_party/mbedtls/cipher.c +++ b/third_party/mbedtls/cipher.c @@ -1,10 +1,21 @@ -/* clang-format off */ +#include "third_party/mbedtls/ccm.h" +#include "third_party/mbedtls/chacha20.h" +#include "third_party/mbedtls/chachapoly.h" +#include "third_party/mbedtls/cipher.h" +#include "third_party/mbedtls/cipher_internal.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/gcm.h" +#include "third_party/mbedtls/nist_kw.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /** * \file cipher.c * @@ -28,53 +39,8 @@ asm(".include \"libc/disclaimer.inc\""); * limitations under the License. */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_CIPHER_C) -#include "third_party/mbedtls/sheesh.h" -#include "third_party/mbedtls/cipher.h" -#include "third_party/mbedtls/cipher_internal.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_CHACHAPOLY_C) -#include "third_party/mbedtls/chachapoly.h" -#endif - -#if defined(MBEDTLS_GCM_C) -#include "third_party/mbedtls/gcm.h" -#endif - -#if defined(MBEDTLS_CCM_C) -#include "third_party/mbedtls/ccm.h" -#endif - -#if defined(MBEDTLS_CHACHA20_C) -#include "third_party/mbedtls/chacha20.h" -#endif - -#if defined(MBEDTLS_CMAC_C) -#include "third_party/mbedtls/cmac.h" -#endif - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/psa_util.h" -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - -#if defined(MBEDTLS_NIST_KW_C) -#include "third_party/mbedtls/nist_kw.h" -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - #define CIPHER_VALIDATE_RET( cond ) \ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ) #define CIPHER_VALIDATE( cond ) \ @@ -1475,7 +1441,6 @@ static int mbedtls_cipher_aead_decrypt( mbedtls_cipher_context_t *ctx, return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) /* * Packet-oriented encryption for AEAD modes: public legacy function. */ @@ -1521,7 +1486,7 @@ int mbedtls_cipher_auth_decrypt( mbedtls_cipher_context_t *ctx, input, ilen, output, olen, tag, tag_len ) ); } -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ + #endif /* MBEDTLS_CIPHER_MODE_AEAD */ #if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) diff --git a/third_party/mbedtls/cipher.h b/third_party/mbedtls/cipher.h index 74ed4e1eb..4a15ee6ca 100644 --- a/third_party/mbedtls/cipher.h +++ b/third_party/mbedtls/cipher.h @@ -1,59 +1,8 @@ -/* clang-format off */ - -/** - * \file cipher.h - * - * \brief This file contains an abstraction interface for use with the cipher - * primitives provided by the library. It provides a common interface to all of - * the available cipher operations. - * - * \author Adriaan de Jong - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - #ifndef MBEDTLS_CIPHER_H #define MBEDTLS_CIPHER_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "third_party/mbedtls/platform_util.h" - -#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CCM_C) || defined(MBEDTLS_CHACHAPOLY_C) -#define MBEDTLS_CIPHER_MODE_AEAD -#endif - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -#define MBEDTLS_CIPHER_MODE_WITH_PADDING -#endif - -#if defined(MBEDTLS_ARC4_C) || defined(MBEDTLS_CIPHER_NULL_CIPHER) || \ - defined(MBEDTLS_CHACHA20_C) -#define MBEDTLS_CIPHER_MODE_STREAM -#endif - -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif +#include "third_party/mbedtls/platform.h" +/* clang-format off */ #define MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE -0x6080 /**< The selected feature is not available. */ #define MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA -0x6100 /**< Bad input parameters. */ @@ -349,18 +298,6 @@ typedef struct mbedtls_cipher_context_t /** CMAC-specific context. */ mbedtls_cmac_context_t *cmac_ctx; #endif - -#if defined(MBEDTLS_USE_PSA_CRYPTO) - /** Indicates whether the cipher operations should be performed - * by Mbed TLS' own crypto library or an external implementation - * of the PSA Crypto API. - * This is unset if the cipher context was established through - * mbedtls_cipher_setup(), and set if it was established through - * mbedtls_cipher_setup_psa(). - */ - unsigned char psa_enabled; -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - } mbedtls_cipher_context_t; /** @@ -460,33 +397,6 @@ void mbedtls_cipher_free( mbedtls_cipher_context_t *ctx ); int mbedtls_cipher_setup( mbedtls_cipher_context_t *ctx, const mbedtls_cipher_info_t *cipher_info ); -#if defined(MBEDTLS_USE_PSA_CRYPTO) -/** - * \brief This function initializes a cipher context for - * PSA-based use with the given cipher primitive. - * - * \note See #MBEDTLS_USE_PSA_CRYPTO for information on PSA. - * - * \param ctx The context to initialize. May not be \c NULL. - * \param cipher_info The cipher to use. - * \param taglen For AEAD ciphers, the length in bytes of the - * authentication tag to use. Subsequent uses of - * mbedtls_cipher_auth_encrypt() or - * mbedtls_cipher_auth_decrypt() must provide - * the same tag length. - * For non-AEAD ciphers, the value must be \c 0. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on - * parameter-verification failure. - * \return #MBEDTLS_ERR_CIPHER_ALLOC_FAILED if allocation of the - * cipher-specific context fails. - */ -int mbedtls_cipher_setup_psa( mbedtls_cipher_context_t *ctx, - const mbedtls_cipher_info_t *cipher_info, - size_t taglen ); -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - /** * \brief This function returns the block size of the given cipher. * @@ -853,17 +763,10 @@ int mbedtls_cipher_check_tag( mbedtls_cipher_context_t *ctx, * \return A cipher-specific error code on failure. */ int mbedtls_cipher_crypt( mbedtls_cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen ); + const unsigned char *iv, size_t iv_len, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen ); -#if defined(MBEDTLS_CIPHER_MODE_AEAD) -#if ! defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif /* MBEDTLS_DEPRECATED_WARNING */ /** * \brief The generic authenticated encryption (AEAD) function. * @@ -911,12 +814,11 @@ int mbedtls_cipher_crypt( mbedtls_cipher_context_t *ctx, * \return A cipher-specific error code on failure. */ int mbedtls_cipher_auth_encrypt( mbedtls_cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len, - const unsigned char *ad, size_t ad_len, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, - unsigned char *tag, size_t tag_len ) - MBEDTLS_DEPRECATED; + const unsigned char *iv, size_t iv_len, + const unsigned char *ad, size_t ad_len, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, + unsigned char *tag, size_t tag_len ); /** * \brief The generic authenticated decryption (AEAD) function. @@ -970,15 +872,11 @@ int mbedtls_cipher_auth_encrypt( mbedtls_cipher_context_t *ctx, * \return A cipher-specific error code on failure. */ int mbedtls_cipher_auth_decrypt( mbedtls_cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len, - const unsigned char *ad, size_t ad_len, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, - const unsigned char *tag, size_t tag_len ) - MBEDTLS_DEPRECATED; -#undef MBEDTLS_DEPRECATED -#endif /* MBEDTLS_DEPRECATED_REMOVED */ -#endif /* MBEDTLS_CIPHER_MODE_AEAD */ + const unsigned char *iv, size_t iv_len, + const unsigned char *ad, size_t ad_len, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, + const unsigned char *tag, size_t tag_len ); #if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) /** diff --git a/third_party/mbedtls/cipher_internal.h b/third_party/mbedtls/cipher_internal.h index 41d0a2806..06fe74adb 100644 --- a/third_party/mbedtls/cipher_internal.h +++ b/third_party/mbedtls/cipher_internal.h @@ -1,46 +1,9 @@ -/* clang-format off */ - -/** - * \file cipher_internal.h - * - * \brief Cipher wrappers. - * - * \author Adriaan de Jong - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_CIPHER_WRAP_H #define MBEDTLS_CIPHER_WRAP_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/cipher.h" - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -#include "third_party/mbedtls/crypto.h" -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - -#ifdef __cplusplus -extern "C" { -#endif +#include "third_party/mbedtls/config.h" +COSMOPOLITAN_C_START_ +/* clang-format off */ /** * Base cipher information. The non-mode specific functions and values. @@ -118,35 +81,9 @@ typedef struct const mbedtls_cipher_info_t *info; } mbedtls_cipher_definition_t; -#if defined(MBEDTLS_USE_PSA_CRYPTO) -typedef enum -{ - MBEDTLS_CIPHER_PSA_KEY_UNSET = 0, - MBEDTLS_CIPHER_PSA_KEY_OWNED, /* Used for PSA-based cipher contexts which */ - /* use raw key material internally imported */ - /* as a volatile key, and which hence need */ - /* to destroy that key when the context is */ - /* freed. */ - MBEDTLS_CIPHER_PSA_KEY_NOT_OWNED, /* Used for PSA-based cipher contexts */ - /* which use a key provided by the */ - /* user, and which hence will not be */ - /* destroyed when the context is freed. */ -} mbedtls_cipher_psa_key_ownership; - -typedef struct -{ - psa_algorithm_t alg; - psa_key_id_t slot; - mbedtls_cipher_psa_key_ownership slot_state; -} mbedtls_cipher_context_psa; -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - extern const mbedtls_cipher_definition_t mbedtls_cipher_definitions[]; extern int mbedtls_cipher_supported[]; -#ifdef __cplusplus -} -#endif - +COSMOPOLITAN_C_END_ #endif /* MBEDTLS_CIPHER_WRAP_H */ diff --git a/third_party/mbedtls/cipher_wrap.c b/third_party/mbedtls/cipher_wrap.c index f201549f5..973c23404 100644 --- a/third_party/mbedtls/cipher_wrap.c +++ b/third_party/mbedtls/cipher_wrap.c @@ -1,5 +1,23 @@ -/* clang-format off */ +#include "libc/mem/mem.h" +#include "third_party/mbedtls/aes.h" +#include "third_party/mbedtls/ccm.h" +#include "third_party/mbedtls/chacha20.h" +#include "third_party/mbedtls/chachapoly.h" +#include "third_party/mbedtls/cipher_internal.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/des.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/gcm.h" +#include "third_party/mbedtls/nist_kw.h" +#include "third_party/mbedtls/platform.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /** * \file cipher_wrap.c * @@ -22,68 +40,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_CIPHER_C) -#include "third_party/mbedtls/cipher_internal.h" -#include "third_party/mbedtls/error.h" - -#if defined(MBEDTLS_CHACHAPOLY_C) -#include "third_party/mbedtls/chachapoly.h" -#endif - -#if defined(MBEDTLS_AES_C) -#include "third_party/mbedtls/aes.h" -#endif - -#if defined(MBEDTLS_ARC4_C) -#include "third_party/mbedtls/arc4.h" -#endif - -#if defined(MBEDTLS_CAMELLIA_C) -#include "third_party/mbedtls/camellia.h" -#endif - -#if defined(MBEDTLS_ARIA_C) -#include "third_party/mbedtls/aria.h" -#endif - -#if defined(MBEDTLS_DES_C) -#include "third_party/mbedtls/des.h" -#endif - -#if defined(MBEDTLS_BLOWFISH_C) -#include "third_party/mbedtls/blowfish.h" -#endif - -#if defined(MBEDTLS_CHACHA20_C) -#include "third_party/mbedtls/chacha20.h" -#endif - -#if defined(MBEDTLS_GCM_C) -#include "third_party/mbedtls/gcm.h" -#endif - -#if defined(MBEDTLS_CCM_C) -#include "third_party/mbedtls/ccm.h" -#endif - -#if defined(MBEDTLS_NIST_KW_C) -#include "third_party/mbedtls/nist_kw.h" -#endif - -#if defined(MBEDTLS_CIPHER_NULL_CIPHER) -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - #if defined(MBEDTLS_GCM_C) /* shared by all GCM ciphers */ static void *gcm_ctx_alloc( void ) @@ -651,757 +609,6 @@ static const mbedtls_cipher_info_t aes_256_ccm_info = { #endif /* MBEDTLS_AES_C */ -#if defined(MBEDTLS_CAMELLIA_C) - -static int camellia_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, - const unsigned char *input, unsigned char *output ) -{ - return mbedtls_camellia_crypt_ecb( (mbedtls_camellia_context *) ctx, operation, input, - output ); -} - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -static int camellia_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, - size_t length, unsigned char *iv, - const unsigned char *input, unsigned char *output ) -{ - return mbedtls_camellia_crypt_cbc( (mbedtls_camellia_context *) ctx, operation, length, iv, - input, output ); -} -#endif /* MBEDTLS_CIPHER_MODE_CBC */ - -#if defined(MBEDTLS_CIPHER_MODE_CFB) -static int camellia_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation, - size_t length, size_t *iv_off, unsigned char *iv, - const unsigned char *input, unsigned char *output ) -{ - return mbedtls_camellia_crypt_cfb128( (mbedtls_camellia_context *) ctx, operation, length, - iv_off, iv, input, output ); -} -#endif /* MBEDTLS_CIPHER_MODE_CFB */ - -#if defined(MBEDTLS_CIPHER_MODE_CTR) -static int camellia_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off, - unsigned char *nonce_counter, unsigned char *stream_block, - const unsigned char *input, unsigned char *output ) -{ - return mbedtls_camellia_crypt_ctr( (mbedtls_camellia_context *) ctx, length, nc_off, - nonce_counter, stream_block, input, output ); -} -#endif /* MBEDTLS_CIPHER_MODE_CTR */ - -static int camellia_setkey_dec_wrap( void *ctx, const unsigned char *key, - unsigned int key_bitlen ) -{ - return mbedtls_camellia_setkey_dec( (mbedtls_camellia_context *) ctx, key, key_bitlen ); -} - -static int camellia_setkey_enc_wrap( void *ctx, const unsigned char *key, - unsigned int key_bitlen ) -{ - return mbedtls_camellia_setkey_enc( (mbedtls_camellia_context *) ctx, key, key_bitlen ); -} - -static void * camellia_ctx_alloc( void ) -{ - mbedtls_camellia_context *ctx; - ctx = mbedtls_calloc( 1, sizeof( mbedtls_camellia_context ) ); - - if( ctx == NULL ) - return( NULL ); - - mbedtls_camellia_init( ctx ); - - return( ctx ); -} - -static void camellia_ctx_free( void *ctx ) -{ - mbedtls_camellia_free( (mbedtls_camellia_context *) ctx ); - mbedtls_free( ctx ); -} - -static const mbedtls_cipher_base_t camellia_info = { - MBEDTLS_CIPHER_ID_CAMELLIA, - camellia_crypt_ecb_wrap, -#if defined(MBEDTLS_CIPHER_MODE_CBC) - camellia_crypt_cbc_wrap, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CFB) - camellia_crypt_cfb128_wrap, -#endif -#if defined(MBEDTLS_CIPHER_MODE_OFB) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CTR) - camellia_crypt_ctr_wrap, -#endif -#if defined(MBEDTLS_CIPHER_MODE_XTS) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_STREAM) - NULL, -#endif - camellia_setkey_enc_wrap, - camellia_setkey_dec_wrap, - camellia_ctx_alloc, - camellia_ctx_free -}; - -static const mbedtls_cipher_info_t camellia_128_ecb_info = { - MBEDTLS_CIPHER_CAMELLIA_128_ECB, - MBEDTLS_MODE_ECB, - 128, - "CAMELLIA-128-ECB", - 0, - 0, - 16, - &camellia_info -}; - -static const mbedtls_cipher_info_t camellia_192_ecb_info = { - MBEDTLS_CIPHER_CAMELLIA_192_ECB, - MBEDTLS_MODE_ECB, - 192, - "CAMELLIA-192-ECB", - 0, - 0, - 16, - &camellia_info -}; - -static const mbedtls_cipher_info_t camellia_256_ecb_info = { - MBEDTLS_CIPHER_CAMELLIA_256_ECB, - MBEDTLS_MODE_ECB, - 256, - "CAMELLIA-256-ECB", - 0, - 0, - 16, - &camellia_info -}; - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -static const mbedtls_cipher_info_t camellia_128_cbc_info = { - MBEDTLS_CIPHER_CAMELLIA_128_CBC, - MBEDTLS_MODE_CBC, - 128, - "CAMELLIA-128-CBC", - 16, - 0, - 16, - &camellia_info -}; - -static const mbedtls_cipher_info_t camellia_192_cbc_info = { - MBEDTLS_CIPHER_CAMELLIA_192_CBC, - MBEDTLS_MODE_CBC, - 192, - "CAMELLIA-192-CBC", - 16, - 0, - 16, - &camellia_info -}; - -static const mbedtls_cipher_info_t camellia_256_cbc_info = { - MBEDTLS_CIPHER_CAMELLIA_256_CBC, - MBEDTLS_MODE_CBC, - 256, - "CAMELLIA-256-CBC", - 16, - 0, - 16, - &camellia_info -}; -#endif /* MBEDTLS_CIPHER_MODE_CBC */ - -#if defined(MBEDTLS_CIPHER_MODE_CFB) -static const mbedtls_cipher_info_t camellia_128_cfb128_info = { - MBEDTLS_CIPHER_CAMELLIA_128_CFB128, - MBEDTLS_MODE_CFB, - 128, - "CAMELLIA-128-CFB128", - 16, - 0, - 16, - &camellia_info -}; - -static const mbedtls_cipher_info_t camellia_192_cfb128_info = { - MBEDTLS_CIPHER_CAMELLIA_192_CFB128, - MBEDTLS_MODE_CFB, - 192, - "CAMELLIA-192-CFB128", - 16, - 0, - 16, - &camellia_info -}; - -static const mbedtls_cipher_info_t camellia_256_cfb128_info = { - MBEDTLS_CIPHER_CAMELLIA_256_CFB128, - MBEDTLS_MODE_CFB, - 256, - "CAMELLIA-256-CFB128", - 16, - 0, - 16, - &camellia_info -}; -#endif /* MBEDTLS_CIPHER_MODE_CFB */ - -#if defined(MBEDTLS_CIPHER_MODE_CTR) -static const mbedtls_cipher_info_t camellia_128_ctr_info = { - MBEDTLS_CIPHER_CAMELLIA_128_CTR, - MBEDTLS_MODE_CTR, - 128, - "CAMELLIA-128-CTR", - 16, - 0, - 16, - &camellia_info -}; - -static const mbedtls_cipher_info_t camellia_192_ctr_info = { - MBEDTLS_CIPHER_CAMELLIA_192_CTR, - MBEDTLS_MODE_CTR, - 192, - "CAMELLIA-192-CTR", - 16, - 0, - 16, - &camellia_info -}; - -static const mbedtls_cipher_info_t camellia_256_ctr_info = { - MBEDTLS_CIPHER_CAMELLIA_256_CTR, - MBEDTLS_MODE_CTR, - 256, - "CAMELLIA-256-CTR", - 16, - 0, - 16, - &camellia_info -}; -#endif /* MBEDTLS_CIPHER_MODE_CTR */ - -#if defined(MBEDTLS_GCM_C) -static int gcm_camellia_setkey_wrap( void *ctx, const unsigned char *key, - unsigned int key_bitlen ) -{ - return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA, - key, key_bitlen ); -} - -static const mbedtls_cipher_base_t gcm_camellia_info = { - MBEDTLS_CIPHER_ID_CAMELLIA, - NULL, -#if defined(MBEDTLS_CIPHER_MODE_CBC) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CFB) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_OFB) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CTR) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_XTS) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_STREAM) - NULL, -#endif - gcm_camellia_setkey_wrap, - gcm_camellia_setkey_wrap, - gcm_ctx_alloc, - gcm_ctx_free, -}; - -static const mbedtls_cipher_info_t camellia_128_gcm_info = { - MBEDTLS_CIPHER_CAMELLIA_128_GCM, - MBEDTLS_MODE_GCM, - 128, - "CAMELLIA-128-GCM", - 12, - MBEDTLS_CIPHER_VARIABLE_IV_LEN, - 16, - &gcm_camellia_info -}; - -static const mbedtls_cipher_info_t camellia_192_gcm_info = { - MBEDTLS_CIPHER_CAMELLIA_192_GCM, - MBEDTLS_MODE_GCM, - 192, - "CAMELLIA-192-GCM", - 12, - MBEDTLS_CIPHER_VARIABLE_IV_LEN, - 16, - &gcm_camellia_info -}; - -static const mbedtls_cipher_info_t camellia_256_gcm_info = { - MBEDTLS_CIPHER_CAMELLIA_256_GCM, - MBEDTLS_MODE_GCM, - 256, - "CAMELLIA-256-GCM", - 12, - MBEDTLS_CIPHER_VARIABLE_IV_LEN, - 16, - &gcm_camellia_info -}; -#endif /* MBEDTLS_GCM_C */ - -#if defined(MBEDTLS_CCM_C) -static int ccm_camellia_setkey_wrap( void *ctx, const unsigned char *key, - unsigned int key_bitlen ) -{ - return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA, - key, key_bitlen ); -} - -static const mbedtls_cipher_base_t ccm_camellia_info = { - MBEDTLS_CIPHER_ID_CAMELLIA, - NULL, -#if defined(MBEDTLS_CIPHER_MODE_CBC) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CFB) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_OFB) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CTR) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_XTS) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_STREAM) - NULL, -#endif - ccm_camellia_setkey_wrap, - ccm_camellia_setkey_wrap, - ccm_ctx_alloc, - ccm_ctx_free, -}; - -static const mbedtls_cipher_info_t camellia_128_ccm_info = { - MBEDTLS_CIPHER_CAMELLIA_128_CCM, - MBEDTLS_MODE_CCM, - 128, - "CAMELLIA-128-CCM", - 12, - MBEDTLS_CIPHER_VARIABLE_IV_LEN, - 16, - &ccm_camellia_info -}; - -static const mbedtls_cipher_info_t camellia_192_ccm_info = { - MBEDTLS_CIPHER_CAMELLIA_192_CCM, - MBEDTLS_MODE_CCM, - 192, - "CAMELLIA-192-CCM", - 12, - MBEDTLS_CIPHER_VARIABLE_IV_LEN, - 16, - &ccm_camellia_info -}; - -static const mbedtls_cipher_info_t camellia_256_ccm_info = { - MBEDTLS_CIPHER_CAMELLIA_256_CCM, - MBEDTLS_MODE_CCM, - 256, - "CAMELLIA-256-CCM", - 12, - MBEDTLS_CIPHER_VARIABLE_IV_LEN, - 16, - &ccm_camellia_info -}; -#endif /* MBEDTLS_CCM_C */ - -#endif /* MBEDTLS_CAMELLIA_C */ - -#if defined(MBEDTLS_ARIA_C) - -static int aria_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, - const unsigned char *input, unsigned char *output ) -{ - (void) operation; - return mbedtls_aria_crypt_ecb( (mbedtls_aria_context *) ctx, input, - output ); -} - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -static int aria_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, - size_t length, unsigned char *iv, - const unsigned char *input, unsigned char *output ) -{ - return mbedtls_aria_crypt_cbc( (mbedtls_aria_context *) ctx, operation, length, iv, - input, output ); -} -#endif /* MBEDTLS_CIPHER_MODE_CBC */ - -#if defined(MBEDTLS_CIPHER_MODE_CFB) -static int aria_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation, - size_t length, size_t *iv_off, unsigned char *iv, - const unsigned char *input, unsigned char *output ) -{ - return mbedtls_aria_crypt_cfb128( (mbedtls_aria_context *) ctx, operation, length, - iv_off, iv, input, output ); -} -#endif /* MBEDTLS_CIPHER_MODE_CFB */ - -#if defined(MBEDTLS_CIPHER_MODE_CTR) -static int aria_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off, - unsigned char *nonce_counter, unsigned char *stream_block, - const unsigned char *input, unsigned char *output ) -{ - return mbedtls_aria_crypt_ctr( (mbedtls_aria_context *) ctx, length, nc_off, - nonce_counter, stream_block, input, output ); -} -#endif /* MBEDTLS_CIPHER_MODE_CTR */ - -static int aria_setkey_dec_wrap( void *ctx, const unsigned char *key, - unsigned int key_bitlen ) -{ - return mbedtls_aria_setkey_dec( (mbedtls_aria_context *) ctx, key, key_bitlen ); -} - -static int aria_setkey_enc_wrap( void *ctx, const unsigned char *key, - unsigned int key_bitlen ) -{ - return mbedtls_aria_setkey_enc( (mbedtls_aria_context *) ctx, key, key_bitlen ); -} - -static void * aria_ctx_alloc( void ) -{ - mbedtls_aria_context *ctx; - ctx = mbedtls_calloc( 1, sizeof( mbedtls_aria_context ) ); - - if( ctx == NULL ) - return( NULL ); - - mbedtls_aria_init( ctx ); - - return( ctx ); -} - -static void aria_ctx_free( void *ctx ) -{ - mbedtls_aria_free( (mbedtls_aria_context *) ctx ); - mbedtls_free( ctx ); -} - -static const mbedtls_cipher_base_t aria_info = { - MBEDTLS_CIPHER_ID_ARIA, - aria_crypt_ecb_wrap, -#if defined(MBEDTLS_CIPHER_MODE_CBC) - aria_crypt_cbc_wrap, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CFB) - aria_crypt_cfb128_wrap, -#endif -#if defined(MBEDTLS_CIPHER_MODE_OFB) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CTR) - aria_crypt_ctr_wrap, -#endif -#if defined(MBEDTLS_CIPHER_MODE_XTS) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_STREAM) - NULL, -#endif - aria_setkey_enc_wrap, - aria_setkey_dec_wrap, - aria_ctx_alloc, - aria_ctx_free -}; - -static const mbedtls_cipher_info_t aria_128_ecb_info = { - MBEDTLS_CIPHER_ARIA_128_ECB, - MBEDTLS_MODE_ECB, - 128, - "ARIA-128-ECB", - 0, - 0, - 16, - &aria_info -}; - -static const mbedtls_cipher_info_t aria_192_ecb_info = { - MBEDTLS_CIPHER_ARIA_192_ECB, - MBEDTLS_MODE_ECB, - 192, - "ARIA-192-ECB", - 0, - 0, - 16, - &aria_info -}; - -static const mbedtls_cipher_info_t aria_256_ecb_info = { - MBEDTLS_CIPHER_ARIA_256_ECB, - MBEDTLS_MODE_ECB, - 256, - "ARIA-256-ECB", - 0, - 0, - 16, - &aria_info -}; - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -static const mbedtls_cipher_info_t aria_128_cbc_info = { - MBEDTLS_CIPHER_ARIA_128_CBC, - MBEDTLS_MODE_CBC, - 128, - "ARIA-128-CBC", - 16, - 0, - 16, - &aria_info -}; - -static const mbedtls_cipher_info_t aria_192_cbc_info = { - MBEDTLS_CIPHER_ARIA_192_CBC, - MBEDTLS_MODE_CBC, - 192, - "ARIA-192-CBC", - 16, - 0, - 16, - &aria_info -}; - -static const mbedtls_cipher_info_t aria_256_cbc_info = { - MBEDTLS_CIPHER_ARIA_256_CBC, - MBEDTLS_MODE_CBC, - 256, - "ARIA-256-CBC", - 16, - 0, - 16, - &aria_info -}; -#endif /* MBEDTLS_CIPHER_MODE_CBC */ - -#if defined(MBEDTLS_CIPHER_MODE_CFB) -static const mbedtls_cipher_info_t aria_128_cfb128_info = { - MBEDTLS_CIPHER_ARIA_128_CFB128, - MBEDTLS_MODE_CFB, - 128, - "ARIA-128-CFB128", - 16, - 0, - 16, - &aria_info -}; - -static const mbedtls_cipher_info_t aria_192_cfb128_info = { - MBEDTLS_CIPHER_ARIA_192_CFB128, - MBEDTLS_MODE_CFB, - 192, - "ARIA-192-CFB128", - 16, - 0, - 16, - &aria_info -}; - -static const mbedtls_cipher_info_t aria_256_cfb128_info = { - MBEDTLS_CIPHER_ARIA_256_CFB128, - MBEDTLS_MODE_CFB, - 256, - "ARIA-256-CFB128", - 16, - 0, - 16, - &aria_info -}; -#endif /* MBEDTLS_CIPHER_MODE_CFB */ - -#if defined(MBEDTLS_CIPHER_MODE_CTR) -static const mbedtls_cipher_info_t aria_128_ctr_info = { - MBEDTLS_CIPHER_ARIA_128_CTR, - MBEDTLS_MODE_CTR, - 128, - "ARIA-128-CTR", - 16, - 0, - 16, - &aria_info -}; - -static const mbedtls_cipher_info_t aria_192_ctr_info = { - MBEDTLS_CIPHER_ARIA_192_CTR, - MBEDTLS_MODE_CTR, - 192, - "ARIA-192-CTR", - 16, - 0, - 16, - &aria_info -}; - -static const mbedtls_cipher_info_t aria_256_ctr_info = { - MBEDTLS_CIPHER_ARIA_256_CTR, - MBEDTLS_MODE_CTR, - 256, - "ARIA-256-CTR", - 16, - 0, - 16, - &aria_info -}; -#endif /* MBEDTLS_CIPHER_MODE_CTR */ - -#if defined(MBEDTLS_GCM_C) -static int gcm_aria_setkey_wrap( void *ctx, const unsigned char *key, - unsigned int key_bitlen ) -{ - return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA, - key, key_bitlen ); -} - -static const mbedtls_cipher_base_t gcm_aria_info = { - MBEDTLS_CIPHER_ID_ARIA, - NULL, -#if defined(MBEDTLS_CIPHER_MODE_CBC) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CFB) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_OFB) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CTR) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_XTS) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_STREAM) - NULL, -#endif - gcm_aria_setkey_wrap, - gcm_aria_setkey_wrap, - gcm_ctx_alloc, - gcm_ctx_free, -}; - -static const mbedtls_cipher_info_t aria_128_gcm_info = { - MBEDTLS_CIPHER_ARIA_128_GCM, - MBEDTLS_MODE_GCM, - 128, - "ARIA-128-GCM", - 12, - MBEDTLS_CIPHER_VARIABLE_IV_LEN, - 16, - &gcm_aria_info -}; - -static const mbedtls_cipher_info_t aria_192_gcm_info = { - MBEDTLS_CIPHER_ARIA_192_GCM, - MBEDTLS_MODE_GCM, - 192, - "ARIA-192-GCM", - 12, - MBEDTLS_CIPHER_VARIABLE_IV_LEN, - 16, - &gcm_aria_info -}; - -static const mbedtls_cipher_info_t aria_256_gcm_info = { - MBEDTLS_CIPHER_ARIA_256_GCM, - MBEDTLS_MODE_GCM, - 256, - "ARIA-256-GCM", - 12, - MBEDTLS_CIPHER_VARIABLE_IV_LEN, - 16, - &gcm_aria_info -}; -#endif /* MBEDTLS_GCM_C */ - -#if defined(MBEDTLS_CCM_C) -static int ccm_aria_setkey_wrap( void *ctx, const unsigned char *key, - unsigned int key_bitlen ) -{ - return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_ARIA, - key, key_bitlen ); -} - -static const mbedtls_cipher_base_t ccm_aria_info = { - MBEDTLS_CIPHER_ID_ARIA, - NULL, -#if defined(MBEDTLS_CIPHER_MODE_CBC) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CFB) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_OFB) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CTR) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_XTS) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_STREAM) - NULL, -#endif - ccm_aria_setkey_wrap, - ccm_aria_setkey_wrap, - ccm_ctx_alloc, - ccm_ctx_free, -}; - -static const mbedtls_cipher_info_t aria_128_ccm_info = { - MBEDTLS_CIPHER_ARIA_128_CCM, - MBEDTLS_MODE_CCM, - 128, - "ARIA-128-CCM", - 12, - MBEDTLS_CIPHER_VARIABLE_IV_LEN, - 16, - &ccm_aria_info -}; - -static const mbedtls_cipher_info_t aria_192_ccm_info = { - MBEDTLS_CIPHER_ARIA_192_CCM, - MBEDTLS_MODE_CCM, - 192, - "ARIA-192-CCM", - 12, - MBEDTLS_CIPHER_VARIABLE_IV_LEN, - 16, - &ccm_aria_info -}; - -static const mbedtls_cipher_info_t aria_256_ccm_info = { - MBEDTLS_CIPHER_ARIA_256_CCM, - MBEDTLS_MODE_CCM, - 256, - "ARIA-256-CCM", - 12, - MBEDTLS_CIPHER_VARIABLE_IV_LEN, - 16, - &ccm_aria_info -}; -#endif /* MBEDTLS_CCM_C */ - -#endif /* MBEDTLS_ARIA_C */ - #if defined(MBEDTLS_DES_C) static int des_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, @@ -1816,83 +1023,6 @@ static const mbedtls_cipher_info_t blowfish_ctr_info = { #endif /* MBEDTLS_CIPHER_MODE_CTR */ #endif /* MBEDTLS_BLOWFISH_C */ -#if defined(MBEDTLS_ARC4_C) -static int arc4_crypt_stream_wrap( void *ctx, size_t length, - const unsigned char *input, - unsigned char *output ) -{ - return( mbedtls_arc4_crypt( (mbedtls_arc4_context *) ctx, length, input, output ) ); -} - -static int arc4_setkey_wrap( void *ctx, const unsigned char *key, - unsigned int key_bitlen ) -{ - /* we get key_bitlen in bits, arc4 expects it in bytes */ - if( key_bitlen % 8 != 0 ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - - mbedtls_arc4_setup( (mbedtls_arc4_context *) ctx, key, key_bitlen / 8 ); - return( 0 ); -} - -static void * arc4_ctx_alloc( void ) -{ - mbedtls_arc4_context *ctx; - ctx = mbedtls_calloc( 1, sizeof( mbedtls_arc4_context ) ); - - if( ctx == NULL ) - return( NULL ); - - mbedtls_arc4_init( ctx ); - - return( ctx ); -} - -static void arc4_ctx_free( void *ctx ) -{ - mbedtls_arc4_free( (mbedtls_arc4_context *) ctx ); - mbedtls_free( ctx ); -} - -static const mbedtls_cipher_base_t arc4_base_info = { - MBEDTLS_CIPHER_ID_ARC4, - NULL, -#if defined(MBEDTLS_CIPHER_MODE_CBC) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CFB) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_OFB) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CTR) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_XTS) - NULL, -#endif -#if defined(MBEDTLS_CIPHER_MODE_STREAM) - arc4_crypt_stream_wrap, -#endif - arc4_setkey_wrap, - arc4_setkey_wrap, - arc4_ctx_alloc, - arc4_ctx_free -}; - -static const mbedtls_cipher_info_t arc4_128_info = { - MBEDTLS_CIPHER_ARC4_128, - MBEDTLS_MODE_STREAM, - 128, - "ARC4-128", - 0, - 0, - 1, - &arc4_base_info -}; -#endif /* MBEDTLS_ARC4_C */ - #if defined(MBEDTLS_CHACHA20_C) static int chacha20_setkey_wrap( void *ctx, const unsigned char *key, @@ -2285,10 +1415,6 @@ const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] = #endif #endif /* MBEDTLS_AES_C */ -#if defined(MBEDTLS_ARC4_C) - { MBEDTLS_CIPHER_ARC4_128, &arc4_128_info }, -#endif - #if defined(MBEDTLS_BLOWFISH_C) { MBEDTLS_CIPHER_BLOWFISH_ECB, &blowfish_ecb_info }, #if defined(MBEDTLS_CIPHER_MODE_CBC) @@ -2333,37 +1459,6 @@ const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] = #endif #endif /* MBEDTLS_CAMELLIA_C */ -#if defined(MBEDTLS_ARIA_C) - { MBEDTLS_CIPHER_ARIA_128_ECB, &aria_128_ecb_info }, - { MBEDTLS_CIPHER_ARIA_192_ECB, &aria_192_ecb_info }, - { MBEDTLS_CIPHER_ARIA_256_ECB, &aria_256_ecb_info }, -#if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_CIPHER_ARIA_128_CBC, &aria_128_cbc_info }, - { MBEDTLS_CIPHER_ARIA_192_CBC, &aria_192_cbc_info }, - { MBEDTLS_CIPHER_ARIA_256_CBC, &aria_256_cbc_info }, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CFB) - { MBEDTLS_CIPHER_ARIA_128_CFB128, &aria_128_cfb128_info }, - { MBEDTLS_CIPHER_ARIA_192_CFB128, &aria_192_cfb128_info }, - { MBEDTLS_CIPHER_ARIA_256_CFB128, &aria_256_cfb128_info }, -#endif -#if defined(MBEDTLS_CIPHER_MODE_CTR) - { MBEDTLS_CIPHER_ARIA_128_CTR, &aria_128_ctr_info }, - { MBEDTLS_CIPHER_ARIA_192_CTR, &aria_192_ctr_info }, - { MBEDTLS_CIPHER_ARIA_256_CTR, &aria_256_ctr_info }, -#endif -#if defined(MBEDTLS_GCM_C) - { MBEDTLS_CIPHER_ARIA_128_GCM, &aria_128_gcm_info }, - { MBEDTLS_CIPHER_ARIA_192_GCM, &aria_192_gcm_info }, - { MBEDTLS_CIPHER_ARIA_256_GCM, &aria_256_gcm_info }, -#endif -#if defined(MBEDTLS_CCM_C) - { MBEDTLS_CIPHER_ARIA_128_CCM, &aria_128_ccm_info }, - { MBEDTLS_CIPHER_ARIA_192_CCM, &aria_192_ccm_info }, - { MBEDTLS_CIPHER_ARIA_256_CCM, &aria_256_ccm_info }, -#endif -#endif /* MBEDTLS_ARIA_C */ - #if defined(MBEDTLS_DES_C) { MBEDTLS_CIPHER_DES_ECB, &des_ecb_info }, { MBEDTLS_CIPHER_DES_EDE_ECB, &des_ede_ecb_info }, diff --git a/third_party/mbedtls/cmac.c b/third_party/mbedtls/cmac.c deleted file mode 100644 index 37ab06a09..000000000 --- a/third_party/mbedtls/cmac.c +++ /dev/null @@ -1,1092 +0,0 @@ -/* clang-format off */ - -asm(".ident\t\"\\n\\n\ -Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); -asm(".include \"libc/disclaimer.inc\""); - -/** - * \file cmac.c - * - * \brief NIST SP800-38B compliant CMAC implementation for AES and 3DES - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * References: - * - * - NIST SP 800-38B Recommendation for Block Cipher Modes of Operation: The - * CMAC Mode for Authentication - * http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38b.pdf - * - * - RFC 4493 - The AES-CMAC Algorithm - * https://tools.ietf.org/html/rfc4493 - * - * - RFC 4615 - The Advanced Encryption Standard-Cipher-based Message - * Authentication Code-Pseudo-Random Function-128 (AES-CMAC-PRF-128) - * Algorithm for the Internet Key Exchange Protocol (IKE) - * https://tools.ietf.org/html/rfc4615 - * - * Additional test vectors: ISO/IEC 9797-1 - * - */ - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_CMAC_C) - -#include "third_party/mbedtls/cmac.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/platform.h" - - -#if !defined(MBEDTLS_CMAC_ALT) || defined(MBEDTLS_SELF_TEST) - -/* - * Multiplication by u in the Galois field of GF(2^n) - * - * As explained in NIST SP 800-38B, this can be computed: - * - * If MSB(p) = 0, then p = (p << 1) - * If MSB(p) = 1, then p = (p << 1) ^ R_n - * with R_64 = 0x1B and R_128 = 0x87 - * - * Input and output MUST NOT point to the same buffer - * Block size must be 8 bytes or 16 bytes - the block sizes for DES and AES. - */ -static int cmac_multiply_by_u( unsigned char *output, - const unsigned char *input, - size_t blocksize ) -{ - const unsigned char R_128 = 0x87; - const unsigned char R_64 = 0x1B; - unsigned char R_n, mask; - unsigned char overflow = 0x00; - int i; - - if( blocksize == MBEDTLS_AES_BLOCK_SIZE ) - { - R_n = R_128; - } - else if( blocksize == MBEDTLS_DES3_BLOCK_SIZE ) - { - R_n = R_64; - } - else - { - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - } - - for( i = (int)blocksize - 1; i >= 0; i-- ) - { - output[i] = input[i] << 1 | overflow; - overflow = input[i] >> 7; - } - - /* mask = ( input[0] >> 7 ) ? 0xff : 0x00 - * using bit operations to avoid branches */ - - /* MSVC has a warning about unary minus on unsigned, but this is - * well-defined and precisely what we want to do here */ -#if defined(_MSC_VER) -#pragma warning( push ) -#pragma warning( disable : 4146 ) -#endif - mask = - ( input[0] >> 7 ); -#if defined(_MSC_VER) -#pragma warning( pop ) -#endif - - output[ blocksize - 1 ] ^= R_n & mask; - - return( 0 ); -} - -/* - * Generate subkeys - * - * - as specified by RFC 4493, section 2.3 Subkey Generation Algorithm - */ -static int cmac_generate_subkeys( mbedtls_cipher_context_t *ctx, - unsigned char* K1, unsigned char* K2 ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - unsigned char L[MBEDTLS_CIPHER_BLKSIZE_MAX]; - size_t olen, block_size; - - mbedtls_platform_zeroize( L, sizeof( L ) ); - - block_size = ctx->cipher_info->block_size; - - /* Calculate Ek(0) */ - if( ( ret = mbedtls_cipher_update( ctx, L, block_size, L, &olen ) ) != 0 ) - goto exit; - - /* - * Generate K1 and K2 - */ - if( ( ret = cmac_multiply_by_u( K1, L , block_size ) ) != 0 ) - goto exit; - - if( ( ret = cmac_multiply_by_u( K2, K1 , block_size ) ) != 0 ) - goto exit; - -exit: - mbedtls_platform_zeroize( L, sizeof( L ) ); - - return( ret ); -} -#endif /* !defined(MBEDTLS_CMAC_ALT) || defined(MBEDTLS_SELF_TEST) */ - -#if !defined(MBEDTLS_CMAC_ALT) -static void cmac_xor_block( unsigned char *output, const unsigned char *input1, - const unsigned char *input2, - const size_t block_size ) -{ - size_t idx; - - for( idx = 0; idx < block_size; idx++ ) - output[ idx ] = input1[ idx ] ^ input2[ idx ]; -} - -/* - * Create padded last block from (partial) last block. - * - * We can't use the padding option from the cipher layer, as it only works for - * CBC and we use ECB mode, and anyway we need to XOR K1 or K2 in addition. - */ -static void cmac_pad( unsigned char padded_block[MBEDTLS_CIPHER_BLKSIZE_MAX], - size_t padded_block_len, - const unsigned char *last_block, - size_t last_block_len ) -{ - size_t j; - - for( j = 0; j < padded_block_len; j++ ) - { - if( j < last_block_len ) - padded_block[j] = last_block[j]; - else if( j == last_block_len ) - padded_block[j] = 0x80; - else - padded_block[j] = 0x00; - } -} - -int mbedtls_cipher_cmac_starts( mbedtls_cipher_context_t *ctx, - const unsigned char *key, size_t keybits ) -{ - mbedtls_cipher_type_t type; - mbedtls_cmac_context_t *cmac_ctx; - int retval; - - if( ctx == NULL || ctx->cipher_info == NULL || key == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - - if( ( retval = mbedtls_cipher_setkey( ctx, key, (int)keybits, - MBEDTLS_ENCRYPT ) ) != 0 ) - return( retval ); - - type = ctx->cipher_info->type; - - switch( type ) - { - case MBEDTLS_CIPHER_AES_128_ECB: - case MBEDTLS_CIPHER_AES_192_ECB: - case MBEDTLS_CIPHER_AES_256_ECB: - case MBEDTLS_CIPHER_DES_EDE3_ECB: - break; - default: - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - } - - /* Allocated and initialise in the cipher context memory for the CMAC - * context */ - cmac_ctx = mbedtls_calloc( 1, sizeof( mbedtls_cmac_context_t ) ); - if( cmac_ctx == NULL ) - return( MBEDTLS_ERR_CIPHER_ALLOC_FAILED ); - - ctx->cmac_ctx = cmac_ctx; - - mbedtls_platform_zeroize( cmac_ctx->state, sizeof( cmac_ctx->state ) ); - - return 0; -} - -int mbedtls_cipher_cmac_update( mbedtls_cipher_context_t *ctx, - const unsigned char *input, size_t ilen ) -{ - mbedtls_cmac_context_t* cmac_ctx; - unsigned char *state; - int ret = 0; - size_t n, j, olen, block_size; - - if( ctx == NULL || ctx->cipher_info == NULL || input == NULL || - ctx->cmac_ctx == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - - cmac_ctx = ctx->cmac_ctx; - block_size = ctx->cipher_info->block_size; - state = ctx->cmac_ctx->state; - - /* Is there data still to process from the last call, that's greater in - * size than a block? */ - if( cmac_ctx->unprocessed_len > 0 && - ilen > block_size - cmac_ctx->unprocessed_len ) - { - memcpy( &cmac_ctx->unprocessed_block[cmac_ctx->unprocessed_len], - input, - block_size - cmac_ctx->unprocessed_len ); - - cmac_xor_block( state, cmac_ctx->unprocessed_block, state, block_size ); - - if( ( ret = mbedtls_cipher_update( ctx, state, block_size, state, - &olen ) ) != 0 ) - { - goto exit; - } - - input += block_size - cmac_ctx->unprocessed_len; - ilen -= block_size - cmac_ctx->unprocessed_len; - cmac_ctx->unprocessed_len = 0; - } - - /* n is the number of blocks including any final partial block */ - n = ( ilen + block_size - 1 ) / block_size; - - /* Iterate across the input data in block sized chunks, excluding any - * final partial or complete block */ - for( j = 1; j < n; j++ ) - { - cmac_xor_block( state, input, state, block_size ); - - if( ( ret = mbedtls_cipher_update( ctx, state, block_size, state, - &olen ) ) != 0 ) - goto exit; - - ilen -= block_size; - input += block_size; - } - - /* If there is data left over that wasn't aligned to a block */ - if( ilen > 0 ) - { - memcpy( &cmac_ctx->unprocessed_block[cmac_ctx->unprocessed_len], - input, - ilen ); - cmac_ctx->unprocessed_len += ilen; - } - -exit: - return( ret ); -} - -int mbedtls_cipher_cmac_finish( mbedtls_cipher_context_t *ctx, - unsigned char *output ) -{ - mbedtls_cmac_context_t* cmac_ctx; - unsigned char *state, *last_block; - unsigned char K1[MBEDTLS_CIPHER_BLKSIZE_MAX]; - unsigned char K2[MBEDTLS_CIPHER_BLKSIZE_MAX]; - unsigned char M_last[MBEDTLS_CIPHER_BLKSIZE_MAX]; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - size_t olen, block_size; - - if( ctx == NULL || ctx->cipher_info == NULL || ctx->cmac_ctx == NULL || - output == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - - cmac_ctx = ctx->cmac_ctx; - block_size = ctx->cipher_info->block_size; - state = cmac_ctx->state; - - mbedtls_platform_zeroize( K1, sizeof( K1 ) ); - mbedtls_platform_zeroize( K2, sizeof( K2 ) ); - cmac_generate_subkeys( ctx, K1, K2 ); - - last_block = cmac_ctx->unprocessed_block; - - /* Calculate last block */ - if( cmac_ctx->unprocessed_len < block_size ) - { - cmac_pad( M_last, block_size, last_block, cmac_ctx->unprocessed_len ); - cmac_xor_block( M_last, M_last, K2, block_size ); - } - else - { - /* Last block is complete block */ - cmac_xor_block( M_last, last_block, K1, block_size ); - } - - - cmac_xor_block( state, M_last, state, block_size ); - if( ( ret = mbedtls_cipher_update( ctx, state, block_size, state, - &olen ) ) != 0 ) - { - goto exit; - } - - memcpy( output, state, block_size ); - -exit: - /* Wipe the generated keys on the stack, and any other transients to avoid - * side channel leakage */ - mbedtls_platform_zeroize( K1, sizeof( K1 ) ); - mbedtls_platform_zeroize( K2, sizeof( K2 ) ); - - cmac_ctx->unprocessed_len = 0; - mbedtls_platform_zeroize( cmac_ctx->unprocessed_block, - sizeof( cmac_ctx->unprocessed_block ) ); - - mbedtls_platform_zeroize( state, MBEDTLS_CIPHER_BLKSIZE_MAX ); - return( ret ); -} - -int mbedtls_cipher_cmac_reset( mbedtls_cipher_context_t *ctx ) -{ - mbedtls_cmac_context_t* cmac_ctx; - - if( ctx == NULL || ctx->cipher_info == NULL || ctx->cmac_ctx == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - - cmac_ctx = ctx->cmac_ctx; - - /* Reset the internal state */ - cmac_ctx->unprocessed_len = 0; - mbedtls_platform_zeroize( cmac_ctx->unprocessed_block, - sizeof( cmac_ctx->unprocessed_block ) ); - mbedtls_platform_zeroize( cmac_ctx->state, - sizeof( cmac_ctx->state ) ); - - return( 0 ); -} - -int mbedtls_cipher_cmac( const mbedtls_cipher_info_t *cipher_info, - const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ) -{ - mbedtls_cipher_context_t ctx; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - - if( cipher_info == NULL || key == NULL || input == NULL || output == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - - mbedtls_cipher_init( &ctx ); - - if( ( ret = mbedtls_cipher_setup( &ctx, cipher_info ) ) != 0 ) - goto exit; - - ret = mbedtls_cipher_cmac_starts( &ctx, key, keylen ); - if( ret != 0 ) - goto exit; - - ret = mbedtls_cipher_cmac_update( &ctx, input, ilen ); - if( ret != 0 ) - goto exit; - - ret = mbedtls_cipher_cmac_finish( &ctx, output ); - -exit: - mbedtls_cipher_free( &ctx ); - - return( ret ); -} - -#if defined(MBEDTLS_AES_C) -/* - * Implementation of AES-CMAC-PRF-128 defined in RFC 4615 - */ -int mbedtls_aes_cmac_prf_128( const unsigned char *key, size_t key_length, - const unsigned char *input, size_t in_len, - unsigned char output[16] ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - const mbedtls_cipher_info_t *cipher_info; - unsigned char zero_key[MBEDTLS_AES_BLOCK_SIZE]; - unsigned char int_key[MBEDTLS_AES_BLOCK_SIZE]; - - if( key == NULL || input == NULL || output == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - - cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_ECB ); - if( cipher_info == NULL ) - { - /* Failing at this point must be due to a build issue */ - ret = MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; - goto exit; - } - - if( key_length == MBEDTLS_AES_BLOCK_SIZE ) - { - /* Use key as is */ - memcpy( int_key, key, MBEDTLS_AES_BLOCK_SIZE ); - } - else - { - memset( zero_key, 0, MBEDTLS_AES_BLOCK_SIZE ); - - ret = mbedtls_cipher_cmac( cipher_info, zero_key, 128, key, - key_length, int_key ); - if( ret != 0 ) - goto exit; - } - - ret = mbedtls_cipher_cmac( cipher_info, int_key, 128, input, in_len, - output ); - -exit: - mbedtls_platform_zeroize( int_key, sizeof( int_key ) ); - - return( ret ); -} -#endif /* MBEDTLS_AES_C */ - -#endif /* !MBEDTLS_CMAC_ALT */ - -#if defined(MBEDTLS_SELF_TEST) -/* - * CMAC test data for SP800-38B - * http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/AES_CMAC.pdf - * http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/TDES_CMAC.pdf - * - * AES-CMAC-PRF-128 test data from RFC 4615 - * https://tools.ietf.org/html/rfc4615#page-4 - */ - -#define NB_CMAC_TESTS_PER_KEY 4 -#define NB_PRF_TESTS 3 - -#if defined(MBEDTLS_AES_C) || defined(MBEDTLS_DES_C) -/* All CMAC test inputs are truncated from the same 64 byte buffer. */ -static const unsigned char test_message[] = { - /* PT */ - 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, - 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, - 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, - 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, - 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, - 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, - 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, - 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10 -}; -#endif /* MBEDTLS_AES_C || MBEDTLS_DES_C */ - -#if defined(MBEDTLS_AES_C) -/* Truncation point of message for AES CMAC tests */ -static const unsigned int aes_message_lengths[NB_CMAC_TESTS_PER_KEY] = { - /* Mlen */ - 0, - 16, - 20, - 64 -}; - -/* CMAC-AES128 Test Data */ -static const unsigned char aes_128_key[16] = { - 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, - 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c -}; -static const unsigned char aes_128_subkeys[2][MBEDTLS_AES_BLOCK_SIZE] = { - { - /* K1 */ - 0xfb, 0xee, 0xd6, 0x18, 0x35, 0x71, 0x33, 0x66, - 0x7c, 0x85, 0xe0, 0x8f, 0x72, 0x36, 0xa8, 0xde - }, - { - /* K2 */ - 0xf7, 0xdd, 0xac, 0x30, 0x6a, 0xe2, 0x66, 0xcc, - 0xf9, 0x0b, 0xc1, 0x1e, 0xe4, 0x6d, 0x51, 0x3b - } -}; -static const unsigned char aes_128_expected_result[NB_CMAC_TESTS_PER_KEY][MBEDTLS_AES_BLOCK_SIZE] = { - { - /* Example #1 */ - 0xbb, 0x1d, 0x69, 0x29, 0xe9, 0x59, 0x37, 0x28, - 0x7f, 0xa3, 0x7d, 0x12, 0x9b, 0x75, 0x67, 0x46 - }, - { - /* Example #2 */ - 0x07, 0x0a, 0x16, 0xb4, 0x6b, 0x4d, 0x41, 0x44, - 0xf7, 0x9b, 0xdd, 0x9d, 0xd0, 0x4a, 0x28, 0x7c - }, - { - /* Example #3 */ - 0x7d, 0x85, 0x44, 0x9e, 0xa6, 0xea, 0x19, 0xc8, - 0x23, 0xa7, 0xbf, 0x78, 0x83, 0x7d, 0xfa, 0xde - }, - { - /* Example #4 */ - 0x51, 0xf0, 0xbe, 0xbf, 0x7e, 0x3b, 0x9d, 0x92, - 0xfc, 0x49, 0x74, 0x17, 0x79, 0x36, 0x3c, 0xfe - } -}; - -/* CMAC-AES192 Test Data */ -static const unsigned char aes_192_key[24] = { - 0x8e, 0x73, 0xb0, 0xf7, 0xda, 0x0e, 0x64, 0x52, - 0xc8, 0x10, 0xf3, 0x2b, 0x80, 0x90, 0x79, 0xe5, - 0x62, 0xf8, 0xea, 0xd2, 0x52, 0x2c, 0x6b, 0x7b -}; -static const unsigned char aes_192_subkeys[2][MBEDTLS_AES_BLOCK_SIZE] = { - { - /* K1 */ - 0x44, 0x8a, 0x5b, 0x1c, 0x93, 0x51, 0x4b, 0x27, - 0x3e, 0xe6, 0x43, 0x9d, 0xd4, 0xda, 0xa2, 0x96 - }, - { - /* K2 */ - 0x89, 0x14, 0xb6, 0x39, 0x26, 0xa2, 0x96, 0x4e, - 0x7d, 0xcc, 0x87, 0x3b, 0xa9, 0xb5, 0x45, 0x2c - } -}; -static const unsigned char aes_192_expected_result[NB_CMAC_TESTS_PER_KEY][MBEDTLS_AES_BLOCK_SIZE] = { - { - /* Example #1 */ - 0xd1, 0x7d, 0xdf, 0x46, 0xad, 0xaa, 0xcd, 0xe5, - 0x31, 0xca, 0xc4, 0x83, 0xde, 0x7a, 0x93, 0x67 - }, - { - /* Example #2 */ - 0x9e, 0x99, 0xa7, 0xbf, 0x31, 0xe7, 0x10, 0x90, - 0x06, 0x62, 0xf6, 0x5e, 0x61, 0x7c, 0x51, 0x84 - }, - { - /* Example #3 */ - 0x3d, 0x75, 0xc1, 0x94, 0xed, 0x96, 0x07, 0x04, - 0x44, 0xa9, 0xfa, 0x7e, 0xc7, 0x40, 0xec, 0xf8 - }, - { - /* Example #4 */ - 0xa1, 0xd5, 0xdf, 0x0e, 0xed, 0x79, 0x0f, 0x79, - 0x4d, 0x77, 0x58, 0x96, 0x59, 0xf3, 0x9a, 0x11 - } -}; - -/* CMAC-AES256 Test Data */ -static const unsigned char aes_256_key[32] = { - 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe, - 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81, - 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7, - 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4 -}; -static const unsigned char aes_256_subkeys[2][MBEDTLS_AES_BLOCK_SIZE] = { - { - /* K1 */ - 0xca, 0xd1, 0xed, 0x03, 0x29, 0x9e, 0xed, 0xac, - 0x2e, 0x9a, 0x99, 0x80, 0x86, 0x21, 0x50, 0x2f - }, - { - /* K2 */ - 0x95, 0xa3, 0xda, 0x06, 0x53, 0x3d, 0xdb, 0x58, - 0x5d, 0x35, 0x33, 0x01, 0x0c, 0x42, 0xa0, 0xd9 - } -}; -static const unsigned char aes_256_expected_result[NB_CMAC_TESTS_PER_KEY][MBEDTLS_AES_BLOCK_SIZE] = { - { - /* Example #1 */ - 0x02, 0x89, 0x62, 0xf6, 0x1b, 0x7b, 0xf8, 0x9e, - 0xfc, 0x6b, 0x55, 0x1f, 0x46, 0x67, 0xd9, 0x83 - }, - { - /* Example #2 */ - 0x28, 0xa7, 0x02, 0x3f, 0x45, 0x2e, 0x8f, 0x82, - 0xbd, 0x4b, 0xf2, 0x8d, 0x8c, 0x37, 0xc3, 0x5c - }, - { - /* Example #3 */ - 0x15, 0x67, 0x27, 0xdc, 0x08, 0x78, 0x94, 0x4a, - 0x02, 0x3c, 0x1f, 0xe0, 0x3b, 0xad, 0x6d, 0x93 - }, - { - /* Example #4 */ - 0xe1, 0x99, 0x21, 0x90, 0x54, 0x9f, 0x6e, 0xd5, - 0x69, 0x6a, 0x2c, 0x05, 0x6c, 0x31, 0x54, 0x10 - } -}; -#endif /* MBEDTLS_AES_C */ - -#if defined(MBEDTLS_DES_C) -/* Truncation point of message for 3DES CMAC tests */ -static const unsigned int des3_message_lengths[NB_CMAC_TESTS_PER_KEY] = { - 0, - 16, - 20, - 32 -}; - -/* CMAC-TDES (Generation) - 2 Key Test Data */ -static const unsigned char des3_2key_key[24] = { - /* Key1 */ - 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - /* Key2 */ - 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xEF, 0x01, - /* Key3 */ - 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef -}; -static const unsigned char des3_2key_subkeys[2][8] = { - { - /* K1 */ - 0x0d, 0xd2, 0xcb, 0x7a, 0x3d, 0x88, 0x88, 0xd9 - }, - { - /* K2 */ - 0x1b, 0xa5, 0x96, 0xf4, 0x7b, 0x11, 0x11, 0xb2 - } -}; -static const unsigned char des3_2key_expected_result[NB_CMAC_TESTS_PER_KEY][MBEDTLS_DES3_BLOCK_SIZE] = { - { - /* Sample #1 */ - 0x79, 0xce, 0x52, 0xa7, 0xf7, 0x86, 0xa9, 0x60 - }, - { - /* Sample #2 */ - 0xcc, 0x18, 0xa0, 0xb7, 0x9a, 0xf2, 0x41, 0x3b - }, - { - /* Sample #3 */ - 0xc0, 0x6d, 0x37, 0x7e, 0xcd, 0x10, 0x19, 0x69 - }, - { - /* Sample #4 */ - 0x9c, 0xd3, 0x35, 0x80, 0xf9, 0xb6, 0x4d, 0xfb - } -}; - -/* CMAC-TDES (Generation) - 3 Key Test Data */ -static const unsigned char des3_3key_key[24] = { - /* Key1 */ - 0x01, 0x23, 0x45, 0x67, 0x89, 0xaa, 0xcd, 0xef, - /* Key2 */ - 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, - /* Key3 */ - 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23 -}; -static const unsigned char des3_3key_subkeys[2][8] = { - { - /* K1 */ - 0x9d, 0x74, 0xe7, 0x39, 0x33, 0x17, 0x96, 0xc0 - }, - { - /* K2 */ - 0x3a, 0xe9, 0xce, 0x72, 0x66, 0x2f, 0x2d, 0x9b - } -}; -static const unsigned char des3_3key_expected_result[NB_CMAC_TESTS_PER_KEY][MBEDTLS_DES3_BLOCK_SIZE] = { - { - /* Sample #1 */ - 0x7d, 0xb0, 0xd3, 0x7d, 0xf9, 0x36, 0xc5, 0x50 - }, - { - /* Sample #2 */ - 0x30, 0x23, 0x9c, 0xf1, 0xf5, 0x2e, 0x66, 0x09 - }, - { - /* Sample #3 */ - 0x6c, 0x9f, 0x3e, 0xe4, 0x92, 0x3f, 0x6b, 0xe2 - }, - { - /* Sample #4 */ - 0x99, 0x42, 0x9b, 0xd0, 0xbF, 0x79, 0x04, 0xe5 - } -}; - -#endif /* MBEDTLS_DES_C */ - -#if defined(MBEDTLS_AES_C) -/* AES AES-CMAC-PRF-128 Test Data */ -static const unsigned char PRFK[] = { - /* Key */ - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0xed, 0xcb -}; - -/* Sizes in bytes */ -static const size_t PRFKlen[NB_PRF_TESTS] = { - 18, - 16, - 10 -}; - -/* Message */ -static const unsigned char PRFM[] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13 -}; - -static const unsigned char PRFT[NB_PRF_TESTS][16] = { - { - 0x84, 0xa3, 0x48, 0xa4, 0xa4, 0x5d, 0x23, 0x5b, - 0xab, 0xff, 0xfc, 0x0d, 0x2b, 0x4d, 0xa0, 0x9a - }, - { - 0x98, 0x0a, 0xe8, 0x7b, 0x5f, 0x4c, 0x9c, 0x52, - 0x14, 0xf5, 0xb6, 0xa8, 0x45, 0x5e, 0x4c, 0x2d - }, - { - 0x29, 0x0d, 0x9e, 0x11, 0x2e, 0xdb, 0x09, 0xee, - 0x14, 0x1f, 0xcf, 0x64, 0xc0, 0xb7, 0x2f, 0x3d - } -}; -#endif /* MBEDTLS_AES_C */ - -static int cmac_test_subkeys( int verbose, - const char* testname, - const unsigned char* key, - int keybits, - const unsigned char* subkeys, - mbedtls_cipher_type_t cipher_type, - int block_size, - int num_tests ) -{ - int i, ret = 0; - mbedtls_cipher_context_t ctx; - const mbedtls_cipher_info_t *cipher_info; - unsigned char K1[MBEDTLS_CIPHER_BLKSIZE_MAX]; - unsigned char K2[MBEDTLS_CIPHER_BLKSIZE_MAX]; - - cipher_info = mbedtls_cipher_info_from_type( cipher_type ); - if( cipher_info == NULL ) - { - /* Failing at this point must be due to a build issue */ - return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); - } - - for( i = 0; i < num_tests; i++ ) - { - if( verbose != 0 ) - mbedtls_printf( " %s CMAC subkey #%d: ", testname, i + 1 ); - - mbedtls_cipher_init( &ctx ); - - if( ( ret = mbedtls_cipher_setup( &ctx, cipher_info ) ) != 0 ) - { - if( verbose != 0 ) - mbedtls_printf( "test execution failed\n" ); - - goto cleanup; - } - - if( ( ret = mbedtls_cipher_setkey( &ctx, key, keybits, - MBEDTLS_ENCRYPT ) ) != 0 ) - { - /* When CMAC is implemented by an alternative implementation, or - * the underlying primitive itself is implemented alternatively, - * AES-192 may be unavailable. This should not cause the selftest - * function to fail. */ - if( ( ret == MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED || - ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ) && - cipher_type == MBEDTLS_CIPHER_AES_192_ECB ) { - if( verbose != 0 ) - mbedtls_printf( "skipped\n" ); - goto next_test; - } - - if( verbose != 0 ) - mbedtls_printf( "test execution failed\n" ); - - goto cleanup; - } - - ret = cmac_generate_subkeys( &ctx, K1, K2 ); - if( ret != 0 ) - { - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - - goto cleanup; - } - - if( ( ret = memcmp( K1, subkeys, block_size ) ) != 0 || - ( ret = memcmp( K2, &subkeys[block_size], block_size ) ) != 0 ) - { - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - - goto cleanup; - } - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - -next_test: - mbedtls_cipher_free( &ctx ); - } - - ret = 0; - goto exit; - -cleanup: - mbedtls_cipher_free( &ctx ); - -exit: - return( ret ); -} - -static int cmac_test_wth_cipher( int verbose, - const char* testname, - const unsigned char* key, - int keybits, - const unsigned char* messages, - const unsigned int message_lengths[4], - const unsigned char* expected_result, - mbedtls_cipher_type_t cipher_type, - int block_size, - int num_tests ) -{ - const mbedtls_cipher_info_t *cipher_info; - int i, ret = 0; - unsigned char output[MBEDTLS_CIPHER_BLKSIZE_MAX]; - - cipher_info = mbedtls_cipher_info_from_type( cipher_type ); - if( cipher_info == NULL ) - { - /* Failing at this point must be due to a build issue */ - ret = MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; - goto exit; - } - - for( i = 0; i < num_tests; i++ ) - { - if( verbose != 0 ) - mbedtls_printf( " %s CMAC #%d: ", testname, i + 1 ); - - if( ( ret = mbedtls_cipher_cmac( cipher_info, key, keybits, messages, - message_lengths[i], output ) ) != 0 ) - { - /* When CMAC is implemented by an alternative implementation, or - * the underlying primitive itself is implemented alternatively, - * AES-192 may be unavailable. This should not cause the selftest - * function to fail. */ - if( ( ret == MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED || - ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ) && - cipher_type == MBEDTLS_CIPHER_AES_192_ECB ) { - if( verbose != 0 ) - mbedtls_printf( "skipped\n" ); - continue; - } - - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - goto exit; - } - - if( ( ret = memcmp( output, &expected_result[i * block_size], block_size ) ) != 0 ) - { - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - goto exit; - } - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - } - ret = 0; - -exit: - return( ret ); -} - -#if defined(MBEDTLS_AES_C) -static int test_aes128_cmac_prf( int verbose ) -{ - int i; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - unsigned char output[MBEDTLS_AES_BLOCK_SIZE]; - - for( i = 0; i < NB_PRF_TESTS; i++ ) - { - mbedtls_printf( " AES CMAC 128 PRF #%d: ", i ); - ret = mbedtls_aes_cmac_prf_128( PRFK, PRFKlen[i], PRFM, 20, output ); - if( ret != 0 || - memcmp( output, PRFT[i], MBEDTLS_AES_BLOCK_SIZE ) != 0 ) - { - - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - - return( ret ); - } - else if( verbose != 0 ) - { - mbedtls_printf( "passed\n" ); - } - } - return( ret ); -} -#endif /* MBEDTLS_AES_C */ - -int mbedtls_cmac_self_test( int verbose ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - -#if defined(MBEDTLS_AES_C) - /* AES-128 */ - if( ( ret = cmac_test_subkeys( verbose, - "AES 128", - aes_128_key, - 128, - (const unsigned char*)aes_128_subkeys, - MBEDTLS_CIPHER_AES_128_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } - - if( ( ret = cmac_test_wth_cipher( verbose, - "AES 128", - aes_128_key, - 128, - test_message, - aes_message_lengths, - (const unsigned char*)aes_128_expected_result, - MBEDTLS_CIPHER_AES_128_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } - - /* AES-192 */ - if( ( ret = cmac_test_subkeys( verbose, - "AES 192", - aes_192_key, - 192, - (const unsigned char*)aes_192_subkeys, - MBEDTLS_CIPHER_AES_192_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } - - if( ( ret = cmac_test_wth_cipher( verbose, - "AES 192", - aes_192_key, - 192, - test_message, - aes_message_lengths, - (const unsigned char*)aes_192_expected_result, - MBEDTLS_CIPHER_AES_192_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } - - /* AES-256 */ - if( ( ret = cmac_test_subkeys( verbose, - "AES 256", - aes_256_key, - 256, - (const unsigned char*)aes_256_subkeys, - MBEDTLS_CIPHER_AES_256_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } - - if( ( ret = cmac_test_wth_cipher ( verbose, - "AES 256", - aes_256_key, - 256, - test_message, - aes_message_lengths, - (const unsigned char*)aes_256_expected_result, - MBEDTLS_CIPHER_AES_256_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } -#endif /* MBEDTLS_AES_C */ - -#if defined(MBEDTLS_DES_C) - /* 3DES 2 key */ - if( ( ret = cmac_test_subkeys( verbose, - "3DES 2 key", - des3_2key_key, - 192, - (const unsigned char*)des3_2key_subkeys, - MBEDTLS_CIPHER_DES_EDE3_ECB, - MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } - - if( ( ret = cmac_test_wth_cipher( verbose, - "3DES 2 key", - des3_2key_key, - 192, - test_message, - des3_message_lengths, - (const unsigned char*)des3_2key_expected_result, - MBEDTLS_CIPHER_DES_EDE3_ECB, - MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } - - /* 3DES 3 key */ - if( ( ret = cmac_test_subkeys( verbose, - "3DES 3 key", - des3_3key_key, - 192, - (const unsigned char*)des3_3key_subkeys, - MBEDTLS_CIPHER_DES_EDE3_ECB, - MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } - - if( ( ret = cmac_test_wth_cipher( verbose, - "3DES 3 key", - des3_3key_key, - 192, - test_message, - des3_message_lengths, - (const unsigned char*)des3_3key_expected_result, - MBEDTLS_CIPHER_DES_EDE3_ECB, - MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } -#endif /* MBEDTLS_DES_C */ - -#if defined(MBEDTLS_AES_C) - if( ( ret = test_aes128_cmac_prf( verbose ) ) != 0 ) - return( ret ); -#endif /* MBEDTLS_AES_C */ - - if( verbose != 0 ) - mbedtls_printf( "\n" ); - - return( 0 ); -} - -#endif /* MBEDTLS_SELF_TEST */ - -#endif /* MBEDTLS_CMAC_C */ diff --git a/third_party/mbedtls/cmac.h b/third_party/mbedtls/cmac.h deleted file mode 100644 index 93759acba..000000000 --- a/third_party/mbedtls/cmac.h +++ /dev/null @@ -1,213 +0,0 @@ -/* clang-format off */ - -/** - * \file cmac.h - * - * \brief This file contains CMAC definitions and functions. - * - * The Cipher-based Message Authentication Code (CMAC) Mode for - * Authentication is defined in RFC-4493: The AES-CMAC Algorithm. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MBEDTLS_CMAC_H -#define MBEDTLS_CMAC_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "third_party/mbedtls/cipher.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* MBEDTLS_ERR_CMAC_HW_ACCEL_FAILED is deprecated and should not be used. */ -#define MBEDTLS_ERR_CMAC_HW_ACCEL_FAILED -0x007A /**< CMAC hardware accelerator failed. */ - -#define MBEDTLS_AES_BLOCK_SIZE 16 -#define MBEDTLS_DES3_BLOCK_SIZE 8 - -#if defined(MBEDTLS_AES_C) -#define MBEDTLS_CIPHER_BLKSIZE_MAX 16 /**< The longest block used by CMAC is that of AES. */ -#else -#define MBEDTLS_CIPHER_BLKSIZE_MAX 8 /**< The longest block used by CMAC is that of 3DES. */ -#endif - -#if !defined(MBEDTLS_CMAC_ALT) - -/** - * The CMAC context structure. - */ -struct mbedtls_cmac_context_t -{ - /** The internal state of the CMAC algorithm. */ - unsigned char state[MBEDTLS_CIPHER_BLKSIZE_MAX]; - - /** Unprocessed data - either data that was not block aligned and is still - * pending processing, or the final block. */ - unsigned char unprocessed_block[MBEDTLS_CIPHER_BLKSIZE_MAX]; - - /** The length of data pending processing. */ - size_t unprocessed_len; -}; - -#else /* !MBEDTLS_CMAC_ALT */ -/* #include "third_party/mbedtls/cmac_alt.h" */ -#endif /* !MBEDTLS_CMAC_ALT */ - -/** - * \brief This function sets the CMAC key, and prepares to authenticate - * the input data. - * Must be called with an initialized cipher context. - * - * \param ctx The cipher context used for the CMAC operation, initialized - * as one of the following types: MBEDTLS_CIPHER_AES_128_ECB, - * MBEDTLS_CIPHER_AES_192_ECB, MBEDTLS_CIPHER_AES_256_ECB, - * or MBEDTLS_CIPHER_DES_EDE3_ECB. - * \param key The CMAC key. - * \param keybits The length of the CMAC key in bits. - * Must be supported by the cipher. - * - * \return \c 0 on success. - * \return A cipher-specific error code on failure. - */ -int mbedtls_cipher_cmac_starts( mbedtls_cipher_context_t *ctx, - const unsigned char *key, size_t keybits ); - -/** - * \brief This function feeds an input buffer into an ongoing CMAC - * computation. - * - * It is called between mbedtls_cipher_cmac_starts() or - * mbedtls_cipher_cmac_reset(), and mbedtls_cipher_cmac_finish(). - * Can be called repeatedly. - * - * \param ctx The cipher context used for the CMAC operation. - * \param input The buffer holding the input data. - * \param ilen The length of the input data. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_MD_BAD_INPUT_DATA - * if parameter verification fails. - */ -int mbedtls_cipher_cmac_update( mbedtls_cipher_context_t *ctx, - const unsigned char *input, size_t ilen ); - -/** - * \brief This function finishes the CMAC operation, and writes - * the result to the output buffer. - * - * It is called after mbedtls_cipher_cmac_update(). - * It can be followed by mbedtls_cipher_cmac_reset() and - * mbedtls_cipher_cmac_update(), or mbedtls_cipher_free(). - * - * \param ctx The cipher context used for the CMAC operation. - * \param output The output buffer for the CMAC checksum result. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_MD_BAD_INPUT_DATA - * if parameter verification fails. - */ -int mbedtls_cipher_cmac_finish( mbedtls_cipher_context_t *ctx, - unsigned char *output ); - -/** - * \brief This function prepares the authentication of another - * message with the same key as the previous CMAC - * operation. - * - * It is called after mbedtls_cipher_cmac_finish() - * and before mbedtls_cipher_cmac_update(). - * - * \param ctx The cipher context used for the CMAC operation. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_MD_BAD_INPUT_DATA - * if parameter verification fails. - */ -int mbedtls_cipher_cmac_reset( mbedtls_cipher_context_t *ctx ); - -/** - * \brief This function calculates the full generic CMAC - * on the input buffer with the provided key. - * - * The function allocates the context, performs the - * calculation, and frees the context. - * - * The CMAC result is calculated as - * output = generic CMAC(cmac key, input buffer). - * - * - * \param cipher_info The cipher information. - * \param key The CMAC key. - * \param keylen The length of the CMAC key in bits. - * \param input The buffer holding the input data. - * \param ilen The length of the input data. - * \param output The buffer for the generic CMAC result. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_MD_BAD_INPUT_DATA - * if parameter verification fails. - */ -int mbedtls_cipher_cmac( const mbedtls_cipher_info_t *cipher_info, - const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ); - -#if defined(MBEDTLS_AES_C) -/** - * \brief This function implements the AES-CMAC-PRF-128 pseudorandom - * function, as defined in - * RFC-4615: The Advanced Encryption Standard-Cipher-based - * Message Authentication Code-Pseudo-Random Function-128 - * (AES-CMAC-PRF-128) Algorithm for the Internet Key - * Exchange Protocol (IKE). - * - * \param key The key to use. - * \param key_len The key length in Bytes. - * \param input The buffer holding the input data. - * \param in_len The length of the input data in Bytes. - * \param output The buffer holding the generated 16 Bytes of - * pseudorandom output. - * - * \return \c 0 on success. - */ -int mbedtls_aes_cmac_prf_128( const unsigned char *key, size_t key_len, - const unsigned char *input, size_t in_len, - unsigned char output[16] ); -#endif /* MBEDTLS_AES_C */ - -#if defined(MBEDTLS_SELF_TEST) && ( defined(MBEDTLS_AES_C) || defined(MBEDTLS_DES_C) ) -/** - * \brief The CMAC checkup routine. - * - * \return \c 0 on success. - * \return \c 1 on failure. - */ -int mbedtls_cmac_self_test( int verbose ); -#endif /* MBEDTLS_SELF_TEST && ( MBEDTLS_AES_C || MBEDTLS_DES_C ) */ - -#ifdef __cplusplus -} -#endif - -#endif /* MBEDTLS_CMAC_H */ diff --git a/third_party/mbedtls/common.h b/third_party/mbedtls/common.h index 558aa8827..66b36de95 100644 --- a/third_party/mbedtls/common.h +++ b/third_party/mbedtls/common.h @@ -1,52 +1,8 @@ -/* clang-format off */ - -/** - * \file common.h - * - * \brief Utility macros for internal use in the library - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - #ifndef MBEDTLS_LIBRARY_COMMON_H #define MBEDTLS_LIBRARY_COMMON_H - -#if defined(MBEDTLS_CONFIG_FILE) -#include MBEDTLS_CONFIG_FILE -#else #include "third_party/mbedtls/config.h" -#endif -/** Helper to define a function as static except when building invasive tests. - * - * If a function is only used inside its own source file and should be - * declared `static` to allow the compiler to optimize for code size, - * but that function has unit tests, define it with - * ``` - * MBEDTLS_STATIC_TESTABLE int mbedtls_foo(...) { ... } - * ``` - * and declare it in a header in the `library/` directory with - * ``` - * #if defined(MBEDTLS_TEST_HOOKS) - * int mbedtls_foo(...); - * #endif - * ``` - */ -#if defined(MBEDTLS_TEST_HOOKS) +#ifdef MBEDTLS_TEST_HOOKS #define MBEDTLS_STATIC_TESTABLE #else #define MBEDTLS_STATIC_TESTABLE static diff --git a/third_party/mbedtls/compat-1.3.h b/third_party/mbedtls/compat-1.3.h deleted file mode 100644 index 00540892e..000000000 --- a/third_party/mbedtls/compat-1.3.h +++ /dev/null @@ -1,2531 +0,0 @@ -/* clang-format off */ - -/** - * \file compat-1.3.h - * - * \brief Compatibility definitions for using mbed TLS with client code written - * for the PolarSSL naming conventions. - * - * \deprecated Use the new names directly instead - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#if ! defined(MBEDTLS_DEPRECATED_REMOVED) - -#if defined(MBEDTLS_DEPRECATED_WARNING) -#warning "Including compat-1.3.h is deprecated" -#endif - -#ifndef MBEDTLS_COMPAT13_H -#define MBEDTLS_COMPAT13_H - -/* - * config.h options - */ -#if defined MBEDTLS_AESNI_C -#define POLARSSL_AESNI_C MBEDTLS_AESNI_C -#endif -#if defined MBEDTLS_AES_ALT -#define POLARSSL_AES_ALT MBEDTLS_AES_ALT -#endif -#if defined MBEDTLS_AES_C -#define POLARSSL_AES_C MBEDTLS_AES_C -#endif -#if defined MBEDTLS_AES_ROM_TABLES -#define POLARSSL_AES_ROM_TABLES MBEDTLS_AES_ROM_TABLES -#endif -#if defined MBEDTLS_ARC4_ALT -#define POLARSSL_ARC4_ALT MBEDTLS_ARC4_ALT -#endif -#if defined MBEDTLS_ARC4_C -#define POLARSSL_ARC4_C MBEDTLS_ARC4_C -#endif -#if defined MBEDTLS_ASN1_PARSE_C -#define POLARSSL_ASN1_PARSE_C MBEDTLS_ASN1_PARSE_C -#endif -#if defined MBEDTLS_ASN1_WRITE_C -#define POLARSSL_ASN1_WRITE_C MBEDTLS_ASN1_WRITE_C -#endif -#if defined MBEDTLS_BASE64_C -#define POLARSSL_BASE64_C MBEDTLS_BASE64_C -#endif -#if defined MBEDTLS_BIGNUM_C -#define POLARSSL_BIGNUM_C MBEDTLS_BIGNUM_C -#endif -#if defined MBEDTLS_BLOWFISH_ALT -#define POLARSSL_BLOWFISH_ALT MBEDTLS_BLOWFISH_ALT -#endif -#if defined MBEDTLS_BLOWFISH_C -#define POLARSSL_BLOWFISH_C MBEDTLS_BLOWFISH_C -#endif -#if defined MBEDTLS_CAMELLIA_ALT -#define POLARSSL_CAMELLIA_ALT MBEDTLS_CAMELLIA_ALT -#endif -#if defined MBEDTLS_CAMELLIA_C -#define POLARSSL_CAMELLIA_C MBEDTLS_CAMELLIA_C -#endif -#if defined MBEDTLS_CAMELLIA_SMALL_MEMORY -#define POLARSSL_CAMELLIA_SMALL_MEMORY MBEDTLS_CAMELLIA_SMALL_MEMORY -#endif -#if defined MBEDTLS_CCM_C -#define POLARSSL_CCM_C MBEDTLS_CCM_C -#endif -#if defined MBEDTLS_CERTS_C -#define POLARSSL_CERTS_C MBEDTLS_CERTS_C -#endif -#if defined MBEDTLS_CIPHER_C -#define POLARSSL_CIPHER_C MBEDTLS_CIPHER_C -#endif -#if defined MBEDTLS_CIPHER_MODE_CBC -#define POLARSSL_CIPHER_MODE_CBC MBEDTLS_CIPHER_MODE_CBC -#endif -#if defined MBEDTLS_CIPHER_MODE_CFB -#define POLARSSL_CIPHER_MODE_CFB MBEDTLS_CIPHER_MODE_CFB -#endif -#if defined MBEDTLS_CIPHER_MODE_CTR -#define POLARSSL_CIPHER_MODE_CTR MBEDTLS_CIPHER_MODE_CTR -#endif -#if defined MBEDTLS_CIPHER_NULL_CIPHER -#define POLARSSL_CIPHER_NULL_CIPHER MBEDTLS_CIPHER_NULL_CIPHER -#endif -#if defined MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS -#define POLARSSL_CIPHER_PADDING_ONE_AND_ZEROS MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS -#endif -#if defined MBEDTLS_CIPHER_PADDING_PKCS7 -#define POLARSSL_CIPHER_PADDING_PKCS7 MBEDTLS_CIPHER_PADDING_PKCS7 -#endif -#if defined MBEDTLS_CIPHER_PADDING_ZEROS -#define POLARSSL_CIPHER_PADDING_ZEROS MBEDTLS_CIPHER_PADDING_ZEROS -#endif -#if defined MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN -#define POLARSSL_CIPHER_PADDING_ZEROS_AND_LEN MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN -#endif -#if defined MBEDTLS_CTR_DRBG_C -#define POLARSSL_CTR_DRBG_C MBEDTLS_CTR_DRBG_C -#endif -#if defined MBEDTLS_DEBUG_C -#define POLARSSL_DEBUG_C MBEDTLS_DEBUG_C -#endif -#if defined MBEDTLS_DEPRECATED_REMOVED -#define POLARSSL_DEPRECATED_REMOVED MBEDTLS_DEPRECATED_REMOVED -#endif -#if defined MBEDTLS_DEPRECATED_WARNING -#define POLARSSL_DEPRECATED_WARNING MBEDTLS_DEPRECATED_WARNING -#endif -#if defined MBEDTLS_DES_ALT -#define POLARSSL_DES_ALT MBEDTLS_DES_ALT -#endif -#if defined MBEDTLS_DES_C -#define POLARSSL_DES_C MBEDTLS_DES_C -#endif -#if defined MBEDTLS_DHM_C -#define POLARSSL_DHM_C MBEDTLS_DHM_C -#endif -#if defined MBEDTLS_ECDH_C -#define POLARSSL_ECDH_C MBEDTLS_ECDH_C -#endif -#if defined MBEDTLS_ECDSA_C -#define POLARSSL_ECDSA_C MBEDTLS_ECDSA_C -#endif -#if defined MBEDTLS_ECDSA_DETERMINISTIC -#define POLARSSL_ECDSA_DETERMINISTIC MBEDTLS_ECDSA_DETERMINISTIC -#endif -#if defined MBEDTLS_ECP_C -#define POLARSSL_ECP_C MBEDTLS_ECP_C -#endif -#if defined MBEDTLS_ECP_DP_BP256R1_ENABLED -#define POLARSSL_ECP_DP_BP256R1_ENABLED MBEDTLS_ECP_DP_BP256R1_ENABLED -#endif -#if defined MBEDTLS_ECP_DP_BP384R1_ENABLED -#define POLARSSL_ECP_DP_BP384R1_ENABLED MBEDTLS_ECP_DP_BP384R1_ENABLED -#endif -#if defined MBEDTLS_ECP_DP_BP512R1_ENABLED -#define POLARSSL_ECP_DP_BP512R1_ENABLED MBEDTLS_ECP_DP_BP512R1_ENABLED -#endif -#if defined MBEDTLS_ECP_DP_CURVE25519_ENABLED -#define POLARSSL_ECP_DP_M255_ENABLED MBEDTLS_ECP_DP_CURVE25519_ENABLED -#endif -#if defined MBEDTLS_ECP_DP_SECP192K1_ENABLED -#define POLARSSL_ECP_DP_SECP192K1_ENABLED MBEDTLS_ECP_DP_SECP192K1_ENABLED -#endif -#if defined MBEDTLS_ECP_DP_SECP192R1_ENABLED -#define POLARSSL_ECP_DP_SECP192R1_ENABLED MBEDTLS_ECP_DP_SECP192R1_ENABLED -#endif -#if defined MBEDTLS_ECP_DP_SECP224K1_ENABLED -#define POLARSSL_ECP_DP_SECP224K1_ENABLED MBEDTLS_ECP_DP_SECP224K1_ENABLED -#endif -#if defined MBEDTLS_ECP_DP_SECP224R1_ENABLED -#define POLARSSL_ECP_DP_SECP224R1_ENABLED MBEDTLS_ECP_DP_SECP224R1_ENABLED -#endif -#if defined MBEDTLS_ECP_DP_SECP256K1_ENABLED -#define POLARSSL_ECP_DP_SECP256K1_ENABLED MBEDTLS_ECP_DP_SECP256K1_ENABLED -#endif -#if defined MBEDTLS_ECP_DP_SECP256R1_ENABLED -#define POLARSSL_ECP_DP_SECP256R1_ENABLED MBEDTLS_ECP_DP_SECP256R1_ENABLED -#endif -#if defined MBEDTLS_ECP_DP_SECP384R1_ENABLED -#define POLARSSL_ECP_DP_SECP384R1_ENABLED MBEDTLS_ECP_DP_SECP384R1_ENABLED -#endif -#if defined MBEDTLS_ECP_DP_SECP521R1_ENABLED -#define POLARSSL_ECP_DP_SECP521R1_ENABLED MBEDTLS_ECP_DP_SECP521R1_ENABLED -#endif -#if defined MBEDTLS_ECP_FIXED_POINT_OPTIM -#define POLARSSL_ECP_FIXED_POINT_OPTIM MBEDTLS_ECP_FIXED_POINT_OPTIM -#endif -#if defined MBEDTLS_ECP_MAX_BITS -#define POLARSSL_ECP_MAX_BITS MBEDTLS_ECP_MAX_BITS -#endif -#if defined MBEDTLS_ECP_NIST_OPTIM -#define POLARSSL_ECP_NIST_OPTIM MBEDTLS_ECP_NIST_OPTIM -#endif -#if defined MBEDTLS_ECP_WINDOW_SIZE -#define POLARSSL_ECP_WINDOW_SIZE MBEDTLS_ECP_WINDOW_SIZE -#endif -#if defined MBEDTLS_ENABLE_WEAK_CIPHERSUITES -#define POLARSSL_ENABLE_WEAK_CIPHERSUITES MBEDTLS_ENABLE_WEAK_CIPHERSUITES -#endif -#if defined MBEDTLS_ENTROPY_C -#define POLARSSL_ENTROPY_C MBEDTLS_ENTROPY_C -#endif -#if defined MBEDTLS_ENTROPY_FORCE_SHA256 -#define POLARSSL_ENTROPY_FORCE_SHA256 MBEDTLS_ENTROPY_FORCE_SHA256 -#endif -#if defined MBEDTLS_ERROR_C -#define POLARSSL_ERROR_C MBEDTLS_ERROR_C -#endif -#if defined MBEDTLS_ERROR_STRERROR_DUMMY -#define POLARSSL_ERROR_STRERROR_DUMMY MBEDTLS_ERROR_STRERROR_DUMMY -#endif -#if defined MBEDTLS_FS_IO -#define POLARSSL_FS_IO MBEDTLS_FS_IO -#endif -#if defined MBEDTLS_GCM_C -#define POLARSSL_GCM_C MBEDTLS_GCM_C -#endif -#if defined MBEDTLS_GENPRIME -#define POLARSSL_GENPRIME MBEDTLS_GENPRIME -#endif -#if defined MBEDTLS_HAVEGE_C -#define POLARSSL_HAVEGE_C MBEDTLS_HAVEGE_C -#endif -#if defined MBEDTLS_HAVE_ASM -#define POLARSSL_HAVE_ASM MBEDTLS_HAVE_ASM -#endif -#if defined MBEDTLS_HAVE_SSE2 -#define POLARSSL_HAVE_SSE2 MBEDTLS_HAVE_SSE2 -#endif -#if defined MBEDTLS_HAVE_TIME -#define POLARSSL_HAVE_TIME MBEDTLS_HAVE_TIME -#endif -#if defined MBEDTLS_HMAC_DRBG_C -#define POLARSSL_HMAC_DRBG_C MBEDTLS_HMAC_DRBG_C -#endif -#if defined MBEDTLS_HMAC_DRBG_MAX_INPUT -#define POLARSSL_HMAC_DRBG_MAX_INPUT MBEDTLS_HMAC_DRBG_MAX_INPUT -#endif -#if defined MBEDTLS_HMAC_DRBG_MAX_REQUEST -#define POLARSSL_HMAC_DRBG_MAX_REQUEST MBEDTLS_HMAC_DRBG_MAX_REQUEST -#endif -#if defined MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT -#define POLARSSL_HMAC_DRBG_MAX_SEED_INPUT MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT -#endif -#if defined MBEDTLS_HMAC_DRBG_RESEED_INTERVAL -#define POLARSSL_HMAC_DRBG_RESEED_INTERVAL MBEDTLS_HMAC_DRBG_RESEED_INTERVAL -#endif -#if defined MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED -#define POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED -#endif -#if defined MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED -#define POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED -#endif -#if defined MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED -#define POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED -#endif -#if defined MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED -#define POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED -#endif -#if defined MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED -#define POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED -#endif -#if defined MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED -#define POLARSSL_KEY_EXCHANGE_ECDH_ECDSA_ENABLED MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED -#endif -#if defined MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED -#define POLARSSL_KEY_EXCHANGE_ECDH_RSA_ENABLED MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED -#endif -#if defined MBEDTLS_KEY_EXCHANGE_PSK_ENABLED -#define POLARSSL_KEY_EXCHANGE_PSK_ENABLED MBEDTLS_KEY_EXCHANGE_PSK_ENABLED -#endif -#if defined MBEDTLS_KEY_EXCHANGE_RSA_ENABLED -#define POLARSSL_KEY_EXCHANGE_RSA_ENABLED MBEDTLS_KEY_EXCHANGE_RSA_ENABLED -#endif -#if defined MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED -#define POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED -#endif -#if defined MBEDTLS_MD2_ALT -#define POLARSSL_MD2_ALT MBEDTLS_MD2_ALT -#endif -#if defined MBEDTLS_MD2_C -#define POLARSSL_MD2_C MBEDTLS_MD2_C -#endif -#if defined MBEDTLS_MD2_PROCESS_ALT -#define POLARSSL_MD2_PROCESS_ALT MBEDTLS_MD2_PROCESS_ALT -#endif -#if defined MBEDTLS_MD4_ALT -#define POLARSSL_MD4_ALT MBEDTLS_MD4_ALT -#endif -#if defined MBEDTLS_MD4_C -#define POLARSSL_MD4_C MBEDTLS_MD4_C -#endif -#if defined MBEDTLS_MD4_PROCESS_ALT -#define POLARSSL_MD4_PROCESS_ALT MBEDTLS_MD4_PROCESS_ALT -#endif -#if defined MBEDTLS_MD5_ALT -#define POLARSSL_MD5_ALT MBEDTLS_MD5_ALT -#endif -#if defined MBEDTLS_MD5_C -#define POLARSSL_MD5_C MBEDTLS_MD5_C -#endif -#if defined MBEDTLS_MD5_PROCESS_ALT -#define POLARSSL_MD5_PROCESS_ALT MBEDTLS_MD5_PROCESS_ALT -#endif -#if defined MBEDTLS_MD_C -#define POLARSSL_MD_C MBEDTLS_MD_C -#endif -#if defined MBEDTLS_MEMORY_ALIGN_MULTIPLE -#define POLARSSL_MEMORY_ALIGN_MULTIPLE MBEDTLS_MEMORY_ALIGN_MULTIPLE -#endif -#if defined MBEDTLS_MEMORY_BACKTRACE -#define POLARSSL_MEMORY_BACKTRACE MBEDTLS_MEMORY_BACKTRACE -#endif -#if defined MBEDTLS_MEMORY_BUFFER_ALLOC_C -#define POLARSSL_MEMORY_BUFFER_ALLOC_C MBEDTLS_MEMORY_BUFFER_ALLOC_C -#endif -#if defined MBEDTLS_MEMORY_DEBUG -#define POLARSSL_MEMORY_DEBUG MBEDTLS_MEMORY_DEBUG -#endif -#if defined MBEDTLS_MPI_MAX_SIZE -#define POLARSSL_MPI_MAX_SIZE MBEDTLS_MPI_MAX_SIZE -#endif -#if defined MBEDTLS_MPI_WINDOW_SIZE -#define POLARSSL_MPI_WINDOW_SIZE MBEDTLS_MPI_WINDOW_SIZE -#endif -#if defined MBEDTLS_NET_C -#define POLARSSL_NET_C MBEDTLS_NET_C -#endif -#if defined MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES -#define POLARSSL_NO_DEFAULT_ENTROPY_SOURCES MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES -#endif -#if defined MBEDTLS_NO_PLATFORM_ENTROPY -#define POLARSSL_NO_PLATFORM_ENTROPY MBEDTLS_NO_PLATFORM_ENTROPY -#endif -#if defined MBEDTLS_OID_C -#define POLARSSL_OID_C MBEDTLS_OID_C -#endif -#if defined MBEDTLS_PADLOCK_C -#define POLARSSL_PADLOCK_C MBEDTLS_PADLOCK_C -#endif -#if defined MBEDTLS_PEM_PARSE_C -#define POLARSSL_PEM_PARSE_C MBEDTLS_PEM_PARSE_C -#endif -#if defined MBEDTLS_PEM_WRITE_C -#define POLARSSL_PEM_WRITE_C MBEDTLS_PEM_WRITE_C -#endif -#if defined MBEDTLS_PKCS11_C -#define POLARSSL_PKCS11_C MBEDTLS_PKCS11_C -#endif -#if defined MBEDTLS_PKCS12_C -#define POLARSSL_PKCS12_C MBEDTLS_PKCS12_C -#endif -#if defined MBEDTLS_PKCS1_V15 -#define POLARSSL_PKCS1_V15 MBEDTLS_PKCS1_V15 -#endif -#if defined MBEDTLS_PKCS1_V21 -#define POLARSSL_PKCS1_V21 MBEDTLS_PKCS1_V21 -#endif -#if defined MBEDTLS_PKCS5_C -#define POLARSSL_PKCS5_C MBEDTLS_PKCS5_C -#endif -#if defined MBEDTLS_PK_C -#define POLARSSL_PK_C MBEDTLS_PK_C -#endif -#if defined MBEDTLS_PK_PARSE_C -#define POLARSSL_PK_PARSE_C MBEDTLS_PK_PARSE_C -#endif -#if defined MBEDTLS_PK_PARSE_EC_EXTENDED -#define POLARSSL_PK_PARSE_EC_EXTENDED MBEDTLS_PK_PARSE_EC_EXTENDED -#endif -#if defined MBEDTLS_PK_RSA_ALT_SUPPORT -#define POLARSSL_PK_RSA_ALT_SUPPORT MBEDTLS_PK_RSA_ALT_SUPPORT -#endif -#if defined MBEDTLS_PK_WRITE_C -#define POLARSSL_PK_WRITE_C MBEDTLS_PK_WRITE_C -#endif -#if defined MBEDTLS_PLATFORM_C -#define POLARSSL_PLATFORM_C MBEDTLS_PLATFORM_C -#endif -#if defined MBEDTLS_PLATFORM_EXIT_ALT -#define POLARSSL_PLATFORM_EXIT_ALT MBEDTLS_PLATFORM_EXIT_ALT -#endif -#if defined MBEDTLS_PLATFORM_EXIT_MACRO -#define POLARSSL_PLATFORM_EXIT_MACRO MBEDTLS_PLATFORM_EXIT_MACRO -#endif -#if defined MBEDTLS_PLATFORM_FPRINTF_ALT -#define POLARSSL_PLATFORM_FPRINTF_ALT MBEDTLS_PLATFORM_FPRINTF_ALT -#endif -#if defined MBEDTLS_PLATFORM_FPRINTF_MACRO -#define POLARSSL_PLATFORM_FPRINTF_MACRO MBEDTLS_PLATFORM_FPRINTF_MACRO -#endif -#if defined MBEDTLS_PLATFORM_FREE_MACRO -#define POLARSSL_PLATFORM_FREE_MACRO MBEDTLS_PLATFORM_FREE_MACRO -#endif -#if defined MBEDTLS_PLATFORM_MEMORY -#define POLARSSL_PLATFORM_MEMORY MBEDTLS_PLATFORM_MEMORY -#endif -#if defined MBEDTLS_PLATFORM_NO_STD_FUNCTIONS -#define POLARSSL_PLATFORM_NO_STD_FUNCTIONS MBEDTLS_PLATFORM_NO_STD_FUNCTIONS -#endif -#if defined MBEDTLS_PLATFORM_PRINTF_ALT -#define POLARSSL_PLATFORM_PRINTF_ALT MBEDTLS_PLATFORM_PRINTF_ALT -#endif -#if defined MBEDTLS_PLATFORM_PRINTF_MACRO -#define POLARSSL_PLATFORM_PRINTF_MACRO MBEDTLS_PLATFORM_PRINTF_MACRO -#endif -#if defined MBEDTLS_PLATFORM_SNPRINTF_ALT -#define POLARSSL_PLATFORM_SNPRINTF_ALT MBEDTLS_PLATFORM_SNPRINTF_ALT -#endif -#if defined MBEDTLS_PLATFORM_SNPRINTF_MACRO -#define POLARSSL_PLATFORM_SNPRINTF_MACRO MBEDTLS_PLATFORM_SNPRINTF_MACRO -#endif -#if defined MBEDTLS_PLATFORM_STD_EXIT -#define POLARSSL_PLATFORM_STD_EXIT MBEDTLS_PLATFORM_STD_EXIT -#endif -#if defined MBEDTLS_PLATFORM_STD_FPRINTF -#define POLARSSL_PLATFORM_STD_FPRINTF MBEDTLS_PLATFORM_STD_FPRINTF -#endif -#if defined MBEDTLS_PLATFORM_STD_FREE -#define POLARSSL_PLATFORM_STD_FREE MBEDTLS_PLATFORM_STD_FREE -#endif -#if defined MBEDTLS_PLATFORM_STD_MEM_HDR -#define POLARSSL_PLATFORM_STD_MEM_HDR MBEDTLS_PLATFORM_STD_MEM_HDR -#endif -#if defined MBEDTLS_PLATFORM_STD_PRINTF -#define POLARSSL_PLATFORM_STD_PRINTF MBEDTLS_PLATFORM_STD_PRINTF -#endif -#if defined MBEDTLS_PLATFORM_STD_SNPRINTF -#define POLARSSL_PLATFORM_STD_SNPRINTF MBEDTLS_PLATFORM_STD_SNPRINTF -#endif -#if defined MBEDTLS_PSK_MAX_LEN -#define POLARSSL_PSK_MAX_LEN MBEDTLS_PSK_MAX_LEN -#endif -#if defined MBEDTLS_REMOVE_ARC4_CIPHERSUITES -#define POLARSSL_REMOVE_ARC4_CIPHERSUITES MBEDTLS_REMOVE_ARC4_CIPHERSUITES -#endif -#if defined MBEDTLS_RIPEMD160_ALT -#define POLARSSL_RIPEMD160_ALT MBEDTLS_RIPEMD160_ALT -#endif -#if defined MBEDTLS_RIPEMD160_C -#define POLARSSL_RIPEMD160_C MBEDTLS_RIPEMD160_C -#endif -#if defined MBEDTLS_RIPEMD160_PROCESS_ALT -#define POLARSSL_RIPEMD160_PROCESS_ALT MBEDTLS_RIPEMD160_PROCESS_ALT -#endif -#if defined MBEDTLS_RSA_C -#define POLARSSL_RSA_C MBEDTLS_RSA_C -#endif -#if defined MBEDTLS_RSA_NO_CRT -#define POLARSSL_RSA_NO_CRT MBEDTLS_RSA_NO_CRT -#endif -#if defined MBEDTLS_SELF_TEST -#define POLARSSL_SELF_TEST MBEDTLS_SELF_TEST -#endif -#if defined MBEDTLS_SHA1_ALT -#define POLARSSL_SHA1_ALT MBEDTLS_SHA1_ALT -#endif -#if defined MBEDTLS_SHA1_C -#define POLARSSL_SHA1_C MBEDTLS_SHA1_C -#endif -#if defined MBEDTLS_SHA1_PROCESS_ALT -#define POLARSSL_SHA1_PROCESS_ALT MBEDTLS_SHA1_PROCESS_ALT -#endif -#if defined MBEDTLS_SHA256_ALT -#define POLARSSL_SHA256_ALT MBEDTLS_SHA256_ALT -#endif -#if defined MBEDTLS_SHA256_C -#define POLARSSL_SHA256_C MBEDTLS_SHA256_C -#endif -#if defined MBEDTLS_SHA256_PROCESS_ALT -#define POLARSSL_SHA256_PROCESS_ALT MBEDTLS_SHA256_PROCESS_ALT -#endif -#if defined MBEDTLS_SHA512_ALT -#define POLARSSL_SHA512_ALT MBEDTLS_SHA512_ALT -#endif -#if defined MBEDTLS_SHA512_C -#define POLARSSL_SHA512_C MBEDTLS_SHA512_C -#endif -#if defined MBEDTLS_SHA512_PROCESS_ALT -#define POLARSSL_SHA512_PROCESS_ALT MBEDTLS_SHA512_PROCESS_ALT -#endif -#if defined MBEDTLS_SSL_ALL_ALERT_MESSAGES -#define POLARSSL_SSL_ALL_ALERT_MESSAGES MBEDTLS_SSL_ALL_ALERT_MESSAGES -#endif -#if defined MBEDTLS_SSL_ALPN -#define POLARSSL_SSL_ALPN MBEDTLS_SSL_ALPN -#endif -#if defined MBEDTLS_SSL_CACHE_C -#define POLARSSL_SSL_CACHE_C MBEDTLS_SSL_CACHE_C -#endif -#if defined MBEDTLS_SSL_CBC_RECORD_SPLITTING -#define POLARSSL_SSL_CBC_RECORD_SPLITTING MBEDTLS_SSL_CBC_RECORD_SPLITTING -#endif -#if defined MBEDTLS_SSL_CLI_C -#define POLARSSL_SSL_CLI_C MBEDTLS_SSL_CLI_C -#endif -#if defined MBEDTLS_SSL_COOKIE_C -#define POLARSSL_SSL_COOKIE_C MBEDTLS_SSL_COOKIE_C -#endif -#if defined MBEDTLS_SSL_COOKIE_TIMEOUT -#define POLARSSL_SSL_COOKIE_TIMEOUT MBEDTLS_SSL_COOKIE_TIMEOUT -#endif -#if defined MBEDTLS_SSL_DEBUG_ALL -#define POLARSSL_SSL_DEBUG_ALL MBEDTLS_SSL_DEBUG_ALL -#endif -#if defined MBEDTLS_SSL_DTLS_ANTI_REPLAY -#define POLARSSL_SSL_DTLS_ANTI_REPLAY MBEDTLS_SSL_DTLS_ANTI_REPLAY -#endif -#if defined MBEDTLS_SSL_DTLS_BADMAC_LIMIT -#define POLARSSL_SSL_DTLS_BADMAC_LIMIT MBEDTLS_SSL_DTLS_BADMAC_LIMIT -#endif -#if defined MBEDTLS_SSL_DTLS_HELLO_VERIFY -#define POLARSSL_SSL_DTLS_HELLO_VERIFY MBEDTLS_SSL_DTLS_HELLO_VERIFY -#endif -#if defined MBEDTLS_SSL_ENCRYPT_THEN_MAC -#define POLARSSL_SSL_ENCRYPT_THEN_MAC MBEDTLS_SSL_ENCRYPT_THEN_MAC -#endif -#if defined MBEDTLS_SSL_EXTENDED_MASTER_SECRET -#define POLARSSL_SSL_EXTENDED_MASTER_SECRET MBEDTLS_SSL_EXTENDED_MASTER_SECRET -#endif -#if defined MBEDTLS_SSL_FALLBACK_SCSV -#define POLARSSL_SSL_FALLBACK_SCSV MBEDTLS_SSL_FALLBACK_SCSV -#endif -#if defined MBEDTLS_SSL_HW_RECORD_ACCEL -#define POLARSSL_SSL_HW_RECORD_ACCEL MBEDTLS_SSL_HW_RECORD_ACCEL -#endif -#if defined MBEDTLS_SSL_MAX_FRAGMENT_LENGTH -#define POLARSSL_SSL_MAX_FRAGMENT_LENGTH MBEDTLS_SSL_MAX_FRAGMENT_LENGTH -#endif -#if defined MBEDTLS_SSL_PROTO_DTLS -#define POLARSSL_SSL_PROTO_DTLS MBEDTLS_SSL_PROTO_DTLS -#endif -#if defined MBEDTLS_SSL_PROTO_SSL3 -#define POLARSSL_SSL_PROTO_SSL3 MBEDTLS_SSL_PROTO_SSL3 -#endif -#if defined MBEDTLS_SSL_PROTO_TLS1 -#define POLARSSL_SSL_PROTO_TLS1 MBEDTLS_SSL_PROTO_TLS1 -#endif -#if defined MBEDTLS_SSL_PROTO_TLS1_1 -#define POLARSSL_SSL_PROTO_TLS1_1 MBEDTLS_SSL_PROTO_TLS1_1 -#endif -#if defined MBEDTLS_SSL_PROTO_TLS1_2 -#define POLARSSL_SSL_PROTO_TLS1_2 MBEDTLS_SSL_PROTO_TLS1_2 -#endif -#if defined MBEDTLS_SSL_RENEGOTIATION -#define POLARSSL_SSL_RENEGOTIATION MBEDTLS_SSL_RENEGOTIATION -#endif -#if defined MBEDTLS_SSL_SERVER_NAME_INDICATION -#define POLARSSL_SSL_SERVER_NAME_INDICATION MBEDTLS_SSL_SERVER_NAME_INDICATION -#endif -#if defined MBEDTLS_SSL_SESSION_TICKETS -#define POLARSSL_SSL_SESSION_TICKETS MBEDTLS_SSL_SESSION_TICKETS -#endif -#if defined MBEDTLS_SSL_SRV_C -#define POLARSSL_SSL_SRV_C MBEDTLS_SSL_SRV_C -#endif -#if defined MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE -#define POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE -#endif -#if defined MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO -#define POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO -#endif -#if defined MBEDTLS_SSL_TLS_C -#define POLARSSL_SSL_TLS_C MBEDTLS_SSL_TLS_C -#endif -#if defined MBEDTLS_SSL_TRUNCATED_HMAC -#define POLARSSL_SSL_TRUNCATED_HMAC MBEDTLS_SSL_TRUNCATED_HMAC -#endif -#if defined MBEDTLS_THREADING_ALT -#define POLARSSL_THREADING_ALT MBEDTLS_THREADING_ALT -#endif -#if defined MBEDTLS_THREADING_C -#define POLARSSL_THREADING_C MBEDTLS_THREADING_C -#endif -#if defined MBEDTLS_THREADING_PTHREAD -#define POLARSSL_THREADING_PTHREAD MBEDTLS_THREADING_PTHREAD -#endif -#if defined MBEDTLS_TIMING_ALT -#define POLARSSL_TIMING_ALT MBEDTLS_TIMING_ALT -#endif -#if defined MBEDTLS_TIMING_C -#define POLARSSL_TIMING_C MBEDTLS_TIMING_C -#endif -#if defined MBEDTLS_VERSION_C -#define POLARSSL_VERSION_C MBEDTLS_VERSION_C -#endif -#if defined MBEDTLS_VERSION_FEATURES -#define POLARSSL_VERSION_FEATURES MBEDTLS_VERSION_FEATURES -#endif -#if defined MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3 -#define POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3 MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3 -#endif -#if defined MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION -#define POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION -#endif -#if defined MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE -#define POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE -#endif -#if defined MBEDTLS_X509_CHECK_KEY_USAGE -#define POLARSSL_X509_CHECK_KEY_USAGE MBEDTLS_X509_CHECK_KEY_USAGE -#endif -#if defined MBEDTLS_X509_CREATE_C -#define POLARSSL_X509_CREATE_C MBEDTLS_X509_CREATE_C -#endif -#if defined MBEDTLS_X509_CRL_PARSE_C -#define POLARSSL_X509_CRL_PARSE_C MBEDTLS_X509_CRL_PARSE_C -#endif -#if defined MBEDTLS_X509_CRT_PARSE_C -#define POLARSSL_X509_CRT_PARSE_C MBEDTLS_X509_CRT_PARSE_C -#endif -#if defined MBEDTLS_X509_CRT_WRITE_C -#define POLARSSL_X509_CRT_WRITE_C MBEDTLS_X509_CRT_WRITE_C -#endif -#if defined MBEDTLS_X509_CSR_PARSE_C -#define POLARSSL_X509_CSR_PARSE_C MBEDTLS_X509_CSR_PARSE_C -#endif -#if defined MBEDTLS_X509_CSR_WRITE_C -#define POLARSSL_X509_CSR_WRITE_C MBEDTLS_X509_CSR_WRITE_C -#endif -#if defined MBEDTLS_X509_MAX_INTERMEDIATE_CA -#define POLARSSL_X509_MAX_INTERMEDIATE_CA MBEDTLS_X509_MAX_INTERMEDIATE_CA -#endif -#if defined MBEDTLS_X509_RSASSA_PSS_SUPPORT -#define POLARSSL_X509_RSASSA_PSS_SUPPORT MBEDTLS_X509_RSASSA_PSS_SUPPORT -#endif -#if defined MBEDTLS_X509_USE_C -#define POLARSSL_X509_USE_C MBEDTLS_X509_USE_C -#endif -#if defined MBEDTLS_XTEA_ALT -#define POLARSSL_XTEA_ALT MBEDTLS_XTEA_ALT -#endif -#if defined MBEDTLS_XTEA_C -#define POLARSSL_XTEA_C MBEDTLS_XTEA_C -#endif -#if defined MBEDTLS_ZLIB_SUPPORT -#define POLARSSL_ZLIB_SUPPORT MBEDTLS_ZLIB_SUPPORT -#endif - -/* - * Misc names (macros, types, functions, enum constants...) - */ -#define AES_DECRYPT MBEDTLS_AES_DECRYPT -#define AES_ENCRYPT MBEDTLS_AES_ENCRYPT -#define ASN1_BIT_STRING MBEDTLS_ASN1_BIT_STRING -#define ASN1_BMP_STRING MBEDTLS_ASN1_BMP_STRING -#define ASN1_BOOLEAN MBEDTLS_ASN1_BOOLEAN -#define ASN1_CHK_ADD MBEDTLS_ASN1_CHK_ADD -#define ASN1_CONSTRUCTED MBEDTLS_ASN1_CONSTRUCTED -#define ASN1_CONTEXT_SPECIFIC MBEDTLS_ASN1_CONTEXT_SPECIFIC -#define ASN1_GENERALIZED_TIME MBEDTLS_ASN1_GENERALIZED_TIME -#define ASN1_IA5_STRING MBEDTLS_ASN1_IA5_STRING -#define ASN1_INTEGER MBEDTLS_ASN1_INTEGER -#define ASN1_NULL MBEDTLS_ASN1_NULL -#define ASN1_OCTET_STRING MBEDTLS_ASN1_OCTET_STRING -#define ASN1_OID MBEDTLS_ASN1_OID -#define ASN1_PRIMITIVE MBEDTLS_ASN1_PRIMITIVE -#define ASN1_PRINTABLE_STRING MBEDTLS_ASN1_PRINTABLE_STRING -#define ASN1_SEQUENCE MBEDTLS_ASN1_SEQUENCE -#define ASN1_SET MBEDTLS_ASN1_SET -#define ASN1_T61_STRING MBEDTLS_ASN1_T61_STRING -#define ASN1_UNIVERSAL_STRING MBEDTLS_ASN1_UNIVERSAL_STRING -#define ASN1_UTC_TIME MBEDTLS_ASN1_UTC_TIME -#define ASN1_UTF8_STRING MBEDTLS_ASN1_UTF8_STRING -#define BADCERT_CN_MISMATCH MBEDTLS_X509_BADCERT_CN_MISMATCH -#define BADCERT_EXPIRED MBEDTLS_X509_BADCERT_EXPIRED -#define BADCERT_FUTURE MBEDTLS_X509_BADCERT_FUTURE -#define BADCERT_MISSING MBEDTLS_X509_BADCERT_MISSING -#define BADCERT_NOT_TRUSTED MBEDTLS_X509_BADCERT_NOT_TRUSTED -#define BADCERT_OTHER MBEDTLS_X509_BADCERT_OTHER -#define BADCERT_REVOKED MBEDTLS_X509_BADCERT_REVOKED -#define BADCERT_SKIP_VERIFY MBEDTLS_X509_BADCERT_SKIP_VERIFY -#define BADCRL_EXPIRED MBEDTLS_X509_BADCRL_EXPIRED -#define BADCRL_FUTURE MBEDTLS_X509_BADCRL_FUTURE -#define BADCRL_NOT_TRUSTED MBEDTLS_X509_BADCRL_NOT_TRUSTED -#define BLOWFISH_BLOCKSIZE MBEDTLS_BLOWFISH_BLOCKSIZE -#define BLOWFISH_DECRYPT MBEDTLS_BLOWFISH_DECRYPT -#define BLOWFISH_ENCRYPT MBEDTLS_BLOWFISH_ENCRYPT -#define BLOWFISH_MAX_KEY MBEDTLS_BLOWFISH_MAX_KEY_BITS -#define BLOWFISH_MIN_KEY MBEDTLS_BLOWFISH_MIN_KEY_BITS -#define BLOWFISH_ROUNDS MBEDTLS_BLOWFISH_ROUNDS -#define CAMELLIA_DECRYPT MBEDTLS_CAMELLIA_DECRYPT -#define CAMELLIA_ENCRYPT MBEDTLS_CAMELLIA_ENCRYPT -#define COLLECT_SIZE MBEDTLS_HAVEGE_COLLECT_SIZE -#define CTR_DRBG_BLOCKSIZE MBEDTLS_CTR_DRBG_BLOCKSIZE -#define CTR_DRBG_ENTROPY_LEN MBEDTLS_CTR_DRBG_ENTROPY_LEN -#define CTR_DRBG_KEYBITS MBEDTLS_CTR_DRBG_KEYBITS -#define CTR_DRBG_KEYSIZE MBEDTLS_CTR_DRBG_KEYSIZE -#define CTR_DRBG_MAX_INPUT MBEDTLS_CTR_DRBG_MAX_INPUT -#define CTR_DRBG_MAX_REQUEST MBEDTLS_CTR_DRBG_MAX_REQUEST -#define CTR_DRBG_MAX_SEED_INPUT MBEDTLS_CTR_DRBG_MAX_SEED_INPUT -#define CTR_DRBG_PR_OFF MBEDTLS_CTR_DRBG_PR_OFF -#define CTR_DRBG_PR_ON MBEDTLS_CTR_DRBG_PR_ON -#define CTR_DRBG_RESEED_INTERVAL MBEDTLS_CTR_DRBG_RESEED_INTERVAL -#define CTR_DRBG_SEEDLEN MBEDTLS_CTR_DRBG_SEEDLEN -#define DEPRECATED MBEDTLS_DEPRECATED -#define DES_DECRYPT MBEDTLS_DES_DECRYPT -#define DES_ENCRYPT MBEDTLS_DES_ENCRYPT -#define DES_KEY_SIZE MBEDTLS_DES_KEY_SIZE -#define ENTROPY_BLOCK_SIZE MBEDTLS_ENTROPY_BLOCK_SIZE -#define ENTROPY_MAX_GATHER MBEDTLS_ENTROPY_MAX_GATHER -#define ENTROPY_MAX_SEED_SIZE MBEDTLS_ENTROPY_MAX_SEED_SIZE -#define ENTROPY_MAX_SOURCES MBEDTLS_ENTROPY_MAX_SOURCES -#define ENTROPY_MIN_HARDCLOCK MBEDTLS_ENTROPY_MIN_HARDCLOCK -#define ENTROPY_MIN_HAVEGE MBEDTLS_ENTROPY_MIN_HAVEGE -#define ENTROPY_MIN_PLATFORM MBEDTLS_ENTROPY_MIN_PLATFORM -#define ENTROPY_SOURCE_MANUAL MBEDTLS_ENTROPY_SOURCE_MANUAL -#define EXT_AUTHORITY_KEY_IDENTIFIER MBEDTLS_X509_EXT_AUTHORITY_KEY_IDENTIFIER -#define EXT_BASIC_CONSTRAINTS MBEDTLS_X509_EXT_BASIC_CONSTRAINTS -#define EXT_CERTIFICATE_POLICIES MBEDTLS_X509_EXT_CERTIFICATE_POLICIES -#define EXT_CRL_DISTRIBUTION_POINTS MBEDTLS_X509_EXT_CRL_DISTRIBUTION_POINTS -#define EXT_EXTENDED_KEY_USAGE MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE -#define EXT_FRESHEST_CRL MBEDTLS_X509_EXT_FRESHEST_CRL -#define EXT_INIHIBIT_ANYPOLICY MBEDTLS_X509_EXT_INIHIBIT_ANYPOLICY -#define EXT_ISSUER_ALT_NAME MBEDTLS_X509_EXT_ISSUER_ALT_NAME -#define EXT_KEY_USAGE MBEDTLS_X509_EXT_KEY_USAGE -#define EXT_NAME_CONSTRAINTS MBEDTLS_X509_EXT_NAME_CONSTRAINTS -#define EXT_NS_CERT_TYPE MBEDTLS_X509_EXT_NS_CERT_TYPE -#define EXT_POLICY_CONSTRAINTS MBEDTLS_X509_EXT_POLICY_CONSTRAINTS -#define EXT_POLICY_MAPPINGS MBEDTLS_X509_EXT_POLICY_MAPPINGS -#define EXT_SUBJECT_ALT_NAME MBEDTLS_X509_EXT_SUBJECT_ALT_NAME -#define EXT_SUBJECT_DIRECTORY_ATTRS MBEDTLS_X509_EXT_SUBJECT_DIRECTORY_ATTRS -#define EXT_SUBJECT_KEY_IDENTIFIER MBEDTLS_X509_EXT_SUBJECT_KEY_IDENTIFIER -#define GCM_DECRYPT MBEDTLS_GCM_DECRYPT -#define GCM_ENCRYPT MBEDTLS_GCM_ENCRYPT -#define KU_CRL_SIGN MBEDTLS_X509_KU_CRL_SIGN -#define KU_DATA_ENCIPHERMENT MBEDTLS_X509_KU_DATA_ENCIPHERMENT -#define KU_DIGITAL_SIGNATURE MBEDTLS_X509_KU_DIGITAL_SIGNATURE -#define KU_KEY_AGREEMENT MBEDTLS_X509_KU_KEY_AGREEMENT -#define KU_KEY_CERT_SIGN MBEDTLS_X509_KU_KEY_CERT_SIGN -#define KU_KEY_ENCIPHERMENT MBEDTLS_X509_KU_KEY_ENCIPHERMENT -#define KU_NON_REPUDIATION MBEDTLS_X509_KU_NON_REPUDIATION -#define LN_2_DIV_LN_10_SCALE100 MBEDTLS_LN_2_DIV_LN_10_SCALE100 -#define MEMORY_VERIFY_ALLOC MBEDTLS_MEMORY_VERIFY_ALLOC -#define MEMORY_VERIFY_ALWAYS MBEDTLS_MEMORY_VERIFY_ALWAYS -#define MEMORY_VERIFY_FREE MBEDTLS_MEMORY_VERIFY_FREE -#define MEMORY_VERIFY_NONE MBEDTLS_MEMORY_VERIFY_NONE -#define MPI_CHK MBEDTLS_MPI_CHK -#define NET_PROTO_TCP MBEDTLS_NET_PROTO_TCP -#define NET_PROTO_UDP MBEDTLS_NET_PROTO_UDP -#define NS_CERT_TYPE_EMAIL MBEDTLS_X509_NS_CERT_TYPE_EMAIL -#define NS_CERT_TYPE_EMAIL_CA MBEDTLS_X509_NS_CERT_TYPE_EMAIL_CA -#define NS_CERT_TYPE_OBJECT_SIGNING MBEDTLS_X509_NS_CERT_TYPE_OBJECT_SIGNING -#define NS_CERT_TYPE_OBJECT_SIGNING_CA MBEDTLS_X509_NS_CERT_TYPE_OBJECT_SIGNING_CA -#define NS_CERT_TYPE_RESERVED MBEDTLS_X509_NS_CERT_TYPE_RESERVED -#define NS_CERT_TYPE_SSL_CA MBEDTLS_X509_NS_CERT_TYPE_SSL_CA -#define NS_CERT_TYPE_SSL_CLIENT MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT -#define NS_CERT_TYPE_SSL_SERVER MBEDTLS_X509_NS_CERT_TYPE_SSL_SERVER -#define OID_ANSI_X9_62 MBEDTLS_OID_ANSI_X9_62 -#define OID_ANSI_X9_62_FIELD_TYPE MBEDTLS_OID_ANSI_X9_62_FIELD_TYPE -#define OID_ANSI_X9_62_PRIME_FIELD MBEDTLS_OID_ANSI_X9_62_PRIME_FIELD -#define OID_ANSI_X9_62_SIG MBEDTLS_OID_ANSI_X9_62_SIG -#define OID_ANSI_X9_62_SIG_SHA2 MBEDTLS_OID_ANSI_X9_62_SIG_SHA2 -#define OID_ANY_EXTENDED_KEY_USAGE MBEDTLS_OID_ANY_EXTENDED_KEY_USAGE -#define OID_AT MBEDTLS_OID_AT -#define OID_AT_CN MBEDTLS_OID_AT_CN -#define OID_AT_COUNTRY MBEDTLS_OID_AT_COUNTRY -#define OID_AT_DN_QUALIFIER MBEDTLS_OID_AT_DN_QUALIFIER -#define OID_AT_GENERATION_QUALIFIER MBEDTLS_OID_AT_GENERATION_QUALIFIER -#define OID_AT_GIVEN_NAME MBEDTLS_OID_AT_GIVEN_NAME -#define OID_AT_INITIALS MBEDTLS_OID_AT_INITIALS -#define OID_AT_LOCALITY MBEDTLS_OID_AT_LOCALITY -#define OID_AT_ORGANIZATION MBEDTLS_OID_AT_ORGANIZATION -#define OID_AT_ORG_UNIT MBEDTLS_OID_AT_ORG_UNIT -#define OID_AT_POSTAL_ADDRESS MBEDTLS_OID_AT_POSTAL_ADDRESS -#define OID_AT_POSTAL_CODE MBEDTLS_OID_AT_POSTAL_CODE -#define OID_AT_PSEUDONYM MBEDTLS_OID_AT_PSEUDONYM -#define OID_AT_SERIAL_NUMBER MBEDTLS_OID_AT_SERIAL_NUMBER -#define OID_AT_STATE MBEDTLS_OID_AT_STATE -#define OID_AT_SUR_NAME MBEDTLS_OID_AT_SUR_NAME -#define OID_AT_TITLE MBEDTLS_OID_AT_TITLE -#define OID_AT_UNIQUE_IDENTIFIER MBEDTLS_OID_AT_UNIQUE_IDENTIFIER -#define OID_AUTHORITY_KEY_IDENTIFIER MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER -#define OID_BASIC_CONSTRAINTS MBEDTLS_OID_BASIC_CONSTRAINTS -#define OID_CERTICOM MBEDTLS_OID_CERTICOM -#define OID_CERTIFICATE_POLICIES MBEDTLS_OID_CERTIFICATE_POLICIES -#define OID_CLIENT_AUTH MBEDTLS_OID_CLIENT_AUTH -#define OID_CMP MBEDTLS_OID_CMP -#define OID_CODE_SIGNING MBEDTLS_OID_CODE_SIGNING -#define OID_COUNTRY_US MBEDTLS_OID_COUNTRY_US -#define OID_CRL_DISTRIBUTION_POINTS MBEDTLS_OID_CRL_DISTRIBUTION_POINTS -#define OID_CRL_NUMBER MBEDTLS_OID_CRL_NUMBER -#define OID_DES_CBC MBEDTLS_OID_DES_CBC -#define OID_DES_EDE3_CBC MBEDTLS_OID_DES_EDE3_CBC -#define OID_DIGEST_ALG_MD2 MBEDTLS_OID_DIGEST_ALG_MD2 -#define OID_DIGEST_ALG_MD4 MBEDTLS_OID_DIGEST_ALG_MD4 -#define OID_DIGEST_ALG_MD5 MBEDTLS_OID_DIGEST_ALG_MD5 -#define OID_DIGEST_ALG_SHA1 MBEDTLS_OID_DIGEST_ALG_SHA1 -#define OID_DIGEST_ALG_SHA224 MBEDTLS_OID_DIGEST_ALG_SHA224 -#define OID_DIGEST_ALG_SHA256 MBEDTLS_OID_DIGEST_ALG_SHA256 -#define OID_DIGEST_ALG_SHA384 MBEDTLS_OID_DIGEST_ALG_SHA384 -#define OID_DIGEST_ALG_SHA512 MBEDTLS_OID_DIGEST_ALG_SHA512 -#define OID_DOMAIN_COMPONENT MBEDTLS_OID_DOMAIN_COMPONENT -#define OID_ECDSA_SHA1 MBEDTLS_OID_ECDSA_SHA1 -#define OID_ECDSA_SHA224 MBEDTLS_OID_ECDSA_SHA224 -#define OID_ECDSA_SHA256 MBEDTLS_OID_ECDSA_SHA256 -#define OID_ECDSA_SHA384 MBEDTLS_OID_ECDSA_SHA384 -#define OID_ECDSA_SHA512 MBEDTLS_OID_ECDSA_SHA512 -#define OID_EC_ALG_ECDH MBEDTLS_OID_EC_ALG_ECDH -#define OID_EC_ALG_UNRESTRICTED MBEDTLS_OID_EC_ALG_UNRESTRICTED -#define OID_EC_BRAINPOOL_V1 MBEDTLS_OID_EC_BRAINPOOL_V1 -#define OID_EC_GRP_BP256R1 MBEDTLS_OID_EC_GRP_BP256R1 -#define OID_EC_GRP_BP384R1 MBEDTLS_OID_EC_GRP_BP384R1 -#define OID_EC_GRP_BP512R1 MBEDTLS_OID_EC_GRP_BP512R1 -#define OID_EC_GRP_SECP192K1 MBEDTLS_OID_EC_GRP_SECP192K1 -#define OID_EC_GRP_SECP192R1 MBEDTLS_OID_EC_GRP_SECP192R1 -#define OID_EC_GRP_SECP224K1 MBEDTLS_OID_EC_GRP_SECP224K1 -#define OID_EC_GRP_SECP224R1 MBEDTLS_OID_EC_GRP_SECP224R1 -#define OID_EC_GRP_SECP256K1 MBEDTLS_OID_EC_GRP_SECP256K1 -#define OID_EC_GRP_SECP256R1 MBEDTLS_OID_EC_GRP_SECP256R1 -#define OID_EC_GRP_SECP384R1 MBEDTLS_OID_EC_GRP_SECP384R1 -#define OID_EC_GRP_SECP521R1 MBEDTLS_OID_EC_GRP_SECP521R1 -#define OID_EMAIL_PROTECTION MBEDTLS_OID_EMAIL_PROTECTION -#define OID_EXTENDED_KEY_USAGE MBEDTLS_OID_EXTENDED_KEY_USAGE -#define OID_FRESHEST_CRL MBEDTLS_OID_FRESHEST_CRL -#define OID_GOV MBEDTLS_OID_GOV -#define OID_HMAC_SHA1 MBEDTLS_OID_HMAC_SHA1 -#define OID_ID_CE MBEDTLS_OID_ID_CE -#define OID_INIHIBIT_ANYPOLICY MBEDTLS_OID_INIHIBIT_ANYPOLICY -#define OID_ISO_CCITT_DS MBEDTLS_OID_ISO_CCITT_DS -#define OID_ISO_IDENTIFIED_ORG MBEDTLS_OID_ISO_IDENTIFIED_ORG -#define OID_ISO_ITU_COUNTRY MBEDTLS_OID_ISO_ITU_COUNTRY -#define OID_ISO_ITU_US_ORG MBEDTLS_OID_ISO_ITU_US_ORG -#define OID_ISO_MEMBER_BODIES MBEDTLS_OID_ISO_MEMBER_BODIES -#define OID_ISSUER_ALT_NAME MBEDTLS_OID_ISSUER_ALT_NAME -#define OID_KEY_USAGE MBEDTLS_OID_KEY_USAGE -#define OID_KP MBEDTLS_OID_KP -#define OID_MGF1 MBEDTLS_OID_MGF1 -#define OID_NAME_CONSTRAINTS MBEDTLS_OID_NAME_CONSTRAINTS -#define OID_NETSCAPE MBEDTLS_OID_NETSCAPE -#define OID_NS_BASE_URL MBEDTLS_OID_NS_BASE_URL -#define OID_NS_CA_POLICY_URL MBEDTLS_OID_NS_CA_POLICY_URL -#define OID_NS_CA_REVOCATION_URL MBEDTLS_OID_NS_CA_REVOCATION_URL -#define OID_NS_CERT MBEDTLS_OID_NS_CERT -#define OID_NS_CERT_SEQUENCE MBEDTLS_OID_NS_CERT_SEQUENCE -#define OID_NS_CERT_TYPE MBEDTLS_OID_NS_CERT_TYPE -#define OID_NS_COMMENT MBEDTLS_OID_NS_COMMENT -#define OID_NS_DATA_TYPE MBEDTLS_OID_NS_DATA_TYPE -#define OID_NS_RENEWAL_URL MBEDTLS_OID_NS_RENEWAL_URL -#define OID_NS_REVOCATION_URL MBEDTLS_OID_NS_REVOCATION_URL -#define OID_NS_SSL_SERVER_NAME MBEDTLS_OID_NS_SSL_SERVER_NAME -#define OID_OCSP_SIGNING MBEDTLS_OID_OCSP_SIGNING -#define OID_OIW_SECSIG MBEDTLS_OID_OIW_SECSIG -#define OID_OIW_SECSIG_ALG MBEDTLS_OID_OIW_SECSIG_ALG -#define OID_OIW_SECSIG_SHA1 MBEDTLS_OID_OIW_SECSIG_SHA1 -#define OID_ORGANIZATION MBEDTLS_OID_ORGANIZATION -#define OID_ORG_ANSI_X9_62 MBEDTLS_OID_ORG_ANSI_X9_62 -#define OID_ORG_CERTICOM MBEDTLS_OID_ORG_CERTICOM -#define OID_ORG_DOD MBEDTLS_OID_ORG_DOD -#define OID_ORG_GOV MBEDTLS_OID_ORG_GOV -#define OID_ORG_NETSCAPE MBEDTLS_OID_ORG_NETSCAPE -#define OID_ORG_OIW MBEDTLS_OID_ORG_OIW -#define OID_ORG_RSA_DATA_SECURITY MBEDTLS_OID_ORG_RSA_DATA_SECURITY -#define OID_ORG_TELETRUST MBEDTLS_OID_ORG_TELETRUST -#define OID_PKCS MBEDTLS_OID_PKCS -#define OID_PKCS1 MBEDTLS_OID_PKCS1 -#define OID_PKCS12 MBEDTLS_OID_PKCS12 -#define OID_PKCS12_PBE MBEDTLS_OID_PKCS12_PBE -#define OID_PKCS12_PBE_SHA1_DES2_EDE_CBC MBEDTLS_OID_PKCS12_PBE_SHA1_DES2_EDE_CBC -#define OID_PKCS12_PBE_SHA1_DES3_EDE_CBC MBEDTLS_OID_PKCS12_PBE_SHA1_DES3_EDE_CBC -#define OID_PKCS12_PBE_SHA1_RC2_128_CBC MBEDTLS_OID_PKCS12_PBE_SHA1_RC2_128_CBC -#define OID_PKCS12_PBE_SHA1_RC2_40_CBC MBEDTLS_OID_PKCS12_PBE_SHA1_RC2_40_CBC -#define OID_PKCS12_PBE_SHA1_RC4_128 MBEDTLS_OID_PKCS12_PBE_SHA1_RC4_128 -#define OID_PKCS12_PBE_SHA1_RC4_40 MBEDTLS_OID_PKCS12_PBE_SHA1_RC4_40 -#define OID_PKCS1_MD2 MBEDTLS_OID_PKCS1_MD2 -#define OID_PKCS1_MD4 MBEDTLS_OID_PKCS1_MD4 -#define OID_PKCS1_MD5 MBEDTLS_OID_PKCS1_MD5 -#define OID_PKCS1_RSA MBEDTLS_OID_PKCS1_RSA -#define OID_PKCS1_SHA1 MBEDTLS_OID_PKCS1_SHA1 -#define OID_PKCS1_SHA224 MBEDTLS_OID_PKCS1_SHA224 -#define OID_PKCS1_SHA256 MBEDTLS_OID_PKCS1_SHA256 -#define OID_PKCS1_SHA384 MBEDTLS_OID_PKCS1_SHA384 -#define OID_PKCS1_SHA512 MBEDTLS_OID_PKCS1_SHA512 -#define OID_PKCS5 MBEDTLS_OID_PKCS5 -#define OID_PKCS5_PBES2 MBEDTLS_OID_PKCS5_PBES2 -#define OID_PKCS5_PBE_MD2_DES_CBC MBEDTLS_OID_PKCS5_PBE_MD2_DES_CBC -#define OID_PKCS5_PBE_MD2_RC2_CBC MBEDTLS_OID_PKCS5_PBE_MD2_RC2_CBC -#define OID_PKCS5_PBE_MD5_DES_CBC MBEDTLS_OID_PKCS5_PBE_MD5_DES_CBC -#define OID_PKCS5_PBE_MD5_RC2_CBC MBEDTLS_OID_PKCS5_PBE_MD5_RC2_CBC -#define OID_PKCS5_PBE_SHA1_DES_CBC MBEDTLS_OID_PKCS5_PBE_SHA1_DES_CBC -#define OID_PKCS5_PBE_SHA1_RC2_CBC MBEDTLS_OID_PKCS5_PBE_SHA1_RC2_CBC -#define OID_PKCS5_PBKDF2 MBEDTLS_OID_PKCS5_PBKDF2 -#define OID_PKCS5_PBMAC1 MBEDTLS_OID_PKCS5_PBMAC1 -#define OID_PKCS9 MBEDTLS_OID_PKCS9 -#define OID_PKCS9_CSR_EXT_REQ MBEDTLS_OID_PKCS9_CSR_EXT_REQ -#define OID_PKCS9_EMAIL MBEDTLS_OID_PKCS9_EMAIL -#define OID_PKIX MBEDTLS_OID_PKIX -#define OID_POLICY_CONSTRAINTS MBEDTLS_OID_POLICY_CONSTRAINTS -#define OID_POLICY_MAPPINGS MBEDTLS_OID_POLICY_MAPPINGS -#define OID_PRIVATE_KEY_USAGE_PERIOD MBEDTLS_OID_PRIVATE_KEY_USAGE_PERIOD -#define OID_RSASSA_PSS MBEDTLS_OID_RSASSA_PSS -#define OID_RSA_COMPANY MBEDTLS_OID_RSA_COMPANY -#define OID_RSA_SHA_OBS MBEDTLS_OID_RSA_SHA_OBS -#define OID_SERVER_AUTH MBEDTLS_OID_SERVER_AUTH -#define OID_SIZE MBEDTLS_OID_SIZE -#define OID_SUBJECT_ALT_NAME MBEDTLS_OID_SUBJECT_ALT_NAME -#define OID_SUBJECT_DIRECTORY_ATTRS MBEDTLS_OID_SUBJECT_DIRECTORY_ATTRS -#define OID_SUBJECT_KEY_IDENTIFIER MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER -#define OID_TELETRUST MBEDTLS_OID_TELETRUST -#define OID_TIME_STAMPING MBEDTLS_OID_TIME_STAMPING -#define PADLOCK_ACE MBEDTLS_PADLOCK_ACE -#define PADLOCK_ALIGN16 MBEDTLS_PADLOCK_ALIGN16 -#define PADLOCK_PHE MBEDTLS_PADLOCK_PHE -#define PADLOCK_PMM MBEDTLS_PADLOCK_PMM -#define PADLOCK_RNG MBEDTLS_PADLOCK_RNG -#define PKCS12_DERIVE_IV MBEDTLS_PKCS12_DERIVE_IV -#define PKCS12_DERIVE_KEY MBEDTLS_PKCS12_DERIVE_KEY -#define PKCS12_DERIVE_MAC_KEY MBEDTLS_PKCS12_DERIVE_MAC_KEY -#define PKCS12_PBE_DECRYPT MBEDTLS_PKCS12_PBE_DECRYPT -#define PKCS12_PBE_ENCRYPT MBEDTLS_PKCS12_PBE_ENCRYPT -#define PKCS5_DECRYPT MBEDTLS_PKCS5_DECRYPT -#define PKCS5_ENCRYPT MBEDTLS_PKCS5_ENCRYPT -#define POLARSSL_AESNI_AES MBEDTLS_AESNI_AES -#define POLARSSL_AESNI_CLMUL MBEDTLS_AESNI_CLMUL -#define POLARSSL_AESNI_H MBEDTLS_AESNI_H -#define POLARSSL_AES_H MBEDTLS_AES_H -#define POLARSSL_ARC4_H MBEDTLS_ARC4_H -#define POLARSSL_ASN1_H MBEDTLS_ASN1_H -#define POLARSSL_ASN1_WRITE_H MBEDTLS_ASN1_WRITE_H -#define POLARSSL_BASE64_H MBEDTLS_BASE64_H -#define POLARSSL_BIGNUM_H MBEDTLS_BIGNUM_H -#define POLARSSL_BLOWFISH_H MBEDTLS_BLOWFISH_H -#define POLARSSL_BN_MUL_H MBEDTLS_BN_MUL_H -#define POLARSSL_CAMELLIA_H MBEDTLS_CAMELLIA_H -#define POLARSSL_CCM_H MBEDTLS_CCM_H -#define POLARSSL_CERTS_H MBEDTLS_CERTS_H -#define POLARSSL_CHECK_CONFIG_H MBEDTLS_CHECK_CONFIG_H -#define POLARSSL_CIPHERSUITE_NODTLS MBEDTLS_CIPHERSUITE_NODTLS -#define POLARSSL_CIPHERSUITE_SHORT_TAG MBEDTLS_CIPHERSUITE_SHORT_TAG -#define POLARSSL_CIPHERSUITE_WEAK MBEDTLS_CIPHERSUITE_WEAK -#define POLARSSL_CIPHER_AES_128_CBC MBEDTLS_CIPHER_AES_128_CBC -#define POLARSSL_CIPHER_AES_128_CCM MBEDTLS_CIPHER_AES_128_CCM -#define POLARSSL_CIPHER_AES_128_CFB128 MBEDTLS_CIPHER_AES_128_CFB128 -#define POLARSSL_CIPHER_AES_128_CTR MBEDTLS_CIPHER_AES_128_CTR -#define POLARSSL_CIPHER_AES_128_ECB MBEDTLS_CIPHER_AES_128_ECB -#define POLARSSL_CIPHER_AES_128_GCM MBEDTLS_CIPHER_AES_128_GCM -#define POLARSSL_CIPHER_AES_192_CBC MBEDTLS_CIPHER_AES_192_CBC -#define POLARSSL_CIPHER_AES_192_CCM MBEDTLS_CIPHER_AES_192_CCM -#define POLARSSL_CIPHER_AES_192_CFB128 MBEDTLS_CIPHER_AES_192_CFB128 -#define POLARSSL_CIPHER_AES_192_CTR MBEDTLS_CIPHER_AES_192_CTR -#define POLARSSL_CIPHER_AES_192_ECB MBEDTLS_CIPHER_AES_192_ECB -#define POLARSSL_CIPHER_AES_192_GCM MBEDTLS_CIPHER_AES_192_GCM -#define POLARSSL_CIPHER_AES_256_CBC MBEDTLS_CIPHER_AES_256_CBC -#define POLARSSL_CIPHER_AES_256_CCM MBEDTLS_CIPHER_AES_256_CCM -#define POLARSSL_CIPHER_AES_256_CFB128 MBEDTLS_CIPHER_AES_256_CFB128 -#define POLARSSL_CIPHER_AES_256_CTR MBEDTLS_CIPHER_AES_256_CTR -#define POLARSSL_CIPHER_AES_256_ECB MBEDTLS_CIPHER_AES_256_ECB -#define POLARSSL_CIPHER_AES_256_GCM MBEDTLS_CIPHER_AES_256_GCM -#define POLARSSL_CIPHER_ARC4_128 MBEDTLS_CIPHER_ARC4_128 -#define POLARSSL_CIPHER_BLOWFISH_CBC MBEDTLS_CIPHER_BLOWFISH_CBC -#define POLARSSL_CIPHER_BLOWFISH_CFB64 MBEDTLS_CIPHER_BLOWFISH_CFB64 -#define POLARSSL_CIPHER_BLOWFISH_CTR MBEDTLS_CIPHER_BLOWFISH_CTR -#define POLARSSL_CIPHER_BLOWFISH_ECB MBEDTLS_CIPHER_BLOWFISH_ECB -#define POLARSSL_CIPHER_CAMELLIA_128_CBC MBEDTLS_CIPHER_CAMELLIA_128_CBC -#define POLARSSL_CIPHER_CAMELLIA_128_CCM MBEDTLS_CIPHER_CAMELLIA_128_CCM -#define POLARSSL_CIPHER_CAMELLIA_128_CFB128 MBEDTLS_CIPHER_CAMELLIA_128_CFB128 -#define POLARSSL_CIPHER_CAMELLIA_128_CTR MBEDTLS_CIPHER_CAMELLIA_128_CTR -#define POLARSSL_CIPHER_CAMELLIA_128_ECB MBEDTLS_CIPHER_CAMELLIA_128_ECB -#define POLARSSL_CIPHER_CAMELLIA_128_GCM MBEDTLS_CIPHER_CAMELLIA_128_GCM -#define POLARSSL_CIPHER_CAMELLIA_192_CBC MBEDTLS_CIPHER_CAMELLIA_192_CBC -#define POLARSSL_CIPHER_CAMELLIA_192_CCM MBEDTLS_CIPHER_CAMELLIA_192_CCM -#define POLARSSL_CIPHER_CAMELLIA_192_CFB128 MBEDTLS_CIPHER_CAMELLIA_192_CFB128 -#define POLARSSL_CIPHER_CAMELLIA_192_CTR MBEDTLS_CIPHER_CAMELLIA_192_CTR -#define POLARSSL_CIPHER_CAMELLIA_192_ECB MBEDTLS_CIPHER_CAMELLIA_192_ECB -#define POLARSSL_CIPHER_CAMELLIA_192_GCM MBEDTLS_CIPHER_CAMELLIA_192_GCM -#define POLARSSL_CIPHER_CAMELLIA_256_CBC MBEDTLS_CIPHER_CAMELLIA_256_CBC -#define POLARSSL_CIPHER_CAMELLIA_256_CCM MBEDTLS_CIPHER_CAMELLIA_256_CCM -#define POLARSSL_CIPHER_CAMELLIA_256_CFB128 MBEDTLS_CIPHER_CAMELLIA_256_CFB128 -#define POLARSSL_CIPHER_CAMELLIA_256_CTR MBEDTLS_CIPHER_CAMELLIA_256_CTR -#define POLARSSL_CIPHER_CAMELLIA_256_ECB MBEDTLS_CIPHER_CAMELLIA_256_ECB -#define POLARSSL_CIPHER_CAMELLIA_256_GCM MBEDTLS_CIPHER_CAMELLIA_256_GCM -#define POLARSSL_CIPHER_DES_CBC MBEDTLS_CIPHER_DES_CBC -#define POLARSSL_CIPHER_DES_ECB MBEDTLS_CIPHER_DES_ECB -#define POLARSSL_CIPHER_DES_EDE3_CBC MBEDTLS_CIPHER_DES_EDE3_CBC -#define POLARSSL_CIPHER_DES_EDE3_ECB MBEDTLS_CIPHER_DES_EDE3_ECB -#define POLARSSL_CIPHER_DES_EDE_CBC MBEDTLS_CIPHER_DES_EDE_CBC -#define POLARSSL_CIPHER_DES_EDE_ECB MBEDTLS_CIPHER_DES_EDE_ECB -#define POLARSSL_CIPHER_H MBEDTLS_CIPHER_H -#define POLARSSL_CIPHER_ID_3DES MBEDTLS_CIPHER_ID_3DES -#define POLARSSL_CIPHER_ID_AES MBEDTLS_CIPHER_ID_AES -#define POLARSSL_CIPHER_ID_ARC4 MBEDTLS_CIPHER_ID_ARC4 -#define POLARSSL_CIPHER_ID_BLOWFISH MBEDTLS_CIPHER_ID_BLOWFISH -#define POLARSSL_CIPHER_ID_CAMELLIA MBEDTLS_CIPHER_ID_CAMELLIA -#define POLARSSL_CIPHER_ID_DES MBEDTLS_CIPHER_ID_DES -#define POLARSSL_CIPHER_ID_NONE MBEDTLS_CIPHER_ID_NONE -#define POLARSSL_CIPHER_ID_NULL MBEDTLS_CIPHER_ID_NULL -#define POLARSSL_CIPHER_MODE_AEAD MBEDTLS_CIPHER_MODE_AEAD -#define POLARSSL_CIPHER_MODE_STREAM MBEDTLS_CIPHER_MODE_STREAM -#define POLARSSL_CIPHER_MODE_WITH_PADDING MBEDTLS_CIPHER_MODE_WITH_PADDING -#define POLARSSL_CIPHER_NONE MBEDTLS_CIPHER_NONE -#define POLARSSL_CIPHER_NULL MBEDTLS_CIPHER_NULL -#define POLARSSL_CIPHER_VARIABLE_IV_LEN MBEDTLS_CIPHER_VARIABLE_IV_LEN -#define POLARSSL_CIPHER_VARIABLE_KEY_LEN MBEDTLS_CIPHER_VARIABLE_KEY_LEN -#define POLARSSL_CIPHER_WRAP_H MBEDTLS_CIPHER_WRAP_H -#define POLARSSL_CONFIG_H MBEDTLS_CONFIG_H -#define POLARSSL_CTR_DRBG_H MBEDTLS_CTR_DRBG_H -#define POLARSSL_DEBUG_H MBEDTLS_DEBUG_H -#define POLARSSL_DECRYPT MBEDTLS_DECRYPT -#define POLARSSL_DES_H MBEDTLS_DES_H -#define POLARSSL_DHM_H MBEDTLS_DHM_H -#define POLARSSL_DHM_RFC3526_MODP_2048_G MBEDTLS_DHM_RFC3526_MODP_2048_G -#define POLARSSL_DHM_RFC3526_MODP_2048_P MBEDTLS_DHM_RFC3526_MODP_2048_P -#define POLARSSL_DHM_RFC3526_MODP_3072_G MBEDTLS_DHM_RFC3526_MODP_3072_G -#define POLARSSL_DHM_RFC3526_MODP_3072_P MBEDTLS_DHM_RFC3526_MODP_3072_P -#define POLARSSL_DHM_RFC5114_MODP_2048_G MBEDTLS_DHM_RFC5114_MODP_2048_G -#define POLARSSL_DHM_RFC5114_MODP_2048_P MBEDTLS_DHM_RFC5114_MODP_2048_P -#define POLARSSL_ECDH_H MBEDTLS_ECDH_H -#define POLARSSL_ECDH_OURS MBEDTLS_ECDH_OURS -#define POLARSSL_ECDH_THEIRS MBEDTLS_ECDH_THEIRS -#define POLARSSL_ECDSA_H MBEDTLS_ECDSA_H -#define POLARSSL_ECP_DP_BP256R1 MBEDTLS_ECP_DP_BP256R1 -#define POLARSSL_ECP_DP_BP384R1 MBEDTLS_ECP_DP_BP384R1 -#define POLARSSL_ECP_DP_BP512R1 MBEDTLS_ECP_DP_BP512R1 -#define POLARSSL_ECP_DP_M255 MBEDTLS_ECP_DP_CURVE25519 -#define POLARSSL_ECP_DP_MAX MBEDTLS_ECP_DP_MAX -#define POLARSSL_ECP_DP_NONE MBEDTLS_ECP_DP_NONE -#define POLARSSL_ECP_DP_SECP192K1 MBEDTLS_ECP_DP_SECP192K1 -#define POLARSSL_ECP_DP_SECP192R1 MBEDTLS_ECP_DP_SECP192R1 -#define POLARSSL_ECP_DP_SECP224K1 MBEDTLS_ECP_DP_SECP224K1 -#define POLARSSL_ECP_DP_SECP224R1 MBEDTLS_ECP_DP_SECP224R1 -#define POLARSSL_ECP_DP_SECP256K1 MBEDTLS_ECP_DP_SECP256K1 -#define POLARSSL_ECP_DP_SECP256R1 MBEDTLS_ECP_DP_SECP256R1 -#define POLARSSL_ECP_DP_SECP384R1 MBEDTLS_ECP_DP_SECP384R1 -#define POLARSSL_ECP_DP_SECP521R1 MBEDTLS_ECP_DP_SECP521R1 -#define POLARSSL_ECP_H MBEDTLS_ECP_H -#define POLARSSL_ECP_MAX_BYTES MBEDTLS_ECP_MAX_BYTES -#define POLARSSL_ECP_MAX_PT_LEN MBEDTLS_ECP_MAX_PT_LEN -#define POLARSSL_ECP_PF_COMPRESSED MBEDTLS_ECP_PF_COMPRESSED -#define POLARSSL_ECP_PF_UNCOMPRESSED MBEDTLS_ECP_PF_UNCOMPRESSED -#define POLARSSL_ECP_TLS_NAMED_CURVE MBEDTLS_ECP_TLS_NAMED_CURVE -#define POLARSSL_ENCRYPT MBEDTLS_ENCRYPT -#define POLARSSL_ENTROPY_H MBEDTLS_ENTROPY_H -#define POLARSSL_ENTROPY_POLL_H MBEDTLS_ENTROPY_POLL_H -#define POLARSSL_ENTROPY_SHA256_ACCUMULATOR MBEDTLS_ENTROPY_SHA256_ACCUMULATOR -#define POLARSSL_ENTROPY_SHA512_ACCUMULATOR MBEDTLS_ENTROPY_SHA512_ACCUMULATOR -#define POLARSSL_ERROR_H MBEDTLS_ERROR_H -#define POLARSSL_ERR_AES_INVALID_INPUT_LENGTH MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH -#define POLARSSL_ERR_AES_INVALID_KEY_LENGTH MBEDTLS_ERR_AES_INVALID_KEY_LENGTH -#define POLARSSL_ERR_ASN1_BUF_TOO_SMALL MBEDTLS_ERR_ASN1_BUF_TOO_SMALL -#define POLARSSL_ERR_ASN1_INVALID_DATA MBEDTLS_ERR_ASN1_INVALID_DATA -#define POLARSSL_ERR_ASN1_INVALID_LENGTH MBEDTLS_ERR_ASN1_INVALID_LENGTH -#define POLARSSL_ERR_ASN1_LENGTH_MISMATCH MBEDTLS_ERR_ASN1_LENGTH_MISMATCH -#define POLARSSL_ERR_ASN1_MALLOC_FAILED MBEDTLS_ERR_ASN1_ALLOC_FAILED -#define POLARSSL_ERR_ASN1_OUT_OF_DATA MBEDTLS_ERR_ASN1_OUT_OF_DATA -#define POLARSSL_ERR_ASN1_UNEXPECTED_TAG MBEDTLS_ERR_ASN1_UNEXPECTED_TAG -#define POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL -#define POLARSSL_ERR_BASE64_INVALID_CHARACTER MBEDTLS_ERR_BASE64_INVALID_CHARACTER -#define POLARSSL_ERR_BLOWFISH_INVALID_INPUT_LENGTH MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH -#define POLARSSL_ERR_BLOWFISH_INVALID_KEY_LENGTH MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH -#define POLARSSL_ERR_CAMELLIA_INVALID_INPUT_LENGTH MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH -#define POLARSSL_ERR_CAMELLIA_INVALID_KEY_LENGTH MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH -#define POLARSSL_ERR_CCM_AUTH_FAILED MBEDTLS_ERR_CCM_AUTH_FAILED -#define POLARSSL_ERR_CCM_BAD_INPUT MBEDTLS_ERR_CCM_BAD_INPUT -#define POLARSSL_ERR_CIPHER_ALLOC_FAILED MBEDTLS_ERR_CIPHER_ALLOC_FAILED -#define POLARSSL_ERR_CIPHER_AUTH_FAILED MBEDTLS_ERR_CIPHER_AUTH_FAILED -#define POLARSSL_ERR_CIPHER_BAD_INPUT_DATA MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA -#define POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE -#define POLARSSL_ERR_CIPHER_FULL_BLOCK_EXPECTED MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED -#define POLARSSL_ERR_CIPHER_INVALID_PADDING MBEDTLS_ERR_CIPHER_INVALID_PADDING -#define POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED -#define POLARSSL_ERR_CTR_DRBG_FILE_IO_ERROR MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR -#define POLARSSL_ERR_CTR_DRBG_INPUT_TOO_BIG MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG -#define POLARSSL_ERR_CTR_DRBG_REQUEST_TOO_BIG MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG -#define POLARSSL_ERR_DES_INVALID_INPUT_LENGTH MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH -#define POLARSSL_ERR_DHM_BAD_INPUT_DATA MBEDTLS_ERR_DHM_BAD_INPUT_DATA -#define POLARSSL_ERR_DHM_CALC_SECRET_FAILED MBEDTLS_ERR_DHM_CALC_SECRET_FAILED -#define POLARSSL_ERR_DHM_FILE_IO_ERROR MBEDTLS_ERR_DHM_FILE_IO_ERROR -#define POLARSSL_ERR_DHM_INVALID_FORMAT MBEDTLS_ERR_DHM_INVALID_FORMAT -#define POLARSSL_ERR_DHM_MAKE_PARAMS_FAILED MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED -#define POLARSSL_ERR_DHM_MAKE_PUBLIC_FAILED MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED -#define POLARSSL_ERR_DHM_MALLOC_FAILED MBEDTLS_ERR_DHM_ALLOC_FAILED -#define POLARSSL_ERR_DHM_READ_PARAMS_FAILED MBEDTLS_ERR_DHM_READ_PARAMS_FAILED -#define POLARSSL_ERR_DHM_READ_PUBLIC_FAILED MBEDTLS_ERR_DHM_READ_PUBLIC_FAILED -#define POLARSSL_ERR_ECP_BAD_INPUT_DATA MBEDTLS_ERR_ECP_BAD_INPUT_DATA -#define POLARSSL_ERR_ECP_BUFFER_TOO_SMALL MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL -#define POLARSSL_ERR_ECP_FEATURE_UNAVAILABLE MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE -#define POLARSSL_ERR_ECP_INVALID_KEY MBEDTLS_ERR_ECP_INVALID_KEY -#define POLARSSL_ERR_ECP_MALLOC_FAILED MBEDTLS_ERR_ECP_ALLOC_FAILED -#define POLARSSL_ERR_ECP_RANDOM_FAILED MBEDTLS_ERR_ECP_RANDOM_FAILED -#define POLARSSL_ERR_ECP_SIG_LEN_MISMATCH MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH -#define POLARSSL_ERR_ECP_VERIFY_FAILED MBEDTLS_ERR_ECP_VERIFY_FAILED -#define POLARSSL_ERR_ENTROPY_FILE_IO_ERROR MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR -#define POLARSSL_ERR_ENTROPY_MAX_SOURCES MBEDTLS_ERR_ENTROPY_MAX_SOURCES -#define POLARSSL_ERR_ENTROPY_NO_SOURCES_DEFINED MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED -#define POLARSSL_ERR_ENTROPY_SOURCE_FAILED MBEDTLS_ERR_ENTROPY_SOURCE_FAILED -#define POLARSSL_ERR_GCM_AUTH_FAILED MBEDTLS_ERR_GCM_AUTH_FAILED -#define POLARSSL_ERR_GCM_BAD_INPUT MBEDTLS_ERR_GCM_BAD_INPUT -#define POLARSSL_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED -#define POLARSSL_ERR_HMAC_DRBG_FILE_IO_ERROR MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR -#define POLARSSL_ERR_HMAC_DRBG_INPUT_TOO_BIG MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG -#define POLARSSL_ERR_HMAC_DRBG_REQUEST_TOO_BIG MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG -#define POLARSSL_ERR_MD_ALLOC_FAILED MBEDTLS_ERR_MD_ALLOC_FAILED -#define POLARSSL_ERR_MD_BAD_INPUT_DATA MBEDTLS_ERR_MD_BAD_INPUT_DATA -#define POLARSSL_ERR_MD_FEATURE_UNAVAILABLE MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE -#define POLARSSL_ERR_MD_FILE_IO_ERROR MBEDTLS_ERR_MD_FILE_IO_ERROR -#define POLARSSL_ERR_MPI_BAD_INPUT_DATA MBEDTLS_ERR_MPI_BAD_INPUT_DATA -#define POLARSSL_ERR_MPI_BUFFER_TOO_SMALL MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL -#define POLARSSL_ERR_MPI_DIVISION_BY_ZERO MBEDTLS_ERR_MPI_DIVISION_BY_ZERO -#define POLARSSL_ERR_MPI_FILE_IO_ERROR MBEDTLS_ERR_MPI_FILE_IO_ERROR -#define POLARSSL_ERR_MPI_INVALID_CHARACTER MBEDTLS_ERR_MPI_INVALID_CHARACTER -#define POLARSSL_ERR_MPI_MALLOC_FAILED MBEDTLS_ERR_MPI_ALLOC_FAILED -#define POLARSSL_ERR_MPI_NEGATIVE_VALUE MBEDTLS_ERR_MPI_NEGATIVE_VALUE -#define POLARSSL_ERR_MPI_NOT_ACCEPTABLE MBEDTLS_ERR_MPI_NOT_ACCEPTABLE -#define POLARSSL_ERR_NET_ACCEPT_FAILED MBEDTLS_ERR_NET_ACCEPT_FAILED -#define POLARSSL_ERR_NET_BIND_FAILED MBEDTLS_ERR_NET_BIND_FAILED -#define POLARSSL_ERR_NET_CONNECT_FAILED MBEDTLS_ERR_NET_CONNECT_FAILED -#define POLARSSL_ERR_NET_CONN_RESET MBEDTLS_ERR_NET_CONN_RESET -#define POLARSSL_ERR_NET_LISTEN_FAILED MBEDTLS_ERR_NET_LISTEN_FAILED -#define POLARSSL_ERR_NET_RECV_FAILED MBEDTLS_ERR_NET_RECV_FAILED -#define POLARSSL_ERR_NET_SEND_FAILED MBEDTLS_ERR_NET_SEND_FAILED -#define POLARSSL_ERR_NET_SOCKET_FAILED MBEDTLS_ERR_NET_SOCKET_FAILED -#define POLARSSL_ERR_NET_TIMEOUT MBEDTLS_ERR_SSL_TIMEOUT -#define POLARSSL_ERR_NET_UNKNOWN_HOST MBEDTLS_ERR_NET_UNKNOWN_HOST -#define POLARSSL_ERR_NET_WANT_READ MBEDTLS_ERR_SSL_WANT_READ -#define POLARSSL_ERR_NET_WANT_WRITE MBEDTLS_ERR_SSL_WANT_WRITE -#define POLARSSL_ERR_OID_BUF_TOO_SMALL MBEDTLS_ERR_OID_BUF_TOO_SMALL -#define POLARSSL_ERR_OID_NOT_FOUND MBEDTLS_ERR_OID_NOT_FOUND -#define POLARSSL_ERR_PADLOCK_DATA_MISALIGNED MBEDTLS_ERR_PADLOCK_DATA_MISALIGNED -#define POLARSSL_ERR_PEM_BAD_INPUT_DATA MBEDTLS_ERR_PEM_BAD_INPUT_DATA -#define POLARSSL_ERR_PEM_FEATURE_UNAVAILABLE MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE -#define POLARSSL_ERR_PEM_INVALID_DATA MBEDTLS_ERR_PEM_INVALID_DATA -#define POLARSSL_ERR_PEM_INVALID_ENC_IV MBEDTLS_ERR_PEM_INVALID_ENC_IV -#define POLARSSL_ERR_PEM_MALLOC_FAILED MBEDTLS_ERR_PEM_ALLOC_FAILED -#define POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT -#define POLARSSL_ERR_PEM_PASSWORD_MISMATCH MBEDTLS_ERR_PEM_PASSWORD_MISMATCH -#define POLARSSL_ERR_PEM_PASSWORD_REQUIRED MBEDTLS_ERR_PEM_PASSWORD_REQUIRED -#define POLARSSL_ERR_PEM_UNKNOWN_ENC_ALG MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG -#define POLARSSL_ERR_PKCS12_BAD_INPUT_DATA MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA -#define POLARSSL_ERR_PKCS12_FEATURE_UNAVAILABLE MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE -#define POLARSSL_ERR_PKCS12_PASSWORD_MISMATCH MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH -#define POLARSSL_ERR_PKCS12_PBE_INVALID_FORMAT MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT -#define POLARSSL_ERR_PKCS5_BAD_INPUT_DATA MBEDTLS_ERR_PKCS5_BAD_INPUT_DATA -#define POLARSSL_ERR_PKCS5_FEATURE_UNAVAILABLE MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE -#define POLARSSL_ERR_PKCS5_INVALID_FORMAT MBEDTLS_ERR_PKCS5_INVALID_FORMAT -#define POLARSSL_ERR_PKCS5_PASSWORD_MISMATCH MBEDTLS_ERR_PKCS5_PASSWORD_MISMATCH -#define POLARSSL_ERR_PK_BAD_INPUT_DATA MBEDTLS_ERR_PK_BAD_INPUT_DATA -#define POLARSSL_ERR_PK_FEATURE_UNAVAILABLE MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE -#define POLARSSL_ERR_PK_FILE_IO_ERROR MBEDTLS_ERR_PK_FILE_IO_ERROR -#define POLARSSL_ERR_PK_INVALID_ALG MBEDTLS_ERR_PK_INVALID_ALG -#define POLARSSL_ERR_PK_INVALID_PUBKEY MBEDTLS_ERR_PK_INVALID_PUBKEY -#define POLARSSL_ERR_PK_KEY_INVALID_FORMAT MBEDTLS_ERR_PK_KEY_INVALID_FORMAT -#define POLARSSL_ERR_PK_KEY_INVALID_VERSION MBEDTLS_ERR_PK_KEY_INVALID_VERSION -#define POLARSSL_ERR_PK_MALLOC_FAILED MBEDTLS_ERR_PK_ALLOC_FAILED -#define POLARSSL_ERR_PK_PASSWORD_MISMATCH MBEDTLS_ERR_PK_PASSWORD_MISMATCH -#define POLARSSL_ERR_PK_PASSWORD_REQUIRED MBEDTLS_ERR_PK_PASSWORD_REQUIRED -#define POLARSSL_ERR_PK_SIG_LEN_MISMATCH MBEDTLS_ERR_PK_SIG_LEN_MISMATCH -#define POLARSSL_ERR_PK_TYPE_MISMATCH MBEDTLS_ERR_PK_TYPE_MISMATCH -#define POLARSSL_ERR_PK_UNKNOWN_NAMED_CURVE MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE -#define POLARSSL_ERR_PK_UNKNOWN_PK_ALG MBEDTLS_ERR_PK_UNKNOWN_PK_ALG -#define POLARSSL_ERR_RSA_BAD_INPUT_DATA MBEDTLS_ERR_RSA_BAD_INPUT_DATA -#define POLARSSL_ERR_RSA_INVALID_PADDING MBEDTLS_ERR_RSA_INVALID_PADDING -#define POLARSSL_ERR_RSA_KEY_CHECK_FAILED MBEDTLS_ERR_RSA_KEY_CHECK_FAILED -#define POLARSSL_ERR_RSA_KEY_GEN_FAILED MBEDTLS_ERR_RSA_KEY_GEN_FAILED -#define POLARSSL_ERR_RSA_OUTPUT_TOO_LARGE MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE -#define POLARSSL_ERR_RSA_PRIVATE_FAILED MBEDTLS_ERR_RSA_PRIVATE_FAILED -#define POLARSSL_ERR_RSA_PUBLIC_FAILED MBEDTLS_ERR_RSA_PUBLIC_FAILED -#define POLARSSL_ERR_RSA_RNG_FAILED MBEDTLS_ERR_RSA_RNG_FAILED -#define POLARSSL_ERR_RSA_VERIFY_FAILED MBEDTLS_ERR_RSA_VERIFY_FAILED -#define POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE -#define POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST -#define POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY -#define POLARSSL_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC MBEDTLS_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC -#define POLARSSL_ERR_SSL_BAD_HS_CLIENT_HELLO MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO -#define POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE -#define POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS -#define POLARSSL_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP -#define POLARSSL_ERR_SSL_BAD_HS_FINISHED MBEDTLS_ERR_SSL_BAD_HS_FINISHED -#define POLARSSL_ERR_SSL_BAD_HS_NEW_SESSION_TICKET MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET -#define POLARSSL_ERR_SSL_BAD_HS_PROTOCOL_VERSION MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION -#define POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO -#define POLARSSL_ERR_SSL_BAD_HS_SERVER_HELLO_DONE MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE -#define POLARSSL_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE -#define POLARSSL_ERR_SSL_BAD_INPUT_DATA MBEDTLS_ERR_SSL_BAD_INPUT_DATA -#define POLARSSL_ERR_SSL_BUFFER_TOO_SMALL MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL -#define POLARSSL_ERR_SSL_CA_CHAIN_REQUIRED MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED -#define POLARSSL_ERR_SSL_CERTIFICATE_REQUIRED MBEDTLS_ERR_SSL_CERTIFICATE_REQUIRED -#define POLARSSL_ERR_SSL_CERTIFICATE_TOO_LARGE MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE -#define POLARSSL_ERR_SSL_COMPRESSION_FAILED MBEDTLS_ERR_SSL_COMPRESSION_FAILED -#define POLARSSL_ERR_SSL_CONN_EOF MBEDTLS_ERR_SSL_CONN_EOF -#define POLARSSL_ERR_SSL_COUNTER_WRAPPING MBEDTLS_ERR_SSL_COUNTER_WRAPPING -#define POLARSSL_ERR_SSL_FATAL_ALERT_MESSAGE MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE -#define POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE -#define POLARSSL_ERR_SSL_HELLO_VERIFY_REQUIRED MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED -#define POLARSSL_ERR_SSL_HW_ACCEL_FAILED MBEDTLS_ERR_SSL_HW_ACCEL_FAILED -#define POLARSSL_ERR_SSL_HW_ACCEL_FALLTHROUGH MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH -#define POLARSSL_ERR_SSL_INTERNAL_ERROR MBEDTLS_ERR_SSL_INTERNAL_ERROR -#define POLARSSL_ERR_SSL_INVALID_MAC MBEDTLS_ERR_SSL_INVALID_MAC -#define POLARSSL_ERR_SSL_INVALID_RECORD MBEDTLS_ERR_SSL_INVALID_RECORD -#define POLARSSL_ERR_SSL_MALLOC_FAILED MBEDTLS_ERR_SSL_ALLOC_FAILED -#define POLARSSL_ERR_SSL_NO_CIPHER_CHOSEN MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN -#define POLARSSL_ERR_SSL_NO_CLIENT_CERTIFICATE MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE -#define POLARSSL_ERR_SSL_NO_RNG MBEDTLS_ERR_SSL_NO_RNG -#define POLARSSL_ERR_SSL_NO_USABLE_CIPHERSUITE MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE -#define POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY -#define POLARSSL_ERR_SSL_PEER_VERIFY_FAILED MBEDTLS_ERR_SSL_PEER_VERIFY_FAILED -#define POLARSSL_ERR_SSL_PK_TYPE_MISMATCH MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH -#define POLARSSL_ERR_SSL_PRIVATE_KEY_REQUIRED MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED -#define POLARSSL_ERR_SSL_SESSION_TICKET_EXPIRED MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED -#define POLARSSL_ERR_SSL_UNEXPECTED_MESSAGE MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE -#define POLARSSL_ERR_SSL_UNKNOWN_CIPHER MBEDTLS_ERR_SSL_UNKNOWN_CIPHER -#define POLARSSL_ERR_SSL_UNKNOWN_IDENTITY MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY -#define POLARSSL_ERR_SSL_WAITING_SERVER_HELLO_RENEGO MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO -#define POLARSSL_ERR_THREADING_BAD_INPUT_DATA MBEDTLS_ERR_THREADING_BAD_INPUT_DATA -#define POLARSSL_ERR_THREADING_FEATURE_UNAVAILABLE MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE -#define POLARSSL_ERR_THREADING_MUTEX_ERROR MBEDTLS_ERR_THREADING_MUTEX_ERROR -#define POLARSSL_ERR_X509_BAD_INPUT_DATA MBEDTLS_ERR_X509_BAD_INPUT_DATA -#define POLARSSL_ERR_X509_CERT_UNKNOWN_FORMAT MBEDTLS_ERR_X509_CERT_UNKNOWN_FORMAT -#define POLARSSL_ERR_X509_CERT_VERIFY_FAILED MBEDTLS_ERR_X509_CERT_VERIFY_FAILED -#define POLARSSL_ERR_X509_FEATURE_UNAVAILABLE MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE -#define POLARSSL_ERR_X509_FILE_IO_ERROR MBEDTLS_ERR_X509_FILE_IO_ERROR -#define POLARSSL_ERR_X509_INVALID_ALG MBEDTLS_ERR_X509_INVALID_ALG -#define POLARSSL_ERR_X509_INVALID_DATE MBEDTLS_ERR_X509_INVALID_DATE -#define POLARSSL_ERR_X509_INVALID_EXTENSIONS MBEDTLS_ERR_X509_INVALID_EXTENSIONS -#define POLARSSL_ERR_X509_INVALID_FORMAT MBEDTLS_ERR_X509_INVALID_FORMAT -#define POLARSSL_ERR_X509_INVALID_NAME MBEDTLS_ERR_X509_INVALID_NAME -#define POLARSSL_ERR_X509_INVALID_SERIAL MBEDTLS_ERR_X509_INVALID_SERIAL -#define POLARSSL_ERR_X509_INVALID_SIGNATURE MBEDTLS_ERR_X509_INVALID_SIGNATURE -#define POLARSSL_ERR_X509_INVALID_VERSION MBEDTLS_ERR_X509_INVALID_VERSION -#define POLARSSL_ERR_X509_MALLOC_FAILED MBEDTLS_ERR_X509_ALLOC_FAILED -#define POLARSSL_ERR_X509_SIG_MISMATCH MBEDTLS_ERR_X509_SIG_MISMATCH -#define POLARSSL_ERR_X509_UNKNOWN_OID MBEDTLS_ERR_X509_UNKNOWN_OID -#define POLARSSL_ERR_X509_UNKNOWN_SIG_ALG MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG -#define POLARSSL_ERR_X509_UNKNOWN_VERSION MBEDTLS_ERR_X509_UNKNOWN_VERSION -#define POLARSSL_ERR_XTEA_INVALID_INPUT_LENGTH MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH -#define POLARSSL_GCM_H MBEDTLS_GCM_H -#define POLARSSL_HAVEGE_H MBEDTLS_HAVEGE_H -#define POLARSSL_HAVE_INT32 MBEDTLS_HAVE_INT32 -#define POLARSSL_HAVE_INT64 MBEDTLS_HAVE_INT64 -#define POLARSSL_HAVE_UDBL MBEDTLS_HAVE_UDBL -#define POLARSSL_HAVE_X86 MBEDTLS_HAVE_X86 -#define POLARSSL_HAVE_X86_64 MBEDTLS_HAVE_X86_64 -#define POLARSSL_HMAC_DRBG_H MBEDTLS_HMAC_DRBG_H -#define POLARSSL_HMAC_DRBG_PR_OFF MBEDTLS_HMAC_DRBG_PR_OFF -#define POLARSSL_HMAC_DRBG_PR_ON MBEDTLS_HMAC_DRBG_PR_ON -#define POLARSSL_KEY_EXCHANGE_DHE_PSK MBEDTLS_KEY_EXCHANGE_DHE_PSK -#define POLARSSL_KEY_EXCHANGE_DHE_RSA MBEDTLS_KEY_EXCHANGE_DHE_RSA -#define POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA -#define POLARSSL_KEY_EXCHANGE_ECDHE_PSK MBEDTLS_KEY_EXCHANGE_ECDHE_PSK -#define POLARSSL_KEY_EXCHANGE_ECDHE_RSA MBEDTLS_KEY_EXCHANGE_ECDHE_RSA -#define POLARSSL_KEY_EXCHANGE_ECDH_ECDSA MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA -#define POLARSSL_KEY_EXCHANGE_ECDH_RSA MBEDTLS_KEY_EXCHANGE_ECDH_RSA -#define POLARSSL_KEY_EXCHANGE_NONE MBEDTLS_KEY_EXCHANGE_NONE -#define POLARSSL_KEY_EXCHANGE_PSK MBEDTLS_KEY_EXCHANGE_PSK -#define POLARSSL_KEY_EXCHANGE_RSA MBEDTLS_KEY_EXCHANGE_RSA -#define POLARSSL_KEY_EXCHANGE_RSA_PSK MBEDTLS_KEY_EXCHANGE_RSA_PSK -#define POLARSSL_KEY_EXCHANGE__SOME__ECDHE_ENABLED MBEDTLS_KEY_EXCHANGE_SOME_ECDHE_ENABLED -#define POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED -#define POLARSSL_KEY_EXCHANGE__WITH_CERT__ENABLED MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED -#define POLARSSL_KEY_LENGTH_DES MBEDTLS_KEY_LENGTH_DES -#define POLARSSL_KEY_LENGTH_DES_EDE MBEDTLS_KEY_LENGTH_DES_EDE -#define POLARSSL_KEY_LENGTH_DES_EDE3 MBEDTLS_KEY_LENGTH_DES_EDE3 -#define POLARSSL_KEY_LENGTH_NONE MBEDTLS_KEY_LENGTH_NONE -#define POLARSSL_MAX_BLOCK_LENGTH MBEDTLS_MAX_BLOCK_LENGTH -#define POLARSSL_MAX_IV_LENGTH MBEDTLS_MAX_IV_LENGTH -#define POLARSSL_MD2_H MBEDTLS_MD2_H -#define POLARSSL_MD4_H MBEDTLS_MD4_H -#define POLARSSL_MD5_H MBEDTLS_MD5_H -#define POLARSSL_MD_H MBEDTLS_MD_H -#define POLARSSL_MD_MAX_SIZE MBEDTLS_MD_MAX_SIZE -#define POLARSSL_MD_MD2 MBEDTLS_MD_MD2 -#define POLARSSL_MD_MD4 MBEDTLS_MD_MD4 -#define POLARSSL_MD_MD5 MBEDTLS_MD_MD5 -#define POLARSSL_MD_NONE MBEDTLS_MD_NONE -#define POLARSSL_MD_RIPEMD160 MBEDTLS_MD_RIPEMD160 -#define POLARSSL_MD_SHA1 MBEDTLS_MD_SHA1 -#define POLARSSL_MD_SHA224 MBEDTLS_MD_SHA224 -#define POLARSSL_MD_SHA256 MBEDTLS_MD_SHA256 -#define POLARSSL_MD_SHA384 MBEDTLS_MD_SHA384 -#define POLARSSL_MD_SHA512 MBEDTLS_MD_SHA512 -#define POLARSSL_MD_WRAP_H MBEDTLS_MD_WRAP_H -#define POLARSSL_MEMORY_BUFFER_ALLOC_H MBEDTLS_MEMORY_BUFFER_ALLOC_H -#define POLARSSL_MODE_CBC MBEDTLS_MODE_CBC -#define POLARSSL_MODE_CCM MBEDTLS_MODE_CCM -#define POLARSSL_MODE_CFB MBEDTLS_MODE_CFB -#define POLARSSL_MODE_CTR MBEDTLS_MODE_CTR -#define POLARSSL_MODE_ECB MBEDTLS_MODE_ECB -#define POLARSSL_MODE_GCM MBEDTLS_MODE_GCM -#define POLARSSL_MODE_NONE MBEDTLS_MODE_NONE -#define POLARSSL_MODE_OFB MBEDTLS_MODE_OFB -#define POLARSSL_MODE_STREAM MBEDTLS_MODE_STREAM -#define POLARSSL_MPI_MAX_BITS MBEDTLS_MPI_MAX_BITS -#define POLARSSL_MPI_MAX_BITS_SCALE100 MBEDTLS_MPI_MAX_BITS_SCALE100 -#define POLARSSL_MPI_MAX_LIMBS MBEDTLS_MPI_MAX_LIMBS -#define POLARSSL_MPI_RW_BUFFER_SIZE MBEDTLS_MPI_RW_BUFFER_SIZE -#define POLARSSL_NET_H MBEDTLS_NET_SOCKETS_H -#define POLARSSL_NET_LISTEN_BACKLOG MBEDTLS_NET_LISTEN_BACKLOG -#define POLARSSL_OID_H MBEDTLS_OID_H -#define POLARSSL_OPERATION_NONE MBEDTLS_OPERATION_NONE -#define POLARSSL_PADDING_NONE MBEDTLS_PADDING_NONE -#define POLARSSL_PADDING_ONE_AND_ZEROS MBEDTLS_PADDING_ONE_AND_ZEROS -#define POLARSSL_PADDING_PKCS7 MBEDTLS_PADDING_PKCS7 -#define POLARSSL_PADDING_ZEROS MBEDTLS_PADDING_ZEROS -#define POLARSSL_PADDING_ZEROS_AND_LEN MBEDTLS_PADDING_ZEROS_AND_LEN -#define POLARSSL_PADLOCK_H MBEDTLS_PADLOCK_H -#define POLARSSL_PEM_H MBEDTLS_PEM_H -#define POLARSSL_PKCS11_H MBEDTLS_PKCS11_H -#define POLARSSL_PKCS12_H MBEDTLS_PKCS12_H -#define POLARSSL_PKCS5_H MBEDTLS_PKCS5_H -#define POLARSSL_PK_DEBUG_ECP MBEDTLS_PK_DEBUG_ECP -#define POLARSSL_PK_DEBUG_MAX_ITEMS MBEDTLS_PK_DEBUG_MAX_ITEMS -#define POLARSSL_PK_DEBUG_MPI MBEDTLS_PK_DEBUG_MPI -#define POLARSSL_PK_DEBUG_NONE MBEDTLS_PK_DEBUG_NONE -#define POLARSSL_PK_ECDSA MBEDTLS_PK_ECDSA -#define POLARSSL_PK_ECKEY MBEDTLS_PK_ECKEY -#define POLARSSL_PK_ECKEY_DH MBEDTLS_PK_ECKEY_DH -#define POLARSSL_PK_H MBEDTLS_PK_H -#define POLARSSL_PK_NONE MBEDTLS_PK_NONE -#define POLARSSL_PK_RSA MBEDTLS_PK_RSA -#define POLARSSL_PK_RSASSA_PSS MBEDTLS_PK_RSASSA_PSS -#define POLARSSL_PK_RSA_ALT MBEDTLS_PK_RSA_ALT -#define POLARSSL_PK_WRAP_H MBEDTLS_PK_WRAP_H -#define POLARSSL_PLATFORM_H MBEDTLS_PLATFORM_H -#define POLARSSL_PREMASTER_SIZE MBEDTLS_PREMASTER_SIZE -#define POLARSSL_RIPEMD160_H MBEDTLS_RIPEMD160_H -#define POLARSSL_RSA_H MBEDTLS_RSA_H -#define POLARSSL_SHA1_H MBEDTLS_SHA1_H -#define POLARSSL_SHA256_H MBEDTLS_SHA256_H -#define POLARSSL_SHA512_H MBEDTLS_SHA512_H -#define POLARSSL_SSL_CACHE_H MBEDTLS_SSL_CACHE_H -#define POLARSSL_SSL_CIPHERSUITES_H MBEDTLS_SSL_CIPHERSUITES_H -#define POLARSSL_SSL_COOKIE_H MBEDTLS_SSL_COOKIE_H -#define POLARSSL_SSL_H MBEDTLS_SSL_H -#define POLARSSL_THREADING_H MBEDTLS_THREADING_H -#define POLARSSL_THREADING_IMPL MBEDTLS_THREADING_IMPL -#define POLARSSL_TIMING_H MBEDTLS_TIMING_H -#define POLARSSL_VERSION_H MBEDTLS_VERSION_H -#define POLARSSL_VERSION_MAJOR MBEDTLS_VERSION_MAJOR -#define POLARSSL_VERSION_MINOR MBEDTLS_VERSION_MINOR -#define POLARSSL_VERSION_NUMBER MBEDTLS_VERSION_NUMBER -#define POLARSSL_VERSION_PATCH MBEDTLS_VERSION_PATCH -#define POLARSSL_VERSION_STRING MBEDTLS_VERSION_STRING -#define POLARSSL_VERSION_STRING_FULL MBEDTLS_VERSION_STRING_FULL -#define POLARSSL_X509_CRL_H MBEDTLS_X509_CRL_H -#define POLARSSL_X509_CRT_H MBEDTLS_X509_CRT_H -#define POLARSSL_X509_CSR_H MBEDTLS_X509_CSR_H -#define POLARSSL_X509_H MBEDTLS_X509_H -#define POLARSSL_XTEA_H MBEDTLS_XTEA_H -#define RSA_CRYPT MBEDTLS_RSA_CRYPT -#define RSA_PKCS_V15 MBEDTLS_RSA_PKCS_V15 -#define RSA_PKCS_V21 MBEDTLS_RSA_PKCS_V21 -#define RSA_PRIVATE MBEDTLS_RSA_PRIVATE -#define RSA_PUBLIC MBEDTLS_RSA_PUBLIC -#define RSA_SALT_LEN_ANY MBEDTLS_RSA_SALT_LEN_ANY -#define RSA_SIGN MBEDTLS_RSA_SIGN -#define SSL_ALERT_LEVEL_FATAL MBEDTLS_SSL_ALERT_LEVEL_FATAL -#define SSL_ALERT_LEVEL_WARNING MBEDTLS_SSL_ALERT_LEVEL_WARNING -#define SSL_ALERT_MSG_ACCESS_DENIED MBEDTLS_SSL_ALERT_MSG_ACCESS_DENIED -#define SSL_ALERT_MSG_BAD_CERT MBEDTLS_SSL_ALERT_MSG_BAD_CERT -#define SSL_ALERT_MSG_BAD_RECORD_MAC MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC -#define SSL_ALERT_MSG_CERT_EXPIRED MBEDTLS_SSL_ALERT_MSG_CERT_EXPIRED -#define SSL_ALERT_MSG_CERT_REVOKED MBEDTLS_SSL_ALERT_MSG_CERT_REVOKED -#define SSL_ALERT_MSG_CERT_UNKNOWN MBEDTLS_SSL_ALERT_MSG_CERT_UNKNOWN -#define SSL_ALERT_MSG_CLOSE_NOTIFY MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY -#define SSL_ALERT_MSG_DECODE_ERROR MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR -#define SSL_ALERT_MSG_DECOMPRESSION_FAILURE MBEDTLS_SSL_ALERT_MSG_DECOMPRESSION_FAILURE -#define SSL_ALERT_MSG_DECRYPTION_FAILED MBEDTLS_SSL_ALERT_MSG_DECRYPTION_FAILED -#define SSL_ALERT_MSG_DECRYPT_ERROR MBEDTLS_SSL_ALERT_MSG_DECRYPT_ERROR -#define SSL_ALERT_MSG_EXPORT_RESTRICTION MBEDTLS_SSL_ALERT_MSG_EXPORT_RESTRICTION -#define SSL_ALERT_MSG_HANDSHAKE_FAILURE MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE -#define SSL_ALERT_MSG_ILLEGAL_PARAMETER MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER -#define SSL_ALERT_MSG_INAPROPRIATE_FALLBACK MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK -#define SSL_ALERT_MSG_INSUFFICIENT_SECURITY MBEDTLS_SSL_ALERT_MSG_INSUFFICIENT_SECURITY -#define SSL_ALERT_MSG_INTERNAL_ERROR MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR -#define SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL MBEDTLS_SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL -#define SSL_ALERT_MSG_NO_CERT MBEDTLS_SSL_ALERT_MSG_NO_CERT -#define SSL_ALERT_MSG_NO_RENEGOTIATION MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION -#define SSL_ALERT_MSG_PROTOCOL_VERSION MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION -#define SSL_ALERT_MSG_RECORD_OVERFLOW MBEDTLS_SSL_ALERT_MSG_RECORD_OVERFLOW -#define SSL_ALERT_MSG_UNEXPECTED_MESSAGE MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE -#define SSL_ALERT_MSG_UNKNOWN_CA MBEDTLS_SSL_ALERT_MSG_UNKNOWN_CA -#define SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY -#define SSL_ALERT_MSG_UNRECOGNIZED_NAME MBEDTLS_SSL_ALERT_MSG_UNRECOGNIZED_NAME -#define SSL_ALERT_MSG_UNSUPPORTED_CERT MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_CERT -#define SSL_ALERT_MSG_UNSUPPORTED_EXT MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_EXT -#define SSL_ALERT_MSG_USER_CANCELED MBEDTLS_SSL_ALERT_MSG_USER_CANCELED -#define SSL_ANTI_REPLAY_DISABLED MBEDTLS_SSL_ANTI_REPLAY_DISABLED -#define SSL_ANTI_REPLAY_ENABLED MBEDTLS_SSL_ANTI_REPLAY_ENABLED -#define SSL_ARC4_DISABLED MBEDTLS_SSL_ARC4_DISABLED -#define SSL_ARC4_ENABLED MBEDTLS_SSL_ARC4_ENABLED -#define SSL_BUFFER_LEN ( ( ( MBEDTLS_SSL_IN_BUFFER_LEN ) < ( MBEDTLS_SSL_OUT_BUFFER_LEN ) ) \ - ? ( MBEDTLS_SSL_IN_BUFFER_LEN ) : ( MBEDTLS_SSL_OUT_BUFFER_LEN ) ) -#define SSL_CACHE_DEFAULT_MAX_ENTRIES MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES -#define SSL_CACHE_DEFAULT_TIMEOUT MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT -#define SSL_CBC_RECORD_SPLITTING_DISABLED MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED -#define SSL_CBC_RECORD_SPLITTING_ENABLED MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED -#define SSL_CERTIFICATE_REQUEST MBEDTLS_SSL_CERTIFICATE_REQUEST -#define SSL_CERTIFICATE_VERIFY MBEDTLS_SSL_CERTIFICATE_VERIFY -#define SSL_CERT_TYPE_ECDSA_SIGN MBEDTLS_SSL_CERT_TYPE_ECDSA_SIGN -#define SSL_CERT_TYPE_RSA_SIGN MBEDTLS_SSL_CERT_TYPE_RSA_SIGN -#define SSL_CHANNEL_INBOUND MBEDTLS_SSL_CHANNEL_INBOUND -#define SSL_CHANNEL_OUTBOUND MBEDTLS_SSL_CHANNEL_OUTBOUND -#define SSL_CIPHERSUITES MBEDTLS_SSL_CIPHERSUITES -#define SSL_CLIENT_CERTIFICATE MBEDTLS_SSL_CLIENT_CERTIFICATE -#define SSL_CLIENT_CHANGE_CIPHER_SPEC MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC -#define SSL_CLIENT_FINISHED MBEDTLS_SSL_CLIENT_FINISHED -#define SSL_CLIENT_HELLO MBEDTLS_SSL_CLIENT_HELLO -#define SSL_CLIENT_KEY_EXCHANGE MBEDTLS_SSL_CLIENT_KEY_EXCHANGE -#define SSL_COMPRESSION_ADD MBEDTLS_SSL_COMPRESSION_ADD -#define SSL_COMPRESS_DEFLATE MBEDTLS_SSL_COMPRESS_DEFLATE -#define SSL_COMPRESS_NULL MBEDTLS_SSL_COMPRESS_NULL -#define SSL_DEBUG_BUF MBEDTLS_SSL_DEBUG_BUF -#define SSL_DEBUG_CRT MBEDTLS_SSL_DEBUG_CRT -#define SSL_DEBUG_ECP MBEDTLS_SSL_DEBUG_ECP -#define SSL_DEBUG_MPI MBEDTLS_SSL_DEBUG_MPI -#define SSL_DEBUG_MSG MBEDTLS_SSL_DEBUG_MSG -#define SSL_DEBUG_RET MBEDTLS_SSL_DEBUG_RET -#define SSL_DEFAULT_TICKET_LIFETIME MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME -#define SSL_DTLS_TIMEOUT_DFL_MAX MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MAX -#define SSL_DTLS_TIMEOUT_DFL_MIN MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN -#define SSL_EMPTY_RENEGOTIATION_INFO MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO -#define SSL_ETM_DISABLED MBEDTLS_SSL_ETM_DISABLED -#define SSL_ETM_ENABLED MBEDTLS_SSL_ETM_ENABLED -#define SSL_EXTENDED_MS_DISABLED MBEDTLS_SSL_EXTENDED_MS_DISABLED -#define SSL_EXTENDED_MS_ENABLED MBEDTLS_SSL_EXTENDED_MS_ENABLED -#define SSL_FALLBACK_SCSV MBEDTLS_SSL_FALLBACK_SCSV -#define SSL_FLUSH_BUFFERS MBEDTLS_SSL_FLUSH_BUFFERS -#define SSL_HANDSHAKE_OVER MBEDTLS_SSL_HANDSHAKE_OVER -#define SSL_HANDSHAKE_WRAPUP MBEDTLS_SSL_HANDSHAKE_WRAPUP -#define SSL_HASH_MD5 MBEDTLS_SSL_HASH_MD5 -#define SSL_HASH_NONE MBEDTLS_SSL_HASH_NONE -#define SSL_HASH_SHA1 MBEDTLS_SSL_HASH_SHA1 -#define SSL_HASH_SHA224 MBEDTLS_SSL_HASH_SHA224 -#define SSL_HASH_SHA256 MBEDTLS_SSL_HASH_SHA256 -#define SSL_HASH_SHA384 MBEDTLS_SSL_HASH_SHA384 -#define SSL_HASH_SHA512 MBEDTLS_SSL_HASH_SHA512 -#define SSL_HELLO_REQUEST MBEDTLS_SSL_HELLO_REQUEST -#define SSL_HS_CERTIFICATE MBEDTLS_SSL_HS_CERTIFICATE -#define SSL_HS_CERTIFICATE_REQUEST MBEDTLS_SSL_HS_CERTIFICATE_REQUEST -#define SSL_HS_CERTIFICATE_VERIFY MBEDTLS_SSL_HS_CERTIFICATE_VERIFY -#define SSL_HS_CLIENT_HELLO MBEDTLS_SSL_HS_CLIENT_HELLO -#define SSL_HS_CLIENT_KEY_EXCHANGE MBEDTLS_SSL_HS_CLIENT_KEY_EXCHANGE -#define SSL_HS_FINISHED MBEDTLS_SSL_HS_FINISHED -#define SSL_HS_HELLO_REQUEST MBEDTLS_SSL_HS_HELLO_REQUEST -#define SSL_HS_HELLO_VERIFY_REQUEST MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST -#define SSL_HS_NEW_SESSION_TICKET MBEDTLS_SSL_HS_NEW_SESSION_TICKET -#define SSL_HS_SERVER_HELLO MBEDTLS_SSL_HS_SERVER_HELLO -#define SSL_HS_SERVER_HELLO_DONE MBEDTLS_SSL_HS_SERVER_HELLO_DONE -#define SSL_HS_SERVER_KEY_EXCHANGE MBEDTLS_SSL_HS_SERVER_KEY_EXCHANGE -#define SSL_INITIAL_HANDSHAKE MBEDTLS_SSL_INITIAL_HANDSHAKE -#define SSL_IS_CLIENT MBEDTLS_SSL_IS_CLIENT -#define SSL_IS_FALLBACK MBEDTLS_SSL_IS_FALLBACK -#define SSL_IS_NOT_FALLBACK MBEDTLS_SSL_IS_NOT_FALLBACK -#define SSL_IS_SERVER MBEDTLS_SSL_IS_SERVER -#define SSL_LEGACY_ALLOW_RENEGOTIATION MBEDTLS_SSL_LEGACY_ALLOW_RENEGOTIATION -#define SSL_LEGACY_BREAK_HANDSHAKE MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE -#define SSL_LEGACY_NO_RENEGOTIATION MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION -#define SSL_LEGACY_RENEGOTIATION MBEDTLS_SSL_LEGACY_RENEGOTIATION -#define SSL_MAC_ADD MBEDTLS_SSL_MAC_ADD -#define SSL_MAJOR_VERSION_3 MBEDTLS_SSL_MAJOR_VERSION_3 -#define SSL_MAX_CONTENT_LEN MBEDTLS_SSL_MAX_CONTENT_LEN -#define SSL_MAX_FRAG_LEN_1024 MBEDTLS_SSL_MAX_FRAG_LEN_1024 -#define SSL_MAX_FRAG_LEN_2048 MBEDTLS_SSL_MAX_FRAG_LEN_2048 -#define SSL_MAX_FRAG_LEN_4096 MBEDTLS_SSL_MAX_FRAG_LEN_4096 -#define SSL_MAX_FRAG_LEN_512 MBEDTLS_SSL_MAX_FRAG_LEN_512 -#define SSL_MAX_FRAG_LEN_INVALID MBEDTLS_SSL_MAX_FRAG_LEN_INVALID -#define SSL_MAX_FRAG_LEN_NONE MBEDTLS_SSL_MAX_FRAG_LEN_NONE -#define SSL_MAX_MAJOR_VERSION MBEDTLS_SSL_MAX_MAJOR_VERSION -#define SSL_MAX_MINOR_VERSION MBEDTLS_SSL_MAX_MINOR_VERSION -#define SSL_MINOR_VERSION_0 MBEDTLS_SSL_MINOR_VERSION_0 -#define SSL_MINOR_VERSION_1 MBEDTLS_SSL_MINOR_VERSION_1 -#define SSL_MINOR_VERSION_2 MBEDTLS_SSL_MINOR_VERSION_2 -#define SSL_MINOR_VERSION_3 MBEDTLS_SSL_MINOR_VERSION_3 -#define SSL_MIN_MAJOR_VERSION MBEDTLS_SSL_MIN_MAJOR_VERSION -#define SSL_MIN_MINOR_VERSION MBEDTLS_SSL_MIN_MINOR_VERSION -#define SSL_MSG_ALERT MBEDTLS_SSL_MSG_ALERT -#define SSL_MSG_APPLICATION_DATA MBEDTLS_SSL_MSG_APPLICATION_DATA -#define SSL_MSG_CHANGE_CIPHER_SPEC MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC -#define SSL_MSG_HANDSHAKE MBEDTLS_SSL_MSG_HANDSHAKE -#define SSL_PADDING_ADD MBEDTLS_SSL_PADDING_ADD -#define SSL_RENEGOTIATION MBEDTLS_SSL_RENEGOTIATION -#define SSL_RENEGOTIATION_DISABLED MBEDTLS_SSL_RENEGOTIATION_DISABLED -#define SSL_RENEGOTIATION_DONE MBEDTLS_SSL_RENEGOTIATION_DONE -#define SSL_RENEGOTIATION_ENABLED MBEDTLS_SSL_RENEGOTIATION_ENABLED -#define SSL_RENEGOTIATION_NOT_ENFORCED MBEDTLS_SSL_RENEGOTIATION_NOT_ENFORCED -#define SSL_RENEGOTIATION_PENDING MBEDTLS_SSL_RENEGOTIATION_PENDING -#define SSL_RENEGO_MAX_RECORDS_DEFAULT MBEDTLS_SSL_RENEGO_MAX_RECORDS_DEFAULT -#define SSL_RETRANS_FINISHED MBEDTLS_SSL_RETRANS_FINISHED -#define SSL_RETRANS_PREPARING MBEDTLS_SSL_RETRANS_PREPARING -#define SSL_RETRANS_SENDING MBEDTLS_SSL_RETRANS_SENDING -#define SSL_RETRANS_WAITING MBEDTLS_SSL_RETRANS_WAITING -#define SSL_SECURE_RENEGOTIATION MBEDTLS_SSL_SECURE_RENEGOTIATION -#define SSL_SERVER_CERTIFICATE MBEDTLS_SSL_SERVER_CERTIFICATE -#define SSL_SERVER_CHANGE_CIPHER_SPEC MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC -#define SSL_SERVER_FINISHED MBEDTLS_SSL_SERVER_FINISHED -#define SSL_SERVER_HELLO MBEDTLS_SSL_SERVER_HELLO -#define SSL_SERVER_HELLO_DONE MBEDTLS_SSL_SERVER_HELLO_DONE -#define SSL_SERVER_HELLO_VERIFY_REQUEST_SENT MBEDTLS_SSL_SERVER_HELLO_VERIFY_REQUEST_SENT -#define SSL_SERVER_KEY_EXCHANGE MBEDTLS_SSL_SERVER_KEY_EXCHANGE -#define SSL_SERVER_NEW_SESSION_TICKET MBEDTLS_SSL_SERVER_NEW_SESSION_TICKET -#define SSL_SESSION_TICKETS_DISABLED MBEDTLS_SSL_SESSION_TICKETS_DISABLED -#define SSL_SESSION_TICKETS_ENABLED MBEDTLS_SSL_SESSION_TICKETS_ENABLED -#define SSL_SIG_ANON MBEDTLS_SSL_SIG_ANON -#define SSL_SIG_ECDSA MBEDTLS_SSL_SIG_ECDSA -#define SSL_SIG_RSA MBEDTLS_SSL_SIG_RSA -#define SSL_TRANSPORT_DATAGRAM MBEDTLS_SSL_TRANSPORT_DATAGRAM -#define SSL_TRANSPORT_STREAM MBEDTLS_SSL_TRANSPORT_STREAM -#define SSL_TRUNCATED_HMAC_LEN MBEDTLS_SSL_TRUNCATED_HMAC_LEN -#define SSL_TRUNC_HMAC_DISABLED MBEDTLS_SSL_TRUNC_HMAC_DISABLED -#define SSL_TRUNC_HMAC_ENABLED MBEDTLS_SSL_TRUNC_HMAC_ENABLED -#define SSL_VERIFY_DATA_MAX_LEN MBEDTLS_SSL_VERIFY_DATA_MAX_LEN -#define SSL_VERIFY_NONE MBEDTLS_SSL_VERIFY_NONE -#define SSL_VERIFY_OPTIONAL MBEDTLS_SSL_VERIFY_OPTIONAL -#define SSL_VERIFY_REQUIRED MBEDTLS_SSL_VERIFY_REQUIRED -#define TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA -#define TLS_DHE_PSK_WITH_AES_128_CBC_SHA MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA -#define TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 -#define TLS_DHE_PSK_WITH_AES_128_CCM MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM -#define TLS_DHE_PSK_WITH_AES_128_CCM_8 MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM_8 -#define TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 -#define TLS_DHE_PSK_WITH_AES_256_CBC_SHA MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA -#define TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 -#define TLS_DHE_PSK_WITH_AES_256_CCM MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM -#define TLS_DHE_PSK_WITH_AES_256_CCM_8 MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM_8 -#define TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 -#define TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 -#define TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 -#define TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 -#define TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 -#define TLS_DHE_PSK_WITH_NULL_SHA MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA -#define TLS_DHE_PSK_WITH_NULL_SHA256 MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256 -#define TLS_DHE_PSK_WITH_NULL_SHA384 MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384 -#define TLS_DHE_PSK_WITH_RC4_128_SHA MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA -#define TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA -#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA -#define TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 -#define TLS_DHE_RSA_WITH_AES_128_CCM MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM -#define TLS_DHE_RSA_WITH_AES_128_CCM_8 MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM_8 -#define TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 -#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA -#define TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 -#define TLS_DHE_RSA_WITH_AES_256_CCM MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM -#define TLS_DHE_RSA_WITH_AES_256_CCM_8 MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM_8 -#define TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 -#define TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA -#define TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 -#define TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 -#define TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA -#define TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 -#define TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 -#define TLS_DHE_RSA_WITH_DES_CBC_SHA MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA -#define TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA -#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA -#define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 -#define TLS_ECDHE_ECDSA_WITH_AES_128_CCM MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM -#define TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 -#define TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 -#define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA -#define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 -#define TLS_ECDHE_ECDSA_WITH_AES_256_CCM MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM -#define TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 -#define TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 -#define TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 -#define TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 -#define TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 -#define TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 -#define TLS_ECDHE_ECDSA_WITH_NULL_SHA MBEDTLS_TLS_ECDHE_ECDSA_WITH_NULL_SHA -#define TLS_ECDHE_ECDSA_WITH_RC4_128_SHA MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA -#define TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA -#define TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA -#define TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 -#define TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA -#define TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 -#define TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 -#define TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 -#define TLS_ECDHE_PSK_WITH_NULL_SHA MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA -#define TLS_ECDHE_PSK_WITH_NULL_SHA256 MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA256 -#define TLS_ECDHE_PSK_WITH_NULL_SHA384 MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA384 -#define TLS_ECDHE_PSK_WITH_RC4_128_SHA MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA -#define TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA -#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA -#define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 -#define TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 -#define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA -#define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 -#define TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 -#define TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 -#define TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 -#define TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 -#define TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 -#define TLS_ECDHE_RSA_WITH_NULL_SHA MBEDTLS_TLS_ECDHE_RSA_WITH_NULL_SHA -#define TLS_ECDHE_RSA_WITH_RC4_128_SHA MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA -#define TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA -#define TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA -#define TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 -#define TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 -#define TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA -#define TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 -#define TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 -#define TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 -#define TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 -#define TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 -#define TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 -#define TLS_ECDH_ECDSA_WITH_NULL_SHA MBEDTLS_TLS_ECDH_ECDSA_WITH_NULL_SHA -#define TLS_ECDH_ECDSA_WITH_RC4_128_SHA MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA -#define TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA -#define TLS_ECDH_RSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA -#define TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 -#define TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 -#define TLS_ECDH_RSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA -#define TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 -#define TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 -#define TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 -#define TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 -#define TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 -#define TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 -#define TLS_ECDH_RSA_WITH_NULL_SHA MBEDTLS_TLS_ECDH_RSA_WITH_NULL_SHA -#define TLS_ECDH_RSA_WITH_RC4_128_SHA MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA -#define TLS_EXT_ALPN MBEDTLS_TLS_EXT_ALPN -#define TLS_EXT_ENCRYPT_THEN_MAC MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC -#define TLS_EXT_EXTENDED_MASTER_SECRET MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET -#define TLS_EXT_MAX_FRAGMENT_LENGTH MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH -#define TLS_EXT_RENEGOTIATION_INFO MBEDTLS_TLS_EXT_RENEGOTIATION_INFO -#define TLS_EXT_SERVERNAME MBEDTLS_TLS_EXT_SERVERNAME -#define TLS_EXT_SERVERNAME_HOSTNAME MBEDTLS_TLS_EXT_SERVERNAME_HOSTNAME -#define TLS_EXT_SESSION_TICKET MBEDTLS_TLS_EXT_SESSION_TICKET -#define TLS_EXT_SIG_ALG MBEDTLS_TLS_EXT_SIG_ALG -#define TLS_EXT_SUPPORTED_ELLIPTIC_CURVES MBEDTLS_TLS_EXT_SUPPORTED_ELLIPTIC_CURVES -#define TLS_EXT_SUPPORTED_POINT_FORMATS MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS -#define TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT -#define TLS_EXT_TRUNCATED_HMAC MBEDTLS_TLS_EXT_TRUNCATED_HMAC -#define TLS_PSK_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA -#define TLS_PSK_WITH_AES_128_CBC_SHA MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA -#define TLS_PSK_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256 -#define TLS_PSK_WITH_AES_128_CCM MBEDTLS_TLS_PSK_WITH_AES_128_CCM -#define TLS_PSK_WITH_AES_128_CCM_8 MBEDTLS_TLS_PSK_WITH_AES_128_CCM_8 -#define TLS_PSK_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256 -#define TLS_PSK_WITH_AES_256_CBC_SHA MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA -#define TLS_PSK_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384 -#define TLS_PSK_WITH_AES_256_CCM MBEDTLS_TLS_PSK_WITH_AES_256_CCM -#define TLS_PSK_WITH_AES_256_CCM_8 MBEDTLS_TLS_PSK_WITH_AES_256_CCM_8 -#define TLS_PSK_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384 -#define TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 -#define TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 -#define TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 -#define TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 -#define TLS_PSK_WITH_NULL_SHA MBEDTLS_TLS_PSK_WITH_NULL_SHA -#define TLS_PSK_WITH_NULL_SHA256 MBEDTLS_TLS_PSK_WITH_NULL_SHA256 -#define TLS_PSK_WITH_NULL_SHA384 MBEDTLS_TLS_PSK_WITH_NULL_SHA384 -#define TLS_PSK_WITH_RC4_128_SHA MBEDTLS_TLS_PSK_WITH_RC4_128_SHA -#define TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA -#define TLS_RSA_PSK_WITH_AES_128_CBC_SHA MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA -#define TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 -#define TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 -#define TLS_RSA_PSK_WITH_AES_256_CBC_SHA MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA -#define TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 -#define TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 -#define TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 -#define TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 -#define TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 -#define TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 -#define TLS_RSA_PSK_WITH_NULL_SHA MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA -#define TLS_RSA_PSK_WITH_NULL_SHA256 MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA256 -#define TLS_RSA_PSK_WITH_NULL_SHA384 MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA384 -#define TLS_RSA_PSK_WITH_RC4_128_SHA MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA -#define TLS_RSA_WITH_3DES_EDE_CBC_SHA MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA -#define TLS_RSA_WITH_AES_128_CBC_SHA MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA -#define TLS_RSA_WITH_AES_128_CBC_SHA256 MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256 -#define TLS_RSA_WITH_AES_128_CCM MBEDTLS_TLS_RSA_WITH_AES_128_CCM -#define TLS_RSA_WITH_AES_128_CCM_8 MBEDTLS_TLS_RSA_WITH_AES_128_CCM_8 -#define TLS_RSA_WITH_AES_128_GCM_SHA256 MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256 -#define TLS_RSA_WITH_AES_256_CBC_SHA MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA -#define TLS_RSA_WITH_AES_256_CBC_SHA256 MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256 -#define TLS_RSA_WITH_AES_256_CCM MBEDTLS_TLS_RSA_WITH_AES_256_CCM -#define TLS_RSA_WITH_AES_256_CCM_8 MBEDTLS_TLS_RSA_WITH_AES_256_CCM_8 -#define TLS_RSA_WITH_AES_256_GCM_SHA384 MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384 -#define TLS_RSA_WITH_CAMELLIA_128_CBC_SHA MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA -#define TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 -#define TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 -#define TLS_RSA_WITH_CAMELLIA_256_CBC_SHA MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA -#define TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 -#define TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 -#define TLS_RSA_WITH_DES_CBC_SHA MBEDTLS_TLS_RSA_WITH_DES_CBC_SHA -#define TLS_RSA_WITH_NULL_MD5 MBEDTLS_TLS_RSA_WITH_NULL_MD5 -#define TLS_RSA_WITH_NULL_SHA MBEDTLS_TLS_RSA_WITH_NULL_SHA -#define TLS_RSA_WITH_NULL_SHA256 MBEDTLS_TLS_RSA_WITH_NULL_SHA256 -#define TLS_RSA_WITH_RC4_128_MD5 MBEDTLS_TLS_RSA_WITH_RC4_128_MD5 -#define TLS_RSA_WITH_RC4_128_SHA MBEDTLS_TLS_RSA_WITH_RC4_128_SHA -#define X509_CRT_VERSION_1 MBEDTLS_X509_CRT_VERSION_1 -#define X509_CRT_VERSION_2 MBEDTLS_X509_CRT_VERSION_2 -#define X509_CRT_VERSION_3 MBEDTLS_X509_CRT_VERSION_3 -#define X509_FORMAT_DER MBEDTLS_X509_FORMAT_DER -#define X509_FORMAT_PEM MBEDTLS_X509_FORMAT_PEM -#define X509_MAX_DN_NAME_SIZE MBEDTLS_X509_MAX_DN_NAME_SIZE -#define X509_RFC5280_MAX_SERIAL_LEN MBEDTLS_X509_RFC5280_MAX_SERIAL_LEN -#define X509_RFC5280_UTC_TIME_LEN MBEDTLS_X509_RFC5280_UTC_TIME_LEN -#define XTEA_DECRYPT MBEDTLS_XTEA_DECRYPT -#define XTEA_ENCRYPT MBEDTLS_XTEA_ENCRYPT -#define _asn1_bitstring mbedtls_asn1_bitstring -#define _asn1_buf mbedtls_asn1_buf -#define _asn1_named_data mbedtls_asn1_named_data -#define _asn1_sequence mbedtls_asn1_sequence -#define _ssl_cache_context mbedtls_ssl_cache_context -#define _ssl_cache_entry mbedtls_ssl_cache_entry -#define _ssl_ciphersuite_t mbedtls_ssl_ciphersuite_t -#define _ssl_context mbedtls_ssl_context -#define _ssl_flight_item mbedtls_ssl_flight_item -#define _ssl_handshake_params mbedtls_ssl_handshake_params -#define _ssl_key_cert mbedtls_ssl_key_cert -#define _ssl_premaster_secret mbedtls_ssl_premaster_secret -#define _ssl_session mbedtls_ssl_session -#define _ssl_transform mbedtls_ssl_transform -#define _x509_crl mbedtls_x509_crl -#define _x509_crl_entry mbedtls_x509_crl_entry -#define _x509_crt mbedtls_x509_crt -#define _x509_csr mbedtls_x509_csr -#define _x509_time mbedtls_x509_time -#define _x509write_cert mbedtls_x509write_cert -#define _x509write_csr mbedtls_x509write_csr -#define aes_context mbedtls_aes_context -#define aes_crypt_cbc mbedtls_aes_crypt_cbc -#define aes_crypt_cfb128 mbedtls_aes_crypt_cfb128 -#define aes_crypt_cfb8 mbedtls_aes_crypt_cfb8 -#define aes_crypt_ctr mbedtls_aes_crypt_ctr -#define aes_crypt_ecb mbedtls_aes_crypt_ecb -#define aes_free mbedtls_aes_free -#define aes_init mbedtls_aes_init -#define aes_self_test mbedtls_aes_self_test -#define aes_setkey_dec mbedtls_aes_setkey_dec -#define aes_setkey_enc mbedtls_aes_setkey_enc -#define aesni_crypt_ecb mbedtls_aesni_crypt_ecb -#define aesni_gcm_mult mbedtls_aesni_gcm_mult -#define aesni_inverse_key mbedtls_aesni_inverse_key -#define aesni_setkey_enc mbedtls_aesni_setkey_enc -#define aesni_supports mbedtls_aesni_has_support -#define alarmed mbedtls_timing_alarmed -#define arc4_context mbedtls_arc4_context -#define arc4_crypt mbedtls_arc4_crypt -#define arc4_free mbedtls_arc4_free -#define arc4_init mbedtls_arc4_init -#define arc4_self_test mbedtls_arc4_self_test -#define arc4_setup mbedtls_arc4_setup -#define asn1_bitstring mbedtls_asn1_bitstring -#define asn1_buf mbedtls_asn1_buf -#define asn1_find_named_data mbedtls_asn1_find_named_data -#define asn1_free_named_data mbedtls_asn1_free_named_data -#define asn1_free_named_data_list mbedtls_asn1_free_named_data_list -#define asn1_get_alg mbedtls_asn1_get_alg -#define asn1_get_alg_null mbedtls_asn1_get_alg_null -#define asn1_get_bitstring mbedtls_asn1_get_bitstring -#define asn1_get_bitstring_null mbedtls_asn1_get_bitstring_null -#define asn1_get_bool mbedtls_asn1_get_bool -#define asn1_get_int mbedtls_asn1_get_int -#define asn1_get_len mbedtls_asn1_get_len -#define asn1_get_mpi mbedtls_asn1_get_mpi -#define asn1_get_sequence_of mbedtls_asn1_get_sequence_of -#define asn1_get_tag mbedtls_asn1_get_tag -#define asn1_named_data mbedtls_asn1_named_data -#define asn1_sequence mbedtls_asn1_sequence -#define asn1_store_named_data mbedtls_asn1_store_named_data -#define asn1_write_algorithm_identifier mbedtls_asn1_write_algorithm_identifier -#define asn1_write_bitstring mbedtls_asn1_write_bitstring -#define asn1_write_bool mbedtls_asn1_write_bool -#define asn1_write_ia5_string mbedtls_asn1_write_ia5_string -#define asn1_write_int mbedtls_asn1_write_int -#define asn1_write_len mbedtls_asn1_write_len -#define asn1_write_mpi mbedtls_asn1_write_mpi -#define asn1_write_null mbedtls_asn1_write_null -#define asn1_write_octet_string mbedtls_asn1_write_octet_string -#define asn1_write_oid mbedtls_asn1_write_oid -#define asn1_write_printable_string mbedtls_asn1_write_printable_string -#define asn1_write_raw_buffer mbedtls_asn1_write_raw_buffer -#define asn1_write_tag mbedtls_asn1_write_tag -#define base64_decode mbedtls_base64_decode -#define base64_encode mbedtls_base64_encode -#define base64_self_test mbedtls_base64_self_test -#define blowfish_context mbedtls_blowfish_context -#define blowfish_crypt_cbc mbedtls_blowfish_crypt_cbc -#define blowfish_crypt_cfb64 mbedtls_blowfish_crypt_cfb64 -#define blowfish_crypt_ctr mbedtls_blowfish_crypt_ctr -#define blowfish_crypt_ecb mbedtls_blowfish_crypt_ecb -#define blowfish_free mbedtls_blowfish_free -#define blowfish_init mbedtls_blowfish_init -#define blowfish_setkey mbedtls_blowfish_setkey -#define camellia_context mbedtls_camellia_context -#define camellia_crypt_cbc mbedtls_camellia_crypt_cbc -#define camellia_crypt_cfb128 mbedtls_camellia_crypt_cfb128 -#define camellia_crypt_ctr mbedtls_camellia_crypt_ctr -#define camellia_crypt_ecb mbedtls_camellia_crypt_ecb -#define camellia_free mbedtls_camellia_free -#define camellia_init mbedtls_camellia_init -#define camellia_self_test mbedtls_camellia_self_test -#define camellia_setkey_dec mbedtls_camellia_setkey_dec -#define camellia_setkey_enc mbedtls_camellia_setkey_enc -#define ccm_auth_decrypt mbedtls_ccm_auth_decrypt -#define ccm_context mbedtls_ccm_context -#define ccm_encrypt_and_tag mbedtls_ccm_encrypt_and_tag -#define ccm_free mbedtls_ccm_free -#define ccm_init mbedtls_ccm_init -#define ccm_self_test mbedtls_ccm_self_test -#define cipher_auth_decrypt mbedtls_cipher_auth_decrypt -#define cipher_auth_encrypt mbedtls_cipher_auth_encrypt -#define cipher_base_t mbedtls_cipher_base_t -#define cipher_check_tag mbedtls_cipher_check_tag -#define cipher_context_t mbedtls_cipher_context_t -#define cipher_crypt mbedtls_cipher_crypt -#define cipher_definition_t mbedtls_cipher_definition_t -#define cipher_definitions mbedtls_cipher_definitions -#define cipher_finish mbedtls_cipher_finish -#define cipher_free mbedtls_cipher_free -#define cipher_get_block_size mbedtls_cipher_get_block_size -#define cipher_get_cipher_mode mbedtls_cipher_get_cipher_mode -#define cipher_get_iv_size mbedtls_cipher_get_iv_size -#define cipher_get_key_size mbedtls_cipher_get_key_bitlen -#define cipher_get_name mbedtls_cipher_get_name -#define cipher_get_operation mbedtls_cipher_get_operation -#define cipher_get_type mbedtls_cipher_get_type -#define cipher_id_t mbedtls_cipher_id_t -#define cipher_info_from_string mbedtls_cipher_info_from_string -#define cipher_info_from_type mbedtls_cipher_info_from_type -#define cipher_info_from_values mbedtls_cipher_info_from_values -#define cipher_info_t mbedtls_cipher_info_t -#define cipher_init mbedtls_cipher_init -#define cipher_init_ctx mbedtls_cipher_setup -#define cipher_list mbedtls_cipher_list -#define cipher_mode_t mbedtls_cipher_mode_t -#define cipher_padding_t mbedtls_cipher_padding_t -#define cipher_reset mbedtls_cipher_reset -#define cipher_set_iv mbedtls_cipher_set_iv -#define cipher_set_padding_mode mbedtls_cipher_set_padding_mode -#define cipher_setkey mbedtls_cipher_setkey -#define cipher_type_t mbedtls_cipher_type_t -#define cipher_update mbedtls_cipher_update -#define cipher_update_ad mbedtls_cipher_update_ad -#define cipher_write_tag mbedtls_cipher_write_tag -#define ctr_drbg_context mbedtls_ctr_drbg_context -#define ctr_drbg_free mbedtls_ctr_drbg_free -#define ctr_drbg_init mbedtls_ctr_drbg_init -#define ctr_drbg_random mbedtls_ctr_drbg_random -#define ctr_drbg_random_with_add mbedtls_ctr_drbg_random_with_add -#define ctr_drbg_reseed mbedtls_ctr_drbg_reseed -#define ctr_drbg_self_test mbedtls_ctr_drbg_self_test -#define ctr_drbg_set_entropy_len mbedtls_ctr_drbg_set_entropy_len -#define ctr_drbg_set_prediction_resistance mbedtls_ctr_drbg_set_prediction_resistance -#define ctr_drbg_set_reseed_interval mbedtls_ctr_drbg_set_reseed_interval -#define ctr_drbg_update mbedtls_ctr_drbg_update -#define ctr_drbg_update_seed_file mbedtls_ctr_drbg_update_seed_file -#define ctr_drbg_write_seed_file mbedtls_ctr_drbg_write_seed_file -#define debug_print_buf mbedtls_debug_print_buf -#define debug_print_crt mbedtls_debug_print_crt -#define debug_print_ecp mbedtls_debug_print_ecp -#define debug_print_mpi mbedtls_debug_print_mpi -#define debug_print_msg mbedtls_debug_print_msg -#define debug_print_ret mbedtls_debug_print_ret -#define debug_set_threshold mbedtls_debug_set_threshold -#define des3_context mbedtls_des3_context -#define des3_crypt_cbc mbedtls_des3_crypt_cbc -#define des3_crypt_ecb mbedtls_des3_crypt_ecb -#define des3_free mbedtls_des3_free -#define des3_init mbedtls_des3_init -#define des3_set2key_dec mbedtls_des3_set2key_dec -#define des3_set2key_enc mbedtls_des3_set2key_enc -#define des3_set3key_dec mbedtls_des3_set3key_dec -#define des3_set3key_enc mbedtls_des3_set3key_enc -#define des_context mbedtls_des_context -#define des_crypt_cbc mbedtls_des_crypt_cbc -#define des_crypt_ecb mbedtls_des_crypt_ecb -#define des_free mbedtls_des_free -#define des_init mbedtls_des_init -#define des_key_check_key_parity mbedtls_des_key_check_key_parity -#define des_key_check_weak mbedtls_des_key_check_weak -#define des_key_set_parity mbedtls_des_key_set_parity -#define des_self_test mbedtls_des_self_test -#define des_setkey_dec mbedtls_des_setkey_dec -#define des_setkey_enc mbedtls_des_setkey_enc -#define dhm_calc_secret mbedtls_dhm_calc_secret -#define dhm_context mbedtls_dhm_context -#define dhm_free mbedtls_dhm_free -#define dhm_init mbedtls_dhm_init -#define dhm_make_params mbedtls_dhm_make_params -#define dhm_make_public mbedtls_dhm_make_public -#define dhm_parse_dhm mbedtls_dhm_parse_dhm -#define dhm_parse_dhmfile mbedtls_dhm_parse_dhmfile -#define dhm_read_params mbedtls_dhm_read_params -#define dhm_read_public mbedtls_dhm_read_public -#define dhm_self_test mbedtls_dhm_self_test -#define ecdh_calc_secret mbedtls_ecdh_calc_secret -#define ecdh_compute_shared mbedtls_ecdh_compute_shared -#define ecdh_context mbedtls_ecdh_context -#define ecdh_free mbedtls_ecdh_free -#define ecdh_gen_public mbedtls_ecdh_gen_public -#define ecdh_get_params mbedtls_ecdh_get_params -#define ecdh_init mbedtls_ecdh_init -#define ecdh_make_params mbedtls_ecdh_make_params -#define ecdh_make_public mbedtls_ecdh_make_public -#define ecdh_read_params mbedtls_ecdh_read_params -#define ecdh_read_public mbedtls_ecdh_read_public -#define ecdh_side mbedtls_ecdh_side -#define ecdsa_context mbedtls_ecdsa_context -#define ecdsa_free mbedtls_ecdsa_free -#define ecdsa_from_keypair mbedtls_ecdsa_from_keypair -#define ecdsa_genkey mbedtls_ecdsa_genkey -#define ecdsa_info mbedtls_ecdsa_info -#define ecdsa_init mbedtls_ecdsa_init -#define ecdsa_read_signature mbedtls_ecdsa_read_signature -#define ecdsa_sign mbedtls_ecdsa_sign -#define ecdsa_sign_det mbedtls_ecdsa_sign_det -#define ecdsa_verify mbedtls_ecdsa_verify -#define ecdsa_write_signature mbedtls_ecdsa_write_signature -#define ecdsa_write_signature_det mbedtls_ecdsa_write_signature_det -#define eckey_info mbedtls_eckey_info -#define eckeydh_info mbedtls_eckeydh_info -#define ecp_check_privkey mbedtls_ecp_check_privkey -#define ecp_check_pub_priv mbedtls_ecp_check_pub_priv -#define ecp_check_pubkey mbedtls_ecp_check_pubkey -#define ecp_copy mbedtls_ecp_copy -#define ecp_curve_info mbedtls_ecp_curve_info -#define ecp_curve_info_from_grp_id mbedtls_ecp_curve_info_from_grp_id -#define ecp_curve_info_from_name mbedtls_ecp_curve_info_from_name -#define ecp_curve_info_from_tls_id mbedtls_ecp_curve_info_from_tls_id -#define ecp_curve_list mbedtls_ecp_curve_list -#define ecp_gen_key mbedtls_ecp_gen_key -#define ecp_gen_keypair mbedtls_ecp_gen_keypair -#define ecp_group mbedtls_ecp_group -#define ecp_group_copy mbedtls_ecp_group_copy -#define ecp_group_free mbedtls_ecp_group_free -#define ecp_group_id mbedtls_ecp_group_id -#define ecp_group_init mbedtls_ecp_group_init -#define ecp_grp_id_list mbedtls_ecp_grp_id_list -#define ecp_is_zero mbedtls_ecp_is_zero -#define ecp_keypair mbedtls_ecp_keypair -#define ecp_keypair_free mbedtls_ecp_keypair_free -#define ecp_keypair_init mbedtls_ecp_keypair_init -#define ecp_mul mbedtls_ecp_mul -#define ecp_point mbedtls_ecp_point -#define ecp_point_free mbedtls_ecp_point_free -#define ecp_point_init mbedtls_ecp_point_init -#define ecp_point_read_binary mbedtls_ecp_point_read_binary -#define ecp_point_read_string mbedtls_ecp_point_read_string -#define ecp_point_write_binary mbedtls_ecp_point_write_binary -#define ecp_self_test mbedtls_ecp_self_test -#define ecp_set_zero mbedtls_ecp_set_zero -#define ecp_tls_read_group mbedtls_ecp_tls_read_group -#define ecp_tls_read_point mbedtls_ecp_tls_read_point -#define ecp_tls_write_group mbedtls_ecp_tls_write_group -#define ecp_tls_write_point mbedtls_ecp_tls_write_point -#define ecp_use_known_dp mbedtls_ecp_group_load -#define entropy_add_source mbedtls_entropy_add_source -#define entropy_context mbedtls_entropy_context -#define entropy_free mbedtls_entropy_free -#define entropy_func mbedtls_entropy_func -#define entropy_gather mbedtls_entropy_gather -#define entropy_init mbedtls_entropy_init -#define entropy_self_test mbedtls_entropy_self_test -#define entropy_update_manual mbedtls_entropy_update_manual -#define entropy_update_seed_file mbedtls_entropy_update_seed_file -#define entropy_write_seed_file mbedtls_entropy_write_seed_file -#define error_strerror mbedtls_strerror -#define f_source_ptr mbedtls_entropy_f_source_ptr -#define gcm_auth_decrypt mbedtls_gcm_auth_decrypt -#define gcm_context mbedtls_gcm_context -#define gcm_crypt_and_tag mbedtls_gcm_crypt_and_tag -#define gcm_finish mbedtls_gcm_finish -#define gcm_free mbedtls_gcm_free -#define gcm_init mbedtls_gcm_init -#define gcm_self_test mbedtls_gcm_self_test -#define gcm_starts mbedtls_gcm_starts -#define gcm_update mbedtls_gcm_update -#define get_timer mbedtls_timing_get_timer -#define hardclock mbedtls_timing_hardclock -#define hardclock_poll mbedtls_hardclock_poll -#define havege_free mbedtls_havege_free -#define havege_init mbedtls_havege_init -#define havege_poll mbedtls_havege_poll -#define havege_random mbedtls_havege_random -#define havege_state mbedtls_havege_state -#define hmac_drbg_context mbedtls_hmac_drbg_context -#define hmac_drbg_free mbedtls_hmac_drbg_free -#define hmac_drbg_init mbedtls_hmac_drbg_init -#define hmac_drbg_random mbedtls_hmac_drbg_random -#define hmac_drbg_random_with_add mbedtls_hmac_drbg_random_with_add -#define hmac_drbg_reseed mbedtls_hmac_drbg_reseed -#define hmac_drbg_self_test mbedtls_hmac_drbg_self_test -#define hmac_drbg_set_entropy_len mbedtls_hmac_drbg_set_entropy_len -#define hmac_drbg_set_prediction_resistance mbedtls_hmac_drbg_set_prediction_resistance -#define hmac_drbg_set_reseed_interval mbedtls_hmac_drbg_set_reseed_interval -#define hmac_drbg_update mbedtls_hmac_drbg_update -#define hmac_drbg_update_seed_file mbedtls_hmac_drbg_update_seed_file -#define hmac_drbg_write_seed_file mbedtls_hmac_drbg_write_seed_file -#define hr_time mbedtls_timing_hr_time -#define key_exchange_type_t mbedtls_key_exchange_type_t -#define md mbedtls_md -#define md2 mbedtls_md2 -#define md2_context mbedtls_md2_context -#define md2_finish mbedtls_md2_finish -#define md2_free mbedtls_md2_free -#define md2_info mbedtls_md2_info -#define md2_init mbedtls_md2_init -#define md2_process mbedtls_md2_process -#define md2_self_test mbedtls_md2_self_test -#define md2_starts mbedtls_md2_starts -#define md2_update mbedtls_md2_update -#define md4 mbedtls_md4 -#define md4_context mbedtls_md4_context -#define md4_finish mbedtls_md4_finish -#define md4_free mbedtls_md4_free -#define md4_info mbedtls_md4_info -#define md4_init mbedtls_md4_init -#define md4_process mbedtls_md4_process -#define md4_self_test mbedtls_md4_self_test -#define md4_starts mbedtls_md4_starts -#define md4_update mbedtls_md4_update -#define md5 mbedtls_md5 -#define md5_context mbedtls_md5_context -#define md5_finish mbedtls_md5_finish -#define md5_free mbedtls_md5_free -#define md5_info mbedtls_md5_info -#define md5_init mbedtls_md5_init -#define md5_process mbedtls_md5_process -#define md5_self_test mbedtls_md5_self_test -#define md5_starts mbedtls_md5_starts -#define md5_update mbedtls_md5_update -#define md_context_t mbedtls_md_context_t -#define md_file mbedtls_md_file -#define md_finish mbedtls_md_finish -#define md_free mbedtls_md_free -#define md_get_name mbedtls_md_get_name -#define md_get_size mbedtls_md_get_size -#define md_get_type mbedtls_md_get_type -#define md_hmac mbedtls_md_hmac -#define md_hmac_finish mbedtls_md_hmac_finish -#define md_hmac_reset mbedtls_md_hmac_reset -#define md_hmac_starts mbedtls_md_hmac_starts -#define md_hmac_update mbedtls_md_hmac_update -#define md_info_from_string mbedtls_md_info_from_string -#define md_info_from_type mbedtls_md_info_from_type -#define md_info_t mbedtls_md_info_t -#define md_init mbedtls_md_init -#define md_init_ctx mbedtls_md_init_ctx -#define md_list mbedtls_md_list -#define md_process mbedtls_md_process -#define md_starts mbedtls_md_starts -#define md_type_t mbedtls_md_type_t -#define md_update mbedtls_md_update -#define memory_buffer_alloc_cur_get mbedtls_memory_buffer_alloc_cur_get -#define memory_buffer_alloc_free mbedtls_memory_buffer_alloc_free -#define memory_buffer_alloc_init mbedtls_memory_buffer_alloc_init -#define memory_buffer_alloc_max_get mbedtls_memory_buffer_alloc_max_get -#define memory_buffer_alloc_max_reset mbedtls_memory_buffer_alloc_max_reset -#define memory_buffer_alloc_self_test mbedtls_memory_buffer_alloc_self_test -#define memory_buffer_alloc_status mbedtls_memory_buffer_alloc_status -#define memory_buffer_alloc_verify mbedtls_memory_buffer_alloc_verify -#define memory_buffer_set_verify mbedtls_memory_buffer_set_verify -#define mpi mbedtls_mpi -#define mpi_add_abs mbedtls_mpi_add_abs -#define mpi_add_int mbedtls_mpi_add_int -#define mpi_add_mpi mbedtls_mpi_add_mpi -#define mpi_cmp_abs mbedtls_mpi_cmp_abs -#define mpi_cmp_int mbedtls_mpi_cmp_int -#define mpi_cmp_mpi mbedtls_mpi_cmp_mpi -#define mpi_copy mbedtls_mpi_copy -#define mpi_div_int mbedtls_mpi_div_int -#define mpi_div_mpi mbedtls_mpi_div_mpi -#define mpi_exp_mod mbedtls_mpi_exp_mod -#define mpi_fill_random mbedtls_mpi_fill_random -#define mpi_free mbedtls_mpi_free -#define mpi_gcd mbedtls_mpi_gcd -#define mpi_gen_prime mbedtls_mpi_gen_prime -#define mpi_get_bit mbedtls_mpi_get_bit -#define mpi_grow mbedtls_mpi_grow -#define mpi_init mbedtls_mpi_init -#define mpi_inv_mod mbedtls_mpi_inv_mod -#define mpi_is_prime mbedtls_mpi_is_prime -#define mpi_lsb mbedtls_mpi_lsb -#define mpi_lset mbedtls_mpi_lset -#define mpi_mod_int mbedtls_mpi_mod_int -#define mpi_mod_mpi mbedtls_mpi_mod_mpi -#define mpi_msb mbedtls_mpi_bitlen -#define mpi_mul_int mbedtls_mpi_mul_int -#define mpi_mul_mpi mbedtls_mpi_mul_mpi -#define mpi_read_binary mbedtls_mpi_read_binary -#define mpi_read_file mbedtls_mpi_read_file -#define mpi_read_string mbedtls_mpi_read_string -#define mpi_safe_cond_assign mbedtls_mpi_safe_cond_assign -#define mpi_safe_cond_swap mbedtls_mpi_safe_cond_swap -#define mpi_self_test mbedtls_mpi_self_test -#define mpi_set_bit mbedtls_mpi_set_bit -#define mpi_shift_l mbedtls_mpi_shift_l -#define mpi_shift_r mbedtls_mpi_shift_r -#define mpi_shrink mbedtls_mpi_shrink -#define mpi_size mbedtls_mpi_size -#define mpi_sub_abs mbedtls_mpi_sub_abs -#define mpi_sub_int mbedtls_mpi_sub_int -#define mpi_sub_mpi mbedtls_mpi_sub_mpi -#define mpi_swap mbedtls_mpi_swap -#define mpi_write_binary mbedtls_mpi_write_binary -#define mpi_write_file mbedtls_mpi_write_file -#define mpi_write_string mbedtls_mpi_write_string -#define net_accept mbedtls_net_accept -#define net_bind mbedtls_net_bind -#define net_close mbedtls_net_free -#define net_connect mbedtls_net_connect -#define net_recv mbedtls_net_recv -#define net_recv_timeout mbedtls_net_recv_timeout -#define net_send mbedtls_net_send -#define net_set_block mbedtls_net_set_block -#define net_set_nonblock mbedtls_net_set_nonblock -#define net_usleep mbedtls_net_usleep -#define oid_descriptor_t mbedtls_oid_descriptor_t -#define oid_get_attr_short_name mbedtls_oid_get_attr_short_name -#define oid_get_cipher_alg mbedtls_oid_get_cipher_alg -#define oid_get_ec_grp mbedtls_oid_get_ec_grp -#define oid_get_extended_key_usage mbedtls_oid_get_extended_key_usage -#define oid_get_md_alg mbedtls_oid_get_md_alg -#define oid_get_numeric_string mbedtls_oid_get_numeric_string -#define oid_get_oid_by_ec_grp mbedtls_oid_get_oid_by_ec_grp -#define oid_get_oid_by_md mbedtls_oid_get_oid_by_md -#define oid_get_oid_by_pk_alg mbedtls_oid_get_oid_by_pk_alg -#define oid_get_oid_by_sig_alg mbedtls_oid_get_oid_by_sig_alg -#define oid_get_pk_alg mbedtls_oid_get_pk_alg -#define oid_get_pkcs12_pbe_alg mbedtls_oid_get_pkcs12_pbe_alg -#define oid_get_sig_alg mbedtls_oid_get_sig_alg -#define oid_get_sig_alg_desc mbedtls_oid_get_sig_alg_desc -#define oid_get_x509_ext_type mbedtls_oid_get_x509_ext_type -#define operation_t mbedtls_operation_t -#define padlock_supports mbedtls_padlock_has_support -#define padlock_xcryptcbc mbedtls_padlock_xcryptcbc -#define padlock_xcryptecb mbedtls_padlock_xcryptecb -#define pem_context mbedtls_pem_context -#define pem_free mbedtls_pem_free -#define pem_init mbedtls_pem_init -#define pem_read_buffer mbedtls_pem_read_buffer -#define pem_write_buffer mbedtls_pem_write_buffer -#define pk_can_do mbedtls_pk_can_do -#define pk_check_pair mbedtls_pk_check_pair -#define pk_context mbedtls_pk_context -#define pk_debug mbedtls_pk_debug -#define pk_debug_item mbedtls_pk_debug_item -#define pk_debug_type mbedtls_pk_debug_type -#define pk_decrypt mbedtls_pk_decrypt -#define pk_ec mbedtls_pk_ec -#define pk_encrypt mbedtls_pk_encrypt -#define pk_free mbedtls_pk_free -#define pk_get_len mbedtls_pk_get_len -#define pk_get_name mbedtls_pk_get_name -#define pk_get_size mbedtls_pk_get_bitlen -#define pk_get_type mbedtls_pk_get_type -#define pk_info_from_type mbedtls_pk_info_from_type -#define pk_info_t mbedtls_pk_info_t -#define pk_init mbedtls_pk_init -#define pk_init_ctx mbedtls_pk_setup -#define pk_init_ctx_rsa_alt mbedtls_pk_setup_rsa_alt -#define pk_load_file mbedtls_pk_load_file -#define pk_parse_key mbedtls_pk_parse_key -#define pk_parse_keyfile mbedtls_pk_parse_keyfile -#define pk_parse_public_key mbedtls_pk_parse_public_key -#define pk_parse_public_keyfile mbedtls_pk_parse_public_keyfile -#define pk_parse_subpubkey mbedtls_pk_parse_subpubkey -#define pk_rsa mbedtls_pk_rsa -#define pk_rsa_alt_decrypt_func mbedtls_pk_rsa_alt_decrypt_func -#define pk_rsa_alt_key_len_func mbedtls_pk_rsa_alt_key_len_func -#define pk_rsa_alt_sign_func mbedtls_pk_rsa_alt_sign_func -#define pk_rsassa_pss_options mbedtls_pk_rsassa_pss_options -#define pk_sign mbedtls_pk_sign -#define pk_type_t mbedtls_pk_type_t -#define pk_verify mbedtls_pk_verify -#define pk_verify_ext mbedtls_pk_verify_ext -#define pk_write_key_der mbedtls_pk_write_key_der -#define pk_write_key_pem mbedtls_pk_write_key_pem -#define pk_write_pubkey mbedtls_pk_write_pubkey -#define pk_write_pubkey_der mbedtls_pk_write_pubkey_der -#define pk_write_pubkey_pem mbedtls_pk_write_pubkey_pem -#define pkcs11_context mbedtls_pkcs11_context -#define pkcs11_decrypt mbedtls_pkcs11_decrypt -#define pkcs11_priv_key_free mbedtls_pkcs11_priv_key_free -#define pkcs11_priv_key_init mbedtls_pkcs11_priv_key_bind -#define pkcs11_sign mbedtls_pkcs11_sign -#define pkcs11_x509_cert_init mbedtls_pkcs11_x509_cert_bind -#define pkcs12_derivation mbedtls_pkcs12_derivation -#define pkcs12_pbe mbedtls_pkcs12_pbe -#define pkcs12_pbe_sha1_rc4_128 mbedtls_pkcs12_pbe_sha1_rc4_128 -#define pkcs5_pbes2 mbedtls_pkcs5_pbes2 -#define pkcs5_pbkdf2_hmac mbedtls_pkcs5_pbkdf2_hmac -#define pkcs5_self_test mbedtls_pkcs5_self_test -#define platform_entropy_poll mbedtls_platform_entropy_poll -#define platform_set_exit mbedtls_platform_set_exit -#define platform_set_fprintf mbedtls_platform_set_fprintf -#define platform_set_printf mbedtls_platform_set_printf -#define platform_set_snprintf mbedtls_platform_set_snprintf -#define polarssl_exit mbedtls_exit -#define polarssl_fprintf mbedtls_fprintf -#define polarssl_free mbedtls_free -#define polarssl_mutex_free mbedtls_mutex_free -#define polarssl_mutex_init mbedtls_mutex_init -#define polarssl_mutex_lock mbedtls_mutex_lock -#define polarssl_mutex_unlock mbedtls_mutex_unlock -#define polarssl_printf mbedtls_printf -#define polarssl_snprintf mbedtls_snprintf -#define polarssl_strerror mbedtls_strerror -#define ripemd160 mbedtls_ripemd160 -#define ripemd160_context mbedtls_ripemd160_context -#define ripemd160_finish mbedtls_ripemd160_finish -#define ripemd160_free mbedtls_ripemd160_free -#define ripemd160_info mbedtls_ripemd160_info -#define ripemd160_init mbedtls_ripemd160_init -#define ripemd160_process mbedtls_ripemd160_process -#define ripemd160_self_test mbedtls_ripemd160_self_test -#define ripemd160_starts mbedtls_ripemd160_starts -#define ripemd160_update mbedtls_ripemd160_update -#define rsa_alt_context mbedtls_rsa_alt_context -#define rsa_alt_info mbedtls_rsa_alt_info -#define rsa_check_privkey mbedtls_rsa_check_privkey -#define rsa_check_pub_priv mbedtls_rsa_check_pub_priv -#define rsa_check_pubkey mbedtls_rsa_check_pubkey -#define rsa_context mbedtls_rsa_context -#define rsa_copy mbedtls_rsa_copy -#define rsa_free mbedtls_rsa_free -#define rsa_gen_key mbedtls_rsa_gen_key -#define rsa_info mbedtls_rsa_info -#define rsa_init mbedtls_rsa_init -#define rsa_pkcs1_decrypt mbedtls_rsa_pkcs1_decrypt -#define rsa_pkcs1_encrypt mbedtls_rsa_pkcs1_encrypt -#define rsa_pkcs1_sign mbedtls_rsa_pkcs1_sign -#define rsa_pkcs1_verify mbedtls_rsa_pkcs1_verify -#define rsa_private mbedtls_rsa_private -#define rsa_public mbedtls_rsa_public -#define rsa_rsaes_oaep_decrypt mbedtls_rsa_rsaes_oaep_decrypt -#define rsa_rsaes_oaep_encrypt mbedtls_rsa_rsaes_oaep_encrypt -#define rsa_rsaes_pkcs1_v15_decrypt mbedtls_rsa_rsaes_pkcs1_v15_decrypt -#define rsa_rsaes_pkcs1_v15_encrypt mbedtls_rsa_rsaes_pkcs1_v15_encrypt -#define rsa_rsassa_pkcs1_v15_sign mbedtls_rsa_rsassa_pkcs1_v15_sign -#define rsa_rsassa_pkcs1_v15_verify mbedtls_rsa_rsassa_pkcs1_v15_verify -#define rsa_rsassa_pss_sign mbedtls_rsa_rsassa_pss_sign -#define rsa_rsassa_pss_verify mbedtls_rsa_rsassa_pss_verify -#define rsa_rsassa_pss_verify_ext mbedtls_rsa_rsassa_pss_verify_ext -#define rsa_self_test mbedtls_rsa_self_test -#define rsa_set_padding mbedtls_rsa_set_padding -#define safer_memcmp mbedtls_ssl_safer_memcmp -#define set_alarm mbedtls_set_alarm -#define sha1 mbedtls_sha1 -#define sha1_context mbedtls_sha1_context -#define sha1_finish mbedtls_sha1_finish -#define sha1_free mbedtls_sha1_free -#define sha1_info mbedtls_sha1_info -#define sha1_init mbedtls_sha1_init -#define sha1_process mbedtls_sha1_process -#define sha1_self_test mbedtls_sha1_self_test -#define sha1_starts mbedtls_sha1_starts -#define sha1_update mbedtls_sha1_update -#define sha224_info mbedtls_sha224_info -#define sha256 mbedtls_sha256 -#define sha256_context mbedtls_sha256_context -#define sha256_finish mbedtls_sha256_finish -#define sha256_free mbedtls_sha256_free -#define sha256_info mbedtls_sha256_info -#define sha256_init mbedtls_sha256_init -#define sha256_process mbedtls_sha256_process -#define sha256_self_test mbedtls_sha256_self_test -#define sha256_starts mbedtls_sha256_starts -#define sha256_update mbedtls_sha256_update -#define sha384_info mbedtls_sha384_info -#define sha512 mbedtls_sha512 -#define sha512_context mbedtls_sha512_context -#define sha512_finish mbedtls_sha512_finish -#define sha512_free mbedtls_sha512_free -#define sha512_info mbedtls_sha512_info -#define sha512_init mbedtls_sha512_init -#define sha512_process mbedtls_sha512_process -#define sha512_self_test mbedtls_sha512_self_test -#define sha512_starts mbedtls_sha512_starts -#define sha512_update mbedtls_sha512_update -#define source_state mbedtls_entropy_source_state -#define ssl_cache_context mbedtls_ssl_cache_context -#define ssl_cache_entry mbedtls_ssl_cache_entry -#define ssl_cache_free mbedtls_ssl_cache_free -#define ssl_cache_get mbedtls_ssl_cache_get -#define ssl_cache_init mbedtls_ssl_cache_init -#define ssl_cache_set mbedtls_ssl_cache_set -#define ssl_cache_set_max_entries mbedtls_ssl_cache_set_max_entries -#define ssl_cache_set_timeout mbedtls_ssl_cache_set_timeout -#define ssl_check_cert_usage mbedtls_ssl_check_cert_usage -#define ssl_ciphersuite_from_id mbedtls_ssl_ciphersuite_from_id -#define ssl_ciphersuite_from_string mbedtls_ssl_ciphersuite_from_string -#define ssl_ciphersuite_t mbedtls_ssl_ciphersuite_t -#define ssl_ciphersuite_uses_ec mbedtls_ssl_ciphersuite_uses_ec -#define ssl_ciphersuite_uses_psk mbedtls_ssl_ciphersuite_uses_psk -#define ssl_close_notify mbedtls_ssl_close_notify -#define ssl_context mbedtls_ssl_context -#define ssl_cookie_check mbedtls_ssl_cookie_check -#define ssl_cookie_check_t mbedtls_ssl_cookie_check_t -#define ssl_cookie_ctx mbedtls_ssl_cookie_ctx -#define ssl_cookie_free mbedtls_ssl_cookie_free -#define ssl_cookie_init mbedtls_ssl_cookie_init -#define ssl_cookie_set_timeout mbedtls_ssl_cookie_set_timeout -#define ssl_cookie_setup mbedtls_ssl_cookie_setup -#define ssl_cookie_write mbedtls_ssl_cookie_write -#define ssl_cookie_write_t mbedtls_ssl_cookie_write_t -#define ssl_derive_keys mbedtls_ssl_derive_keys -#define ssl_dtls_replay_check mbedtls_ssl_dtls_replay_check -#define ssl_dtls_replay_update mbedtls_ssl_dtls_replay_update -#define ssl_fetch_input mbedtls_ssl_fetch_input -#define ssl_flight_item mbedtls_ssl_flight_item -#define ssl_flush_output mbedtls_ssl_flush_output -#define ssl_free mbedtls_ssl_free -#define ssl_get_alpn_protocol mbedtls_ssl_get_alpn_protocol -#define ssl_get_bytes_avail mbedtls_ssl_get_bytes_avail -#define ssl_get_ciphersuite mbedtls_ssl_get_ciphersuite -#define ssl_get_ciphersuite_id mbedtls_ssl_get_ciphersuite_id -#define ssl_get_ciphersuite_name mbedtls_ssl_get_ciphersuite_name -#define ssl_get_ciphersuite_sig_pk_alg mbedtls_ssl_get_ciphersuite_sig_pk_alg -#define ssl_get_peer_cert mbedtls_ssl_get_peer_cert -#define ssl_get_record_expansion mbedtls_ssl_get_record_expansion -#define ssl_get_session mbedtls_ssl_get_session -#define ssl_get_verify_result mbedtls_ssl_get_verify_result -#define ssl_get_version mbedtls_ssl_get_version -#define ssl_handshake mbedtls_ssl_handshake -#define ssl_handshake_client_step mbedtls_ssl_handshake_client_step -#define ssl_handshake_free mbedtls_ssl_handshake_free -#define ssl_handshake_params mbedtls_ssl_handshake_params -#define ssl_handshake_server_step mbedtls_ssl_handshake_server_step -#define ssl_handshake_step mbedtls_ssl_handshake_step -#define ssl_handshake_wrapup mbedtls_ssl_handshake_wrapup -#define ssl_hdr_len mbedtls_ssl_hdr_len -#define ssl_hs_hdr_len mbedtls_ssl_hs_hdr_len -#define ssl_hw_record_activate mbedtls_ssl_hw_record_activate -#define ssl_hw_record_finish mbedtls_ssl_hw_record_finish -#define ssl_hw_record_init mbedtls_ssl_hw_record_init -#define ssl_hw_record_read mbedtls_ssl_hw_record_read -#define ssl_hw_record_reset mbedtls_ssl_hw_record_reset -#define ssl_hw_record_write mbedtls_ssl_hw_record_write -#define ssl_init mbedtls_ssl_init -#define ssl_key_cert mbedtls_ssl_key_cert -#define ssl_legacy_renegotiation mbedtls_ssl_conf_legacy_renegotiation -#define ssl_list_ciphersuites mbedtls_ssl_list_ciphersuites -#define ssl_md_alg_from_hash mbedtls_ssl_md_alg_from_hash -#define ssl_optimize_checksum mbedtls_ssl_optimize_checksum -#define ssl_own_cert mbedtls_ssl_own_cert -#define ssl_own_key mbedtls_ssl_own_key -#define ssl_parse_certificate mbedtls_ssl_parse_certificate -#define ssl_parse_change_cipher_spec mbedtls_ssl_parse_change_cipher_spec -#define ssl_parse_finished mbedtls_ssl_parse_finished -#define ssl_pk_alg_from_sig mbedtls_ssl_pk_alg_from_sig -#define ssl_pkcs11_decrypt mbedtls_ssl_pkcs11_decrypt -#define ssl_pkcs11_key_len mbedtls_ssl_pkcs11_key_len -#define ssl_pkcs11_sign mbedtls_ssl_pkcs11_sign -#define ssl_psk_derive_premaster mbedtls_ssl_psk_derive_premaster -#define ssl_read mbedtls_ssl_read -#define ssl_read_record mbedtls_ssl_read_record -#define ssl_read_version mbedtls_ssl_read_version -#define ssl_recv_flight_completed mbedtls_ssl_recv_flight_completed -#define ssl_renegotiate mbedtls_ssl_renegotiate -#define ssl_resend mbedtls_ssl_resend -#define ssl_reset_checksum mbedtls_ssl_reset_checksum -#define ssl_send_alert_message mbedtls_ssl_send_alert_message -#define ssl_send_fatal_handshake_failure mbedtls_ssl_send_fatal_handshake_failure -#define ssl_send_flight_completed mbedtls_ssl_send_flight_completed -#define ssl_session mbedtls_ssl_session -#define ssl_session_free mbedtls_ssl_session_free -#define ssl_session_init mbedtls_ssl_session_init -#define ssl_session_reset mbedtls_ssl_session_reset -#define ssl_set_alpn_protocols mbedtls_ssl_conf_alpn_protocols -#define ssl_set_arc4_support mbedtls_ssl_conf_arc4_support -#define ssl_set_authmode mbedtls_ssl_conf_authmode -#define ssl_set_bio mbedtls_ssl_set_bio -#define ssl_set_ca_chain mbedtls_ssl_conf_ca_chain -#define ssl_set_cbc_record_splitting mbedtls_ssl_conf_cbc_record_splitting -#define ssl_set_ciphersuites mbedtls_ssl_conf_ciphersuites -#define ssl_set_ciphersuites_for_version mbedtls_ssl_conf_ciphersuites_for_version -#define ssl_set_client_transport_id mbedtls_ssl_set_client_transport_id -#define ssl_set_curves mbedtls_ssl_conf_curves -#define ssl_set_dbg mbedtls_ssl_conf_dbg -#define ssl_set_dh_param mbedtls_ssl_conf_dh_param -#define ssl_set_dh_param_ctx mbedtls_ssl_conf_dh_param_ctx -#define ssl_set_dtls_anti_replay mbedtls_ssl_conf_dtls_anti_replay -#define ssl_set_dtls_badmac_limit mbedtls_ssl_conf_dtls_badmac_limit -#define ssl_set_dtls_cookies mbedtls_ssl_conf_dtls_cookies -#define ssl_set_encrypt_then_mac mbedtls_ssl_conf_encrypt_then_mac -#define ssl_set_endpoint mbedtls_ssl_conf_endpoint -#define ssl_set_extended_master_secret mbedtls_ssl_conf_extended_master_secret -#define ssl_set_fallback mbedtls_ssl_conf_fallback -#define ssl_set_handshake_timeout mbedtls_ssl_conf_handshake_timeout -#define ssl_set_hostname mbedtls_ssl_set_hostname -#define ssl_set_max_frag_len mbedtls_ssl_conf_max_frag_len -#define ssl_set_max_version mbedtls_ssl_conf_max_version -#define ssl_set_min_version mbedtls_ssl_conf_min_version -#define ssl_set_own_cert mbedtls_ssl_conf_own_cert -#define ssl_set_psk mbedtls_ssl_conf_psk -#define ssl_set_psk_cb mbedtls_ssl_conf_psk_cb -#define ssl_set_renegotiation mbedtls_ssl_conf_renegotiation -#define ssl_set_renegotiation_enforced mbedtls_ssl_conf_renegotiation_enforced -#define ssl_set_renegotiation_period mbedtls_ssl_conf_renegotiation_period -#define ssl_set_rng mbedtls_ssl_conf_rng -#define ssl_set_session mbedtls_ssl_set_session -#define ssl_set_session_cache mbedtls_ssl_conf_session_cache -#define ssl_set_session_tickets mbedtls_ssl_conf_session_tickets -#define ssl_set_sni mbedtls_ssl_conf_sni -#define ssl_set_transport mbedtls_ssl_conf_transport -#define ssl_set_truncated_hmac mbedtls_ssl_conf_truncated_hmac -#define ssl_set_verify mbedtls_ssl_conf_verify -#define ssl_sig_from_pk mbedtls_ssl_sig_from_pk -#define ssl_states mbedtls_ssl_states -#define ssl_transform mbedtls_ssl_transform -#define ssl_transform_free mbedtls_ssl_transform_free -#define ssl_write mbedtls_ssl_write -#define ssl_write_certificate mbedtls_ssl_write_certificate -#define ssl_write_change_cipher_spec mbedtls_ssl_write_change_cipher_spec -#define ssl_write_finished mbedtls_ssl_write_finished -#define ssl_write_record mbedtls_ssl_write_record -#define ssl_write_version mbedtls_ssl_write_version -#define supported_ciphers mbedtls_cipher_supported -#define t_sint mbedtls_mpi_sint -#define t_udbl mbedtls_t_udbl -#define t_uint mbedtls_mpi_uint -#define test_ca_crt mbedtls_test_ca_crt -#define test_ca_crt_ec mbedtls_test_ca_crt_ec -#define test_ca_crt_rsa mbedtls_test_ca_crt_rsa -#define test_ca_key mbedtls_test_ca_key -#define test_ca_key_ec mbedtls_test_ca_key_ec -#define test_ca_key_rsa mbedtls_test_ca_key_rsa -#define test_ca_list mbedtls_test_cas_pem -#define test_ca_pwd mbedtls_test_ca_pwd -#define test_ca_pwd_ec mbedtls_test_ca_pwd_ec -#define test_ca_pwd_rsa mbedtls_test_ca_pwd_rsa -#define test_cli_crt mbedtls_test_cli_crt -#define test_cli_crt_ec mbedtls_test_cli_crt_ec -#define test_cli_crt_rsa mbedtls_test_cli_crt_rsa -#define test_cli_key mbedtls_test_cli_key -#define test_cli_key_ec mbedtls_test_cli_key_ec -#define test_cli_key_rsa mbedtls_test_cli_key_rsa -#define test_srv_crt mbedtls_test_srv_crt -#define test_srv_crt_ec mbedtls_test_srv_crt_ec -#define test_srv_crt_rsa mbedtls_test_srv_crt_rsa -#define test_srv_key mbedtls_test_srv_key -#define test_srv_key_ec mbedtls_test_srv_key_ec -#define test_srv_key_rsa mbedtls_test_srv_key_rsa -#define threading_mutex_t mbedtls_threading_mutex_t -#define threading_set_alt mbedtls_threading_set_alt -#define timing_self_test mbedtls_timing_self_test -#define version_check_feature mbedtls_version_check_feature -#define version_get_number mbedtls_version_get_number -#define version_get_string mbedtls_version_get_string -#define version_get_string_full mbedtls_version_get_string_full -#define x509_bitstring mbedtls_x509_bitstring -#define x509_buf mbedtls_x509_buf -#define x509_crl mbedtls_x509_crl -#define x509_crl_entry mbedtls_x509_crl_entry -#define x509_crl_free mbedtls_x509_crl_free -#define x509_crl_info mbedtls_x509_crl_info -#define x509_crl_init mbedtls_x509_crl_init -#define x509_crl_parse mbedtls_x509_crl_parse -#define x509_crl_parse_der mbedtls_x509_crl_parse_der -#define x509_crl_parse_file mbedtls_x509_crl_parse_file -#define x509_crt mbedtls_x509_crt -#define x509_crt_check_extended_key_usage mbedtls_x509_crt_check_extended_key_usage -#define x509_crt_check_key_usage mbedtls_x509_crt_check_key_usage -#define x509_crt_free mbedtls_x509_crt_free -#define x509_crt_info mbedtls_x509_crt_info -#define x509_crt_init mbedtls_x509_crt_init -#define x509_crt_parse mbedtls_x509_crt_parse -#define x509_crt_parse_der mbedtls_x509_crt_parse_der -#define x509_crt_parse_file mbedtls_x509_crt_parse_file -#define x509_crt_parse_path mbedtls_x509_crt_parse_path -#define x509_crt_revoked mbedtls_x509_crt_is_revoked -#define x509_crt_verify mbedtls_x509_crt_verify -#define x509_csr mbedtls_x509_csr -#define x509_csr_free mbedtls_x509_csr_free -#define x509_csr_info mbedtls_x509_csr_info -#define x509_csr_init mbedtls_x509_csr_init -#define x509_csr_parse mbedtls_x509_csr_parse -#define x509_csr_parse_der mbedtls_x509_csr_parse_der -#define x509_csr_parse_file mbedtls_x509_csr_parse_file -#define x509_dn_gets mbedtls_x509_dn_gets -#define x509_get_alg mbedtls_x509_get_alg -#define x509_get_alg_null mbedtls_x509_get_alg_null -#define x509_get_ext mbedtls_x509_get_ext -#define x509_get_name mbedtls_x509_get_name -#define x509_get_rsassa_pss_params mbedtls_x509_get_rsassa_pss_params -#define x509_get_serial mbedtls_x509_get_serial -#define x509_get_sig mbedtls_x509_get_sig -#define x509_get_sig_alg mbedtls_x509_get_sig_alg -#define x509_get_time mbedtls_x509_get_time -#define x509_key_size_helper mbedtls_x509_key_size_helper -#define x509_name mbedtls_x509_name -#define x509_self_test mbedtls_x509_self_test -#define x509_sequence mbedtls_x509_sequence -#define x509_serial_gets mbedtls_x509_serial_gets -#define x509_set_extension mbedtls_x509_set_extension -#define x509_sig_alg_gets mbedtls_x509_sig_alg_gets -#define x509_string_to_names mbedtls_x509_string_to_names -#define x509_time mbedtls_x509_time -#define x509_time_expired mbedtls_x509_time_is_past -#define x509_time_future mbedtls_x509_time_is_future -#define x509_write_extensions mbedtls_x509_write_extensions -#define x509_write_names mbedtls_x509_write_names -#define x509_write_sig mbedtls_x509_write_sig -#define x509write_cert mbedtls_x509write_cert -#define x509write_crt_der mbedtls_x509write_crt_der -#define x509write_crt_free mbedtls_x509write_crt_free -#define x509write_crt_init mbedtls_x509write_crt_init -#define x509write_crt_pem mbedtls_x509write_crt_pem -#define x509write_crt_set_authority_key_identifier mbedtls_x509write_crt_set_authority_key_identifier -#define x509write_crt_set_basic_constraints mbedtls_x509write_crt_set_basic_constraints -#define x509write_crt_set_extension mbedtls_x509write_crt_set_extension -#define x509write_crt_set_issuer_key mbedtls_x509write_crt_set_issuer_key -#define x509write_crt_set_issuer_name mbedtls_x509write_crt_set_issuer_name -#define x509write_crt_set_key_usage mbedtls_x509write_crt_set_key_usage -#define x509write_crt_set_md_alg mbedtls_x509write_crt_set_md_alg -#define x509write_crt_set_ns_cert_type mbedtls_x509write_crt_set_ns_cert_type -#define x509write_crt_set_serial mbedtls_x509write_crt_set_serial -#define x509write_crt_set_subject_key mbedtls_x509write_crt_set_subject_key -#define x509write_crt_set_subject_key_identifier mbedtls_x509write_crt_set_subject_key_identifier -#define x509write_crt_set_subject_name mbedtls_x509write_crt_set_subject_name -#define x509write_crt_set_validity mbedtls_x509write_crt_set_validity -#define x509write_crt_set_version mbedtls_x509write_crt_set_version -#define x509write_csr mbedtls_x509write_csr -#define x509write_csr_der mbedtls_x509write_csr_der -#define x509write_csr_free mbedtls_x509write_csr_free -#define x509write_csr_init mbedtls_x509write_csr_init -#define x509write_csr_pem mbedtls_x509write_csr_pem -#define x509write_csr_set_extension mbedtls_x509write_csr_set_extension -#define x509write_csr_set_key mbedtls_x509write_csr_set_key -#define x509write_csr_set_key_usage mbedtls_x509write_csr_set_key_usage -#define x509write_csr_set_md_alg mbedtls_x509write_csr_set_md_alg -#define x509write_csr_set_ns_cert_type mbedtls_x509write_csr_set_ns_cert_type -#define x509write_csr_set_subject_name mbedtls_x509write_csr_set_subject_name -#define xtea_context mbedtls_xtea_context -#define xtea_crypt_cbc mbedtls_xtea_crypt_cbc -#define xtea_crypt_ecb mbedtls_xtea_crypt_ecb -#define xtea_free mbedtls_xtea_free -#define xtea_init mbedtls_xtea_init -#define xtea_self_test mbedtls_xtea_self_test -#define xtea_setup mbedtls_xtea_setup - -#endif /* compat-1.3.h */ -#endif /* MBEDTLS_DEPRECATED_REMOVED */ diff --git a/third_party/mbedtls/config.h b/third_party/mbedtls/config.h index 6173157c8..ae1c75323 100644 --- a/third_party/mbedtls/config.h +++ b/third_party/mbedtls/config.h @@ -1,159 +1,138 @@ -/* clang-format off */ +#ifndef MBEDTLS_CONFIG_H_ +#define MBEDTLS_CONFIG_H_ -/** - * \file config.h - * - * \brief Configuration options (set of defines) - * - * This set of compile-time options may be used to enable - * or disable features selectively, and reduce the global - * memory footprint. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MBEDTLS_CONFIG_H -#define MBEDTLS_CONFIG_H - -#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) -#define _CRT_SECURE_NO_DEPRECATE 1 +/* protocols */ +#define MBEDTLS_SSL_PROTO_TLS1_2 +#ifndef TINY +#define MBEDTLS_SSL_PROTO_TLS1_1 +#define MBEDTLS_SSL_PROTO_TLS1 +/*#define MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL*/ +/*#define MBEDTLS_SSL_PROTO_DTLS*/ +/*#define MBEDTLS_SSL_PROTO_SSL3*/ +/*#define MBEDTLS_ZLIB_SUPPORT*/ #endif -/** - * \name SECTION: System support - * - * This section sets system specific settings. - * \{ - */ +/* hash functions */ +#define MBEDTLS_SHA1_C +#define MBEDTLS_SHA256_C +#define MBEDTLS_SHA512_C +#ifdef MBEDTLS_SSL_PROTO_TLS1 +#define MBEDTLS_MD5_C +#endif -/** - * \def MBEDTLS_HAVE_ASM - * - * The compiler has support for asm(). - * - * Requires support for asm() in compiler. - * - * Used in: - * library/aria.c - * library/timing.c - * include/mbedtls/bn_mul.h - * - * Required by: - * MBEDTLS_AESNI_C - * MBEDTLS_PADLOCK_C - * - * Comment to disable the use of assembly code. - */ +/* random numbers */ +#define ENTROPY_HAVE_STRONG +#define MBEDTLS_CTR_DRBG_C +#ifndef TINY +#define MBEDTLS_HMAC_DRBG_C +/*#define MBEDTLS_ENTROPY_FORCE_SHA256*/ +/*#define MBEDTLS_TEST_NULL_ENTROPY*/ +#endif + +/* ciphers */ +#define MBEDTLS_AES_C +#ifndef TINY +#define MBEDTLS_CHACHA20_C +#define MBEDTLS_POLY1305_C +#define MBEDTLS_CHACHAPOLY_C +#endif +#ifdef MBEDTLS_SSL_PROTO_TLS1 +#define MBEDTLS_DES_C +#endif +/*#define MBEDTLS_CIPHER_NULL_CIPHER*/ +/*#define MBEDTLS_ENABLE_WEAK_CIPHERSUITES*/ +/*#define MBEDTLS_REMOVE_3DES_CIPHERSUITES*/ + +/* block modes */ +#define MBEDTLS_GCM_C +#ifndef TINY +/*#define MBEDTLS_CCM_C*/ +#define MBEDTLS_CIPHER_MODE_CBC +/*#define MBEDTLS_CIPHER_MODE_CFB*/ +/*#define MBEDTLS_CIPHER_MODE_CTR*/ +/*#define MBEDTLS_CIPHER_MODE_OFB*/ +/*#define MBEDTLS_CIPHER_MODE_XTS*/ +#endif + +/* key exchange */ +#define MBEDTLS_RSA_C +#define MBEDTLS_KEY_EXCHANGE_RSA_ENABLED +#ifndef TINY +#define MBEDTLS_ECP_C +#define MBEDTLS_ECDH_C +#define MBEDTLS_ECDH_VARIANT_EVEREST_ENABLED +#define MBEDTLS_ECDSA_C +#define MBEDTLS_ECDSA_DETERMINISTIC +#define MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED +#define MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED +/*#define MBEDTLS_DHM_C*/ +/*#define MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED*/ +/*#define MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED*/ +/*#define MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED*/ +/*#define MBEDTLS_KEY_EXCHANGE_PSK_ENABLED*/ +/*#define MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED*/ +/*#define MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED*/ +/*#define MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED*/ +#endif + +/* eliptic curves */ +#ifndef TINY +#define MBEDTLS_ECP_DP_SECP256R1_ENABLED +#define MBEDTLS_ECP_DP_SECP384R1_ENABLED +#define MBEDTLS_ECP_DP_CURVE25519_ENABLED +/*#define MBEDTLS_ECP_DP_SECP192R1_ENABLED*/ +/*#define MBEDTLS_ECP_DP_SECP224R1_ENABLED*/ +/*#define MBEDTLS_ECP_DP_SECP521R1_ENABLED*/ +/*#define MBEDTLS_ECP_DP_SECP192K1_ENABLED*/ +/*#define MBEDTLS_ECP_DP_SECP224K1_ENABLED*/ +/*#define MBEDTLS_ECP_DP_SECP256K1_ENABLED*/ +/*#define MBEDTLS_ECP_DP_BP256R1_ENABLED*/ +/*#define MBEDTLS_ECP_DP_BP384R1_ENABLED*/ +/*#define MBEDTLS_ECP_DP_BP512R1_ENABLED*/ +/*#define MBEDTLS_ECP_DP_CURVE448_ENABLED*/ +#endif + +#define MBEDTLS_X509_CHECK_KEY_USAGE +#define MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE +/*#define MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3*/ +/*#define MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION*/ + +/* boringssl and mbedtls hold considerable disagreement */ +#define MBEDTLS_CTR_DRBG_RESEED_INTERVAL 4096 +#define MBEDTLS_HMAC_DRBG_RESEED_INTERVAL 4096 +#define MBEDTLS_ENTROPY_MAX_SOURCES 4 +#define MBEDTLS_X509_MAX_INTERMEDIATE_CA 8 + +/* boosts performance from 230k qps to 330k */ +#ifndef TINY +#ifndef __FSANITIZE_ADDRESS__ #define MBEDTLS_HAVE_ASM - -/** - * \def MBEDTLS_NO_UDBL_DIVISION - * - * The platform lacks support for double-width integer division (64-bit - * division on a 32-bit platform, 128-bit division on a 64-bit platform). - * - * Used in: - * include/mbedtls/bignum.h - * library/bignum.c - * - * The bignum code uses double-width division to speed up some operations. - * Double-width division is often implemented in software that needs to - * be linked with the program. The presence of a double-width integer - * type is usually detected automatically through preprocessor macros, - * but the automatic detection cannot know whether the code needs to - * and can be linked with an implementation of division for that type. - * By default division is assumed to be usable if the type is present. - * Uncomment this option to prevent the use of double-width division. - * - * Note that division for the native integer type is always required. - * Furthermore, a 64-bit type is always required even on a 32-bit - * platform, but it need not support multiplication or division. In some - * cases it is also desirable to disable some double-width operations. For - * example, if double-width division is implemented in software, disabling - * it can reduce code size in some embedded targets. - */ -//#define MBEDTLS_NO_UDBL_DIVISION - -/** - * \def MBEDTLS_NO_64BIT_MULTIPLICATION - * - * The platform lacks support for 32x32 -> 64-bit multiplication. - * - * Used in: - * library/poly1305.c - * - * Some parts of the library may use multiplication of two unsigned 32-bit - * operands with a 64-bit result in order to speed up computations. On some - * platforms, this is not available in hardware and has to be implemented in - * software, usually in a library provided by the toolchain. - * - * Sometimes it is not desirable to have to link to that library. This option - * removes the dependency of that library on platforms that lack a hardware - * 64-bit multiplier by embedding a software implementation in Mbed TLS. - * - * Note that depending on the compiler, this may decrease performance compared - * to using the library function provided by the toolchain. - */ -//#define MBEDTLS_NO_64BIT_MULTIPLICATION - -/** - * \def MBEDTLS_HAVE_SSE2 - * - * CPU supports SSE2 instruction set. - * - * Uncomment if the CPU supports SSE2 (IA-32 specific). - */ +#define MBEDTLS_HAVE_X86_64 #define MBEDTLS_HAVE_SSE2 +#define MBEDTLS_AESNI_C +#endif +#endif -/** - * \def MBEDTLS_HAVE_TIME - * - * System has time.h and time(). - * The time does not need to be correct, only time differences are used, - * by contrast with MBEDTLS_HAVE_TIME_DATE - * - * Defining MBEDTLS_HAVE_TIME allows you to specify MBEDTLS_PLATFORM_TIME_ALT, - * MBEDTLS_PLATFORM_TIME_MACRO, MBEDTLS_PLATFORM_TIME_TYPE_MACRO and - * MBEDTLS_PLATFORM_STD_TIME. - * - * Comment if your system does not support time functions - */ +#ifndef NDEBUG +#define MBEDTLS_CHECK_PARAMS +#endif + +#define MBEDTLS_MD5_SMALLER +#define MBEDTLS_SHA1_SMALLER +#ifdef TINY +#define MBEDTLS_SHA256_SMALLER +#define MBEDTLS_SHA512_SMALLER +#define MBEDTLS_AES_ROM_TABLES +#define MBEDTLS_AES_FEWER_TABLES +#else +#define MBEDTLS_ECP_NIST_OPTIM +#endif + +#define MBEDTLS_PLATFORM_C #define MBEDTLS_HAVE_TIME - -/** - * \def MBEDTLS_HAVE_TIME_DATE - * - * System has time.h, time(), and an implementation for - * mbedtls_platform_gmtime_r() (see below). - * The time needs to be correct (not necessarily very accurate, but at least - * the date should be correct). This is used to verify the validity period of - * X.509 certificates. - * - * Comment if your system does not have a correct clock. - * - * \note mbedtls_platform_gmtime_r() is an abstraction in platform_util.h that - * behaves similarly to the gmtime_r() function from the C standard. Refer to - * the documentation for mbedtls_platform_gmtime_r() for more information. - * - * \note It is possible to configure an implementation for - * mbedtls_platform_gmtime_r() at compile-time by using the macro - * MBEDTLS_PLATFORM_GMTIME_R_ALT. - */ #define MBEDTLS_HAVE_TIME_DATE +#define MBEDTLS_DEPRECATED_REMOVED +#define MBEDTLS_NO_PLATFORM_ENTROPY /** * \def MBEDTLS_PLATFORM_MEMORY @@ -166,393 +145,16 @@ * * Enabling MBEDTLS_PLATFORM_MEMORY without the * MBEDTLS_PLATFORM_{FREE,CALLOC}_MACROs will provide - * "mbedtls_platform_set_calloc_free()" allowing you to set an alternative calloc() and - * free() function pointer at runtime. + * "mbedtls_platform_set_calloc_free()" allowing you to set an alternative + * calloc() and free() function pointer at runtime. * * Enabling MBEDTLS_PLATFORM_MEMORY and specifying * MBEDTLS_PLATFORM_{CALLOC,FREE}_MACROs will allow you to specify the * alternate function at compile time. * - * Requires: MBEDTLS_PLATFORM_C - * * Enable this layer to allow use of alternative memory allocators. */ -//#define MBEDTLS_PLATFORM_MEMORY - -/** - * \def MBEDTLS_PLATFORM_NO_STD_FUNCTIONS - * - * Do not assign standard functions in the platform layer (e.g. calloc() to - * MBEDTLS_PLATFORM_STD_CALLOC and printf() to MBEDTLS_PLATFORM_STD_PRINTF) - * - * This makes sure there are no linking errors on platforms that do not support - * these functions. You will HAVE to provide alternatives, either at runtime - * via the platform_set_xxx() functions or at compile time by setting - * the MBEDTLS_PLATFORM_STD_XXX defines, or enabling a - * MBEDTLS_PLATFORM_XXX_MACRO. - * - * Requires: MBEDTLS_PLATFORM_C - * - * Uncomment to prevent default assignment of standard functions in the - * platform layer. - */ -//#define MBEDTLS_PLATFORM_NO_STD_FUNCTIONS - -/** - * \def MBEDTLS_PLATFORM_EXIT_ALT - * - * MBEDTLS_PLATFORM_XXX_ALT: Uncomment a macro to let mbed TLS support the - * function in the platform abstraction layer. - * - * Example: In case you uncomment MBEDTLS_PLATFORM_PRINTF_ALT, mbed TLS will - * provide a function "mbedtls_platform_set_printf()" that allows you to set an - * alternative printf function pointer. - * - * All these define require MBEDTLS_PLATFORM_C to be defined! - * - * \note MBEDTLS_PLATFORM_SNPRINTF_ALT is required on Windows; - * it will be enabled automatically by check_config.h - * - * \warning MBEDTLS_PLATFORM_XXX_ALT cannot be defined at the same time as - * MBEDTLS_PLATFORM_XXX_MACRO! - * - * Requires: MBEDTLS_PLATFORM_TIME_ALT requires MBEDTLS_HAVE_TIME - * - * Uncomment a macro to enable alternate implementation of specific base - * platform function - */ -//#define MBEDTLS_PLATFORM_EXIT_ALT -//#define MBEDTLS_PLATFORM_TIME_ALT -//#define MBEDTLS_PLATFORM_FPRINTF_ALT -//#define MBEDTLS_PLATFORM_PRINTF_ALT -//#define MBEDTLS_PLATFORM_SNPRINTF_ALT -//#define MBEDTLS_PLATFORM_VSNPRINTF_ALT -//#define MBEDTLS_PLATFORM_NV_SEED_ALT -//#define MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT - -/** - * \def MBEDTLS_DEPRECATED_WARNING - * - * Mark deprecated functions and features so that they generate a warning if - * used. Functionality deprecated in one version will usually be removed in the - * next version. You can enable this to help you prepare the transition to a - * new major version by making sure your code is not using this functionality. - * - * This only works with GCC and Clang. With other compilers, you may want to - * use MBEDTLS_DEPRECATED_REMOVED - * - * Uncomment to get warnings on using deprecated functions and features. - */ -//#define MBEDTLS_DEPRECATED_WARNING - -/** - * \def MBEDTLS_DEPRECATED_REMOVED - * - * Remove deprecated functions and features so that they generate an error if - * used. Functionality deprecated in one version will usually be removed in the - * next version. You can enable this to help you prepare the transition to a - * new major version by making sure your code is not using this functionality. - * - * Uncomment to get errors on using deprecated functions and features. - */ -#define MBEDTLS_DEPRECATED_REMOVED - -/** - * \def MBEDTLS_CHECK_PARAMS - * - * This configuration option controls whether the library validates more of - * the parameters passed to it. - * - * When this flag is not defined, the library only attempts to validate an - * input parameter if: (1) they may come from the outside world (such as the - * network, the filesystem, etc.) or (2) not validating them could result in - * internal memory errors such as overflowing a buffer controlled by the - * library. On the other hand, it doesn't attempt to validate parameters whose - * values are fully controlled by the application (such as pointers). - * - * When this flag is defined, the library additionally attempts to validate - * parameters that are fully controlled by the application, and should always - * be valid if the application code is fully correct and trusted. - * - * For example, when a function accepts as input a pointer to a buffer that may - * contain untrusted data, and its documentation mentions that this pointer - * must not be NULL: - * - The pointer is checked to be non-NULL only if this option is enabled. - * - The content of the buffer is always validated. - * - * When this flag is defined, if a library function receives a parameter that - * is invalid: - * 1. The function will invoke the macro MBEDTLS_PARAM_FAILED(). - * 2. If MBEDTLS_PARAM_FAILED() did not terminate the program, the function - * will immediately return. If the function returns an Mbed TLS error code, - * the error code in this case is MBEDTLS_ERR_xxx_BAD_INPUT_DATA. - * - * When defining this flag, you also need to arrange a definition for - * MBEDTLS_PARAM_FAILED(). You can do this by any of the following methods: - * - By default, the library defines MBEDTLS_PARAM_FAILED() to call a - * function mbedtls_param_failed(), but the library does not define this - * function. If you do not make any other arrangements, you must provide - * the function mbedtls_param_failed() in your application. - * See `platform_util.h` for its prototype. - * - If you enable the macro #MBEDTLS_CHECK_PARAMS_ASSERT, then the - * library defines MBEDTLS_PARAM_FAILED(\c cond) to be `assert(cond)`. - * You can still supply an alternative definition of - * MBEDTLS_PARAM_FAILED(), which may call `assert`. - * - If you define a macro MBEDTLS_PARAM_FAILED() before including `config.h` - * or you uncomment the definition of MBEDTLS_PARAM_FAILED() in `config.h`, - * the library will call the macro that you defined and will not supply - * its own version. Note that if MBEDTLS_PARAM_FAILED() calls `assert`, - * you need to enable #MBEDTLS_CHECK_PARAMS_ASSERT so that library source - * files include ``. - * - * Uncomment to enable validation of application-controlled parameters. - */ -//#define MBEDTLS_CHECK_PARAMS - -/** - * \def MBEDTLS_CHECK_PARAMS_ASSERT - * - * Allow MBEDTLS_PARAM_FAILED() to call `assert`, and make it default to - * `assert`. This macro is only used if #MBEDTLS_CHECK_PARAMS is defined. - * - * If this macro is not defined, then MBEDTLS_PARAM_FAILED() defaults to - * calling a function mbedtls_param_failed(). See the documentation of - * #MBEDTLS_CHECK_PARAMS for details. - * - * Uncomment to allow MBEDTLS_PARAM_FAILED() to call `assert`. - */ -//#define MBEDTLS_CHECK_PARAMS_ASSERT - -/* \} name SECTION: System support */ - -/** - * \name SECTION: mbed TLS feature support - * - * This section sets support for features that are or are not needed - * within the modules that are enabled. - * \{ - */ - -/** - * \def MBEDTLS_TIMING_ALT - * - * Uncomment to provide your own alternate implementation for mbedtls_timing_hardclock(), - * mbedtls_timing_get_timer(), mbedtls_set_alarm(), mbedtls_set/get_delay() - * - * Only works if you have MBEDTLS_TIMING_C enabled. - * - * You will need to provide a header "timing_alt.h" and an implementation at - * compile time. - */ -//#define MBEDTLS_TIMING_ALT - -/** - * \def MBEDTLS_AES_ALT - * - * MBEDTLS__MODULE_NAME__ALT: Uncomment a macro to let mbed TLS use your - * alternate core implementation of a symmetric crypto, an arithmetic or hash - * module (e.g. platform specific assembly optimized implementations). Keep - * in mind that the function prototypes should remain the same. - * - * This replaces the whole module. If you only want to replace one of the - * functions, use one of the MBEDTLS__FUNCTION_NAME__ALT flags. - * - * Example: In case you uncomment MBEDTLS_AES_ALT, mbed TLS will no longer - * provide the "struct mbedtls_aes_context" definition and omit the base - * function declarations and implementations. "aes_alt.h" will be included from - * "aes.h" to include the new function definitions. - * - * Uncomment a macro to enable alternate implementation of the corresponding - * module. - * - * \warning MD2, MD4, MD5, ARC4, DES and SHA-1 are considered weak and their - * use constitutes a security risk. If possible, we recommend - * avoiding dependencies on them, and considering stronger message - * digests and ciphers instead. - * - */ -//#define MBEDTLS_AES_ALT -//#define MBEDTLS_ARC4_ALT -//#define MBEDTLS_ARIA_ALT -//#define MBEDTLS_BLOWFISH_ALT -//#define MBEDTLS_CAMELLIA_ALT -//#define MBEDTLS_CCM_ALT -//#define MBEDTLS_CHACHA20_ALT -//#define MBEDTLS_CHACHAPOLY_ALT -//#define MBEDTLS_CMAC_ALT -//#define MBEDTLS_DES_ALT -//#define MBEDTLS_DHM_ALT -//#define MBEDTLS_ECJPAKE_ALT -//#define MBEDTLS_GCM_ALT -//#define MBEDTLS_NIST_KW_ALT -//#define MBEDTLS_MD2_ALT -//#define MBEDTLS_MD4_ALT -//#define MBEDTLS_MD5_ALT -//#define MBEDTLS_POLY1305_ALT -//#define MBEDTLS_RIPEMD160_ALT -//#define MBEDTLS_RSA_ALT -//#define MBEDTLS_SHA1_ALT -//#define MBEDTLS_SHA256_ALT -//#define MBEDTLS_SHA512_ALT -//#define MBEDTLS_XTEA_ALT - -/* - * When replacing the elliptic curve module, pleace consider, that it is - * implemented with two .c files: - * - ecp.c - * - ecp_curves.c - * You can replace them very much like all the other MBEDTLS__MODULE_NAME__ALT - * macros as described above. The only difference is that you have to make sure - * that you provide functionality for both .c files. - */ -//#define MBEDTLS_ECP_ALT - -/** - * \def MBEDTLS_MD2_PROCESS_ALT - * - * MBEDTLS__FUNCTION_NAME__ALT: Uncomment a macro to let mbed TLS use you - * alternate core implementation of symmetric crypto or hash function. Keep in - * mind that function prototypes should remain the same. - * - * This replaces only one function. The header file from mbed TLS is still - * used, in contrast to the MBEDTLS__MODULE_NAME__ALT flags. - * - * Example: In case you uncomment MBEDTLS_SHA256_PROCESS_ALT, mbed TLS will - * no longer provide the mbedtls_sha1_process() function, but it will still provide - * the other function (using your mbedtls_sha1_process() function) and the definition - * of mbedtls_sha1_context, so your implementation of mbedtls_sha1_process must be compatible - * with this definition. - * - * \note Because of a signature change, the core AES encryption and decryption routines are - * currently named mbedtls_aes_internal_encrypt and mbedtls_aes_internal_decrypt, - * respectively. When setting up alternative implementations, these functions should - * be overridden, but the wrapper functions mbedtls_aes_decrypt and mbedtls_aes_encrypt - * must stay untouched. - * - * \note If you use the AES_xxx_ALT macros, then is is recommended to also set - * MBEDTLS_AES_ROM_TABLES in order to help the linker garbage-collect the AES - * tables. - * - * Uncomment a macro to enable alternate implementation of the corresponding - * function. - * - * \warning MD2, MD4, MD5, DES and SHA-1 are considered weak and their use - * constitutes a security risk. If possible, we recommend avoiding - * dependencies on them, and considering stronger message digests - * and ciphers instead. - * - * \warning If both MBEDTLS_ECDSA_SIGN_ALT and MBEDTLS_ECDSA_DETERMINISTIC are - * enabled, then the deterministic ECDH signature functions pass the - * the static HMAC-DRBG as RNG to mbedtls_ecdsa_sign(). Therefore - * alternative implementations should use the RNG only for generating - * the ephemeral key and nothing else. If this is not possible, then - * MBEDTLS_ECDSA_DETERMINISTIC should be disabled and an alternative - * implementation should be provided for mbedtls_ecdsa_sign_det_ext() - * (and for mbedtls_ecdsa_sign_det() too if backward compatibility is - * desirable). - * - */ -//#define MBEDTLS_MD2_PROCESS_ALT -//#define MBEDTLS_MD4_PROCESS_ALT -//#define MBEDTLS_MD5_PROCESS_ALT -//#define MBEDTLS_RIPEMD160_PROCESS_ALT -//#define MBEDTLS_SHA1_PROCESS_ALT -//#define MBEDTLS_SHA256_PROCESS_ALT -//#define MBEDTLS_SHA512_PROCESS_ALT -//#define MBEDTLS_DES_SETKEY_ALT -//#define MBEDTLS_DES_CRYPT_ECB_ALT -//#define MBEDTLS_DES3_CRYPT_ECB_ALT -//#define MBEDTLS_AES_SETKEY_ENC_ALT -//#define MBEDTLS_AES_SETKEY_DEC_ALT -//#define MBEDTLS_AES_ENCRYPT_ALT -//#define MBEDTLS_AES_DECRYPT_ALT -//#define MBEDTLS_ECDH_GEN_PUBLIC_ALT -//#define MBEDTLS_ECDH_COMPUTE_SHARED_ALT -//#define MBEDTLS_ECDSA_VERIFY_ALT -//#define MBEDTLS_ECDSA_SIGN_ALT -//#define MBEDTLS_ECDSA_GENKEY_ALT - -/** - * \def MBEDTLS_ECP_INTERNAL_ALT - * - * Expose a part of the internal interface of the Elliptic Curve Point module. - * - * MBEDTLS_ECP__FUNCTION_NAME__ALT: Uncomment a macro to let mbed TLS use your - * alternative core implementation of elliptic curve arithmetic. Keep in mind - * that function prototypes should remain the same. - * - * This partially replaces one function. The header file from mbed TLS is still - * used, in contrast to the MBEDTLS_ECP_ALT flag. The original implementation - * is still present and it is used for group structures not supported by the - * alternative. - * - * The original implementation can in addition be removed by setting the - * MBEDTLS_ECP_NO_FALLBACK option, in which case any function for which the - * corresponding MBEDTLS_ECP__FUNCTION_NAME__ALT macro is defined will not be - * able to fallback to curves not supported by the alternative implementation. - * - * Any of these options become available by defining MBEDTLS_ECP_INTERNAL_ALT - * and implementing the following functions: - * unsigned char mbedtls_internal_ecp_grp_capable( - * const mbedtls_ecp_group *grp ) - * int mbedtls_internal_ecp_init( const mbedtls_ecp_group *grp ) - * void mbedtls_internal_ecp_free( const mbedtls_ecp_group *grp ) - * The mbedtls_internal_ecp_grp_capable function should return 1 if the - * replacement functions implement arithmetic for the given group and 0 - * otherwise. - * The functions mbedtls_internal_ecp_init and mbedtls_internal_ecp_free are - * called before and after each point operation and provide an opportunity to - * implement optimized set up and tear down instructions. - * - * Example: In case you set MBEDTLS_ECP_INTERNAL_ALT and - * MBEDTLS_ECP_DOUBLE_JAC_ALT, mbed TLS will still provide the ecp_double_jac() - * function, but will use your mbedtls_internal_ecp_double_jac() if the group - * for the operation is supported by your implementation (i.e. your - * mbedtls_internal_ecp_grp_capable() function returns 1 for this group). If the - * group is not supported by your implementation, then the original mbed TLS - * implementation of ecp_double_jac() is used instead, unless this fallback - * behaviour is disabled by setting MBEDTLS_ECP_NO_FALLBACK (in which case - * ecp_double_jac() will return MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE). - * - * The function prototypes and the definition of mbedtls_ecp_group and - * mbedtls_ecp_point will not change based on MBEDTLS_ECP_INTERNAL_ALT, so your - * implementation of mbedtls_internal_ecp__function_name__ must be compatible - * with their definitions. - * - * Uncomment a macro to enable alternate implementation of the corresponding - * function. - */ -/* Required for all the functions in this section */ -//#define MBEDTLS_ECP_INTERNAL_ALT -/* Turn off software fallback for curves not supported in hardware */ -//#define MBEDTLS_ECP_NO_FALLBACK -/* Support for Weierstrass curves with Jacobi representation */ -//#define MBEDTLS_ECP_RANDOMIZE_JAC_ALT -//#define MBEDTLS_ECP_ADD_MIXED_ALT -//#define MBEDTLS_ECP_DOUBLE_JAC_ALT -//#define MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT -//#define MBEDTLS_ECP_NORMALIZE_JAC_ALT -/* Support for curves with Montgomery arithmetic */ -//#define MBEDTLS_ECP_DOUBLE_ADD_MXZ_ALT -//#define MBEDTLS_ECP_RANDOMIZE_MXZ_ALT -//#define MBEDTLS_ECP_NORMALIZE_MXZ_ALT - -/** - * \def MBEDTLS_TEST_NULL_ENTROPY - * - * Enables testing and use of mbed TLS without any configured entropy sources. - * This permits use of the library on platforms before an entropy source has - * been integrated (see for example the MBEDTLS_ENTROPY_HARDWARE_ALT or the - * MBEDTLS_ENTROPY_NV_SEED switches). - * - * WARNING! This switch MUST be disabled in production builds, and is suitable - * only for development. - * Enabling the switch negates any security provided by the library. - * - * Requires MBEDTLS_ENTROPY_C, MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES - * - */ -//#define MBEDTLS_TEST_NULL_ENTROPY +/*#define MBEDTLS_PLATFORM_MEMORY*/ /** * \def MBEDTLS_ENTROPY_HARDWARE_ALT @@ -567,125 +169,6 @@ */ #define MBEDTLS_ENTROPY_HARDWARE_ALT -/** - * \def MBEDTLS_AES_ROM_TABLES - * - * Use precomputed AES tables stored in ROM. - * - * Uncomment this macro to use precomputed AES tables stored in ROM. - * Comment this macro to generate AES tables in RAM at runtime. - * - * Tradeoff: Using precomputed ROM tables reduces RAM usage by ~8kb - * (or ~2kb if \c MBEDTLS_AES_FEWER_TABLES is used) and reduces the - * initialization time before the first AES operation can be performed. - * It comes at the cost of additional ~8kb ROM use (resp. ~2kb if \c - * MBEDTLS_AES_FEWER_TABLES below is used), and potentially degraded - * performance if ROM access is slower than RAM access. - * - * This option is independent of \c MBEDTLS_AES_FEWER_TABLES. - * - */ -#define MBEDTLS_AES_ROM_TABLES - -/** - * \def MBEDTLS_AES_FEWER_TABLES - * - * Use less ROM/RAM for AES tables. - * - * Uncommenting this macro omits 75% of the AES tables from - * ROM / RAM (depending on the value of \c MBEDTLS_AES_ROM_TABLES) - * by computing their values on the fly during operations - * (the tables are entry-wise rotations of one another). - * - * Tradeoff: Uncommenting this reduces the RAM / ROM footprint - * by ~6kb but at the cost of more arithmetic operations during - * runtime. Specifically, one has to compare 4 accesses within - * different tables to 4 accesses with additional arithmetic - * operations within the same table. The performance gain/loss - * depends on the system and memory details. - * - * This option is independent of \c MBEDTLS_AES_ROM_TABLES. - * - */ -//#define MBEDTLS_AES_FEWER_TABLES - -/** - * \def MBEDTLS_CAMELLIA_SMALL_MEMORY - * - * Use less ROM for the Camellia implementation (saves about 768 bytes). - * - * Uncomment this macro to use less memory for Camellia. - */ -//#define MBEDTLS_CAMELLIA_SMALL_MEMORY - -/** - * \def MBEDTLS_CIPHER_MODE_CBC - * - * Enable Cipher Block Chaining mode (CBC) for symmetric ciphers. - */ -#define MBEDTLS_CIPHER_MODE_CBC - -/** - * \def MBEDTLS_CIPHER_MODE_CFB - * - * Enable Cipher Feedback mode (CFB) for symmetric ciphers. - */ -//#define MBEDTLS_CIPHER_MODE_CFB - -/** - * \def MBEDTLS_CIPHER_MODE_CTR - * - * Enable Counter Block Cipher mode (CTR) for symmetric ciphers. - */ -//#define MBEDTLS_CIPHER_MODE_CTR - -/** - * \def MBEDTLS_CIPHER_MODE_OFB - * - * Enable Output Feedback mode (OFB) for symmetric ciphers. - */ -//#define MBEDTLS_CIPHER_MODE_OFB - -/** - * \def MBEDTLS_CIPHER_MODE_XTS - * - * Enable Xor-encrypt-xor with ciphertext stealing mode (XTS) for AES. - */ -//#define MBEDTLS_CIPHER_MODE_XTS - -/** - * \def MBEDTLS_CIPHER_NULL_CIPHER - * - * Enable NULL cipher. - * Warning: Only do so when you know what you are doing. This allows for - * encryption or channels without any security! - * - * Requires MBEDTLS_ENABLE_WEAK_CIPHERSUITES as well to enable - * the following ciphersuites: - * MBEDTLS_TLS_ECDH_ECDSA_WITH_NULL_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_NULL_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_NULL_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_NULL_SHA - * MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA384 - * MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA256 - * MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA - * MBEDTLS_TLS_RSA_WITH_NULL_SHA256 - * MBEDTLS_TLS_RSA_WITH_NULL_SHA - * MBEDTLS_TLS_RSA_WITH_NULL_MD5 - * MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA - * MBEDTLS_TLS_PSK_WITH_NULL_SHA384 - * MBEDTLS_TLS_PSK_WITH_NULL_SHA256 - * MBEDTLS_TLS_PSK_WITH_NULL_SHA - * - * Uncomment this macro to enable the NULL cipher and ciphersuites - */ -//#define MBEDTLS_CIPHER_NULL_CIPHER - /** * \def MBEDTLS_CIPHER_PADDING_PKCS7 * @@ -702,98 +185,13 @@ #define MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN #define MBEDTLS_CIPHER_PADDING_ZEROS -/** \def MBEDTLS_CTR_DRBG_USE_128_BIT_KEY +/** + * \def MBEDTLS_CTR_DRBG_USE_128_BIT_KEY * * Uncomment this macro to use a 128-bit key in the CTR_DRBG module. * By default, CTR_DRBG uses a 256-bit key. */ -//#define MBEDTLS_CTR_DRBG_USE_128_BIT_KEY - -/** - * \def MBEDTLS_ENABLE_WEAK_CIPHERSUITES - * - * Enable weak ciphersuites in SSL / TLS. - * Warning: Only do so when you know what you are doing. This allows for - * channels with virtually no security at all! - * - * This enables the following ciphersuites: - * MBEDTLS_TLS_RSA_WITH_DES_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA - * - * Uncomment this macro to enable weak ciphersuites - * - * \warning DES is considered a weak cipher and its use constitutes a - * security risk. We recommend considering stronger ciphers instead. - */ -//#define MBEDTLS_ENABLE_WEAK_CIPHERSUITES - -/** - * \def MBEDTLS_REMOVE_ARC4_CIPHERSUITES - * - * Remove RC4 ciphersuites by default in SSL / TLS. - * This flag removes the ciphersuites based on RC4 from the default list as - * returned by mbedtls_ssl_list_ciphersuites(). However, it is still possible to - * enable (some of) them with mbedtls_ssl_conf_ciphersuites() by including them - * explicitly. - * - * Uncomment this macro to remove RC4 ciphersuites by default. - */ -#define MBEDTLS_REMOVE_ARC4_CIPHERSUITES - -/** - * \def MBEDTLS_REMOVE_3DES_CIPHERSUITES - * - * Remove 3DES ciphersuites by default in SSL / TLS. - * This flag removes the ciphersuites based on 3DES from the default list as - * returned by mbedtls_ssl_list_ciphersuites(). However, it is still possible - * to enable (some of) them with mbedtls_ssl_conf_ciphersuites() by including - * them explicitly. - * - * A man-in-the-browser attacker can recover authentication tokens sent through - * a TLS connection using a 3DES based cipher suite (see "On the Practical - * (In-)Security of 64-bit Block Ciphers" by Karthikeyan Bhargavan and Gaëtan - * Leurent, see https://sweet32.info/SWEET32_CCS16.pdf). If this attack falls - * in your threat model or you are unsure, then you should keep this option - * enabled to remove 3DES based cipher suites. - * - * Comment this macro to keep 3DES in the default ciphersuite list. - */ -#define MBEDTLS_REMOVE_3DES_CIPHERSUITES - -/** - * \def MBEDTLS_ECP_DP_SECP192R1_ENABLED - * - * MBEDTLS_ECP_XXXX_ENABLED: Enables specific curves within the Elliptic Curve - * module. By default all supported curves are enabled. - * - * Comment macros to disable the curve and functions for it - */ -/* Short Weierstrass curves (supporting ECP, ECDH, ECDSA) */ -#define MBEDTLS_ECP_DP_SECP192R1_ENABLED -#define MBEDTLS_ECP_DP_SECP224R1_ENABLED -#define MBEDTLS_ECP_DP_SECP256R1_ENABLED -#define MBEDTLS_ECP_DP_SECP384R1_ENABLED -#define MBEDTLS_ECP_DP_SECP521R1_ENABLED -#define MBEDTLS_ECP_DP_SECP192K1_ENABLED -#define MBEDTLS_ECP_DP_SECP224K1_ENABLED -#define MBEDTLS_ECP_DP_SECP256K1_ENABLED -#define MBEDTLS_ECP_DP_BP256R1_ENABLED -#define MBEDTLS_ECP_DP_BP384R1_ENABLED -#define MBEDTLS_ECP_DP_BP512R1_ENABLED -/* Montgomery curves (supporting ECP) */ -#define MBEDTLS_ECP_DP_CURVE25519_ENABLED -#define MBEDTLS_ECP_DP_CURVE448_ENABLED - -/** - * \def MBEDTLS_ECP_NIST_OPTIM - * - * Enable specific 'modulo p' routines for each NIST prime. - * Depending on the prime and architecture, makes operations 4 to 8 times - * faster on the corresponding curve. - * - * Comment this macro to disable NIST curves optimisation. - */ -#define MBEDTLS_ECP_NIST_OPTIM +/*#define MBEDTLS_CTR_DRBG_USE_128_BIT_KEY*/ /** * \def MBEDTLS_ECP_NO_INTERNAL_RNG @@ -815,7 +213,7 @@ * * Uncomment this macro to disable some counter-measures in ECP. */ -//#define MBEDTLS_ECP_NO_INTERNAL_RNG +/*#define MBEDTLS_ECP_NO_INTERNAL_RNG*/ /** * \def MBEDTLS_ECP_RESTARTABLE @@ -840,7 +238,7 @@ * MBEDTLS_ECP_ALT, MBEDTLS_ECDH_XXX_ALT, MBEDTLS_ECDSA_XXX_ALT * and MBEDTLS_ECDH_LEGACY_CONTEXT. */ -//#define MBEDTLS_ECP_RESTARTABLE +/*#define MBEDTLS_ECP_RESTARTABLE*/ /** * \def MBEDTLS_ECDH_LEGACY_CONTEXT @@ -868,296 +266,7 @@ * library may modify the way the ECDH context layout is configured * and may modify the layout of the new context type. */ -//#define MBEDTLS_ECDH_LEGACY_CONTEXT - -/** - * \def MBEDTLS_ECDSA_DETERMINISTIC - * - * Enable deterministic ECDSA (RFC 6979). - * Standard ECDSA is "fragile" in the sense that lack of entropy when signing - * may result in a compromise of the long-term signing key. This is avoided by - * the deterministic variant. - * - * Requires: MBEDTLS_HMAC_DRBG_C, MBEDTLS_ECDSA_C - * - * Comment this macro to disable deterministic ECDSA. - */ -#define MBEDTLS_ECDSA_DETERMINISTIC - -/** - * \def MBEDTLS_KEY_EXCHANGE_PSK_ENABLED - * - * Enable the PSK based ciphersuite modes in SSL / TLS. - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_PSK_WITH_RC4_128_SHA - */ -//#define MBEDTLS_KEY_EXCHANGE_PSK_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED - * - * Enable the DHE-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_DHM_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA - * - * \warning Using DHE constitutes a security risk as it - * is not possible to validate custom DH parameters. - * If possible, it is recommended users should consider - * preferring other methods of key exchange. - * See dhm.h for more details. - * - */ -//#define MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED - * - * Enable the ECDHE-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_ECDH_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA - */ -//#define MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED - * - * Enable the RSA-PSK based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, - * MBEDTLS_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA - */ -//#define MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_RSA_ENABLED - * - * Enable the RSA-only based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, - * MBEDTLS_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_RSA_WITH_RC4_128_MD5 - */ -#define MBEDTLS_KEY_EXCHANGE_RSA_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED - * - * Enable the DHE-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_DHM_C, MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, - * MBEDTLS_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - * - * \warning Using DHE constitutes a security risk as it - * is not possible to validate custom DH parameters. - * If possible, it is recommended users should consider - * preferring other methods of key exchange. - * See dhm.h for more details. - * - */ -//#define MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED - * - * Enable the ECDHE-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_ECDH_C, MBEDTLS_RSA_C, MBEDTLS_PKCS1_V15, - * MBEDTLS_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA - */ -#define MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED - * - * Enable the ECDHE-ECDSA based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_ECDH_C, MBEDTLS_ECDSA_C, MBEDTLS_X509_CRT_PARSE_C, - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA - */ -//#define MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED - * - * Enable the ECDH-ECDSA based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_ECDH_C, MBEDTLS_ECDSA_C, MBEDTLS_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - */ -//#define MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED - * - * Enable the ECDH-RSA based ciphersuite modes in SSL / TLS. - * - * Requires: MBEDTLS_ECDH_C, MBEDTLS_RSA_C, MBEDTLS_X509_CRT_PARSE_C - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 - */ -//#define MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED - -/** - * \def MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED - * - * Enable the ECJPAKE based ciphersuite modes in SSL / TLS. - * - * \warning This is currently experimental. EC J-PAKE support is based on the - * Thread v1.0.0 specification; incompatible changes to the specification - * might still happen. For this reason, this is disabled by default. - * - * Requires: MBEDTLS_ECJPAKE_C - * MBEDTLS_SHA256_C - * MBEDTLS_ECP_DP_SECP256R1_ENABLED - * - * This enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8 - */ -//#define MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED +/*#define MBEDTLS_ECDH_LEGACY_CONTEXT*/ /** * \def MBEDTLS_PK_PARSE_EC_EXTENDED @@ -1171,7 +280,7 @@ * * Disable if you only need to support RFC 5915 + 5480 key formats. */ -#define MBEDTLS_PK_PARSE_EC_EXTENDED +/*#define MBEDTLS_PK_PARSE_EC_EXTENDED*/ /** * \def MBEDTLS_ERROR_STRERROR_DUMMY @@ -1204,86 +313,6 @@ */ #define MBEDTLS_FS_IO -/** - * \def MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES - * - * Do not add default entropy sources. These are the platform specific, - * mbedtls_timing_hardclock and HAVEGE based poll functions. - * - * This is useful to have more control over the added entropy sources in an - * application. - * - * Uncomment this macro to prevent loading of default entropy functions. - */ -//#define MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES - -/** - * \def MBEDTLS_NO_PLATFORM_ENTROPY - * - * Do not use built-in platform entropy functions. - * This is useful if your platform does not support - * standards like the /dev/urandom or Windows CryptoAPI. - * - * Uncomment this macro to disable the built-in platform entropy functions. - */ -//#define MBEDTLS_NO_PLATFORM_ENTROPY - -/** - * \def MBEDTLS_ENTROPY_FORCE_SHA256 - * - * Force the entropy accumulator to use a SHA-256 accumulator instead of the - * default SHA-512 based one (if both are available). - * - * Requires: MBEDTLS_SHA256_C - * - * On 32-bit systems SHA-256 can be much faster than SHA-512. Use this option - * if you have performance concerns. - * - * This option is only useful if both MBEDTLS_SHA256_C and - * MBEDTLS_SHA512_C are defined. Otherwise the available hash module is used. - */ -//#define MBEDTLS_ENTROPY_FORCE_SHA256 - -/** - * \def MBEDTLS_ENTROPY_NV_SEED - * - * Enable the non-volatile (NV) seed file-based entropy source. - * (Also enables the NV seed read/write functions in the platform layer) - * - * This is crucial (if not required) on systems that do not have a - * cryptographic entropy source (in hardware or kernel) available. - * - * Requires: MBEDTLS_ENTROPY_C, MBEDTLS_PLATFORM_C - * - * \note The read/write functions that are used by the entropy source are - * determined in the platform layer, and can be modified at runtime and/or - * compile-time depending on the flags (MBEDTLS_PLATFORM_NV_SEED_*) used. - * - * \note If you use the default implementation functions that read a seedfile - * with regular fopen(), please make sure you make a seedfile with the - * proper name (defined in MBEDTLS_PLATFORM_STD_NV_SEED_FILE) and at - * least MBEDTLS_ENTROPY_BLOCK_SIZE bytes in size that can be read from - * and written to or you will get an entropy source error! The default - * implementation will only use the first MBEDTLS_ENTROPY_BLOCK_SIZE - * bytes from the file. - * - * \note The entropy collector will write to the seed file before entropy is - * given to an external source, to update it. - */ -//#define MBEDTLS_ENTROPY_NV_SEED - -/* MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER - * - * Enable key identifiers that encode a key owner identifier. - * - * The owner of a key is identified by a value of type ::mbedtls_key_owner_id_t - * which is currently hard-coded to be int32_t. - * - * Note that this option is meant for internal use only and may be removed - * without notice. It is incompatible with MBEDTLS_USE_PSA_CRYPTO. - */ -//#define MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER - /** * \def MBEDTLS_MEMORY_DEBUG * @@ -1295,7 +324,7 @@ * * Uncomment this macro to let the buffer allocator print out error messages. */ -//#define MBEDTLS_MEMORY_DEBUG +/*#define MBEDTLS_MEMORY_DEBUG*/ /** * \def MBEDTLS_MEMORY_BACKTRACE @@ -1307,7 +336,7 @@ * * Uncomment this macro to include backtrace information */ -//#define MBEDTLS_MEMORY_BACKTRACE +/*#define MBEDTLS_MEMORY_BACKTRACE*/ /** * \def MBEDTLS_PK_RSA_ALT_SUPPORT @@ -1316,7 +345,7 @@ * * Comment this macro to disable support for external private RSA keys. */ -#define MBEDTLS_PK_RSA_ALT_SUPPORT +/*#define MBEDTLS_PK_RSA_ALT_SUPPORT*/ /** * \def MBEDTLS_PKCS1_V15 @@ -1338,99 +367,7 @@ * * This enables support for RSAES-OAEP and RSASSA-PSS operations. */ -#define MBEDTLS_PKCS1_V21 - -/** \def MBEDTLS_PSA_CRYPTO_CLIENT - * - * Enable support for PSA crypto client. - * - * \note This option allows to include the code necessary for a PSA - * crypto client when the PSA crypto implementation is not included in - * the library (MBEDTLS_PSA_CRYPTO_C disabled). The code included is the - * code to set and get PSA key attributes. - * The development of PSA drivers partially relying on the library to - * fulfill the hardware gaps is another possible usage of this option. - * - * \warning This interface is experimental and may change or be removed - * without notice. - */ -//#define MBEDTLS_PSA_CRYPTO_CLIENT - -/** \def MBEDTLS_PSA_CRYPTO_DRIVERS - * - * Enable support for the experimental PSA crypto driver interface. - * - * Requires: MBEDTLS_PSA_CRYPTO_C - * - * \warning This interface is experimental and may change or be removed - * without notice. - */ -//#define MBEDTLS_PSA_CRYPTO_DRIVERS - -/** \def MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG - * - * Make the PSA Crypto module use an external random generator provided - * by a driver, instead of Mbed TLS's entropy and DRBG modules. - * - * \note This random generator must deliver random numbers with cryptographic - * quality and high performance. It must supply unpredictable numbers - * with a uniform distribution. The implementation of this function - * is responsible for ensuring that the random generator is seeded - * with sufficient entropy. If you have a hardware TRNG which is slow - * or delivers non-uniform output, declare it as an entropy source - * with mbedtls_entropy_add_source() instead of enabling this option. - * - * If you enable this option, you must configure the type - * ::mbedtls_psa_external_random_context_t in psa/crypto_platform.h - * and define a function called mbedtls_psa_external_get_random() - * with the following prototype: - * ``` - * psa_status_t mbedtls_psa_external_get_random( - * mbedtls_psa_external_random_context_t *context, - * uint8_t *output, size_t output_size, size_t *output_length); - * ); - * ``` - * The \c context value is initialized to 0 before the first call. - * The function must fill the \c output buffer with \p output_size bytes - * of random data and set \c *output_length to \p output_size. - * - * Requires: MBEDTLS_PSA_CRYPTO_C - * - * \warning If you enable this option, code that uses the PSA cryptography - * interface will not use any of the entropy sources set up for - * the entropy module, nor the NV seed that MBEDTLS_ENTROPY_NV_SEED - * enables. - * - * \note This option is experimental and may be removed without notice. - */ -//#define MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG - -/** - * \def MBEDTLS_PSA_CRYPTO_SPM - * - * When MBEDTLS_PSA_CRYPTO_SPM is defined, the code is built for SPM (Secure - * Partition Manager) integration which separates the code into two parts: a - * NSPE (Non-Secure Process Environment) and an SPE (Secure Process - * Environment). - * - * Module: library/psa_crypto.c - * Requires: MBEDTLS_PSA_CRYPTO_C - * - */ -//#define MBEDTLS_PSA_CRYPTO_SPM - -/** - * \def MBEDTLS_PSA_INJECT_ENTROPY - * - * Enable support for entropy injection at first boot. This feature is - * required on systems that do not have a built-in entropy source (TRNG). - * This feature is currently not supported on systems that have a built-in - * entropy source. - * - * Requires: MBEDTLS_PSA_CRYPTO_STORAGE_C, MBEDTLS_ENTROPY_NV_SEED - * - */ -//#define MBEDTLS_PSA_INJECT_ENTROPY +/*#define MBEDTLS_PKCS1_V21*/ /** * \def MBEDTLS_RSA_NO_CRT @@ -1439,42 +376,27 @@ * for the RSA private operation. * * Uncomment this macro to disable the use of CRT in RSA. - * */ -//#define MBEDTLS_RSA_NO_CRT +/*#define MBEDTLS_RSA_NO_CRT*/ /** * \def MBEDTLS_SELF_TEST * * Enable the checkup functions (*_self_test). */ -//#define MBEDTLS_SELF_TEST +#define MBEDTLS_SELF_TEST /** - * \def MBEDTLS_SHA256_SMALLER + * \def MBEDTLS_CERTS_C * - * Enable an implementation of SHA-256 that has lower ROM footprint but also - * lower performance. + * Enable the test certificates. * - * The default implementation is meant to be a reasonnable compromise between - * performance and size. This version optimizes more aggressively for size at - * the expense of performance. Eg on Cortex-M4 it reduces the size of - * mbedtls_sha256_process() from ~2KB to ~0.5KB for a performance hit of about - * 30%. + * Module: library/certs.c + * Caller: * - * Uncomment to enable the smaller implementation of SHA256. + * This module is used for testing (ssl_client/server). */ -//#define MBEDTLS_SHA256_SMALLER - -/** - * \def MBEDTLS_SHA512_SMALLER - * - * Enable an implementation of SHA-512 that has lower ROM footprint but also - * lower performance. - * - * Uncomment to enable the smaller implementation of SHA512. - */ -//#define MBEDTLS_SHA512_SMALLER +#define MBEDTLS_CERTS_C /** * \def MBEDTLS_SHA512_NO_SHA384 @@ -1486,7 +408,7 @@ * * Uncomment to disable SHA-384 */ -//#define MBEDTLS_SHA512_NO_SHA384 +/*#define MBEDTLS_SHA512_NO_SHA384*/ /** * \def MBEDTLS_SSL_ALL_ALERT_MESSAGES @@ -1502,6 +424,7 @@ */ #define MBEDTLS_SSL_ALL_ALERT_MESSAGES +#ifdef MBEDTLS_SSL_PROTO_DTLS /** * \def MBEDTLS_SSL_RECORD_CHECKING * @@ -1515,6 +438,7 @@ * Uncomment to enable support for record checking. */ #define MBEDTLS_SSL_RECORD_CHECKING +#endif /** * \def MBEDTLS_SSL_DTLS_CONNECTION_ID @@ -1542,7 +466,7 @@ * * Uncomment to enable the Connection ID extension. */ -//#define MBEDTLS_SSL_DTLS_CONNECTION_ID +/*#define MBEDTLS_SSL_DTLS_CONNECTION_ID*/ /** * \def MBEDTLS_SSL_ASYNC_PRIVATE @@ -1551,9 +475,8 @@ * you to configure an SSL connection to call an external cryptographic * module to perform private key operations instead of performing the * operation inside the library. - * */ -//#define MBEDTLS_SSL_ASYNC_PRIVATE +/*#define MBEDTLS_SSL_ASYNC_PRIVATE*/ /** * \def MBEDTLS_SSL_CONTEXT_SERIALIZATION @@ -1580,7 +503,7 @@ * * Comment to disable the context serialization APIs. */ -//#define MBEDTLS_SSL_CONTEXT_SERIALIZATION +/*#define MBEDTLS_SSL_CONTEXT_SERIALIZATION*/ /** * \def MBEDTLS_SSL_DEBUG_ALL @@ -1594,11 +517,11 @@ * * Uncomment this macro to report all debug messages on errors introducing * a timing side-channel. - * */ -//#define MBEDTLS_SSL_DEBUG_ALL +/*#define MBEDTLS_SSL_DEBUG_ALL*/ -/** \def MBEDTLS_SSL_ENCRYPT_THEN_MAC +/** + * \def MBEDTLS_SSL_ENCRYPT_THEN_MAC * * Enable support for Encrypt-then-MAC, RFC 7366. * @@ -1616,7 +539,8 @@ */ #define MBEDTLS_SSL_ENCRYPT_THEN_MAC -/** \def MBEDTLS_SSL_EXTENDED_MASTER_SECRET +/** + * \def MBEDTLS_SSL_EXTENDED_MASTER_SECRET * * Enable support for RFC 7627: Session Hash and Extended Master Secret * Extension. @@ -1634,6 +558,9 @@ */ #define MBEDTLS_SSL_EXTENDED_MASTER_SECRET +#if (MBEDTLS_SSL_PROTO_SSL3 + MBEDTLS_SSL_PROTO_TLS1 + \ + MBEDTLS_SSL_PROTO_TLS1_1 + MBEDTLS_SSL_PROTO_TLS1_2 + \ + MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL + 0) > 1 /** * \def MBEDTLS_SSL_FALLBACK_SCSV * @@ -1651,6 +578,7 @@ * Comment this macro to disable support for FALLBACK_SCSV */ #define MBEDTLS_SSL_FALLBACK_SCSV +#endif /** * \def MBEDTLS_SSL_KEEP_PEER_CERTIFICATE @@ -1672,20 +600,7 @@ * Comment this macro to disable storing the peer's certificate * after the handshake. */ -#define MBEDTLS_SSL_KEEP_PEER_CERTIFICATE - -/** - * \def MBEDTLS_SSL_HW_RECORD_ACCEL - * - * Enable hooking functions in SSL module for hardware acceleration of - * individual records. - * - * \deprecated This option is deprecated and will be removed in a future - * version of Mbed TLS. - * - * Uncomment this macro to enable hooking functions. - */ -//#define MBEDTLS_SSL_HW_RECORD_ACCEL +/*#define MBEDTLS_SSL_KEEP_PEER_CERTIFICATE*/ /** * \def MBEDTLS_SSL_CBC_RECORD_SPLITTING @@ -1697,7 +612,7 @@ * * Comment this macro to disable 1/n-1 record splitting. */ -//#define MBEDTLS_SSL_CBC_RECORD_SPLITTING +#define MBEDTLS_SSL_CBC_RECORD_SPLITTING /** * \def MBEDTLS_SSL_RENEGOTIATION @@ -1717,22 +632,8 @@ * prevent the SSL renegotiation attack (see RFC 5746 Sect. 1). * (See \c mbedtls_ssl_conf_legacy_renegotiation for the * configuration of this extension). - * */ -#define MBEDTLS_SSL_RENEGOTIATION - -/** - * \def MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO - * - * Enable support for receiving and parsing SSLv2 Client Hello messages for the - * SSL Server module (MBEDTLS_SSL_SRV_C). - * - * \deprecated This option is deprecated and will be removed in a future - * version of Mbed TLS. - * - * Uncomment this macro to enable support for SSLv2 Client Hello messages. - */ -//#define MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO +/*#define MBEDTLS_SSL_RENEGOTIATION*/ /** * \def MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE @@ -1742,7 +643,7 @@ * * Uncomment this macro to respect client's ciphersuite order */ -//#define MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE +/*#define MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE*/ /** * \def MBEDTLS_SSL_MAX_FRAGMENT_LENGTH @@ -1753,91 +654,6 @@ */ #define MBEDTLS_SSL_MAX_FRAGMENT_LENGTH -/** - * \def MBEDTLS_SSL_PROTO_SSL3 - * - * Enable support for SSL 3.0. - * - * Requires: MBEDTLS_MD5_C - * MBEDTLS_SHA1_C - * - * \deprecated This option is deprecated and will be removed in a future - * version of Mbed TLS. - * - * Comment this macro to disable support for SSL 3.0 - */ -//#define MBEDTLS_SSL_PROTO_SSL3 - -/** - * \def MBEDTLS_SSL_PROTO_TLS1 - * - * Enable support for TLS 1.0. - * - * Requires: MBEDTLS_MD5_C - * MBEDTLS_SHA1_C - * - * Comment this macro to disable support for TLS 1.0 - */ -//#define MBEDTLS_SSL_PROTO_TLS1 - -/** - * \def MBEDTLS_SSL_PROTO_TLS1_1 - * - * Enable support for TLS 1.1 (and DTLS 1.0 if DTLS is enabled). - * - * Requires: MBEDTLS_MD5_C - * MBEDTLS_SHA1_C - * - * Comment this macro to disable support for TLS 1.1 / DTLS 1.0 - */ -//#define MBEDTLS_SSL_PROTO_TLS1_1 - -/** - * \def MBEDTLS_SSL_PROTO_TLS1_2 - * - * Enable support for TLS 1.2 (and DTLS 1.2 if DTLS is enabled). - * - * Requires: MBEDTLS_SHA1_C or MBEDTLS_SHA256_C or MBEDTLS_SHA512_C - * (Depends on ciphersuites) - * - * Comment this macro to disable support for TLS 1.2 / DTLS 1.2 - */ -#define MBEDTLS_SSL_PROTO_TLS1_2 - -/** - * \def MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL - * - * This macro is used to selectively enable experimental parts - * of the code that contribute to the ongoing development of - * the prototype TLS 1.3 and DTLS 1.3 implementation, and provide - * no other purpose. - * - * \warning TLS 1.3 and DTLS 1.3 aren't yet supported in Mbed TLS, - * and no feature exposed through this macro is part of the - * public API. In particular, features under the control - * of this macro are experimental and don't come with any - * stability guarantees. - * - * Uncomment this macro to enable experimental and partial - * functionality specific to TLS 1.3. - */ -//#define MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL - -/** - * \def MBEDTLS_SSL_PROTO_DTLS - * - * Enable support for DTLS (all available versions). - * - * Enable this and MBEDTLS_SSL_PROTO_TLS1_1 to enable DTLS 1.0, - * and/or this and MBEDTLS_SSL_PROTO_TLS1_2 to enable DTLS 1.2. - * - * Requires: MBEDTLS_SSL_PROTO_TLS1_1 - * or MBEDTLS_SSL_PROTO_TLS1_2 - * - * Comment this macro to disable support for DTLS - */ -//#define MBEDTLS_SSL_PROTO_DTLS - /** * \def MBEDTLS_SSL_ALPN * @@ -1845,8 +661,9 @@ * * Comment this macro to disable support for ALPN. */ -//#define MBEDTLS_SSL_ALPN +/*#define MBEDTLS_SSL_ALPN*/ +#ifdef MBEDTLS_SSL_PROTO_DTLS /** * \def MBEDTLS_SSL_DTLS_ANTI_REPLAY * @@ -1860,8 +677,10 @@ * * Comment this to disable anti-replay in DTLS. */ -//#define MBEDTLS_SSL_DTLS_ANTI_REPLAY +#define MBEDTLS_SSL_DTLS_ANTI_REPLAY +#endif +#ifdef MBEDTLS_SSL_PROTO_DTLS /** * \def MBEDTLS_SSL_DTLS_HELLO_VERIFY * @@ -1878,7 +697,8 @@ * * Comment this to disable support for HelloVerifyRequest. */ -//#define MBEDTLS_SSL_DTLS_HELLO_VERIFY +#define MBEDTLS_SSL_DTLS_HELLO_VERIFY +#endif /** * \def MBEDTLS_SSL_DTLS_SRTP @@ -1909,8 +729,9 @@ * * Uncomment this to enable support for use_srtp extension. */ -//#define MBEDTLS_SSL_DTLS_SRTP +/*#define MBEDTLS_SSL_DTLS_SRTP*/ +#ifdef MBEDTLS_SSL_PROTO_DTLS /** * \def MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE * @@ -1925,7 +746,8 @@ * * Comment this to disable support for clients reusing the source port. */ -//#define MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE +#define MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE +#endif /** * \def MBEDTLS_SSL_DTLS_BADMAC_LIMIT @@ -1936,7 +758,7 @@ * * Requires: MBEDTLS_SSL_PROTO_DTLS */ -//#define MBEDTLS_SSL_DTLS_BADMAC_LIMIT +/*#define MBEDTLS_SSL_DTLS_BADMAC_LIMIT*/ /** * \def MBEDTLS_SSL_SESSION_TICKETS @@ -1950,7 +772,7 @@ * * Comment this macro to disable support for SSL session tickets */ -#define MBEDTLS_SSL_SESSION_TICKETS +/*#define MBEDTLS_SSL_SESSION_TICKETS*/ /** * \def MBEDTLS_SSL_EXPORT_KEYS @@ -1960,7 +782,7 @@ * * Comment this macro to disable support for key export */ -#define MBEDTLS_SSL_EXPORT_KEYS +/*#define MBEDTLS_SSL_EXPORT_KEYS*/ /** * \def MBEDTLS_SSL_SERVER_NAME_INDICATION @@ -1971,40 +793,7 @@ * * Comment this macro to disable support for server name indication in SSL */ -#define MBEDTLS_SSL_SERVER_NAME_INDICATION - -/** - * \def MBEDTLS_SSL_TRUNCATED_HMAC - * - * Enable support for RFC 6066 truncated HMAC in SSL. - * - * Comment this macro to disable support for truncated HMAC in SSL - */ -#define MBEDTLS_SSL_TRUNCATED_HMAC - -/** - * \def MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT - * - * Fallback to old (pre-2.7), non-conforming implementation of the truncated - * HMAC extension which also truncates the HMAC key. Note that this option is - * only meant for a transitory upgrade period and will be removed in a future - * version of the library. - * - * \warning The old implementation is non-compliant and has a security weakness - * (2^80 brute force attack on the HMAC key used for a single, - * uninterrupted connection). This should only be enabled temporarily - * when (1) the use of truncated HMAC is essential in order to save - * bandwidth, and (2) the peer is an Mbed TLS stack that doesn't use - * the fixed implementation yet (pre-2.7). - * - * \deprecated This option is deprecated and will be removed in a - * future version of Mbed TLS. - * - * Uncomment to fallback to old, non-compliant truncated HMAC implementation. - * - * Requires: MBEDTLS_SSL_TRUNCATED_HMAC - */ -//#define MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT +/*#define MBEDTLS_SSL_SERVER_NAME_INDICATION*/ /** * \def MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH @@ -2014,7 +803,7 @@ * * Requires: MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ -//#define MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH +/*#define MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH*/ /** * \def MBEDTLS_TEST_CONSTANT_FLOW_MEMSAN @@ -2031,7 +820,7 @@ * * Uncomment to enable testing of the constant-flow nature of selected code. */ -//#define MBEDTLS_TEST_CONSTANT_FLOW_MEMSAN +/*#define MBEDTLS_TEST_CONSTANT_FLOW_MEMSAN*/ /** * \def MBEDTLS_TEST_CONSTANT_FLOW_VALGRIND @@ -2050,7 +839,7 @@ * * Uncomment to enable testing of the constant-flow nature of selected code. */ -//#define MBEDTLS_TEST_CONSTANT_FLOW_VALGRIND +/*#define MBEDTLS_TEST_CONSTANT_FLOW_VALGRIND*/ /** * \def MBEDTLS_TEST_HOOKS @@ -2070,109 +859,7 @@ * * Uncomment to enable invasive tests. */ -//#define MBEDTLS_TEST_HOOKS - -/** - * \def MBEDTLS_THREADING_ALT - * - * Provide your own alternate threading implementation. - * - * Requires: MBEDTLS_THREADING_C - * - * Uncomment this to allow your own alternate threading implementation. - */ -//#define MBEDTLS_THREADING_ALT - -/** - * \def MBEDTLS_THREADING_PTHREAD - * - * Enable the pthread wrapper layer for the threading layer. - * - * Requires: MBEDTLS_THREADING_C - * - * Uncomment this to enable pthread mutexes. - */ -//#define MBEDTLS_THREADING_PTHREAD - -/** - * \def MBEDTLS_USE_PSA_CRYPTO - * - * Make the X.509 and TLS library use PSA for cryptographic operations, and - * enable new APIs for using keys handled by PSA Crypto. - * - * \note Development of this option is currently in progress, and parts of Mbed - * TLS's X.509 and TLS modules are not ported to PSA yet. However, these parts - * will still continue to work as usual, so enabling this option should not - * break backwards compatibility. - * - * \warning The PSA Crypto API is in beta stage. While you're welcome to - * experiment using it, incompatible API changes are still possible, and some - * parts may not have reached the same quality as the rest of Mbed TLS yet. - * - * \warning This option enables new Mbed TLS APIs that are dependent on the - * PSA Crypto API, so can't come with the same stability guarantees as the - * rest of the Mbed TLS APIs. You're welcome to experiment with them, but for - * now, access to these APIs is opt-in (via enabling the present option), in - * order to clearly differentiate them from the stable Mbed TLS APIs. - * - * Requires: MBEDTLS_PSA_CRYPTO_C. - * - * Uncomment this to enable internal use of PSA Crypto and new associated APIs. - */ -//#define MBEDTLS_USE_PSA_CRYPTO - -/** - * \def MBEDTLS_PSA_CRYPTO_CONFIG - * - * This setting allows support for cryptographic mechanisms through the PSA - * API to be configured separately from support through the mbedtls API. - * - * Uncomment this to enable use of PSA Crypto configuration settings which - * can be found in include/psa/crypto_config.h. - * - * If you enable this option and write your own configuration file, you must - * include mbedtls/config_psa.h in your configuration file. The default - * provided mbedtls/config.h contains the necessary inclusion. - * - * This feature is still experimental and is not ready for production since - * it is not completed. - */ -//#define MBEDTLS_PSA_CRYPTO_CONFIG - -/** - * \def MBEDTLS_VERSION_FEATURES - * - * Allow run-time checking of compile-time enabled features. Thus allowing users - * to check at run-time if the library is for instance compiled with threading - * support via mbedtls_version_check_feature(). - * - * Requires: MBEDTLS_VERSION_C - * - * Comment this to disable run-time checking and save ROM space - */ -//#define MBEDTLS_VERSION_FEATURES - -/** - * \def MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3 - * - * If set, the X509 parser will not break-off when parsing an X509 certificate - * and encountering an extension in a v1 or v2 certificate. - * - * Uncomment to prevent an error. - */ -//#define MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3 - -/** - * \def MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION - * - * If set, the X509 parser will not break-off when parsing an X509 certificate - * and encountering an unknown critical extension. - * - * \warning Depending on your PKI use, enabling this can be a security risk! - * - * Uncomment to prevent an error. - */ -//#define MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION +/*#define MBEDTLS_TEST_HOOKS*/ /** * \def MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK @@ -2191,194 +878,7 @@ * * Uncomment to enable trusted certificate callbacks. */ -//#define MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK - -/** - * \def MBEDTLS_X509_CHECK_KEY_USAGE - * - * Enable verification of the keyUsage extension (CA and leaf certificates). - * - * Disabling this avoids problems with mis-issued and/or misused - * (intermediate) CA and leaf certificates. - * - * \warning Depending on your PKI use, disabling this can be a security risk! - * - * Comment to skip keyUsage checking for both CA and leaf certificates. - */ -#define MBEDTLS_X509_CHECK_KEY_USAGE - -/** - * \def MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE - * - * Enable verification of the extendedKeyUsage extension (leaf certificates). - * - * Disabling this avoids problems with mis-issued and/or misused certificates. - * - * \warning Depending on your PKI use, disabling this can be a security risk! - * - * Comment to skip extendedKeyUsage checking for certificates. - */ -//#define MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE - -/** - * \def MBEDTLS_X509_RSASSA_PSS_SUPPORT - * - * Enable parsing and verification of X.509 certificates, CRLs and CSRS - * signed with RSASSA-PSS (aka PKCS#1 v2.1). - * - * Comment this macro to disallow using RSASSA-PSS in certificates. - */ -#define MBEDTLS_X509_RSASSA_PSS_SUPPORT - -/** - * \def MBEDTLS_ZLIB_SUPPORT - * - * If set, the SSL/TLS module uses ZLIB to support compression and - * decompression of packet data. - * - * \warning TLS-level compression MAY REDUCE SECURITY! See for example the - * CRIME attack. Before enabling this option, you should examine with care if - * CRIME or similar exploits may be applicable to your use case. - * - * \note Currently compression can't be used with DTLS. - * - * \deprecated This feature is deprecated and will be removed - * in the next major revision of the library. - * - * Used in: library/ssl_tls.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * This feature requires zlib library and headers to be present. - * - * Uncomment to enable use of ZLIB - */ -//#define MBEDTLS_ZLIB_SUPPORT -/* \} name SECTION: mbed TLS feature support */ - -/** - * \name SECTION: mbed TLS modules - * - * This section enables or disables entire modules in mbed TLS - * \{ - */ - -/** - * \def MBEDTLS_AESNI_C - * - * Enable AES-NI support on x86-64. - * - * Module: library/aesni.c - * Caller: library/aes.c - * - * Requires: MBEDTLS_HAVE_ASM - * - * This modules adds support for the AES-NI instructions on x86-64 - */ -#define MBEDTLS_AESNI_C - -/** - * \def MBEDTLS_AES_C - * - * Enable the AES block cipher. - * - * Module: library/aes.c - * Caller: library/cipher.c - * library/pem.c - * library/ctr_drbg.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA - * MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384 - * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384 - * MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA - * MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256 - * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256 - * MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA - * - * PEM_PARSE uses AES for decrypting encrypted keys. - */ -#define MBEDTLS_AES_C - -/** - * \def MBEDTLS_ARC4_C - * - * Enable the ARCFOUR stream cipher. - * - * Module: library/arc4.c - * Caller: library/cipher.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA - * MBEDTLS_TLS_RSA_WITH_RC4_128_SHA - * MBEDTLS_TLS_RSA_WITH_RC4_128_MD5 - * MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA - * MBEDTLS_TLS_PSK_WITH_RC4_128_SHA - * - * \warning ARC4 is considered a weak cipher and its use constitutes a - * security risk. If possible, we recommend avoidng dependencies on - * it, and considering stronger ciphers instead. - * - */ -//#define MBEDTLS_ARC4_C +/*#define MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK*/ /** * \def MBEDTLS_ASN1_PARSE_C @@ -2437,168 +937,6 @@ */ #define MBEDTLS_BIGNUM_C -/** - * \def MBEDTLS_BLOWFISH_C - * - * Enable the Blowfish block cipher. - * - * Module: library/blowfish.c - */ -//#define MBEDTLS_BLOWFISH_C - -/** - * \def MBEDTLS_CAMELLIA_C - * - * Enable the Camellia block cipher. - * - * Module: library/camellia.c - * Caller: library/cipher.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 - * MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 - */ -//#define MBEDTLS_CAMELLIA_C - -/** - * \def MBEDTLS_ARIA_C - * - * Enable the ARIA block cipher. - * - * Module: library/aria.c - * Caller: library/cipher.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * - * MBEDTLS_TLS_RSA_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_RSA_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_PSK_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_PSK_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384 - * MBEDTLS_TLS_PSK_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_PSK_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256 - * MBEDTLS_TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384 - * MBEDTLS_TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256 - * MBEDTLS_TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384 - */ -//#define MBEDTLS_ARIA_C - -/** - * \def MBEDTLS_CCM_C - * - * Enable the Counter with CBC-MAC (CCM) mode for 128-bit block cipher. - * - * Module: library/ccm.c - * - * Requires: MBEDTLS_AES_C or MBEDTLS_CAMELLIA_C - * - * This module enables the AES-CCM ciphersuites, if other requisites are - * enabled as well. - */ -//#define MBEDTLS_CCM_C - -/** - * \def MBEDTLS_CERTS_C - * - * Enable the test certificates. - * - * Module: library/certs.c - * Caller: - * - * This module is used for testing (ssl_client/server). - */ -/* #define MBEDTLS_CERTS_C */ - -/** - * \def MBEDTLS_CHACHA20_C - * - * Enable the ChaCha20 stream cipher. - * - * Module: library/chacha20.c - */ -/* #define MBEDTLS_CHACHA20_C */ - -/** - * \def MBEDTLS_CHACHAPOLY_C - * - * Enable the ChaCha20-Poly1305 AEAD algorithm. - * - * Module: library/chachapoly.c - * - * This module requires: MBEDTLS_CHACHA20_C, MBEDTLS_POLY1305_C - */ -/* #define MBEDTLS_CHACHAPOLY_C */ - /** * \def MBEDTLS_CIPHER_C * @@ -2611,39 +949,7 @@ */ #define MBEDTLS_CIPHER_C -/** - * \def MBEDTLS_CMAC_C - * - * Enable the CMAC (Cipher-based Message Authentication Code) mode for block - * ciphers. - * - * Module: library/cmac.c - * - * Requires: MBEDTLS_AES_C or MBEDTLS_DES_C - * - */ -//#define MBEDTLS_CMAC_C - -/** - * \def MBEDTLS_CTR_DRBG_C - * - * Enable the CTR_DRBG AES-based random generator. - * The CTR_DRBG generator uses AES-256 by default. - * To use AES-128 instead, enable \c MBEDTLS_CTR_DRBG_USE_128_BIT_KEY above. - * - * \note To achieve a 256-bit security strength with CTR_DRBG, - * you must use AES-256 *and* use sufficient entropy. - * See ctr_drbg.h for more details. - * - * Module: library/ctr_drbg.c - * Caller: - * - * Requires: MBEDTLS_AES_C - * - * This module provides the CTR_DRBG AES random number generator. - */ -#define MBEDTLS_CTR_DRBG_C - +#ifndef TINY /** * \def MBEDTLS_DEBUG_C * @@ -2656,123 +962,8 @@ * * This module provides debugging functions. */ -//#define MBEDTLS_DEBUG_C - -/** - * \def MBEDTLS_DES_C - * - * Enable the DES block cipher. - * - * Module: library/des.c - * Caller: library/pem.c - * library/cipher.c - * - * This module enables the following ciphersuites (if other requisites are - * enabled as well): - * MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA - * MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA - * - * PEM_PARSE uses DES/3DES for decrypting encrypted keys. - * - * \warning DES is considered a weak cipher and its use constitutes a - * security risk. We recommend considering stronger ciphers instead. - */ -//#define MBEDTLS_DES_C - -/** - * \def MBEDTLS_DHM_C - * - * Enable the Diffie-Hellman-Merkle module. - * - * Module: library/dhm.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * This module is used by the following key exchanges: - * DHE-RSA, DHE-PSK - * - * \warning Using DHE constitutes a security risk as it - * is not possible to validate custom DH parameters. - * If possible, it is recommended users should consider - * preferring other methods of key exchange. - * See dhm.h for more details. - * - */ -//#define MBEDTLS_DHM_C - -/** - * \def MBEDTLS_ECDH_C - * - * Enable the elliptic curve Diffie-Hellman library. - * - * Module: library/ecdh.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * This module is used by the following key exchanges: - * ECDHE-ECDSA, ECDHE-RSA, DHE-PSK - * - * Requires: MBEDTLS_ECP_C - */ -#define MBEDTLS_ECDH_C - -/** - * \def MBEDTLS_ECDSA_C - * - * Enable the elliptic curve DSA library. - * - * Module: library/ecdsa.c - * Caller: - * - * This module is used by the following key exchanges: - * ECDHE-ECDSA - * - * Requires: MBEDTLS_ECP_C, MBEDTLS_ASN1_WRITE_C, MBEDTLS_ASN1_PARSE_C, - * and at least one MBEDTLS_ECP_DP_XXX_ENABLED for a - * short Weierstrass curve. - */ -//#define MBEDTLS_ECDSA_C - -/** - * \def MBEDTLS_ECJPAKE_C - * - * Enable the elliptic curve J-PAKE library. - * - * \warning This is currently experimental. EC J-PAKE support is based on the - * Thread v1.0.0 specification; incompatible changes to the specification - * might still happen. For this reason, this is disabled by default. - * - * Module: library/ecjpake.c - * Caller: - * - * This module is used by the following key exchanges: - * ECJPAKE - * - * Requires: MBEDTLS_ECP_C, MBEDTLS_MD_C - */ -//#define MBEDTLS_ECJPAKE_C - -/** - * \def MBEDTLS_ECP_C - * - * Enable the elliptic curve over GF(p) library. - * - * Module: library/ecp.c - * Caller: library/ecdh.c - * library/ecdsa.c - * library/ecjpake.c - * - * Requires: MBEDTLS_BIGNUM_C and at least one MBEDTLS_ECP_DP_XXX_ENABLED - */ -#define MBEDTLS_ECP_C +#define MBEDTLS_DEBUG_C +#endif /** * \def MBEDTLS_ENTROPY_C @@ -2800,43 +991,6 @@ */ #define MBEDTLS_ERROR_C -/** - * \def MBEDTLS_GCM_C - * - * Enable the Galois/Counter Mode (GCM). - * - * Module: library/gcm.c - * - * Requires: MBEDTLS_AES_C or MBEDTLS_CAMELLIA_C or MBEDTLS_ARIA_C - * - * This module enables the AES-GCM and CAMELLIA-GCM ciphersuites, if other - * requisites are enabled as well. - */ -#define MBEDTLS_GCM_C - -/** - * \def MBEDTLS_HAVEGE_C - * - * Enable the HAVEGE random generator. - * - * Warning: the HAVEGE random generator is not suitable for virtualized - * environments - * - * Warning: the HAVEGE random generator is dependent on timing and specific - * processor traits. It is therefore not advised to use HAVEGE as - * your applications primary random generator or primary entropy pool - * input. As a secondary input to your entropy pool, it IS able add - * the (limited) extra entropy it provides. - * - * Module: library/havege.c - * Caller: - * - * Requires: MBEDTLS_TIMING_C - * - * Uncomment to enable the HAVEGE random generator. - */ -//#define MBEDTLS_HAVEGE_C - /** * \def MBEDTLS_HKDF_C * @@ -2850,21 +1004,7 @@ * This module adds support for the Hashed Message Authentication Code * (HMAC)-based key derivation function (HKDF). */ -#define MBEDTLS_HKDF_C - -/** - * \def MBEDTLS_HMAC_DRBG_C - * - * Enable the HMAC_DRBG random generator. - * - * Module: library/hmac_drbg.c - * Caller: - * - * Requires: MBEDTLS_MD_C - * - * Uncomment to enable the HMAC_DRBG random number geerator. - */ -#define MBEDTLS_HMAC_DRBG_C +/*#define MBEDTLS_HKDF_C*/ /** * \def MBEDTLS_NIST_KW_C @@ -2877,7 +1017,7 @@ * * Requires: MBEDTLS_AES_C and MBEDTLS_CIPHER_C */ -//#define MBEDTLS_NIST_KW_C +#define MBEDTLS_NIST_KW_C /** * \def MBEDTLS_MD_C @@ -2891,822 +1031,29 @@ */ #define MBEDTLS_MD_C -/** - * \def MBEDTLS_MD2_C - * - * Enable the MD2 hash algorithm. - * - * Module: library/md2.c - * Caller: - * - * Uncomment to enable support for (rare) MD2-signed X.509 certs. - * - * \warning MD2 is considered a weak message digest and its use constitutes a - * security risk. If possible, we recommend avoiding dependencies on - * it, and considering stronger message digests instead. - * - */ -//#define MBEDTLS_MD2_C - -/** - * \def MBEDTLS_MD4_C - * - * Enable the MD4 hash algorithm. - * - * Module: library/md4.c - * Caller: - * - * Uncomment to enable support for (rare) MD4-signed X.509 certs. - * - * \warning MD4 is considered a weak message digest and its use constitutes a - * security risk. If possible, we recommend avoiding dependencies on - * it, and considering stronger message digests instead. - * - */ -//#define MBEDTLS_MD4_C - -/** - * \def MBEDTLS_MD5_C - * - * Enable the MD5 hash algorithm. - * - * Module: library/md5.c - * Caller: library/md.c - * library/pem.c - * library/ssl_tls.c - * - * This module is required for SSL/TLS up to version 1.1, and for TLS 1.2 - * depending on the handshake parameters. Further, it is used for checking - * MD5-signed certificates, and for PBKDF1 when decrypting PEM-encoded - * encrypted keys. - * - * \warning MD5 is considered a weak message digest and its use constitutes a - * security risk. If possible, we recommend avoiding dependencies on - * it, and considering stronger message digests instead. - * - */ -//#define MBEDTLS_MD5_C - -/** - * \def MBEDTLS_MEMORY_BUFFER_ALLOC_C - * - * Enable the buffer allocator implementation that makes use of a (stack) - * based buffer to 'allocate' dynamic memory. (replaces calloc() and free() - * calls) - * - * Module: library/memory_buffer_alloc.c - * - * Requires: MBEDTLS_PLATFORM_C - * MBEDTLS_PLATFORM_MEMORY (to use it within mbed TLS) - * - * Enable this module to enable the buffer memory allocator. - */ -//#define MBEDTLS_MEMORY_BUFFER_ALLOC_C - -/** - * \def MBEDTLS_NET_C - * - * Enable the TCP and UDP over IPv6/IPv4 networking routines. - * - * \note This module only works on POSIX/Unix (including Linux, BSD and OS X) - * and Windows. For other platforms, you'll want to disable it, and write your - * own networking callbacks to be passed to \c mbedtls_ssl_set_bio(). - * - * \note See also our Knowledge Base article about porting to a new - * environment: - * https://tls.mbed.org/kb/how-to/how-do-i-port-mbed-tls-to-a-new-environment-OS - * - * Module: library/net_sockets.c - * - * This module provides networking routines. - */ -#define MBEDTLS_NET_C - -/** - * \def MBEDTLS_OID_C - * - * Enable the OID database. - * - * Module: library/oid.c - * Caller: library/asn1write.c - * library/pkcs5.c - * library/pkparse.c - * library/pkwrite.c - * library/rsa.c - * library/x509.c - * library/x509_create.c - * library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * library/x509write_crt.c - * library/x509write_csr.c - * - * This modules translates between OIDs and internal values. - */ #define MBEDTLS_OID_C - -/** - * \def MBEDTLS_PADLOCK_C - * - * Enable VIA Padlock support on x86. - * - * Module: library/padlock.c - * Caller: library/aes.c - * - * Requires: MBEDTLS_HAVE_ASM - * - * This modules adds support for the VIA PadLock on x86. - */ -//#define MBEDTLS_PADLOCK_C - -/** - * \def MBEDTLS_PEM_PARSE_C - * - * Enable PEM decoding / parsing. - * - * Module: library/pem.c - * Caller: library/dhm.c - * library/pkparse.c - * library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * - * Requires: MBEDTLS_BASE64_C - * - * This modules adds support for decoding / parsing PEM files. - */ #define MBEDTLS_PEM_PARSE_C - -/** - * \def MBEDTLS_PEM_WRITE_C - * - * Enable PEM encoding / writing. - * - * Module: library/pem.c - * Caller: library/pkwrite.c - * library/x509write_crt.c - * library/x509write_csr.c - * - * Requires: MBEDTLS_BASE64_C - * - * This modules adds support for encoding / writing PEM files. - */ #define MBEDTLS_PEM_WRITE_C - -/** - * \def MBEDTLS_PK_C - * - * Enable the generic public (asymetric) key layer. - * - * Module: library/pk.c - * Caller: library/ssl_tls.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * Requires: MBEDTLS_RSA_C or MBEDTLS_ECP_C - * - * Uncomment to enable generic public key wrappers. - */ #define MBEDTLS_PK_C - -/** - * \def MBEDTLS_PK_PARSE_C - * - * Enable the generic public (asymetric) key parser. - * - * Module: library/pkparse.c - * Caller: library/x509_crt.c - * library/x509_csr.c - * - * Requires: MBEDTLS_PK_C - * - * Uncomment to enable generic public key parse functions. - */ #define MBEDTLS_PK_PARSE_C - -/** - * \def MBEDTLS_PK_WRITE_C - * - * Enable the generic public (asymetric) key writer. - * - * Module: library/pkwrite.c - * Caller: library/x509write.c - * - * Requires: MBEDTLS_PK_C - * - * Uncomment to enable generic public key write functions. - */ #define MBEDTLS_PK_WRITE_C - -/** - * \def MBEDTLS_PKCS5_C - * - * Enable PKCS#5 functions. - * - * Module: library/pkcs5.c - * - * Requires: MBEDTLS_MD_C - * - * This module adds support for the PKCS#5 functions. - */ -#define MBEDTLS_PKCS5_C - -/** - * \def MBEDTLS_PKCS11_C - * - * Enable wrapper for PKCS#11 smartcard support via the pkcs11-helper library. - * - * \deprecated This option is deprecated and will be removed in a future - * version of Mbed TLS. - * - * Module: library/pkcs11.c - * Caller: library/pk.c - * - * Requires: MBEDTLS_PK_C - * - * This module enables SSL/TLS PKCS #11 smartcard support. - * Requires the presence of the PKCS#11 helper library (libpkcs11-helper) - */ -//#define MBEDTLS_PKCS11_C - -/** - * \def MBEDTLS_PKCS12_C - * - * Enable PKCS#12 PBE functions. - * Adds algorithms for parsing PKCS#8 encrypted private keys - * - * Module: library/pkcs12.c - * Caller: library/pkparse.c - * - * Requires: MBEDTLS_ASN1_PARSE_C, MBEDTLS_CIPHER_C, MBEDTLS_MD_C - * Can use: MBEDTLS_ARC4_C - * - * This module enables PKCS#12 functions. - */ -#define MBEDTLS_PKCS12_C - -/** - * \def MBEDTLS_PLATFORM_C - * - * Enable the platform abstraction layer that allows you to re-assign - * functions like calloc(), free(), snprintf(), printf(), fprintf(), exit(). - * - * Enabling MBEDTLS_PLATFORM_C enables to use of MBEDTLS_PLATFORM_XXX_ALT - * or MBEDTLS_PLATFORM_XXX_MACRO directives, allowing the functions mentioned - * above to be specified at runtime or compile time respectively. - * - * \note This abstraction layer must be enabled on Windows (including MSYS2) - * as other module rely on it for a fixed snprintf implementation. - * - * Module: library/platform.c - * Caller: Most other .c files - * - * This module enables abstraction of common (libc) functions. - */ -#define MBEDTLS_PLATFORM_C - -/** - * \def MBEDTLS_POLY1305_C - * - * Enable the Poly1305 MAC algorithm. - * - * Module: library/poly1305.c - * Caller: library/chachapoly.c - */ -#define MBEDTLS_POLY1305_C - -/** - * \def MBEDTLS_PSA_CRYPTO_C - * - * Enable the Platform Security Architecture cryptography API. - * - * \warning The PSA Crypto API is still beta status. While you're welcome to - * experiment using it, incompatible API changes are still possible, and some - * parts may not have reached the same quality as the rest of Mbed TLS yet. - * - * Module: library/psa_crypto.c - * - * Requires: either MBEDTLS_CTR_DRBG_C and MBEDTLS_ENTROPY_C, - * or MBEDTLS_HMAC_DRBG_C and MBEDTLS_ENTROPY_C, - * or MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG. - * - */ -#define MBEDTLS_PSA_CRYPTO_C - -/** - * \def MBEDTLS_PSA_CRYPTO_SE_C - * - * Enable secure element support in the Platform Security Architecture - * cryptography API. - * - * \warning This feature is not yet suitable for production. It is provided - * for API evaluation and testing purposes only. - * - * Module: library/psa_crypto_se.c - * - * Requires: MBEDTLS_PSA_CRYPTO_C, MBEDTLS_PSA_CRYPTO_STORAGE_C - * - */ -//#define MBEDTLS_PSA_CRYPTO_SE_C - -/** - * \def MBEDTLS_PSA_CRYPTO_STORAGE_C - * - * Enable the Platform Security Architecture persistent key storage. - * - * Module: library/psa_crypto_storage.c - * - * Requires: MBEDTLS_PSA_CRYPTO_C, - * either MBEDTLS_PSA_ITS_FILE_C or a native implementation of - * the PSA ITS interface - */ -//#define MBEDTLS_PSA_CRYPTO_STORAGE_C - -/** - * \def MBEDTLS_PSA_ITS_FILE_C - * - * Enable the emulation of the Platform Security Architecture - * Internal Trusted Storage (PSA ITS) over files. - * - * Module: library/psa_its_file.c - * - * Requires: MBEDTLS_FS_IO - */ -//#define MBEDTLS_PSA_ITS_FILE_C - -/** - * \def MBEDTLS_RIPEMD160_C - * - * Enable the RIPEMD-160 hash algorithm. - * - * Module: library/ripemd160.c - * Caller: library/md.c - * - */ -//#define MBEDTLS_RIPEMD160_C - -/** - * \def MBEDTLS_RSA_C - * - * Enable the RSA public-key cryptosystem. - * - * Module: library/rsa.c - * library/rsa_internal.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * library/x509.c - * - * This module is used by the following key exchanges: - * RSA, DHE-RSA, ECDHE-RSA, RSA-PSK - * - * Requires: MBEDTLS_BIGNUM_C, MBEDTLS_OID_C - */ -#define MBEDTLS_RSA_C - -/** - * \def MBEDTLS_SHA1_C - * - * Enable the SHA1 cryptographic hash algorithm. - * - * Module: library/sha1.c - * Caller: library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * library/x509write_crt.c - * - * This module is required for SSL/TLS up to version 1.1, for TLS 1.2 - * depending on the handshake parameters, and for SHA1-signed certificates. - * - * \warning SHA-1 is considered a weak message digest and its use constitutes - * a security risk. If possible, we recommend avoiding dependencies - * on it, and considering stronger message digests instead. - * - */ -#define MBEDTLS_SHA1_C - -/** - * \def MBEDTLS_SHA256_C - * - * Enable the SHA-224 and SHA-256 cryptographic hash algorithms. - * - * Module: library/sha256.c - * Caller: library/entropy.c - * library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * This module adds support for SHA-224 and SHA-256. - * This module is required for the SSL/TLS 1.2 PRF function. - */ -#define MBEDTLS_SHA256_C - -/** - * \def MBEDTLS_SHA512_C - * - * Enable the SHA-384 and SHA-512 cryptographic hash algorithms. - * - * Module: library/sha512.c - * Caller: library/entropy.c - * library/md.c - * library/ssl_cli.c - * library/ssl_srv.c - * - * This module adds support for SHA-384 and SHA-512. - */ -#define MBEDTLS_SHA512_C - -/** - * \def MBEDTLS_SSL_CACHE_C - * - * Enable simple SSL cache implementation. - * - * Module: library/ssl_cache.c - * Caller: - * - * Requires: MBEDTLS_SSL_CACHE_C - */ -#define MBEDTLS_SSL_CACHE_C - -/** - * \def MBEDTLS_SSL_COOKIE_C - * - * Enable basic implementation of DTLS cookies for hello verification. - * - * Module: library/ssl_cookie.c - * Caller: - */ -#define MBEDTLS_SSL_COOKIE_C - -/** - * \def MBEDTLS_SSL_TICKET_C - * - * Enable an implementation of TLS server-side callbacks for session tickets. - * - * Module: library/ssl_ticket.c - * Caller: - * - * Requires: MBEDTLS_CIPHER_C - */ -#define MBEDTLS_SSL_TICKET_C - -/** - * \def MBEDTLS_SSL_CLI_C - * - * Enable the SSL/TLS client code. - * - * Module: library/ssl_cli.c - * Caller: - * - * Requires: MBEDTLS_SSL_TLS_C - * - * This module is required for SSL/TLS client support. - */ -#define MBEDTLS_SSL_CLI_C - -/** - * \def MBEDTLS_SSL_SRV_C - * - * Enable the SSL/TLS server code. - * - * Module: library/ssl_srv.c - * Caller: - * - * Requires: MBEDTLS_SSL_TLS_C - * - * This module is required for SSL/TLS server support. - */ -#define MBEDTLS_SSL_SRV_C - -/** - * \def MBEDTLS_SSL_TLS_C - * - * Enable the generic SSL/TLS code. - * - * Module: library/ssl_tls.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * - * Requires: MBEDTLS_CIPHER_C, MBEDTLS_MD_C - * and at least one of the MBEDTLS_SSL_PROTO_XXX defines - * - * This module is required for SSL/TLS. - */ -#define MBEDTLS_SSL_TLS_C - -/** - * \def MBEDTLS_THREADING_C - * - * Enable the threading abstraction layer. - * By default mbed TLS assumes it is used in a non-threaded environment or that - * contexts are not shared between threads. If you do intend to use contexts - * between threads, you will need to enable this layer to prevent race - * conditions. See also our Knowledge Base article about threading: - * https://tls.mbed.org/kb/development/thread-safety-and-multi-threading - * - * Module: library/threading.c - * - * This allows different threading implementations (self-implemented or - * provided). - * - * You will have to enable either MBEDTLS_THREADING_ALT or - * MBEDTLS_THREADING_PTHREAD. - * - * Enable this layer to allow use of mutexes within mbed TLS - */ -//#define MBEDTLS_THREADING_C - -/** - * \def MBEDTLS_TIMING_C - * - * Enable the semi-portable timing interface. - * - * \note The provided implementation only works on POSIX/Unix (including Linux, - * BSD and OS X) and Windows. On other platforms, you can either disable that - * module and provide your own implementations of the callbacks needed by - * \c mbedtls_ssl_set_timer_cb() for DTLS, or leave it enabled and provide - * your own implementation of the whole module by setting - * \c MBEDTLS_TIMING_ALT in the current file. - * - * \note See also our Knowledge Base article about porting to a new - * environment: - * https://tls.mbed.org/kb/how-to/how-do-i-port-mbed-tls-to-a-new-environment-OS - * - * Module: library/timing.c - * Caller: library/havege.c - * - * This module is used by the HAVEGE random number generator. - */ -#define MBEDTLS_TIMING_C - -/** - * \def MBEDTLS_VERSION_C - * - * Enable run-time version information. - * - * Module: library/version.c - * - * This module provides run-time version information. - */ -#define MBEDTLS_VERSION_C - -/** - * \def MBEDTLS_X509_USE_C - * - * Enable X.509 core for using certificates. - * - * Module: library/x509.c - * Caller: library/x509_crl.c - * library/x509_crt.c - * library/x509_csr.c - * - * Requires: MBEDTLS_ASN1_PARSE_C, MBEDTLS_BIGNUM_C, MBEDTLS_OID_C, - * MBEDTLS_PK_PARSE_C - * - * This module is required for the X.509 parsing modules. - */ #define MBEDTLS_X509_USE_C - -/** - * \def MBEDTLS_X509_CRT_PARSE_C - * - * Enable X.509 certificate parsing. - * - * Module: library/x509_crt.c - * Caller: library/ssl_cli.c - * library/ssl_srv.c - * library/ssl_tls.c - * - * Requires: MBEDTLS_X509_USE_C - * - * This module is required for X.509 certificate parsing. - */ +#define MBEDTLS_X509_CREATE_C +#define MBEDTLS_X509_CRT_WRITE_C #define MBEDTLS_X509_CRT_PARSE_C - -/** - * \def MBEDTLS_X509_CRL_PARSE_C - * - * Enable X.509 CRL parsing. - * - * Module: library/x509_crl.c - * Caller: library/x509_crt.c - * - * Requires: MBEDTLS_X509_USE_C - * - * This module is required for X.509 CRL parsing. - */ +#define MBEDTLS_X509_CSR_PARSE_C +#define MBEDTLS_X509_CSR_WRITE_C #define MBEDTLS_X509_CRL_PARSE_C -/** - * \def MBEDTLS_X509_CSR_PARSE_C - * - * Enable X.509 Certificate Signing Request (CSR) parsing. - * - * Module: library/x509_csr.c - * Caller: library/x509_crt_write.c - * - * Requires: MBEDTLS_X509_USE_C - * - * This module is used for reading X.509 certificate request. - */ -#define MBEDTLS_X509_CSR_PARSE_C +#define MBEDTLS_SSL_TLS_C +#define MBEDTLS_SSL_CLI_C +#define MBEDTLS_SSL_SRV_C +/*#define MBEDTLS_SSL_CACHE_C*/ +/*#define MBEDTLS_SSL_COOKIE_C*/ +/*#define MBEDTLS_SSL_TICKET_C*/ /** - * \def MBEDTLS_X509_CREATE_C - * - * Enable X.509 core for creating certificates. - * - * Module: library/x509_create.c - * - * Requires: MBEDTLS_BIGNUM_C, MBEDTLS_OID_C, MBEDTLS_PK_WRITE_C - * - * This module is the basis for creating X.509 certificates and CSRs. - */ -#define MBEDTLS_X509_CREATE_C - -/** - * \def MBEDTLS_X509_CRT_WRITE_C - * - * Enable creating X.509 certificates. - * - * Module: library/x509_crt_write.c - * - * Requires: MBEDTLS_X509_CREATE_C - * - * This module is required for X.509 certificate creation. - */ -#define MBEDTLS_X509_CRT_WRITE_C - -/** - * \def MBEDTLS_X509_CSR_WRITE_C - * - * Enable creating X.509 Certificate Signing Requests (CSR). - * - * Module: library/x509_csr_write.c - * - * Requires: MBEDTLS_X509_CREATE_C - * - * This module is required for X.509 certificate request writing. - */ -#define MBEDTLS_X509_CSR_WRITE_C - -/** - * \def MBEDTLS_XTEA_C - * - * Enable the XTEA block cipher. - * - * Module: library/xtea.c - * Caller: - */ -//#define MBEDTLS_XTEA_C - -/* \} name SECTION: mbed TLS modules */ - -/** - * \name SECTION: Module configuration options - * - * This section allows for the setting of module specific sizes and - * configuration options. The default values are already present in the - * relevant header files and should suffice for the regular use cases. - * - * Our advice is to enable options and change their values here - * only if you have a good reason and know the consequences. - * - * Please check the respective header file for documentation on these - * parameters (to prevent duplicate documentation). - * \{ - */ - -/* MPI / BIGNUM options */ -//#define MBEDTLS_MPI_WINDOW_SIZE 6 /**< Maximum window size used. */ -//#define MBEDTLS_MPI_MAX_SIZE 1024 /**< Maximum number of bytes for usable MPIs. */ - -/* CTR_DRBG options */ -//#define MBEDTLS_CTR_DRBG_ENTROPY_LEN 48 /**< Amount of entropy used per seed by default (48 with SHA-512, 32 with SHA-256) */ -//#define MBEDTLS_CTR_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ -//#define MBEDTLS_CTR_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ -//#define MBEDTLS_CTR_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ -//#define MBEDTLS_CTR_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ - -/* HMAC_DRBG options */ -//#define MBEDTLS_HMAC_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ -//#define MBEDTLS_HMAC_DRBG_MAX_INPUT 256 /**< Maximum number of additional input bytes */ -//#define MBEDTLS_HMAC_DRBG_MAX_REQUEST 1024 /**< Maximum number of requested bytes per call */ -//#define MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ - -/* ECP options */ -//#define MBEDTLS_ECP_MAX_BITS 521 /**< Maximum bit size of groups */ -//#define MBEDTLS_ECP_WINDOW_SIZE 6 /**< Maximum window size used */ -//#define MBEDTLS_ECP_FIXED_POINT_OPTIM 1 /**< Enable fixed-point speed-up */ - -/* Entropy options */ -//#define MBEDTLS_ENTROPY_MAX_SOURCES 20 /**< Maximum number of sources supported */ -//#define MBEDTLS_ENTROPY_MAX_GATHER 128 /**< Maximum amount requested from entropy sources */ -//#define MBEDTLS_ENTROPY_MIN_HARDWARE 32 /**< Default minimum number of bytes required for the hardware entropy source mbedtls_hardware_poll() before entropy is released */ - -/* Memory buffer allocator options */ -//#define MBEDTLS_MEMORY_ALIGN_MULTIPLE 4 /**< Align on multiples of this value */ - -/* Platform options */ -//#define MBEDTLS_PLATFORM_STD_MEM_HDR /**< Header to include if MBEDTLS_PLATFORM_NO_STD_FUNCTIONS is defined. Don't define if no header is needed. */ -//#define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< Default allocator to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_FREE free /**< Default free to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_EXIT exit /**< Default exit to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_TIME time /**< Default time to use, can be undefined. MBEDTLS_HAVE_TIME must be enabled */ -//#define MBEDTLS_PLATFORM_STD_FPRINTF fprintf /**< Default fprintf to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_PRINTF printf /**< Default printf to use, can be undefined */ -/* Note: your snprintf must correctly zero-terminate the buffer! */ -//#define MBEDTLS_PLATFORM_STD_SNPRINTF snprintf /**< Default snprintf to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_EXIT_SUCCESS 0 /**< Default exit value to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_EXIT_FAILURE 1 /**< Default exit value to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_NV_SEED_READ mbedtls_platform_std_nv_seed_read /**< Default nv_seed_read function to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_NV_SEED_WRITE mbedtls_platform_std_nv_seed_write /**< Default nv_seed_write function to use, can be undefined */ -//#define MBEDTLS_PLATFORM_STD_NV_SEED_FILE "seedfile" /**< Seed file to read/write with default implementation */ - -/* To Use Function Macros MBEDTLS_PLATFORM_C must be enabled */ -/* MBEDTLS_PLATFORM_XXX_MACRO and MBEDTLS_PLATFORM_XXX_ALT cannot both be defined */ -//#define MBEDTLS_PLATFORM_CALLOC_MACRO calloc /**< Default allocator macro to use, can be undefined */ -//#define MBEDTLS_PLATFORM_FREE_MACRO free /**< Default free macro to use, can be undefined */ -//#define MBEDTLS_PLATFORM_EXIT_MACRO exit /**< Default exit macro to use, can be undefined */ -//#define MBEDTLS_PLATFORM_TIME_MACRO time /**< Default time macro to use, can be undefined. MBEDTLS_HAVE_TIME must be enabled */ -//#define MBEDTLS_PLATFORM_TIME_TYPE_MACRO time_t /**< Default time macro to use, can be undefined. MBEDTLS_HAVE_TIME must be enabled */ -//#define MBEDTLS_PLATFORM_FPRINTF_MACRO fprintf /**< Default fprintf macro to use, can be undefined */ -//#define MBEDTLS_PLATFORM_PRINTF_MACRO printf /**< Default printf macro to use, can be undefined */ -/* Note: your snprintf must correctly zero-terminate the buffer! */ -//#define MBEDTLS_PLATFORM_SNPRINTF_MACRO snprintf /**< Default snprintf macro to use, can be undefined */ -//#define MBEDTLS_PLATFORM_VSNPRINTF_MACRO vsnprintf /**< Default vsnprintf macro to use, can be undefined */ -//#define MBEDTLS_PLATFORM_NV_SEED_READ_MACRO mbedtls_platform_std_nv_seed_read /**< Default nv_seed_read function to use, can be undefined */ -//#define MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO mbedtls_platform_std_nv_seed_write /**< Default nv_seed_write function to use, can be undefined */ - -/** - * \brief This macro is invoked by the library when an invalid parameter - * is detected that is only checked with #MBEDTLS_CHECK_PARAMS - * (see the documentation of that option for context). - * - * When you leave this undefined here, the library provides - * a default definition. If the macro #MBEDTLS_CHECK_PARAMS_ASSERT - * is defined, the default definition is `assert(cond)`, - * otherwise the default definition calls a function - * mbedtls_param_failed(). This function is declared in - * `platform_util.h` for the benefit of the library, but - * you need to define in your application. - * - * When you define this here, this replaces the default - * definition in platform_util.h (which no longer declares the - * function mbedtls_param_failed()) and it is your responsibility - * to make sure this macro expands to something suitable (in - * particular, that all the necessary declarations are visible - * from within the library - you can ensure that by providing - * them in this file next to the macro definition). - * If you define this macro to call `assert`, also define - * #MBEDTLS_CHECK_PARAMS_ASSERT so that library source files - * include ``. - * - * Note that you may define this macro to expand to nothing, in - * which case you don't have to worry about declarations or - * definitions. However, you will then be notified about invalid - * parameters only in non-void functions, and void function will - * just silently return early on invalid parameters, which - * partially negates the benefits of enabling - * #MBEDTLS_CHECK_PARAMS in the first place, so is discouraged. - * - * \param cond The expression that should evaluate to true, but doesn't. - */ -//#define MBEDTLS_PARAM_FAILED( cond ) assert( cond ) - -/* PSA options */ -/** - * Use HMAC_DRBG with the specified hash algorithm for HMAC_DRBG for the - * PSA crypto subsystem. - * - * If this option is unset: - * - If CTR_DRBG is available, the PSA subsystem uses it rather than HMAC_DRBG. - * - Otherwise, the PSA subsystem uses HMAC_DRBG with either - * #MBEDTLS_MD_SHA512 or #MBEDTLS_MD_SHA256 based on availability and - * on unspecified heuristics. - */ -//#define MBEDTLS_PSA_HMAC_DRBG_MD_TYPE MBEDTLS_MD_SHA256 - -/** \def MBEDTLS_PSA_KEY_SLOT_COUNT - * Restrict the PSA library to supporting a maximum amount of simultaneously - * loaded keys. A loaded key is a key stored by the PSA Crypto core as a - * volatile key, or a persistent key which is loaded temporarily by the - * library as part of a crypto operation in flight. - * - * If this option is unset, the library will fall back to a default value of - * 32 keys. - */ -//#define MBEDTLS_PSA_KEY_SLOT_COUNT 32 - -/* SSL Cache options */ -//#define MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT 86400 /**< 1 day */ -//#define MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES 50 /**< Maximum entries in cache */ - -/* SSL options */ - -/** \def MBEDTLS_SSL_MAX_CONTENT_LEN + * \def MBEDTLS_SSL_MAX_CONTENT_LEN * * Maximum length (in bytes) of incoming and outgoing plaintext fragments. * @@ -3730,9 +1077,10 @@ * Uncomment to set the maximum plaintext size of both * incoming and outgoing I/O buffers. */ -//#define MBEDTLS_SSL_MAX_CONTENT_LEN 16384 +/*#define MBEDTLS_SSL_MAX_CONTENT_LEN 16384*/ -/** \def MBEDTLS_SSL_IN_CONTENT_LEN +/** + * \def MBEDTLS_SSL_IN_CONTENT_LEN * * Maximum length (in bytes) of incoming plaintext fragments. * @@ -3755,23 +1103,24 @@ * Uncomment to set the maximum plaintext size of the incoming I/O buffer * independently of the outgoing I/O buffer. */ -//#define MBEDTLS_SSL_IN_CONTENT_LEN 16384 +/*#define MBEDTLS_SSL_IN_CONTENT_LEN 16384*/ -/** \def MBEDTLS_SSL_CID_IN_LEN_MAX +/** + * \def MBEDTLS_SSL_CID_IN_LEN_MAX * * The maximum length of CIDs used for incoming DTLS messages. - * */ -//#define MBEDTLS_SSL_CID_IN_LEN_MAX 32 +/*#define MBEDTLS_SSL_CID_IN_LEN_MAX 32*/ -/** \def MBEDTLS_SSL_CID_OUT_LEN_MAX +/** + * \def MBEDTLS_SSL_CID_OUT_LEN_MAX * * The maximum length of CIDs used for outgoing DTLS messages. - * */ -//#define MBEDTLS_SSL_CID_OUT_LEN_MAX 32 +/*#define MBEDTLS_SSL_CID_OUT_LEN_MAX 32*/ -/** \def MBEDTLS_SSL_CID_PADDING_GRANULARITY +/** + * \def MBEDTLS_SSL_CID_PADDING_GRANULARITY * * This option controls the use of record plaintext padding * when using the Connection ID extension in DTLS 1.2. @@ -3784,11 +1133,11 @@ * * Note: On systems lacking division instructions, * a power of two should be preferred. - * */ -//#define MBEDTLS_SSL_CID_PADDING_GRANULARITY 16 +/*#define MBEDTLS_SSL_CID_PADDING_GRANULARITY 16*/ -/** \def MBEDTLS_SSL_TLS1_3_PADDING_GRANULARITY +/** + * \def MBEDTLS_SSL_TLS1_3_PADDING_GRANULARITY * * This option controls the use of record plaintext padding * in TLS 1.3. @@ -3802,9 +1151,10 @@ * Note: On systems lacking division instructions, * a power of two should be preferred. */ -//#define MBEDTLS_SSL_TLS1_3_PADDING_GRANULARITY 1 +/*#define MBEDTLS_SSL_TLS1_3_PADDING_GRANULARITY 1*/ -/** \def MBEDTLS_SSL_OUT_CONTENT_LEN +/** + * \def MBEDTLS_SSL_OUT_CONTENT_LEN * * Maximum length (in bytes) of outgoing plaintext fragments. * @@ -3826,9 +1176,10 @@ * Uncomment to set the maximum plaintext size of the outgoing I/O buffer * independently of the incoming I/O buffer. */ -//#define MBEDTLS_SSL_OUT_CONTENT_LEN 16384 +/*#define MBEDTLS_SSL_OUT_CONTENT_LEN 16384*/ -/** \def MBEDTLS_SSL_DTLS_MAX_BUFFERING +/** + * \def MBEDTLS_SSL_DTLS_MAX_BUFFERING * * Maximum number of heap-allocated bytes for the purpose of * DTLS handshake message reassembly and future message buffering. @@ -3841,31 +1192,8 @@ * should be sufficient for all practical situations as it allows * to reassembly a large handshake message (such as a certificate) * while buffering multiple smaller handshake messages. - * */ -//#define MBEDTLS_SSL_DTLS_MAX_BUFFERING 32768 - -//#define MBEDTLS_SSL_DEFAULT_TICKET_LIFETIME 86400 /**< Lifetime of session tickets (if enabled) */ -//#define MBEDTLS_PSK_MAX_LEN 32 /**< Max size of TLS pre-shared keys, in bytes (default 256 bits) */ -//#define MBEDTLS_SSL_COOKIE_TIMEOUT 60 /**< Default expiration delay of DTLS cookies, in seconds if HAVE_TIME, or in number of cookies issued */ - -/** - * Complete list of ciphersuites to use, in order of preference. - * - * \warning No dependency checking is done on that field! This option can only - * be used to restrict the set of available ciphersuites. It is your - * responsibility to make sure the needed modules are active. - * - * Use this to save a few hundred bytes of ROM (default ordering of all - * available ciphersuites) and a few to a few hundred bytes of RAM. - * - * The value below is only an example, not the default. - */ -//#define MBEDTLS_SSL_CIPHERSUITES MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - -/* X509 options */ -//#define MBEDTLS_X509_MAX_INTERMEDIATE_CA 8 /**< Maximum number of intermediate CAs in a verification chain. */ -//#define MBEDTLS_X509_MAX_FILE_PATH_LEN 512 /**< Maximum length of a path/filename string in bytes including the null terminator character ('\0'). */ +/*#define MBEDTLS_SSL_DTLS_MAX_BUFFERING 32768*/ /** * Allow SHA-1 in the default TLS configuration for certificate signing. @@ -3879,7 +1207,7 @@ * on it, and considering stronger message digests instead. * */ -//#define MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES +/*#define MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES*/ /** * Allow SHA-1 in the default TLS configuration for TLS 1.2 handshake @@ -3894,73 +1222,8 @@ * \warning SHA-1 is considered a weak message digest and its use constitutes * a security risk. If possible, we recommend avoiding dependencies * on it, and considering stronger message digests instead. - * */ -#define MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_KEY_EXCHANGE +/*#define MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_KEY_EXCHANGE*/ -/** - * Uncomment the macro to let mbed TLS use your alternate implementation of - * mbedtls_platform_zeroize(). This replaces the default implementation in - * platform_util.c. - * - * mbedtls_platform_zeroize() is a widely used function across the library to - * zero a block of memory. The implementation is expected to be secure in the - * sense that it has been written to prevent the compiler from removing calls - * to mbedtls_platform_zeroize() as part of redundant code elimination - * optimizations. However, it is difficult to guarantee that calls to - * mbedtls_platform_zeroize() will not be optimized by the compiler as older - * versions of the C language standards do not provide a secure implementation - * of memset(). Therefore, MBEDTLS_PLATFORM_ZEROIZE_ALT enables users to - * configure their own implementation of mbedtls_platform_zeroize(), for - * example by using directives specific to their compiler, features from newer - * C standards (e.g using memset_s() in C11) or calling a secure memset() from - * their system (e.g explicit_bzero() in BSD). - */ -//#define MBEDTLS_PLATFORM_ZEROIZE_ALT - -/** - * Uncomment the macro to let Mbed TLS use your alternate implementation of - * mbedtls_platform_gmtime_r(). This replaces the default implementation in - * platform_util.c. - * - * gmtime() is not a thread-safe function as defined in the C standard. The - * library will try to use safer implementations of this function, such as - * gmtime_r() when available. However, if Mbed TLS cannot identify the target - * system, the implementation of mbedtls_platform_gmtime_r() will default to - * using the standard gmtime(). In this case, calls from the library to - * gmtime() will be guarded by the global mutex mbedtls_threading_gmtime_mutex - * if MBEDTLS_THREADING_C is enabled. We recommend that calls from outside the - * library are also guarded with this mutex to avoid race conditions. However, - * if the macro MBEDTLS_PLATFORM_GMTIME_R_ALT is defined, Mbed TLS will - * unconditionally use the implementation for mbedtls_platform_gmtime_r() - * supplied at compile time. - */ -//#define MBEDTLS_PLATFORM_GMTIME_R_ALT - -/** - * Enable the verified implementations of ECDH primitives from Project Everest - * (currently only Curve25519). This feature changes the layout of ECDH - * contexts and therefore is a compatibility break for applications that access - * fields of a mbedtls_ecdh_context structure directly. See also - * MBEDTLS_ECDH_LEGACY_CONTEXT in include/mbedtls/ecdh.h. - */ -//#define MBEDTLS_ECDH_VARIANT_EVEREST_ENABLED - -/* \} name SECTION: Customisation configuration options */ - -/* Target and application specific configurations - * - * Allow user to override any previous default. - * - */ -#if defined(MBEDTLS_USER_CONFIG_FILE) -#include MBEDTLS_USER_CONFIG_FILE -#endif - -#if defined(MBEDTLS_PSA_CRYPTO_CONFIG) -#include "third_party/mbedtls/config_psa.h" -#endif - -#include "third_party/mbedtls/check_config.h" - -#endif /* MBEDTLS_CONFIG_H */ +#include "third_party/mbedtls/check.h" +#endif /* MBEDTLS_CONFIG_H_ */ diff --git a/third_party/mbedtls/config_psa.h b/third_party/mbedtls/config_psa.h deleted file mode 100644 index 42da44048..000000000 --- a/third_party/mbedtls/config_psa.h +++ /dev/null @@ -1,546 +0,0 @@ -/* clang-format off */ - -/** - * \file mbedtls/config_psa.h - * \brief PSA crypto configuration options (set of defines) - * - * This set of compile-time options takes settings defined in - * include/mbedtls/config.h and include/psa/crypto_config.h and uses - * those definitions to define symbols used in the library code. - * - * Users and integrators should not edit this file, please edit - * include/mbedtls/config.h for MBETLS_XXX settings or - * include/psa/crypto_config.h for PSA_WANT_XXX settings. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MBEDTLS_CONFIG_PSA_H -#define MBEDTLS_CONFIG_PSA_H - -#if defined(MBEDTLS_PSA_CRYPTO_CONFIG) -#include "third_party/mbedtls/crypto_config.h" -#endif /* defined(MBEDTLS_PSA_CRYPTO_CONFIG) */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(MBEDTLS_PSA_CRYPTO_CONFIG) - -#if defined(PSA_WANT_ALG_DETERMINISTIC_ECDSA) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_DETERMINISTIC_ECDSA) -#define MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA 1 -#define MBEDTLS_ECDSA_DETERMINISTIC -#define MBEDTLS_ECDSA_C -#define MBEDTLS_HMAC_DRBG_C -#define MBEDTLS_MD_C -#endif /* !MBEDTLS_PSA_ACCEL_ALG_DETERMINISTIC_ECDSA */ -#endif /* PSA_WANT_ALG_DETERMINISTIC_ECDSA */ - -#if defined(PSA_WANT_ALG_ECDH) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_ECDH) -#define MBEDTLS_PSA_BUILTIN_ALG_ECDH 1 -#define MBEDTLS_ECDH_C -#define MBEDTLS_ECP_C -#define MBEDTLS_BIGNUM_C -#endif /* !MBEDTLS_PSA_ACCEL_ALG_ECDH */ -#endif /* PSA_WANT_ALG_ECDH */ - -#if defined(PSA_WANT_ALG_ECDSA) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_ECDSA) -#define MBEDTLS_PSA_BUILTIN_ALG_ECDSA 1 -#define MBEDTLS_ECDSA_C -#endif /* !MBEDTLS_PSA_ACCEL_ALG_ECDSA */ -#endif /* PSA_WANT_ALG_ECDSA */ - -#if defined(PSA_WANT_ALG_HKDF) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_HKDF) -#define MBEDTLS_PSA_BUILTIN_ALG_HMAC 1 -#define MBEDTLS_PSA_BUILTIN_ALG_HKDF 1 -#endif /* !MBEDTLS_PSA_ACCEL_ALG_HKDF */ -#endif /* PSA_WANT_ALG_HKDF */ - -#if defined(PSA_WANT_ALG_HMAC) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_HMAC) -#define MBEDTLS_PSA_BUILTIN_ALG_HMAC 1 -#endif /* !MBEDTLS_PSA_ACCEL_ALG_HMAC */ -#endif /* PSA_WANT_ALG_HMAC */ - -#if defined(PSA_WANT_ALG_MD2) && !defined(MBEDTLS_PSA_ACCEL_ALG_MD2) -#define MBEDTLS_PSA_BUILTIN_ALG_MD2 1 -#define MBEDTLS_MD2_C -#endif - -#if defined(PSA_WANT_ALG_MD4) && !defined(MBEDTLS_PSA_ACCEL_ALG_MD4) -#define MBEDTLS_PSA_BUILTIN_ALG_MD4 1 -#define MBEDTLS_MD4_C -#endif - -#if defined(PSA_WANT_ALG_MD5) && !defined(MBEDTLS_PSA_ACCEL_ALG_MD5) -#define MBEDTLS_PSA_BUILTIN_ALG_MD5 1 -#define MBEDTLS_MD5_C -#endif - -#if defined(PSA_WANT_ALG_RIPEMD160) && !defined(MBEDTLS_PSA_ACCEL_ALG_RIPEMD160) -#define MBEDTLS_PSA_BUILTIN_ALG_RIPEMD160 1 -#define MBEDTLS_RIPEMD160_C -#endif - -#if defined(PSA_WANT_ALG_RSA_OAEP) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_RSA_OAEP) -#define MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP 1 -#define MBEDTLS_RSA_C -#define MBEDTLS_BIGNUM_C -#define MBEDTLS_OID_C -#define MBEDTLS_PKCS1_V21 -#define MBEDTLS_MD_C -#endif /* !MBEDTLS_PSA_ACCEL_ALG_RSA_OAEP */ -#endif /* PSA_WANT_ALG_RSA_OAEP */ - -#if defined(PSA_WANT_ALG_RSA_PKCS1V15_CRYPT) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_RSA_PKCS1V15_CRYPT) -#define MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT 1 -#define MBEDTLS_RSA_C -#define MBEDTLS_BIGNUM_C -#define MBEDTLS_OID_C -#define MBEDTLS_PKCS1_V15 -#endif /* !MBEDTLS_PSA_ACCEL_ALG_RSA_PKCS1V15_CRYPT */ -#endif /* PSA_WANT_ALG_RSA_PKCS1V15_CRYPT */ - -#if defined(PSA_WANT_ALG_RSA_PKCS1V15_SIGN) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_RSA_PKCS1V15_SIGN) -#define MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN 1 -#define MBEDTLS_RSA_C -#define MBEDTLS_BIGNUM_C -#define MBEDTLS_OID_C -#define MBEDTLS_PKCS1_V15 -#define MBEDTLS_MD_C -#endif /* !MBEDTLS_PSA_ACCEL_ALG_RSA_PKCS1V15_SIGN */ -#endif /* PSA_WANT_ALG_RSA_PKCS1V15_SIGN */ - -#if defined(PSA_WANT_ALG_RSA_PSS) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_RSA_PSS) -#define MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS 1 -#define MBEDTLS_RSA_C -#define MBEDTLS_BIGNUM_C -#define MBEDTLS_OID_C -#define MBEDTLS_PKCS1_V21 -#define MBEDTLS_MD_C -#endif /* !MBEDTLS_PSA_ACCEL_ALG_RSA_PSS */ -#endif /* PSA_WANT_ALG_RSA_PSS */ - -#if defined(PSA_WANT_ALG_SHA_1) && !defined(MBEDTLS_PSA_ACCEL_ALG_SHA_1) -#define MBEDTLS_PSA_BUILTIN_ALG_SHA_1 1 -#define MBEDTLS_SHA1_C -#endif - -#if defined(PSA_WANT_ALG_SHA_224) && !defined(MBEDTLS_PSA_ACCEL_ALG_SHA_224) -#define MBEDTLS_PSA_BUILTIN_ALG_SHA_224 1 -#define MBEDTLS_SHA256_C -#endif - -#if defined(PSA_WANT_ALG_SHA_256) && !defined(MBEDTLS_PSA_ACCEL_ALG_SHA_256) -#define MBEDTLS_PSA_BUILTIN_ALG_SHA_256 1 -#define MBEDTLS_SHA256_C -#endif - -#if defined(PSA_WANT_ALG_SHA_384) && !defined(MBEDTLS_PSA_ACCEL_ALG_SHA_384) -#define MBEDTLS_PSA_BUILTIN_ALG_SHA_384 1 -#define MBEDTLS_SHA512_C -#endif - -#if defined(PSA_WANT_ALG_SHA_512) && !defined(MBEDTLS_PSA_ACCEL_ALG_SHA_512) -#define MBEDTLS_PSA_BUILTIN_ALG_SHA_512 1 -#define MBEDTLS_SHA512_C -#endif - -#if defined(PSA_WANT_ALG_TLS12_PRF) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_TLS12_PRF) -#define MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF 1 -#endif /* !MBEDTLS_PSA_ACCEL_ALG_TLS12_PRF */ -#endif /* PSA_WANT_ALG_TLS12_PRF */ - -#if defined(PSA_WANT_ALG_TLS12_PSK_TO_MS) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_TLS12_PSK_TO_MS) -#define MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS 1 -#endif /* !MBEDTLS_PSA_ACCEL_ALG_TLS12_PSK_TO_MS */ -#endif /* PSA_WANT_ALG_TLS12_PSK_TO_MS */ - -#if defined(PSA_WANT_KEY_TYPE_ECC_KEY_PAIR) -#if !defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR) -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR 1 -#define MBEDTLS_ECP_C -#define MBEDTLS_BIGNUM_C -#endif /* !MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR */ -#endif /* PSA_WANT_KEY_TYPE_ECC_KEY_PAIR */ - -#if defined(PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY) -#if !defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_PUBLIC_KEY) -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY 1 -#define MBEDTLS_ECP_C -#define MBEDTLS_BIGNUM_C -#endif /* !MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_PUBLIC_KEY */ -#endif /* PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY */ - -#if defined(PSA_WANT_KEY_TYPE_RSA_KEY_PAIR) -#if !defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_KEY_PAIR) -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR 1 -#define MBEDTLS_RSA_C -#define MBEDTLS_BIGNUM_C -#define MBEDTLS_OID_C -#define MBEDTLS_GENPRIME -#define MBEDTLS_PK_PARSE_C -#define MBEDTLS_PK_WRITE_C -#define MBEDTLS_PK_C -#endif /* !MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_KEY_PAIR */ -#endif /* PSA_WANT_KEY_TYPE_RSA_KEY_PAIR */ - -#if defined(PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY) -#if !defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_PUBLIC_KEY) -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY 1 -#define MBEDTLS_RSA_C -#define MBEDTLS_BIGNUM_C -#define MBEDTLS_OID_C -#define MBEDTLS_PK_PARSE_C -#define MBEDTLS_PK_WRITE_C -#define MBEDTLS_PK_C -#endif /* !MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_PUBLIC_KEY */ -#endif /* PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY */ - -/* If any of the block modes are requested that don't have an - * associated HW assist, define PSA_HAVE_SOFT_BLOCK_MODE for checking - * in the block cipher key types. */ -#if (defined(PSA_WANT_ALG_CTR) && !defined(MBEDTLS_PSA_ACCEL_ALG_CTR)) || \ - (defined(PSA_WANT_ALG_CFB) && !defined(MBEDTLS_PSA_ACCEL_ALG_CFB)) || \ - (defined(PSA_WANT_ALG_OFB) && !defined(MBEDTLS_PSA_ACCEL_ALG_OFB)) || \ - (defined(PSA_WANT_ALG_XTS) && !defined(MBEDTLS_PSA_ACCEL_ALG_XTS)) || \ - defined(PSA_WANT_ALG_ECB_NO_PADDING) || \ - (defined(PSA_WANT_ALG_CBC_NO_PADDING) && \ - !defined(MBEDTLS_PSA_ACCEL_ALG_CBC_NO_PADDING)) || \ - (defined(PSA_WANT_ALG_CBC_PKCS7) && \ - !defined(MBEDTLS_PSA_ACCEL_ALG_CBC_PKCS7)) -#define PSA_HAVE_SOFT_BLOCK_MODE 1 -#endif - -#if defined(PSA_WANT_KEY_TYPE_AES) -#if !defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_AES) -#define PSA_HAVE_SOFT_KEY_TYPE_AES 1 -#endif /* !MBEDTLS_PSA_ACCEL_KEY_TYPE_AES */ -#if defined(PSA_HAVE_SOFT_KEY_TYPE_AES) || \ - defined(PSA_HAVE_SOFT_BLOCK_MODE) -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_AES 1 -#define MBEDTLS_AES_C -#endif /* PSA_HAVE_SOFT_KEY_TYPE_AES || PSA_HAVE_SOFT_BLOCK_MODE */ -#endif /* PSA_WANT_KEY_TYPE_AES */ - -#if defined(PSA_WANT_KEY_TYPE_ARC4) -#if !defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ARC4) -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_ARC4 1 -#define MBEDTLS_ARC4_C -#endif /*!MBEDTLS_PSA_ACCEL_KEY_TYPE_ARC4 */ -#endif /* PSA_WANT_KEY_TYPE_ARC4 */ - -#if defined(PSA_WANT_KEY_TYPE_CAMELLIA) -#if !defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_CAMELLIA) -#define PSA_HAVE_SOFT_KEY_TYPE_CAMELLIA 1 -#endif /* !MBEDTLS_PSA_ACCEL_KEY_TYPE_CAMELLIA */ -#if defined(PSA_HAVE_SOFT_KEY_TYPE_CAMELLIA) || \ - defined(PSA_HAVE_SOFT_BLOCK_MODE) -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_CAMELLIA 1 -#define MBEDTLS_CAMELLIA_C -#endif /* PSA_HAVE_SOFT_KEY_TYPE_CAMELLIA || PSA_HAVE_SOFT_BLOCK_MODE */ -#endif /* PSA_WANT_KEY_TYPE_CAMELLIA */ - -#if defined(PSA_WANT_KEY_TYPE_DES) -#if !defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_DES) -#define PSA_HAVE_SOFT_KEY_TYPE_DES 1 -#endif /* !MBEDTLS_PSA_ACCEL_KEY_TYPE_DES */ -#if defined(PSA_HAVE_SOFT_KEY_TYPE_DES) || \ - defined(PSA_HAVE_SOFT_BLOCK_MODE) -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_DES 1 -#define MBEDTLS_DES_C -#endif /*PSA_HAVE_SOFT_KEY_TYPE_DES || PSA_HAVE_SOFT_BLOCK_MODE */ -#endif /* PSA_WANT_KEY_TYPE_DES */ - -#if defined(PSA_WANT_KEY_TYPE_CHACHA20) -#if !defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_CHACHA20) -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_CHACHA20 1 -#define MBEDTLS_CHACHA20_C -#endif /*!MBEDTLS_PSA_ACCEL_KEY_TYPE_CHACHA20 */ -#endif /* PSA_WANT_KEY_TYPE_CHACHA20 */ - -/* If any of the software block ciphers are selected, define - * PSA_HAVE_SOFT_BLOCK_CIPHER, which can be used in any of these - * situations. */ -#if defined(PSA_HAVE_SOFT_KEY_TYPE_AES) || \ - defined(PSA_HAVE_SOFT_KEY_TYPE_DES) || \ - defined(PSA_HAVE_SOFT_KEY_TYPE_CAMELLIA) -#define PSA_HAVE_SOFT_BLOCK_CIPHER 1 -#endif - -#if defined(PSA_WANT_ALG_STREAM_CIPHER) -#define MBEDTLS_PSA_BUILTIN_ALG_STREAM_CIPHER 1 -#endif /* PSA_WANT_ALG_STREAM_CIPHER */ - -#if defined(PSA_WANT_ALG_CTR) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_CTR) || \ - defined(PSA_HAVE_SOFT_BLOCK_CIPHER) -#define MBEDTLS_PSA_BUILTIN_ALG_CTR 1 -#define MBEDTLS_CIPHER_MODE_CTR -#endif -#endif /* PSA_WANT_ALG_CTR */ - -#if defined(PSA_WANT_ALG_CFB) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_CFB) || \ - defined(PSA_HAVE_SOFT_BLOCK_CIPHER) -#define MBEDTLS_PSA_BUILTIN_ALG_CFB 1 -#define MBEDTLS_CIPHER_MODE_CFB -#endif -#endif /* PSA_WANT_ALG_CFB */ - -#if defined(PSA_WANT_ALG_OFB) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_OFB) || \ - defined(PSA_HAVE_SOFT_BLOCK_CIPHER) -#define MBEDTLS_PSA_BUILTIN_ALG_OFB 1 -#define MBEDTLS_CIPHER_MODE_OFB -#endif -#endif /* PSA_WANT_ALG_OFB */ - -#if defined(PSA_WANT_ALG_XTS) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_XTS) || \ - defined(PSA_HAVE_SOFT_BLOCK_CIPHER) -#define MBEDTLS_PSA_BUILTIN_ALG_XTS 1 -#define MBEDTLS_CIPHER_MODE_XTS -#endif -#endif /* PSA_WANT_ALG_XTS */ - -#if defined(PSA_WANT_ALG_ECB_NO_PADDING) -#define MBEDTLS_PSA_BUILTIN_ALG_ECB_NO_PADDING 1 -#endif - -#if defined(PSA_WANT_ALG_CBC_NO_PADDING) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_CBC_NO_PADDING) || \ - defined(PSA_HAVE_SOFT_BLOCK_CIPHER) -#define MBEDTLS_CIPHER_MODE_CBC -#define MBEDTLS_PSA_BUILTIN_ALG_CBC_NO_PADDING 1 -#endif -#endif /* PSA_WANT_ALG_CBC_NO_PADDING */ - -#if defined(PSA_WANT_ALG_CBC_PKCS7) -#if !defined(MBEDTLS_PSA_ACCEL_ALG_CBC_PKCS7) || \ - defined(PSA_HAVE_SOFT_BLOCK_CIPHER) -#define MBEDTLS_CIPHER_MODE_CBC -#define MBEDTLS_PSA_BUILTIN_ALG_CBC_PKCS7 1 -#define MBEDTLS_CIPHER_PADDING_PKCS7 -#endif -#endif /* PSA_WANT_ALG_CBC_PKCS7 */ - -#if defined(PSA_WANT_ALG_CHACHA20_POLY1305) -#if defined(PSA_WANT_KEY_TYPE_CHACHA20) -#define MBEDTLS_CHACHAPOLY_C -#define MBEDTLS_PSA_BUILTIN_ALG_CHACHA20_POLY1305 1 -#endif /* PSA_WANT_KEY_TYPE_CHACHA20 */ -#endif /* PSA_WANT_ALG_CHACHA20_POLY1305 */ - -#else /* MBEDTLS_PSA_CRYPTO_CONFIG */ - -/* - * Ensure PSA_WANT_* defines are setup properly if MBEDTLS_PSA_CRYPTO_CONFIG - * is not defined - */ - -#if defined(MBEDTLS_ECDH_C) -#define MBEDTLS_PSA_BUILTIN_ALG_ECDH 1 -#define PSA_WANT_ALG_ECDH 1 -#endif /* MBEDTLS_ECDH_C */ - -#if defined(MBEDTLS_ECDSA_C) -#define MBEDTLS_PSA_BUILTIN_ALG_ECDSA 1 -#define PSA_WANT_ALG_ECDSA 1 - -// Only add in DETERMINISTIC support if ECDSA is also enabled -#if defined(MBEDTLS_ECDSA_DETERMINISTIC) -#define MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA 1 -#define PSA_WANT_ALG_DETERMINISTIC_ECDSA 1 -#endif /* MBEDTLS_ECDSA_DETERMINISTIC */ - -#endif /* MBEDTLS_ECDSA_C */ - -#if defined(MBEDTLS_ECP_C) -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR 1 -#define PSA_WANT_KEY_TYPE_ECC_KEY_PAIR 1 -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY 1 -#define PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY 1 -#endif /* MBEDTLS_ECP_C */ - -#if defined(MBEDTLS_HKDF_C) -#define MBEDTLS_PSA_BUILTIN_ALG_HMAC 1 -#define PSA_WANT_ALG_HMAC 1 -#define MBEDTLS_PSA_BUILTIN_ALG_HKDF 1 -#define PSA_WANT_ALG_HKDF 1 -#endif /* MBEDTLS_HKDF_C */ - -#if defined(MBEDTLS_MD_C) -#define MBEDTLS_PSA_BUILTIN_ALG_HMAC 1 -#define PSA_WANT_ALG_HMAC 1 -#define PSA_WANT_KEY_TYPE_HMAC -#define MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF 1 -#define PSA_WANT_ALG_TLS12_PRF 1 -#define MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS 1 -#define PSA_WANT_ALG_TLS12_PSK_TO_MS 1 -#endif /* MBEDTLS_MD_C */ - -#if defined(MBEDTLS_MD2_C) -#define MBEDTLS_PSA_BUILTIN_ALG_MD2 1 -#define PSA_WANT_ALG_MD2 1 -#endif - -#if defined(MBEDTLS_MD4_C) -#define MBEDTLS_PSA_BUILTIN_ALG_MD4 1 -#define PSA_WANT_ALG_MD4 1 -#endif - -#if defined(MBEDTLS_MD5_C) -#define MBEDTLS_PSA_BUILTIN_ALG_MD5 1 -#define PSA_WANT_ALG_MD5 1 -#endif - -#if defined(MBEDTLS_RIPEMD160_C) -#define MBEDTLS_PSA_BUILTIN_ALG_RIPEMD160 1 -#define PSA_WANT_ALG_RIPEMD160 1 -#endif - -#if defined(MBEDTLS_RSA_C) -#if defined(MBEDTLS_PKCS1_V15) -#define MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT 1 -#define PSA_WANT_ALG_RSA_PKCS1V15_CRYPT 1 -#define MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN 1 -#define PSA_WANT_ALG_RSA_PKCS1V15_SIGN 1 -#endif /* MBEDTLSS_PKCS1_V15 */ -#if defined(MBEDTLS_PKCS1_V21) -#define MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP 1 -#define PSA_WANT_ALG_RSA_OAEP 1 -#define MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS 1 -#define PSA_WANT_ALG_RSA_PSS 1 -#endif /* MBEDTLS_PKCS1_V21 */ -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR 1 -#define PSA_WANT_KEY_TYPE_RSA_KEY_PAIR 1 -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY 1 -#define PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY 1 -#endif /* MBEDTLS_RSA_C */ - -#if defined(MBEDTLS_SHA1_C) -#define MBEDTLS_PSA_BUILTIN_ALG_SHA_1 1 -#define PSA_WANT_ALG_SHA_1 1 -#endif - -#if defined(MBEDTLS_SHA256_C) -#define MBEDTLS_PSA_BUILTIN_ALG_SHA_224 1 -#define MBEDTLS_PSA_BUILTIN_ALG_SHA_256 1 -#define PSA_WANT_ALG_SHA_224 1 -#define PSA_WANT_ALG_SHA_256 1 -#endif - -#if defined(MBEDTLS_SHA512_C) -#if !defined(MBEDTLS_SHA512_NO_SHA384) -#define MBEDTLS_PSA_BUILTIN_ALG_SHA_384 1 -#define PSA_WANT_ALG_SHA_384 1 -#endif -#define MBEDTLS_PSA_BUILTIN_ALG_SHA_512 1 -#define PSA_WANT_ALG_SHA_512 1 -#endif - -#if defined(MBEDTLS_AES_C) -#define PSA_WANT_KEY_TYPE_AES 1 -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_AES 1 -#endif - -#if defined(MBEDTLS_ARC4_C) -#define PSA_WANT_KEY_TYPE_ARC4 1 -#define PSA_WANT_ALG_STREAM_CIPHER 1 -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_ARC4 1 -#define MBEDTLS_PSA_BUILTIN_ALG_STREAM_CIPHER 1 -#endif - -#if defined(MBEDTLS_CAMELLIA_C) -#define PSA_WANT_KEY_TYPE_CAMELLIA 1 -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_CAMELLIA 1 -#endif - -#if defined(MBEDTLS_DES_C) -#define PSA_WANT_KEY_TYPE_DES 1 -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_DES 1 -#endif - -#if defined(MBEDTLS_CHACHA20_C) -#define PSA_WANT_KEY_TYPE_CHACHA20 1 -#define PSA_WANT_ALG_STREAM_CIPHER 1 -#define MBEDTLS_PSA_BUILTIN_KEY_TYPE_CHACHA20 1 -#define MBEDTLS_PSA_BUILTIN_ALG_STREAM_CIPHER 1 -#if defined(MBEDTLS_CHACHAPOLY_C) -#define PSA_WANT_ALG_CHACHA20_POLY1305 1 -#define MBEDTLS_PSA_BUILTIN_ALG_CHACHA20_POLY1305 1 -#endif -#endif - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -#define MBEDTLS_PSA_BUILTIN_ALG_CBC_NO_PADDING 1 -#define PSA_WANT_ALG_CBC_NO_PADDING 1 -#if defined(MBEDTLS_CIPHER_PADDING_PKCS7) -#define MBEDTLS_PSA_BUILTIN_ALG_CBC_PKCS7 1 -#define PSA_WANT_ALG_CBC_PKCS7 1 -#endif -#endif - -#if defined(MBEDTLS_AES_C) || defined(MBEDTLS_DES_C) || \ - defined(MBEDTLS_CAMELLIA_C) -#define MBEDTLS_PSA_BUILTIN_ALG_ECB_NO_PADDING 1 -#define PSA_WANT_ALG_ECB_NO_PADDING 1 -#endif - -#if defined(MBEDTLS_CIPHER_MODE_CFB) -#define MBEDTLS_PSA_BUILTIN_ALG_CFB 1 -#define PSA_WANT_ALG_CFB 1 -#endif - -#if defined(MBEDTLS_CIPHER_MODE_CTR) -#define MBEDTLS_PSA_BUILTIN_ALG_CTR 1 -#define PSA_WANT_ALG_CTR 1 -#endif - -#if defined(MBEDTLS_CIPHER_MODE_OFB) -#define MBEDTLS_PSA_BUILTIN_ALG_OFB 1 -#define PSA_WANT_ALG_OFB 1 -#endif - -#if defined(MBEDTLS_CIPHER_MODE_XTS) -#define MBEDTLS_PSA_BUILTIN_ALG_XTS 1 -#define PSA_WANT_ALG_XTS 1 -#endif - -#endif /* MBEDTLS_PSA_CRYPTO_CONFIG */ - -/* These features are always enabled. */ -#define PSA_WANT_KEY_TYPE_DERIVE 1 -#define PSA_WANT_KEY_TYPE_RAW_DATA 1 - -#ifdef __cplusplus -} -#endif - -#endif /* MBEDTLS_CONFIG_PSA_H */ diff --git a/third_party/mbedtls/crypto.h b/third_party/mbedtls/crypto.h deleted file mode 100644 index 06f7b2977..000000000 --- a/third_party/mbedtls/crypto.h +++ /dev/null @@ -1,3774 +0,0 @@ -/* clang-format off */ -/** - * \file psa/crypto.h - * \brief Platform Security Architecture cryptography module - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef PSA_CRYPTO_H -#define PSA_CRYPTO_H -#include "third_party/mbedtls/crypto_platform.h" - -#ifdef __DOXYGEN_ONLY__ -/* This __DOXYGEN_ONLY__ block contains mock definitions for things that - * must be defined in the crypto_platform.h header. These mock definitions - * are present in this file as a convenience to generate pretty-printed - * documentation that includes those definitions. */ - -/** \defgroup platform Implementation-specific definitions - * @{ - */ - -/**@}*/ -#endif /* __DOXYGEN_ONLY__ */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* The file "crypto_types.h" declares types that encode errors, - * algorithms, key types, policies, etc. */ -#include "third_party/mbedtls/crypto_types.h" - -/** \defgroup version API version - * @{ - */ - -/** - * The major version of this implementation of the PSA Crypto API - */ -#define PSA_CRYPTO_API_VERSION_MAJOR 1 - -/** - * The minor version of this implementation of the PSA Crypto API - */ -#define PSA_CRYPTO_API_VERSION_MINOR 0 - -/**@}*/ - -/* The file "crypto_values.h" declares macros to build and analyze values - * of integral types defined in "crypto_types.h". */ -#include "third_party/mbedtls/crypto_values.h" - -/** \defgroup initialization Library initialization - * @{ - */ - -/** - * \brief Library initialization. - * - * Applications must call this function before calling any other - * function in this module. - * - * Applications may call this function more than once. Once a call - * succeeds, subsequent calls are guaranteed to succeed. - * - * If the application calls other functions before calling psa_crypto_init(), - * the behavior is undefined. Implementations are encouraged to either perform - * the operation as if the library had been initialized or to return - * #PSA_ERROR_BAD_STATE or some other applicable error. In particular, - * implementations should not return a success status if the lack of - * initialization may have security implications, for example due to improper - * seeding of the random number generator. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_INSUFFICIENT_STORAGE - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_INSUFFICIENT_ENTROPY - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_DATA_INVALID - * \retval #PSA_ERROR_DATA_CORRUPT - */ -psa_status_t psa_crypto_init(void); - -/**@}*/ - -/** \addtogroup attributes - * @{ - */ - -/** \def PSA_KEY_ATTRIBUTES_INIT - * - * This macro returns a suitable initializer for a key attribute structure - * of type #psa_key_attributes_t. - */ -#ifdef __DOXYGEN_ONLY__ -/* This is an example definition for documentation purposes. - * Implementations should define a suitable value in `crypto_struct.h`. - */ -#define PSA_KEY_ATTRIBUTES_INIT {0} -#endif - -/** Return an initial value for a key attributes structure. - */ -static psa_key_attributes_t psa_key_attributes_init(void); - -/** Declare a key as persistent and set its key identifier. - * - * If the attribute structure currently declares the key as volatile (which - * is the default content of an attribute structure), this function sets - * the lifetime attribute to #PSA_KEY_LIFETIME_PERSISTENT. - * - * This function does not access storage, it merely stores the given - * value in the structure. - * The persistent key will be written to storage when the attribute - * structure is passed to a key creation function such as - * psa_import_key(), psa_generate_key(), - * psa_key_derivation_output_key() or psa_copy_key(). - * - * This function may be declared as `static` (i.e. without external - * linkage). This function may be provided as a function-like macro, - * but in this case it must evaluate each of its arguments exactly once. - * - * \param[out] attributes The attribute structure to write to. - * \param key The persistent identifier for the key. - */ -static void psa_set_key_id( psa_key_attributes_t *attributes, - mbedtls_svc_key_id_t key ); - -#ifdef MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER -/** Set the owner identifier of a key. - * - * When key identifiers encode key owner identifiers, psa_set_key_id() does - * not allow to define in key attributes the owner of volatile keys as - * psa_set_key_id() enforces the key to be persistent. - * - * This function allows to set in key attributes the owner identifier of a - * key. It is intended to be used for volatile keys. For persistent keys, - * it is recommended to use the PSA Cryptography API psa_set_key_id() to define - * the owner of a key. - * - * \param[out] attributes The attribute structure to write to. - * \param owner_id The key owner identifier. - */ -static void mbedtls_set_key_owner_id( psa_key_attributes_t *attributes, - mbedtls_key_owner_id_t owner_id ); -#endif - -/** Set the location of a persistent key. - * - * To make a key persistent, you must give it a persistent key identifier - * with psa_set_key_id(). By default, a key that has a persistent identifier - * is stored in the default storage area identifier by - * #PSA_KEY_LIFETIME_PERSISTENT. Call this function to choose a storage - * area, or to explicitly declare the key as volatile. - * - * This function does not access storage, it merely stores the given - * value in the structure. - * The persistent key will be written to storage when the attribute - * structure is passed to a key creation function such as - * psa_import_key(), psa_generate_key(), - * psa_key_derivation_output_key() or psa_copy_key(). - * - * This function may be declared as `static` (i.e. without external - * linkage). This function may be provided as a function-like macro, - * but in this case it must evaluate each of its arguments exactly once. - * - * \param[out] attributes The attribute structure to write to. - * \param lifetime The lifetime for the key. - * If this is #PSA_KEY_LIFETIME_VOLATILE, the - * key will be volatile, and the key identifier - * attribute is reset to 0. - */ -static void psa_set_key_lifetime(psa_key_attributes_t *attributes, - psa_key_lifetime_t lifetime); - -/** Retrieve the key identifier from key attributes. - * - * This function may be declared as `static` (i.e. without external - * linkage). This function may be provided as a function-like macro, - * but in this case it must evaluate its argument exactly once. - * - * \param[in] attributes The key attribute structure to query. - * - * \return The persistent identifier stored in the attribute structure. - * This value is unspecified if the attribute structure declares - * the key as volatile. - */ -static mbedtls_svc_key_id_t psa_get_key_id( - const psa_key_attributes_t *attributes); - -/** Retrieve the lifetime from key attributes. - * - * This function may be declared as `static` (i.e. without external - * linkage). This function may be provided as a function-like macro, - * but in this case it must evaluate its argument exactly once. - * - * \param[in] attributes The key attribute structure to query. - * - * \return The lifetime value stored in the attribute structure. - */ -static psa_key_lifetime_t psa_get_key_lifetime( - const psa_key_attributes_t *attributes); - -/** Declare usage flags for a key. - * - * Usage flags are part of a key's usage policy. They encode what - * kind of operations are permitted on the key. For more details, - * refer to the documentation of the type #psa_key_usage_t. - * - * This function overwrites any usage flags - * previously set in \p attributes. - * - * This function may be declared as `static` (i.e. without external - * linkage). This function may be provided as a function-like macro, - * but in this case it must evaluate each of its arguments exactly once. - * - * \param[out] attributes The attribute structure to write to. - * \param usage_flags The usage flags to write. - */ -static void psa_set_key_usage_flags(psa_key_attributes_t *attributes, - psa_key_usage_t usage_flags); - -/** Retrieve the usage flags from key attributes. - * - * This function may be declared as `static` (i.e. without external - * linkage). This function may be provided as a function-like macro, - * but in this case it must evaluate its argument exactly once. - * - * \param[in] attributes The key attribute structure to query. - * - * \return The usage flags stored in the attribute structure. - */ -static psa_key_usage_t psa_get_key_usage_flags( - const psa_key_attributes_t *attributes); - -/** Declare the permitted algorithm policy for a key. - * - * The permitted algorithm policy of a key encodes which algorithm or - * algorithms are permitted to be used with this key. The following - * algorithm policies are supported: - * - 0 does not allow any cryptographic operation with the key. The key - * may be used for non-cryptographic actions such as exporting (if - * permitted by the usage flags). - * - An algorithm value permits this particular algorithm. - * - An algorithm wildcard built from #PSA_ALG_ANY_HASH allows the specified - * signature scheme with any hash algorithm. - * - An algorithm built from #PSA_ALG_AT_LEAST_THIS_LENGTH_MAC allows - * any MAC algorithm from the same base class (e.g. CMAC) which - * generates/verifies a MAC length greater than or equal to the length - * encoded in the wildcard algorithm. - * - An algorithm built from #PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG - * allows any AEAD algorithm from the same base class (e.g. CCM) which - * generates/verifies a tag length greater than or equal to the length - * encoded in the wildcard algorithm. - * - * This function overwrites any algorithm policy - * previously set in \p attributes. - * - * This function may be declared as `static` (i.e. without external - * linkage). This function may be provided as a function-like macro, - * but in this case it must evaluate each of its arguments exactly once. - * - * \param[out] attributes The attribute structure to write to. - * \param alg The permitted algorithm policy to write. - */ -static void psa_set_key_algorithm(psa_key_attributes_t *attributes, - psa_algorithm_t alg); - - -/** Retrieve the algorithm policy from key attributes. - * - * This function may be declared as `static` (i.e. without external - * linkage). This function may be provided as a function-like macro, - * but in this case it must evaluate its argument exactly once. - * - * \param[in] attributes The key attribute structure to query. - * - * \return The algorithm stored in the attribute structure. - */ -static psa_algorithm_t psa_get_key_algorithm( - const psa_key_attributes_t *attributes); - -/** Declare the type of a key. - * - * This function overwrites any key type - * previously set in \p attributes. - * - * This function may be declared as `static` (i.e. without external - * linkage). This function may be provided as a function-like macro, - * but in this case it must evaluate each of its arguments exactly once. - * - * \param[out] attributes The attribute structure to write to. - * \param type The key type to write. - * If this is 0, the key type in \p attributes - * becomes unspecified. - */ -static void psa_set_key_type(psa_key_attributes_t *attributes, - psa_key_type_t type); - - -/** Declare the size of a key. - * - * This function overwrites any key size previously set in \p attributes. - * - * This function may be declared as `static` (i.e. without external - * linkage). This function may be provided as a function-like macro, - * but in this case it must evaluate each of its arguments exactly once. - * - * \param[out] attributes The attribute structure to write to. - * \param bits The key size in bits. - * If this is 0, the key size in \p attributes - * becomes unspecified. Keys of size 0 are - * not supported. - */ -static void psa_set_key_bits(psa_key_attributes_t *attributes, - size_t bits); - -/** Retrieve the key type from key attributes. - * - * This function may be declared as `static` (i.e. without external - * linkage). This function may be provided as a function-like macro, - * but in this case it must evaluate its argument exactly once. - * - * \param[in] attributes The key attribute structure to query. - * - * \return The key type stored in the attribute structure. - */ -static psa_key_type_t psa_get_key_type(const psa_key_attributes_t *attributes); - -/** Retrieve the key size from key attributes. - * - * This function may be declared as `static` (i.e. without external - * linkage). This function may be provided as a function-like macro, - * but in this case it must evaluate its argument exactly once. - * - * \param[in] attributes The key attribute structure to query. - * - * \return The key size stored in the attribute structure, in bits. - */ -static size_t psa_get_key_bits(const psa_key_attributes_t *attributes); - -/** Retrieve the attributes of a key. - * - * This function first resets the attribute structure as with - * psa_reset_key_attributes(). It then copies the attributes of - * the given key into the given attribute structure. - * - * \note This function may allocate memory or other resources. - * Once you have called this function on an attribute structure, - * you must call psa_reset_key_attributes() to free these resources. - * - * \param[in] key Identifier of the key to query. - * \param[in,out] attributes On success, the attributes of the key. - * On failure, equivalent to a - * freshly-initialized structure. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_DATA_CORRUPT - * \retval #PSA_ERROR_DATA_INVALID - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_get_key_attributes(mbedtls_svc_key_id_t key, - psa_key_attributes_t *attributes); - -/** Reset a key attribute structure to a freshly initialized state. - * - * You must initialize the attribute structure as described in the - * documentation of the type #psa_key_attributes_t before calling this - * function. Once the structure has been initialized, you may call this - * function at any time. - * - * This function frees any auxiliary resources that the structure - * may contain. - * - * \param[in,out] attributes The attribute structure to reset. - */ -void psa_reset_key_attributes(psa_key_attributes_t *attributes); - -/**@}*/ - -/** \defgroup key_management Key management - * @{ - */ - -/** Remove non-essential copies of key material from memory. - * - * If the key identifier designates a volatile key, this functions does not do - * anything and returns successfully. - * - * If the key identifier designates a persistent key, then this function will - * free all resources associated with the key in volatile memory. The key - * data in persistent storage is not affected and the key can still be used. - * - * \param key Identifier of the key to purge. - * - * \retval #PSA_SUCCESS - * The key material will have been removed from memory if it is not - * currently required. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p key is not a valid key identifier. - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_purge_key(mbedtls_svc_key_id_t key); - -/** Make a copy of a key. - * - * Copy key material from one location to another. - * - * This function is primarily useful to copy a key from one location - * to another, since it populates a key using the material from - * another key which may have a different lifetime. - * - * This function may be used to share a key with a different party, - * subject to implementation-defined restrictions on key sharing. - * - * The policy on the source key must have the usage flag - * #PSA_KEY_USAGE_COPY set. - * This flag is sufficient to permit the copy if the key has the lifetime - * #PSA_KEY_LIFETIME_VOLATILE or #PSA_KEY_LIFETIME_PERSISTENT. - * Some secure elements do not provide a way to copy a key without - * making it extractable from the secure element. If a key is located - * in such a secure element, then the key must have both usage flags - * #PSA_KEY_USAGE_COPY and #PSA_KEY_USAGE_EXPORT in order to make - * a copy of the key outside the secure element. - * - * The resulting key may only be used in a way that conforms to - * both the policy of the original key and the policy specified in - * the \p attributes parameter: - * - The usage flags on the resulting key are the bitwise-and of the - * usage flags on the source policy and the usage flags in \p attributes. - * - If both allow the same algorithm or wildcard-based - * algorithm policy, the resulting key has the same algorithm policy. - * - If either of the policies allows an algorithm and the other policy - * allows a wildcard-based algorithm policy that includes this algorithm, - * the resulting key allows the same algorithm. - * - If the policies do not allow any algorithm in common, this function - * fails with the status #PSA_ERROR_INVALID_ARGUMENT. - * - * The effect of this function on implementation-defined attributes is - * implementation-defined. - * - * \param source_key The key to copy. It must allow the usage - * #PSA_KEY_USAGE_COPY. If a private or secret key is - * being copied outside of a secure element it must - * also allow #PSA_KEY_USAGE_EXPORT. - * \param[in] attributes The attributes for the new key. - * They are used as follows: - * - The key type and size may be 0. If either is - * nonzero, it must match the corresponding - * attribute of the source key. - * - The key location (the lifetime and, for - * persistent keys, the key identifier) is - * used directly. - * - The policy constraints (usage flags and - * algorithm policy) are combined from - * the source key and \p attributes so that - * both sets of restrictions apply, as - * described in the documentation of this function. - * \param[out] target_key On success, an identifier for the newly created - * key. For persistent keys, this is the key - * identifier defined in \p attributes. - * \c 0 on failure. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INVALID_HANDLE - * \p source_key is invalid. - * \retval #PSA_ERROR_ALREADY_EXISTS - * This is an attempt to create a persistent key, and there is - * already a persistent key with the given identifier. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The lifetime or identifier in \p attributes are invalid. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The policy constraints on the source and specified in - * \p attributes are incompatible. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p attributes specifies a key type or key size - * which does not match the attributes of the source key. - * \retval #PSA_ERROR_NOT_PERMITTED - * The source key does not have the #PSA_KEY_USAGE_COPY usage flag. - * \retval #PSA_ERROR_NOT_PERMITTED - * The source key is not exportable and its lifetime does not - * allow copying it to the target's lifetime. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_INSUFFICIENT_STORAGE - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_DATA_INVALID - * \retval #PSA_ERROR_DATA_CORRUPT - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_copy_key(mbedtls_svc_key_id_t source_key, - const psa_key_attributes_t *attributes, - mbedtls_svc_key_id_t *target_key); - - -/** - * \brief Destroy a key. - * - * This function destroys a key from both volatile - * memory and, if applicable, non-volatile storage. Implementations shall - * make a best effort to ensure that that the key material cannot be recovered. - * - * This function also erases any metadata such as policies and frees - * resources associated with the key. - * - * If a key is currently in use in a multipart operation, then destroying the - * key will cause the multipart operation to fail. - * - * \param key Identifier of the key to erase. If this is \c 0, do nothing and - * return #PSA_SUCCESS. - * - * \retval #PSA_SUCCESS - * \p key was a valid identifier and the key material that it - * referred to has been erased. Alternatively, \p key is \c 0. - * \retval #PSA_ERROR_NOT_PERMITTED - * The key cannot be erased because it is - * read-only, either due to a policy or due to physical restrictions. - * \retval #PSA_ERROR_INVALID_HANDLE - * \p key is not a valid identifier nor \c 0. - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * There was an failure in communication with the cryptoprocessor. - * The key material may still be present in the cryptoprocessor. - * \retval #PSA_ERROR_DATA_INVALID - * This error is typically a result of either storage corruption on a - * cleartext storage backend, or an attempt to read data that was - * written by an incompatible version of the library. - * \retval #PSA_ERROR_STORAGE_FAILURE - * The storage is corrupted. Implementations shall make a best effort - * to erase key material even in this stage, however applications - * should be aware that it may be impossible to guarantee that the - * key material is not recoverable in such cases. - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * An unexpected condition which is not a storage corruption or - * a communication failure occurred. The cryptoprocessor may have - * been compromised. - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_destroy_key(mbedtls_svc_key_id_t key); - -/**@}*/ - -/** \defgroup import_export Key import and export - * @{ - */ - -/** - * \brief Import a key in binary format. - * - * This function supports any output from psa_export_key(). Refer to the - * documentation of psa_export_public_key() for the format of public keys - * and to the documentation of psa_export_key() for the format for - * other key types. - * - * The key data determines the key size. The attributes may optionally - * specify a key size; in this case it must match the size determined - * from the key data. A key size of 0 in \p attributes indicates that - * the key size is solely determined by the key data. - * - * Implementations must reject an attempt to import a key of size 0. - * - * This specification supports a single format for each key type. - * Implementations may support other formats as long as the standard - * format is supported. Implementations that support other formats - * should ensure that the formats are clearly unambiguous so as to - * minimize the risk that an invalid input is accidentally interpreted - * according to a different format. - * - * \param[in] attributes The attributes for the new key. - * The key size is always determined from the - * \p data buffer. - * If the key size in \p attributes is nonzero, - * it must be equal to the size from \p data. - * \param[out] key On success, an identifier to the newly created key. - * For persistent keys, this is the key identifier - * defined in \p attributes. - * \c 0 on failure. - * \param[in] data Buffer containing the key data. The content of this - * buffer is interpreted according to the type declared - * in \p attributes. - * All implementations must support at least the format - * described in the documentation - * of psa_export_key() or psa_export_public_key() for - * the chosen type. Implementations may allow other - * formats, but should be conservative: implementations - * should err on the side of rejecting content if it - * may be erroneous (e.g. wrong type or truncated data). - * \param data_length Size of the \p data buffer in bytes. - * - * \retval #PSA_SUCCESS - * Success. - * If the key is persistent, the key material and the key's metadata - * have been saved to persistent storage. - * \retval #PSA_ERROR_ALREADY_EXISTS - * This is an attempt to create a persistent key, and there is - * already a persistent key with the given identifier. - * \retval #PSA_ERROR_NOT_SUPPORTED - * The key type or key size is not supported, either by the - * implementation in general or in this particular persistent location. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The key attributes, as a whole, are invalid. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The key data is not correctly formatted. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The size in \p attributes is nonzero and does not match the size - * of the key data. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_INSUFFICIENT_STORAGE - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_DATA_CORRUPT - * \retval #PSA_ERROR_DATA_INVALID - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_import_key(const psa_key_attributes_t *attributes, - const uint8_t *data, - size_t data_length, - mbedtls_svc_key_id_t *key); - - - -/** - * \brief Export a key in binary format. - * - * The output of this function can be passed to psa_import_key() to - * create an equivalent object. - * - * If the implementation of psa_import_key() supports other formats - * beyond the format specified here, the output from psa_export_key() - * must use the representation specified here, not the original - * representation. - * - * For standard key types, the output format is as follows: - * - * - For symmetric keys (including MAC keys), the format is the - * raw bytes of the key. - * - For DES, the key data consists of 8 bytes. The parity bits must be - * correct. - * - For Triple-DES, the format is the concatenation of the - * two or three DES keys. - * - For RSA key pairs (#PSA_KEY_TYPE_RSA_KEY_PAIR), the format - * is the non-encrypted DER encoding of the representation defined by - * PKCS\#1 (RFC 8017) as `RSAPrivateKey`, version 0. - * ``` - * RSAPrivateKey ::= SEQUENCE { - * version INTEGER, -- must be 0 - * modulus INTEGER, -- n - * publicExponent INTEGER, -- e - * privateExponent INTEGER, -- d - * prime1 INTEGER, -- p - * prime2 INTEGER, -- q - * exponent1 INTEGER, -- d mod (p-1) - * exponent2 INTEGER, -- d mod (q-1) - * coefficient INTEGER, -- (inverse of q) mod p - * } - * ``` - * - For elliptic curve key pairs (key types for which - * #PSA_KEY_TYPE_IS_ECC_KEY_PAIR is true), the format is - * a representation of the private value as a `ceiling(m/8)`-byte string - * where `m` is the bit size associated with the curve, i.e. the bit size - * of the order of the curve's coordinate field. This byte string is - * in little-endian order for Montgomery curves (curve types - * `PSA_ECC_FAMILY_CURVEXXX`), and in big-endian order for Weierstrass - * curves (curve types `PSA_ECC_FAMILY_SECTXXX`, `PSA_ECC_FAMILY_SECPXXX` - * and `PSA_ECC_FAMILY_BRAINPOOL_PXXX`). - * For Weierstrass curves, this is the content of the `privateKey` field of - * the `ECPrivateKey` format defined by RFC 5915. For Montgomery curves, - * the format is defined by RFC 7748, and output is masked according to §5. - * - For Diffie-Hellman key exchange key pairs (key types for which - * #PSA_KEY_TYPE_IS_DH_KEY_PAIR is true), the - * format is the representation of the private key `x` as a big-endian byte - * string. The length of the byte string is the private key size in bytes - * (leading zeroes are not stripped). - * - For public keys (key types for which #PSA_KEY_TYPE_IS_PUBLIC_KEY is - * true), the format is the same as for psa_export_public_key(). - * - * The policy on the key must have the usage flag #PSA_KEY_USAGE_EXPORT set. - * - * \param key Identifier of the key to export. It must allow the - * usage #PSA_KEY_USAGE_EXPORT, unless it is a public - * key. - * \param[out] data Buffer where the key data is to be written. - * \param data_size Size of the \p data buffer in bytes. - * \param[out] data_length On success, the number of bytes - * that make up the key data. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * The key does not have the #PSA_KEY_USAGE_EXPORT flag. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p data buffer is too small. You can determine a - * sufficient buffer size by calling - * #PSA_EXPORT_KEY_OUTPUT_SIZE(\c type, \c bits) - * where \c type is the key type - * and \c bits is the key size in bits. - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_export_key(mbedtls_svc_key_id_t key, - uint8_t *data, - size_t data_size, - size_t *data_length); - -/** - * \brief Export a public key or the public part of a key pair in binary format. - * - * The output of this function can be passed to psa_import_key() to - * create an object that is equivalent to the public key. - * - * This specification supports a single format for each key type. - * Implementations may support other formats as long as the standard - * format is supported. Implementations that support other formats - * should ensure that the formats are clearly unambiguous so as to - * minimize the risk that an invalid input is accidentally interpreted - * according to a different format. - * - * For standard key types, the output format is as follows: - * - For RSA public keys (#PSA_KEY_TYPE_RSA_PUBLIC_KEY), the DER encoding of - * the representation defined by RFC 3279 §2.3.1 as `RSAPublicKey`. - * ``` - * RSAPublicKey ::= SEQUENCE { - * modulus INTEGER, -- n - * publicExponent INTEGER } -- e - * ``` - * - For elliptic curve public keys (key types for which - * #PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY is true), the format is the uncompressed - * representation defined by SEC1 §2.3.3 as the content of an ECPoint. - * Let `m` be the bit size associated with the curve, i.e. the bit size of - * `q` for a curve over `F_q`. The representation consists of: - * - The byte 0x04; - * - `x_P` as a `ceiling(m/8)`-byte string, big-endian; - * - `y_P` as a `ceiling(m/8)`-byte string, big-endian. - * - For Diffie-Hellman key exchange public keys (key types for which - * #PSA_KEY_TYPE_IS_DH_PUBLIC_KEY is true), - * the format is the representation of the public key `y = g^x mod p` as a - * big-endian byte string. The length of the byte string is the length of the - * base prime `p` in bytes. - * - * Exporting a public key object or the public part of a key pair is - * always permitted, regardless of the key's usage flags. - * - * \param key Identifier of the key to export. - * \param[out] data Buffer where the key data is to be written. - * \param data_size Size of the \p data buffer in bytes. - * \param[out] data_length On success, the number of bytes - * that make up the key data. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The key is neither a public key nor a key pair. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p data buffer is too small. You can determine a - * sufficient buffer size by calling - * #PSA_EXPORT_KEY_OUTPUT_SIZE(#PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR(\c type), \c bits) - * where \c type is the key type - * and \c bits is the key size in bits. - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_export_public_key(mbedtls_svc_key_id_t key, - uint8_t *data, - size_t data_size, - size_t *data_length); - - - -/**@}*/ - -/** \defgroup hash Message digests - * @{ - */ - -/** Calculate the hash (digest) of a message. - * - * \note To verify the hash of a message against an - * expected value, use psa_hash_compare() instead. - * - * \param alg The hash algorithm to compute (\c PSA_ALG_XXX value - * such that #PSA_ALG_IS_HASH(\p alg) is true). - * \param[in] input Buffer containing the message to hash. - * \param input_length Size of the \p input buffer in bytes. - * \param[out] hash Buffer where the hash is to be written. - * \param hash_size Size of the \p hash buffer in bytes. - * \param[out] hash_length On success, the number of bytes - * that make up the hash value. This is always - * #PSA_HASH_LENGTH(\p alg). - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \p alg is not supported or is not a hash algorithm. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * \p hash_size is too small - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_hash_compute(psa_algorithm_t alg, - const uint8_t *input, - size_t input_length, - uint8_t *hash, - size_t hash_size, - size_t *hash_length); - -/** Calculate the hash (digest) of a message and compare it with a - * reference value. - * - * \param alg The hash algorithm to compute (\c PSA_ALG_XXX value - * such that #PSA_ALG_IS_HASH(\p alg) is true). - * \param[in] input Buffer containing the message to hash. - * \param input_length Size of the \p input buffer in bytes. - * \param[out] hash Buffer containing the expected hash value. - * \param hash_length Size of the \p hash buffer in bytes. - * - * \retval #PSA_SUCCESS - * The expected hash is identical to the actual hash of the input. - * \retval #PSA_ERROR_INVALID_SIGNATURE - * The hash of the message was calculated successfully, but it - * differs from the expected hash. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \p alg is not supported or is not a hash algorithm. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p input_length or \p hash_length do not match the hash size for \p alg - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_hash_compare(psa_algorithm_t alg, - const uint8_t *input, - size_t input_length, - const uint8_t *hash, - size_t hash_length); - -/** The type of the state data structure for multipart hash operations. - * - * Before calling any function on a hash operation object, the application must - * initialize it by any of the following means: - * - Set the structure to all-bits-zero, for example: - * \code - * psa_hash_operation_t operation; - * memset(&operation, 0, sizeof(operation)); - * \endcode - * - Initialize the structure to logical zero values, for example: - * \code - * psa_hash_operation_t operation = {0}; - * \endcode - * - Initialize the structure to the initializer #PSA_HASH_OPERATION_INIT, - * for example: - * \code - * psa_hash_operation_t operation = PSA_HASH_OPERATION_INIT; - * \endcode - * - Assign the result of the function psa_hash_operation_init() - * to the structure, for example: - * \code - * psa_hash_operation_t operation; - * operation = psa_hash_operation_init(); - * \endcode - * - * This is an implementation-defined \c struct. Applications should not - * make any assumptions about the content of this structure except - * as directed by the documentation of a specific implementation. */ -typedef struct psa_hash_operation_s psa_hash_operation_t; - -/** \def PSA_HASH_OPERATION_INIT - * - * This macro returns a suitable initializer for a hash operation object - * of type #psa_hash_operation_t. - */ -#ifdef __DOXYGEN_ONLY__ -/* This is an example definition for documentation purposes. - * Implementations should define a suitable value in `crypto_struct.h`. - */ -#define PSA_HASH_OPERATION_INIT {0} -#endif - -/** Return an initial value for a hash operation object. - */ -static psa_hash_operation_t psa_hash_operation_init(void); - -/** Set up a multipart hash operation. - * - * The sequence of operations to calculate a hash (message digest) - * is as follows: - * -# Allocate an operation object which will be passed to all the functions - * listed here. - * -# Initialize the operation object with one of the methods described in the - * documentation for #psa_hash_operation_t, e.g. #PSA_HASH_OPERATION_INIT. - * -# Call psa_hash_setup() to specify the algorithm. - * -# Call psa_hash_update() zero, one or more times, passing a fragment - * of the message each time. The hash that is calculated is the hash - * of the concatenation of these messages in order. - * -# To calculate the hash, call psa_hash_finish(). - * To compare the hash with an expected value, call psa_hash_verify(). - * - * If an error occurs at any step after a call to psa_hash_setup(), the - * operation will need to be reset by a call to psa_hash_abort(). The - * application may call psa_hash_abort() at any time after the operation - * has been initialized. - * - * After a successful call to psa_hash_setup(), the application must - * eventually terminate the operation. The following events terminate an - * operation: - * - A successful call to psa_hash_finish() or psa_hash_verify(). - * - A call to psa_hash_abort(). - * - * \param[in,out] operation The operation object to set up. It must have - * been initialized as per the documentation for - * #psa_hash_operation_t and not yet in use. - * \param alg The hash algorithm to compute (\c PSA_ALG_XXX value - * such that #PSA_ALG_IS_HASH(\p alg) is true). - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \p alg is not a supported hash algorithm. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p alg is not a hash algorithm. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be inactive). - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_hash_setup(psa_hash_operation_t *operation, - psa_algorithm_t alg); - -/** Add a message fragment to a multipart hash operation. - * - * The application must call psa_hash_setup() before calling this function. - * - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_hash_abort(). - * - * \param[in,out] operation Active hash operation. - * \param[in] input Buffer containing the message fragment to hash. - * \param input_length Size of the \p input buffer in bytes. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it muct be active). - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_hash_update(psa_hash_operation_t *operation, - const uint8_t *input, - size_t input_length); - -/** Finish the calculation of the hash of a message. - * - * The application must call psa_hash_setup() before calling this function. - * This function calculates the hash of the message formed by concatenating - * the inputs passed to preceding calls to psa_hash_update(). - * - * When this function returns successfuly, the operation becomes inactive. - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_hash_abort(). - * - * \warning Applications should not call this function if they expect - * a specific value for the hash. Call psa_hash_verify() instead. - * Beware that comparing integrity or authenticity data such as - * hash values with a function such as \c memcmp is risky - * because the time taken by the comparison may leak information - * about the hashed data which could allow an attacker to guess - * a valid hash and thereby bypass security controls. - * - * \param[in,out] operation Active hash operation. - * \param[out] hash Buffer where the hash is to be written. - * \param hash_size Size of the \p hash buffer in bytes. - * \param[out] hash_length On success, the number of bytes - * that make up the hash value. This is always - * #PSA_HASH_LENGTH(\c alg) where \c alg is the - * hash algorithm that is calculated. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be active). - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p hash buffer is too small. You can determine a - * sufficient buffer size by calling #PSA_HASH_LENGTH(\c alg) - * where \c alg is the hash algorithm that is calculated. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_hash_finish(psa_hash_operation_t *operation, - uint8_t *hash, - size_t hash_size, - size_t *hash_length); - -/** Finish the calculation of the hash of a message and compare it with - * an expected value. - * - * The application must call psa_hash_setup() before calling this function. - * This function calculates the hash of the message formed by concatenating - * the inputs passed to preceding calls to psa_hash_update(). It then - * compares the calculated hash with the expected hash passed as a - * parameter to this function. - * - * When this function returns successfuly, the operation becomes inactive. - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_hash_abort(). - * - * \note Implementations shall make the best effort to ensure that the - * comparison between the actual hash and the expected hash is performed - * in constant time. - * - * \param[in,out] operation Active hash operation. - * \param[in] hash Buffer containing the expected hash value. - * \param hash_length Size of the \p hash buffer in bytes. - * - * \retval #PSA_SUCCESS - * The expected hash is identical to the actual hash of the message. - * \retval #PSA_ERROR_INVALID_SIGNATURE - * The hash of the message was calculated successfully, but it - * differs from the expected hash. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be active). - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_hash_verify(psa_hash_operation_t *operation, - const uint8_t *hash, - size_t hash_length); - -/** Abort a hash operation. - * - * Aborting an operation frees all associated resources except for the - * \p operation structure itself. Once aborted, the operation object - * can be reused for another operation by calling - * psa_hash_setup() again. - * - * You may call this function any time after the operation object has - * been initialized by one of the methods described in #psa_hash_operation_t. - * - * In particular, calling psa_hash_abort() after the operation has been - * terminated by a call to psa_hash_abort(), psa_hash_finish() or - * psa_hash_verify() is safe and has no effect. - * - * \param[in,out] operation Initialized hash operation. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_hash_abort(psa_hash_operation_t *operation); - -/** Clone a hash operation. - * - * This function copies the state of an ongoing hash operation to - * a new operation object. In other words, this function is equivalent - * to calling psa_hash_setup() on \p target_operation with the same - * algorithm that \p source_operation was set up for, then - * psa_hash_update() on \p target_operation with the same input that - * that was passed to \p source_operation. After this function returns, the - * two objects are independent, i.e. subsequent calls involving one of - * the objects do not affect the other object. - * - * \param[in] source_operation The active hash operation to clone. - * \param[in,out] target_operation The operation object to set up. - * It must be initialized but not active. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_BAD_STATE - * The \p source_operation state is not valid (it must be active). - * \retval #PSA_ERROR_BAD_STATE - * The \p target_operation state is not valid (it must be inactive). - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_hash_clone(const psa_hash_operation_t *source_operation, - psa_hash_operation_t *target_operation); - -/**@}*/ - -/** \defgroup MAC Message authentication codes - * @{ - */ - -/** Calculate the MAC (message authentication code) of a message. - * - * \note To verify the MAC of a message against an - * expected value, use psa_mac_verify() instead. - * Beware that comparing integrity or authenticity data such as - * MAC values with a function such as \c memcmp is risky - * because the time taken by the comparison may leak information - * about the MAC value which could allow an attacker to guess - * a valid MAC and thereby bypass security controls. - * - * \param key Identifier of the key to use for the operation. It - * must allow the usage PSA_KEY_USAGE_SIGN_MESSAGE. - * \param alg The MAC algorithm to compute (\c PSA_ALG_XXX value - * such that #PSA_ALG_IS_MAC(\p alg) is true). - * \param[in] input Buffer containing the input message. - * \param input_length Size of the \p input buffer in bytes. - * \param[out] mac Buffer where the MAC value is to be written. - * \param mac_size Size of the \p mac buffer in bytes. - * \param[out] mac_length On success, the number of bytes - * that make up the MAC value. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p key is not compatible with \p alg. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \p alg is not supported or is not a MAC algorithm. - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * \p mac_size is too small - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * The key could not be retrieved from storage. - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_mac_compute(mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *input, - size_t input_length, - uint8_t *mac, - size_t mac_size, - size_t *mac_length); - -/** Calculate the MAC of a message and compare it with a reference value. - * - * \param key Identifier of the key to use for the operation. It - * must allow the usage PSA_KEY_USAGE_VERIFY_MESSAGE. - * \param alg The MAC algorithm to compute (\c PSA_ALG_XXX value - * such that #PSA_ALG_IS_MAC(\p alg) is true). - * \param[in] input Buffer containing the input message. - * \param input_length Size of the \p input buffer in bytes. - * \param[out] mac Buffer containing the expected MAC value. - * \param mac_length Size of the \p mac buffer in bytes. - * - * \retval #PSA_SUCCESS - * The expected MAC is identical to the actual MAC of the input. - * \retval #PSA_ERROR_INVALID_SIGNATURE - * The MAC of the message was calculated successfully, but it - * differs from the expected value. - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p key is not compatible with \p alg. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \p alg is not supported or is not a MAC algorithm. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * The key could not be retrieved from storage. - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_mac_verify(mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *input, - size_t input_length, - const uint8_t *mac, - size_t mac_length); - -/** The type of the state data structure for multipart MAC operations. - * - * Before calling any function on a MAC operation object, the application must - * initialize it by any of the following means: - * - Set the structure to all-bits-zero, for example: - * \code - * psa_mac_operation_t operation; - * memset(&operation, 0, sizeof(operation)); - * \endcode - * - Initialize the structure to logical zero values, for example: - * \code - * psa_mac_operation_t operation = {0}; - * \endcode - * - Initialize the structure to the initializer #PSA_MAC_OPERATION_INIT, - * for example: - * \code - * psa_mac_operation_t operation = PSA_MAC_OPERATION_INIT; - * \endcode - * - Assign the result of the function psa_mac_operation_init() - * to the structure, for example: - * \code - * psa_mac_operation_t operation; - * operation = psa_mac_operation_init(); - * \endcode - * - * This is an implementation-defined \c struct. Applications should not - * make any assumptions about the content of this structure except - * as directed by the documentation of a specific implementation. */ -typedef struct psa_mac_operation_s psa_mac_operation_t; - -/** \def PSA_MAC_OPERATION_INIT - * - * This macro returns a suitable initializer for a MAC operation object of type - * #psa_mac_operation_t. - */ -#ifdef __DOXYGEN_ONLY__ -/* This is an example definition for documentation purposes. - * Implementations should define a suitable value in `crypto_struct.h`. - */ -#define PSA_MAC_OPERATION_INIT {0} -#endif - -/** Return an initial value for a MAC operation object. - */ -static psa_mac_operation_t psa_mac_operation_init(void); - -/** Set up a multipart MAC calculation operation. - * - * This function sets up the calculation of the MAC - * (message authentication code) of a byte string. - * To verify the MAC of a message against an - * expected value, use psa_mac_verify_setup() instead. - * - * The sequence of operations to calculate a MAC is as follows: - * -# Allocate an operation object which will be passed to all the functions - * listed here. - * -# Initialize the operation object with one of the methods described in the - * documentation for #psa_mac_operation_t, e.g. #PSA_MAC_OPERATION_INIT. - * -# Call psa_mac_sign_setup() to specify the algorithm and key. - * -# Call psa_mac_update() zero, one or more times, passing a fragment - * of the message each time. The MAC that is calculated is the MAC - * of the concatenation of these messages in order. - * -# At the end of the message, call psa_mac_sign_finish() to finish - * calculating the MAC value and retrieve it. - * - * If an error occurs at any step after a call to psa_mac_sign_setup(), the - * operation will need to be reset by a call to psa_mac_abort(). The - * application may call psa_mac_abort() at any time after the operation - * has been initialized. - * - * After a successful call to psa_mac_sign_setup(), the application must - * eventually terminate the operation through one of the following methods: - * - A successful call to psa_mac_sign_finish(). - * - A call to psa_mac_abort(). - * - * \param[in,out] operation The operation object to set up. It must have - * been initialized as per the documentation for - * #psa_mac_operation_t and not yet in use. - * \param key Identifier of the key to use for the operation. It - * must remain valid until the operation terminates. - * It must allow the usage PSA_KEY_USAGE_SIGN_MESSAGE. - * \param alg The MAC algorithm to compute (\c PSA_ALG_XXX value - * such that #PSA_ALG_IS_MAC(\p alg) is true). - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p key is not compatible with \p alg. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \p alg is not supported or is not a MAC algorithm. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * The key could not be retrieved from storage. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be inactive). - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_mac_sign_setup(psa_mac_operation_t *operation, - mbedtls_svc_key_id_t key, - psa_algorithm_t alg); - -/** Set up a multipart MAC verification operation. - * - * This function sets up the verification of the MAC - * (message authentication code) of a byte string against an expected value. - * - * The sequence of operations to verify a MAC is as follows: - * -# Allocate an operation object which will be passed to all the functions - * listed here. - * -# Initialize the operation object with one of the methods described in the - * documentation for #psa_mac_operation_t, e.g. #PSA_MAC_OPERATION_INIT. - * -# Call psa_mac_verify_setup() to specify the algorithm and key. - * -# Call psa_mac_update() zero, one or more times, passing a fragment - * of the message each time. The MAC that is calculated is the MAC - * of the concatenation of these messages in order. - * -# At the end of the message, call psa_mac_verify_finish() to finish - * calculating the actual MAC of the message and verify it against - * the expected value. - * - * If an error occurs at any step after a call to psa_mac_verify_setup(), the - * operation will need to be reset by a call to psa_mac_abort(). The - * application may call psa_mac_abort() at any time after the operation - * has been initialized. - * - * After a successful call to psa_mac_verify_setup(), the application must - * eventually terminate the operation through one of the following methods: - * - A successful call to psa_mac_verify_finish(). - * - A call to psa_mac_abort(). - * - * \param[in,out] operation The operation object to set up. It must have - * been initialized as per the documentation for - * #psa_mac_operation_t and not yet in use. - * \param key Identifier of the key to use for the operation. It - * must remain valid until the operation terminates. - * It must allow the usage - * PSA_KEY_USAGE_VERIFY_MESSAGE. - * \param alg The MAC algorithm to compute (\c PSA_ALG_XXX value - * such that #PSA_ALG_IS_MAC(\p alg) is true). - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \c key is not compatible with \c alg. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \c alg is not supported or is not a MAC algorithm. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * The key could not be retrieved from storage - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be inactive). - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_mac_verify_setup(psa_mac_operation_t *operation, - mbedtls_svc_key_id_t key, - psa_algorithm_t alg); - -/** Add a message fragment to a multipart MAC operation. - * - * The application must call psa_mac_sign_setup() or psa_mac_verify_setup() - * before calling this function. - * - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_mac_abort(). - * - * \param[in,out] operation Active MAC operation. - * \param[in] input Buffer containing the message fragment to add to - * the MAC calculation. - * \param input_length Size of the \p input buffer in bytes. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be active). - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_mac_update(psa_mac_operation_t *operation, - const uint8_t *input, - size_t input_length); - -/** Finish the calculation of the MAC of a message. - * - * The application must call psa_mac_sign_setup() before calling this function. - * This function calculates the MAC of the message formed by concatenating - * the inputs passed to preceding calls to psa_mac_update(). - * - * When this function returns successfuly, the operation becomes inactive. - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_mac_abort(). - * - * \warning Applications should not call this function if they expect - * a specific value for the MAC. Call psa_mac_verify_finish() instead. - * Beware that comparing integrity or authenticity data such as - * MAC values with a function such as \c memcmp is risky - * because the time taken by the comparison may leak information - * about the MAC value which could allow an attacker to guess - * a valid MAC and thereby bypass security controls. - * - * \param[in,out] operation Active MAC operation. - * \param[out] mac Buffer where the MAC value is to be written. - * \param mac_size Size of the \p mac buffer in bytes. - * \param[out] mac_length On success, the number of bytes - * that make up the MAC value. This is always - * #PSA_MAC_LENGTH(\c key_type, \c key_bits, \c alg) - * where \c key_type and \c key_bits are the type and - * bit-size respectively of the key and \c alg is the - * MAC algorithm that is calculated. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be an active mac sign - * operation). - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p mac buffer is too small. You can determine a - * sufficient buffer size by calling PSA_MAC_LENGTH(). - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_mac_sign_finish(psa_mac_operation_t *operation, - uint8_t *mac, - size_t mac_size, - size_t *mac_length); - -/** Finish the calculation of the MAC of a message and compare it with - * an expected value. - * - * The application must call psa_mac_verify_setup() before calling this function. - * This function calculates the MAC of the message formed by concatenating - * the inputs passed to preceding calls to psa_mac_update(). It then - * compares the calculated MAC with the expected MAC passed as a - * parameter to this function. - * - * When this function returns successfuly, the operation becomes inactive. - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_mac_abort(). - * - * \note Implementations shall make the best effort to ensure that the - * comparison between the actual MAC and the expected MAC is performed - * in constant time. - * - * \param[in,out] operation Active MAC operation. - * \param[in] mac Buffer containing the expected MAC value. - * \param mac_length Size of the \p mac buffer in bytes. - * - * \retval #PSA_SUCCESS - * The expected MAC is identical to the actual MAC of the message. - * \retval #PSA_ERROR_INVALID_SIGNATURE - * The MAC of the message was calculated successfully, but it - * differs from the expected MAC. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be an active mac verify - * operation). - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_mac_verify_finish(psa_mac_operation_t *operation, - const uint8_t *mac, - size_t mac_length); - -/** Abort a MAC operation. - * - * Aborting an operation frees all associated resources except for the - * \p operation structure itself. Once aborted, the operation object - * can be reused for another operation by calling - * psa_mac_sign_setup() or psa_mac_verify_setup() again. - * - * You may call this function any time after the operation object has - * been initialized by one of the methods described in #psa_mac_operation_t. - * - * In particular, calling psa_mac_abort() after the operation has been - * terminated by a call to psa_mac_abort(), psa_mac_sign_finish() or - * psa_mac_verify_finish() is safe and has no effect. - * - * \param[in,out] operation Initialized MAC operation. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_mac_abort(psa_mac_operation_t *operation); - -/**@}*/ - -/** \defgroup cipher Symmetric ciphers - * @{ - */ - -/** Encrypt a message using a symmetric cipher. - * - * This function encrypts a message with a random IV (initialization - * vector). Use the multipart operation interface with a - * #psa_cipher_operation_t object to provide other forms of IV. - * - * \param key Identifier of the key to use for the operation. - * It must allow the usage #PSA_KEY_USAGE_ENCRYPT. - * \param alg The cipher algorithm to compute - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_CIPHER(\p alg) is true). - * \param[in] input Buffer containing the message to encrypt. - * \param input_length Size of the \p input buffer in bytes. - * \param[out] output Buffer where the output is to be written. - * The output contains the IV followed by - * the ciphertext proper. - * \param output_size Size of the \p output buffer in bytes. - * \param[out] output_length On success, the number of bytes - * that make up the output. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p key is not compatible with \p alg. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \p alg is not supported or is not a cipher algorithm. - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_cipher_encrypt(mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *input, - size_t input_length, - uint8_t *output, - size_t output_size, - size_t *output_length); - -/** Decrypt a message using a symmetric cipher. - * - * This function decrypts a message encrypted with a symmetric cipher. - * - * \param key Identifier of the key to use for the operation. - * It must remain valid until the operation - * terminates. It must allow the usage - * #PSA_KEY_USAGE_DECRYPT. - * \param alg The cipher algorithm to compute - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_CIPHER(\p alg) is true). - * \param[in] input Buffer containing the message to decrypt. - * This consists of the IV followed by the - * ciphertext proper. - * \param input_length Size of the \p input buffer in bytes. - * \param[out] output Buffer where the plaintext is to be written. - * \param output_size Size of the \p output buffer in bytes. - * \param[out] output_length On success, the number of bytes - * that make up the output. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p key is not compatible with \p alg. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \p alg is not supported or is not a cipher algorithm. - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_cipher_decrypt(mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *input, - size_t input_length, - uint8_t *output, - size_t output_size, - size_t *output_length); - -/** The type of the state data structure for multipart cipher operations. - * - * Before calling any function on a cipher operation object, the application - * must initialize it by any of the following means: - * - Set the structure to all-bits-zero, for example: - * \code - * psa_cipher_operation_t operation; - * memset(&operation, 0, sizeof(operation)); - * \endcode - * - Initialize the structure to logical zero values, for example: - * \code - * psa_cipher_operation_t operation = {0}; - * \endcode - * - Initialize the structure to the initializer #PSA_CIPHER_OPERATION_INIT, - * for example: - * \code - * psa_cipher_operation_t operation = PSA_CIPHER_OPERATION_INIT; - * \endcode - * - Assign the result of the function psa_cipher_operation_init() - * to the structure, for example: - * \code - * psa_cipher_operation_t operation; - * operation = psa_cipher_operation_init(); - * \endcode - * - * This is an implementation-defined \c struct. Applications should not - * make any assumptions about the content of this structure except - * as directed by the documentation of a specific implementation. */ -typedef struct psa_cipher_operation_s psa_cipher_operation_t; - -/** \def PSA_CIPHER_OPERATION_INIT - * - * This macro returns a suitable initializer for a cipher operation object of - * type #psa_cipher_operation_t. - */ -#ifdef __DOXYGEN_ONLY__ -/* This is an example definition for documentation purposes. - * Implementations should define a suitable value in `crypto_struct.h`. - */ -#define PSA_CIPHER_OPERATION_INIT {0} -#endif - -/** Return an initial value for a cipher operation object. - */ -static psa_cipher_operation_t psa_cipher_operation_init(void); - -/** Set the key for a multipart symmetric encryption operation. - * - * The sequence of operations to encrypt a message with a symmetric cipher - * is as follows: - * -# Allocate an operation object which will be passed to all the functions - * listed here. - * -# Initialize the operation object with one of the methods described in the - * documentation for #psa_cipher_operation_t, e.g. - * #PSA_CIPHER_OPERATION_INIT. - * -# Call psa_cipher_encrypt_setup() to specify the algorithm and key. - * -# Call either psa_cipher_generate_iv() or psa_cipher_set_iv() to - * generate or set the IV (initialization vector). You should use - * psa_cipher_generate_iv() unless the protocol you are implementing - * requires a specific IV value. - * -# Call psa_cipher_update() zero, one or more times, passing a fragment - * of the message each time. - * -# Call psa_cipher_finish(). - * - * If an error occurs at any step after a call to psa_cipher_encrypt_setup(), - * the operation will need to be reset by a call to psa_cipher_abort(). The - * application may call psa_cipher_abort() at any time after the operation - * has been initialized. - * - * After a successful call to psa_cipher_encrypt_setup(), the application must - * eventually terminate the operation. The following events terminate an - * operation: - * - A successful call to psa_cipher_finish(). - * - A call to psa_cipher_abort(). - * - * \param[in,out] operation The operation object to set up. It must have - * been initialized as per the documentation for - * #psa_cipher_operation_t and not yet in use. - * \param key Identifier of the key to use for the operation. - * It must remain valid until the operation - * terminates. It must allow the usage - * #PSA_KEY_USAGE_ENCRYPT. - * \param alg The cipher algorithm to compute - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_CIPHER(\p alg) is true). - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p key is not compatible with \p alg. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \p alg is not supported or is not a cipher algorithm. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be inactive). - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_cipher_encrypt_setup(psa_cipher_operation_t *operation, - mbedtls_svc_key_id_t key, - psa_algorithm_t alg); - -/** Set the key for a multipart symmetric decryption operation. - * - * The sequence of operations to decrypt a message with a symmetric cipher - * is as follows: - * -# Allocate an operation object which will be passed to all the functions - * listed here. - * -# Initialize the operation object with one of the methods described in the - * documentation for #psa_cipher_operation_t, e.g. - * #PSA_CIPHER_OPERATION_INIT. - * -# Call psa_cipher_decrypt_setup() to specify the algorithm and key. - * -# Call psa_cipher_set_iv() with the IV (initialization vector) for the - * decryption. If the IV is prepended to the ciphertext, you can call - * psa_cipher_update() on a buffer containing the IV followed by the - * beginning of the message. - * -# Call psa_cipher_update() zero, one or more times, passing a fragment - * of the message each time. - * -# Call psa_cipher_finish(). - * - * If an error occurs at any step after a call to psa_cipher_decrypt_setup(), - * the operation will need to be reset by a call to psa_cipher_abort(). The - * application may call psa_cipher_abort() at any time after the operation - * has been initialized. - * - * After a successful call to psa_cipher_decrypt_setup(), the application must - * eventually terminate the operation. The following events terminate an - * operation: - * - A successful call to psa_cipher_finish(). - * - A call to psa_cipher_abort(). - * - * \param[in,out] operation The operation object to set up. It must have - * been initialized as per the documentation for - * #psa_cipher_operation_t and not yet in use. - * \param key Identifier of the key to use for the operation. - * It must remain valid until the operation - * terminates. It must allow the usage - * #PSA_KEY_USAGE_DECRYPT. - * \param alg The cipher algorithm to compute - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_CIPHER(\p alg) is true). - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p key is not compatible with \p alg. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \p alg is not supported or is not a cipher algorithm. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be inactive). - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_cipher_decrypt_setup(psa_cipher_operation_t *operation, - mbedtls_svc_key_id_t key, - psa_algorithm_t alg); - -/** Generate an IV for a symmetric encryption operation. - * - * This function generates a random IV (initialization vector), nonce - * or initial counter value for the encryption operation as appropriate - * for the chosen algorithm, key type and key size. - * - * The application must call psa_cipher_encrypt_setup() before - * calling this function. - * - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_cipher_abort(). - * - * \param[in,out] operation Active cipher operation. - * \param[out] iv Buffer where the generated IV is to be written. - * \param iv_size Size of the \p iv buffer in bytes. - * \param[out] iv_length On success, the number of bytes of the - * generated IV. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be active, with no IV set). - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p iv buffer is too small. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_cipher_generate_iv(psa_cipher_operation_t *operation, - uint8_t *iv, - size_t iv_size, - size_t *iv_length); - -/** Set the IV for a symmetric encryption or decryption operation. - * - * This function sets the IV (initialization vector), nonce - * or initial counter value for the encryption or decryption operation. - * - * The application must call psa_cipher_encrypt_setup() before - * calling this function. - * - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_cipher_abort(). - * - * \note When encrypting, applications should use psa_cipher_generate_iv() - * instead of this function, unless implementing a protocol that requires - * a non-random IV. - * - * \param[in,out] operation Active cipher operation. - * \param[in] iv Buffer containing the IV to use. - * \param iv_length Size of the IV in bytes. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be an active cipher - * encrypt operation, with no IV set). - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The size of \p iv is not acceptable for the chosen algorithm, - * or the chosen algorithm does not use an IV. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_cipher_set_iv(psa_cipher_operation_t *operation, - const uint8_t *iv, - size_t iv_length); - -/** Encrypt or decrypt a message fragment in an active cipher operation. - * - * Before calling this function, you must: - * 1. Call either psa_cipher_encrypt_setup() or psa_cipher_decrypt_setup(). - * The choice of setup function determines whether this function - * encrypts or decrypts its input. - * 2. If the algorithm requires an IV, call psa_cipher_generate_iv() - * (recommended when encrypting) or psa_cipher_set_iv(). - * - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_cipher_abort(). - * - * \param[in,out] operation Active cipher operation. - * \param[in] input Buffer containing the message fragment to - * encrypt or decrypt. - * \param input_length Size of the \p input buffer in bytes. - * \param[out] output Buffer where the output is to be written. - * \param output_size Size of the \p output buffer in bytes. - * \param[out] output_length On success, the number of bytes - * that make up the returned output. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be active, with an IV set - * if required for the algorithm). - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p output buffer is too small. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_cipher_update(psa_cipher_operation_t *operation, - const uint8_t *input, - size_t input_length, - uint8_t *output, - size_t output_size, - size_t *output_length); - -/** Finish encrypting or decrypting a message in a cipher operation. - * - * The application must call psa_cipher_encrypt_setup() or - * psa_cipher_decrypt_setup() before calling this function. The choice - * of setup function determines whether this function encrypts or - * decrypts its input. - * - * This function finishes the encryption or decryption of the message - * formed by concatenating the inputs passed to preceding calls to - * psa_cipher_update(). - * - * When this function returns successfuly, the operation becomes inactive. - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_cipher_abort(). - * - * \param[in,out] operation Active cipher operation. - * \param[out] output Buffer where the output is to be written. - * \param output_size Size of the \p output buffer in bytes. - * \param[out] output_length On success, the number of bytes - * that make up the returned output. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The total input size passed to this operation is not valid for - * this particular algorithm. For example, the algorithm is a based - * on block cipher and requires a whole number of blocks, but the - * total input size is not a multiple of the block size. - * \retval #PSA_ERROR_INVALID_PADDING - * This is a decryption operation for an algorithm that includes - * padding, and the ciphertext does not contain valid padding. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be active, with an IV set - * if required for the algorithm). - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p output buffer is too small. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_cipher_finish(psa_cipher_operation_t *operation, - uint8_t *output, - size_t output_size, - size_t *output_length); - -/** Abort a cipher operation. - * - * Aborting an operation frees all associated resources except for the - * \p operation structure itself. Once aborted, the operation object - * can be reused for another operation by calling - * psa_cipher_encrypt_setup() or psa_cipher_decrypt_setup() again. - * - * You may call this function any time after the operation object has - * been initialized as described in #psa_cipher_operation_t. - * - * In particular, calling psa_cipher_abort() after the operation has been - * terminated by a call to psa_cipher_abort() or psa_cipher_finish() - * is safe and has no effect. - * - * \param[in,out] operation Initialized cipher operation. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_cipher_abort(psa_cipher_operation_t *operation); - -/**@}*/ - -/** \defgroup aead Authenticated encryption with associated data (AEAD) - * @{ - */ - -/** Process an authenticated encryption operation. - * - * \param key Identifier of the key to use for the - * operation. It must allow the usage - * #PSA_KEY_USAGE_ENCRYPT. - * \param alg The AEAD algorithm to compute - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_AEAD(\p alg) is true). - * \param[in] nonce Nonce or IV to use. - * \param nonce_length Size of the \p nonce buffer in bytes. - * \param[in] additional_data Additional data that will be authenticated - * but not encrypted. - * \param additional_data_length Size of \p additional_data in bytes. - * \param[in] plaintext Data that will be authenticated and - * encrypted. - * \param plaintext_length Size of \p plaintext in bytes. - * \param[out] ciphertext Output buffer for the authenticated and - * encrypted data. The additional data is not - * part of this output. For algorithms where the - * encrypted data and the authentication tag - * are defined as separate outputs, the - * authentication tag is appended to the - * encrypted data. - * \param ciphertext_size Size of the \p ciphertext buffer in bytes. - * This must be at least - * #PSA_AEAD_ENCRYPT_OUTPUT_SIZE(\p alg, - * \p plaintext_length). - * \param[out] ciphertext_length On success, the size of the output - * in the \p ciphertext buffer. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p key is not compatible with \p alg. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \p alg is not supported or is not an AEAD algorithm. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * \p ciphertext_size is too small - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_aead_encrypt(mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *nonce, - size_t nonce_length, - const uint8_t *additional_data, - size_t additional_data_length, - const uint8_t *plaintext, - size_t plaintext_length, - uint8_t *ciphertext, - size_t ciphertext_size, - size_t *ciphertext_length); - -/** Process an authenticated decryption operation. - * - * \param key Identifier of the key to use for the - * operation. It must allow the usage - * #PSA_KEY_USAGE_DECRYPT. - * \param alg The AEAD algorithm to compute - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_AEAD(\p alg) is true). - * \param[in] nonce Nonce or IV to use. - * \param nonce_length Size of the \p nonce buffer in bytes. - * \param[in] additional_data Additional data that has been authenticated - * but not encrypted. - * \param additional_data_length Size of \p additional_data in bytes. - * \param[in] ciphertext Data that has been authenticated and - * encrypted. For algorithms where the - * encrypted data and the authentication tag - * are defined as separate inputs, the buffer - * must contain the encrypted data followed - * by the authentication tag. - * \param ciphertext_length Size of \p ciphertext in bytes. - * \param[out] plaintext Output buffer for the decrypted data. - * \param plaintext_size Size of the \p plaintext buffer in bytes. - * This must be at least - * #PSA_AEAD_DECRYPT_OUTPUT_SIZE(\p alg, - * \p ciphertext_length). - * \param[out] plaintext_length On success, the size of the output - * in the \p plaintext buffer. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_INVALID_SIGNATURE - * The ciphertext is not authentic. - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p key is not compatible with \p alg. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \p alg is not supported or is not an AEAD algorithm. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * \p plaintext_size or \p nonce_length is too small - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_aead_decrypt(mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *nonce, - size_t nonce_length, - const uint8_t *additional_data, - size_t additional_data_length, - const uint8_t *ciphertext, - size_t ciphertext_length, - uint8_t *plaintext, - size_t plaintext_size, - size_t *plaintext_length); - -/** The type of the state data structure for multipart AEAD operations. - * - * Before calling any function on an AEAD operation object, the application - * must initialize it by any of the following means: - * - Set the structure to all-bits-zero, for example: - * \code - * psa_aead_operation_t operation; - * memset(&operation, 0, sizeof(operation)); - * \endcode - * - Initialize the structure to logical zero values, for example: - * \code - * psa_aead_operation_t operation = {0}; - * \endcode - * - Initialize the structure to the initializer #PSA_AEAD_OPERATION_INIT, - * for example: - * \code - * psa_aead_operation_t operation = PSA_AEAD_OPERATION_INIT; - * \endcode - * - Assign the result of the function psa_aead_operation_init() - * to the structure, for example: - * \code - * psa_aead_operation_t operation; - * operation = psa_aead_operation_init(); - * \endcode - * - * This is an implementation-defined \c struct. Applications should not - * make any assumptions about the content of this structure except - * as directed by the documentation of a specific implementation. */ -typedef struct psa_aead_operation_s psa_aead_operation_t; - -/** \def PSA_AEAD_OPERATION_INIT - * - * This macro returns a suitable initializer for an AEAD operation object of - * type #psa_aead_operation_t. - */ -#ifdef __DOXYGEN_ONLY__ -/* This is an example definition for documentation purposes. - * Implementations should define a suitable value in `crypto_struct.h`. - */ -#define PSA_AEAD_OPERATION_INIT {0} -#endif - -/** Return an initial value for an AEAD operation object. - */ -static psa_aead_operation_t psa_aead_operation_init(void); - -/** Set the key for a multipart authenticated encryption operation. - * - * The sequence of operations to encrypt a message with authentication - * is as follows: - * -# Allocate an operation object which will be passed to all the functions - * listed here. - * -# Initialize the operation object with one of the methods described in the - * documentation for #psa_aead_operation_t, e.g. - * #PSA_AEAD_OPERATION_INIT. - * -# Call psa_aead_encrypt_setup() to specify the algorithm and key. - * -# If needed, call psa_aead_set_lengths() to specify the length of the - * inputs to the subsequent calls to psa_aead_update_ad() and - * psa_aead_update(). See the documentation of psa_aead_set_lengths() - * for details. - * -# Call either psa_aead_generate_nonce() or psa_aead_set_nonce() to - * generate or set the nonce. You should use - * psa_aead_generate_nonce() unless the protocol you are implementing - * requires a specific nonce value. - * -# Call psa_aead_update_ad() zero, one or more times, passing a fragment - * of the non-encrypted additional authenticated data each time. - * -# Call psa_aead_update() zero, one or more times, passing a fragment - * of the message to encrypt each time. - * -# Call psa_aead_finish(). - * - * If an error occurs at any step after a call to psa_aead_encrypt_setup(), - * the operation will need to be reset by a call to psa_aead_abort(). The - * application may call psa_aead_abort() at any time after the operation - * has been initialized. - * - * After a successful call to psa_aead_encrypt_setup(), the application must - * eventually terminate the operation. The following events terminate an - * operation: - * - A successful call to psa_aead_finish(). - * - A call to psa_aead_abort(). - * - * \param[in,out] operation The operation object to set up. It must have - * been initialized as per the documentation for - * #psa_aead_operation_t and not yet in use. - * \param key Identifier of the key to use for the operation. - * It must remain valid until the operation - * terminates. It must allow the usage - * #PSA_KEY_USAGE_ENCRYPT. - * \param alg The AEAD algorithm to compute - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_AEAD(\p alg) is true). - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be inactive). - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p key is not compatible with \p alg. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \p alg is not supported or is not an AEAD algorithm. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_aead_encrypt_setup(psa_aead_operation_t *operation, - mbedtls_svc_key_id_t key, - psa_algorithm_t alg); - -/** Set the key for a multipart authenticated decryption operation. - * - * The sequence of operations to decrypt a message with authentication - * is as follows: - * -# Allocate an operation object which will be passed to all the functions - * listed here. - * -# Initialize the operation object with one of the methods described in the - * documentation for #psa_aead_operation_t, e.g. - * #PSA_AEAD_OPERATION_INIT. - * -# Call psa_aead_decrypt_setup() to specify the algorithm and key. - * -# If needed, call psa_aead_set_lengths() to specify the length of the - * inputs to the subsequent calls to psa_aead_update_ad() and - * psa_aead_update(). See the documentation of psa_aead_set_lengths() - * for details. - * -# Call psa_aead_set_nonce() with the nonce for the decryption. - * -# Call psa_aead_update_ad() zero, one or more times, passing a fragment - * of the non-encrypted additional authenticated data each time. - * -# Call psa_aead_update() zero, one or more times, passing a fragment - * of the ciphertext to decrypt each time. - * -# Call psa_aead_verify(). - * - * If an error occurs at any step after a call to psa_aead_decrypt_setup(), - * the operation will need to be reset by a call to psa_aead_abort(). The - * application may call psa_aead_abort() at any time after the operation - * has been initialized. - * - * After a successful call to psa_aead_decrypt_setup(), the application must - * eventually terminate the operation. The following events terminate an - * operation: - * - A successful call to psa_aead_verify(). - * - A call to psa_aead_abort(). - * - * \param[in,out] operation The operation object to set up. It must have - * been initialized as per the documentation for - * #psa_aead_operation_t and not yet in use. - * \param key Identifier of the key to use for the operation. - * It must remain valid until the operation - * terminates. It must allow the usage - * #PSA_KEY_USAGE_DECRYPT. - * \param alg The AEAD algorithm to compute - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_AEAD(\p alg) is true). - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be inactive). - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p key is not compatible with \p alg. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \p alg is not supported or is not an AEAD algorithm. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_aead_decrypt_setup(psa_aead_operation_t *operation, - mbedtls_svc_key_id_t key, - psa_algorithm_t alg); - -/** Generate a random nonce for an authenticated encryption operation. - * - * This function generates a random nonce for the authenticated encryption - * operation with an appropriate size for the chosen algorithm, key type - * and key size. - * - * The application must call psa_aead_encrypt_setup() before - * calling this function. - * - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_aead_abort(). - * - * \param[in,out] operation Active AEAD operation. - * \param[out] nonce Buffer where the generated nonce is to be - * written. - * \param nonce_size Size of the \p nonce buffer in bytes. - * \param[out] nonce_length On success, the number of bytes of the - * generated nonce. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be an active aead encrypt - * operation, with no nonce set). - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p nonce buffer is too small. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_aead_generate_nonce(psa_aead_operation_t *operation, - uint8_t *nonce, - size_t nonce_size, - size_t *nonce_length); - -/** Set the nonce for an authenticated encryption or decryption operation. - * - * This function sets the nonce for the authenticated - * encryption or decryption operation. - * - * The application must call psa_aead_encrypt_setup() or - * psa_aead_decrypt_setup() before calling this function. - * - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_aead_abort(). - * - * \note When encrypting, applications should use psa_aead_generate_nonce() - * instead of this function, unless implementing a protocol that requires - * a non-random IV. - * - * \param[in,out] operation Active AEAD operation. - * \param[in] nonce Buffer containing the nonce to use. - * \param nonce_length Size of the nonce in bytes. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be active, with no nonce - * set). - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The size of \p nonce is not acceptable for the chosen algorithm. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_aead_set_nonce(psa_aead_operation_t *operation, - const uint8_t *nonce, - size_t nonce_length); - -/** Declare the lengths of the message and additional data for AEAD. - * - * The application must call this function before calling - * psa_aead_update_ad() or psa_aead_update() if the algorithm for - * the operation requires it. If the algorithm does not require it, - * calling this function is optional, but if this function is called - * then the implementation must enforce the lengths. - * - * You may call this function before or after setting the nonce with - * psa_aead_set_nonce() or psa_aead_generate_nonce(). - * - * - For #PSA_ALG_CCM, calling this function is required. - * - For the other AEAD algorithms defined in this specification, calling - * this function is not required. - * - For vendor-defined algorithm, refer to the vendor documentation. - * - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_aead_abort(). - * - * \param[in,out] operation Active AEAD operation. - * \param ad_length Size of the non-encrypted additional - * authenticated data in bytes. - * \param plaintext_length Size of the plaintext to encrypt in bytes. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be active, and - * psa_aead_update_ad() and psa_aead_update() must not have been - * called yet). - * \retval #PSA_ERROR_INVALID_ARGUMENT - * At least one of the lengths is not acceptable for the chosen - * algorithm. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_aead_set_lengths(psa_aead_operation_t *operation, - size_t ad_length, - size_t plaintext_length); - -/** Pass additional data to an active AEAD operation. - * - * Additional data is authenticated, but not encrypted. - * - * You may call this function multiple times to pass successive fragments - * of the additional data. You may not call this function after passing - * data to encrypt or decrypt with psa_aead_update(). - * - * Before calling this function, you must: - * 1. Call either psa_aead_encrypt_setup() or psa_aead_decrypt_setup(). - * 2. Set the nonce with psa_aead_generate_nonce() or psa_aead_set_nonce(). - * - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_aead_abort(). - * - * \warning When decrypting, until psa_aead_verify() has returned #PSA_SUCCESS, - * there is no guarantee that the input is valid. Therefore, until - * you have called psa_aead_verify() and it has returned #PSA_SUCCESS, - * treat the input as untrusted and prepare to undo any action that - * depends on the input if psa_aead_verify() returns an error status. - * - * \param[in,out] operation Active AEAD operation. - * \param[in] input Buffer containing the fragment of - * additional data. - * \param input_length Size of the \p input buffer in bytes. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be active, have a nonce - * set, have lengths set if required by the algorithm, and - * psa_aead_update() must not have been called yet). - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The total input length overflows the additional data length that - * was previously specified with psa_aead_set_lengths(). - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_aead_update_ad(psa_aead_operation_t *operation, - const uint8_t *input, - size_t input_length); - -/** Encrypt or decrypt a message fragment in an active AEAD operation. - * - * Before calling this function, you must: - * 1. Call either psa_aead_encrypt_setup() or psa_aead_decrypt_setup(). - * The choice of setup function determines whether this function - * encrypts or decrypts its input. - * 2. Set the nonce with psa_aead_generate_nonce() or psa_aead_set_nonce(). - * 3. Call psa_aead_update_ad() to pass all the additional data. - * - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_aead_abort(). - * - * \warning When decrypting, until psa_aead_verify() has returned #PSA_SUCCESS, - * there is no guarantee that the input is valid. Therefore, until - * you have called psa_aead_verify() and it has returned #PSA_SUCCESS: - * - Do not use the output in any way other than storing it in a - * confidential location. If you take any action that depends - * on the tentative decrypted data, this action will need to be - * undone if the input turns out not to be valid. Furthermore, - * if an adversary can observe that this action took place - * (for example through timing), they may be able to use this - * fact as an oracle to decrypt any message encrypted with the - * same key. - * - In particular, do not copy the output anywhere but to a - * memory or storage space that you have exclusive access to. - * - * This function does not require the input to be aligned to any - * particular block boundary. If the implementation can only process - * a whole block at a time, it must consume all the input provided, but - * it may delay the end of the corresponding output until a subsequent - * call to psa_aead_update(), psa_aead_finish() or psa_aead_verify() - * provides sufficient input. The amount of data that can be delayed - * in this way is bounded by #PSA_AEAD_UPDATE_OUTPUT_SIZE. - * - * \param[in,out] operation Active AEAD operation. - * \param[in] input Buffer containing the message fragment to - * encrypt or decrypt. - * \param input_length Size of the \p input buffer in bytes. - * \param[out] output Buffer where the output is to be written. - * \param output_size Size of the \p output buffer in bytes. - * This must be at least - * #PSA_AEAD_UPDATE_OUTPUT_SIZE(\c alg, - * \p input_length) where \c alg is the - * algorithm that is being calculated. - * \param[out] output_length On success, the number of bytes - * that make up the returned output. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be active, have a nonce - * set, and have lengths set if required by the algorithm). - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p output buffer is too small. - * You can determine a sufficient buffer size by calling - * #PSA_AEAD_UPDATE_OUTPUT_SIZE(\c alg, \p input_length) - * where \c alg is the algorithm that is being calculated. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The total length of input to psa_aead_update_ad() so far is - * less than the additional data length that was previously - * specified with psa_aead_set_lengths(). - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The total input length overflows the plaintext length that - * was previously specified with psa_aead_set_lengths(). - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_aead_update(psa_aead_operation_t *operation, - const uint8_t *input, - size_t input_length, - uint8_t *output, - size_t output_size, - size_t *output_length); - -/** Finish encrypting a message in an AEAD operation. - * - * The operation must have been set up with psa_aead_encrypt_setup(). - * - * This function finishes the authentication of the additional data - * formed by concatenating the inputs passed to preceding calls to - * psa_aead_update_ad() with the plaintext formed by concatenating the - * inputs passed to preceding calls to psa_aead_update(). - * - * This function has two output buffers: - * - \p ciphertext contains trailing ciphertext that was buffered from - * preceding calls to psa_aead_update(). - * - \p tag contains the authentication tag. Its length is always - * #PSA_AEAD_TAG_LENGTH(\c alg) where \c alg is the AEAD algorithm - * that the operation performs. - * - * When this function returns successfuly, the operation becomes inactive. - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_aead_abort(). - * - * \param[in,out] operation Active AEAD operation. - * \param[out] ciphertext Buffer where the last part of the ciphertext - * is to be written. - * \param ciphertext_size Size of the \p ciphertext buffer in bytes. - * This must be at least - * #PSA_AEAD_FINISH_OUTPUT_SIZE(\c alg) where - * \c alg is the algorithm that is being - * calculated. - * \param[out] ciphertext_length On success, the number of bytes of - * returned ciphertext. - * \param[out] tag Buffer where the authentication tag is - * to be written. - * \param tag_size Size of the \p tag buffer in bytes. - * This must be at least - * #PSA_AEAD_TAG_LENGTH(\c alg) where \c alg is - * the algorithm that is being calculated. - * \param[out] tag_length On success, the number of bytes - * that make up the returned tag. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be an active encryption - * operation with a nonce set). - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p ciphertext or \p tag buffer is too small. - * You can determine a sufficient buffer size for \p ciphertext by - * calling #PSA_AEAD_FINISH_OUTPUT_SIZE(\c alg) - * where \c alg is the algorithm that is being calculated. - * You can determine a sufficient buffer size for \p tag by - * calling #PSA_AEAD_TAG_LENGTH(\c alg). - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The total length of input to psa_aead_update_ad() so far is - * less than the additional data length that was previously - * specified with psa_aead_set_lengths(). - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The total length of input to psa_aead_update() so far is - * less than the plaintext length that was previously - * specified with psa_aead_set_lengths(). - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_aead_finish(psa_aead_operation_t *operation, - uint8_t *ciphertext, - size_t ciphertext_size, - size_t *ciphertext_length, - uint8_t *tag, - size_t tag_size, - size_t *tag_length); - -/** Finish authenticating and decrypting a message in an AEAD operation. - * - * The operation must have been set up with psa_aead_decrypt_setup(). - * - * This function finishes the authenticated decryption of the message - * components: - * - * - The additional data consisting of the concatenation of the inputs - * passed to preceding calls to psa_aead_update_ad(). - * - The ciphertext consisting of the concatenation of the inputs passed to - * preceding calls to psa_aead_update(). - * - The tag passed to this function call. - * - * If the authentication tag is correct, this function outputs any remaining - * plaintext and reports success. If the authentication tag is not correct, - * this function returns #PSA_ERROR_INVALID_SIGNATURE. - * - * When this function returns successfuly, the operation becomes inactive. - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_aead_abort(). - * - * \note Implementations shall make the best effort to ensure that the - * comparison between the actual tag and the expected tag is performed - * in constant time. - * - * \param[in,out] operation Active AEAD operation. - * \param[out] plaintext Buffer where the last part of the plaintext - * is to be written. This is the remaining data - * from previous calls to psa_aead_update() - * that could not be processed until the end - * of the input. - * \param plaintext_size Size of the \p plaintext buffer in bytes. - * This must be at least - * #PSA_AEAD_VERIFY_OUTPUT_SIZE(\c alg) where - * \c alg is the algorithm that is being - * calculated. - * \param[out] plaintext_length On success, the number of bytes of - * returned plaintext. - * \param[in] tag Buffer containing the authentication tag. - * \param tag_length Size of the \p tag buffer in bytes. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_INVALID_SIGNATURE - * The calculations were successful, but the authentication tag is - * not correct. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be an active decryption - * operation with a nonce set). - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p plaintext buffer is too small. - * You can determine a sufficient buffer size for \p plaintext by - * calling #PSA_AEAD_VERIFY_OUTPUT_SIZE(\c alg) - * where \c alg is the algorithm that is being calculated. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The total length of input to psa_aead_update_ad() so far is - * less than the additional data length that was previously - * specified with psa_aead_set_lengths(). - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The total length of input to psa_aead_update() so far is - * less than the plaintext length that was previously - * specified with psa_aead_set_lengths(). - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_aead_verify(psa_aead_operation_t *operation, - uint8_t *plaintext, - size_t plaintext_size, - size_t *plaintext_length, - const uint8_t *tag, - size_t tag_length); - -/** Abort an AEAD operation. - * - * Aborting an operation frees all associated resources except for the - * \p operation structure itself. Once aborted, the operation object - * can be reused for another operation by calling - * psa_aead_encrypt_setup() or psa_aead_decrypt_setup() again. - * - * You may call this function any time after the operation object has - * been initialized as described in #psa_aead_operation_t. - * - * In particular, calling psa_aead_abort() after the operation has been - * terminated by a call to psa_aead_abort(), psa_aead_finish() or - * psa_aead_verify() is safe and has no effect. - * - * \param[in,out] operation Initialized AEAD operation. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_aead_abort(psa_aead_operation_t *operation); - -/**@}*/ - -/** \defgroup asymmetric Asymmetric cryptography - * @{ - */ - -/** - * \brief Sign a hash or short message with a private key. - * - * Note that to perform a hash-and-sign signature algorithm, you must - * first calculate the hash by calling psa_hash_setup(), psa_hash_update() - * and psa_hash_finish(). Then pass the resulting hash as the \p hash - * parameter to this function. You can use #PSA_ALG_SIGN_GET_HASH(\p alg) - * to determine the hash algorithm to use. - * - * \param key Identifier of the key to use for the operation. - * It must be an asymmetric key pair. The key must - * allow the usage #PSA_KEY_USAGE_SIGN_HASH. - * \param alg A signature algorithm that is compatible with - * the type of \p key. - * \param[in] hash The hash or message to sign. - * \param hash_length Size of the \p hash buffer in bytes. - * \param[out] signature Buffer where the signature is to be written. - * \param signature_size Size of the \p signature buffer in bytes. - * \param[out] signature_length On success, the number of bytes - * that make up the returned signature value. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p signature buffer is too small. You can - * determine a sufficient buffer size by calling - * #PSA_SIGN_OUTPUT_SIZE(\c key_type, \c key_bits, \p alg) - * where \c key_type and \c key_bits are the type and bit-size - * respectively of \p key. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_INSUFFICIENT_ENTROPY - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_sign_hash(mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *hash, - size_t hash_length, - uint8_t *signature, - size_t signature_size, - size_t *signature_length); - -/** - * \brief Verify the signature a hash or short message using a public key. - * - * Note that to perform a hash-and-sign signature algorithm, you must - * first calculate the hash by calling psa_hash_setup(), psa_hash_update() - * and psa_hash_finish(). Then pass the resulting hash as the \p hash - * parameter to this function. You can use #PSA_ALG_SIGN_GET_HASH(\p alg) - * to determine the hash algorithm to use. - * - * \param key Identifier of the key to use for the operation. It - * must be a public key or an asymmetric key pair. The - * key must allow the usage - * #PSA_KEY_USAGE_VERIFY_HASH. - * \param alg A signature algorithm that is compatible with - * the type of \p key. - * \param[in] hash The hash or message whose signature is to be - * verified. - * \param hash_length Size of the \p hash buffer in bytes. - * \param[in] signature Buffer containing the signature to verify. - * \param signature_length Size of the \p signature buffer in bytes. - * - * \retval #PSA_SUCCESS - * The signature is valid. - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_SIGNATURE - * The calculation was perfomed successfully, but the passed - * signature is not a valid signature. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_verify_hash(mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *hash, - size_t hash_length, - const uint8_t *signature, - size_t signature_length); - -/** - * \brief Encrypt a short message with a public key. - * - * \param key Identifer of the key to use for the operation. - * It must be a public key or an asymmetric key - * pair. It must allow the usage - * #PSA_KEY_USAGE_ENCRYPT. - * \param alg An asymmetric encryption algorithm that is - * compatible with the type of \p key. - * \param[in] input The message to encrypt. - * \param input_length Size of the \p input buffer in bytes. - * \param[in] salt A salt or label, if supported by the - * encryption algorithm. - * If the algorithm does not support a - * salt, pass \c NULL. - * If the algorithm supports an optional - * salt and you do not want to pass a salt, - * pass \c NULL. - * - * - For #PSA_ALG_RSA_PKCS1V15_CRYPT, no salt is - * supported. - * \param salt_length Size of the \p salt buffer in bytes. - * If \p salt is \c NULL, pass 0. - * \param[out] output Buffer where the encrypted message is to - * be written. - * \param output_size Size of the \p output buffer in bytes. - * \param[out] output_length On success, the number of bytes - * that make up the returned output. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p output buffer is too small. You can - * determine a sufficient buffer size by calling - * #PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE(\c key_type, \c key_bits, \p alg) - * where \c key_type and \c key_bits are the type and bit-size - * respectively of \p key. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_INSUFFICIENT_ENTROPY - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_asymmetric_encrypt(mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *input, - size_t input_length, - const uint8_t *salt, - size_t salt_length, - uint8_t *output, - size_t output_size, - size_t *output_length); - -/** - * \brief Decrypt a short message with a private key. - * - * \param key Identifier of the key to use for the operation. - * It must be an asymmetric key pair. It must - * allow the usage #PSA_KEY_USAGE_DECRYPT. - * \param alg An asymmetric encryption algorithm that is - * compatible with the type of \p key. - * \param[in] input The message to decrypt. - * \param input_length Size of the \p input buffer in bytes. - * \param[in] salt A salt or label, if supported by the - * encryption algorithm. - * If the algorithm does not support a - * salt, pass \c NULL. - * If the algorithm supports an optional - * salt and you do not want to pass a salt, - * pass \c NULL. - * - * - For #PSA_ALG_RSA_PKCS1V15_CRYPT, no salt is - * supported. - * \param salt_length Size of the \p salt buffer in bytes. - * If \p salt is \c NULL, pass 0. - * \param[out] output Buffer where the decrypted message is to - * be written. - * \param output_size Size of the \c output buffer in bytes. - * \param[out] output_length On success, the number of bytes - * that make up the returned output. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p output buffer is too small. You can - * determine a sufficient buffer size by calling - * #PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE(\c key_type, \c key_bits, \p alg) - * where \c key_type and \c key_bits are the type and bit-size - * respectively of \p key. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_INSUFFICIENT_ENTROPY - * \retval #PSA_ERROR_INVALID_PADDING - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_asymmetric_decrypt(mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *input, - size_t input_length, - const uint8_t *salt, - size_t salt_length, - uint8_t *output, - size_t output_size, - size_t *output_length); - -/**@}*/ - -/** \defgroup key_derivation Key derivation and pseudorandom generation - * @{ - */ - -/** The type of the state data structure for key derivation operations. - * - * Before calling any function on a key derivation operation object, the - * application must initialize it by any of the following means: - * - Set the structure to all-bits-zero, for example: - * \code - * psa_key_derivation_operation_t operation; - * memset(&operation, 0, sizeof(operation)); - * \endcode - * - Initialize the structure to logical zero values, for example: - * \code - * psa_key_derivation_operation_t operation = {0}; - * \endcode - * - Initialize the structure to the initializer #PSA_KEY_DERIVATION_OPERATION_INIT, - * for example: - * \code - * psa_key_derivation_operation_t operation = PSA_KEY_DERIVATION_OPERATION_INIT; - * \endcode - * - Assign the result of the function psa_key_derivation_operation_init() - * to the structure, for example: - * \code - * psa_key_derivation_operation_t operation; - * operation = psa_key_derivation_operation_init(); - * \endcode - * - * This is an implementation-defined \c struct. Applications should not - * make any assumptions about the content of this structure except - * as directed by the documentation of a specific implementation. - */ -typedef struct psa_key_derivation_s psa_key_derivation_operation_t; - -/** \def PSA_KEY_DERIVATION_OPERATION_INIT - * - * This macro returns a suitable initializer for a key derivation operation - * object of type #psa_key_derivation_operation_t. - */ -#ifdef __DOXYGEN_ONLY__ -/* This is an example definition for documentation purposes. - * Implementations should define a suitable value in `crypto_struct.h`. - */ -#define PSA_KEY_DERIVATION_OPERATION_INIT {0} -#endif - -/** Return an initial value for a key derivation operation object. - */ -static psa_key_derivation_operation_t psa_key_derivation_operation_init(void); - -/** Set up a key derivation operation. - * - * A key derivation algorithm takes some inputs and uses them to generate - * a byte stream in a deterministic way. - * This byte stream can be used to produce keys and other - * cryptographic material. - * - * To derive a key: - * -# Start with an initialized object of type #psa_key_derivation_operation_t. - * -# Call psa_key_derivation_setup() to select the algorithm. - * -# Provide the inputs for the key derivation by calling - * psa_key_derivation_input_bytes() or psa_key_derivation_input_key() - * as appropriate. Which inputs are needed, in what order, and whether - * they may be keys and if so of what type depends on the algorithm. - * -# Optionally set the operation's maximum capacity with - * psa_key_derivation_set_capacity(). You may do this before, in the middle - * of or after providing inputs. For some algorithms, this step is mandatory - * because the output depends on the maximum capacity. - * -# To derive a key, call psa_key_derivation_output_key(). - * To derive a byte string for a different purpose, call - * psa_key_derivation_output_bytes(). - * Successive calls to these functions use successive output bytes - * calculated by the key derivation algorithm. - * -# Clean up the key derivation operation object with - * psa_key_derivation_abort(). - * - * If this function returns an error, the key derivation operation object is - * not changed. - * - * If an error occurs at any step after a call to psa_key_derivation_setup(), - * the operation will need to be reset by a call to psa_key_derivation_abort(). - * - * Implementations must reject an attempt to derive a key of size 0. - * - * \param[in,out] operation The key derivation operation object - * to set up. It must - * have been initialized but not set up yet. - * \param alg The key derivation algorithm to compute - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_KEY_DERIVATION(\p alg) is true). - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \c alg is not a key derivation algorithm. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \c alg is not supported or is not a key derivation algorithm. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be inactive). - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_key_derivation_setup( - psa_key_derivation_operation_t *operation, - psa_algorithm_t alg); - -/** Retrieve the current capacity of a key derivation operation. - * - * The capacity of a key derivation is the maximum number of bytes that it can - * return. When you get *N* bytes of output from a key derivation operation, - * this reduces its capacity by *N*. - * - * \param[in] operation The operation to query. - * \param[out] capacity On success, the capacity of the operation. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be active). - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_key_derivation_get_capacity( - const psa_key_derivation_operation_t *operation, - size_t *capacity); - -/** Set the maximum capacity of a key derivation operation. - * - * The capacity of a key derivation operation is the maximum number of bytes - * that the key derivation operation can return from this point onwards. - * - * \param[in,out] operation The key derivation operation object to modify. - * \param capacity The new capacity of the operation. - * It must be less or equal to the operation's - * current capacity. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p capacity is larger than the operation's current capacity. - * In this case, the operation object remains valid and its capacity - * remains unchanged. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be active). - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_key_derivation_set_capacity( - psa_key_derivation_operation_t *operation, - size_t capacity); - -/** Use the maximum possible capacity for a key derivation operation. - * - * Use this value as the capacity argument when setting up a key derivation - * to indicate that the operation should have the maximum possible capacity. - * The value of the maximum possible capacity depends on the key derivation - * algorithm. - */ -#define PSA_KEY_DERIVATION_UNLIMITED_CAPACITY ((size_t)(-1)) - -/** Provide an input for key derivation or key agreement. - * - * Which inputs are required and in what order depends on the algorithm. - * Refer to the documentation of each key derivation or key agreement - * algorithm for information. - * - * This function passes direct inputs, which is usually correct for - * non-secret inputs. To pass a secret input, which should be in a key - * object, call psa_key_derivation_input_key() instead of this function. - * Refer to the documentation of individual step types - * (`PSA_KEY_DERIVATION_INPUT_xxx` values of type ::psa_key_derivation_step_t) - * for more information. - * - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_key_derivation_abort(). - * - * \param[in,out] operation The key derivation operation object to use. - * It must have been set up with - * psa_key_derivation_setup() and must not - * have produced any output yet. - * \param step Which step the input data is for. - * \param[in] data Input data to use. - * \param data_length Size of the \p data buffer in bytes. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \c step is not compatible with the operation's algorithm. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \c step does not allow direct inputs. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid for this input \p step. - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_key_derivation_input_bytes( - psa_key_derivation_operation_t *operation, - psa_key_derivation_step_t step, - const uint8_t *data, - size_t data_length); - -/** Provide an input for key derivation in the form of a key. - * - * Which inputs are required and in what order depends on the algorithm. - * Refer to the documentation of each key derivation or key agreement - * algorithm for information. - * - * This function obtains input from a key object, which is usually correct for - * secret inputs or for non-secret personalization strings kept in the key - * store. To pass a non-secret parameter which is not in the key store, - * call psa_key_derivation_input_bytes() instead of this function. - * Refer to the documentation of individual step types - * (`PSA_KEY_DERIVATION_INPUT_xxx` values of type ::psa_key_derivation_step_t) - * for more information. - * - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_key_derivation_abort(). - * - * \param[in,out] operation The key derivation operation object to use. - * It must have been set up with - * psa_key_derivation_setup() and must not - * have produced any output yet. - * \param step Which step the input data is for. - * \param key Identifier of the key. It must have an - * appropriate type for step and must allow the - * usage #PSA_KEY_USAGE_DERIVE. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \c step is not compatible with the operation's algorithm. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \c step does not allow key inputs of the given type - * or does not allow key inputs at all. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid for this input \p step. - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_key_derivation_input_key( - psa_key_derivation_operation_t *operation, - psa_key_derivation_step_t step, - mbedtls_svc_key_id_t key); - -/** Perform a key agreement and use the shared secret as input to a key - * derivation. - * - * A key agreement algorithm takes two inputs: a private key \p private_key - * a public key \p peer_key. - * The result of this function is passed as input to a key derivation. - * The output of this key derivation can be extracted by reading from the - * resulting operation to produce keys and other cryptographic material. - * - * If this function returns an error status, the operation enters an error - * state and must be aborted by calling psa_key_derivation_abort(). - * - * \param[in,out] operation The key derivation operation object to use. - * It must have been set up with - * psa_key_derivation_setup() with a - * key agreement and derivation algorithm - * \c alg (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_KEY_AGREEMENT(\c alg) is true - * and #PSA_ALG_IS_RAW_KEY_AGREEMENT(\c alg) - * is false). - * The operation must be ready for an - * input of the type given by \p step. - * \param step Which step the input data is for. - * \param private_key Identifier of the private key to use. It must - * allow the usage #PSA_KEY_USAGE_DERIVE. - * \param[in] peer_key Public key of the peer. The peer key must be in the - * same format that psa_import_key() accepts for the - * public key type corresponding to the type of - * private_key. That is, this function performs the - * equivalent of - * #psa_import_key(..., - * `peer_key`, `peer_key_length`) where - * with key attributes indicating the public key - * type corresponding to the type of `private_key`. - * For example, for EC keys, this means that peer_key - * is interpreted as a point on the curve that the - * private key is on. The standard formats for public - * keys are documented in the documentation of - * psa_export_public_key(). - * \param peer_key_length Size of \p peer_key in bytes. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid for this key agreement \p step. - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \c private_key is not compatible with \c alg, - * or \p peer_key is not valid for \c alg or not compatible with - * \c private_key. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \c alg is not supported or is not a key derivation algorithm. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \c step does not allow an input resulting from a key agreement. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_key_derivation_key_agreement( - psa_key_derivation_operation_t *operation, - psa_key_derivation_step_t step, - mbedtls_svc_key_id_t private_key, - const uint8_t *peer_key, - size_t peer_key_length); - -/** Read some data from a key derivation operation. - * - * This function calculates output bytes from a key derivation algorithm and - * return those bytes. - * If you view the key derivation's output as a stream of bytes, this - * function destructively reads the requested number of bytes from the - * stream. - * The operation's capacity decreases by the number of bytes read. - * - * If this function returns an error status other than - * #PSA_ERROR_INSUFFICIENT_DATA, the operation enters an error - * state and must be aborted by calling psa_key_derivation_abort(). - * - * \param[in,out] operation The key derivation operation object to read from. - * \param[out] output Buffer where the output will be written. - * \param output_length Number of bytes to output. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INSUFFICIENT_DATA - * The operation's capacity was less than - * \p output_length bytes. Note that in this case, - * no output is written to the output buffer. - * The operation's capacity is set to 0, thus - * subsequent calls to this function will not - * succeed, even with a smaller output buffer. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be active and completed - * all required input steps). - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_key_derivation_output_bytes( - psa_key_derivation_operation_t *operation, - uint8_t *output, - size_t output_length); - -/** Derive a key from an ongoing key derivation operation. - * - * This function calculates output bytes from a key derivation algorithm - * and uses those bytes to generate a key deterministically. - * The key's location, usage policy, type and size are taken from - * \p attributes. - * - * If you view the key derivation's output as a stream of bytes, this - * function destructively reads as many bytes as required from the - * stream. - * The operation's capacity decreases by the number of bytes read. - * - * If this function returns an error status other than - * #PSA_ERROR_INSUFFICIENT_DATA, the operation enters an error - * state and must be aborted by calling psa_key_derivation_abort(). - * - * How much output is produced and consumed from the operation, and how - * the key is derived, depends on the key type: - * - * - For key types for which the key is an arbitrary sequence of bytes - * of a given size, this function is functionally equivalent to - * calling #psa_key_derivation_output_bytes - * and passing the resulting output to #psa_import_key. - * However, this function has a security benefit: - * if the implementation provides an isolation boundary then - * the key material is not exposed outside the isolation boundary. - * As a consequence, for these key types, this function always consumes - * exactly (\p bits / 8) bytes from the operation. - * The following key types defined in this specification follow this scheme: - * - * - #PSA_KEY_TYPE_AES; - * - #PSA_KEY_TYPE_ARC4; - * - #PSA_KEY_TYPE_CAMELLIA; - * - #PSA_KEY_TYPE_DERIVE; - * - #PSA_KEY_TYPE_HMAC. - * - * - For ECC keys on a Montgomery elliptic curve - * (#PSA_KEY_TYPE_ECC_KEY_PAIR(\c curve) where \c curve designates a - * Montgomery curve), this function always draws a byte string whose - * length is determined by the curve, and sets the mandatory bits - * accordingly. That is: - * - * - Curve25519 (#PSA_ECC_FAMILY_MONTGOMERY, 255 bits): draw a 32-byte - * string and process it as specified in RFC 7748 §5. - * - Curve448 (#PSA_ECC_FAMILY_MONTGOMERY, 448 bits): draw a 56-byte - * string and process it as specified in RFC 7748 §5. - * - * - For key types for which the key is represented by a single sequence of - * \p bits bits with constraints as to which bit sequences are acceptable, - * this function draws a byte string of length (\p bits / 8) bytes rounded - * up to the nearest whole number of bytes. If the resulting byte string - * is acceptable, it becomes the key, otherwise the drawn bytes are discarded. - * This process is repeated until an acceptable byte string is drawn. - * The byte string drawn from the operation is interpreted as specified - * for the output produced by psa_export_key(). - * The following key types defined in this specification follow this scheme: - * - * - #PSA_KEY_TYPE_DES. - * Force-set the parity bits, but discard forbidden weak keys. - * For 2-key and 3-key triple-DES, the three keys are generated - * successively (for example, for 3-key triple-DES, - * if the first 8 bytes specify a weak key and the next 8 bytes do not, - * discard the first 8 bytes, use the next 8 bytes as the first key, - * and continue reading output from the operation to derive the other - * two keys). - * - Finite-field Diffie-Hellman keys (#PSA_KEY_TYPE_DH_KEY_PAIR(\c group) - * where \c group designates any Diffie-Hellman group) and - * ECC keys on a Weierstrass elliptic curve - * (#PSA_KEY_TYPE_ECC_KEY_PAIR(\c curve) where \c curve designates a - * Weierstrass curve). - * For these key types, interpret the byte string as integer - * in big-endian order. Discard it if it is not in the range - * [0, *N* - 2] where *N* is the boundary of the private key domain - * (the prime *p* for Diffie-Hellman, the subprime *q* for DSA, - * or the order of the curve's base point for ECC). - * Add 1 to the resulting integer and use this as the private key *x*. - * This method allows compliance to NIST standards, specifically - * the methods titled "key-pair generation by testing candidates" - * in NIST SP 800-56A §5.6.1.1.4 for Diffie-Hellman, - * in FIPS 186-4 §B.1.2 for DSA, and - * in NIST SP 800-56A §5.6.1.2.2 or - * FIPS 186-4 §B.4.2 for elliptic curve keys. - * - * - For other key types, including #PSA_KEY_TYPE_RSA_KEY_PAIR, - * the way in which the operation output is consumed is - * implementation-defined. - * - * In all cases, the data that is read is discarded from the operation. - * The operation's capacity is decreased by the number of bytes read. - * - * For algorithms that take an input step #PSA_KEY_DERIVATION_INPUT_SECRET, - * the input to that step must be provided with psa_key_derivation_input_key(). - * Future versions of this specification may include additional restrictions - * on the derived key based on the attributes and strength of the secret key. - * - * \param[in] attributes The attributes for the new key. - * \param[in,out] operation The key derivation operation object to read from. - * \param[out] key On success, an identifier for the newly created - * key. For persistent keys, this is the key - * identifier defined in \p attributes. - * \c 0 on failure. - * - * \retval #PSA_SUCCESS - * Success. - * If the key is persistent, the key material and the key's metadata - * have been saved to persistent storage. - * \retval #PSA_ERROR_ALREADY_EXISTS - * This is an attempt to create a persistent key, and there is - * already a persistent key with the given identifier. - * \retval #PSA_ERROR_INSUFFICIENT_DATA - * There was not enough data to create the desired key. - * Note that in this case, no output is written to the output buffer. - * The operation's capacity is set to 0, thus subsequent calls to - * this function will not succeed, even with a smaller output buffer. - * \retval #PSA_ERROR_NOT_SUPPORTED - * The key type or key size is not supported, either by the - * implementation in general or in this particular location. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The provided key attributes are not valid for the operation. - * \retval #PSA_ERROR_NOT_PERMITTED - * The #PSA_KEY_DERIVATION_INPUT_SECRET input was not provided through - * a key. - * \retval #PSA_ERROR_BAD_STATE - * The operation state is not valid (it must be active and completed - * all required input steps). - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_INSUFFICIENT_STORAGE - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_DATA_INVALID - * \retval #PSA_ERROR_DATA_CORRUPT - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_key_derivation_output_key( - const psa_key_attributes_t *attributes, - psa_key_derivation_operation_t *operation, - mbedtls_svc_key_id_t *key); - -/** Abort a key derivation operation. - * - * Aborting an operation frees all associated resources except for the \c - * operation structure itself. Once aborted, the operation object can be reused - * for another operation by calling psa_key_derivation_setup() again. - * - * This function may be called at any time after the operation - * object has been initialized as described in #psa_key_derivation_operation_t. - * - * In particular, it is valid to call psa_key_derivation_abort() twice, or to - * call psa_key_derivation_abort() on an operation that has not been set up. - * - * \param[in,out] operation The operation to abort. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_key_derivation_abort( - psa_key_derivation_operation_t *operation); - -/** Perform a key agreement and return the raw shared secret. - * - * \warning The raw result of a key agreement algorithm such as finite-field - * Diffie-Hellman or elliptic curve Diffie-Hellman has biases and should - * not be used directly as key material. It should instead be passed as - * input to a key derivation algorithm. To chain a key agreement with - * a key derivation, use psa_key_derivation_key_agreement() and other - * functions from the key derivation interface. - * - * \param alg The key agreement algorithm to compute - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_RAW_KEY_AGREEMENT(\p alg) - * is true). - * \param private_key Identifier of the private key to use. It must - * allow the usage #PSA_KEY_USAGE_DERIVE. - * \param[in] peer_key Public key of the peer. It must be - * in the same format that psa_import_key() - * accepts. The standard formats for public - * keys are documented in the documentation - * of psa_export_public_key(). - * \param peer_key_length Size of \p peer_key in bytes. - * \param[out] output Buffer where the decrypted message is to - * be written. - * \param output_size Size of the \c output buffer in bytes. - * \param[out] output_length On success, the number of bytes - * that make up the returned output. - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_INVALID_HANDLE - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p alg is not a key agreement algorithm - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p private_key is not compatible with \p alg, - * or \p peer_key is not valid for \p alg or not compatible with - * \p private_key. - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * \p output_size is too small - * \retval #PSA_ERROR_NOT_SUPPORTED - * \p alg is not a supported key agreement algorithm. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_raw_key_agreement(psa_algorithm_t alg, - mbedtls_svc_key_id_t private_key, - const uint8_t *peer_key, - size_t peer_key_length, - uint8_t *output, - size_t output_size, - size_t *output_length); - -/**@}*/ - -/** \defgroup random Random generation - * @{ - */ - -/** - * \brief Generate random bytes. - * - * \warning This function **can** fail! Callers MUST check the return status - * and MUST NOT use the content of the output buffer if the return - * status is not #PSA_SUCCESS. - * - * \note To generate a key, use psa_generate_key() instead. - * - * \param[out] output Output buffer for the generated data. - * \param output_size Number of bytes to generate and output. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INSUFFICIENT_ENTROPY - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_generate_random(uint8_t *output, - size_t output_size); - -/** - * \brief Generate a key or key pair. - * - * The key is generated randomly. - * Its location, usage policy, type and size are taken from \p attributes. - * - * Implementations must reject an attempt to generate a key of size 0. - * - * The following type-specific considerations apply: - * - For RSA keys (#PSA_KEY_TYPE_RSA_KEY_PAIR), - * the public exponent is 65537. - * The modulus is a product of two probabilistic primes - * between 2^{n-1} and 2^n where n is the bit size specified in the - * attributes. - * - * \param[in] attributes The attributes for the new key. - * \param[out] key On success, an identifier for the newly created - * key. For persistent keys, this is the key - * identifier defined in \p attributes. - * \c 0 on failure. - * - * \retval #PSA_SUCCESS - * Success. - * If the key is persistent, the key material and the key's metadata - * have been saved to persistent storage. - * \retval #PSA_ERROR_ALREADY_EXISTS - * This is an attempt to create a persistent key, and there is - * already a persistent key with the given identifier. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_INSUFFICIENT_ENTROPY - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_INSUFFICIENT_STORAGE - * \retval #PSA_ERROR_DATA_INVALID - * \retval #PSA_ERROR_DATA_CORRUPT - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_generate_key(const psa_key_attributes_t *attributes, - mbedtls_svc_key_id_t *key); - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -/* The file "crypto_sizes.h" contains definitions for size calculation - * macros whose definitions are implementation-specific. */ -#include "third_party/mbedtls/crypto_sizes.h" - -/* The file "crypto_struct.h" contains definitions for - * implementation-specific structs that are declared above. */ -#include "third_party/mbedtls/crypto_struct.h" - -/* The file "crypto_extra.h" contains vendor-specific definitions. This - * can include vendor-defined algorithms, extra functions, etc. */ -#include "third_party/mbedtls/crypto_extra.h" - -#endif /* PSA_CRYPTO_H */ diff --git a/third_party/mbedtls/crypto_compat.h b/third_party/mbedtls/crypto_compat.h deleted file mode 100644 index 35dde5687..000000000 --- a/third_party/mbedtls/crypto_compat.h +++ /dev/null @@ -1,383 +0,0 @@ -/* clang-format off */ -/** - * \file psa/crypto_compat.h - * - * \brief PSA cryptography module: Backward compatibility aliases - * - * This header declares alternative names for macro and functions. - * New application code should not use these names. - * These names may be removed in a future version of Mbed Crypto. - * - * \note This file may not be included directly. Applications must - * include psa/crypto.h. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef PSA_CRYPTO_COMPAT_H -#define PSA_CRYPTO_COMPAT_H -#include "third_party/mbedtls/crypto_values.h" -#include "third_party/mbedtls/crypto_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * To support both openless APIs and psa_open_key() temporarily, define - * psa_key_handle_t to be equal to mbedtls_svc_key_id_t. Do not mark the - * type and its utility macros and functions deprecated yet. This will be done - * in a subsequent phase. - */ -typedef mbedtls_svc_key_id_t psa_key_handle_t; - -#define PSA_KEY_HANDLE_INIT MBEDTLS_SVC_KEY_ID_INIT - -/** Check wether an handle is null. - * - * \param handle Handle - * - * \return Non-zero if the handle is null, zero otherwise. - */ -static inline int psa_key_handle_is_null( psa_key_handle_t handle ) -{ - return( mbedtls_svc_key_id_is_null( handle ) ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) - -/* - * Mechanism for declaring deprecated values - */ -#if defined(MBEDTLS_DEPRECATED_WARNING) && !defined(MBEDTLS_PSA_DEPRECATED) -#define MBEDTLS_PSA_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_PSA_DEPRECATED -#endif - -typedef MBEDTLS_PSA_DEPRECATED size_t mbedtls_deprecated_size_t; -typedef MBEDTLS_PSA_DEPRECATED psa_status_t mbedtls_deprecated_psa_status_t; -typedef MBEDTLS_PSA_DEPRECATED psa_key_usage_t mbedtls_deprecated_psa_key_usage_t; -typedef MBEDTLS_PSA_DEPRECATED psa_ecc_family_t mbedtls_deprecated_psa_ecc_family_t; -typedef MBEDTLS_PSA_DEPRECATED psa_dh_family_t mbedtls_deprecated_psa_dh_family_t; -typedef MBEDTLS_PSA_DEPRECATED psa_ecc_family_t psa_ecc_curve_t; -typedef MBEDTLS_PSA_DEPRECATED psa_dh_family_t psa_dh_group_t; -typedef MBEDTLS_PSA_DEPRECATED psa_algorithm_t mbedtls_deprecated_psa_algorithm_t; - -#define PSA_KEY_TYPE_GET_CURVE PSA_KEY_TYPE_ECC_GET_FAMILY -#define PSA_KEY_TYPE_GET_GROUP PSA_KEY_TYPE_DH_GET_FAMILY - -#define MBEDTLS_DEPRECATED_CONSTANT( type, value ) \ - ( (mbedtls_deprecated_##type) ( value ) ) - -/* - * Deprecated PSA Crypto error code definitions (PSA Crypto API <= 1.0 beta2) - */ -#define PSA_ERROR_UNKNOWN_ERROR \ - MBEDTLS_DEPRECATED_CONSTANT( psa_status_t, PSA_ERROR_GENERIC_ERROR ) -#define PSA_ERROR_OCCUPIED_SLOT \ - MBEDTLS_DEPRECATED_CONSTANT( psa_status_t, PSA_ERROR_ALREADY_EXISTS ) -#define PSA_ERROR_EMPTY_SLOT \ - MBEDTLS_DEPRECATED_CONSTANT( psa_status_t, PSA_ERROR_DOES_NOT_EXIST ) -#define PSA_ERROR_INSUFFICIENT_CAPACITY \ - MBEDTLS_DEPRECATED_CONSTANT( psa_status_t, PSA_ERROR_INSUFFICIENT_DATA ) -#define PSA_ERROR_TAMPERING_DETECTED \ - MBEDTLS_DEPRECATED_CONSTANT( psa_status_t, PSA_ERROR_CORRUPTION_DETECTED ) - -/* - * Deprecated PSA Crypto numerical encodings (PSA Crypto API <= 1.0 beta3) - */ -#define PSA_KEY_USAGE_SIGN \ - MBEDTLS_DEPRECATED_CONSTANT( psa_key_usage_t, PSA_KEY_USAGE_SIGN_HASH ) -#define PSA_KEY_USAGE_VERIFY \ - MBEDTLS_DEPRECATED_CONSTANT( psa_key_usage_t, PSA_KEY_USAGE_VERIFY_HASH ) - -/* - * Deprecated PSA Crypto size calculation macros (PSA Crypto API <= 1.0 beta3) - */ -#define PSA_ASYMMETRIC_SIGNATURE_MAX_SIZE \ - MBEDTLS_DEPRECATED_CONSTANT( size_t, PSA_SIGNATURE_MAX_SIZE ) -#define PSA_ASYMMETRIC_SIGN_OUTPUT_SIZE( key_type, key_bits, alg ) \ - MBEDTLS_DEPRECATED_CONSTANT( size_t, PSA_SIGN_OUTPUT_SIZE( key_type, key_bits, alg ) ) -#define PSA_KEY_EXPORT_MAX_SIZE( key_type, key_bits ) \ - MBEDTLS_DEPRECATED_CONSTANT( size_t, PSA_EXPORT_KEY_OUTPUT_SIZE( key_type, key_bits ) ) -#define PSA_BLOCK_CIPHER_BLOCK_SIZE( type ) \ - MBEDTLS_DEPRECATED_CONSTANT( size_t, PSA_BLOCK_CIPHER_BLOCK_LENGTH( type ) ) -#define PSA_MAX_BLOCK_CIPHER_BLOCK_SIZE \ - MBEDTLS_DEPRECATED_CONSTANT( size_t, PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE ) -#define PSA_HASH_SIZE( alg ) \ - MBEDTLS_DEPRECATED_CONSTANT( size_t, PSA_HASH_LENGTH( alg ) ) -#define PSA_MAC_FINAL_SIZE( key_type, key_bits, alg ) \ - MBEDTLS_DEPRECATED_CONSTANT( size_t, PSA_MAC_LENGTH( key_type, key_bits, alg ) ) -#define PSA_ALG_TLS12_PSK_TO_MS_MAX_PSK_LEN \ - MBEDTLS_DEPRECATED_CONSTANT( size_t, PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE ) - -/* - * Deprecated PSA Crypto function names (PSA Crypto API <= 1.0 beta3) - */ -MBEDTLS_PSA_DEPRECATED static inline psa_status_t psa_asymmetric_sign( psa_key_handle_t key, - psa_algorithm_t alg, - const uint8_t *hash, - size_t hash_length, - uint8_t *signature, - size_t signature_size, - size_t *signature_length ) -{ - return psa_sign_hash( key, alg, hash, hash_length, signature, signature_size, signature_length ); -} - -MBEDTLS_PSA_DEPRECATED static inline psa_status_t psa_asymmetric_verify( psa_key_handle_t key, - psa_algorithm_t alg, - const uint8_t *hash, - size_t hash_length, - const uint8_t *signature, - size_t signature_length ) -{ - return psa_verify_hash( key, alg, hash, hash_length, signature, signature_length ); -} - -/* - * Size-specific elliptic curve families. - */ -#define PSA_ECC_CURVE_SECP160K1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECP_K1 ) -#define PSA_ECC_CURVE_SECP192K1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECP_K1 ) -#define PSA_ECC_CURVE_SECP224K1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECP_K1 ) -#define PSA_ECC_CURVE_SECP256K1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECP_K1 ) -#define PSA_ECC_CURVE_SECP160R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECP_R1 ) -#define PSA_ECC_CURVE_SECP192R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECP_R1 ) -#define PSA_ECC_CURVE_SECP224R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECP_R1 ) -#define PSA_ECC_CURVE_SECP256R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECP_R1 ) -#define PSA_ECC_CURVE_SECP384R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECP_R1 ) -#define PSA_ECC_CURVE_SECP521R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECP_R1 ) -#define PSA_ECC_CURVE_SECP160R2 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECP_R2 ) -#define PSA_ECC_CURVE_SECT163K1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_K1 ) -#define PSA_ECC_CURVE_SECT233K1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_K1 ) -#define PSA_ECC_CURVE_SECT239K1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_K1 ) -#define PSA_ECC_CURVE_SECT283K1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_K1 ) -#define PSA_ECC_CURVE_SECT409K1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_K1 ) -#define PSA_ECC_CURVE_SECT571K1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_K1 ) -#define PSA_ECC_CURVE_SECT163R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_R1 ) -#define PSA_ECC_CURVE_SECT193R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_R1 ) -#define PSA_ECC_CURVE_SECT233R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_R1 ) -#define PSA_ECC_CURVE_SECT283R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_R1 ) -#define PSA_ECC_CURVE_SECT409R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_R1 ) -#define PSA_ECC_CURVE_SECT571R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_R1 ) -#define PSA_ECC_CURVE_SECT163R2 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_R2 ) -#define PSA_ECC_CURVE_SECT193R2 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_R2 ) -#define PSA_ECC_CURVE_BRAINPOOL_P256R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_BRAINPOOL_P_R1 ) -#define PSA_ECC_CURVE_BRAINPOOL_P384R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_BRAINPOOL_P_R1 ) -#define PSA_ECC_CURVE_BRAINPOOL_P512R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_BRAINPOOL_P_R1 ) -#define PSA_ECC_CURVE_CURVE25519 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_MONTGOMERY ) -#define PSA_ECC_CURVE_CURVE448 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_MONTGOMERY ) - -/* - * Curves that changed name due to PSA specification. - */ -#define PSA_ECC_CURVE_SECP_K1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECP_K1 ) -#define PSA_ECC_CURVE_SECP_R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECP_R1 ) -#define PSA_ECC_CURVE_SECP_R2 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECP_R2 ) -#define PSA_ECC_CURVE_SECT_K1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_K1 ) -#define PSA_ECC_CURVE_SECT_R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_R1 ) -#define PSA_ECC_CURVE_SECT_R2 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_SECT_R2 ) -#define PSA_ECC_CURVE_BRAINPOOL_P_R1 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_BRAINPOOL_P_R1 ) -#define PSA_ECC_CURVE_MONTGOMERY \ - MBEDTLS_DEPRECATED_CONSTANT( psa_ecc_family_t, PSA_ECC_FAMILY_MONTGOMERY ) - -/* - * Finite-field Diffie-Hellman families. - */ -#define PSA_DH_GROUP_FFDHE2048 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_dh_family_t, PSA_DH_FAMILY_RFC7919 ) -#define PSA_DH_GROUP_FFDHE3072 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_dh_family_t, PSA_DH_FAMILY_RFC7919 ) -#define PSA_DH_GROUP_FFDHE4096 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_dh_family_t, PSA_DH_FAMILY_RFC7919 ) -#define PSA_DH_GROUP_FFDHE6144 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_dh_family_t, PSA_DH_FAMILY_RFC7919 ) -#define PSA_DH_GROUP_FFDHE8192 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_dh_family_t, PSA_DH_FAMILY_RFC7919 ) - -/* - * Diffie-Hellman families that changed name due to PSA specification. - */ -#define PSA_DH_GROUP_RFC7919 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_dh_family_t, PSA_DH_FAMILY_RFC7919 ) -#define PSA_DH_GROUP_CUSTOM \ - MBEDTLS_DEPRECATED_CONSTANT( psa_dh_family_t, PSA_DH_FAMILY_CUSTOM ) - -/* - * Deprecated PSA Crypto stream cipher algorithms (PSA Crypto API <= 1.0 beta3) - */ -#define PSA_ALG_ARC4 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_algorithm_t, PSA_ALG_STREAM_CIPHER ) -#define PSA_ALG_CHACHA20 \ - MBEDTLS_DEPRECATED_CONSTANT( psa_algorithm_t, PSA_ALG_STREAM_CIPHER ) - -/* - * Renamed AEAD tag length macros (PSA Crypto API <= 1.0 beta3) - */ -#define PSA_ALG_AEAD_WITH_DEFAULT_TAG_LENGTH( aead_alg ) \ - MBEDTLS_DEPRECATED_CONSTANT( psa_algorithm_t, PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG( aead_alg ) ) -#define PSA_ALG_AEAD_WITH_TAG_LENGTH( aead_alg, tag_length ) \ - MBEDTLS_DEPRECATED_CONSTANT( psa_algorithm_t, PSA_ALG_AEAD_WITH_SHORTENED_TAG( aead_alg, tag_length ) ) - -#endif /* MBEDTLS_DEPRECATED_REMOVED */ - -/** Open a handle to an existing persistent key. - * - * Open a handle to a persistent key. A key is persistent if it was created - * with a lifetime other than #PSA_KEY_LIFETIME_VOLATILE. A persistent key - * always has a nonzero key identifier, set with psa_set_key_id() when - * creating the key. Implementations may provide additional pre-provisioned - * keys that can be opened with psa_open_key(). Such keys have an application - * key identifier in the vendor range, as documented in the description of - * #psa_key_id_t. - * - * The application must eventually close the handle with psa_close_key() or - * psa_destroy_key() to release associated resources. If the application dies - * without calling one of these functions, the implementation should perform - * the equivalent of a call to psa_close_key(). - * - * Some implementations permit an application to open the same key multiple - * times. If this is successful, each call to psa_open_key() will return a - * different key handle. - * - * \note This API is not part of the PSA Cryptography API Release 1.0.0 - * specification. It was defined in the 1.0 Beta 3 version of the - * specification but was removed in the 1.0.0 released version. This API is - * kept for the time being to not break applications relying on it. It is not - * deprecated yet but will be in the near future. - * - * \note Applications that rely on opening a key multiple times will not be - * portable to implementations that only permit a single key handle to be - * opened. See also :ref:\`key-handles\`. - * - * - * \param key The persistent identifier of the key. - * \param[out] handle On success, a handle to the key. - * - * \retval #PSA_SUCCESS - * Success. The application can now use the value of `*handle` - * to access the key. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * The implementation does not have sufficient resources to open the - * key. This can be due to reaching an implementation limit on the - * number of open keys, the number of open key handles, or available - * memory. - * \retval #PSA_ERROR_DOES_NOT_EXIST - * There is no persistent key with key identifier \p id. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p id is not a valid persistent key identifier. - * \retval #PSA_ERROR_NOT_PERMITTED - * The specified key exists, but the application does not have the - * permission to access it. Note that this specification does not - * define any way to create such a key, but it may be possible - * through implementation-specific means. - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_DATA_INVALID - * \retval #PSA_ERROR_DATA_CORRUPT - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_open_key( mbedtls_svc_key_id_t key, - psa_key_handle_t *handle ); - -/** Close a key handle. - * - * If the handle designates a volatile key, this will destroy the key material - * and free all associated resources, just like psa_destroy_key(). - * - * If this is the last open handle to a persistent key, then closing the handle - * will free all resources associated with the key in volatile memory. The key - * data in persistent storage is not affected and can be opened again later - * with a call to psa_open_key(). - * - * Closing the key handle makes the handle invalid, and the key handle - * must not be used again by the application. - * - * \note This API is not part of the PSA Cryptography API Release 1.0.0 - * specification. It was defined in the 1.0 Beta 3 version of the - * specification but was removed in the 1.0.0 released version. This API is - * kept for the time being to not break applications relying on it. It is not - * deprecated yet but will be in the near future. - * - * \note If the key handle was used to set up an active - * :ref:\`multipart operation \`, then closing the - * key handle can cause the multipart operation to fail. Applications should - * maintain the key handle until after the multipart operation has finished. - * - * \param handle The key handle to close. - * If this is \c 0, do nothing and return \c PSA_SUCCESS. - * - * \retval #PSA_SUCCESS - * \p handle was a valid handle or \c 0. It is now closed. - * \retval #PSA_ERROR_INVALID_HANDLE - * \p handle is not a valid handle nor \c 0. - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t psa_close_key(psa_key_handle_t handle); - -#ifdef __cplusplus -} -#endif - -#endif /* PSA_CRYPTO_COMPAT_H */ diff --git a/third_party/mbedtls/crypto_config.h b/third_party/mbedtls/crypto_config.h deleted file mode 100644 index da6870a6d..000000000 --- a/third_party/mbedtls/crypto_config.h +++ /dev/null @@ -1,98 +0,0 @@ -/* clang-format off */ - -/** - * \file psa/crypto_config.h - * \brief PSA crypto configuration options (set of defines) - * - */ -#if defined(MBEDTLS_PSA_CRYPTO_CONFIG) -/** - * When #MBEDTLS_PSA_CRYPTO_CONFIG is enabled in config.h, - * this file determines which cryptographic mechanisms are enabled - * through the PSA Cryptography API (\c psa_xxx() functions). - * - * To enable a cryptographic mechanism, uncomment the definition of - * the corresponding \c PSA_WANT_xxx preprocessor symbol. - * To disable a cryptographic mechanism, comment out the definition of - * the corresponding \c PSA_WANT_xxx preprocessor symbol. - * The names of cryptographic mechanisms correspond to values - * defined in psa/crypto_values.h, with the prefix \c PSA_WANT_ instead - * of \c PSA_. - * - * Note that many cryptographic mechanisms involve two symbols: one for - * the key type (\c PSA_WANT_KEY_TYPE_xxx) and one for the algorithm - * (\c PSA_WANT_ALG_xxx). Mechanisms with additional parameters may involve - * additional symbols. - */ -#else -/** - * When \c MBEDTLS_PSA_CRYPTO_CONFIG is disabled in config.h, - * this file is not used, and cryptographic mechanisms are supported - * through the PSA API if and only if they are supported through the - * mbedtls_xxx API. - */ -#endif -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef PSA_CRYPTO_CONFIG_H -#define PSA_CRYPTO_CONFIG_H - -#define PSA_WANT_ALG_CBC_NO_PADDING 1 -#define PSA_WANT_ALG_CBC_PKCS7 1 -#define PSA_WANT_ALG_CFB 1 -#define PSA_WANT_ALG_CHACHA20_POLY1305 1 -#define PSA_WANT_ALG_CTR 1 -#define PSA_WANT_ALG_DETERMINISTIC_ECDSA 1 -#define PSA_WANT_ALG_ECB_NO_PADDING 1 -#define PSA_WANT_ALG_ECDH 1 -#define PSA_WANT_ALG_ECDSA 1 -#define PSA_WANT_ALG_HKDF 1 -#define PSA_WANT_ALG_HMAC 1 -#define PSA_WANT_ALG_MD2 1 -#define PSA_WANT_ALG_MD4 1 -#define PSA_WANT_ALG_MD5 1 -#define PSA_WANT_ALG_OFB 1 -#define PSA_WANT_ALG_RIPEMD160 1 -#define PSA_WANT_ALG_RSA_OAEP 1 -#define PSA_WANT_ALG_RSA_PKCS1V15_CRYPT 1 -#define PSA_WANT_ALG_RSA_PKCS1V15_SIGN 1 -#define PSA_WANT_ALG_RSA_PSS 1 -#define PSA_WANT_ALG_SHA_1 1 -#define PSA_WANT_ALG_SHA_224 1 -#define PSA_WANT_ALG_SHA_256 1 -#define PSA_WANT_ALG_SHA_384 1 -#define PSA_WANT_ALG_SHA_512 1 -#define PSA_WANT_ALG_STREAM_CIPHER 1 -#define PSA_WANT_ALG_TLS12_PRF 1 -#define PSA_WANT_ALG_TLS12_PSK_TO_MS 1 -#define PSA_WANT_ALG_XTS 1 - -#define PSA_WANT_KEY_TYPE_DERIVE 1 -#define PSA_WANT_KEY_TYPE_HMAC 1 -#define PSA_WANT_KEY_TYPE_AES 1 -#define PSA_WANT_KEY_TYPE_ARC4 1 -#define PSA_WANT_KEY_TYPE_CAMELLIA 1 -#define PSA_WANT_KEY_TYPE_CHACHA20 1 -#define PSA_WANT_KEY_TYPE_DES 1 -#define PSA_WANT_KEY_TYPE_ECC_KEY_PAIR 1 -#define PSA_WANT_KEY_TYPE_ECC_PUBLIC_KEY 1 -#define PSA_WANT_KEY_TYPE_RAW_DATA 1 -#define PSA_WANT_KEY_TYPE_RSA_KEY_PAIR 1 -#define PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY 1 - -#endif /* PSA_CRYPTO_CONFIG_H */ diff --git a/third_party/mbedtls/crypto_driver_common.h b/third_party/mbedtls/crypto_driver_common.h deleted file mode 100644 index fb302e3ec..000000000 --- a/third_party/mbedtls/crypto_driver_common.h +++ /dev/null @@ -1,52 +0,0 @@ -/* clang-format off */ - -/** - * \file psa/crypto_driver_common.h - * \brief Definitions for all PSA crypto drivers - * - * This file contains common definitions shared by all PSA crypto drivers. - * Do not include it directly: instead, include the header file(s) for - * the type(s) of driver that you are implementing. For example, if - * you are writing a dynamically registered driver for a secure element, - * include `psa/crypto_se_driver.h`. - * - * This file is part of the PSA Crypto Driver Model, containing functions for - * driver developers to implement to enable hardware to be called in a - * standardized way by a PSA Cryptographic API implementation. The functions - * comprising the driver model, which driver authors implement, are not - * intended to be called by application developers. - */ - -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef PSA_CRYPTO_DRIVER_COMMON_H -#define PSA_CRYPTO_DRIVER_COMMON_H - -/* Include type definitions (psa_status_t, psa_algorithm_t, - * psa_key_type_t, etc.) and macros to build and analyze values - * of these types. */ -#include "third_party/mbedtls/crypto_types.h" -#include "third_party/mbedtls/crypto_values.h" - -/** For encrypt-decrypt functions, whether the operation is an encryption - * or a decryption. */ -typedef enum { - PSA_CRYPTO_DRIVER_DECRYPT, - PSA_CRYPTO_DRIVER_ENCRYPT -} psa_encrypt_or_decrypt_t; - -#endif /* PSA_CRYPTO_DRIVER_COMMON_H */ diff --git a/third_party/mbedtls/crypto_extra.h b/third_party/mbedtls/crypto_extra.h deleted file mode 100644 index a37a506fb..000000000 --- a/third_party/mbedtls/crypto_extra.h +++ /dev/null @@ -1,717 +0,0 @@ -/** - * \file psa/crypto_extra.h - * - * \brief PSA cryptography module: Mbed TLS vendor extensions - * - * \note This file may not be included directly. Applications must - * include psa/crypto.h. - * - * This file is reserved for vendor-specific definitions. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef PSA_CRYPTO_EXTRA_H -#define PSA_CRYPTO_EXTRA_H -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/crypto_compat.h" -#include "third_party/mbedtls/crypto_struct.h" -#include "third_party/mbedtls/crypto_types.h" -/* clang-format off */ -#ifdef __cplusplus -extern "C" { -#endif - -/* UID for secure storage seed */ -#define PSA_CRYPTO_ITS_RANDOM_SEED_UID 0xFFFFFF52 - -/* See config.h for definition */ -#if !defined(MBEDTLS_PSA_KEY_SLOT_COUNT) -#define MBEDTLS_PSA_KEY_SLOT_COUNT 32 -#endif - -/** \addtogroup attributes - * @{ - */ - -/** \brief Declare the enrollment algorithm for a key. - * - * An operation on a key may indifferently use the algorithm set with - * psa_set_key_algorithm() or with this function. - * - * \param[out] attributes The attribute structure to write to. - * \param alg2 A second algorithm that the key may be used - * for, in addition to the algorithm set with - * psa_set_key_algorithm(). - * - * \warning Setting an enrollment algorithm is not recommended, because - * using the same key with different algorithms can allow some - * attacks based on arithmetic relations between different - * computations made with the same key, or can escalate harmless - * side channels into exploitable ones. Use this function only - * if it is necessary to support a protocol for which it has been - * verified that the usage of the key with multiple algorithms - * is safe. - */ -static inline void psa_set_key_enrollment_algorithm( - psa_key_attributes_t *attributes, - psa_algorithm_t alg2) -{ - attributes->core.policy.alg2 = alg2; -} - -/** Retrieve the enrollment algorithm policy from key attributes. - * - * \param[in] attributes The key attribute structure to query. - * - * \return The enrollment algorithm stored in the attribute structure. - */ -static inline psa_algorithm_t psa_get_key_enrollment_algorithm( - const psa_key_attributes_t *attributes) -{ - return( attributes->core.policy.alg2 ); -} - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - -/** Retrieve the slot number where a key is stored. - * - * A slot number is only defined for keys that are stored in a secure - * element. - * - * This information is only useful if the secure element is not entirely - * managed through the PSA Cryptography API. It is up to the secure - * element driver to decide how PSA slot numbers map to any other interface - * that the secure element may have. - * - * \param[in] attributes The key attribute structure to query. - * \param[out] slot_number On success, the slot number containing the key. - * - * \retval #PSA_SUCCESS - * The key is located in a secure element, and \p *slot_number - * indicates the slot number that contains it. - * \retval #PSA_ERROR_NOT_PERMITTED - * The caller is not permitted to query the slot number. - * Mbed Crypto currently does not return this error. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The key is not located in a secure element. - */ -psa_status_t psa_get_key_slot_number( - const psa_key_attributes_t *attributes, - psa_key_slot_number_t *slot_number ); - -/** Choose the slot number where a key is stored. - * - * This function declares a slot number in the specified attribute - * structure. - * - * A slot number is only meaningful for keys that are stored in a secure - * element. It is up to the secure element driver to decide how PSA slot - * numbers map to any other interface that the secure element may have. - * - * \note Setting a slot number in key attributes for a key creation can - * cause the following errors when creating the key: - * - #PSA_ERROR_NOT_SUPPORTED if the selected secure element does - * not support choosing a specific slot number. - * - #PSA_ERROR_NOT_PERMITTED if the caller is not permitted to - * choose slot numbers in general or to choose this specific slot. - * - #PSA_ERROR_INVALID_ARGUMENT if the chosen slot number is not - * valid in general or not valid for this specific key. - * - #PSA_ERROR_ALREADY_EXISTS if there is already a key in the - * selected slot. - * - * \param[out] attributes The attribute structure to write to. - * \param slot_number The slot number to set. - */ -static inline void psa_set_key_slot_number( - psa_key_attributes_t *attributes, - psa_key_slot_number_t slot_number ) -{ - attributes->core.flags |= MBEDTLS_PSA_KA_FLAG_HAS_SLOT_NUMBER; - attributes->slot_number = slot_number; -} - -/** Remove the slot number attribute from a key attribute structure. - * - * This function undoes the action of psa_set_key_slot_number(). - * - * \param[out] attributes The attribute structure to write to. - */ -static inline void psa_clear_key_slot_number( - psa_key_attributes_t *attributes ) -{ - attributes->core.flags &= ~MBEDTLS_PSA_KA_FLAG_HAS_SLOT_NUMBER; -} - -/** Register a key that is already present in a secure element. - * - * The key must be located in a secure element designated by the - * lifetime field in \p attributes, in the slot set with - * psa_set_key_slot_number() in the attribute structure. - * This function makes the key available through the key identifier - * specified in \p attributes. - * - * \param[in] attributes The attributes of the existing key. - * - * \retval #PSA_SUCCESS - * The key was successfully registered. - * Note that depending on the design of the driver, this may or may - * not guarantee that a key actually exists in the designated slot - * and is compatible with the specified attributes. - * \retval #PSA_ERROR_ALREADY_EXISTS - * There is already a key with the identifier specified in - * \p attributes. - * \retval #PSA_ERROR_NOT_SUPPORTED - * The secure element driver for the specified lifetime does not - * support registering a key. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p attributes specifies a lifetime which is not located - * in a secure element. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * No slot number is specified in \p attributes, - * or the specified slot number is not valid. - * \retval #PSA_ERROR_NOT_PERMITTED - * The caller is not authorized to register the specified key slot. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_INSUFFICIENT_STORAGE - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_DATA_INVALID - * \retval #PSA_ERROR_DATA_CORRUPT - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_BAD_STATE - * The library has not been previously initialized by psa_crypto_init(). - * It is implementation-dependent whether a failure to initialize - * results in this error code. - */ -psa_status_t mbedtls_psa_register_se_key( - const psa_key_attributes_t *attributes); - -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - -/**@}*/ - -/** - * \brief Library deinitialization. - * - * This function clears all data associated with the PSA layer, - * including the whole key store. - * - * This is an Mbed TLS extension. - */ -void mbedtls_psa_crypto_free( void ); - -/** \brief Statistics about - * resource consumption related to the PSA keystore. - * - * \note The content of this structure is not part of the stable API and ABI - * of Mbed Crypto and may change arbitrarily from version to version. - */ -typedef struct mbedtls_psa_stats_s -{ - /** Number of slots containing key material for a volatile key. */ - size_t volatile_slots; - /** Number of slots containing key material for a key which is in - * internal persistent storage. */ - size_t persistent_slots; - /** Number of slots containing a reference to a key in a - * secure element. */ - size_t external_slots; - /** Number of slots which are occupied, but do not contain - * key material yet. */ - size_t half_filled_slots; - /** Number of slots that contain cache data. */ - size_t cache_slots; - /** Number of slots that are not used for anything. */ - size_t empty_slots; - /** Number of slots that are locked. */ - size_t locked_slots; - /** Largest key id value among open keys in internal persistent storage. */ - psa_key_id_t max_open_internal_key_id; - /** Largest key id value among open keys in secure elements. */ - psa_key_id_t max_open_external_key_id; -} mbedtls_psa_stats_t; - -/** \brief Get statistics about - * resource consumption related to the PSA keystore. - * - * \note When Mbed Crypto is built as part of a service, with isolation - * between the application and the keystore, the service may or - * may not expose this function. - */ -void mbedtls_psa_get_stats( mbedtls_psa_stats_t *stats ); - -/** - * \brief Inject an initial entropy seed for the random generator into - * secure storage. - * - * This function injects data to be used as a seed for the random generator - * used by the PSA Crypto implementation. On devices that lack a trusted - * entropy source (preferably a hardware random number generator), - * the Mbed PSA Crypto implementation uses this value to seed its - * random generator. - * - * On devices without a trusted entropy source, this function must be - * called exactly once in the lifetime of the device. On devices with - * a trusted entropy source, calling this function is optional. - * In all cases, this function may only be called before calling any - * other function in the PSA Crypto API, including psa_crypto_init(). - * - * When this function returns successfully, it populates a file in - * persistent storage. Once the file has been created, this function - * can no longer succeed. - * - * If any error occurs, this function does not change the system state. - * You can call this function again after correcting the reason for the - * error if possible. - * - * \warning This function **can** fail! Callers MUST check the return status. - * - * \warning If you use this function, you should use it as part of a - * factory provisioning process. The value of the injected seed - * is critical to the security of the device. It must be - * *secret*, *unpredictable* and (statistically) *unique per device*. - * You should be generate it randomly using a cryptographically - * secure random generator seeded from trusted entropy sources. - * You should transmit it securely to the device and ensure - * that its value is not leaked or stored anywhere beyond the - * needs of transmitting it from the point of generation to - * the call of this function, and erase all copies of the value - * once this function returns. - * - * This is an Mbed TLS extension. - * - * \note This function is only available on the following platforms: - * * If the compile-time option MBEDTLS_PSA_INJECT_ENTROPY is enabled. - * Note that you must provide compatible implementations of - * mbedtls_nv_seed_read and mbedtls_nv_seed_write. - * * In a client-server integration of PSA Cryptography, on the client side, - * if the server supports this feature. - * \param[in] seed Buffer containing the seed value to inject. - * \param[in] seed_size Size of the \p seed buffer. - * The size of the seed in bytes must be greater - * or equal to both #MBEDTLS_ENTROPY_MIN_PLATFORM - * and #MBEDTLS_ENTROPY_BLOCK_SIZE. - * It must be less or equal to - * #MBEDTLS_ENTROPY_MAX_SEED_SIZE. - * - * \retval #PSA_SUCCESS - * The seed value was injected successfully. The random generator - * of the PSA Crypto implementation is now ready for use. - * You may now call psa_crypto_init() and use the PSA Crypto - * implementation. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \p seed_size is out of range. - * \retval #PSA_ERROR_STORAGE_FAILURE - * There was a failure reading or writing from storage. - * \retval #PSA_ERROR_NOT_PERMITTED - * The library has already been initialized. It is no longer - * possible to call this function. - */ -psa_status_t mbedtls_psa_inject_entropy(const uint8_t *seed, - size_t seed_size); - -/** \addtogroup crypto_types - * @{ - */ - -/** DSA public key. - * - * The import and export format is the - * representation of the public key `y = g^x mod p` as a big-endian byte - * string. The length of the byte string is the length of the base prime `p` - * in bytes. - */ -#define PSA_KEY_TYPE_DSA_PUBLIC_KEY ((psa_key_type_t)0x4002) - -/** DSA key pair (private and public key). - * - * The import and export format is the - * representation of the private key `x` as a big-endian byte string. The - * length of the byte string is the private key size in bytes (leading zeroes - * are not stripped). - * - * Determinstic DSA key derivation with psa_generate_derived_key follows - * FIPS 186-4 §B.1.2: interpret the byte string as integer - * in big-endian order. Discard it if it is not in the range - * [0, *N* - 2] where *N* is the boundary of the private key domain - * (the prime *p* for Diffie-Hellman, the subprime *q* for DSA, - * or the order of the curve's base point for ECC). - * Add 1 to the resulting integer and use this as the private key *x*. - * - */ -#define PSA_KEY_TYPE_DSA_KEY_PAIR ((psa_key_type_t)0x7002) - -/** Whether a key type is an DSA key (pair or public-only). */ -#define PSA_KEY_TYPE_IS_DSA(type) \ - (PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR(type) == PSA_KEY_TYPE_DSA_PUBLIC_KEY) - -#define PSA_ALG_DSA_BASE ((psa_algorithm_t)0x06000400) -/** DSA signature with hashing. - * - * This is the signature scheme defined by FIPS 186-4, - * with a random per-message secret number (*k*). - * - * \param hash_alg A hash algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_HASH(\p hash_alg) is true). - * This includes #PSA_ALG_ANY_HASH - * when specifying the algorithm in a usage policy. - * - * \return The corresponding DSA signature algorithm. - * \return Unspecified if \p hash_alg is not a supported - * hash algorithm. - */ -#define PSA_ALG_DSA(hash_alg) \ - (PSA_ALG_DSA_BASE | ((hash_alg) & PSA_ALG_HASH_MASK)) -#define PSA_ALG_DETERMINISTIC_DSA_BASE ((psa_algorithm_t)0x06000500) -#define PSA_ALG_DSA_DETERMINISTIC_FLAG PSA_ALG_ECDSA_DETERMINISTIC_FLAG -/** Deterministic DSA signature with hashing. - * - * This is the deterministic variant defined by RFC 6979 of - * the signature scheme defined by FIPS 186-4. - * - * \param hash_alg A hash algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_HASH(\p hash_alg) is true). - * This includes #PSA_ALG_ANY_HASH - * when specifying the algorithm in a usage policy. - * - * \return The corresponding DSA signature algorithm. - * \return Unspecified if \p hash_alg is not a supported - * hash algorithm. - */ -#define PSA_ALG_DETERMINISTIC_DSA(hash_alg) \ - (PSA_ALG_DETERMINISTIC_DSA_BASE | ((hash_alg) & PSA_ALG_HASH_MASK)) -#define PSA_ALG_IS_DSA(alg) \ - (((alg) & ~PSA_ALG_HASH_MASK & ~PSA_ALG_DSA_DETERMINISTIC_FLAG) == \ - PSA_ALG_DSA_BASE) -#define PSA_ALG_DSA_IS_DETERMINISTIC(alg) \ - (((alg) & PSA_ALG_DSA_DETERMINISTIC_FLAG) != 0) -#define PSA_ALG_IS_DETERMINISTIC_DSA(alg) \ - (PSA_ALG_IS_DSA(alg) && PSA_ALG_DSA_IS_DETERMINISTIC(alg)) -#define PSA_ALG_IS_RANDOMIZED_DSA(alg) \ - (PSA_ALG_IS_DSA(alg) && !PSA_ALG_DSA_IS_DETERMINISTIC(alg)) - - -/* We need to expand the sample definition of this macro from - * the API definition. */ -#undef PSA_ALG_IS_HASH_AND_SIGN -#define PSA_ALG_IS_HASH_AND_SIGN(alg) \ - (PSA_ALG_IS_RSA_PSS(alg) || PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg) || \ - PSA_ALG_IS_DSA(alg) || PSA_ALG_IS_ECDSA(alg)) - -/**@}*/ - -/** \addtogroup attributes - * @{ - */ - -/** Custom Diffie-Hellman group. - * - * For keys of type #PSA_KEY_TYPE_DH_PUBLIC_KEY(#PSA_DH_FAMILY_CUSTOM) or - * #PSA_KEY_TYPE_DH_KEY_PAIR(#PSA_DH_FAMILY_CUSTOM), the group data comes - * from domain parameters set by psa_set_key_domain_parameters(). - */ -#define PSA_DH_FAMILY_CUSTOM ((psa_dh_family_t) 0x7e) - - -/** - * \brief Set domain parameters for a key. - * - * Some key types require additional domain parameters in addition to - * the key type identifier and the key size. Use this function instead - * of psa_set_key_type() when you need to specify domain parameters. - * - * The format for the required domain parameters varies based on the key type. - * - * - For RSA keys (#PSA_KEY_TYPE_RSA_PUBLIC_KEY or #PSA_KEY_TYPE_RSA_KEY_PAIR), - * the domain parameter data consists of the public exponent, - * represented as a big-endian integer with no leading zeros. - * This information is used when generating an RSA key pair. - * When importing a key, the public exponent is read from the imported - * key data and the exponent recorded in the attribute structure is ignored. - * As an exception, the public exponent 65537 is represented by an empty - * byte string. - * - For DSA keys (#PSA_KEY_TYPE_DSA_PUBLIC_KEY or #PSA_KEY_TYPE_DSA_KEY_PAIR), - * the `Dss-Parms` format as defined by RFC 3279 §2.3.2. - * ``` - * Dss-Parms ::= SEQUENCE { - * p INTEGER, - * q INTEGER, - * g INTEGER - * } - * ``` - * - For Diffie-Hellman key exchange keys - * (#PSA_KEY_TYPE_DH_PUBLIC_KEY(#PSA_DH_FAMILY_CUSTOM) or - * #PSA_KEY_TYPE_DH_KEY_PAIR(#PSA_DH_FAMILY_CUSTOM)), the - * `DomainParameters` format as defined by RFC 3279 §2.3.3. - * ``` - * DomainParameters ::= SEQUENCE { - * p INTEGER, -- odd prime, p=jq +1 - * g INTEGER, -- generator, g - * q INTEGER, -- factor of p-1 - * j INTEGER OPTIONAL, -- subgroup factor - * validationParms ValidationParms OPTIONAL - * } - * ValidationParms ::= SEQUENCE { - * seed BIT STRING, - * pgenCounter INTEGER - * } - * ``` - * - * \note This function may allocate memory or other resources. - * Once you have called this function on an attribute structure, - * you must call psa_reset_key_attributes() to free these resources. - * - * \note This is an experimental extension to the interface. It may change - * in future versions of the library. - * - * \param[in,out] attributes Attribute structure where the specified domain - * parameters will be stored. - * If this function fails, the content of - * \p attributes is not modified. - * \param type Key type (a \c PSA_KEY_TYPE_XXX value). - * \param[in] data Buffer containing the key domain parameters. - * The content of this buffer is interpreted - * according to \p type as described above. - * \param data_length Size of the \p data buffer in bytes. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - */ -psa_status_t psa_set_key_domain_parameters(psa_key_attributes_t *attributes, - psa_key_type_t type, - const uint8_t *data, - size_t data_length); - -/** - * \brief Get domain parameters for a key. - * - * Get the domain parameters for a key with this function, if any. The format - * of the domain parameters written to \p data is specified in the - * documentation for psa_set_key_domain_parameters(). - * - * \note This is an experimental extension to the interface. It may change - * in future versions of the library. - * - * \param[in] attributes The key attribute structure to query. - * \param[out] data On success, the key domain parameters. - * \param data_size Size of the \p data buffer in bytes. - * The buffer is guaranteed to be large - * enough if its size in bytes is at least - * the value given by - * PSA_KEY_DOMAIN_PARAMETERS_SIZE(). - * \param[out] data_length On success, the number of bytes - * that make up the key domain parameters data. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - */ -psa_status_t psa_get_key_domain_parameters( - const psa_key_attributes_t *attributes, - uint8_t *data, - size_t data_size, - size_t *data_length); - -/** Safe output buffer size for psa_get_key_domain_parameters(). - * - * This macro returns a compile-time constant if its arguments are - * compile-time constants. - * - * \warning This function may call its arguments multiple times or - * zero times, so you should not pass arguments that contain - * side effects. - * - * \note This is an experimental extension to the interface. It may change - * in future versions of the library. - * - * \param key_type A supported key type. - * \param key_bits The size of the key in bits. - * - * \return If the parameters are valid and supported, return - * a buffer size in bytes that guarantees that - * psa_get_key_domain_parameters() will not fail with - * #PSA_ERROR_BUFFER_TOO_SMALL. - * If the parameters are a valid combination that is not supported - * by the implementation, this macro shall return either a - * sensible size or 0. - * If the parameters are not valid, the - * return value is unspecified. - */ -#define PSA_KEY_DOMAIN_PARAMETERS_SIZE(key_type, key_bits) \ - (PSA_KEY_TYPE_IS_RSA(key_type) ? sizeof(int) : \ - PSA_KEY_TYPE_IS_DH(key_type) ? PSA_DH_KEY_DOMAIN_PARAMETERS_SIZE(key_bits) : \ - PSA_KEY_TYPE_IS_DSA(key_type) ? PSA_DSA_KEY_DOMAIN_PARAMETERS_SIZE(key_bits) : \ - 0) -#define PSA_DH_KEY_DOMAIN_PARAMETERS_SIZE(key_bits) \ - (4 + (PSA_BITS_TO_BYTES(key_bits) + 5) * 3 /*without optional parts*/) -#define PSA_DSA_KEY_DOMAIN_PARAMETERS_SIZE(key_bits) \ - (4 + (PSA_BITS_TO_BYTES(key_bits) + 5) * 2 /*p, g*/ + 34 /*q*/) - -/**@}*/ - -/** \defgroup psa_tls_helpers TLS helper functions - * @{ - */ - -#if defined(MBEDTLS_ECP_C) -#include "third_party/mbedtls/ecp.h" - -/** Convert an ECC curve identifier from the Mbed TLS encoding to PSA. - * - * \note This function is provided solely for the convenience of - * Mbed TLS and may be removed at any time without notice. - * - * \param grpid An Mbed TLS elliptic curve identifier - * (`MBEDTLS_ECP_DP_xxx`). - * \param[out] bits On success, the bit size of the curve. - * - * \return The corresponding PSA elliptic curve identifier - * (`PSA_ECC_FAMILY_xxx`). - * \return \c 0 on failure (\p grpid is not recognized). - */ -static inline psa_ecc_family_t mbedtls_ecc_group_to_psa( mbedtls_ecp_group_id grpid, - size_t *bits ) -{ - switch( grpid ) - { - case MBEDTLS_ECP_DP_SECP192R1: - *bits = 192; - return( PSA_ECC_FAMILY_SECP_R1 ); - case MBEDTLS_ECP_DP_SECP224R1: - *bits = 224; - return( PSA_ECC_FAMILY_SECP_R1 ); - case MBEDTLS_ECP_DP_SECP256R1: - *bits = 256; - return( PSA_ECC_FAMILY_SECP_R1 ); - case MBEDTLS_ECP_DP_SECP384R1: - *bits = 384; - return( PSA_ECC_FAMILY_SECP_R1 ); - case MBEDTLS_ECP_DP_SECP521R1: - *bits = 521; - return( PSA_ECC_FAMILY_SECP_R1 ); - case MBEDTLS_ECP_DP_BP256R1: - *bits = 256; - return( PSA_ECC_FAMILY_BRAINPOOL_P_R1 ); - case MBEDTLS_ECP_DP_BP384R1: - *bits = 384; - return( PSA_ECC_FAMILY_BRAINPOOL_P_R1 ); - case MBEDTLS_ECP_DP_BP512R1: - *bits = 512; - return( PSA_ECC_FAMILY_BRAINPOOL_P_R1 ); - case MBEDTLS_ECP_DP_CURVE25519: - *bits = 255; - return( PSA_ECC_FAMILY_MONTGOMERY ); - case MBEDTLS_ECP_DP_SECP192K1: - *bits = 192; - return( PSA_ECC_FAMILY_SECP_K1 ); - case MBEDTLS_ECP_DP_SECP224K1: - *bits = 224; - return( PSA_ECC_FAMILY_SECP_K1 ); - case MBEDTLS_ECP_DP_SECP256K1: - *bits = 256; - return( PSA_ECC_FAMILY_SECP_K1 ); - case MBEDTLS_ECP_DP_CURVE448: - *bits = 448; - return( PSA_ECC_FAMILY_MONTGOMERY ); - default: - *bits = 0; - return( 0 ); - } -} - -/** Convert an ECC curve identifier from the PSA encoding to Mbed TLS. - * - * \note This function is provided solely for the convenience of - * Mbed TLS and may be removed at any time without notice. - * - * \param curve A PSA elliptic curve identifier - * (`PSA_ECC_FAMILY_xxx`). - * \param bits The bit-length of a private key on \p curve. - * \param bits_is_sloppy If true, \p bits may be the bit-length rounded up - * to the nearest multiple of 8. This allows the caller - * to infer the exact curve from the length of a key - * which is supplied as a byte string. - * - * \return The corresponding Mbed TLS elliptic curve identifier - * (`MBEDTLS_ECP_DP_xxx`). - * \return #MBEDTLS_ECP_DP_NONE if \c curve is not recognized. - * \return #MBEDTLS_ECP_DP_NONE if \p bits is not - * correct for \p curve. - */ -mbedtls_ecp_group_id mbedtls_ecc_group_of_psa( psa_ecc_family_t curve, - size_t bits, - int bits_is_sloppy ); -#endif /* MBEDTLS_ECP_C */ - -/**@}*/ - -/** \defgroup psa_external_rng External random generator - * @{ - */ - -#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) -/** External random generator function, implemented by the platform. - * - * When the compile-time option #MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG is enabled, - * this function replaces Mbed TLS's entropy and DRBG modules for all - * random generation triggered via PSA crypto interfaces. - * - * \note This random generator must deliver random numbers with cryptographic - * quality and high performance. It must supply unpredictable numbers - * with a uniform distribution. The implementation of this function - * is responsible for ensuring that the random generator is seeded - * with sufficient entropy. If you have a hardware TRNG which is slow - * or delivers non-uniform output, declare it as an entropy source - * with mbedtls_entropy_add_source() instead of enabling this option. - * - * \param[in,out] context Pointer to the random generator context. - * This is all-bits-zero on the first call - * and preserved between successive calls. - * \param[out] output Output buffer. On success, this buffer - * contains random data with a uniform - * distribution. - * \param output_size The size of the \p output buffer in bytes. - * \param[out] output_length On success, set this value to \p output_size. - * - * \retval #PSA_SUCCESS - * Success. The output buffer contains \p output_size bytes of - * cryptographic-quality random data, and \c *output_length is - * set to \p output_size. - * \retval #PSA_ERROR_INSUFFICIENT_ENTROPY - * The random generator requires extra entropy and there is no - * way to obtain entropy under current environment conditions. - * This error should not happen under normal circumstances since - * this function is responsible for obtaining as much entropy as - * it needs. However implementations of this function may return - * #PSA_ERROR_INSUFFICIENT_ENTROPY if there is no way to obtain - * entropy without blocking indefinitely. - * \retval #PSA_ERROR_HARDWARE_FAILURE - * A failure of the random generator hardware that isn't covered - * by #PSA_ERROR_INSUFFICIENT_ENTROPY. - */ -psa_status_t mbedtls_psa_external_get_random( - mbedtls_psa_external_random_context_t *context, - uint8_t *output, size_t output_size, size_t *output_length ); -#endif /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* PSA_CRYPTO_EXTRA_H */ diff --git a/third_party/mbedtls/crypto_platform.h b/third_party/mbedtls/crypto_platform.h deleted file mode 100644 index e8efd1a96..000000000 --- a/third_party/mbedtls/crypto_platform.h +++ /dev/null @@ -1,87 +0,0 @@ -/* clang-format off */ - -/** - * \file psa/crypto_platform.h - * - * \brief PSA cryptography module: Mbed TLS platform definitions - * - * \note This file may not be included directly. Applications must - * include psa/crypto.h. - * - * This file contains platform-dependent type definitions. - * - * In implementations with isolation between the application and the - * cryptography module, implementers should take care to ensure that - * the definitions that are exposed to applications match what the - * module implements. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef PSA_CRYPTO_PLATFORM_H -#define PSA_CRYPTO_PLATFORM_H -#include "third_party/mbedtls/config.h" -#include "third_party/mbedtls/config_psa.h" - -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif - -#if defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER) - -/* Building for the PSA Crypto service on a PSA platform, a key owner is a PSA - * partition identifier. - * - * The function psa_its_identifier_of_slot() in psa_crypto_storage.c that - * translates a key identifier to a key storage file name assumes that - * mbedtls_key_owner_id_t is an 32 bits integer. This function thus needs - * reworking if mbedtls_key_owner_id_t is not defined as a 32 bits integer - * here anymore. - */ -typedef int32_t mbedtls_key_owner_id_t; - -/** Compare two key owner identifiers. - * - * \param id1 First key owner identifier. - * \param id2 Second key owner identifier. - * - * \return Non-zero if the two key owner identifiers are equal, zero otherwise. - */ -static inline int mbedtls_key_owner_id_equal( mbedtls_key_owner_id_t id1, - mbedtls_key_owner_id_t id2 ) -{ - return( id1 == id2 ); -} - -#endif /* MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER */ - -#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) -/** The type of the context passed to mbedtls_psa_external_get_random(). - * - * Mbed TLS initializes the context to all-bits-zero before calling - * mbedtls_psa_external_get_random() for the first time. - * - * The definition of this type in the Mbed TLS source code is for - * demonstration purposes. Implementers of mbedtls_psa_external_get_random() - * are expected to replace it with a custom definition. - */ -typedef struct { - uintptr_t opaque[2]; -} mbedtls_psa_external_random_context_t; -#endif /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ - -#endif /* PSA_CRYPTO_PLATFORM_H */ diff --git a/third_party/mbedtls/crypto_se_driver.h b/third_party/mbedtls/crypto_se_driver.h deleted file mode 100644 index 2f32ba4e2..000000000 --- a/third_party/mbedtls/crypto_se_driver.h +++ /dev/null @@ -1,1396 +0,0 @@ -/* clang-format off */ - -/** - * \file psa/crypto_se_driver.h - * \brief PSA external cryptoprocessor driver module - * - * This header declares types and function signatures for cryptography - * drivers that access key material via opaque references. - * This is meant for cryptoprocessors that have a separate key storage from the - * space in which the PSA Crypto implementation runs, typically secure - * elements (SEs). - * - * This file is part of the PSA Crypto Driver HAL (hardware abstraction layer), - * containing functions for driver developers to implement to enable hardware - * to be called in a standardized way by a PSA Cryptography API - * implementation. The functions comprising the driver HAL, which driver - * authors implement, are not intended to be called by application developers. - */ - -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef PSA_CRYPTO_SE_DRIVER_H -#define PSA_CRYPTO_SE_DRIVER_H - -#include "third_party/mbedtls/crypto_driver_common.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup se_init Secure element driver initialization - */ -/**@{*/ - -/** \brief Driver context structure - * - * Driver functions receive a pointer to this structure. - * Each registered driver has one instance of this structure. - * - * Implementations must include the fields specified here and - * may include other fields. - */ -typedef struct { - /** A read-only pointer to the driver's persistent data. - * - * Drivers typically use this persistent data to keep track of - * which slot numbers are available. This is only a guideline: - * drivers may use the persistent data for any purpose, keeping - * in mind the restrictions on when the persistent data is saved - * to storage: the persistent data is only saved after calling - * certain functions that receive a writable pointer to the - * persistent data. - * - * The core allocates a memory buffer for the persistent data. - * The pointer is guaranteed to be suitably aligned for any data type, - * like a pointer returned by `malloc` (but the core can use any - * method to allocate the buffer, not necessarily `malloc`). - * - * The size of this buffer is in the \c persistent_data_size field of - * this structure. - * - * Before the driver is initialized for the first time, the content of - * the persistent data is all-bits-zero. After a driver upgrade, if the - * size of the persistent data has increased, the original data is padded - * on the right with zeros; if the size has decreased, the original data - * is truncated to the new size. - * - * This pointer is to read-only data. Only a few driver functions are - * allowed to modify the persistent data. These functions receive a - * writable pointer. These functions are: - * - psa_drv_se_t::p_init - * - psa_drv_se_key_management_t::p_allocate - * - psa_drv_se_key_management_t::p_destroy - * - * The PSA Cryptography core saves the persistent data from one - * session to the next. It does this before returning from API functions - * that call a driver method that is allowed to modify the persistent - * data, specifically: - * - psa_crypto_init() causes a call to psa_drv_se_t::p_init, and may call - * psa_drv_se_key_management_t::p_destroy to complete an action - * that was interrupted by a power failure. - * - Key creation functions cause a call to - * psa_drv_se_key_management_t::p_allocate, and may cause a call to - * psa_drv_se_key_management_t::p_destroy in case an error occurs. - * - psa_destroy_key() causes a call to - * psa_drv_se_key_management_t::p_destroy. - */ - const void *const persistent_data; - - /** The size of \c persistent_data in bytes. - * - * This is always equal to the value of the `persistent_data_size` field - * of the ::psa_drv_se_t structure when the driver is registered. - */ - const size_t persistent_data_size; - - /** Driver transient data. - * - * The core initializes this value to 0 and does not read or modify it - * afterwards. The driver may store whatever it wants in this field. - */ - uintptr_t transient_data; -} psa_drv_se_context_t; - -/** \brief A driver initialization function. - * - * \param[in,out] drv_context The driver context structure. - * \param[in,out] persistent_data A pointer to the persistent data - * that allows writing. - * \param location The location value for which this driver - * is registered. The driver will be invoked - * for all keys whose lifetime is in this - * location. - * - * \retval #PSA_SUCCESS - * The driver is operational. - * The core will update the persistent data in storage. - * \return - * Any other return value prevents the driver from being used in - * this session. - * The core will NOT update the persistent data in storage. - */ -typedef psa_status_t (*psa_drv_se_init_t)(psa_drv_se_context_t *drv_context, - void *persistent_data, - psa_key_location_t location); - -#if defined(__DOXYGEN_ONLY__) || !defined(MBEDTLS_PSA_CRYPTO_SE_C) -/* Mbed Crypto with secure element support enabled defines this type in - * crypto_types.h because it is also visible to applications through an - * implementation-specific extension. - * For the PSA Cryptography specification, this type is only visible - * via crypto_se_driver.h. */ -/** An internal designation of a key slot between the core part of the - * PSA Crypto implementation and the driver. The meaning of this value - * is driver-dependent. */ -typedef uint64_t psa_key_slot_number_t; -#endif /* __DOXYGEN_ONLY__ || !MBEDTLS_PSA_CRYPTO_SE_C */ - -/**@}*/ - -/** \defgroup se_mac Secure Element Message Authentication Codes - * Generation and authentication of Message Authentication Codes (MACs) using - * a secure element can be done either as a single function call (via the - * `psa_drv_se_mac_generate_t` or `psa_drv_se_mac_verify_t` functions), or in - * parts using the following sequence: - * - `psa_drv_se_mac_setup_t` - * - `psa_drv_se_mac_update_t` - * - `psa_drv_se_mac_update_t` - * - ... - * - `psa_drv_se_mac_finish_t` or `psa_drv_se_mac_finish_verify_t` - * - * If a previously started secure element MAC operation needs to be terminated, - * it should be done so by the `psa_drv_se_mac_abort_t`. Failure to do so may - * result in allocated resources not being freed or in other undefined - * behavior. - */ -/**@{*/ -/** \brief A function that starts a secure element MAC operation for a PSA - * Crypto Driver implementation - * - * \param[in,out] drv_context The driver context structure. - * \param[in,out] op_context A structure that will contain the - * hardware-specific MAC context - * \param[in] key_slot The slot of the key to be used for the - * operation - * \param[in] algorithm The algorithm to be used to underly the MAC - * operation - * - * \retval #PSA_SUCCESS - * Success. - */ -typedef psa_status_t (*psa_drv_se_mac_setup_t)(psa_drv_se_context_t *drv_context, - void *op_context, - psa_key_slot_number_t key_slot, - psa_algorithm_t algorithm); - -/** \brief A function that continues a previously started secure element MAC - * operation - * - * \param[in,out] op_context A hardware-specific structure for the - * previously-established MAC operation to be - * updated - * \param[in] p_input A buffer containing the message to be appended - * to the MAC operation - * \param[in] input_length The size in bytes of the input message buffer - */ -typedef psa_status_t (*psa_drv_se_mac_update_t)(void *op_context, - const uint8_t *p_input, - size_t input_length); - -/** \brief a function that completes a previously started secure element MAC - * operation by returning the resulting MAC. - * - * \param[in,out] op_context A hardware-specific structure for the - * previously started MAC operation to be - * finished - * \param[out] p_mac A buffer where the generated MAC will be - * placed - * \param[in] mac_size The size in bytes of the buffer that has been - * allocated for the `output` buffer - * \param[out] p_mac_length After completion, will contain the number of - * bytes placed in the `p_mac` buffer - * - * \retval #PSA_SUCCESS - * Success. - */ -typedef psa_status_t (*psa_drv_se_mac_finish_t)(void *op_context, - uint8_t *p_mac, - size_t mac_size, - size_t *p_mac_length); - -/** \brief A function that completes a previously started secure element MAC - * operation by comparing the resulting MAC against a provided value - * - * \param[in,out] op_context A hardware-specific structure for the previously - * started MAC operation to be fiinished - * \param[in] p_mac The MAC value against which the resulting MAC - * will be compared against - * \param[in] mac_length The size in bytes of the value stored in `p_mac` - * - * \retval #PSA_SUCCESS - * The operation completed successfully and the MACs matched each - * other - * \retval #PSA_ERROR_INVALID_SIGNATURE - * The operation completed successfully, but the calculated MAC did - * not match the provided MAC - */ -typedef psa_status_t (*psa_drv_se_mac_finish_verify_t)(void *op_context, - const uint8_t *p_mac, - size_t mac_length); - -/** \brief A function that aborts a previous started secure element MAC - * operation - * - * \param[in,out] op_context A hardware-specific structure for the previously - * started MAC operation to be aborted - */ -typedef psa_status_t (*psa_drv_se_mac_abort_t)(void *op_context); - -/** \brief A function that performs a secure element MAC operation in one - * command and returns the calculated MAC - * - * \param[in,out] drv_context The driver context structure. - * \param[in] p_input A buffer containing the message to be MACed - * \param[in] input_length The size in bytes of `p_input` - * \param[in] key_slot The slot of the key to be used - * \param[in] alg The algorithm to be used to underlie the MAC - * operation - * \param[out] p_mac A buffer where the generated MAC will be - * placed - * \param[in] mac_size The size in bytes of the `p_mac` buffer - * \param[out] p_mac_length After completion, will contain the number of - * bytes placed in the `output` buffer - * - * \retval #PSA_SUCCESS - * Success. - */ -typedef psa_status_t (*psa_drv_se_mac_generate_t)(psa_drv_se_context_t *drv_context, - const uint8_t *p_input, - size_t input_length, - psa_key_slot_number_t key_slot, - psa_algorithm_t alg, - uint8_t *p_mac, - size_t mac_size, - size_t *p_mac_length); - -/** \brief A function that performs a secure element MAC operation in one - * command and compares the resulting MAC against a provided value - * - * \param[in,out] drv_context The driver context structure. - * \param[in] p_input A buffer containing the message to be MACed - * \param[in] input_length The size in bytes of `input` - * \param[in] key_slot The slot of the key to be used - * \param[in] alg The algorithm to be used to underlie the MAC - * operation - * \param[in] p_mac The MAC value against which the resulting MAC will - * be compared against - * \param[in] mac_length The size in bytes of `mac` - * - * \retval #PSA_SUCCESS - * The operation completed successfully and the MACs matched each - * other - * \retval #PSA_ERROR_INVALID_SIGNATURE - * The operation completed successfully, but the calculated MAC did - * not match the provided MAC - */ -typedef psa_status_t (*psa_drv_se_mac_verify_t)(psa_drv_se_context_t *drv_context, - const uint8_t *p_input, - size_t input_length, - psa_key_slot_number_t key_slot, - psa_algorithm_t alg, - const uint8_t *p_mac, - size_t mac_length); - -/** \brief A struct containing all of the function pointers needed to - * perform secure element MAC operations - * - * PSA Crypto API implementations should populate the table as appropriate - * upon startup. - * - * If one of the functions is not implemented (such as - * `psa_drv_se_mac_generate_t`), it should be set to NULL. - * - * Driver implementers should ensure that they implement all of the functions - * that make sense for their hardware, and that they provide a full solution - * (for example, if they support `p_setup`, they should also support - * `p_update` and at least one of `p_finish` or `p_finish_verify`). - * - */ -typedef struct { - /**The size in bytes of the hardware-specific secure element MAC context - * structure - */ - size_t context_size; - /** Function that performs a MAC setup operation - */ - psa_drv_se_mac_setup_t p_setup; - /** Function that performs a MAC update operation - */ - psa_drv_se_mac_update_t p_update; - /** Function that completes a MAC operation - */ - psa_drv_se_mac_finish_t p_finish; - /** Function that completes a MAC operation with a verify check - */ - psa_drv_se_mac_finish_verify_t p_finish_verify; - /** Function that aborts a previoustly started MAC operation - */ - psa_drv_se_mac_abort_t p_abort; - /** Function that performs a MAC operation in one call - */ - psa_drv_se_mac_generate_t p_mac; - /** Function that performs a MAC and verify operation in one call - */ - psa_drv_se_mac_verify_t p_mac_verify; -} psa_drv_se_mac_t; -/**@}*/ - -/** \defgroup se_cipher Secure Element Symmetric Ciphers - * - * Encryption and Decryption using secure element keys in block modes other - * than ECB must be done in multiple parts, using the following flow: - * - `psa_drv_se_cipher_setup_t` - * - `psa_drv_se_cipher_set_iv_t` (optional depending upon block mode) - * - `psa_drv_se_cipher_update_t` - * - `psa_drv_se_cipher_update_t` - * - ... - * - `psa_drv_se_cipher_finish_t` - * - * If a previously started secure element Cipher operation needs to be - * terminated, it should be done so by the `psa_drv_se_cipher_abort_t`. Failure - * to do so may result in allocated resources not being freed or in other - * undefined behavior. - * - * In situations where a PSA Cryptographic API implementation is using a block - * mode not-supported by the underlying hardware or driver, it can construct - * the block mode itself, while calling the `psa_drv_se_cipher_ecb_t` function - * for the cipher operations. - */ -/**@{*/ - -/** \brief A function that provides the cipher setup function for a - * secure element driver - * - * \param[in,out] drv_context The driver context structure. - * \param[in,out] op_context A structure that will contain the - * hardware-specific cipher context. - * \param[in] key_slot The slot of the key to be used for the - * operation - * \param[in] algorithm The algorithm to be used in the cipher - * operation - * \param[in] direction Indicates whether the operation is an encrypt - * or decrypt - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_NOT_SUPPORTED - */ -typedef psa_status_t (*psa_drv_se_cipher_setup_t)(psa_drv_se_context_t *drv_context, - void *op_context, - psa_key_slot_number_t key_slot, - psa_algorithm_t algorithm, - psa_encrypt_or_decrypt_t direction); - -/** \brief A function that sets the initialization vector (if - * necessary) for an secure element cipher operation - * - * Rationale: The `psa_se_cipher_*` operation in the PSA Cryptographic API has - * two IV functions: one to set the IV, and one to generate it internally. The - * generate function is not necessary for the drivers to implement as the PSA - * Crypto implementation can do the generation using its RNG features. - * - * \param[in,out] op_context A structure that contains the previously set up - * hardware-specific cipher context - * \param[in] p_iv A buffer containing the initialization vector - * \param[in] iv_length The size (in bytes) of the `p_iv` buffer - * - * \retval #PSA_SUCCESS - */ -typedef psa_status_t (*psa_drv_se_cipher_set_iv_t)(void *op_context, - const uint8_t *p_iv, - size_t iv_length); - -/** \brief A function that continues a previously started secure element cipher - * operation - * - * \param[in,out] op_context A hardware-specific structure for the - * previously started cipher operation - * \param[in] p_input A buffer containing the data to be - * encrypted/decrypted - * \param[in] input_size The size in bytes of the buffer pointed to - * by `p_input` - * \param[out] p_output The caller-allocated buffer where the - * output will be placed - * \param[in] output_size The allocated size in bytes of the - * `p_output` buffer - * \param[out] p_output_length After completion, will contain the number - * of bytes placed in the `p_output` buffer - * - * \retval #PSA_SUCCESS - */ -typedef psa_status_t (*psa_drv_se_cipher_update_t)(void *op_context, - const uint8_t *p_input, - size_t input_size, - uint8_t *p_output, - size_t output_size, - size_t *p_output_length); - -/** \brief A function that completes a previously started secure element cipher - * operation - * - * \param[in,out] op_context A hardware-specific structure for the - * previously started cipher operation - * \param[out] p_output The caller-allocated buffer where the output - * will be placed - * \param[in] output_size The allocated size in bytes of the `p_output` - * buffer - * \param[out] p_output_length After completion, will contain the number of - * bytes placed in the `p_output` buffer - * - * \retval #PSA_SUCCESS - */ -typedef psa_status_t (*psa_drv_se_cipher_finish_t)(void *op_context, - uint8_t *p_output, - size_t output_size, - size_t *p_output_length); - -/** \brief A function that aborts a previously started secure element cipher - * operation - * - * \param[in,out] op_context A hardware-specific structure for the - * previously started cipher operation - */ -typedef psa_status_t (*psa_drv_se_cipher_abort_t)(void *op_context); - -/** \brief A function that performs the ECB block mode for secure element - * cipher operations - * - * Note: this function should only be used with implementations that do not - * provide a needed higher-level operation. - * - * \param[in,out] drv_context The driver context structure. - * \param[in] key_slot The slot of the key to be used for the operation - * \param[in] algorithm The algorithm to be used in the cipher operation - * \param[in] direction Indicates whether the operation is an encrypt or - * decrypt - * \param[in] p_input A buffer containing the data to be - * encrypted/decrypted - * \param[in] input_size The size in bytes of the buffer pointed to by - * `p_input` - * \param[out] p_output The caller-allocated buffer where the output - * will be placed - * \param[in] output_size The allocated size in bytes of the `p_output` - * buffer - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_NOT_SUPPORTED - */ -typedef psa_status_t (*psa_drv_se_cipher_ecb_t)(psa_drv_se_context_t *drv_context, - psa_key_slot_number_t key_slot, - psa_algorithm_t algorithm, - psa_encrypt_or_decrypt_t direction, - const uint8_t *p_input, - size_t input_size, - uint8_t *p_output, - size_t output_size); - -/** - * \brief A struct containing all of the function pointers needed to implement - * cipher operations using secure elements. - * - * PSA Crypto API implementations should populate instances of the table as - * appropriate upon startup or at build time. - * - * If one of the functions is not implemented (such as - * `psa_drv_se_cipher_ecb_t`), it should be set to NULL. - */ -typedef struct { - /** The size in bytes of the hardware-specific secure element cipher - * context structure - */ - size_t context_size; - /** Function that performs a cipher setup operation */ - psa_drv_se_cipher_setup_t p_setup; - /** Function that sets a cipher IV (if necessary) */ - psa_drv_se_cipher_set_iv_t p_set_iv; - /** Function that performs a cipher update operation */ - psa_drv_se_cipher_update_t p_update; - /** Function that completes a cipher operation */ - psa_drv_se_cipher_finish_t p_finish; - /** Function that aborts a cipher operation */ - psa_drv_se_cipher_abort_t p_abort; - /** Function that performs ECB mode for a cipher operation - * (Danger: ECB mode should not be used directly by clients of the PSA - * Crypto Client API) - */ - psa_drv_se_cipher_ecb_t p_ecb; -} psa_drv_se_cipher_t; - -/**@}*/ - -/** \defgroup se_asymmetric Secure Element Asymmetric Cryptography - * - * Since the amount of data that can (or should) be encrypted or signed using - * asymmetric keys is limited by the key size, asymmetric key operations using - * keys in a secure element must be done in single function calls. - */ -/**@{*/ - -/** - * \brief A function that signs a hash or short message with a private key in - * a secure element - * - * \param[in,out] drv_context The driver context structure. - * \param[in] key_slot Key slot of an asymmetric key pair - * \param[in] alg A signature algorithm that is compatible - * with the type of `key` - * \param[in] p_hash The hash to sign - * \param[in] hash_length Size of the `p_hash` buffer in bytes - * \param[out] p_signature Buffer where the signature is to be written - * \param[in] signature_size Size of the `p_signature` buffer in bytes - * \param[out] p_signature_length On success, the number of bytes - * that make up the returned signature value - * - * \retval #PSA_SUCCESS - */ -typedef psa_status_t (*psa_drv_se_asymmetric_sign_t)(psa_drv_se_context_t *drv_context, - psa_key_slot_number_t key_slot, - psa_algorithm_t alg, - const uint8_t *p_hash, - size_t hash_length, - uint8_t *p_signature, - size_t signature_size, - size_t *p_signature_length); - -/** - * \brief A function that verifies the signature a hash or short message using - * an asymmetric public key in a secure element - * - * \param[in,out] drv_context The driver context structure. - * \param[in] key_slot Key slot of a public key or an asymmetric key - * pair - * \param[in] alg A signature algorithm that is compatible with - * the type of `key` - * \param[in] p_hash The hash whose signature is to be verified - * \param[in] hash_length Size of the `p_hash` buffer in bytes - * \param[in] p_signature Buffer containing the signature to verify - * \param[in] signature_length Size of the `p_signature` buffer in bytes - * - * \retval #PSA_SUCCESS - * The signature is valid. - */ -typedef psa_status_t (*psa_drv_se_asymmetric_verify_t)(psa_drv_se_context_t *drv_context, - psa_key_slot_number_t key_slot, - psa_algorithm_t alg, - const uint8_t *p_hash, - size_t hash_length, - const uint8_t *p_signature, - size_t signature_length); - -/** - * \brief A function that encrypts a short message with an asymmetric public - * key in a secure element - * - * \param[in,out] drv_context The driver context structure. - * \param[in] key_slot Key slot of a public key or an asymmetric key - * pair - * \param[in] alg An asymmetric encryption algorithm that is - * compatible with the type of `key` - * \param[in] p_input The message to encrypt - * \param[in] input_length Size of the `p_input` buffer in bytes - * \param[in] p_salt A salt or label, if supported by the - * encryption algorithm - * If the algorithm does not support a - * salt, pass `NULL`. - * If the algorithm supports an optional - * salt and you do not want to pass a salt, - * pass `NULL`. - * For #PSA_ALG_RSA_PKCS1V15_CRYPT, no salt is - * supported. - * \param[in] salt_length Size of the `p_salt` buffer in bytes - * If `p_salt` is `NULL`, pass 0. - * \param[out] p_output Buffer where the encrypted message is to - * be written - * \param[in] output_size Size of the `p_output` buffer in bytes - * \param[out] p_output_length On success, the number of bytes that make up - * the returned output - * - * \retval #PSA_SUCCESS - */ -typedef psa_status_t (*psa_drv_se_asymmetric_encrypt_t)(psa_drv_se_context_t *drv_context, - psa_key_slot_number_t key_slot, - psa_algorithm_t alg, - const uint8_t *p_input, - size_t input_length, - const uint8_t *p_salt, - size_t salt_length, - uint8_t *p_output, - size_t output_size, - size_t *p_output_length); - -/** - * \brief A function that decrypts a short message with an asymmetric private - * key in a secure element. - * - * \param[in,out] drv_context The driver context structure. - * \param[in] key_slot Key slot of an asymmetric key pair - * \param[in] alg An asymmetric encryption algorithm that is - * compatible with the type of `key` - * \param[in] p_input The message to decrypt - * \param[in] input_length Size of the `p_input` buffer in bytes - * \param[in] p_salt A salt or label, if supported by the - * encryption algorithm - * If the algorithm does not support a - * salt, pass `NULL`. - * If the algorithm supports an optional - * salt and you do not want to pass a salt, - * pass `NULL`. - * For #PSA_ALG_RSA_PKCS1V15_CRYPT, no salt is - * supported. - * \param[in] salt_length Size of the `p_salt` buffer in bytes - * If `p_salt` is `NULL`, pass 0. - * \param[out] p_output Buffer where the decrypted message is to - * be written - * \param[in] output_size Size of the `p_output` buffer in bytes - * \param[out] p_output_length On success, the number of bytes - * that make up the returned output - * - * \retval #PSA_SUCCESS - */ -typedef psa_status_t (*psa_drv_se_asymmetric_decrypt_t)(psa_drv_se_context_t *drv_context, - psa_key_slot_number_t key_slot, - psa_algorithm_t alg, - const uint8_t *p_input, - size_t input_length, - const uint8_t *p_salt, - size_t salt_length, - uint8_t *p_output, - size_t output_size, - size_t *p_output_length); - -/** - * \brief A struct containing all of the function pointers needed to implement - * asymmetric cryptographic operations using secure elements. - * - * PSA Crypto API implementations should populate instances of the table as - * appropriate upon startup or at build time. - * - * If one of the functions is not implemented, it should be set to NULL. - */ -typedef struct { - /** Function that performs an asymmetric sign operation */ - psa_drv_se_asymmetric_sign_t p_sign; - /** Function that performs an asymmetric verify operation */ - psa_drv_se_asymmetric_verify_t p_verify; - /** Function that performs an asymmetric encrypt operation */ - psa_drv_se_asymmetric_encrypt_t p_encrypt; - /** Function that performs an asymmetric decrypt operation */ - psa_drv_se_asymmetric_decrypt_t p_decrypt; -} psa_drv_se_asymmetric_t; - -/**@}*/ - -/** \defgroup se_aead Secure Element Authenticated Encryption with Additional Data - * Authenticated Encryption with Additional Data (AEAD) operations with secure - * elements must be done in one function call. While this creates a burden for - * implementers as there must be sufficient space in memory for the entire - * message, it prevents decrypted data from being made available before the - * authentication operation is complete and the data is known to be authentic. - */ -/**@{*/ - -/** \brief A function that performs a secure element authenticated encryption - * operation - * - * \param[in,out] drv_context The driver context structure. - * \param[in] key_slot Slot containing the key to use. - * \param[in] algorithm The AEAD algorithm to compute - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_AEAD(`alg`) is true) - * \param[in] p_nonce Nonce or IV to use - * \param[in] nonce_length Size of the `p_nonce` buffer in bytes - * \param[in] p_additional_data Additional data that will be - * authenticated but not encrypted - * \param[in] additional_data_length Size of `p_additional_data` in bytes - * \param[in] p_plaintext Data that will be authenticated and - * encrypted - * \param[in] plaintext_length Size of `p_plaintext` in bytes - * \param[out] p_ciphertext Output buffer for the authenticated and - * encrypted data. The additional data is - * not part of this output. For algorithms - * where the encrypted data and the - * authentication tag are defined as - * separate outputs, the authentication - * tag is appended to the encrypted data. - * \param[in] ciphertext_size Size of the `p_ciphertext` buffer in - * bytes - * \param[out] p_ciphertext_length On success, the size of the output in - * the `p_ciphertext` buffer - * - * \retval #PSA_SUCCESS - * Success. - */ -typedef psa_status_t (*psa_drv_se_aead_encrypt_t)(psa_drv_se_context_t *drv_context, - psa_key_slot_number_t key_slot, - psa_algorithm_t algorithm, - const uint8_t *p_nonce, - size_t nonce_length, - const uint8_t *p_additional_data, - size_t additional_data_length, - const uint8_t *p_plaintext, - size_t plaintext_length, - uint8_t *p_ciphertext, - size_t ciphertext_size, - size_t *p_ciphertext_length); - -/** A function that peforms a secure element authenticated decryption operation - * - * \param[in,out] drv_context The driver context structure. - * \param[in] key_slot Slot containing the key to use - * \param[in] algorithm The AEAD algorithm to compute - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_AEAD(`alg`) is true) - * \param[in] p_nonce Nonce or IV to use - * \param[in] nonce_length Size of the `p_nonce` buffer in bytes - * \param[in] p_additional_data Additional data that has been - * authenticated but not encrypted - * \param[in] additional_data_length Size of `p_additional_data` in bytes - * \param[in] p_ciphertext Data that has been authenticated and - * encrypted. - * For algorithms where the encrypted data - * and the authentication tag are defined - * as separate inputs, the buffer must - * contain the encrypted data followed by - * the authentication tag. - * \param[in] ciphertext_length Size of `p_ciphertext` in bytes - * \param[out] p_plaintext Output buffer for the decrypted data - * \param[in] plaintext_size Size of the `p_plaintext` buffer in - * bytes - * \param[out] p_plaintext_length On success, the size of the output in - * the `p_plaintext` buffer - * - * \retval #PSA_SUCCESS - * Success. - */ -typedef psa_status_t (*psa_drv_se_aead_decrypt_t)(psa_drv_se_context_t *drv_context, - psa_key_slot_number_t key_slot, - psa_algorithm_t algorithm, - const uint8_t *p_nonce, - size_t nonce_length, - const uint8_t *p_additional_data, - size_t additional_data_length, - const uint8_t *p_ciphertext, - size_t ciphertext_length, - uint8_t *p_plaintext, - size_t plaintext_size, - size_t *p_plaintext_length); - -/** - * \brief A struct containing all of the function pointers needed to implement - * secure element Authenticated Encryption with Additional Data operations - * - * PSA Crypto API implementations should populate instances of the table as - * appropriate upon startup. - * - * If one of the functions is not implemented, it should be set to NULL. - */ -typedef struct { - /** Function that performs the AEAD encrypt operation */ - psa_drv_se_aead_encrypt_t p_encrypt; - /** Function that performs the AEAD decrypt operation */ - psa_drv_se_aead_decrypt_t p_decrypt; -} psa_drv_se_aead_t; -/**@}*/ - -/** \defgroup se_key_management Secure Element Key Management - * Currently, key management is limited to importing keys in the clear, - * destroying keys, and exporting keys in the clear. - * Whether a key may be exported is determined by the key policies in place - * on the key slot. - */ -/**@{*/ - -/** An enumeration indicating how a key is created. - */ -typedef enum -{ - PSA_KEY_CREATION_IMPORT, /**< During psa_import_key() */ - PSA_KEY_CREATION_GENERATE, /**< During psa_generate_key() */ - PSA_KEY_CREATION_DERIVE, /**< During psa_key_derivation_output_key() */ - PSA_KEY_CREATION_COPY, /**< During psa_copy_key() */ - -#ifndef __DOXYGEN_ONLY__ - /** A key is being registered with mbedtls_psa_register_se_key(). - * - * The core only passes this value to - * psa_drv_se_key_management_t::p_validate_slot_number, not to - * psa_drv_se_key_management_t::p_allocate. The call to - * `p_validate_slot_number` is not followed by any other call to the - * driver: the key is considered successfully registered if the call to - * `p_validate_slot_number` succeeds, or if `p_validate_slot_number` is - * null. - * - * With this creation method, the driver must return #PSA_SUCCESS if - * the given attributes are compatible with the existing key in the slot, - * and #PSA_ERROR_DOES_NOT_EXIST if the driver can determine that there - * is no key with the specified slot number. - * - * This is an Mbed Crypto extension. - */ - PSA_KEY_CREATION_REGISTER, -#endif -} psa_key_creation_method_t; - -/** \brief A function that allocates a slot for a key. - * - * To create a key in a specific slot in a secure element, the core - * first calls this function to determine a valid slot number, - * then calls a function to create the key material in that slot. - * In nominal conditions (that is, if no error occurs), - * the effect of a call to a key creation function in the PSA Cryptography - * API with a lifetime that places the key in a secure element is the - * following: - * -# The core calls psa_drv_se_key_management_t::p_allocate - * (or in some implementations - * psa_drv_se_key_management_t::p_validate_slot_number). The driver - * selects (or validates) a suitable slot number given the key attributes - * and the state of the secure element. - * -# The core calls a key creation function in the driver. - * - * The key creation functions in the PSA Cryptography API are: - * - psa_import_key(), which causes - * a call to `p_allocate` with \p method = #PSA_KEY_CREATION_IMPORT - * then a call to psa_drv_se_key_management_t::p_import. - * - psa_generate_key(), which causes - * a call to `p_allocate` with \p method = #PSA_KEY_CREATION_GENERATE - * then a call to psa_drv_se_key_management_t::p_import. - * - psa_key_derivation_output_key(), which causes - * a call to `p_allocate` with \p method = #PSA_KEY_CREATION_DERIVE - * then a call to psa_drv_se_key_derivation_t::p_derive. - * - psa_copy_key(), which causes - * a call to `p_allocate` with \p method = #PSA_KEY_CREATION_COPY - * then a call to psa_drv_se_key_management_t::p_export. - * - * In case of errors, other behaviors are possible. - * - If the PSA Cryptography subsystem dies after the first step, - * for example because the device has lost power abruptly, - * the second step may never happen, or may happen after a reset - * and re-initialization. Alternatively, after a reset and - * re-initialization, the core may call - * psa_drv_se_key_management_t::p_destroy on the slot number that - * was allocated (or validated) instead of calling a key creation function. - * - If an error occurs, the core may call - * psa_drv_se_key_management_t::p_destroy on the slot number that - * was allocated (or validated) instead of calling a key creation function. - * - * Errors and system resets also have an impact on the driver's persistent - * data. If a reset happens before the overall key creation process is - * completed (before or after the second step above), it is unspecified - * whether the persistent data after the reset is identical to what it - * was before or after the call to `p_allocate` (or `p_validate_slot_number`). - * - * \param[in,out] drv_context The driver context structure. - * \param[in,out] persistent_data A pointer to the persistent data - * that allows writing. - * \param[in] attributes Attributes of the key. - * \param method The way in which the key is being created. - * \param[out] key_slot Slot where the key will be stored. - * This must be a valid slot for a key of the - * chosen type. It must be unoccupied. - * - * \retval #PSA_SUCCESS - * Success. - * The core will record \c *key_slot as the key slot where the key - * is stored and will update the persistent data in storage. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INSUFFICIENT_STORAGE - */ -typedef psa_status_t (*psa_drv_se_allocate_key_t)( - psa_drv_se_context_t *drv_context, - void *persistent_data, - const psa_key_attributes_t *attributes, - psa_key_creation_method_t method, - psa_key_slot_number_t *key_slot); - -/** \brief A function that determines whether a slot number is valid - * for a key. - * - * To create a key in a specific slot in a secure element, the core - * first calls this function to validate the choice of slot number, - * then calls a function to create the key material in that slot. - * See the documentation of #psa_drv_se_allocate_key_t for more details. - * - * As of the PSA Cryptography API specification version 1.0, there is no way - * for applications to trigger a call to this function. However some - * implementations offer the capability to create or declare a key in - * a specific slot via implementation-specific means, generally for the - * sake of initial device provisioning or onboarding. Such a mechanism may - * be added to a future version of the PSA Cryptography API specification. - * - * This function may update the driver's persistent data through - * \p persistent_data. The core will save the updated persistent data at the - * end of the key creation process. See the description of - * ::psa_drv_se_allocate_key_t for more information. - * - * \param[in,out] drv_context The driver context structure. - * \param[in,out] persistent_data A pointer to the persistent data - * that allows writing. - * \param[in] attributes Attributes of the key. - * \param method The way in which the key is being created. - * \param[in] key_slot Slot where the key is to be stored. - * - * \retval #PSA_SUCCESS - * The given slot number is valid for a key with the given - * attributes. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The given slot number is not valid for a key with the - * given attributes. This includes the case where the slot - * number is not valid at all. - * \retval #PSA_ERROR_ALREADY_EXISTS - * There is already a key with the specified slot number. - * Drivers may choose to return this error from the key - * creation function instead. - */ -typedef psa_status_t (*psa_drv_se_validate_slot_number_t)( - psa_drv_se_context_t *drv_context, - void *persistent_data, - const psa_key_attributes_t *attributes, - psa_key_creation_method_t method, - psa_key_slot_number_t key_slot); - -/** \brief A function that imports a key into a secure element in binary format - * - * This function can support any output from psa_export_key(). Refer to the - * documentation of psa_export_key() for the format for each key type. - * - * \param[in,out] drv_context The driver context structure. - * \param key_slot Slot where the key will be stored. - * This must be a valid slot for a key of the - * chosen type. It must be unoccupied. - * \param[in] attributes The key attributes, including the lifetime, - * the key type and the usage policy. - * Drivers should not access the key size stored - * in the attributes: it may not match the - * data passed in \p data. - * Drivers can call psa_get_key_lifetime(), - * psa_get_key_type(), - * psa_get_key_usage_flags() and - * psa_get_key_algorithm() to access this - * information. - * \param[in] data Buffer containing the key data. - * \param[in] data_length Size of the \p data buffer in bytes. - * \param[out] bits On success, the key size in bits. The driver - * must determine this value after parsing the - * key according to the key type. - * This value is not used if the function fails. - * - * \retval #PSA_SUCCESS - * Success. - */ -typedef psa_status_t (*psa_drv_se_import_key_t)( - psa_drv_se_context_t *drv_context, - psa_key_slot_number_t key_slot, - const psa_key_attributes_t *attributes, - const uint8_t *data, - size_t data_length, - size_t *bits); - -/** - * \brief A function that destroys a secure element key and restore the slot to - * its default state - * - * This function destroys the content of the key from a secure element. - * Implementations shall make a best effort to ensure that any previous content - * of the slot is unrecoverable. - * - * This function returns the specified slot to its default state. - * - * \param[in,out] drv_context The driver context structure. - * \param[in,out] persistent_data A pointer to the persistent data - * that allows writing. - * \param key_slot The key slot to erase. - * - * \retval #PSA_SUCCESS - * The slot's content, if any, has been erased. - */ -typedef psa_status_t (*psa_drv_se_destroy_key_t)( - psa_drv_se_context_t *drv_context, - void *persistent_data, - psa_key_slot_number_t key_slot); - -/** - * \brief A function that exports a secure element key in binary format - * - * The output of this function can be passed to psa_import_key() to - * create an equivalent object. - * - * If a key is created with `psa_import_key()` and then exported with - * this function, it is not guaranteed that the resulting data is - * identical: the implementation may choose a different representation - * of the same key if the format permits it. - * - * This function should generate output in the same format that - * `psa_export_key()` does. Refer to the - * documentation of `psa_export_key()` for the format for each key type. - * - * \param[in,out] drv_context The driver context structure. - * \param[in] key Slot whose content is to be exported. This must - * be an occupied key slot. - * \param[out] p_data Buffer where the key data is to be written. - * \param[in] data_size Size of the `p_data` buffer in bytes. - * \param[out] p_data_length On success, the number of bytes - * that make up the key data. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_DOES_NOT_EXIST - * \retval #PSA_ERROR_NOT_PERMITTED - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - */ -typedef psa_status_t (*psa_drv_se_export_key_t)(psa_drv_se_context_t *drv_context, - psa_key_slot_number_t key, - uint8_t *p_data, - size_t data_size, - size_t *p_data_length); - -/** - * \brief A function that generates a symmetric or asymmetric key on a secure - * element - * - * If \p type is asymmetric (#PSA_KEY_TYPE_IS_ASYMMETRIC(\p type) = 1), - * the driver may export the public key at the time of generation, - * in the format documented for psa_export_public_key() by writing it - * to the \p pubkey buffer. - * This is optional, intended for secure elements that output the - * public key at generation time and that cannot export the public key - * later. Drivers that do not need this feature should leave - * \p *pubkey_length set to 0 and should - * implement the psa_drv_key_management_t::p_export_public function. - * Some implementations do not support this feature, in which case - * \p pubkey is \c NULL and \p pubkey_size is 0. - * - * \param[in,out] drv_context The driver context structure. - * \param key_slot Slot where the key will be stored. - * This must be a valid slot for a key of the - * chosen type. It must be unoccupied. - * \param[in] attributes The key attributes, including the lifetime, - * the key type and size, and the usage policy. - * Drivers can call psa_get_key_lifetime(), - * psa_get_key_type(), psa_get_key_bits(), - * psa_get_key_usage_flags() and - * psa_get_key_algorithm() to access this - * information. - * \param[out] pubkey A buffer where the driver can write the - * public key, when generating an asymmetric - * key pair. - * This is \c NULL when generating a symmetric - * key or if the core does not support - * exporting the public key at generation time. - * \param pubkey_size The size of the `pubkey` buffer in bytes. - * This is 0 when generating a symmetric - * key or if the core does not support - * exporting the public key at generation time. - * \param[out] pubkey_length On entry, this is always 0. - * On success, the number of bytes written to - * \p pubkey. If this is 0 or unchanged on return, - * the core will not read the \p pubkey buffer, - * and will instead call the driver's - * psa_drv_key_management_t::p_export_public - * function to export the public key when needed. - */ -typedef psa_status_t (*psa_drv_se_generate_key_t)( - psa_drv_se_context_t *drv_context, - psa_key_slot_number_t key_slot, - const psa_key_attributes_t *attributes, - uint8_t *pubkey, size_t pubkey_size, size_t *pubkey_length); - -/** - * \brief A struct containing all of the function pointers needed to for secure - * element key management - * - * PSA Crypto API implementations should populate instances of the table as - * appropriate upon startup or at build time. - * - * If one of the functions is not implemented, it should be set to NULL. - */ -typedef struct { - /** Function that allocates a slot for a key. */ - psa_drv_se_allocate_key_t p_allocate; - /** Function that checks the validity of a slot for a key. */ - psa_drv_se_validate_slot_number_t p_validate_slot_number; - /** Function that performs a key import operation */ - psa_drv_se_import_key_t p_import; - /** Function that performs a generation */ - psa_drv_se_generate_key_t p_generate; - /** Function that performs a key destroy operation */ - psa_drv_se_destroy_key_t p_destroy; - /** Function that performs a key export operation */ - psa_drv_se_export_key_t p_export; - /** Function that performs a public key export operation */ - psa_drv_se_export_key_t p_export_public; -} psa_drv_se_key_management_t; - -/**@}*/ - -/** \defgroup driver_derivation Secure Element Key Derivation and Agreement - * Key derivation is the process of generating new key material using an - * existing key and additional parameters, iterating through a basic - * cryptographic function, such as a hash. - * Key agreement is a part of cryptographic protocols that allows two parties - * to agree on the same key value, but starting from different original key - * material. - * The flows are similar, and the PSA Crypto Driver Model uses the same functions - * for both of the flows. - * - * There are two different final functions for the flows, - * `psa_drv_se_key_derivation_derive` and `psa_drv_se_key_derivation_export`. - * `psa_drv_se_key_derivation_derive` is used when the key material should be - * placed in a slot on the hardware and not exposed to the caller. - * `psa_drv_se_key_derivation_export` is used when the key material should be - * returned to the PSA Cryptographic API implementation. - * - * Different key derivation algorithms require a different number of inputs. - * Instead of having an API that takes as input variable length arrays, which - * can be problemmatic to manage on embedded platforms, the inputs are passed - * to the driver via a function, `psa_drv_se_key_derivation_collateral`, that - * is called multiple times with different `collateral_id`s. Thus, for a key - * derivation algorithm that required 3 paramter inputs, the flow would look - * something like: - * ~~~~~~~~~~~~~{.c} - * psa_drv_se_key_derivation_setup(kdf_algorithm, source_key, dest_key_size_bytes); - * psa_drv_se_key_derivation_collateral(kdf_algorithm_collateral_id_0, - * p_collateral_0, - * collateral_0_size); - * psa_drv_se_key_derivation_collateral(kdf_algorithm_collateral_id_1, - * p_collateral_1, - * collateral_1_size); - * psa_drv_se_key_derivation_collateral(kdf_algorithm_collateral_id_2, - * p_collateral_2, - * collateral_2_size); - * psa_drv_se_key_derivation_derive(); - * ~~~~~~~~~~~~~ - * - * key agreement example: - * ~~~~~~~~~~~~~{.c} - * psa_drv_se_key_derivation_setup(alg, source_key. dest_key_size_bytes); - * psa_drv_se_key_derivation_collateral(DHE_PUBKEY, p_pubkey, pubkey_size); - * psa_drv_se_key_derivation_export(p_session_key, - * session_key_size, - * &session_key_length); - * ~~~~~~~~~~~~~ - */ -/**@{*/ - -/** \brief A function that Sets up a secure element key derivation operation by - * specifying the algorithm and the source key sot - * - * \param[in,out] drv_context The driver context structure. - * \param[in,out] op_context A hardware-specific structure containing any - * context information for the implementation - * \param[in] kdf_alg The algorithm to be used for the key derivation - * \param[in] source_key The key to be used as the source material for - * the key derivation - * - * \retval #PSA_SUCCESS - */ -typedef psa_status_t (*psa_drv_se_key_derivation_setup_t)(psa_drv_se_context_t *drv_context, - void *op_context, - psa_algorithm_t kdf_alg, - psa_key_slot_number_t source_key); - -/** \brief A function that provides collateral (parameters) needed for a secure - * element key derivation or key agreement operation - * - * Since many key derivation algorithms require multiple parameters, it is - * expeced that this function may be called multiple times for the same - * operation, each with a different algorithm-specific `collateral_id` - * - * \param[in,out] op_context A hardware-specific structure containing any - * context information for the implementation - * \param[in] collateral_id An ID for the collateral being provided - * \param[in] p_collateral A buffer containing the collateral data - * \param[in] collateral_size The size in bytes of the collateral - * - * \retval #PSA_SUCCESS - */ -typedef psa_status_t (*psa_drv_se_key_derivation_collateral_t)(void *op_context, - uint32_t collateral_id, - const uint8_t *p_collateral, - size_t collateral_size); - -/** \brief A function that performs the final secure element key derivation - * step and place the generated key material in a slot - * - * \param[in,out] op_context A hardware-specific structure containing any - * context information for the implementation - * \param[in] dest_key The slot where the generated key material - * should be placed - * - * \retval #PSA_SUCCESS - */ -typedef psa_status_t (*psa_drv_se_key_derivation_derive_t)(void *op_context, - psa_key_slot_number_t dest_key); - -/** \brief A function that performs the final step of a secure element key - * agreement and place the generated key material in a buffer - * - * \param[out] p_output Buffer in which to place the generated key - * material - * \param[in] output_size The size in bytes of `p_output` - * \param[out] p_output_length Upon success, contains the number of bytes of - * key material placed in `p_output` - * - * \retval #PSA_SUCCESS - */ -typedef psa_status_t (*psa_drv_se_key_derivation_export_t)(void *op_context, - uint8_t *p_output, - size_t output_size, - size_t *p_output_length); - -/** - * \brief A struct containing all of the function pointers needed to for secure - * element key derivation and agreement - * - * PSA Crypto API implementations should populate instances of the table as - * appropriate upon startup. - * - * If one of the functions is not implemented, it should be set to NULL. - */ -typedef struct { - /** The driver-specific size of the key derivation context */ - size_t context_size; - /** Function that performs a key derivation setup */ - psa_drv_se_key_derivation_setup_t p_setup; - /** Function that sets key derivation collateral */ - psa_drv_se_key_derivation_collateral_t p_collateral; - /** Function that performs a final key derivation step */ - psa_drv_se_key_derivation_derive_t p_derive; - /** Function that perforsm a final key derivation or agreement and - * exports the key */ - psa_drv_se_key_derivation_export_t p_export; -} psa_drv_se_key_derivation_t; - -/**@}*/ - -/** \defgroup se_registration Secure element driver registration - */ -/**@{*/ - -/** A structure containing pointers to all the entry points of a - * secure element driver. - * - * Future versions of this specification may add extra substructures at - * the end of this structure. - */ -typedef struct { - /** The version of the driver HAL that this driver implements. - * This is a protection against loading driver binaries built against - * a different version of this specification. - * Use #PSA_DRV_SE_HAL_VERSION. - */ - uint32_t hal_version; - - /** The size of the driver's persistent data in bytes. - * - * This can be 0 if the driver does not need persistent data. - * - * See the documentation of psa_drv_se_context_t::persistent_data - * for more information about why and how a driver can use - * persistent data. - */ - size_t persistent_data_size; - - /** The driver initialization function. - * - * This function is called once during the initialization of the - * PSA Cryptography subsystem, before any other function of the - * driver is called. If this function returns a failure status, - * the driver will be unusable, at least until the next system reset. - * - * If this field is \c NULL, it is equivalent to a function that does - * nothing and returns #PSA_SUCCESS. - */ - psa_drv_se_init_t p_init; - - const psa_drv_se_key_management_t *key_management; - const psa_drv_se_mac_t *mac; - const psa_drv_se_cipher_t *cipher; - const psa_drv_se_aead_t *aead; - const psa_drv_se_asymmetric_t *asymmetric; - const psa_drv_se_key_derivation_t *derivation; -} psa_drv_se_t; - -/** The current version of the secure element driver HAL. - */ -/* 0.0.0 patchlevel 5 */ -#define PSA_DRV_SE_HAL_VERSION 0x00000005 - -/** Register an external cryptoprocessor (secure element) driver. - * - * This function is only intended to be used by driver code, not by - * application code. In implementations with separation between the - * PSA cryptography module and applications, this function should - * only be available to callers that run in the same memory space as - * the cryptography module, and should not be exposed to applications - * running in a different memory space. - * - * This function may be called before psa_crypto_init(). It is - * implementation-defined whether this function may be called - * after psa_crypto_init(). - * - * \note Implementations store metadata about keys including the lifetime - * value, which contains the driver's location indicator. Therefore, - * from one instantiation of the PSA Cryptography - * library to the next one, if there is a key in storage with a certain - * lifetime value, you must always register the same driver (or an - * updated version that communicates with the same secure element) - * with the same location value. - * - * \param location The location value through which this driver will - * be exposed to applications. - * This driver will be used for all keys such that - * `location == #PSA_KEY_LIFETIME_GET_LOCATION( lifetime )`. - * The value #PSA_KEY_LOCATION_LOCAL_STORAGE is reserved - * and may not be used for drivers. Implementations - * may reserve other values. - * \param[in] methods The method table of the driver. This structure must - * remain valid for as long as the cryptography - * module keeps running. It is typically a global - * constant. - * - * \return #PSA_SUCCESS - * The driver was successfully registered. Applications can now - * use \p lifetime to access keys through the methods passed to - * this function. - * \return #PSA_ERROR_BAD_STATE - * This function was called after the initialization of the - * cryptography module, and this implementation does not support - * driver registration at this stage. - * \return #PSA_ERROR_ALREADY_EXISTS - * There is already a registered driver for this value of \p lifetime. - * \return #PSA_ERROR_INVALID_ARGUMENT - * \p lifetime is a reserved value. - * \return #PSA_ERROR_NOT_SUPPORTED - * `methods->hal_version` is not supported by this implementation. - * \return #PSA_ERROR_INSUFFICIENT_MEMORY - * \return #PSA_ERROR_NOT_PERMITTED - * \return #PSA_ERROR_STORAGE_FAILURE - * \return #PSA_ERROR_DATA_CORRUPT - */ -psa_status_t psa_register_se_driver( - psa_key_location_t location, - const psa_drv_se_t *methods); - -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* PSA_CRYPTO_SE_DRIVER_H */ diff --git a/third_party/mbedtls/crypto_sizes.h b/third_party/mbedtls/crypto_sizes.h deleted file mode 100644 index 9bdc66f32..000000000 --- a/third_party/mbedtls/crypto_sizes.h +++ /dev/null @@ -1,1090 +0,0 @@ -/* clang-format off */ - -/** - * \file psa/crypto_sizes.h - * - * \brief PSA cryptography module: Mbed TLS buffer size macros - * - * \note This file may not be included directly. Applications must - * include psa/crypto.h. - * - * This file contains the definitions of macros that are useful to - * compute buffer sizes. The signatures and semantics of these macros - * are standardized, but the definitions are not, because they depend on - * the available algorithms and, in some cases, on permitted tolerances - * on buffer sizes. - * - * In implementations with isolation between the application and the - * cryptography module, implementers should take care to ensure that - * the definitions that are exposed to applications match what the - * module implements. - * - * Macros that compute sizes whose values do not depend on the - * implementation are in crypto.h. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef PSA_CRYPTO_SIZES_H -#define PSA_CRYPTO_SIZES_H - -/* Include the Mbed TLS configuration file, the way Mbed TLS does it - * in each of its header files. */ -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#define PSA_BITS_TO_BYTES(bits) (((bits) + 7) / 8) -#define PSA_BYTES_TO_BITS(bytes) ((bytes) * 8) - -#define PSA_ROUND_UP_TO_MULTIPLE(block_size, length) \ - (((length) + (block_size) - 1) / (block_size) * (block_size)) - -/** The size of the output of psa_hash_finish(), in bytes. - * - * This is also the hash size that psa_hash_verify() expects. - * - * \param alg A hash algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_HASH(\p alg) is true), or an HMAC algorithm - * (#PSA_ALG_HMAC(\c hash_alg) where \c hash_alg is a - * hash algorithm). - * - * \return The hash size for the specified hash algorithm. - * If the hash algorithm is not recognized, return 0. - */ -#define PSA_HASH_LENGTH(alg) \ - ( \ - PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD2 ? 16 : \ - PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD4 ? 16 : \ - PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_MD5 ? 16 : \ - PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_RIPEMD160 ? 20 : \ - PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_1 ? 20 : \ - PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_224 ? 28 : \ - PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_256 ? 32 : \ - PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_384 ? 48 : \ - PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512 ? 64 : \ - PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_224 ? 28 : \ - PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA_512_256 ? 32 : \ - PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_224 ? 28 : \ - PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_256 ? 32 : \ - PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_384 ? 48 : \ - PSA_ALG_HMAC_GET_HASH(alg) == PSA_ALG_SHA3_512 ? 64 : \ - 0) - -/** \def PSA_HASH_MAX_SIZE - * - * Maximum size of a hash. - * - * This macro expands to a compile-time constant integer. This value - * is the maximum size of a hash in bytes. - */ -/* Note: for HMAC-SHA-3, the block size is 144 bytes for HMAC-SHA3-226, - * 136 bytes for HMAC-SHA3-256, 104 bytes for SHA3-384, 72 bytes for - * HMAC-SHA3-512. */ -#if defined(MBEDTLS_SHA512_C) -#define PSA_HASH_MAX_SIZE 64 -#define PSA_HMAC_MAX_HASH_BLOCK_SIZE 128 -#else -#define PSA_HASH_MAX_SIZE 32 -#define PSA_HMAC_MAX_HASH_BLOCK_SIZE 64 -#endif - -/** \def PSA_MAC_MAX_SIZE - * - * Maximum size of a MAC. - * - * This macro expands to a compile-time constant integer. This value - * is the maximum size of a MAC in bytes. - */ -/* All non-HMAC MACs have a maximum size that's smaller than the - * minimum possible value of PSA_HASH_MAX_SIZE in this implementation. */ -/* Note that the encoding of truncated MAC algorithms limits this value - * to 64 bytes. - */ -#define PSA_MAC_MAX_SIZE PSA_HASH_MAX_SIZE - -/** The tag size for an AEAD algorithm, in bytes. - * - * \param alg An AEAD algorithm - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_AEAD(\p alg) is true). - * - * \return The tag size for the specified algorithm. - * If the AEAD algorithm does not have an identified - * tag that can be distinguished from the rest of - * the ciphertext, return 0. - * If the AEAD algorithm is not recognized, return 0. - */ -#define PSA_AEAD_TAG_LENGTH(alg) \ - (PSA_ALG_IS_AEAD(alg) ? \ - (((alg) & PSA_ALG_AEAD_TAG_LENGTH_MASK) >> PSA_AEAD_TAG_LENGTH_OFFSET) : \ - 0) - -/** The maximum tag size for all supported AEAD algorithms, in bytes. - * - * See also #PSA_AEAD_TAG_LENGTH(\p alg). - */ -#define PSA_AEAD_TAG_MAX_SIZE 16 - -/* The maximum size of an RSA key on this implementation, in bits. - * This is a vendor-specific macro. - * - * Mbed TLS does not set a hard limit on the size of RSA keys: any key - * whose parameters fit in a bignum is accepted. However large keys can - * induce a large memory usage and long computation times. Unlike other - * auxiliary macros in this file and in crypto.h, which reflect how the - * library is configured, this macro defines how the library is - * configured. This implementation refuses to import or generate an - * RSA key whose size is larger than the value defined here. - * - * Note that an implementation may set different size limits for different - * operations, and does not need to accept all key sizes up to the limit. */ -#define PSA_VENDOR_RSA_MAX_KEY_BITS 4096 - -/* The maximum size of an ECC key on this implementation, in bits. - * This is a vendor-specific macro. */ -#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) -#define PSA_VENDOR_ECC_MAX_CURVE_BITS 521 -#elif defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) -#define PSA_VENDOR_ECC_MAX_CURVE_BITS 512 -#elif defined(MBEDTLS_ECP_DP_CURVE448_ENABLED) -#define PSA_VENDOR_ECC_MAX_CURVE_BITS 448 -#elif defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) -#define PSA_VENDOR_ECC_MAX_CURVE_BITS 384 -#elif defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) -#define PSA_VENDOR_ECC_MAX_CURVE_BITS 384 -#elif defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) -#define PSA_VENDOR_ECC_MAX_CURVE_BITS 256 -#elif defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) -#define PSA_VENDOR_ECC_MAX_CURVE_BITS 256 -#elif defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) -#define PSA_VENDOR_ECC_MAX_CURVE_BITS 256 -#elif defined(MBEDTLS_ECP_DP_CURVE25519_ENABLED) -#define PSA_VENDOR_ECC_MAX_CURVE_BITS 255 -#elif defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) -#define PSA_VENDOR_ECC_MAX_CURVE_BITS 224 -#elif defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED) -#define PSA_VENDOR_ECC_MAX_CURVE_BITS 224 -#elif defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) -#define PSA_VENDOR_ECC_MAX_CURVE_BITS 192 -#elif defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED) -#define PSA_VENDOR_ECC_MAX_CURVE_BITS 192 -#else -#define PSA_VENDOR_ECC_MAX_CURVE_BITS 0 -#endif - -/** This macro returns the maximum supported length of the PSK for the - * TLS-1.2 PSK-to-MS key derivation - * (#PSA_ALG_TLS12_PSK_TO_MS(\p hash_alg)). - * - * The maximum supported length does not depend on the chosen hash algorithm. - * - * Quoting RFC 4279, Sect 5.3: - * TLS implementations supporting these ciphersuites MUST support - * arbitrary PSK identities up to 128 octets in length, and arbitrary - * PSKs up to 64 octets in length. Supporting longer identities and - * keys is RECOMMENDED. - * - * Therefore, no implementation should define a value smaller than 64 - * for #PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE. - */ -#define PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE 128 - -/** The maximum size of a block cipher. */ -#define PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE 16 - -/** The size of the output of psa_mac_sign_finish(), in bytes. - * - * This is also the MAC size that psa_mac_verify_finish() expects. - * - * \warning This macro may evaluate its arguments multiple times or - * zero times, so you should not pass arguments that contain - * side effects. - * - * \param key_type The type of the MAC key. - * \param key_bits The size of the MAC key in bits. - * \param alg A MAC algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_MAC(\p alg) is true). - * - * \return The MAC size for the specified algorithm with - * the specified key parameters. - * \return 0 if the MAC algorithm is not recognized. - * \return Either 0 or the correct size for a MAC algorithm that - * the implementation recognizes, but does not support. - * \return Unspecified if the key parameters are not consistent - * with the algorithm. - */ -#define PSA_MAC_LENGTH(key_type, key_bits, alg) \ - ((alg) & PSA_ALG_MAC_TRUNCATION_MASK ? PSA_MAC_TRUNCATED_LENGTH(alg) : \ - PSA_ALG_IS_HMAC(alg) ? PSA_HASH_LENGTH(PSA_ALG_HMAC_GET_HASH(alg)) : \ - PSA_ALG_IS_BLOCK_CIPHER_MAC(alg) ? PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) : \ - ((void)(key_type), (void)(key_bits), 0)) - -/** The maximum size of the output of psa_aead_encrypt(), in bytes. - * - * If the size of the ciphertext buffer is at least this large, it is - * guaranteed that psa_aead_encrypt() will not fail due to an - * insufficient buffer size. Depending on the algorithm, the actual size of - * the ciphertext may be smaller. - * - * \warning This macro may evaluate its arguments multiple times or - * zero times, so you should not pass arguments that contain - * side effects. - * - * \param alg An AEAD algorithm - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_AEAD(\p alg) is true). - * \param plaintext_length Size of the plaintext in bytes. - * - * \return The AEAD ciphertext size for the specified - * algorithm. - * If the AEAD algorithm is not recognized, return 0. - */ -#define PSA_AEAD_ENCRYPT_OUTPUT_SIZE(alg, plaintext_length) \ - (PSA_AEAD_TAG_LENGTH(alg) != 0 ? \ - (plaintext_length) + PSA_AEAD_TAG_LENGTH(alg) : \ - 0) - -/** A sufficient output buffer size for psa_aead_encrypt(), for any of the - * supported key types and AEAD algorithms. - * - * If the size of the ciphertext buffer is at least this large, it is guaranteed - * that psa_aead_encrypt() will not fail due to an insufficient buffer size. - * - * \note This macro returns a compile-time constant if its arguments are - * compile-time constants. - * - * See also #PSA_AEAD_ENCRYPT_OUTPUT_SIZE(\p alg, \p plaintext_length). - * - * \param plaintext_length Size of the plaintext in bytes. - * - * \return A sufficient output buffer size for any of the - * supported key types and AEAD algorithms. - * - */ -#define PSA_AEAD_ENCRYPT_OUTPUT_MAX_SIZE(plaintext_length) \ - ((plaintext_length) + PSA_AEAD_TAG_MAX_SIZE) - - -/** The maximum size of the output of psa_aead_decrypt(), in bytes. - * - * If the size of the plaintext buffer is at least this large, it is - * guaranteed that psa_aead_decrypt() will not fail due to an - * insufficient buffer size. Depending on the algorithm, the actual size of - * the plaintext may be smaller. - * - * \warning This macro may evaluate its arguments multiple times or - * zero times, so you should not pass arguments that contain - * side effects. - * - * \param alg An AEAD algorithm - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_AEAD(\p alg) is true). - * \param ciphertext_length Size of the plaintext in bytes. - * - * \return The AEAD ciphertext size for the specified - * algorithm. - * If the AEAD algorithm is not recognized, return 0. - */ -#define PSA_AEAD_DECRYPT_OUTPUT_SIZE(alg, ciphertext_length) \ - (PSA_AEAD_TAG_LENGTH(alg) != 0 ? \ - (ciphertext_length) - PSA_AEAD_TAG_LENGTH(alg) : \ - 0) - -/** A sufficient output buffer size for psa_aead_decrypt(), for any of the - * supported key types and AEAD algorithms. - * - * If the size of the plaintext buffer is at least this large, it is guaranteed - * that psa_aead_decrypt() will not fail due to an insufficient buffer size. - * - * \note This macro returns a compile-time constant if its arguments are - * compile-time constants. - * - * See also #PSA_AEAD_DECRYPT_OUTPUT_SIZE(\p alg, \p ciphertext_length). - * - * \param ciphertext_length Size of the ciphertext in bytes. - * - * \return A sufficient output buffer size for any of the - * supported key types and AEAD algorithms. - * - */ -#define PSA_AEAD_DECRYPT_OUTPUT_MAX_SIZE(ciphertext_length) \ - (ciphertext_length) - -/** The default nonce size for an AEAD algorithm, in bytes. - * - * This macro can be used to allocate a buffer of sufficient size to - * store the nonce output from #psa_aead_generate_nonce(). - * - * See also #PSA_AEAD_NONCE_MAX_SIZE. - * - * \note This is not the maximum size of nonce supported as input to - * #psa_aead_set_nonce(), #psa_aead_encrypt() or #psa_aead_decrypt(), - * just the default size that is generated by #psa_aead_generate_nonce(). - * - * \warning This macro may evaluate its arguments multiple times or - * zero times, so you should not pass arguments that contain - * side effects. - * - * \param key_type A symmetric key type that is compatible with - * algorithm \p alg. - * - * \param alg An AEAD algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_AEAD(\p alg) is true). - * - * \return The default nonce size for the specified key type and algorithm. - * If the key type or AEAD algorithm is not recognized, - * or the parameters are incompatible, return 0. - */ -#define PSA_AEAD_NONCE_LENGTH(key_type, alg) \ - (PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) == 16 && \ - (PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(alg) == PSA_ALG_CCM || \ - PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(alg) == PSA_ALG_GCM) ? 12 : \ - (key_type) == PSA_KEY_TYPE_CHACHA20 && \ - PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(alg) == PSA_ALG_CHACHA20_POLY1305 ? 12 : \ - 0) - -/** The maximum default nonce size among all supported pairs of key types and - * AEAD algorithms, in bytes. - * - * This is equal to or greater than any value that #PSA_AEAD_NONCE_LENGTH() - * may return. - * - * \note This is not the maximum size of nonce supported as input to - * #psa_aead_set_nonce(), #psa_aead_encrypt() or #psa_aead_decrypt(), - * just the largest size that may be generated by - * #psa_aead_generate_nonce(). - */ -#define PSA_AEAD_NONCE_MAX_SIZE 12 - -/** A sufficient output buffer size for psa_aead_update(). - * - * If the size of the output buffer is at least this large, it is - * guaranteed that psa_aead_update() will not fail due to an - * insufficient buffer size. The actual size of the output may be smaller - * in any given call. - * - * \warning This macro may evaluate its arguments multiple times or - * zero times, so you should not pass arguments that contain - * side effects. - * - * \param alg An AEAD algorithm - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_AEAD(\p alg) is true). - * \param input_length Size of the input in bytes. - * - * \return A sufficient output buffer size for the specified - * algorithm. - * If the AEAD algorithm is not recognized, return 0. - */ -/* For all the AEAD modes defined in this specification, it is possible - * to emit output without delay. However, hardware may not always be - * capable of this. So for modes based on a block cipher, allow the - * implementation to delay the output until it has a full block. */ -#define PSA_AEAD_UPDATE_OUTPUT_SIZE(alg, input_length) \ - (PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER(alg) ? \ - PSA_ROUND_UP_TO_MULTIPLE(PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE, (input_length)) : \ - (input_length)) - -/** A sufficient output buffer size for psa_aead_update(), for any of the - * supported key types and AEAD algorithms. - * - * If the size of the output buffer is at least this large, it is guaranteed - * that psa_aead_update() will not fail due to an insufficient buffer size. - * - * See also #PSA_AEAD_UPDATE_OUTPUT_SIZE(\p alg, \p input_length). - * - * \param input_length Size of the input in bytes. - */ -#define PSA_AEAD_UPDATE_OUTPUT_MAX_SIZE(input_length) \ - (PSA_ROUND_UP_TO_MULTIPLE(PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE, (input_length))) - -/** A sufficient ciphertext buffer size for psa_aead_finish(). - * - * If the size of the ciphertext buffer is at least this large, it is - * guaranteed that psa_aead_finish() will not fail due to an - * insufficient ciphertext buffer size. The actual size of the output may - * be smaller in any given call. - * - * \param alg An AEAD algorithm - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_AEAD(\p alg) is true). - * - * \return A sufficient ciphertext buffer size for the - * specified algorithm. - * If the AEAD algorithm is not recognized, return 0. - */ -#define PSA_AEAD_FINISH_OUTPUT_SIZE(alg) \ - (PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER(alg) ? \ - PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE : \ - 0) - -/** A sufficient ciphertext buffer size for psa_aead_finish(), for any of the - * supported key types and AEAD algorithms. - * - * See also #PSA_AEAD_FINISH_OUTPUT_SIZE(\p alg). - */ -#define PSA_AEAD_FINISH_OUTPUT_MAX_SIZE (PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE) - -/** A sufficient plaintext buffer size for psa_aead_verify(). - * - * If the size of the plaintext buffer is at least this large, it is - * guaranteed that psa_aead_verify() will not fail due to an - * insufficient plaintext buffer size. The actual size of the output may - * be smaller in any given call. - * - * \param alg An AEAD algorithm - * (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_AEAD(\p alg) is true). - * - * \return A sufficient plaintext buffer size for the - * specified algorithm. - * If the AEAD algorithm is not recognized, return 0. - */ -#define PSA_AEAD_VERIFY_OUTPUT_SIZE(alg) \ - (PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER(alg) ? \ - PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE : \ - 0) - -/** A sufficient plaintext buffer size for psa_aead_verify(), for any of the - * supported key types and AEAD algorithms. - * - * See also #PSA_AEAD_VERIFY_OUTPUT_SIZE(\p alg). - */ -#define PSA_AEAD_VERIFY_OUTPUT_MAX_SIZE (PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE) - -#define PSA_RSA_MINIMUM_PADDING_SIZE(alg) \ - (PSA_ALG_IS_RSA_OAEP(alg) ? \ - 2 * PSA_HASH_LENGTH(PSA_ALG_RSA_OAEP_GET_HASH(alg)) + 1 : \ - 11 /*PKCS#1v1.5*/) - -/** - * \brief ECDSA signature size for a given curve bit size - * - * \param curve_bits Curve size in bits. - * \return Signature size in bytes. - * - * \note This macro returns a compile-time constant if its argument is one. - */ -#define PSA_ECDSA_SIGNATURE_SIZE(curve_bits) \ - (PSA_BITS_TO_BYTES(curve_bits) * 2) - -/** Sufficient signature buffer size for psa_sign_hash(). - * - * This macro returns a sufficient buffer size for a signature using a key - * of the specified type and size, with the specified algorithm. - * Note that the actual size of the signature may be smaller - * (some algorithms produce a variable-size signature). - * - * \warning This function may call its arguments multiple times or - * zero times, so you should not pass arguments that contain - * side effects. - * - * \param key_type An asymmetric key type (this may indifferently be a - * key pair type or a public key type). - * \param key_bits The size of the key in bits. - * \param alg The signature algorithm. - * - * \return If the parameters are valid and supported, return - * a buffer size in bytes that guarantees that - * psa_sign_hash() will not fail with - * #PSA_ERROR_BUFFER_TOO_SMALL. - * If the parameters are a valid combination that is not supported, - * return either a sensible size or 0. - * If the parameters are not valid, the - * return value is unspecified. - */ -#define PSA_SIGN_OUTPUT_SIZE(key_type, key_bits, alg) \ - (PSA_KEY_TYPE_IS_RSA(key_type) ? ((void)alg, PSA_BITS_TO_BYTES(key_bits)) : \ - PSA_KEY_TYPE_IS_ECC(key_type) ? PSA_ECDSA_SIGNATURE_SIZE(key_bits) : \ - ((void)alg, 0)) - -#define PSA_VENDOR_ECDSA_SIGNATURE_MAX_SIZE \ - PSA_ECDSA_SIGNATURE_SIZE(PSA_VENDOR_ECC_MAX_CURVE_BITS) - -/** \def PSA_SIGNATURE_MAX_SIZE - * - * Maximum size of an asymmetric signature. - * - * This macro expands to a compile-time constant integer. This value - * is the maximum size of a signature in bytes. - */ -#define PSA_SIGNATURE_MAX_SIZE \ - (PSA_BITS_TO_BYTES(PSA_VENDOR_RSA_MAX_KEY_BITS) > PSA_VENDOR_ECDSA_SIGNATURE_MAX_SIZE ? \ - PSA_BITS_TO_BYTES(PSA_VENDOR_RSA_MAX_KEY_BITS) : \ - PSA_VENDOR_ECDSA_SIGNATURE_MAX_SIZE) - -/** Sufficient output buffer size for psa_asymmetric_encrypt(). - * - * This macro returns a sufficient buffer size for a ciphertext produced using - * a key of the specified type and size, with the specified algorithm. - * Note that the actual size of the ciphertext may be smaller, depending - * on the algorithm. - * - * \warning This function may call its arguments multiple times or - * zero times, so you should not pass arguments that contain - * side effects. - * - * \param key_type An asymmetric key type (this may indifferently be a - * key pair type or a public key type). - * \param key_bits The size of the key in bits. - * \param alg The asymmetric encryption algorithm. - * - * \return If the parameters are valid and supported, return - * a buffer size in bytes that guarantees that - * psa_asymmetric_encrypt() will not fail with - * #PSA_ERROR_BUFFER_TOO_SMALL. - * If the parameters are a valid combination that is not supported, - * return either a sensible size or 0. - * If the parameters are not valid, the - * return value is unspecified. - */ -#define PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE(key_type, key_bits, alg) \ - (PSA_KEY_TYPE_IS_RSA(key_type) ? \ - ((void)alg, PSA_BITS_TO_BYTES(key_bits)) : \ - 0) - -/** A sufficient output buffer size for psa_asymmetric_encrypt(), for any - * supported asymmetric encryption. - * - * See also #PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE(\p key_type, \p key_bits, \p alg). - */ -/* This macro assumes that RSA is the only supported asymmetric encryption. */ -#define PSA_ASYMMETRIC_ENCRYPT_OUTPUT_MAX_SIZE \ - (PSA_BITS_TO_BYTES(PSA_VENDOR_RSA_MAX_KEY_BITS)) - -/** Sufficient output buffer size for psa_asymmetric_decrypt(). - * - * This macro returns a sufficient buffer size for a plaintext produced using - * a key of the specified type and size, with the specified algorithm. - * Note that the actual size of the plaintext may be smaller, depending - * on the algorithm. - * - * \warning This function may call its arguments multiple times or - * zero times, so you should not pass arguments that contain - * side effects. - * - * \param key_type An asymmetric key type (this may indifferently be a - * key pair type or a public key type). - * \param key_bits The size of the key in bits. - * \param alg The asymmetric encryption algorithm. - * - * \return If the parameters are valid and supported, return - * a buffer size in bytes that guarantees that - * psa_asymmetric_decrypt() will not fail with - * #PSA_ERROR_BUFFER_TOO_SMALL. - * If the parameters are a valid combination that is not supported, - * return either a sensible size or 0. - * If the parameters are not valid, the - * return value is unspecified. - */ -#define PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE(key_type, key_bits, alg) \ - (PSA_KEY_TYPE_IS_RSA(key_type) ? \ - PSA_BITS_TO_BYTES(key_bits) - PSA_RSA_MINIMUM_PADDING_SIZE(alg) : \ - 0) - -/** A sufficient output buffer size for psa_asymmetric_decrypt(), for any - * supported asymmetric decryption. - * - * This macro assumes that RSA is the only supported asymmetric encryption. - * - * See also #PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE(\p key_type, \p key_bits, \p alg). - */ -#define PSA_ASYMMETRIC_DECRYPT_OUTPUT_MAX_SIZE \ - (PSA_BITS_TO_BYTES(PSA_VENDOR_RSA_MAX_KEY_BITS)) - -/* Maximum size of the ASN.1 encoding of an INTEGER with the specified - * number of bits. - * - * This definition assumes that bits <= 2^19 - 9 so that the length field - * is at most 3 bytes. The length of the encoding is the length of the - * bit string padded to a whole number of bytes plus: - * - 1 type byte; - * - 1 to 3 length bytes; - * - 0 to 1 bytes of leading 0 due to the sign bit. - */ -#define PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE(bits) \ - ((bits) / 8 + 5) - -/* Maximum size of the export encoding of an RSA public key. - * Assumes that the public exponent is less than 2^32. - * - * RSAPublicKey ::= SEQUENCE { - * modulus INTEGER, -- n - * publicExponent INTEGER } -- e - * - * - 4 bytes of SEQUENCE overhead; - * - n : INTEGER; - * - 7 bytes for the public exponent. - */ -#define PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE(key_bits) \ - (PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE(key_bits) + 11) - -/* Maximum size of the export encoding of an RSA key pair. - * Assumes thatthe public exponent is less than 2^32 and that the size - * difference between the two primes is at most 1 bit. - * - * RSAPrivateKey ::= SEQUENCE { - * version Version, -- 0 - * modulus INTEGER, -- N-bit - * publicExponent INTEGER, -- 32-bit - * privateExponent INTEGER, -- N-bit - * prime1 INTEGER, -- N/2-bit - * prime2 INTEGER, -- N/2-bit - * exponent1 INTEGER, -- N/2-bit - * exponent2 INTEGER, -- N/2-bit - * coefficient INTEGER, -- N/2-bit - * } - * - * - 4 bytes of SEQUENCE overhead; - * - 3 bytes of version; - * - 7 half-size INTEGERs plus 2 full-size INTEGERs, - * overapproximated as 9 half-size INTEGERS; - * - 7 bytes for the public exponent. - */ -#define PSA_KEY_EXPORT_RSA_KEY_PAIR_MAX_SIZE(key_bits) \ - (9 * PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE((key_bits) / 2 + 1) + 14) - -/* Maximum size of the export encoding of a DSA public key. - * - * SubjectPublicKeyInfo ::= SEQUENCE { - * algorithm AlgorithmIdentifier, - * subjectPublicKey BIT STRING } -- contains DSAPublicKey - * AlgorithmIdentifier ::= SEQUENCE { - * algorithm OBJECT IDENTIFIER, - * parameters Dss-Parms } -- SEQUENCE of 3 INTEGERs - * DSAPublicKey ::= INTEGER -- public key, Y - * - * - 3 * 4 bytes of SEQUENCE overhead; - * - 1 + 1 + 7 bytes of algorithm (DSA OID); - * - 4 bytes of BIT STRING overhead; - * - 3 full-size INTEGERs (p, g, y); - * - 1 + 1 + 32 bytes for 1 sub-size INTEGER (q <= 256 bits). - */ -#define PSA_KEY_EXPORT_DSA_PUBLIC_KEY_MAX_SIZE(key_bits) \ - (PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE(key_bits) * 3 + 59) - -/* Maximum size of the export encoding of a DSA key pair. - * - * DSAPrivateKey ::= SEQUENCE { - * version Version, -- 0 - * prime INTEGER, -- p - * subprime INTEGER, -- q - * generator INTEGER, -- g - * public INTEGER, -- y - * private INTEGER, -- x - * } - * - * - 4 bytes of SEQUENCE overhead; - * - 3 bytes of version; - * - 3 full-size INTEGERs (p, g, y); - * - 2 * (1 + 1 + 32) bytes for 2 sub-size INTEGERs (q, x <= 256 bits). - */ -#define PSA_KEY_EXPORT_DSA_KEY_PAIR_MAX_SIZE(key_bits) \ - (PSA_KEY_EXPORT_ASN1_INTEGER_MAX_SIZE(key_bits) * 3 + 75) - -/* Maximum size of the export encoding of an ECC public key. - * - * The representation of an ECC public key is: - * - The byte 0x04; - * - `x_P` as a `ceiling(m/8)`-byte string, big-endian; - * - `y_P` as a `ceiling(m/8)`-byte string, big-endian; - * - where m is the bit size associated with the curve. - * - * - 1 byte + 2 * point size. - */ -#define PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_bits) \ - (2 * PSA_BITS_TO_BYTES(key_bits) + 1) - -/* Maximum size of the export encoding of an ECC key pair. - * - * An ECC key pair is represented by the secret value. - */ -#define PSA_KEY_EXPORT_ECC_KEY_PAIR_MAX_SIZE(key_bits) \ - (PSA_BITS_TO_BYTES(key_bits)) - -/** Sufficient output buffer size for psa_export_key() or - * psa_export_public_key(). - * - * This macro returns a compile-time constant if its arguments are - * compile-time constants. - * - * \warning This macro may evaluate its arguments multiple times or - * zero times, so you should not pass arguments that contain - * side effects. - * - * The following code illustrates how to allocate enough memory to export - * a key by querying the key type and size at runtime. - * \code{c} - * psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; - * psa_status_t status; - * status = psa_get_key_attributes(key, &attributes); - * if (status != PSA_SUCCESS) handle_error(...); - * psa_key_type_t key_type = psa_get_key_type(&attributes); - * size_t key_bits = psa_get_key_bits(&attributes); - * size_t buffer_size = PSA_EXPORT_KEY_OUTPUT_SIZE(key_type, key_bits); - * psa_reset_key_attributes(&attributes); - * uint8_t *buffer = malloc(buffer_size); - * if (buffer == NULL) handle_error(...); - * size_t buffer_length; - * status = psa_export_key(key, buffer, buffer_size, &buffer_length); - * if (status != PSA_SUCCESS) handle_error(...); - * \endcode - * - * \param key_type A supported key type. - * \param key_bits The size of the key in bits. - * - * \return If the parameters are valid and supported, return - * a buffer size in bytes that guarantees that - * psa_export_key() or psa_export_public_key() will not fail with - * #PSA_ERROR_BUFFER_TOO_SMALL. - * If the parameters are a valid combination that is not supported, - * return either a sensible size or 0. - * If the parameters are not valid, the return value is unspecified. - */ -#define PSA_EXPORT_KEY_OUTPUT_SIZE(key_type, key_bits) \ - (PSA_KEY_TYPE_IS_UNSTRUCTURED(key_type) ? PSA_BITS_TO_BYTES(key_bits) : \ - (key_type) == PSA_KEY_TYPE_RSA_KEY_PAIR ? PSA_KEY_EXPORT_RSA_KEY_PAIR_MAX_SIZE(key_bits) : \ - (key_type) == PSA_KEY_TYPE_RSA_PUBLIC_KEY ? PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE(key_bits) : \ - (key_type) == PSA_KEY_TYPE_DSA_KEY_PAIR ? PSA_KEY_EXPORT_DSA_KEY_PAIR_MAX_SIZE(key_bits) : \ - (key_type) == PSA_KEY_TYPE_DSA_PUBLIC_KEY ? PSA_KEY_EXPORT_DSA_PUBLIC_KEY_MAX_SIZE(key_bits) : \ - PSA_KEY_TYPE_IS_ECC_KEY_PAIR(key_type) ? PSA_KEY_EXPORT_ECC_KEY_PAIR_MAX_SIZE(key_bits) : \ - PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY(key_type) ? PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_bits) : \ - 0) - -/** Sufficient output buffer size for psa_export_public_key(). - * - * This macro returns a compile-time constant if its arguments are - * compile-time constants. - * - * \warning This macro may evaluate its arguments multiple times or - * zero times, so you should not pass arguments that contain - * side effects. - * - * The following code illustrates how to allocate enough memory to export - * a public key by querying the key type and size at runtime. - * \code{c} - * psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; - * psa_status_t status; - * status = psa_get_key_attributes(key, &attributes); - * if (status != PSA_SUCCESS) handle_error(...); - * psa_key_type_t key_type = psa_get_key_type(&attributes); - * size_t key_bits = psa_get_key_bits(&attributes); - * size_t buffer_size = PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(key_type, key_bits); - * psa_reset_key_attributes(&attributes); - * uint8_t *buffer = malloc(buffer_size); - * if (buffer == NULL) handle_error(...); - * size_t buffer_length; - * status = psa_export_public_key(key, buffer, buffer_size, &buffer_length); - * if (status != PSA_SUCCESS) handle_error(...); - * \endcode - * - * \param key_type A public key or key pair key type. - * \param key_bits The size of the key in bits. - * - * \return If the parameters are valid and supported, return - * a buffer size in bytes that guarantees that - * psa_export_public_key() will not fail with - * #PSA_ERROR_BUFFER_TOO_SMALL. - * If the parameters are a valid combination that is not - * supported, return either a sensible size or 0. - * If the parameters are not valid, - * the return value is unspecified. - * - * If the parameters are valid and supported, - * return the same result as - * #PSA_EXPORT_KEY_OUTPUT_SIZE( - * \p #PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR(\p key_type), - * \p key_bits). - */ -#define PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(key_type, key_bits) \ - (PSA_KEY_TYPE_IS_RSA(key_type) ? PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE(key_bits) : \ - PSA_KEY_TYPE_IS_ECC(key_type) ? PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(key_bits) : \ - 0) - -/** Sufficient buffer size for exporting any asymmetric key pair. - * - * This macro expands to a compile-time constant integer. This value is - * a sufficient buffer size when calling psa_export_key() to export any - * asymmetric key pair, regardless of the exact key type and key size. - * - * See also #PSA_EXPORT_KEY_OUTPUT_SIZE(\p key_type, \p key_bits). - */ -#define PSA_EXPORT_KEY_PAIR_MAX_SIZE \ - (PSA_KEY_EXPORT_RSA_KEY_PAIR_MAX_SIZE(PSA_VENDOR_RSA_MAX_KEY_BITS) > \ - PSA_KEY_EXPORT_ECC_KEY_PAIR_MAX_SIZE(PSA_VENDOR_ECC_MAX_CURVE_BITS) ? \ - PSA_KEY_EXPORT_RSA_KEY_PAIR_MAX_SIZE(PSA_VENDOR_RSA_MAX_KEY_BITS) : \ - PSA_KEY_EXPORT_ECC_KEY_PAIR_MAX_SIZE(PSA_VENDOR_ECC_MAX_CURVE_BITS)) - -/** Sufficient buffer size for exporting any asymmetric public key. - * - * This macro expands to a compile-time constant integer. This value is - * a sufficient buffer size when calling psa_export_key() or - * psa_export_public_key() to export any asymmetric public key, - * regardless of the exact key type and key size. - * - * See also #PSA_EXPORT_PUBLIC_KEY_OUTPUT_SIZE(\p key_type, \p key_bits). - */ -#define PSA_EXPORT_PUBLIC_KEY_MAX_SIZE \ - (PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE(PSA_VENDOR_RSA_MAX_KEY_BITS) > \ - PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_VENDOR_ECC_MAX_CURVE_BITS) ? \ - PSA_KEY_EXPORT_RSA_PUBLIC_KEY_MAX_SIZE(PSA_VENDOR_RSA_MAX_KEY_BITS) : \ - PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(PSA_VENDOR_ECC_MAX_CURVE_BITS)) - -/** Sufficient output buffer size for psa_raw_key_agreement(). - * - * This macro returns a compile-time constant if its arguments are - * compile-time constants. - * - * \warning This macro may evaluate its arguments multiple times or - * zero times, so you should not pass arguments that contain - * side effects. - * - * See also #PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE. - * - * \param key_type A supported key type. - * \param key_bits The size of the key in bits. - * - * \return If the parameters are valid and supported, return - * a buffer size in bytes that guarantees that - * psa_raw_key_agreement() will not fail with - * #PSA_ERROR_BUFFER_TOO_SMALL. - * If the parameters are a valid combination that - * is not supported, return either a sensible size or 0. - * If the parameters are not valid, - * the return value is unspecified. - */ -/* FFDH is not yet supported in PSA. */ -#define PSA_RAW_KEY_AGREEMENT_OUTPUT_SIZE(key_type, key_bits) \ - (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(key_type) ? \ - PSA_BITS_TO_BYTES(key_bits) : \ - 0) - -/** Maximum size of the output from psa_raw_key_agreement(). - * - * This macro expands to a compile-time constant integer. This value is the - * maximum size of the output any raw key agreement algorithm, in bytes. - * - * See also #PSA_RAW_KEY_AGREEMENT_OUTPUT_SIZE(\p key_type, \p key_bits). - */ -#define PSA_RAW_KEY_AGREEMENT_OUTPUT_MAX_SIZE \ - (PSA_BITS_TO_BYTES(PSA_VENDOR_ECC_MAX_CURVE_BITS)) - -/** The default IV size for a cipher algorithm, in bytes. - * - * The IV that is generated as part of a call to #psa_cipher_encrypt() is always - * the default IV length for the algorithm. - * - * This macro can be used to allocate a buffer of sufficient size to - * store the IV output from #psa_cipher_generate_iv() when using - * a multi-part cipher operation. - * - * See also #PSA_CIPHER_IV_MAX_SIZE. - * - * \warning This macro may evaluate its arguments multiple times or - * zero times, so you should not pass arguments that contain - * side effects. - * - * \param key_type A symmetric key type that is compatible with algorithm \p alg. - * - * \param alg A cipher algorithm (\c PSA_ALG_XXX value such that #PSA_ALG_IS_CIPHER(\p alg) is true). - * - * \return The default IV size for the specified key type and algorithm. - * If the algorithm does not use an IV, return 0. - * If the key type or cipher algorithm is not recognized, - * or the parameters are incompatible, return 0. - */ -#define PSA_CIPHER_IV_LENGTH(key_type, alg) \ - (PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) > 1 && \ - ((alg) == PSA_ALG_CTR || \ - (alg) == PSA_ALG_CFB || \ - (alg) == PSA_ALG_OFB || \ - (alg) == PSA_ALG_XTS || \ - (alg) == PSA_ALG_CBC_NO_PADDING || \ - (alg) == PSA_ALG_CBC_PKCS7) ? PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) : \ - (key_type) == PSA_KEY_TYPE_CHACHA20 && \ - (alg) == PSA_ALG_STREAM_CIPHER ? 12 : \ - 0) - -/** The maximum IV size for all supported cipher algorithms, in bytes. - * - * See also #PSA_CIPHER_IV_LENGTH(). - */ -#define PSA_CIPHER_IV_MAX_SIZE 16 - -/** The maximum size of the output of psa_cipher_encrypt(), in bytes. - * - * If the size of the output buffer is at least this large, it is guaranteed - * that psa_cipher_encrypt() will not fail due to an insufficient buffer size. - * Depending on the algorithm, the actual size of the output might be smaller. - * - * See also #PSA_CIPHER_ENCRYPT_OUTPUT_MAX_SIZE(\p input_length). - * - * \warning This macro may evaluate its arguments multiple times or - * zero times, so you should not pass arguments that contain - * side effects. - * - * \param key_type A symmetric key type that is compatible with algorithm - * alg. - * \param alg A cipher algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_CIPHER(\p alg) is true). - * \param input_length Size of the input in bytes. - * - * \return A sufficient output size for the specified key type and - * algorithm. If the key type or cipher algorithm is not - * recognized, or the parameters are incompatible, - * return 0. - */ -#define PSA_CIPHER_ENCRYPT_OUTPUT_SIZE(key_type, alg, input_length) \ - (alg == PSA_ALG_CBC_PKCS7 ? \ - PSA_ROUND_UP_TO_MULTIPLE(PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type), \ - (input_length) + 1) + \ - PSA_CIPHER_IV_LENGTH((key_type), (alg)) : \ - (PSA_ALG_IS_CIPHER(alg) ? \ - (input_length) + PSA_CIPHER_IV_LENGTH((key_type), (alg)) : \ - 0)) - -/** A sufficient output buffer size for psa_cipher_encrypt(), for any of the - * supported key types and cipher algorithms. - * - * If the size of the output buffer is at least this large, it is guaranteed - * that psa_cipher_encrypt() will not fail due to an insufficient buffer size. - * - * See also #PSA_CIPHER_ENCRYPT_OUTPUT_SIZE(\p key_type, \p alg, \p input_length). - * - * \param input_length Size of the input in bytes. - * - */ -#define PSA_CIPHER_ENCRYPT_OUTPUT_MAX_SIZE(input_length) \ - (PSA_ROUND_UP_TO_MULTIPLE(PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE, \ - (input_length) + 1) + \ - PSA_CIPHER_IV_MAX_SIZE) - -/** The maximum size of the output of psa_cipher_decrypt(), in bytes. - * - * If the size of the output buffer is at least this large, it is guaranteed - * that psa_cipher_decrypt() will not fail due to an insufficient buffer size. - * Depending on the algorithm, the actual size of the output might be smaller. - * - * See also #PSA_CIPHER_DECRYPT_OUTPUT_MAX_SIZE(\p input_length). - * - * \param key_type A symmetric key type that is compatible with algorithm - * alg. - * \param alg A cipher algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_CIPHER(\p alg) is true). - * \param input_length Size of the input in bytes. - * - * \return A sufficient output size for the specified key type and - * algorithm. If the key type or cipher algorithm is not - * recognized, or the parameters are incompatible, - * return 0. - */ -#define PSA_CIPHER_DECRYPT_OUTPUT_SIZE(key_type, alg, input_length) \ - (PSA_ALG_IS_CIPHER(alg) && \ - ((key_type) & PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_SYMMETRIC ? \ - (input_length) : \ - 0) - -/** A sufficient output buffer size for psa_cipher_decrypt(), for any of the - * supported key types and cipher algorithms. - * - * If the size of the output buffer is at least this large, it is guaranteed - * that psa_cipher_decrypt() will not fail due to an insufficient buffer size. - * - * See also #PSA_CIPHER_DECRYPT_OUTPUT_SIZE(\p key_type, \p alg, \p input_length). - * - * \param input_length Size of the input in bytes. - */ -#define PSA_CIPHER_DECRYPT_OUTPUT_MAX_SIZE(input_length) \ - (input_length) - -/** A sufficient output buffer size for psa_cipher_update(). - * - * If the size of the output buffer is at least this large, it is guaranteed - * that psa_cipher_update() will not fail due to an insufficient buffer size. - * The actual size of the output might be smaller in any given call. - * - * See also #PSA_CIPHER_UPDATE_OUTPUT_MAX_SIZE(\p input_length). - * - * \param key_type A symmetric key type that is compatible with algorithm - * alg. - * \param alg A cipher algorithm (PSA_ALG_XXX value such that - * #PSA_ALG_IS_CIPHER(\p alg) is true). - * \param input_length Size of the input in bytes. - * - * \return A sufficient output size for the specified key type and - * algorithm. If the key type or cipher algorithm is not - * recognized, or the parameters are incompatible, return 0. - */ -#define PSA_CIPHER_UPDATE_OUTPUT_SIZE(key_type, alg, input_length) \ - (PSA_ALG_IS_CIPHER(alg) ? \ - (((alg) == PSA_ALG_CBC_PKCS7 || \ - (alg) == PSA_ALG_CBC_NO_PADDING || \ - (alg) == PSA_ALG_ECB_NO_PADDING) ? \ - PSA_ROUND_UP_TO_MULTIPLE(PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type), \ - input_length) : \ - (input_length)) : \ - 0) - -/** A sufficient output buffer size for psa_cipher_update(), for any of the - * supported key types and cipher algorithms. - * - * If the size of the output buffer is at least this large, it is guaranteed - * that psa_cipher_update() will not fail due to an insufficient buffer size. - * - * See also #PSA_CIPHER_UPDATE_OUTPUT_SIZE(\p key_type, \p alg, \p input_length). - * - * \param input_length Size of the input in bytes. - */ -#define PSA_CIPHER_UPDATE_OUTPUT_MAX_SIZE(input_length) \ - (PSA_ROUND_UP_TO_MULTIPLE(PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE, input_length)) - -/** A sufficient ciphertext buffer size for psa_cipher_finish(). - * - * If the size of the ciphertext buffer is at least this large, it is - * guaranteed that psa_cipher_finish() will not fail due to an insufficient - * ciphertext buffer size. The actual size of the output might be smaller in - * any given call. - * - * See also #PSA_CIPHER_FINISH_OUTPUT_MAX_SIZE(). - * - * \param key_type A symmetric key type that is compatible with algorithm - * alg. - * \param alg A cipher algorithm (PSA_ALG_XXX value such that - * #PSA_ALG_IS_CIPHER(\p alg) is true). - * \return A sufficient output size for the specified key type and - * algorithm. If the key type or cipher algorithm is not - * recognized, or the parameters are incompatible, return 0. - */ -#define PSA_CIPHER_FINISH_OUTPUT_SIZE(key_type, alg) \ - (PSA_ALG_IS_CIPHER(alg) ? \ - (alg == PSA_ALG_CBC_PKCS7 ? \ - PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type) : \ - 0) : \ - 0) - -/** A sufficient ciphertext buffer size for psa_cipher_finish(), for any of the - * supported key types and cipher algorithms. - * - * See also #PSA_CIPHER_FINISH_OUTPUT_SIZE(\p key_type, \p alg). - */ -#define PSA_CIPHER_FINISH_OUTPUT_MAX_SIZE \ - (PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE) - -#endif /* PSA_CRYPTO_SIZES_H */ diff --git a/third_party/mbedtls/crypto_struct.h b/third_party/mbedtls/crypto_struct.h deleted file mode 100644 index 00d86a1b7..000000000 --- a/third_party/mbedtls/crypto_struct.h +++ /dev/null @@ -1,467 +0,0 @@ -/** - * \file psa/crypto_struct.h - * - * \brief PSA cryptography module: Mbed TLS structured type implementations - * - * \note This file may not be included directly. Applications must - * include psa/crypto.h. - * - * This file contains the definitions of some data structures with - * implementation-specific definitions. - * - * In implementations with isolation between the application and the - * cryptography module, it is expected that the front-end and the back-end - * would have different versions of this file. - * - *

Design notes about multipart operation structures

- * - * Each multipart operation structure contains a `psa_algorithm_t alg` - * field which indicates which specific algorithm the structure is for. - * When the structure is not in use, `alg` is 0. Most of the structure - * consists of a union which is discriminated by `alg`. - * - * Note that when `alg` is 0, the content of other fields is undefined. - * In particular, it is not guaranteed that a freshly-initialized structure - * is all-zero: we initialize structures to something like `{0, 0}`, which - * is only guaranteed to initializes the first member of the union; - * GCC and Clang initialize the whole structure to 0 (at the time of writing), - * but MSVC and CompCert don't. - * - * In Mbed Crypto, multipart operation structures live independently from - * the key. This allows Mbed Crypto to free the key objects when destroying - * a key slot. If a multipart operation needs to remember the key after - * the setup function returns, the operation structure needs to contain a - * copy of the key. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef PSA_CRYPTO_STRUCT_H -#define PSA_CRYPTO_STRUCT_H -#include "third_party/mbedtls/cipher.h" -#include "third_party/mbedtls/cmac.h" -#include "third_party/mbedtls/config.h" -#include "third_party/mbedtls/gcm.h" -#include "third_party/mbedtls/md.h" -#include "third_party/mbedtls/md2.h" -#include "third_party/mbedtls/md4.h" -#include "third_party/mbedtls/md5.h" -#include "third_party/mbedtls/ripemd160.h" -#include "third_party/mbedtls/sha1.h" -#include "third_party/mbedtls/sha256.h" -#include "third_party/mbedtls/sha512.h" -#include "third_party/mbedtls/crypto_sizes.h" -#include "third_party/mbedtls/crypto_types.h" -#include "third_party/mbedtls/crypto_values.h" -/* clang-format off */ -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - /** Unique ID indicating which driver got assigned to do the - * operation. Since driver contexts are driver-specific, swapping - * drivers halfway through the operation is not supported. - * ID values are auto-generated in psa_driver_wrappers.h */ - unsigned int id; - /** Context structure for the assigned driver, when id is not zero. */ - void* ctx; -} psa_operation_driver_context_t; - -struct psa_hash_operation_s -{ - psa_algorithm_t alg; - union - { - unsigned dummy; /* Make the union non-empty even with no supported algorithms. */ -#if defined(MBEDTLS_MD2_C) - mbedtls_md2_context md2; -#endif -#if defined(MBEDTLS_MD4_C) - mbedtls_md4_context md4; -#endif -#if defined(MBEDTLS_MD5_C) - mbedtls_md5_context md5; -#endif -#if defined(MBEDTLS_RIPEMD160_C) - mbedtls_ripemd160_context ripemd160; -#endif -#if defined(MBEDTLS_SHA1_C) - mbedtls_sha1_context sha1; -#endif -#if defined(MBEDTLS_SHA256_C) - mbedtls_sha256_context sha256; -#endif -#if defined(MBEDTLS_SHA512_C) - mbedtls_sha512_context sha512; -#endif - } ctx; -}; - -#define PSA_HASH_OPERATION_INIT {0, {0}} -static inline struct psa_hash_operation_s psa_hash_operation_init( void ) -{ - const struct psa_hash_operation_s v = PSA_HASH_OPERATION_INIT; - return( v ); -} - -#if defined(MBEDTLS_MD_C) -typedef struct -{ - /** The hash context. */ - struct psa_hash_operation_s hash_ctx; - /** The HMAC part of the context. */ - uint8_t opad[PSA_HMAC_MAX_HASH_BLOCK_SIZE]; -} psa_hmac_internal_data; -#endif /* MBEDTLS_MD_C */ - -struct psa_mac_operation_s -{ - psa_algorithm_t alg; - unsigned int key_set : 1; - unsigned int iv_required : 1; - unsigned int iv_set : 1; - unsigned int has_input : 1; - unsigned int is_sign : 1; - uint8_t mac_size; - union - { - unsigned dummy; /* Make the union non-empty even with no supported algorithms. */ -#if defined(MBEDTLS_MD_C) - psa_hmac_internal_data hmac; -#endif -#if defined(MBEDTLS_CMAC_C) - mbedtls_cipher_context_t cmac; -#endif - } ctx; -}; - -#define PSA_MAC_OPERATION_INIT {0, 0, 0, 0, 0, 0, 0, {0}} -static inline struct psa_mac_operation_s psa_mac_operation_init( void ) -{ - const struct psa_mac_operation_s v = PSA_MAC_OPERATION_INIT; - return( v ); -} - -struct psa_cipher_operation_s -{ - psa_algorithm_t alg; - unsigned int key_set : 1; - unsigned int iv_required : 1; - unsigned int iv_set : 1; - unsigned int mbedtls_in_use : 1; /* Indicates mbed TLS is handling the operation. */ - uint8_t iv_size; - uint8_t block_size; - union - { - unsigned dummy; /* Enable easier initializing of the union. */ - mbedtls_cipher_context_t cipher; - psa_operation_driver_context_t driver; - } ctx; -}; - -#define PSA_CIPHER_OPERATION_INIT {0, 0, 0, 0, 0, 0, 0, {0}} -static inline struct psa_cipher_operation_s psa_cipher_operation_init( void ) -{ - const struct psa_cipher_operation_s v = PSA_CIPHER_OPERATION_INIT; - return( v ); -} - -struct psa_aead_operation_s -{ - psa_algorithm_t alg; - unsigned int key_set : 1; - unsigned int iv_set : 1; - uint8_t iv_size; - uint8_t block_size; - union - { - unsigned dummy; /* Enable easier initializing of the union. */ - mbedtls_cipher_context_t cipher; - } ctx; -}; - -#define PSA_AEAD_OPERATION_INIT {0, 0, 0, 0, 0, {0}} -static inline struct psa_aead_operation_s psa_aead_operation_init( void ) -{ - const struct psa_aead_operation_s v = PSA_AEAD_OPERATION_INIT; - return( v ); -} - -#if defined(MBEDTLS_MD_C) -typedef struct -{ - uint8_t *info; - size_t info_length; - psa_hmac_internal_data hmac; - uint8_t prk[PSA_HASH_MAX_SIZE]; - uint8_t output_block[PSA_HASH_MAX_SIZE]; -#if PSA_HASH_MAX_SIZE > 0xff -#error "PSA_HASH_MAX_SIZE does not fit in uint8_t" -#endif - uint8_t offset_in_block; - uint8_t block_number; - unsigned int state : 2; - unsigned int info_set : 1; -} psa_hkdf_key_derivation_t; -#endif /* MBEDTLS_MD_C */ - -#if defined(MBEDTLS_MD_C) -typedef enum -{ - PSA_TLS12_PRF_STATE_INIT, /* no input provided */ - PSA_TLS12_PRF_STATE_SEED_SET, /* seed has been set */ - PSA_TLS12_PRF_STATE_KEY_SET, /* key has been set */ - PSA_TLS12_PRF_STATE_LABEL_SET, /* label has been set */ - PSA_TLS12_PRF_STATE_OUTPUT /* output has been started */ -} psa_tls12_prf_key_derivation_state_t; - -typedef struct psa_tls12_prf_key_derivation_s -{ -#if PSA_HASH_MAX_SIZE > 0xff -#error "PSA_HASH_MAX_SIZE does not fit in uint8_t" -#endif - - /* Indicates how many bytes in the current HMAC block have - * not yet been read by the user. */ - uint8_t left_in_block; - - /* The 1-based number of the block. */ - uint8_t block_number; - - psa_tls12_prf_key_derivation_state_t state; - - uint8_t *seed; - size_t seed_length; - uint8_t *label; - size_t label_length; - psa_hmac_internal_data hmac; - uint8_t Ai[PSA_HASH_MAX_SIZE]; - - /* `HMAC_hash( prk, A(i) + seed )` in the notation of RFC 5246, Sect. 5. */ - uint8_t output_block[PSA_HASH_MAX_SIZE]; -} psa_tls12_prf_key_derivation_t; -#endif /* MBEDTLS_MD_C */ - -struct psa_key_derivation_s -{ - psa_algorithm_t alg; - unsigned int can_output_key : 1; - size_t capacity; - union - { - /* Make the union non-empty even with no supported algorithms. */ - uint8_t dummy; -#if defined(MBEDTLS_MD_C) - psa_hkdf_key_derivation_t hkdf; - psa_tls12_prf_key_derivation_t tls12_prf; -#endif - } ctx; -}; - -/* This only zeroes out the first byte in the union, the rest is unspecified. */ -#define PSA_KEY_DERIVATION_OPERATION_INIT {0, 0, 0, {0}} -static inline struct psa_key_derivation_s psa_key_derivation_operation_init( void ) -{ - const struct psa_key_derivation_s v = PSA_KEY_DERIVATION_OPERATION_INIT; - return( v ); -} - -struct psa_key_policy_s -{ - psa_key_usage_t usage; - psa_algorithm_t alg; - psa_algorithm_t alg2; -}; -typedef struct psa_key_policy_s psa_key_policy_t; - -#define PSA_KEY_POLICY_INIT {0, 0, 0} -static inline struct psa_key_policy_s psa_key_policy_init( void ) -{ - const struct psa_key_policy_s v = PSA_KEY_POLICY_INIT; - return( v ); -} - -/* The type used internally for key sizes. - * Public interfaces use size_t, but internally we use a smaller type. */ -typedef uint16_t psa_key_bits_t; -/* The maximum value of the type used to represent bit-sizes. - * This is used to mark an invalid key size. */ -#define PSA_KEY_BITS_TOO_LARGE ( (psa_key_bits_t) ( -1 ) ) -/* The maximum size of a key in bits. - * Currently defined as the maximum that can be represented, rounded down - * to a whole number of bytes. - * This is an uncast value so that it can be used in preprocessor - * conditionals. */ -#define PSA_MAX_KEY_BITS 0xfff8 - -/** A mask of flags that can be stored in key attributes. - * - * This type is also used internally to store flags in slots. Internal - * flags are defined in library/psa_crypto_core.h. Internal flags may have - * the same value as external flags if they are properly handled during - * key creation and in psa_get_key_attributes. - */ -typedef uint16_t psa_key_attributes_flag_t; - -#define MBEDTLS_PSA_KA_FLAG_HAS_SLOT_NUMBER \ - ( (psa_key_attributes_flag_t) 0x0001 ) - -/* A mask of key attribute flags used externally only. - * Only meant for internal checks inside the library. */ -#define MBEDTLS_PSA_KA_MASK_EXTERNAL_ONLY ( \ - MBEDTLS_PSA_KA_FLAG_HAS_SLOT_NUMBER | \ - 0 ) - -/* A mask of key attribute flags used both internally and externally. - * Currently there aren't any. */ -#define MBEDTLS_PSA_KA_MASK_DUAL_USE ( \ - 0 ) - -typedef struct -{ - psa_key_type_t type; - psa_key_bits_t bits; - psa_key_lifetime_t lifetime; - mbedtls_svc_key_id_t id; - psa_key_policy_t policy; - psa_key_attributes_flag_t flags; -} psa_core_key_attributes_t; - -#define PSA_CORE_KEY_ATTRIBUTES_INIT {PSA_KEY_TYPE_NONE, 0, PSA_KEY_LIFETIME_VOLATILE, MBEDTLS_SVC_KEY_ID_INIT, PSA_KEY_POLICY_INIT, 0} - -struct psa_key_attributes_s -{ - psa_core_key_attributes_t core; -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - psa_key_slot_number_t slot_number; -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - void *domain_parameters; - size_t domain_parameters_size; -}; - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) -#define PSA_KEY_ATTRIBUTES_INIT {PSA_CORE_KEY_ATTRIBUTES_INIT, 0, NULL, 0} -#else -#define PSA_KEY_ATTRIBUTES_INIT {PSA_CORE_KEY_ATTRIBUTES_INIT, NULL, 0} -#endif - -static inline struct psa_key_attributes_s psa_key_attributes_init( void ) -{ - const struct psa_key_attributes_s v = PSA_KEY_ATTRIBUTES_INIT; - return( v ); -} - -static inline void psa_set_key_id( psa_key_attributes_t *attributes, - mbedtls_svc_key_id_t key ) -{ - psa_key_lifetime_t lifetime = attributes->core.lifetime; - - attributes->core.id = key; - - if( PSA_KEY_LIFETIME_IS_VOLATILE( lifetime ) ) - { - attributes->core.lifetime = - PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION( - PSA_KEY_LIFETIME_PERSISTENT, - PSA_KEY_LIFETIME_GET_LOCATION( lifetime ) ); - } -} - -static inline mbedtls_svc_key_id_t psa_get_key_id( - const psa_key_attributes_t *attributes) -{ - return( attributes->core.id ); -} - -#ifdef MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER -static inline void mbedtls_set_key_owner_id( psa_key_attributes_t *attributes, - mbedtls_key_owner_id_t owner ) -{ - attributes->core.id.owner = owner; -} -#endif - -static inline void psa_set_key_lifetime(psa_key_attributes_t *attributes, - psa_key_lifetime_t lifetime) -{ - attributes->core.lifetime = lifetime; - if( PSA_KEY_LIFETIME_IS_VOLATILE( lifetime ) ) - { -#ifdef MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER - attributes->core.id.key_id = 0; -#else - attributes->core.id = 0; -#endif - } -} - -static inline psa_key_lifetime_t psa_get_key_lifetime( - const psa_key_attributes_t *attributes) -{ - return( attributes->core.lifetime ); -} - -static inline void psa_set_key_usage_flags(psa_key_attributes_t *attributes, - psa_key_usage_t usage_flags) -{ - attributes->core.policy.usage = usage_flags; -} - -static inline psa_key_usage_t psa_get_key_usage_flags( - const psa_key_attributes_t *attributes) -{ - return( attributes->core.policy.usage ); -} - -static inline void psa_set_key_algorithm(psa_key_attributes_t *attributes, - psa_algorithm_t alg) -{ - attributes->core.policy.alg = alg; -} - -static inline psa_algorithm_t psa_get_key_algorithm( - const psa_key_attributes_t *attributes) -{ - return( attributes->core.policy.alg ); -} - -static inline psa_key_type_t psa_get_key_type( - const psa_key_attributes_t *attributes) -{ - return( attributes->core.type ); -} - -static inline void psa_set_key_bits(psa_key_attributes_t *attributes, - size_t bits) -{ - if( bits > PSA_MAX_KEY_BITS ) - attributes->core.bits = PSA_KEY_BITS_TOO_LARGE; - else - attributes->core.bits = (psa_key_bits_t) bits; -} - -static inline size_t psa_get_key_bits( - const psa_key_attributes_t *attributes) -{ - return( attributes->core.bits ); -} - -#ifdef __cplusplus -} -#endif - -#endif /* PSA_CRYPTO_STRUCT_H */ diff --git a/third_party/mbedtls/crypto_types.h b/third_party/mbedtls/crypto_types.h deleted file mode 100644 index 003bd50bc..000000000 --- a/third_party/mbedtls/crypto_types.h +++ /dev/null @@ -1,380 +0,0 @@ -/* clang-format off */ -/** - * \file psa/crypto_types.h - * - * \brief PSA cryptography module: type aliases. - * - * \note This file may not be included directly. Applications must - * include psa/crypto.h. Drivers must include the appropriate driver - * header file. - * - * This file contains portable definitions of integral types for properties - * of cryptographic keys, designations of cryptographic algorithms, and - * error codes returned by the library. - * - * This header file does not declare any function. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef PSA_CRYPTO_TYPES_H -#define PSA_CRYPTO_TYPES_H -#include "third_party/mbedtls/crypto_platform.h" - -/* If MBEDTLS_PSA_CRYPTO_C is defined, make sure MBEDTLS_PSA_CRYPTO_CLIENT - * is defined as well to include all PSA code. - */ -#if defined(MBEDTLS_PSA_CRYPTO_C) -#define MBEDTLS_PSA_CRYPTO_CLIENT -#endif /* MBEDTLS_PSA_CRYPTO_C */ - -/** \defgroup error Error codes - * @{ - */ - -/** - * \brief Function return status. - * - * This is either #PSA_SUCCESS (which is zero), indicating success, - * or a small negative value indicating that an error occurred. Errors are - * encoded as one of the \c PSA_ERROR_xxx values defined here. */ -/* If #PSA_SUCCESS is already defined, it means that #psa_status_t - * is also defined in an external header, so prevent its multiple - * definition. - */ -#ifndef PSA_SUCCESS -typedef int32_t psa_status_t; -#endif - -/**@}*/ - -/** \defgroup crypto_types Key and algorithm types - * @{ - */ - -/** \brief Encoding of a key type. - */ -typedef uint16_t psa_key_type_t; - -/** The type of PSA elliptic curve family identifiers. - * - * The curve identifier is required to create an ECC key using the - * PSA_KEY_TYPE_ECC_KEY_PAIR() or PSA_KEY_TYPE_ECC_PUBLIC_KEY() - * macros. - * - * Values defined by this standard will never be in the range 0x80-0xff. - * Vendors who define additional families must use an encoding in this range. - */ -typedef uint8_t psa_ecc_family_t; - -/** The type of PSA Diffie-Hellman group family identifiers. - * - * The group identifier is required to create an Diffie-Hellman key using the - * PSA_KEY_TYPE_DH_KEY_PAIR() or PSA_KEY_TYPE_DH_PUBLIC_KEY() - * macros. - * - * Values defined by this standard will never be in the range 0x80-0xff. - * Vendors who define additional families must use an encoding in this range. - */ -typedef uint8_t psa_dh_family_t; - -/** \brief Encoding of a cryptographic algorithm. - * - * For algorithms that can be applied to multiple key types, this type - * does not encode the key type. For example, for symmetric ciphers - * based on a block cipher, #psa_algorithm_t encodes the block cipher - * mode and the padding mode while the block cipher itself is encoded - * via #psa_key_type_t. - */ -typedef uint32_t psa_algorithm_t; - -/**@}*/ - -/** \defgroup key_lifetimes Key lifetimes - * @{ - */ - -/** Encoding of key lifetimes. - * - * The lifetime of a key indicates where it is stored and what system actions - * may create and destroy it. - * - * Lifetime values have the following structure: - * - Bits 0-7 (#PSA_KEY_LIFETIME_GET_PERSISTENCE(\c lifetime)): - * persistence level. This value indicates what device management - * actions can cause it to be destroyed. In particular, it indicates - * whether the key is _volatile_ or _persistent_. - * See ::psa_key_persistence_t for more information. - * - Bits 8-31 (#PSA_KEY_LIFETIME_GET_LOCATION(\c lifetime)): - * location indicator. This value indicates which part of the system - * has access to the key material and can perform operations using the key. - * See ::psa_key_location_t for more information. - * - * Volatile keys are automatically destroyed when the application instance - * terminates or on a power reset of the device. Persistent keys are - * preserved until the application explicitly destroys them or until an - * integration-specific device management event occurs (for example, - * a factory reset). - * - * Persistent keys have a key identifier of type #mbedtls_svc_key_id_t. - * This identifier remains valid throughout the lifetime of the key, - * even if the application instance that created the key terminates. - * The application can call psa_open_key() to open a persistent key that - * it created previously. - * - * The default lifetime of a key is #PSA_KEY_LIFETIME_VOLATILE. The lifetime - * #PSA_KEY_LIFETIME_PERSISTENT is supported if persistent storage is - * available. Other lifetime values may be supported depending on the - * library configuration. - */ -typedef uint32_t psa_key_lifetime_t; - -/** Encoding of key persistence levels. - * - * What distinguishes different persistence levels is what device management - * events may cause keys to be destroyed. _Volatile_ keys are destroyed - * by a power reset. Persistent keys may be destroyed by events such as - * a transfer of ownership or a factory reset. What management events - * actually affect persistent keys at different levels is outside the - * scope of the PSA Cryptography specification. - * - * The PSA Cryptography specification defines the following values of - * persistence levels: - * - \c 0 = #PSA_KEY_PERSISTENCE_VOLATILE: volatile key. - * A volatile key is automatically destroyed by the implementation when - * the application instance terminates. In particular, a volatile key - * is automatically destroyed on a power reset of the device. - * - \c 1 = #PSA_KEY_PERSISTENCE_DEFAULT: - * persistent key with a default lifetime. - * - \c 2-254: currently not supported by Mbed TLS. - * - \c 255 = #PSA_KEY_PERSISTENCE_READ_ONLY: - * read-only or write-once key. - * A key with this persistence level cannot be destroyed. - * Mbed TLS does not currently offer a way to create such keys, but - * integrations of Mbed TLS can use it for built-in keys that the - * application cannot modify (for example, a hardware unique key (HUK)). - * - * \note Key persistence levels are 8-bit values. Key management - * interfaces operate on lifetimes (type ::psa_key_lifetime_t) which - * encode the persistence as the lower 8 bits of a 32-bit value. - */ -typedef uint8_t psa_key_persistence_t; - -/** Encoding of key location indicators. - * - * If an integration of Mbed TLS can make calls to external - * cryptoprocessors such as secure elements, the location of a key - * indicates which secure element performs the operations on the key. - * Depending on the design of the secure element, the key - * material may be stored either in the secure element, or - * in wrapped (encrypted) form alongside the key metadata in the - * primary local storage. - * - * The PSA Cryptography API specification defines the following values of - * location indicators: - * - \c 0: primary local storage. - * This location is always available. - * The primary local storage is typically the same storage area that - * contains the key metadata. - * - \c 1: primary secure element. - * Integrations of Mbed TLS should support this value if there is a secure - * element attached to the operating environment. - * As a guideline, secure elements may provide higher resistance against - * side channel and physical attacks than the primary local storage, but may - * have restrictions on supported key types, sizes, policies and operations - * and may have different performance characteristics. - * - \c 2-0x7fffff: other locations defined by a PSA specification. - * The PSA Cryptography API does not currently assign any meaning to these - * locations, but future versions of that specification or other PSA - * specifications may do so. - * - \c 0x800000-0xffffff: vendor-defined locations. - * No PSA specification will assign a meaning to locations in this range. - * - * \note Key location indicators are 24-bit values. Key management - * interfaces operate on lifetimes (type ::psa_key_lifetime_t) which - * encode the location as the upper 24 bits of a 32-bit value. - */ -typedef uint32_t psa_key_location_t; - -/** Encoding of identifiers of persistent keys. - * - * - Applications may freely choose key identifiers in the range - * #PSA_KEY_ID_USER_MIN to #PSA_KEY_ID_USER_MAX. - * - The implementation may define additional key identifiers in the range - * #PSA_KEY_ID_VENDOR_MIN to #PSA_KEY_ID_VENDOR_MAX. - * - 0 is reserved as an invalid key identifier. - * - Key identifiers outside these ranges are reserved for future use. - */ -typedef uint32_t psa_key_id_t; - -#if !defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER) -typedef psa_key_id_t mbedtls_svc_key_id_t; - -#else /* MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER */ -/* Implementation-specific: The Mbed Cryptography library can be built as - * part of a multi-client service that exposes the PSA Cryptograpy API in each - * client and encodes the client identity in the key identifier argument of - * functions such as psa_open_key(). - */ -typedef struct -{ - psa_key_id_t key_id; - mbedtls_key_owner_id_t owner; -} mbedtls_svc_key_id_t; - -#endif /* !MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER */ - -/**@}*/ - -/** \defgroup policy Key policies - * @{ - */ - -/** \brief Encoding of permitted usage on a key. */ -typedef uint32_t psa_key_usage_t; - -/**@}*/ - -/** \defgroup attributes Key attributes - * @{ - */ - -/** The type of a structure containing key attributes. - * - * This is an opaque structure that can represent the metadata of a key - * object. Metadata that can be stored in attributes includes: - * - The location of the key in storage, indicated by its key identifier - * and its lifetime. - * - The key's policy, comprising usage flags and a specification of - * the permitted algorithm(s). - * - Information about the key itself: the key type and its size. - * - Additional implementation-defined attributes. - * - * The actual key material is not considered an attribute of a key. - * Key attributes do not contain information that is generally considered - * highly confidential. - * - * An attribute structure works like a simple data structure where each function - * `psa_set_key_xxx` sets a field and the corresponding function - * `psa_get_key_xxx` retrieves the value of the corresponding field. - * However, a future version of the library may report values that are - * equivalent to the original one, but have a different encoding. Invalid - * values may be mapped to different, also invalid values. - * - * An attribute structure may contain references to auxiliary resources, - * for example pointers to allocated memory or indirect references to - * pre-calculated values. In order to free such resources, the application - * must call psa_reset_key_attributes(). As an exception, calling - * psa_reset_key_attributes() on an attribute structure is optional if - * the structure has only been modified by the following functions - * since it was initialized or last reset with psa_reset_key_attributes(): - * - psa_set_key_id() - * - psa_set_key_lifetime() - * - psa_set_key_type() - * - psa_set_key_bits() - * - psa_set_key_usage_flags() - * - psa_set_key_algorithm() - * - * Before calling any function on a key attribute structure, the application - * must initialize it by any of the following means: - * - Set the structure to all-bits-zero, for example: - * \code - * psa_key_attributes_t attributes; - * memset(&attributes, 0, sizeof(attributes)); - * \endcode - * - Initialize the structure to logical zero values, for example: - * \code - * psa_key_attributes_t attributes = {0}; - * \endcode - * - Initialize the structure to the initializer #PSA_KEY_ATTRIBUTES_INIT, - * for example: - * \code - * psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; - * \endcode - * - Assign the result of the function psa_key_attributes_init() - * to the structure, for example: - * \code - * psa_key_attributes_t attributes; - * attributes = psa_key_attributes_init(); - * \endcode - * - * A freshly initialized attribute structure contains the following - * values: - * - * - lifetime: #PSA_KEY_LIFETIME_VOLATILE. - * - key identifier: 0 (which is not a valid key identifier). - * - type: \c 0 (meaning that the type is unspecified). - * - key size: \c 0 (meaning that the size is unspecified). - * - usage flags: \c 0 (which allows no usage except exporting a public key). - * - algorithm: \c 0 (which allows no cryptographic usage, but allows - * exporting). - * - * A typical sequence to create a key is as follows: - * -# Create and initialize an attribute structure. - * -# If the key is persistent, call psa_set_key_id(). - * Also call psa_set_key_lifetime() to place the key in a non-default - * location. - * -# Set the key policy with psa_set_key_usage_flags() and - * psa_set_key_algorithm(). - * -# Set the key type with psa_set_key_type(). - * Skip this step if copying an existing key with psa_copy_key(). - * -# When generating a random key with psa_generate_key() or deriving a key - * with psa_key_derivation_output_key(), set the desired key size with - * psa_set_key_bits(). - * -# Call a key creation function: psa_import_key(), psa_generate_key(), - * psa_key_derivation_output_key() or psa_copy_key(). This function reads - * the attribute structure, creates a key with these attributes, and - * outputs a key identifier to the newly created key. - * -# The attribute structure is now no longer necessary. - * You may call psa_reset_key_attributes(), although this is optional - * with the workflow presented here because the attributes currently - * defined in this specification do not require any additional resources - * beyond the structure itself. - * - * A typical sequence to query a key's attributes is as follows: - * -# Call psa_get_key_attributes(). - * -# Call `psa_get_key_xxx` functions to retrieve the attribute(s) that - * you are interested in. - * -# Call psa_reset_key_attributes() to free any resources that may be - * used by the attribute structure. - * - * Once a key has been created, it is impossible to change its attributes. - */ -typedef struct psa_key_attributes_s psa_key_attributes_t; - - -#ifndef __DOXYGEN_ONLY__ -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) -/* Mbed Crypto defines this type in crypto_types.h because it is also - * visible to applications through an implementation-specific extension. - * For the PSA Cryptography specification, this type is only visible - * via crypto_se_driver.h. */ -typedef uint64_t psa_key_slot_number_t; -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ -#endif /* !__DOXYGEN_ONLY__ */ - -/**@}*/ - -/** \defgroup derivation Key derivation - * @{ - */ - -/** \brief Encoding of the step of a key derivation. */ -typedef uint16_t psa_key_derivation_step_t; - -/**@}*/ - -#endif /* PSA_CRYPTO_TYPES_H */ diff --git a/third_party/mbedtls/crypto_values.h b/third_party/mbedtls/crypto_values.h deleted file mode 100644 index 094d449e6..000000000 --- a/third_party/mbedtls/crypto_values.h +++ /dev/null @@ -1,2016 +0,0 @@ -/* clang-format off */ -/** - * \file psa/crypto_values.h - * - * \brief PSA cryptography module: macros to build and analyze integer values. - * - * \note This file may not be included directly. Applications must - * include psa/crypto.h. Drivers must include the appropriate driver - * header file. - * - * This file contains portable definitions of macros to build and analyze - * values of integral types that encode properties of cryptographic keys, - * designations of cryptographic algorithms, and error codes returned by - * the library. - * - * This header file only defines preprocessor macros. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef PSA_CRYPTO_VALUES_H -#define PSA_CRYPTO_VALUES_H -#include "third_party/mbedtls/crypto_types.h" - -/** \defgroup error Error codes - * @{ - */ - -/* PSA error codes */ - -/** The action was completed successfully. */ -#define PSA_SUCCESS ((psa_status_t)0) - -/** An error occurred that does not correspond to any defined - * failure cause. - * - * Implementations may use this error code if none of the other standard - * error codes are applicable. */ -#define PSA_ERROR_GENERIC_ERROR ((psa_status_t)-132) - -/** The requested operation or a parameter is not supported - * by this implementation. - * - * Implementations should return this error code when an enumeration - * parameter such as a key type, algorithm, etc. is not recognized. - * If a combination of parameters is recognized and identified as - * not valid, return #PSA_ERROR_INVALID_ARGUMENT instead. */ -#define PSA_ERROR_NOT_SUPPORTED ((psa_status_t)-134) - -/** The requested action is denied by a policy. - * - * Implementations should return this error code when the parameters - * are recognized as valid and supported, and a policy explicitly - * denies the requested operation. - * - * If a subset of the parameters of a function call identify a - * forbidden operation, and another subset of the parameters are - * not valid or not supported, it is unspecified whether the function - * returns #PSA_ERROR_NOT_PERMITTED, #PSA_ERROR_NOT_SUPPORTED or - * #PSA_ERROR_INVALID_ARGUMENT. */ -#define PSA_ERROR_NOT_PERMITTED ((psa_status_t)-133) - -/** An output buffer is too small. - * - * Applications can call the \c PSA_xxx_SIZE macro listed in the function - * description to determine a sufficient buffer size. - * - * Implementations should preferably return this error code only - * in cases when performing the operation with a larger output - * buffer would succeed. However implementations may return this - * error if a function has invalid or unsupported parameters in addition - * to the parameters that determine the necessary output buffer size. */ -#define PSA_ERROR_BUFFER_TOO_SMALL ((psa_status_t)-138) - -/** Asking for an item that already exists - * - * Implementations should return this error, when attempting - * to write an item (like a key) that already exists. */ -#define PSA_ERROR_ALREADY_EXISTS ((psa_status_t)-139) - -/** Asking for an item that doesn't exist - * - * Implementations should return this error, if a requested item (like - * a key) does not exist. */ -#define PSA_ERROR_DOES_NOT_EXIST ((psa_status_t)-140) - -/** The requested action cannot be performed in the current state. - * - * Multipart operations return this error when one of the - * functions is called out of sequence. Refer to the function - * descriptions for permitted sequencing of functions. - * - * Implementations shall not return this error code to indicate - * that a key either exists or not, - * but shall instead return #PSA_ERROR_ALREADY_EXISTS or #PSA_ERROR_DOES_NOT_EXIST - * as applicable. - * - * Implementations shall not return this error code to indicate that a - * key identifier is invalid, but shall return #PSA_ERROR_INVALID_HANDLE - * instead. */ -#define PSA_ERROR_BAD_STATE ((psa_status_t)-137) - -/** The parameters passed to the function are invalid. - * - * Implementations may return this error any time a parameter or - * combination of parameters are recognized as invalid. - * - * Implementations shall not return this error code to indicate that a - * key identifier is invalid, but shall return #PSA_ERROR_INVALID_HANDLE - * instead. - */ -#define PSA_ERROR_INVALID_ARGUMENT ((psa_status_t)-135) - -/** There is not enough runtime memory. - * - * If the action is carried out across multiple security realms, this - * error can refer to available memory in any of the security realms. */ -#define PSA_ERROR_INSUFFICIENT_MEMORY ((psa_status_t)-141) - -/** There is not enough persistent storage. - * - * Functions that modify the key storage return this error code if - * there is insufficient storage space on the host media. In addition, - * many functions that do not otherwise access storage may return this - * error code if the implementation requires a mandatory log entry for - * the requested action and the log storage space is full. */ -#define PSA_ERROR_INSUFFICIENT_STORAGE ((psa_status_t)-142) - -/** There was a communication failure inside the implementation. - * - * This can indicate a communication failure between the application - * and an external cryptoprocessor or between the cryptoprocessor and - * an external volatile or persistent memory. A communication failure - * may be transient or permanent depending on the cause. - * - * \warning If a function returns this error, it is undetermined - * whether the requested action has completed or not. Implementations - * should return #PSA_SUCCESS on successful completion whenever - * possible, however functions may return #PSA_ERROR_COMMUNICATION_FAILURE - * if the requested action was completed successfully in an external - * cryptoprocessor but there was a breakdown of communication before - * the cryptoprocessor could report the status to the application. - */ -#define PSA_ERROR_COMMUNICATION_FAILURE ((psa_status_t)-145) - -/** There was a storage failure that may have led to data loss. - * - * This error indicates that some persistent storage is corrupted. - * It should not be used for a corruption of volatile memory - * (use #PSA_ERROR_CORRUPTION_DETECTED), for a communication error - * between the cryptoprocessor and its external storage (use - * #PSA_ERROR_COMMUNICATION_FAILURE), or when the storage is - * in a valid state but is full (use #PSA_ERROR_INSUFFICIENT_STORAGE). - * - * Note that a storage failure does not indicate that any data that was - * previously read is invalid. However this previously read data may no - * longer be readable from storage. - * - * When a storage failure occurs, it is no longer possible to ensure - * the global integrity of the keystore. Depending on the global - * integrity guarantees offered by the implementation, access to other - * data may or may not fail even if the data is still readable but - * its integrity cannot be guaranteed. - * - * Implementations should only use this error code to report a - * permanent storage corruption. However application writers should - * keep in mind that transient errors while reading the storage may be - * reported using this error code. */ -#define PSA_ERROR_STORAGE_FAILURE ((psa_status_t)-146) - -/** A hardware failure was detected. - * - * A hardware failure may be transient or permanent depending on the - * cause. */ -#define PSA_ERROR_HARDWARE_FAILURE ((psa_status_t)-147) - -/** A tampering attempt was detected. - * - * If an application receives this error code, there is no guarantee - * that previously accessed or computed data was correct and remains - * confidential. Applications should not perform any security function - * and should enter a safe failure state. - * - * Implementations may return this error code if they detect an invalid - * state that cannot happen during normal operation and that indicates - * that the implementation's security guarantees no longer hold. Depending - * on the implementation architecture and on its security and safety goals, - * the implementation may forcibly terminate the application. - * - * This error code is intended as a last resort when a security breach - * is detected and it is unsure whether the keystore data is still - * protected. Implementations shall only return this error code - * to report an alarm from a tampering detector, to indicate that - * the confidentiality of stored data can no longer be guaranteed, - * or to indicate that the integrity of previously returned data is now - * considered compromised. Implementations shall not use this error code - * to indicate a hardware failure that merely makes it impossible to - * perform the requested operation (use #PSA_ERROR_COMMUNICATION_FAILURE, - * #PSA_ERROR_STORAGE_FAILURE, #PSA_ERROR_HARDWARE_FAILURE, - * #PSA_ERROR_INSUFFICIENT_ENTROPY or other applicable error code - * instead). - * - * This error indicates an attack against the application. Implementations - * shall not return this error code as a consequence of the behavior of - * the application itself. */ -#define PSA_ERROR_CORRUPTION_DETECTED ((psa_status_t)-151) - -/** There is not enough entropy to generate random data needed - * for the requested action. - * - * This error indicates a failure of a hardware random generator. - * Application writers should note that this error can be returned not - * only by functions whose purpose is to generate random data, such - * as key, IV or nonce generation, but also by functions that execute - * an algorithm with a randomized result, as well as functions that - * use randomization of intermediate computations as a countermeasure - * to certain attacks. - * - * Implementations should avoid returning this error after psa_crypto_init() - * has succeeded. Implementations should generate sufficient - * entropy during initialization and subsequently use a cryptographically - * secure pseudorandom generator (PRNG). However implementations may return - * this error at any time if a policy requires the PRNG to be reseeded - * during normal operation. */ -#define PSA_ERROR_INSUFFICIENT_ENTROPY ((psa_status_t)-148) - -/** The signature, MAC or hash is incorrect. - * - * Verification functions return this error if the verification - * calculations completed successfully, and the value to be verified - * was determined to be incorrect. - * - * If the value to verify has an invalid size, implementations may return - * either #PSA_ERROR_INVALID_ARGUMENT or #PSA_ERROR_INVALID_SIGNATURE. */ -#define PSA_ERROR_INVALID_SIGNATURE ((psa_status_t)-149) - -/** The decrypted padding is incorrect. - * - * \warning In some protocols, when decrypting data, it is essential that - * the behavior of the application does not depend on whether the padding - * is correct, down to precise timing. Applications should prefer - * protocols that use authenticated encryption rather than plain - * encryption. If the application must perform a decryption of - * unauthenticated data, the application writer should take care not - * to reveal whether the padding is invalid. - * - * Implementations should strive to make valid and invalid padding - * as close as possible to indistinguishable to an external observer. - * In particular, the timing of a decryption operation should not - * depend on the validity of the padding. */ -#define PSA_ERROR_INVALID_PADDING ((psa_status_t)-150) - -/** Return this error when there's insufficient data when attempting - * to read from a resource. */ -#define PSA_ERROR_INSUFFICIENT_DATA ((psa_status_t)-143) - -/** The key identifier is not valid. See also :ref:\`key-handles\`. - */ -#define PSA_ERROR_INVALID_HANDLE ((psa_status_t)-136) - -/** Stored data has been corrupted. - * - * This error indicates that some persistent storage has suffered corruption. - * It does not indicate the following situations, which have specific error - * codes: - * - * - A corruption of volatile memory - use #PSA_ERROR_CORRUPTION_DETECTED. - * - A communication error between the cryptoprocessor and its external - * storage - use #PSA_ERROR_COMMUNICATION_FAILURE. - * - When the storage is in a valid state but is full - use - * #PSA_ERROR_INSUFFICIENT_STORAGE. - * - When the storage fails for other reasons - use - * #PSA_ERROR_STORAGE_FAILURE. - * - When the stored data is not valid - use #PSA_ERROR_DATA_INVALID. - * - * \note A storage corruption does not indicate that any data that was - * previously read is invalid. However this previously read data might no - * longer be readable from storage. - * - * When a storage failure occurs, it is no longer possible to ensure the - * global integrity of the keystore. - */ -#define PSA_ERROR_DATA_CORRUPT ((psa_status_t)-152) - -/** Data read from storage is not valid for the implementation. - * - * This error indicates that some data read from storage does not have a valid - * format. It does not indicate the following situations, which have specific - * error codes: - * - * - When the storage or stored data is corrupted - use #PSA_ERROR_DATA_CORRUPT - * - When the storage fails for other reasons - use #PSA_ERROR_STORAGE_FAILURE - * - An invalid argument to the API - use #PSA_ERROR_INVALID_ARGUMENT - * - * This error is typically a result of either storage corruption on a - * cleartext storage backend, or an attempt to read data that was - * written by an incompatible version of the library. - */ -#define PSA_ERROR_DATA_INVALID ((psa_status_t)-153) - -/**@}*/ - -/** \defgroup crypto_types Key and algorithm types - * @{ - */ - -/** An invalid key type value. - * - * Zero is not the encoding of any key type. - */ -#define PSA_KEY_TYPE_NONE ((psa_key_type_t)0x0000) - -/** Vendor-defined key type flag. - * - * Key types defined by this standard will never have the - * #PSA_KEY_TYPE_VENDOR_FLAG bit set. Vendors who define additional key types - * must use an encoding with the #PSA_KEY_TYPE_VENDOR_FLAG bit set and should - * respect the bitwise structure used by standard encodings whenever practical. - */ -#define PSA_KEY_TYPE_VENDOR_FLAG ((psa_key_type_t)0x8000) - -#define PSA_KEY_TYPE_CATEGORY_MASK ((psa_key_type_t)0x7000) -#define PSA_KEY_TYPE_CATEGORY_RAW ((psa_key_type_t)0x1000) -#define PSA_KEY_TYPE_CATEGORY_SYMMETRIC ((psa_key_type_t)0x2000) -#define PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY ((psa_key_type_t)0x4000) -#define PSA_KEY_TYPE_CATEGORY_KEY_PAIR ((psa_key_type_t)0x7000) - -#define PSA_KEY_TYPE_CATEGORY_FLAG_PAIR ((psa_key_type_t)0x3000) - -/** Whether a key type is vendor-defined. - * - * See also #PSA_KEY_TYPE_VENDOR_FLAG. - */ -#define PSA_KEY_TYPE_IS_VENDOR_DEFINED(type) \ - (((type) & PSA_KEY_TYPE_VENDOR_FLAG) != 0) - -/** Whether a key type is an unstructured array of bytes. - * - * This encompasses both symmetric keys and non-key data. - */ -#define PSA_KEY_TYPE_IS_UNSTRUCTURED(type) \ - (((type) & PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_RAW || \ - ((type) & PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_SYMMETRIC) - -/** Whether a key type is asymmetric: either a key pair or a public key. */ -#define PSA_KEY_TYPE_IS_ASYMMETRIC(type) \ - (((type) & PSA_KEY_TYPE_CATEGORY_MASK \ - & ~PSA_KEY_TYPE_CATEGORY_FLAG_PAIR) == \ - PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY) -/** Whether a key type is the public part of a key pair. */ -#define PSA_KEY_TYPE_IS_PUBLIC_KEY(type) \ - (((type) & PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY) -/** Whether a key type is a key pair containing a private part and a public - * part. */ -#define PSA_KEY_TYPE_IS_KEY_PAIR(type) \ - (((type) & PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_KEY_PAIR) -/** The key pair type corresponding to a public key type. - * - * You may also pass a key pair type as \p type, it will be left unchanged. - * - * \param type A public key type or key pair type. - * - * \return The corresponding key pair type. - * If \p type is not a public key or a key pair, - * the return value is undefined. - */ -#define PSA_KEY_TYPE_KEY_PAIR_OF_PUBLIC_KEY(type) \ - ((type) | PSA_KEY_TYPE_CATEGORY_FLAG_PAIR) -/** The public key type corresponding to a key pair type. - * - * You may also pass a key pair type as \p type, it will be left unchanged. - * - * \param type A public key type or key pair type. - * - * \return The corresponding public key type. - * If \p type is not a public key or a key pair, - * the return value is undefined. - */ -#define PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR(type) \ - ((type) & ~PSA_KEY_TYPE_CATEGORY_FLAG_PAIR) - -/** Raw data. - * - * A "key" of this type cannot be used for any cryptographic operation. - * Applications may use this type to store arbitrary data in the keystore. */ -#define PSA_KEY_TYPE_RAW_DATA ((psa_key_type_t)0x1001) - -/** HMAC key. - * - * The key policy determines which underlying hash algorithm the key can be - * used for. - * - * HMAC keys should generally have the same size as the underlying hash. - * This size can be calculated with #PSA_HASH_LENGTH(\c alg) where - * \c alg is the HMAC algorithm or the underlying hash algorithm. */ -#define PSA_KEY_TYPE_HMAC ((psa_key_type_t)0x1100) - -/** A secret for key derivation. - * - * The key policy determines which key derivation algorithm the key - * can be used for. - */ -#define PSA_KEY_TYPE_DERIVE ((psa_key_type_t)0x1200) - -/** Key for a cipher, AEAD or MAC algorithm based on the AES block cipher. - * - * The size of the key can be 16 bytes (AES-128), 24 bytes (AES-192) or - * 32 bytes (AES-256). - */ -#define PSA_KEY_TYPE_AES ((psa_key_type_t)0x2400) - -/** Key for a cipher or MAC algorithm based on DES or 3DES (Triple-DES). - * - * The size of the key can be 8 bytes (single DES), 16 bytes (2-key 3DES) or - * 24 bytes (3-key 3DES). - * - * Note that single DES and 2-key 3DES are weak and strongly - * deprecated and should only be used to decrypt legacy data. 3-key 3DES - * is weak and deprecated and should only be used in legacy protocols. - */ -#define PSA_KEY_TYPE_DES ((psa_key_type_t)0x2301) - -/** Key for a cipher, AEAD or MAC algorithm based on the - * Camellia block cipher. */ -#define PSA_KEY_TYPE_CAMELLIA ((psa_key_type_t)0x2403) - -/** Key for the RC4 stream cipher. - * - * Note that RC4 is weak and deprecated and should only be used in - * legacy protocols. */ -#define PSA_KEY_TYPE_ARC4 ((psa_key_type_t)0x2002) - -/** Key for the ChaCha20 stream cipher or the Chacha20-Poly1305 AEAD algorithm. - * - * ChaCha20 and the ChaCha20_Poly1305 construction are defined in RFC 7539. - * - * Implementations must support 12-byte nonces, may support 8-byte nonces, - * and should reject other sizes. - */ -#define PSA_KEY_TYPE_CHACHA20 ((psa_key_type_t)0x2004) - -/** RSA public key. */ -#define PSA_KEY_TYPE_RSA_PUBLIC_KEY ((psa_key_type_t)0x4001) -/** RSA key pair (private and public key). */ -#define PSA_KEY_TYPE_RSA_KEY_PAIR ((psa_key_type_t)0x7001) -/** Whether a key type is an RSA key (pair or public-only). */ -#define PSA_KEY_TYPE_IS_RSA(type) \ - (PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR(type) == PSA_KEY_TYPE_RSA_PUBLIC_KEY) - -#define PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE ((psa_key_type_t)0x4100) -#define PSA_KEY_TYPE_ECC_KEY_PAIR_BASE ((psa_key_type_t)0x7100) -#define PSA_KEY_TYPE_ECC_CURVE_MASK ((psa_key_type_t)0x00ff) -/** Elliptic curve key pair. - * - * \param curve A value of type ::psa_ecc_family_t that - * identifies the ECC curve to be used. - */ -#define PSA_KEY_TYPE_ECC_KEY_PAIR(curve) \ - (PSA_KEY_TYPE_ECC_KEY_PAIR_BASE | (curve)) -/** Elliptic curve public key. - * - * \param curve A value of type ::psa_ecc_family_t that - * identifies the ECC curve to be used. - */ -#define PSA_KEY_TYPE_ECC_PUBLIC_KEY(curve) \ - (PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE | (curve)) - -/** Whether a key type is an elliptic curve key (pair or public-only). */ -#define PSA_KEY_TYPE_IS_ECC(type) \ - ((PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR(type) & \ - ~PSA_KEY_TYPE_ECC_CURVE_MASK) == PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE) -/** Whether a key type is an elliptic curve key pair. */ -#define PSA_KEY_TYPE_IS_ECC_KEY_PAIR(type) \ - (((type) & ~PSA_KEY_TYPE_ECC_CURVE_MASK) == \ - PSA_KEY_TYPE_ECC_KEY_PAIR_BASE) -/** Whether a key type is an elliptic curve public key. */ -#define PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY(type) \ - (((type) & ~PSA_KEY_TYPE_ECC_CURVE_MASK) == \ - PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE) - -/** Extract the curve from an elliptic curve key type. */ -#define PSA_KEY_TYPE_ECC_GET_FAMILY(type) \ - ((psa_ecc_family_t) (PSA_KEY_TYPE_IS_ECC(type) ? \ - ((type) & PSA_KEY_TYPE_ECC_CURVE_MASK) : \ - 0)) - -/** SEC Koblitz curves over prime fields. - * - * This family comprises the following curves: - * secp192k1, secp224k1, secp256k1. - * They are defined in _Standards for Efficient Cryptography_, - * _SEC 2: Recommended Elliptic Curve Domain Parameters_. - * https://www.secg.org/sec2-v2.pdf - */ -#define PSA_ECC_FAMILY_SECP_K1 ((psa_ecc_family_t) 0x17) - -/** SEC random curves over prime fields. - * - * This family comprises the following curves: - * secp192k1, secp224r1, secp256r1, secp384r1, secp521r1. - * They are defined in _Standards for Efficient Cryptography_, - * _SEC 2: Recommended Elliptic Curve Domain Parameters_. - * https://www.secg.org/sec2-v2.pdf - */ -#define PSA_ECC_FAMILY_SECP_R1 ((psa_ecc_family_t) 0x12) -/* SECP160R2 (SEC2 v1, obsolete) */ -#define PSA_ECC_FAMILY_SECP_R2 ((psa_ecc_family_t) 0x1b) - -/** SEC Koblitz curves over binary fields. - * - * This family comprises the following curves: - * sect163k1, sect233k1, sect239k1, sect283k1, sect409k1, sect571k1. - * They are defined in _Standards for Efficient Cryptography_, - * _SEC 2: Recommended Elliptic Curve Domain Parameters_. - * https://www.secg.org/sec2-v2.pdf - */ -#define PSA_ECC_FAMILY_SECT_K1 ((psa_ecc_family_t) 0x27) - -/** SEC random curves over binary fields. - * - * This family comprises the following curves: - * sect163r1, sect233r1, sect283r1, sect409r1, sect571r1. - * They are defined in _Standards for Efficient Cryptography_, - * _SEC 2: Recommended Elliptic Curve Domain Parameters_. - * https://www.secg.org/sec2-v2.pdf - */ -#define PSA_ECC_FAMILY_SECT_R1 ((psa_ecc_family_t) 0x22) - -/** SEC additional random curves over binary fields. - * - * This family comprises the following curve: - * sect163r2. - * It is defined in _Standards for Efficient Cryptography_, - * _SEC 2: Recommended Elliptic Curve Domain Parameters_. - * https://www.secg.org/sec2-v2.pdf - */ -#define PSA_ECC_FAMILY_SECT_R2 ((psa_ecc_family_t) 0x2b) - -/** Brainpool P random curves. - * - * This family comprises the following curves: - * brainpoolP160r1, brainpoolP192r1, brainpoolP224r1, brainpoolP256r1, - * brainpoolP320r1, brainpoolP384r1, brainpoolP512r1. - * It is defined in RFC 5639. - */ -#define PSA_ECC_FAMILY_BRAINPOOL_P_R1 ((psa_ecc_family_t) 0x30) - -/** Curve25519 and Curve448. - * - * This family comprises the following Montgomery curves: - * - 255-bit: Bernstein et al., - * _Curve25519: new Diffie-Hellman speed records_, LNCS 3958, 2006. - * The algorithm #PSA_ALG_ECDH performs X25519 when used with this curve. - * - 448-bit: Hamburg, - * _Ed448-Goldilocks, a new elliptic curve_, NIST ECC Workshop, 2015. - * The algorithm #PSA_ALG_ECDH performs X448 when used with this curve. - */ -#define PSA_ECC_FAMILY_MONTGOMERY ((psa_ecc_family_t) 0x41) - -#define PSA_KEY_TYPE_DH_PUBLIC_KEY_BASE ((psa_key_type_t)0x4200) -#define PSA_KEY_TYPE_DH_KEY_PAIR_BASE ((psa_key_type_t)0x7200) -#define PSA_KEY_TYPE_DH_GROUP_MASK ((psa_key_type_t)0x00ff) -/** Diffie-Hellman key pair. - * - * \param group A value of type ::psa_dh_family_t that identifies the - * Diffie-Hellman group to be used. - */ -#define PSA_KEY_TYPE_DH_KEY_PAIR(group) \ - (PSA_KEY_TYPE_DH_KEY_PAIR_BASE | (group)) -/** Diffie-Hellman public key. - * - * \param group A value of type ::psa_dh_family_t that identifies the - * Diffie-Hellman group to be used. - */ -#define PSA_KEY_TYPE_DH_PUBLIC_KEY(group) \ - (PSA_KEY_TYPE_DH_PUBLIC_KEY_BASE | (group)) - -/** Whether a key type is a Diffie-Hellman key (pair or public-only). */ -#define PSA_KEY_TYPE_IS_DH(type) \ - ((PSA_KEY_TYPE_PUBLIC_KEY_OF_KEY_PAIR(type) & \ - ~PSA_KEY_TYPE_DH_GROUP_MASK) == PSA_KEY_TYPE_DH_PUBLIC_KEY_BASE) -/** Whether a key type is a Diffie-Hellman key pair. */ -#define PSA_KEY_TYPE_IS_DH_KEY_PAIR(type) \ - (((type) & ~PSA_KEY_TYPE_DH_GROUP_MASK) == \ - PSA_KEY_TYPE_DH_KEY_PAIR_BASE) -/** Whether a key type is a Diffie-Hellman public key. */ -#define PSA_KEY_TYPE_IS_DH_PUBLIC_KEY(type) \ - (((type) & ~PSA_KEY_TYPE_DH_GROUP_MASK) == \ - PSA_KEY_TYPE_DH_PUBLIC_KEY_BASE) - -/** Extract the group from a Diffie-Hellman key type. */ -#define PSA_KEY_TYPE_DH_GET_FAMILY(type) \ - ((psa_dh_family_t) (PSA_KEY_TYPE_IS_DH(type) ? \ - ((type) & PSA_KEY_TYPE_DH_GROUP_MASK) : \ - 0)) - -/** Diffie-Hellman groups defined in RFC 7919 Appendix A. - * - * This family includes groups with the following key sizes (in bits): - * 2048, 3072, 4096, 6144, 8192. A given implementation may support - * all of these sizes or only a subset. - */ -#define PSA_DH_FAMILY_RFC7919 ((psa_dh_family_t) 0x03) - -#define PSA_GET_KEY_TYPE_BLOCK_SIZE_EXPONENT(type) \ - (((type) >> 8) & 7) -/** The block size of a block cipher. - * - * \param type A cipher key type (value of type #psa_key_type_t). - * - * \return The block size for a block cipher, or 1 for a stream cipher. - * The return value is undefined if \p type is not a supported - * cipher key type. - * - * \note It is possible to build stream cipher algorithms on top of a block - * cipher, for example CTR mode (#PSA_ALG_CTR). - * This macro only takes the key type into account, so it cannot be - * used to determine the size of the data that #psa_cipher_update() - * might buffer for future processing in general. - * - * \note This macro returns a compile-time constant if its argument is one. - * - * \warning This macro may evaluate its argument multiple times. - */ -#define PSA_BLOCK_CIPHER_BLOCK_LENGTH(type) \ - (((type) & PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_SYMMETRIC ? \ - 1u << PSA_GET_KEY_TYPE_BLOCK_SIZE_EXPONENT(type) : \ - 0u) - -/** Vendor-defined algorithm flag. - * - * Algorithms defined by this standard will never have the #PSA_ALG_VENDOR_FLAG - * bit set. Vendors who define additional algorithms must use an encoding with - * the #PSA_ALG_VENDOR_FLAG bit set and should respect the bitwise structure - * used by standard encodings whenever practical. - */ -#define PSA_ALG_VENDOR_FLAG ((psa_algorithm_t)0x80000000) - -#define PSA_ALG_CATEGORY_MASK ((psa_algorithm_t)0x7f000000) -#define PSA_ALG_CATEGORY_HASH ((psa_algorithm_t)0x02000000) -#define PSA_ALG_CATEGORY_MAC ((psa_algorithm_t)0x03000000) -#define PSA_ALG_CATEGORY_CIPHER ((psa_algorithm_t)0x04000000) -#define PSA_ALG_CATEGORY_AEAD ((psa_algorithm_t)0x05000000) -#define PSA_ALG_CATEGORY_SIGN ((psa_algorithm_t)0x06000000) -#define PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION ((psa_algorithm_t)0x07000000) -#define PSA_ALG_CATEGORY_KEY_DERIVATION ((psa_algorithm_t)0x08000000) -#define PSA_ALG_CATEGORY_KEY_AGREEMENT ((psa_algorithm_t)0x09000000) - -/** Whether an algorithm is vendor-defined. - * - * See also #PSA_ALG_VENDOR_FLAG. - */ -#define PSA_ALG_IS_VENDOR_DEFINED(alg) \ - (((alg) & PSA_ALG_VENDOR_FLAG) != 0) - -/** Whether the specified algorithm is a hash algorithm. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \p alg is a hash algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \p alg is not a supported - * algorithm identifier. - */ -#define PSA_ALG_IS_HASH(alg) \ - (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_HASH) - -/** Whether the specified algorithm is a MAC algorithm. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \p alg is a MAC algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \p alg is not a supported - * algorithm identifier. - */ -#define PSA_ALG_IS_MAC(alg) \ - (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_MAC) - -/** Whether the specified algorithm is a symmetric cipher algorithm. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \p alg is a symmetric cipher algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \p alg is not a supported - * algorithm identifier. - */ -#define PSA_ALG_IS_CIPHER(alg) \ - (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_CIPHER) - -/** Whether the specified algorithm is an authenticated encryption - * with associated data (AEAD) algorithm. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \p alg is an AEAD algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \p alg is not a supported - * algorithm identifier. - */ -#define PSA_ALG_IS_AEAD(alg) \ - (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_AEAD) - -/** Whether the specified algorithm is an asymmetric signature algorithm, - * also known as public-key signature algorithm. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \p alg is an asymmetric signature algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \p alg is not a supported - * algorithm identifier. - */ -#define PSA_ALG_IS_SIGN(alg) \ - (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_SIGN) - -/** Whether the specified algorithm is an asymmetric encryption algorithm, - * also known as public-key encryption algorithm. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \p alg is an asymmetric encryption algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \p alg is not a supported - * algorithm identifier. - */ -#define PSA_ALG_IS_ASYMMETRIC_ENCRYPTION(alg) \ - (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION) - -/** Whether the specified algorithm is a key agreement algorithm. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \p alg is a key agreement algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \p alg is not a supported - * algorithm identifier. - */ -#define PSA_ALG_IS_KEY_AGREEMENT(alg) \ - (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_AGREEMENT) - -/** Whether the specified algorithm is a key derivation algorithm. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \p alg is a key derivation algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \p alg is not a supported - * algorithm identifier. - */ -#define PSA_ALG_IS_KEY_DERIVATION(alg) \ - (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_DERIVATION) - -#define PSA_ALG_HASH_MASK ((psa_algorithm_t)0x000000ff) -/** MD2 */ -#define PSA_ALG_MD2 ((psa_algorithm_t)0x02000001) -/** MD4 */ -#define PSA_ALG_MD4 ((psa_algorithm_t)0x02000002) -/** MD5 */ -#define PSA_ALG_MD5 ((psa_algorithm_t)0x02000003) -/** PSA_ALG_RIPEMD160 */ -#define PSA_ALG_RIPEMD160 ((psa_algorithm_t)0x02000004) -/** SHA1 */ -#define PSA_ALG_SHA_1 ((psa_algorithm_t)0x02000005) -/** SHA2-224 */ -#define PSA_ALG_SHA_224 ((psa_algorithm_t)0x02000008) -/** SHA2-256 */ -#define PSA_ALG_SHA_256 ((psa_algorithm_t)0x02000009) -/** SHA2-384 */ -#define PSA_ALG_SHA_384 ((psa_algorithm_t)0x0200000a) -/** SHA2-512 */ -#define PSA_ALG_SHA_512 ((psa_algorithm_t)0x0200000b) -/** SHA2-512/224 */ -#define PSA_ALG_SHA_512_224 ((psa_algorithm_t)0x0200000c) -/** SHA2-512/256 */ -#define PSA_ALG_SHA_512_256 ((psa_algorithm_t)0x0200000d) -/** SHA3-224 */ -#define PSA_ALG_SHA3_224 ((psa_algorithm_t)0x02000010) -/** SHA3-256 */ -#define PSA_ALG_SHA3_256 ((psa_algorithm_t)0x02000011) -/** SHA3-384 */ -#define PSA_ALG_SHA3_384 ((psa_algorithm_t)0x02000012) -/** SHA3-512 */ -#define PSA_ALG_SHA3_512 ((psa_algorithm_t)0x02000013) - -/** In a hash-and-sign algorithm policy, allow any hash algorithm. - * - * This value may be used to form the algorithm usage field of a policy - * for a signature algorithm that is parametrized by a hash. The key - * may then be used to perform operations using the same signature - * algorithm parametrized with any supported hash. - * - * That is, suppose that `PSA_xxx_SIGNATURE` is one of the following macros: - * - #PSA_ALG_RSA_PKCS1V15_SIGN, #PSA_ALG_RSA_PSS, - * - #PSA_ALG_ECDSA, #PSA_ALG_DETERMINISTIC_ECDSA. - * Then you may create and use a key as follows: - * - Set the key usage field using #PSA_ALG_ANY_HASH, for example: - * ``` - * psa_set_key_usage_flags(&attributes, PSA_KEY_USAGE_SIGN_HASH); // or VERIFY - * psa_set_key_algorithm(&attributes, PSA_xxx_SIGNATURE(PSA_ALG_ANY_HASH)); - * ``` - * - Import or generate key material. - * - Call psa_sign_hash() or psa_verify_hash(), passing - * an algorithm built from `PSA_xxx_SIGNATURE` and a specific hash. Each - * call to sign or verify a message may use a different hash. - * ``` - * psa_sign_hash(key, PSA_xxx_SIGNATURE(PSA_ALG_SHA_256), ...); - * psa_sign_hash(key, PSA_xxx_SIGNATURE(PSA_ALG_SHA_512), ...); - * psa_sign_hash(key, PSA_xxx_SIGNATURE(PSA_ALG_SHA3_256), ...); - * ``` - * - * This value may not be used to build other algorithms that are - * parametrized over a hash. For any valid use of this macro to build - * an algorithm \c alg, #PSA_ALG_IS_HASH_AND_SIGN(\c alg) is true. - * - * This value may not be used to build an algorithm specification to - * perform an operation. It is only valid to build policies. - */ -#define PSA_ALG_ANY_HASH ((psa_algorithm_t)0x020000ff) - -#define PSA_ALG_MAC_SUBCATEGORY_MASK ((psa_algorithm_t)0x00c00000) -#define PSA_ALG_HMAC_BASE ((psa_algorithm_t)0x03800000) -/** Macro to build an HMAC algorithm. - * - * For example, #PSA_ALG_HMAC(#PSA_ALG_SHA_256) is HMAC-SHA-256. - * - * \param hash_alg A hash algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_HASH(\p hash_alg) is true). - * - * \return The corresponding HMAC algorithm. - * \return Unspecified if \p hash_alg is not a supported - * hash algorithm. - */ -#define PSA_ALG_HMAC(hash_alg) \ - (PSA_ALG_HMAC_BASE | ((hash_alg) & PSA_ALG_HASH_MASK)) - -#define PSA_ALG_HMAC_GET_HASH(hmac_alg) \ - (PSA_ALG_CATEGORY_HASH | ((hmac_alg) & PSA_ALG_HASH_MASK)) - -/** Whether the specified algorithm is an HMAC algorithm. - * - * HMAC is a family of MAC algorithms that are based on a hash function. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \p alg is an HMAC algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \p alg is not a supported - * algorithm identifier. - */ -#define PSA_ALG_IS_HMAC(alg) \ - (((alg) & (PSA_ALG_CATEGORY_MASK | PSA_ALG_MAC_SUBCATEGORY_MASK)) == \ - PSA_ALG_HMAC_BASE) - -/* In the encoding of a MAC algorithm, the bits corresponding to - * PSA_ALG_MAC_TRUNCATION_MASK encode the length to which the MAC is - * truncated. As an exception, the value 0 means the untruncated algorithm, - * whatever its length is. The length is encoded in 6 bits, so it can - * reach up to 63; the largest MAC is 64 bytes so its trivial truncation - * to full length is correctly encoded as 0 and any non-trivial truncation - * is correctly encoded as a value between 1 and 63. */ -#define PSA_ALG_MAC_TRUNCATION_MASK ((psa_algorithm_t)0x003f0000) -#define PSA_MAC_TRUNCATION_OFFSET 16 - -/* In the encoding of a MAC algorithm, the bit corresponding to - * #PSA_ALG_MAC_AT_LEAST_THIS_LENGTH_FLAG encodes the fact that the algorithm - * is a wildcard algorithm. A key with such wildcard algorithm as permitted - * algorithm policy can be used with any algorithm corresponding to the - * same base class and having a (potentially truncated) MAC length greater or - * equal than the one encoded in #PSA_ALG_MAC_TRUNCATION_MASK. */ -#define PSA_ALG_MAC_AT_LEAST_THIS_LENGTH_FLAG ((psa_algorithm_t)0x00008000) - -/** Macro to build a truncated MAC algorithm. - * - * A truncated MAC algorithm is identical to the corresponding MAC - * algorithm except that the MAC value for the truncated algorithm - * consists of only the first \p mac_length bytes of the MAC value - * for the untruncated algorithm. - * - * \note This macro may allow constructing algorithm identifiers that - * are not valid, either because the specified length is larger - * than the untruncated MAC or because the specified length is - * smaller than permitted by the implementation. - * - * \note It is implementation-defined whether a truncated MAC that - * is truncated to the same length as the MAC of the untruncated - * algorithm is considered identical to the untruncated algorithm - * for policy comparison purposes. - * - * \param mac_alg A MAC algorithm identifier (value of type - * #psa_algorithm_t such that #PSA_ALG_IS_MAC(\p alg) - * is true). This may be a truncated or untruncated - * MAC algorithm. - * \param mac_length Desired length of the truncated MAC in bytes. - * This must be at most the full length of the MAC - * and must be at least an implementation-specified - * minimum. The implementation-specified minimum - * shall not be zero. - * - * \return The corresponding MAC algorithm with the specified - * length. - * \return Unspecified if \p alg is not a supported - * MAC algorithm or if \p mac_length is too small or - * too large for the specified MAC algorithm. - */ -#define PSA_ALG_TRUNCATED_MAC(mac_alg, mac_length) \ - (((mac_alg) & ~(PSA_ALG_MAC_TRUNCATION_MASK | \ - PSA_ALG_MAC_AT_LEAST_THIS_LENGTH_FLAG)) | \ - ((mac_length) << PSA_MAC_TRUNCATION_OFFSET & PSA_ALG_MAC_TRUNCATION_MASK)) - -/** Macro to build the base MAC algorithm corresponding to a truncated - * MAC algorithm. - * - * \param mac_alg A MAC algorithm identifier (value of type - * #psa_algorithm_t such that #PSA_ALG_IS_MAC(\p alg) - * is true). This may be a truncated or untruncated - * MAC algorithm. - * - * \return The corresponding base MAC algorithm. - * \return Unspecified if \p alg is not a supported - * MAC algorithm. - */ -#define PSA_ALG_FULL_LENGTH_MAC(mac_alg) \ - ((mac_alg) & ~(PSA_ALG_MAC_TRUNCATION_MASK | \ - PSA_ALG_MAC_AT_LEAST_THIS_LENGTH_FLAG)) - -/** Length to which a MAC algorithm is truncated. - * - * \param mac_alg A MAC algorithm identifier (value of type - * #psa_algorithm_t such that #PSA_ALG_IS_MAC(\p alg) - * is true). - * - * \return Length of the truncated MAC in bytes. - * \return 0 if \p alg is a non-truncated MAC algorithm. - * \return Unspecified if \p alg is not a supported - * MAC algorithm. - */ -#define PSA_MAC_TRUNCATED_LENGTH(mac_alg) \ - (((mac_alg) & PSA_ALG_MAC_TRUNCATION_MASK) >> PSA_MAC_TRUNCATION_OFFSET) - -/** Macro to build a MAC minimum-MAC-length wildcard algorithm. - * - * A minimum-MAC-length MAC wildcard algorithm permits all MAC algorithms - * sharing the same base algorithm, and where the (potentially truncated) MAC - * length of the specific algorithm is equal to or larger then the wildcard - * algorithm's minimum MAC length. - * - * \note When setting the minimum required MAC length to less than the - * smallest MAC length allowed by the base algorithm, this effectively - * becomes an 'any-MAC-length-allowed' policy for that base algorithm. - * - * \param mac_alg A MAC algorithm identifier (value of type - * #psa_algorithm_t such that #PSA_ALG_IS_MAC(\p mac_alg) - * is true). - * \param min_mac_length Desired minimum length of the message authentication - * code in bytes. This must be at most the untruncated - * length of the MAC and must be at least 1. - * - * \return The corresponding MAC wildcard algorithm with the - * specified minimum length. - * \return Unspecified if \p mac_alg is not a supported MAC - * algorithm or if \p min_mac_length is less than 1 or - * too large for the specified MAC algorithm. - */ -#define PSA_ALG_AT_LEAST_THIS_LENGTH_MAC(mac_alg, min_mac_length) \ - ( PSA_ALG_TRUNCATED_MAC(mac_alg, min_mac_length) | \ - PSA_ALG_MAC_AT_LEAST_THIS_LENGTH_FLAG ) - -#define PSA_ALG_CIPHER_MAC_BASE ((psa_algorithm_t)0x03c00000) -/** The CBC-MAC construction over a block cipher - * - * \warning CBC-MAC is insecure in many cases. - * A more secure mode, such as #PSA_ALG_CMAC, is recommended. - */ -#define PSA_ALG_CBC_MAC ((psa_algorithm_t)0x03c00100) -/** The CMAC construction over a block cipher */ -#define PSA_ALG_CMAC ((psa_algorithm_t)0x03c00200) - -/** Whether the specified algorithm is a MAC algorithm based on a block cipher. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \p alg is a MAC algorithm based on a block cipher, 0 otherwise. - * This macro may return either 0 or 1 if \p alg is not a supported - * algorithm identifier. - */ -#define PSA_ALG_IS_BLOCK_CIPHER_MAC(alg) \ - (((alg) & (PSA_ALG_CATEGORY_MASK | PSA_ALG_MAC_SUBCATEGORY_MASK)) == \ - PSA_ALG_CIPHER_MAC_BASE) - -#define PSA_ALG_CIPHER_STREAM_FLAG ((psa_algorithm_t)0x00800000) -#define PSA_ALG_CIPHER_FROM_BLOCK_FLAG ((psa_algorithm_t)0x00400000) - -/** Whether the specified algorithm is a stream cipher. - * - * A stream cipher is a symmetric cipher that encrypts or decrypts messages - * by applying a bitwise-xor with a stream of bytes that is generated - * from a key. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \p alg is a stream cipher algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \p alg is not a supported - * algorithm identifier or if it is not a symmetric cipher algorithm. - */ -#define PSA_ALG_IS_STREAM_CIPHER(alg) \ - (((alg) & (PSA_ALG_CATEGORY_MASK | PSA_ALG_CIPHER_STREAM_FLAG)) == \ - (PSA_ALG_CATEGORY_CIPHER | PSA_ALG_CIPHER_STREAM_FLAG)) - -/** The stream cipher mode of a stream cipher algorithm. - * - * The underlying stream cipher is determined by the key type. - * - To use ChaCha20, use a key type of #PSA_KEY_TYPE_CHACHA20. - * - To use ARC4, use a key type of #PSA_KEY_TYPE_ARC4. - */ -#define PSA_ALG_STREAM_CIPHER ((psa_algorithm_t)0x04800100) - -/** The CTR stream cipher mode. - * - * CTR is a stream cipher which is built from a block cipher. - * The underlying block cipher is determined by the key type. - * For example, to use AES-128-CTR, use this algorithm with - * a key of type #PSA_KEY_TYPE_AES and a length of 128 bits (16 bytes). - */ -#define PSA_ALG_CTR ((psa_algorithm_t)0x04c01000) - -/** The CFB stream cipher mode. - * - * The underlying block cipher is determined by the key type. - */ -#define PSA_ALG_CFB ((psa_algorithm_t)0x04c01100) - -/** The OFB stream cipher mode. - * - * The underlying block cipher is determined by the key type. - */ -#define PSA_ALG_OFB ((psa_algorithm_t)0x04c01200) - -/** The XTS cipher mode. - * - * XTS is a cipher mode which is built from a block cipher. It requires at - * least one full block of input, but beyond this minimum the input - * does not need to be a whole number of blocks. - */ -#define PSA_ALG_XTS ((psa_algorithm_t)0x0440ff00) - -/** The Electronic Code Book (ECB) mode of a block cipher, with no padding. - * - * \warning ECB mode does not protect the confidentiality of the encrypted data - * except in extremely narrow circumstances. It is recommended that applications - * only use ECB if they need to construct an operating mode that the - * implementation does not provide. Implementations are encouraged to provide - * the modes that applications need in preference to supporting direct access - * to ECB. - * - * The underlying block cipher is determined by the key type. - * - * This symmetric cipher mode can only be used with messages whose lengths are a - * multiple of the block size of the chosen block cipher. - * - * ECB mode does not accept an initialization vector (IV). When using a - * multi-part cipher operation with this algorithm, psa_cipher_generate_iv() - * and psa_cipher_set_iv() must not be called. - */ -#define PSA_ALG_ECB_NO_PADDING ((psa_algorithm_t)0x04404400) - -/** The CBC block cipher chaining mode, with no padding. - * - * The underlying block cipher is determined by the key type. - * - * This symmetric cipher mode can only be used with messages whose lengths - * are whole number of blocks for the chosen block cipher. - */ -#define PSA_ALG_CBC_NO_PADDING ((psa_algorithm_t)0x04404000) - -/** The CBC block cipher chaining mode with PKCS#7 padding. - * - * The underlying block cipher is determined by the key type. - * - * This is the padding method defined by PKCS#7 (RFC 2315) §10.3. - */ -#define PSA_ALG_CBC_PKCS7 ((psa_algorithm_t)0x04404100) - -#define PSA_ALG_AEAD_FROM_BLOCK_FLAG ((psa_algorithm_t)0x00400000) - -/** Whether the specified algorithm is an AEAD mode on a block cipher. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \p alg is an AEAD algorithm which is an AEAD mode based on - * a block cipher, 0 otherwise. - * This macro may return either 0 or 1 if \p alg is not a supported - * algorithm identifier. - */ -#define PSA_ALG_IS_AEAD_ON_BLOCK_CIPHER(alg) \ - (((alg) & (PSA_ALG_CATEGORY_MASK | PSA_ALG_AEAD_FROM_BLOCK_FLAG)) == \ - (PSA_ALG_CATEGORY_AEAD | PSA_ALG_AEAD_FROM_BLOCK_FLAG)) - -/** The CCM authenticated encryption algorithm. - * - * The underlying block cipher is determined by the key type. - */ -#define PSA_ALG_CCM ((psa_algorithm_t)0x05500100) - -/** The GCM authenticated encryption algorithm. - * - * The underlying block cipher is determined by the key type. - */ -#define PSA_ALG_GCM ((psa_algorithm_t)0x05500200) - -/** The Chacha20-Poly1305 AEAD algorithm. - * - * The ChaCha20_Poly1305 construction is defined in RFC 7539. - * - * Implementations must support 12-byte nonces, may support 8-byte nonces, - * and should reject other sizes. - * - * Implementations must support 16-byte tags and should reject other sizes. - */ -#define PSA_ALG_CHACHA20_POLY1305 ((psa_algorithm_t)0x05100500) - -/* In the encoding of a AEAD algorithm, the bits corresponding to - * PSA_ALG_AEAD_TAG_LENGTH_MASK encode the length of the AEAD tag. - * The constants for default lengths follow this encoding. - */ -#define PSA_ALG_AEAD_TAG_LENGTH_MASK ((psa_algorithm_t)0x003f0000) -#define PSA_AEAD_TAG_LENGTH_OFFSET 16 - -/* In the encoding of an AEAD algorithm, the bit corresponding to - * #PSA_ALG_AEAD_AT_LEAST_THIS_LENGTH_FLAG encodes the fact that the algorithm - * is a wildcard algorithm. A key with such wildcard algorithm as permitted - * algorithm policy can be used with any algorithm corresponding to the - * same base class and having a tag length greater than or equal to the one - * encoded in #PSA_ALG_AEAD_TAG_LENGTH_MASK. */ -#define PSA_ALG_AEAD_AT_LEAST_THIS_LENGTH_FLAG ((psa_algorithm_t)0x00008000) - -/** Macro to build a shortened AEAD algorithm. - * - * A shortened AEAD algorithm is similar to the corresponding AEAD - * algorithm, but has an authentication tag that consists of fewer bytes. - * Depending on the algorithm, the tag length may affect the calculation - * of the ciphertext. - * - * \param aead_alg An AEAD algorithm identifier (value of type - * #psa_algorithm_t such that #PSA_ALG_IS_AEAD(\p alg) - * is true). - * \param tag_length Desired length of the authentication tag in bytes. - * - * \return The corresponding AEAD algorithm with the specified - * length. - * \return Unspecified if \p alg is not a supported - * AEAD algorithm or if \p tag_length is not valid - * for the specified AEAD algorithm. - */ -#define PSA_ALG_AEAD_WITH_SHORTENED_TAG(aead_alg, tag_length) \ - (((aead_alg) & ~(PSA_ALG_AEAD_TAG_LENGTH_MASK | \ - PSA_ALG_AEAD_AT_LEAST_THIS_LENGTH_FLAG)) | \ - ((tag_length) << PSA_AEAD_TAG_LENGTH_OFFSET & \ - PSA_ALG_AEAD_TAG_LENGTH_MASK)) - -/** Retrieve the tag length of a specified AEAD algorithm - * - * \param aead_alg An AEAD algorithm identifier (value of type - * #psa_algorithm_t such that #PSA_ALG_IS_AEAD(\p alg) - * is true). - * - * \return The tag length specified by the input algorithm. - * \return Unspecified if \p alg is not a supported - * AEAD algorithm or if \p tag_length is not valid - * for the specified AEAD algorithm. - */ -#define PSA_ALG_AEAD_GET_TAG_LENGTH(aead_alg) \ - (((aead_alg) & PSA_ALG_AEAD_TAG_LENGTH_MASK) >> \ - PSA_AEAD_TAG_LENGTH_OFFSET ) - -/** Calculate the corresponding AEAD algorithm with the default tag length. - * - * \param aead_alg An AEAD algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_AEAD(\p alg) is true). - * - * \return The corresponding AEAD algorithm with the default - * tag length for that algorithm. - */ -#define PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG(aead_alg) \ - ( \ - PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG_CASE(aead_alg, PSA_ALG_CCM) \ - PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG_CASE(aead_alg, PSA_ALG_GCM) \ - PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG_CASE(aead_alg, PSA_ALG_CHACHA20_POLY1305) \ - 0) -#define PSA_ALG_AEAD_WITH_DEFAULT_LENGTH_TAG_CASE(aead_alg, ref) \ - PSA_ALG_AEAD_WITH_SHORTENED_TAG(aead_alg, 0) == \ - PSA_ALG_AEAD_WITH_SHORTENED_TAG(ref, 0) ? \ - ref : - -/** Macro to build an AEAD minimum-tag-length wildcard algorithm. - * - * A minimum-tag-length AEAD wildcard algorithm permits all AEAD algorithms - * sharing the same base algorithm, and where the tag length of the specific - * algorithm is equal to or larger then the minimum tag length specified by the - * wildcard algorithm. - * - * \note When setting the minimum required tag length to less than the - * smallest tag length allowed by the base algorithm, this effectively - * becomes an 'any-tag-length-allowed' policy for that base algorithm. - * - * \param aead_alg An AEAD algorithm identifier (value of type - * #psa_algorithm_t such that - * #PSA_ALG_IS_AEAD(\p aead_alg) is true). - * \param min_tag_length Desired minimum length of the authentication tag in - * bytes. This must be at least 1 and at most the largest - * allowed tag length of the algorithm. - * - * \return The corresponding AEAD wildcard algorithm with the - * specified minimum length. - * \return Unspecified if \p aead_alg is not a supported - * AEAD algorithm or if \p min_tag_length is less than 1 - * or too large for the specified AEAD algorithm. - */ -#define PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG(aead_alg, min_tag_length) \ - ( PSA_ALG_AEAD_WITH_SHORTENED_TAG(aead_alg, min_tag_length) | \ - PSA_ALG_AEAD_AT_LEAST_THIS_LENGTH_FLAG ) - -#define PSA_ALG_RSA_PKCS1V15_SIGN_BASE ((psa_algorithm_t)0x06000200) -/** RSA PKCS#1 v1.5 signature with hashing. - * - * This is the signature scheme defined by RFC 8017 - * (PKCS#1: RSA Cryptography Specifications) under the name - * RSASSA-PKCS1-v1_5. - * - * \param hash_alg A hash algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_HASH(\p hash_alg) is true). - * This includes #PSA_ALG_ANY_HASH - * when specifying the algorithm in a usage policy. - * - * \return The corresponding RSA PKCS#1 v1.5 signature algorithm. - * \return Unspecified if \p hash_alg is not a supported - * hash algorithm. - */ -#define PSA_ALG_RSA_PKCS1V15_SIGN(hash_alg) \ - (PSA_ALG_RSA_PKCS1V15_SIGN_BASE | ((hash_alg) & PSA_ALG_HASH_MASK)) -/** Raw PKCS#1 v1.5 signature. - * - * The input to this algorithm is the DigestInfo structure used by - * RFC 8017 (PKCS#1: RSA Cryptography Specifications), §9.2 - * steps 3–6. - */ -#define PSA_ALG_RSA_PKCS1V15_SIGN_RAW PSA_ALG_RSA_PKCS1V15_SIGN_BASE -#define PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg) \ - (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PKCS1V15_SIGN_BASE) - -#define PSA_ALG_RSA_PSS_BASE ((psa_algorithm_t)0x06000300) -/** RSA PSS signature with hashing. - * - * This is the signature scheme defined by RFC 8017 - * (PKCS#1: RSA Cryptography Specifications) under the name - * RSASSA-PSS, with the message generation function MGF1, and with - * a salt length equal to the length of the hash. The specified - * hash algorithm is used to hash the input message, to create the - * salted hash, and for the mask generation. - * - * \param hash_alg A hash algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_HASH(\p hash_alg) is true). - * This includes #PSA_ALG_ANY_HASH - * when specifying the algorithm in a usage policy. - * - * \return The corresponding RSA PSS signature algorithm. - * \return Unspecified if \p hash_alg is not a supported - * hash algorithm. - */ -#define PSA_ALG_RSA_PSS(hash_alg) \ - (PSA_ALG_RSA_PSS_BASE | ((hash_alg) & PSA_ALG_HASH_MASK)) -#define PSA_ALG_IS_RSA_PSS(alg) \ - (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PSS_BASE) - -#define PSA_ALG_ECDSA_BASE ((psa_algorithm_t)0x06000600) -/** ECDSA signature with hashing. - * - * This is the ECDSA signature scheme defined by ANSI X9.62, - * with a random per-message secret number (*k*). - * - * The representation of the signature as a byte string consists of - * the concatentation of the signature values *r* and *s*. Each of - * *r* and *s* is encoded as an *N*-octet string, where *N* is the length - * of the base point of the curve in octets. Each value is represented - * in big-endian order (most significant octet first). - * - * \param hash_alg A hash algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_HASH(\p hash_alg) is true). - * This includes #PSA_ALG_ANY_HASH - * when specifying the algorithm in a usage policy. - * - * \return The corresponding ECDSA signature algorithm. - * \return Unspecified if \p hash_alg is not a supported - * hash algorithm. - */ -#define PSA_ALG_ECDSA(hash_alg) \ - (PSA_ALG_ECDSA_BASE | ((hash_alg) & PSA_ALG_HASH_MASK)) -/** ECDSA signature without hashing. - * - * This is the same signature scheme as #PSA_ALG_ECDSA(), but - * without specifying a hash algorithm. This algorithm may only be - * used to sign or verify a sequence of bytes that should be an - * already-calculated hash. Note that the input is padded with - * zeros on the left or truncated on the left as required to fit - * the curve size. - */ -#define PSA_ALG_ECDSA_ANY PSA_ALG_ECDSA_BASE -#define PSA_ALG_DETERMINISTIC_ECDSA_BASE ((psa_algorithm_t)0x06000700) -/** Deterministic ECDSA signature with hashing. - * - * This is the deterministic ECDSA signature scheme defined by RFC 6979. - * - * The representation of a signature is the same as with #PSA_ALG_ECDSA(). - * - * Note that when this algorithm is used for verification, signatures - * made with randomized ECDSA (#PSA_ALG_ECDSA(\p hash_alg)) with the - * same private key are accepted. In other words, - * #PSA_ALG_DETERMINISTIC_ECDSA(\p hash_alg) differs from - * #PSA_ALG_ECDSA(\p hash_alg) only for signature, not for verification. - * - * \param hash_alg A hash algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_HASH(\p hash_alg) is true). - * This includes #PSA_ALG_ANY_HASH - * when specifying the algorithm in a usage policy. - * - * \return The corresponding deterministic ECDSA signature - * algorithm. - * \return Unspecified if \p hash_alg is not a supported - * hash algorithm. - */ -#define PSA_ALG_DETERMINISTIC_ECDSA(hash_alg) \ - (PSA_ALG_DETERMINISTIC_ECDSA_BASE | ((hash_alg) & PSA_ALG_HASH_MASK)) -#define PSA_ALG_ECDSA_DETERMINISTIC_FLAG ((psa_algorithm_t)0x00000100) -#define PSA_ALG_IS_ECDSA(alg) \ - (((alg) & ~PSA_ALG_HASH_MASK & ~PSA_ALG_ECDSA_DETERMINISTIC_FLAG) == \ - PSA_ALG_ECDSA_BASE) -#define PSA_ALG_ECDSA_IS_DETERMINISTIC(alg) \ - (((alg) & PSA_ALG_ECDSA_DETERMINISTIC_FLAG) != 0) -#define PSA_ALG_IS_DETERMINISTIC_ECDSA(alg) \ - (PSA_ALG_IS_ECDSA(alg) && PSA_ALG_ECDSA_IS_DETERMINISTIC(alg)) -#define PSA_ALG_IS_RANDOMIZED_ECDSA(alg) \ - (PSA_ALG_IS_ECDSA(alg) && !PSA_ALG_ECDSA_IS_DETERMINISTIC(alg)) - -/** Whether the specified algorithm is a hash-and-sign algorithm. - * - * Hash-and-sign algorithms are asymmetric (public-key) signature algorithms - * structured in two parts: first the calculation of a hash in a way that - * does not depend on the key, then the calculation of a signature from the - * hash value and the key. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \p alg is a hash-and-sign algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \p alg is not a supported - * algorithm identifier. - */ -#define PSA_ALG_IS_HASH_AND_SIGN(alg) \ - (PSA_ALG_IS_RSA_PSS(alg) || PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg) || \ - PSA_ALG_IS_ECDSA(alg)) - -/** Get the hash used by a hash-and-sign signature algorithm. - * - * A hash-and-sign algorithm is a signature algorithm which is - * composed of two phases: first a hashing phase which does not use - * the key and produces a hash of the input message, then a signing - * phase which only uses the hash and the key and not the message - * itself. - * - * \param alg A signature algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_SIGN(\p alg) is true). - * - * \return The underlying hash algorithm if \p alg is a hash-and-sign - * algorithm. - * \return 0 if \p alg is a signature algorithm that does not - * follow the hash-and-sign structure. - * \return Unspecified if \p alg is not a signature algorithm or - * if it is not supported by the implementation. - */ -#define PSA_ALG_SIGN_GET_HASH(alg) \ - (PSA_ALG_IS_HASH_AND_SIGN(alg) ? \ - ((alg) & PSA_ALG_HASH_MASK) == 0 ? /*"raw" algorithm*/ 0 : \ - ((alg) & PSA_ALG_HASH_MASK) | PSA_ALG_CATEGORY_HASH : \ - 0) - -/** RSA PKCS#1 v1.5 encryption. - */ -#define PSA_ALG_RSA_PKCS1V15_CRYPT ((psa_algorithm_t)0x07000200) - -#define PSA_ALG_RSA_OAEP_BASE ((psa_algorithm_t)0x07000300) -/** RSA OAEP encryption. - * - * This is the encryption scheme defined by RFC 8017 - * (PKCS#1: RSA Cryptography Specifications) under the name - * RSAES-OAEP, with the message generation function MGF1. - * - * \param hash_alg The hash algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_HASH(\p hash_alg) is true) to use - * for MGF1. - * - * \return The corresponding RSA OAEP encryption algorithm. - * \return Unspecified if \p hash_alg is not a supported - * hash algorithm. - */ -#define PSA_ALG_RSA_OAEP(hash_alg) \ - (PSA_ALG_RSA_OAEP_BASE | ((hash_alg) & PSA_ALG_HASH_MASK)) -#define PSA_ALG_IS_RSA_OAEP(alg) \ - (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_OAEP_BASE) -#define PSA_ALG_RSA_OAEP_GET_HASH(alg) \ - (PSA_ALG_IS_RSA_OAEP(alg) ? \ - ((alg) & PSA_ALG_HASH_MASK) | PSA_ALG_CATEGORY_HASH : \ - 0) - -#define PSA_ALG_HKDF_BASE ((psa_algorithm_t)0x08000100) -/** Macro to build an HKDF algorithm. - * - * For example, `PSA_ALG_HKDF(PSA_ALG_SHA256)` is HKDF using HMAC-SHA-256. - * - * This key derivation algorithm uses the following inputs: - * - #PSA_KEY_DERIVATION_INPUT_SALT is the salt used in the "extract" step. - * It is optional; if omitted, the derivation uses an empty salt. - * - #PSA_KEY_DERIVATION_INPUT_SECRET is the secret key used in the "extract" step. - * - #PSA_KEY_DERIVATION_INPUT_INFO is the info string used in the "expand" step. - * You must pass #PSA_KEY_DERIVATION_INPUT_SALT before #PSA_KEY_DERIVATION_INPUT_SECRET. - * You may pass #PSA_KEY_DERIVATION_INPUT_INFO at any time after steup and before - * starting to generate output. - * - * \param hash_alg A hash algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_HASH(\p hash_alg) is true). - * - * \return The corresponding HKDF algorithm. - * \return Unspecified if \p hash_alg is not a supported - * hash algorithm. - */ -#define PSA_ALG_HKDF(hash_alg) \ - (PSA_ALG_HKDF_BASE | ((hash_alg) & PSA_ALG_HASH_MASK)) -/** Whether the specified algorithm is an HKDF algorithm. - * - * HKDF is a family of key derivation algorithms that are based on a hash - * function and the HMAC construction. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \c alg is an HKDF algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \c alg is not a supported - * key derivation algorithm identifier. - */ -#define PSA_ALG_IS_HKDF(alg) \ - (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_HKDF_BASE) -#define PSA_ALG_HKDF_GET_HASH(hkdf_alg) \ - (PSA_ALG_CATEGORY_HASH | ((hkdf_alg) & PSA_ALG_HASH_MASK)) - -#define PSA_ALG_TLS12_PRF_BASE ((psa_algorithm_t)0x08000200) -/** Macro to build a TLS-1.2 PRF algorithm. - * - * TLS 1.2 uses a custom pseudorandom function (PRF) for key schedule, - * specified in Section 5 of RFC 5246. It is based on HMAC and can be - * used with either SHA-256 or SHA-384. - * - * This key derivation algorithm uses the following inputs, which must be - * passed in the order given here: - * - #PSA_KEY_DERIVATION_INPUT_SEED is the seed. - * - #PSA_KEY_DERIVATION_INPUT_SECRET is the secret key. - * - #PSA_KEY_DERIVATION_INPUT_LABEL is the label. - * - * For the application to TLS-1.2 key expansion, the seed is the - * concatenation of ServerHello.Random + ClientHello.Random, - * and the label is "key expansion". - * - * For example, `PSA_ALG_TLS12_PRF(PSA_ALG_SHA256)` represents the - * TLS 1.2 PRF using HMAC-SHA-256. - * - * \param hash_alg A hash algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_HASH(\p hash_alg) is true). - * - * \return The corresponding TLS-1.2 PRF algorithm. - * \return Unspecified if \p hash_alg is not a supported - * hash algorithm. - */ -#define PSA_ALG_TLS12_PRF(hash_alg) \ - (PSA_ALG_TLS12_PRF_BASE | ((hash_alg) & PSA_ALG_HASH_MASK)) - -/** Whether the specified algorithm is a TLS-1.2 PRF algorithm. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \c alg is a TLS-1.2 PRF algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \c alg is not a supported - * key derivation algorithm identifier. - */ -#define PSA_ALG_IS_TLS12_PRF(alg) \ - (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_TLS12_PRF_BASE) -#define PSA_ALG_TLS12_PRF_GET_HASH(hkdf_alg) \ - (PSA_ALG_CATEGORY_HASH | ((hkdf_alg) & PSA_ALG_HASH_MASK)) - -#define PSA_ALG_TLS12_PSK_TO_MS_BASE ((psa_algorithm_t)0x08000300) -/** Macro to build a TLS-1.2 PSK-to-MasterSecret algorithm. - * - * In a pure-PSK handshake in TLS 1.2, the master secret is derived - * from the PreSharedKey (PSK) through the application of padding - * (RFC 4279, Section 2) and the TLS-1.2 PRF (RFC 5246, Section 5). - * The latter is based on HMAC and can be used with either SHA-256 - * or SHA-384. - * - * This key derivation algorithm uses the following inputs, which must be - * passed in the order given here: - * - #PSA_KEY_DERIVATION_INPUT_SEED is the seed. - * - #PSA_KEY_DERIVATION_INPUT_SECRET is the secret key. - * - #PSA_KEY_DERIVATION_INPUT_LABEL is the label. - * - * For the application to TLS-1.2, the seed (which is - * forwarded to the TLS-1.2 PRF) is the concatenation of the - * ClientHello.Random + ServerHello.Random, - * and the label is "master secret" or "extended master secret". - * - * For example, `PSA_ALG_TLS12_PSK_TO_MS(PSA_ALG_SHA256)` represents the - * TLS-1.2 PSK to MasterSecret derivation PRF using HMAC-SHA-256. - * - * \param hash_alg A hash algorithm (\c PSA_ALG_XXX value such that - * #PSA_ALG_IS_HASH(\p hash_alg) is true). - * - * \return The corresponding TLS-1.2 PSK to MS algorithm. - * \return Unspecified if \p hash_alg is not a supported - * hash algorithm. - */ -#define PSA_ALG_TLS12_PSK_TO_MS(hash_alg) \ - (PSA_ALG_TLS12_PSK_TO_MS_BASE | ((hash_alg) & PSA_ALG_HASH_MASK)) - -/** Whether the specified algorithm is a TLS-1.2 PSK to MS algorithm. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \c alg is a TLS-1.2 PSK to MS algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \c alg is not a supported - * key derivation algorithm identifier. - */ -#define PSA_ALG_IS_TLS12_PSK_TO_MS(alg) \ - (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_TLS12_PSK_TO_MS_BASE) -#define PSA_ALG_TLS12_PSK_TO_MS_GET_HASH(hkdf_alg) \ - (PSA_ALG_CATEGORY_HASH | ((hkdf_alg) & PSA_ALG_HASH_MASK)) - -#define PSA_ALG_KEY_DERIVATION_MASK ((psa_algorithm_t)0xfe00ffff) -#define PSA_ALG_KEY_AGREEMENT_MASK ((psa_algorithm_t)0xffff0000) - -/** Macro to build a combined algorithm that chains a key agreement with - * a key derivation. - * - * \param ka_alg A key agreement algorithm (\c PSA_ALG_XXX value such - * that #PSA_ALG_IS_KEY_AGREEMENT(\p ka_alg) is true). - * \param kdf_alg A key derivation algorithm (\c PSA_ALG_XXX value such - * that #PSA_ALG_IS_KEY_DERIVATION(\p kdf_alg) is true). - * - * \return The corresponding key agreement and derivation - * algorithm. - * \return Unspecified if \p ka_alg is not a supported - * key agreement algorithm or \p kdf_alg is not a - * supported key derivation algorithm. - */ -#define PSA_ALG_KEY_AGREEMENT(ka_alg, kdf_alg) \ - ((ka_alg) | (kdf_alg)) - -#define PSA_ALG_KEY_AGREEMENT_GET_KDF(alg) \ - (((alg) & PSA_ALG_KEY_DERIVATION_MASK) | PSA_ALG_CATEGORY_KEY_DERIVATION) - -#define PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) \ - (((alg) & PSA_ALG_KEY_AGREEMENT_MASK) | PSA_ALG_CATEGORY_KEY_AGREEMENT) - -/** Whether the specified algorithm is a raw key agreement algorithm. - * - * A raw key agreement algorithm is one that does not specify - * a key derivation function. - * Usually, raw key agreement algorithms are constructed directly with - * a \c PSA_ALG_xxx macro while non-raw key agreement algorithms are - * constructed with #PSA_ALG_KEY_AGREEMENT(). - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \p alg is a raw key agreement algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \p alg is not a supported - * algorithm identifier. - */ -#define PSA_ALG_IS_RAW_KEY_AGREEMENT(alg) \ - (PSA_ALG_IS_KEY_AGREEMENT(alg) && \ - PSA_ALG_KEY_AGREEMENT_GET_KDF(alg) == PSA_ALG_CATEGORY_KEY_DERIVATION) - -#define PSA_ALG_IS_KEY_DERIVATION_OR_AGREEMENT(alg) \ - ((PSA_ALG_IS_KEY_DERIVATION(alg) || PSA_ALG_IS_KEY_AGREEMENT(alg))) - -/** The finite-field Diffie-Hellman (DH) key agreement algorithm. - * - * The shared secret produced by key agreement is - * `g^{ab}` in big-endian format. - * It is `ceiling(m / 8)` bytes long where `m` is the size of the prime `p` - * in bits. - */ -#define PSA_ALG_FFDH ((psa_algorithm_t)0x09010000) - -/** Whether the specified algorithm is a finite field Diffie-Hellman algorithm. - * - * This includes the raw finite field Diffie-Hellman algorithm as well as - * finite-field Diffie-Hellman followed by any supporter key derivation - * algorithm. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \c alg is a finite field Diffie-Hellman algorithm, 0 otherwise. - * This macro may return either 0 or 1 if \c alg is not a supported - * key agreement algorithm identifier. - */ -#define PSA_ALG_IS_FFDH(alg) \ - (PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) == PSA_ALG_FFDH) - -/** The elliptic curve Diffie-Hellman (ECDH) key agreement algorithm. - * - * The shared secret produced by key agreement is the x-coordinate of - * the shared secret point. It is always `ceiling(m / 8)` bytes long where - * `m` is the bit size associated with the curve, i.e. the bit size of the - * order of the curve's coordinate field. When `m` is not a multiple of 8, - * the byte containing the most significant bit of the shared secret - * is padded with zero bits. The byte order is either little-endian - * or big-endian depending on the curve type. - * - * - For Montgomery curves (curve types `PSA_ECC_FAMILY_CURVEXXX`), - * the shared secret is the x-coordinate of `d_A Q_B = d_B Q_A` - * in little-endian byte order. - * The bit size is 448 for Curve448 and 255 for Curve25519. - * - For Weierstrass curves over prime fields (curve types - * `PSA_ECC_FAMILY_SECPXXX` and `PSA_ECC_FAMILY_BRAINPOOL_PXXX`), - * the shared secret is the x-coordinate of `d_A Q_B = d_B Q_A` - * in big-endian byte order. - * The bit size is `m = ceiling(log_2(p))` for the field `F_p`. - * - For Weierstrass curves over binary fields (curve types - * `PSA_ECC_FAMILY_SECTXXX`), - * the shared secret is the x-coordinate of `d_A Q_B = d_B Q_A` - * in big-endian byte order. - * The bit size is `m` for the field `F_{2^m}`. - */ -#define PSA_ALG_ECDH ((psa_algorithm_t)0x09020000) - -/** Whether the specified algorithm is an elliptic curve Diffie-Hellman - * algorithm. - * - * This includes the raw elliptic curve Diffie-Hellman algorithm as well as - * elliptic curve Diffie-Hellman followed by any supporter key derivation - * algorithm. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \c alg is an elliptic curve Diffie-Hellman algorithm, - * 0 otherwise. - * This macro may return either 0 or 1 if \c alg is not a supported - * key agreement algorithm identifier. - */ -#define PSA_ALG_IS_ECDH(alg) \ - (PSA_ALG_KEY_AGREEMENT_GET_BASE(alg) == PSA_ALG_ECDH) - -/** Whether the specified algorithm encoding is a wildcard. - * - * Wildcard values may only be used to set the usage algorithm field in - * a policy, not to perform an operation. - * - * \param alg An algorithm identifier (value of type #psa_algorithm_t). - * - * \return 1 if \c alg is a wildcard algorithm encoding. - * \return 0 if \c alg is a non-wildcard algorithm encoding (suitable for - * an operation). - * \return This macro may return either 0 or 1 if \c alg is not a supported - * algorithm identifier. - */ -#define PSA_ALG_IS_WILDCARD(alg) \ - (PSA_ALG_IS_HASH_AND_SIGN(alg) ? \ - PSA_ALG_SIGN_GET_HASH(alg) == PSA_ALG_ANY_HASH : \ - PSA_ALG_IS_MAC(alg) ? \ - (alg & PSA_ALG_MAC_AT_LEAST_THIS_LENGTH_FLAG) != 0 : \ - PSA_ALG_IS_AEAD(alg) ? \ - (alg & PSA_ALG_AEAD_AT_LEAST_THIS_LENGTH_FLAG) != 0 : \ - (alg) == PSA_ALG_ANY_HASH) - -/**@}*/ - -/** \defgroup key_lifetimes Key lifetimes - * @{ - */ - -/** The default lifetime for volatile keys. - * - * A volatile key only exists as long as the identifier to it is not destroyed. - * The key material is guaranteed to be erased on a power reset. - * - * A key with this lifetime is typically stored in the RAM area of the - * PSA Crypto subsystem. However this is an implementation choice. - * If an implementation stores data about the key in a non-volatile memory, - * it must release all the resources associated with the key and erase the - * key material if the calling application terminates. - */ -#define PSA_KEY_LIFETIME_VOLATILE ((psa_key_lifetime_t)0x00000000) - -/** The default lifetime for persistent keys. - * - * A persistent key remains in storage until it is explicitly destroyed or - * until the corresponding storage area is wiped. This specification does - * not define any mechanism to wipe a storage area, but integrations may - * provide their own mechanism (for example to perform a factory reset, - * to prepare for device refurbishment, or to uninstall an application). - * - * This lifetime value is the default storage area for the calling - * application. Integrations of Mbed TLS may support other persistent lifetimes. - * See ::psa_key_lifetime_t for more information. - */ -#define PSA_KEY_LIFETIME_PERSISTENT ((psa_key_lifetime_t)0x00000001) - -/** The persistence level of volatile keys. - * - * See ::psa_key_persistence_t for more information. - */ -#define PSA_KEY_PERSISTENCE_VOLATILE ((psa_key_persistence_t)0x00) - -/** The default persistence level for persistent keys. - * - * See ::psa_key_persistence_t for more information. - */ -#define PSA_KEY_PERSISTENCE_DEFAULT ((psa_key_persistence_t)0x01) - -/** A persistence level indicating that a key is never destroyed. - * - * See ::psa_key_persistence_t for more information. - */ -#define PSA_KEY_PERSISTENCE_READ_ONLY ((psa_key_persistence_t)0xff) - -#define PSA_KEY_LIFETIME_GET_PERSISTENCE(lifetime) \ - ((psa_key_persistence_t)((lifetime) & 0x000000ff)) - -#define PSA_KEY_LIFETIME_GET_LOCATION(lifetime) \ - ((psa_key_location_t)((lifetime) >> 8)) - -/** Whether a key lifetime indicates that the key is volatile. - * - * A volatile key is automatically destroyed by the implementation when - * the application instance terminates. In particular, a volatile key - * is automatically destroyed on a power reset of the device. - * - * A key that is not volatile is persistent. Persistent keys are - * preserved until the application explicitly destroys them or until an - * implementation-specific device management event occurs (for example, - * a factory reset). - * - * \param lifetime The lifetime value to query (value of type - * ::psa_key_lifetime_t). - * - * \return \c 1 if the key is volatile, otherwise \c 0. - */ -#define PSA_KEY_LIFETIME_IS_VOLATILE(lifetime) \ - (PSA_KEY_LIFETIME_GET_PERSISTENCE(lifetime) == \ - PSA_KEY_PERSISTENCE_VOLATILE) - -/** Construct a lifetime from a persistence level and a location. - * - * \param persistence The persistence level - * (value of type ::psa_key_persistence_t). - * \param location The location indicator - * (value of type ::psa_key_location_t). - * - * \return The constructed lifetime value. - */ -#define PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(persistence, location) \ - ((location) << 8 | (persistence)) - -/** The local storage area for persistent keys. - * - * This storage area is available on all systems that can store persistent - * keys without delegating the storage to a third-party cryptoprocessor. - * - * See ::psa_key_location_t for more information. - */ -#define PSA_KEY_LOCATION_LOCAL_STORAGE ((psa_key_location_t)0x000000) - -#define PSA_KEY_LOCATION_VENDOR_FLAG ((psa_key_location_t)0x800000) - -/** The minimum value for a key identifier chosen by the application. - */ -#define PSA_KEY_ID_USER_MIN ((psa_key_id_t)0x00000001) -/** The maximum value for a key identifier chosen by the application. - */ -#define PSA_KEY_ID_USER_MAX ((psa_key_id_t)0x3fffffff) -/** The minimum value for a key identifier chosen by the implementation. - */ -#define PSA_KEY_ID_VENDOR_MIN ((psa_key_id_t)0x40000000) -/** The maximum value for a key identifier chosen by the implementation. - */ -#define PSA_KEY_ID_VENDOR_MAX ((psa_key_id_t)0x7fffffff) - - -#if !defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER) - -#define MBEDTLS_SVC_KEY_ID_INIT ( (psa_key_id_t)0 ) -#define MBEDTLS_SVC_KEY_ID_GET_KEY_ID( id ) ( id ) -#define MBEDTLS_SVC_KEY_ID_GET_OWNER_ID( id ) ( 0 ) - -/** Utility to initialize a key identifier at runtime. - * - * \param unused Unused parameter. - * \param key_id Identifier of the key. - */ -static inline mbedtls_svc_key_id_t mbedtls_svc_key_id_make( - unsigned int unused, psa_key_id_t key_id ) -{ - (void)unused; - - return( key_id ); -} - -/** Compare two key identifiers. - * - * \param id1 First key identifier. - * \param id2 Second key identifier. - * - * \return Non-zero if the two key identifier are equal, zero otherwise. - */ -static inline int mbedtls_svc_key_id_equal( mbedtls_svc_key_id_t id1, - mbedtls_svc_key_id_t id2 ) -{ - return( id1 == id2 ); -} - -/** Check whether a key identifier is null. - * - * \param key Key identifier. - * - * \return Non-zero if the key identifier is null, zero otherwise. - */ -static inline int mbedtls_svc_key_id_is_null( mbedtls_svc_key_id_t key ) -{ - return( key == 0 ); -} - -#else /* MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER */ - -#define MBEDTLS_SVC_KEY_ID_INIT ( (mbedtls_svc_key_id_t){ 0, 0 } ) -#define MBEDTLS_SVC_KEY_ID_GET_KEY_ID( id ) ( ( id ).key_id ) -#define MBEDTLS_SVC_KEY_ID_GET_OWNER_ID( id ) ( ( id ).owner ) - -/** Utility to initialize a key identifier at runtime. - * - * \param owner_id Identifier of the key owner. - * \param key_id Identifier of the key. - */ -static inline mbedtls_svc_key_id_t mbedtls_svc_key_id_make( - mbedtls_key_owner_id_t owner_id, psa_key_id_t key_id ) -{ - return( (mbedtls_svc_key_id_t){ .key_id = key_id, - .owner = owner_id } ); -} - -/** Compare two key identifiers. - * - * \param id1 First key identifier. - * \param id2 Second key identifier. - * - * \return Non-zero if the two key identifier are equal, zero otherwise. - */ -static inline int mbedtls_svc_key_id_equal( mbedtls_svc_key_id_t id1, - mbedtls_svc_key_id_t id2 ) -{ - return( ( id1.key_id == id2.key_id ) && - mbedtls_key_owner_id_equal( id1.owner, id2.owner ) ); -} - -/** Check whether a key identifier is null. - * - * \param key Key identifier. - * - * \return Non-zero if the key identifier is null, zero otherwise. - */ -static inline int mbedtls_svc_key_id_is_null( mbedtls_svc_key_id_t key ) -{ - return( ( key.key_id == 0 ) && ( key.owner == 0 ) ); -} - -#endif /* !MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER */ - -/**@}*/ - -/** \defgroup policy Key policies - * @{ - */ - -/** Whether the key may be exported. - * - * A public key or the public part of a key pair may always be exported - * regardless of the value of this permission flag. - * - * If a key does not have export permission, implementations shall not - * allow the key to be exported in plain form from the cryptoprocessor, - * whether through psa_export_key() or through a proprietary interface. - * The key may however be exportable in a wrapped form, i.e. in a form - * where it is encrypted by another key. - */ -#define PSA_KEY_USAGE_EXPORT ((psa_key_usage_t)0x00000001) - -/** Whether the key may be copied. - * - * This flag allows the use of psa_copy_key() to make a copy of the key - * with the same policy or a more restrictive policy. - * - * For lifetimes for which the key is located in a secure element which - * enforce the non-exportability of keys, copying a key outside the secure - * element also requires the usage flag #PSA_KEY_USAGE_EXPORT. - * Copying the key inside the secure element is permitted with just - * #PSA_KEY_USAGE_COPY if the secure element supports it. - * For keys with the lifetime #PSA_KEY_LIFETIME_VOLATILE or - * #PSA_KEY_LIFETIME_PERSISTENT, the usage flag #PSA_KEY_USAGE_COPY - * is sufficient to permit the copy. - */ -#define PSA_KEY_USAGE_COPY ((psa_key_usage_t)0x00000002) - -/** Whether the key may be used to encrypt a message. - * - * This flag allows the key to be used for a symmetric encryption operation, - * for an AEAD encryption-and-authentication operation, - * or for an asymmetric encryption operation, - * if otherwise permitted by the key's type and policy. - * - * For a key pair, this concerns the public key. - */ -#define PSA_KEY_USAGE_ENCRYPT ((psa_key_usage_t)0x00000100) - -/** Whether the key may be used to decrypt a message. - * - * This flag allows the key to be used for a symmetric decryption operation, - * for an AEAD decryption-and-verification operation, - * or for an asymmetric decryption operation, - * if otherwise permitted by the key's type and policy. - * - * For a key pair, this concerns the private key. - */ -#define PSA_KEY_USAGE_DECRYPT ((psa_key_usage_t)0x00000200) - -/** Whether the key may be used to sign a message. - * - * This flag allows the key to be used for a MAC calculation operation - * or for an asymmetric signature operation, - * if otherwise permitted by the key's type and policy. - * - * For a key pair, this concerns the private key. - */ -#define PSA_KEY_USAGE_SIGN_HASH ((psa_key_usage_t)0x00001000) - -/** Whether the key may be used to verify a message signature. - * - * This flag allows the key to be used for a MAC verification operation - * or for an asymmetric signature verification operation, - * if otherwise permitted by by the key's type and policy. - * - * For a key pair, this concerns the public key. - */ -#define PSA_KEY_USAGE_VERIFY_HASH ((psa_key_usage_t)0x00002000) - -/** Whether the key may be used to derive other keys. - */ -#define PSA_KEY_USAGE_DERIVE ((psa_key_usage_t)0x00004000) - -/**@}*/ - -/** \defgroup derivation Key derivation - * @{ - */ - -/** A secret input for key derivation. - * - * This should be a key of type #PSA_KEY_TYPE_DERIVE - * (passed to psa_key_derivation_input_key()) - * or the shared secret resulting from a key agreement - * (obtained via psa_key_derivation_key_agreement()). - * - * The secret can also be a direct input (passed to - * key_derivation_input_bytes()). In this case, the derivation operation - * may not be used to derive keys: the operation will only allow - * psa_key_derivation_output_bytes(), not psa_key_derivation_output_key(). - */ -#define PSA_KEY_DERIVATION_INPUT_SECRET ((psa_key_derivation_step_t)0x0101) - -/** A label for key derivation. - * - * This should be a direct input. - * It can also be a key of type #PSA_KEY_TYPE_RAW_DATA. - */ -#define PSA_KEY_DERIVATION_INPUT_LABEL ((psa_key_derivation_step_t)0x0201) - -/** A salt for key derivation. - * - * This should be a direct input. - * It can also be a key of type #PSA_KEY_TYPE_RAW_DATA. - */ -#define PSA_KEY_DERIVATION_INPUT_SALT ((psa_key_derivation_step_t)0x0202) - -/** An information string for key derivation. - * - * This should be a direct input. - * It can also be a key of type #PSA_KEY_TYPE_RAW_DATA. - */ -#define PSA_KEY_DERIVATION_INPUT_INFO ((psa_key_derivation_step_t)0x0203) - -/** A seed for key derivation. - * - * This should be a direct input. - * It can also be a key of type #PSA_KEY_TYPE_RAW_DATA. - */ -#define PSA_KEY_DERIVATION_INPUT_SEED ((psa_key_derivation_step_t)0x0204) - -/**@}*/ - -#endif /* PSA_CRYPTO_VALUES_H */ diff --git a/third_party/mbedtls/ctr_drbg.c b/third_party/mbedtls/ctr_drbg.c index a0eedf877..92b615a5d 100644 --- a/third_party/mbedtls/ctr_drbg.c +++ b/third_party/mbedtls/ctr_drbg.c @@ -1,8 +1,15 @@ +#include "libc/stdio/stdio.h" +#include "libc/str/str.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/ctr_drbg.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" /* clang-format off */ asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); /* @@ -29,26 +36,17 @@ asm(".include \"libc/disclaimer.inc\""); * http://csrc.nist.gov/publications/nistpubs/800-90/SP800-90revised_March2007.pdf */ -#include "libc/str/str.h" -#include "libc/stdio/stdio.h" -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_CTR_DRBG_C) - -#include "third_party/mbedtls/ctr_drbg.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - -/* - * CTR_DRBG context initialization +/** + * \brief This function initializes the CTR_DRBG context, + * and prepares it for mbedtls_ctr_drbg_seed() + * or mbedtls_ctr_drbg_free(). + * + * \note The reseed interval is + * #MBEDTLS_CTR_DRBG_RESEED_INTERVAL by default. + * You can override it by calling + * mbedtls_ctr_drbg_set_reseed_interval(). + * + * \param ctx The CTR_DRBG context to initialize. */ void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx ) { @@ -68,12 +66,6 @@ void mbedtls_ctr_drbg_free( mbedtls_ctr_drbg_context *ctx ) { if( ctx == NULL ) return; - -#if defined(MBEDTLS_THREADING_C) - /* The mutex is initialized iff f_entropy is set. */ - if( ctx->f_entropy != NULL ) - mbedtls_mutex_free( &ctx->mutex ); -#endif mbedtls_aes_free( &ctx->aes_ctx ); mbedtls_platform_zeroize( ctx, sizeof( mbedtls_ctr_drbg_context ) ); ctx->reseed_interval = MBEDTLS_CTR_DRBG_RESEED_INTERVAL; @@ -337,19 +329,6 @@ exit: return( ret ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_ctr_drbg_update( mbedtls_ctr_drbg_context *ctx, - const unsigned char *additional, - size_t add_len ) -{ - /* MAX_INPUT would be more logical here, but we have to match - * block_cipher_df()'s limits since we can't propagate errors */ - if( add_len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) - add_len = MBEDTLS_CTR_DRBG_MAX_SEED_INPUT; - (void) mbedtls_ctr_drbg_update_ret( ctx, additional, add_len ); -} -#endif /* MBEDTLS_DEPRECATED_REMOVED */ - /* CTR_DRBG_Reseed with derivation function (SP 800-90A §10.2.1.4.2) * mbedtls_ctr_drbg_reseed(ctx, additional, len, nonce_len) * implements @@ -461,11 +440,6 @@ int mbedtls_ctr_drbg_seed( mbedtls_ctr_drbg_context *ctx, memset( key, 0, MBEDTLS_CTR_DRBG_KEYSIZE ); - /* The mutex is initialized iff f_entropy is set. */ -#if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_init( &ctx->mutex ); -#endif - mbedtls_aes_init( &ctx->aes_ctx ); ctx->f_entropy = f_entropy; @@ -596,22 +570,8 @@ exit: int mbedtls_ctr_drbg_random( void *p_rng, unsigned char *output, size_t output_len ) { - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; mbedtls_ctr_drbg_context *ctx = (mbedtls_ctr_drbg_context *) p_rng; - -#if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); -#endif - - ret = mbedtls_ctr_drbg_random_with_add( ctx, output, output_len, NULL, 0 ); - -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); -#endif - - return( ret ); + return mbedtls_ctr_drbg_random_with_add( ctx, output, output_len, NULL, 0 ); } #if defined(MBEDTLS_FS_IO) @@ -898,6 +858,5 @@ int mbedtls_ctr_drbg_self_test( int verbose ) return( 0 ); } -#endif /* MBEDTLS_SELF_TEST */ -#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_SELF_TEST */ diff --git a/third_party/mbedtls/ctr_drbg.h b/third_party/mbedtls/ctr_drbg.h index b4d96b739..9b0220d51 100644 --- a/third_party/mbedtls/ctr_drbg.h +++ b/third_party/mbedtls/ctr_drbg.h @@ -1,59 +1,9 @@ -/* clang-format off */ - -/** - * \file ctr_drbg.h - * - * \brief This file contains definitions and functions for the - * CTR_DRBG pseudorandom generator. - * - * CTR_DRBG is a standardized way of building a PRNG from a block-cipher - * in counter mode operation, as defined in NIST SP 800-90A: - * Recommendation for Random Number Generation Using Deterministic Random - * Bit Generators. - * - * The Mbed TLS implementation of CTR_DRBG uses AES-256 (default) or AES-128 - * (if \c MBEDTLS_CTR_DRBG_USE_128_BIT_KEY is enabled at compile time) - * as the underlying block cipher, with a derivation function. - * - * The security strength as defined in NIST SP 800-90A is - * 128 bits when AES-128 is used (\c MBEDTLS_CTR_DRBG_USE_128_BIT_KEY enabled) - * and 256 bits otherwise, provided that #MBEDTLS_CTR_DRBG_ENTROPY_LEN is - * kept at its default value (and not overridden in config.h) and that the - * DRBG instance is set up with default parameters. - * See the documentation of mbedtls_ctr_drbg_seed() for more - * information. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MBEDTLS_CTR_DRBG_H -#define MBEDTLS_CTR_DRBG_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - +#ifndef MBEDTLS_CTR_DRBG_H_ +#define MBEDTLS_CTR_DRBG_H_ #include "third_party/mbedtls/aes.h" - -#if defined(MBEDTLS_THREADING_C) -#include "third_party/mbedtls/threading.h" -#endif +#include "third_party/mbedtls/config.h" +COSMOPOLITAN_C_START_ +/* clang-format off */ #define MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED -0x0034 /**< The entropy source failed. */ #define MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG -0x0036 /**< The requested random buffer length is too big. */ @@ -143,10 +93,6 @@ #define MBEDTLS_CTR_DRBG_PR_ON 1 /**< Prediction resistance is enabled. */ -#ifdef __cplusplus -extern "C" { -#endif - #if MBEDTLS_CTR_DRBG_ENTROPY_LEN >= MBEDTLS_CTR_DRBG_KEYSIZE * 3 / 2 /** The default length of the nonce read from the entropy source. * @@ -200,33 +146,10 @@ typedef struct mbedtls_ctr_drbg_context /*!< The entropy callback function. */ void *p_entropy; /*!< The context for the entropy function. */ - -#if defined(MBEDTLS_THREADING_C) - /* Invariant: the mutex is initialized if and only if f_entropy != NULL. - * This means that the mutex is initialized during the initial seeding - * in mbedtls_ctr_drbg_seed() and freed in mbedtls_ctr_drbg_free(). - * - * Note that this invariant may change without notice. Do not rely on it - * and do not access the mutex directly in application code. - */ - mbedtls_threading_mutex_t mutex; -#endif } mbedtls_ctr_drbg_context; -/** - * \brief This function initializes the CTR_DRBG context, - * and prepares it for mbedtls_ctr_drbg_seed() - * or mbedtls_ctr_drbg_free(). - * - * \note The reseed interval is - * #MBEDTLS_CTR_DRBG_RESEED_INTERVAL by default. - * You can override it by calling - * mbedtls_ctr_drbg_set_reseed_interval(). - * - * \param ctx The CTR_DRBG context to initialize. - */ -void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx ); +void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context * ); /** * \brief This function seeds and sets up the CTR_DRBG @@ -273,15 +196,6 @@ void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx ); * make a second call to \p f_entropy. */ #endif -#if defined(MBEDTLS_THREADING_C) -/** - * \note When Mbed TLS is built with threading support, - * after this function returns successfully, - * it is safe to call mbedtls_ctr_drbg_random() - * from multiple threads. Other operations, including - * reseeding, are not thread-safe. - */ -#endif /* MBEDTLS_THREADING_C */ /** * - The \p custom string. * @@ -328,10 +242,10 @@ void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx ); * \return #MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED on failure. */ int mbedtls_ctr_drbg_seed( mbedtls_ctr_drbg_context *ctx, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len ); + int (*f_entropy)(void *, unsigned char *, size_t), + void *p_entropy, + const unsigned char *custom, + size_t len ); /** * \brief This function resets CTR_DRBG context to the state immediately @@ -508,16 +422,7 @@ int mbedtls_ctr_drbg_random_with_add( void *p_rng, * * This function automatically reseeds if the reseed counter is exceeded * or prediction resistance is enabled. - */ -#if defined(MBEDTLS_THREADING_C) -/** - * \note When Mbed TLS is built with threading support, - * it is safe to call mbedtls_ctr_drbg_random() - * from multiple threads. Other operations, including - * reseeding, are not thread-safe. - */ -#endif /* MBEDTLS_THREADING_C */ -/** + * * \param p_rng The CTR_DRBG context. This must be a pointer to a * #mbedtls_ctr_drbg_context structure. * \param output The buffer to fill. @@ -531,35 +436,6 @@ int mbedtls_ctr_drbg_random( void *p_rng, unsigned char *output, size_t output_len ); -#if ! defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief This function updates the state of the CTR_DRBG context. - * - * \deprecated Superseded by mbedtls_ctr_drbg_update_ret() - * in 2.16.0. - * - * \note If \p add_len is greater than - * #MBEDTLS_CTR_DRBG_MAX_SEED_INPUT, only the first - * #MBEDTLS_CTR_DRBG_MAX_SEED_INPUT Bytes are used. - * The remaining Bytes are silently discarded. - * - * \param ctx The CTR_DRBG context. - * \param additional The data to update the state with. - * \param add_len Length of \p additional data. - */ -MBEDTLS_DEPRECATED void mbedtls_ctr_drbg_update( - mbedtls_ctr_drbg_context *ctx, - const unsigned char *additional, - size_t add_len ); -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -#if defined(MBEDTLS_FS_IO) /** * \brief This function writes a seed file. * @@ -588,9 +464,6 @@ int mbedtls_ctr_drbg_write_seed_file( mbedtls_ctr_drbg_context *ctx, const char * seed file is too large. */ int mbedtls_ctr_drbg_update_seed_file( mbedtls_ctr_drbg_context *ctx, const char *path ); -#endif /* MBEDTLS_FS_IO */ - -#if defined(MBEDTLS_SELF_TEST) /** * \brief The CTR_DRBG checkup routine. @@ -600,10 +473,5 @@ int mbedtls_ctr_drbg_update_seed_file( mbedtls_ctr_drbg_context *ctx, const char */ int mbedtls_ctr_drbg_self_test( int verbose ); -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* ctr_drbg.h */ +COSMOPOLITAN_C_END_ +#endif /* CTR_DRBG_H_ */ diff --git a/third_party/mbedtls/debug.c b/third_party/mbedtls/debug.c index 50c23a4c1..e373fbba4 100644 --- a/third_party/mbedtls/debug.c +++ b/third_party/mbedtls/debug.c @@ -1,10 +1,15 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/debug.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * Debugging routines * @@ -24,37 +29,17 @@ asm(".include \"libc/disclaimer.inc\""); * limitations under the License. */ -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_DEBUG_C) - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#define mbedtls_time_t time_t -#define mbedtls_snprintf snprintf -#define mbedtls_vsnprintf vsnprintf -#endif - -#include "third_party/mbedtls/debug.h" -#include "third_party/mbedtls/error.h" - -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif - -#define DEBUG_BUF_SIZE 512 - -static int debug_threshold = 0; +char mbedtls_debug_threshold; void mbedtls_debug_set_threshold( int threshold ) { - debug_threshold = threshold; + mbedtls_debug_threshold = threshold; } +#if defined(MBEDTLS_DEBUG_C) + +#define DEBUG_BUF_SIZE 512 + /* * All calls to f_dbg must be made via this function */ @@ -62,18 +47,7 @@ static inline void debug_send_line( const mbedtls_ssl_context *ssl, int level, const char *file, int line, const char *str ) { - /* - * If in a threaded environment, we need a thread identifier. - * Since there is no portable way to get one, use the address of the ssl - * context instead, as it shouldn't be shared between threads. - */ -#if defined(MBEDTLS_THREADING_C) - char idstr[20 + DEBUG_BUF_SIZE]; /* 0x + 16 nibbles + ': ' */ - mbedtls_snprintf( idstr, sizeof( idstr ), "%p: %s", (void*)ssl, str ); - ssl->conf->f_dbg( ssl->conf->p_dbg, level, file, line, idstr ); -#else ssl->conf->f_dbg( ssl->conf->p_dbg, level, file, line, str ); -#endif } MBEDTLS_PRINTF_ATTRIBUTE(5, 6) @@ -88,7 +62,7 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, if( NULL == ssl || NULL == ssl->conf || NULL == ssl->conf->f_dbg || - level > debug_threshold ) + level > mbedtls_debug_threshold ) { return; } @@ -99,8 +73,7 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, if( ret >= 0 && ret < DEBUG_BUF_SIZE - 1 ) { - str[ret] = '\n'; - str[ret + 1] = '\0'; + str[ret] = '\0'; } debug_send_line( ssl, level, file, line, str ); @@ -115,7 +88,7 @@ void mbedtls_debug_print_ret( const mbedtls_ssl_context *ssl, int level, if( NULL == ssl || NULL == ssl->conf || NULL == ssl->conf->f_dbg || - level > debug_threshold ) + level > mbedtls_debug_threshold ) { return; } @@ -128,7 +101,7 @@ void mbedtls_debug_print_ret( const mbedtls_ssl_context *ssl, int level, if( ret == MBEDTLS_ERR_SSL_WANT_READ ) return; - mbedtls_snprintf( str, sizeof( str ), "%s() returned %d (-0x%04x)\n", + mbedtls_snprintf( str, sizeof( str ), "%s() returned %d (-0x%04x)", text, ret, (unsigned int) -ret ); debug_send_line( ssl, level, file, line, str ); @@ -145,12 +118,12 @@ void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, if( NULL == ssl || NULL == ssl->conf || NULL == ssl->conf->f_dbg || - level > debug_threshold ) + level > mbedtls_debug_threshold ) { return; } - mbedtls_snprintf( str + idx, sizeof( str ) - idx, "dumping '%s' (%u bytes)\n", + mbedtls_snprintf( str + idx, sizeof( str ) - idx, "dumping '%s' (%u bytes)", text, (unsigned int) len ); debug_send_line( ssl, level, file, line, str ); @@ -166,7 +139,7 @@ void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, { if( i > 0 ) { - mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %s\n", txt ); + mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %s", txt ); debug_send_line( ssl, level, file, line, str ); idx = 0; @@ -188,7 +161,7 @@ void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, for( /* i = i */; i % 16 != 0; i++ ) idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, " " ); - mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %s\n", txt ); + mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %s", txt ); debug_send_line( ssl, level, file, line, str ); } } @@ -203,7 +176,7 @@ void mbedtls_debug_print_ecp( const mbedtls_ssl_context *ssl, int level, if( NULL == ssl || NULL == ssl->conf || NULL == ssl->conf->f_dbg || - level > debug_threshold ) + level > mbedtls_debug_threshold ) { return; } @@ -218,8 +191,8 @@ void mbedtls_debug_print_ecp( const mbedtls_ssl_context *ssl, int level, #if defined(MBEDTLS_BIGNUM_C) void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, - const char *text, const mbedtls_mpi *X ) + const char *file, int line, + const char *text, const mbedtls_mpi *X ) { char str[DEBUG_BUF_SIZE]; int j, k, zeros = 1; @@ -229,11 +202,18 @@ void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, NULL == ssl->conf || NULL == ssl->conf->f_dbg || NULL == X || - level > debug_threshold ) + level > mbedtls_debug_threshold ) { return; } + /* TODO(jart): wut */ + if (!X->n) { + mbedtls_snprintf(str, sizeof(str), "value of '%s' has empty X->n", text); + debug_send_line(ssl, level, file, line, str); + return; + } + for( n = X->n - 1; n > 0; n-- ) if( X->p[n] != 0 ) break; @@ -242,7 +222,7 @@ void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, if( ( ( X->p[n] >> j ) & 1 ) != 0 ) break; - mbedtls_snprintf( str + idx, sizeof( str ) - idx, "value of '%s' (%d bits) is:\n", + mbedtls_snprintf( str + idx, sizeof( str ) - idx, "value of '%s' (%d bits) is:", text, (int) ( ( n * ( sizeof(mbedtls_mpi_uint) << 3 ) ) + j + 1 ) ); debug_send_line( ssl, level, file, line, str ); @@ -264,7 +244,6 @@ void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, { if( j > 0 ) { - mbedtls_snprintf( str + idx, sizeof( str ) - idx, "\n" ); debug_send_line( ssl, level, file, line, str ); idx = 0; } @@ -281,7 +260,6 @@ void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, if( zeros == 1 ) idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, " 00" ); - mbedtls_snprintf( str + idx, sizeof( str ) - idx, "\n" ); debug_send_line( ssl, level, file, line, str ); } #endif /* MBEDTLS_BIGNUM_C */ @@ -300,7 +278,7 @@ static void debug_print_pk( const mbedtls_ssl_context *ssl, int level, if( mbedtls_pk_debug( pk, items ) != 0 ) { debug_send_line( ssl, level, file, line, - "invalid PK context\n" ); + "invalid PK context" ); return; } @@ -321,7 +299,7 @@ static void debug_print_pk( const mbedtls_ssl_context *ssl, int level, else #endif debug_send_line( ssl, level, file, line, - "should not happen\n" ); + "should not happen" ); } } @@ -336,7 +314,7 @@ static void debug_print_line_by_line( const mbedtls_ssl_context *ssl, int level, { if( *cur == '\n' ) { - size_t len = cur - start + 1; + size_t len = cur - start; if( len > DEBUG_BUF_SIZE - 1 ) len = DEBUG_BUF_SIZE - 1; @@ -361,7 +339,7 @@ void mbedtls_debug_print_crt( const mbedtls_ssl_context *ssl, int level, NULL == ssl->conf || NULL == ssl->conf->f_dbg || NULL == crt || - level > debug_threshold ) + level > mbedtls_debug_threshold ) { return; } @@ -370,7 +348,7 @@ void mbedtls_debug_print_crt( const mbedtls_ssl_context *ssl, int level, { char buf[1024]; - mbedtls_snprintf( str, sizeof( str ), "%s #%d:\n", text, ++i ); + mbedtls_snprintf( str, sizeof( str ), "%s #%d:", text, ++i ); debug_send_line( ssl, level, file, line, str ); mbedtls_x509_crt_info( buf, sizeof( buf ) - 1, "", crt ); diff --git a/third_party/mbedtls/debug.h b/third_party/mbedtls/debug.h index d3f02f743..86b958d72 100644 --- a/third_party/mbedtls/debug.h +++ b/third_party/mbedtls/debug.h @@ -1,84 +1,81 @@ -/* clang-format off */ - -/** - * \file debug.h - * - * \brief Functions for controlling and providing debug output from the library. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_DEBUG_H #define MBEDTLS_DEBUG_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "third_party/mbedtls/ssl.h" - -#if defined(MBEDTLS_ECP_C) #include "third_party/mbedtls/ecp.h" -#endif +#include "third_party/mbedtls/ssl.h" +COSMOPOLITAN_C_START_ -#if defined(MBEDTLS_DEBUG_C) +#ifdef MBEDTLS_DEBUG_C -#define MBEDTLS_DEBUG_STRIP_PARENS( ... ) __VA_ARGS__ +#define MBEDTLS_DEBUG_STRIP_PARENS(...) __VA_ARGS__ -#define MBEDTLS_SSL_DEBUG_MSG( level, args ) \ - mbedtls_debug_print_msg( ssl, level, __FILE__, __LINE__, \ - MBEDTLS_DEBUG_STRIP_PARENS args ) +#define MBEDTLS_SSL_DEBUG_MSG(level, args) \ + do { \ + if (level <= mbedtls_debug_threshold) { \ + mbedtls_debug_print_msg(ssl, level, __FILE__, __LINE__, \ + MBEDTLS_DEBUG_STRIP_PARENS args); \ + } \ + } while (0) -#define MBEDTLS_SSL_DEBUG_RET( level, text, ret ) \ - mbedtls_debug_print_ret( ssl, level, __FILE__, __LINE__, text, ret ) +#define MBEDTLS_SSL_DEBUG_RET(level, text, ret) \ + do { \ + if (level <= mbedtls_debug_threshold) { \ + mbedtls_debug_print_ret(ssl, level, __FILE__, __LINE__, text, ret); \ + } \ + } while (0) -#define MBEDTLS_SSL_DEBUG_BUF( level, text, buf, len ) \ - mbedtls_debug_print_buf( ssl, level, __FILE__, __LINE__, text, buf, len ) +#define MBEDTLS_SSL_DEBUG_BUF(level, text, buf, len) \ + do { \ + if (level <= mbedtls_debug_threshold) { \ + mbedtls_debug_print_buf(ssl, level, __FILE__, __LINE__, text, buf, len); \ + } \ + } while (0) #if defined(MBEDTLS_BIGNUM_C) -#define MBEDTLS_SSL_DEBUG_MPI( level, text, X ) \ - mbedtls_debug_print_mpi( ssl, level, __FILE__, __LINE__, text, X ) +#define MBEDTLS_SSL_DEBUG_MPI(level, text, X) \ + do { \ + if (level <= mbedtls_debug_threshold) { \ + mbedtls_debug_print_mpi(ssl, level, __FILE__, __LINE__, text, X); \ + } \ + } while (0) #endif #if defined(MBEDTLS_ECP_C) -#define MBEDTLS_SSL_DEBUG_ECP( level, text, X ) \ - mbedtls_debug_print_ecp( ssl, level, __FILE__, __LINE__, text, X ) +#define MBEDTLS_SSL_DEBUG_ECP(level, text, X) \ + do { \ + if (level <= mbedtls_debug_threshold) { \ + mbedtls_debug_print_ecp(ssl, level, __FILE__, __LINE__, text, X); \ + } \ + } while (0) #endif #if defined(MBEDTLS_X509_CRT_PARSE_C) -#define MBEDTLS_SSL_DEBUG_CRT( level, text, crt ) \ - mbedtls_debug_print_crt( ssl, level, __FILE__, __LINE__, text, crt ) +#define MBEDTLS_SSL_DEBUG_CRT(level, text, crt) \ + do { \ + if (level <= mbedtls_debug_threshold) { \ + mbedtls_debug_print_crt(ssl, level, __FILE__, __LINE__, text, crt); \ + } \ + } while (0) #endif #if defined(MBEDTLS_ECDH_C) -#define MBEDTLS_SSL_DEBUG_ECDH( level, ecdh, attr ) \ - mbedtls_debug_printf_ecdh( ssl, level, __FILE__, __LINE__, ecdh, attr ) +#define MBEDTLS_SSL_DEBUG_ECDH(level, ecdh, attr) \ + do { \ + if (level <= mbedtls_debug_threshold) { \ + mbedtls_debug_printf_ecdh(ssl, level, __FILE__, __LINE__, ecdh, attr); \ + } \ + } while (0) #endif #else /* MBEDTLS_DEBUG_C */ -#define MBEDTLS_SSL_DEBUG_MSG( level, args ) do { } while( 0 ) -#define MBEDTLS_SSL_DEBUG_RET( level, text, ret ) do { } while( 0 ) -#define MBEDTLS_SSL_DEBUG_BUF( level, text, buf, len ) do { } while( 0 ) -#define MBEDTLS_SSL_DEBUG_MPI( level, text, X ) do { } while( 0 ) -#define MBEDTLS_SSL_DEBUG_ECP( level, text, X ) do { } while( 0 ) -#define MBEDTLS_SSL_DEBUG_CRT( level, text, crt ) do { } while( 0 ) -#define MBEDTLS_SSL_DEBUG_ECDH( level, ecdh, attr ) do { } while( 0 ) +#define MBEDTLS_SSL_DEBUG_MSG(level, args) ((void)0) +#define MBEDTLS_SSL_DEBUG_RET(level, text, ret) ((void)0) +#define MBEDTLS_SSL_DEBUG_BUF(level, text, buf, len) ((void)0) +#define MBEDTLS_SSL_DEBUG_MPI(level, text, X) ((void)0) +#define MBEDTLS_SSL_DEBUG_ECP(level, text, X) ((void)0) +#define MBEDTLS_SSL_DEBUG_CRT(level, text, crt) ((void)0) +#define MBEDTLS_SSL_DEBUG_ECDH(level, ecdh, attr) ((void)0) #endif /* MBEDTLS_DEBUG_C */ @@ -96,8 +93,8 @@ */ #if defined(__has_attribute) #if __has_attribute(format) -#define MBEDTLS_PRINTF_ATTRIBUTE(string_index, first_to_check) \ - __attribute__((format (printf, string_index, first_to_check))) +#define MBEDTLS_PRINTF_ATTRIBUTE(string_index, first_to_check) \ + __attribute__((format(printf, string_index, first_to_check))) #else /* __has_attribute(format) */ #define MBEDTLS_PRINTF_ATTRIBUTE(string_index, first_to_check) #endif /* __has_attribute(format) */ @@ -118,16 +115,14 @@ * This module provides debugging functions. */ #if defined(__MINGW32__) || (defined(_MSC_VER) && _MSC_VER < 1800) - #define MBEDTLS_PRINTF_SIZET PRIuPTR - #define MBEDTLS_PRINTF_LONGLONG "I64d" +#define MBEDTLS_PRINTF_SIZET PRIuPTR +#define MBEDTLS_PRINTF_LONGLONG "I64d" #else /* defined(__MINGW32__) || (defined(_MSC_VER) && _MSC_VER < 1800) */ - #define MBEDTLS_PRINTF_SIZET "zu" - #define MBEDTLS_PRINTF_LONGLONG "lld" +#define MBEDTLS_PRINTF_SIZET "zu" +#define MBEDTLS_PRINTF_LONGLONG "lld" #endif /* defined(__MINGW32__) || (defined(_MSC_VER) && _MSC_VER < 1800) */ -#ifdef __cplusplus -extern "C" { -#endif +extern char mbedtls_debug_threshold; /** * \brief Set the threshold error level to handle globally all debug output. @@ -144,7 +139,7 @@ extern "C" { * - 3 Informational * - 4 Verbose */ -void mbedtls_debug_set_threshold( int threshold ); +void mbedtls_debug_set_threshold(int threshold); /** * \brief Print a message to the debug output. This function is always used @@ -161,9 +156,9 @@ void mbedtls_debug_set_threshold( int threshold ); * \attention This function is intended for INTERNAL usage within the * library only. */ -void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, - const char *format, ... ) MBEDTLS_PRINTF_ATTRIBUTE(5, 6); +void mbedtls_debug_print_msg(const mbedtls_ssl_context *ssl, int level, + const char *file, int line, const char *format, + ...) MBEDTLS_PRINTF_ATTRIBUTE(5, 6); /** * \brief Print the return value of a function to the debug output. This @@ -180,9 +175,9 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, * \attention This function is intended for INTERNAL usage within the * library only. */ -void mbedtls_debug_print_ret( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, - const char *text, int ret ); +void mbedtls_debug_print_ret(const mbedtls_ssl_context *ssl, int level, + const char *file, int line, const char *text, + int ret); /** * \brief Output a buffer of size len bytes to the debug output. This function @@ -201,9 +196,9 @@ void mbedtls_debug_print_ret( const mbedtls_ssl_context *ssl, int level, * \attention This function is intended for INTERNAL usage within the * library only. */ -void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, const char *text, - const unsigned char *buf, size_t len ); +void mbedtls_debug_print_buf(const mbedtls_ssl_context *ssl, int level, + const char *file, int line, const char *text, + const unsigned char *buf, size_t len); #if defined(MBEDTLS_BIGNUM_C) /** @@ -222,9 +217,9 @@ void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, * \attention This function is intended for INTERNAL usage within the * library only. */ -void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, - const char *text, const mbedtls_mpi *X ); +void mbedtls_debug_print_mpi(const mbedtls_ssl_context *ssl, int level, + const char *file, int line, const char *text, + const mbedtls_mpi *X); #endif #if defined(MBEDTLS_ECP_C) @@ -244,9 +239,9 @@ void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, * \attention This function is intended for INTERNAL usage within the * library only. */ -void mbedtls_debug_print_ecp( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, - const char *text, const mbedtls_ecp_point *X ); +void mbedtls_debug_print_ecp(const mbedtls_ssl_context *ssl, int level, + const char *file, int line, const char *text, + const mbedtls_ecp_point *X); #endif #if defined(MBEDTLS_X509_CRT_PARSE_C) @@ -265,17 +260,16 @@ void mbedtls_debug_print_ecp( const mbedtls_ssl_context *ssl, int level, * \attention This function is intended for INTERNAL usage within the * library only. */ -void mbedtls_debug_print_crt( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, - const char *text, const mbedtls_x509_crt *crt ); +void mbedtls_debug_print_crt(const mbedtls_ssl_context *ssl, int level, + const char *file, int line, const char *text, + const mbedtls_x509_crt *crt); #endif #if defined(MBEDTLS_ECDH_C) -typedef enum -{ - MBEDTLS_DEBUG_ECDH_Q, - MBEDTLS_DEBUG_ECDH_QP, - MBEDTLS_DEBUG_ECDH_Z, +typedef enum { + MBEDTLS_DEBUG_ECDH_Q, + MBEDTLS_DEBUG_ECDH_QP, + MBEDTLS_DEBUG_ECDH_Z, } mbedtls_debug_ecdh_attr; /** @@ -294,14 +288,11 @@ typedef enum * \attention This function is intended for INTERNAL usage within the * library only. */ -void mbedtls_debug_printf_ecdh( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, - const mbedtls_ecdh_context *ecdh, - mbedtls_debug_ecdh_attr attr ); +void mbedtls_debug_printf_ecdh(const mbedtls_ssl_context *ssl, int level, + const char *file, int line, + const mbedtls_ecdh_context *ecdh, + mbedtls_debug_ecdh_attr attr); #endif -#ifdef __cplusplus -} -#endif - -#endif /* debug.h */ +COSMOPOLITAN_C_END_ +#endif /* MBEDTLS_DEBUG_H */ diff --git a/third_party/mbedtls/des.c b/third_party/mbedtls/des.c index 32543bb56..f89ad23c7 100644 --- a/third_party/mbedtls/des.c +++ b/third_party/mbedtls/des.c @@ -1,10 +1,17 @@ -/* clang-format off */ +#include "libc/stdio/stdio.h" +#include "libc/str/str.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/des.h" +#include "third_party/mbedtls/endian.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * FIPS-46-3 compliant Triple-DES implementation * @@ -30,46 +37,6 @@ asm(".include \"libc/disclaimer.inc\""); * http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf */ -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_DES_C) - -#include "third_party/mbedtls/des.h" -#include "third_party/mbedtls/platform_util.h" - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - -#if !defined(MBEDTLS_DES_ALT) - -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - /* * Expanded DES S-boxes */ @@ -810,8 +777,6 @@ int mbedtls_des3_crypt_cbc( mbedtls_des3_context *ctx, } #endif /* MBEDTLS_CIPHER_MODE_CBC */ -#endif /* !MBEDTLS_DES_ALT */ - #if defined(MBEDTLS_SELF_TEST) /* * DES and 3DES test vectors from: @@ -1058,5 +1023,3 @@ exit: } #endif /* MBEDTLS_SELF_TEST */ - -#endif /* MBEDTLS_DES_C */ diff --git a/third_party/mbedtls/des.h b/third_party/mbedtls/des.h index bd718772f..644169d3e 100644 --- a/third_party/mbedtls/des.h +++ b/third_party/mbedtls/des.h @@ -1,40 +1,7 @@ -/* clang-format off */ - -/** - * \file des.h - * - * \brief DES block cipher - * - * \warning DES is considered a weak cipher and its use constitutes a - * security risk. We recommend considering stronger ciphers - * instead. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ #ifndef MBEDTLS_DES_H #define MBEDTLS_DES_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - +/* clang-format off */ #define MBEDTLS_DES_ENCRYPT 1 #define MBEDTLS_DES_DECRYPT 0 @@ -76,8 +43,6 @@ typedef struct mbedtls_des3_context } mbedtls_des3_context; -#else /* MBEDTLS_DES_ALT */ -/* #include "third_party/mbedtls/des_alt.h" */ #endif /* MBEDTLS_DES_ALT */ /** diff --git a/third_party/mbedtls/dhm.c b/third_party/mbedtls/dhm.c index bcb55d53c..f71ade010 100644 --- a/third_party/mbedtls/dhm.c +++ b/third_party/mbedtls/dhm.c @@ -1,10 +1,18 @@ -/* clang-format off */ +#include "libc/calls/calls.h" +#include "third_party/mbedtls/asn1.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/dhm.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * Diffie-Hellman-Merkle key exchange * @@ -33,32 +41,8 @@ asm(".include \"libc/disclaimer.inc\""); * */ -#include "libc/calls/calls.h" -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_DHM_C) -#include "third_party/mbedtls/dhm.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_PEM_PARSE_C) -#include "third_party/mbedtls/pem.h" -#endif - -#if defined(MBEDTLS_ASN1_PARSE_C) -#include "third_party/mbedtls/asn1.h" -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - #if !defined(MBEDTLS_DHM_ALT) #define DHM_VALIDATE_RET( cond ) \ diff --git a/third_party/mbedtls/dhm.h b/third_party/mbedtls/dhm.h index 39ba6d8ee..477ddd575 100644 --- a/third_party/mbedtls/dhm.h +++ b/third_party/mbedtls/dhm.h @@ -1,76 +1,8 @@ -/* clang-format off */ - -/** - * \file dhm.h - * - * \brief This file contains Diffie-Hellman-Merkle (DHM) key exchange - * definitions and functions. - * - * Diffie-Hellman-Merkle (DHM) key exchange is defined in - * RFC-2631: Diffie-Hellman Key Agreement Method and - * Public-Key Cryptography Standards (PKCS) #3: Diffie - * Hellman Key Agreement Standard. - * - * RFC-3526: More Modular Exponential (MODP) Diffie-Hellman groups for - * Internet Key Exchange (IKE) defines a number of standardized - * Diffie-Hellman groups for IKE. - * - * RFC-5114: Additional Diffie-Hellman Groups for Use with IETF - * Standards defines a number of standardized Diffie-Hellman - * groups that can be used. - * - * \warning The security of the DHM key exchange relies on the proper choice - * of prime modulus - optimally, it should be a safe prime. The usage - * of non-safe primes both decreases the difficulty of the underlying - * discrete logarithm problem and can lead to small subgroup attacks - * leaking private exponent bits when invalid public keys are used - * and not detected. This is especially relevant if the same DHM - * parameters are reused for multiple key exchanges as in static DHM, - * while the criticality of small-subgroup attacks is lower for - * ephemeral DHM. - * - * \warning For performance reasons, the code does neither perform primality - * nor safe primality tests, nor the expensive checks for invalid - * subgroups. Moreover, even if these were performed, non-standardized - * primes cannot be trusted because of the possibility of backdoors - * that can't be effectively checked for. - * - * \warning Diffie-Hellman-Merkle is therefore a security risk when not using - * standardized primes generated using a trustworthy ("nothing up - * my sleeve") method, such as the RFC 3526 / 7919 primes. In the TLS - * protocol, DH parameters need to be negotiated, so using the default - * primes systematically is not always an option. If possible, use - * Elliptic Curve Diffie-Hellman (ECDH), which has better performance, - * and for which the TLS protocol mandates the use of standard - * parameters. - * - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - #ifndef MBEDTLS_DHM_H #define MBEDTLS_DHM_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif #include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/config.h" +/* clang-format off */ /* * DHM Error codes diff --git a/third_party/mbedtls/ecdh.c b/third_party/mbedtls/ecdh.c index f3c40423e..5fdc54f26 100644 --- a/third_party/mbedtls/ecdh.c +++ b/third_party/mbedtls/ecdh.c @@ -1,10 +1,15 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/ecdh.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * Elliptic curve Diffie-Hellman * @@ -31,16 +36,8 @@ asm(".include \"libc/disclaimer.inc\""); * RFC 4492 */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_ECDH_C) -#include "third_party/mbedtls/ecdh.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -/* Parameter validation macros based on platform_util.h */ #define ECDH_VALIDATE_RET( cond ) \ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_ECP_BAD_INPUT_DATA ) #define ECDH_VALIDATE( cond ) \ diff --git a/third_party/mbedtls/ecdh.h b/third_party/mbedtls/ecdh.h index 3d1b01be5..93215bae6 100644 --- a/third_party/mbedtls/ecdh.h +++ b/third_party/mbedtls/ecdh.h @@ -1,51 +1,9 @@ -/* clang-format off */ - -/** - * \file ecdh.h - * - * \brief This file contains ECDH definitions and functions. - * - * The Elliptic Curve Diffie-Hellman (ECDH) protocol is an anonymous - * key agreement protocol allowing two parties to establish a shared - * secret over an insecure channel. Each party must have an - * elliptic-curve public–private key pair. - * - * For more information, see NIST SP 800-56A Rev. 2: Recommendation for - * Pair-Wise Key Establishment Schemes Using Discrete Logarithm - * Cryptography. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - #ifndef MBEDTLS_ECDH_H #define MBEDTLS_ECDH_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/ecp.h" - -#if defined(MBEDTLS_ECDH_VARIANT_EVEREST_ENABLED) -#undef MBEDTLS_ECDH_LEGACY_CONTEXT -/* #include "everest/everest.h" */ -#endif +#include "third_party/mbedtls/everest.h" +/* clang-format off */ #ifdef __cplusplus extern "C" { @@ -134,11 +92,7 @@ typedef struct mbedtls_ecdh_context context in use is specified by the \c var field. */ #if defined(MBEDTLS_ECP_RESTARTABLE) - uint8_t restart_enabled; /*!< The flag for restartable mode. Functions of - an alternative implementation not supporting - restartable mode must return - MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED error - if this flag is set. */ + uint8_t restart_enabled; /*!< The flag for restartable mode. */ #endif /* MBEDTLS_ECP_RESTARTABLE */ #endif /* MBEDTLS_ECDH_LEGACY_CONTEXT */ } @@ -425,7 +379,6 @@ int mbedtls_ecdh_calc_secret( mbedtls_ecdh_context *ctx, size_t *olen, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); -#if defined(MBEDTLS_ECP_RESTARTABLE) /** * \brief This function enables restartable EC computations for this * context. (Default: disabled.) @@ -439,7 +392,6 @@ int mbedtls_ecdh_calc_secret( mbedtls_ecdh_context *ctx, size_t *olen, * \param ctx The ECDH context to use. This must be initialized. */ void mbedtls_ecdh_enable_restart( mbedtls_ecdh_context *ctx ); -#endif /* MBEDTLS_ECP_RESTARTABLE */ #ifdef __cplusplus } diff --git a/third_party/mbedtls/ecdsa.c b/third_party/mbedtls/ecdsa.c index 3a766e63a..46e20d473 100644 --- a/third_party/mbedtls/ecdsa.c +++ b/third_party/mbedtls/ecdsa.c @@ -1,10 +1,17 @@ -/* clang-format off */ +#include "third_party/mbedtls/asn1write.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/ecdsa.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/hmac_drbg.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * Elliptic curve DSA * @@ -30,28 +37,8 @@ asm(".include \"libc/disclaimer.inc\""); * SEC1 http://www.secg.org/index.php?action=secg,docs_secg */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_ECDSA_C) -#include "third_party/mbedtls/ecdsa.h" -#include "third_party/mbedtls/asn1write.h" - - -#if defined(MBEDTLS_ECDSA_DETERMINISTIC) -#include "third_party/mbedtls/hmac_drbg.h" -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - /* Parameter validation macros based on platform_util.h */ #define ECDSA_VALIDATE_RET( cond ) \ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_ECP_BAD_INPUT_DATA ) @@ -558,23 +545,6 @@ cleanup: * Deterministic signature wrappers */ -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -int mbedtls_ecdsa_sign_det( mbedtls_ecp_group *grp, mbedtls_mpi *r, - mbedtls_mpi *s, const mbedtls_mpi *d, - const unsigned char *buf, size_t blen, - mbedtls_md_type_t md_alg ) -{ - ECDSA_VALIDATE_RET( grp != NULL ); - ECDSA_VALIDATE_RET( r != NULL ); - ECDSA_VALIDATE_RET( s != NULL ); - ECDSA_VALIDATE_RET( d != NULL ); - ECDSA_VALIDATE_RET( buf != NULL || blen == 0 ); - - return( ecdsa_sign_det_restartable( grp, r, s, d, buf, blen, md_alg, - NULL, NULL, NULL ) ); -} -#endif /* MBEDTLS_DEPRECATED_REMOVED */ - int mbedtls_ecdsa_sign_det_ext( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s, const mbedtls_mpi *d, const unsigned char *buf, size_t blen, @@ -816,22 +786,6 @@ int mbedtls_ecdsa_write_signature( mbedtls_ecdsa_context *ctx, ctx, md_alg, hash, hlen, sig, slen, f_rng, p_rng, NULL ) ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) && \ - defined(MBEDTLS_ECDSA_DETERMINISTIC) -int mbedtls_ecdsa_write_signature_det( mbedtls_ecdsa_context *ctx, - const unsigned char *hash, size_t hlen, - unsigned char *sig, size_t *slen, - mbedtls_md_type_t md_alg ) -{ - ECDSA_VALIDATE_RET( ctx != NULL ); - ECDSA_VALIDATE_RET( hash != NULL ); - ECDSA_VALIDATE_RET( sig != NULL ); - ECDSA_VALIDATE_RET( slen != NULL ); - return( mbedtls_ecdsa_write_signature( ctx, md_alg, hash, hlen, sig, slen, - NULL, NULL ) ); -} -#endif - /* * Read and check signature */ diff --git a/third_party/mbedtls/ecdsa.h b/third_party/mbedtls/ecdsa.h index 0225c76e1..4dd088591 100644 --- a/third_party/mbedtls/ecdsa.h +++ b/third_party/mbedtls/ecdsa.h @@ -1,45 +1,10 @@ -/* clang-format off */ - -/** - * \file ecdsa.h - * - * \brief This file contains ECDSA definitions and functions. - * - * The Elliptic Curve Digital Signature Algorithm (ECDSA) is defined in - * Standards for Efficient Cryptography Group (SECG): - * SEC1 Elliptic Curve Cryptography. - * The use of ECDSA for TLS is defined in RFC-4492: Elliptic Curve - * Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS). - * - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MBEDTLS_ECDSA_H -#define MBEDTLS_ECDSA_H - -#if !defined(MBEDTLS_CONFIG_FILE) +#ifndef MBEDTLS_ECDSA_H_ +#define MBEDTLS_ECDSA_H_ #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/ecp.h" #include "third_party/mbedtls/md.h" +COSMOPOLITAN_C_START_ +/* clang-format off */ /** * \brief Maximum ECDSA signature size for a given curve bit size @@ -66,10 +31,6 @@ /** The maximal size of an ECDSA signature in Bytes. */ #define MBEDTLS_ECDSA_MAX_LEN MBEDTLS_ECDSA_MAX_SIG_LEN( MBEDTLS_ECP_MAX_BITS ) -#ifdef __cplusplus -extern "C" { -#endif - /** * \brief The ECDSA context structure. * @@ -95,14 +56,12 @@ typedef struct mbedtls_ecdsa_restart_ver mbedtls_ecdsa_restart_ver_ctx; */ typedef struct mbedtls_ecdsa_restart_sig mbedtls_ecdsa_restart_sig_ctx; -#if defined(MBEDTLS_ECDSA_DETERMINISTIC) /** * \brief Internal restart context for ecdsa_sign_det() * * \note Opaque struct, defined in ecdsa.c */ typedef struct mbedtls_ecdsa_restart_det mbedtls_ecdsa_restart_det_ctx; -#endif /** * \brief General context for resuming ECDSA operations @@ -175,68 +134,6 @@ int mbedtls_ecdsa_sign( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s, const mbedtls_mpi *d, const unsigned char *buf, size_t blen, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); -#if defined(MBEDTLS_ECDSA_DETERMINISTIC) -#if ! defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief This function computes the ECDSA signature of a - * previously-hashed message, deterministic version. - * - * For more information, see RFC-6979: Deterministic - * Usage of the Digital Signature Algorithm (DSA) and Elliptic - * Curve Digital Signature Algorithm (ECDSA). - * - * \note If the bitlength of the message hash is larger than the - * bitlength of the group order, then the hash is truncated as - * defined in Standards for Efficient Cryptography Group - * (SECG): SEC1 Elliptic Curve Cryptography, section - * 4.1.3, step 5. - * - * \warning Since the output of the internal RNG is always the same for - * the same key and message, this limits the efficiency of - * blinding and leaks information through side channels. For - * secure behavior use mbedtls_ecdsa_sign_det_ext() instead. - * - * (Optimally the blinding is a random value that is different - * on every execution. In this case the blinding is still - * random from the attackers perspective, but is the same on - * each execution. This means that this blinding does not - * prevent attackers from recovering secrets by combining - * several measurement traces, but may prevent some attacks - * that exploit relationships between secret data.) - * - * \see ecp.h - * - * \param grp The context for the elliptic curve to use. - * This must be initialized and have group parameters - * set, for example through mbedtls_ecp_group_load(). - * \param r The MPI context in which to store the first part - * the signature. This must be initialized. - * \param s The MPI context in which to store the second part - * the signature. This must be initialized. - * \param d The private signing key. This must be initialized - * and setup, for example through mbedtls_ecp_gen_privkey(). - * \param buf The hashed content to be signed. This must be a readable - * buffer of length \p blen Bytes. It may be \c NULL if - * \p blen is zero. - * \param blen The length of \p buf in Bytes. - * \param md_alg The hash algorithm used to hash the original data. - * - * \return \c 0 on success. - * \return An \c MBEDTLS_ERR_ECP_XXX or \c MBEDTLS_MPI_XXX - * error code on failure. - */ -int mbedtls_ecdsa_sign_det( mbedtls_ecp_group *grp, mbedtls_mpi *r, - mbedtls_mpi *s, const mbedtls_mpi *d, - const unsigned char *buf, size_t blen, - mbedtls_md_type_t md_alg ) MBEDTLS_DEPRECATED; -#undef MBEDTLS_DEPRECATED -#endif /* MBEDTLS_DEPRECATED_REMOVED */ - /** * \brief This function computes the ECDSA signature of a * previously-hashed message, deterministic version. @@ -282,7 +179,6 @@ int mbedtls_ecdsa_sign_det_ext( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_md_type_t md_alg, int (*f_rng_blind)(void *, unsigned char *, size_t), void *p_rng_blind ); -#endif /* MBEDTLS_ECDSA_DETERMINISTIC */ /** * \brief This function verifies the ECDSA signature of a @@ -423,64 +319,6 @@ int mbedtls_ecdsa_write_signature_restartable( mbedtls_ecdsa_context *ctx, void *p_rng, mbedtls_ecdsa_restart_ctx *rs_ctx ); -#if defined(MBEDTLS_ECDSA_DETERMINISTIC) -#if ! defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief This function computes an ECDSA signature and writes - * it to a buffer, serialized as defined in RFC-4492: - * Elliptic Curve Cryptography (ECC) Cipher Suites for - * Transport Layer Security (TLS). - * - * The deterministic version is defined in RFC-6979: - * Deterministic Usage of the Digital Signature Algorithm (DSA) - * and Elliptic Curve Digital Signature Algorithm (ECDSA). - * - * \warning It is not thread-safe to use the same context in - * multiple threads. - * - * \note If the bitlength of the message hash is larger than the - * bitlength of the group order, then the hash is truncated as - * defined in Standards for Efficient Cryptography Group - * (SECG): SEC1 Elliptic Curve Cryptography, section - * 4.1.3, step 5. - * - * \see ecp.h - * - * \deprecated Superseded by mbedtls_ecdsa_write_signature() in - * Mbed TLS version 2.0 and later. - * - * \param ctx The ECDSA context to use. This must be initialized - * and have a group and private key bound to it, for example - * via mbedtls_ecdsa_genkey() or mbedtls_ecdsa_from_keypair(). - * \param hash The message hash to be signed. This must be a readable - * buffer of length \p blen Bytes. - * \param hlen The length of the hash \p hash in Bytes. - * \param sig The buffer to which to write the signature. This must be a - * writable buffer of length at least twice as large as the - * size of the curve used, plus 9. For example, 73 Bytes if - * a 256-bit curve is used. A buffer length of - * #MBEDTLS_ECDSA_MAX_LEN is always safe. - * \param slen The address at which to store the actual length of - * the signature written. Must not be \c NULL. - * \param md_alg The message digest that was used to hash the message. - * - * \return \c 0 on success. - * \return An \c MBEDTLS_ERR_ECP_XXX, \c MBEDTLS_ERR_MPI_XXX or - * \c MBEDTLS_ERR_ASN1_XXX error code on failure. - */ -int mbedtls_ecdsa_write_signature_det( mbedtls_ecdsa_context *ctx, - const unsigned char *hash, size_t hlen, - unsigned char *sig, size_t *slen, - mbedtls_md_type_t md_alg ) MBEDTLS_DEPRECATED; -#undef MBEDTLS_DEPRECATED -#endif /* MBEDTLS_DEPRECATED_REMOVED */ -#endif /* MBEDTLS_ECDSA_DETERMINISTIC */ - /** * \brief This function reads and verifies an ECDSA signature. * @@ -621,8 +459,5 @@ void mbedtls_ecdsa_restart_init( mbedtls_ecdsa_restart_ctx *ctx ); void mbedtls_ecdsa_restart_free( mbedtls_ecdsa_restart_ctx *ctx ); #endif /* MBEDTLS_ECP_RESTARTABLE */ -#ifdef __cplusplus -} -#endif - -#endif /* ecdsa.h */ +COSMOPOLITAN_C_END_ +#endif /* ECDSA_H_ */ diff --git a/third_party/mbedtls/ecjpake.c b/third_party/mbedtls/ecjpake.c deleted file mode 100644 index c97d7a0d3..000000000 --- a/third_party/mbedtls/ecjpake.c +++ /dev/null @@ -1,1151 +0,0 @@ -/* clang-format off */ - -asm(".ident\t\"\\n\\n\ -Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); -asm(".include \"libc/disclaimer.inc\""); - -/* - * Elliptic curve J-PAKE - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * References in the code are to the Thread v1.0 Specification, - * available to members of the Thread Group http://threadgroup.org/ - */ - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_ECJPAKE_C) - -#include "third_party/mbedtls/ecjpake.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if !defined(MBEDTLS_ECJPAKE_ALT) - -/* Parameter validation macros based on platform_util.h */ -#define ECJPAKE_VALIDATE_RET( cond ) \ - MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_ECP_BAD_INPUT_DATA ) -#define ECJPAKE_VALIDATE( cond ) \ - MBEDTLS_INTERNAL_VALIDATE( cond ) - -/* - * Convert a mbedtls_ecjpake_role to identifier string - */ -static const char * const ecjpake_id[] = { - "client", - "server" -}; - -#define ID_MINE ( ecjpake_id[ ctx->role ] ) -#define ID_PEER ( ecjpake_id[ 1 - ctx->role ] ) - -/* - * Initialize context - */ -void mbedtls_ecjpake_init( mbedtls_ecjpake_context *ctx ) -{ - ECJPAKE_VALIDATE( ctx != NULL ); - - ctx->md_info = NULL; - mbedtls_ecp_group_init( &ctx->grp ); - ctx->point_format = MBEDTLS_ECP_PF_UNCOMPRESSED; - - mbedtls_ecp_point_init( &ctx->Xm1 ); - mbedtls_ecp_point_init( &ctx->Xm2 ); - mbedtls_ecp_point_init( &ctx->Xp1 ); - mbedtls_ecp_point_init( &ctx->Xp2 ); - mbedtls_ecp_point_init( &ctx->Xp ); - - mbedtls_mpi_init( &ctx->xm1 ); - mbedtls_mpi_init( &ctx->xm2 ); - mbedtls_mpi_init( &ctx->s ); -} - -/* - * Free context - */ -void mbedtls_ecjpake_free( mbedtls_ecjpake_context *ctx ) -{ - if( ctx == NULL ) - return; - - ctx->md_info = NULL; - mbedtls_ecp_group_free( &ctx->grp ); - - mbedtls_ecp_point_free( &ctx->Xm1 ); - mbedtls_ecp_point_free( &ctx->Xm2 ); - mbedtls_ecp_point_free( &ctx->Xp1 ); - mbedtls_ecp_point_free( &ctx->Xp2 ); - mbedtls_ecp_point_free( &ctx->Xp ); - - mbedtls_mpi_free( &ctx->xm1 ); - mbedtls_mpi_free( &ctx->xm2 ); - mbedtls_mpi_free( &ctx->s ); -} - -/* - * Setup context - */ -int mbedtls_ecjpake_setup( mbedtls_ecjpake_context *ctx, - mbedtls_ecjpake_role role, - mbedtls_md_type_t hash, - mbedtls_ecp_group_id curve, - const unsigned char *secret, - size_t len ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - - ECJPAKE_VALIDATE_RET( ctx != NULL ); - ECJPAKE_VALIDATE_RET( role == MBEDTLS_ECJPAKE_CLIENT || - role == MBEDTLS_ECJPAKE_SERVER ); - ECJPAKE_VALIDATE_RET( secret != NULL || len == 0 ); - - ctx->role = role; - - if( ( ctx->md_info = mbedtls_md_info_from_type( hash ) ) == NULL ) - return( MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE ); - - MBEDTLS_MPI_CHK( mbedtls_ecp_group_load( &ctx->grp, curve ) ); - - MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &ctx->s, secret, len ) ); - -cleanup: - if( ret != 0 ) - mbedtls_ecjpake_free( ctx ); - - return( ret ); -} - -/* - * Check if context is ready for use - */ -int mbedtls_ecjpake_check( const mbedtls_ecjpake_context *ctx ) -{ - ECJPAKE_VALIDATE_RET( ctx != NULL ); - - if( ctx->md_info == NULL || - ctx->grp.id == MBEDTLS_ECP_DP_NONE || - ctx->s.p == NULL ) - { - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - } - - return( 0 ); -} - -/* - * Write a point plus its length to a buffer - */ -static int ecjpake_write_len_point( unsigned char **p, - const unsigned char *end, - const mbedtls_ecp_group *grp, - const int pf, - const mbedtls_ecp_point *P ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - size_t len; - - /* Need at least 4 for length plus 1 for point */ - if( end < *p || end - *p < 5 ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); - - ret = mbedtls_ecp_point_write_binary( grp, P, pf, - &len, *p + 4, end - ( *p + 4 ) ); - if( ret != 0 ) - return( ret ); - - (*p)[0] = (unsigned char)( ( len >> 24 ) & 0xFF ); - (*p)[1] = (unsigned char)( ( len >> 16 ) & 0xFF ); - (*p)[2] = (unsigned char)( ( len >> 8 ) & 0xFF ); - (*p)[3] = (unsigned char)( ( len ) & 0xFF ); - - *p += 4 + len; - - return( 0 ); -} - -/* - * Size of the temporary buffer for ecjpake_hash: - * 3 EC points plus their length, plus ID and its length (4 + 6 bytes) - */ -#define ECJPAKE_HASH_BUF_LEN ( 3 * ( 4 + MBEDTLS_ECP_MAX_PT_LEN ) + 4 + 6 ) - -/* - * Compute hash for ZKP (7.4.2.2.2.1) - */ -static int ecjpake_hash( const mbedtls_md_info_t *md_info, - const mbedtls_ecp_group *grp, - const int pf, - const mbedtls_ecp_point *G, - const mbedtls_ecp_point *V, - const mbedtls_ecp_point *X, - const char *id, - mbedtls_mpi *h ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - unsigned char buf[ECJPAKE_HASH_BUF_LEN]; - unsigned char *p = buf; - const unsigned char *end = buf + sizeof( buf ); - const size_t id_len = strlen( id ); - unsigned char hash[MBEDTLS_MD_MAX_SIZE]; - - /* Write things to temporary buffer */ - MBEDTLS_MPI_CHK( ecjpake_write_len_point( &p, end, grp, pf, G ) ); - MBEDTLS_MPI_CHK( ecjpake_write_len_point( &p, end, grp, pf, V ) ); - MBEDTLS_MPI_CHK( ecjpake_write_len_point( &p, end, grp, pf, X ) ); - - if( end - p < 4 ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); - - *p++ = (unsigned char)( ( id_len >> 24 ) & 0xFF ); - *p++ = (unsigned char)( ( id_len >> 16 ) & 0xFF ); - *p++ = (unsigned char)( ( id_len >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( id_len ) & 0xFF ); - - if( end < p || (size_t)( end - p ) < id_len ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); - - memcpy( p, id, id_len ); - p += id_len; - - /* Compute hash */ - MBEDTLS_MPI_CHK( mbedtls_md( md_info, buf, p - buf, hash ) ); - - /* Turn it into an integer mod n */ - MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( h, hash, - mbedtls_md_get_size( md_info ) ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( h, h, &grp->N ) ); - -cleanup: - return( ret ); -} - -/* - * Parse a ECShnorrZKP (7.4.2.2.2) and verify it (7.4.2.3.3) - */ -static int ecjpake_zkp_read( const mbedtls_md_info_t *md_info, - const mbedtls_ecp_group *grp, - const int pf, - const mbedtls_ecp_point *G, - const mbedtls_ecp_point *X, - const char *id, - const unsigned char **p, - const unsigned char *end ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - mbedtls_ecp_point V, VV; - mbedtls_mpi r, h; - size_t r_len; - - mbedtls_ecp_point_init( &V ); - mbedtls_ecp_point_init( &VV ); - mbedtls_mpi_init( &r ); - mbedtls_mpi_init( &h ); - - /* - * struct { - * ECPoint V; - * opaque r<1..2^8-1>; - * } ECSchnorrZKP; - */ - if( end < *p ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - - MBEDTLS_MPI_CHK( mbedtls_ecp_tls_read_point( grp, &V, p, end - *p ) ); - - if( end < *p || (size_t)( end - *p ) < 1 ) - { - ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; - goto cleanup; - } - - r_len = *(*p)++; - - if( end < *p || (size_t)( end - *p ) < r_len ) - { - ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; - goto cleanup; - } - - MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &r, *p, r_len ) ); - *p += r_len; - - /* - * Verification - */ - MBEDTLS_MPI_CHK( ecjpake_hash( md_info, grp, pf, G, &V, X, id, &h ) ); - MBEDTLS_MPI_CHK( mbedtls_ecp_muladd( (mbedtls_ecp_group *) grp, - &VV, &h, X, &r, G ) ); - - if( mbedtls_ecp_point_cmp( &VV, &V ) != 0 ) - { - ret = MBEDTLS_ERR_ECP_VERIFY_FAILED; - goto cleanup; - } - -cleanup: - mbedtls_ecp_point_free( &V ); - mbedtls_ecp_point_free( &VV ); - mbedtls_mpi_free( &r ); - mbedtls_mpi_free( &h ); - - return( ret ); -} - -/* - * Generate ZKP (7.4.2.3.2) and write it as ECSchnorrZKP (7.4.2.2.2) - */ -static int ecjpake_zkp_write( const mbedtls_md_info_t *md_info, - const mbedtls_ecp_group *grp, - const int pf, - const mbedtls_ecp_point *G, - const mbedtls_mpi *x, - const mbedtls_ecp_point *X, - const char *id, - unsigned char **p, - const unsigned char *end, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - mbedtls_ecp_point V; - mbedtls_mpi v; - mbedtls_mpi h; /* later recycled to hold r */ - size_t len; - - if( end < *p ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); - - mbedtls_ecp_point_init( &V ); - mbedtls_mpi_init( &v ); - mbedtls_mpi_init( &h ); - - /* Compute signature */ - MBEDTLS_MPI_CHK( mbedtls_ecp_gen_keypair_base( (mbedtls_ecp_group *) grp, - G, &v, &V, f_rng, p_rng ) ); - MBEDTLS_MPI_CHK( ecjpake_hash( md_info, grp, pf, G, &V, X, id, &h ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &h, &h, x ) ); /* x*h */ - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &h, &v, &h ) ); /* v - x*h */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &h, &h, &grp->N ) ); /* r */ - - /* Write it out */ - MBEDTLS_MPI_CHK( mbedtls_ecp_tls_write_point( grp, &V, - pf, &len, *p, end - *p ) ); - *p += len; - - len = mbedtls_mpi_size( &h ); /* actually r */ - if( end < *p || (size_t)( end - *p ) < 1 + len || len > 255 ) - { - ret = MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL; - goto cleanup; - } - - *(*p)++ = (unsigned char)( len & 0xFF ); - MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &h, *p, len ) ); /* r */ - *p += len; - -cleanup: - mbedtls_ecp_point_free( &V ); - mbedtls_mpi_free( &v ); - mbedtls_mpi_free( &h ); - - return( ret ); -} - -/* - * Parse a ECJPAKEKeyKP (7.4.2.2.1) and check proof - * Output: verified public key X - */ -static int ecjpake_kkp_read( const mbedtls_md_info_t *md_info, - const mbedtls_ecp_group *grp, - const int pf, - const mbedtls_ecp_point *G, - mbedtls_ecp_point *X, - const char *id, - const unsigned char **p, - const unsigned char *end ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - - if( end < *p ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - - /* - * struct { - * ECPoint X; - * ECSchnorrZKP zkp; - * } ECJPAKEKeyKP; - */ - MBEDTLS_MPI_CHK( mbedtls_ecp_tls_read_point( grp, X, p, end - *p ) ); - if( mbedtls_ecp_is_zero( X ) ) - { - ret = MBEDTLS_ERR_ECP_INVALID_KEY; - goto cleanup; - } - - MBEDTLS_MPI_CHK( ecjpake_zkp_read( md_info, grp, pf, G, X, id, p, end ) ); - -cleanup: - return( ret ); -} - -/* - * Generate an ECJPAKEKeyKP - * Output: the serialized structure, plus private/public key pair - */ -static int ecjpake_kkp_write( const mbedtls_md_info_t *md_info, - const mbedtls_ecp_group *grp, - const int pf, - const mbedtls_ecp_point *G, - mbedtls_mpi *x, - mbedtls_ecp_point *X, - const char *id, - unsigned char **p, - const unsigned char *end, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - size_t len; - - if( end < *p ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); - - /* Generate key (7.4.2.3.1) and write it out */ - MBEDTLS_MPI_CHK( mbedtls_ecp_gen_keypair_base( (mbedtls_ecp_group *) grp, G, x, X, - f_rng, p_rng ) ); - MBEDTLS_MPI_CHK( mbedtls_ecp_tls_write_point( grp, X, - pf, &len, *p, end - *p ) ); - *p += len; - - /* Generate and write proof */ - MBEDTLS_MPI_CHK( ecjpake_zkp_write( md_info, grp, pf, G, x, X, id, - p, end, f_rng, p_rng ) ); - -cleanup: - return( ret ); -} - -/* - * Read a ECJPAKEKeyKPPairList (7.4.2.3) and check proofs - * Ouputs: verified peer public keys Xa, Xb - */ -static int ecjpake_kkpp_read( const mbedtls_md_info_t *md_info, - const mbedtls_ecp_group *grp, - const int pf, - const mbedtls_ecp_point *G, - mbedtls_ecp_point *Xa, - mbedtls_ecp_point *Xb, - const char *id, - const unsigned char *buf, - size_t len ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - const unsigned char *p = buf; - const unsigned char *end = buf + len; - - /* - * struct { - * ECJPAKEKeyKP ecjpake_key_kp_pair_list[2]; - * } ECJPAKEKeyKPPairList; - */ - MBEDTLS_MPI_CHK( ecjpake_kkp_read( md_info, grp, pf, G, Xa, id, &p, end ) ); - MBEDTLS_MPI_CHK( ecjpake_kkp_read( md_info, grp, pf, G, Xb, id, &p, end ) ); - - if( p != end ) - ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; - -cleanup: - return( ret ); -} - -/* - * Generate a ECJPAKEKeyKPPairList - * Outputs: the serialized structure, plus two private/public key pairs - */ -static int ecjpake_kkpp_write( const mbedtls_md_info_t *md_info, - const mbedtls_ecp_group *grp, - const int pf, - const mbedtls_ecp_point *G, - mbedtls_mpi *xm1, - mbedtls_ecp_point *Xa, - mbedtls_mpi *xm2, - mbedtls_ecp_point *Xb, - const char *id, - unsigned char *buf, - size_t len, - size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - unsigned char *p = buf; - const unsigned char *end = buf + len; - - MBEDTLS_MPI_CHK( ecjpake_kkp_write( md_info, grp, pf, G, xm1, Xa, id, - &p, end, f_rng, p_rng ) ); - MBEDTLS_MPI_CHK( ecjpake_kkp_write( md_info, grp, pf, G, xm2, Xb, id, - &p, end, f_rng, p_rng ) ); - - *olen = p - buf; - -cleanup: - return( ret ); -} - -/* - * Read and process the first round message - */ -int mbedtls_ecjpake_read_round_one( mbedtls_ecjpake_context *ctx, - const unsigned char *buf, - size_t len ) -{ - ECJPAKE_VALIDATE_RET( ctx != NULL ); - ECJPAKE_VALIDATE_RET( buf != NULL ); - - return( ecjpake_kkpp_read( ctx->md_info, &ctx->grp, ctx->point_format, - &ctx->grp.G, - &ctx->Xp1, &ctx->Xp2, ID_PEER, - buf, len ) ); -} - -/* - * Generate and write the first round message - */ -int mbedtls_ecjpake_write_round_one( mbedtls_ecjpake_context *ctx, - unsigned char *buf, size_t len, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - ECJPAKE_VALIDATE_RET( ctx != NULL ); - ECJPAKE_VALIDATE_RET( buf != NULL ); - ECJPAKE_VALIDATE_RET( olen != NULL ); - ECJPAKE_VALIDATE_RET( f_rng != NULL ); - - return( ecjpake_kkpp_write( ctx->md_info, &ctx->grp, ctx->point_format, - &ctx->grp.G, - &ctx->xm1, &ctx->Xm1, &ctx->xm2, &ctx->Xm2, - ID_MINE, buf, len, olen, f_rng, p_rng ) ); -} - -/* - * Compute the sum of three points R = A + B + C - */ -static int ecjpake_ecp_add3( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, - const mbedtls_ecp_point *A, - const mbedtls_ecp_point *B, - const mbedtls_ecp_point *C ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - mbedtls_mpi one; - - mbedtls_mpi_init( &one ); - - MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &one, 1 ) ); - MBEDTLS_MPI_CHK( mbedtls_ecp_muladd( grp, R, &one, A, &one, B ) ); - MBEDTLS_MPI_CHK( mbedtls_ecp_muladd( grp, R, &one, R, &one, C ) ); - -cleanup: - mbedtls_mpi_free( &one ); - - return( ret ); -} - -/* - * Read and process second round message (C: 7.4.2.5, S: 7.4.2.6) - */ -int mbedtls_ecjpake_read_round_two( mbedtls_ecjpake_context *ctx, - const unsigned char *buf, - size_t len ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - const unsigned char *p = buf; - const unsigned char *end = buf + len; - mbedtls_ecp_group grp; - mbedtls_ecp_point G; /* C: GB, S: GA */ - - ECJPAKE_VALIDATE_RET( ctx != NULL ); - ECJPAKE_VALIDATE_RET( buf != NULL ); - - mbedtls_ecp_group_init( &grp ); - mbedtls_ecp_point_init( &G ); - - /* - * Server: GA = X3 + X4 + X1 (7.4.2.6.1) - * Client: GB = X1 + X2 + X3 (7.4.2.5.1) - * Unified: G = Xm1 + Xm2 + Xp1 - * We need that before parsing in order to check Xp as we read it - */ - MBEDTLS_MPI_CHK( ecjpake_ecp_add3( &ctx->grp, &G, - &ctx->Xm1, &ctx->Xm2, &ctx->Xp1 ) ); - - /* - * struct { - * ECParameters curve_params; // only client reading server msg - * ECJPAKEKeyKP ecjpake_key_kp; - * } Client/ServerECJPAKEParams; - */ - if( ctx->role == MBEDTLS_ECJPAKE_CLIENT ) - { - MBEDTLS_MPI_CHK( mbedtls_ecp_tls_read_group( &grp, &p, len ) ); - if( grp.id != ctx->grp.id ) - { - ret = MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE; - goto cleanup; - } - } - - MBEDTLS_MPI_CHK( ecjpake_kkp_read( ctx->md_info, &ctx->grp, - ctx->point_format, - &G, &ctx->Xp, ID_PEER, &p, end ) ); - - if( p != end ) - { - ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; - goto cleanup; - } - -cleanup: - mbedtls_ecp_group_free( &grp ); - mbedtls_ecp_point_free( &G ); - - return( ret ); -} - -/* - * Compute R = +/- X * S mod N, taking care not to leak S - */ -static int ecjpake_mul_secret( mbedtls_mpi *R, int sign, - const mbedtls_mpi *X, - const mbedtls_mpi *S, - const mbedtls_mpi *N, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - mbedtls_mpi b; /* Blinding value, then s + N * blinding */ - - mbedtls_mpi_init( &b ); - - /* b = s + rnd-128-bit * N */ - MBEDTLS_MPI_CHK( mbedtls_mpi_fill_random( &b, 16, f_rng, p_rng ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &b, &b, N ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &b, &b, S ) ); - - /* R = sign * X * b mod N */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( R, X, &b ) ); - R->s *= sign; - MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( R, R, N ) ); - -cleanup: - mbedtls_mpi_free( &b ); - - return( ret ); -} - -/* - * Generate and write the second round message (S: 7.4.2.5, C: 7.4.2.6) - */ -int mbedtls_ecjpake_write_round_two( mbedtls_ecjpake_context *ctx, - unsigned char *buf, size_t len, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - mbedtls_ecp_point G; /* C: GA, S: GB */ - mbedtls_ecp_point Xm; /* C: Xc, S: Xs */ - mbedtls_mpi xm; /* C: xc, S: xs */ - unsigned char *p = buf; - const unsigned char *end = buf + len; - size_t ec_len; - - ECJPAKE_VALIDATE_RET( ctx != NULL ); - ECJPAKE_VALIDATE_RET( buf != NULL ); - ECJPAKE_VALIDATE_RET( olen != NULL ); - ECJPAKE_VALIDATE_RET( f_rng != NULL ); - - mbedtls_ecp_point_init( &G ); - mbedtls_ecp_point_init( &Xm ); - mbedtls_mpi_init( &xm ); - - /* - * First generate private/public key pair (S: 7.4.2.5.1, C: 7.4.2.6.1) - * - * Client: GA = X1 + X3 + X4 | xs = x2 * s | Xc = xc * GA - * Server: GB = X3 + X1 + X2 | xs = x4 * s | Xs = xs * GB - * Unified: G = Xm1 + Xp1 + Xp2 | xm = xm2 * s | Xm = xm * G - */ - MBEDTLS_MPI_CHK( ecjpake_ecp_add3( &ctx->grp, &G, - &ctx->Xp1, &ctx->Xp2, &ctx->Xm1 ) ); - MBEDTLS_MPI_CHK( ecjpake_mul_secret( &xm, 1, &ctx->xm2, &ctx->s, - &ctx->grp.N, f_rng, p_rng ) ); - MBEDTLS_MPI_CHK( mbedtls_ecp_mul( &ctx->grp, &Xm, &xm, &G, f_rng, p_rng ) ); - - /* - * Now write things out - * - * struct { - * ECParameters curve_params; // only server writing its message - * ECJPAKEKeyKP ecjpake_key_kp; - * } Client/ServerECJPAKEParams; - */ - if( ctx->role == MBEDTLS_ECJPAKE_SERVER ) - { - if( end < p ) - { - ret = MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL; - goto cleanup; - } - MBEDTLS_MPI_CHK( mbedtls_ecp_tls_write_group( &ctx->grp, &ec_len, - p, end - p ) ); - p += ec_len; - } - - if( end < p ) - { - ret = MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL; - goto cleanup; - } - MBEDTLS_MPI_CHK( mbedtls_ecp_tls_write_point( &ctx->grp, &Xm, - ctx->point_format, &ec_len, p, end - p ) ); - p += ec_len; - - MBEDTLS_MPI_CHK( ecjpake_zkp_write( ctx->md_info, &ctx->grp, - ctx->point_format, - &G, &xm, &Xm, ID_MINE, - &p, end, f_rng, p_rng ) ); - - *olen = p - buf; - -cleanup: - mbedtls_ecp_point_free( &G ); - mbedtls_ecp_point_free( &Xm ); - mbedtls_mpi_free( &xm ); - - return( ret ); -} - -/* - * Derive PMS (7.4.2.7 / 7.4.2.8) - */ -int mbedtls_ecjpake_derive_secret( mbedtls_ecjpake_context *ctx, - unsigned char *buf, size_t len, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - mbedtls_ecp_point K; - mbedtls_mpi m_xm2_s, one; - unsigned char kx[MBEDTLS_ECP_MAX_BYTES]; - size_t x_bytes; - - ECJPAKE_VALIDATE_RET( ctx != NULL ); - ECJPAKE_VALIDATE_RET( buf != NULL ); - ECJPAKE_VALIDATE_RET( olen != NULL ); - ECJPAKE_VALIDATE_RET( f_rng != NULL ); - - *olen = mbedtls_md_get_size( ctx->md_info ); - if( len < *olen ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); - - mbedtls_ecp_point_init( &K ); - mbedtls_mpi_init( &m_xm2_s ); - mbedtls_mpi_init( &one ); - - MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &one, 1 ) ); - - /* - * Client: K = ( Xs - X4 * x2 * s ) * x2 - * Server: K = ( Xc - X2 * x4 * s ) * x4 - * Unified: K = ( Xp - Xp2 * xm2 * s ) * xm2 - */ - MBEDTLS_MPI_CHK( ecjpake_mul_secret( &m_xm2_s, -1, &ctx->xm2, &ctx->s, - &ctx->grp.N, f_rng, p_rng ) ); - MBEDTLS_MPI_CHK( mbedtls_ecp_muladd( &ctx->grp, &K, - &one, &ctx->Xp, - &m_xm2_s, &ctx->Xp2 ) ); - MBEDTLS_MPI_CHK( mbedtls_ecp_mul( &ctx->grp, &K, &ctx->xm2, &K, - f_rng, p_rng ) ); - - /* PMS = SHA-256( K.X ) */ - x_bytes = ( ctx->grp.pbits + 7 ) / 8; - MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &K.X, kx, x_bytes ) ); - MBEDTLS_MPI_CHK( mbedtls_md( ctx->md_info, kx, x_bytes, buf ) ); - -cleanup: - mbedtls_ecp_point_free( &K ); - mbedtls_mpi_free( &m_xm2_s ); - mbedtls_mpi_free( &one ); - - return( ret ); -} - -#undef ID_MINE -#undef ID_PEER - -#endif /* ! MBEDTLS_ECJPAKE_ALT */ - -#if defined(MBEDTLS_SELF_TEST) - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif - -#if !defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) || \ - !defined(MBEDTLS_SHA256_C) -int mbedtls_ecjpake_self_test( int verbose ) -{ - (void) verbose; - return( 0 ); -} -#else - -static const unsigned char ecjpake_test_password[] = { - 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x6a, 0x70, 0x61, 0x6b, 0x65, 0x74, - 0x65, 0x73, 0x74 -}; - -#if !defined(MBEDTLS_ECJPAKE_ALT) - -static const unsigned char ecjpake_test_x1[] = { - 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, 0x21 -}; - -static const unsigned char ecjpake_test_x2[] = { - 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, - 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, - 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x81 -}; - -static const unsigned char ecjpake_test_x3[] = { - 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, - 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, - 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x81 -}; - -static const unsigned char ecjpake_test_x4[] = { - 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, - 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, - 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe1 -}; - -static const unsigned char ecjpake_test_cli_one[] = { - 0x41, 0x04, 0xac, 0xcf, 0x01, 0x06, 0xef, 0x85, 0x8f, 0xa2, 0xd9, 0x19, - 0x33, 0x13, 0x46, 0x80, 0x5a, 0x78, 0xb5, 0x8b, 0xba, 0xd0, 0xb8, 0x44, - 0xe5, 0xc7, 0x89, 0x28, 0x79, 0x14, 0x61, 0x87, 0xdd, 0x26, 0x66, 0xad, - 0xa7, 0x81, 0xbb, 0x7f, 0x11, 0x13, 0x72, 0x25, 0x1a, 0x89, 0x10, 0x62, - 0x1f, 0x63, 0x4d, 0xf1, 0x28, 0xac, 0x48, 0xe3, 0x81, 0xfd, 0x6e, 0xf9, - 0x06, 0x07, 0x31, 0xf6, 0x94, 0xa4, 0x41, 0x04, 0x1d, 0xd0, 0xbd, 0x5d, - 0x45, 0x66, 0xc9, 0xbe, 0xd9, 0xce, 0x7d, 0xe7, 0x01, 0xb5, 0xe8, 0x2e, - 0x08, 0xe8, 0x4b, 0x73, 0x04, 0x66, 0x01, 0x8a, 0xb9, 0x03, 0xc7, 0x9e, - 0xb9, 0x82, 0x17, 0x22, 0x36, 0xc0, 0xc1, 0x72, 0x8a, 0xe4, 0xbf, 0x73, - 0x61, 0x0d, 0x34, 0xde, 0x44, 0x24, 0x6e, 0xf3, 0xd9, 0xc0, 0x5a, 0x22, - 0x36, 0xfb, 0x66, 0xa6, 0x58, 0x3d, 0x74, 0x49, 0x30, 0x8b, 0xab, 0xce, - 0x20, 0x72, 0xfe, 0x16, 0x66, 0x29, 0x92, 0xe9, 0x23, 0x5c, 0x25, 0x00, - 0x2f, 0x11, 0xb1, 0x50, 0x87, 0xb8, 0x27, 0x38, 0xe0, 0x3c, 0x94, 0x5b, - 0xf7, 0xa2, 0x99, 0x5d, 0xda, 0x1e, 0x98, 0x34, 0x58, 0x41, 0x04, 0x7e, - 0xa6, 0xe3, 0xa4, 0x48, 0x70, 0x37, 0xa9, 0xe0, 0xdb, 0xd7, 0x92, 0x62, - 0xb2, 0xcc, 0x27, 0x3e, 0x77, 0x99, 0x30, 0xfc, 0x18, 0x40, 0x9a, 0xc5, - 0x36, 0x1c, 0x5f, 0xe6, 0x69, 0xd7, 0x02, 0xe1, 0x47, 0x79, 0x0a, 0xeb, - 0x4c, 0xe7, 0xfd, 0x65, 0x75, 0xab, 0x0f, 0x6c, 0x7f, 0xd1, 0xc3, 0x35, - 0x93, 0x9a, 0xa8, 0x63, 0xba, 0x37, 0xec, 0x91, 0xb7, 0xe3, 0x2b, 0xb0, - 0x13, 0xbb, 0x2b, 0x41, 0x04, 0xa4, 0x95, 0x58, 0xd3, 0x2e, 0xd1, 0xeb, - 0xfc, 0x18, 0x16, 0xaf, 0x4f, 0xf0, 0x9b, 0x55, 0xfc, 0xb4, 0xca, 0x47, - 0xb2, 0xa0, 0x2d, 0x1e, 0x7c, 0xaf, 0x11, 0x79, 0xea, 0x3f, 0xe1, 0x39, - 0x5b, 0x22, 0xb8, 0x61, 0x96, 0x40, 0x16, 0xfa, 0xba, 0xf7, 0x2c, 0x97, - 0x56, 0x95, 0xd9, 0x3d, 0x4d, 0xf0, 0xe5, 0x19, 0x7f, 0xe9, 0xf0, 0x40, - 0x63, 0x4e, 0xd5, 0x97, 0x64, 0x93, 0x77, 0x87, 0xbe, 0x20, 0xbc, 0x4d, - 0xee, 0xbb, 0xf9, 0xb8, 0xd6, 0x0a, 0x33, 0x5f, 0x04, 0x6c, 0xa3, 0xaa, - 0x94, 0x1e, 0x45, 0x86, 0x4c, 0x7c, 0xad, 0xef, 0x9c, 0xf7, 0x5b, 0x3d, - 0x8b, 0x01, 0x0e, 0x44, 0x3e, 0xf0 -}; - -static const unsigned char ecjpake_test_srv_one[] = { - 0x41, 0x04, 0x7e, 0xa6, 0xe3, 0xa4, 0x48, 0x70, 0x37, 0xa9, 0xe0, 0xdb, - 0xd7, 0x92, 0x62, 0xb2, 0xcc, 0x27, 0x3e, 0x77, 0x99, 0x30, 0xfc, 0x18, - 0x40, 0x9a, 0xc5, 0x36, 0x1c, 0x5f, 0xe6, 0x69, 0xd7, 0x02, 0xe1, 0x47, - 0x79, 0x0a, 0xeb, 0x4c, 0xe7, 0xfd, 0x65, 0x75, 0xab, 0x0f, 0x6c, 0x7f, - 0xd1, 0xc3, 0x35, 0x93, 0x9a, 0xa8, 0x63, 0xba, 0x37, 0xec, 0x91, 0xb7, - 0xe3, 0x2b, 0xb0, 0x13, 0xbb, 0x2b, 0x41, 0x04, 0x09, 0xf8, 0x5b, 0x3d, - 0x20, 0xeb, 0xd7, 0x88, 0x5c, 0xe4, 0x64, 0xc0, 0x8d, 0x05, 0x6d, 0x64, - 0x28, 0xfe, 0x4d, 0xd9, 0x28, 0x7a, 0xa3, 0x65, 0xf1, 0x31, 0xf4, 0x36, - 0x0f, 0xf3, 0x86, 0xd8, 0x46, 0x89, 0x8b, 0xc4, 0xb4, 0x15, 0x83, 0xc2, - 0xa5, 0x19, 0x7f, 0x65, 0xd7, 0x87, 0x42, 0x74, 0x6c, 0x12, 0xa5, 0xec, - 0x0a, 0x4f, 0xfe, 0x2f, 0x27, 0x0a, 0x75, 0x0a, 0x1d, 0x8f, 0xb5, 0x16, - 0x20, 0x93, 0x4d, 0x74, 0xeb, 0x43, 0xe5, 0x4d, 0xf4, 0x24, 0xfd, 0x96, - 0x30, 0x6c, 0x01, 0x17, 0xbf, 0x13, 0x1a, 0xfa, 0xbf, 0x90, 0xa9, 0xd3, - 0x3d, 0x11, 0x98, 0xd9, 0x05, 0x19, 0x37, 0x35, 0x14, 0x41, 0x04, 0x19, - 0x0a, 0x07, 0x70, 0x0f, 0xfa, 0x4b, 0xe6, 0xae, 0x1d, 0x79, 0xee, 0x0f, - 0x06, 0xae, 0xb5, 0x44, 0xcd, 0x5a, 0xdd, 0xaa, 0xbe, 0xdf, 0x70, 0xf8, - 0x62, 0x33, 0x21, 0x33, 0x2c, 0x54, 0xf3, 0x55, 0xf0, 0xfb, 0xfe, 0xc7, - 0x83, 0xed, 0x35, 0x9e, 0x5d, 0x0b, 0xf7, 0x37, 0x7a, 0x0f, 0xc4, 0xea, - 0x7a, 0xce, 0x47, 0x3c, 0x9c, 0x11, 0x2b, 0x41, 0xcc, 0xd4, 0x1a, 0xc5, - 0x6a, 0x56, 0x12, 0x41, 0x04, 0x36, 0x0a, 0x1c, 0xea, 0x33, 0xfc, 0xe6, - 0x41, 0x15, 0x64, 0x58, 0xe0, 0xa4, 0xea, 0xc2, 0x19, 0xe9, 0x68, 0x31, - 0xe6, 0xae, 0xbc, 0x88, 0xb3, 0xf3, 0x75, 0x2f, 0x93, 0xa0, 0x28, 0x1d, - 0x1b, 0xf1, 0xfb, 0x10, 0x60, 0x51, 0xdb, 0x96, 0x94, 0xa8, 0xd6, 0xe8, - 0x62, 0xa5, 0xef, 0x13, 0x24, 0xa3, 0xd9, 0xe2, 0x78, 0x94, 0xf1, 0xee, - 0x4f, 0x7c, 0x59, 0x19, 0x99, 0x65, 0xa8, 0xdd, 0x4a, 0x20, 0x91, 0x84, - 0x7d, 0x2d, 0x22, 0xdf, 0x3e, 0xe5, 0x5f, 0xaa, 0x2a, 0x3f, 0xb3, 0x3f, - 0xd2, 0xd1, 0xe0, 0x55, 0xa0, 0x7a, 0x7c, 0x61, 0xec, 0xfb, 0x8d, 0x80, - 0xec, 0x00, 0xc2, 0xc9, 0xeb, 0x12 -}; - -static const unsigned char ecjpake_test_srv_two[] = { - 0x03, 0x00, 0x17, 0x41, 0x04, 0x0f, 0xb2, 0x2b, 0x1d, 0x5d, 0x11, 0x23, - 0xe0, 0xef, 0x9f, 0xeb, 0x9d, 0x8a, 0x2e, 0x59, 0x0a, 0x1f, 0x4d, 0x7c, - 0xed, 0x2c, 0x2b, 0x06, 0x58, 0x6e, 0x8f, 0x2a, 0x16, 0xd4, 0xeb, 0x2f, - 0xda, 0x43, 0x28, 0xa2, 0x0b, 0x07, 0xd8, 0xfd, 0x66, 0x76, 0x54, 0xca, - 0x18, 0xc5, 0x4e, 0x32, 0xa3, 0x33, 0xa0, 0x84, 0x54, 0x51, 0xe9, 0x26, - 0xee, 0x88, 0x04, 0xfd, 0x7a, 0xf0, 0xaa, 0xa7, 0xa6, 0x41, 0x04, 0x55, - 0x16, 0xea, 0x3e, 0x54, 0xa0, 0xd5, 0xd8, 0xb2, 0xce, 0x78, 0x6b, 0x38, - 0xd3, 0x83, 0x37, 0x00, 0x29, 0xa5, 0xdb, 0xe4, 0x45, 0x9c, 0x9d, 0xd6, - 0x01, 0xb4, 0x08, 0xa2, 0x4a, 0xe6, 0x46, 0x5c, 0x8a, 0xc9, 0x05, 0xb9, - 0xeb, 0x03, 0xb5, 0xd3, 0x69, 0x1c, 0x13, 0x9e, 0xf8, 0x3f, 0x1c, 0xd4, - 0x20, 0x0f, 0x6c, 0x9c, 0xd4, 0xec, 0x39, 0x22, 0x18, 0xa5, 0x9e, 0xd2, - 0x43, 0xd3, 0xc8, 0x20, 0xff, 0x72, 0x4a, 0x9a, 0x70, 0xb8, 0x8c, 0xb8, - 0x6f, 0x20, 0xb4, 0x34, 0xc6, 0x86, 0x5a, 0xa1, 0xcd, 0x79, 0x06, 0xdd, - 0x7c, 0x9b, 0xce, 0x35, 0x25, 0xf5, 0x08, 0x27, 0x6f, 0x26, 0x83, 0x6c -}; - -static const unsigned char ecjpake_test_cli_two[] = { - 0x41, 0x04, 0x69, 0xd5, 0x4e, 0xe8, 0x5e, 0x90, 0xce, 0x3f, 0x12, 0x46, - 0x74, 0x2d, 0xe5, 0x07, 0xe9, 0x39, 0xe8, 0x1d, 0x1d, 0xc1, 0xc5, 0xcb, - 0x98, 0x8b, 0x58, 0xc3, 0x10, 0xc9, 0xfd, 0xd9, 0x52, 0x4d, 0x93, 0x72, - 0x0b, 0x45, 0x54, 0x1c, 0x83, 0xee, 0x88, 0x41, 0x19, 0x1d, 0xa7, 0xce, - 0xd8, 0x6e, 0x33, 0x12, 0xd4, 0x36, 0x23, 0xc1, 0xd6, 0x3e, 0x74, 0x98, - 0x9a, 0xba, 0x4a, 0xff, 0xd1, 0xee, 0x41, 0x04, 0x07, 0x7e, 0x8c, 0x31, - 0xe2, 0x0e, 0x6b, 0xed, 0xb7, 0x60, 0xc1, 0x35, 0x93, 0xe6, 0x9f, 0x15, - 0xbe, 0x85, 0xc2, 0x7d, 0x68, 0xcd, 0x09, 0xcc, 0xb8, 0xc4, 0x18, 0x36, - 0x08, 0x91, 0x7c, 0x5c, 0x3d, 0x40, 0x9f, 0xac, 0x39, 0xfe, 0xfe, 0xe8, - 0x2f, 0x72, 0x92, 0xd3, 0x6f, 0x0d, 0x23, 0xe0, 0x55, 0x91, 0x3f, 0x45, - 0xa5, 0x2b, 0x85, 0xdd, 0x8a, 0x20, 0x52, 0xe9, 0xe1, 0x29, 0xbb, 0x4d, - 0x20, 0x0f, 0x01, 0x1f, 0x19, 0x48, 0x35, 0x35, 0xa6, 0xe8, 0x9a, 0x58, - 0x0c, 0x9b, 0x00, 0x03, 0xba, 0xf2, 0x14, 0x62, 0xec, 0xe9, 0x1a, 0x82, - 0xcc, 0x38, 0xdb, 0xdc, 0xae, 0x60, 0xd9, 0xc5, 0x4c -}; - -static const unsigned char ecjpake_test_pms[] = { - 0xf3, 0xd4, 0x7f, 0x59, 0x98, 0x44, 0xdb, 0x92, 0xa5, 0x69, 0xbb, 0xe7, - 0x98, 0x1e, 0x39, 0xd9, 0x31, 0xfd, 0x74, 0x3b, 0xf2, 0x2e, 0x98, 0xf9, - 0xb4, 0x38, 0xf7, 0x19, 0xd3, 0xc4, 0xf3, 0x51 -}; - -/* Load my private keys and generate the corresponding public keys */ -static int ecjpake_test_load( mbedtls_ecjpake_context *ctx, - const unsigned char *xm1, size_t len1, - const unsigned char *xm2, size_t len2 ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - - MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &ctx->xm1, xm1, len1 ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &ctx->xm2, xm2, len2 ) ); - MBEDTLS_MPI_CHK( mbedtls_ecp_mul( &ctx->grp, &ctx->Xm1, &ctx->xm1, - &ctx->grp.G, NULL, NULL ) ); - MBEDTLS_MPI_CHK( mbedtls_ecp_mul( &ctx->grp, &ctx->Xm2, &ctx->xm2, - &ctx->grp.G, NULL, NULL ) ); - -cleanup: - return( ret ); -} - -#endif /* ! MBEDTLS_ECJPAKE_ALT */ - -/* For tests we don't need a secure RNG; - * use the LGC from Numerical Recipes for simplicity */ -static int ecjpake_lgc( void *p, unsigned char *out, size_t len ) -{ - static uint32_t x = 42; - (void) p; - - while( len > 0 ) - { - size_t use_len = len > 4 ? 4 : len; - x = 1664525 * x + 1013904223; - memcpy( out, &x, use_len ); - out += use_len; - len -= use_len; - } - - return( 0 ); -} - -#define TEST_ASSERT( x ) \ - do { \ - if( x ) \ - ret = 0; \ - else \ - { \ - ret = 1; \ - goto cleanup; \ - } \ - } while( 0 ) - -/* - * Checkup routine - */ -int mbedtls_ecjpake_self_test( int verbose ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - mbedtls_ecjpake_context cli; - mbedtls_ecjpake_context srv; - unsigned char buf[512], pms[32]; - size_t len, pmslen; - - mbedtls_ecjpake_init( &cli ); - mbedtls_ecjpake_init( &srv ); - - if( verbose != 0 ) - mbedtls_printf( " ECJPAKE test #0 (setup): " ); - - TEST_ASSERT( mbedtls_ecjpake_setup( &cli, MBEDTLS_ECJPAKE_CLIENT, - MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, - ecjpake_test_password, - sizeof( ecjpake_test_password ) ) == 0 ); - - TEST_ASSERT( mbedtls_ecjpake_setup( &srv, MBEDTLS_ECJPAKE_SERVER, - MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, - ecjpake_test_password, - sizeof( ecjpake_test_password ) ) == 0 ); - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - - if( verbose != 0 ) - mbedtls_printf( " ECJPAKE test #1 (random handshake): " ); - - TEST_ASSERT( mbedtls_ecjpake_write_round_one( &cli, - buf, sizeof( buf ), &len, ecjpake_lgc, NULL ) == 0 ); - - TEST_ASSERT( mbedtls_ecjpake_read_round_one( &srv, buf, len ) == 0 ); - - TEST_ASSERT( mbedtls_ecjpake_write_round_one( &srv, - buf, sizeof( buf ), &len, ecjpake_lgc, NULL ) == 0 ); - - TEST_ASSERT( mbedtls_ecjpake_read_round_one( &cli, buf, len ) == 0 ); - - TEST_ASSERT( mbedtls_ecjpake_write_round_two( &srv, - buf, sizeof( buf ), &len, ecjpake_lgc, NULL ) == 0 ); - - TEST_ASSERT( mbedtls_ecjpake_read_round_two( &cli, buf, len ) == 0 ); - - TEST_ASSERT( mbedtls_ecjpake_derive_secret( &cli, - pms, sizeof( pms ), &pmslen, ecjpake_lgc, NULL ) == 0 ); - - TEST_ASSERT( mbedtls_ecjpake_write_round_two( &cli, - buf, sizeof( buf ), &len, ecjpake_lgc, NULL ) == 0 ); - - TEST_ASSERT( mbedtls_ecjpake_read_round_two( &srv, buf, len ) == 0 ); - - TEST_ASSERT( mbedtls_ecjpake_derive_secret( &srv, - buf, sizeof( buf ), &len, ecjpake_lgc, NULL ) == 0 ); - - TEST_ASSERT( len == pmslen ); - TEST_ASSERT( memcmp( buf, pms, len ) == 0 ); - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - -#if !defined(MBEDTLS_ECJPAKE_ALT) - /* 'reference handshake' tests can only be run against implementations - * for which we have 100% control over how the random ephemeral keys - * are generated. This is only the case for the internal mbed TLS - * implementation, so these tests are skipped in case the internal - * implementation is swapped out for an alternative one. */ - if( verbose != 0 ) - mbedtls_printf( " ECJPAKE test #2 (reference handshake): " ); - - /* Simulate generation of round one */ - MBEDTLS_MPI_CHK( ecjpake_test_load( &cli, - ecjpake_test_x1, sizeof( ecjpake_test_x1 ), - ecjpake_test_x2, sizeof( ecjpake_test_x2 ) ) ); - - MBEDTLS_MPI_CHK( ecjpake_test_load( &srv, - ecjpake_test_x3, sizeof( ecjpake_test_x3 ), - ecjpake_test_x4, sizeof( ecjpake_test_x4 ) ) ); - - /* Read round one */ - TEST_ASSERT( mbedtls_ecjpake_read_round_one( &srv, - ecjpake_test_cli_one, - sizeof( ecjpake_test_cli_one ) ) == 0 ); - - TEST_ASSERT( mbedtls_ecjpake_read_round_one( &cli, - ecjpake_test_srv_one, - sizeof( ecjpake_test_srv_one ) ) == 0 ); - - /* Skip generation of round two, read round two */ - TEST_ASSERT( mbedtls_ecjpake_read_round_two( &cli, - ecjpake_test_srv_two, - sizeof( ecjpake_test_srv_two ) ) == 0 ); - - TEST_ASSERT( mbedtls_ecjpake_read_round_two( &srv, - ecjpake_test_cli_two, - sizeof( ecjpake_test_cli_two ) ) == 0 ); - - /* Server derives PMS */ - TEST_ASSERT( mbedtls_ecjpake_derive_secret( &srv, - buf, sizeof( buf ), &len, ecjpake_lgc, NULL ) == 0 ); - - TEST_ASSERT( len == sizeof( ecjpake_test_pms ) ); - TEST_ASSERT( memcmp( buf, ecjpake_test_pms, len ) == 0 ); - - memset( buf, 0, len ); /* Avoid interferences with next step */ - - /* Client derives PMS */ - TEST_ASSERT( mbedtls_ecjpake_derive_secret( &cli, - buf, sizeof( buf ), &len, ecjpake_lgc, NULL ) == 0 ); - - TEST_ASSERT( len == sizeof( ecjpake_test_pms ) ); - TEST_ASSERT( memcmp( buf, ecjpake_test_pms, len ) == 0 ); - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); -#endif /* ! MBEDTLS_ECJPAKE_ALT */ - -cleanup: - mbedtls_ecjpake_free( &cli ); - mbedtls_ecjpake_free( &srv ); - - if( ret != 0 ) - { - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - - ret = 1; - } - - if( verbose != 0 ) - mbedtls_printf( "\n" ); - - return( ret ); -} - -#undef TEST_ASSERT - -#endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED && MBEDTLS_SHA256_C */ - -#endif /* MBEDTLS_SELF_TEST */ - -#endif /* MBEDTLS_ECJPAKE_C */ diff --git a/third_party/mbedtls/ecjpake.h b/third_party/mbedtls/ecjpake.h deleted file mode 100644 index 13fbd0a7b..000000000 --- a/third_party/mbedtls/ecjpake.h +++ /dev/null @@ -1,277 +0,0 @@ -/* clang-format off */ - -/** - * \file ecjpake.h - * - * \brief Elliptic curve J-PAKE - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_ECJPAKE_H -#define MBEDTLS_ECJPAKE_H - -/* - * J-PAKE is a password-authenticated key exchange that allows deriving a - * strong shared secret from a (potentially low entropy) pre-shared - * passphrase, with forward secrecy and mutual authentication. - * https://en.wikipedia.org/wiki/Password_Authenticated_Key_Exchange_by_Juggling - * - * This file implements the Elliptic Curve variant of J-PAKE, - * as defined in Chapter 7.4 of the Thread v1.0 Specification, - * available to members of the Thread Group http://threadgroup.org/ - * - * As the J-PAKE algorithm is inherently symmetric, so is our API. - * Each party needs to send its first round message, in any order, to the - * other party, then each sends its second round message, in any order. - * The payloads are serialized in a way suitable for use in TLS, but could - * also be use outside TLS. - */ -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "third_party/mbedtls/ecp.h" -#include "third_party/mbedtls/md.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Roles in the EC J-PAKE exchange - */ -typedef enum { - MBEDTLS_ECJPAKE_CLIENT = 0, /**< Client */ - MBEDTLS_ECJPAKE_SERVER, /**< Server */ -} mbedtls_ecjpake_role; - -#if !defined(MBEDTLS_ECJPAKE_ALT) -/** - * EC J-PAKE context structure. - * - * J-PAKE is a symmetric protocol, except for the identifiers used in - * Zero-Knowledge Proofs, and the serialization of the second message - * (KeyExchange) as defined by the Thread spec. - * - * In order to benefit from this symmetry, we choose a different naming - * convetion from the Thread v1.0 spec. Correspondance is indicated in the - * description as a pair C: client name, S: server name - */ -typedef struct mbedtls_ecjpake_context -{ - const mbedtls_md_info_t *md_info; /**< Hash to use */ - mbedtls_ecp_group grp; /**< Elliptic curve */ - mbedtls_ecjpake_role role; /**< Are we client or server? */ - int point_format; /**< Format for point export */ - - mbedtls_ecp_point Xm1; /**< My public key 1 C: X1, S: X3 */ - mbedtls_ecp_point Xm2; /**< My public key 2 C: X2, S: X4 */ - mbedtls_ecp_point Xp1; /**< Peer public key 1 C: X3, S: X1 */ - mbedtls_ecp_point Xp2; /**< Peer public key 2 C: X4, S: X2 */ - mbedtls_ecp_point Xp; /**< Peer public key C: Xs, S: Xc */ - - mbedtls_mpi xm1; /**< My private key 1 C: x1, S: x3 */ - mbedtls_mpi xm2; /**< My private key 2 C: x2, S: x4 */ - - mbedtls_mpi s; /**< Pre-shared secret (passphrase) */ -} mbedtls_ecjpake_context; - -#else /* MBEDTLS_ECJPAKE_ALT */ -/* #include "third_party/mbedtls/ecjpake_alt.h" */ -#endif /* MBEDTLS_ECJPAKE_ALT */ - -/** - * \brief Initialize an ECJPAKE context. - * - * \param ctx The ECJPAKE context to initialize. - * This must not be \c NULL. - */ -void mbedtls_ecjpake_init( mbedtls_ecjpake_context *ctx ); - -/** - * \brief Set up an ECJPAKE context for use. - * - * \note Currently the only values for hash/curve allowed by the - * standard are #MBEDTLS_MD_SHA256/#MBEDTLS_ECP_DP_SECP256R1. - * - * \param ctx The ECJPAKE context to set up. This must be initialized. - * \param role The role of the caller. This must be either - * #MBEDTLS_ECJPAKE_CLIENT or #MBEDTLS_ECJPAKE_SERVER. - * \param hash The identifier of the hash function to use, - * for example #MBEDTLS_MD_SHA256. - * \param curve The identifier of the elliptic curve to use, - * for example #MBEDTLS_ECP_DP_SECP256R1. - * \param secret The pre-shared secret (passphrase). This must be - * a readable buffer of length \p len Bytes. It need - * only be valid for the duration of this call. - * \param len The length of the pre-shared secret \p secret. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_ecjpake_setup( mbedtls_ecjpake_context *ctx, - mbedtls_ecjpake_role role, - mbedtls_md_type_t hash, - mbedtls_ecp_group_id curve, - const unsigned char *secret, - size_t len ); - -/** - * \brief Check if an ECJPAKE context is ready for use. - * - * \param ctx The ECJPAKE context to check. This must be - * initialized. - * - * \return \c 0 if the context is ready for use. - * \return #MBEDTLS_ERR_ECP_BAD_INPUT_DATA otherwise. - */ -int mbedtls_ecjpake_check( const mbedtls_ecjpake_context *ctx ); - -/** - * \brief Generate and write the first round message - * (TLS: contents of the Client/ServerHello extension, - * excluding extension type and length bytes). - * - * \param ctx The ECJPAKE context to use. This must be - * initialized and set up. - * \param buf The buffer to write the contents to. This must be a - * writable buffer of length \p len Bytes. - * \param len The length of \p buf in Bytes. - * \param olen The address at which to store the total number - * of Bytes written to \p buf. This must not be \c NULL. - * \param f_rng The RNG function to use. This must not be \c NULL. - * \param p_rng The RNG parameter to be passed to \p f_rng. This - * may be \c NULL if \p f_rng doesn't use a context. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_ecjpake_write_round_one( mbedtls_ecjpake_context *ctx, - unsigned char *buf, size_t len, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Read and process the first round message - * (TLS: contents of the Client/ServerHello extension, - * excluding extension type and length bytes). - * - * \param ctx The ECJPAKE context to use. This must be initialized - * and set up. - * \param buf The buffer holding the first round message. This must - * be a readable buffer of length \p len Bytes. - * \param len The length in Bytes of \p buf. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_ecjpake_read_round_one( mbedtls_ecjpake_context *ctx, - const unsigned char *buf, - size_t len ); - -/** - * \brief Generate and write the second round message - * (TLS: contents of the Client/ServerKeyExchange). - * - * \param ctx The ECJPAKE context to use. This must be initialized, - * set up, and already have performed round one. - * \param buf The buffer to write the round two contents to. - * This must be a writable buffer of length \p len Bytes. - * \param len The size of \p buf in Bytes. - * \param olen The address at which to store the total number of Bytes - * written to \p buf. This must not be \c NULL. - * \param f_rng The RNG function to use. This must not be \c NULL. - * \param p_rng The RNG parameter to be passed to \p f_rng. This - * may be \c NULL if \p f_rng doesn't use a context. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_ecjpake_write_round_two( mbedtls_ecjpake_context *ctx, - unsigned char *buf, size_t len, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Read and process the second round message - * (TLS: contents of the Client/ServerKeyExchange). - * - * \param ctx The ECJPAKE context to use. This must be initialized - * and set up and already have performed round one. - * \param buf The buffer holding the second round message. This must - * be a readable buffer of length \p len Bytes. - * \param len The length in Bytes of \p buf. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_ecjpake_read_round_two( mbedtls_ecjpake_context *ctx, - const unsigned char *buf, - size_t len ); - -/** - * \brief Derive the shared secret - * (TLS: Pre-Master Secret). - * - * \param ctx The ECJPAKE context to use. This must be initialized, - * set up and have performed both round one and two. - * \param buf The buffer to write the derived secret to. This must - * be a writable buffer of length \p len Bytes. - * \param len The length of \p buf in Bytes. - * \param olen The address at which to store the total number of Bytes - * written to \p buf. This must not be \c NULL. - * \param f_rng The RNG function to use. This must not be \c NULL. - * \param p_rng The RNG parameter to be passed to \p f_rng. This - * may be \c NULL if \p f_rng doesn't use a context. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_ecjpake_derive_secret( mbedtls_ecjpake_context *ctx, - unsigned char *buf, size_t len, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief This clears an ECJPAKE context and frees any - * embedded data structure. - * - * \param ctx The ECJPAKE context to free. This may be \c NULL, - * in which case this function does nothing. If it is not - * \c NULL, it must point to an initialized ECJPAKE context. - */ -void mbedtls_ecjpake_free( mbedtls_ecjpake_context *ctx ); - -#if defined(MBEDTLS_SELF_TEST) - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if a test failed - */ -int mbedtls_ecjpake_self_test( int verbose ); - -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - - -#endif /* ecjpake.h */ diff --git a/third_party/mbedtls/ecp.c b/third_party/mbedtls/ecp.c index a76088ba9..0334b553f 100644 --- a/third_party/mbedtls/ecp.c +++ b/third_party/mbedtls/ecp.c @@ -1,10 +1,18 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/ctr_drbg.h" +#include "third_party/mbedtls/ecp.h" +#include "third_party/mbedtls/ecp_internal.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/hmac_drbg.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * Elliptic curves over GF(p): generic functions * @@ -23,7 +31,6 @@ asm(".include \"libc/disclaimer.inc\""); * See the License for the specific language governing permissions and * limitations under the License. */ - /* * References: * @@ -46,78 +53,15 @@ asm(".include \"libc/disclaimer.inc\""); * */ -#include "third_party/mbedtls/common.h" - -/** - * \brief Function level alternative implementation. - * - * The MBEDTLS_ECP_INTERNAL_ALT macro enables alternative implementations to - * replace certain functions in this module. The alternative implementations are - * typically hardware accelerators and need to activate the hardware before the - * computation starts and deactivate it after it finishes. The - * mbedtls_internal_ecp_init() and mbedtls_internal_ecp_free() functions serve - * this purpose. - * - * To preserve the correct functionality the following conditions must hold: - * - * - The alternative implementation must be activated by - * mbedtls_internal_ecp_init() before any of the replaceable functions is - * called. - * - mbedtls_internal_ecp_free() must \b only be called when the alternative - * implementation is activated. - * - mbedtls_internal_ecp_init() must \b not be called when the alternative - * implementation is activated. - * - Public functions must not return while the alternative implementation is - * activated. - * - Replaceable functions are guarded by \c MBEDTLS_ECP_XXX_ALT macros and - * before calling them an \code if( mbedtls_internal_ecp_grp_capable( grp ) ) - * \endcode ensures that the alternative implementation supports the current - * group. - */ -#if defined(MBEDTLS_ECP_INTERNAL_ALT) -#endif - #if defined(MBEDTLS_ECP_C) -#include "third_party/mbedtls/ecp.h" -#include "third_party/mbedtls/threading.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - #if !defined(MBEDTLS_ECP_ALT) -/* Parameter validation macros based on platform_util.h */ #define ECP_VALIDATE_RET( cond ) \ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_ECP_BAD_INPUT_DATA ) #define ECP_VALIDATE( cond ) \ MBEDTLS_INTERNAL_VALIDATE( cond ) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - -#include "third_party/mbedtls/ecp_internal.h" - -#if !defined(MBEDTLS_ECP_NO_INTERNAL_RNG) -#if defined(MBEDTLS_HMAC_DRBG_C) -#include "third_party/mbedtls/hmac_drbg.h" -#elif defined(MBEDTLS_CTR_DRBG_C) -#include "third_party/mbedtls/ctr_drbg.h" -#else -#error "Invalid configuration detected. Include check_config.h to ensure that the configuration is valid." -#endif -#endif /* MBEDTLS_ECP_NO_INTERNAL_RNG */ - -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif - #if defined(MBEDTLS_SELF_TEST) /* * Counts of point addition and doubling, and field multiplications. @@ -260,7 +204,7 @@ cleanup: } #else -#error "Invalid configuration detected. Include check_config.h to ensure that the configuration is valid." +#error "Invalid configuration detected. Include check.h to ensure that the configuration is valid." #endif /* DRBG modules */ #endif /* MBEDTLS_ECP_NO_INTERNAL_RNG */ @@ -277,16 +221,73 @@ cleanup: */ static unsigned ecp_max_ops = 0; -/* - * Set ecp_max_ops +/** + * \brief Set the maximum number of basic operations done in a row. + * + * If more operations are needed to complete a computation, + * #MBEDTLS_ERR_ECP_IN_PROGRESS will be returned by the + * function performing the computation. It is then the + * caller's responsibility to either call again with the same + * parameters until it returns 0 or an error code; or to free + * the restart context if the operation is to be aborted. + * + * It is strictly required that all input parameters and the + * restart context be the same on successive calls for the + * same operation, but output parameters need not be the + * same; they must not be used until the function finally + * returns 0. + * + * This only applies to functions whose documentation + * mentions they may return #MBEDTLS_ERR_ECP_IN_PROGRESS (or + * #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS for functions in the + * SSL module). For functions that accept a "restart context" + * argument, passing NULL disables restart and makes the + * function equivalent to the function with the same name + * with \c _restartable removed. For functions in the ECDH + * module, restart is disabled unless the function accepts + * an "ECDH context" argument and + * mbedtls_ecdh_enable_restart() was previously called on + * that context. For function in the SSL module, restart is + * only enabled for specific sides and key exchanges + * (currently only for clients and ECDHE-ECDSA). + * + * \param max_ops Maximum number of basic operations done in a row. + * Default: 0 (unlimited). + * Lower (non-zero) values mean ECC functions will block for + * a lesser maximum amount of time. + * + * \note A "basic operation" is defined as a rough equivalent of a + * multiplication in GF(p) for the NIST P-256 curve. + * As an indication, with default settings, a scalar + * multiplication (full run of \c mbedtls_ecp_mul()) is: + * - about 3300 basic operations for P-256 + * - about 9400 basic operations for P-384 + * + * \note Very low values are not always respected: sometimes + * functions need to block for a minimum number of + * operations, and will do so even if max_ops is set to a + * lower value. That minimum depends on the curve size, and + * can be made lower by decreasing the value of + * \c MBEDTLS_ECP_WINDOW_SIZE. As an indication, here is the + * lowest effective value for various curves and values of + * that parameter (w for short): + * w=6 w=5 w=4 w=3 w=2 + * P-256 208 208 160 136 124 + * P-384 682 416 320 272 248 + * P-521 1364 832 640 544 496 + * + * \note This setting is currently ignored by Curve25519. */ void mbedtls_ecp_set_max_ops( unsigned max_ops ) { ecp_max_ops = max_ops; } -/* - * Check if restart is enabled +/** + * \brief Check if restart is enabled (max_ops != 0) + * + * \return \c 0 if \c max_ops == 0 (restart disabled) + * \return \c 1 otherwise (restart enabled) */ int mbedtls_ecp_restart_is_enabled( void ) { @@ -398,8 +399,11 @@ static void ecp_restart_ma_free( mbedtls_ecp_restart_muladd_ctx *ctx ) ecp_restart_ma_init( ctx ); } -/* - * Initialize a restart context +/** + * \brief Initialize a restart context. + * + * \param ctx The restart context to initialize. This must + * not be \c NULL. */ void mbedtls_ecp_restart_init( mbedtls_ecp_restart_ctx *ctx ) { @@ -410,8 +414,12 @@ void mbedtls_ecp_restart_init( mbedtls_ecp_restart_ctx *ctx ) ctx->ma = NULL; } -/* - * Free the components of a restart context +/** + * \brief Free the components of a restart context. + * + * \param ctx The restart context to free. This may be \c NULL, in which + * case this function returns immediately. If it is not + * \c NULL, it must point to an initialized restart context. */ void mbedtls_ecp_restart_free( mbedtls_ecp_restart_ctx *ctx ) { @@ -510,31 +518,31 @@ int mbedtls_ecp_check_budget( const mbedtls_ecp_group *grp, * - size in bits * - readable name * - * Curves are listed in order: largest curves first, and for a given size, - * fastest curves first. This provides the default order for the SSL module. - * * Reminder: update profiles in x509_crt.c when adding a new curves! */ static const mbedtls_ecp_curve_info ecp_supported_curves[] = { -#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) - { MBEDTLS_ECP_DP_SECP521R1, 25, 521, "secp521r1" }, -#endif -#if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) - { MBEDTLS_ECP_DP_BP512R1, 28, 512, "brainpoolP512r1" }, -#endif -#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) - { MBEDTLS_ECP_DP_SECP384R1, 24, 384, "secp384r1" }, -#endif -#if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) - { MBEDTLS_ECP_DP_BP384R1, 27, 384, "brainpoolP384r1" }, +#if defined(MBEDTLS_ECP_DP_CURVE25519_ENABLED) + { MBEDTLS_ECP_DP_CURVE25519, 29, 256, "x25519" }, #endif #if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) { MBEDTLS_ECP_DP_SECP256R1, 23, 256, "secp256r1" }, #endif +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) + { MBEDTLS_ECP_DP_SECP384R1, 24, 384, "secp384r1" }, +#endif +#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) + { MBEDTLS_ECP_DP_SECP521R1, 25, 521, "secp521r1" }, +#endif #if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) { MBEDTLS_ECP_DP_SECP256K1, 22, 256, "secp256k1" }, #endif +#if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) + { MBEDTLS_ECP_DP_BP512R1, 28, 512, "brainpoolP512r1" }, +#endif +#if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) + { MBEDTLS_ECP_DP_BP384R1, 27, 384, "brainpoolP384r1" }, +#endif #if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) { MBEDTLS_ECP_DP_BP256R1, 26, 256, "brainpoolP256r1" }, #endif @@ -550,9 +558,6 @@ static const mbedtls_ecp_curve_info ecp_supported_curves[] = #if defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED) { MBEDTLS_ECP_DP_SECP192K1, 18, 192, "secp192k1" }, #endif -#if defined(MBEDTLS_ECP_DP_CURVE25519_ENABLED) - { MBEDTLS_ECP_DP_CURVE25519, 29, 256, "x25519" }, -#endif #if defined(MBEDTLS_ECP_DP_CURVE448_ENABLED) { MBEDTLS_ECP_DP_CURVE448, 30, 448, "x448" }, #endif @@ -564,16 +569,37 @@ static const mbedtls_ecp_curve_info ecp_supported_curves[] = static mbedtls_ecp_group_id ecp_supported_grp_id[ECP_NB_CURVES]; -/* - * List of supported curves and associated info +/** + * \brief This function retrieves the information defined in + * mbedtls_ecp_curve_info() for all supported curves in order + * of preference. + * + * \note This function returns information about all curves + * supported by the library. Some curves may not be + * supported for all algorithms. Call mbedtls_ecdh_can_do() + * or mbedtls_ecdsa_can_do() to check if a curve is + * supported for ECDH or ECDSA. + * + * \return A statically allocated array. The last entry is 0. */ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_list( void ) { return( ecp_supported_curves ); } -/* - * List of supported curves, group ID only +/** + * \brief This function retrieves the list of internal group + * identifiers of all supported curves in the order of + * preference. + * + * \note This function returns information about all curves + * supported by the library. Some curves may not be + * supported for all algorithms. Call mbedtls_ecdh_can_do() + * or mbedtls_ecdsa_can_do() to check if a curve is + * supported for ECDH or ECDSA. + * + * \return A statically allocated array, + * terminated with MBEDTLS_ECP_DP_NONE. */ const mbedtls_ecp_group_id *mbedtls_ecp_grp_id_list( void ) { @@ -598,8 +624,14 @@ const mbedtls_ecp_group_id *mbedtls_ecp_grp_id_list( void ) return( ecp_supported_grp_id ); } -/* - * Get the curve info for the internal identifier +/** + * \brief This function retrieves curve information from an internal + * group identifier. + * + * \param grp_id An \c MBEDTLS_ECP_DP_XXX value. + * + * \return The associated curve information on success. + * \return NULL on failure. */ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_grp_id( mbedtls_ecp_group_id grp_id ) { @@ -616,8 +648,14 @@ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_grp_id( mbedtls_ecp_gr return( NULL ); } -/* - * Get the curve info from the TLS identifier +/** + * \brief This function retrieves curve information from a TLS + * NamedCurve value. + * + * \param tls_id An \c MBEDTLS_ECP_DP_XXX value. + * + * \return The associated curve information on success. + * \return NULL on failure. */ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_tls_id( uint16_t tls_id ) { @@ -634,8 +672,14 @@ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_tls_id( uint16_t tls_i return( NULL ); } -/* - * Get the curve info from the name +/** + * \brief This function retrieves curve information from a + * human-readable name. + * + * \param name The human-readable name. + * + * \return The associated curve information on success. + * \return NULL on failure. */ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_name( const char *name ) { @@ -669,8 +713,10 @@ mbedtls_ecp_curve_type mbedtls_ecp_get_type( const mbedtls_ecp_group *grp ) return( MBEDTLS_ECP_TYPE_SHORT_WEIERSTRASS ); } -/* - * Initialize (the components of) a point +/** + * \brief This function initializes a point as zero. + * + * \param pt The point to initialize. */ void mbedtls_ecp_point_init( mbedtls_ecp_point *pt ) { @@ -681,8 +727,14 @@ void mbedtls_ecp_point_init( mbedtls_ecp_point *pt ) mbedtls_mpi_init( &pt->Z ); } -/* - * Initialize (the components of) a group +/** + * \brief This function initializes an ECP group context + * without loading any domain parameters. + * + * \note After this function is called, domain parameters + * for various ECP groups can be loaded through the + * mbedtls_ecp_group_load() or mbedtls_ecp_tls_read_group() + * functions. */ void mbedtls_ecp_group_init( mbedtls_ecp_group *grp ) { @@ -705,8 +757,10 @@ void mbedtls_ecp_group_init( mbedtls_ecp_group *grp ) grp->T_size = 0; } -/* - * Initialize (the components of) a key pair +/** + * \brief This function initializes a key pair as an invalid one. + * + * \param key The key pair to initialize. */ void mbedtls_ecp_keypair_init( mbedtls_ecp_keypair *key ) { @@ -717,8 +771,10 @@ void mbedtls_ecp_keypair_init( mbedtls_ecp_keypair *key ) mbedtls_ecp_point_init( &key->Q ); } -/* - * Unallocate (the components of) a point +/** + * \brief This function frees the components of a point. + * + * \param pt The point to free. */ void mbedtls_ecp_point_free( mbedtls_ecp_point *pt ) { @@ -730,8 +786,12 @@ void mbedtls_ecp_point_free( mbedtls_ecp_point *pt ) mbedtls_mpi_free( &( pt->Z ) ); } -/* - * Unallocate (the components of) a group +/** + * \brief This function frees the components of an ECP group. + * + * \param grp The group to free. This may be \c NULL, in which + * case this function returns immediately. If it is not + * \c NULL, it must point to an initialized ECP group. */ void mbedtls_ecp_group_free( mbedtls_ecp_group *grp ) { @@ -759,21 +819,32 @@ void mbedtls_ecp_group_free( mbedtls_ecp_group *grp ) mbedtls_platform_zeroize( grp, sizeof( mbedtls_ecp_group ) ); } -/* - * Unallocate (the components of) a key pair +/** + * \brief This function frees the components of a key pair. + * + * \param key The key pair to free. This may be \c NULL, in which + * case this function returns immediately. If it is not + * \c NULL, it must point to an initialized ECP key pair. */ void mbedtls_ecp_keypair_free( mbedtls_ecp_keypair *key ) { if( key == NULL ) return; - mbedtls_ecp_group_free( &key->grp ); mbedtls_mpi_free( &key->d ); mbedtls_ecp_point_free( &key->Q ); } -/* - * Copy the contents of a point +/** + * \brief This function copies the contents of point \p Q into + * point \p P. + * + * \param P The destination point. This must be initialized. + * \param Q The source point. This must be initialized. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. + * \return Another negative error code for other kinds of failure. */ int mbedtls_ecp_copy( mbedtls_ecp_point *P, const mbedtls_ecp_point *Q ) { @@ -789,8 +860,16 @@ cleanup: return( ret ); } -/* - * Copy the contents of a group object +/** + * \brief This function copies the contents of group \p src into + * group \p dst. + * + * \param dst The destination group. This must be initialized. + * \param src The source group. This must be initialized. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. + * \return Another negative error code on other kinds of failure. */ int mbedtls_ecp_group_copy( mbedtls_ecp_group *dst, const mbedtls_ecp_group *src ) { @@ -800,8 +879,14 @@ int mbedtls_ecp_group_copy( mbedtls_ecp_group *dst, const mbedtls_ecp_group *src return( mbedtls_ecp_group_load( dst, src->id ) ); } -/* - * Set point to zero +/** + * \brief This function sets a point to the point at infinity. + * + * \param pt The point to set. This must be initialized. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. + * \return Another negative error code on other kinds of failure. */ int mbedtls_ecp_set_zero( mbedtls_ecp_point *pt ) { @@ -816,8 +901,14 @@ cleanup: return( ret ); } -/* - * Tell if a point is zero +/** + * \brief This function checks if a point is the point at infinity. + * + * \param pt The point to test. This must be initialized. + * + * \return \c 1 if the point is zero. + * \return \c 0 if the point is non-zero. + * \return A negative error code on failure. */ int mbedtls_ecp_is_zero( mbedtls_ecp_point *pt ) { @@ -826,8 +917,17 @@ int mbedtls_ecp_is_zero( mbedtls_ecp_point *pt ) return( mbedtls_mpi_cmp_int( &pt->Z, 0 ) == 0 ); } -/* - * Compare two points lazily +/** + * \brief This function compares two points. + * + * \note This assumes that the points are normalized. Otherwise, + * they may compare as "not equal" even if they are. + * + * \param P The first point to compare. This must be initialized. + * \param Q The second point to compare. This must be initialized. + * + * \return \c 0 if the points are equal. + * \return #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if the points are not equal. */ int mbedtls_ecp_point_cmp( const mbedtls_ecp_point *P, const mbedtls_ecp_point *Q ) @@ -845,8 +945,17 @@ int mbedtls_ecp_point_cmp( const mbedtls_ecp_point *P, return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } -/* - * Import a non-zero point from ASCII strings +/** + * \brief This function imports a non-zero point from two ASCII + * strings. + * + * \param P The destination point. This must be initialized. + * \param radix The numeric base of the input. + * \param x The first affine coordinate, as a null-terminated string. + * \param y The second affine coordinate, as a null-terminated string. + * + * \return \c 0 on success. + * \return An \c MBEDTLS_ERR_MPI_XXX error code on failure. */ int mbedtls_ecp_point_read_string( mbedtls_ecp_point *P, int radix, const char *x, const char *y ) @@ -864,14 +973,39 @@ cleanup: return( ret ); } -/* - * Export a point into unsigned binary data (SEC1 2.3.3 and RFC7748) +/** + * \brief This function exports a point into unsigned binary data. + * + * \param grp The group to which the point should belong. + * This must be initialized and have group parameters + * set, for example through mbedtls_ecp_group_load(). + * \param P The point to export. This must be initialized. + * \param format The point format. This must be either + * #MBEDTLS_ECP_PF_COMPRESSED or #MBEDTLS_ECP_PF_UNCOMPRESSED. + * (For groups without these formats, this parameter is + * ignored. But it still has to be either of the above + * values.) + * \param olen The address at which to store the length of + * the output in Bytes. This must not be \c NULL. + * \param buf The output buffer. This must be a writable buffer + * of length \p buflen Bytes. + * \param buflen The length of the output buffer \p buf in Bytes. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL if the output buffer + * is too small to hold the point. + * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if the point format + * or the export for the given group is not implemented. + * \return Another negative error code on other kinds of failure. */ int mbedtls_ecp_point_write_binary( const mbedtls_ecp_group *grp, const mbedtls_ecp_point *P, int format, size_t *olen, unsigned char *buf, size_t buflen ) { + /* + * Export a point into unsigned binary data (SEC1 2.3.3 and RFC7748) + */ int ret = MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE; size_t plen; ECP_VALIDATE_RET( grp != NULL ); @@ -939,13 +1073,35 @@ cleanup: return( ret ); } -/* - * Import a point from unsigned binary data (SEC1 2.3.4 and RFC7748) +/** + * \brief This function imports a point from unsigned binary data. + * + * \note This function does not check that the point actually + * belongs to the given group, see mbedtls_ecp_check_pubkey() + * for that. + * + * \param grp The group to which the point should belong. + * This must be initialized and have group parameters + * set, for example through mbedtls_ecp_group_load(). + * \param P The destination context to import the point to. + * This must be initialized. + * \param buf The input buffer. This must be a readable buffer + * of length \p ilen Bytes. + * \param ilen The length of the input buffer \p buf in Bytes. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if the input is invalid. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. + * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if the import for the + * given group is not implemented. */ int mbedtls_ecp_point_read_binary( const mbedtls_ecp_group *grp, mbedtls_ecp_point *pt, const unsigned char *buf, size_t ilen ) { + /* + * Import a point from unsigned binary data (SEC1 2.3.4 and RFC7748) + */ int ret = MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE; size_t plen; ECP_VALIDATE_RET( grp != NULL ); @@ -1001,16 +1157,34 @@ cleanup: return( ret ); } -/* - * Import a point from a TLS ECPoint record (RFC 4492) - * struct { - * opaque point <1..2^8-1>; - * } ECPoint; +/** + * \brief This function imports a point from a TLS ECPoint record. + * + * \note On function return, \p *buf is updated to point immediately + * after the ECPoint record. + * + * \param grp The ECP group to use. + * This must be initialized and have group parameters + * set, for example through mbedtls_ecp_group_load(). + * \param pt The destination point. + * \param buf The address of the pointer to the start of the input buffer. + * \param len The length of the buffer. + * + * \return \c 0 on success. + * \return An \c MBEDTLS_ERR_MPI_XXX error code on initialization + * failure. + * \return #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if input is invalid. */ int mbedtls_ecp_tls_read_point( const mbedtls_ecp_group *grp, mbedtls_ecp_point *pt, const unsigned char **buf, size_t buf_len ) { + /* + * Import a point from a TLS ECPoint record (RFC 4492) + * struct { + * opaque point <1..2^8-1>; + * } ECPoint; + */ unsigned char data_len; const unsigned char *buf_start; ECP_VALIDATE_RET( grp != NULL ); @@ -1037,16 +1211,39 @@ int mbedtls_ecp_tls_read_point( const mbedtls_ecp_group *grp, return( mbedtls_ecp_point_read_binary( grp, pt, buf_start, data_len ) ); } -/* - * Export a point as a TLS ECPoint record (RFC 4492) - * struct { - * opaque point <1..2^8-1>; - * } ECPoint; +/** + * \brief This function exports a point as a TLS ECPoint record + * defined in RFC 4492, Section 5.4. + * + * \param grp The ECP group to use. + * This must be initialized and have group parameters + * set, for example through mbedtls_ecp_group_load(). + * \param pt The point to be exported. This must be initialized. + * \param format The point format to use. This must be either + * #MBEDTLS_ECP_PF_COMPRESSED or #MBEDTLS_ECP_PF_UNCOMPRESSED. + * \param olen The address at which to store the length in Bytes + * of the data written. + * \param buf The target buffer. This must be a writable buffer of + * length \p blen Bytes. + * \param blen The length of the target buffer \p buf in Bytes. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if the input is invalid. + * \return #MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL if the target buffer + * is too small to hold the exported point. + * \return Another negative error code on other kinds of failure. */ -int mbedtls_ecp_tls_write_point( const mbedtls_ecp_group *grp, const mbedtls_ecp_point *pt, - int format, size_t *olen, - unsigned char *buf, size_t blen ) +int mbedtls_ecp_tls_write_point( const mbedtls_ecp_group *grp, + const mbedtls_ecp_point *pt, + int format, size_t *olen, + unsigned char *buf, size_t blen ) { + /* + * Export a point as a TLS ECPoint record (RFC 4492) + * struct { + * opaque point <1..2^8-1>; + * } ECPoint; + */ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; ECP_VALIDATE_RET( grp != NULL ); ECP_VALIDATE_RET( pt != NULL ); @@ -1074,8 +1271,22 @@ int mbedtls_ecp_tls_write_point( const mbedtls_ecp_group *grp, const mbedtls_ecp return( 0 ); } -/* - * Set a group from an ECParameters record (RFC 4492) +/** + * \brief This function sets up an ECP group context from a TLS + * ECParameters record as defined in RFC 4492, Section 5.4. + * + * \note The read pointer \p buf is updated to point right after + * the ECParameters record on exit. + * + * \param grp The group context to setup. This must be initialized. + * \param buf The address of the pointer to the start of the input buffer. + * \param len The length of the input buffer \c *buf in Bytes. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if input is invalid. + * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if the group is not + * recognized. + * \return Another negative error code on other kinds of failure. */ int mbedtls_ecp_tls_read_group( mbedtls_ecp_group *grp, const unsigned char **buf, size_t len ) @@ -1092,9 +1303,23 @@ int mbedtls_ecp_tls_read_group( mbedtls_ecp_group *grp, return( mbedtls_ecp_group_load( grp, grp_id ) ); } -/* - * Read a group id from an ECParameters record (RFC 4492) and convert it to - * mbedtls_ecp_group_id. +/** + * \brief This function extracts an elliptic curve group ID from a + * TLS ECParameters record as defined in RFC 4492, Section 5.4. + * + * \note The read pointer \p buf is updated to point right after + * the ECParameters record on exit. + * + * \param grp The address at which to store the group id. + * This must not be \c NULL. + * \param buf The address of the pointer to the start of the input buffer. + * \param len The length of the input buffer \c *buf in Bytes. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if input is invalid. + * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if the group is not + * recognized. + * \return Another negative error code on other kinds of failure. */ int mbedtls_ecp_tls_read_group_id( mbedtls_ecp_group_id *grp, const unsigned char **buf, size_t len ) @@ -1132,8 +1357,23 @@ int mbedtls_ecp_tls_read_group_id( mbedtls_ecp_group_id *grp, return( 0 ); } -/* - * Write the ECParameters record corresponding to a group (RFC 4492) +/** + * \brief This function exports an elliptic curve as a TLS + * ECParameters record as defined in RFC 4492, Section 5.4. + * + * \param grp The ECP group to be exported. + * This must be initialized and have group parameters + * set, for example through mbedtls_ecp_group_load(). + * \param olen The address at which to store the number of Bytes written. + * This must not be \c NULL. + * \param buf The buffer to write to. This must be a writable buffer + * of length \p blen Bytes. + * \param blen The length of the output buffer \p buf in Bytes. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL if the output + * buffer is too small to hold the exported group. + * \return Another negative error code on other kinds of failure. */ int mbedtls_ecp_tls_write_group( const mbedtls_ecp_group *grp, size_t *olen, unsigned char *buf, size_t blen ) @@ -2678,13 +2918,40 @@ cleanup: #endif /* MBEDTLS_ECP_MONTGOMERY_ENABLED */ -/* - * Restartable multiplication R = m * P +/** + * \brief This function performs multiplication of a point by + * an integer: \p R = \p m * \p P in a restartable way. + * + * \see mbedtls_ecp_mul() + * + * \note This function does the same as \c mbedtls_ecp_mul(), but + * it can return early and restart according to the limit set + * with \c mbedtls_ecp_set_max_ops() to reduce blocking. + * + * \param grp The ECP group to use. + * This must be initialized and have group parameters + * set, for example through mbedtls_ecp_group_load(). + * \param R The point in which to store the result of the calculation. + * This must be initialized. + * \param m The integer by which to multiply. This must be initialized. + * \param P The point to multiply. This must be initialized. + * \param f_rng The RNG function. This may be \c NULL if randomization + * of intermediate results isn't desired (discouraged). + * \param p_rng The RNG context to be passed to \p p_rng. + * \param rs_ctx The restart context (NULL disables restart). + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_ECP_INVALID_KEY if \p m is not a valid private + * key, or \p P is not a valid public key. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. + * \return #MBEDTLS_ERR_ECP_IN_PROGRESS if maximum number of + * operations was reached: see \c mbedtls_ecp_set_max_ops(). + * \return Another negative error code on other kinds of failure. */ int mbedtls_ecp_mul_restartable( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, - const mbedtls_mpi *m, const mbedtls_ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, - mbedtls_ecp_restart_ctx *rs_ctx ) + const mbedtls_mpi *m, const mbedtls_ecp_point *P, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, + mbedtls_ecp_restart_ctx *rs_ctx ) { int ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; #if defined(MBEDTLS_ECP_INTERNAL_ALT) @@ -2746,12 +3013,45 @@ cleanup: return( ret ); } -/* - * Multiplication R = m * P +/** + * \brief This function performs a scalar multiplication of a point + * by an integer: \p R = \p m * \p P. + * + * It is not thread-safe to use same group in multiple threads. + * + * \note To prevent timing attacks, this function + * executes the exact same sequence of base-field + * operations for any valid \p m. It avoids any if-branch or + * array index depending on the value of \p m. + * + * \note If \p f_rng is not NULL, it is used to randomize + * intermediate results to prevent potential timing attacks + * targeting these results. We recommend always providing + * a non-NULL \p f_rng. The overhead is negligible. + * Note: unless #MBEDTLS_ECP_NO_INTERNAL_RNG is defined, when + * \p f_rng is NULL, an internal RNG (seeded from the value + * of \p m) will be used instead. + * + * \param grp The ECP group to use. + * This must be initialized and have group parameters + * set, for example through mbedtls_ecp_group_load(). + * \param R The point in which to store the result of the calculation. + * This must be initialized. + * \param m The integer by which to multiply. This must be initialized. + * \param P The point to multiply. This must be initialized. + * \param f_rng The RNG function. This may be \c NULL if randomization + * of intermediate results isn't desired (discouraged). + * \param p_rng The RNG context to be passed to \p p_rng. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_ECP_INVALID_KEY if \p m is not a valid private + * key, or \p P is not a valid public key. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. + * \return Another negative error code on other kinds of failure. */ int mbedtls_ecp_mul( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, - const mbedtls_mpi *m, const mbedtls_ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const mbedtls_mpi *m, const mbedtls_ecp_point *P, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { ECP_VALIDATE_RET( grp != NULL ); ECP_VALIDATE_RET( R != NULL ); @@ -2843,9 +3143,45 @@ cleanup: return( ret ); } -/* - * Restartable linear combination - * NOT constant-time +/** + * \brief This function performs multiplication and addition of two + * points by integers: \p R = \p m * \p P + \p n * \p Q in a + * restartable way. + * + * \see \c mbedtls_ecp_muladd() + * + * \note This function works the same as \c mbedtls_ecp_muladd(), + * but it can return early and restart according to the limit + * set with \c mbedtls_ecp_set_max_ops() to reduce blocking. + * + * \note This function is only defined for short Weierstrass curves. + * It may not be included in builds without any short + * Weierstrass curve. + * + * \param grp The ECP group to use. + * This must be initialized and have group parameters + * set, for example through mbedtls_ecp_group_load(). + * \param R The point in which to store the result of the calculation. + * This must be initialized. + * \param m The integer by which to multiply \p P. + * This must be initialized. + * \param P The point to multiply by \p m. This must be initialized. + * \param n The integer by which to multiply \p Q. + * This must be initialized. + * \param Q The point to be multiplied by \p n. + * This must be initialized. + * \param rs_ctx The restart context (NULL disables restart). + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_ECP_INVALID_KEY if \p m or \p n are not + * valid private keys, or \p P or \p Q are not valid public + * keys. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. + * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if \p grp does not + * designate a short Weierstrass curve. + * \return #MBEDTLS_ERR_ECP_IN_PROGRESS if maximum number of + * operations was reached: see \c mbedtls_ecp_set_max_ops(). + * \return Another negative error code on other kinds of failure. */ int mbedtls_ecp_muladd_restartable( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, @@ -2940,9 +3276,40 @@ cleanup: return( ret ); } -/* - * Linear combination - * NOT constant-time +/** + * \brief This function performs multiplication and addition of two + * points by integers: \p R = \p m * \p P + \p n * \p Q + * + * It is not thread-safe to use same group in multiple threads. + * + * \note In contrast to mbedtls_ecp_mul(), this function does not + * guarantee a constant execution flow and timing. + * + * \note This function is only defined for short Weierstrass curves. + * It may not be included in builds without any short + * Weierstrass curve. + * + * \param grp The ECP group to use. + * This must be initialized and have group parameters + * set, for example through mbedtls_ecp_group_load(). + * \param R The point in which to store the result of the calculation. + * This must be initialized. + * \param m The integer by which to multiply \p P. + * This must be initialized. + * \param P The point to multiply by \p m. This must be initialized. + * \param n The integer by which to multiply \p Q. + * This must be initialized. + * \param Q The point to be multiplied by \p n. + * This must be initialized. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_ECP_INVALID_KEY if \p m or \p n are not + * valid private keys, or \p P or \p Q are not valid public + * keys. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. + * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if \p grp does not + * designate a short Weierstrass curve. + * \return Another negative error code on other kinds of failure. */ int mbedtls_ecp_muladd( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, const mbedtls_mpi *m, const mbedtls_ecp_point *P, @@ -2969,13 +3336,36 @@ static int ecp_check_pubkey_mx( const mbedtls_ecp_group *grp, const mbedtls_ecp_ * (RFC 7748 sec. 5 para. 3). */ if( mbedtls_mpi_size( &pt->X ) > ( grp->nbits + 7 ) / 8 ) return( MBEDTLS_ERR_ECP_INVALID_KEY ); - return( 0 ); } #endif /* MBEDTLS_ECP_MONTGOMERY_ENABLED */ -/* - * Check that a point is valid as a public key +/** + * \brief This function checks that a point is a valid public key + * on this curve. + * + * It only checks that the point is non-zero, has + * valid coordinates and lies on the curve. It does not verify + * that it is indeed a multiple of \p G. This additional + * check is computationally more expensive, is not required + * by standards, and should not be necessary if the group + * used has a small cofactor. In particular, it is useless for + * the NIST groups which all have a cofactor of 1. + * + * \note This function uses bare components rather than an + * ::mbedtls_ecp_keypair structure, to ease use with other + * structures, such as ::mbedtls_ecdh_context or + * ::mbedtls_ecdsa_context. + * + * \param grp The ECP group the point should belong to. + * This must be initialized and have group parameters + * set, for example through mbedtls_ecp_group_load(). + * \param pt The point to check. This must be initialized. + * + * \return \c 0 if the point is a valid public key. + * \return #MBEDTLS_ERR_ECP_INVALID_KEY if the point is not + * a valid public key for the given curve. + * \return Another negative error code on other kinds of failure. */ int mbedtls_ecp_check_pubkey( const mbedtls_ecp_group *grp, const mbedtls_ecp_point *pt ) @@ -2998,8 +3388,24 @@ int mbedtls_ecp_check_pubkey( const mbedtls_ecp_group *grp, return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } -/* - * Check that an mbedtls_mpi is valid as a private key +/** + * \brief This function checks that an \p mbedtls_mpi is a + * valid private key for this curve. + * + * \note This function uses bare components rather than an + * ::mbedtls_ecp_keypair structure to ease use with other + * structures, such as ::mbedtls_ecdh_context or + * ::mbedtls_ecdsa_context. + * + * \param grp The ECP group the private key should belong to. + * This must be initialized and have group parameters + * set, for example through mbedtls_ecp_group_load(). + * \param d The integer to check. This must be initialized. + * + * \return \c 0 if the point is a valid private key. + * \return #MBEDTLS_ERR_ECP_INVALID_KEY if the point is not a valid + * private key for the given curve. + * \return Another negative error code on other kinds of failure. */ int mbedtls_ecp_check_privkey( const mbedtls_ecp_group *grp, const mbedtls_mpi *d ) @@ -3038,13 +3444,25 @@ int mbedtls_ecp_check_privkey( const mbedtls_ecp_group *grp, return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } -/* - * Generate a private key +/** + * \brief This function generates a private key. + * + * \param grp The ECP group to generate a private key for. + * This must be initialized and have group parameters + * set, for example through mbedtls_ecp_group_load(). + * \param d The destination MPI (secret part). This must be initialized. + * \param f_rng The RNG function. This must not be \c NULL. + * \param p_rng The RNG parameter to be passed to \p f_rng. This may be + * \c NULL if \p f_rng doesn't need a context argument. + * + * \return \c 0 on success. + * \return An \c MBEDTLS_ERR_ECP_XXX or \c MBEDTLS_MPI_XXX error code + * on failure. */ int mbedtls_ecp_gen_privkey( const mbedtls_ecp_group *grp, - mbedtls_mpi *d, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + mbedtls_mpi *d, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; size_t n_size; @@ -3131,8 +3549,32 @@ cleanup: return( ret ); } -/* - * Generate a keypair with configurable base point +/** + * \brief This function generates a keypair with a configurable base + * point. + * + * \note This function uses bare components rather than an + * ::mbedtls_ecp_keypair structure to ease use with other + * structures, such as ::mbedtls_ecdh_context or + * ::mbedtls_ecdsa_context. + * + * \param grp The ECP group to generate a key pair for. + * This must be initialized and have group parameters + * set, for example through mbedtls_ecp_group_load(). + * \param G The base point to use. This must be initialized + * and belong to \p grp. It replaces the default base + * point \c grp->G used by mbedtls_ecp_gen_keypair(). + * \param d The destination MPI (secret part). + * This must be initialized. + * \param Q The destination point (public part). + * This must be initialized. + * \param f_rng The RNG function. This must not be \c NULL. + * \param p_rng The RNG context to be passed to \p f_rng. This may + * be \c NULL if \p f_rng doesn't need a context argument. + * + * \return \c 0 on success. + * \return An \c MBEDTLS_ERR_ECP_XXX or \c MBEDTLS_MPI_XXX error code + * on failure. */ int mbedtls_ecp_gen_keypair_base( mbedtls_ecp_group *grp, const mbedtls_ecp_point *G, @@ -3154,8 +3596,28 @@ cleanup: return( ret ); } -/* - * Generate key pair, wrapper for conventional base point +/** + * \brief This function generates an ECP keypair. + * + * \note This function uses bare components rather than an + * ::mbedtls_ecp_keypair structure to ease use with other + * structures, such as ::mbedtls_ecdh_context or + * ::mbedtls_ecdsa_context. + * + * \param grp The ECP group to generate a key pair for. + * This must be initialized and have group parameters + * set, for example through mbedtls_ecp_group_load(). + * \param d The destination MPI (secret part). + * This must be initialized. + * \param Q The destination point (public part). + * This must be initialized. + * \param f_rng The RNG function. This must not be \c NULL. + * \param p_rng The RNG context to be passed to \p f_rng. This may + * be \c NULL if \p f_rng doesn't need a context argument. + * + * \return \c 0 on success. + * \return An \c MBEDTLS_ERR_ECP_XXX or \c MBEDTLS_MPI_XXX error code + * on failure. */ int mbedtls_ecp_gen_keypair( mbedtls_ecp_group *grp, mbedtls_mpi *d, mbedtls_ecp_point *Q, @@ -3170,11 +3632,21 @@ int mbedtls_ecp_gen_keypair( mbedtls_ecp_group *grp, return( mbedtls_ecp_gen_keypair_base( grp, &grp->G, d, Q, f_rng, p_rng ) ); } -/* - * Generate a keypair, prettier wrapper +/** + * \brief This function generates an ECP key. + * + * \param grp_id The ECP group identifier. + * \param key The destination key. This must be initialized. + * \param f_rng The RNG function to use. This must not be \c NULL. + * \param p_rng The RNG context to be passed to \p f_rng. This may + * be \c NULL if \p f_rng doesn't need a context argument. + * + * \return \c 0 on success. + * \return An \c MBEDTLS_ERR_ECP_XXX or \c MBEDTLS_MPI_XXX error code + * on failure. */ int mbedtls_ecp_gen_key( mbedtls_ecp_group_id grp_id, mbedtls_ecp_keypair *key, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; ECP_VALIDATE_RET( key != NULL ); @@ -3187,8 +3659,24 @@ int mbedtls_ecp_gen_key( mbedtls_ecp_group_id grp_id, mbedtls_ecp_keypair *key, } #define ECP_CURVE25519_KEY_SIZE 32 -/* - * Read a private key. + +/** + * \brief This function reads an elliptic curve private key. + * + * \param grp_id The ECP group identifier. + * \param key The destination key. + * \param buf The the buffer containing the binary representation of the + * key. (Big endian integer for Weierstrass curves, byte + * string for Montgomery curves.) + * \param buflen The length of the buffer in bytes. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_ECP_INVALID_KEY error if the key is + * invalid. + * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. + * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if the operation for + * the group is not implemented. + * \return Another negative error code on different kinds of failure. */ int mbedtls_ecp_read_key( mbedtls_ecp_group_id grp_id, mbedtls_ecp_keypair *key, const unsigned char *buf, size_t buflen ) @@ -3255,8 +3743,21 @@ cleanup: return( ret ); } -/* - * Write a private key. +/** + * \brief This function exports an elliptic curve private key. + * + * \param key The private key. + * \param buf The output buffer for containing the binary representation + * of the key. (Big endian integer for Weierstrass curves, byte + * string for Montgomery curves.) + * \param buflen The total length of the buffer in bytes. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL if the \p key + representation is larger than the available space in \p buf. + * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if the operation for + * the group is not implemented. + * \return Another negative error code on different kinds of failure. */ int mbedtls_ecp_write_key( mbedtls_ecp_keypair *key, unsigned char *buf, size_t buflen ) @@ -3293,9 +3794,22 @@ cleanup: return( ret ); } - -/* - * Check a public-private key pair +/** + * \brief This function checks that the keypair objects + * \p pub and \p prv have the same group and the + * same public point, and that the private key in + * \p prv is consistent with the public key. + * + * \param pub The keypair structure holding the public key. This + * must be initialized. If it contains a private key, that + * part is ignored. + * \param prv The keypair structure holding the full keypair. + * This must be initialized. + * + * \return \c 0 on success, meaning that the keys are valid and match. + * \return #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if the keys are invalid or do not match. + * \return An \c MBEDTLS_ERR_ECP_XXX or an \c MBEDTLS_ERR_MPI_XXX + * error code on calculation failure. */ int mbedtls_ecp_check_pub_priv( const mbedtls_ecp_keypair *pub, const mbedtls_ecp_keypair *prv ) { @@ -3430,8 +3944,15 @@ cleanup: return( ret ); } -/* - * Checkup routine +#ifndef MBEDTLS_ECP_DP_SECP192R1_ENABLED +#undef MBEDTLS_ECP_SHORT_WEIERSTRASS_ENABLED /* >:\ */ +#endif + +/** + * \brief The ECP checkup routine. + * + * \return \c 0 on success. + * \return \c 1 on failure. */ int mbedtls_ecp_self_test( int verbose ) { diff --git a/third_party/mbedtls/ecp.h b/third_party/mbedtls/ecp.h index 16d6b6bde..52cf1d57b 100644 --- a/third_party/mbedtls/ecp.h +++ b/third_party/mbedtls/ecp.h @@ -1,52 +1,10 @@ +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_ECP_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_ECP_H_ +#include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/config.h" +COSMOPOLITAN_C_START_ /* clang-format off */ -/** - * \file ecp.h - * - * \brief This file provides an API for Elliptic Curves over GF(P) (ECP). - * - * The use of ECP in cryptography and TLS is defined in - * Standards for Efficient Cryptography Group (SECG): SEC1 - * Elliptic Curve Cryptography and - * RFC-4492: Elliptic Curve Cryptography (ECC) Cipher Suites - * for Transport Layer Security (TLS). - * - * RFC-2409: The Internet Key Exchange (IKE) defines ECP - * group types. - * - */ - -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MBEDTLS_ECP_H -#define MBEDTLS_ECP_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "third_party/mbedtls/bignum.h" - -/* - * ECP error codes - */ #define MBEDTLS_ERR_ECP_BAD_INPUT_DATA -0x4F80 /**< Bad input parameters to function. */ #define MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL -0x4F00 /**< The buffer is too small to write to. */ #define MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE -0x4E80 /**< The requested feature is not available, for example, the requested curve is not supported. */ @@ -55,36 +13,9 @@ #define MBEDTLS_ERR_ECP_RANDOM_FAILED -0x4D00 /**< Generation of random value, such as ephemeral key, failed. */ #define MBEDTLS_ERR_ECP_INVALID_KEY -0x4C80 /**< Invalid private or public key. */ #define MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH -0x4C00 /**< The buffer contains a valid signature followed by more data. */ - -/* MBEDTLS_ERR_ECP_HW_ACCEL_FAILED is deprecated and should not be used. */ #define MBEDTLS_ERR_ECP_HW_ACCEL_FAILED -0x4B80 /**< The ECP hardware accelerator failed. */ - #define MBEDTLS_ERR_ECP_IN_PROGRESS -0x4B00 /**< Operation in progress, call again with the same parameters to continue. */ -/* Flags indicating whether to include code that is specific to certain - * types of curves. These flags are for internal library use only. */ -#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) || \ - defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) || \ - defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) || \ - defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) || \ - defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) || \ - defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) || \ - defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) || \ - defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) || \ - defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED) || \ - defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED) || \ - defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) -#define MBEDTLS_ECP_SHORT_WEIERSTRASS_ENABLED -#endif -#if defined(MBEDTLS_ECP_DP_CURVE25519_ENABLED) || \ - defined(MBEDTLS_ECP_DP_CURVE448_ENABLED) -#define MBEDTLS_ECP_MONTGOMERY_ENABLED -#endif - -#ifdef __cplusplus -extern "C" { -#endif - /** * Domain-parameter identifiers: curve, subgroup, and generator. * @@ -94,22 +25,22 @@ extern "C" { * parameters. Therefore, only standardized domain parameters from trusted * sources should be used. See mbedtls_ecp_group_load(). */ -/* Note: when adding a new curve: - * - Add it at the end of this enum, otherwise you'll break the ABI by - * changing the numerical value for existing curves. - * - Increment MBEDTLS_ECP_DP_MAX below if needed. - * - Add the corresponding MBEDTLS_ECP_DP_xxx_ENABLED macro definition to - * config.h. - * - List the curve as a dependency of MBEDTLS_ECP_C and - * MBEDTLS_ECDSA_C if supported in check_config.h. - * - Add the curve to the appropriate curve type macro - * MBEDTLS_ECP_yyy_ENABLED above. - * - Add the necessary definitions to ecp_curves.c. - * - Add the curve to the ecp_supported_curves array in ecp.c. - * - Add the curve to applicable profiles in x509_crt.c if applicable. - */ typedef enum { + /* Note: when adding a new curve: + * - Add it at the end of this enum, otherwise you'll break the ABI by + * changing the numerical value for existing curves. + * - Increment MBEDTLS_ECP_DP_MAX below if needed. + * - Add the corresponding MBEDTLS_ECP_DP_xxx_ENABLED macro definition to + * config.h. + * - List the curve as a dependency of MBEDTLS_ECP_C and + * MBEDTLS_ECDSA_C if supported in check.h. + * - Add the curve to the appropriate curve type macro + * MBEDTLS_ECP_yyy_ENABLED above. + * - Add the necessary definitions to ecp_curves.c. + * - Add the curve to the ecp_supported_curves array in ecp.c. + * - Add the curve to applicable profiles in x509_crt.c if applicable. + */ MBEDTLS_ECP_DP_NONE = 0, /*!< Curve not defined. */ MBEDTLS_ECP_DP_SECP192R1, /*!< Domain parameters for the 192-bit curve defined by FIPS 186-4 and SEC1. */ MBEDTLS_ECP_DP_SECP224R1, /*!< Domain parameters for the 224-bit curve defined by FIPS 186-4 and SEC1. */ @@ -133,6 +64,10 @@ typedef enum */ #define MBEDTLS_ECP_DP_MAX 12 +#define MBEDTLS_ECP_PF_UNCOMPRESSED 0 /**< Uncompressed point format (RFC4492) */ +#define MBEDTLS_ECP_PF_COMPRESSED 1 /**< Compressed point format (RFC4492) */ +#define MBEDTLS_ECP_TLS_NAMED_CURVE 3 /**< The named_curve of ECCurveType (RFC4492) */ + /* * Curve types */ @@ -381,876 +316,50 @@ typedef struct mbedtls_ecp_keypair } mbedtls_ecp_keypair; -/* - * Point formats, from RFC 4492's enum ECPointFormat - */ -#define MBEDTLS_ECP_PF_UNCOMPRESSED 0 /**< Uncompressed point format. */ -#define MBEDTLS_ECP_PF_COMPRESSED 1 /**< Compressed point format. */ - -/* - * Some other constants from RFC 4492 - */ -#define MBEDTLS_ECP_TLS_NAMED_CURVE 3 /**< The named_curve of ECCurveType. */ - -#if defined(MBEDTLS_ECP_RESTARTABLE) -/** - * \brief Set the maximum number of basic operations done in a row. - * - * If more operations are needed to complete a computation, - * #MBEDTLS_ERR_ECP_IN_PROGRESS will be returned by the - * function performing the computation. It is then the - * caller's responsibility to either call again with the same - * parameters until it returns 0 or an error code; or to free - * the restart context if the operation is to be aborted. - * - * It is strictly required that all input parameters and the - * restart context be the same on successive calls for the - * same operation, but output parameters need not be the - * same; they must not be used until the function finally - * returns 0. - * - * This only applies to functions whose documentation - * mentions they may return #MBEDTLS_ERR_ECP_IN_PROGRESS (or - * #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS for functions in the - * SSL module). For functions that accept a "restart context" - * argument, passing NULL disables restart and makes the - * function equivalent to the function with the same name - * with \c _restartable removed. For functions in the ECDH - * module, restart is disabled unless the function accepts - * an "ECDH context" argument and - * mbedtls_ecdh_enable_restart() was previously called on - * that context. For function in the SSL module, restart is - * only enabled for specific sides and key exchanges - * (currently only for clients and ECDHE-ECDSA). - * - * \param max_ops Maximum number of basic operations done in a row. - * Default: 0 (unlimited). - * Lower (non-zero) values mean ECC functions will block for - * a lesser maximum amount of time. - * - * \note A "basic operation" is defined as a rough equivalent of a - * multiplication in GF(p) for the NIST P-256 curve. - * As an indication, with default settings, a scalar - * multiplication (full run of \c mbedtls_ecp_mul()) is: - * - about 3300 basic operations for P-256 - * - about 9400 basic operations for P-384 - * - * \note Very low values are not always respected: sometimes - * functions need to block for a minimum number of - * operations, and will do so even if max_ops is set to a - * lower value. That minimum depends on the curve size, and - * can be made lower by decreasing the value of - * \c MBEDTLS_ECP_WINDOW_SIZE. As an indication, here is the - * lowest effective value for various curves and values of - * that parameter (w for short): - * w=6 w=5 w=4 w=3 w=2 - * P-256 208 208 160 136 124 - * P-384 682 416 320 272 248 - * P-521 1364 832 640 544 496 - * - * \note This setting is currently ignored by Curve25519. - */ -void mbedtls_ecp_set_max_ops( unsigned max_ops ); - -/** - * \brief Check if restart is enabled (max_ops != 0) - * - * \return \c 0 if \c max_ops == 0 (restart disabled) - * \return \c 1 otherwise (restart enabled) - */ -int mbedtls_ecp_restart_is_enabled( void ); -#endif /* MBEDTLS_ECP_RESTARTABLE */ - -/* - * Get the type of a curve - */ -mbedtls_ecp_curve_type mbedtls_ecp_get_type( const mbedtls_ecp_group *grp ); - -/** - * \brief This function retrieves the information defined in - * mbedtls_ecp_curve_info() for all supported curves in order - * of preference. - * - * \note This function returns information about all curves - * supported by the library. Some curves may not be - * supported for all algorithms. Call mbedtls_ecdh_can_do() - * or mbedtls_ecdsa_can_do() to check if a curve is - * supported for ECDH or ECDSA. - * - * \return A statically allocated array. The last entry is 0. - */ +const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_grp_id( mbedtls_ecp_group_id ); +const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_name( const char * ); +const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_tls_id( uint16_t ); const mbedtls_ecp_curve_info *mbedtls_ecp_curve_list( void ); - -/** - * \brief This function retrieves the list of internal group - * identifiers of all supported curves in the order of - * preference. - * - * \note This function returns information about all curves - * supported by the library. Some curves may not be - * supported for all algorithms. Call mbedtls_ecdh_can_do() - * or mbedtls_ecdsa_can_do() to check if a curve is - * supported for ECDH or ECDSA. - * - * \return A statically allocated array, - * terminated with MBEDTLS_ECP_DP_NONE. - */ const mbedtls_ecp_group_id *mbedtls_ecp_grp_id_list( void ); +int mbedtls_ecp_check_privkey( const mbedtls_ecp_group *, const mbedtls_mpi * ); +int mbedtls_ecp_check_pub_priv( const mbedtls_ecp_keypair *, const mbedtls_ecp_keypair * ); +int mbedtls_ecp_check_pubkey( const mbedtls_ecp_group *, const mbedtls_ecp_point * ); +int mbedtls_ecp_copy( mbedtls_ecp_point *, const mbedtls_ecp_point * ); +int mbedtls_ecp_gen_key( mbedtls_ecp_group_id, mbedtls_ecp_keypair *, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_ecp_gen_keypair( mbedtls_ecp_group *, mbedtls_mpi *, mbedtls_ecp_point *, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_ecp_gen_keypair_base( mbedtls_ecp_group *, const mbedtls_ecp_point *, mbedtls_mpi *, mbedtls_ecp_point *, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_ecp_gen_privkey( const mbedtls_ecp_group *, mbedtls_mpi *, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_ecp_group_copy( mbedtls_ecp_group *, const mbedtls_ecp_group * ); +int mbedtls_ecp_group_load( mbedtls_ecp_group *, mbedtls_ecp_group_id ); +int mbedtls_ecp_is_zero( mbedtls_ecp_point * ); +int mbedtls_ecp_mul( mbedtls_ecp_group *, mbedtls_ecp_point *, const mbedtls_mpi *, const mbedtls_ecp_point *, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_ecp_mul_restartable( mbedtls_ecp_group *, mbedtls_ecp_point *, const mbedtls_mpi *, const mbedtls_ecp_point *, int (*)(void *, unsigned char *, size_t), void *, mbedtls_ecp_restart_ctx * ); +int mbedtls_ecp_muladd( mbedtls_ecp_group *, mbedtls_ecp_point *, const mbedtls_mpi *, const mbedtls_ecp_point *, const mbedtls_mpi *, const mbedtls_ecp_point * ); +int mbedtls_ecp_muladd_restartable( mbedtls_ecp_group *, mbedtls_ecp_point *, const mbedtls_mpi *, const mbedtls_ecp_point *, const mbedtls_mpi *, const mbedtls_ecp_point *, mbedtls_ecp_restart_ctx * ); +int mbedtls_ecp_point_cmp( const mbedtls_ecp_point *, const mbedtls_ecp_point * ); +int mbedtls_ecp_point_read_binary( const mbedtls_ecp_group *, mbedtls_ecp_point *, const unsigned char *, size_t ); +int mbedtls_ecp_point_read_string( mbedtls_ecp_point *, int, const char *, const char * ); +int mbedtls_ecp_point_write_binary( const mbedtls_ecp_group *, const mbedtls_ecp_point *, int, size_t *, unsigned char *, size_t ); +int mbedtls_ecp_read_key( mbedtls_ecp_group_id, mbedtls_ecp_keypair *, const unsigned char *, size_t ); +int mbedtls_ecp_restart_is_enabled( void ); +int mbedtls_ecp_self_test( int ); +int mbedtls_ecp_set_zero( mbedtls_ecp_point * ); +int mbedtls_ecp_tls_read_group( mbedtls_ecp_group *, const unsigned char **, size_t ); +int mbedtls_ecp_tls_read_group_id( mbedtls_ecp_group_id *, const unsigned char **, size_t ); +int mbedtls_ecp_tls_read_point( const mbedtls_ecp_group *, mbedtls_ecp_point *, const unsigned char **, size_t ); +int mbedtls_ecp_tls_write_group( const mbedtls_ecp_group *, size_t *, unsigned char *, size_t ); +int mbedtls_ecp_tls_write_point( const mbedtls_ecp_group *, const mbedtls_ecp_point *, int, size_t *, unsigned char *, size_t ); +int mbedtls_ecp_write_key( mbedtls_ecp_keypair *, unsigned char *, size_t ); +mbedtls_ecp_curve_type mbedtls_ecp_get_type( const mbedtls_ecp_group * ); +void mbedtls_ecp_group_free( mbedtls_ecp_group * ); +void mbedtls_ecp_group_init( mbedtls_ecp_group * ); +void mbedtls_ecp_keypair_free( mbedtls_ecp_keypair * ); +void mbedtls_ecp_keypair_init( mbedtls_ecp_keypair * ); +void mbedtls_ecp_point_free( mbedtls_ecp_point * ); +void mbedtls_ecp_point_init( mbedtls_ecp_point * ); +void mbedtls_ecp_restart_free( mbedtls_ecp_restart_ctx * ); +void mbedtls_ecp_restart_init( mbedtls_ecp_restart_ctx * ); +void mbedtls_ecp_set_max_ops( unsigned ); -/** - * \brief This function retrieves curve information from an internal - * group identifier. - * - * \param grp_id An \c MBEDTLS_ECP_DP_XXX value. - * - * \return The associated curve information on success. - * \return NULL on failure. - */ -const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_grp_id( mbedtls_ecp_group_id grp_id ); - -/** - * \brief This function retrieves curve information from a TLS - * NamedCurve value. - * - * \param tls_id An \c MBEDTLS_ECP_DP_XXX value. - * - * \return The associated curve information on success. - * \return NULL on failure. - */ -const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_tls_id( uint16_t tls_id ); - -/** - * \brief This function retrieves curve information from a - * human-readable name. - * - * \param name The human-readable name. - * - * \return The associated curve information on success. - * \return NULL on failure. - */ -const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_name( const char *name ); - -/** - * \brief This function initializes a point as zero. - * - * \param pt The point to initialize. - */ -void mbedtls_ecp_point_init( mbedtls_ecp_point *pt ); - -/** - * \brief This function initializes an ECP group context - * without loading any domain parameters. - * - * \note After this function is called, domain parameters - * for various ECP groups can be loaded through the - * mbedtls_ecp_group_load() or mbedtls_ecp_tls_read_group() - * functions. - */ -void mbedtls_ecp_group_init( mbedtls_ecp_group *grp ); - -/** - * \brief This function initializes a key pair as an invalid one. - * - * \param key The key pair to initialize. - */ -void mbedtls_ecp_keypair_init( mbedtls_ecp_keypair *key ); - -/** - * \brief This function frees the components of a point. - * - * \param pt The point to free. - */ -void mbedtls_ecp_point_free( mbedtls_ecp_point *pt ); - -/** - * \brief This function frees the components of an ECP group. - * - * \param grp The group to free. This may be \c NULL, in which - * case this function returns immediately. If it is not - * \c NULL, it must point to an initialized ECP group. - */ -void mbedtls_ecp_group_free( mbedtls_ecp_group *grp ); - -/** - * \brief This function frees the components of a key pair. - * - * \param key The key pair to free. This may be \c NULL, in which - * case this function returns immediately. If it is not - * \c NULL, it must point to an initialized ECP key pair. - */ -void mbedtls_ecp_keypair_free( mbedtls_ecp_keypair *key ); - -#if defined(MBEDTLS_ECP_RESTARTABLE) -/** - * \brief Initialize a restart context. - * - * \param ctx The restart context to initialize. This must - * not be \c NULL. - */ -void mbedtls_ecp_restart_init( mbedtls_ecp_restart_ctx *ctx ); - -/** - * \brief Free the components of a restart context. - * - * \param ctx The restart context to free. This may be \c NULL, in which - * case this function returns immediately. If it is not - * \c NULL, it must point to an initialized restart context. - */ -void mbedtls_ecp_restart_free( mbedtls_ecp_restart_ctx *ctx ); -#endif /* MBEDTLS_ECP_RESTARTABLE */ - -/** - * \brief This function copies the contents of point \p Q into - * point \p P. - * - * \param P The destination point. This must be initialized. - * \param Q The source point. This must be initialized. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. - * \return Another negative error code for other kinds of failure. - */ -int mbedtls_ecp_copy( mbedtls_ecp_point *P, const mbedtls_ecp_point *Q ); - -/** - * \brief This function copies the contents of group \p src into - * group \p dst. - * - * \param dst The destination group. This must be initialized. - * \param src The source group. This must be initialized. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_ecp_group_copy( mbedtls_ecp_group *dst, - const mbedtls_ecp_group *src ); - -/** - * \brief This function sets a point to the point at infinity. - * - * \param pt The point to set. This must be initialized. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_ecp_set_zero( mbedtls_ecp_point *pt ); - -/** - * \brief This function checks if a point is the point at infinity. - * - * \param pt The point to test. This must be initialized. - * - * \return \c 1 if the point is zero. - * \return \c 0 if the point is non-zero. - * \return A negative error code on failure. - */ -int mbedtls_ecp_is_zero( mbedtls_ecp_point *pt ); - -/** - * \brief This function compares two points. - * - * \note This assumes that the points are normalized. Otherwise, - * they may compare as "not equal" even if they are. - * - * \param P The first point to compare. This must be initialized. - * \param Q The second point to compare. This must be initialized. - * - * \return \c 0 if the points are equal. - * \return #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if the points are not equal. - */ -int mbedtls_ecp_point_cmp( const mbedtls_ecp_point *P, - const mbedtls_ecp_point *Q ); - -/** - * \brief This function imports a non-zero point from two ASCII - * strings. - * - * \param P The destination point. This must be initialized. - * \param radix The numeric base of the input. - * \param x The first affine coordinate, as a null-terminated string. - * \param y The second affine coordinate, as a null-terminated string. - * - * \return \c 0 on success. - * \return An \c MBEDTLS_ERR_MPI_XXX error code on failure. - */ -int mbedtls_ecp_point_read_string( mbedtls_ecp_point *P, int radix, - const char *x, const char *y ); - -/** - * \brief This function exports a point into unsigned binary data. - * - * \param grp The group to which the point should belong. - * This must be initialized and have group parameters - * set, for example through mbedtls_ecp_group_load(). - * \param P The point to export. This must be initialized. - * \param format The point format. This must be either - * #MBEDTLS_ECP_PF_COMPRESSED or #MBEDTLS_ECP_PF_UNCOMPRESSED. - * (For groups without these formats, this parameter is - * ignored. But it still has to be either of the above - * values.) - * \param olen The address at which to store the length of - * the output in Bytes. This must not be \c NULL. - * \param buf The output buffer. This must be a writable buffer - * of length \p buflen Bytes. - * \param buflen The length of the output buffer \p buf in Bytes. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL if the output buffer - * is too small to hold the point. - * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if the point format - * or the export for the given group is not implemented. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_ecp_point_write_binary( const mbedtls_ecp_group *grp, - const mbedtls_ecp_point *P, - int format, size_t *olen, - unsigned char *buf, size_t buflen ); - -/** - * \brief This function imports a point from unsigned binary data. - * - * \note This function does not check that the point actually - * belongs to the given group, see mbedtls_ecp_check_pubkey() - * for that. - * - * \param grp The group to which the point should belong. - * This must be initialized and have group parameters - * set, for example through mbedtls_ecp_group_load(). - * \param P The destination context to import the point to. - * This must be initialized. - * \param buf The input buffer. This must be a readable buffer - * of length \p ilen Bytes. - * \param ilen The length of the input buffer \p buf in Bytes. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if the input is invalid. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. - * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if the import for the - * given group is not implemented. - */ -int mbedtls_ecp_point_read_binary( const mbedtls_ecp_group *grp, - mbedtls_ecp_point *P, - const unsigned char *buf, size_t ilen ); - -/** - * \brief This function imports a point from a TLS ECPoint record. - * - * \note On function return, \p *buf is updated to point immediately - * after the ECPoint record. - * - * \param grp The ECP group to use. - * This must be initialized and have group parameters - * set, for example through mbedtls_ecp_group_load(). - * \param pt The destination point. - * \param buf The address of the pointer to the start of the input buffer. - * \param len The length of the buffer. - * - * \return \c 0 on success. - * \return An \c MBEDTLS_ERR_MPI_XXX error code on initialization - * failure. - * \return #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if input is invalid. - */ -int mbedtls_ecp_tls_read_point( const mbedtls_ecp_group *grp, - mbedtls_ecp_point *pt, - const unsigned char **buf, size_t len ); - -/** - * \brief This function exports a point as a TLS ECPoint record - * defined in RFC 4492, Section 5.4. - * - * \param grp The ECP group to use. - * This must be initialized and have group parameters - * set, for example through mbedtls_ecp_group_load(). - * \param pt The point to be exported. This must be initialized. - * \param format The point format to use. This must be either - * #MBEDTLS_ECP_PF_COMPRESSED or #MBEDTLS_ECP_PF_UNCOMPRESSED. - * \param olen The address at which to store the length in Bytes - * of the data written. - * \param buf The target buffer. This must be a writable buffer of - * length \p blen Bytes. - * \param blen The length of the target buffer \p buf in Bytes. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if the input is invalid. - * \return #MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL if the target buffer - * is too small to hold the exported point. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_ecp_tls_write_point( const mbedtls_ecp_group *grp, - const mbedtls_ecp_point *pt, - int format, size_t *olen, - unsigned char *buf, size_t blen ); - -/** - * \brief This function sets up an ECP group context - * from a standardized set of domain parameters. - * - * \note The index should be a value of the NamedCurve enum, - * as defined in RFC-4492: Elliptic Curve Cryptography - * (ECC) Cipher Suites for Transport Layer Security (TLS), - * usually in the form of an \c MBEDTLS_ECP_DP_XXX macro. - * - * \param grp The group context to setup. This must be initialized. - * \param id The identifier of the domain parameter set to load. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if \p id doesn't - * correspond to a known group. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_ecp_group_load( mbedtls_ecp_group *grp, mbedtls_ecp_group_id id ); - -/** - * \brief This function sets up an ECP group context from a TLS - * ECParameters record as defined in RFC 4492, Section 5.4. - * - * \note The read pointer \p buf is updated to point right after - * the ECParameters record on exit. - * - * \param grp The group context to setup. This must be initialized. - * \param buf The address of the pointer to the start of the input buffer. - * \param len The length of the input buffer \c *buf in Bytes. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if input is invalid. - * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if the group is not - * recognized. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_ecp_tls_read_group( mbedtls_ecp_group *grp, - const unsigned char **buf, size_t len ); - -/** - * \brief This function extracts an elliptic curve group ID from a - * TLS ECParameters record as defined in RFC 4492, Section 5.4. - * - * \note The read pointer \p buf is updated to point right after - * the ECParameters record on exit. - * - * \param grp The address at which to store the group id. - * This must not be \c NULL. - * \param buf The address of the pointer to the start of the input buffer. - * \param len The length of the input buffer \c *buf in Bytes. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if input is invalid. - * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if the group is not - * recognized. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_ecp_tls_read_group_id( mbedtls_ecp_group_id *grp, - const unsigned char **buf, - size_t len ); -/** - * \brief This function exports an elliptic curve as a TLS - * ECParameters record as defined in RFC 4492, Section 5.4. - * - * \param grp The ECP group to be exported. - * This must be initialized and have group parameters - * set, for example through mbedtls_ecp_group_load(). - * \param olen The address at which to store the number of Bytes written. - * This must not be \c NULL. - * \param buf The buffer to write to. This must be a writable buffer - * of length \p blen Bytes. - * \param blen The length of the output buffer \p buf in Bytes. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL if the output - * buffer is too small to hold the exported group. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_ecp_tls_write_group( const mbedtls_ecp_group *grp, - size_t *olen, - unsigned char *buf, size_t blen ); - -/** - * \brief This function performs a scalar multiplication of a point - * by an integer: \p R = \p m * \p P. - * - * It is not thread-safe to use same group in multiple threads. - * - * \note To prevent timing attacks, this function - * executes the exact same sequence of base-field - * operations for any valid \p m. It avoids any if-branch or - * array index depending on the value of \p m. - * - * \note If \p f_rng is not NULL, it is used to randomize - * intermediate results to prevent potential timing attacks - * targeting these results. We recommend always providing - * a non-NULL \p f_rng. The overhead is negligible. - * Note: unless #MBEDTLS_ECP_NO_INTERNAL_RNG is defined, when - * \p f_rng is NULL, an internal RNG (seeded from the value - * of \p m) will be used instead. - * - * \param grp The ECP group to use. - * This must be initialized and have group parameters - * set, for example through mbedtls_ecp_group_load(). - * \param R The point in which to store the result of the calculation. - * This must be initialized. - * \param m The integer by which to multiply. This must be initialized. - * \param P The point to multiply. This must be initialized. - * \param f_rng The RNG function. This may be \c NULL if randomization - * of intermediate results isn't desired (discouraged). - * \param p_rng The RNG context to be passed to \p p_rng. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_ECP_INVALID_KEY if \p m is not a valid private - * key, or \p P is not a valid public key. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_ecp_mul( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, - const mbedtls_mpi *m, const mbedtls_ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); - -/** - * \brief This function performs multiplication of a point by - * an integer: \p R = \p m * \p P in a restartable way. - * - * \see mbedtls_ecp_mul() - * - * \note This function does the same as \c mbedtls_ecp_mul(), but - * it can return early and restart according to the limit set - * with \c mbedtls_ecp_set_max_ops() to reduce blocking. - * - * \param grp The ECP group to use. - * This must be initialized and have group parameters - * set, for example through mbedtls_ecp_group_load(). - * \param R The point in which to store the result of the calculation. - * This must be initialized. - * \param m The integer by which to multiply. This must be initialized. - * \param P The point to multiply. This must be initialized. - * \param f_rng The RNG function. This may be \c NULL if randomization - * of intermediate results isn't desired (discouraged). - * \param p_rng The RNG context to be passed to \p p_rng. - * \param rs_ctx The restart context (NULL disables restart). - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_ECP_INVALID_KEY if \p m is not a valid private - * key, or \p P is not a valid public key. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. - * \return #MBEDTLS_ERR_ECP_IN_PROGRESS if maximum number of - * operations was reached: see \c mbedtls_ecp_set_max_ops(). - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_ecp_mul_restartable( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, - const mbedtls_mpi *m, const mbedtls_ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, - mbedtls_ecp_restart_ctx *rs_ctx ); - -#if defined(MBEDTLS_ECP_SHORT_WEIERSTRASS_ENABLED) -/** - * \brief This function performs multiplication and addition of two - * points by integers: \p R = \p m * \p P + \p n * \p Q - * - * It is not thread-safe to use same group in multiple threads. - * - * \note In contrast to mbedtls_ecp_mul(), this function does not - * guarantee a constant execution flow and timing. - * - * \note This function is only defined for short Weierstrass curves. - * It may not be included in builds without any short - * Weierstrass curve. - * - * \param grp The ECP group to use. - * This must be initialized and have group parameters - * set, for example through mbedtls_ecp_group_load(). - * \param R The point in which to store the result of the calculation. - * This must be initialized. - * \param m The integer by which to multiply \p P. - * This must be initialized. - * \param P The point to multiply by \p m. This must be initialized. - * \param n The integer by which to multiply \p Q. - * This must be initialized. - * \param Q The point to be multiplied by \p n. - * This must be initialized. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_ECP_INVALID_KEY if \p m or \p n are not - * valid private keys, or \p P or \p Q are not valid public - * keys. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. - * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if \p grp does not - * designate a short Weierstrass curve. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_ecp_muladd( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, - const mbedtls_mpi *m, const mbedtls_ecp_point *P, - const mbedtls_mpi *n, const mbedtls_ecp_point *Q ); - -/** - * \brief This function performs multiplication and addition of two - * points by integers: \p R = \p m * \p P + \p n * \p Q in a - * restartable way. - * - * \see \c mbedtls_ecp_muladd() - * - * \note This function works the same as \c mbedtls_ecp_muladd(), - * but it can return early and restart according to the limit - * set with \c mbedtls_ecp_set_max_ops() to reduce blocking. - * - * \note This function is only defined for short Weierstrass curves. - * It may not be included in builds without any short - * Weierstrass curve. - * - * \param grp The ECP group to use. - * This must be initialized and have group parameters - * set, for example through mbedtls_ecp_group_load(). - * \param R The point in which to store the result of the calculation. - * This must be initialized. - * \param m The integer by which to multiply \p P. - * This must be initialized. - * \param P The point to multiply by \p m. This must be initialized. - * \param n The integer by which to multiply \p Q. - * This must be initialized. - * \param Q The point to be multiplied by \p n. - * This must be initialized. - * \param rs_ctx The restart context (NULL disables restart). - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_ECP_INVALID_KEY if \p m or \p n are not - * valid private keys, or \p P or \p Q are not valid public - * keys. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED on memory-allocation failure. - * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if \p grp does not - * designate a short Weierstrass curve. - * \return #MBEDTLS_ERR_ECP_IN_PROGRESS if maximum number of - * operations was reached: see \c mbedtls_ecp_set_max_ops(). - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_ecp_muladd_restartable( - mbedtls_ecp_group *grp, mbedtls_ecp_point *R, - const mbedtls_mpi *m, const mbedtls_ecp_point *P, - const mbedtls_mpi *n, const mbedtls_ecp_point *Q, - mbedtls_ecp_restart_ctx *rs_ctx ); -#endif /* MBEDTLS_ECP_SHORT_WEIERSTRASS_ENABLED */ - -/** - * \brief This function checks that a point is a valid public key - * on this curve. - * - * It only checks that the point is non-zero, has - * valid coordinates and lies on the curve. It does not verify - * that it is indeed a multiple of \p G. This additional - * check is computationally more expensive, is not required - * by standards, and should not be necessary if the group - * used has a small cofactor. In particular, it is useless for - * the NIST groups which all have a cofactor of 1. - * - * \note This function uses bare components rather than an - * ::mbedtls_ecp_keypair structure, to ease use with other - * structures, such as ::mbedtls_ecdh_context or - * ::mbedtls_ecdsa_context. - * - * \param grp The ECP group the point should belong to. - * This must be initialized and have group parameters - * set, for example through mbedtls_ecp_group_load(). - * \param pt The point to check. This must be initialized. - * - * \return \c 0 if the point is a valid public key. - * \return #MBEDTLS_ERR_ECP_INVALID_KEY if the point is not - * a valid public key for the given curve. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_ecp_check_pubkey( const mbedtls_ecp_group *grp, - const mbedtls_ecp_point *pt ); - -/** - * \brief This function checks that an \p mbedtls_mpi is a - * valid private key for this curve. - * - * \note This function uses bare components rather than an - * ::mbedtls_ecp_keypair structure to ease use with other - * structures, such as ::mbedtls_ecdh_context or - * ::mbedtls_ecdsa_context. - * - * \param grp The ECP group the private key should belong to. - * This must be initialized and have group parameters - * set, for example through mbedtls_ecp_group_load(). - * \param d The integer to check. This must be initialized. - * - * \return \c 0 if the point is a valid private key. - * \return #MBEDTLS_ERR_ECP_INVALID_KEY if the point is not a valid - * private key for the given curve. - * \return Another negative error code on other kinds of failure. - */ -int mbedtls_ecp_check_privkey( const mbedtls_ecp_group *grp, - const mbedtls_mpi *d ); - -/** - * \brief This function generates a private key. - * - * \param grp The ECP group to generate a private key for. - * This must be initialized and have group parameters - * set, for example through mbedtls_ecp_group_load(). - * \param d The destination MPI (secret part). This must be initialized. - * \param f_rng The RNG function. This must not be \c NULL. - * \param p_rng The RNG parameter to be passed to \p f_rng. This may be - * \c NULL if \p f_rng doesn't need a context argument. - * - * \return \c 0 on success. - * \return An \c MBEDTLS_ERR_ECP_XXX or \c MBEDTLS_MPI_XXX error code - * on failure. - */ -int mbedtls_ecp_gen_privkey( const mbedtls_ecp_group *grp, - mbedtls_mpi *d, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief This function generates a keypair with a configurable base - * point. - * - * \note This function uses bare components rather than an - * ::mbedtls_ecp_keypair structure to ease use with other - * structures, such as ::mbedtls_ecdh_context or - * ::mbedtls_ecdsa_context. - * - * \param grp The ECP group to generate a key pair for. - * This must be initialized and have group parameters - * set, for example through mbedtls_ecp_group_load(). - * \param G The base point to use. This must be initialized - * and belong to \p grp. It replaces the default base - * point \c grp->G used by mbedtls_ecp_gen_keypair(). - * \param d The destination MPI (secret part). - * This must be initialized. - * \param Q The destination point (public part). - * This must be initialized. - * \param f_rng The RNG function. This must not be \c NULL. - * \param p_rng The RNG context to be passed to \p f_rng. This may - * be \c NULL if \p f_rng doesn't need a context argument. - * - * \return \c 0 on success. - * \return An \c MBEDTLS_ERR_ECP_XXX or \c MBEDTLS_MPI_XXX error code - * on failure. - */ -int mbedtls_ecp_gen_keypair_base( mbedtls_ecp_group *grp, - const mbedtls_ecp_point *G, - mbedtls_mpi *d, mbedtls_ecp_point *Q, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief This function generates an ECP keypair. - * - * \note This function uses bare components rather than an - * ::mbedtls_ecp_keypair structure to ease use with other - * structures, such as ::mbedtls_ecdh_context or - * ::mbedtls_ecdsa_context. - * - * \param grp The ECP group to generate a key pair for. - * This must be initialized and have group parameters - * set, for example through mbedtls_ecp_group_load(). - * \param d The destination MPI (secret part). - * This must be initialized. - * \param Q The destination point (public part). - * This must be initialized. - * \param f_rng The RNG function. This must not be \c NULL. - * \param p_rng The RNG context to be passed to \p f_rng. This may - * be \c NULL if \p f_rng doesn't need a context argument. - * - * \return \c 0 on success. - * \return An \c MBEDTLS_ERR_ECP_XXX or \c MBEDTLS_MPI_XXX error code - * on failure. - */ -int mbedtls_ecp_gen_keypair( mbedtls_ecp_group *grp, mbedtls_mpi *d, - mbedtls_ecp_point *Q, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief This function generates an ECP key. - * - * \param grp_id The ECP group identifier. - * \param key The destination key. This must be initialized. - * \param f_rng The RNG function to use. This must not be \c NULL. - * \param p_rng The RNG context to be passed to \p f_rng. This may - * be \c NULL if \p f_rng doesn't need a context argument. - * - * \return \c 0 on success. - * \return An \c MBEDTLS_ERR_ECP_XXX or \c MBEDTLS_MPI_XXX error code - * on failure. - */ -int mbedtls_ecp_gen_key( mbedtls_ecp_group_id grp_id, mbedtls_ecp_keypair *key, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief This function reads an elliptic curve private key. - * - * \param grp_id The ECP group identifier. - * \param key The destination key. - * \param buf The the buffer containing the binary representation of the - * key. (Big endian integer for Weierstrass curves, byte - * string for Montgomery curves.) - * \param buflen The length of the buffer in bytes. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_ECP_INVALID_KEY error if the key is - * invalid. - * \return #MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed. - * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if the operation for - * the group is not implemented. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_ecp_read_key( mbedtls_ecp_group_id grp_id, mbedtls_ecp_keypair *key, - const unsigned char *buf, size_t buflen ); - -/** - * \brief This function exports an elliptic curve private key. - * - * \param key The private key. - * \param buf The output buffer for containing the binary representation - * of the key. (Big endian integer for Weierstrass curves, byte - * string for Montgomery curves.) - * \param buflen The total length of the buffer in bytes. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL if the \p key - representation is larger than the available space in \p buf. - * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if the operation for - * the group is not implemented. - * \return Another negative error code on different kinds of failure. - */ -int mbedtls_ecp_write_key( mbedtls_ecp_keypair *key, - unsigned char *buf, size_t buflen ); - -/** - * \brief This function checks that the keypair objects - * \p pub and \p prv have the same group and the - * same public point, and that the private key in - * \p prv is consistent with the public key. - * - * \param pub The keypair structure holding the public key. This - * must be initialized. If it contains a private key, that - * part is ignored. - * \param prv The keypair structure holding the full keypair. - * This must be initialized. - * - * \return \c 0 on success, meaning that the keys are valid and match. - * \return #MBEDTLS_ERR_ECP_BAD_INPUT_DATA if the keys are invalid or do not match. - * \return An \c MBEDTLS_ERR_ECP_XXX or an \c MBEDTLS_ERR_MPI_XXX - * error code on calculation failure. - */ -int mbedtls_ecp_check_pub_priv( const mbedtls_ecp_keypair *pub, - const mbedtls_ecp_keypair *prv ); - -#if defined(MBEDTLS_SELF_TEST) - -/** - * \brief The ECP checkup routine. - * - * \return \c 0 on success. - * \return \c 1 on failure. - */ -int mbedtls_ecp_self_test( int verbose ); - -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* ecp.h */ +COSMOPOLITAN_C_END_ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_ECP_H_ */ diff --git a/third_party/mbedtls/ecp_curves.c b/third_party/mbedtls/ecp_curves.c index c3c4e3044..f1b437734 100644 --- a/third_party/mbedtls/ecp_curves.c +++ b/third_party/mbedtls/ecp_curves.c @@ -1,10 +1,15 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/ecp.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * Elliptic curves over GF(p): curve-specific data and functions * @@ -24,28 +29,15 @@ asm(".include \"libc/disclaimer.inc\""); * limitations under the License. */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_ECP_C) -#include "third_party/mbedtls/ecp.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - #if !defined(MBEDTLS_ECP_ALT) -/* Parameter validation macros based on platform_util.h */ #define ECP_VALIDATE_RET( cond ) \ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_ECP_BAD_INPUT_DATA ) #define ECP_VALIDATE( cond ) \ MBEDTLS_INTERNAL_VALIDATE( cond ) -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif - /* * Conversion macros for embedded constants: * build lists of mbedtls_mpi_uint's from lists of unsigned char's grouped by 8, 4 or 2 @@ -768,8 +760,22 @@ cleanup: } #endif /* MBEDTLS_ECP_DP_CURVE448_ENABLED */ -/* - * Set a group using well-known domain parameters +/** + * \brief This function sets up an ECP group context + * from a standardized set of domain parameters. + * + * \note The index should be a value of the NamedCurve enum, + * as defined in RFC-4492: Elliptic Curve Cryptography + * (ECC) Cipher Suites for Transport Layer Security (TLS), + * usually in the form of an \c MBEDTLS_ECP_DP_XXX macro. + * + * \param grp The group context to setup. This must be initialized. + * \param id The identifier of the domain parameter set to load. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE if \p id doesn't + * correspond to a known group. + * \return Another negative error code on other kinds of failure. */ int mbedtls_ecp_group_load( mbedtls_ecp_group *grp, mbedtls_ecp_group_id id ) { @@ -1011,7 +1017,7 @@ static inline void sub32( uint32_t *dst, uint32_t src, signed char *carry ) * (see fix_negative for the motivation of C) */ #define INIT( b ) \ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; \ + int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; \ signed char c = 0, cc; \ uint32_t cur; \ size_t i = 0, bits = (b); \ diff --git a/third_party/mbedtls/ecp_internal.h b/third_party/mbedtls/ecp_internal.h index 2be5227e5..6d0dfdf0d 100644 --- a/third_party/mbedtls/ecp_internal.h +++ b/third_party/mbedtls/ecp_internal.h @@ -1,71 +1,7 @@ -/* clang-format off */ - -/** - * \file ecp_internal.h - * - * \brief Function declarations for alternative implementation of elliptic curve - * point arithmetic. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * References: - * - * [1] BERNSTEIN, Daniel J. Curve25519: new Diffie-Hellman speed records. - * - * - * [2] CORON, Jean-S'ebastien. Resistance against differential power analysis - * for elliptic curve cryptosystems. In : Cryptographic Hardware and - * Embedded Systems. Springer Berlin Heidelberg, 1999. p. 292-302. - * - * - * [3] HEDABOU, Mustapha, PINEL, Pierre, et B'EN'ETEAU, Lucien. A comb method to - * render ECC resistant against Side Channel Attacks. IACR Cryptology - * ePrint Archive, 2004, vol. 2004, p. 342. - * - * - * [4] Certicom Research. SEC 2: Recommended Elliptic Curve Domain Parameters. - * - * - * [5] HANKERSON, Darrel, MENEZES, Alfred J., VANSTONE, Scott. Guide to Elliptic - * Curve Cryptography. - * - * [6] Digital Signature Standard (DSS), FIPS 186-4. - * - * - * [7] Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer - * Security (TLS), RFC 4492. - * - * - * [8] - * - * [9] COHEN, Henri. A Course in Computational Algebraic Number Theory. - * Springer Science & Business Media, 1 Aug 2000 - */ - #ifndef MBEDTLS_ECP_INTERNAL_H #define MBEDTLS_ECP_INTERNAL_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif +/* clang-format off */ #if defined(MBEDTLS_ECP_INTERNAL_ALT) diff --git a/third_party/mbedtls/endian.h b/third_party/mbedtls/endian.h new file mode 100644 index 000000000..963f2c2f8 --- /dev/null +++ b/third_party/mbedtls/endian.h @@ -0,0 +1,51 @@ +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_ENDIAN_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_ENDIAN_H_ + +#define Read32be(S) \ + ({ \ + const uint8_t *Ptr = (S); \ + ((uint32_t)Ptr[0] << 030 | (uint32_t)Ptr[1] << 020 | \ + (uint32_t)Ptr[2] << 010 | (uint32_t)Ptr[3] << 000); \ + }) + +#define Write32be(P, V) \ + ({ \ + uint8_t *OuT = (P); \ + uint64_t VaL = (V); \ + OuT[0] = (0x00000000FF000000 & VaL) >> 030; \ + OuT[1] = (0x0000000000FF0000 & VaL) >> 020; \ + OuT[2] = (0x000000000000FF00 & VaL) >> 010; \ + OuT[3] = (0x00000000000000FF & VaL) >> 000; \ + OuT + 4; \ + }) + +#define Read64be(S) \ + ({ \ + const uint8_t *Ptr = (S); \ + ((uint64_t)Ptr[0] << 070 | (uint64_t)Ptr[1] << 060 | \ + (uint64_t)Ptr[2] << 050 | (uint64_t)Ptr[3] << 040 | \ + (uint64_t)Ptr[4] << 030 | (uint64_t)Ptr[5] << 020 | \ + (uint64_t)Ptr[6] << 010 | (uint64_t)Ptr[7] << 000); \ + }) + +#define Write64be(P, V) \ + ({ \ + uint64_t VaL = (V); \ + uint8_t *OuT = (P); \ + OuT[0] = (0xFF00000000000000 & VaL) >> 070; \ + OuT[1] = (0x00FF000000000000 & VaL) >> 060; \ + OuT[2] = (0x0000FF0000000000 & VaL) >> 050; \ + OuT[3] = (0x000000FF00000000 & VaL) >> 040; \ + OuT[4] = (0x00000000FF000000 & VaL) >> 030; \ + OuT[5] = (0x0000000000FF0000 & VaL) >> 020; \ + OuT[6] = (0x000000000000FF00 & VaL) >> 010; \ + OuT[7] = (0x00000000000000FF & VaL) >> 000; \ + OuT + 8; \ + }) + +#define GET_UINT32_BE(n, b, i) (n) = Read32be((b) + (i)) +#define PUT_UINT32_BE(n, b, i) Write32be((b) + (i), n) +#define GET_UINT64_BE(n, b, i) (n) = Read64be((b) + (i)) +#define PUT_UINT64_BE(n, b, i) Write64be((b) + (i), n) + +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_ENDIAN_H_ */ diff --git a/third_party/mbedtls/entropy.c b/third_party/mbedtls/entropy.c index 3d66f0587..6053cc4d8 100644 --- a/third_party/mbedtls/entropy.c +++ b/third_party/mbedtls/entropy.c @@ -1,10 +1,18 @@ -/* clang-format off */ +#include "libc/calls/calls.h" +#include "libc/stdio/stdio.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/entropy.h" +#include "third_party/mbedtls/entropy_poll.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * Entropy accumulator implementation * @@ -24,10 +32,6 @@ asm(".include \"libc/disclaimer.inc\""); * limitations under the License. */ -#include "libc/calls/calls.h" -#include "libc/stdio/stdio.h" -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_ENTROPY_C) #if defined(MBEDTLS_TEST_NULL_ENTROPY) @@ -36,103 +40,43 @@ asm(".include \"libc/disclaimer.inc\""); #warning "**** THIS BUILD IS *NOT* SUITABLE FOR PRODUCTION USE " #endif -#include "third_party/mbedtls/entropy.h" -#include "third_party/mbedtls/entropy_poll.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_FS_IO) -#endif - -#if defined(MBEDTLS_ENTROPY_NV_SEED) -#include "third_party/mbedtls/platform.h" -#endif - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - -#if defined(MBEDTLS_HAVEGE_C) -#include "third_party/mbedtls/havege.h" -#endif - #define ENTROPY_MAX_LOOP 256 /**< Maximum amount to loop before error */ +/** + * \brief Initialize the context + * + * \param ctx Entropy context to initialize + */ void mbedtls_entropy_init( mbedtls_entropy_context *ctx ) { ctx->source_count = 0; memset( ctx->source, 0, sizeof( ctx->source ) ); -#if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_init( &ctx->mutex ); -#endif - ctx->accumulator_started = 0; #if defined(MBEDTLS_ENTROPY_SHA512_ACCUMULATOR) mbedtls_sha512_init( &ctx->accumulator ); #else mbedtls_sha256_init( &ctx->accumulator ); #endif -#if defined(MBEDTLS_HAVEGE_C) - mbedtls_havege_init( &ctx->havege_data ); -#endif /* Reminder: Update ENTROPY_HAVE_STRONG in the test files * when adding more strong entropy sources here. */ - -#if defined(MBEDTLS_TEST_NULL_ENTROPY) - mbedtls_entropy_add_source( ctx, mbedtls_null_entropy_poll, NULL, - 1, MBEDTLS_ENTROPY_SOURCE_STRONG ); -#endif - -#if !defined(MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES) -#if !defined(MBEDTLS_NO_PLATFORM_ENTROPY) - mbedtls_entropy_add_source( ctx, mbedtls_platform_entropy_poll, NULL, - MBEDTLS_ENTROPY_MIN_PLATFORM, - MBEDTLS_ENTROPY_SOURCE_STRONG ); -#endif -#if defined(MBEDTLS_TIMING_C) - mbedtls_entropy_add_source( ctx, mbedtls_hardclock_poll, NULL, - MBEDTLS_ENTROPY_MIN_HARDCLOCK, - MBEDTLS_ENTROPY_SOURCE_WEAK ); -#endif -#if defined(MBEDTLS_HAVEGE_C) - mbedtls_entropy_add_source( ctx, mbedtls_havege_poll, &ctx->havege_data, - MBEDTLS_ENTROPY_MIN_HAVEGE, - MBEDTLS_ENTROPY_SOURCE_STRONG ); -#endif -#if defined(MBEDTLS_ENTROPY_HARDWARE_ALT) mbedtls_entropy_add_source( ctx, mbedtls_hardware_poll, NULL, MBEDTLS_ENTROPY_MIN_HARDWARE, MBEDTLS_ENTROPY_SOURCE_STRONG ); -#endif -#if defined(MBEDTLS_ENTROPY_NV_SEED) - mbedtls_entropy_add_source( ctx, mbedtls_nv_seed_poll, NULL, - MBEDTLS_ENTROPY_BLOCK_SIZE, - MBEDTLS_ENTROPY_SOURCE_STRONG ); - ctx->initial_entropy_run = 0; -#endif -#endif /* MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES */ } +/** + * \brief Free the data in the context + * + * \param ctx Entropy context to free + */ void mbedtls_entropy_free( mbedtls_entropy_context *ctx ) { /* If the context was already free, don't call free() again. * This is important for mutexes which don't allow double-free. */ if( ctx->accumulator_started == -1 ) return; - -#if defined(MBEDTLS_HAVEGE_C) - mbedtls_havege_free( &ctx->havege_data ); -#endif -#if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_free( &ctx->mutex ); -#endif #if defined(MBEDTLS_ENTROPY_SHA512_ACCUMULATOR) mbedtls_sha512_free( &ctx->accumulator ); #else @@ -146,38 +90,35 @@ void mbedtls_entropy_free( mbedtls_entropy_context *ctx ) ctx->accumulator_started = -1; } +/** + * \brief Adds an entropy source to poll + * + * \param ctx Entropy context + * \param f_source Entropy function + * \param p_source Function data + * \param threshold Minimum required from source before entropy is released + * ( with mbedtls_entropy_func() ) (in bytes) + * \param strong MBEDTLS_ENTROPY_SOURCE_STRONG or + * MBEDTLS_ENTROPY_SOURCE_WEAK. + * At least one strong source needs to be added. + * Weaker sources (such as the cycle counter) can be used as + * a complement. + * + * \return 0 if successful or MBEDTLS_ERR_ENTROPY_MAX_SOURCES + */ int mbedtls_entropy_add_source( mbedtls_entropy_context *ctx, - mbedtls_entropy_f_source_ptr f_source, void *p_source, - size_t threshold, int strong ) + mbedtls_entropy_f_source_ptr f_source, + void *p_source, size_t threshold, int strong ) { - int idx, ret = 0; - -#if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); -#endif - + int idx; idx = ctx->source_count; - if( idx >= MBEDTLS_ENTROPY_MAX_SOURCES ) - { - ret = MBEDTLS_ERR_ENTROPY_MAX_SOURCES; - goto exit; - } - + if( idx >= MBEDTLS_ENTROPY_MAX_SOURCES ) return MBEDTLS_ERR_ENTROPY_MAX_SOURCES; ctx->source[idx].f_source = f_source; ctx->source[idx].p_source = p_source; ctx->source[idx].threshold = threshold; ctx->source[idx].strong = strong; - ctx->source_count++; - -exit: -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); -#endif - - return( ret ); + return 0; } /* @@ -239,24 +180,19 @@ cleanup: return( ret ); } +/** + * \brief Add data to the accumulator manually + * + * \param ctx Entropy context + * \param data Data to add + * \param len Length of data + * + * \return 0 if successful + */ int mbedtls_entropy_update_manual( mbedtls_entropy_context *ctx, const unsigned char *data, size_t len ) { - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - -#if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); -#endif - - ret = entropy_update( ctx, MBEDTLS_ENTROPY_SOURCE_MANUAL, data, len ); - -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); -#endif - - return( ret ); + return entropy_update( ctx, MBEDTLS_ENTROPY_SOURCE_MANUAL, data, len ); } /* @@ -309,28 +245,28 @@ cleanup: return( ret ); } -/* - * Thread-safe wrapper for entropy_gather_internal() +/** + * \brief Trigger an extra gather poll for the accumulator + * + * \param ctx Entropy context + * + * \return 0 if successful, or MBEDTLS_ERR_ENTROPY_SOURCE_FAILED */ int mbedtls_entropy_gather( mbedtls_entropy_context *ctx ) { - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - -#if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); -#endif - - ret = entropy_gather_internal( ctx ); - -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); -#endif - - return( ret ); + return entropy_gather_internal( ctx ); } +/** + * \brief Retrieve entropy from the accumulator + * (Maximum length: MBEDTLS_ENTROPY_BLOCK_SIZE) + * + * \param data Entropy context + * \param output Buffer to fill + * \param len Number of bytes desired, must be at most MBEDTLS_ENTROPY_BLOCK_SIZE + * + * \return 0 if successful, or MBEDTLS_ERR_ENTROPY_SOURCE_FAILED + */ int mbedtls_entropy_func( void *data, unsigned char *output, size_t len ) { int ret, count = 0, i, thresholds_reached; @@ -353,11 +289,6 @@ int mbedtls_entropy_func( void *data, unsigned char *output, size_t len ) } #endif -#if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); -#endif - /* * Always gather extra entropy before a call */ @@ -445,36 +376,45 @@ int mbedtls_entropy_func( void *data, unsigned char *output, size_t len ) exit: mbedtls_platform_zeroize( buf, sizeof( buf ) ); -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); -#endif - return( ret ); } #if defined(MBEDTLS_ENTROPY_NV_SEED) +/** + * \brief Trigger an update of the seed file in NV by using the + * current entropy pool. + * + * \param ctx Entropy context + * + * \return 0 if successful + */ int mbedtls_entropy_update_nv_seed( mbedtls_entropy_context *ctx ) { int ret = MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR; unsigned char buf[MBEDTLS_ENTROPY_BLOCK_SIZE]; - /* Read new seed and write it to NV */ if( ( ret = mbedtls_entropy_func( ctx, buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) ) != 0 ) return( ret ); - if( mbedtls_nv_seed_write( buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) < 0 ) return( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); - /* Manually update the remaining stream with a separator value to diverge */ memset( buf, 0, MBEDTLS_ENTROPY_BLOCK_SIZE ); ret = mbedtls_entropy_update_manual( ctx, buf, MBEDTLS_ENTROPY_BLOCK_SIZE ); - return( ret ); } #endif /* MBEDTLS_ENTROPY_NV_SEED */ #if defined(MBEDTLS_FS_IO) +/** + * \brief Write a seed file + * + * \param ctx Entropy context + * \param path Name of the file + * + * \return 0 if successful, + * MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR on file error, or + * MBEDTLS_ERR_ENTROPY_SOURCE_FAILED + */ int mbedtls_entropy_write_seed_file( mbedtls_entropy_context *ctx, const char *path ) { int ret = MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR; @@ -502,6 +442,18 @@ exit: return( ret ); } +/** + * \brief Read and update a seed file. Seed is added to this + * instance. No more than MBEDTLS_ENTROPY_MAX_SEED_SIZE bytes are + * read from the seed file. The rest is ignored. + * + * \param ctx Entropy context + * \param path Name of the file + * + * \return 0 if successful, + * MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR on file error, + * MBEDTLS_ERR_ENTROPY_SOURCE_FAILED + */ int mbedtls_entropy_update_seed_file( mbedtls_entropy_context *ctx, const char *path ) { int ret = 0; @@ -596,19 +548,32 @@ static int mbedtls_entropy_source_self_test_check_bits( const unsigned char *buf return( set == 0xFF || unset == 0x00 ); } -/* - * A test to ensure hat the entropy sources are functioning correctly - * and there is no obvious failure. The test performs the following checks: - * - The entropy source is not providing only 0s (all bits unset) or 1s (all - * bits set). - * - The entropy source is not providing values in a pattern. Because the - * hardware could be providing data in an arbitrary length, this check polls - * the hardware entropy source twice and compares the result to ensure they - * are not equal. - * - The error code returned by the entropy source is not an error. +/** + * \brief Checkup routine + * + * Verifies the integrity of the hardware entropy source + * provided by the function 'mbedtls_hardware_poll()'. + * + * Note this is the only hardware entropy source that is known + * at link time, and other entropy sources configured + * dynamically at runtime by the function + * mbedtls_entropy_add_source() will not be tested. + * + * \return 0 if successful, or 1 if a test failed */ int mbedtls_entropy_source_self_test( int verbose ) { + /* + * A test to ensure hat the entropy sources are functioning correctly + * and there is no obvious failure. The test performs the following checks: + * - The entropy source is not providing only 0s (all bits unset) or 1s (all + * bits set). + * - The entropy source is not providing values in a pattern. Because the + * hardware could be providing data in an arbitrary length, this check polls + * the hardware entropy source twice and compares the result to ensure they + * are not equal. + * - The error code returned by the entropy source is not an error. + */ int ret = 0; unsigned char buf0[2 * sizeof( unsigned long long int )]; unsigned char buf1[2 * sizeof( unsigned long long int )]; @@ -650,10 +615,18 @@ cleanup: #endif /* MBEDTLS_ENTROPY_HARDWARE_ALT */ -/* - * The actual entropy quality is hard to test, but we can at least - * test that the functions don't cause errors and write the correct - * amount of data to buffers. +/** + * \brief Checkup routine + * + * The actual entropy quality is hard to test, but we + * can at least test that the functions don't cause + * errors and write the correct amount of data to + * buffers. + * + * This module self-test also calls the entropy self-test, + * mbedtls_entropy_source_self_test(); + * + * \return 0 if successful, or 1 if a test failed */ int mbedtls_entropy_self_test( int verbose ) { diff --git a/third_party/mbedtls/entropy.h b/third_party/mbedtls/entropy.h index cb2cbb145..35069bc63 100644 --- a/third_party/mbedtls/entropy.h +++ b/third_party/mbedtls/entropy.h @@ -1,68 +1,25 @@ +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_ENTROPY_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_ENTROPY_H_ +#include "third_party/mbedtls/config.h" +#include "third_party/mbedtls/sha256.h" +#include "third_party/mbedtls/sha512.h" +COSMOPOLITAN_C_START_ /* clang-format off */ -/** - * \file entropy.h - * - * \brief Entropy accumulator implementation - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_ENTROPY_H -#define MBEDTLS_ENTROPY_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - #if defined(MBEDTLS_SHA512_C) && !defined(MBEDTLS_ENTROPY_FORCE_SHA256) -#include "third_party/mbedtls/sha512.h" #define MBEDTLS_ENTROPY_SHA512_ACCUMULATOR #else #if defined(MBEDTLS_SHA256_C) #define MBEDTLS_ENTROPY_SHA256_ACCUMULATOR -#include "third_party/mbedtls/sha256.h" #endif #endif -#if defined(MBEDTLS_THREADING_C) -#include "third_party/mbedtls/threading.h" -#endif - -#if defined(MBEDTLS_HAVEGE_C) -#include "third_party/mbedtls/havege.h" -#endif - #define MBEDTLS_ERR_ENTROPY_SOURCE_FAILED -0x003C /**< Critical entropy source failure. */ #define MBEDTLS_ERR_ENTROPY_MAX_SOURCES -0x003E /**< No more sources can be added. */ #define MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED -0x0040 /**< No sources have been added to poll. */ #define MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE -0x003D /**< No strong sources have been added to poll. */ #define MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR -0x003F /**< Read/write error in file. */ -/** - * \name SECTION: Module settings - * - * The configuration options you can set for this module are in this section. - * Either change them in config.h or define them on the compiler command line. - * \{ - */ - #if !defined(MBEDTLS_ENTROPY_MAX_SOURCES) #define MBEDTLS_ENTROPY_MAX_SOURCES 20 /**< Maximum number of sources supported */ #endif @@ -71,8 +28,6 @@ #define MBEDTLS_ENTROPY_MAX_GATHER 128 /**< Maximum amount requested from entropy sources */ #endif -/* \} name SECTION: Module settings */ - #if defined(MBEDTLS_ENTROPY_SHA512_ACCUMULATOR) #define MBEDTLS_ENTROPY_BLOCK_SIZE 64 /**< Block size of entropy accumulator (SHA-512) */ #else @@ -85,10 +40,6 @@ #define MBEDTLS_ENTROPY_SOURCE_STRONG 1 /**< Entropy source is strong */ #define MBEDTLS_ENTROPY_SOURCE_WEAK 0 /**< Entropy source is weak */ -#ifdef __cplusplus -extern "C" { -#endif - /** * \brief Entropy poll callback pointer * @@ -100,8 +51,7 @@ extern "C" { * \return 0 if no critical failures occurred, * MBEDTLS_ERR_ENTROPY_SOURCE_FAILED otherwise */ -typedef int (*mbedtls_entropy_f_source_ptr)(void *data, unsigned char *output, size_t len, - size_t *olen); +typedef int (*mbedtls_entropy_f_source_ptr)(void *data, unsigned char *output, size_t len, size_t *olen); /** * \brief Entropy source state @@ -131,160 +81,23 @@ typedef struct mbedtls_entropy_context #endif int source_count; /* Number of entries used in source. */ mbedtls_entropy_source_state source[MBEDTLS_ENTROPY_MAX_SOURCES]; -#if defined(MBEDTLS_HAVEGE_C) - mbedtls_havege_state havege_data; -#endif -#if defined(MBEDTLS_THREADING_C) - mbedtls_threading_mutex_t mutex; /*!< mutex */ -#endif #if defined(MBEDTLS_ENTROPY_NV_SEED) int initial_entropy_run; #endif } mbedtls_entropy_context; -/** - * \brief Initialize the context - * - * \param ctx Entropy context to initialize - */ -void mbedtls_entropy_init( mbedtls_entropy_context *ctx ); +void mbedtls_entropy_init( mbedtls_entropy_context * ); +void mbedtls_entropy_free( mbedtls_entropy_context * ); +int mbedtls_entropy_add_source( mbedtls_entropy_context *, mbedtls_entropy_f_source_ptr, void *, size_t, int ); +int mbedtls_entropy_gather( mbedtls_entropy_context * ); +int mbedtls_entropy_func( void *, unsigned char *, size_t ); +int mbedtls_entropy_update_manual( mbedtls_entropy_context *, const unsigned char *, size_t ); +int mbedtls_entropy_update_nv_seed( mbedtls_entropy_context * ); +int mbedtls_entropy_write_seed_file( mbedtls_entropy_context *, const char * ); +int mbedtls_entropy_update_seed_file( mbedtls_entropy_context *, const char * ); +int mbedtls_entropy_self_test( int ); +int mbedtls_entropy_source_self_test( int ); -/** - * \brief Free the data in the context - * - * \param ctx Entropy context to free - */ -void mbedtls_entropy_free( mbedtls_entropy_context *ctx ); - -/** - * \brief Adds an entropy source to poll - * (Thread-safe if MBEDTLS_THREADING_C is enabled) - * - * \param ctx Entropy context - * \param f_source Entropy function - * \param p_source Function data - * \param threshold Minimum required from source before entropy is released - * ( with mbedtls_entropy_func() ) (in bytes) - * \param strong MBEDTLS_ENTROPY_SOURCE_STRONG or - * MBEDTLS_ENTROPY_SOURCE_WEAK. - * At least one strong source needs to be added. - * Weaker sources (such as the cycle counter) can be used as - * a complement. - * - * \return 0 if successful or MBEDTLS_ERR_ENTROPY_MAX_SOURCES - */ -int mbedtls_entropy_add_source( mbedtls_entropy_context *ctx, - mbedtls_entropy_f_source_ptr f_source, void *p_source, - size_t threshold, int strong ); - -/** - * \brief Trigger an extra gather poll for the accumulator - * (Thread-safe if MBEDTLS_THREADING_C is enabled) - * - * \param ctx Entropy context - * - * \return 0 if successful, or MBEDTLS_ERR_ENTROPY_SOURCE_FAILED - */ -int mbedtls_entropy_gather( mbedtls_entropy_context *ctx ); - -/** - * \brief Retrieve entropy from the accumulator - * (Maximum length: MBEDTLS_ENTROPY_BLOCK_SIZE) - * (Thread-safe if MBEDTLS_THREADING_C is enabled) - * - * \param data Entropy context - * \param output Buffer to fill - * \param len Number of bytes desired, must be at most MBEDTLS_ENTROPY_BLOCK_SIZE - * - * \return 0 if successful, or MBEDTLS_ERR_ENTROPY_SOURCE_FAILED - */ -int mbedtls_entropy_func( void *data, unsigned char *output, size_t len ); - -/** - * \brief Add data to the accumulator manually - * (Thread-safe if MBEDTLS_THREADING_C is enabled) - * - * \param ctx Entropy context - * \param data Data to add - * \param len Length of data - * - * \return 0 if successful - */ -int mbedtls_entropy_update_manual( mbedtls_entropy_context *ctx, - const unsigned char *data, size_t len ); - -#if defined(MBEDTLS_ENTROPY_NV_SEED) -/** - * \brief Trigger an update of the seed file in NV by using the - * current entropy pool. - * - * \param ctx Entropy context - * - * \return 0 if successful - */ -int mbedtls_entropy_update_nv_seed( mbedtls_entropy_context *ctx ); -#endif /* MBEDTLS_ENTROPY_NV_SEED */ - -#if defined(MBEDTLS_FS_IO) -/** - * \brief Write a seed file - * - * \param ctx Entropy context - * \param path Name of the file - * - * \return 0 if successful, - * MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR on file error, or - * MBEDTLS_ERR_ENTROPY_SOURCE_FAILED - */ -int mbedtls_entropy_write_seed_file( mbedtls_entropy_context *ctx, const char *path ); - -/** - * \brief Read and update a seed file. Seed is added to this - * instance. No more than MBEDTLS_ENTROPY_MAX_SEED_SIZE bytes are - * read from the seed file. The rest is ignored. - * - * \param ctx Entropy context - * \param path Name of the file - * - * \return 0 if successful, - * MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR on file error, - * MBEDTLS_ERR_ENTROPY_SOURCE_FAILED - */ -int mbedtls_entropy_update_seed_file( mbedtls_entropy_context *ctx, const char *path ); -#endif /* MBEDTLS_FS_IO */ - -#if defined(MBEDTLS_SELF_TEST) -/** - * \brief Checkup routine - * - * This module self-test also calls the entropy self-test, - * mbedtls_entropy_source_self_test(); - * - * \return 0 if successful, or 1 if a test failed - */ -int mbedtls_entropy_self_test( int verbose ); - -#if defined(MBEDTLS_ENTROPY_HARDWARE_ALT) -/** - * \brief Checkup routine - * - * Verifies the integrity of the hardware entropy source - * provided by the function 'mbedtls_hardware_poll()'. - * - * Note this is the only hardware entropy source that is known - * at link time, and other entropy sources configured - * dynamically at runtime by the function - * mbedtls_entropy_add_source() will not be tested. - * - * \return 0 if successful, or 1 if a test failed - */ -int mbedtls_entropy_source_self_test( int verbose ); -#endif /* MBEDTLS_ENTROPY_HARDWARE_ALT */ -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* entropy.h */ +COSMOPOLITAN_C_END_ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_ENTROPY_H_ */ diff --git a/third_party/mbedtls/entropy_poll.c b/third_party/mbedtls/entropy_poll.c index 3efdf593f..c9b7b94dc 100644 --- a/third_party/mbedtls/entropy_poll.c +++ b/third_party/mbedtls/entropy_poll.c @@ -1,287 +1,14 @@ -/* clang-format off */ - -asm(".ident\t\"\\n\\n\ -Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); -asm(".include \"libc/disclaimer.inc\""); - -/* - * Platform-specific and custom entropy polling functions - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#if defined(__linux__) && !defined(_GNU_SOURCE) -/* Ensure that syscall() is available even when compiling with -std=c99 */ -#define _GNU_SOURCE -#endif - -#include "libc/stdio/stdio.h" -#include "third_party/mbedtls/common.h" - - -#if defined(MBEDTLS_ENTROPY_C) - -#include "third_party/mbedtls/entropy.h" +#include "libc/nexgen32e/rdtsc.h" +#include "libc/str/str.h" #include "third_party/mbedtls/entropy_poll.h" -#include "third_party/mbedtls/error.h" -#if defined(MBEDTLS_TIMING_C) -#include "third_party/mbedtls/timing.h" -#endif -#if defined(MBEDTLS_HAVEGE_C) -#include "third_party/mbedtls/havege.h" -#endif -#if defined(MBEDTLS_ENTROPY_NV_SEED) -#include "third_party/mbedtls/platform.h" -#endif - -#if !defined(MBEDTLS_NO_PLATFORM_ENTROPY) - -#if !defined(unix) && !defined(__unix__) && !defined(__unix) && \ - !defined(__APPLE__) && !defined(_WIN32) && !defined(__QNXNTO__) && \ - !defined(__HAIKU__) && !defined(__midipix__) -#error "Platform entropy sources only work on Unix and Windows, see MBEDTLS_NO_PLATFORM_ENTROPY in config.h" -#endif - -#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) - -#if !defined(_WIN32_WINNT) -#define _WIN32_WINNT 0x0400 -#endif - -int mbedtls_platform_entropy_poll( void *data, unsigned char *output, size_t len, - size_t *olen ) -{ - HCRYPTPROV provider; - ((void) data); - *olen = 0; - - if( CryptAcquireContext( &provider, NULL, NULL, - PROV_RSA_FULL, CRYPT_VERIFYCONTEXT ) == FALSE ) - { - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); - } - - if( CryptGenRandom( provider, (DWORD) len, output ) == FALSE ) - { - CryptReleaseContext( provider, 0 ); - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); - } - - CryptReleaseContext( provider, 0 ); - *olen = len; - - return( 0 ); +int mbedtls_hardclock_poll(void *data, unsigned char *output, size_t len, + size_t *olen) { + unsigned long timer; + timer = rdtsc(); + *olen = 0; + if (len < sizeof(unsigned long)) return 0; + memcpy(output, &timer, sizeof(unsigned long)); + *olen = sizeof(unsigned long); + return 0; } -#else /* _WIN32 && !EFIX64 && !EFI32 */ - -/* - * Test for Linux getrandom() support. - * Since there is no wrapper in the libc yet, use the generic syscall wrapper - * available in GNU libc and compatible libc's (eg uClibc). - */ -#if ((defined(__linux__) && defined(__GLIBC__)) || defined(__midipix__)) -#if defined(SYS_getrandom) -#define HAVE_GETRANDOM - -static int getrandom_wrapper( void *buf, size_t buflen, unsigned int flags ) -{ - /* MemSan cannot understand that the syscall writes to the buffer */ -#if defined(__has_feature) -#if __has_feature(memory_sanitizer) - memset( buf, 0, buflen ); -#endif -#endif - return( syscall( SYS_getrandom, buf, buflen, flags ) ); -} -#endif /* SYS_getrandom */ -#endif /* __linux__ || __midipix__ */ - -#if defined(__FreeBSD__) || defined(__DragonFly__) -#if (defined(__FreeBSD__) && __FreeBSD_version >= 1200000) || \ - (defined(__DragonFly__) && __DragonFly_version >= 500700) -#define HAVE_GETRANDOM -static int getrandom_wrapper( void *buf, size_t buflen, unsigned int flags ) -{ - return getrandom( buf, buflen, flags ); -} -#endif /* (__FreeBSD__ && __FreeBSD_version >= 1200000) || - (__DragonFly__ && __DragonFly_version >= 500700) */ -#endif /* __FreeBSD__ || __DragonFly__ */ - -/* - * Some BSD systems provide KERN_ARND. - * This is equivalent to reading from /dev/urandom, only it doesn't require an - * open file descriptor, and provides up to 256 bytes per call (basically the - * same as getentropy(), but with a longer history). - * - * Documentation: https://netbsd.gw.com/cgi-bin/man-cgi?sysctl+7 - */ -#if (defined(__FreeBSD__) || defined(__NetBSD__)) && !defined(HAVE_GETRANDOM) -#if defined(KERN_ARND) -#define HAVE_SYSCTL_ARND - -static int sysctl_arnd_wrapper( unsigned char *buf, size_t buflen ) -{ - int name[2]; - size_t len; - - name[0] = CTL_KERN; - name[1] = KERN_ARND; - - while( buflen > 0 ) - { - len = buflen > 256 ? 256 : buflen; - if( sysctl(name, 2, buf, &len, NULL, 0) == -1 ) - return( -1 ); - buflen -= len; - buf += len; - } - return( 0 ); -} -#endif /* KERN_ARND */ -#endif /* __FreeBSD__ || __NetBSD__ */ - - -int mbedtls_platform_entropy_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) -{ - FILE *file; - size_t read_len; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - ((void) data); - -#if defined(HAVE_GETRANDOM) - ret = getrandom_wrapper( output, len, 0 ); - if( ret >= 0 ) - { - *olen = ret; - return( 0 ); - } - else if( errno != ENOSYS ) - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); - /* Fall through if the system call isn't known. */ -#else - ((void) ret); -#endif /* HAVE_GETRANDOM */ - -#if defined(HAVE_SYSCTL_ARND) - ((void) file); - ((void) read_len); - if( sysctl_arnd_wrapper( output, len ) == -1 ) - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); - *olen = len; - return( 0 ); -#else - - *olen = 0; - - file = fopen( "/dev/urandom", "rb" ); - if( file == NULL ) - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); - - read_len = fread( output, 1, len, file ); - if( read_len != len ) - { - fclose( file ); - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); - } - - fclose( file ); - *olen = len; - - return( 0 ); -#endif /* HAVE_SYSCTL_ARND */ -} -#endif /* _WIN32 && !EFIX64 && !EFI32 */ -#endif /* !MBEDTLS_NO_PLATFORM_ENTROPY */ - -#if defined(MBEDTLS_TEST_NULL_ENTROPY) -int mbedtls_null_entropy_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) -{ - ((void) data); - ((void) output); - - *olen = 0; - if( len < sizeof(unsigned char) ) - return( 0 ); - - output[0] = 0; - *olen = sizeof(unsigned char); - return( 0 ); -} -#endif - -#if defined(MBEDTLS_TIMING_C) -int mbedtls_hardclock_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) -{ - unsigned long timer = mbedtls_timing_hardclock(); - ((void) data); - *olen = 0; - - if( len < sizeof(unsigned long) ) - return( 0 ); - - memcpy( output, &timer, sizeof(unsigned long) ); - *olen = sizeof(unsigned long); - - return( 0 ); -} -#endif /* MBEDTLS_TIMING_C */ - -#if defined(MBEDTLS_HAVEGE_C) -int mbedtls_havege_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) -{ - mbedtls_havege_state *hs = (mbedtls_havege_state *) data; - *olen = 0; - - if( mbedtls_havege_random( hs, output, len ) != 0 ) - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); - - *olen = len; - - return( 0 ); -} -#endif /* MBEDTLS_HAVEGE_C */ - -#if defined(MBEDTLS_ENTROPY_NV_SEED) -int mbedtls_nv_seed_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) -{ - unsigned char buf[MBEDTLS_ENTROPY_BLOCK_SIZE]; - size_t use_len = MBEDTLS_ENTROPY_BLOCK_SIZE; - ((void) data); - - memset( buf, 0, MBEDTLS_ENTROPY_BLOCK_SIZE ); - - if( mbedtls_nv_seed_read( buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) < 0 ) - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); - - if( len < use_len ) - use_len = len; - - memcpy( output, buf, use_len ); - *olen = use_len; - - return( 0 ); -} -#endif /* MBEDTLS_ENTROPY_NV_SEED */ - -#endif /* MBEDTLS_ENTROPY_C */ diff --git a/third_party/mbedtls/entropy_poll.h b/third_party/mbedtls/entropy_poll.h index ae1d01e42..f13627224 100644 --- a/third_party/mbedtls/entropy_poll.h +++ b/third_party/mbedtls/entropy_poll.h @@ -1,109 +1,15 @@ +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_ENTROPY_POLL_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_ENTROPY_POLL_H_ +COSMOPOLITAN_C_START_ + +int mbedtls_null_entropy_poll(void *, unsigned char *, size_t, size_t *); +int mbedtls_platform_entropy_poll(void *, unsigned char *, size_t, size_t *); +int mbedtls_hardclock_poll(void *, unsigned char *, size_t, size_t *); +int mbedtls_hardware_poll(void *, unsigned char *, size_t, size_t *); + +COSMOPOLITAN_C_END_ /* clang-format off */ - -/** - * \file entropy_poll.h - * - * \brief Platform-specific and custom entropy polling functions - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_ENTROPY_POLL_H -#define MBEDTLS_ENTROPY_POLL_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Default thresholds for built-in sources, in bytes - */ #define MBEDTLS_ENTROPY_MIN_PLATFORM 32 /**< Minimum for platform source */ -#define MBEDTLS_ENTROPY_MIN_HAVEGE 32 /**< Minimum for HAVEGE */ #define MBEDTLS_ENTROPY_MIN_HARDCLOCK 4 /**< Minimum for mbedtls_timing_hardclock() */ -#if !defined(MBEDTLS_ENTROPY_MIN_HARDWARE) #define MBEDTLS_ENTROPY_MIN_HARDWARE 32 /**< Minimum for the hardware source */ -#endif - -/** - * \brief Entropy poll callback that provides 0 entropy. - */ -#if defined(MBEDTLS_TEST_NULL_ENTROPY) - int mbedtls_null_entropy_poll( void *data, - unsigned char *output, size_t len, size_t *olen ); -#endif - -#if !defined(MBEDTLS_NO_PLATFORM_ENTROPY) -/** - * \brief Platform-specific entropy poll callback - */ -int mbedtls_platform_entropy_poll( void *data, - unsigned char *output, size_t len, size_t *olen ); -#endif - -#if defined(MBEDTLS_HAVEGE_C) -/** - * \brief HAVEGE based entropy poll callback - * - * Requires an HAVEGE state as its data pointer. - */ -int mbedtls_havege_poll( void *data, - unsigned char *output, size_t len, size_t *olen ); -#endif - -#if defined(MBEDTLS_TIMING_C) -/** - * \brief mbedtls_timing_hardclock-based entropy poll callback - */ -int mbedtls_hardclock_poll( void *data, - unsigned char *output, size_t len, size_t *olen ); -#endif - -#if defined(MBEDTLS_ENTROPY_HARDWARE_ALT) -/** - * \brief Entropy poll callback for a hardware source - * - * \warning This is not provided by mbed TLS! - * See \c MBEDTLS_ENTROPY_HARDWARE_ALT in config.h. - * - * \note This must accept NULL as its first argument. - */ -int mbedtls_hardware_poll( void *data, - unsigned char *output, size_t len, size_t *olen ); -#endif - -#if defined(MBEDTLS_ENTROPY_NV_SEED) -/** - * \brief Entropy poll callback for a non-volatile seed file - * - * \note This must accept NULL as its first argument. - */ -int mbedtls_nv_seed_poll( void *data, - unsigned char *output, size_t len, size_t *olen ); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* entropy_poll.h */ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_ENTROPY_POLL_H_ */ diff --git a/third_party/mbedtls/error.c b/third_party/mbedtls/error.c index 399a5f962..9a5bd81cf 100644 --- a/third_party/mbedtls/error.c +++ b/third_party/mbedtls/error.c @@ -1,10 +1,44 @@ -/* clang-format off */ +#include "libc/fmt/fmt.h" +#include "third_party/mbedtls/aes.h" +#include "third_party/mbedtls/asn1.h" +#include "third_party/mbedtls/base64.h" +#include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/ccm.h" +#include "third_party/mbedtls/chacha20.h" +#include "third_party/mbedtls/chachapoly.h" +#include "third_party/mbedtls/cipher.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/ctr_drbg.h" +#include "third_party/mbedtls/des.h" +#include "third_party/mbedtls/dhm.h" +#include "third_party/mbedtls/ecp.h" +#include "third_party/mbedtls/entropy.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/gcm.h" +#include "third_party/mbedtls/hkdf.h" +#include "third_party/mbedtls/hmac_drbg.h" +#include "third_party/mbedtls/md.h" +#include "third_party/mbedtls/md5.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/pk.h" +#include "third_party/mbedtls/pkcs5.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/poly1305.h" +#include "third_party/mbedtls/rsa.h" +#include "third_party/mbedtls/sha1.h" +#include "third_party/mbedtls/sha256.h" +#include "third_party/mbedtls/sha512.h" +#include "third_party/mbedtls/ssl.h" +#include "third_party/mbedtls/x509.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * Error message information * @@ -24,197 +58,10 @@ asm(".include \"libc/disclaimer.inc\""); * limitations under the License. */ -#include "third_party/mbedtls/common.h" - -#include "third_party/mbedtls/error.h" - #if defined(MBEDTLS_ERROR_C) || defined(MBEDTLS_ERROR_STRERROR_DUMMY) #if defined(MBEDTLS_ERROR_C) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_snprintf snprintf -#endif - -#if defined(MBEDTLS_AES_C) -#include "third_party/mbedtls/aes.h" -#endif - -#if defined(MBEDTLS_ARC4_C) -#include "third_party/mbedtls/arc4.h" -#endif - -#if defined(MBEDTLS_ARIA_C) -#include "third_party/mbedtls/aria.h" -#endif - -#if defined(MBEDTLS_ASN1_PARSE_C) -#include "third_party/mbedtls/asn1.h" -#endif - -#if defined(MBEDTLS_BASE64_C) -#include "third_party/mbedtls/base64.h" -#endif - -#if defined(MBEDTLS_BIGNUM_C) -#include "third_party/mbedtls/bignum.h" -#endif - -#if defined(MBEDTLS_BLOWFISH_C) -#include "third_party/mbedtls/blowfish.h" -#endif - -#if defined(MBEDTLS_CAMELLIA_C) -#include "third_party/mbedtls/camellia.h" -#endif - -#if defined(MBEDTLS_CCM_C) -#include "third_party/mbedtls/ccm.h" -#endif - -#if defined(MBEDTLS_CHACHA20_C) -#include "third_party/mbedtls/chacha20.h" -#endif - -#if defined(MBEDTLS_CHACHAPOLY_C) -#include "third_party/mbedtls/chachapoly.h" -#endif - -#if defined(MBEDTLS_CIPHER_C) -#include "third_party/mbedtls/cipher.h" -#endif - -#if defined(MBEDTLS_CMAC_C) -#include "third_party/mbedtls/cmac.h" -#endif - -#if defined(MBEDTLS_CTR_DRBG_C) -#include "third_party/mbedtls/ctr_drbg.h" -#endif - -#if defined(MBEDTLS_DES_C) -#include "third_party/mbedtls/des.h" -#endif - -#if defined(MBEDTLS_DHM_C) -#include "third_party/mbedtls/dhm.h" -#endif - -#if defined(MBEDTLS_ECP_C) -#include "third_party/mbedtls/ecp.h" -#endif - -#if defined(MBEDTLS_ENTROPY_C) -#include "third_party/mbedtls/entropy.h" -#endif - -#if defined(MBEDTLS_ERROR_C) -#include "third_party/mbedtls/error.h" -#endif - -#if defined(MBEDTLS_GCM_C) -#include "third_party/mbedtls/gcm.h" -#endif - -#if defined(MBEDTLS_HKDF_C) -#include "third_party/mbedtls/hkdf.h" -#endif - -#if defined(MBEDTLS_HMAC_DRBG_C) -#include "third_party/mbedtls/hmac_drbg.h" -#endif - -#if defined(MBEDTLS_MD_C) -#include "third_party/mbedtls/md.h" -#endif - -#if defined(MBEDTLS_MD2_C) -#include "third_party/mbedtls/md2.h" -#endif - -#if defined(MBEDTLS_MD4_C) -#include "third_party/mbedtls/md4.h" -#endif - -#if defined(MBEDTLS_MD5_C) -#include "third_party/mbedtls/md5.h" -#endif - -#if defined(MBEDTLS_NET_C) -#include "third_party/mbedtls/net_sockets.h" -#endif - -#if defined(MBEDTLS_OID_C) -#include "third_party/mbedtls/oid.h" -#endif - -#if defined(MBEDTLS_PADLOCK_C) -#include "third_party/mbedtls/padlock.h" -#endif - -#if defined(MBEDTLS_PEM_PARSE_C) || defined(MBEDTLS_PEM_WRITE_C) -#include "third_party/mbedtls/pem.h" -#endif - -#if defined(MBEDTLS_PK_C) -#include "third_party/mbedtls/pk.h" -#endif - -#if defined(MBEDTLS_PKCS12_C) -#include "third_party/mbedtls/pkcs12.h" -#endif - -#if defined(MBEDTLS_PKCS5_C) -#include "third_party/mbedtls/pkcs5.h" -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#endif - -#if defined(MBEDTLS_POLY1305_C) -#include "third_party/mbedtls/poly1305.h" -#endif - -#if defined(MBEDTLS_RIPEMD160_C) -#include "third_party/mbedtls/ripemd160.h" -#endif - -#if defined(MBEDTLS_RSA_C) -#include "third_party/mbedtls/rsa.h" -#endif - -#if defined(MBEDTLS_SHA1_C) -#include "third_party/mbedtls/sha1.h" -#endif - -#if defined(MBEDTLS_SHA256_C) -#include "third_party/mbedtls/sha256.h" -#endif - -#if defined(MBEDTLS_SHA512_C) -#include "third_party/mbedtls/sha512.h" -#endif - -#if defined(MBEDTLS_SSL_TLS_C) -#include "third_party/mbedtls/ssl.h" -#endif - -#if defined(MBEDTLS_THREADING_C) -#include "third_party/mbedtls/threading.h" -#endif - -#if defined(MBEDTLS_X509_USE_C) || defined(MBEDTLS_X509_CREATE_C) -#include "third_party/mbedtls/x509.h" -#endif - -#if defined(MBEDTLS_XTEA_C) -#include "third_party/mbedtls/xtea.h" -#endif - - const char * mbedtls_high_level_strerr( int error_code ) { int high_level_error_code; @@ -362,17 +209,6 @@ const char * mbedtls_high_level_strerr( int error_code ) return( "PK - PK hardware accelerator failed" ); #endif /* MBEDTLS_PK_C */ -#if defined(MBEDTLS_PKCS12_C) - case -(MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA): - return( "PKCS12 - Bad input parameters to function" ); - case -(MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE): - return( "PKCS12 - Feature not available, e.g. unsupported encryption scheme" ); - case -(MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT): - return( "PKCS12 - PBE ASN.1 data not as expected" ); - case -(MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH): - return( "PKCS12 - Given private key password does not allow for correct decryption" ); -#endif /* MBEDTLS_PKCS12_C */ - #if defined(MBEDTLS_PKCS5_C) case -(MBEDTLS_ERR_PKCS5_BAD_INPUT_DATA): return( "PKCS5 - Bad input parameters to function" ); @@ -605,22 +441,6 @@ const char * mbedtls_low_level_strerr( int error_code ) return( "AES - AES hardware accelerator failed" ); #endif /* MBEDTLS_AES_C */ -#if defined(MBEDTLS_ARC4_C) - case -(MBEDTLS_ERR_ARC4_HW_ACCEL_FAILED): - return( "ARC4 - ARC4 hardware accelerator failed" ); -#endif /* MBEDTLS_ARC4_C */ - -#if defined(MBEDTLS_ARIA_C) - case -(MBEDTLS_ERR_ARIA_BAD_INPUT_DATA): - return( "ARIA - Bad input data" ); - case -(MBEDTLS_ERR_ARIA_INVALID_INPUT_LENGTH): - return( "ARIA - Invalid data input length" ); - case -(MBEDTLS_ERR_ARIA_FEATURE_UNAVAILABLE): - return( "ARIA - Feature not available. For example, an unsupported ARIA key size" ); - case -(MBEDTLS_ERR_ARIA_HW_ACCEL_FAILED): - return( "ARIA - ARIA hardware accelerator failed" ); -#endif /* MBEDTLS_ARIA_C */ - #if defined(MBEDTLS_ASN1_PARSE_C) case -(MBEDTLS_ERR_ASN1_OUT_OF_DATA): return( "ASN1 - Out of data when parsing an ASN1 data structure" ); @@ -664,24 +484,6 @@ const char * mbedtls_low_level_strerr( int error_code ) return( "BIGNUM - Memory allocation failed" ); #endif /* MBEDTLS_BIGNUM_C */ -#if defined(MBEDTLS_BLOWFISH_C) - case -(MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA): - return( "BLOWFISH - Bad input data" ); - case -(MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH): - return( "BLOWFISH - Invalid data input length" ); - case -(MBEDTLS_ERR_BLOWFISH_HW_ACCEL_FAILED): - return( "BLOWFISH - Blowfish hardware accelerator failed" ); -#endif /* MBEDTLS_BLOWFISH_C */ - -#if defined(MBEDTLS_CAMELLIA_C) - case -(MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA): - return( "CAMELLIA - Bad input data" ); - case -(MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH): - return( "CAMELLIA - Invalid data input length" ); - case -(MBEDTLS_ERR_CAMELLIA_HW_ACCEL_FAILED): - return( "CAMELLIA - Camellia hardware accelerator failed" ); -#endif /* MBEDTLS_CAMELLIA_C */ - #if defined(MBEDTLS_CCM_C) case -(MBEDTLS_ERR_CCM_BAD_INPUT): return( "CCM - Bad input parameters to the function" ); @@ -775,50 +577,11 @@ const char * mbedtls_low_level_strerr( int error_code ) return( "HMAC_DRBG - The entropy source failed" ); #endif /* MBEDTLS_HMAC_DRBG_C */ -#if defined(MBEDTLS_MD2_C) - case -(MBEDTLS_ERR_MD2_HW_ACCEL_FAILED): - return( "MD2 - MD2 hardware accelerator failed" ); -#endif /* MBEDTLS_MD2_C */ - -#if defined(MBEDTLS_MD4_C) - case -(MBEDTLS_ERR_MD4_HW_ACCEL_FAILED): - return( "MD4 - MD4 hardware accelerator failed" ); -#endif /* MBEDTLS_MD4_C */ - #if defined(MBEDTLS_MD5_C) case -(MBEDTLS_ERR_MD5_HW_ACCEL_FAILED): return( "MD5 - MD5 hardware accelerator failed" ); #endif /* MBEDTLS_MD5_C */ -#if defined(MBEDTLS_NET_C) - case -(MBEDTLS_ERR_NET_SOCKET_FAILED): - return( "NET - Failed to open a socket" ); - case -(MBEDTLS_ERR_NET_CONNECT_FAILED): - return( "NET - The connection to the given server / port failed" ); - case -(MBEDTLS_ERR_NET_BIND_FAILED): - return( "NET - Binding of the socket failed" ); - case -(MBEDTLS_ERR_NET_LISTEN_FAILED): - return( "NET - Could not listen on the socket" ); - case -(MBEDTLS_ERR_NET_ACCEPT_FAILED): - return( "NET - Could not accept the incoming connection" ); - case -(MBEDTLS_ERR_NET_RECV_FAILED): - return( "NET - Reading information from the socket failed" ); - case -(MBEDTLS_ERR_NET_SEND_FAILED): - return( "NET - Sending information through the socket failed" ); - case -(MBEDTLS_ERR_NET_CONN_RESET): - return( "NET - Connection was reset by peer" ); - case -(MBEDTLS_ERR_NET_UNKNOWN_HOST): - return( "NET - Failed to get an IP address for the given hostname" ); - case -(MBEDTLS_ERR_NET_BUFFER_TOO_SMALL): - return( "NET - Buffer is too small to hold the data" ); - case -(MBEDTLS_ERR_NET_INVALID_CONTEXT): - return( "NET - The context is invalid, eg because it was free()ed" ); - case -(MBEDTLS_ERR_NET_POLL_FAILED): - return( "NET - Polling the net context failed" ); - case -(MBEDTLS_ERR_NET_BAD_INPUT_DATA): - return( "NET - Input invalid" ); -#endif /* MBEDTLS_NET_C */ - #if defined(MBEDTLS_OID_C) case -(MBEDTLS_ERR_OID_NOT_FOUND): return( "OID - OID is not found" ); @@ -831,13 +594,6 @@ const char * mbedtls_low_level_strerr( int error_code ) return( "PADLOCK - Input data should be aligned" ); #endif /* MBEDTLS_PADLOCK_C */ -#if defined(MBEDTLS_PLATFORM_C) - case -(MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED): - return( "PLATFORM - Hardware accelerator failed" ); - case -(MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED): - return( "PLATFORM - The requested feature is not supported by the platform" ); -#endif /* MBEDTLS_PLATFORM_C */ - #if defined(MBEDTLS_POLY1305_C) case -(MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA): return( "POLY1305 - Invalid input parameter(s)" ); @@ -847,11 +603,6 @@ const char * mbedtls_low_level_strerr( int error_code ) return( "POLY1305 - Poly1305 hardware accelerator failed" ); #endif /* MBEDTLS_POLY1305_C */ -#if defined(MBEDTLS_RIPEMD160_C) - case -(MBEDTLS_ERR_RIPEMD160_HW_ACCEL_FAILED): - return( "RIPEMD160 - RIPEMD160 hardware accelerator failed" ); -#endif /* MBEDTLS_RIPEMD160_C */ - #if defined(MBEDTLS_SHA1_C) case -(MBEDTLS_ERR_SHA1_HW_ACCEL_FAILED): return( "SHA1 - SHA-1 hardware accelerator failed" ); @@ -873,21 +624,6 @@ const char * mbedtls_low_level_strerr( int error_code ) return( "SHA512 - SHA-512 input data was malformed" ); #endif /* MBEDTLS_SHA512_C */ -#if defined(MBEDTLS_THREADING_C) - case -(MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE): - return( "THREADING - The selected feature is not available" ); - case -(MBEDTLS_ERR_THREADING_BAD_INPUT_DATA): - return( "THREADING - Bad input parameters to function" ); - case -(MBEDTLS_ERR_THREADING_MUTEX_ERROR): - return( "THREADING - Locking / unlocking / free failed with error code" ); -#endif /* MBEDTLS_THREADING_C */ - -#if defined(MBEDTLS_XTEA_C) - case -(MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH): - return( "XTEA - The data input has an invalid length" ); - case -(MBEDTLS_ERR_XTEA_HW_ACCEL_FAILED): - return( "XTEA - XTEA hardware accelerator failed" ); -#endif /* MBEDTLS_XTEA_C */ /* End Auto-Generated Code. */ default: diff --git a/third_party/mbedtls/error.h b/third_party/mbedtls/error.h index 7687dd0b0..a2b0e3cbf 100644 --- a/third_party/mbedtls/error.h +++ b/third_party/mbedtls/error.h @@ -1,35 +1,7 @@ -/* clang-format off */ - -/** - * \file error.h - * - * \brief Error to string translation - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_ERROR_H #define MBEDTLS_ERROR_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - +/* clang-format off */ /** * Error code layout. diff --git a/third_party/mbedtls/everest.c b/third_party/mbedtls/everest.c new file mode 100644 index 000000000..78c01d0ad --- /dev/null +++ b/third_party/mbedtls/everest.c @@ -0,0 +1,1219 @@ +#include "libc/bits/bits.h" +#include "libc/limits.h" +#include "third_party/mbedtls/asn1.h" +#include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/everest.h" +#include "third_party/mbedtls/platform.h" + +asm(".ident\t\"\\n\\n\ +Everest (Apache 2.0)\\n\ +Copyright 2016-2018 INRIA and Microsoft Corporation\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ +/* + * ECDH with curve-optimized implementation multiplexing + * + * Copyright 2016-2018 INRIA and Microsoft Corporation + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ + +#if defined(MBEDTLS_ECDH_C) && defined(MBEDTLS_ECDH_VARIANT_EVEREST_ENABLED) + +#define load64_le(b) READ64LE(b) +#define store64_le(b, i) WRITE64LE(b, i) + +#define KRML_HOST_EXIT exit +#define KRML_HOST_PRINTF printf + +#define KRML_EXIT \ + do { \ + KRML_HOST_PRINTF("Unimplemented function at %s:%d\n", __FILE__, __LINE__); \ + KRML_HOST_EXIT(254); \ + } while (0) + +#define _KRML_CHECK_SIZE_PRAGMA \ + _Pragma("GCC diagnostic ignored \"-Wtype-limits\"") + +#define KRML_CHECK_SIZE(size_elt, sz) \ + do { \ + _KRML_CHECK_SIZE_PRAGMA \ + if (((size_t)(sz)) > ((size_t)(SIZE_MAX / (size_elt)))) { \ + KRML_HOST_PRINTF( \ + "Maximum allocatable size exceeded, aborting before overflow at " \ + "%s:%d\n", \ + __FILE__, __LINE__); \ + KRML_HOST_EXIT(253); \ + } \ + } while (0) + +typedef const char *Prims_string; + +typedef struct { + uint32_t length; + const char *data; +} FStar_Bytes_bytes; + +typedef int32_t Prims_pos, Prims_nat, Prims_nonzero, Prims_int, + krml_checked_int_t; + +/* Prims_nat not yet in scope */ +inline static int32_t krml_time() { + return (int32_t)time(NULL); +} + +static uint64_t FStar_UInt64_eq_mask(uint64_t a, uint64_t b) +{ + uint64_t x = a ^ b; + uint64_t minus_x = ~x + (uint64_t)1U; + uint64_t x_or_minus_x = x | minus_x; + uint64_t xnx = x_or_minus_x >> (uint32_t)63U; + return xnx - (uint64_t)1U; +} + +static uint64_t FStar_UInt64_gte_mask(uint64_t a, uint64_t b) +{ + uint64_t x = a; + uint64_t y = b; + uint64_t x_xor_y = x ^ y; + uint64_t x_sub_y = x - y; + uint64_t x_sub_y_xor_y = x_sub_y ^ y; + uint64_t q = x_xor_y | x_sub_y_xor_y; + uint64_t x_xor_q = x ^ q; + uint64_t x_xor_q_ = x_xor_q >> (uint32_t)63U; + return x_xor_q_ - (uint64_t)1U; +} + +static uint32_t FStar_UInt32_eq_mask(uint32_t a, uint32_t b) +{ + uint32_t x = a ^ b; + uint32_t minus_x = ~x + (uint32_t)1U; + uint32_t x_or_minus_x = x | minus_x; + uint32_t xnx = x_or_minus_x >> (uint32_t)31U; + return xnx - (uint32_t)1U; +} + +static uint32_t FStar_UInt32_gte_mask(uint32_t a, uint32_t b) +{ + uint32_t x = a; + uint32_t y = b; + uint32_t x_xor_y = x ^ y; + uint32_t x_sub_y = x - y; + uint32_t x_sub_y_xor_y = x_sub_y ^ y; + uint32_t q = x_xor_y | x_sub_y_xor_y; + uint32_t x_xor_q = x ^ q; + uint32_t x_xor_q_ = x_xor_q >> (uint32_t)31U; + return x_xor_q_ - (uint32_t)1U; +} + +static uint16_t FStar_UInt16_eq_mask(uint16_t a, uint16_t b) +{ + uint16_t x = a ^ b; + uint16_t minus_x = ~x + (uint16_t)1U; + uint16_t x_or_minus_x = x | minus_x; + uint16_t xnx = x_or_minus_x >> (uint32_t)15U; + return xnx - (uint16_t)1U; +} + +static uint16_t FStar_UInt16_gte_mask(uint16_t a, uint16_t b) +{ + uint16_t x = a; + uint16_t y = b; + uint16_t x_xor_y = x ^ y; + uint16_t x_sub_y = x - y; + uint16_t x_sub_y_xor_y = x_sub_y ^ y; + uint16_t q = x_xor_y | x_sub_y_xor_y; + uint16_t x_xor_q = x ^ q; + uint16_t x_xor_q_ = x_xor_q >> (uint32_t)15U; + return x_xor_q_ - (uint16_t)1U; +} + +static uint8_t FStar_UInt8_eq_mask(uint8_t a, uint8_t b) +{ + uint8_t x = a ^ b; + uint8_t minus_x = ~x + (uint8_t)1U; + uint8_t x_or_minus_x = x | minus_x; + uint8_t xnx = x_or_minus_x >> (uint32_t)7U; + return xnx - (uint8_t)1U; +} + +static uint8_t FStar_UInt8_gte_mask(uint8_t a, uint8_t b) +{ + uint8_t x = a; + uint8_t y = b; + uint8_t x_xor_y = x ^ y; + uint8_t x_sub_y = x - y; + uint8_t x_sub_y_xor_y = x_sub_y ^ y; + uint8_t q = x_xor_y | x_sub_y_xor_y; + uint8_t x_xor_q = x ^ q; + uint8_t x_xor_q_ = x_xor_q >> (uint32_t)7U; + return x_xor_q_ - (uint8_t)1U; +} + +static void Hacl_Bignum_Modulo_carry_top(uint64_t *b) +{ + uint64_t b4 = b[4U]; + uint64_t b0 = b[0U]; + uint64_t b4_ = b4 & (uint64_t)0x7ffffffffffffU; + uint64_t b0_ = b0 + (uint64_t)19U * (b4 >> (uint32_t)51U); + b[4U] = b4_; + b[0U] = b0_; +} + +inline static void Hacl_Bignum_Fproduct_copy_from_wide_(uint64_t *output, uint128_t *input) +{ + uint32_t i; + for (i = (uint32_t)0U; i < (uint32_t)5U; i = i + (uint32_t)1U) + { + uint128_t xi = input[i]; + output[i] = (uint64_t)xi; + } +} + +inline static void +Hacl_Bignum_Fproduct_sum_scalar_multiplication_(uint128_t *output, uint64_t *input, uint64_t s) +{ + uint32_t i; + for (i = (uint32_t)0U; i < (uint32_t)5U; i = i + (uint32_t)1U) + { + uint128_t xi = output[i]; + uint64_t yi = input[i]; + output[i] = xi + (uint128_t)yi * s; + } +} + +inline static void Hacl_Bignum_Fproduct_carry_wide_(uint128_t *tmp) +{ + uint32_t i; + for (i = (uint32_t)0U; i < (uint32_t)4U; i = i + (uint32_t)1U) + { + uint32_t ctr = i; + uint128_t tctr = tmp[ctr]; + uint128_t tctrp1 = tmp[ctr + (uint32_t)1U]; + uint64_t r0 = (uint64_t)tctr & (uint64_t)0x7ffffffffffffU; + uint128_t c = tctr >> (uint32_t)51U; + tmp[ctr] = (uint128_t)r0; + tmp[ctr + (uint32_t)1U] = tctrp1 + c; + } +} + +inline static void Hacl_Bignum_Fmul_shift_reduce(uint64_t *output) +{ + uint64_t tmp = output[4U]; + uint64_t b0; + { + uint32_t i; + for (i = (uint32_t)0U; i < (uint32_t)4U; i = i + (uint32_t)1U) + { + uint32_t ctr = (uint32_t)5U - i - (uint32_t)1U; + uint64_t z = output[ctr - (uint32_t)1U]; + output[ctr] = z; + } + } + output[0U] = tmp; + b0 = output[0U]; + output[0U] = (uint64_t)19U * b0; +} + +static void +Hacl_Bignum_Fmul_mul_shift_reduce_(uint128_t *output, uint64_t *input, uint64_t *input2) +{ + uint32_t i; + uint64_t input2i; + { + uint32_t i0; + for (i0 = (uint32_t)0U; i0 < (uint32_t)4U; i0 = i0 + (uint32_t)1U) + { + uint64_t input2i0 = input2[i0]; + Hacl_Bignum_Fproduct_sum_scalar_multiplication_(output, input, input2i0); + Hacl_Bignum_Fmul_shift_reduce(input); + } + } + i = (uint32_t)4U; + input2i = input2[i]; + Hacl_Bignum_Fproduct_sum_scalar_multiplication_(output, input, input2i); +} + +inline static void Hacl_Bignum_Fmul_fmul(uint64_t *output, uint64_t *input, uint64_t *input2) +{ + uint64_t tmp[5U] = { 0U }; + memcpy(tmp, input, (uint32_t)5U * sizeof input[0U]); + KRML_CHECK_SIZE(sizeof (uint128_t), (uint32_t)5U); + { + uint128_t t[5U]; + { + uint32_t _i; + for (_i = 0U; _i < (uint32_t)5U; ++_i) + t[_i] = (uint128_t)(uint64_t)0U; + } + { + uint128_t b4; + uint128_t b0; + uint128_t b4_; + uint128_t b0_; + uint64_t i0; + uint64_t i1; + uint64_t i0_; + uint64_t i1_; + Hacl_Bignum_Fmul_mul_shift_reduce_(t, tmp, input2); + Hacl_Bignum_Fproduct_carry_wide_(t); + b4 = t[4U]; + b0 = t[0U]; + b4_ = b4 & (uint128_t)(uint64_t)0x7ffffffffffffU; + b0_ = b0 + (uint128_t)(uint64_t)19U * (uint64_t)(b4 >> (uint32_t)51U); + t[4U] = b4_; + t[0U] = b0_; + Hacl_Bignum_Fproduct_copy_from_wide_(output, t); + i0 = output[0U]; + i1 = output[1U]; + i0_ = i0 & (uint64_t)0x7ffffffffffffU; + i1_ = i1 + (i0 >> (uint32_t)51U); + output[0U] = i0_; + output[1U] = i1_; + } + } +} + +inline static void Hacl_Bignum_Fsquare_fsquare__(uint128_t *tmp, uint64_t *output) +{ + uint64_t r0 = output[0U]; + uint64_t r1 = output[1U]; + uint64_t r2 = output[2U]; + uint64_t r3 = output[3U]; + uint64_t r4 = output[4U]; + uint64_t d0 = r0 * (uint64_t)2U; + uint64_t d1 = r1 * (uint64_t)2U; + uint64_t d2 = r2 * (uint64_t)2U * (uint64_t)19U; + uint64_t d419 = r4 * (uint64_t)19U; + uint64_t d4 = d419 * (uint64_t)2U; + uint128_t s0 = (uint128_t)r0 * r0 + (uint128_t)d4 * r1 + (uint128_t)d2 * r3; + uint128_t s1 = (uint128_t)d0 * r1 + (uint128_t)d4 * r2 + (uint128_t)(r3 * (uint64_t)19U) * r3; + uint128_t s2 = (uint128_t)d0 * r2 + (uint128_t)r1 * r1 + (uint128_t)d4 * r3; + uint128_t s3 = (uint128_t)d0 * r3 + (uint128_t)d1 * r2 + (uint128_t)r4 * d419; + uint128_t s4 = (uint128_t)d0 * r4 + (uint128_t)d1 * r3 + (uint128_t)r2 * r2; + tmp[0U] = s0; + tmp[1U] = s1; + tmp[2U] = s2; + tmp[3U] = s3; + tmp[4U] = s4; +} + +inline static void Hacl_Bignum_Fsquare_fsquare_(uint128_t *tmp, uint64_t *output) +{ + uint128_t b4; + uint128_t b0; + uint128_t b4_; + uint128_t b0_; + uint64_t i0; + uint64_t i1; + uint64_t i0_; + uint64_t i1_; + Hacl_Bignum_Fsquare_fsquare__(tmp, output); + Hacl_Bignum_Fproduct_carry_wide_(tmp); + b4 = tmp[4U]; + b0 = tmp[0U]; + b4_ = b4 & (uint128_t)(uint64_t)0x7ffffffffffffU; + b0_ = b0 + (uint128_t)(uint64_t)19U * (uint64_t)(b4 >> (uint32_t)51U); + tmp[4U] = b4_; + tmp[0U] = b0_; + Hacl_Bignum_Fproduct_copy_from_wide_(output, tmp); + i0 = output[0U]; + i1 = output[1U]; + i0_ = i0 & (uint64_t)0x7ffffffffffffU; + i1_ = i1 + (i0 >> (uint32_t)51U); + output[0U] = i0_; + output[1U] = i1_; +} + +static void +Hacl_Bignum_Fsquare_fsquare_times_(uint64_t *input, uint128_t *tmp, uint32_t count1) +{ + uint32_t i; + Hacl_Bignum_Fsquare_fsquare_(tmp, input); + for (i = (uint32_t)1U; i < count1; i = i + (uint32_t)1U) + Hacl_Bignum_Fsquare_fsquare_(tmp, input); +} + +inline static void +Hacl_Bignum_Fsquare_fsquare_times(uint64_t *output, uint64_t *input, uint32_t count1) +{ + KRML_CHECK_SIZE(sizeof (uint128_t), (uint32_t)5U); + { + uint128_t t[5U]; + { + uint32_t _i; + for (_i = 0U; _i < (uint32_t)5U; ++_i) + t[_i] = (uint128_t)(uint64_t)0U; + } + memcpy(output, input, (uint32_t)5U * sizeof input[0U]); + Hacl_Bignum_Fsquare_fsquare_times_(output, t, count1); + } +} + +inline static void Hacl_Bignum_Fsquare_fsquare_times_inplace(uint64_t *output, uint32_t count1) +{ + KRML_CHECK_SIZE(sizeof (uint128_t), (uint32_t)5U); + { + uint128_t t[5U]; + { + uint32_t _i; + for (_i = 0U; _i < (uint32_t)5U; ++_i) + t[_i] = (uint128_t)(uint64_t)0U; + } + Hacl_Bignum_Fsquare_fsquare_times_(output, t, count1); + } +} + +inline static void Hacl_Bignum_Crecip_crecip(uint64_t *out, uint64_t *z) +{ + uint64_t buf[20U] = { 0U }; + uint64_t *a0 = buf; + uint64_t *t00 = buf + (uint32_t)5U; + uint64_t *b0 = buf + (uint32_t)10U; + uint64_t *t01; + uint64_t *b1; + uint64_t *c0; + uint64_t *a; + uint64_t *t0; + uint64_t *b; + uint64_t *c; + Hacl_Bignum_Fsquare_fsquare_times(a0, z, (uint32_t)1U); + Hacl_Bignum_Fsquare_fsquare_times(t00, a0, (uint32_t)2U); + Hacl_Bignum_Fmul_fmul(b0, t00, z); + Hacl_Bignum_Fmul_fmul(a0, b0, a0); + Hacl_Bignum_Fsquare_fsquare_times(t00, a0, (uint32_t)1U); + Hacl_Bignum_Fmul_fmul(b0, t00, b0); + Hacl_Bignum_Fsquare_fsquare_times(t00, b0, (uint32_t)5U); + t01 = buf + (uint32_t)5U; + b1 = buf + (uint32_t)10U; + c0 = buf + (uint32_t)15U; + Hacl_Bignum_Fmul_fmul(b1, t01, b1); + Hacl_Bignum_Fsquare_fsquare_times(t01, b1, (uint32_t)10U); + Hacl_Bignum_Fmul_fmul(c0, t01, b1); + Hacl_Bignum_Fsquare_fsquare_times(t01, c0, (uint32_t)20U); + Hacl_Bignum_Fmul_fmul(t01, t01, c0); + Hacl_Bignum_Fsquare_fsquare_times_inplace(t01, (uint32_t)10U); + Hacl_Bignum_Fmul_fmul(b1, t01, b1); + Hacl_Bignum_Fsquare_fsquare_times(t01, b1, (uint32_t)50U); + a = buf; + t0 = buf + (uint32_t)5U; + b = buf + (uint32_t)10U; + c = buf + (uint32_t)15U; + Hacl_Bignum_Fmul_fmul(c, t0, b); + Hacl_Bignum_Fsquare_fsquare_times(t0, c, (uint32_t)100U); + Hacl_Bignum_Fmul_fmul(t0, t0, c); + Hacl_Bignum_Fsquare_fsquare_times_inplace(t0, (uint32_t)50U); + Hacl_Bignum_Fmul_fmul(t0, t0, b); + Hacl_Bignum_Fsquare_fsquare_times_inplace(t0, (uint32_t)5U); + Hacl_Bignum_Fmul_fmul(out, t0, a); +} + +inline static void Hacl_Bignum_fsum(uint64_t *a, uint64_t *b) +{ + uint32_t i; + for (i = (uint32_t)0U; i < (uint32_t)5U; i = i + (uint32_t)1U) + { + uint64_t xi = a[i]; + uint64_t yi = b[i]; + a[i] = xi + yi; + } +} + +inline static void Hacl_Bignum_fdifference(uint64_t *a, uint64_t *b) +{ + uint64_t tmp[5U] = { 0U }; + uint64_t b0; + uint64_t b1; + uint64_t b2; + uint64_t b3; + uint64_t b4; + memcpy(tmp, b, (uint32_t)5U * sizeof b[0U]); + b0 = tmp[0U]; + b1 = tmp[1U]; + b2 = tmp[2U]; + b3 = tmp[3U]; + b4 = tmp[4U]; + tmp[0U] = b0 + (uint64_t)0x3fffffffffff68U; + tmp[1U] = b1 + (uint64_t)0x3ffffffffffff8U; + tmp[2U] = b2 + (uint64_t)0x3ffffffffffff8U; + tmp[3U] = b3 + (uint64_t)0x3ffffffffffff8U; + tmp[4U] = b4 + (uint64_t)0x3ffffffffffff8U; + { + uint32_t i; + for (i = (uint32_t)0U; i < (uint32_t)5U; i = i + (uint32_t)1U) + { + uint64_t xi = a[i]; + uint64_t yi = tmp[i]; + a[i] = yi - xi; + } + } +} + +inline static void Hacl_Bignum_fscalar(uint64_t *output, uint64_t *b, uint64_t s) +{ + KRML_CHECK_SIZE(sizeof (uint128_t), (uint32_t)5U); + { + uint128_t tmp[5U]; + { + uint32_t _i; + for (_i = 0U; _i < (uint32_t)5U; ++_i) + tmp[_i] = (uint128_t)(uint64_t)0U; + } + { + uint128_t b4; + uint128_t b0; + uint128_t b4_; + uint128_t b0_; + { + uint32_t i; + for (i = (uint32_t)0U; i < (uint32_t)5U; i = i + (uint32_t)1U) + { + uint64_t xi = b[i]; + tmp[i] = (uint128_t)xi * s; + } + } + Hacl_Bignum_Fproduct_carry_wide_(tmp); + b4 = tmp[4U]; + b0 = tmp[0U]; + b4_ = b4 & (uint128_t)(uint64_t)0x7ffffffffffffU; + b0_ = b0 + (uint128_t)(uint64_t)19U * (uint64_t)(b4 >> (uint32_t)51U); + tmp[4U] = b4_; + tmp[0U] = b0_; + Hacl_Bignum_Fproduct_copy_from_wide_(output, tmp); + } + } +} + +inline static void Hacl_Bignum_fmul(uint64_t *output, uint64_t *a, uint64_t *b) +{ + Hacl_Bignum_Fmul_fmul(output, a, b); +} + +inline static void Hacl_Bignum_crecip(uint64_t *output, uint64_t *input) +{ + Hacl_Bignum_Crecip_crecip(output, input); +} + +static void +Hacl_EC_Point_swap_conditional_step(uint64_t *a, uint64_t *b, uint64_t swap1, uint32_t ctr) +{ + uint32_t i = ctr - (uint32_t)1U; + uint64_t ai = a[i]; + uint64_t bi = b[i]; + uint64_t x = swap1 & (ai ^ bi); + uint64_t ai1 = ai ^ x; + uint64_t bi1 = bi ^ x; + a[i] = ai1; + b[i] = bi1; +} + +static void +Hacl_EC_Point_swap_conditional_(uint64_t *a, uint64_t *b, uint64_t swap1, uint32_t ctr) +{ + if (!(ctr == (uint32_t)0U)) + { + uint32_t i; + Hacl_EC_Point_swap_conditional_step(a, b, swap1, ctr); + i = ctr - (uint32_t)1U; + Hacl_EC_Point_swap_conditional_(a, b, swap1, i); + } +} + +static void Hacl_EC_Point_swap_conditional(uint64_t *a, uint64_t *b, uint64_t iswap) +{ + uint64_t swap1 = (uint64_t)0U - iswap; + Hacl_EC_Point_swap_conditional_(a, b, swap1, (uint32_t)5U); + Hacl_EC_Point_swap_conditional_(a + (uint32_t)5U, b + (uint32_t)5U, swap1, (uint32_t)5U); +} + +static void Hacl_EC_Point_copy(uint64_t *output, uint64_t *input) +{ + memcpy(output, input, (uint32_t)5U * sizeof input[0U]); + memcpy(output + (uint32_t)5U, + input + (uint32_t)5U, + (uint32_t)5U * sizeof (input + (uint32_t)5U)[0U]); +} + +static void Hacl_EC_Format_fexpand(uint64_t *output, uint8_t *input) +{ + uint64_t i0 = load64_le(input); + uint8_t *x00 = input + (uint32_t)6U; + uint64_t i1 = load64_le(x00); + uint8_t *x01 = input + (uint32_t)12U; + uint64_t i2 = load64_le(x01); + uint8_t *x02 = input + (uint32_t)19U; + uint64_t i3 = load64_le(x02); + uint8_t *x0 = input + (uint32_t)24U; + uint64_t i4 = load64_le(x0); + uint64_t output0 = i0 & (uint64_t)0x7ffffffffffffU; + uint64_t output1 = i1 >> (uint32_t)3U & (uint64_t)0x7ffffffffffffU; + uint64_t output2 = i2 >> (uint32_t)6U & (uint64_t)0x7ffffffffffffU; + uint64_t output3 = i3 >> (uint32_t)1U & (uint64_t)0x7ffffffffffffU; + uint64_t output4 = i4 >> (uint32_t)12U & (uint64_t)0x7ffffffffffffU; + output[0U] = output0; + output[1U] = output1; + output[2U] = output2; + output[3U] = output3; + output[4U] = output4; +} + +static void Hacl_EC_Format_fcontract_first_carry_pass(uint64_t *input) +{ + uint64_t t0 = input[0U]; + uint64_t t1 = input[1U]; + uint64_t t2 = input[2U]; + uint64_t t3 = input[3U]; + uint64_t t4 = input[4U]; + uint64_t t1_ = t1 + (t0 >> (uint32_t)51U); + uint64_t t0_ = t0 & (uint64_t)0x7ffffffffffffU; + uint64_t t2_ = t2 + (t1_ >> (uint32_t)51U); + uint64_t t1__ = t1_ & (uint64_t)0x7ffffffffffffU; + uint64_t t3_ = t3 + (t2_ >> (uint32_t)51U); + uint64_t t2__ = t2_ & (uint64_t)0x7ffffffffffffU; + uint64_t t4_ = t4 + (t3_ >> (uint32_t)51U); + uint64_t t3__ = t3_ & (uint64_t)0x7ffffffffffffU; + input[0U] = t0_; + input[1U] = t1__; + input[2U] = t2__; + input[3U] = t3__; + input[4U] = t4_; +} + +static void Hacl_EC_Format_fcontract_first_carry_full(uint64_t *input) +{ + Hacl_EC_Format_fcontract_first_carry_pass(input); + Hacl_Bignum_Modulo_carry_top(input); +} + +static void Hacl_EC_Format_fcontract_second_carry_pass(uint64_t *input) +{ + uint64_t t0 = input[0U]; + uint64_t t1 = input[1U]; + uint64_t t2 = input[2U]; + uint64_t t3 = input[3U]; + uint64_t t4 = input[4U]; + uint64_t t1_ = t1 + (t0 >> (uint32_t)51U); + uint64_t t0_ = t0 & (uint64_t)0x7ffffffffffffU; + uint64_t t2_ = t2 + (t1_ >> (uint32_t)51U); + uint64_t t1__ = t1_ & (uint64_t)0x7ffffffffffffU; + uint64_t t3_ = t3 + (t2_ >> (uint32_t)51U); + uint64_t t2__ = t2_ & (uint64_t)0x7ffffffffffffU; + uint64_t t4_ = t4 + (t3_ >> (uint32_t)51U); + uint64_t t3__ = t3_ & (uint64_t)0x7ffffffffffffU; + input[0U] = t0_; + input[1U] = t1__; + input[2U] = t2__; + input[3U] = t3__; + input[4U] = t4_; +} + +static void Hacl_EC_Format_fcontract_second_carry_full(uint64_t *input) +{ + uint64_t i0; + uint64_t i1; + uint64_t i0_; + uint64_t i1_; + Hacl_EC_Format_fcontract_second_carry_pass(input); + Hacl_Bignum_Modulo_carry_top(input); + i0 = input[0U]; + i1 = input[1U]; + i0_ = i0 & (uint64_t)0x7ffffffffffffU; + i1_ = i1 + (i0 >> (uint32_t)51U); + input[0U] = i0_; + input[1U] = i1_; +} + +static void Hacl_EC_Format_fcontract_trim(uint64_t *input) +{ + uint64_t a0 = input[0U]; + uint64_t a1 = input[1U]; + uint64_t a2 = input[2U]; + uint64_t a3 = input[3U]; + uint64_t a4 = input[4U]; + uint64_t mask0 = FStar_UInt64_gte_mask(a0, (uint64_t)0x7ffffffffffedU); + uint64_t mask1 = FStar_UInt64_eq_mask(a1, (uint64_t)0x7ffffffffffffU); + uint64_t mask2 = FStar_UInt64_eq_mask(a2, (uint64_t)0x7ffffffffffffU); + uint64_t mask3 = FStar_UInt64_eq_mask(a3, (uint64_t)0x7ffffffffffffU); + uint64_t mask4 = FStar_UInt64_eq_mask(a4, (uint64_t)0x7ffffffffffffU); + uint64_t mask = (((mask0 & mask1) & mask2) & mask3) & mask4; + uint64_t a0_ = a0 - ((uint64_t)0x7ffffffffffedU & mask); + uint64_t a1_ = a1 - ((uint64_t)0x7ffffffffffffU & mask); + uint64_t a2_ = a2 - ((uint64_t)0x7ffffffffffffU & mask); + uint64_t a3_ = a3 - ((uint64_t)0x7ffffffffffffU & mask); + uint64_t a4_ = a4 - ((uint64_t)0x7ffffffffffffU & mask); + input[0U] = a0_; + input[1U] = a1_; + input[2U] = a2_; + input[3U] = a3_; + input[4U] = a4_; +} + +static void Hacl_EC_Format_fcontract_store(uint8_t *output, uint64_t *input) +{ + uint64_t t0 = input[0U]; + uint64_t t1 = input[1U]; + uint64_t t2 = input[2U]; + uint64_t t3 = input[3U]; + uint64_t t4 = input[4U]; + uint64_t o0 = t1 << (uint32_t)51U | t0; + uint64_t o1 = t2 << (uint32_t)38U | t1 >> (uint32_t)13U; + uint64_t o2 = t3 << (uint32_t)25U | t2 >> (uint32_t)26U; + uint64_t o3 = t4 << (uint32_t)12U | t3 >> (uint32_t)39U; + uint8_t *b0 = output; + uint8_t *b1 = output + (uint32_t)8U; + uint8_t *b2 = output + (uint32_t)16U; + uint8_t *b3 = output + (uint32_t)24U; + store64_le(b0, o0); + store64_le(b1, o1); + store64_le(b2, o2); + store64_le(b3, o3); +} + +static void Hacl_EC_Format_fcontract(uint8_t *output, uint64_t *input) +{ + Hacl_EC_Format_fcontract_first_carry_full(input); + Hacl_EC_Format_fcontract_second_carry_full(input); + Hacl_EC_Format_fcontract_trim(input); + Hacl_EC_Format_fcontract_store(output, input); +} + +static void Hacl_EC_Format_scalar_of_point(uint8_t *scalar, uint64_t *point) +{ + uint64_t *x = point; + uint64_t *z = point + (uint32_t)5U; + uint64_t buf[10U] = { 0U }; + uint64_t *zmone = buf; + uint64_t *sc = buf + (uint32_t)5U; + Hacl_Bignum_crecip(zmone, z); + Hacl_Bignum_fmul(sc, x, zmone); + Hacl_EC_Format_fcontract(scalar, sc); +} + +static void +Hacl_EC_AddAndDouble_fmonty( + uint64_t *pp, + uint64_t *ppq, + uint64_t *p, + uint64_t *pq, + uint64_t *qmqp +) +{ + uint64_t *qx = qmqp; + uint64_t *x2 = pp; + uint64_t *z2 = pp + (uint32_t)5U; + uint64_t *x3 = ppq; + uint64_t *z3 = ppq + (uint32_t)5U; + uint64_t *x = p; + uint64_t *z = p + (uint32_t)5U; + uint64_t *xprime = pq; + uint64_t *zprime = pq + (uint32_t)5U; + uint64_t buf[40U] = { 0U }; + uint64_t *origx = buf; + uint64_t *origxprime0 = buf + (uint32_t)5U; + uint64_t *xxprime0 = buf + (uint32_t)25U; + uint64_t *zzprime0 = buf + (uint32_t)30U; + uint64_t *origxprime; + uint64_t *xx0; + uint64_t *zz0; + uint64_t *xxprime; + uint64_t *zzprime; + uint64_t *zzzprime; + uint64_t *zzz; + uint64_t *xx; + uint64_t *zz; + uint64_t scalar; + memcpy(origx, x, (uint32_t)5U * sizeof x[0U]); + Hacl_Bignum_fsum(x, z); + Hacl_Bignum_fdifference(z, origx); + memcpy(origxprime0, xprime, (uint32_t)5U * sizeof xprime[0U]); + Hacl_Bignum_fsum(xprime, zprime); + Hacl_Bignum_fdifference(zprime, origxprime0); + Hacl_Bignum_fmul(xxprime0, xprime, z); + Hacl_Bignum_fmul(zzprime0, x, zprime); + origxprime = buf + (uint32_t)5U; + xx0 = buf + (uint32_t)15U; + zz0 = buf + (uint32_t)20U; + xxprime = buf + (uint32_t)25U; + zzprime = buf + (uint32_t)30U; + zzzprime = buf + (uint32_t)35U; + memcpy(origxprime, xxprime, (uint32_t)5U * sizeof xxprime[0U]); + Hacl_Bignum_fsum(xxprime, zzprime); + Hacl_Bignum_fdifference(zzprime, origxprime); + Hacl_Bignum_Fsquare_fsquare_times(x3, xxprime, (uint32_t)1U); + Hacl_Bignum_Fsquare_fsquare_times(zzzprime, zzprime, (uint32_t)1U); + Hacl_Bignum_fmul(z3, zzzprime, qx); + Hacl_Bignum_Fsquare_fsquare_times(xx0, x, (uint32_t)1U); + Hacl_Bignum_Fsquare_fsquare_times(zz0, z, (uint32_t)1U); + zzz = buf + (uint32_t)10U; + xx = buf + (uint32_t)15U; + zz = buf + (uint32_t)20U; + Hacl_Bignum_fmul(x2, xx, zz); + Hacl_Bignum_fdifference(zz, xx); + scalar = (uint64_t)121665U; + Hacl_Bignum_fscalar(zzz, zz, scalar); + Hacl_Bignum_fsum(zzz, xx); + Hacl_Bignum_fmul(z2, zzz, zz); +} + +static void +Hacl_EC_Ladder_SmallLoop_cmult_small_loop_step( + uint64_t *nq, + uint64_t *nqpq, + uint64_t *nq2, + uint64_t *nqpq2, + uint64_t *q, + uint8_t byt +) +{ + uint64_t bit0 = (uint64_t)(byt >> (uint32_t)7U); + uint64_t bit; + Hacl_EC_Point_swap_conditional(nq, nqpq, bit0); + Hacl_EC_AddAndDouble_fmonty(nq2, nqpq2, nq, nqpq, q); + bit = (uint64_t)(byt >> (uint32_t)7U); + Hacl_EC_Point_swap_conditional(nq2, nqpq2, bit); +} + +static void +Hacl_EC_Ladder_SmallLoop_cmult_small_loop_double_step( + uint64_t *nq, + uint64_t *nqpq, + uint64_t *nq2, + uint64_t *nqpq2, + uint64_t *q, + uint8_t byt +) +{ + uint8_t byt1; + Hacl_EC_Ladder_SmallLoop_cmult_small_loop_step(nq, nqpq, nq2, nqpq2, q, byt); + byt1 = byt << (uint32_t)1U; + Hacl_EC_Ladder_SmallLoop_cmult_small_loop_step(nq2, nqpq2, nq, nqpq, q, byt1); +} + +static void +Hacl_EC_Ladder_SmallLoop_cmult_small_loop( + uint64_t *nq, + uint64_t *nqpq, + uint64_t *nq2, + uint64_t *nqpq2, + uint64_t *q, + uint8_t byt, + uint32_t i +) +{ + if (!(i == (uint32_t)0U)) + { + uint32_t i_ = i - (uint32_t)1U; + uint8_t byt_; + Hacl_EC_Ladder_SmallLoop_cmult_small_loop_double_step(nq, nqpq, nq2, nqpq2, q, byt); + byt_ = byt << (uint32_t)2U; + Hacl_EC_Ladder_SmallLoop_cmult_small_loop(nq, nqpq, nq2, nqpq2, q, byt_, i_); + } +} + +static void +Hacl_EC_Ladder_BigLoop_cmult_big_loop( + uint8_t *n1, + uint64_t *nq, + uint64_t *nqpq, + uint64_t *nq2, + uint64_t *nqpq2, + uint64_t *q, + uint32_t i +) +{ + if (!(i == (uint32_t)0U)) + { + uint32_t i1 = i - (uint32_t)1U; + uint8_t byte = n1[i1]; + Hacl_EC_Ladder_SmallLoop_cmult_small_loop(nq, nqpq, nq2, nqpq2, q, byte, (uint32_t)4U); + Hacl_EC_Ladder_BigLoop_cmult_big_loop(n1, nq, nqpq, nq2, nqpq2, q, i1); + } +} + +static void Hacl_EC_Ladder_cmult(uint64_t *result, uint8_t *n1, uint64_t *q) +{ + uint64_t point_buf[40U] = { 0U }; + uint64_t *nq = point_buf; + uint64_t *nqpq = point_buf + (uint32_t)10U; + uint64_t *nq2 = point_buf + (uint32_t)20U; + uint64_t *nqpq2 = point_buf + (uint32_t)30U; + Hacl_EC_Point_copy(nqpq, q); + nq[0U] = (uint64_t)1U; + Hacl_EC_Ladder_BigLoop_cmult_big_loop(n1, nq, nqpq, nq2, nqpq2, q, (uint32_t)32U); + Hacl_EC_Point_copy(result, nq); +} + +static void Hacl_Curve25519_crypto_scalarmult(uint8_t *mypublic, uint8_t *secret, uint8_t *basepoint) +{ + uint64_t buf0[10U] = { 0U }; + uint64_t *x0 = buf0; + uint64_t *z = buf0 + (uint32_t)5U; + uint64_t *q; + Hacl_EC_Format_fexpand(x0, basepoint); + z[0U] = (uint64_t)1U; + q = buf0; + { + uint8_t e[32U] = { 0U }; + uint8_t e0; + uint8_t e31; + uint8_t e01; + uint8_t e311; + uint8_t e312; + uint8_t *scalar; + memcpy(e, secret, (uint32_t)32U * sizeof secret[0U]); + e0 = e[0U]; + e31 = e[31U]; + e01 = e0 & (uint8_t)248U; + e311 = e31 & (uint8_t)127U; + e312 = e311 | (uint8_t)64U; + e[0U] = e01; + e[31U] = e312; + scalar = e; + { + uint64_t buf[15U] = { 0U }; + uint64_t *nq = buf; + uint64_t *x = nq; + x[0U] = (uint64_t)1U; + Hacl_EC_Ladder_cmult(nq, scalar, q); + Hacl_EC_Format_scalar_of_point(mypublic, nq); + } + } +} + +static void mbedtls_x25519_init( mbedtls_x25519_context *ctx ) +{ + mbedtls_platform_zeroize( ctx, sizeof( mbedtls_x25519_context ) ); +} + +static void mbedtls_x25519_free( mbedtls_x25519_context *ctx ) +{ + if( ctx == NULL ) + return; + mbedtls_platform_zeroize( ctx->our_secret, MBEDTLS_X25519_KEY_SIZE_BYTES ); + mbedtls_platform_zeroize( ctx->peer_point, MBEDTLS_X25519_KEY_SIZE_BYTES ); +} + +static int mbedtls_x25519_make_params( mbedtls_x25519_context *ctx, size_t *olen, + unsigned char *buf, size_t blen, + int( *f_rng )(void *, unsigned char *, size_t), + void *p_rng ) +{ + int ret = 0; + uint8_t base[MBEDTLS_X25519_KEY_SIZE_BYTES] = {0}; + if( ( ret = f_rng( p_rng, ctx->our_secret, MBEDTLS_X25519_KEY_SIZE_BYTES ) ) != 0 ) + return ret; + *olen = MBEDTLS_X25519_KEY_SIZE_BYTES + 4; + if( blen < *olen ) + return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + *buf++ = MBEDTLS_ECP_TLS_NAMED_CURVE; + *buf++ = MBEDTLS_ECP_TLS_CURVE25519 >> 8; + *buf++ = MBEDTLS_ECP_TLS_CURVE25519 & 0xFF; + *buf++ = MBEDTLS_X25519_KEY_SIZE_BYTES; + base[0] = 9; + Hacl_Curve25519_crypto_scalarmult( buf, ctx->our_secret, base ); + base[0] = 0; + if( memcmp( buf, base, MBEDTLS_X25519_KEY_SIZE_BYTES) == 0 ) + return MBEDTLS_ERR_ECP_RANDOM_FAILED; + return( 0 ); +} + +static int mbedtls_x25519_read_params( mbedtls_x25519_context *ctx, + const unsigned char **buf, const unsigned char *end ) +{ + if( end - *buf < MBEDTLS_X25519_KEY_SIZE_BYTES + 1 ) + return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if( ( *(*buf)++ != MBEDTLS_X25519_KEY_SIZE_BYTES ) ) + return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + memcpy( ctx->peer_point, *buf, MBEDTLS_X25519_KEY_SIZE_BYTES ); + *buf += MBEDTLS_X25519_KEY_SIZE_BYTES; + return( 0 ); +} + +static int mbedtls_x25519_get_params( mbedtls_x25519_context *ctx, const mbedtls_ecp_keypair *key, + mbedtls_x25519_ecdh_side side ) +{ + size_t olen = 0; + switch( side ) { + case MBEDTLS_X25519_ECDH_THEIRS: + return mbedtls_ecp_point_write_binary( &key->grp, &key->Q, MBEDTLS_ECP_PF_COMPRESSED, &olen, ctx->peer_point, MBEDTLS_X25519_KEY_SIZE_BYTES ); + case MBEDTLS_X25519_ECDH_OURS: + return mbedtls_mpi_write_binary_le( &key->d, ctx->our_secret, MBEDTLS_X25519_KEY_SIZE_BYTES ); + default: + return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + } +} + +static int mbedtls_x25519_calc_secret( mbedtls_x25519_context *ctx, size_t *olen, + unsigned char *buf, size_t blen, + int( *f_rng )(void *, unsigned char *, size_t), + void *p_rng ) +{ + /* f_rng and p_rng are not used here because this implementation does not + need blinding since it has constant trace. */ + (( void )f_rng); + (( void )p_rng); + *olen = MBEDTLS_X25519_KEY_SIZE_BYTES; + if( blen < *olen ) + return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + Hacl_Curve25519_crypto_scalarmult( buf, ctx->our_secret, ctx->peer_point); + /* Wipe the DH secret and don't let the peer chose a small subgroup point */ + mbedtls_platform_zeroize( ctx->our_secret, MBEDTLS_X25519_KEY_SIZE_BYTES ); + if( memcmp( buf, ctx->our_secret, MBEDTLS_X25519_KEY_SIZE_BYTES) == 0 ) + return MBEDTLS_ERR_ECP_RANDOM_FAILED; + return( 0 ); +} + +static int mbedtls_x25519_make_public( mbedtls_x25519_context *ctx, size_t *olen, + unsigned char *buf, size_t blen, + int( *f_rng )(void *, unsigned char *, size_t), + void *p_rng ) +{ + int ret = 0; + unsigned char base[MBEDTLS_X25519_KEY_SIZE_BYTES] = { 0 }; + if( ctx == NULL ) + return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if( ( ret = f_rng( p_rng, ctx->our_secret, MBEDTLS_X25519_KEY_SIZE_BYTES ) ) != 0 ) + return ret; + *olen = MBEDTLS_X25519_KEY_SIZE_BYTES + 1; + if( blen < *olen ) + return(MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL); + *buf++ = MBEDTLS_X25519_KEY_SIZE_BYTES; + base[0] = 9; + Hacl_Curve25519_crypto_scalarmult( buf, ctx->our_secret, base ); + base[0] = 0; + if( memcmp( buf, base, MBEDTLS_X25519_KEY_SIZE_BYTES ) == 0 ) + return MBEDTLS_ERR_ECP_RANDOM_FAILED; + return( ret ); +} + +static int mbedtls_x25519_read_public( mbedtls_x25519_context *ctx, + const unsigned char *buf, size_t blen ) +{ + if( blen < MBEDTLS_X25519_KEY_SIZE_BYTES + 1 ) + return(MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL); + if( (*buf++ != MBEDTLS_X25519_KEY_SIZE_BYTES) ) + return(MBEDTLS_ERR_ECP_BAD_INPUT_DATA); + memcpy( ctx->peer_point, buf, MBEDTLS_X25519_KEY_SIZE_BYTES ); + return( 0 ); +} + +/** + * \brief This function sets up the ECDH context with the information + * given. + * + * This function should be called after mbedtls_ecdh_init() but + * before mbedtls_ecdh_make_params(). There is no need to call + * this function before mbedtls_ecdh_read_params(). + * + * This is the first function used by a TLS server for ECDHE + * ciphersuites. + * + * \param ctx The ECDH context to set up. + * \param grp_id The group id of the group to set up the context for. + * + * \return \c 0 on success. + */ +int mbedtls_everest_setup( mbedtls_ecdh_context_everest *ctx, int grp_id ) +{ + if( grp_id != MBEDTLS_ECP_DP_CURVE25519 ) + return MBEDTLS_ERR_ECP_BAD_INPUT_DATA; + mbedtls_x25519_init( &ctx->ctx ); + return 0; +} + +/** + * \brief This function frees a context. + * + * \param ctx The context to free. + */ +void mbedtls_everest_free( mbedtls_ecdh_context_everest *ctx ) +{ + mbedtls_x25519_free( &ctx->ctx ); +} + +/** + * \brief This function generates a public key and a TLS + * ServerKeyExchange payload. + * + * This is the second function used by a TLS server for ECDHE + * ciphersuites. (It is called after mbedtls_ecdh_setup().) + * + * \note This function assumes that the ECP group (grp) of the + * \p ctx context has already been properly set, + * for example, using mbedtls_ecp_group_load(). + * + * \see ecp.h + * + * \param ctx The ECDH context. + * \param olen The number of characters written. + * \param buf The destination buffer. + * \param blen The length of the destination buffer. + * \param f_rng The RNG function. + * \param p_rng The RNG context. + * + * \return \c 0 on success. + * \return An \c MBEDTLS_ERR_ECP_XXX error code on failure. + */ +int mbedtls_everest_make_params( mbedtls_ecdh_context_everest *ctx, size_t *olen, + unsigned char *buf, size_t blen, + int( *f_rng )( void *, unsigned char *, size_t ), + void *p_rng ) +{ + mbedtls_x25519_context *x25519_ctx = &ctx->ctx; + return mbedtls_x25519_make_params( x25519_ctx, olen, buf, blen, f_rng, p_rng ); +} + +/** + * \brief This function parses and processes a TLS ServerKeyExhange + * payload. + * + * This is the first function used by a TLS client for ECDHE + * ciphersuites. + * + * \see ecp.h + * + * \param ctx The ECDH context. + * \param buf The pointer to the start of the input buffer. + * \param end The address for one Byte past the end of the buffer. + * + * \return \c 0 on success. + * \return An \c MBEDTLS_ERR_ECP_XXX error code on failure. + * + */ +int mbedtls_everest_read_params( mbedtls_ecdh_context_everest *ctx, + const unsigned char **buf, + const unsigned char *end ) +{ + mbedtls_x25519_context *x25519_ctx = &ctx->ctx; + return mbedtls_x25519_read_params( x25519_ctx, buf, end ); +} + +/** + * \brief This function sets up an ECDH context from an EC key. + * + * It is used by clients and servers in place of the + * ServerKeyEchange for static ECDH, and imports ECDH + * parameters from the EC key information of a certificate. + * + * \see ecp.h + * + * \param ctx The ECDH context to set up. + * \param key The EC key to use. + * \param side Defines the source of the key: 1: Our key, or + * 0: The key of the peer. + * + * \return \c 0 on success. + * \return An \c MBEDTLS_ERR_ECP_XXX error code on failure. + * + */ +int mbedtls_everest_get_params( mbedtls_ecdh_context_everest *ctx, + const mbedtls_ecp_keypair *key, + mbedtls_everest_ecdh_side side ) +{ + mbedtls_x25519_context *x25519_ctx = &ctx->ctx; + mbedtls_x25519_ecdh_side s = side == MBEDTLS_EVEREST_ECDH_OURS ? + MBEDTLS_X25519_ECDH_OURS : + MBEDTLS_X25519_ECDH_THEIRS; + return mbedtls_x25519_get_params( x25519_ctx, key, s ); +} + +/** + * \brief This function generates a public key and a TLS + * ClientKeyExchange payload. + * + * This is the second function used by a TLS client for ECDH(E) + * ciphersuites. + * + * \see ecp.h + * + * \param ctx The ECDH context. + * \param olen The number of Bytes written. + * \param buf The destination buffer. + * \param blen The size of the destination buffer. + * \param f_rng The RNG function. + * \param p_rng The RNG context. + * + * \return \c 0 on success. + * \return An \c MBEDTLS_ERR_ECP_XXX error code on failure. + */ +int mbedtls_everest_make_public( mbedtls_ecdh_context_everest *ctx, size_t *olen, + unsigned char *buf, size_t blen, + int( *f_rng )( void *, unsigned char *, size_t ), + void *p_rng ) +{ + mbedtls_x25519_context *x25519_ctx = &ctx->ctx; + return mbedtls_x25519_make_public( x25519_ctx, olen, buf, blen, f_rng, p_rng ); +} + +/** + * \brief This function parses and processes a TLS ClientKeyExchange + * payload. + * + * This is the third function used by a TLS server for ECDH(E) + * ciphersuites. (It is called after mbedtls_ecdh_setup() and + * mbedtls_ecdh_make_params().) + * + * \see ecp.h + * + * \param ctx The ECDH context. + * \param buf The start of the input buffer. + * \param blen The length of the input buffer. + * + * \return \c 0 on success. + * \return An \c MBEDTLS_ERR_ECP_XXX error code on failure. + */ +int mbedtls_everest_read_public( mbedtls_ecdh_context_everest *ctx, + const unsigned char *buf, size_t blen ) +{ + mbedtls_x25519_context *x25519_ctx = &ctx->ctx; + return mbedtls_x25519_read_public ( x25519_ctx, buf, blen ); +} + +/** + * \brief This function derives and exports the shared secret. + * + * This is the last function used by both TLS client + * and servers. + * + * \note If \p f_rng is not NULL, it is used to implement + * countermeasures against side-channel attacks. + * For more information, see mbedtls_ecp_mul(). + * + * \see ecp.h + * + * \param ctx The ECDH context. + * \param olen The number of Bytes written. + * \param buf The destination buffer. + * \param blen The length of the destination buffer. + * \param f_rng The RNG function. + * \param p_rng The RNG context. + * + * \return \c 0 on success. + * \return An \c MBEDTLS_ERR_ECP_XXX error code on failure. + */ +int mbedtls_everest_calc_secret( mbedtls_ecdh_context_everest *ctx, size_t *olen, + unsigned char *buf, size_t blen, + int( *f_rng )( void *, unsigned char *, size_t ), + void *p_rng ) +{ + mbedtls_x25519_context *x25519_ctx = &ctx->ctx; + return mbedtls_x25519_calc_secret( x25519_ctx, olen, buf, blen, f_rng, p_rng ); +} + +#endif /* MBEDTLS_ECDH_C && MBEDTLS_ECDH_VARIANT_EVEREST_ENABLED */ diff --git a/third_party/mbedtls/everest.h b/third_party/mbedtls/everest.h new file mode 100644 index 000000000..be4c43f16 --- /dev/null +++ b/third_party/mbedtls/everest.h @@ -0,0 +1,52 @@ +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_X25519_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_X25519_H_ +#include "third_party/mbedtls/config.h" +#include "third_party/mbedtls/ecp.h" +COSMOPOLITAN_C_START_ + +#define MBEDTLS_ECP_TLS_CURVE25519 0x1d +#define MBEDTLS_X25519_KEY_SIZE_BYTES 32 + +typedef enum { + MBEDTLS_X25519_ECDH_OURS, + MBEDTLS_X25519_ECDH_THEIRS, +} mbedtls_x25519_ecdh_side; + +typedef struct { + unsigned char our_secret[MBEDTLS_X25519_KEY_SIZE_BYTES]; + unsigned char peer_point[MBEDTLS_X25519_KEY_SIZE_BYTES]; +} mbedtls_x25519_context; + +typedef enum { + MBEDTLS_EVEREST_ECDH_OURS, + MBEDTLS_EVEREST_ECDH_THEIRS, +} mbedtls_everest_ecdh_side; + +typedef struct { + mbedtls_x25519_context ctx; +} mbedtls_ecdh_context_everest; + +int mbedtls_everest_setup(mbedtls_ecdh_context_everest *, int); +void mbedtls_everest_free(mbedtls_ecdh_context_everest *); +int mbedtls_everest_make_params(mbedtls_ecdh_context_everest *, size_t *, + unsigned char *, size_t, + int (*)(void *, unsigned char *, size_t), + void *); +int mbedtls_everest_read_params(mbedtls_ecdh_context_everest *, + const unsigned char **, const unsigned char *); +int mbedtls_everest_get_params(mbedtls_ecdh_context_everest *, + const mbedtls_ecp_keypair *, + mbedtls_everest_ecdh_side); +int mbedtls_everest_make_public(mbedtls_ecdh_context_everest *, size_t *, + unsigned char *, size_t, + int (*)(void *, unsigned char *, size_t), + void *); +int mbedtls_everest_read_public(mbedtls_ecdh_context_everest *, + const unsigned char *, size_t); +int mbedtls_everest_calc_secret(mbedtls_ecdh_context_everest *, size_t *, + unsigned char *, size_t, + int (*)(void *, unsigned char *, size_t), + void *); + +COSMOPOLITAN_C_END_ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_X25519_H_ */ diff --git a/third_party/mbedtls/gcm.c b/third_party/mbedtls/gcm.c index c377abbbd..34a13b4de 100644 --- a/third_party/mbedtls/gcm.c +++ b/third_party/mbedtls/gcm.c @@ -1,10 +1,20 @@ -/* clang-format off */ +#include "libc/nexgen32e/x86feature.h" +#include "libc/str/str.h" +#include "third_party/mbedtls/aes.h" +#include "third_party/mbedtls/aesni.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/endian.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/gcm.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * NIST SP800-38D compliant GCM implementation * @@ -34,29 +44,6 @@ asm(".include \"libc/disclaimer.inc\""); * [MGV] 4.1, pp. 12-13, to enhance speed without using too much memory. */ -#include "libc/str/str.h" -#include "libc/nexgen32e/x86feature.h" -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_GCM_C) - -#include "third_party/mbedtls/gcm.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_AESNI_C) -#include "third_party/mbedtls/aesni.h" -#endif - -#if defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_AES_C) -#include "third_party/mbedtls/aes.h" -#include "third_party/mbedtls/platform.h" -#if !defined(MBEDTLS_PLATFORM_C) -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */ - #if !defined(MBEDTLS_GCM_ALT) /* Parameter validation macros */ @@ -65,29 +52,6 @@ asm(".include \"libc/disclaimer.inc\""); #define GCM_VALIDATE( cond ) \ MBEDTLS_INTERNAL_VALIDATE( cond ) -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - /* * Initialize a context */ @@ -803,17 +767,7 @@ int mbedtls_gcm_self_test( int verbose ) ret = mbedtls_gcm_setkey( &ctx, cipher, key_test_data[key_index_test_data[i]], key_len ); - /* - * AES-192 is an optional feature that may be unavailable when - * there is an alternative underlying implementation i.e. when - * MBEDTLS_AES_ALT is defined. - */ - if( ret == MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED && key_len == 192 ) - { - mbedtls_printf( "skipped\n" ); - break; - } - else if( ret != 0 ) + if( ret != 0 ) { goto exit; } @@ -826,15 +780,6 @@ int mbedtls_gcm_self_test( int verbose ) add_len_test_data[i], pt_test_data[pt_index_test_data[i]], buf, 16, tag_buf ); -#if defined(MBEDTLS_GCM_ALT) - /* Allow alternative implementations to only support 12-byte nonces. */ - if( ret == MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED && - iv_len_test_data[i] != 12 ) - { - mbedtls_printf( "skipped\n" ); - break; - } -#endif /* defined(MBEDTLS_GCM_ALT) */ if( ret != 0 ) goto exit; @@ -1027,5 +972,3 @@ exit: } #endif /* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */ - -#endif /* MBEDTLS_GCM_C */ diff --git a/third_party/mbedtls/gcm.h b/third_party/mbedtls/gcm.h index d0c1f85ab..a658c1344 100644 --- a/third_party/mbedtls/gcm.h +++ b/third_party/mbedtls/gcm.h @@ -1,46 +1,8 @@ -/* clang-format off */ - -/** - * \file gcm.h - * - * \brief This file contains GCM definitions and functions. - * - * The Galois/Counter Mode (GCM) for 128-bit block ciphers is defined - * in D. McGrew, J. Viega, The Galois/Counter Mode of Operation - * (GCM), Natl. Inst. Stand. Technol. - * - * For more information on GCM, see NIST SP 800-38D: Recommendation for - * Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC. - * - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - #ifndef MBEDTLS_GCM_H #define MBEDTLS_GCM_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/cipher.h" - +#include "third_party/mbedtls/config.h" +/* clang-format off */ #define MBEDTLS_GCM_ENCRYPT 1 #define MBEDTLS_GCM_DECRYPT 0 diff --git a/third_party/mbedtls/getalertdescription.c b/third_party/mbedtls/getalertdescription.c new file mode 100644 index 000000000..d77149186 --- /dev/null +++ b/third_party/mbedtls/getalertdescription.c @@ -0,0 +1,84 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/fmt/itoa.h" +#include "third_party/mbedtls/iana.h" +#include "third_party/mbedtls/ssl.h" + +/** + * Returns SSL fatal alert description. + * @see RFC5246 §7.2 + */ +const char *GetAlertDescription(unsigned char x) { + static char buf[4]; + switch (x) { + case MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY: /* 0 */ + return "close_notify"; + case MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE: /* 10 */ + return "unexpected_message"; + case MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC: /* 20 */ + return "bad_record_mac"; + case MBEDTLS_SSL_ALERT_MSG_DECRYPTION_FAILED: /* 21 */ + return "decryption_failed"; + case MBEDTLS_SSL_ALERT_MSG_RECORD_OVERFLOW: /* 22 */ + return "record_overflow"; + case MBEDTLS_SSL_ALERT_MSG_DECOMPRESSION_FAILURE: /* 30 */ + return "decompression_failure"; + case MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE: /* 40 */ + return "handshake_failure"; + case MBEDTLS_SSL_ALERT_MSG_NO_CERT: /* 41 */ + return "no_cert"; + case MBEDTLS_SSL_ALERT_MSG_BAD_CERT: /* 42 */ + return "bad_cert"; + case MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_CERT: /* 43 */ + return "unsupported_cert"; + case MBEDTLS_SSL_ALERT_MSG_CERT_REVOKED: /* 44 */ + return "cert_revoked"; + case MBEDTLS_SSL_ALERT_MSG_CERT_EXPIRED: /* 45 */ + return "cert_expired"; + case MBEDTLS_SSL_ALERT_MSG_CERT_UNKNOWN: /* 46 */ + return "cert_unknown"; + case MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER: /* 47 */ + return "illegal_parameter"; + case MBEDTLS_SSL_ALERT_MSG_UNKNOWN_CA: /* 48 */ + return "unknown_ca"; + case MBEDTLS_SSL_ALERT_MSG_ACCESS_DENIED: /* 49 */ + return "access_denied"; + case MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR: /* 50 */ + return "decode_error"; + case MBEDTLS_SSL_ALERT_MSG_DECRYPT_ERROR: /* 51 */ + return "decrypt_error"; + case MBEDTLS_SSL_ALERT_MSG_EXPORT_RESTRICTION: /* 60 */ + return "export_restriction"; + case MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION: /* 70 */ + return "protocol_version"; + case MBEDTLS_SSL_ALERT_MSG_INSUFFICIENT_SECURITY: /* 71 */ + return "insufficient_security"; + case MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR: /* 80 */ + return "internal_error"; + case MBEDTLS_SSL_ALERT_MSG_USER_CANCELED: /* 90 */ + return "user_canceled"; + case MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION: /* 100 */ + return "no_renegotiation"; + case MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_EXT: /* 110 */ + return "unsupported_extension"; + default: + int64toarray_radix10(x, buf); + return buf; + } +} diff --git a/third_party/mbedtls/getciphersuitename.c b/third_party/mbedtls/getciphersuitename.c new file mode 100644 index 000000000..1dac812c8 --- /dev/null +++ b/third_party/mbedtls/getciphersuitename.c @@ -0,0 +1,753 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "third_party/mbedtls/iana.h" + +const char *GetCipherSuiteName(uint16_t x) { + switch (x) { + case 0x0000: + return "TLS_NULL_WITH_NULL_NULL"; + case 0x0001: + return "TLS_RSA_WITH_NULL_MD5"; + case 0x0002: + return "TLS_RSA_WITH_NULL_SHA"; + case 0x0003: + return "TLS_RSA_EXPORT_WITH_RC4_40_MD5"; + case 0x0004: + return "TLS_RSA_WITH_RC4_128_MD5"; + case 0x0005: + return "TLS_RSA_WITH_RC4_128_SHA"; + case 0x0006: + return "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5"; + case 0x0007: + return "TLS_RSA_WITH_IDEA_CBC_SHA"; + case 0x0008: + return "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA"; + case 0x0009: + return "TLS_RSA_WITH_DES_CBC_SHA"; + case 0x000A: + return "TLS_RSA_WITH_3DES_EDE_CBC_SHA"; + case 0x000B: + return "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA"; + case 0x000C: + return "TLS_DH_DSS_WITH_DES_CBC_SHA"; + case 0x000D: + return "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA"; + case 0x000E: + return "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA"; + case 0x000F: + return "TLS_DH_RSA_WITH_DES_CBC_SHA"; + case 0x0010: + return "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA"; + case 0x0011: + return "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"; + case 0x0012: + return "TLS_DHE_DSS_WITH_DES_CBC_SHA"; + case 0x0013: + return "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA"; + case 0x0014: + return "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA"; + case 0x0015: + return "TLS_DHE_RSA_WITH_DES_CBC_SHA"; + case 0x0016: + return "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA"; + case 0x0017: + return "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5"; + case 0x0018: + return "TLS_DH_anon_WITH_RC4_128_MD5"; + case 0x0019: + return "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA"; + case 0x001A: + return "TLS_DH_anon_WITH_DES_CBC_SHA"; + case 0x001B: + return "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA"; + case 0x001E: + return "TLS_KRB5_WITH_DES_CBC_SHA"; + case 0x001F: + return "TLS_KRB5_WITH_3DES_EDE_CBC_SHA"; + case 0x0020: + return "TLS_KRB5_WITH_RC4_128_SHA"; + case 0x0021: + return "TLS_KRB5_WITH_IDEA_CBC_SHA"; + case 0x0022: + return "TLS_KRB5_WITH_DES_CBC_MD5"; + case 0x0023: + return "TLS_KRB5_WITH_3DES_EDE_CBC_MD5"; + case 0x0024: + return "TLS_KRB5_WITH_RC4_128_MD5"; + case 0x0025: + return "TLS_KRB5_WITH_IDEA_CBC_MD5"; + case 0x0026: + return "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA"; + case 0x0027: + return "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA"; + case 0x0028: + return "TLS_KRB5_EXPORT_WITH_RC4_40_SHA"; + case 0x0029: + return "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5"; + case 0x002A: + return "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5"; + case 0x002B: + return "TLS_KRB5_EXPORT_WITH_RC4_40_MD5"; + case 0x002C: + return "TLS_PSK_WITH_NULL_SHA"; + case 0x002D: + return "TLS_DHE_PSK_WITH_NULL_SHA"; + case 0x002E: + return "TLS_RSA_PSK_WITH_NULL_SHA"; + case 0x002F: + return "TLS_RSA_WITH_AES_128_CBC_SHA"; + case 0x0030: + return "TLS_DH_DSS_WITH_AES_128_CBC_SHA"; + case 0x0031: + return "TLS_DH_RSA_WITH_AES_128_CBC_SHA"; + case 0x0032: + return "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"; + case 0x0033: + return "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"; + case 0x0034: + return "TLS_DH_anon_WITH_AES_128_CBC_SHA"; + case 0x0035: + return "TLS_RSA_WITH_AES_256_CBC_SHA"; + case 0x0036: + return "TLS_DH_DSS_WITH_AES_256_CBC_SHA"; + case 0x0037: + return "TLS_DH_RSA_WITH_AES_256_CBC_SHA"; + case 0x0038: + return "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"; + case 0x0039: + return "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"; + case 0x003A: + return "TLS_DH_anon_WITH_AES_256_CBC_SHA"; + case 0x003B: + return "TLS_RSA_WITH_NULL_SHA256"; + case 0x003C: + return "TLS_RSA_WITH_AES_128_CBC_SHA256"; + case 0x003D: + return "TLS_RSA_WITH_AES_256_CBC_SHA256"; + case 0x003E: + return "TLS_DH_DSS_WITH_AES_128_CBC_SHA256"; + case 0x003F: + return "TLS_DH_RSA_WITH_AES_128_CBC_SHA256"; + case 0x0040: + return "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"; + case 0x0041: + return "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA"; + case 0x0042: + return "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA"; + case 0x0043: + return "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA"; + case 0x0044: + return "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA"; + case 0x0045: + return "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA"; + case 0x0046: + return "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA"; + case 0x0067: + return "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256"; + case 0x0068: + return "TLS_DH_DSS_WITH_AES_256_CBC_SHA256"; + case 0x0069: + return "TLS_DH_RSA_WITH_AES_256_CBC_SHA256"; + case 0x006A: + return "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"; + case 0x006B: + return "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256"; + case 0x006C: + return "TLS_DH_anon_WITH_AES_128_CBC_SHA256"; + case 0x006D: + return "TLS_DH_anon_WITH_AES_256_CBC_SHA256"; + case 0x0084: + return "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA"; + case 0x0085: + return "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA"; + case 0x0086: + return "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA"; + case 0x0087: + return "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA"; + case 0x0088: + return "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA"; + case 0x0089: + return "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA"; + case 0x008A: + return "TLS_PSK_WITH_RC4_128_SHA"; + case 0x008B: + return "TLS_PSK_WITH_3DES_EDE_CBC_SHA"; + case 0x008C: + return "TLS_PSK_WITH_AES_128_CBC_SHA"; + case 0x008D: + return "TLS_PSK_WITH_AES_256_CBC_SHA"; + case 0x008E: + return "TLS_DHE_PSK_WITH_RC4_128_SHA"; + case 0x008F: + return "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA"; + case 0x0090: + return "TLS_DHE_PSK_WITH_AES_128_CBC_SHA"; + case 0x0091: + return "TLS_DHE_PSK_WITH_AES_256_CBC_SHA"; + case 0x0092: + return "TLS_RSA_PSK_WITH_RC4_128_SHA"; + case 0x0093: + return "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA"; + case 0x0094: + return "TLS_RSA_PSK_WITH_AES_128_CBC_SHA"; + case 0x0095: + return "TLS_RSA_PSK_WITH_AES_256_CBC_SHA"; + case 0x0096: + return "TLS_RSA_WITH_SEED_CBC_SHA"; + case 0x0097: + return "TLS_DH_DSS_WITH_SEED_CBC_SHA"; + case 0x0098: + return "TLS_DH_RSA_WITH_SEED_CBC_SHA"; + case 0x0099: + return "TLS_DHE_DSS_WITH_SEED_CBC_SHA"; + case 0x009A: + return "TLS_DHE_RSA_WITH_SEED_CBC_SHA"; + case 0x009B: + return "TLS_DH_anon_WITH_SEED_CBC_SHA"; + case 0x009C: + return "TLS_RSA_WITH_AES_128_GCM_SHA256"; + case 0x009D: + return "TLS_RSA_WITH_AES_256_GCM_SHA384"; + case 0x009E: + return "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"; + case 0x009F: + return "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"; + case 0x00A0: + return "TLS_DH_RSA_WITH_AES_128_GCM_SHA256"; + case 0x00A1: + return "TLS_DH_RSA_WITH_AES_256_GCM_SHA384"; + case 0x00A2: + return "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256"; + case 0x00A3: + return "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384"; + case 0x00A4: + return "TLS_DH_DSS_WITH_AES_128_GCM_SHA256"; + case 0x00A5: + return "TLS_DH_DSS_WITH_AES_256_GCM_SHA384"; + case 0x00A6: + return "TLS_DH_anon_WITH_AES_128_GCM_SHA256"; + case 0x00A7: + return "TLS_DH_anon_WITH_AES_256_GCM_SHA384"; + case 0x00A8: + return "TLS_PSK_WITH_AES_128_GCM_SHA256"; + case 0x00A9: + return "TLS_PSK_WITH_AES_256_GCM_SHA384"; + case 0x00AA: + return "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256"; + case 0x00AB: + return "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384"; + case 0x00AC: + return "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256"; + case 0x00AD: + return "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384"; + case 0x00AE: + return "TLS_PSK_WITH_AES_128_CBC_SHA256"; + case 0x00AF: + return "TLS_PSK_WITH_AES_256_CBC_SHA384"; + case 0x00B0: + return "TLS_PSK_WITH_NULL_SHA256"; + case 0x00B1: + return "TLS_PSK_WITH_NULL_SHA384"; + case 0x00B2: + return "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256"; + case 0x00B3: + return "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384"; + case 0x00B4: + return "TLS_DHE_PSK_WITH_NULL_SHA256"; + case 0x00B5: + return "TLS_DHE_PSK_WITH_NULL_SHA384"; + case 0x00B6: + return "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256"; + case 0x00B7: + return "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384"; + case 0x00B8: + return "TLS_RSA_PSK_WITH_NULL_SHA256"; + case 0x00B9: + return "TLS_RSA_PSK_WITH_NULL_SHA384"; + case 0x00BA: + return "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256"; + case 0x00BB: + return "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256"; + case 0x00BC: + return "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256"; + case 0x00BD: + return "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256"; + case 0x00BE: + return "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256"; + case 0x00BF: + return "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256"; + case 0x00C0: + return "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256"; + case 0x00C1: + return "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256"; + case 0x00C2: + return "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256"; + case 0x00C3: + return "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256"; + case 0x00C4: + return "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256"; + case 0x00C5: + return "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256"; + case 0x00C6: + return "TLS_SM4_GCM_SM3"; + case 0x00C7: + return "TLS_SM4_CCM_SM3"; + case 0x00FF: + return "TLS_EMPTY_RENEGOTIATION_INFO_SCSV"; + case 0x1301: + return "TLS_AES_128_GCM_SHA256"; + case 0x1302: + return "TLS_AES_256_GCM_SHA384"; + case 0x1303: + return "TLS_CHACHA20_POLY1305_SHA256"; + case 0x1304: + return "TLS_AES_128_CCM_SHA256"; + case 0x1305: + return "TLS_AES_128_CCM_8_SHA256"; + case 0x5600: + return "TLS_FALLBACK_SCSV"; + case 0xC001: + return "TLS_ECDH_ECDSA_WITH_NULL_SHA"; + case 0xC002: + return "TLS_ECDH_ECDSA_WITH_RC4_128_SHA"; + case 0xC003: + return "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA"; + case 0xC004: + return "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"; + case 0xC005: + return "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"; + case 0xC006: + return "TLS_ECDHE_ECDSA_WITH_NULL_SHA"; + case 0xC007: + return "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA"; + case 0xC008: + return "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA"; + case 0xC009: + return "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"; + case 0xC00A: + return "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"; + case 0xC00B: + return "TLS_ECDH_RSA_WITH_NULL_SHA"; + case 0xC00C: + return "TLS_ECDH_RSA_WITH_RC4_128_SHA"; + case 0xC00D: + return "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA"; + case 0xC00E: + return "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"; + case 0xC00F: + return "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"; + case 0xC010: + return "TLS_ECDHE_RSA_WITH_NULL_SHA"; + case 0xC011: + return "TLS_ECDHE_RSA_WITH_RC4_128_SHA"; + case 0xC012: + return "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA"; + case 0xC013: + return "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"; + case 0xC014: + return "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"; + case 0xC015: + return "TLS_ECDH_anon_WITH_NULL_SHA"; + case 0xC016: + return "TLS_ECDH_anon_WITH_RC4_128_SHA"; + case 0xC017: + return "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA"; + case 0xC018: + return "TLS_ECDH_anon_WITH_AES_128_CBC_SHA"; + case 0xC019: + return "TLS_ECDH_anon_WITH_AES_256_CBC_SHA"; + case 0xC01A: + return "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA"; + case 0xC01B: + return "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA"; + case 0xC01C: + return "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA"; + case 0xC01D: + return "TLS_SRP_SHA_WITH_AES_128_CBC_SHA"; + case 0xC01E: + return "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA"; + case 0xC01F: + return "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA"; + case 0xC020: + return "TLS_SRP_SHA_WITH_AES_256_CBC_SHA"; + case 0xC021: + return "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA"; + case 0xC022: + return "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA"; + case 0xC023: + return "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"; + case 0xC024: + return "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"; + case 0xC025: + return "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256"; + case 0xC026: + return "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384"; + case 0xC027: + return "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"; + case 0xC028: + return "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"; + case 0xC029: + return "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256"; + case 0xC02A: + return "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384"; + case 0xC02B: + return "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"; + case 0xC02C: + return "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"; + case 0xC02D: + return "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256"; + case 0xC02E: + return "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384"; + case 0xC02F: + return "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"; + case 0xC030: + return "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"; + case 0xC031: + return "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256"; + case 0xC032: + return "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384"; + case 0xC033: + return "TLS_ECDHE_PSK_WITH_RC4_128_SHA"; + case 0xC034: + return "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA"; + case 0xC035: + return "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA"; + case 0xC036: + return "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA"; + case 0xC037: + return "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256"; + case 0xC038: + return "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384"; + case 0xC039: + return "TLS_ECDHE_PSK_WITH_NULL_SHA"; + case 0xC03A: + return "TLS_ECDHE_PSK_WITH_NULL_SHA256"; + case 0xC03B: + return "TLS_ECDHE_PSK_WITH_NULL_SHA384"; + case 0xC03C: + return "TLS_RSA_WITH_ARIA_128_CBC_SHA256"; + case 0xC03D: + return "TLS_RSA_WITH_ARIA_256_CBC_SHA384"; + case 0xC03E: + return "TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256"; + case 0xC03F: + return "TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384"; + case 0xC040: + return "TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256"; + case 0xC041: + return "TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384"; + case 0xC042: + return "TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256"; + case 0xC043: + return "TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384"; + case 0xC044: + return "TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256"; + case 0xC045: + return "TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384"; + case 0xC046: + return "TLS_DH_anon_WITH_ARIA_128_CBC_SHA256"; + case 0xC047: + return "TLS_DH_anon_WITH_ARIA_256_CBC_SHA384"; + case 0xC048: + return "TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256"; + case 0xC049: + return "TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384"; + case 0xC04A: + return "TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256"; + case 0xC04B: + return "TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384"; + case 0xC04C: + return "TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256"; + case 0xC04D: + return "TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384"; + case 0xC04E: + return "TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256"; + case 0xC04F: + return "TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384"; + case 0xC050: + return "TLS_RSA_WITH_ARIA_128_GCM_SHA256"; + case 0xC051: + return "TLS_RSA_WITH_ARIA_256_GCM_SHA384"; + case 0xC052: + return "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256"; + case 0xC053: + return "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384"; + case 0xC054: + return "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256"; + case 0xC055: + return "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384"; + case 0xC056: + return "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256"; + case 0xC057: + return "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384"; + case 0xC058: + return "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256"; + case 0xC059: + return "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384"; + case 0xC05A: + return "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256"; + case 0xC05B: + return "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384"; + case 0xC05C: + return "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256"; + case 0xC05D: + return "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384"; + case 0xC05E: + return "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256"; + case 0xC05F: + return "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384"; + case 0xC060: + return "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256"; + case 0xC061: + return "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384"; + case 0xC062: + return "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256"; + case 0xC063: + return "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384"; + case 0xC064: + return "TLS_PSK_WITH_ARIA_128_CBC_SHA256"; + case 0xC065: + return "TLS_PSK_WITH_ARIA_256_CBC_SHA384"; + case 0xC066: + return "TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256"; + case 0xC067: + return "TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384"; + case 0xC068: + return "TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256"; + case 0xC069: + return "TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384"; + case 0xC06A: + return "TLS_PSK_WITH_ARIA_128_GCM_SHA256"; + case 0xC06B: + return "TLS_PSK_WITH_ARIA_256_GCM_SHA384"; + case 0xC06C: + return "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256"; + case 0xC06D: + return "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384"; + case 0xC06E: + return "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256"; + case 0xC06F: + return "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384"; + case 0xC070: + return "TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256"; + case 0xC071: + return "TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384"; + case 0xC072: + return "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256"; + case 0xC073: + return "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"; + case 0xC074: + return "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256"; + case 0xC075: + return "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384"; + case 0xC076: + return "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256"; + case 0xC077: + return "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384"; + case 0xC078: + return "TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256"; + case 0xC079: + return "TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384"; + case 0xC07A: + return "TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256"; + case 0xC07B: + return "TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384"; + case 0xC07C: + return "TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256"; + case 0xC07D: + return "TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384"; + case 0xC07E: + return "TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256"; + case 0xC07F: + return "TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384"; + case 0xC080: + return "TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256"; + case 0xC081: + return "TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384"; + case 0xC082: + return "TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256"; + case 0xC083: + return "TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384"; + case 0xC084: + return "TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256"; + case 0xC085: + return "TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384"; + case 0xC086: + return "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256"; + case 0xC087: + return "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384"; + case 0xC088: + return "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256"; + case 0xC089: + return "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384"; + case 0xC08A: + return "TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256"; + case 0xC08B: + return "TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384"; + case 0xC08C: + return "TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256"; + case 0xC08D: + return "TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384"; + case 0xC08E: + return "TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256"; + case 0xC08F: + return "TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384"; + case 0xC090: + return "TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256"; + case 0xC091: + return "TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384"; + case 0xC092: + return "TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256"; + case 0xC093: + return "TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384"; + case 0xC094: + return "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256"; + case 0xC095: + return "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384"; + case 0xC096: + return "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256"; + case 0xC097: + return "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384"; + case 0xC098: + return "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256"; + case 0xC099: + return "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384"; + case 0xC09A: + return "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256"; + case 0xC09B: + return "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384"; + case 0xC09C: + return "TLS_RSA_WITH_AES_128_CCM"; + case 0xC09D: + return "TLS_RSA_WITH_AES_256_CCM"; + case 0xC09E: + return "TLS_DHE_RSA_WITH_AES_128_CCM"; + case 0xC09F: + return "TLS_DHE_RSA_WITH_AES_256_CCM"; + case 0xC0A0: + return "TLS_RSA_WITH_AES_128_CCM_8"; + case 0xC0A1: + return "TLS_RSA_WITH_AES_256_CCM_8"; + case 0xC0A2: + return "TLS_DHE_RSA_WITH_AES_128_CCM_8"; + case 0xC0A3: + return "TLS_DHE_RSA_WITH_AES_256_CCM_8"; + case 0xC0A4: + return "TLS_PSK_WITH_AES_128_CCM"; + case 0xC0A5: + return "TLS_PSK_WITH_AES_256_CCM"; + case 0xC0A6: + return "TLS_DHE_PSK_WITH_AES_128_CCM"; + case 0xC0A7: + return "TLS_DHE_PSK_WITH_AES_256_CCM"; + case 0xC0A8: + return "TLS_PSK_WITH_AES_128_CCM_8"; + case 0xC0A9: + return "TLS_PSK_WITH_AES_256_CCM_8"; + case 0xC0AA: + return "TLS_PSK_DHE_WITH_AES_128_CCM_8"; + case 0xC0AB: + return "TLS_PSK_DHE_WITH_AES_256_CCM_8"; + case 0xC0AC: + return "TLS_ECDHE_ECDSA_WITH_AES_128_CCM"; + case 0xC0AD: + return "TLS_ECDHE_ECDSA_WITH_AES_256_CCM"; + case 0xC0AE: + return "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8"; + case 0xC0AF: + return "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8"; + case 0xC0B0: + return "TLS_ECCPWD_WITH_AES_128_GCM_SHA256"; + case 0xC0B1: + return "TLS_ECCPWD_WITH_AES_256_GCM_SHA384"; + case 0xC0B2: + return "TLS_ECCPWD_WITH_AES_128_CCM_SHA256"; + case 0xC0B3: + return "TLS_ECCPWD_WITH_AES_256_CCM_SHA384"; + case 0xC0B4: + return "TLS_SHA256_SHA256"; + case 0xC0B5: + return "TLS_SHA384_SHA384"; + case 0xC100: + return "TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC"; + case 0xC101: + return "TLS_GOSTR341112_256_WITH_MAGMA_CTR_OMAC"; + case 0xC102: + return "TLS_GOSTR341112_256_WITH_28147_CNT_IMIT"; + case 0xC103: + return "TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L"; + case 0xC104: + return "TLS_GOSTR341112_256_WITH_MAGMA_MGM_L"; + case 0xC105: + return "TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S"; + case 0xC106: + return "TLS_GOSTR341112_256_WITH_MAGMA_MGM_S"; + case 0xCCA8: + return "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"; + case 0xCCA9: + return "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256"; + case 0xCCAA: + return "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256"; + case 0xCCAB: + return "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256"; + case 0xCCAC: + return "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256"; + case 0xCCAD: + return "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256"; + case 0xCCAE: + return "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256"; + case 0xD001: + return "TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256"; + case 0xD002: + return "TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384"; + case 0xD003: + return "TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256"; + case 0xD005: + return "TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256"; + case 0x0A0A: + case 0x1A1A: + case 0x2A2A: + case 0x3A3A: + case 0x4A4A: + case 0x5A5A: + case 0x6A6A: + case 0x7A7A: + case 0x8A8A: + case 0x9A9A: + case 0xAAAA: + case 0xBABA: + case 0xCACA: + case 0xDADA: + case 0xEAEA: + case 0xFAFA: + return "GREASE_RFC8701"; + case 0x0047 ... 0x004F: + case 0x0050 ... 0x0058: + case 0x0059 ... 0x005C: + case 0x0060 ... 0x0066: + case 0xFEFE ... 0xFEFF: + return "RESERVED_NO_CONFLICT"; + case 0x001C ... 0x001D: + return "RESERVED_SSLV3_RFC5246"; + case 0xFF00 ... 0xFFFF: + return "PRIVATE_USE_RFC8446"; + default: + return "UNASSIGNED"; + } +} diff --git a/third_party/mbedtls/havege.c b/third_party/mbedtls/havege.c deleted file mode 100644 index 1186f5635..000000000 --- a/third_party/mbedtls/havege.c +++ /dev/null @@ -1,241 +0,0 @@ -/* clang-format off */ - -asm(".ident\t\"\\n\\n\ -Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); -asm(".include \"libc/disclaimer.inc\""); - -/** - * \brief HAVEGE: HArdware Volatile Entropy Gathering and Expansion - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * The HAVEGE RNG was designed by Andre Seznec in 2002. - * - * http://www.irisa.fr/caps/projects/hipsor/publi.php - * - * Contact: seznec(at)irisa_dot_fr - orocheco(at)irisa_dot_fr - */ - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_HAVEGE_C) - -#include "third_party/mbedtls/havege.h" -#include "third_party/mbedtls/timing.h" -#include "third_party/mbedtls/platform_util.h" - -/* ------------------------------------------------------------------------ - * On average, one iteration accesses two 8-word blocks in the havege WALK - * table, and generates 16 words in the RES array. - * - * The data read in the WALK table is updated and permuted after each use. - * The result of the hardware clock counter read is used for this update. - * - * 25 conditional tests are present. The conditional tests are grouped in - * two nested groups of 12 conditional tests and 1 test that controls the - * permutation; on average, there should be 6 tests executed and 3 of them - * should be mispredicted. - * ------------------------------------------------------------------------ - */ - -#define SWAP(X,Y) { uint32_t *T = (X); (X) = (Y); (Y) = T; } - -#define TST1_ENTER if( PTEST & 1 ) { PTEST ^= 3; PTEST >>= 1; -#define TST2_ENTER if( PTEST & 1 ) { PTEST ^= 3; PTEST >>= 1; - -#define TST1_LEAVE U1++; } -#define TST2_LEAVE U2++; } - -#define ONE_ITERATION \ - \ - PTEST = PT1 >> 20; \ - \ - TST1_ENTER TST1_ENTER TST1_ENTER TST1_ENTER \ - TST1_ENTER TST1_ENTER TST1_ENTER TST1_ENTER \ - TST1_ENTER TST1_ENTER TST1_ENTER TST1_ENTER \ - \ - TST1_LEAVE TST1_LEAVE TST1_LEAVE TST1_LEAVE \ - TST1_LEAVE TST1_LEAVE TST1_LEAVE TST1_LEAVE \ - TST1_LEAVE TST1_LEAVE TST1_LEAVE TST1_LEAVE \ - \ - PTX = (PT1 >> 18) & 7; \ - PT1 &= 0x1FFF; \ - PT2 &= 0x1FFF; \ - CLK = (uint32_t) mbedtls_timing_hardclock(); \ - \ - i = 0; \ - A = &WALK[PT1 ]; RES[i++] ^= *A; \ - B = &WALK[PT2 ]; RES[i++] ^= *B; \ - C = &WALK[PT1 ^ 1]; RES[i++] ^= *C; \ - D = &WALK[PT2 ^ 4]; RES[i++] ^= *D; \ - \ - IN = (*A >> (1)) ^ (*A << (31)) ^ CLK; \ - *A = (*B >> (2)) ^ (*B << (30)) ^ CLK; \ - *B = IN ^ U1; \ - *C = (*C >> (3)) ^ (*C << (29)) ^ CLK; \ - *D = (*D >> (4)) ^ (*D << (28)) ^ CLK; \ - \ - A = &WALK[PT1 ^ 2]; RES[i++] ^= *A; \ - B = &WALK[PT2 ^ 2]; RES[i++] ^= *B; \ - C = &WALK[PT1 ^ 3]; RES[i++] ^= *C; \ - D = &WALK[PT2 ^ 6]; RES[i++] ^= *D; \ - \ - if( PTEST & 1 ) SWAP( A, C ); \ - \ - IN = (*A >> (5)) ^ (*A << (27)) ^ CLK; \ - *A = (*B >> (6)) ^ (*B << (26)) ^ CLK; \ - *B = IN; CLK = (uint32_t) mbedtls_timing_hardclock(); \ - *C = (*C >> (7)) ^ (*C << (25)) ^ CLK; \ - *D = (*D >> (8)) ^ (*D << (24)) ^ CLK; \ - \ - A = &WALK[PT1 ^ 4]; \ - B = &WALK[PT2 ^ 1]; \ - \ - PTEST = PT2 >> 1; \ - \ - PT2 = (RES[(i - 8) ^ PTY] ^ WALK[PT2 ^ PTY ^ 7]); \ - PT2 = ((PT2 & 0x1FFF) & (~8)) ^ ((PT1 ^ 8) & 0x8); \ - PTY = (PT2 >> 10) & 7; \ - \ - TST2_ENTER TST2_ENTER TST2_ENTER TST2_ENTER \ - TST2_ENTER TST2_ENTER TST2_ENTER TST2_ENTER \ - TST2_ENTER TST2_ENTER TST2_ENTER TST2_ENTER \ - \ - TST2_LEAVE TST2_LEAVE TST2_LEAVE TST2_LEAVE \ - TST2_LEAVE TST2_LEAVE TST2_LEAVE TST2_LEAVE \ - TST2_LEAVE TST2_LEAVE TST2_LEAVE TST2_LEAVE \ - \ - C = &WALK[PT1 ^ 5]; \ - D = &WALK[PT2 ^ 5]; \ - \ - RES[i++] ^= *A; \ - RES[i++] ^= *B; \ - RES[i++] ^= *C; \ - RES[i++] ^= *D; \ - \ - IN = (*A >> ( 9)) ^ (*A << (23)) ^ CLK; \ - *A = (*B >> (10)) ^ (*B << (22)) ^ CLK; \ - *B = IN ^ U2; \ - *C = (*C >> (11)) ^ (*C << (21)) ^ CLK; \ - *D = (*D >> (12)) ^ (*D << (20)) ^ CLK; \ - \ - A = &WALK[PT1 ^ 6]; RES[i++] ^= *A; \ - B = &WALK[PT2 ^ 3]; RES[i++] ^= *B; \ - C = &WALK[PT1 ^ 7]; RES[i++] ^= *C; \ - D = &WALK[PT2 ^ 7]; RES[i++] ^= *D; \ - \ - IN = (*A >> (13)) ^ (*A << (19)) ^ CLK; \ - *A = (*B >> (14)) ^ (*B << (18)) ^ CLK; \ - *B = IN; \ - *C = (*C >> (15)) ^ (*C << (17)) ^ CLK; \ - *D = (*D >> (16)) ^ (*D << (16)) ^ CLK; \ - \ - PT1 = ( RES[( i - 8 ) ^ PTX] ^ \ - WALK[PT1 ^ PTX ^ 7] ) & (~1); \ - PT1 ^= (PT2 ^ 0x10) & 0x10; \ - \ - for( n++, i = 0; i < 16; i++ ) \ - hs->pool[n % MBEDTLS_HAVEGE_COLLECT_SIZE] ^= RES[i]; - -/* - * Entropy gathering function - */ -static void havege_fill( mbedtls_havege_state *hs ) -{ - size_t n = 0; - size_t i; - uint32_t U1, U2, *A, *B, *C, *D; - uint32_t PT1, PT2, *WALK, RES[16]; - uint32_t PTX, PTY, CLK, PTEST, IN; - - WALK = hs->WALK; - PT1 = hs->PT1; - PT2 = hs->PT2; - - PTX = U1 = 0; - PTY = U2 = 0; - - (void)PTX; - - memset( RES, 0, sizeof( RES ) ); - - while( n < MBEDTLS_HAVEGE_COLLECT_SIZE * 4 ) - { - ONE_ITERATION - ONE_ITERATION - ONE_ITERATION - ONE_ITERATION - } - - hs->PT1 = PT1; - hs->PT2 = PT2; - - hs->offset[0] = 0; - hs->offset[1] = MBEDTLS_HAVEGE_COLLECT_SIZE / 2; -} - -/* - * HAVEGE initialization - */ -void mbedtls_havege_init( mbedtls_havege_state *hs ) -{ - memset( hs, 0, sizeof( mbedtls_havege_state ) ); - - havege_fill( hs ); -} - -void mbedtls_havege_free( mbedtls_havege_state *hs ) -{ - if( hs == NULL ) - return; - - mbedtls_platform_zeroize( hs, sizeof( mbedtls_havege_state ) ); -} - -/* - * HAVEGE rand function - */ -int mbedtls_havege_random( void *p_rng, unsigned char *buf, size_t len ) -{ - uint32_t val; - size_t use_len; - mbedtls_havege_state *hs = (mbedtls_havege_state *) p_rng; - unsigned char *p = buf; - - while( len > 0 ) - { - use_len = len; - if( use_len > sizeof( val ) ) - use_len = sizeof( val ); - - if( hs->offset[1] >= MBEDTLS_HAVEGE_COLLECT_SIZE ) - havege_fill( hs ); - - val = hs->pool[hs->offset[0]++]; - val ^= hs->pool[hs->offset[1]++]; - - memcpy( p, &val, use_len ); - - len -= use_len; - p += use_len; - } - - return( 0 ); -} - -#endif /* MBEDTLS_HAVEGE_C */ diff --git a/third_party/mbedtls/havege.h b/third_party/mbedtls/havege.h deleted file mode 100644 index 6340329fd..000000000 --- a/third_party/mbedtls/havege.h +++ /dev/null @@ -1,80 +0,0 @@ -/* clang-format off */ - -/** - * \file havege.h - * - * \brief HAVEGE: HArdware Volatile Entropy Gathering and Expansion - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_HAVEGE_H -#define MBEDTLS_HAVEGE_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -#define MBEDTLS_HAVEGE_COLLECT_SIZE 1024 - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief HAVEGE state structure - */ -typedef struct mbedtls_havege_state -{ - uint32_t PT1, PT2, offset[2]; - uint32_t pool[MBEDTLS_HAVEGE_COLLECT_SIZE]; - uint32_t WALK[8192]; -} -mbedtls_havege_state; - -/** - * \brief HAVEGE initialization - * - * \param hs HAVEGE state to be initialized - */ -void mbedtls_havege_init( mbedtls_havege_state *hs ); - -/** - * \brief Clear HAVEGE state - * - * \param hs HAVEGE state to be cleared - */ -void mbedtls_havege_free( mbedtls_havege_state *hs ); - -/** - * \brief HAVEGE rand function - * - * \param p_rng A HAVEGE state - * \param output Buffer to fill - * \param len Length of buffer - * - * \return 0 - */ -int mbedtls_havege_random( void *p_rng, unsigned char *output, size_t len ); - -#ifdef __cplusplus -} -#endif - -#endif /* havege.h */ diff --git a/third_party/mbedtls/hkdf.c b/third_party/mbedtls/hkdf.c index 56f01555c..171536022 100644 --- a/third_party/mbedtls/hkdf.c +++ b/third_party/mbedtls/hkdf.c @@ -1,10 +1,16 @@ -/* clang-format off */ +#include "libc/str/str.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/hkdf.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * HKDF implementation -- RFC 5869 * @@ -23,14 +29,6 @@ asm(".include \"libc/disclaimer.inc\""); * See the License for the specific language governing permissions and * limitations under the License. */ -#include "libc/str/str.h" -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_HKDF_C) - -#include "third_party/mbedtls/hkdf.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" int mbedtls_hkdf( const mbedtls_md_info_t *md, const unsigned char *salt, size_t salt_len, const unsigned char *ikm, size_t ikm_len, @@ -192,5 +190,3 @@ exit: return( ret ); } - -#endif /* MBEDTLS_HKDF_C */ diff --git a/third_party/mbedtls/hkdf.h b/third_party/mbedtls/hkdf.h index 21c318b32..590c88cf5 100644 --- a/third_party/mbedtls/hkdf.h +++ b/third_party/mbedtls/hkdf.h @@ -1,39 +1,8 @@ -/* clang-format off */ - -/** - * \file hkdf.h - * - * \brief This file contains the HKDF interface. - * - * The HMAC-based Extract-and-Expand Key Derivation Function (HKDF) is - * specified by RFC 5869. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_HKDF_H #define MBEDTLS_HKDF_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/md.h" +/* clang-format off */ /** * \name HKDF Error codes diff --git a/third_party/mbedtls/hmac_drbg.c b/third_party/mbedtls/hmac_drbg.c index e904570b8..26316f4ef 100644 --- a/third_party/mbedtls/hmac_drbg.c +++ b/third_party/mbedtls/hmac_drbg.c @@ -1,10 +1,17 @@ -/* clang-format off */ +#include "libc/stdio/stdio.h" +#include "libc/str/str.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/hmac_drbg.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * HMAC_DRBG implementation (NIST SP 800-90) * @@ -30,40 +37,42 @@ asm(".include \"libc/disclaimer.inc\""); * References below are based on rev. 1 (January 2012). */ -#include "libc/str/str.h" -#include "libc/stdio/stdio.h" -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_HMAC_DRBG_C) -#include "third_party/mbedtls/hmac_drbg.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_FS_IO) -#endif - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_SELF_TEST */ -#endif /* MBEDTLS_PLATFORM_C */ - -/* - * HMAC_DRBG context initialization +/** + * \brief HMAC_DRBG context initialization. + * + * This function makes the context ready for mbedtls_hmac_drbg_seed(), + * mbedtls_hmac_drbg_seed_buf() or mbedtls_hmac_drbg_free(). + * + * \note The reseed interval is #MBEDTLS_HMAC_DRBG_RESEED_INTERVAL + * by default. Override this value by calling + * mbedtls_hmac_drbg_set_reseed_interval(). + * + * \param ctx HMAC_DRBG context to be initialized. */ void mbedtls_hmac_drbg_init( mbedtls_hmac_drbg_context *ctx ) { memset( ctx, 0, sizeof( mbedtls_hmac_drbg_context ) ); - ctx->reseed_interval = MBEDTLS_HMAC_DRBG_RESEED_INTERVAL; } -/* - * HMAC_DRBG update, using optional additional data (10.1.2.2) +/** + * \brief This function updates the state of the HMAC_DRBG context. + * + * \note This function is not thread-safe. It is not safe + * to call this function if another thread might be + * concurrently obtaining random numbers from the same + * context or updating or reseeding the same context. + * + * \param ctx The HMAC_DRBG context. + * \param additional The data to update the state with. + * If this is \c NULL, there is no additional data. + * \param add_len Length of \p additional in bytes. + * Unused if \p additional is \c NULL. + * + * \return \c 0 on success, or an error from the underlying + * hash calculation. */ int mbedtls_hmac_drbg_update_ret( mbedtls_hmac_drbg_context *ctx, const unsigned char *additional, @@ -110,31 +119,33 @@ exit: return( ret ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_hmac_drbg_update( mbedtls_hmac_drbg_context *ctx, - const unsigned char *additional, - size_t add_len ) -{ - (void) mbedtls_hmac_drbg_update_ret( ctx, additional, add_len ); -} -#endif /* MBEDTLS_DEPRECATED_REMOVED */ - -/* - * Simplified HMAC_DRBG initialisation (for use with deterministic ECDSA) +/** + * \brief Initilisation of simpified HMAC_DRBG (never reseeds). + * + * This function is meant for use in algorithms that need a pseudorandom + * input such as deterministic ECDSA. + * + * \param ctx HMAC_DRBG context to be initialised. + * \param md_info MD algorithm to use for HMAC_DRBG. + * \param data Concatenation of the initial entropy string and + * the additional data. + * \param data_len Length of \p data in bytes. + * + * \return \c 0 if successful. or + * \return #MBEDTLS_ERR_MD_BAD_INPUT_DATA if \p md_info is + * invalid. + * \return #MBEDTLS_ERR_MD_ALLOC_FAILED if there was not enough + * memory to allocate context data. */ int mbedtls_hmac_drbg_seed_buf( mbedtls_hmac_drbg_context *ctx, - const mbedtls_md_info_t * md_info, - const unsigned char *data, size_t data_len ) + const mbedtls_md_info_t * md_info, + const unsigned char *data, size_t data_len ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; if( ( ret = mbedtls_md_setup( &ctx->md_ctx, md_info, 1 ) ) != 0 ) return( ret ); -#if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_init( &ctx->mutex ); -#endif - /* * Set initial working state. * Use the V memory location, which is currently all 0, to initialize the @@ -232,8 +243,29 @@ exit: return( ret ); } -/* - * HMAC_DRBG reseeding: 10.1.2.4 + 9.2 +/** + * \brief This function reseeds the HMAC_DRBG context, that is + * extracts data from the entropy source. + * + * \note This function is not thread-safe. It is not safe + * to call this function if another thread might be + * concurrently obtaining random numbers from the same + * context or updating or reseeding the same context. + * + * \param ctx The HMAC_DRBG context. + * \param additional Additional data to add to the state. + * If this is \c NULL, there is no additional data + * and \p len should be \c 0. + * \param len The length of the additional data. + * This must be at most #MBEDTLS_HMAC_DRBG_MAX_INPUT + * and also at most + * #MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT - \p entropy_len + * where \p entropy_len is the entropy length + * (see mbedtls_hmac_drbg_set_entropy_len()). + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED + * if a call to the entropy function failed. */ int mbedtls_hmac_drbg_reseed( mbedtls_hmac_drbg_context *ctx, const unsigned char *additional, size_t len ) @@ -241,18 +273,70 @@ int mbedtls_hmac_drbg_reseed( mbedtls_hmac_drbg_context *ctx, return( hmac_drbg_reseed_core( ctx, additional, len, 0 ) ); } -/* - * HMAC_DRBG initialisation (10.1.2.3 + 9.1) +/** + * \brief HMAC_DRBG initial seeding. * - * The nonce is not passed as a separate parameter but extracted - * from the entropy source as suggested in 8.6.7. + * Set the initial seed and set up the entropy source for future reseeds. + * + * A typical choice for the \p f_entropy and \p p_entropy parameters is + * to use the entropy module: + * - \p f_entropy is mbedtls_entropy_func(); + * - \p p_entropy is an instance of ::mbedtls_entropy_context initialized + * with mbedtls_entropy_init() (which registers the platform's default + * entropy sources). + * + * You can provide a personalization string in addition to the + * entropy source, to make this instantiation as unique as possible. + * + * \note By default, the security strength as defined by NIST is: + * - 128 bits if \p md_info is SHA-1; + * - 192 bits if \p md_info is SHA-224; + * - 256 bits if \p md_info is SHA-256, SHA-384 or SHA-512. + * Note that SHA-256 is just as efficient as SHA-224. + * The security strength can be reduced if a smaller + * entropy length is set with + * mbedtls_hmac_drbg_set_entropy_len(). + * + * \note The default entropy length is the security strength + * (converted from bits to bytes). You can override + * it by calling mbedtls_hmac_drbg_set_entropy_len(). + * + * \note During the initial seeding, this function calls + * the entropy source to obtain a nonce + * whose length is half the entropy length. + * + * \param ctx HMAC_DRBG context to be seeded. + * \param md_info MD algorithm to use for HMAC_DRBG. + * \param f_entropy The entropy callback, taking as arguments the + * \p p_entropy context, the buffer to fill, and the + * length of the buffer. + * \p f_entropy is always called with a length that is + * less than or equal to the entropy length. + * \param p_entropy The entropy context to pass to \p f_entropy. + * \param custom The personalization string. + * This can be \c NULL, in which case the personalization + * string is empty regardless of the value of \p len. + * \param len The length of the personalization string. + * This must be at most #MBEDTLS_HMAC_DRBG_MAX_INPUT + * and also at most + * #MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT - \p entropy_len * 3 / 2 + * where \p entropy_len is the entropy length + * described above. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_MD_BAD_INPUT_DATA if \p md_info is + * invalid. + * \return #MBEDTLS_ERR_MD_ALLOC_FAILED if there was not enough + * memory to allocate context data. + * \return #MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED + * if the call to \p f_entropy failed. */ int mbedtls_hmac_drbg_seed( mbedtls_hmac_drbg_context *ctx, - const mbedtls_md_info_t * md_info, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len ) + const mbedtls_md_info_t * md_info, + int (*f_entropy)(void *, unsigned char *, size_t), + void *p_entropy, + const unsigned char *custom, + size_t len ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t md_size; @@ -260,11 +344,6 @@ int mbedtls_hmac_drbg_seed( mbedtls_hmac_drbg_context *ctx, if( ( ret = mbedtls_md_setup( &ctx->md_ctx, md_info, 1 ) ) != 0 ) return( ret ); - /* The mutex is initialized iff the md context is set up. */ -#if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_init( &ctx->mutex ); -#endif - md_size = mbedtls_md_get_size( md_info ); /* @@ -302,8 +381,18 @@ int mbedtls_hmac_drbg_seed( mbedtls_hmac_drbg_context *ctx, return( 0 ); } -/* - * Set prediction resistance +/** + * \brief This function turns prediction resistance on or off. + * The default value is off. + * + * \note If enabled, entropy is gathered at the beginning of + * every call to mbedtls_hmac_drbg_random_with_add() + * or mbedtls_hmac_drbg_random(). + * Only use this if your entropy source has sufficient + * throughput. + * + * \param ctx The HMAC_DRBG context. + * \param resistance #MBEDTLS_HMAC_DRBG_PR_ON or #MBEDTLS_HMAC_DRBG_PR_OFF. */ void mbedtls_hmac_drbg_set_prediction_resistance( mbedtls_hmac_drbg_context *ctx, int resistance ) @@ -311,29 +400,71 @@ void mbedtls_hmac_drbg_set_prediction_resistance( mbedtls_hmac_drbg_context *ctx ctx->prediction_resistance = resistance; } -/* - * Set entropy length grabbed for seeding +/** + * \brief This function sets the amount of entropy grabbed on each + * seed or reseed. + * + * See the documentation of mbedtls_hmac_drbg_seed() for the default value. + * + * \param ctx The HMAC_DRBG context. + * \param len The amount of entropy to grab, in bytes. */ void mbedtls_hmac_drbg_set_entropy_len( mbedtls_hmac_drbg_context *ctx, size_t len ) { ctx->entropy_len = len; } -/* - * Set reseed interval +/** + * \brief Set the reseed interval. + * + * The reseed interval is the number of calls to mbedtls_hmac_drbg_random() + * or mbedtls_hmac_drbg_random_with_add() after which the entropy function + * is called again. + * + * The default value is #MBEDTLS_HMAC_DRBG_RESEED_INTERVAL. + * + * \param ctx The HMAC_DRBG context. + * \param interval The reseed interval. */ void mbedtls_hmac_drbg_set_reseed_interval( mbedtls_hmac_drbg_context *ctx, int interval ) { ctx->reseed_interval = interval; } -/* - * HMAC_DRBG random function with optional additional data: - * 10.1.2.5 (arabic) + 9.3 (Roman) +/** + * \brief This function updates an HMAC_DRBG instance with additional + * data and uses it to generate random data. + * + * This function automatically reseeds if the reseed counter is exceeded + * or prediction resistance is enabled. + * + * \note This function is not thread-safe. It is not safe + * to call this function if another thread might be + * concurrently obtaining random numbers from the same + * context or updating or reseeding the same context. + * + * \param p_rng The HMAC_DRBG context. This must be a pointer to a + * #mbedtls_hmac_drbg_context structure. + * \param output The buffer to fill. + * \param output_len The length of the buffer in bytes. + * This must be at most #MBEDTLS_HMAC_DRBG_MAX_REQUEST. + * \param additional Additional data to update with. + * If this is \c NULL, there is no additional data + * and \p add_len should be \c 0. + * \param add_len The length of the additional data. + * This must be at most #MBEDTLS_HMAC_DRBG_MAX_INPUT. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED + * if a call to the entropy source failed. + * \return #MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG if + * \p output_len > #MBEDTLS_HMAC_DRBG_MAX_REQUEST. + * \return #MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG if + * \p add_len > #MBEDTLS_HMAC_DRBG_MAX_INPUT. */ int mbedtls_hmac_drbg_random_with_add( void *p_rng, - unsigned char *output, size_t out_len, - const unsigned char *additional, size_t add_len ) + unsigned char *output, size_t out_len, + const unsigned char *additional, size_t add_len ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; mbedtls_hmac_drbg_context *ctx = (mbedtls_hmac_drbg_context *) p_rng; @@ -399,49 +530,58 @@ exit: return( ret ); } -/* - * HMAC_DRBG random function +/** + * \brief This function uses HMAC_DRBG to generate random data. + * + * This function automatically reseeds if the reseed counter is exceeded + * or prediction resistance is enabled. + * + * \param p_rng The HMAC_DRBG context. This must be a pointer to a + * #mbedtls_hmac_drbg_context structure. + * \param output The buffer to fill. + * \param out_len The length of the buffer in bytes. + * This must be at most #MBEDTLS_HMAC_DRBG_MAX_REQUEST. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED + * if a call to the entropy source failed. + * \return #MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG if + * \p out_len > #MBEDTLS_HMAC_DRBG_MAX_REQUEST. */ int mbedtls_hmac_drbg_random( void *p_rng, unsigned char *output, size_t out_len ) { - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; mbedtls_hmac_drbg_context *ctx = (mbedtls_hmac_drbg_context *) p_rng; - -#if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); -#endif - - ret = mbedtls_hmac_drbg_random_with_add( ctx, output, out_len, NULL, 0 ); - -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); -#endif - - return( ret ); + return mbedtls_hmac_drbg_random_with_add( ctx, output, out_len, NULL, 0 ); } -/* - * This function resets HMAC_DRBG context to the state immediately - * after initial call of mbedtls_hmac_drbg_init(). +/** + * \brief This function resets HMAC_DRBG context to the state immediately + * after initial call of mbedtls_hmac_drbg_init(). + * + * \param ctx The HMAC_DRBG context to free. */ void mbedtls_hmac_drbg_free( mbedtls_hmac_drbg_context *ctx ) { if( ctx == NULL ) return; - -#if defined(MBEDTLS_THREADING_C) - /* The mutex is initialized iff the md context is set up. */ - if( ctx->md_ctx.md_info != NULL ) - mbedtls_mutex_free( &ctx->mutex ); -#endif mbedtls_md_free( &ctx->md_ctx ); mbedtls_platform_zeroize( ctx, sizeof( mbedtls_hmac_drbg_context ) ); ctx->reseed_interval = MBEDTLS_HMAC_DRBG_RESEED_INTERVAL; } #if defined(MBEDTLS_FS_IO) + +/** + * \brief This function writes a seed file. + * + * \param ctx The HMAC_DRBG context. + * \param path The name of the file. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR on file error. + * \return #MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED on reseed + * failure. + */ int mbedtls_hmac_drbg_write_seed_file( mbedtls_hmac_drbg_context *ctx, const char *path ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; @@ -469,6 +609,20 @@ exit: return( ret ); } +/** + * \brief This function reads and updates a seed file. The seed + * is added to this instance. + * + * \param ctx The HMAC_DRBG context. + * \param path The name of the file. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR on file error. + * \return #MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED on + * reseed failure. + * \return #MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG if the existing + * seed file is too large. + */ int mbedtls_hmac_drbg_update_seed_file( mbedtls_hmac_drbg_context *ctx, const char *path ) { int ret = 0; @@ -506,17 +660,8 @@ exit: } #endif /* MBEDTLS_FS_IO */ - #if defined(MBEDTLS_SELF_TEST) - -#if !defined(MBEDTLS_SHA1_C) -/* Dummy checkup routine */ -int mbedtls_hmac_drbg_self_test( int verbose ) -{ - (void) verbose; - return( 0 ); -} -#else +#if defined(MBEDTLS_SHA1_C) #define OUTPUT_LEN 80 @@ -569,8 +714,11 @@ static int hmac_drbg_self_test_entropy( void *data, return( 1 ); \ } -/* - * Checkup routine for HMAC_DRBG with SHA-1 +/** + * \brief The HMAC_DRBG Checkup routine. + * + * \return \c 0 if successful. + * \return \c 1 if the test failed. */ int mbedtls_hmac_drbg_self_test( int verbose ) { @@ -629,6 +777,7 @@ int mbedtls_hmac_drbg_self_test( int verbose ) return( 0 ); } + #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_SELF_TEST */ diff --git a/third_party/mbedtls/hmac_drbg.h b/third_party/mbedtls/hmac_drbg.h index fcc73a9d0..5c745e087 100644 --- a/third_party/mbedtls/hmac_drbg.h +++ b/third_party/mbedtls/hmac_drbg.h @@ -1,61 +1,15 @@ +#ifndef MBEDTLS_HMAC_DRBG_H_ +#define MBEDTLS_HMAC_DRBG_H_ +#include "third_party/mbedtls/config.h" +#include "third_party/mbedtls/md.h" +COSMOPOLITAN_C_START_ /* clang-format off */ -/** - * \file hmac_drbg.h - * - * \brief The HMAC_DRBG pseudorandom generator. - * - * This module implements the HMAC_DRBG pseudorandom generator described - * in NIST SP 800-90A: Recommendation for Random Number Generation Using - * Deterministic Random Bit Generators. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_HMAC_DRBG_H -#define MBEDTLS_HMAC_DRBG_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "third_party/mbedtls/md.h" - -#if defined(MBEDTLS_THREADING_C) -#include "third_party/mbedtls/threading.h" -#endif - -/* - * Error codes - */ #define MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG -0x0003 /**< Too many random requested in single call. */ #define MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG -0x0005 /**< Input too large (Entropy + additional). */ #define MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR -0x0007 /**< Read/write error in file. */ #define MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED -0x0009 /**< The entropy source failed. */ -/** - * \name SECTION: Module settings - * - * The configuration options you can set for this module are in this section. - * Either change them in config.h or define them on the compiler command line. - * \{ - */ - #if !defined(MBEDTLS_HMAC_DRBG_RESEED_INTERVAL) #define MBEDTLS_HMAC_DRBG_RESEED_INTERVAL 10000 /**< Interval before reseed is performed by default */ #endif @@ -72,401 +26,35 @@ #define MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT 384 /**< Maximum size of (re)seed buffer */ #endif -/* \} name SECTION: Module settings */ - #define MBEDTLS_HMAC_DRBG_PR_OFF 0 /**< No prediction resistance */ #define MBEDTLS_HMAC_DRBG_PR_ON 1 /**< Prediction resistance enabled */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * HMAC_DRBG context. - */ typedef struct mbedtls_hmac_drbg_context { - /* Working state: the key K is not stored explicitly, - * but is implied by the HMAC context */ - mbedtls_md_context_t md_ctx; /*!< HMAC context (inc. K) */ - unsigned char V[MBEDTLS_MD_MAX_SIZE]; /*!< V in the spec */ - int reseed_counter; /*!< reseed counter */ - - /* Administrative state */ - size_t entropy_len; /*!< entropy bytes grabbed on each (re)seed */ - int prediction_resistance; /*!< enable prediction resistance (Automatic - reseed before every random generation) */ - int reseed_interval; /*!< reseed interval */ - - /* Callbacks */ - int (*f_entropy)(void *, unsigned char *, size_t); /*!< entropy function */ - void *p_entropy; /*!< context for the entropy function */ - -#if defined(MBEDTLS_THREADING_C) - /* Invariant: the mutex is initialized if and only if - * md_ctx->md_info != NULL. This means that the mutex is initialized - * during the initial seeding in mbedtls_hmac_drbg_seed() or - * mbedtls_hmac_drbg_seed_buf() and freed in mbedtls_ctr_drbg_free(). - * - * Note that this invariant may change without notice. Do not rely on it - * and do not access the mutex directly in application code. - */ - mbedtls_threading_mutex_t mutex; -#endif + mbedtls_md_context_t md_ctx; + unsigned char V[MBEDTLS_MD_MAX_SIZE]; + int reseed_counter; + size_t entropy_len; + int prediction_resistance; + int reseed_interval; + int (*f_entropy)(void *, unsigned char *, size_t); + void *p_entropy; } mbedtls_hmac_drbg_context; -/** - * \brief HMAC_DRBG context initialization. - * - * This function makes the context ready for mbedtls_hmac_drbg_seed(), - * mbedtls_hmac_drbg_seed_buf() or mbedtls_hmac_drbg_free(). - * - * \note The reseed interval is #MBEDTLS_HMAC_DRBG_RESEED_INTERVAL - * by default. Override this value by calling - * mbedtls_hmac_drbg_set_reseed_interval(). - * - * \param ctx HMAC_DRBG context to be initialized. - */ -void mbedtls_hmac_drbg_init( mbedtls_hmac_drbg_context *ctx ); +void mbedtls_hmac_drbg_init( mbedtls_hmac_drbg_context * ); +int mbedtls_hmac_drbg_seed( mbedtls_hmac_drbg_context *, const mbedtls_md_info_t * , int (*)(void *, unsigned char *, size_t), void *, const unsigned char *, size_t ); +int mbedtls_hmac_drbg_seed_buf( mbedtls_hmac_drbg_context *, const mbedtls_md_info_t *, const unsigned char *, size_t ); +void mbedtls_hmac_drbg_set_prediction_resistance( mbedtls_hmac_drbg_context *, int ); +void mbedtls_hmac_drbg_set_entropy_len( mbedtls_hmac_drbg_context *, size_t ); +void mbedtls_hmac_drbg_set_reseed_interval( mbedtls_hmac_drbg_context *, int ); +int mbedtls_hmac_drbg_update_ret( mbedtls_hmac_drbg_context *, const unsigned char *, size_t ); +int mbedtls_hmac_drbg_reseed( mbedtls_hmac_drbg_context *, const unsigned char *, size_t ); +int mbedtls_hmac_drbg_random_with_add( void *, unsigned char *, size_t , const unsigned char *, size_t ); +int mbedtls_hmac_drbg_random( void *, unsigned char *, size_t ); +void mbedtls_hmac_drbg_free( mbedtls_hmac_drbg_context * ); +int mbedtls_hmac_drbg_write_seed_file( mbedtls_hmac_drbg_context *, const char * ); +int mbedtls_hmac_drbg_update_seed_file( mbedtls_hmac_drbg_context *, const char * ); +int mbedtls_hmac_drbg_self_test( int ); -/** - * \brief HMAC_DRBG initial seeding. - * - * Set the initial seed and set up the entropy source for future reseeds. - * - * A typical choice for the \p f_entropy and \p p_entropy parameters is - * to use the entropy module: - * - \p f_entropy is mbedtls_entropy_func(); - * - \p p_entropy is an instance of ::mbedtls_entropy_context initialized - * with mbedtls_entropy_init() (which registers the platform's default - * entropy sources). - * - * You can provide a personalization string in addition to the - * entropy source, to make this instantiation as unique as possible. - * - * \note By default, the security strength as defined by NIST is: - * - 128 bits if \p md_info is SHA-1; - * - 192 bits if \p md_info is SHA-224; - * - 256 bits if \p md_info is SHA-256, SHA-384 or SHA-512. - * Note that SHA-256 is just as efficient as SHA-224. - * The security strength can be reduced if a smaller - * entropy length is set with - * mbedtls_hmac_drbg_set_entropy_len(). - * - * \note The default entropy length is the security strength - * (converted from bits to bytes). You can override - * it by calling mbedtls_hmac_drbg_set_entropy_len(). - * - * \note During the initial seeding, this function calls - * the entropy source to obtain a nonce - * whose length is half the entropy length. - */ -#if defined(MBEDTLS_THREADING_C) -/** - * \note When Mbed TLS is built with threading support, - * after this function returns successfully, - * it is safe to call mbedtls_hmac_drbg_random() - * from multiple threads. Other operations, including - * reseeding, are not thread-safe. - */ -#endif /* MBEDTLS_THREADING_C */ -/** - * \param ctx HMAC_DRBG context to be seeded. - * \param md_info MD algorithm to use for HMAC_DRBG. - * \param f_entropy The entropy callback, taking as arguments the - * \p p_entropy context, the buffer to fill, and the - * length of the buffer. - * \p f_entropy is always called with a length that is - * less than or equal to the entropy length. - * \param p_entropy The entropy context to pass to \p f_entropy. - * \param custom The personalization string. - * This can be \c NULL, in which case the personalization - * string is empty regardless of the value of \p len. - * \param len The length of the personalization string. - * This must be at most #MBEDTLS_HMAC_DRBG_MAX_INPUT - * and also at most - * #MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT - \p entropy_len * 3 / 2 - * where \p entropy_len is the entropy length - * described above. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_MD_BAD_INPUT_DATA if \p md_info is - * invalid. - * \return #MBEDTLS_ERR_MD_ALLOC_FAILED if there was not enough - * memory to allocate context data. - * \return #MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED - * if the call to \p f_entropy failed. - */ -int mbedtls_hmac_drbg_seed( mbedtls_hmac_drbg_context *ctx, - const mbedtls_md_info_t * md_info, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len ); - -/** - * \brief Initilisation of simpified HMAC_DRBG (never reseeds). - * - * This function is meant for use in algorithms that need a pseudorandom - * input such as deterministic ECDSA. - */ -#if defined(MBEDTLS_THREADING_C) -/** - * \note When Mbed TLS is built with threading support, - * after this function returns successfully, - * it is safe to call mbedtls_hmac_drbg_random() - * from multiple threads. Other operations, including - * reseeding, are not thread-safe. - */ -#endif /* MBEDTLS_THREADING_C */ -/** - * \param ctx HMAC_DRBG context to be initialised. - * \param md_info MD algorithm to use for HMAC_DRBG. - * \param data Concatenation of the initial entropy string and - * the additional data. - * \param data_len Length of \p data in bytes. - * - * \return \c 0 if successful. or - * \return #MBEDTLS_ERR_MD_BAD_INPUT_DATA if \p md_info is - * invalid. - * \return #MBEDTLS_ERR_MD_ALLOC_FAILED if there was not enough - * memory to allocate context data. - */ -int mbedtls_hmac_drbg_seed_buf( mbedtls_hmac_drbg_context *ctx, - const mbedtls_md_info_t * md_info, - const unsigned char *data, size_t data_len ); - -/** - * \brief This function turns prediction resistance on or off. - * The default value is off. - * - * \note If enabled, entropy is gathered at the beginning of - * every call to mbedtls_hmac_drbg_random_with_add() - * or mbedtls_hmac_drbg_random(). - * Only use this if your entropy source has sufficient - * throughput. - * - * \param ctx The HMAC_DRBG context. - * \param resistance #MBEDTLS_HMAC_DRBG_PR_ON or #MBEDTLS_HMAC_DRBG_PR_OFF. - */ -void mbedtls_hmac_drbg_set_prediction_resistance( mbedtls_hmac_drbg_context *ctx, - int resistance ); - -/** - * \brief This function sets the amount of entropy grabbed on each - * seed or reseed. - * - * See the documentation of mbedtls_hmac_drbg_seed() for the default value. - * - * \param ctx The HMAC_DRBG context. - * \param len The amount of entropy to grab, in bytes. - */ -void mbedtls_hmac_drbg_set_entropy_len( mbedtls_hmac_drbg_context *ctx, - size_t len ); - -/** - * \brief Set the reseed interval. - * - * The reseed interval is the number of calls to mbedtls_hmac_drbg_random() - * or mbedtls_hmac_drbg_random_with_add() after which the entropy function - * is called again. - * - * The default value is #MBEDTLS_HMAC_DRBG_RESEED_INTERVAL. - * - * \param ctx The HMAC_DRBG context. - * \param interval The reseed interval. - */ -void mbedtls_hmac_drbg_set_reseed_interval( mbedtls_hmac_drbg_context *ctx, - int interval ); - -/** - * \brief This function updates the state of the HMAC_DRBG context. - * - * \note This function is not thread-safe. It is not safe - * to call this function if another thread might be - * concurrently obtaining random numbers from the same - * context or updating or reseeding the same context. - * - * \param ctx The HMAC_DRBG context. - * \param additional The data to update the state with. - * If this is \c NULL, there is no additional data. - * \param add_len Length of \p additional in bytes. - * Unused if \p additional is \c NULL. - * - * \return \c 0 on success, or an error from the underlying - * hash calculation. - */ -int mbedtls_hmac_drbg_update_ret( mbedtls_hmac_drbg_context *ctx, - const unsigned char *additional, size_t add_len ); - -/** - * \brief This function reseeds the HMAC_DRBG context, that is - * extracts data from the entropy source. - * - * \note This function is not thread-safe. It is not safe - * to call this function if another thread might be - * concurrently obtaining random numbers from the same - * context or updating or reseeding the same context. - * - * \param ctx The HMAC_DRBG context. - * \param additional Additional data to add to the state. - * If this is \c NULL, there is no additional data - * and \p len should be \c 0. - * \param len The length of the additional data. - * This must be at most #MBEDTLS_HMAC_DRBG_MAX_INPUT - * and also at most - * #MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT - \p entropy_len - * where \p entropy_len is the entropy length - * (see mbedtls_hmac_drbg_set_entropy_len()). - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED - * if a call to the entropy function failed. - */ -int mbedtls_hmac_drbg_reseed( mbedtls_hmac_drbg_context *ctx, - const unsigned char *additional, size_t len ); - -/** - * \brief This function updates an HMAC_DRBG instance with additional - * data and uses it to generate random data. - * - * This function automatically reseeds if the reseed counter is exceeded - * or prediction resistance is enabled. - * - * \note This function is not thread-safe. It is not safe - * to call this function if another thread might be - * concurrently obtaining random numbers from the same - * context or updating or reseeding the same context. - * - * \param p_rng The HMAC_DRBG context. This must be a pointer to a - * #mbedtls_hmac_drbg_context structure. - * \param output The buffer to fill. - * \param output_len The length of the buffer in bytes. - * This must be at most #MBEDTLS_HMAC_DRBG_MAX_REQUEST. - * \param additional Additional data to update with. - * If this is \c NULL, there is no additional data - * and \p add_len should be \c 0. - * \param add_len The length of the additional data. - * This must be at most #MBEDTLS_HMAC_DRBG_MAX_INPUT. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED - * if a call to the entropy source failed. - * \return #MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG if - * \p output_len > #MBEDTLS_HMAC_DRBG_MAX_REQUEST. - * \return #MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG if - * \p add_len > #MBEDTLS_HMAC_DRBG_MAX_INPUT. - */ -int mbedtls_hmac_drbg_random_with_add( void *p_rng, - unsigned char *output, size_t output_len, - const unsigned char *additional, - size_t add_len ); - -/** - * \brief This function uses HMAC_DRBG to generate random data. - * - * This function automatically reseeds if the reseed counter is exceeded - * or prediction resistance is enabled. - */ -#if defined(MBEDTLS_THREADING_C) -/** - * \note When Mbed TLS is built with threading support, - * it is safe to call mbedtls_ctr_drbg_random() - * from multiple threads. Other operations, including - * reseeding, are not thread-safe. - */ -#endif /* MBEDTLS_THREADING_C */ -/** - * \param p_rng The HMAC_DRBG context. This must be a pointer to a - * #mbedtls_hmac_drbg_context structure. - * \param output The buffer to fill. - * \param out_len The length of the buffer in bytes. - * This must be at most #MBEDTLS_HMAC_DRBG_MAX_REQUEST. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED - * if a call to the entropy source failed. - * \return #MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG if - * \p out_len > #MBEDTLS_HMAC_DRBG_MAX_REQUEST. - */ -int mbedtls_hmac_drbg_random( void *p_rng, unsigned char *output, size_t out_len ); - -/** - * \brief This function resets HMAC_DRBG context to the state immediately - * after initial call of mbedtls_hmac_drbg_init(). - * - * \param ctx The HMAC_DRBG context to free. - */ -void mbedtls_hmac_drbg_free( mbedtls_hmac_drbg_context *ctx ); - -#if ! defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief This function updates the state of the HMAC_DRBG context. - * - * \deprecated Superseded by mbedtls_hmac_drbg_update_ret() - * in 2.16.0. - * - * \param ctx The HMAC_DRBG context. - * \param additional The data to update the state with. - * If this is \c NULL, there is no additional data. - * \param add_len Length of \p additional in bytes. - * Unused if \p additional is \c NULL. - */ -MBEDTLS_DEPRECATED void mbedtls_hmac_drbg_update( - mbedtls_hmac_drbg_context *ctx, - const unsigned char *additional, size_t add_len ); -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -#if defined(MBEDTLS_FS_IO) -/** - * \brief This function writes a seed file. - * - * \param ctx The HMAC_DRBG context. - * \param path The name of the file. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR on file error. - * \return #MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED on reseed - * failure. - */ -int mbedtls_hmac_drbg_write_seed_file( mbedtls_hmac_drbg_context *ctx, const char *path ); - -/** - * \brief This function reads and updates a seed file. The seed - * is added to this instance. - * - * \param ctx The HMAC_DRBG context. - * \param path The name of the file. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR on file error. - * \return #MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED on - * reseed failure. - * \return #MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG if the existing - * seed file is too large. - */ -int mbedtls_hmac_drbg_update_seed_file( mbedtls_hmac_drbg_context *ctx, const char *path ); -#endif /* MBEDTLS_FS_IO */ - - -#if defined(MBEDTLS_SELF_TEST) -/** - * \brief The HMAC_DRBG Checkup routine. - * - * \return \c 0 if successful. - * \return \c 1 if the test failed. - */ -int mbedtls_hmac_drbg_self_test( int verbose ); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* hmac_drbg.h */ +COSMOPOLITAN_C_END_ +#endif /* MBEDTLS_HMAC_DRBG_H_ */ diff --git a/third_party/mbedtls/iana.h b/third_party/mbedtls/iana.h new file mode 100644 index 000000000..dc1e7e8cb --- /dev/null +++ b/third_party/mbedtls/iana.h @@ -0,0 +1,12 @@ +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_IANA_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_IANA_H_ +#if !(__ASSEMBLER__ + __LINKER__ + 0) +COSMOPOLITAN_C_START_ + +bool IsCipherSuiteGood(uint16_t); +const char *GetCipherSuiteName(uint16_t); +const char *GetAlertDescription(unsigned char); + +COSMOPOLITAN_C_END_ +#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_IANA_H_ */ diff --git a/third_party/mbedtls/isciphersuitegood.c b/third_party/mbedtls/isciphersuitegood.c new file mode 100644 index 000000000..8eee4429d --- /dev/null +++ b/third_party/mbedtls/isciphersuitegood.c @@ -0,0 +1,51 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "third_party/mbedtls/iana.h" + +bool IsCipherSuiteGood(uint16_t x) { + switch (x) { + case 0x009E: /* TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (RFC5288) */ + case 0x009F: /* TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (RFC5288) */ + case 0x00AA: /* TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 (RFC5487) */ + case 0x00AB: /* TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 (RFC5487) */ + case 0x1301: /* TLS_AES_128_GCM_SHA256 (RFC8446) */ + case 0x1302: /* TLS_AES_256_GCM_SHA384 (RFC8446) */ + case 0x1303: /* TLS_CHACHA20_POLY1305_SHA256 (RFC8446) */ + case 0x1304: /* TLS_AES_128_CCM_SHA256 (RFC8446) */ + case 0xC02B: /* TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (RFC5289) */ + case 0xC02C: /* TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (RFC5289) */ + case 0xC02F: /* TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (RFC5289) */ + case 0xC030: /* TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (RFC5289) */ + case 0xC09E: /* TLS_DHE_RSA_WITH_AES_128_CCM (RFC6655) */ + case 0xC09F: /* TLS_DHE_RSA_WITH_AES_256_CCM (RFC6655) */ + case 0xC0A6: /* TLS_DHE_PSK_WITH_AES_128_CCM (RFC6655) */ + case 0xC0A7: /* TLS_DHE_PSK_WITH_AES_256_CCM (RFC6655) */ + case 0xCCA8: /* TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (RFC7905) */ + case 0xCCA9: /* TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (RFC7905) */ + case 0xCCAA: /* TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (RFC7905) */ + case 0xCCAC: /* TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 (RFC7905) */ + case 0xCCAD: /* TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 (RFC7905) */ + case 0xD001: /* TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256 (RFC8442) */ + case 0xD002: /* TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384 (RFC8442) */ + case 0xD005: /* TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256 (RFC8442) */ + return true; + default: + return false; + } +} diff --git a/third_party/mbedtls/mbedtls.mk b/third_party/mbedtls/mbedtls.mk index 1c91526cd..fba92c304 100644 --- a/third_party/mbedtls/mbedtls.mk +++ b/third_party/mbedtls/mbedtls.mk @@ -7,11 +7,13 @@ THIRD_PARTY_MBEDTLS_ARTIFACTS += THIRD_PARTY_MBEDTLS_A THIRD_PARTY_MBEDTLS = $(THIRD_PARTY_MBEDTLS_A_DEPS) $(THIRD_PARTY_MBEDTLS_A) THIRD_PARTY_MBEDTLS_A = o/$(MODE)/third_party/mbedtls/mbedtls.a THIRD_PARTY_MBEDTLS_A_FILES := $(wildcard third_party/mbedtls/*) +THIRD_PARTY_MBEDTLS_A_CERTS := $(wildcard usr/share/ssl/root/*) THIRD_PARTY_MBEDTLS_A_HDRS = $(filter %.h,$(THIRD_PARTY_MBEDTLS_A_FILES)) THIRD_PARTY_MBEDTLS_A_SRCS = $(filter %.c,$(THIRD_PARTY_MBEDTLS_A_FILES)) THIRD_PARTY_MBEDTLS_A_OBJS = \ - $(THIRD_PARTY_MBEDTLS_A_SRCS:%.c=o/$(MODE)/%.o) + $(THIRD_PARTY_MBEDTLS_A_SRCS:%.c=o/$(MODE)/%.o) \ + $(THIRD_PARTY_MBEDTLS_A_CERTS:%=o/$(MODE)/%.zip.o) THIRD_PARTY_MBEDTLS_A_CHECKS = \ $(THIRD_PARTY_MBEDTLS_A).pkg \ @@ -19,14 +21,13 @@ THIRD_PARTY_MBEDTLS_A_CHECKS = \ THIRD_PARTY_MBEDTLS_A_DIRECTDEPS = \ LIBC_CALLS \ - LIBC_DNS \ LIBC_FMT \ LIBC_INTRIN \ LIBC_MEM \ LIBC_NEXGEN32E \ LIBC_RAND \ LIBC_RUNTIME \ - LIBC_SOCK \ + LIBC_LOG \ LIBC_STDIO \ LIBC_STR \ LIBC_SYSV \ @@ -52,6 +53,18 @@ $(THIRD_PARTY_MBEDTLS_A_OBJS): \ -fdata-sections \ -ffunction-sections +o/$(MODE)/third_party/mbedtls/bignum.o \ +o/$(MODE)/third_party/mbedtls/ecp.o \ +o/$(MODE)/third_party/mbedtls/ecp_curves.o \ +o/$(MODE)/third_party/mbedtls/everest.o: \ + OVERRIDE_CFLAGS += \ + -O3 + +# tail recursion is so important because everest was written in f* +o/$(MODE)/third_party/mbedtls/everest.o: \ + OVERRIDE_CFLAGS += \ + -foptimize-sibling-calls + THIRD_PARTY_MBEDTLS_LIBS = $(foreach x,$(THIRD_PARTY_MBEDTLS_ARTIFACTS),$($(x))) THIRD_PARTY_MBEDTLS_SRCS = $(foreach x,$(THIRD_PARTY_MBEDTLS_ARTIFACTS),$($(x)_SRCS)) THIRD_PARTY_MBEDTLS_HDRS = $(foreach x,$(THIRD_PARTY_MBEDTLS_ARTIFACTS),$($(x)_HDRS)) @@ -61,4 +74,5 @@ $(THIRD_PARTY_MBEDTLS_A_OBJS): third_party/mbedtls/mbedtls.mk .PHONY: o/$(MODE)/third_party/mbedtls o/$(MODE)/third_party/mbedtls: \ - $(THIRD_PARTY_MBEDTLS_CHECKS) + o/$(MODE)/third_party/mbedtls/test \ + $(THIRD_PARTY_MBEDTLS_CHECKS) diff --git a/third_party/mbedtls/md.c b/third_party/mbedtls/md.c index 2cda888ee..0af970d50 100644 --- a/third_party/mbedtls/md.c +++ b/third_party/mbedtls/md.c @@ -1,8 +1,20 @@ +#include "libc/mem/mem.h" +#include "libc/stdio/stdio.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/md.h" +#include "third_party/mbedtls/md5.h" +#include "third_party/mbedtls/md_internal.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/sha1.h" +#include "third_party/mbedtls/sha256.h" +#include "third_party/mbedtls/sha512.h" /* clang-format off */ asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); /** @@ -28,34 +40,8 @@ asm(".include \"libc/disclaimer.inc\""); * limitations under the License. */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_MD_C) -#include "third_party/mbedtls/md.h" -#include "third_party/mbedtls/md_internal.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - -#include "third_party/mbedtls/md2.h" -#include "third_party/mbedtls/md4.h" -#include "third_party/mbedtls/md5.h" -#include "third_party/mbedtls/ripemd160.h" -#include "third_party/mbedtls/sha1.h" -#include "third_party/mbedtls/sha256.h" -#include "third_party/mbedtls/sha512.h" - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - - -#if defined(MBEDTLS_FS_IO) -#endif - #if defined(MBEDTLS_MD2_C) const mbedtls_md_info_t mbedtls_md2_info = { "MD2", @@ -83,15 +69,6 @@ const mbedtls_md_info_t mbedtls_md5_info = { }; #endif -#if defined(MBEDTLS_RIPEMD160_C) -const mbedtls_md_info_t mbedtls_ripemd160_info = { - "RIPEMD160", - MBEDTLS_MD_RIPEMD160, - 20, - 64, -}; -#endif - #if defined(MBEDTLS_SHA1_C) const mbedtls_md_info_t mbedtls_sha1_info = { "SHA1", @@ -138,7 +115,7 @@ const mbedtls_md_info_t mbedtls_sha512_info = { /* * Reminder: update profiles in x509_crt.c when adding a new hash! */ -static const int supported_digests[] = { +static const uint8_t supported_digests[] = { #if defined(MBEDTLS_SHA512_C) MBEDTLS_MD_SHA512, @@ -156,10 +133,6 @@ static const int supported_digests[] = { MBEDTLS_MD_SHA1, #endif -#if defined(MBEDTLS_RIPEMD160_C) - MBEDTLS_MD_RIPEMD160, -#endif - #if defined(MBEDTLS_MD5_C) MBEDTLS_MD_MD5, #endif @@ -175,7 +148,7 @@ static const int supported_digests[] = { MBEDTLS_MD_NONE }; -const int *mbedtls_md_list( void ) +const uint8_t *mbedtls_md_list( void ) { return( supported_digests ); } @@ -198,10 +171,6 @@ const mbedtls_md_info_t *mbedtls_md_info_from_string( const char *md_name ) if( !strcmp( "MD5", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_MD5 ); #endif -#if defined(MBEDTLS_RIPEMD160_C) - if( !strcmp( "RIPEMD160", md_name ) ) - return mbedtls_md_info_from_type( MBEDTLS_MD_RIPEMD160 ); -#endif #if defined(MBEDTLS_SHA1_C) if( !strcmp( "SHA1", md_name ) || !strcmp( "SHA", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_SHA1 ); @@ -239,10 +208,6 @@ const mbedtls_md_info_t *mbedtls_md_info_from_type( mbedtls_md_type_t md_type ) case MBEDTLS_MD_MD5: return( &mbedtls_md5_info ); #endif -#if defined(MBEDTLS_RIPEMD160_C) - case MBEDTLS_MD_RIPEMD160: - return( &mbedtls_ripemd160_info ); -#endif #if defined(MBEDTLS_SHA1_C) case MBEDTLS_MD_SHA1: return( &mbedtls_sha1_info ); @@ -295,11 +260,6 @@ void mbedtls_md_free( mbedtls_md_context_t *ctx ) mbedtls_md5_free( ctx->md_ctx ); break; #endif -#if defined(MBEDTLS_RIPEMD160_C) - case MBEDTLS_MD_RIPEMD160: - mbedtls_ripemd160_free( ctx->md_ctx ); - break; -#endif #if defined(MBEDTLS_SHA1_C) case MBEDTLS_MD_SHA1: mbedtls_sha1_free( ctx->md_ctx ); @@ -363,11 +323,6 @@ int mbedtls_md_clone( mbedtls_md_context_t *dst, mbedtls_md5_clone( dst->md_ctx, src->md_ctx ); break; #endif -#if defined(MBEDTLS_RIPEMD160_C) - case MBEDTLS_MD_RIPEMD160: - mbedtls_ripemd160_clone( dst->md_ctx, src->md_ctx ); - break; -#endif #if defined(MBEDTLS_SHA1_C) case MBEDTLS_MD_SHA1: mbedtls_sha1_clone( dst->md_ctx, src->md_ctx ); @@ -394,13 +349,6 @@ int mbedtls_md_clone( mbedtls_md_context_t *dst, return( 0 ); } -#if ! defined(MBEDTLS_DEPRECATED_REMOVED) -int mbedtls_md_init_ctx( mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_info ) -{ - return mbedtls_md_setup( ctx, md_info, 1 ); -} -#endif - #define ALLOC( type ) \ do { \ ctx->md_ctx = mbedtls_calloc( 1, sizeof( mbedtls_##type##_context ) ); \ @@ -436,11 +384,6 @@ int mbedtls_md_setup( mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_inf ALLOC( md5 ); break; #endif -#if defined(MBEDTLS_RIPEMD160_C) - case MBEDTLS_MD_RIPEMD160: - ALLOC( ripemd160 ); - break; -#endif #if defined(MBEDTLS_SHA1_C) case MBEDTLS_MD_SHA1: ALLOC( sha1 ); @@ -497,10 +440,6 @@ int mbedtls_md_starts( mbedtls_md_context_t *ctx ) case MBEDTLS_MD_MD5: return( mbedtls_md5_starts_ret( ctx->md_ctx ) ); #endif -#if defined(MBEDTLS_RIPEMD160_C) - case MBEDTLS_MD_RIPEMD160: - return( mbedtls_ripemd160_starts_ret( ctx->md_ctx ) ); -#endif #if defined(MBEDTLS_SHA1_C) case MBEDTLS_MD_SHA1: return( mbedtls_sha1_starts_ret( ctx->md_ctx ) ); @@ -543,10 +482,6 @@ int mbedtls_md_update( mbedtls_md_context_t *ctx, const unsigned char *input, si case MBEDTLS_MD_MD5: return( mbedtls_md5_update_ret( ctx->md_ctx, input, ilen ) ); #endif -#if defined(MBEDTLS_RIPEMD160_C) - case MBEDTLS_MD_RIPEMD160: - return( mbedtls_ripemd160_update_ret( ctx->md_ctx, input, ilen ) ); -#endif #if defined(MBEDTLS_SHA1_C) case MBEDTLS_MD_SHA1: return( mbedtls_sha1_update_ret( ctx->md_ctx, input, ilen ) ); @@ -587,10 +522,6 @@ int mbedtls_md_finish( mbedtls_md_context_t *ctx, unsigned char *output ) case MBEDTLS_MD_MD5: return( mbedtls_md5_finish_ret( ctx->md_ctx, output ) ); #endif -#if defined(MBEDTLS_RIPEMD160_C) - case MBEDTLS_MD_RIPEMD160: - return( mbedtls_ripemd160_finish_ret( ctx->md_ctx, output ) ); -#endif #if defined(MBEDTLS_SHA1_C) case MBEDTLS_MD_SHA1: return( mbedtls_sha1_finish_ret( ctx->md_ctx, output ) ); @@ -632,10 +563,6 @@ int mbedtls_md( const mbedtls_md_info_t *md_info, const unsigned char *input, si case MBEDTLS_MD_MD5: return( mbedtls_md5_ret( input, ilen, output ) ); #endif -#if defined(MBEDTLS_RIPEMD160_C) - case MBEDTLS_MD_RIPEMD160: - return( mbedtls_ripemd160_ret( input, ilen, output ) ); -#endif #if defined(MBEDTLS_SHA1_C) case MBEDTLS_MD_SHA1: return( mbedtls_sha1_ret( input, ilen, output ) ); @@ -842,10 +769,6 @@ int mbedtls_md_process( mbedtls_md_context_t *ctx, const unsigned char *data ) case MBEDTLS_MD_MD5: return( mbedtls_internal_md5_process( ctx->md_ctx, data ) ); #endif -#if defined(MBEDTLS_RIPEMD160_C) - case MBEDTLS_MD_RIPEMD160: - return( mbedtls_internal_ripemd160_process( ctx->md_ctx, data ) ); -#endif #if defined(MBEDTLS_SHA1_C) case MBEDTLS_MD_SHA1: return( mbedtls_internal_sha1_process( ctx->md_ctx, data ) ); diff --git a/third_party/mbedtls/md.h b/third_party/mbedtls/md.h index 049d7afd3..1ae8e87bc 100644 --- a/third_party/mbedtls/md.h +++ b/third_party/mbedtls/md.h @@ -1,38 +1,8 @@ -/* clang-format off */ - - /** - * \file md.h - * - * \brief This file contains the generic message-digest wrapper. - * - * \author Adriaan de Jong - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MBEDTLS_MD_H -#define MBEDTLS_MD_H - - -#if !defined(MBEDTLS_CONFIG_FILE) +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_MD_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_MD_H_ #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif +COSMOPOLITAN_C_START_ +/* clang-format off */ #define MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE -0x5080 /**< The selected feature is not available. */ #define MBEDTLS_ERR_MD_BAD_INPUT_DATA -0x5100 /**< Bad input parameters to function. */ @@ -42,10 +12,6 @@ /* MBEDTLS_ERR_MD_HW_ACCEL_FAILED is deprecated and should not be used. */ #define MBEDTLS_ERR_MD_HW_ACCEL_FAILED -0x5280 /**< MD hardware accelerator failed. */ -#ifdef __cplusplus -extern "C" { -#endif - /** * \brief Supported message digests. * @@ -110,7 +76,7 @@ typedef struct mbedtls_md_context_t * message-digest enumeration #mbedtls_md_type_t. * The last entry is 0. */ -const int *mbedtls_md_list( void ); +const uint8_t *mbedtls_md_list( void ); /** * \brief This function returns the message-digest information @@ -159,34 +125,6 @@ void mbedtls_md_init( mbedtls_md_context_t *ctx ); */ void mbedtls_md_free( mbedtls_md_context_t *ctx ); -#if ! defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief This function selects the message digest algorithm to use, - * and allocates internal structures. - * - * It should be called after mbedtls_md_init() or mbedtls_md_free(). - * Makes it necessary to call mbedtls_md_free() later. - * - * \deprecated Superseded by mbedtls_md_setup() in 2.0.0 - * - * \param ctx The context to set up. - * \param md_info The information structure of the message-digest algorithm - * to use. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_MD_BAD_INPUT_DATA on parameter-verification - * failure. - * \return #MBEDTLS_ERR_MD_ALLOC_FAILED on memory-allocation failure. - */ -int mbedtls_md_init_ctx( mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_info ) MBEDTLS_DEPRECATED; -#undef MBEDTLS_DEPRECATED -#endif /* MBEDTLS_DEPRECATED_REMOVED */ - /** * \brief This function selects the message digest algorithm to use, * and allocates internal structures. @@ -468,8 +406,7 @@ int mbedtls_md_hmac( const mbedtls_md_info_t *md_info, const unsigned char *key, /* Internal use */ int mbedtls_md_process( mbedtls_md_context_t *ctx, const unsigned char *data ); -#ifdef __cplusplus -} -#endif +const char *mbedtls_md_type_name(mbedtls_md_type_t); -#endif /* MBEDTLS_MD_H */ +COSMOPOLITAN_C_END_ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_MD_H_ */ diff --git a/third_party/mbedtls/md2.c b/third_party/mbedtls/md2.c deleted file mode 100644 index 9fee5bc86..000000000 --- a/third_party/mbedtls/md2.c +++ /dev/null @@ -1,365 +0,0 @@ -/* clang-format off */ - -asm(".ident\t\"\\n\\n\ -Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); -asm(".include \"libc/disclaimer.inc\""); - -/* - * RFC 1115/1319 compliant MD2 implementation - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * The MD2 algorithm was designed by Ron Rivest in 1989. - * - * http://www.ietf.org/rfc/rfc1115.txt - * http://www.ietf.org/rfc/rfc1319.txt - */ - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_MD2_C) - -#include "third_party/mbedtls/md2.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - -#if !defined(MBEDTLS_MD2_ALT) - -static const unsigned char PI_SUBST[256] = -{ - 0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01, 0x3D, 0x36, - 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13, 0x62, 0xA7, 0x05, 0xF3, - 0xC0, 0xC7, 0x73, 0x8C, 0x98, 0x93, 0x2B, 0xD9, 0xBC, 0x4C, - 0x82, 0xCA, 0x1E, 0x9B, 0x57, 0x3C, 0xFD, 0xD4, 0xE0, 0x16, - 0x67, 0x42, 0x6F, 0x18, 0x8A, 0x17, 0xE5, 0x12, 0xBE, 0x4E, - 0xC4, 0xD6, 0xDA, 0x9E, 0xDE, 0x49, 0xA0, 0xFB, 0xF5, 0x8E, - 0xBB, 0x2F, 0xEE, 0x7A, 0xA9, 0x68, 0x79, 0x91, 0x15, 0xB2, - 0x07, 0x3F, 0x94, 0xC2, 0x10, 0x89, 0x0B, 0x22, 0x5F, 0x21, - 0x80, 0x7F, 0x5D, 0x9A, 0x5A, 0x90, 0x32, 0x27, 0x35, 0x3E, - 0xCC, 0xE7, 0xBF, 0xF7, 0x97, 0x03, 0xFF, 0x19, 0x30, 0xB3, - 0x48, 0xA5, 0xB5, 0xD1, 0xD7, 0x5E, 0x92, 0x2A, 0xAC, 0x56, - 0xAA, 0xC6, 0x4F, 0xB8, 0x38, 0xD2, 0x96, 0xA4, 0x7D, 0xB6, - 0x76, 0xFC, 0x6B, 0xE2, 0x9C, 0x74, 0x04, 0xF1, 0x45, 0x9D, - 0x70, 0x59, 0x64, 0x71, 0x87, 0x20, 0x86, 0x5B, 0xCF, 0x65, - 0xE6, 0x2D, 0xA8, 0x02, 0x1B, 0x60, 0x25, 0xAD, 0xAE, 0xB0, - 0xB9, 0xF6, 0x1C, 0x46, 0x61, 0x69, 0x34, 0x40, 0x7E, 0x0F, - 0x55, 0x47, 0xA3, 0x23, 0xDD, 0x51, 0xAF, 0x3A, 0xC3, 0x5C, - 0xF9, 0xCE, 0xBA, 0xC5, 0xEA, 0x26, 0x2C, 0x53, 0x0D, 0x6E, - 0x85, 0x28, 0x84, 0x09, 0xD3, 0xDF, 0xCD, 0xF4, 0x41, 0x81, - 0x4D, 0x52, 0x6A, 0xDC, 0x37, 0xC8, 0x6C, 0xC1, 0xAB, 0xFA, - 0x24, 0xE1, 0x7B, 0x08, 0x0C, 0xBD, 0xB1, 0x4A, 0x78, 0x88, - 0x95, 0x8B, 0xE3, 0x63, 0xE8, 0x6D, 0xE9, 0xCB, 0xD5, 0xFE, - 0x3B, 0x00, 0x1D, 0x39, 0xF2, 0xEF, 0xB7, 0x0E, 0x66, 0x58, - 0xD0, 0xE4, 0xA6, 0x77, 0x72, 0xF8, 0xEB, 0x75, 0x4B, 0x0A, - 0x31, 0x44, 0x50, 0xB4, 0x8F, 0xED, 0x1F, 0x1A, 0xDB, 0x99, - 0x8D, 0x33, 0x9F, 0x11, 0x83, 0x14 -}; - -void mbedtls_md2_init( mbedtls_md2_context *ctx ) -{ - memset( ctx, 0, sizeof( mbedtls_md2_context ) ); -} - -void mbedtls_md2_free( mbedtls_md2_context *ctx ) -{ - if( ctx == NULL ) - return; - - mbedtls_platform_zeroize( ctx, sizeof( mbedtls_md2_context ) ); -} - -void mbedtls_md2_clone( mbedtls_md2_context *dst, - const mbedtls_md2_context *src ) -{ - *dst = *src; -} - -/* - * MD2 context setup - */ -int mbedtls_md2_starts_ret( mbedtls_md2_context *ctx ) -{ - memset( ctx->cksum, 0, 16 ); - memset( ctx->state, 0, 46 ); - memset( ctx->buffer, 0, 16 ); - ctx->left = 0; - - return( 0 ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_md2_starts( mbedtls_md2_context *ctx ) -{ - mbedtls_md2_starts_ret( ctx ); -} -#endif - -#if !defined(MBEDTLS_MD2_PROCESS_ALT) -int mbedtls_internal_md2_process( mbedtls_md2_context *ctx ) -{ - int i, j; - unsigned char t = 0; - - for( i = 0; i < 16; i++ ) - { - ctx->state[i + 16] = ctx->buffer[i]; - ctx->state[i + 32] = - (unsigned char)( ctx->buffer[i] ^ ctx->state[i]); - } - - for( i = 0; i < 18; i++ ) - { - for( j = 0; j < 48; j++ ) - { - ctx->state[j] = (unsigned char) - ( ctx->state[j] ^ PI_SUBST[t] ); - t = ctx->state[j]; - } - - t = (unsigned char)( t + i ); - } - - t = ctx->cksum[15]; - - for( i = 0; i < 16; i++ ) - { - ctx->cksum[i] = (unsigned char) - ( ctx->cksum[i] ^ PI_SUBST[ctx->buffer[i] ^ t] ); - t = ctx->cksum[i]; - } - - /* Zeroise variables to clear sensitive data from memory. */ - mbedtls_platform_zeroize( &t, sizeof( t ) ); - - return( 0 ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_md2_process( mbedtls_md2_context *ctx ) -{ - mbedtls_internal_md2_process( ctx ); -} -#endif -#endif /* !MBEDTLS_MD2_PROCESS_ALT */ - -/* - * MD2 process buffer - */ -int mbedtls_md2_update_ret( mbedtls_md2_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - size_t fill; - - while( ilen > 0 ) - { - if( ilen > 16 - ctx->left ) - fill = 16 - ctx->left; - else - fill = ilen; - - memcpy( ctx->buffer + ctx->left, input, fill ); - - ctx->left += fill; - input += fill; - ilen -= fill; - - if( ctx->left == 16 ) - { - ctx->left = 0; - if( ( ret = mbedtls_internal_md2_process( ctx ) ) != 0 ) - return( ret ); - } - } - - return( 0 ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_md2_update( mbedtls_md2_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - mbedtls_md2_update_ret( ctx, input, ilen ); -} -#endif - -/* - * MD2 final digest - */ -int mbedtls_md2_finish_ret( mbedtls_md2_context *ctx, - unsigned char output[16] ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - size_t i; - unsigned char x; - - x = (unsigned char)( 16 - ctx->left ); - - for( i = ctx->left; i < 16; i++ ) - ctx->buffer[i] = x; - - if( ( ret = mbedtls_internal_md2_process( ctx ) ) != 0 ) - return( ret ); - - memcpy( ctx->buffer, ctx->cksum, 16 ); - if( ( ret = mbedtls_internal_md2_process( ctx ) ) != 0 ) - return( ret ); - - memcpy( output, ctx->state, 16 ); - - return( 0 ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_md2_finish( mbedtls_md2_context *ctx, - unsigned char output[16] ) -{ - mbedtls_md2_finish_ret( ctx, output ); -} -#endif - -#endif /* !MBEDTLS_MD2_ALT */ - -/* - * output = MD2( input buffer ) - */ -int mbedtls_md2_ret( const unsigned char *input, - size_t ilen, - unsigned char output[16] ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - mbedtls_md2_context ctx; - - mbedtls_md2_init( &ctx ); - - if( ( ret = mbedtls_md2_starts_ret( &ctx ) ) != 0 ) - goto exit; - - if( ( ret = mbedtls_md2_update_ret( &ctx, input, ilen ) ) != 0 ) - goto exit; - - if( ( ret = mbedtls_md2_finish_ret( &ctx, output ) ) != 0 ) - goto exit; - -exit: - mbedtls_md2_free( &ctx ); - - return( ret ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_md2( const unsigned char *input, - size_t ilen, - unsigned char output[16] ) -{ - mbedtls_md2_ret( input, ilen, output ); -} -#endif - -#if defined(MBEDTLS_SELF_TEST) - -/* - * RFC 1319 test vectors - */ -static const unsigned char md2_test_str[7][81] = -{ - { "" }, - { "a" }, - { "abc" }, - { "message digest" }, - { "abcdefghijklmnopqrstuvwxyz" }, - { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" }, - { "12345678901234567890123456789012345678901234567890123456789012345678901234567890" } -}; - -static const size_t md2_test_strlen[7] = -{ - 0, 1, 3, 14, 26, 62, 80 -}; - -static const unsigned char md2_test_sum[7][16] = -{ - { 0x83, 0x50, 0xE5, 0xA3, 0xE2, 0x4C, 0x15, 0x3D, - 0xF2, 0x27, 0x5C, 0x9F, 0x80, 0x69, 0x27, 0x73 }, - { 0x32, 0xEC, 0x01, 0xEC, 0x4A, 0x6D, 0xAC, 0x72, - 0xC0, 0xAB, 0x96, 0xFB, 0x34, 0xC0, 0xB5, 0xD1 }, - { 0xDA, 0x85, 0x3B, 0x0D, 0x3F, 0x88, 0xD9, 0x9B, - 0x30, 0x28, 0x3A, 0x69, 0xE6, 0xDE, 0xD6, 0xBB }, - { 0xAB, 0x4F, 0x49, 0x6B, 0xFB, 0x2A, 0x53, 0x0B, - 0x21, 0x9F, 0xF3, 0x30, 0x31, 0xFE, 0x06, 0xB0 }, - { 0x4E, 0x8D, 0xDF, 0xF3, 0x65, 0x02, 0x92, 0xAB, - 0x5A, 0x41, 0x08, 0xC3, 0xAA, 0x47, 0x94, 0x0B }, - { 0xDA, 0x33, 0xDE, 0xF2, 0xA4, 0x2D, 0xF1, 0x39, - 0x75, 0x35, 0x28, 0x46, 0xC3, 0x03, 0x38, 0xCD }, - { 0xD5, 0x97, 0x6F, 0x79, 0xD8, 0x3D, 0x3A, 0x0D, - 0xC9, 0x80, 0x6C, 0x3C, 0x66, 0xF3, 0xEF, 0xD8 } -}; - -/* - * Checkup routine - */ -int mbedtls_md2_self_test( int verbose ) -{ - int i, ret = 0; - unsigned char md2sum[16]; - - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) - mbedtls_printf( " MD2 test #%d: ", i + 1 ); - - ret = mbedtls_md2_ret( md2_test_str[i], md2_test_strlen[i], md2sum ); - if( ret != 0 ) - goto fail; - - if( memcmp( md2sum, md2_test_sum[i], 16 ) != 0 ) - { - ret = 1; - goto fail; - } - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - } - - if( verbose != 0 ) - mbedtls_printf( "\n" ); - - return( 0 ); - -fail: - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - - return( ret ); -} - -#endif /* MBEDTLS_SELF_TEST */ - -#endif /* MBEDTLS_MD2_C */ diff --git a/third_party/mbedtls/md2.h b/third_party/mbedtls/md2.h deleted file mode 100644 index a9e539fb6..000000000 --- a/third_party/mbedtls/md2.h +++ /dev/null @@ -1,305 +0,0 @@ -/* clang-format off */ - -/** - * \file md2.h - * - * \brief MD2 message digest algorithm (hash function) - * - * \warning MD2 is considered a weak message digest and its use constitutes a - * security risk. We recommend considering stronger message digests - * instead. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#ifndef MBEDTLS_MD2_H -#define MBEDTLS_MD2_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -/* MBEDTLS_ERR_MD2_HW_ACCEL_FAILED is deprecated and should not be used. */ -#define MBEDTLS_ERR_MD2_HW_ACCEL_FAILED -0x002B /**< MD2 hardware accelerator failed */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(MBEDTLS_MD2_ALT) -// Regular implementation -// - -/** - * \brief MD2 context structure - * - * \warning MD2 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -typedef struct mbedtls_md2_context -{ - unsigned char cksum[16]; /*!< checksum of the data block */ - unsigned char state[48]; /*!< intermediate digest state */ - unsigned char buffer[16]; /*!< data block being processed */ - size_t left; /*!< amount of data in buffer */ -} -mbedtls_md2_context; - -#else /* MBEDTLS_MD2_ALT */ -/* #include "third_party/mbedtls/md2_alt.h" */ -#endif /* MBEDTLS_MD2_ALT */ - -/** - * \brief Initialize MD2 context - * - * \param ctx MD2 context to be initialized - * - * \warning MD2 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -void mbedtls_md2_init( mbedtls_md2_context *ctx ); - -/** - * \brief Clear MD2 context - * - * \param ctx MD2 context to be cleared - * - * \warning MD2 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -void mbedtls_md2_free( mbedtls_md2_context *ctx ); - -/** - * \brief Clone (the state of) an MD2 context - * - * \param dst The destination context - * \param src The context to be cloned - * - * \warning MD2 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -void mbedtls_md2_clone( mbedtls_md2_context *dst, - const mbedtls_md2_context *src ); - -/** - * \brief MD2 context setup - * - * \param ctx context to be initialized - * - * \return 0 if successful - * - * \warning MD2 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_md2_starts_ret( mbedtls_md2_context *ctx ); - -/** - * \brief MD2 process buffer - * - * \param ctx MD2 context - * \param input buffer holding the data - * \param ilen length of the input data - * - * \return 0 if successful - * - * \warning MD2 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_md2_update_ret( mbedtls_md2_context *ctx, - const unsigned char *input, - size_t ilen ); - -/** - * \brief MD2 final digest - * - * \param ctx MD2 context - * \param output MD2 checksum result - * - * \return 0 if successful - * - * \warning MD2 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_md2_finish_ret( mbedtls_md2_context *ctx, - unsigned char output[16] ); - -/** - * \brief MD2 process data block (internal use only) - * - * \param ctx MD2 context - * - * \return 0 if successful - * - * \warning MD2 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_internal_md2_process( mbedtls_md2_context *ctx ); - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief MD2 context setup - * - * \deprecated Superseded by mbedtls_md2_starts_ret() in 2.7.0 - * - * \param ctx context to be initialized - * - * \warning MD2 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -MBEDTLS_DEPRECATED void mbedtls_md2_starts( mbedtls_md2_context *ctx ); - -/** - * \brief MD2 process buffer - * - * \deprecated Superseded by mbedtls_md2_update_ret() in 2.7.0 - * - * \param ctx MD2 context - * \param input buffer holding the data - * \param ilen length of the input data - * - * \warning MD2 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -MBEDTLS_DEPRECATED void mbedtls_md2_update( mbedtls_md2_context *ctx, - const unsigned char *input, - size_t ilen ); - -/** - * \brief MD2 final digest - * - * \deprecated Superseded by mbedtls_md2_finish_ret() in 2.7.0 - * - * \param ctx MD2 context - * \param output MD2 checksum result - * - * \warning MD2 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -MBEDTLS_DEPRECATED void mbedtls_md2_finish( mbedtls_md2_context *ctx, - unsigned char output[16] ); - -/** - * \brief MD2 process data block (internal use only) - * - * \deprecated Superseded by mbedtls_internal_md2_process() in 2.7.0 - * - * \param ctx MD2 context - * - * \warning MD2 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -MBEDTLS_DEPRECATED void mbedtls_md2_process( mbedtls_md2_context *ctx ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -/** - * \brief Output = MD2( input buffer ) - * - * \param input buffer holding the data - * \param ilen length of the input data - * \param output MD2 checksum result - * - * \warning MD2 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_md2_ret( const unsigned char *input, - size_t ilen, - unsigned char output[16] ); - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief Output = MD2( input buffer ) - * - * \deprecated Superseded by mbedtls_md2_ret() in 2.7.0 - * - * \param input buffer holding the data - * \param ilen length of the input data - * \param output MD2 checksum result - * - * \warning MD2 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -MBEDTLS_DEPRECATED void mbedtls_md2( const unsigned char *input, - size_t ilen, - unsigned char output[16] ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -#if defined(MBEDTLS_SELF_TEST) - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - * - * \warning MD2 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_md2_self_test( int verbose ); - -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* mbedtls_md2.h */ diff --git a/third_party/mbedtls/md4.c b/third_party/mbedtls/md4.c deleted file mode 100644 index c78fb5d39..000000000 --- a/third_party/mbedtls/md4.c +++ /dev/null @@ -1,489 +0,0 @@ -/* clang-format off */ - -asm(".ident\t\"\\n\\n\ -Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); -asm(".include \"libc/disclaimer.inc\""); - -/* - * RFC 1186/1320 compliant MD4 implementation - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * The MD4 algorithm was designed by Ron Rivest in 1990. - * - * http://www.ietf.org/rfc/rfc1186.txt - * http://www.ietf.org/rfc/rfc1320.txt - */ - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_MD4_C) - -#include "third_party/mbedtls/md4.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - -#if !defined(MBEDTLS_MD4_ALT) - -/* - * 32-bit integer manipulation macros (little endian) - */ -#ifndef GET_UINT32_LE -#define GET_UINT32_LE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] ) \ - | ( (uint32_t) (b)[(i) + 1] << 8 ) \ - | ( (uint32_t) (b)[(i) + 2] << 16 ) \ - | ( (uint32_t) (b)[(i) + 3] << 24 ); \ -} -#endif - -#ifndef PUT_UINT32_LE -#define PUT_UINT32_LE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( ( (n) ) & 0xFF ); \ - (b)[(i) + 1] = (unsigned char) ( ( (n) >> 8 ) & 0xFF ); \ - (b)[(i) + 2] = (unsigned char) ( ( (n) >> 16 ) & 0xFF ); \ - (b)[(i) + 3] = (unsigned char) ( ( (n) >> 24 ) & 0xFF ); \ -} -#endif - -void mbedtls_md4_init( mbedtls_md4_context *ctx ) -{ - memset( ctx, 0, sizeof( mbedtls_md4_context ) ); -} - -void mbedtls_md4_free( mbedtls_md4_context *ctx ) -{ - if( ctx == NULL ) - return; - - mbedtls_platform_zeroize( ctx, sizeof( mbedtls_md4_context ) ); -} - -void mbedtls_md4_clone( mbedtls_md4_context *dst, - const mbedtls_md4_context *src ) -{ - *dst = *src; -} - -/* - * MD4 context setup - */ -int mbedtls_md4_starts_ret( mbedtls_md4_context *ctx ) -{ - ctx->total[0] = 0; - ctx->total[1] = 0; - - ctx->state[0] = 0x67452301; - ctx->state[1] = 0xEFCDAB89; - ctx->state[2] = 0x98BADCFE; - ctx->state[3] = 0x10325476; - - return( 0 ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_md4_starts( mbedtls_md4_context *ctx ) -{ - mbedtls_md4_starts_ret( ctx ); -} -#endif - -#if !defined(MBEDTLS_MD4_PROCESS_ALT) -int mbedtls_internal_md4_process( mbedtls_md4_context *ctx, - const unsigned char data[64] ) -{ - struct - { - uint32_t X[16], A, B, C, D; - } local; - - GET_UINT32_LE( local.X[ 0], data, 0 ); - GET_UINT32_LE( local.X[ 1], data, 4 ); - GET_UINT32_LE( local.X[ 2], data, 8 ); - GET_UINT32_LE( local.X[ 3], data, 12 ); - GET_UINT32_LE( local.X[ 4], data, 16 ); - GET_UINT32_LE( local.X[ 5], data, 20 ); - GET_UINT32_LE( local.X[ 6], data, 24 ); - GET_UINT32_LE( local.X[ 7], data, 28 ); - GET_UINT32_LE( local.X[ 8], data, 32 ); - GET_UINT32_LE( local.X[ 9], data, 36 ); - GET_UINT32_LE( local.X[10], data, 40 ); - GET_UINT32_LE( local.X[11], data, 44 ); - GET_UINT32_LE( local.X[12], data, 48 ); - GET_UINT32_LE( local.X[13], data, 52 ); - GET_UINT32_LE( local.X[14], data, 56 ); - GET_UINT32_LE( local.X[15], data, 60 ); - -#define S(x,n) (((x) << (n)) | (((x) & 0xFFFFFFFF) >> (32 - (n)))) - - local.A = ctx->state[0]; - local.B = ctx->state[1]; - local.C = ctx->state[2]; - local.D = ctx->state[3]; - -#define F(x, y, z) (((x) & (y)) | ((~(x)) & (z))) -#define P(a,b,c,d,x,s) \ - do \ - { \ - (a) += F((b),(c),(d)) + (x); \ - (a) = S((a),(s)); \ - } while( 0 ) - - - P( local.A, local.B, local.C, local.D, local.X[ 0], 3 ); - P( local.D, local.A, local.B, local.C, local.X[ 1], 7 ); - P( local.C, local.D, local.A, local.B, local.X[ 2], 11 ); - P( local.B, local.C, local.D, local.A, local.X[ 3], 19 ); - P( local.A, local.B, local.C, local.D, local.X[ 4], 3 ); - P( local.D, local.A, local.B, local.C, local.X[ 5], 7 ); - P( local.C, local.D, local.A, local.B, local.X[ 6], 11 ); - P( local.B, local.C, local.D, local.A, local.X[ 7], 19 ); - P( local.A, local.B, local.C, local.D, local.X[ 8], 3 ); - P( local.D, local.A, local.B, local.C, local.X[ 9], 7 ); - P( local.C, local.D, local.A, local.B, local.X[10], 11 ); - P( local.B, local.C, local.D, local.A, local.X[11], 19 ); - P( local.A, local.B, local.C, local.D, local.X[12], 3 ); - P( local.D, local.A, local.B, local.C, local.X[13], 7 ); - P( local.C, local.D, local.A, local.B, local.X[14], 11 ); - P( local.B, local.C, local.D, local.A, local.X[15], 19 ); - -#undef P -#undef F - -#define F(x,y,z) (((x) & (y)) | ((x) & (z)) | ((y) & (z))) -#define P(a,b,c,d,x,s) \ - do \ - { \ - (a) += F((b),(c),(d)) + (x) + 0x5A827999; \ - (a) = S((a),(s)); \ - } while( 0 ) - - P( local.A, local.B, local.C, local.D, local.X[ 0], 3 ); - P( local.D, local.A, local.B, local.C, local.X[ 4], 5 ); - P( local.C, local.D, local.A, local.B, local.X[ 8], 9 ); - P( local.B, local.C, local.D, local.A, local.X[12], 13 ); - P( local.A, local.B, local.C, local.D, local.X[ 1], 3 ); - P( local.D, local.A, local.B, local.C, local.X[ 5], 5 ); - P( local.C, local.D, local.A, local.B, local.X[ 9], 9 ); - P( local.B, local.C, local.D, local.A, local.X[13], 13 ); - P( local.A, local.B, local.C, local.D, local.X[ 2], 3 ); - P( local.D, local.A, local.B, local.C, local.X[ 6], 5 ); - P( local.C, local.D, local.A, local.B, local.X[10], 9 ); - P( local.B, local.C, local.D, local.A, local.X[14], 13 ); - P( local.A, local.B, local.C, local.D, local.X[ 3], 3 ); - P( local.D, local.A, local.B, local.C, local.X[ 7], 5 ); - P( local.C, local.D, local.A, local.B, local.X[11], 9 ); - P( local.B, local.C, local.D, local.A, local.X[15], 13 ); - -#undef P -#undef F - -#define F(x,y,z) ((x) ^ (y) ^ (z)) -#define P(a,b,c,d,x,s) \ - do \ - { \ - (a) += F((b),(c),(d)) + (x) + 0x6ED9EBA1; \ - (a) = S((a),(s)); \ - } while( 0 ) - - P( local.A, local.B, local.C, local.D, local.X[ 0], 3 ); - P( local.D, local.A, local.B, local.C, local.X[ 8], 9 ); - P( local.C, local.D, local.A, local.B, local.X[ 4], 11 ); - P( local.B, local.C, local.D, local.A, local.X[12], 15 ); - P( local.A, local.B, local.C, local.D, local.X[ 2], 3 ); - P( local.D, local.A, local.B, local.C, local.X[10], 9 ); - P( local.C, local.D, local.A, local.B, local.X[ 6], 11 ); - P( local.B, local.C, local.D, local.A, local.X[14], 15 ); - P( local.A, local.B, local.C, local.D, local.X[ 1], 3 ); - P( local.D, local.A, local.B, local.C, local.X[ 9], 9 ); - P( local.C, local.D, local.A, local.B, local.X[ 5], 11 ); - P( local.B, local.C, local.D, local.A, local.X[13], 15 ); - P( local.A, local.B, local.C, local.D, local.X[ 3], 3 ); - P( local.D, local.A, local.B, local.C, local.X[11], 9 ); - P( local.C, local.D, local.A, local.B, local.X[ 7], 11 ); - P( local.B, local.C, local.D, local.A, local.X[15], 15 ); - -#undef F -#undef P - - ctx->state[0] += local.A; - ctx->state[1] += local.B; - ctx->state[2] += local.C; - ctx->state[3] += local.D; - - /* Zeroise variables to clear sensitive data from memory. */ - mbedtls_platform_zeroize( &local, sizeof( local ) ); - - return( 0 ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_md4_process( mbedtls_md4_context *ctx, - const unsigned char data[64] ) -{ - mbedtls_internal_md4_process( ctx, data ); -} -#endif -#endif /* !MBEDTLS_MD4_PROCESS_ALT */ - -/* - * MD4 process buffer - */ -int mbedtls_md4_update_ret( mbedtls_md4_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - size_t fill; - uint32_t left; - - if( ilen == 0 ) - return( 0 ); - - left = ctx->total[0] & 0x3F; - fill = 64 - left; - - ctx->total[0] += (uint32_t) ilen; - ctx->total[0] &= 0xFFFFFFFF; - - if( ctx->total[0] < (uint32_t) ilen ) - ctx->total[1]++; - - if( left && ilen >= fill ) - { - memcpy( (void *) (ctx->buffer + left), - (void *) input, fill ); - - if( ( ret = mbedtls_internal_md4_process( ctx, ctx->buffer ) ) != 0 ) - return( ret ); - - input += fill; - ilen -= fill; - left = 0; - } - - while( ilen >= 64 ) - { - if( ( ret = mbedtls_internal_md4_process( ctx, input ) ) != 0 ) - return( ret ); - - input += 64; - ilen -= 64; - } - - if( ilen > 0 ) - { - memcpy( (void *) (ctx->buffer + left), - (void *) input, ilen ); - } - - return( 0 ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_md4_update( mbedtls_md4_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - mbedtls_md4_update_ret( ctx, input, ilen ); -} -#endif - -static const unsigned char md4_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* - * MD4 final digest - */ -int mbedtls_md4_finish_ret( mbedtls_md4_context *ctx, - unsigned char output[16] ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - uint32_t last, padn; - uint32_t high, low; - unsigned char msglen[8]; - - high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); - low = ( ctx->total[0] << 3 ); - - PUT_UINT32_LE( low, msglen, 0 ); - PUT_UINT32_LE( high, msglen, 4 ); - - last = ctx->total[0] & 0x3F; - padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); - - ret = mbedtls_md4_update_ret( ctx, (unsigned char *)md4_padding, padn ); - if( ret != 0 ) - return( ret ); - - if( ( ret = mbedtls_md4_update_ret( ctx, msglen, 8 ) ) != 0 ) - return( ret ); - - - PUT_UINT32_LE( ctx->state[0], output, 0 ); - PUT_UINT32_LE( ctx->state[1], output, 4 ); - PUT_UINT32_LE( ctx->state[2], output, 8 ); - PUT_UINT32_LE( ctx->state[3], output, 12 ); - - return( 0 ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_md4_finish( mbedtls_md4_context *ctx, - unsigned char output[16] ) -{ - mbedtls_md4_finish_ret( ctx, output ); -} -#endif - -#endif /* !MBEDTLS_MD4_ALT */ - -/* - * output = MD4( input buffer ) - */ -int mbedtls_md4_ret( const unsigned char *input, - size_t ilen, - unsigned char output[16] ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - mbedtls_md4_context ctx; - - mbedtls_md4_init( &ctx ); - - if( ( ret = mbedtls_md4_starts_ret( &ctx ) ) != 0 ) - goto exit; - - if( ( ret = mbedtls_md4_update_ret( &ctx, input, ilen ) ) != 0 ) - goto exit; - - if( ( ret = mbedtls_md4_finish_ret( &ctx, output ) ) != 0 ) - goto exit; - -exit: - mbedtls_md4_free( &ctx ); - - return( ret ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_md4( const unsigned char *input, - size_t ilen, - unsigned char output[16] ) -{ - mbedtls_md4_ret( input, ilen, output ); -} -#endif - -#if defined(MBEDTLS_SELF_TEST) - -/* - * RFC 1320 test vectors - */ -static const unsigned char md4_test_str[7][81] = -{ - { "" }, - { "a" }, - { "abc" }, - { "message digest" }, - { "abcdefghijklmnopqrstuvwxyz" }, - { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" }, - { "12345678901234567890123456789012345678901234567890123456789012345678901234567890" } -}; - -static const size_t md4_test_strlen[7] = -{ - 0, 1, 3, 14, 26, 62, 80 -}; - -static const unsigned char md4_test_sum[7][16] = -{ - { 0x31, 0xD6, 0xCF, 0xE0, 0xD1, 0x6A, 0xE9, 0x31, - 0xB7, 0x3C, 0x59, 0xD7, 0xE0, 0xC0, 0x89, 0xC0 }, - { 0xBD, 0xE5, 0x2C, 0xB3, 0x1D, 0xE3, 0x3E, 0x46, - 0x24, 0x5E, 0x05, 0xFB, 0xDB, 0xD6, 0xFB, 0x24 }, - { 0xA4, 0x48, 0x01, 0x7A, 0xAF, 0x21, 0xD8, 0x52, - 0x5F, 0xC1, 0x0A, 0xE8, 0x7A, 0xA6, 0x72, 0x9D }, - { 0xD9, 0x13, 0x0A, 0x81, 0x64, 0x54, 0x9F, 0xE8, - 0x18, 0x87, 0x48, 0x06, 0xE1, 0xC7, 0x01, 0x4B }, - { 0xD7, 0x9E, 0x1C, 0x30, 0x8A, 0xA5, 0xBB, 0xCD, - 0xEE, 0xA8, 0xED, 0x63, 0xDF, 0x41, 0x2D, 0xA9 }, - { 0x04, 0x3F, 0x85, 0x82, 0xF2, 0x41, 0xDB, 0x35, - 0x1C, 0xE6, 0x27, 0xE1, 0x53, 0xE7, 0xF0, 0xE4 }, - { 0xE3, 0x3B, 0x4D, 0xDC, 0x9C, 0x38, 0xF2, 0x19, - 0x9C, 0x3E, 0x7B, 0x16, 0x4F, 0xCC, 0x05, 0x36 } -}; - -/* - * Checkup routine - */ -int mbedtls_md4_self_test( int verbose ) -{ - int i, ret = 0; - unsigned char md4sum[16]; - - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) - mbedtls_printf( " MD4 test #%d: ", i + 1 ); - - ret = mbedtls_md4_ret( md4_test_str[i], md4_test_strlen[i], md4sum ); - if( ret != 0 ) - goto fail; - - if( memcmp( md4sum, md4_test_sum[i], 16 ) != 0 ) - { - ret = 1; - goto fail; - } - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - } - - if( verbose != 0 ) - mbedtls_printf( "\n" ); - - return( 0 ); - -fail: - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - - return( ret ); -} - -#endif /* MBEDTLS_SELF_TEST */ - -#endif /* MBEDTLS_MD4_C */ diff --git a/third_party/mbedtls/md4.h b/third_party/mbedtls/md4.h deleted file mode 100644 index 281141c27..000000000 --- a/third_party/mbedtls/md4.h +++ /dev/null @@ -1,309 +0,0 @@ -/* clang-format off */ - -/** - * \file md4.h - * - * \brief MD4 message digest algorithm (hash function) - * - * \warning MD4 is considered a weak message digest and its use constitutes a - * security risk. We recommend considering stronger message digests - * instead. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#ifndef MBEDTLS_MD4_H -#define MBEDTLS_MD4_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -/* MBEDTLS_ERR_MD4_HW_ACCEL_FAILED is deprecated and should not be used. */ -#define MBEDTLS_ERR_MD4_HW_ACCEL_FAILED -0x002D /**< MD4 hardware accelerator failed */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(MBEDTLS_MD4_ALT) -// Regular implementation -// - -/** - * \brief MD4 context structure - * - * \warning MD4 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -typedef struct mbedtls_md4_context -{ - uint32_t total[2]; /*!< number of bytes processed */ - uint32_t state[4]; /*!< intermediate digest state */ - unsigned char buffer[64]; /*!< data block being processed */ -} -mbedtls_md4_context; - -#else /* MBEDTLS_MD4_ALT */ -/* #include "third_party/mbedtls/md4_alt.h" */ -#endif /* MBEDTLS_MD4_ALT */ - -/** - * \brief Initialize MD4 context - * - * \param ctx MD4 context to be initialized - * - * \warning MD4 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -void mbedtls_md4_init( mbedtls_md4_context *ctx ); - -/** - * \brief Clear MD4 context - * - * \param ctx MD4 context to be cleared - * - * \warning MD4 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -void mbedtls_md4_free( mbedtls_md4_context *ctx ); - -/** - * \brief Clone (the state of) an MD4 context - * - * \param dst The destination context - * \param src The context to be cloned - * - * \warning MD4 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -void mbedtls_md4_clone( mbedtls_md4_context *dst, - const mbedtls_md4_context *src ); - -/** - * \brief MD4 context setup - * - * \param ctx context to be initialized - * - * \return 0 if successful - * - * \warning MD4 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - */ -int mbedtls_md4_starts_ret( mbedtls_md4_context *ctx ); - -/** - * \brief MD4 process buffer - * - * \param ctx MD4 context - * \param input buffer holding the data - * \param ilen length of the input data - * - * \return 0 if successful - * - * \warning MD4 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_md4_update_ret( mbedtls_md4_context *ctx, - const unsigned char *input, - size_t ilen ); - -/** - * \brief MD4 final digest - * - * \param ctx MD4 context - * \param output MD4 checksum result - * - * \return 0 if successful - * - * \warning MD4 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_md4_finish_ret( mbedtls_md4_context *ctx, - unsigned char output[16] ); - -/** - * \brief MD4 process data block (internal use only) - * - * \param ctx MD4 context - * \param data buffer holding one block of data - * - * \return 0 if successful - * - * \warning MD4 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_internal_md4_process( mbedtls_md4_context *ctx, - const unsigned char data[64] ); - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief MD4 context setup - * - * \deprecated Superseded by mbedtls_md4_starts_ret() in 2.7.0 - * - * \param ctx context to be initialized - * - * \warning MD4 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -MBEDTLS_DEPRECATED void mbedtls_md4_starts( mbedtls_md4_context *ctx ); - -/** - * \brief MD4 process buffer - * - * \deprecated Superseded by mbedtls_md4_update_ret() in 2.7.0 - * - * \param ctx MD4 context - * \param input buffer holding the data - * \param ilen length of the input data - * - * \warning MD4 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -MBEDTLS_DEPRECATED void mbedtls_md4_update( mbedtls_md4_context *ctx, - const unsigned char *input, - size_t ilen ); - -/** - * \brief MD4 final digest - * - * \deprecated Superseded by mbedtls_md4_finish_ret() in 2.7.0 - * - * \param ctx MD4 context - * \param output MD4 checksum result - * - * \warning MD4 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -MBEDTLS_DEPRECATED void mbedtls_md4_finish( mbedtls_md4_context *ctx, - unsigned char output[16] ); - -/** - * \brief MD4 process data block (internal use only) - * - * \deprecated Superseded by mbedtls_internal_md4_process() in 2.7.0 - * - * \param ctx MD4 context - * \param data buffer holding one block of data - * - * \warning MD4 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -MBEDTLS_DEPRECATED void mbedtls_md4_process( mbedtls_md4_context *ctx, - const unsigned char data[64] ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -/** - * \brief Output = MD4( input buffer ) - * - * \param input buffer holding the data - * \param ilen length of the input data - * \param output MD4 checksum result - * - * \return 0 if successful - * - * \warning MD4 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_md4_ret( const unsigned char *input, - size_t ilen, - unsigned char output[16] ); - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief Output = MD4( input buffer ) - * - * \deprecated Superseded by mbedtls_md4_ret() in 2.7.0 - * - * \param input buffer holding the data - * \param ilen length of the input data - * \param output MD4 checksum result - * - * \warning MD4 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -MBEDTLS_DEPRECATED void mbedtls_md4( const unsigned char *input, - size_t ilen, - unsigned char output[16] ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -#if defined(MBEDTLS_SELF_TEST) - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - * - * \warning MD4 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_md4_self_test( int verbose ); - -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* mbedtls_md4.h */ diff --git a/third_party/mbedtls/md5.c b/third_party/mbedtls/md5.c index 50eb02324..e9b53e8c3 100644 --- a/third_party/mbedtls/md5.c +++ b/third_party/mbedtls/md5.c @@ -1,10 +1,16 @@ -/* clang-format off */ +#include "libc/bits/bits.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/md5.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * RFC 1321 compliant MD5 implementation * @@ -29,91 +35,93 @@ asm(".include \"libc/disclaimer.inc\""); * http://www.ietf.org/rfc/rfc1321.txt */ -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_MD5_C) - -#include "third_party/mbedtls/md5.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - #if !defined(MBEDTLS_MD5_ALT) -/* - * 32-bit integer manipulation macros (little endian) +#define GET_UINT32_LE(n,b,i) (n) = READ32LE((b) + (i)) +#define PUT_UINT32_LE(n,b,i) WRITE32LE((b) + (i), n) + +/** + * \brief Initialize MD5 context + * + * \param ctx MD5 context to be initialized + * + * \warning MD5 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. */ -#ifndef GET_UINT32_LE -#define GET_UINT32_LE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] ) \ - | ( (uint32_t) (b)[(i) + 1] << 8 ) \ - | ( (uint32_t) (b)[(i) + 2] << 16 ) \ - | ( (uint32_t) (b)[(i) + 3] << 24 ); \ -} -#endif - -#ifndef PUT_UINT32_LE -#define PUT_UINT32_LE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( ( (n) ) & 0xFF ); \ - (b)[(i) + 1] = (unsigned char) ( ( (n) >> 8 ) & 0xFF ); \ - (b)[(i) + 2] = (unsigned char) ( ( (n) >> 16 ) & 0xFF ); \ - (b)[(i) + 3] = (unsigned char) ( ( (n) >> 24 ) & 0xFF ); \ -} -#endif - void mbedtls_md5_init( mbedtls_md5_context *ctx ) { memset( ctx, 0, sizeof( mbedtls_md5_context ) ); } +/** + * \brief Clear MD5 context + * + * \param ctx MD5 context to be cleared + * + * \warning MD5 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. + */ void mbedtls_md5_free( mbedtls_md5_context *ctx ) { - if( ctx == NULL ) - return; - + if( !ctx ) return; mbedtls_platform_zeroize( ctx, sizeof( mbedtls_md5_context ) ); } +/** + * \brief Clone (the state of) an MD5 context + * + * \param dst The destination context + * \param src The context to be cloned + * + * \warning MD5 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. + */ void mbedtls_md5_clone( mbedtls_md5_context *dst, const mbedtls_md5_context *src ) { *dst = *src; } -/* - * MD5 context setup +/** + * \brief MD5 context setup + * + * \param ctx context to be initialized + * + * \return 0 if successful + * + * \warning MD5 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. */ int mbedtls_md5_starts_ret( mbedtls_md5_context *ctx ) { ctx->total[0] = 0; ctx->total[1] = 0; - ctx->state[0] = 0x67452301; ctx->state[1] = 0xEFCDAB89; ctx->state[2] = 0x98BADCFE; ctx->state[3] = 0x10325476; - return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_md5_starts( mbedtls_md5_context *ctx ) -{ - mbedtls_md5_starts_ret( ctx ); -} -#endif - #if !defined(MBEDTLS_MD5_PROCESS_ALT) + +/** + * \brief MD5 process data block (internal use only) + * + * \param ctx MD5 context + * \param data buffer holding one block of data + * + * \return 0 if successful + * + * \warning MD5 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. + * + */ int mbedtls_internal_md5_process( mbedtls_md5_context *ctx, const unsigned char data[64] ) { @@ -249,17 +257,20 @@ int mbedtls_internal_md5_process( mbedtls_md5_context *ctx, return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_md5_process( mbedtls_md5_context *ctx, - const unsigned char data[64] ) -{ - mbedtls_internal_md5_process( ctx, data ); -} -#endif #endif /* !MBEDTLS_MD5_PROCESS_ALT */ -/* - * MD5 process buffer +/** + * \brief MD5 process buffer + * + * \param ctx MD5 context + * \param input buffer holding the data + * \param ilen length of the input data + * + * \return 0 if successful + * + * \warning MD5 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. */ int mbedtls_md5_update_ret( mbedtls_md5_context *ctx, const unsigned char *input, @@ -309,17 +320,17 @@ int mbedtls_md5_update_ret( mbedtls_md5_context *ctx, return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_md5_update( mbedtls_md5_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - mbedtls_md5_update_ret( ctx, input, ilen ); -} -#endif - -/* - * MD5 final digest +/** + * \brief MD5 final digest + * + * \param ctx MD5 context + * \param output MD5 checksum result + * + * \return 0 if successful + * + * \warning MD5 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. */ int mbedtls_md5_finish_ret( mbedtls_md5_context *ctx, unsigned char output[16] ) @@ -375,18 +386,20 @@ int mbedtls_md5_finish_ret( mbedtls_md5_context *ctx, return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_md5_finish( mbedtls_md5_context *ctx, - unsigned char output[16] ) -{ - mbedtls_md5_finish_ret( ctx, output ); -} -#endif - #endif /* !MBEDTLS_MD5_ALT */ -/* - * output = MD5( input buffer ) +/** + * \brief Output = MD5( input buffer ) + * + * \param input buffer holding the data + * \param ilen length of the input data + * \param output MD5 checksum result + * + * \return 0 if successful + * + * \warning MD5 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. */ int mbedtls_md5_ret( const unsigned char *input, size_t ilen, @@ -412,15 +425,6 @@ exit: return( ret ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_md5( const unsigned char *input, - size_t ilen, - unsigned char output[16] ) -{ - mbedtls_md5_ret( input, ilen, output ); -} -#endif - #if defined(MBEDTLS_SELF_TEST) /* * RFC 1321 test vectors @@ -459,8 +463,15 @@ static const unsigned char md5_test_sum[7][16] = 0xAC, 0x49, 0xDA, 0x2E, 0x21, 0x07, 0xB6, 0x7A } }; -/* - * Checkup routine +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed + * + * \warning MD5 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. + * */ int mbedtls_md5_self_test( int verbose ) { @@ -499,5 +510,3 @@ fail: } #endif /* MBEDTLS_SELF_TEST */ - -#endif /* MBEDTLS_MD5_C */ diff --git a/third_party/mbedtls/md5.h b/third_party/mbedtls/md5.h index 4bf57f337..ff38e5087 100644 --- a/third_party/mbedtls/md5.h +++ b/third_party/mbedtls/md5.h @@ -1,50 +1,10 @@ +#ifndef MBEDTLS_MD5_H_ +#define MBEDTLS_MD5_H_ +#include "third_party/mbedtls/config.h" +COSMOPOLITAN_C_START_ /* clang-format off */ -/** - * \file md5.h - * - * \brief MD5 message digest algorithm (hash function) - * - * \warning MD5 is considered a weak message digest and its use constitutes a - * security risk. We recommend considering stronger message - * digests instead. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_MD5_H -#define MBEDTLS_MD5_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -/* MBEDTLS_ERR_MD5_HW_ACCEL_FAILED is deprecated and should not be used. */ -#define MBEDTLS_ERR_MD5_HW_ACCEL_FAILED -0x002F /**< MD5 hardware accelerator failed */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(MBEDTLS_MD5_ALT) -// Regular implementation -// +#define MBEDTLS_ERR_MD5_HW_ACCEL_FAILED -0x002F /**< MD5 hardware accelerator failed */ /** * \brief MD5 context structure @@ -62,248 +22,15 @@ typedef struct mbedtls_md5_context } mbedtls_md5_context; -#else /* MBEDTLS_MD5_ALT */ -/* #include "third_party/mbedtls/md5_alt.h" */ -#endif /* MBEDTLS_MD5_ALT */ +void mbedtls_md5_init( mbedtls_md5_context * ); +void mbedtls_md5_free( mbedtls_md5_context * ); +void mbedtls_md5_clone( mbedtls_md5_context *, const mbedtls_md5_context * ); +int mbedtls_md5_starts_ret( mbedtls_md5_context * ); +int mbedtls_md5_update_ret( mbedtls_md5_context *, const unsigned char *, size_t ); +int mbedtls_md5_finish_ret( mbedtls_md5_context *, unsigned char[16] ); +int mbedtls_internal_md5_process( mbedtls_md5_context *, const unsigned char[64] ); +int mbedtls_md5_ret( const unsigned char *, size_t, unsigned char[16] ); +int mbedtls_md5_self_test( int ); -/** - * \brief Initialize MD5 context - * - * \param ctx MD5 context to be initialized - * - * \warning MD5 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -void mbedtls_md5_init( mbedtls_md5_context *ctx ); - -/** - * \brief Clear MD5 context - * - * \param ctx MD5 context to be cleared - * - * \warning MD5 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -void mbedtls_md5_free( mbedtls_md5_context *ctx ); - -/** - * \brief Clone (the state of) an MD5 context - * - * \param dst The destination context - * \param src The context to be cloned - * - * \warning MD5 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -void mbedtls_md5_clone( mbedtls_md5_context *dst, - const mbedtls_md5_context *src ); - -/** - * \brief MD5 context setup - * - * \param ctx context to be initialized - * - * \return 0 if successful - * - * \warning MD5 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_md5_starts_ret( mbedtls_md5_context *ctx ); - -/** - * \brief MD5 process buffer - * - * \param ctx MD5 context - * \param input buffer holding the data - * \param ilen length of the input data - * - * \return 0 if successful - * - * \warning MD5 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_md5_update_ret( mbedtls_md5_context *ctx, - const unsigned char *input, - size_t ilen ); - -/** - * \brief MD5 final digest - * - * \param ctx MD5 context - * \param output MD5 checksum result - * - * \return 0 if successful - * - * \warning MD5 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_md5_finish_ret( mbedtls_md5_context *ctx, - unsigned char output[16] ); - -/** - * \brief MD5 process data block (internal use only) - * - * \param ctx MD5 context - * \param data buffer holding one block of data - * - * \return 0 if successful - * - * \warning MD5 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_internal_md5_process( mbedtls_md5_context *ctx, - const unsigned char data[64] ); - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief MD5 context setup - * - * \deprecated Superseded by mbedtls_md5_starts_ret() in 2.7.0 - * - * \param ctx context to be initialized - * - * \warning MD5 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -MBEDTLS_DEPRECATED void mbedtls_md5_starts( mbedtls_md5_context *ctx ); - -/** - * \brief MD5 process buffer - * - * \deprecated Superseded by mbedtls_md5_update_ret() in 2.7.0 - * - * \param ctx MD5 context - * \param input buffer holding the data - * \param ilen length of the input data - * - * \warning MD5 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -MBEDTLS_DEPRECATED void mbedtls_md5_update( mbedtls_md5_context *ctx, - const unsigned char *input, - size_t ilen ); - -/** - * \brief MD5 final digest - * - * \deprecated Superseded by mbedtls_md5_finish_ret() in 2.7.0 - * - * \param ctx MD5 context - * \param output MD5 checksum result - * - * \warning MD5 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -MBEDTLS_DEPRECATED void mbedtls_md5_finish( mbedtls_md5_context *ctx, - unsigned char output[16] ); - -/** - * \brief MD5 process data block (internal use only) - * - * \deprecated Superseded by mbedtls_internal_md5_process() in 2.7.0 - * - * \param ctx MD5 context - * \param data buffer holding one block of data - * - * \warning MD5 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -MBEDTLS_DEPRECATED void mbedtls_md5_process( mbedtls_md5_context *ctx, - const unsigned char data[64] ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -/** - * \brief Output = MD5( input buffer ) - * - * \param input buffer holding the data - * \param ilen length of the input data - * \param output MD5 checksum result - * - * \return 0 if successful - * - * \warning MD5 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_md5_ret( const unsigned char *input, - size_t ilen, - unsigned char output[16] ); - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief Output = MD5( input buffer ) - * - * \deprecated Superseded by mbedtls_md5_ret() in 2.7.0 - * - * \param input buffer holding the data - * \param ilen length of the input data - * \param output MD5 checksum result - * - * \warning MD5 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -MBEDTLS_DEPRECATED void mbedtls_md5( const unsigned char *input, - size_t ilen, - unsigned char output[16] ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -#if defined(MBEDTLS_SELF_TEST) - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - * - * \warning MD5 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - */ -int mbedtls_md5_self_test( int verbose ); - -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* mbedtls_md5.h */ +COSMOPOLITAN_C_END_ +#endif /* MBEDTLS_MD5_H_ */ diff --git a/third_party/mbedtls/md_internal.h b/third_party/mbedtls/md_internal.h index 2cc92246b..db2a8fbd8 100644 --- a/third_party/mbedtls/md_internal.h +++ b/third_party/mbedtls/md_internal.h @@ -1,40 +1,8 @@ -/* clang-format off */ - -/** - * \file md_internal.h - * - * \brief Message digest wrappers. - * - * \warning This in an internal header. Do not include directly. - * - * \author Adriaan de Jong - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_MD_WRAP_H #define MBEDTLS_MD_WRAP_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/md.h" +/* clang-format off */ #ifdef __cplusplus extern "C" { @@ -68,9 +36,6 @@ extern const mbedtls_md_info_t mbedtls_md4_info; #if defined(MBEDTLS_MD5_C) extern const mbedtls_md_info_t mbedtls_md5_info; #endif -#if defined(MBEDTLS_RIPEMD160_C) -extern const mbedtls_md_info_t mbedtls_ripemd160_info; -#endif #if defined(MBEDTLS_SHA1_C) extern const mbedtls_md_info_t mbedtls_sha1_info; #endif diff --git a/libc/rand/g_rando32.c b/third_party/mbedtls/mdtype.c similarity index 67% rename from libc/rand/g_rando32.c rename to third_party/mbedtls/mdtype.c index 79d9e7783..7e4aec004 100644 --- a/libc/rand/g_rando32.c +++ b/third_party/mbedtls/mdtype.c @@ -1,7 +1,7 @@ /*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ │vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ ╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ │ │ │ Permission to use, copy, modify, and/or distribute this software for │ │ any purpose with or without fee is hereby granted, provided that the │ @@ -16,32 +16,29 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/bits/bits.h" -#include "libc/dce.h" -#include "libc/rand/rand.h" -#include "libc/rand/xorshift.h" -#include "libc/sysv/consts/auxv.h" +#include "third_party/mbedtls/md.h" -hidden uint32_t g_rando32; - -textstartup static void g_rando32_init() { - intptr_t *auxvp; - if (!IsXnu() && !IsWindows()) { - asm("mov\t%%r15,%0" : "=r"(auxvp)); /* libc/crt/crt.S */ - for (; *auxvp; auxvp += 2) { - if (*auxvp == AT_RANDOM) { - uint8_t(*sysrandseed)[16] = (uint8_t(*)[16])auxvp[1]; - if (sysrandseed) g_rando32 ^= READ32LE(&(*sysrandseed)[8]); - return; - } - } - } - g_rando32 ^= kMarsagliaXorshift32Seed; - if (IsWindows()) { - g_rando32 ^= winrandish(); - } else { - devrand(&g_rando32, sizeof(g_rando32)); +const char *mbedtls_md_type_name(mbedtls_md_type_t t) { + switch (t) { + case MBEDTLS_MD_NONE: + return "NONE"; + case MBEDTLS_MD_MD2: + return "MD2"; + case MBEDTLS_MD_MD4: + return "MD4"; + case MBEDTLS_MD_MD5: + return "MD5"; + case MBEDTLS_MD_SHA1: + return "SHA1"; + case MBEDTLS_MD_SHA224: + return "SHA224"; + case MBEDTLS_MD_SHA256: + return "SHA256"; + case MBEDTLS_MD_SHA384: + return "SHA384"; + case MBEDTLS_MD_SHA512: + return "SHA512"; + default: + return 0; } } - -const void *const g_rando32_ctor[] initarray = {g_rando32_init}; diff --git a/third_party/mbedtls/memory_buffer_alloc.c b/third_party/mbedtls/memory_buffer_alloc.c index dd190e00a..55bc9b2b2 100644 --- a/third_party/mbedtls/memory_buffer_alloc.c +++ b/third_party/mbedtls/memory_buffer_alloc.c @@ -1,5 +1,14 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/memory_buffer_alloc.h" +#include "third_party/mbedtls/platform.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * Buffer-based memory allocator * @@ -19,19 +28,7 @@ * limitations under the License. */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) -#include "third_party/mbedtls/memory_buffer_alloc.h" - -/* No need for the header guard as MBEDTLS_MEMORY_BUFFER_ALLOC_C - is dependent upon MBEDTLS_PLATFORM_C */ -#include "third_party/mbedtls/platform.h" -#include "third_party/mbedtls/platform_util.h" - -#if defined(MBEDTLS_THREADING_C) -#include "third_party/mbedtls/threading.h" -#endif #define MAGIC1 0xFF00AA55 #define MAGIC2 0xEE119966 @@ -69,9 +66,6 @@ typedef struct size_t header_count; size_t maximum_header_count; #endif -#if defined(MBEDTLS_THREADING_C) - mbedtls_threading_mutex_t mutex; -#endif } buffer_alloc_ctx; @@ -537,40 +531,10 @@ void mbedtls_memory_buffer_alloc_cur_get( size_t *cur_used, size_t *cur_blocks ) } #endif /* MBEDTLS_MEMORY_DEBUG */ -#if defined(MBEDTLS_THREADING_C) -static void *buffer_alloc_calloc_mutexed( size_t n, size_t size ) -{ - void *buf; - if( mbedtls_mutex_lock( &heap.mutex ) != 0 ) - return( NULL ); - buf = buffer_alloc_calloc( n, size ); - if( mbedtls_mutex_unlock( &heap.mutex ) ) - return( NULL ); - return( buf ); -} - -static void buffer_alloc_free_mutexed( void *ptr ) -{ - /* We have to good option here, but corrupting the heap seems - * worse than loosing memory. */ - if( mbedtls_mutex_lock( &heap.mutex ) ) - return; - buffer_alloc_free( ptr ); - (void) mbedtls_mutex_unlock( &heap.mutex ); -} -#endif /* MBEDTLS_THREADING_C */ - void mbedtls_memory_buffer_alloc_init( unsigned char *buf, size_t len ) { memset( &heap, 0, sizeof( buffer_alloc_ctx ) ); - -#if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_init( &heap.mutex ); - mbedtls_platform_set_calloc_free( buffer_alloc_calloc_mutexed, - buffer_alloc_free_mutexed ); -#else mbedtls_platform_set_calloc_free( buffer_alloc_calloc, buffer_alloc_free ); -#endif if( len < sizeof( memory_header ) + MBEDTLS_MEMORY_ALIGN_MULTIPLE ) return; @@ -597,9 +561,6 @@ void mbedtls_memory_buffer_alloc_init( unsigned char *buf, size_t len ) void mbedtls_memory_buffer_alloc_free( void ) { -#if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_free( &heap.mutex ); -#endif mbedtls_platform_zeroize( &heap, sizeof(buffer_alloc_ctx) ); } diff --git a/third_party/mbedtls/memory_buffer_alloc.h b/third_party/mbedtls/memory_buffer_alloc.h index 1a6ac7a30..ba6d721dc 100644 --- a/third_party/mbedtls/memory_buffer_alloc.h +++ b/third_party/mbedtls/memory_buffer_alloc.h @@ -1,35 +1,7 @@ -/* clang-format off */ - -/** - * \file memory_buffer_alloc.h - * - * \brief Buffer-based memory allocator - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_MEMORY_BUFFER_ALLOC_H #define MBEDTLS_MEMORY_BUFFER_ALLOC_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - +/* clang-format off */ /** * \name SECTION: Module settings @@ -60,8 +32,6 @@ extern "C" { * presented buffer and does not call calloc() and free(). * It sets the global mbedtls_calloc() and mbedtls_free() pointers * to its own functions. - * (Provided mbedtls_calloc() and mbedtls_free() are thread-safe if - * MBEDTLS_THREADING_C is defined) * * \note This code is not optimized and provides a straight-forward * implementation of a stack-based memory allocator. diff --git a/third_party/mbedtls/net.h b/third_party/mbedtls/net.h deleted file mode 100644 index 38564db97..000000000 --- a/third_party/mbedtls/net.h +++ /dev/null @@ -1,37 +0,0 @@ -/* clang-format off */ - -/** - * \file net.h - * - * \brief Deprecated header file that includes net_sockets.h - * - * \deprecated Superseded by mbedtls/net_sockets.h - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#include "third_party/mbedtls/net_sockets.h" -#if defined(MBEDTLS_DEPRECATED_WARNING) -#warning "Deprecated header file: Superseded by mbedtls/net_sockets.h" -#endif /* MBEDTLS_DEPRECATED_WARNING */ -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ diff --git a/third_party/mbedtls/net_sockets.c b/third_party/mbedtls/net_sockets.c deleted file mode 100644 index 0907aa3f0..000000000 --- a/third_party/mbedtls/net_sockets.c +++ /dev/null @@ -1,657 +0,0 @@ -/* - * TCP/IP or UDP/IP networking functions - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* Enable definition of getaddrinfo() even when compiling with -std=c99. Must - * be set before config.h, which pulls in glibc's features.h indirectly. - * Harmless on other platforms. */ -#define _POSIX_C_SOURCE 200112L -#define _XOPEN_SOURCE 600 /* sockaddr_storage */ -#include "libc/calls/calls.h" -#include "libc/dns/dns.h" -#include "libc/errno.h" -#include "libc/sock/select.h" -#include "libc/sock/sock.h" -#include "libc/sysv/consts/af.h" -#include "libc/sysv/consts/f.h" -#include "libc/sysv/consts/ipproto.h" -#include "libc/sysv/consts/msg.h" -#include "libc/sysv/consts/o.h" -#include "libc/sysv/consts/so.h" -#include "libc/sysv/consts/sock.h" -#include "libc/sysv/consts/sol.h" -#include "third_party/mbedtls/common.h" -/* clang-format off */ - -#if defined(MBEDTLS_NET_C) - -#if !defined(unix) && !defined(__unix__) && !defined(__unix) && \ - !defined(__APPLE__) && !defined(_WIN32) && !defined(__QNXNTO__) && \ - !defined(__HAIKU__) && !defined(__midipix__) -#error "This module only works on Unix and Windows, see MBEDTLS_NET_C in config.h" -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#endif - -#include "third_party/mbedtls/net_sockets.h" -#include "third_party/mbedtls/error.h" - - -#if (defined(_WIN32) || defined(_WIN32_WCE)) && !defined(EFIX64) && \ - !defined(EFI32) - -#define IS_EINTR( ret ) ( ( ret ) == WSAEINTR ) - -#define read(fd,buf,len) recv( fd, (char*)( buf ), (int)( len ), 0 ) -#define write(fd,buf,len) send( fd, (char*)( buf ), (int)( len ), 0 ) -#define close(fd) closesocket(fd) - -static int wsa_init_done = 0; - -#else /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */ - -#define IS_EINTR( ret ) ( ( ret ) == EINTR ) - -#endif /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */ - -/* Some MS functions want int and MSVC warns if we pass size_t, - * but the standard functions use socklen_t, so cast only for MSVC */ -#if defined(_MSC_VER) -#define MSVC_INT_CAST (int) -#else -#define MSVC_INT_CAST -#endif - - - - -/* - * Prepare for using the sockets interface - */ -static int net_prepare( void ) -{ -#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ - !defined(EFI32) - WSADATA wsaData; - - if( wsa_init_done == 0 ) - { - if( WSAStartup( MAKEWORD(2,0), &wsaData ) != 0 ) - return( MBEDTLS_ERR_NET_SOCKET_FAILED ); - - wsa_init_done = 1; - } -#else -#if !defined(EFIX64) && !defined(EFI32) - signal( SIGPIPE, SIG_IGN ); -#endif -#endif - return( 0 ); -} - -/* - * Initialize a context - */ -void mbedtls_net_init( mbedtls_net_context *ctx ) -{ - ctx->fd = -1; -} - -/* - * Initiate a TCP connection with host:port and the given protocol - */ -int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, - const char *port, int proto ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - struct addrinfo hints, *addr_list, *cur; - - if( ( ret = net_prepare() ) != 0 ) - return( ret ); - - /* Do name resolution with both IPv6 and IPv4 */ - memset( &hints, 0, sizeof( hints ) ); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = proto == MBEDTLS_NET_PROTO_UDP ? SOCK_DGRAM : SOCK_STREAM; - hints.ai_protocol = proto == MBEDTLS_NET_PROTO_UDP ? IPPROTO_UDP : IPPROTO_TCP; - - if( getaddrinfo( host, port, &hints, &addr_list ) != 0 ) - return( MBEDTLS_ERR_NET_UNKNOWN_HOST ); - - /* Try the sockaddrs until a connection succeeds */ - ret = MBEDTLS_ERR_NET_UNKNOWN_HOST; - for( cur = addr_list; cur != NULL; cur = cur->ai_next ) - { - ctx->fd = (int) socket( cur->ai_family, cur->ai_socktype, - cur->ai_protocol ); - if( ctx->fd < 0 ) - { - ret = MBEDTLS_ERR_NET_SOCKET_FAILED; - continue; - } - - if( connect( ctx->fd, cur->ai_addr, MSVC_INT_CAST cur->ai_addrlen ) == 0 ) - { - ret = 0; - break; - } - - close( ctx->fd ); - ret = MBEDTLS_ERR_NET_CONNECT_FAILED; - } - - freeaddrinfo( addr_list ); - - return( ret ); -} - -/* - * Create a listening socket on bind_ip:port - */ -int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char *port, int proto ) -{ - int n, ret; - struct addrinfo hints, *addr_list, *cur; - - if( ( ret = net_prepare() ) != 0 ) - return( ret ); - - /* Bind to IPv6 and/or IPv4, but only in the desired protocol */ - memset( &hints, 0, sizeof( hints ) ); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = proto == MBEDTLS_NET_PROTO_UDP ? SOCK_DGRAM : SOCK_STREAM; - hints.ai_protocol = proto == MBEDTLS_NET_PROTO_UDP ? IPPROTO_UDP : IPPROTO_TCP; - if( bind_ip == NULL ) - hints.ai_flags = AI_PASSIVE; - - if( getaddrinfo( bind_ip, port, &hints, &addr_list ) != 0 ) - return( MBEDTLS_ERR_NET_UNKNOWN_HOST ); - - /* Try the sockaddrs until a binding succeeds */ - ret = MBEDTLS_ERR_NET_UNKNOWN_HOST; - for( cur = addr_list; cur != NULL; cur = cur->ai_next ) - { - ctx->fd = (int) socket( cur->ai_family, cur->ai_socktype, - cur->ai_protocol ); - if( ctx->fd < 0 ) - { - ret = MBEDTLS_ERR_NET_SOCKET_FAILED; - continue; - } - - n = 1; - if( setsockopt( ctx->fd, SOL_SOCKET, SO_REUSEADDR, - (const char *) &n, sizeof( n ) ) != 0 ) - { - close( ctx->fd ); - ret = MBEDTLS_ERR_NET_SOCKET_FAILED; - continue; - } - - if( bind( ctx->fd, cur->ai_addr, MSVC_INT_CAST cur->ai_addrlen ) != 0 ) - { - close( ctx->fd ); - ret = MBEDTLS_ERR_NET_BIND_FAILED; - continue; - } - - /* Listen only makes sense for TCP */ - if( proto == MBEDTLS_NET_PROTO_TCP ) - { - if( listen( ctx->fd, MBEDTLS_NET_LISTEN_BACKLOG ) != 0 ) - { - close( ctx->fd ); - ret = MBEDTLS_ERR_NET_LISTEN_FAILED; - continue; - } - } - - /* Bind was successful */ - ret = 0; - break; - } - - freeaddrinfo( addr_list ); - - return( ret ); - -} - -#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ - !defined(EFI32) -/* - * Check if the requested operation would be blocking on a non-blocking socket - * and thus 'failed' with a negative return value. - */ -static int net_would_block( const mbedtls_net_context *ctx ) -{ - ((void) ctx); - return( WSAGetLastError() == WSAEWOULDBLOCK ); -} -#else -/* - * Check if the requested operation would be blocking on a non-blocking socket - * and thus 'failed' with a negative return value. - * - * Note: on a blocking socket this function always returns 0! - */ -static int net_would_block( const mbedtls_net_context *ctx ) -{ - int err = errno; - - /* - * Never return 'WOULD BLOCK' on a blocking socket - */ - if( ( fcntl( ctx->fd, F_GETFL ) & O_NONBLOCK ) != O_NONBLOCK ) - { - errno = err; - return( 0 ); - } - - errno = err; - if (err == EAGAIN) { - return( 1 ); - } - return( 0 ); -} -#endif /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */ - -/* - * Accept a connection from a remote client - */ -int mbedtls_net_accept( mbedtls_net_context *bind_ctx, - mbedtls_net_context *client_ctx, - void *client_ip, size_t buf_size, size_t *ip_len ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - int type; - - struct sockaddr_storage client_addr; - -#if defined(__socklen_t_defined) || defined(_SOCKLEN_T) || \ - defined(_SOCKLEN_T_DECLARED) || defined(__DEFINED_socklen_t) || \ - defined(socklen_t) || (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) - socklen_t n = (socklen_t) sizeof( client_addr ); - socklen_t type_len = (socklen_t) sizeof( type ); -#else - int n = (int) sizeof( client_addr ); - int type_len = (int) sizeof( type ); -#endif - - /* Is this a TCP or UDP socket? */ - if( getsockopt( bind_ctx->fd, SOL_SOCKET, SO_TYPE, - (void *) &type, &type_len ) != 0 || - ( type != SOCK_STREAM && type != SOCK_DGRAM ) ) - { - return( MBEDTLS_ERR_NET_ACCEPT_FAILED ); - } - - if( type == SOCK_STREAM ) - { - /* TCP: actual accept() */ - ret = client_ctx->fd = (int) accept( bind_ctx->fd, - (struct sockaddr *) &client_addr, &n ); - } - else - { - /* UDP: wait for a message, but keep it in the queue */ - char buf[1] = { 0 }; - - ret = (int) recvfrom( bind_ctx->fd, buf, sizeof( buf ), MSG_PEEK, - (struct sockaddr *) &client_addr, &n ); - -#if defined(_WIN32) - if( ret == SOCKET_ERROR && - WSAGetLastError() == WSAEMSGSIZE ) - { - /* We know buf is too small, thanks, just peeking here */ - ret = 0; - } -#endif - } - - if( ret < 0 ) - { - if( net_would_block( bind_ctx ) != 0 ) - return( MBEDTLS_ERR_SSL_WANT_READ ); - - return( MBEDTLS_ERR_NET_ACCEPT_FAILED ); - } - - /* UDP: hijack the listening socket to communicate with the client, - * then bind a new socket to accept new connections */ - if( type != SOCK_STREAM ) - { - struct sockaddr_storage local_addr; - int one = 1; - - if( connect( bind_ctx->fd, (struct sockaddr *) &client_addr, n ) != 0 ) - return( MBEDTLS_ERR_NET_ACCEPT_FAILED ); - - client_ctx->fd = bind_ctx->fd; - bind_ctx->fd = -1; /* In case we exit early */ - - n = sizeof( struct sockaddr_storage ); - if( getsockname( client_ctx->fd, - (struct sockaddr *) &local_addr, &n ) != 0 || - ( bind_ctx->fd = (int) socket( local_addr.ss_family, - SOCK_DGRAM, IPPROTO_UDP ) ) < 0 || - setsockopt( bind_ctx->fd, SOL_SOCKET, SO_REUSEADDR, - (const char *) &one, sizeof( one ) ) != 0 ) - { - return( MBEDTLS_ERR_NET_SOCKET_FAILED ); - } - - if( bind( bind_ctx->fd, (struct sockaddr *) &local_addr, n ) != 0 ) - { - return( MBEDTLS_ERR_NET_BIND_FAILED ); - } - } - - if( client_ip != NULL ) - { - if( client_addr.ss_family == AF_INET ) - { - struct sockaddr_in *addr4 = (struct sockaddr_in *) &client_addr; - *ip_len = sizeof( addr4->sin_addr.s_addr ); - - if( buf_size < *ip_len ) - return( MBEDTLS_ERR_NET_BUFFER_TOO_SMALL ); - - memcpy( client_ip, &addr4->sin_addr.s_addr, *ip_len ); - } - else - { - abort(); - } - } - - return( 0 ); -} - -/* - * Set the socket blocking or non-blocking - */ -int mbedtls_net_set_block( mbedtls_net_context *ctx ) -{ -#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ - !defined(EFI32) - u_long n = 0; - return( ioctlsocket( ctx->fd, FIONBIO, &n ) ); -#else - return( fcntl( ctx->fd, F_SETFL, fcntl( ctx->fd, F_GETFL ) & ~O_NONBLOCK ) ); -#endif -} - -int mbedtls_net_set_nonblock( mbedtls_net_context *ctx ) -{ -#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ - !defined(EFI32) - u_long n = 1; - return( ioctlsocket( ctx->fd, FIONBIO, &n ) ); -#else - return( fcntl( ctx->fd, F_SETFL, fcntl( ctx->fd, F_GETFL ) | O_NONBLOCK ) ); -#endif -} - -/* - * Check if data is available on the socket - */ - -int mbedtls_net_poll( mbedtls_net_context *ctx, uint32_t rw, uint32_t timeout ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - struct timeval tv; - - fd_set read_fds; - fd_set write_fds; - - int fd = ctx->fd; - - if( fd < 0 ) - return( MBEDTLS_ERR_NET_INVALID_CONTEXT ); - - /* A limitation of select() is that it only works with file descriptors - * that are strictly less than FD_SETSIZE. This is a limitation of the - * fd_set type. Error out early, because attempting to call FD_SET on a - * large file descriptor is a buffer overflow on typical platforms. */ - if( fd >= FD_SETSIZE ) - return( MBEDTLS_ERR_NET_POLL_FAILED ); - -#if defined(__has_feature) -#if __has_feature(memory_sanitizer) - /* Ensure that memory sanitizers consider read_fds and write_fds as - * initialized even on platforms such as Glibc/x86_64 where FD_ZERO - * is implemented in assembly. */ - memset( &read_fds, 0, sizeof( read_fds ) ); - memset( &write_fds, 0, sizeof( write_fds ) ); -#endif -#endif - - FD_ZERO( &read_fds ); - if( rw & MBEDTLS_NET_POLL_READ ) - { - rw &= ~MBEDTLS_NET_POLL_READ; - FD_SET( fd, &read_fds ); - } - - FD_ZERO( &write_fds ); - if( rw & MBEDTLS_NET_POLL_WRITE ) - { - rw &= ~MBEDTLS_NET_POLL_WRITE; - FD_SET( fd, &write_fds ); - } - - if( rw != 0 ) - return( MBEDTLS_ERR_NET_BAD_INPUT_DATA ); - - tv.tv_sec = timeout / 1000; - tv.tv_usec = ( timeout % 1000 ) * 1000; - - do - { - ret = select( fd + 1, &read_fds, &write_fds, NULL, - timeout == (uint32_t) -1 ? NULL : &tv ); - } - while( IS_EINTR( ret ) ); - - if( ret < 0 ) - return( MBEDTLS_ERR_NET_POLL_FAILED ); - - ret = 0; - if( FD_ISSET( fd, &read_fds ) ) - ret |= MBEDTLS_NET_POLL_READ; - if( FD_ISSET( fd, &write_fds ) ) - ret |= MBEDTLS_NET_POLL_WRITE; - - return( ret ); -} - -/* - * Portable usleep helper - */ -void mbedtls_net_usleep( unsigned long usec ) -{ -#if defined(_WIN32) - Sleep( ( usec + 999 ) / 1000 ); -#else - struct timeval tv; - tv.tv_sec = usec / 1000000; -#if defined(__unix__) || defined(__unix) || \ - ( defined(__APPLE__) && defined(__MACH__) ) - tv.tv_usec = (suseconds_t) usec % 1000000; -#else - tv.tv_usec = usec % 1000000; -#endif - select( 0, NULL, NULL, NULL, &tv ); -#endif -} - -/* - * Read at most 'len' characters - */ -int mbedtls_net_recv( void *ctx, unsigned char *buf, size_t len ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - int fd = ((mbedtls_net_context *) ctx)->fd; - - if( fd < 0 ) - return( MBEDTLS_ERR_NET_INVALID_CONTEXT ); - - ret = (int) read( fd, buf, len ); - - if( ret < 0 ) - { - if( net_would_block( ctx ) != 0 ) - return( MBEDTLS_ERR_SSL_WANT_READ ); - -#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ - !defined(EFI32) - if( WSAGetLastError() == WSAECONNRESET ) - return( MBEDTLS_ERR_NET_CONN_RESET ); -#else - if( errno == EPIPE || errno == ECONNRESET ) - return( MBEDTLS_ERR_NET_CONN_RESET ); - - if( errno == EINTR ) - return( MBEDTLS_ERR_SSL_WANT_READ ); -#endif - - return( MBEDTLS_ERR_NET_RECV_FAILED ); - } - - return( ret ); -} - -/* - * Read at most 'len' characters, blocking for at most 'timeout' ms - */ -int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, - size_t len, uint32_t timeout ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - struct timeval tv; - fd_set read_fds; - int fd = ((mbedtls_net_context *) ctx)->fd; - - if( fd < 0 ) - return( MBEDTLS_ERR_NET_INVALID_CONTEXT ); - - /* A limitation of select() is that it only works with file descriptors - * that are strictly less than FD_SETSIZE. This is a limitation of the - * fd_set type. Error out early, because attempting to call FD_SET on a - * large file descriptor is a buffer overflow on typical platforms. */ - if( fd >= FD_SETSIZE ) - return( MBEDTLS_ERR_NET_POLL_FAILED ); - - FD_ZERO( &read_fds ); - FD_SET( fd, &read_fds ); - - tv.tv_sec = timeout / 1000; - tv.tv_usec = ( timeout % 1000 ) * 1000; - - ret = select( fd + 1, &read_fds, NULL, NULL, timeout == 0 ? NULL : &tv ); - - /* Zero fds ready means we timed out */ - if( ret == 0 ) - return( MBEDTLS_ERR_SSL_TIMEOUT ); - - if( ret < 0 ) - { -#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ - !defined(EFI32) - if( WSAGetLastError() == WSAEINTR ) - return( MBEDTLS_ERR_SSL_WANT_READ ); -#else - if( errno == EINTR ) - return( MBEDTLS_ERR_SSL_WANT_READ ); -#endif - - return( MBEDTLS_ERR_NET_RECV_FAILED ); - } - - /* This call will not block */ - return( mbedtls_net_recv( ctx, buf, len ) ); -} - -/* - * Write at most 'len' characters - */ -int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - int fd = ((mbedtls_net_context *) ctx)->fd; - - if( fd < 0 ) - return( MBEDTLS_ERR_NET_INVALID_CONTEXT ); - - ret = (int) write( fd, buf, len ); - - if( ret < 0 ) - { - if( net_would_block( ctx ) != 0 ) - return( MBEDTLS_ERR_SSL_WANT_WRITE ); - -#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ - !defined(EFI32) - if( WSAGetLastError() == WSAECONNRESET ) - return( MBEDTLS_ERR_NET_CONN_RESET ); -#else - if( errno == EPIPE || errno == ECONNRESET ) - return( MBEDTLS_ERR_NET_CONN_RESET ); - - if( errno == EINTR ) - return( MBEDTLS_ERR_SSL_WANT_WRITE ); -#endif - - return( MBEDTLS_ERR_NET_SEND_FAILED ); - } - - return( ret ); -} - -/* - * Close the connection - */ -void mbedtls_net_close( mbedtls_net_context *ctx ) -{ - if( ctx->fd == -1 ) - return; - - close( ctx->fd ); - - ctx->fd = -1; -} - -/* - * Gracefully close the connection - */ -void mbedtls_net_free( mbedtls_net_context *ctx ) -{ - if( ctx->fd == -1 ) - return; - - shutdown( ctx->fd, 2 ); - close( ctx->fd ); - - ctx->fd = -1; -} - -#endif /* MBEDTLS_NET_C */ diff --git a/third_party/mbedtls/net_sockets.h b/third_party/mbedtls/net_sockets.h deleted file mode 100644 index 9af47b956..000000000 --- a/third_party/mbedtls/net_sockets.h +++ /dev/null @@ -1,288 +0,0 @@ -/* clang-format off */ - -/** - * \file net_sockets.h - * - * \brief Network sockets abstraction layer to integrate Mbed TLS into a - * BSD-style sockets API. - * - * The network sockets module provides an example integration of the - * Mbed TLS library into a BSD sockets implementation. The module is - * intended to be an example of how Mbed TLS can be integrated into a - * networking stack, as well as to be Mbed TLS's network integration - * for its supported platforms. - * - * The module is intended only to be used with the Mbed TLS library and - * is not intended to be used by third party application software - * directly. - * - * The supported platforms are as follows: - * * Microsoft Windows and Windows CE - * * POSIX/Unix platforms including Linux, OS X - * - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_NET_SOCKETS_H -#define MBEDTLS_NET_SOCKETS_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "third_party/mbedtls/ssl.h" - - -#define MBEDTLS_ERR_NET_SOCKET_FAILED -0x0042 /**< Failed to open a socket. */ -#define MBEDTLS_ERR_NET_CONNECT_FAILED -0x0044 /**< The connection to the given server / port failed. */ -#define MBEDTLS_ERR_NET_BIND_FAILED -0x0046 /**< Binding of the socket failed. */ -#define MBEDTLS_ERR_NET_LISTEN_FAILED -0x0048 /**< Could not listen on the socket. */ -#define MBEDTLS_ERR_NET_ACCEPT_FAILED -0x004A /**< Could not accept the incoming connection. */ -#define MBEDTLS_ERR_NET_RECV_FAILED -0x004C /**< Reading information from the socket failed. */ -#define MBEDTLS_ERR_NET_SEND_FAILED -0x004E /**< Sending information through the socket failed. */ -#define MBEDTLS_ERR_NET_CONN_RESET -0x0050 /**< Connection was reset by peer. */ -#define MBEDTLS_ERR_NET_UNKNOWN_HOST -0x0052 /**< Failed to get an IP address for the given hostname. */ -#define MBEDTLS_ERR_NET_BUFFER_TOO_SMALL -0x0043 /**< Buffer is too small to hold the data. */ -#define MBEDTLS_ERR_NET_INVALID_CONTEXT -0x0045 /**< The context is invalid, eg because it was free()ed. */ -#define MBEDTLS_ERR_NET_POLL_FAILED -0x0047 /**< Polling the net context failed. */ -#define MBEDTLS_ERR_NET_BAD_INPUT_DATA -0x0049 /**< Input invalid. */ - -#define MBEDTLS_NET_LISTEN_BACKLOG 10 /**< The backlog that listen() should use. */ - -#define MBEDTLS_NET_PROTO_TCP 0 /**< The TCP transport protocol */ -#define MBEDTLS_NET_PROTO_UDP 1 /**< The UDP transport protocol */ - -#define MBEDTLS_NET_POLL_READ 1 /**< Used in \c mbedtls_net_poll to check for pending data */ -#define MBEDTLS_NET_POLL_WRITE 2 /**< Used in \c mbedtls_net_poll to check if write possible */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Wrapper type for sockets. - * - * Currently backed by just a file descriptor, but might be more in the future - * (eg two file descriptors for combined IPv4 + IPv6 support, or additional - * structures for hand-made UDP demultiplexing). - */ -typedef struct mbedtls_net_context -{ - int fd; /**< The underlying file descriptor */ -} -mbedtls_net_context; - -/** - * \brief Initialize a context - * Just makes the context ready to be used or freed safely. - * - * \param ctx Context to initialize - */ -void mbedtls_net_init( mbedtls_net_context *ctx ); - -/** - * \brief Initiate a connection with host:port in the given protocol - * - * \param ctx Socket to use - * \param host Host to connect to - * \param port Port to connect to - * \param proto Protocol: MBEDTLS_NET_PROTO_TCP or MBEDTLS_NET_PROTO_UDP - * - * \return 0 if successful, or one of: - * MBEDTLS_ERR_NET_SOCKET_FAILED, - * MBEDTLS_ERR_NET_UNKNOWN_HOST, - * MBEDTLS_ERR_NET_CONNECT_FAILED - * - * \note Sets the socket in connected mode even with UDP. - */ -int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char *port, int proto ); - -/** - * \brief Create a receiving socket on bind_ip:port in the chosen - * protocol. If bind_ip == NULL, all interfaces are bound. - * - * \param ctx Socket to use - * \param bind_ip IP to bind to, can be NULL - * \param port Port number to use - * \param proto Protocol: MBEDTLS_NET_PROTO_TCP or MBEDTLS_NET_PROTO_UDP - * - * \return 0 if successful, or one of: - * MBEDTLS_ERR_NET_SOCKET_FAILED, - * MBEDTLS_ERR_NET_UNKNOWN_HOST, - * MBEDTLS_ERR_NET_BIND_FAILED, - * MBEDTLS_ERR_NET_LISTEN_FAILED - * - * \note Regardless of the protocol, opens the sockets and binds it. - * In addition, make the socket listening if protocol is TCP. - */ -int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char *port, int proto ); - -/** - * \brief Accept a connection from a remote client - * - * \param bind_ctx Relevant socket - * \param client_ctx Will contain the connected client socket - * \param client_ip Will contain the client IP address, can be NULL - * \param buf_size Size of the client_ip buffer - * \param ip_len Will receive the size of the client IP written, - * can be NULL if client_ip is null - * - * \return 0 if successful, or - * MBEDTLS_ERR_NET_SOCKET_FAILED, - * MBEDTLS_ERR_NET_BIND_FAILED, - * MBEDTLS_ERR_NET_ACCEPT_FAILED, or - * MBEDTLS_ERR_NET_BUFFER_TOO_SMALL if buf_size is too small, - * MBEDTLS_ERR_SSL_WANT_READ if bind_fd was set to - * non-blocking and accept() would block. - */ -int mbedtls_net_accept( mbedtls_net_context *bind_ctx, - mbedtls_net_context *client_ctx, - void *client_ip, size_t buf_size, size_t *ip_len ); - -/** - * \brief Check and wait for the context to be ready for read/write - * - * \note The current implementation of this function uses - * select() and returns an error if the file descriptor - * is \c FD_SETSIZE or greater. - * - * \param ctx Socket to check - * \param rw Bitflag composed of MBEDTLS_NET_POLL_READ and - * MBEDTLS_NET_POLL_WRITE specifying the events - * to wait for: - * - If MBEDTLS_NET_POLL_READ is set, the function - * will return as soon as the net context is available - * for reading. - * - If MBEDTLS_NET_POLL_WRITE is set, the function - * will return as soon as the net context is available - * for writing. - * \param timeout Maximal amount of time to wait before returning, - * in milliseconds. If \c timeout is zero, the - * function returns immediately. If \c timeout is - * -1u, the function blocks potentially indefinitely. - * - * \return Bitmask composed of MBEDTLS_NET_POLL_READ/WRITE - * on success or timeout, or a negative return code otherwise. - */ -int mbedtls_net_poll( mbedtls_net_context *ctx, uint32_t rw, uint32_t timeout ); - -/** - * \brief Set the socket blocking - * - * \param ctx Socket to set - * - * \return 0 if successful, or a non-zero error code - */ -int mbedtls_net_set_block( mbedtls_net_context *ctx ); - -/** - * \brief Set the socket non-blocking - * - * \param ctx Socket to set - * - * \return 0 if successful, or a non-zero error code - */ -int mbedtls_net_set_nonblock( mbedtls_net_context *ctx ); - -/** - * \brief Portable usleep helper - * - * \param usec Amount of microseconds to sleep - * - * \note Real amount of time slept will not be less than - * select()'s timeout granularity (typically, 10ms). - */ -void mbedtls_net_usleep( unsigned long usec ); - -/** - * \brief Read at most 'len' characters. If no error occurs, - * the actual amount read is returned. - * - * \param ctx Socket - * \param buf The buffer to write to - * \param len Maximum length of the buffer - * - * \return the number of bytes received, - * or a non-zero error code; with a non-blocking socket, - * MBEDTLS_ERR_SSL_WANT_READ indicates read() would block. - */ -int mbedtls_net_recv( void *ctx, unsigned char *buf, size_t len ); - -/** - * \brief Write at most 'len' characters. If no error occurs, - * the actual amount read is returned. - * - * \param ctx Socket - * \param buf The buffer to read from - * \param len The length of the buffer - * - * \return the number of bytes sent, - * or a non-zero error code; with a non-blocking socket, - * MBEDTLS_ERR_SSL_WANT_WRITE indicates write() would block. - */ -int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len ); - -/** - * \brief Read at most 'len' characters, blocking for at most - * 'timeout' seconds. If no error occurs, the actual amount - * read is returned. - * - * \note The current implementation of this function uses - * select() and returns an error if the file descriptor - * is \c FD_SETSIZE or greater. - * - * \param ctx Socket - * \param buf The buffer to write to - * \param len Maximum length of the buffer - * \param timeout Maximum number of milliseconds to wait for data - * 0 means no timeout (wait forever) - * - * \return The number of bytes received if successful. - * MBEDTLS_ERR_SSL_TIMEOUT if the operation timed out. - * MBEDTLS_ERR_SSL_WANT_READ if interrupted by a signal. - * Another negative error code (MBEDTLS_ERR_NET_xxx) - * for other failures. - * - * \note This function will block (until data becomes available or - * timeout is reached) even if the socket is set to - * non-blocking. Handling timeouts with non-blocking reads - * requires a different strategy. - */ -int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len, - uint32_t timeout ); - -/** - * \brief Closes down the connection and free associated data - * - * \param ctx The context to close - */ -void mbedtls_net_close( mbedtls_net_context *ctx ); - -/** - * \brief Gracefully shutdown the connection and free associated data - * - * \param ctx The context to free - */ -void mbedtls_net_free( mbedtls_net_context *ctx ); - -#ifdef __cplusplus -} -#endif - -#endif /* net_sockets.h */ diff --git a/third_party/mbedtls/nist_kw.c b/third_party/mbedtls/nist_kw.c index 88af68aa0..f8e633c26 100644 --- a/third_party/mbedtls/nist_kw.c +++ b/third_party/mbedtls/nist_kw.c @@ -1,5 +1,16 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/endian.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/nist_kw.h" +#include "third_party/mbedtls/platform.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * Implementation of NIST SP 800-38F key wrapping, supporting KW and KWP modes * only @@ -29,23 +40,6 @@ * the wrapping and unwrapping operation than the definition in NIST SP 800-38F. */ -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_NIST_KW_C) - -#include "third_party/mbedtls/nist_kw.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_AES_C) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */ - #if !defined(MBEDTLS_NIST_KW_ALT) #define KW_SEMIBLOCK_LENGTH 8 @@ -76,26 +70,6 @@ static const unsigned char NIST_KW_ICV1[] = {0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, /*! The 32-bit default integrity check value (ICV) for KWP mode. */ static const unsigned char NIST_KW_ICV2[] = {0xA6, 0x59, 0x59, 0xA6}; -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -do { \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} while( 0 ) -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -do { \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} while( 0 ) -#endif - /* * Initialize context */ @@ -745,5 +719,3 @@ end: } #endif /* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */ - -#endif /* MBEDTLS_NIST_KW_C */ diff --git a/third_party/mbedtls/nist_kw.h b/third_party/mbedtls/nist_kw.h index dab6351be..ab8d9cc29 100644 --- a/third_party/mbedtls/nist_kw.h +++ b/third_party/mbedtls/nist_kw.h @@ -1,49 +1,8 @@ -/* clang-format off */ - -/** - * \file nist_kw.h - * - * \brief This file provides an API for key wrapping (KW) and key wrapping with - * padding (KWP) as defined in NIST SP 800-38F. - * https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38F.pdf - * - * Key wrapping specifies a deterministic authenticated-encryption mode - * of operation, according to NIST SP 800-38F: Recommendation for - * Block Cipher Modes of Operation: Methods for Key Wrapping. Its - * purpose is to protect cryptographic keys. - * - * Its equivalent is RFC 3394 for KW, and RFC 5649 for KWP. - * https://tools.ietf.org/html/rfc3394 - * https://tools.ietf.org/html/rfc5649 - * - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - #ifndef MBEDTLS_NIST_KW_H #define MBEDTLS_NIST_KW_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/cipher.h" +#include "third_party/mbedtls/config.h" +/* clang-format off */ #ifdef __cplusplus extern "C" { diff --git a/third_party/mbedtls/oid.c b/third_party/mbedtls/oid.c index 61bc3a922..c2dcd96cc 100644 --- a/third_party/mbedtls/oid.c +++ b/third_party/mbedtls/oid.c @@ -1,5 +1,17 @@ -/* clang-format off */ +#include "libc/fmt/fmt.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/rsa.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /** * \file oid.c * @@ -21,21 +33,8 @@ * limitations under the License. */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_OID_C) -#include "third_party/mbedtls/oid.h" -#include "third_party/mbedtls/rsa.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_snprintf snprintf -#endif - /* * Macro to automatically add the size of #define'd OIDs */ @@ -622,12 +621,6 @@ static const oid_md_alg_t oid_md_alg[] = MBEDTLS_MD_SHA512, }, #endif /* MBEDTLS_SHA512_C */ -#if defined(MBEDTLS_RIPEMD160_C) - { - { ADD_LEN( MBEDTLS_OID_DIGEST_ALG_RIPEMD160 ), "id-ripemd160", "RIPEMD-160" }, - MBEDTLS_MD_RIPEMD160, - }, -#endif /* MBEDTLS_RIPEMD160_C */ { { NULL, 0, NULL, NULL }, MBEDTLS_MD_NONE, diff --git a/third_party/mbedtls/oid.h b/third_party/mbedtls/oid.h index 439eb4478..3bed41967 100644 --- a/third_party/mbedtls/oid.h +++ b/third_party/mbedtls/oid.h @@ -1,46 +1,11 @@ -/* clang-format off */ - -/** - * \file oid.h - * - * \brief Object Identifier (OID) database - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_OID_H #define MBEDTLS_OID_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/asn1.h" -#include "third_party/mbedtls/pk.h" - - -#if defined(MBEDTLS_CIPHER_C) #include "third_party/mbedtls/cipher.h" -#endif - -#if defined(MBEDTLS_MD_C) +#include "third_party/mbedtls/config.h" #include "third_party/mbedtls/md.h" -#endif +#include "third_party/mbedtls/pk.h" +/* clang-format off */ #define MBEDTLS_ERR_OID_NOT_FOUND -0x002E /**< OID is not found. */ #define MBEDTLS_ERR_OID_BUF_TOO_SMALL -0x000B /**< output buffer is too small */ @@ -261,8 +226,6 @@ #define MBEDTLS_OID_DIGEST_ALG_SHA512 MBEDTLS_OID_NIST_ALG "\x02\x03" /**< id-mbedtls_sha512 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistalgorithm(4) hashalgs(2) 3 } */ -#define MBEDTLS_OID_DIGEST_ALG_RIPEMD160 MBEDTLS_OID_TELETRUST "\x03\x02\x01" /**< id-ripemd160 OBJECT IDENTIFIER :: { iso(1) identified-organization(3) teletrust(36) algorithm(3) hashAlgorithm(2) ripemd160(1) } */ - #define MBEDTLS_OID_HMAC_SHA1 MBEDTLS_OID_RSA_COMPANY "\x02\x07" /**< id-hmacWithSHA1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 7 } */ #define MBEDTLS_OID_HMAC_SHA224 MBEDTLS_OID_RSA_COMPANY "\x02\x08" /**< id-hmacWithSHA224 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 8 } */ @@ -502,7 +465,6 @@ int mbedtls_oid_get_pk_alg( const mbedtls_asn1_buf *oid, mbedtls_pk_type_t *pk_a int mbedtls_oid_get_oid_by_pk_alg( mbedtls_pk_type_t pk_alg, const char **oid, size_t *olen ); -#if defined(MBEDTLS_ECP_C) /** * \brief Translate NamedCurve OID into an EC group identifier * @@ -523,10 +485,8 @@ int mbedtls_oid_get_ec_grp( const mbedtls_asn1_buf *oid, mbedtls_ecp_group_id *g * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND */ int mbedtls_oid_get_oid_by_ec_grp( mbedtls_ecp_group_id grp_id, - const char **oid, size_t *olen ); -#endif /* MBEDTLS_ECP_C */ + const char **oid, size_t *olen ); -#if defined(MBEDTLS_MD_C) /** * \brief Translate SignatureAlgorithm OID into md_type and pk_type * @@ -560,7 +520,7 @@ int mbedtls_oid_get_sig_alg_desc( const mbedtls_asn1_buf *oid, const char **desc * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND */ int mbedtls_oid_get_oid_by_sig_alg( mbedtls_pk_type_t pk_alg, mbedtls_md_type_t md_alg, - const char **oid, size_t *olen ); + const char **oid, size_t *olen ); /** * \brief Translate hash algorithm OID into md_type @@ -581,7 +541,6 @@ int mbedtls_oid_get_md_alg( const mbedtls_asn1_buf *oid, mbedtls_md_type_t *md_a * \return 0 if successful, or MBEDTLS_ERR_OID_NOT_FOUND */ int mbedtls_oid_get_md_hmac( const mbedtls_asn1_buf *oid, mbedtls_md_type_t *md_hmac ); -#endif /* MBEDTLS_MD_C */ /** * \brief Translate Extended Key Usage OID into description diff --git a/third_party/mbedtls/padlock.c b/third_party/mbedtls/padlock.c deleted file mode 100644 index f389eb907..000000000 --- a/third_party/mbedtls/padlock.c +++ /dev/null @@ -1,165 +0,0 @@ -/* clang-format off */ - -/* - * VIA PadLock support functions - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * This implementation is based on the VIA PadLock Programming Guide: - * - * http://www.via.com.tw/en/downloads/whitepapers/initiatives/padlock/ - * programming_guide.pdf - */ - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_PADLOCK_C) - -#include "third_party/mbedtls/padlock.h" - - -#ifndef asm -#define asm __asm -#endif - -#if defined(MBEDTLS_HAVE_X86) - -/* - * PadLock detection routine - */ -int mbedtls_padlock_has_support( int feature ) -{ - static int flags = -1; - int ebx = 0, edx = 0; - - if( flags == -1 ) - { - asm( "movl %%ebx, %0 \n\t" - "movl $0xC0000000, %%eax \n\t" - "cpuid \n\t" - "cmpl $0xC0000001, %%eax \n\t" - "movl $0, %%edx \n\t" - "jb 1f \n\t" - "movl $0xC0000001, %%eax \n\t" - "cpuid \n\t" - "1: \n\t" - "movl %%edx, %1 \n\t" - "movl %2, %%ebx \n\t" - : "=m" (ebx), "=m" (edx) - : "m" (ebx) - : "eax", "ecx", "edx" ); - - flags = edx; - } - - return( flags & feature ); -} - -/* - * PadLock AES-ECB block en(de)cryption - */ -int mbedtls_padlock_xcryptecb( mbedtls_aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) -{ - int ebx = 0; - uint32_t *rk; - uint32_t *blk; - uint32_t *ctrl; - unsigned char buf[256]; - - rk = ctx->rk; - blk = MBEDTLS_PADLOCK_ALIGN16( buf ); - memcpy( blk, input, 16 ); - - ctrl = blk + 4; - *ctrl = 0x80 | ctx->nr | ( ( ctx->nr + ( mode^1 ) - 10 ) << 9 ); - - asm( "pushfl \n\t" - "popfl \n\t" - "movl %%ebx, %0 \n\t" - "movl $1, %%ecx \n\t" - "movl %2, %%edx \n\t" - "movl %3, %%ebx \n\t" - "movl %4, %%esi \n\t" - "movl %4, %%edi \n\t" - ".byte 0xf3,0x0f,0xa7,0xc8 \n\t" - "movl %1, %%ebx \n\t" - : "=m" (ebx) - : "m" (ebx), "m" (ctrl), "m" (rk), "m" (blk) - : "memory", "ecx", "edx", "esi", "edi" ); - - memcpy( output, blk, 16 ); - - return( 0 ); -} - -/* - * PadLock AES-CBC buffer en(de)cryption - */ -int mbedtls_padlock_xcryptcbc( mbedtls_aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) -{ - int ebx = 0; - size_t count; - uint32_t *rk; - uint32_t *iw; - uint32_t *ctrl; - unsigned char buf[256]; - - if( ( (long) input & 15 ) != 0 || - ( (long) output & 15 ) != 0 ) - return( MBEDTLS_ERR_PADLOCK_DATA_MISALIGNED ); - - rk = ctx->rk; - iw = MBEDTLS_PADLOCK_ALIGN16( buf ); - memcpy( iw, iv, 16 ); - - ctrl = iw + 4; - *ctrl = 0x80 | ctx->nr | ( ( ctx->nr + ( mode ^ 1 ) - 10 ) << 9 ); - - count = ( length + 15 ) >> 4; - - asm( "pushfl \n\t" - "popfl \n\t" - "movl %%ebx, %0 \n\t" - "movl %2, %%ecx \n\t" - "movl %3, %%edx \n\t" - "movl %4, %%ebx \n\t" - "movl %5, %%esi \n\t" - "movl %6, %%edi \n\t" - "movl %7, %%eax \n\t" - ".byte 0xf3,0x0f,0xa7,0xd0 \n\t" - "movl %1, %%ebx \n\t" - : "=m" (ebx) - : "m" (ebx), "m" (count), "m" (ctrl), - "m" (rk), "m" (input), "m" (output), "m" (iw) - : "memory", "eax", "ecx", "edx", "esi", "edi" ); - - memcpy( iv, iw, 16 ); - - return( 0 ); -} - -#endif /* MBEDTLS_HAVE_X86 */ - -#endif /* MBEDTLS_PADLOCK_C */ diff --git a/third_party/mbedtls/padlock.h b/third_party/mbedtls/padlock.h deleted file mode 100644 index 238a2365a..000000000 --- a/third_party/mbedtls/padlock.h +++ /dev/null @@ -1,125 +0,0 @@ -/* clang-format off */ - -/** - * \file padlock.h - * - * \brief VIA PadLock ACE for HW encryption/decryption supported by some - * processors - * - * \warning These functions are only for internal use by other library - * functions; you must not call them directly. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_PADLOCK_H -#define MBEDTLS_PADLOCK_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "third_party/mbedtls/aes.h" - -#define MBEDTLS_ERR_PADLOCK_DATA_MISALIGNED -0x0030 /**< Input data should be aligned. */ - -#if defined(__has_feature) -#if __has_feature(address_sanitizer) -#define MBEDTLS_HAVE_ASAN -#endif -#endif - -/* Some versions of ASan result in errors about not enough registers */ -#if defined(MBEDTLS_HAVE_ASM) && defined(__GNUC__) && defined(__i386__) && \ - !defined(MBEDTLS_HAVE_ASAN) - -#ifndef MBEDTLS_HAVE_X86 -#define MBEDTLS_HAVE_X86 -#endif - - -#define MBEDTLS_PADLOCK_RNG 0x000C -#define MBEDTLS_PADLOCK_ACE 0x00C0 -#define MBEDTLS_PADLOCK_PHE 0x0C00 -#define MBEDTLS_PADLOCK_PMM 0x3000 - -#define MBEDTLS_PADLOCK_ALIGN16(x) (uint32_t *) (16 + ((int32_t) (x) & ~15)) - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief Internal PadLock detection routine - * - * \note This function is only for internal use by other library - * functions; you must not call it directly. - * - * \param feature The feature to detect - * - * \return 1 if CPU has support for the feature, 0 otherwise - */ -int mbedtls_padlock_has_support( int feature ); - -/** - * \brief Internal PadLock AES-ECB block en(de)cryption - * - * \note This function is only for internal use by other library - * functions; you must not call it directly. - * - * \param ctx AES context - * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT - * \param input 16-byte input block - * \param output 16-byte output block - * - * \return 0 if success, 1 if operation failed - */ -int mbedtls_padlock_xcryptecb( mbedtls_aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ); - -/** - * \brief Internal PadLock AES-CBC buffer en(de)cryption - * - * \note This function is only for internal use by other library - * functions; you must not call it directly. - * - * \param ctx AES context - * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT - * \param length length of the input data - * \param iv initialization vector (updated after use) - * \param input buffer holding the input data - * \param output buffer holding the output data - * - * \return 0 if success, 1 if operation failed - */ -int mbedtls_padlock_xcryptcbc( mbedtls_aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ); - -#ifdef __cplusplus -} -#endif - -#endif /* HAVE_X86 */ - -#endif /* padlock.h */ diff --git a/libc/rand/rand32.c b/third_party/mbedtls/param.c similarity index 72% rename from libc/rand/rand32.c rename to third_party/mbedtls/param.c index 893e0dc61..64e03d363 100644 --- a/libc/rand/rand32.c +++ b/third_party/mbedtls/param.c @@ -1,7 +1,7 @@ /*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ -│vi: set net ft=c ts=8 sts=2 sw=2 fenc=utf-8 :vi│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ ╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ │ │ │ Permission to use, copy, modify, and/or distribute this software for │ │ any purpose with or without fee is hereby granted, provided that the │ @@ -16,27 +16,22 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/dce.h" -#include "libc/nexgen32e/x86feature.h" -#include "libc/rand/rand.h" -#include "libc/rand/xorshift.h" +#include "libc/calls/calls.h" +#include "libc/fmt/itoa.h" +#include "libc/mem/mem.h" +#include "libc/runtime/runtime.h" +#include "third_party/mbedtls/platform.h" -hidden extern uint32_t g_rando32; - -/** - * This function is an independent 32-bit clone of rand64(). - */ -nodebuginfo uint32_t(rand32)(void) { - uint32_t res; - if (X86_HAVE(RDRND)) { - res = rdrand(); - } else { - if (IsWindows()) { - res = kMarsagliaXorshift32Seed ^ winrandish(); - } else { - devrand(&res, sizeof(res)); - } - res ^= MarsagliaXorshift32(&g_rando32); +void mbedtls_param_failed(const char *msg, const char *file, int line) { + char *p, *q; + if ((p = q = malloc(128 + strlen(msg) + strlen(file)))) { + p = stpcpy(p, file), *p++ = ':'; + p += int64toarray_radix10(line, p); + p = stpcpy(p, ": error: "); + p = stpcpy(p, msg); + p = stpcpy(p, "\r\n"); + write(2, q, p - q); + free(q); } - return res; + exit(1); } diff --git a/third_party/mbedtls/pem.c b/third_party/mbedtls/pem.c index 1db11d5df..9daf39c33 100644 --- a/third_party/mbedtls/pem.c +++ b/third_party/mbedtls/pem.c @@ -1,5 +1,21 @@ +#include "libc/mem/mem.h" +#include "third_party/mbedtls/aes.h" +#include "third_party/mbedtls/base64.h" +#include "third_party/mbedtls/cipher.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/des.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/md5.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/platform.h" /* clang-format off */ +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + /* * Privacy Enhanced Mail (PEM) decoding * @@ -18,28 +34,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_PEM_PARSE_C) || defined(MBEDTLS_PEM_WRITE_C) -#include "third_party/mbedtls/pem.h" -#include "third_party/mbedtls/base64.h" -#include "third_party/mbedtls/des.h" -#include "third_party/mbedtls/aes.h" -#include "third_party/mbedtls/md5.h" -#include "third_party/mbedtls/cipher.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - #if defined(MBEDTLS_PEM_PARSE_C) void mbedtls_pem_init( mbedtls_pem_context *ctx ) { diff --git a/third_party/mbedtls/pem.h b/third_party/mbedtls/pem.h index e17349909..cbbba0244 100644 --- a/third_party/mbedtls/pem.h +++ b/third_party/mbedtls/pem.h @@ -1,35 +1,7 @@ -/* clang-format off */ - -/** - * \file pem.h - * - * \brief Privacy Enhanced Mail (PEM) decoding - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_PEM_H #define MBEDTLS_PEM_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - +/* clang-format off */ /** * \name PEM Error codes diff --git a/third_party/mbedtls/pk.c b/third_party/mbedtls/pk.c index 417d86395..572c90a63 100644 --- a/third_party/mbedtls/pk.c +++ b/third_party/mbedtls/pk.c @@ -1,5 +1,19 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/ecdsa.h" +#include "third_party/mbedtls/ecp.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/pk.h" +#include "third_party/mbedtls/pk_internal.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/rsa.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * Public Key abstraction layer * @@ -19,38 +33,18 @@ * limitations under the License. */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_PK_C) -#include "third_party/mbedtls/sheesh.h" -#include "third_party/mbedtls/pk.h" -#include "third_party/mbedtls/pk_internal.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - -#if defined(MBEDTLS_RSA_C) -#include "third_party/mbedtls/rsa.h" -#endif -#if defined(MBEDTLS_ECP_C) -#include "third_party/mbedtls/ecp.h" -#endif -#if defined(MBEDTLS_ECDSA_C) -#include "third_party/mbedtls/ecdsa.h" -#endif - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -#include "third_party/mbedtls/psa_util.h" -#endif - -/* Parameter validation macros based on platform_util.h */ #define PK_VALIDATE_RET( cond ) \ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_PK_BAD_INPUT_DATA ) #define PK_VALIDATE( cond ) \ MBEDTLS_INTERNAL_VALIDATE( cond ) -/* - * Initialise a mbedtls_pk_context +/** + * \brief Initialize a #mbedtls_pk_context (as NONE). + * + * \param ctx The context to initialize. + * This must not be \c NULL. */ void mbedtls_pk_init( mbedtls_pk_context *ctx ) { @@ -60,23 +54,32 @@ void mbedtls_pk_init( mbedtls_pk_context *ctx ) ctx->pk_ctx = NULL; } -/* - * Free (the components of) a mbedtls_pk_context +/** + * \brief Free the components of a #mbedtls_pk_context. + * + * \param ctx The context to clear. It must have been initialized. + * If this is \c NULL, this function does nothing. + * + * \note For contexts that have been set up with + * mbedtls_pk_setup_opaque(), this does not free the underlying + * PSA key and you still need to call psa_destroy_key() + * independently if you want to destroy that key. */ void mbedtls_pk_free( mbedtls_pk_context *ctx ) { if( ctx == NULL ) return; - if ( ctx->pk_info != NULL ) ctx->pk_info->ctx_free_func( ctx->pk_ctx ); - mbedtls_platform_zeroize( ctx, sizeof( mbedtls_pk_context ) ); } #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) -/* - * Initialize a restart context +/** + * \brief Initialize a restart context + * + * \param ctx The context to initialize. + * This must not be \c NULL. */ void mbedtls_pk_restart_init( mbedtls_pk_restart_ctx *ctx ) { @@ -85,8 +88,11 @@ void mbedtls_pk_restart_init( mbedtls_pk_restart_ctx *ctx ) ctx->rs_ctx = NULL; } -/* - * Free the components of a restart context +/** + * \brief Free the components of a restart context + * + * \param ctx The context to clear. It must have been initialized. + * If this is \c NULL, this function does nothing. */ void mbedtls_pk_restart_free( mbedtls_pk_restart_ctx *ctx ) { @@ -95,16 +101,18 @@ void mbedtls_pk_restart_free( mbedtls_pk_restart_ctx *ctx ) { return; } - ctx->pk_info->rs_free_func( ctx->rs_ctx ); - ctx->pk_info = NULL; ctx->rs_ctx = NULL; } #endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */ -/* - * Get pk_info structure from type +/** + * \brief Return information associated with the given PK type + * + * \param pk_type PK type to search for. + * + * \return The PK info associated with the type or NULL if not found. */ const mbedtls_pk_info_t * mbedtls_pk_info_from_type( mbedtls_pk_type_t pk_type ) { @@ -129,8 +137,20 @@ const mbedtls_pk_info_t * mbedtls_pk_info_from_type( mbedtls_pk_type_t pk_type ) } } -/* - * Initialise context +/** + * \brief Initialize a PK context with the information given + * and allocates the type-specific PK subcontext. + * + * \param ctx Context to initialize. It must not have been set + * up yet (type #MBEDTLS_PK_NONE). + * \param info Information to use + * + * \return 0 on success, + * MBEDTLS_ERR_PK_BAD_INPUT_DATA on invalid input, + * MBEDTLS_ERR_PK_ALLOC_FAILED on allocation failure. + * + * \note For contexts holding an RSA-alt key, use + * \c mbedtls_pk_setup_rsa_alt() instead. */ int mbedtls_pk_setup( mbedtls_pk_context *ctx, const mbedtls_pk_info_t *info ) { @@ -146,50 +166,25 @@ int mbedtls_pk_setup( mbedtls_pk_context *ctx, const mbedtls_pk_info_t *info ) return( 0 ); } -#if defined(MBEDTLS_USE_PSA_CRYPTO) -/* - * Initialise a PSA-wrapping context - */ -int mbedtls_pk_setup_opaque( mbedtls_pk_context *ctx, - const psa_key_id_t key ) -{ - const mbedtls_pk_info_t * const info = &mbedtls_pk_opaque_info; - psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; - psa_key_id_t *pk_ctx; - psa_key_type_t type; - - if( ctx == NULL || ctx->pk_info != NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - - if( PSA_SUCCESS != psa_get_key_attributes( key, &attributes ) ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - type = psa_get_key_type( &attributes ); - psa_reset_key_attributes( &attributes ); - - /* Current implementation of can_do() relies on this. */ - if( ! PSA_KEY_TYPE_IS_ECC_KEY_PAIR( type ) ) - return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE) ; - - if( ( ctx->pk_ctx = info->ctx_alloc_func() ) == NULL ) - return( MBEDTLS_ERR_PK_ALLOC_FAILED ); - - ctx->pk_info = info; - - pk_ctx = (psa_key_id_t *) ctx->pk_ctx; - *pk_ctx = key; - - return( 0 ); -} -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - -#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) -/* - * Initialize an RSA-alt context +/** + * \brief Initialize an RSA-alt context + * + * \param ctx Context to initialize. It must not have been set + * up yet (type #MBEDTLS_PK_NONE). + * \param key RSA key pointer + * \param decrypt_func Decryption function + * \param sign_func Signing function + * \param key_len_func Function returning key length in bytes + * + * \return 0 on success, or MBEDTLS_ERR_PK_BAD_INPUT_DATA if the + * context wasn't already initialized as RSA_ALT. + * + * \note This function replaces \c mbedtls_pk_setup() for RSA-alt. */ int mbedtls_pk_setup_rsa_alt( mbedtls_pk_context *ctx, void * key, - mbedtls_pk_rsa_alt_decrypt_func decrypt_func, - mbedtls_pk_rsa_alt_sign_func sign_func, - mbedtls_pk_rsa_alt_key_len_func key_len_func ) + mbedtls_pk_rsa_alt_decrypt_func decrypt_func, + mbedtls_pk_rsa_alt_sign_func sign_func, + mbedtls_pk_rsa_alt_key_len_func key_len_func ) { mbedtls_rsa_alt_context *rsa_alt; const mbedtls_pk_info_t *info = &mbedtls_rsa_alt_info; @@ -212,10 +207,18 @@ int mbedtls_pk_setup_rsa_alt( mbedtls_pk_context *ctx, void * key, return( 0 ); } -#endif /* MBEDTLS_PK_RSA_ALT_SUPPORT */ -/* - * Tell if a PK can do the operations of the given type +/** + * \brief Tell if a context can do the operation given by type + * + * \param ctx The context to query. It must have been initialized. + * \param type The desired type. + * + * \return 1 if the context can do operations on the given type. + * \return 0 if the context cannot do the operations on the given + * type. This is always the case for a context that has + * been initialized but not set up, or that has been + * cleared with mbedtls_pk_free(). */ int mbedtls_pk_can_do( const mbedtls_pk_context *ctx, mbedtls_pk_type_t type ) { @@ -224,7 +227,6 @@ int mbedtls_pk_can_do( const mbedtls_pk_context *ctx, mbedtls_pk_type_t type ) * pointer. */ if( ctx == NULL || ctx->pk_info == NULL ) return( 0 ); - return( ctx->pk_info->can_do( type ) ); } @@ -234,13 +236,10 @@ int mbedtls_pk_can_do( const mbedtls_pk_context *ctx, mbedtls_pk_type_t type ) static inline int pk_hashlen_helper( mbedtls_md_type_t md_alg, size_t *hash_len ) { const mbedtls_md_info_t *md_info; - if( *hash_len != 0 ) return( 0 ); - if( ( md_info = mbedtls_md_info_from_type( md_alg ) ) == NULL ) return( -1 ); - *hash_len = mbedtls_md_get_size( md_info ); return( 0 ); } @@ -269,14 +268,31 @@ static int pk_restart_setup( mbedtls_pk_restart_ctx *ctx, } #endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */ -/* - * Verify a signature (restartable) +/** + * \brief Restartable version of \c mbedtls_pk_verify() + * + * \note Performs the same job as \c mbedtls_pk_verify(), but can + * return early and restart according to the limit set with + * \c mbedtls_ecp_set_max_ops() to reduce blocking for ECC + * operations. For RSA, same as \c mbedtls_pk_verify(). + * + * \param ctx The PK context to use. It must have been set up. + * \param md_alg Hash algorithm used (see notes) + * \param hash Hash of the message to sign + * \param hash_len Hash length or 0 (see notes) + * \param sig Signature to verify + * \param sig_len Signature length + * \param rs_ctx Restart context (NULL to disable restart) + * + * \return See \c mbedtls_pk_verify(), or + * \return #MBEDTLS_ERR_ECP_IN_PROGRESS if maximum number of + * operations was reached: see \c mbedtls_ecp_set_max_ops(). */ int mbedtls_pk_verify_restartable( mbedtls_pk_context *ctx, - mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len, - mbedtls_pk_restart_ctx *rs_ctx ) + mbedtls_md_type_t md_alg, + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len, + mbedtls_pk_restart_ctx *rs_ctx ) { PK_VALIDATE_RET( ctx != NULL ); PK_VALIDATE_RET( ( md_alg == MBEDTLS_MD_NONE && hash_len == 0 ) || @@ -317,55 +333,94 @@ int mbedtls_pk_verify_restartable( mbedtls_pk_context *ctx, sig, sig_len ) ); } -/* - * Verify a signature +/** + * \brief Verify signature (including padding if relevant). + * + * \param ctx The PK context to use. It must have been set up. + * \param md_alg Hash algorithm used (see notes) + * \param hash Hash of the message to sign + * \param hash_len Hash length or 0 (see notes) + * \param sig Signature to verify + * \param sig_len Signature length + * + * \return 0 on success (signature is valid), + * #MBEDTLS_ERR_PK_SIG_LEN_MISMATCH if there is a valid + * signature in sig but its length is less than \p siglen, + * or a specific error code. + * + * \note For RSA keys, the default padding type is PKCS#1 v1.5. + * Use \c mbedtls_pk_verify_ext( MBEDTLS_PK_RSASSA_PSS, ... ) + * to verify RSASSA_PSS signatures. + * + * \note If hash_len is 0, then the length associated with md_alg + * is used instead, or an error returned if it is invalid. + * + * \note md_alg may be MBEDTLS_MD_NONE, only if hash_len != 0 */ int mbedtls_pk_verify( mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ) { return( mbedtls_pk_verify_restartable( ctx, md_alg, hash, hash_len, sig, sig_len, NULL ) ); } -/* - * Verify a signature with options +/** + * \brief Verify signature, with options. + * (Includes verification of the padding depending on type.) + * + * \param type Signature type (inc. possible padding type) to verify + * \param options Pointer to type-specific options, or NULL + * \param ctx The PK context to use. It must have been set up. + * \param md_alg Hash algorithm used (see notes) + * \param hash Hash of the message to sign + * \param hash_len Hash length or 0 (see notes) + * \param sig Signature to verify + * \param sig_len Signature length + * + * \return 0 on success (signature is valid), + * #MBEDTLS_ERR_PK_TYPE_MISMATCH if the PK context can't be + * used for this type of signatures, + * #MBEDTLS_ERR_PK_SIG_LEN_MISMATCH if there is a valid + * signature in sig but its length is less than \p siglen, + * or a specific error code. + * + * \note If hash_len is 0, then the length associated with md_alg + * is used instead, or an error returned if it is invalid. + * + * \note md_alg may be MBEDTLS_MD_NONE, only if hash_len != 0 + * + * \note If type is MBEDTLS_PK_RSASSA_PSS, then options must point + * to a mbedtls_pk_rsassa_pss_options structure, + * otherwise it must be NULL. */ int mbedtls_pk_verify_ext( mbedtls_pk_type_t type, const void *options, - mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) + mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ) { - PK_VALIDATE_RET( ctx != NULL ); - PK_VALIDATE_RET( ( md_alg == MBEDTLS_MD_NONE && hash_len == 0 ) || - hash != NULL ); - PK_VALIDATE_RET( sig != NULL ); - - if( ctx->pk_info == NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - - if( ! mbedtls_pk_can_do( ctx, type ) ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); - - if( type == MBEDTLS_PK_RSASSA_PSS ) - { + PK_VALIDATE_RET( ctx != NULL ); + PK_VALIDATE_RET( ( md_alg == MBEDTLS_MD_NONE && hash_len == 0 ) || + hash != NULL ); + PK_VALIDATE_RET( sig != NULL ); + if( ctx->pk_info == NULL ) + return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if( ! mbedtls_pk_can_do( ctx, type ) ) + return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + if( type == MBEDTLS_PK_RSASSA_PSS ) + { #if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_PKCS1_V21) int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; const mbedtls_pk_rsassa_pss_options *pss_opts; - #if SIZE_MAX > UINT_MAX if( md_alg == MBEDTLS_MD_NONE && UINT_MAX < hash_len ) return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); #endif /* SIZE_MAX > UINT_MAX */ - if( options == NULL ) return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - pss_opts = (const mbedtls_pk_rsassa_pss_options *) options; - if( sig_len < mbedtls_pk_get_len( ctx ) ) return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - ret = mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_pk_rsa( *ctx ), NULL, NULL, MBEDTLS_RSA_PUBLIC, md_alg, (unsigned int) hash_len, hash, @@ -374,25 +429,46 @@ int mbedtls_pk_verify_ext( mbedtls_pk_type_t type, const void *options, sig ); if( ret != 0 ) return( ret ); - if( sig_len > mbedtls_pk_get_len( ctx ) ) return( MBEDTLS_ERR_PK_SIG_LEN_MISMATCH ); - return( 0 ); #else return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); #endif /* MBEDTLS_RSA_C && MBEDTLS_PKCS1_V21 */ } - /* General case: no options */ if( options != NULL ) return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - return( mbedtls_pk_verify( ctx, md_alg, hash, hash_len, sig, sig_len ) ); } -/* - * Make a signature (restartable) +/** + * \brief Restartable version of \c mbedtls_pk_sign() + * + * \note Performs the same job as \c mbedtls_pk_sign(), but can + * return early and restart according to the limit set with + * \c mbedtls_ecp_set_max_ops() to reduce blocking for ECC + * operations. For RSA, same as \c mbedtls_pk_sign(). + * + * \param ctx The PK context to use. It must have been set up + * with a private key. + * \param md_alg Hash algorithm used (see notes for mbedtls_pk_sign()) + * \param hash Hash of the message to sign + * \param hash_len Hash length or 0 (see notes for mbedtls_pk_sign()) + * \param sig Place to write the signature. + * It must have enough room for the signature. + * #MBEDTLS_PK_SIGNATURE_MAX_SIZE is always enough. + * You may use a smaller buffer if it is large enough + * given the key type. + * \param sig_len On successful return, + * the number of bytes written to \p sig. + * \param f_rng RNG function + * \param p_rng RNG parameter + * \param rs_ctx Restart context (NULL to disable restart) + * + * \return See \c mbedtls_pk_sign(). + * \return #MBEDTLS_ERR_ECP_IN_PROGRESS if maximum number of + * operations was reached: see \c mbedtls_ecp_set_max_ops(). */ int mbedtls_pk_sign_restartable( mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, @@ -440,25 +516,66 @@ int mbedtls_pk_sign_restartable( mbedtls_pk_context *ctx, sig, sig_len, f_rng, p_rng ) ); } -/* - * Make a signature +/** + * \brief Make signature, including padding if relevant. + * + * \param ctx The PK context to use. It must have been set up + * with a private key. + * \param md_alg Hash algorithm used (see notes) + * \param hash Hash of the message to sign + * \param hash_len Hash length or 0 (see notes) + * \param sig Place to write the signature. + * It must have enough room for the signature. + * #MBEDTLS_PK_SIGNATURE_MAX_SIZE is always enough. + * You may use a smaller buffer if it is large enough + * given the key type. + * \param sig_len On successful return, + * the number of bytes written to \p sig. + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \return 0 on success, or a specific error code. + * + * \note For RSA keys, the default padding type is PKCS#1 v1.5. + * There is no interface in the PK module to make RSASSA-PSS + * signatures yet. + * + * \note If hash_len is 0, then the length associated with md_alg + * is used instead, or an error returned if it is invalid. + * + * \note For RSA, md_alg may be MBEDTLS_MD_NONE if hash_len != 0. + * For ECDSA, md_alg may never be MBEDTLS_MD_NONE. */ int mbedtls_pk_sign( mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *hash, size_t hash_len, + unsigned char *sig, size_t *sig_len, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { return( mbedtls_pk_sign_restartable( ctx, md_alg, hash, hash_len, sig, sig_len, f_rng, p_rng, NULL ) ); } -/* - * Decrypt message +/** + * \brief Decrypt message (including padding if relevant). + * + * \param ctx The PK context to use. It must have been set up + * with a private key. + * \param input Input to decrypt + * \param ilen Input size + * \param output Decrypted output + * \param olen Decrypted message length + * \param osize Size of the output buffer + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \note For RSA keys, the default padding type is PKCS#1 v1.5. + * + * \return 0 on success, or a specific error code. */ int mbedtls_pk_decrypt( mbedtls_pk_context *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { PK_VALIDATE_RET( ctx != NULL ); PK_VALIDATE_RET( input != NULL || ilen == 0 ); @@ -475,13 +592,26 @@ int mbedtls_pk_decrypt( mbedtls_pk_context *ctx, output, olen, osize, f_rng, p_rng ) ); } -/* - * Encrypt message +/** + * \brief Encrypt message (including padding if relevant). + * + * \param ctx The PK context to use. It must have been set up. + * \param input Message to encrypt + * \param ilen Message size + * \param output Encrypted output + * \param olen Encrypted output length + * \param osize Size of the output buffer + * \param f_rng RNG function + * \param p_rng RNG parameter + * + * \note For RSA keys, the default padding type is PKCS#1 v1.5. + * + * \return 0 on success, or a specific error code. */ int mbedtls_pk_encrypt( mbedtls_pk_context *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { PK_VALIDATE_RET( ctx != NULL ); PK_VALIDATE_RET( input != NULL || ilen == 0 ); @@ -498,8 +628,18 @@ int mbedtls_pk_encrypt( mbedtls_pk_context *ctx, output, olen, osize, f_rng, p_rng ) ); } -/* - * Check public-private key pair +/** + * \brief Check if a public-private pair of keys matches. + * + * \param pub Context holding a public key. + * \param prv Context holding a private (and public) key. + * + * \return \c 0 on success (keys were checked and match each other). + + * \return #MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE if the keys could not + * be checked - in that case they may or may not match. + * \return #MBEDTLS_ERR_PK_BAD_INPUT_DATA if a context is invalid. + * \return Another non-zero value if the keys do not match. */ int mbedtls_pk_check_pair( const mbedtls_pk_context *pub, const mbedtls_pk_context *prv ) { @@ -529,8 +669,12 @@ int mbedtls_pk_check_pair( const mbedtls_pk_context *pub, const mbedtls_pk_conte return( prv->pk_info->check_pair_func( pub->pk_ctx, prv->pk_ctx ) ); } -/* - * Get key size in bits +/** + * \brief Get the size in bits of the underlying key + * + * \param ctx The context to query. It must have been initialized. + * + * \return Key size in bits, or 0 on error */ size_t mbedtls_pk_get_bitlen( const mbedtls_pk_context *ctx ) { @@ -538,12 +682,16 @@ size_t mbedtls_pk_get_bitlen( const mbedtls_pk_context *ctx ) * isn't set up yet, and return a fake value that should be safe. */ if( ctx == NULL || ctx->pk_info == NULL ) return( 0 ); - return( ctx->pk_info->get_bitlen( ctx->pk_ctx ) ); } -/* - * Export debug information +/** + * \brief Export debug information + * + * \param ctx The PK context to use. It must have been initialized. + * \param items Place to write debug items + * + * \return 0 on success or MBEDTLS_ERR_PK_BAD_INPUT_DATA */ int mbedtls_pk_debug( const mbedtls_pk_context *ctx, mbedtls_pk_debug_item *items ) { @@ -558,8 +706,12 @@ int mbedtls_pk_debug( const mbedtls_pk_context *ctx, mbedtls_pk_debug_item *item return( 0 ); } -/* - * Access the PK type name +/** + * \brief Access the type name + * + * \param ctx The PK context to use. It must have been initialized. + * + * \return Type name on success, or "invalid PK" */ const char *mbedtls_pk_get_name( const mbedtls_pk_context *ctx ) { @@ -569,8 +721,13 @@ const char *mbedtls_pk_get_name( const mbedtls_pk_context *ctx ) return( ctx->pk_info->name ); } -/* - * Access the PK type +/** + * \brief Get the key type + * + * \param ctx The PK context to use. It must have been initialized. + * + * \return Type on success. + * \return #MBEDTLS_PK_NONE for a context that has not been set up. */ mbedtls_pk_type_t mbedtls_pk_get_type( const mbedtls_pk_context *ctx ) { @@ -580,60 +737,4 @@ mbedtls_pk_type_t mbedtls_pk_get_type( const mbedtls_pk_context *ctx ) return( ctx->pk_info->type ); } -#if defined(MBEDTLS_USE_PSA_CRYPTO) -/* - * Load the key to a PSA key slot, - * then turn the PK context into a wrapper for that key slot. - * - * Currently only works for EC private keys. - */ -int mbedtls_pk_wrap_as_opaque( mbedtls_pk_context *pk, - psa_key_id_t *key, - psa_algorithm_t hash_alg ) -{ -#if !defined(MBEDTLS_ECP_C) - ((void) pk); - ((void) key); - ((void) hash_alg); - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); -#else - const mbedtls_ecp_keypair *ec; - unsigned char d[MBEDTLS_ECP_MAX_BYTES]; - size_t d_len; - psa_ecc_family_t curve_id; - psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; - psa_key_type_t key_type; - size_t bits; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - - /* export the private key material in the format PSA wants */ - if( mbedtls_pk_get_type( pk ) != MBEDTLS_PK_ECKEY ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); - - ec = mbedtls_pk_ec( *pk ); - d_len = ( ec->grp.nbits + 7 ) / 8; - if( ( ret = mbedtls_mpi_write_binary( &ec->d, d, d_len ) ) != 0 ) - return( ret ); - - curve_id = mbedtls_ecc_group_to_psa( ec->grp.id, &bits ); - key_type = PSA_KEY_TYPE_ECC_KEY_PAIR( curve_id ); - - /* prepare the key attributes */ - psa_set_key_type( &attributes, key_type ); - psa_set_key_bits( &attributes, bits ); - psa_set_key_usage_flags( &attributes, PSA_KEY_USAGE_SIGN_HASH ); - psa_set_key_algorithm( &attributes, PSA_ALG_ECDSA(hash_alg) ); - - /* import private key into PSA */ - if( PSA_SUCCESS != psa_import_key( &attributes, d, d_len, key ) ) - return( MBEDTLS_ERR_PK_HW_ACCEL_FAILED ); - - /* make PK context wrap the key slot */ - mbedtls_pk_free( pk ); - mbedtls_pk_init( pk ); - - return( mbedtls_pk_setup_opaque( pk, *key ) ); -#endif /* MBEDTLS_ECP_C */ -} -#endif /* MBEDTLS_USE_PSA_CRYPTO */ #endif /* MBEDTLS_PK_C */ diff --git a/third_party/mbedtls/pk.h b/third_party/mbedtls/pk.h index 76b8734fe..12b9479c3 100644 --- a/third_party/mbedtls/pk.h +++ b/third_party/mbedtls/pk.h @@ -1,58 +1,12 @@ -/* clang-format off */ - -/** - * \file pk.h - * - * \brief Public Key abstraction layer - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MBEDTLS_PK_H -#define MBEDTLS_PK_H - -#if !defined(MBEDTLS_CONFIG_FILE) +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_PK_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_PK_H_ #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "third_party/mbedtls/md.h" - -#if defined(MBEDTLS_RSA_C) -#include "third_party/mbedtls/rsa.h" -#endif - -#if defined(MBEDTLS_ECP_C) -#include "third_party/mbedtls/ecp.h" -#endif - -#if defined(MBEDTLS_ECDSA_C) #include "third_party/mbedtls/ecdsa.h" -#endif - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -#include "third_party/mbedtls/crypto.h" -#endif - -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif +#include "third_party/mbedtls/ecp.h" +#include "third_party/mbedtls/md.h" +#include "third_party/mbedtls/rsa.h" +COSMOPOLITAN_C_START_ +/* clang-format off */ #define MBEDTLS_ERR_PK_ALLOC_FAILED -0x3F80 /**< Memory allocation failed. */ #define MBEDTLS_ERR_PK_TYPE_MISMATCH -0x3F00 /**< Type mismatch, eg attempt to encrypt with an ECDSA key */ @@ -72,10 +26,6 @@ /* MBEDTLS_ERR_PK_HW_ACCEL_FAILED is deprecated and should not be used. */ #define MBEDTLS_ERR_PK_HW_ACCEL_FAILED -0x3880 /**< PK hardware accelerator failed. */ -#ifdef __cplusplus -extern "C" { -#endif - /** * \brief Public key types */ @@ -204,7 +154,6 @@ typedef struct typedef void mbedtls_pk_restart_ctx; #endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */ -#if defined(MBEDTLS_RSA_C) /** * Quick access to an RSA context inside a PK context. * @@ -215,9 +164,7 @@ static inline mbedtls_rsa_context *mbedtls_pk_rsa( const mbedtls_pk_context pk ) { return( (mbedtls_rsa_context *) (pk).pk_ctx ); } -#endif /* MBEDTLS_RSA_C */ -#if defined(MBEDTLS_ECP_C) /** * Quick access to an EC context inside a PK context. * @@ -228,9 +175,7 @@ static inline mbedtls_ecp_keypair *mbedtls_pk_ec( const mbedtls_pk_context pk ) { return( (mbedtls_ecp_keypair *) (pk).pk_ctx ); } -#endif /* MBEDTLS_ECP_C */ -#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) /** * \brief Types for RSA-alt abstraction */ @@ -242,136 +187,39 @@ typedef int (*mbedtls_pk_rsa_alt_sign_func)( void *ctx, int mode, mbedtls_md_type_t md_alg, unsigned int hashlen, const unsigned char *hash, unsigned char *sig ); typedef size_t (*mbedtls_pk_rsa_alt_key_len_func)( void *ctx ); -#endif /* MBEDTLS_PK_RSA_ALT_SUPPORT */ -/** - * \brief Return information associated with the given PK type - * - * \param pk_type PK type to search for. - * - * \return The PK info associated with the type or NULL if not found. - */ -const mbedtls_pk_info_t *mbedtls_pk_info_from_type( mbedtls_pk_type_t pk_type ); - -/** - * \brief Initialize a #mbedtls_pk_context (as NONE). - * - * \param ctx The context to initialize. - * This must not be \c NULL. - */ -void mbedtls_pk_init( mbedtls_pk_context *ctx ); - -/** - * \brief Free the components of a #mbedtls_pk_context. - * - * \param ctx The context to clear. It must have been initialized. - * If this is \c NULL, this function does nothing. - * - * \note For contexts that have been set up with - * mbedtls_pk_setup_opaque(), this does not free the underlying - * PSA key and you still need to call psa_destroy_key() - * independently if you want to destroy that key. - */ -void mbedtls_pk_free( mbedtls_pk_context *ctx ); - -#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) -/** - * \brief Initialize a restart context - * - * \param ctx The context to initialize. - * This must not be \c NULL. - */ -void mbedtls_pk_restart_init( mbedtls_pk_restart_ctx *ctx ); - -/** - * \brief Free the components of a restart context - * - * \param ctx The context to clear. It must have been initialized. - * If this is \c NULL, this function does nothing. - */ -void mbedtls_pk_restart_free( mbedtls_pk_restart_ctx *ctx ); -#endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */ - -/** - * \brief Initialize a PK context with the information given - * and allocates the type-specific PK subcontext. - * - * \param ctx Context to initialize. It must not have been set - * up yet (type #MBEDTLS_PK_NONE). - * \param info Information to use - * - * \return 0 on success, - * MBEDTLS_ERR_PK_BAD_INPUT_DATA on invalid input, - * MBEDTLS_ERR_PK_ALLOC_FAILED on allocation failure. - * - * \note For contexts holding an RSA-alt key, use - * \c mbedtls_pk_setup_rsa_alt() instead. - */ -int mbedtls_pk_setup( mbedtls_pk_context *ctx, const mbedtls_pk_info_t *info ); - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -/** - * \brief Initialize a PK context to wrap a PSA key. - * - * \note This function replaces mbedtls_pk_setup() for contexts - * that wrap a (possibly opaque) PSA key instead of - * storing and manipulating the key material directly. - * - * \param ctx The context to initialize. It must be empty (type NONE). - * \param key The PSA key to wrap, which must hold an ECC key pair - * (see notes below). - * - * \note The wrapped key must remain valid as long as the - * wrapping PK context is in use, that is at least between - * the point this function is called and the point - * mbedtls_pk_free() is called on this context. The wrapped - * key might then be independently used or destroyed. - * - * \note This function is currently only available for ECC key - * pairs (that is, ECC keys containing private key material). - * Support for other key types may be added later. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_PK_BAD_INPUT_DATA on invalid input - * (context already used, invalid key identifier). - * \return #MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE if the key is not an - * ECC key pair. - * \return #MBEDTLS_ERR_PK_ALLOC_FAILED on allocation failure. - */ -int mbedtls_pk_setup_opaque( mbedtls_pk_context *ctx, - const psa_key_id_t key ); -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - -#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) -/** - * \brief Initialize an RSA-alt context - * - * \param ctx Context to initialize. It must not have been set - * up yet (type #MBEDTLS_PK_NONE). - * \param key RSA key pointer - * \param decrypt_func Decryption function - * \param sign_func Signing function - * \param key_len_func Function returning key length in bytes - * - * \return 0 on success, or MBEDTLS_ERR_PK_BAD_INPUT_DATA if the - * context wasn't already initialized as RSA_ALT. - * - * \note This function replaces \c mbedtls_pk_setup() for RSA-alt. - */ -int mbedtls_pk_setup_rsa_alt( mbedtls_pk_context *ctx, void * key, - mbedtls_pk_rsa_alt_decrypt_func decrypt_func, - mbedtls_pk_rsa_alt_sign_func sign_func, - mbedtls_pk_rsa_alt_key_len_func key_len_func ); -#endif /* MBEDTLS_PK_RSA_ALT_SUPPORT */ - -/** - * \brief Get the size in bits of the underlying key - * - * \param ctx The context to query. It must have been initialized. - * - * \return Key size in bits, or 0 on error - */ -size_t mbedtls_pk_get_bitlen( const mbedtls_pk_context *ctx ); +const mbedtls_pk_info_t *mbedtls_pk_info_from_type( mbedtls_pk_type_t ); +void mbedtls_pk_init( mbedtls_pk_context * ); +void mbedtls_pk_free( mbedtls_pk_context * ); +void mbedtls_pk_restart_init( mbedtls_pk_restart_ctx * ); +void mbedtls_pk_restart_free( mbedtls_pk_restart_ctx * ); +int mbedtls_pk_setup( mbedtls_pk_context *, const mbedtls_pk_info_t * ); +int mbedtls_pk_setup_rsa_alt( mbedtls_pk_context *, void *, mbedtls_pk_rsa_alt_decrypt_func, mbedtls_pk_rsa_alt_sign_func, mbedtls_pk_rsa_alt_key_len_func ); +size_t mbedtls_pk_get_bitlen( const mbedtls_pk_context * ); +const char * mbedtls_pk_get_name( const mbedtls_pk_context * ); +const char *mbedtls_pk_type_name(mbedtls_pk_type_t); +int mbedtls_pk_can_do( const mbedtls_pk_context *, mbedtls_pk_type_t ); +int mbedtls_pk_check_pair( const mbedtls_pk_context *, const mbedtls_pk_context * ); +int mbedtls_pk_debug( const mbedtls_pk_context *, mbedtls_pk_debug_item * ); +int mbedtls_pk_decrypt( mbedtls_pk_context *, const unsigned char *, size_t, unsigned char *, size_t *, size_t, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_pk_encrypt( mbedtls_pk_context *, const unsigned char *, size_t, unsigned char *, size_t *, size_t, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_pk_load_file( const char *, unsigned char **, size_t * ); +int mbedtls_pk_parse_key( mbedtls_pk_context *, const unsigned char *, size_t, const unsigned char *, size_t ); +int mbedtls_pk_parse_keyfile( mbedtls_pk_context *, const char *, const char * ); +int mbedtls_pk_parse_public_key( mbedtls_pk_context *, const unsigned char *, size_t ); +int mbedtls_pk_parse_public_keyfile( mbedtls_pk_context *, const char * ); +int mbedtls_pk_parse_subpubkey( unsigned char **, const unsigned char *, mbedtls_pk_context * ); +int mbedtls_pk_sign( mbedtls_pk_context *, mbedtls_md_type_t, const unsigned char *, size_t, unsigned char *, size_t *, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_pk_sign_restartable( mbedtls_pk_context *, mbedtls_md_type_t, const unsigned char *, size_t, unsigned char *, size_t *, int (*)(void *, unsigned char *, size_t), void *, mbedtls_pk_restart_ctx * ); +int mbedtls_pk_verify( mbedtls_pk_context *, mbedtls_md_type_t, const unsigned char *, size_t, const unsigned char *, size_t ); +int mbedtls_pk_verify_ext( mbedtls_pk_type_t, const void *, mbedtls_pk_context *, mbedtls_md_type_t, const unsigned char *, size_t, const unsigned char *, size_t ); +int mbedtls_pk_verify_restartable( mbedtls_pk_context *, mbedtls_md_type_t, const unsigned char *, size_t, const unsigned char *, size_t, mbedtls_pk_restart_ctx * ); +int mbedtls_pk_write_key_der( mbedtls_pk_context *, unsigned char *, size_t ); +int mbedtls_pk_write_key_pem( mbedtls_pk_context *, unsigned char *, size_t ); +int mbedtls_pk_write_pubkey( unsigned char **, unsigned char *, const mbedtls_pk_context * ); +int mbedtls_pk_write_pubkey_der( mbedtls_pk_context *, unsigned char *, size_t ); +int mbedtls_pk_write_pubkey_pem( mbedtls_pk_context *, unsigned char *, size_t ); +mbedtls_pk_type_t mbedtls_pk_get_type( const mbedtls_pk_context * ); /** * \brief Get the length in bytes of the underlying key @@ -385,498 +233,5 @@ static inline size_t mbedtls_pk_get_len( const mbedtls_pk_context *ctx ) return( ( mbedtls_pk_get_bitlen( ctx ) + 7 ) / 8 ); } -/** - * \brief Tell if a context can do the operation given by type - * - * \param ctx The context to query. It must have been initialized. - * \param type The desired type. - * - * \return 1 if the context can do operations on the given type. - * \return 0 if the context cannot do the operations on the given - * type. This is always the case for a context that has - * been initialized but not set up, or that has been - * cleared with mbedtls_pk_free(). - */ -int mbedtls_pk_can_do( const mbedtls_pk_context *ctx, mbedtls_pk_type_t type ); - -/** - * \brief Verify signature (including padding if relevant). - * - * \param ctx The PK context to use. It must have been set up. - * \param md_alg Hash algorithm used (see notes) - * \param hash Hash of the message to sign - * \param hash_len Hash length or 0 (see notes) - * \param sig Signature to verify - * \param sig_len Signature length - * - * \return 0 on success (signature is valid), - * #MBEDTLS_ERR_PK_SIG_LEN_MISMATCH if there is a valid - * signature in sig but its length is less than \p siglen, - * or a specific error code. - * - * \note For RSA keys, the default padding type is PKCS#1 v1.5. - * Use \c mbedtls_pk_verify_ext( MBEDTLS_PK_RSASSA_PSS, ... ) - * to verify RSASSA_PSS signatures. - * - * \note If hash_len is 0, then the length associated with md_alg - * is used instead, or an error returned if it is invalid. - * - * \note md_alg may be MBEDTLS_MD_NONE, only if hash_len != 0 - */ -int mbedtls_pk_verify( mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ); - -/** - * \brief Restartable version of \c mbedtls_pk_verify() - * - * \note Performs the same job as \c mbedtls_pk_verify(), but can - * return early and restart according to the limit set with - * \c mbedtls_ecp_set_max_ops() to reduce blocking for ECC - * operations. For RSA, same as \c mbedtls_pk_verify(). - * - * \param ctx The PK context to use. It must have been set up. - * \param md_alg Hash algorithm used (see notes) - * \param hash Hash of the message to sign - * \param hash_len Hash length or 0 (see notes) - * \param sig Signature to verify - * \param sig_len Signature length - * \param rs_ctx Restart context (NULL to disable restart) - * - * \return See \c mbedtls_pk_verify(), or - * \return #MBEDTLS_ERR_ECP_IN_PROGRESS if maximum number of - * operations was reached: see \c mbedtls_ecp_set_max_ops(). - */ -int mbedtls_pk_verify_restartable( mbedtls_pk_context *ctx, - mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len, - mbedtls_pk_restart_ctx *rs_ctx ); - -/** - * \brief Verify signature, with options. - * (Includes verification of the padding depending on type.) - * - * \param type Signature type (inc. possible padding type) to verify - * \param options Pointer to type-specific options, or NULL - * \param ctx The PK context to use. It must have been set up. - * \param md_alg Hash algorithm used (see notes) - * \param hash Hash of the message to sign - * \param hash_len Hash length or 0 (see notes) - * \param sig Signature to verify - * \param sig_len Signature length - * - * \return 0 on success (signature is valid), - * #MBEDTLS_ERR_PK_TYPE_MISMATCH if the PK context can't be - * used for this type of signatures, - * #MBEDTLS_ERR_PK_SIG_LEN_MISMATCH if there is a valid - * signature in sig but its length is less than \p siglen, - * or a specific error code. - * - * \note If hash_len is 0, then the length associated with md_alg - * is used instead, or an error returned if it is invalid. - * - * \note md_alg may be MBEDTLS_MD_NONE, only if hash_len != 0 - * - * \note If type is MBEDTLS_PK_RSASSA_PSS, then options must point - * to a mbedtls_pk_rsassa_pss_options structure, - * otherwise it must be NULL. - */ -int mbedtls_pk_verify_ext( mbedtls_pk_type_t type, const void *options, - mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ); - -/** - * \brief Make signature, including padding if relevant. - * - * \param ctx The PK context to use. It must have been set up - * with a private key. - * \param md_alg Hash algorithm used (see notes) - * \param hash Hash of the message to sign - * \param hash_len Hash length or 0 (see notes) - * \param sig Place to write the signature. - * It must have enough room for the signature. - * #MBEDTLS_PK_SIGNATURE_MAX_SIZE is always enough. - * You may use a smaller buffer if it is large enough - * given the key type. - * \param sig_len On successful return, - * the number of bytes written to \p sig. - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \return 0 on success, or a specific error code. - * - * \note For RSA keys, the default padding type is PKCS#1 v1.5. - * There is no interface in the PK module to make RSASSA-PSS - * signatures yet. - * - * \note If hash_len is 0, then the length associated with md_alg - * is used instead, or an error returned if it is invalid. - * - * \note For RSA, md_alg may be MBEDTLS_MD_NONE if hash_len != 0. - * For ECDSA, md_alg may never be MBEDTLS_MD_NONE. - */ -int mbedtls_pk_sign( mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); - -/** - * \brief Restartable version of \c mbedtls_pk_sign() - * - * \note Performs the same job as \c mbedtls_pk_sign(), but can - * return early and restart according to the limit set with - * \c mbedtls_ecp_set_max_ops() to reduce blocking for ECC - * operations. For RSA, same as \c mbedtls_pk_sign(). - * - * \param ctx The PK context to use. It must have been set up - * with a private key. - * \param md_alg Hash algorithm used (see notes for mbedtls_pk_sign()) - * \param hash Hash of the message to sign - * \param hash_len Hash length or 0 (see notes for mbedtls_pk_sign()) - * \param sig Place to write the signature. - * It must have enough room for the signature. - * #MBEDTLS_PK_SIGNATURE_MAX_SIZE is always enough. - * You may use a smaller buffer if it is large enough - * given the key type. - * \param sig_len On successful return, - * the number of bytes written to \p sig. - * \param f_rng RNG function - * \param p_rng RNG parameter - * \param rs_ctx Restart context (NULL to disable restart) - * - * \return See \c mbedtls_pk_sign(). - * \return #MBEDTLS_ERR_ECP_IN_PROGRESS if maximum number of - * operations was reached: see \c mbedtls_ecp_set_max_ops(). - */ -int mbedtls_pk_sign_restartable( mbedtls_pk_context *ctx, - mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, - mbedtls_pk_restart_ctx *rs_ctx ); - -/** - * \brief Decrypt message (including padding if relevant). - * - * \param ctx The PK context to use. It must have been set up - * with a private key. - * \param input Input to decrypt - * \param ilen Input size - * \param output Decrypted output - * \param olen Decrypted message length - * \param osize Size of the output buffer - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \note For RSA keys, the default padding type is PKCS#1 v1.5. - * - * \return 0 on success, or a specific error code. - */ -int mbedtls_pk_decrypt( mbedtls_pk_context *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); - -/** - * \brief Encrypt message (including padding if relevant). - * - * \param ctx The PK context to use. It must have been set up. - * \param input Message to encrypt - * \param ilen Message size - * \param output Encrypted output - * \param olen Encrypted output length - * \param osize Size of the output buffer - * \param f_rng RNG function - * \param p_rng RNG parameter - * - * \note For RSA keys, the default padding type is PKCS#1 v1.5. - * - * \return 0 on success, or a specific error code. - */ -int mbedtls_pk_encrypt( mbedtls_pk_context *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); - -/** - * \brief Check if a public-private pair of keys matches. - * - * \param pub Context holding a public key. - * \param prv Context holding a private (and public) key. - * - * \return \c 0 on success (keys were checked and match each other). - * \return #MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE if the keys could not - * be checked - in that case they may or may not match. - * \return #MBEDTLS_ERR_PK_BAD_INPUT_DATA if a context is invalid. - * \return Another non-zero value if the keys do not match. - */ -int mbedtls_pk_check_pair( const mbedtls_pk_context *pub, const mbedtls_pk_context *prv ); - -/** - * \brief Export debug information - * - * \param ctx The PK context to use. It must have been initialized. - * \param items Place to write debug items - * - * \return 0 on success or MBEDTLS_ERR_PK_BAD_INPUT_DATA - */ -int mbedtls_pk_debug( const mbedtls_pk_context *ctx, mbedtls_pk_debug_item *items ); - -/** - * \brief Access the type name - * - * \param ctx The PK context to use. It must have been initialized. - * - * \return Type name on success, or "invalid PK" - */ -const char * mbedtls_pk_get_name( const mbedtls_pk_context *ctx ); - -/** - * \brief Get the key type - * - * \param ctx The PK context to use. It must have been initialized. - * - * \return Type on success. - * \return #MBEDTLS_PK_NONE for a context that has not been set up. - */ -mbedtls_pk_type_t mbedtls_pk_get_type( const mbedtls_pk_context *ctx ); - -#if defined(MBEDTLS_PK_PARSE_C) -/** \ingroup pk_module */ -/** - * \brief Parse a private key in PEM or DER format - * - * \param ctx The PK context to fill. It must have been initialized - * but not set up. - * \param key Input buffer to parse. - * The buffer must contain the input exactly, with no - * extra trailing material. For PEM, the buffer must - * contain a null-terminated string. - * \param keylen Size of \b key in bytes. - * For PEM data, this includes the terminating null byte, - * so \p keylen must be equal to `strlen(key) + 1`. - * \param pwd Optional password for decryption. - * Pass \c NULL if expecting a non-encrypted key. - * Pass a string of \p pwdlen bytes if expecting an encrypted - * key; a non-encrypted key will also be accepted. - * The empty password is not supported. - * \param pwdlen Size of the password in bytes. - * Ignored if \p pwd is \c NULL. - * - * \note On entry, ctx must be empty, either freshly initialised - * with mbedtls_pk_init() or reset with mbedtls_pk_free(). If you need a - * specific key type, check the result with mbedtls_pk_can_do(). - * - * \note The key is also checked for correctness. - * - * \return 0 if successful, or a specific PK or PEM error code - */ -int mbedtls_pk_parse_key( mbedtls_pk_context *ctx, - const unsigned char *key, size_t keylen, - const unsigned char *pwd, size_t pwdlen ); - -/** \ingroup pk_module */ -/** - * \brief Parse a public key in PEM or DER format - * - * \param ctx The PK context to fill. It must have been initialized - * but not set up. - * \param key Input buffer to parse. - * The buffer must contain the input exactly, with no - * extra trailing material. For PEM, the buffer must - * contain a null-terminated string. - * \param keylen Size of \b key in bytes. - * For PEM data, this includes the terminating null byte, - * so \p keylen must be equal to `strlen(key) + 1`. - * - * \note On entry, ctx must be empty, either freshly initialised - * with mbedtls_pk_init() or reset with mbedtls_pk_free(). If you need a - * specific key type, check the result with mbedtls_pk_can_do(). - * - * \note The key is also checked for correctness. - * - * \return 0 if successful, or a specific PK or PEM error code - */ -int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, - const unsigned char *key, size_t keylen ); - -#if defined(MBEDTLS_FS_IO) -/** \ingroup pk_module */ -/** - * \brief Load and parse a private key - * - * \param ctx The PK context to fill. It must have been initialized - * but not set up. - * \param path filename to read the private key from - * \param password Optional password to decrypt the file. - * Pass \c NULL if expecting a non-encrypted key. - * Pass a null-terminated string if expecting an encrypted - * key; a non-encrypted key will also be accepted. - * The empty password is not supported. - * - * \note On entry, ctx must be empty, either freshly initialised - * with mbedtls_pk_init() or reset with mbedtls_pk_free(). If you need a - * specific key type, check the result with mbedtls_pk_can_do(). - * - * \note The key is also checked for correctness. - * - * \return 0 if successful, or a specific PK or PEM error code - */ -int mbedtls_pk_parse_keyfile( mbedtls_pk_context *ctx, - const char *path, const char *password ); - -/** \ingroup pk_module */ -/** - * \brief Load and parse a public key - * - * \param ctx The PK context to fill. It must have been initialized - * but not set up. - * \param path filename to read the public key from - * - * \note On entry, ctx must be empty, either freshly initialised - * with mbedtls_pk_init() or reset with mbedtls_pk_free(). If - * you need a specific key type, check the result with - * mbedtls_pk_can_do(). - * - * \note The key is also checked for correctness. - * - * \return 0 if successful, or a specific PK or PEM error code - */ -int mbedtls_pk_parse_public_keyfile( mbedtls_pk_context *ctx, const char *path ); -#endif /* MBEDTLS_FS_IO */ -#endif /* MBEDTLS_PK_PARSE_C */ - -#if defined(MBEDTLS_PK_WRITE_C) -/** - * \brief Write a private key to a PKCS#1 or SEC1 DER structure - * Note: data is written at the end of the buffer! Use the - * return value to determine where you should start - * using the buffer - * - * \param ctx PK context which must contain a valid private key. - * \param buf buffer to write to - * \param size size of the buffer - * - * \return length of data written if successful, or a specific - * error code - */ -int mbedtls_pk_write_key_der( mbedtls_pk_context *ctx, unsigned char *buf, size_t size ); - -/** - * \brief Write a public key to a SubjectPublicKeyInfo DER structure - * Note: data is written at the end of the buffer! Use the - * return value to determine where you should start - * using the buffer - * - * \param ctx PK context which must contain a valid public or private key. - * \param buf buffer to write to - * \param size size of the buffer - * - * \return length of data written if successful, or a specific - * error code - */ -int mbedtls_pk_write_pubkey_der( mbedtls_pk_context *ctx, unsigned char *buf, size_t size ); - -#if defined(MBEDTLS_PEM_WRITE_C) -/** - * \brief Write a public key to a PEM string - * - * \param ctx PK context which must contain a valid public or private key. - * \param buf Buffer to write to. The output includes a - * terminating null byte. - * \param size Size of the buffer in bytes. - * - * \return 0 if successful, or a specific error code - */ -int mbedtls_pk_write_pubkey_pem( mbedtls_pk_context *ctx, unsigned char *buf, size_t size ); - -/** - * \brief Write a private key to a PKCS#1 or SEC1 PEM string - * - * \param ctx PK context which must contain a valid private key. - * \param buf Buffer to write to. The output includes a - * terminating null byte. - * \param size Size of the buffer in bytes. - * - * \return 0 if successful, or a specific error code - */ -int mbedtls_pk_write_key_pem( mbedtls_pk_context *ctx, unsigned char *buf, size_t size ); -#endif /* MBEDTLS_PEM_WRITE_C */ -#endif /* MBEDTLS_PK_WRITE_C */ - -/* - * WARNING: Low-level functions. You probably do not want to use these unless - * you are certain you do ;) - */ - -#if defined(MBEDTLS_PK_PARSE_C) -/** - * \brief Parse a SubjectPublicKeyInfo DER structure - * - * \param p the position in the ASN.1 data - * \param end end of the buffer - * \param pk The PK context to fill. It must have been initialized - * but not set up. - * - * \return 0 if successful, or a specific PK error code - */ -int mbedtls_pk_parse_subpubkey( unsigned char **p, const unsigned char *end, - mbedtls_pk_context *pk ); -#endif /* MBEDTLS_PK_PARSE_C */ - -#if defined(MBEDTLS_PK_WRITE_C) -/** - * \brief Write a subjectPublicKey to ASN.1 data - * Note: function works backwards in data buffer - * - * \param p reference to current position pointer - * \param start start of the buffer (for bounds-checking) - * \param key PK context which must contain a valid public or private key. - * - * \return the length written or a negative error code - */ -int mbedtls_pk_write_pubkey( unsigned char **p, unsigned char *start, - const mbedtls_pk_context *key ); -#endif /* MBEDTLS_PK_WRITE_C */ - -/* - * Internal module functions. You probably do not want to use these unless you - * know you do. - */ -#if defined(MBEDTLS_FS_IO) -int mbedtls_pk_load_file( const char *path, unsigned char **buf, size_t *n ); -#endif - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -/** - * \brief Turn an EC key into an opaque one. - * - * \warning This is a temporary utility function for tests. It might - * change or be removed at any time without notice. - * - * \note Only ECDSA keys are supported so far. Signing with the - * specified hash is the only allowed use of that key. - * - * \param pk Input: the EC key to import to a PSA key. - * Output: a PK context wrapping that PSA key. - * \param key Output: a PSA key identifier. - * It's the caller's responsibility to call - * psa_destroy_key() on that key identifier after calling - * mbedtls_pk_free() on the PK context. - * \param hash_alg The hash algorithm to allow for use with that key. - * - * \return \c 0 if successful. - * \return An Mbed TLS error code otherwise. - */ -int mbedtls_pk_wrap_as_opaque( mbedtls_pk_context *pk, - psa_key_id_t *key, - psa_algorithm_t hash_alg ); -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - -#ifdef __cplusplus -} -#endif - -#endif /* MBEDTLS_PK_H */ +COSMOPOLITAN_C_END_ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_PK_H_ */ diff --git a/third_party/mbedtls/pk_internal.h b/third_party/mbedtls/pk_internal.h index 57e246de9..7729163e9 100644 --- a/third_party/mbedtls/pk_internal.h +++ b/third_party/mbedtls/pk_internal.h @@ -1,37 +1,8 @@ -/* clang-format off */ - -/** - * \file pk_internal.h - * - * \brief Public Key abstraction layer: wrapper functions - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - #ifndef MBEDTLS_PK_WRAP_H #define MBEDTLS_PK_WRAP_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/pk.h" +/* clang-format off */ struct mbedtls_pk_info_t { @@ -107,7 +78,7 @@ struct mbedtls_pk_info_t void (*debug_func)( const void *ctx, mbedtls_pk_debug_item *items ); }; -#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) + /* Container for RSA-alt */ typedef struct { @@ -116,27 +87,12 @@ typedef struct mbedtls_pk_rsa_alt_sign_func sign_func; mbedtls_pk_rsa_alt_key_len_func key_len_func; } mbedtls_rsa_alt_context; -#endif -#if defined(MBEDTLS_RSA_C) extern const mbedtls_pk_info_t mbedtls_rsa_info; -#endif - -#if defined(MBEDTLS_ECP_C) extern const mbedtls_pk_info_t mbedtls_eckey_info; extern const mbedtls_pk_info_t mbedtls_eckeydh_info; -#endif - -#if defined(MBEDTLS_ECDSA_C) extern const mbedtls_pk_info_t mbedtls_ecdsa_info; -#endif - -#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) extern const mbedtls_pk_info_t mbedtls_rsa_alt_info; -#endif - -#if defined(MBEDTLS_USE_PSA_CRYPTO) extern const mbedtls_pk_info_t mbedtls_pk_opaque_info; -#endif #endif /* MBEDTLS_PK_WRAP_H */ diff --git a/third_party/mbedtls/pk_wrap.c b/third_party/mbedtls/pk_wrap.c index 2037aa8b6..83a49567e 100644 --- a/third_party/mbedtls/pk_wrap.c +++ b/third_party/mbedtls/pk_wrap.c @@ -1,5 +1,20 @@ -/* clang-format off */ +#include "third_party/mbedtls/asn1.h" +#include "third_party/mbedtls/asn1write.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/ecdsa.h" +#include "third_party/mbedtls/ecp.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/pk_internal.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/rsa.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * Public Key abstraction layer: wrapper functions * @@ -19,46 +34,7 @@ * limitations under the License. */ -#include "third_party/mbedtls/common.h" -#include "third_party/mbedtls/sheesh.h" - #if defined(MBEDTLS_PK_C) -#include "third_party/mbedtls/pk_internal.h" -#include "third_party/mbedtls/error.h" - -/* Even if RSA not activated, for the sake of RSA-alt */ -#include "third_party/mbedtls/rsa.h" - - -#if defined(MBEDTLS_ECP_C) -#include "third_party/mbedtls/ecp.h" -#endif - -#if defined(MBEDTLS_ECDSA_C) -#include "third_party/mbedtls/ecdsa.h" -#endif - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -#include "third_party/mbedtls/asn1write.h" -#endif - -#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) -#include "third_party/mbedtls/platform_util.h" -#endif - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/psa_util.h" -#include "third_party/mbedtls/asn1.h" -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - #if defined(MBEDTLS_RSA_C) static int rsa_can_do( mbedtls_pk_type_t type ) @@ -80,20 +56,16 @@ static int rsa_verify_wrap( void *ctx, mbedtls_md_type_t md_alg, int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; mbedtls_rsa_context * rsa = (mbedtls_rsa_context *) ctx; size_t rsa_len = mbedtls_rsa_get_len( rsa ); - #if SIZE_MAX > UINT_MAX if( md_alg == MBEDTLS_MD_NONE && UINT_MAX < hash_len ) return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); #endif /* SIZE_MAX > UINT_MAX */ - if( sig_len < rsa_len ) return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( ( ret = mbedtls_rsa_pkcs1_verify( rsa, NULL, NULL, MBEDTLS_RSA_PUBLIC, md_alg, (unsigned int) hash_len, hash, sig ) ) != 0 ) return( ret ); - /* The buffer contains a valid signature followed by extra data. * We have a special error code for that so that so that callers can * use mbedtls_pk_verify() to check "Does the buffer start with a @@ -101,7 +73,6 @@ static int rsa_verify_wrap( void *ctx, mbedtls_md_type_t md_alg, * signature?". */ if( sig_len > rsa_len ) return( MBEDTLS_ERR_PK_SIG_LEN_MISMATCH ); - return( 0 ); } @@ -111,14 +82,11 @@ static int rsa_sign_wrap( void *ctx, mbedtls_md_type_t md_alg, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { mbedtls_rsa_context * rsa = (mbedtls_rsa_context *) ctx; - #if SIZE_MAX > UINT_MAX if( md_alg == MBEDTLS_MD_NONE && UINT_MAX < hash_len ) return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); #endif /* SIZE_MAX > UINT_MAX */ - *sig_len = mbedtls_rsa_get_len( rsa ); - return( mbedtls_rsa_pkcs1_sign( rsa, f_rng, p_rng, MBEDTLS_RSA_PRIVATE, md_alg, (unsigned int) hash_len, hash, sig ) ); } @@ -129,10 +97,8 @@ static int rsa_decrypt_wrap( void *ctx, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { mbedtls_rsa_context * rsa = (mbedtls_rsa_context *) ctx; - if( ilen != mbedtls_rsa_get_len( rsa ) ) return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - return( mbedtls_rsa_pkcs1_decrypt( rsa, f_rng, p_rng, MBEDTLS_RSA_PRIVATE, olen, input, output, osize ) ); } @@ -144,10 +110,8 @@ static int rsa_encrypt_wrap( void *ctx, { mbedtls_rsa_context * rsa = (mbedtls_rsa_context *) ctx; *olen = mbedtls_rsa_get_len( rsa ); - if( *olen > osize ) return( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); - return( mbedtls_rsa_pkcs1_encrypt( rsa, f_rng, p_rng, MBEDTLS_RSA_PUBLIC, ilen, input, output ) ); } @@ -161,10 +125,8 @@ static int rsa_check_pair_wrap( const void *pub, const void *prv ) static void *rsa_alloc_wrap( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_rsa_context ) ); - if( ctx != NULL ) mbedtls_rsa_init( (mbedtls_rsa_context *) ctx, 0, 0 ); - return( ctx ); } @@ -179,9 +141,7 @@ static void rsa_debug( const void *ctx, mbedtls_pk_debug_item *items ) items->type = MBEDTLS_PK_DEBUG_MPI; items->name = "rsa.N"; items->value = &( ((mbedtls_rsa_context *) ctx)->N ); - items++; - items->type = MBEDTLS_PK_DEBUG_MPI; items->name = "rsa.E"; items->value = &( ((mbedtls_rsa_context *) ctx)->E ); @@ -389,10 +349,8 @@ static int eckey_check_pair( const void *pub, const void *prv ) static void *eckey_alloc_wrap( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ecp_keypair ) ); - if( ctx != NULL ) mbedtls_ecp_keypair_init( ctx ); - return( ctx ); } @@ -476,164 +434,18 @@ static int ecdsa_can_do( mbedtls_pk_type_t type ) return( type == MBEDTLS_PK_ECDSA ); } -#if defined(MBEDTLS_USE_PSA_CRYPTO) -/* - * An ASN.1 encoded signature is a sequence of two ASN.1 integers. Parse one of - * those integers and convert it to the fixed-length encoding expected by PSA. - */ -static int extract_ecdsa_sig_int( unsigned char **from, const unsigned char *end, - unsigned char *to, size_t to_len ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - size_t unpadded_len, padding_len; - - if( ( ret = mbedtls_asn1_get_tag( from, end, &unpadded_len, - MBEDTLS_ASN1_INTEGER ) ) != 0 ) - { - return( ret ); - } - - while( unpadded_len > 0 && **from == 0x00 ) - { - ( *from )++; - unpadded_len--; - } - - if( unpadded_len > to_len || unpadded_len == 0 ) - return( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - - padding_len = to_len - unpadded_len; - memset( to, 0x00, padding_len ); - memcpy( to + padding_len, *from, unpadded_len ); - ( *from ) += unpadded_len; - - return( 0 ); -} - -/* - * Convert a signature from an ASN.1 sequence of two integers - * to a raw {r,s} buffer. Note: the provided sig buffer must be at least - * twice as big as int_size. - */ -static int extract_ecdsa_sig( unsigned char **p, const unsigned char *end, - unsigned char *sig, size_t int_size ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - size_t tmp_size; - - if( ( ret = mbedtls_asn1_get_tag( p, end, &tmp_size, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( ret ); - - /* Extract r */ - if( ( ret = extract_ecdsa_sig_int( p, end, sig, int_size ) ) != 0 ) - return( ret ); - /* Extract s */ - if( ( ret = extract_ecdsa_sig_int( p, end, sig + int_size, int_size ) ) != 0 ) - return( ret ); - - return( 0 ); -} - -static int ecdsa_verify_wrap( void *ctx_arg, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) -{ - mbedtls_ecdsa_context *ctx = ctx_arg; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; - psa_key_id_t key_id = 0; - psa_status_t status; - mbedtls_pk_context key; - int key_len; - /* see ECP_PUB_DER_MAX_BYTES in pkwrite.c */ - unsigned char buf[30 + 2 * MBEDTLS_ECP_MAX_BYTES]; - unsigned char *p; - mbedtls_pk_info_t pk_info = mbedtls_eckey_info; - psa_algorithm_t psa_sig_md = PSA_ALG_ECDSA_ANY; - size_t curve_bits; - psa_ecc_family_t curve = - mbedtls_ecc_group_to_psa( ctx->grp.id, &curve_bits ); - const size_t signature_part_size = ( ctx->grp.nbits + 7 ) / 8; - ((void) md_alg); - - if( curve == 0 ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - - /* mbedtls_pk_write_pubkey() expects a full PK context; - * re-construct one to make it happy */ - key.pk_info = &pk_info; - key.pk_ctx = ctx; - p = buf + sizeof( buf ); - key_len = mbedtls_pk_write_pubkey( &p, buf, &key ); - if( key_len <= 0 ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - - psa_set_key_type( &attributes, PSA_KEY_TYPE_ECC_PUBLIC_KEY( curve ) ); - psa_set_key_usage_flags( &attributes, PSA_KEY_USAGE_VERIFY_HASH ); - psa_set_key_algorithm( &attributes, psa_sig_md ); - - status = psa_import_key( &attributes, - buf + sizeof( buf ) - key_len, key_len, - &key_id ); - if( status != PSA_SUCCESS ) - { - ret = mbedtls_psa_err_translate_pk( status ); - goto cleanup; - } - - /* We don't need the exported key anymore and can - * reuse its buffer for signature extraction. */ - if( 2 * signature_part_size > sizeof( buf ) ) - { - ret = MBEDTLS_ERR_PK_BAD_INPUT_DATA; - goto cleanup; - } - - p = (unsigned char*) sig; - if( ( ret = extract_ecdsa_sig( &p, sig + sig_len, buf, - signature_part_size ) ) != 0 ) - { - goto cleanup; - } - - if( psa_verify_hash( key_id, psa_sig_md, - hash, hash_len, - buf, 2 * signature_part_size ) - != PSA_SUCCESS ) - { - ret = MBEDTLS_ERR_ECP_VERIFY_FAILED; - goto cleanup; - } - - if( p != sig + sig_len ) - { - ret = MBEDTLS_ERR_PK_SIG_LEN_MISMATCH; - goto cleanup; - } - ret = 0; - -cleanup: - psa_destroy_key( key_id ); - return( ret ); -} -#else /* MBEDTLS_USE_PSA_CRYPTO */ static int ecdsa_verify_wrap( void *ctx, mbedtls_md_type_t md_alg, const unsigned char *hash, size_t hash_len, const unsigned char *sig, size_t sig_len ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; ((void) md_alg); - ret = mbedtls_ecdsa_read_signature( (mbedtls_ecdsa_context *) ctx, hash, hash_len, sig, sig_len ); - if( ret == MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH ) return( MBEDTLS_ERR_PK_SIG_LEN_MISMATCH ); - return( ret ); } -#endif /* MBEDTLS_USE_PSA_CRYPTO */ static int ecdsa_sign_wrap( void *ctx, mbedtls_md_type_t md_alg, const unsigned char *hash, size_t hash_len, @@ -681,10 +493,8 @@ static int ecdsa_sign_rs_wrap( void *ctx, mbedtls_md_type_t md_alg, static void *ecdsa_alloc_wrap( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ecdsa_context ) ); - if( ctx != NULL ) mbedtls_ecdsa_init( (mbedtls_ecdsa_context *) ctx ); - return( ctx ); } @@ -698,10 +508,8 @@ static void ecdsa_free_wrap( void *ctx ) static void *ecdsa_rs_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ecdsa_restart_ctx ) ); - if( ctx != NULL ) mbedtls_ecdsa_restart_init( ctx ); - return( ctx ); } @@ -736,7 +544,6 @@ const mbedtls_pk_info_t mbedtls_ecdsa_info = { }; #endif /* MBEDTLS_ECDSA_C */ -#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) /* * Support for alternative RSA-private implementations */ @@ -749,7 +556,6 @@ static int rsa_alt_can_do( mbedtls_pk_type_t type ) static size_t rsa_alt_get_bitlen( const void *ctx ) { const mbedtls_rsa_alt_context *rsa_alt = (const mbedtls_rsa_alt_context *) ctx; - return( 8 * rsa_alt->key_len_func( rsa_alt->key ) ); } @@ -759,16 +565,13 @@ static int rsa_alt_sign_wrap( void *ctx, mbedtls_md_type_t md_alg, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { mbedtls_rsa_alt_context *rsa_alt = (mbedtls_rsa_alt_context *) ctx; - #if SIZE_MAX > UINT_MAX if( UINT_MAX < hash_len ) return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); #endif /* SIZE_MAX > UINT_MAX */ - *sig_len = rsa_alt->key_len_func( rsa_alt->key ); if( *sig_len > MBEDTLS_PK_SIGNATURE_MAX_SIZE ) return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - return( rsa_alt->sign_func( rsa_alt->key, f_rng, p_rng, MBEDTLS_RSA_PRIVATE, md_alg, (unsigned int) hash_len, hash, sig ) ); } @@ -779,13 +582,10 @@ static int rsa_alt_decrypt_wrap( void *ctx, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { mbedtls_rsa_alt_context *rsa_alt = (mbedtls_rsa_alt_context *) ctx; - ((void) f_rng); ((void) p_rng); - if( ilen != rsa_alt->key_len_func( rsa_alt->key ) ) return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - return( rsa_alt->decrypt_func( rsa_alt->key, MBEDTLS_RSA_PRIVATE, olen, input, output, osize ) ); } @@ -797,25 +597,20 @@ static int rsa_alt_check_pair( const void *pub, const void *prv ) unsigned char hash[32]; size_t sig_len = 0; int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - if( rsa_alt_get_bitlen( prv ) != rsa_get_bitlen( pub ) ) return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); - memset( hash, 0x2a, sizeof( hash ) ); - if( ( ret = rsa_alt_sign_wrap( (void *) prv, MBEDTLS_MD_NONE, hash, sizeof( hash ), sig, &sig_len, NULL, NULL ) ) != 0 ) { return( ret ); } - if( rsa_verify_wrap( (void *) pub, MBEDTLS_MD_NONE, hash, sizeof( hash ), sig, sig_len ) != 0 ) { return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); } - return( 0 ); } #endif /* MBEDTLS_RSA_C */ @@ -823,10 +618,8 @@ static int rsa_alt_check_pair( const void *pub, const void *prv ) static void *rsa_alt_alloc_wrap( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_rsa_alt_context ) ); - if( ctx != NULL ) memset( ctx, 0, sizeof( mbedtls_rsa_alt_context ) ); - return( ctx ); } @@ -863,206 +656,4 @@ const mbedtls_pk_info_t mbedtls_rsa_alt_info = { NULL, }; -#endif /* MBEDTLS_PK_RSA_ALT_SUPPORT */ - -#if defined(MBEDTLS_USE_PSA_CRYPTO) - -static void *pk_opaque_alloc_wrap( void ) -{ - void *ctx = mbedtls_calloc( 1, sizeof( psa_key_id_t ) ); - - /* no _init() function to call, an calloc() already zeroized */ - - return( ctx ); -} - -static void pk_opaque_free_wrap( void *ctx ) -{ - mbedtls_platform_zeroize( ctx, sizeof( psa_key_id_t ) ); - mbedtls_free( ctx ); -} - -static size_t pk_opaque_get_bitlen( const void *ctx ) -{ - const psa_key_id_t *key = (const psa_key_id_t *) ctx; - size_t bits; - psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; - - if( PSA_SUCCESS != psa_get_key_attributes( *key, &attributes ) ) - return( 0 ); - - bits = psa_get_key_bits( &attributes ); - psa_reset_key_attributes( &attributes ); - return( bits ); -} - -static int pk_opaque_can_do( mbedtls_pk_type_t type ) -{ - /* For now opaque PSA keys can only wrap ECC keypairs, - * as checked by setup_psa(). - * Also, ECKEY_DH does not really make sense with the current API. */ - return( type == MBEDTLS_PK_ECKEY || - type == MBEDTLS_PK_ECDSA ); -} - -#if defined(MBEDTLS_ECDSA_C) - -/* - * Simultaneously convert and move raw MPI from the beginning of a buffer - * to an ASN.1 MPI at the end of the buffer. - * See also mbedtls_asn1_write_mpi(). - * - * p: pointer to the end of the output buffer - * start: start of the output buffer, and also of the mpi to write at the end - * n_len: length of the mpi to read from start - */ -static int asn1_write_mpibuf( unsigned char **p, unsigned char *start, - size_t n_len ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - size_t len = 0; - - if( (size_t)( *p - start ) < n_len ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); - - len = n_len; - *p -= len; - memmove( *p, start, len ); - - /* ASN.1 DER encoding requires minimal length, so skip leading 0s. - * Neither r nor s should be 0, but as a failsafe measure, still detect - * that rather than overflowing the buffer in case of a PSA error. */ - while( len > 0 && **p == 0x00 ) - { - ++(*p); - --len; - } - - /* this is only reached if the signature was invalid */ - if( len == 0 ) - return( MBEDTLS_ERR_PK_HW_ACCEL_FAILED ); - - /* if the msb is 1, ASN.1 requires that we prepend a 0. - * Neither r nor s can be 0, so we can assume len > 0 at all times. */ - if( **p & 0x80 ) - { - if( *p - start < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); - - *--(*p) = 0x00; - len += 1; - } - - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, - MBEDTLS_ASN1_INTEGER ) ); - - return( (int) len ); -} - -/* Transcode signature from PSA format to ASN.1 sequence. - * See ecdsa_signature_to_asn1 in ecdsa.c, but with byte buffers instead of - * MPIs, and in-place. - * - * [in/out] sig: the signature pre- and post-transcoding - * [in/out] sig_len: signature length pre- and post-transcoding - * [int] buf_len: the available size the in/out buffer - */ -static int pk_ecdsa_sig_asn1_from_psa( unsigned char *sig, size_t *sig_len, - size_t buf_len ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - size_t len = 0; - const size_t rs_len = *sig_len / 2; - unsigned char *p = sig + buf_len; - - MBEDTLS_ASN1_CHK_ADD( len, asn1_write_mpibuf( &p, sig + rs_len, rs_len ) ); - MBEDTLS_ASN1_CHK_ADD( len, asn1_write_mpibuf( &p, sig, rs_len ) ); - - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &p, sig, len ) ); - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &p, sig, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); - - memmove( sig, p, len ); - *sig_len = len; - - return( 0 ); -} - -#endif /* MBEDTLS_ECDSA_C */ - -static int pk_opaque_sign_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) -{ -#if !defined(MBEDTLS_ECDSA_C) - ((void) ctx); - ((void) md_alg); - ((void) hash); - ((void) hash_len); - ((void) sig); - ((void) sig_len); - ((void) f_rng); - ((void) p_rng); - return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); -#else /* !MBEDTLS_ECDSA_C */ - const psa_key_id_t *key = (const psa_key_id_t *) ctx; - psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; - psa_algorithm_t alg = PSA_ALG_ECDSA( mbedtls_psa_translate_md( md_alg ) ); - size_t buf_len; - psa_status_t status; - - /* PSA has its own RNG */ - (void) f_rng; - (void) p_rng; - - /* PSA needs an output buffer of known size, but our API doesn't provide - * that information. Assume that the buffer is large enough for a - * maximal-length signature with that key (otherwise the application is - * buggy anyway). */ - status = psa_get_key_attributes( *key, &attributes ); - if( status != PSA_SUCCESS ) - return( mbedtls_psa_err_translate_pk( status ) ); - buf_len = MBEDTLS_ECDSA_MAX_SIG_LEN( psa_get_key_bits( &attributes ) ); - psa_reset_key_attributes( &attributes ); - if( buf_len > MBEDTLS_PK_SIGNATURE_MAX_SIZE ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - - /* make the signature */ - status = psa_sign_hash( *key, alg, hash, hash_len, - sig, buf_len, sig_len ); - if( status != PSA_SUCCESS ) - return( mbedtls_psa_err_translate_pk( status ) ); - - /* transcode it to ASN.1 sequence */ - return( pk_ecdsa_sig_asn1_from_psa( sig, sig_len, buf_len ) ); -#endif /* !MBEDTLS_ECDSA_C */ -} - -const mbedtls_pk_info_t mbedtls_pk_opaque_info = { - MBEDTLS_PK_OPAQUE, - "Opaque", - pk_opaque_get_bitlen, - pk_opaque_can_do, - NULL, /* verify - will be done later */ - pk_opaque_sign_wrap, -#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) - NULL, /* restartable verify - not relevant */ - NULL, /* restartable sign - not relevant */ -#endif - NULL, /* decrypt - will be done later */ - NULL, /* encrypt - will be done later */ - NULL, /* check_pair - could be done later or left NULL */ - pk_opaque_alloc_wrap, - pk_opaque_free_wrap, -#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) - NULL, /* restart alloc - not relevant */ - NULL, /* restart free - not relevant */ -#endif - NULL, /* debug - could be done later, or even left NULL */ -}; - -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - #endif /* MBEDTLS_PK_C */ diff --git a/third_party/mbedtls/pkcs11.c b/third_party/mbedtls/pkcs11.c deleted file mode 100644 index 959b73511..000000000 --- a/third_party/mbedtls/pkcs11.c +++ /dev/null @@ -1,238 +0,0 @@ -/* clang-format off */ - -/** - * \file pkcs11.c - * - * \brief Wrapper for PKCS#11 library libpkcs11-helper - * - * \author Adriaan de Jong - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "third_party/mbedtls/pkcs11.h" - -#if defined(MBEDTLS_PKCS11_C) - -#include "third_party/mbedtls/md.h" -#include "third_party/mbedtls/oid.h" -#include "third_party/mbedtls/x509_crt.h" - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - - -void mbedtls_pkcs11_init( mbedtls_pkcs11_context *ctx ) -{ - memset( ctx, 0, sizeof( mbedtls_pkcs11_context ) ); -} - -int mbedtls_pkcs11_x509_cert_bind( mbedtls_x509_crt *cert, pkcs11h_certificate_t pkcs11_cert ) -{ - int ret = 1; - unsigned char *cert_blob = NULL; - size_t cert_blob_size = 0; - - if( cert == NULL ) - { - ret = 2; - goto cleanup; - } - - if( pkcs11h_certificate_getCertificateBlob( pkcs11_cert, NULL, - &cert_blob_size ) != CKR_OK ) - { - ret = 3; - goto cleanup; - } - - cert_blob = mbedtls_calloc( 1, cert_blob_size ); - if( NULL == cert_blob ) - { - ret = 4; - goto cleanup; - } - - if( pkcs11h_certificate_getCertificateBlob( pkcs11_cert, cert_blob, - &cert_blob_size ) != CKR_OK ) - { - ret = 5; - goto cleanup; - } - - if( 0 != mbedtls_x509_crt_parse( cert, cert_blob, cert_blob_size ) ) - { - ret = 6; - goto cleanup; - } - - ret = 0; - -cleanup: - if( NULL != cert_blob ) - mbedtls_free( cert_blob ); - - return( ret ); -} - - -int mbedtls_pkcs11_priv_key_bind( mbedtls_pkcs11_context *priv_key, - pkcs11h_certificate_t pkcs11_cert ) -{ - int ret = 1; - mbedtls_x509_crt cert; - - mbedtls_x509_crt_init( &cert ); - - if( priv_key == NULL ) - goto cleanup; - - if( 0 != mbedtls_pkcs11_x509_cert_bind( &cert, pkcs11_cert ) ) - goto cleanup; - - priv_key->len = mbedtls_pk_get_len( &cert.pk ); - priv_key->pkcs11h_cert = pkcs11_cert; - - ret = 0; - -cleanup: - mbedtls_x509_crt_free( &cert ); - - return( ret ); -} - -void mbedtls_pkcs11_priv_key_free( mbedtls_pkcs11_context *priv_key ) -{ - if( NULL != priv_key ) - pkcs11h_certificate_freeCertificate( priv_key->pkcs11h_cert ); -} - -int mbedtls_pkcs11_decrypt( mbedtls_pkcs11_context *ctx, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len ) -{ - size_t input_len, output_len; - - if( NULL == ctx ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - - if( MBEDTLS_RSA_PRIVATE != mode ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - - output_len = input_len = ctx->len; - - if( input_len < 16 || input_len > output_max_len ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - - /* Determine size of output buffer */ - if( pkcs11h_certificate_decryptAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, input, - input_len, NULL, &output_len ) != CKR_OK ) - { - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - } - - if( output_len > output_max_len ) - return( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); - - if( pkcs11h_certificate_decryptAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, input, - input_len, output, &output_len ) != CKR_OK ) - { - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - } - *olen = output_len; - return( 0 ); -} - -int mbedtls_pkcs11_sign( mbedtls_pkcs11_context *ctx, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) -{ - size_t sig_len = 0, asn_len = 0, oid_size = 0; - unsigned char *p = sig; - const char *oid; - - if( NULL == ctx ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - - if( MBEDTLS_RSA_PRIVATE != mode ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - - if( md_alg != MBEDTLS_MD_NONE ) - { - const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type( md_alg ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - - if( mbedtls_oid_get_oid_by_md( md_alg, &oid, &oid_size ) != 0 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - - hashlen = mbedtls_md_get_size( md_info ); - asn_len = 10 + oid_size; - } - - sig_len = ctx->len; - if( hashlen > sig_len || asn_len > sig_len || - hashlen + asn_len > sig_len ) - { - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - } - - if( md_alg != MBEDTLS_MD_NONE ) - { - /* - * DigestInfo ::= SEQUENCE { - * digestAlgorithm DigestAlgorithmIdentifier, - * digest Digest } - * - * DigestAlgorithmIdentifier ::= AlgorithmIdentifier - * - * Digest ::= OCTET STRING - */ - *p++ = MBEDTLS_ASN1_SEQUENCE | MBEDTLS_ASN1_CONSTRUCTED; - *p++ = (unsigned char) ( 0x08 + oid_size + hashlen ); - *p++ = MBEDTLS_ASN1_SEQUENCE | MBEDTLS_ASN1_CONSTRUCTED; - *p++ = (unsigned char) ( 0x04 + oid_size ); - *p++ = MBEDTLS_ASN1_OID; - *p++ = oid_size & 0xFF; - memcpy( p, oid, oid_size ); - p += oid_size; - *p++ = MBEDTLS_ASN1_NULL; - *p++ = 0x00; - *p++ = MBEDTLS_ASN1_OCTET_STRING; - *p++ = hashlen; - } - - memcpy( p, hash, hashlen ); - - if( pkcs11h_certificate_signAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, sig, - asn_len + hashlen, sig, &sig_len ) != CKR_OK ) - { - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - } - - return( 0 ); -} - -#endif /* defined(MBEDTLS_PKCS11_C) */ diff --git a/third_party/mbedtls/pkcs11.h b/third_party/mbedtls/pkcs11.h deleted file mode 100644 index 75a140d73..000000000 --- a/third_party/mbedtls/pkcs11.h +++ /dev/null @@ -1,248 +0,0 @@ -/* clang-format off */ - -/** - * \file pkcs11.h - * - * \brief Wrapper for PKCS#11 library libpkcs11-helper - * - * \author Adriaan de Jong - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_PKCS11_H -#define MBEDTLS_PKCS11_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#if defined(MBEDTLS_PKCS11_C) - -#include "third_party/mbedtls/x509_crt.h" - -#include - -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(MBEDTLS_DEPRECATED_REMOVED) - -/** - * Context for PKCS #11 private keys. - */ -typedef struct mbedtls_pkcs11_context -{ - pkcs11h_certificate_t pkcs11h_cert; - int len; -} mbedtls_pkcs11_context; - -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif - -/** - * Initialize a mbedtls_pkcs11_context. - * (Just making memory references valid.) - * - * \deprecated This function is deprecated and will be removed in a - * future version of the library. - */ -MBEDTLS_DEPRECATED void mbedtls_pkcs11_init( mbedtls_pkcs11_context *ctx ); - -/** - * Fill in a mbed TLS certificate, based on the given PKCS11 helper certificate. - * - * \deprecated This function is deprecated and will be removed in a - * future version of the library. - * - * \param cert X.509 certificate to fill - * \param pkcs11h_cert PKCS #11 helper certificate - * - * \return 0 on success. - */ -MBEDTLS_DEPRECATED int mbedtls_pkcs11_x509_cert_bind( mbedtls_x509_crt *cert, - pkcs11h_certificate_t pkcs11h_cert ); - -/** - * Set up a mbedtls_pkcs11_context storing the given certificate. Note that the - * mbedtls_pkcs11_context will take over control of the certificate, freeing it when - * done. - * - * \deprecated This function is deprecated and will be removed in a - * future version of the library. - * - * \param priv_key Private key structure to fill. - * \param pkcs11_cert PKCS #11 helper certificate - * - * \return 0 on success - */ -MBEDTLS_DEPRECATED int mbedtls_pkcs11_priv_key_bind( - mbedtls_pkcs11_context *priv_key, - pkcs11h_certificate_t pkcs11_cert ); - -/** - * Free the contents of the given private key context. Note that the structure - * itself is not freed. - * - * \deprecated This function is deprecated and will be removed in a - * future version of the library. - * - * \param priv_key Private key structure to cleanup - */ -MBEDTLS_DEPRECATED void mbedtls_pkcs11_priv_key_free( - mbedtls_pkcs11_context *priv_key ); - -/** - * \brief Do an RSA private key decrypt, then remove the message - * padding - * - * \deprecated This function is deprecated and will be removed in a future - * version of the library. - * - * \param ctx PKCS #11 context - * \param mode must be MBEDTLS_RSA_PRIVATE, for compatibility with rsa.c's signature - * \param input buffer holding the encrypted data - * \param output buffer that will hold the plaintext - * \param olen will contain the plaintext length - * \param output_max_len maximum length of the output buffer - * - * \return 0 if successful, or an MBEDTLS_ERR_RSA_XXX error code - * - * \note The output buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used) otherwise - * an error is thrown. - */ -MBEDTLS_DEPRECATED int mbedtls_pkcs11_decrypt( mbedtls_pkcs11_context *ctx, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len ); - -/** - * \brief Do a private RSA to sign a message digest - * - * \deprecated This function is deprecated and will be removed in a future - * version of the library. - * - * \param ctx PKCS #11 context - * \param mode must be MBEDTLS_RSA_PRIVATE, for compatibility with rsa.c's signature - * \param md_alg a MBEDTLS_MD_XXX (use MBEDTLS_MD_NONE for signing raw data) - * \param hashlen message digest length (for MBEDTLS_MD_NONE only) - * \param hash buffer holding the message digest - * \param sig buffer that will hold the ciphertext - * - * \return 0 if the signing operation was successful, - * or an MBEDTLS_ERR_RSA_XXX error code - * - * \note The "sig" buffer must be as large as the size - * of ctx->N (eg. 128 bytes if RSA-1024 is used). - */ -MBEDTLS_DEPRECATED int mbedtls_pkcs11_sign( mbedtls_pkcs11_context *ctx, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ); - -/** - * SSL/TLS wrappers for PKCS#11 functions - * - * \deprecated This function is deprecated and will be removed in a future - * version of the library. - */ -MBEDTLS_DEPRECATED static inline int mbedtls_ssl_pkcs11_decrypt( void *ctx, - int mode, size_t *olen, - const unsigned char *input, unsigned char *output, - size_t output_max_len ) -{ - return mbedtls_pkcs11_decrypt( (mbedtls_pkcs11_context *) ctx, mode, olen, input, output, - output_max_len ); -} - -/** - * \brief This function signs a message digest using RSA. - * - * \deprecated This function is deprecated and will be removed in a future - * version of the library. - * - * \param ctx The PKCS #11 context. - * \param f_rng The RNG function. This parameter is unused. - * \param p_rng The RNG context. This parameter is unused. - * \param mode The operation to run. This must be set to - * MBEDTLS_RSA_PRIVATE, for compatibility with rsa.c's - * signature. - * \param md_alg The message digest algorithm. One of the MBEDTLS_MD_XXX - * must be passed to this function and MBEDTLS_MD_NONE can be - * used for signing raw data. - * \param hashlen The message digest length (for MBEDTLS_MD_NONE only). - * \param hash The buffer holding the message digest. - * \param sig The buffer that will hold the ciphertext. - * - * \return \c 0 if the signing operation was successful. - * \return A non-zero error code on failure. - * - * \note The \p sig buffer must be as large as the size of - * ctx->N. For example, 128 bytes if RSA-1024 is - * used. - */ -MBEDTLS_DEPRECATED static inline int mbedtls_ssl_pkcs11_sign( void *ctx, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, - int mode, mbedtls_md_type_t md_alg, unsigned int hashlen, - const unsigned char *hash, unsigned char *sig ) -{ - ((void) f_rng); - ((void) p_rng); - return mbedtls_pkcs11_sign( (mbedtls_pkcs11_context *) ctx, mode, md_alg, - hashlen, hash, sig ); -} - -/** - * This function gets the length of the private key. - * - * \deprecated This function is deprecated and will be removed in a future - * version of the library. - * - * \param ctx The PKCS #11 context. - * - * \return The length of the private key. - */ -MBEDTLS_DEPRECATED static inline size_t mbedtls_ssl_pkcs11_key_len( void *ctx ) -{ - return ( (mbedtls_pkcs11_context *) ctx )->len; -} - -#undef MBEDTLS_DEPRECATED - -#endif /* MBEDTLS_DEPRECATED_REMOVED */ - -#ifdef __cplusplus -} -#endif - -#endif /* MBEDTLS_PKCS11_C */ - -#endif /* MBEDTLS_PKCS11_H */ diff --git a/third_party/mbedtls/pkcs12.c b/third_party/mbedtls/pkcs12.c deleted file mode 100644 index e028bf107..000000000 --- a/third_party/mbedtls/pkcs12.c +++ /dev/null @@ -1,361 +0,0 @@ -/* clang-format off */ - -/* - * PKCS#12 Personal Information Exchange Syntax - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * The PKCS #12 Personal Information Exchange Syntax Standard v1.1 - * - * http://www.rsa.com/rsalabs/pkcs/files/h11301-wp-pkcs-12v1-1-personal-information-exchange-syntax.pdf - * ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-12/pkcs-12v1-1.asn - */ - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_PKCS12_C) - -#include "third_party/mbedtls/pkcs12.h" -#include "third_party/mbedtls/asn1.h" -#include "third_party/mbedtls/cipher.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_ARC4_C) -#include "third_party/mbedtls/arc4.h" -#endif - -#if defined(MBEDTLS_DES_C) -#include "third_party/mbedtls/des.h" -#endif - -#if defined(MBEDTLS_ASN1_PARSE_C) - -static int pkcs12_parse_pbe_params( mbedtls_asn1_buf *params, - mbedtls_asn1_buf *salt, int *iterations ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - unsigned char **p = ¶ms->p; - const unsigned char *end = params->p + params->len; - - /* - * pkcs-12PbeParams ::= SEQUENCE { - * salt OCTET STRING, - * iterations INTEGER - * } - * - */ - if( params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) - return( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); - - if( ( ret = mbedtls_asn1_get_tag( p, end, &salt->len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + ret ); - - salt->p = *p; - *p += salt->len; - - if( ( ret = mbedtls_asn1_get_int( p, end, iterations ) ) != 0 ) - return( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + ret ); - - if( *p != end ) - return( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -#define PKCS12_MAX_PWDLEN 128 - -static int pkcs12_pbe_derive_key_iv( mbedtls_asn1_buf *pbe_params, mbedtls_md_type_t md_type, - const unsigned char *pwd, size_t pwdlen, - unsigned char *key, size_t keylen, - unsigned char *iv, size_t ivlen ) -{ - int ret, iterations = 0; - mbedtls_asn1_buf salt; - size_t i; - unsigned char unipwd[PKCS12_MAX_PWDLEN * 2 + 2]; - - if( pwdlen > PKCS12_MAX_PWDLEN ) - return( MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA ); - - memset( &salt, 0, sizeof(mbedtls_asn1_buf) ); - memset( &unipwd, 0, sizeof(unipwd) ); - - if( ( ret = pkcs12_parse_pbe_params( pbe_params, &salt, - &iterations ) ) != 0 ) - return( ret ); - - for( i = 0; i < pwdlen; i++ ) - unipwd[i * 2 + 1] = pwd[i]; - - if( ( ret = mbedtls_pkcs12_derivation( key, keylen, unipwd, pwdlen * 2 + 2, - salt.p, salt.len, md_type, - MBEDTLS_PKCS12_DERIVE_KEY, iterations ) ) != 0 ) - { - return( ret ); - } - - if( iv == NULL || ivlen == 0 ) - return( 0 ); - - if( ( ret = mbedtls_pkcs12_derivation( iv, ivlen, unipwd, pwdlen * 2 + 2, - salt.p, salt.len, md_type, - MBEDTLS_PKCS12_DERIVE_IV, iterations ) ) != 0 ) - { - return( ret ); - } - return( 0 ); -} - -#undef PKCS12_MAX_PWDLEN - -int mbedtls_pkcs12_pbe_sha1_rc4_128( mbedtls_asn1_buf *pbe_params, int mode, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *data, size_t len, - unsigned char *output ) -{ -#if !defined(MBEDTLS_ARC4_C) - ((void) pbe_params); - ((void) mode); - ((void) pwd); - ((void) pwdlen); - ((void) data); - ((void) len); - ((void) output); - return( MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE ); -#else - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - unsigned char key[16]; - mbedtls_arc4_context ctx; - ((void) mode); - - mbedtls_arc4_init( &ctx ); - - if( ( ret = pkcs12_pbe_derive_key_iv( pbe_params, MBEDTLS_MD_SHA1, - pwd, pwdlen, - key, 16, NULL, 0 ) ) != 0 ) - { - return( ret ); - } - - mbedtls_arc4_setup( &ctx, key, 16 ); - if( ( ret = mbedtls_arc4_crypt( &ctx, len, data, output ) ) != 0 ) - goto exit; - -exit: - mbedtls_platform_zeroize( key, sizeof( key ) ); - mbedtls_arc4_free( &ctx ); - - return( ret ); -#endif /* MBEDTLS_ARC4_C */ -} - -int mbedtls_pkcs12_pbe( mbedtls_asn1_buf *pbe_params, int mode, - mbedtls_cipher_type_t cipher_type, mbedtls_md_type_t md_type, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *data, size_t len, - unsigned char *output ) -{ - int ret, keylen = 0; - unsigned char key[32]; - unsigned char iv[16]; - const mbedtls_cipher_info_t *cipher_info; - mbedtls_cipher_context_t cipher_ctx; - size_t olen = 0; - - cipher_info = mbedtls_cipher_info_from_type( cipher_type ); - if( cipher_info == NULL ) - return( MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE ); - - keylen = cipher_info->key_bitlen / 8; - - if( ( ret = pkcs12_pbe_derive_key_iv( pbe_params, md_type, pwd, pwdlen, - key, keylen, - iv, cipher_info->iv_size ) ) != 0 ) - { - return( ret ); - } - - mbedtls_cipher_init( &cipher_ctx ); - - if( ( ret = mbedtls_cipher_setup( &cipher_ctx, cipher_info ) ) != 0 ) - goto exit; - - if( ( ret = mbedtls_cipher_setkey( &cipher_ctx, key, 8 * keylen, (mbedtls_operation_t) mode ) ) != 0 ) - goto exit; - - if( ( ret = mbedtls_cipher_set_iv( &cipher_ctx, iv, cipher_info->iv_size ) ) != 0 ) - goto exit; - - if( ( ret = mbedtls_cipher_reset( &cipher_ctx ) ) != 0 ) - goto exit; - - if( ( ret = mbedtls_cipher_update( &cipher_ctx, data, len, - output, &olen ) ) != 0 ) - { - goto exit; - } - - if( ( ret = mbedtls_cipher_finish( &cipher_ctx, output + olen, &olen ) ) != 0 ) - ret = MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH; - -exit: - mbedtls_platform_zeroize( key, sizeof( key ) ); - mbedtls_platform_zeroize( iv, sizeof( iv ) ); - mbedtls_cipher_free( &cipher_ctx ); - - return( ret ); -} - -#endif /* MBEDTLS_ASN1_PARSE_C */ - -static void pkcs12_fill_buffer( unsigned char *data, size_t data_len, - const unsigned char *filler, size_t fill_len ) -{ - unsigned char *p = data; - size_t use_len; - - while( data_len > 0 ) - { - use_len = ( data_len > fill_len ) ? fill_len : data_len; - memcpy( p, filler, use_len ); - p += use_len; - data_len -= use_len; - } -} - -int mbedtls_pkcs12_derivation( unsigned char *data, size_t datalen, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *salt, size_t saltlen, - mbedtls_md_type_t md_type, int id, int iterations ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - unsigned int j; - - unsigned char diversifier[128]; - unsigned char salt_block[128], pwd_block[128], hash_block[128]; - unsigned char hash_output[MBEDTLS_MD_MAX_SIZE]; - unsigned char *p; - unsigned char c; - - size_t hlen, use_len, v, i; - - const mbedtls_md_info_t *md_info; - mbedtls_md_context_t md_ctx; - - // This version only allows max of 64 bytes of password or salt - if( datalen > 128 || pwdlen > 64 || saltlen > 64 ) - return( MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA ); - - md_info = mbedtls_md_info_from_type( md_type ); - if( md_info == NULL ) - return( MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE ); - - mbedtls_md_init( &md_ctx ); - - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) - return( ret ); - hlen = mbedtls_md_get_size( md_info ); - - if( hlen <= 32 ) - v = 64; - else - v = 128; - - memset( diversifier, (unsigned char) id, v ); - - pkcs12_fill_buffer( salt_block, v, salt, saltlen ); - pkcs12_fill_buffer( pwd_block, v, pwd, pwdlen ); - - p = data; - while( datalen > 0 ) - { - // Calculate hash( diversifier || salt_block || pwd_block ) - if( ( ret = mbedtls_md_starts( &md_ctx ) ) != 0 ) - goto exit; - - if( ( ret = mbedtls_md_update( &md_ctx, diversifier, v ) ) != 0 ) - goto exit; - - if( ( ret = mbedtls_md_update( &md_ctx, salt_block, v ) ) != 0 ) - goto exit; - - if( ( ret = mbedtls_md_update( &md_ctx, pwd_block, v ) ) != 0 ) - goto exit; - - if( ( ret = mbedtls_md_finish( &md_ctx, hash_output ) ) != 0 ) - goto exit; - - // Perform remaining ( iterations - 1 ) recursive hash calculations - for( i = 1; i < (size_t) iterations; i++ ) - { - if( ( ret = mbedtls_md( md_info, hash_output, hlen, hash_output ) ) != 0 ) - goto exit; - } - - use_len = ( datalen > hlen ) ? hlen : datalen; - memcpy( p, hash_output, use_len ); - datalen -= use_len; - p += use_len; - - if( datalen == 0 ) - break; - - // Concatenating copies of hash_output into hash_block (B) - pkcs12_fill_buffer( hash_block, v, hash_output, hlen ); - - // B += 1 - for( i = v; i > 0; i-- ) - if( ++hash_block[i - 1] != 0 ) - break; - - // salt_block += B - c = 0; - for( i = v; i > 0; i-- ) - { - j = salt_block[i - 1] + hash_block[i - 1] + c; - c = (unsigned char) (j >> 8); - salt_block[i - 1] = j & 0xFF; - } - - // pwd_block += B - c = 0; - for( i = v; i > 0; i-- ) - { - j = pwd_block[i - 1] + hash_block[i - 1] + c; - c = (unsigned char) (j >> 8); - pwd_block[i - 1] = j & 0xFF; - } - } - - ret = 0; - -exit: - mbedtls_platform_zeroize( salt_block, sizeof( salt_block ) ); - mbedtls_platform_zeroize( pwd_block, sizeof( pwd_block ) ); - mbedtls_platform_zeroize( hash_block, sizeof( hash_block ) ); - mbedtls_platform_zeroize( hash_output, sizeof( hash_output ) ); - - mbedtls_md_free( &md_ctx ); - - return( ret ); -} - -#endif /* MBEDTLS_PKCS12_C */ diff --git a/third_party/mbedtls/pkcs12.h b/third_party/mbedtls/pkcs12.h deleted file mode 100644 index 170f5e87d..000000000 --- a/third_party/mbedtls/pkcs12.h +++ /dev/null @@ -1,129 +0,0 @@ -/* clang-format off */ - -/** - * \file pkcs12.h - * - * \brief PKCS#12 Personal Information Exchange Syntax - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_PKCS12_H -#define MBEDTLS_PKCS12_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "third_party/mbedtls/md.h" -#include "third_party/mbedtls/cipher.h" -#include "third_party/mbedtls/asn1.h" - - -#define MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA -0x1F80 /**< Bad input parameters to function. */ -#define MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE -0x1F00 /**< Feature not available, e.g. unsupported encryption scheme. */ -#define MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT -0x1E80 /**< PBE ASN.1 data not as expected. */ -#define MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH -0x1E00 /**< Given private key password does not allow for correct decryption. */ - -#define MBEDTLS_PKCS12_DERIVE_KEY 1 /**< encryption/decryption key */ -#define MBEDTLS_PKCS12_DERIVE_IV 2 /**< initialization vector */ -#define MBEDTLS_PKCS12_DERIVE_MAC_KEY 3 /**< integrity / MAC key */ - -#define MBEDTLS_PKCS12_PBE_DECRYPT 0 -#define MBEDTLS_PKCS12_PBE_ENCRYPT 1 - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(MBEDTLS_ASN1_PARSE_C) - -/** - * \brief PKCS12 Password Based function (encryption / decryption) - * for pbeWithSHAAnd128BitRC4 - * - * \param pbe_params an ASN1 buffer containing the pkcs-12PbeParams structure - * \param mode either MBEDTLS_PKCS12_PBE_ENCRYPT or MBEDTLS_PKCS12_PBE_DECRYPT - * \param pwd the password used (may be NULL if no password is used) - * \param pwdlen length of the password (may be 0) - * \param input the input data - * \param len data length - * \param output the output buffer - * - * \return 0 if successful, or a MBEDTLS_ERR_XXX code - */ -int mbedtls_pkcs12_pbe_sha1_rc4_128( mbedtls_asn1_buf *pbe_params, int mode, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *input, size_t len, - unsigned char *output ); - -/** - * \brief PKCS12 Password Based function (encryption / decryption) - * for cipher-based and mbedtls_md-based PBE's - * - * \param pbe_params an ASN1 buffer containing the pkcs-12PbeParams structure - * \param mode either MBEDTLS_PKCS12_PBE_ENCRYPT or MBEDTLS_PKCS12_PBE_DECRYPT - * \param cipher_type the cipher used - * \param md_type the mbedtls_md used - * \param pwd the password used (may be NULL if no password is used) - * \param pwdlen length of the password (may be 0) - * \param input the input data - * \param len data length - * \param output the output buffer - * - * \return 0 if successful, or a MBEDTLS_ERR_XXX code - */ -int mbedtls_pkcs12_pbe( mbedtls_asn1_buf *pbe_params, int mode, - mbedtls_cipher_type_t cipher_type, mbedtls_md_type_t md_type, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *input, size_t len, - unsigned char *output ); - -#endif /* MBEDTLS_ASN1_PARSE_C */ - -/** - * \brief The PKCS#12 derivation function uses a password and a salt - * to produce pseudo-random bits for a particular "purpose". - * - * Depending on the given id, this function can produce an - * encryption/decryption key, an nitialization vector or an - * integrity key. - * - * \param data buffer to store the derived data in - * \param datalen length to fill - * \param pwd password to use (may be NULL if no password is used) - * \param pwdlen length of the password (may be 0) - * \param salt salt buffer to use - * \param saltlen length of the salt - * \param mbedtls_md mbedtls_md type to use during the derivation - * \param id id that describes the purpose (can be MBEDTLS_PKCS12_DERIVE_KEY, - * MBEDTLS_PKCS12_DERIVE_IV or MBEDTLS_PKCS12_DERIVE_MAC_KEY) - * \param iterations number of iterations - * - * \return 0 if successful, or a MD, BIGNUM type error. - */ -int mbedtls_pkcs12_derivation( unsigned char *data, size_t datalen, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *salt, size_t saltlen, - mbedtls_md_type_t mbedtls_md, int id, int iterations ); - -#ifdef __cplusplus -} -#endif - -#endif /* pkcs12.h */ diff --git a/third_party/mbedtls/pkcs5.c b/third_party/mbedtls/pkcs5.c index f902a4e15..dada0c77f 100644 --- a/third_party/mbedtls/pkcs5.c +++ b/third_party/mbedtls/pkcs5.c @@ -1,10 +1,18 @@ -/* clang-format off */ +#include "third_party/mbedtls/asn1.h" +#include "third_party/mbedtls/cipher.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/pkcs5.h" +#include "third_party/mbedtls/platform.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /** * \file pkcs5.c * @@ -34,26 +42,8 @@ asm(".include \"libc/disclaimer.inc\""); * http://tools.ietf.org/html/rfc6070 (Test vectors) */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_PKCS5_C) -#include "third_party/mbedtls/pkcs5.h" -#include "third_party/mbedtls/error.h" - -#if defined(MBEDTLS_ASN1_PARSE_C) -#include "third_party/mbedtls/asn1.h" -#include "third_party/mbedtls/cipher.h" -#include "third_party/mbedtls/oid.h" -#endif /* MBEDTLS_ASN1_PARSE_C */ - - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif - #if defined(MBEDTLS_ASN1_PARSE_C) static int pkcs5_parse_pbkdf2_params( const mbedtls_asn1_buf *params, mbedtls_asn1_buf *salt, int *iterations, diff --git a/third_party/mbedtls/pkcs5.h b/third_party/mbedtls/pkcs5.h index d6a17104d..d2792fad1 100644 --- a/third_party/mbedtls/pkcs5.h +++ b/third_party/mbedtls/pkcs5.h @@ -1,40 +1,9 @@ -/* clang-format off */ - -/** - * \file pkcs5.h - * - * \brief PKCS#5 functions - * - * \author Mathias Olsson - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_PKCS5_H #define MBEDTLS_PKCS5_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/asn1.h" +#include "third_party/mbedtls/config.h" #include "third_party/mbedtls/md.h" - +/* clang-format off */ #define MBEDTLS_ERR_PKCS5_BAD_INPUT_DATA -0x2f80 /**< Bad input parameters to function. */ #define MBEDTLS_ERR_PKCS5_INVALID_FORMAT -0x2f00 /**< Unexpected ASN.1 data. */ diff --git a/third_party/mbedtls/pkparse.c b/third_party/mbedtls/pkparse.c index 1c5d55347..028a526c9 100644 --- a/third_party/mbedtls/pkparse.c +++ b/third_party/mbedtls/pkparse.c @@ -1,5 +1,23 @@ -/* clang-format off */ +#include "libc/calls/calls.h" +#include "third_party/mbedtls/asn1.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/ecdsa.h" +#include "third_party/mbedtls/ecp.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/pk.h" +#include "third_party/mbedtls/pkcs5.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/rsa.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * Public Key layer for parsing key files and structures * @@ -19,44 +37,8 @@ * limitations under the License. */ -#include "libc/calls/calls.h" -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_PK_PARSE_C) -#include "third_party/mbedtls/pk.h" -#include "third_party/mbedtls/asn1.h" -#include "third_party/mbedtls/oid.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_RSA_C) -#include "third_party/mbedtls/rsa.h" -#endif -#if defined(MBEDTLS_ECP_C) -#include "third_party/mbedtls/ecp.h" -#endif -#if defined(MBEDTLS_ECDSA_C) -#include "third_party/mbedtls/ecdsa.h" -#endif -#if defined(MBEDTLS_PEM_PARSE_C) -#include "third_party/mbedtls/pem.h" -#endif -#if defined(MBEDTLS_PKCS5_C) -#include "third_party/mbedtls/pkcs5.h" -#endif -#if defined(MBEDTLS_PKCS12_C) -#include "third_party/mbedtls/pkcs12.h" -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - /* Parameter validation macros based on platform_util.h */ #define PK_VALIDATE_RET( cond ) \ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_PK_BAD_INPUT_DATA ) @@ -120,54 +102,74 @@ int mbedtls_pk_load_file( const char *path, unsigned char **buf, size_t *n ) return( 0 ); } -/* - * Load and parse a private key +/** + * \brief Load and parse a private key + * + * \param ctx The PK context to fill. It must have been initialized + * but not set up. + * \param path filename to read the private key from + * \param password Optional password to decrypt the file. + * Pass \c NULL if expecting a non-encrypted key. + * Pass a null-terminated string if expecting an encrypted + * key; a non-encrypted key will also be accepted. + * The empty password is not supported. + * + * \note On entry, ctx must be empty, either freshly initialised + * with mbedtls_pk_init() or reset with mbedtls_pk_free(). If you need a + * specific key type, check the result with mbedtls_pk_can_do(). + * + * \note The key is also checked for correctness. + * + * \return 0 if successful, or a specific PK or PEM error code */ int mbedtls_pk_parse_keyfile( mbedtls_pk_context *ctx, - const char *path, const char *pwd ) + const char *path, const char *pwd ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t n; unsigned char *buf; - PK_VALIDATE_RET( ctx != NULL ); PK_VALIDATE_RET( path != NULL ); - if( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) return( ret ); - if( pwd == NULL ) ret = mbedtls_pk_parse_key( ctx, buf, n, NULL, 0 ); else ret = mbedtls_pk_parse_key( ctx, buf, n, (const unsigned char *) pwd, strlen( pwd ) ); - mbedtls_platform_zeroize( buf, n ); mbedtls_free( buf ); - return( ret ); } -/* - * Load and parse a public key +/** + * \brief Load and parse a public key + * + * \param ctx The PK context to fill. It must have been initialized + * but not set up. + * \param path filename to read the public key from + * + * \note On entry, ctx must be empty, either freshly initialised + * with mbedtls_pk_init() or reset with mbedtls_pk_free(). If + * you need a specific key type, check the result with + * mbedtls_pk_can_do(). + * + * \note The key is also checked for correctness. + * + * \return 0 if successful, or a specific PK or PEM error code */ int mbedtls_pk_parse_public_keyfile( mbedtls_pk_context *ctx, const char *path ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t n; unsigned char *buf; - PK_VALIDATE_RET( ctx != NULL ); PK_VALIDATE_RET( path != NULL ); - if( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) return( ret ); - ret = mbedtls_pk_parse_public_key( ctx, buf, n ); - mbedtls_platform_zeroize( buf, n ); mbedtls_free( buf ); - return( ret ); } #endif /* MBEDTLS_FS_IO */ @@ -185,11 +187,9 @@ static int pk_get_ecparams( unsigned char **p, const unsigned char *end, mbedtls_asn1_buf *params ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - if ( end - *p < 1 ) return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - /* Tag may be either OID or SEQUENCE */ params->tag = **p; if( params->tag != MBEDTLS_ASN1_OID @@ -201,19 +201,15 @@ static int pk_get_ecparams( unsigned char **p, const unsigned char *end, return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); } - if( ( ret = mbedtls_asn1_get_tag( p, end, ¶ms->len, params->tag ) ) != 0 ) { return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } - params->p = *p; *p += params->len; - if( *p != end ) return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); } @@ -245,14 +241,11 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ const unsigned char *end_field, *end_curve; size_t len; int ver; - /* SpecifiedECDomainVersion ::= INTEGER { 1, 2, 3 } */ if( ( ret = mbedtls_asn1_get_int( &p, end, &ver ) ) != 0 ) return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( ver < 1 || ver > 3 ) return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); - /* * FieldID { FIELD-ID:IOSet } ::= SEQUENCE { -- Finite field * fieldType FIELD-ID.&id({IOSet}), @@ -262,9 +255,7 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) return( ret ); - end_field = p + len; - /* * FIELD-ID ::= TYPE-IDENTIFIER * FieldTypes FIELD-ID ::= { @@ -275,25 +266,19 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ */ if( ( ret = mbedtls_asn1_get_tag( &p, end_field, &len, MBEDTLS_ASN1_OID ) ) != 0 ) return( ret ); - if( len != MBEDTLS_OID_SIZE( MBEDTLS_OID_ANSI_X9_62_PRIME_FIELD ) || memcmp( p, MBEDTLS_OID_ANSI_X9_62_PRIME_FIELD, len ) != 0 ) { return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); } - p += len; - /* Prime-p ::= INTEGER -- Field of size p. */ if( ( ret = mbedtls_asn1_get_mpi( &p, end_field, &grp->P ) ) != 0 ) return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - grp->pbits = mbedtls_mpi_bitlen( &grp->P ); - if( p != end_field ) return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - /* * Curve ::= SEQUENCE { * a FieldElement, @@ -306,9 +291,7 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) return( ret ); - end_curve = p + len; - /* * FieldElement ::= OCTET STRING * containing an integer in the case of a prime field @@ -318,31 +301,24 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ { return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } - p += len; - if( ( ret = mbedtls_asn1_get_tag( &p, end_curve, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 || ( ret = mbedtls_mpi_read_binary( &grp->B, p, len ) ) != 0 ) { return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } - p += len; - /* Ignore seed BIT STRING OPTIONAL */ if( ( ret = mbedtls_asn1_get_tag( &p, end_curve, &len, MBEDTLS_ASN1_BIT_STRING ) ) == 0 ) p += len; - if( p != end_curve ) return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - /* * ECPoint ::= OCTET STRING */ if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( ( ret = mbedtls_ecp_point_read_binary( grp, &grp->G, ( const unsigned char *) p, len ) ) != 0 ) { @@ -360,21 +336,16 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); } } - p += len; - /* * order INTEGER */ if( ( ret = mbedtls_asn1_get_mpi( &p, end, &grp->N ) ) != 0 ) return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - grp->nbits = mbedtls_mpi_bitlen( &grp->N ); - /* * Allow optional elements by purposefully not enforcing p == end here. */ - return( 0 ); } @@ -387,15 +358,12 @@ static int pk_group_id_from_group( const mbedtls_ecp_group *grp, mbedtls_ecp_gro int ret = 0; mbedtls_ecp_group ref; const mbedtls_ecp_group_id *id; - mbedtls_ecp_group_init( &ref ); - for( id = mbedtls_ecp_grp_id_list(); *id != MBEDTLS_ECP_DP_NONE; id++ ) { /* Load the group associated to that id */ mbedtls_ecp_group_free( &ref ); MBEDTLS_MPI_CHK( mbedtls_ecp_group_load( &ref, *id ) ); - /* Compare to the group we were given, starting with easy tests */ if( grp->pbits == ref.pbits && grp->nbits == ref.nbits && mbedtls_mpi_cmp_mpi( &grp->P, &ref.P ) == 0 && @@ -409,17 +377,12 @@ static int pk_group_id_from_group( const mbedtls_ecp_group *grp, mbedtls_ecp_gro { break; } - } - cleanup: mbedtls_ecp_group_free( &ref ); - *grp_id = *id; - if( ret == 0 && *id == MBEDTLS_ECP_DP_NONE ) ret = MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE; - return( ret ); } @@ -603,13 +566,22 @@ static int pk_get_pk_alg( unsigned char **p, return( 0 ); } -/* +/** + * \brief Parse a SubjectPublicKeyInfo DER structure + * * SubjectPublicKeyInfo ::= SEQUENCE { * algorithm AlgorithmIdentifier, * subjectPublicKey BIT STRING } + * + * \param p the position in the ASN.1 data + * \param end end of the buffer + * \param pk The PK context to fill. It must have been initialized + * but not set up. + * + * \return 0 if successful, or a specific PK error code */ int mbedtls_pk_parse_subpubkey( unsigned char **p, const unsigned char *end, - mbedtls_pk_context *pk ) + mbedtls_pk_context *pk ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t len; @@ -1209,12 +1181,37 @@ static int pk_parse_key_pkcs8_encrypted_der( } #endif /* MBEDTLS_PKCS12_C || MBEDTLS_PKCS5_C */ -/* - * Parse a private key +/** + * \brief Parse a private key in PEM or DER format + * + * \param ctx The PK context to fill. It must have been initialized + * but not set up. + * \param key Input buffer to parse. + * The buffer must contain the input exactly, with no + * extra trailing material. For PEM, the buffer must + * contain a null-terminated string. + * \param keylen Size of \b key in bytes. + * For PEM data, this includes the terminating null byte, + * so \p keylen must be equal to `strlen(key) + 1`. + * \param pwd Optional password for decryption. + * Pass \c NULL if expecting a non-encrypted key. + * Pass a string of \p pwdlen bytes if expecting an encrypted + * key; a non-encrypted key will also be accepted. + * The empty password is not supported. + * \param pwdlen Size of the password in bytes. + * Ignored if \p pwd is \c NULL. + * + * \note On entry, ctx must be empty, either freshly initialised + * with mbedtls_pk_init() or reset with mbedtls_pk_free(). If you need a + * specific key type, check the result with mbedtls_pk_can_do(). + * + * \note The key is also checked for correctness. + * + * \return 0 if successful, or a specific PK or PEM error code */ int mbedtls_pk_parse_key( mbedtls_pk_context *pk, - const unsigned char *key, size_t keylen, - const unsigned char *pwd, size_t pwdlen ) + const unsigned char *key, size_t keylen, + const unsigned char *pwd, size_t pwdlen ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; const mbedtls_pk_info_t *pk_info; @@ -1422,11 +1419,29 @@ int mbedtls_pk_parse_key( mbedtls_pk_context *pk, return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); } -/* - * Parse a public key +/** + * \brief Parse a public key in PEM or DER format + * + * \param ctx The PK context to fill. It must have been initialized + * but not set up. + * \param key Input buffer to parse. + * The buffer must contain the input exactly, with no + * extra trailing material. For PEM, the buffer must + * contain a null-terminated string. + * \param keylen Size of \b key in bytes. + * For PEM data, this includes the terminating null byte, + * so \p keylen must be equal to `strlen(key) + 1`. + * + * \note On entry, ctx must be empty, either freshly initialised + * with mbedtls_pk_init() or reset with mbedtls_pk_free(). If you need a + * specific key type, check the result with mbedtls_pk_can_do(). + * + * \note The key is also checked for correctness. + * + * \return 0 if successful, or a specific PK or PEM error code */ int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, - const unsigned char *key, size_t keylen ) + const unsigned char *key, size_t keylen ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; unsigned char *p; @@ -1437,12 +1452,10 @@ int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, size_t len; mbedtls_pem_context pem; #endif - PK_VALIDATE_RET( ctx != NULL ); if( keylen == 0 ) return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); PK_VALIDATE_RET( key != NULL || keylen == 0 ); - #if defined(MBEDTLS_PEM_PARSE_C) mbedtls_pem_init( &pem ); #if defined(MBEDTLS_RSA_C) @@ -1454,19 +1467,15 @@ int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, "-----BEGIN RSA PUBLIC KEY-----", "-----END RSA PUBLIC KEY-----", key, NULL, 0, &len ); - if( ret == 0 ) { p = pem.buf; if( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == NULL ) return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - if( ( ret = mbedtls_pk_setup( ctx, pk_info ) ) != 0 ) return( ret ); - if ( ( ret = pk_get_rsapubkey( &p, p + pem.buflen, mbedtls_pk_rsa( *ctx ) ) ) != 0 ) mbedtls_pk_free( ctx ); - mbedtls_pem_free( &pem ); return( ret ); } @@ -1476,7 +1485,6 @@ int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, return( ret ); } #endif /* MBEDTLS_RSA_C */ - /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */ if( key[keylen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; @@ -1485,14 +1493,12 @@ int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, "-----BEGIN PUBLIC KEY-----", "-----END PUBLIC KEY-----", key, NULL, 0, &len ); - if( ret == 0 ) { /* * Was PEM encoded */ p = pem.buf; - ret = mbedtls_pk_parse_subpubkey( &p, p + pem.buflen, ctx ); mbedtls_pem_free( &pem ); return( ret ); @@ -1504,14 +1510,11 @@ int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, } mbedtls_pem_free( &pem ); #endif /* MBEDTLS_PEM_PARSE_C */ - #if defined(MBEDTLS_RSA_C) if( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == NULL ) return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - if( ( ret = mbedtls_pk_setup( ctx, pk_info ) ) != 0 ) return( ret ); - p = (unsigned char *)key; ret = pk_get_rsapubkey( &p, p + keylen, mbedtls_pk_rsa( *ctx ) ); if( ret == 0 ) @@ -1525,9 +1528,7 @@ int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, } #endif /* MBEDTLS_RSA_C */ p = (unsigned char *) key; - ret = mbedtls_pk_parse_subpubkey( &p, p + keylen, ctx ); - return( ret ); } diff --git a/libc/rand/g_rando64.c b/third_party/mbedtls/pktype.c similarity index 67% rename from libc/rand/g_rando64.c rename to third_party/mbedtls/pktype.c index fa5722d2e..93db27222 100644 --- a/libc/rand/g_rando64.c +++ b/third_party/mbedtls/pktype.c @@ -1,7 +1,7 @@ /*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ │vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ ╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ │ │ │ Permission to use, copy, modify, and/or distribute this software for │ │ any purpose with or without fee is hereby granted, provided that the │ @@ -16,32 +16,27 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/bits/bits.h" -#include "libc/dce.h" -#include "libc/rand/rand.h" -#include "libc/rand/xorshift.h" -#include "libc/sysv/consts/auxv.h" +#include "third_party/mbedtls/pk.h" -hidden uint64_t g_rando64; - -textstartup static void g_rando64_init() { - intptr_t *auxvp; - if (!IsXnu() && !IsWindows()) { - asm("mov\t%%r15,%0" : "=r"(auxvp)); /* libc/crt/crt.S */ - for (; auxvp[0]; auxvp += 2) { - if (auxvp[0] == AT_RANDOM) { - uint8_t(*sysrandseed)[16] = (uint8_t(*)[16])auxvp[1]; - if (sysrandseed) g_rando64 ^= READ64LE(&(*sysrandseed)[0]); - return; - } - } - } - g_rando64 ^= kMarsagliaXorshift64Seed; - if (IsWindows()) { - g_rando64 ^= winrandish(); - } else { - devrand(&g_rando64, sizeof(g_rando64)); +const char *mbedtls_pk_type_name(mbedtls_pk_type_t t) { + switch (t) { + case MBEDTLS_PK_NONE: + return "NONE"; + case MBEDTLS_PK_RSA: + return "RSA"; + case MBEDTLS_PK_ECKEY: + return "ECKEY"; + case MBEDTLS_PK_ECKEY_DH: + return "ECKEY_DH"; + case MBEDTLS_PK_ECDSA: + return "ECDSA"; + case MBEDTLS_PK_RSA_ALT: + return "RSA_ALT"; + case MBEDTLS_PK_RSASSA_PSS: + return "RSASSA_PSS"; + case MBEDTLS_PK_OPAQUE: + return "OPAQUE"; + default: + return 0; } } - -const void *const g_rando64_ctor[] initarray = {g_rando64_init}; diff --git a/third_party/mbedtls/pkwrite.c b/third_party/mbedtls/pkwrite.c index 373c609a8..130f2d857 100644 --- a/third_party/mbedtls/pkwrite.c +++ b/third_party/mbedtls/pkwrite.c @@ -1,5 +1,22 @@ -/* clang-format off */ +#include "third_party/mbedtls/asn1write.h" +#include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/ecdsa.h" +#include "third_party/mbedtls/ecp.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/pk.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/rsa.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * Public Key layer for writing key files and structures * @@ -19,43 +36,8 @@ * limitations under the License. */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_PK_WRITE_C) -#include "third_party/mbedtls/pk.h" -#include "third_party/mbedtls/asn1write.h" -#include "third_party/mbedtls/oid.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_RSA_C) -#include "third_party/mbedtls/rsa.h" -#endif -#if defined(MBEDTLS_ECP_C) -#include "third_party/mbedtls/bignum.h" -#include "third_party/mbedtls/ecp.h" -#include "third_party/mbedtls/platform_util.h" -#endif -#if defined(MBEDTLS_ECDSA_C) -#include "third_party/mbedtls/ecdsa.h" -#endif -#if defined(MBEDTLS_PEM_WRITE_C) -#include "third_party/mbedtls/pem.h" -#endif - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/psa_util.h" -#endif -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - /* Parameter validation macros based on platform_util.h */ #define PK_VALIDATE_RET( cond ) \ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_PK_BAD_INPUT_DATA ) @@ -173,6 +155,16 @@ exit: } #endif /* MBEDTLS_ECP_C */ +/** + * \brief Write a subjectPublicKey to ASN.1 data + * Note: function works backwards in data buffer + * + * \param p reference to current position pointer + * \param start start of the buffer (for bounds-checking) + * \param key PK context which must contain a valid public or private key. + * + * \return the length written or a negative error code + */ int mbedtls_pk_write_pubkey( unsigned char **p, unsigned char *start, const mbedtls_pk_context *key ) { @@ -222,6 +214,19 @@ int mbedtls_pk_write_pubkey( unsigned char **p, unsigned char *start, return( (int) len ); } +/** + * \brief Write a public key to a SubjectPublicKeyInfo DER structure + * Note: data is written at the end of the buffer! Use the + * return value to determine where you should start + * using the buffer + * + * \param ctx PK context which must contain a valid public or private key. + * \param buf buffer to write to + * \param size size of the buffer + * + * \return length of data written if successful, or a specific + * error code + */ int mbedtls_pk_write_pubkey_der( mbedtls_pk_context *key, unsigned char *buf, size_t size ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; @@ -310,6 +315,19 @@ int mbedtls_pk_write_pubkey_der( mbedtls_pk_context *key, unsigned char *buf, si return( (int) len ); } +/** + * \brief Write a private key to a PKCS#1 or SEC1 DER structure + * Note: data is written at the end of the buffer! Use the + * return value to determine where you should start + * using the buffer + * + * \param ctx PK context which must contain a valid private key. + * \param buf buffer to write to + * \param size size of the buffer + * + * \return length of data written if successful, or a specific + * error code + */ int mbedtls_pk_write_key_der( mbedtls_pk_context *key, unsigned char *buf, size_t size ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; @@ -553,6 +571,16 @@ int mbedtls_pk_write_key_der( mbedtls_pk_context *key, unsigned char *buf, size_ #define PRV_DER_MAX_BYTES ( RSA_PRV_DER_MAX_BYTES > ECP_PRV_DER_MAX_BYTES ? \ RSA_PRV_DER_MAX_BYTES : ECP_PRV_DER_MAX_BYTES ) +/** + * \brief Write a public key to a PEM string + * + * \param ctx PK context which must contain a valid public or private key. + * \param buf Buffer to write to. The output includes a + * terminating null byte. + * \param size Size of the buffer in bytes. + * + * \return 0 if successful, or a specific error code + */ int mbedtls_pk_write_pubkey_pem( mbedtls_pk_context *key, unsigned char *buf, size_t size ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; @@ -578,6 +606,16 @@ int mbedtls_pk_write_pubkey_pem( mbedtls_pk_context *key, unsigned char *buf, si return( 0 ); } +/** + * \brief Write a private key to a PKCS#1 or SEC1 PEM string + * + * \param ctx PK context which must contain a valid private key. + * \param buf Buffer to write to. The output includes a + * terminating null byte. + * \param size Size of the buffer in bytes. + * + * \return 0 if successful, or a specific error code + */ int mbedtls_pk_write_key_pem( mbedtls_pk_context *key, unsigned char *buf, size_t size ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; diff --git a/third_party/mbedtls/platform.c b/third_party/mbedtls/platform.c index 0366e0208..ebd4590ba 100644 --- a/third_party/mbedtls/platform.c +++ b/third_party/mbedtls/platform.c @@ -1,391 +1,8 @@ -/* clang-format off */ - -asm(".ident\t\"\\n\\n\ -Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); -asm(".include \"libc/disclaimer.inc\""); - -/* - * Platform abstraction layer - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_PLATFORM_C) - #include "third_party/mbedtls/platform.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" -/* The compile time configuration of memory allocation via the macros - * MBEDTLS_PLATFORM_{FREE/CALLOC}_MACRO takes precedence over the runtime - * configuration via mbedtls_platform_set_calloc_free(). So, omit everything - * related to the latter if MBEDTLS_PLATFORM_{FREE/CALLOC}_MACRO are defined. */ -#if defined(MBEDTLS_PLATFORM_MEMORY) && \ - !( defined(MBEDTLS_PLATFORM_CALLOC_MACRO) && \ - defined(MBEDTLS_PLATFORM_FREE_MACRO) ) - -#if !defined(MBEDTLS_PLATFORM_STD_CALLOC) -static void *platform_calloc_uninit( size_t n, size_t size ) -{ - ((void) n); - ((void) size); - return( NULL ); +int mbedtls_platform_setup(mbedtls_platform_context *ctx) { + return 0; } -#define MBEDTLS_PLATFORM_STD_CALLOC platform_calloc_uninit -#endif /* !MBEDTLS_PLATFORM_STD_CALLOC */ - -#if !defined(MBEDTLS_PLATFORM_STD_FREE) -static void platform_free_uninit( void *ptr ) -{ - ((void) ptr); +void mbedtls_platform_teardown(mbedtls_platform_context *ctx) { } - -#define MBEDTLS_PLATFORM_STD_FREE platform_free_uninit -#endif /* !MBEDTLS_PLATFORM_STD_FREE */ - -static void * (*mbedtls_calloc_func)( size_t, size_t ) = MBEDTLS_PLATFORM_STD_CALLOC; -static void (*mbedtls_free_func)( void * ) = MBEDTLS_PLATFORM_STD_FREE; - -void * mbedtls_calloc( size_t nmemb, size_t size ) -{ - return (*mbedtls_calloc_func)( nmemb, size ); -} - -void mbedtls_free( void * ptr ) -{ - (*mbedtls_free_func)( ptr ); -} - -int mbedtls_platform_set_calloc_free( void * (*calloc_func)( size_t, size_t ), - void (*free_func)( void * ) ) -{ - mbedtls_calloc_func = calloc_func; - mbedtls_free_func = free_func; - return( 0 ); -} -#endif /* MBEDTLS_PLATFORM_MEMORY && - !( defined(MBEDTLS_PLATFORM_CALLOC_MACRO) && - defined(MBEDTLS_PLATFORM_FREE_MACRO) ) */ - -#if defined(MBEDTLS_PLATFORM_HAS_NON_CONFORMING_SNPRINTF) -int mbedtls_platform_win32_snprintf( char *s, size_t n, const char *fmt, ... ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - va_list argp; - - va_start( argp, fmt ); - ret = mbedtls_vsnprintf( s, n, fmt, argp ); - va_end( argp ); - - return( ret ); -} -#endif - -#if defined(MBEDTLS_PLATFORM_SNPRINTF_ALT) -#if !defined(MBEDTLS_PLATFORM_STD_SNPRINTF) -/* - * Make dummy function to prevent NULL pointer dereferences - */ -static int platform_snprintf_uninit( char * s, size_t n, - const char * format, ... ) -{ - ((void) s); - ((void) n); - ((void) format); - return( 0 ); -} - -#define MBEDTLS_PLATFORM_STD_SNPRINTF platform_snprintf_uninit -#endif /* !MBEDTLS_PLATFORM_STD_SNPRINTF */ - -int (*mbedtls_snprintf)( char * s, size_t n, - const char * format, - ... ) = MBEDTLS_PLATFORM_STD_SNPRINTF; - -int mbedtls_platform_set_snprintf( int (*snprintf_func)( char * s, size_t n, - const char * format, - ... ) ) -{ - mbedtls_snprintf = snprintf_func; - return( 0 ); -} -#endif /* MBEDTLS_PLATFORM_SNPRINTF_ALT */ - -#if defined(MBEDTLS_PLATFORM_HAS_NON_CONFORMING_VSNPRINTF) -int mbedtls_platform_win32_vsnprintf( char *s, size_t n, const char *fmt, va_list arg ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - - /* Avoid calling the invalid parameter handler by checking ourselves */ - if( s == NULL || n == 0 || fmt == NULL ) - return( -1 ); - -#if defined(_TRUNCATE) - ret = vsnprintf_s( s, n, _TRUNCATE, fmt, arg ); -#else - ret = vsnprintf( s, n, fmt, arg ); - if( ret < 0 || (size_t) ret == n ) - { - s[n-1] = '\0'; - ret = -1; - } -#endif - - return( ret ); -} -#endif - -#if defined(MBEDTLS_PLATFORM_VSNPRINTF_ALT) -#if !defined(MBEDTLS_PLATFORM_STD_VSNPRINTF) -/* - * Make dummy function to prevent NULL pointer dereferences - */ -static int platform_vsnprintf_uninit( char * s, size_t n, - const char * format, va_list arg ) -{ - ((void) s); - ((void) n); - ((void) format); - ((void) arg); - return( -1 ); -} - -#define MBEDTLS_PLATFORM_STD_VSNPRINTF platform_vsnprintf_uninit -#endif /* !MBEDTLS_PLATFORM_STD_VSNPRINTF */ - -int (*mbedtls_vsnprintf)( char * s, size_t n, - const char * format, - va_list arg ) = MBEDTLS_PLATFORM_STD_VSNPRINTF; - -int mbedtls_platform_set_vsnprintf( int (*vsnprintf_func)( char * s, size_t n, - const char * format, - va_list arg ) ) -{ - mbedtls_vsnprintf = vsnprintf_func; - return( 0 ); -} -#endif /* MBEDTLS_PLATFORM_VSNPRINTF_ALT */ - -#if defined(MBEDTLS_PLATFORM_PRINTF_ALT) -#if !defined(MBEDTLS_PLATFORM_STD_PRINTF) -/* - * Make dummy function to prevent NULL pointer dereferences - */ -static int platform_printf_uninit( const char *format, ... ) -{ - ((void) format); - return( 0 ); -} - -#define MBEDTLS_PLATFORM_STD_PRINTF platform_printf_uninit -#endif /* !MBEDTLS_PLATFORM_STD_PRINTF */ - -int (*mbedtls_printf)( const char *, ... ) = MBEDTLS_PLATFORM_STD_PRINTF; - -int mbedtls_platform_set_printf( int (*printf_func)( const char *, ... ) ) -{ - mbedtls_printf = printf_func; - return( 0 ); -} -#endif /* MBEDTLS_PLATFORM_PRINTF_ALT */ - -#if defined(MBEDTLS_PLATFORM_FPRINTF_ALT) -#if !defined(MBEDTLS_PLATFORM_STD_FPRINTF) -/* - * Make dummy function to prevent NULL pointer dereferences - */ -static int platform_fprintf_uninit( FILE *stream, const char *format, ... ) -{ - ((void) stream); - ((void) format); - return( 0 ); -} - -#define MBEDTLS_PLATFORM_STD_FPRINTF platform_fprintf_uninit -#endif /* !MBEDTLS_PLATFORM_STD_FPRINTF */ - -int (*mbedtls_fprintf)( FILE *, const char *, ... ) = - MBEDTLS_PLATFORM_STD_FPRINTF; - -int mbedtls_platform_set_fprintf( int (*fprintf_func)( FILE *, const char *, ... ) ) -{ - mbedtls_fprintf = fprintf_func; - return( 0 ); -} -#endif /* MBEDTLS_PLATFORM_FPRINTF_ALT */ - -#if defined(MBEDTLS_PLATFORM_EXIT_ALT) -#if !defined(MBEDTLS_PLATFORM_STD_EXIT) -/* - * Make dummy function to prevent NULL pointer dereferences - */ -static void platform_exit_uninit( int status ) -{ - ((void) status); -} - -#define MBEDTLS_PLATFORM_STD_EXIT platform_exit_uninit -#endif /* !MBEDTLS_PLATFORM_STD_EXIT */ - -void (*mbedtls_exit)( int status ) = MBEDTLS_PLATFORM_STD_EXIT; - -int mbedtls_platform_set_exit( void (*exit_func)( int status ) ) -{ - mbedtls_exit = exit_func; - return( 0 ); -} -#endif /* MBEDTLS_PLATFORM_EXIT_ALT */ - -#if defined(MBEDTLS_HAVE_TIME) - -#if defined(MBEDTLS_PLATFORM_TIME_ALT) -#if !defined(MBEDTLS_PLATFORM_STD_TIME) -/* - * Make dummy function to prevent NULL pointer dereferences - */ -static mbedtls_time_t platform_time_uninit( mbedtls_time_t* timer ) -{ - ((void) timer); - return( 0 ); -} - -#define MBEDTLS_PLATFORM_STD_TIME platform_time_uninit -#endif /* !MBEDTLS_PLATFORM_STD_TIME */ - -mbedtls_time_t (*mbedtls_time)( mbedtls_time_t* timer ) = MBEDTLS_PLATFORM_STD_TIME; - -int mbedtls_platform_set_time( mbedtls_time_t (*time_func)( mbedtls_time_t* timer ) ) -{ - mbedtls_time = time_func; - return( 0 ); -} -#endif /* MBEDTLS_PLATFORM_TIME_ALT */ - -#endif /* MBEDTLS_HAVE_TIME */ - -#if defined(MBEDTLS_ENTROPY_NV_SEED) -#if !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS) && defined(MBEDTLS_FS_IO) -/* Default implementations for the platform independent seed functions use - * standard libc file functions to read from and write to a pre-defined filename - */ -int mbedtls_platform_std_nv_seed_read( unsigned char *buf, size_t buf_len ) -{ - FILE *file; - size_t n; - - if( ( file = fopen( MBEDTLS_PLATFORM_STD_NV_SEED_FILE, "rb" ) ) == NULL ) - return( -1 ); - - if( ( n = fread( buf, 1, buf_len, file ) ) != buf_len ) - { - fclose( file ); - mbedtls_platform_zeroize( buf, buf_len ); - return( -1 ); - } - - fclose( file ); - return( (int)n ); -} - -int mbedtls_platform_std_nv_seed_write( unsigned char *buf, size_t buf_len ) -{ - FILE *file; - size_t n; - - if( ( file = fopen( MBEDTLS_PLATFORM_STD_NV_SEED_FILE, "w" ) ) == NULL ) - return -1; - - if( ( n = fwrite( buf, 1, buf_len, file ) ) != buf_len ) - { - fclose( file ); - return -1; - } - - fclose( file ); - return( (int)n ); -} -#endif /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */ - -#if defined(MBEDTLS_PLATFORM_NV_SEED_ALT) -#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_READ) -/* - * Make dummy function to prevent NULL pointer dereferences - */ -static int platform_nv_seed_read_uninit( unsigned char *buf, size_t buf_len ) -{ - ((void) buf); - ((void) buf_len); - return( -1 ); -} - -#define MBEDTLS_PLATFORM_STD_NV_SEED_READ platform_nv_seed_read_uninit -#endif /* !MBEDTLS_PLATFORM_STD_NV_SEED_READ */ - -#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_WRITE) -/* - * Make dummy function to prevent NULL pointer dereferences - */ -static int platform_nv_seed_write_uninit( unsigned char *buf, size_t buf_len ) -{ - ((void) buf); - ((void) buf_len); - return( -1 ); -} - -#define MBEDTLS_PLATFORM_STD_NV_SEED_WRITE platform_nv_seed_write_uninit -#endif /* !MBEDTLS_PLATFORM_STD_NV_SEED_WRITE */ - -int (*mbedtls_nv_seed_read)( unsigned char *buf, size_t buf_len ) = - MBEDTLS_PLATFORM_STD_NV_SEED_READ; -int (*mbedtls_nv_seed_write)( unsigned char *buf, size_t buf_len ) = - MBEDTLS_PLATFORM_STD_NV_SEED_WRITE; - -int mbedtls_platform_set_nv_seed( - int (*nv_seed_read_func)( unsigned char *buf, size_t buf_len ), - int (*nv_seed_write_func)( unsigned char *buf, size_t buf_len ) ) -{ - mbedtls_nv_seed_read = nv_seed_read_func; - mbedtls_nv_seed_write = nv_seed_write_func; - return( 0 ); -} -#endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */ -#endif /* MBEDTLS_ENTROPY_NV_SEED */ - -#if !defined(MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT) -/* - * Placeholder platform setup that does nothing by default - */ -int mbedtls_platform_setup( mbedtls_platform_context *ctx ) -{ - (void)ctx; - - return( 0 ); -} - -/* - * Placeholder platform teardown that does nothing by default - */ -void mbedtls_platform_teardown( mbedtls_platform_context *ctx ) -{ - (void)ctx; -} -#endif /* MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT */ - -#endif /* MBEDTLS_PLATFORM_C */ diff --git a/third_party/mbedtls/platform.h b/third_party/mbedtls/platform.h index 3c6168573..d778c0e34 100644 --- a/third_party/mbedtls/platform.h +++ b/third_party/mbedtls/platform.h @@ -1,413 +1,61 @@ -/* clang-format off */ -/** - * \file platform.h - * - * \brief This file contains the definitions and functions of the - * Mbed TLS platform abstraction layer. - * - * The platform abstraction layer removes the need for the library - * to directly link to standard C library functions or operating - * system services, making the library easier to port and embed. - * Application developers and users of the library can provide their own - * implementations of these functions, or implementations specific to - * their platform, which can be statically linked to the library or - * dynamically configured at runtime. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_PLATFORM_H -#define MBEDTLS_PLATFORM_H +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_PLATFORM_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_PLATFORM_H_ +#include "libc/assert.h" +#include "libc/calls/weirdtypes.h" #include "libc/fmt/fmt.h" +#include "libc/mem/mem.h" +#include "libc/runtime/runtime.h" #include "libc/stdio/stdio.h" - -#if !defined(MBEDTLS_CONFIG_FILE) +#include "libc/time/time.h" #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif +COSMOPOLITAN_C_START_ -#if defined(MBEDTLS_HAVE_TIME) -#include "third_party/mbedtls/platform_time.h" -#endif - -#define MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED -0x0070 /**< Hardware accelerator failed */ -#define MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED -0x0072 /**< The requested feature is not supported by the platform */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \name SECTION: Module settings - * - * The configuration options you can set for this module are in this section. - * Either change them in config.h or define them on the compiler command line. - * \{ - */ - -/* The older Microsoft Windows common runtime provides non-conforming - * implementations of some standard library functions, including snprintf - * and vsnprintf. This affects MSVC and MinGW builds. - */ -#if defined(__MINGW32__) || (defined(_MSC_VER) && _MSC_VER <= 1900) -#define MBEDTLS_PLATFORM_HAS_NON_CONFORMING_SNPRINTF -#define MBEDTLS_PLATFORM_HAS_NON_CONFORMING_VSNPRINTF -#endif - -#if !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS) -#if !defined(MBEDTLS_PLATFORM_STD_SNPRINTF) -#if defined(MBEDTLS_PLATFORM_HAS_NON_CONFORMING_SNPRINTF) -#define MBEDTLS_PLATFORM_STD_SNPRINTF mbedtls_platform_win32_snprintf /**< The default \c snprintf function to use. */ -#else -#define MBEDTLS_PLATFORM_STD_SNPRINTF snprintf /**< The default \c snprintf function to use. */ -#endif -#endif -#if !defined(MBEDTLS_PLATFORM_STD_VSNPRINTF) -#if defined(MBEDTLS_PLATFORM_HAS_NON_CONFORMING_VSNPRINTF) -#define MBEDTLS_PLATFORM_STD_VSNPRINTF mbedtls_platform_win32_vsnprintf /**< The default \c vsnprintf function to use. */ -#else -#define MBEDTLS_PLATFORM_STD_VSNPRINTF vsnprintf /**< The default \c vsnprintf function to use. */ -#endif -#endif -#if !defined(MBEDTLS_PLATFORM_STD_PRINTF) -#define MBEDTLS_PLATFORM_STD_PRINTF printf /**< The default \c printf function to use. */ -#endif -#if !defined(MBEDTLS_PLATFORM_STD_FPRINTF) -#define MBEDTLS_PLATFORM_STD_FPRINTF fprintf /**< The default \c fprintf function to use. */ -#endif -#if !defined(MBEDTLS_PLATFORM_STD_CALLOC) -#define MBEDTLS_PLATFORM_STD_CALLOC calloc /**< The default \c calloc function to use. */ -#endif -#if !defined(MBEDTLS_PLATFORM_STD_FREE) -#define MBEDTLS_PLATFORM_STD_FREE free /**< The default \c free function to use. */ -#endif -#if !defined(MBEDTLS_PLATFORM_STD_EXIT) -#define MBEDTLS_PLATFORM_STD_EXIT exit /**< The default \c exit function to use. */ -#endif -#if !defined(MBEDTLS_PLATFORM_STD_TIME) -#define MBEDTLS_PLATFORM_STD_TIME time /**< The default \c time function to use. */ -#endif -#if !defined(MBEDTLS_PLATFORM_STD_EXIT_SUCCESS) -#define MBEDTLS_PLATFORM_STD_EXIT_SUCCESS EXIT_SUCCESS /**< The default exit value to use. */ -#endif -#if !defined(MBEDTLS_PLATFORM_STD_EXIT_FAILURE) -#define MBEDTLS_PLATFORM_STD_EXIT_FAILURE EXIT_FAILURE /**< The default exit value to use. */ -#endif -#if defined(MBEDTLS_FS_IO) -#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_READ) -#define MBEDTLS_PLATFORM_STD_NV_SEED_READ mbedtls_platform_std_nv_seed_read -#endif -#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_WRITE) -#define MBEDTLS_PLATFORM_STD_NV_SEED_WRITE mbedtls_platform_std_nv_seed_write -#endif -#if !defined(MBEDTLS_PLATFORM_STD_NV_SEED_FILE) -#define MBEDTLS_PLATFORM_STD_NV_SEED_FILE "seedfile" -#endif -#endif /* MBEDTLS_FS_IO */ -#else /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */ -#if defined(MBEDTLS_PLATFORM_STD_MEM_HDR) -#include MBEDTLS_PLATFORM_STD_MEM_HDR -#endif -#endif /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */ - - -/* \} name SECTION: Module settings */ - -/* - * The function pointers for calloc and free. - */ -#if defined(MBEDTLS_PLATFORM_MEMORY) -#if defined(MBEDTLS_PLATFORM_FREE_MACRO) && \ - defined(MBEDTLS_PLATFORM_CALLOC_MACRO) -#define mbedtls_free MBEDTLS_PLATFORM_FREE_MACRO -#define mbedtls_calloc MBEDTLS_PLATFORM_CALLOC_MACRO -#else -/* For size_t */ -extern void *mbedtls_calloc( size_t n, size_t size ); -extern void mbedtls_free( void *ptr ); - -/** - * \brief This function dynamically sets the memory-management - * functions used by the library, during runtime. - * - * \param calloc_func The \c calloc function implementation. - * \param free_func The \c free function implementation. - * - * \return \c 0. - */ -int mbedtls_platform_set_calloc_free( void * (*calloc_func)( size_t, size_t ), - void (*free_func)( void * ) ); -#endif /* MBEDTLS_PLATFORM_FREE_MACRO && MBEDTLS_PLATFORM_CALLOC_MACRO */ -#else /* !MBEDTLS_PLATFORM_MEMORY */ -#define mbedtls_free free -#define mbedtls_calloc calloc -#endif /* MBEDTLS_PLATFORM_MEMORY && !MBEDTLS_PLATFORM_{FREE,CALLOC}_MACRO */ - -/* - * The function pointers for fprintf - */ -#if defined(MBEDTLS_PLATFORM_FPRINTF_ALT) -/* We need FILE * */ -extern int (*mbedtls_fprintf)( FILE *stream, const char *format, ... ); - -/** - * \brief This function dynamically configures the fprintf - * function that is called when the - * mbedtls_fprintf() function is invoked by the library. - * - * \param fprintf_func The \c fprintf function implementation. - * - * \return \c 0. - */ -int mbedtls_platform_set_fprintf( int (*fprintf_func)( FILE *stream, const char *, - ... ) ); -#else -#if defined(MBEDTLS_PLATFORM_FPRINTF_MACRO) -#define mbedtls_fprintf MBEDTLS_PLATFORM_FPRINTF_MACRO -#else -#define mbedtls_fprintf fprintf -#endif /* MBEDTLS_PLATFORM_FPRINTF_MACRO */ -#endif /* MBEDTLS_PLATFORM_FPRINTF_ALT */ - -/* - * The function pointers for printf - */ -#if defined(MBEDTLS_PLATFORM_PRINTF_ALT) -extern int (*mbedtls_printf)( const char *format, ... ); - -/** - * \brief This function dynamically configures the snprintf - * function that is called when the mbedtls_snprintf() - * function is invoked by the library. - * - * \param printf_func The \c printf function implementation. - * - * \return \c 0 on success. - */ -int mbedtls_platform_set_printf( int (*printf_func)( const char *, ... ) ); -#else /* !MBEDTLS_PLATFORM_PRINTF_ALT */ -#if defined(MBEDTLS_PLATFORM_PRINTF_MACRO) -#define mbedtls_printf MBEDTLS_PLATFORM_PRINTF_MACRO -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_PRINTF_MACRO */ -#endif /* MBEDTLS_PLATFORM_PRINTF_ALT */ - -/* - * The function pointers for snprintf - * - * The snprintf implementation should conform to C99: - * - it *must* always correctly zero-terminate the buffer - * (except when n == 0, then it must leave the buffer untouched) - * - however it is acceptable to return -1 instead of the required length when - * the destination buffer is too short. - */ -#if defined(MBEDTLS_PLATFORM_HAS_NON_CONFORMING_SNPRINTF) -/* For Windows (inc. MSYS2), we provide our own fixed implementation */ -int mbedtls_platform_win32_snprintf( char *s, size_t n, const char *fmt, ... ); -#endif - -#if defined(MBEDTLS_PLATFORM_SNPRINTF_ALT) -extern int (*mbedtls_snprintf)( char * s, size_t n, const char * format, ... ); - -/** - * \brief This function allows configuring a custom - * \c snprintf function pointer. - * - * \param snprintf_func The \c snprintf function implementation. - * - * \return \c 0 on success. - */ -int mbedtls_platform_set_snprintf( int (*snprintf_func)( char * s, size_t n, - const char * format, ... ) ); -#else /* MBEDTLS_PLATFORM_SNPRINTF_ALT */ -#if defined(MBEDTLS_PLATFORM_SNPRINTF_MACRO) -#define mbedtls_snprintf MBEDTLS_PLATFORM_SNPRINTF_MACRO -#else -#define mbedtls_snprintf MBEDTLS_PLATFORM_STD_SNPRINTF -#endif /* MBEDTLS_PLATFORM_SNPRINTF_MACRO */ -#endif /* MBEDTLS_PLATFORM_SNPRINTF_ALT */ - -/* - * The function pointers for vsnprintf - * - * The vsnprintf implementation should conform to C99: - * - it *must* always correctly zero-terminate the buffer - * (except when n == 0, then it must leave the buffer untouched) - * - however it is acceptable to return -1 instead of the required length when - * the destination buffer is too short. - */ -#if defined(MBEDTLS_PLATFORM_HAS_NON_CONFORMING_VSNPRINTF) -/* For Older Windows (inc. MSYS2), we provide our own fixed implementation */ -int mbedtls_platform_win32_vsnprintf( char *s, size_t n, const char *fmt, va_list arg ); -#endif - -#if defined(MBEDTLS_PLATFORM_VSNPRINTF_ALT) -extern int (*mbedtls_vsnprintf)( char * s, size_t n, const char * format, va_list arg ); - -/** - * \brief Set your own snprintf function pointer - * - * \param vsnprintf_func The \c vsnprintf function implementation - * - * \return \c 0 - */ -int mbedtls_platform_set_vsnprintf( int (*vsnprintf_func)( char * s, size_t n, - const char * format, va_list arg ) ); -#else /* MBEDTLS_PLATFORM_VSNPRINTF_ALT */ -#if defined(MBEDTLS_PLATFORM_VSNPRINTF_MACRO) -#define mbedtls_vsnprintf MBEDTLS_PLATFORM_VSNPRINTF_MACRO -#else -#define mbedtls_vsnprintf vsnprintf -#endif /* MBEDTLS_PLATFORM_VSNPRINTF_MACRO */ -#endif /* MBEDTLS_PLATFORM_VSNPRINTF_ALT */ - -/* - * The function pointers for exit - */ -#if defined(MBEDTLS_PLATFORM_EXIT_ALT) -extern void (*mbedtls_exit)( int status ); - -/** - * \brief This function dynamically configures the exit - * function that is called when the mbedtls_exit() - * function is invoked by the library. - * - * \param exit_func The \c exit function implementation. - * - * \return \c 0 on success. - */ -int mbedtls_platform_set_exit( void (*exit_func)( int status ) ); -#else -#if defined(MBEDTLS_PLATFORM_EXIT_MACRO) -#define mbedtls_exit MBEDTLS_PLATFORM_EXIT_MACRO -#else -#define mbedtls_exit exit -#endif /* MBEDTLS_PLATFORM_EXIT_MACRO */ -#endif /* MBEDTLS_PLATFORM_EXIT_ALT */ - -/* - * The default exit values - */ -#if defined(MBEDTLS_PLATFORM_STD_EXIT_SUCCESS) -#define MBEDTLS_EXIT_SUCCESS MBEDTLS_PLATFORM_STD_EXIT_SUCCESS -#else #define MBEDTLS_EXIT_SUCCESS 0 -#endif -#if defined(MBEDTLS_PLATFORM_STD_EXIT_FAILURE) -#define MBEDTLS_EXIT_FAILURE MBEDTLS_PLATFORM_STD_EXIT_FAILURE -#else #define MBEDTLS_EXIT_FAILURE 1 -#endif -/* - * The function pointers for reading from and writing a seed file to - * Non-Volatile storage (NV) in a platform-independent way - * - * Only enabled when the NV seed entropy source is enabled - */ -#if defined(MBEDTLS_ENTROPY_NV_SEED) -#if !defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS) && defined(MBEDTLS_FS_IO) -/* Internal standard platform definitions */ -int mbedtls_platform_std_nv_seed_read( unsigned char *buf, size_t buf_len ); -int mbedtls_platform_std_nv_seed_write( unsigned char *buf, size_t buf_len ); -#endif +#define mbedtls_free free +#define mbedtls_calloc calloc +#define mbedtls_snprintf snprintf +#define mbedtls_vsnprintf vsnprintf +#define mbedtls_exit exit +#define mbedtls_time_t time_t +#define mbedtls_time time +#define mbedtls_platform_gmtime_r gmtime_r -#if defined(MBEDTLS_PLATFORM_NV_SEED_ALT) -extern int (*mbedtls_nv_seed_read)( unsigned char *buf, size_t buf_len ); -extern int (*mbedtls_nv_seed_write)( unsigned char *buf, size_t buf_len ); +#define mbedtls_fprintf(...) ((void)0) +#define mbedtls_printf(...) ((void)0) -/** - * \brief This function allows configuring custom seed file writing and - * reading functions. - * - * \param nv_seed_read_func The seed reading function implementation. - * \param nv_seed_write_func The seed writing function implementation. - * - * \return \c 0 on success. - */ -int mbedtls_platform_set_nv_seed( - int (*nv_seed_read_func)( unsigned char *buf, size_t buf_len ), - int (*nv_seed_write_func)( unsigned char *buf, size_t buf_len ) - ); +#ifdef MBEDTLS_CHECK_PARAMS +#define MBEDTLS_PARAM_FAILED(cond) \ + mbedtls_param_failed(#cond, __FILE__, __LINE__) #else -#if defined(MBEDTLS_PLATFORM_NV_SEED_READ_MACRO) && \ - defined(MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO) -#define mbedtls_nv_seed_read MBEDTLS_PLATFORM_NV_SEED_READ_MACRO -#define mbedtls_nv_seed_write MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO -#else -#define mbedtls_nv_seed_read mbedtls_platform_std_nv_seed_read -#define mbedtls_nv_seed_write mbedtls_platform_std_nv_seed_write -#endif -#endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */ -#endif /* MBEDTLS_ENTROPY_NV_SEED */ - -#if !defined(MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT) - -/** - * \brief The platform context structure. - * - * \note This structure may be used to assist platform-specific - * setup or teardown operations. - */ -typedef struct mbedtls_platform_context -{ - char dummy; /**< A placeholder member, as empty structs are not portable. */ -} -mbedtls_platform_context; - -#else -/* #include "third_party/mbedtls/platform_alt.h" */ -#endif /* !MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT */ - -/** - * \brief This function performs any platform-specific initialization - * operations. - * - * \note This function should be called before any other library functions. - * - * Its implementation is platform-specific, and unless - * platform-specific code is provided, it does nothing. - * - * \note The usage and necessity of this function is dependent on the platform. - * - * \param ctx The platform context. - * - * \return \c 0 on success. - */ -int mbedtls_platform_setup( mbedtls_platform_context *ctx ); -/** - * \brief This function performs any platform teardown operations. - * - * \note This function should be called after every other Mbed TLS module - * has been correctly freed using the appropriate free function. - * - * Its implementation is platform-specific, and unless - * platform-specific code is provided, it does nothing. - * - * \note The usage and necessity of this function is dependent on the platform. - * - * \param ctx The platform context. - * - */ -void mbedtls_platform_teardown( mbedtls_platform_context *ctx ); - -#ifdef __cplusplus -} +#define MBEDTLS_PARAM_FAILED(cond) unreachable #endif -#endif /* platform.h */ +#define MBEDTLS_INTERNAL_VALIDATE_RET(cond, ret) \ + do { \ + if (!(cond)) { \ + MBEDTLS_PARAM_FAILED(cond); \ + return ret; \ + } \ + } while (0) + +#define MBEDTLS_INTERNAL_VALIDATE(cond) \ + do { \ + if (!(cond)) { \ + MBEDTLS_PARAM_FAILED(cond); \ + return; \ + } \ + } while (0) + +typedef struct mbedtls_platform_context { + char dummy; +} mbedtls_platform_context; + +void mbedtls_platform_zeroize(void *, size_t); +int mbedtls_platform_setup(mbedtls_platform_context *); +void mbedtls_platform_teardown(mbedtls_platform_context *); +void mbedtls_param_failed(const char *, const char *, int) relegated; + +COSMOPOLITAN_C_END_ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_PLATFORM_H_ */ diff --git a/third_party/mbedtls/platform_time.h b/third_party/mbedtls/platform_time.h deleted file mode 100644 index b7dc9fa75..000000000 --- a/third_party/mbedtls/platform_time.h +++ /dev/null @@ -1,82 +0,0 @@ -/* clang-format off */ -/** - * \file platform_time.h - * - * \brief mbed TLS Platform time abstraction - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_PLATFORM_TIME_H -#define MBEDTLS_PLATFORM_TIME_H -#include "libc/time/time.h" -#include "libc/calls/weirdtypes.h" - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \name SECTION: Module settings - * - * The configuration options you can set for this module are in this section. - * Either change them in config.h or define them on the compiler command line. - * \{ - */ - -/* - * The time_t datatype - */ -#if defined(MBEDTLS_PLATFORM_TIME_TYPE_MACRO) -typedef MBEDTLS_PLATFORM_TIME_TYPE_MACRO mbedtls_time_t; -#else -/* For time_t */ -typedef time_t mbedtls_time_t; -#endif /* MBEDTLS_PLATFORM_TIME_TYPE_MACRO */ - -/* - * The function pointers for time - */ -#if defined(MBEDTLS_PLATFORM_TIME_ALT) -extern mbedtls_time_t (*mbedtls_time)( mbedtls_time_t* time ); - -/** - * \brief Set your own time function pointer - * - * \param time_func the time function implementation - * - * \return 0 - */ -int mbedtls_platform_set_time( mbedtls_time_t (*time_func)( mbedtls_time_t* time ) ); -#else -#if defined(MBEDTLS_PLATFORM_TIME_MACRO) -#define mbedtls_time MBEDTLS_PLATFORM_TIME_MACRO -#else -#define mbedtls_time time -#endif /* MBEDTLS_PLATFORM_TIME_MACRO */ -#endif /* MBEDTLS_PLATFORM_TIME_ALT */ - -#ifdef __cplusplus -} -#endif - -#endif /* platform_time.h */ diff --git a/third_party/mbedtls/platform_util.c b/third_party/mbedtls/platform_util.c deleted file mode 100644 index f84fd1f04..000000000 --- a/third_party/mbedtls/platform_util.c +++ /dev/null @@ -1,134 +0,0 @@ -/* clang-format off */ - -/* - * Common and shared functions used by multiple modules in the Mbed TLS - * library. - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Ensure gmtime_r is available even with -std=c99; must be defined before - * config.h, which pulls in glibc's features.h. Harmless on other platforms. - */ -#if !defined(_POSIX_C_SOURCE) -#define _POSIX_C_SOURCE 200112L -#endif - -#include "libc/time/time.h" -#include "libc/time/struct/tm.h" -#include "libc/str/str.h" -#include "third_party/mbedtls/common.h" - -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/platform.h" -#include "third_party/mbedtls/threading.h" - - -#if !defined(MBEDTLS_PLATFORM_ZEROIZE_ALT) -/* - * This implementation should never be optimized out by the compiler - * - * This implementation for mbedtls_platform_zeroize() was inspired from Colin - * Percival's blog article at: - * - * http://www.daemonology.net/blog/2014-09-04-how-to-zero-a-buffer.html - * - * It uses a volatile function pointer to the standard memset(). Because the - * pointer is volatile the compiler expects it to change at - * any time and will not optimize out the call that could potentially perform - * other operations on the input buffer instead of just setting it to 0. - * Nevertheless, as pointed out by davidtgoldblatt on Hacker News - * (refer to http://www.daemonology.net/blog/2014-09-05-erratum.html for - * details), optimizations of the following form are still possible: - * - * if( memset_func != memset ) - * memset_func( buf, 0, len ); - * - * Note that it is extremely difficult to guarantee that - * mbedtls_platform_zeroize() will not be optimized out by aggressive compilers - * in a portable way. For this reason, Mbed TLS also provides the configuration - * option MBEDTLS_PLATFORM_ZEROIZE_ALT, which allows users to configure - * mbedtls_platform_zeroize() to use a suitable implementation for their - * platform and needs. - */ -static void * (* const volatile memset_func)( void *, int, size_t ) = memset; - -void mbedtls_platform_zeroize( void *buf, size_t len ) -{ - MBEDTLS_INTERNAL_VALIDATE( len == 0 || buf != NULL ); - - if( len > 0 ) - memset_func( buf, 0, len ); -} -#endif /* MBEDTLS_PLATFORM_ZEROIZE_ALT */ - -#if defined(MBEDTLS_HAVE_TIME_DATE) && !defined(MBEDTLS_PLATFORM_GMTIME_R_ALT) -#if !defined(_WIN32) && (defined(unix) || \ - defined(__unix) || defined(__unix__) || (defined(__APPLE__) && \ - defined(__MACH__))) -#endif /* !_WIN32 && (unix || __unix || __unix__ || - * (__APPLE__ && __MACH__)) */ - -#if !( ( defined(_POSIX_VERSION) && _POSIX_VERSION >= 200809L ) || \ - ( defined(_POSIX_THREAD_SAFE_FUNCTIONS ) && \ - _POSIX_THREAD_SAFE_FUNCTIONS >= 200112L ) ) -/* - * This is a convenience shorthand macro to avoid checking the long - * preprocessor conditions above. Ideally, we could expose this macro in - * platform_util.h and simply use it in platform_util.c, threading.c and - * threading.h. However, this macro is not part of the Mbed TLS public API, so - * we keep it private by only defining it in this file - */ -#if ! ( defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) ) -#define PLATFORM_UTIL_USE_GMTIME -#endif /* ! ( defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) ) */ - -#endif /* !( ( defined(_POSIX_VERSION) && _POSIX_VERSION >= 200809L ) || \ - ( defined(_POSIX_THREAD_SAFE_FUNCTIONS ) && \ - _POSIX_THREAD_SAFE_FUNCTIONS >= 200112L ) ) */ - -struct tm *mbedtls_platform_gmtime_r( const mbedtls_time_t *tt, - struct tm *tm_buf ) -{ -#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) - return( ( gmtime_s( tm_buf, tt ) == 0 ) ? tm_buf : NULL ); -#elif !defined(PLATFORM_UTIL_USE_GMTIME) - return( gmtime_r( tt, tm_buf ) ); -#else - struct tm *lt; - -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_lock( &mbedtls_threading_gmtime_mutex ) != 0 ) - return( NULL ); -#endif /* MBEDTLS_THREADING_C */ - - lt = gmtime( tt ); - - if( lt != NULL ) - { - memcpy( tm_buf, lt, sizeof( struct tm ) ); - } - -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &mbedtls_threading_gmtime_mutex ) != 0 ) - return( NULL ); -#endif /* MBEDTLS_THREADING_C */ - - return( ( lt == NULL ) ? NULL : tm_buf ); -#endif /* _WIN32 && !EFIX64 && !EFI32 */ -} -#endif /* MBEDTLS_HAVE_TIME_DATE && MBEDTLS_PLATFORM_GMTIME_R_ALT */ diff --git a/third_party/mbedtls/platform_util.h b/third_party/mbedtls/platform_util.h deleted file mode 100644 index 4e688b325..000000000 --- a/third_party/mbedtls/platform_util.h +++ /dev/null @@ -1,193 +0,0 @@ -/* clang-format off */ - -/** - * \file platform_util.h - * - * \brief Common and shared functions used by multiple modules in the Mbed TLS - * library. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_PLATFORM_UTIL_H -#define MBEDTLS_PLATFORM_UTIL_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#if defined(MBEDTLS_HAVE_TIME_DATE) -#include "third_party/mbedtls/platform_time.h" -#endif /* MBEDTLS_HAVE_TIME_DATE */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(MBEDTLS_CHECK_PARAMS) - -#if defined(MBEDTLS_CHECK_PARAMS_ASSERT) -/* Allow the user to define MBEDTLS_PARAM_FAILED to something like assert - * (which is what our config.h suggests). */ -#endif /* MBEDTLS_CHECK_PARAMS_ASSERT */ - -#if defined(MBEDTLS_PARAM_FAILED) -/** An alternative definition of MBEDTLS_PARAM_FAILED has been set in config.h. - * - * This flag can be used to check whether it is safe to assume that - * MBEDTLS_PARAM_FAILED() will expand to a call to mbedtls_param_failed(). - */ -#define MBEDTLS_PARAM_FAILED_ALT - -#elif defined(MBEDTLS_CHECK_PARAMS_ASSERT) -#define MBEDTLS_PARAM_FAILED( cond ) assert( cond ) -#define MBEDTLS_PARAM_FAILED_ALT - -#else /* MBEDTLS_PARAM_FAILED */ -#define MBEDTLS_PARAM_FAILED( cond ) \ - mbedtls_param_failed( #cond, __FILE__, __LINE__ ) - -/** - * \brief User supplied callback function for parameter validation failure. - * See #MBEDTLS_CHECK_PARAMS for context. - * - * This function will be called unless an alternative treatement - * is defined through the #MBEDTLS_PARAM_FAILED macro. - * - * This function can return, and the operation will be aborted, or - * alternatively, through use of setjmp()/longjmp() can resume - * execution in the application code. - * - * \param failure_condition The assertion that didn't hold. - * \param file The file where the assertion failed. - * \param line The line in the file where the assertion failed. - */ -void mbedtls_param_failed( const char *failure_condition, - const char *file, - int line ); -#endif /* MBEDTLS_PARAM_FAILED */ - -/* Internal macro meant to be called only from within the library. */ -#define MBEDTLS_INTERNAL_VALIDATE_RET( cond, ret ) \ - do { \ - if( !(cond) ) \ - { \ - MBEDTLS_PARAM_FAILED( cond ); \ - return( ret ); \ - } \ - } while( 0 ) - -/* Internal macro meant to be called only from within the library. */ -#define MBEDTLS_INTERNAL_VALIDATE( cond ) \ - do { \ - if( !(cond) ) \ - { \ - MBEDTLS_PARAM_FAILED( cond ); \ - return; \ - } \ - } while( 0 ) - -#else /* MBEDTLS_CHECK_PARAMS */ - -/* Internal macros meant to be called only from within the library. */ -#define MBEDTLS_INTERNAL_VALIDATE_RET( cond, ret ) do { } while( 0 ) -#define MBEDTLS_INTERNAL_VALIDATE( cond ) do { } while( 0 ) - -#endif /* MBEDTLS_CHECK_PARAMS */ - -/* Internal helper macros for deprecating API constants. */ -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -/* Deliberately don't (yet) export MBEDTLS_DEPRECATED here - * to avoid conflict with other headers which define and use - * it, too. We might want to move all these definitions here at - * some point for uniformity. */ -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -MBEDTLS_DEPRECATED typedef char const * mbedtls_deprecated_string_constant_t; -#define MBEDTLS_DEPRECATED_STRING_CONSTANT( VAL ) \ - ( (mbedtls_deprecated_string_constant_t) ( VAL ) ) -MBEDTLS_DEPRECATED typedef int mbedtls_deprecated_numeric_constant_t; -#define MBEDTLS_DEPRECATED_NUMERIC_CONSTANT( VAL ) \ - ( (mbedtls_deprecated_numeric_constant_t) ( VAL ) ) -#undef MBEDTLS_DEPRECATED -#else /* MBEDTLS_DEPRECATED_WARNING */ -#define MBEDTLS_DEPRECATED_STRING_CONSTANT( VAL ) VAL -#define MBEDTLS_DEPRECATED_NUMERIC_CONSTANT( VAL ) VAL -#endif /* MBEDTLS_DEPRECATED_WARNING */ -#endif /* MBEDTLS_DEPRECATED_REMOVED */ - -/** - * \brief Securely zeroize a buffer - * - * The function is meant to wipe the data contained in a buffer so - * that it can no longer be recovered even if the program memory - * is later compromised. Call this function on sensitive data - * stored on the stack before returning from a function, and on - * sensitive data stored on the heap before freeing the heap - * object. - * - * It is extremely difficult to guarantee that calls to - * mbedtls_platform_zeroize() are not removed by aggressive - * compiler optimizations in a portable way. For this reason, Mbed - * TLS provides the configuration option - * MBEDTLS_PLATFORM_ZEROIZE_ALT, which allows users to configure - * mbedtls_platform_zeroize() to use a suitable implementation for - * their platform and needs - * - * \param buf Buffer to be zeroized - * \param len Length of the buffer in bytes - * - */ -void mbedtls_platform_zeroize( void *buf, size_t len ); - -#if defined(MBEDTLS_HAVE_TIME_DATE) -/** - * \brief Platform-specific implementation of gmtime_r() - * - * The function is a thread-safe abstraction that behaves - * similarly to the gmtime_r() function from Unix/POSIX. - * - * Mbed TLS will try to identify the underlying platform and - * make use of an appropriate underlying implementation (e.g. - * gmtime_r() for POSIX and gmtime_s() for Windows). If this is - * not possible, then gmtime() will be used. In this case, calls - * from the library to gmtime() will be guarded by the mutex - * mbedtls_threading_gmtime_mutex if MBEDTLS_THREADING_C is - * enabled. It is recommended that calls from outside the library - * are also guarded by this mutex. - * - * If MBEDTLS_PLATFORM_GMTIME_R_ALT is defined, then Mbed TLS will - * unconditionally use the alternative implementation for - * mbedtls_platform_gmtime_r() supplied by the user at compile time. - * - * \param tt Pointer to an object containing time (in seconds) since the - * epoch to be converted - * \param tm_buf Pointer to an object where the results will be stored - * - * \return Pointer to an object of type struct tm on success, otherwise - * NULL - */ -struct tm *mbedtls_platform_gmtime_r( const mbedtls_time_t *tt, - struct tm *tm_buf ); -#endif /* MBEDTLS_HAVE_TIME_DATE */ - -#ifdef __cplusplus -} -#endif - -#endif /* MBEDTLS_PLATFORM_UTIL_H */ diff --git a/third_party/mbedtls/poly1305.c b/third_party/mbedtls/poly1305.c index d51279a53..bb4fa574a 100644 --- a/third_party/mbedtls/poly1305.c +++ b/third_party/mbedtls/poly1305.c @@ -1,10 +1,17 @@ -/* clang-format off */ +#include "libc/bits/bits.h" +#include "libc/str/str.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/poly1305.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /** * \file poly1305.c * @@ -25,24 +32,9 @@ asm(".include \"libc/disclaimer.inc\""); * See the License for the specific language governing permissions and * limitations under the License. */ -#include "libc/str/str.h" -#include "third_party/mbedtls/common.h" #if defined(MBEDTLS_POLY1305_C) -#include "third_party/mbedtls/poly1305.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - #if !defined(MBEDTLS_POLY1305_ALT) #if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ @@ -58,12 +50,7 @@ asm(".include \"libc/disclaimer.inc\""); #define POLY1305_BLOCK_SIZE_BYTES ( 16U ) -#define BYTES_TO_U32_LE( data, offset ) \ - ( (uint32_t) (data)[offset] \ - | (uint32_t) ( (uint32_t) (data)[( offset ) + 1] << 8 ) \ - | (uint32_t) ( (uint32_t) (data)[( offset ) + 2] << 16 ) \ - | (uint32_t) ( (uint32_t) (data)[( offset ) + 3] << 24 ) \ - ) +#define BYTES_TO_U32_LE( data, offset ) READ32LE((data) + (offset)) /* * Our implementation is tuned for 32-bit platforms with a 64-bit multiplier. diff --git a/third_party/mbedtls/poly1305.h b/third_party/mbedtls/poly1305.h index ecc922439..dad82ac18 100644 --- a/third_party/mbedtls/poly1305.h +++ b/third_party/mbedtls/poly1305.h @@ -1,45 +1,7 @@ -/* clang-format off */ - -/** - * \file poly1305.h - * - * \brief This file contains Poly1305 definitions and functions. - * - * Poly1305 is a one-time message authenticator that can be used to - * authenticate messages. Poly1305-AES was created by Daniel - * Bernstein https://cr.yp.to/mac/poly1305-20050329.pdf The generic - * Poly1305 algorithm (not tied to AES) was also standardized in RFC - * 7539. - * - * \author Daniel King - */ - -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - #ifndef MBEDTLS_POLY1305_H #define MBEDTLS_POLY1305_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - +/* clang-format off */ #define MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA -0x0057 /**< Invalid input parameter(s). */ diff --git a/third_party/mbedtls/psa_crypto.c b/third_party/mbedtls/psa_crypto.c deleted file mode 100644 index 465444a32..000000000 --- a/third_party/mbedtls/psa_crypto.c +++ /dev/null @@ -1,6166 +0,0 @@ -/* clang-format off */ - -/* - * PSA crypto layer on top of Mbed TLS crypto - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_PSA_CRYPTO_C) - -#if defined(MBEDTLS_PSA_CRYPTO_CONFIG) -#include "third_party/mbedtls/check_crypto_config.h" -#endif - -#include "third_party/mbedtls/psa_crypto_service_integration.h" -#include "third_party/mbedtls/crypto.h" - -#include "third_party/mbedtls/psa_crypto_core.h" -#include "third_party/mbedtls/psa_crypto_invasive.h" -#include "third_party/mbedtls/psa_crypto_driver_wrappers.h" -#include "third_party/mbedtls/psa_crypto_ecp.h" -#include "third_party/mbedtls/psa_crypto_rsa.h" -#include "third_party/mbedtls/psa_crypto_ecp.h" -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) -#include "third_party/mbedtls/psa_crypto_se.h" -#endif -#include "third_party/mbedtls/psa_crypto_slot_management.h" -/* Include internal declarations that are useful for implementing persistently - * stored keys. */ -#include "third_party/mbedtls/psa_crypto_storage.h" - -#include "third_party/mbedtls/psa_crypto_random_impl.h" - -#include "third_party/mbedtls/platform.h" -#if !defined(MBEDTLS_PLATFORM_C) -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - -#include "third_party/mbedtls/aes.h" -#include "third_party/mbedtls/arc4.h" -#include "third_party/mbedtls/asn1.h" -#include "third_party/mbedtls/asn1write.h" -#include "third_party/mbedtls/bignum.h" -#include "third_party/mbedtls/blowfish.h" -#include "third_party/mbedtls/camellia.h" -#include "third_party/mbedtls/chacha20.h" -#include "third_party/mbedtls/chachapoly.h" -#include "third_party/mbedtls/cipher.h" -#include "third_party/mbedtls/ccm.h" -#include "third_party/mbedtls/cmac.h" -#include "third_party/mbedtls/des.h" -#include "third_party/mbedtls/ecdh.h" -#include "third_party/mbedtls/ecp.h" -#include "third_party/mbedtls/entropy.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/gcm.h" -#include "third_party/mbedtls/md2.h" -#include "third_party/mbedtls/md4.h" -#include "third_party/mbedtls/md5.h" -#include "third_party/mbedtls/md.h" -#include "third_party/mbedtls/md_internal.h" -#include "third_party/mbedtls/pk.h" -#include "third_party/mbedtls/pk_internal.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/ripemd160.h" -#include "third_party/mbedtls/rsa.h" -#include "third_party/mbedtls/sha1.h" -#include "third_party/mbedtls/sha256.h" -#include "third_party/mbedtls/sha512.h" -#include "third_party/mbedtls/xtea.h" - -#define ARRAY_LENGTH( array ) ( sizeof( array ) / sizeof( *( array ) ) ) - -/* constant-time buffer comparison */ -static inline int safer_memcmp( const uint8_t *a, const uint8_t *b, size_t n ) -{ - size_t i; - unsigned char diff = 0; - - for( i = 0; i < n; i++ ) - diff |= a[i] ^ b[i]; - - return( diff ); -} - - - -/****************************************************************/ -/* Global data, support functions and library management */ -/****************************************************************/ - -static int key_type_is_raw_bytes( psa_key_type_t type ) -{ - return( PSA_KEY_TYPE_IS_UNSTRUCTURED( type ) ); -} - -/* Values for psa_global_data_t::rng_state */ -#define RNG_NOT_INITIALIZED 0 -#define RNG_INITIALIZED 1 -#define RNG_SEEDED 2 - -typedef struct -{ - mbedtls_psa_random_context_t rng; - unsigned initialized : 1; - unsigned rng_state : 2; -} psa_global_data_t; - -static psa_global_data_t global_data; - -#if !defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) -mbedtls_psa_drbg_context_t *const mbedtls_psa_random_state = - &global_data.rng.drbg; -#endif - -#define GUARD_MODULE_INITIALIZED \ - if( global_data.initialized == 0 ) \ - return( PSA_ERROR_BAD_STATE ); - -psa_status_t mbedtls_to_psa_error( int ret ) -{ - /* Mbed TLS error codes can combine a high-level error code and a - * low-level error code. The low-level error usually reflects the - * root cause better, so dispatch on that preferably. */ - int low_level_ret = - ( -ret & 0x007f ); - switch( low_level_ret != 0 ? low_level_ret : ret ) - { - case 0: - return( PSA_SUCCESS ); - - case MBEDTLS_ERR_AES_INVALID_KEY_LENGTH: - case MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH: - case MBEDTLS_ERR_AES_FEATURE_UNAVAILABLE: - return( PSA_ERROR_NOT_SUPPORTED ); - case MBEDTLS_ERR_AES_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - - case MBEDTLS_ERR_ARC4_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - - case MBEDTLS_ERR_ASN1_OUT_OF_DATA: - case MBEDTLS_ERR_ASN1_UNEXPECTED_TAG: - case MBEDTLS_ERR_ASN1_INVALID_LENGTH: - case MBEDTLS_ERR_ASN1_LENGTH_MISMATCH: - case MBEDTLS_ERR_ASN1_INVALID_DATA: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_ASN1_ALLOC_FAILED: - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - case MBEDTLS_ERR_ASN1_BUF_TOO_SMALL: - return( PSA_ERROR_BUFFER_TOO_SMALL ); - -#if defined(MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA) - case MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA: -#elif defined(MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH) - case MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH: -#endif - case MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH: - return( PSA_ERROR_NOT_SUPPORTED ); - case MBEDTLS_ERR_BLOWFISH_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - -#if defined(MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA) - case MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA: -#elif defined(MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH) - case MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH: -#endif - case MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH: - return( PSA_ERROR_NOT_SUPPORTED ); - case MBEDTLS_ERR_CAMELLIA_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - - case MBEDTLS_ERR_CCM_BAD_INPUT: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_CCM_AUTH_FAILED: - return( PSA_ERROR_INVALID_SIGNATURE ); - case MBEDTLS_ERR_CCM_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - - case MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA: - return( PSA_ERROR_INVALID_ARGUMENT ); - - case MBEDTLS_ERR_CHACHAPOLY_BAD_STATE: - return( PSA_ERROR_BAD_STATE ); - case MBEDTLS_ERR_CHACHAPOLY_AUTH_FAILED: - return( PSA_ERROR_INVALID_SIGNATURE ); - - case MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE: - return( PSA_ERROR_NOT_SUPPORTED ); - case MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_CIPHER_ALLOC_FAILED: - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - case MBEDTLS_ERR_CIPHER_INVALID_PADDING: - return( PSA_ERROR_INVALID_PADDING ); - case MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_CIPHER_AUTH_FAILED: - return( PSA_ERROR_INVALID_SIGNATURE ); - case MBEDTLS_ERR_CIPHER_INVALID_CONTEXT: - return( PSA_ERROR_CORRUPTION_DETECTED ); - case MBEDTLS_ERR_CIPHER_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - - case MBEDTLS_ERR_CMAC_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - -#if !( defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) || \ - defined(MBEDTLS_PSA_HMAC_DRBG_MD_TYPE) ) - /* Only check CTR_DRBG error codes if underlying mbedtls_xxx - * functions are passed a CTR_DRBG instance. */ - case MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED: - return( PSA_ERROR_INSUFFICIENT_ENTROPY ); - case MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG: - case MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG: - return( PSA_ERROR_NOT_SUPPORTED ); - case MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR: - return( PSA_ERROR_INSUFFICIENT_ENTROPY ); -#endif - - case MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH: - return( PSA_ERROR_NOT_SUPPORTED ); - case MBEDTLS_ERR_DES_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - - case MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED: - case MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE: - case MBEDTLS_ERR_ENTROPY_SOURCE_FAILED: - return( PSA_ERROR_INSUFFICIENT_ENTROPY ); - - case MBEDTLS_ERR_GCM_AUTH_FAILED: - return( PSA_ERROR_INVALID_SIGNATURE ); - case MBEDTLS_ERR_GCM_BAD_INPUT: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_GCM_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - -#if !defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) && \ - defined(MBEDTLS_PSA_HMAC_DRBG_MD_TYPE) - /* Only check HMAC_DRBG error codes if underlying mbedtls_xxx - * functions are passed a HMAC_DRBG instance. */ - case MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED: - return( PSA_ERROR_INSUFFICIENT_ENTROPY ); - case MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG: - case MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG: - return( PSA_ERROR_NOT_SUPPORTED ); - case MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR: - return( PSA_ERROR_INSUFFICIENT_ENTROPY ); -#endif - - case MBEDTLS_ERR_MD2_HW_ACCEL_FAILED: - case MBEDTLS_ERR_MD4_HW_ACCEL_FAILED: - case MBEDTLS_ERR_MD5_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - - case MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE: - return( PSA_ERROR_NOT_SUPPORTED ); - case MBEDTLS_ERR_MD_BAD_INPUT_DATA: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_MD_ALLOC_FAILED: - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - case MBEDTLS_ERR_MD_FILE_IO_ERROR: - return( PSA_ERROR_STORAGE_FAILURE ); - case MBEDTLS_ERR_MD_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - - case MBEDTLS_ERR_MPI_FILE_IO_ERROR: - return( PSA_ERROR_STORAGE_FAILURE ); - case MBEDTLS_ERR_MPI_BAD_INPUT_DATA: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_MPI_INVALID_CHARACTER: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL: - return( PSA_ERROR_BUFFER_TOO_SMALL ); - case MBEDTLS_ERR_MPI_NEGATIVE_VALUE: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_MPI_DIVISION_BY_ZERO: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_MPI_NOT_ACCEPTABLE: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_MPI_ALLOC_FAILED: - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - - case MBEDTLS_ERR_PK_ALLOC_FAILED: - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - case MBEDTLS_ERR_PK_TYPE_MISMATCH: - case MBEDTLS_ERR_PK_BAD_INPUT_DATA: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_PK_FILE_IO_ERROR: - return( PSA_ERROR_STORAGE_FAILURE ); - case MBEDTLS_ERR_PK_KEY_INVALID_VERSION: - case MBEDTLS_ERR_PK_KEY_INVALID_FORMAT: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_PK_UNKNOWN_PK_ALG: - return( PSA_ERROR_NOT_SUPPORTED ); - case MBEDTLS_ERR_PK_PASSWORD_REQUIRED: - case MBEDTLS_ERR_PK_PASSWORD_MISMATCH: - return( PSA_ERROR_NOT_PERMITTED ); - case MBEDTLS_ERR_PK_INVALID_PUBKEY: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_PK_INVALID_ALG: - case MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE: - case MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE: - return( PSA_ERROR_NOT_SUPPORTED ); - case MBEDTLS_ERR_PK_SIG_LEN_MISMATCH: - return( PSA_ERROR_INVALID_SIGNATURE ); - case MBEDTLS_ERR_PK_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - - case MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - case MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED: - return( PSA_ERROR_NOT_SUPPORTED ); - - case MBEDTLS_ERR_RIPEMD160_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - - case MBEDTLS_ERR_RSA_BAD_INPUT_DATA: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_RSA_INVALID_PADDING: - return( PSA_ERROR_INVALID_PADDING ); - case MBEDTLS_ERR_RSA_KEY_GEN_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - case MBEDTLS_ERR_RSA_KEY_CHECK_FAILED: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_RSA_PUBLIC_FAILED: - case MBEDTLS_ERR_RSA_PRIVATE_FAILED: - return( PSA_ERROR_CORRUPTION_DETECTED ); - case MBEDTLS_ERR_RSA_VERIFY_FAILED: - return( PSA_ERROR_INVALID_SIGNATURE ); - case MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE: - return( PSA_ERROR_BUFFER_TOO_SMALL ); - case MBEDTLS_ERR_RSA_RNG_FAILED: - return( PSA_ERROR_INSUFFICIENT_ENTROPY ); - case MBEDTLS_ERR_RSA_UNSUPPORTED_OPERATION: - return( PSA_ERROR_NOT_SUPPORTED ); - case MBEDTLS_ERR_RSA_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - - case MBEDTLS_ERR_SHA1_HW_ACCEL_FAILED: - case MBEDTLS_ERR_SHA256_HW_ACCEL_FAILED: - case MBEDTLS_ERR_SHA512_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - - case MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_XTEA_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - - case MBEDTLS_ERR_ECP_BAD_INPUT_DATA: - case MBEDTLS_ERR_ECP_INVALID_KEY: - return( PSA_ERROR_INVALID_ARGUMENT ); - case MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL: - return( PSA_ERROR_BUFFER_TOO_SMALL ); - case MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE: - return( PSA_ERROR_NOT_SUPPORTED ); - case MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH: - case MBEDTLS_ERR_ECP_VERIFY_FAILED: - return( PSA_ERROR_INVALID_SIGNATURE ); - case MBEDTLS_ERR_ECP_ALLOC_FAILED: - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - case MBEDTLS_ERR_ECP_RANDOM_FAILED: - return( PSA_ERROR_INSUFFICIENT_ENTROPY ); - case MBEDTLS_ERR_ECP_HW_ACCEL_FAILED: - return( PSA_ERROR_HARDWARE_FAILURE ); - - case MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED: - return( PSA_ERROR_CORRUPTION_DETECTED ); - - default: - return( PSA_ERROR_GENERIC_ERROR ); - } -} - - - - -/****************************************************************/ -/* Key management */ -/****************************************************************/ - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) -static inline int psa_key_slot_is_external( const psa_key_slot_t *slot ) -{ - return( psa_key_lifetime_is_external( slot->attr.lifetime ) ); -} -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - -/* For now the MBEDTLS_PSA_ACCEL_ guards are also used here since the - * current test driver in key_management.c is using this function - * when accelerators are used for ECC key pair and public key. - * Once that dependency is resolved these guards can be removed. - */ -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || \ - defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY) || \ - defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR) || \ - defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_PUBLIC_KEY) -mbedtls_ecp_group_id mbedtls_ecc_group_of_psa( psa_ecc_family_t curve, - size_t bits, - int bits_is_sloppy ) -{ - switch( curve ) - { - case PSA_ECC_FAMILY_SECP_R1: - switch( bits ) - { - case 192: - return( MBEDTLS_ECP_DP_SECP192R1 ); - case 224: - return( MBEDTLS_ECP_DP_SECP224R1 ); - case 256: - return( MBEDTLS_ECP_DP_SECP256R1 ); - case 384: - return( MBEDTLS_ECP_DP_SECP384R1 ); - case 521: - return( MBEDTLS_ECP_DP_SECP521R1 ); - case 528: - if( bits_is_sloppy ) - return( MBEDTLS_ECP_DP_SECP521R1 ); - break; - } - break; - - case PSA_ECC_FAMILY_BRAINPOOL_P_R1: - switch( bits ) - { - case 256: - return( MBEDTLS_ECP_DP_BP256R1 ); - case 384: - return( MBEDTLS_ECP_DP_BP384R1 ); - case 512: - return( MBEDTLS_ECP_DP_BP512R1 ); - } - break; - - case PSA_ECC_FAMILY_MONTGOMERY: - switch( bits ) - { - case 255: - return( MBEDTLS_ECP_DP_CURVE25519 ); - case 256: - if( bits_is_sloppy ) - return( MBEDTLS_ECP_DP_CURVE25519 ); - break; - case 448: - return( MBEDTLS_ECP_DP_CURVE448 ); - } - break; - - case PSA_ECC_FAMILY_SECP_K1: - switch( bits ) - { - case 192: - return( MBEDTLS_ECP_DP_SECP192K1 ); - case 224: - return( MBEDTLS_ECP_DP_SECP224K1 ); - case 256: - return( MBEDTLS_ECP_DP_SECP256K1 ); - } - break; - } - - return( MBEDTLS_ECP_DP_NONE ); -} -#endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || - * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY) || - * defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR) || - * defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_PUBLIC_KEY) */ - -static psa_status_t validate_unstructured_key_bit_size( psa_key_type_t type, - size_t bits ) -{ - /* Check that the bit size is acceptable for the key type */ - switch( type ) - { - case PSA_KEY_TYPE_RAW_DATA: - case PSA_KEY_TYPE_HMAC: - case PSA_KEY_TYPE_DERIVE: - break; -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_AES) - case PSA_KEY_TYPE_AES: - if( bits != 128 && bits != 192 && bits != 256 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_CAMELLIA) - case PSA_KEY_TYPE_CAMELLIA: - if( bits != 128 && bits != 192 && bits != 256 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_DES) - case PSA_KEY_TYPE_DES: - if( bits != 64 && bits != 128 && bits != 192 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ARC4) - case PSA_KEY_TYPE_ARC4: - if( bits < 8 || bits > 2048 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_CHACHA20) - case PSA_KEY_TYPE_CHACHA20: - if( bits != 256 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - break; -#endif - default: - return( PSA_ERROR_NOT_SUPPORTED ); - } - if( bits % 8 != 0 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - - return( PSA_SUCCESS ); -} - -/** Return the size of the key in the given slot, in bits. - * - * \param[in] slot A key slot. - * - * \return The key size in bits, read from the metadata in the slot. - */ -static inline size_t psa_get_key_slot_bits( const psa_key_slot_t *slot ) -{ - return( slot->attr.bits ); -} - -/** Check whether a given key type is valid for use with a given MAC algorithm - * - * Upon successful return of this function, the behavior of #PSA_MAC_LENGTH - * when called with the validated \p algorithm and \p key_type is well-defined. - * - * \param[in] algorithm The specific MAC algorithm (can be wildcard). - * \param[in] key_type The key type of the key to be used with the - * \p algorithm. - * - * \retval #PSA_SUCCESS - * The \p key_type is valid for use with the \p algorithm - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The \p key_type is not valid for use with the \p algorithm - */ -MBEDTLS_STATIC_TESTABLE psa_status_t psa_mac_key_can_do( - psa_algorithm_t algorithm, - psa_key_type_t key_type ) -{ - if( PSA_ALG_IS_HMAC( algorithm ) ) - { - if( key_type == PSA_KEY_TYPE_HMAC ) - return( PSA_SUCCESS ); - } - - if( PSA_ALG_IS_BLOCK_CIPHER_MAC( algorithm ) ) - { - /* Check that we're calling PSA_BLOCK_CIPHER_BLOCK_LENGTH with a cipher - * key. */ - if( ( key_type & PSA_KEY_TYPE_CATEGORY_MASK ) == - PSA_KEY_TYPE_CATEGORY_SYMMETRIC ) - { - /* PSA_BLOCK_CIPHER_BLOCK_LENGTH returns 1 for stream ciphers and - * the block length (larger than 1) for block ciphers. */ - if( PSA_BLOCK_CIPHER_BLOCK_LENGTH( key_type ) > 1 ) - return( PSA_SUCCESS ); - } - } - - return( PSA_ERROR_INVALID_ARGUMENT ); -} - -/** Try to allocate a buffer to an empty key slot. - * - * \param[in,out] slot Key slot to attach buffer to. - * \param[in] buffer_length Requested size of the buffer. - * - * \retval #PSA_SUCCESS - * The buffer has been successfully allocated. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * Not enough memory was available for allocation. - * \retval #PSA_ERROR_ALREADY_EXISTS - * Trying to allocate a buffer to a non-empty key slot. - */ -static psa_status_t psa_allocate_buffer_to_slot( psa_key_slot_t *slot, - size_t buffer_length ) -{ - if( slot->key.data != NULL ) - return( PSA_ERROR_ALREADY_EXISTS ); - - slot->key.data = mbedtls_calloc( 1, buffer_length ); - if( slot->key.data == NULL ) - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - - slot->key.bytes = buffer_length; - return( PSA_SUCCESS ); -} - -psa_status_t psa_copy_key_material_into_slot( psa_key_slot_t *slot, - const uint8_t* data, - size_t data_length ) -{ - psa_status_t status = psa_allocate_buffer_to_slot( slot, - data_length ); - if( status != PSA_SUCCESS ) - return( status ); - - memcpy( slot->key.data, data, data_length ); - return( PSA_SUCCESS ); -} - -psa_status_t psa_import_key_into_slot( - const psa_key_attributes_t *attributes, - const uint8_t *data, size_t data_length, - uint8_t *key_buffer, size_t key_buffer_size, - size_t *key_buffer_length, size_t *bits ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_type_t type = attributes->core.type; - - /* zero-length keys are never supported. */ - if( data_length == 0 ) - return( PSA_ERROR_NOT_SUPPORTED ); - - if( key_type_is_raw_bytes( type ) ) - { - *bits = PSA_BYTES_TO_BITS( data_length ); - - /* Ensure that the bytes-to-bits conversion hasn't overflown. */ - if( data_length > SIZE_MAX / 8 ) - return( PSA_ERROR_NOT_SUPPORTED ); - - /* Enforce a size limit, and in particular ensure that the bit - * size fits in its representation type. */ - if( ( *bits ) > PSA_MAX_KEY_BITS ) - return( PSA_ERROR_NOT_SUPPORTED ); - - status = validate_unstructured_key_bit_size( type, *bits ); - if( status != PSA_SUCCESS ) - return( status ); - - /* Copy the key material. */ - memcpy( key_buffer, data, data_length ); - *key_buffer_length = data_length; - (void)key_buffer_size; - - return( PSA_SUCCESS ); - } - else if( PSA_KEY_TYPE_IS_ASYMMETRIC( type ) ) - { -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || \ - defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY) - if( PSA_KEY_TYPE_IS_ECC( type ) ) - { - return( mbedtls_psa_ecp_import_key( attributes, - data, data_length, - key_buffer, key_buffer_size, - key_buffer_length, - bits ) ); - } -#endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || - * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY) */ -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || \ - defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) - if( PSA_KEY_TYPE_IS_RSA( type ) ) - { - return( mbedtls_psa_rsa_import_key( attributes, - data, data_length, - key_buffer, key_buffer_size, - key_buffer_length, - bits ) ); - } -#endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || - * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) */ - } - - return( PSA_ERROR_NOT_SUPPORTED ); -} - -/** Calculate the intersection of two algorithm usage policies. - * - * Return 0 (which allows no operation) on incompatibility. - */ -static psa_algorithm_t psa_key_policy_algorithm_intersection( - psa_key_type_t key_type, - psa_algorithm_t alg1, - psa_algorithm_t alg2 ) -{ - /* Common case: both sides actually specify the same policy. */ - if( alg1 == alg2 ) - return( alg1 ); - /* If the policies are from the same hash-and-sign family, check - * if one is a wildcard. If so the other has the specific algorithm. */ - if( PSA_ALG_IS_HASH_AND_SIGN( alg1 ) && - PSA_ALG_IS_HASH_AND_SIGN( alg2 ) && - ( alg1 & ~PSA_ALG_HASH_MASK ) == ( alg2 & ~PSA_ALG_HASH_MASK ) ) - { - if( PSA_ALG_SIGN_GET_HASH( alg1 ) == PSA_ALG_ANY_HASH ) - return( alg2 ); - if( PSA_ALG_SIGN_GET_HASH( alg2 ) == PSA_ALG_ANY_HASH ) - return( alg1 ); - } - /* If the policies are from the same AEAD family, check whether - * one of them is a minimum-tag-length wildcard. Calculate the most - * restrictive tag length. */ - if( PSA_ALG_IS_AEAD( alg1 ) && PSA_ALG_IS_AEAD( alg2 ) && - ( PSA_ALG_AEAD_WITH_SHORTENED_TAG( alg1, 0 ) == - PSA_ALG_AEAD_WITH_SHORTENED_TAG( alg2, 0 ) ) ) - { - size_t alg1_len = PSA_ALG_AEAD_GET_TAG_LENGTH( alg1 ); - size_t alg2_len = PSA_ALG_AEAD_GET_TAG_LENGTH( alg2 ); - size_t restricted_len = alg1_len > alg2_len ? alg1_len : alg2_len; - - /* If both are wildcards, return most restrictive wildcard */ - if( ( ( alg1 & PSA_ALG_AEAD_AT_LEAST_THIS_LENGTH_FLAG ) != 0 ) && - ( ( alg2 & PSA_ALG_AEAD_AT_LEAST_THIS_LENGTH_FLAG ) != 0 ) ) - { - return( PSA_ALG_AEAD_WITH_AT_LEAST_THIS_LENGTH_TAG( - alg1, restricted_len ) ); - } - /* If only one is a wildcard, return specific algorithm if compatible. */ - if( ( ( alg1 & PSA_ALG_AEAD_AT_LEAST_THIS_LENGTH_FLAG ) != 0 ) && - ( alg1_len <= alg2_len ) ) - { - return( alg2 ); - } - if( ( ( alg2 & PSA_ALG_AEAD_AT_LEAST_THIS_LENGTH_FLAG ) != 0 ) && - ( alg2_len <= alg1_len ) ) - { - return( alg1 ); - } - } - /* If the policies are from the same MAC family, check whether one - * of them is a minimum-MAC-length policy. Calculate the most - * restrictive tag length. */ - if( PSA_ALG_IS_MAC( alg1 ) && PSA_ALG_IS_MAC( alg2 ) && - ( PSA_ALG_FULL_LENGTH_MAC( alg1 ) == - PSA_ALG_FULL_LENGTH_MAC( alg2 ) ) ) - { - /* Validate the combination of key type and algorithm. Since the base - * algorithm of alg1 and alg2 are the same, we only need this once. */ - if( PSA_SUCCESS != psa_mac_key_can_do( alg1, key_type ) ) - return( 0 ); - - /* Get the (exact or at-least) output lengths for both sides of the - * requested intersection. None of the currently supported algorithms - * have an output length dependent on the actual key size, so setting it - * to a bogus value of 0 is currently OK. - * - * Note that for at-least-this-length wildcard algorithms, the output - * length is set to the shortest allowed length, which allows us to - * calculate the most restrictive tag length for the intersection. */ - size_t alg1_len = PSA_MAC_LENGTH( key_type, 0, alg1 ); - size_t alg2_len = PSA_MAC_LENGTH( key_type, 0, alg2 ); - size_t restricted_len = alg1_len > alg2_len ? alg1_len : alg2_len; - - /* If both are wildcards, return most restrictive wildcard */ - if( ( ( alg1 & PSA_ALG_MAC_AT_LEAST_THIS_LENGTH_FLAG ) != 0 ) && - ( ( alg2 & PSA_ALG_MAC_AT_LEAST_THIS_LENGTH_FLAG ) != 0 ) ) - { - return( PSA_ALG_AT_LEAST_THIS_LENGTH_MAC( alg1, restricted_len ) ); - } - - /* If only one is an at-least-this-length policy, the intersection would - * be the other (fixed-length) policy as long as said fixed length is - * equal to or larger than the shortest allowed length. */ - if( ( alg1 & PSA_ALG_MAC_AT_LEAST_THIS_LENGTH_FLAG ) != 0 ) - { - return( ( alg1_len <= alg2_len ) ? alg2 : 0 ); - } - if( ( alg2 & PSA_ALG_MAC_AT_LEAST_THIS_LENGTH_FLAG ) != 0 ) - { - return( ( alg2_len <= alg1_len ) ? alg1 : 0 ); - } - - /* If none of them are wildcards, check whether they define the same tag - * length. This is still possible here when one is default-length and - * the other specific-length. Ensure to always return the - * specific-length version for the intersection. */ - if( alg1_len == alg2_len ) - return( PSA_ALG_TRUNCATED_MAC( alg1, alg1_len ) ); - } - /* If the policies are incompatible, allow nothing. */ - return( 0 ); -} - -static int psa_key_algorithm_permits( psa_key_type_t key_type, - psa_algorithm_t policy_alg, - psa_algorithm_t requested_alg ) -{ - /* Common case: the policy only allows requested_alg. */ - if( requested_alg == policy_alg ) - return( 1 ); - /* If policy_alg is a hash-and-sign with a wildcard for the hash, - * and requested_alg is the same hash-and-sign family with any hash, - * then requested_alg is compliant with policy_alg. */ - if( PSA_ALG_IS_HASH_AND_SIGN( requested_alg ) && - PSA_ALG_SIGN_GET_HASH( policy_alg ) == PSA_ALG_ANY_HASH ) - { - return( ( policy_alg & ~PSA_ALG_HASH_MASK ) == - ( requested_alg & ~PSA_ALG_HASH_MASK ) ); - } - /* If policy_alg is a wildcard AEAD algorithm of the same base as - * the requested algorithm, check the requested tag length to be - * equal-length or longer than the wildcard-specified length. */ - if( PSA_ALG_IS_AEAD( policy_alg ) && - PSA_ALG_IS_AEAD( requested_alg ) && - ( PSA_ALG_AEAD_WITH_SHORTENED_TAG( policy_alg, 0 ) == - PSA_ALG_AEAD_WITH_SHORTENED_TAG( requested_alg, 0 ) ) && - ( ( policy_alg & PSA_ALG_AEAD_AT_LEAST_THIS_LENGTH_FLAG ) != 0 ) ) - { - return( PSA_ALG_AEAD_GET_TAG_LENGTH( policy_alg ) <= - PSA_ALG_AEAD_GET_TAG_LENGTH( requested_alg ) ); - } - /* If policy_alg is a MAC algorithm of the same base as the requested - * algorithm, check whether their MAC lengths are compatible. */ - if( PSA_ALG_IS_MAC( policy_alg ) && - PSA_ALG_IS_MAC( requested_alg ) && - ( PSA_ALG_FULL_LENGTH_MAC( policy_alg ) == - PSA_ALG_FULL_LENGTH_MAC( requested_alg ) ) ) - { - /* Validate the combination of key type and algorithm. Since the policy - * and requested algorithms are the same, we only need this once. */ - if( PSA_SUCCESS != psa_mac_key_can_do( policy_alg, key_type ) ) - return( 0 ); - - /* Get both the requested output length for the algorithm which is to be - * verified, and the default output length for the base algorithm. - * Note that none of the currently supported algorithms have an output - * length dependent on actual key size, so setting it to a bogus value - * of 0 is currently OK. */ - size_t requested_output_length = PSA_MAC_LENGTH( - key_type, 0, requested_alg ); - size_t default_output_length = PSA_MAC_LENGTH( - key_type, 0, - PSA_ALG_FULL_LENGTH_MAC( requested_alg ) ); - - /* If the policy is default-length, only allow an algorithm with - * a declared exact-length matching the default. */ - if( PSA_MAC_TRUNCATED_LENGTH( policy_alg ) == 0 ) - return( requested_output_length == default_output_length ); - - /* If the requested algorithm is default-length, allow it if the policy - * length exactly matches the default length. */ - if( PSA_MAC_TRUNCATED_LENGTH( requested_alg ) == 0 && - PSA_MAC_TRUNCATED_LENGTH( policy_alg ) == default_output_length ) - { - return( 1 ); - } - - /* If policy_alg is an at-least-this-length wildcard MAC algorithm, - * check for the requested MAC length to be equal to or longer than the - * minimum allowed length. */ - if( ( policy_alg & PSA_ALG_MAC_AT_LEAST_THIS_LENGTH_FLAG ) != 0 ) - { - return( PSA_MAC_TRUNCATED_LENGTH( policy_alg ) <= - requested_output_length ); - } - } - /* If policy_alg is a generic key agreement operation, then using it for - * a key derivation with that key agreement should also be allowed. This - * behaviour is expected to be defined in a future specification version. */ - if( PSA_ALG_IS_RAW_KEY_AGREEMENT( policy_alg ) && - PSA_ALG_IS_KEY_AGREEMENT( requested_alg ) ) - { - return( PSA_ALG_KEY_AGREEMENT_GET_BASE( requested_alg ) == - policy_alg ); - } - /* If it isn't explicitly permitted, it's forbidden. */ - return( 0 ); -} - -/** Test whether a policy permits an algorithm. - * - * The caller must test usage flags separately. - * - * \note This function requires providing the key type for which the policy is - * being validated, since some algorithm policy definitions (e.g. MAC) - * have different properties depending on what kind of cipher it is - * combined with. - * - * \retval PSA_SUCCESS When \p alg is a specific algorithm - * allowed by the \p policy. - * \retval PSA_ERROR_INVALID_ARGUMENT When \p alg is not a specific algorithm - * \retval PSA_ERROR_NOT_PERMITTED When \p alg is a specific algorithm, but - * the \p policy does not allow it. - */ -static psa_status_t psa_key_policy_permits( const psa_key_policy_t *policy, - psa_key_type_t key_type, - psa_algorithm_t alg ) -{ - /* '0' is not a valid algorithm */ - if( alg == 0 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - - /* A requested algorithm cannot be a wildcard. */ - if( PSA_ALG_IS_WILDCARD( alg ) ) - return( PSA_ERROR_INVALID_ARGUMENT ); - - if( psa_key_algorithm_permits( key_type, policy->alg, alg ) || - psa_key_algorithm_permits( key_type, policy->alg2, alg ) ) - return( PSA_SUCCESS ); - else - return( PSA_ERROR_NOT_PERMITTED ); -} - -/** Restrict a key policy based on a constraint. - * - * \note This function requires providing the key type for which the policy is - * being restricted, since some algorithm policy definitions (e.g. MAC) - * have different properties depending on what kind of cipher it is - * combined with. - * - * \param[in] key_type The key type for which to restrict the policy - * \param[in,out] policy The policy to restrict. - * \param[in] constraint The policy constraint to apply. - * - * \retval #PSA_SUCCESS - * \c *policy contains the intersection of the original value of - * \c *policy and \c *constraint. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \c key_type, \c *policy and \c *constraint are incompatible. - * \c *policy is unchanged. - */ -static psa_status_t psa_restrict_key_policy( - psa_key_type_t key_type, - psa_key_policy_t *policy, - const psa_key_policy_t *constraint ) -{ - psa_algorithm_t intersection_alg = - psa_key_policy_algorithm_intersection( key_type, policy->alg, - constraint->alg ); - psa_algorithm_t intersection_alg2 = - psa_key_policy_algorithm_intersection( key_type, policy->alg2, - constraint->alg2 ); - if( intersection_alg == 0 && policy->alg != 0 && constraint->alg != 0 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - if( intersection_alg2 == 0 && policy->alg2 != 0 && constraint->alg2 != 0 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - policy->usage &= constraint->usage; - policy->alg = intersection_alg; - policy->alg2 = intersection_alg2; - return( PSA_SUCCESS ); -} - -/** Get the description of a key given its identifier and policy constraints - * and lock it. - * - * The key must have allow all the usage flags set in \p usage. If \p alg is - * nonzero, the key must allow operations with this algorithm. If \p alg is - * zero, the algorithm is not checked. - * - * In case of a persistent key, the function loads the description of the key - * into a key slot if not already done. - * - * On success, the returned key slot is locked. It is the responsibility of - * the caller to unlock the key slot when it does not access it anymore. - */ -static psa_status_t psa_get_and_lock_key_slot_with_policy( - mbedtls_svc_key_id_t key, - psa_key_slot_t **p_slot, - psa_key_usage_t usage, - psa_algorithm_t alg ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_slot_t *slot; - - status = psa_get_and_lock_key_slot( key, p_slot ); - if( status != PSA_SUCCESS ) - return( status ); - slot = *p_slot; - - /* Enforce that usage policy for the key slot contains all the flags - * required by the usage parameter. There is one exception: public - * keys can always be exported, so we treat public key objects as - * if they had the export flag. */ - if( PSA_KEY_TYPE_IS_PUBLIC_KEY( slot->attr.type ) ) - usage &= ~PSA_KEY_USAGE_EXPORT; - - if( ( slot->attr.policy.usage & usage ) != usage ) - { - status = PSA_ERROR_NOT_PERMITTED; - goto error; - } - - /* Enforce that the usage policy permits the requested algortihm. */ - if( alg != 0 ) - { - status = psa_key_policy_permits( &slot->attr.policy, - slot->attr.type, - alg ); - if( status != PSA_SUCCESS ) - goto error; - } - - return( PSA_SUCCESS ); - -error: - *p_slot = NULL; - psa_unlock_key_slot( slot ); - - return( status ); -} - -/** Get a key slot containing a transparent key and lock it. - * - * A transparent key is a key for which the key material is directly - * available, as opposed to a key in a secure element. - * - * This is a temporary function to use instead of - * psa_get_and_lock_key_slot_with_policy() until secure element support is - * fully implemented. - * - * On success, the returned key slot is locked. It is the responsibility of the - * caller to unlock the key slot when it does not access it anymore. - */ -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) -static psa_status_t psa_get_and_lock_transparent_key_slot_with_policy( - mbedtls_svc_key_id_t key, - psa_key_slot_t **p_slot, - psa_key_usage_t usage, - psa_algorithm_t alg ) -{ - psa_status_t status = psa_get_and_lock_key_slot_with_policy( key, p_slot, - usage, alg ); - if( status != PSA_SUCCESS ) - return( status ); - - if( psa_key_slot_is_external( *p_slot ) ) - { - psa_unlock_key_slot( *p_slot ); - *p_slot = NULL; - return( PSA_ERROR_NOT_SUPPORTED ); - } - - return( PSA_SUCCESS ); -} -#else /* MBEDTLS_PSA_CRYPTO_SE_C */ -/* With no secure element support, all keys are transparent. */ -#define psa_get_and_lock_transparent_key_slot_with_policy( key, p_slot, usage, alg ) \ - psa_get_and_lock_key_slot_with_policy( key, p_slot, usage, alg ) -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - -/** Wipe key data from a slot. Preserve metadata such as the policy. */ -static psa_status_t psa_remove_key_data_from_memory( psa_key_slot_t *slot ) -{ - /* Data pointer will always be either a valid pointer or NULL in an - * initialized slot, so we can just free it. */ - if( slot->key.data != NULL ) - mbedtls_platform_zeroize( slot->key.data, slot->key.bytes); - - mbedtls_free( slot->key.data ); - slot->key.data = NULL; - slot->key.bytes = 0; - - return( PSA_SUCCESS ); -} - -/** Completely wipe a slot in memory, including its policy. - * Persistent storage is not affected. */ -psa_status_t psa_wipe_key_slot( psa_key_slot_t *slot ) -{ - psa_status_t status = psa_remove_key_data_from_memory( slot ); - - /* - * As the return error code may not be handled in case of multiple errors, - * do our best to report an unexpected lock counter: if available - * call MBEDTLS_PARAM_FAILED that may terminate execution (if called as - * part of the execution of a test suite this will stop the test suite - * execution). - */ - if( slot->lock_count != 1 ) - { -#ifdef MBEDTLS_CHECK_PARAMS - MBEDTLS_PARAM_FAILED( slot->lock_count == 1 ); -#endif - status = PSA_ERROR_CORRUPTION_DETECTED; - } - - /* Multipart operations may still be using the key. This is safe - * because all multipart operation objects are independent from - * the key slot: if they need to access the key after the setup - * phase, they have a copy of the key. Note that this means that - * key material can linger until all operations are completed. */ - /* At this point, key material and other type-specific content has - * been wiped. Clear remaining metadata. We can call memset and not - * zeroize because the metadata is not particularly sensitive. */ - memset( slot, 0, sizeof( *slot ) ); - return( status ); -} - -psa_status_t psa_destroy_key( mbedtls_svc_key_id_t key ) -{ - psa_key_slot_t *slot; - psa_status_t status; /* status of the last operation */ - psa_status_t overall_status = PSA_SUCCESS; -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - psa_se_drv_table_entry_t *driver; -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - - if( mbedtls_svc_key_id_is_null( key ) ) - return( PSA_SUCCESS ); - - /* - * Get the description of the key in a key slot. In case of a persistent - * key, this will load the key description from persistent memory if not - * done yet. We cannot avoid this loading as without it we don't know if - * the key is operated by an SE or not and this information is needed by - * the current implementation. - */ - status = psa_get_and_lock_key_slot( key, &slot ); - if( status != PSA_SUCCESS ) - return( status ); - - /* - * If the key slot containing the key description is under access by the - * library (apart from the present access), the key cannot be destroyed - * yet. For the time being, just return in error. Eventually (to be - * implemented), the key should be destroyed when all accesses have - * stopped. - */ - if( slot->lock_count > 1 ) - { - psa_unlock_key_slot( slot ); - return( PSA_ERROR_GENERIC_ERROR ); - } - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - driver = psa_get_se_driver_entry( slot->attr.lifetime ); - if( driver != NULL ) - { - /* For a key in a secure element, we need to do three things: - * remove the key file in internal storage, destroy the - * key inside the secure element, and update the driver's - * persistent data. Start a transaction that will encompass these - * three actions. */ - psa_crypto_prepare_transaction( PSA_CRYPTO_TRANSACTION_DESTROY_KEY ); - psa_crypto_transaction.key.lifetime = slot->attr.lifetime; - psa_crypto_transaction.key.slot = psa_key_slot_get_slot_number( slot ); - psa_crypto_transaction.key.id = slot->attr.id; - status = psa_crypto_save_transaction( ); - if( status != PSA_SUCCESS ) - { - (void) psa_crypto_stop_transaction( ); - /* We should still try to destroy the key in the secure - * element and the key metadata in storage. This is especially - * important if the error is that the storage is full. - * But how to do it exactly without risking an inconsistent - * state after a reset? - * https://github.com/ARMmbed/mbed-crypto/issues/215 - */ - overall_status = status; - goto exit; - } - - status = psa_destroy_se_key( driver, - psa_key_slot_get_slot_number( slot ) ); - if( overall_status == PSA_SUCCESS ) - overall_status = status; - } -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - -#if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) - if( ! PSA_KEY_LIFETIME_IS_VOLATILE( slot->attr.lifetime ) ) - { - status = psa_destroy_persistent_key( slot->attr.id ); - if( overall_status == PSA_SUCCESS ) - overall_status = status; - - /* TODO: other slots may have a copy of the same key. We should - * invalidate them. - * https://github.com/ARMmbed/mbed-crypto/issues/214 - */ - } -#endif /* defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) */ - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - if( driver != NULL ) - { - status = psa_save_se_persistent_data( driver ); - if( overall_status == PSA_SUCCESS ) - overall_status = status; - status = psa_crypto_stop_transaction( ); - if( overall_status == PSA_SUCCESS ) - overall_status = status; - } -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) -exit: -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - status = psa_wipe_key_slot( slot ); - /* Prioritize CORRUPTION_DETECTED from wiping over a storage error */ - if( overall_status == PSA_SUCCESS ) - overall_status = status; - return( overall_status ); -} - -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || \ - defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) -static psa_status_t psa_get_rsa_public_exponent( - const mbedtls_rsa_context *rsa, - psa_key_attributes_t *attributes ) -{ - mbedtls_mpi mpi; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - uint8_t *buffer = NULL; - size_t buflen; - mbedtls_mpi_init( &mpi ); - - ret = mbedtls_rsa_export( rsa, NULL, NULL, NULL, NULL, &mpi ); - if( ret != 0 ) - goto exit; - if( mbedtls_mpi_cmp_int( &mpi, 65537 ) == 0 ) - { - /* It's the default value, which is reported as an empty string, - * so there's nothing to do. */ - goto exit; - } - - buflen = mbedtls_mpi_size( &mpi ); - buffer = mbedtls_calloc( 1, buflen ); - if( buffer == NULL ) - { - ret = MBEDTLS_ERR_MPI_ALLOC_FAILED; - goto exit; - } - ret = mbedtls_mpi_write_binary( &mpi, buffer, buflen ); - if( ret != 0 ) - goto exit; - attributes->domain_parameters = buffer; - attributes->domain_parameters_size = buflen; - -exit: - mbedtls_mpi_free( &mpi ); - if( ret != 0 ) - mbedtls_free( buffer ); - return( mbedtls_to_psa_error( ret ) ); -} -#endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || - * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) */ - -/** Retrieve all the publicly-accessible attributes of a key. - */ -psa_status_t psa_get_key_attributes( mbedtls_svc_key_id_t key, - psa_key_attributes_t *attributes ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_status_t unlock_status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_slot_t *slot; - - psa_reset_key_attributes( attributes ); - - status = psa_get_and_lock_key_slot_with_policy( key, &slot, 0, 0 ); - if( status != PSA_SUCCESS ) - return( status ); - - attributes->core = slot->attr; - attributes->core.flags &= ( MBEDTLS_PSA_KA_MASK_EXTERNAL_ONLY | - MBEDTLS_PSA_KA_MASK_DUAL_USE ); - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - if( psa_key_slot_is_external( slot ) ) - psa_set_key_slot_number( attributes, - psa_key_slot_get_slot_number( slot ) ); -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - - switch( slot->attr.type ) - { -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || \ - defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) - case PSA_KEY_TYPE_RSA_KEY_PAIR: - case PSA_KEY_TYPE_RSA_PUBLIC_KEY: -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - /* TODO: reporting the public exponent for opaque keys - * is not yet implemented. - * https://github.com/ARMmbed/mbed-crypto/issues/216 - */ - if( psa_key_slot_is_external( slot ) ) - break; -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - { - mbedtls_rsa_context *rsa = NULL; - - status = mbedtls_psa_rsa_load_representation( - slot->attr.type, - slot->key.data, - slot->key.bytes, - &rsa ); - if( status != PSA_SUCCESS ) - break; - - status = psa_get_rsa_public_exponent( rsa, - attributes ); - mbedtls_rsa_free( rsa ); - mbedtls_free( rsa ); - } - break; -#endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || - * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) */ - default: - /* Nothing else to do. */ - break; - } - - if( status != PSA_SUCCESS ) - psa_reset_key_attributes( attributes ); - - unlock_status = psa_unlock_key_slot( slot ); - - return( ( status == PSA_SUCCESS ) ? unlock_status : status ); -} - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) -psa_status_t psa_get_key_slot_number( - const psa_key_attributes_t *attributes, - psa_key_slot_number_t *slot_number ) -{ - if( attributes->core.flags & MBEDTLS_PSA_KA_FLAG_HAS_SLOT_NUMBER ) - { - *slot_number = attributes->slot_number; - return( PSA_SUCCESS ); - } - else - return( PSA_ERROR_INVALID_ARGUMENT ); -} -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - -static psa_status_t psa_export_key_buffer_internal( const uint8_t *key_buffer, - size_t key_buffer_size, - uint8_t *data, - size_t data_size, - size_t *data_length ) -{ - if( key_buffer_size > data_size ) - return( PSA_ERROR_BUFFER_TOO_SMALL ); - memcpy( data, key_buffer, key_buffer_size ); - memset( data + key_buffer_size, 0, - data_size - key_buffer_size ); - *data_length = key_buffer_size; - return( PSA_SUCCESS ); -} - -psa_status_t psa_export_key_internal( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ) -{ - psa_key_type_t type = attributes->core.type; - - if( key_type_is_raw_bytes( type ) || - PSA_KEY_TYPE_IS_RSA( type ) || - PSA_KEY_TYPE_IS_ECC( type ) ) - { - return( psa_export_key_buffer_internal( - key_buffer, key_buffer_size, - data, data_size, data_length ) ); - } - else - { - /* This shouldn't happen in the reference implementation, but - it is valid for a special-purpose implementation to omit - support for exporting certain key types. */ - return( PSA_ERROR_NOT_SUPPORTED ); - } -} - -psa_status_t psa_export_key( mbedtls_svc_key_id_t key, - uint8_t *data, - size_t data_size, - size_t *data_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_status_t unlock_status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_slot_t *slot; - - /* Reject a zero-length output buffer now, since this can never be a - * valid key representation. This way we know that data must be a valid - * pointer and we can do things like memset(data, ..., data_size). */ - if( data_size == 0 ) - return( PSA_ERROR_BUFFER_TOO_SMALL ); - - /* Set the key to empty now, so that even when there are errors, we always - * set data_length to a value between 0 and data_size. On error, setting - * the key to empty is a good choice because an empty key representation is - * unlikely to be accepted anywhere. */ - *data_length = 0; - - /* Export requires the EXPORT flag. There is an exception for public keys, - * which don't require any flag, but - * psa_get_and_lock_key_slot_with_policy() takes care of this. - */ - status = psa_get_and_lock_key_slot_with_policy( key, &slot, - PSA_KEY_USAGE_EXPORT, 0 ); - if( status != PSA_SUCCESS ) - return( status ); - - psa_key_attributes_t attributes = { - .core = slot->attr - }; - status = psa_driver_wrapper_export_key( &attributes, - slot->key.data, slot->key.bytes, - data, data_size, data_length ); - - unlock_status = psa_unlock_key_slot( slot ); - - return( ( status == PSA_SUCCESS ) ? unlock_status : status ); -} - -psa_status_t psa_export_public_key_internal( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, - size_t key_buffer_size, - uint8_t *data, - size_t data_size, - size_t *data_length ) -{ - psa_key_type_t type = attributes->core.type; - - if( PSA_KEY_TYPE_IS_RSA( type ) || PSA_KEY_TYPE_IS_ECC( type ) ) - { - if( PSA_KEY_TYPE_IS_PUBLIC_KEY( type ) ) - { - /* Exporting public -> public */ - return( psa_export_key_buffer_internal( - key_buffer, key_buffer_size, - data, data_size, data_length ) ); - } - - if( PSA_KEY_TYPE_IS_RSA( type ) ) - { -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || \ - defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) - return( mbedtls_psa_rsa_export_public_key( attributes, - key_buffer, - key_buffer_size, - data, - data_size, - data_length ) ); -#else - /* We don't know how to convert a private RSA key to public. */ - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || - * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) */ - } - else - { -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || \ - defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY) - return( mbedtls_psa_ecp_export_public_key( attributes, - key_buffer, - key_buffer_size, - data, - data_size, - data_length ) ); -#else - /* We don't know how to convert a private ECC key to public */ - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || - * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY) */ - } - } - else - { - /* This shouldn't happen in the reference implementation, but - it is valid for a special-purpose implementation to omit - support for exporting certain key types. */ - return( PSA_ERROR_NOT_SUPPORTED ); - } -} - -psa_status_t psa_export_public_key( mbedtls_svc_key_id_t key, - uint8_t *data, - size_t data_size, - size_t *data_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_status_t unlock_status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_slot_t *slot; - - /* Reject a zero-length output buffer now, since this can never be a - * valid key representation. This way we know that data must be a valid - * pointer and we can do things like memset(data, ..., data_size). */ - if( data_size == 0 ) - return( PSA_ERROR_BUFFER_TOO_SMALL ); - - /* Set the key to empty now, so that even when there are errors, we always - * set data_length to a value between 0 and data_size. On error, setting - * the key to empty is a good choice because an empty key representation is - * unlikely to be accepted anywhere. */ - *data_length = 0; - - /* Exporting a public key doesn't require a usage flag. */ - status = psa_get_and_lock_key_slot_with_policy( key, &slot, 0, 0 ); - if( status != PSA_SUCCESS ) - return( status ); - - if( ! PSA_KEY_TYPE_IS_ASYMMETRIC( slot->attr.type ) ) - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto exit; - } - - psa_key_attributes_t attributes = { - .core = slot->attr - }; - status = psa_driver_wrapper_export_public_key( - &attributes, slot->key.data, slot->key.bytes, - data, data_size, data_length ); - -exit: - unlock_status = psa_unlock_key_slot( slot ); - - return( ( status == PSA_SUCCESS ) ? unlock_status : status ); -} - -#if defined(static_assert) -static_assert( ( MBEDTLS_PSA_KA_MASK_EXTERNAL_ONLY & MBEDTLS_PSA_KA_MASK_DUAL_USE ) == 0, - "One or more key attribute flag is listed as both external-only and dual-use" ); -static_assert( ( PSA_KA_MASK_INTERNAL_ONLY & MBEDTLS_PSA_KA_MASK_DUAL_USE ) == 0, - "One or more key attribute flag is listed as both internal-only and dual-use" ); -static_assert( ( PSA_KA_MASK_INTERNAL_ONLY & MBEDTLS_PSA_KA_MASK_EXTERNAL_ONLY ) == 0, - "One or more key attribute flag is listed as both internal-only and external-only" ); -#endif - -/** Validate that a key policy is internally well-formed. - * - * This function only rejects invalid policies. It does not validate the - * consistency of the policy with respect to other attributes of the key - * such as the key type. - */ -static psa_status_t psa_validate_key_policy( const psa_key_policy_t *policy ) -{ - if( ( policy->usage & ~( PSA_KEY_USAGE_EXPORT | - PSA_KEY_USAGE_COPY | - PSA_KEY_USAGE_ENCRYPT | - PSA_KEY_USAGE_DECRYPT | - PSA_KEY_USAGE_SIGN_HASH | - PSA_KEY_USAGE_VERIFY_HASH | - PSA_KEY_USAGE_DERIVE ) ) != 0 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - - return( PSA_SUCCESS ); -} - -/** Validate the internal consistency of key attributes. - * - * This function only rejects invalid attribute values. If does not - * validate the consistency of the attributes with any key data that may - * be involved in the creation of the key. - * - * Call this function early in the key creation process. - * - * \param[in] attributes Key attributes for the new key. - * \param[out] p_drv On any return, the driver for the key, if any. - * NULL for a transparent key. - * - */ -static psa_status_t psa_validate_key_attributes( - const psa_key_attributes_t *attributes, - psa_se_drv_table_entry_t **p_drv ) -{ - psa_status_t status = PSA_ERROR_INVALID_ARGUMENT; - psa_key_lifetime_t lifetime = psa_get_key_lifetime( attributes ); - mbedtls_svc_key_id_t key = psa_get_key_id( attributes ); - - status = psa_validate_key_location( lifetime, p_drv ); - if( status != PSA_SUCCESS ) - return( status ); - - status = psa_validate_key_persistence( lifetime ); - if( status != PSA_SUCCESS ) - return( status ); - - if ( PSA_KEY_LIFETIME_IS_VOLATILE( lifetime ) ) - { - if( MBEDTLS_SVC_KEY_ID_GET_KEY_ID( key ) != 0 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - } - else - { - status = psa_validate_key_id( psa_get_key_id( attributes ), 0 ); - if( status != PSA_SUCCESS ) - return( status ); - } - - status = psa_validate_key_policy( &attributes->core.policy ); - if( status != PSA_SUCCESS ) - return( status ); - - /* Refuse to create overly large keys. - * Note that this doesn't trigger on import if the attributes don't - * explicitly specify a size (so psa_get_key_bits returns 0), so - * psa_import_key() needs its own checks. */ - if( psa_get_key_bits( attributes ) > PSA_MAX_KEY_BITS ) - return( PSA_ERROR_NOT_SUPPORTED ); - - /* Reject invalid flags. These should not be reachable through the API. */ - if( attributes->core.flags & ~ ( MBEDTLS_PSA_KA_MASK_EXTERNAL_ONLY | - MBEDTLS_PSA_KA_MASK_DUAL_USE ) ) - return( PSA_ERROR_INVALID_ARGUMENT ); - - return( PSA_SUCCESS ); -} - -/** Prepare a key slot to receive key material. - * - * This function allocates a key slot and sets its metadata. - * - * If this function fails, call psa_fail_key_creation(). - * - * This function is intended to be used as follows: - * -# Call psa_start_key_creation() to allocate a key slot, prepare - * it with the specified attributes, and in case of a volatile key assign it - * a volatile key identifier. - * -# Populate the slot with the key material. - * -# Call psa_finish_key_creation() to finalize the creation of the slot. - * In case of failure at any step, stop the sequence and call - * psa_fail_key_creation(). - * - * On success, the key slot is locked. It is the responsibility of the caller - * to unlock the key slot when it does not access it anymore. - * - * \param method An identification of the calling function. - * \param[in] attributes Key attributes for the new key. - * \param[out] p_slot On success, a pointer to the prepared slot. - * \param[out] p_drv On any return, the driver for the key, if any. - * NULL for a transparent key. - * - * \retval #PSA_SUCCESS - * The key slot is ready to receive key material. - * \return If this function fails, the key slot is an invalid state. - * You must call psa_fail_key_creation() to wipe and free the slot. - */ -static psa_status_t psa_start_key_creation( - psa_key_creation_method_t method, - const psa_key_attributes_t *attributes, - psa_key_slot_t **p_slot, - psa_se_drv_table_entry_t **p_drv ) -{ - psa_status_t status; - psa_key_id_t volatile_key_id; - psa_key_slot_t *slot; - - (void) method; - *p_drv = NULL; - - status = psa_validate_key_attributes( attributes, p_drv ); - if( status != PSA_SUCCESS ) - return( status ); - - status = psa_get_empty_key_slot( &volatile_key_id, p_slot ); - if( status != PSA_SUCCESS ) - return( status ); - slot = *p_slot; - - /* We're storing the declared bit-size of the key. It's up to each - * creation mechanism to verify that this information is correct. - * It's automatically correct for mechanisms that use the bit-size as - * an input (generate, device) but not for those where the bit-size - * is optional (import, copy). In case of a volatile key, assign it the - * volatile key identifier associated to the slot returned to contain its - * definition. */ - - slot->attr = attributes->core; - if( PSA_KEY_LIFETIME_IS_VOLATILE( slot->attr.lifetime ) ) - { -#if !defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER) - slot->attr.id = volatile_key_id; -#else - slot->attr.id.key_id = volatile_key_id; -#endif - } - - /* Erase external-only flags from the internal copy. To access - * external-only flags, query `attributes`. Thanks to the check - * in psa_validate_key_attributes(), this leaves the dual-use - * flags and any internal flag that psa_get_empty_key_slot() - * may have set. */ - slot->attr.flags &= ~MBEDTLS_PSA_KA_MASK_EXTERNAL_ONLY; - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - /* For a key in a secure element, we need to do three things - * when creating or registering a persistent key: - * create the key file in internal storage, create the - * key inside the secure element, and update the driver's - * persistent data. This is done by starting a transaction that will - * encompass these three actions. - * For registering a volatile key, we just need to find an appropriate - * slot number inside the SE. Since the key is designated volatile, creating - * a transaction is not required. */ - /* The first thing to do is to find a slot number for the new key. - * We save the slot number in persistent storage as part of the - * transaction data. It will be needed to recover if the power - * fails during the key creation process, to clean up on the secure - * element side after restarting. Obtaining a slot number from the - * secure element driver updates its persistent state, but we do not yet - * save the driver's persistent state, so that if the power fails, - * we can roll back to a state where the key doesn't exist. */ - if( *p_drv != NULL ) - { - psa_key_slot_number_t slot_number; - status = psa_find_se_slot_for_key( attributes, method, *p_drv, - &slot_number ); - if( status != PSA_SUCCESS ) - return( status ); - - if( ! PSA_KEY_LIFETIME_IS_VOLATILE( attributes->core.lifetime ) ) - { - psa_crypto_prepare_transaction( PSA_CRYPTO_TRANSACTION_CREATE_KEY ); - psa_crypto_transaction.key.lifetime = slot->attr.lifetime; - psa_crypto_transaction.key.slot = slot_number; - psa_crypto_transaction.key.id = slot->attr.id; - status = psa_crypto_save_transaction( ); - if( status != PSA_SUCCESS ) - { - (void) psa_crypto_stop_transaction( ); - return( status ); - } - } - - status = psa_copy_key_material_into_slot( - slot, (uint8_t *)( &slot_number ), sizeof( slot_number ) ); - } - - if( *p_drv == NULL && method == PSA_KEY_CREATION_REGISTER ) - { - /* Key registration only makes sense with a secure element. */ - return( PSA_ERROR_INVALID_ARGUMENT ); - } -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - - return( PSA_SUCCESS ); -} - -/** Finalize the creation of a key once its key material has been set. - * - * This entails writing the key to persistent storage. - * - * If this function fails, call psa_fail_key_creation(). - * See the documentation of psa_start_key_creation() for the intended use - * of this function. - * - * If the finalization succeeds, the function unlocks the key slot (it was - * locked by psa_start_key_creation()) and the key slot cannot be accessed - * anymore as part of the key creation process. - * - * \param[in,out] slot Pointer to the slot with key material. - * \param[in] driver The secure element driver for the key, - * or NULL for a transparent key. - * \param[out] key On success, identifier of the key. Note that the - * key identifier is also stored in the key slot. - * - * \retval #PSA_SUCCESS - * The key was successfully created. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_INSUFFICIENT_STORAGE - * \retval #PSA_ERROR_ALREADY_EXISTS - * \retval #PSA_ERROR_DATA_INVALID - * \retval #PSA_ERROR_DATA_CORRUPT - * \retval #PSA_ERROR_STORAGE_FAILURE - * - * \return If this function fails, the key slot is an invalid state. - * You must call psa_fail_key_creation() to wipe and free the slot. - */ -static psa_status_t psa_finish_key_creation( - psa_key_slot_t *slot, - psa_se_drv_table_entry_t *driver, - mbedtls_svc_key_id_t *key) -{ - psa_status_t status = PSA_SUCCESS; - (void) slot; - (void) driver; - -#if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) - if( ! PSA_KEY_LIFETIME_IS_VOLATILE( slot->attr.lifetime ) ) - { -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - if( driver != NULL ) - { - psa_se_key_data_storage_t data; - psa_key_slot_number_t slot_number = - psa_key_slot_get_slot_number( slot ) ; - -#if defined(static_assert) - static_assert( sizeof( slot_number ) == - sizeof( data.slot_number ), - "Slot number size does not match psa_se_key_data_storage_t" ); -#endif - memcpy( &data.slot_number, &slot_number, sizeof( slot_number ) ); - status = psa_save_persistent_key( &slot->attr, - (uint8_t*) &data, - sizeof( data ) ); - } - else -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - { - /* Key material is saved in export representation in the slot, so - * just pass the slot buffer for storage. */ - status = psa_save_persistent_key( &slot->attr, - slot->key.data, - slot->key.bytes ); - } - } -#endif /* defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) */ - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - /* Finish the transaction for a key creation. This does not - * happen when registering an existing key. Detect this case - * by checking whether a transaction is in progress (actual - * creation of a persistent key in a secure element requires a transaction, - * but registration or volatile key creation doesn't use one). */ - if( driver != NULL && - psa_crypto_transaction.unknown.type == PSA_CRYPTO_TRANSACTION_CREATE_KEY ) - { - status = psa_save_se_persistent_data( driver ); - if( status != PSA_SUCCESS ) - { - psa_destroy_persistent_key( slot->attr.id ); - return( status ); - } - status = psa_crypto_stop_transaction( ); - } -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - - if( status == PSA_SUCCESS ) - { - *key = slot->attr.id; - status = psa_unlock_key_slot( slot ); - if( status != PSA_SUCCESS ) - *key = MBEDTLS_SVC_KEY_ID_INIT; - } - - return( status ); -} - -/** Abort the creation of a key. - * - * You may call this function after calling psa_start_key_creation(), - * or after psa_finish_key_creation() fails. In other circumstances, this - * function may not clean up persistent storage. - * See the documentation of psa_start_key_creation() for the intended use - * of this function. - * - * \param[in,out] slot Pointer to the slot with key material. - * \param[in] driver The secure element driver for the key, - * or NULL for a transparent key. - */ -static void psa_fail_key_creation( psa_key_slot_t *slot, - psa_se_drv_table_entry_t *driver ) -{ - (void) driver; - - if( slot == NULL ) - return; - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - /* TODO: If the key has already been created in the secure - * element, and the failure happened later (when saving metadata - * to internal storage), we need to destroy the key in the secure - * element. - * https://github.com/ARMmbed/mbed-crypto/issues/217 - */ - - /* Abort the ongoing transaction if any (there may not be one if - * the creation process failed before starting one, or if the - * key creation is a registration of a key in a secure element). - * Earlier functions must already have done what it takes to undo any - * partial creation. All that's left is to update the transaction data - * itself. */ - (void) psa_crypto_stop_transaction( ); -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - - psa_wipe_key_slot( slot ); -} - -/** Validate optional attributes during key creation. - * - * Some key attributes are optional during key creation. If they are - * specified in the attributes structure, check that they are consistent - * with the data in the slot. - * - * This function should be called near the end of key creation, after - * the slot in memory is fully populated but before saving persistent data. - */ -static psa_status_t psa_validate_optional_attributes( - const psa_key_slot_t *slot, - const psa_key_attributes_t *attributes ) -{ - if( attributes->core.type != 0 ) - { - if( attributes->core.type != slot->attr.type ) - return( PSA_ERROR_INVALID_ARGUMENT ); - } - - if( attributes->domain_parameters_size != 0 ) - { -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || \ - defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) - if( PSA_KEY_TYPE_IS_RSA( slot->attr.type ) ) - { - mbedtls_rsa_context *rsa = NULL; - mbedtls_mpi actual, required; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - - psa_status_t status = mbedtls_psa_rsa_load_representation( - slot->attr.type, - slot->key.data, - slot->key.bytes, - &rsa ); - if( status != PSA_SUCCESS ) - return( status ); - - mbedtls_mpi_init( &actual ); - mbedtls_mpi_init( &required ); - ret = mbedtls_rsa_export( rsa, - NULL, NULL, NULL, NULL, &actual ); - mbedtls_rsa_free( rsa ); - mbedtls_free( rsa ); - if( ret != 0 ) - goto rsa_exit; - ret = mbedtls_mpi_read_binary( &required, - attributes->domain_parameters, - attributes->domain_parameters_size ); - if( ret != 0 ) - goto rsa_exit; - if( mbedtls_mpi_cmp_mpi( &actual, &required ) != 0 ) - ret = MBEDTLS_ERR_RSA_BAD_INPUT_DATA; - rsa_exit: - mbedtls_mpi_free( &actual ); - mbedtls_mpi_free( &required ); - if( ret != 0) - return( mbedtls_to_psa_error( ret ) ); - } - else -#endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || - * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) */ - { - return( PSA_ERROR_INVALID_ARGUMENT ); - } - } - - if( attributes->core.bits != 0 ) - { - if( attributes->core.bits != slot->attr.bits ) - return( PSA_ERROR_INVALID_ARGUMENT ); - } - - return( PSA_SUCCESS ); -} - -psa_status_t psa_import_key( const psa_key_attributes_t *attributes, - const uint8_t *data, - size_t data_length, - mbedtls_svc_key_id_t *key ) -{ - psa_status_t status; - psa_key_slot_t *slot = NULL; - psa_se_drv_table_entry_t *driver = NULL; - size_t bits; - - *key = MBEDTLS_SVC_KEY_ID_INIT; - - /* Reject zero-length symmetric keys (including raw data key objects). - * This also rejects any key which might be encoded as an empty string, - * which is never valid. */ - if( data_length == 0 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - - status = psa_start_key_creation( PSA_KEY_CREATION_IMPORT, attributes, - &slot, &driver ); - if( status != PSA_SUCCESS ) - goto exit; - - /* In the case of a transparent key or an opaque key stored in local - * storage (thus not in the case of generating a key in a secure element - * or cryptoprocessor with storage), we have to allocate a buffer to - * hold the generated key material. */ - if( slot->key.data == NULL ) - { - status = psa_allocate_buffer_to_slot( slot, data_length ); - if( status != PSA_SUCCESS ) - goto exit; - } - - bits = slot->attr.bits; - status = psa_driver_wrapper_import_key( attributes, - data, data_length, - slot->key.data, - slot->key.bytes, - &slot->key.bytes, &bits ); - if( status != PSA_SUCCESS ) - goto exit; - - if( slot->attr.bits == 0 ) - slot->attr.bits = (psa_key_bits_t) bits; - else if( bits != slot->attr.bits ) - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto exit; - } - - status = psa_validate_optional_attributes( slot, attributes ); - if( status != PSA_SUCCESS ) - goto exit; - - status = psa_finish_key_creation( slot, driver, key ); -exit: - if( status != PSA_SUCCESS ) - psa_fail_key_creation( slot, driver ); - - return( status ); -} - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) -psa_status_t mbedtls_psa_register_se_key( - const psa_key_attributes_t *attributes ) -{ - psa_status_t status; - psa_key_slot_t *slot = NULL; - psa_se_drv_table_entry_t *driver = NULL; - mbedtls_svc_key_id_t key = MBEDTLS_SVC_KEY_ID_INIT; - - /* Leaving attributes unspecified is not currently supported. - * It could make sense to query the key type and size from the - * secure element, but not all secure elements support this - * and the driver HAL doesn't currently support it. */ - if( psa_get_key_type( attributes ) == PSA_KEY_TYPE_NONE ) - return( PSA_ERROR_NOT_SUPPORTED ); - if( psa_get_key_bits( attributes ) == 0 ) - return( PSA_ERROR_NOT_SUPPORTED ); - - status = psa_start_key_creation( PSA_KEY_CREATION_REGISTER, attributes, - &slot, &driver ); - if( status != PSA_SUCCESS ) - goto exit; - - status = psa_finish_key_creation( slot, driver, &key ); - -exit: - if( status != PSA_SUCCESS ) - psa_fail_key_creation( slot, driver ); - - /* Registration doesn't keep the key in RAM. */ - psa_close_key( key ); - return( status ); -} -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - -static psa_status_t psa_copy_key_material( const psa_key_slot_t *source, - psa_key_slot_t *target ) -{ - psa_status_t status = psa_copy_key_material_into_slot( target, - source->key.data, - source->key.bytes ); - if( status != PSA_SUCCESS ) - return( status ); - - target->attr.type = source->attr.type; - target->attr.bits = source->attr.bits; - - return( PSA_SUCCESS ); -} - -psa_status_t psa_copy_key( mbedtls_svc_key_id_t source_key, - const psa_key_attributes_t *specified_attributes, - mbedtls_svc_key_id_t *target_key ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_status_t unlock_status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_slot_t *source_slot = NULL; - psa_key_slot_t *target_slot = NULL; - psa_key_attributes_t actual_attributes = *specified_attributes; - psa_se_drv_table_entry_t *driver = NULL; - - *target_key = MBEDTLS_SVC_KEY_ID_INIT; - - status = psa_get_and_lock_transparent_key_slot_with_policy( - source_key, &source_slot, PSA_KEY_USAGE_COPY, 0 ); - if( status != PSA_SUCCESS ) - goto exit; - - status = psa_validate_optional_attributes( source_slot, - specified_attributes ); - if( status != PSA_SUCCESS ) - goto exit; - - status = psa_restrict_key_policy( source_slot->attr.type, - &actual_attributes.core.policy, - &source_slot->attr.policy ); - if( status != PSA_SUCCESS ) - goto exit; - - status = psa_start_key_creation( PSA_KEY_CREATION_COPY, &actual_attributes, - &target_slot, &driver ); - if( status != PSA_SUCCESS ) - goto exit; - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - if( driver != NULL ) - { - /* Copying to a secure element is not implemented yet. */ - status = PSA_ERROR_NOT_SUPPORTED; - goto exit; - } -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - - status = psa_copy_key_material( source_slot, target_slot ); - if( status != PSA_SUCCESS ) - goto exit; - - status = psa_finish_key_creation( target_slot, driver, target_key ); -exit: - if( status != PSA_SUCCESS ) - psa_fail_key_creation( target_slot, driver ); - - unlock_status = psa_unlock_key_slot( source_slot ); - - return( ( status == PSA_SUCCESS ) ? unlock_status : status ); -} - - - -/****************************************************************/ -/* Message digests */ -/****************************************************************/ - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA) -const mbedtls_md_info_t *mbedtls_md_info_from_psa( psa_algorithm_t alg ) -{ - switch( alg ) - { -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD2) - case PSA_ALG_MD2: - return( &mbedtls_md2_info ); -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD4) - case PSA_ALG_MD4: - return( &mbedtls_md4_info ); -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD5) - case PSA_ALG_MD5: - return( &mbedtls_md5_info ); -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RIPEMD160) - case PSA_ALG_RIPEMD160: - return( &mbedtls_ripemd160_info ); -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_1) - case PSA_ALG_SHA_1: - return( &mbedtls_sha1_info ); -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_224) - case PSA_ALG_SHA_224: - return( &mbedtls_sha224_info ); -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_256) - case PSA_ALG_SHA_256: - return( &mbedtls_sha256_info ); -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_384) - case PSA_ALG_SHA_384: - return( &mbedtls_sha384_info ); -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_512) - case PSA_ALG_SHA_512: - return( &mbedtls_sha512_info ); -#endif - default: - return( NULL ); - } -} -#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN) || - * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) || - * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS) || - * defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA) */ - -psa_status_t psa_hash_abort( psa_hash_operation_t *operation ) -{ - switch( operation->alg ) - { - case 0: - /* The object has (apparently) been initialized but it is not - * in use. It's ok to call abort on such an object, and there's - * nothing to do. */ - break; -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD2) - case PSA_ALG_MD2: - mbedtls_md2_free( &operation->ctx.md2 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD4) - case PSA_ALG_MD4: - mbedtls_md4_free( &operation->ctx.md4 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD5) - case PSA_ALG_MD5: - mbedtls_md5_free( &operation->ctx.md5 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RIPEMD160) - case PSA_ALG_RIPEMD160: - mbedtls_ripemd160_free( &operation->ctx.ripemd160 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_1) - case PSA_ALG_SHA_1: - mbedtls_sha1_free( &operation->ctx.sha1 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_224) - case PSA_ALG_SHA_224: - mbedtls_sha256_free( &operation->ctx.sha256 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_256) - case PSA_ALG_SHA_256: - mbedtls_sha256_free( &operation->ctx.sha256 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_384) - case PSA_ALG_SHA_384: - mbedtls_sha512_free( &operation->ctx.sha512 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_512) - case PSA_ALG_SHA_512: - mbedtls_sha512_free( &operation->ctx.sha512 ); - break; -#endif - default: - return( PSA_ERROR_BAD_STATE ); - } - operation->alg = 0; - return( PSA_SUCCESS ); -} - -psa_status_t psa_hash_setup( psa_hash_operation_t *operation, - psa_algorithm_t alg ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - - /* A context must be freshly initialized before it can be set up. */ - if( operation->alg != 0 ) - { - return( PSA_ERROR_BAD_STATE ); - } - - switch( alg ) - { -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD2) - case PSA_ALG_MD2: - mbedtls_md2_init( &operation->ctx.md2 ); - ret = mbedtls_md2_starts_ret( &operation->ctx.md2 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD4) - case PSA_ALG_MD4: - mbedtls_md4_init( &operation->ctx.md4 ); - ret = mbedtls_md4_starts_ret( &operation->ctx.md4 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD5) - case PSA_ALG_MD5: - mbedtls_md5_init( &operation->ctx.md5 ); - ret = mbedtls_md5_starts_ret( &operation->ctx.md5 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RIPEMD160) - case PSA_ALG_RIPEMD160: - mbedtls_ripemd160_init( &operation->ctx.ripemd160 ); - ret = mbedtls_ripemd160_starts_ret( &operation->ctx.ripemd160 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_1) - case PSA_ALG_SHA_1: - mbedtls_sha1_init( &operation->ctx.sha1 ); - ret = mbedtls_sha1_starts_ret( &operation->ctx.sha1 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_224) - case PSA_ALG_SHA_224: - mbedtls_sha256_init( &operation->ctx.sha256 ); - ret = mbedtls_sha256_starts_ret( &operation->ctx.sha256, 1 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_256) - case PSA_ALG_SHA_256: - mbedtls_sha256_init( &operation->ctx.sha256 ); - ret = mbedtls_sha256_starts_ret( &operation->ctx.sha256, 0 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_384) - case PSA_ALG_SHA_384: - mbedtls_sha512_init( &operation->ctx.sha512 ); - ret = mbedtls_sha512_starts_ret( &operation->ctx.sha512, 1 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_512) - case PSA_ALG_SHA_512: - mbedtls_sha512_init( &operation->ctx.sha512 ); - ret = mbedtls_sha512_starts_ret( &operation->ctx.sha512, 0 ); - break; -#endif - default: - return( PSA_ALG_IS_HASH( alg ) ? - PSA_ERROR_NOT_SUPPORTED : - PSA_ERROR_INVALID_ARGUMENT ); - } - if( ret == 0 ) - operation->alg = alg; - else - psa_hash_abort( operation ); - return( mbedtls_to_psa_error( ret ) ); -} - -psa_status_t psa_hash_update( psa_hash_operation_t *operation, - const uint8_t *input, - size_t input_length ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - - /* Don't require hash implementations to behave correctly on a - * zero-length input, which may have an invalid pointer. */ - if( input_length == 0 ) - return( PSA_SUCCESS ); - - switch( operation->alg ) - { -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD2) - case PSA_ALG_MD2: - ret = mbedtls_md2_update_ret( &operation->ctx.md2, - input, input_length ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD4) - case PSA_ALG_MD4: - ret = mbedtls_md4_update_ret( &operation->ctx.md4, - input, input_length ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD5) - case PSA_ALG_MD5: - ret = mbedtls_md5_update_ret( &operation->ctx.md5, - input, input_length ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RIPEMD160) - case PSA_ALG_RIPEMD160: - ret = mbedtls_ripemd160_update_ret( &operation->ctx.ripemd160, - input, input_length ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_1) - case PSA_ALG_SHA_1: - ret = mbedtls_sha1_update_ret( &operation->ctx.sha1, - input, input_length ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_224) - case PSA_ALG_SHA_224: - ret = mbedtls_sha256_update_ret( &operation->ctx.sha256, - input, input_length ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_256) - case PSA_ALG_SHA_256: - ret = mbedtls_sha256_update_ret( &operation->ctx.sha256, - input, input_length ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_384) - case PSA_ALG_SHA_384: - ret = mbedtls_sha512_update_ret( &operation->ctx.sha512, - input, input_length ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_512) - case PSA_ALG_SHA_512: - ret = mbedtls_sha512_update_ret( &operation->ctx.sha512, - input, input_length ); - break; -#endif - default: - (void)input; - return( PSA_ERROR_BAD_STATE ); - } - - if( ret != 0 ) - psa_hash_abort( operation ); - return( mbedtls_to_psa_error( ret ) ); -} - -psa_status_t psa_hash_finish( psa_hash_operation_t *operation, - uint8_t *hash, - size_t hash_size, - size_t *hash_length ) -{ - psa_status_t status; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - size_t actual_hash_length = PSA_HASH_LENGTH( operation->alg ); - - /* Fill the output buffer with something that isn't a valid hash - * (barring an attack on the hash and deliberately-crafted input), - * in case the caller doesn't check the return status properly. */ - *hash_length = hash_size; - /* If hash_size is 0 then hash may be NULL and then the - * call to memset would have undefined behavior. */ - if( hash_size != 0 ) - memset( hash, '!', hash_size ); - - if( hash_size < actual_hash_length ) - { - status = PSA_ERROR_BUFFER_TOO_SMALL; - goto exit; - } - - switch( operation->alg ) - { -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD2) - case PSA_ALG_MD2: - ret = mbedtls_md2_finish_ret( &operation->ctx.md2, hash ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD4) - case PSA_ALG_MD4: - ret = mbedtls_md4_finish_ret( &operation->ctx.md4, hash ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD5) - case PSA_ALG_MD5: - ret = mbedtls_md5_finish_ret( &operation->ctx.md5, hash ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RIPEMD160) - case PSA_ALG_RIPEMD160: - ret = mbedtls_ripemd160_finish_ret( &operation->ctx.ripemd160, hash ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_1) - case PSA_ALG_SHA_1: - ret = mbedtls_sha1_finish_ret( &operation->ctx.sha1, hash ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_224) - case PSA_ALG_SHA_224: - ret = mbedtls_sha256_finish_ret( &operation->ctx.sha256, hash ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_256) - case PSA_ALG_SHA_256: - ret = mbedtls_sha256_finish_ret( &operation->ctx.sha256, hash ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_384) - case PSA_ALG_SHA_384: - ret = mbedtls_sha512_finish_ret( &operation->ctx.sha512, hash ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_512) - case PSA_ALG_SHA_512: - ret = mbedtls_sha512_finish_ret( &operation->ctx.sha512, hash ); - break; -#endif - default: - return( PSA_ERROR_BAD_STATE ); - } - status = mbedtls_to_psa_error( ret ); - -exit: - if( status == PSA_SUCCESS ) - { - *hash_length = actual_hash_length; - return( psa_hash_abort( operation ) ); - } - else - { - psa_hash_abort( operation ); - return( status ); - } -} - -psa_status_t psa_hash_verify( psa_hash_operation_t *operation, - const uint8_t *hash, - size_t hash_length ) -{ - uint8_t actual_hash[MBEDTLS_MD_MAX_SIZE]; - size_t actual_hash_length; - psa_status_t status = psa_hash_finish( operation, - actual_hash, sizeof( actual_hash ), - &actual_hash_length ); - if( status != PSA_SUCCESS ) - return( status ); - if( actual_hash_length != hash_length ) - return( PSA_ERROR_INVALID_SIGNATURE ); - if( safer_memcmp( hash, actual_hash, actual_hash_length ) != 0 ) - return( PSA_ERROR_INVALID_SIGNATURE ); - return( PSA_SUCCESS ); -} - -psa_status_t psa_hash_compute( psa_algorithm_t alg, - const uint8_t *input, size_t input_length, - uint8_t *hash, size_t hash_size, - size_t *hash_length ) -{ - psa_hash_operation_t operation = PSA_HASH_OPERATION_INIT; - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - - *hash_length = hash_size; - status = psa_hash_setup( &operation, alg ); - if( status != PSA_SUCCESS ) - goto exit; - status = psa_hash_update( &operation, input, input_length ); - if( status != PSA_SUCCESS ) - goto exit; - status = psa_hash_finish( &operation, hash, hash_size, hash_length ); - if( status != PSA_SUCCESS ) - goto exit; - -exit: - if( status == PSA_SUCCESS ) - status = psa_hash_abort( &operation ); - else - psa_hash_abort( &operation ); - return( status ); -} - -psa_status_t psa_hash_compare( psa_algorithm_t alg, - const uint8_t *input, size_t input_length, - const uint8_t *hash, size_t hash_length ) -{ - psa_hash_operation_t operation = PSA_HASH_OPERATION_INIT; - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - - status = psa_hash_setup( &operation, alg ); - if( status != PSA_SUCCESS ) - goto exit; - status = psa_hash_update( &operation, input, input_length ); - if( status != PSA_SUCCESS ) - goto exit; - status = psa_hash_verify( &operation, hash, hash_length ); - if( status != PSA_SUCCESS ) - goto exit; - -exit: - if( status == PSA_SUCCESS ) - status = psa_hash_abort( &operation ); - else - psa_hash_abort( &operation ); - return( status ); -} - -psa_status_t psa_hash_clone( const psa_hash_operation_t *source_operation, - psa_hash_operation_t *target_operation ) -{ - if( target_operation->alg != 0 ) - return( PSA_ERROR_BAD_STATE ); - - switch( source_operation->alg ) - { - case 0: - return( PSA_ERROR_BAD_STATE ); -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD2) - case PSA_ALG_MD2: - mbedtls_md2_clone( &target_operation->ctx.md2, - &source_operation->ctx.md2 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD4) - case PSA_ALG_MD4: - mbedtls_md4_clone( &target_operation->ctx.md4, - &source_operation->ctx.md4 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD5) - case PSA_ALG_MD5: - mbedtls_md5_clone( &target_operation->ctx.md5, - &source_operation->ctx.md5 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RIPEMD160) - case PSA_ALG_RIPEMD160: - mbedtls_ripemd160_clone( &target_operation->ctx.ripemd160, - &source_operation->ctx.ripemd160 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_1) - case PSA_ALG_SHA_1: - mbedtls_sha1_clone( &target_operation->ctx.sha1, - &source_operation->ctx.sha1 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_224) - case PSA_ALG_SHA_224: - mbedtls_sha256_clone( &target_operation->ctx.sha256, - &source_operation->ctx.sha256 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_256) - case PSA_ALG_SHA_256: - mbedtls_sha256_clone( &target_operation->ctx.sha256, - &source_operation->ctx.sha256 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_384) - case PSA_ALG_SHA_384: - mbedtls_sha512_clone( &target_operation->ctx.sha512, - &source_operation->ctx.sha512 ); - break; -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_512) - case PSA_ALG_SHA_512: - mbedtls_sha512_clone( &target_operation->ctx.sha512, - &source_operation->ctx.sha512 ); - break; -#endif - default: - return( PSA_ERROR_NOT_SUPPORTED ); - } - - target_operation->alg = source_operation->alg; - return( PSA_SUCCESS ); -} - - -/****************************************************************/ -/* MAC */ -/****************************************************************/ - -static const mbedtls_cipher_info_t *mbedtls_cipher_info_from_psa( - psa_algorithm_t alg, - psa_key_type_t key_type, - size_t key_bits, - mbedtls_cipher_id_t* cipher_id ) -{ - mbedtls_cipher_mode_t mode; - mbedtls_cipher_id_t cipher_id_tmp; - - if( PSA_ALG_IS_AEAD( alg ) ) - alg = PSA_ALG_AEAD_WITH_SHORTENED_TAG( alg, 0 ); - - if( PSA_ALG_IS_CIPHER( alg ) || PSA_ALG_IS_AEAD( alg ) ) - { - switch( alg ) - { - case PSA_ALG_STREAM_CIPHER: - mode = MBEDTLS_MODE_STREAM; - break; - case PSA_ALG_CTR: - mode = MBEDTLS_MODE_CTR; - break; - case PSA_ALG_CFB: - mode = MBEDTLS_MODE_CFB; - break; - case PSA_ALG_OFB: - mode = MBEDTLS_MODE_OFB; - break; - case PSA_ALG_ECB_NO_PADDING: - mode = MBEDTLS_MODE_ECB; - break; - case PSA_ALG_CBC_NO_PADDING: - mode = MBEDTLS_MODE_CBC; - break; - case PSA_ALG_CBC_PKCS7: - mode = MBEDTLS_MODE_CBC; - break; - case PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_CCM, 0 ): - mode = MBEDTLS_MODE_CCM; - break; - case PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_GCM, 0 ): - mode = MBEDTLS_MODE_GCM; - break; - case PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_CHACHA20_POLY1305, 0 ): - mode = MBEDTLS_MODE_CHACHAPOLY; - break; - default: - return( NULL ); - } - } - else if( alg == PSA_ALG_CMAC ) - mode = MBEDTLS_MODE_ECB; - else - return( NULL ); - - switch( key_type ) - { - case PSA_KEY_TYPE_AES: - cipher_id_tmp = MBEDTLS_CIPHER_ID_AES; - break; - case PSA_KEY_TYPE_DES: - /* key_bits is 64 for Single-DES, 128 for two-key Triple-DES, - * and 192 for three-key Triple-DES. */ - if( key_bits == 64 ) - cipher_id_tmp = MBEDTLS_CIPHER_ID_DES; - else - cipher_id_tmp = MBEDTLS_CIPHER_ID_3DES; - /* mbedtls doesn't recognize two-key Triple-DES as an algorithm, - * but two-key Triple-DES is functionally three-key Triple-DES - * with K1=K3, so that's how we present it to mbedtls. */ - if( key_bits == 128 ) - key_bits = 192; - break; - case PSA_KEY_TYPE_CAMELLIA: - cipher_id_tmp = MBEDTLS_CIPHER_ID_CAMELLIA; - break; - case PSA_KEY_TYPE_ARC4: - cipher_id_tmp = MBEDTLS_CIPHER_ID_ARC4; - break; - case PSA_KEY_TYPE_CHACHA20: - cipher_id_tmp = MBEDTLS_CIPHER_ID_CHACHA20; - break; - default: - return( NULL ); - } - if( cipher_id != NULL ) - *cipher_id = cipher_id_tmp; - - return( mbedtls_cipher_info_from_values( cipher_id_tmp, - (int) key_bits, mode ) ); -} - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) -static size_t psa_get_hash_block_size( psa_algorithm_t alg ) -{ - switch( alg ) - { - case PSA_ALG_MD2: - return( 16 ); - case PSA_ALG_MD4: - return( 64 ); - case PSA_ALG_MD5: - return( 64 ); - case PSA_ALG_RIPEMD160: - return( 64 ); - case PSA_ALG_SHA_1: - return( 64 ); - case PSA_ALG_SHA_224: - return( 64 ); - case PSA_ALG_SHA_256: - return( 64 ); - case PSA_ALG_SHA_384: - return( 128 ); - case PSA_ALG_SHA_512: - return( 128 ); - default: - return( 0 ); - } -} -#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) */ - -/* Initialize the MAC operation structure. Once this function has been - * called, psa_mac_abort can run and will do the right thing. */ -static psa_status_t psa_mac_init( psa_mac_operation_t *operation, - psa_algorithm_t alg ) -{ - psa_status_t status = PSA_ERROR_NOT_SUPPORTED; - - operation->alg = PSA_ALG_FULL_LENGTH_MAC( alg ); - operation->key_set = 0; - operation->iv_set = 0; - operation->iv_required = 0; - operation->has_input = 0; - operation->is_sign = 0; - -#if defined(MBEDTLS_CMAC_C) - if( operation->alg == PSA_ALG_CMAC ) - { - operation->iv_required = 0; - mbedtls_cipher_init( &operation->ctx.cmac ); - status = PSA_SUCCESS; - } - else -#endif /* MBEDTLS_CMAC_C */ -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) - if( PSA_ALG_IS_HMAC( operation->alg ) ) - { - /* We'll set up the hash operation later in psa_hmac_setup_internal. */ - operation->ctx.hmac.hash_ctx.alg = 0; - status = PSA_SUCCESS; - } - else -#endif /* MBEDTLS_PSA_BUILTIN_ALG_HMAC */ - { - if( ! PSA_ALG_IS_MAC( alg ) ) - status = PSA_ERROR_INVALID_ARGUMENT; - } - - if( status != PSA_SUCCESS ) - memset( operation, 0, sizeof( *operation ) ); - return( status ); -} - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) -static psa_status_t psa_hmac_abort_internal( psa_hmac_internal_data *hmac ) -{ - mbedtls_platform_zeroize( hmac->opad, sizeof( hmac->opad ) ); - return( psa_hash_abort( &hmac->hash_ctx ) ); -} -#endif /* MBEDTLS_PSA_BUILTIN_ALG_HMAC */ - -psa_status_t psa_mac_abort( psa_mac_operation_t *operation ) -{ - if( operation->alg == 0 ) - { - /* The object has (apparently) been initialized but it is not - * in use. It's ok to call abort on such an object, and there's - * nothing to do. */ - return( PSA_SUCCESS ); - } - else -#if defined(MBEDTLS_CMAC_C) - if( operation->alg == PSA_ALG_CMAC ) - { - mbedtls_cipher_free( &operation->ctx.cmac ); - } - else -#endif /* MBEDTLS_CMAC_C */ -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) - if( PSA_ALG_IS_HMAC( operation->alg ) ) - { - psa_hmac_abort_internal( &operation->ctx.hmac ); - } - else -#endif /* MBEDTLS_PSA_BUILTIN_ALG_HMAC */ - { - /* Sanity check (shouldn't happen: operation->alg should - * always have been initialized to a valid value). */ - goto bad_state; - } - - operation->alg = 0; - operation->key_set = 0; - operation->iv_set = 0; - operation->iv_required = 0; - operation->has_input = 0; - operation->is_sign = 0; - - return( PSA_SUCCESS ); - -bad_state: - /* If abort is called on an uninitialized object, we can't trust - * anything. Wipe the object in case it contains confidential data. - * This may result in a memory leak if a pointer gets overwritten, - * but it's too late to do anything about this. */ - memset( operation, 0, sizeof( *operation ) ); - return( PSA_ERROR_BAD_STATE ); -} - -#if defined(MBEDTLS_CMAC_C) -static psa_status_t psa_cmac_setup( psa_mac_operation_t *operation, - psa_key_slot_t *slot ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - const mbedtls_cipher_info_t *cipher_info = - mbedtls_cipher_info_from_psa( PSA_ALG_CMAC, - slot->attr.type, slot->attr.bits, - NULL ); - if( cipher_info == NULL ) - return( PSA_ERROR_NOT_SUPPORTED ); - - ret = mbedtls_cipher_setup( &operation->ctx.cmac, cipher_info ); - if( ret != 0 ) - goto exit; - - ret = mbedtls_cipher_cmac_starts( &operation->ctx.cmac, - slot->key.data, - slot->attr.bits ); -exit: - return( mbedtls_to_psa_error( ret ) ); -} -#endif /* MBEDTLS_CMAC_C */ - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) -static psa_status_t psa_hmac_setup_internal( psa_hmac_internal_data *hmac, - const uint8_t *key, - size_t key_length, - psa_algorithm_t hash_alg ) -{ - uint8_t ipad[PSA_HMAC_MAX_HASH_BLOCK_SIZE]; - size_t i; - size_t hash_size = PSA_HASH_LENGTH( hash_alg ); - size_t block_size = psa_get_hash_block_size( hash_alg ); - psa_status_t status; - - /* Sanity checks on block_size, to guarantee that there won't be a buffer - * overflow below. This should never trigger if the hash algorithm - * is implemented correctly. */ - /* The size checks against the ipad and opad buffers cannot be written - * `block_size > sizeof( ipad ) || block_size > sizeof( hmac->opad )` - * because that triggers -Wlogical-op on GCC 7.3. */ - if( block_size > sizeof( ipad ) ) - return( PSA_ERROR_NOT_SUPPORTED ); - if( block_size > sizeof( hmac->opad ) ) - return( PSA_ERROR_NOT_SUPPORTED ); - if( block_size < hash_size ) - return( PSA_ERROR_NOT_SUPPORTED ); - - if( key_length > block_size ) - { - status = psa_hash_compute( hash_alg, key, key_length, - ipad, sizeof( ipad ), &key_length ); - if( status != PSA_SUCCESS ) - goto cleanup; - } - /* A 0-length key is not commonly used in HMAC when used as a MAC, - * but it is permitted. It is common when HMAC is used in HKDF, for - * example. Don't call `memcpy` in the 0-length because `key` could be - * an invalid pointer which would make the behavior undefined. */ - else if( key_length != 0 ) - memcpy( ipad, key, key_length ); - - /* ipad contains the key followed by garbage. Xor and fill with 0x36 - * to create the ipad value. */ - for( i = 0; i < key_length; i++ ) - ipad[i] ^= 0x36; - memset( ipad + key_length, 0x36, block_size - key_length ); - - /* Copy the key material from ipad to opad, flipping the requisite bits, - * and filling the rest of opad with the requisite constant. */ - for( i = 0; i < key_length; i++ ) - hmac->opad[i] = ipad[i] ^ 0x36 ^ 0x5C; - memset( hmac->opad + key_length, 0x5C, block_size - key_length ); - - status = psa_hash_setup( &hmac->hash_ctx, hash_alg ); - if( status != PSA_SUCCESS ) - goto cleanup; - - status = psa_hash_update( &hmac->hash_ctx, ipad, block_size ); - -cleanup: - mbedtls_platform_zeroize( ipad, sizeof( ipad ) ); - - return( status ); -} -#endif /* MBEDTLS_PSA_BUILTIN_ALG_HMAC */ - -static psa_status_t psa_mac_setup( psa_mac_operation_t *operation, - mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - int is_sign ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_status_t unlock_status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_slot_t *slot; - psa_key_usage_t usage = - is_sign ? PSA_KEY_USAGE_SIGN_HASH : PSA_KEY_USAGE_VERIFY_HASH; - - /* A context must be freshly initialized before it can be set up. */ - if( operation->alg != 0 ) - { - return( PSA_ERROR_BAD_STATE ); - } - - status = psa_mac_init( operation, alg ); - if( status != PSA_SUCCESS ) - return( status ); - if( is_sign ) - operation->is_sign = 1; - - status = psa_get_and_lock_transparent_key_slot_with_policy( - key, &slot, usage, alg ); - if( status != PSA_SUCCESS ) - goto exit; - - /* Validate the combination of key type and algorithm */ - status = psa_mac_key_can_do( alg, slot->attr.type ); - if( status != PSA_SUCCESS ) - goto exit; - - /* Get the output length for the algorithm and key combination. None of the - * currently supported algorithms have an output length dependent on actual - * key size, so setting it to a bogus value is currently OK. */ - operation->mac_size = PSA_MAC_LENGTH( slot->attr.type, 0, alg ); - - if( operation->mac_size < 4 ) - { - /* A very short MAC is too short for security since it can be - * brute-forced. Ancient protocols with 32-bit MACs do exist, - * so we make this our minimum, even though 32 bits is still - * too small for security. */ - status = PSA_ERROR_NOT_SUPPORTED; - goto exit; - } - - if( operation->mac_size > - PSA_MAC_LENGTH( slot->attr.type, 0, PSA_ALG_FULL_LENGTH_MAC( alg ) ) ) - { - /* It's impossible to "truncate" to a larger length than the full length - * of the algorithm. */ - status = PSA_ERROR_INVALID_ARGUMENT; - goto exit; - } - -#if defined(MBEDTLS_CMAC_C) - if( PSA_ALG_FULL_LENGTH_MAC( alg ) == PSA_ALG_CMAC ) - { - status = psa_cmac_setup( operation, slot ); - } - else -#endif /* MBEDTLS_CMAC_C */ -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) - if( PSA_ALG_IS_HMAC( alg ) ) - { - /* Sanity check. This shouldn't fail on a valid configuration. */ - if( operation->mac_size > sizeof( operation->ctx.hmac.opad ) ) - { - status = PSA_ERROR_NOT_SUPPORTED; - goto exit; - } - - if( slot->attr.type != PSA_KEY_TYPE_HMAC ) - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto exit; - } - - status = psa_hmac_setup_internal( &operation->ctx.hmac, - slot->key.data, - slot->key.bytes, - PSA_ALG_HMAC_GET_HASH( alg ) ); - } - else -#endif /* MBEDTLS_PSA_BUILTIN_ALG_HMAC */ - { - status = PSA_ERROR_NOT_SUPPORTED; - } - -exit: - if( status != PSA_SUCCESS ) - { - psa_mac_abort( operation ); - } - else - { - operation->key_set = 1; - } - - unlock_status = psa_unlock_key_slot( slot ); - - return( ( status == PSA_SUCCESS ) ? unlock_status : status ); -} - -psa_status_t psa_mac_sign_setup( psa_mac_operation_t *operation, - mbedtls_svc_key_id_t key, - psa_algorithm_t alg ) -{ - return( psa_mac_setup( operation, key, alg, 1 ) ); -} - -psa_status_t psa_mac_verify_setup( psa_mac_operation_t *operation, - mbedtls_svc_key_id_t key, - psa_algorithm_t alg ) -{ - return( psa_mac_setup( operation, key, alg, 0 ) ); -} - -psa_status_t psa_mac_update( psa_mac_operation_t *operation, - const uint8_t *input, - size_t input_length ) -{ - psa_status_t status = PSA_ERROR_BAD_STATE; - if( ! operation->key_set ) - return( PSA_ERROR_BAD_STATE ); - if( operation->iv_required && ! operation->iv_set ) - return( PSA_ERROR_BAD_STATE ); - operation->has_input = 1; - -#if defined(MBEDTLS_CMAC_C) - if( operation->alg == PSA_ALG_CMAC ) - { - int ret = mbedtls_cipher_cmac_update( &operation->ctx.cmac, - input, input_length ); - status = mbedtls_to_psa_error( ret ); - } - else -#endif /* MBEDTLS_CMAC_C */ -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) - if( PSA_ALG_IS_HMAC( operation->alg ) ) - { - status = psa_hash_update( &operation->ctx.hmac.hash_ctx, input, - input_length ); - } - else -#endif /* MBEDTLS_PSA_BUILTIN_ALG_HMAC */ - { - /* This shouldn't happen if `operation` was initialized by - * a setup function. */ - return( PSA_ERROR_BAD_STATE ); - } - - if( status != PSA_SUCCESS ) - psa_mac_abort( operation ); - return( status ); -} - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) -static psa_status_t psa_hmac_finish_internal( psa_hmac_internal_data *hmac, - uint8_t *mac, - size_t mac_size ) -{ - uint8_t tmp[MBEDTLS_MD_MAX_SIZE]; - psa_algorithm_t hash_alg = hmac->hash_ctx.alg; - size_t hash_size = 0; - size_t block_size = psa_get_hash_block_size( hash_alg ); - psa_status_t status; - - status = psa_hash_finish( &hmac->hash_ctx, tmp, sizeof( tmp ), &hash_size ); - if( status != PSA_SUCCESS ) - return( status ); - /* From here on, tmp needs to be wiped. */ - - status = psa_hash_setup( &hmac->hash_ctx, hash_alg ); - if( status != PSA_SUCCESS ) - goto exit; - - status = psa_hash_update( &hmac->hash_ctx, hmac->opad, block_size ); - if( status != PSA_SUCCESS ) - goto exit; - - status = psa_hash_update( &hmac->hash_ctx, tmp, hash_size ); - if( status != PSA_SUCCESS ) - goto exit; - - status = psa_hash_finish( &hmac->hash_ctx, tmp, sizeof( tmp ), &hash_size ); - if( status != PSA_SUCCESS ) - goto exit; - - memcpy( mac, tmp, mac_size ); - -exit: - mbedtls_platform_zeroize( tmp, hash_size ); - return( status ); -} -#endif /* MBEDTLS_PSA_BUILTIN_ALG_HMAC */ - -static psa_status_t psa_mac_finish_internal( psa_mac_operation_t *operation, - uint8_t *mac, - size_t mac_size ) -{ - if( ! operation->key_set ) - return( PSA_ERROR_BAD_STATE ); - if( operation->iv_required && ! operation->iv_set ) - return( PSA_ERROR_BAD_STATE ); - - if( mac_size < operation->mac_size ) - return( PSA_ERROR_BUFFER_TOO_SMALL ); - -#if defined(MBEDTLS_CMAC_C) - if( operation->alg == PSA_ALG_CMAC ) - { - uint8_t tmp[PSA_BLOCK_CIPHER_BLOCK_MAX_SIZE]; - int ret = mbedtls_cipher_cmac_finish( &operation->ctx.cmac, tmp ); - if( ret == 0 ) - memcpy( mac, tmp, operation->mac_size ); - mbedtls_platform_zeroize( tmp, sizeof( tmp ) ); - return( mbedtls_to_psa_error( ret ) ); - } - else -#endif /* MBEDTLS_CMAC_C */ -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HMAC) - if( PSA_ALG_IS_HMAC( operation->alg ) ) - { - return( psa_hmac_finish_internal( &operation->ctx.hmac, - mac, operation->mac_size ) ); - } - else -#endif /* MBEDTLS_PSA_BUILTIN_ALG_HMAC */ - { - /* This shouldn't happen if `operation` was initialized by - * a setup function. */ - return( PSA_ERROR_BAD_STATE ); - } -} - -psa_status_t psa_mac_sign_finish( psa_mac_operation_t *operation, - uint8_t *mac, - size_t mac_size, - size_t *mac_length ) -{ - psa_status_t status; - - if( operation->alg == 0 ) - { - return( PSA_ERROR_BAD_STATE ); - } - - /* Fill the output buffer with something that isn't a valid mac - * (barring an attack on the mac and deliberately-crafted input), - * in case the caller doesn't check the return status properly. */ - *mac_length = mac_size; - /* If mac_size is 0 then mac may be NULL and then the - * call to memset would have undefined behavior. */ - if( mac_size != 0 ) - memset( mac, '!', mac_size ); - - if( ! operation->is_sign ) - { - return( PSA_ERROR_BAD_STATE ); - } - - status = psa_mac_finish_internal( operation, mac, mac_size ); - - if( status == PSA_SUCCESS ) - { - status = psa_mac_abort( operation ); - if( status == PSA_SUCCESS ) - *mac_length = operation->mac_size; - else - memset( mac, '!', mac_size ); - } - else - psa_mac_abort( operation ); - return( status ); -} - -psa_status_t psa_mac_verify_finish( psa_mac_operation_t *operation, - const uint8_t *mac, - size_t mac_length ) -{ - uint8_t actual_mac[PSA_MAC_MAX_SIZE]; - psa_status_t status; - - if( operation->alg == 0 ) - { - return( PSA_ERROR_BAD_STATE ); - } - - if( operation->is_sign ) - { - return( PSA_ERROR_BAD_STATE ); - } - if( operation->mac_size != mac_length ) - { - status = PSA_ERROR_INVALID_SIGNATURE; - goto cleanup; - } - - status = psa_mac_finish_internal( operation, - actual_mac, sizeof( actual_mac ) ); - if( status != PSA_SUCCESS ) - goto cleanup; - - if( safer_memcmp( mac, actual_mac, mac_length ) != 0 ) - status = PSA_ERROR_INVALID_SIGNATURE; - -cleanup: - if( status == PSA_SUCCESS ) - status = psa_mac_abort( operation ); - else - psa_mac_abort( operation ); - - mbedtls_platform_zeroize( actual_mac, sizeof( actual_mac ) ); - - return( status ); -} - - - -/****************************************************************/ -/* Asymmetric cryptography */ -/****************************************************************/ - -psa_status_t psa_sign_hash_internal( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - uint8_t *signature, size_t signature_size, size_t *signature_length ) -{ -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS) - if( attributes->core.type == PSA_KEY_TYPE_RSA_KEY_PAIR ) - { - return( mbedtls_psa_rsa_sign_hash( - attributes, - key_buffer, key_buffer_size, - alg, hash, hash_length, - signature, signature_size, signature_length ) ); - } - else -#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN) || - * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS) */ -#if defined(MBEDTLS_PSA_BUILTIN_ALG_ECDSA) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA) - if( PSA_KEY_TYPE_IS_ECC( attributes->core.type ) ) - { - if( PSA_ALG_IS_ECDSA( alg ) ) - { - return( mbedtls_psa_ecdsa_sign_hash( - attributes, - key_buffer, key_buffer_size, - alg, hash, hash_length, - signature, signature_size, signature_length ) ); - } - else - { - return( PSA_ERROR_INVALID_ARGUMENT ); - } - } - else -#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_ECDSA) || - * defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA) */ - { - (void)attributes; - (void)key_buffer; - (void)key_buffer_size; - (void)alg; - (void)hash; - (void)hash_length; - (void)signature; - (void)signature_size; - (void)signature_length; - - return( PSA_ERROR_NOT_SUPPORTED ); - } -} - -psa_status_t psa_sign_hash( mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *hash, - size_t hash_length, - uint8_t *signature, - size_t signature_size, - size_t *signature_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_status_t unlock_status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_slot_t *slot; - - *signature_length = signature_size; - /* Immediately reject a zero-length signature buffer. This guarantees - * that signature must be a valid pointer. (On the other hand, the hash - * buffer can in principle be empty since it doesn't actually have - * to be a hash.) */ - if( signature_size == 0 ) - return( PSA_ERROR_BUFFER_TOO_SMALL ); - - status = psa_get_and_lock_key_slot_with_policy( key, &slot, - PSA_KEY_USAGE_SIGN_HASH, - alg ); - if( status != PSA_SUCCESS ) - goto exit; - if( ! PSA_KEY_TYPE_IS_KEY_PAIR( slot->attr.type ) ) - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto exit; - } - - psa_key_attributes_t attributes = { - .core = slot->attr - }; - - status = psa_driver_wrapper_sign_hash( - &attributes, slot->key.data, slot->key.bytes, - alg, hash, hash_length, - signature, signature_size, signature_length ); - -exit: - /* Fill the unused part of the output buffer (the whole buffer on error, - * the trailing part on success) with something that isn't a valid mac - * (barring an attack on the mac and deliberately-crafted input), - * in case the caller doesn't check the return status properly. */ - if( status == PSA_SUCCESS ) - memset( signature + *signature_length, '!', - signature_size - *signature_length ); - else - memset( signature, '!', signature_size ); - /* If signature_size is 0 then we have nothing to do. We must not call - * memset because signature may be NULL in this case. */ - - unlock_status = psa_unlock_key_slot( slot ); - - return( ( status == PSA_SUCCESS ) ? unlock_status : status ); -} - -psa_status_t psa_verify_hash_internal( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - const uint8_t *signature, size_t signature_length ) -{ -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS) - if( PSA_KEY_TYPE_IS_RSA( attributes->core.type ) ) - { - return( mbedtls_psa_rsa_verify_hash( - attributes, - key_buffer, key_buffer_size, - alg, hash, hash_length, - signature, signature_length ) ); - } - else -#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN) || - * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS) */ - if( PSA_KEY_TYPE_IS_ECC( attributes->core.type ) ) - { -#if defined(MBEDTLS_PSA_BUILTIN_ALG_ECDSA) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA) - if( PSA_ALG_IS_ECDSA( alg ) ) - { - return( mbedtls_psa_ecdsa_verify_hash( - attributes, - key_buffer, key_buffer_size, - alg, hash, hash_length, - signature, signature_length ) ); - } - else -#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_ECDSA) || - * defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA) */ - { - return( PSA_ERROR_INVALID_ARGUMENT ); - } - } - else - { - (void)key_buffer; - (void)key_buffer_size; - (void)alg; - (void)hash; - (void)hash_length; - (void)signature; - (void)signature_length; - - return( PSA_ERROR_NOT_SUPPORTED ); - } -} - -psa_status_t psa_verify_hash( mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *hash, - size_t hash_length, - const uint8_t *signature, - size_t signature_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_status_t unlock_status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_slot_t *slot; - - status = psa_get_and_lock_key_slot_with_policy( key, &slot, - PSA_KEY_USAGE_VERIFY_HASH, - alg ); - if( status != PSA_SUCCESS ) - return( status ); - - psa_key_attributes_t attributes = { - .core = slot->attr - }; - - status = psa_driver_wrapper_verify_hash( - &attributes, slot->key.data, slot->key.bytes, - alg, hash, hash_length, - signature, signature_length ); - - unlock_status = psa_unlock_key_slot( slot ); - - return( ( status == PSA_SUCCESS ) ? unlock_status : status ); -} - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) -static void psa_rsa_oaep_set_padding_mode( psa_algorithm_t alg, - mbedtls_rsa_context *rsa ) -{ - psa_algorithm_t hash_alg = PSA_ALG_RSA_OAEP_GET_HASH( alg ); - const mbedtls_md_info_t *md_info = mbedtls_md_info_from_psa( hash_alg ); - mbedtls_md_type_t md_alg = mbedtls_md_get_type( md_info ); - mbedtls_rsa_set_padding( rsa, MBEDTLS_RSA_PKCS_V21, md_alg ); -} -#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) */ - -psa_status_t psa_asymmetric_encrypt( mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *input, - size_t input_length, - const uint8_t *salt, - size_t salt_length, - uint8_t *output, - size_t output_size, - size_t *output_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_status_t unlock_status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_slot_t *slot; - - (void) input; - (void) input_length; - (void) salt; - (void) output; - (void) output_size; - - *output_length = 0; - - if( ! PSA_ALG_IS_RSA_OAEP( alg ) && salt_length != 0 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - - status = psa_get_and_lock_transparent_key_slot_with_policy( - key, &slot, PSA_KEY_USAGE_ENCRYPT, alg ); - if( status != PSA_SUCCESS ) - return( status ); - if( ! ( PSA_KEY_TYPE_IS_PUBLIC_KEY( slot->attr.type ) || - PSA_KEY_TYPE_IS_KEY_PAIR( slot->attr.type ) ) ) - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto exit; - } - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) - if( PSA_KEY_TYPE_IS_RSA( slot->attr.type ) ) - { - mbedtls_rsa_context *rsa = NULL; - status = mbedtls_psa_rsa_load_representation( slot->attr.type, - slot->key.data, - slot->key.bytes, - &rsa ); - if( status != PSA_SUCCESS ) - goto rsa_exit; - - if( output_size < mbedtls_rsa_get_len( rsa ) ) - { - status = PSA_ERROR_BUFFER_TOO_SMALL; - goto rsa_exit; - } -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) - if( alg == PSA_ALG_RSA_PKCS1V15_CRYPT ) - { - status = mbedtls_to_psa_error( - mbedtls_rsa_pkcs1_encrypt( rsa, - mbedtls_psa_get_random, - MBEDTLS_PSA_RANDOM_STATE, - MBEDTLS_RSA_PUBLIC, - input_length, - input, - output ) ); - } - else -#endif /* MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT */ -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) - if( PSA_ALG_IS_RSA_OAEP( alg ) ) - { - psa_rsa_oaep_set_padding_mode( alg, rsa ); - status = mbedtls_to_psa_error( - mbedtls_rsa_rsaes_oaep_encrypt( rsa, - mbedtls_psa_get_random, - MBEDTLS_PSA_RANDOM_STATE, - MBEDTLS_RSA_PUBLIC, - salt, salt_length, - input_length, - input, - output ) ); - } - else -#endif /* MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP */ - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto rsa_exit; - } -rsa_exit: - if( status == PSA_SUCCESS ) - *output_length = mbedtls_rsa_get_len( rsa ); - - mbedtls_rsa_free( rsa ); - mbedtls_free( rsa ); - } - else -#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) || - * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) */ - { - status = PSA_ERROR_NOT_SUPPORTED; - } - -exit: - unlock_status = psa_unlock_key_slot( slot ); - - return( ( status == PSA_SUCCESS ) ? unlock_status : status ); -} - -psa_status_t psa_asymmetric_decrypt( mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *input, - size_t input_length, - const uint8_t *salt, - size_t salt_length, - uint8_t *output, - size_t output_size, - size_t *output_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_status_t unlock_status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_slot_t *slot; - - (void) input; - (void) input_length; - (void) salt; - (void) output; - (void) output_size; - - *output_length = 0; - - if( ! PSA_ALG_IS_RSA_OAEP( alg ) && salt_length != 0 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - - status = psa_get_and_lock_transparent_key_slot_with_policy( - key, &slot, PSA_KEY_USAGE_DECRYPT, alg ); - if( status != PSA_SUCCESS ) - return( status ); - if( ! PSA_KEY_TYPE_IS_KEY_PAIR( slot->attr.type ) ) - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto exit; - } - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) - if( slot->attr.type == PSA_KEY_TYPE_RSA_KEY_PAIR ) - { - mbedtls_rsa_context *rsa = NULL; - status = mbedtls_psa_rsa_load_representation( slot->attr.type, - slot->key.data, - slot->key.bytes, - &rsa ); - if( status != PSA_SUCCESS ) - goto exit; - - if( input_length != mbedtls_rsa_get_len( rsa ) ) - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto rsa_exit; - } - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) - if( alg == PSA_ALG_RSA_PKCS1V15_CRYPT ) - { - status = mbedtls_to_psa_error( - mbedtls_rsa_pkcs1_decrypt( rsa, - mbedtls_psa_get_random, - MBEDTLS_PSA_RANDOM_STATE, - MBEDTLS_RSA_PRIVATE, - output_length, - input, - output, - output_size ) ); - } - else -#endif /* MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT */ -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) - if( PSA_ALG_IS_RSA_OAEP( alg ) ) - { - psa_rsa_oaep_set_padding_mode( alg, rsa ); - status = mbedtls_to_psa_error( - mbedtls_rsa_rsaes_oaep_decrypt( rsa, - mbedtls_psa_get_random, - MBEDTLS_PSA_RANDOM_STATE, - MBEDTLS_RSA_PRIVATE, - salt, salt_length, - output_length, - input, - output, - output_size ) ); - } - else -#endif /* MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP */ - { - status = PSA_ERROR_INVALID_ARGUMENT; - } - -rsa_exit: - mbedtls_rsa_free( rsa ); - mbedtls_free( rsa ); - } - else -#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) || - * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) */ - { - status = PSA_ERROR_NOT_SUPPORTED; - } - -exit: - unlock_status = psa_unlock_key_slot( slot ); - - return( ( status == PSA_SUCCESS ) ? unlock_status : status ); -} - - - -/****************************************************************/ -/* Symmetric cryptography */ -/****************************************************************/ - -static psa_status_t psa_cipher_setup( psa_cipher_operation_t *operation, - mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - mbedtls_operation_t cipher_operation ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_status_t unlock_status = PSA_ERROR_CORRUPTION_DETECTED; - int ret = 0; - psa_key_slot_t *slot; - size_t key_bits; - const mbedtls_cipher_info_t *cipher_info = NULL; - psa_key_usage_t usage = ( cipher_operation == MBEDTLS_ENCRYPT ? - PSA_KEY_USAGE_ENCRYPT : - PSA_KEY_USAGE_DECRYPT ); - - /* A context must be freshly initialized before it can be set up. */ - if( operation->alg != 0 ) - return( PSA_ERROR_BAD_STATE ); - - /* The requested algorithm must be one that can be processed by cipher. */ - if( ! PSA_ALG_IS_CIPHER( alg ) ) - return( PSA_ERROR_INVALID_ARGUMENT ); - - /* Fetch key material from key storage. */ - status = psa_get_and_lock_key_slot_with_policy( key, &slot, usage, alg ); - if( status != PSA_SUCCESS ) - goto exit; - - /* Initialize the operation struct members, except for alg. The alg member - * is used to indicate to psa_cipher_abort that there are resources to free, - * so we only set it after resources have been allocated/initialized. */ - operation->key_set = 0; - operation->iv_set = 0; - operation->mbedtls_in_use = 0; - operation->iv_size = 0; - operation->block_size = 0; - if( alg == PSA_ALG_ECB_NO_PADDING ) - operation->iv_required = 0; - else - operation->iv_required = 1; - - /* Try doing the operation through a driver before using software fallback. */ - if( cipher_operation == MBEDTLS_ENCRYPT ) - status = psa_driver_wrapper_cipher_encrypt_setup( &operation->ctx.driver, - slot, - alg ); - else - status = psa_driver_wrapper_cipher_decrypt_setup( &operation->ctx.driver, - slot, - alg ); - - if( status == PSA_SUCCESS ) - { - /* Once the driver context is initialised, it needs to be freed using - * psa_cipher_abort. Indicate this through setting alg. */ - operation->alg = alg; - } - - if( status != PSA_ERROR_NOT_SUPPORTED || - psa_key_lifetime_is_external( slot->attr.lifetime ) ) - goto exit; - - /* Proceed with initializing an mbed TLS cipher context if no driver is - * available for the given algorithm & key. */ - mbedtls_cipher_init( &operation->ctx.cipher ); - - /* Once the cipher context is initialised, it needs to be freed using - * psa_cipher_abort. Indicate there is something to be freed through setting - * alg, and indicate the operation is being done using mbedtls crypto through - * setting mbedtls_in_use. */ - operation->alg = alg; - operation->mbedtls_in_use = 1; - - key_bits = psa_get_key_slot_bits( slot ); - cipher_info = mbedtls_cipher_info_from_psa( alg, slot->attr.type, key_bits, NULL ); - if( cipher_info == NULL ) - { - status = PSA_ERROR_NOT_SUPPORTED; - goto exit; - } - - ret = mbedtls_cipher_setup( &operation->ctx.cipher, cipher_info ); - if( ret != 0 ) - goto exit; - -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_DES) - if( slot->attr.type == PSA_KEY_TYPE_DES && key_bits == 128 ) - { - /* Two-key Triple-DES is 3-key Triple-DES with K1=K3 */ - uint8_t keys[24]; - memcpy( keys, slot->key.data, 16 ); - memcpy( keys + 16, slot->key.data, 8 ); - ret = mbedtls_cipher_setkey( &operation->ctx.cipher, - keys, - 192, cipher_operation ); - } - else -#endif - { - ret = mbedtls_cipher_setkey( &operation->ctx.cipher, - slot->key.data, - (int) key_bits, cipher_operation ); - } - if( ret != 0 ) - goto exit; - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_CBC_NO_PADDING) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_CBC_PKCS7) - switch( alg ) - { - case PSA_ALG_CBC_NO_PADDING: - ret = mbedtls_cipher_set_padding_mode( &operation->ctx.cipher, - MBEDTLS_PADDING_NONE ); - break; - case PSA_ALG_CBC_PKCS7: - ret = mbedtls_cipher_set_padding_mode( &operation->ctx.cipher, - MBEDTLS_PADDING_PKCS7 ); - break; - default: - /* The algorithm doesn't involve padding. */ - ret = 0; - break; - } - if( ret != 0 ) - goto exit; -#endif /* MBEDTLS_PSA_BUILTIN_ALG_CBC_NO_PADDING || MBEDTLS_PSA_BUILTIN_ALG_CBC_PKCS7 */ - - operation->block_size = ( PSA_ALG_IS_STREAM_CIPHER( alg ) ? 1 : - PSA_BLOCK_CIPHER_BLOCK_LENGTH( slot->attr.type ) ); - if( ( alg & PSA_ALG_CIPHER_FROM_BLOCK_FLAG ) != 0 && - alg != PSA_ALG_ECB_NO_PADDING ) - { - operation->iv_size = PSA_BLOCK_CIPHER_BLOCK_LENGTH( slot->attr.type ); - } -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_CHACHA20) - else - if( alg == PSA_ALG_STREAM_CIPHER && slot->attr.type == PSA_KEY_TYPE_CHACHA20 ) - operation->iv_size = 12; -#endif - - status = PSA_SUCCESS; - -exit: - if( ret != 0 ) - status = mbedtls_to_psa_error( ret ); - if( status == PSA_SUCCESS ) - { - /* Update operation flags for both driver and software implementations */ - operation->key_set = 1; - } - else - psa_cipher_abort( operation ); - - unlock_status = psa_unlock_key_slot( slot ); - - return( ( status == PSA_SUCCESS ) ? unlock_status : status ); -} - -psa_status_t psa_cipher_encrypt_setup( psa_cipher_operation_t *operation, - mbedtls_svc_key_id_t key, - psa_algorithm_t alg ) -{ - return( psa_cipher_setup( operation, key, alg, MBEDTLS_ENCRYPT ) ); -} - -psa_status_t psa_cipher_decrypt_setup( psa_cipher_operation_t *operation, - mbedtls_svc_key_id_t key, - psa_algorithm_t alg ) -{ - return( psa_cipher_setup( operation, key, alg, MBEDTLS_DECRYPT ) ); -} - -psa_status_t psa_cipher_generate_iv( psa_cipher_operation_t *operation, - uint8_t *iv, - size_t iv_size, - size_t *iv_length ) -{ - psa_status_t status; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - if( operation->iv_set || ! operation->iv_required ) - { - return( PSA_ERROR_BAD_STATE ); - } - - if( operation->mbedtls_in_use == 0 ) - { - status = psa_driver_wrapper_cipher_generate_iv( &operation->ctx.driver, - iv, - iv_size, - iv_length ); - goto exit; - } - - if( iv_size < operation->iv_size ) - { - status = PSA_ERROR_BUFFER_TOO_SMALL; - goto exit; - } - ret = mbedtls_psa_get_random( MBEDTLS_PSA_RANDOM_STATE, - iv, operation->iv_size ); - if( ret != 0 ) - { - status = mbedtls_to_psa_error( ret ); - goto exit; - } - - *iv_length = operation->iv_size; - status = psa_cipher_set_iv( operation, iv, *iv_length ); - -exit: - if( status == PSA_SUCCESS ) - operation->iv_set = 1; - else - psa_cipher_abort( operation ); - return( status ); -} - -psa_status_t psa_cipher_set_iv( psa_cipher_operation_t *operation, - const uint8_t *iv, - size_t iv_length ) -{ - psa_status_t status; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - if( operation->iv_set || ! operation->iv_required ) - { - return( PSA_ERROR_BAD_STATE ); - } - - if( operation->mbedtls_in_use == 0 ) - { - status = psa_driver_wrapper_cipher_set_iv( &operation->ctx.driver, - iv, - iv_length ); - goto exit; - } - - if( iv_length != operation->iv_size ) - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto exit; - } - ret = mbedtls_cipher_set_iv( &operation->ctx.cipher, iv, iv_length ); - status = mbedtls_to_psa_error( ret ); -exit: - if( status == PSA_SUCCESS ) - operation->iv_set = 1; - else - psa_cipher_abort( operation ); - return( status ); -} - -/* Process input for which the algorithm is set to ECB mode. This requires - * manual processing, since the PSA API is defined as being able to process - * arbitrary-length calls to psa_cipher_update() with ECB mode, but the - * underlying mbedtls_cipher_update only takes full blocks. */ -static psa_status_t psa_cipher_update_ecb_internal( - mbedtls_cipher_context_t *ctx, - const uint8_t *input, - size_t input_length, - uint8_t *output, - size_t output_size, - size_t *output_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - size_t block_size = ctx->cipher_info->block_size; - size_t internal_output_length = 0; - *output_length = 0; - - if( input_length == 0 ) - { - status = PSA_SUCCESS; - goto exit; - } - - if( ctx->unprocessed_len > 0 ) - { - /* Fill up to block size, and run the block if there's a full one. */ - size_t bytes_to_copy = block_size - ctx->unprocessed_len; - - if( input_length < bytes_to_copy ) - bytes_to_copy = input_length; - - memcpy( &( ctx->unprocessed_data[ctx->unprocessed_len] ), - input, bytes_to_copy ); - input_length -= bytes_to_copy; - input += bytes_to_copy; - ctx->unprocessed_len += bytes_to_copy; - - if( ctx->unprocessed_len == block_size ) - { - status = mbedtls_to_psa_error( - mbedtls_cipher_update( ctx, - ctx->unprocessed_data, - block_size, - output, &internal_output_length ) ); - - if( status != PSA_SUCCESS ) - goto exit; - - output += internal_output_length; - output_size -= internal_output_length; - *output_length += internal_output_length; - ctx->unprocessed_len = 0; - } - } - - while( input_length >= block_size ) - { - /* Run all full blocks we have, one by one */ - status = mbedtls_to_psa_error( - mbedtls_cipher_update( ctx, input, - block_size, - output, &internal_output_length ) ); - - if( status != PSA_SUCCESS ) - goto exit; - - input_length -= block_size; - input += block_size; - - output += internal_output_length; - output_size -= internal_output_length; - *output_length += internal_output_length; - } - - if( input_length > 0 ) - { - /* Save unprocessed bytes for later processing */ - memcpy( &( ctx->unprocessed_data[ctx->unprocessed_len] ), - input, input_length ); - ctx->unprocessed_len += input_length; - } - - status = PSA_SUCCESS; - -exit: - return( status ); -} - -psa_status_t psa_cipher_update( psa_cipher_operation_t *operation, - const uint8_t *input, - size_t input_length, - uint8_t *output, - size_t output_size, - size_t *output_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - size_t expected_output_size; - if( operation->alg == 0 ) - { - return( PSA_ERROR_BAD_STATE ); - } - if( operation->iv_required && ! operation->iv_set ) - { - return( PSA_ERROR_BAD_STATE ); - } - - if( operation->mbedtls_in_use == 0 ) - { - status = psa_driver_wrapper_cipher_update( &operation->ctx.driver, - input, - input_length, - output, - output_size, - output_length ); - goto exit; - } - - if( ! PSA_ALG_IS_STREAM_CIPHER( operation->alg ) ) - { - /* Take the unprocessed partial block left over from previous - * update calls, if any, plus the input to this call. Remove - * the last partial block, if any. You get the data that will be - * output in this call. */ - expected_output_size = - ( operation->ctx.cipher.unprocessed_len + input_length ) - / operation->block_size * operation->block_size; - } - else - { - expected_output_size = input_length; - } - - if( output_size < expected_output_size ) - { - status = PSA_ERROR_BUFFER_TOO_SMALL; - goto exit; - } - - if( operation->alg == PSA_ALG_ECB_NO_PADDING ) - { - /* mbedtls_cipher_update has an API inconsistency: it will only - * process a single block at a time in ECB mode. Abstract away that - * inconsistency here to match the PSA API behaviour. */ - status = psa_cipher_update_ecb_internal( &operation->ctx.cipher, - input, - input_length, - output, - output_size, - output_length ); - } - else - { - status = mbedtls_to_psa_error( - mbedtls_cipher_update( &operation->ctx.cipher, input, - input_length, output, output_length ) ); - } -exit: - if( status != PSA_SUCCESS ) - psa_cipher_abort( operation ); - return( status ); -} - -psa_status_t psa_cipher_finish( psa_cipher_operation_t *operation, - uint8_t *output, - size_t output_size, - size_t *output_length ) -{ - psa_status_t status = PSA_ERROR_GENERIC_ERROR; - uint8_t temp_output_buffer[MBEDTLS_MAX_BLOCK_LENGTH]; - if( operation->alg == 0 ) - { - return( PSA_ERROR_BAD_STATE ); - } - if( operation->iv_required && ! operation->iv_set ) - { - return( PSA_ERROR_BAD_STATE ); - } - - if( operation->mbedtls_in_use == 0 ) - { - status = psa_driver_wrapper_cipher_finish( &operation->ctx.driver, - output, - output_size, - output_length ); - goto exit; - } - - if( operation->ctx.cipher.unprocessed_len != 0 ) - { - if( operation->alg == PSA_ALG_ECB_NO_PADDING || - operation->alg == PSA_ALG_CBC_NO_PADDING ) - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto exit; - } - } - - status = mbedtls_to_psa_error( - mbedtls_cipher_finish( &operation->ctx.cipher, - temp_output_buffer, - output_length ) ); - if( status != PSA_SUCCESS ) - goto exit; - - if( *output_length == 0 ) - ; /* Nothing to copy. Note that output may be NULL in this case. */ - else if( output_size >= *output_length ) - memcpy( output, temp_output_buffer, *output_length ); - else - status = PSA_ERROR_BUFFER_TOO_SMALL; - -exit: - if( operation->mbedtls_in_use == 1 ) - mbedtls_platform_zeroize( temp_output_buffer, sizeof( temp_output_buffer ) ); - - if( status == PSA_SUCCESS ) - return( psa_cipher_abort( operation ) ); - else - { - *output_length = 0; - (void) psa_cipher_abort( operation ); - - return( status ); - } -} - -psa_status_t psa_cipher_abort( psa_cipher_operation_t *operation ) -{ - if( operation->alg == 0 ) - { - /* The object has (apparently) been initialized but it is not (yet) - * in use. It's ok to call abort on such an object, and there's - * nothing to do. */ - return( PSA_SUCCESS ); - } - - /* Sanity check (shouldn't happen: operation->alg should - * always have been initialized to a valid value). */ - if( ! PSA_ALG_IS_CIPHER( operation->alg ) ) - return( PSA_ERROR_BAD_STATE ); - - if( operation->mbedtls_in_use == 0 ) - psa_driver_wrapper_cipher_abort( &operation->ctx.driver ); - else - mbedtls_cipher_free( &operation->ctx.cipher ); - - operation->alg = 0; - operation->key_set = 0; - operation->iv_set = 0; - operation->mbedtls_in_use = 0; - operation->iv_size = 0; - operation->block_size = 0; - operation->iv_required = 0; - - return( PSA_SUCCESS ); -} - - - - -/****************************************************************/ -/* AEAD */ -/****************************************************************/ - -typedef struct -{ - psa_key_slot_t *slot; - const mbedtls_cipher_info_t *cipher_info; - union - { - unsigned dummy; /* Make the union non-empty even with no supported algorithms. */ -#if defined(MBEDTLS_CCM_C) - mbedtls_ccm_context ccm; -#endif /* MBEDTLS_CCM_C */ -#if defined(MBEDTLS_GCM_C) - mbedtls_gcm_context gcm; -#endif /* MBEDTLS_GCM_C */ -#if defined(MBEDTLS_CHACHAPOLY_C) - mbedtls_chachapoly_context chachapoly; -#endif /* MBEDTLS_CHACHAPOLY_C */ - } ctx; - psa_algorithm_t core_alg; - uint8_t full_tag_length; - uint8_t tag_length; -} aead_operation_t; - -#define AEAD_OPERATION_INIT {0, 0, {0}, 0, 0, 0} - -static void psa_aead_abort_internal( aead_operation_t *operation ) -{ - switch( operation->core_alg ) - { -#if defined(MBEDTLS_CCM_C) - case PSA_ALG_CCM: - mbedtls_ccm_free( &operation->ctx.ccm ); - break; -#endif /* MBEDTLS_CCM_C */ -#if defined(MBEDTLS_GCM_C) - case PSA_ALG_GCM: - mbedtls_gcm_free( &operation->ctx.gcm ); - break; -#endif /* MBEDTLS_GCM_C */ - } - - psa_unlock_key_slot( operation->slot ); -} - -static psa_status_t psa_aead_setup( aead_operation_t *operation, - mbedtls_svc_key_id_t key, - psa_key_usage_t usage, - psa_algorithm_t alg ) -{ - psa_status_t status; - size_t key_bits; - mbedtls_cipher_id_t cipher_id; - - status = psa_get_and_lock_transparent_key_slot_with_policy( - key, &operation->slot, usage, alg ); - if( status != PSA_SUCCESS ) - return( status ); - - key_bits = psa_get_key_slot_bits( operation->slot ); - - operation->cipher_info = - mbedtls_cipher_info_from_psa( alg, operation->slot->attr.type, key_bits, - &cipher_id ); - if( operation->cipher_info == NULL ) - { - status = PSA_ERROR_NOT_SUPPORTED; - goto cleanup; - } - - switch( PSA_ALG_AEAD_WITH_SHORTENED_TAG( alg, 0 ) ) - { -#if defined(MBEDTLS_CCM_C) - case PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_CCM, 0 ): - operation->core_alg = PSA_ALG_CCM; - operation->full_tag_length = 16; - /* CCM allows the following tag lengths: 4, 6, 8, 10, 12, 14, 16. - * The call to mbedtls_ccm_encrypt_and_tag or - * mbedtls_ccm_auth_decrypt will validate the tag length. */ - if( PSA_BLOCK_CIPHER_BLOCK_LENGTH( operation->slot->attr.type ) != 16 ) - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto cleanup; - } - mbedtls_ccm_init( &operation->ctx.ccm ); - status = mbedtls_to_psa_error( - mbedtls_ccm_setkey( &operation->ctx.ccm, cipher_id, - operation->slot->key.data, - (unsigned int) key_bits ) ); - if( status != 0 ) - goto cleanup; - break; -#endif /* MBEDTLS_CCM_C */ - -#if defined(MBEDTLS_GCM_C) - case PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_GCM, 0 ): - operation->core_alg = PSA_ALG_GCM; - operation->full_tag_length = 16; - /* GCM allows the following tag lengths: 4, 8, 12, 13, 14, 15, 16. - * The call to mbedtls_gcm_crypt_and_tag or - * mbedtls_gcm_auth_decrypt will validate the tag length. */ - if( PSA_BLOCK_CIPHER_BLOCK_LENGTH( operation->slot->attr.type ) != 16 ) - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto cleanup; - } - mbedtls_gcm_init( &operation->ctx.gcm ); - status = mbedtls_to_psa_error( - mbedtls_gcm_setkey( &operation->ctx.gcm, cipher_id, - operation->slot->key.data, - (unsigned int) key_bits ) ); - if( status != 0 ) - goto cleanup; - break; -#endif /* MBEDTLS_GCM_C */ - -#if defined(MBEDTLS_CHACHAPOLY_C) - case PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_CHACHA20_POLY1305, 0 ): - operation->core_alg = PSA_ALG_CHACHA20_POLY1305; - operation->full_tag_length = 16; - /* We only support the default tag length. */ - if( alg != PSA_ALG_CHACHA20_POLY1305 ) - { - status = PSA_ERROR_NOT_SUPPORTED; - goto cleanup; - } - mbedtls_chachapoly_init( &operation->ctx.chachapoly ); - status = mbedtls_to_psa_error( - mbedtls_chachapoly_setkey( &operation->ctx.chachapoly, - operation->slot->key.data ) ); - if( status != 0 ) - goto cleanup; - break; -#endif /* MBEDTLS_CHACHAPOLY_C */ - - default: - status = PSA_ERROR_NOT_SUPPORTED; - goto cleanup; - } - - if( PSA_AEAD_TAG_LENGTH( alg ) > operation->full_tag_length ) - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto cleanup; - } - operation->tag_length = PSA_AEAD_TAG_LENGTH( alg ); - - return( PSA_SUCCESS ); - -cleanup: - psa_aead_abort_internal( operation ); - return( status ); -} - -psa_status_t psa_aead_encrypt( mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *nonce, - size_t nonce_length, - const uint8_t *additional_data, - size_t additional_data_length, - const uint8_t *plaintext, - size_t plaintext_length, - uint8_t *ciphertext, - size_t ciphertext_size, - size_t *ciphertext_length ) -{ - psa_status_t status; - aead_operation_t operation = AEAD_OPERATION_INIT; - uint8_t *tag; - - *ciphertext_length = 0; - - status = psa_aead_setup( &operation, key, PSA_KEY_USAGE_ENCRYPT, alg ); - if( status != PSA_SUCCESS ) - return( status ); - - /* For all currently supported modes, the tag is at the end of the - * ciphertext. */ - if( ciphertext_size < ( plaintext_length + operation.tag_length ) ) - { - status = PSA_ERROR_BUFFER_TOO_SMALL; - goto exit; - } - tag = ciphertext + plaintext_length; - -#if defined(MBEDTLS_GCM_C) - if( operation.core_alg == PSA_ALG_GCM ) - { - status = mbedtls_to_psa_error( - mbedtls_gcm_crypt_and_tag( &operation.ctx.gcm, - MBEDTLS_GCM_ENCRYPT, - plaintext_length, - nonce, nonce_length, - additional_data, additional_data_length, - plaintext, ciphertext, - operation.tag_length, tag ) ); - } - else -#endif /* MBEDTLS_GCM_C */ -#if defined(MBEDTLS_CCM_C) - if( operation.core_alg == PSA_ALG_CCM ) - { - status = mbedtls_to_psa_error( - mbedtls_ccm_encrypt_and_tag( &operation.ctx.ccm, - plaintext_length, - nonce, nonce_length, - additional_data, - additional_data_length, - plaintext, ciphertext, - tag, operation.tag_length ) ); - } - else -#endif /* MBEDTLS_CCM_C */ -#if defined(MBEDTLS_CHACHAPOLY_C) - if( operation.core_alg == PSA_ALG_CHACHA20_POLY1305 ) - { - if( nonce_length != 12 || operation.tag_length != 16 ) - { - status = PSA_ERROR_NOT_SUPPORTED; - goto exit; - } - status = mbedtls_to_psa_error( - mbedtls_chachapoly_encrypt_and_tag( &operation.ctx.chachapoly, - plaintext_length, - nonce, - additional_data, - additional_data_length, - plaintext, - ciphertext, - tag ) ); - } - else -#endif /* MBEDTLS_CHACHAPOLY_C */ - { - (void) tag; - return( PSA_ERROR_NOT_SUPPORTED ); - } - - if( status != PSA_SUCCESS && ciphertext_size != 0 ) - memset( ciphertext, 0, ciphertext_size ); - -exit: - psa_aead_abort_internal( &operation ); - if( status == PSA_SUCCESS ) - *ciphertext_length = plaintext_length + operation.tag_length; - return( status ); -} - -/* Locate the tag in a ciphertext buffer containing the encrypted data - * followed by the tag. Return the length of the part preceding the tag in - * *plaintext_length. This is the size of the plaintext in modes where - * the encrypted data has the same size as the plaintext, such as - * CCM and GCM. */ -static psa_status_t psa_aead_unpadded_locate_tag( size_t tag_length, - const uint8_t *ciphertext, - size_t ciphertext_length, - size_t plaintext_size, - const uint8_t **p_tag ) -{ - size_t payload_length; - if( tag_length > ciphertext_length ) - return( PSA_ERROR_INVALID_ARGUMENT ); - payload_length = ciphertext_length - tag_length; - if( payload_length > plaintext_size ) - return( PSA_ERROR_BUFFER_TOO_SMALL ); - *p_tag = ciphertext + payload_length; - return( PSA_SUCCESS ); -} - -psa_status_t psa_aead_decrypt( mbedtls_svc_key_id_t key, - psa_algorithm_t alg, - const uint8_t *nonce, - size_t nonce_length, - const uint8_t *additional_data, - size_t additional_data_length, - const uint8_t *ciphertext, - size_t ciphertext_length, - uint8_t *plaintext, - size_t plaintext_size, - size_t *plaintext_length ) -{ - psa_status_t status; - aead_operation_t operation = AEAD_OPERATION_INIT; - const uint8_t *tag = NULL; - - *plaintext_length = 0; - - status = psa_aead_setup( &operation, key, PSA_KEY_USAGE_DECRYPT, alg ); - if( status != PSA_SUCCESS ) - return( status ); - - status = psa_aead_unpadded_locate_tag( operation.tag_length, - ciphertext, ciphertext_length, - plaintext_size, &tag ); - if( status != PSA_SUCCESS ) - goto exit; - -#if defined(MBEDTLS_GCM_C) - if( operation.core_alg == PSA_ALG_GCM ) - { - status = mbedtls_to_psa_error( - mbedtls_gcm_auth_decrypt( &operation.ctx.gcm, - ciphertext_length - operation.tag_length, - nonce, nonce_length, - additional_data, - additional_data_length, - tag, operation.tag_length, - ciphertext, plaintext ) ); - } - else -#endif /* MBEDTLS_GCM_C */ -#if defined(MBEDTLS_CCM_C) - if( operation.core_alg == PSA_ALG_CCM ) - { - status = mbedtls_to_psa_error( - mbedtls_ccm_auth_decrypt( &operation.ctx.ccm, - ciphertext_length - operation.tag_length, - nonce, nonce_length, - additional_data, - additional_data_length, - ciphertext, plaintext, - tag, operation.tag_length ) ); - } - else -#endif /* MBEDTLS_CCM_C */ -#if defined(MBEDTLS_CHACHAPOLY_C) - if( operation.core_alg == PSA_ALG_CHACHA20_POLY1305 ) - { - if( nonce_length != 12 || operation.tag_length != 16 ) - { - status = PSA_ERROR_NOT_SUPPORTED; - goto exit; - } - status = mbedtls_to_psa_error( - mbedtls_chachapoly_auth_decrypt( &operation.ctx.chachapoly, - ciphertext_length - operation.tag_length, - nonce, - additional_data, - additional_data_length, - tag, - ciphertext, - plaintext ) ); - } - else -#endif /* MBEDTLS_CHACHAPOLY_C */ - { - return( PSA_ERROR_NOT_SUPPORTED ); - } - - if( status != PSA_SUCCESS && plaintext_size != 0 ) - memset( plaintext, 0, plaintext_size ); - -exit: - psa_aead_abort_internal( &operation ); - if( status == PSA_SUCCESS ) - *plaintext_length = ciphertext_length - operation.tag_length; - return( status ); -} - - - -/****************************************************************/ -/* Generators */ -/****************************************************************/ - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HKDF) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS) -#define AT_LEAST_ONE_BUILTIN_KDF -#endif - -#define HKDF_STATE_INIT 0 /* no input yet */ -#define HKDF_STATE_STARTED 1 /* got salt */ -#define HKDF_STATE_KEYED 2 /* got key */ -#define HKDF_STATE_OUTPUT 3 /* output started */ - -static psa_algorithm_t psa_key_derivation_get_kdf_alg( - const psa_key_derivation_operation_t *operation ) -{ - if ( PSA_ALG_IS_KEY_AGREEMENT( operation->alg ) ) - return( PSA_ALG_KEY_AGREEMENT_GET_KDF( operation->alg ) ); - else - return( operation->alg ); -} - -psa_status_t psa_key_derivation_abort( psa_key_derivation_operation_t *operation ) -{ - psa_status_t status = PSA_SUCCESS; - psa_algorithm_t kdf_alg = psa_key_derivation_get_kdf_alg( operation ); - if( kdf_alg == 0 ) - { - /* The object has (apparently) been initialized but it is not - * in use. It's ok to call abort on such an object, and there's - * nothing to do. */ - } - else -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HKDF) - if( PSA_ALG_IS_HKDF( kdf_alg ) ) - { - mbedtls_free( operation->ctx.hkdf.info ); - status = psa_hmac_abort_internal( &operation->ctx.hkdf.hmac ); - } - else -#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_HKDF */ -#if defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS) - if( PSA_ALG_IS_TLS12_PRF( kdf_alg ) || - /* TLS-1.2 PSK-to-MS KDF uses the same core as TLS-1.2 PRF */ - PSA_ALG_IS_TLS12_PSK_TO_MS( kdf_alg ) ) - { - if( operation->ctx.tls12_prf.seed != NULL ) - { - mbedtls_platform_zeroize( operation->ctx.tls12_prf.seed, - operation->ctx.tls12_prf.seed_length ); - mbedtls_free( operation->ctx.tls12_prf.seed ); - } - - if( operation->ctx.tls12_prf.label != NULL ) - { - mbedtls_platform_zeroize( operation->ctx.tls12_prf.label, - operation->ctx.tls12_prf.label_length ); - mbedtls_free( operation->ctx.tls12_prf.label ); - } - - status = psa_hmac_abort_internal( &operation->ctx.tls12_prf.hmac ); - - /* We leave the fields Ai and output_block to be erased safely by the - * mbedtls_platform_zeroize() in the end of this function. */ - } - else -#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF) || - * defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS) */ - { - status = PSA_ERROR_BAD_STATE; - } - mbedtls_platform_zeroize( operation, sizeof( *operation ) ); - return( status ); -} - -psa_status_t psa_key_derivation_get_capacity(const psa_key_derivation_operation_t *operation, - size_t *capacity) -{ - if( operation->alg == 0 ) - { - /* This is a blank key derivation operation. */ - return( PSA_ERROR_BAD_STATE ); - } - - *capacity = operation->capacity; - return( PSA_SUCCESS ); -} - -psa_status_t psa_key_derivation_set_capacity( psa_key_derivation_operation_t *operation, - size_t capacity ) -{ - if( operation->alg == 0 ) - return( PSA_ERROR_BAD_STATE ); - if( capacity > operation->capacity ) - return( PSA_ERROR_INVALID_ARGUMENT ); - operation->capacity = capacity; - return( PSA_SUCCESS ); -} - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HKDF) -/* Read some bytes from an HKDF-based operation. This performs a chunk - * of the expand phase of the HKDF algorithm. */ -static psa_status_t psa_key_derivation_hkdf_read( psa_hkdf_key_derivation_t *hkdf, - psa_algorithm_t hash_alg, - uint8_t *output, - size_t output_length ) -{ - uint8_t hash_length = PSA_HASH_LENGTH( hash_alg ); - psa_status_t status; - - if( hkdf->state < HKDF_STATE_KEYED || ! hkdf->info_set ) - return( PSA_ERROR_BAD_STATE ); - hkdf->state = HKDF_STATE_OUTPUT; - - while( output_length != 0 ) - { - /* Copy what remains of the current block */ - uint8_t n = hash_length - hkdf->offset_in_block; - if( n > output_length ) - n = (uint8_t) output_length; - memcpy( output, hkdf->output_block + hkdf->offset_in_block, n ); - output += n; - output_length -= n; - hkdf->offset_in_block += n; - if( output_length == 0 ) - break; - /* We can't be wanting more output after block 0xff, otherwise - * the capacity check in psa_key_derivation_output_bytes() would have - * prevented this call. It could happen only if the operation - * object was corrupted or if this function is called directly - * inside the library. */ - if( hkdf->block_number == 0xff ) - return( PSA_ERROR_BAD_STATE ); - - /* We need a new block */ - ++hkdf->block_number; - hkdf->offset_in_block = 0; - status = psa_hmac_setup_internal( &hkdf->hmac, - hkdf->prk, hash_length, - hash_alg ); - if( status != PSA_SUCCESS ) - return( status ); - if( hkdf->block_number != 1 ) - { - status = psa_hash_update( &hkdf->hmac.hash_ctx, - hkdf->output_block, - hash_length ); - if( status != PSA_SUCCESS ) - return( status ); - } - status = psa_hash_update( &hkdf->hmac.hash_ctx, - hkdf->info, - hkdf->info_length ); - if( status != PSA_SUCCESS ) - return( status ); - status = psa_hash_update( &hkdf->hmac.hash_ctx, - &hkdf->block_number, 1 ); - if( status != PSA_SUCCESS ) - return( status ); - status = psa_hmac_finish_internal( &hkdf->hmac, - hkdf->output_block, - sizeof( hkdf->output_block ) ); - if( status != PSA_SUCCESS ) - return( status ); - } - - return( PSA_SUCCESS ); -} -#endif /* MBEDTLS_PSA_BUILTIN_ALG_HKDF */ - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS) -static psa_status_t psa_key_derivation_tls12_prf_generate_next_block( - psa_tls12_prf_key_derivation_t *tls12_prf, - psa_algorithm_t alg ) -{ - psa_algorithm_t hash_alg = PSA_ALG_HKDF_GET_HASH( alg ); - uint8_t hash_length = PSA_HASH_LENGTH( hash_alg ); - psa_hash_operation_t backup = PSA_HASH_OPERATION_INIT; - psa_status_t status, cleanup_status; - - /* We can't be wanting more output after block 0xff, otherwise - * the capacity check in psa_key_derivation_output_bytes() would have - * prevented this call. It could happen only if the operation - * object was corrupted or if this function is called directly - * inside the library. */ - if( tls12_prf->block_number == 0xff ) - return( PSA_ERROR_CORRUPTION_DETECTED ); - - /* We need a new block */ - ++tls12_prf->block_number; - tls12_prf->left_in_block = hash_length; - - /* Recall the definition of the TLS-1.2-PRF from RFC 5246: - * - * PRF(secret, label, seed) = P_(secret, label + seed) - * - * P_hash(secret, seed) = HMAC_hash(secret, A(1) + seed) + - * HMAC_hash(secret, A(2) + seed) + - * HMAC_hash(secret, A(3) + seed) + ... - * - * A(0) = seed - * A(i) = HMAC_hash(secret, A(i-1)) - * - * The `psa_tls12_prf_key_derivation` structure saves the block - * `HMAC_hash(secret, A(i) + seed)` from which the output - * is currently extracted as `output_block` and where i is - * `block_number`. - */ - - /* Save the hash context before using it, to preserve the hash state with - * only the inner padding in it. We need this, because inner padding depends - * on the key (secret in the RFC's terminology). */ - status = psa_hash_clone( &tls12_prf->hmac.hash_ctx, &backup ); - if( status != PSA_SUCCESS ) - goto cleanup; - - /* Calculate A(i) where i = tls12_prf->block_number. */ - if( tls12_prf->block_number == 1 ) - { - /* A(1) = HMAC_hash(secret, A(0)), where A(0) = seed. (The RFC overloads - * the variable seed and in this instance means it in the context of the - * P_hash function, where seed = label + seed.) */ - status = psa_hash_update( &tls12_prf->hmac.hash_ctx, - tls12_prf->label, tls12_prf->label_length ); - if( status != PSA_SUCCESS ) - goto cleanup; - status = psa_hash_update( &tls12_prf->hmac.hash_ctx, - tls12_prf->seed, tls12_prf->seed_length ); - if( status != PSA_SUCCESS ) - goto cleanup; - } - else - { - /* A(i) = HMAC_hash(secret, A(i-1)) */ - status = psa_hash_update( &tls12_prf->hmac.hash_ctx, - tls12_prf->Ai, hash_length ); - if( status != PSA_SUCCESS ) - goto cleanup; - } - - status = psa_hmac_finish_internal( &tls12_prf->hmac, - tls12_prf->Ai, hash_length ); - if( status != PSA_SUCCESS ) - goto cleanup; - status = psa_hash_clone( &backup, &tls12_prf->hmac.hash_ctx ); - if( status != PSA_SUCCESS ) - goto cleanup; - - /* Calculate HMAC_hash(secret, A(i) + label + seed). */ - status = psa_hash_update( &tls12_prf->hmac.hash_ctx, - tls12_prf->Ai, hash_length ); - if( status != PSA_SUCCESS ) - goto cleanup; - status = psa_hash_update( &tls12_prf->hmac.hash_ctx, - tls12_prf->label, tls12_prf->label_length ); - if( status != PSA_SUCCESS ) - goto cleanup; - status = psa_hash_update( &tls12_prf->hmac.hash_ctx, - tls12_prf->seed, tls12_prf->seed_length ); - if( status != PSA_SUCCESS ) - goto cleanup; - status = psa_hmac_finish_internal( &tls12_prf->hmac, - tls12_prf->output_block, hash_length ); - if( status != PSA_SUCCESS ) - goto cleanup; - status = psa_hash_clone( &backup, &tls12_prf->hmac.hash_ctx ); - if( status != PSA_SUCCESS ) - goto cleanup; - - -cleanup: - - cleanup_status = psa_hash_abort( &backup ); - if( status == PSA_SUCCESS && cleanup_status != PSA_SUCCESS ) - status = cleanup_status; - - return( status ); -} - -static psa_status_t psa_key_derivation_tls12_prf_read( - psa_tls12_prf_key_derivation_t *tls12_prf, - psa_algorithm_t alg, - uint8_t *output, - size_t output_length ) -{ - psa_algorithm_t hash_alg = PSA_ALG_TLS12_PRF_GET_HASH( alg ); - uint8_t hash_length = PSA_HASH_LENGTH( hash_alg ); - psa_status_t status; - uint8_t offset, length; - - while( output_length != 0 ) - { - /* Check if we have fully processed the current block. */ - if( tls12_prf->left_in_block == 0 ) - { - status = psa_key_derivation_tls12_prf_generate_next_block( tls12_prf, - alg ); - if( status != PSA_SUCCESS ) - return( status ); - - continue; - } - - if( tls12_prf->left_in_block > output_length ) - length = (uint8_t) output_length; - else - length = tls12_prf->left_in_block; - - offset = hash_length - tls12_prf->left_in_block; - memcpy( output, tls12_prf->output_block + offset, length ); - output += length; - output_length -= length; - tls12_prf->left_in_block -= length; - } - - return( PSA_SUCCESS ); -} -#endif /* MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF || - * MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS */ - -psa_status_t psa_key_derivation_output_bytes( - psa_key_derivation_operation_t *operation, - uint8_t *output, - size_t output_length ) -{ - psa_status_t status; - psa_algorithm_t kdf_alg = psa_key_derivation_get_kdf_alg( operation ); - - if( operation->alg == 0 ) - { - /* This is a blank operation. */ - return( PSA_ERROR_BAD_STATE ); - } - - if( output_length > operation->capacity ) - { - operation->capacity = 0; - /* Go through the error path to wipe all confidential data now - * that the operation object is useless. */ - status = PSA_ERROR_INSUFFICIENT_DATA; - goto exit; - } - if( output_length == 0 && operation->capacity == 0 ) - { - /* Edge case: this is a finished operation, and 0 bytes - * were requested. The right error in this case could - * be either INSUFFICIENT_CAPACITY or BAD_STATE. Return - * INSUFFICIENT_CAPACITY, which is right for a finished - * operation, for consistency with the case when - * output_length > 0. */ - return( PSA_ERROR_INSUFFICIENT_DATA ); - } - operation->capacity -= output_length; - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HKDF) - if( PSA_ALG_IS_HKDF( kdf_alg ) ) - { - psa_algorithm_t hash_alg = PSA_ALG_HKDF_GET_HASH( kdf_alg ); - status = psa_key_derivation_hkdf_read( &operation->ctx.hkdf, hash_alg, - output, output_length ); - } - else -#endif /* MBEDTLS_PSA_BUILTIN_ALG_HKDF */ -#if defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS) - if( PSA_ALG_IS_TLS12_PRF( kdf_alg ) || - PSA_ALG_IS_TLS12_PSK_TO_MS( kdf_alg ) ) - { - status = psa_key_derivation_tls12_prf_read( &operation->ctx.tls12_prf, - kdf_alg, output, - output_length ); - } - else -#endif /* MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF || - * MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS */ - { - (void) kdf_alg; - return( PSA_ERROR_BAD_STATE ); - } - -exit: - if( status != PSA_SUCCESS ) - { - /* Preserve the algorithm upon errors, but clear all sensitive state. - * This allows us to differentiate between exhausted operations and - * blank operations, so we can return PSA_ERROR_BAD_STATE on blank - * operations. */ - psa_algorithm_t alg = operation->alg; - psa_key_derivation_abort( operation ); - operation->alg = alg; - memset( output, '!', output_length ); - } - return( status ); -} - -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_DES) -static void psa_des_set_key_parity( uint8_t *data, size_t data_size ) -{ - if( data_size >= 8 ) - mbedtls_des_key_set_parity( data ); - if( data_size >= 16 ) - mbedtls_des_key_set_parity( data + 8 ); - if( data_size >= 24 ) - mbedtls_des_key_set_parity( data + 16 ); -} -#endif /* MBEDTLS_PSA_BUILTIN_KEY_TYPE_DES */ - -static psa_status_t psa_generate_derived_key_internal( - psa_key_slot_t *slot, - size_t bits, - psa_key_derivation_operation_t *operation ) -{ - uint8_t *data = NULL; - size_t bytes = PSA_BITS_TO_BYTES( bits ); - psa_status_t status; - - if( ! key_type_is_raw_bytes( slot->attr.type ) ) - return( PSA_ERROR_INVALID_ARGUMENT ); - if( bits % 8 != 0 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - data = mbedtls_calloc( 1, bytes ); - if( data == NULL ) - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - - status = psa_key_derivation_output_bytes( operation, data, bytes ); - if( status != PSA_SUCCESS ) - goto exit; -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_DES) - if( slot->attr.type == PSA_KEY_TYPE_DES ) - psa_des_set_key_parity( data, bytes ); -#endif /* MBEDTLS_PSA_BUILTIN_KEY_TYPE_DES */ - - status = psa_allocate_buffer_to_slot( slot, bytes ); - if( status != PSA_SUCCESS ) - goto exit; - - slot->attr.bits = (psa_key_bits_t) bits; - psa_key_attributes_t attributes = { - .core = slot->attr - }; - - status = psa_driver_wrapper_import_key( &attributes, - data, bytes, - slot->key.data, - slot->key.bytes, - &slot->key.bytes, &bits ); - if( bits != slot->attr.bits ) - status = PSA_ERROR_INVALID_ARGUMENT; - -exit: - mbedtls_free( data ); - return( status ); -} - -psa_status_t psa_key_derivation_output_key( const psa_key_attributes_t *attributes, - psa_key_derivation_operation_t *operation, - mbedtls_svc_key_id_t *key ) -{ - psa_status_t status; - psa_key_slot_t *slot = NULL; - psa_se_drv_table_entry_t *driver = NULL; - - *key = MBEDTLS_SVC_KEY_ID_INIT; - - /* Reject any attempt to create a zero-length key so that we don't - * risk tripping up later, e.g. on a malloc(0) that returns NULL. */ - if( psa_get_key_bits( attributes ) == 0 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - - if( ! operation->can_output_key ) - return( PSA_ERROR_NOT_PERMITTED ); - - status = psa_start_key_creation( PSA_KEY_CREATION_DERIVE, attributes, - &slot, &driver ); -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - if( driver != NULL ) - { - /* Deriving a key in a secure element is not implemented yet. */ - status = PSA_ERROR_NOT_SUPPORTED; - } -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - if( status == PSA_SUCCESS ) - { - status = psa_generate_derived_key_internal( slot, - attributes->core.bits, - operation ); - } - if( status == PSA_SUCCESS ) - status = psa_finish_key_creation( slot, driver, key ); - if( status != PSA_SUCCESS ) - psa_fail_key_creation( slot, driver ); - - return( status ); -} - - - -/****************************************************************/ -/* Key derivation */ -/****************************************************************/ - -#if defined(AT_LEAST_ONE_BUILTIN_KDF) -static psa_status_t psa_key_derivation_setup_kdf( - psa_key_derivation_operation_t *operation, - psa_algorithm_t kdf_alg ) -{ - int is_kdf_alg_supported; - - /* Make sure that operation->ctx is properly zero-initialised. (Macro - * initialisers for this union leave some bytes unspecified.) */ - memset( &operation->ctx, 0, sizeof( operation->ctx ) ); - - /* Make sure that kdf_alg is a supported key derivation algorithm. */ -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HKDF) - if( PSA_ALG_IS_HKDF( kdf_alg ) ) - is_kdf_alg_supported = 1; - else -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF) - if( PSA_ALG_IS_TLS12_PRF( kdf_alg ) ) - is_kdf_alg_supported = 1; - else -#endif -#if defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS) - if( PSA_ALG_IS_TLS12_PSK_TO_MS( kdf_alg ) ) - is_kdf_alg_supported = 1; - else -#endif - is_kdf_alg_supported = 0; - - if( is_kdf_alg_supported ) - { - psa_algorithm_t hash_alg = PSA_ALG_HKDF_GET_HASH( kdf_alg ); - size_t hash_size = PSA_HASH_LENGTH( hash_alg ); - if( hash_size == 0 ) - return( PSA_ERROR_NOT_SUPPORTED ); - if( ( PSA_ALG_IS_TLS12_PRF( kdf_alg ) || - PSA_ALG_IS_TLS12_PSK_TO_MS( kdf_alg ) ) && - ! ( hash_alg == PSA_ALG_SHA_256 || hash_alg == PSA_ALG_SHA_384 ) ) - { - return( PSA_ERROR_NOT_SUPPORTED ); - } - operation->capacity = 255 * hash_size; - return( PSA_SUCCESS ); - } - - return( PSA_ERROR_NOT_SUPPORTED ); -} -#endif /* AT_LEAST_ONE_BUILTIN_KDF */ - -psa_status_t psa_key_derivation_setup( psa_key_derivation_operation_t *operation, - psa_algorithm_t alg ) -{ - psa_status_t status; - - if( operation->alg != 0 ) - return( PSA_ERROR_BAD_STATE ); - - if( PSA_ALG_IS_RAW_KEY_AGREEMENT( alg ) ) - return( PSA_ERROR_INVALID_ARGUMENT ); - else if( PSA_ALG_IS_KEY_AGREEMENT( alg ) ) - { -#if defined(AT_LEAST_ONE_BUILTIN_KDF) - psa_algorithm_t kdf_alg = PSA_ALG_KEY_AGREEMENT_GET_KDF( alg ); - status = psa_key_derivation_setup_kdf( operation, kdf_alg ); -#else - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* AT_LEAST_ONE_BUILTIN_KDF */ - } - else if( PSA_ALG_IS_KEY_DERIVATION( alg ) ) - { -#if defined(AT_LEAST_ONE_BUILTIN_KDF) - status = psa_key_derivation_setup_kdf( operation, alg ); -#else - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* AT_LEAST_ONE_BUILTIN_KDF */ - } - else - return( PSA_ERROR_INVALID_ARGUMENT ); - - if( status == PSA_SUCCESS ) - operation->alg = alg; - return( status ); -} - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HKDF) -static psa_status_t psa_hkdf_input( psa_hkdf_key_derivation_t *hkdf, - psa_algorithm_t hash_alg, - psa_key_derivation_step_t step, - const uint8_t *data, - size_t data_length ) -{ - psa_status_t status; - switch( step ) - { - case PSA_KEY_DERIVATION_INPUT_SALT: - if( hkdf->state != HKDF_STATE_INIT ) - return( PSA_ERROR_BAD_STATE ); - status = psa_hmac_setup_internal( &hkdf->hmac, - data, data_length, - hash_alg ); - if( status != PSA_SUCCESS ) - return( status ); - hkdf->state = HKDF_STATE_STARTED; - return( PSA_SUCCESS ); - case PSA_KEY_DERIVATION_INPUT_SECRET: - /* If no salt was provided, use an empty salt. */ - if( hkdf->state == HKDF_STATE_INIT ) - { - status = psa_hmac_setup_internal( &hkdf->hmac, - NULL, 0, - hash_alg ); - if( status != PSA_SUCCESS ) - return( status ); - hkdf->state = HKDF_STATE_STARTED; - } - if( hkdf->state != HKDF_STATE_STARTED ) - return( PSA_ERROR_BAD_STATE ); - status = psa_hash_update( &hkdf->hmac.hash_ctx, - data, data_length ); - if( status != PSA_SUCCESS ) - return( status ); - status = psa_hmac_finish_internal( &hkdf->hmac, - hkdf->prk, - sizeof( hkdf->prk ) ); - if( status != PSA_SUCCESS ) - return( status ); - hkdf->offset_in_block = PSA_HASH_LENGTH( hash_alg ); - hkdf->block_number = 0; - hkdf->state = HKDF_STATE_KEYED; - return( PSA_SUCCESS ); - case PSA_KEY_DERIVATION_INPUT_INFO: - if( hkdf->state == HKDF_STATE_OUTPUT ) - return( PSA_ERROR_BAD_STATE ); - if( hkdf->info_set ) - return( PSA_ERROR_BAD_STATE ); - hkdf->info_length = data_length; - if( data_length != 0 ) - { - hkdf->info = mbedtls_calloc( 1, data_length ); - if( hkdf->info == NULL ) - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - memcpy( hkdf->info, data, data_length ); - } - hkdf->info_set = 1; - return( PSA_SUCCESS ); - default: - return( PSA_ERROR_INVALID_ARGUMENT ); - } -} -#endif /* MBEDTLS_PSA_BUILTIN_ALG_HKDF */ - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS) -static psa_status_t psa_tls12_prf_set_seed( psa_tls12_prf_key_derivation_t *prf, - const uint8_t *data, - size_t data_length ) -{ - if( prf->state != PSA_TLS12_PRF_STATE_INIT ) - return( PSA_ERROR_BAD_STATE ); - - if( data_length != 0 ) - { - prf->seed = mbedtls_calloc( 1, data_length ); - if( prf->seed == NULL ) - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - - memcpy( prf->seed, data, data_length ); - prf->seed_length = data_length; - } - - prf->state = PSA_TLS12_PRF_STATE_SEED_SET; - - return( PSA_SUCCESS ); -} - -static psa_status_t psa_tls12_prf_set_key( psa_tls12_prf_key_derivation_t *prf, - psa_algorithm_t hash_alg, - const uint8_t *data, - size_t data_length ) -{ - psa_status_t status; - if( prf->state != PSA_TLS12_PRF_STATE_SEED_SET ) - return( PSA_ERROR_BAD_STATE ); - - status = psa_hmac_setup_internal( &prf->hmac, data, data_length, hash_alg ); - if( status != PSA_SUCCESS ) - return( status ); - - prf->state = PSA_TLS12_PRF_STATE_KEY_SET; - - return( PSA_SUCCESS ); -} - -static psa_status_t psa_tls12_prf_set_label( psa_tls12_prf_key_derivation_t *prf, - const uint8_t *data, - size_t data_length ) -{ - if( prf->state != PSA_TLS12_PRF_STATE_KEY_SET ) - return( PSA_ERROR_BAD_STATE ); - - if( data_length != 0 ) - { - prf->label = mbedtls_calloc( 1, data_length ); - if( prf->label == NULL ) - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - - memcpy( prf->label, data, data_length ); - prf->label_length = data_length; - } - - prf->state = PSA_TLS12_PRF_STATE_LABEL_SET; - - return( PSA_SUCCESS ); -} - -static psa_status_t psa_tls12_prf_input( psa_tls12_prf_key_derivation_t *prf, - psa_algorithm_t hash_alg, - psa_key_derivation_step_t step, - const uint8_t *data, - size_t data_length ) -{ - switch( step ) - { - case PSA_KEY_DERIVATION_INPUT_SEED: - return( psa_tls12_prf_set_seed( prf, data, data_length ) ); - case PSA_KEY_DERIVATION_INPUT_SECRET: - return( psa_tls12_prf_set_key( prf, hash_alg, data, data_length ) ); - case PSA_KEY_DERIVATION_INPUT_LABEL: - return( psa_tls12_prf_set_label( prf, data, data_length ) ); - default: - return( PSA_ERROR_INVALID_ARGUMENT ); - } -} -#endif /* MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF) || - * MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS */ - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS) -static psa_status_t psa_tls12_prf_psk_to_ms_set_key( - psa_tls12_prf_key_derivation_t *prf, - psa_algorithm_t hash_alg, - const uint8_t *data, - size_t data_length ) -{ - psa_status_t status; - uint8_t pms[ 4 + 2 * PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE ]; - uint8_t *cur = pms; - - if( data_length > PSA_TLS12_PSK_TO_MS_PSK_MAX_SIZE ) - return( PSA_ERROR_INVALID_ARGUMENT ); - - /* Quoting RFC 4279, Section 2: - * - * The premaster secret is formed as follows: if the PSK is N octets - * long, concatenate a uint16 with the value N, N zero octets, a second - * uint16 with the value N, and the PSK itself. - */ - - *cur++ = ( data_length >> 8 ) & 0xff; - *cur++ = ( data_length >> 0 ) & 0xff; - memset( cur, 0, data_length ); - cur += data_length; - *cur++ = pms[0]; - *cur++ = pms[1]; - memcpy( cur, data, data_length ); - cur += data_length; - - status = psa_tls12_prf_set_key( prf, hash_alg, pms, cur - pms ); - - mbedtls_platform_zeroize( pms, sizeof( pms ) ); - return( status ); -} - -static psa_status_t psa_tls12_prf_psk_to_ms_input( - psa_tls12_prf_key_derivation_t *prf, - psa_algorithm_t hash_alg, - psa_key_derivation_step_t step, - const uint8_t *data, - size_t data_length ) -{ - if( step == PSA_KEY_DERIVATION_INPUT_SECRET ) - { - return( psa_tls12_prf_psk_to_ms_set_key( prf, hash_alg, - data, data_length ) ); - } - - return( psa_tls12_prf_input( prf, hash_alg, step, data, data_length ) ); -} -#endif /* MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS */ - -/** Check whether the given key type is acceptable for the given - * input step of a key derivation. - * - * Secret inputs must have the type #PSA_KEY_TYPE_DERIVE. - * Non-secret inputs must have the type #PSA_KEY_TYPE_RAW_DATA. - * Both secret and non-secret inputs can alternatively have the type - * #PSA_KEY_TYPE_NONE, which is never the type of a key object, meaning - * that the input was passed as a buffer rather than via a key object. - */ -static int psa_key_derivation_check_input_type( - psa_key_derivation_step_t step, - psa_key_type_t key_type ) -{ - switch( step ) - { - case PSA_KEY_DERIVATION_INPUT_SECRET: - if( key_type == PSA_KEY_TYPE_DERIVE ) - return( PSA_SUCCESS ); - if( key_type == PSA_KEY_TYPE_NONE ) - return( PSA_SUCCESS ); - break; - case PSA_KEY_DERIVATION_INPUT_LABEL: - case PSA_KEY_DERIVATION_INPUT_SALT: - case PSA_KEY_DERIVATION_INPUT_INFO: - case PSA_KEY_DERIVATION_INPUT_SEED: - if( key_type == PSA_KEY_TYPE_RAW_DATA ) - return( PSA_SUCCESS ); - if( key_type == PSA_KEY_TYPE_NONE ) - return( PSA_SUCCESS ); - break; - } - return( PSA_ERROR_INVALID_ARGUMENT ); -} - -static psa_status_t psa_key_derivation_input_internal( - psa_key_derivation_operation_t *operation, - psa_key_derivation_step_t step, - psa_key_type_t key_type, - const uint8_t *data, - size_t data_length ) -{ - psa_status_t status; - psa_algorithm_t kdf_alg = psa_key_derivation_get_kdf_alg( operation ); - - status = psa_key_derivation_check_input_type( step, key_type ); - if( status != PSA_SUCCESS ) - goto exit; - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_HKDF) - if( PSA_ALG_IS_HKDF( kdf_alg ) ) - { - status = psa_hkdf_input( &operation->ctx.hkdf, - PSA_ALG_HKDF_GET_HASH( kdf_alg ), - step, data, data_length ); - } - else -#endif /* MBEDTLS_PSA_BUILTIN_ALG_HKDF */ -#if defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF) - if( PSA_ALG_IS_TLS12_PRF( kdf_alg ) ) - { - status = psa_tls12_prf_input( &operation->ctx.tls12_prf, - PSA_ALG_HKDF_GET_HASH( kdf_alg ), - step, data, data_length ); - } - else -#endif /* MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF */ -#if defined(MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS) - if( PSA_ALG_IS_TLS12_PSK_TO_MS( kdf_alg ) ) - { - status = psa_tls12_prf_psk_to_ms_input( &operation->ctx.tls12_prf, - PSA_ALG_HKDF_GET_HASH( kdf_alg ), - step, data, data_length ); - } - else -#endif /* MBEDTLS_PSA_BUILTIN_ALG_TLS12_PSK_TO_MS */ - { - /* This can't happen unless the operation object was not initialized */ - (void) data; - (void) data_length; - (void) kdf_alg; - return( PSA_ERROR_BAD_STATE ); - } - -exit: - if( status != PSA_SUCCESS ) - psa_key_derivation_abort( operation ); - return( status ); -} - -psa_status_t psa_key_derivation_input_bytes( - psa_key_derivation_operation_t *operation, - psa_key_derivation_step_t step, - const uint8_t *data, - size_t data_length ) -{ - return( psa_key_derivation_input_internal( operation, step, - PSA_KEY_TYPE_NONE, - data, data_length ) ); -} - -psa_status_t psa_key_derivation_input_key( - psa_key_derivation_operation_t *operation, - psa_key_derivation_step_t step, - mbedtls_svc_key_id_t key ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_status_t unlock_status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_slot_t *slot; - - status = psa_get_and_lock_transparent_key_slot_with_policy( - key, &slot, PSA_KEY_USAGE_DERIVE, operation->alg ); - if( status != PSA_SUCCESS ) - { - psa_key_derivation_abort( operation ); - return( status ); - } - - /* Passing a key object as a SECRET input unlocks the permission - * to output to a key object. */ - if( step == PSA_KEY_DERIVATION_INPUT_SECRET ) - operation->can_output_key = 1; - - status = psa_key_derivation_input_internal( operation, - step, slot->attr.type, - slot->key.data, - slot->key.bytes ); - - unlock_status = psa_unlock_key_slot( slot ); - - return( ( status == PSA_SUCCESS ) ? unlock_status : status ); -} - - - -/****************************************************************/ -/* Key agreement */ -/****************************************************************/ - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_ECDH) -static psa_status_t psa_key_agreement_ecdh( const uint8_t *peer_key, - size_t peer_key_length, - const mbedtls_ecp_keypair *our_key, - uint8_t *shared_secret, - size_t shared_secret_size, - size_t *shared_secret_length ) -{ - mbedtls_ecp_keypair *their_key = NULL; - mbedtls_ecdh_context ecdh; - psa_status_t status; - size_t bits = 0; - psa_ecc_family_t curve = mbedtls_ecc_group_to_psa( our_key->grp.id, &bits ); - mbedtls_ecdh_init( &ecdh ); - - status = mbedtls_psa_ecp_load_representation( - PSA_KEY_TYPE_ECC_PUBLIC_KEY(curve), - bits, - peer_key, - peer_key_length, - &their_key ); - if( status != PSA_SUCCESS ) - goto exit; - - status = mbedtls_to_psa_error( - mbedtls_ecdh_get_params( &ecdh, their_key, MBEDTLS_ECDH_THEIRS ) ); - if( status != PSA_SUCCESS ) - goto exit; - status = mbedtls_to_psa_error( - mbedtls_ecdh_get_params( &ecdh, our_key, MBEDTLS_ECDH_OURS ) ); - if( status != PSA_SUCCESS ) - goto exit; - - status = mbedtls_to_psa_error( - mbedtls_ecdh_calc_secret( &ecdh, - shared_secret_length, - shared_secret, shared_secret_size, - mbedtls_psa_get_random, - MBEDTLS_PSA_RANDOM_STATE ) ); - if( status != PSA_SUCCESS ) - goto exit; - if( PSA_BITS_TO_BYTES( bits ) != *shared_secret_length ) - status = PSA_ERROR_CORRUPTION_DETECTED; - -exit: - if( status != PSA_SUCCESS ) - mbedtls_platform_zeroize( shared_secret, shared_secret_size ); - mbedtls_ecdh_free( &ecdh ); - mbedtls_ecp_keypair_free( their_key ); - mbedtls_free( their_key ); - - return( status ); -} -#endif /* MBEDTLS_PSA_BUILTIN_ALG_ECDH */ - -#define PSA_KEY_AGREEMENT_MAX_SHARED_SECRET_SIZE MBEDTLS_ECP_MAX_BYTES - -static psa_status_t psa_key_agreement_raw_internal( psa_algorithm_t alg, - psa_key_slot_t *private_key, - const uint8_t *peer_key, - size_t peer_key_length, - uint8_t *shared_secret, - size_t shared_secret_size, - size_t *shared_secret_length ) -{ - switch( alg ) - { -#if defined(MBEDTLS_PSA_BUILTIN_ALG_ECDH) - case PSA_ALG_ECDH: - if( ! PSA_KEY_TYPE_IS_ECC_KEY_PAIR( private_key->attr.type ) ) - return( PSA_ERROR_INVALID_ARGUMENT ); - mbedtls_ecp_keypair *ecp = NULL; - psa_status_t status = mbedtls_psa_ecp_load_representation( - private_key->attr.type, - private_key->attr.bits, - private_key->key.data, - private_key->key.bytes, - &ecp ); - if( status != PSA_SUCCESS ) - return( status ); - status = psa_key_agreement_ecdh( peer_key, peer_key_length, - ecp, - shared_secret, shared_secret_size, - shared_secret_length ); - mbedtls_ecp_keypair_free( ecp ); - mbedtls_free( ecp ); - return( status ); -#endif /* MBEDTLS_PSA_BUILTIN_ALG_ECDH */ - default: - (void) private_key; - (void) peer_key; - (void) peer_key_length; - (void) shared_secret; - (void) shared_secret_size; - (void) shared_secret_length; - return( PSA_ERROR_NOT_SUPPORTED ); - } -} - -/* Note that if this function fails, you must call psa_key_derivation_abort() - * to potentially free embedded data structures and wipe confidential data. - */ -static psa_status_t psa_key_agreement_internal( psa_key_derivation_operation_t *operation, - psa_key_derivation_step_t step, - psa_key_slot_t *private_key, - const uint8_t *peer_key, - size_t peer_key_length ) -{ - psa_status_t status; - uint8_t shared_secret[PSA_KEY_AGREEMENT_MAX_SHARED_SECRET_SIZE]; - size_t shared_secret_length = 0; - psa_algorithm_t ka_alg = PSA_ALG_KEY_AGREEMENT_GET_BASE( operation->alg ); - - /* Step 1: run the secret agreement algorithm to generate the shared - * secret. */ - status = psa_key_agreement_raw_internal( ka_alg, - private_key, - peer_key, peer_key_length, - shared_secret, - sizeof( shared_secret ), - &shared_secret_length ); - if( status != PSA_SUCCESS ) - goto exit; - - /* Step 2: set up the key derivation to generate key material from - * the shared secret. A shared secret is permitted wherever a key - * of type DERIVE is permitted. */ - status = psa_key_derivation_input_internal( operation, step, - PSA_KEY_TYPE_DERIVE, - shared_secret, - shared_secret_length ); -exit: - mbedtls_platform_zeroize( shared_secret, shared_secret_length ); - return( status ); -} - -psa_status_t psa_key_derivation_key_agreement( psa_key_derivation_operation_t *operation, - psa_key_derivation_step_t step, - mbedtls_svc_key_id_t private_key, - const uint8_t *peer_key, - size_t peer_key_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_status_t unlock_status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_slot_t *slot; - - if( ! PSA_ALG_IS_KEY_AGREEMENT( operation->alg ) ) - return( PSA_ERROR_INVALID_ARGUMENT ); - status = psa_get_and_lock_transparent_key_slot_with_policy( - private_key, &slot, PSA_KEY_USAGE_DERIVE, operation->alg ); - if( status != PSA_SUCCESS ) - return( status ); - status = psa_key_agreement_internal( operation, step, - slot, - peer_key, peer_key_length ); - if( status != PSA_SUCCESS ) - psa_key_derivation_abort( operation ); - else - { - /* If a private key has been added as SECRET, we allow the derived - * key material to be used as a key in PSA Crypto. */ - if( step == PSA_KEY_DERIVATION_INPUT_SECRET ) - operation->can_output_key = 1; - } - - unlock_status = psa_unlock_key_slot( slot ); - - return( ( status == PSA_SUCCESS ) ? unlock_status : status ); -} - -psa_status_t psa_raw_key_agreement( psa_algorithm_t alg, - mbedtls_svc_key_id_t private_key, - const uint8_t *peer_key, - size_t peer_key_length, - uint8_t *output, - size_t output_size, - size_t *output_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_status_t unlock_status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_slot_t *slot = NULL; - - if( ! PSA_ALG_IS_KEY_AGREEMENT( alg ) ) - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto exit; - } - status = psa_get_and_lock_transparent_key_slot_with_policy( - private_key, &slot, PSA_KEY_USAGE_DERIVE, alg ); - if( status != PSA_SUCCESS ) - goto exit; - - status = psa_key_agreement_raw_internal( alg, slot, - peer_key, peer_key_length, - output, output_size, - output_length ); - -exit: - if( status != PSA_SUCCESS ) - { - /* If an error happens and is not handled properly, the output - * may be used as a key to protect sensitive data. Arrange for such - * a key to be random, which is likely to result in decryption or - * verification errors. This is better than filling the buffer with - * some constant data such as zeros, which would result in the data - * being protected with a reproducible, easily knowable key. - */ - psa_generate_random( output, output_size ); - *output_length = output_size; - } - - unlock_status = psa_unlock_key_slot( slot ); - - return( ( status == PSA_SUCCESS ) ? unlock_status : status ); -} - - - -/****************************************************************/ -/* Random generation */ -/****************************************************************/ - -/** Initialize the PSA random generator. - */ -static void mbedtls_psa_random_init( mbedtls_psa_random_context_t *rng ) -{ -#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) - memset( rng, 0, sizeof( *rng ) ); -#else /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ - - /* Set default configuration if - * mbedtls_psa_crypto_configure_entropy_sources() hasn't been called. */ - if( rng->entropy_init == NULL ) - rng->entropy_init = mbedtls_entropy_init; - if( rng->entropy_free == NULL ) - rng->entropy_free = mbedtls_entropy_free; - - rng->entropy_init( &rng->entropy ); -#if defined(MBEDTLS_PSA_INJECT_ENTROPY) && \ - defined(MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES) - /* The PSA entropy injection feature depends on using NV seed as an entropy - * source. Add NV seed as an entropy source for PSA entropy injection. */ - mbedtls_entropy_add_source( &rng->entropy, - mbedtls_nv_seed_poll, NULL, - MBEDTLS_ENTROPY_BLOCK_SIZE, - MBEDTLS_ENTROPY_SOURCE_STRONG ); -#endif - - mbedtls_psa_drbg_init( MBEDTLS_PSA_RANDOM_STATE ); -#endif /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ -} - -/** Deinitialize the PSA random generator. - */ -static void mbedtls_psa_random_free( mbedtls_psa_random_context_t *rng ) -{ -#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) - memset( rng, 0, sizeof( *rng ) ); -#else /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ - mbedtls_psa_drbg_free( MBEDTLS_PSA_RANDOM_STATE ); - rng->entropy_free( &rng->entropy ); -#endif /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ -} - -/** Seed the PSA random generator. - */ -static psa_status_t mbedtls_psa_random_seed( mbedtls_psa_random_context_t *rng ) -{ -#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) - /* Do nothing: the external RNG seeds itself. */ - (void) rng; - return( PSA_SUCCESS ); -#else /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ - const unsigned char drbg_seed[] = "PSA"; - int ret = mbedtls_psa_drbg_seed( &rng->entropy, - drbg_seed, sizeof( drbg_seed ) - 1 ); - return mbedtls_to_psa_error( ret ); -#endif /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ -} - -psa_status_t psa_generate_random( uint8_t *output, - size_t output_size ) -{ - GUARD_MODULE_INITIALIZED; - -#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) - - size_t output_length = 0; - psa_status_t status = mbedtls_psa_external_get_random( &global_data.rng, - output, output_size, - &output_length ); - if( status != PSA_SUCCESS ) - return( status ); - /* Breaking up a request into smaller chunks is currently not supported - * for the extrernal RNG interface. */ - if( output_length != output_size ) - return( PSA_ERROR_INSUFFICIENT_ENTROPY ); - return( PSA_SUCCESS ); - -#else /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ - - while( output_size > 0 ) - { - size_t request_size = - ( output_size > MBEDTLS_PSA_RANDOM_MAX_REQUEST ? - MBEDTLS_PSA_RANDOM_MAX_REQUEST : - output_size ); - int ret = mbedtls_psa_get_random( MBEDTLS_PSA_RANDOM_STATE, - output, request_size ); - if( ret != 0 ) - return( mbedtls_to_psa_error( ret ) ); - output_size -= request_size; - output += request_size; - } - return( PSA_SUCCESS ); -#endif /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ -} - -/* Wrapper function allowing the classic API to use the PSA RNG. - * - * `mbedtls_psa_get_random(MBEDTLS_PSA_RANDOM_STATE, ...)` calls - * `psa_generate_random(...)`. The state parameter is ignored since the - * PSA API doesn't support passing an explicit state. - * - * In the non-external case, psa_generate_random() calls an - * `mbedtls_xxx_drbg_random` function which has exactly the same signature - * and semantics as mbedtls_psa_get_random(). As an optimization, - * instead of doing this back-and-forth between the PSA API and the - * classic API, psa_crypto_random_impl.h defines `mbedtls_psa_get_random` - * as a constant function pointer to `mbedtls_xxx_drbg_random`. - */ -#if defined (MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) -int mbedtls_psa_get_random( void *p_rng, - unsigned char *output, - size_t output_size ) -{ - /* This function takes a pointer to the RNG state because that's what - * classic mbedtls functions using an RNG expect. The PSA RNG manages - * its own state internally and doesn't let the caller access that state. - * So we just ignore the state parameter, and in practice we'll pass - * NULL. */ - (void) p_rng; - psa_status_t status = psa_generate_random( output, output_size ); - if( status == PSA_SUCCESS ) - return( 0 ); - else - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); -} -#endif /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ - -#if defined(MBEDTLS_PSA_INJECT_ENTROPY) -#include "third_party/mbedtls/entropy_poll.h" - -psa_status_t mbedtls_psa_inject_entropy( const uint8_t *seed, - size_t seed_size ) -{ - if( global_data.initialized ) - return( PSA_ERROR_NOT_PERMITTED ); - - if( ( ( seed_size < MBEDTLS_ENTROPY_MIN_PLATFORM ) || - ( seed_size < MBEDTLS_ENTROPY_BLOCK_SIZE ) ) || - ( seed_size > MBEDTLS_ENTROPY_MAX_SEED_SIZE ) ) - return( PSA_ERROR_INVALID_ARGUMENT ); - - return( mbedtls_psa_storage_inject_entropy( seed, seed_size ) ); -} -#endif /* MBEDTLS_PSA_INJECT_ENTROPY */ - -/** Validate the key type and size for key generation - * - * \param type The key type - * \param bits The number of bits of the key - * - * \retval #PSA_SUCCESS - * The key type and size are valid. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The size in bits of the key is not valid. - * \retval #PSA_ERROR_NOT_SUPPORTED - * The type and/or the size in bits of the key or the combination of - * the two is not supported. - */ -static psa_status_t psa_validate_key_type_and_size_for_key_generation( - psa_key_type_t type, size_t bits ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - - if( key_type_is_raw_bytes( type ) ) - { - status = validate_unstructured_key_bit_size( type, bits ); - if( status != PSA_SUCCESS ) - return( status ); - } - else -#if defined(PSA_WANT_KEY_TYPE_RSA_KEY_PAIR) - if( PSA_KEY_TYPE_IS_RSA( type ) && PSA_KEY_TYPE_IS_KEY_PAIR( type ) ) - { - if( bits > PSA_VENDOR_RSA_MAX_KEY_BITS ) - return( PSA_ERROR_NOT_SUPPORTED ); - - /* Accept only byte-aligned keys, for the same reasons as - * in psa_import_rsa_key(). */ - if( bits % 8 != 0 ) - return( PSA_ERROR_NOT_SUPPORTED ); - } - else -#endif /* defined(PSA_WANT_KEY_TYPE_RSA_KEY_PAIR) */ - -#if defined(PSA_WANT_KEY_TYPE_ECC_KEY_PAIR) - if( PSA_KEY_TYPE_IS_ECC( type ) && PSA_KEY_TYPE_IS_KEY_PAIR( type ) ) - { - /* To avoid empty block, return successfully here. */ - return( PSA_SUCCESS ); - } - else -#endif /* defined(PSA_WANT_KEY_TYPE_ECC_KEY_PAIR) */ - { - return( PSA_ERROR_NOT_SUPPORTED ); - } - - return( PSA_SUCCESS ); -} - -psa_status_t psa_generate_key_internal( - const psa_key_attributes_t *attributes, - uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_type_t type = attributes->core.type; - - if( ( attributes->domain_parameters == NULL ) && - ( attributes->domain_parameters_size != 0 ) ) - return( PSA_ERROR_INVALID_ARGUMENT ); - - if( key_type_is_raw_bytes( type ) ) - { - status = psa_generate_random( key_buffer, key_buffer_size ); - if( status != PSA_SUCCESS ) - return( status ); - -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_DES) - if( type == PSA_KEY_TYPE_DES ) - psa_des_set_key_parity( key_buffer, key_buffer_size ); -#endif /* MBEDTLS_PSA_BUILTIN_KEY_TYPE_DES */ - } - else - -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) - if ( type == PSA_KEY_TYPE_RSA_KEY_PAIR ) - { - return( mbedtls_psa_rsa_generate_key( attributes, - key_buffer, - key_buffer_size, - key_buffer_length ) ); - } - else -#endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) */ - -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) - if ( PSA_KEY_TYPE_IS_ECC( type ) && PSA_KEY_TYPE_IS_KEY_PAIR( type ) ) - { - return( mbedtls_psa_ecp_generate_key( attributes, - key_buffer, - key_buffer_size, - key_buffer_length ) ); - } - else -#endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) */ - { - (void)key_buffer_length; - return( PSA_ERROR_NOT_SUPPORTED ); - } - - return( PSA_SUCCESS ); -} - -psa_status_t psa_generate_key( const psa_key_attributes_t *attributes, - mbedtls_svc_key_id_t *key ) -{ - psa_status_t status; - psa_key_slot_t *slot = NULL; - psa_se_drv_table_entry_t *driver = NULL; - size_t key_buffer_size; - - *key = MBEDTLS_SVC_KEY_ID_INIT; - - /* Reject any attempt to create a zero-length key so that we don't - * risk tripping up later, e.g. on a malloc(0) that returns NULL. */ - if( psa_get_key_bits( attributes ) == 0 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - - status = psa_start_key_creation( PSA_KEY_CREATION_GENERATE, attributes, - &slot, &driver ); - if( status != PSA_SUCCESS ) - goto exit; - - /* In the case of a transparent key or an opaque key stored in local - * storage (thus not in the case of generating a key in a secure element - * or cryptoprocessor with storage), we have to allocate a buffer to - * hold the generated key material. */ - if( slot->key.data == NULL ) - { - if ( PSA_KEY_LIFETIME_GET_LOCATION( attributes->core.lifetime ) == - PSA_KEY_LOCATION_LOCAL_STORAGE ) - { - status = psa_validate_key_type_and_size_for_key_generation( - attributes->core.type, attributes->core.bits ); - if( status != PSA_SUCCESS ) - goto exit; - - key_buffer_size = PSA_EXPORT_KEY_OUTPUT_SIZE( - attributes->core.type, - attributes->core.bits ); - } - else - { - status = psa_driver_wrapper_get_key_buffer_size( - attributes, &key_buffer_size ); - if( status != PSA_SUCCESS ) - goto exit; - } - - status = psa_allocate_buffer_to_slot( slot, key_buffer_size ); - if( status != PSA_SUCCESS ) - goto exit; - } - - status = psa_driver_wrapper_generate_key( attributes, - slot->key.data, slot->key.bytes, &slot->key.bytes ); - - if( status != PSA_SUCCESS ) - psa_remove_key_data_from_memory( slot ); - -exit: - if( status == PSA_SUCCESS ) - status = psa_finish_key_creation( slot, driver, key ); - if( status != PSA_SUCCESS ) - psa_fail_key_creation( slot, driver ); - - return( status ); -} - -/****************************************************************/ -/* Module setup */ -/****************************************************************/ - -#if !defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) -psa_status_t mbedtls_psa_crypto_configure_entropy_sources( - void (* entropy_init )( mbedtls_entropy_context *ctx ), - void (* entropy_free )( mbedtls_entropy_context *ctx ) ) -{ - if( global_data.rng_state != RNG_NOT_INITIALIZED ) - return( PSA_ERROR_BAD_STATE ); - global_data.rng.entropy_init = entropy_init; - global_data.rng.entropy_free = entropy_free; - return( PSA_SUCCESS ); -} -#endif /* !defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) */ - -void mbedtls_psa_crypto_free( void ) -{ - psa_wipe_all_key_slots( ); - if( global_data.rng_state != RNG_NOT_INITIALIZED ) - { - mbedtls_psa_random_free( &global_data.rng ); - } - /* Wipe all remaining data, including configuration. - * In particular, this sets all state indicator to the value - * indicating "uninitialized". */ - mbedtls_platform_zeroize( &global_data, sizeof( global_data ) ); -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - /* Unregister all secure element drivers, so that we restart from - * a pristine state. */ - psa_unregister_all_se_drivers( ); -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ -} - -#if defined(PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS) -/** Recover a transaction that was interrupted by a power failure. - * - * This function is called during initialization, before psa_crypto_init() - * returns. If this function returns a failure status, the initialization - * fails. - */ -static psa_status_t psa_crypto_recover_transaction( - const psa_crypto_transaction_t *transaction ) -{ - switch( transaction->unknown.type ) - { - case PSA_CRYPTO_TRANSACTION_CREATE_KEY: - case PSA_CRYPTO_TRANSACTION_DESTROY_KEY: - /* TODO - fall through to the failure case until this - * is implemented. - * https://github.com/ARMmbed/mbed-crypto/issues/218 - */ - default: - /* We found an unsupported transaction in the storage. - * We don't know what state the storage is in. Give up. */ - return( PSA_ERROR_DATA_INVALID ); - } -} -#endif /* PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS */ - -psa_status_t psa_crypto_init( void ) -{ - psa_status_t status; - - /* Double initialization is explicitly allowed. */ - if( global_data.initialized != 0 ) - return( PSA_SUCCESS ); - - /* Initialize and seed the random generator. */ - mbedtls_psa_random_init( &global_data.rng ); - global_data.rng_state = RNG_INITIALIZED; - status = mbedtls_psa_random_seed( &global_data.rng ); - if( status != PSA_SUCCESS ) - goto exit; - global_data.rng_state = RNG_SEEDED; - - status = psa_initialize_key_slots( ); - if( status != PSA_SUCCESS ) - goto exit; - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - status = psa_init_all_se_drivers( ); - if( status != PSA_SUCCESS ) - goto exit; -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - -#if defined(PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS) - status = psa_crypto_load_transaction( ); - if( status == PSA_SUCCESS ) - { - status = psa_crypto_recover_transaction( &psa_crypto_transaction ); - if( status != PSA_SUCCESS ) - goto exit; - status = psa_crypto_stop_transaction( ); - } - else if( status == PSA_ERROR_DOES_NOT_EXIST ) - { - /* There's no transaction to complete. It's all good. */ - status = PSA_SUCCESS; - } -#endif /* PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS */ - - /* All done. */ - global_data.initialized = 1; - -exit: - if( status != PSA_SUCCESS ) - mbedtls_psa_crypto_free( ); - return( status ); -} - -#endif /* MBEDTLS_PSA_CRYPTO_C */ diff --git a/third_party/mbedtls/psa_crypto_client.c b/third_party/mbedtls/psa_crypto_client.c deleted file mode 100644 index 55e875508..000000000 --- a/third_party/mbedtls/psa_crypto_client.c +++ /dev/null @@ -1,84 +0,0 @@ -/* clang-format off */ - -/* - * PSA crypto client code - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "third_party/mbedtls/common.h" -#include "third_party/mbedtls/psa_crypto_service_integration.h" -#include "third_party/mbedtls/crypto.h" - -#if defined(MBEDTLS_PSA_CRYPTO_CLIENT) - -#include "third_party/mbedtls/platform.h" -#if !defined(MBEDTLS_PLATFORM_C) -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - -void psa_reset_key_attributes( psa_key_attributes_t *attributes ) -{ - mbedtls_free( attributes->domain_parameters ); - memset( attributes, 0, sizeof( *attributes ) ); -} - -psa_status_t psa_set_key_domain_parameters( psa_key_attributes_t *attributes, - psa_key_type_t type, - const uint8_t *data, - size_t data_length ) -{ - uint8_t *copy = NULL; - - if( data_length != 0 ) - { - copy = mbedtls_calloc( 1, data_length ); - if( copy == NULL ) - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - memcpy( copy, data, data_length ); - } - /* After this point, this function is guaranteed to succeed, so it - * can start modifying `*attributes`. */ - - if( attributes->domain_parameters != NULL ) - { - mbedtls_free( attributes->domain_parameters ); - attributes->domain_parameters = NULL; - attributes->domain_parameters_size = 0; - } - - attributes->domain_parameters = copy; - attributes->domain_parameters_size = data_length; - attributes->core.type = type; - return( PSA_SUCCESS ); -} - -psa_status_t psa_get_key_domain_parameters( - const psa_key_attributes_t *attributes, - uint8_t *data, size_t data_size, size_t *data_length ) -{ - if( attributes->domain_parameters_size > data_size ) - return( PSA_ERROR_BUFFER_TOO_SMALL ); - *data_length = attributes->domain_parameters_size; - if( attributes->domain_parameters_size != 0 ) - memcpy( data, attributes->domain_parameters, - attributes->domain_parameters_size ); - return( PSA_SUCCESS ); -} - -#endif /* MBEDTLS_PSA_CRYPTO_CLIENT */ diff --git a/third_party/mbedtls/psa_crypto_core.h b/third_party/mbedtls/psa_crypto_core.h deleted file mode 100644 index 94ab6e306..000000000 --- a/third_party/mbedtls/psa_crypto_core.h +++ /dev/null @@ -1,416 +0,0 @@ -/* clang-format off */ - -/* - * PSA crypto core internal interfaces - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef PSA_CRYPTO_CORE_H -#define PSA_CRYPTO_CORE_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/crypto_se_driver.h" - -#include "third_party/mbedtls/md_internal.h" - -/** The data structure representing a key slot, containing key material - * and metadata for one key. - */ -typedef struct -{ - psa_core_key_attributes_t attr; - - /* - * Number of locks on the key slot held by the library. - * - * This counter is incremented by one each time a library function - * retrieves through one of the dedicated internal API a pointer to the - * key slot. - * - * This counter is decremented by one each time a library function stops - * accessing the key slot and states it by calling the - * psa_unlock_key_slot() API. - * - * This counter is used to prevent resetting the key slot while the library - * may access it. For example, such control is needed in the following - * scenarios: - * . In case of key slot starvation, all key slots contain the description - * of a key, and the library asks for the description of a persistent - * key not present in the key slots, the key slots currently accessed by - * the library cannot be reclaimed to free a key slot to load the - * persistent key. - * . In case of a multi-threaded application where one thread asks to close - * or purge or destroy a key while it is in used by the library through - * another thread. - */ - size_t lock_count; - - /* Dynamically allocated key data buffer. - * Format as specified in psa_export_key(). */ - struct key_data - { - uint8_t *data; - size_t bytes; - } key; -} psa_key_slot_t; - -/* A mask of key attribute flags used only internally. - * Currently there aren't any. */ -#define PSA_KA_MASK_INTERNAL_ONLY ( \ - 0 ) - -/** Test whether a key slot is occupied. - * - * A key slot is occupied iff the key type is nonzero. This works because - * no valid key can have 0 as its key type. - * - * \param[in] slot The key slot to test. - * - * \return 1 if the slot is occupied, 0 otherwise. - */ -static inline int psa_is_key_slot_occupied( const psa_key_slot_t *slot ) -{ - return( slot->attr.type != 0 ); -} - -/** Test whether a key slot is locked. - * - * A key slot is locked iff its lock counter is strictly greater than 0. - * - * \param[in] slot The key slot to test. - * - * \return 1 if the slot is locked, 0 otherwise. - */ -static inline int psa_is_key_slot_locked( const psa_key_slot_t *slot ) -{ - return( slot->lock_count > 0 ); -} - -/** Retrieve flags from psa_key_slot_t::attr::core::flags. - * - * \param[in] slot The key slot to query. - * \param mask The mask of bits to extract. - * - * \return The key attribute flags in the given slot, - * bitwise-anded with \p mask. - */ -static inline uint16_t psa_key_slot_get_flags( const psa_key_slot_t *slot, - uint16_t mask ) -{ - return( slot->attr.flags & mask ); -} - -/** Set flags in psa_key_slot_t::attr::core::flags. - * - * \param[in,out] slot The key slot to modify. - * \param mask The mask of bits to modify. - * \param value The new value of the selected bits. - */ -static inline void psa_key_slot_set_flags( psa_key_slot_t *slot, - uint16_t mask, - uint16_t value ) -{ - slot->attr.flags = ( ( ~mask & slot->attr.flags ) | - ( mask & value ) ); -} - -/** Turn on flags in psa_key_slot_t::attr::core::flags. - * - * \param[in,out] slot The key slot to modify. - * \param mask The mask of bits to set. - */ -static inline void psa_key_slot_set_bits_in_flags( psa_key_slot_t *slot, - uint16_t mask ) -{ - slot->attr.flags |= mask; -} - -/** Turn off flags in psa_key_slot_t::attr::core::flags. - * - * \param[in,out] slot The key slot to modify. - * \param mask The mask of bits to clear. - */ -static inline void psa_key_slot_clear_bits( psa_key_slot_t *slot, - uint16_t mask ) -{ - slot->attr.flags &= ~mask; -} - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) -/** Get the SE slot number of a key from the key slot storing its description. - * - * \param[in] slot The key slot to query. This must be a key slot storing - * the description of a key of a dynamically registered - * secure element, otherwise the behaviour is undefined. - */ -static inline psa_key_slot_number_t psa_key_slot_get_slot_number( - const psa_key_slot_t *slot ) -{ - return( *( (psa_key_slot_number_t *)( slot->key.data ) ) ); -} -#endif - -/** Completely wipe a slot in memory, including its policy. - * - * Persistent storage is not affected. - * - * \param[in,out] slot The key slot to wipe. - * - * \retval #PSA_SUCCESS - * Success. This includes the case of a key slot that was - * already fully wiped. - * \retval #PSA_ERROR_CORRUPTION_DETECTED - */ -psa_status_t psa_wipe_key_slot( psa_key_slot_t *slot ); - -/** Copy key data (in export format) into an empty key slot. - * - * This function assumes that the slot does not contain - * any key material yet. On failure, the slot content is unchanged. - * - * \param[in,out] slot Key slot to copy the key into. - * \param[in] data Buffer containing the key material. - * \param data_length Size of the key buffer. - * - * \retval #PSA_SUCCESS - * The key has been copied successfully. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * Not enough memory was available for allocation of the - * copy buffer. - * \retval #PSA_ERROR_ALREADY_EXISTS - * There was other key material already present in the slot. - */ -psa_status_t psa_copy_key_material_into_slot( psa_key_slot_t *slot, - const uint8_t *data, - size_t data_length ); - -/** Convert an mbed TLS error code to a PSA error code - * - * \note This function is provided solely for the convenience of - * Mbed TLS and may be removed at any time without notice. - * - * \param ret An mbed TLS-thrown error code - * - * \return The corresponding PSA error code - */ -psa_status_t mbedtls_to_psa_error( int ret ); - -/** Get Mbed TLS MD information of a hash algorithm given its PSA identifier - * - * \param[in] alg PSA hash algorithm identifier - * - * \return The Mbed TLS MD information of the hash algorithm. \c NULL if the - * PSA hash algorithm is not supported. - */ -const mbedtls_md_info_t *mbedtls_md_info_from_psa( psa_algorithm_t alg ); - -/** Import a key in binary format. - * - * \note The signature of this function is that of a PSA driver - * import_key entry point. This function behaves as an import_key - * entry point as defined in the PSA driver interface specification for - * transparent drivers. - * - * \param[in] attributes The attributes for the key to import. - * \param[in] data The buffer containing the key data in import - * format. - * \param[in] data_length Size of the \p data buffer in bytes. - * \param[out] key_buffer The buffer to contain the key data in output - * format upon successful return. - * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes. This - * size is greater or equal to \p data_length. - * \param[out] key_buffer_length The length of the data written in \p - * key_buffer in bytes. - * \param[out] bits The key size in number of bits. - * - * \retval #PSA_SUCCESS The key was imported successfully. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The key data is not correctly formatted. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_CORRUPTION_DETECTED - */ -psa_status_t psa_import_key_into_slot( - const psa_key_attributes_t *attributes, - const uint8_t *data, size_t data_length, - uint8_t *key_buffer, size_t key_buffer_size, - size_t *key_buffer_length, size_t *bits ); - -/** Export a key in binary format - * - * \note The signature of this function is that of a PSA driver export_key - * entry point. This function behaves as an export_key entry point as - * defined in the PSA driver interface specification. - * - * \param[in] attributes The attributes for the key to export. - * \param[in] key_buffer Material or context of the key to export. - * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes. - * \param[out] data Buffer where the key data is to be written. - * \param[in] data_size Size of the \p data buffer in bytes. - * \param[out] data_length On success, the number of bytes written in - * \p data - * - * \retval #PSA_SUCCESS The key was exported successfully. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - */ -psa_status_t psa_export_key_internal( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ); - -/** Export a public key or the public part of a key pair in binary format. - * - * \note The signature of this function is that of a PSA driver - * export_public_key entry point. This function behaves as an - * export_public_key entry point as defined in the PSA driver interface - * specification. - * - * \param[in] attributes The attributes for the key to export. - * \param[in] key_buffer Material or context of the key to export. - * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes. - * \param[out] data Buffer where the key data is to be written. - * \param[in] data_size Size of the \p data buffer in bytes. - * \param[out] data_length On success, the number of bytes written in - * \p data - * - * \retval #PSA_SUCCESS The public key was exported successfully. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - */ -psa_status_t psa_export_public_key_internal( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ); - -/** - * \brief Generate a key. - * - * \note The signature of the function is that of a PSA driver generate_key - * entry point. - * - * \param[in] attributes The attributes for the key to generate. - * \param[out] key_buffer Buffer where the key data is to be written. - * \param[in] key_buffer_size Size of \p key_buffer in bytes. - * \param[out] key_buffer_length On success, the number of bytes written in - * \p key_buffer. - * - * \retval #PSA_SUCCESS - * The key was generated successfully. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \retval #PSA_ERROR_NOT_SUPPORTED - * Key size in bits or type not supported. - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of \p key_buffer is too small. - */ -psa_status_t psa_generate_key_internal( const psa_key_attributes_t *attributes, - uint8_t *key_buffer, - size_t key_buffer_size, - size_t *key_buffer_length ); - -/** Sign an already-calculated hash with a private key. - * - * \note The signature of this function is that of a PSA driver - * sign_hash entry point. This function behaves as a sign_hash - * entry point as defined in the PSA driver interface specification for - * transparent drivers. - * - * \param[in] attributes The attributes of the key to use for the - * operation. - * \param[in] key_buffer The buffer containing the key context. - * format. - * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes. - * \param[in] alg A signature algorithm that is compatible with - * the type of the key. - * \param[in] hash The hash or message to sign. - * \param[in] hash_length Size of the \p hash buffer in bytes. - * \param[out] signature Buffer where the signature is to be written. - * \param[in] signature_size Size of the \p signature buffer in bytes. - * \param[out] signature_length On success, the number of bytes - * that make up the returned signature value. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p signature buffer is too small. You can - * determine a sufficient buffer size by calling - * #PSA_SIGN_OUTPUT_SIZE(\c key_type, \c key_bits, \p alg) - * where \c key_type and \c key_bits are the type and bit-size - * respectively of the key. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_INSUFFICIENT_ENTROPY - */ -psa_status_t psa_sign_hash_internal( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - uint8_t *signature, size_t signature_size, size_t *signature_length ); - -/** - * \brief Verify the signature a hash or short message using a public key. - * - * \note The signature of this function is that of a PSA driver - * verify_hash entry point. This function behaves as a verify_hash - * entry point as defined in the PSA driver interface specification for - * transparent drivers. - * - * \param[in] attributes The attributes of the key to use for the - * operation. - * \param[in] key_buffer The buffer containing the key context. - * format. - * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes. - * \param[in] alg A signature algorithm that is compatible with - * the type of the key. - * \param[in] hash The hash or message whose signature is to be - * verified. - * \param[in] hash_length Size of the \p hash buffer in bytes. - * \param[in] signature Buffer containing the signature to verify. - * \param[in] signature_length Size of the \p signature buffer in bytes. - * - * \retval #PSA_SUCCESS - * The signature is valid. - * \retval #PSA_ERROR_INVALID_SIGNATURE - * The calculation was performed successfully, but the passed - * signature is not a valid signature. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - */ -psa_status_t psa_verify_hash_internal( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - const uint8_t *signature, size_t signature_length ); - -#endif /* PSA_CRYPTO_CORE_H */ diff --git a/third_party/mbedtls/psa_crypto_driver_wrappers.c b/third_party/mbedtls/psa_crypto_driver_wrappers.c deleted file mode 100644 index 66b46ed52..000000000 --- a/third_party/mbedtls/psa_crypto_driver_wrappers.c +++ /dev/null @@ -1,1071 +0,0 @@ -/* clang-format off */ - -/* - * Functions to delegate cryptographic operations to an available - * and appropriate accelerator. - * Warning: This file will be auto-generated in the future. - */ -/* Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "third_party/mbedtls/psa_crypto_core.h" -#include "third_party/mbedtls/psa_crypto_driver_wrappers.h" -#include "third_party/mbedtls/platform.h" - -#if defined(MBEDTLS_PSA_CRYPTO_DRIVERS) - -/* Include test driver definition when running tests */ -#if defined(PSA_CRYPTO_DRIVER_TEST) -#ifndef PSA_CRYPTO_DRIVER_PRESENT -#define PSA_CRYPTO_DRIVER_PRESENT -#endif -#ifndef PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT -#define PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT -#endif -/* #include "test/drivers/test_driver.h" */ -#endif /* PSA_CRYPTO_DRIVER_TEST */ - -/* Repeat above block for each JSON-declared driver during autogeneration */ - -/* Auto-generated values depending on which drivers are registered. ID 0 is - * reserved for unallocated operations. */ -#if defined(PSA_CRYPTO_DRIVER_TEST) -#define PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID (1) -#define PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID (2) -#endif /* PSA_CRYPTO_DRIVER_TEST */ -#endif /* MBEDTLS_PSA_CRYPTO_DRIVERS */ - -/* Support the 'old' SE interface when asked to */ -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) -/* PSA_CRYPTO_DRIVER_PRESENT is defined when either a new-style or old-style - * SE driver is present, to avoid unused argument errors at compile time. */ -#ifndef PSA_CRYPTO_DRIVER_PRESENT -#define PSA_CRYPTO_DRIVER_PRESENT -#endif -#include "third_party/mbedtls/psa_crypto_se.h" -#endif - -/* Start delegation functions */ -psa_status_t psa_driver_wrapper_sign_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - uint8_t *signature, size_t signature_size, size_t *signature_length ) -{ - /* Try dynamically-registered SE interface first */ -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - const psa_drv_se_t *drv; - psa_drv_se_context_t *drv_context; - - if( psa_get_se_driver( attributes->core.lifetime, &drv, &drv_context ) ) - { - if( drv->asymmetric == NULL || - drv->asymmetric->p_sign == NULL ) - { - /* Key is defined in SE, but we have no way to exercise it */ - return( PSA_ERROR_NOT_SUPPORTED ); - } - return( drv->asymmetric->p_sign( - drv_context, *( (psa_key_slot_number_t *)key_buffer ), - alg, hash, hash_length, - signature, signature_size, signature_length ) ); - } -#endif /* PSA_CRYPTO_SE_C */ - - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_location_t location = - PSA_KEY_LIFETIME_GET_LOCATION( attributes->core.lifetime ); - - switch( location ) - { - case PSA_KEY_LOCATION_LOCAL_STORAGE: - /* Key is stored in the slot in export representation, so - * cycle through all known transparent accelerators */ -#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) -#if defined(PSA_CRYPTO_DRIVER_TEST) - status = test_transparent_signature_sign_hash( attributes, - key_buffer, - key_buffer_size, - alg, - hash, - hash_length, - signature, - signature_size, - signature_length ); - /* Declared with fallback == true */ - if( status != PSA_ERROR_NOT_SUPPORTED ) - return( status ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ -#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */ - /* Fell through, meaning no accelerator supports this operation */ - return( psa_sign_hash_internal( attributes, - key_buffer, - key_buffer_size, - alg, - hash, - hash_length, - signature, - signature_size, - signature_length ) ); - - /* Add cases for opaque driver here */ -#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_TEST_DRIVER_LIFETIME: - return( test_opaque_signature_sign_hash( attributes, - key_buffer, - key_buffer_size, - alg, - hash, - hash_length, - signature, - signature_size, - signature_length ) ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ -#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */ - default: - /* Key is declared with a lifetime not known to us */ - (void)status; - return( PSA_ERROR_INVALID_ARGUMENT ); - } -} - -psa_status_t psa_driver_wrapper_verify_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - const uint8_t *signature, size_t signature_length ) -{ - /* Try dynamically-registered SE interface first */ -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - const psa_drv_se_t *drv; - psa_drv_se_context_t *drv_context; - - if( psa_get_se_driver( attributes->core.lifetime, &drv, &drv_context ) ) - { - if( drv->asymmetric == NULL || - drv->asymmetric->p_verify == NULL ) - { - /* Key is defined in SE, but we have no way to exercise it */ - return( PSA_ERROR_NOT_SUPPORTED ); - } - return( drv->asymmetric->p_verify( - drv_context, *( (psa_key_slot_number_t *)key_buffer ), - alg, hash, hash_length, - signature, signature_length ) ); - } -#endif /* PSA_CRYPTO_SE_C */ - - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_location_t location = - PSA_KEY_LIFETIME_GET_LOCATION( attributes->core.lifetime ); - - switch( location ) - { - case PSA_KEY_LOCATION_LOCAL_STORAGE: - /* Key is stored in the slot in export representation, so - * cycle through all known transparent accelerators */ -#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) -#if defined(PSA_CRYPTO_DRIVER_TEST) - status = test_transparent_signature_verify_hash( attributes, - key_buffer, - key_buffer_size, - alg, - hash, - hash_length, - signature, - signature_length ); - /* Declared with fallback == true */ - if( status != PSA_ERROR_NOT_SUPPORTED ) - return( status ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ -#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */ - - return( psa_verify_hash_internal( attributes, - key_buffer, - key_buffer_size, - alg, - hash, - hash_length, - signature, - signature_length ) ); - - /* Add cases for opaque driver here */ -#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_TEST_DRIVER_LIFETIME: - return( test_opaque_signature_verify_hash( attributes, - key_buffer, - key_buffer_size, - alg, - hash, - hash_length, - signature, - signature_length ) ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ -#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */ - default: - /* Key is declared with a lifetime not known to us */ - (void)status; - return( PSA_ERROR_INVALID_ARGUMENT ); - } -} - -/** Get the key buffer size for the key material of a generated key in the - * case of an opaque driver without storage. - * - * \param[in] attributes The key attributes. - * \param[out] key_buffer_size Minimum buffer size to contain the key material - * - * \retval #PSA_SUCCESS - * The minimum size for a buffer to contain the key material has been - * returned successfully. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The size in bits of the key is not valid. - * \retval #PSA_ERROR_NOT_SUPPORTED - * The type and/or the size in bits of the key or the combination of - * the two is not supported. - */ -psa_status_t psa_driver_wrapper_get_key_buffer_size( - const psa_key_attributes_t *attributes, - size_t *key_buffer_size ) -{ - psa_key_location_t location = PSA_KEY_LIFETIME_GET_LOCATION( attributes->core.lifetime ); - psa_key_type_t key_type = attributes->core.type; - size_t key_bits = attributes->core.bits; - - *key_buffer_size = 0; - switch( location ) - { -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_TEST_DRIVER_LIFETIME: -#ifdef TEST_DRIVER_KEY_CONTEXT_SIZE_FUNCTION - *key_buffer_size = test_size_function( key_type, key_bits ); - return( PSA_SUCCESS ); -#else /* TEST_DRIVER_KEY_CONTEXT_SIZE_FUNCTION */ - if( PSA_KEY_TYPE_IS_KEY_PAIR( key_type ) ) - { - int public_key_overhead = - ( ( TEST_DRIVER_KEY_CONTEXT_STORE_PUBLIC_KEY == 1 ) ? - PSA_EXPORT_KEY_OUTPUT_SIZE( key_type, key_bits ) : 0 ); - *key_buffer_size = TEST_DRIVER_KEY_CONTEXT_BASE_SIZE - + TEST_DRIVER_KEY_CONTEXT_PUBLIC_KEY_SIZE - + public_key_overhead; - } - else if( PSA_KEY_TYPE_IS_PUBLIC_KEY( key_type ) ) - { - *key_buffer_size = TEST_DRIVER_KEY_CONTEXT_BASE_SIZE - + TEST_DRIVER_KEY_CONTEXT_PUBLIC_KEY_SIZE; - } - else if ( !PSA_KEY_TYPE_IS_KEY_PAIR( key_type ) && - !PSA_KEY_TYPE_IS_PUBLIC_KEY ( key_type ) ) - { - *key_buffer_size = TEST_DRIVER_KEY_CONTEXT_BASE_SIZE - + TEST_DRIVER_KEY_CONTEXT_SYMMETRIC_FACTOR - * ( ( key_bits + 7 ) / 8 ); - } - else - { - return( PSA_ERROR_NOT_SUPPORTED ); - } - return( PSA_SUCCESS ); -#endif /* TEST_DRIVER_KEY_CONTEXT_SIZE_FUNCTION */ -#endif /* PSA_CRYPTO_DRIVER_TEST */ - - default: - (void)key_type; - (void)key_bits; - return( PSA_ERROR_NOT_SUPPORTED ); - } -} - -psa_status_t psa_driver_wrapper_generate_key( - const psa_key_attributes_t *attributes, - uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_location_t location = - PSA_KEY_LIFETIME_GET_LOCATION(attributes->core.lifetime); - - /* Try dynamically-registered SE interface first */ -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - const psa_drv_se_t *drv; - psa_drv_se_context_t *drv_context; - - if( psa_get_se_driver( attributes->core.lifetime, &drv, &drv_context ) ) - { - size_t pubkey_length = 0; /* We don't support this feature yet */ - if( drv->key_management == NULL || - drv->key_management->p_generate == NULL ) - { - /* Key is defined as being in SE, but we have no way to generate it */ - return( PSA_ERROR_NOT_SUPPORTED ); - } - return( drv->key_management->p_generate( - drv_context, - *( (psa_key_slot_number_t *)key_buffer ), - attributes, NULL, 0, &pubkey_length ) ); - } -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - - switch( location ) - { - case PSA_KEY_LOCATION_LOCAL_STORAGE: -#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) - /* Transparent drivers are limited to generating asymmetric keys */ - if( PSA_KEY_TYPE_IS_ASYMMETRIC( attributes->core.type ) ) - { - /* Cycle through all known transparent accelerators */ -#if defined(PSA_CRYPTO_DRIVER_TEST) - status = test_transparent_generate_key( - attributes, key_buffer, key_buffer_size, - key_buffer_length ); - /* Declared with fallback == true */ - if( status != PSA_ERROR_NOT_SUPPORTED ) - break; -#endif /* PSA_CRYPTO_DRIVER_TEST */ - } -#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */ - - /* Software fallback */ - status = psa_generate_key_internal( - attributes, key_buffer, key_buffer_size, key_buffer_length ); - break; - - /* Add cases for opaque driver here */ -#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_TEST_DRIVER_LIFETIME: - status = test_opaque_generate_key( - attributes, key_buffer, key_buffer_size, key_buffer_length ); - break; -#endif /* PSA_CRYPTO_DRIVER_TEST */ -#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */ - - default: - /* Key is declared with a lifetime not known to us */ - status = PSA_ERROR_INVALID_ARGUMENT; - break; - } - - return( status ); -} - -psa_status_t psa_driver_wrapper_import_key( - const psa_key_attributes_t *attributes, - const uint8_t *data, - size_t data_length, - uint8_t *key_buffer, - size_t key_buffer_size, - size_t *key_buffer_length, - size_t *bits ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_location_t location = PSA_KEY_LIFETIME_GET_LOCATION( - psa_get_key_lifetime( attributes ) ); - - /* Try dynamically-registered SE interface first */ -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - const psa_drv_se_t *drv; - psa_drv_se_context_t *drv_context; - - if( psa_get_se_driver( attributes->core.lifetime, &drv, &drv_context ) ) - { - if( drv->key_management == NULL || - drv->key_management->p_import == NULL ) - return( PSA_ERROR_NOT_SUPPORTED ); - - /* The driver should set the number of key bits, however in - * case it doesn't, we initialize bits to an invalid value. */ - *bits = PSA_MAX_KEY_BITS + 1; - status = drv->key_management->p_import( - drv_context, - *( (psa_key_slot_number_t *)key_buffer ), - attributes, data, data_length, bits ); - - if( status != PSA_SUCCESS ) - return( status ); - - if( (*bits) > PSA_MAX_KEY_BITS ) - return( PSA_ERROR_NOT_SUPPORTED ); - - return( PSA_SUCCESS ); - } -#endif /* PSA_CRYPTO_SE_C */ - - switch( location ) - { - case PSA_KEY_LOCATION_LOCAL_STORAGE: - /* Key is stored in the slot in export representation, so - * cycle through all known transparent accelerators */ -#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) -#if defined(PSA_CRYPTO_DRIVER_TEST) - status = test_transparent_import_key( attributes, - data, data_length, - key_buffer, key_buffer_size, - key_buffer_length, bits ); - /* Declared with fallback == true */ - if( status != PSA_ERROR_NOT_SUPPORTED ) - return( status ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ -#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */ - /* Fell through, meaning no accelerator supports this operation */ - return( psa_import_key_into_slot( attributes, - data, data_length, - key_buffer, key_buffer_size, - key_buffer_length, bits ) ); - - default: - /* Importing a key with external storage in not yet supported. - * Return in error indicating that the lifetime is not valid. */ - (void)status; - return( PSA_ERROR_INVALID_ARGUMENT ); - } - -} - -psa_status_t psa_driver_wrapper_export_key( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ) - -{ - psa_status_t status = PSA_ERROR_INVALID_ARGUMENT; - psa_key_location_t location = PSA_KEY_LIFETIME_GET_LOCATION( - psa_get_key_lifetime( attributes ) ); - - /* Try dynamically-registered SE interface first */ -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - const psa_drv_se_t *drv; - psa_drv_se_context_t *drv_context; - - if( psa_get_se_driver( attributes->core.lifetime, &drv, &drv_context ) ) - { - if( ( drv->key_management == NULL ) || - ( drv->key_management->p_export == NULL ) ) - { - return( PSA_ERROR_NOT_SUPPORTED ); - } - - return( drv->key_management->p_export( - drv_context, - *( (psa_key_slot_number_t *)key_buffer ), - data, data_size, data_length ) ); - } -#endif /* PSA_CRYPTO_SE_C */ - - switch( location ) - { - case PSA_KEY_LOCATION_LOCAL_STORAGE: - return( psa_export_key_internal( attributes, - key_buffer, - key_buffer_size, - data, - data_size, - data_length ) ); - - /* Add cases for opaque driver here */ -#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_TEST_DRIVER_LIFETIME: - return( test_opaque_export_key( attributes, - key_buffer, - key_buffer_size, - data, - data_size, - data_length ) ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ -#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */ - default: - /* Key is declared with a lifetime not known to us */ - return( status ); - } -} - -psa_status_t psa_driver_wrapper_export_public_key( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ) - -{ - psa_status_t status = PSA_ERROR_INVALID_ARGUMENT; - psa_key_location_t location = PSA_KEY_LIFETIME_GET_LOCATION( - psa_get_key_lifetime( attributes ) ); - - /* Try dynamically-registered SE interface first */ -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - const psa_drv_se_t *drv; - psa_drv_se_context_t *drv_context; - - if( psa_get_se_driver( attributes->core.lifetime, &drv, &drv_context ) ) - { - if( ( drv->key_management == NULL ) || - ( drv->key_management->p_export_public == NULL ) ) - { - return( PSA_ERROR_NOT_SUPPORTED ); - } - - return( drv->key_management->p_export_public( - drv_context, - *( (psa_key_slot_number_t *)key_buffer ), - data, data_size, data_length ) ); - } -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - - switch( location ) - { - case PSA_KEY_LOCATION_LOCAL_STORAGE: - /* Key is stored in the slot in export representation, so - * cycle through all known transparent accelerators */ -#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) -#if defined(PSA_CRYPTO_DRIVER_TEST) - status = test_transparent_export_public_key( attributes, - key_buffer, - key_buffer_size, - data, - data_size, - data_length ); - /* Declared with fallback == true */ - if( status != PSA_ERROR_NOT_SUPPORTED ) - return( status ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ -#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */ - /* Fell through, meaning no accelerator supports this operation */ - return( psa_export_public_key_internal( attributes, - key_buffer, - key_buffer_size, - data, - data_size, - data_length ) ); - - /* Add cases for opaque driver here */ -#if defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_TEST_DRIVER_LIFETIME: - return( test_opaque_export_public_key( attributes, - key_buffer, - key_buffer_size, - data, - data_size, - data_length ) ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ -#endif /* PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT */ - default: - /* Key is declared with a lifetime not known to us */ - return( status ); - } -} - -/* - * Cipher functions - */ -psa_status_t psa_driver_wrapper_cipher_encrypt( - psa_key_slot_t *slot, - psa_algorithm_t alg, - const uint8_t *input, - size_t input_length, - uint8_t *output, - size_t output_size, - size_t *output_length ) -{ -#if defined(PSA_CRYPTO_DRIVER_PRESENT) && defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) - psa_status_t status = PSA_ERROR_INVALID_ARGUMENT; - psa_key_location_t location = PSA_KEY_LIFETIME_GET_LOCATION(slot->attr.lifetime); - psa_key_attributes_t attributes = { - .core = slot->attr - }; - - switch( location ) - { - case PSA_KEY_LOCATION_LOCAL_STORAGE: - /* Key is stored in the slot in export representation, so - * cycle through all known transparent accelerators */ -#if defined(PSA_CRYPTO_DRIVER_TEST) - status = test_transparent_cipher_encrypt( &attributes, - slot->key.data, - slot->key.bytes, - alg, - input, - input_length, - output, - output_size, - output_length ); - /* Declared with fallback == true */ - if( status != PSA_ERROR_NOT_SUPPORTED ) - return( status ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ - /* Fell through, meaning no accelerator supports this operation */ - return( PSA_ERROR_NOT_SUPPORTED ); - /* Add cases for opaque driver here */ -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_TEST_DRIVER_LIFETIME: - return( test_opaque_cipher_encrypt( &attributes, - slot->key.data, - slot->key.bytes, - alg, - input, - input_length, - output, - output_size, - output_length ) ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ - default: - /* Key is declared with a lifetime not known to us */ - return( status ); - } -#else /* PSA_CRYPTO_DRIVER_PRESENT */ - (void) slot; - (void) alg; - (void) input; - (void) input_length; - (void) output; - (void) output_size; - (void) output_length; - - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* PSA_CRYPTO_DRIVER_PRESENT */ -} - -psa_status_t psa_driver_wrapper_cipher_decrypt( - psa_key_slot_t *slot, - psa_algorithm_t alg, - const uint8_t *input, - size_t input_length, - uint8_t *output, - size_t output_size, - size_t *output_length ) -{ -#if defined(PSA_CRYPTO_DRIVER_PRESENT) && defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) - psa_status_t status = PSA_ERROR_INVALID_ARGUMENT; - psa_key_location_t location = PSA_KEY_LIFETIME_GET_LOCATION(slot->attr.lifetime); - psa_key_attributes_t attributes = { - .core = slot->attr - }; - - switch( location ) - { - case PSA_KEY_LOCATION_LOCAL_STORAGE: - /* Key is stored in the slot in export representation, so - * cycle through all known transparent accelerators */ -#if defined(PSA_CRYPTO_DRIVER_TEST) - status = test_transparent_cipher_decrypt( &attributes, - slot->key.data, - slot->key.bytes, - alg, - input, - input_length, - output, - output_size, - output_length ); - /* Declared with fallback == true */ - if( status != PSA_ERROR_NOT_SUPPORTED ) - return( status ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ - /* Fell through, meaning no accelerator supports this operation */ - return( PSA_ERROR_NOT_SUPPORTED ); - /* Add cases for opaque driver here */ -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_TEST_DRIVER_LIFETIME: - return( test_opaque_cipher_decrypt( &attributes, - slot->key.data, - slot->key.bytes, - alg, - input, - input_length, - output, - output_size, - output_length ) ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ - default: - /* Key is declared with a lifetime not known to us */ - return( status ); - } -#else /* PSA_CRYPTO_DRIVER_PRESENT */ - (void) slot; - (void) alg; - (void) input; - (void) input_length; - (void) output; - (void) output_size; - (void) output_length; - - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* PSA_CRYPTO_DRIVER_PRESENT */ -} - -psa_status_t psa_driver_wrapper_cipher_encrypt_setup( - psa_operation_driver_context_t *operation, - psa_key_slot_t *slot, - psa_algorithm_t alg ) -{ -#if defined(PSA_CRYPTO_DRIVER_PRESENT) && defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) - psa_status_t status = PSA_ERROR_INVALID_ARGUMENT; - psa_key_location_t location = PSA_KEY_LIFETIME_GET_LOCATION(slot->attr.lifetime); - psa_key_attributes_t attributes = { - .core = slot->attr - }; - - switch( location ) - { - case PSA_KEY_LOCATION_LOCAL_STORAGE: - /* Key is stored in the slot in export representation, so - * cycle through all known transparent accelerators */ -#if defined(PSA_CRYPTO_DRIVER_TEST) - operation->ctx = mbedtls_calloc( 1, sizeof(test_transparent_cipher_operation_t) ); - if( operation->ctx == NULL ) - return PSA_ERROR_INSUFFICIENT_MEMORY; - - status = test_transparent_cipher_encrypt_setup( operation->ctx, - &attributes, - slot->key.data, - slot->key.bytes, - alg ); - /* Declared with fallback == true */ - if( status == PSA_SUCCESS ) - operation->id = PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID; - else - { - mbedtls_platform_zeroize( - operation->ctx, - sizeof( test_transparent_cipher_operation_t ) ); - mbedtls_free( operation->ctx ); - operation->ctx = NULL; - } - - return( status ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ - /* Fell through, meaning no accelerator supports this operation */ - return( PSA_ERROR_NOT_SUPPORTED ); - /* Add cases for opaque driver here */ -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_TEST_DRIVER_LIFETIME: - operation->ctx = mbedtls_calloc( 1, sizeof(test_opaque_cipher_operation_t) ); - if( operation->ctx == NULL ) - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - - status = test_opaque_cipher_encrypt_setup( operation->ctx, - &attributes, - slot->key.data, - slot->key.bytes, - alg ); - if( status == PSA_SUCCESS ) - operation->id = PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID; - else - { - mbedtls_platform_zeroize( - operation->ctx, - sizeof( test_opaque_cipher_operation_t ) ); - mbedtls_free( operation->ctx ); - operation->ctx = NULL; - } - - return( status ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ - default: - /* Key is declared with a lifetime not known to us */ - return( PSA_ERROR_NOT_SUPPORTED ); - } -#else /* PSA_CRYPTO_DRIVER_PRESENT */ - (void)slot; - (void)alg; - (void)operation; - - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* PSA_CRYPTO_DRIVER_PRESENT */ -} - -psa_status_t psa_driver_wrapper_cipher_decrypt_setup( - psa_operation_driver_context_t *operation, - psa_key_slot_t *slot, - psa_algorithm_t alg ) -{ -#if defined(PSA_CRYPTO_DRIVER_PRESENT) && defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) - psa_status_t status = PSA_ERROR_INVALID_ARGUMENT; - psa_key_location_t location = PSA_KEY_LIFETIME_GET_LOCATION(slot->attr.lifetime); - psa_key_attributes_t attributes = { - .core = slot->attr - }; - - switch( location ) - { - case PSA_KEY_LOCATION_LOCAL_STORAGE: - /* Key is stored in the slot in export representation, so - * cycle through all known transparent accelerators */ -#if defined(PSA_CRYPTO_DRIVER_TEST) - operation->ctx = mbedtls_calloc( 1, sizeof(test_transparent_cipher_operation_t) ); - if( operation->ctx == NULL ) - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - - status = test_transparent_cipher_decrypt_setup( operation->ctx, - &attributes, - slot->key.data, - slot->key.bytes, - alg ); - /* Declared with fallback == true */ - if( status == PSA_SUCCESS ) - operation->id = PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID; - else - { - mbedtls_platform_zeroize( - operation->ctx, - sizeof( test_transparent_cipher_operation_t ) ); - mbedtls_free( operation->ctx ); - operation->ctx = NULL; - } - - return( status ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ - /* Fell through, meaning no accelerator supports this operation */ - return( PSA_ERROR_NOT_SUPPORTED ); - /* Add cases for opaque driver here */ -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_TEST_DRIVER_LIFETIME: - operation->ctx = mbedtls_calloc( 1, sizeof(test_opaque_cipher_operation_t) ); - if( operation->ctx == NULL ) - return PSA_ERROR_INSUFFICIENT_MEMORY; - - status = test_opaque_cipher_decrypt_setup( operation->ctx, - &attributes, - slot->key.data, - slot->key.bytes, - alg ); - if( status == PSA_SUCCESS ) - operation->id = PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID; - else - { - mbedtls_platform_zeroize( - operation->ctx, - sizeof( test_opaque_cipher_operation_t ) ); - mbedtls_free( operation->ctx ); - operation->ctx = NULL; - } - - return( status ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ - default: - /* Key is declared with a lifetime not known to us */ - return( PSA_ERROR_NOT_SUPPORTED ); - } -#else /* PSA_CRYPTO_DRIVER_PRESENT */ - (void)slot; - (void)alg; - (void)operation; - - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* PSA_CRYPTO_DRIVER_PRESENT */ -} - -psa_status_t psa_driver_wrapper_cipher_generate_iv( - psa_operation_driver_context_t *operation, - uint8_t *iv, - size_t iv_size, - size_t *iv_length ) -{ -#if defined(PSA_CRYPTO_DRIVER_PRESENT) && defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) - switch( operation->id ) - { -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID: - return( test_transparent_cipher_generate_iv( operation->ctx, - iv, - iv_size, - iv_length ) ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID: - return( test_opaque_cipher_generate_iv( operation->ctx, - iv, - iv_size, - iv_length ) ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ - default: - /* Key is attached to a driver not known to us */ - return( PSA_ERROR_BAD_STATE ); - } -#else /* PSA_CRYPTO_DRIVER_PRESENT */ - (void) operation; - (void) iv; - (void) iv_size; - (void) iv_length; - - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* PSA_CRYPTO_DRIVER_PRESENT */ -} - -psa_status_t psa_driver_wrapper_cipher_set_iv( - psa_operation_driver_context_t *operation, - const uint8_t *iv, - size_t iv_length ) -{ -#if defined(PSA_CRYPTO_DRIVER_PRESENT) && defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) - switch( operation->id ) - { -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID: - return( test_transparent_cipher_set_iv( operation->ctx, - iv, - iv_length ) ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID: - return( test_opaque_cipher_set_iv( operation->ctx, - iv, - iv_length ) ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ - default: - /* Key is attached to a driver not known to us */ - return( PSA_ERROR_BAD_STATE ); - } -#else /* PSA_CRYPTO_DRIVER_PRESENT */ - (void) operation; - (void) iv; - (void) iv_length; - - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* PSA_CRYPTO_DRIVER_PRESENT */ -} - -psa_status_t psa_driver_wrapper_cipher_update( - psa_operation_driver_context_t *operation, - const uint8_t *input, - size_t input_length, - uint8_t *output, - size_t output_size, - size_t *output_length ) -{ -#if defined(PSA_CRYPTO_DRIVER_PRESENT) && defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) - switch( operation->id ) - { -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID: - return( test_transparent_cipher_update( operation->ctx, - input, - input_length, - output, - output_size, - output_length ) ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID: - return( test_opaque_cipher_update( operation->ctx, - input, - input_length, - output, - output_size, - output_length ) ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ - default: - /* Key is attached to a driver not known to us */ - return( PSA_ERROR_BAD_STATE ); - } -#else /* PSA_CRYPTO_DRIVER_PRESENT */ - (void) operation; - (void) input; - (void) input_length; - (void) output; - (void) output_length; - (void) output_size; - - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* PSA_CRYPTO_DRIVER_PRESENT */ -} - -psa_status_t psa_driver_wrapper_cipher_finish( - psa_operation_driver_context_t *operation, - uint8_t *output, - size_t output_size, - size_t *output_length ) -{ -#if defined(PSA_CRYPTO_DRIVER_PRESENT) && defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) - switch( operation->id ) - { -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID: - return( test_transparent_cipher_finish( operation->ctx, - output, - output_size, - output_length ) ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID: - return( test_opaque_cipher_finish( operation->ctx, - output, - output_size, - output_length ) ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ - default: - /* Key is attached to a driver not known to us */ - return( PSA_ERROR_BAD_STATE ); - } -#else /* PSA_CRYPTO_DRIVER_PRESENT */ - (void) operation; - (void) output; - (void) output_size; - (void) output_length; - - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* PSA_CRYPTO_DRIVER_PRESENT */ -} - -psa_status_t psa_driver_wrapper_cipher_abort( - psa_operation_driver_context_t *operation ) -{ -#if defined(PSA_CRYPTO_DRIVER_PRESENT) && defined(PSA_CRYPTO_ACCELERATOR_DRIVER_PRESENT) - psa_status_t status = PSA_ERROR_INVALID_ARGUMENT; - - /* The object has (apparently) been initialized but it is not in use. It's - * ok to call abort on such an object, and there's nothing to do. */ - if( operation->ctx == NULL && operation->id == 0 ) - return( PSA_SUCCESS ); - - switch( operation->id ) - { -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_TRANSPARENT_TEST_DRIVER_ID: - status = test_transparent_cipher_abort( operation->ctx ); - mbedtls_platform_zeroize( - operation->ctx, - sizeof( test_transparent_cipher_operation_t ) ); - mbedtls_free( operation->ctx ); - operation->ctx = NULL; - operation->id = 0; - - return( status ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ -#if defined(PSA_CRYPTO_DRIVER_TEST) - case PSA_CRYPTO_OPAQUE_TEST_DRIVER_ID: - status = test_opaque_cipher_abort( operation->ctx ); - mbedtls_platform_zeroize( - operation->ctx, - sizeof( test_opaque_cipher_operation_t ) ); - mbedtls_free( operation->ctx ); - operation->ctx = NULL; - operation->id = 0; - - return( status ); -#endif /* PSA_CRYPTO_DRIVER_TEST */ - default: - /* Operation is attached to a driver not known to us */ - return( PSA_ERROR_BAD_STATE ); - } -#else /* PSA_CRYPTO_DRIVER_PRESENT */ - (void)operation; - - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* PSA_CRYPTO_DRIVER_PRESENT */ -} - -/* End of automatically generated file. */ diff --git a/third_party/mbedtls/psa_crypto_driver_wrappers.h b/third_party/mbedtls/psa_crypto_driver_wrappers.h deleted file mode 100644 index 2da32f094..000000000 --- a/third_party/mbedtls/psa_crypto_driver_wrappers.h +++ /dev/null @@ -1,135 +0,0 @@ -/* clang-format off */ - -/* - * Function signatures for functionality that can be provided by - * cryptographic accelerators. - * Warning: This file will be auto-generated in the future. - */ -/* Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef PSA_CRYPTO_DRIVER_WRAPPERS_H -#define PSA_CRYPTO_DRIVER_WRAPPERS_H - -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/psa_crypto_core.h" -#include "third_party/mbedtls/crypto_driver_common.h" - -/* - * Signature functions - */ -psa_status_t psa_driver_wrapper_sign_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - uint8_t *signature, size_t signature_size, size_t *signature_length ); - -psa_status_t psa_driver_wrapper_verify_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - const uint8_t *signature, size_t signature_length ); - -/* - * Key handling functions - */ - -psa_status_t psa_driver_wrapper_import_key( - const psa_key_attributes_t *attributes, - const uint8_t *data, size_t data_length, - uint8_t *key_buffer, size_t key_buffer_size, - size_t *key_buffer_length, size_t *bits ); - -psa_status_t psa_driver_wrapper_export_key( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ); - -psa_status_t psa_driver_wrapper_export_public_key( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ); - -psa_status_t psa_driver_wrapper_get_key_buffer_size( - const psa_key_attributes_t *attributes, - size_t *key_buffer_size ); - -psa_status_t psa_driver_wrapper_generate_key( - const psa_key_attributes_t *attributes, - uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length ); - -/* - * Cipher functions - */ -psa_status_t psa_driver_wrapper_cipher_encrypt( - psa_key_slot_t *slot, - psa_algorithm_t alg, - const uint8_t *input, - size_t input_length, - uint8_t *output, - size_t output_size, - size_t *output_length ); - -psa_status_t psa_driver_wrapper_cipher_decrypt( - psa_key_slot_t *slot, - psa_algorithm_t alg, - const uint8_t *input, - size_t input_length, - uint8_t *output, - size_t output_size, - size_t *output_length ); - -psa_status_t psa_driver_wrapper_cipher_encrypt_setup( - psa_operation_driver_context_t *operation, - psa_key_slot_t *slot, - psa_algorithm_t alg ); - -psa_status_t psa_driver_wrapper_cipher_decrypt_setup( - psa_operation_driver_context_t *operation, - psa_key_slot_t *slot, - psa_algorithm_t alg ); - -psa_status_t psa_driver_wrapper_cipher_generate_iv( - psa_operation_driver_context_t *operation, - uint8_t *iv, - size_t iv_size, - size_t *iv_length ); - -psa_status_t psa_driver_wrapper_cipher_set_iv( - psa_operation_driver_context_t *operation, - const uint8_t *iv, - size_t iv_length ); - -psa_status_t psa_driver_wrapper_cipher_update( - psa_operation_driver_context_t *operation, - const uint8_t *input, - size_t input_length, - uint8_t *output, - size_t output_size, - size_t *output_length ); - -psa_status_t psa_driver_wrapper_cipher_finish( - psa_operation_driver_context_t *operation, - uint8_t *output, - size_t output_size, - size_t *output_length ); - -psa_status_t psa_driver_wrapper_cipher_abort( - psa_operation_driver_context_t *operation ); - -#endif /* PSA_CRYPTO_DRIVER_WRAPPERS_H */ - -/* End of automatically generated file. */ diff --git a/third_party/mbedtls/psa_crypto_ecp.c b/third_party/mbedtls/psa_crypto_ecp.c deleted file mode 100644 index b69b39d18..000000000 --- a/third_party/mbedtls/psa_crypto_ecp.c +++ /dev/null @@ -1,667 +0,0 @@ -/* clang-format off */ - -/* - * PSA ECP layer on top of Mbed TLS crypto - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_PSA_CRYPTO_C) - -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/psa_crypto_core.h" -#include "third_party/mbedtls/psa_crypto_ecp.h" -#include "third_party/mbedtls/psa_crypto_random_impl.h" - -#include "third_party/mbedtls/platform.h" -#if !defined(MBEDTLS_PLATFORM_C) -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - -#include "third_party/mbedtls/ecdsa.h" -#include "third_party/mbedtls/ecp.h" -#include "third_party/mbedtls/error.h" - -#if ( defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || \ - ( defined(PSA_CRYPTO_DRIVER_TEST) && \ - defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR) ) ) -#define BUILTIN_KEY_TYPE_ECC_KEY_PAIR 1 -#endif - -#if ( defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY) || \ - ( defined(PSA_CRYPTO_DRIVER_TEST) && \ - defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_PUBLIC_KEY) ) ) -#define BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY 1 -#endif - -#if ( defined(MBEDTLS_PSA_BUILTIN_ALG_ECDSA) || \ - ( defined(PSA_CRYPTO_DRIVER_TEST) && \ - defined(MBEDTLS_PSA_ACCEL_ALG_ECDSA) && \ - defined(MBEDTLS_ECDSA_C) ) ) -#define BUILTIN_ALG_ECDSA 1 -#endif - -#if ( defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA) || \ - ( defined(PSA_CRYPTO_DRIVER_TEST) && \ - defined(MBEDTLS_PSA_ACCEL_ALG_DETERMINISTIC_ECDSA) && \ - defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECDSA_DETERMINISTIC) ) ) -#define BUILTIN_ALG_DETERMINISTIC_ECDSA 1 -#endif - -#if defined(BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || \ - defined(BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY) || \ - defined(BUILTIN_ALG_ECDSA) || \ - defined(BUILTIN_ALG_DETERMINISTIC_ECDSA) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_ECDH) -psa_status_t mbedtls_psa_ecp_load_representation( - psa_key_type_t type, size_t curve_bits, - const uint8_t *data, size_t data_length, - mbedtls_ecp_keypair **p_ecp ) -{ - mbedtls_ecp_group_id grp_id = MBEDTLS_ECP_DP_NONE; - psa_status_t status; - mbedtls_ecp_keypair *ecp = NULL; - size_t curve_bytes = data_length; - int explicit_bits = ( curve_bits != 0 ); - - if( PSA_KEY_TYPE_IS_PUBLIC_KEY( type ) && - PSA_KEY_TYPE_ECC_GET_FAMILY( type ) != PSA_ECC_FAMILY_MONTGOMERY ) - { - /* A Weierstrass public key is represented as: - * - The byte 0x04; - * - `x_P` as a `ceiling(m/8)`-byte string, big-endian; - * - `y_P` as a `ceiling(m/8)`-byte string, big-endian. - * So its data length is 2m+1 where m is the curve size in bits. - */ - if( ( data_length & 1 ) == 0 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - curve_bytes = data_length / 2; - - /* Montgomery public keys are represented in compressed format, meaning - * their curve_bytes is equal to the amount of input. */ - - /* Private keys are represented in uncompressed private random integer - * format, meaning their curve_bytes is equal to the amount of input. */ - } - - if( explicit_bits ) - { - /* With an explicit bit-size, the data must have the matching length. */ - if( curve_bytes != PSA_BITS_TO_BYTES( curve_bits ) ) - return( PSA_ERROR_INVALID_ARGUMENT ); - } - else - { - /* We need to infer the bit-size from the data. Since the only - * information we have is the length in bytes, the value of curve_bits - * at this stage is rounded up to the nearest multiple of 8. */ - curve_bits = PSA_BYTES_TO_BITS( curve_bytes ); - } - - /* Allocate and initialize a key representation. */ - ecp = mbedtls_calloc( 1, sizeof( mbedtls_ecp_keypair ) ); - if( ecp == NULL ) - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - mbedtls_ecp_keypair_init( ecp ); - - /* Load the group. */ - grp_id = mbedtls_ecc_group_of_psa( PSA_KEY_TYPE_ECC_GET_FAMILY( type ), - curve_bits, !explicit_bits ); - if( grp_id == MBEDTLS_ECP_DP_NONE ) - { - /* We can't distinguish between a nonsensical family/size combination - * (which would warrant PSA_ERROR_INVALID_ARGUMENT) and a - * well-regarded curve that Mbed TLS just doesn't know about (which - * would warrant PSA_ERROR_NOT_SUPPORTED). For uniformity with how - * curves that Mbed TLS knows about but for which support is disabled - * at build time, return NOT_SUPPORTED. */ - status = PSA_ERROR_NOT_SUPPORTED; - goto exit; - } - - status = mbedtls_to_psa_error( - mbedtls_ecp_group_load( &ecp->grp, grp_id ) ); - if( status != PSA_SUCCESS ) - goto exit; - - /* Load the key material. */ - if( PSA_KEY_TYPE_IS_PUBLIC_KEY( type ) ) - { - /* Load the public value. */ - status = mbedtls_to_psa_error( - mbedtls_ecp_point_read_binary( &ecp->grp, &ecp->Q, - data, - data_length ) ); - if( status != PSA_SUCCESS ) - goto exit; - - /* Check that the point is on the curve. */ - status = mbedtls_to_psa_error( - mbedtls_ecp_check_pubkey( &ecp->grp, &ecp->Q ) ); - if( status != PSA_SUCCESS ) - goto exit; - } - else - { - /* Load and validate the secret value. */ - status = mbedtls_to_psa_error( - mbedtls_ecp_read_key( ecp->grp.id, - ecp, - data, - data_length ) ); - if( status != PSA_SUCCESS ) - goto exit; - } - - *p_ecp = ecp; -exit: - if( status != PSA_SUCCESS ) - { - mbedtls_ecp_keypair_free( ecp ); - mbedtls_free( ecp ); - } - - return( status ); -} -#endif /* defined(BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || - * defined(BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY) || - * defined(BUILTIN_ALG_ECDSA) || - * defined(BUILTIN_ALG_DETERMINISTIC_ECDSA) || - * defined(MBEDTLS_PSA_BUILTIN_ALG_ECDH) */ - -#if defined(BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || \ - defined(BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY) - -static psa_status_t ecp_import_key( - const psa_key_attributes_t *attributes, - const uint8_t *data, size_t data_length, - uint8_t *key_buffer, size_t key_buffer_size, - size_t *key_buffer_length, size_t *bits ) -{ - psa_status_t status; - mbedtls_ecp_keypair *ecp = NULL; - - /* Parse input */ - status = mbedtls_psa_ecp_load_representation( attributes->core.type, - attributes->core.bits, - data, - data_length, - &ecp ); - if( status != PSA_SUCCESS ) - goto exit; - - if( PSA_KEY_TYPE_ECC_GET_FAMILY( attributes->core.type ) == - PSA_ECC_FAMILY_MONTGOMERY ) - *bits = ecp->grp.nbits + 1; - else - *bits = ecp->grp.nbits; - - /* Re-export the data to PSA export format. There is currently no support - * for other input formats then the export format, so this is a 1-1 - * copy operation. */ - status = mbedtls_psa_ecp_export_key( attributes->core.type, - ecp, - key_buffer, - key_buffer_size, - key_buffer_length ); -exit: - /* Always free the PK object (will also free contained ECP context) */ - mbedtls_ecp_keypair_free( ecp ); - mbedtls_free( ecp ); - - return( status ); -} - -psa_status_t mbedtls_psa_ecp_export_key( psa_key_type_t type, - mbedtls_ecp_keypair *ecp, - uint8_t *data, - size_t data_size, - size_t *data_length ) -{ - psa_status_t status; - - if( PSA_KEY_TYPE_IS_PUBLIC_KEY( type ) ) - { - /* Check whether the public part is loaded */ - if( mbedtls_ecp_is_zero( &ecp->Q ) ) - { - /* Calculate the public key */ - status = mbedtls_to_psa_error( - mbedtls_ecp_mul( &ecp->grp, &ecp->Q, &ecp->d, &ecp->grp.G, - mbedtls_psa_get_random, - MBEDTLS_PSA_RANDOM_STATE ) ); - if( status != PSA_SUCCESS ) - return( status ); - } - - status = mbedtls_to_psa_error( - mbedtls_ecp_point_write_binary( &ecp->grp, &ecp->Q, - MBEDTLS_ECP_PF_UNCOMPRESSED, - data_length, - data, - data_size ) ); - if( status != PSA_SUCCESS ) - memset( data, 0, data_size ); - - return( status ); - } - else - { - if( data_size < PSA_BITS_TO_BYTES( ecp->grp.nbits ) ) - return( PSA_ERROR_BUFFER_TOO_SMALL ); - - status = mbedtls_to_psa_error( - mbedtls_ecp_write_key( ecp, - data, - PSA_BITS_TO_BYTES( ecp->grp.nbits ) ) ); - if( status == PSA_SUCCESS ) - *data_length = PSA_BITS_TO_BYTES( ecp->grp.nbits ); - else - memset( data, 0, data_size ); - - return( status ); - } -} - -static psa_status_t ecp_export_public_key( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - mbedtls_ecp_keypair *ecp = NULL; - - status = mbedtls_psa_ecp_load_representation( - attributes->core.type, attributes->core.bits, - key_buffer, key_buffer_size, &ecp ); - if( status != PSA_SUCCESS ) - return( status ); - - status = mbedtls_psa_ecp_export_key( - PSA_KEY_TYPE_ECC_PUBLIC_KEY( - PSA_KEY_TYPE_ECC_GET_FAMILY( attributes->core.type ) ), - ecp, data, data_size, data_length ); - - mbedtls_ecp_keypair_free( ecp ); - mbedtls_free( ecp ); - - return( status ); -} -#endif /* defined(BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || - * defined(BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY) */ - -#if defined(BUILTIN_KEY_TYPE_ECC_KEY_PAIR) -static psa_status_t ecp_generate_key( - const psa_key_attributes_t *attributes, - uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - - psa_ecc_family_t curve = PSA_KEY_TYPE_ECC_GET_FAMILY( - attributes->core.type ); - mbedtls_ecp_group_id grp_id = - mbedtls_ecc_group_of_psa( curve, attributes->core.bits, 0 ); - - const mbedtls_ecp_curve_info *curve_info = - mbedtls_ecp_curve_info_from_grp_id( grp_id ); - mbedtls_ecp_keypair ecp; - - if( attributes->domain_parameters_size != 0 ) - return( PSA_ERROR_NOT_SUPPORTED ); - - if( grp_id == MBEDTLS_ECP_DP_NONE || curve_info == NULL ) - return( PSA_ERROR_NOT_SUPPORTED ); - - mbedtls_ecp_keypair_init( &ecp ); - ret = mbedtls_ecp_gen_key( grp_id, &ecp, - mbedtls_psa_get_random, - MBEDTLS_PSA_RANDOM_STATE ); - if( ret != 0 ) - { - mbedtls_ecp_keypair_free( &ecp ); - return( mbedtls_to_psa_error( ret ) ); - } - - status = mbedtls_to_psa_error( - mbedtls_ecp_write_key( &ecp, key_buffer, key_buffer_size ) ); - - mbedtls_ecp_keypair_free( &ecp ); - - if( status == PSA_SUCCESS ) - *key_buffer_length = key_buffer_size; - - return( status ); -} -#endif /* defined(BUILTIN_KEY_TYPE_ECC_KEY_PAIR) */ - -/****************************************************************/ -/* ECDSA sign/verify */ -/****************************************************************/ - -#if defined(BUILTIN_ALG_ECDSA) || \ - defined(BUILTIN_ALG_DETERMINISTIC_ECDSA) -static psa_status_t ecdsa_sign_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - uint8_t *signature, size_t signature_size, size_t *signature_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - mbedtls_ecp_keypair *ecp = NULL; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - size_t curve_bytes; - mbedtls_mpi r, s; - - status = mbedtls_psa_ecp_load_representation( attributes->core.type, - attributes->core.bits, - key_buffer, - key_buffer_size, - &ecp ); - if( status != PSA_SUCCESS ) - return( status ); - - curve_bytes = PSA_BITS_TO_BYTES( ecp->grp.pbits ); - mbedtls_mpi_init( &r ); - mbedtls_mpi_init( &s ); - - if( signature_size < 2 * curve_bytes ) - { - ret = MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL; - goto cleanup; - } - - if( PSA_ALG_ECDSA_IS_DETERMINISTIC( alg ) ) - { -#if defined(BUILTIN_ALG_DETERMINISTIC_ECDSA) - psa_algorithm_t hash_alg = PSA_ALG_SIGN_GET_HASH( alg ); - const mbedtls_md_info_t *md_info = mbedtls_md_info_from_psa( hash_alg ); - mbedtls_md_type_t md_alg = mbedtls_md_get_type( md_info ); - MBEDTLS_MPI_CHK( mbedtls_ecdsa_sign_det_ext( - &ecp->grp, &r, &s, - &ecp->d, hash, - hash_length, md_alg, - mbedtls_psa_get_random, - MBEDTLS_PSA_RANDOM_STATE ) ); -#else - ret = MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE; - goto cleanup; -#endif /* defined(BUILTIN_ALG_DETERMINISTIC_ECDSA) */ - } - else - { - (void) alg; - MBEDTLS_MPI_CHK( mbedtls_ecdsa_sign( &ecp->grp, &r, &s, &ecp->d, - hash, hash_length, - mbedtls_psa_get_random, - MBEDTLS_PSA_RANDOM_STATE ) ); - } - - MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &r, - signature, - curve_bytes ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &s, - signature + curve_bytes, - curve_bytes ) ); -cleanup: - mbedtls_mpi_free( &r ); - mbedtls_mpi_free( &s ); - if( ret == 0 ) - *signature_length = 2 * curve_bytes; - - mbedtls_ecp_keypair_free( ecp ); - mbedtls_free( ecp ); - - return( mbedtls_to_psa_error( ret ) ); -} - -static psa_status_t ecdsa_verify_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - const uint8_t *signature, size_t signature_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - mbedtls_ecp_keypair *ecp = NULL; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - size_t curve_bytes; - mbedtls_mpi r, s; - - (void)alg; - - status = mbedtls_psa_ecp_load_representation( attributes->core.type, - attributes->core.bits, - key_buffer, - key_buffer_size, - &ecp ); - if( status != PSA_SUCCESS ) - return( status ); - - curve_bytes = PSA_BITS_TO_BYTES( ecp->grp.pbits ); - mbedtls_mpi_init( &r ); - mbedtls_mpi_init( &s ); - - if( signature_length != 2 * curve_bytes ) - { - ret = MBEDTLS_ERR_ECP_VERIFY_FAILED; - goto cleanup; - } - - MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &r, - signature, - curve_bytes ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &s, - signature + curve_bytes, - curve_bytes ) ); - - /* Check whether the public part is loaded. If not, load it. */ - if( mbedtls_ecp_is_zero( &ecp->Q ) ) - { - MBEDTLS_MPI_CHK( - mbedtls_ecp_mul( &ecp->grp, &ecp->Q, &ecp->d, &ecp->grp.G, - mbedtls_psa_get_random, MBEDTLS_PSA_RANDOM_STATE ) ); - } - - ret = mbedtls_ecdsa_verify( &ecp->grp, hash, hash_length, - &ecp->Q, &r, &s ); - -cleanup: - mbedtls_mpi_free( &r ); - mbedtls_mpi_free( &s ); - mbedtls_ecp_keypair_free( ecp ); - mbedtls_free( ecp ); - - return( mbedtls_to_psa_error( ret ) ); -} - -#endif /* defined(BUILTIN_ALG_ECDSA) || \ - * defined(BUILTIN_ALG_DETERMINISTIC_ECDSA) */ - -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || \ - defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY) - -psa_status_t mbedtls_psa_ecp_import_key( - const psa_key_attributes_t *attributes, - const uint8_t *data, size_t data_length, - uint8_t *key_buffer, size_t key_buffer_size, - size_t *key_buffer_length, size_t *bits ) -{ - return( ecp_import_key( attributes, data, data_length, - key_buffer, key_buffer_size, - key_buffer_length, bits ) ); -} - -psa_status_t mbedtls_psa_ecp_export_public_key( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ) -{ - return( ecp_export_public_key( attributes, key_buffer, key_buffer_size, - data, data_size, data_length ) ); -} - -#endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || - * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY) */ - -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) -psa_status_t mbedtls_psa_ecp_generate_key( - const psa_key_attributes_t *attributes, - uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length ) -{ - return( ecp_generate_key( attributes, key_buffer, key_buffer_size, - key_buffer_length ) ); -} -#endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) */ - - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_ECDSA) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA) - -psa_status_t mbedtls_psa_ecdsa_sign_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - uint8_t *signature, size_t signature_size, size_t *signature_length ) -{ - - return( ecdsa_sign_hash( attributes, - key_buffer, key_buffer_size, - alg, hash, hash_length, - signature, signature_size, signature_length ) ); -} - -psa_status_t mbedtls_psa_ecdsa_verify_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - const uint8_t *signature, size_t signature_length ) -{ - return( ecdsa_verify_hash( attributes, - key_buffer, key_buffer_size, - alg, hash, hash_length, - signature, signature_length ) ); -} - -#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_ECDSA) || - * defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA) */ - -/* - * BEYOND THIS POINT, TEST DRIVER ENTRY POINTS ONLY. - */ - -#if defined(PSA_CRYPTO_DRIVER_TEST) - -#if defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR) || \ - defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_PUBLIC_KEY) - -psa_status_t mbedtls_transparent_test_driver_ecp_import_key( - const psa_key_attributes_t *attributes, - const uint8_t *data, size_t data_length, - uint8_t *key_buffer, size_t key_buffer_size, - size_t *key_buffer_length, size_t *bits ) -{ - return( ecp_import_key( attributes, data, data_length, - key_buffer, key_buffer_size, - key_buffer_length, bits ) ); -} - -psa_status_t mbedtls_transparent_test_driver_ecp_export_public_key( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ) -{ - return( ecp_export_public_key( attributes, key_buffer, key_buffer_size, - data, data_size, data_length ) ); -} - -#endif /* defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR) || - defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_PUBLIC_KEY) */ - -#if defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR) && \ - defined(MBEDTLS_GENPRIME) -psa_status_t mbedtls_transparent_test_driver_ecp_generate_key( - const psa_key_attributes_t *attributes, - uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length ) -{ - return( ecp_generate_key( attributes, key_buffer, key_buffer_size, - key_buffer_length ) ); -} -#endif /* defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR) && - defined(MBEDTLS_GENPRIME) */ - -#if defined(MBEDTLS_PSA_ACCEL_ALG_ECDSA) || \ - defined(MBEDTLS_PSA_ACCEL_ALG_DETERMINISTIC_ECDSA) - -psa_status_t mbedtls_transparent_test_driver_ecdsa_sign_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - uint8_t *signature, size_t signature_size, size_t *signature_length ) -{ - -#if defined(MBEDTLS_ECDSA_C) - return( ecdsa_sign_hash( attributes, - key_buffer, key_buffer_size, - alg, hash, hash_length, - signature, signature_size, signature_length ) ); -#else - (void)attributes; - (void)key_buffer; - (void)key_buffer_size; - (void)alg; - (void)hash; - (void)hash_length; - (void)signature; - (void)signature_size; - (void)signature_length; - return( PSA_ERROR_NOT_SUPPORTED ); -#endif -} - -psa_status_t mbedtls_transparent_test_driver_ecdsa_verify_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - const uint8_t *signature, size_t signature_length ) -{ -#if defined(MBEDTLS_ECDSA_C) - return( ecdsa_verify_hash( attributes, - key_buffer, key_buffer_size, - alg, hash, hash_length, - signature, signature_length ) ); -#else - (void)attributes; - (void)key_buffer; - (void)key_buffer_size; - (void)alg; - (void)hash; - (void)hash_length; - (void)signature; - (void)signature_length; - return( PSA_ERROR_NOT_SUPPORTED ); -#endif -} - -#endif /* defined(MBEDTLS_PSA_ACCEL_ALG_ECDSA) || - * defined(MBEDTLS_PSA_ACCEL_ALG_DETERMINISTIC_ECDSA) */ - -#endif /* PSA_CRYPTO_DRIVER_TEST */ - -#endif /* MBEDTLS_PSA_CRYPTO_C */ diff --git a/third_party/mbedtls/psa_crypto_ecp.h b/third_party/mbedtls/psa_crypto_ecp.h deleted file mode 100644 index 57310510b..000000000 --- a/third_party/mbedtls/psa_crypto_ecp.h +++ /dev/null @@ -1,258 +0,0 @@ -/* clang-format off */ - -/* - * PSA ECP layer on top of Mbed TLS crypto - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef PSA_CRYPTO_ECP_H -#define PSA_CRYPTO_ECP_H - -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/ecp.h" - -/** Load the contents of a key buffer into an internal ECP representation - * - * \param[in] type The type of key contained in \p data. - * \param[in] curve_bits The nominal bit-size of the curve. - * It must be consistent with the representation - * passed in \p data. - * This can be 0, in which case the bit-size - * is inferred from \p data_length (which is possible - * for all key types and representation formats - * formats that are currently supported or will - * be in the foreseeable future). - * \param[in] data The buffer from which to load the representation. - * \param[in] data_length The size in bytes of \p data. - * \param[out] p_ecp Returns a pointer to an ECP context on success. - * The caller is responsible for freeing both the - * contents of the context and the context itself - * when done. - */ -psa_status_t mbedtls_psa_ecp_load_representation( psa_key_type_t type, - size_t curve_bits, - const uint8_t *data, - size_t data_length, - mbedtls_ecp_keypair **p_ecp ); - -/** Import an ECP key in binary format. - * - * \note The signature of this function is that of a PSA driver - * import_key entry point. This function behaves as an import_key - * entry point as defined in the PSA driver interface specification for - * transparent drivers. - * - * \param[in] attributes The attributes for the key to import. - * \param[in] data The buffer containing the key data in import - * format. - * \param[in] data_length Size of the \p data buffer in bytes. - * \param[out] key_buffer The buffer containing the key data in output - * format. - * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes. This - * size is greater or equal to \p data_length. - * \param[out] key_buffer_length The length of the data written in \p - * key_buffer in bytes. - * \param[out] bits The key size in number of bits. - * - * \retval #PSA_SUCCESS The ECP key was imported successfully. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The key data is not correctly formatted. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_CORRUPTION_DETECTED - */ -psa_status_t mbedtls_psa_ecp_import_key( - const psa_key_attributes_t *attributes, - const uint8_t *data, size_t data_length, - uint8_t *key_buffer, size_t key_buffer_size, - size_t *key_buffer_length, size_t *bits ); - -/** Export an ECP key to export representation - * - * \param[in] type The type of key (public/private) to export - * \param[in] ecp The internal ECP representation from which to export - * \param[out] data The buffer to export to - * \param[in] data_size The length of the buffer to export to - * \param[out] data_length The amount of bytes written to \p data - */ -psa_status_t mbedtls_psa_ecp_export_key( psa_key_type_t type, - mbedtls_ecp_keypair *ecp, - uint8_t *data, - size_t data_size, - size_t *data_length ); - -/** Export an ECP public key or the public part of an ECP key pair in binary - * format. - * - * \note The signature of this function is that of a PSA driver - * export_public_key entry point. This function behaves as an - * export_public_key entry point as defined in the PSA driver interface - * specification. - * - * \param[in] attributes The attributes for the key to export. - * \param[in] key_buffer Material or context of the key to export. - * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes. - * \param[out] data Buffer where the key data is to be written. - * \param[in] data_size Size of the \p data buffer in bytes. - * \param[out] data_length On success, the number of bytes written in - * \p data - * - * \retval #PSA_SUCCESS The ECP public key was exported successfully. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - */ -psa_status_t mbedtls_psa_ecp_export_public_key( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ); - -/** - * \brief Generate an ECP key. - * - * \note The signature of the function is that of a PSA driver generate_key - * entry point. - * - * \param[in] attributes The attributes for the ECP key to generate. - * \param[out] key_buffer Buffer where the key data is to be written. - * \param[in] key_buffer_size Size of \p key_buffer in bytes. - * \param[out] key_buffer_length On success, the number of bytes written in - * \p key_buffer. - * - * \retval #PSA_SUCCESS - * The key was successfully generated. - * \retval #PSA_ERROR_NOT_SUPPORTED - * Key length or type not supported. - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of \p key_buffer is too small. - */ -psa_status_t mbedtls_psa_ecp_generate_key( - const psa_key_attributes_t *attributes, - uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length ); - -/** Sign an already-calculated hash with ECDSA. - * - * \note The signature of this function is that of a PSA driver - * sign_hash entry point. This function behaves as a sign_hash - * entry point as defined in the PSA driver interface specification for - * transparent drivers. - * - * \param[in] attributes The attributes of the ECC key to use for the - * operation. - * \param[in] key_buffer The buffer containing the ECC key context. - * format. - * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes. - * \param[in] alg Randomized or deterministic ECDSA algorithm. - * \param[in] hash The hash or message to sign. - * \param[in] hash_length Size of the \p hash buffer in bytes. - * \param[out] signature Buffer where the signature is to be written. - * \param[in] signature_size Size of the \p signature buffer in bytes. - * \param[out] signature_length On success, the number of bytes - * that make up the returned signature value. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p signature buffer is too small. You can - * determine a sufficient buffer size by calling - * #PSA_SIGN_OUTPUT_SIZE(\c PSA_KEY_TYPE_ECC_KEY_PAIR, \c key_bits, - * \p alg) where \c key_bits is the bit-size of the ECC key. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_INSUFFICIENT_ENTROPY - */ -psa_status_t mbedtls_psa_ecdsa_sign_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - uint8_t *signature, size_t signature_size, size_t *signature_length ); - -/** - * \brief Verify an ECDSA hash or short message signature. - * - * \note The signature of this function is that of a PSA driver - * verify_hash entry point. This function behaves as a verify_hash - * entry point as defined in the PSA driver interface specification for - * transparent drivers. - * - * \param[in] attributes The attributes of the ECC key to use for the - * operation. - * \param[in] key_buffer The buffer containing the ECC key context. - * format. - * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes. - * \param[in] alg Randomized or deterministic ECDSA algorithm. - * \param[in] hash The hash or message whose signature is to be - * verified. - * \param[in] hash_length Size of the \p hash buffer in bytes. - * \param[in] signature Buffer containing the signature to verify. - * \param[in] signature_length Size of the \p signature buffer in bytes. - * - * \retval #PSA_SUCCESS - * The signature is valid. - * \retval #PSA_ERROR_INVALID_SIGNATURE - * The calculation was performed successfully, but the passed - * signature is not a valid signature. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - */ -psa_status_t mbedtls_psa_ecdsa_verify_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - const uint8_t *signature, size_t signature_length ); -/* - * BEYOND THIS POINT, TEST DRIVER ENTRY POINTS ONLY. - */ - -#if defined(PSA_CRYPTO_DRIVER_TEST) - -psa_status_t mbedtls_transparent_test_driver_ecp_import_key( - const psa_key_attributes_t *attributes, - const uint8_t *data, size_t data_length, - uint8_t *key_buffer, size_t key_buffer_size, - size_t *key_buffer_length, size_t *bits ); - -psa_status_t mbedtls_transparent_test_driver_ecp_export_public_key( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ); - -psa_status_t mbedtls_transparent_test_driver_ecp_generate_key( - const psa_key_attributes_t *attributes, - uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length ); - -psa_status_t mbedtls_transparent_test_driver_ecdsa_sign_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - uint8_t *signature, size_t signature_size, size_t *signature_length ); - -psa_status_t mbedtls_transparent_test_driver_ecdsa_verify_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - const uint8_t *signature, size_t signature_length ); - -#endif /* PSA_CRYPTO_DRIVER_TEST */ - -#endif /* PSA_CRYPTO_ECP_H */ diff --git a/third_party/mbedtls/psa_crypto_invasive.h b/third_party/mbedtls/psa_crypto_invasive.h deleted file mode 100644 index 2f1164b26..000000000 --- a/third_party/mbedtls/psa_crypto_invasive.h +++ /dev/null @@ -1,88 +0,0 @@ -/* clang-format off */ - -/** - * \file psa_crypto_invasive.h - * - * \brief PSA cryptography module: invasive interfaces for test only. - * - * The interfaces in this file are intended for testing purposes only. - * They MUST NOT be made available to clients over IPC in integrations - * with isolation, and they SHOULD NOT be made available in library - * integrations except when building the library for testing. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef PSA_CRYPTO_INVASIVE_H -#define PSA_CRYPTO_INVASIVE_H - -#if defined(MBEDTLS_CONFIG_FILE) -#include MBEDTLS_CONFIG_FILE -#else -#include "third_party/mbedtls/config.h" -#endif - -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/common.h" - -#include "third_party/mbedtls/entropy.h" - -#if !defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) -/** \brief Configure entropy sources. - * - * This function may only be called before a call to psa_crypto_init(), - * or after a call to mbedtls_psa_crypto_free() and before any - * subsequent call to psa_crypto_init(). - * - * This function is only intended for test purposes. The functionality - * it provides is also useful for system integrators, but - * system integrators should configure entropy drivers instead of - * breaking through to the Mbed TLS API. - * - * \param entropy_init Function to initialize the entropy context - * and set up the desired entropy sources. - * It is called by psa_crypto_init(). - * By default this is mbedtls_entropy_init(). - * This function cannot report failures directly. - * To indicate a failure, set the entropy context - * to a state where mbedtls_entropy_func() will - * return an error. - * \param entropy_free Function to free the entropy context - * and associated resources. - * It is called by mbedtls_psa_crypto_free(). - * By default this is mbedtls_entropy_free(). - * - * \retval #PSA_SUCCESS - * Success. - * \retval #PSA_ERROR_NOT_PERMITTED - * The caller does not have the permission to configure - * entropy sources. - * \retval #PSA_ERROR_BAD_STATE - * The library has already been initialized. - */ -psa_status_t mbedtls_psa_crypto_configure_entropy_sources( - void (* entropy_init )( mbedtls_entropy_context *ctx ), - void (* entropy_free )( mbedtls_entropy_context *ctx ) ); -#endif /* !defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) */ - -#if defined(MBEDTLS_TEST_HOOKS) && defined(MBEDTLS_PSA_CRYPTO_C) -psa_status_t psa_mac_key_can_do( - psa_algorithm_t algorithm, - psa_key_type_t key_type ); -#endif /* MBEDTLS_TEST_HOOKS && MBEDTLS_PSA_CRYPTO_C */ - -#endif /* PSA_CRYPTO_INVASIVE_H */ diff --git a/third_party/mbedtls/psa_crypto_its.h b/third_party/mbedtls/psa_crypto_its.h deleted file mode 100644 index 0e9c2ac40..000000000 --- a/third_party/mbedtls/psa_crypto_its.h +++ /dev/null @@ -1,149 +0,0 @@ -/* clang-format off */ - -/** \file psa_crypto_its.h - * \brief Interface of trusted storage that crypto is built on. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef PSA_CRYPTO_ITS_H -#define PSA_CRYPTO_ITS_H - - -#include "third_party/mbedtls/crypto_types.h" -#include "third_party/mbedtls/crypto_values.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** \brief Flags used when creating a data entry - */ -typedef uint32_t psa_storage_create_flags_t; - -/** \brief A type for UIDs used for identifying data - */ -typedef uint64_t psa_storage_uid_t; - -#define PSA_STORAGE_FLAG_NONE 0 /**< No flags to pass */ -#define PSA_STORAGE_FLAG_WRITE_ONCE (1 << 0) /**< The data associated with the uid will not be able to be modified or deleted. Intended to be used to set bits in `psa_storage_create_flags_t`*/ - -/** - * \brief A container for metadata associated with a specific uid - */ -struct psa_storage_info_t -{ - uint32_t size; /**< The size of the data associated with a uid **/ - psa_storage_create_flags_t flags; /**< The flags set when the uid was created **/ -}; - -/** Flag indicating that \ref psa_storage_create and \ref psa_storage_set_extended are supported */ -#define PSA_STORAGE_SUPPORT_SET_EXTENDED (1 << 0) - -/** \brief PSA storage specific error codes - */ -#define PSA_ERROR_INVALID_SIGNATURE ((psa_status_t)-149) -#define PSA_ERROR_DATA_CORRUPT ((psa_status_t)-152) - -#define PSA_ITS_API_VERSION_MAJOR 1 /**< The major version number of the PSA ITS API. It will be incremented on significant updates that may include breaking changes */ -#define PSA_ITS_API_VERSION_MINOR 1 /**< The minor version number of the PSA ITS API. It will be incremented in small updates that are unlikely to include breaking changes */ - -/** - * \brief create a new or modify an existing uid/value pair - * - * \param[in] uid the identifier for the data - * \param[in] data_length The size in bytes of the data in `p_data` - * \param[in] p_data A buffer containing the data - * \param[in] create_flags The flags that the data will be stored with - * - * \return A status indicating the success/failure of the operation - * - * \retval #PSA_SUCCESS The operation completed successfully - * \retval #PSA_ERROR_NOT_PERMITTED The operation failed because the provided `uid` value was already created with PSA_STORAGE_WRITE_ONCE_FLAG - * \retval #PSA_ERROR_NOT_SUPPORTED The operation failed because one or more of the flags provided in `create_flags` is not supported or is not valid - * \retval #PSA_ERROR_INSUFFICIENT_STORAGE The operation failed because there was insufficient space on the storage medium - * \retval #PSA_ERROR_STORAGE_FAILURE The operation failed because the physical storage has failed (Fatal error) - * \retval #PSA_ERROR_INVALID_ARGUMENT The operation failed because one of the provided pointers(`p_data`) - * is invalid, for example is `NULL` or references memory the caller cannot access - */ -psa_status_t psa_its_set(psa_storage_uid_t uid, - uint32_t data_length, - const void *p_data, - psa_storage_create_flags_t create_flags); - -/** - * \brief Retrieve the value associated with a provided uid - * - * \param[in] uid The uid value - * \param[in] data_offset The starting offset of the data requested - * \param[in] data_length the amount of data requested (and the minimum allocated size of the `p_data` buffer) - * \param[out] p_data The buffer where the data will be placed upon successful completion - * \param[out] p_data_length The amount of data returned in the p_data buffer - * - * - * \return A status indicating the success/failure of the operation - * - * \retval #PSA_SUCCESS The operation completed successfully - * \retval #PSA_ERROR_DOES_NOT_EXIST The operation failed because the provided `uid` value was not found in the storage - * \retval #PSA_ERROR_STORAGE_FAILURE The operation failed because the physical storage has failed (Fatal error) - * \retval #PSA_ERROR_DATA_CORRUPT The operation failed because stored data has been corrupted - * \retval #PSA_ERROR_INVALID_ARGUMENT The operation failed because one of the provided pointers(`p_data`, `p_data_length`) - * is invalid. For example is `NULL` or references memory the caller cannot access. - * In addition, this can also happen if an invalid offset was provided. - */ -psa_status_t psa_its_get(psa_storage_uid_t uid, - uint32_t data_offset, - uint32_t data_length, - void *p_data, - size_t *p_data_length ); - -/** - * \brief Retrieve the metadata about the provided uid - * - * \param[in] uid The uid value - * \param[out] p_info A pointer to the `psa_storage_info_t` struct that will be populated with the metadata - * - * \return A status indicating the success/failure of the operation - * - * \retval #PSA_SUCCESS The operation completed successfully - * \retval #PSA_ERROR_DOES_NOT_EXIST The operation failed because the provided uid value was not found in the storage - * \retval #PSA_ERROR_DATA_CORRUPT The operation failed because stored data has been corrupted - * \retval #PSA_ERROR_INVALID_ARGUMENT The operation failed because one of the provided pointers(`p_info`) - * is invalid, for example is `NULL` or references memory the caller cannot access - */ -psa_status_t psa_its_get_info(psa_storage_uid_t uid, - struct psa_storage_info_t *p_info); - -/** - * \brief Remove the provided key and its associated data from the storage - * - * \param[in] uid The uid value - * - * \return A status indicating the success/failure of the operation - * - * \retval #PSA_SUCCESS The operation completed successfully - * \retval #PSA_ERROR_DOES_NOT_EXIST The operation failed because the provided key value was not found in the storage - * \retval #PSA_ERROR_NOT_PERMITTED The operation failed because the provided key value was created with PSA_STORAGE_WRITE_ONCE_FLAG - * \retval #PSA_ERROR_STORAGE_FAILURE The operation failed because the physical storage has failed (Fatal error) - */ -psa_status_t psa_its_remove(psa_storage_uid_t uid); - -#ifdef __cplusplus -} -#endif - -#endif /* PSA_CRYPTO_ITS_H */ diff --git a/third_party/mbedtls/psa_crypto_random_impl.h b/third_party/mbedtls/psa_crypto_random_impl.h deleted file mode 100644 index b6b0fb378..000000000 --- a/third_party/mbedtls/psa_crypto_random_impl.h +++ /dev/null @@ -1,179 +0,0 @@ -/* clang-format off */ - -/** \file psa_crypto_random_impl.h - * - * \brief PSA crypto random generator implementation abstraction. - * - * The definitions here need to be consistent with the declarations - * in include/mbedtls/psa_util.h. This file contains some redundant - * declarations to increase the chance that a compiler will detect - * inconsistencies if one file is changed without updating the other, - * but not all potential inconsistencies can be enforced, so make sure - * to check the public declarations and contracts in - * include/mbedtls/psa_util.h if you modify this file. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef PSA_CRYPTO_RANDOM_IMPL_H -#define PSA_CRYPTO_RANDOM_IMPL_H - -#include "third_party/mbedtls/psa_util.h" - -#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) - -#include "third_party/mbedtls/entropy.h" // only for error code -#include "third_party/mbedtls/crypto.h" - -typedef mbedtls_psa_external_random_context_t mbedtls_psa_random_context_t; - -/* Trivial wrapper around psa_generate_random(). */ -int mbedtls_psa_get_random( void *p_rng, - unsigned char *output, - size_t output_size ); - -/* The PSA RNG API doesn't need any externally maintained state. */ -#define MBEDTLS_PSA_RANDOM_STATE NULL - -#else /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ - -/* Choose a DRBG based on configuration and availability */ -#if defined(MBEDTLS_PSA_HMAC_DRBG_MD_TYPE) - -#include "third_party/mbedtls/hmac_drbg.h" - -#elif defined(MBEDTLS_CTR_DRBG_C) - -#include "third_party/mbedtls/ctr_drbg.h" - -#elif defined(MBEDTLS_HMAC_DRBG_C) - -#include "third_party/mbedtls/hmac_drbg.h" -#if defined(MBEDTLS_SHA512_C) && defined(MBEDTLS_SHA256_C) -#if SIZE_MAX > 0xffffffff -/* Looks like a 64-bit system, so prefer SHA-512. */ -#define MBEDTLS_PSA_HMAC_DRBG_MD_TYPE MBEDTLS_MD_SHA512 -#else -/* Looks like a 32-bit system, so prefer SHA-256. */ -#define MBEDTLS_PSA_HMAC_DRBG_MD_TYPE MBEDTLS_MD_SHA256 -#endif -#elif defined(MBEDTLS_SHA512_C) -#define MBEDTLS_PSA_HMAC_DRBG_MD_TYPE MBEDTLS_MD_SHA512 -#elif defined(MBEDTLS_SHA256_C) -#define MBEDTLS_PSA_HMAC_DRBG_MD_TYPE MBEDTLS_MD_SHA256 -#else -#error "No hash algorithm available for HMAC_DBRG." -#endif - -#else -#error "No DRBG module available for the psa_crypto module." -#endif - -#include "third_party/mbedtls/entropy.h" - -/** Initialize the PSA DRBG. - * - * \param p_rng Pointer to the Mbed TLS DRBG state. - */ -static inline void mbedtls_psa_drbg_init( mbedtls_psa_drbg_context_t *p_rng ) -{ -#if defined(MBEDTLS_CTR_DRBG_C) - mbedtls_ctr_drbg_init( p_rng ); -#elif defined(MBEDTLS_HMAC_DRBG_C) - mbedtls_hmac_drbg_init( p_rng ); -#endif -} - -/** Deinitialize the PSA DRBG. - * - * \param p_rng Pointer to the Mbed TLS DRBG state. - */ -static inline void mbedtls_psa_drbg_free( mbedtls_psa_drbg_context_t *p_rng ) -{ -#if defined(MBEDTLS_CTR_DRBG_C) - mbedtls_ctr_drbg_free( p_rng ); -#elif defined(MBEDTLS_HMAC_DRBG_C) - mbedtls_hmac_drbg_free( p_rng ); -#endif -} - -/** The type of the PSA random generator context. - * - * The random generator context is composed of an entropy context and - * a DRBG context. - */ -typedef struct -{ - void (* entropy_init )( mbedtls_entropy_context *ctx ); - void (* entropy_free )( mbedtls_entropy_context *ctx ); - mbedtls_entropy_context entropy; - mbedtls_psa_drbg_context_t drbg; -} mbedtls_psa_random_context_t; - -/** The maximum number of bytes that mbedtls_psa_get_random() is expected to - * return. - */ -#if defined(MBEDTLS_CTR_DRBG_C) -#define MBEDTLS_PSA_RANDOM_MAX_REQUEST MBEDTLS_CTR_DRBG_MAX_REQUEST -#elif defined(MBEDTLS_HMAC_DRBG_C) -#define MBEDTLS_PSA_RANDOM_MAX_REQUEST MBEDTLS_HMAC_DRBG_MAX_REQUEST -#endif - -/** A pointer to the PSA DRBG state. - * - * This macro expands to an expression that is suitable as the \c p_rng - * parameter to pass to mbedtls_psa_get_random(). - * - * This macro exists in all configurations where the psa_crypto module is - * enabled. Its expansion depends on the configuration. - */ -#define MBEDTLS_PSA_RANDOM_STATE mbedtls_psa_random_state - -/** Seed the PSA DRBG. - * - * \param entropy An entropy context to read the seed from. - * \param custom The personalization string. - * This can be \c NULL, in which case the personalization - * string is empty regardless of the value of \p len. - * \param len The length of the personalization string. - * - * \return \c 0 on success. - * \return An Mbed TLS error code (\c MBEDTLS_ERR_xxx) on failure. - */ -static inline int mbedtls_psa_drbg_seed( - mbedtls_entropy_context *entropy, - const unsigned char *custom, size_t len ) -{ -#if defined(MBEDTLS_CTR_DRBG_C) - return( mbedtls_ctr_drbg_seed( MBEDTLS_PSA_RANDOM_STATE, - mbedtls_entropy_func, - entropy, - custom, len ) ); -#elif defined(MBEDTLS_HMAC_DRBG_C) - const mbedtls_md_info_t *md_info = - mbedtls_md_info_from_type( MBEDTLS_PSA_HMAC_DRBG_MD_TYPE ); - return( mbedtls_hmac_drbg_seed( MBEDTLS_PSA_RANDOM_STATE, - md_info, - mbedtls_entropy_func, - entropy, - custom, len ) ); -#endif -} - -#endif /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ - -#endif /* PSA_CRYPTO_RANDOM_IMPL_H */ diff --git a/third_party/mbedtls/psa_crypto_rsa.c b/third_party/mbedtls/psa_crypto_rsa.c deleted file mode 100644 index f6cb3bf24..000000000 --- a/third_party/mbedtls/psa_crypto_rsa.c +++ /dev/null @@ -1,709 +0,0 @@ -/* clang-format off */ - -/* - * PSA RSA layer on top of Mbed TLS crypto - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "libc/limits.h" -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_PSA_CRYPTO_C) - -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/psa_crypto_core.h" -#include "third_party/mbedtls/psa_crypto_random_impl.h" -#include "third_party/mbedtls/psa_crypto_rsa.h" - -#include "third_party/mbedtls/platform.h" -#if !defined(MBEDTLS_PLATFORM_C) -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - -#include "third_party/mbedtls/rsa.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/pk.h" -#include "third_party/mbedtls/pk_internal.h" - -#if ( defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || \ - ( defined(PSA_CRYPTO_DRIVER_TEST) && \ - defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_KEY_PAIR) ) ) -#define BUILTIN_KEY_TYPE_RSA_KEY_PAIR 1 -#endif - -#if ( defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) || \ - ( defined(PSA_CRYPTO_DRIVER_TEST) && \ - defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_PUBLIC_KEY) ) ) -#define BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY 1 -#endif - -#if ( defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN) || \ - ( defined(PSA_CRYPTO_DRIVER_TEST) && \ - defined(MBEDTLS_PSA_ACCEL_ALG_RSA_PKCS1V15_SIGN) && \ - defined(MBEDTLS_RSA_C) && defined(MBEDTLS_PKCS1_V15) ) ) -#define BUILTIN_ALG_RSA_PKCS1V15_SIGN 1 -#endif - -#if ( defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS) || \ - ( defined(PSA_CRYPTO_DRIVER_TEST) && \ - defined(MBEDTLS_PSA_ACCEL_ALG_RSA_PSS) && \ - defined(MBEDTLS_RSA_C) && defined(MBEDTLS_PKCS1_V21) ) ) -#define BUILTIN_ALG_RSA_PSS 1 -#endif - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) || \ - defined(BUILTIN_ALG_RSA_PKCS1V15_SIGN) || \ - defined(BUILTIN_ALG_RSA_PSS) || \ - defined(BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || \ - defined(BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) - -/* Mbed TLS doesn't support non-byte-aligned key sizes (i.e. key sizes - * that are not a multiple of 8) well. For example, there is only - * mbedtls_rsa_get_len(), which returns a number of bytes, and no - * way to return the exact bit size of a key. - * To keep things simple, reject non-byte-aligned key sizes. */ -static psa_status_t psa_check_rsa_key_byte_aligned( - const mbedtls_rsa_context *rsa ) -{ - mbedtls_mpi n; - psa_status_t status; - mbedtls_mpi_init( &n ); - status = mbedtls_to_psa_error( - mbedtls_rsa_export( rsa, &n, NULL, NULL, NULL, NULL ) ); - if( status == PSA_SUCCESS ) - { - if( mbedtls_mpi_bitlen( &n ) % 8 != 0 ) - status = PSA_ERROR_NOT_SUPPORTED; - } - mbedtls_mpi_free( &n ); - return( status ); -} - -psa_status_t mbedtls_psa_rsa_load_representation( - psa_key_type_t type, const uint8_t *data, size_t data_length, - mbedtls_rsa_context **p_rsa ) -{ - psa_status_t status; - mbedtls_pk_context ctx; - size_t bits; - mbedtls_pk_init( &ctx ); - - /* Parse the data. */ - if( PSA_KEY_TYPE_IS_KEY_PAIR( type ) ) - status = mbedtls_to_psa_error( - mbedtls_pk_parse_key( &ctx, data, data_length, NULL, 0 ) ); - else - status = mbedtls_to_psa_error( - mbedtls_pk_parse_public_key( &ctx, data, data_length ) ); - if( status != PSA_SUCCESS ) - goto exit; - - /* We have something that the pkparse module recognizes. If it is a - * valid RSA key, store it. */ - if( mbedtls_pk_get_type( &ctx ) != MBEDTLS_PK_RSA ) - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto exit; - } - - /* The size of an RSA key doesn't have to be a multiple of 8. Mbed TLS - * supports non-byte-aligned key sizes, but not well. For example, - * mbedtls_rsa_get_len() returns the key size in bytes, not in bits. */ - bits = PSA_BYTES_TO_BITS( mbedtls_rsa_get_len( mbedtls_pk_rsa( ctx ) ) ); - if( bits > PSA_VENDOR_RSA_MAX_KEY_BITS ) - { - status = PSA_ERROR_NOT_SUPPORTED; - goto exit; - } - status = psa_check_rsa_key_byte_aligned( mbedtls_pk_rsa( ctx ) ); - if( status != PSA_SUCCESS ) - goto exit; - - /* Copy out the pointer to the RSA context, and reset the PK context - * such that pk_free doesn't free the RSA context we just grabbed. */ - *p_rsa = mbedtls_pk_rsa( ctx ); - ctx.pk_info = NULL; - -exit: - mbedtls_pk_free( &ctx ); - return( status ); -} -#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) || - * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) || - * defined(BUILTIN_ALG_RSA_PKCS1V15_SIGN) || - * defined(BUILTIN_ALG_RSA_PSS) || - * defined(BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || - * defined(BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) */ - -#if defined(BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || \ - defined(BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) - -static psa_status_t rsa_import_key( - const psa_key_attributes_t *attributes, - const uint8_t *data, size_t data_length, - uint8_t *key_buffer, size_t key_buffer_size, - size_t *key_buffer_length, size_t *bits ) -{ - psa_status_t status; - mbedtls_rsa_context *rsa = NULL; - - /* Parse input */ - status = mbedtls_psa_rsa_load_representation( attributes->core.type, - data, - data_length, - &rsa ); - if( status != PSA_SUCCESS ) - goto exit; - - *bits = (psa_key_bits_t) PSA_BYTES_TO_BITS( mbedtls_rsa_get_len( rsa ) ); - - /* Re-export the data to PSA export format, such that we can store export - * representation in the key slot. Export representation in case of RSA is - * the smallest representation that's allowed as input, so a straight-up - * allocation of the same size as the input buffer will be large enough. */ - status = mbedtls_psa_rsa_export_key( attributes->core.type, - rsa, - key_buffer, - key_buffer_size, - key_buffer_length ); -exit: - /* Always free the RSA object */ - mbedtls_rsa_free( rsa ); - mbedtls_free( rsa ); - - return( status ); -} - -psa_status_t mbedtls_psa_rsa_export_key( psa_key_type_t type, - mbedtls_rsa_context *rsa, - uint8_t *data, - size_t data_size, - size_t *data_length ) -{ -#if defined(MBEDTLS_PK_WRITE_C) - int ret; - mbedtls_pk_context pk; - uint8_t *pos = data + data_size; - - mbedtls_pk_init( &pk ); - pk.pk_info = &mbedtls_rsa_info; - pk.pk_ctx = rsa; - - /* PSA Crypto API defines the format of an RSA key as a DER-encoded - * representation of the non-encrypted PKCS#1 RSAPrivateKey for a - * private key and of the RFC3279 RSAPublicKey for a public key. */ - if( PSA_KEY_TYPE_IS_KEY_PAIR( type ) ) - ret = mbedtls_pk_write_key_der( &pk, data, data_size ); - else - ret = mbedtls_pk_write_pubkey( &pos, data, &pk ); - - if( ret < 0 ) - { - /* Clean up in case pk_write failed halfway through. */ - memset( data, 0, data_size ); - return( mbedtls_to_psa_error( ret ) ); - } - - /* The mbedtls_pk_xxx functions write to the end of the buffer. - * Move the data to the beginning and erase remaining data - * at the original location. */ - if( 2 * (size_t) ret <= data_size ) - { - memcpy( data, data + data_size - ret, ret ); - memset( data + data_size - ret, 0, ret ); - } - else if( (size_t) ret < data_size ) - { - memmove( data, data + data_size - ret, ret ); - memset( data + ret, 0, data_size - ret ); - } - - *data_length = ret; - return( PSA_SUCCESS ); -#else - (void) type; - (void) rsa; - (void) data; - (void) data_size; - (void) data_length; - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* MBEDTLS_PK_WRITE_C */ -} - -static psa_status_t rsa_export_public_key( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - mbedtls_rsa_context *rsa = NULL; - - status = mbedtls_psa_rsa_load_representation( - attributes->core.type, key_buffer, key_buffer_size, &rsa ); - if( status != PSA_SUCCESS ) - return( status ); - - status = mbedtls_psa_rsa_export_key( PSA_KEY_TYPE_RSA_PUBLIC_KEY, - rsa, - data, - data_size, - data_length ); - - mbedtls_rsa_free( rsa ); - mbedtls_free( rsa ); - - return( status ); -} -#endif /* defined(BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || - * defined(BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) */ - -#if defined(BUILTIN_KEY_TYPE_RSA_KEY_PAIR) -static psa_status_t psa_rsa_read_exponent( const uint8_t *domain_parameters, - size_t domain_parameters_size, - int *exponent ) -{ - size_t i; - uint32_t acc = 0; - - if( domain_parameters_size == 0 ) - { - *exponent = 65537; - return( PSA_SUCCESS ); - } - - /* Mbed TLS encodes the public exponent as an int. For simplicity, only - * support values that fit in a 32-bit integer, which is larger than - * int on just about every platform anyway. */ - if( domain_parameters_size > sizeof( acc ) ) - return( PSA_ERROR_NOT_SUPPORTED ); - for( i = 0; i < domain_parameters_size; i++ ) - acc = ( acc << 8 ) | domain_parameters[i]; - if( acc > INT_MAX ) - return( PSA_ERROR_NOT_SUPPORTED ); - *exponent = acc; - return( PSA_SUCCESS ); -} - -static psa_status_t rsa_generate_key( - const psa_key_attributes_t *attributes, - uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length ) -{ - psa_status_t status; - mbedtls_rsa_context rsa; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - int exponent; - - status = psa_rsa_read_exponent( attributes->domain_parameters, - attributes->domain_parameters_size, - &exponent ); - if( status != PSA_SUCCESS ) - return( status ); - - mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, MBEDTLS_MD_NONE ); - ret = mbedtls_rsa_gen_key( &rsa, - mbedtls_psa_get_random, - MBEDTLS_PSA_RANDOM_STATE, - (unsigned int)attributes->core.bits, - exponent ); - if( ret != 0 ) - return( mbedtls_to_psa_error( ret ) ); - - status = mbedtls_psa_rsa_export_key( attributes->core.type, - &rsa, key_buffer, key_buffer_size, - key_buffer_length ); - mbedtls_rsa_free( &rsa ); - - return( status ); -} -#endif /* defined(BUILTIN_KEY_TYPE_RSA_KEY_PAIR) */ - -/****************************************************************/ -/* Sign/verify hashes */ -/****************************************************************/ - -#if defined(BUILTIN_ALG_RSA_PKCS1V15_SIGN) || defined(BUILTIN_ALG_RSA_PSS) - -/* Decode the hash algorithm from alg and store the mbedtls encoding in - * md_alg. Verify that the hash length is acceptable. */ -static psa_status_t psa_rsa_decode_md_type( psa_algorithm_t alg, - size_t hash_length, - mbedtls_md_type_t *md_alg ) -{ - psa_algorithm_t hash_alg = PSA_ALG_SIGN_GET_HASH( alg ); - const mbedtls_md_info_t *md_info = mbedtls_md_info_from_psa( hash_alg ); - *md_alg = mbedtls_md_get_type( md_info ); - - /* The Mbed TLS RSA module uses an unsigned int for hash length - * parameters. Validate that it fits so that we don't risk an - * overflow later. */ -#if SIZE_MAX > UINT_MAX - if( hash_length > UINT_MAX ) - return( PSA_ERROR_INVALID_ARGUMENT ); -#endif - -#if defined(BUILTIN_ALG_RSA_PKCS1V15_SIGN) - /* For PKCS#1 v1.5 signature, if using a hash, the hash length - * must be correct. */ - if( PSA_ALG_IS_RSA_PKCS1V15_SIGN( alg ) && - alg != PSA_ALG_RSA_PKCS1V15_SIGN_RAW ) - { - if( md_info == NULL ) - return( PSA_ERROR_NOT_SUPPORTED ); - if( mbedtls_md_get_size( md_info ) != hash_length ) - return( PSA_ERROR_INVALID_ARGUMENT ); - } -#endif /* BUILTIN_ALG_RSA_PKCS1V15_SIGN */ - -#if defined(BUILTIN_ALG_RSA_PSS) - /* PSS requires a hash internally. */ - if( PSA_ALG_IS_RSA_PSS( alg ) ) - { - if( md_info == NULL ) - return( PSA_ERROR_NOT_SUPPORTED ); - } -#endif /* BUILTIN_ALG_RSA_PSS */ - - return( PSA_SUCCESS ); -} - -static psa_status_t rsa_sign_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - uint8_t *signature, size_t signature_size, size_t *signature_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - mbedtls_rsa_context *rsa = NULL; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - mbedtls_md_type_t md_alg; - - status = mbedtls_psa_rsa_load_representation( attributes->core.type, - key_buffer, - key_buffer_size, - &rsa ); - if( status != PSA_SUCCESS ) - return( status ); - - status = psa_rsa_decode_md_type( alg, hash_length, &md_alg ); - if( status != PSA_SUCCESS ) - goto exit; - - if( signature_size < mbedtls_rsa_get_len( rsa ) ) - { - status = PSA_ERROR_BUFFER_TOO_SMALL; - goto exit; - } - -#if defined(BUILTIN_ALG_RSA_PKCS1V15_SIGN) - if( PSA_ALG_IS_RSA_PKCS1V15_SIGN( alg ) ) - { - mbedtls_rsa_set_padding( rsa, MBEDTLS_RSA_PKCS_V15, - MBEDTLS_MD_NONE ); - ret = mbedtls_rsa_pkcs1_sign( rsa, - mbedtls_psa_get_random, - MBEDTLS_PSA_RANDOM_STATE, - MBEDTLS_RSA_PRIVATE, - md_alg, - (unsigned int) hash_length, - hash, - signature ); - } - else -#endif /* BUILTIN_ALG_RSA_PKCS1V15_SIGN */ -#if defined(BUILTIN_ALG_RSA_PSS) - if( PSA_ALG_IS_RSA_PSS( alg ) ) - { - mbedtls_rsa_set_padding( rsa, MBEDTLS_RSA_PKCS_V21, md_alg ); - ret = mbedtls_rsa_rsassa_pss_sign( rsa, - mbedtls_psa_get_random, - MBEDTLS_PSA_RANDOM_STATE, - MBEDTLS_RSA_PRIVATE, - MBEDTLS_MD_NONE, - (unsigned int) hash_length, - hash, - signature ); - } - else -#endif /* BUILTIN_ALG_RSA_PSS */ - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto exit; - } - - if( ret == 0 ) - *signature_length = mbedtls_rsa_get_len( rsa ); - status = mbedtls_to_psa_error( ret ); - -exit: - mbedtls_rsa_free( rsa ); - mbedtls_free( rsa ); - - return( status ); -} - -static psa_status_t rsa_verify_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - const uint8_t *signature, size_t signature_length ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - mbedtls_rsa_context *rsa = NULL; - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - mbedtls_md_type_t md_alg; - - status = mbedtls_psa_rsa_load_representation( attributes->core.type, - key_buffer, - key_buffer_size, - &rsa ); - if( status != PSA_SUCCESS ) - goto exit; - - status = psa_rsa_decode_md_type( alg, hash_length, &md_alg ); - if( status != PSA_SUCCESS ) - goto exit; - - if( signature_length != mbedtls_rsa_get_len( rsa ) ) - { - status = PSA_ERROR_INVALID_SIGNATURE; - goto exit; - } - -#if defined(BUILTIN_ALG_RSA_PKCS1V15_SIGN) - if( PSA_ALG_IS_RSA_PKCS1V15_SIGN( alg ) ) - { - mbedtls_rsa_set_padding( rsa, MBEDTLS_RSA_PKCS_V15, - MBEDTLS_MD_NONE ); - ret = mbedtls_rsa_pkcs1_verify( rsa, - mbedtls_psa_get_random, - MBEDTLS_PSA_RANDOM_STATE, - MBEDTLS_RSA_PUBLIC, - md_alg, - (unsigned int) hash_length, - hash, - signature ); - } - else -#endif /* BUILTIN_ALG_RSA_PKCS1V15_SIGN */ -#if defined(BUILTIN_ALG_RSA_PSS) - if( PSA_ALG_IS_RSA_PSS( alg ) ) - { - mbedtls_rsa_set_padding( rsa, MBEDTLS_RSA_PKCS_V21, md_alg ); - ret = mbedtls_rsa_rsassa_pss_verify( rsa, - mbedtls_psa_get_random, - MBEDTLS_PSA_RANDOM_STATE, - MBEDTLS_RSA_PUBLIC, - MBEDTLS_MD_NONE, - (unsigned int) hash_length, - hash, - signature ); - } - else -#endif /* BUILTIN_ALG_RSA_PSS */ - { - status = PSA_ERROR_INVALID_ARGUMENT; - goto exit; - } - - /* Mbed TLS distinguishes "invalid padding" from "valid padding but - * the rest of the signature is invalid". This has little use in - * practice and PSA doesn't report this distinction. */ - status = ( ret == MBEDTLS_ERR_RSA_INVALID_PADDING ) ? - PSA_ERROR_INVALID_SIGNATURE : - mbedtls_to_psa_error( ret ); - -exit: - mbedtls_rsa_free( rsa ); - mbedtls_free( rsa ); - - return( status ); -} - -#endif /* defined(BUILTIN_ALG_RSA_PKCS1V15_SIGN) || - * defined(BUILTIN_ALG_RSA_PSS) */ - -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || \ - defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) - -psa_status_t mbedtls_psa_rsa_import_key( - const psa_key_attributes_t *attributes, - const uint8_t *data, size_t data_length, - uint8_t *key_buffer, size_t key_buffer_size, - size_t *key_buffer_length, size_t *bits ) -{ - return( rsa_import_key( attributes, data, data_length, - key_buffer, key_buffer_size, - key_buffer_length, bits ) ); -} - -psa_status_t mbedtls_psa_rsa_export_public_key( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ) -{ - return( rsa_export_public_key( attributes, key_buffer, key_buffer_size, - data, data_size, data_length ) ); -} - -#endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) || - * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) */ - -#if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) -psa_status_t mbedtls_psa_rsa_generate_key( - const psa_key_attributes_t *attributes, - uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length ) -{ - return( rsa_generate_key( attributes, key_buffer, key_buffer_size, - key_buffer_length ) ); -} -#endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR) */ - -#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN) || \ - defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS) -psa_status_t mbedtls_psa_rsa_sign_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - uint8_t *signature, size_t signature_size, size_t *signature_length ) -{ - return( rsa_sign_hash( - attributes, - key_buffer, key_buffer_size, - alg, hash, hash_length, - signature, signature_size, signature_length ) ); -} - -psa_status_t mbedtls_psa_rsa_verify_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - const uint8_t *signature, size_t signature_length ) -{ - return( rsa_verify_hash( - attributes, - key_buffer, key_buffer_size, - alg, hash, hash_length, - signature, signature_length ) ); -} -#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN) || - * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS) */ - -/* - * BEYOND THIS POINT, TEST DRIVER ENTRY POINTS ONLY. - */ - -#if defined(PSA_CRYPTO_DRIVER_TEST) - -#if defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_KEY_PAIR) || \ - defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_PUBLIC_KEY) - -psa_status_t mbedtls_transparent_test_driver_rsa_import_key( - const psa_key_attributes_t *attributes, - const uint8_t *data, size_t data_length, - uint8_t *key_buffer, size_t key_buffer_size, - size_t *key_buffer_length, size_t *bits ) -{ - return( rsa_import_key( attributes, data, data_length, - key_buffer, key_buffer_size, - key_buffer_length, bits ) ); -} - -psa_status_t mbedtls_transparent_test_driver_rsa_export_public_key( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ) -{ - return( rsa_export_public_key( attributes, key_buffer, key_buffer_size, - data, data_size, data_length ) ); -} - -#endif /* defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_KEY_PAIR) || - defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_PUBLIC_KEY) */ - -#if defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_KEY_PAIR) -psa_status_t mbedtls_transparent_test_driver_rsa_generate_key( - const psa_key_attributes_t *attributes, - uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length ) -{ - return( rsa_generate_key( attributes, key_buffer, key_buffer_size, - key_buffer_length ) ); -} -#endif /* defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_KEY_PAIR) */ - -#if defined(MBEDTLS_PSA_ACCEL_ALG_RSA_PKCS1V15_SIGN) || \ - defined(MBEDTLS_PSA_ACCEL_ALG_RSA_PSS) -psa_status_t mbedtls_transparent_test_driver_rsa_sign_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - uint8_t *signature, size_t signature_size, size_t *signature_length ) -{ -#if defined(MBEDTLS_RSA_C) && \ - (defined(MBEDTLS_PKCS1_V15) || defined(MBEDTLS_PKCS1_V21)) - return( rsa_sign_hash( - attributes, - key_buffer, key_buffer_size, - alg, hash, hash_length, - signature, signature_size, signature_length ) ); -#else - (void)attributes; - (void)key_buffer; - (void)key_buffer_size; - (void)alg; - (void)hash; - (void)hash_length; - (void)signature; - (void)signature_size; - (void)signature_length; - return( PSA_ERROR_NOT_SUPPORTED ); -#endif -} - -psa_status_t mbedtls_transparent_test_driver_rsa_verify_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - const uint8_t *signature, size_t signature_length ) -{ -#if defined(MBEDTLS_RSA_C) && \ - (defined(MBEDTLS_PKCS1_V15) || defined(MBEDTLS_PKCS1_V21)) - return( rsa_verify_hash( - attributes, - key_buffer, key_buffer_size, - alg, hash, hash_length, - signature, signature_length ) ); -#else - (void)attributes; - (void)key_buffer; - (void)key_buffer_size; - (void)alg; - (void)hash; - (void)hash_length; - (void)signature; - (void)signature_length; - return( PSA_ERROR_NOT_SUPPORTED ); -#endif -} -#endif /* defined(MBEDTLS_PSA_ACCEL_ALG_RSA_PKCS1V15_SIGN) || - * defined(MBEDTLS_PSA_ACCEL_ALG_RSA_PSS) */ - -#endif /* PSA_CRYPTO_DRIVER_TEST */ - -#endif /* MBEDTLS_PSA_CRYPTO_C */ diff --git a/third_party/mbedtls/psa_crypto_rsa.h b/third_party/mbedtls/psa_crypto_rsa.h deleted file mode 100644 index 0ea6ebf1a..000000000 --- a/third_party/mbedtls/psa_crypto_rsa.h +++ /dev/null @@ -1,252 +0,0 @@ -/* clang-format off */ - -/* - * PSA RSA layer on top of Mbed TLS crypto - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef PSA_CRYPTO_RSA_H -#define PSA_CRYPTO_RSA_H - -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/rsa.h" - -/** Load the contents of a key buffer into an internal RSA representation - * - * \param[in] type The type of key contained in \p data. - * \param[in] data The buffer from which to load the representation. - * \param[in] data_length The size in bytes of \p data. - * \param[out] p_rsa Returns a pointer to an RSA context on success. - * The caller is responsible for freeing both the - * contents of the context and the context itself - * when done. - */ -psa_status_t mbedtls_psa_rsa_load_representation( psa_key_type_t type, - const uint8_t *data, - size_t data_length, - mbedtls_rsa_context **p_rsa ); - -/** Import an RSA key in binary format. - * - * \note The signature of this function is that of a PSA driver - * import_key entry point. This function behaves as an import_key - * entry point as defined in the PSA driver interface specification for - * transparent drivers. - * - * \param[in] attributes The attributes for the key to import. - * \param[in] data The buffer containing the key data in import - * format. - * \param[in] data_length Size of the \p data buffer in bytes. - * \param[out] key_buffer The buffer containing the key data in output - * format. - * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes. This - * size is greater or equal to \p data_length. - * \param[out] key_buffer_length The length of the data written in \p - * key_buffer in bytes. - * \param[out] bits The key size in number of bits. - * - * \retval #PSA_SUCCESS The RSA key was imported successfully. - * \retval #PSA_ERROR_INVALID_ARGUMENT - * The key data is not correctly formatted. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_CORRUPTION_DETECTED - */ -psa_status_t mbedtls_psa_rsa_import_key( - const psa_key_attributes_t *attributes, - const uint8_t *data, size_t data_length, - uint8_t *key_buffer, size_t key_buffer_size, - size_t *key_buffer_length, size_t *bits ); - -/** Export an RSA key to export representation - * - * \param[in] type The type of key (public/private) to export - * \param[in] rsa The internal RSA representation from which to export - * \param[out] data The buffer to export to - * \param[in] data_size The length of the buffer to export to - * \param[out] data_length The amount of bytes written to \p data - */ -psa_status_t mbedtls_psa_rsa_export_key( psa_key_type_t type, - mbedtls_rsa_context *rsa, - uint8_t *data, - size_t data_size, - size_t *data_length ); - -/** Export a public RSA key or the public part of an RSA key pair in binary - * format. - * - * \note The signature of this function is that of a PSA driver - * export_public_key entry point. This function behaves as an - * export_public_key entry point as defined in the PSA driver interface - * specification. - * - * \param[in] attributes The attributes for the key to export. - * \param[in] key_buffer Material or context of the key to export. - * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes. - * \param[out] data Buffer where the key data is to be written. - * \param[in] data_size Size of the \p data buffer in bytes. - * \param[out] data_length On success, the number of bytes written in - * \p data. - * - * \retval #PSA_SUCCESS The RSA public key was exported successfully. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_COMMUNICATION_FAILURE - * \retval #PSA_ERROR_HARDWARE_FAILURE - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - */ -psa_status_t mbedtls_psa_rsa_export_public_key( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ); - -/** - * \brief Generate an RSA key. - * - * \note The signature of the function is that of a PSA driver generate_key - * entry point. - * - * \param[in] attributes The attributes for the RSA key to generate. - * \param[out] key_buffer Buffer where the key data is to be written. - * \param[in] key_buffer_size Size of \p key_buffer in bytes. - * \param[out] key_buffer_length On success, the number of bytes written in - * \p key_buffer. - * - * \retval #PSA_SUCCESS - * The key was successfully generated. - * \retval #PSA_ERROR_NOT_SUPPORTED - * Key length or type not supported. - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of \p key_buffer is too small. - */ -psa_status_t mbedtls_psa_rsa_generate_key( - const psa_key_attributes_t *attributes, - uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length ); - -/** Sign an already-calculated hash with an RSA private key. - * - * \note The signature of this function is that of a PSA driver - * sign_hash entry point. This function behaves as a sign_hash - * entry point as defined in the PSA driver interface specification for - * transparent drivers. - * - * \param[in] attributes The attributes of the RSA key to use for the - * operation. - * \param[in] key_buffer The buffer containing the RSA key context. - * format. - * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes. - * \param[in] alg A signature algorithm that is compatible with - * an RSA key. - * \param[in] hash The hash or message to sign. - * \param[in] hash_length Size of the \p hash buffer in bytes. - * \param[out] signature Buffer where the signature is to be written. - * \param[in] signature_size Size of the \p signature buffer in bytes. - * \param[out] signature_length On success, the number of bytes - * that make up the returned signature value. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_BUFFER_TOO_SMALL - * The size of the \p signature buffer is too small. You can - * determine a sufficient buffer size by calling - * #PSA_SIGN_OUTPUT_SIZE(\c PSA_KEY_TYPE_RSA_KEY_PAIR, \c key_bits, - * \p alg) where \c key_bits is the bit-size of the RSA key. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_INSUFFICIENT_ENTROPY - */ -psa_status_t mbedtls_psa_rsa_sign_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - uint8_t *signature, size_t signature_size, size_t *signature_length ); - -/** - * \brief Verify the signature a hash or short message using a public RSA key. - * - * \note The signature of this function is that of a PSA driver - * verify_hash entry point. This function behaves as a verify_hash - * entry point as defined in the PSA driver interface specification for - * transparent drivers. - * - * \param[in] attributes The attributes of the RSA key to use for the - * operation. - * \param[in] key_buffer The buffer containing the RSA key context. - * format. - * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes. - * \param[in] alg A signature algorithm that is compatible with - * an RSA key. - * \param[in] hash The hash or message whose signature is to be - * verified. - * \param[in] hash_length Size of the \p hash buffer in bytes. - * \param[in] signature Buffer containing the signature to verify. - * \param[in] signature_length Size of the \p signature buffer in bytes. - * - * \retval #PSA_SUCCESS - * The signature is valid. - * \retval #PSA_ERROR_INVALID_SIGNATURE - * The calculation was performed successfully, but the passed - * signature is not a valid signature. - * \retval #PSA_ERROR_NOT_SUPPORTED - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - */ -psa_status_t mbedtls_psa_rsa_verify_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - const uint8_t *signature, size_t signature_length ); - -/* - * BEYOND THIS POINT, TEST DRIVER ENTRY POINTS ONLY. - */ - -#if defined(PSA_CRYPTO_DRIVER_TEST) - -psa_status_t mbedtls_transparent_test_driver_rsa_import_key( - const psa_key_attributes_t *attributes, - const uint8_t *data, size_t data_length, - uint8_t *key_buffer, size_t key_buffer_size, - size_t *key_buffer_length, size_t *bits ); - -psa_status_t mbedtls_transparent_test_driver_rsa_export_public_key( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - uint8_t *data, size_t data_size, size_t *data_length ); - -psa_status_t mbedtls_transparent_test_driver_rsa_generate_key( - const psa_key_attributes_t *attributes, - uint8_t *key, size_t key_size, size_t *key_length ); - -psa_status_t mbedtls_transparent_test_driver_rsa_sign_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - uint8_t *signature, size_t signature_size, size_t *signature_length ); - -psa_status_t mbedtls_transparent_test_driver_rsa_verify_hash( - const psa_key_attributes_t *attributes, - const uint8_t *key_buffer, size_t key_buffer_size, - psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, - const uint8_t *signature, size_t signature_length ); - -#endif /* PSA_CRYPTO_DRIVER_TEST */ - -#endif /* PSA_CRYPTO_RSA_H */ diff --git a/third_party/mbedtls/psa_crypto_se.c b/third_party/mbedtls/psa_crypto_se.c deleted file mode 100644 index e097a3596..000000000 --- a/third_party/mbedtls/psa_crypto_se.c +++ /dev/null @@ -1,382 +0,0 @@ -/* clang-format off */ - -/* - * PSA crypto support for secure element drivers - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - - -#include "third_party/mbedtls/crypto_se_driver.h" - -#include "third_party/mbedtls/psa_crypto_se.h" - -#if defined(MBEDTLS_PSA_ITS_FILE_C) -#include "third_party/mbedtls/psa_crypto_its.h" -#else /* Native ITS implementation */ -#include "third_party/mbedtls/error.h" -/* #include "third_party/mbedtls/internal_trusted_storage.h" */ -#endif - -#include "third_party/mbedtls/platform.h" -#if !defined(MBEDTLS_PLATFORM_C) -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - - - -/****************************************************************/ -/* Driver lookup */ -/****************************************************************/ - -/* This structure is identical to psa_drv_se_context_t declared in - * `crypto_se_driver.h`, except that some parts are writable here - * (non-const, or pointer to non-const). */ -typedef struct -{ - void *persistent_data; - size_t persistent_data_size; - uintptr_t transient_data; -} psa_drv_se_internal_context_t; - -struct psa_se_drv_table_entry_s -{ - psa_key_location_t location; - const psa_drv_se_t *methods; - union - { - psa_drv_se_internal_context_t internal; - psa_drv_se_context_t context; - } u; -}; - -static psa_se_drv_table_entry_t driver_table[PSA_MAX_SE_DRIVERS]; - -psa_se_drv_table_entry_t *psa_get_se_driver_entry( - psa_key_lifetime_t lifetime ) -{ - size_t i; - psa_key_location_t location = PSA_KEY_LIFETIME_GET_LOCATION( lifetime ); - /* In the driver table, location=0 means an entry that isn't used. - * No driver has a location of 0 because it's a reserved value - * (which designates transparent keys). Make sure we never return - * a driver entry for location 0. */ - if( location == 0 ) - return( NULL ); - for( i = 0; i < PSA_MAX_SE_DRIVERS; i++ ) - { - if( driver_table[i].location == location ) - return( &driver_table[i] ); - } - return( NULL ); -} - -const psa_drv_se_t *psa_get_se_driver_methods( - const psa_se_drv_table_entry_t *driver ) -{ - return( driver->methods ); -} - -psa_drv_se_context_t *psa_get_se_driver_context( - psa_se_drv_table_entry_t *driver ) -{ - return( &driver->u.context ); -} - -int psa_get_se_driver( psa_key_lifetime_t lifetime, - const psa_drv_se_t **p_methods, - psa_drv_se_context_t **p_drv_context) -{ - psa_se_drv_table_entry_t *driver = psa_get_se_driver_entry( lifetime ); - if( p_methods != NULL ) - *p_methods = ( driver ? driver->methods : NULL ); - if( p_drv_context != NULL ) - *p_drv_context = ( driver ? &driver->u.context : NULL ); - return( driver != NULL ); -} - - - -/****************************************************************/ -/* Persistent data management */ -/****************************************************************/ - -static psa_status_t psa_get_se_driver_its_file_uid( - const psa_se_drv_table_entry_t *driver, - psa_storage_uid_t *uid ) -{ - if( driver->location > PSA_MAX_SE_LOCATION ) - return( PSA_ERROR_NOT_SUPPORTED ); - -#if SIZE_MAX > UINT32_MAX - /* ITS file sizes are limited to 32 bits. */ - if( driver->u.internal.persistent_data_size > UINT32_MAX ) - return( PSA_ERROR_NOT_SUPPORTED ); -#endif - - /* See the documentation of PSA_CRYPTO_SE_DRIVER_ITS_UID_BASE. */ - *uid = PSA_CRYPTO_SE_DRIVER_ITS_UID_BASE + driver->location; - return( PSA_SUCCESS ); -} - -psa_status_t psa_load_se_persistent_data( - const psa_se_drv_table_entry_t *driver ) -{ - psa_status_t status; - psa_storage_uid_t uid; - size_t length; - - status = psa_get_se_driver_its_file_uid( driver, &uid ); - if( status != PSA_SUCCESS ) - return( status ); - - /* Read the amount of persistent data that the driver requests. - * If the data in storage is larger, it is truncated. If the data - * in storage is smaller, silently keep what is already at the end - * of the output buffer. */ - /* psa_get_se_driver_its_file_uid ensures that the size_t - * persistent_data_size is in range, but compilers don't know that, - * so cast to reassure them. */ - return( psa_its_get( uid, 0, - (uint32_t) driver->u.internal.persistent_data_size, - driver->u.internal.persistent_data, - &length ) ); -} - -psa_status_t psa_save_se_persistent_data( - const psa_se_drv_table_entry_t *driver ) -{ - psa_status_t status; - psa_storage_uid_t uid; - - status = psa_get_se_driver_its_file_uid( driver, &uid ); - if( status != PSA_SUCCESS ) - return( status ); - - /* psa_get_se_driver_its_file_uid ensures that the size_t - * persistent_data_size is in range, but compilers don't know that, - * so cast to reassure them. */ - return( psa_its_set( uid, - (uint32_t) driver->u.internal.persistent_data_size, - driver->u.internal.persistent_data, - 0 ) ); -} - -psa_status_t psa_destroy_se_persistent_data( psa_key_location_t location ) -{ - psa_storage_uid_t uid; - if( location > PSA_MAX_SE_LOCATION ) - return( PSA_ERROR_NOT_SUPPORTED ); - uid = PSA_CRYPTO_SE_DRIVER_ITS_UID_BASE + location; - return( psa_its_remove( uid ) ); -} - -psa_status_t psa_find_se_slot_for_key( - const psa_key_attributes_t *attributes, - psa_key_creation_method_t method, - psa_se_drv_table_entry_t *driver, - psa_key_slot_number_t *slot_number ) -{ - psa_status_t status; - psa_key_location_t key_location = - PSA_KEY_LIFETIME_GET_LOCATION( psa_get_key_lifetime( attributes ) ); - - /* If the location is wrong, it's a bug in the library. */ - if( driver->location != key_location ) - return( PSA_ERROR_CORRUPTION_DETECTED ); - - /* If the driver doesn't support key creation in any way, give up now. */ - if( driver->methods->key_management == NULL ) - return( PSA_ERROR_NOT_SUPPORTED ); - - if( psa_get_key_slot_number( attributes, slot_number ) == PSA_SUCCESS ) - { - /* The application wants to use a specific slot. Allow it if - * the driver supports it. On a system with isolation, - * the crypto service must check that the application is - * permitted to request this slot. */ - psa_drv_se_validate_slot_number_t p_validate_slot_number = - driver->methods->key_management->p_validate_slot_number; - if( p_validate_slot_number == NULL ) - return( PSA_ERROR_NOT_SUPPORTED ); - status = p_validate_slot_number( &driver->u.context, - driver->u.internal.persistent_data, - attributes, method, - *slot_number ); - } - else if( method == PSA_KEY_CREATION_REGISTER ) - { - /* The application didn't specify a slot number. This doesn't - * make sense when registering a slot. */ - return( PSA_ERROR_INVALID_ARGUMENT ); - } - else - { - /* The application didn't tell us which slot to use. Let the driver - * choose. This is the normal case. */ - psa_drv_se_allocate_key_t p_allocate = - driver->methods->key_management->p_allocate; - if( p_allocate == NULL ) - return( PSA_ERROR_NOT_SUPPORTED ); - status = p_allocate( &driver->u.context, - driver->u.internal.persistent_data, - attributes, method, - slot_number ); - } - return( status ); -} - -psa_status_t psa_destroy_se_key( psa_se_drv_table_entry_t *driver, - psa_key_slot_number_t slot_number ) -{ - psa_status_t status; - psa_status_t storage_status; - /* Normally a missing method would mean that the action is not - * supported. But psa_destroy_key() is not supposed to return - * PSA_ERROR_NOT_SUPPORTED: if you can create a key, you should - * be able to destroy it. The only use case for a driver that - * does not have a way to destroy keys at all is if the keys are - * locked in a read-only state: we can use the keys but not - * destroy them. Hence, if the driver doesn't support destroying - * keys, it's really a lack of permission. */ - if( driver->methods->key_management == NULL || - driver->methods->key_management->p_destroy == NULL ) - return( PSA_ERROR_NOT_PERMITTED ); - status = driver->methods->key_management->p_destroy( - &driver->u.context, - driver->u.internal.persistent_data, - slot_number ); - storage_status = psa_save_se_persistent_data( driver ); - return( status == PSA_SUCCESS ? storage_status : status ); -} - -psa_status_t psa_init_all_se_drivers( void ) -{ - size_t i; - for( i = 0; i < PSA_MAX_SE_DRIVERS; i++ ) - { - psa_se_drv_table_entry_t *driver = &driver_table[i]; - if( driver->location == 0 ) - continue; /* skipping unused entry */ - const psa_drv_se_t *methods = psa_get_se_driver_methods( driver ); - if( methods->p_init != NULL ) - { - psa_status_t status = methods->p_init( - &driver->u.context, - driver->u.internal.persistent_data, - driver->location ); - if( status != PSA_SUCCESS ) - return( status ); - status = psa_save_se_persistent_data( driver ); - if( status != PSA_SUCCESS ) - return( status ); - } - } - return( PSA_SUCCESS ); -} - - - -/****************************************************************/ -/* Driver registration */ -/****************************************************************/ - -psa_status_t psa_register_se_driver( - psa_key_location_t location, - const psa_drv_se_t *methods) -{ - size_t i; - psa_status_t status; - - if( methods->hal_version != PSA_DRV_SE_HAL_VERSION ) - return( PSA_ERROR_NOT_SUPPORTED ); - /* Driver table entries are 0-initialized. 0 is not a valid driver - * location because it means a transparent key. */ -#if defined(static_assert) - static_assert( PSA_KEY_LOCATION_LOCAL_STORAGE == 0, - "Secure element support requires 0 to mean a local key" ); -#endif - if( location == PSA_KEY_LOCATION_LOCAL_STORAGE ) - return( PSA_ERROR_INVALID_ARGUMENT ); - if( location > PSA_MAX_SE_LOCATION ) - return( PSA_ERROR_NOT_SUPPORTED ); - - for( i = 0; i < PSA_MAX_SE_DRIVERS; i++ ) - { - if( driver_table[i].location == 0 ) - break; - /* Check that location isn't already in use up to the first free - * entry. Since entries are created in order and never deleted, - * there can't be a used entry after the first free entry. */ - if( driver_table[i].location == location ) - return( PSA_ERROR_ALREADY_EXISTS ); - } - if( i == PSA_MAX_SE_DRIVERS ) - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - - driver_table[i].location = location; - driver_table[i].methods = methods; - driver_table[i].u.internal.persistent_data_size = - methods->persistent_data_size; - - if( methods->persistent_data_size != 0 ) - { - driver_table[i].u.internal.persistent_data = - mbedtls_calloc( 1, methods->persistent_data_size ); - if( driver_table[i].u.internal.persistent_data == NULL ) - { - status = PSA_ERROR_INSUFFICIENT_MEMORY; - goto error; - } - /* Load the driver's persistent data. On first use, the persistent - * data does not exist in storage, and is initialized to - * all-bits-zero by the calloc call just above. */ - status = psa_load_se_persistent_data( &driver_table[i] ); - if( status != PSA_SUCCESS && status != PSA_ERROR_DOES_NOT_EXIST ) - goto error; - } - - return( PSA_SUCCESS ); - -error: - memset( &driver_table[i], 0, sizeof( driver_table[i] ) ); - return( status ); -} - -void psa_unregister_all_se_drivers( void ) -{ - size_t i; - for( i = 0; i < PSA_MAX_SE_DRIVERS; i++ ) - { - if( driver_table[i].u.internal.persistent_data != NULL ) - mbedtls_free( driver_table[i].u.internal.persistent_data ); - } - memset( driver_table, 0, sizeof( driver_table ) ); -} - - - -/****************************************************************/ -/* The end */ -/****************************************************************/ - -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ diff --git a/third_party/mbedtls/psa_crypto_se.h b/third_party/mbedtls/psa_crypto_se.h deleted file mode 100644 index 7542767d1..000000000 --- a/third_party/mbedtls/psa_crypto_se.h +++ /dev/null @@ -1,204 +0,0 @@ -/* clang-format off */ - -/* - * PSA crypto support for secure element drivers - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef PSA_CRYPTO_SE_H -#define PSA_CRYPTO_SE_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/crypto_se_driver.h" - -/** The maximum location value that this implementation supports - * for a secure element. - * - * This is not a characteristic that each PSA implementation has, but a - * limitation of the current implementation due to the constraints imposed - * by storage. See #PSA_CRYPTO_SE_DRIVER_ITS_UID_BASE. - * - * The minimum location value for a secure element is 1, like on any - * PSA implementation (0 means a transparent key). - */ -#define PSA_MAX_SE_LOCATION 255 - -/** The base of the range of ITS file identifiers for secure element - * driver persistent data. - * - * We use a slice of the implementation reserved range 0xffff0000..0xffffffff, - * specifically the range 0xfffffe00..0xfffffeff. The length of this range - * drives the value of #PSA_MAX_SE_LOCATION. The identifier 0xfffffe00 is - * actually not used since it corresponds to #PSA_KEY_LOCATION_LOCAL_STORAGE - * which doesn't have a driver. - */ -#define PSA_CRYPTO_SE_DRIVER_ITS_UID_BASE ( (psa_key_id_t) 0xfffffe00 ) - -/** The maximum number of registered secure element driver locations. */ -#define PSA_MAX_SE_DRIVERS 4 - -/** Unregister all secure element drivers. - * - * \warning Do not call this function while the library is in the initialized - * state. This function is only intended to be called at the end - * of mbedtls_psa_crypto_free(). - */ -void psa_unregister_all_se_drivers( void ); - -/** Initialize all secure element drivers. - * - * Called from psa_crypto_init(). - */ -psa_status_t psa_init_all_se_drivers( void ); - -/** A structure that describes a registered secure element driver. - * - * A secure element driver table entry contains a pointer to the - * driver's method table as well as the driver context structure. - */ -typedef struct psa_se_drv_table_entry_s psa_se_drv_table_entry_t; - -/** Return the secure element driver information for a lifetime value. - * - * \param lifetime The lifetime value to query. - * \param[out] p_methods On output, if there is a driver, - * \c *methods points to its method table. - * Otherwise \c *methods is \c NULL. - * \param[out] p_drv_context On output, if there is a driver, - * \c *drv_context points to its context - * structure. - * Otherwise \c *drv_context is \c NULL. - * - * \retval 1 - * \p lifetime corresponds to a registered driver. - * \retval 0 - * \p lifetime does not correspond to a registered driver. - */ -int psa_get_se_driver( psa_key_lifetime_t lifetime, - const psa_drv_se_t **p_methods, - psa_drv_se_context_t **p_drv_context); - -/** Return the secure element driver table entry for a lifetime value. - * - * \param lifetime The lifetime value to query. - * - * \return The driver table entry for \p lifetime, or - * \p NULL if \p lifetime does not correspond to a registered driver. - */ -psa_se_drv_table_entry_t *psa_get_se_driver_entry( - psa_key_lifetime_t lifetime ); - -/** Return the method table for a secure element driver. - * - * \param[in] driver The driver table entry to access, or \c NULL. - * - * \return The driver's method table. - * \c NULL if \p driver is \c NULL. - */ -const psa_drv_se_t *psa_get_se_driver_methods( - const psa_se_drv_table_entry_t *driver ); - -/** Return the context of a secure element driver. - * - * \param[in] driver The driver table entry to access, or \c NULL. - * - * \return A pointer to the driver context. - * \c NULL if \p driver is \c NULL. - */ -psa_drv_se_context_t *psa_get_se_driver_context( - psa_se_drv_table_entry_t *driver ); - -/** Find a free slot for a key that is to be created. - * - * This function calls the relevant method in the driver to find a suitable - * slot for a key with the given attributes. - * - * \param[in] attributes Metadata about the key that is about to be created. - * \param[in] driver The driver table entry to query. - * \param[out] slot_number On success, a slot number that is free in this - * secure element. - */ -psa_status_t psa_find_se_slot_for_key( - const psa_key_attributes_t *attributes, - psa_key_creation_method_t method, - psa_se_drv_table_entry_t *driver, - psa_key_slot_number_t *slot_number ); - -/** Destoy a key in a secure element. - * - * This function calls the relevant driver method to destroy a key - * and updates the driver's persistent data. - */ -psa_status_t psa_destroy_se_key( psa_se_drv_table_entry_t *driver, - psa_key_slot_number_t slot_number ); - -/** Load the persistent data of a secure element driver. - * - * \param driver The driver table entry containing the persistent - * data to load from storage. - * - * \return #PSA_SUCCESS - * \return #PSA_ERROR_NOT_SUPPORTED - * \return #PSA_ERROR_DOES_NOT_EXIST - * \return #PSA_ERROR_STORAGE_FAILURE - * \return #PSA_ERROR_DATA_CORRUPT - * \return #PSA_ERROR_INVALID_ARGUMENT - */ -psa_status_t psa_load_se_persistent_data( - const psa_se_drv_table_entry_t *driver ); - -/** Save the persistent data of a secure element driver. - * - * \param[in] driver The driver table entry containing the persistent - * data to save to storage. - * - * \return #PSA_SUCCESS - * \return #PSA_ERROR_NOT_SUPPORTED - * \return #PSA_ERROR_NOT_PERMITTED - * \return #PSA_ERROR_NOT_SUPPORTED - * \return #PSA_ERROR_INSUFFICIENT_STORAGE - * \return #PSA_ERROR_STORAGE_FAILURE - * \return #PSA_ERROR_INVALID_ARGUMENT - */ -psa_status_t psa_save_se_persistent_data( - const psa_se_drv_table_entry_t *driver ); - -/** Destroy the persistent data of a secure element driver. - * - * This is currently only used for testing. - * - * \param[in] location The location identifier for the driver whose - * persistent data is to be erased. - */ -psa_status_t psa_destroy_se_persistent_data( psa_key_location_t location ); - - -/** The storage representation of a key whose data is in a secure element. - */ -typedef struct -{ - uint8_t slot_number[sizeof( psa_key_slot_number_t )]; -} psa_se_key_data_storage_t; - -#endif /* PSA_CRYPTO_SE_H */ diff --git a/third_party/mbedtls/psa_crypto_service_integration.h b/third_party/mbedtls/psa_crypto_service_integration.h deleted file mode 100644 index 32eda2b72..000000000 --- a/third_party/mbedtls/psa_crypto_service_integration.h +++ /dev/null @@ -1,41 +0,0 @@ -/* clang-format off */ - -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef PSA_CRYPTO_SERVICE_INTEGRATION_H -#define PSA_CRYPTO_SERVICE_INTEGRATION_H - -/* - * When MBEDTLS_PSA_CRYPTO_SPM is defined, the code is being built for SPM - * (Secure Partition Manager) integration which separates the code into two - * parts: NSPE (Non-Secure Processing Environment) and SPE (Secure Processing - * Environment). When building for the SPE, an additional header file should be - * included. - */ -#if defined(MBEDTLS_PSA_CRYPTO_SPM) -/* - * PSA_CRYPTO_SECURE means that the file which included this file is being - * compiled for SPE. The files crypto_structs.h and crypto_types.h have - * different implementations for NSPE and SPE and are compiled according to this - * flag. - */ -#define PSA_CRYPTO_SECURE 1 -/* #include "third_party/mbedtls/crypto_spe.h" */ -#endif // MBEDTLS_PSA_CRYPTO_SPM - -#endif // PSA_CRYPTO_SERVICE_INTEGRATION_H diff --git a/third_party/mbedtls/psa_crypto_slot_management.c b/third_party/mbedtls/psa_crypto_slot_management.c deleted file mode 100644 index 9cdf788e0..000000000 --- a/third_party/mbedtls/psa_crypto_slot_management.c +++ /dev/null @@ -1,487 +0,0 @@ -/* clang-format off */ - -/* - * PSA crypto layer on top of Mbed TLS crypto - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_PSA_CRYPTO_C) - -#include "third_party/mbedtls/psa_crypto_service_integration.h" -#include "third_party/mbedtls/crypto.h" - -#include "third_party/mbedtls/psa_crypto_core.h" -#include "third_party/mbedtls/psa_crypto_slot_management.h" -#include "third_party/mbedtls/psa_crypto_storage.h" -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) -#include "third_party/mbedtls/psa_crypto_se.h" -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - -#define ARRAY_LENGTH( array ) ( sizeof( array ) / sizeof( *( array ) ) ) - -typedef struct -{ - psa_key_slot_t key_slots[MBEDTLS_PSA_KEY_SLOT_COUNT]; - unsigned key_slots_initialized : 1; -} psa_global_data_t; - -static psa_global_data_t global_data; - -psa_status_t psa_validate_key_id( - mbedtls_svc_key_id_t key, int vendor_ok ) -{ - psa_key_id_t key_id = MBEDTLS_SVC_KEY_ID_GET_KEY_ID( key ); - - if( ( PSA_KEY_ID_USER_MIN <= key_id ) && - ( key_id <= PSA_KEY_ID_USER_MAX ) ) - return( PSA_SUCCESS ); - - if( vendor_ok && - ( PSA_KEY_ID_VENDOR_MIN <= key_id ) && - ( key_id <= PSA_KEY_ID_VENDOR_MAX ) ) - return( PSA_SUCCESS ); - - return( PSA_ERROR_INVALID_HANDLE ); -} - -/** Get the description in memory of a key given its identifier and lock it. - * - * The descriptions of volatile keys and loaded persistent keys are - * stored in key slots. This function returns a pointer to the key slot - * containing the description of a key given its identifier. - * - * The function searches the key slots containing the description of the key - * with \p key identifier. The function does only read accesses to the key - * slots. The function does not load any persistent key thus does not access - * any storage. - * - * For volatile key identifiers, only one key slot is queried as a volatile - * key with identifier key_id can only be stored in slot of index - * ( key_id - #PSA_KEY_ID_VOLATILE_MIN ). - * - * On success, the function locks the key slot. It is the responsibility of - * the caller to unlock the key slot when it does not access it anymore. - * - * \param key Key identifier to query. - * \param[out] p_slot On success, `*p_slot` contains a pointer to the - * key slot containing the description of the key - * identified by \p key. - * - * \retval #PSA_SUCCESS - * The pointer to the key slot containing the description of the key - * identified by \p key was returned. - * \retval #PSA_ERROR_INVALID_HANDLE - * \p key is not a valid key identifier. - * \retval #PSA_ERROR_DOES_NOT_EXIST - * There is no key with key identifier \p key in the key slots. - */ -static psa_status_t psa_get_and_lock_key_slot_in_memory( - mbedtls_svc_key_id_t key, psa_key_slot_t **p_slot ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - psa_key_id_t key_id = MBEDTLS_SVC_KEY_ID_GET_KEY_ID( key ); - size_t slot_idx; - psa_key_slot_t *slot = NULL; - - if( psa_key_id_is_volatile( key_id ) ) - { - slot = &global_data.key_slots[ key_id - PSA_KEY_ID_VOLATILE_MIN ]; - - /* - * Check if both the PSA key identifier key_id and the owner - * identifier of key match those of the key slot. - * - * Note that, if the key slot is not occupied, its PSA key identifier - * is equal to zero. This is an invalid value for a PSA key identifier - * and thus cannot be equal to the valid PSA key identifier key_id. - */ - status = mbedtls_svc_key_id_equal( key, slot->attr.id ) ? - PSA_SUCCESS : PSA_ERROR_DOES_NOT_EXIST; - } - else - { - status = psa_validate_key_id( key, 1 ); - if( status != PSA_SUCCESS ) - return( status ); - - for( slot_idx = 0; slot_idx < MBEDTLS_PSA_KEY_SLOT_COUNT; slot_idx++ ) - { - slot = &global_data.key_slots[ slot_idx ]; - if( mbedtls_svc_key_id_equal( key, slot->attr.id ) ) - break; - } - status = ( slot_idx < MBEDTLS_PSA_KEY_SLOT_COUNT ) ? - PSA_SUCCESS : PSA_ERROR_DOES_NOT_EXIST; - } - - if( status == PSA_SUCCESS ) - { - status = psa_lock_key_slot( slot ); - if( status == PSA_SUCCESS ) - *p_slot = slot; - } - - return( status ); -} - -psa_status_t psa_initialize_key_slots( void ) -{ - /* Nothing to do: program startup and psa_wipe_all_key_slots() both - * guarantee that the key slots are initialized to all-zero, which - * means that all the key slots are in a valid, empty state. */ - global_data.key_slots_initialized = 1; - return( PSA_SUCCESS ); -} - -void psa_wipe_all_key_slots( void ) -{ - size_t slot_idx; - - for( slot_idx = 0; slot_idx < MBEDTLS_PSA_KEY_SLOT_COUNT; slot_idx++ ) - { - psa_key_slot_t *slot = &global_data.key_slots[ slot_idx ]; - slot->lock_count = 1; - (void) psa_wipe_key_slot( slot ); - } - global_data.key_slots_initialized = 0; -} - -psa_status_t psa_get_empty_key_slot( psa_key_id_t *volatile_key_id, - psa_key_slot_t **p_slot ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - size_t slot_idx; - psa_key_slot_t *selected_slot, *unlocked_persistent_key_slot; - - if( ! global_data.key_slots_initialized ) - { - status = PSA_ERROR_BAD_STATE; - goto error; - } - - selected_slot = unlocked_persistent_key_slot = NULL; - for( slot_idx = 0; slot_idx < MBEDTLS_PSA_KEY_SLOT_COUNT; slot_idx++ ) - { - psa_key_slot_t *slot = &global_data.key_slots[ slot_idx ]; - if( ! psa_is_key_slot_occupied( slot ) ) - { - selected_slot = slot; - break; - } - - if( ( unlocked_persistent_key_slot == NULL ) && - ( ! PSA_KEY_LIFETIME_IS_VOLATILE( slot->attr.lifetime ) ) && - ( ! psa_is_key_slot_locked( slot ) ) ) - unlocked_persistent_key_slot = slot; - } - - /* - * If there is no unused key slot and there is at least one unlocked key - * slot containing the description of a persistent key, recycle the first - * such key slot we encountered. If we later need to operate on the - * persistent key we are evicting now, we will reload its description from - * storage. - */ - if( ( selected_slot == NULL ) && - ( unlocked_persistent_key_slot != NULL ) ) - { - selected_slot = unlocked_persistent_key_slot; - selected_slot->lock_count = 1; - psa_wipe_key_slot( selected_slot ); - } - - if( selected_slot != NULL ) - { - status = psa_lock_key_slot( selected_slot ); - if( status != PSA_SUCCESS ) - goto error; - - *volatile_key_id = PSA_KEY_ID_VOLATILE_MIN + - ( (psa_key_id_t)( selected_slot - global_data.key_slots ) ); - *p_slot = selected_slot; - - return( PSA_SUCCESS ); - } - status = PSA_ERROR_INSUFFICIENT_MEMORY; - -error: - *p_slot = NULL; - *volatile_key_id = 0; - - return( status ); -} - -#if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) -static psa_status_t psa_load_persistent_key_into_slot( psa_key_slot_t *slot ) -{ - psa_status_t status = PSA_SUCCESS; - uint8_t *key_data = NULL; - size_t key_data_length = 0; - - status = psa_load_persistent_key( &slot->attr, - &key_data, &key_data_length ); - if( status != PSA_SUCCESS ) - goto exit; - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - /* Special handling is required for loading keys associated with a - * dynamically registered SE interface. */ - const psa_drv_se_t *drv; - psa_drv_se_context_t *drv_context; - if( psa_get_se_driver( slot->attr.lifetime, &drv, &drv_context ) ) - { - psa_se_key_data_storage_t *data; - - if( key_data_length != sizeof( *data ) ) - { - status = PSA_ERROR_DATA_INVALID; - goto exit; - } - data = (psa_se_key_data_storage_t *) key_data; - status = psa_copy_key_material_into_slot( - slot, data->slot_number, sizeof( data->slot_number ) ); - goto exit; - } -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - - status = psa_copy_key_material_into_slot( slot, key_data, key_data_length ); - -exit: - psa_free_persistent_key_data( key_data, key_data_length ); - return( status ); -} -#endif /* MBEDTLS_PSA_CRYPTO_STORAGE_C */ - -psa_status_t psa_get_and_lock_key_slot( mbedtls_svc_key_id_t key, - psa_key_slot_t **p_slot ) -{ - psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - - *p_slot = NULL; - if( ! global_data.key_slots_initialized ) - return( PSA_ERROR_BAD_STATE ); - - /* - * On success, the pointer to the slot is passed directly to the caller - * thus no need to unlock the key slot here. - */ - status = psa_get_and_lock_key_slot_in_memory( key, p_slot ); - if( status != PSA_ERROR_DOES_NOT_EXIST ) - return( status ); - -#if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) - psa_key_id_t volatile_key_id; - - status = psa_get_empty_key_slot( &volatile_key_id, p_slot ); - if( status != PSA_SUCCESS ) - return( status ); - - (*p_slot)->attr.lifetime = PSA_KEY_LIFETIME_PERSISTENT; - (*p_slot)->attr.id = key; - - status = psa_load_persistent_key_into_slot( *p_slot ); - if( status != PSA_SUCCESS ) - psa_wipe_key_slot( *p_slot ); - - return( status ); -#else - return( PSA_ERROR_DOES_NOT_EXIST ); -#endif /* defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) */ - -} - -psa_status_t psa_unlock_key_slot( psa_key_slot_t *slot ) -{ - if( slot == NULL ) - return( PSA_SUCCESS ); - - if( slot->lock_count > 0 ) - { - slot->lock_count--; - return( PSA_SUCCESS ); - } - - /* - * As the return error code may not be handled in case of multiple errors, - * do our best to report if the lock counter is equal to zero: if - * available call MBEDTLS_PARAM_FAILED that may terminate execution (if - * called as part of the execution of a unit test suite this will stop the - * test suite execution). - */ -#ifdef MBEDTLS_CHECK_PARAMS - MBEDTLS_PARAM_FAILED( slot->lock_count > 0 ); -#endif - - return( PSA_ERROR_CORRUPTION_DETECTED ); -} - -psa_status_t psa_validate_key_location( psa_key_lifetime_t lifetime, - psa_se_drv_table_entry_t **p_drv ) -{ - if ( psa_key_lifetime_is_external( lifetime ) ) - { -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - /* Check whether a driver is registered against this lifetime */ - psa_se_drv_table_entry_t *driver = psa_get_se_driver_entry( lifetime ); - if( driver != NULL ) - { - if (p_drv != NULL) - *p_drv = driver; - return( PSA_SUCCESS ); - } -#else /* MBEDTLS_PSA_CRYPTO_SE_C */ - (void) p_drv; -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ - -#if defined(MBEDTLS_PSA_CRYPTO_DRIVERS) - /* Key location for external keys gets checked by the wrapper */ - return( PSA_SUCCESS ); -#else /* MBEDTLS_PSA_CRYPTO_DRIVERS */ - /* No support for external lifetimes at all, or dynamic interface - * did not find driver for requested lifetime. */ - return( PSA_ERROR_INVALID_ARGUMENT ); -#endif /* MBEDTLS_PSA_CRYPTO_DRIVERS */ - } - else - /* Local/internal keys are always valid */ - return( PSA_SUCCESS ); -} - -psa_status_t psa_validate_key_persistence( psa_key_lifetime_t lifetime ) -{ - if ( PSA_KEY_LIFETIME_IS_VOLATILE( lifetime ) ) - { - /* Volatile keys are always supported */ - return( PSA_SUCCESS ); - } - else - { - /* Persistent keys require storage support */ -#if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) - return( PSA_SUCCESS ); -#else /* MBEDTLS_PSA_CRYPTO_STORAGE_C */ - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* !MBEDTLS_PSA_CRYPTO_STORAGE_C */ - } -} - -psa_status_t psa_open_key( mbedtls_svc_key_id_t key, psa_key_handle_t *handle ) -{ -#if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) - psa_status_t status; - psa_key_slot_t *slot; - - status = psa_get_and_lock_key_slot( key, &slot ); - if( status != PSA_SUCCESS ) - { - *handle = PSA_KEY_HANDLE_INIT; - return( status ); - } - - *handle = key; - - return( psa_unlock_key_slot( slot ) ); - -#else /* defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) */ - (void) key; - *handle = PSA_KEY_HANDLE_INIT; - return( PSA_ERROR_NOT_SUPPORTED ); -#endif /* !defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) */ -} - -psa_status_t psa_close_key( psa_key_handle_t handle ) -{ - psa_status_t status; - psa_key_slot_t *slot; - - if( psa_key_handle_is_null( handle ) ) - return( PSA_SUCCESS ); - - status = psa_get_and_lock_key_slot_in_memory( handle, &slot ); - if( status != PSA_SUCCESS ) - return( status ); - - if( slot->lock_count <= 1 ) - return( psa_wipe_key_slot( slot ) ); - else - return( psa_unlock_key_slot( slot ) ); -} - -psa_status_t psa_purge_key( mbedtls_svc_key_id_t key ) -{ - psa_status_t status; - psa_key_slot_t *slot; - - status = psa_get_and_lock_key_slot_in_memory( key, &slot ); - if( status != PSA_SUCCESS ) - return( status ); - - if( ( ! PSA_KEY_LIFETIME_IS_VOLATILE( slot->attr.lifetime ) ) && - ( slot->lock_count <= 1 ) ) - return( psa_wipe_key_slot( slot ) ); - else - return( psa_unlock_key_slot( slot ) ); -} - -void mbedtls_psa_get_stats( mbedtls_psa_stats_t *stats ) -{ - size_t slot_idx; - - memset( stats, 0, sizeof( *stats ) ); - - for( slot_idx = 0; slot_idx < MBEDTLS_PSA_KEY_SLOT_COUNT; slot_idx++ ) - { - const psa_key_slot_t *slot = &global_data.key_slots[ slot_idx ]; - if( psa_is_key_slot_locked( slot ) ) - { - ++stats->locked_slots; - } - if( ! psa_is_key_slot_occupied( slot ) ) - { - ++stats->empty_slots; - continue; - } - if( slot->attr.lifetime == PSA_KEY_LIFETIME_VOLATILE ) - ++stats->volatile_slots; - else if( slot->attr.lifetime == PSA_KEY_LIFETIME_PERSISTENT ) - { - psa_key_id_t id = MBEDTLS_SVC_KEY_ID_GET_KEY_ID( slot->attr.id ); - ++stats->persistent_slots; - if( id > stats->max_open_internal_key_id ) - stats->max_open_internal_key_id = id; - } - else - { - psa_key_id_t id = MBEDTLS_SVC_KEY_ID_GET_KEY_ID( slot->attr.id ); - ++stats->external_slots; - if( id > stats->max_open_external_key_id ) - stats->max_open_external_key_id = id; - } - } -} - -#endif /* MBEDTLS_PSA_CRYPTO_C */ diff --git a/third_party/mbedtls/psa_crypto_slot_management.h b/third_party/mbedtls/psa_crypto_slot_management.h deleted file mode 100644 index eab95e569..000000000 --- a/third_party/mbedtls/psa_crypto_slot_management.h +++ /dev/null @@ -1,228 +0,0 @@ -/* clang-format off */ - -/* - * PSA crypto layer on top of Mbed TLS crypto - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef PSA_CRYPTO_SLOT_MANAGEMENT_H -#define PSA_CRYPTO_SLOT_MANAGEMENT_H - -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/psa_crypto_core.h" -#include "libc/limits.h" -#include "third_party/mbedtls/psa_crypto_se.h" - -/** Range of volatile key identifiers. - * - * The last #MBEDTLS_PSA_KEY_SLOT_COUNT identifiers of the implementation - * range of key identifiers are reserved for volatile key identifiers. - * A volatile key identifier is equal to #PSA_KEY_ID_VOLATILE_MIN plus the - * index of the key slot containing the volatile key definition. - */ - -/** The minimum value for a volatile key identifier. - */ -#define PSA_KEY_ID_VOLATILE_MIN ( PSA_KEY_ID_VENDOR_MAX - \ - MBEDTLS_PSA_KEY_SLOT_COUNT + 1 ) - -/** The maximum value for a volatile key identifier. - */ -#define PSA_KEY_ID_VOLATILE_MAX PSA_KEY_ID_VENDOR_MAX - -/** Test whether a key identifier is a volatile key identifier. - * - * \param key_id Key identifier to test. - * - * \retval 1 - * The key identifier is a volatile key identifier. - * \retval 0 - * The key identifier is not a volatile key identifier. - */ -static inline int psa_key_id_is_volatile( psa_key_id_t key_id ) -{ - return( ( key_id >= PSA_KEY_ID_VOLATILE_MIN ) && - ( key_id <= PSA_KEY_ID_VOLATILE_MAX ) ); -} - -/** Get the description of a key given its identifier and lock it. - * - * The descriptions of volatile keys and loaded persistent keys are stored in - * key slots. This function returns a pointer to the key slot containing the - * description of a key given its identifier. - * - * In case of a persistent key, the function loads the description of the key - * into a key slot if not already done. - * - * On success, the returned key slot is locked. It is the responsibility of - * the caller to unlock the key slot when it does not access it anymore. - * - * \param key Key identifier to query. - * \param[out] p_slot On success, `*p_slot` contains a pointer to the - * key slot containing the description of the key - * identified by \p key. - * - * \retval #PSA_SUCCESS - * \p *p_slot contains a pointer to the key slot containing the - * description of the key identified by \p key. - * The key slot counter has been incremented. - * \retval #PSA_ERROR_BAD_STATE - * The library has not been initialized. - * \retval #PSA_ERROR_INVALID_HANDLE - * \p key is not a valid key identifier. - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \p key is a persistent key identifier. The implementation does not - * have sufficient resources to load the persistent key. This can be - * due to a lack of empty key slot, or available memory. - * \retval #PSA_ERROR_DOES_NOT_EXIST - * There is no key with key identifier \p key. - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_DATA_CORRUPT - */ -psa_status_t psa_get_and_lock_key_slot( mbedtls_svc_key_id_t key, - psa_key_slot_t **p_slot ); - -/** Initialize the key slot structures. - * - * \retval #PSA_SUCCESS - * Currently this function always succeeds. - */ -psa_status_t psa_initialize_key_slots( void ); - -/** Delete all data from key slots in memory. - * - * This does not affect persistent storage. */ -void psa_wipe_all_key_slots( void ); - -/** Find a free key slot. - * - * This function returns a key slot that is available for use and is in its - * ground state (all-bits-zero). On success, the key slot is locked. It is - * the responsibility of the caller to unlock the key slot when it does not - * access it anymore. - * - * \param[out] volatile_key_id On success, volatile key identifier - * associated to the returned slot. - * \param[out] p_slot On success, a pointer to the slot. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_BAD_STATE - */ -psa_status_t psa_get_empty_key_slot( psa_key_id_t *volatile_key_id, - psa_key_slot_t **p_slot ); - -/** Lock a key slot. - * - * This function increments the key slot lock counter by one. - * - * \param[in] slot The key slot. - * - * \retval #PSA_SUCCESS - The key slot lock counter was incremented. - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * The lock counter already reached its maximum value and was not - * increased. - */ -static inline psa_status_t psa_lock_key_slot( psa_key_slot_t *slot ) -{ - if( slot->lock_count >= SIZE_MAX ) - return( PSA_ERROR_CORRUPTION_DETECTED ); - - slot->lock_count++; - - return( PSA_SUCCESS ); -} - -/** Unlock a key slot. - * - * This function decrements the key slot lock counter by one. - * - * \note To ease the handling of errors in retrieving a key slot - * a NULL input pointer is valid, and the function returns - * successfully without doing anything in that case. - * - * \param[in] slot The key slot. - * \retval #PSA_SUCCESS - * \p slot is NULL or the key slot lock counter has been - * decremented successfully. - * \retval #PSA_ERROR_CORRUPTION_DETECTED - * The lock counter was equal to 0. - * - */ -psa_status_t psa_unlock_key_slot( psa_key_slot_t *slot ); - -/** Test whether a lifetime designates a key in an external cryptoprocessor. - * - * \param lifetime The lifetime to test. - * - * \retval 1 - * The lifetime designates an external key. There should be a - * registered driver for this lifetime, otherwise the key cannot - * be created or manipulated. - * \retval 0 - * The lifetime designates a key that is volatile or in internal - * storage. - */ -static inline int psa_key_lifetime_is_external( psa_key_lifetime_t lifetime ) -{ - return( PSA_KEY_LIFETIME_GET_LOCATION( lifetime ) - != PSA_KEY_LOCATION_LOCAL_STORAGE ); -} - -/** Validate a key's location. - * - * This function checks whether the key's attributes point to a location that - * is known to the PSA Core, and returns the driver function table if the key - * is to be found in an external location. - * - * \param[in] lifetime The key lifetime attribute. - * \param[out] p_drv On success, when a key is located in external - * storage, returns a pointer to the driver table - * associated with the key's storage location. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INVALID_ARGUMENT - */ -psa_status_t psa_validate_key_location( psa_key_lifetime_t lifetime, - psa_se_drv_table_entry_t **p_drv ); - -/** Validate the persistence of a key. - * - * \param[in] lifetime The key lifetime attribute. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INVALID_ARGUMENT The key is persistent but persistent - * keys are not supported. - */ -psa_status_t psa_validate_key_persistence( psa_key_lifetime_t lifetime ); - -/** Validate a key identifier. - * - * \param[in] key The key identifier. - * \param[in] vendor_ok Non-zero to indicate that key identifiers in the - * vendor range are allowed, volatile key identifiers - * excepted \c 0 otherwise. - * - * \retval #PSA_SUCCESS The identifier is valid. - * \retval #PSA_ERROR_INVALID_ARGUMENT The key identifier is not valid. - */ -psa_status_t psa_validate_key_id( mbedtls_svc_key_id_t key, int vendor_ok ); - -#endif /* PSA_CRYPTO_SLOT_MANAGEMENT_H */ diff --git a/third_party/mbedtls/psa_crypto_storage.c b/third_party/mbedtls/psa_crypto_storage.c deleted file mode 100644 index e5d2c5f24..000000000 --- a/third_party/mbedtls/psa_crypto_storage.c +++ /dev/null @@ -1,536 +0,0 @@ -/* clang-format off */ - -/* - * PSA persistent key storage - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#if defined(MBEDTLS_CONFIG_FILE) -#include MBEDTLS_CONFIG_FILE -#else -#include "third_party/mbedtls/config.h" -#endif - -#if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) - - -#include "third_party/mbedtls/psa_crypto_service_integration.h" -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/psa_crypto_storage.h" -#include "third_party/mbedtls/platform_util.h" - -#if defined(MBEDTLS_PSA_ITS_FILE_C) -#include "third_party/mbedtls/psa_crypto_its.h" -#else /* Native ITS implementation */ -#include "third_party/mbedtls/error.h" -/* #include "third_party/mbedtls/internal_trusted_storage.h" */ -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - - - -/****************************************************************/ -/* Key storage */ -/****************************************************************/ - -/* Determine a file name (ITS file identifier) for the given key identifier. - * The file name must be distinct from any file that is used for a purpose - * other than storing a key. Currently, the only such file is the random seed - * file whose name is PSA_CRYPTO_ITS_RANDOM_SEED_UID and whose value is - * 0xFFFFFF52. */ -static psa_storage_uid_t psa_its_identifier_of_slot( mbedtls_svc_key_id_t key ) -{ -#if defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER) - /* Encode the owner in the upper 32 bits. This means that if - * owner values are nonzero (as they are on a PSA platform), - * no key file will ever have a value less than 0x100000000, so - * the whole range 0..0xffffffff is available for non-key files. */ - uint32_t unsigned_owner_id = MBEDTLS_SVC_KEY_ID_GET_OWNER_ID( key ); - return( ( (uint64_t) unsigned_owner_id << 32 ) | - MBEDTLS_SVC_KEY_ID_GET_KEY_ID( key ) ); -#else - /* Use the key id directly as a file name. - * psa_is_key_id_valid() in psa_crypto_slot_management.c - * is responsible for ensuring that key identifiers do not have a - * value that is reserved for non-key files. */ - return( key ); -#endif -} - -/** - * \brief Load persistent data for the given key slot number. - * - * This function reads data from a storage backend and returns the data in a - * buffer. - * - * \param key Persistent identifier of the key to be loaded. This - * should be an occupied storage location. - * \param[out] data Buffer where the data is to be written. - * \param data_size Size of the \c data buffer in bytes. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_DATA_INVALID - * \retval #PSA_ERROR_DATA_CORRUPT - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_DOES_NOT_EXIST - */ -static psa_status_t psa_crypto_storage_load( - const mbedtls_svc_key_id_t key, uint8_t *data, size_t data_size ) -{ - psa_status_t status; - psa_storage_uid_t data_identifier = psa_its_identifier_of_slot( key ); - struct psa_storage_info_t data_identifier_info; - size_t data_length = 0; - - status = psa_its_get_info( data_identifier, &data_identifier_info ); - if( status != PSA_SUCCESS ) - return( status ); - - status = psa_its_get( data_identifier, 0, (uint32_t) data_size, data, &data_length ); - if( data_size != data_length ) - return( PSA_ERROR_DATA_INVALID ); - - return( status ); -} - -int psa_is_key_present_in_storage( const mbedtls_svc_key_id_t key ) -{ - psa_status_t ret; - psa_storage_uid_t data_identifier = psa_its_identifier_of_slot( key ); - struct psa_storage_info_t data_identifier_info; - - ret = psa_its_get_info( data_identifier, &data_identifier_info ); - - if( ret == PSA_ERROR_DOES_NOT_EXIST ) - return( 0 ); - return( 1 ); -} - -/** - * \brief Store persistent data for the given key slot number. - * - * This function stores the given data buffer to a persistent storage. - * - * \param key Persistent identifier of the key to be stored. This - * should be an unoccupied storage location. - * \param[in] data Buffer containing the data to be stored. - * \param data_length The number of bytes - * that make up the data. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INSUFFICIENT_STORAGE - * \retval #PSA_ERROR_ALREADY_EXISTS - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_DATA_INVALID - */ -static psa_status_t psa_crypto_storage_store( const mbedtls_svc_key_id_t key, - const uint8_t *data, - size_t data_length ) -{ - psa_status_t status; - psa_storage_uid_t data_identifier = psa_its_identifier_of_slot( key ); - struct psa_storage_info_t data_identifier_info; - - if( psa_is_key_present_in_storage( key ) == 1 ) - return( PSA_ERROR_ALREADY_EXISTS ); - - status = psa_its_set( data_identifier, (uint32_t) data_length, data, 0 ); - if( status != PSA_SUCCESS ) - { - return( PSA_ERROR_DATA_INVALID ); - } - - status = psa_its_get_info( data_identifier, &data_identifier_info ); - if( status != PSA_SUCCESS ) - { - goto exit; - } - - if( data_identifier_info.size != data_length ) - { - status = PSA_ERROR_DATA_INVALID; - goto exit; - } - -exit: - if( status != PSA_SUCCESS ) - { - /* Remove the file in case we managed to create it but something - * went wrong. It's ok if the file doesn't exist. If the file exists - * but the removal fails, we're already reporting an error so there's - * nothing else we can do. */ - (void) psa_its_remove( data_identifier ); - } - return( status ); -} - -psa_status_t psa_destroy_persistent_key( const mbedtls_svc_key_id_t key ) -{ - psa_status_t ret; - psa_storage_uid_t data_identifier = psa_its_identifier_of_slot( key ); - struct psa_storage_info_t data_identifier_info; - - ret = psa_its_get_info( data_identifier, &data_identifier_info ); - if( ret == PSA_ERROR_DOES_NOT_EXIST ) - return( PSA_SUCCESS ); - - if( psa_its_remove( data_identifier ) != PSA_SUCCESS ) - return( PSA_ERROR_DATA_INVALID ); - - ret = psa_its_get_info( data_identifier, &data_identifier_info ); - if( ret != PSA_ERROR_DOES_NOT_EXIST ) - return( PSA_ERROR_DATA_INVALID ); - - return( PSA_SUCCESS ); -} - -/** - * \brief Get data length for given key slot number. - * - * \param key Persistent identifier whose stored data length - * is to be obtained. - * \param[out] data_length The number of bytes that make up the data. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_DOES_NOT_EXIST - * \retval #PSA_ERROR_DATA_CORRUPT - */ -static psa_status_t psa_crypto_storage_get_data_length( - const mbedtls_svc_key_id_t key, - size_t *data_length ) -{ - psa_status_t status; - psa_storage_uid_t data_identifier = psa_its_identifier_of_slot( key ); - struct psa_storage_info_t data_identifier_info; - - status = psa_its_get_info( data_identifier, &data_identifier_info ); - if( status != PSA_SUCCESS ) - return( status ); - - *data_length = (size_t) data_identifier_info.size; - - return( PSA_SUCCESS ); -} - -/* - * 32-bit integer manipulation macros (little endian) - */ -#ifndef GET_UINT32_LE -#define GET_UINT32_LE( n, b, i ) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] ) \ - | ( (uint32_t) (b)[(i) + 1] << 8 ) \ - | ( (uint32_t) (b)[(i) + 2] << 16 ) \ - | ( (uint32_t) (b)[(i) + 3] << 24 ); \ -} -#endif - -#ifndef PUT_UINT32_LE -#define PUT_UINT32_LE( n, b, i ) \ -{ \ - (b)[(i) ] = (unsigned char) ( ( (n) ) & 0xFF ); \ - (b)[(i) + 1] = (unsigned char) ( ( (n) >> 8 ) & 0xFF ); \ - (b)[(i) + 2] = (unsigned char) ( ( (n) >> 16 ) & 0xFF ); \ - (b)[(i) + 3] = (unsigned char) ( ( (n) >> 24 ) & 0xFF ); \ -} -#endif - -/* - * 16-bit integer manipulation macros (little endian) - */ -#ifndef GET_UINT16_LE -#define GET_UINT16_LE( n, b, i ) \ -{ \ - (n) = ( (uint16_t) (b)[(i) ] ) \ - | ( (uint16_t) (b)[(i) + 1] << 8 ); \ -} -#endif - -#ifndef PUT_UINT16_LE -#define PUT_UINT16_LE( n, b, i ) \ -{ \ - (b)[(i) ] = (unsigned char) ( ( (n) ) & 0xFF ); \ - (b)[(i) + 1] = (unsigned char) ( ( (n) >> 8 ) & 0xFF ); \ -} -#endif - -/** - * Persistent key storage magic header. - */ -#define PSA_KEY_STORAGE_MAGIC_HEADER "PSA\0KEY" -#define PSA_KEY_STORAGE_MAGIC_HEADER_LENGTH ( sizeof( PSA_KEY_STORAGE_MAGIC_HEADER ) ) - -typedef struct { - uint8_t magic[PSA_KEY_STORAGE_MAGIC_HEADER_LENGTH]; - uint8_t version[4]; - uint8_t lifetime[sizeof( psa_key_lifetime_t )]; - uint8_t type[2]; - uint8_t bits[2]; - uint8_t policy[sizeof( psa_key_policy_t )]; - uint8_t data_len[4]; - uint8_t key_data[]; -} psa_persistent_key_storage_format; - -void psa_format_key_data_for_storage( const uint8_t *data, - const size_t data_length, - const psa_core_key_attributes_t *attr, - uint8_t *storage_data ) -{ - psa_persistent_key_storage_format *storage_format = - (psa_persistent_key_storage_format *) storage_data; - - memcpy( storage_format->magic, PSA_KEY_STORAGE_MAGIC_HEADER, PSA_KEY_STORAGE_MAGIC_HEADER_LENGTH ); - PUT_UINT32_LE( 0, storage_format->version, 0 ); - PUT_UINT32_LE( attr->lifetime, storage_format->lifetime, 0 ); - PUT_UINT16_LE( (uint16_t) attr->type, storage_format->type, 0 ); - PUT_UINT16_LE( (uint16_t) attr->bits, storage_format->bits, 0 ); - PUT_UINT32_LE( attr->policy.usage, storage_format->policy, 0 ); - PUT_UINT32_LE( attr->policy.alg, storage_format->policy, sizeof( uint32_t ) ); - PUT_UINT32_LE( attr->policy.alg2, storage_format->policy, 2 * sizeof( uint32_t ) ); - PUT_UINT32_LE( data_length, storage_format->data_len, 0 ); - memcpy( storage_format->key_data, data, data_length ); -} - -static psa_status_t check_magic_header( const uint8_t *data ) -{ - if( memcmp( data, PSA_KEY_STORAGE_MAGIC_HEADER, - PSA_KEY_STORAGE_MAGIC_HEADER_LENGTH ) != 0 ) - return( PSA_ERROR_DATA_INVALID ); - return( PSA_SUCCESS ); -} - -psa_status_t psa_parse_key_data_from_storage( const uint8_t *storage_data, - size_t storage_data_length, - uint8_t **key_data, - size_t *key_data_length, - psa_core_key_attributes_t *attr ) -{ - psa_status_t status; - const psa_persistent_key_storage_format *storage_format = - (const psa_persistent_key_storage_format *)storage_data; - uint32_t version; - - if( storage_data_length < sizeof(*storage_format) ) - return( PSA_ERROR_DATA_INVALID ); - - status = check_magic_header( storage_data ); - if( status != PSA_SUCCESS ) - return( status ); - - GET_UINT32_LE( version, storage_format->version, 0 ); - if( version != 0 ) - return( PSA_ERROR_DATA_INVALID ); - - GET_UINT32_LE( *key_data_length, storage_format->data_len, 0 ); - if( *key_data_length > ( storage_data_length - sizeof(*storage_format) ) || - *key_data_length > PSA_CRYPTO_MAX_STORAGE_SIZE ) - return( PSA_ERROR_DATA_INVALID ); - - if( *key_data_length == 0 ) - { - *key_data = NULL; - } - else - { - *key_data = mbedtls_calloc( 1, *key_data_length ); - if( *key_data == NULL ) - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - memcpy( *key_data, storage_format->key_data, *key_data_length ); - } - - GET_UINT32_LE( attr->lifetime, storage_format->lifetime, 0 ); - GET_UINT16_LE( attr->type, storage_format->type, 0 ); - GET_UINT16_LE( attr->bits, storage_format->bits, 0 ); - GET_UINT32_LE( attr->policy.usage, storage_format->policy, 0 ); - GET_UINT32_LE( attr->policy.alg, storage_format->policy, sizeof( uint32_t ) ); - GET_UINT32_LE( attr->policy.alg2, storage_format->policy, 2 * sizeof( uint32_t ) ); - - return( PSA_SUCCESS ); -} - -psa_status_t psa_save_persistent_key( const psa_core_key_attributes_t *attr, - const uint8_t *data, - const size_t data_length ) -{ - size_t storage_data_length; - uint8_t *storage_data; - psa_status_t status; - - /* All keys saved to persistent storage always have a key context */ - if( data == NULL || data_length == 0 ) - return( PSA_ERROR_INVALID_ARGUMENT ); - - if( data_length > PSA_CRYPTO_MAX_STORAGE_SIZE ) - return( PSA_ERROR_INSUFFICIENT_STORAGE ); - storage_data_length = data_length + sizeof( psa_persistent_key_storage_format ); - - storage_data = mbedtls_calloc( 1, storage_data_length ); - if( storage_data == NULL ) - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - - psa_format_key_data_for_storage( data, data_length, attr, storage_data ); - - status = psa_crypto_storage_store( attr->id, - storage_data, storage_data_length ); - - mbedtls_free( storage_data ); - - return( status ); -} - -void psa_free_persistent_key_data( uint8_t *key_data, size_t key_data_length ) -{ - if( key_data != NULL ) - { - mbedtls_platform_zeroize( key_data, key_data_length ); - } - mbedtls_free( key_data ); -} - -psa_status_t psa_load_persistent_key( psa_core_key_attributes_t *attr, - uint8_t **data, - size_t *data_length ) -{ - psa_status_t status = PSA_SUCCESS; - uint8_t *loaded_data; - size_t storage_data_length = 0; - mbedtls_svc_key_id_t key = attr->id; - - status = psa_crypto_storage_get_data_length( key, &storage_data_length ); - if( status != PSA_SUCCESS ) - return( status ); - - loaded_data = mbedtls_calloc( 1, storage_data_length ); - - if( loaded_data == NULL ) - return( PSA_ERROR_INSUFFICIENT_MEMORY ); - - status = psa_crypto_storage_load( key, loaded_data, storage_data_length ); - if( status != PSA_SUCCESS ) - goto exit; - - status = psa_parse_key_data_from_storage( loaded_data, storage_data_length, - data, data_length, attr ); - - /* All keys saved to persistent storage always have a key context */ - if( status == PSA_SUCCESS && - ( *data == NULL || *data_length == 0 ) ) - status = PSA_ERROR_STORAGE_FAILURE; - -exit: - mbedtls_free( loaded_data ); - return( status ); -} - - - -/****************************************************************/ -/* Transactions */ -/****************************************************************/ - -#if defined(PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS) - -psa_crypto_transaction_t psa_crypto_transaction; - -psa_status_t psa_crypto_save_transaction( void ) -{ - struct psa_storage_info_t p_info; - psa_status_t status; - status = psa_its_get_info( PSA_CRYPTO_ITS_TRANSACTION_UID, &p_info ); - if( status == PSA_SUCCESS ) - { - /* This shouldn't happen: we're trying to start a transaction while - * there is still a transaction that hasn't been replayed. */ - return( PSA_ERROR_CORRUPTION_DETECTED ); - } - else if( status != PSA_ERROR_DOES_NOT_EXIST ) - return( status ); - return( psa_its_set( PSA_CRYPTO_ITS_TRANSACTION_UID, - sizeof( psa_crypto_transaction ), - &psa_crypto_transaction, - 0 ) ); -} - -psa_status_t psa_crypto_load_transaction( void ) -{ - psa_status_t status; - size_t length; - status = psa_its_get( PSA_CRYPTO_ITS_TRANSACTION_UID, 0, - sizeof( psa_crypto_transaction ), - &psa_crypto_transaction, &length ); - if( status != PSA_SUCCESS ) - return( status ); - if( length != sizeof( psa_crypto_transaction ) ) - return( PSA_ERROR_DATA_INVALID ); - return( PSA_SUCCESS ); -} - -psa_status_t psa_crypto_stop_transaction( void ) -{ - psa_status_t status = psa_its_remove( PSA_CRYPTO_ITS_TRANSACTION_UID ); - /* Whether or not updating the storage succeeded, the transaction is - * finished now. It's too late to go back, so zero out the in-memory - * data. */ - memset( &psa_crypto_transaction, 0, sizeof( psa_crypto_transaction ) ); - return( status ); -} - -#endif /* PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS */ - - - -/****************************************************************/ -/* Random generator state */ -/****************************************************************/ - -#if defined(MBEDTLS_PSA_INJECT_ENTROPY) -psa_status_t mbedtls_psa_storage_inject_entropy( const unsigned char *seed, - size_t seed_size ) -{ - psa_status_t status; - struct psa_storage_info_t p_info; - - status = psa_its_get_info( PSA_CRYPTO_ITS_RANDOM_SEED_UID, &p_info ); - - if( PSA_ERROR_DOES_NOT_EXIST == status ) /* No seed exists */ - { - status = psa_its_set( PSA_CRYPTO_ITS_RANDOM_SEED_UID, seed_size, seed, 0 ); - } - else if( PSA_SUCCESS == status ) - { - /* You should not be here. Seed needs to be injected only once */ - status = PSA_ERROR_NOT_PERMITTED; - } - return( status ); -} -#endif /* MBEDTLS_PSA_INJECT_ENTROPY */ - - - -/****************************************************************/ -/* The end */ -/****************************************************************/ - -#endif /* MBEDTLS_PSA_CRYPTO_STORAGE_C */ diff --git a/third_party/mbedtls/psa_crypto_storage.h b/third_party/mbedtls/psa_crypto_storage.h deleted file mode 100644 index d38e16e97..000000000 --- a/third_party/mbedtls/psa_crypto_storage.h +++ /dev/null @@ -1,399 +0,0 @@ -/* clang-format off */ - -/** - * \file psa_crypto_storage.h - * - * \brief PSA cryptography module: Mbed TLS key storage - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef PSA_CRYPTO_STORAGE_H -#define PSA_CRYPTO_STORAGE_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/crypto_se_driver.h" - - -/* Limit the maximum key size in storage. This should have no effect - * since the key size is limited in memory. */ -#define PSA_CRYPTO_MAX_STORAGE_SIZE ( PSA_BITS_TO_BYTES( PSA_MAX_KEY_BITS ) ) -/* Sanity check: a file size must fit in 32 bits. Allow a generous - * 64kB of metadata. */ -#if PSA_CRYPTO_MAX_STORAGE_SIZE > 0xffff0000 -#error PSA_CRYPTO_MAX_STORAGE_SIZE > 0xffff0000 -#endif - -/** The maximum permitted persistent slot number. - * - * In Mbed Crypto 0.1.0b: - * - Using the file backend, all key ids are ok except 0. - * - Using the ITS backend, all key ids are ok except 0xFFFFFF52 - * (#PSA_CRYPTO_ITS_RANDOM_SEED_UID) for which the file contains the - * device's random seed (if this feature is enabled). - * - Only key ids from 1 to #MBEDTLS_PSA_KEY_SLOT_COUNT are actually used. - * - * Since we need to preserve the random seed, avoid using that key slot. - * Reserve a whole range of key slots just in case something else comes up. - * - * This limitation will probably become moot when we implement client - * separation for key storage. - */ -#define PSA_MAX_PERSISTENT_KEY_IDENTIFIER PSA_KEY_ID_VENDOR_MAX - -/** - * \brief Checks if persistent data is stored for the given key slot number - * - * This function checks if any key data or metadata exists for the key slot in - * the persistent storage. - * - * \param key Persistent identifier to check. - * - * \retval 0 - * No persistent data present for slot number - * \retval 1 - * Persistent data present for slot number - */ -int psa_is_key_present_in_storage( const mbedtls_svc_key_id_t key ); - -/** - * \brief Format key data and metadata and save to a location for given key - * slot. - * - * This function formats the key data and metadata and saves it to a - * persistent storage backend. The storage location corresponding to the - * key slot must be empty, otherwise this function will fail. This function - * should be called after loading the key into an internal slot to ensure the - * persistent key is not saved into a storage location corresponding to an - * already occupied non-persistent key, as well as ensuring the key data is - * validated. - * - * Note: This function will only succeed for key buffers which are not - * empty. If passed a NULL pointer or zero-length, the function will fail - * with #PSA_ERROR_INVALID_ARGUMENT. - * - * \param[in] attr The attributes of the key to save. - * The key identifier field in the attributes - * determines the key's location. - * \param[in] data Buffer containing the key data. - * \param data_length The number of bytes that make up the key data. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INVALID_ARGUMENT - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_INSUFFICIENT_STORAGE - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_ALREADY_EXISTS - * \retval #PSA_ERROR_DATA_INVALID - * \retval #PSA_ERROR_DATA_CORRUPT - */ -psa_status_t psa_save_persistent_key( const psa_core_key_attributes_t *attr, - const uint8_t *data, - const size_t data_length ); - -/** - * \brief Parses key data and metadata and load persistent key for given - * key slot number. - * - * This function reads from a storage backend, parses the key data and - * metadata and writes them to the appropriate output parameters. - * - * Note: This function allocates a buffer and returns a pointer to it through - * the data parameter. On successful return, the pointer is guaranteed to be - * valid and the buffer contains at least one byte of data. - * psa_free_persistent_key_data() must be called on the data buffer - * afterwards to zeroize and free this buffer. - * - * \param[in,out] attr On input, the key identifier field identifies - * the key to load. Other fields are ignored. - * On success, the attribute structure contains - * the key metadata that was loaded from storage. - * \param[out] data Pointer to an allocated key data buffer on return. - * \param[out] data_length The number of bytes that make up the key data. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_DATA_INVALID - * \retval #PSA_ERROR_DATA_CORRUPT - * \retval #PSA_ERROR_DOES_NOT_EXIST - */ -psa_status_t psa_load_persistent_key( psa_core_key_attributes_t *attr, - uint8_t **data, - size_t *data_length ); - -/** - * \brief Remove persistent data for the given key slot number. - * - * \param key Persistent identifier of the key to remove - * from persistent storage. - * - * \retval #PSA_SUCCESS - * The key was successfully removed, - * or the key did not exist. - * \retval #PSA_ERROR_DATA_INVALID - */ -psa_status_t psa_destroy_persistent_key( const mbedtls_svc_key_id_t key ); - -/** - * \brief Free the temporary buffer allocated by psa_load_persistent_key(). - * - * This function must be called at some point after psa_load_persistent_key() - * to zeroize and free the memory allocated to the buffer in that function. - * - * \param key_data Buffer for the key data. - * \param key_data_length Size of the key data buffer. - * - */ -void psa_free_persistent_key_data( uint8_t *key_data, size_t key_data_length ); - -/** - * \brief Formats key data and metadata for persistent storage - * - * \param[in] data Buffer containing the key data. - * \param data_length Length of the key data buffer. - * \param[in] attr The core attributes of the key. - * \param[out] storage_data Output buffer for the formatted data. - * - */ -void psa_format_key_data_for_storage( const uint8_t *data, - const size_t data_length, - const psa_core_key_attributes_t *attr, - uint8_t *storage_data ); - -/** - * \brief Parses persistent storage data into key data and metadata - * - * \param[in] storage_data Buffer for the storage data. - * \param storage_data_length Length of the storage data buffer - * \param[out] key_data On output, pointer to a newly allocated buffer - * containing the key data. This must be freed - * using psa_free_persistent_key_data() - * \param[out] key_data_length Length of the key data buffer - * \param[out] attr On success, the attribute structure is filled - * with the loaded key metadata. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_INSUFFICIENT_MEMORY - * \retval #PSA_ERROR_DATA_INVALID - */ -psa_status_t psa_parse_key_data_from_storage( const uint8_t *storage_data, - size_t storage_data_length, - uint8_t **key_data, - size_t *key_data_length, - psa_core_key_attributes_t *attr ); - -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) -/** This symbol is defined if transaction support is required. */ -#define PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS -#endif - -#if defined(PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS) - -/** The type of transaction that is in progress. - */ -/* This is an integer type rather than an enum for two reasons: to support - * unknown values when loading a transaction file, and to ensure that the - * type has a known size. - */ -typedef uint16_t psa_crypto_transaction_type_t; - -/** No transaction is in progress. - * - * This has the value 0, so zero-initialization sets a transaction's type to - * this value. - */ -#define PSA_CRYPTO_TRANSACTION_NONE ( (psa_crypto_transaction_type_t) 0x0000 ) - -/** A key creation transaction. - * - * This is only used for keys in an external cryptoprocessor (secure element). - * Keys in RAM or in internal storage are created atomically in storage - * (simple file creation), so they do not need a transaction mechanism. - */ -#define PSA_CRYPTO_TRANSACTION_CREATE_KEY ( (psa_crypto_transaction_type_t) 0x0001 ) - -/** A key destruction transaction. - * - * This is only used for keys in an external cryptoprocessor (secure element). - * Keys in RAM or in internal storage are destroyed atomically in storage - * (simple file deletion), so they do not need a transaction mechanism. - */ -#define PSA_CRYPTO_TRANSACTION_DESTROY_KEY ( (psa_crypto_transaction_type_t) 0x0002 ) - -/** Transaction data. - * - * This type is designed to be serialized by writing the memory representation - * and reading it back on the same device. - * - * \note The transaction mechanism is designed for a single active transaction - * at a time. The transaction object is #psa_crypto_transaction. - * - * \note If an API call starts a transaction, it must complete this transaction - * before returning to the application. - * - * The lifetime of a transaction is the following (note that only one - * transaction may be active at a time): - * - * -# Call psa_crypto_prepare_transaction() to initialize the transaction - * object in memory and declare the type of transaction that is starting. - * -# Fill in the type-specific fields of #psa_crypto_transaction. - * -# Call psa_crypto_save_transaction() to start the transaction. This - * saves the transaction data to internal storage. - * -# Perform the work of the transaction by modifying files, contacting - * external entities, or whatever needs doing. Note that the transaction - * may be interrupted by a power failure, so you need to have a way - * recover from interruptions either by undoing what has been done - * so far or by resuming where you left off. - * -# If there are intermediate stages in the transaction, update - * the fields of #psa_crypto_transaction and call - * psa_crypto_save_transaction() again when each stage is reached. - * -# When the transaction is over, call psa_crypto_stop_transaction() to - * remove the transaction data in storage and in memory. - * - * If the system crashes while a transaction is in progress, psa_crypto_init() - * calls psa_crypto_load_transaction() and takes care of completing or - * rewinding the transaction. This is done in psa_crypto_recover_transaction() - * in psa_crypto.c. If you add a new type of transaction, be - * sure to add code for it in psa_crypto_recover_transaction(). - */ -typedef union -{ - /* Each element of this union must have the following properties - * to facilitate serialization and deserialization: - * - * - The element is a struct. - * - The first field of the struct is `psa_crypto_transaction_type_t type`. - * - Elements of the struct are arranged such a way that there is - * no padding. - */ - struct psa_crypto_transaction_unknown_s - { - psa_crypto_transaction_type_t type; - uint16_t unused1; - uint32_t unused2; - uint64_t unused3; - uint64_t unused4; - } unknown; - /* ::type is #PSA_CRYPTO_TRANSACTION_CREATE_KEY or - * #PSA_CRYPTO_TRANSACTION_DESTROY_KEY. */ - struct psa_crypto_transaction_key_s - { - psa_crypto_transaction_type_t type; - uint16_t unused1; - psa_key_lifetime_t lifetime; - psa_key_slot_number_t slot; - mbedtls_svc_key_id_t id; - } key; -} psa_crypto_transaction_t; - -/** The single active transaction. - */ -extern psa_crypto_transaction_t psa_crypto_transaction; - -/** Prepare for a transaction. - * - * There must not be an ongoing transaction. - * - * \param type The type of transaction to start. - */ -static inline void psa_crypto_prepare_transaction( - psa_crypto_transaction_type_t type ) -{ - psa_crypto_transaction.unknown.type = type; -} - -/** Save the transaction data to storage. - * - * You may call this function multiple times during a transaction to - * atomically update the transaction state. - * - * \retval #PSA_SUCCESS - * \retval #PSA_ERROR_DATA_CORRUPT - * \retval #PSA_ERROR_INSUFFICIENT_STORAGE - * \retval #PSA_ERROR_STORAGE_FAILURE - */ -psa_status_t psa_crypto_save_transaction( void ); - -/** Load the transaction data from storage, if any. - * - * This function is meant to be called from psa_crypto_init() to recover - * in case a transaction was interrupted by a system crash. - * - * \retval #PSA_SUCCESS - * The data about the ongoing transaction has been loaded to - * #psa_crypto_transaction. - * \retval #PSA_ERROR_DOES_NOT_EXIST - * There is no ongoing transaction. - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_DATA_INVALID - * \retval #PSA_ERROR_DATA_CORRUPT - */ -psa_status_t psa_crypto_load_transaction( void ); - -/** Indicate that the current transaction is finished. - * - * Call this function at the very end of transaction processing. - * This function does not "commit" or "abort" the transaction: the storage - * subsystem has no concept of "commit" and "abort", just saving and - * removing the transaction information in storage. - * - * This function erases the transaction data in storage (if any) and - * resets the transaction data in memory. - * - * \retval #PSA_SUCCESS - * There was transaction data in storage. - * \retval #PSA_ERROR_DOES_NOT_EXIST - * There was no transaction data in storage. - * \retval #PSA_ERROR_STORAGE_FAILURE - * It was impossible to determine whether there was transaction data - * in storage, or the transaction data could not be erased. - */ -psa_status_t psa_crypto_stop_transaction( void ); - -/** The ITS file identifier for the transaction data. - * - * 0xffffffNN = special file; 0x74 = 't' for transaction. - */ -#define PSA_CRYPTO_ITS_TRANSACTION_UID ( (psa_key_id_t) 0xffffff74 ) - -#endif /* PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS */ - -#if defined(MBEDTLS_PSA_INJECT_ENTROPY) -/** Backend side of mbedtls_psa_inject_entropy(). - * - * This function stores the supplied data into the entropy seed file. - * - * \retval #PSA_SUCCESS - * Success - * \retval #PSA_ERROR_STORAGE_FAILURE - * \retval #PSA_ERROR_INSUFFICIENT_STORAGE - * \retval #PSA_ERROR_NOT_PERMITTED - * The entropy seed file already exists. - */ -psa_status_t mbedtls_psa_storage_inject_entropy( const unsigned char *seed, - size_t seed_size ); -#endif /* MBEDTLS_PSA_INJECT_ENTROPY */ - -#ifdef __cplusplus -} -#endif - -#endif /* PSA_CRYPTO_STORAGE_H */ diff --git a/third_party/mbedtls/psa_its_file.c b/third_party/mbedtls/psa_its_file.c deleted file mode 100644 index 5fe5d2cbe..000000000 --- a/third_party/mbedtls/psa_its_file.c +++ /dev/null @@ -1,258 +0,0 @@ -/* clang-format off */ - -/* - * PSA ITS simulator over stdio files. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#if defined(MBEDTLS_CONFIG_FILE) -#include MBEDTLS_CONFIG_FILE -#else -#include "libc/limits.h" -#include "libc/calls/calls.h" -#include "third_party/mbedtls/config.h" -#endif - -#if defined(MBEDTLS_PSA_ITS_FILE_C) - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_snprintf snprintf -#endif - -#if defined(_WIN32) -#endif - -#include "third_party/mbedtls/psa_crypto_its.h" - - -#if !defined(PSA_ITS_STORAGE_PREFIX) -#define PSA_ITS_STORAGE_PREFIX "" -#endif - -#define PSA_ITS_STORAGE_FILENAME_PATTERN "%08x%08x" -#define PSA_ITS_STORAGE_SUFFIX ".psa_its" -#define PSA_ITS_STORAGE_FILENAME_LENGTH \ - ( sizeof( PSA_ITS_STORAGE_PREFIX ) - 1 + /*prefix without terminating 0*/ \ - 16 + /*UID (64-bit number in hex)*/ \ - sizeof( PSA_ITS_STORAGE_SUFFIX ) - 1 + /*suffix without terminating 0*/ \ - 1 /*terminating null byte*/ ) -#define PSA_ITS_STORAGE_TEMP \ - PSA_ITS_STORAGE_PREFIX "tempfile" PSA_ITS_STORAGE_SUFFIX - -/* The maximum value of psa_storage_info_t.size */ -#define PSA_ITS_MAX_SIZE 0xffffffff - -#define PSA_ITS_MAGIC_STRING "PSA\0ITS\0" -#define PSA_ITS_MAGIC_LENGTH 8 - -/* As rename fails on Windows if the new filepath already exists, - * use MoveFileExA with the MOVEFILE_REPLACE_EXISTING flag instead. - * Returns 0 on success, nonzero on failure. */ -#if defined(_WIN32) -#define rename_replace_existing( oldpath, newpath ) \ - ( ! MoveFileExA( oldpath, newpath, MOVEFILE_REPLACE_EXISTING ) ) -#else -#define rename_replace_existing( oldpath, newpath ) rename( oldpath, newpath ) -#endif - -typedef struct -{ - uint8_t magic[PSA_ITS_MAGIC_LENGTH]; - uint8_t size[sizeof( uint32_t )]; - uint8_t flags[sizeof( psa_storage_create_flags_t )]; -} psa_its_file_header_t; - -static void psa_its_fill_filename( psa_storage_uid_t uid, char *filename ) -{ - /* Break up the UID into two 32-bit pieces so as not to rely on - * long long support in snprintf. */ - mbedtls_snprintf( filename, PSA_ITS_STORAGE_FILENAME_LENGTH, - "%s" PSA_ITS_STORAGE_FILENAME_PATTERN "%s", - PSA_ITS_STORAGE_PREFIX, - (unsigned) ( uid >> 32 ), - (unsigned) ( uid & 0xffffffff ), - PSA_ITS_STORAGE_SUFFIX ); -} - -static psa_status_t psa_its_read_file( psa_storage_uid_t uid, - struct psa_storage_info_t *p_info, - FILE **p_stream ) -{ - char filename[PSA_ITS_STORAGE_FILENAME_LENGTH]; - psa_its_file_header_t header; - size_t n; - - *p_stream = NULL; - psa_its_fill_filename( uid, filename ); - *p_stream = fopen( filename, "rb" ); - if( *p_stream == NULL ) - return( PSA_ERROR_DOES_NOT_EXIST ); - - n = fread( &header, 1, sizeof( header ), *p_stream ); - if( n != sizeof( header ) ) - return( PSA_ERROR_DATA_CORRUPT ); - if( memcmp( header.magic, PSA_ITS_MAGIC_STRING, - PSA_ITS_MAGIC_LENGTH ) != 0 ) - return( PSA_ERROR_DATA_CORRUPT ); - - p_info->size = ( header.size[0] | - header.size[1] << 8 | - header.size[2] << 16 | - header.size[3] << 24 ); - p_info->flags = ( header.flags[0] | - header.flags[1] << 8 | - header.flags[2] << 16 | - header.flags[3] << 24 ); - return( PSA_SUCCESS ); -} - -psa_status_t psa_its_get_info( psa_storage_uid_t uid, - struct psa_storage_info_t *p_info ) -{ - psa_status_t status; - FILE *stream = NULL; - status = psa_its_read_file( uid, p_info, &stream ); - if( stream != NULL ) - fclose( stream ); - return( status ); -} - -psa_status_t psa_its_get( psa_storage_uid_t uid, - uint32_t data_offset, - uint32_t data_length, - void *p_data, - size_t *p_data_length ) -{ - psa_status_t status; - FILE *stream = NULL; - size_t n; - struct psa_storage_info_t info; - - status = psa_its_read_file( uid, &info, &stream ); - if( status != PSA_SUCCESS ) - goto exit; - status = PSA_ERROR_INVALID_ARGUMENT; - if( data_offset + data_length < data_offset ) - goto exit; -#if SIZE_MAX < 0xffffffff - if( data_offset + data_length > SIZE_MAX ) - goto exit; -#endif - if( data_offset + data_length > info.size ) - goto exit; - - status = PSA_ERROR_STORAGE_FAILURE; -#if LONG_MAX < 0xffffffff - while( data_offset > LONG_MAX ) - { - if( fseek( stream, LONG_MAX, SEEK_CUR ) != 0 ) - goto exit; - data_offset -= LONG_MAX; - } -#endif - if( fseek( stream, data_offset, SEEK_CUR ) != 0 ) - goto exit; - n = fread( p_data, 1, data_length, stream ); - if( n != data_length ) - goto exit; - status = PSA_SUCCESS; - if( p_data_length != NULL ) - *p_data_length = n; - -exit: - if( stream != NULL ) - fclose( stream ); - return( status ); -} - -psa_status_t psa_its_set( psa_storage_uid_t uid, - uint32_t data_length, - const void *p_data, - psa_storage_create_flags_t create_flags ) -{ - psa_status_t status = PSA_ERROR_STORAGE_FAILURE; - char filename[PSA_ITS_STORAGE_FILENAME_LENGTH]; - FILE *stream = NULL; - psa_its_file_header_t header; - size_t n; - - memcpy( header.magic, PSA_ITS_MAGIC_STRING, PSA_ITS_MAGIC_LENGTH ); - header.size[0] = data_length & 0xff; - header.size[1] = ( data_length >> 8 ) & 0xff; - header.size[2] = ( data_length >> 16 ) & 0xff; - header.size[3] = ( data_length >> 24 ) & 0xff; - header.flags[0] = create_flags & 0xff; - header.flags[1] = ( create_flags >> 8 ) & 0xff; - header.flags[2] = ( create_flags >> 16 ) & 0xff; - header.flags[3] = ( create_flags >> 24 ) & 0xff; - - psa_its_fill_filename( uid, filename ); - stream = fopen( PSA_ITS_STORAGE_TEMP, "wb" ); - if( stream == NULL ) - goto exit; - - status = PSA_ERROR_INSUFFICIENT_STORAGE; - n = fwrite( &header, 1, sizeof( header ), stream ); - if( n != sizeof( header ) ) - goto exit; - if( data_length != 0 ) - { - n = fwrite( p_data, 1, data_length, stream ); - if( n != data_length ) - goto exit; - } - status = PSA_SUCCESS; - -exit: - if( stream != NULL ) - { - int ret = fclose( stream ); - if( status == PSA_SUCCESS && ret != 0 ) - status = PSA_ERROR_INSUFFICIENT_STORAGE; - } - if( status == PSA_SUCCESS ) - { - if( rename_replace_existing( PSA_ITS_STORAGE_TEMP, filename ) != 0 ) - status = PSA_ERROR_STORAGE_FAILURE; - } - /* The temporary file may still exist, but only in failure cases where - * we're already reporting an error. So there's nothing we can do on - * failure. If the function succeeded, and in some error cases, the - * temporary file doesn't exist and so remove() is expected to fail. - * Thus we just ignore the return status of remove(). */ - (void) remove( PSA_ITS_STORAGE_TEMP ); - return( status ); -} - -psa_status_t psa_its_remove( psa_storage_uid_t uid ) -{ - char filename[PSA_ITS_STORAGE_FILENAME_LENGTH]; - FILE *stream; - psa_its_fill_filename( uid, filename ); - stream = fopen( filename, "rb" ); - if( stream == NULL ) - return( PSA_ERROR_DOES_NOT_EXIST ); - fclose( stream ); - if( remove( filename ) != 0 ) - return( PSA_ERROR_STORAGE_FAILURE ); - return( PSA_SUCCESS ); -} - -#endif /* MBEDTLS_PSA_ITS_FILE_C */ diff --git a/third_party/mbedtls/psa_util.h b/third_party/mbedtls/psa_util.h deleted file mode 100644 index e98d0798e..000000000 --- a/third_party/mbedtls/psa_util.h +++ /dev/null @@ -1,508 +0,0 @@ -/* clang-format off */ - -/** - * \file psa_util.h - * - * \brief Utility functions for the use of the PSA Crypto library. - * - * \warning This function is not part of the public API and may - * change at any time. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef MBEDTLS_PSA_UTIL_H -#define MBEDTLS_PSA_UTIL_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#if defined(MBEDTLS_USE_PSA_CRYPTO) - -#include "third_party/mbedtls/crypto.h" - -#include "third_party/mbedtls/ecp.h" -#include "third_party/mbedtls/md.h" -#include "third_party/mbedtls/pk.h" -#include "third_party/mbedtls/oid.h" - -/* Translations for symmetric crypto. */ - -static inline psa_key_type_t mbedtls_psa_translate_cipher_type( - mbedtls_cipher_type_t cipher ) -{ - switch( cipher ) - { - case MBEDTLS_CIPHER_AES_128_CCM: - case MBEDTLS_CIPHER_AES_192_CCM: - case MBEDTLS_CIPHER_AES_256_CCM: - case MBEDTLS_CIPHER_AES_128_GCM: - case MBEDTLS_CIPHER_AES_192_GCM: - case MBEDTLS_CIPHER_AES_256_GCM: - case MBEDTLS_CIPHER_AES_128_CBC: - case MBEDTLS_CIPHER_AES_192_CBC: - case MBEDTLS_CIPHER_AES_256_CBC: - return( PSA_KEY_TYPE_AES ); - - /* ARIA not yet supported in PSA. */ - /* case MBEDTLS_CIPHER_ARIA_128_CCM: - case MBEDTLS_CIPHER_ARIA_192_CCM: - case MBEDTLS_CIPHER_ARIA_256_CCM: - case MBEDTLS_CIPHER_ARIA_128_GCM: - case MBEDTLS_CIPHER_ARIA_192_GCM: - case MBEDTLS_CIPHER_ARIA_256_GCM: - case MBEDTLS_CIPHER_ARIA_128_CBC: - case MBEDTLS_CIPHER_ARIA_192_CBC: - case MBEDTLS_CIPHER_ARIA_256_CBC: - return( PSA_KEY_TYPE_ARIA ); */ - - default: - return( 0 ); - } -} - -static inline psa_algorithm_t mbedtls_psa_translate_cipher_mode( - mbedtls_cipher_mode_t mode, size_t taglen ) -{ - switch( mode ) - { - case MBEDTLS_MODE_ECB: - return( PSA_ALG_ECB_NO_PADDING ); - case MBEDTLS_MODE_GCM: - return( PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_GCM, taglen ) ); - case MBEDTLS_MODE_CCM: - return( PSA_ALG_AEAD_WITH_SHORTENED_TAG( PSA_ALG_CCM, taglen ) ); - case MBEDTLS_MODE_CBC: - if( taglen == 0 ) - return( PSA_ALG_CBC_NO_PADDING ); - /* Intentional fallthrough for taglen != 0 */ - /* fallthrough */ - default: - return( 0 ); - } -} - -static inline psa_key_usage_t mbedtls_psa_translate_cipher_operation( - mbedtls_operation_t op ) -{ - switch( op ) - { - case MBEDTLS_ENCRYPT: - return( PSA_KEY_USAGE_ENCRYPT ); - case MBEDTLS_DECRYPT: - return( PSA_KEY_USAGE_DECRYPT ); - default: - return( 0 ); - } -} - -/* Translations for hashing. */ - -static inline psa_algorithm_t mbedtls_psa_translate_md( mbedtls_md_type_t md_alg ) -{ - switch( md_alg ) - { -#if defined(MBEDTLS_MD2_C) - case MBEDTLS_MD_MD2: - return( PSA_ALG_MD2 ); -#endif -#if defined(MBEDTLS_MD4_C) - case MBEDTLS_MD_MD4: - return( PSA_ALG_MD4 ); -#endif -#if defined(MBEDTLS_MD5_C) - case MBEDTLS_MD_MD5: - return( PSA_ALG_MD5 ); -#endif -#if defined(MBEDTLS_SHA1_C) - case MBEDTLS_MD_SHA1: - return( PSA_ALG_SHA_1 ); -#endif -#if defined(MBEDTLS_SHA256_C) - case MBEDTLS_MD_SHA224: - return( PSA_ALG_SHA_224 ); - case MBEDTLS_MD_SHA256: - return( PSA_ALG_SHA_256 ); -#endif -#if defined(MBEDTLS_SHA512_C) - case MBEDTLS_MD_SHA384: - return( PSA_ALG_SHA_384 ); - case MBEDTLS_MD_SHA512: - return( PSA_ALG_SHA_512 ); -#endif -#if defined(MBEDTLS_RIPEMD160_C) - case MBEDTLS_MD_RIPEMD160: - return( PSA_ALG_RIPEMD160 ); -#endif - case MBEDTLS_MD_NONE: /* Intentional fallthrough */ - default: - return( 0 ); - } -} - -/* Translations for ECC. */ - -static inline int mbedtls_psa_get_ecc_oid_from_id( - psa_ecc_family_t curve, size_t bits, - char const **oid, size_t *oid_len ) -{ - switch( curve ) - { - case PSA_ECC_FAMILY_SECP_R1: - switch( bits ) - { -#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) - case 192: - *oid = MBEDTLS_OID_EC_GRP_SECP192R1; - *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP192R1 ); - return( 0 ); -#endif /* MBEDTLS_ECP_DP_SECP192R1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) - case 224: - *oid = MBEDTLS_OID_EC_GRP_SECP224R1; - *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP224R1 ); - return( 0 ); -#endif /* MBEDTLS_ECP_DP_SECP224R1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) - case 256: - *oid = MBEDTLS_OID_EC_GRP_SECP256R1; - *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP256R1 ); - return( 0 ); -#endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) - case 384: - *oid = MBEDTLS_OID_EC_GRP_SECP384R1; - *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP384R1 ); - return( 0 ); -#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) - case 521: - *oid = MBEDTLS_OID_EC_GRP_SECP521R1; - *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP521R1 ); - return( 0 ); -#endif /* MBEDTLS_ECP_DP_SECP521R1_ENABLED */ - } - break; - case PSA_ECC_FAMILY_SECP_K1: - switch( bits ) - { -#if defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED) - case 192: - *oid = MBEDTLS_OID_EC_GRP_SECP192K1; - *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP192K1 ); - return( 0 ); -#endif /* MBEDTLS_ECP_DP_SECP192K1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED) - case 224: - *oid = MBEDTLS_OID_EC_GRP_SECP224K1; - *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP224K1 ); - return( 0 ); -#endif /* MBEDTLS_ECP_DP_SECP224K1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) - case 256: - *oid = MBEDTLS_OID_EC_GRP_SECP256K1; - *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_SECP256K1 ); - return( 0 ); -#endif /* MBEDTLS_ECP_DP_SECP256K1_ENABLED */ - } - break; - case PSA_ECC_FAMILY_BRAINPOOL_P_R1: - switch( bits ) - { -#if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) - case 256: - *oid = MBEDTLS_OID_EC_GRP_BP256R1; - *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_BP256R1 ); - return( 0 ); -#endif /* MBEDTLS_ECP_DP_BP256R1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) - case 384: - *oid = MBEDTLS_OID_EC_GRP_BP384R1; - *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_BP384R1 ); - return( 0 ); -#endif /* MBEDTLS_ECP_DP_BP384R1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) - case 512: - *oid = MBEDTLS_OID_EC_GRP_BP512R1; - *oid_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_EC_GRP_BP512R1 ); - return( 0 ); -#endif /* MBEDTLS_ECP_DP_BP512R1_ENABLED */ - } - break; - } - (void) oid; - (void) oid_len; - return( -1 ); -} - -#define MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH 1 - -#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) -#if MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH < ( 2 * ( ( 192 + 7 ) / 8 ) + 1 ) -#undef MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH -#define MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH ( 2 * ( ( 192 + 7 ) / 8 ) + 1 ) -#endif -#endif /* MBEDTLS_ECP_DP_SECP192R1_ENABLED */ - -#if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) -#if MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH < ( 2 * ( ( 224 + 7 ) / 8 ) + 1 ) -#undef MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH -#define MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH ( 2 * ( ( 224 + 7 ) / 8 ) + 1 ) -#endif -#endif /* MBEDTLS_ECP_DP_SECP224R1_ENABLED */ - -#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) -#if MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH < ( 2 * ( ( 256 + 7 ) / 8 ) + 1 ) -#undef MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH -#define MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH ( 2 * ( ( 256 + 7 ) / 8 ) + 1 ) -#endif -#endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */ - -#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) -#if MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH < ( 2 * ( ( 384 + 7 ) / 8 ) + 1 ) -#undef MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH -#define MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH ( 2 * ( ( 384 + 7 ) / 8 ) + 1 ) -#endif -#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ - -#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) -#if MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH < ( 2 * ( ( 521 + 7 ) / 8 ) + 1 ) -#undef MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH -#define MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH ( 2 * ( ( 521 + 7 ) / 8 ) + 1 ) -#endif -#endif /* MBEDTLS_ECP_DP_SECP521R1_ENABLED */ - -#if defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED) -#if MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH < ( 2 * ( ( 192 + 7 ) / 8 ) + 1 ) -#undef MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH -#define MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH ( 2 * ( ( 192 + 7 ) / 8 ) + 1 ) -#endif -#endif /* MBEDTLS_ECP_DP_SECP192K1_ENABLED */ - -#if defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED) -#if MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH < ( 2 * ( ( 224 + 7 ) / 8 ) + 1 ) -#undef MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH -#define MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH ( 2 * ( ( 224 + 7 ) / 8 ) + 1 ) -#endif -#endif /* MBEDTLS_ECP_DP_SECP224K1_ENABLED */ - -#if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) -#if MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH < ( 2 * ( ( 256 + 7 ) / 8 ) + 1 ) -#undef MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH -#define MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH ( 2 * ( ( 256 + 7 ) / 8 ) + 1 ) -#endif -#endif /* MBEDTLS_ECP_DP_SECP256K1_ENABLED */ - -#if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) -#if MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH < ( 2 * ( ( 256 + 7 ) / 8 ) + 1 ) -#undef MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH -#define MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH ( 2 * ( ( 256 + 7 ) / 8 ) + 1 ) -#endif -#endif /* MBEDTLS_ECP_DP_BP256R1_ENABLED */ - -#if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) -#if MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH < ( 2 * ( ( 384 + 7 ) / 8 ) + 1 ) -#undef MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH -#define MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH ( 2 * ( ( 384 + 7 ) / 8 ) + 1 ) -#endif -#endif /* MBEDTLS_ECP_DP_BP384R1_ENABLED */ - -#if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) -#if MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH < ( 2 * ( ( 512 + 7 ) / 8 ) + 1 ) -#undef MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH -#define MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH ( 2 * ( ( 512 + 7 ) / 8 ) + 1 ) -#endif -#endif /* MBEDTLS_ECP_DP_BP512R1_ENABLED */ - - -/* Translations for PK layer */ - -static inline int mbedtls_psa_err_translate_pk( psa_status_t status ) -{ - switch( status ) - { - case PSA_SUCCESS: - return( 0 ); - case PSA_ERROR_NOT_SUPPORTED: - return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); - case PSA_ERROR_INSUFFICIENT_MEMORY: - return( MBEDTLS_ERR_PK_ALLOC_FAILED ); - case PSA_ERROR_INSUFFICIENT_ENTROPY: - return( MBEDTLS_ERR_ECP_RANDOM_FAILED ); - case PSA_ERROR_BAD_STATE: - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - /* All other failures */ - case PSA_ERROR_COMMUNICATION_FAILURE: - case PSA_ERROR_HARDWARE_FAILURE: - case PSA_ERROR_CORRUPTION_DETECTED: - return( MBEDTLS_ERR_PK_HW_ACCEL_FAILED ); - default: /* We return the same as for the 'other failures', - * but list them separately nonetheless to indicate - * which failure conditions we have considered. */ - return( MBEDTLS_ERR_PK_HW_ACCEL_FAILED ); - } -} - -/* Translations for ECC */ - -/* This function transforms an ECC group identifier from - * https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-8 - * into a PSA ECC group identifier. */ -#if defined(MBEDTLS_ECP_C) -static inline psa_key_type_t mbedtls_psa_parse_tls_ecc_group( - uint16_t tls_ecc_grp_reg_id, size_t *bits ) -{ - const mbedtls_ecp_curve_info *curve_info = - mbedtls_ecp_curve_info_from_tls_id( tls_ecc_grp_reg_id ); - if( curve_info == NULL ) - return( 0 ); - return( PSA_KEY_TYPE_ECC_KEY_PAIR( - mbedtls_ecc_group_to_psa( curve_info->grp_id, bits ) ) ); -} -#endif /* MBEDTLS_ECP_C */ - -/* This function takes a buffer holding an EC public key - * exported through psa_export_public_key(), and converts - * it into an ECPoint structure to be put into a ClientKeyExchange - * message in an ECDHE exchange. - * - * Both the present and the foreseeable future format of EC public keys - * used by PSA have the ECPoint structure contained in the exported key - * as a subbuffer, and the function merely selects this subbuffer instead - * of making a copy. - */ -static inline int mbedtls_psa_tls_psa_ec_to_ecpoint( unsigned char *src, - size_t srclen, - unsigned char **dst, - size_t *dstlen ) -{ - *dst = src; - *dstlen = srclen; - return( 0 ); -} - -/* This function takes a buffer holding an ECPoint structure - * (as contained in a TLS ServerKeyExchange message for ECDHE - * exchanges) and converts it into a format that the PSA key - * agreement API understands. - */ -static inline int mbedtls_psa_tls_ecpoint_to_psa_ec( unsigned char const *src, - size_t srclen, - unsigned char *dst, - size_t dstlen, - size_t *olen ) -{ - if( srclen > dstlen ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); - - memcpy( dst, src, srclen ); - *olen = srclen; - return( 0 ); -} - -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - -/* Expose whatever RNG the PSA subsystem uses to applications using the - * mbedtls_xxx API. The declarations and definitions here need to be - * consistent with the implementation in library/psa_crypto_random_impl.h. - * See that file for implementation documentation. */ -#if defined(MBEDTLS_PSA_CRYPTO_C) - -/* The type of a `f_rng` random generator function that many library functions - * take. - * - * This type name is not part of the Mbed TLS stable API. It may be renamed - * or moved without warning. - */ -typedef int mbedtls_f_rng_t( void *p_rng, unsigned char *output, size_t output_size ); - -#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) - -/** The random generator function for the PSA subsystem. - * - * This function is suitable as the `f_rng` random generator function - * parameter of many `mbedtls_xxx` functions. Use #MBEDTLS_PSA_RANDOM_STATE - * to obtain the \p p_rng parameter. - * - * The implementation of this function depends on the configuration of the - * library. - * - * \note Depending on the configuration, this may be a function or - * a pointer to a function. - * - * \note This function may only be used if the PSA crypto subsystem is active. - * This means that you must call psa_crypto_init() before any call to - * this function, and you must not call this function after calling - * mbedtls_psa_crypto_free(). - * - * \param p_rng The random generator context. This must be - * #MBEDTLS_PSA_RANDOM_STATE. No other state is - * supported. - * \param output The buffer to fill. It must have room for - * \c output_size bytes. - * \param output_size The number of bytes to write to \p output. - * This function may fail if \p output_size is too - * large. It is guaranteed to accept any output size - * requested by Mbed TLS library functions. The - * maximum request size depends on the library - * configuration. - * - * \return \c 0 on success. - * \return An `MBEDTLS_ERR_ENTROPY_xxx`, - * `MBEDTLS_ERR_PLATFORM_xxx, - * `MBEDTLS_ERR_CTR_DRBG_xxx` or - * `MBEDTLS_ERR_HMAC_DRBG_xxx` on error. - */ -int mbedtls_psa_get_random( void *p_rng, - unsigned char *output, - size_t output_size ); - -/** The random generator state for the PSA subsystem. - * - * This macro expands to an expression which is suitable as the `p_rng` - * random generator state parameter of many `mbedtls_xxx` functions. - * It must be used in combination with the random generator function - * mbedtls_psa_get_random(). - * - * The implementation of this macro depends on the configuration of the - * library. Do not make any assumption on its nature. - */ -#define MBEDTLS_PSA_RANDOM_STATE NULL - -#else /* !defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) */ - -#if defined(MBEDTLS_CTR_DRBG_C) -#include "third_party/mbedtls/ctr_drbg.h" -typedef mbedtls_ctr_drbg_context mbedtls_psa_drbg_context_t; -static mbedtls_f_rng_t *const mbedtls_psa_get_random = mbedtls_ctr_drbg_random; -#elif defined(MBEDTLS_HMAC_DRBG_C) -#include "third_party/mbedtls/hmac_drbg.h" -typedef mbedtls_hmac_drbg_context mbedtls_psa_drbg_context_t; -static mbedtls_f_rng_t *const mbedtls_psa_get_random = mbedtls_hmac_drbg_random; -#endif -extern mbedtls_psa_drbg_context_t *const mbedtls_psa_random_state; - -#define MBEDTLS_PSA_RANDOM_STATE mbedtls_psa_random_state - -#endif /* !defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) */ - -#endif /* MBEDTLS_PSA_CRYPTO_C */ - -#endif /* MBEDTLS_PSA_UTIL_H */ diff --git a/third_party/mbedtls/rando.c b/third_party/mbedtls/rando.c index 6984eb161..96f1cc444 100644 --- a/third_party/mbedtls/rando.c +++ b/third_party/mbedtls/rando.c @@ -17,19 +17,13 @@ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/rand/rand.h" +#include "libc/sysv/consts/grnd.h" #include "third_party/mbedtls/entropy_poll.h" int mbedtls_hardware_poll(void *wut, unsigned char *p, size_t n, size_t *olen) { - uint64_t x; - size_t i, j; - i = 0; - while (i < n) { - x = rand64(); - for (j = 0; i < n && j < 8; ++i, ++j) { - p[i] = x; - x >>= 8; - } - } - *olen = i; + ssize_t rc; + *olen = 0; + if ((rc = getrandom(p, n, 0)) == -1) return -1; + *olen = rc; return 0; } diff --git a/third_party/mbedtls/ripemd160.c b/third_party/mbedtls/ripemd160.c deleted file mode 100644 index fcd172f46..000000000 --- a/third_party/mbedtls/ripemd160.c +++ /dev/null @@ -1,564 +0,0 @@ -/* clang-format off */ - -asm(".ident\t\"\\n\\n\ -Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); -asm(".include \"libc/disclaimer.inc\""); - -/* - * RIPE MD-160 implementation - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * The RIPEMD-160 algorithm was designed by RIPE in 1996 - * http://homes.esat.kuleuven.be/~bosselae/mbedtls_ripemd160.html - * http://ehash.iaik.tugraz.at/wiki/RIPEMD-160 - */ - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_RIPEMD160_C) - -#include "third_party/mbedtls/ripemd160.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - -#if !defined(MBEDTLS_RIPEMD160_ALT) - -/* - * 32-bit integer manipulation macros (little endian) - */ -#ifndef GET_UINT32_LE -#define GET_UINT32_LE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] ) \ - | ( (uint32_t) (b)[(i) + 1] << 8 ) \ - | ( (uint32_t) (b)[(i) + 2] << 16 ) \ - | ( (uint32_t) (b)[(i) + 3] << 24 ); \ -} -#endif - -#ifndef PUT_UINT32_LE -#define PUT_UINT32_LE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( ( (n) ) & 0xFF ); \ - (b)[(i) + 1] = (unsigned char) ( ( (n) >> 8 ) & 0xFF ); \ - (b)[(i) + 2] = (unsigned char) ( ( (n) >> 16 ) & 0xFF ); \ - (b)[(i) + 3] = (unsigned char) ( ( (n) >> 24 ) & 0xFF ); \ -} -#endif - -void mbedtls_ripemd160_init( mbedtls_ripemd160_context *ctx ) -{ - memset( ctx, 0, sizeof( mbedtls_ripemd160_context ) ); -} - -void mbedtls_ripemd160_free( mbedtls_ripemd160_context *ctx ) -{ - if( ctx == NULL ) - return; - - mbedtls_platform_zeroize( ctx, sizeof( mbedtls_ripemd160_context ) ); -} - -void mbedtls_ripemd160_clone( mbedtls_ripemd160_context *dst, - const mbedtls_ripemd160_context *src ) -{ - *dst = *src; -} - -/* - * RIPEMD-160 context setup - */ -int mbedtls_ripemd160_starts_ret( mbedtls_ripemd160_context *ctx ) -{ - ctx->total[0] = 0; - ctx->total[1] = 0; - - ctx->state[0] = 0x67452301; - ctx->state[1] = 0xEFCDAB89; - ctx->state[2] = 0x98BADCFE; - ctx->state[3] = 0x10325476; - ctx->state[4] = 0xC3D2E1F0; - - return( 0 ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_ripemd160_starts( mbedtls_ripemd160_context *ctx ) -{ - mbedtls_ripemd160_starts_ret( ctx ); -} -#endif - -#if !defined(MBEDTLS_RIPEMD160_PROCESS_ALT) -/* - * Process one block - */ -int mbedtls_internal_ripemd160_process( mbedtls_ripemd160_context *ctx, - const unsigned char data[64] ) -{ - struct - { - uint32_t A, B, C, D, E, Ap, Bp, Cp, Dp, Ep, X[16]; - } local; - - GET_UINT32_LE( local.X[ 0], data, 0 ); - GET_UINT32_LE( local.X[ 1], data, 4 ); - GET_UINT32_LE( local.X[ 2], data, 8 ); - GET_UINT32_LE( local.X[ 3], data, 12 ); - GET_UINT32_LE( local.X[ 4], data, 16 ); - GET_UINT32_LE( local.X[ 5], data, 20 ); - GET_UINT32_LE( local.X[ 6], data, 24 ); - GET_UINT32_LE( local.X[ 7], data, 28 ); - GET_UINT32_LE( local.X[ 8], data, 32 ); - GET_UINT32_LE( local.X[ 9], data, 36 ); - GET_UINT32_LE( local.X[10], data, 40 ); - GET_UINT32_LE( local.X[11], data, 44 ); - GET_UINT32_LE( local.X[12], data, 48 ); - GET_UINT32_LE( local.X[13], data, 52 ); - GET_UINT32_LE( local.X[14], data, 56 ); - GET_UINT32_LE( local.X[15], data, 60 ); - - local.A = local.Ap = ctx->state[0]; - local.B = local.Bp = ctx->state[1]; - local.C = local.Cp = ctx->state[2]; - local.D = local.Dp = ctx->state[3]; - local.E = local.Ep = ctx->state[4]; - -#define F1( x, y, z ) ( (x) ^ (y) ^ (z) ) -#define F2( x, y, z ) ( ( (x) & (y) ) | ( ~(x) & (z) ) ) -#define F3( x, y, z ) ( ( (x) | ~(y) ) ^ (z) ) -#define F4( x, y, z ) ( ( (x) & (z) ) | ( (y) & ~(z) ) ) -#define F5( x, y, z ) ( (x) ^ ( (y) | ~(z) ) ) - -#define S( x, n ) ( ( (x) << (n) ) | ( (x) >> (32 - (n)) ) ) - -#define P( a, b, c, d, e, r, s, f, k ) \ - do \ - { \ - (a) += f( (b), (c), (d) ) + local.X[r] + (k); \ - (a) = S( (a), (s) ) + (e); \ - (c) = S( (c), 10 ); \ - } while( 0 ) - -#define P2( a, b, c, d, e, r, s, rp, sp ) \ - do \ - { \ - P( (a), (b), (c), (d), (e), (r), (s), F, K ); \ - P( a ## p, b ## p, c ## p, d ## p, e ## p, \ - (rp), (sp), Fp, Kp ); \ - } while( 0 ) - -#define F F1 -#define K 0x00000000 -#define Fp F5 -#define Kp 0x50A28BE6 - P2( local.A, local.B, local.C, local.D, local.E, 0, 11, 5, 8 ); - P2( local.E, local.A, local.B, local.C, local.D, 1, 14, 14, 9 ); - P2( local.D, local.E, local.A, local.B, local.C, 2, 15, 7, 9 ); - P2( local.C, local.D, local.E, local.A, local.B, 3, 12, 0, 11 ); - P2( local.B, local.C, local.D, local.E, local.A, 4, 5, 9, 13 ); - P2( local.A, local.B, local.C, local.D, local.E, 5, 8, 2, 15 ); - P2( local.E, local.A, local.B, local.C, local.D, 6, 7, 11, 15 ); - P2( local.D, local.E, local.A, local.B, local.C, 7, 9, 4, 5 ); - P2( local.C, local.D, local.E, local.A, local.B, 8, 11, 13, 7 ); - P2( local.B, local.C, local.D, local.E, local.A, 9, 13, 6, 7 ); - P2( local.A, local.B, local.C, local.D, local.E, 10, 14, 15, 8 ); - P2( local.E, local.A, local.B, local.C, local.D, 11, 15, 8, 11 ); - P2( local.D, local.E, local.A, local.B, local.C, 12, 6, 1, 14 ); - P2( local.C, local.D, local.E, local.A, local.B, 13, 7, 10, 14 ); - P2( local.B, local.C, local.D, local.E, local.A, 14, 9, 3, 12 ); - P2( local.A, local.B, local.C, local.D, local.E, 15, 8, 12, 6 ); -#undef F -#undef K -#undef Fp -#undef Kp - -#define F F2 -#define K 0x5A827999 -#define Fp F4 -#define Kp 0x5C4DD124 - P2( local.E, local.A, local.B, local.C, local.D, 7, 7, 6, 9 ); - P2( local.D, local.E, local.A, local.B, local.C, 4, 6, 11, 13 ); - P2( local.C, local.D, local.E, local.A, local.B, 13, 8, 3, 15 ); - P2( local.B, local.C, local.D, local.E, local.A, 1, 13, 7, 7 ); - P2( local.A, local.B, local.C, local.D, local.E, 10, 11, 0, 12 ); - P2( local.E, local.A, local.B, local.C, local.D, 6, 9, 13, 8 ); - P2( local.D, local.E, local.A, local.B, local.C, 15, 7, 5, 9 ); - P2( local.C, local.D, local.E, local.A, local.B, 3, 15, 10, 11 ); - P2( local.B, local.C, local.D, local.E, local.A, 12, 7, 14, 7 ); - P2( local.A, local.B, local.C, local.D, local.E, 0, 12, 15, 7 ); - P2( local.E, local.A, local.B, local.C, local.D, 9, 15, 8, 12 ); - P2( local.D, local.E, local.A, local.B, local.C, 5, 9, 12, 7 ); - P2( local.C, local.D, local.E, local.A, local.B, 2, 11, 4, 6 ); - P2( local.B, local.C, local.D, local.E, local.A, 14, 7, 9, 15 ); - P2( local.A, local.B, local.C, local.D, local.E, 11, 13, 1, 13 ); - P2( local.E, local.A, local.B, local.C, local.D, 8, 12, 2, 11 ); -#undef F -#undef K -#undef Fp -#undef Kp - -#define F F3 -#define K 0x6ED9EBA1 -#define Fp F3 -#define Kp 0x6D703EF3 - P2( local.D, local.E, local.A, local.B, local.C, 3, 11, 15, 9 ); - P2( local.C, local.D, local.E, local.A, local.B, 10, 13, 5, 7 ); - P2( local.B, local.C, local.D, local.E, local.A, 14, 6, 1, 15 ); - P2( local.A, local.B, local.C, local.D, local.E, 4, 7, 3, 11 ); - P2( local.E, local.A, local.B, local.C, local.D, 9, 14, 7, 8 ); - P2( local.D, local.E, local.A, local.B, local.C, 15, 9, 14, 6 ); - P2( local.C, local.D, local.E, local.A, local.B, 8, 13, 6, 6 ); - P2( local.B, local.C, local.D, local.E, local.A, 1, 15, 9, 14 ); - P2( local.A, local.B, local.C, local.D, local.E, 2, 14, 11, 12 ); - P2( local.E, local.A, local.B, local.C, local.D, 7, 8, 8, 13 ); - P2( local.D, local.E, local.A, local.B, local.C, 0, 13, 12, 5 ); - P2( local.C, local.D, local.E, local.A, local.B, 6, 6, 2, 14 ); - P2( local.B, local.C, local.D, local.E, local.A, 13, 5, 10, 13 ); - P2( local.A, local.B, local.C, local.D, local.E, 11, 12, 0, 13 ); - P2( local.E, local.A, local.B, local.C, local.D, 5, 7, 4, 7 ); - P2( local.D, local.E, local.A, local.B, local.C, 12, 5, 13, 5 ); -#undef F -#undef K -#undef Fp -#undef Kp - -#define F F4 -#define K 0x8F1BBCDC -#define Fp F2 -#define Kp 0x7A6D76E9 - P2( local.C, local.D, local.E, local.A, local.B, 1, 11, 8, 15 ); - P2( local.B, local.C, local.D, local.E, local.A, 9, 12, 6, 5 ); - P2( local.A, local.B, local.C, local.D, local.E, 11, 14, 4, 8 ); - P2( local.E, local.A, local.B, local.C, local.D, 10, 15, 1, 11 ); - P2( local.D, local.E, local.A, local.B, local.C, 0, 14, 3, 14 ); - P2( local.C, local.D, local.E, local.A, local.B, 8, 15, 11, 14 ); - P2( local.B, local.C, local.D, local.E, local.A, 12, 9, 15, 6 ); - P2( local.A, local.B, local.C, local.D, local.E, 4, 8, 0, 14 ); - P2( local.E, local.A, local.B, local.C, local.D, 13, 9, 5, 6 ); - P2( local.D, local.E, local.A, local.B, local.C, 3, 14, 12, 9 ); - P2( local.C, local.D, local.E, local.A, local.B, 7, 5, 2, 12 ); - P2( local.B, local.C, local.D, local.E, local.A, 15, 6, 13, 9 ); - P2( local.A, local.B, local.C, local.D, local.E, 14, 8, 9, 12 ); - P2( local.E, local.A, local.B, local.C, local.D, 5, 6, 7, 5 ); - P2( local.D, local.E, local.A, local.B, local.C, 6, 5, 10, 15 ); - P2( local.C, local.D, local.E, local.A, local.B, 2, 12, 14, 8 ); -#undef F -#undef K -#undef Fp -#undef Kp - -#define F F5 -#define K 0xA953FD4E -#define Fp F1 -#define Kp 0x00000000 - P2( local.B, local.C, local.D, local.E, local.A, 4, 9, 12, 8 ); - P2( local.A, local.B, local.C, local.D, local.E, 0, 15, 15, 5 ); - P2( local.E, local.A, local.B, local.C, local.D, 5, 5, 10, 12 ); - P2( local.D, local.E, local.A, local.B, local.C, 9, 11, 4, 9 ); - P2( local.C, local.D, local.E, local.A, local.B, 7, 6, 1, 12 ); - P2( local.B, local.C, local.D, local.E, local.A, 12, 8, 5, 5 ); - P2( local.A, local.B, local.C, local.D, local.E, 2, 13, 8, 14 ); - P2( local.E, local.A, local.B, local.C, local.D, 10, 12, 7, 6 ); - P2( local.D, local.E, local.A, local.B, local.C, 14, 5, 6, 8 ); - P2( local.C, local.D, local.E, local.A, local.B, 1, 12, 2, 13 ); - P2( local.B, local.C, local.D, local.E, local.A, 3, 13, 13, 6 ); - P2( local.A, local.B, local.C, local.D, local.E, 8, 14, 14, 5 ); - P2( local.E, local.A, local.B, local.C, local.D, 11, 11, 0, 15 ); - P2( local.D, local.E, local.A, local.B, local.C, 6, 8, 3, 13 ); - P2( local.C, local.D, local.E, local.A, local.B, 15, 5, 9, 11 ); - P2( local.B, local.C, local.D, local.E, local.A, 13, 6, 11, 11 ); -#undef F -#undef K -#undef Fp -#undef Kp - - local.C = ctx->state[1] + local.C + local.Dp; - ctx->state[1] = ctx->state[2] + local.D + local.Ep; - ctx->state[2] = ctx->state[3] + local.E + local.Ap; - ctx->state[3] = ctx->state[4] + local.A + local.Bp; - ctx->state[4] = ctx->state[0] + local.B + local.Cp; - ctx->state[0] = local.C; - - /* Zeroise variables to clear sensitive data from memory. */ - mbedtls_platform_zeroize( &local, sizeof( local ) ); - - return( 0 ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_ripemd160_process( mbedtls_ripemd160_context *ctx, - const unsigned char data[64] ) -{ - mbedtls_internal_ripemd160_process( ctx, data ); -} -#endif -#endif /* !MBEDTLS_RIPEMD160_PROCESS_ALT */ - -/* - * RIPEMD-160 process buffer - */ -int mbedtls_ripemd160_update_ret( mbedtls_ripemd160_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - size_t fill; - uint32_t left; - - if( ilen == 0 ) - return( 0 ); - - left = ctx->total[0] & 0x3F; - fill = 64 - left; - - ctx->total[0] += (uint32_t) ilen; - ctx->total[0] &= 0xFFFFFFFF; - - if( ctx->total[0] < (uint32_t) ilen ) - ctx->total[1]++; - - if( left && ilen >= fill ) - { - memcpy( (void *) (ctx->buffer + left), input, fill ); - - if( ( ret = mbedtls_internal_ripemd160_process( ctx, ctx->buffer ) ) != 0 ) - return( ret ); - - input += fill; - ilen -= fill; - left = 0; - } - - while( ilen >= 64 ) - { - if( ( ret = mbedtls_internal_ripemd160_process( ctx, input ) ) != 0 ) - return( ret ); - - input += 64; - ilen -= 64; - } - - if( ilen > 0 ) - { - memcpy( (void *) (ctx->buffer + left), input, ilen ); - } - - return( 0 ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_ripemd160_update( mbedtls_ripemd160_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - mbedtls_ripemd160_update_ret( ctx, input, ilen ); -} -#endif - -static const unsigned char ripemd160_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* - * RIPEMD-160 final digest - */ -int mbedtls_ripemd160_finish_ret( mbedtls_ripemd160_context *ctx, - unsigned char output[20] ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - uint32_t last, padn; - uint32_t high, low; - unsigned char msglen[8]; - - high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); - low = ( ctx->total[0] << 3 ); - - PUT_UINT32_LE( low, msglen, 0 ); - PUT_UINT32_LE( high, msglen, 4 ); - - last = ctx->total[0] & 0x3F; - padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); - - ret = mbedtls_ripemd160_update_ret( ctx, ripemd160_padding, padn ); - if( ret != 0 ) - return( ret ); - - ret = mbedtls_ripemd160_update_ret( ctx, msglen, 8 ); - if( ret != 0 ) - return( ret ); - - PUT_UINT32_LE( ctx->state[0], output, 0 ); - PUT_UINT32_LE( ctx->state[1], output, 4 ); - PUT_UINT32_LE( ctx->state[2], output, 8 ); - PUT_UINT32_LE( ctx->state[3], output, 12 ); - PUT_UINT32_LE( ctx->state[4], output, 16 ); - - return( 0 ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_ripemd160_finish( mbedtls_ripemd160_context *ctx, - unsigned char output[20] ) -{ - mbedtls_ripemd160_finish_ret( ctx, output ); -} -#endif - -#endif /* ! MBEDTLS_RIPEMD160_ALT */ - -/* - * output = RIPEMD-160( input buffer ) - */ -int mbedtls_ripemd160_ret( const unsigned char *input, - size_t ilen, - unsigned char output[20] ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - mbedtls_ripemd160_context ctx; - - mbedtls_ripemd160_init( &ctx ); - - if( ( ret = mbedtls_ripemd160_starts_ret( &ctx ) ) != 0 ) - goto exit; - - if( ( ret = mbedtls_ripemd160_update_ret( &ctx, input, ilen ) ) != 0 ) - goto exit; - - if( ( ret = mbedtls_ripemd160_finish_ret( &ctx, output ) ) != 0 ) - goto exit; - -exit: - mbedtls_ripemd160_free( &ctx ); - - return( ret ); -} - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_ripemd160( const unsigned char *input, - size_t ilen, - unsigned char output[20] ) -{ - mbedtls_ripemd160_ret( input, ilen, output ); -} -#endif - -#if defined(MBEDTLS_SELF_TEST) -/* - * Test vectors from the RIPEMD-160 paper and - * http://homes.esat.kuleuven.be/~bosselae/mbedtls_ripemd160.html#HMAC - */ -#define TESTS 8 -static const unsigned char ripemd160_test_str[TESTS][81] = -{ - { "" }, - { "a" }, - { "abc" }, - { "message digest" }, - { "abcdefghijklmnopqrstuvwxyz" }, - { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" }, - { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" }, - { "12345678901234567890123456789012345678901234567890123456789012345678901234567890" }, -}; - -static const size_t ripemd160_test_strlen[TESTS] = -{ - 0, 1, 3, 14, 26, 56, 62, 80 -}; - -static const unsigned char ripemd160_test_md[TESTS][20] = -{ - { 0x9c, 0x11, 0x85, 0xa5, 0xc5, 0xe9, 0xfc, 0x54, 0x61, 0x28, - 0x08, 0x97, 0x7e, 0xe8, 0xf5, 0x48, 0xb2, 0x25, 0x8d, 0x31 }, - { 0x0b, 0xdc, 0x9d, 0x2d, 0x25, 0x6b, 0x3e, 0xe9, 0xda, 0xae, - 0x34, 0x7b, 0xe6, 0xf4, 0xdc, 0x83, 0x5a, 0x46, 0x7f, 0xfe }, - { 0x8e, 0xb2, 0x08, 0xf7, 0xe0, 0x5d, 0x98, 0x7a, 0x9b, 0x04, - 0x4a, 0x8e, 0x98, 0xc6, 0xb0, 0x87, 0xf1, 0x5a, 0x0b, 0xfc }, - { 0x5d, 0x06, 0x89, 0xef, 0x49, 0xd2, 0xfa, 0xe5, 0x72, 0xb8, - 0x81, 0xb1, 0x23, 0xa8, 0x5f, 0xfa, 0x21, 0x59, 0x5f, 0x36 }, - { 0xf7, 0x1c, 0x27, 0x10, 0x9c, 0x69, 0x2c, 0x1b, 0x56, 0xbb, - 0xdc, 0xeb, 0x5b, 0x9d, 0x28, 0x65, 0xb3, 0x70, 0x8d, 0xbc }, - { 0x12, 0xa0, 0x53, 0x38, 0x4a, 0x9c, 0x0c, 0x88, 0xe4, 0x05, - 0xa0, 0x6c, 0x27, 0xdc, 0xf4, 0x9a, 0xda, 0x62, 0xeb, 0x2b }, - { 0xb0, 0xe2, 0x0b, 0x6e, 0x31, 0x16, 0x64, 0x02, 0x86, 0xed, - 0x3a, 0x87, 0xa5, 0x71, 0x30, 0x79, 0xb2, 0x1f, 0x51, 0x89 }, - { 0x9b, 0x75, 0x2e, 0x45, 0x57, 0x3d, 0x4b, 0x39, 0xf4, 0xdb, - 0xd3, 0x32, 0x3c, 0xab, 0x82, 0xbf, 0x63, 0x32, 0x6b, 0xfb }, -}; - -/* - * Checkup routine - */ -int mbedtls_ripemd160_self_test( int verbose ) -{ - int i, ret = 0; - unsigned char output[20]; - - memset( output, 0, sizeof output ); - - for( i = 0; i < TESTS; i++ ) - { - if( verbose != 0 ) - mbedtls_printf( " RIPEMD-160 test #%d: ", i + 1 ); - - ret = mbedtls_ripemd160_ret( ripemd160_test_str[i], - ripemd160_test_strlen[i], output ); - if( ret != 0 ) - goto fail; - - if( memcmp( output, ripemd160_test_md[i], 20 ) != 0 ) - { - ret = 1; - goto fail; - } - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - } - - if( verbose != 0 ) - mbedtls_printf( "\n" ); - - return( 0 ); - -fail: - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - - return( ret ); -} - -#endif /* MBEDTLS_SELF_TEST */ - -#endif /* MBEDTLS_RIPEMD160_C */ diff --git a/third_party/mbedtls/ripemd160.h b/third_party/mbedtls/ripemd160.h deleted file mode 100644 index b0b459a6b..000000000 --- a/third_party/mbedtls/ripemd160.h +++ /dev/null @@ -1,235 +0,0 @@ -/* clang-format off */ - -/** - * \file ripemd160.h - * - * \brief RIPE MD-160 message digest - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_RIPEMD160_H -#define MBEDTLS_RIPEMD160_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -/* MBEDTLS_ERR_RIPEMD160_HW_ACCEL_FAILED is deprecated and should not be used. - */ -#define MBEDTLS_ERR_RIPEMD160_HW_ACCEL_FAILED -0x0031 /**< RIPEMD160 hardware accelerator failed */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(MBEDTLS_RIPEMD160_ALT) -// Regular implementation -// - -/** - * \brief RIPEMD-160 context structure - */ -typedef struct mbedtls_ripemd160_context -{ - uint32_t total[2]; /*!< number of bytes processed */ - uint32_t state[5]; /*!< intermediate digest state */ - unsigned char buffer[64]; /*!< data block being processed */ -} -mbedtls_ripemd160_context; - -#else /* MBEDTLS_RIPEMD160_ALT */ -/* #include "third_party/mbedtls/ripemd160_alt.h" */ -#endif /* MBEDTLS_RIPEMD160_ALT */ - -/** - * \brief Initialize RIPEMD-160 context - * - * \param ctx RIPEMD-160 context to be initialized - */ -void mbedtls_ripemd160_init( mbedtls_ripemd160_context *ctx ); - -/** - * \brief Clear RIPEMD-160 context - * - * \param ctx RIPEMD-160 context to be cleared - */ -void mbedtls_ripemd160_free( mbedtls_ripemd160_context *ctx ); - -/** - * \brief Clone (the state of) an RIPEMD-160 context - * - * \param dst The destination context - * \param src The context to be cloned - */ -void mbedtls_ripemd160_clone( mbedtls_ripemd160_context *dst, - const mbedtls_ripemd160_context *src ); - -/** - * \brief RIPEMD-160 context setup - * - * \param ctx context to be initialized - * - * \return 0 if successful - */ -int mbedtls_ripemd160_starts_ret( mbedtls_ripemd160_context *ctx ); - -/** - * \brief RIPEMD-160 process buffer - * - * \param ctx RIPEMD-160 context - * \param input buffer holding the data - * \param ilen length of the input data - * - * \return 0 if successful - */ -int mbedtls_ripemd160_update_ret( mbedtls_ripemd160_context *ctx, - const unsigned char *input, - size_t ilen ); - -/** - * \brief RIPEMD-160 final digest - * - * \param ctx RIPEMD-160 context - * \param output RIPEMD-160 checksum result - * - * \return 0 if successful - */ -int mbedtls_ripemd160_finish_ret( mbedtls_ripemd160_context *ctx, - unsigned char output[20] ); - -/** - * \brief RIPEMD-160 process data block (internal use only) - * - * \param ctx RIPEMD-160 context - * \param data buffer holding one block of data - * - * \return 0 if successful - */ -int mbedtls_internal_ripemd160_process( mbedtls_ripemd160_context *ctx, - const unsigned char data[64] ); - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief RIPEMD-160 context setup - * - * \deprecated Superseded by mbedtls_ripemd160_starts_ret() in 2.7.0 - * - * \param ctx context to be initialized - */ -MBEDTLS_DEPRECATED void mbedtls_ripemd160_starts( - mbedtls_ripemd160_context *ctx ); - -/** - * \brief RIPEMD-160 process buffer - * - * \deprecated Superseded by mbedtls_ripemd160_update_ret() in 2.7.0 - * - * \param ctx RIPEMD-160 context - * \param input buffer holding the data - * \param ilen length of the input data - */ -MBEDTLS_DEPRECATED void mbedtls_ripemd160_update( - mbedtls_ripemd160_context *ctx, - const unsigned char *input, - size_t ilen ); - -/** - * \brief RIPEMD-160 final digest - * - * \deprecated Superseded by mbedtls_ripemd160_finish_ret() in 2.7.0 - * - * \param ctx RIPEMD-160 context - * \param output RIPEMD-160 checksum result - */ -MBEDTLS_DEPRECATED void mbedtls_ripemd160_finish( - mbedtls_ripemd160_context *ctx, - unsigned char output[20] ); - -/** - * \brief RIPEMD-160 process data block (internal use only) - * - * \deprecated Superseded by mbedtls_internal_ripemd160_process() in 2.7.0 - * - * \param ctx RIPEMD-160 context - * \param data buffer holding one block of data - */ -MBEDTLS_DEPRECATED void mbedtls_ripemd160_process( - mbedtls_ripemd160_context *ctx, - const unsigned char data[64] ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -/** - * \brief Output = RIPEMD-160( input buffer ) - * - * \param input buffer holding the data - * \param ilen length of the input data - * \param output RIPEMD-160 checksum result - * - * \return 0 if successful - */ -int mbedtls_ripemd160_ret( const unsigned char *input, - size_t ilen, - unsigned char output[20] ); - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief Output = RIPEMD-160( input buffer ) - * - * \deprecated Superseded by mbedtls_ripemd160_ret() in 2.7.0 - * - * \param input buffer holding the data - * \param ilen length of the input data - * \param output RIPEMD-160 checksum result - */ -MBEDTLS_DEPRECATED void mbedtls_ripemd160( const unsigned char *input, - size_t ilen, - unsigned char output[20] ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -#if defined(MBEDTLS_SELF_TEST) - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int mbedtls_ripemd160_self_test( int verbose ); - -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* mbedtls_ripemd160.h */ diff --git a/third_party/mbedtls/rsa.c b/third_party/mbedtls/rsa.c index 49f517557..61064fd42 100644 --- a/third_party/mbedtls/rsa.c +++ b/third_party/mbedtls/rsa.c @@ -1,10 +1,20 @@ -/* clang-format off */ +#include "libc/rand/rand.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/md.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/rsa.h" +#include "third_party/mbedtls/rsa_internal.h" +#include "third_party/mbedtls/sha1.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * The RSA public-key cryptosystem * @@ -42,33 +52,8 @@ asm(".include \"libc/disclaimer.inc\""); * */ -#include "libc/rand/rand.h" -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_RSA_C) -#include "third_party/mbedtls/rsa.h" -#include "third_party/mbedtls/rsa_internal.h" -#include "third_party/mbedtls/oid.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_PKCS1_V21) -#include "third_party/mbedtls/md.h" -#endif - -#if defined(MBEDTLS_PKCS1_V15) && !defined(__OpenBSD__) && !defined(__NetBSD__) -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - #if !defined(MBEDTLS_RSA_ALT) /* Parameter validation macros */ @@ -483,23 +468,14 @@ int mbedtls_rsa_export_crt( const mbedtls_rsa_context *ctx, * Initialize an RSA context */ void mbedtls_rsa_init( mbedtls_rsa_context *ctx, - int padding, - int hash_id ) + int padding, + int hash_id ) { RSA_VALIDATE( ctx != NULL ); RSA_VALIDATE( padding == MBEDTLS_RSA_PKCS_V15 || padding == MBEDTLS_RSA_PKCS_V21 ); - memset( ctx, 0, sizeof( mbedtls_rsa_context ) ); - mbedtls_rsa_set_padding( ctx, padding, hash_id ); - -#if defined(MBEDTLS_THREADING_C) - /* Set ctx->ver to nonzero to indicate that the mutex has been - * initialized and will need to be freed. */ - ctx->ver = 1; - mbedtls_mutex_init( &ctx->mutex ); -#endif } /* @@ -748,11 +724,6 @@ int mbedtls_rsa_public( mbedtls_rsa_context *ctx, mbedtls_mpi_init( &T ); -#if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); -#endif - MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &T, input, ctx->len ) ); if( mbedtls_mpi_cmp_mpi( &T, &ctx->N ) >= 0 ) @@ -766,11 +737,6 @@ int mbedtls_rsa_public( mbedtls_rsa_context *ctx, MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &T, output, olen ) ); cleanup: -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); -#endif - mbedtls_mpi_free( &T ); if( ret != 0 ) @@ -786,7 +752,7 @@ cleanup: * Berlin Heidelberg, 1996. p. 104-113. */ static int rsa_prepare_blinding( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret, count = 0; mbedtls_mpi R; @@ -869,10 +835,10 @@ cleanup: * Do an RSA private key operation */ int mbedtls_rsa_private( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - const unsigned char *input, - unsigned char *output ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + const unsigned char *input, + unsigned char *output ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t olen; @@ -919,11 +885,6 @@ int mbedtls_rsa_private( mbedtls_rsa_context *ctx, return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); } -#if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); -#endif - /* MPI Initialization */ mbedtls_mpi_init( &T ); @@ -1061,10 +1022,6 @@ int mbedtls_rsa_private( mbedtls_rsa_context *ctx, MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &T, output, olen ) ); cleanup: -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); -#endif mbedtls_mpi_free( &P1 ); mbedtls_mpi_free( &Q1 ); @@ -1095,7 +1052,6 @@ cleanup: return( ret ); } -#if defined(MBEDTLS_PKCS1_V21) /** * Generate and apply the MGF1 operation (from PKCS#1 v2.1) to a buffer. * @@ -1151,9 +1107,7 @@ exit: return( ret ); } -#endif /* MBEDTLS_PKCS1_V21 */ -#if defined(MBEDTLS_PKCS1_V21) /* * Implementation of the PKCS#1 v2.1 RSAES-OAEP-ENCRYPT function */ @@ -1240,7 +1194,6 @@ exit: ? mbedtls_rsa_public( ctx, output, output ) : mbedtls_rsa_private( ctx, f_rng, p_rng, output, output ) ); } -#endif /* MBEDTLS_PKCS1_V21 */ #if defined(MBEDTLS_PKCS1_V15) /* @@ -1350,7 +1303,6 @@ int mbedtls_rsa_pkcs1_encrypt( mbedtls_rsa_context *ctx, } } -#if defined(MBEDTLS_PKCS1_V21) /* * Implementation of the PKCS#1 v2.1 RSAES-OAEP-DECRYPT function */ @@ -1495,7 +1447,6 @@ cleanup: return( ret ); } -#endif /* MBEDTLS_PKCS1_V21 */ #if defined(MBEDTLS_PKCS1_V15) /** Turn zero-or-nonzero into zero-or-all-bits-one, without branches. @@ -1799,7 +1750,6 @@ int mbedtls_rsa_pkcs1_decrypt( mbedtls_rsa_context *ctx, } } -#if defined(MBEDTLS_PKCS1_V21) /* * Implementation of the PKCS#1 v2.1 RSASSA-PSS-SIGN function */ @@ -1922,7 +1872,6 @@ exit: ? mbedtls_rsa_public( ctx, sig, sig ) : mbedtls_rsa_private( ctx, f_rng, p_rng, sig, sig ) ); } -#endif /* MBEDTLS_PKCS1_V21 */ #if defined(MBEDTLS_PKCS1_V15) /* @@ -2178,7 +2127,6 @@ int mbedtls_rsa_pkcs1_sign( mbedtls_rsa_context *ctx, } } -#if defined(MBEDTLS_PKCS1_V21) /* * Implementation of the PKCS#1 v2.1 RSASSA-PSS-VERIFY function */ @@ -2360,7 +2308,6 @@ int mbedtls_rsa_rsassa_pss_verify( mbedtls_rsa_context *ctx, sig ) ); } -#endif /* MBEDTLS_PKCS1_V21 */ #if defined(MBEDTLS_PKCS1_V15) /* @@ -2550,23 +2497,12 @@ void mbedtls_rsa_free( mbedtls_rsa_context *ctx ) mbedtls_mpi_free( &ctx->DQ ); mbedtls_mpi_free( &ctx->DP ); #endif /* MBEDTLS_RSA_NO_CRT */ - -#if defined(MBEDTLS_THREADING_C) - /* Free the mutex, but only if it hasn't been freed already. */ - if( ctx->ver != 0 ) - { - mbedtls_mutex_free( &ctx->mutex ); - ctx->ver = 0; - } -#endif } #endif /* !MBEDTLS_RSA_ALT */ #if defined(MBEDTLS_SELF_TEST) -#include "third_party/mbedtls/sha1.h" - /* * Example RSA-1024 keypair, for test purposes */ diff --git a/third_party/mbedtls/rsa.h b/third_party/mbedtls/rsa.h index 2ee79fa86..0b53d5fd2 100644 --- a/third_party/mbedtls/rsa.h +++ b/third_party/mbedtls/rsa.h @@ -1,47 +1,9 @@ -/* clang-format off */ - -/** - * \file rsa.h - * - * \brief This file provides an API for the RSA public-key cryptosystem. - * - * The RSA public-key cryptosystem is defined in Public-Key - * Cryptography Standards (PKCS) #1 v1.5: RSA Encryption - * and Public-Key Cryptography Standards (PKCS) #1 v2.1: - * RSA Cryptography Specifications. - * - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_RSA_H #define MBEDTLS_RSA_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/config.h" #include "third_party/mbedtls/md.h" - -#if defined(MBEDTLS_THREADING_C) -#include "third_party/mbedtls/threading.h" -#endif +/* clang-format off */ /* * RSA Error codes @@ -131,10 +93,6 @@ typedef struct mbedtls_rsa_context as specified in md.h for use in the MGF mask generating function used in the EME-OAEP and EMSA-PSS encodings. */ -#if defined(MBEDTLS_THREADING_C) - /* Invariant: the mutex is initialized iff ver != 0. */ - mbedtls_threading_mutex_t mutex; /*!< Thread-safety mutex. */ -#endif } mbedtls_rsa_context; @@ -290,16 +248,6 @@ int mbedtls_rsa_complete( mbedtls_rsa_context *ctx ); * written, with additional unused space filled leading by * zero Bytes. * - * Possible reasons for returning - * #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED:
    - *
  • An alternative RSA implementation is in use, which - * stores the key externally, and either cannot or should - * not export it into RAM.
  • - *
  • A SW or HW implementation might not support a certain - * deduction. For example, \p P, \p Q from \p N, \p D, - * and \p E if the former are not part of the - * implementation.
- * * If the function fails due to an unsupported operation, * the RSA context stays intact and remains usable. * @@ -316,9 +264,6 @@ int mbedtls_rsa_complete( mbedtls_rsa_context *ctx ); * This may be \c NULL if this field need not be exported. * * \return \c 0 on success. - * \return #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED if exporting the - * requested parameters cannot be done due to missing - * functionality or because of security policies. * \return A non-zero return code on any other failure. * */ @@ -335,15 +280,6 @@ int mbedtls_rsa_export( const mbedtls_rsa_context *ctx, * written, with additional unused space filled leading by * zero Bytes. * - * Possible reasons for returning - * #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED:
    - *
  • An alternative RSA implementation is in use, which - * stores the key externally, and either cannot or should - * not export it into RAM.
  • - *
  • A SW or HW implementation might not support a certain - * deduction. For example, \p P, \p Q from \p N, \p D, - * and \p E if the former are not part of the - * implementation.
* If the function fails due to an unsupported operation, * the RSA context stays intact and remains usable. * @@ -368,9 +304,6 @@ int mbedtls_rsa_export( const mbedtls_rsa_context *ctx, * \param E_len The size of the buffer for the public exponent. * * \return \c 0 on success. - * \return #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED if exporting the - * requested parameters cannot be done due to missing - * functionality or because of security policies. * \return A non-zero return code on any other failure. */ int mbedtls_rsa_export_raw( const mbedtls_rsa_context *ctx, @@ -587,10 +520,6 @@ int mbedtls_rsa_private( mbedtls_rsa_context *ctx, * are likely to remove the \p mode argument and have it * implicitly set to #MBEDTLS_RSA_PUBLIC. * - * \note Alternative implementations of RSA need not support - * mode being set to #MBEDTLS_RSA_PRIVATE and might instead - * return #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED. - * * \param ctx The initialized RSA context to use. * \param f_rng The RNG to use. It is mandatory for PKCS#1 v2.1 padding * encoding, and for PKCS#1 v1.5 padding encoding when used @@ -630,10 +559,6 @@ int mbedtls_rsa_pkcs1_encrypt( mbedtls_rsa_context *ctx, * are likely to remove the \p mode argument and have it * implicitly set to #MBEDTLS_RSA_PUBLIC. * - * \note Alternative implementations of RSA need not support - * mode being set to #MBEDTLS_RSA_PRIVATE and might instead - * return #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED. - * * \param ctx The initialized RSA context to use. * \param f_rng The RNG function to use. It is needed for padding generation * if \p mode is #MBEDTLS_RSA_PUBLIC. If \p mode is @@ -674,10 +599,6 @@ int mbedtls_rsa_rsaes_pkcs1_v15_encrypt( mbedtls_rsa_context *ctx, * are likely to remove the \p mode argument and have it * implicitly set to #MBEDTLS_RSA_PUBLIC. * - * \note Alternative implementations of RSA need not support - * mode being set to #MBEDTLS_RSA_PRIVATE and might instead - * return #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED. - * * \param ctx The initnialized RSA context to use. * \param f_rng The RNG function to use. This is needed for padding * generation and must be provided. @@ -728,10 +649,6 @@ int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx, * are likely to remove the \p mode argument and have it * implicitly set to #MBEDTLS_RSA_PRIVATE. * - * \note Alternative implementations of RSA need not support - * mode being set to #MBEDTLS_RSA_PUBLIC and might instead - * return #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED. - * * \param ctx The initialized RSA context to use. * \param f_rng The RNG function. If \p mode is #MBEDTLS_RSA_PRIVATE, * this is used for blinding and should be provided; see @@ -777,10 +694,6 @@ int mbedtls_rsa_pkcs1_decrypt( mbedtls_rsa_context *ctx, * are likely to remove the \p mode argument and have it * implicitly set to #MBEDTLS_RSA_PRIVATE. * - * \note Alternative implementations of RSA need not support - * mode being set to #MBEDTLS_RSA_PUBLIC and might instead - * return #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED. - * * \param ctx The initialized RSA context to use. * \param f_rng The RNG function. If \p mode is #MBEDTLS_RSA_PRIVATE, * this is used for blinding and should be provided; see @@ -828,10 +741,6 @@ int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx, * are likely to remove the \p mode argument and have it * implicitly set to #MBEDTLS_RSA_PRIVATE. * - * \note Alternative implementations of RSA need not support - * mode being set to #MBEDTLS_RSA_PUBLIC and might instead - * return #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED. - * * \param ctx The initialized RSA context to use. * \param f_rng The RNG function. If \p mode is #MBEDTLS_RSA_PRIVATE, * this is used for blinding and should be provided; see @@ -886,10 +795,6 @@ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, * are likely to remove the \p mode argument and have it * implicitly set to #MBEDTLS_RSA_PRIVATE. * - * \note Alternative implementations of RSA need not support - * mode being set to #MBEDTLS_RSA_PUBLIC and might instead - * return #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED. - * * \param ctx The initialized RSA context to use. * \param f_rng The RNG function to use. If the padding mode is PKCS#1 v2.1, * this must be provided. If the padding mode is PKCS#1 v1.5 and @@ -935,10 +840,6 @@ int mbedtls_rsa_pkcs1_sign( mbedtls_rsa_context *ctx, * are likely to remove the \p mode argument and have it * implicitly set to #MBEDTLS_RSA_PRIVATE. * - * \note Alternative implementations of RSA need not support - * mode being set to #MBEDTLS_RSA_PUBLIC and might instead - * return #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED. - * * \param ctx The initialized RSA context to use. * \param f_rng The RNG function. If \p mode is #MBEDTLS_RSA_PRIVATE, * this is used for blinding and should be provided; see @@ -1000,10 +901,6 @@ int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx, * are likely to remove the \p mode argument and have it * implicitly set to #MBEDTLS_RSA_PRIVATE. * - * \note Alternative implementations of RSA need not support - * mode being set to #MBEDTLS_RSA_PUBLIC and might instead - * return #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED. - * * \param ctx The initialized RSA context to use. * \param f_rng The RNG function. It must not be \c NULL. * \param p_rng The RNG context to be passed to \p f_rng. This may be \c NULL @@ -1052,10 +949,6 @@ int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx, * are likely to remove the \p mode argument and have it * set to #MBEDTLS_RSA_PUBLIC. * - * \note Alternative implementations of RSA need not support - * mode being set to #MBEDTLS_RSA_PRIVATE and might instead - * return #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED. - * * \param ctx The initialized RSA public key context to use. * \param f_rng The RNG function to use. If \p mode is #MBEDTLS_RSA_PRIVATE, * this is used for blinding and should be provided; see @@ -1098,10 +991,6 @@ int mbedtls_rsa_pkcs1_verify( mbedtls_rsa_context *ctx, * are likely to remove the \p mode argument and have it * set to #MBEDTLS_RSA_PUBLIC. * - * \note Alternative implementations of RSA need not support - * mode being set to #MBEDTLS_RSA_PRIVATE and might instead - * return #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED. - * * \param ctx The initialized RSA public key context to use. * \param f_rng The RNG function to use. If \p mode is #MBEDTLS_RSA_PRIVATE, * this is used for blinding and should be provided; see @@ -1155,10 +1044,6 @@ int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx, * are likely to remove the \p mode argument and have it * implicitly set to #MBEDTLS_RSA_PUBLIC. * - * \note Alternative implementations of RSA need not support - * mode being set to #MBEDTLS_RSA_PRIVATE and might instead - * return #MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED. - * * \param ctx The initialized RSA public key context to use. * \param f_rng The RNG function to use. If \p mode is #MBEDTLS_RSA_PRIVATE, * this is used for blinding and should be provided; see diff --git a/third_party/mbedtls/rsa_internal.c b/third_party/mbedtls/rsa_internal.c index 5d46455b7..9edab3c81 100644 --- a/third_party/mbedtls/rsa_internal.c +++ b/third_party/mbedtls/rsa_internal.c @@ -1,5 +1,15 @@ -/* clang-format off */ +#include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/rsa.h" +#include "third_party/mbedtls/rsa_internal.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * Helper functions for the RSA module * @@ -20,14 +30,8 @@ * */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_RSA_C) -#include "third_party/mbedtls/rsa.h" -#include "third_party/mbedtls/bignum.h" -#include "third_party/mbedtls/rsa_internal.h" - /* * Compute RSA prime factors from public and private exponents * diff --git a/third_party/mbedtls/rsa_internal.h b/third_party/mbedtls/rsa_internal.h index 4c1372170..77df82ffb 100644 --- a/third_party/mbedtls/rsa_internal.h +++ b/third_party/mbedtls/rsa_internal.h @@ -1,69 +1,8 @@ -/* clang-format off */ - -/** - * \file rsa_internal.h - * - * \brief Context-independent RSA helper functions - * - * This module declares some RSA-related helper functions useful when - * implementing the RSA interface. These functions are provided in a separate - * compilation unit in order to make it easy for designers of alternative RSA - * implementations to use them in their own code, as it is conceived that the - * functionality they provide will be necessary for most complete - * implementations. - * - * End-users of Mbed TLS who are not providing their own alternative RSA - * implementations should not use these functions directly, and should instead - * use only the functions declared in rsa.h. - * - * The interface provided by this module will be maintained through LTS (Long - * Term Support) branches of Mbed TLS, but may otherwise be subject to change, - * and must be considered an internal interface of the library. - * - * There are two classes of helper functions: - * - * (1) Parameter-generating helpers. These are: - * - mbedtls_rsa_deduce_primes - * - mbedtls_rsa_deduce_private_exponent - * - mbedtls_rsa_deduce_crt - * Each of these functions takes a set of core RSA parameters and - * generates some other, or CRT related parameters. - * - * (2) Parameter-checking helpers. These are: - * - mbedtls_rsa_validate_params - * - mbedtls_rsa_validate_crt - * They take a set of core or CRT related RSA parameters and check their - * validity. - * - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - #ifndef MBEDTLS_RSA_INTERNAL_H #define MBEDTLS_RSA_INTERNAL_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/config.h" +/* clang-format off */ #ifdef __cplusplus extern "C" { diff --git a/third_party/mbedtls/san.c b/third_party/mbedtls/san.c new file mode 100644 index 000000000..534899705 --- /dev/null +++ b/third_party/mbedtls/san.c @@ -0,0 +1,89 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/bits/bits.h" +#include "libc/sock/sock.h" +#include "libc/sysv/consts/af.h" +#include "third_party/mbedtls/asn1.h" +#include "third_party/mbedtls/asn1write.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/san.h" +#include "third_party/mbedtls/x509_crt.h" + +/** + * Writes Subject Alternative Name section to certificate. + * + * @see RFC5280 §4.2.1.6 + */ +int mbedtls_x509write_crt_set_subject_alternative_name( + mbedtls_x509write_cert *ctx, const struct mbedtls_san *san, size_t sanlen) { + int ret, a, b, c; + size_t i, len, cap, itemlen; + unsigned char *pc, *buf, *item, ip4[4]; + if (!sanlen) return 0; + cap = sanlen * (253 + 5 + 1) + 5 + 1; + if (!(buf = mbedtls_calloc(1, cap))) return MBEDTLS_ERR_ASN1_ALLOC_FAILED; + pc = buf + cap; + len = 0; + for (i = sanlen; i--;) { + switch (san[i].tag) { + case MBEDTLS_X509_SAN_RFC822_NAME: + case MBEDTLS_X509_SAN_DNS_NAME: + case MBEDTLS_X509_SAN_UNIFORM_RESOURCE_IDENTIFIER: + item = (const unsigned char *)san[i].val; + itemlen = strlen(san[i].val); + break; + case MBEDTLS_X509_SAN_IP_ADDRESS: + WRITE32BE(ip4, san[i].ip4); + item = ip4; + itemlen = 4; + break; + default: + ret = MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE; + goto finish; + } + if (itemlen > 253) { + ret = MBEDTLS_ERR_ASN1_INVALID_LENGTH; + goto finish; + } + ret = mbedtls_asn1_write_raw_buffer(&pc, buf, item, itemlen); + if (ret < 0) goto finish; + len += ret; + ret = mbedtls_asn1_write_len(&pc, buf, itemlen); + if (ret < 0) goto finish; + len += ret; + ret = mbedtls_asn1_write_tag(&pc, buf, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | san[i].tag); + if (ret < 0) goto finish; + len += ret; + } + ret = mbedtls_asn1_write_len(&pc, buf, len); + if (ret < 0) goto finish; + len += ret; + ret = mbedtls_asn1_write_tag( + &pc, buf, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE); + if (ret < 0) goto finish; + len += ret; + ret = mbedtls_x509write_crt_set_extension( + ctx, MBEDTLS_OID_SUBJECT_ALT_NAME, + MBEDTLS_OID_SIZE(MBEDTLS_OID_SUBJECT_ALT_NAME), 0, buf + cap - len, len); +finish: + mbedtls_free(buf); + return ret; +} diff --git a/third_party/mbedtls/san.h b/third_party/mbedtls/san.h new file mode 100644 index 000000000..2b0aaf8c2 --- /dev/null +++ b/third_party/mbedtls/san.h @@ -0,0 +1,18 @@ +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_SAN_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_SAN_H_ +#include "third_party/mbedtls/x509_crt.h" +COSMOPOLITAN_C_START_ + +struct mbedtls_san { + int tag; + union { + const char *val; + uint32_t ip4; + }; +}; + +int mbedtls_x509write_crt_set_subject_alternative_name( + mbedtls_x509write_cert *, const struct mbedtls_san *, size_t); + +COSMOPOLITAN_C_END_ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_SAN_H_ */ diff --git a/third_party/mbedtls/sha1.c b/third_party/mbedtls/sha1.c index 38b10c201..d93070241 100644 --- a/third_party/mbedtls/sha1.c +++ b/third_party/mbedtls/sha1.c @@ -1,10 +1,18 @@ -/* clang-format off */ +#include "libc/bits/bits.h" +#include "libc/str/str.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/endian.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/sha1.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * FIPS-180-1 compliant SHA-1 implementation * @@ -29,115 +37,169 @@ asm(".include \"libc/disclaimer.inc\""); * http://www.itl.nist.gov/fipspubs/fip180-1.htm */ -#include "libc/str/str.h" -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_SHA1_C) - -#include "third_party/mbedtls/sha1.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - #define SHA1_VALIDATE_RET(cond) \ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_SHA1_BAD_INPUT_DATA ) #define SHA1_VALIDATE(cond) MBEDTLS_INTERNAL_VALIDATE( cond ) -#if !defined(MBEDTLS_SHA1_ALT) - -/* - * 32-bit integer manipulation macros (big endian) +/** + * \brief This function initializes a SHA-1 context. + * + * \warning SHA-1 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. + * + * \param ctx The SHA-1 context to initialize. + * This must not be \c NULL. + * */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - void mbedtls_sha1_init( mbedtls_sha1_context *ctx ) { SHA1_VALIDATE( ctx != NULL ); - memset( ctx, 0, sizeof( mbedtls_sha1_context ) ); } +/** + * \brief This function clears a SHA-1 context. + * + * \warning SHA-1 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. + * + * \param ctx The SHA-1 context to clear. This may be \c NULL, + * in which case this function does nothing. If it is + * not \c NULL, it must point to an initialized + * SHA-1 context. + * + */ void mbedtls_sha1_free( mbedtls_sha1_context *ctx ) { - if( ctx == NULL ) - return; - + if( !ctx ) return; mbedtls_platform_zeroize( ctx, sizeof( mbedtls_sha1_context ) ); } +/** + * \brief This function clones the state of a SHA-1 context. + * + * \warning SHA-1 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. + * + * \param dst The SHA-1 context to clone to. This must be initialized. + * \param src The SHA-1 context to clone from. This must be initialized. + * + */ void mbedtls_sha1_clone( mbedtls_sha1_context *dst, const mbedtls_sha1_context *src ) { SHA1_VALIDATE( dst != NULL ); SHA1_VALIDATE( src != NULL ); - *dst = *src; } -/* - * SHA-1 context setup +/** + * \brief This function starts a SHA-1 checksum calculation. + * + * \warning SHA-1 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. + * + * \param ctx The SHA-1 context to initialize. This must be initialized. + * + * \return \c 0 on success. + * \return A negative error code on failure. + * */ int mbedtls_sha1_starts_ret( mbedtls_sha1_context *ctx ) { SHA1_VALIDATE_RET( ctx != NULL ); - ctx->total[0] = 0; ctx->total[1] = 0; - ctx->state[0] = 0x67452301; ctx->state[1] = 0xEFCDAB89; ctx->state[2] = 0x98BADCFE; ctx->state[3] = 0x10325476; ctx->state[4] = 0xC3D2E1F0; - return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_sha1_starts( mbedtls_sha1_context *ctx ) -{ - mbedtls_sha1_starts_ret( ctx ); -} -#endif - #if !defined(MBEDTLS_SHA1_PROCESS_ALT) +/** + * \brief SHA-1 process data block (internal use only). + * + * \warning SHA-1 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. + * + * \param ctx The SHA-1 context to use. This must be initialized. + * \param data The data block being processed. This must be a + * readable buffer of length \c 64 Bytes. + * + * \return \c 0 on success. + * \return A negative error code on failure. + * + */ int mbedtls_internal_sha1_process( mbedtls_sha1_context *ctx, const unsigned char data[64] ) { + SHA1_VALIDATE_RET( ctx != NULL ); + SHA1_VALIDATE_RET( (const unsigned char *)data != NULL ); + +#ifdef MBEDTLS_SHA1_SMALLER +#define ROL(a, b) ((a << b) | (a >> (32 - b))) + + uint32_t a, b, c, d, e, i, j, t, m[80]; + for (i = 0, j = 0; i < 16; ++i, j += 4) { + m[i] = READ32BE(data + j); + } + for (; i < 80; ++i) { + m[i] = (m[i - 3] ^ m[i - 8] ^ m[i - 14] ^ m[i - 16]); + m[i] = (m[i] << 1) | (m[i] >> 31); + } + a = ctx->state[0]; + b = ctx->state[1]; + c = ctx->state[2]; + d = ctx->state[3]; + e = ctx->state[4]; + for (i = 0; i < 20; ++i) { + t = ROL(a, 5) + ((b & c) ^ (~b & d)) + e + 0x5a827999 + m[i]; + e = d, d = c; + c = ROL(b, 30); + b = a, a = t; + } + for (; i < 40; ++i) { + t = ROL(a, 5) + (b ^ c ^ d) + e + 0x6ed9eba1 + m[i]; + e = d, d = c; + c = ROL(b, 30); + b = a, a = t; + } + for (; i < 60; ++i) { + t = ROL(a, 5) + ((b & c) ^ (b & d) ^ (c & d)) + e + 0x8f1bbcdc + m[i]; + e = d, d = c; + c = ROL(b, 30); + b = a, a = t; + } + for (; i < 80; ++i) { + t = ROL(a, 5) + (b ^ c ^ d) + e + 0xca62c1d6 + m[i]; + e = d, d = c; + c = ROL(b, 30); + b = a, a = t; + } + ctx->state[0] += a; + ctx->state[1] += b; + ctx->state[2] += c; + ctx->state[3] += d; + ctx->state[4] += e; + + mbedtls_platform_zeroize(m, sizeof(m)); + +#else + struct { uint32_t temp, W[16], A, B, C, D, E; } local; - SHA1_VALIDATE_RET( ctx != NULL ); - SHA1_VALIDATE_RET( (const unsigned char *)data != NULL ); - GET_UINT32_BE( local.W[ 0], data, 0 ); GET_UINT32_BE( local.W[ 1], data, 4 ); GET_UINT32_BE( local.W[ 2], data, 8 ); @@ -296,20 +358,29 @@ int mbedtls_internal_sha1_process( mbedtls_sha1_context *ctx, /* Zeroise buffers and variables to clear sensitive data from memory. */ mbedtls_platform_zeroize( &local, sizeof( local ) ); +#endif /* MBEDTLS_SHA1_SMALLER */ + return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_sha1_process( mbedtls_sha1_context *ctx, - const unsigned char data[64] ) -{ - mbedtls_internal_sha1_process( ctx, data ); -} -#endif #endif /* !MBEDTLS_SHA1_PROCESS_ALT */ -/* - * SHA-1 process buffer +/** + * \brief This function feeds an input buffer into an ongoing SHA-1 + * checksum calculation. + * + * \warning SHA-1 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. + * + * \param ctx The SHA-1 context. This must be initialized + * and have a hash operation started. + * \param input The buffer holding the input data. + * This must be a readable buffer of length \p ilen Bytes. + * \param ilen The length of the input data \p input in Bytes. + * + * \return \c 0 on success. + * \return A negative error code on failure. */ int mbedtls_sha1_update_ret( mbedtls_sha1_context *ctx, const unsigned char *input, @@ -361,17 +432,21 @@ int mbedtls_sha1_update_ret( mbedtls_sha1_context *ctx, return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_sha1_update( mbedtls_sha1_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - mbedtls_sha1_update_ret( ctx, input, ilen ); -} -#endif - -/* - * SHA-1 final digest +/** + * \brief This function finishes the SHA-1 operation, and writes + * the result to the output buffer. + * + * \warning SHA-1 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. + * + * \param ctx The SHA-1 context to use. This must be initialized and + * have a hash operation started. + * \param output The SHA-1 checksum result. This must be a writable + * buffer of length \c 20 Bytes. + * + * \return \c 0 on success. + * \return A negative error code on failure. */ int mbedtls_sha1_finish_ret( mbedtls_sha1_context *ctx, unsigned char output[20] ) @@ -431,18 +506,28 @@ int mbedtls_sha1_finish_ret( mbedtls_sha1_context *ctx, return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_sha1_finish( mbedtls_sha1_context *ctx, - unsigned char output[20] ) -{ - mbedtls_sha1_finish_ret( ctx, output ); -} -#endif - -#endif /* !MBEDTLS_SHA1_ALT */ - -/* - * output = SHA-1( input buffer ) +/** + * \brief This function calculates the SHA-1 checksum of a buffer. + * + * The function allocates the context, performs the + * calculation, and frees the context. + * + * The SHA-1 result is calculated as + * output = SHA-1(input buffer). + * + * \warning SHA-1 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. + * + * \param input The buffer holding the input data. + * This must be a readable buffer of length \p ilen Bytes. + * \param ilen The length of the input data \p input in Bytes. + * \param output The SHA-1 checksum result. + * This must be a writable buffer of length \c 20 Bytes. + * + * \return \c 0 on success. + * \return A negative error code on failure. + * */ int mbedtls_sha1_ret( const unsigned char *input, size_t ilen, @@ -471,15 +556,6 @@ exit: return( ret ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_sha1( const unsigned char *input, - size_t ilen, - unsigned char output[20] ) -{ - mbedtls_sha1_ret( input, ilen, output ); -} -#endif - #if defined(MBEDTLS_SELF_TEST) /* * FIPS-180-1 test vectors @@ -506,8 +582,16 @@ static const unsigned char sha1_test_sum[3][20] = 0xEB, 0x2B, 0xDB, 0xAD, 0x27, 0x31, 0x65, 0x34, 0x01, 0x6F } }; -/* - * Checkup routine +/** + * \brief The SHA-1 checkup routine. + * + * \warning SHA-1 is considered a weak message digest and its use + * constitutes a security risk. We recommend considering + * stronger message digests instead. + * + * \return \c 0 on success. + * \return \c 1 on failure. + * */ int mbedtls_sha1_self_test( int verbose ) { @@ -576,6 +660,5 @@ exit: return( ret ); } -#endif /* MBEDTLS_SELF_TEST */ -#endif /* MBEDTLS_SHA1_C */ +#endif /* MBEDTLS_SELF_TEST */ diff --git a/third_party/mbedtls/sha1.h b/third_party/mbedtls/sha1.h index 8e4662330..4e20b7e66 100644 --- a/third_party/mbedtls/sha1.h +++ b/third_party/mbedtls/sha1.h @@ -1,54 +1,12 @@ +#ifndef MBEDTLS_SHA1_H_ +#define MBEDTLS_SHA1_H_ +#include "third_party/mbedtls/config.h" +COSMOPOLITAN_C_START_ /* clang-format off */ -/** - * \file sha1.h - * - * \brief This file contains SHA-1 definitions and functions. - * - * The Secure Hash Algorithm 1 (SHA-1) cryptographic hash function is defined in - * FIPS 180-4: Secure Hash Standard (SHS). - * - * \warning SHA-1 is considered a weak message digest and its use constitutes - * a security risk. We recommend considering stronger message - * digests instead. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_SHA1_H -#define MBEDTLS_SHA1_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - /* MBEDTLS_ERR_SHA1_HW_ACCEL_FAILED is deprecated and should not be used. */ -#define MBEDTLS_ERR_SHA1_HW_ACCEL_FAILED -0x0035 /**< SHA-1 hardware accelerator failed */ -#define MBEDTLS_ERR_SHA1_BAD_INPUT_DATA -0x0073 /**< SHA-1 input data was malformed. */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(MBEDTLS_SHA1_ALT) -// Regular implementation -// +#define MBEDTLS_ERR_SHA1_HW_ACCEL_FAILED -0x0035 /**< SHA-1 hardware accelerator failed */ +#define MBEDTLS_ERR_SHA1_BAD_INPUT_DATA -0x0073 /**< SHA-1 input data was malformed. */ /** * \brief The SHA-1 context structure. @@ -60,291 +18,21 @@ extern "C" { */ typedef struct mbedtls_sha1_context { - uint32_t total[2]; /*!< The number of Bytes processed. */ - uint32_t state[5]; /*!< The intermediate digest state. */ - unsigned char buffer[64]; /*!< The data block being processed. */ + uint32_t total[2]; /*!< The number of Bytes processed. */ + uint32_t state[5]; /*!< The intermediate digest state. */ + uint8_t buffer[64]; /*!< The data block being processed. */ } mbedtls_sha1_context; -#else /* MBEDTLS_SHA1_ALT */ -/* #include "third_party/mbedtls/sha1_alt.h" */ -#endif /* MBEDTLS_SHA1_ALT */ +void mbedtls_sha1_init( mbedtls_sha1_context * ); +void mbedtls_sha1_free( mbedtls_sha1_context * ); +void mbedtls_sha1_clone( mbedtls_sha1_context *, const mbedtls_sha1_context * ); +int mbedtls_sha1_starts_ret( mbedtls_sha1_context * ); +int mbedtls_sha1_update_ret( mbedtls_sha1_context *, const unsigned char *, size_t ); +int mbedtls_sha1_finish_ret( mbedtls_sha1_context *, unsigned char[20] ); +int mbedtls_internal_sha1_process( mbedtls_sha1_context *, const unsigned char[64] ); +int mbedtls_sha1_ret( const unsigned char *, size_t, unsigned char[20] ); +int mbedtls_sha1_self_test( int ); -/** - * \brief This function initializes a SHA-1 context. - * - * \warning SHA-1 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - * \param ctx The SHA-1 context to initialize. - * This must not be \c NULL. - * - */ -void mbedtls_sha1_init( mbedtls_sha1_context *ctx ); - -/** - * \brief This function clears a SHA-1 context. - * - * \warning SHA-1 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - * \param ctx The SHA-1 context to clear. This may be \c NULL, - * in which case this function does nothing. If it is - * not \c NULL, it must point to an initialized - * SHA-1 context. - * - */ -void mbedtls_sha1_free( mbedtls_sha1_context *ctx ); - -/** - * \brief This function clones the state of a SHA-1 context. - * - * \warning SHA-1 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - * \param dst The SHA-1 context to clone to. This must be initialized. - * \param src The SHA-1 context to clone from. This must be initialized. - * - */ -void mbedtls_sha1_clone( mbedtls_sha1_context *dst, - const mbedtls_sha1_context *src ); - -/** - * \brief This function starts a SHA-1 checksum calculation. - * - * \warning SHA-1 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - * \param ctx The SHA-1 context to initialize. This must be initialized. - * - * \return \c 0 on success. - * \return A negative error code on failure. - * - */ -int mbedtls_sha1_starts_ret( mbedtls_sha1_context *ctx ); - -/** - * \brief This function feeds an input buffer into an ongoing SHA-1 - * checksum calculation. - * - * \warning SHA-1 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - * \param ctx The SHA-1 context. This must be initialized - * and have a hash operation started. - * \param input The buffer holding the input data. - * This must be a readable buffer of length \p ilen Bytes. - * \param ilen The length of the input data \p input in Bytes. - * - * \return \c 0 on success. - * \return A negative error code on failure. - */ -int mbedtls_sha1_update_ret( mbedtls_sha1_context *ctx, - const unsigned char *input, - size_t ilen ); - -/** - * \brief This function finishes the SHA-1 operation, and writes - * the result to the output buffer. - * - * \warning SHA-1 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - * \param ctx The SHA-1 context to use. This must be initialized and - * have a hash operation started. - * \param output The SHA-1 checksum result. This must be a writable - * buffer of length \c 20 Bytes. - * - * \return \c 0 on success. - * \return A negative error code on failure. - */ -int mbedtls_sha1_finish_ret( mbedtls_sha1_context *ctx, - unsigned char output[20] ); - -/** - * \brief SHA-1 process data block (internal use only). - * - * \warning SHA-1 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - * \param ctx The SHA-1 context to use. This must be initialized. - * \param data The data block being processed. This must be a - * readable buffer of length \c 64 Bytes. - * - * \return \c 0 on success. - * \return A negative error code on failure. - * - */ -int mbedtls_internal_sha1_process( mbedtls_sha1_context *ctx, - const unsigned char data[64] ); - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief This function starts a SHA-1 checksum calculation. - * - * \warning SHA-1 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - * \deprecated Superseded by mbedtls_sha1_starts_ret() in 2.7.0. - * - * \param ctx The SHA-1 context to initialize. This must be initialized. - * - */ -MBEDTLS_DEPRECATED void mbedtls_sha1_starts( mbedtls_sha1_context *ctx ); - -/** - * \brief This function feeds an input buffer into an ongoing SHA-1 - * checksum calculation. - * - * \warning SHA-1 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - * \deprecated Superseded by mbedtls_sha1_update_ret() in 2.7.0. - * - * \param ctx The SHA-1 context. This must be initialized and - * have a hash operation started. - * \param input The buffer holding the input data. - * This must be a readable buffer of length \p ilen Bytes. - * \param ilen The length of the input data \p input in Bytes. - * - */ -MBEDTLS_DEPRECATED void mbedtls_sha1_update( mbedtls_sha1_context *ctx, - const unsigned char *input, - size_t ilen ); - -/** - * \brief This function finishes the SHA-1 operation, and writes - * the result to the output buffer. - * - * \warning SHA-1 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - * \deprecated Superseded by mbedtls_sha1_finish_ret() in 2.7.0. - * - * \param ctx The SHA-1 context. This must be initialized and - * have a hash operation started. - * \param output The SHA-1 checksum result. - * This must be a writable buffer of length \c 20 Bytes. - */ -MBEDTLS_DEPRECATED void mbedtls_sha1_finish( mbedtls_sha1_context *ctx, - unsigned char output[20] ); - -/** - * \brief SHA-1 process data block (internal use only). - * - * \warning SHA-1 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - * \deprecated Superseded by mbedtls_internal_sha1_process() in 2.7.0. - * - * \param ctx The SHA-1 context. This must be initialized. - * \param data The data block being processed. - * This must be a readable buffer of length \c 64 bytes. - * - */ -MBEDTLS_DEPRECATED void mbedtls_sha1_process( mbedtls_sha1_context *ctx, - const unsigned char data[64] ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -/** - * \brief This function calculates the SHA-1 checksum of a buffer. - * - * The function allocates the context, performs the - * calculation, and frees the context. - * - * The SHA-1 result is calculated as - * output = SHA-1(input buffer). - * - * \warning SHA-1 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - * \param input The buffer holding the input data. - * This must be a readable buffer of length \p ilen Bytes. - * \param ilen The length of the input data \p input in Bytes. - * \param output The SHA-1 checksum result. - * This must be a writable buffer of length \c 20 Bytes. - * - * \return \c 0 on success. - * \return A negative error code on failure. - * - */ -int mbedtls_sha1_ret( const unsigned char *input, - size_t ilen, - unsigned char output[20] ); - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief This function calculates the SHA-1 checksum of a buffer. - * - * The function allocates the context, performs the - * calculation, and frees the context. - * - * The SHA-1 result is calculated as - * output = SHA-1(input buffer). - * - * \warning SHA-1 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - * \deprecated Superseded by mbedtls_sha1_ret() in 2.7.0 - * - * \param input The buffer holding the input data. - * This must be a readable buffer of length \p ilen Bytes. - * \param ilen The length of the input data \p input in Bytes. - * \param output The SHA-1 checksum result. This must be a writable - * buffer of size \c 20 Bytes. - * - */ -MBEDTLS_DEPRECATED void mbedtls_sha1( const unsigned char *input, - size_t ilen, - unsigned char output[20] ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -#if defined(MBEDTLS_SELF_TEST) - -/** - * \brief The SHA-1 checkup routine. - * - * \warning SHA-1 is considered a weak message digest and its use - * constitutes a security risk. We recommend considering - * stronger message digests instead. - * - * \return \c 0 on success. - * \return \c 1 on failure. - * - */ -int mbedtls_sha1_self_test( int verbose ); - -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* mbedtls_sha1.h */ +COSMOPOLITAN_C_END_ +#endif /* MBEDTLS_SHA1_H_ */ diff --git a/third_party/mbedtls/sha256.c b/third_party/mbedtls/sha256.c index 6355f8b8f..d4c7862f3 100644 --- a/third_party/mbedtls/sha256.c +++ b/third_party/mbedtls/sha256.c @@ -1,10 +1,17 @@ -/* clang-format off */ +#include "libc/str/str.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/endian.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/sha256.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * FIPS-180-2 compliant SHA-256 implementation * @@ -29,67 +36,21 @@ asm(".include \"libc/disclaimer.inc\""); * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf */ -#include "libc/str/str.h" -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_SHA256_C) - -#include "third_party/mbedtls/sha256.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - #define SHA256_VALIDATE_RET(cond) \ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_SHA256_BAD_INPUT_DATA ) #define SHA256_VALIDATE(cond) MBEDTLS_INTERNAL_VALIDATE( cond ) #if !defined(MBEDTLS_SHA256_ALT) -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -do { \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} while( 0 ) -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -do { \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} while( 0 ) -#endif - void mbedtls_sha256_init( mbedtls_sha256_context *ctx ) { SHA256_VALIDATE( ctx != NULL ); - memset( ctx, 0, sizeof( mbedtls_sha256_context ) ); } void mbedtls_sha256_free( mbedtls_sha256_context *ctx ) { - if( ctx == NULL ) - return; - + if( ctx == NULL ) return; mbedtls_platform_zeroize( ctx, sizeof( mbedtls_sha256_context ) ); } @@ -98,7 +59,6 @@ void mbedtls_sha256_clone( mbedtls_sha256_context *dst, { SHA256_VALIDATE( dst != NULL ); SHA256_VALIDATE( src != NULL ); - *dst = *src; } @@ -143,14 +103,6 @@ int mbedtls_sha256_starts_ret( mbedtls_sha256_context *ctx, int is224 ) return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_sha256_starts( mbedtls_sha256_context *ctx, - int is224 ) -{ - mbedtls_sha256_starts_ret( ctx, is224 ); -} -#endif - #if !defined(MBEDTLS_SHA256_PROCESS_ALT) static const uint32_t K[] = { @@ -286,13 +238,6 @@ int mbedtls_internal_sha256_process( mbedtls_sha256_context *ctx, return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_sha256_process( mbedtls_sha256_context *ctx, - const unsigned char data[64] ) -{ - mbedtls_internal_sha256_process( ctx, data ); -} -#endif #endif /* !MBEDTLS_SHA256_PROCESS_ALT */ /* @@ -348,15 +293,6 @@ int mbedtls_sha256_update_ret( mbedtls_sha256_context *ctx, return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_sha256_update( mbedtls_sha256_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - mbedtls_sha256_update_ret( ctx, input, ilen ); -} -#endif - /* * SHA-256 final digest */ @@ -423,14 +359,6 @@ int mbedtls_sha256_finish_ret( mbedtls_sha256_context *ctx, return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, - unsigned char output[32] ) -{ - mbedtls_sha256_finish_ret( ctx, output ); -} -#endif - #endif /* !MBEDTLS_SHA256_ALT */ /* @@ -465,16 +393,6 @@ exit: return( ret ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_sha256( const unsigned char *input, - size_t ilen, - unsigned char output[32], - int is224 ) -{ - mbedtls_sha256_ret( input, ilen, output, is224 ); -} -#endif - #if defined(MBEDTLS_SELF_TEST) /* * FIPS-180-2 test vectors @@ -609,5 +527,3 @@ exit: } #endif /* MBEDTLS_SELF_TEST */ - -#endif /* MBEDTLS_SHA256_C */ diff --git a/third_party/mbedtls/sha256.h b/third_party/mbedtls/sha256.h index fbe60c464..1f04c988e 100644 --- a/third_party/mbedtls/sha256.h +++ b/third_party/mbedtls/sha256.h @@ -1,51 +1,12 @@ +#ifndef MBEDTLS_SHA256_H_ +#define MBEDTLS_SHA256_H_ +#include "third_party/mbedtls/config.h" +COSMOPOLITAN_C_START_ /* clang-format off */ -/** - * \file sha256.h - * - * \brief This file contains SHA-224 and SHA-256 definitions and functions. - * - * The Secure Hash Algorithms 224 and 256 (SHA-224 and SHA-256) cryptographic - * hash functions are defined in FIPS 180-4: Secure Hash Standard (SHS). - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_SHA256_H -#define MBEDTLS_SHA256_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -/* MBEDTLS_ERR_SHA256_HW_ACCEL_FAILED is deprecated and should not be used. */ #define MBEDTLS_ERR_SHA256_HW_ACCEL_FAILED -0x0037 /**< SHA-256 hardware accelerator failed */ #define MBEDTLS_ERR_SHA256_BAD_INPUT_DATA -0x0074 /**< SHA-256 input data was malformed. */ -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(MBEDTLS_SHA256_ALT) -// Regular implementation -// - /** * \brief The SHA-256 context structure. * @@ -63,10 +24,6 @@ typedef struct mbedtls_sha256_context } mbedtls_sha256_context; -#else /* MBEDTLS_SHA256_ALT */ -/* #include "third_party/mbedtls/sha256_alt.h" */ -#endif /* MBEDTLS_SHA256_ALT */ - /** * \brief This function initializes a SHA-256 context. * @@ -152,72 +109,6 @@ int mbedtls_sha256_finish_ret( mbedtls_sha256_context *ctx, int mbedtls_internal_sha256_process( mbedtls_sha256_context *ctx, const unsigned char data[64] ); -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief This function starts a SHA-224 or SHA-256 checksum - * calculation. - * - * \deprecated Superseded by mbedtls_sha256_starts_ret() in 2.7.0. - * - * \param ctx The context to use. This must be initialized. - * \param is224 Determines which function to use. This must be - * either \c 0 for SHA-256, or \c 1 for SHA-224. - */ -MBEDTLS_DEPRECATED void mbedtls_sha256_starts( mbedtls_sha256_context *ctx, - int is224 ); - -/** - * \brief This function feeds an input buffer into an ongoing - * SHA-256 checksum calculation. - * - * \deprecated Superseded by mbedtls_sha256_update_ret() in 2.7.0. - * - * \param ctx The SHA-256 context to use. This must be - * initialized and have a hash operation started. - * \param input The buffer holding the data. This must be a readable - * buffer of length \p ilen Bytes. - * \param ilen The length of the input data in Bytes. - */ -MBEDTLS_DEPRECATED void mbedtls_sha256_update( mbedtls_sha256_context *ctx, - const unsigned char *input, - size_t ilen ); - -/** - * \brief This function finishes the SHA-256 operation, and writes - * the result to the output buffer. - * - * \deprecated Superseded by mbedtls_sha256_finish_ret() in 2.7.0. - * - * \param ctx The SHA-256 context. This must be initialized and - * have a hash operation started. - * \param output The SHA-224 or SHA-256 checksum result. This must be - * a writable buffer of length \c 32 Bytes. - */ -MBEDTLS_DEPRECATED void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, - unsigned char output[32] ); - -/** - * \brief This function processes a single data block within - * the ongoing SHA-256 computation. This function is for - * internal use only. - * - * \deprecated Superseded by mbedtls_internal_sha256_process() in 2.7.0. - * - * \param ctx The SHA-256 context. This must be initialized. - * \param data The buffer holding one block of data. This must be - * a readable buffer of size \c 64 Bytes. - */ -MBEDTLS_DEPRECATED void mbedtls_sha256_process( mbedtls_sha256_context *ctx, - const unsigned char data[64] ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - /** * \brief This function calculates the SHA-224 or SHA-256 * checksum of a buffer. @@ -241,43 +132,6 @@ int mbedtls_sha256_ret( const unsigned char *input, unsigned char output[32], int is224 ); -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif - -/** - * \brief This function calculates the SHA-224 or SHA-256 checksum - * of a buffer. - * - * The function allocates the context, performs the - * calculation, and frees the context. - * - * The SHA-256 result is calculated as - * output = SHA-256(input buffer). - * - * \deprecated Superseded by mbedtls_sha256_ret() in 2.7.0. - * - * \param input The buffer holding the data. This must be a readable - * buffer of length \p ilen Bytes. - * \param ilen The length of the input data in Bytes. - * \param output The SHA-224 or SHA-256 checksum result. This must be - * a writable buffer of length \c 32 Bytes. - * \param is224 Determines which function to use. This must be either - * \c 0 for SHA-256, or \c 1 for SHA-224. - */ -MBEDTLS_DEPRECATED void mbedtls_sha256( const unsigned char *input, - size_t ilen, - unsigned char output[32], - int is224 ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -#if defined(MBEDTLS_SELF_TEST) - /** * \brief The SHA-224 and SHA-256 checkup routine. * @@ -286,10 +140,5 @@ MBEDTLS_DEPRECATED void mbedtls_sha256( const unsigned char *input, */ int mbedtls_sha256_self_test( int verbose ); -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* mbedtls_sha256.h */ +COSMOPOLITAN_C_END_ +#endif /* MBEDTLS_SHA256_H_ */ diff --git a/third_party/mbedtls/sha512.c b/third_party/mbedtls/sha512.c index c75899a2a..808870200 100644 --- a/third_party/mbedtls/sha512.c +++ b/third_party/mbedtls/sha512.c @@ -1,10 +1,18 @@ -/* clang-format off */ +#include "libc/literal.h" +#include "libc/str/str.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/endian.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/sha512.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * FIPS-180-2 compliant SHA-384/512 implementation * @@ -29,105 +37,70 @@ asm(".include \"libc/disclaimer.inc\""); * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf */ -#include "libc/str/str.h" -#include "libc/str/str.h" -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_SHA512_C) -#include "third_party/mbedtls/sha512.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/error.h" - -#if defined(_MSC_VER) || defined(__WATCOMC__) - #define UL64(x) x##ui64 -#else - #define UL64(x) x##ULL -#endif - - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - #define SHA512_VALIDATE_RET(cond) \ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_SHA512_BAD_INPUT_DATA ) #define SHA512_VALIDATE(cond) MBEDTLS_INTERNAL_VALIDATE( cond ) #if !defined(MBEDTLS_SHA512_ALT) -/* - * 64-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT64_BE -#define GET_UINT64_BE(n,b,i) \ -{ \ - (n) = ( (uint64_t) (b)[(i) ] << 56 ) \ - | ( (uint64_t) (b)[(i) + 1] << 48 ) \ - | ( (uint64_t) (b)[(i) + 2] << 40 ) \ - | ( (uint64_t) (b)[(i) + 3] << 32 ) \ - | ( (uint64_t) (b)[(i) + 4] << 24 ) \ - | ( (uint64_t) (b)[(i) + 5] << 16 ) \ - | ( (uint64_t) (b)[(i) + 6] << 8 ) \ - | ( (uint64_t) (b)[(i) + 7] ); \ -} -#endif /* GET_UINT64_BE */ - -#ifndef PUT_UINT64_BE -#define PUT_UINT64_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 56 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 48 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 40 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) >> 32 ); \ - (b)[(i) + 4] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 5] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 6] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 7] = (unsigned char) ( (n) ); \ -} -#endif /* PUT_UINT64_BE */ - -#if defined(MBEDTLS_SHA512_SMALLER) -static void sha512_put_uint64_be( uint64_t n, unsigned char *b, uint8_t i ) -{ - PUT_UINT64_BE(n, b, i); -} -#else #define sha512_put_uint64_be PUT_UINT64_BE -#endif /* MBEDTLS_SHA512_SMALLER */ +/** + * \brief This function initializes a SHA-512 context. + * + * \param ctx The SHA-512 context to initialize. This must + * not be \c NULL. + */ void mbedtls_sha512_init( mbedtls_sha512_context *ctx ) { SHA512_VALIDATE( ctx != NULL ); - memset( ctx, 0, sizeof( mbedtls_sha512_context ) ); } +/** + * \brief This function clears a SHA-512 context. + * + * \param ctx The SHA-512 context to clear. This may be \c NULL, + * in which case this function does nothing. If it + * is not \c NULL, it must point to an initialized + * SHA-512 context. + */ void mbedtls_sha512_free( mbedtls_sha512_context *ctx ) { - if( ctx == NULL ) - return; - + if( !ctx ) return; mbedtls_platform_zeroize( ctx, sizeof( mbedtls_sha512_context ) ); } +/** + * \brief This function clones the state of a SHA-512 context. + * + * \param dst The destination context. This must be initialized. + * \param src The context to clone. This must be initialized. + */ void mbedtls_sha512_clone( mbedtls_sha512_context *dst, const mbedtls_sha512_context *src ) { SHA512_VALIDATE( dst != NULL ); SHA512_VALIDATE( src != NULL ); - *dst = *src; } -/* - * SHA-512 context setup +/** + * \brief This function starts a SHA-384 or SHA-512 checksum + * calculation. + * + * \param ctx The SHA-512 context to use. This must be initialized. + * \param is384 Determines which function to use. This must be + * either \c 0 for SHA-512, or \c 1 for SHA-384. + * + * \note When \c MBEDTLS_SHA512_NO_SHA384 is defined, \p is384 must + * be \c 0, or the function will return + * #MBEDTLS_ERR_SHA512_BAD_INPUT_DATA. + * + * \return \c 0 on success. + * \return A negative error code on failure. */ int mbedtls_sha512_starts_ret( mbedtls_sha512_context *ctx, int is384 ) { @@ -144,14 +117,14 @@ int mbedtls_sha512_starts_ret( mbedtls_sha512_context *ctx, int is384 ) if( is384 == 0 ) { /* SHA-512 */ - ctx->state[0] = UL64(0x6A09E667F3BCC908); - ctx->state[1] = UL64(0xBB67AE8584CAA73B); - ctx->state[2] = UL64(0x3C6EF372FE94F82B); - ctx->state[3] = UL64(0xA54FF53A5F1D36F1); - ctx->state[4] = UL64(0x510E527FADE682D1); - ctx->state[5] = UL64(0x9B05688C2B3E6C1F); - ctx->state[6] = UL64(0x1F83D9ABFB41BD6B); - ctx->state[7] = UL64(0x5BE0CD19137E2179); + ctx->state[0] = UINT64_C(0x6A09E667F3BCC908); + ctx->state[1] = UINT64_C(0xBB67AE8584CAA73B); + ctx->state[2] = UINT64_C(0x3C6EF372FE94F82B); + ctx->state[3] = UINT64_C(0xA54FF53A5F1D36F1); + ctx->state[4] = UINT64_C(0x510E527FADE682D1); + ctx->state[5] = UINT64_C(0x9B05688C2B3E6C1F); + ctx->state[6] = UINT64_C(0x1F83D9ABFB41BD6B); + ctx->state[7] = UINT64_C(0x5BE0CD19137E2179); } else { @@ -159,14 +132,14 @@ int mbedtls_sha512_starts_ret( mbedtls_sha512_context *ctx, int is384 ) return( MBEDTLS_ERR_SHA512_BAD_INPUT_DATA ); #else /* SHA-384 */ - ctx->state[0] = UL64(0xCBBB9D5DC1059ED8); - ctx->state[1] = UL64(0x629A292A367CD507); - ctx->state[2] = UL64(0x9159015A3070DD17); - ctx->state[3] = UL64(0x152FECD8F70E5939); - ctx->state[4] = UL64(0x67332667FFC00B31); - ctx->state[5] = UL64(0x8EB44A8768581511); - ctx->state[6] = UL64(0xDB0C2E0D64F98FA7); - ctx->state[7] = UL64(0x47B5481DBEFA4FA4); + ctx->state[0] = UINT64_C(0xCBBB9D5DC1059ED8); + ctx->state[1] = UINT64_C(0x629A292A367CD507); + ctx->state[2] = UINT64_C(0x9159015A3070DD17); + ctx->state[3] = UINT64_C(0x152FECD8F70E5939); + ctx->state[4] = UINT64_C(0x67332667FFC00B31); + ctx->state[5] = UINT64_C(0x8EB44A8768581511); + ctx->state[6] = UINT64_C(0xDB0C2E0D64F98FA7); + ctx->state[7] = UINT64_C(0x47B5481DBEFA4FA4); #endif /* MBEDTLS_SHA512_NO_SHA384 */ } @@ -177,14 +150,6 @@ int mbedtls_sha512_starts_ret( mbedtls_sha512_context *ctx, int is384 ) return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_sha512_starts( mbedtls_sha512_context *ctx, - int is384 ) -{ - mbedtls_sha512_starts_ret( ctx, is384 ); -} -#endif - #if !defined(MBEDTLS_SHA512_PROCESS_ALT) /* @@ -192,48 +157,60 @@ void mbedtls_sha512_starts( mbedtls_sha512_context *ctx, */ static const uint64_t K[80] = { - UL64(0x428A2F98D728AE22), UL64(0x7137449123EF65CD), - UL64(0xB5C0FBCFEC4D3B2F), UL64(0xE9B5DBA58189DBBC), - UL64(0x3956C25BF348B538), UL64(0x59F111F1B605D019), - UL64(0x923F82A4AF194F9B), UL64(0xAB1C5ED5DA6D8118), - UL64(0xD807AA98A3030242), UL64(0x12835B0145706FBE), - UL64(0x243185BE4EE4B28C), UL64(0x550C7DC3D5FFB4E2), - UL64(0x72BE5D74F27B896F), UL64(0x80DEB1FE3B1696B1), - UL64(0x9BDC06A725C71235), UL64(0xC19BF174CF692694), - UL64(0xE49B69C19EF14AD2), UL64(0xEFBE4786384F25E3), - UL64(0x0FC19DC68B8CD5B5), UL64(0x240CA1CC77AC9C65), - UL64(0x2DE92C6F592B0275), UL64(0x4A7484AA6EA6E483), - UL64(0x5CB0A9DCBD41FBD4), UL64(0x76F988DA831153B5), - UL64(0x983E5152EE66DFAB), UL64(0xA831C66D2DB43210), - UL64(0xB00327C898FB213F), UL64(0xBF597FC7BEEF0EE4), - UL64(0xC6E00BF33DA88FC2), UL64(0xD5A79147930AA725), - UL64(0x06CA6351E003826F), UL64(0x142929670A0E6E70), - UL64(0x27B70A8546D22FFC), UL64(0x2E1B21385C26C926), - UL64(0x4D2C6DFC5AC42AED), UL64(0x53380D139D95B3DF), - UL64(0x650A73548BAF63DE), UL64(0x766A0ABB3C77B2A8), - UL64(0x81C2C92E47EDAEE6), UL64(0x92722C851482353B), - UL64(0xA2BFE8A14CF10364), UL64(0xA81A664BBC423001), - UL64(0xC24B8B70D0F89791), UL64(0xC76C51A30654BE30), - UL64(0xD192E819D6EF5218), UL64(0xD69906245565A910), - UL64(0xF40E35855771202A), UL64(0x106AA07032BBD1B8), - UL64(0x19A4C116B8D2D0C8), UL64(0x1E376C085141AB53), - UL64(0x2748774CDF8EEB99), UL64(0x34B0BCB5E19B48A8), - UL64(0x391C0CB3C5C95A63), UL64(0x4ED8AA4AE3418ACB), - UL64(0x5B9CCA4F7763E373), UL64(0x682E6FF3D6B2B8A3), - UL64(0x748F82EE5DEFB2FC), UL64(0x78A5636F43172F60), - UL64(0x84C87814A1F0AB72), UL64(0x8CC702081A6439EC), - UL64(0x90BEFFFA23631E28), UL64(0xA4506CEBDE82BDE9), - UL64(0xBEF9A3F7B2C67915), UL64(0xC67178F2E372532B), - UL64(0xCA273ECEEA26619C), UL64(0xD186B8C721C0C207), - UL64(0xEADA7DD6CDE0EB1E), UL64(0xF57D4F7FEE6ED178), - UL64(0x06F067AA72176FBA), UL64(0x0A637DC5A2C898A6), - UL64(0x113F9804BEF90DAE), UL64(0x1B710B35131C471B), - UL64(0x28DB77F523047D84), UL64(0x32CAAB7B40C72493), - UL64(0x3C9EBE0A15C9BEBC), UL64(0x431D67C49C100D4C), - UL64(0x4CC5D4BECB3E42B6), UL64(0x597F299CFC657E2A), - UL64(0x5FCB6FAB3AD6FAEC), UL64(0x6C44198C4A475817) + UINT64_C(0x428A2F98D728AE22), UINT64_C(0x7137449123EF65CD), + UINT64_C(0xB5C0FBCFEC4D3B2F), UINT64_C(0xE9B5DBA58189DBBC), + UINT64_C(0x3956C25BF348B538), UINT64_C(0x59F111F1B605D019), + UINT64_C(0x923F82A4AF194F9B), UINT64_C(0xAB1C5ED5DA6D8118), + UINT64_C(0xD807AA98A3030242), UINT64_C(0x12835B0145706FBE), + UINT64_C(0x243185BE4EE4B28C), UINT64_C(0x550C7DC3D5FFB4E2), + UINT64_C(0x72BE5D74F27B896F), UINT64_C(0x80DEB1FE3B1696B1), + UINT64_C(0x9BDC06A725C71235), UINT64_C(0xC19BF174CF692694), + UINT64_C(0xE49B69C19EF14AD2), UINT64_C(0xEFBE4786384F25E3), + UINT64_C(0x0FC19DC68B8CD5B5), UINT64_C(0x240CA1CC77AC9C65), + UINT64_C(0x2DE92C6F592B0275), UINT64_C(0x4A7484AA6EA6E483), + UINT64_C(0x5CB0A9DCBD41FBD4), UINT64_C(0x76F988DA831153B5), + UINT64_C(0x983E5152EE66DFAB), UINT64_C(0xA831C66D2DB43210), + UINT64_C(0xB00327C898FB213F), UINT64_C(0xBF597FC7BEEF0EE4), + UINT64_C(0xC6E00BF33DA88FC2), UINT64_C(0xD5A79147930AA725), + UINT64_C(0x06CA6351E003826F), UINT64_C(0x142929670A0E6E70), + UINT64_C(0x27B70A8546D22FFC), UINT64_C(0x2E1B21385C26C926), + UINT64_C(0x4D2C6DFC5AC42AED), UINT64_C(0x53380D139D95B3DF), + UINT64_C(0x650A73548BAF63DE), UINT64_C(0x766A0ABB3C77B2A8), + UINT64_C(0x81C2C92E47EDAEE6), UINT64_C(0x92722C851482353B), + UINT64_C(0xA2BFE8A14CF10364), UINT64_C(0xA81A664BBC423001), + UINT64_C(0xC24B8B70D0F89791), UINT64_C(0xC76C51A30654BE30), + UINT64_C(0xD192E819D6EF5218), UINT64_C(0xD69906245565A910), + UINT64_C(0xF40E35855771202A), UINT64_C(0x106AA07032BBD1B8), + UINT64_C(0x19A4C116B8D2D0C8), UINT64_C(0x1E376C085141AB53), + UINT64_C(0x2748774CDF8EEB99), UINT64_C(0x34B0BCB5E19B48A8), + UINT64_C(0x391C0CB3C5C95A63), UINT64_C(0x4ED8AA4AE3418ACB), + UINT64_C(0x5B9CCA4F7763E373), UINT64_C(0x682E6FF3D6B2B8A3), + UINT64_C(0x748F82EE5DEFB2FC), UINT64_C(0x78A5636F43172F60), + UINT64_C(0x84C87814A1F0AB72), UINT64_C(0x8CC702081A6439EC), + UINT64_C(0x90BEFFFA23631E28), UINT64_C(0xA4506CEBDE82BDE9), + UINT64_C(0xBEF9A3F7B2C67915), UINT64_C(0xC67178F2E372532B), + UINT64_C(0xCA273ECEEA26619C), UINT64_C(0xD186B8C721C0C207), + UINT64_C(0xEADA7DD6CDE0EB1E), UINT64_C(0xF57D4F7FEE6ED178), + UINT64_C(0x06F067AA72176FBA), UINT64_C(0x0A637DC5A2C898A6), + UINT64_C(0x113F9804BEF90DAE), UINT64_C(0x1B710B35131C471B), + UINT64_C(0x28DB77F523047D84), UINT64_C(0x32CAAB7B40C72493), + UINT64_C(0x3C9EBE0A15C9BEBC), UINT64_C(0x431D67C49C100D4C), + UINT64_C(0x4CC5D4BECB3E42B6), UINT64_C(0x597F299CFC657E2A), + UINT64_C(0x5FCB6FAB3AD6FAEC), UINT64_C(0x6C44198C4A475817) }; +/** + * \brief This function processes a single data block within + * the ongoing SHA-512 computation. + * This function is for internal use only. + * + * \param ctx The SHA-512 context. This must be initialized. + * \param data The buffer holding one block of data. This + * must be a readable buffer of length \c 128 Bytes. + * + * \return \c 0 on success. + * \return A negative error code on failure. + */ int mbedtls_internal_sha512_process( mbedtls_sha512_context *ctx, const unsigned char data[128] ) { @@ -336,17 +313,20 @@ int mbedtls_internal_sha512_process( mbedtls_sha512_context *ctx, return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_sha512_process( mbedtls_sha512_context *ctx, - const unsigned char data[128] ) -{ - mbedtls_internal_sha512_process( ctx, data ); -} -#endif #endif /* !MBEDTLS_SHA512_PROCESS_ALT */ -/* - * SHA-512 process buffer +/** + * \brief This function feeds an input buffer into an ongoing + * SHA-512 checksum calculation. + * + * \param ctx The SHA-512 context. This must be initialized + * and have a hash operation started. + * \param input The buffer holding the input data. This must + * be a readable buffer of length \p ilen Bytes. + * \param ilen The length of the input data in Bytes. + * + * \return \c 0 on success. + * \return A negative error code on failure. */ int mbedtls_sha512_update_ret( mbedtls_sha512_context *ctx, const unsigned char *input, @@ -397,17 +377,17 @@ int mbedtls_sha512_update_ret( mbedtls_sha512_context *ctx, return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_sha512_update( mbedtls_sha512_context *ctx, - const unsigned char *input, - size_t ilen ) -{ - mbedtls_sha512_update_ret( ctx, input, ilen ); -} -#endif - -/* - * SHA-512 final digest +/** + * \brief This function finishes the SHA-512 operation, and writes + * the result to the output buffer. + * + * \param ctx The SHA-512 context. This must be initialized + * and have a hash operation started. + * \param output The SHA-384 or SHA-512 checksum result. + * This must be a writable buffer of length \c 64 Bytes. + * + * \return \c 0 on success. + * \return A negative error code on failure. */ int mbedtls_sha512_finish_ret( mbedtls_sha512_context *ctx, unsigned char output[64] ) @@ -476,23 +456,37 @@ int mbedtls_sha512_finish_ret( mbedtls_sha512_context *ctx, return( 0 ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_sha512_finish( mbedtls_sha512_context *ctx, - unsigned char output[64] ) -{ - mbedtls_sha512_finish_ret( ctx, output ); -} -#endif - #endif /* !MBEDTLS_SHA512_ALT */ -/* - * output = SHA-512( input buffer ) +/** + * \brief This function calculates the SHA-512 or SHA-384 + * checksum of a buffer. + * + * The function allocates the context, performs the + * calculation, and frees the context. + * + * The SHA-512 result is calculated as + * output = SHA-512(input buffer). + * + * \param input The buffer holding the input data. This must be + * a readable buffer of length \p ilen Bytes. + * \param ilen The length of the input data in Bytes. + * \param output The SHA-384 or SHA-512 checksum result. + * This must be a writable buffer of length \c 64 Bytes. + * \param is384 Determines which function to use. This must be either + * \c 0 for SHA-512, or \c 1 for SHA-384. + * + * \note When \c MBEDTLS_SHA512_NO_SHA384 is defined, \p is384 must + * be \c 0, or the function will return + * #MBEDTLS_ERR_SHA512_BAD_INPUT_DATA. + * + * \return \c 0 on success. + * \return A negative error code on failure. */ int mbedtls_sha512_ret( const unsigned char *input, - size_t ilen, - unsigned char output[64], - int is384 ) + size_t ilen, + unsigned char output[64], + int is384 ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; mbedtls_sha512_context ctx; @@ -522,16 +516,6 @@ exit: return( ret ); } -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -void mbedtls_sha512( const unsigned char *input, - size_t ilen, - unsigned char output[64], - int is384 ) -{ - mbedtls_sha512_ret( input, ilen, output, is384 ); -} -#endif - #if defined(MBEDTLS_SELF_TEST) /* @@ -606,8 +590,11 @@ static const unsigned char sha512_test_sum[][64] = #define ARRAY_LENGTH( a ) ( sizeof( a ) / sizeof( ( a )[0] ) ) -/* - * Checkup routine +/** + * \brief The SHA-384 or SHA-512 checkup routine. + * + * \return \c 0 on success. + * \return \c 1 on failure. */ int mbedtls_sha512_self_test( int verbose ) { diff --git a/third_party/mbedtls/sha512.h b/third_party/mbedtls/sha512.h index 1aae8eab6..9ddc020d9 100644 --- a/third_party/mbedtls/sha512.h +++ b/third_party/mbedtls/sha512.h @@ -1,49 +1,11 @@ +#ifndef MBEDTLS_SHA512_H_ +#define MBEDTLS_SHA512_H_ +#include "third_party/mbedtls/config.h" +COSMOPOLITAN_C_START_ /* clang-format off */ -/** - * \file sha512.h - * \brief This file contains SHA-384 and SHA-512 definitions and functions. - * - * The Secure Hash Algorithms 384 and 512 (SHA-384 and SHA-512) cryptographic - * hash functions are defined in FIPS 180-4: Secure Hash Standard (SHS). - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_SHA512_H -#define MBEDTLS_SHA512_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -/* MBEDTLS_ERR_SHA512_HW_ACCEL_FAILED is deprecated and should not be used. */ -#define MBEDTLS_ERR_SHA512_HW_ACCEL_FAILED -0x0039 /**< SHA-512 hardware accelerator failed */ -#define MBEDTLS_ERR_SHA512_BAD_INPUT_DATA -0x0075 /**< SHA-512 input data was malformed. */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(MBEDTLS_SHA512_ALT) -// Regular implementation -// +#define MBEDTLS_ERR_SHA512_HW_ACCEL_FAILED -0x0039 /**< SHA-512 hardware accelerator failed */ +#define MBEDTLS_ERR_SHA512_BAD_INPUT_DATA -0x0075 /**< SHA-512 input data was malformed. */ /** * \brief The SHA-512 context structure. @@ -64,251 +26,15 @@ typedef struct mbedtls_sha512_context } mbedtls_sha512_context; -#else /* MBEDTLS_SHA512_ALT */ -/* #include "third_party/mbedtls/sha512_alt.h" */ -#endif /* MBEDTLS_SHA512_ALT */ +void mbedtls_sha512_init( mbedtls_sha512_context * ); +void mbedtls_sha512_free( mbedtls_sha512_context * ); +void mbedtls_sha512_clone( mbedtls_sha512_context *, const mbedtls_sha512_context * ); +int mbedtls_sha512_starts_ret( mbedtls_sha512_context *, int ); +int mbedtls_sha512_update_ret( mbedtls_sha512_context *, const unsigned char *, size_t ); +int mbedtls_sha512_finish_ret( mbedtls_sha512_context *, unsigned char[64] ); +int mbedtls_internal_sha512_process( mbedtls_sha512_context *, const unsigned char[128] ); +int mbedtls_sha512_ret( const unsigned char *, size_t, unsigned char[64], int ); +int mbedtls_sha512_self_test( int ); -/** - * \brief This function initializes a SHA-512 context. - * - * \param ctx The SHA-512 context to initialize. This must - * not be \c NULL. - */ -void mbedtls_sha512_init( mbedtls_sha512_context *ctx ); - -/** - * \brief This function clears a SHA-512 context. - * - * \param ctx The SHA-512 context to clear. This may be \c NULL, - * in which case this function does nothing. If it - * is not \c NULL, it must point to an initialized - * SHA-512 context. - */ -void mbedtls_sha512_free( mbedtls_sha512_context *ctx ); - -/** - * \brief This function clones the state of a SHA-512 context. - * - * \param dst The destination context. This must be initialized. - * \param src The context to clone. This must be initialized. - */ -void mbedtls_sha512_clone( mbedtls_sha512_context *dst, - const mbedtls_sha512_context *src ); - -/** - * \brief This function starts a SHA-384 or SHA-512 checksum - * calculation. - * - * \param ctx The SHA-512 context to use. This must be initialized. - * \param is384 Determines which function to use. This must be - * either \c 0 for SHA-512, or \c 1 for SHA-384. - * - * \note When \c MBEDTLS_SHA512_NO_SHA384 is defined, \p is384 must - * be \c 0, or the function will return - * #MBEDTLS_ERR_SHA512_BAD_INPUT_DATA. - * - * \return \c 0 on success. - * \return A negative error code on failure. - */ -int mbedtls_sha512_starts_ret( mbedtls_sha512_context *ctx, int is384 ); - -/** - * \brief This function feeds an input buffer into an ongoing - * SHA-512 checksum calculation. - * - * \param ctx The SHA-512 context. This must be initialized - * and have a hash operation started. - * \param input The buffer holding the input data. This must - * be a readable buffer of length \p ilen Bytes. - * \param ilen The length of the input data in Bytes. - * - * \return \c 0 on success. - * \return A negative error code on failure. - */ -int mbedtls_sha512_update_ret( mbedtls_sha512_context *ctx, - const unsigned char *input, - size_t ilen ); - -/** - * \brief This function finishes the SHA-512 operation, and writes - * the result to the output buffer. - * - * \param ctx The SHA-512 context. This must be initialized - * and have a hash operation started. - * \param output The SHA-384 or SHA-512 checksum result. - * This must be a writable buffer of length \c 64 Bytes. - * - * \return \c 0 on success. - * \return A negative error code on failure. - */ -int mbedtls_sha512_finish_ret( mbedtls_sha512_context *ctx, - unsigned char output[64] ); - -/** - * \brief This function processes a single data block within - * the ongoing SHA-512 computation. - * This function is for internal use only. - * - * \param ctx The SHA-512 context. This must be initialized. - * \param data The buffer holding one block of data. This - * must be a readable buffer of length \c 128 Bytes. - * - * \return \c 0 on success. - * \return A negative error code on failure. - */ -int mbedtls_internal_sha512_process( mbedtls_sha512_context *ctx, - const unsigned char data[128] ); -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif -/** - * \brief This function starts a SHA-384 or SHA-512 checksum - * calculation. - * - * \deprecated Superseded by mbedtls_sha512_starts_ret() in 2.7.0 - * - * \param ctx The SHA-512 context to use. This must be initialized. - * \param is384 Determines which function to use. This must be either - * \c 0 for SHA-512 or \c 1 for SHA-384. - * - * \note When \c MBEDTLS_SHA512_NO_SHA384 is defined, \p is384 must - * be \c 0, or the function will fail to work. - */ -MBEDTLS_DEPRECATED void mbedtls_sha512_starts( mbedtls_sha512_context *ctx, - int is384 ); - -/** - * \brief This function feeds an input buffer into an ongoing - * SHA-512 checksum calculation. - * - * \deprecated Superseded by mbedtls_sha512_update_ret() in 2.7.0. - * - * \param ctx The SHA-512 context. This must be initialized - * and have a hash operation started. - * \param input The buffer holding the data. This must be a readable - * buffer of length \p ilen Bytes. - * \param ilen The length of the input data in Bytes. - */ -MBEDTLS_DEPRECATED void mbedtls_sha512_update( mbedtls_sha512_context *ctx, - const unsigned char *input, - size_t ilen ); - -/** - * \brief This function finishes the SHA-512 operation, and writes - * the result to the output buffer. - * - * \deprecated Superseded by mbedtls_sha512_finish_ret() in 2.7.0. - * - * \param ctx The SHA-512 context. This must be initialized - * and have a hash operation started. - * \param output The SHA-384 or SHA-512 checksum result. This must - * be a writable buffer of size \c 64 Bytes. - */ -MBEDTLS_DEPRECATED void mbedtls_sha512_finish( mbedtls_sha512_context *ctx, - unsigned char output[64] ); - -/** - * \brief This function processes a single data block within - * the ongoing SHA-512 computation. This function is for - * internal use only. - * - * \deprecated Superseded by mbedtls_internal_sha512_process() in 2.7.0. - * - * \param ctx The SHA-512 context. This must be initialized. - * \param data The buffer holding one block of data. This must be - * a readable buffer of length \c 128 Bytes. - */ -MBEDTLS_DEPRECATED void mbedtls_sha512_process( - mbedtls_sha512_context *ctx, - const unsigned char data[128] ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -/** - * \brief This function calculates the SHA-512 or SHA-384 - * checksum of a buffer. - * - * The function allocates the context, performs the - * calculation, and frees the context. - * - * The SHA-512 result is calculated as - * output = SHA-512(input buffer). - * - * \param input The buffer holding the input data. This must be - * a readable buffer of length \p ilen Bytes. - * \param ilen The length of the input data in Bytes. - * \param output The SHA-384 or SHA-512 checksum result. - * This must be a writable buffer of length \c 64 Bytes. - * \param is384 Determines which function to use. This must be either - * \c 0 for SHA-512, or \c 1 for SHA-384. - * - * \note When \c MBEDTLS_SHA512_NO_SHA384 is defined, \p is384 must - * be \c 0, or the function will return - * #MBEDTLS_ERR_SHA512_BAD_INPUT_DATA. - * - * \return \c 0 on success. - * \return A negative error code on failure. - */ -int mbedtls_sha512_ret( const unsigned char *input, - size_t ilen, - unsigned char output[64], - int is384 ); - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif - -/** - * \brief This function calculates the SHA-512 or SHA-384 - * checksum of a buffer. - * - * The function allocates the context, performs the - * calculation, and frees the context. - * - * The SHA-512 result is calculated as - * output = SHA-512(input buffer). - * - * \deprecated Superseded by mbedtls_sha512_ret() in 2.7.0 - * - * \param input The buffer holding the data. This must be a - * readable buffer of length \p ilen Bytes. - * \param ilen The length of the input data in Bytes. - * \param output The SHA-384 or SHA-512 checksum result. This must - * be a writable buffer of length \c 64 Bytes. - * \param is384 Determines which function to use. This must be either - * \c 0 for SHA-512, or \c 1 for SHA-384. - * - * \note When \c MBEDTLS_SHA512_NO_SHA384 is defined, \p is384 must - * be \c 0, or the function will fail to work. - */ -MBEDTLS_DEPRECATED void mbedtls_sha512( const unsigned char *input, - size_t ilen, - unsigned char output[64], - int is384 ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -#if defined(MBEDTLS_SELF_TEST) - - /** - * \brief The SHA-384 or SHA-512 checkup routine. - * - * \return \c 0 on success. - * \return \c 1 on failure. - */ -int mbedtls_sha512_self_test( int verbose ); -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* mbedtls_sha512.h */ +COSMOPOLITAN_C_END_ +#endif /* MBEDTLS_SHA512_H_ */ diff --git a/third_party/mbedtls/sheesh.h b/third_party/mbedtls/sheesh.h deleted file mode 100644 index 75f3d69e5..000000000 --- a/third_party/mbedtls/sheesh.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_INCLUDE_PSA_SHEESH_H_ -#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_INCLUDE_PSA_SHEESH_H_ -#include "third_party/mbedtls/crypto_extra.h" -#if !(__ASSEMBLER__ + __LINKER__ + 0) -COSMOPOLITAN_C_START_ - -static inline void psa_set_key_type(psa_key_attributes_t *attributes, - psa_key_type_t type) { - if (!attributes->domain_parameters) { - attributes->core.type = type; - } else { - psa_set_key_domain_parameters(attributes, type, NULL, 0); - } -} - -COSMOPOLITAN_C_END_ -#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ -#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_INCLUDE_PSA_SHEESH_H_ */ diff --git a/libc/rand/winrandish.c b/third_party/mbedtls/sigalg.c similarity index 67% rename from libc/rand/winrandish.c rename to third_party/mbedtls/sigalg.c index cd959e15a..79d0d5397 100644 --- a/libc/rand/winrandish.c +++ b/third_party/mbedtls/sigalg.c @@ -1,7 +1,7 @@ /*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ │vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ ╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ │ │ │ Permission to use, copy, modify, and/or distribute this software for │ │ any purpose with or without fee is hereby granted, provided that the │ @@ -16,28 +16,28 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/calls/calls.h" -#include "libc/nexgen32e/rdtsc.h" -#include "libc/nt/dll.h" -#include "libc/nt/events.h" -#include "libc/nt/struct/point.h" -#include "libc/rand/rand.h" +#include "third_party/mbedtls/ssl.h" -/** - * Returns somewhat randomish number on Windows. - */ -textwindows int64_t winrandish(void) { - int64_t res; - struct NtPoint point; - res = ((int64_t)getpid() << 17) ^ gettid() ^ rdtsc(); - /* - * This function is intended for older CPUs built before 2012, so - * let's avoid having our CUI apps yoink USER32.DLL until we're - * certain we need it, thus avoiding a hundred lines of noise in - * NtTrace.exe output. - */ - typeof(GetCursorPos) *GetCursorPos_ = - GetProcAddress(GetModuleHandle("user32.dll"), "GetCursorPos"); - if (GetCursorPos_ && GetCursorPos_(&point)) res ^= point.x * point.y; - return res; +/* https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml */ +const char *mbedtls_sig_alg_name(int t) { + switch (t) { + case 0: + return "anonymous"; + case 1: + return "rsa"; + case 2: + return "dsa"; + case 3: + return "ecdsa"; + case 7: + return "ed25519"; + case 8: + return "ed448"; + case 64: + return "gostr34102012_256"; + case 65: + return "gostr34102012_512"; + default: + return 0; + } } diff --git a/third_party/mbedtls/srtp.c b/third_party/mbedtls/srtp.c new file mode 100644 index 000000000..e1027d8fa --- /dev/null +++ b/third_party/mbedtls/srtp.c @@ -0,0 +1,35 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "third_party/mbedtls/ssl.h" + +const char *mbedtls_ssl_get_srtp_profile_as_string( + mbedtls_ssl_srtp_profile profile) { + switch (profile) { + case MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_80: + return "MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_80"; + case MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_32: + return "MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_32"; + case MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_80: + return "MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_80"; + case MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_32: + return "MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_32"; + default: + return ""; + } +} diff --git a/third_party/mbedtls/ssl.h b/third_party/mbedtls/ssl.h index 75283426f..db26c8093 100644 --- a/third_party/mbedtls/ssl.h +++ b/third_party/mbedtls/ssl.h @@ -1,78 +1,30 @@ +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_SSL_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_SSL_H_ +#include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/config.h" +#include "third_party/mbedtls/dhm.h" +#include "third_party/mbedtls/ecdh.h" +#include "third_party/mbedtls/ecp.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/ssl_ciphersuites.h" +#include "third_party/mbedtls/x509_crl.h" +#include "third_party/mbedtls/x509_crt.h" +COSMOPOLITAN_C_START_ /* clang-format off */ -/** - * \file ssl.h - * - * \brief SSL/TLS functions. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_SSL_H -#define MBEDTLS_SSL_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "third_party/mbedtls/bignum.h" -#include "third_party/mbedtls/ecp.h" - -#include "third_party/mbedtls/ssl_ciphersuites.h" - -#if defined(MBEDTLS_X509_CRT_PARSE_C) -#include "third_party/mbedtls/x509_crt.h" -#include "third_party/mbedtls/x509_crl.h" -#endif - -#if defined(MBEDTLS_DHM_C) -#include "third_party/mbedtls/dhm.h" -#endif - -/* Adding guard for MBEDTLS_ECDSA_C to ensure no compile errors due - * to guards also being in ssl_srv.c and ssl_cli.c. There is a gap - * in functionality that access to ecdh_ctx structure is needed for - * MBEDTLS_ECDSA_C which does not seem correct. - */ -#if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) -#include "third_party/mbedtls/ecdh.h" -#endif - -#if defined(MBEDTLS_ZLIB_SUPPORT) - -#if defined(MBEDTLS_DEPRECATED_WARNING) -#warning "Record compression support via MBEDTLS_ZLIB_SUPPORT is deprecated and will be removed in the next major revision of the library" -#endif - -#if defined(MBEDTLS_DEPRECATED_REMOVED) -#error "Record compression support via MBEDTLS_ZLIB_SUPPORT is deprecated and cannot be used if MBEDTLS_DEPRECATED_REMOVED is set" -#endif - -#include "third_party/zlib/zlib.h" -#endif - -#if defined(MBEDTLS_HAVE_TIME) -#include "third_party/mbedtls/platform_time.h" -#endif - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -#include "third_party/mbedtls/crypto.h" -#endif /* MBEDTLS_USE_PSA_CRYPTO */ +#define MBEDTLS_ERR_NET_SOCKET_FAILED -0x0042 /**< Failed to open a socket. */ +#define MBEDTLS_ERR_NET_CONNECT_FAILED -0x0044 /**< The connection to the given server / port failed. */ +#define MBEDTLS_ERR_NET_BIND_FAILED -0x0046 /**< Binding of the socket failed. */ +#define MBEDTLS_ERR_NET_LISTEN_FAILED -0x0048 /**< Could not listen on the socket. */ +#define MBEDTLS_ERR_NET_ACCEPT_FAILED -0x004A /**< Could not accept the incoming connection. */ +#define MBEDTLS_ERR_NET_RECV_FAILED -0x004C /**< Reading information from the socket failed. */ +#define MBEDTLS_ERR_NET_SEND_FAILED -0x004E /**< Sending information through the socket failed. */ +#define MBEDTLS_ERR_NET_CONN_RESET -0x0050 /**< Connection was reset by peer. */ +#define MBEDTLS_ERR_NET_UNKNOWN_HOST -0x0052 /**< Failed to get an IP address for the given hostname. */ +#define MBEDTLS_ERR_NET_BUFFER_TOO_SMALL -0x0043 /**< Buffer is too small to hold the data. */ +#define MBEDTLS_ERR_NET_INVALID_CONTEXT -0x0045 /**< The context is invalid, eg because it was free()ed. */ +#define MBEDTLS_ERR_NET_POLL_FAILED -0x0047 /**< Polling the net context failed. */ +#define MBEDTLS_ERR_NET_BAD_INPUT_DATA -0x0049 /**< Input invalid. */ /* * SSL Error codes @@ -224,6 +176,9 @@ #define MBEDTLS_SSL_DTLS_SRTP_MKI_UNSUPPORTED 0 #define MBEDTLS_SSL_DTLS_SRTP_MKI_SUPPORTED 1 +#define MBEDTLS_SSL_UNEXPECTED_CID_IGNORE 0 +#define MBEDTLS_SSL_UNEXPECTED_CID_FAIL 1 + /* * Default range for DTLS retransmission timer value, in milliseconds. * RFC 6347 4.2.4.1 says from 1 second to 60 seconds. @@ -293,8 +248,6 @@ #define MBEDTLS_SSL_TLS1_3_PADDING_GRANULARITY 1 #endif -/* \} name SECTION: Module settings */ - /* * Length of the verify data for secure renegotiation */ @@ -464,10 +417,6 @@ union mbedtls_ssl_premaster_secret #define MBEDTLS_PREMASTER_SIZE sizeof( union mbedtls_ssl_premaster_secret ) -#ifdef __cplusplus -extern "C" { -#endif - /* * SSL state machine */ @@ -507,6 +456,7 @@ typedef enum MBEDTLS_SSL_TLS_PRF_SHA256 } mbedtls_tls_prf_types; + /** * \brief Callback type: send data on the network. * @@ -625,15 +575,9 @@ typedef struct mbedtls_ssl_config mbedtls_ssl_config; typedef struct mbedtls_ssl_transform mbedtls_ssl_transform; typedef struct mbedtls_ssl_handshake_params mbedtls_ssl_handshake_params; typedef struct mbedtls_ssl_sig_hash_set_t mbedtls_ssl_sig_hash_set_t; -#if defined(MBEDTLS_X509_CRT_PARSE_C) typedef struct mbedtls_ssl_key_cert mbedtls_ssl_key_cert; -#endif -#if defined(MBEDTLS_SSL_PROTO_DTLS) typedef struct mbedtls_ssl_flight_item mbedtls_ssl_flight_item; -#endif -#if defined(MBEDTLS_SSL_ASYNC_PRIVATE) -#if defined(MBEDTLS_X509_CRT_PARSE_C) /** * \brief Callback type: start external signature operation. * @@ -775,7 +719,6 @@ typedef int mbedtls_ssl_async_decrypt_t( mbedtls_ssl_context *ssl, mbedtls_x509_crt *cert, const unsigned char *input, size_t input_len ); -#endif /* MBEDTLS_X509_CRT_PARSE_C */ /** * \brief Callback type: resume external operation. @@ -842,28 +785,6 @@ typedef int mbedtls_ssl_async_resume_t( mbedtls_ssl_context *ssl, * modified. */ typedef void mbedtls_ssl_async_cancel_t( mbedtls_ssl_context *ssl ); -#endif /* MBEDTLS_SSL_ASYNC_PRIVATE */ - -#if defined(MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED) && \ - !defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) -#define MBEDTLS_SSL_PEER_CERT_DIGEST_MAX_LEN 48 -#if defined(MBEDTLS_SHA256_C) -#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE MBEDTLS_MD_SHA256 -#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_LEN 32 -#elif defined(MBEDTLS_SHA512_C) -#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE MBEDTLS_MD_SHA384 -#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_LEN 48 -#elif defined(MBEDTLS_SHA1_C) -#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE MBEDTLS_MD_SHA1 -#define MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_LEN 20 -#else -/* This is already checked in check_config.h, but be sure. */ -#error "Bad configuration - need SHA-1, SHA-256 or SHA-512 enabled to compute digest of peer CRT." -#endif -#endif /* MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED && - !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ - -#if defined(MBEDTLS_SSL_DTLS_SRTP) #define MBEDTLS_TLS_SRTP_MAX_MKI_LENGTH 255 #define MBEDTLS_TLS_SRTP_MAX_PROFILE_LIST_LENGTH 4 @@ -896,8 +817,6 @@ typedef struct mbedtls_dtls_srtp_info_t } mbedtls_dtls_srtp_info; -#endif /* MBEDTLS_SSL_DTLS_SRTP */ - /* * This structure is used for storing current session data. * @@ -919,7 +838,6 @@ struct mbedtls_ssl_session size_t id_len; /*!< session id length */ unsigned char id[32]; /*!< session identifier */ unsigned char master[48]; /*!< the master secret */ - #if defined(MBEDTLS_X509_CRT_PARSE_C) #if defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) mbedtls_x509_crt *peer_cert; /*!< peer X.509 cert chain */ @@ -932,71 +850,56 @@ struct mbedtls_ssl_session #endif /* !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ #endif /* MBEDTLS_X509_CRT_PARSE_C */ uint32_t verify_result; /*!< verification result */ - #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C) unsigned char *ticket; /*!< RFC 5077 session ticket */ size_t ticket_len; /*!< session ticket length */ uint32_t ticket_lifetime; /*!< ticket lifetime hint */ #endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_CLI_C */ - #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) unsigned char mfl_code; /*!< MaxFragmentLength negotiated by peer */ #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ - -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - int trunc_hmac; /*!< flag for truncated hmac activation */ -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ - #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) int encrypt_then_mac; /*!< flag for EtM activation */ #endif }; - /** * SSL/TLS configuration to be shared between mbedtls_ssl_context structures. */ struct mbedtls_ssl_config { /* Group items by size (largest first) to minimize padding overhead */ - /* * Pointers */ - - const int *ciphersuite_list[4]; /*!< allowed ciphersuites per version */ - + const uint16_t *ciphersuite_list[4]; /*!< allowed ciphersuites per version */ + /** Callback to SSL handshake step */ + int (*f_step)( mbedtls_ssl_context * ); /** Callback for printing debug output */ void (*f_dbg)(void *, int, const char *, int, const char *); void *p_dbg; /*!< context for the debug function */ - /** Callback for getting (pseudo-)random numbers */ int (*f_rng)(void *, unsigned char *, size_t); void *p_rng; /*!< context for the RNG function */ - /** Callback to retrieve a session from the cache */ int (*f_get_cache)(void *, mbedtls_ssl_session *); /** Callback to store a session into the cache */ int (*f_set_cache)(void *, const mbedtls_ssl_session *); void *p_cache; /*!< context for cache callbacks */ - #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) /** Callback for setting cert according to SNI extension */ int (*f_sni)(void *, mbedtls_ssl_context *, const unsigned char *, size_t); void *p_sni; /*!< context for SNI callback */ #endif - #if defined(MBEDTLS_X509_CRT_PARSE_C) /** Callback to customize X.509 certificate chain verification */ int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *); void *p_vrfy; /*!< context for X.509 verify calllback */ #endif - #if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED) /** Callback to retrieve PSK key from identity */ int (*f_psk)(void *, mbedtls_ssl_context *, const unsigned char *, size_t); void *p_psk; /*!< context for PSK callback */ #endif - #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C) /** Callback to create & write a cookie for ClientHello veirifcation */ int (*f_cookie_write)( void *, unsigned char **, unsigned char *, @@ -1006,7 +909,6 @@ struct mbedtls_ssl_config const unsigned char *, size_t ); void *p_cookie; /*!< context for the cookie callbacks */ #endif - #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_SRV_C) /** Callback to create & write a session ticket */ int (*f_ticket_write)( void *, const mbedtls_ssl_session *, @@ -1015,7 +917,6 @@ struct mbedtls_ssl_config int (*f_ticket_parse)( void *, mbedtls_ssl_session *, unsigned char *, size_t); void *p_ticket; /*!< context for the ticket callbacks */ #endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_SRV_C */ - #if defined(MBEDTLS_SSL_EXPORT_KEYS) /** Callback to export key block and master secret */ int (*f_export_keys)( void *, const unsigned char *, @@ -1028,11 +929,9 @@ struct mbedtls_ssl_config mbedtls_tls_prf_types ); void *p_export_keys; /*!< context for key export callback */ #endif - #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) size_t cid_len; /*!< The length of CIDs for incoming DTLS records. */ #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ - #if defined(MBEDTLS_X509_CRT_PARSE_C) const mbedtls_x509_crt_profile *cert_profile; /*!< verification profile */ mbedtls_ssl_key_cert *key_cert; /*!< own certificate/key pair(s) */ @@ -1043,7 +942,6 @@ struct mbedtls_ssl_config void *p_ca_cb; #endif /* MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK */ #endif /* MBEDTLS_X509_CRT_PARSE_C */ - #if defined(MBEDTLS_SSL_ASYNC_PRIVATE) #if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_ssl_async_sign_t *f_async_sign_start; /*!< start asynchronous signature operation */ @@ -1053,22 +951,17 @@ struct mbedtls_ssl_config mbedtls_ssl_async_cancel_t *f_async_cancel; /*!< cancel asynchronous operation */ void *p_async_config_data; /*!< Configuration data set by mbedtls_ssl_conf_async_private_cb(). */ #endif /* MBEDTLS_SSL_ASYNC_PRIVATE */ - #if defined(MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED) - const int *sig_hashes; /*!< allowed signature hashes */ + const uint8_t *sig_hashes; /*!< allowed signature hashes */ #endif - #if defined(MBEDTLS_ECP_C) const mbedtls_ecp_group_id *curve_list; /*!< allowed curves */ #endif - #if defined(MBEDTLS_DHM_C) mbedtls_mpi dhm_P; /*!< prime modulus for DHM */ mbedtls_mpi dhm_G; /*!< generator for DHM */ #endif - #if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED) - #if defined(MBEDTLS_USE_PSA_CRYPTO) psa_key_id_t psk_opaque; /*!< PSA key slot holding opaque PSK. This field * should only be set via @@ -1077,7 +970,6 @@ struct mbedtls_ssl_config * configured, this has value \c 0. */ #endif /* MBEDTLS_USE_PSA_CRYPTO */ - unsigned char *psk; /*!< The raw pre-shared key. This field should * only be set via mbedtls_ssl_conf_psk(). * If either no PSK or an opaque PSK @@ -1087,7 +979,6 @@ struct mbedtls_ssl_config * mbedtls_ssl_conf_psk(). * Its value is non-zero if and only if * \c psk is not \c NULL. */ - unsigned char *psk_identity; /*!< The PSK identity for PSK negotiation. * This field should only be set via * mbedtls_ssl_conf_psk(). @@ -1100,54 +991,43 @@ struct mbedtls_ssl_config * \c psk is not \c NULL or \c psk_opaque * is not \c 0. */ #endif /* MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED */ - #if defined(MBEDTLS_SSL_ALPN) const char **alpn_list; /*!< ordered list of protocols */ #endif - #if defined(MBEDTLS_SSL_DTLS_SRTP) /*! ordered list of supported srtp profile */ const mbedtls_ssl_srtp_profile *dtls_srtp_profile_list; /*! number of supported profiles */ size_t dtls_srtp_profile_list_len; #endif /* MBEDTLS_SSL_DTLS_SRTP */ - /* * Numerical settings (int then char) */ - uint32_t read_timeout; /*!< timeout for mbedtls_ssl_read (ms) */ - #if defined(MBEDTLS_SSL_PROTO_DTLS) uint32_t hs_timeout_min; /*!< initial value of the handshake retransmission timeout (ms) */ uint32_t hs_timeout_max; /*!< maximum value of the handshake retransmission timeout (ms) */ #endif - #if defined(MBEDTLS_SSL_RENEGOTIATION) int renego_max_records; /*!< grace period for renegotiation */ unsigned char renego_period[8]; /*!< value of the record counters that triggers renegotiation */ #endif - #if defined(MBEDTLS_SSL_DTLS_BADMAC_LIMIT) unsigned int badmac_limit; /*!< limit of records with a bad MAC */ #endif - #if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_CLI_C) unsigned int dhm_min_bitlen; /*!< min. bit length of the DHM prime */ #endif - unsigned char max_major_ver; /*!< max. major version used */ unsigned char max_minor_ver; /*!< max. minor version used */ unsigned char min_major_ver; /*!< min. major version used */ unsigned char min_minor_ver; /*!< min. minor version used */ - /* * Flags (bitfields) */ - unsigned int endpoint : 1; /*!< 0: client, 1: server */ unsigned int transport : 1; /*!< stream (TLS) or datagram (DTLS) */ unsigned int authmode : 2; /*!< MBEDTLS_SSL_VERIFY_XXX */ @@ -1174,9 +1054,6 @@ struct mbedtls_ssl_config #if defined(MBEDTLS_SSL_RENEGOTIATION) unsigned int disable_renegotiation : 1; /*!< disable renegotiation? */ #endif -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - unsigned int trunc_hmac : 1; /*!< negotiate truncated hmac? */ -#endif #if defined(MBEDTLS_SSL_SESSION_TICKETS) unsigned int session_tickets : 1; /*!< use session tickets? */ #endif @@ -1201,7 +1078,6 @@ struct mbedtls_ssl_config struct mbedtls_ssl_context { const mbedtls_ssl_config *conf; /*!< configuration information */ - /* * Miscellaneous */ @@ -1212,27 +1088,21 @@ struct mbedtls_ssl_context number of retransmissions of request if renego_max_records is < 0 */ #endif /* MBEDTLS_SSL_RENEGOTIATION */ - int major_ver; /*!< equal to MBEDTLS_SSL_MAJOR_VERSION_3 */ int minor_ver; /*!< either 0 (SSL3) or 1 (TLS1.0) */ - #if defined(MBEDTLS_SSL_DTLS_BADMAC_LIMIT) unsigned badmac_seen; /*!< records with a bad MAC received */ #endif /* MBEDTLS_SSL_DTLS_BADMAC_LIMIT */ - #if defined(MBEDTLS_X509_CRT_PARSE_C) /** Callback to customize X.509 certificate chain verification */ int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *); void *p_vrfy; /*!< context for X.509 verify callback */ #endif - mbedtls_ssl_send_t *f_send; /*!< Callback for network send */ mbedtls_ssl_recv_t *f_recv; /*!< Callback for network receive */ mbedtls_ssl_recv_timeout_t *f_recv_timeout; /*!< Callback for network receive with timeout */ - void *p_bio; /*!< context for I/O operations */ - /* * Session layer */ @@ -1240,10 +1110,8 @@ struct mbedtls_ssl_context mbedtls_ssl_session *session_out; /*!< current session data (out) */ mbedtls_ssl_session *session; /*!< negotiated session data */ mbedtls_ssl_session *session_negotiate; /*!< session data in negotiation */ - mbedtls_ssl_handshake_params *handshake; /*!< params required only during the handshake process */ - /* * Record layer transformations */ @@ -1251,15 +1119,12 @@ struct mbedtls_ssl_context mbedtls_ssl_transform *transform_out; /*!< current transform params (in) */ mbedtls_ssl_transform *transform; /*!< negotiated transform params */ mbedtls_ssl_transform *transform_negotiate; /*!< transform params in negotiation */ - /* * Timers */ void *p_timer; /*!< context for the timer callbacks */ - mbedtls_ssl_set_timer_t *f_set_timer; /*!< set timer callback */ mbedtls_ssl_get_timer_t *f_get_timer; /*!< get timer callback */ - /* * Record layer (incoming data) */ @@ -1276,7 +1141,6 @@ struct mbedtls_ssl_context unsigned char *in_iv; /*!< ivlen-byte IV */ unsigned char *in_msg; /*!< message contents (in_iv+ivlen) */ unsigned char *in_offt; /*!< read offset in application data */ - int in_msgtype; /*!< record header: message type */ size_t in_msglen; /*!< record header: message length */ size_t in_left; /*!< amount of data read so far */ @@ -1292,19 +1156,15 @@ struct mbedtls_ssl_context uint64_t in_window_top; /*!< last validated record seq_num */ uint64_t in_window; /*!< bitmask for replay detection */ #endif /* MBEDTLS_SSL_DTLS_ANTI_REPLAY */ - size_t in_hslen; /*!< current handshake message length, including the handshake header */ int nb_zero; /*!< # of 0-length encrypted messages */ - int keep_current_message; /*!< drop or reuse current message on next call to record layer? */ - #if defined(MBEDTLS_SSL_PROTO_DTLS) uint8_t disable_datagram_packing; /*!< Disable packing multiple records * within a single datagram. */ #endif /* MBEDTLS_SSL_PROTO_DTLS */ - /* * Record layer (outgoing data) */ @@ -1318,32 +1178,27 @@ struct mbedtls_ssl_context unsigned char *out_len; /*!< two-bytes message length field */ unsigned char *out_iv; /*!< ivlen-byte IV */ unsigned char *out_msg; /*!< message contents (out_iv+ivlen) */ - int out_msgtype; /*!< record header: message type */ size_t out_msglen; /*!< record header: message length */ size_t out_left; /*!< amount of data not yet written */ #if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) size_t out_buf_len; /*!< length of output buffer */ #endif - + uint8_t fatal_alert; unsigned char cur_out_ctr[8]; /*!< Outgoing record sequence number. */ - #if defined(MBEDTLS_SSL_PROTO_DTLS) uint16_t mtu; /*!< path mtu, used to fragment outgoing messages */ #endif /* MBEDTLS_SSL_PROTO_DTLS */ - #if defined(MBEDTLS_ZLIB_SUPPORT) unsigned char *compress_buf; /*!< zlib data buffer */ #endif /* MBEDTLS_ZLIB_SUPPORT */ #if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING) signed char split_done; /*!< current record already splitted? */ #endif /* MBEDTLS_SSL_CBC_RECORD_SPLITTING */ - /* * PKI layer */ int client_auth; /*!< flag for client auth. */ - /* * User settings */ @@ -1351,18 +1206,15 @@ struct mbedtls_ssl_context char *hostname; /*!< expected peer CN for verification (and SNI if available) */ #endif /* MBEDTLS_X509_CRT_PARSE_C */ - #if defined(MBEDTLS_SSL_ALPN) const char *alpn_chosen; /*!< negotiated protocol */ #endif /* MBEDTLS_SSL_ALPN */ - #if defined(MBEDTLS_SSL_DTLS_SRTP) /* * use_srtp extension */ mbedtls_dtls_srtp_info dtls_srtp_info; #endif /* MBEDTLS_SSL_DTLS_SRTP */ - /* * Information for DTLS hello verify */ @@ -1370,7 +1222,6 @@ struct mbedtls_ssl_context unsigned char *cli_id; /*!< transport-level ID of the client */ size_t cli_id_len; /*!< length of cli_id */ #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY && MBEDTLS_SSL_SRV_C */ - /* * Secure renegotiation */ @@ -1382,10 +1233,8 @@ struct mbedtls_ssl_context char own_verify_data[MBEDTLS_SSL_VERIFY_DATA_MAX_LEN]; /*!< previous handshake verify data */ char peer_verify_data[MBEDTLS_SSL_VERIFY_DATA_MAX_LEN]; /*!< previous handshake verify data */ #endif /* MBEDTLS_SSL_RENEGOTIATION */ - #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) /* CID configuration to use in subsequent handshakes. */ - /*! The next incoming CID, chosen by the user and applying to * all subsequent handshakes. This may be different from the * CID currently used in case the user has re-configured the CID @@ -1399,545 +1248,6 @@ struct mbedtls_ssl_context #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ }; -#if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) - -#define MBEDTLS_SSL_CHANNEL_OUTBOUND MBEDTLS_DEPRECATED_NUMERIC_CONSTANT( 0 ) -#define MBEDTLS_SSL_CHANNEL_INBOUND MBEDTLS_DEPRECATED_NUMERIC_CONSTANT( 1 ) - -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif /* MBEDTLS_DEPRECATED_WARNING */ - -MBEDTLS_DEPRECATED extern int (*mbedtls_ssl_hw_record_init)( - mbedtls_ssl_context *ssl, - const unsigned char *key_enc, const unsigned char *key_dec, - size_t keylen, - const unsigned char *iv_enc, const unsigned char *iv_dec, - size_t ivlen, - const unsigned char *mac_enc, const unsigned char *mac_dec, - size_t maclen); -MBEDTLS_DEPRECATED extern int (*mbedtls_ssl_hw_record_activate)( - mbedtls_ssl_context *ssl, - int direction ); -MBEDTLS_DEPRECATED extern int (*mbedtls_ssl_hw_record_reset)( - mbedtls_ssl_context *ssl ); -MBEDTLS_DEPRECATED extern int (*mbedtls_ssl_hw_record_write)( - mbedtls_ssl_context *ssl ); -MBEDTLS_DEPRECATED extern int (*mbedtls_ssl_hw_record_read)( - mbedtls_ssl_context *ssl ); -MBEDTLS_DEPRECATED extern int (*mbedtls_ssl_hw_record_finish)( - mbedtls_ssl_context *ssl ); - -#undef MBEDTLS_DEPRECATED -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ - -#endif /* MBEDTLS_SSL_HW_RECORD_ACCEL */ - -/** - * \brief Return the name of the ciphersuite associated with the - * given ID - * - * \param ciphersuite_id SSL ciphersuite ID - * - * \return a string containing the ciphersuite name - */ -const char *mbedtls_ssl_get_ciphersuite_name( const int ciphersuite_id ); - -/** - * \brief Return the ID of the ciphersuite associated with the - * given name - * - * \param ciphersuite_name SSL ciphersuite name - * - * \return the ID with the ciphersuite or 0 if not found - */ -int mbedtls_ssl_get_ciphersuite_id( const char *ciphersuite_name ); - -/** - * \brief Initialize an SSL context - * Just makes the context ready for mbedtls_ssl_setup() or - * mbedtls_ssl_free() - * - * \param ssl SSL context - */ -void mbedtls_ssl_init( mbedtls_ssl_context *ssl ); - -/** - * \brief Set up an SSL context for use - * - * \note No copy of the configuration context is made, it can be - * shared by many mbedtls_ssl_context structures. - * - * \warning The conf structure will be accessed during the session. - * It must not be modified or freed as long as the session - * is active. - * - * \warning This function must be called exactly once per context. - * Calling mbedtls_ssl_setup again is not supported, even - * if no session is active. - * - * \param ssl SSL context - * \param conf SSL configuration to use - * - * \return 0 if successful, or MBEDTLS_ERR_SSL_ALLOC_FAILED if - * memory allocation failed - */ -int mbedtls_ssl_setup( mbedtls_ssl_context *ssl, - const mbedtls_ssl_config *conf ); - -/** - * \brief Reset an already initialized SSL context for re-use - * while retaining application-set variables, function - * pointers and data. - * - * \param ssl SSL context - * \return 0 if successful, or MBEDTLS_ERR_SSL_ALLOC_FAILED, - MBEDTLS_ERR_SSL_HW_ACCEL_FAILED or - * MBEDTLS_ERR_SSL_COMPRESSION_FAILED - */ -int mbedtls_ssl_session_reset( mbedtls_ssl_context *ssl ); - -/** - * \brief Set the current endpoint type - * - * \param conf SSL configuration - * \param endpoint must be MBEDTLS_SSL_IS_CLIENT or MBEDTLS_SSL_IS_SERVER - */ -void mbedtls_ssl_conf_endpoint( mbedtls_ssl_config *conf, int endpoint ); - -/** - * \brief Set the transport type (TLS or DTLS). - * Default: TLS - * - * \note For DTLS, you must either provide a recv callback that - * doesn't block, or one that handles timeouts, see - * \c mbedtls_ssl_set_bio(). You also need to provide timer - * callbacks with \c mbedtls_ssl_set_timer_cb(). - * - * \param conf SSL configuration - * \param transport transport type: - * MBEDTLS_SSL_TRANSPORT_STREAM for TLS, - * MBEDTLS_SSL_TRANSPORT_DATAGRAM for DTLS. - */ -void mbedtls_ssl_conf_transport( mbedtls_ssl_config *conf, int transport ); - -/** - * \brief Set the certificate verification mode - * Default: NONE on server, REQUIRED on client - * - * \param conf SSL configuration - * \param authmode can be: - * - * MBEDTLS_SSL_VERIFY_NONE: peer certificate is not checked - * (default on server) - * (insecure on client) - * - * MBEDTLS_SSL_VERIFY_OPTIONAL: peer certificate is checked, however the - * handshake continues even if verification failed; - * mbedtls_ssl_get_verify_result() can be called after the - * handshake is complete. - * - * MBEDTLS_SSL_VERIFY_REQUIRED: peer *must* present a valid certificate, - * handshake is aborted if verification failed. - * (default on client) - * - * \note On client, MBEDTLS_SSL_VERIFY_REQUIRED is the recommended mode. - * With MBEDTLS_SSL_VERIFY_OPTIONAL, the user needs to call mbedtls_ssl_get_verify_result() at - * the right time(s), which may not be obvious, while REQUIRED always perform - * the verification as soon as possible. For example, REQUIRED was protecting - * against the "triple handshake" attack even before it was found. - */ -void mbedtls_ssl_conf_authmode( mbedtls_ssl_config *conf, int authmode ); - -#if defined(MBEDTLS_X509_CRT_PARSE_C) -/** - * \brief Set the verification callback (Optional). - * - * If set, the provided verify callback is called for each - * certificate in the peer's CRT chain, including the trusted - * root. For more information, please see the documentation of - * \c mbedtls_x509_crt_verify(). - * - * \note For per context callbacks and contexts, please use - * mbedtls_ssl_set_verify() instead. - * - * \param conf The SSL configuration to use. - * \param f_vrfy The verification callback to use during CRT verification. - * \param p_vrfy The opaque context to be passed to the callback. - */ -void mbedtls_ssl_conf_verify( mbedtls_ssl_config *conf, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ); -#endif /* MBEDTLS_X509_CRT_PARSE_C */ - -/** - * \brief Set the random number generator callback - * - * \param conf SSL configuration - * \param f_rng RNG function - * \param p_rng RNG parameter - */ -void mbedtls_ssl_conf_rng( mbedtls_ssl_config *conf, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -/** - * \brief Set the debug callback - * - * The callback has the following argument: - * void * opaque context for the callback - * int debug level - * const char * file name - * int line number - * const char * message - * - * \param conf SSL configuration - * \param f_dbg debug function - * \param p_dbg debug parameter - */ -void mbedtls_ssl_conf_dbg( mbedtls_ssl_config *conf, - void (*f_dbg)(void *, int, const char *, int, const char *), - void *p_dbg ); - -/** - * \brief Set the underlying BIO callbacks for write, read and - * read-with-timeout. - * - * \param ssl SSL context - * \param p_bio parameter (context) shared by BIO callbacks - * \param f_send write callback - * \param f_recv read callback - * \param f_recv_timeout blocking read callback with timeout. - * - * \note One of f_recv or f_recv_timeout can be NULL, in which case - * the other is used. If both are non-NULL, f_recv_timeout is - * used and f_recv is ignored (as if it were NULL). - * - * \note The two most common use cases are: - * - non-blocking I/O, f_recv != NULL, f_recv_timeout == NULL - * - blocking I/O, f_recv == NULL, f_recv_timout != NULL - * - * \note For DTLS, you need to provide either a non-NULL - * f_recv_timeout callback, or a f_recv that doesn't block. - * - * \note See the documentations of \c mbedtls_ssl_send_t, - * \c mbedtls_ssl_recv_t and \c mbedtls_ssl_recv_timeout_t for - * the conventions those callbacks must follow. - * - * \note On some platforms, net_sockets.c provides - * \c mbedtls_net_send(), \c mbedtls_net_recv() and - * \c mbedtls_net_recv_timeout() that are suitable to be used - * here. - */ -void mbedtls_ssl_set_bio( mbedtls_ssl_context *ssl, - void *p_bio, - mbedtls_ssl_send_t *f_send, - mbedtls_ssl_recv_t *f_recv, - mbedtls_ssl_recv_timeout_t *f_recv_timeout ); - -#if defined(MBEDTLS_SSL_PROTO_DTLS) - -#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) - - -/** - * \brief Configure the use of the Connection ID (CID) - * extension in the next handshake. - * - * Reference: draft-ietf-tls-dtls-connection-id-05 - * https://tools.ietf.org/html/draft-ietf-tls-dtls-connection-id-05 - * - * The DTLS CID extension allows the reliable association of - * DTLS records to DTLS connections across changes in the - * underlying transport (changed IP and Port metadata) by - * adding explicit connection identifiers (CIDs) to the - * headers of encrypted DTLS records. The desired CIDs are - * configured by the application layer and are exchanged in - * new `ClientHello` / `ServerHello` extensions during the - * handshake, where each side indicates the CID it wants the - * peer to use when writing encrypted messages. The CIDs are - * put to use once records get encrypted: the stack discards - * any incoming records that don't include the configured CID - * in their header, and adds the peer's requested CID to the - * headers of outgoing messages. - * - * This API enables or disables the use of the CID extension - * in the next handshake and sets the value of the CID to - * be used for incoming messages. - * - * \param ssl The SSL context to configure. This must be initialized. - * \param enable This value determines whether the CID extension should - * be used or not. Possible values are: - * - MBEDTLS_SSL_CID_ENABLED to enable the use of the CID. - * - MBEDTLS_SSL_CID_DISABLED (default) to disable the use - * of the CID. - * \param own_cid The address of the readable buffer holding the CID we want - * the peer to use when sending encrypted messages to us. - * This may be \c NULL if \p own_cid_len is \c 0. - * This parameter is unused if \p enabled is set to - * MBEDTLS_SSL_CID_DISABLED. - * \param own_cid_len The length of \p own_cid. - * This parameter is unused if \p enabled is set to - * MBEDTLS_SSL_CID_DISABLED. - * - * \note The value of \p own_cid_len must match the value of the - * \c len parameter passed to mbedtls_ssl_conf_cid() - * when configuring the ::mbedtls_ssl_config that \p ssl - * is bound to. - * - * \note This CID configuration applies to subsequent handshakes - * performed on the SSL context \p ssl, but does not trigger - * one. You still have to call `mbedtls_ssl_handshake()` - * (for the initial handshake) or `mbedtls_ssl_renegotiate()` - * (for a renegotiation handshake) explicitly after a - * successful call to this function to run the handshake. - * - * \note This call cannot guarantee that the use of the CID - * will be successfully negotiated in the next handshake, - * because the peer might not support it. Specifically: - * - On the Client, enabling the use of the CID through - * this call implies that the `ClientHello` in the next - * handshake will include the CID extension, thereby - * offering the use of the CID to the server. Only if - * the `ServerHello` contains the CID extension, too, - * the CID extension will actually be put to use. - * - On the Server, enabling the use of the CID through - * this call implies that that the server will look for - * the CID extension in a `ClientHello` from the client, - * and, if present, reply with a CID extension in its - * `ServerHello`. - * - * \note To check whether the use of the CID was negotiated - * after the subsequent handshake has completed, please - * use the API mbedtls_ssl_get_peer_cid(). - * - * \warning If the use of the CID extension is enabled in this call - * and the subsequent handshake negotiates its use, Mbed TLS - * will silently drop every packet whose CID does not match - * the CID configured in \p own_cid. It is the responsibility - * of the user to adapt the underlying transport to take care - * of CID-based demultiplexing before handing datagrams to - * Mbed TLS. - * - * \return \c 0 on success. In this case, the CID configuration - * applies to the next handshake. - * \return A negative error code on failure. - */ -int mbedtls_ssl_set_cid( mbedtls_ssl_context *ssl, - int enable, - unsigned char const *own_cid, - size_t own_cid_len ); - -/** - * \brief Get information about the use of the CID extension - * in the current connection. - * - * \param ssl The SSL context to query. - * \param enabled The address at which to store whether the CID extension - * is currently in use or not. If the CID is in use, - * `*enabled` is set to MBEDTLS_SSL_CID_ENABLED; - * otherwise, it is set to MBEDTLS_SSL_CID_DISABLED. - * \param peer_cid The address of the buffer in which to store the CID - * chosen by the peer (if the CID extension is used). - * This may be \c NULL in case the value of peer CID - * isn't needed. If it is not \c NULL, \p peer_cid_len - * must not be \c NULL. - * \param peer_cid_len The address at which to store the size of the CID - * chosen by the peer (if the CID extension is used). - * This is also the number of Bytes in \p peer_cid that - * have been written. - * This may be \c NULL in case the length of the peer CID - * isn't needed. If it is \c NULL, \p peer_cid must be - * \c NULL, too. - * - * \note This applies to the state of the CID negotiated in - * the last complete handshake. If a handshake is in - * progress, this function will attempt to complete - * the handshake first. - * - * \note If CID extensions have been exchanged but both client - * and server chose to use an empty CID, this function - * sets `*enabled` to #MBEDTLS_SSL_CID_DISABLED - * (the rationale for this is that the resulting - * communication is the same as if the CID extensions - * hadn't been used). - * - * \return \c 0 on success. - * \return A negative error code on failure. - */ -int mbedtls_ssl_get_peer_cid( mbedtls_ssl_context *ssl, - int *enabled, - unsigned char peer_cid[ MBEDTLS_SSL_CID_OUT_LEN_MAX ], - size_t *peer_cid_len ); - -#endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ - -/** - * \brief Set the Maximum Tranport Unit (MTU). - * Special value: 0 means unset (no limit). - * This represents the maximum size of a datagram payload - * handled by the transport layer (usually UDP) as determined - * by the network link and stack. In practice, this controls - * the maximum size datagram the DTLS layer will pass to the - * \c f_send() callback set using \c mbedtls_ssl_set_bio(). - * - * \note The limit on datagram size is converted to a limit on - * record payload by subtracting the current overhead of - * encapsulation and encryption/authentication if any. - * - * \note This can be called at any point during the connection, for - * example when a Path Maximum Transfer Unit (PMTU) - * estimate becomes available from other sources, - * such as lower (or higher) protocol layers. - * - * \note This setting only controls the size of the packets we send, - * and does not restrict the size of the datagrams we're - * willing to receive. Client-side, you can request the - * server to use smaller records with \c - * mbedtls_ssl_conf_max_frag_len(). - * - * \note If both a MTU and a maximum fragment length have been - * configured (or negotiated with the peer), the resulting - * lower limit on record payload (see first note) is used. - * - * \note This can only be used to decrease the maximum size - * of datagrams (hence records, see first note) sent. It - * cannot be used to increase the maximum size of records over - * the limit set by #MBEDTLS_SSL_OUT_CONTENT_LEN. - * - * \note Values lower than the current record layer expansion will - * result in an error when trying to send data. - * - * \note Using record compression together with a non-zero MTU value - * will result in an error when trying to send data. - * - * \param ssl SSL context - * \param mtu Value of the path MTU in bytes - */ -void mbedtls_ssl_set_mtu( mbedtls_ssl_context *ssl, uint16_t mtu ); -#endif /* MBEDTLS_SSL_PROTO_DTLS */ - -#if defined(MBEDTLS_X509_CRT_PARSE_C) -/** - * \brief Set a connection-specific verification callback (optional). - * - * If set, the provided verify callback is called for each - * certificate in the peer's CRT chain, including the trusted - * root. For more information, please see the documentation of - * \c mbedtls_x509_crt_verify(). - * - * \note This call is analogous to mbedtls_ssl_conf_verify() but - * binds the verification callback and context to an SSL context - * as opposed to an SSL configuration. - * If mbedtls_ssl_conf_verify() and mbedtls_ssl_set_verify() - * are both used, mbedtls_ssl_set_verify() takes precedence. - * - * \param ssl The SSL context to use. - * \param f_vrfy The verification callback to use during CRT verification. - * \param p_vrfy The opaque context to be passed to the callback. - */ -void mbedtls_ssl_set_verify( mbedtls_ssl_context *ssl, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ); -#endif /* MBEDTLS_X509_CRT_PARSE_C */ - -/** - * \brief Set the timeout period for mbedtls_ssl_read() - * (Default: no timeout.) - * - * \param conf SSL configuration context - * \param timeout Timeout value in milliseconds. - * Use 0 for no timeout (default). - * - * \note With blocking I/O, this will only work if a non-NULL - * \c f_recv_timeout was set with \c mbedtls_ssl_set_bio(). - * With non-blocking I/O, this will only work if timer - * callbacks were set with \c mbedtls_ssl_set_timer_cb(). - * - * \note With non-blocking I/O, you may also skip this function - * altogether and handle timeouts at the application layer. - */ -void mbedtls_ssl_conf_read_timeout( mbedtls_ssl_config *conf, uint32_t timeout ); - -#if defined(MBEDTLS_SSL_RECORD_CHECKING) -/** - * \brief Check whether a buffer contains a valid and authentic record - * that has not been seen before. (DTLS only). - * - * This function does not change the user-visible state - * of the SSL context. Its sole purpose is to provide - * an indication of the legitimacy of an incoming record. - * - * This can be useful e.g. in distributed server environments - * using the DTLS Connection ID feature, in which connections - * might need to be passed between service instances on a change - * of peer address, but where such disruptive operations should - * only happen after the validity of incoming records has been - * confirmed. - * - * \param ssl The SSL context to use. - * \param buf The address of the buffer holding the record to be checked. - * This must be a read/write buffer of length \p buflen Bytes. - * \param buflen The length of \p buf in Bytes. - * - * \note This routine only checks whether the provided buffer begins - * with a valid and authentic record that has not been seen - * before, but does not check potential data following the - * initial record. In particular, it is possible to pass DTLS - * datagrams containing multiple records, in which case only - * the first record is checked. - * - * \note This function modifies the input buffer \p buf. If you need - * to preserve the original record, you have to maintain a copy. - * - * \return \c 0 if the record is valid and authentic and has not been - * seen before. - * \return MBEDTLS_ERR_SSL_INVALID_MAC if the check completed - * successfully but the record was found to be not authentic. - * \return MBEDTLS_ERR_SSL_INVALID_RECORD if the check completed - * successfully but the record was found to be invalid for - * a reason different from authenticity checking. - * \return MBEDTLS_ERR_SSL_UNEXPECTED_RECORD if the check completed - * successfully but the record was found to be unexpected - * in the state of the SSL context, including replayed records. - * \return Another negative error code on different kinds of failure. - * In this case, the SSL context becomes unusable and needs - * to be freed or reset before reuse. - */ -int mbedtls_ssl_check_record( mbedtls_ssl_context const *ssl, - unsigned char *buf, - size_t buflen ); -#endif /* MBEDTLS_SSL_RECORD_CHECKING */ - -/** - * \brief Set the timer callbacks (Mandatory for DTLS.) - * - * \param ssl SSL context - * \param p_timer parameter (context) shared by timer callbacks - * \param f_set_timer set timer callback - * \param f_get_timer get timer callback. Must return: - * - * \note See the documentation of \c mbedtls_ssl_set_timer_t and - * \c mbedtls_ssl_get_timer_t for the conventions this pair of - * callbacks must follow. - * - * \note On some platforms, timing.c provides - * \c mbedtls_timing_set_delay() and - * \c mbedtls_timing_get_delay() that are suitable for using - * here, except if using an event-driven style. - * - * \note See also the "DTLS tutorial" article in our knowledge base. - * https://tls.mbed.org/kb/how-to/dtls-tutorial - */ -void mbedtls_ssl_set_timer_cb( mbedtls_ssl_context *ssl, - void *p_timer, - mbedtls_ssl_set_timer_t *f_set_timer, - mbedtls_ssl_get_timer_t *f_get_timer ); - /** * \brief Callback type: generate and write session ticket * @@ -1964,7 +1274,6 @@ typedef int mbedtls_ssl_ticket_write_t( void *p_ticket, size_t *tlen, uint32_t *lifetime ); -#if defined(MBEDTLS_SSL_EXPORT_KEYS) /** * \brief Callback type: Export key block and master secret * @@ -1986,11 +1295,11 @@ typedef int mbedtls_ssl_ticket_write_t( void *p_ticket, * a specific MBEDTLS_ERR_XXX code. */ typedef int mbedtls_ssl_export_keys_t( void *p_expkey, - const unsigned char *ms, - const unsigned char *kb, - size_t maclen, - size_t keylen, - size_t ivlen ); + const unsigned char *ms, + const unsigned char *kb, + size_t maclen, + size_t keylen, + size_t ivlen ); /** * \brief Callback type: Export key block, master secret, @@ -2026,7 +1335,6 @@ typedef int mbedtls_ssl_export_keys_ext_t( void *p_expkey, const unsigned char client_random[32], const unsigned char server_random[32], mbedtls_tls_prf_types tls_prf_type ); -#endif /* MBEDTLS_SSL_EXPORT_KEYS */ /** * \brief Callback type: parse and load session ticket @@ -2056,138 +1364,6 @@ typedef int mbedtls_ssl_ticket_parse_t( void *p_ticket, unsigned char *buf, size_t len ); -#if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_SRV_C) -/** - * \brief Configure SSL session ticket callbacks (server only). - * (Default: none.) - * - * \note On server, session tickets are enabled by providing - * non-NULL callbacks. - * - * \note On client, use \c mbedtls_ssl_conf_session_tickets(). - * - * \param conf SSL configuration context - * \param f_ticket_write Callback for writing a ticket - * \param f_ticket_parse Callback for parsing a ticket - * \param p_ticket Context shared by the two callbacks - */ -void mbedtls_ssl_conf_session_tickets_cb( mbedtls_ssl_config *conf, - mbedtls_ssl_ticket_write_t *f_ticket_write, - mbedtls_ssl_ticket_parse_t *f_ticket_parse, - void *p_ticket ); -#endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_SRV_C */ - -#if defined(MBEDTLS_SSL_EXPORT_KEYS) -/** - * \brief Configure key export callback. - * (Default: none.) - * - * \note See \c mbedtls_ssl_export_keys_t. - * - * \param conf SSL configuration context - * \param f_export_keys Callback for exporting keys - * \param p_export_keys Context for the callback - */ -void mbedtls_ssl_conf_export_keys_cb( mbedtls_ssl_config *conf, - mbedtls_ssl_export_keys_t *f_export_keys, - void *p_export_keys ); - -/** - * \brief Configure extended key export callback. - * (Default: none.) - * - * \note See \c mbedtls_ssl_export_keys_ext_t. - * \warning Exported key material must not be used for any purpose - * before the (D)TLS handshake is completed - * - * \param conf SSL configuration context - * \param f_export_keys_ext Callback for exporting keys - * \param p_export_keys Context for the callback - */ -void mbedtls_ssl_conf_export_keys_ext_cb( mbedtls_ssl_config *conf, - mbedtls_ssl_export_keys_ext_t *f_export_keys_ext, - void *p_export_keys ); -#endif /* MBEDTLS_SSL_EXPORT_KEYS */ - -#if defined(MBEDTLS_SSL_ASYNC_PRIVATE) -/** - * \brief Configure asynchronous private key operation callbacks. - * - * \param conf SSL configuration context - * \param f_async_sign Callback to start a signature operation. See - * the description of ::mbedtls_ssl_async_sign_t - * for more information. This may be \c NULL if the - * external processor does not support any signature - * operation; in this case the private key object - * associated with the certificate will be used. - * \param f_async_decrypt Callback to start a decryption operation. See - * the description of ::mbedtls_ssl_async_decrypt_t - * for more information. This may be \c NULL if the - * external processor does not support any decryption - * operation; in this case the private key object - * associated with the certificate will be used. - * \param f_async_resume Callback to resume an asynchronous operation. See - * the description of ::mbedtls_ssl_async_resume_t - * for more information. This may not be \c NULL unless - * \p f_async_sign and \p f_async_decrypt are both - * \c NULL. - * \param f_async_cancel Callback to cancel an asynchronous operation. See - * the description of ::mbedtls_ssl_async_cancel_t - * for more information. This may be \c NULL if - * no cleanup is needed. - * \param config_data A pointer to configuration data which can be - * retrieved with - * mbedtls_ssl_conf_get_async_config_data(). The - * library stores this value without dereferencing it. - */ -void mbedtls_ssl_conf_async_private_cb( mbedtls_ssl_config *conf, - mbedtls_ssl_async_sign_t *f_async_sign, - mbedtls_ssl_async_decrypt_t *f_async_decrypt, - mbedtls_ssl_async_resume_t *f_async_resume, - mbedtls_ssl_async_cancel_t *f_async_cancel, - void *config_data ); - -/** - * \brief Retrieve the configuration data set by - * mbedtls_ssl_conf_async_private_cb(). - * - * \param conf SSL configuration context - * \return The configuration data set by - * mbedtls_ssl_conf_async_private_cb(). - */ -void *mbedtls_ssl_conf_get_async_config_data( const mbedtls_ssl_config *conf ); - -/** - * \brief Retrieve the asynchronous operation user context. - * - * \note This function may only be called while a handshake - * is in progress. - * - * \param ssl The SSL context to access. - * - * \return The asynchronous operation user context that was last - * set during the current handshake. If - * mbedtls_ssl_set_async_operation_data() has not yet been - * called during the current handshake, this function returns - * \c NULL. - */ -void *mbedtls_ssl_get_async_operation_data( const mbedtls_ssl_context *ssl ); - -/** - * \brief Retrieve the asynchronous operation user context. - * - * \note This function may only be called while a handshake - * is in progress. - * - * \param ssl The SSL context to access. - * \param ctx The new value of the asynchronous operation user context. - * Call mbedtls_ssl_get_async_operation_data() later during the - * same handshake to retrieve this value. - */ -void mbedtls_ssl_set_async_operation_data( mbedtls_ssl_context *ssl, - void *ctx ); -#endif /* MBEDTLS_SSL_ASYNC_PRIVATE */ - /** * \brief Callback type: generate a cookie * @@ -2203,8 +1379,8 @@ void mbedtls_ssl_set_async_operation_data( mbedtls_ssl_context *ssl, * or a negative error code. */ typedef int mbedtls_ssl_cookie_write_t( void *ctx, - unsigned char **p, unsigned char *end, - const unsigned char *info, size_t ilen ); + unsigned char **p, unsigned char *end, + const unsigned char *info, size_t ilen ); /** * \brief Callback type: verify a cookie @@ -2220,2135 +1396,153 @@ typedef int mbedtls_ssl_cookie_write_t( void *ctx, * or a negative error code. */ typedef int mbedtls_ssl_cookie_check_t( void *ctx, - const unsigned char *cookie, size_t clen, - const unsigned char *info, size_t ilen ); - -#if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C) -/** - * \brief Register callbacks for DTLS cookies - * (Server only. DTLS only.) - * - * Default: dummy callbacks that fail, in order to force you to - * register working callbacks (and initialize their context). - * - * To disable HelloVerifyRequest, register NULL callbacks. - * - * \warning Disabling hello verification allows your server to be used - * for amplification in DoS attacks against other hosts. - * Only disable if you known this can't happen in your - * particular environment. - * - * \note See comments on \c mbedtls_ssl_handshake() about handling - * the MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED that is expected - * on the first handshake attempt when this is enabled. - * - * \note This is also necessary to handle client reconnection from - * the same port as described in RFC 6347 section 4.2.8 (only - * the variant with cookies is supported currently). See - * comments on \c mbedtls_ssl_read() for details. - * - * \param conf SSL configuration - * \param f_cookie_write Cookie write callback - * \param f_cookie_check Cookie check callback - * \param p_cookie Context for both callbacks - */ -void mbedtls_ssl_conf_dtls_cookies( mbedtls_ssl_config *conf, - mbedtls_ssl_cookie_write_t *f_cookie_write, - mbedtls_ssl_cookie_check_t *f_cookie_check, - void *p_cookie ); - -/** - * \brief Set client's transport-level identification info. - * (Server only. DTLS only.) - * - * This is usually the IP address (and port), but could be - * anything identify the client depending on the underlying - * network stack. Used for HelloVerifyRequest with DTLS. - * This is *not* used to route the actual packets. - * - * \param ssl SSL context - * \param info Transport-level info identifying the client (eg IP + port) - * \param ilen Length of info in bytes - * - * \note An internal copy is made, so the info buffer can be reused. - * - * \return 0 on success, - * MBEDTLS_ERR_SSL_BAD_INPUT_DATA if used on client, - * MBEDTLS_ERR_SSL_ALLOC_FAILED if out of memory. - */ -int mbedtls_ssl_set_client_transport_id( mbedtls_ssl_context *ssl, - const unsigned char *info, - size_t ilen ); - -#endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY && MBEDTLS_SSL_SRV_C */ - -#if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) -/** - * \brief Enable or disable anti-replay protection for DTLS. - * (DTLS only, no effect on TLS.) - * Default: enabled. - * - * \param conf SSL configuration - * \param mode MBEDTLS_SSL_ANTI_REPLAY_ENABLED or MBEDTLS_SSL_ANTI_REPLAY_DISABLED. - * - * \warning Disabling this is a security risk unless the application - * protocol handles duplicated packets in a safe way. You - * should not disable this without careful consideration. - * However, if your application already detects duplicated - * packets and needs information about them to adjust its - * transmission strategy, then you'll want to disable this. - */ -void mbedtls_ssl_conf_dtls_anti_replay( mbedtls_ssl_config *conf, char mode ); -#endif /* MBEDTLS_SSL_DTLS_ANTI_REPLAY */ - -#if defined(MBEDTLS_SSL_DTLS_BADMAC_LIMIT) -/** - * \brief Set a limit on the number of records with a bad MAC - * before terminating the connection. - * (DTLS only, no effect on TLS.) - * Default: 0 (disabled). - * - * \param conf SSL configuration - * \param limit Limit, or 0 to disable. - * - * \note If the limit is N, then the connection is terminated when - * the Nth non-authentic record is seen. - * - * \note Records with an invalid header are not counted, only the - * ones going through the authentication-decryption phase. - * - * \note This is a security trade-off related to the fact that it's - * often relatively easy for an active attacker ot inject UDP - * datagrams. On one hand, setting a low limit here makes it - * easier for such an attacker to forcibly terminated a - * connection. On the other hand, a high limit or no limit - * might make us waste resources checking authentication on - * many bogus packets. - */ -void mbedtls_ssl_conf_dtls_badmac_limit( mbedtls_ssl_config *conf, unsigned limit ); -#endif /* MBEDTLS_SSL_DTLS_BADMAC_LIMIT */ - -#if defined(MBEDTLS_SSL_PROTO_DTLS) - -/** - * \brief Allow or disallow packing of multiple handshake records - * within a single datagram. - * - * \param ssl The SSL context to configure. - * \param allow_packing This determines whether datagram packing may - * be used or not. A value of \c 0 means that every - * record will be sent in a separate datagram; a - * value of \c 1 means that, if space permits, - * multiple handshake messages (including CCS) belonging to - * a single flight may be packed within a single datagram. - * - * \note This is enabled by default and should only be disabled - * for test purposes, or if datagram packing causes - * interoperability issues with peers that don't support it. - * - * \note Allowing datagram packing reduces the network load since - * there's less overhead if multiple messages share the same - * datagram. Also, it increases the handshake efficiency - * since messages belonging to a single datagram will not - * be reordered in transit, and so future message buffering - * or flight retransmission (if no buffering is used) as - * means to deal with reordering are needed less frequently. - * - * \note Application records are not affected by this option and - * are currently always sent in separate datagrams. - * - */ -void mbedtls_ssl_set_datagram_packing( mbedtls_ssl_context *ssl, - unsigned allow_packing ); - -/** - * \brief Set retransmit timeout values for the DTLS handshake. - * (DTLS only, no effect on TLS.) - * - * \param conf SSL configuration - * \param min Initial timeout value in milliseconds. - * Default: 1000 (1 second). - * \param max Maximum timeout value in milliseconds. - * Default: 60000 (60 seconds). - * - * \note Default values are from RFC 6347 section 4.2.4.1. - * - * \note The 'min' value should typically be slightly above the - * expected round-trip time to your peer, plus whatever time - * it takes for the peer to process the message. For example, - * if your RTT is about 600ms and you peer needs up to 1s to - * do the cryptographic operations in the handshake, then you - * should set 'min' slightly above 1600. Lower values of 'min' - * might cause spurious resends which waste network resources, - * while larger value of 'min' will increase overall latency - * on unreliable network links. - * - * \note The more unreliable your network connection is, the larger - * your max / min ratio needs to be in order to achieve - * reliable handshakes. - * - * \note Messages are retransmitted up to log2(ceil(max/min)) times. - * For example, if min = 1s and max = 5s, the retransmit plan - * goes: send ... 1s -> resend ... 2s -> resend ... 4s -> - * resend ... 5s -> give up and return a timeout error. - */ -void mbedtls_ssl_conf_handshake_timeout( mbedtls_ssl_config *conf, uint32_t min, uint32_t max ); -#endif /* MBEDTLS_SSL_PROTO_DTLS */ - -#if defined(MBEDTLS_SSL_SRV_C) -/** - * \brief Set the session cache callbacks (server-side only) - * If not set, no session resuming is done (except if session - * tickets are enabled too). - * - * The session cache has the responsibility to check for stale - * entries based on timeout. See RFC 5246 for recommendations. - * - * Warning: session.peer_cert is cleared by the SSL/TLS layer on - * connection shutdown, so do not cache the pointer! Either set - * it to NULL or make a full copy of the certificate. - * - * The get callback is called once during the initial handshake - * to enable session resuming. The get function has the - * following parameters: (void *parameter, mbedtls_ssl_session *session) - * If a valid entry is found, it should fill the master of - * the session object with the cached values and return 0, - * return 1 otherwise. Optionally peer_cert can be set as well - * if it is properly present in cache entry. - * - * The set callback is called once during the initial handshake - * to enable session resuming after the entire handshake has - * been finished. The set function has the following parameters: - * (void *parameter, const mbedtls_ssl_session *session). The function - * should create a cache entry for future retrieval based on - * the data in the session structure and should keep in mind - * that the mbedtls_ssl_session object presented (and all its referenced - * data) is cleared by the SSL/TLS layer when the connection is - * terminated. It is recommended to add metadata to determine if - * an entry is still valid in the future. Return 0 if - * successfully cached, return 1 otherwise. - * - * \param conf SSL configuration - * \param p_cache parmater (context) for both callbacks - * \param f_get_cache session get callback - * \param f_set_cache session set callback - */ -void mbedtls_ssl_conf_session_cache( mbedtls_ssl_config *conf, - void *p_cache, - int (*f_get_cache)(void *, mbedtls_ssl_session *), - int (*f_set_cache)(void *, const mbedtls_ssl_session *) ); -#endif /* MBEDTLS_SSL_SRV_C */ - -#if defined(MBEDTLS_SSL_CLI_C) -/** - * \brief Request resumption of session (client-side only) - * Session data is copied from presented session structure. - * - * \param ssl SSL context - * \param session session context - * - * \return 0 if successful, - * MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed, - * MBEDTLS_ERR_SSL_BAD_INPUT_DATA if used server-side or - * arguments are otherwise invalid - * - * \sa mbedtls_ssl_get_session() - */ -int mbedtls_ssl_set_session( mbedtls_ssl_context *ssl, const mbedtls_ssl_session *session ); -#endif /* MBEDTLS_SSL_CLI_C */ - -/** - * \brief Load serialized session data into a session structure. - * On client, this can be used for loading saved sessions - * before resuming them with mbedstls_ssl_set_session(). - * On server, this can be used for alternative implementations - * of session cache or session tickets. - * - * \warning If a peer certificate chain is associated with the session, - * the serialized state will only contain the peer's - * end-entity certificate and the result of the chain - * verification (unless verification was disabled), but not - * the rest of the chain. - * - * \see mbedtls_ssl_session_save() - * \see mbedtls_ssl_set_session() - * - * \param session The session structure to be populated. It must have been - * initialised with mbedtls_ssl_session_init() but not - * populated yet. - * \param buf The buffer holding the serialized session data. It must be a - * readable buffer of at least \p len bytes. - * \param len The size of the serialized data in bytes. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed. - * \return #MBEDTLS_ERR_SSL_BAD_INPUT_DATA if input data is invalid. - * \return #MBEDTLS_ERR_SSL_VERSION_MISMATCH if the serialized data - * was generated in a different version or configuration of - * Mbed TLS. - * \return Another negative value for other kinds of errors (for - * example, unsupported features in the embedded certificate). - */ -int mbedtls_ssl_session_load( mbedtls_ssl_session *session, - const unsigned char *buf, - size_t len ); - -/** - * \brief Save session structure as serialized data in a buffer. - * On client, this can be used for saving session data, - * potentially in non-volatile storage, for resuming later. - * On server, this can be used for alternative implementations - * of session cache or session tickets. - * - * \see mbedtls_ssl_session_load() - * \see mbedtls_ssl_get_session_pointer() - * - * \param session The session structure to be saved. - * \param buf The buffer to write the serialized data to. It must be a - * writeable buffer of at least \p len bytes, or may be \c - * NULL if \p len is \c 0. - * \param buf_len The number of bytes available for writing in \p buf. - * \param olen The size in bytes of the data that has been or would have - * been written. It must point to a valid \c size_t. - * - * \note \p olen is updated to the correct value regardless of - * whether \p buf_len was large enough. This makes it possible - * to determine the necessary size by calling this function - * with \p buf set to \c NULL and \p buf_len to \c 0. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL if \p buf is too small. - */ -int mbedtls_ssl_session_save( const mbedtls_ssl_session *session, - unsigned char *buf, - size_t buf_len, - size_t *olen ); - -/** - * \brief Get a pointer to the current session structure, for example - * to serialize it. - * - * \warning Ownership of the session remains with the SSL context, and - * the returned pointer is only guaranteed to be valid until - * the next API call operating on the same \p ssl context. - * - * \see mbedtls_ssl_session_save() - * - * \param ssl The SSL context. - * - * \return A pointer to the current session if successful. - * \return \c NULL if no session is active. - */ -const mbedtls_ssl_session *mbedtls_ssl_get_session_pointer( const mbedtls_ssl_context *ssl ); - -/** - * \brief Set the list of allowed ciphersuites and the preference - * order. First in the list has the highest preference. - * (Overrides all version-specific lists) - * - * The ciphersuites array is not copied, and must remain - * valid for the lifetime of the ssl_config. - * - * Note: The server uses its own preferences - * over the preference of the client unless - * MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE is defined! - * - * \param conf SSL configuration - * \param ciphersuites 0-terminated list of allowed ciphersuites - */ -void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *conf, - const int *ciphersuites ); - -#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) -#define MBEDTLS_SSL_UNEXPECTED_CID_IGNORE 0 -#define MBEDTLS_SSL_UNEXPECTED_CID_FAIL 1 -/** - * \brief Specify the length of Connection IDs for incoming - * encrypted DTLS records, as well as the behaviour - * on unexpected CIDs. - * - * By default, the CID length is set to \c 0, - * and unexpected CIDs are silently ignored. - * - * \param conf The SSL configuration to modify. - * \param len The length in Bytes of the CID fields in encrypted - * DTLS records using the CID mechanism. This must - * not be larger than #MBEDTLS_SSL_CID_OUT_LEN_MAX. - * \param ignore_other_cids This determines the stack's behaviour when - * receiving a record with an unexpected CID. - * Possible values are: - * - #MBEDTLS_SSL_UNEXPECTED_CID_IGNORE - * In this case, the record is silently ignored. - * - #MBEDTLS_SSL_UNEXPECTED_CID_FAIL - * In this case, the stack fails with the specific - * error code #MBEDTLS_ERR_SSL_UNEXPECTED_CID. - * - * \note The CID specification allows implementations to either - * use a common length for all incoming connection IDs or - * allow variable-length incoming IDs. Mbed TLS currently - * requires a common length for all connections sharing the - * same SSL configuration; this allows simpler parsing of - * record headers. - * - * \return \c 0 on success. - * \return #MBEDTLS_ERR_SSL_BAD_INPUT_DATA if \p own_cid_len - * is too large. - */ -int mbedtls_ssl_conf_cid( mbedtls_ssl_config *conf, size_t len, - int ignore_other_cids ); -#endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ - -/** - * \brief Set the list of allowed ciphersuites and the - * preference order for a specific version of the protocol. - * (Only useful on the server side) - * - * The ciphersuites array is not copied, and must remain - * valid for the lifetime of the ssl_config. - * - * \param conf SSL configuration - * \param ciphersuites 0-terminated list of allowed ciphersuites - * \param major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 - * supported) - * \param minor Minor version number (MBEDTLS_SSL_MINOR_VERSION_0, - * MBEDTLS_SSL_MINOR_VERSION_1 and MBEDTLS_SSL_MINOR_VERSION_2, - * MBEDTLS_SSL_MINOR_VERSION_3 supported) - * - * \note With DTLS, use MBEDTLS_SSL_MINOR_VERSION_2 for DTLS 1.0 - * and MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2 - */ -void mbedtls_ssl_conf_ciphersuites_for_version( mbedtls_ssl_config *conf, - const int *ciphersuites, - int major, int minor ); - -#if defined(MBEDTLS_X509_CRT_PARSE_C) -/** - * \brief Set the X.509 security profile used for verification - * - * \note The restrictions are enforced for all certificates in the - * chain. However, signatures in the handshake are not covered - * by this setting but by \b mbedtls_ssl_conf_sig_hashes(). - * - * \param conf SSL configuration - * \param profile Profile to use - */ -void mbedtls_ssl_conf_cert_profile( mbedtls_ssl_config *conf, - const mbedtls_x509_crt_profile *profile ); - -/** - * \brief Set the data required to verify peer certificate - * - * \note See \c mbedtls_x509_crt_verify() for notes regarding the - * parameters ca_chain (maps to trust_ca for that function) - * and ca_crl. - * - * \param conf SSL configuration - * \param ca_chain trusted CA chain (meaning all fully trusted top-level CAs) - * \param ca_crl trusted CA CRLs - */ -void mbedtls_ssl_conf_ca_chain( mbedtls_ssl_config *conf, - mbedtls_x509_crt *ca_chain, - mbedtls_x509_crl *ca_crl ); - -#if defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK) -/** - * \brief Set the trusted certificate callback. - * - * This API allows to register the set of trusted certificates - * through a callback, instead of a linked list as configured - * by mbedtls_ssl_conf_ca_chain(). - * - * This is useful for example in contexts where a large number - * of CAs are used, and the inefficiency of maintaining them - * in a linked list cannot be tolerated. It is also useful when - * the set of trusted CAs needs to be modified frequently. - * - * See the documentation of `mbedtls_x509_crt_ca_cb_t` for - * more information. - * - * \param conf The SSL configuration to register the callback with. - * \param f_ca_cb The trusted certificate callback to use when verifying - * certificate chains. - * \param p_ca_cb The context to be passed to \p f_ca_cb (for example, - * a reference to a trusted CA database). - * - * \note This API is incompatible with mbedtls_ssl_conf_ca_chain(): - * Any call to this function overwrites the values set through - * earlier calls to mbedtls_ssl_conf_ca_chain() or - * mbedtls_ssl_conf_ca_cb(). - * - * \note This API is incompatible with CA indication in - * CertificateRequest messages: A server-side SSL context which - * is bound to an SSL configuration that uses a CA callback - * configured via mbedtls_ssl_conf_ca_cb(), and which requires - * client authentication, will send an empty CA list in the - * corresponding CertificateRequest message. - * - * \note This API is incompatible with mbedtls_ssl_set_hs_ca_chain(): - * If an SSL context is bound to an SSL configuration which uses - * CA callbacks configured via mbedtls_ssl_conf_ca_cb(), then - * calls to mbedtls_ssl_set_hs_ca_chain() have no effect. - * - * \note The use of this API disables the use of restartable ECC - * during X.509 CRT signature verification (but doesn't affect - * other uses). - * - * \warning This API is incompatible with the use of CRLs. Any call to - * mbedtls_ssl_conf_ca_cb() unsets CRLs configured through - * earlier calls to mbedtls_ssl_conf_ca_chain(). - * - * \warning In multi-threaded environments, the callback \p f_ca_cb - * must be thread-safe, and it is the user's responsibility - * to guarantee this (for example through a mutex - * contained in the callback context pointed to by \p p_ca_cb). - */ -void mbedtls_ssl_conf_ca_cb( mbedtls_ssl_config *conf, - mbedtls_x509_crt_ca_cb_t f_ca_cb, - void *p_ca_cb ); -#endif /* MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK */ - -/** - * \brief Set own certificate chain and private key - * - * \note own_cert should contain in order from the bottom up your - * certificate chain. The top certificate (self-signed) - * can be omitted. - * - * \note On server, this function can be called multiple times to - * provision more than one cert/key pair (eg one ECDSA, one - * RSA with SHA-256, one RSA with SHA-1). An adequate - * certificate will be selected according to the client's - * advertised capabilities. In case multiple certificates are - * adequate, preference is given to the one set by the first - * call to this function, then second, etc. - * - * \note On client, only the first call has any effect. That is, - * only one client certificate can be provisioned. The - * server's preferences in its CertficateRequest message will - * be ignored and our only cert will be sent regardless of - * whether it matches those preferences - the server can then - * decide what it wants to do with it. - * - * \note The provided \p pk_key needs to match the public key in the - * first certificate in \p own_cert, or all handshakes using - * that certificate will fail. It is your responsibility - * to ensure that; this function will not perform any check. - * You may use mbedtls_pk_check_pair() in order to perform - * this check yourself, but be aware that this function can - * be computationally expensive on some key types. - * - * \param conf SSL configuration - * \param own_cert own public certificate chain - * \param pk_key own private key - * - * \return 0 on success or MBEDTLS_ERR_SSL_ALLOC_FAILED - */ -int mbedtls_ssl_conf_own_cert( mbedtls_ssl_config *conf, - mbedtls_x509_crt *own_cert, - mbedtls_pk_context *pk_key ); -#endif /* MBEDTLS_X509_CRT_PARSE_C */ - -#if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED) -/** - * \brief Configure a pre-shared key (PSK) and identity - * to be used in PSK-based ciphersuites. - * - * \note This is mainly useful for clients. Servers will usually - * want to use \c mbedtls_ssl_conf_psk_cb() instead. - * - * \note A PSK set by \c mbedtls_ssl_set_hs_psk() in the PSK callback - * takes precedence over a PSK configured by this function. - * - * \warning Currently, clients can only register a single pre-shared key. - * Calling this function or mbedtls_ssl_conf_psk_opaque() more - * than once will overwrite values configured in previous calls. - * Support for setting multiple PSKs on clients and selecting - * one based on the identity hint is not a planned feature, - * but feedback is welcomed. - * - * \param conf The SSL configuration to register the PSK with. - * \param psk The pointer to the pre-shared key to use. - * \param psk_len The length of the pre-shared key in bytes. - * \param psk_identity The pointer to the pre-shared key identity. - * \param psk_identity_len The length of the pre-shared key identity - * in bytes. - * - * \note The PSK and its identity are copied internally and - * hence need not be preserved by the caller for the lifetime - * of the SSL configuration. - * - * \return \c 0 if successful. - * \return An \c MBEDTLS_ERR_SSL_XXX error code on failure. - */ -int mbedtls_ssl_conf_psk( mbedtls_ssl_config *conf, - const unsigned char *psk, size_t psk_len, - const unsigned char *psk_identity, size_t psk_identity_len ); - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -/** - * \brief Configure an opaque pre-shared key (PSK) and identity - * to be used in PSK-based ciphersuites. - * - * \note This is mainly useful for clients. Servers will usually - * want to use \c mbedtls_ssl_conf_psk_cb() instead. - * - * \note An opaque PSK set by \c mbedtls_ssl_set_hs_psk_opaque() in - * the PSK callback takes precedence over an opaque PSK - * configured by this function. - * - * \warning Currently, clients can only register a single pre-shared key. - * Calling this function or mbedtls_ssl_conf_psk() more than - * once will overwrite values configured in previous calls. - * Support for setting multiple PSKs on clients and selecting - * one based on the identity hint is not a planned feature, - * but feedback is welcomed. - * - * \param conf The SSL configuration to register the PSK with. - * \param psk The identifier of the key slot holding the PSK. - * Until \p conf is destroyed or this function is successfully - * called again, the key slot \p psk must be populated with a - * key of type PSA_ALG_CATEGORY_KEY_DERIVATION whose policy - * allows its use for the key derivation algorithm applied - * in the handshake. - * \param psk_identity The pointer to the pre-shared key identity. - * \param psk_identity_len The length of the pre-shared key identity - * in bytes. - * - * \note The PSK identity hint is copied internally and hence need - * not be preserved by the caller for the lifetime of the - * SSL configuration. - * - * \return \c 0 if successful. - * \return An \c MBEDTLS_ERR_SSL_XXX error code on failure. - */ -int mbedtls_ssl_conf_psk_opaque( mbedtls_ssl_config *conf, - psa_key_id_t psk, - const unsigned char *psk_identity, - size_t psk_identity_len ); -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - -/** - * \brief Set the pre-shared Key (PSK) for the current handshake. - * - * \note This should only be called inside the PSK callback, - * i.e. the function passed to \c mbedtls_ssl_conf_psk_cb(). - * - * \note A PSK set by this function takes precedence over a PSK - * configured by \c mbedtls_ssl_conf_psk(). - * - * \param ssl The SSL context to configure a PSK for. - * \param psk The pointer to the pre-shared key. - * \param psk_len The length of the pre-shared key in bytes. - * - * \return \c 0 if successful. - * \return An \c MBEDTLS_ERR_SSL_XXX error code on failure. - */ -int mbedtls_ssl_set_hs_psk( mbedtls_ssl_context *ssl, - const unsigned char *psk, size_t psk_len ); - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -/** - * \brief Set an opaque pre-shared Key (PSK) for the current handshake. - * - * \note This should only be called inside the PSK callback, - * i.e. the function passed to \c mbedtls_ssl_conf_psk_cb(). - * - * \note An opaque PSK set by this function takes precedence over an - * opaque PSK configured by \c mbedtls_ssl_conf_psk_opaque(). - * - * \param ssl The SSL context to configure a PSK for. - * \param psk The identifier of the key slot holding the PSK. - * For the duration of the current handshake, the key slot - * must be populated with a key of type - * PSA_ALG_CATEGORY_KEY_DERIVATION whose policy allows its - * use for the key derivation algorithm - * applied in the handshake. - * - * \return \c 0 if successful. - * \return An \c MBEDTLS_ERR_SSL_XXX error code on failure. - */ -int mbedtls_ssl_set_hs_psk_opaque( mbedtls_ssl_context *ssl, - psa_key_id_t psk ); -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - -/** - * \brief Set the PSK callback (server-side only). - * - * If set, the PSK callback is called for each - * handshake where a PSK-based ciphersuite was negotiated. - * The caller provides the identity received and wants to - * receive the actual PSK data and length. - * - * The callback has the following parameters: - * - \c void*: The opaque pointer \p p_psk. - * - \c mbedtls_ssl_context*: The SSL context to which - * the operation applies. - * - \c const unsigned char*: The PSK identity - * selected by the client. - * - \c size_t: The length of the PSK identity - * selected by the client. - * - * If a valid PSK identity is found, the callback should use - * \c mbedtls_ssl_set_hs_psk() or - * \c mbedtls_ssl_set_hs_psk_opaque() - * on the SSL context to set the correct PSK and return \c 0. - * Any other return value will result in a denied PSK identity. - * - * \note A dynamic PSK (i.e. set by the PSK callback) takes - * precedence over a static PSK (i.e. set by - * \c mbedtls_ssl_conf_psk() or - * \c mbedtls_ssl_conf_psk_opaque()). - * This means that if you set a PSK callback using this - * function, you don't need to set a PSK using - * \c mbedtls_ssl_conf_psk() or - * \c mbedtls_ssl_conf_psk_opaque()). - * - * \param conf The SSL configuration to register the callback with. - * \param f_psk The callback for selecting and setting the PSK based - * in the PSK identity chosen by the client. - * \param p_psk A pointer to an opaque structure to be passed to - * the callback, for example a PSK store. - */ -void mbedtls_ssl_conf_psk_cb( mbedtls_ssl_config *conf, - int (*f_psk)(void *, mbedtls_ssl_context *, const unsigned char *, - size_t), - void *p_psk ); -#endif /* MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED */ - -#if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_SRV_C) - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) - -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif - -/** - * \brief Set the Diffie-Hellman public P and G values, - * read as hexadecimal strings (server-side only) - * (Default values: MBEDTLS_DHM_RFC3526_MODP_2048_[PG]) - * - * \param conf SSL configuration - * \param dhm_P Diffie-Hellman-Merkle modulus - * \param dhm_G Diffie-Hellman-Merkle generator - * - * \deprecated Superseded by \c mbedtls_ssl_conf_dh_param_bin. - * - * \return 0 if successful - */ -MBEDTLS_DEPRECATED int mbedtls_ssl_conf_dh_param( mbedtls_ssl_config *conf, - const char *dhm_P, - const char *dhm_G ); - -#endif /* MBEDTLS_DEPRECATED_REMOVED */ - -/** - * \brief Set the Diffie-Hellman public P and G values - * from big-endian binary presentations. - * (Default values: MBEDTLS_DHM_RFC3526_MODP_2048_[PG]_BIN) - * - * \param conf SSL configuration - * \param dhm_P Diffie-Hellman-Merkle modulus in big-endian binary form - * \param P_len Length of DHM modulus - * \param dhm_G Diffie-Hellman-Merkle generator in big-endian binary form - * \param G_len Length of DHM generator - * - * \return 0 if successful - */ -int mbedtls_ssl_conf_dh_param_bin( mbedtls_ssl_config *conf, - const unsigned char *dhm_P, size_t P_len, - const unsigned char *dhm_G, size_t G_len ); - -/** - * \brief Set the Diffie-Hellman public P and G values, - * read from existing context (server-side only) - * - * \param conf SSL configuration - * \param dhm_ctx Diffie-Hellman-Merkle context - * - * \return 0 if successful - */ -int mbedtls_ssl_conf_dh_param_ctx( mbedtls_ssl_config *conf, mbedtls_dhm_context *dhm_ctx ); -#endif /* MBEDTLS_DHM_C && defined(MBEDTLS_SSL_SRV_C) */ - -#if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_CLI_C) -/** - * \brief Set the minimum length for Diffie-Hellman parameters. - * (Client-side only.) - * (Default: 1024 bits.) - * - * \param conf SSL configuration - * \param bitlen Minimum bit length of the DHM prime - */ -void mbedtls_ssl_conf_dhm_min_bitlen( mbedtls_ssl_config *conf, - unsigned int bitlen ); -#endif /* MBEDTLS_DHM_C && MBEDTLS_SSL_CLI_C */ - -#if defined(MBEDTLS_ECP_C) -/** - * \brief Set the allowed curves in order of preference. - * (Default: all defined curves.) - * - * On server: this only affects selection of the ECDHE curve; - * the curves used for ECDH and ECDSA are determined by the - * list of available certificates instead. - * - * On client: this affects the list of curves offered for any - * use. The server can override our preference order. - * - * Both sides: limits the set of curves accepted for use in - * ECDHE and in the peer's end-entity certificate. - * - * \note This has no influence on which curves are allowed inside the - * certificate chains, see \c mbedtls_ssl_conf_cert_profile() - * for that. For the end-entity certificate however, the key - * will be accepted only if it is allowed both by this list - * and by the cert profile. - * - * \note This list should be ordered by decreasing preference - * (preferred curve first). - * - * \param conf SSL configuration - * \param curves Ordered list of allowed curves, - * terminated by MBEDTLS_ECP_DP_NONE. - */ -void mbedtls_ssl_conf_curves( mbedtls_ssl_config *conf, - const mbedtls_ecp_group_id *curves ); -#endif /* MBEDTLS_ECP_C */ - -#if defined(MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED) -/** - * \brief Set the allowed hashes for signatures during the handshake. - * (Default: all available hashes except MD5.) - * - * \note This only affects which hashes are offered and can be used - * for signatures during the handshake. Hashes for message - * authentication and the TLS PRF are controlled by the - * ciphersuite, see \c mbedtls_ssl_conf_ciphersuites(). Hashes - * used for certificate signature are controlled by the - * verification profile, see \c mbedtls_ssl_conf_cert_profile(). - * - * \note This list should be ordered by decreasing preference - * (preferred hash first). - * - * \param conf SSL configuration - * \param hashes Ordered list of allowed signature hashes, - * terminated by \c MBEDTLS_MD_NONE. - */ -void mbedtls_ssl_conf_sig_hashes( mbedtls_ssl_config *conf, - const int *hashes ); -#endif /* MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED */ - -#if defined(MBEDTLS_X509_CRT_PARSE_C) -/** - * \brief Set or reset the hostname to check against the received - * server certificate. It sets the ServerName TLS extension, - * too, if that extension is enabled. (client-side only) - * - * \param ssl SSL context - * \param hostname the server hostname, may be NULL to clear hostname - - * \note Maximum hostname length MBEDTLS_SSL_MAX_HOST_NAME_LEN. - * - * \return 0 if successful, MBEDTLS_ERR_SSL_ALLOC_FAILED on - * allocation failure, MBEDTLS_ERR_SSL_BAD_INPUT_DATA on - * too long input hostname. - * - * Hostname set to the one provided on success (cleared - * when NULL). On allocation failure hostname is cleared. - * On too long input failure, old hostname is unchanged. - */ -int mbedtls_ssl_set_hostname( mbedtls_ssl_context *ssl, const char *hostname ); -#endif /* MBEDTLS_X509_CRT_PARSE_C */ - -#if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) -/** - * \brief Set own certificate and key for the current handshake - * - * \note Same as \c mbedtls_ssl_conf_own_cert() but for use within - * the SNI callback. - * - * \param ssl SSL context - * \param own_cert own public certificate chain - * \param pk_key own private key - * - * \return 0 on success or MBEDTLS_ERR_SSL_ALLOC_FAILED - */ -int mbedtls_ssl_set_hs_own_cert( mbedtls_ssl_context *ssl, - mbedtls_x509_crt *own_cert, - mbedtls_pk_context *pk_key ); - -/** - * \brief Set the data required to verify peer certificate for the - * current handshake - * - * \note Same as \c mbedtls_ssl_conf_ca_chain() but for use within - * the SNI callback. - * - * \param ssl SSL context - * \param ca_chain trusted CA chain (meaning all fully trusted top-level CAs) - * \param ca_crl trusted CA CRLs - */ -void mbedtls_ssl_set_hs_ca_chain( mbedtls_ssl_context *ssl, - mbedtls_x509_crt *ca_chain, - mbedtls_x509_crl *ca_crl ); - -/** - * \brief Set authmode for the current handshake. - * - * \note Same as \c mbedtls_ssl_conf_authmode() but for use within - * the SNI callback. - * - * \param ssl SSL context - * \param authmode MBEDTLS_SSL_VERIFY_NONE, MBEDTLS_SSL_VERIFY_OPTIONAL or - * MBEDTLS_SSL_VERIFY_REQUIRED - */ -void mbedtls_ssl_set_hs_authmode( mbedtls_ssl_context *ssl, - int authmode ); - -/** - * \brief Set server side ServerName TLS extension callback - * (optional, server-side only). - * - * If set, the ServerName callback is called whenever the - * server receives a ServerName TLS extension from the client - * during a handshake. The ServerName callback has the - * following parameters: (void *parameter, mbedtls_ssl_context *ssl, - * const unsigned char *hostname, size_t len). If a suitable - * certificate is found, the callback must set the - * certificate(s) and key(s) to use with \c - * mbedtls_ssl_set_hs_own_cert() (can be called repeatedly), - * and may optionally adjust the CA and associated CRL with \c - * mbedtls_ssl_set_hs_ca_chain() as well as the client - * authentication mode with \c mbedtls_ssl_set_hs_authmode(), - * then must return 0. If no matching name is found, the - * callback must either set a default cert, or - * return non-zero to abort the handshake at this point. - * - * \param conf SSL configuration - * \param f_sni verification function - * \param p_sni verification parameter - */ -void mbedtls_ssl_conf_sni( mbedtls_ssl_config *conf, - int (*f_sni)(void *, mbedtls_ssl_context *, const unsigned char *, - size_t), - void *p_sni ); -#endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION */ - -#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) -/** - * \brief Set the EC J-PAKE password for current handshake. - * - * \note An internal copy is made, and destroyed as soon as the - * handshake is completed, or when the SSL context is reset or - * freed. - * - * \note The SSL context needs to be already set up. The right place - * to call this function is between \c mbedtls_ssl_setup() or - * \c mbedtls_ssl_reset() and \c mbedtls_ssl_handshake(). - * - * \param ssl SSL context - * \param pw EC J-PAKE password (pre-shared secret) - * \param pw_len length of pw in bytes - * - * \return 0 on success, or a negative error code. - */ -int mbedtls_ssl_set_hs_ecjpake_password( mbedtls_ssl_context *ssl, - const unsigned char *pw, - size_t pw_len ); -#endif /*MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ - -#if defined(MBEDTLS_SSL_ALPN) -/** - * \brief Set the supported Application Layer Protocols. - * - * \param conf SSL configuration - * \param protos Pointer to a NULL-terminated list of supported protocols, - * in decreasing preference order. The pointer to the list is - * recorded by the library for later reference as required, so - * the lifetime of the table must be atleast as long as the - * lifetime of the SSL configuration structure. - * - * \return 0 on success, or MBEDTLS_ERR_SSL_BAD_INPUT_DATA. - */ -int mbedtls_ssl_conf_alpn_protocols( mbedtls_ssl_config *conf, const char **protos ); - -/** - * \brief Get the name of the negotiated Application Layer Protocol. - * This function should be called after the handshake is - * completed. - * - * \param ssl SSL context - * - * \return Protcol name, or NULL if no protocol was negotiated. - */ -const char *mbedtls_ssl_get_alpn_protocol( const mbedtls_ssl_context *ssl ); -#endif /* MBEDTLS_SSL_ALPN */ - -#if defined(MBEDTLS_SSL_DTLS_SRTP) -#if defined(MBEDTLS_DEBUG_C) -static inline const char *mbedtls_ssl_get_srtp_profile_as_string( mbedtls_ssl_srtp_profile profile ) -{ - switch( profile ) - { - case MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_80: - return( "MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_80" ); - case MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_32: - return( "MBEDTLS_TLS_SRTP_AES128_CM_HMAC_SHA1_32" ); - case MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_80: - return( "MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_80" ); - case MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_32: - return( "MBEDTLS_TLS_SRTP_NULL_HMAC_SHA1_32" ); - default: break; - } - return( "" ); -} -#endif /* MBEDTLS_DEBUG_C */ -/** - * \brief Manage support for mki(master key id) value - * in use_srtp extension. - * MKI is an optional part of SRTP used for key management - * and re-keying. See RFC3711 section 3.1 for details. - * The default value is - * #MBEDTLS_SSL_DTLS_SRTP_MKI_UNSUPPORTED. - * - * \param conf The SSL configuration to manage mki support. - * \param support_mki_value Enable or disable mki usage. Values are - * #MBEDTLS_SSL_DTLS_SRTP_MKI_UNSUPPORTED - * or #MBEDTLS_SSL_DTLS_SRTP_MKI_SUPPORTED. - */ -void mbedtls_ssl_conf_srtp_mki_value_supported( mbedtls_ssl_config *conf, - int support_mki_value ); - -/** - * \brief Set the supported DTLS-SRTP protection profiles. - * - * \param conf SSL configuration - * \param profiles Pointer to a List of MBEDTLS_TLS_SRTP_UNSET terminated - * supported protection profiles - * in decreasing preference order. - * The pointer to the list is recorded by the library - * for later reference as required, so the lifetime - * of the table must be at least as long as the lifetime - * of the SSL configuration structure. - * The list must not hold more than - * MBEDTLS_TLS_SRTP_MAX_PROFILE_LIST_LENGTH elements - * (excluding the terminating MBEDTLS_TLS_SRTP_UNSET). - * - * \return 0 on success - * \return #MBEDTLS_ERR_SSL_BAD_INPUT_DATA when the list of - * protection profiles is incorrect. - */ -int mbedtls_ssl_conf_dtls_srtp_protection_profiles - ( mbedtls_ssl_config *conf, - const mbedtls_ssl_srtp_profile *profiles ); - -/** - * \brief Set the mki_value for the current DTLS-SRTP session. - * - * \param ssl SSL context to use. - * \param mki_value The MKI value to set. - * \param mki_len The length of the MKI value. - * - * \note This function is relevant on client side only. - * The server discovers the mki value during handshake. - * A mki value set on server side using this function - * is ignored. - * - * \return 0 on success - * \return #MBEDTLS_ERR_SSL_BAD_INPUT_DATA - * \return #MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE - */ -int mbedtls_ssl_dtls_srtp_set_mki_value( mbedtls_ssl_context *ssl, - unsigned char *mki_value, - uint16_t mki_len ); -/** - * \brief Get the negotiated DTLS-SRTP informations: - * Protection profile and MKI value. - * - * \warning This function must be called after the handshake is - * completed. The value returned by this function must - * not be trusted or acted upon before the handshake completes. - * - * \param ssl The SSL context to query. - * \param dtls_srtp_info The negotiated DTLS-SRTP informations: - * - Protection profile in use. - * A direct mapping of the iana defined value for protection - * profile on an uint16_t. - http://www.iana.org/assignments/srtp-protection/srtp-protection.xhtml - * #MBEDTLS_TLS_SRTP_UNSET if the use of SRTP was not negotiated - * or peer's Hello packet was not parsed yet. - * - mki size and value( if size is > 0 ). - */ -void mbedtls_ssl_get_dtls_srtp_negotiation_result( const mbedtls_ssl_context *ssl, - mbedtls_dtls_srtp_info *dtls_srtp_info ); -#endif /* MBEDTLS_SSL_DTLS_SRTP */ - -/** - * \brief Set the maximum supported version sent from the client side - * and/or accepted at the server side - * (Default: MBEDTLS_SSL_MAX_MAJOR_VERSION, MBEDTLS_SSL_MAX_MINOR_VERSION) - * - * \note This ignores ciphersuites from higher versions. - * - * \note With DTLS, use MBEDTLS_SSL_MINOR_VERSION_2 for DTLS 1.0 and - * MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2 - * - * \param conf SSL configuration - * \param major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 supported) - * \param minor Minor version number (MBEDTLS_SSL_MINOR_VERSION_0, - * MBEDTLS_SSL_MINOR_VERSION_1 and MBEDTLS_SSL_MINOR_VERSION_2, - * MBEDTLS_SSL_MINOR_VERSION_3 supported) - */ -void mbedtls_ssl_conf_max_version( mbedtls_ssl_config *conf, int major, int minor ); - -/** - * \brief Set the minimum accepted SSL/TLS protocol version - * (Default: TLS 1.0) - * - * \note Input outside of the SSL_MAX_XXXXX_VERSION and - * SSL_MIN_XXXXX_VERSION range is ignored. - * - * \note MBEDTLS_SSL_MINOR_VERSION_0 (SSL v3) should be avoided. - * - * \note With DTLS, use MBEDTLS_SSL_MINOR_VERSION_2 for DTLS 1.0 and - * MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2 - * - * \param conf SSL configuration - * \param major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 supported) - * \param minor Minor version number (MBEDTLS_SSL_MINOR_VERSION_0, - * MBEDTLS_SSL_MINOR_VERSION_1 and MBEDTLS_SSL_MINOR_VERSION_2, - * MBEDTLS_SSL_MINOR_VERSION_3 supported) - */ -void mbedtls_ssl_conf_min_version( mbedtls_ssl_config *conf, int major, int minor ); - -#if defined(MBEDTLS_SSL_FALLBACK_SCSV) && defined(MBEDTLS_SSL_CLI_C) -/** - * \brief Set the fallback flag (client-side only). - * (Default: MBEDTLS_SSL_IS_NOT_FALLBACK). - * - * \note Set to MBEDTLS_SSL_IS_FALLBACK when preparing a fallback - * connection, that is a connection with max_version set to a - * lower value than the value you're willing to use. Such - * fallback connections are not recommended but are sometimes - * necessary to interoperate with buggy (version-intolerant) - * servers. - * - * \warning You should NOT set this to MBEDTLS_SSL_IS_FALLBACK for - * non-fallback connections! This would appear to work for a - * while, then cause failures when the server is upgraded to - * support a newer TLS version. - * - * \param conf SSL configuration - * \param fallback MBEDTLS_SSL_IS_NOT_FALLBACK or MBEDTLS_SSL_IS_FALLBACK - */ -void mbedtls_ssl_conf_fallback( mbedtls_ssl_config *conf, char fallback ); -#endif /* MBEDTLS_SSL_FALLBACK_SCSV && MBEDTLS_SSL_CLI_C */ - -#if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) -/** - * \brief Enable or disable Encrypt-then-MAC - * (Default: MBEDTLS_SSL_ETM_ENABLED) - * - * \note This should always be enabled, it is a security - * improvement, and should not cause any interoperability - * issue (used only if the peer supports it too). - * - * \param conf SSL configuration - * \param etm MBEDTLS_SSL_ETM_ENABLED or MBEDTLS_SSL_ETM_DISABLED - */ -void mbedtls_ssl_conf_encrypt_then_mac( mbedtls_ssl_config *conf, char etm ); -#endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ - -#if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) -/** - * \brief Enable or disable Extended Master Secret negotiation. - * (Default: MBEDTLS_SSL_EXTENDED_MS_ENABLED) - * - * \note This should always be enabled, it is a security fix to the - * protocol, and should not cause any interoperability issue - * (used only if the peer supports it too). - * - * \param conf SSL configuration - * \param ems MBEDTLS_SSL_EXTENDED_MS_ENABLED or MBEDTLS_SSL_EXTENDED_MS_DISABLED - */ -void mbedtls_ssl_conf_extended_master_secret( mbedtls_ssl_config *conf, char ems ); -#endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */ - -#if defined(MBEDTLS_ARC4_C) -/** - * \brief Disable or enable support for RC4 - * (Default: MBEDTLS_SSL_ARC4_DISABLED) - * - * \warning Use of RC4 in DTLS/TLS has been prohibited by RFC 7465 - * for security reasons. Use at your own risk. - * - * \note This function is deprecated and will be removed in - * a future version of the library. - * RC4 is disabled by default at compile time and needs to be - * actively enabled for use with legacy systems. - * - * \param conf SSL configuration - * \param arc4 MBEDTLS_SSL_ARC4_ENABLED or MBEDTLS_SSL_ARC4_DISABLED - */ -void mbedtls_ssl_conf_arc4_support( mbedtls_ssl_config *conf, char arc4 ); -#endif /* MBEDTLS_ARC4_C */ - -#if defined(MBEDTLS_SSL_SRV_C) -/** - * \brief Whether to send a list of acceptable CAs in - * CertificateRequest messages. - * (Default: do send) - * - * \param conf SSL configuration - * \param cert_req_ca_list MBEDTLS_SSL_CERT_REQ_CA_LIST_ENABLED or - * MBEDTLS_SSL_CERT_REQ_CA_LIST_DISABLED - */ -void mbedtls_ssl_conf_cert_req_ca_list( mbedtls_ssl_config *conf, - char cert_req_ca_list ); -#endif /* MBEDTLS_SSL_SRV_C */ - -#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) -/** - * \brief Set the maximum fragment length to emit and/or negotiate. - * (Typical: the smaller of #MBEDTLS_SSL_IN_CONTENT_LEN and - * #MBEDTLS_SSL_OUT_CONTENT_LEN, usually `2^14` bytes) - * (Server: set maximum fragment length to emit, - * usually negotiated by the client during handshake) - * (Client: set maximum fragment length to emit *and* - * negotiate with the server during handshake) - * (Default: #MBEDTLS_SSL_MAX_FRAG_LEN_NONE) - * - * \note On the client side, the maximum fragment length extension - * *will not* be used, unless the maximum fragment length has - * been set via this function to a value different than - * #MBEDTLS_SSL_MAX_FRAG_LEN_NONE. - * - * \note With TLS, this currently only affects ApplicationData (sent - * with \c mbedtls_ssl_read()), not handshake messages. - * With DTLS, this affects both ApplicationData and handshake. - * - * \note This sets the maximum length for a record's payload, - * excluding record overhead that will be added to it, see - * \c mbedtls_ssl_get_record_expansion(). - * - * \note For DTLS, it is also possible to set a limit for the total - * size of daragrams passed to the transport layer, including - * record overhead, see \c mbedtls_ssl_set_mtu(). - * - * \param conf SSL configuration - * \param mfl_code Code for maximum fragment length (allowed values: - * MBEDTLS_SSL_MAX_FRAG_LEN_512, MBEDTLS_SSL_MAX_FRAG_LEN_1024, - * MBEDTLS_SSL_MAX_FRAG_LEN_2048, MBEDTLS_SSL_MAX_FRAG_LEN_4096) - * - * \return 0 if successful or MBEDTLS_ERR_SSL_BAD_INPUT_DATA - */ -int mbedtls_ssl_conf_max_frag_len( mbedtls_ssl_config *conf, unsigned char mfl_code ); -#endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ - -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) -/** - * \brief Activate negotiation of truncated HMAC - * (Default: MBEDTLS_SSL_TRUNC_HMAC_DISABLED) - * - * \param conf SSL configuration - * \param truncate Enable or disable (MBEDTLS_SSL_TRUNC_HMAC_ENABLED or - * MBEDTLS_SSL_TRUNC_HMAC_DISABLED) - */ -void mbedtls_ssl_conf_truncated_hmac( mbedtls_ssl_config *conf, int truncate ); -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ - -#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING) -/** - * \brief Enable / Disable 1/n-1 record splitting - * (Default: MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED) - * - * \note Only affects SSLv3 and TLS 1.0, not higher versions. - * Does not affect non-CBC ciphersuites in any version. - * - * \param conf SSL configuration - * \param split MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED or - * MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED - */ -void mbedtls_ssl_conf_cbc_record_splitting( mbedtls_ssl_config *conf, char split ); -#endif /* MBEDTLS_SSL_CBC_RECORD_SPLITTING */ - -#if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C) -/** - * \brief Enable / Disable session tickets (client only). - * (Default: MBEDTLS_SSL_SESSION_TICKETS_ENABLED.) - * - * \note On server, use \c mbedtls_ssl_conf_session_tickets_cb(). - * - * \param conf SSL configuration - * \param use_tickets Enable or disable (MBEDTLS_SSL_SESSION_TICKETS_ENABLED or - * MBEDTLS_SSL_SESSION_TICKETS_DISABLED) - */ -void mbedtls_ssl_conf_session_tickets( mbedtls_ssl_config *conf, int use_tickets ); -#endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_CLI_C */ - -#if defined(MBEDTLS_SSL_RENEGOTIATION) -/** - * \brief Enable / Disable renegotiation support for connection when - * initiated by peer - * (Default: MBEDTLS_SSL_RENEGOTIATION_DISABLED) - * - * \warning It is recommended to always disable renegotation unless you - * know you need it and you know what you're doing. In the - * past, there have been several issues associated with - * renegotiation or a poor understanding of its properties. - * - * \note Server-side, enabling renegotiation also makes the server - * susceptible to a resource DoS by a malicious client. - * - * \param conf SSL configuration - * \param renegotiation Enable or disable (MBEDTLS_SSL_RENEGOTIATION_ENABLED or - * MBEDTLS_SSL_RENEGOTIATION_DISABLED) - */ -void mbedtls_ssl_conf_renegotiation( mbedtls_ssl_config *conf, int renegotiation ); -#endif /* MBEDTLS_SSL_RENEGOTIATION */ - -/** - * \brief Prevent or allow legacy renegotiation. - * (Default: MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION) - * - * MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION allows connections to - * be established even if the peer does not support - * secure renegotiation, but does not allow renegotiation - * to take place if not secure. - * (Interoperable and secure option) - * - * MBEDTLS_SSL_LEGACY_ALLOW_RENEGOTIATION allows renegotiations - * with non-upgraded peers. Allowing legacy renegotiation - * makes the connection vulnerable to specific man in the - * middle attacks. (See RFC 5746) - * (Most interoperable and least secure option) - * - * MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE breaks off connections - * if peer does not support secure renegotiation. Results - * in interoperability issues with non-upgraded peers - * that do not support renegotiation altogether. - * (Most secure option, interoperability issues) - * - * \param conf SSL configuration - * \param allow_legacy Prevent or allow (SSL_NO_LEGACY_RENEGOTIATION, - * SSL_ALLOW_LEGACY_RENEGOTIATION or - * MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE) - */ -void mbedtls_ssl_conf_legacy_renegotiation( mbedtls_ssl_config *conf, int allow_legacy ); - -#if defined(MBEDTLS_SSL_RENEGOTIATION) -/** - * \brief Enforce renegotiation requests. - * (Default: enforced, max_records = 16) - * - * When we request a renegotiation, the peer can comply or - * ignore the request. This function allows us to decide - * whether to enforce our renegotiation requests by closing - * the connection if the peer doesn't comply. - * - * However, records could already be in transit from the peer - * when the request is emitted. In order to increase - * reliability, we can accept a number of records before the - * expected handshake records. - * - * The optimal value is highly dependent on the specific usage - * scenario. - * - * \note With DTLS and server-initiated renegotiation, the - * HelloRequest is retransmited every time mbedtls_ssl_read() times - * out or receives Application Data, until: - * - max_records records have beens seen, if it is >= 0, or - * - the number of retransmits that would happen during an - * actual handshake has been reached. - * Please remember the request might be lost a few times - * if you consider setting max_records to a really low value. - * - * \warning On client, the grace period can only happen during - * mbedtls_ssl_read(), as opposed to mbedtls_ssl_write() and mbedtls_ssl_renegotiate() - * which always behave as if max_record was 0. The reason is, - * if we receive application data from the server, we need a - * place to write it, which only happens during mbedtls_ssl_read(). - * - * \param conf SSL configuration - * \param max_records Use MBEDTLS_SSL_RENEGOTIATION_NOT_ENFORCED if you don't want to - * enforce renegotiation, or a non-negative value to enforce - * it but allow for a grace period of max_records records. - */ -void mbedtls_ssl_conf_renegotiation_enforced( mbedtls_ssl_config *conf, int max_records ); - -/** - * \brief Set record counter threshold for periodic renegotiation. - * (Default: 2^48 - 1) - * - * Renegotiation is automatically triggered when a record - * counter (outgoing or incoming) crosses the defined - * threshold. The default value is meant to prevent the - * connection from being closed when the counter is about to - * reached its maximal value (it is not allowed to wrap). - * - * Lower values can be used to enforce policies such as "keys - * must be refreshed every N packets with cipher X". - * - * The renegotiation period can be disabled by setting - * conf->disable_renegotiation to - * MBEDTLS_SSL_RENEGOTIATION_DISABLED. - * - * \note When the configured transport is - * MBEDTLS_SSL_TRANSPORT_DATAGRAM the maximum renegotiation - * period is 2^48 - 1, and for MBEDTLS_SSL_TRANSPORT_STREAM, - * the maximum renegotiation period is 2^64 - 1. - * - * \param conf SSL configuration - * \param period The threshold value: a big-endian 64-bit number. - */ -void mbedtls_ssl_conf_renegotiation_period( mbedtls_ssl_config *conf, - const unsigned char period[8] ); -#endif /* MBEDTLS_SSL_RENEGOTIATION */ - -/** - * \brief Check if there is data already read from the - * underlying transport but not yet processed. - * - * \param ssl SSL context - * - * \return 0 if nothing's pending, 1 otherwise. - * - * \note This is different in purpose and behaviour from - * \c mbedtls_ssl_get_bytes_avail in that it considers - * any kind of unprocessed data, not only unread - * application data. If \c mbedtls_ssl_get_bytes - * returns a non-zero value, this function will - * also signal pending data, but the converse does - * not hold. For example, in DTLS there might be - * further records waiting to be processed from - * the current underlying transport's datagram. - * - * \note If this function returns 1 (data pending), this - * does not imply that a subsequent call to - * \c mbedtls_ssl_read will provide any data; - * e.g., the unprocessed data might turn out - * to be an alert or a handshake message. - * - * \note This function is useful in the following situation: - * If the SSL/TLS module successfully returns from an - * operation - e.g. a handshake or an application record - * read - and you're awaiting incoming data next, you - * must not immediately idle on the underlying transport - * to have data ready, but you need to check the value - * of this function first. The reason is that the desired - * data might already be read but not yet processed. - * If, in contrast, a previous call to the SSL/TLS module - * returned MBEDTLS_ERR_SSL_WANT_READ, it is not necessary - * to call this function, as the latter error code entails - * that all internal data has been processed. - * - */ -int mbedtls_ssl_check_pending( const mbedtls_ssl_context *ssl ); - -/** - * \brief Return the number of application data bytes - * remaining to be read from the current record. - * - * \param ssl SSL context - * - * \return How many bytes are available in the application - * data record read buffer. - * - * \note When working over a datagram transport, this is - * useful to detect the current datagram's boundary - * in case \c mbedtls_ssl_read has written the maximal - * amount of data fitting into the input buffer. - * - */ -size_t mbedtls_ssl_get_bytes_avail( const mbedtls_ssl_context *ssl ); - -/** - * \brief Return the result of the certificate verification - * - * \param ssl The SSL context to use. - * - * \return \c 0 if the certificate verification was successful. - * \return \c -1u if the result is not available. This may happen - * e.g. if the handshake aborts early, or a verification - * callback returned a fatal error. - * \return A bitwise combination of \c MBEDTLS_X509_BADCERT_XXX - * and \c MBEDTLS_X509_BADCRL_XXX failure flags; see x509.h. - */ -uint32_t mbedtls_ssl_get_verify_result( const mbedtls_ssl_context *ssl ); - -/** - * \brief Return the name of the current ciphersuite - * - * \param ssl SSL context - * - * \return a string containing the ciphersuite name - */ -const char *mbedtls_ssl_get_ciphersuite( const mbedtls_ssl_context *ssl ); - -/** - * \brief Return the current SSL version (SSLv3/TLSv1/etc) - * - * \param ssl SSL context - * - * \return a string containing the SSL version - */ -const char *mbedtls_ssl_get_version( const mbedtls_ssl_context *ssl ); - -/** - * \brief Return the (maximum) number of bytes added by the record - * layer: header + encryption/MAC overhead (inc. padding) - * - * \note This function is not available (always returns an error) - * when record compression is enabled. - * - * \param ssl SSL context - * - * \return Current maximum record expansion in bytes, or - * MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE if compression is - * enabled, which makes expansion much less predictable - */ -int mbedtls_ssl_get_record_expansion( const mbedtls_ssl_context *ssl ); - -#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) -/** - * \brief Return the maximum fragment length (payload, in bytes) for - * the output buffer. For the client, this is the configured - * value. For the server, it is the minimum of two - the - * configured value and the negotiated one. - * - * \sa mbedtls_ssl_conf_max_frag_len() - * \sa mbedtls_ssl_get_max_record_payload() - * - * \param ssl SSL context - * - * \return Current maximum fragment length for the output buffer. - */ -size_t mbedtls_ssl_get_output_max_frag_len( const mbedtls_ssl_context *ssl ); - -/** - * \brief Return the maximum fragment length (payload, in bytes) for - * the input buffer. This is the negotiated maximum fragment - * length, or, if there is none, MBEDTLS_SSL_MAX_CONTENT_LEN. - * If it is not defined either, the value is 2^14. This function - * works as its predecessor, \c mbedtls_ssl_get_max_frag_len(). - * - * \sa mbedtls_ssl_conf_max_frag_len() - * \sa mbedtls_ssl_get_max_record_payload() - * - * \param ssl SSL context - * - * \return Current maximum fragment length for the output buffer. - */ -size_t mbedtls_ssl_get_input_max_frag_len( const mbedtls_ssl_context *ssl ); - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) - -#if defined(MBEDTLS_DEPRECATED_WARNING) -#define MBEDTLS_DEPRECATED __attribute__((deprecated)) -#else -#define MBEDTLS_DEPRECATED -#endif - -/** - * \brief This function is a deprecated approach to getting the max - * fragment length. Its an alias for - * \c mbedtls_ssl_get_output_max_frag_len(), as the behaviour - * is the same. See \c mbedtls_ssl_get_output_max_frag_len() for - * more detail. - * - * \sa mbedtls_ssl_get_input_max_frag_len() - * \sa mbedtls_ssl_get_output_max_frag_len() - * - * \param ssl SSL context - * - * \return Current maximum fragment length for the output buffer. - */ -MBEDTLS_DEPRECATED size_t mbedtls_ssl_get_max_frag_len( - const mbedtls_ssl_context *ssl ); -#endif /* MBEDTLS_DEPRECATED_REMOVED */ -#endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ - -/** - * \brief Return the current maximum outgoing record payload in bytes. - * This takes into account the config.h setting \c - * MBEDTLS_SSL_OUT_CONTENT_LEN, the configured and negotiated - * max fragment length extension if used, and for DTLS the - * path MTU as configured and current record expansion. - * - * \note With DTLS, \c mbedtls_ssl_write() will return an error if - * called with a larger length value. - * With TLS, \c mbedtls_ssl_write() will fragment the input if - * necessary and return the number of bytes written; it is up - * to the caller to call \c mbedtls_ssl_write() again in - * order to send the remaining bytes if any. - * - * \note This function is not available (always returns an error) - * when record compression is enabled. - * - * \sa mbedtls_ssl_set_mtu() - * \sa mbedtls_ssl_get_output_max_frag_len() - * \sa mbedtls_ssl_get_input_max_frag_len() - * \sa mbedtls_ssl_get_record_expansion() - * - * \param ssl SSL context - * - * \return Current maximum payload for an outgoing record, - * or a negative error code. - */ -int mbedtls_ssl_get_max_out_record_payload( const mbedtls_ssl_context *ssl ); - -#if defined(MBEDTLS_X509_CRT_PARSE_C) -/** - * \brief Return the peer certificate from the current connection. - * - * \param ssl The SSL context to use. This must be initialized and setup. - * - * \return The current peer certificate, if available. - * The returned certificate is owned by the SSL context and - * is valid only until the next call to the SSL API. - * \return \c NULL if no peer certificate is available. This might - * be because the chosen ciphersuite doesn't use CRTs - * (PSK-based ciphersuites, for example), or because - * #MBEDTLS_SSL_KEEP_PEER_CERTIFICATE has been disabled, - * allowing the stack to free the peer's CRT to save memory. - * - * \note For one-time inspection of the peer's certificate during - * the handshake, consider registering an X.509 CRT verification - * callback through mbedtls_ssl_conf_verify() instead of calling - * this function. Using mbedtls_ssl_conf_verify() also comes at - * the benefit of allowing you to influence the verification - * process, for example by masking expected and tolerated - * verification failures. - * - * \warning You must not use the pointer returned by this function - * after any further call to the SSL API, including - * mbedtls_ssl_read() and mbedtls_ssl_write(); this is - * because the pointer might change during renegotiation, - * which happens transparently to the user. - * If you want to use the certificate across API calls, - * you must make a copy. - */ -const mbedtls_x509_crt *mbedtls_ssl_get_peer_cert( const mbedtls_ssl_context *ssl ); -#endif /* MBEDTLS_X509_CRT_PARSE_C */ - -#if defined(MBEDTLS_SSL_CLI_C) -/** - * \brief Save session in order to resume it later (client-side only) - * Session data is copied to presented session structure. - * - * - * \param ssl SSL context - * \param session session context - * - * \return 0 if successful, - * MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed, - * MBEDTLS_ERR_SSL_BAD_INPUT_DATA if used server-side or - * arguments are otherwise invalid. - * - * \note Only the server certificate is copied, and not the full chain, - * so you should not attempt to validate the certificate again - * by calling \c mbedtls_x509_crt_verify() on it. - * Instead, you should use the results from the verification - * in the original handshake by calling \c mbedtls_ssl_get_verify_result() - * after loading the session again into a new SSL context - * using \c mbedtls_ssl_set_session(). - * - * \note Once the session object is not needed anymore, you should - * free it by calling \c mbedtls_ssl_session_free(). - * - * \sa mbedtls_ssl_set_session() - */ -int mbedtls_ssl_get_session( const mbedtls_ssl_context *ssl, mbedtls_ssl_session *session ); -#endif /* MBEDTLS_SSL_CLI_C */ - -/** - * \brief Perform the SSL handshake - * - * \param ssl SSL context - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_SSL_WANT_READ or #MBEDTLS_ERR_SSL_WANT_WRITE - * if the handshake is incomplete and waiting for data to - * be available for reading from or writing to the underlying - * transport - in this case you must call this function again - * when the underlying transport is ready for the operation. - * \return #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS if an asynchronous - * operation is in progress (see - * mbedtls_ssl_conf_async_private_cb()) - in this case you - * must call this function again when the operation is ready. - * \return #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS if a cryptographic - * operation is in progress (see mbedtls_ecp_set_max_ops()) - - * in this case you must call this function again to complete - * the handshake when you're done attending other tasks. - * \return #MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED if DTLS is in use - * and the client did not demonstrate reachability yet - in - * this case you must stop using the context (see below). - * \return Another SSL error code - in this case you must stop using - * the context (see below). - * - * \warning If this function returns something other than - * \c 0, - * #MBEDTLS_ERR_SSL_WANT_READ, - * #MBEDTLS_ERR_SSL_WANT_WRITE, - * #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS or - * #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS, - * you must stop using the SSL context for reading or writing, - * and either free it or call \c mbedtls_ssl_session_reset() - * on it before re-using it for a new connection; the current - * connection must be closed. - * - * \note If DTLS is in use, then you may choose to handle - * #MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED specially for logging - * purposes, as it is an expected return value rather than an - * actual error, but you still need to reset/free the context. - * - * \note Remarks regarding event-driven DTLS: - * If the function returns #MBEDTLS_ERR_SSL_WANT_READ, no datagram - * from the underlying transport layer is currently being processed, - * and it is safe to idle until the timer or the underlying transport - * signal a new event. This is not true for a successful handshake, - * in which case the datagram of the underlying transport that is - * currently being processed might or might not contain further - * DTLS records. - */ -int mbedtls_ssl_handshake( mbedtls_ssl_context *ssl ); - -/** - * \brief Perform a single step of the SSL handshake - * - * \note The state of the context (ssl->state) will be at - * the next state after this function returns \c 0. Do not - * call this function if state is MBEDTLS_SSL_HANDSHAKE_OVER. - * - * \param ssl SSL context - * - * \return See mbedtls_ssl_handshake(). - * - * \warning If this function returns something other than \c 0, - * #MBEDTLS_ERR_SSL_WANT_READ, #MBEDTLS_ERR_SSL_WANT_WRITE, - * #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS or - * #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS, you must stop using - * the SSL context for reading or writing, and either free it - * or call \c mbedtls_ssl_session_reset() on it before - * re-using it for a new connection; the current connection - * must be closed. - */ -int mbedtls_ssl_handshake_step( mbedtls_ssl_context *ssl ); - -#if defined(MBEDTLS_SSL_RENEGOTIATION) -/** - * \brief Initiate an SSL renegotiation on the running connection. - * Client: perform the renegotiation right now. - * Server: request renegotiation, which will be performed - * during the next call to mbedtls_ssl_read() if honored by - * client. - * - * \param ssl SSL context - * - * \return 0 if successful, or any mbedtls_ssl_handshake() return - * value except #MBEDTLS_ERR_SSL_CLIENT_RECONNECT that can't - * happen during a renegotiation. - * - * \warning If this function returns something other than \c 0, - * #MBEDTLS_ERR_SSL_WANT_READ, #MBEDTLS_ERR_SSL_WANT_WRITE, - * #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS or - * #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS, you must stop using - * the SSL context for reading or writing, and either free it - * or call \c mbedtls_ssl_session_reset() on it before - * re-using it for a new connection; the current connection - * must be closed. - * - */ -int mbedtls_ssl_renegotiate( mbedtls_ssl_context *ssl ); -#endif /* MBEDTLS_SSL_RENEGOTIATION */ - -/** - * \brief Read at most 'len' application data bytes - * - * \param ssl SSL context - * \param buf buffer that will hold the data - * \param len maximum number of bytes to read - * - * \return The (positive) number of bytes read if successful. - * \return \c 0 if the read end of the underlying transport was closed - * without sending a CloseNotify beforehand, which might happen - * because of various reasons (internal error of an underlying - * stack, non-conformant peer not sending a CloseNotify and - * such) - in this case you must stop using the context - * (see below). - * \return #MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY if the underlying - * transport is still functional, but the peer has - * acknowledged to not send anything anymore. - * \return #MBEDTLS_ERR_SSL_WANT_READ or #MBEDTLS_ERR_SSL_WANT_WRITE - * if the handshake is incomplete and waiting for data to - * be available for reading from or writing to the underlying - * transport - in this case you must call this function again - * when the underlying transport is ready for the operation. - * \return #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS if an asynchronous - * operation is in progress (see - * mbedtls_ssl_conf_async_private_cb()) - in this case you - * must call this function again when the operation is ready. - * \return #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS if a cryptographic - * operation is in progress (see mbedtls_ecp_set_max_ops()) - - * in this case you must call this function again to complete - * the handshake when you're done attending other tasks. - * \return #MBEDTLS_ERR_SSL_CLIENT_RECONNECT if we're at the server - * side of a DTLS connection and the client is initiating a - * new connection using the same source port. See below. - * \return Another SSL error code - in this case you must stop using - * the context (see below). - * - * \warning If this function returns something other than - * a positive value, - * #MBEDTLS_ERR_SSL_WANT_READ, - * #MBEDTLS_ERR_SSL_WANT_WRITE, - * #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS, - * #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS or - * #MBEDTLS_ERR_SSL_CLIENT_RECONNECT, - * you must stop using the SSL context for reading or writing, - * and either free it or call \c mbedtls_ssl_session_reset() - * on it before re-using it for a new connection; the current - * connection must be closed. - * - * \note When this function returns #MBEDTLS_ERR_SSL_CLIENT_RECONNECT - * (which can only happen server-side), it means that a client - * is initiating a new connection using the same source port. - * You can either treat that as a connection close and wait - * for the client to resend a ClientHello, or directly - * continue with \c mbedtls_ssl_handshake() with the same - * context (as it has been reset internally). Either way, you - * must make sure this is seen by the application as a new - * connection: application state, if any, should be reset, and - * most importantly the identity of the client must be checked - * again. WARNING: not validating the identity of the client - * again, or not transmitting the new identity to the - * application layer, would allow authentication bypass! - * - * \note Remarks regarding event-driven DTLS: - * - If the function returns #MBEDTLS_ERR_SSL_WANT_READ, no datagram - * from the underlying transport layer is currently being processed, - * and it is safe to idle until the timer or the underlying transport - * signal a new event. - * - This function may return MBEDTLS_ERR_SSL_WANT_READ even if data was - * initially available on the underlying transport, as this data may have - * been only e.g. duplicated messages or a renegotiation request. - * Therefore, you must be prepared to receive MBEDTLS_ERR_SSL_WANT_READ even - * when reacting to an incoming-data event from the underlying transport. - * - On success, the datagram of the underlying transport that is currently - * being processed may contain further DTLS records. You should call - * \c mbedtls_ssl_check_pending to check for remaining records. - * - */ -int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ); - -/** - * \brief Try to write exactly 'len' application data bytes - * - * \warning This function will do partial writes in some cases. If the - * return value is non-negative but less than length, the - * function must be called again with updated arguments: - * buf + ret, len - ret (if ret is the return value) until - * it returns a value equal to the last 'len' argument. - * - * \param ssl SSL context - * \param buf buffer holding the data - * \param len how many bytes must be written - * - * \return The (non-negative) number of bytes actually written if - * successful (may be less than \p len). - * \return #MBEDTLS_ERR_SSL_WANT_READ or #MBEDTLS_ERR_SSL_WANT_WRITE - * if the handshake is incomplete and waiting for data to - * be available for reading from or writing to the underlying - * transport - in this case you must call this function again - * when the underlying transport is ready for the operation. - * \return #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS if an asynchronous - * operation is in progress (see - * mbedtls_ssl_conf_async_private_cb()) - in this case you - * must call this function again when the operation is ready. - * \return #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS if a cryptographic - * operation is in progress (see mbedtls_ecp_set_max_ops()) - - * in this case you must call this function again to complete - * the handshake when you're done attending other tasks. - * \return Another SSL error code - in this case you must stop using - * the context (see below). - * - * \warning If this function returns something other than - * a non-negative value, - * #MBEDTLS_ERR_SSL_WANT_READ, - * #MBEDTLS_ERR_SSL_WANT_WRITE, - * #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS or - * #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS, - * you must stop using the SSL context for reading or writing, - * and either free it or call \c mbedtls_ssl_session_reset() - * on it before re-using it for a new connection; the current - * connection must be closed. - * - * \note When this function returns #MBEDTLS_ERR_SSL_WANT_WRITE/READ, - * it must be called later with the *same* arguments, - * until it returns a value greater that or equal to 0. When - * the function returns #MBEDTLS_ERR_SSL_WANT_WRITE there may be - * some partial data in the output buffer, however this is not - * yet sent. - * - * \note If the requested length is greater than the maximum - * fragment length (either the built-in limit or the one set - * or negotiated with the peer), then: - * - with TLS, less bytes than requested are written. - * - with DTLS, MBEDTLS_ERR_SSL_BAD_INPUT_DATA is returned. - * \c mbedtls_ssl_get_output_max_frag_len() may be used to - * query the active maximum fragment length. - * - * \note Attempting to write 0 bytes will result in an empty TLS - * application record being sent. - */ -int mbedtls_ssl_write( mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len ); - -/** - * \brief Send an alert message - * - * \param ssl SSL context - * \param level The alert level of the message - * (MBEDTLS_SSL_ALERT_LEVEL_WARNING or MBEDTLS_SSL_ALERT_LEVEL_FATAL) - * \param message The alert message (SSL_ALERT_MSG_*) - * - * \return 0 if successful, or a specific SSL error code. - * - * \note If this function returns something other than 0 or - * MBEDTLS_ERR_SSL_WANT_READ/WRITE, you must stop using - * the SSL context for reading or writing, and either free it or - * call \c mbedtls_ssl_session_reset() on it before re-using it - * for a new connection; the current connection must be closed. - */ -int mbedtls_ssl_send_alert_message( mbedtls_ssl_context *ssl, - unsigned char level, - unsigned char message ); -/** - * \brief Notify the peer that the connection is being closed - * - * \param ssl SSL context - * - * \return 0 if successful, or a specific SSL error code. - * - * \note If this function returns something other than 0 or - * MBEDTLS_ERR_SSL_WANT_READ/WRITE, you must stop using - * the SSL context for reading or writing, and either free it or - * call \c mbedtls_ssl_session_reset() on it before re-using it - * for a new connection; the current connection must be closed. - */ -int mbedtls_ssl_close_notify( mbedtls_ssl_context *ssl ); - -/** - * \brief Free referenced items in an SSL context and clear memory - * - * \param ssl SSL context - */ -void mbedtls_ssl_free( mbedtls_ssl_context *ssl ); - -#if defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION) -/** - * \brief Save an active connection as serialized data in a buffer. - * This allows the freeing or re-using of the SSL context - * while still picking up the connection later in a way that - * it entirely transparent to the peer. - * - * \see mbedtls_ssl_context_load() - * - * \note This feature is currently only available under certain - * conditions, see the documentation of the return value - * #MBEDTLS_ERR_SSL_BAD_INPUT_DATA for details. - * - * \note When this function succeeds, it calls - * mbedtls_ssl_session_reset() on \p ssl which as a result is - * no longer associated with the connection that has been - * serialized. This avoids creating copies of the connection - * state. You're then free to either re-use the context - * structure for a different connection, or call - * mbedtls_ssl_free() on it. See the documentation of - * mbedtls_ssl_session_reset() for more details. - * - * \param ssl The SSL context to save. On success, it is no longer - * associated with the connection that has been serialized. - * \param buf The buffer to write the serialized data to. It must be a - * writeable buffer of at least \p buf_len bytes, or may be \c - * NULL if \p buf_len is \c 0. - * \param buf_len The number of bytes available for writing in \p buf. - * \param olen The size in bytes of the data that has been or would have - * been written. It must point to a valid \c size_t. - * - * \note \p olen is updated to the correct value regardless of - * whether \p buf_len was large enough. This makes it possible - * to determine the necessary size by calling this function - * with \p buf set to \c NULL and \p buf_len to \c 0. However, - * the value of \p olen is only guaranteed to be correct when - * the function returns #MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL or - * \c 0. If the return value is different, then the value of - * \p olen is undefined. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL if \p buf is too small. - * \return #MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed - * while reseting the context. - * \return #MBEDTLS_ERR_SSL_BAD_INPUT_DATA if a handshake is in - * progress, or there is pending data for reading or sending, - * or the connection does not use DTLS 1.2 with an AEAD - * ciphersuite, or renegotiation is enabled. - */ -int mbedtls_ssl_context_save( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t buf_len, - size_t *olen ); - -/** - * \brief Load serialized connection data to an SSL context. - * - * \see mbedtls_ssl_context_save() - * - * \warning The same serialized data must never be loaded into more - * that one context. In order to ensure that, after - * successfully loading serialized data to an SSL context, you - * should immediately destroy or invalidate all copies of the - * serialized data that was loaded. Loading the same data in - * more than one context would cause severe security failures - * including but not limited to loss of confidentiality. - * - * \note Before calling this function, the SSL context must be - * prepared in one of the two following ways. The first way is - * to take a context freshly initialised with - * mbedtls_ssl_init() and call mbedtls_ssl_setup() on it with - * the same ::mbedtls_ssl_config structure that was used in - * the original connection. The second way is to - * call mbedtls_ssl_session_reset() on a context that was - * previously prepared as above but used in the meantime. - * Either way, you must not use the context to perform a - * handshake between calling mbedtls_ssl_setup() or - * mbedtls_ssl_session_reset() and calling this function. You - * may however call other setter functions in that time frame - * as indicated in the note below. - * - * \note Before or after calling this function successfully, you - * also need to configure some connection-specific callbacks - * and settings before you can use the connection again - * (unless they were already set before calling - * mbedtls_ssl_session_reset() and the values are suitable for - * the present connection). Specifically, you want to call - * at least mbedtls_ssl_set_bio() and - * mbedtls_ssl_set_timer_cb(). All other SSL setter functions - * are not necessary to call, either because they're only used - * in handshakes, or because the setting is already saved. You - * might choose to call them anyway, for example in order to - * share code between the cases of establishing a new - * connection and the case of loading an already-established - * connection. - * - * \note If you have new information about the path MTU, you want to - * call mbedtls_ssl_set_mtu() after calling this function, as - * otherwise this function would overwrite your - * newly-configured value with the value that was active when - * the context was saved. - * - * \note When this function returns an error code, it calls - * mbedtls_ssl_free() on \p ssl. In this case, you need to - * prepare the context with the usual sequence starting with a - * call to mbedtls_ssl_init() if you want to use it again. - * - * \param ssl The SSL context structure to be populated. It must have - * been prepared as described in the note above. - * \param buf The buffer holding the serialized connection data. It must - * be a readable buffer of at least \p len bytes. - * \param len The size of the serialized data in bytes. - * - * \return \c 0 if successful. - * \return #MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed. - * \return #MBEDTLS_ERR_SSL_VERSION_MISMATCH if the serialized data - * comes from a different Mbed TLS version or build. - * \return #MBEDTLS_ERR_SSL_BAD_INPUT_DATA if input data is invalid. - */ -int mbedtls_ssl_context_load( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ); -#endif /* MBEDTLS_SSL_CONTEXT_SERIALIZATION */ - -/** - * \brief Initialize an SSL configuration context - * Just makes the context ready for - * mbedtls_ssl_config_defaults() or mbedtls_ssl_config_free(). - * - * \note You need to call mbedtls_ssl_config_defaults() unless you - * manually set all of the relevant fields yourself. - * - * \param conf SSL configuration context - */ -void mbedtls_ssl_config_init( mbedtls_ssl_config *conf ); - -/** - * \brief Load reasonnable default SSL configuration values. - * (You need to call mbedtls_ssl_config_init() first.) - * - * \param conf SSL configuration context - * \param endpoint MBEDTLS_SSL_IS_CLIENT or MBEDTLS_SSL_IS_SERVER + const unsigned char *cookie, size_t clen, + const unsigned char *info, size_t ilen ); + +const char *mbedtls_sig_alg_name(int); +const char *mbedtls_ssl_get_alpn_protocol( const mbedtls_ssl_context * ); +const char *mbedtls_ssl_get_ciphersuite( const mbedtls_ssl_context * ); +const char *mbedtls_ssl_get_ciphersuite_name( const int ); +const char *mbedtls_ssl_get_srtp_profile_as_string( mbedtls_ssl_srtp_profile ); +const char *mbedtls_ssl_get_version( const mbedtls_ssl_context * ); +const mbedtls_ssl_session *mbedtls_ssl_get_session_pointer( const mbedtls_ssl_context * ); +const mbedtls_x509_crt *mbedtls_ssl_get_peer_cert( const mbedtls_ssl_context * ); +int mbedtls_ssl_check_pending( const mbedtls_ssl_context * ); +int mbedtls_ssl_check_record( mbedtls_ssl_context const *, unsigned char *, size_t ); +int mbedtls_ssl_close_notify( mbedtls_ssl_context * ); +int mbedtls_ssl_conf_alpn_protocols( mbedtls_ssl_config *, const char ** ); +int mbedtls_ssl_conf_cid( mbedtls_ssl_config *, size_t, int ); +int mbedtls_ssl_conf_dh_param_bin( mbedtls_ssl_config *, const unsigned char *, size_t, const unsigned char *, size_t ); +int mbedtls_ssl_conf_dh_param_ctx( mbedtls_ssl_config *, mbedtls_dhm_context * ); +int mbedtls_ssl_conf_dtls_srtp_protection_profiles( mbedtls_ssl_config *, const mbedtls_ssl_srtp_profile * ); +int mbedtls_ssl_conf_max_frag_len( mbedtls_ssl_config *, unsigned char ); +int mbedtls_ssl_conf_own_cert( mbedtls_ssl_config *, mbedtls_x509_crt *, mbedtls_pk_context * ); +int mbedtls_ssl_conf_psk( mbedtls_ssl_config *, const unsigned char *, size_t, const unsigned char *, size_t ); +int mbedtls_ssl_context_load( mbedtls_ssl_context *, const unsigned char *, size_t ); +int mbedtls_ssl_context_save( mbedtls_ssl_context *, unsigned char *, size_t, size_t * ); +int mbedtls_ssl_get_ciphersuite_id( const char * ); +int mbedtls_ssl_get_max_out_record_payload( const mbedtls_ssl_context * ); +int mbedtls_ssl_get_peer_cid( mbedtls_ssl_context *, int *, unsigned char[ MBEDTLS_SSL_CID_OUT_LEN_MAX ], size_t * ); +int mbedtls_ssl_get_record_expansion( const mbedtls_ssl_context * ); +int mbedtls_ssl_get_session( const mbedtls_ssl_context *, mbedtls_ssl_session * ); +int mbedtls_ssl_handshake( mbedtls_ssl_context * ); +int mbedtls_ssl_handshake_client_step( mbedtls_ssl_context * ); +int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context * ); +int mbedtls_ssl_handshake_step( mbedtls_ssl_context * ); +int mbedtls_ssl_read( mbedtls_ssl_context *, unsigned char *, size_t ); +int mbedtls_ssl_renegotiate( mbedtls_ssl_context * ); +int mbedtls_ssl_send_alert_message( mbedtls_ssl_context *, unsigned char, unsigned char ); +int mbedtls_ssl_session_load( mbedtls_ssl_session *, const unsigned char *, size_t ); +int mbedtls_ssl_session_reset( mbedtls_ssl_context * ); +int mbedtls_ssl_session_save( const mbedtls_ssl_session *, unsigned char *, size_t, size_t * ); +int mbedtls_ssl_set_cid( mbedtls_ssl_context *, int, unsigned char const *, size_t ); +int mbedtls_ssl_set_client_transport_id( mbedtls_ssl_context *, const unsigned char *, size_t ); +int mbedtls_ssl_set_hostname( mbedtls_ssl_context *, const char * ); +int mbedtls_ssl_set_hs_ecjpake_password( mbedtls_ssl_context *, const unsigned char *, size_t ); +int mbedtls_ssl_set_hs_own_cert( mbedtls_ssl_context *, mbedtls_x509_crt *, mbedtls_pk_context * ); +int mbedtls_ssl_set_hs_psk( mbedtls_ssl_context *, const unsigned char *, size_t ); +int mbedtls_ssl_set_session( mbedtls_ssl_context *, const mbedtls_ssl_session * ); +int mbedtls_ssl_setup( mbedtls_ssl_context *, const mbedtls_ssl_config * ); +int mbedtls_ssl_write( mbedtls_ssl_context *, const unsigned char *, size_t ); +size_t mbedtls_ssl_get_bytes_avail( const mbedtls_ssl_context * ); +size_t mbedtls_ssl_get_input_max_frag_len( const mbedtls_ssl_context * ); +size_t mbedtls_ssl_get_output_max_frag_len( const mbedtls_ssl_context * ); +uint32_t mbedtls_ssl_get_verify_result( const mbedtls_ssl_context * ); +void *mbedtls_ssl_conf_get_async_config_data( const mbedtls_ssl_config * ); +void *mbedtls_ssl_get_async_operation_data( const mbedtls_ssl_context * ); +void mbedtls_ssl_conf_async_private_cb( mbedtls_ssl_config *, mbedtls_ssl_async_sign_t *, mbedtls_ssl_async_decrypt_t *, mbedtls_ssl_async_resume_t *, mbedtls_ssl_async_cancel_t *, void * ); +void mbedtls_ssl_conf_authmode( mbedtls_ssl_config *, int ); +void mbedtls_ssl_conf_ca_cb( mbedtls_ssl_config *, mbedtls_x509_crt_ca_cb_t, void * ); +void mbedtls_ssl_conf_ca_chain( mbedtls_ssl_config *, mbedtls_x509_crt *, mbedtls_x509_crl * ); +void mbedtls_ssl_conf_cbc_record_splitting( mbedtls_ssl_config *, char ); +void mbedtls_ssl_conf_cert_profile( mbedtls_ssl_config *, const mbedtls_x509_crt_profile * ); +void mbedtls_ssl_conf_cert_req_ca_list( mbedtls_ssl_config *, char ); +void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *, const uint16_t * ); +void mbedtls_ssl_conf_ciphersuites_for_version( mbedtls_ssl_config *, const uint16_t *, int, int ); +void mbedtls_ssl_conf_curves( mbedtls_ssl_config *, const mbedtls_ecp_group_id * ); +void mbedtls_ssl_conf_dbg( mbedtls_ssl_config *, void (*)(void *, int, const char *, int, const char *), void * ); +void mbedtls_ssl_conf_dhm_min_bitlen( mbedtls_ssl_config *, unsigned int ); +void mbedtls_ssl_conf_dtls_anti_replay( mbedtls_ssl_config *, char ); +void mbedtls_ssl_conf_dtls_badmac_limit( mbedtls_ssl_config *, unsigned ); +void mbedtls_ssl_conf_dtls_cookies( mbedtls_ssl_config *, mbedtls_ssl_cookie_write_t *, mbedtls_ssl_cookie_check_t *, void * ); +void mbedtls_ssl_conf_encrypt_then_mac( mbedtls_ssl_config *, char ); +void mbedtls_ssl_conf_endpoint( mbedtls_ssl_config *, int ); +void mbedtls_ssl_conf_export_keys_cb( mbedtls_ssl_config *, mbedtls_ssl_export_keys_t *, void * ); +void mbedtls_ssl_conf_export_keys_ext_cb( mbedtls_ssl_config *, mbedtls_ssl_export_keys_ext_t *, void * ); +void mbedtls_ssl_conf_extended_master_secret( mbedtls_ssl_config *, char ); +void mbedtls_ssl_conf_fallback( mbedtls_ssl_config *, char ); +void mbedtls_ssl_conf_handshake_timeout( mbedtls_ssl_config *, uint32_t, uint32_t ); +void mbedtls_ssl_conf_legacy_renegotiation( mbedtls_ssl_config *, int ); +void mbedtls_ssl_conf_max_version( mbedtls_ssl_config *, int, int ); +void mbedtls_ssl_conf_min_version( mbedtls_ssl_config *, int, int ); +void mbedtls_ssl_conf_psk_cb( mbedtls_ssl_config *, int (*)(void *, mbedtls_ssl_context *, const unsigned char *, size_t), void * ); +void mbedtls_ssl_conf_read_timeout( mbedtls_ssl_config *, uint32_t ); +void mbedtls_ssl_conf_renegotiation( mbedtls_ssl_config *, int ); +void mbedtls_ssl_conf_renegotiation_enforced( mbedtls_ssl_config *, int ); +void mbedtls_ssl_conf_renegotiation_period( mbedtls_ssl_config *, const unsigned char[8] ); +void mbedtls_ssl_conf_rng( mbedtls_ssl_config *, int (*)(void *, unsigned char *, size_t), void * ); +void mbedtls_ssl_conf_session_cache( mbedtls_ssl_config *, void *, int (*)(void *, mbedtls_ssl_session *), int (*)(void *, const mbedtls_ssl_session *) ); +void mbedtls_ssl_conf_session_tickets( mbedtls_ssl_config *, int ); +void mbedtls_ssl_conf_session_tickets_cb( mbedtls_ssl_config *, mbedtls_ssl_ticket_write_t *, mbedtls_ssl_ticket_parse_t *, void * ); +void mbedtls_ssl_conf_sig_hashes( mbedtls_ssl_config *, const uint8_t * ); +void mbedtls_ssl_conf_sni( mbedtls_ssl_config *, int (*)(void *, mbedtls_ssl_context *, const unsigned char *, size_t), void *); +void mbedtls_ssl_conf_srtp_mki_value_supported( mbedtls_ssl_config *, int ); +void mbedtls_ssl_conf_transport( mbedtls_ssl_config *, int ); +void mbedtls_ssl_conf_verify( mbedtls_ssl_config *, int (*)(void *, mbedtls_x509_crt *, int, uint32_t *), void * ); +void mbedtls_ssl_config_free( mbedtls_ssl_config * ); +void mbedtls_ssl_config_init( mbedtls_ssl_config * ); +void mbedtls_ssl_free( mbedtls_ssl_context * ); +void mbedtls_ssl_get_dtls_srtp_negotiation_result( const mbedtls_ssl_context *, mbedtls_dtls_srtp_info * ); +void mbedtls_ssl_init( mbedtls_ssl_context * ); +void mbedtls_ssl_session_init( mbedtls_ssl_session * ); +void mbedtls_ssl_set_async_operation_data( mbedtls_ssl_context *, void * ); +void mbedtls_ssl_set_bio( mbedtls_ssl_context *, void *, mbedtls_ssl_send_t *, mbedtls_ssl_recv_t *, mbedtls_ssl_recv_timeout_t * ); +void mbedtls_ssl_set_datagram_packing( mbedtls_ssl_context *, unsigned ); +void mbedtls_ssl_set_hs_authmode( mbedtls_ssl_context *, int ); +void mbedtls_ssl_set_hs_ca_chain( mbedtls_ssl_context *, mbedtls_x509_crt *, mbedtls_x509_crl * ); +void mbedtls_ssl_set_mtu( mbedtls_ssl_context *, uint16_t ); +void mbedtls_ssl_set_timer_cb( mbedtls_ssl_context *, void *, mbedtls_ssl_set_timer_t *, mbedtls_ssl_get_timer_t * ); +void mbedtls_ssl_set_verify( mbedtls_ssl_context *, int (*)(void *, mbedtls_x509_crt *, int, uint32_t *), void * ); +void mbedtls_ssl_session_free( mbedtls_ssl_session * ); +int mbedtls_ssl_tls_prf( const mbedtls_tls_prf_types , const unsigned char *, size_t, const char *, const unsigned char *, size_t, unsigned char *, size_t ); + +/** + * \brief Load reasonnable default SSL configuration values. + * (You need to call mbedtls_ssl_config_init() first.) + * + * \param conf SSL configuration context + * \param endpoint MBEDTLS_SSL_IS_CLIENT or MBEDTLS_SSL_IS_SERVER * \param transport MBEDTLS_SSL_TRANSPORT_STREAM for TLS, or * MBEDTLS_SSL_TRANSPORT_DATAGRAM for DTLS - * \param preset a MBEDTLS_SSL_PRESET_XXX value + * \param preset a MBEDTLS_SSL_PRESET_XXX value * - * \note See \c mbedtls_ssl_conf_transport() for notes on DTLS. + * \note See \c mbedtls_ssl_conf_transport() for notes on DTLS. * - * \return 0 if successful, or - * MBEDTLS_ERR_XXX_ALLOC_FAILED on memory allocation error. + * \return 0 if successful, or + * MBEDTLS_ERR_XXX_ALLOC_FAILED on memory allocation error. */ -int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, - int endpoint, int transport, int preset ); - -/** - * \brief Free an SSL configuration context - * - * \param conf SSL configuration context - */ -void mbedtls_ssl_config_free( mbedtls_ssl_config *conf ); - -/** - * \brief Initialize SSL session structure - * - * \param session SSL session - */ -void mbedtls_ssl_session_init( mbedtls_ssl_session *session ); - -/** - * \brief Free referenced items in an SSL session including the - * peer certificate and clear memory - * - * \note A session object can be freed even if the SSL context - * that was used to retrieve the session is still in use. - * - * \param session SSL session - */ -void mbedtls_ssl_session_free( mbedtls_ssl_session *session ); - -/** - * \brief TLS-PRF function for key derivation. - * - * \param prf The tls_prf type funtion type to be used. - * \param secret Secret for the key derivation function. - * \param slen Length of the secret. - * \param label String label for the key derivation function, - * terminated with null character. - * \param random Random bytes. - * \param rlen Length of the random bytes buffer. - * \param dstbuf The buffer holding the derived key. - * \param dlen Length of the output buffer. - * - * \return 0 on sucess. An SSL specific error on failure. - */ -int mbedtls_ssl_tls_prf( const mbedtls_tls_prf_types prf, - const unsigned char *secret, size_t slen, - const char *label, - const unsigned char *random, size_t rlen, - unsigned char *dstbuf, size_t dlen ); - -#ifdef __cplusplus -} +forceinline int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, + int endpoint, int transport, + int preset ) { + int mbedtls_ssl_config_defaults_impl(mbedtls_ssl_config *, int, int, int, + int (*)(mbedtls_ssl_context *)); + switch (endpoint) { +#if defined(MBEDTLS_SSL_CLI_C) + case MBEDTLS_SSL_IS_CLIENT: + return mbedtls_ssl_config_defaults_impl( + conf, endpoint, transport, preset, + mbedtls_ssl_handshake_client_step); #endif +#if defined(MBEDTLS_SSL_SRV_C) + case MBEDTLS_SSL_IS_SERVER: + return mbedtls_ssl_config_defaults_impl( + conf, endpoint, transport, preset, + mbedtls_ssl_handshake_server_step); +#endif + default: + return MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE; + } +} -#endif /* ssl.h */ +COSMOPOLITAN_C_END_ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_SSL_H_ */ diff --git a/third_party/mbedtls/ssl_cache.c b/third_party/mbedtls/ssl_cache.c index 195888416..cf099985b 100644 --- a/third_party/mbedtls/ssl_cache.c +++ b/third_party/mbedtls/ssl_cache.c @@ -1,5 +1,15 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/ssl_cache.h" +#include "third_party/mbedtls/ssl_internal.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * SSL session cache implementation * @@ -23,31 +33,13 @@ * to store and retrieve the session information. */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_SSL_CACHE_C) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - -#include "third_party/mbedtls/ssl_cache.h" -#include "third_party/mbedtls/ssl_internal.h" - - void mbedtls_ssl_cache_init( mbedtls_ssl_cache_context *cache ) { memset( cache, 0, sizeof( mbedtls_ssl_cache_context ) ); - cache->timeout = MBEDTLS_SSL_CACHE_DEFAULT_TIMEOUT; cache->max_entries = MBEDTLS_SSL_CACHE_DEFAULT_MAX_ENTRIES; - -#if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_init( &cache->mutex ); -#endif } int mbedtls_ssl_cache_get( void *data, mbedtls_ssl_session *session ) @@ -59,11 +51,6 @@ int mbedtls_ssl_cache_get( void *data, mbedtls_ssl_session *session ) mbedtls_ssl_cache_context *cache = (mbedtls_ssl_cache_context *) data; mbedtls_ssl_cache_entry *cur, *entry; -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_lock( &cache->mutex ) != 0 ) - return( 1 ); -#endif - cur = cache->chain; entry = NULL; @@ -129,11 +116,6 @@ int mbedtls_ssl_cache_get( void *data, mbedtls_ssl_session *session ) } exit: -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &cache->mutex ) != 0 ) - ret = 1; -#endif - return( ret ); } @@ -148,11 +130,6 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) mbedtls_ssl_cache_entry *cur, *prv; int count = 0; -#if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &cache->mutex ) ) != 0 ) - return( ret ); -#endif - cur = cache->chain; prv = NULL; @@ -293,11 +270,6 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) ret = 0; exit: -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &cache->mutex ) != 0 ) - ret = 1; -#endif - return( ret ); } @@ -338,9 +310,6 @@ void mbedtls_ssl_cache_free( mbedtls_ssl_cache_context *cache ) mbedtls_free( prv ); } -#if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_free( &cache->mutex ); -#endif cache->chain = NULL; } diff --git a/third_party/mbedtls/ssl_cache.h b/third_party/mbedtls/ssl_cache.h index c51668087..aa4e9be50 100644 --- a/third_party/mbedtls/ssl_cache.h +++ b/third_party/mbedtls/ssl_cache.h @@ -1,40 +1,8 @@ -/* clang-format off */ - -/** - * \file ssl_cache.h - * - * \brief SSL session cache implementation - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_SSL_CACHE_H #define MBEDTLS_SSL_CACHE_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/ssl.h" - -#if defined(MBEDTLS_THREADING_C) -#include "third_party/mbedtls/threading.h" -#endif +/* clang-format off */ /** * \name SECTION: Module settings @@ -85,9 +53,6 @@ struct mbedtls_ssl_cache_context mbedtls_ssl_cache_entry *chain; /*!< start of the chain */ int timeout; /*!< cache entry timeout */ int max_entries; /*!< maximum entries */ -#if defined(MBEDTLS_THREADING_C) - mbedtls_threading_mutex_t mutex; /*!< mutex */ -#endif }; /** @@ -99,8 +64,7 @@ void mbedtls_ssl_cache_init( mbedtls_ssl_cache_context *cache ); /** * \brief Cache get callback implementation - * (Thread-safe if MBEDTLS_THREADING_C is enabled) - * + * * \param data SSL cache context * \param session session to retrieve entry for */ @@ -108,7 +72,6 @@ int mbedtls_ssl_cache_get( void *data, mbedtls_ssl_session *session ); /** * \brief Cache set callback implementation - * (Thread-safe if MBEDTLS_THREADING_C is enabled) * * \param data SSL cache context * \param session session to store entry for diff --git a/third_party/mbedtls/ssl_ciphersuites.c b/third_party/mbedtls/ssl_ciphersuites.c index f911e3a2a..a9ac8b974 100644 --- a/third_party/mbedtls/ssl_ciphersuites.c +++ b/third_party/mbedtls/ssl_ciphersuites.c @@ -1,5 +1,15 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/ssl.h" +#include "third_party/mbedtls/ssl_ciphersuites.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /** * \file ssl_ciphersuites.c * @@ -21,268 +31,116 @@ * limitations under the License. */ -#include "third_party/mbedtls/common.h" +/* + * CRYPTOGRAPHY 101 + * + * OK WEAK BROKEN + * ------------------ ------ ------ + * ECDHE > ECDH > DHE + * ECDSA > RSA + * GCM > CCM > CBC > ECB + * SHA2 > SHA1 > MD5 + * AES > 3DES > DES + * CHACHA > RC4 + */ #if defined(MBEDTLS_SSL_TLS_C) - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#endif - -#include "third_party/mbedtls/ssl_ciphersuites.h" -#include "third_party/mbedtls/ssl.h" - - -/* - * Ordered from most preferred to least preferred in terms of security. - * - * Current rule (except RC4 and 3DES, weak and null which come last): - * 1. By key exchange: - * Forward-secure non-PSK > forward-secure PSK > ECJPAKE > other non-PSK > other PSK - * 2. By key length and cipher: - * ChaCha > AES-256 > Camellia-256 > ARIA-256 > AES-128 > Camellia-128 > ARIA-128 - * 3. By cipher mode when relevant GCM > CCM > CBC > CCM_8 - * 4. By hash function used when relevant - * 5. By key exchange/auth again: EC > non-EC - */ -static const int ciphersuite_preference[] = +static const uint16_t ciphersuite_preference[] = { #if defined(MBEDTLS_SSL_CIPHERSUITES) MBEDTLS_SSL_CIPHERSUITES, #else - /* Chacha-Poly ephemeral suites */ - MBEDTLS_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, - MBEDTLS_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, - MBEDTLS_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256, - /* All AES-256 ephemeral suites */ - MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, - MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM, - MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM, - MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, - MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, - MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, - MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, - MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA, - MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8, - MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM_8, - - /* All CAMELLIA-256 ephemeral suites */ - MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, - MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, - MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, - MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, - MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384, - MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256, - MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, - - /* All ARIA-256 ephemeral suites */ - MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384, - MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384, - MBEDTLS_TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384, - MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384, - MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384, - MBEDTLS_TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384, - - /* All AES-128 ephemeral suites */ +#ifdef MBEDTLS_KEY_EXCHANGE_SOME_PFS_ENABLED + /* strong perfect forward secrecy */ MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, + MBEDTLS_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, + MBEDTLS_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, - MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM, + MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, + MBEDTLS_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256, MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM, - MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, + MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM, + /* weakened perfect forward secrecy */ MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, - MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, + MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA, - MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8, - MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM_8, + MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA, +#endif - /* All CAMELLIA-128 ephemeral suites */ - MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, - MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, - MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, - MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, - MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, - MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, - MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, - - /* All ARIA-128 ephemeral suites */ - MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256, - MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256, - MBEDTLS_TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256, - MBEDTLS_TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256, - MBEDTLS_TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256, - MBEDTLS_TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256, - - /* The PSK ephemeral suites */ +#ifdef MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED + MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256, + MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384, MBEDTLS_TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256, MBEDTLS_TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256, - MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384, - MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM, - MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384, - MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384, - MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA, - MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA, - MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384, - MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, - MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, - MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM_8, - MBEDTLS_TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384, - MBEDTLS_TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384, - MBEDTLS_TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384, - - MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256, - MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM, MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256, MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256, + MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384, + MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384, MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA, MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA, - MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256, - MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, - MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, - MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM_8, - MBEDTLS_TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256, - MBEDTLS_TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256, - MBEDTLS_TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256, + MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA, + MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA, +#endif - /* The ECJPAKE suite */ - MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8, - - /* All AES-256 suites */ - MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384, - MBEDTLS_TLS_RSA_WITH_AES_256_CCM, - MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256, - MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA, - MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, - MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, - MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, - MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, - MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, - MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, - MBEDTLS_TLS_RSA_WITH_AES_256_CCM_8, - - /* All CAMELLIA-256 suites */ - MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384, - MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256, - MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA, - MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384, - MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384, - MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, - MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, - - /* All ARIA-256 suites */ - MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384, - MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384, - MBEDTLS_TLS_RSA_WITH_ARIA_256_GCM_SHA384, - MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384, - MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384, - MBEDTLS_TLS_RSA_WITH_ARIA_256_CBC_SHA384, - - /* All AES-128 suites */ - MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256, - MBEDTLS_TLS_RSA_WITH_AES_128_CCM, - MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256, - MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA, - MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, - MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, - MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, +#ifdef MBEDTLS_KEY_EXCHANGE_SOME_NON_PFS_ENABLED MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, - MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, - MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, - MBEDTLS_TLS_RSA_WITH_AES_128_CCM_8, + MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, + MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, + MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, + MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256, + MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384, + MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, + MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, + MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256, + MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256, + MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, + MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, + MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA, + MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA, +#endif - /* All CAMELLIA-128 suites */ - MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256, - MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256, - MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA, - MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256, - MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256, - MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, - MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, - - /* All ARIA-128 suites */ - MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256, - MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256, - MBEDTLS_TLS_RSA_WITH_ARIA_128_GCM_SHA256, - MBEDTLS_TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256, - MBEDTLS_TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256, - MBEDTLS_TLS_RSA_WITH_ARIA_128_CBC_SHA256, - - /* The RSA PSK suites */ - MBEDTLS_TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256, +#ifdef MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED + MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256, MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384, + MBEDTLS_TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256, MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384, MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA, - MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384, - MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384, - MBEDTLS_TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384, - MBEDTLS_TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384, - - MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256, MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256, MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA, - MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256, - MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256, - MBEDTLS_TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256, - MBEDTLS_TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256, - - /* The PSK suites */ - MBEDTLS_TLS_PSK_WITH_CHACHA20_POLY1305_SHA256, + MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256, MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384, - MBEDTLS_TLS_PSK_WITH_AES_256_CCM, + MBEDTLS_TLS_PSK_WITH_CHACHA20_POLY1305_SHA256, MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384, MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA, - MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384, - MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384, - MBEDTLS_TLS_PSK_WITH_AES_256_CCM_8, - MBEDTLS_TLS_PSK_WITH_ARIA_256_GCM_SHA384, - MBEDTLS_TLS_PSK_WITH_ARIA_256_CBC_SHA384, - - MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256, - MBEDTLS_TLS_PSK_WITH_AES_128_CCM, MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256, MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, - MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256, - MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256, - MBEDTLS_TLS_PSK_WITH_AES_128_CCM_8, - MBEDTLS_TLS_PSK_WITH_ARIA_128_GCM_SHA256, - MBEDTLS_TLS_PSK_WITH_ARIA_128_CBC_SHA256, +#endif - /* 3DES suites */ - MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, +#ifdef MBEDTLS_DES_C MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA, MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA, MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA, MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, - MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA, MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA, +#endif - /* RC4 suites */ - MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, - MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA, - MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA, - MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA, - MBEDTLS_TLS_RSA_WITH_RC4_128_SHA, - MBEDTLS_TLS_RSA_WITH_RC4_128_MD5, - MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA, - MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA, - MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA, - MBEDTLS_TLS_PSK_WITH_RC4_128_SHA, - - /* Weak suites */ +#ifdef MBEDTLS_ENABLE_WEAK_CIPHERSUITES MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA, MBEDTLS_TLS_RSA_WITH_DES_CBC_SHA, +#endif - /* NULL suites */ +#ifdef MBEDTLS_CIPHER_NULL_CIPHER MBEDTLS_TLS_ECDHE_ECDSA_WITH_NULL_SHA, MBEDTLS_TLS_ECDHE_RSA_WITH_NULL_SHA, MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA384, @@ -291,7 +149,6 @@ static const int ciphersuite_preference[] = MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384, MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256, MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA, - MBEDTLS_TLS_RSA_WITH_NULL_SHA256, MBEDTLS_TLS_RSA_WITH_NULL_SHA, MBEDTLS_TLS_RSA_WITH_NULL_MD5, @@ -303,6 +160,7 @@ static const int ciphersuite_preference[] = MBEDTLS_TLS_PSK_WITH_NULL_SHA384, MBEDTLS_TLS_PSK_WITH_NULL_SHA256, MBEDTLS_TLS_PSK_WITH_NULL_SHA, +#endif #endif /* MBEDTLS_SSL_CIPHERSUITES */ 0 @@ -2166,25 +2024,20 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = }; #if defined(MBEDTLS_SSL_CIPHERSUITES) -const int *mbedtls_ssl_list_ciphersuites( void ) +const uint16_t *mbedtls_ssl_list_ciphersuites( void ) { return( ciphersuite_preference ); } #else #define MAX_CIPHERSUITES sizeof( ciphersuite_definitions ) / \ sizeof( ciphersuite_definitions[0] ) -static int supported_ciphersuites[MAX_CIPHERSUITES]; +static uint16_t supported_ciphersuites[MAX_CIPHERSUITES]; static int supported_init = 0; static int ciphersuite_is_removed( const mbedtls_ssl_ciphersuite_t *cs_info ) { (void)cs_info; -#if defined(MBEDTLS_REMOVE_ARC4_CIPHERSUITES) - if( cs_info->cipher == MBEDTLS_CIPHER_ARC4_128 ) - return( 1 ); -#endif /* MBEDTLS_REMOVE_ARC4_CIPHERSUITES */ - #if defined(MBEDTLS_REMOVE_3DES_CIPHERSUITES) if( cs_info->cipher == MBEDTLS_CIPHER_DES_EDE3_ECB || cs_info->cipher == MBEDTLS_CIPHER_DES_EDE3_CBC ) @@ -2196,7 +2049,7 @@ static int ciphersuite_is_removed( const mbedtls_ssl_ciphersuite_t *cs_info ) return( 0 ); } -const int *mbedtls_ssl_list_ciphersuites( void ) +const uint16_t *mbedtls_ssl_list_ciphersuites( void ) { /* * On initial call filter out all ciphersuites not supported by current @@ -2204,8 +2057,8 @@ const int *mbedtls_ssl_list_ciphersuites( void ) */ if( supported_init == 0 ) { - const int *p; - int *q; + const uint16_t *p; + uint16_t *q; for( p = ciphersuite_preference, q = supported_ciphersuites; *p != 0 && q < supported_ciphersuites + MAX_CIPHERSUITES - 1; @@ -2261,27 +2114,37 @@ const mbedtls_ssl_ciphersuite_t *mbedtls_ssl_ciphersuite_from_id( int ciphersuit return( NULL ); } +/** + * \brief Return the name of the ciphersuite associated with the + * given ID + * + * \param ciphersuite_id SSL ciphersuite ID + * + * \return a string containing the ciphersuite name + */ const char *mbedtls_ssl_get_ciphersuite_name( const int ciphersuite_id ) { const mbedtls_ssl_ciphersuite_t *cur; - cur = mbedtls_ssl_ciphersuite_from_id( ciphersuite_id ); - if( cur == NULL ) return( "unknown" ); - return( cur->name ); } +/** + * \brief Return the ID of the ciphersuite associated with the + * given name + * + * \param ciphersuite_name SSL ciphersuite name + * + * \return the ID with the ciphersuite or 0 if not found + */ int mbedtls_ssl_get_ciphersuite_id( const char *ciphersuite_name ) { const mbedtls_ssl_ciphersuite_t *cur; - cur = mbedtls_ssl_ciphersuite_from_string( ciphersuite_name ); - if( cur == NULL ) return( 0 ); - return( cur->id ); } diff --git a/third_party/mbedtls/ssl_ciphersuites.h b/third_party/mbedtls/ssl_ciphersuites.h index 70ae12609..5c9dbc7d2 100644 --- a/third_party/mbedtls/ssl_ciphersuites.h +++ b/third_party/mbedtls/ssl_ciphersuites.h @@ -1,127 +1,96 @@ -/* clang-format off */ - -/** - * \file ssl_ciphersuites.h - * - * \brief SSL Ciphersuites for mbed TLS - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_SSL_CIPHERSUITES_H -#define MBEDTLS_SSL_CIPHERSUITES_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "third_party/mbedtls/pk.h" +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_SSL_CIPHERSUITES_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_SSL_CIPHERSUITES_H_ #include "third_party/mbedtls/cipher.h" +#include "third_party/mbedtls/config.h" #include "third_party/mbedtls/md.h" - -#ifdef __cplusplus -extern "C" { -#endif +#include "third_party/mbedtls/pk.h" +COSMOPOLITAN_C_START_ +/* clang-format off */ /* * Supported ciphersuites (Official IANA names) */ -#define MBEDTLS_TLS_RSA_WITH_NULL_MD5 0x01 /**< Weak! */ -#define MBEDTLS_TLS_RSA_WITH_NULL_SHA 0x02 /**< Weak! */ +#define MBEDTLS_TLS_RSA_WITH_NULL_MD5 0x0001 /**< Weak! */ +#define MBEDTLS_TLS_RSA_WITH_NULL_SHA 0x0002 /**< Weak! */ -#define MBEDTLS_TLS_RSA_WITH_RC4_128_MD5 0x04 -#define MBEDTLS_TLS_RSA_WITH_RC4_128_SHA 0x05 -#define MBEDTLS_TLS_RSA_WITH_DES_CBC_SHA 0x09 /**< Weak! Not in TLS 1.2 */ +#define MBEDTLS_TLS_RSA_WITH_RC4_128_MD5 0x0004 +#define MBEDTLS_TLS_RSA_WITH_RC4_128_SHA 0x0005 +#define MBEDTLS_TLS_RSA_WITH_DES_CBC_SHA 0x0009 /**< Weak! Not in TLS 1.2 */ -#define MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA 0x0A +#define MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA 0x000A -#define MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA 0x15 /**< Weak! Not in TLS 1.2 */ -#define MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA 0x16 +#define MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA 0x0015 /**< Weak! Not in TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA 0x0016 -#define MBEDTLS_TLS_PSK_WITH_NULL_SHA 0x2C /**< Weak! */ -#define MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA 0x2D /**< Weak! */ -#define MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA 0x2E /**< Weak! */ -#define MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA 0x2F +#define MBEDTLS_TLS_PSK_WITH_NULL_SHA 0x002C /**< Weak! */ +#define MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA 0x002D /**< Weak! */ +#define MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA 0x002E /**< Weak! */ +#define MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA 0x002F -#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA 0x33 -#define MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA 0x35 -#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA 0x39 +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA 0x0033 +#define MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA 0x0035 +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA 0x0039 -#define MBEDTLS_TLS_RSA_WITH_NULL_SHA256 0x3B /**< Weak! */ -#define MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256 0x3C /**< TLS 1.2 */ -#define MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256 0x3D /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_WITH_NULL_SHA256 0x003B /**< Weak! */ +#define MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256 0x003C /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256 0x003D /**< TLS 1.2 */ -#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA 0x41 -#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x45 +#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA 0x0041 +#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x0045 -#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 0x67 /**< TLS 1.2 */ -#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 0x6B /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 0x0067 /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 0x006B /**< TLS 1.2 */ -#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA 0x84 -#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x88 +#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA 0x0084 +#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x0088 -#define MBEDTLS_TLS_PSK_WITH_RC4_128_SHA 0x8A -#define MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA 0x8B -#define MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA 0x8C -#define MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA 0x8D +#define MBEDTLS_TLS_PSK_WITH_RC4_128_SHA 0x008A +#define MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA 0x008B +#define MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA 0x008C +#define MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA 0x008D -#define MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA 0x8E -#define MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA 0x8F -#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA 0x90 -#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA 0x91 +#define MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA 0x008E +#define MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA 0x008F +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA 0x0090 +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA 0x0091 -#define MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA 0x92 -#define MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA 0x93 -#define MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA 0x94 -#define MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA 0x95 +#define MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA 0x0092 +#define MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA 0x0093 +#define MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA 0x0094 +#define MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA 0x0095 -#define MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256 0x9C /**< TLS 1.2 */ -#define MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384 0x9D /**< TLS 1.2 */ -#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 0x9E /**< TLS 1.2 */ -#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 0x9F /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256 0x009C /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384 0x009D /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 0x009E /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 0x009F /**< TLS 1.2 */ -#define MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256 0xA8 /**< TLS 1.2 */ -#define MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384 0xA9 /**< TLS 1.2 */ -#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 0xAA /**< TLS 1.2 */ -#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 0xAB /**< TLS 1.2 */ -#define MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 0xAC /**< TLS 1.2 */ -#define MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 0xAD /**< TLS 1.2 */ +#define MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256 0x00A8 /**< TLS 1.2 */ +#define MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384 0x00A9 /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 0x00AA /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 0x00AB /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 0x00AC /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 0x00AD /**< TLS 1.2 */ -#define MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256 0xAE -#define MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384 0xAF -#define MBEDTLS_TLS_PSK_WITH_NULL_SHA256 0xB0 /**< Weak! */ -#define MBEDTLS_TLS_PSK_WITH_NULL_SHA384 0xB1 /**< Weak! */ +#define MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256 0x00AE +#define MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384 0x00AF +#define MBEDTLS_TLS_PSK_WITH_NULL_SHA256 0x00B0 /**< Weak! */ +#define MBEDTLS_TLS_PSK_WITH_NULL_SHA384 0x00B1 /**< Weak! */ -#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 0xB2 -#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 0xB3 -#define MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256 0xB4 /**< Weak! */ -#define MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384 0xB5 /**< Weak! */ +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 0x00B2 +#define MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 0x00B3 +#define MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256 0x00B4 /**< Weak! */ +#define MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384 0x00B5 /**< Weak! */ -#define MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 0xB6 -#define MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 0xB7 -#define MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA256 0xB8 /**< Weak! */ -#define MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA384 0xB9 /**< Weak! */ +#define MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 0x00B6 +#define MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 0x00B7 +#define MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA256 0x00B8 /**< Weak! */ +#define MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA384 0x00B9 /**< Weak! */ -#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 0xBA /**< TLS 1.2 */ -#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0xBE /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x00BA /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x00BE /**< TLS 1.2 */ -#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 0xC0 /**< TLS 1.2 */ -#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0xC4 /**< TLS 1.2 */ +#define MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x00C0 /**< TLS 1.2 */ +#define MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x00C4 /**< TLS 1.2 */ #define MBEDTLS_TLS_ECDH_ECDSA_WITH_NULL_SHA 0xC001 /**< Weak! */ #define MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA 0xC002 /**< Not in SSL3! */ @@ -291,92 +260,19 @@ extern "C" { */ typedef enum { MBEDTLS_KEY_EXCHANGE_NONE = 0, - MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_KEY_EXCHANGE_ECJPAKE, + MBEDTLS_KEY_EXCHANGE_RSA = 1, + MBEDTLS_KEY_EXCHANGE_DHE_RSA = 2, + MBEDTLS_KEY_EXCHANGE_ECDHE_RSA = 3, + MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA = 4, + MBEDTLS_KEY_EXCHANGE_PSK = 5, + MBEDTLS_KEY_EXCHANGE_DHE_PSK = 6, + MBEDTLS_KEY_EXCHANGE_RSA_PSK = 7, + MBEDTLS_KEY_EXCHANGE_ECDHE_PSK = 8, + MBEDTLS_KEY_EXCHANGE_ECDH_RSA = 9, + MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA = 10, + MBEDTLS_KEY_EXCHANGE_ECJPAKE = 11, } mbedtls_key_exchange_type_t; -/* Key exchanges using a certificate */ -#if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) -#define MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED -#endif - -/* Key exchanges allowing client certificate requests */ -#if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) -#define MBEDTLS_KEY_EXCHANGE_CERT_REQ_ALLOWED_ENABLED -#endif - -/* Key exchanges involving server signature in ServerKeyExchange */ -#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) -#define MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED -#endif - -/* Key exchanges using ECDH */ -#if defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) -#define MBEDTLS_KEY_EXCHANGE_SOME_ECDH_ENABLED -#endif - -/* Key exchanges that don't involve ephemeral keys */ -#if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_SOME_ECDH_ENABLED) -#define MBEDTLS_KEY_EXCHANGE_SOME_NON_PFS_ENABLED -#endif - -/* Key exchanges that involve ephemeral keys */ -#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) -#define MBEDTLS_KEY_EXCHANGE_SOME_PFS_ENABLED -#endif - -/* Key exchanges using a PSK */ -#if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) -#define MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED -#endif - -/* Key exchanges using DHE */ -#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) -#define MBEDTLS_KEY_EXCHANGE_SOME_DHE_ENABLED -#endif - -/* Key exchanges using ECDHE */ -#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) -#define MBEDTLS_KEY_EXCHANGE_SOME_ECDHE_ENABLED -#endif - typedef struct mbedtls_ssl_ciphersuite_t mbedtls_ssl_ciphersuite_t; #define MBEDTLS_CIPHERSUITE_WEAK 0x01 /**< Weak ciphersuite flag */ @@ -391,20 +287,17 @@ struct mbedtls_ssl_ciphersuite_t { int id; const char * name; - - mbedtls_cipher_type_t cipher; - mbedtls_md_type_t mac; - mbedtls_key_exchange_type_t key_exchange; - - int min_major_ver; - int min_minor_ver; - int max_major_ver; - int max_minor_ver; - + unsigned char cipher; /* mbedtls_cipher_type_t */ + unsigned char mac; /* mbedtls_md_type_t */ + unsigned char key_exchange; /* mbedtls_key_exchange_type_t */ + unsigned char min_major_ver; + unsigned char min_minor_ver; + unsigned char max_major_ver; + unsigned char max_minor_ver; unsigned char flags; }; -const int *mbedtls_ssl_list_ciphersuites( void ); +const uint16_t *mbedtls_ssl_list_ciphersuites( void ); const mbedtls_ssl_ciphersuite_t *mbedtls_ssl_ciphersuite_from_string( const char *ciphersuite_name ); const mbedtls_ssl_ciphersuite_t *mbedtls_ssl_ciphersuite_from_id( int ciphersuite_id ); @@ -488,6 +381,7 @@ static inline int mbedtls_ssl_ciphersuite_cert_req_allowed( const mbedtls_ssl_ci static inline int mbedtls_ssl_ciphersuite_uses_srv_cert( const mbedtls_ssl_ciphersuite_t *info ) { + if (!info) return 0; /* TODO: wut */ switch( info->key_exchange ) { case MBEDTLS_KEY_EXCHANGE_RSA: @@ -551,8 +445,5 @@ static inline int mbedtls_ssl_ciphersuite_uses_server_signature( const mbedtls_s } #endif /* MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED */ -#ifdef __cplusplus -} -#endif - -#endif /* ssl_ciphersuites.h */ +COSMOPOLITAN_C_END_ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_SSL_CIPHERSUITES_H_ */ diff --git a/third_party/mbedtls/ssl_cli.c b/third_party/mbedtls/ssl_cli.c index 128a4725c..00d3afd45 100644 --- a/third_party/mbedtls/ssl_cli.c +++ b/third_party/mbedtls/ssl_cli.c @@ -1,5 +1,17 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/debug.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/ssl.h" +#include "third_party/mbedtls/ssl_internal.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * SSLv3/TLSv1 client-side functions * @@ -19,37 +31,8 @@ * limitations under the License. */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_SSL_CLI_C) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - -#include "third_party/mbedtls/sheesh.h" -#include "third_party/mbedtls/ssl.h" -#include "third_party/mbedtls/ssl_internal.h" -#include "third_party/mbedtls/debug.h" -#include "third_party/mbedtls/error.h" - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -#include "third_party/mbedtls/psa_util.h" -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - - - -#if defined(MBEDTLS_HAVE_TIME) -#include "third_party/mbedtls/platform_time.h" -#endif - -#if defined(MBEDTLS_SSL_SESSION_TICKETS) -#include "third_party/mbedtls/platform_util.h" -#endif - #if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED) static int ssl_conf_has_static_psk( mbedtls_ssl_config const *conf ) { @@ -58,34 +41,11 @@ static int ssl_conf_has_static_psk( mbedtls_ssl_config const *conf ) { return( 0 ); } - if( conf->psk != NULL && conf->psk_len != 0 ) return( 1 ); - -#if defined(MBEDTLS_USE_PSA_CRYPTO) - if( ! mbedtls_svc_key_id_is_null( conf->psk_opaque ) ) - return( 1 ); -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - return( 0 ); } -#if defined(MBEDTLS_USE_PSA_CRYPTO) -static int ssl_conf_has_static_raw_psk( mbedtls_ssl_config const *conf ) -{ - if( conf->psk_identity == NULL || - conf->psk_identity_len == 0 ) - { - return( 0 ); - } - - if( conf->psk != NULL && conf->psk_len != 0 ) - return( 1 ); - - return( 0 ); -} -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - #endif /* MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED */ #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) @@ -210,7 +170,7 @@ static int ssl_write_signature_algorithms_ext( mbedtls_ssl_context *ssl, { unsigned char *p = buf; size_t sig_alg_len = 0; - const int *md; + const uint8_t *md; #if defined(MBEDTLS_RSA_C) || defined(MBEDTLS_ECDSA_C) unsigned char *sig_alg_list = buf + 6; @@ -559,36 +519,6 @@ static int ssl_write_max_fragment_length_ext( mbedtls_ssl_context *ssl, } #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) -static int ssl_write_truncated_hmac_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - const unsigned char *end, - size_t *olen ) -{ - unsigned char *p = buf; - - *olen = 0; - - if( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED ) - return( 0 ); - - MBEDTLS_SSL_DEBUG_MSG( 3, - ( "client hello, adding truncated_hmac extension" ) ); - - MBEDTLS_SSL_CHK_BUF_PTR( p, end, 4 ); - - *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_TRUNCATED_HMAC >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_TRUNCATED_HMAC ) & 0xFF ); - - *p++ = 0x00; - *p++ = 0x00; - - *olen = 4; - - return( 0 ); -} -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ - #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) static int ssl_write_encrypt_then_mac_ext( mbedtls_ssl_context *ssl, unsigned char *buf, @@ -596,26 +526,18 @@ static int ssl_write_encrypt_then_mac_ext( mbedtls_ssl_context *ssl, size_t *olen ) { unsigned char *p = buf; - *olen = 0; - if( ssl->conf->encrypt_then_mac == MBEDTLS_SSL_ETM_DISABLED || ssl->conf->max_minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) return( 0 ); - MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding encrypt_then_mac extension" ) ); - MBEDTLS_SSL_CHK_BUF_PTR( p, end, 4 ); - *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC >> 8 ) & 0xFF ); *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC ) & 0xFF ); - *p++ = 0x00; *p++ = 0x00; - *olen = 4; - return( 0 ); } #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ @@ -983,7 +905,7 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) const unsigned char *end; unsigned char offer_compress; - const int *ciphersuites; + const uint16_t *ciphersuites; const mbedtls_ssl_ciphersuite_t *ciphersuite_info; #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) @@ -1358,16 +1280,6 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) ext_len += olen; #endif -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - if( ( ret = ssl_write_truncated_hmac_ext( ssl, p + 2 + ext_len, - end, &olen ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "ssl_write_truncated_hmac_ext", ret ); - return( ret ); - } - ext_len += olen; -#endif - #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) if( ( ret = ssl_write_encrypt_then_mac_ext( ssl, p + 2 + ext_len, end, &olen ) ) != 0 ) @@ -1533,31 +1445,6 @@ static int ssl_parse_max_fragment_length_ext( mbedtls_ssl_context *ssl, } #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) -static int ssl_parse_truncated_hmac_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) -{ - if( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED || - len != 0 ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, - ( "non-matching truncated HMAC extension" ) ); - mbedtls_ssl_send_alert_message( - ssl, - MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); - } - - ((void) buf); - - ssl->session_negotiate->trunc_hmac = MBEDTLS_SSL_TRUNC_HMAC_ENABLED; - - return( 0 ); -} -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ - #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) static int ssl_parse_cid_ext( mbedtls_ssl_context *ssl, const unsigned char *buf, @@ -2420,19 +2307,6 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) break; #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - case MBEDTLS_TLS_EXT_TRUNCATED_HMAC: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found truncated_hmac extension" ) ); - - if( ( ret = ssl_parse_truncated_hmac_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } - - break; -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ - #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) case MBEDTLS_TLS_EXT_CID: MBEDTLS_SSL_DEBUG_MSG( 3, ( "found CID extension" ) ); @@ -2687,68 +2561,6 @@ static int ssl_check_server_ecdh_params( const mbedtls_ssl_context *ssl ) MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ -#if defined(MBEDTLS_USE_PSA_CRYPTO) && \ - ( defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) ) -static int ssl_parse_server_ecdh_params_psa( mbedtls_ssl_context *ssl, - unsigned char **p, - unsigned char *end ) -{ - uint16_t tls_id; - size_t ecdh_bits = 0; - uint8_t ecpoint_len; - mbedtls_ssl_handshake_params *handshake = ssl->handshake; - - /* - * Parse ECC group - */ - - if( end - *p < 4 ) - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - - /* First byte is curve_type; only named_curve is handled */ - if( *(*p)++ != MBEDTLS_ECP_TLS_NAMED_CURVE ) - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - - /* Next two bytes are the namedcurve value */ - tls_id = *(*p)++; - tls_id <<= 8; - tls_id |= *(*p)++; - - /* Convert EC group to PSA key type. */ - if( ( handshake->ecdh_psa_type = - mbedtls_psa_parse_tls_ecc_group( tls_id, &ecdh_bits ) ) == 0 ) - { - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - if( ecdh_bits > 0xffff ) - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - handshake->ecdh_bits = (uint16_t) ecdh_bits; - - /* - * Put peer's ECDH public key in the format understood by PSA. - */ - - ecpoint_len = *(*p)++; - if( (size_t)( end - *p ) < ecpoint_len ) - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - - if( mbedtls_psa_tls_ecpoint_to_psa_ec( - *p, ecpoint_len, - handshake->ecdh_psa_peerkey, - sizeof( handshake->ecdh_psa_peerkey ), - &handshake->ecdh_psa_peerkey_len ) != 0 ) - { - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); - } - - *p += ecpoint_len; - return( 0 ); -} -#endif /* MBEDTLS_USE_PSA_CRYPTO && - ( MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED || - MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED ) */ - #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) @@ -2845,13 +2657,11 @@ static int ssl_write_encrypted_pms( mbedtls_ssl_context *ssl, size_t len_bytes = ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ? 0 : 2; unsigned char *p = ssl->handshake->premaster + pms_offset; mbedtls_pk_context * peer_pk; - if( offset + len_bytes > MBEDTLS_SSL_OUT_CONTENT_LEN ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small for encrypted pms" ) ); return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); } - /* * Generate (part of) the pre-master as * struct { @@ -2862,15 +2672,12 @@ static int ssl_write_encrypted_pms( mbedtls_ssl_context *ssl, mbedtls_ssl_write_version( ssl->conf->max_major_ver, ssl->conf->max_minor_ver, ssl->conf->transport, p ); - if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p + 2, 46 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "f_rng", ret ); return( ret ); } - ssl->handshake->pmslen = 48; - #if !defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) peer_pk = &ssl->handshake->peer_pubkey; #else /* !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ @@ -2882,7 +2689,6 @@ static int ssl_write_encrypted_pms( mbedtls_ssl_context *ssl, } peer_pk = &ssl->session_negotiate->peer_cert->pk; #endif /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ - /* * Now write it out, encrypted */ @@ -2891,7 +2697,6 @@ static int ssl_write_encrypted_pms( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_MSG( 1, ( "certificate key type mismatch" ) ); return( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); } - if( ( ret = mbedtls_pk_encrypt( peer_pk, p, ssl->handshake->pmslen, ssl->out_msg + offset + len_bytes, olen, @@ -2901,7 +2706,6 @@ static int ssl_write_encrypted_pms( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_rsa_pkcs1_encrypt", ret ); return( ret ); } - #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) if( len_bytes == 2 ) @@ -2911,7 +2715,6 @@ static int ssl_write_encrypted_pms( mbedtls_ssl_context *ssl, *olen += 2; } #endif - #if !defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) /* We don't need the peer's public key anymore. Free it. */ mbedtls_pk_free( peer_pk ); @@ -2934,16 +2737,13 @@ static int ssl_parse_signature_algorithm( mbedtls_ssl_context *ssl, ((void) ssl); *md_alg = MBEDTLS_MD_NONE; *pk_alg = MBEDTLS_PK_NONE; - /* Only in TLS 1.2 */ if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) { return( 0 ); } - if( (*p) + 2 > end ) return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - /* * Get hash algorithm */ @@ -2954,7 +2754,6 @@ static int ssl_parse_signature_algorithm( mbedtls_ssl_context *ssl, ( "Server used unsupported HashAlgorithm %d", *(p)[0] ) ); return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } - /* * Get signature algorithm */ @@ -2965,7 +2764,6 @@ static int ssl_parse_signature_algorithm( mbedtls_ssl_context *ssl, ( "server used unsupported SignatureAlgorithm %d", (*p)[1] ) ); return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } - /* * Check if the hash is acceptable */ @@ -2975,13 +2773,11 @@ static int ssl_parse_signature_algorithm( mbedtls_ssl_context *ssl, ( "server used HashAlgorithm %d that was not offered", *(p)[0] ) ); return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } - MBEDTLS_SSL_DEBUG_MSG( 2, ( "Server used SignatureAlgorithm %d", (*p)[1] ) ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "Server used HashAlgorithm %d", (*p)[0] ) ); *p += 2; - return( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED || @@ -2996,7 +2792,6 @@ static int ssl_get_ecdh_params_from_cert( mbedtls_ssl_context *ssl ) int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; const mbedtls_ecp_keypair *peer_key; mbedtls_pk_context * peer_pk; - #if !defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) peer_pk = &ssl->handshake->peer_pubkey; #else /* !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ @@ -3008,35 +2803,29 @@ static int ssl_get_ecdh_params_from_cert( mbedtls_ssl_context *ssl ) } peer_pk = &ssl->session_negotiate->peer_cert->pk; #endif /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ - if( ! mbedtls_pk_can_do( peer_pk, MBEDTLS_PK_ECKEY ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "server key not ECDH capable" ) ); return( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); } - peer_key = mbedtls_pk_ec( *peer_pk ); - if( ( ret = mbedtls_ecdh_get_params( &ssl->handshake->ecdh_ctx, peer_key, MBEDTLS_ECDH_THEIRS ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ecdh_get_params" ), ret ); return( ret ); } - if( ssl_check_server_ecdh_params( ssl ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server certificate (ECDH curve)" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } - #if !defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) /* We don't need the peer's public key anymore. Free it, * so that more RAM is available for upcoming expensive * operations like ECDHE. */ mbedtls_pk_free( peer_pk ); #endif /* !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ - return( ret ); } #endif /* MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || @@ -3048,9 +2837,7 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) const mbedtls_ssl_ciphersuite_t *ciphersuite_info = ssl->handshake->ciphersuite_info; unsigned char *p = NULL, *end = NULL; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse server key exchange" ) ); - #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA ) { @@ -3061,7 +2848,6 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) ((void) p); ((void) end); #endif - #if defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || @@ -3076,7 +2862,6 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE ); return( ret ); } - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse server key exchange" ) ); ssl->state++; return( 0 ); @@ -3085,7 +2870,6 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) ((void) end); #endif /* MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ - #if defined(MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED) if( ssl->handshake->ecrs_enabled && ssl->handshake->ecrs_state == ssl_ecrs_ske_start_processing ) @@ -3093,13 +2877,11 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) goto start_processing; } #endif - if( ( ret = mbedtls_ssl_read_record( ssl, 1 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); return( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); @@ -3109,7 +2891,6 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE ); return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - /* * ServerKeyExchange may be skipped with PSK and RSA-PSK when the server * doesn't use a psk_identity_hint @@ -3124,27 +2905,22 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) ssl->keep_current_message = 1; goto exit; } - MBEDTLS_SSL_DEBUG_MSG( 1, ( "server key exchange message must not be skipped" ) ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - #if defined(MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED) if( ssl->handshake->ecrs_enabled ) ssl->handshake->ecrs_state = ssl_ecrs_ske_start_processing; - start_processing: #endif p = ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ); end = ssl->in_msg + ssl->in_hslen; MBEDTLS_SSL_DEBUG_BUF( 3, "server key exchange", p, end - p ); - #if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED) if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || @@ -3162,7 +2938,6 @@ start_processing: } } /* FALLTROUGH */ #endif /* MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED */ - #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || @@ -3189,26 +2964,6 @@ start_processing: else #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ -#if defined(MBEDTLS_USE_PSA_CRYPTO) && \ - ( defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) ) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) - { - if( ssl_parse_server_ecdh_params_psa( ssl, &p, end ) != 0 ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - mbedtls_ssl_send_alert_message( - ssl, - MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - } - else -#endif /* MBEDTLS_USE_PSA_CRYPTO && - ( MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED || - MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED ) */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) @@ -3251,7 +3006,6 @@ start_processing: MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - #if defined(MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED) if( mbedtls_ssl_ciphersuite_uses_server_signature( ciphersuite_info ) ) { @@ -3262,9 +3016,7 @@ start_processing: unsigned char *params = ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ); size_t params_len = p - params; void *rs_ctx = NULL; - mbedtls_pk_context * peer_pk; - /* * Handle the digitally-signed structure */ @@ -3282,7 +3034,6 @@ start_processing: MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER ); return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } - if( pk_alg != mbedtls_ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info ) ) { @@ -3302,7 +3053,6 @@ start_processing: if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 ) { pk_alg = mbedtls_ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info ); - /* Default hash for ECDSA is SHA-1 */ if( pk_alg == MBEDTLS_PK_ECDSA && md_alg == MBEDTLS_MD_NONE ) md_alg = MBEDTLS_MD_SHA1; @@ -3313,11 +3063,9 @@ start_processing: MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - /* * Read signature */ - if( p > end - 2 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); @@ -3329,7 +3077,6 @@ start_processing: } sig_len = ( p[0] << 8 ) | p[1]; p += 2; - if( p != end - sig_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); @@ -3339,9 +3086,7 @@ start_processing: MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } - MBEDTLS_SSL_DEBUG_BUF( 3, "signature", p, sig_len ); - /* * Compute the hash that has been signed */ @@ -3375,9 +3120,7 @@ start_processing: MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - MBEDTLS_SSL_DEBUG_BUF( 3, "parameters hash", hash, hashlen ); - #if !defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) peer_pk = &ssl->handshake->peer_pubkey; #else /* !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ @@ -3389,7 +3132,6 @@ start_processing: } peer_pk = &ssl->session_negotiate->peer_cert->pk; #endif /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ - /* * Verify signature */ @@ -3402,12 +3144,10 @@ start_processing: MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE ); return( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); } - #if defined(MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED) if( ssl->handshake->ecrs_enabled ) rs_ctx = &ssl->handshake->ecrs_ctx.pk; #endif - if( ( ret = mbedtls_pk_verify_restartable( peer_pk, md_alg, hash, hashlen, p, sig_len, rs_ctx ) ) != 0 ) { @@ -3425,7 +3165,6 @@ start_processing: #endif return( ret ); } - #if !defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) /* We don't need the peer's public key anymore. Free it, * so that more RAM is available for upcoming expensive @@ -3434,12 +3173,9 @@ start_processing: #endif /* !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ } #endif /* MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED */ - exit: ssl->state++; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse server key exchange" ) ); - return( 0 ); } @@ -3448,20 +3184,19 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) { const mbedtls_ssl_ciphersuite_t *ciphersuite_info = ssl->handshake->ciphersuite_info; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate request" ) ); - if( ! mbedtls_ssl_ciphersuite_cert_req_allowed( ciphersuite_info ) ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate request" ) ); ssl->state++; return( 0 ); } - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } + #else /* MBEDTLS_KEY_EXCHANGE_CERT_REQ_ALLOWED_ENABLED */ + static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; @@ -3470,22 +3205,18 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) size_t cert_type_len = 0, dn_len = 0; const mbedtls_ssl_ciphersuite_t *ciphersuite_info = ssl->handshake->ciphersuite_info; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate request" ) ); - if( ! mbedtls_ssl_ciphersuite_cert_req_allowed( ciphersuite_info ) ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate request" ) ); ssl->state++; return( 0 ); } - if( ( ret = mbedtls_ssl_read_record( ssl, 1 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); return( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate request message" ) ); @@ -3495,20 +3226,16 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE ); return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - ssl->state++; ssl->client_auth = ( ssl->in_msg[0] == MBEDTLS_SSL_HS_CERTIFICATE_REQUEST ); - MBEDTLS_SSL_DEBUG_MSG( 3, ( "got %s certificate request", ssl->client_auth ? "a" : "no" ) ); - if( ssl->client_auth == 0 ) { /* Current message is probably the ServerHelloDone */ ssl->keep_current_message = 1; goto exit; } - /* * struct { * ClientCertificateType certificate_types<1..2^8-1>; @@ -3534,7 +3261,6 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) * superficially sane. */ buf = ssl->in_msg; - /* certificate_types */ if( ssl->in_hslen <= mbedtls_ssl_hs_hdr_len( ssl ) ) { @@ -3545,7 +3271,6 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) } cert_type_len = buf[mbedtls_ssl_hs_hdr_len( ssl )]; n = cert_type_len; - /* * In the subsequent code there are two paths that read from buf: * * the length of the signature algorithms field (if minor version of @@ -3563,7 +3288,6 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); } - /* supported_signature_algorithms */ #if defined(MBEDTLS_SSL_PROTO_TLS1_2) if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) @@ -3575,7 +3299,6 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) unsigned char* sig_alg; size_t i; #endif - /* * The furthest access in buf is in the loop few lines below: * sig_alg[i + 1], @@ -3598,7 +3321,6 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); } - #if defined(MBEDTLS_DEBUG_C) sig_alg = buf + mbedtls_ssl_hs_hdr_len( ssl ) + 3 + n; for( i = 0; i < sig_alg_len; i += 2 ) @@ -3608,15 +3330,12 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) sig_alg[i], sig_alg[i + 1] ) ); } #endif - n += 2 + sig_alg_len; } #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - /* certificate_authorities */ dn_len = ( ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 1 + n] << 8 ) | ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n] ) ); - n += dn_len; if( ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) + 3 + n ) { @@ -3625,10 +3344,8 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); } - exit: MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse certificate request" ) ); - return( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_CERT_REQ_ALLOWED_ENABLED */ @@ -3636,21 +3353,17 @@ exit: static int ssl_parse_server_hello_done( mbedtls_ssl_context *ssl ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse server hello done" ) ); - if( ( ret = mbedtls_ssl_read_record( ssl, 1 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); return( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello done message" ) ); return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - if( ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) || ssl->in_msg[0] != MBEDTLS_SSL_HS_SERVER_HELLO_DONE ) { @@ -3659,30 +3372,23 @@ static int ssl_parse_server_hello_done( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE ); } - ssl->state++; - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_recv_flight_completed( ssl ); #endif - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse server hello done" ) ); - return( 0 ); } static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - size_t header_len; size_t content_len; const mbedtls_ssl_ciphersuite_t *ciphersuite_info = ssl->handshake->ciphersuite_info; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write client key exchange" ) ); - #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA ) { @@ -3690,11 +3396,9 @@ static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl ) * DHM key exchange -- send G^X mod P */ content_len = ssl->handshake->dhm_ctx.len; - ssl->out_msg[4] = (unsigned char)( content_len >> 8 ); ssl->out_msg[5] = (unsigned char)( content_len ); header_len = 6; - ret = mbedtls_dhm_make_public( &ssl->handshake->dhm_ctx, (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ), &ssl->out_msg[header_len], content_len, @@ -3704,10 +3408,8 @@ static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_make_public", ret ); return( ret ); } - MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: X ", &ssl->handshake->dhm_ctx.X ); MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: GX", &ssl->handshake->dhm_ctx.GX ); - if( ( ret = mbedtls_dhm_calc_secret( &ssl->handshake->dhm_ctx, ssl->handshake->premaster, MBEDTLS_PREMASTER_SIZE, @@ -3717,98 +3419,10 @@ static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_calc_secret", ret ); return( ret ); } - MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: K ", &ssl->handshake->dhm_ctx.K ); } else #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED */ -#if defined(MBEDTLS_USE_PSA_CRYPTO) && \ - ( defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) ) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) - { - psa_status_t status; - psa_key_attributes_t key_attributes; - - mbedtls_ssl_handshake_params *handshake = ssl->handshake; - - unsigned char own_pubkey[MBEDTLS_PSA_MAX_EC_PUBKEY_LENGTH]; - size_t own_pubkey_len; - unsigned char *own_pubkey_ecpoint; - size_t own_pubkey_ecpoint_len; - - header_len = 4; - - MBEDTLS_SSL_DEBUG_MSG( 1, ( "Perform PSA-based ECDH computation." ) ); - - /* - * Generate EC private key for ECDHE exchange. - */ - - /* The master secret is obtained from the shared ECDH secret by - * applying the TLS 1.2 PRF with a specific salt and label. While - * the PSA Crypto API encourages combining key agreement schemes - * such as ECDH with fixed KDFs such as TLS 1.2 PRF, it does not - * yet support the provisioning of salt + label to the KDF. - * For the time being, we therefore need to split the computation - * of the ECDH secret and the application of the TLS 1.2 PRF. */ - key_attributes = psa_key_attributes_init(); - psa_set_key_usage_flags( &key_attributes, PSA_KEY_USAGE_DERIVE ); - psa_set_key_algorithm( &key_attributes, PSA_ALG_ECDH ); - psa_set_key_type( &key_attributes, handshake->ecdh_psa_type ); - psa_set_key_bits( &key_attributes, handshake->ecdh_bits ); - - /* Generate ECDH private key. */ - status = psa_generate_key( &key_attributes, - &handshake->ecdh_psa_privkey ); - if( status != PSA_SUCCESS ) - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); - - /* Export the public part of the ECDH private key from PSA - * and convert it to ECPoint format used in ClientKeyExchange. */ - status = psa_export_public_key( handshake->ecdh_psa_privkey, - own_pubkey, sizeof( own_pubkey ), - &own_pubkey_len ); - if( status != PSA_SUCCESS ) - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); - - if( mbedtls_psa_tls_psa_ec_to_ecpoint( own_pubkey, - own_pubkey_len, - &own_pubkey_ecpoint, - &own_pubkey_ecpoint_len ) != 0 ) - { - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); - } - - /* Copy ECPoint structure to outgoing message buffer. */ - ssl->out_msg[header_len] = (unsigned char) own_pubkey_ecpoint_len; - memcpy( ssl->out_msg + header_len + 1, - own_pubkey_ecpoint, own_pubkey_ecpoint_len ); - content_len = own_pubkey_ecpoint_len + 1; - - /* The ECDH secret is the premaster secret used for key derivation. */ - - /* Compute ECDH shared secret. */ - status = psa_raw_key_agreement( PSA_ALG_ECDH, - handshake->ecdh_psa_privkey, - handshake->ecdh_psa_peerkey, - handshake->ecdh_psa_peerkey_len, - ssl->handshake->premaster, - sizeof( ssl->handshake->premaster ), - &ssl->handshake->pmslen ); - if( status != PSA_SUCCESS ) - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); - - status = psa_destroy_key( handshake->ecdh_psa_privkey ); - if( status != PSA_SUCCESS ) - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); - handshake->ecdh_psa_privkey = MBEDTLS_SVC_KEY_ID_INIT; - } - else -#endif /* MBEDTLS_USE_PSA_CRYPTO && - ( MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED || - MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED ) */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ @@ -3822,17 +3436,14 @@ static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl ) * ECDH key exchange -- send client public value */ header_len = 4; - #if defined(MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED) if( ssl->handshake->ecrs_enabled ) { if( ssl->handshake->ecrs_state == ssl_ecrs_cke_ecdh_calc_secret ) goto ecdh_calc_secret; - mbedtls_ecdh_enable_restart( &ssl->handshake->ecdh_ctx ); } #endif - ret = mbedtls_ecdh_make_public( &ssl->handshake->ecdh_ctx, &content_len, &ssl->out_msg[header_len], 1000, @@ -3846,17 +3457,14 @@ static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl ) #endif return( ret ); } - MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx, MBEDTLS_DEBUG_ECDH_Q ); - #if defined(MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED) if( ssl->handshake->ecrs_enabled ) { ssl->handshake->ecrs_n = content_len; ssl->handshake->ecrs_state = ssl_ecrs_cke_ecdh_calc_secret; } - ecdh_calc_secret: if( ssl->handshake->ecrs_enabled ) content_len = ssl->handshake->ecrs_n; @@ -3874,7 +3482,6 @@ ecdh_calc_secret: #endif return( ret ); } - MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx, MBEDTLS_DEBUG_ECDH_Z ); } @@ -3896,25 +3503,20 @@ ecdh_calc_secret: * ciphersuites we offered, so this should never happen. */ return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - header_len = 4; content_len = ssl->conf->psk_identity_len; - if( header_len + 2 + content_len > MBEDTLS_SSL_OUT_CONTENT_LEN ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "psk identity too long or SSL buffer too short" ) ); return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); } - ssl->out_msg[header_len++] = (unsigned char)( content_len >> 8 ); ssl->out_msg[header_len++] = (unsigned char)( content_len ); - memcpy( ssl->out_msg + header_len, ssl->conf->psk_identity, ssl->conf->psk_identity_len ); header_len += ssl->conf->psk_identity_len; - #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK ) { @@ -3925,12 +3527,6 @@ ecdh_calc_secret: #if defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) { -#if defined(MBEDTLS_USE_PSA_CRYPTO) - /* Opaque PSKs are currently only supported for PSK-only suites. */ - if( ssl_conf_has_static_raw_psk( ssl->conf ) == 0 ) - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - if( ( ret = ssl_write_encrypted_pms( ssl, header_len, &content_len, 2 ) ) != 0 ) return( ret ); @@ -3940,17 +3536,10 @@ ecdh_calc_secret: #if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) { -#if defined(MBEDTLS_USE_PSA_CRYPTO) - /* Opaque PSKs are currently only supported for PSK-only suites. */ - if( ssl_conf_has_static_raw_psk( ssl->conf ) == 0 ) - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - /* * ClientDiffieHellmanPublic public (DHM send G^X mod P) */ content_len = ssl->handshake->dhm_ctx.len; - if( header_len + 2 + content_len > MBEDTLS_SSL_OUT_CONTENT_LEN ) { @@ -3958,10 +3547,8 @@ ecdh_calc_secret: ( "psk identity or DHM size too long or SSL buffer too short" ) ); return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); } - ssl->out_msg[header_len++] = (unsigned char)( content_len >> 8 ); ssl->out_msg[header_len++] = (unsigned char)( content_len ); - ret = mbedtls_dhm_make_public( &ssl->handshake->dhm_ctx, (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ), &ssl->out_msg[header_len], content_len, @@ -3977,12 +3564,6 @@ ecdh_calc_secret: #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) { -#if defined(MBEDTLS_USE_PSA_CRYPTO) - /* Opaque PSKs are currently only supported for PSK-only suites. */ - if( ssl_conf_has_static_raw_psk( ssl->conf ) == 0 ) - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - /* * ClientECDiffieHellmanPublic public; */ @@ -3996,7 +3577,6 @@ ecdh_calc_secret: MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_make_public", ret ); return( ret ); } - MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx, MBEDTLS_DEBUG_ECDH_Q ); } @@ -4006,19 +3586,6 @@ ecdh_calc_secret: MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - -#if defined(MBEDTLS_USE_PSA_CRYPTO) && \ - defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK && - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 && - ssl_conf_has_static_raw_psk( ssl->conf ) == 0 ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, - ( "skip PMS generation for opaque PSK" ) ); - } - else -#endif /* MBEDTLS_USE_PSA_CRYPTO && - MBEDTLS_KEY_EXCHANGE_PSK_ENABLED */ if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, ciphersuite_info->key_exchange ) ) != 0 ) { @@ -4043,7 +3610,6 @@ ecdh_calc_secret: if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { header_len = 4; - ret = mbedtls_ecjpake_write_round_two( &ssl->handshake->ecjpake_ctx, ssl->out_msg + header_len, MBEDTLS_SSL_OUT_CONTENT_LEN - header_len, @@ -4054,7 +3620,6 @@ ecdh_calc_secret: MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_write_round_two", ret ); return( ret ); } - ret = mbedtls_ecjpake_derive_secret( &ssl->handshake->ecjpake_ctx, ssl->handshake->premaster, 32, &ssl->handshake->pmslen, ssl->conf->f_rng, ssl->conf->p_rng ); @@ -4071,50 +3636,44 @@ ecdh_calc_secret: MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - ssl->out_msglen = header_len + content_len; ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE; ssl->out_msg[0] = MBEDTLS_SSL_HS_CLIENT_KEY_EXCHANGE; - ssl->state++; - if( ( ret = mbedtls_ssl_write_handshake_msg( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_handshake_msg", ret ); return( ret ); } - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write client key exchange" ) ); - return( 0 ); } #if !defined(MBEDTLS_KEY_EXCHANGE_CERT_REQ_ALLOWED_ENABLED) + static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) { const mbedtls_ssl_ciphersuite_t *ciphersuite_info = ssl->handshake->ciphersuite_info; int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate verify" ) ); - if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_derive_keys", ret ); return( ret ); } - if( !mbedtls_ssl_ciphersuite_cert_req_allowed( ciphersuite_info ) ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate verify" ) ); ssl->state++; return( 0 ); } - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } + #else /* !MBEDTLS_KEY_EXCHANGE_CERT_REQ_ALLOWED_ENABLED */ + static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) { int ret = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE; @@ -4126,9 +3685,7 @@ static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) mbedtls_md_type_t md_alg = MBEDTLS_MD_NONE; size_t hashlen; void *rs_ctx = NULL; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate verify" ) ); - #if defined(MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED) if( ssl->handshake->ecrs_enabled && ssl->handshake->ecrs_state == ssl_ecrs_crt_vrfy_sign ) @@ -4136,45 +3693,37 @@ static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) goto sign; } #endif - if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_derive_keys", ret ); return( ret ); } - if( !mbedtls_ssl_ciphersuite_cert_req_allowed( ciphersuite_info ) ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate verify" ) ); ssl->state++; return( 0 ); } - if( ssl->client_auth == 0 || mbedtls_ssl_own_cert( ssl ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate verify" ) ); ssl->state++; return( 0 ); } - if( mbedtls_ssl_own_key( ssl ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no private key for certificate" ) ); return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); } - /* * Make a signature of the handshake digests */ #if defined(MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED) if( ssl->handshake->ecrs_enabled ) ssl->handshake->ecrs_state = ssl_ecrs_crt_vrfy_sign; - sign: #endif - ssl->handshake->calc_verify( ssl, hash, &hashlen ); - #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) @@ -4192,7 +3741,6 @@ sign: * SHA(handshake_messages); */ md_alg = MBEDTLS_MD_NONE; - /* * For ECDSA, default hash is SHA-1 only */ @@ -4236,7 +3784,6 @@ sign: ssl->out_msg[4] = MBEDTLS_SSL_HASH_SHA256; } ssl->out_msg[5] = mbedtls_ssl_sig_from_pk( mbedtls_ssl_own_key( ssl ) ); - /* Info from md_alg will be used instead */ hashlen = 0; offset = 2; @@ -4247,12 +3794,10 @@ sign: MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - #if defined(MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED) if( ssl->handshake->ecrs_enabled ) rs_ctx = &ssl->handshake->ecrs_ctx.pk; #endif - if( ( ret = mbedtls_pk_sign_restartable( mbedtls_ssl_own_key( ssl ), md_alg, hash_start, hashlen, ssl->out_msg + 6 + offset, &n, @@ -4265,24 +3810,18 @@ sign: #endif return( ret ); } - ssl->out_msg[4 + offset] = (unsigned char)( n >> 8 ); ssl->out_msg[5 + offset] = (unsigned char)( n ); - ssl->out_msglen = 6 + n + offset; ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE; ssl->out_msg[0] = MBEDTLS_SSL_HS_CERTIFICATE_VERIFY; - ssl->state++; - if( ( ret = mbedtls_ssl_write_handshake_msg( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_handshake_msg", ret ); return( ret ); } - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write certificate verify" ) ); - return( ret ); } #endif /* MBEDTLS_KEY_EXCHANGE_CERT_REQ_ALLOWED_ENABLED */ @@ -4295,15 +3834,12 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) size_t ticket_len; unsigned char *ticket; const unsigned char *msg; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse new session ticket" ) ); - if( ( ret = mbedtls_ssl_read_record( ssl, 1 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); return( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) ); @@ -4313,7 +3849,6 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE ); return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - /* * struct { * uint32 ticket_lifetime_hint; @@ -4332,14 +3867,10 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET ); } - msg = ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ); - lifetime = ( ((uint32_t) msg[0]) << 24 ) | ( msg[1] << 16 ) | ( msg[2] << 8 ) | ( msg[3] ); - ticket_len = ( msg[4] << 8 ) | ( msg[5] ); - if( ticket_len + 6 + mbedtls_ssl_hs_hdr_len( ssl ) != ssl->in_hslen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) ); @@ -4347,20 +3878,16 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET ); } - MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket length: %" MBEDTLS_PRINTF_SIZET, ticket_len ) ); - /* We're not waiting for a NewSessionTicket message any more */ ssl->handshake->new_session_ticket = 0; ssl->state = MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC; - /* * Zero-length ticket means the server changed his mind and doesn't want * to send a ticket after all, so just forget it */ if( ticket_len == 0 ) return( 0 ); - if( ssl->session != NULL && ssl->session->ticket != NULL ) { mbedtls_platform_zeroize( ssl->session->ticket, @@ -4369,13 +3896,11 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) ssl->session->ticket = NULL; ssl->session->ticket_len = 0; } - mbedtls_platform_zeroize( ssl->session_negotiate->ticket, ssl->session_negotiate->ticket_len ); mbedtls_free( ssl->session_negotiate->ticket ); ssl->session_negotiate->ticket = NULL; ssl->session_negotiate->ticket_len = 0; - if( ( ticket = mbedtls_calloc( 1, ticket_len ) ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "ticket alloc failed" ) ); @@ -4383,13 +3908,10 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR ); return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } - memcpy( ticket, msg + 6, ticket_len ); - ssl->session_negotiate->ticket = ticket; ssl->session_negotiate->ticket_len = ticket_len; ssl->session_negotiate->ticket_lifetime = lifetime; - /* * RFC 5077 section 3.4: * "If the client receives a session ticket from the server, then it @@ -4397,28 +3919,39 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) */ MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket in use, discarding session id" ) ); ssl->session_negotiate->id_len = 0; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse new session ticket" ) ); - return( 0 ); } #endif /* MBEDTLS_SSL_SESSION_TICKETS */ -/* - * SSL handshake -- client side -- single step +/** + * \brief Perform a single step of the SSL client handshake + * + * \note The state of the context (ssl->state) will be at + * the next state after this function returns \c 0. Do not + * call this function if state is MBEDTLS_SSL_HANDSHAKE_OVER. + * + * \param ssl SSL context + * + * \return See mbedtls_ssl_handshake(). + * + * \warning If this function returns something other than \c 0, + * #MBEDTLS_ERR_SSL_WANT_READ, #MBEDTLS_ERR_SSL_WANT_WRITE, + * #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS or + * #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS, you must stop using + * the SSL context for reading or writing, and either free it + * or call \c mbedtls_ssl_session_reset() on it before + * re-using it for a new connection; the current connection + * must be closed. */ int mbedtls_ssl_handshake_client_step( mbedtls_ssl_context *ssl ) { int ret = 0; - if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER || ssl->handshake == NULL ) return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - MBEDTLS_SSL_DEBUG_MSG( 2, ( "client state: %d", ssl->state ) ); - if( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) return( ret ); - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) @@ -4427,7 +3960,6 @@ int mbedtls_ssl_handshake_client_step( mbedtls_ssl_context *ssl ) return( ret ); } #endif /* MBEDTLS_SSL_PROTO_DTLS */ - /* Change state now, so that it is right in mbedtls_ssl_read_record(), used * by DTLS for dropping out-of-sequence ChangeCipherSpec records */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) @@ -4437,20 +3969,17 @@ int mbedtls_ssl_handshake_client_step( mbedtls_ssl_context *ssl ) ssl->state = MBEDTLS_SSL_SERVER_NEW_SESSION_TICKET; } #endif - switch( ssl->state ) { case MBEDTLS_SSL_HELLO_REQUEST: ssl->state = MBEDTLS_SSL_CLIENT_HELLO; break; - /* * ==> ClientHello */ case MBEDTLS_SSL_CLIENT_HELLO: ret = ssl_write_client_hello( ssl ); break; - /* * <== ServerHello * Certificate @@ -4461,23 +3990,18 @@ int mbedtls_ssl_handshake_client_step( mbedtls_ssl_context *ssl ) case MBEDTLS_SSL_SERVER_HELLO: ret = ssl_parse_server_hello( ssl ); break; - case MBEDTLS_SSL_SERVER_CERTIFICATE: ret = mbedtls_ssl_parse_certificate( ssl ); break; - case MBEDTLS_SSL_SERVER_KEY_EXCHANGE: ret = ssl_parse_server_key_exchange( ssl ); break; - case MBEDTLS_SSL_CERTIFICATE_REQUEST: ret = ssl_parse_certificate_request( ssl ); break; - case MBEDTLS_SSL_SERVER_HELLO_DONE: ret = ssl_parse_server_hello_done( ssl ); break; - /* * ==> ( Certificate/Alert ) * ClientKeyExchange @@ -4488,23 +4012,18 @@ int mbedtls_ssl_handshake_client_step( mbedtls_ssl_context *ssl ) case MBEDTLS_SSL_CLIENT_CERTIFICATE: ret = mbedtls_ssl_write_certificate( ssl ); break; - case MBEDTLS_SSL_CLIENT_KEY_EXCHANGE: ret = ssl_write_client_key_exchange( ssl ); break; - case MBEDTLS_SSL_CERTIFICATE_VERIFY: ret = ssl_write_certificate_verify( ssl ); break; - case MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC: ret = mbedtls_ssl_write_change_cipher_spec( ssl ); break; - case MBEDTLS_SSL_CLIENT_FINISHED: ret = mbedtls_ssl_write_finished( ssl ); break; - /* * <== ( NewSessionTicket ) * ChangeCipherSpec @@ -4515,29 +4034,24 @@ int mbedtls_ssl_handshake_client_step( mbedtls_ssl_context *ssl ) ret = ssl_parse_new_session_ticket( ssl ); break; #endif - case MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC: ret = mbedtls_ssl_parse_change_cipher_spec( ssl ); break; - case MBEDTLS_SSL_SERVER_FINISHED: ret = mbedtls_ssl_parse_finished( ssl ); break; - case MBEDTLS_SSL_FLUSH_BUFFERS: MBEDTLS_SSL_DEBUG_MSG( 2, ( "handshake: done" ) ); ssl->state = MBEDTLS_SSL_HANDSHAKE_WRAPUP; break; - case MBEDTLS_SSL_HANDSHAKE_WRAPUP: mbedtls_ssl_handshake_wrapup( ssl ); break; - default: MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid state %d", ssl->state ) ); return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - return( ret ); } + #endif /* MBEDTLS_SSL_CLI_C */ diff --git a/third_party/mbedtls/ssl_cookie.c b/third_party/mbedtls/ssl_cookie.c index d2741f965..f129b4adf 100644 --- a/third_party/mbedtls/ssl_cookie.c +++ b/third_party/mbedtls/ssl_cookie.c @@ -1,5 +1,16 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/ssl_cookie.h" +#include "third_party/mbedtls/ssl_internal.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * DTLS cookie callbacks implementation * @@ -23,23 +34,8 @@ * to store and retrieve the session information. */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_SSL_COOKIE_C) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - -#include "third_party/mbedtls/ssl_cookie.h" -#include "third_party/mbedtls/ssl_internal.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/platform_util.h" - - /* * If DTLS is in use, then at least one of SHA-1, SHA-256, SHA-512 is * available. Try SHA-256 first, 512 wastes resources since we need to stay @@ -74,10 +70,6 @@ void mbedtls_ssl_cookie_init( mbedtls_ssl_cookie_ctx *ctx ) ctx->serial = 0; #endif ctx->timeout = MBEDTLS_SSL_COOKIE_TIMEOUT; - -#if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_init( &ctx->mutex ); -#endif } void mbedtls_ssl_cookie_set_timeout( mbedtls_ssl_cookie_ctx *ctx, unsigned long delay ) @@ -88,11 +80,6 @@ void mbedtls_ssl_cookie_set_timeout( mbedtls_ssl_cookie_ctx *ctx, unsigned long void mbedtls_ssl_cookie_free( mbedtls_ssl_cookie_ctx *ctx ) { mbedtls_md_free( &ctx->hmac_ctx ); - -#if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_free( &ctx->mutex ); -#endif - mbedtls_platform_zeroize( ctx, sizeof( mbedtls_ssl_cookie_ctx ) ); } @@ -173,21 +160,8 @@ int mbedtls_ssl_cookie_write( void *p_ctx, (*p)[3] = (unsigned char)( t ); *p += 4; -#if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR + ret ); -#endif - - ret = ssl_cookie_hmac( &ctx->hmac_ctx, *p - 4, - p, end, cli_id, cli_id_len ); - -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR + - MBEDTLS_ERR_THREADING_MUTEX_ERROR ); -#endif - - return( ret ); + return ssl_cookie_hmac( &ctx->hmac_ctx, *p - 4, + p, end, cli_id, cli_id_len ); } /* @@ -209,22 +183,11 @@ int mbedtls_ssl_cookie_check( void *p_ctx, if( cookie_len != COOKIE_LEN ) return( -1 ); -#if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR + ret ); -#endif - if( ssl_cookie_hmac( &ctx->hmac_ctx, cookie, &p, p + sizeof( ref_hmac ), cli_id, cli_id_len ) != 0 ) ret = -1; -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR + - MBEDTLS_ERR_THREADING_MUTEX_ERROR ); -#endif - if( ret != 0 ) return( ret ); diff --git a/third_party/mbedtls/ssl_cookie.h b/third_party/mbedtls/ssl_cookie.h index 67118c032..8934a58f3 100644 --- a/third_party/mbedtls/ssl_cookie.h +++ b/third_party/mbedtls/ssl_cookie.h @@ -1,40 +1,8 @@ -/* clang-format off */ - -/** - * \file ssl_cookie.h - * - * \brief DTLS cookie callbacks implementation - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_SSL_COOKIE_H #define MBEDTLS_SSL_COOKIE_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/ssl.h" - -#if defined(MBEDTLS_THREADING_C) -#include "third_party/mbedtls/threading.h" -#endif +/* clang-format off */ /** * \name SECTION: Module settings @@ -64,10 +32,6 @@ typedef struct mbedtls_ssl_cookie_ctx #endif unsigned long timeout; /*!< timeout delay, in seconds if HAVE_TIME, or in number of tickets issued */ - -#if defined(MBEDTLS_THREADING_C) - mbedtls_threading_mutex_t mutex; -#endif } mbedtls_ssl_cookie_ctx; /** diff --git a/third_party/mbedtls/ssl_internal.h b/third_party/mbedtls/ssl_internal.h index ff6de4f21..99f398349 100644 --- a/third_party/mbedtls/ssl_internal.h +++ b/third_party/mbedtls/ssl_internal.h @@ -1,71 +1,14 @@ -/* clang-format off */ - -/** - * \file ssl_internal.h - * - * \brief Internal functions shared by the SSL modules - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_SSL_INTERNAL_H #define MBEDTLS_SSL_INTERNAL_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#include "third_party/mbedtls/ssl.h" #include "third_party/mbedtls/cipher.h" - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -#include "third_party/mbedtls/crypto.h" -#endif - -#if defined(MBEDTLS_MD5_C) +#include "third_party/mbedtls/config.h" #include "third_party/mbedtls/md5.h" -#endif - -#if defined(MBEDTLS_SHA1_C) #include "third_party/mbedtls/sha1.h" -#endif - -#if defined(MBEDTLS_SHA256_C) #include "third_party/mbedtls/sha256.h" -#endif - -#if defined(MBEDTLS_SHA512_C) #include "third_party/mbedtls/sha512.h" -#endif - -#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) -#include "third_party/mbedtls/ecjpake.h" -#endif - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/psa_util.h" -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - -#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \ - !defined(inline) && !defined(__cplusplus) -#define inline __inline -#endif +#include "third_party/mbedtls/ssl.h" +#include "third_party/zlib/zlib.h" +/* clang-format off */ /* Determine minimum supported version */ #define MBEDTLS_SSL_MIN_MAJOR_VERSION MBEDTLS_SSL_MAJOR_VERSION_3 @@ -108,14 +51,6 @@ #endif /* MBEDTLS_SSL_PROTO_TLS1_1 */ #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ -/* Shorthand for restartable ECC */ -#if defined(MBEDTLS_ECP_RESTARTABLE) && \ - defined(MBEDTLS_SSL_CLI_C) && \ - defined(MBEDTLS_SSL_PROTO_TLS1_2) && \ - defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) -#define MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED -#endif - #define MBEDTLS_SSL_INITIAL_HANDSHAKE 0 #define MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS 1 /* In progress */ #define MBEDTLS_SSL_RENEGOTIATION_DONE 2 /* Done or aborted */ @@ -146,29 +81,6 @@ #define MBEDTLS_SSL_COMPRESSION_ADD 0 #endif -/* This macro determines whether CBC is supported. */ -#if defined(MBEDTLS_CIPHER_MODE_CBC) && \ - ( defined(MBEDTLS_AES_C) || \ - defined(MBEDTLS_CAMELLIA_C) || \ - defined(MBEDTLS_ARIA_C) || \ - defined(MBEDTLS_DES_C) ) -#define MBEDTLS_SSL_SOME_SUITES_USE_CBC -#endif - -/* This macro determines whether the CBC construct used in TLS 1.0-1.2 (as - * opposed to the very different CBC construct used in SSLv3) is supported. */ -#if defined(MBEDTLS_SSL_SOME_SUITES_USE_CBC) && \ - ( defined(MBEDTLS_SSL_PROTO_TLS1) || \ - defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ - defined(MBEDTLS_SSL_PROTO_TLS1_2) ) -#define MBEDTLS_SSL_SOME_SUITES_USE_TLS_CBC -#endif - -#if defined(MBEDTLS_ARC4_C) || defined(MBEDTLS_CIPHER_NULL_CIPHER) || \ - defined(MBEDTLS_SSL_SOME_SUITES_USE_CBC) -#define MBEDTLS_SSL_SOME_MODES_USE_MAC -#endif - #if defined(MBEDTLS_SSL_SOME_MODES_USE_MAC) /* Ciphersuites using HMAC */ #if defined(MBEDTLS_SHA512_C) @@ -572,19 +484,11 @@ struct mbedtls_ssl_handshake_params #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_2) #if defined(MBEDTLS_SHA256_C) -#if defined(MBEDTLS_USE_PSA_CRYPTO) - psa_hash_operation_t fin_sha256_psa; -#else mbedtls_sha256_context fin_sha256; #endif -#endif #if defined(MBEDTLS_SHA512_C) -#if defined(MBEDTLS_USE_PSA_CRYPTO) - psa_hash_operation_t fin_sha384_psa; -#else mbedtls_sha512_context fin_sha512; #endif -#endif #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ void (*update_checksum)(mbedtls_ssl_context *, const unsigned char *, size_t); @@ -917,8 +821,6 @@ void mbedtls_ssl_transform_free( mbedtls_ssl_transform *transform ); */ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl ); -int mbedtls_ssl_handshake_client_step( mbedtls_ssl_context *ssl ); -int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl ); void mbedtls_ssl_handshake_wrapup( mbedtls_ssl_context *ssl ); int mbedtls_ssl_send_fatal_handshake_failure( mbedtls_ssl_context *ssl ); @@ -1006,28 +908,22 @@ void mbedtls_ssl_update_handshake_status( mbedtls_ssl_context *ssl ); * following the above definition. * */ -int mbedtls_ssl_read_record( mbedtls_ssl_context *ssl, - unsigned update_hs_digest ); -int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ); +int mbedtls_ssl_read_record( mbedtls_ssl_context *, unsigned ); +int mbedtls_ssl_fetch_input( mbedtls_ssl_context *, size_t ); +int mbedtls_ssl_write_handshake_msg( mbedtls_ssl_context * ); +int mbedtls_ssl_write_record( mbedtls_ssl_context *, uint8_t ); +int mbedtls_ssl_flush_output( mbedtls_ssl_context * ); +int mbedtls_ssl_parse_certificate( mbedtls_ssl_context * ); +int mbedtls_ssl_write_certificate( mbedtls_ssl_context * ); +int mbedtls_ssl_parse_change_cipher_spec( mbedtls_ssl_context * ); +int mbedtls_ssl_write_change_cipher_spec( mbedtls_ssl_context * ); +int mbedtls_ssl_parse_finished( mbedtls_ssl_context * ); +int mbedtls_ssl_write_finished( mbedtls_ssl_context * ); -int mbedtls_ssl_write_handshake_msg( mbedtls_ssl_context *ssl ); -int mbedtls_ssl_write_record( mbedtls_ssl_context *ssl, uint8_t force_flush ); -int mbedtls_ssl_flush_output( mbedtls_ssl_context *ssl ); - -int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ); -int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ); - -int mbedtls_ssl_parse_change_cipher_spec( mbedtls_ssl_context *ssl ); -int mbedtls_ssl_write_change_cipher_spec( mbedtls_ssl_context *ssl ); - -int mbedtls_ssl_parse_finished( mbedtls_ssl_context *ssl ); -int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ); - -void mbedtls_ssl_optimize_checksum( mbedtls_ssl_context *ssl, - const mbedtls_ssl_ciphersuite_t *ciphersuite_info ); +void mbedtls_ssl_optimize_checksum( mbedtls_ssl_context *, const mbedtls_ssl_ciphersuite_t * ); #if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED) -int mbedtls_ssl_psk_derive_premaster( mbedtls_ssl_context *ssl, mbedtls_key_exchange_type_t key_ex ); +int mbedtls_ssl_psk_derive_premaster( mbedtls_ssl_context *, mbedtls_key_exchange_type_t ); /** * Get the first defined PSK by order of precedence: @@ -1043,50 +939,26 @@ static inline int mbedtls_ssl_get_psk( const mbedtls_ssl_context *ssl, *psk = ssl->handshake->psk; *psk_len = ssl->handshake->psk_len; } - else if( ssl->conf->psk != NULL && ssl->conf->psk_len > 0 ) { *psk = ssl->conf->psk; *psk_len = ssl->conf->psk_len; } - else { *psk = NULL; *psk_len = 0; return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); } - return( 0 ); } -#if defined(MBEDTLS_USE_PSA_CRYPTO) -/** - * Get the first defined opaque PSK by order of precedence: - * 1. handshake PSK set by \c mbedtls_ssl_set_hs_psk_opaque() in the PSK - * callback - * 2. static PSK configured by \c mbedtls_ssl_conf_psk_opaque() - * Return an opaque PSK - */ -static inline psa_key_id_t mbedtls_ssl_get_opaque_psk( - const mbedtls_ssl_context *ssl ) -{ - if( ! mbedtls_svc_key_id_is_null( ssl->handshake->psk_opaque ) ) - return( ssl->handshake->psk_opaque ); - - if( ! mbedtls_svc_key_id_is_null( ssl->conf->psk_opaque ) ) - return( ssl->conf->psk_opaque ); - - return( MBEDTLS_SVC_KEY_ID_INIT ); -} -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - #endif /* MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED */ #if defined(MBEDTLS_PK_C) -unsigned char mbedtls_ssl_sig_from_pk( mbedtls_pk_context *pk ); -unsigned char mbedtls_ssl_sig_from_pk_alg( mbedtls_pk_type_t type ); -mbedtls_pk_type_t mbedtls_ssl_pk_alg_from_sig( unsigned char sig ); +unsigned char mbedtls_ssl_sig_from_pk( mbedtls_pk_context * ); +unsigned char mbedtls_ssl_sig_from_pk_alg( mbedtls_pk_type_t ); +mbedtls_pk_type_t mbedtls_ssl_pk_alg_from_sig( unsigned char ); #endif mbedtls_md_type_t mbedtls_ssl_md_alg_from_hash( unsigned char hash ); @@ -1256,15 +1128,9 @@ int mbedtls_ssl_get_key_exchange_md_tls1_2( mbedtls_ssl_context *ssl, } #endif -void mbedtls_ssl_transform_init( mbedtls_ssl_transform *transform ); -int mbedtls_ssl_encrypt_buf( mbedtls_ssl_context *ssl, - mbedtls_ssl_transform *transform, - mbedtls_record *rec, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); -int mbedtls_ssl_decrypt_buf( mbedtls_ssl_context const *ssl, - mbedtls_ssl_transform *transform, - mbedtls_record *rec ); +void mbedtls_ssl_transform_init( mbedtls_ssl_transform * ); +int mbedtls_ssl_encrypt_buf( mbedtls_ssl_context *, mbedtls_ssl_transform *, mbedtls_record *, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_ssl_decrypt_buf( mbedtls_ssl_context const *, mbedtls_ssl_transform *, mbedtls_record * ); /* Length of the "epoch" field in the record header */ static inline size_t mbedtls_ssl_ep_len( const mbedtls_ssl_context *ssl ) diff --git a/third_party/mbedtls/ssl_invasive.h b/third_party/mbedtls/ssl_invasive.h index 71257f78e..c74b9a7b2 100644 --- a/third_party/mbedtls/ssl_invasive.h +++ b/third_party/mbedtls/ssl_invasive.h @@ -1,38 +1,11 @@ -/* clang-format off */ - -/** - * \file ssl_invasive.h - * - * \brief SSL module: interfaces for invasive testing only. - * - * The interfaces in this file are intended for testing purposes only. - * They SHOULD NOT be made available in library integrations except when - * building the library for testing. - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_SSL_INVASIVE_H -#define MBEDTLS_SSL_INVASIVE_H - +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_SSL_INVASIVE_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_SSL_INVASIVE_H_ #include "third_party/mbedtls/common.h" #include "third_party/mbedtls/md.h" +#if !(__ASSEMBLER__ + __LINKER__ + 0) +COSMOPOLITAN_C_START_ +#if defined(MBEDTLS_TEST_HOOKS) && defined(MBEDTLS_SSL_SOME_SUITES_USE_TLS_CBC) -#if defined(MBEDTLS_TEST_HOOKS) && \ - defined(MBEDTLS_SSL_SOME_SUITES_USE_TLS_CBC) /** \brief Compute the HMAC of variable-length data with constant flow. * * This function computes the HMAC of the concatenation of \p add_data and \p @@ -67,12 +40,11 @@ * \retval MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED * The hardware accelerator failed. */ -int mbedtls_ssl_cf_hmac( - mbedtls_md_context_t *ctx, - const unsigned char *add_data, size_t add_data_len, - const unsigned char *data, size_t data_len_secret, - size_t min_data_len, size_t max_data_len, - unsigned char *output ); +int mbedtls_ssl_cf_hmac(mbedtls_md_context_t *ctx, + const unsigned char *add_data, size_t add_data_len, + const unsigned char *data, size_t data_len_secret, + size_t min_data_len, size_t max_data_len, + unsigned char *output); /** \brief Copy data from a secret position with constant flow. * @@ -92,11 +64,12 @@ int mbedtls_ssl_cf_hmac( * \param offset_max The maximal value of \p offset_secret. * \param len The number of bytes to copy. */ -void mbedtls_ssl_cf_memcpy_offset( unsigned char *dst, - const unsigned char *src_base, - size_t offset_secret, - size_t offset_min, size_t offset_max, - size_t len ); -#endif /* MBEDTLS_TEST_HOOKS && MBEDTLS_SSL_SOME_SUITES_USE_TLS_CBC */ +void mbedtls_ssl_cf_memcpy_offset(unsigned char *dst, + const unsigned char *src_base, + size_t offset_secret, size_t offset_min, + size_t offset_max, size_t len); -#endif /* MBEDTLS_SSL_INVASIVE_H */ +#endif /* MBEDTLS_TEST_HOOKS && MBEDTLS_SSL_SOME_SUITES_USE_TLS_CBC */ +COSMOPOLITAN_C_END_ +#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_SSL_INVASIVE_H_ */ diff --git a/third_party/mbedtls/ssl_msg.c b/third_party/mbedtls/ssl_msg.c index 947167bb8..235fb1f05 100644 --- a/third_party/mbedtls/ssl_msg.c +++ b/third_party/mbedtls/ssl_msg.c @@ -1,5 +1,21 @@ -/* clang-format off */ +#include "libc/limits.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/debug.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/iana.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/ssl.h" +#include "third_party/mbedtls/ssl_internal.h" +#include "third_party/mbedtls/ssl_invasive.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * Generic SSL/TLS messaging layer functions * (record layer + retransmission state machine) @@ -28,37 +44,8 @@ * http://www.ietf.org/rfc/rfc4346.txt */ -#include "libc/limits.h" -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_SSL_TLS_C) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - -#include "third_party/mbedtls/ssl.h" -#include "third_party/mbedtls/ssl_internal.h" -#include "third_party/mbedtls/debug.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/version.h" - -#include "third_party/mbedtls/ssl_invasive.h" - - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -#include "third_party/mbedtls/psa_util.h" -#include "third_party/mbedtls/crypto.h" -#endif - -#if defined(MBEDTLS_X509_CRT_PARSE_C) -#include "third_party/mbedtls/oid.h" -#endif - static uint32_t ssl_get_hs_total_len( mbedtls_ssl_context const *ssl ); /* @@ -91,12 +78,55 @@ int mbedtls_ssl_check_timer( mbedtls_ssl_context *ssl ) return( 0 ); } -#if defined(MBEDTLS_SSL_RECORD_CHECKING) static int ssl_parse_record_header( mbedtls_ssl_context const *ssl, unsigned char *buf, size_t len, mbedtls_record *rec ); +/** + * \brief Check whether a buffer contains a valid and authentic record + * that has not been seen before. (DTLS only). + * + * This function does not change the user-visible state + * of the SSL context. Its sole purpose is to provide + * an indication of the legitimacy of an incoming record. + * + * This can be useful e.g. in distributed server environments + * using the DTLS Connection ID feature, in which connections + * might need to be passed between service instances on a change + * of peer address, but where such disruptive operations should + * only happen after the validity of incoming records has been + * confirmed. + * + * \param ssl The SSL context to use. + * \param buf The address of the buffer holding the record to be checked. + * This must be a read/write buffer of length \p buflen Bytes. + * \param buflen The length of \p buf in Bytes. + * + * \note This routine only checks whether the provided buffer begins + * with a valid and authentic record that has not been seen + * before, but does not check potential data following the + * initial record. In particular, it is possible to pass DTLS + * datagrams containing multiple records, in which case only + * the first record is checked. + * + * \note This function modifies the input buffer \p buf. If you need + * to preserve the original record, you have to maintain a copy. + * + * \return \c 0 if the record is valid and authentic and has not been + * seen before. + * \return MBEDTLS_ERR_SSL_INVALID_MAC if the check completed + * successfully but the record was found to be not authentic. + * \return MBEDTLS_ERR_SSL_INVALID_RECORD if the check completed + * successfully but the record was found to be invalid for + * a reason different from authenticity checking. + * \return MBEDTLS_ERR_SSL_UNEXPECTED_RECORD if the check completed + * successfully but the record was found to be unexpected + * in the state of the SSL context, including replayed records. + * \return Another negative error code on different kinds of failure. + * In this case, the SSL context becomes unusable and needs + * to be freed or reset before reuse. + */ int mbedtls_ssl_check_record( mbedtls_ssl_context const *ssl, unsigned char *buf, size_t buflen ) @@ -155,7 +185,6 @@ exit: MBEDTLS_SSL_DEBUG_MSG( 1, ( "<= mbedtls_ssl_check_record" ) ); return( ret ); } -#endif /* MBEDTLS_SSL_RECORD_CHECKING */ #define SSL_DONT_FORCE_FLUSH 0 #define SSL_FORCE_FLUSH 1 @@ -4975,16 +5004,17 @@ int mbedtls_ssl_handle_message_type( mbedtls_ssl_context *ssl ) return( MBEDTLS_ERR_SSL_INVALID_RECORD ); } - MBEDTLS_SSL_DEBUG_MSG( 2, ( "got an alert message, type: [%u:%u]", - ssl->in_msg[0], ssl->in_msg[1] ) ); + MBEDTLS_SSL_DEBUG_MSG( 2, ( "got an alert message, type: [%u:%s]", + ssl->in_msg[0], GetAlertDescription(ssl->in_msg[1]) ) ); /* * Ignore non-fatal alerts, except close_notify and no_renegotiation */ if( ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_FATAL ) { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "is a fatal alert message (msg %d)", - ssl->in_msg[1] ) ); + MBEDTLS_SSL_DEBUG_MSG( 1, ( "is a fatal alert message (%s)", + GetAlertDescription(ssl->in_msg[1]) ) ); + ssl->fatal_alert = ssl->in_msg[1]; return( MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE ); } @@ -5056,9 +5086,25 @@ int mbedtls_ssl_send_fatal_handshake_failure( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE ) ); } +/** + * \brief Send an alert message + * + * \param ssl SSL context + * \param level The alert level of the message + * (MBEDTLS_SSL_ALERT_LEVEL_WARNING or MBEDTLS_SSL_ALERT_LEVEL_FATAL) + * \param message The alert message (SSL_ALERT_MSG_*) + * + * \return 0 if successful, or a specific SSL error code. + * + * \note If this function returns something other than 0 or + * MBEDTLS_ERR_SSL_WANT_READ/WRITE, you must stop using + * the SSL context for reading or writing, and either free it or + * call \c mbedtls_ssl_session_reset() on it before re-using it + * for a new connection; the current connection must be closed. + */ int mbedtls_ssl_send_alert_message( mbedtls_ssl_context *ssl, - unsigned char level, - unsigned char message ) + unsigned char level, + unsigned char message ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; @@ -5192,7 +5238,6 @@ static size_t ssl_transform_get_explicit_iv_len( { if( transform->minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 ) return( 0 ); - return( transform->ivlen - transform->fixed_ivlen ); } @@ -5223,13 +5268,11 @@ void mbedtls_ssl_update_out_pointers( mbedtls_ssl_context *ssl, #endif ssl->out_iv = ssl->out_hdr + 5; } - ssl->out_msg = ssl->out_iv; /* Adjust out_msg to make space for explicit IV, if used. */ if( transform != NULL ) ssl->out_msg += ssl_transform_get_explicit_iv_len( transform ); } - /* Once ssl->in_hdr as the address of the beginning of the * next incoming record is set, deduce the other pointers. * @@ -5237,7 +5280,6 @@ void mbedtls_ssl_update_out_pointers( mbedtls_ssl_context *ssl, * (entering MAC computation) in the 8 bytes before ssl->in_hdr, * and the caller has to make sure there's space for this. */ - void mbedtls_ssl_update_in_pointers( mbedtls_ssl_context *ssl ) { /* This function sets the pointers to match the case @@ -5249,7 +5291,6 @@ void mbedtls_ssl_update_in_pointers( mbedtls_ssl_context *ssl ) * will be shifted to point to the beginning of the * record plaintext. */ - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { @@ -5276,7 +5317,6 @@ void mbedtls_ssl_update_in_pointers( mbedtls_ssl_context *ssl ) #endif ssl->in_iv = ssl->in_hdr + 5; } - /* This will be adjusted at record decryption time. */ ssl->in_msg = ssl->in_iv; } @@ -5284,7 +5324,6 @@ void mbedtls_ssl_update_in_pointers( mbedtls_ssl_context *ssl ) /* * Setup an SSL context */ - void mbedtls_ssl_reset_in_out_pointers( mbedtls_ssl_context *ssl ) { /* Set the incoming and outgoing record pointers. */ @@ -5300,37 +5339,83 @@ void mbedtls_ssl_reset_in_out_pointers( mbedtls_ssl_context *ssl ) ssl->out_hdr = ssl->out_buf + 8; ssl->in_hdr = ssl->in_buf + 8; } - /* Derive other internal pointers. */ mbedtls_ssl_update_out_pointers( ssl, NULL /* no transform enabled */ ); mbedtls_ssl_update_in_pointers ( ssl ); } -/* - * SSL get accessors +/** + * \brief Return the number of application data bytes + * remaining to be read from the current record. + * + * \param ssl SSL context + * + * \return How many bytes are available in the application + * data record read buffer. + * + * \note When working over a datagram transport, this is + * useful to detect the current datagram's boundary + * in case \c mbedtls_ssl_read has written the maximal + * amount of data fitting into the input buffer. + * */ size_t mbedtls_ssl_get_bytes_avail( const mbedtls_ssl_context *ssl ) { return( ssl->in_offt == NULL ? 0 : ssl->in_msglen ); } +/** + * \brief Check if there is data already read from the + * underlying transport but not yet processed. + * + * \param ssl SSL context + * + * \return 0 if nothing's pending, 1 otherwise. + * + * \note This is different in purpose and behaviour from + * \c mbedtls_ssl_get_bytes_avail in that it considers + * any kind of unprocessed data, not only unread + * application data. If \c mbedtls_ssl_get_bytes + * returns a non-zero value, this function will + * also signal pending data, but the converse does + * not hold. For example, in DTLS there might be + * further records waiting to be processed from + * the current underlying transport's datagram. + * + * \note If this function returns 1 (data pending), this + * does not imply that a subsequent call to + * \c mbedtls_ssl_read will provide any data; + * e.g., the unprocessed data might turn out + * to be an alert or a handshake message. + * + * \note This function is useful in the following situation: + * If the SSL/TLS module successfully returns from an + * operation - e.g. a handshake or an application record + * read - and you're awaiting incoming data next, you + * must not immediately idle on the underlying transport + * to have data ready, but you need to check the value + * of this function first. The reason is that the desired + * data might already be read but not yet processed. + * If, in contrast, a previous call to the SSL/TLS module + * returned MBEDTLS_ERR_SSL_WANT_READ, it is not necessary + * to call this function, as the latter error code entails + * that all internal data has been processed. + * + */ int mbedtls_ssl_check_pending( const mbedtls_ssl_context *ssl ) { /* * Case A: We're currently holding back * a message for further processing. */ - if( ssl->keep_current_message == 1 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ssl_check_pending: record held back for processing" ) ); return( 1 ); } - /* * Case B: Further records are pending in the current datagram. */ - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && ssl->in_left > ssl->next_record_offset ) @@ -5339,17 +5424,14 @@ int mbedtls_ssl_check_pending( const mbedtls_ssl_context *ssl ) return( 1 ); } #endif /* MBEDTLS_SSL_PROTO_DTLS */ - /* * Case C: A handshake message is being processed. */ - if( ssl->in_hslen > 0 && ssl->in_hslen < ssl->in_msglen ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ssl_check_pending: more handshake messages within current record" ) ); return( 1 ); } - /* * Case D: An application data message is being processed */ @@ -5358,34 +5440,40 @@ int mbedtls_ssl_check_pending( const mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 3, ( "ssl_check_pending: application data record is being processed" ) ); return( 1 ); } - /* * In all other cases, the rest of the message can be dropped. * As in ssl_get_next_record, this needs to be adapted if * we implement support for multiple alerts in single records. */ - MBEDTLS_SSL_DEBUG_MSG( 3, ( "ssl_check_pending: nothing pending" ) ); return( 0 ); } - +/** + * \brief Return the (maximum) number of bytes added by the record + * layer: header + encryption/MAC overhead (inc. padding) + * + * \note This function is not available (always returns an error) + * when record compression is enabled. + * + * \param ssl SSL context + * + * \return Current maximum record expansion in bytes, or + * MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE if compression is + * enabled, which makes expansion much less predictable + */ int mbedtls_ssl_get_record_expansion( const mbedtls_ssl_context *ssl ) { size_t transform_expansion = 0; const mbedtls_ssl_transform *transform = ssl->transform_out; unsigned block_size; - size_t out_hdr_len = mbedtls_ssl_out_hdr_len( ssl ); - if( transform == NULL ) return( (int) out_hdr_len ); - #if defined(MBEDTLS_ZLIB_SUPPORT) if( ssl->session_out->compression != MBEDTLS_SSL_COMPRESS_NULL ) return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); #endif - switch( mbedtls_cipher_get_cipher_mode( &transform->cipher_ctx_enc ) ) { case MBEDTLS_MODE_GCM: @@ -5394,39 +5482,30 @@ int mbedtls_ssl_get_record_expansion( const mbedtls_ssl_context *ssl ) case MBEDTLS_MODE_STREAM: transform_expansion = transform->minlen; break; - case MBEDTLS_MODE_CBC: - block_size = mbedtls_cipher_get_block_size( &transform->cipher_ctx_enc ); - /* Expansion due to the addition of the MAC. */ transform_expansion += transform->maclen; - /* Expansion due to the addition of CBC padding; * Theoretically up to 256 bytes, but we never use * more than the block size of the underlying cipher. */ transform_expansion += block_size; - /* For TLS 1.1 or higher, an explicit IV is added * after the record header. */ #if defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2) if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) transform_expansion += block_size; #endif /* MBEDTLS_SSL_PROTO_TLS1_1 || MBEDTLS_SSL_PROTO_TLS1_2 */ - break; - default: MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) if( transform->out_cid_len != 0 ) transform_expansion += MBEDTLS_SSL_MAX_CID_EXPANSION; #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ - return( (int)( out_hdr_len + transform_expansion ) ); } @@ -5439,48 +5518,114 @@ static int ssl_check_ctr_renegotiate( mbedtls_ssl_context *ssl ) size_t ep_len = mbedtls_ssl_ep_len( ssl ); int in_ctr_cmp; int out_ctr_cmp; - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER || ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING || ssl->conf->disable_renegotiation == MBEDTLS_SSL_RENEGOTIATION_DISABLED ) { return( 0 ); } - in_ctr_cmp = memcmp( ssl->in_ctr + ep_len, ssl->conf->renego_period + ep_len, 8 - ep_len ); out_ctr_cmp = memcmp( ssl->cur_out_ctr + ep_len, ssl->conf->renego_period + ep_len, 8 - ep_len ); - if( in_ctr_cmp <= 0 && out_ctr_cmp <= 0 ) { return( 0 ); } - MBEDTLS_SSL_DEBUG_MSG( 1, ( "record counter limit reached: renegotiate" ) ); return( mbedtls_ssl_renegotiate( ssl ) ); } #endif /* MBEDTLS_SSL_RENEGOTIATION */ -/* - * Receive application data decrypted from the SSL layer +/** + * \brief Read at most 'len' application data bytes + * + * \param ssl SSL context + * \param buf buffer that will hold the data + * \param len maximum number of bytes to read + * + * \return The (positive) number of bytes read if successful. + * \return \c 0 if the read end of the underlying transport was closed + * without sending a CloseNotify beforehand, which might happen + * because of various reasons (internal error of an underlying + * stack, non-conformant peer not sending a CloseNotify and + * such) - in this case you must stop using the context + * (see below). + * \return #MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY if the underlying + * transport is still functional, but the peer has + * acknowledged to not send anything anymore. + * \return #MBEDTLS_ERR_SSL_WANT_READ or #MBEDTLS_ERR_SSL_WANT_WRITE + * if the handshake is incomplete and waiting for data to + * be available for reading from or writing to the underlying + * transport - in this case you must call this function again + * when the underlying transport is ready for the operation. + * \return #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS if an asynchronous + * operation is in progress (see + * mbedtls_ssl_conf_async_private_cb()) - in this case you + * must call this function again when the operation is ready. + * \return #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS if a cryptographic + * operation is in progress (see mbedtls_ecp_set_max_ops()) - + * in this case you must call this function again to complete + * the handshake when you're done attending other tasks. + * \return #MBEDTLS_ERR_SSL_CLIENT_RECONNECT if we're at the server + * side of a DTLS connection and the client is initiating a + * new connection using the same source port. See below. + * \return Another SSL error code - in this case you must stop using + * the context (see below). + * + * \warning If this function returns something other than + * a positive value, + * #MBEDTLS_ERR_SSL_WANT_READ, + * #MBEDTLS_ERR_SSL_WANT_WRITE, + * #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS, + * #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS or + * #MBEDTLS_ERR_SSL_CLIENT_RECONNECT, + * you must stop using the SSL context for reading or writing, + * and either free it or call \c mbedtls_ssl_session_reset() + * on it before re-using it for a new connection; the current + * connection must be closed. + * + * \note When this function returns #MBEDTLS_ERR_SSL_CLIENT_RECONNECT + * (which can only happen server-side), it means that a client + * is initiating a new connection using the same source port. + * You can either treat that as a connection close and wait + * for the client to resend a ClientHello, or directly + * continue with \c mbedtls_ssl_handshake() with the same + * context (as it has been reset internally). Either way, you + * must make sure this is seen by the application as a new + * connection: application state, if any, should be reset, and + * most importantly the identity of the client must be checked + * again. WARNING: not validating the identity of the client + * again, or not transmitting the new identity to the + * application layer, would allow authentication bypass! + * + * \note Remarks regarding event-driven DTLS: + * - If the function returns #MBEDTLS_ERR_SSL_WANT_READ, no datagram + * from the underlying transport layer is currently being processed, + * and it is safe to idle until the timer or the underlying transport + * signal a new event. + * - This function may return MBEDTLS_ERR_SSL_WANT_READ even if data was + * initially available on the underlying transport, as this data may have + * been only e.g. duplicated messages or a renegotiation request. + * Therefore, you must be prepared to receive MBEDTLS_ERR_SSL_WANT_READ even + * when reacting to an incoming-data event from the underlying transport. + * - On success, the datagram of the underlying transport that is currently + * being processed may contain further DTLS records. You should call + * \c mbedtls_ssl_check_pending to check for remaining records. + * */ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t n; - if( ssl == NULL || ssl->conf == NULL ) return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> read" ) ); - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { if( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) return( ret ); - if( ssl->handshake != NULL && ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) { @@ -5489,7 +5634,6 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) } } #endif - /* * Check if renegotiation is necessary and/or handshake is * in process. If yes, perform/continue, and fall through @@ -5501,7 +5645,6 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) * a handshake while waiting for the ClientHello * after a renegotiation request.) */ - #if defined(MBEDTLS_SSL_RENEGOTIATION) ret = ssl_check_ctr_renegotiate( ssl ); if( ret != MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO && @@ -5511,7 +5654,6 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) return( ret ); } #endif - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) { ret = mbedtls_ssl_handshake( ssl ); @@ -5522,7 +5664,6 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) return( ret ); } } - /* Loop as long as no application data record is available */ while( ssl->in_offt == NULL ) { @@ -5532,16 +5673,13 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) { mbedtls_ssl_set_timer( ssl, ssl->conf->read_timeout ); } - if( ( ret = mbedtls_ssl_read_record( ssl, 1 ) ) != 0 ) { if( ret == MBEDTLS_ERR_SSL_CONN_EOF ) return( 0 ); - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); return( ret ); } - if( ssl->in_msglen == 0 && ssl->in_msgtype == MBEDTLS_SSL_MSG_APPLICATION_DATA ) { @@ -5552,29 +5690,24 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) { if( ret == MBEDTLS_ERR_SSL_CONN_EOF ) return( 0 ); - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); return( ret ); } } - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "received handshake message" ) ); - /* * - For client-side, expect SERVER_HELLO_REQUEST. * - For server-side, expect CLIENT_HELLO. * - Fail (TLS) or silently drop record (DTLS) in other cases. */ - #if defined(MBEDTLS_SSL_CLI_C) if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT && ( ssl->in_msg[0] != MBEDTLS_SSL_HS_HELLO_REQUEST || ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "handshake received (not HelloRequest)" ) ); - /* With DTLS, drop the packet (probably from last handshake) */ #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) @@ -5585,13 +5718,11 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } #endif /* MBEDTLS_SSL_CLI_C */ - #if defined(MBEDTLS_SSL_SRV_C) if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && ssl->in_msg[0] != MBEDTLS_SSL_HS_CLIENT_HELLO ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "handshake received (not ClientHello)" ) ); - /* With DTLS, drop the packet (probably from last handshake) */ #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) @@ -5602,7 +5733,6 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } #endif /* MBEDTLS_SSL_SRV_C */ - #if defined(MBEDTLS_SSL_RENEGOTIATION) /* Determine whether renegotiation attempt should be accepted */ if( ! ( ssl->conf->disable_renegotiation == MBEDTLS_SSL_RENEGOTIATION_DISABLED || @@ -5613,7 +5743,6 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) /* * Accept renegotiation request */ - /* DTLS clients need to know renego is server-initiated */ #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && @@ -5637,9 +5766,7 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) /* * Refuse renegotiation */ - MBEDTLS_SSL_DEBUG_MSG( 3, ( "refusing renegotiation, sending alert" ) ); - #if defined(MBEDTLS_SSL_PROTO_SSL3) if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { @@ -5670,7 +5797,6 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } } - /* At this point, we don't know whether the renegotiation has been * completed or not. The cases to consider are the following: * 1) The renegotiation is complete. In this case, no new record @@ -5705,27 +5831,22 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) } } #endif /* MBEDTLS_SSL_RENEGOTIATION */ - /* Fatal and closure alerts handled by mbedtls_ssl_read_record() */ if( ssl->in_msgtype == MBEDTLS_SSL_MSG_ALERT ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "ignoring non-fatal non-closure alert" ) ); return( MBEDTLS_ERR_SSL_WANT_READ ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_APPLICATION_DATA ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad application data message" ) ); return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - ssl->in_offt = ssl->in_msg; - /* We're going to return something now, cancel timer, * except if handshake (renegotiation) is in progress */ if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) mbedtls_ssl_set_timer( ssl, 0 ); - #if defined(MBEDTLS_SSL_PROTO_DTLS) /* If we requested renego but received AppData, resend HelloRequest. * Do it now, after setting in_offt, to avoid taking this branch @@ -5744,17 +5865,13 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) #endif /* MBEDTLS_SSL_SRV_C && MBEDTLS_SSL_RENEGOTIATION */ #endif /* MBEDTLS_SSL_PROTO_DTLS */ } - n = ( len < ssl->in_msglen ) ? len : ssl->in_msglen; - memcpy( buf, ssl->in_offt, n ); ssl->in_msglen -= n; - /* Zeroising the plaintext buffer to erase unused application data from the memory. */ mbedtls_platform_zeroize( ssl->in_offt, n ); - if( ssl->in_msglen == 0 ) { /* all bytes consumed */ @@ -5766,9 +5883,7 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) /* more data available */ ssl->in_offt += n; } - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= read" ) ); - return( (int) n ); } @@ -5789,13 +5904,11 @@ static int ssl_write_real( mbedtls_ssl_context *ssl, { int ret = mbedtls_ssl_get_max_out_record_payload( ssl ); const size_t max_len = (size_t) ret; - if( ret < 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_get_max_out_record_payload", ret ); return( ret ); } - if( len > max_len ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) @@ -5811,7 +5924,6 @@ static int ssl_write_real( mbedtls_ssl_context *ssl, #endif len = max_len; } - if( ssl->out_left != 0 ) { /* @@ -5836,14 +5948,12 @@ static int ssl_write_real( mbedtls_ssl_context *ssl, ssl->out_msglen = len; ssl->out_msgtype = MBEDTLS_SSL_MSG_APPLICATION_DATA; memcpy( ssl->out_msg, buf, len ); - if( ( ret = mbedtls_ssl_write_record( ssl, SSL_FORCE_FLUSH ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); return( ret ); } } - return( (int) len ); } @@ -5859,7 +5969,6 @@ static int ssl_write_split( mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - if( ssl->conf->cbc_record_splitting == MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED || len <= 1 || @@ -5869,34 +5978,85 @@ static int ssl_write_split( mbedtls_ssl_context *ssl, { return( ssl_write_real( ssl, buf, len ) ); } - if( ssl->split_done == 0 ) { if( ( ret = ssl_write_real( ssl, buf, 1 ) ) <= 0 ) return( ret ); ssl->split_done = 1; } - if( ( ret = ssl_write_real( ssl, buf + 1, len - 1 ) ) <= 0 ) return( ret ); ssl->split_done = 0; - return( ret + 1 ); } #endif /* MBEDTLS_SSL_CBC_RECORD_SPLITTING */ -/* - * Write application data (public-facing wrapper) +/** + * \brief Try to write exactly 'len' application data bytes + * + * \warning This function will do partial writes in some cases. If the + * return value is non-negative but less than length, the + * function must be called again with updated arguments: + * buf + ret, len - ret (if ret is the return value) until + * it returns a value equal to the last 'len' argument. + * + * \param ssl SSL context + * \param buf buffer holding the data + * \param len how many bytes must be written + * + * \return The (non-negative) number of bytes actually written if + * successful (may be less than \p len). + * \return #MBEDTLS_ERR_SSL_WANT_READ or #MBEDTLS_ERR_SSL_WANT_WRITE + * if the handshake is incomplete and waiting for data to + * be available for reading from or writing to the underlying + * transport - in this case you must call this function again + * when the underlying transport is ready for the operation. + * \return #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS if an asynchronous + * operation is in progress (see + * mbedtls_ssl_conf_async_private_cb()) - in this case you + * must call this function again when the operation is ready. + * \return #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS if a cryptographic + * operation is in progress (see mbedtls_ecp_set_max_ops()) - + * in this case you must call this function again to complete + * the handshake when you're done attending other tasks. + * \return Another SSL error code - in this case you must stop using + * the context (see below). + * + * \warning If this function returns something other than + * a non-negative value, + * #MBEDTLS_ERR_SSL_WANT_READ, + * #MBEDTLS_ERR_SSL_WANT_WRITE, + * #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS or + * #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS, + * you must stop using the SSL context for reading or writing, + * and either free it or call \c mbedtls_ssl_session_reset() + * on it before re-using it for a new connection; the current + * connection must be closed. + * + * \note When this function returns #MBEDTLS_ERR_SSL_WANT_WRITE/READ, + * it must be called later with the *same* arguments, + * until it returns a value greater that or equal to 0. When + * the function returns #MBEDTLS_ERR_SSL_WANT_WRITE there may be + * some partial data in the output buffer, however this is not + * yet sent. + * + * \note If the requested length is greater than the maximum + * fragment length (either the built-in limit or the one set + * or negotiated with the peer), then: + * - with TLS, less bytes than requested are written. + * - with DTLS, MBEDTLS_ERR_SSL_BAD_INPUT_DATA is returned. + * \c mbedtls_ssl_get_output_max_frag_len() may be used to + * query the active maximum fragment length. + * + * \note Attempting to write 0 bytes will result in an empty TLS + * application record being sent. */ int mbedtls_ssl_write( mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write" ) ); - if( ssl == NULL || ssl->conf == NULL ) return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - #if defined(MBEDTLS_SSL_RENEGOTIATION) if( ( ret = ssl_check_ctr_renegotiate( ssl ) ) != 0 ) { @@ -5904,7 +6064,6 @@ int mbedtls_ssl_write( mbedtls_ssl_context *ssl, const unsigned char *buf, size_ return( ret ); } #endif - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) { if( ( ret = mbedtls_ssl_handshake( ssl ) ) != 0 ) @@ -5913,33 +6072,36 @@ int mbedtls_ssl_write( mbedtls_ssl_context *ssl, const unsigned char *buf, size_ return( ret ); } } - #if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING) ret = ssl_write_split( ssl, buf, len ); #else ret = ssl_write_real( ssl, buf, len ); #endif - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write" ) ); - return( ret ); } -/* - * Notify the peer that the connection is being closed +/** + * \brief Notify the peer that the connection is being closed + * + * \param ssl SSL context + * + * \return 0 if successful, or a specific SSL error code. + * + * \note If this function returns something other than 0 or + * MBEDTLS_ERR_SSL_WANT_READ/WRITE, you must stop using + * the SSL context for reading or writing, and either free it or + * call \c mbedtls_ssl_session_reset() on it before re-using it + * for a new connection; the current connection must be closed. */ int mbedtls_ssl_close_notify( mbedtls_ssl_context *ssl ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - if( ssl == NULL || ssl->conf == NULL ) return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write close notify" ) ); - if( ssl->out_left != 0 ) return( mbedtls_ssl_flush_output( ssl ) ); - if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) { if( ( ret = mbedtls_ssl_send_alert_message( ssl, @@ -5950,9 +6112,7 @@ int mbedtls_ssl_close_notify( mbedtls_ssl_context *ssl ) return( ret ); } } - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write close notify" ) ); - return( 0 ); } @@ -5960,20 +6120,16 @@ void mbedtls_ssl_transform_free( mbedtls_ssl_transform *transform ) { if( transform == NULL ) return; - #if defined(MBEDTLS_ZLIB_SUPPORT) deflateEnd( &transform->ctx_deflate ); inflateEnd( &transform->ctx_inflate ); #endif - mbedtls_cipher_free( &transform->cipher_ctx_enc ); mbedtls_cipher_free( &transform->cipher_ctx_dec ); - #if defined(MBEDTLS_SSL_SOME_MODES_USE_MAC) mbedtls_md_free( &transform->md_ctx_enc ); mbedtls_md_free( &transform->md_ctx_dec ); #endif - mbedtls_platform_zeroize( transform, sizeof( mbedtls_ssl_transform ) ); } diff --git a/third_party/mbedtls/ssl_srv.c b/third_party/mbedtls/ssl_srv.c index f65b9b72c..29c234b2e 100644 --- a/third_party/mbedtls/ssl_srv.c +++ b/third_party/mbedtls/ssl_srv.c @@ -1,5 +1,18 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/debug.h" +#include "third_party/mbedtls/ecp.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/ssl.h" +#include "third_party/mbedtls/ssl_internal.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * SSLv3/TLSv1 server-side functions * @@ -19,33 +32,26 @@ * limitations under the License. */ -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_SSL_SRV_C) - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - -#include "third_party/mbedtls/ssl.h" -#include "third_party/mbedtls/ssl_internal.h" -#include "third_party/mbedtls/debug.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/platform_util.h" - - -#if defined(MBEDTLS_ECP_C) -#include "third_party/mbedtls/ecp.h" -#endif - -#if defined(MBEDTLS_HAVE_TIME) -#include "third_party/mbedtls/platform_time.h" -#endif - #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) +/** + * \brief Set client's transport-level identification info. + * (Server only. DTLS only.) + * + * This is usually the IP address (and port), but could be + * anything identify the client depending on the underlying + * network stack. Used for HelloVerifyRequest with DTLS. + * This is *not* used to route the actual packets. + * + * \param ssl SSL context + * \param info Transport-level info identifying the client (eg IP + port) + * \param ilen Length of info in bytes + * + * \note An internal copy is made, so the info buffer can be reused. + * + * \return 0 on success, + * MBEDTLS_ERR_SSL_BAD_INPUT_DATA if used on client, + * MBEDTLS_ERR_SSL_ALLOC_FAILED if out of memory. + */ int mbedtls_ssl_set_client_transport_id( mbedtls_ssl_context *ssl, const unsigned char *info, size_t ilen ) @@ -64,6 +70,34 @@ int mbedtls_ssl_set_client_transport_id( mbedtls_ssl_context *ssl, return( 0 ); } +/** + * \brief Register callbacks for DTLS cookies + * (Server only. DTLS only.) + * + * Default: dummy callbacks that fail, in order to force you to + * register working callbacks (and initialize their context). + * + * To disable HelloVerifyRequest, register NULL callbacks. + * + * \warning Disabling hello verification allows your server to be used + * for amplification in DoS attacks against other hosts. + * Only disable if you known this can't happen in your + * particular environment. + * + * \note See comments on \c mbedtls_ssl_handshake() about handling + * the MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED that is expected + * on the first handshake attempt when this is enabled. + * + * \note This is also necessary to handle client reconnection from + * the same port as described in RFC 6347 section 4.2.8 (only + * the variant with cookies is supported currently). See + * comments on \c mbedtls_ssl_read() for details. + * + * \param conf SSL configuration + * \param f_cookie_write Cookie write callback + * \param f_cookie_check Cookie check callback + * \param p_cookie Context for both callbacks + */ void mbedtls_ssl_conf_dtls_cookies( mbedtls_ssl_config *conf, mbedtls_ssl_cookie_write_t *f_cookie_write, mbedtls_ssl_cookie_check_t *f_cookie_check, @@ -83,9 +117,7 @@ static int ssl_parse_servername_ext( mbedtls_ssl_context *ssl, int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t servername_list_size, hostname_len; const unsigned char *p; - MBEDTLS_SSL_DEBUG_MSG( 3, ( "parse ServerName extension" ) ); - if( len < 2 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); @@ -101,7 +133,6 @@ static int ssl_parse_servername_ext( mbedtls_ssl_context *ssl, MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - p = buf + 2; while( servername_list_size > 2 ) { @@ -113,7 +144,6 @@ static int ssl_parse_servername_ext( mbedtls_ssl_context *ssl, MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - if( p[0] == MBEDTLS_TLS_EXT_SERVERNAME_HOSTNAME ) { ret = ssl->conf->f_sni( ssl->conf->p_sni, @@ -127,11 +157,9 @@ static int ssl_parse_servername_ext( mbedtls_ssl_context *ssl, } return( 0 ); } - servername_list_size -= hostname_len + 3; p += hostname_len + 3; } - if( servername_list_size != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); @@ -139,7 +167,6 @@ static int ssl_parse_servername_ext( mbedtls_ssl_context *ssl, MBEDTLS_SSL_ALERT_MSG_ILLEGAL_PARAMETER ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - return( 0 ); } #endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION */ @@ -149,41 +176,12 @@ static int ssl_conf_has_psk_or_cb( mbedtls_ssl_config const *conf ) { if( conf->f_psk != NULL ) return( 1 ); - if( conf->psk_identity_len == 0 || conf->psk_identity == NULL ) return( 0 ); - if( conf->psk != NULL && conf->psk_len != 0 ) return( 1 ); - -#if defined(MBEDTLS_USE_PSA_CRYPTO) - if( ! mbedtls_svc_key_id_is_null( conf->psk_opaque ) ) - return( 1 ); -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - return( 0 ); } - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -static int ssl_use_opaque_psk( mbedtls_ssl_context const *ssl ) -{ - if( ssl->conf->f_psk != NULL ) - { - /* If we've used a callback to select the PSK, - * the static configuration is irrelevant. */ - - if( ! mbedtls_svc_key_id_is_null( ssl->handshake->psk_opaque ) ) - return( 1 ); - - return( 0 ); - } - - if( ! mbedtls_svc_key_id_is_null( ssl->conf->psk_opaque ) ) - return( 1 ); - - return( 0 ); -} -#endif /* MBEDTLS_USE_PSA_CRYPTO */ #endif /* MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED */ static int ssl_parse_renegotiation_info( mbedtls_ssl_context *ssl, @@ -215,10 +213,8 @@ static int ssl_parse_renegotiation_info( mbedtls_ssl_context *ssl, MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - ssl->secure_renegotiation = MBEDTLS_SSL_SECURE_RENEGOTIATION; } - return( 0 ); } @@ -281,7 +277,8 @@ static int ssl_parse_signature_algorithms_ext( mbedtls_ssl_context *ssl, if( ( sig_cur = mbedtls_ssl_pk_alg_from_sig( p[1] ) ) == MBEDTLS_PK_NONE ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, signature_algorithm ext" - " unknown sig alg encoding %d", p[1] ) ); + " unknown sig alg encoding %d (%s)", p[1], + mbedtls_sig_alg_name(p[1])) ); continue; } @@ -298,8 +295,9 @@ static int ssl_parse_signature_algorithms_ext( mbedtls_ssl_context *ssl, { mbedtls_ssl_sig_hash_set_add( &ssl->handshake->hash_algs, sig_cur, md_cur ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, signature_algorithm ext:" - " match sig %u and hash %u", - (unsigned) sig_cur, (unsigned) md_cur ) ); + " match sig %u (%s) and hash %u (%s)", + sig_cur, mbedtls_pk_type_name(sig_cur), + md_cur, mbedtls_md_type_name(md_cur) ) ); } else { @@ -542,28 +540,6 @@ static int ssl_parse_cid_ext( mbedtls_ssl_context *ssl, } #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) -static int ssl_parse_truncated_hmac_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) -{ - if( len != 0 ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); - } - - ((void) buf); - - if( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_ENABLED ) - ssl->session_negotiate->trunc_hmac = MBEDTLS_SSL_TRUNC_HMAC_ENABLED; - - return( 0 ); -} -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ - #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) static int ssl_parse_encrypt_then_mac_ext( mbedtls_ssl_context *ssl, const unsigned char *buf, @@ -576,15 +552,12 @@ static int ssl_parse_encrypt_then_mac_ext( mbedtls_ssl_context *ssl, MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - ((void) buf); - if( ssl->conf->encrypt_then_mac == MBEDTLS_SSL_ETM_ENABLED && ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) { ssl->session_negotiate->encrypt_then_mac = MBEDTLS_SSL_ETM_ENABLED; } - return( 0 ); } #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ @@ -1152,7 +1125,7 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) size_t n; unsigned int ciph_len, sess_len, chal_len; unsigned char *buf, *p; - const int *ciphersuites; + const uint16_t *ciphersuites; const mbedtls_ssl_ciphersuite_t *ciphersuite_info; MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse client hello v2" ) ); @@ -1424,7 +1397,7 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) int renegotiation_info_seen = 0; #endif int handshake_failure = 0; - const int *ciphersuites; + const uint16_t *ciphersuites; const mbedtls_ssl_ciphersuite_t *ciphersuite_info; int major, minor; @@ -1637,7 +1610,7 @@ read_record_header: ssl->handshake->in_msg_seq++; } else -#endif +#endif /* MBEDTLS_SSL_RENEGOTIATION */ { unsigned int cli_msg_seq = ( ssl->in_msg[4] << 8 ) | ssl->in_msg[5]; @@ -2002,25 +1975,10 @@ read_record_header: break; #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - case MBEDTLS_TLS_EXT_TRUNCATED_HMAC: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found truncated hmac extension" ) ); - - ret = ssl_parse_truncated_hmac_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ - #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) case MBEDTLS_TLS_EXT_CID: MBEDTLS_SSL_DEBUG_MSG( 3, ( "found CID extension" ) ); - - ret = ssl_parse_cid_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ +#endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) case MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC: @@ -2284,31 +2242,6 @@ have_ciphersuite: return( 0 ); } -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) -static void ssl_write_truncated_hmac_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) -{ - unsigned char *p = buf; - - if( ssl->session_negotiate->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED ) - { - *olen = 0; - return; - } - - MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, adding truncated hmac extension" ) ); - - *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_TRUNCATED_HMAC >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_TRUNCATED_HMAC ) & 0xFF ); - - *p++ = 0x00; - *p++ = 0x00; - - *olen = 4; -} -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ - #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) static void ssl_write_cid_ext( mbedtls_ssl_context *ssl, unsigned char *buf, @@ -2946,11 +2879,6 @@ static int ssl_write_server_hello( mbedtls_ssl_context *ssl ) ext_len += olen; #endif -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - ssl_write_truncated_hmac_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; -#endif - #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) ssl_write_cid_ext( ssl, p + 2 + ext_len, &olen ); ext_len += olen; @@ -3120,7 +3048,7 @@ static int ssl_write_certificate_request( mbedtls_ssl_context *ssl ) */ if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { - const int *cur; + const uint8_t *cur; /* * Supported signature algorithms @@ -3268,26 +3196,21 @@ static int ssl_prepare_server_key_exchange( mbedtls_ssl_context *ssl, { const mbedtls_ssl_ciphersuite_t *ciphersuite_info = ssl->handshake->ciphersuite_info; - #if defined(MBEDTLS_KEY_EXCHANGE_SOME_PFS_ENABLED) #if defined(MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED) unsigned char *dig_signed = NULL; #endif /* MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED */ #endif /* MBEDTLS_KEY_EXCHANGE_SOME_PFS_ENABLED */ - (void) ciphersuite_info; /* unused in some configurations */ #if !defined(MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED) (void) signature_len; #endif /* MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED */ - ssl->out_msglen = 4; /* header (type:1, length:3) to be written later */ - /* * * Part 1: Provide key exchange parameters for chosen ciphersuite. * */ - /* * - ECJPAKE key exchanges */ @@ -3296,7 +3219,6 @@ static int ssl_prepare_server_key_exchange( mbedtls_ssl_context *ssl, { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t len = 0; - ret = mbedtls_ecjpake_write_round_two( &ssl->handshake->ecjpake_ctx, ssl->out_msg + ssl->out_msglen, @@ -3307,11 +3229,9 @@ static int ssl_prepare_server_key_exchange( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_write_round_two", ret ); return( ret ); } - ssl->out_msglen += len; } #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ - /* * For (EC)DHE key exchanges with PSK, parameters are prefixed by support * identity hint (RFC 4279, Sec. 3). Until someone needs this feature, @@ -3327,7 +3247,6 @@ static int ssl_prepare_server_key_exchange( mbedtls_ssl_context *ssl, } #endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ - /* * - DHE key exchanges */ @@ -3336,13 +3255,11 @@ static int ssl_prepare_server_key_exchange( mbedtls_ssl_context *ssl, { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t len = 0; - if( ssl->conf->dhm_P.p == NULL || ssl->conf->dhm_G.p == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "no DH parameters set" ) ); return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - /* * Ephemeral DH parameters: * @@ -3359,7 +3276,6 @@ static int ssl_prepare_server_key_exchange( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_set_group", ret ); return( ret ); } - if( ( ret = mbedtls_dhm_make_params( &ssl->handshake->dhm_ctx, (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ), @@ -3369,20 +3285,16 @@ static int ssl_prepare_server_key_exchange( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_make_params", ret ); return( ret ); } - #if defined(MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED) dig_signed = ssl->out_msg + ssl->out_msglen; #endif - ssl->out_msglen += len; - MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: X ", &ssl->handshake->dhm_ctx.X ); MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: P ", &ssl->handshake->dhm_ctx.P ); MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: G ", &ssl->handshake->dhm_ctx.G ); MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: GX", &ssl->handshake->dhm_ctx.GX ); } #endif /* MBEDTLS_KEY_EXCHANGE_SOME_DHE_ENABLED */ - /* * - ECDHE key exchanges */ @@ -3401,29 +3313,24 @@ static int ssl_prepare_server_key_exchange( mbedtls_ssl_context *ssl, const mbedtls_ecp_group_id *gid; int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t len = 0; - /* Match our preference list against the offered curves */ for( gid = ssl->conf->curve_list; *gid != MBEDTLS_ECP_DP_NONE; gid++ ) for( curve = ssl->handshake->curves; *curve != NULL; curve++ ) if( (*curve)->grp_id == *gid ) goto curve_matching_done; - curve_matching_done: if( curve == NULL || *curve == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "no matching curve for ECDHE" ) ); return( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN ); } - MBEDTLS_SSL_DEBUG_MSG( 2, ( "ECDHE curve: %s", (*curve)->name ) ); - if( ( ret = mbedtls_ecdh_setup( &ssl->handshake->ecdh_ctx, (*curve)->grp_id ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecp_group_load", ret ); return( ret ); } - if( ( ret = mbedtls_ecdh_make_params( &ssl->handshake->ecdh_ctx, &len, ssl->out_msg + ssl->out_msglen, @@ -3433,18 +3340,14 @@ curve_matching_done: MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_make_params", ret ); return( ret ); } - #if defined(MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED) dig_signed = ssl->out_msg + ssl->out_msglen; #endif - ssl->out_msglen += len; - MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx, MBEDTLS_DEBUG_ECDH_Q ); } #endif /* MBEDTLS_KEY_EXCHANGE_SOME_ECDHE_ENABLED */ - /* * * Part 2: For key exchanges involving the server signing the @@ -3458,7 +3361,6 @@ curve_matching_done: size_t hashlen = 0; unsigned char hash[MBEDTLS_MD_MAX_SIZE]; int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - /* * 2.1: Choose hash algorithm: * A: For TLS 1.2, obey signature-hash-algorithm extension @@ -3467,9 +3369,7 @@ curve_matching_done: * (RFC 4492, Sec. 5.4) * C: Otherwise, use MD5 + SHA1 (RFC 4346, Sec. 7.4.3) */ - mbedtls_md_type_t md_alg; - #if defined(MBEDTLS_SSL_PROTO_TLS1_2) mbedtls_pk_type_t sig_alg = mbedtls_ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info ); @@ -3503,9 +3403,7 @@ curve_matching_done: /* C: MD5 + SHA1 */ md_alg = MBEDTLS_MD_NONE; } - MBEDTLS_SSL_DEBUG_MSG( 3, ( "pick hash algorithm %u for signing", (unsigned) md_alg ) ); - /* * 2.2: Compute the hash to be signed */ @@ -3541,9 +3439,7 @@ curve_matching_done: MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - MBEDTLS_SSL_DEBUG_BUF( 3, "parameters hash", hash, hashlen ); - /* * 2.3: Compute and add the signature */ @@ -3565,14 +3461,12 @@ curve_matching_done: * } DigitallySigned; * */ - ssl->out_msg[ssl->out_msglen++] = mbedtls_ssl_hash_from_md_alg( md_alg ); ssl->out_msg[ssl->out_msglen++] = mbedtls_ssl_sig_from_pk_alg( sig_alg ); } #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - #if defined(MBEDTLS_SSL_ASYNC_PRIVATE) if( ssl->conf->f_async_sign_start != NULL ) { @@ -3596,13 +3490,11 @@ curve_matching_done: } } #endif /* MBEDTLS_SSL_ASYNC_PRIVATE */ - if( mbedtls_ssl_own_key( ssl ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no private key" ) ); return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); } - /* Append the signature to ssl->out_msg, leaving 2 bytes for the * signature length which will be added in ssl_write_server_key_exchange * after the call to ssl_prepare_server_key_exchange. @@ -3620,7 +3512,6 @@ curve_matching_done: } } #endif /* MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED */ - return( 0 ); } @@ -3636,9 +3527,7 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) const mbedtls_ssl_ciphersuite_t *ciphersuite_info = ssl->handshake->ciphersuite_info; #endif /* MBEDTLS_KEY_EXCHANGE_SOME_NON_PFS_ENABLED */ - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write server key exchange" ) ); - #if defined(MBEDTLS_KEY_EXCHANGE_SOME_NON_PFS_ENABLED) /* Extract static ECDH parameters and abort if ServerKeyExchange * is not needed. */ @@ -3652,7 +3541,6 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) ssl_get_ecdh_params_from_cert( ssl ); } #endif /* MBEDTLS_KEY_EXCHANGE_SOME_ECDH_ENABLED */ - /* Key exchanges not involving ephemeral keys don't use * ServerKeyExchange, so end here. */ MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write server key exchange" ) ); @@ -3660,7 +3548,6 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) return( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_SOME_NON_PFS_ENABLED */ - #if defined(MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED) && \ defined(MBEDTLS_SSL_ASYNC_PRIVATE) /* If we have already prepared the message and there is an ongoing @@ -3677,7 +3564,6 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) /* ServerKeyExchange is needed. Prepare the message. */ ret = ssl_prepare_server_key_exchange( ssl, &signature_len ); } - if( ret != 0 ) { /* If we're starting to write a new message, set ssl->out_msglen @@ -3690,7 +3576,6 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) ssl->out_msglen = 0; return( ret ); } - /* If there is a signature, write its length. * ssl_prepare_server_key_exchange already wrote the signature * itself at its proper place in the output buffer. */ @@ -3699,28 +3584,22 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) { ssl->out_msg[ssl->out_msglen++] = (unsigned char)( signature_len >> 8 ); ssl->out_msg[ssl->out_msglen++] = (unsigned char)( signature_len ); - MBEDTLS_SSL_DEBUG_BUF( 3, "my signature", ssl->out_msg + ssl->out_msglen, signature_len ); - /* Skip over the already-written signature */ ssl->out_msglen += signature_len; } #endif /* MBEDTLS_KEY_EXCHANGE_WITH_SERVER_SIGNATURE_ENABLED */ - /* Add header and send. */ ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE; ssl->out_msg[0] = MBEDTLS_SSL_HS_SERVER_KEY_EXCHANGE; - ssl->state++; - if( ( ret = mbedtls_ssl_write_handshake_msg( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_handshake_msg", ret ); return( ret ); } - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server key exchange" ) ); return( 0 ); } @@ -3728,26 +3607,20 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) static int ssl_write_server_hello_done( mbedtls_ssl_context *ssl ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write server hello done" ) ); - ssl->out_msglen = 4; ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE; ssl->out_msg[0] = MBEDTLS_SSL_HS_SERVER_HELLO_DONE; - ssl->state++; - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_send_flight_completed( ssl ); #endif - if( ( ret = mbedtls_ssl_write_handshake_msg( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_handshake_msg", ret ); return( ret ); } - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && ( ret = mbedtls_ssl_flight_transmit( ssl ) ) != 0 ) @@ -3756,9 +3629,7 @@ static int ssl_write_server_hello_done( mbedtls_ssl_context *ssl ) return( ret ); } #endif /* MBEDTLS_SSL_PROTO_DTLS */ - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server hello done" ) ); - return( 0 ); } @@ -3769,7 +3640,6 @@ static int ssl_parse_client_dh_public( mbedtls_ssl_context *ssl, unsigned char * { int ret = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE; size_t n; - /* * Receive G^Y mod P, premaster = (G^Y)^X mod P */ @@ -3778,26 +3648,20 @@ static int ssl_parse_client_dh_public( mbedtls_ssl_context *ssl, unsigned char * MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - n = ( (*p)[0] << 8 ) | (*p)[1]; *p += 2; - if( *p + n > end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - if( ( ret = mbedtls_dhm_read_public( &ssl->handshake->dhm_ctx, *p, n ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_read_public", ret ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); } - *p += n; - MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: GY", &ssl->handshake->dhm_ctx.GY ); - return( ret ); } #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED || @@ -3835,7 +3699,6 @@ static int ssl_decrypt_encrypted_pms( mbedtls_ssl_context *ssl, mbedtls_pk_context *private_key = mbedtls_ssl_own_key( ssl ); mbedtls_pk_context *public_key = &mbedtls_ssl_own_cert( ssl )->pk; size_t len = mbedtls_pk_get_len( public_key ); - #if defined(MBEDTLS_SSL_ASYNC_PRIVATE) /* If we have already started decoding the message and there is an ongoing * decryption operation, resume signing. */ @@ -3846,7 +3709,6 @@ static int ssl_decrypt_encrypted_pms( mbedtls_ssl_context *ssl, peer_pms, peer_pmslen, peer_pmssize ) ); } #endif /* MBEDTLS_SSL_ASYNC_PRIVATE */ - /* * Prepare to decrypt the premaster using own private RSA key */ @@ -3866,13 +3728,11 @@ static int ssl_decrypt_encrypted_pms( mbedtls_ssl_context *ssl, } } #endif - if( p + len != end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - /* * Decrypt the premaster secret */ @@ -3902,13 +3762,11 @@ static int ssl_decrypt_encrypted_pms( mbedtls_ssl_context *ssl, } } #endif /* MBEDTLS_SSL_ASYNC_PRIVATE */ - if( ! mbedtls_pk_can_do( private_key, MBEDTLS_PK_RSA ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no RSA private key" ) ); return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); } - ret = mbedtls_pk_decrypt( private_key, p, len, peer_pms, peer_pmslen, peer_pmssize, ssl->conf->f_rng, ssl->conf->p_rng ); @@ -3927,7 +3785,6 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, unsigned char mask; size_t i, peer_pmslen; unsigned int diff; - /* In case of a failure in decryption, the decryption may write less than * 2 bytes of output, but we always read the first two bytes. It doesn't * matter in the end because diff will be nonzero in that case due to @@ -3937,21 +3794,17 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, * even if it's an unsigned char). */ peer_pms[0] = peer_pms[1] = ~0; peer_pmslen = 0; - ret = ssl_decrypt_encrypted_pms( ssl, p, end, peer_pms, &peer_pmslen, sizeof( peer_pms ) ); - #if defined(MBEDTLS_SSL_ASYNC_PRIVATE) if ( ret == MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS ) return( ret ); #endif /* MBEDTLS_SSL_ASYNC_PRIVATE */ - mbedtls_ssl_write_version( ssl->handshake->max_major_ver, ssl->handshake->max_minor_ver, ssl->conf->transport, ver ); - /* Avoid data-dependent branches while checking for invalid * padding, to protect against timing-based Bleichenbacher-type * attacks. */ @@ -3959,7 +3812,6 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, diff |= peer_pmslen ^ 48; diff |= peer_pms[0] ^ ver[0]; diff |= peer_pms[1] ^ ver[1]; - /* mask = diff ? 0xff : 0x00 using bit operations to avoid branches */ /* MSVC has a warning about unary minus on unsigned, but this is * well-defined and precisely what we want to do here */ @@ -3971,7 +3823,6 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, #if defined(_MSC_VER) #pragma warning( pop ) #endif - /* * Protection against Bleichenbacher's attack: invalid PKCS#1 v1.5 padding * must not cause the connection to end immediately; instead, send a @@ -3988,12 +3839,10 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, * anything about the RSA decryption. */ return( ret ); } - #if defined(MBEDTLS_SSL_DEBUG_ALL) if( diff != 0 ) MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); #endif - if( sizeof( ssl->handshake->premaster ) < pms_offset || sizeof( ssl->handshake->premaster ) - pms_offset < 48 ) { @@ -4001,12 +3850,10 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } ssl->handshake->pmslen = 48; - /* Set pms to either the true or the fake PMS, without * data-dependent branches. */ for( i = 0; i < ssl->handshake->pmslen; i++ ) pms[i] = ( mask & fake_pms[i] ) | ( (~mask) & peer_pms[i] ); - return( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED || @@ -4018,13 +3865,11 @@ static int ssl_parse_client_psk_identity( mbedtls_ssl_context *ssl, unsigned cha { int ret = 0; uint16_t n; - if( ssl_conf_has_psk_or_cb( ssl->conf ) == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no pre-shared key" ) ); return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); } - /* * Receive client pre-shared key identity name */ @@ -4033,16 +3878,13 @@ static int ssl_parse_client_psk_identity( mbedtls_ssl_context *ssl, unsigned cha MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - n = ( (*p)[0] << 8 ) | (*p)[1]; *p += 2; - if( n == 0 || n > end - *p ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - if( ssl->conf->f_psk != NULL ) { if( ssl->conf->f_psk( ssl->conf->p_psk, ssl, *p, n ) != 0 ) @@ -4058,7 +3900,6 @@ static int ssl_parse_client_psk_identity( mbedtls_ssl_context *ssl, unsigned cha ret = MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY; } } - if( ret == MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY ) { MBEDTLS_SSL_DEBUG_BUF( 3, "Unknown PSK identity", *p, n ); @@ -4066,23 +3907,17 @@ static int ssl_parse_client_psk_identity( mbedtls_ssl_context *ssl, unsigned cha MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY ); return( MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY ); } - *p += n; - return( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED */ - static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; const mbedtls_ssl_ciphersuite_t *ciphersuite_info; unsigned char *p, *end; - ciphersuite_info = ssl->handshake->ciphersuite_info; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse client key exchange" ) ); - #if defined(MBEDTLS_SSL_ASYNC_PRIVATE) && \ ( defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) ) @@ -4102,22 +3937,18 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); return( ret ); } - p = ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ); end = ssl->in_msg + ssl->in_hslen; - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - if( ssl->in_msg[0] != MBEDTLS_SSL_HS_CLIENT_KEY_EXCHANGE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA ) { @@ -4126,13 +3957,11 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_dh_public" ), ret ); return( ret ); } - if( p != end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - if( ( ret = mbedtls_dhm_calc_secret( &ssl->handshake->dhm_ctx, ssl->handshake->premaster, MBEDTLS_PREMASTER_SIZE, @@ -4142,7 +3971,6 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_calc_secret", ret ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS ); } - MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: K ", &ssl->handshake->dhm_ctx.K ); } else @@ -4162,10 +3990,8 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_read_public", ret ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); } - MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx, MBEDTLS_DEBUG_ECDH_QP ); - if( ( ret = mbedtls_ecdh_calc_secret( &ssl->handshake->ecdh_ctx, &ssl->handshake->pmslen, ssl->handshake->premaster, @@ -4175,7 +4001,6 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_calc_secret", ret ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS ); } - MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx, MBEDTLS_DEBUG_ECDH_Z ); } @@ -4192,20 +4017,11 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); return( ret ); } - if( p != end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - -#if defined(MBEDTLS_USE_PSA_CRYPTO) - /* For opaque PSKs, we perform the PSK-to-MS derivation atomatically - * and skip the intermediate PMS. */ - if( ssl_use_opaque_psk( ssl ) == 1 ) - MBEDTLS_SSL_DEBUG_MSG( 1, ( "skip PMS generation for opaque PSK" ) ); - else -#endif /* MBEDTLS_USE_PSA_CRYPTO */ if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, ciphersuite_info->key_exchange ) ) != 0 ) { @@ -4236,19 +4052,11 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); return( ret ); } - -#if defined(MBEDTLS_USE_PSA_CRYPTO) - /* Opaque PSKs are currently only supported for PSK-only. */ - if( ssl_use_opaque_psk( ssl ) == 1 ) - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); -#endif - if( ( ret = ssl_parse_encrypted_pms( ssl, p, end, 2 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_encrypted_pms" ), ret ); return( ret ); } - if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, ciphersuite_info->key_exchange ) ) != 0 ) { @@ -4271,19 +4079,11 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_dh_public" ), ret ); return( ret ); } - -#if defined(MBEDTLS_USE_PSA_CRYPTO) - /* Opaque PSKs are currently only supported for PSK-only. */ - if( ssl_use_opaque_psk( ssl ) == 1 ) - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); -#endif - if( p != end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, ciphersuite_info->key_exchange ) ) != 0 ) { @@ -4301,23 +4101,14 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); return( ret ); } - if( ( ret = mbedtls_ecdh_read_public( &ssl->handshake->ecdh_ctx, p, end - p ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_read_public", ret ); return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); } - -#if defined(MBEDTLS_USE_PSA_CRYPTO) - /* Opaque PSKs are currently only supported for PSK-only. */ - if( ssl_use_opaque_psk( ssl ) == 1 ) - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); -#endif - MBEDTLS_SSL_DEBUG_ECDH( 3, &ssl->handshake->ecdh_ctx, MBEDTLS_DEBUG_ECDH_QP ); - if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, ciphersuite_info->key_exchange ) ) != 0 ) { @@ -4348,7 +4139,6 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_read_round_two", ret ); return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } - ret = mbedtls_ecjpake_derive_secret( &ssl->handshake->ecjpake_ctx, ssl->handshake->premaster, 32, &ssl->handshake->pmslen, ssl->conf->f_rng, ssl->conf->p_rng ); @@ -4364,17 +4154,13 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_derive_keys", ret ); return( ret ); } - ssl->state++; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse client key exchange" ) ); - return( 0 ); } @@ -4383,16 +4169,13 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) { const mbedtls_ssl_ciphersuite_t *ciphersuite_info = ssl->handshake->ciphersuite_info; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate verify" ) ); - if( !mbedtls_ssl_ciphersuite_cert_req_allowed( ciphersuite_info ) ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate verify" ) ); ssl->state++; return( 0 ); } - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } @@ -4411,16 +4194,13 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) const mbedtls_ssl_ciphersuite_t *ciphersuite_info = ssl->handshake->ciphersuite_info; mbedtls_pk_context * peer_pk; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate verify" ) ); - if( !mbedtls_ssl_ciphersuite_cert_req_allowed( ciphersuite_info ) ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate verify" ) ); ssl->state++; return( 0 ); } - #if defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) if( ssl->session_negotiate->peer_cert == NULL ) { @@ -4436,7 +4216,6 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) return( 0 ); } #endif /* !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ - /* Read the message without adding it to the checksum */ ret = mbedtls_ssl_read_record( ssl, 0 /* no checksum update */ ); if( 0 != ret ) @@ -4444,9 +4223,7 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_read_record" ), ret ); return( ret ); } - ssl->state++; - /* Process the message contents */ if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE || ssl->in_msg[0] != MBEDTLS_SSL_HS_CERTIFICATE_VERIFY ) @@ -4454,9 +4231,7 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); } - i = mbedtls_ssl_hs_hdr_len( ssl ); - #if !defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) peer_pk = &ssl->handshake->peer_pubkey; #else /* !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ @@ -4467,7 +4242,6 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) } peer_pk = &ssl->session_negotiate->peer_cert->pk; #endif /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ - /* * struct { * SignatureAndHashAlgorithm algorithm; -- TLS 1.2 only @@ -4480,7 +4254,6 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) { md_alg = MBEDTLS_MD_NONE; hashlen = 36; - /* For ECDSA, use SHA-1, not MD-5 + SHA-1 */ if( mbedtls_pk_can_do( peer_pk, MBEDTLS_PK_ECDSA ) ) { @@ -4500,29 +4273,23 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); } - /* * Hash */ md_alg = mbedtls_ssl_md_alg_from_hash( ssl->in_msg[i] ); - if( md_alg == MBEDTLS_MD_NONE || mbedtls_ssl_set_calc_verify_md( ssl, ssl->in_msg[i] ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "peer not adhering to requested sig_alg" " for verify message" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); } - #if !defined(MBEDTLS_MD_SHA1) if( MBEDTLS_MD_SHA1 == md_alg ) hash_start += 16; #endif - /* Info from md_alg will be used instead */ hashlen = 0; - i++; - /* * Signature */ @@ -4533,7 +4300,6 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) " for verify message" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); } - /* * Check the certificate's key type matches the signature alg */ @@ -4542,7 +4308,6 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 1, ( "sig_alg doesn't match cert key" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); } - i++; } else @@ -4551,28 +4316,23 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - if( i + 2 > ssl->in_hslen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); } - sig_len = ( ssl->in_msg[i] << 8 ) | ssl->in_msg[i+1]; i += 2; - if( i + sig_len != ssl->in_hslen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); } - /* Calculate hash and verify signature */ { size_t dummy_hlen; ssl->handshake->calc_verify( ssl, hash, &dummy_hlen ); } - if( ( ret = mbedtls_pk_verify( peer_pk, md_alg, hash_start, hashlen, ssl->in_msg + i, sig_len ) ) != 0 ) @@ -4580,11 +4340,8 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_pk_verify", ret ); return( ret ); } - mbedtls_ssl_update_handshake_status( ssl ); - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse certificate verify" ) ); - return( ret ); } #endif /* MBEDTLS_KEY_EXCHANGE_CERT_REQ_ALLOWED_ENABLED */ @@ -4595,12 +4352,9 @@ static int ssl_write_new_session_ticket( mbedtls_ssl_context *ssl ) int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t tlen; uint32_t lifetime; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write new session ticket" ) ); - ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE; ssl->out_msg[0] = MBEDTLS_SSL_HS_NEW_SESSION_TICKET; - /* * struct { * uint32 ticket_lifetime_hint; @@ -4611,7 +4365,6 @@ static int ssl_write_new_session_ticket( mbedtls_ssl_context *ssl ) * 8 . 9 ticket_len (n) * 10 . 9+n ticket content */ - if( ( ret = ssl->conf->f_ticket_write( ssl->conf->p_ticket, ssl->session_negotiate, ssl->out_msg + 10, @@ -4621,50 +4374,56 @@ static int ssl_write_new_session_ticket( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_ticket_write", ret ); tlen = 0; } - ssl->out_msg[4] = ( lifetime >> 24 ) & 0xFF; ssl->out_msg[5] = ( lifetime >> 16 ) & 0xFF; ssl->out_msg[6] = ( lifetime >> 8 ) & 0xFF; ssl->out_msg[7] = ( lifetime ) & 0xFF; - ssl->out_msg[8] = (unsigned char)( ( tlen >> 8 ) & 0xFF ); ssl->out_msg[9] = (unsigned char)( ( tlen ) & 0xFF ); - ssl->out_msglen = 10 + tlen; - /* * Morally equivalent to updating ssl->state, but NewSessionTicket and * ChangeCipherSpec share the same state. */ ssl->handshake->new_session_ticket = 0; - if( ( ret = mbedtls_ssl_write_handshake_msg( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_handshake_msg", ret ); return( ret ); } - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write new session ticket" ) ); - return( 0 ); } #endif /* MBEDTLS_SSL_SESSION_TICKETS */ -/* - * SSL handshake -- server side -- single step +/** + * \brief Perform a single step of the SSL server handshake + * + * \note The state of the context (ssl->state) will be at + * the next state after this function returns \c 0. Do not + * call this function if state is MBEDTLS_SSL_HANDSHAKE_OVER. + * + * \param ssl SSL context + * + * \return See mbedtls_ssl_handshake(). + * + * \warning If this function returns something other than \c 0, + * #MBEDTLS_ERR_SSL_WANT_READ, #MBEDTLS_ERR_SSL_WANT_WRITE, + * #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS or + * #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS, you must stop using + * the SSL context for reading or writing, and either free it + * or call \c mbedtls_ssl_session_reset() on it before + * re-using it for a new connection; the current connection + * must be closed. */ int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl ) { int ret = 0; - if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER || ssl->handshake == NULL ) return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - MBEDTLS_SSL_DEBUG_MSG( 2, ( "server state: %d", ssl->state ) ); - if( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) return( ret ); - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) @@ -4673,25 +4432,21 @@ int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl ) return( ret ); } #endif /* MBEDTLS_SSL_PROTO_DTLS */ - switch( ssl->state ) { case MBEDTLS_SSL_HELLO_REQUEST: ssl->state = MBEDTLS_SSL_CLIENT_HELLO; break; - /* * <== ClientHello */ case MBEDTLS_SSL_CLIENT_HELLO: ret = ssl_parse_client_hello( ssl ); break; - #if defined(MBEDTLS_SSL_PROTO_DTLS) case MBEDTLS_SSL_SERVER_HELLO_VERIFY_REQUEST_SENT: return( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ); #endif - /* * ==> ServerHello * Certificate @@ -4702,23 +4457,18 @@ int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl ) case MBEDTLS_SSL_SERVER_HELLO: ret = ssl_write_server_hello( ssl ); break; - case MBEDTLS_SSL_SERVER_CERTIFICATE: ret = mbedtls_ssl_write_certificate( ssl ); break; - case MBEDTLS_SSL_SERVER_KEY_EXCHANGE: ret = ssl_write_server_key_exchange( ssl ); break; - case MBEDTLS_SSL_CERTIFICATE_REQUEST: ret = ssl_write_certificate_request( ssl ); break; - case MBEDTLS_SSL_SERVER_HELLO_DONE: ret = ssl_write_server_hello_done( ssl ); break; - /* * <== ( Certificate/Alert ) * ClientKeyExchange @@ -4729,23 +4479,18 @@ int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl ) case MBEDTLS_SSL_CLIENT_CERTIFICATE: ret = mbedtls_ssl_parse_certificate( ssl ); break; - case MBEDTLS_SSL_CLIENT_KEY_EXCHANGE: ret = ssl_parse_client_key_exchange( ssl ); break; - case MBEDTLS_SSL_CERTIFICATE_VERIFY: ret = ssl_parse_certificate_verify( ssl ); break; - case MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC: ret = mbedtls_ssl_parse_change_cipher_spec( ssl ); break; - case MBEDTLS_SSL_CLIENT_FINISHED: ret = mbedtls_ssl_parse_finished( ssl ); break; - /* * ==> ( NewSessionTicket ) * ChangeCipherSpec @@ -4759,25 +4504,19 @@ int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl ) #endif ret = mbedtls_ssl_write_change_cipher_spec( ssl ); break; - case MBEDTLS_SSL_SERVER_FINISHED: ret = mbedtls_ssl_write_finished( ssl ); break; - case MBEDTLS_SSL_FLUSH_BUFFERS: MBEDTLS_SSL_DEBUG_MSG( 2, ( "handshake: done" ) ); ssl->state = MBEDTLS_SSL_HANDSHAKE_WRAPUP; break; - case MBEDTLS_SSL_HANDSHAKE_WRAPUP: mbedtls_ssl_handshake_wrapup( ssl ); break; - default: MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid state %d", ssl->state ) ); return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - return( ret ); } -#endif /* MBEDTLS_SSL_SRV_C */ diff --git a/third_party/mbedtls/ssl_ticket.c b/third_party/mbedtls/ssl_ticket.c index da4ca249f..de870999c 100644 --- a/third_party/mbedtls/ssl_ticket.c +++ b/third_party/mbedtls/ssl_ticket.c @@ -1,5 +1,16 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/ssl_internal.h" +#include "third_party/mbedtls/ssl_ticket.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * TLS server tickets callbacks implementation * @@ -19,33 +30,14 @@ * limitations under the License. */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_SSL_TICKET_C) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - -#include "third_party/mbedtls/ssl_internal.h" -#include "third_party/mbedtls/ssl_ticket.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/platform_util.h" - - /* * Initialze context */ void mbedtls_ssl_ticket_init( mbedtls_ssl_ticket_context *ctx ) { memset( ctx, 0, sizeof( mbedtls_ssl_ticket_context ) ); - -#if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_init( &ctx->mutex ); -#endif } #define MAX_KEY_BYTES 32 /* 256 bits */ @@ -220,11 +212,6 @@ int mbedtls_ssl_ticket_write( void *p_ticket, * in addition to session itself, that will be checked when writing it. */ MBEDTLS_SSL_CHK_BUF_PTR( start, end, TICKET_MIN_LEN ); -#if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); -#endif - if( ( ret = ssl_ticket_update_keys( ctx ) ) != 0 ) goto cleanup; @@ -268,11 +255,6 @@ int mbedtls_ssl_ticket_write( void *p_ticket, *tlen = TICKET_MIN_LEN + ciph_len - TICKET_AUTH_TAG_BYTES; cleanup: -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); -#endif - return( ret ); } @@ -315,11 +297,6 @@ int mbedtls_ssl_ticket_parse( void *p_ticket, if( len < TICKET_MIN_LEN ) return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); -#if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); -#endif - if( ( ret = ssl_ticket_update_keys( ctx ) ) != 0 ) goto cleanup; @@ -379,11 +356,6 @@ int mbedtls_ssl_ticket_parse( void *p_ticket, #endif cleanup: -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); -#endif - return( ret ); } @@ -394,11 +366,6 @@ void mbedtls_ssl_ticket_free( mbedtls_ssl_ticket_context *ctx ) { mbedtls_cipher_free( &ctx->keys[0].ctx ); mbedtls_cipher_free( &ctx->keys[1].ctx ); - -#if defined(MBEDTLS_THREADING_C) - mbedtls_mutex_free( &ctx->mutex ); -#endif - mbedtls_platform_zeroize( ctx, sizeof( mbedtls_ssl_ticket_context ) ); } diff --git a/third_party/mbedtls/ssl_ticket.h b/third_party/mbedtls/ssl_ticket.h index acc441ec0..320dc7f0c 100644 --- a/third_party/mbedtls/ssl_ticket.h +++ b/third_party/mbedtls/ssl_ticket.h @@ -1,34 +1,9 @@ -/* clang-format off */ - -/** - * \file ssl_ticket.h - * - * \brief TLS server ticket callbacks implementation - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_SSL_TICKET_H #define MBEDTLS_SSL_TICKET_H - -#if !defined(MBEDTLS_CONFIG_FILE) +#include "third_party/mbedtls/cipher.h" #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif +#include "third_party/mbedtls/ssl.h" +/* clang-format off */ /* * This implementation of the session ticket callbacks includes key @@ -36,13 +11,6 @@ * secrecy, when MBEDTLS_HAVE_TIME is defined. */ -#include "third_party/mbedtls/ssl.h" -#include "third_party/mbedtls/cipher.h" - -#if defined(MBEDTLS_THREADING_C) -#include "third_party/mbedtls/threading.h" -#endif - #ifdef __cplusplus extern "C" { #endif @@ -71,10 +39,6 @@ typedef struct mbedtls_ssl_ticket_context /** Callback for getting (pseudo-)random numbers */ int (*f_rng)(void *, unsigned char *, size_t); void *p_rng; /*!< context for the RNG function */ - -#if defined(MBEDTLS_THREADING_C) - mbedtls_threading_mutex_t mutex; -#endif } mbedtls_ssl_ticket_context; diff --git a/third_party/mbedtls/ssl_tls.c b/third_party/mbedtls/ssl_tls.c index 8afb08d35..608d8cab9 100644 --- a/third_party/mbedtls/ssl_tls.c +++ b/third_party/mbedtls/ssl_tls.c @@ -1,10 +1,21 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/config.h" +#include "third_party/mbedtls/debug.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/ssl.h" +#include "third_party/mbedtls/ssl_ciphersuites.h" +#include "third_party/mbedtls/ssl_internal.h" +#include "third_party/mbedtls/version.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * SSLv3/TLSv1 shared functions * @@ -32,57 +43,144 @@ asm(".include \"libc/disclaimer.inc\""); * http://www.ietf.org/rfc/rfc4346.txt */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_SSL_TLS_C) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - -#include "third_party/mbedtls/sheesh.h" -#include "third_party/mbedtls/ssl.h" -#include "third_party/mbedtls/ssl_internal.h" -#include "third_party/mbedtls/debug.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/version.h" - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -#include "third_party/mbedtls/psa_util.h" -#include "third_party/mbedtls/crypto.h" -#endif - -#if defined(MBEDTLS_X509_CRT_PARSE_C) -#include "third_party/mbedtls/oid.h" -#endif - #if defined(MBEDTLS_SSL_PROTO_DTLS) #if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) /* Top-level Connection ID API */ +/** + * \brief Specify the length of Connection IDs for incoming + * encrypted DTLS records, as well as the behaviour + * on unexpected CIDs. + * + * By default, the CID length is set to \c 0, + * and unexpected CIDs are silently ignored. + * + * \param conf The SSL configuration to modify. + * \param len The length in Bytes of the CID fields in encrypted + * DTLS records using the CID mechanism. This must + * not be larger than #MBEDTLS_SSL_CID_OUT_LEN_MAX. + * \param ignore_other_cids This determines the stack's behaviour when + * receiving a record with an unexpected CID. + * Possible values are: + * - #MBEDTLS_SSL_UNEXPECTED_CID_IGNORE + * In this case, the record is silently ignored. + * - #MBEDTLS_SSL_UNEXPECTED_CID_FAIL + * In this case, the stack fails with the specific + * error code #MBEDTLS_ERR_SSL_UNEXPECTED_CID. + * + * \note The CID specification allows implementations to either + * use a common length for all incoming connection IDs or + * allow variable-length incoming IDs. Mbed TLS currently + * requires a common length for all connections sharing the + * same SSL configuration; this allows simpler parsing of + * record headers. + * + * \return \c 0 on success. + * \return #MBEDTLS_ERR_SSL_BAD_INPUT_DATA if \p own_cid_len + * is too large. + */ int mbedtls_ssl_conf_cid( mbedtls_ssl_config *conf, size_t len, int ignore_other_cid ) { if( len > MBEDTLS_SSL_CID_IN_LEN_MAX ) return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( ignore_other_cid != MBEDTLS_SSL_UNEXPECTED_CID_FAIL && ignore_other_cid != MBEDTLS_SSL_UNEXPECTED_CID_IGNORE ) { return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - conf->ignore_unexpected_cid = ignore_other_cid; conf->cid_len = len; return( 0 ); } +/** + * \brief Configure the use of the Connection ID (CID) + * extension in the next handshake. + * + * Reference: draft-ietf-tls-dtls-connection-id-05 + * https://tools.ietf.org/html/draft-ietf-tls-dtls-connection-id-05 + * + * The DTLS CID extension allows the reliable association of + * DTLS records to DTLS connections across changes in the + * underlying transport (changed IP and Port metadata) by + * adding explicit connection identifiers (CIDs) to the + * headers of encrypted DTLS records. The desired CIDs are + * configured by the application layer and are exchanged in + * new `ClientHello` / `ServerHello` extensions during the + * handshake, where each side indicates the CID it wants the + * peer to use when writing encrypted messages. The CIDs are + * put to use once records get encrypted: the stack discards + * any incoming records that don't include the configured CID + * in their header, and adds the peer's requested CID to the + * headers of outgoing messages. + * + * This API enables or disables the use of the CID extension + * in the next handshake and sets the value of the CID to + * be used for incoming messages. + * + * \param ssl The SSL context to configure. This must be initialized. + * \param enable This value determines whether the CID extension should + * be used or not. Possible values are: + * - MBEDTLS_SSL_CID_ENABLED to enable the use of the CID. + * - MBEDTLS_SSL_CID_DISABLED (default) to disable the use + * of the CID. + * \param own_cid The address of the readable buffer holding the CID we want + * the peer to use when sending encrypted messages to us. + * This may be \c NULL if \p own_cid_len is \c 0. + * This parameter is unused if \p enabled is set to + * MBEDTLS_SSL_CID_DISABLED. + * \param own_cid_len The length of \p own_cid. + * This parameter is unused if \p enabled is set to + * MBEDTLS_SSL_CID_DISABLED. + * + * \note The value of \p own_cid_len must match the value of the + * \c len parameter passed to mbedtls_ssl_conf_cid() + * when configuring the ::mbedtls_ssl_config that \p ssl + * is bound to. + * + * \note This CID configuration applies to subsequent handshakes + * performed on the SSL context \p ssl, but does not trigger + * one. You still have to call `mbedtls_ssl_handshake()` + * (for the initial handshake) or `mbedtls_ssl_renegotiate()` + * (for a renegotiation handshake) explicitly after a + * successful call to this function to run the handshake. + * + * \note This call cannot guarantee that the use of the CID + * will be successfully negotiated in the next handshake, + * because the peer might not support it. Specifically: + * - On the Client, enabling the use of the CID through + * this call implies that the `ClientHello` in the next + * handshake will include the CID extension, thereby + * offering the use of the CID to the server. Only if + * the `ServerHello` contains the CID extension, too, + * the CID extension will actually be put to use. + * - On the Server, enabling the use of the CID through + * this call implies that that the server will look for + * the CID extension in a `ClientHello` from the client, + * and, if present, reply with a CID extension in its + * `ServerHello`. + * + * \note To check whether the use of the CID was negotiated + * after the subsequent handshake has completed, please + * use the API mbedtls_ssl_get_peer_cid(). + * + * \warning If the use of the CID extension is enabled in this call + * and the subsequent handshake negotiates its use, Mbed TLS + * will silently drop every packet whose CID does not match + * the CID configured in \p own_cid. It is the responsibility + * of the user to adapt the underlying transport to take care + * of CID-based demultiplexing before handing datagrams to + * Mbed TLS. + * + * \return \c 0 on success. In this case, the CID configuration + * applies to the next handshake. + * \return A negative error code on failure. + */ int mbedtls_ssl_set_cid( mbedtls_ssl_context *ssl, int enable, unsigned char const *own_cid, @@ -90,7 +188,6 @@ int mbedtls_ssl_set_cid( mbedtls_ssl_context *ssl, { if( ssl->conf->transport != MBEDTLS_SSL_TRANSPORT_DATAGRAM ) return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - ssl->negotiate_cid = enable; if( enable == MBEDTLS_SSL_CID_DISABLED ) { @@ -99,7 +196,6 @@ int mbedtls_ssl_set_cid( mbedtls_ssl_context *ssl, } MBEDTLS_SSL_DEBUG_MSG( 3, ( "Enable use of CID extension." ) ); MBEDTLS_SSL_DEBUG_BUF( 3, "Own CID", own_cid, own_cid_len ); - if( own_cid_len != ssl->conf->cid_len ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "CID length %u does not match CID length %u in config", @@ -107,28 +203,61 @@ int mbedtls_ssl_set_cid( mbedtls_ssl_context *ssl, (unsigned) ssl->conf->cid_len ) ); return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - memcpy( ssl->own_cid, own_cid, own_cid_len ); /* Truncation is not an issue here because * MBEDTLS_SSL_CID_IN_LEN_MAX at most 255. */ ssl->own_cid_len = (uint8_t) own_cid_len; - return( 0 ); } +/** + * \brief Get information about the use of the CID extension + * in the current connection. + * + * \param ssl The SSL context to query. + * \param enabled The address at which to store whether the CID extension + * is currently in use or not. If the CID is in use, + * `*enabled` is set to MBEDTLS_SSL_CID_ENABLED; + * otherwise, it is set to MBEDTLS_SSL_CID_DISABLED. + * \param peer_cid The address of the buffer in which to store the CID + * chosen by the peer (if the CID extension is used). + * This may be \c NULL in case the value of peer CID + * isn't needed. If it is not \c NULL, \p peer_cid_len + * must not be \c NULL. + * \param peer_cid_len The address at which to store the size of the CID + * chosen by the peer (if the CID extension is used). + * This is also the number of Bytes in \p peer_cid that + * have been written. + * This may be \c NULL in case the length of the peer CID + * isn't needed. If it is \c NULL, \p peer_cid must be + * \c NULL, too. + * + * \note This applies to the state of the CID negotiated in + * the last complete handshake. If a handshake is in + * progress, this function will attempt to complete + * the handshake first. + * + * \note If CID extensions have been exchanged but both client + * and server chose to use an empty CID, this function + * sets `*enabled` to #MBEDTLS_SSL_CID_DISABLED + * (the rationale for this is that the resulting + * communication is the same as if the CID extensions + * hadn't been used). + * + * \return \c 0 on success. + * \return A negative error code on failure. + */ int mbedtls_ssl_get_peer_cid( mbedtls_ssl_context *ssl, int *enabled, unsigned char peer_cid[ MBEDTLS_SSL_CID_OUT_LEN_MAX ], size_t *peer_cid_len ) { *enabled = MBEDTLS_SSL_CID_DISABLED; - if( ssl->conf->transport != MBEDTLS_SSL_TRANSPORT_DATAGRAM || ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) { return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - /* We report MBEDTLS_SSL_CID_DISABLED in case the CID extensions * were used, but client and server requested the empty CID. * This is indistinguishable from not using the CID extension @@ -138,7 +267,6 @@ int mbedtls_ssl_get_peer_cid( mbedtls_ssl_context *ssl, { return( 0 ); } - if( peer_cid_len != NULL ) { *peer_cid_len = ssl->transform_in->out_cid_len; @@ -148,9 +276,7 @@ int mbedtls_ssl_get_peer_cid( mbedtls_ssl_context *ssl, ssl->transform_in->out_cid_len ); } } - *enabled = MBEDTLS_SSL_CID_ENABLED; - return( 0 ); } #endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ @@ -191,20 +317,15 @@ int mbedtls_ssl_session_copy( mbedtls_ssl_session *dst, { mbedtls_ssl_session_free( dst ); memcpy( dst, src, sizeof( mbedtls_ssl_session ) ); - #if defined(MBEDTLS_X509_CRT_PARSE_C) - #if defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) if( src->peer_cert != NULL ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - dst->peer_cert = mbedtls_calloc( 1, sizeof(mbedtls_x509_crt) ); if( dst->peer_cert == NULL ) return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); - mbedtls_x509_crt_init( dst->peer_cert ); - if( ( ret = mbedtls_x509_crt_parse_der( dst->peer_cert, src->peer_cert->raw.p, src->peer_cert->raw.len ) ) != 0 ) { @@ -220,27 +341,22 @@ int mbedtls_ssl_session_copy( mbedtls_ssl_session *dst, mbedtls_calloc( 1, src->peer_cert_digest_len ); if( dst->peer_cert_digest == NULL ) return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); - memcpy( dst->peer_cert_digest, src->peer_cert_digest, src->peer_cert_digest_len ); dst->peer_cert_digest_type = src->peer_cert_digest_type; dst->peer_cert_digest_len = src->peer_cert_digest_len; } #endif /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ - #endif /* MBEDTLS_X509_CRT_PARSE_C */ - #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C) if( src->ticket != NULL ) { dst->ticket = mbedtls_calloc( 1, src->ticket_len ); if( dst->ticket == NULL ) return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); - memcpy( dst->ticket, src->ticket, src->ticket_len ); } #endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_CLI_C */ - return( 0 ); } @@ -250,7 +366,6 @@ static int resize_buffer( unsigned char **buffer, size_t len_new, size_t *len_ol unsigned char* resized_buffer = mbedtls_calloc( 1, len_new ); if( resized_buffer == NULL ) return -1; - /* We want to copy len_new bytes when downsizing the buffer, and * len_old bytes when upsizing, so we choose the smaller of two sizes, * to fit one buffer into another. Size checks, ensuring that no data is @@ -259,10 +374,8 @@ static int resize_buffer( unsigned char **buffer, size_t len_new, size_t *len_ol ( len_new < *len_old ) ? len_new : *len_old ); mbedtls_platform_zeroize( *buffer, *len_old ); mbedtls_free( *buffer ); - *buffer = resized_buffer; *len_old = len_new; - return 0; } @@ -294,7 +407,6 @@ static void handle_buffer_resizing( mbedtls_ssl_context *ssl, int downsizing, } } } - if( ssl->out_buf != NULL ) { written_out = ssl->out_msg - ssl->out_buf; @@ -325,7 +437,6 @@ static void handle_buffer_resizing( mbedtls_ssl_context *ssl, int downsizing, ssl->out_msg = ssl->out_buf + written_out; ssl->out_len = ssl->out_buf + len_offset_out; ssl->out_iv = ssl->out_buf + iv_offset_out; - ssl->in_msg = ssl->in_buf + written_in; ssl->in_len = ssl->in_buf + len_offset_in; ssl->in_iv = ssl->in_buf + iv_offset_in; @@ -349,10 +460,8 @@ static int ssl3_prf( const unsigned char *secret, size_t slen, unsigned char padding[16]; unsigned char sha1sum[20]; ((void)label); - mbedtls_md5_init( &md5 ); mbedtls_sha1_init( &sha1 ); - /* * SSLv3: * block = @@ -364,7 +473,6 @@ static int ssl3_prf( const unsigned char *secret, size_t slen, for( i = 0; i < dlen / 16; i++ ) { memset( padding, (unsigned char) ('A' + i), 1 + i ); - if( ( ret = mbedtls_sha1_starts_ret( &sha1 ) ) != 0 ) goto exit; if( ( ret = mbedtls_sha1_update_ret( &sha1, padding, 1 + i ) ) != 0 ) @@ -375,7 +483,6 @@ static int ssl3_prf( const unsigned char *secret, size_t slen, goto exit; if( ( ret = mbedtls_sha1_finish_ret( &sha1, sha1sum ) ) != 0 ) goto exit; - if( ( ret = mbedtls_md5_starts_ret( &md5 ) ) != 0 ) goto exit; if( ( ret = mbedtls_md5_update_ret( &md5, secret, slen ) ) != 0 ) @@ -385,14 +492,11 @@ static int ssl3_prf( const unsigned char *secret, size_t slen, if( ( ret = mbedtls_md5_finish_ret( &md5, dstbuf + i * 16 ) ) != 0 ) goto exit; } - exit: mbedtls_md5_free( &md5 ); mbedtls_sha1_free( &sha1 ); - mbedtls_platform_zeroize( padding, sizeof( padding ) ); mbedtls_platform_zeroize( sha1sum, sizeof( sha1sum ) ); - return( ret ); } #endif /* MBEDTLS_SSL_PROTO_SSL3 */ @@ -412,9 +516,7 @@ static int tls1_prf( const unsigned char *secret, size_t slen, const mbedtls_md_info_t *md_info; mbedtls_md_context_t md_ctx; int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - mbedtls_md_init( &md_ctx ); - tmp_len = 20 + strlen( label ) + rlen; tmp = mbedtls_calloc( 1, tmp_len ); if( tmp == NULL ) @@ -422,16 +524,13 @@ static int tls1_prf( const unsigned char *secret, size_t slen, ret = MBEDTLS_ERR_SSL_ALLOC_FAILED; goto exit; } - hs = ( slen + 1 ) / 2; S1 = secret; S2 = secret + slen - hs; - nb = strlen( label ); memcpy( tmp + 20, label, nb ); memcpy( tmp + 20 + nb, random, rlen ); nb += rlen; - /* * First compute P_md5(secret,label+random)[0..dlen] */ @@ -440,34 +539,26 @@ static int tls1_prf( const unsigned char *secret, size_t slen, ret = MBEDTLS_ERR_SSL_INTERNAL_ERROR; goto exit; } - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) { goto exit; } - mbedtls_md_hmac_starts( &md_ctx, S1, hs ); mbedtls_md_hmac_update( &md_ctx, tmp + 20, nb ); mbedtls_md_hmac_finish( &md_ctx, 4 + tmp ); - for( i = 0; i < dlen; i += 16 ) { mbedtls_md_hmac_reset ( &md_ctx ); mbedtls_md_hmac_update( &md_ctx, 4 + tmp, 16 + nb ); mbedtls_md_hmac_finish( &md_ctx, h_i ); - mbedtls_md_hmac_reset ( &md_ctx ); mbedtls_md_hmac_update( &md_ctx, 4 + tmp, 16 ); mbedtls_md_hmac_finish( &md_ctx, 4 + tmp ); - k = ( i + 16 > dlen ) ? dlen % 16 : 16; - for( j = 0; j < k; j++ ) dstbuf[i + j] = h_i[j]; } - mbedtls_md_free( &md_ctx ); - /* * XOR out with P_sha1(secret,label+random)[0..dlen] */ @@ -476,172 +567,35 @@ static int tls1_prf( const unsigned char *secret, size_t slen, ret = MBEDTLS_ERR_SSL_INTERNAL_ERROR; goto exit; } - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) { goto exit; } - mbedtls_md_hmac_starts( &md_ctx, S2, hs ); mbedtls_md_hmac_update( &md_ctx, tmp + 20, nb ); mbedtls_md_hmac_finish( &md_ctx, tmp ); - for( i = 0; i < dlen; i += 20 ) { mbedtls_md_hmac_reset ( &md_ctx ); mbedtls_md_hmac_update( &md_ctx, tmp, 20 + nb ); mbedtls_md_hmac_finish( &md_ctx, h_i ); - mbedtls_md_hmac_reset ( &md_ctx ); mbedtls_md_hmac_update( &md_ctx, tmp, 20 ); mbedtls_md_hmac_finish( &md_ctx, tmp ); - k = ( i + 20 > dlen ) ? dlen % 20 : 20; - for( j = 0; j < k; j++ ) dstbuf[i + j] = (unsigned char)( dstbuf[i + j] ^ h_i[j] ); } - exit: mbedtls_md_free( &md_ctx ); - mbedtls_platform_zeroize( tmp, tmp_len ); mbedtls_platform_zeroize( h_i, sizeof( h_i ) ); - mbedtls_free( tmp ); return( ret ); } #endif /* MBEDTLS_SSL_PROTO_TLS1) || MBEDTLS_SSL_PROTO_TLS1_1 */ #if defined(MBEDTLS_SSL_PROTO_TLS1_2) -#if defined(MBEDTLS_USE_PSA_CRYPTO) - -static psa_status_t setup_psa_key_derivation( psa_key_derivation_operation_t* derivation, - psa_key_id_t key, - psa_algorithm_t alg, - const unsigned char* seed, size_t seed_length, - const unsigned char* label, size_t label_length, - size_t capacity ) -{ - psa_status_t status; - - status = psa_key_derivation_setup( derivation, alg ); - if( status != PSA_SUCCESS ) - return( status ); - - if( PSA_ALG_IS_TLS12_PRF( alg ) || PSA_ALG_IS_TLS12_PSK_TO_MS( alg ) ) - { - status = psa_key_derivation_input_bytes( derivation, - PSA_KEY_DERIVATION_INPUT_SEED, - seed, seed_length ); - if( status != PSA_SUCCESS ) - return( status ); - - if( mbedtls_svc_key_id_is_null( key ) ) - { - status = psa_key_derivation_input_bytes( - derivation, PSA_KEY_DERIVATION_INPUT_SECRET, - NULL, 0 ); - } - else - { - status = psa_key_derivation_input_key( - derivation, PSA_KEY_DERIVATION_INPUT_SECRET, key ); - } - if( status != PSA_SUCCESS ) - return( status ); - - status = psa_key_derivation_input_bytes( derivation, - PSA_KEY_DERIVATION_INPUT_LABEL, - label, label_length ); - if( status != PSA_SUCCESS ) - return( status ); - } - else - { - return( PSA_ERROR_NOT_SUPPORTED ); - } - - status = psa_key_derivation_set_capacity( derivation, capacity ); - if( status != PSA_SUCCESS ) - return( status ); - - return( PSA_SUCCESS ); -} - -static int tls_prf_generic( mbedtls_md_type_t md_type, - const unsigned char *secret, size_t slen, - const char *label, - const unsigned char *random, size_t rlen, - unsigned char *dstbuf, size_t dlen ) -{ - psa_status_t status; - psa_algorithm_t alg; - psa_key_id_t master_key = MBEDTLS_SVC_KEY_ID_INIT; - psa_key_derivation_operation_t derivation = - PSA_KEY_DERIVATION_OPERATION_INIT; - - if( md_type == MBEDTLS_MD_SHA384 ) - alg = PSA_ALG_TLS12_PRF(PSA_ALG_SHA_384); - else - alg = PSA_ALG_TLS12_PRF(PSA_ALG_SHA_256); - - /* Normally a "secret" should be long enough to be impossible to - * find by brute force, and in particular should not be empty. But - * this PRF is also used to derive an IV, in particular in EAP-TLS, - * and for this use case it makes sense to have a 0-length "secret". - * Since the key API doesn't allow importing a key of length 0, - * keep master_key=0, which setup_psa_key_derivation() understands - * to mean a 0-length "secret" input. */ - if( slen != 0 ) - { - psa_key_attributes_t key_attributes = psa_key_attributes_init(); - psa_set_key_usage_flags( &key_attributes, PSA_KEY_USAGE_DERIVE ); - psa_set_key_algorithm( &key_attributes, alg ); - psa_set_key_type( &key_attributes, PSA_KEY_TYPE_DERIVE ); - - status = psa_import_key( &key_attributes, secret, slen, &master_key ); - if( status != PSA_SUCCESS ) - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); - } - - status = setup_psa_key_derivation( &derivation, - master_key, alg, - random, rlen, - (unsigned char const *) label, - (size_t) strlen( label ), - dlen ); - if( status != PSA_SUCCESS ) - { - psa_key_derivation_abort( &derivation ); - psa_destroy_key( master_key ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); - } - - status = psa_key_derivation_output_bytes( &derivation, dstbuf, dlen ); - if( status != PSA_SUCCESS ) - { - psa_key_derivation_abort( &derivation ); - psa_destroy_key( master_key ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); - } - - status = psa_key_derivation_abort( &derivation ); - if( status != PSA_SUCCESS ) - { - psa_destroy_key( master_key ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); - } - - if( ! mbedtls_svc_key_id_is_null( master_key ) ) - status = psa_destroy_key( master_key ); - if( status != PSA_SUCCESS ) - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); - - return( 0 ); -} - -#else /* MBEDTLS_USE_PSA_CRYPTO */ static int tls_prf_generic( mbedtls_md_type_t md_type, const unsigned char *secret, size_t slen, @@ -714,7 +668,7 @@ exit: return( ret ); } -#endif /* MBEDTLS_USE_PSA_CRYPTO */ + #if defined(MBEDTLS_SHA256_C) static int tls_prf_sha256( const unsigned char *secret, size_t slen, const char *label, @@ -769,28 +723,6 @@ static void ssl_calc_finished_tls_sha384( mbedtls_ssl_context *, unsigned char * #endif #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ -#if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) && \ - defined(MBEDTLS_USE_PSA_CRYPTO) -static int ssl_use_opaque_psk( mbedtls_ssl_context const *ssl ) -{ - if( ssl->conf->f_psk != NULL ) - { - /* If we've used a callback to select the PSK, - * the static configuration is irrelevant. */ - if( ! mbedtls_svc_key_id_is_null( ssl->handshake->psk_opaque ) ) - return( 1 ); - - return( 0 ); - } - - if( ! mbedtls_svc_key_id_is_null( ssl->conf->psk_opaque ) ) - return( 1 ); - - return( 0 ); -} -#endif /* MBEDTLS_USE_PSA_CRYPTO && - MBEDTLS_KEY_EXCHANGE_PSK_ENABLED */ - #if defined(MBEDTLS_SSL_EXPORT_KEYS) static mbedtls_tls_prf_types tls_prf_get_type( mbedtls_ssl_tls_prf_cb *tls_prf ) { @@ -828,6 +760,21 @@ static mbedtls_tls_prf_types tls_prf_get_type( mbedtls_ssl_tls_prf_cb *tls_prf ) } #endif /* MBEDTLS_SSL_EXPORT_KEYS */ +/** + * \brief TLS-PRF function for key derivation. + * + * \param prf The tls_prf type funtion type to be used. + * \param secret Secret for the key derivation function. + * \param slen Length of the secret. + * \param label String label for the key derivation function, + * terminated with null character. + * \param random Random bytes. + * \param rlen Length of the random bytes buffer. + * \param dstbuf The buffer holding the derived key. + * \param dlen Length of the output buffer. + * + * \return 0 on sucess. An SSL specific error on failure. + */ int mbedtls_ssl_tls_prf( const mbedtls_tls_prf_types prf, const unsigned char *secret, size_t slen, const char *label, @@ -902,9 +849,6 @@ static int ssl_populate_transform( mbedtls_ssl_transform *transform, #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) int encrypt_then_mac, #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - int trunc_hmac, -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ #endif /* MBEDTLS_SSL_SOME_MODES_USE_MAC */ #if defined(MBEDTLS_ZLIB_SUPPORT) int compression, @@ -919,9 +863,6 @@ static int ssl_populate_transform( mbedtls_ssl_transform *transform, mbedtls_ssl_context *ssl ) { int ret = 0; -#if defined(MBEDTLS_USE_PSA_CRYPTO) - int psa_fallthrough; -#endif /* MBEDTLS_USE_PSA_CRYPTO */ unsigned char keyblk[256]; unsigned char *key1; unsigned char *key2; @@ -1082,25 +1023,6 @@ static int ssl_populate_transform( mbedtls_ssl_transform *transform, mac_key_len = mbedtls_md_get_size( md_info ); transform->maclen = mac_key_len; -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - /* - * If HMAC is to be truncated, we shall keep the leftmost bytes, - * (rfc 6066 page 13 or rfc 2104 section 4), - * so we only need to adjust the length here. - */ - if( trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_ENABLED ) - { - transform->maclen = MBEDTLS_SSL_TRUNCATED_HMAC_LEN; - -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT) - /* Fall back to old, non-compliant version of the truncated - * HMAC implementation which also truncates the key - * (Mbed TLS versions from 1.3 to 2.6.0) */ - mac_key_len = transform->maclen; -#endif - } -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ - /* IV length */ transform->ivlen = cipher_info->iv_size; @@ -1293,104 +1215,31 @@ static int ssl_populate_transform( mbedtls_ssl_transform *transform, } #endif -#if defined(MBEDTLS_USE_PSA_CRYPTO) - - /* Only use PSA-based ciphers for TLS-1.2. - * That's relevant at least for TLS-1.0, where - * we assume that mbedtls_cipher_crypt() updates - * the structure field for the IV, which the PSA-based - * implementation currently doesn't. */ -#if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { - ret = mbedtls_cipher_setup_psa( &transform->cipher_ctx_enc, - cipher_info, transform->taglen ); - if( ret != 0 && ret != MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_setup_psa", ret ); - goto end; - } - - if( ret == 0 ) - { - MBEDTLS_SSL_DEBUG_MSG( 3, ( "Successfully setup PSA-based encryption cipher context" ) ); - psa_fallthrough = 0; - } - else - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "Failed to setup PSA-based cipher context for record encryption - fall through to default setup." ) ); - psa_fallthrough = 1; - } - } - else - psa_fallthrough = 1; -#else - psa_fallthrough = 1; -#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - - if( psa_fallthrough == 1 ) -#endif /* MBEDTLS_USE_PSA_CRYPTO */ if( ( ret = mbedtls_cipher_setup( &transform->cipher_ctx_enc, - cipher_info ) ) != 0 ) + cipher_info ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_setup", ret ); goto end; } -#if defined(MBEDTLS_USE_PSA_CRYPTO) - /* Only use PSA-based ciphers for TLS-1.2. - * That's relevant at least for TLS-1.0, where - * we assume that mbedtls_cipher_crypt() updates - * the structure field for the IV, which the PSA-based - * implementation currently doesn't. */ -#if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { - ret = mbedtls_cipher_setup_psa( &transform->cipher_ctx_dec, - cipher_info, transform->taglen ); - if( ret != 0 && ret != MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_setup_psa", ret ); - goto end; - } - - if( ret == 0 ) - { - MBEDTLS_SSL_DEBUG_MSG( 3, ( "Successfully setup PSA-based decryption cipher context" ) ); - psa_fallthrough = 0; - } - else - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "Failed to setup PSA-based cipher context for record decryption - fall through to default setup." ) ); - psa_fallthrough = 1; - } - } - else - psa_fallthrough = 1; -#else - psa_fallthrough = 1; -#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - - if( psa_fallthrough == 1 ) -#endif /* MBEDTLS_USE_PSA_CRYPTO */ if( ( ret = mbedtls_cipher_setup( &transform->cipher_ctx_dec, - cipher_info ) ) != 0 ) + cipher_info ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_setup", ret ); goto end; } if( ( ret = mbedtls_cipher_setkey( &transform->cipher_ctx_enc, key1, - cipher_info->key_bitlen, - MBEDTLS_ENCRYPT ) ) != 0 ) + cipher_info->key_bitlen, + MBEDTLS_ENCRYPT ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_setkey", ret ); goto end; } if( ( ret = mbedtls_cipher_setkey( &transform->cipher_ctx_dec, key2, - cipher_info->key_bitlen, - MBEDTLS_DECRYPT ) ) != 0 ) + cipher_info->key_bitlen, + MBEDTLS_DECRYPT ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_setkey", ret ); goto end; @@ -1400,14 +1249,14 @@ static int ssl_populate_transform( mbedtls_ssl_transform *transform, if( cipher_info->mode == MBEDTLS_MODE_CBC ) { if( ( ret = mbedtls_cipher_set_padding_mode( &transform->cipher_ctx_enc, - MBEDTLS_PADDING_NONE ) ) != 0 ) + MBEDTLS_PADDING_NONE ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_set_padding_mode", ret ); goto end; } if( ( ret = mbedtls_cipher_set_padding_mode( &transform->cipher_ctx_dec, - MBEDTLS_PADDING_NONE ) ) != 0 ) + MBEDTLS_PADDING_NONE ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_set_padding_mode", ret ); goto end; @@ -1575,73 +1424,22 @@ static int ssl_compute_master( mbedtls_ssl_handshake_params *handshake, } #endif /* MBEDTLS_SSL_EXTENDED_MS_ENABLED */ -#if defined(MBEDTLS_USE_PSA_CRYPTO) && \ - defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) - if( handshake->ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK && - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 && - ssl_use_opaque_psk( ssl ) == 1 ) + ret = handshake->tls_prf( handshake->premaster, handshake->pmslen, + lbl, salt, salt_len, + master, + master_secret_len ); + if( ret != 0 ) { - /* Perform PSK-to-MS expansion in a single step. */ - psa_status_t status; - psa_algorithm_t alg; - psa_key_id_t psk; - psa_key_derivation_operation_t derivation = - PSA_KEY_DERIVATION_OPERATION_INIT; - mbedtls_md_type_t hash_alg = handshake->ciphersuite_info->mac; - - MBEDTLS_SSL_DEBUG_MSG( 2, ( "perform PSA-based PSK-to-MS expansion" ) ); - - psk = mbedtls_ssl_get_opaque_psk( ssl ); - - if( hash_alg == MBEDTLS_MD_SHA384 ) - alg = PSA_ALG_TLS12_PSK_TO_MS(PSA_ALG_SHA_384); - else - alg = PSA_ALG_TLS12_PSK_TO_MS(PSA_ALG_SHA_256); - - status = setup_psa_key_derivation( &derivation, psk, alg, - salt, salt_len, - (unsigned char const *) lbl, - (size_t) strlen( lbl ), - master_secret_len ); - if( status != PSA_SUCCESS ) - { - psa_key_derivation_abort( &derivation ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); - } - - status = psa_key_derivation_output_bytes( &derivation, - master, - master_secret_len ); - if( status != PSA_SUCCESS ) - { - psa_key_derivation_abort( &derivation ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); - } - - status = psa_key_derivation_abort( &derivation ); - if( status != PSA_SUCCESS ) - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); + MBEDTLS_SSL_DEBUG_RET( 1, "prf", ret ); + return( ret ); } - else -#endif - { - ret = handshake->tls_prf( handshake->premaster, handshake->pmslen, - lbl, salt, salt_len, - master, - master_secret_len ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "prf", ret ); - return( ret ); - } - MBEDTLS_SSL_DEBUG_BUF( 3, "premaster secret", - handshake->premaster, - handshake->pmslen ); + MBEDTLS_SSL_DEBUG_BUF( 3, "premaster secret", + handshake->premaster, + handshake->pmslen ); - mbedtls_platform_zeroize( handshake->premaster, - sizeof(handshake->premaster) ); - } + mbedtls_platform_zeroize( handshake->premaster, + sizeof(handshake->premaster) ); return( 0 ); } @@ -1693,9 +1491,6 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) ssl->session_negotiate->encrypt_then_mac, #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - ssl->session_negotiate->trunc_hmac, -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ #endif /* MBEDTLS_SSL_SOME_MODES_USE_MAC */ #if defined(MBEDTLS_ZLIB_SUPPORT) ssl->session_negotiate->compression, @@ -1826,46 +1621,15 @@ void ssl_calc_verify_tls_sha256( const mbedtls_ssl_context *ssl, unsigned char *hash, size_t *hlen ) { -#if defined(MBEDTLS_USE_PSA_CRYPTO) - size_t hash_size; - psa_status_t status; - psa_hash_operation_t sha256_psa = psa_hash_operation_init(); - - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> PSA calc verify sha256" ) ); - status = psa_hash_clone( &ssl->handshake->fin_sha256_psa, &sha256_psa ); - if( status != PSA_SUCCESS ) - { - MBEDTLS_SSL_DEBUG_MSG( 2, ( "PSA hash clone failed" ) ); - return; - } - - status = psa_hash_finish( &sha256_psa, hash, 32, &hash_size ); - if( status != PSA_SUCCESS ) - { - MBEDTLS_SSL_DEBUG_MSG( 2, ( "PSA hash finish failed" ) ); - return; - } - - *hlen = 32; - MBEDTLS_SSL_DEBUG_BUF( 3, "PSA calculated verify result", hash, *hlen ); - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= PSA calc verify" ) ); -#else mbedtls_sha256_context sha256; - mbedtls_sha256_init( &sha256 ); - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> calc verify sha256" ) ); - mbedtls_sha256_clone( &sha256, &ssl->handshake->fin_sha256 ); mbedtls_sha256_finish_ret( &sha256, hash ); - *hlen = 32; - MBEDTLS_SSL_DEBUG_BUF( 3, "calculated verify result", hash, *hlen ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= calc verify" ) ); - mbedtls_sha256_free( &sha256 ); -#endif /* MBEDTLS_USE_PSA_CRYPTO */ return; } #endif /* MBEDTLS_SHA256_C */ @@ -1875,46 +1639,15 @@ void ssl_calc_verify_tls_sha384( const mbedtls_ssl_context *ssl, unsigned char *hash, size_t *hlen ) { -#if defined(MBEDTLS_USE_PSA_CRYPTO) - size_t hash_size; - psa_status_t status; - psa_hash_operation_t sha384_psa = psa_hash_operation_init(); - - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> PSA calc verify sha384" ) ); - status = psa_hash_clone( &ssl->handshake->fin_sha384_psa, &sha384_psa ); - if( status != PSA_SUCCESS ) - { - MBEDTLS_SSL_DEBUG_MSG( 2, ( "PSA hash clone failed" ) ); - return; - } - - status = psa_hash_finish( &sha384_psa, hash, 48, &hash_size ); - if( status != PSA_SUCCESS ) - { - MBEDTLS_SSL_DEBUG_MSG( 2, ( "PSA hash finish failed" ) ); - return; - } - - *hlen = 48; - MBEDTLS_SSL_DEBUG_BUF( 3, "PSA calculated verify result", hash, *hlen ); - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= PSA calc verify" ) ); -#else mbedtls_sha512_context sha512; - mbedtls_sha512_init( &sha512 ); - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> calc verify sha384" ) ); - mbedtls_sha512_clone( &sha512, &ssl->handshake->fin_sha512 ); mbedtls_sha512_finish_ret( &sha512, hash ); - *hlen = 48; - MBEDTLS_SSL_DEBUG_BUF( 3, "calculated verify result", hash, *hlen ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= calc verify" ) ); - mbedtls_sha512_free( &sha512 ); -#endif /* MBEDTLS_USE_PSA_CRYPTO */ return; } #endif /* MBEDTLS_SHA512_C */ @@ -2111,16 +1844,13 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) { const mbedtls_ssl_ciphersuite_t *ciphersuite_info = ssl->handshake->ciphersuite_info; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate" ) ); - if( !mbedtls_ssl_ciphersuite_uses_srv_cert( ciphersuite_info ) ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate" ) ); ssl->state++; return( 0 ); } - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } @@ -2129,16 +1859,13 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) { const mbedtls_ssl_ciphersuite_t *ciphersuite_info = ssl->handshake->ciphersuite_info; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate" ) ); - if( !mbedtls_ssl_ciphersuite_uses_srv_cert( ciphersuite_info ) ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate" ) ); ssl->state++; return( 0 ); } - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } @@ -2153,16 +1880,13 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) const mbedtls_x509_crt *crt; const mbedtls_ssl_ciphersuite_t *ciphersuite_info = ssl->handshake->ciphersuite_info; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate" ) ); - if( !mbedtls_ssl_ciphersuite_uses_srv_cert( ciphersuite_info ) ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate" ) ); ssl->state++; return( 0 ); } - #if defined(MBEDTLS_SSL_CLI_C) if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) { @@ -2172,7 +1896,6 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) ssl->state++; return( 0 ); } - #if defined(MBEDTLS_SSL_PROTO_SSL3) /* * If using SSLv3 and got no cert, send an Alert message @@ -2185,7 +1908,6 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) ssl->out_msgtype = MBEDTLS_SSL_MSG_ALERT; ssl->out_msg[0] = MBEDTLS_SSL_ALERT_LEVEL_WARNING; ssl->out_msg[1] = MBEDTLS_SSL_ALERT_MSG_NO_CERT; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "got no certificate to send" ) ); goto write_msg; } @@ -2202,9 +1924,7 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) } } #endif - MBEDTLS_SSL_DEBUG_CRT( 3, "own certificate", mbedtls_ssl_own_cert( ssl ) ); - /* * 0 . 0 handshake type * 1 . 3 handshake length @@ -2216,7 +1936,6 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) */ i = 7; crt = mbedtls_ssl_own_cert( ssl ); - while( crt != NULL ) { n = crt->raw.len; @@ -2227,37 +1946,28 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) i + 3 + n, (size_t) MBEDTLS_SSL_OUT_CONTENT_LEN ) ); return( MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE ); } - ssl->out_msg[i ] = (unsigned char)( n >> 16 ); ssl->out_msg[i + 1] = (unsigned char)( n >> 8 ); ssl->out_msg[i + 2] = (unsigned char)( n ); - i += 3; memcpy( ssl->out_msg + i, crt->raw.p, n ); i += n; crt = crt->next; } - ssl->out_msg[4] = (unsigned char)( ( i - 7 ) >> 16 ); ssl->out_msg[5] = (unsigned char)( ( i - 7 ) >> 8 ); ssl->out_msg[6] = (unsigned char)( ( i - 7 ) ); - ssl->out_msglen = i; ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE; ssl->out_msg[0] = MBEDTLS_SSL_HS_CERTIFICATE; - #if defined(MBEDTLS_SSL_PROTO_SSL3) && defined(MBEDTLS_SSL_CLI_C) write_msg: #endif - ssl->state++; - if( ( ret = mbedtls_ssl_write_handshake_msg( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_handshake_msg", ret ); return( ret ); } - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write certificate" ) ); - return( ret ); } @@ -2275,10 +1985,11 @@ static int ssl_check_peer_crt_unchanged( mbedtls_ssl_context *ssl, if( peer_crt->raw.len != crt_buf_len ) return( -1 ); - return( memcmp( peer_crt->raw.p, crt_buf, peer_crt->raw.len ) ); } + #else /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ + static int ssl_check_peer_crt_unchanged( mbedtls_ssl_context *ssl, unsigned char *crt_buf, size_t crt_buf_len ) @@ -2292,20 +2003,17 @@ static int ssl_check_peer_crt_unchanged( mbedtls_ssl_context *ssl, mbedtls_md_info_from_type( peer_cert_digest_type ); unsigned char tmp_digest[MBEDTLS_SSL_PEER_CERT_DIGEST_MAX_LEN]; size_t digest_len; - if( peer_cert_digest == NULL || digest_info == NULL ) return( -1 ); - digest_len = mbedtls_md_get_size( digest_info ); if( digest_len > MBEDTLS_SSL_PEER_CERT_DIGEST_MAX_LEN ) return( -1 ); - ret = mbedtls_md( digest_info, crt_buf, crt_buf_len, tmp_digest ); if( ret != 0 ) return( -1 ); - return( memcmp( tmp_digest, peer_cert_digest, digest_len ) ); } + #endif /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ #endif /* MBEDTLS_SSL_RENEGOTIATION && MBEDTLS_SSL_CLI_C */ @@ -2322,7 +2030,6 @@ static int ssl_parse_certificate_chain( mbedtls_ssl_context *ssl, #endif size_t i, n; uint8_t alert; - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); @@ -2330,7 +2037,6 @@ static int ssl_parse_certificate_chain( mbedtls_ssl_context *ssl, MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE ); return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - if( ssl->in_msg[0] != MBEDTLS_SSL_HS_CERTIFICATE || ssl->in_hslen < mbedtls_ssl_hs_hdr_len( ssl ) + 3 + 3 ) { @@ -2339,14 +2045,11 @@ static int ssl_parse_certificate_chain( mbedtls_ssl_context *ssl, MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } - i = mbedtls_ssl_hs_hdr_len( ssl ); - /* * Same message structure as in mbedtls_ssl_write_certificate() */ n = ( ssl->in_msg[i+1] << 8 ) | ssl->in_msg[i+2]; - if( ssl->in_msg[i] != 0 || ssl->in_hslen != n + 3 + mbedtls_ssl_hs_hdr_len( ssl ) ) { @@ -2355,10 +2058,8 @@ static int ssl_parse_certificate_chain( mbedtls_ssl_context *ssl, MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } - /* Make &ssl->in_msg[i] point to the beginning of the CRT chain. */ i += 3; - /* Iterate through and parse the CRTs in the provided chain. */ while( i < ssl->in_hslen ) { @@ -2380,12 +2081,10 @@ static int ssl_parse_certificate_chain( mbedtls_ssl_context *ssl, MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } - /* Read length of the next CRT in the chain. */ n = ( (unsigned int) ssl->in_msg[i + 1] << 8 ) | (unsigned int) ssl->in_msg[i + 2]; i += 3; - if( n < 128 || i + n > ssl->in_hslen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); @@ -2394,7 +2093,6 @@ static int ssl_parse_certificate_chain( mbedtls_ssl_context *ssl, MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } - /* Check if we're handling the first CRT in the chain. */ #if defined(MBEDTLS_SSL_RENEGOTIATION) && defined(MBEDTLS_SSL_CLI_C) if( crt_cnt++ == 0 && @@ -2416,12 +2114,10 @@ static int ssl_parse_certificate_chain( mbedtls_ssl_context *ssl, MBEDTLS_SSL_ALERT_MSG_ACCESS_DENIED ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } - /* Now we can safely free the original chain. */ ssl_clear_peer_cert( ssl->session ); } #endif /* MBEDTLS_SSL_RENEGOTIATION && MBEDTLS_SSL_CLI_C */ - /* Parse the next certificate in the chain. */ #if defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) ret = mbedtls_x509_crt_parse_der( chain, ssl->in_msg + i, n ); @@ -2437,15 +2133,12 @@ static int ssl_parse_certificate_chain( mbedtls_ssl_context *ssl, /* Ignore certificate with an unknown algorithm: maybe a prior certificate was already trusted. */ break; - case MBEDTLS_ERR_X509_ALLOC_FAILED: alert = MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR; goto crt_parse_der_failed; - case MBEDTLS_ERR_X509_UNKNOWN_VERSION: alert = MBEDTLS_SSL_ALERT_MSG_UNSUPPORTED_CERT; goto crt_parse_der_failed; - default: alert = MBEDTLS_SSL_ALERT_MSG_BAD_CERT; crt_parse_der_failed: @@ -2453,10 +2146,8 @@ static int ssl_parse_certificate_chain( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_RET( 1, " mbedtls_x509_crt_parse_der", ret ); return( ret ); } - i += n; } - MBEDTLS_SSL_DEBUG_CRT( 3, "peer certificate", chain ); return( 0 ); } @@ -2549,13 +2240,10 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl, const mbedtls_ssl_ciphersuite_t *ciphersuite_info = ssl->handshake->ciphersuite_info; int have_ca_chain = 0; - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *); void *p_vrfy; - if( authmode == MBEDTLS_SSL_VERIFY_NONE ) return( 0 ); - if( ssl->f_vrfy != NULL ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "Use context-specific verification callback" ) ); @@ -2568,7 +2256,6 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl, f_vrfy = ssl->conf->f_vrfy; p_vrfy = ssl->conf->p_vrfy; } - /* * Main check: verify certificate */ @@ -2577,7 +2264,6 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl, { ((void) rs_ctx); have_ca_chain = 1; - MBEDTLS_SSL_DEBUG_MSG( 3, ( "use CA callback for X.509 CRT verification" ) ); ret = mbedtls_x509_crt_verify_with_ca_cb( chain, @@ -2593,7 +2279,6 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl, { mbedtls_x509_crt *ca_chain; mbedtls_x509_crl *ca_crl; - #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) if( ssl->handshake->sni_ca_chain != NULL ) { @@ -2606,10 +2291,8 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl, ca_chain = ssl->conf->ca_chain; ca_crl = ssl->conf->ca_crl; } - if( ca_chain != NULL ) have_ca_chain = 1; - ret = mbedtls_x509_crt_verify_restartable( chain, ca_chain, ca_crl, @@ -2618,38 +2301,31 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl, &ssl->session_negotiate->verify_result, f_vrfy, p_vrfy, rs_ctx ); } - if( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "x509_verify_cert", ret ); } - #if defined(MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED) if( ret == MBEDTLS_ERR_ECP_IN_PROGRESS ) return( MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS ); #endif - /* * Secondary checks: always done, but change 'ret' only if it was 0 */ - #if defined(MBEDTLS_ECP_C) { const mbedtls_pk_context *pk = &chain->pk; - /* If certificate uses an EC key, make sure the curve is OK */ if( mbedtls_pk_can_do( pk, MBEDTLS_PK_ECKEY ) && mbedtls_ssl_check_curve( ssl, mbedtls_pk_ec( *pk )->grp.id ) != 0 ) { ssl->session_negotiate->verify_result |= MBEDTLS_X509_BADCERT_BAD_KEY; - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate (EC key curve)" ) ); if( ret == 0 ) ret = MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE; } } #endif /* MBEDTLS_ECP_C */ - if( mbedtls_ssl_check_cert_usage( chain, ciphersuite_info, ! ssl->conf->endpoint, @@ -2659,7 +2335,6 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl, if( ret == 0 ) ret = MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE; } - /* mbedtls_x509_crt_verify_with_profile is supposed to report a * verification failure through MBEDTLS_ERR_X509_CERT_VERIFY_FAILED, * with details encoded in the verification flags. All other kinds @@ -2672,17 +2347,14 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl, { ret = 0; } - if( have_ca_chain == 0 && authmode == MBEDTLS_SSL_VERIFY_REQUIRED ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no CA chain" ) ); ret = MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED; } - if( ret != 0 ) { uint8_t alert; - /* The certificate may have been rejected for several reasons. Pick one and send the corresponding alert. Which alert to send may be a subject of debate in some cases. */ @@ -2711,7 +2383,6 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl, mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, alert ); } - #if defined(MBEDTLS_DEBUG_C) if( ssl->session_negotiate->verify_result != 0 ) { @@ -2723,7 +2394,6 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_MSG( 3, ( "Certificate verification flags clear" ) ); } #endif /* MBEDTLS_DEBUG_C */ - return( ret ); } @@ -2742,20 +2412,16 @@ static int ssl_remember_peer_crt_digest( mbedtls_ssl_context *ssl, mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR ); - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } - ret = mbedtls_md( mbedtls_md_info_from_type( MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE ), start, len, ssl->session_negotiate->peer_cert_digest ); - ssl->session_negotiate->peer_cert_digest_type = MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE; ssl->session_negotiate->peer_cert_digest_len = MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_LEN; - return( ret ); } @@ -2764,7 +2430,6 @@ static int ssl_remember_peer_pubkey( mbedtls_ssl_context *ssl, { unsigned char *end = start + len; int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - /* Make a copy of the peer's raw public key. */ mbedtls_pk_init( &ssl->handshake->peer_pubkey ); ret = mbedtls_pk_parse_subpubkey( &start, end, @@ -2774,7 +2439,6 @@ static int ssl_remember_peer_pubkey( mbedtls_ssl_context *ssl, /* We should have parsed the public key before. */ return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - return( 0 ); } #endif /* !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ @@ -2792,16 +2456,13 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) #endif void *rs_ctx = NULL; mbedtls_x509_crt *chain = NULL; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate" ) ); - crt_expected = ssl_parse_certificate_coordinate( ssl, authmode ); if( crt_expected == SSL_CERTIFICATE_SKIP ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate" ) ); goto exit; } - #if defined(MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED) if( ssl->handshake->ecrs_enabled && ssl->handshake->ecrs_state == ssl_ecrs_crt_verify ) @@ -2811,7 +2472,6 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) goto crt_verify; } #endif - if( ( ret = mbedtls_ssl_read_record( ssl, 1 ) ) != 0 ) { /* mbedtls_ssl_read_record may have sent an alert already. We @@ -2819,23 +2479,18 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); goto exit; } - #if defined(MBEDTLS_SSL_SRV_C) if( ssl_srv_check_client_no_crt_notification( ssl ) == 0 ) { ssl->session_negotiate->verify_result = MBEDTLS_X509_BADCERT_MISSING; - if( authmode != MBEDTLS_SSL_VERIFY_OPTIONAL ) ret = MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE; - goto exit; } #endif /* MBEDTLS_SSL_SRV_C */ - /* Clear existing peer CRT structure in case we tried to * reuse a session but it failed, and allocate a new one. */ ssl_clear_peer_cert( ssl->session_negotiate ); - chain = mbedtls_calloc( 1, sizeof( mbedtls_x509_crt ) ); if( chain == NULL ) { @@ -2844,56 +2499,44 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR ); - ret = MBEDTLS_ERR_SSL_ALLOC_FAILED; goto exit; } mbedtls_x509_crt_init( chain ); - ret = ssl_parse_certificate_chain( ssl, chain ); if( ret != 0 ) goto exit; - #if defined(MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED) if( ssl->handshake->ecrs_enabled) ssl->handshake->ecrs_state = ssl_ecrs_crt_verify; - crt_verify: if( ssl->handshake->ecrs_enabled) rs_ctx = &ssl->handshake->ecrs_ctx; #endif - ret = ssl_parse_certificate_verify( ssl, authmode, chain, rs_ctx ); if( ret != 0 ) goto exit; - #if !defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) { unsigned char *crt_start, *pk_start; size_t crt_len, pk_len; - /* We parse the CRT chain without copying, so * these pointers point into the input buffer, * and are hence still valid after freeing the * CRT chain. */ - crt_start = chain->raw.p; crt_len = chain->raw.len; - pk_start = chain->pk_raw.p; pk_len = chain->pk_raw.len; - /* Free the CRT structures before computing * digest and copying the peer's public key. */ mbedtls_x509_crt_free( chain ); mbedtls_free( chain ); chain = NULL; - ret = ssl_remember_peer_crt_digest( ssl, crt_start, crt_len ); if( ret != 0 ) goto exit; - ret = ssl_remember_peer_pubkey( ssl, pk_start, pk_len ); if( ret != 0 ) goto exit; @@ -2903,14 +2546,10 @@ crt_verify: ssl->session_negotiate->peer_cert = chain; chain = NULL; #endif /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse certificate" ) ); - exit: - if( ret == 0 ) ssl->state++; - #if defined(MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED) if( ret == MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS ) { @@ -2918,19 +2557,17 @@ exit: chain = NULL; } #endif - if( chain != NULL ) { mbedtls_x509_crt_free( chain ); mbedtls_free( chain ); } - return( ret ); } #endif /* MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED */ void mbedtls_ssl_optimize_checksum( mbedtls_ssl_context *ssl, - const mbedtls_ssl_ciphersuite_t *ciphersuite_info ) + const mbedtls_ssl_ciphersuite_t *ciphersuite_info ) { ((void) ciphersuite_info); @@ -2967,21 +2604,11 @@ void mbedtls_ssl_reset_checksum( mbedtls_ssl_context *ssl ) #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_2) #if defined(MBEDTLS_SHA256_C) -#if defined(MBEDTLS_USE_PSA_CRYPTO) - psa_hash_abort( &ssl->handshake->fin_sha256_psa ); - psa_hash_setup( &ssl->handshake->fin_sha256_psa, PSA_ALG_SHA_256 ); -#else mbedtls_sha256_starts_ret( &ssl->handshake->fin_sha256, 0 ); #endif -#endif #if defined(MBEDTLS_SHA512_C) -#if defined(MBEDTLS_USE_PSA_CRYPTO) - psa_hash_abort( &ssl->handshake->fin_sha384_psa ); - psa_hash_setup( &ssl->handshake->fin_sha384_psa, PSA_ALG_SHA_384 ); -#else mbedtls_sha512_starts_ret( &ssl->handshake->fin_sha512, 1 ); #endif -#endif #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ } @@ -2995,19 +2622,11 @@ static void ssl_update_checksum_start( mbedtls_ssl_context *ssl, #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_2) #if defined(MBEDTLS_SHA256_C) -#if defined(MBEDTLS_USE_PSA_CRYPTO) - psa_hash_update( &ssl->handshake->fin_sha256_psa, buf, len ); -#else mbedtls_sha256_update_ret( &ssl->handshake->fin_sha256, buf, len ); #endif -#endif #if defined(MBEDTLS_SHA512_C) -#if defined(MBEDTLS_USE_PSA_CRYPTO) - psa_hash_update( &ssl->handshake->fin_sha384_psa, buf, len ); -#else mbedtls_sha512_update_ret( &ssl->handshake->fin_sha512, buf, len ); #endif -#endif #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ } @@ -3026,11 +2645,7 @@ static void ssl_update_checksum_md5sha1( mbedtls_ssl_context *ssl, static void ssl_update_checksum_sha256( mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len ) { -#if defined(MBEDTLS_USE_PSA_CRYPTO) - psa_hash_update( &ssl->handshake->fin_sha256_psa, buf, len ); -#else mbedtls_sha256_update_ret( &ssl->handshake->fin_sha256, buf, len ); -#endif } #endif @@ -3038,11 +2653,7 @@ static void ssl_update_checksum_sha256( mbedtls_ssl_context *ssl, static void ssl_update_checksum_sha384( mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len ) { -#if defined(MBEDTLS_USE_PSA_CRYPTO) - psa_hash_update( &ssl->handshake->fin_sha384_psa, buf, len ); -#else mbedtls_sha512_update_ret( &ssl->handshake->fin_sha512, buf, len ); -#endif } #endif #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ @@ -3054,23 +2665,17 @@ static void ssl_calc_finished_ssl( const char *sender; mbedtls_md5_context md5; mbedtls_sha1_context sha1; - unsigned char padbuf[48]; unsigned char md5sum[16]; unsigned char sha1sum[20]; - mbedtls_ssl_session *session = ssl->session_negotiate; if( !session ) session = ssl->session; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> calc finished ssl" ) ); - mbedtls_md5_init( &md5 ); mbedtls_sha1_init( &sha1 ); - mbedtls_md5_clone( &md5, &ssl->handshake->fin_md5 ); mbedtls_sha1_clone( &sha1, &ssl->handshake->fin_sha1 ); - /* * SSLv3: * hash = @@ -3079,55 +2684,42 @@ static void ssl_calc_finished_ssl( * + SHA1( master + pad2 + * SHA1( handshake + sender + master + pad1 ) ) */ - #if !defined(MBEDTLS_MD5_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished md5 state", (unsigned char *) md5.state, sizeof( md5.state ) ); #endif - #if !defined(MBEDTLS_SHA1_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished sha1 state", (unsigned char *) sha1.state, sizeof( sha1.state ) ); #endif - sender = ( from == MBEDTLS_SSL_IS_CLIENT ) ? "CLNT" : "SRVR"; - memset( padbuf, 0x36, 48 ); - mbedtls_md5_update_ret( &md5, (const unsigned char *) sender, 4 ); mbedtls_md5_update_ret( &md5, session->master, 48 ); mbedtls_md5_update_ret( &md5, padbuf, 48 ); mbedtls_md5_finish_ret( &md5, md5sum ); - mbedtls_sha1_update_ret( &sha1, (const unsigned char *) sender, 4 ); mbedtls_sha1_update_ret( &sha1, session->master, 48 ); mbedtls_sha1_update_ret( &sha1, padbuf, 40 ); mbedtls_sha1_finish_ret( &sha1, sha1sum ); - memset( padbuf, 0x5C, 48 ); - mbedtls_md5_starts_ret( &md5 ); mbedtls_md5_update_ret( &md5, session->master, 48 ); mbedtls_md5_update_ret( &md5, padbuf, 48 ); mbedtls_md5_update_ret( &md5, md5sum, 16 ); mbedtls_md5_finish_ret( &md5, buf ); - mbedtls_sha1_starts_ret( &sha1 ); mbedtls_sha1_update_ret( &sha1, session->master, 48 ); mbedtls_sha1_update_ret( &sha1, padbuf , 40 ); mbedtls_sha1_update_ret( &sha1, sha1sum, 20 ); mbedtls_sha1_finish_ret( &sha1, buf + 16 ); - MBEDTLS_SSL_DEBUG_BUF( 3, "calc finished result", buf, 36 ); - mbedtls_md5_free( &md5 ); mbedtls_sha1_free( &sha1 ); - mbedtls_platform_zeroize( padbuf, sizeof( padbuf ) ); mbedtls_platform_zeroize( md5sum, sizeof( md5sum ) ); mbedtls_platform_zeroize( sha1sum, sizeof( sha1sum ) ); - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= calc finished" ) ); } #endif /* MBEDTLS_SSL_PROTO_SSL3 */ @@ -3141,52 +2733,38 @@ static void ssl_calc_finished_tls( mbedtls_md5_context md5; mbedtls_sha1_context sha1; unsigned char padbuf[36]; - mbedtls_ssl_session *session = ssl->session_negotiate; if( !session ) session = ssl->session; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> calc finished tls" ) ); - mbedtls_md5_init( &md5 ); mbedtls_sha1_init( &sha1 ); - mbedtls_md5_clone( &md5, &ssl->handshake->fin_md5 ); mbedtls_sha1_clone( &sha1, &ssl->handshake->fin_sha1 ); - /* * TLSv1: * hash = PRF( master, finished_label, * MD5( handshake ) + SHA1( handshake ) )[0..11] */ - #if !defined(MBEDTLS_MD5_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished md5 state", (unsigned char *) - md5.state, sizeof( md5.state ) ); + md5.state, sizeof( md5.state ) ); #endif - #if !defined(MBEDTLS_SHA1_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished sha1 state", (unsigned char *) - sha1.state, sizeof( sha1.state ) ); + sha1.state, sizeof( sha1.state ) ); #endif - sender = ( from == MBEDTLS_SSL_IS_CLIENT ) ? "client finished" : "server finished"; - mbedtls_md5_finish_ret( &md5, padbuf ); mbedtls_sha1_finish_ret( &sha1, padbuf + 16 ); - ssl->handshake->tls_prf( session->master, 48, sender, padbuf, 36, buf, len ); - MBEDTLS_SSL_DEBUG_BUF( 3, "calc finished result", buf, len ); - mbedtls_md5_free( &md5 ); mbedtls_sha1_free( &sha1 ); - mbedtls_platform_zeroize( padbuf, sizeof( padbuf ) ); - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= calc finished" ) ); } #endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 */ @@ -3199,71 +2777,32 @@ static void ssl_calc_finished_tls_sha256( int len = 12; const char *sender; unsigned char padbuf[32]; -#if defined(MBEDTLS_USE_PSA_CRYPTO) - size_t hash_size; - psa_hash_operation_t sha256_psa = PSA_HASH_OPERATION_INIT; - psa_status_t status; -#else mbedtls_sha256_context sha256; -#endif - mbedtls_ssl_session *session = ssl->session_negotiate; if( !session ) session = ssl->session; - sender = ( from == MBEDTLS_SSL_IS_CLIENT ) ? "client finished" : "server finished"; -#if defined(MBEDTLS_USE_PSA_CRYPTO) - sha256_psa = psa_hash_operation_init(); - - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> calc PSA finished tls sha256" ) ); - - status = psa_hash_clone( &ssl->handshake->fin_sha256_psa, &sha256_psa ); - if( status != PSA_SUCCESS ) - { - MBEDTLS_SSL_DEBUG_MSG( 2, ( "PSA hash clone failed" ) ); - return; - } - - status = psa_hash_finish( &sha256_psa, padbuf, sizeof( padbuf ), &hash_size ); - if( status != PSA_SUCCESS ) - { - MBEDTLS_SSL_DEBUG_MSG( 2, ( "PSA hash finish failed" ) ); - return; - } - MBEDTLS_SSL_DEBUG_BUF( 3, "PSA calculated padbuf", padbuf, 32 ); -#else - mbedtls_sha256_init( &sha256 ); - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> calc finished tls sha256" ) ); - mbedtls_sha256_clone( &sha256, &ssl->handshake->fin_sha256 ); - /* * TLSv1.2: * hash = PRF( master, finished_label, * Hash( handshake ) )[0.11] */ - #if !defined(MBEDTLS_SHA256_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished sha2 state", (unsigned char *) sha256.state, sizeof( sha256.state ) ); #endif - mbedtls_sha256_finish_ret( &sha256, padbuf ); mbedtls_sha256_free( &sha256 ); -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - ssl->handshake->tls_prf( session->master, 48, sender, padbuf, 32, buf, len ); - MBEDTLS_SSL_DEBUG_BUF( 3, "calc finished result", buf, len ); - mbedtls_platform_zeroize( padbuf, sizeof( padbuf ) ); - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= calc finished" ) ); } #endif /* MBEDTLS_SHA256_C */ @@ -3278,58 +2817,24 @@ static void ssl_calc_finished_tls_sha384( int len = 12; const char *sender; unsigned char padbuf[48]; -#if defined(MBEDTLS_USE_PSA_CRYPTO) - size_t hash_size; - psa_hash_operation_t sha384_psa = PSA_HASH_OPERATION_INIT; - psa_status_t status; -#else mbedtls_sha512_context sha512; -#endif - mbedtls_ssl_session *session = ssl->session_negotiate; if( !session ) session = ssl->session; - sender = ( from == MBEDTLS_SSL_IS_CLIENT ) ? "client finished" : "server finished"; - -#if defined(MBEDTLS_USE_PSA_CRYPTO) - sha384_psa = psa_hash_operation_init(); - - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> calc PSA finished tls sha384" ) ); - - status = psa_hash_clone( &ssl->handshake->fin_sha384_psa, &sha384_psa ); - if( status != PSA_SUCCESS ) - { - MBEDTLS_SSL_DEBUG_MSG( 2, ( "PSA hash clone failed" ) ); - return; - } - - status = psa_hash_finish( &sha384_psa, padbuf, sizeof( padbuf ), &hash_size ); - if( status != PSA_SUCCESS ) - { - MBEDTLS_SSL_DEBUG_MSG( 2, ( "PSA hash finish failed" ) ); - return; - } - MBEDTLS_SSL_DEBUG_BUF( 3, "PSA calculated padbuf", padbuf, 48 ); -#else mbedtls_sha512_init( &sha512 ); - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> calc finished tls sha384" ) ); - mbedtls_sha512_clone( &sha512, &ssl->handshake->fin_sha512 ); - /* * TLSv1.2: * hash = PRF( master, finished_label, * Hash( handshake ) )[0.11] */ - #if !defined(MBEDTLS_SHA512_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished sha512 state", (unsigned char *) sha512.state, sizeof( sha512.state ) ); -#endif /* * For SHA-384, we can save 16 bytes by keeping padbuf 48 bytes long. * However, to avoid stringop-overflow warning in gcc, we have to cast @@ -3337,17 +2842,12 @@ static void ssl_calc_finished_tls_sha384( */ finish_sha384_t finish = (finish_sha384_t)mbedtls_sha512_finish_ret; finish( &sha512, padbuf ); - mbedtls_sha512_free( &sha512 ); #endif - ssl->handshake->tls_prf( session->master, 48, sender, padbuf, 48, buf, len ); - MBEDTLS_SSL_DEBUG_BUF( 3, "calc finished result", buf, len ); - mbedtls_platform_zeroize( padbuf, sizeof( padbuf ) ); - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= calc finished" ) ); } #endif /* MBEDTLS_SHA512_C */ @@ -3356,14 +2856,12 @@ static void ssl_calc_finished_tls_sha384( void mbedtls_ssl_handshake_wrapup_free_hs_transform( mbedtls_ssl_context *ssl ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "=> handshake wrapup: final free" ) ); - /* * Free our handshake params */ mbedtls_ssl_handshake_free( ssl ); mbedtls_free( ssl->handshake ); ssl->handshake = NULL; - /* * Free the previous transform and swith in the current one */ @@ -3374,16 +2872,12 @@ void mbedtls_ssl_handshake_wrapup_free_hs_transform( mbedtls_ssl_context *ssl ) } ssl->transform = ssl->transform_negotiate; ssl->transform_negotiate = NULL; - MBEDTLS_SSL_DEBUG_MSG( 3, ( "<= handshake wrapup: final free" ) ); } - void mbedtls_ssl_handshake_wrapup( mbedtls_ssl_context *ssl ) { int resume = ssl->handshake->resume; - MBEDTLS_SSL_DEBUG_MSG( 3, ( "=> handshake wrapup" ) ); - #if defined(MBEDTLS_SSL_RENEGOTIATION) if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) { @@ -3391,7 +2885,6 @@ void mbedtls_ssl_handshake_wrapup( mbedtls_ssl_context *ssl ) ssl->renego_records_seen = 0; } #endif - /* * Free the previous session and switch in the current one */ @@ -3402,13 +2895,11 @@ void mbedtls_ssl_handshake_wrapup( mbedtls_ssl_context *ssl ) ssl->session_negotiate->encrypt_then_mac = ssl->session->encrypt_then_mac; #endif - mbedtls_ssl_session_free( ssl->session ); mbedtls_free( ssl->session ); } ssl->session = ssl->session_negotiate; ssl->session_negotiate = NULL; - /* * Add cache entry */ @@ -3419,14 +2910,12 @@ void mbedtls_ssl_handshake_wrapup( mbedtls_ssl_context *ssl ) if( ssl->conf->f_set_cache( ssl->conf->p_cache, ssl->session ) != 0 ) MBEDTLS_SSL_DEBUG_MSG( 1, ( "cache did not store session" ) ); } - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && ssl->handshake->flight != NULL ) { /* Cancel handshake timer */ mbedtls_ssl_set_timer( ssl, 0 ); - /* Keep last flight around in case we need to resend it: * we need the handshake and transform structures for that */ MBEDTLS_SSL_DEBUG_MSG( 3, ( "skip freeing handshake and transform" ) ); @@ -3434,22 +2923,16 @@ void mbedtls_ssl_handshake_wrapup( mbedtls_ssl_context *ssl ) else #endif mbedtls_ssl_handshake_wrapup_free_hs_transform( ssl ); - ssl->state++; - MBEDTLS_SSL_DEBUG_MSG( 3, ( "<= handshake wrapup" ) ); } int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ) { int ret, hash_len; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write finished" ) ); - mbedtls_ssl_update_out_pointers( ssl, ssl->transform_negotiate ); - ssl->handshake->calc_finished( ssl, ssl->out_msg + 4, ssl->conf->endpoint ); - /* * RFC 5246 7.4.9 (Page 63) says 12 is the default length and ciphersuites * may define some other value. Currently (early 2016), no defined @@ -3457,16 +2940,13 @@ int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ) * moved to TLS 1.3 now) so we can keep the hardcoded 12 here. */ hash_len = ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) ? 36 : 12; - #if defined(MBEDTLS_SSL_RENEGOTIATION) ssl->verify_data_len = hash_len; memcpy( ssl->own_verify_data, ssl->out_msg + 4, hash_len ); #endif - ssl->out_msglen = 4 + hash_len; ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE; ssl->out_msg[0] = MBEDTLS_SSL_HS_FINISHED; - /* * In case of session resuming, invert the client and server * ChangeCipherSpec messages order. @@ -3484,30 +2964,24 @@ int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ) } else ssl->state++; - /* * Switch to our negotiated transform and session parameters for outbound * data. */ MBEDTLS_SSL_DEBUG_MSG( 3, ( "switching to new transform spec for outbound data" ) ); - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { unsigned char i; - /* Remember current epoch settings for resending */ ssl->handshake->alt_transform_out = ssl->transform_out; memcpy( ssl->handshake->alt_out_ctr, ssl->cur_out_ctr, 8 ); - /* Set sequence_number to zero */ memset( ssl->cur_out_ctr + 2, 0, 6 ); - /* Increment epoch */ for( i = 2; i > 0; i-- ) if( ++ssl->cur_out_ctr[i - 1] != 0 ) break; - /* The loop goes to its end iff the counter is wrapping */ if( i == 0 ) { @@ -3518,10 +2992,8 @@ int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ) else #endif /* MBEDTLS_SSL_PROTO_DTLS */ memset( ssl->cur_out_ctr, 0, 8 ); - ssl->transform_out = ssl->transform_negotiate; ssl->session_out = ssl->session_negotiate; - #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) if( mbedtls_ssl_hw_record_activate != NULL ) { @@ -3532,18 +3004,15 @@ int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ) } } #endif - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_send_flight_completed( ssl ); #endif - if( ( ret = mbedtls_ssl_write_handshake_msg( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_handshake_msg", ret ); return( ret ); } - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && ( ret = mbedtls_ssl_flight_transmit( ssl ) ) != 0 ) @@ -3552,9 +3021,7 @@ int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ) return( ret ); } #endif - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write finished" ) ); - return( 0 ); } @@ -3569,17 +3036,13 @@ int mbedtls_ssl_parse_finished( mbedtls_ssl_context *ssl ) int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; unsigned int hash_len; unsigned char buf[SSL_MAX_HASH_LEN]; - MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse finished" ) ); - ssl->handshake->calc_finished( ssl, buf, ssl->conf->endpoint ^ 1 ); - if( ( ret = mbedtls_ssl_read_record( ssl, 1 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); return( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad finished message" ) ); @@ -3587,7 +3050,6 @@ int mbedtls_ssl_parse_finished( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE ); return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - /* There is currently no ciphersuite using another length with TLS 1.2 */ #if defined(MBEDTLS_SSL_PROTO_SSL3) if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) @@ -3595,7 +3057,6 @@ int mbedtls_ssl_parse_finished( mbedtls_ssl_context *ssl ) else #endif hash_len = 12; - if( ssl->in_msg[0] != MBEDTLS_SSL_HS_FINISHED || ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) + hash_len ) { @@ -3604,7 +3065,6 @@ int mbedtls_ssl_parse_finished( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_FINISHED ); } - if( mbedtls_ssl_safer_memcmp( ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ), buf, hash_len ) != 0 ) { @@ -3613,12 +3073,10 @@ int mbedtls_ssl_parse_finished( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); return( MBEDTLS_ERR_SSL_BAD_HS_FINISHED ); } - #if defined(MBEDTLS_SSL_RENEGOTIATION) ssl->verify_data_len = hash_len; memcpy( ssl->peer_verify_data, buf, hash_len ); #endif - if( ssl->handshake->resume != 0 ) { #if defined(MBEDTLS_SSL_CLI_C) @@ -3632,21 +3090,17 @@ int mbedtls_ssl_parse_finished( mbedtls_ssl_context *ssl ) } else ssl->state++; - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_recv_flight_completed( ssl ); #endif - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse finished" ) ); - return( 0 ); } static void ssl_handshake_params_init( mbedtls_ssl_handshake_params *handshake ) { memset( handshake, 0, sizeof( mbedtls_ssl_handshake_params ) ); - #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) mbedtls_md5_init( &handshake->fin_md5 ); @@ -3656,32 +3110,19 @@ static void ssl_handshake_params_init( mbedtls_ssl_handshake_params *handshake ) #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_2) #if defined(MBEDTLS_SHA256_C) -#if defined(MBEDTLS_USE_PSA_CRYPTO) - handshake->fin_sha256_psa = psa_hash_operation_init(); - psa_hash_setup( &handshake->fin_sha256_psa, PSA_ALG_SHA_256 ); -#else mbedtls_sha256_init( &handshake->fin_sha256 ); mbedtls_sha256_starts_ret( &handshake->fin_sha256, 0 ); #endif -#endif #if defined(MBEDTLS_SHA512_C) -#if defined(MBEDTLS_USE_PSA_CRYPTO) - handshake->fin_sha384_psa = psa_hash_operation_init(); - psa_hash_setup( &handshake->fin_sha384_psa, PSA_ALG_SHA_384 ); -#else mbedtls_sha512_init( &handshake->fin_sha512 ); mbedtls_sha512_starts_ret( &handshake->fin_sha512, 1 ); #endif -#endif #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - handshake->update_checksum = ssl_update_checksum_start; - #if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \ defined(MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED) mbedtls_ssl_sig_hash_set_init( &handshake->hash_algs ); #endif - #if defined(MBEDTLS_DHM_C) mbedtls_dhm_init( &handshake->dhm_ctx ); #endif @@ -3695,15 +3136,12 @@ static void ssl_handshake_params_init( mbedtls_ssl_handshake_params *handshake ) handshake->ecjpake_cache_len = 0; #endif #endif - #if defined(MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED) mbedtls_x509_crt_restart_init( &handshake->ecrs_ctx ); #endif - #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) handshake->sni_authmode = MBEDTLS_SSL_VERIFY_UNSET; #endif - #if defined(MBEDTLS_X509_CRT_PARSE_C) && \ !defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) mbedtls_pk_init( &handshake->peer_pubkey ); @@ -3713,16 +3151,19 @@ static void ssl_handshake_params_init( mbedtls_ssl_handshake_params *handshake ) void mbedtls_ssl_transform_init( mbedtls_ssl_transform *transform ) { memset( transform, 0, sizeof(mbedtls_ssl_transform) ); - mbedtls_cipher_init( &transform->cipher_ctx_enc ); mbedtls_cipher_init( &transform->cipher_ctx_dec ); - #if defined(MBEDTLS_SSL_SOME_MODES_USE_MAC) mbedtls_md_init( &transform->md_ctx_enc ); mbedtls_md_init( &transform->md_ctx_dec ); #endif } +/** + * \brief Initialize SSL session structure + * + * \param session SSL session + */ void mbedtls_ssl_session_init( mbedtls_ssl_session *session ) { memset( session, 0, sizeof(mbedtls_ssl_session) ); @@ -3737,7 +3178,6 @@ static int ssl_handshake_init( mbedtls_ssl_context *ssl ) mbedtls_ssl_session_free( ssl->session_negotiate ); if( ssl->handshake ) mbedtls_ssl_handshake_free( ssl ); - /* * Either the pointers are now NULL or cleared properly and can be freed. * Now allocate missing structures. @@ -3746,60 +3186,48 @@ static int ssl_handshake_init( mbedtls_ssl_context *ssl ) { ssl->transform_negotiate = mbedtls_calloc( 1, sizeof(mbedtls_ssl_transform) ); } - if( ssl->session_negotiate == NULL ) { ssl->session_negotiate = mbedtls_calloc( 1, sizeof(mbedtls_ssl_session) ); } - if( ssl->handshake == NULL ) { ssl->handshake = mbedtls_calloc( 1, sizeof(mbedtls_ssl_handshake_params) ); } #if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) /* If the buffers are too small - reallocate */ - handle_buffer_resizing( ssl, 0, MBEDTLS_SSL_IN_BUFFER_LEN, MBEDTLS_SSL_OUT_BUFFER_LEN ); #endif - /* All pointers should exist and can be directly freed without issue */ if( ssl->handshake == NULL || ssl->transform_negotiate == NULL || ssl->session_negotiate == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc() of ssl sub-contexts failed" ) ); - mbedtls_free( ssl->handshake ); mbedtls_free( ssl->transform_negotiate ); mbedtls_free( ssl->session_negotiate ); - ssl->handshake = NULL; ssl->transform_negotiate = NULL; ssl->session_negotiate = NULL; - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } - /* Initialize structures */ mbedtls_ssl_session_init( ssl->session_negotiate ); mbedtls_ssl_transform_init( ssl->transform_negotiate ); ssl_handshake_params_init( ssl->handshake ); - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { ssl->handshake->alt_transform_out = ssl->transform_out; - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_PREPARING; else ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_WAITING; - mbedtls_ssl_set_timer( ssl, 0 ); } #endif - return( 0 ); } @@ -3814,7 +3242,6 @@ static int ssl_cookie_write_dummy( void *ctx, ((void) end); ((void) cli_id); ((void) cli_id_len); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } @@ -3827,39 +3254,54 @@ static int ssl_cookie_check_dummy( void *ctx, ((void) cookie_len); ((void) cli_id); ((void) cli_id_len); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY && MBEDTLS_SSL_SRV_C */ -/* - * Initialize an SSL context +/** + * \brief Initialize an SSL context + * Just makes the context ready for mbedtls_ssl_setup() or + * mbedtls_ssl_free() + * + * \param ssl SSL context */ void mbedtls_ssl_init( mbedtls_ssl_context *ssl ) { memset( ssl, 0, sizeof( mbedtls_ssl_context ) ); } -/* - * Setup an SSL context +/** + * \brief Set up an SSL context for use + * + * \note No copy of the configuration context is made, it can be + * shared by many mbedtls_ssl_context structures. + * + * \warning The conf structure will be accessed during the session. + * It must not be modified or freed as long as the session + * is active. + * + * \warning This function must be called exactly once per context. + * Calling mbedtls_ssl_setup again is not supported, even + * if no session is active. + * + * \param ssl SSL context + * \param conf SSL configuration to use + * + * \return 0 if successful, or MBEDTLS_ERR_SSL_ALLOC_FAILED if + * memory allocation failed */ - int mbedtls_ssl_setup( mbedtls_ssl_context *ssl, const mbedtls_ssl_config *conf ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t in_buf_len = MBEDTLS_SSL_IN_BUFFER_LEN; size_t out_buf_len = MBEDTLS_SSL_OUT_BUFFER_LEN; - ssl->conf = conf; - /* * Prepare base structures */ - /* Set to NULL in case of an error condition */ ssl->out_buf = NULL; - #if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) ssl->in_buf_len = in_buf_len; #endif @@ -3870,7 +3312,6 @@ int mbedtls_ssl_setup( mbedtls_ssl_context *ssl, ret = MBEDTLS_ERR_SSL_ALLOC_FAILED; goto error; } - #if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) ssl->out_buf_len = out_buf_len; #endif @@ -3881,43 +3322,33 @@ int mbedtls_ssl_setup( mbedtls_ssl_context *ssl, ret = MBEDTLS_ERR_SSL_ALLOC_FAILED; goto error; } - mbedtls_ssl_reset_in_out_pointers( ssl ); - #if defined(MBEDTLS_SSL_DTLS_SRTP) memset( &ssl->dtls_srtp_info, 0, sizeof(ssl->dtls_srtp_info) ); #endif - if( ( ret = ssl_handshake_init( ssl ) ) != 0 ) goto error; - return( 0 ); - error: mbedtls_free( ssl->in_buf ); mbedtls_free( ssl->out_buf ); - ssl->conf = NULL; - #if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) ssl->in_buf_len = 0; ssl->out_buf_len = 0; #endif ssl->in_buf = NULL; ssl->out_buf = NULL; - ssl->in_hdr = NULL; ssl->in_ctr = NULL; ssl->in_len = NULL; ssl->in_iv = NULL; ssl->in_msg = NULL; - ssl->out_hdr = NULL; ssl->out_ctr = NULL; ssl->out_len = NULL; ssl->out_iv = NULL; ssl->out_msg = NULL; - return( ret ); } @@ -4050,29 +3481,67 @@ int mbedtls_ssl_session_reset_int( mbedtls_ssl_context *ssl, int partial ) return( 0 ); } -/* - * Reset an initialized and used SSL context for re-use while retaining - * all application-set variables, function pointers and data. +/** + * \brief Reset an already initialized SSL context for re-use + * while retaining application-set variables, function + * pointers and data. + * + * \param ssl SSL context + * \return 0 if successful, or MBEDTLS_ERR_SSL_ALLOC_FAILED, + MBEDTLS_ERR_SSL_HW_ACCEL_FAILED or + * MBEDTLS_ERR_SSL_COMPRESSION_FAILED */ int mbedtls_ssl_session_reset( mbedtls_ssl_context *ssl ) { return( mbedtls_ssl_session_reset_int( ssl, 0 ) ); } -/* - * SSL set accessors +/** + * \brief Set the current endpoint type + * + * \param conf SSL configuration + * \param endpoint must be MBEDTLS_SSL_IS_CLIENT or MBEDTLS_SSL_IS_SERVER */ void mbedtls_ssl_conf_endpoint( mbedtls_ssl_config *conf, int endpoint ) { conf->endpoint = endpoint; } +/** + * \brief Set the transport type (TLS or DTLS). + * Default: TLS + * + * \note For DTLS, you must either provide a recv callback that + * doesn't block, or one that handles timeouts, see + * \c mbedtls_ssl_set_bio(). You also need to provide timer + * callbacks with \c mbedtls_ssl_set_timer_cb(). + * + * \param conf SSL configuration + * \param transport transport type: + * MBEDTLS_SSL_TRANSPORT_STREAM for TLS, + * MBEDTLS_SSL_TRANSPORT_DATAGRAM for DTLS. + */ void mbedtls_ssl_conf_transport( mbedtls_ssl_config *conf, int transport ) { conf->transport = transport; } #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) +/** + * \brief Enable or disable anti-replay protection for DTLS. + * (DTLS only, no effect on TLS.) + * Default: enabled. + * + * \param conf SSL configuration + * \param mode MBEDTLS_SSL_ANTI_REPLAY_ENABLED or MBEDTLS_SSL_ANTI_REPLAY_DISABLED. + * + * \warning Disabling this is a security risk unless the application + * protocol handles duplicated packets in a safe way. You + * should not disable this without careful consideration. + * However, if your application already detects duplicated + * packets and needs information about them to adjust its + * transmission strategy, then you'll want to disable this. + */ void mbedtls_ssl_conf_dtls_anti_replay( mbedtls_ssl_config *conf, char mode ) { conf->anti_replay = mode; @@ -4080,6 +3549,29 @@ void mbedtls_ssl_conf_dtls_anti_replay( mbedtls_ssl_config *conf, char mode ) #endif #if defined(MBEDTLS_SSL_DTLS_BADMAC_LIMIT) +/** + * \brief Set a limit on the number of records with a bad MAC + * before terminating the connection. + * (DTLS only, no effect on TLS.) + * Default: 0 (disabled). + * + * \param conf SSL configuration + * \param limit Limit, or 0 to disable. + * + * \note If the limit is N, then the connection is terminated when + * the Nth non-authentic record is seen. + * + * \note Records with an invalid header are not counted, only the + * ones going through the authentication-decryption phase. + * + * \note This is a security trade-off related to the fact that it's + * often relatively easy for an active attacker ot inject UDP + * datagrams. On one hand, setting a low limit here makes it + * easier for such an attacker to forcibly terminated a + * connection. On the other hand, a high limit or no limit + * might make us waste resources checking authentication on + * many bogus packets. + */ void mbedtls_ssl_conf_dtls_badmac_limit( mbedtls_ssl_config *conf, unsigned limit ) { conf->badmac_limit = limit; @@ -4088,26 +3580,127 @@ void mbedtls_ssl_conf_dtls_badmac_limit( mbedtls_ssl_config *conf, unsigned limi #if defined(MBEDTLS_SSL_PROTO_DTLS) +/** + * \brief Allow or disallow packing of multiple handshake records + * within a single datagram. + * + * \param ssl The SSL context to configure. + * \param allow_packing This determines whether datagram packing may + * be used or not. A value of \c 0 means that every + * record will be sent in a separate datagram; a + * value of \c 1 means that, if space permits, + * multiple handshake messages (including CCS) belonging to + * a single flight may be packed within a single datagram. + * + * \note This is enabled by default and should only be disabled + * for test purposes, or if datagram packing causes + * interoperability issues with peers that don't support it. + * + * \note Allowing datagram packing reduces the network load since + * there's less overhead if multiple messages share the same + * datagram. Also, it increases the handshake efficiency + * since messages belonging to a single datagram will not + * be reordered in transit, and so future message buffering + * or flight retransmission (if no buffering is used) as + * means to deal with reordering are needed less frequently. + * + * \note Application records are not affected by this option and + * are currently always sent in separate datagrams. + * + */ void mbedtls_ssl_set_datagram_packing( mbedtls_ssl_context *ssl, unsigned allow_packing ) { ssl->disable_datagram_packing = !allow_packing; } +/** + * \brief Set retransmit timeout values for the DTLS handshake. + * (DTLS only, no effect on TLS.) + * + * \param conf SSL configuration + * \param min Initial timeout value in milliseconds. + * Default: 1000 (1 second). + * \param max Maximum timeout value in milliseconds. + * Default: 60000 (60 seconds). + * + * \note Default values are from RFC 6347 section 4.2.4.1. + * + * \note The 'min' value should typically be slightly above the + * expected round-trip time to your peer, plus whatever time + * it takes for the peer to process the message. For example, + * if your RTT is about 600ms and you peer needs up to 1s to + * do the cryptographic operations in the handshake, then you + * should set 'min' slightly above 1600. Lower values of 'min' + * might cause spurious resends which waste network resources, + * while larger value of 'min' will increase overall latency + * on unreliable network links. + * + * \note The more unreliable your network connection is, the larger + * your max / min ratio needs to be in order to achieve + * reliable handshakes. + * + * \note Messages are retransmitted up to log2(ceil(max/min)) times. + * For example, if min = 1s and max = 5s, the retransmit plan + * goes: send ... 1s -> resend ... 2s -> resend ... 4s -> + * resend ... 5s -> give up and return a timeout error. + */ void mbedtls_ssl_conf_handshake_timeout( mbedtls_ssl_config *conf, uint32_t min, uint32_t max ) { conf->hs_timeout_min = min; conf->hs_timeout_max = max; } -#endif +#endif /* MBEDTLS_SSL_PROTO_DTLS */ + +/** + * \brief Set the certificate verification mode + * Default: NONE on server, REQUIRED on client + * + * \param conf SSL configuration + * \param authmode can be: + * + * MBEDTLS_SSL_VERIFY_NONE: peer certificate is not checked + * (default on server) + * (insecure on client) + * + * MBEDTLS_SSL_VERIFY_OPTIONAL: peer certificate is checked, however the + * handshake continues even if verification failed; + * mbedtls_ssl_get_verify_result() can be called after the + * handshake is complete. + * + * MBEDTLS_SSL_VERIFY_REQUIRED: peer *must* present a valid certificate, + * handshake is aborted if verification failed. + * (default on client) + * + * \note On client, MBEDTLS_SSL_VERIFY_REQUIRED is the recommended mode. + * With MBEDTLS_SSL_VERIFY_OPTIONAL, the user needs to call mbedtls_ssl_get_verify_result() at + * the right time(s), which may not be obvious, while REQUIRED always perform + * the verification as soon as possible. For example, REQUIRED was protecting + * against the "triple handshake" attack even before it was found. + */ void mbedtls_ssl_conf_authmode( mbedtls_ssl_config *conf, int authmode ) { conf->authmode = authmode; } #if defined(MBEDTLS_X509_CRT_PARSE_C) +/** + * \brief Set the verification callback (Optional). + * + * If set, the provided verify callback is called for each + * certificate in the peer's CRT chain, including the trusted + * root. For more information, please see the documentation of + * \c mbedtls_x509_crt_verify(). + * + * \note For per context callbacks and contexts, please use + * mbedtls_ssl_set_verify() instead. + * + * \param conf The SSL configuration to use. + * \param f_vrfy The verification callback to use during CRT verification. + * \param p_vrfy The opaque context to be passed to the callback. + */ void mbedtls_ssl_conf_verify( mbedtls_ssl_config *conf, int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), void *p_vrfy ) @@ -4117,6 +3710,13 @@ void mbedtls_ssl_conf_verify( mbedtls_ssl_config *conf, } #endif /* MBEDTLS_X509_CRT_PARSE_C */ +/** + * \brief Set the random number generator callback + * + * \param conf SSL configuration + * \param f_rng RNG function + * \param p_rng RNG parameter + */ void mbedtls_ssl_conf_rng( mbedtls_ssl_config *conf, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) @@ -4125,6 +3725,20 @@ void mbedtls_ssl_conf_rng( mbedtls_ssl_config *conf, conf->p_rng = p_rng; } +/** + * \brief Set the debug callback + * + * The callback has the following argument: + * void * opaque context for the callback + * int debug level + * const char * file name + * int line number + * const char * message + * + * \param conf SSL configuration + * \param f_dbg debug function + * \param p_dbg debug parameter + */ void mbedtls_ssl_conf_dbg( mbedtls_ssl_config *conf, void (*f_dbg)(void *, int, const char *, int, const char *), void *p_dbg ) @@ -4133,6 +3747,36 @@ void mbedtls_ssl_conf_dbg( mbedtls_ssl_config *conf, conf->p_dbg = p_dbg; } +/** + * \brief Set the underlying BIO callbacks for write, read and + * read-with-timeout. + * + * \param ssl SSL context + * \param p_bio parameter (context) shared by BIO callbacks + * \param f_send write callback + * \param f_recv read callback + * \param f_recv_timeout blocking read callback with timeout. + * + * \note One of f_recv or f_recv_timeout can be NULL, in which case + * the other is used. If both are non-NULL, f_recv_timeout is + * used and f_recv is ignored (as if it were NULL). + * + * \note The two most common use cases are: + * - non-blocking I/O, f_recv != NULL, f_recv_timeout == NULL + * - blocking I/O, f_recv == NULL, f_recv_timout != NULL + * + * \note For DTLS, you need to provide either a non-NULL + * f_recv_timeout callback, or a f_recv that doesn't block. + * + * \note See the documentations of \c mbedtls_ssl_send_t, + * \c mbedtls_ssl_recv_t and \c mbedtls_ssl_recv_timeout_t for + * the conventions those callbacks must follow. + * + * \note On some platforms, net_sockets.c provides + * \c mbedtls_net_send(), \c mbedtls_net_recv() and + * \c mbedtls_net_recv_timeout() that are suitable to be used + * here. + */ void mbedtls_ssl_set_bio( mbedtls_ssl_context *ssl, void *p_bio, mbedtls_ssl_send_t *f_send, @@ -4146,17 +3790,95 @@ void mbedtls_ssl_set_bio( mbedtls_ssl_context *ssl, } #if defined(MBEDTLS_SSL_PROTO_DTLS) +/** + * \brief Set the Maximum Tranport Unit (MTU). + * Special value: 0 means unset (no limit). + * This represents the maximum size of a datagram payload + * handled by the transport layer (usually UDP) as determined + * by the network link and stack. In practice, this controls + * the maximum size datagram the DTLS layer will pass to the + * \c f_send() callback set using \c mbedtls_ssl_set_bio(). + * + * \note The limit on datagram size is converted to a limit on + * record payload by subtracting the current overhead of + * encapsulation and encryption/authentication if any. + * + * \note This can be called at any point during the connection, for + * example when a Path Maximum Transfer Unit (PMTU) + * estimate becomes available from other sources, + * such as lower (or higher) protocol layers. + * + * \note This setting only controls the size of the packets we send, + * and does not restrict the size of the datagrams we're + * willing to receive. Client-side, you can request the + * server to use smaller records with \c + * mbedtls_ssl_conf_max_frag_len(). + * + * \note If both a MTU and a maximum fragment length have been + * configured (or negotiated with the peer), the resulting + * lower limit on record payload (see first note) is used. + * + * \note This can only be used to decrease the maximum size + * of datagrams (hence records, see first note) sent. It + * cannot be used to increase the maximum size of records over + * the limit set by #MBEDTLS_SSL_OUT_CONTENT_LEN. + * + * \note Values lower than the current record layer expansion will + * result in an error when trying to send data. + * + * \note Using record compression together with a non-zero MTU value + * will result in an error when trying to send data. + * + * \param ssl SSL context + * \param mtu Value of the path MTU in bytes + */ void mbedtls_ssl_set_mtu( mbedtls_ssl_context *ssl, uint16_t mtu ) { ssl->mtu = mtu; } #endif +/** + * \brief Set the timeout period for mbedtls_ssl_read() + * (Default: no timeout.) + * + * \param conf SSL configuration context + * \param timeout Timeout value in milliseconds. + * Use 0 for no timeout (default). + * + * \note With blocking I/O, this will only work if a non-NULL + * \c f_recv_timeout was set with \c mbedtls_ssl_set_bio(). + * With non-blocking I/O, this will only work if timer + * callbacks were set with \c mbedtls_ssl_set_timer_cb(). + * + * \note With non-blocking I/O, you may also skip this function + * altogether and handle timeouts at the application layer. + */ void mbedtls_ssl_conf_read_timeout( mbedtls_ssl_config *conf, uint32_t timeout ) { conf->read_timeout = timeout; } +/** + * \brief Set the timer callbacks (Mandatory for DTLS.) + * + * \param ssl SSL context + * \param p_timer parameter (context) shared by timer callbacks + * \param f_set_timer set timer callback + * \param f_get_timer get timer callback. Must return: + * + * \note See the documentation of \c mbedtls_ssl_set_timer_t and + * \c mbedtls_ssl_get_timer_t for the conventions this pair of + * callbacks must follow. + * + * \note On some platforms, timing.c provides + * \c mbedtls_timing_set_delay() and + * \c mbedtls_timing_get_delay() that are suitable for using + * here, except if using an event-driven style. + * + * \note See also the "DTLS tutorial" article in our knowledge base. + * https://tls.mbed.org/kb/how-to/dtls-tutorial + */ void mbedtls_ssl_set_timer_cb( mbedtls_ssl_context *ssl, void *p_timer, mbedtls_ssl_set_timer_t *f_set_timer, @@ -4171,6 +3893,43 @@ void mbedtls_ssl_set_timer_cb( mbedtls_ssl_context *ssl, } #if defined(MBEDTLS_SSL_SRV_C) +/** + * \brief Set the session cache callbacks (server-side only) + * If not set, no session resuming is done (except if session + * tickets are enabled too). + * + * The session cache has the responsibility to check for stale + * entries based on timeout. See RFC 5246 for recommendations. + * + * Warning: session.peer_cert is cleared by the SSL/TLS layer on + * connection shutdown, so do not cache the pointer! Either set + * it to NULL or make a full copy of the certificate. + * + * The get callback is called once during the initial handshake + * to enable session resuming. The get function has the + * following parameters: (void *parameter, mbedtls_ssl_session *session) + * If a valid entry is found, it should fill the master of + * the session object with the cached values and return 0, + * return 1 otherwise. Optionally peer_cert can be set as well + * if it is properly present in cache entry. + * + * The set callback is called once during the initial handshake + * to enable session resuming after the entire handshake has + * been finished. The set function has the following parameters: + * (void *parameter, const mbedtls_ssl_session *session). The function + * should create a cache entry for future retrieval based on + * the data in the session structure and should keep in mind + * that the mbedtls_ssl_session object presented (and all its referenced + * data) is cleared by the SSL/TLS layer when the connection is + * terminated. It is recommended to add metadata to determine if + * an entry is still valid in the future. Return 0 if + * successfully cached, return 1 otherwise. + * + * \param conf SSL configuration + * \param p_cache parmater (context) for both callbacks + * \param f_get_cache session get callback + * \param f_set_cache session set callback + */ void mbedtls_ssl_conf_session_cache( mbedtls_ssl_config *conf, void *p_cache, int (*f_get_cache)(void *, mbedtls_ssl_session *), @@ -4183,6 +3942,20 @@ void mbedtls_ssl_conf_session_cache( mbedtls_ssl_config *conf, #endif /* MBEDTLS_SSL_SRV_C */ #if defined(MBEDTLS_SSL_CLI_C) +/** + * \brief Request resumption of session (client-side only) + * Session data is copied from presented session structure. + * + * \param ssl SSL context + * \param session session context + * + * \return 0 if successful, + * MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed, + * MBEDTLS_ERR_SSL_BAD_INPUT_DATA if used server-side or + * arguments are otherwise invalid + * + * \sa mbedtls_ssl_get_session() + */ int mbedtls_ssl_set_session( mbedtls_ssl_context *ssl, const mbedtls_ssl_session *session ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; @@ -4205,8 +3978,23 @@ int mbedtls_ssl_set_session( mbedtls_ssl_context *ssl, const mbedtls_ssl_session } #endif /* MBEDTLS_SSL_CLI_C */ +/** + * \brief Set the list of allowed ciphersuites and the preference + * order. First in the list has the highest preference. + * (Overrides all version-specific lists) + * + * The ciphersuites array is not copied, and must remain + * valid for the lifetime of the ssl_config. + * + * Note: The server uses its own preferences + * over the preference of the client unless + * MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE is defined! + * + * \param conf SSL configuration + * \param ciphersuites 0-terminated list of allowed ciphersuites + */ void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *conf, - const int *ciphersuites ) + const uint16_t *ciphersuites ) { conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_0] = ciphersuites; conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_1] = ciphersuites; @@ -4214,9 +4002,28 @@ void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *conf, conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_3] = ciphersuites; } +/** + * \brief Set the list of allowed ciphersuites and the + * preference order for a specific version of the protocol. + * (Only useful on the server side) + * + * The ciphersuites array is not copied, and must remain + * valid for the lifetime of the ssl_config. + * + * \param conf SSL configuration + * \param ciphersuites 0-terminated list of allowed ciphersuites + * \param major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 + * supported) + * \param minor Minor version number (MBEDTLS_SSL_MINOR_VERSION_0, + * MBEDTLS_SSL_MINOR_VERSION_1 and MBEDTLS_SSL_MINOR_VERSION_2, + * MBEDTLS_SSL_MINOR_VERSION_3 supported) + * + * \note With DTLS, use MBEDTLS_SSL_MINOR_VERSION_2 for DTLS 1.0 + * and MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2 + */ void mbedtls_ssl_conf_ciphersuites_for_version( mbedtls_ssl_config *conf, - const int *ciphersuites, - int major, int minor ) + const uint16_t *ciphersuites, + int major, int minor ) { if( major != MBEDTLS_SSL_MAJOR_VERSION_3 ) return; @@ -4228,6 +4035,16 @@ void mbedtls_ssl_conf_ciphersuites_for_version( mbedtls_ssl_config *conf, } #if defined(MBEDTLS_X509_CRT_PARSE_C) +/** + * \brief Set the X.509 security profile used for verification + * + * \note The restrictions are enforced for all certificates in the + * chain. However, signatures in the handshake are not covered + * by this setting but by \b mbedtls_ssl_conf_sig_hashes(). + * + * \param conf SSL configuration + * \param profile Profile to use + */ void mbedtls_ssl_conf_cert_profile( mbedtls_ssl_config *conf, const mbedtls_x509_crt_profile *profile ) { @@ -4265,20 +4082,66 @@ static int ssl_append_key_cert( mbedtls_ssl_key_cert **head, return( 0 ); } +/** + * \brief Set own certificate chain and private key + * + * \note own_cert should contain in order from the bottom up your + * certificate chain. The top certificate (self-signed) + * can be omitted. + * + * \note On server, this function can be called multiple times to + * provision more than one cert/key pair (eg one ECDSA, one + * RSA with SHA-256, one RSA with SHA-1). An adequate + * certificate will be selected according to the client's + * advertised capabilities. In case multiple certificates are + * adequate, preference is given to the one set by the first + * call to this function, then second, etc. + * + * \note On client, only the first call has any effect. That is, + * only one client certificate can be provisioned. The + * server's preferences in its CertficateRequest message will + * be ignored and our only cert will be sent regardless of + * whether it matches those preferences - the server can then + * decide what it wants to do with it. + * + * \note The provided \p pk_key needs to match the public key in the + * first certificate in \p own_cert, or all handshakes using + * that certificate will fail. It is your responsibility + * to ensure that; this function will not perform any check. + * You may use mbedtls_pk_check_pair() in order to perform + * this check yourself, but be aware that this function can + * be computationally expensive on some key types. + * + * \param conf SSL configuration + * \param own_cert own public certificate chain + * \param pk_key own private key + * + * \return 0 on success or MBEDTLS_ERR_SSL_ALLOC_FAILED + */ int mbedtls_ssl_conf_own_cert( mbedtls_ssl_config *conf, - mbedtls_x509_crt *own_cert, - mbedtls_pk_context *pk_key ) + mbedtls_x509_crt *own_cert, + mbedtls_pk_context *pk_key ) { return( ssl_append_key_cert( &conf->key_cert, own_cert, pk_key ) ); } +/** + * \brief Set the data required to verify peer certificate + * + * \note See \c mbedtls_x509_crt_verify() for notes regarding the + * parameters ca_chain (maps to trust_ca for that function) + * and ca_crl. + * + * \param conf SSL configuration + * \param ca_chain trusted CA chain (meaning all fully trusted top-level CAs) + * \param ca_crl trusted CA CRLs + */ void mbedtls_ssl_conf_ca_chain( mbedtls_ssl_config *conf, - mbedtls_x509_crt *ca_chain, - mbedtls_x509_crl *ca_crl ) + mbedtls_x509_crt *ca_chain, + mbedtls_x509_crl *ca_crl ) { conf->ca_chain = ca_chain; conf->ca_crl = ca_crl; - #if defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK) /* mbedtls_ssl_conf_ca_chain() and mbedtls_ssl_conf_ca_cb() * cannot be used together. */ @@ -4288,6 +4151,57 @@ void mbedtls_ssl_conf_ca_chain( mbedtls_ssl_config *conf, } #if defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK) +/** + * \brief Set the trusted certificate callback. + * + * This API allows to register the set of trusted certificates + * through a callback, instead of a linked list as configured + * by mbedtls_ssl_conf_ca_chain(). + * + * This is useful for example in contexts where a large number + * of CAs are used, and the inefficiency of maintaining them + * in a linked list cannot be tolerated. It is also useful when + * the set of trusted CAs needs to be modified frequently. + * + * See the documentation of `mbedtls_x509_crt_ca_cb_t` for + * more information. + * + * \param conf The SSL configuration to register the callback with. + * \param f_ca_cb The trusted certificate callback to use when verifying + * certificate chains. + * \param p_ca_cb The context to be passed to \p f_ca_cb (for example, + * a reference to a trusted CA database). + * + * \note This API is incompatible with mbedtls_ssl_conf_ca_chain(): + * Any call to this function overwrites the values set through + * earlier calls to mbedtls_ssl_conf_ca_chain() or + * mbedtls_ssl_conf_ca_cb(). + * + * \note This API is incompatible with CA indication in + * CertificateRequest messages: A server-side SSL context which + * is bound to an SSL configuration that uses a CA callback + * configured via mbedtls_ssl_conf_ca_cb(), and which requires + * client authentication, will send an empty CA list in the + * corresponding CertificateRequest message. + * + * \note This API is incompatible with mbedtls_ssl_set_hs_ca_chain(): + * If an SSL context is bound to an SSL configuration which uses + * CA callbacks configured via mbedtls_ssl_conf_ca_cb(), then + * calls to mbedtls_ssl_set_hs_ca_chain() have no effect. + * + * \note The use of this API disables the use of restartable ECC + * during X.509 CRT signature verification (but doesn't affect + * other uses). + * + * \warning This API is incompatible with the use of CRLs. Any call to + * mbedtls_ssl_conf_ca_cb() unsets CRLs configured through + * earlier calls to mbedtls_ssl_conf_ca_chain(). + * + * \warning In multi-threaded environments, the callback \p f_ca_cb + * must be thread-safe, and it is the user's responsibility + * to guarantee this (for example through a mutex + * contained in the callback context pointed to by \p p_ca_cb). + */ void mbedtls_ssl_conf_ca_cb( mbedtls_ssl_config *conf, mbedtls_x509_crt_ca_cb_t f_ca_cb, void *p_ca_cb ) @@ -4304,6 +4218,18 @@ void mbedtls_ssl_conf_ca_cb( mbedtls_ssl_config *conf, #endif /* MBEDTLS_X509_CRT_PARSE_C */ #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) +/** + * \brief Set own certificate and key for the current handshake + * + * \note Same as \c mbedtls_ssl_conf_own_cert() but for use within + * the SNI callback. + * + * \param ssl SSL context + * \param own_cert own public certificate chain + * \param pk_key own private key + * + * \return 0 on success or MBEDTLS_ERR_SSL_ALLOC_FAILED + */ int mbedtls_ssl_set_hs_own_cert( mbedtls_ssl_context *ssl, mbedtls_x509_crt *own_cert, mbedtls_pk_context *pk_key ) @@ -4312,6 +4238,17 @@ int mbedtls_ssl_set_hs_own_cert( mbedtls_ssl_context *ssl, own_cert, pk_key ) ); } +/** + * \brief Set the data required to verify peer certificate for the + * current handshake + * + * \note Same as \c mbedtls_ssl_conf_ca_chain() but for use within + * the SNI callback. + * + * \param ssl SSL context + * \param ca_chain trusted CA chain (meaning all fully trusted top-level CAs) + * \param ca_crl trusted CA CRLs + */ void mbedtls_ssl_set_hs_ca_chain( mbedtls_ssl_context *ssl, mbedtls_x509_crt *ca_chain, mbedtls_x509_crl *ca_crl ) @@ -4320,6 +4257,16 @@ void mbedtls_ssl_set_hs_ca_chain( mbedtls_ssl_context *ssl, ssl->handshake->sni_ca_crl = ca_crl; } +/** + * \brief Set authmode for the current handshake. + * + * \note Same as \c mbedtls_ssl_conf_authmode() but for use within + * the SNI callback. + * + * \param ssl SSL context + * \param authmode MBEDTLS_SSL_VERIFY_NONE, MBEDTLS_SSL_VERIFY_OPTIONAL or + * MBEDTLS_SSL_VERIFY_REQUIRED + */ void mbedtls_ssl_set_hs_authmode( mbedtls_ssl_context *ssl, int authmode ) { @@ -4328,9 +4275,27 @@ void mbedtls_ssl_set_hs_authmode( mbedtls_ssl_context *ssl, #endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION */ #if defined(MBEDTLS_X509_CRT_PARSE_C) +/** + * \brief Set a connection-specific verification callback (optional). + * + * If set, the provided verify callback is called for each + * certificate in the peer's CRT chain, including the trusted + * root. For more information, please see the documentation of + * \c mbedtls_x509_crt_verify(). + * + * \note This call is analogous to mbedtls_ssl_conf_verify() but + * binds the verification callback and context to an SSL context + * as opposed to an SSL configuration. + * If mbedtls_ssl_conf_verify() and mbedtls_ssl_set_verify() + * are both used, mbedtls_ssl_set_verify() takes precedence. + * + * \param ssl The SSL context to use. + * \param f_vrfy The verification callback to use during CRT verification. + * \param p_vrfy The opaque context to be passed to the callback. + */ void mbedtls_ssl_set_verify( mbedtls_ssl_context *ssl, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ) + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy ) { ssl->f_vrfy = f_vrfy; ssl->p_vrfy = p_vrfy; @@ -4338,8 +4303,22 @@ void mbedtls_ssl_set_verify( mbedtls_ssl_context *ssl, #endif #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) -/* - * Set EC J-PAKE password for current handshake +/** + * \brief Set the EC J-PAKE password for current handshake. + * + * \note An internal copy is made, and destroyed as soon as the + * handshake is completed, or when the SSL context is reset or + * freed. + * + * \note The SSL context needs to be already set up. The right place + * to call this function is between \c mbedtls_ssl_setup() or + * \c mbedtls_ssl_reset() and \c mbedtls_ssl_handshake(). + * + * \param ssl SSL context + * \param pw EC J-PAKE password (pre-shared secret) + * \param pw_len length of pw in bytes + * + * \return 0 on success, or a negative error code. */ int mbedtls_ssl_set_hs_ecjpake_password( mbedtls_ssl_context *ssl, const unsigned char *pw, @@ -4368,28 +4347,13 @@ int mbedtls_ssl_set_hs_ecjpake_password( mbedtls_ssl_context *ssl, static void ssl_conf_remove_psk( mbedtls_ssl_config *conf ) { /* Remove reference to existing PSK, if any. */ -#if defined(MBEDTLS_USE_PSA_CRYPTO) - if( ! mbedtls_svc_key_id_is_null( conf->psk_opaque ) ) - { - /* The maintenance of the PSK key slot is the - * user's responsibility. */ - conf->psk_opaque = MBEDTLS_SVC_KEY_ID_INIT; - } - /* This and the following branch should never - * be taken simultaenously as we maintain the - * invariant that raw and opaque PSKs are never - * configured simultaneously. As a safeguard, - * though, `else` is omitted here. */ -#endif /* MBEDTLS_USE_PSA_CRYPTO */ if( conf->psk != NULL ) { mbedtls_platform_zeroize( conf->psk, conf->psk_len ); - mbedtls_free( conf->psk ); conf->psk = NULL; conf->psk_len = 0; } - /* Remove reference to PSK identity, if any. */ if( conf->psk_identity != NULL ) { @@ -4425,14 +4389,45 @@ static int ssl_conf_set_psk_identity( mbedtls_ssl_config *conf, return( 0 ); } +/** + * \brief Configure a pre-shared key (PSK) and identity + * to be used in PSK-based ciphersuites. + * + * \note This is mainly useful for clients. Servers will usually + * want to use \c mbedtls_ssl_conf_psk_cb() instead. + * + * \note A PSK set by \c mbedtls_ssl_set_hs_psk() in the PSK callback + * takes precedence over a PSK configured by this function. + * + * \warning Currently, clients can only register a single pre-shared key. + * Calling this function or mbedtls_ssl_conf_psk_opaque() more + * than once will overwrite values configured in previous calls. + * Support for setting multiple PSKs on clients and selecting + * one based on the identity hint is not a planned feature, + * but feedback is welcomed. + * + * \param conf The SSL configuration to register the PSK with. + * \param psk The pointer to the pre-shared key to use. + * \param psk_len The length of the pre-shared key in bytes. + * \param psk_identity The pointer to the pre-shared key identity. + * \param psk_identity_len The length of the pre-shared key identity + * in bytes. + * + * \note The PSK and its identity are copied internally and + * hence need not be preserved by the caller for the lifetime + * of the SSL configuration. + * + * \return \c 0 if successful. + * \return An \c MBEDTLS_ERR_SSL_XXX error code on failure. + */ int mbedtls_ssl_conf_psk( mbedtls_ssl_config *conf, - const unsigned char *psk, size_t psk_len, - const unsigned char *psk_identity, size_t psk_identity_len ) + const unsigned char *psk, size_t psk_len, + const unsigned char *psk_identity, + size_t psk_identity_len ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; /* Remove opaque/raw PSK + PSK Identity */ ssl_conf_remove_psk( conf ); - /* Check and set raw PSK */ if( psk == NULL ) return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); @@ -4440,29 +4435,19 @@ int mbedtls_ssl_conf_psk( mbedtls_ssl_config *conf, return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); if( psk_len > MBEDTLS_PSK_MAX_LEN ) return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( ( conf->psk = mbedtls_calloc( 1, psk_len ) ) == NULL ) return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); conf->psk_len = psk_len; memcpy( conf->psk, psk, conf->psk_len ); - /* Check and set PSK Identity */ ret = ssl_conf_set_psk_identity( conf, psk_identity, psk_identity_len ); if( ret != 0 ) ssl_conf_remove_psk( conf ); - return( ret ); } static void ssl_remove_psk( mbedtls_ssl_context *ssl ) { -#if defined(MBEDTLS_USE_PSA_CRYPTO) - if( ! mbedtls_svc_key_id_is_null( ssl->handshake->psk_opaque ) ) - { - ssl->handshake->psk_opaque = MBEDTLS_SVC_KEY_ID_INIT; - } - else -#endif /* MBEDTLS_USE_PSA_CRYPTO */ if( ssl->handshake->psk != NULL ) { mbedtls_platform_zeroize( ssl->handshake->psk, @@ -4472,6 +4457,22 @@ static void ssl_remove_psk( mbedtls_ssl_context *ssl ) } } +/** + * \brief Set the pre-shared Key (PSK) for the current handshake. + * + * \note This should only be called inside the PSK callback, + * i.e. the function passed to \c mbedtls_ssl_conf_psk_cb(). + * + * \note A PSK set by this function takes precedence over a PSK + * configured by \c mbedtls_ssl_conf_psk(). + * + * \param ssl The SSL context to configure a PSK for. + * \param psk The pointer to the pre-shared key. + * \param psk_len The length of the pre-shared key in bytes. + * + * \return \c 0 if successful. + * \return An \c MBEDTLS_ERR_SSL_XXX error code on failure. + */ int mbedtls_ssl_set_hs_psk( mbedtls_ssl_context *ssl, const unsigned char *psk, size_t psk_len ) { @@ -4492,43 +4493,44 @@ int mbedtls_ssl_set_hs_psk( mbedtls_ssl_context *ssl, return( 0 ); } -#if defined(MBEDTLS_USE_PSA_CRYPTO) -int mbedtls_ssl_conf_psk_opaque( mbedtls_ssl_config *conf, - psa_key_id_t psk, - const unsigned char *psk_identity, - size_t psk_identity_len ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - /* Clear opaque/raw PSK + PSK Identity, if present. */ - ssl_conf_remove_psk( conf ); - - /* Check and set opaque PSK */ - if( mbedtls_svc_key_id_is_null( psk ) ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - conf->psk_opaque = psk; - - /* Check and set PSK Identity */ - ret = ssl_conf_set_psk_identity( conf, psk_identity, - psk_identity_len ); - if( ret != 0 ) - ssl_conf_remove_psk( conf ); - - return( ret ); -} - -int mbedtls_ssl_set_hs_psk_opaque( mbedtls_ssl_context *ssl, - psa_key_id_t psk ) -{ - if( ( mbedtls_svc_key_id_is_null( psk ) ) || - ( ssl->handshake == NULL ) ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - - ssl_remove_psk( ssl ); - ssl->handshake->psk_opaque = psk; - return( 0 ); -} -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - +/** + * \brief Set the PSK callback (server-side only). + * + * If set, the PSK callback is called for each + * handshake where a PSK-based ciphersuite was negotiated. + * The caller provides the identity received and wants to + * receive the actual PSK data and length. + * + * The callback has the following parameters: + * - \c void*: The opaque pointer \p p_psk. + * - \c mbedtls_ssl_context*: The SSL context to which + * the operation applies. + * - \c const unsigned char*: The PSK identity + * selected by the client. + * - \c size_t: The length of the PSK identity + * selected by the client. + * + * If a valid PSK identity is found, the callback should use + * \c mbedtls_ssl_set_hs_psk() or + * \c mbedtls_ssl_set_hs_psk_opaque() + * on the SSL context to set the correct PSK and return \c 0. + * Any other return value will result in a denied PSK identity. + * + * \note A dynamic PSK (i.e. set by the PSK callback) takes + * precedence over a static PSK (i.e. set by + * \c mbedtls_ssl_conf_psk() or + * \c mbedtls_ssl_conf_psk_opaque()). + * This means that if you set a PSK callback using this + * function, you don't need to set a PSK using + * \c mbedtls_ssl_conf_psk() or + * \c mbedtls_ssl_conf_psk_opaque()). + * + * \param conf The SSL configuration to register the callback with. + * \param f_psk The callback for selecting and setting the PSK based + * in the PSK identity chosen by the client. + * \param p_psk A pointer to an opaque structure to be passed to + * the callback, for example a PSK store. + */ void mbedtls_ssl_conf_psk_cb( mbedtls_ssl_config *conf, int (*f_psk)(void *, mbedtls_ssl_context *, const unsigned char *, size_t), @@ -4541,23 +4543,19 @@ void mbedtls_ssl_conf_psk_cb( mbedtls_ssl_config *conf, #if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_SRV_C) -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -int mbedtls_ssl_conf_dh_param( mbedtls_ssl_config *conf, const char *dhm_P, const char *dhm_G ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - - if( ( ret = mbedtls_mpi_read_string( &conf->dhm_P, 16, dhm_P ) ) != 0 || - ( ret = mbedtls_mpi_read_string( &conf->dhm_G, 16, dhm_G ) ) != 0 ) - { - mbedtls_mpi_free( &conf->dhm_P ); - mbedtls_mpi_free( &conf->dhm_G ); - return( ret ); - } - - return( 0 ); -} -#endif /* MBEDTLS_DEPRECATED_REMOVED */ - +/** + * \brief Set the Diffie-Hellman public P and G values + * from big-endian binary presentations. + * (Default values: MBEDTLS_DHM_RFC3526_MODP_2048_[PG]_BIN) + * + * \param conf SSL configuration + * \param dhm_P Diffie-Hellman-Merkle modulus in big-endian binary form + * \param P_len Length of DHM modulus + * \param dhm_G Diffie-Hellman-Merkle generator in big-endian binary form + * \param G_len Length of DHM generator + * + * \return 0 if successful + */ int mbedtls_ssl_conf_dh_param_bin( mbedtls_ssl_config *conf, const unsigned char *dhm_P, size_t P_len, const unsigned char *dhm_G, size_t G_len ) @@ -4575,6 +4573,15 @@ int mbedtls_ssl_conf_dh_param_bin( mbedtls_ssl_config *conf, return( 0 ); } +/** + * \brief Set the Diffie-Hellman public P and G values, + * read from existing context (server-side only) + * + * \param conf SSL configuration + * \param dhm_ctx Diffie-Hellman-Merkle context + * + * \return 0 if successful + */ int mbedtls_ssl_conf_dh_param_ctx( mbedtls_ssl_config *conf, mbedtls_dhm_context *dhm_ctx ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; @@ -4592,8 +4599,13 @@ int mbedtls_ssl_conf_dh_param_ctx( mbedtls_ssl_config *conf, mbedtls_dhm_context #endif /* MBEDTLS_DHM_C && MBEDTLS_SSL_SRV_C */ #if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_CLI_C) -/* - * Set the minimum length for Diffie-Hellman parameters +/** + * \brief Set the minimum length for Diffie-Hellman parameters. + * (Client-side only.) + * (Default: 1024 bits.) + * + * \param conf SSL configuration + * \param bitlen Minimum bit length of the DHM prime */ void mbedtls_ssl_conf_dhm_min_bitlen( mbedtls_ssl_config *conf, unsigned int bitlen ) @@ -4603,19 +4615,58 @@ void mbedtls_ssl_conf_dhm_min_bitlen( mbedtls_ssl_config *conf, #endif /* MBEDTLS_DHM_C && MBEDTLS_SSL_CLI_C */ #if defined(MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED) -/* - * Set allowed/preferred hashes for handshake signatures +/** + * \brief Set the allowed hashes for signatures during the handshake. + * (Default: all available hashes except MD5.) + * + * \note This only affects which hashes are offered and can be used + * for signatures during the handshake. Hashes for message + * authentication and the TLS PRF are controlled by the + * ciphersuite, see \c mbedtls_ssl_conf_ciphersuites(). Hashes + * used for certificate signature are controlled by the + * verification profile, see \c mbedtls_ssl_conf_cert_profile(). + * + * \note This list should be ordered by decreasing preference + * (preferred hash first). + * + * \param conf SSL configuration + * \param hashes Ordered list of allowed signature hashes, + * terminated by \c MBEDTLS_MD_NONE. */ void mbedtls_ssl_conf_sig_hashes( mbedtls_ssl_config *conf, - const int *hashes ) + const uint8_t *hashes ) { conf->sig_hashes = hashes; } #endif /* MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED */ #if defined(MBEDTLS_ECP_C) -/* - * Set the allowed elliptic curves +/** + * \brief Set the allowed curves in order of preference. + * (Default: all defined curves.) + * + * On server: this only affects selection of the ECDHE curve; + * the curves used for ECDH and ECDSA are determined by the + * list of available certificates instead. + * + * On client: this affects the list of curves offered for any + * use. The server can override our preference order. + * + * Both sides: limits the set of curves accepted for use in + * ECDHE and in the peer's end-entity certificate. + * + * \note This has no influence on which curves are allowed inside the + * certificate chains, see \c mbedtls_ssl_conf_cert_profile() + * for that. For the end-entity certificate however, the key + * will be accepted only if it is allowed both by this list + * and by the cert profile. + * + * \note This list should be ordered by decreasing preference + * (preferred curve first). + * + * \param conf SSL configuration + * \param curves Ordered list of allowed curves, + * terminated by MBEDTLS_ECP_DP_NONE. */ void mbedtls_ssl_conf_curves( mbedtls_ssl_config *conf, const mbedtls_ecp_group_id *curve_list ) @@ -4625,6 +4676,24 @@ void mbedtls_ssl_conf_curves( mbedtls_ssl_config *conf, #endif /* MBEDTLS_ECP_C */ #if defined(MBEDTLS_X509_CRT_PARSE_C) +/** + * \brief Set or reset the hostname to check against the received + * server certificate. It sets the ServerName TLS extension, + * too, if that extension is enabled. (client-side only) + * + * \param ssl SSL context + * \param hostname the server hostname, may be NULL to clear hostname + * + * \note Maximum hostname length MBEDTLS_SSL_MAX_HOST_NAME_LEN. + * + * \return 0 if successful, MBEDTLS_ERR_SSL_ALLOC_FAILED on + * allocation failure, MBEDTLS_ERR_SSL_BAD_INPUT_DATA on + * too long input hostname. + * + * Hostname set to the one provided on success (cleared + * when NULL). On allocation failure hostname is cleared. + * On too long input failure, old hostname is unchanged. + */ int mbedtls_ssl_set_hostname( mbedtls_ssl_context *ssl, const char *hostname ) { /* Initialize to suppress unnecessary compiler warning */ @@ -4671,10 +4740,33 @@ int mbedtls_ssl_set_hostname( mbedtls_ssl_context *ssl, const char *hostname ) #endif /* MBEDTLS_X509_CRT_PARSE_C */ #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) +/** + * \brief Set server side ServerName TLS extension callback + * (optional, server-side only). + * + * If set, the ServerName callback is called whenever the + * server receives a ServerName TLS extension from the client + * during a handshake. The ServerName callback has the + * following parameters: (void *parameter, mbedtls_ssl_context *ssl, + * const unsigned char *hostname, size_t len). If a suitable + * certificate is found, the callback must set the + * certificate(s) and key(s) to use with \c + * mbedtls_ssl_set_hs_own_cert() (can be called repeatedly), + * and may optionally adjust the CA and associated CRL with \c + * mbedtls_ssl_set_hs_ca_chain() as well as the client + * authentication mode with \c mbedtls_ssl_set_hs_authmode(), + * then must return 0. If no matching name is found, the + * callback must either set a default cert, or + * return non-zero to abort the handshake at this point. + * + * \param conf SSL configuration + * \param f_sni verification function + * \param p_sni verification parameter + */ void mbedtls_ssl_conf_sni( mbedtls_ssl_config *conf, - int (*f_sni)(void *, mbedtls_ssl_context *, - const unsigned char *, size_t), - void *p_sni ) + int (*f_sni)(void *, mbedtls_ssl_context *, + const unsigned char *, size_t), + void *p_sni ) { conf->f_sni = f_sni; conf->p_sni = p_sni; @@ -4682,11 +4774,22 @@ void mbedtls_ssl_conf_sni( mbedtls_ssl_config *conf, #endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION */ #if defined(MBEDTLS_SSL_ALPN) +/** + * \brief Set the supported Application Layer Protocols. + * + * \param conf SSL configuration + * \param protos Pointer to a NULL-terminated list of supported protocols, + * in decreasing preference order. The pointer to the list is + * recorded by the library for later reference as required, so + * the lifetime of the table must be atleast as long as the + * lifetime of the SSL configuration structure. + * + * \return 0 on success, or MBEDTLS_ERR_SSL_BAD_INPUT_DATA. + */ int mbedtls_ssl_conf_alpn_protocols( mbedtls_ssl_config *conf, const char **protos ) { size_t cur_len, tot_len; const char **p; - /* * RFC 7301 3.1: "Empty strings MUST NOT be included and byte strings * MUST NOT be truncated." @@ -4697,25 +4800,45 @@ int mbedtls_ssl_conf_alpn_protocols( mbedtls_ssl_config *conf, const char **prot { cur_len = strlen( *p ); tot_len += cur_len; - if( ( cur_len == 0 ) || ( cur_len > MBEDTLS_SSL_MAX_ALPN_NAME_LEN ) || ( tot_len > MBEDTLS_SSL_MAX_ALPN_LIST_LEN ) ) return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - conf->alpn_list = protos; - return( 0 ); } +/** + * \brief Get the name of the negotiated Application Layer Protocol. + * This function should be called after the handshake is + * completed. + * + * \param ssl SSL context + * + * \return Protcol name, or NULL if no protocol was negotiated. + */ const char *mbedtls_ssl_get_alpn_protocol( const mbedtls_ssl_context *ssl ) { return( ssl->alpn_chosen ); } + #endif /* MBEDTLS_SSL_ALPN */ #if defined(MBEDTLS_SSL_DTLS_SRTP) +/** + * \brief Manage support for mki(master key id) value + * in use_srtp extension. + * MKI is an optional part of SRTP used for key management + * and re-keying. See RFC3711 section 3.1 for details. + * The default value is + * #MBEDTLS_SSL_DTLS_SRTP_MKI_UNSUPPORTED. + * + * \param conf The SSL configuration to manage mki support. + * \param support_mki_value Enable or disable mki usage. Values are + * #MBEDTLS_SSL_DTLS_SRTP_MKI_UNSUPPORTED + * or #MBEDTLS_SSL_DTLS_SRTP_MKI_SUPPORTED. + */ void mbedtls_ssl_conf_srtp_mki_value_supported( mbedtls_ssl_config *conf, int support_mki_value ) { @@ -4730,23 +4853,39 @@ int mbedtls_ssl_dtls_srtp_set_mki_value( mbedtls_ssl_context *ssl, { return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - if( ssl->conf->dtls_srtp_mki_support == MBEDTLS_SSL_DTLS_SRTP_MKI_UNSUPPORTED ) { return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } - memcpy( ssl->dtls_srtp_info.mki_value, mki_value, mki_len ); ssl->dtls_srtp_info.mki_len = mki_len; return( 0 ); } +/** + * \brief Set the supported DTLS-SRTP protection profiles. + * + * \param conf SSL configuration + * \param profiles Pointer to a List of MBEDTLS_TLS_SRTP_UNSET terminated + * supported protection profiles + * in decreasing preference order. + * The pointer to the list is recorded by the library + * for later reference as required, so the lifetime + * of the table must be at least as long as the lifetime + * of the SSL configuration structure. + * The list must not hold more than + * MBEDTLS_TLS_SRTP_MAX_PROFILE_LIST_LENGTH elements + * (excluding the terminating MBEDTLS_TLS_SRTP_UNSET). + * + * \return 0 on success + * \return #MBEDTLS_ERR_SSL_BAD_INPUT_DATA when the list of + * protection profiles is incorrect. + */ int mbedtls_ssl_conf_dtls_srtp_protection_profiles( mbedtls_ssl_config *conf, const mbedtls_ssl_srtp_profile *profiles ) { const mbedtls_ssl_srtp_profile *p; size_t list_size = 0; - /* check the profiles list: all entry must be valid, * its size cannot be more than the total number of supported profiles, currently 4 */ for( p = profiles; *p != MBEDTLS_TLS_SRTP_UNSET && @@ -4763,20 +4902,54 @@ int mbedtls_ssl_conf_dtls_srtp_protection_profiles( mbedtls_ssl_config *conf, list_size = MBEDTLS_TLS_SRTP_MAX_PROFILE_LIST_LENGTH + 1; } } - if( list_size > MBEDTLS_TLS_SRTP_MAX_PROFILE_LIST_LENGTH ) { conf->dtls_srtp_profile_list = NULL; conf->dtls_srtp_profile_list_len = 0; return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - conf->dtls_srtp_profile_list = profiles; conf->dtls_srtp_profile_list_len = list_size; - return( 0 ); } +/** + * \brief Set the mki_value for the current DTLS-SRTP session. + * + * \param ssl SSL context to use. + * \param mki_value The MKI value to set. + * \param mki_len The length of the MKI value. + * + * \note This function is relevant on client side only. + * The server discovers the mki value during handshake. + * A mki value set on server side using this function + * is ignored. + * + * \return 0 on success + * \return #MBEDTLS_ERR_SSL_BAD_INPUT_DATA + * \return #MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE + */ +int mbedtls_ssl_dtls_srtp_set_mki_value( mbedtls_ssl_context *ssl, + unsigned char *mki_value, + uint16_t mki_len ); +/** + * \brief Get the negotiated DTLS-SRTP informations: + * Protection profile and MKI value. + * + * \warning This function must be called after the handshake is + * completed. The value returned by this function must + * not be trusted or acted upon before the handshake completes. + * + * \param ssl The SSL context to query. + * \param dtls_srtp_info The negotiated DTLS-SRTP informations: + * - Protection profile in use. + * A direct mapping of the iana defined value for protection + * profile on an uint16_t. + http://www.iana.org/assignments/srtp-protection/srtp-protection.xhtml + * #MBEDTLS_TLS_SRTP_UNSET if the use of SRTP was not negotiated + * or peer's Hello packet was not parsed yet. + * - mki size and value( if size is > 0 ). + */ void mbedtls_ssl_get_dtls_srtp_negotiation_result( const mbedtls_ssl_context *ssl, mbedtls_dtls_srtp_info *dtls_srtp_info ) { @@ -4795,12 +4968,46 @@ void mbedtls_ssl_get_dtls_srtp_negotiation_result( const mbedtls_ssl_context *ss } #endif /* MBEDTLS_SSL_DTLS_SRTP */ +/** + * \brief Set the maximum supported version sent from the client side + * and/or accepted at the server side + * (Default: MBEDTLS_SSL_MAX_MAJOR_VERSION, MBEDTLS_SSL_MAX_MINOR_VERSION) + * + * \note This ignores ciphersuites from higher versions. + * + * \note With DTLS, use MBEDTLS_SSL_MINOR_VERSION_2 for DTLS 1.0 and + * MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2 + * + * \param conf SSL configuration + * \param major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 supported) + * \param minor Minor version number (MBEDTLS_SSL_MINOR_VERSION_0, + * MBEDTLS_SSL_MINOR_VERSION_1 and MBEDTLS_SSL_MINOR_VERSION_2, + * MBEDTLS_SSL_MINOR_VERSION_3 supported) + */ void mbedtls_ssl_conf_max_version( mbedtls_ssl_config *conf, int major, int minor ) { conf->max_major_ver = major; conf->max_minor_ver = minor; } +/** + * \brief Set the minimum accepted SSL/TLS protocol version + * (Default: TLS 1.0) + * + * \note Input outside of the SSL_MAX_XXXXX_VERSION and + * SSL_MIN_XXXXX_VERSION range is ignored. + * + * \note MBEDTLS_SSL_MINOR_VERSION_0 (SSL v3) should be avoided. + * + * \note With DTLS, use MBEDTLS_SSL_MINOR_VERSION_2 for DTLS 1.0 and + * MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2 + * + * \param conf SSL configuration + * \param major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 supported) + * \param minor Minor version number (MBEDTLS_SSL_MINOR_VERSION_0, + * MBEDTLS_SSL_MINOR_VERSION_1 and MBEDTLS_SSL_MINOR_VERSION_2, + * MBEDTLS_SSL_MINOR_VERSION_3 supported) + */ void mbedtls_ssl_conf_min_version( mbedtls_ssl_config *conf, int major, int minor ) { conf->min_major_ver = major; @@ -4808,6 +5015,25 @@ void mbedtls_ssl_conf_min_version( mbedtls_ssl_config *conf, int major, int mino } #if defined(MBEDTLS_SSL_FALLBACK_SCSV) && defined(MBEDTLS_SSL_CLI_C) +/** + * \brief Set the fallback flag (client-side only). + * (Default: MBEDTLS_SSL_IS_NOT_FALLBACK). + * + * \note Set to MBEDTLS_SSL_IS_FALLBACK when preparing a fallback + * connection, that is a connection with max_version set to a + * lower value than the value you're willing to use. Such + * fallback connections are not recommended but are sometimes + * necessary to interoperate with buggy (version-intolerant) + * servers. + * + * \warning You should NOT set this to MBEDTLS_SSL_IS_FALLBACK for + * non-fallback connections! This would appear to work for a + * while, then cause failures when the server is upgraded to + * support a newer TLS version. + * + * \param conf SSL configuration + * \param fallback MBEDTLS_SSL_IS_NOT_FALLBACK or MBEDTLS_SSL_IS_FALLBACK + */ void mbedtls_ssl_conf_fallback( mbedtls_ssl_config *conf, char fallback ) { conf->fallback = fallback; @@ -4815,6 +5041,15 @@ void mbedtls_ssl_conf_fallback( mbedtls_ssl_config *conf, char fallback ) #endif #if defined(MBEDTLS_SSL_SRV_C) +/** + * \brief Whether to send a list of acceptable CAs in + * CertificateRequest messages. + * (Default: do send) + * + * \param conf SSL configuration + * \param cert_req_ca_list MBEDTLS_SSL_CERT_REQ_CA_LIST_ENABLED or + * MBEDTLS_SSL_CERT_REQ_CA_LIST_DISABLED + */ void mbedtls_ssl_conf_cert_req_ca_list( mbedtls_ssl_config *conf, char cert_req_ca_list ) { @@ -4823,6 +5058,17 @@ void mbedtls_ssl_conf_cert_req_ca_list( mbedtls_ssl_config *conf, #endif #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) +/** + * \brief Enable or disable Encrypt-then-MAC + * (Default: MBEDTLS_SSL_ETM_ENABLED) + * + * \note This should always be enabled, it is a security + * improvement, and should not cause any interoperability + * issue (used only if the peer supports it too). + * + * \param conf SSL configuration + * \param etm MBEDTLS_SSL_ETM_ENABLED or MBEDTLS_SSL_ETM_DISABLED + */ void mbedtls_ssl_conf_encrypt_then_mac( mbedtls_ssl_config *conf, char etm ) { conf->encrypt_then_mac = etm; @@ -4830,20 +5076,58 @@ void mbedtls_ssl_conf_encrypt_then_mac( mbedtls_ssl_config *conf, char etm ) #endif #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) +/** + * \brief Enable or disable Extended Master Secret negotiation. + * (Default: MBEDTLS_SSL_EXTENDED_MS_ENABLED) + * + * \note This should always be enabled, it is a security fix to the + * protocol, and should not cause any interoperability issue + * (used only if the peer supports it too). + * + * \param conf SSL configuration + * \param ems MBEDTLS_SSL_EXTENDED_MS_ENABLED or MBEDTLS_SSL_EXTENDED_MS_DISABLED + */ void mbedtls_ssl_conf_extended_master_secret( mbedtls_ssl_config *conf, char ems ) { conf->extended_ms = ems; } #endif -#if defined(MBEDTLS_ARC4_C) -void mbedtls_ssl_conf_arc4_support( mbedtls_ssl_config *conf, char arc4 ) -{ - conf->arc4_disabled = arc4; -} -#endif - #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) +/** + * \brief Set the maximum fragment length to emit and/or negotiate. + * (Typical: the smaller of #MBEDTLS_SSL_IN_CONTENT_LEN and + * #MBEDTLS_SSL_OUT_CONTENT_LEN, usually `2^14` bytes) + * (Server: set maximum fragment length to emit, + * usually negotiated by the client during handshake) + * (Client: set maximum fragment length to emit *and* + * negotiate with the server during handshake) + * (Default: #MBEDTLS_SSL_MAX_FRAG_LEN_NONE) + * + * \note On the client side, the maximum fragment length extension + * *will not* be used, unless the maximum fragment length has + * been set via this function to a value different than + * #MBEDTLS_SSL_MAX_FRAG_LEN_NONE. + * + * \note With TLS, this currently only affects ApplicationData (sent + * with \c mbedtls_ssl_read()), not handshake messages. + * With DTLS, this affects both ApplicationData and handshake. + * + * \note This sets the maximum length for a record's payload, + * excluding record overhead that will be added to it, see + * \c mbedtls_ssl_get_record_expansion(). + * + * \note For DTLS, it is also possible to set a limit for the total + * size of daragrams passed to the transport layer, including + * record overhead, see \c mbedtls_ssl_set_mtu(). + * + * \param conf SSL configuration + * \param mfl_code Code for maximum fragment length (allowed values: + * MBEDTLS_SSL_MAX_FRAG_LEN_512, MBEDTLS_SSL_MAX_FRAG_LEN_1024, + * MBEDTLS_SSL_MAX_FRAG_LEN_2048, MBEDTLS_SSL_MAX_FRAG_LEN_4096) + * + * \return 0 if successful or MBEDTLS_ERR_SSL_BAD_INPUT_DATA + */ int mbedtls_ssl_conf_max_frag_len( mbedtls_ssl_config *conf, unsigned char mfl_code ) { if( mfl_code >= MBEDTLS_SSL_MAX_FRAG_LEN_INVALID || @@ -4851,45 +5135,153 @@ int mbedtls_ssl_conf_max_frag_len( mbedtls_ssl_config *conf, unsigned char mfl_c { return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - conf->mfl_code = mfl_code; - return( 0 ); } #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) -void mbedtls_ssl_conf_truncated_hmac( mbedtls_ssl_config *conf, int truncate ) -{ - conf->trunc_hmac = truncate; -} -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ - #if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING) +/** + * \brief Enable / Disable 1/n-1 record splitting + * (Default: MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED) + * + * \note Only affects SSLv3 and TLS 1.0, not higher versions. + * Does not affect non-CBC ciphersuites in any version. + * + * \param conf SSL configuration + * \param split MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED or + * MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED + */ void mbedtls_ssl_conf_cbc_record_splitting( mbedtls_ssl_config *conf, char split ) { conf->cbc_record_splitting = split; } #endif +/** + * \brief Prevent or allow legacy renegotiation. + * (Default: MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION) + * + * MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION allows connections to + * be established even if the peer does not support + * secure renegotiation, but does not allow renegotiation + * to take place if not secure. + * (Interoperable and secure option) + * + * MBEDTLS_SSL_LEGACY_ALLOW_RENEGOTIATION allows renegotiations + * with non-upgraded peers. Allowing legacy renegotiation + * makes the connection vulnerable to specific man in the + * middle attacks. (See RFC 5746) + * (Most interoperable and least secure option) + * + * MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE breaks off connections + * if peer does not support secure renegotiation. Results + * in interoperability issues with non-upgraded peers + * that do not support renegotiation altogether. + * (Most secure option, interoperability issues) + * + * \param conf SSL configuration + * \param allow_legacy Prevent or allow (SSL_NO_LEGACY_RENEGOTIATION, + * SSL_ALLOW_LEGACY_RENEGOTIATION or + * MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE) + */ void mbedtls_ssl_conf_legacy_renegotiation( mbedtls_ssl_config *conf, int allow_legacy ) { conf->allow_legacy_renegotiation = allow_legacy; } #if defined(MBEDTLS_SSL_RENEGOTIATION) +/** + * \brief Enable / Disable renegotiation support for connection when + * initiated by peer + * (Default: MBEDTLS_SSL_RENEGOTIATION_DISABLED) + * + * \warning It is recommended to always disable renegotation unless you + * know you need it and you know what you're doing. In the + * past, there have been several issues associated with + * renegotiation or a poor understanding of its properties. + * + * \note Server-side, enabling renegotiation also makes the server + * susceptible to a resource DoS by a malicious client. + * + * \param conf SSL configuration + * \param renegotiation Enable or disable (MBEDTLS_SSL_RENEGOTIATION_ENABLED or + * MBEDTLS_SSL_RENEGOTIATION_DISABLED) + */ void mbedtls_ssl_conf_renegotiation( mbedtls_ssl_config *conf, int renegotiation ) { conf->disable_renegotiation = renegotiation; } +/** + * \brief Enforce renegotiation requests. + * (Default: enforced, max_records = 16) + * + * When we request a renegotiation, the peer can comply or + * ignore the request. This function allows us to decide + * whether to enforce our renegotiation requests by closing + * the connection if the peer doesn't comply. + * + * However, records could already be in transit from the peer + * when the request is emitted. In order to increase + * reliability, we can accept a number of records before the + * expected handshake records. + * + * The optimal value is highly dependent on the specific usage + * scenario. + * + * \note With DTLS and server-initiated renegotiation, the + * HelloRequest is retransmited every time mbedtls_ssl_read() times + * out or receives Application Data, until: + * - max_records records have beens seen, if it is >= 0, or + * - the number of retransmits that would happen during an + * actual handshake has been reached. + * Please remember the request might be lost a few times + * if you consider setting max_records to a really low value. + * + * \warning On client, the grace period can only happen during + * mbedtls_ssl_read(), as opposed to mbedtls_ssl_write() and mbedtls_ssl_renegotiate() + * which always behave as if max_record was 0. The reason is, + * if we receive application data from the server, we need a + * place to write it, which only happens during mbedtls_ssl_read(). + * + * \param conf SSL configuration + * \param max_records Use MBEDTLS_SSL_RENEGOTIATION_NOT_ENFORCED if you don't want to + * enforce renegotiation, or a non-negative value to enforce + * it but allow for a grace period of max_records records. + */ void mbedtls_ssl_conf_renegotiation_enforced( mbedtls_ssl_config *conf, int max_records ) { conf->renego_max_records = max_records; } +/** + * \brief Set record counter threshold for periodic renegotiation. + * (Default: 2^48 - 1) + * + * Renegotiation is automatically triggered when a record + * counter (outgoing or incoming) crosses the defined + * threshold. The default value is meant to prevent the + * connection from being closed when the counter is about to + * reached its maximal value (it is not allowed to wrap). + * + * Lower values can be used to enforce policies such as "keys + * must be refreshed every N packets with cipher X". + * + * The renegotiation period can be disabled by setting + * conf->disable_renegotiation to + * MBEDTLS_SSL_RENEGOTIATION_DISABLED. + * + * \note When the configured transport is + * MBEDTLS_SSL_TRANSPORT_DATAGRAM the maximum renegotiation + * period is 2^48 - 1, and for MBEDTLS_SSL_TRANSPORT_STREAM, + * the maximum renegotiation period is 2^64 - 1. + * + * \param conf SSL configuration + * \param period The threshold value: a big-endian 64-bit number. + */ void mbedtls_ssl_conf_renegotiation_period( mbedtls_ssl_config *conf, - const unsigned char period[8] ) + const unsigned char period[8] ) { memcpy( conf->renego_period, period, 8 ); } @@ -4897,6 +5289,16 @@ void mbedtls_ssl_conf_renegotiation_period( mbedtls_ssl_config *conf, #if defined(MBEDTLS_SSL_SESSION_TICKETS) #if defined(MBEDTLS_SSL_CLI_C) +/** + * \brief Enable / Disable session tickets (client only). + * (Default: MBEDTLS_SSL_SESSION_TICKETS_ENABLED.) + * + * \note On server, use \c mbedtls_ssl_conf_session_tickets_cb(). + * + * \param conf SSL configuration + * \param use_tickets Enable or disable (MBEDTLS_SSL_SESSION_TICKETS_ENABLED or + * MBEDTLS_SSL_SESSION_TICKETS_DISABLED) + */ void mbedtls_ssl_conf_session_tickets( mbedtls_ssl_config *conf, int use_tickets ) { conf->session_tickets = use_tickets; @@ -4904,10 +5306,24 @@ void mbedtls_ssl_conf_session_tickets( mbedtls_ssl_config *conf, int use_tickets #endif #if defined(MBEDTLS_SSL_SRV_C) +/** + * \brief Configure SSL session ticket callbacks (server only). + * (Default: none.) + * + * \note On server, session tickets are enabled by providing + * non-NULL callbacks. + * + * \note On client, use \c mbedtls_ssl_conf_session_tickets(). + * + * \param conf SSL configuration context + * \param f_ticket_write Callback for writing a ticket + * \param f_ticket_parse Callback for parsing a ticket + * \param p_ticket Context shared by the two callbacks + */ void mbedtls_ssl_conf_session_tickets_cb( mbedtls_ssl_config *conf, - mbedtls_ssl_ticket_write_t *f_ticket_write, - mbedtls_ssl_ticket_parse_t *f_ticket_parse, - void *p_ticket ) + mbedtls_ssl_ticket_write_t *f_ticket_write, + mbedtls_ssl_ticket_parse_t *f_ticket_parse, + void *p_ticket ) { conf->f_ticket_write = f_ticket_write; conf->f_ticket_parse = f_ticket_parse; @@ -4917,17 +5333,39 @@ void mbedtls_ssl_conf_session_tickets_cb( mbedtls_ssl_config *conf, #endif /* MBEDTLS_SSL_SESSION_TICKETS */ #if defined(MBEDTLS_SSL_EXPORT_KEYS) +/** + * \brief Configure key export callback. + * (Default: none.) + * + * \note See \c mbedtls_ssl_export_keys_t. + * + * \param conf SSL configuration context + * \param f_export_keys Callback for exporting keys + * \param p_export_keys Context for the callback + */ void mbedtls_ssl_conf_export_keys_cb( mbedtls_ssl_config *conf, - mbedtls_ssl_export_keys_t *f_export_keys, - void *p_export_keys ) + mbedtls_ssl_export_keys_t *f_export_keys, + void *p_export_keys ) { conf->f_export_keys = f_export_keys; conf->p_export_keys = p_export_keys; } +/** + * \brief Configure extended key export callback. + * (Default: none.) + * + * \note See \c mbedtls_ssl_export_keys_ext_t. + * \warning Exported key material must not be used for any purpose + * before the (D)TLS handshake is completed + * + * \param conf SSL configuration context + * \param f_export_keys_ext Callback for exporting keys + * \param p_export_keys Context for the callback + */ void mbedtls_ssl_conf_export_keys_ext_cb( mbedtls_ssl_config *conf, - mbedtls_ssl_export_keys_ext_t *f_export_keys_ext, - void *p_export_keys ) + mbedtls_ssl_export_keys_ext_t *f_export_keys_ext, + void *p_export_keys ) { conf->f_export_keys_ext = f_export_keys_ext; conf->p_export_keys = p_export_keys; @@ -4935,6 +5373,36 @@ void mbedtls_ssl_conf_export_keys_ext_cb( mbedtls_ssl_config *conf, #endif #if defined(MBEDTLS_SSL_ASYNC_PRIVATE) +/** + * \brief Configure asynchronous private key operation callbacks. + * + * \param conf SSL configuration context + * \param f_async_sign Callback to start a signature operation. See + * the description of ::mbedtls_ssl_async_sign_t + * for more information. This may be \c NULL if the + * external processor does not support any signature + * operation; in this case the private key object + * associated with the certificate will be used. + * \param f_async_decrypt Callback to start a decryption operation. See + * the description of ::mbedtls_ssl_async_decrypt_t + * for more information. This may be \c NULL if the + * external processor does not support any decryption + * operation; in this case the private key object + * associated with the certificate will be used. + * \param f_async_resume Callback to resume an asynchronous operation. See + * the description of ::mbedtls_ssl_async_resume_t + * for more information. This may not be \c NULL unless + * \p f_async_sign and \p f_async_decrypt are both + * \c NULL. + * \param f_async_cancel Callback to cancel an asynchronous operation. See + * the description of ::mbedtls_ssl_async_cancel_t + * for more information. This may be \c NULL if + * no cleanup is needed. + * \param config_data A pointer to configuration data which can be + * retrieved with + * mbedtls_ssl_conf_get_async_config_data(). The + * library stores this value without dereferencing it. + */ void mbedtls_ssl_conf_async_private_cb( mbedtls_ssl_config *conf, mbedtls_ssl_async_sign_t *f_async_sign, @@ -4950,11 +5418,33 @@ void mbedtls_ssl_conf_async_private_cb( conf->p_async_config_data = async_config_data; } +/** + * \brief Retrieve the configuration data set by + * mbedtls_ssl_conf_async_private_cb(). + * + * \param conf SSL configuration context + * \return The configuration data set by + * mbedtls_ssl_conf_async_private_cb(). + */ void *mbedtls_ssl_conf_get_async_config_data( const mbedtls_ssl_config *conf ) { return( conf->p_async_config_data ); } +/** + * \brief Retrieve the asynchronous operation user context. + * + * \note This function may only be called while a handshake + * is in progress. + * + * \param ssl The SSL context to access. + * + * \return The asynchronous operation user context that was last + * set during the current handshake. If + * mbedtls_ssl_set_async_operation_data() has not yet been + * called during the current handshake, this function returns + * \c NULL. + */ void *mbedtls_ssl_get_async_operation_data( const mbedtls_ssl_context *ssl ) { if( ssl->handshake == NULL ) @@ -4963,6 +5453,17 @@ void *mbedtls_ssl_get_async_operation_data( const mbedtls_ssl_context *ssl ) return( ssl->handshake->user_async_ctx ); } +/** + * \brief Retrieve the asynchronous operation user context. + * + * \note This function may only be called while a handshake + * is in progress. + * + * \param ssl The SSL context to access. + * \param ctx The new value of the asynchronous operation user context. + * Call mbedtls_ssl_get_async_operation_data() later during the + * same handshake to retrieve this value. + */ void mbedtls_ssl_set_async_operation_data( mbedtls_ssl_context *ssl, void *ctx ) { @@ -4971,28 +5472,48 @@ void mbedtls_ssl_set_async_operation_data( mbedtls_ssl_context *ssl, } #endif /* MBEDTLS_SSL_ASYNC_PRIVATE */ -/* - * SSL get accessors +/** + * \brief Return the result of the certificate verification + * + * \param ssl The SSL context to use. + * + * \return \c 0 if the certificate verification was successful. + * \return \c -1u if the result is not available. This may happen + * e.g. if the handshake aborts early, or a verification + * callback returned a fatal error. + * \return A bitwise combination of \c MBEDTLS_X509_BADCERT_XXX + * and \c MBEDTLS_X509_BADCRL_XXX failure flags; see x509.h. */ uint32_t mbedtls_ssl_get_verify_result( const mbedtls_ssl_context *ssl ) { if( ssl->session != NULL ) return( ssl->session->verify_result ); - if( ssl->session_negotiate != NULL ) return( ssl->session_negotiate->verify_result ); - return( 0xFFFFFFFF ); } +/** + * \brief Return the name of the current ciphersuite + * + * \param ssl SSL context + * + * \return a string containing the ciphersuite name + */ const char *mbedtls_ssl_get_ciphersuite( const mbedtls_ssl_context *ssl ) { if( ssl == NULL || ssl->session == NULL ) return( NULL ); - return mbedtls_ssl_get_ciphersuite_name( ssl->session->ciphersuite ); } +/** + * \brief Return the current SSL version (SSLv3/TLSv1/etc) + * + * \param ssl SSL context + * + * \return a string containing the SSL version + */ const char *mbedtls_ssl_get_version( const mbedtls_ssl_context *ssl ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) @@ -5002,48 +5523,53 @@ const char *mbedtls_ssl_get_version( const mbedtls_ssl_context *ssl ) { case MBEDTLS_SSL_MINOR_VERSION_2: return( "DTLSv1.0" ); - case MBEDTLS_SSL_MINOR_VERSION_3: return( "DTLSv1.2" ); - default: return( "unknown (DTLS)" ); } } #endif - switch( ssl->minor_ver ) { case MBEDTLS_SSL_MINOR_VERSION_0: return( "SSLv3.0" ); - case MBEDTLS_SSL_MINOR_VERSION_1: return( "TLSv1.0" ); - case MBEDTLS_SSL_MINOR_VERSION_2: return( "TLSv1.1" ); - case MBEDTLS_SSL_MINOR_VERSION_3: return( "TLSv1.2" ); - default: return( "unknown" ); } } #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) +/** + * \brief Return the maximum fragment length (payload, in bytes) for + * the input buffer. This is the negotiated maximum fragment + * length, or, if there is none, MBEDTLS_SSL_MAX_CONTENT_LEN. + * If it is not defined either, the value is 2^14. This function + * works as its predecessor, \c mbedtls_ssl_get_max_frag_len(). + * + * \sa mbedtls_ssl_conf_max_frag_len() + * \sa mbedtls_ssl_get_max_record_payload() + * + * \param ssl SSL context + * + * \return Current maximum fragment length for the output buffer. + */ size_t mbedtls_ssl_get_input_max_frag_len( const mbedtls_ssl_context *ssl ) { size_t max_len = MBEDTLS_SSL_MAX_CONTENT_LEN; size_t read_mfl; - /* Use the configured MFL for the client if we're past SERVER_HELLO_DONE */ if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT && ssl->state >= MBEDTLS_SSL_SERVER_HELLO_DONE ) { return ssl_mfl_code_to_length( ssl->conf->mfl_code ); } - /* Check if a smaller max length was negotiated */ if( ssl->session_out != NULL ) { @@ -5053,7 +5579,6 @@ size_t mbedtls_ssl_get_input_max_frag_len( const mbedtls_ssl_context *ssl ) max_len = read_mfl; } } - // During a handshake, use the value being negotiated if( ssl->session_negotiate != NULL ) { @@ -5063,42 +5588,43 @@ size_t mbedtls_ssl_get_input_max_frag_len( const mbedtls_ssl_context *ssl ) max_len = read_mfl; } } - return( max_len ); } +/** + * \brief Return the maximum fragment length (payload, in bytes) for + * the output buffer. For the client, this is the configured + * value. For the server, it is the minimum of two - the + * configured value and the negotiated one. + * + * \sa mbedtls_ssl_conf_max_frag_len() + * \sa mbedtls_ssl_get_max_record_payload() + * + * \param ssl SSL context + * + * \return Current maximum fragment length for the output buffer. + */ size_t mbedtls_ssl_get_output_max_frag_len( const mbedtls_ssl_context *ssl ) { size_t max_len; - /* * Assume mfl_code is correct since it was checked when set */ max_len = ssl_mfl_code_to_length( ssl->conf->mfl_code ); - /* Check if a smaller max length was negotiated */ if( ssl->session_out != NULL && ssl_mfl_code_to_length( ssl->session_out->mfl_code ) < max_len ) { max_len = ssl_mfl_code_to_length( ssl->session_out->mfl_code ); } - /* During a handshake, use the value being negotiated */ if( ssl->session_negotiate != NULL && ssl_mfl_code_to_length( ssl->session_negotiate->mfl_code ) < max_len ) { max_len = ssl_mfl_code_to_length( ssl->session_negotiate->mfl_code ); } - return( max_len ); } - -#if !defined(MBEDTLS_DEPRECATED_REMOVED) -size_t mbedtls_ssl_get_max_frag_len( const mbedtls_ssl_context *ssl ) -{ - return mbedtls_ssl_get_output_max_frag_len( ssl ); -} -#endif /* !MBEDTLS_DEPRECATED_REMOVED */ #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ #if defined(MBEDTLS_SSL_PROTO_DTLS) @@ -5109,69 +5635,113 @@ size_t mbedtls_ssl_get_current_mtu( const mbedtls_ssl_context *ssl ) ( ssl->state == MBEDTLS_SSL_CLIENT_HELLO || ssl->state == MBEDTLS_SSL_SERVER_HELLO ) ) return ( 0 ); - if( ssl->handshake == NULL || ssl->handshake->mtu == 0 ) return( ssl->mtu ); - if( ssl->mtu == 0 ) return( ssl->handshake->mtu ); - return( ssl->mtu < ssl->handshake->mtu ? ssl->mtu : ssl->handshake->mtu ); } #endif /* MBEDTLS_SSL_PROTO_DTLS */ +/** + * \brief Return the current maximum outgoing record payload in bytes. + * This takes into account the config.h setting \c + * MBEDTLS_SSL_OUT_CONTENT_LEN, the configured and negotiated + * max fragment length extension if used, and for DTLS the + * path MTU as configured and current record expansion. + * + * \note With DTLS, \c mbedtls_ssl_write() will return an error if + * called with a larger length value. + * With TLS, \c mbedtls_ssl_write() will fragment the input if + * necessary and return the number of bytes written; it is up + * to the caller to call \c mbedtls_ssl_write() again in + * order to send the remaining bytes if any. + * + * \note This function is not available (always returns an error) + * when record compression is enabled. + * + * \sa mbedtls_ssl_set_mtu() + * \sa mbedtls_ssl_get_output_max_frag_len() + * \sa mbedtls_ssl_get_input_max_frag_len() + * \sa mbedtls_ssl_get_record_expansion() + * + * \param ssl SSL context + * + * \return Current maximum payload for an outgoing record, + * or a negative error code. + */ int mbedtls_ssl_get_max_out_record_payload( const mbedtls_ssl_context *ssl ) { size_t max_len = MBEDTLS_SSL_OUT_CONTENT_LEN; - #if !defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) && \ !defined(MBEDTLS_SSL_PROTO_DTLS) (void) ssl; #endif - #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) const size_t mfl = mbedtls_ssl_get_output_max_frag_len( ssl ); - if( max_len > mfl ) max_len = mfl; #endif - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( mbedtls_ssl_get_current_mtu( ssl ) != 0 ) { const size_t mtu = mbedtls_ssl_get_current_mtu( ssl ); const int ret = mbedtls_ssl_get_record_expansion( ssl ); const size_t overhead = (size_t) ret; - if( ret < 0 ) return( ret ); - if( mtu <= overhead ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "MTU too low for record expansion" ) ); return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } - if( max_len > mtu - overhead ) max_len = mtu - overhead; } #endif /* MBEDTLS_SSL_PROTO_DTLS */ - #if !defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) && \ !defined(MBEDTLS_SSL_PROTO_DTLS) ((void) ssl); #endif - return( (int) max_len ); } #if defined(MBEDTLS_X509_CRT_PARSE_C) +/** + * \brief Return the peer certificate from the current connection. + * + * \param ssl The SSL context to use. This must be initialized and setup. + * + * \return The current peer certificate, if available. + * The returned certificate is owned by the SSL context and + * is valid only until the next call to the SSL API. + * \return \c NULL if no peer certificate is available. This might + * be because the chosen ciphersuite doesn't use CRTs + * (PSK-based ciphersuites, for example), or because + * #MBEDTLS_SSL_KEEP_PEER_CERTIFICATE has been disabled, + * allowing the stack to free the peer's CRT to save memory. + * + * \note For one-time inspection of the peer's certificate during + * the handshake, consider registering an X.509 CRT verification + * callback through mbedtls_ssl_conf_verify() instead of calling + * this function. Using mbedtls_ssl_conf_verify() also comes at + * the benefit of allowing you to influence the verification + * process, for example by masking expected and tolerated + * verification failures. + * + * \warning You must not use the pointer returned by this function + * after any further call to the SSL API, including + * mbedtls_ssl_read() and mbedtls_ssl_write(); this is + * because the pointer might change during renegotiation, + * which happens transparently to the user. + * If you want to use the certificate across API calls, + * you must make a copy. + */ const mbedtls_x509_crt *mbedtls_ssl_get_peer_cert( const mbedtls_ssl_context *ssl ) { if( ssl == NULL || ssl->session == NULL ) return( NULL ); - #if defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) return( ssl->session->peer_cert ); #else @@ -5181,6 +5751,32 @@ const mbedtls_x509_crt *mbedtls_ssl_get_peer_cert( const mbedtls_ssl_context *ss #endif /* MBEDTLS_X509_CRT_PARSE_C */ #if defined(MBEDTLS_SSL_CLI_C) +/** + * \brief Save session in order to resume it later (client-side only) + * Session data is copied to presented session structure. + * + * + * \param ssl SSL context + * \param session session context + * + * \return 0 if successful, + * MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed, + * MBEDTLS_ERR_SSL_BAD_INPUT_DATA if used server-side or + * arguments are otherwise invalid. + * + * \note Only the server certificate is copied, and not the full chain, + * so you should not attempt to validate the certificate again + * by calling \c mbedtls_x509_crt_verify() on it. + * Instead, you should use the results from the verification + * in the original handshake by calling \c mbedtls_ssl_get_verify_result() + * after loading the session again into a new SSL context + * using \c mbedtls_ssl_set_session(). + * + * \note Once the session object is not needed anymore, you should + * free it by calling \c mbedtls_ssl_session_free(). + * + * \sa mbedtls_ssl_set_session() + */ int mbedtls_ssl_get_session( const mbedtls_ssl_context *ssl, mbedtls_ssl_session *dst ) { @@ -5191,16 +5787,29 @@ int mbedtls_ssl_get_session( const mbedtls_ssl_context *ssl, { return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - return( mbedtls_ssl_session_copy( dst, ssl->session ) ); } #endif /* MBEDTLS_SSL_CLI_C */ +/** + * \brief Get a pointer to the current session structure, for example + * to serialize it. + * + * \warning Ownership of the session remains with the SSL context, and + * the returned pointer is only guaranteed to be valid until + * the next API call operating on the same \p ssl context. + * + * \see mbedtls_ssl_session_save() + * + * \param ssl The SSL context. + * + * \return A pointer to the current session if successful. + * \return \c NULL if no session is active. + */ const mbedtls_ssl_session *mbedtls_ssl_get_session_pointer( const mbedtls_ssl_context *ssl ) { if( ssl == NULL ) return( NULL ); - return( ssl->session ); } @@ -5238,11 +5847,7 @@ const mbedtls_ssl_session *mbedtls_ssl_get_session_pointer( const mbedtls_ssl_co #define SSL_SERIALIZED_SESSION_CONFIG_MFL 0 #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) -#define SSL_SERIALIZED_SESSION_CONFIG_TRUNC_HMAC 1 -#else #define SSL_SERIALIZED_SESSION_CONFIG_TRUNC_HMAC 0 -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) #define SSL_SERIALIZED_SESSION_CONFIG_ETM 1 @@ -5332,16 +5937,12 @@ static int ssl_session_save( const mbedtls_ssl_session *session, size_t cert_len; #endif /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ #endif /* MBEDTLS_X509_CRT_PARSE_C */ - - if( !omit_header ) { /* * Add version identifier */ - used += sizeof( ssl_serialized_session_header ); - if( used <= buf_len ) { memcpy( p, ssl_serialized_session_header, @@ -5349,17 +5950,14 @@ static int ssl_session_save( const mbedtls_ssl_session *session, p += sizeof( ssl_serialized_session_header ); } } - /* * Time */ #if defined(MBEDTLS_HAVE_TIME) used += 8; - if( used <= buf_len ) { start = (uint64_t) session->start; - *p++ = (unsigned char)( ( start >> 56 ) & 0xFF ); *p++ = (unsigned char)( ( start >> 48 ) & 0xFF ); *p++ = (unsigned char)( ( start >> 40 ) & 0xFF ); @@ -5370,7 +5968,6 @@ static int ssl_session_save( const mbedtls_ssl_session *session, *p++ = (unsigned char)( ( start ) & 0xFF ); } #endif /* MBEDTLS_HAVE_TIME */ - /* * Basic mandatory fields */ @@ -5380,27 +5977,21 @@ static int ssl_session_save( const mbedtls_ssl_session *session, + sizeof( session->id ) + sizeof( session->master ) + 4; /* verify_result */ - if( used <= buf_len ) { *p++ = (unsigned char)( ( session->ciphersuite >> 8 ) & 0xFF ); *p++ = (unsigned char)( ( session->ciphersuite ) & 0xFF ); - *p++ = (unsigned char)( session->compression & 0xFF ); - *p++ = (unsigned char)( session->id_len & 0xFF ); memcpy( p, session->id, 32 ); p += 32; - memcpy( p, session->master, 48 ); p += 48; - *p++ = (unsigned char)( ( session->verify_result >> 24 ) & 0xFF ); *p++ = (unsigned char)( ( session->verify_result >> 16 ) & 0xFF ); *p++ = (unsigned char)( ( session->verify_result >> 8 ) & 0xFF ); *p++ = (unsigned char)( ( session->verify_result ) & 0xFF ); } - /* * Peer's end-entity certificate */ @@ -5410,15 +6001,12 @@ static int ssl_session_save( const mbedtls_ssl_session *session, cert_len = 0; else cert_len = session->peer_cert->raw.len; - used += 3 + cert_len; - if( used <= buf_len ) { *p++ = (unsigned char)( ( cert_len >> 16 ) & 0xFF ); *p++ = (unsigned char)( ( cert_len >> 8 ) & 0xFF ); *p++ = (unsigned char)( ( cert_len ) & 0xFF ); - if( session->peer_cert != NULL ) { memcpy( p, session->peer_cert->raw.p, cert_len ); @@ -5449,67 +6037,72 @@ static int ssl_session_save( const mbedtls_ssl_session *session, } #endif /* !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ #endif /* MBEDTLS_X509_CRT_PARSE_C */ - /* * Session ticket if any, plus associated data */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C) used += 3 + session->ticket_len + 4; /* len + ticket + lifetime */ - if( used <= buf_len ) { *p++ = (unsigned char)( ( session->ticket_len >> 16 ) & 0xFF ); *p++ = (unsigned char)( ( session->ticket_len >> 8 ) & 0xFF ); *p++ = (unsigned char)( ( session->ticket_len ) & 0xFF ); - if( session->ticket != NULL ) { memcpy( p, session->ticket, session->ticket_len ); p += session->ticket_len; } - *p++ = (unsigned char)( ( session->ticket_lifetime >> 24 ) & 0xFF ); *p++ = (unsigned char)( ( session->ticket_lifetime >> 16 ) & 0xFF ); *p++ = (unsigned char)( ( session->ticket_lifetime >> 8 ) & 0xFF ); *p++ = (unsigned char)( ( session->ticket_lifetime ) & 0xFF ); } #endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_CLI_C */ - /* * Misc extension-related info */ #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) used += 1; - if( used <= buf_len ) *p++ = session->mfl_code; #endif - -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - used += 1; - - if( used <= buf_len ) - *p++ = (unsigned char)( ( session->trunc_hmac ) & 0xFF ); -#endif - #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) used += 1; - if( used <= buf_len ) *p++ = (unsigned char)( ( session->encrypt_then_mac ) & 0xFF ); #endif - /* Done */ *olen = used; - if( used > buf_len ) return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); - return( 0 ); } -/* - * Public wrapper for ssl_session_save() +/** + * \brief Save session structure as serialized data in a buffer. + * On client, this can be used for saving session data, + * potentially in non-volatile storage, for resuming later. + * On server, this can be used for alternative implementations + * of session cache or session tickets. + * + * \see mbedtls_ssl_session_load() + * \see mbedtls_ssl_get_session_pointer() + * + * \param session The session structure to be saved. + * \param buf The buffer to write the serialized data to. It must be a + * writeable buffer of at least \p len bytes, or may be \c + * NULL if \p len is \c 0. + * \param buf_len The number of bytes available for writing in \p buf. + * \param olen The size in bytes of the data that has been or would have + * been written. It must point to a valid \c size_t. + * + * \note \p olen is updated to the correct value regardless of + * whether \p buf_len was large enough. This makes it possible + * to determine the necessary size by calling this function + * with \p buf set to \c NULL and \p buf_len to \c 0. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL if \p buf is too small. */ int mbedtls_ssl_session_save( const mbedtls_ssl_session *session, unsigned char *buf, @@ -5727,13 +6320,6 @@ static int ssl_session_load( mbedtls_ssl_session *session, session->mfl_code = *p++; #endif -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - if( 1 > (size_t)( end - p ) ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - - session->trunc_hmac = *p++; -#endif - #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) if( 1 > (size_t)( end - p ) ) return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); @@ -5748,8 +6334,37 @@ static int ssl_session_load( mbedtls_ssl_session *session, return( 0 ); } -/* - * Deserialize session: public wrapper for error cleaning +/** + * \brief Load serialized session data into a session structure. + * On client, this can be used for loading saved sessions + * before resuming them with mbedstls_ssl_set_session(). + * On server, this can be used for alternative implementations + * of session cache or session tickets. + * + * \warning If a peer certificate chain is associated with the session, + * the serialized state will only contain the peer's + * end-entity certificate and the result of the chain + * verification (unless verification was disabled), but not + * the rest of the chain. + * + * \see mbedtls_ssl_session_save() + * \see mbedtls_ssl_set_session() + * + * \param session The session structure to be populated. It must have been + * initialised with mbedtls_ssl_session_init() but not + * populated yet. + * \param buf The buffer holding the serialized session data. It must be a + * readable buffer of at least \p len bytes. + * \param len The size of the serialized data in bytes. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed. + * \return #MBEDTLS_ERR_SSL_BAD_INPUT_DATA if input data is invalid. + * \return #MBEDTLS_ERR_SSL_VERSION_MISMATCH if the serialized data + * was generated in a different version or configuration of + * Mbed TLS. + * \return Another negative value for other kinds of errors (for + * example, unsupported features in the embedded certificate). */ int mbedtls_ssl_session_load( mbedtls_ssl_session *session, const unsigned char *buf, @@ -5763,30 +6378,82 @@ int mbedtls_ssl_session_load( mbedtls_ssl_session *session, return( ret ); } -/* - * Perform a single step of the SSL handshake +/** + * \brief Perform a single step of the SSL handshake + * + * \note The state of the context (ssl->state) will be at + * the next state after this function returns \c 0. Do not + * call this function if state is MBEDTLS_SSL_HANDSHAKE_OVER. + * + * \param ssl SSL context + * + * \return See mbedtls_ssl_handshake(). + * + * \warning If this function returns something other than \c 0, + * #MBEDTLS_ERR_SSL_WANT_READ, #MBEDTLS_ERR_SSL_WANT_WRITE, + * #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS or + * #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS, you must stop using + * the SSL context for reading or writing, and either free it + * or call \c mbedtls_ssl_session_reset() on it before + * re-using it for a new connection; the current connection + * must be closed. */ int mbedtls_ssl_handshake_step( mbedtls_ssl_context *ssl ) { - int ret = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE; - - if( ssl == NULL || ssl->conf == NULL ) + if( ssl == NULL || ssl->conf == NULL || ssl->conf->f_step == NULL ) return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - -#if defined(MBEDTLS_SSL_CLI_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) - ret = mbedtls_ssl_handshake_client_step( ssl ); -#endif -#if defined(MBEDTLS_SSL_SRV_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) - ret = mbedtls_ssl_handshake_server_step( ssl ); -#endif - - return( ret ); + return ssl->conf->f_step(ssl); } -/* - * Perform the SSL handshake +/** + * \brief Perform the SSL handshake + * + * \param ssl SSL context + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_SSL_WANT_READ or #MBEDTLS_ERR_SSL_WANT_WRITE + * if the handshake is incomplete and waiting for data to + * be available for reading from or writing to the underlying + * transport - in this case you must call this function again + * when the underlying transport is ready for the operation. + * \return #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS if an asynchronous + * operation is in progress (see + * mbedtls_ssl_conf_async_private_cb()) - in this case you + * must call this function again when the operation is ready. + * \return #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS if a cryptographic + * operation is in progress (see mbedtls_ecp_set_max_ops()) - + * in this case you must call this function again to complete + * the handshake when you're done attending other tasks. + * \return #MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED if DTLS is in use + * and the client did not demonstrate reachability yet - in + * this case you must stop using the context (see below). + * \return Another SSL error code - in this case you must stop using + * the context (see below). + * + * \warning If this function returns something other than + * \c 0, + * #MBEDTLS_ERR_SSL_WANT_READ, + * #MBEDTLS_ERR_SSL_WANT_WRITE, + * #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS or + * #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS, + * you must stop using the SSL context for reading or writing, + * and either free it or call \c mbedtls_ssl_session_reset() + * on it before re-using it for a new connection; the current + * connection must be closed. + * + * \note If DTLS is in use, then you may choose to handle + * #MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED specially for logging + * purposes, as it is an expected return value rather than an + * actual error, but you still need to reset/free the context. + * + * \note Remarks regarding event-driven DTLS: + * If the function returns #MBEDTLS_ERR_SSL_WANT_READ, no datagram + * from the underlying transport layer is currently being processed, + * and it is safe to idle until the timer or the underlying transport + * signal a new event. This is not true for a successful handshake, + * in which case the datagram of the underlying transport that is + * currently being processed might or might not contain further + * DTLS records. */ int mbedtls_ssl_handshake( mbedtls_ssl_context *ssl ) { @@ -5794,7 +6461,7 @@ int mbedtls_ssl_handshake( mbedtls_ssl_context *ssl ) /* Sanity checks */ - if( ssl == NULL || ssl->conf == NULL ) + if( ssl == NULL || ssl->conf == NULL || ssl->conf->f_step == NULL ) return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); #if defined(MBEDTLS_SSL_PROTO_DTLS) @@ -5812,7 +6479,7 @@ int mbedtls_ssl_handshake( mbedtls_ssl_context *ssl ) /* Main handshake loop */ while( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) { - ret = mbedtls_ssl_handshake_step( ssl ); + ret = ssl->conf->f_step( ssl ); if( ret != 0 ) break; @@ -5895,9 +6562,28 @@ int mbedtls_ssl_start_renegotiation( mbedtls_ssl_context *ssl ) return( 0 ); } -/* - * Renegotiate current connection on client, - * or request renegotiation on server +/** + * \brief Initiate an SSL renegotiation on the running connection. + * Client: perform the renegotiation right now. + * Server: request renegotiation, which will be performed + * during the next call to mbedtls_ssl_read() if honored by + * client. + * + * \param ssl SSL context + * + * \return 0 if successful, or any mbedtls_ssl_handshake() return + * value except #MBEDTLS_ERR_SSL_CLIENT_RECONNECT that can't + * happen during a renegotiation. + * + * \warning If this function returns something other than \c 0, + * #MBEDTLS_ERR_SSL_WANT_READ, #MBEDTLS_ERR_SSL_WANT_WRITE, + * #MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS or + * #MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS, you must stop using + * the SSL context for reading or writing, and either free it + * or call \c mbedtls_ssl_session_reset() on it before + * re-using it for a new connection; the current connection + * must be closed. + * */ int mbedtls_ssl_renegotiate( mbedtls_ssl_context *ssl ) { @@ -5970,10 +6656,8 @@ static void ssl_key_cert_free( mbedtls_ssl_key_cert *key_cert ) void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl ) { mbedtls_ssl_handshake_params *handshake = ssl->handshake; - if( handshake == NULL ) return; - #if defined(MBEDTLS_SSL_ASYNC_PRIVATE) if( ssl->conf->f_async_cancel != NULL && handshake->async_in_progress != 0 ) { @@ -5981,7 +6665,6 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl ) handshake->async_in_progress = 0; } #endif /* MBEDTLS_SSL_ASYNC_PRIVATE */ - #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) mbedtls_md5_free( &handshake->fin_md5 ); @@ -5989,21 +6672,12 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl ) #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_2) #if defined(MBEDTLS_SHA256_C) -#if defined(MBEDTLS_USE_PSA_CRYPTO) - psa_hash_abort( &handshake->fin_sha256_psa ); -#else mbedtls_sha256_free( &handshake->fin_sha256 ); #endif -#endif #if defined(MBEDTLS_SHA512_C) -#if defined(MBEDTLS_USE_PSA_CRYPTO) - psa_hash_abort( &handshake->fin_sha384_psa ); -#else mbedtls_sha512_free( &handshake->fin_sha512 ); #endif -#endif #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - #if defined(MBEDTLS_DHM_C) mbedtls_dhm_free( &handshake->dhm_ctx ); #endif @@ -6018,13 +6692,11 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl ) handshake->ecjpake_cache_len = 0; #endif #endif - #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) /* explicit void pointer cast for buggy MS compiler */ mbedtls_free( (void *) handshake->curves ); #endif - #if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED) if( handshake->psk != NULL ) { @@ -6032,7 +6704,6 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl ) mbedtls_free( handshake->psk ); } #endif - #if defined(MBEDTLS_X509_CRT_PARSE_C) && \ defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) /* @@ -6042,7 +6713,6 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl ) if( handshake->sni_key_cert != NULL ) { mbedtls_ssl_key_cert *cur = handshake->sni_key_cert, *next; - while( cur != NULL ) { next = cur->next; @@ -6051,7 +6721,6 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl ) } } #endif /* MBEDTLS_X509_CRT_PARSE_C && MBEDTLS_SSL_SERVER_NAME_INDICATION */ - #if defined(MBEDTLS_SSL_ECP_RESTARTABLE_ENABLED) mbedtls_x509_crt_restart_free( &handshake->ecrs_ctx ); if( handshake->ecrs_peer_cert != NULL ) @@ -6060,26 +6729,17 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl ) mbedtls_free( handshake->ecrs_peer_cert ); } #endif - #if defined(MBEDTLS_X509_CRT_PARSE_C) && \ !defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) mbedtls_pk_free( &handshake->peer_pubkey ); #endif /* MBEDTLS_X509_CRT_PARSE_C && !MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ - #if defined(MBEDTLS_SSL_PROTO_DTLS) mbedtls_free( handshake->verify_cookie ); mbedtls_ssl_flight_free( handshake->flight ); mbedtls_ssl_buffering_free( ssl ); #endif - -#if defined(MBEDTLS_ECDH_C) && \ - defined(MBEDTLS_USE_PSA_CRYPTO) - psa_destroy_key( handshake->ecdh_psa_privkey ); -#endif /* MBEDTLS_ECDH_C && MBEDTLS_USE_PSA_CRYPTO */ - mbedtls_platform_zeroize( handshake, sizeof( mbedtls_ssl_handshake_params ) ); - #if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) /* If the buffers are too big - reallocate. Because of the way Mbed TLS * processes datagrams and the fact that a datagram is allowed to have @@ -6090,6 +6750,15 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_context *ssl ) #endif } +/** + * \brief Free referenced items in an SSL session including the + * peer certificate and clear memory + * + * \note A session object can be freed even if the SSL context + * that was used to retrieve the session is still in use. + * + * \param session SSL session + */ void mbedtls_ssl_session_free( mbedtls_ssl_session *session ) { if( session == NULL ) @@ -6156,7 +6825,7 @@ static unsigned char ssl_serialized_context_header[] = { ( SSL_SERIALIZED_CONTEXT_CONFIG_BITFLAG >> 0 ) & 0xFF, }; -/* +/** * Serialize a full SSL context * * The format of the serialized data is: @@ -6193,6 +6862,53 @@ static unsigned char ssl_serialized_context_header[] = { * 3. value can be re-derived from other data (eg session keys from MS) * 4. value was temporary (eg content of input buffer) * 5. value will be provided by the user again (eg I/O callbacks and context) + * + * \brief Save an active connection as serialized data in a buffer. + * This allows the freeing or re-using of the SSL context + * while still picking up the connection later in a way that + * it entirely transparent to the peer. + * + * \see mbedtls_ssl_context_load() + * + * \note This feature is currently only available under certain + * conditions, see the documentation of the return value + * #MBEDTLS_ERR_SSL_BAD_INPUT_DATA for details. + * + * \note When this function succeeds, it calls + * mbedtls_ssl_session_reset() on \p ssl which as a result is + * no longer associated with the connection that has been + * serialized. This avoids creating copies of the connection + * state. You're then free to either re-use the context + * structure for a different connection, or call + * mbedtls_ssl_free() on it. See the documentation of + * mbedtls_ssl_session_reset() for more details. + * + * \param ssl The SSL context to save. On success, it is no longer + * associated with the connection that has been serialized. + * \param buf The buffer to write the serialized data to. It must be a + * writeable buffer of at least \p buf_len bytes, or may be \c + * NULL if \p buf_len is \c 0. + * \param buf_len The number of bytes available for writing in \p buf. + * \param olen The size in bytes of the data that has been or would have + * been written. It must point to a valid \c size_t. + * + * \note \p olen is updated to the correct value regardless of + * whether \p buf_len was large enough. This makes it possible + * to determine the necessary size by calling this function + * with \p buf set to \c NULL and \p buf_len to \c 0. However, + * the value of \p olen is only guaranteed to be correct when + * the function returns #MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL or + * \c 0. If the return value is different, then the value of + * \p olen is undefined. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL if \p buf is too small. + * \return #MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed + * while reseting the context. + * \return #MBEDTLS_ERR_SSL_BAD_INPUT_DATA if a handshake is in + * progress, or there is pending data for reading or sending, + * or the connection does not use DTLS 1.2 with an AEAD + * ciphersuite, or renegotiation is enabled. */ int mbedtls_ssl_context_save( mbedtls_ssl_context *ssl, unsigned char *buf, @@ -6731,8 +7447,70 @@ static int ssl_context_load( mbedtls_ssl_context *ssl, return( 0 ); } -/* - * Deserialize context: public wrapper for error cleaning +/** + * \brief Load serialized connection data to an SSL context. + * + * \see mbedtls_ssl_context_save() + * + * \warning The same serialized data must never be loaded into more + * that one context. In order to ensure that, after + * successfully loading serialized data to an SSL context, you + * should immediately destroy or invalidate all copies of the + * serialized data that was loaded. Loading the same data in + * more than one context would cause severe security failures + * including but not limited to loss of confidentiality. + * + * \note Before calling this function, the SSL context must be + * prepared in one of the two following ways. The first way is + * to take a context freshly initialised with + * mbedtls_ssl_init() and call mbedtls_ssl_setup() on it with + * the same ::mbedtls_ssl_config structure that was used in + * the original connection. The second way is to + * call mbedtls_ssl_session_reset() on a context that was + * previously prepared as above but used in the meantime. + * Either way, you must not use the context to perform a + * handshake between calling mbedtls_ssl_setup() or + * mbedtls_ssl_session_reset() and calling this function. You + * may however call other setter functions in that time frame + * as indicated in the note below. + * + * \note Before or after calling this function successfully, you + * also need to configure some connection-specific callbacks + * and settings before you can use the connection again + * (unless they were already set before calling + * mbedtls_ssl_session_reset() and the values are suitable for + * the present connection). Specifically, you want to call + * at least mbedtls_ssl_set_bio() and + * mbedtls_ssl_set_timer_cb(). All other SSL setter functions + * are not necessary to call, either because they're only used + * in handshakes, or because the setting is already saved. You + * might choose to call them anyway, for example in order to + * share code between the cases of establishing a new + * connection and the case of loading an already-established + * connection. + * + * \note If you have new information about the path MTU, you want to + * call mbedtls_ssl_set_mtu() after calling this function, as + * otherwise this function would overwrite your + * newly-configured value with the value that was active when + * the context was saved. + * + * \note When this function returns an error code, it calls + * mbedtls_ssl_free() on \p ssl. In this case, you need to + * prepare the context with the usual sequence starting with a + * call to mbedtls_ssl_init() if you want to use it again. + * + * \param ssl The SSL context structure to be populated. It must have + * been prepared as described in the note above. + * \param buf The buffer holding the serialized connection data. It must + * be a readable buffer of at least \p len bytes. + * \param len The size of the serialized data in bytes. + * + * \return \c 0 if successful. + * \return #MBEDTLS_ERR_SSL_ALLOC_FAILED if memory allocation failed. + * \return #MBEDTLS_ERR_SSL_VERSION_MISMATCH if the serialized data + * comes from a different Mbed TLS version or build. + * \return #MBEDTLS_ERR_SSL_BAD_INPUT_DATA if input data is invalid. */ int mbedtls_ssl_context_load( mbedtls_ssl_context *context, const unsigned char *buf, @@ -6747,8 +7525,10 @@ int mbedtls_ssl_context_load( mbedtls_ssl_context *context, } #endif /* MBEDTLS_SSL_CONTEXT_SERIALIZATION */ -/* - * Free an SSL context +/** + * \brief Free referenced items in an SSL context and clear memory + * + * \param ssl SSL context */ void mbedtls_ssl_free( mbedtls_ssl_context *ssl ) { @@ -6840,8 +7620,15 @@ void mbedtls_ssl_free( mbedtls_ssl_context *ssl ) mbedtls_platform_zeroize( ssl, sizeof( mbedtls_ssl_context ) ); } -/* - * Initialze mbedtls_ssl_config +/** + * \brief Initialize an SSL configuration context + * Just makes the context ready for + * mbedtls_ssl_config_defaults() or mbedtls_ssl_config_free(). + * + * \note You need to call mbedtls_ssl_config_defaults() unless you + * manually set all of the relevant fields yourself. + * + * \param conf SSL configuration context */ void mbedtls_ssl_config_init( mbedtls_ssl_config *conf ) { @@ -6849,7 +7636,7 @@ void mbedtls_ssl_config_init( mbedtls_ssl_config *conf ) } #if defined(MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED) -static int ssl_preset_default_hashes[] = { +static uint8_t ssl_preset_default_hashes[] = { #if defined(MBEDTLS_SHA512_C) MBEDTLS_MD_SHA512, MBEDTLS_MD_SHA384, @@ -6865,27 +7652,33 @@ static int ssl_preset_default_hashes[] = { }; #endif -static int ssl_preset_suiteb_ciphersuites[] = { - MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, +static uint16_t ssl_preset_suiteb_ciphersuites[] = { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, 0 }; #if defined(MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED) -static int ssl_preset_suiteb_hashes[] = { - MBEDTLS_MD_SHA256, +static uint8_t ssl_preset_suiteb_hashes[] = { MBEDTLS_MD_SHA384, + MBEDTLS_MD_SHA256, MBEDTLS_MD_NONE }; #endif #if defined(MBEDTLS_ECP_C) static mbedtls_ecp_group_id ssl_preset_suiteb_curves[] = { -#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) - MBEDTLS_ECP_DP_SECP256R1, -#endif #if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) MBEDTLS_ECP_DP_SECP384R1, +#endif +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) + MBEDTLS_ECP_DP_SECP256R1, #endif MBEDTLS_ECP_DP_NONE }; @@ -6894,18 +7687,18 @@ static mbedtls_ecp_group_id ssl_preset_suiteb_curves[] = { /* * Load default in mbedtls_ssl_config */ -int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, - int endpoint, int transport, int preset ) +int mbedtls_ssl_config_defaults_impl( mbedtls_ssl_config *conf, + int endpoint, int transport, int preset, + int ssl_handshake_step(mbedtls_ssl_context *) ) { #if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_SRV_C) int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; #endif - + conf->f_step = ssl_handshake_step; /* Use the functions here so that they are covered in tests, * but otherwise access member directly for efficiency */ mbedtls_ssl_conf_endpoint( conf, endpoint ); mbedtls_ssl_conf_transport( conf, transport ); - /* * Things that are common to all presets */ @@ -6918,47 +7711,34 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, #endif } #endif - -#if defined(MBEDTLS_ARC4_C) - conf->arc4_disabled = MBEDTLS_SSL_ARC4_DISABLED; -#endif - #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) conf->encrypt_then_mac = MBEDTLS_SSL_ETM_ENABLED; #endif - #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) conf->extended_ms = MBEDTLS_SSL_EXTENDED_MS_ENABLED; #endif - #if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING) conf->cbc_record_splitting = MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED; #endif - #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C) conf->f_cookie_write = ssl_cookie_write_dummy; conf->f_cookie_check = ssl_cookie_check_dummy; #endif - #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) conf->anti_replay = MBEDTLS_SSL_ANTI_REPLAY_ENABLED; #endif - #if defined(MBEDTLS_SSL_SRV_C) conf->cert_req_ca_list = MBEDTLS_SSL_CERT_REQ_CA_LIST_ENABLED; #endif - #if defined(MBEDTLS_SSL_PROTO_DTLS) conf->hs_timeout_min = MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN; conf->hs_timeout_max = MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MAX; #endif - #if defined(MBEDTLS_SSL_RENEGOTIATION) conf->renego_max_records = MBEDTLS_SSL_RENEGO_MAX_RECORDS_DEFAULT; memset( conf->renego_period, 0x00, 2 ); memset( conf->renego_period + 2, 0xFF, 6 ); #endif - #if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_SRV_C) if( endpoint == MBEDTLS_SSL_IS_SERVER ) { @@ -6966,7 +7746,6 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, MBEDTLS_DHM_RFC3526_MODP_2048_P_BIN; const unsigned char dhm_g[] = MBEDTLS_DHM_RFC3526_MODP_2048_G_BIN; - if ( ( ret = mbedtls_ssl_conf_dh_param_bin( conf, dhm_p, sizeof( dhm_p ), dhm_g, sizeof( dhm_g ) ) ) != 0 ) @@ -6975,7 +7754,6 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, } } #endif - /* * Preset-specific defaults */ @@ -6989,26 +7767,21 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, conf->min_minor_ver = MBEDTLS_SSL_MINOR_VERSION_3; /* TLS 1.2 */ conf->max_major_ver = MBEDTLS_SSL_MAX_MAJOR_VERSION; conf->max_minor_ver = MBEDTLS_SSL_MAX_MINOR_VERSION; - conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_0] = conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_1] = conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_2] = conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_3] = ssl_preset_suiteb_ciphersuites; - #if defined(MBEDTLS_X509_CRT_PARSE_C) conf->cert_profile = &mbedtls_x509_crt_profile_suiteb; #endif - #if defined(MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED) conf->sig_hashes = ssl_preset_suiteb_hashes; #endif - #if defined(MBEDTLS_ECP_C) conf->curve_list = ssl_preset_suiteb_curves; #endif break; - /* * Default */ @@ -7023,40 +7796,35 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, MBEDTLS_SSL_MIN_VALID_MINOR_VERSION; conf->max_major_ver = MBEDTLS_SSL_MAX_MAJOR_VERSION; conf->max_minor_ver = MBEDTLS_SSL_MAX_MINOR_VERSION; - #if defined(MBEDTLS_SSL_PROTO_DTLS) if( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) conf->min_minor_ver = MBEDTLS_SSL_MINOR_VERSION_2; #endif - conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_0] = conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_1] = conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_2] = conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_3] = mbedtls_ssl_list_ciphersuites(); - #if defined(MBEDTLS_X509_CRT_PARSE_C) conf->cert_profile = &mbedtls_x509_crt_profile_default; #endif - #if defined(MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED) conf->sig_hashes = ssl_preset_default_hashes; #endif - #if defined(MBEDTLS_ECP_C) conf->curve_list = mbedtls_ecp_grp_id_list(); #endif - #if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_CLI_C) conf->dhm_min_bitlen = 1024; #endif } - return( 0 ); } -/* - * Free mbedtls_ssl_config +/** + * \brief Free an SSL configuration context + * + * \param conf SSL configuration context */ void mbedtls_ssl_config_free( mbedtls_ssl_config *conf ) { @@ -7064,7 +7832,6 @@ void mbedtls_ssl_config_free( mbedtls_ssl_config *conf ) mbedtls_mpi_free( &conf->dhm_P ); mbedtls_mpi_free( &conf->dhm_G ); #endif - #if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED) if( conf->psk != NULL ) { @@ -7073,7 +7840,6 @@ void mbedtls_ssl_config_free( mbedtls_ssl_config *conf ) conf->psk = NULL; conf->psk_len = 0; } - if( conf->psk_identity != NULL ) { mbedtls_platform_zeroize( conf->psk_identity, conf->psk_identity_len ); @@ -7082,16 +7848,66 @@ void mbedtls_ssl_config_free( mbedtls_ssl_config *conf ) conf->psk_identity_len = 0; } #endif - #if defined(MBEDTLS_X509_CRT_PARSE_C) ssl_key_cert_free( conf->key_cert ); #endif - mbedtls_platform_zeroize( conf, sizeof( mbedtls_ssl_config ) ); } +int mbedtls_ssl_get_key_exchange_md_tls1_2( mbedtls_ssl_context *ssl, + unsigned char *hash, size_t *hashlen, + unsigned char *data, size_t data_len, + mbedtls_md_type_t md_alg ) +{ + int ret = 0; + mbedtls_md_context_t ctx; + const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type( md_alg ); + *hashlen = mbedtls_md_get_size( md_info ); + MBEDTLS_SSL_DEBUG_MSG( 3, ( "Perform mbedtls-based computation of digest of ServerKeyExchange" ) ); + mbedtls_md_init( &ctx ); + /* + * digitally-signed struct { + * opaque client_random[32]; + * opaque server_random[32]; + * ServerDHParams params; + * }; + */ + if( ( ret = mbedtls_md_setup( &ctx, md_info, 0 ) ) != 0 ) + { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_setup", ret ); + goto exit; + } + if( ( ret = mbedtls_md_starts( &ctx ) ) != 0 ) + { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_starts", ret ); + goto exit; + } + if( ( ret = mbedtls_md_update( &ctx, ssl->handshake->randbytes, 64 ) ) != 0 ) + { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_update", ret ); + goto exit; + } + if( ( ret = mbedtls_md_update( &ctx, data, data_len ) ) != 0 ) + { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_update", ret ); + goto exit; + } + if( ( ret = mbedtls_md_finish( &ctx, hash ) ) != 0 ) + { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_finish", ret ); + goto exit; + } +exit: + mbedtls_md_free( &ctx ); + if( ret != 0 ) + mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, + MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR ); + return( ret ); +} + #if defined(MBEDTLS_PK_C) && \ ( defined(MBEDTLS_RSA_C) || defined(MBEDTLS_ECDSA_C) ) + /* * Convert between MBEDTLS_PK_XXX and SSL_SIG_XXX */ @@ -7123,8 +7939,7 @@ unsigned char mbedtls_ssl_sig_from_pk_alg( mbedtls_pk_type_t type ) mbedtls_pk_type_t mbedtls_ssl_pk_alg_from_sig( unsigned char sig ) { - switch( sig ) - { + switch( sig ) { #if defined(MBEDTLS_RSA_C) case MBEDTLS_SSL_SIG_RSA: return( MBEDTLS_PK_RSA ); @@ -7137,6 +7952,7 @@ mbedtls_pk_type_t mbedtls_ssl_pk_alg_from_sig( unsigned char sig ) return( MBEDTLS_PK_NONE ); } } + #endif /* MBEDTLS_PK_C && ( MBEDTLS_RSA_C || MBEDTLS_ECDSA_C ) */ #if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \ @@ -7168,12 +7984,10 @@ void mbedtls_ssl_sig_hash_set_add( mbedtls_ssl_sig_hash_set_t *set, if( set->rsa == MBEDTLS_MD_NONE ) set->rsa = md_alg; break; - case MBEDTLS_PK_ECDSA: if( set->ecdsa == MBEDTLS_MD_NONE ) set->ecdsa = md_alg; break; - default: break; } @@ -7221,7 +8035,6 @@ mbedtls_md_type_t mbedtls_ssl_md_alg_from_hash( unsigned char hash ) return( MBEDTLS_MD_NONE ); } } - /* * Convert from MBEDTLS_MD_XXX to MBEDTLS_SSL_HASH_XXX */ @@ -7262,14 +8075,11 @@ unsigned char mbedtls_ssl_hash_from_md_alg( int md ) int mbedtls_ssl_check_curve( const mbedtls_ssl_context *ssl, mbedtls_ecp_group_id grp_id ) { const mbedtls_ecp_group_id *gid; - if( ssl->conf->curve_list == NULL ) return( -1 ); - for( gid = ssl->conf->curve_list; *gid != MBEDTLS_ECP_DP_NONE; gid++ ) if( *gid == grp_id ) return( 0 ); - return( -1 ); } #endif /* MBEDTLS_ECP_C */ @@ -7282,24 +8092,21 @@ int mbedtls_ssl_check_curve( const mbedtls_ssl_context *ssl, mbedtls_ecp_group_i int mbedtls_ssl_check_sig_hash( const mbedtls_ssl_context *ssl, mbedtls_md_type_t md ) { - const int *cur; - + const uint8_t *cur; if( ssl->conf->sig_hashes == NULL ) return( -1 ); - for( cur = ssl->conf->sig_hashes; *cur != MBEDTLS_MD_NONE; cur++ ) if( *cur == (int) md ) return( 0 ); - return( -1 ); } #endif /* MBEDTLS_KEY_EXCHANGE_WITH_CERT_ENABLED */ #if defined(MBEDTLS_X509_CRT_PARSE_C) int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, - const mbedtls_ssl_ciphersuite_t *ciphersuite, - int cert_endpoint, - uint32_t *flags ) + const mbedtls_ssl_ciphersuite_t *ciphersuite, + int cert_endpoint, + uint32_t *flags ) { int ret = 0; #if defined(MBEDTLS_X509_CHECK_KEY_USAGE) @@ -7309,14 +8116,12 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, const char *ext_oid; size_t ext_len; #endif - #if !defined(MBEDTLS_X509_CHECK_KEY_USAGE) && \ !defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE) ((void) cert); ((void) cert_endpoint); ((void) flags); #endif - #if defined(MBEDTLS_X509_CHECK_KEY_USAGE) if( cert_endpoint == MBEDTLS_SSL_IS_SERVER ) { @@ -7327,18 +8132,15 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, case MBEDTLS_KEY_EXCHANGE_RSA_PSK: usage = MBEDTLS_X509_KU_KEY_ENCIPHERMENT; break; - case MBEDTLS_KEY_EXCHANGE_DHE_RSA: case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA: case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA: usage = MBEDTLS_X509_KU_DIGITAL_SIGNATURE; break; - case MBEDTLS_KEY_EXCHANGE_ECDH_RSA: case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA: usage = MBEDTLS_X509_KU_KEY_AGREEMENT; break; - /* Don't use default: we want warnings when adding new values */ case MBEDTLS_KEY_EXCHANGE_NONE: case MBEDTLS_KEY_EXCHANGE_PSK: @@ -7353,7 +8155,6 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, /* Client auth: we only implement rsa_sign and mbedtls_ecdsa_sign for now */ usage = MBEDTLS_X509_KU_DIGITAL_SIGNATURE; } - if( mbedtls_x509_crt_check_key_usage( cert, usage ) != 0 ) { *flags |= MBEDTLS_X509_BADCERT_KEY_USAGE; @@ -7362,7 +8163,6 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, #else ((void) ciphersuite); #endif /* MBEDTLS_X509_CHECK_KEY_USAGE */ - #if defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE) if( cert_endpoint == MBEDTLS_SSL_IS_SERVER ) { @@ -7374,14 +8174,12 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, ext_oid = MBEDTLS_OID_CLIENT_AUTH; ext_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_CLIENT_AUTH ); } - if( mbedtls_x509_crt_check_extended_key_usage( cert, ext_oid, ext_len ) != 0 ) { *flags |= MBEDTLS_X509_BADCERT_EXT_KEY_USAGE; ret = -1; } #endif /* MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE */ - return( ret ); } #endif /* MBEDTLS_X509_CRT_PARSE_C */ @@ -7391,7 +8189,6 @@ int mbedtls_ssl_set_calc_verify_md( mbedtls_ssl_context *ssl, int md ) #if defined(MBEDTLS_SSL_PROTO_TLS1_2) if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) return MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH; - switch( md ) { #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) @@ -7418,12 +8215,10 @@ int mbedtls_ssl_set_calc_verify_md( mbedtls_ssl_context *ssl, int md ) default: return MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH; } - return 0; #else /* !MBEDTLS_SSL_PROTO_TLS1_2 */ (void) ssl; (void) md; - return MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH; #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ } @@ -7431,16 +8226,14 @@ int mbedtls_ssl_set_calc_verify_md( mbedtls_ssl_context *ssl, int md ) #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) int mbedtls_ssl_get_key_exchange_md_ssl_tls( mbedtls_ssl_context *ssl, - unsigned char *output, - unsigned char *data, size_t data_len ) + unsigned char *output, + unsigned char *data, size_t data_len ) { int ret = 0; mbedtls_md5_context mbedtls_md5; mbedtls_sha1_context mbedtls_sha1; - mbedtls_md5_init( &mbedtls_md5 ); mbedtls_sha1_init( &mbedtls_sha1 ); - /* * digitally-signed struct { * opaque md5_hash[16]; @@ -7475,7 +8268,6 @@ int mbedtls_ssl_get_key_exchange_md_ssl_tls( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md5_finish_ret", ret ); goto exit; } - if( ( ret = mbedtls_sha1_starts_ret( &mbedtls_sha1 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_sha1_starts_ret", ret ); @@ -7499,146 +8291,15 @@ int mbedtls_ssl_get_key_exchange_md_ssl_tls( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_sha1_finish_ret", ret ); goto exit; } - exit: mbedtls_md5_free( &mbedtls_md5 ); mbedtls_sha1_free( &mbedtls_sha1 ); - if( ret != 0 ) mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR ); - return( ret ); - } #endif /* MBEDTLS_SSL_PROTO_SSL3 || MBEDTLS_SSL_PROTO_TLS1 || \ MBEDTLS_SSL_PROTO_TLS1_1 */ -#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ - defined(MBEDTLS_SSL_PROTO_TLS1_2) - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -int mbedtls_ssl_get_key_exchange_md_tls1_2( mbedtls_ssl_context *ssl, - unsigned char *hash, size_t *hashlen, - unsigned char *data, size_t data_len, - mbedtls_md_type_t md_alg ) -{ - psa_status_t status; - psa_hash_operation_t hash_operation = PSA_HASH_OPERATION_INIT; - psa_algorithm_t hash_alg = mbedtls_psa_translate_md( md_alg ); - - MBEDTLS_SSL_DEBUG_MSG( 3, ( "Perform PSA-based computation of digest of ServerKeyExchange" ) ); - - if( ( status = psa_hash_setup( &hash_operation, - hash_alg ) ) != PSA_SUCCESS ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "psa_hash_setup", status ); - goto exit; - } - - if( ( status = psa_hash_update( &hash_operation, ssl->handshake->randbytes, - 64 ) ) != PSA_SUCCESS ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "psa_hash_update", status ); - goto exit; - } - - if( ( status = psa_hash_update( &hash_operation, - data, data_len ) ) != PSA_SUCCESS ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "psa_hash_update", status ); - goto exit; - } - - if( ( status = psa_hash_finish( &hash_operation, hash, MBEDTLS_MD_MAX_SIZE, - hashlen ) ) != PSA_SUCCESS ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "psa_hash_finish", status ); - goto exit; - } - -exit: - if( status != PSA_SUCCESS ) - { - mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR ); - switch( status ) - { - case PSA_ERROR_NOT_SUPPORTED: - return( MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE ); - case PSA_ERROR_BAD_STATE: /* Intentional fallthrough */ - case PSA_ERROR_BUFFER_TOO_SMALL: - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); - case PSA_ERROR_INSUFFICIENT_MEMORY: - return( MBEDTLS_ERR_MD_ALLOC_FAILED ); - default: - return( MBEDTLS_ERR_MD_HW_ACCEL_FAILED ); - } - } - return( 0 ); -} - -#else - -int mbedtls_ssl_get_key_exchange_md_tls1_2( mbedtls_ssl_context *ssl, - unsigned char *hash, size_t *hashlen, - unsigned char *data, size_t data_len, - mbedtls_md_type_t md_alg ) -{ - int ret = 0; - mbedtls_md_context_t ctx; - const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type( md_alg ); - *hashlen = mbedtls_md_get_size( md_info ); - - MBEDTLS_SSL_DEBUG_MSG( 3, ( "Perform mbedtls-based computation of digest of ServerKeyExchange" ) ); - - mbedtls_md_init( &ctx ); - - /* - * digitally-signed struct { - * opaque client_random[32]; - * opaque server_random[32]; - * ServerDHParams params; - * }; - */ - if( ( ret = mbedtls_md_setup( &ctx, md_info, 0 ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_setup", ret ); - goto exit; - } - if( ( ret = mbedtls_md_starts( &ctx ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_starts", ret ); - goto exit; - } - if( ( ret = mbedtls_md_update( &ctx, ssl->handshake->randbytes, 64 ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_update", ret ); - goto exit; - } - if( ( ret = mbedtls_md_update( &ctx, data, data_len ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_update", ret ); - goto exit; - } - if( ( ret = mbedtls_md_finish( &ctx, hash ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_finish", ret ); - goto exit; - } - -exit: - mbedtls_md_free( &ctx ); - - if( ret != 0 ) - mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_INTERNAL_ERROR ); - - return( ret ); -} -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - -#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \ - MBEDTLS_SSL_PROTO_TLS1_2 */ - #endif /* MBEDTLS_SSL_TLS_C */ diff --git a/third_party/mbedtls/ssl_tls13_keys.c b/third_party/mbedtls/ssl_tls13_keys.c index 268595033..330c690dd 100644 --- a/third_party/mbedtls/ssl_tls13_keys.c +++ b/third_party/mbedtls/ssl_tls13_keys.c @@ -1,5 +1,15 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/hkdf.h" +#include "third_party/mbedtls/ssl_internal.h" +#include "third_party/mbedtls/ssl_tls13_keys.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * TLS 1.3 key schedule * @@ -19,15 +29,8 @@ * limitations under the License. */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) -#include "third_party/mbedtls/hkdf.h" -#include "third_party/mbedtls/ssl_internal.h" -#include "third_party/mbedtls/ssl_tls13_keys.h" - - #define MBEDTLS_SSL_TLS1_3_LABEL( name, string ) \ .name = string, @@ -130,6 +133,32 @@ static void ssl_tls1_3_hkdf_encode_label( *dlen = total_hkdf_lbl_len; } +/** + * \brief The \c HKDF-Expand-Label function from + * the TLS 1.3 standard RFC 8446. + * + * + * HKDF-Expand-Label( Secret, Label, Context, Length ) = + * HKDF-Expand( Secret, HkdfLabel, Length ) + * + * + * \param hash_alg The identifier for the hash algorithm to use. + * \param secret The \c Secret argument to \c HKDF-Expand-Label. + * This must be a readable buffer of length \p slen Bytes. + * \param slen The length of \p secret in Bytes. + * \param label The \c Label argument to \c HKDF-Expand-Label. + * This must be a readable buffer of length \p llen Bytes. + * \param llen The length of \p label in Bytes. + * \param ctx The \c Context argument to \c HKDF-Expand-Label. + * This must be a readable buffer of length \p clen Bytes. + * \param clen The length of \p context in Bytes. + * \param buf The destination buffer to hold the expanded secret. + * This must be a writable buffer of length \p blen Bytes. + * \param blen The desired size of the expanded secret in Bytes. + * + * \returns \c 0 on success. + * \return A negative error code on failure. + */ int mbedtls_ssl_tls1_3_hkdf_expand_label( mbedtls_md_type_t hash_alg, const unsigned char *secret, size_t slen, @@ -177,7 +206,18 @@ int mbedtls_ssl_tls1_3_hkdf_expand_label( buf, blen ) ); } -/* +/** + * \brief This function is part of the TLS 1.3 key schedule. + * It extracts key and IV for the actual client/server traffic + * from the client/server traffic secrets. + * + * From RFC 8446: + * + * + * [sender]_write_key = HKDF-Expand-Label(Secret, "key", "", key_length) + * [sender]_write_iv = HKDF-Expand-Label(Secret, "iv", "", iv_length)* + * + * * The traffic keying material is generated from the following inputs: * * - One secret value per sender. @@ -192,6 +232,22 @@ int mbedtls_ssl_tls1_3_hkdf_expand_label( * [sender] denotes the sending side and the Secret value is provided * by the function caller. Note that we generate server and client side * keys in a single function call. + * + * \param hash_alg The identifier for the hash algorithm to be used + * for the HKDF-based expansion of the secret. + * \param client_secret The client traffic secret. + * This must be a readable buffer of size \p slen Bytes + * \param server_secret The server traffic secret. + * This must be a readable buffer of size \p slen Bytes + * \param slen Length of the secrets \p client_secret and + * \p server_secret in Bytes. + * \param key_len The desired length of the key to be extracted in Bytes. + * \param iv_len The desired length of the IV to be extracted in Bytes. + * \param keys The address of the structure holding the generated + * keys and IVs. + * + * \returns \c 0 on success. + * \returns A negative error code on failure. */ int mbedtls_ssl_tls1_3_make_traffic_keys( mbedtls_md_type_t hash_alg, @@ -240,6 +296,43 @@ int mbedtls_ssl_tls1_3_make_traffic_keys( return( 0 ); } +/** + * \brief The \c Derive-Secret function from the TLS 1.3 standard RFC 8446. + * + * + * Derive-Secret( Secret, Label, Messages ) = + * HKDF-Expand-Label( Secret, Label, + * Hash( Messages ), + * Hash.Length ) ) + * + * + * \param hash_alg The identifier for the hash function used for the + * applications of HKDF. + * \param secret The \c Secret argument to the \c Derive-Secret function. + * This must be a readable buffer of length \p slen Bytes. + * \param slen The length of \p secret in Bytes. + * \param label The \c Label argument to the \c Derive-Secret function. + * This must be a readable buffer of length \p llen Bytes. + * \param llen The length of \p label in Bytes. + * \param ctx The hash of the \c Messages argument to the + * \c Derive-Secret function, or the \c Messages argument + * itself, depending on \p context_already_hashed. + * \param clen The length of \p hash. + * \param ctx_hashed This indicates whether the \p ctx contains the hash of + * the \c Messages argument in the application of the + * \c Derive-Secret function + * (value MBEDTLS_SSL_TLS1_3_CONTEXT_HASHED), or whether + * it is the content of \c Messages itself, in which case + * the function takes care of the hashing + * (value MBEDTLS_SSL_TLS1_3_CONTEXT_UNHASHED). + * \param dstbuf The target buffer to write the output of + * \c Derive-Secret to. This must be a writable buffer of + * size \p buflen Bytes. + * \param buflen The length of \p dstbuf in Bytes. + * + * \returns \c 0 on success. + * \returns A negative error code on failure. + */ int mbedtls_ssl_tls1_3_derive_secret( mbedtls_md_type_t hash_alg, const unsigned char *secret, size_t slen, @@ -284,6 +377,72 @@ int mbedtls_ssl_tls1_3_derive_secret( dstbuf, buflen ) ); } +/** + * \brief Compute the next secret in the TLS 1.3 key schedule + * + * The TLS 1.3 key schedule proceeds as follows to compute + * the three main secrets during the handshake: The early + * secret for early data, the handshake secret for all + * other encrypted handshake messages, and the master + * secret for all application traffic. + * + * + * 0 + * | + * v + * PSK -> HKDF-Extract = Early Secret + * | + * v + * Derive-Secret( ., "derived", "" ) + * | + * v + * (EC)DHE -> HKDF-Extract = Handshake Secret + * | + * v + * Derive-Secret( ., "derived", "" ) + * | + * v + * 0 -> HKDF-Extract = Master Secret + * + * + * Each of the three secrets in turn is the basis for further + * key derivations, such as the derivation of traffic keys and IVs; + * see e.g. mbedtls_ssl_tls1_3_make_traffic_keys(). + * + * This function implements one step in this evolution of secrets: + * + * + * old_secret + * | + * v + * Derive-Secret( ., "derived", "" ) + * | + * v + * input -> HKDF-Extract = new_secret + * + * + * \param hash_alg The identifier for the hash function used for the + * applications of HKDF. + * \param secret_old The address of the buffer holding the old secret + * on function entry. If not \c NULL, this must be a + * readable buffer whose size matches the output size + * of the hash function represented by \p hash_alg. + * If \c NULL, an all \c 0 array will be used instead. + * \param input The address of the buffer holding the additional + * input for the key derivation (e.g., the PSK or the + * ephemeral (EC)DH secret). If not \c NULL, this must be + * a readable buffer whose size \p input_len Bytes. + * If \c NULL, an all \c 0 array will be used instead. + * \param input_len The length of \p input in Bytes. + * \param secret_new The address of the buffer holding the new secret + * on function exit. This must be a writable buffer + * whose size matches the output size of the hash + * function represented by \p hash_alg. + * This may be the same as \p secret_old. + * + * \returns \c 0 on success. + * \returns A negative error code on failure. + */ int mbedtls_ssl_tls1_3_evolve_secret( mbedtls_md_type_t hash_alg, const unsigned char *secret_old, diff --git a/third_party/mbedtls/ssl_tls13_keys.h b/third_party/mbedtls/ssl_tls13_keys.h index 775a2c8cb..37069aa4f 100644 --- a/third_party/mbedtls/ssl_tls13_keys.h +++ b/third_party/mbedtls/ssl_tls13_keys.h @@ -1,78 +1,16 @@ -/* clang-format off */ -#include "third_party/mbedtls/ssl_internal.h" +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_SSL_TLS13_KEYS_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_SSL_TLS13_KEYS_H_ #include "third_party/mbedtls/md.h" +#include "third_party/mbedtls/ssl_internal.h" +COSMOPOLITAN_C_START_ -/* - * TLS 1.3 key schedule - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#if !defined(MBEDTLS_SSL_TLS1_3_KEYS_H) -#define MBEDTLS_SSL_TLS1_3_KEYS_H - -/* This requires MBEDTLS_SSL_TLS1_3_LABEL( idx, name, string ) to be defined at - * the point of use. See e.g. the definition of mbedtls_ssl_tls1_3_labels_union - * below. */ -#define MBEDTLS_SSL_TLS1_3_LABEL_LIST \ - MBEDTLS_SSL_TLS1_3_LABEL( finished , "finished" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( resumption , "resumption" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( traffic_upd , "traffic upd" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( exporter , "exporter" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( key , "key" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( iv , "iv" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( c_hs_traffic, "c hs traffic" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( c_ap_traffic, "c ap traffic" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( c_e_traffic , "c e traffic" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( s_hs_traffic, "s hs traffic" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( s_ap_traffic, "s ap traffic" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( s_e_traffic , "s e traffic" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( e_exp_master, "e exp master" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( res_master , "res master" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( exp_master , "exp master" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( ext_binder , "ext binder" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( res_binder , "res binder" ) \ - MBEDTLS_SSL_TLS1_3_LABEL( derived , "derived" ) - -#define MBEDTLS_SSL_TLS1_3_LABEL( name, string ) \ - const unsigned char name [ sizeof(string) - 1 ]; - -union mbedtls_ssl_tls1_3_labels_union -{ - MBEDTLS_SSL_TLS1_3_LABEL_LIST -}; -struct mbedtls_ssl_tls1_3_labels_struct -{ - MBEDTLS_SSL_TLS1_3_LABEL_LIST -}; -#undef MBEDTLS_SSL_TLS1_3_LABEL - -extern const struct mbedtls_ssl_tls1_3_labels_struct mbedtls_ssl_tls1_3_labels; - -#define MBEDTLS_SSL_TLS1_3_LBL_WITH_LEN( LABEL ) \ - mbedtls_ssl_tls1_3_labels.LABEL, \ - sizeof(mbedtls_ssl_tls1_3_labels.LABEL) - -#define MBEDTLS_SSL_TLS1_3_KEY_SCHEDULE_MAX_LABEL_LEN \ - sizeof( union mbedtls_ssl_tls1_3_labels_union ) +#define MBEDTLS_SSL_TLS1_3_CONTEXT_UNHASHED 0 +#define MBEDTLS_SSL_TLS1_3_CONTEXT_HASHED 1 /* The maximum length of HKDF contexts used in the TLS 1.3 standard. * Since contexts are always hashes of message transcripts, this can * be approximated from above by the maximum hash size. */ -#define MBEDTLS_SSL_TLS1_3_KEY_SCHEDULE_MAX_CONTEXT_LEN \ - MBEDTLS_MD_MAX_SIZE +#define MBEDTLS_SSL_TLS1_3_KEY_SCHEDULE_MAX_CONTEXT_LEN MBEDTLS_MD_MAX_SIZE /* Maximum desired length for expanded key material generated * by HKDF-Expand-Label. @@ -83,196 +21,63 @@ extern const struct mbedtls_ssl_tls1_3_labels_struct mbedtls_ssl_tls1_3_labels; * is never used with more than 255 Bytes of output. */ #define MBEDTLS_SSL_TLS1_3_KEY_SCHEDULE_MAX_EXPANSION_LEN 255 -/** - * \brief The \c HKDF-Expand-Label function from - * the TLS 1.3 standard RFC 8446. - * - * - * HKDF-Expand-Label( Secret, Label, Context, Length ) = - * HKDF-Expand( Secret, HkdfLabel, Length ) - * - * - * \param hash_alg The identifier for the hash algorithm to use. - * \param secret The \c Secret argument to \c HKDF-Expand-Label. - * This must be a readable buffer of length \p slen Bytes. - * \param slen The length of \p secret in Bytes. - * \param label The \c Label argument to \c HKDF-Expand-Label. - * This must be a readable buffer of length \p llen Bytes. - * \param llen The length of \p label in Bytes. - * \param ctx The \c Context argument to \c HKDF-Expand-Label. - * This must be a readable buffer of length \p clen Bytes. - * \param clen The length of \p context in Bytes. - * \param buf The destination buffer to hold the expanded secret. - * This must be a writable buffer of length \p blen Bytes. - * \param blen The desired size of the expanded secret in Bytes. - * - * \returns \c 0 on success. - * \return A negative error code on failure. - */ +/* This requires MBEDTLS_SSL_TLS1_3_LABEL( idx, name, string ) to be defined at + * the point of use. See e.g. the definition of mbedtls_ssl_tls1_3_labels_union + * below. */ +#define MBEDTLS_SSL_TLS1_3_LABEL_LIST \ + MBEDTLS_SSL_TLS1_3_LABEL(finished, "finished") \ + MBEDTLS_SSL_TLS1_3_LABEL(resumption, "resumption") \ + MBEDTLS_SSL_TLS1_3_LABEL(traffic_upd, "traffic upd") \ + MBEDTLS_SSL_TLS1_3_LABEL(exporter, "exporter") \ + MBEDTLS_SSL_TLS1_3_LABEL(key, "key") \ + MBEDTLS_SSL_TLS1_3_LABEL(iv, "iv") \ + MBEDTLS_SSL_TLS1_3_LABEL(c_hs_traffic, "c hs traffic") \ + MBEDTLS_SSL_TLS1_3_LABEL(c_ap_traffic, "c ap traffic") \ + MBEDTLS_SSL_TLS1_3_LABEL(c_e_traffic, "c e traffic") \ + MBEDTLS_SSL_TLS1_3_LABEL(s_hs_traffic, "s hs traffic") \ + MBEDTLS_SSL_TLS1_3_LABEL(s_ap_traffic, "s ap traffic") \ + MBEDTLS_SSL_TLS1_3_LABEL(s_e_traffic, "s e traffic") \ + MBEDTLS_SSL_TLS1_3_LABEL(e_exp_master, "e exp master") \ + MBEDTLS_SSL_TLS1_3_LABEL(res_master, "res master") \ + MBEDTLS_SSL_TLS1_3_LABEL(exp_master, "exp master") \ + MBEDTLS_SSL_TLS1_3_LABEL(ext_binder, "ext binder") \ + MBEDTLS_SSL_TLS1_3_LABEL(res_binder, "res binder") \ + MBEDTLS_SSL_TLS1_3_LABEL(derived, "derived") -int mbedtls_ssl_tls1_3_hkdf_expand_label( - mbedtls_md_type_t hash_alg, - const unsigned char *secret, size_t slen, - const unsigned char *label, size_t llen, - const unsigned char *ctx, size_t clen, - unsigned char *buf, size_t blen ); +#define MBEDTLS_SSL_TLS1_3_LBL_WITH_LEN(LABEL) \ + mbedtls_ssl_tls1_3_labels.LABEL, sizeof(mbedtls_ssl_tls1_3_labels.LABEL) -/** - * \brief This function is part of the TLS 1.3 key schedule. - * It extracts key and IV for the actual client/server traffic - * from the client/server traffic secrets. - * - * From RFC 8446: - * - * - * [sender]_write_key = HKDF-Expand-Label(Secret, "key", "", key_length) - * [sender]_write_iv = HKDF-Expand-Label(Secret, "iv", "", iv_length)* - * - * - * \param hash_alg The identifier for the hash algorithm to be used - * for the HKDF-based expansion of the secret. - * \param client_secret The client traffic secret. - * This must be a readable buffer of size \p slen Bytes - * \param server_secret The server traffic secret. - * This must be a readable buffer of size \p slen Bytes - * \param slen Length of the secrets \p client_secret and - * \p server_secret in Bytes. - * \param key_len The desired length of the key to be extracted in Bytes. - * \param iv_len The desired length of the IV to be extracted in Bytes. - * \param keys The address of the structure holding the generated - * keys and IVs. - * - * \returns \c 0 on success. - * \returns A negative error code on failure. - */ +#define MBEDTLS_SSL_TLS1_3_KEY_SCHEDULE_MAX_LABEL_LEN \ + sizeof(union mbedtls_ssl_tls1_3_labels_union) -int mbedtls_ssl_tls1_3_make_traffic_keys( - mbedtls_md_type_t hash_alg, - const unsigned char *client_secret, - const unsigned char *server_secret, - size_t slen, size_t key_len, size_t iv_len, - mbedtls_ssl_key_set *keys ); +#define MBEDTLS_SSL_TLS1_3_LABEL(name, string) \ + const unsigned char name[sizeof(string) - 1]; +union mbedtls_ssl_tls1_3_labels_union { + MBEDTLS_SSL_TLS1_3_LABEL_LIST +}; +struct mbedtls_ssl_tls1_3_labels_struct { + MBEDTLS_SSL_TLS1_3_LABEL_LIST +}; +#undef MBEDTLS_SSL_TLS1_3_LABEL +extern const struct mbedtls_ssl_tls1_3_labels_struct mbedtls_ssl_tls1_3_labels; -#define MBEDTLS_SSL_TLS1_3_CONTEXT_UNHASHED 0 -#define MBEDTLS_SSL_TLS1_3_CONTEXT_HASHED 1 +int mbedtls_ssl_tls1_3_hkdf_expand_label(mbedtls_md_type_t, + const unsigned char *, size_t, + const unsigned char *, size_t, + const unsigned char *, size_t, + unsigned char *, size_t); +int mbedtls_ssl_tls1_3_make_traffic_keys(mbedtls_md_type_t, + const unsigned char *, + const unsigned char *, size_t, size_t, + size_t, mbedtls_ssl_key_set *); +int mbedtls_ssl_tls1_3_derive_secret(mbedtls_md_type_t, const unsigned char *, + size_t, const unsigned char *, size_t, + const unsigned char *, size_t, int, + unsigned char *, size_t); +int mbedtls_ssl_tls1_3_evolve_secret(mbedtls_md_type_t, const unsigned char *, + const unsigned char *, size_t, + unsigned char *); -/** - * \brief The \c Derive-Secret function from the TLS 1.3 standard RFC 8446. - * - * - * Derive-Secret( Secret, Label, Messages ) = - * HKDF-Expand-Label( Secret, Label, - * Hash( Messages ), - * Hash.Length ) ) - * - * - * \param hash_alg The identifier for the hash function used for the - * applications of HKDF. - * \param secret The \c Secret argument to the \c Derive-Secret function. - * This must be a readable buffer of length \p slen Bytes. - * \param slen The length of \p secret in Bytes. - * \param label The \c Label argument to the \c Derive-Secret function. - * This must be a readable buffer of length \p llen Bytes. - * \param llen The length of \p label in Bytes. - * \param ctx The hash of the \c Messages argument to the - * \c Derive-Secret function, or the \c Messages argument - * itself, depending on \p context_already_hashed. - * \param clen The length of \p hash. - * \param ctx_hashed This indicates whether the \p ctx contains the hash of - * the \c Messages argument in the application of the - * \c Derive-Secret function - * (value MBEDTLS_SSL_TLS1_3_CONTEXT_HASHED), or whether - * it is the content of \c Messages itself, in which case - * the function takes care of the hashing - * (value MBEDTLS_SSL_TLS1_3_CONTEXT_UNHASHED). - * \param dstbuf The target buffer to write the output of - * \c Derive-Secret to. This must be a writable buffer of - * size \p buflen Bytes. - * \param buflen The length of \p dstbuf in Bytes. - * - * \returns \c 0 on success. - * \returns A negative error code on failure. - */ -int mbedtls_ssl_tls1_3_derive_secret( - mbedtls_md_type_t hash_alg, - const unsigned char *secret, size_t slen, - const unsigned char *label, size_t llen, - const unsigned char *ctx, size_t clen, - int ctx_hashed, - unsigned char *dstbuf, size_t buflen ); - -/** - * \brief Compute the next secret in the TLS 1.3 key schedule - * - * The TLS 1.3 key schedule proceeds as follows to compute - * the three main secrets during the handshake: The early - * secret for early data, the handshake secret for all - * other encrypted handshake messages, and the master - * secret for all application traffic. - * - * - * 0 - * | - * v - * PSK -> HKDF-Extract = Early Secret - * | - * v - * Derive-Secret( ., "derived", "" ) - * | - * v - * (EC)DHE -> HKDF-Extract = Handshake Secret - * | - * v - * Derive-Secret( ., "derived", "" ) - * | - * v - * 0 -> HKDF-Extract = Master Secret - * - * - * Each of the three secrets in turn is the basis for further - * key derivations, such as the derivation of traffic keys and IVs; - * see e.g. mbedtls_ssl_tls1_3_make_traffic_keys(). - * - * This function implements one step in this evolution of secrets: - * - * - * old_secret - * | - * v - * Derive-Secret( ., "derived", "" ) - * | - * v - * input -> HKDF-Extract = new_secret - * - * - * \param hash_alg The identifier for the hash function used for the - * applications of HKDF. - * \param secret_old The address of the buffer holding the old secret - * on function entry. If not \c NULL, this must be a - * readable buffer whose size matches the output size - * of the hash function represented by \p hash_alg. - * If \c NULL, an all \c 0 array will be used instead. - * \param input The address of the buffer holding the additional - * input for the key derivation (e.g., the PSK or the - * ephemeral (EC)DH secret). If not \c NULL, this must be - * a readable buffer whose size \p input_len Bytes. - * If \c NULL, an all \c 0 array will be used instead. - * \param input_len The length of \p input in Bytes. - * \param secret_new The address of the buffer holding the new secret - * on function exit. This must be a writable buffer - * whose size matches the output size of the hash - * function represented by \p hash_alg. - * This may be the same as \p secret_old. - * - * \returns \c 0 on success. - * \returns A negative error code on failure. - */ - -int mbedtls_ssl_tls1_3_evolve_secret( - mbedtls_md_type_t hash_alg, - const unsigned char *secret_old, - const unsigned char *input, size_t input_len, - unsigned char *secret_new ); - -#endif /* MBEDTLS_SSL_TLS1_3_KEYS_H */ +COSMOPOLITAN_C_END_ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_SSL_TLS13_KEYS_H_ */ diff --git a/third_party/mbedtls/test/data/.gitignore b/third_party/mbedtls/test/data/.gitignore new file mode 100644 index 000000000..d16c04c49 --- /dev/null +++ b/third_party/mbedtls/test/data/.gitignore @@ -0,0 +1,3 @@ +cli-rsa.csr +server2-rsa.csr +test-ca.csr diff --git a/third_party/mbedtls/test/data/Makefile b/third_party/mbedtls/test/data/Makefile new file mode 100644 index 000000000..0962898fe --- /dev/null +++ b/third_party/mbedtls/test/data/Makefile @@ -0,0 +1,1167 @@ +## This file contains a record of how some of the test data was +## generated. The final build products are committed to the repository +## as well to make sure that the test data is identical. You do not +## need to use this makefile unless you're extending mbed TLS's tests. + +## Many data files were generated prior to the existence of this +## makefile, so the method of their generation was not recorded. + +## Note that in addition to depending on the version of the data +## generation tool, many of the build outputs are randomized, so +## running this makefile twice would not produce the same results. + +## Tools +OPENSSL ?= openssl +FAKETIME ?= faketime + +TOP_DIR = ../.. +MBEDTLS_CERT_WRITE ?= $(TOP_DIR)/programs/x509/cert_write +MBEDTLS_CERT_REQ ?= $(TOP_DIR)/programs/x509/cert_req + + +## Build the generated test data. Note that since the final outputs +## are committed to the repository, this target should do nothing on a +## fresh checkout. Furthermore, since the generation is randomized, +## re-running the same targets may result in differing files. The goal +## of this makefile is primarily to serve as a record of how the +## targets were generated in the first place. +default: all_final + +all_intermediate := # temporary files +all_final := # files used by tests + + + +################################################################ +#### Generate certificates from existing keys +################################################################ + +test_ca_crt = test-ca.crt +test_ca_key_file_rsa = test-ca.key +test_ca_pwd_rsa = PolarSSLTest +test_ca_config_file = test-ca.opensslconf + +test-ca.req.sha256: $(test_ca_key_file_rsa) + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$(test_ca_key_file_rsa) password=$(test_ca_pwd_rsa) subject_name="C=NL,O=PolarSSL,CN=PolarSSL Test CA" md=SHA256 +all_intermediate += test-ca.req.sha256 + +test-ca.crt: $(test_ca_key_file_rsa) test-ca.req.sha256 + $(MBEDTLS_CERT_WRITE) is_ca=1 serial=3 request_file=test-ca.req.sha256 selfsign=1 issuer_name="C=NL,O=PolarSSL,CN=PolarSSL Test CA" issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144400 not_after=20290210144400 md=SHA1 version=3 output_file=$@ +all_final += test-ca.crt + +test-ca.crt.der: test-ca.crt + $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ +all_final += test-ca.crt.der + +test-ca.key.der: $(test_ca_key_file_rsa) + $(OPENSSL) pkey -in $< -out $@ -inform PEM -outform DER -passin "pass:$(test_ca_pwd_rsa)" +all_final += test-ca.key.der + +test-ca-sha1.crt: $(test_ca_key_file_rsa) test-ca.req.sha256 + $(MBEDTLS_CERT_WRITE) is_ca=1 serial=3 request_file=test-ca.req.sha256 selfsign=1 issuer_name="C=NL,O=PolarSSL,CN=PolarSSL Test CA" issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144400 not_after=20290210144400 md=SHA1 version=3 output_file=$@ +all_final += test-ca-sha1.crt + +test-ca-sha1.crt.der: test-ca-sha1.crt + $(OPENSSL) x509 -in $< -out $@ -inform PEM -outform DER +all_final += test-ca-sha1.crt.der + +test-ca-sha256.crt: $(test_ca_key_file_rsa) test-ca.req.sha256 + $(MBEDTLS_CERT_WRITE) is_ca=1 serial=3 request_file=test-ca.req.sha256 selfsign=1 issuer_name="C=NL,O=PolarSSL,CN=PolarSSL Test CA" issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144400 not_after=20290210144400 md=SHA256 version=3 output_file=$@ +all_final += test-ca-sha256.crt + +test-ca-sha256.crt.der: test-ca-sha256.crt + $(OPENSSL) x509 -in $< -out $@ -inform PEM -outform DER +all_final += test-ca-sha256.crt.der + +test-ca_utf8.crt: $(test_ca_key_file_rsa) + $(OPENSSL) req -x509 -new -nodes -key $(test_ca_key_file_rsa) -passin "pass:$(test_ca_pwd_rsa)" -set_serial 3 -config $(test_ca_config_file) -sha1 -days 3653 -utf8 -subj "/C=NL/O=PolarSSL/CN=PolarSSL Test CA" -out $@ +all_final += test-ca_utf8.crt + +test-ca_printable.crt: $(test_ca_key_file_rsa) + $(OPENSSL) req -x509 -new -nodes -key $(test_ca_key_file_rsa) -passin "pass:$(test_ca_pwd_rsa)" -set_serial 3 -config $(test_ca_config_file) -sha1 -days 3653 -subj "/C=NL/O=PolarSSL/CN=PolarSSL Test CA" -out $@ +all_final += test-ca_printable.crt + +test-ca_uppercase.crt: $(test_ca_key_file_rsa) + $(OPENSSL) req -x509 -new -nodes -key $(test_ca_key_file_rsa) -passin "pass:$(test_ca_pwd_rsa)" -set_serial 3 -config $(test_ca_config_file) -sha1 -days 3653 -subj "/C=NL/O=PolarSSL/CN=PolarSSL Test CA" -out $@ +all_final += test-ca_uppercase.crt + +test_ca_key_file_rsa_alt = test-ca-alt.key + +cert_example_multi.csr: rsa_pkcs1_1024_clear.pem + $(OPENSSL) req -new -subj "/C=NL/O=PolarSSL/CN=www.example.com" -set_serial 17 -config $(test_ca_config_file) -extensions dns_alt_names -days 3650 -key rsa_pkcs1_1024_clear.pem -out $@ + +cert_example_multi.crt: cert_example_multi.csr + $(OPENSSL) x509 -req -CA $(test_ca_crt) -CAkey $(test_ca_key_file_rsa) -extfile $(test_ca_config_file) -extensions dns_alt_names -passin "pass:$(test_ca_pwd_rsa)" -set_serial 17 -days 3653 -sha256 -in $< > $@ + +$(test_ca_key_file_rsa_alt):test-ca.opensslconf + $(OPENSSL) genrsa -out $@ 2048 +test-ca-alt.csr: $(test_ca_key_file_rsa_alt) $(test_ca_config_file) + $(OPENSSL) req -new -config $(test_ca_config_file) -key $(test_ca_key_file_rsa_alt) -subj "/C=NL/O=PolarSSL/CN=PolarSSL Test CA" -out $@ +all_intermediate += test-ca-alt.csr +test-ca-alt.crt: $(test_ca_key_file_rsa_alt) $(test_ca_config_file) test-ca-alt.csr + $(OPENSSL) req -x509 -config $(test_ca_config_file) -key $(test_ca_key_file_rsa_alt) -set_serial 0 -days 3653 -sha256 -in test-ca-alt.csr -out $@ +all_final += test-ca-alt.crt +test-ca-alt-good.crt: test-ca-alt.crt test-ca-sha256.crt + cat test-ca-alt.crt test-ca-sha256.crt > $@ +all_final += test-ca-alt-good.crt +test-ca-good-alt.crt: test-ca-alt.crt test-ca-sha256.crt + cat test-ca-sha256.crt test-ca-alt.crt > $@ +all_final += test-ca-good-alt.crt + +test_ca_crt_file_ec = test-ca2.crt +test_ca_key_file_ec = test-ca2.key + +test-ca2.req.sha256: $(test_ca_key_file_ec) + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$(test_ca_key_file_ec) subject_name="C=NL,O=PolarSSL,CN=Polarssl Test EC CA" md=SHA256 +all_intermediate += test-ca2.req.sha256 + +test-ca2.crt: $(test_ca_key_file_ec) test-ca2.req.sha256 + $(MBEDTLS_CERT_WRITE) is_ca=1 serial=13926223505202072808 request_file=test-ca2.req.sha256 selfsign=1 issuer_name="C=NL,O=PolarSSL,CN=Polarssl Test EC CA" issuer_key=$(test_ca_key_file_ec) not_before=20190210144400 not_after=20290210144400 md=SHA256 version=3 output_file=$@ +all_final += test-ca.crt + +test-ca-any_policy.crt: $(test_ca_key_file_rsa) test-ca.req.sha256 + $(OPENSSL) req -x509 -config $(test_ca_config_file) -extensions v3_any_policy_ca -key $(test_ca_key_file_rsa) -passin "pass:$(test_ca_pwd_rsa)" -set_serial 0 -days 3653 -sha256 -in test-ca.req.sha256 -out $@ +all_final += test-ca-any_policy.crt + +test-ca-any_policy_ec.crt: $(test_ca_key_file_ec) test-ca.req_ec.sha256 + $(OPENSSL) req -x509 -config $(test_ca_config_file) -extensions v3_any_policy_ca -key $(test_ca_key_file_ec) -set_serial 0 -days 3653 -sha256 -in test-ca.req_ec.sha256 -out $@ +all_final += test-ca-any_policy_ec.crt + +test-ca-any_policy_with_qualifier.crt: $(test_ca_key_file_rsa) test-ca.req.sha256 + $(OPENSSL) req -x509 -config $(test_ca_config_file) -extensions v3_any_policy_qualifier_ca -key $(test_ca_key_file_rsa) -passin "pass:$(test_ca_pwd_rsa)" -set_serial 0 -days 3653 -sha256 -in test-ca.req.sha256 -out $@ +all_final += test-ca-any_policy_with_qualifier.crt + +test-ca-any_policy_with_qualifier_ec.crt: $(test_ca_key_file_ec) test-ca.req_ec.sha256 + $(OPENSSL) req -x509 -config $(test_ca_config_file) -extensions v3_any_policy_qualifier_ca -key $(test_ca_key_file_ec) -set_serial 0 -days 3653 -sha256 -in test-ca.req_ec.sha256 -out $@ +all_final += test-ca-any_policy_with_qualifier_ec.crt + +test-ca-multi_policy.crt: $(test_ca_key_file_rsa) test-ca.req.sha256 + $(OPENSSL) req -x509 -config $(test_ca_config_file) -extensions v3_multi_policy_ca -key $(test_ca_key_file_rsa) -passin "pass:$(test_ca_pwd_rsa)" -set_serial 0 -days 3653 -sha256 -in test-ca.req.sha256 -out $@ +all_final += test-ca-multi_policy.crt + +test-ca-multi_policy_ec.crt: $(test_ca_key_file_ec) test-ca.req_ec.sha256 + $(OPENSSL) req -x509 -config $(test_ca_config_file) -extensions v3_multi_policy_ca -key $(test_ca_key_file_ec) -set_serial 0 -days 3653 -sha256 -in test-ca.req_ec.sha256 -out $@ +all_final += test-ca-multi_policy_ec.crt + +test-ca-unsupported_policy.crt: $(test_ca_key_file_rsa) test-ca.req.sha256 + $(OPENSSL) req -x509 -config $(test_ca_config_file) -extensions v3_unsupported_policy_ca -key $(test_ca_key_file_rsa) -passin "pass:$(test_ca_pwd_rsa)" -set_serial 0 -days 3653 -sha256 -in test-ca.req.sha256 -out $@ +all_final += test-ca-unsupported_policy.crt + +test-ca-unsupported_policy_ec.crt: $(test_ca_key_file_ec) test-ca.req_ec.sha256 + $(OPENSSL) req -x509 -config $(test_ca_config_file) -extensions v3_unsupported_policy_ca -key $(test_ca_key_file_ec) -set_serial 0 -days 3653 -sha256 -in test-ca.req_ec.sha256 -out $@ +all_final += test-ca-unsupported_policy_ec.crt + +test-ca.req_ec.sha256: $(test_ca_key_file_ec) + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$(test_ca_key_file_ec) subject_name="C=NL, O=PolarSSL, CN=Polarssl Test EC CA" md=SHA256 +all_intermediate += test-ca.req_ec.sha256 + +test-ca2.crt.der: $(test_ca_crt_file_ec) + $(OPENSSL) x509 -in $(test_ca_crt_file_ec) -out $@ -inform PEM -outform DER +all_final += test-ca2.crt.der + +test-ca2.key.der: $(test_ca_key_file_ec) + $(OPENSSL) pkey -in $(test_ca_key_file_ec) -out $@ -inform PEM -outform DER +all_final += test-ca2.key.der + +test_ca_crt_cat12 = test-ca_cat12.crt +$(test_ca_crt_cat12): $(test_ca_crt) $(test_ca_crt_file_ec) + cat $(test_ca_crt) $(test_ca_crt_file_ec) > $@ +all_final += $(test_ca_crt_cat12) + +test_ca_crt_cat21 = test-ca_cat21.crt +$(test_ca_crt_cat21): $(test_ca_crt) $(test_ca_crt_file_ec) + cat $(test_ca_crt_file_ec) $(test_ca_crt) > $@ +all_final += $(test_ca_crt_cat21) + +test-int-ca.csr: test-int-ca.key $(test_ca_config_file) + $(OPENSSL) req -new -config $(test_ca_config_file) -key test-int-ca.key -subj "/C=NL/O=PolarSSL/CN=PolarSSL Test Intermediate CA" -out $@ +all_intermediate += test-int-ca.csr +test-int-ca-exp.crt: $(test_ca_crt_file_ec) $(test_ca_key_file_ec) $(test_ca_config_file) test-int-ca.csr + $(FAKETIME) -f -3653d $(OPENSSL) x509 -req -extfile $(test_ca_config_file) -extensions v3_ca -CA $(test_ca_crt_file_ec) -CAkey $(test_ca_key_file_ec) -set_serial 14 -days 3653 -sha256 -in test-int-ca.csr -out $@ +all_final += test-int-ca-exp.crt + +enco-cert-utf8str.pem: rsa_pkcs1_1024_clear.pem + $(MBEDTLS_CERT_WRITE) subject_key=rsa_pkcs1_1024_clear.pem subject_name="CN=dw.yonan.net" issuer_crt=enco-ca-prstr.pem issuer_key=rsa_pkcs1_1024_clear.pem not_before=20190210144406 not_after=20290210144406 md=SHA1 version=3 output_file=$@ + +crl-idp.pem: $(test_ca_crt) $(test_ca_key_file_rsa) $(test_ca_config_file) + $(OPENSSL) ca -gencrl -batch -cert $(test_ca_crt) -keyfile $(test_ca_key_file_rsa) -key $(test_ca_pwd_rsa) -config $(test_ca_config_file) -name test_ca -md sha256 -crldays 3653 -crlexts crl_ext_idp -out $@ +all_final += crl-idp.pem +crl-idpnc.pem: $(test_ca_crt) $(test_ca_key_file_rsa) $(test_ca_config_file) + $(OPENSSL) ca -gencrl -batch -cert $(test_ca_crt) -keyfile $(test_ca_key_file_rsa) -key $(test_ca_pwd_rsa) -config $(test_ca_config_file) -name test_ca -md sha256 -crldays 3653 -crlexts crl_ext_idp_nc -out $@ +all_final += crl-idpnc.pem + +cli_crt_key_file_rsa = cli-rsa.key +cli_crt_extensions_file = cli.opensslconf + +cli-rsa.csr: $(cli_crt_key_file_rsa) + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< subject_name="C=NL,O=PolarSSL,CN=PolarSSL Client 2" md=SHA1 +all_intermediate += cli-rsa.csr + +cli-rsa-sha1.crt: cli-rsa.csr + $(MBEDTLS_CERT_WRITE) request_file=$< serial=4 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144406 not_after=20290210144406 md=SHA1 version=3 output_file=$@ + +cli-rsa-sha256.crt: cli-rsa.csr + $(MBEDTLS_CERT_WRITE) request_file=$< serial=4 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144406 not_after=20290210144406 md=SHA256 version=3 output_file=$@ +all_final += cli-rsa-sha256.crt + +cli-rsa-sha256.crt.der: cli-rsa-sha256.crt + $(OPENSSL) x509 -in $< -out $@ -inform PEM -outform DER +all_final += cli-rsa-sha256.crt.der + +cli-rsa-sha256-badalg.crt.der: cli-rsa-sha256.crt.der + hexdump -ve '1/1 "%.2X"' $< | sed "s/06092A864886F70D01010B0500/06092A864886F70D01010B0900/2" | xxd -r -p > $@ +all_final += cli-rsa-sha256-badalg.crt.der + +cli-rsa.key.der: $(cli_crt_key_file_rsa) + $(OPENSSL) pkey -in $< -out $@ -inform PEM -outform DER +all_final += cli-rsa.key.der + +test_ca_int_rsa1 = test-int-ca.crt + +server7.csr: server7.key + $(OPENSSL) req -new -key server7.key -subj "/C=NL/O=PolarSSL/CN=localhost" -out $@ +all_intermediate += server7.csr +server7-expired.crt: server7.csr $(test_ca_int_rsa1) + $(FAKETIME) -f -3653d $(OPENSSL) x509 -req -extfile $(cli_crt_extensions_file) -extensions cli-rsa -CA $(test_ca_int_rsa1) -CAkey test-int-ca.key -set_serial 16 -days 3653 -sha256 -in server7.csr | cat - $(test_ca_int_rsa1) > $@ +all_final += server7-expired.crt +server7-future.crt: server7.csr $(test_ca_int_rsa1) + $(FAKETIME) -f +3653d $(OPENSSL) x509 -req -extfile $(cli_crt_extensions_file) -extensions cli-rsa -CA $(test_ca_int_rsa1) -CAkey test-int-ca.key -set_serial 16 -days 3653 -sha256 -in server7.csr | cat - $(test_ca_int_rsa1) > $@ +all_final += server7-future.crt +server7-badsign.crt: server7.crt $(test_ca_int_rsa1) + { head -n-2 $<; tail -n-2 $< | sed -e '1s/0\(=*\)$$/_\1/' -e '1s/[^_=]\(=*\)$$/0\1/' -e '1s/_/1/'; cat $(test_ca_int_rsa1); } > $@ +all_final += server7-badsign.crt +server7_int-ca-exp.crt: server7.crt test-int-ca-exp.crt + cat server7.crt test-int-ca-exp.crt > $@ +all_final += server7_int-ca-exp.crt + +cli2.req.sha256: cli2.key + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< subject_name="C=NL,O=PolarSSL,CN=PolarSSL Test Client 2" md=SHA256 + +all_final += server1.req.sha1 +cli2.crt: cli2.req.sha256 + $(MBEDTLS_CERT_WRITE) request_file=cli2.req.sha256 serial=13 selfsign=0 issuer_name="C=NL,O=PolarSSL,CN=PolarSSL Test EC CA" issuer_key=$(test_ca_key_file_ec) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144400 not_after=20290210144400 md=SHA256 version=3 output_file=$@ +all_final += cli2.crt + +cli2.crt.der: cli2.crt + $(OPENSSL) x509 -in $< -out $@ -inform PEM -outform DER +all_final += cli2.crt.der + +cli2.key.der: cli2.key + $(OPENSSL) pkey -in $< -out $@ -inform PEM -outform DER +all_final += cli2.key.der + +server5_pwd_ec = PolarSSLTest + +server5.crt.der: server5.crt + $(OPENSSL) x509 -in $< -out $@ -inform PEM -outform DER +all_final += server5.crt.der + +server5.key.der: server5.key + $(OPENSSL) pkey -in $< -out $@ -inform PEM -outform DER +all_final += server5.key.der + +server5.key.enc: server5.key + $(OPENSSL) ec -aes256 -in $< -out $@ -passout "pass:$(server5_pwd_ec)" +all_final += server5.key.enc + +server5-ss-expired.crt: server5.key + $(FAKETIME) -f -3653d $(OPENSSL) req -x509 -new -subj "/C=UK/O=mbed TLS/OU=testsuite/CN=localhost" -days 3653 -sha256 -key $< -out $@ +all_final += server5-ss-expired.crt + +# try to forge a copy of test-int-ca3 with different key +server5-ss-forgeca.crt: server5.key + $(FAKETIME) '2015-09-01 14:08:43' $(OPENSSL) req -x509 -new -subj "/C=UK/O=mbed TLS/CN=mbed TLS Test intermediate CA 3" -set_serial 77 -config $(test_ca_config_file) -extensions noext_ca -days 3650 -sha256 -key $< -out $@ +all_final += server5-ss-forgeca.crt + +server5-othername.crt: server5.key + $(OPENSSL) req -x509 -new -subj "/C=UK/O=Mbed TLS/CN=Mbed TLS othername SAN" -set_serial 77 -config $(test_ca_config_file) -extensions othername_san -days 3650 -sha256 -key $< -out $@ + +server5-unsupported_othername.crt: server5.key + $(OPENSSL) req -x509 -new -subj "/C=UK/O=Mbed TLS/CN=Mbed TLS unsupported othername SAN" -set_serial 77 -config $(test_ca_config_file) -extensions unsupoported_othername_san -days 3650 -sha256 -key $< -out $@ + +server5-fan.crt: server5.key + $(OPENSSL) req -x509 -new -subj "/C=UK/O=Mbed TLS/CN=Mbed TLS FAN" -set_serial 77 -config $(test_ca_config_file) -extensions fan_cert -days 3650 -sha256 -key server5.key -out $@ + +server5-tricky-ip-san.crt: server5.key + $(OPENSSL) req -x509 -new -subj "/C=UK/O=Mbed TLS/CN=Mbed TLS Tricky IP SAN" -set_serial 77 -config $(test_ca_config_file) -extensions tricky_ip_san -days 3650 -sha256 -key server5.key -out $@ +all_final += server5-tricky-ip-san.crt + +server10-badsign.crt: server10.crt + { head -n-2 $<; tail -n-2 $< | sed -e '1s/0\(=*\)$$/_\1/' -e '1s/[^_=]\(=*\)$$/0\1/' -e '1s/_/1/'; } > $@ +all_final += server10-badsign.crt +server10-bs_int3.pem: server10-badsign.crt test-int-ca3.crt + cat server10-badsign.crt test-int-ca3.crt > $@ +all_final += server10-bs_int3.pem +test-int-ca3-badsign.crt: test-int-ca3.crt + { head -n-2 $<; tail -n-2 $< | sed -e '1s/0\(=*\)$$/_\1/' -e '1s/[^_=]\(=*\)$$/0\1/' -e '1s/_/1/'; } > $@ +all_final += test-int-ca3-badsign.crt +server10_int3-bs.pem: server10.crt test-int-ca3-badsign.crt + cat server10.crt test-int-ca3-badsign.crt > $@ +all_final += server10_int3-bs.pem + +rsa_pkcs1_2048_public.pem: server8.key + $(OPENSSL) rsa -in $< -outform PEM -RSAPublicKey_out -out $@ +all_final += rsa_pkcs1_2048_public.pem + +rsa_pkcs1_2048_public.der: rsa_pkcs1_2048_public.pem + $(OPENSSL) rsa -RSAPublicKey_in -in $< -outform DER -RSAPublicKey_out -out $@ +all_final += rsa_pkcs1_2048_public.der + +rsa_pkcs8_2048_public.pem: server8.key + $(OPENSSL) rsa -in $< -outform PEM -pubout -out $@ +all_final += rsa_pkcs8_2048_public.pem + +rsa_pkcs8_2048_public.der: rsa_pkcs8_2048_public.pem + $(OPENSSL) rsa -pubin -in $< -outform DER -pubout -out $@ +all_final += rsa_pkcs8_2048_public.der + +################################################################ +#### Generate various RSA keys +################################################################ + +### Password used for PKCS1-encoded encrypted RSA keys +keys_rsa_basic_pwd = testkey + +### Password used for PKCS8-encoded encrypted RSA keys +keys_rsa_pkcs8_pwd = PolarSSLTest + +### Basic 1024-, 2048- and 4096-bit unencrypted RSA keys from which +### all other encrypted RSA keys are derived. +rsa_pkcs1_1024_clear.pem: + $(OPENSSL) genrsa -out $@ 1024 +all_final += rsa_pkcs1_1024_clear.pem +rsa_pkcs1_2048_clear.pem: + $(OPENSSL) genrsa -out $@ 2048 +all_final += rsa_pkcs1_2048_clear.pem +rsa_pkcs1_4096_clear.pem: + $(OPENSSL) genrsa -out $@ 4096 +all_final += rsa_pkcs1_4096_clear.pem + +### +### PKCS1-encoded, encrypted RSA keys +### + +### 1024-bit +rsa_pkcs1_1024_des.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) rsa -des -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" +all_final += rsa_pkcs1_1024_des.pem +rsa_pkcs1_1024_3des.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) rsa -des3 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" +all_final += rsa_pkcs1_1024_3des.pem +rsa_pkcs1_1024_aes128.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) rsa -aes128 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" +all_final += rsa_pkcs1_1024_aes128.pem +rsa_pkcs1_1024_aes192.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) rsa -aes192 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" +all_final += rsa_pkcs1_1024_aes192.pem +rsa_pkcs1_1024_aes256.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) rsa -aes256 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" +all_final += rsa_pkcs1_1024_aes256.pem +keys_rsa_enc_basic_1024: rsa_pkcs1_1024_des.pem rsa_pkcs1_1024_3des.pem rsa_pkcs1_1024_aes128.pem rsa_pkcs1_1024_aes192.pem rsa_pkcs1_1024_aes256.pem + +# 2048-bit +rsa_pkcs1_2048_des.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) rsa -des -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" +all_final += rsa_pkcs1_2048_des.pem +rsa_pkcs1_2048_3des.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) rsa -des3 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" +all_final += rsa_pkcs1_2048_3des.pem +rsa_pkcs1_2048_aes128.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) rsa -aes128 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" +all_final += rsa_pkcs1_2048_aes128.pem +rsa_pkcs1_2048_aes192.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) rsa -aes192 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" +all_final += rsa_pkcs1_2048_aes192.pem +rsa_pkcs1_2048_aes256.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) rsa -aes256 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" +all_final += rsa_pkcs1_2048_aes256.pem +keys_rsa_enc_basic_2048: rsa_pkcs1_2048_des.pem rsa_pkcs1_2048_3des.pem rsa_pkcs1_2048_aes128.pem rsa_pkcs1_2048_aes192.pem rsa_pkcs1_2048_aes256.pem + +# 4096-bit +rsa_pkcs1_4096_des.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) rsa -des -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" +all_final += rsa_pkcs1_4096_des.pem +rsa_pkcs1_4096_3des.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) rsa -des3 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" +all_final += rsa_pkcs1_4096_3des.pem +rsa_pkcs1_4096_aes128.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) rsa -aes128 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" +all_final += rsa_pkcs1_4096_aes128.pem +rsa_pkcs1_4096_aes192.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) rsa -aes192 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" +all_final += rsa_pkcs1_4096_aes192.pem +rsa_pkcs1_4096_aes256.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) rsa -aes256 -in $< -out $@ -passout "pass:$(keys_rsa_basic_pwd)" +all_final += rsa_pkcs1_4096_aes256.pem +keys_rsa_enc_basic_4096: rsa_pkcs1_4096_des.pem rsa_pkcs1_4096_3des.pem rsa_pkcs1_4096_aes128.pem rsa_pkcs1_4096_aes192.pem rsa_pkcs1_4096_aes256.pem + +### +### PKCS8-v1 encoded, encrypted RSA keys +### + +### 1024-bit +rsa_pkcs8_pbe_sha1_1024_3des.der: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-3DES +all_final += rsa_pkcs8_pbe_sha1_1024_3des.der +rsa_pkcs8_pbe_sha1_1024_3des.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-3DES +all_final += rsa_pkcs8_pbe_sha1_1024_3des.pem +keys_rsa_enc_pkcs8_v1_1024_3des: rsa_pkcs8_pbe_sha1_1024_3des.pem rsa_pkcs8_pbe_sha1_1024_3des.der + +rsa_pkcs8_pbe_sha1_1024_2des.der: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-2DES +all_final += rsa_pkcs8_pbe_sha1_1024_2des.der +rsa_pkcs8_pbe_sha1_1024_2des.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-2DES +all_final += rsa_pkcs8_pbe_sha1_1024_2des.pem +keys_rsa_enc_pkcs8_v1_1024_2des: rsa_pkcs8_pbe_sha1_1024_2des.pem rsa_pkcs8_pbe_sha1_1024_2des.der + +rsa_pkcs8_pbe_sha1_1024_rc4_128.der: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-RC4-128 +all_final += rsa_pkcs8_pbe_sha1_1024_rc4_128.der +rsa_pkcs8_pbe_sha1_1024_rc4_128.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-RC4-128 +all_final += rsa_pkcs8_pbe_sha1_1024_rc4_128.pem +keys_rsa_enc_pkcs8_v1_1024_rc4_128: rsa_pkcs8_pbe_sha1_1024_rc4_128.pem rsa_pkcs8_pbe_sha1_1024_rc4_128.der + +keys_rsa_enc_pkcs8_v1_1024: keys_rsa_enc_pkcs8_v1_1024_3des keys_rsa_enc_pkcs8_v1_1024_2des keys_rsa_enc_pkcs8_v1_1024_rc4_128 + +### 2048-bit +rsa_pkcs8_pbe_sha1_2048_3des.der: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-3DES +all_final += rsa_pkcs8_pbe_sha1_2048_3des.der +rsa_pkcs8_pbe_sha1_2048_3des.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-3DES +all_final += rsa_pkcs8_pbe_sha1_2048_3des.pem +keys_rsa_enc_pkcs8_v1_2048_3des: rsa_pkcs8_pbe_sha1_2048_3des.pem rsa_pkcs8_pbe_sha1_2048_3des.der + +rsa_pkcs8_pbe_sha1_2048_2des.der: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-2DES +all_final += rsa_pkcs8_pbe_sha1_2048_2des.der +rsa_pkcs8_pbe_sha1_2048_2des.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-2DES +all_final += rsa_pkcs8_pbe_sha1_2048_2des.pem +keys_rsa_enc_pkcs8_v1_2048_2des: rsa_pkcs8_pbe_sha1_2048_2des.pem rsa_pkcs8_pbe_sha1_2048_2des.der + +rsa_pkcs8_pbe_sha1_2048_rc4_128.der: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-RC4-128 +all_final += rsa_pkcs8_pbe_sha1_2048_rc4_128.der +rsa_pkcs8_pbe_sha1_2048_rc4_128.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-RC4-128 +all_final += rsa_pkcs8_pbe_sha1_2048_rc4_128.pem +keys_rsa_enc_pkcs8_v1_2048_rc4_128: rsa_pkcs8_pbe_sha1_2048_rc4_128.pem rsa_pkcs8_pbe_sha1_2048_rc4_128.der + +keys_rsa_enc_pkcs8_v1_2048: keys_rsa_enc_pkcs8_v1_2048_3des keys_rsa_enc_pkcs8_v1_2048_2des keys_rsa_enc_pkcs8_v1_2048_rc4_128 + +### 4096-bit +rsa_pkcs8_pbe_sha1_4096_3des.der: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-3DES +all_final += rsa_pkcs8_pbe_sha1_4096_3des.der +rsa_pkcs8_pbe_sha1_4096_3des.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-3DES +all_final += rsa_pkcs8_pbe_sha1_4096_3des.pem +keys_rsa_enc_pkcs8_v1_4096_3des: rsa_pkcs8_pbe_sha1_4096_3des.pem rsa_pkcs8_pbe_sha1_4096_3des.der + +rsa_pkcs8_pbe_sha1_4096_2des.der: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-2DES +all_final += rsa_pkcs8_pbe_sha1_4096_2des.der +rsa_pkcs8_pbe_sha1_4096_2des.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-2DES +all_final += rsa_pkcs8_pbe_sha1_4096_2des.pem +keys_rsa_enc_pkcs8_v1_4096_2des: rsa_pkcs8_pbe_sha1_4096_2des.pem rsa_pkcs8_pbe_sha1_4096_2des.der + +rsa_pkcs8_pbe_sha1_4096_rc4_128.der: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-RC4-128 +all_final += rsa_pkcs8_pbe_sha1_4096_rc4_128.der +rsa_pkcs8_pbe_sha1_4096_rc4_128.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" -topk8 -v1 PBE-SHA1-RC4-128 +all_final += rsa_pkcs8_pbe_sha1_4096_rc4_128.pem +keys_rsa_enc_pkcs8_v1_4096_rc4_128: rsa_pkcs8_pbe_sha1_4096_rc4_128.pem rsa_pkcs8_pbe_sha1_4096_rc4_128.der + +keys_rsa_enc_pkcs8_v1_4096: keys_rsa_enc_pkcs8_v1_4096_3des keys_rsa_enc_pkcs8_v1_4096_2des keys_rsa_enc_pkcs8_v1_4096_rc4_128 + +### +### PKCS8-v2 encoded, encrypted RSA keys, no PRF specified (default for OpenSSL1.0: hmacWithSHA1) +### + +### 1024-bit +rsa_pkcs8_pbes2_pbkdf2_1024_3des.der: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des.der +rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem +keys_rsa_enc_pkcs8_v2_1024_3des: rsa_pkcs8_pbes2_pbkdf2_1024_3des.der rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem + +rsa_pkcs8_pbes2_pbkdf2_1024_des.der: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des.der +rsa_pkcs8_pbes2_pbkdf2_1024_des.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des.pem +keys_rsa_enc_pkcs8_v2_1024_des: rsa_pkcs8_pbes2_pbkdf2_1024_des.der rsa_pkcs8_pbes2_pbkdf2_1024_des.pem + +keys_rsa_enc_pkcs8_v2_1024: keys_rsa_enc_pkcs8_v2_1024_3des keys_rsa_enc_pkcs8_v2_1024_des + +### 2048-bit +rsa_pkcs8_pbes2_pbkdf2_2048_3des.der: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des.der +rsa_pkcs8_pbes2_pbkdf2_2048_3des.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des.pem +keys_rsa_enc_pkcs8_v2_2048_3des: rsa_pkcs8_pbes2_pbkdf2_2048_3des.der rsa_pkcs8_pbes2_pbkdf2_2048_3des.pem + +rsa_pkcs8_pbes2_pbkdf2_2048_des.der: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des.der +rsa_pkcs8_pbes2_pbkdf2_2048_des.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des.pem +keys_rsa_enc_pkcs8_v2_2048_des: rsa_pkcs8_pbes2_pbkdf2_2048_des.der rsa_pkcs8_pbes2_pbkdf2_2048_des.pem + +keys_rsa_enc_pkcs8_v2_2048: keys_rsa_enc_pkcs8_v2_2048_3des keys_rsa_enc_pkcs8_v2_2048_des + +### 4096-bit +rsa_pkcs8_pbes2_pbkdf2_4096_3des.der: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des.der +rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem +keys_rsa_enc_pkcs8_v2_4096_3des: rsa_pkcs8_pbes2_pbkdf2_4096_3des.der rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem + +rsa_pkcs8_pbes2_pbkdf2_4096_des.der: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des.der +rsa_pkcs8_pbes2_pbkdf2_4096_des.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des.pem +keys_rsa_enc_pkcs8_v2_4096_des: rsa_pkcs8_pbes2_pbkdf2_4096_des.der rsa_pkcs8_pbes2_pbkdf2_4096_des.pem + +keys_rsa_enc_pkcs8_v2_4096: keys_rsa_enc_pkcs8_v2_4096_3des keys_rsa_enc_pkcs8_v2_4096_des + +### +### PKCS8-v2 encoded, encrypted RSA keys, PRF hmacWithSHA224 +### + +### 1024-bit +rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA224 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der +rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA224 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem +keys_rsa_enc_pkcs8_v2_1024_3des_sha224: rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem + +rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA224 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der +rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA224 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem +keys_rsa_enc_pkcs8_v2_1024_des_sha224: rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem + +keys_rsa_enc_pkcs8_v2_1024_sha224: keys_rsa_enc_pkcs8_v2_1024_3des_sha224 keys_rsa_enc_pkcs8_v2_1024_des_sha224 + +### 2048-bit +rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA224 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der +rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA224 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem +keys_rsa_enc_pkcs8_v2_2048_3des_sha224: rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem + +rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA224 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der +rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA224 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem +keys_rsa_enc_pkcs8_v2_2048_des_sha224: rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem + +keys_rsa_enc_pkcs8_v2_2048_sha224: keys_rsa_enc_pkcs8_v2_2048_3des_sha224 keys_rsa_enc_pkcs8_v2_2048_des_sha224 + +### 4096-bit +rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA224 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der +rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA224 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem +keys_rsa_enc_pkcs8_v2_4096_3des_sha224: rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem + +rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA224 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der +rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA224 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem +keys_rsa_enc_pkcs8_v2_4096_des_sha224: rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem + +keys_rsa_enc_pkcs8_v2_4096_sha224: keys_rsa_enc_pkcs8_v2_4096_3des_sha224 keys_rsa_enc_pkcs8_v2_4096_des_sha224 + +### +### PKCS8-v2 encoded, encrypted RSA keys, PRF hmacWithSHA256 +### + +### 1024-bit +rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA256 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der +rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA256 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem +keys_rsa_enc_pkcs8_v2_1024_3des_sha256: rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem + +rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA256 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der +rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA256 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem +keys_rsa_enc_pkcs8_v2_1024_des_sha256: rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem + +keys_rsa_enc_pkcs8_v2_1024_sha256: keys_rsa_enc_pkcs8_v2_1024_3des_sha256 keys_rsa_enc_pkcs8_v2_1024_des_sha256 + +### 2048-bit +rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA256 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der +rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA256 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem +keys_rsa_enc_pkcs8_v2_2048_3des_sha256: rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem + +rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA256 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der +rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA256 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem +keys_rsa_enc_pkcs8_v2_2048_des_sha256: rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem + +keys_rsa_enc_pkcs8_v2_2048_sha256: keys_rsa_enc_pkcs8_v2_2048_3des_sha256 keys_rsa_enc_pkcs8_v2_2048_des_sha256 + +### 4096-bit +rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA256 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der +rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA256 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem +keys_rsa_enc_pkcs8_v2_4096_3des_sha256: rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem + +rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA256 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der +rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA256 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem +keys_rsa_enc_pkcs8_v2_4096_des_sha256: rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem + +keys_rsa_enc_pkcs8_v2_4096_sha256: keys_rsa_enc_pkcs8_v2_4096_3des_sha256 keys_rsa_enc_pkcs8_v2_4096_des_sha256 + +### +### PKCS8-v2 encoded, encrypted RSA keys, PRF hmacWithSHA384 +### + +### 1024-bit +rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA384 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der +rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA384 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem +keys_rsa_enc_pkcs8_v2_1024_3des_sha384: rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem + +rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA384 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der +rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA384 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem +keys_rsa_enc_pkcs8_v2_1024_des_sha384: rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem + +keys_rsa_enc_pkcs8_v2_1024_sha384: keys_rsa_enc_pkcs8_v2_1024_3des_sha384 keys_rsa_enc_pkcs8_v2_1024_des_sha384 + +### 2048-bit +rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA384 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der +rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA384 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem +keys_rsa_enc_pkcs8_v2_2048_3des_sha384: rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem + +rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA384 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der +rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA384 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem +keys_rsa_enc_pkcs8_v2_2048_des_sha384: rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem + +keys_rsa_enc_pkcs8_v2_2048_sha384: keys_rsa_enc_pkcs8_v2_2048_3des_sha384 keys_rsa_enc_pkcs8_v2_2048_des_sha384 + +### 4096-bit +rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA384 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der +rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA384 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem +keys_rsa_enc_pkcs8_v2_4096_3des_sha384: rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem + +rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA384 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der +rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA384 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem +keys_rsa_enc_pkcs8_v2_4096_des_sha384: rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem + +keys_rsa_enc_pkcs8_v2_4096_sha384: keys_rsa_enc_pkcs8_v2_4096_3des_sha384 keys_rsa_enc_pkcs8_v2_4096_des_sha384 + +### +### PKCS8-v2 encoded, encrypted RSA keys, PRF hmacWithSHA512 +### + +### 1024-bit +rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA512 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der +rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA512 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem +keys_rsa_enc_pkcs8_v2_1024_3des_sha512: rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem + +rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA512 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der +rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem: rsa_pkcs1_1024_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA512 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem +keys_rsa_enc_pkcs8_v2_1024_des_sha512: rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem + +keys_rsa_enc_pkcs8_v2_1024_sha512: keys_rsa_enc_pkcs8_v2_1024_3des_sha512 keys_rsa_enc_pkcs8_v2_1024_des_sha512 + +### 2048-bit +rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA512 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der +rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA512 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem +keys_rsa_enc_pkcs8_v2_2048_3des_sha512: rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem + +rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA512 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der +rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem: rsa_pkcs1_2048_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA512 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem +keys_rsa_enc_pkcs8_v2_2048_des_sha512: rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem + +keys_rsa_enc_pkcs8_v2_2048_sha512: keys_rsa_enc_pkcs8_v2_2048_3des_sha512 keys_rsa_enc_pkcs8_v2_2048_des_sha512 + +### 4096-bit +rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA512 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der +rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des3 -v2prf hmacWithSHA512 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem +keys_rsa_enc_pkcs8_v2_4096_3des_sha512: rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem + +rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA512 -inform PEM -in $< -outform DER -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der +rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem: rsa_pkcs1_4096_clear.pem + $(OPENSSL) pkcs8 -topk8 -v2 des -v2prf hmacWithSHA512 -inform PEM -in $< -outform PEM -out $@ -passout "pass:$(keys_rsa_pkcs8_pwd)" +all_final += rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem +keys_rsa_enc_pkcs8_v2_4096_des_sha512: rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem + +keys_rsa_enc_pkcs8_v2_4096_sha512: keys_rsa_enc_pkcs8_v2_4096_3des_sha512 keys_rsa_enc_pkcs8_v2_4096_des_sha512 + +### +### Rules to generate all RSA keys from a particular class +### + +### Generate basic unencrypted RSA keys +keys_rsa_unenc: rsa_pkcs1_1024_clear.pem rsa_pkcs1_2048_clear.pem rsa_pkcs1_4096_clear.pem + +### Generate PKCS1-encoded encrypted RSA keys +keys_rsa_enc_basic: keys_rsa_enc_basic_1024 keys_rsa_enc_basic_2048 keys_rsa_enc_basic_4096 + +### Generate PKCS8-v1 encrypted RSA keys +keys_rsa_enc_pkcs8_v1: keys_rsa_enc_pkcs8_v1_1024 keys_rsa_enc_pkcs8_v1_2048 keys_rsa_enc_pkcs8_v1_4096 + +### Generate PKCS8-v2 encrypted RSA keys +keys_rsa_enc_pkcs8_v2: keys_rsa_enc_pkcs8_v2_1024 keys_rsa_enc_pkcs8_v2_2048 keys_rsa_enc_pkcs8_v2_4096 keys_rsa_enc_pkcs8_v2_1024_sha224 keys_rsa_enc_pkcs8_v2_2048_sha224 keys_rsa_enc_pkcs8_v2_4096_sha224 keys_rsa_enc_pkcs8_v2_1024_sha256 keys_rsa_enc_pkcs8_v2_2048_sha256 keys_rsa_enc_pkcs8_v2_4096_sha256 keys_rsa_enc_pkcs8_v2_1024_sha384 keys_rsa_enc_pkcs8_v2_2048_sha384 keys_rsa_enc_pkcs8_v2_4096_sha384 keys_rsa_enc_pkcs8_v2_1024_sha512 keys_rsa_enc_pkcs8_v2_2048_sha512 keys_rsa_enc_pkcs8_v2_4096_sha512 + +### Generate all RSA keys +keys_rsa_all: keys_rsa_unenc keys_rsa_enc_basic keys_rsa_enc_pkcs8_v1 keys_rsa_enc_pkcs8_v2 + +################################################################ +#### Generate various EC keys +################################################################ + +### +### PKCS8 encoded +### + +ec_prv.pk8.der: + $(OPENSSL) genpkey -algorithm EC -pkeyopt ec_paramgen_curve:prime192v1 -pkeyopt ec_param_enc:named_curve -out $@ -outform DER +all_final += ec_prv.pk8.der + +# ### Instructions for creating `ec_prv.pk8nopub.der`, +# ### `ec_prv.pk8nopubparam.der`, and `ec_prv.pk8param.der` by hand from +# ### `ec_prv.pk8.der`. +# +# These instructions assume you are familiar with ASN.1 DER encoding and can +# use a hex editor to manipulate DER. +# +# The relevant ASN.1 definitions for a PKCS#8 encoded Elliptic Curve key are: +# +# PrivateKeyInfo ::= SEQUENCE { +# version Version, +# privateKeyAlgorithm PrivateKeyAlgorithmIdentifier, +# privateKey PrivateKey, +# attributes [0] IMPLICIT Attributes OPTIONAL +# } +# +# AlgorithmIdentifier ::= SEQUENCE { +# algorithm OBJECT IDENTIFIER, +# parameters ANY DEFINED BY algorithm OPTIONAL +# } +# +# ECParameters ::= CHOICE { +# namedCurve OBJECT IDENTIFIER +# -- implicitCurve NULL +# -- specifiedCurve SpecifiedECDomain +# } +# +# ECPrivateKey ::= SEQUENCE { +# version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), +# privateKey OCTET STRING, +# parameters [0] ECParameters {{ NamedCurve }} OPTIONAL, +# publicKey [1] BIT STRING OPTIONAL +# } +# +# `ec_prv.pk8.der` as generatde above by OpenSSL should have the following +# fields: +# +# * privateKeyAlgorithm namedCurve +# * privateKey.parameters NOT PRESENT +# * privateKey.publicKey PRESENT +# * attributes NOT PRESENT +# +# # ec_prv.pk8nopub.der +# +# Take `ec_prv.pk8.der` and remove `privateKey.publicKey`. +# +# # ec_prv.pk8nopubparam.der +# +# Take `ec_prv.pk8nopub.der` and add `privateKey.parameters`, the same value as +# `privateKeyAlgorithm.namedCurve`. Don't forget to add the explicit tag. +# +# # ec_prv.pk8param.der +# +# Take `ec_prv.pk8.der` and add `privateKey.parameters`, the same value as +# `privateKeyAlgorithm.namedCurve`. Don't forget to add the explicit tag. + +ec_prv.pk8.pem: ec_prv.pk8.der + $(OPENSSL) pkey -in $< -inform DER -out $@ +all_final += ec_prv.pk8.pem +ec_prv.pk8nopub.pem: ec_prv.pk8nopub.der + $(OPENSSL) pkey -in $< -inform DER -out $@ +all_final += ec_prv.pk8nopub.pem +ec_prv.pk8nopubparam.pem: ec_prv.pk8nopubparam.der + $(OPENSSL) pkey -in $< -inform DER -out $@ +all_final += ec_prv.pk8nopubparam.pem +ec_prv.pk8param.pem: ec_prv.pk8param.der + $(OPENSSL) pkey -in $< -inform DER -out $@ +all_final += ec_prv.pk8param.pem + +################################################################ +### Generate CSRs for X.509 write test suite +################################################################ + +server1.req.sha1: server1.key + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< subject_name="C=NL,O=PolarSSL,CN=PolarSSL Server 1" md=SHA1 +all_final += server1.req.sha1 + +server1.req.md4: server1.key + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< subject_name="C=NL,O=PolarSSL,CN=PolarSSL Server 1" md=MD4 +all_final += server1.req.md4 + +server1.req.md5: server1.key + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< subject_name="C=NL,O=PolarSSL,CN=PolarSSL Server 1" md=MD5 +all_final += server1.req.md5 + +server1.req.sha224: server1.key + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< subject_name="C=NL,O=PolarSSL,CN=PolarSSL Server 1" md=SHA224 +all_final += server1.req.sha224 + +server1.req.sha256: server1.key + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< subject_name="C=NL,O=PolarSSL,CN=PolarSSL Server 1" md=SHA256 +all_final += server1.req.sha256 + +server1.req.sha384: server1.key + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< subject_name="C=NL,O=PolarSSL,CN=PolarSSL Server 1" md=SHA384 +all_final += server1.req.sha384 + +server1.req.sha512: server1.key + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< subject_name="C=NL,O=PolarSSL,CN=PolarSSL Server 1" md=SHA512 +all_final += server1.req.sha512 + +server1.req.cert_type: server1.key + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< ns_cert_type=ssl_server subject_name="C=NL,O=PolarSSL,CN=PolarSSL Server 1" md=SHA1 +all_final += server1.req.cert_type + +server1.req.key_usage: server1.key + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< key_usage=digital_signature,non_repudiation,key_encipherment subject_name="C=NL,O=PolarSSL,CN=PolarSSL Server 1" md=SHA1 +all_final += server1.req.key_usage + +server1.req.ku-ct: server1.key + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< key_usage=digital_signature,non_repudiation,key_encipherment ns_cert_type=ssl_server subject_name="C=NL,O=PolarSSL,CN=PolarSSL Server 1" md=SHA1 +all_final += server1.req.ku-ct + +server1.req.key_usage_empty: server1.key + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< subject_name="C=NL,O=PolarSSL,CN=PolarSSL Server 1" md=SHA1 force_key_usage=1 +all_final += server1.req.key_usage_empty + +server1.req.cert_type_empty: server1.key + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< subject_name="C=NL,O=PolarSSL,CN=PolarSSL Server 1" md=SHA1 force_ns_cert_type=1 +all_final += server1.req.cert_type_empty + +# server2* + +server2_pwd_ec = PolarSSLTest + +server2.req.sha256: server2.key + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< subject_name="C=NL,O=PolarSSL,CN=localhost" md=SHA256 +all_intermediate += server2.req.sha256 + +server2.crt.der: server2.crt + $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ +all_final += server2.crt.der + +server2-sha256.crt.der: server2-sha256.crt + $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ +all_final += server2-sha256.crt.der + +server2.key.der: server2.key + $(OPENSSL) pkey -in $< -out $@ -inform PEM -outform DER +all_final += server2.key.der + +server2.key.enc: server2.key + $(OPENSSL) rsa -aes256 -in $< -out $@ -passout "pass:$(server2_pwd_ec)" +all_final += server2.key.enc + +# server5* + +# The use of 'Server 1' in the DN is intentional here, as the DN is hardcoded in the x509_write test suite.' +server5.req.ku.sha1: server5.key + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< key_usage=digital_signature,non_repudiation subject_name="C=NL,O=PolarSSL,CN=PolarSSL Server 1" md=SHA1 +all_final += server5.req.ku.sha1 + +################################################################ +### Generate certificates for CRT write check tests +################################################################ + +### The test files use the Mbed TLS generated certificates server1*.crt, +### but for comparison with OpenSSL also rules for OpenSSL-generated +### certificates server1*.crt.openssl are offered. +### +### Known differences: +### * OpenSSL encodes trailing zero-bits in bit-strings occurring in X.509 extension +### as unused bits, while Mbed TLS doesn't. + +test_ca_server1_db = test-ca.server1.db +test_ca_server1_serial = test-ca.server1.serial +test_ca_server1_config_file = test-ca.server1.opensslconf + +# server1* + +server1.crt: server1.key server1.req.sha256 $(test_ca_crt) $(test_ca_key_file_rsa) + $(MBEDTLS_CERT_WRITE) request_file=server1.req.sha256 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) version=1 not_before=20190210144406 not_after=20290210144406 md=SHA1 version=3 output_file=$@ +server1.noauthid.crt: server1.key server1.req.sha256 $(test_ca_crt) $(test_ca_key_file_rsa) + $(MBEDTLS_CERT_WRITE) request_file=server1.req.sha256 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144406 not_after=20290210144406 md=SHA1 authority_identifier=0 version=3 output_file=$@ +server1.crt.der: server1.crt + $(MBEDTLS_CERT_WRITE) request_file=server1.req.sha256 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144406 not_after=20290210144406 md=SHA1 authority_identifier=0 version=3 output_file=$@ +server1.der: server1.crt + $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ +all_final += server1.crt server1.noauthid.crt server1.crt.der + +server1.key_usage.crt: server1.key server1.req.sha256 $(test_ca_crt) $(test_ca_key_file_rsa) + $(MBEDTLS_CERT_WRITE) request_file=server1.req.sha256 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) version=1 not_before=20190210144406 not_after=20290210144406 md=SHA1 key_usage=digital_signature,non_repudiation,key_encipherment version=3 output_file=$@ +server1.key_usage_noauthid.crt: server1.key server1.req.sha256 $(test_ca_crt) $(test_ca_key_file_rsa) + $(MBEDTLS_CERT_WRITE) request_file=server1.req.sha256 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) version=1 not_before=20190210144406 not_after=20290210144406 md=SHA1 key_usage=digital_signature,non_repudiation,key_encipherment authority_identifier=0 version=3 output_file=$@ +server1.key_usage.der: server1.key_usage.crt + $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ +all_final += server1.key_usage.crt server1.key_usage_noauthid.crt server1.key_usage.der + +server1.cert_type.crt: server1.key server1.req.sha256 $(test_ca_crt) $(test_ca_key_file_rsa) + $(MBEDTLS_CERT_WRITE) request_file=server1.req.sha256 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) version=1 not_before=20190210144406 not_after=20290210144406 md=SHA1 ns_cert_type=ssl_server version=3 output_file=$@ +server1.cert_type_noauthid.crt: server1.key server1.req.sha256 $(test_ca_crt) $(test_ca_key_file_rsa) + $(MBEDTLS_CERT_WRITE) request_file=server1.req.sha256 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) version=1 not_before=20190210144406 not_after=20290210144406 md=SHA1 ns_cert_type=ssl_server authority_identifier=0 version=3 output_file=$@ +server1.cert_type.der: server1.cert_type.crt + $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ +all_final += server1.cert_type.crt server1.cert_type_noauthid.crt server1.cert_type.der + +server1.v1.crt: server1.key server1.req.sha256 $(test_ca_crt) $(test_ca_key_file_rsa) + $(MBEDTLS_CERT_WRITE) request_file=server1.req.sha256 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) version=1 not_before=20190210144406 not_after=20290210144406 md=SHA1 version=1 output_file=$@ +server1.v1.der: server1.v1.crt + $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ +all_final += server1.v1.crt server1.v1.der + +server1.ca.crt: server1.key server1.req.sha256 $(test_ca_crt) $(test_ca_key_file_rsa) + $(MBEDTLS_CERT_WRITE) request_file=server1.req.sha256 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) version=1 not_before=20190210144406 not_after=20290210144406 md=SHA1 is_ca=1 version=3 output_file=$@ +server1.ca_noauthid.crt: server1.key server1.req.sha256 $(test_ca_crt) $(test_ca_key_file_rsa) + $(MBEDTLS_CERT_WRITE) request_file=server1.req.sha256 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144406 not_after=20290210144406 md=SHA1 authority_identifier=0 is_ca=1 version=3 output_file=$@ +server1.ca.der: server1.ca.crt + $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ +all_final += server1.ca.crt server1.ca_noauthid.crt server1.ca.der + +server1_ca.crt: server1.crt $(test_ca_crt) + cat server1.crt $(test_ca_crt) > $@ +all_final += server1_ca.crt + +cert_sha1.crt: server1.key + $(MBEDTLS_CERT_WRITE) subject_key=server1.key subject_name="C=NL, O=PolarSSL, CN=PolarSSL Cert SHA1" serial=7 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144406 not_after=20290210144406 md=SHA1 version=3 output_file=$@ +all_final += cert_sha1.crt + +cert_sha224.crt: server1.key + $(MBEDTLS_CERT_WRITE) subject_key=server1.key subject_name="C=NL, O=PolarSSL, CN=PolarSSL Cert SHA224" serial=8 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144406 not_after=20290210144406 md=SHA224 version=3 output_file=$@ +all_final += cert_sha224.crt + +cert_sha256.crt: server1.key + $(MBEDTLS_CERT_WRITE) subject_key=server1.key subject_name="C=NL, O=PolarSSL, CN=PolarSSL Cert SHA256" serial=9 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144406 not_after=20290210144406 md=SHA256 version=3 output_file=$@ +all_final += cert_sha256.crt + +cert_sha384.crt: server1.key + $(MBEDTLS_CERT_WRITE) subject_key=server1.key subject_name="C=NL, O=PolarSSL, CN=PolarSSL Cert SHA384" serial=10 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144406 not_after=20290210144406 md=SHA384 version=3 output_file=$@ +all_final += cert_sha384.crt + +cert_sha512.crt: server1.key + $(MBEDTLS_CERT_WRITE) subject_key=server1.key subject_name="C=NL, O=PolarSSL, CN=PolarSSL Cert SHA512" serial=11 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144406 not_after=20290210144406 md=SHA512 version=3 output_file=$@ +all_final += cert_sha512.crt + +cert_example_wildcard.crt: server1.key + $(MBEDTLS_CERT_WRITE) subject_key=server1.key subject_name="C=NL, O=PolarSSL, CN=*.example.com" serial=12 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144406 not_after=20290210144406 md=SHA1 version=3 output_file=$@ +all_final += cert_example_wildcard.crt + +# OpenSSL-generated certificates for comparison +# Also provide certificates in DER format to allow +# direct binary comparison using e.g. dumpasn1 +server1.crt.openssl server1.key_usage.crt.openssl server1.cert_type.crt.openssl: server1.key server1.req.sha256 $(test_ca_crt) $(test_ca_key_file_rsa) $(test_ca_server1_config_file) + echo "01" > $(test_ca_server1_serial) + rm -f $(test_ca_server1_db) + touch $(test_ca_server1_db) + $(OPENSSL) ca -batch -passin "pass:$(test_ca_pwd_rsa)" -config $(test_ca_server1_config_file) -in server1.req.sha256 -extensions v3_ext -extfile $@.v3_ext -out $@ +server1.der.openssl: server1.crt.openssl + $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ +server1.key_usage.der.openssl: server1.key_usage.crt.openssl + $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ +server1.cert_type.der.openssl: server1.cert_type.crt.openssl + $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ + +server1.v1.crt.openssl: server1.key server1.req.sha256 $(test_ca_crt) $(test_ca_key_file_rsa) $(test_ca_server1_config_file) + echo "01" > $(test_ca_server1_serial) + rm -f $(test_ca_server1_db) + touch $(test_ca_server1_db) + $(OPENSSL) ca -batch -passin "pass:$(test_ca_pwd_rsa)" -config $(test_ca_server1_config_file) -in server1.req.sha256 -out $@ +server1.v1.der.openssl: server1.v1.crt.openssl + $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ + +# To revoke certificate in the openssl database: +# +# $(OPENSSL) ca -gencrl -batch -cert $(test_ca_crt) -keyfile $(test_ca_key_file_rsa) -key $(test_ca_pwd_rsa) -config $(test_ca_server1_config_file) -md sha256 -crldays 365 -revoke server1.crt + +crl.pem: $(test_ca_crt) $(test_ca_key_file_rsa) $(test_ca_config_file) + $(OPENSSL) ca -gencrl -batch -cert $(test_ca_crt) -keyfile $(test_ca_key_file_rsa) -key $(test_ca_pwd_rsa) -config $(test_ca_server1_config_file) -md sha1 -crldays 3653 -out $@ + +crl-futureRevocationDate.pem: $(test_ca_crt) $(test_ca_key_file_rsa) $(test_ca_config_file) test-ca.server1.future-crl.db test-ca.server1.future-crl.opensslconf + $(FAKETIME) '2028-12-31' $(OPENSSL) ca -gencrl -config test-ca.server1.future-crl.opensslconf -crldays 365 -passin "pass:$(test_ca_pwd_rsa)" -out $@ + +server1_all: crl.pem crl-futureRevocationDate.pem server1.crt server1.noauthid.crt server1.crt.openssl server1.v1.crt server1.v1.crt.openssl server1.key_usage.crt server1.key_usage_noauthid.crt server1.key_usage.crt.openssl server1.cert_type.crt server1.cert_type_noauthid.crt server1.cert_type.crt.openssl server1.der server1.der.openssl server1.v1.der server1.v1.der.openssl server1.key_usage.der server1.key_usage.der.openssl server1.cert_type.der server1.cert_type.der.openssl + +# server2* + +server2.crt: server2.req.sha256 + $(MBEDTLS_CERT_WRITE) request_file=server2.req.sha256 serial=2 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144406 not_after=20290210144406 md=SHA1 version=3 output_file=$@ +all_final += server2.crt + +server2.der: server2.crt + $(OPENSSL) x509 -inform PEM -in $< -outform DER -out $@ +all_final += server2.crt server2.der + +server2-sha256.crt: server2.req.sha256 + $(MBEDTLS_CERT_WRITE) request_file=server2.req.sha256 serial=2 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20190210144406 not_after=20290210144406 md=SHA256 version=3 output_file=$@ +all_final += server2-sha256.crt + +# MD2, MD4, MD5 test certificates + +cert_md_test_key = $(cli_crt_key_file_rsa) + +cert_md2.csr: $(cert_md_test_key) + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< subject_name="C=NL,O=PolarSSL,CN=PolarSSL Cert MD2" md=MD2 +all_intermediate += cert_md2.csr + +cert_md2.crt: cert_md2.csr + $(MBEDTLS_CERT_WRITE) request_file=$< serial=9 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20000101121212 not_after=20300101121212 md=MD2 version=3 output_file=$@ +all_final += cert_md2.crt + +cert_md4.csr: $(cert_md_test_key) + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< subject_name="C=NL,O=PolarSSL,CN=PolarSSL Cert MD4" md=MD4 +all_intermediate += cert_md4.csr + +cert_md4.crt: cert_md4.csr + $(MBEDTLS_CERT_WRITE) request_file=$< serial=5 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20000101121212 not_after=20300101121212 md=MD4 version=3 output_file=$@ +all_final += cert_md4.crt + +cert_md5.csr: $(cert_md_test_key) + $(MBEDTLS_CERT_REQ) output_file=$@ filename=$< subject_name="C=NL,O=PolarSSL,CN=PolarSSL Cert MD5" md=MD5 +all_intermediate += cert_md5.csr + +cert_md5.crt: cert_md5.csr + $(MBEDTLS_CERT_WRITE) request_file=$< serial=6 issuer_crt=$(test_ca_crt) issuer_key=$(test_ca_key_file_rsa) issuer_pwd=$(test_ca_pwd_rsa) not_before=20000101121212 not_after=20300101121212 md=MD5 version=3 output_file=$@ +all_final += cert_md5.crt + +################################################################ +#### Meta targets +################################################################ + +all_final: $(all_final) +all: $(all_intermediate) $(all_final) + +.PHONY: default all_final all +.PHONY: keys_rsa_all +.PHONY: keys_rsa_unenc keys_rsa_enc_basic +.PHONY: keys_rsa_enc_pkcs8_v1 keys_rsa_enc_pkcs8_v2 +.PHONY: keys_rsa_enc_basic_1024 keys_rsa_enc_basic_2048 keys_rsa_enc_basic_4096 +.PHONY: keys_rsa_enc_pkcs8_v1_1024 keys_rsa_enc_pkcs8_v2_1024 +.PHONY: keys_rsa_enc_pkcs8_v1_2048 keys_rsa_enc_pkcs8_v2_2048 +.PHONY: keys_rsa_enc_pkcs8_v1_4096 keys_rsa_enc_pkcs8_v2_4096 +.PHONY: server1_all + +# These files should not be committed to the repository. +list_intermediate: + @printf '%s\n' $(all_intermediate) | sort +# These files should be committed to the repository so that the test data is +# available upon checkout without running a randomized process depending on +# third-party tools. +list_final: + @printf '%s\n' $(all_final) | sort +.PHONY: list_intermediate list_final + +## Remove intermediate files +clean: + rm -f $(all_intermediate) +## Remove all build products, even the ones that are committed +neat: clean + rm -f $(all_final) +.PHONY: clean neat diff --git a/third_party/mbedtls/test/data/Readme-x509.txt b/third_party/mbedtls/test/data/Readme-x509.txt new file mode 100644 index 000000000..d07241a2c --- /dev/null +++ b/third_party/mbedtls/test/data/Readme-x509.txt @@ -0,0 +1,131 @@ +This documents the X.509 CAs, certificates, and CRLS used for testing. + +Certification authorities +------------------------- + +There are two main CAs for use as trusted roots: +- test-ca.crt aka "C=NL, O=PolarSSL, CN=PolarSSL Test CA" + uses a RSA-2048 key + test-ca-sha1.crt and test-ca-sha256.crt use the same key, signed with + different hashes. +- test-ca2*.crt aka "C=NL, O=PolarSSL, CN=Polarssl Test EC CA" + uses an EC key with NIST P-384 (aka secp384r1) + variants used to test the keyUsage extension +The files test-ca_cat12 and test-ca_cat21 contain them concatenated both ways. + +Two intermediate CAs are signed by them: +- test-int-ca.crt "C=NL, O=PolarSSL, CN=PolarSSL Test Intermediate CA" + uses RSA-4096, signed by test-ca2 + - test-int-ca-exp.crt is a copy that is expired +- test-int-ca2.crt "C=NL, O=PolarSSL, CN=PolarSSL Test Intermediate EC CA" + uses an EC key with NIST P-384, signed by test-ca + +A third intermediate CA is signed by test-int-ca2.crt: +- test-int-ca3.crt "C=UK, O=mbed TLS, CN=mbed TLS Test intermediate CA 3" + uses an EC key with NIST P-256, signed by test-int-ca2 + +Finally, other CAs for specific purposes: +- enco-ca-prstr.pem: has its CN encoded as a printable string, but child cert + enco-cert-utf8str.pem has its issuer's CN encoded as a UTF-8 string. +- test-ca-v1.crt: v1 "CA", signs + server1-v1.crt: v1 "intermediate CA", signs + server2-v1*.crt: EE cert (without of with chain in same file) +- keyUsage.decipherOnly.crt: has the decipherOnly keyUsage bit set + +End-entity certificates +----------------------- + +Short information fields: + +- name or pattern +- issuing CA: 1 -> test-ca.crt + 2 -> test-ca2.crt + I1 -> test-int-ca.crt + I2 -> test-int-ca2.crt + I3 -> test-int-ca3.crt + O -> other +- key type: R -> RSA, E -> EC +- C -> there is a CRL revoking this cert (see below) +- L -> CN=localhost (useful for local test servers) +- P1, P2 if the file includes parent (resp. parent + grandparent) +- free-form comments + +List of certificates: + +- cert_example_multi*.crt: 1/O R: subjectAltName +- cert_example_wildcard.crt: 1 R: wildcard in subject's CN +- cert_md*.crt, cert_sha*.crt: 1 R: signature hash +- cert_v1_with_ext.crt: 1 R: v1 with extensions (illegal) +- cli2.crt: 2 E: basic +- cli-rsa.key, cli-rsa-*.crt: RSA key used for test clients, signed by + the RSA test CA. +- enco-cert-utf8str.pem: see enco-ca-prstr.pem above +- server1*.crt: 1* R C* P1*: misc *(server1-v1 see test-ca-v1.crt above) + *CRL for: .cert_type.crt, .crt, .key_usage.crt, .v1.crt + P1 only for _ca.crt +- server2-v1*.crt: O R: see test-ca-v1.crt above +- server2*.crt: 1 R L: misc +- server3.crt: 1 E L: EC cert signed by RSA CA +- server4.crt: 2 R L: RSA cert signed by EC CA +- server5*.crt: 2* E L: misc *(except -selfsigned and -ss-*) + -sha*: hashes + .eku*: extendeKeyUsage (cli/srv = www client/server, cs = codesign, etc) + .ku*: keyUsage (ds = signatures, ke/ka = key exchange/agreement) + .req*: CSR, not certificate + -der*: trailing bytes in der (?) + -badsign.crt: S5 with corrupted signature + -expired.crt: S5 with "not after" date in the past + -future.crt: S5 with "not before" date in the future + -selfsigned.crt: Self-signed cert with S5 key + -ss-expired.crt: Self-signed cert with S5 key, expired + -ss-forgeca.crt: Copy of test-int-ca3 self-signed with S5 key +- server6-ss-child.crt: O E: "child" of non-CA server5-selfsigned +- server6.crt, server6.pem: 2 E L C: revoked +- server7.crt: I1 E L P1(usually): EC signed by RSA signed by EC + -badsign.crt: S7 with corrupted signature + I1 + -expired.crt: S7 with "not after" date in the past + I1 + -future.crt: S7 with "not before" date in the future + I1 + _int-ca-exp.crt: S7 + expired I1 + _int-ca.crt: S7 + I1 + _int-ca_ca2.crt: S7 + I1 + 2 + _all_space.crt: S7 + I1 both with misplaced spaces (invalid PEM) + _pem_space.crt: S7 with misplace space (invalid PEM) + I1 + _trailing_space.crt: S7 + I1 both with trainling space (valid PEM) + _spurious_int-ca.crt: S7 + I2(spurious) + I1 +- server8*.crt: I2 R L: RSA signed by EC signed by RSA (P1 for _int-ca2) +- server9*.crt: 1 R C* L P1*: signed using RSASSA-PSS + *CRL for: 9.crt, -badsign, -with-ca (P1) +- server10.crt: I3 E L + -badsign.crt: S10 with corrupted signature + -bs_int3.pem: S10-badsign + I3 + _int3-bs.pem: S10 + I3-badsign + _int3_int-ca2.crt: S10 + I3 + I2 + _int3_int-ca2_ca.crt: S10 + I3 + I2 + 1 + _int3_spurious_int-ca2.crt: S10 + I3 + I1(spurious) + I2 + +Certificate revocation lists +---------------------------- + +Signing CA in parentheses (same meaning as certificates). + +- crl-ec-sha*.pem: (2) server6.crt +- crl-future.pem: (2) server6.crt + unknown +- crl-rsa-pss-*.pem: (1) server9{,badsign,with-ca}.crt + cert_sha384.crt + unknown +- crl.pem, crl-futureRevocationDate.pem, crl_expired.pem: (1) server1{,.cert_type,.key_usage,.v1}.crt + unknown +- crl_md*.pem: crl_sha*.pem: (1) same as crl.pem +- crt_cat_*.pem: (1+2) concatenations in various orders: + ec = crl-ec-sha256.pem, ecfut = crl-future.pem + rsa = crl.pem, rsabadpem = same with pem error, rsaexp = crl_expired.pem + +Note: crl_future would revoke server9 and cert_sha384.crt if signed by CA 1 + crl-rsa-pss* would revoke server6.crt if signed by CA 2 + +Generation +---------- + +Newer test files have been generated through commands in the Makefile. The +resulting files are committed to the repository so that the tests can +run without having to re-do the generation and so that the output is the +same for everyone (the generation process is randomized). + +The origin of older certificates has not been recorded. diff --git a/third_party/mbedtls/test/data/base64/cli_cid.txt b/third_party/mbedtls/test/data/base64/cli_cid.txt new file mode 100644 index 000000000..8048aecb2 --- /dev/null +++ b/third_party/mbedtls/test/data/base64/cli_cid.txt @@ -0,0 +1,2 @@ +// Client, CID 0xBEEF +AhUAAH8AAA8AAAQ8AAAAAF6MZUPMqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABh7h8/aprLN1fS0KwLkZzKcsa5LNtDW7sYu7d1z7fNetuRjLJpX/A1mTSqeBY7li8AAAAAAAM7MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcNMTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTNowCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKzNtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kMtQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8PhYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjyaHT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYDVR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgwFoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQELBQADggEBAC465FJhPqel7zJngHIHJrqj/wVAxGAFOTF396XKATGAp+HRCqJ81Ry60CNK1jDzk8dv6M6UHoS7RIFiM/9rXQCbJfiPD5xMTejZp5n5UYHAmxsxDaazfA5FuBhkfokKK6jD4Eq91C94xGKb6X4/VkaPF7cqoBBw/bHxawXc0UEPjqayiBpCYU/rJoVZgLqFVP7Px3sva1nOrNx8rPPI1hJ+ZOg8maiPTxHZnBVLakSSLQy/sWeWyazO1RnrbxjrbgQtYKz0e3nwGpu1w13vfckFmUSBhHXH7AAS/HpKC4IH7G2GAk3+n8iSSN71sZzpxonQwVbopMZqLmbBm/7WPLcAAJRZtK1pHRuu/Uw+Y91KCaqMAHKWeVJvuqjiTaElrahsx+HYoZ1+8i5BMY1NOL/y4TR9qZdxY+7NvNrEdEoFgcI/DqUN0aKs0zAIPmk92pFnjnbro5LxWRm3JbtIFcG6PdN+9aAbISrewt6EERIPhS45aH+Si08NLrvM+CcEBfqBBqOD+4LCZqT8nDBtALJyRqiykibsAAFRgAAAAF6MZUNak74BhbcgvZ2M8WhZKjQyCix7GJzRs4SqnD7iXoxlQ7YXjsVI0K/xyMOJPkT9ZcPEi/2jHGIte1ZduW4Cvu8C3q0AAAAAAAAAAAAAAAIAAAAAAAAABwAAAQAAAAAAAwAAAA== diff --git a/third_party/mbedtls/test/data/base64/cli_ciphersuite.txt b/third_party/mbedtls/test/data/base64/cli_ciphersuite.txt new file mode 100644 index 000000000..bf3647085 --- /dev/null +++ b/third_party/mbedtls/test/data/base64/cli_ciphersuite.txt @@ -0,0 +1,2 @@ +// TLS-RSA-WITH-AES-256-CCM-8 +AhUAAH8AAA4AAAQ8AAAAAF6K4ynAoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLBIQUrrPh7jxYz9e55cJvfpOkuBf2ZiVovlYa1Dkwbimp5q/CoWIn48C0x3Yj6N0AAAAAAAM7MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcNMTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTNowCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKzNtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kMtQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8PhYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjyaHT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYDVR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgwFoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQELBQADggEBAC465FJhPqel7zJngHIHJrqj/wVAxGAFOTF396XKATGAp+HRCqJ81Ry60CNK1jDzk8dv6M6UHoS7RIFiM/9rXQCbJfiPD5xMTejZp5n5UYHAmxsxDaazfA5FuBhkfokKK6jD4Eq91C94xGKb6X4/VkaPF7cqoBBw/bHxawXc0UEPjqayiBpCYU/rJoVZgLqFVP7Px3sva1nOrNx8rPPI1hJ+ZOg8maiPTxHZnBVLakSSLQy/sWeWyazO1RnrbxjrbgQtYKz0e3nwGpu1w13vfckFmUSBhHXH7AAS/HpKC4IH7G2GAk3+n8iSSN71sZzpxonQwVbopMZqLmbBm/7WPLcAAJQBiQTa148x1XQyGt9vU2JxAHIZ9HxLR87PewpTaslP0qJ4FK6cibG/U4ACVriGQMpNkJo6xRRn5dGyKE5L5iqcLQZ4zwcJT50NYlVQqzlXPArOaAzjVAX4k+TwL/VmNepmn3wvregAADeiGsvvbaAw2P9fhCgwX6Bm0YNzkWQsNwWENa6GoZLzvMM51G44611fFnKoAAFRgAAAAF6K4yksMvMV19qRq+eNokGn0j9Q5tjE88EK8jfM7gksXorjKR6zhXhttFGIFkNNAmmKuuDQGVmX1yCoHiJFonUAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAQAAAAAAAgAAAA== diff --git a/third_party/mbedtls/test/data/base64/cli_def.txt b/third_party/mbedtls/test/data/base64/cli_def.txt new file mode 100644 index 000000000..793da2b5b --- /dev/null +++ b/third_party/mbedtls/test/data/base64/cli_def.txt @@ -0,0 +1,2 @@ +// Client context with default MbedTLS configuration +AhUAAH8AAA4AAAQ8AAAAAF6HQx3MqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACG2QbHbUj8eGpdx5KVIebiwk0jvRj9/3m6BOSzpA7qBXeEunhqr3D11NE7ciGjeHMAAAAAAAM7MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcNMTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTNowCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKzNtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kMtQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8PhYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjyaHT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYDVR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgwFoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQELBQADggEBAC465FJhPqel7zJngHIHJrqj/wVAxGAFOTF396XKATGAp+HRCqJ81Ry60CNK1jDzk8dv6M6UHoS7RIFiM/9rXQCbJfiPD5xMTejZp5n5UYHAmxsxDaazfA5FuBhkfokKK6jD4Eq91C94xGKb6X4/VkaPF7cqoBBw/bHxawXc0UEPjqayiBpCYU/rJoVZgLqFVP7Px3sva1nOrNx8rPPI1hJ+ZOg8maiPTxHZnBVLakSSLQy/sWeWyazO1RnrbxjrbgQtYKz0e3nwGpu1w13vfckFmUSBhHXH7AAS/HpKC4IH7G2GAk3+n8iSSN71sZzpxonQwVbopMZqLmbBm/7WPLcAAJTfQC2Ek91INP5ihHNzImPOAHJCk+YTO/pQuEnNWwXbdmKAi+IRp671iAwtpkjSxCBXVzKX925F1A66caCOQptlw+9zFukDQgblM2JyAJLG0j6B4RtBTDWJ8ZTMUPHUoLJoEpm8APZgRi//DMRyCKP9pbBLGlDzgUvl0w11LzBAlJHkWau5NoqQBlG7w4HFrKweovskAAFRgAAAAF6HQx248L77RH0Z973tSYNQ8zBsz861CZG5/T09TJz3XodDHe/iJ+cgXb5An3zTdnTBtw3EWAb68T+gCE33GN8AAAAAAAAAAAAAAAEAAAAAAAAAAwAAAQAAAAAAAgAAAA== diff --git a/third_party/mbedtls/test/data/base64/cli_min_cfg.txt b/third_party/mbedtls/test/data/base64/cli_min_cfg.txt new file mode 100644 index 000000000..152b47410 --- /dev/null +++ b/third_party/mbedtls/test/data/base64/cli_min_cfg.txt @@ -0,0 +1,2 @@ +// Minimal configuration +AhUAAAMAAAAAAAOeAAAAAF6LZlLMqAAgUGktPmpSPbzRPipeCpYJtp5SNIIjTr3R121WF9AeWN4tmKbRhhv+yPMjY0yWPrHLy7lLLhwNFBwCD6eQ0ULZZ15Fi2Rhae/4ZkAR0BN2iCMAAAAAAAM7MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcNMTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTNowCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKzNtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kMtQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8PhYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjyaHT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYDVR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgwFoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQELBQADggEBAC465FJhPqel7zJngHIHJrqj/wVAxGAFOTF396XKATGAp+HRCqJ81Ry60CNK1jDzk8dv6M6UHoS7RIFiM/9rXQCbJfiPD5xMTejZp5n5UYHAmxsxDaazfA5FuBhkfokKK6jD4Eq91C94xGKb6X4/VkaPF7cqoBBw/bHxawXc0UEPjqayiBpCYU/rJoVZgLqFVP7Px3sva1nOrNx8rPPI1hJ+ZOg8maiPTxHZnBVLakSSLQy/sWeWyazO1RnrbxjrbgQtYKz0e3nwGpu1w13vfckFmUSBhHXH7AAS/HpKC4IH7G2GAk3+n8iSSN71sZzpxonQwVbopMZqLmbBm/7WPLdei2ZSQwLppTqzs7kieOYQR6DjJItmQ0N/RS3+zTr9wF6LZlL6SQpLewmyja7jXyOWuUqJ6zJQ5b7FfA4PxthlAAABAAAAAAACAAA= diff --git a/third_party/mbedtls/test/data/base64/cli_no_alpn.txt b/third_party/mbedtls/test/data/base64/cli_no_alpn.txt new file mode 100644 index 000000000..25923f642 --- /dev/null +++ b/third_party/mbedtls/test/data/base64/cli_no_alpn.txt @@ -0,0 +1,3 @@ +// Without MBEDTLS_SSL_ALPN +AhUAAH8AAAYAAAQ8AAAAAF6LDSzMqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1lCUO8B/805UzCOLZzWDAEA8anfLpbuWTrnFSR2puZktvEiR8nXdATN0yKS94oSAAAAAAAAM7MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcNMTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTNowCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKzNtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kMtQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8PhYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjyaHT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYDVR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgwFoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQELBQADggEBAC465FJhPqel7zJngHIHJrqj/wVAxGAFOTF396XKATGAp+HRCqJ81Ry60CNK1jDzk8dv6M6UHoS7RIFiM/9rXQCbJfiPD5xMTejZp5n5UYHAmxsxDaazfA5FuBhkfokKK6jD4Eq91C94xGKb6X4/VkaPF7cqoBBw/bHxawXc0UEPjqayiBpCYU/rJoVZgLqFVP7Px3sva1nOrNx8rPPI1hJ+ZOg8maiPTxHZnBVLakSSLQy/sWeWyazO1RnrbxjrbgQtYKz0e3nwGpu1w13vfckFmUSBhHXH7AAS/HpKC4IH7G2GAk3+n8iSSN71sZzpxonQwVbopMZqLmbBm/7WPLcAAJQVUI/Wwt3q4XiqL74wCmkhAHKj0YgCvjZi3GKw0s7PJqjZzzLt+OuroC8Q2XeDf5nKKk8jkolZ+dXUftsPPizFgb2hGuYa4NhxXjiGlUpFEoXm7r78SwGfWxRgH5vJk6W3TdodkxTZkjMoWjlC2PANOHPeClw0szBmly7+s89LFZqnCXgyxE8xlv+l5IYSEPSj7UsmAAFRgAAAAF6LDSwWt0QWgmNg4Zv2yYhf4Pdexpi/QTIqWyD2AQVjXosNLLK1vz/upFHrJlizjH5uSBUJCpQZJczrBgxBmGoAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAQAAAAAAAgAA + diff --git a/third_party/mbedtls/test/data/base64/cli_no_keep_cert.txt b/third_party/mbedtls/test/data/base64/cli_no_keep_cert.txt new file mode 100644 index 000000000..76d0c3c3d --- /dev/null +++ b/third_party/mbedtls/test/data/base64/cli_no_keep_cert.txt @@ -0,0 +1,2 @@ +// Without MBEDTLS_SSL_KEEP_PEER_CERTIFICATE +AhUAAAMAAAAAAACCAAAAAF6MKhTMqAAgSKCqXrcrmjqOBpxsGO3itQB09YgsSJwXmZB12QlB+wwhiof0mzAN0hupkLxu4Yyc9SgyFoEDPKJk8TiRo8bO2rkEfPItB5lUFkJwzdeuGVMAAAAABiCAy8MWqlj4vnIv0mswJvB35hyCOYWZ+fcZ6t5LzZgXPl6MKhRs69b+psiGUAo8OK3fU4HKOHNdi36tk22+ScctXowqFEyvzGcvbtI0VfWLKlOlDv+SwC08ZdCNa+RBZ/AAAAEAAAAAAAIAAA== diff --git a/third_party/mbedtls/test/data/base64/cli_no_mfl.txt b/third_party/mbedtls/test/data/base64/cli_no_mfl.txt new file mode 100644 index 000000000..0d06891c0 --- /dev/null +++ b/third_party/mbedtls/test/data/base64/cli_no_mfl.txt @@ -0,0 +1,2 @@ +// Without MBEDTLS_SSL_MAX_FRAGMENT_LENGTH +AhUAAHcAAA4AAAQ6AAAAAF6LDLPMqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0fzGzO1ysljMgZr4gduigvRXr2AK5X8j8c6vHTOpc2ncFS3UN2ojwD2tOaM3+/XIAAAAAAAM7MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcNMTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTNowCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKzNtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kMtQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8PhYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjyaHT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYDVR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgwFoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQELBQADggEBAC465FJhPqel7zJngHIHJrqj/wVAxGAFOTF396XKATGAp+HRCqJ81Ry60CNK1jDzk8dv6M6UHoS7RIFiM/9rXQCbJfiPD5xMTejZp5n5UYHAmxsxDaazfA5FuBhkfokKK6jD4Eq91C94xGKb6X4/VkaPF7cqoBBw/bHxawXc0UEPjqayiBpCYU/rJoVZgLqFVP7Px3sva1nOrNx8rPPI1hJ+ZOg8maiPTxHZnBVLakSSLQy/sWeWyazO1RnrbxjrbgQtYKz0e3nwGpu1w13vfckFmUSBhHXH7AAS/HpKC4IH7G2GAk3+n8iSSN71sZzpxonQwVbopMZqLmbBm/7WPLcAAJMiPbE45oAjg9Rx0iVnQDg2AHHKrrmSMTfVijgZbdL/ZFWYvFMioa7uqW0NmA0bSTxcsieRarndOq5fIdEIzmAgGkdaxJaGNDT105gwwIzUnLRapgP6H6IImSMFPXVp3Zks0zFfrq7aQnQMgc8o5kPqWq1/eYfdq8lysTO8Rgliv96lA/pe1SQmPL1mdChAwCa/4XEAAVGAAABeiwyzXGz4yPwEgvq/TWq0dZXvD6mzEbAty1oZJIvRpl6LDLOyQ94MIvSKw7OH4mg+DNL+ZW0xzQbKQalloUG6AAAAAAAAAAAAAAABAAAAAAAAAAMAAAEAAAAAAAIAAAA= diff --git a/third_party/mbedtls/test/data/base64/cli_no_packing.txt b/third_party/mbedtls/test/data/base64/cli_no_packing.txt new file mode 100644 index 000000000..112b1b6e2 --- /dev/null +++ b/third_party/mbedtls/test/data/base64/cli_no_packing.txt @@ -0,0 +1,2 @@ +// Without DTLS packing +AhUAAH8AAA4AAAQ8AAAAAF6LCM/MqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfl0tXNmshIQEqiEflQGnVUKkIFl1on/Mu0pjWes3XwQgdwmy9xMzpVyYU5gBOsOEAAAAAAAM7MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcNMTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTNowCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKzNtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kMtQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8PhYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjyaHT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYDVR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgwFoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQELBQADggEBAC465FJhPqel7zJngHIHJrqj/wVAxGAFOTF396XKATGAp+HRCqJ81Ry60CNK1jDzk8dv6M6UHoS7RIFiM/9rXQCbJfiPD5xMTejZp5n5UYHAmxsxDaazfA5FuBhkfokKK6jD4Eq91C94xGKb6X4/VkaPF7cqoBBw/bHxawXc0UEPjqayiBpCYU/rJoVZgLqFVP7Px3sva1nOrNx8rPPI1hJ+ZOg8maiPTxHZnBVLakSSLQy/sWeWyazO1RnrbxjrbgQtYKz0e3nwGpu1w13vfckFmUSBhHXH7AAS/HpKC4IH7G2GAk3+n8iSSN71sZzpxonQwVbopMZqLmbBm/7WPLcAAJRTvlE7NmNNLDESUBoGC+K2AHIKA+/lhdRVF4YcMvvqCBYFB5tj0oyCikftfjNbvjl9YPGqcRXk664YieWv/pz8U1FOENipbjXF9lFhgedG2Xanh/2FwHX5txYiHIJxJeLEKCXp5Sjt9XBvQsrryxLyX9l+zkLKm7bCAcrfk4h/YoqxecAI63isG9vnrS7o07iD/3mOAAFRgAAAAF6LCM+1uRpyaoyfzuNGBJK9DgBWIWtrPpu7KM8qsC/FXosIz/YIPhveZ8Z4IR0g/McAMQwzQoK5tScSE0DD3BwAAAAAAAAAAAAAAAEAAAAAAAAAAwEAAQAAAAAAAgAAAA== diff --git a/third_party/mbedtls/test/data/base64/def_b64_ff.bin b/third_party/mbedtls/test/data/base64/def_b64_ff.bin new file mode 100644 index 000000000..66aa8271c --- /dev/null +++ b/third_party/mbedtls/test/data/base64/def_b64_ff.bin @@ -0,0 +1,5 @@ +// Ensure that the b64 parser continues after encountering a 0xFF +// character. Note that this byte is invalid UTF-8, making this +// entire file invalid UTF-8. Use care when editing. +// -> <- +AhUAAH8AAA4AAABtAAAAAF6HQx3MqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACG2QbHbUj8eGpdx5KVIebiwk0jvRj9/3m6BOSzpA7qBXeEunhqr3D11NE7ciGjeHMAAACAAAAAAAAAAAAAAAAAAV6HQx248L77RH0Z973tSYNQ8zBsz861CZG5/T09TJz3XodDHe/iJ+cgXb5An3zTdnTBtw3EWAb68T+gCE33GN8AAAAAAAAAAAAAAAEAAAAAAAAAAwAAAQAAAAAAAgAAAA== diff --git a/third_party/mbedtls/test/data/base64/def_b64_too_big_1.txt b/third_party/mbedtls/test/data/base64/def_b64_too_big_1.txt new file mode 100644 index 000000000..0fe8a18f7 --- /dev/null +++ b/third_party/mbedtls/test/data/base64/def_b64_too_big_1.txt @@ -0,0 +1,2 @@ +// Context with added '1234' at the begining to simulate too much data in the base64 code +1234AhUAAH8AAA4AAAQ8AAAAAF6HQx3MqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACG2QbHbUj8eGpdx5KVIebiwk0jvRj9/3m6BOSzpA7qBXeEunhqr3D11NE7ciGjeHMAAAAAAAM7MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcNMTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTNowCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKzNtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kMtQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8PhYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjyaHT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYDVR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgwFoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQELBQADggEBAC465FJhPqel7zJngHIHJrqj/wVAxGAFOTF396XKATGAp+HRCqJ81Ry60CNK1jDzk8dv6M6UHoS7RIFiM/9rXQCbJfiPD5xMTejZp5n5UYHAmxsxDaazfA5FuBhkfokKK6jD4Eq91C94xGKb6X4/VkaPF7cqoBBw/bHxawXc0UEPjqayiBpCYU/rJoVZgLqFVP7Px3sva1nOrNx8rPPI1hJ+ZOg8maiPTxHZnBVLakSSLQy/sWeWyazO1RnrbxjrbgQtYKz0e3nwGpu1w13vfckFmUSBhHXH7AAS/HpKC4IH7G2GAk3+n8iSSN71sZzpxonQwVbopMZqLmbBm/7WPLcAAJTfQC2Ek91INP5ihHNzImPOAHJCk+YTO/pQuEnNWwXbdmKAi+IRp671iAwtpkjSxCBXVzKX925F1A66caCOQptlw+9zFukDQgblM2JyAJLG0j6B4RtBTDWJ8ZTMUPHUoLJoEpm8APZgRi//DMRyCKP9pbBLGlDzgUvl0w11LzBAlJHkWau5NoqQBlG7w4HFrKweovskAAFRgAAAAF6HQx248L77RH0Z973tSYNQ8zBsz861CZG5/T09TJz3XodDHe/iJ+cgXb5An3zTdnTBtw3EWAb68T+gCE33GN8AAAAAAAAAAAAAAAEAAAAAAAAAAwAAAQAAAAAAAgAAAA== diff --git a/third_party/mbedtls/test/data/base64/def_b64_too_big_2.txt b/third_party/mbedtls/test/data/base64/def_b64_too_big_2.txt new file mode 100644 index 000000000..7ec1dd04a --- /dev/null +++ b/third_party/mbedtls/test/data/base64/def_b64_too_big_2.txt @@ -0,0 +1,2 @@ +// Context with added '1234' in the middle of code to simulate too much data +AhUAAH8AAA4AAAQ8AAAAAF6HQx3MqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACG2QbHbUj8eGpdx5KVIebiwk0jvRj9/3m6BOSzpA7qBXeEunhqr3D11NE7ciGjeHMAAAAAAAM7MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcNMTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTNowCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKzNtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kMtQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7m1234gM8YuG0ka/0LiqEQMef1aoGh5EGA8PhYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjyaHT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYDVR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgwFoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQELBQADggEBAC465FJhPqel7zJngHIHJrqj/wVAxGAFOTF396XKATGAp+HRCqJ81Ry60CNK1jDzk8dv6M6UHoS7RIFiM/9rXQCbJfiPD5xMTejZp5n5UYHAmxsxDaazfA5FuBhkfokKK6jD4Eq91C94xGKb6X4/VkaPF7cqoBBw/bHxawXc0UEPjqayiBpCYU/rJoVZgLqFVP7Px3sva1nOrNx8rPPI1hJ+ZOg8maiPTxHZnBVLakSSLQy/sWeWyazO1RnrbxjrbgQtYKz0e3nwGpu1w13vfckFmUSBhHXH7AAS/HpKC4IH7G2GAk3+n8iSSN71sZzpxonQwVbopMZqLmbBm/7WPLcAAJTfQC2Ek91INP5ihHNzImPOAHJCk+YTO/pQuEnNWwXbdmKAi+IRp671iAwtpkjSxCBXVzKX925F1A66caCOQptlw+9zFukDQgblM2JyAJLG0j6B4RtBTDWJ8ZTMUPHUoLJoEpm8APZgRi//DMRyCKP9pbBLGlDzgUvl0w11LzBAlJHkWau5NoqQBlG7w4HFrKweovskAAFRgAAAAF6HQx248L77RH0Z973tSYNQ8zBsz861CZG5/T09TJz3XodDHe/iJ+cgXb5An3zTdnTBtw3EWAb68T+gCE33GN8AAAAAAAAAAAAAAAEAAAAAAAAAAwAAAQAAAAAAAgAAAA== diff --git a/third_party/mbedtls/test/data/base64/def_b64_too_big_3.txt b/third_party/mbedtls/test/data/base64/def_b64_too_big_3.txt new file mode 100644 index 000000000..514754ce3 --- /dev/null +++ b/third_party/mbedtls/test/data/base64/def_b64_too_big_3.txt @@ -0,0 +1,2 @@ +// Context with added '1234' before '==' add the end to simulate too much data in the base64 code +AhUAAH8AAA4AAAQ8AAAAAF6HQx3MqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACG2QbHbUj8eGpdx5KVIebiwk0jvRj9/3m6BOSzpA7qBXeEunhqr3D11NE7ciGjeHMAAAAAAAM7MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcNMTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTNowCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKzNtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kMtQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8PhYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjyaHT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYDVR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgwFoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQELBQADggEBAC465FJhPqel7zJngHIHJrqj/wVAxGAFOTF396XKATGAp+HRCqJ81Ry60CNK1jDzk8dv6M6UHoS7RIFiM/9rXQCbJfiPD5xMTejZp5n5UYHAmxsxDaazfA5FuBhkfokKK6jD4Eq91C94xGKb6X4/VkaPF7cqoBBw/bHxawXc0UEPjqayiBpCYU/rJoVZgLqFVP7Px3sva1nOrNx8rPPI1hJ+ZOg8maiPTxHZnBVLakSSLQy/sWeWyazO1RnrbxjrbgQtYKz0e3nwGpu1w13vfckFmUSBhHXH7AAS/HpKC4IH7G2GAk3+n8iSSN71sZzpxonQwVbopMZqLmbBm/7WPLcAAJTfQC2Ek91INP5ihHNzImPOAHJCk+YTO/pQuEnNWwXbdmKAi+IRp671iAwtpkjSxCBXVzKX925F1A66caCOQptlw+9zFukDQgblM2JyAJLG0j6B4RtBTDWJ8ZTMUPHUoLJoEpm8APZgRi//DMRyCKP9pbBLGlDzgUvl0w11LzBAlJHkWau5NoqQBlG7w4HFrKweovskAAFRgAAAAF6HQx248L77RH0Z973tSYNQ8zBsz861CZG5/T09TJz3XodDHe/iJ+cgXb5An3zTdnTBtw3EWAb68T+gCE33GN8AAAAAAAAAAAAAAAEAAAAAAAAAAwAAAQAAAAAAAgAAAA1234== diff --git a/third_party/mbedtls/test/data/base64/def_bad_b64.txt b/third_party/mbedtls/test/data/base64/def_bad_b64.txt new file mode 100644 index 000000000..d77765883 --- /dev/null +++ b/third_party/mbedtls/test/data/base64/def_bad_b64.txt @@ -0,0 +1,2 @@ +// Context with added extra 'A' before '==' add the end to simulate bad length of base64 code +AhUAAH8AAA4AAAQ8AAAAAF6HQx3MqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACG2QbHbUj8eGpdx5KVIebiwk0jvRj9/3m6BOSzpA7qBXeEunhqr3D11NE7ciGjeHMAAAAAAAM7MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcNMTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8GA1UECgwIUG9sYXJTU0wxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTNowCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKzNtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kMtQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8PhYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjyaHT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYDVR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgwFoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQELBQADggEBAC465FJhPqel7zJngHIHJrqj/wVAxGAFOTF396XKATGAp+HRCqJ81Ry60CNK1jDzk8dv6M6UHoS7RIFiM/9rXQCbJfiPD5xMTejZp5n5UYHAmxsxDaazfA5FuBhkfokKK6jD4Eq91C94xGKb6X4/VkaPF7cqoBBw/bHxawXc0UEPjqayiBpCYU/rJoVZgLqFVP7Px3sva1nOrNx8rPPI1hJ+ZOg8maiPTxHZnBVLakSSLQy/sWeWyazO1RnrbxjrbgQtYKz0e3nwGpu1w13vfckFmUSBhHXH7AAS/HpKC4IH7G2GAk3+n8iSSN71sZzpxonQwVbopMZqLmbBm/7WPLcAAJTfQC2Ek91INP5ihHNzImPOAHJCk+YTO/pQuEnNWwXbdmKAi+IRp671iAwtpkjSxCBXVzKX925F1A66caCOQptlw+9zFukDQgblM2JyAJLG0j6B4RtBTDWJ8ZTMUPHUoLJoEpm8APZgRi//DMRyCKP9pbBLGlDzgUvl0w11LzBAlJHkWau5NoqQBlG7w4HFrKweovskAAFRgAAAAF6HQx248L77RH0Z973tSYNQ8zBsz861CZG5/T09TJz3XodDHe/iJ+cgXb5An3zTdnTBtw3EWAb68T+gCE33GN8AAAAAAAAAAAAAAAEAAAAAAAAAAwAAAQAAAAAAAgAAAAA== diff --git a/third_party/mbedtls/test/data/base64/empty.txt b/third_party/mbedtls/test/data/base64/empty.txt new file mode 100644 index 000000000..e69de29bb diff --git a/third_party/mbedtls/test/data/base64/mfl_1024.txt b/third_party/mbedtls/test/data/base64/mfl_1024.txt new file mode 100644 index 000000000..b56044a4e --- /dev/null +++ b/third_party/mbedtls/test/data/base64/mfl_1024.txt @@ -0,0 +1,2 @@ +// MFL=1024 +AhUAAH8AAA4AAABtAAAAAF6K+GLMqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHeeQKPVt9RpB8nLTB6C2AhxRzB0r/OBbXbMPm6jb1rkR+qrXZAUFRvGfGxlqqGWwAAACAAAAAAAAAAAAAAAIAAV6K+GJIXNnpKTr9HZQW6WEH7YSYhhRRqOO6xvf8QL6/Xor4YhOxOJYk23w3AwDvVAofeWnVAfJnExe5ipdSxnAAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAQAAAAAAAgAAAA=== diff --git a/third_party/mbedtls/test/data/base64/mtu_10000.txt b/third_party/mbedtls/test/data/base64/mtu_10000.txt new file mode 100644 index 000000000..676453907 --- /dev/null +++ b/third_party/mbedtls/test/data/base64/mtu_10000.txt @@ -0,0 +1,2 @@ +// MTU=10000 +AhUAAH8AAA4AAABtAAAAAF6LDkzMqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABx06kxYooMLGPyUMoB46EF2zTJzmZEM4le5aKihcHpFEfgrX/eWQZFWa7cak79ihwAAACAAAAAAAAAAAAAAAAAAV6LDkz9bigMk9q0WiDmgYhX8ppbfgbtMCfruvVQNiFWXosOTJ3R2+J+TaSChmjtS8sD+y1Zruhe/SJE7y9D+5YAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAQAAAAAAAicQAA== diff --git a/third_party/mbedtls/test/data/base64/srv_cid.txt b/third_party/mbedtls/test/data/base64/srv_cid.txt new file mode 100644 index 000000000..69aad5f7a --- /dev/null +++ b/third_party/mbedtls/test/data/base64/srv_cid.txt @@ -0,0 +1,2 @@ +// Server, CID 0xDEAD +AhUAAH8AAA8AAABtAAAAAF6MZUPMqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABh7h8/aprLN1fS0KwLkZzKcsa5LNtDW7sYu7d1z7fNetuRjLJpX/A1mTSqeBY7li8AAACAAAAAAAAAAAAAAAAAAV6MZUNak74BhbcgvZ2M8WhZKjQyCix7GJzRs4SqnD7iXoxlQ7YXjsVI0K/xyMOJPkT9ZcPEi/2jHGIte1ZduW4C3q0Cvu8AAAAAAAAAAAAAAAIAAAAAAAAABwAAAQAAAAAAAwAAAA== diff --git a/third_party/mbedtls/test/data/base64/srv_ciphersuite.txt b/third_party/mbedtls/test/data/base64/srv_ciphersuite.txt new file mode 100644 index 000000000..7e939062f --- /dev/null +++ b/third_party/mbedtls/test/data/base64/srv_ciphersuite.txt @@ -0,0 +1,2 @@ +// TLS-RSA-WITH-AES-256-CCM-8 +AhUAAH8AAA4AAABtAAAAAF6K4ynAoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLBIQUrrPh7jxYz9e55cJvfpOkuBf2ZiVovlYa1Dkwbimp5q/CoWIn48C0x3Yj6N0AAACAAAAAAAAAAAAAAAAAAV6K4yksMvMV19qRq+eNokGn0j9Q5tjE88EK8jfM7gksXorjKR6zhXhttFGIFkNNAmmKuuDQGVmX1yCoHiJFonUAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAQAAAAAAAgAAAA== diff --git a/third_party/mbedtls/test/data/base64/srv_def.txt b/third_party/mbedtls/test/data/base64/srv_def.txt new file mode 100644 index 000000000..ca8146196 --- /dev/null +++ b/third_party/mbedtls/test/data/base64/srv_def.txt @@ -0,0 +1,2 @@ +// Server context with default MbedTLS configuration +AhUAAH8AAA4AAABtAAAAAF6HQx3MqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACG2QbHbUj8eGpdx5KVIebiwk0jvRj9/3m6BOSzpA7qBXeEunhqr3D11NE7ciGjeHMAAACAAAAAAAAAAAAAAAAAAV6HQx248L77RH0Z973tSYNQ8zBsz861CZG5/T09TJz3XodDHe/iJ+cgXb5An3zTdnTBtw3EWAb68T+gCE33GN8AAAAAAAAAAAAAAAEAAAAAAAAAAwAAAQAAAAAAAgAAAA== diff --git a/third_party/mbedtls/test/data/base64/srv_min_cfg.txt b/third_party/mbedtls/test/data/base64/srv_min_cfg.txt new file mode 100644 index 000000000..77272f52a --- /dev/null +++ b/third_party/mbedtls/test/data/base64/srv_min_cfg.txt @@ -0,0 +1,2 @@ +// Minimal configuration +AhUAAAMAAAAAAABjAAAAAF6LZlLMqAAgUGktPmpSPbzRPipeCpYJtp5SNIIjTr3R121WF9AeWN4tmKbRhhv+yPMjY0yWPrHLy7lLLhwNFBwCD6eQ0ULZZ15Fi2Rhae/4ZkAR0BN2iCMAAACAAAAAXotmUkMC6aU6s7O5InjmEEeg4ySLZkNDf0Ut/s06/cBei2ZS+kkKS3sJso2u418jlrlKiesyUOW+xXwOD8bYZQAAAQAAAAAAAgAA diff --git a/third_party/mbedtls/test/data/base64/srv_no_alpn.txt b/third_party/mbedtls/test/data/base64/srv_no_alpn.txt new file mode 100644 index 000000000..10ddd0c2a --- /dev/null +++ b/third_party/mbedtls/test/data/base64/srv_no_alpn.txt @@ -0,0 +1,2 @@ +// Without MBEDTLS_SSL_ALPN +AhUAAH8AAAYAAABtAAAAAF6LDSzMqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1lCUO8B/805UzCOLZzWDAEA8anfLpbuWTrnFSR2puZktvEiR8nXdATN0yKS94oSAAAACAAAAAAAAAAAAAAAAAAV6LDSwWt0QWgmNg4Zv2yYhf4Pdexpi/QTIqWyD2AQVjXosNLLK1vz/upFHrJlizjH5uSBUJCpQZJczrBgxBmGoAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAQAAAAAAAgAA diff --git a/third_party/mbedtls/test/data/base64/srv_no_keep_cert.txt b/third_party/mbedtls/test/data/base64/srv_no_keep_cert.txt new file mode 100644 index 000000000..be834b9ed --- /dev/null +++ b/third_party/mbedtls/test/data/base64/srv_no_keep_cert.txt @@ -0,0 +1,2 @@ +// Without MBEDTLS_SSL_KEEP_PEER_CERTIFICATE +AhUAAAMAAAAAAABiAAAAAF6MKhTMqAAgSKCqXrcrmjqOBpxsGO3itQB09YgsSJwXmZB12QlB+wwhiof0mzAN0hupkLxu4Yyc9SgyFoEDPKJk8TiRo8bO2rkEfPItB5lUFkJwzdeuGVMAAACAAABejCoUbOvW/qbIhlAKPDit31OByjhzXYt+rZNtvknHLV6MKhRMr8xnL27SNFX1iypTpQ7/ksAtPGXQjWvkQWfwAAABAAAAAAACAAA= diff --git a/third_party/mbedtls/test/data/base64/srv_no_mfl.txt b/third_party/mbedtls/test/data/base64/srv_no_mfl.txt new file mode 100644 index 000000000..e254403aa --- /dev/null +++ b/third_party/mbedtls/test/data/base64/srv_no_mfl.txt @@ -0,0 +1,2 @@ +// Without MBEDTLS_SSL_MAX_FRAGMENT_LENGTH +AhUAAHcAAA4AAABsAAAAAF6LDLPMqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0fzGzO1ysljMgZr4gduigvRXr2AK5X8j8c6vHTOpc2ncFS3UN2ojwD2tOaM3+/XIAAACAAAAAAAAAAAAAAAABXosMs1xs+Mj8BIL6v01qtHWV7w+psxGwLctaGSSL0aZeiwyzskPeDCL0isOzh+JoPgzS/mVtMc0GykGpZaFBugAAAAAAAAAAAAAAAQAAAAAAAAADAAABAAAAAAACAAAA diff --git a/third_party/mbedtls/test/data/base64/srv_no_packing.txt b/third_party/mbedtls/test/data/base64/srv_no_packing.txt new file mode 100644 index 000000000..bcc4228be --- /dev/null +++ b/third_party/mbedtls/test/data/base64/srv_no_packing.txt @@ -0,0 +1,2 @@ +// Without DTLS packing +AhUAAH8AAA4AAABtAAAAAF6LCM/MqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfl0tXNmshIQEqiEflQGnVUKkIFl1on/Mu0pjWes3XwQgdwmy9xMzpVyYU5gBOsOEAAACAAAAAAAAAAAAAAAAAAV6LCM+1uRpyaoyfzuNGBJK9DgBWIWtrPpu7KM8qsC/FXosIz/YIPhveZ8Z4IR0g/McAMQwzQoK5tScSE0DD3BwAAAAAAAAAAAAAAAEAAAAAAAAAAwEAAQAAAAAAAgAAAA== diff --git a/third_party/mbedtls/test/data/base64/v2.19.1.txt b/third_party/mbedtls/test/data/base64/v2.19.1.txt new file mode 100644 index 000000000..c07bd9d96 --- /dev/null +++ b/third_party/mbedtls/test/data/base64/v2.19.1.txt @@ -0,0 +1,2 @@ +// Context creaded by MbedTLS v.2.19.1 +AhMBAH8AAA8AAAGjAAAAAF5iHYLArgAgkQE4V2NJsjbOuO52ws/u75f6Cg126zWeI7a+kaxTqKLbdWWZmW3PP+SflLxBA7Trpb0qZ5MP8+m0leylnLcDt2TtIWR49MOuiJuvVuMJmtwAAAAAAAE2MIIBMjCB2qADAgECAgYBcK9AtOYwCgYIKoZIzj0EAwIwDTELMAkGA1UEAwwCY2EwIBcNMjAwMzA2MDk1MDE4WhgPMjA1NjAyMjYwOTUwMThaMDMxDzANBgNVBAcTBjE2MDAwMTENMAsGA1UECxMEYWNjMTERMA8GA1UEAxMIZGV2aWNlMDEwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARn0TtinN6/runzIuF2f2uTH1f0mQOFXu3uRPtQji2ObccSsw6Cn9z7XWK9fRgeoOKA0WZC+O9L9IEWieS13ajFMAoGCCqGSM49BAMCA0cAMEQCIFoavpekQjIqubJ09jkMR+iiUpkGdFRla1R7onnc5iEOAiBAvYr8j9QqjpM2jColTS1cI0z29PBbuasq4HI6YCj0wgAAAAAAAAAAAAFeYh2Ct3LnESwmdWzU+xs7vV2Q0T5HJ8y4ckhpO7wOoF5iHYJ38gKFI3Qdc3BR48GV7nuBUKZeI1YJExQchj1WCAY6dEyghLpHAAAAAAAAAAAAAAAAAQAAAAAAAAADAAABAAAAAAACAAAA diff --git a/third_party/mbedtls/test/data/bitstring-in-dn.pem b/third_party/mbedtls/test/data/bitstring-in-dn.pem new file mode 100644 index 000000000..c50bd6684 --- /dev/null +++ b/third_party/mbedtls/test/data/bitstring-in-dn.pem @@ -0,0 +1,51 @@ +-----BEGIN CERTIFICATE----- +MIIEATCCAumgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBxMRMwEQYDVQQDDApUZXN0 +IENBIDAxMREwDwYDVQQIDAhFY25pdm9ycDELMAkGA1UEBhMCWFgxHjAcBgkqhkiG +9w0BCQEWD3RjYUBleGFtcGxlLmNvbTEaMBgGA1UECgwRVGVzdCBDQSBBdXRob3Jp +dHkwHhcNMTUwMzExMTIwNjUxWhcNMjUwMzA4MTIwNjUxWjCBmzELMAkGA1UEBhMC +WFgxDDAKBgNVBAoMA3RjYTERMA8GA1UECAwIRWNuaXZvcnAxDDAKBgNVBAsMA1RD +QTEPMA0GA1UEAwwGQ2xpZW50MSEwHwYJKoZIhvcNAQkBFhJjbGllbnRAZXhhbXBs +ZS5jb20xEzARBgNVBAUTCjcxMDEwMTIyNTUxFDASBgNVBC0DCwA3MTAxMDEyMjU1 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnQS0JLb8Dqy8V2mszkWk +V8c/NPQcG3ivueXZHqOT9JTiPqrigGcLHtlmlaJ0aUUxix7q60aOds041TFyeknT +SUFYY4ppOhiP+fOpWKPv4ZMwhSI2XzcgYhQSNHV0lIG1we9RAAfumomDMq7oMJhb +EGf0ihibbwZXPUwBlm10GaB4K93PNY8Bz4ekBxzQ1WJkQ5LGsQnVZSuLnvp5dWSe +J2axxyY4hPXR30jzEyZvy4kv4nzAu5lqZ5XKLrRO4TKwZrtr+CCPVkPJRE36rWYt +tQaJEEpNOo0ZPpTtG6F8/tGh5r8jFx/f6wG+nyANJJ98kEP8i6TPjRrg+697mLcd +iQIDAQABo3kwdzAJBgNVHRMEAjAAMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9j +cmwuZXhhbXBsZS5jb20vdGVzdF9jYV8wMS5jcmwwEwYDVR0lBAwwCgYIKwYBBQUH +AwIwHQYDVR0RBBYwFIESY2xpZW50QGV4YW1wbGUuY29tMA0GCSqGSIb3DQEBBQUA +A4IBAQBySELCnU8/PtGIG3dwhJENOSU5R7w8jpRXxHCuSBR+W6nuUCISz+z+EdF/ +A7AOJDASuS+4gkrSSmQhGFpf7E5VbF8trVZhLAZrXqKMcUreKH6v0I8MAUXmIs3G +tqiBGf7pSYJN9DvVOOgANjdy6THuUzYv5qSvBZ4pNYEfHSlMNrV7niynd8dgPOML +pA7GUfv5k2mMkMbSD15pTMgcavrBKYgyqcvF1C3qghfoL5+i38H8sKzF8hy7wHtE +ESHtBq20RYA3m0UcA0e64GcanO2Ps/AQVBc7qMeHbqnqj3uUhtTkQcMUWnMgy1NR +5RbzoLMOxq7hoOCyIaQeM/wgxeGE +-----END CERTIFICATE----- +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAnQS0JLb8Dqy8V2mszkWkV8c/NPQcG3ivueXZHqOT9JTiPqri +gGcLHtlmlaJ0aUUxix7q60aOds041TFyeknTSUFYY4ppOhiP+fOpWKPv4ZMwhSI2 +XzcgYhQSNHV0lIG1we9RAAfumomDMq7oMJhbEGf0ihibbwZXPUwBlm10GaB4K93P +NY8Bz4ekBxzQ1WJkQ5LGsQnVZSuLnvp5dWSeJ2axxyY4hPXR30jzEyZvy4kv4nzA +u5lqZ5XKLrRO4TKwZrtr+CCPVkPJRE36rWYttQaJEEpNOo0ZPpTtG6F8/tGh5r8j +Fx/f6wG+nyANJJ98kEP8i6TPjRrg+697mLcdiQIDAQABAoIBAF7i3MnjGmbz080v +OxJb23iAG54wdlvTjr3UPGTbjSmcXyxnsADQRFQcJHYAekCzY8EiqewL80OvuMx8 +2SU1P81hA70Dg5tsBHWT3Z6HUwsKG6QYjKr1cUhTwLyazhyAVgogSN6v7GzO9M3I +DOBw8Xb0mz5oqGVre4S7TapN8n8ZG5oWm0XKGACXy0KbzY0KvWdkUzumFQ8X/ARE +FsWyu+O69EbMqZRUKu45SrcubsdVGjOwseZHkmp5V6pc6Q/OrTHZqXJtDva5UIRq ++Lof5scy9jiwwRnM/klvh23mz0ySU4YA3645m5KqyWR4YJCR1MnMANmXUSeYWfYz +19+R1gECgYEAzm83lI7eIhTH38H0/jFpf3R7vNjPX3TR5waa4EXsCxhTOpoL89mR +iNmzH0aOC4OR8rz/9PCnwmtH1lyQ4r/RokBmCp3pBxeWSlenFfV3rLCeEDo0Q/OL +SX5DL4IbZD0VmNDt606WS7AEv93GhpN03Anw6kgHQUm1l030PR9DYZECgYEAwrgO +/RyB/Ehw7smlysZb2sn1lvd6z8fg+pcu8ZNRKODaYCCOb8p1lnHrnIQdEmjhlmVp +HAEuJ5jxCb+lyruV+dlx+0W/p6lHtKr0iBHG8EFkHnjN6Y+59Qu0HfSm0pZw7Ftr +QcUDPuDJkTVUAvrZqciWlwzTWCC9KYXtasT+AHkCgYEAnP80dAUbpyvKvr/RxShr +JYW/PWZegChmIp+BViOXWvDLC3xwrqm+5yc59QVBrjwH2WYn+26zB0dzwPFxNyHP +GuiDMnvZ54zmve9foXGn7Gv+KjU53pvwSJqAGjeHAXr7W9c5uoVwBGv/kLPn8h1e ++KGO2X6iFeMq+cFNiNan9iECgYBj+oGnsKWFVeS2ls8LyMGNGzmAZF2opiZ8RHgU +DeIULS+zP8Qi3j92GdQyLxuGQlfiEvvfJzP9nOfWa5LC/4JIIUAHFo8LlT1+JHEe +FJKi9dBkXP7NN8DxcyruXpnxctFUarQttuytslmMt2cFiKuOI7I+qJUzoMu/sEZx +FeidcQKBgQCuralmtbl4nxjn3aR/ZgFTAKCL9WaJPh5hFJ9q4UuWxJdBX5z3Ey3/ +70ehLKYPumjmZtXynzz4BTWj1W9X+tgj/499uzV6LdQERGjT6WVy8xR9RELWW0an +N9N1IAc4qTSjbI4EIMwMBSAoFfCux/jfDkG4g+RDnpV92sqxz2CtKg== +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/cert_example_multi.crt b/third_party/mbedtls/test/data/cert_example_multi.crt new file mode 100644 index 000000000..0e3295dc7 --- /dev/null +++ b/third_party/mbedtls/test/data/cert_example_multi.crt @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICojCCAYqgAwIBAgIBETANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwNzEwMTEyNzUyWhcNMjkwNzEwMTEyNzUyWjA6MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGDAWBgNVBAMMD3d3dy5leGFtcGxlLmNvbTCBnzANBgkq +hkiG9w0BAQEFAAOBjQAwgYkCgYEAxziSxcP0cBAIa/gTNezzARyKJQ+VgjYeqh6W +ElUarPh7dTMLcFcznNmV8U1MRDfIvsSgP+RkPNPzyQJDPcN8W455qgmEroITNwq/ +hWm9KjVibLH+5KzgQrJBfHvknScUmywHa45DPT9sdjpGmhxwDSWdvAjHQPzYAjdi +/33r/C0CAwEAAaM2MDQwMgYDVR0RBCswKYILZXhhbXBsZS5jb22CC2V4YW1wbGUu +bmV0gg0qLmV4YW1wbGUub3JnMA0GCSqGSIb3DQEBCwUAA4IBAQCJbFizurHz804x +6NbsvsPPgLcESq0OcGOEXOCOe8seZqomhSYTXtHBzrFtRp2/gmtORq2oapoDDiq+ +I+xRLJYsUBut2NdkZmEIRSW4n4sXJwqb0fXTTkd7EAXBvGNWbERab5Sbf84oqd4t +yjjz2u+Hvx8hZCHJG2V9qg3zaw5zJT1AfAsMbjXqi8CfU7U+Fcor+O3GeuUVgpJC +QCXb2Qjj3ZmrCvGZA9x59XtnEN6m2O4pWkmqR/Z7MlQrZzQ80vcQMk9+qoKIr2EJ +RcJhAtE+dLV19IlccwsDlGx5kT5N5zSYLK9nARV1/AjK48bUxGH353A1Y2MCfy0E +dXDReJa1 +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/cert_example_multi_nocn.crt b/third_party/mbedtls/test/data/cert_example_multi_nocn.crt new file mode 100644 index 000000000..1634846e1 --- /dev/null +++ b/third_party/mbedtls/test/data/cert_example_multi_nocn.crt @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB/TCCAWagAwIBAgIJAPfGf/jpqWP5MA0GCSqGSIb3DQEBBQUAMA0xCzAJBgNV +BAYTAk5MMB4XDTE0MDEyMjEwMDQzM1oXDTI0MDEyMjEwMDQzM1owDTELMAkGA1UE +BhMCTkwwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAN0Rip+ZurBoyirqO2pt +WZftTslU5A3uzqB9oB6q6A7CuxNA24oSjokTJKXF9frY9ZDXyMrLxf6THa/aEiNz +UnlGGrqgVyt2FjGzqK/nOJsIi2OZOgol7kXSGFi6uZMa7dRYmmMbN/z3FAifhWVJ +81kybdHg6G3eUu1mtKkL2kCVAgMBAAGjZTBjMAkGA1UdEwQCMAAwCwYDVR0PBAQD +AgXgMEkGA1UdEQRCMECCHHd3dy5zaG90b2thbi1icmF1bnNjaHdlaWcuZGWCFHd3 +dy5tYXNzaW1vLWFiYXRlLmV1hwTAqAEBhwTAqEWQMA0GCSqGSIb3DQEBBQUAA4GB +ABjx1ytrqCyFC5/0cjWnbLK9vsvLny2ZikDewfRxqJ5zAxGWLqHOr1SmUmu2DrvB +bkT9g5z19+iMhPnzJz1x7Q2m7WTIJTuUPK+hKZJATDLNhZ86h5Nkw8k9YzKcOrPm +EIqsy55CSgLU0ntljqSBvSb4ifrF1NnIWej2lSfN6r+3 +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/cert_example_wildcard.crt b/third_party/mbedtls/test/data/cert_example_wildcard.crt new file mode 100644 index 000000000..ab417c585 --- /dev/null +++ b/third_party/mbedtls/test/data/cert_example_wildcard.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDOzCCAiOgAwIBAgIBDDANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA4MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxFjAUBgNVBAMMDSouZXhhbXBsZS5jb20wggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpAh89QGrVVVOL/TbugmUuFWFeib+46EWQ +2+6IFlLT8UNQR5YSWWSHa/0r4Eb5c77dz5LhkVvtZqBviSl5RYDQg2rVQUN3Xzl8 +CQRHgrBXOXDto+wVGR6oMwhHwQVCqf1Mw7Tf3QYfTRBRQGdzEw9A+G2BJV8KsVPG +MH4VOaz5Wu5/kp6mBVvnE5eFtSOS2dQkBtUJJYl1B92mGo8/CRm+rWUsZOuVm9z+ +QV4XptpsW2nMAroULBYknErczdD3Umdz8S2gI/1+9DHKLXDKiQsE2y6mT3Buns69 +WIniU1meblqSZeKIPwyUGaPd5eidlRPtKdurcBLcWsprF6tSglSxAgMBAAGjTTBL +MAkGA1UdEwQCMAAwHQYDVR0OBBYEFB901j8pwXR0RTsFEiw9qL1DWQKmMB8GA1Ud +IwQYMBaAFLRa5KWz3tJS9rnVppUP6z68x/3/MA0GCSqGSIb3DQEBBQUAA4IBAQBx +d7aXXhUG1EM6HrkN6XOOXykuDIgh8iQi7+D9TANwbXtPJk0hiCqtChOC31Hao79U +5E23Y2LsFP+Ap/jLRpZYvxkk9kcBjgcp0GTxPHLu2n7ijsGuj/765FGG4wTVTtrF +uU8ZNI3uGoz2SjLyvNLz7aulavagcLt0P32TzURezJH47RN8JxriEXGbxVf0CCNl +Zw/hWy+g5yT12AT0dYwX1UeFT6JMXwwDrCG+W1uBY35wgTovrh5YYvNc1JFpzh+o +vvu9Tq7rsX7P4f7/gu8f4MMDuzMryUyGCYMexQkXJNBz2S/igLFbuX1VmsLlX8zm +iDqWV5xLtVuLbgQGKa4q +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/cert_md2.crt b/third_party/mbedtls/test/data/cert_md2.crt new file mode 100644 index 000000000..94b89afce --- /dev/null +++ b/third_party/mbedtls/test/data/cert_md2.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDPzCCAiegAwIBAgIBCTANBgkqhkiG9w0BAQIFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MDAwMTAxMTIxMjEyWhcNMzAwMTAxMTIxMjEyWjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIENlcnQgTUQyMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6f +M60Nj4o8VmXl3ETZzGaFB9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu +1C93KYRhTYJQj6eVSHD1bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEw +MjDV0/YI0FZPRo7yX/k9Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v +4Jv4EFbMs44TFeY0BGbH7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx/ +/DZrtenNLQNiTrM9AM+vdqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQAB +o00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBRxoQBzckAvVHZeM/xSj7zx3WtGITAf +BgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQIFAAOC +AQEAXLWqy34iaZ2YV+5eE1QMV/9m9nQI2X/yumRH1MT1R3oYde/YDV7+HSOM6qLs +qSgH1DSyXv1YnJww2OyTtAVhPalICLjVjUQCyeUCiFpAIO6Xz1VE6v4GMFLqhlV1 +Nox9dDtR5Go2zwPaH64Ze9GxuDZfW+VnPRNgYOrqqCBnuhnp2uPRfOewus2AAo50 +dx1XTooCEqElQlB9EIPWbvPdJZjRjruCUtDbz+oxG4J4Ml4KCYm+/MyXNPqxV9+H +5A9oQltuHMWasMWSfXeimQI5PPpdjndmJOhfT4RGmvTw/uNC/Xuy1kPxXQKoocz6 +93U8RQvyJxdIPtQuARNMRZ7G+Q== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/cert_md2.csr b/third_party/mbedtls/test/data/cert_md2.csr new file mode 100644 index 000000000..a8c39bdb3 --- /dev/null +++ b/third_party/mbedtls/test/data/cert_md2.csr @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICgTCCAWkCAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRow +GAYDVQQDDBFQb2xhclNTTCBDZXJ0IE1EMjCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMh0xMy5+bV56UXZFGCwfbuT8msenzOtDY+KPFZl5dxE2cxmhQfV ++CewSjXQY54Kbhu32vB+q+4MEJOGSRg086gq0lf1LtQvdymEYU2CUI+nlUhw9W5N +stUTw9Ia7eZD6kIU63TqwO0f1FdOqfOo7dLgwTBxMDIw1dP2CNBWT0aO8l/5PWeR +iDAuQrLfffvlDHf/7DHAeI+/wn/KrWwh1o3Zi2qOb+Cb+BBWzLOOExXmNARmx+75 +Ng5qlfYJmgZn9GVx+MqksSXg/jyLNQRnuuBPdoX8f/w2a7XpzS0DYk6zPQDPr3ag +aVaDatKo1OdQcea1NgV3BW17yOTE/UzVIV8CAwEAAaAAMA0GCSqGSIb3DQEBAgUA +A4IBAQBPUqodRcH2ZUa8A3fQX/nxrIwWiLmQ9BaOI6G7vzEWVE1sxmkrHP+pXgi9 +1eFceN9xUBKEd+LmUPmHpObZ4nwRSprFj3DeIXpn9aSBr+jGY8RaaC9cMkaSq5Mb +q65THEJ1xemIfZvbhjvNi/ycXXu/v1Gpj62dpIFGbm+o4AXQF2ocYGEM+X1u2eVn +mnuuvPAHTllGjB0daTSYoQtMy3luPUEj0Yct3iVR1pUeTrHchOs9p5ACDZcf6D3x +sm9atH2ZIaXo1c9SqHzdk/uLt/CwxQrn1WU1inwOkzjim2Yq9vWgpQypfGZdScXV +oHOmuGG901WMMemzZXjoLi+8ZpVL +-----END CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/cert_md4.crt b/third_party/mbedtls/test/data/cert_md4.crt new file mode 100644 index 000000000..7d0f7cb1b --- /dev/null +++ b/third_party/mbedtls/test/data/cert_md4.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDPzCCAiegAwIBAgIBBTANBgkqhkiG9w0BAQMFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MDAwMTAxMTIxMjEyWhcNMzAwMTAxMTIxMjEyWjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIENlcnQgTUQ0MIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6f +M60Nj4o8VmXl3ETZzGaFB9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu +1C93KYRhTYJQj6eVSHD1bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEw +MjDV0/YI0FZPRo7yX/k9Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v +4Jv4EFbMs44TFeY0BGbH7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx/ +/DZrtenNLQNiTrM9AM+vdqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQAB +o00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBRxoQBzckAvVHZeM/xSj7zx3WtGITAf +BgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQMFAAOC +AQEArXIW7Dy1hBXMKY8/TAfACqkFZzbGDJdD5ohQknENk6FzUHVw9SVibhi5J+nh +/mhUhoczFg78T8ZopDcsPHKQTuy0LNcLWhZDD4S4CJCibmsf+8BWmPcSp1tsS9Zj +etO5qNuUarL74W+rRa3qQcCXcglYTubv/PcCV+LGVqZ4XDlO5EBFJJREAREzG+iK +Epm2y0mi1WTwjy7m7rxYHs5i5ybDHDDwU55H5wh50Vs4/vDx2kZab2K9gx6V2ggY +CCYmRWKQHdI4XZBkpYFbbREZxMY4Y5c2PUMlr8GUq6s6eu9/GvmnIx/+EySSfxgv +9GpN+gnyx03hjYNGO7iX8nPnXA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/cert_md4.csr b/third_party/mbedtls/test/data/cert_md4.csr new file mode 100644 index 000000000..d8a3dbf20 --- /dev/null +++ b/third_party/mbedtls/test/data/cert_md4.csr @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICgTCCAWkCAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRow +GAYDVQQDDBFQb2xhclNTTCBDZXJ0IE1ENDCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMh0xMy5+bV56UXZFGCwfbuT8msenzOtDY+KPFZl5dxE2cxmhQfV ++CewSjXQY54Kbhu32vB+q+4MEJOGSRg086gq0lf1LtQvdymEYU2CUI+nlUhw9W5N +stUTw9Ia7eZD6kIU63TqwO0f1FdOqfOo7dLgwTBxMDIw1dP2CNBWT0aO8l/5PWeR +iDAuQrLfffvlDHf/7DHAeI+/wn/KrWwh1o3Zi2qOb+Cb+BBWzLOOExXmNARmx+75 +Ng5qlfYJmgZn9GVx+MqksSXg/jyLNQRnuuBPdoX8f/w2a7XpzS0DYk6zPQDPr3ag +aVaDatKo1OdQcea1NgV3BW17yOTE/UzVIV8CAwEAAaAAMA0GCSqGSIb3DQEBAwUA +A4IBAQAztRb+vAecvhelhszzCctzmhGs4TGmr9h4zddZoQ8dTdy1OCsnmU+yz3oh +oiQjy7UPLt8DS2ZKhGhvwPvtwFh5icMWQVnv2kE4Evz8xJT12VRw+U6L5rfKmf/L +mVNxsuk17MDyBcMlwuNk+CHrYVdrXhSWUH3UCQQUH1iqqBMKmNiPa1UGU0budZ9X +HZjn9uqyyOGy8l3hffqjDxsDjZyBDf5aqKIdnvukdrUiacPdUYVF0fwK8d1/1PA9 +dA4JjTvz+tTK6mL9Ic9Pv+64v1vwMU4Qu8IJHk5x3I0e7KuK2A/lK6az2Vb6FAh6 +MkGpWB68T8FRBoVrWLOh+a9yNwyp +-----END CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/cert_md5.crt b/third_party/mbedtls/test/data/cert_md5.crt new file mode 100644 index 000000000..e514fd631 --- /dev/null +++ b/third_party/mbedtls/test/data/cert_md5.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDPzCCAiegAwIBAgIBBjANBgkqhkiG9w0BAQQFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MDAwMTAxMTIxMjEyWhcNMzAwMTAxMTIxMjEyWjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIENlcnQgTUQ1MIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6f +M60Nj4o8VmXl3ETZzGaFB9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu +1C93KYRhTYJQj6eVSHD1bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEw +MjDV0/YI0FZPRo7yX/k9Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v +4Jv4EFbMs44TFeY0BGbH7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx/ +/DZrtenNLQNiTrM9AM+vdqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQAB +o00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBRxoQBzckAvVHZeM/xSj7zx3WtGITAf +BgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQQFAAOC +AQEAF4QcMshVtVbYgvvU7f2lWakubbAISM/k+FW/f7u63m0MSSoSFeYflBOC1Wf4 +imgDEnWcWTH5V7sxsLNogxfpfTuFUaKfHeQmRhAK4UgqbDEs4dZvgo3wZ/w92G0/ +QNntJefnqaFiITXZTn6J8hxeoEq4QbucbWgeY6fTAwXtIv40BvMOSakkuIFAyIvV +90VY1j4vnx0/xv5lIBAxah1HdtXhqtDu/sUfdCtWX5SCcVUwwM3gZ4Q1ZdWQmlvF +737ZG7XaINxsDaI04sJxc7qvuRYhLdCwUPnZL5TGEQJ8jNa/39eEbnkvs7hbTU98 +6qG8UAYsSI7aMe1j7DZpkoPL9w== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/cert_md5.csr b/third_party/mbedtls/test/data/cert_md5.csr new file mode 100644 index 000000000..dc6792d38 --- /dev/null +++ b/third_party/mbedtls/test/data/cert_md5.csr @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICgTCCAWkCAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRow +GAYDVQQDDBFQb2xhclNTTCBDZXJ0IE1ENTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMh0xMy5+bV56UXZFGCwfbuT8msenzOtDY+KPFZl5dxE2cxmhQfV ++CewSjXQY54Kbhu32vB+q+4MEJOGSRg086gq0lf1LtQvdymEYU2CUI+nlUhw9W5N +stUTw9Ia7eZD6kIU63TqwO0f1FdOqfOo7dLgwTBxMDIw1dP2CNBWT0aO8l/5PWeR +iDAuQrLfffvlDHf/7DHAeI+/wn/KrWwh1o3Zi2qOb+Cb+BBWzLOOExXmNARmx+75 +Ng5qlfYJmgZn9GVx+MqksSXg/jyLNQRnuuBPdoX8f/w2a7XpzS0DYk6zPQDPr3ag +aVaDatKo1OdQcea1NgV3BW17yOTE/UzVIV8CAwEAAaAAMA0GCSqGSIb3DQEBBAUA +A4IBAQBNEvxgn3Pc62hsMgMz33IdeNpazeK3ae2gwQQFgL7qMp/kskfpIKF4m8eB +YrmjKn9cqszRD606/ZtWYDwINUUc6O7bQGmpGIFd7bSPm/pbsajc6R7kzA/tD/bk +G5zqu9Bj0x92hEwdku0zY+Hx9PgT2dK8M72iFylHBwT3X1tNyXhh7xWJ9RlAfSvN +KdS6s3kRjK4qcir0MnflV5f2HD6r1v9cSVyme6eVLvOmup89z0cihH7NDwDJaYbi +oqcKXFbro8/2ruEzPUS6U8NA9cjlX9DW8buIu4cQACVx5YevlwKoayYfXcRRvIFo +OLiPq14TuZj3c0+HFOxWj4UBAjvI +-----END CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/cert_sha1.crt b/third_party/mbedtls/test/data/cert_sha1.crt new file mode 100644 index 000000000..1e23585c5 --- /dev/null +++ b/third_party/mbedtls/test/data/cert_sha1.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDQDCCAiigAwIBAgIBBzANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA9MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGzAZBgNVBAMMElBvbGFyU1NMIENlcnQgU0hBMTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6J +v7joRZDb7ogWUtPxQ1BHlhJZZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVB +Q3dfOXwJBEeCsFc5cO2j7BUZHqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYEl +XwqxU8YwfhU5rPla7n+SnqYFW+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk +65Wb3P5BXhem2mxbacwCuhQsFiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZP +cG6ezr1YieJTWZ5uWpJl4og/DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEA +AaNNMEswCQYDVR0TBAIwADAdBgNVHQ4EFgQUH3TWPynBdHRFOwUSLD2ovUNZAqYw +HwYDVR0jBBgwFoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQEFBQAD +ggEBAFAHuWfjOp+GaM5dP3NBaUayXmjbrsY5fo/ysfOVV9xipzbPWvE2Bu679iU1 +Eg+5hME9VlMmQejGzG09ReXE+30gyhtO3vWA8U21YrsL3ybvS6EREHGKk238bIBh +yDP/b0VuoNsS3xRn9WyH3TRu5re0vK68OSkLIWPd01fgvcfl6YyUY+WuuSrpYcDv +nrgKvFZws/EE4RNldtRC1Blwy497AtmWBQWs65zj5JkNdNnm4JJqXZAArNh2GSZo +83C/1ZSFrNo9GONsCJ0GVGEt7IK7FPqXYW7rXi30BRse33ziU7RPWGDT13bh9Rdz +RqsoZ5h5VjtHOnMUUD99gIWinBE= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/cert_sha224.crt b/third_party/mbedtls/test/data/cert_sha224.crt new file mode 100644 index 000000000..c8a209d0c --- /dev/null +++ b/third_party/mbedtls/test/data/cert_sha224.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDQjCCAiqgAwIBAgIBCDANBgkqhkiG9w0BAQ4FADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA/MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxHTAbBgNVBAMMFFBvbGFyU1NMIENlcnQgU0hBMjI0MIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVh +Xom/uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq +1UFDd185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPht +gSVfCrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1l +LGTrlZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsu +pk9wbp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQID +AQABo00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQfdNY/KcF0dEU7BRIsPai9Q1kC +pjAfBgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQ4F +AAOCAQEATdo7p7dok8gcxS0dYGluXMOsAEALyHAgvAJSZUt0x8RxemJfpquv4XG/ +rppQmtA5aPf59Fo0z5GcS0zzYFLTQIcLHKnuuG0W6yjhx3e+5J1hjLbv///vvKGN +jq55z+CANkragMk6XQ/t+iXkh/Fq00FS+zbf1JLaMXOLst5dfv3uPQaJHwzX/EaE +VdognXxWudNQgIvemindk9TTQon27zBS/z6nwcBCIXMDfesAjcHuBCfxl6pofK6E +28qs4up/JayptG2CX98LGsEyAgegwTMSYGLJoWcHhrUcbF0fNOcXPgQKGTcZO4Tg +yPYGbkG9FjgaASc2gTrYVPRZ6mY19g== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/cert_sha256.crt b/third_party/mbedtls/test/data/cert_sha256.crt new file mode 100644 index 000000000..e56d42853 --- /dev/null +++ b/third_party/mbedtls/test/data/cert_sha256.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDQjCCAiqgAwIBAgIBCTANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA/MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxHTAbBgNVBAMMFFBvbGFyU1NMIENlcnQgU0hBMjU2MIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVh +Xom/uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq +1UFDd185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPht +gSVfCrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1l +LGTrlZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsu +pk9wbp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQID +AQABo00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQfdNY/KcF0dEU7BRIsPai9Q1kC +pjAfBgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQsF +AAOCAQEAuo8kRDdQj3+rgqbz7bS3ZfBVCqgbQfruRZncP0s3IQJ6g7k6BNfCTO+N +tIgnCDhnhjK9DS4l1LTkQJKfcd6sfuwBxjHKWGZUqTqHWFm/O5MJwfMpxI305xXE +evDzh8LK1W3moX5OcT4bx3QsY9I4nqXQkOzjGidxhOXYA2v+X5OhRt3IJ2dzmQQu +BVXnDbzuchUfP5aeCwW6l7VX+RJOE2zlqO5yt0ejT02E44qtC5sBf24V9ko5LORw +1J7Zk34QwsKrSPSGxOuoWNwH3fJpgZQImKgJIQCsksJ+A45CK6iz0km8oTiI3Hoo +2LpE6UNx2M8jiZWVzH1L4tkg4fcCoQ== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/cert_sha384.crt b/third_party/mbedtls/test/data/cert_sha384.crt new file mode 100644 index 000000000..f8ec10b66 --- /dev/null +++ b/third_party/mbedtls/test/data/cert_sha384.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDQjCCAiqgAwIBAgIBCjANBgkqhkiG9w0BAQwFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA/MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxHTAbBgNVBAMMFFBvbGFyU1NMIENlcnQgU0hBMzg0MIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVh +Xom/uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq +1UFDd185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPht +gSVfCrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1l +LGTrlZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsu +pk9wbp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQID +AQABo00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQfdNY/KcF0dEU7BRIsPai9Q1kC +pjAfBgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQwF +AAOCAQEAeyHm+emo4/QHqEVKj/MYPOsPrrcr5MupNE7WmoUA7SilVUlceIy8ApWR +MUdwnh7UPkCa6K1yvayknEbHzD2Lv9BLEf5A1/a+F/LmFXiV0kXIFue13u+z7laV +N/s/jphPVgjPwZiC1ZtOoD7WvSkIInB53j4Q3VCH6EpZxZuDO/u8CGBQ0g+9Eqhn +W3+4GFnxUPYeN17u/opt16mEPx6WFbRl9hs5wUvND/FCDEJ/9uVNiVYlPYyHKzzq +e3WXCHLYUKGESQX+85IrnmlwbAb33bM+sAM6naFafXTZEimeEpX3iYrHzhoU7aR7 +piojwAE+Yb3Ac+Hu1fY4CRO4ZHL6Zg== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/cert_sha512.crt b/third_party/mbedtls/test/data/cert_sha512.crt new file mode 100644 index 000000000..b2254fa72 --- /dev/null +++ b/third_party/mbedtls/test/data/cert_sha512.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDQjCCAiqgAwIBAgIBCzANBgkqhkiG9w0BAQ0FADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA/MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxHTAbBgNVBAMMFFBvbGFyU1NMIENlcnQgU0hBNTEyMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVh +Xom/uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq +1UFDd185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPht +gSVfCrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1l +LGTrlZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsu +pk9wbp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQID +AQABo00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQfdNY/KcF0dEU7BRIsPai9Q1kC +pjAfBgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQ0F +AAOCAQEABnuq7gMU6EWqcmEcj2/wiqOFUBeH9ro0tni9JZzaDAKkBMwoeJ3RP/59 +wY92UZC/SoWPm0yLK25KTwxJhd645a5ZeRk+yi1SG+oXNgZFS03F1Orat0bM5u94 +RtzLRInGzTxhlVS8HPRya2+nEaPT9YNO25vORczPDjtrI82UnysaWiKx1OCPhdP3 +ZySAkX/zE1U8Te0+948C0vmg2aTWCSk5zutryFgHH5UojmmWAkBHpX3tIm8JMRG9 +tvp6fbIDan0LmSsVK8rq5OPSwAKMso6GF4Iuxou/jP2gI+NutenX26wrffSjlPiW +KksLNj8oL6vIUap28Oh+Gwph02biSQ== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/cert_v1_with_ext.crt b/third_party/mbedtls/test/data/cert_v1_with_ext.crt new file mode 100644 index 000000000..4f0704885 --- /dev/null +++ b/third_party/mbedtls/test/data/cert_v1_with_ext.crt @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIIDzTCCArUCCQC97UTH0j7CpDANBgkqhkiG9w0BAQUFADCBhzELMAkGA1UEBhMC +WFgxCzAJBgNVBAgTAlhYMQswCQYDVQQHEwJYWDELMAkGA1UEChMCWFgxCzAJBgNV +BAsTAlhYMScwJQYJKoZIhvcNAQkBFhhhZG1pbkBpZGVudGl0eS1jaGVjay5vcmcx +GzAZBgNVBAMTEmlkZW50aXR5LWNoZWNrLm9yZzAeFw0xMzA3MDQxNjE3MDJaFw0x +NDA3MDQxNjE3MDJaMIGHMQswCQYDVQQGEwJYWDELMAkGA1UECBMCWFgxCzAJBgNV +BAcTAlhYMQswCQYDVQQKEwJYWDELMAkGA1UECxMCWFgxJzAlBgkqhkiG9w0BCQEW +GGFkbWluQGlkZW50aXR5LWNoZWNrLm9yZzEbMBkGA1UEAxMSaWRlbnRpdHktY2hl +Y2sub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1v8FswMughO8 +mwkHWAf+XRpK33kYR0ifBnObvk2R9ZTEUk/TfFEEFVlen5xhiE0g8lbCj8Y5Mzsg +wZsJv5in/KnraYb7VC0ah0jx4sMkhKRcyUWfjyH8r7FNH1j1jd08ZpWJGotYxxaL +evqom1rzLN99JPObwyCCgGcQjlRV7cMfIgwlwHb/JPXOy/hYAgjrCjqvBu3nL5/b +HF0PyVGiKCEQiHhMBKNjAxzQrCUGy7Vp+3QlIYrs6/m5A96vohX/j+wzwIp3QgiK +Yhj5E4Zo/iQLf6Rwl7pL4RTdT+crcy143mYiShNY+ayl9snfVJNnuHaMe15fVEsP +X9lDvdBvXwIDAQABoz8wPTA7BgNVHREENDAyghJpZGVudGl0eS1jaGVjay5vcmeC +Fnd3dy5pZGVudGl0eS1jaGVjay5vcmeHBCU7/jAwDQYJKoZIhvcNAQEFBQADggEB +AAXUXoWlQxKvSCVWhes8x03MCude0nDqDFH1DPGIKeVeWOw87nVni+hIvy8II6hj +5ZfGSHuZci2AgElA3tXk2qDcZ/uBXe2VV4IwsgXKUYSlpz1xoU55InT4e7KdssEP +HOyrU03Dzm8Jk0PhgEJpV48tkWYoJvZvOiwG0e43UPDv9xp8C8EbvJmmuWkUWnNW +o0yDnoAOxGfUGSUQ1guTpWCoQEKj3DS4v4lI0kNmJm+oRE2vv1XealWEHSuMpRZO +Qhy8WImX3muw99MP579tY44D5Z7p3kpiC1bwV3tzkHdf5mkrAbFJIfliPvjMrPMw +2eyXXijDsebpT0w3ruMxjHg= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/cli-rsa-sha1.crt b/third_party/mbedtls/test/data/cli-rsa-sha1.crt new file mode 100644 index 000000000..60952e685 --- /dev/null +++ b/third_party/mbedtls/test/data/cli-rsa-sha1.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDPzCCAiegAwIBAgIBBDANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIENsaWVudCAyMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6f +M60Nj4o8VmXl3ETZzGaFB9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu +1C93KYRhTYJQj6eVSHD1bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEw +MjDV0/YI0FZPRo7yX/k9Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v +4Jv4EFbMs44TFeY0BGbH7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx/ +/DZrtenNLQNiTrM9AM+vdqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQAB +o00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBRxoQBzckAvVHZeM/xSj7zx3WtGITAf +BgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQUFAAOC +AQEAvhU1q5bKpkuxcYjjASRCARDUZz6X0BLr/j5S1bvdnHCzyLt30wViDNnAyO+Z +FW5S3t+WMU80nyvZ+q+WQWx9u8yHkPx1Mkju9kxrBNiFRSKKq4U7nvB0bEp1Coij +kaPkK6i4qpPQ4+CrPxoERIez4yqJUY5xaVMa8JIKEJPU3UX1P3AHCmIM97IbZ55m +xqG3gus0hL6I93ou0kxMF1G5DJP4kpa/UIvXG962EXYeKfBK3MPV/yL/5tXpyjqX +9mH7DmL3Haa2AVajx/5NGr/DKyL2aN4mG+IWO1NErUfOoR0aIDVd7q6LwD8DuKlI +e6dcSTeYJ8CzzzPXVfwnHjDi/g== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/cli-rsa-sha256-badalg.crt.der b/third_party/mbedtls/test/data/cli-rsa-sha256-badalg.crt.der new file mode 100644 index 0000000000000000000000000000000000000000..c40ba2a44b4c7a6d511eb40815cd9be1729619ce GIT binary patch literal 835 zcmXqLVzxJEVp3ng%*4pV#K>a6%f_kI=F#?@mywa1mBGN;klTQhjX9KsO_<5g$57CK zAH?C};RwjjNh}Hu_A!(+5C;h{^9aC%6hcyqOB9?P4dldm4J{3f3=IrTOiT>SqQrTP zkhumn1PzxmkboF22shk0Co?s#M8U|QiBSpJwT!F`%uS5^3_x)%rY1&4h7%=6&g}fT zweqFwO_78RwYw*O%9fjNyq34W%O))K=^dAwXVO~Pul`Wq;AMItc^+4u^!8gH>Q=ww z5t!WODPi(?h1R9;uX8kMIOHyy2Ilpoed0q1Az+3q% z;eIPWuXuau!9jyU10#d0m%njb2=jOA`xO7vHhp4;fu7T*`?bHH@|6F7V|bvVfB&KS zQ)_b+ul3&S&g#p5F#Cr<*qP0J!lKViSkjKa`)S6PHT4_kEVlG7sf9mIE!n90;Ga#m zDNFjU2mWQPf9n63Wp90XR+l-+Z?i4K`SoQBGQ*m)F0HuoJfQH|Rx{Re*4*k7PmcWc zxvCh?#LURRxY*ag8ytbM!YoV%3=Yrt-hG+jIQyf8+q?<^%;eBSV~e{?&V$dI3qA ziOk<;ojG|Rw!vKC#I4SwD_JLsUp&FP=~`xyU)?*_k`$9|mMJl(J|{Ny`A)d;;D_s! zCL1Qt6}#MJeSd7<8`Jsy{pqBx&tdxO#f{yB8HCp<{aShJ#NW&1sqZ4Dlsx(BzfgVI zhKt;rZ-{NXo}R3Gr~0A9&0h7l(n{~|n+ZNT!N7O?<*^+%yzNaL|Noih>0jGt@19{S z-t5A^epw{fN~6<}|L(@;bt~;?oFF!li={H@zcpC^Ry|n!Cxzsm>0;Z==`%5~%Hn?y~*Z!27Na9QbN29Ig$@$X( Db~{is literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/cli-rsa-sha256.crt b/third_party/mbedtls/test/data/cli-rsa-sha256.crt new file mode 100644 index 000000000..3b3d9bcd1 --- /dev/null +++ b/third_party/mbedtls/test/data/cli-rsa-sha256.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDPzCCAiegAwIBAgIBBDANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIENsaWVudCAyMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6f +M60Nj4o8VmXl3ETZzGaFB9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu +1C93KYRhTYJQj6eVSHD1bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEw +MjDV0/YI0FZPRo7yX/k9Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v +4Jv4EFbMs44TFeY0BGbH7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx/ +/DZrtenNLQNiTrM9AM+vdqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQAB +o00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBRxoQBzckAvVHZeM/xSj7zx3WtGITAf +BgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQsFAAOC +AQEAXidv1d4pLlBiKWED95rMycBdgDcgyNqJxakFkRfRyA2y1mlyTn7uBXRkNLY5 +ZFzK82GCjk2Q2OD4RZSCPAJJqLpHHU34t71ciffvy2KK81YvrxczRhMAE64i+qna +yP3Td2XuWJR05PVPoSemsNELs9gWttdnYy3ce+EY2Y0n7Rsi7982EeLIAA7H6ca4 +2Es/NUH//JZJT32OP0doMxeDRA+vplkKqTLLWf7dX26LIriBkBaRCgR5Yv9LBPFc +NOtpzu/LbrY7QFXKJMI+JXDudCsOn8KCmiA4d6Emisqfh3V3485l7HEQNcvLTxlD +6zDQyi0/ykYUYZkwQTK1N2Nvlw== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/cli-rsa-sha256.crt.der b/third_party/mbedtls/test/data/cli-rsa-sha256.crt.der new file mode 100644 index 0000000000000000000000000000000000000000..e2739e951082ad97d2ba14b6536eaac33cb424b0 GIT binary patch literal 835 zcmXqLVzxJEVp3ng%*4pV#K>a6%f_kI=F#?@mywa1mBGN;klTQhjX9KsO_<5g$57CK zAH?C};RwjjNh}Hu_A!(+5C;h{^9aC%6hcyqOB9?P4dldm4J{3f3=IrTOiT>SqQrTP zkhumn1PzxmkboF22shk0Co?s#M8U|QiBSpJwT!F`%uS5^3_x)%rY1&4h7%=6&g}fT zweqFwO_78RwYw*O%9fjNyq34W%O))K=^dAwXVO~Pul`Wq;AMItc^+4u^!8gH>Q=ww z5t!WODPi(?h1R9;uX8kMIOHyy2Ilpoed0q1Az+3q% z;eIPWuXuau!9jyU10#d0m%njb2=jOA`xO7vHhp4;fu7T*`?bHH@|6F7V|bvVfB&KS zQ)_b+ul3&S&g#p5F#Cr<*qP0J!lKViSkjKa`)S6PHT4_kEVlG7sf9mIE!n90;Ga#m zDNFjU2mWQPf9n63Wp90XR+l-+Z?i4K`SoQBGQ*m)F0HuoJfQH|Rx{Re*4*k7PmcWc zxvCh?#LURRxY*ag8ytbM!YoV%3=Yrt-hG+jIQyf8+oMCJ$hMGcv@f=U=_2sTYu> znaKQo)|rzBVjIjAPTcA|x{`IG_{9^vo33RR`PIE+ElDxiW|T_aKpYMbl4}Q2# zX|iGRT(Qet*7wKuy)m8N-=9wE`W&XeUfkGCm_c}*(yx`bPW-)Gp876gO39P2{tMNY zZMew2`G(lG>*>k5cd8#s-0W3|An>z74xtu#6v`R{IgUboVY#tC8*xmYTb{(G~0j4^qgdG7t`ylvJFp{G<1*{K%1 zE79hgf2e7ef<^g4wXRe1+e^zIpG$pHC}4W}w7;bDYl91?bnQ>Mi6qW6a5UO#o}51& E0CFEtFaQ7m literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/cli-rsa-sha256.key.der b/third_party/mbedtls/test/data/cli-rsa-sha256.key.der new file mode 100644 index 0000000000000000000000000000000000000000..8ef5a0464a6f427cfd0f08512855e1faa0556d7c GIT binary patch literal 1192 zcmV;Z1Xueof&`=j0RRGm0RaHWbi~ZL`L%iJMcEW!uzkCe@@pQSGp!Aeiab_j<=jNs z%w~lL)%Yi{N;S}9o(gUox7zT2tL_XClZHtcH1nt`(pU8^)Gv1_gkepBP>-jTNO1LT zO|sP!!_pe<=0oa26zg>A!0jK@S5B$(sO{3=!7y;}k%%xZ zLbBg|`{fLG|Lifqc#prrf6A?FA=ZuAi)xN<;G6gmR?M@G6BXt(1ZKzX`8Ez}mG%jm z250nTarnxlu_fUCJc~61XS(1|c7^CG(zVotL?0MD;>plMcvYSO6G=TLFx zwKfHJ1#NrCCaFN-;Q-)&Kf|$n-o8S*2Z0m9 z;1LlcEcmi|I@IKSU%9au`W+pYk=X>EyvelJeGXLikI*O$-FHi91V~|Z6$2YJt&aR8 z5eMoQTHYCG|F(yJfGS@MSh`<90)c@5;{&h$n9>V-a_KvcyruT64OyiB;phmwr>wIo!OYt0)c@5 z;tc!4Gn+?t60a_G4Q$BlXn>Vc(*kSTF=4E410#Mt?~4PtfYuphb#ei;S#u zUivm=KDunWUTcymUTP24(xsJ#+H%F7$!j-WOPhD$XBr+b*gnbAOcq!6k zl3Oo$WJ;o@Yd%o1da;dJv{kyck%gl#0)c=K9vSDnm*pbOq|1u6&>pm9%tfbq?GBkK z(41iuxMGVjYq~QnWhmG-ZdB~4AU#pxEJDOm@TNL)ledPc{`PbS5>0zinIC#q=^!r{ zG%1(c2JY*>y)jSvP_ep6v&0<(uCUy`io}qkD4VuI2^-can;GechuNPs1*?&dZG4de zfq?*&SMcB{{k`*?Lrp&YH%}u{jp0oGOjUq_xfGsCA_;orP_CCH0&Xw~{Lq zuw7xIsx*AfR4r);_uKrOhv+)?9ZYJ26)*t;fq?*=Q=zsmzy|f-T+vES$h~bc@m}RS zaL}mbL04>tQxEGXpkj|hV(cz#aaCJt^mG*JdIR?Sq|U^w+8yw-jTNO1LT zO|sP!!_pe<=0oa26zg>A!0jK@S5B$(sO{3=!7y;}k%%xZ zLbBg|`{fLG|Lifqc#prrf6A?FA=ZuAi)xN<;G6gmR?M@G6BXt(1ZKzX`8Ez}mG%jm z250nTarnxlu_fUCJc~61XS(1|c7^CG(zVotL?0MD;>plMcvYSO6G=TLFx zwKfHJ1#NrCCaFN-;Q-)&Kf|$n-o8S*2Z0m9 z;1LlcEcmi|I@IKSU%9au`W+pYk=X>EyvelJeGXLikI*O$-FHi91V~|Z6$2YJt&aR8 z5eMoQTHYCG|F(yJfGS@MSh`<90)c@5;{&h$n9>V-a_KvcyruT64OyiB;phmwr>wIo!OYt0)c@5 z;tc!4Gn+?t60a_G4Q$BlXn>Vc(*kSTF=4E410#Mt?~4PtfYuphb#ei;S#u zUivm=KDunWUTcymUTP24(xsJ#+H%F7$!j-WOPhD$XBr+b*gnbAOcq!6k zl3Oo$WJ;o@Yd%o1da;dJv{kyck%gl#0)c=K9vSDnm*pbOq|1u6&>pm9%tfbq?GBkK z(41iuxMGVjYq~QnWhmG-ZdB~4AU#pxEJDOm@TNL)ledPc{`PbS5>0zinIC#q=^!r{ zG%1(c2JY*>y)jSvP_ep6v&0<(uCUy`io}qkD4VuI2^-can;GechuNPs1*?&dZG4de zfq?*&SMcB{{k`*?Lrp&YH%}u{jp0oGOjUq_xfGsCA_;orP_CCH0&Xw~{Lq zuw7xIsx*AfR4r);_uKrOhv+)?9ZYJ26)*t;fq?*=Q=zsmzy|f-T+vES$h~bc@m}RS zaL}mbL04>tQxEGXpkj|hV(cz#aaCJt^mG*JdIR?Sq|U^w+8ywXLe#>34gk7WAXjV zYj#iG(fD6z-MeSOYtDrRe>34bqxU#jmHYmTN1tO7%%&Zi)>t8O@D6dp2d zrn8`ZzzeV3weQ{qCN12sx%Id46AjDwbCXn58(AAqX7CiwIDA%5iOIn9cad$iRIXKz t@s1Wb*39^i6BipTnc83E(Eqcl!Kxv3ck+v6J5uTwuChF-JUjbp3IJ}#o2UQ) literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/cli2.key b/third_party/mbedtls/test/data/cli2.key new file mode 100644 index 000000000..e747d0943 --- /dev/null +++ b/third_party/mbedtls/test/data/cli2.key @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIPb3hmTxZ3/mZI3vyk7p3U3wBf+WIop6hDhkFzJhmLcqoAoGCCqGSM49 +AwEHoUQDQgAEV+WusXPf06y7k7iB/xKu7uZTrM5VU/Y0Dswu42MlC9+Y4vNcYDaW +wNUYFHDlf5/VS0UY5bBs1Vz4lo+HcKPkxw== +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/cli2.key.der b/third_party/mbedtls/test/data/cli2.key.der new file mode 100644 index 0000000000000000000000000000000000000000..acba6a027604b8c80da7e9179c04a4316477e9fa GIT binary patch literal 121 zcmV-<0EYiCcLD(c1R(bJhGg+)f97P3@5)Z;-A(WX|CS<(dW1M+7cya(w<@3t1_&yK zNX|V20SBQ(13~} c${ME}.pem + + rm ${ME}.csr + i=$((i+1)) +done diff --git a/third_party/mbedtls/test/data/dir1/test-ca.crt b/third_party/mbedtls/test/data/dir1/test-ca.crt new file mode 100644 index 000000000..3c1d14cd2 --- /dev/null +++ b/third_party/mbedtls/test/data/dir1/test-ca.crt @@ -0,0 +1,80 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 0 (0x0) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=NL, O=PolarSSL, CN=PolarSSL Test CA + Validity + Not Before: Feb 12 14:44:00 2011 GMT + Not After : Feb 12 14:44:00 2021 GMT + Subject: C=NL, O=PolarSSL, CN=PolarSSL Test CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:c0:df:37:fc:17:bb:e0:96:9d:3f:86:de:96:32: + 7d:44:a5:16:a0:cd:21:f1:99:d4:ec:ea:cb:7c:18: + 58:08:94:a5:ec:9b:c5:8b:df:1a:1e:99:38:99:87: + 1e:7b:c0:8d:39:df:38:5d:70:78:07:d3:9e:d9:93: + e8:b9:72:51:c5:ce:a3:30:52:a9:f2:e7:40:70:14: + cb:44:a2:72:0b:c2:e5:40:f9:3e:e5:a6:0e:b3:f9: + ec:4a:63:c0:b8:29:00:74:9c:57:3b:a8:a5:04:90: + 71:f1:bd:83:d9:3f:d6:a5:e2:3c:2a:8f:ef:27:60: + c3:c6:9f:cb:ba:ec:60:7d:b7:e6:84:32:be:4f:fb: + 58:26:22:03:5b:d4:b4:d5:fb:f5:e3:96:2e:70:c0: + e4:2e:bd:fc:2e:ee:e2:41:55:c0:34:2e:7d:24:72: + 69:cb:47:b1:14:40:83:7d:67:f4:86:f6:31:ab:f1: + 79:a4:b2:b5:2e:12:f9:84:17:f0:62:6f:27:3e:13: + 58:b1:54:0d:21:9a:73:37:a1:30:cf:6f:92:dc:f6: + e9:fc:ac:db:2e:28:d1:7e:02:4b:23:a0:15:f2:38: + 65:64:09:ea:0c:6e:8e:1b:17:a0:71:c8:b3:9b:c9: + ab:e9:c3:f2:cf:87:96:8f:80:02:32:9e:99:58:6f: + a2:d5 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:TRUE + X509v3 Subject Key Identifier: + B4:5A:E4:A5:B3:DE:D2:52:F6:B9:D5:A6:95:0F:EB:3E:BC:C7:FD:FF + X509v3 Authority Key Identifier: + keyid:B4:5A:E4:A5:B3:DE:D2:52:F6:B9:D5:A6:95:0F:EB:3E:BC:C7:FD:FF + DirName:/C=NL/O=PolarSSL/CN=PolarSSL Test CA + serial:00 + + Signature Algorithm: sha1WithRSAEncryption + b8:fd:54:d8:00:54:90:8b:25:b0:27:dd:95:cd:a2:f7:84:07: + 1d:87:89:4a:c4:78:11:d8:07:b5:d7:22:50:8e:48:eb:62:7a: + 32:89:be:63:47:53:ff:b6:be:f1:2e:8c:54:c0:99:3f:a0:b9: + 37:23:72:5f:0d:46:59:8f:d8:47:cd:97:4c:9f:07:0c:12:62: + 09:3a:24:e4:36:d9:e9:2c:da:38:d0:73:75:61:d7:c1:6c:26: + 8b:9b:e0:d5:dc:67:ed:8c:6b:33:d7:74:22:3c:4c:db:b5:8d: + 2a:ce:2c:0d:08:59:05:09:05:a6:39:9f:b3:67:1b:e2:83:e5: + e1:8f:53:f6:67:93:c7:f9:6f:76:44:58:12:e8:3a:d4:97:e7: + e9:c0:3e:a8:7a:72:3d:87:53:1f:e5:2c:84:84:e7:9a:9e:7f: + 66:d9:1f:9b:f5:13:48:b0:4d:14:d1:de:b2:24:d9:78:7d:f5: + 35:cc:58:19:d1:d2:99:ef:4d:73:f8:1f:89:d4:5a:d0:52:ce: + 09:f5:b1:46:51:6a:00:8e:3b:cc:6f:63:01:00:99:ed:9d:a6: + 08:60:cd:32:18:d0:73:e0:58:71:d9:e5:d2:53:d7:8d:d0:ca: + e9:5d:2a:0a:0d:5d:55:ec:21:50:17:16:e6:06:4a:cd:5e:de: + f7:e0:e9:54 +-----BEGIN CERTIFICATE----- +MIIDhzCCAm+gAwIBAgIBADANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTEwMjEyMTQ0NDAwWhcNMjEwMjEyMTQ0NDAwWjA7MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA3zf8F7vglp0/ht6WMn1EpRagzSHx +mdTs6st8GFgIlKXsm8WL3xoemTiZhx57wI053zhdcHgH057Zk+i5clHFzqMwUqny +50BwFMtEonILwuVA+T7lpg6z+exKY8C4KQB0nFc7qKUEkHHxvYPZP9al4jwqj+8n +YMPGn8u67GB9t+aEMr5P+1gmIgNb1LTV+/Xjli5wwOQuvfwu7uJBVcA0Ln0kcmnL +R7EUQIN9Z/SG9jGr8XmksrUuEvmEF/Bibyc+E1ixVA0hmnM3oTDPb5Lc9un8rNsu +KNF+AksjoBXyOGVkCeoMbo4bF6BxyLObyavpw/LPh5aPgAIynplYb6LVAgMBAAGj +gZUwgZIwDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUtFrkpbPe0lL2udWmlQ/rPrzH +/f8wYwYDVR0jBFwwWoAUtFrkpbPe0lL2udWmlQ/rPrzH/f+hP6Q9MDsxCzAJBgNV +BAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEZMBcGA1UEAxMQUG9sYXJTU0wgVGVz +dCBDQYIBADANBgkqhkiG9w0BAQUFAAOCAQEAuP1U2ABUkIslsCfdlc2i94QHHYeJ +SsR4EdgHtdciUI5I62J6Mom+Y0dT/7a+8S6MVMCZP6C5NyNyXw1GWY/YR82XTJ8H +DBJiCTok5DbZ6SzaONBzdWHXwWwmi5vg1dxn7YxrM9d0IjxM27WNKs4sDQhZBQkF +pjmfs2cb4oPl4Y9T9meTx/lvdkRYEug61Jfn6cA+qHpyPYdTH+UshITnmp5/Ztkf +m/UTSLBNFNHesiTZeH31NcxYGdHSme9Nc/gfidRa0FLOCfWxRlFqAI47zG9jAQCZ +7Z2mCGDNMhjQc+BYcdnl0lPXjdDK6V0qCg1dVewhUBcW5gZKzV7e9+DpVA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir2/test-ca.crt b/third_party/mbedtls/test/data/dir2/test-ca.crt new file mode 100644 index 000000000..3c1d14cd2 --- /dev/null +++ b/third_party/mbedtls/test/data/dir2/test-ca.crt @@ -0,0 +1,80 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 0 (0x0) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=NL, O=PolarSSL, CN=PolarSSL Test CA + Validity + Not Before: Feb 12 14:44:00 2011 GMT + Not After : Feb 12 14:44:00 2021 GMT + Subject: C=NL, O=PolarSSL, CN=PolarSSL Test CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:c0:df:37:fc:17:bb:e0:96:9d:3f:86:de:96:32: + 7d:44:a5:16:a0:cd:21:f1:99:d4:ec:ea:cb:7c:18: + 58:08:94:a5:ec:9b:c5:8b:df:1a:1e:99:38:99:87: + 1e:7b:c0:8d:39:df:38:5d:70:78:07:d3:9e:d9:93: + e8:b9:72:51:c5:ce:a3:30:52:a9:f2:e7:40:70:14: + cb:44:a2:72:0b:c2:e5:40:f9:3e:e5:a6:0e:b3:f9: + ec:4a:63:c0:b8:29:00:74:9c:57:3b:a8:a5:04:90: + 71:f1:bd:83:d9:3f:d6:a5:e2:3c:2a:8f:ef:27:60: + c3:c6:9f:cb:ba:ec:60:7d:b7:e6:84:32:be:4f:fb: + 58:26:22:03:5b:d4:b4:d5:fb:f5:e3:96:2e:70:c0: + e4:2e:bd:fc:2e:ee:e2:41:55:c0:34:2e:7d:24:72: + 69:cb:47:b1:14:40:83:7d:67:f4:86:f6:31:ab:f1: + 79:a4:b2:b5:2e:12:f9:84:17:f0:62:6f:27:3e:13: + 58:b1:54:0d:21:9a:73:37:a1:30:cf:6f:92:dc:f6: + e9:fc:ac:db:2e:28:d1:7e:02:4b:23:a0:15:f2:38: + 65:64:09:ea:0c:6e:8e:1b:17:a0:71:c8:b3:9b:c9: + ab:e9:c3:f2:cf:87:96:8f:80:02:32:9e:99:58:6f: + a2:d5 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:TRUE + X509v3 Subject Key Identifier: + B4:5A:E4:A5:B3:DE:D2:52:F6:B9:D5:A6:95:0F:EB:3E:BC:C7:FD:FF + X509v3 Authority Key Identifier: + keyid:B4:5A:E4:A5:B3:DE:D2:52:F6:B9:D5:A6:95:0F:EB:3E:BC:C7:FD:FF + DirName:/C=NL/O=PolarSSL/CN=PolarSSL Test CA + serial:00 + + Signature Algorithm: sha1WithRSAEncryption + b8:fd:54:d8:00:54:90:8b:25:b0:27:dd:95:cd:a2:f7:84:07: + 1d:87:89:4a:c4:78:11:d8:07:b5:d7:22:50:8e:48:eb:62:7a: + 32:89:be:63:47:53:ff:b6:be:f1:2e:8c:54:c0:99:3f:a0:b9: + 37:23:72:5f:0d:46:59:8f:d8:47:cd:97:4c:9f:07:0c:12:62: + 09:3a:24:e4:36:d9:e9:2c:da:38:d0:73:75:61:d7:c1:6c:26: + 8b:9b:e0:d5:dc:67:ed:8c:6b:33:d7:74:22:3c:4c:db:b5:8d: + 2a:ce:2c:0d:08:59:05:09:05:a6:39:9f:b3:67:1b:e2:83:e5: + e1:8f:53:f6:67:93:c7:f9:6f:76:44:58:12:e8:3a:d4:97:e7: + e9:c0:3e:a8:7a:72:3d:87:53:1f:e5:2c:84:84:e7:9a:9e:7f: + 66:d9:1f:9b:f5:13:48:b0:4d:14:d1:de:b2:24:d9:78:7d:f5: + 35:cc:58:19:d1:d2:99:ef:4d:73:f8:1f:89:d4:5a:d0:52:ce: + 09:f5:b1:46:51:6a:00:8e:3b:cc:6f:63:01:00:99:ed:9d:a6: + 08:60:cd:32:18:d0:73:e0:58:71:d9:e5:d2:53:d7:8d:d0:ca: + e9:5d:2a:0a:0d:5d:55:ec:21:50:17:16:e6:06:4a:cd:5e:de: + f7:e0:e9:54 +-----BEGIN CERTIFICATE----- +MIIDhzCCAm+gAwIBAgIBADANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTEwMjEyMTQ0NDAwWhcNMjEwMjEyMTQ0NDAwWjA7MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA3zf8F7vglp0/ht6WMn1EpRagzSHx +mdTs6st8GFgIlKXsm8WL3xoemTiZhx57wI053zhdcHgH057Zk+i5clHFzqMwUqny +50BwFMtEonILwuVA+T7lpg6z+exKY8C4KQB0nFc7qKUEkHHxvYPZP9al4jwqj+8n +YMPGn8u67GB9t+aEMr5P+1gmIgNb1LTV+/Xjli5wwOQuvfwu7uJBVcA0Ln0kcmnL +R7EUQIN9Z/SG9jGr8XmksrUuEvmEF/Bibyc+E1ixVA0hmnM3oTDPb5Lc9un8rNsu +KNF+AksjoBXyOGVkCeoMbo4bF6BxyLObyavpw/LPh5aPgAIynplYb6LVAgMBAAGj +gZUwgZIwDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUtFrkpbPe0lL2udWmlQ/rPrzH +/f8wYwYDVR0jBFwwWoAUtFrkpbPe0lL2udWmlQ/rPrzH/f+hP6Q9MDsxCzAJBgNV +BAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEZMBcGA1UEAxMQUG9sYXJTU0wgVGVz +dCBDQYIBADANBgkqhkiG9w0BAQUFAAOCAQEAuP1U2ABUkIslsCfdlc2i94QHHYeJ +SsR4EdgHtdciUI5I62J6Mom+Y0dT/7a+8S6MVMCZP6C5NyNyXw1GWY/YR82XTJ8H +DBJiCTok5DbZ6SzaONBzdWHXwWwmi5vg1dxn7YxrM9d0IjxM27WNKs4sDQhZBQkF +pjmfs2cb4oPl4Y9T9meTx/lvdkRYEug61Jfn6cA+qHpyPYdTH+UshITnmp5/Ztkf +m/UTSLBNFNHesiTZeH31NcxYGdHSme9Nc/gfidRa0FLOCfWxRlFqAI47zG9jAQCZ +7Z2mCGDNMhjQc+BYcdnl0lPXjdDK6V0qCg1dVewhUBcW5gZKzV7e9+DpVA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir2/test-ca2.crt b/third_party/mbedtls/test/data/dir2/test-ca2.crt new file mode 100644 index 000000000..d41a420ef --- /dev/null +++ b/third_party/mbedtls/test/data/dir2/test-ca2.crt @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICUjCCAdegAwIBAgIJAMFD4n5iQ8zoMAoGCCqGSM49BAMCMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTAeFw0xMzA5MjQxNTQ5NDhaFw0yMzA5MjIxNTQ5NDhaMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBu +ww5XUzM5WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiy +aY7zQa0pw7RfdadHb9UZKVVpmlM7ILRmFmAzHqOBoDCBnTAdBgNVHQ4EFgQUnW0g +JEkBPyvLeLUZvH4kydv7NnwwbgYDVR0jBGcwZYAUnW0gJEkBPyvLeLUZvH4kydv7 +NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UE +AxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAwGA1UdEwQFMAMBAf8w +CgYIKoZIzj0EAwIDaQAwZgIxAMO0YnNWKJUAfXgSJtJxexn4ipg+kv4znuR50v56 +t4d0PCu412mUC6Nnd7izvtE2MgIxAP1nnJQjZ8BWukszFQDG48wxCCyci9qpdSMv +uCjn8pwUOkABXK8Mss90fzCfCEOtIA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir3/Readme b/third_party/mbedtls/test/data/dir3/Readme new file mode 100644 index 000000000..189dadc89 --- /dev/null +++ b/third_party/mbedtls/test/data/dir3/Readme @@ -0,0 +1 @@ +This is just to make sure files that don't parse as certs are ignored. diff --git a/third_party/mbedtls/test/data/dir3/test-ca.crt b/third_party/mbedtls/test/data/dir3/test-ca.crt new file mode 100644 index 000000000..3c1d14cd2 --- /dev/null +++ b/third_party/mbedtls/test/data/dir3/test-ca.crt @@ -0,0 +1,80 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 0 (0x0) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=NL, O=PolarSSL, CN=PolarSSL Test CA + Validity + Not Before: Feb 12 14:44:00 2011 GMT + Not After : Feb 12 14:44:00 2021 GMT + Subject: C=NL, O=PolarSSL, CN=PolarSSL Test CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:c0:df:37:fc:17:bb:e0:96:9d:3f:86:de:96:32: + 7d:44:a5:16:a0:cd:21:f1:99:d4:ec:ea:cb:7c:18: + 58:08:94:a5:ec:9b:c5:8b:df:1a:1e:99:38:99:87: + 1e:7b:c0:8d:39:df:38:5d:70:78:07:d3:9e:d9:93: + e8:b9:72:51:c5:ce:a3:30:52:a9:f2:e7:40:70:14: + cb:44:a2:72:0b:c2:e5:40:f9:3e:e5:a6:0e:b3:f9: + ec:4a:63:c0:b8:29:00:74:9c:57:3b:a8:a5:04:90: + 71:f1:bd:83:d9:3f:d6:a5:e2:3c:2a:8f:ef:27:60: + c3:c6:9f:cb:ba:ec:60:7d:b7:e6:84:32:be:4f:fb: + 58:26:22:03:5b:d4:b4:d5:fb:f5:e3:96:2e:70:c0: + e4:2e:bd:fc:2e:ee:e2:41:55:c0:34:2e:7d:24:72: + 69:cb:47:b1:14:40:83:7d:67:f4:86:f6:31:ab:f1: + 79:a4:b2:b5:2e:12:f9:84:17:f0:62:6f:27:3e:13: + 58:b1:54:0d:21:9a:73:37:a1:30:cf:6f:92:dc:f6: + e9:fc:ac:db:2e:28:d1:7e:02:4b:23:a0:15:f2:38: + 65:64:09:ea:0c:6e:8e:1b:17:a0:71:c8:b3:9b:c9: + ab:e9:c3:f2:cf:87:96:8f:80:02:32:9e:99:58:6f: + a2:d5 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:TRUE + X509v3 Subject Key Identifier: + B4:5A:E4:A5:B3:DE:D2:52:F6:B9:D5:A6:95:0F:EB:3E:BC:C7:FD:FF + X509v3 Authority Key Identifier: + keyid:B4:5A:E4:A5:B3:DE:D2:52:F6:B9:D5:A6:95:0F:EB:3E:BC:C7:FD:FF + DirName:/C=NL/O=PolarSSL/CN=PolarSSL Test CA + serial:00 + + Signature Algorithm: sha1WithRSAEncryption + b8:fd:54:d8:00:54:90:8b:25:b0:27:dd:95:cd:a2:f7:84:07: + 1d:87:89:4a:c4:78:11:d8:07:b5:d7:22:50:8e:48:eb:62:7a: + 32:89:be:63:47:53:ff:b6:be:f1:2e:8c:54:c0:99:3f:a0:b9: + 37:23:72:5f:0d:46:59:8f:d8:47:cd:97:4c:9f:07:0c:12:62: + 09:3a:24:e4:36:d9:e9:2c:da:38:d0:73:75:61:d7:c1:6c:26: + 8b:9b:e0:d5:dc:67:ed:8c:6b:33:d7:74:22:3c:4c:db:b5:8d: + 2a:ce:2c:0d:08:59:05:09:05:a6:39:9f:b3:67:1b:e2:83:e5: + e1:8f:53:f6:67:93:c7:f9:6f:76:44:58:12:e8:3a:d4:97:e7: + e9:c0:3e:a8:7a:72:3d:87:53:1f:e5:2c:84:84:e7:9a:9e:7f: + 66:d9:1f:9b:f5:13:48:b0:4d:14:d1:de:b2:24:d9:78:7d:f5: + 35:cc:58:19:d1:d2:99:ef:4d:73:f8:1f:89:d4:5a:d0:52:ce: + 09:f5:b1:46:51:6a:00:8e:3b:cc:6f:63:01:00:99:ed:9d:a6: + 08:60:cd:32:18:d0:73:e0:58:71:d9:e5:d2:53:d7:8d:d0:ca: + e9:5d:2a:0a:0d:5d:55:ec:21:50:17:16:e6:06:4a:cd:5e:de: + f7:e0:e9:54 +-----BEGIN CERTIFICATE----- +MIIDhzCCAm+gAwIBAgIBADANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTEwMjEyMTQ0NDAwWhcNMjEwMjEyMTQ0NDAwWjA7MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA3zf8F7vglp0/ht6WMn1EpRagzSHx +mdTs6st8GFgIlKXsm8WL3xoemTiZhx57wI053zhdcHgH057Zk+i5clHFzqMwUqny +50BwFMtEonILwuVA+T7lpg6z+exKY8C4KQB0nFc7qKUEkHHxvYPZP9al4jwqj+8n +YMPGn8u67GB9t+aEMr5P+1gmIgNb1LTV+/Xjli5wwOQuvfwu7uJBVcA0Ln0kcmnL +R7EUQIN9Z/SG9jGr8XmksrUuEvmEF/Bibyc+E1ixVA0hmnM3oTDPb5Lc9un8rNsu +KNF+AksjoBXyOGVkCeoMbo4bF6BxyLObyavpw/LPh5aPgAIynplYb6LVAgMBAAGj +gZUwgZIwDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUtFrkpbPe0lL2udWmlQ/rPrzH +/f8wYwYDVR0jBFwwWoAUtFrkpbPe0lL2udWmlQ/rPrzH/f+hP6Q9MDsxCzAJBgNV +BAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEZMBcGA1UEAxMQUG9sYXJTU0wgVGVz +dCBDQYIBADANBgkqhkiG9w0BAQUFAAOCAQEAuP1U2ABUkIslsCfdlc2i94QHHYeJ +SsR4EdgHtdciUI5I62J6Mom+Y0dT/7a+8S6MVMCZP6C5NyNyXw1GWY/YR82XTJ8H +DBJiCTok5DbZ6SzaONBzdWHXwWwmi5vg1dxn7YxrM9d0IjxM27WNKs4sDQhZBQkF +pjmfs2cb4oPl4Y9T9meTx/lvdkRYEug61Jfn6cA+qHpyPYdTH+UshITnmp5/Ztkf +m/UTSLBNFNHesiTZeH31NcxYGdHSme9Nc/gfidRa0FLOCfWxRlFqAI47zG9jAQCZ +7Z2mCGDNMhjQc+BYcdnl0lPXjdDK6V0qCg1dVewhUBcW5gZKzV7e9+DpVA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir3/test-ca2.crt b/third_party/mbedtls/test/data/dir3/test-ca2.crt new file mode 100644 index 000000000..d41a420ef --- /dev/null +++ b/third_party/mbedtls/test/data/dir3/test-ca2.crt @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICUjCCAdegAwIBAgIJAMFD4n5iQ8zoMAoGCCqGSM49BAMCMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTAeFw0xMzA5MjQxNTQ5NDhaFw0yMzA5MjIxNTQ5NDhaMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBu +ww5XUzM5WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiy +aY7zQa0pw7RfdadHb9UZKVVpmlM7ILRmFmAzHqOBoDCBnTAdBgNVHQ4EFgQUnW0g +JEkBPyvLeLUZvH4kydv7NnwwbgYDVR0jBGcwZYAUnW0gJEkBPyvLeLUZvH4kydv7 +NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UE +AxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAwGA1UdEwQFMAMBAf8w +CgYIKoZIzj0EAwIDaQAwZgIxAMO0YnNWKJUAfXgSJtJxexn4ipg+kv4znuR50v56 +t4d0PCu412mUC6Nnd7izvtE2MgIxAP1nnJQjZ8BWukszFQDG48wxCCyci9qpdSMv +uCjn8pwUOkABXK8Mss90fzCfCEOtIA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/Readme b/third_party/mbedtls/test/data/dir4/Readme new file mode 100644 index 000000000..3f1f610b9 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/Readme @@ -0,0 +1,47 @@ +This directory contains the certificates for the tests targeting the enforcement of the policy indicated by the *pathLenConstraint* field. All leaf elements were generated with *is_ca* unset and all roots with the *selfsign=1* option. + +1. zero pathlen constraint on an intermediate CA (invalid) +``` +cert11.crt -> cert12.crt (max_pathlen=0) -> cert13.crt -> cert14.crt +``` + +2. zero pathlen constraint on the root CA (invalid) +``` +cert21.crt (max_pathlen=0) -> cert22.crt -> cert23.crt +``` + +3. nonzero pathlen constraint on the root CA (invalid) +``` +cert31.crt (max_pathlen=1) -> cert32.crt -> cert33.crt -> cert34.crt +``` + +4. nonzero pathlen constraint on an intermediate CA (invalid) +``` +cert41.crt -> cert42.crt (max_pathlen=1) -> cert43.crt -> cert44.crt -> cert45.crt +``` + +5. nonzero pathlen constraint on an intermediate CA with maximum number of elements in the chain (valid) +``` +cert51.crt -> cert52.crt (max_pathlen=1) -> cert53.crt -> cert54.crt +``` + +6. nonzero pathlen constraint on the root CA with maximum number of elements in the chain (valid) +``` +cert61.crt (max_pathlen=1) -> cert62.crt -> cert63.crt +``` + +7. pathlen constraint on the root CA with maximum number of elements and a self signed certificate in the chain (valid) +(This situation happens for example when a root of some hierarchy gets integrated into another hierarchy. In this case the certificates issued before the integration will have an intermadiate self signed certificate in their chain) +``` +cert71.crt (max_pathlen=1) -> cert72.crt -> cert73.crt (self signed) -> cert74.crt -> cert74.crt +``` + +8. zero pathlen constraint on first intermediate CA (valid) +``` +cert81.crt -> cert82.crt (max_pathlen=0) -> cert83.crt +``` + +9. zero pathlen constraint on trusted root (valid) +``` +cert91.crt (max_pathlen=0) -> cert92.crt +``` diff --git a/third_party/mbedtls/test/data/dir4/cert11.crt b/third_party/mbedtls/test/data/dir4/cert11.crt new file mode 100644 index 000000000..3077c3da4 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert11.crt @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC9zCCAd+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtUZXN0 +IHJvb3QgMjAeFw0wMTAxMDEwMDAwMDBaFw0zMDEyMzEyMzU5NTlaMBYxFDASBgNV +BAMTC1Rlc3Qgcm9vdCAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +hqLw+KDH8+tkX9hphnydOZFoueGTY5v8WdYI6KZXoIln9IAu4Rmb6M59uLziXurg +VKuwBqOkbUZsIY0NOA6C8FpdjZL1di8Viq669vBBs9c+x9hKpx8/VVcZfTaGgqni +h5XiivQynBQ4E2KOxEQ+VjUMDqIBHYG1VXWs4KMkAeJsqDYHtmS4XsC9TXTIri5S +9IX4mE5A9+ngSTo0/6Sjwcd27uO2IQHXDC7jkxX5OH5jFPAqsVKTYDeWlCU7bvbr +iy1H9Z9uCl+M7unbAl8BKQ8leOnno3KO3lQQAPGP2EFRT0XMuUXJnfydPbzMa9FY +ufB1I8zCBZviPvO/Of3yrwIDAQABo1AwTjAMBgNVHRMEBTADAQEBMB0GA1UdDgQW +BBSUHSH6gjrYFZnS1gDvk7BpfwTKwDAfBgNVHSMEGDAWgBSUHSH6gjrYFZnS1gDv +k7BpfwTKwDANBgkqhkiG9w0BAQsFAAOCAQEATLqZGFEBO+2IiHjkn7pBkAuktmHm +jkkuFLONwe0vlxZFaabaFqSgkoS5eZ50D0dmuUkpJRNMnGK1B/ja5RewtAdxD6us +VT8JpeWYkhxaSIHjUW95jJLMVr17it8jHawI05tD26nqDjTq3C2rM4ExpAaK/Dgv +83ZHe4IdvenkXckDMIjmSsK0GfomZmKvmnfxhg4FnQvZGI48JJUqPA2dHxRhUyr4 +ohBmH5Xi5oLICd85GRi8YqD00agKL99EjGulaKNEdsQkrC4ZvY6QDV0EEnbu8b4R +GfiA42UWN2dKNSqNhBOrP9g5yTcIWXh1Dwpd1Z9vhBCwmBegPqqM5IM1dQ== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert12.crt b/third_party/mbedtls/test/data/dir4/cert12.crt new file mode 100644 index 000000000..fd88c2d13 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert12.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDCjCCAfKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtUZXN0 +IHJvb3QgMjAeFw0wMTAxMDEwMDAwMDBaFw0zMDEyMzEyMzU5NTlaMCYxJDAiBgNV +BAMTG1Rlc3QgaW50ZXJtZWRpYXRlIG1heHBhdGggMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANJrP7/Y+KjupvlgaOmQYArfGuoh3CzcdPe/mlhq+fxD +8U9qzgSVuVR+FpNZi9DyMljMBrWV1OnZI+cVCDYYkNMa3IkV+AkzJGqwcSBKE+6N +RXZvv+I4xbGymdSSaT6Kh1PgPVk/EYNfLFF30pBsycjM81aMtZgW6aA9xCSp0r8W +XkZodsrJUQerDh/7VmDVEeKanZog8auvrvs/ENiA8d4p/75lOIER4nLz6SSn5Eqy +uXzNCwmT5PVwWStXbDD7EBs3rOtR2VNWQ9o6QdfKQOe/SkIddZr1IWGEJ8JHjtNo +jxcYO67A+Jgp1Jwjk+83eRICs0hlWyeHWfBlbOVIKLcCAwEAAaNTMFEwDwYDVR0T +BAgwBgEBAQIBADAdBgNVHQ4EFgQUyw8Phy/FAvifGQ+G6HWkMiWzyqUwHwYDVR0j +BBgwFoAUlB0h+oI62BWZ0tYA75OwaX8EysAwDQYJKoZIhvcNAQELBQADggEBACFS +6tFy9TpVMUfh1mkr3rFEVtho0NJkRhJW8z2PTmKQa069S9gS+U6+CsqwvM1y3yyh +Pt2q34fhhhbQ+gS8iAm+zvQtBsys3frfVkeKmRzxWDh2LnT+tJi/xtqdlULua5NB +21So46HdlceDTuv2vUbrHgxUS/IEjIL6OZZ0Sc6S6YybvGSioGsRUHO2k2IiOnUa +C+hpBvOkXScnItfdMKAAce71CsZeN97sbxeNIMBDiX9bSy+dZLscEhRwBUABiNr/ +sYdYvIpbrFXowjMtBdac+vvhcem7dkCrCdsGylGINWhE2tC9hKmFkFXo4mu/AGDS +M4/59TlMeK8X+WZ9zBs= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert13.crt b/third_party/mbedtls/test/data/dir4/cert13.crt new file mode 100644 index 000000000..ac01a22cd --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert13.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDFzCCAf+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDExtUZXN0 +IGludGVybWVkaWF0ZSBtYXhwYXRoIDEwHhcNMDEwMTAxMDAwMDAwWhcNMzAxMjMx +MjM1OTU5WjAmMSQwIgYDVQQDExtUZXN0IGludGVybWVkaWF0ZSBtYXhwYXRoIDIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs0qdKXytu/GTKpa2H0CE3 +OPSIMM2hiYbavzUroyL+hFv9XVoxh5CGnVUxK7B9ifVvzyElrcV7tjuIlGwp1hLH +tx/YU22xksI/n5/NS/qrxkK5xjwEWB9lx93rwLK0QnfjYRZrir7yySoBKi6IlHOv +GOwl0V/JAslMWwUZlFmvYvoCWSWGrDAkxWVnHq+HoZ7YoM/bdJdsIIJYe3tt7L8D +cJVP5dQ8jSs8/Ehm8BbG339r3B7v/KdK8zuoMig9ag/YOu9jOb0QvYC2HdZoL4WV +N+7aasTQmDGWGOt7fk7AEl0EI8lDvr2O/5q6ad9jRCkxyq3lJwRy+M3MdVKgA1On +AgMBAAGjUDBOMAwGA1UdEwQFMAMBAQEwHQYDVR0OBBYEFM6u5Gkjkxb8PDdQIGKD +D8t1Zv/9MB8GA1UdIwQYMBaAFMsPD4cvxQL4nxkPhuh1pDIls8qlMA0GCSqGSIb3 +DQEBCwUAA4IBAQCLpKATt01DUM8wCiDFVSpmpiCBqxnLRfQuY+ta1p+f15LME+cT +94lwaYCfCBtXQYwiuVFYdK8ztWEStPg6BecMLPB2K9gO/talxUoVDumsmR83p+2y +8YJmFHyjr+BShsjP9paCjUQkJiMOiWRpNFNpScv0IOHmb8NLER3vX/tCmxyVHPg/ +7tBpDXRD6jOyajYH4KUx6wddcYWb63N9sApVpRHNaqpUKjuiQwfUFZjA7AyK/FUS +/cO3++uq+CkZhBu8vupaznXD4h0E28GbZgvu/F0edB7f0Q5DpnuDJ6HFMYl3A2mM +m8pqKNnRYGCtQwppBYVsoBisga2ymtNud7K+ +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert14.crt b/third_party/mbedtls/test/data/dir4/cert14.crt new file mode 100644 index 000000000..49e1cbb2e --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert14.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDExtUZXN0 +IGludGVybWVkaWF0ZSBtYXhwYXRoIDIwHhcNMDEwMTAxMDAwMDAwWhcNMzAxMjMx +MjM1OTU5WjAeMRwwGgYDVQQDExNUZXN0IGxlYWYgaW52YWxpZCAzMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw6Vc/T2GYTWj7nGZcy2voZyeWkFyfDIy +oexyJe8eyuWX+YqaSCra1JMcww0Jy8e9/6/aI9ezd1d73eZDcW5h61tagCpBki+W +dYh+FJfCdDdPnSkitWOBLKBK21AQ9dxePvkQBEanDdAk2IwasydCoHEiSCqwXNEz +jVJPL38ibbLf9sNO3kk6zOFA3QqVSTJ4BddNh9bHL7y106ekfMhrfyTzSpo3Wj0V +20ThmJZ1NuwYRl3j1XHALP0t8Cp2ZLbXuFsTWqTFNzXj+gWM8b2IfZqmqcew5poZ +4aDkjXXOizRxDPxCHp7rLz9xv1pIIBxady0YWp+w9vxLxFF6rYBLtQIDAQABo00w +SzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQoF/qrn9WnKV3zOnCwMl99Uhmx8DAfBgNV +HSMEGDAWgBTOruRpI5MW/Dw3UCBigw/LdWb//TANBgkqhkiG9w0BAQsFAAOCAQEA +VUnlX//h3T5Ajc85WNkyTuirhSZtIr6+X/AxH4kR/QG5NiaDxP9H0FzMs5FcMni8 +3Rs4d2H3CBs+QB7lm/b+xy26vpORwlVFXScHeTEanuXSVsmGPkn7TAQrPoyZgVUN +uy4TGi8Mlkso4gmgehvgTklIV+Emxy32Abd1lRfI8/vOQ1xTdA7f3X98AfWStTya +DGRsQLZE/Q4/Gh57xNqF0ftBIRwt9TbGlu8AyZiIilVECGvE/gtTwuqpQPOhJQmi +NdYTErgD2Wkw9ohifQFo46AMMU1seehtqijW2pC2UjmV5nboPs0eGQmWrfNCjDOr +sZfh98BafcaFGjz605V36g== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert21.crt b/third_party/mbedtls/test/data/dir4/cert21.crt new file mode 100644 index 000000000..501c5d7f2 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert21.crt @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC+jCCAeKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtUZXN0 +IHJvb3QgMjAeFw0wMTAxMDEwMDAwMDBaFw0zMDEyMzEyMzU5NTlaMBYxFDASBgNV +BAMTC1Rlc3Qgcm9vdCAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +mTX2sHY42Ord9gWyB6GcdlLjjE+4zBJ1BoDpMnvJ89niMTuZTq1ViMp/B6RuTH+2 +YF3+riZYQDH9yM/8rgvAUIvK9STaq19Zrm0mnfQUo9yKdkfoJ+XvWuvK6f+NkAMg +xfhAD6eSupigTvov/w2IT8rS0dxo4KF6hKBL2aYlXhiEyi/NmsEPZWvVh+qk3L/Q +GSwpgC+DhVoQzFRofUdK9O9MkgR675iftaFDvyi7F0fxrSLfB/Wy4cgRYzIW6pyN +2sXWivKdLI3bgB01ffdbO17ZAGILK1whO29/bX6hbH09Y/H7jR2vjy+KP9N0PEa3 +7SBymlokB3A8wq/LWPYPeQIDAQABo1MwUTAPBgNVHRMECDAGAQEBAgEAMB0GA1Ud +DgQWBBSOBd1fH00Y9r5S8cELj/9IT4BGlDAfBgNVHSMEGDAWgBSOBd1fH00Y9r5S +8cELj/9IT4BGlDANBgkqhkiG9w0BAQsFAAOCAQEAFEY2StppaPzOgG6vEvPJr//+ +NWY1jKcBB3cT+zWJW54+BexDjyaBRnBIPvRLDG8PAlhlYr9v/P6JCjBSuhYorFLG +P4ZhD+akuMvn6yF7nsyG20LHPwvE7/jye7+zSO3hhyqCg7N7M7O17exo/agw/iUI +DYUuUv1ZJlZvPB2kmZMYa78g0P2ynyKpu4hdbstJzxwA4aQDXGQxcQNtv+3ZCdC2 +TI4w0jodkjqdq/4y0McpkEvYL3/LaQElLaHr8CQo7xYEzsjv+cnzojCO/ilXU+Rl +sz940Q4njAJqlpfiJ44aFytjp96uN4YVpViFCvRz//9uyQY9kuA/8kKwJuO3qw== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert22.crt b/third_party/mbedtls/test/data/dir4/cert22.crt new file mode 100644 index 000000000..5dcd65def --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert22.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDBzCCAe+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtUZXN0 +IHJvb3QgMjAeFw0wMTAxMDEwMDAwMDBaFw0zMDEyMzEyMzU5NTlaMCYxJDAiBgNV +BAMTG1Rlc3QgaW50ZXJtZWRpYXRlIG1heHBhdGggMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANpGlBMXdo8cO9oqUw/b6PMwiMNV8LCe6wB9VKHPa6OG +Q0o8Xqktgwnh1rojgpMhbCApE7UXeMr6ZGq/NtqmO1hO5adV5JehWZyvg7j4EBpG +g8iWo0jNpKMJ0Yx1uBkkljEdZLTHa4bK/zy2NKqDNS2yWs9/M5+xw5XE2ecAg7FT +cXhf3q50V+M6T2IaQ9BxntTyCT8IIF2eRM/t9Y944s9Rfzm/KQVKRYPudX7YhTt9 +iqCJB4JoqYhs3HEO0wPkJxY4KBTUCN94s+7jUFdRrYxe+8Ya6tIYWqD38i5qdGhY +xrVey1LatsDJQ2EgNYobM/LjoCLK1WUssEqf0OU2bi0CAwEAAaNQME4wDAYDVR0T +BAUwAwEBATAdBgNVHQ4EFgQUOBl8edVm/H5xdS2EGEeLzftZ/DUwHwYDVR0jBBgw +FoAUjgXdXx9NGPa+UvHBC4//SE+ARpQwDQYJKoZIhvcNAQELBQADggEBAFwZriTu +DKkiDHFfz3UX4fIxYTHCi4TveYZGPeTbxhBb3XZC5qDF4T5HvCTSkG9+oFfZzI1a +lPN2yZB7QnmHJoyWa5fuovwUL0iI3iIZMqU56tdVPW8gkJe++U5kHMSpz2VF0eo8 +7XkKWxZovRwczgfDFRP9zM9CylyzQjqxx6kbxJozWnwc5UrVbJMaPIqonXp1nDoZ +i878+hX4rJUEjgO6Sa9GVZQpmuCrQF0qKsTiUBzZN67hoD3xoTAYi5IXQE2tRD1N +j3zwng9liCsxurGMnuV0BPWv/IDYRu/syjee1Qv1VFeRto5D4Rldmi2p1f5iWJCk +5m5YpRsknaICjYs= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert23.crt b/third_party/mbedtls/test/data/dir4/cert23.crt new file mode 100644 index 000000000..6c5472549 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert23.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDExtUZXN0 +IGludGVybWVkaWF0ZSBtYXhwYXRoIDEwHhcNMDEwMTAxMDAwMDAwWhcNMzAxMjMx +MjM1OTU5WjAeMRwwGgYDVQQDExNUZXN0IGxlYWYgaW52YWxpZCAyMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAigGgHGNWNkEWWFn7eaU4kC2WjR3RtcBs +oW1MlQndUvwWUHgcbfIg7nh66Oi6Xl3IqAMjHj1J0EPGcwTfmLdaRvN38KjTMh3/ +FiFrrUL0MNgiGxjkTthWgsfV4C/i3vRDTCW+2UMFdd6+z7hwFf+ldTsCP9Qp+93G +drslrvAR2W0qjHLULAJGk/6WzxFG6xeCgdhkooDPprsflZJ/cN1SuqTYOaVMAj9J +aovStUTVhF8ouDULpq0fiBImoldObcGdaAWlgRl0k8NdoSLpWd/7+hi4sH5PSOZq ++8g1lQ3cgrE7ta4X3p/i6eApcn1hyEkTy9ZpKOFvZXnM4D1j8+KSKQIDAQABo00w +SzAJBgNVHRMEAjAAMB0GA1UdDgQWBBTCN2vDLY1tcenTzyRmlS4TBe2xijAfBgNV +HSMEGDAWgBQ4GXx51Wb8fnF1LYQYR4vN+1n8NTANBgkqhkiG9w0BAQsFAAOCAQEA +eb/tgtSbrz7j7HQaxGgI5LVedRro3a2fNLhO0wNboGI6gACIPait1ePkUwuMfLfl +Fky2/2VZ8Ie4pQqxFmdSUqf1NSmxgiWLRho4oTiFv1z08LYQgSdKT49ffKO67TDG +D1nI8rEuT1Nupq8WI5jcKgWqktMJjgKzfN+9nCgFGQMGqTBnt7uYZHhnuZfKSJPv +gHmS4gj72OQ2Nu6xORGhd6J8VjzcG6BX1pLebNQRzlHT3E5IVNF/9cCrc+E87Wns +bDGtzhyx7SIP7/2TiJeBZs7p8xXpaDF2cNx2F+jZH+P8feT7c+JoY7A72uVDSlYf +WVf02pylKRgqayOujH3PWA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert31.crt b/third_party/mbedtls/test/data/dir4/cert31.crt new file mode 100644 index 000000000..8c2af4c45 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert31.crt @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC+jCCAeKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtUZXN0 +IHJvb3QgMjAeFw0wMTAxMDEwMDAwMDBaFw0zMDEyMzEyMzU5NTlaMBYxFDASBgNV +BAMTC1Rlc3Qgcm9vdCAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +mTX2sHY42Ord9gWyB6GcdlLjjE+4zBJ1BoDpMnvJ89niMTuZTq1ViMp/B6RuTH+2 +YF3+riZYQDH9yM/8rgvAUIvK9STaq19Zrm0mnfQUo9yKdkfoJ+XvWuvK6f+NkAMg +xfhAD6eSupigTvov/w2IT8rS0dxo4KF6hKBL2aYlXhiEyi/NmsEPZWvVh+qk3L/Q +GSwpgC+DhVoQzFRofUdK9O9MkgR675iftaFDvyi7F0fxrSLfB/Wy4cgRYzIW6pyN +2sXWivKdLI3bgB01ffdbO17ZAGILK1whO29/bX6hbH09Y/H7jR2vjy+KP9N0PEa3 +7SBymlokB3A8wq/LWPYPeQIDAQABo1MwUTAPBgNVHRMECDAGAQEBAgEBMB0GA1Ud +DgQWBBSOBd1fH00Y9r5S8cELj/9IT4BGlDAfBgNVHSMEGDAWgBSOBd1fH00Y9r5S +8cELj/9IT4BGlDANBgkqhkiG9w0BAQsFAAOCAQEAB9nLaqxsBW0isDaBGNJyzH9O +WqYY0hex9tm3UqygfE9b9aahykpkowQIzh4D9Xpbd0hZGVlK/sw2qsKj6gDOiMtL +uWs4gaFNWIQqhVsTzL88c7XaW55n+TRQdVZyy38DZVWphte1Mumc9WB8N15rZTDh +iXjwGl0mrV1egq4hJZLpy14f6ihqU7KGfmc9onxvgvWxYLi+5v8874c4ophSKsI2 +qVE8iZ6uq2oQ66Pd5S50cYk6MEW5lifAhLM5WFZmW7dRKmykBGZ9rFrJrIvhkmh9 +He7q6TEQP1Wcoc147nIg0BTkHGtdrEv3jIX6UKKUEwUUk9ARB1mSodZQHBhuww== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert32.crt b/third_party/mbedtls/test/data/dir4/cert32.crt new file mode 100644 index 000000000..5dcd65def --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert32.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDBzCCAe+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtUZXN0 +IHJvb3QgMjAeFw0wMTAxMDEwMDAwMDBaFw0zMDEyMzEyMzU5NTlaMCYxJDAiBgNV +BAMTG1Rlc3QgaW50ZXJtZWRpYXRlIG1heHBhdGggMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANpGlBMXdo8cO9oqUw/b6PMwiMNV8LCe6wB9VKHPa6OG +Q0o8Xqktgwnh1rojgpMhbCApE7UXeMr6ZGq/NtqmO1hO5adV5JehWZyvg7j4EBpG +g8iWo0jNpKMJ0Yx1uBkkljEdZLTHa4bK/zy2NKqDNS2yWs9/M5+xw5XE2ecAg7FT +cXhf3q50V+M6T2IaQ9BxntTyCT8IIF2eRM/t9Y944s9Rfzm/KQVKRYPudX7YhTt9 +iqCJB4JoqYhs3HEO0wPkJxY4KBTUCN94s+7jUFdRrYxe+8Ya6tIYWqD38i5qdGhY +xrVey1LatsDJQ2EgNYobM/LjoCLK1WUssEqf0OU2bi0CAwEAAaNQME4wDAYDVR0T +BAUwAwEBATAdBgNVHQ4EFgQUOBl8edVm/H5xdS2EGEeLzftZ/DUwHwYDVR0jBBgw +FoAUjgXdXx9NGPa+UvHBC4//SE+ARpQwDQYJKoZIhvcNAQELBQADggEBAFwZriTu +DKkiDHFfz3UX4fIxYTHCi4TveYZGPeTbxhBb3XZC5qDF4T5HvCTSkG9+oFfZzI1a +lPN2yZB7QnmHJoyWa5fuovwUL0iI3iIZMqU56tdVPW8gkJe++U5kHMSpz2VF0eo8 +7XkKWxZovRwczgfDFRP9zM9CylyzQjqxx6kbxJozWnwc5UrVbJMaPIqonXp1nDoZ +i878+hX4rJUEjgO6Sa9GVZQpmuCrQF0qKsTiUBzZN67hoD3xoTAYi5IXQE2tRD1N +j3zwng9liCsxurGMnuV0BPWv/IDYRu/syjee1Qv1VFeRto5D4Rldmi2p1f5iWJCk +5m5YpRsknaICjYs= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert33.crt b/third_party/mbedtls/test/data/dir4/cert33.crt new file mode 100644 index 000000000..8e5d192b6 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert33.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDFzCCAf+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDExtUZXN0 +IGludGVybWVkaWF0ZSBtYXhwYXRoIDEwHhcNMDEwMTAxMDAwMDAwWhcNMzAxMjMx +MjM1OTU5WjAmMSQwIgYDVQQDExtUZXN0IGludGVybWVkaWF0ZSBtYXhwYXRoIDIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCKAaAcY1Y2QRZYWft5pTiQ +LZaNHdG1wGyhbUyVCd1S/BZQeBxt8iDueHro6LpeXcioAyMePUnQQ8ZzBN+Yt1pG +83fwqNMyHf8WIWutQvQw2CIbGORO2FaCx9XgL+Le9ENMJb7ZQwV13r7PuHAV/6V1 +OwI/1Cn73cZ2uyWu8BHZbSqMctQsAkaT/pbPEUbrF4KB2GSigM+mux+Vkn9w3VK6 +pNg5pUwCP0lqi9K1RNWEXyi4NQumrR+IEiaiV05twZ1oBaWBGXSTw12hIulZ3/v6 +GLiwfk9I5mr7yDWVDdyCsTu1rhfen+Lp4ClyfWHISRPL1mko4W9leczgPWPz4pIp +AgMBAAGjUDBOMAwGA1UdEwQFMAMBAQEwHQYDVR0OBBYEFMI3a8MtjW1x6dPPJGaV +LhMF7bGKMB8GA1UdIwQYMBaAFDgZfHnVZvx+cXUthBhHi837Wfw1MA0GCSqGSIb3 +DQEBCwUAA4IBAQCprzpoj6UaEG4eqLg2L3HqsvY73/XE8ytuZ9wDC3HodnmpezUX +48XwJPHFO7OGPGWZgsU2qX/Zp7yUXkVFSK4VnmnSzUtXNVlU0oWEEOzQLrpphksH +dcF8YNN/Y65KnhzIU784uHeFefUpPaE6yS5OSZboptZWVF9y1LoU3F7gN0UGvVG9 +hflz5O0/KvmYd+6+Yrje+2lbHiJHNXLmOPiZyk9TBDknygBuU14IOWghQim3yks9 +tKk8D38Vl85V5aG9nO4STjx5J8BtSl0x6wW3t9WwU5UC9geCROhZI1XRBafIoKkn +VSgHLpLTARtLikbbg/3SxpnW12msHvgLVasf +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert34.crt b/third_party/mbedtls/test/data/dir4/cert34.crt new file mode 100644 index 000000000..bebcb651d --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert34.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDExtUZXN0 +IGludGVybWVkaWF0ZSBtYXhwYXRoIDIwHhcNMDEwMTAxMDAwMDAwWhcNMzAxMjMx +MjM1OTU5WjAeMRwwGgYDVQQDExNUZXN0IGxlYWYgaW52YWxpZCAzMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkSrgWFD4lYQ0RF/z3mJZjn1lgNBkhnCP +0hciJv/etoMN3bCB+uc8fo0wxDQ2ZcbzTAQ0qBNnjJvAJ1qslZA9boIBKmT8JSix +ii/1XTDWI3E5aOvX1h6lW66pVsIzLm0NAf0VJn2xLw0Yv8hfKbwjcNeAfm7GCwJB +8skjekMKJ8+e6pP4ZHxmrnOo0kUlCg8w8RKzZ6sYJxX1ETekWPEUSXrscQ/YSjpO +zjLDph1lO4gVErBhdJgJpJznqkrRBiR7f/hIrpAV3wOUbtfrxrIb5FXOM9rt/svW +RRrzIUGnBvo04WZ+KQHPsMn+9x8i+/tueOg1KLfs10hW0RWsTQjmOQIDAQABo00w +SzAJBgNVHRMEAjAAMB0GA1UdDgQWBBSOBr1U4h5PYyOqGe/gJgwWk7FfezAfBgNV +HSMEGDAWgBTCN2vDLY1tcenTzyRmlS4TBe2xijANBgkqhkiG9w0BAQsFAAOCAQEA +aBLuwNN5vOh2dLbn8lMNsc/oTFSInzu+ylzC/KLTkjoyMYY+S2ISUuew9pzUo4Gs +AAE/rqVYednayyA13eNRBnwIw+8kPTESaJMGl6uQQd8DzAalzqxbFhbwFY2T0pdi +LNFkGjmGdpRNy/VSTy6JEEBMhIKXjMpactmpiV6mwK3bfnFaXZ6o70+JZrNeiSe0 +g8sci6gBVEt27bGvhLalut8WXc7VCkxQhQCSBdv/94EmRxzPye6iAK0L9jaTHlt+ +qR5MWJxZN32muI7nsKnetUMZbIYwvO1LPn8f+0hdYkck8kE7ga1UM98oTgQeIOmj +3JNCDkNY+Z387ujaaOAVxw== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert41.crt b/third_party/mbedtls/test/data/dir4/cert41.crt new file mode 100644 index 000000000..7065c9426 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert41.crt @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC9zCCAd+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtUZXN0 +IHJvb3QgNDAeFw0wMTAxMDEwMDAwMDBaFw0zMDEyMzEyMzU5NTlaMBYxFDASBgNV +BAMTC1Rlc3Qgcm9vdCA0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +mTX2sHY42Ord9gWyB6GcdlLjjE+4zBJ1BoDpMnvJ89niMTuZTq1ViMp/B6RuTH+2 +YF3+riZYQDH9yM/8rgvAUIvK9STaq19Zrm0mnfQUo9yKdkfoJ+XvWuvK6f+NkAMg +xfhAD6eSupigTvov/w2IT8rS0dxo4KF6hKBL2aYlXhiEyi/NmsEPZWvVh+qk3L/Q +GSwpgC+DhVoQzFRofUdK9O9MkgR675iftaFDvyi7F0fxrSLfB/Wy4cgRYzIW6pyN +2sXWivKdLI3bgB01ffdbO17ZAGILK1whO29/bX6hbH09Y/H7jR2vjy+KP9N0PEa3 +7SBymlokB3A8wq/LWPYPeQIDAQABo1AwTjAMBgNVHRMEBTADAQEBMB0GA1UdDgQW +BBSOBd1fH00Y9r5S8cELj/9IT4BGlDAfBgNVHSMEGDAWgBSOBd1fH00Y9r5S8cEL +j/9IT4BGlDANBgkqhkiG9w0BAQsFAAOCAQEAWhrHGIMcEG2UJfv920hftxi+Jvj/ +ivrhEscqlVA0QNLqZV8v/ai/AiypDLk7uwKtsxF2i+sl81473aSFS9hh3F83/ofm +x8EU8X1FBQHN1zyAEpZyPXr7MiaTXn4w5sCeZLmpWyxGk+cRiPVRE0QUbXDGfVRp +3v984oCUMUzbb+zv6QlkHa6m/kZq0qrnNVVp0X4c7/Pb5elJOVlKnIslNgd/eLrz +zSabToAX9OP6tbJdSRky/LmIYW+CXH/Y4YVwpEu7NisZmDo6lnCBoRQB3QgxoMLp +mM+RUY+AyHr0ZsSUSb6iicJMRZ3mhxCLvnK/Noe/3hq4pUk4Sit7s7JL7A== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert42.crt b/third_party/mbedtls/test/data/dir4/cert42.crt new file mode 100644 index 000000000..c0713188a --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert42.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDCjCCAfKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtUZXN0 +IHJvb3QgNDAeFw0wMTAxMDEwMDAwMDBaFw0zMDEyMzEyMzU5NTlaMCYxJDAiBgNV +BAMTG1Rlc3QgaW50ZXJtZWRpYXRlIG1heHBhdGggMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANpGlBMXdo8cO9oqUw/b6PMwiMNV8LCe6wB9VKHPa6OG +Q0o8Xqktgwnh1rojgpMhbCApE7UXeMr6ZGq/NtqmO1hO5adV5JehWZyvg7j4EBpG +g8iWo0jNpKMJ0Yx1uBkkljEdZLTHa4bK/zy2NKqDNS2yWs9/M5+xw5XE2ecAg7FT +cXhf3q50V+M6T2IaQ9BxntTyCT8IIF2eRM/t9Y944s9Rfzm/KQVKRYPudX7YhTt9 +iqCJB4JoqYhs3HEO0wPkJxY4KBTUCN94s+7jUFdRrYxe+8Ya6tIYWqD38i5qdGhY +xrVey1LatsDJQ2EgNYobM/LjoCLK1WUssEqf0OU2bi0CAwEAAaNTMFEwDwYDVR0T +BAgwBgEBAQIBATAdBgNVHQ4EFgQUOBl8edVm/H5xdS2EGEeLzftZ/DUwHwYDVR0j +BBgwFoAUjgXdXx9NGPa+UvHBC4//SE+ARpQwDQYJKoZIhvcNAQELBQADggEBAGKh +pBhYSGN0KGWIG4GG4mVoTiw880ehetDuTpl3ymZNqkoUuTaAtU3PJWOctcJva7h6 +4PSgyabi/WQmhntR1GxCUt0GTuhHmyJYsSwakXUgMgF6W6TKcxg6m4vjMkkrf+ZT +1lO/MiwxhTTluHPGkl/nBG+uxySInuQMDvdyQDXp2e17qxops+G+1UnRJinqLtsd +LMkCOT4pyh6B5ysnJ8gP1Z2EKWjhKJcIHRMUm7Ap/pf8Zgh5LIqdRtDSuNuTmPLP +lkgoebOCO3c/mWCciR0xGCcz86G3fYznvGp4XqHnRkg3SpAcHQbQ/nSHA+1LdfFi +nqZQPnJPVsJctDR935c= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert43.crt b/third_party/mbedtls/test/data/dir4/cert43.crt new file mode 100644 index 000000000..8e5d192b6 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert43.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDFzCCAf+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDExtUZXN0 +IGludGVybWVkaWF0ZSBtYXhwYXRoIDEwHhcNMDEwMTAxMDAwMDAwWhcNMzAxMjMx +MjM1OTU5WjAmMSQwIgYDVQQDExtUZXN0IGludGVybWVkaWF0ZSBtYXhwYXRoIDIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCKAaAcY1Y2QRZYWft5pTiQ +LZaNHdG1wGyhbUyVCd1S/BZQeBxt8iDueHro6LpeXcioAyMePUnQQ8ZzBN+Yt1pG +83fwqNMyHf8WIWutQvQw2CIbGORO2FaCx9XgL+Le9ENMJb7ZQwV13r7PuHAV/6V1 +OwI/1Cn73cZ2uyWu8BHZbSqMctQsAkaT/pbPEUbrF4KB2GSigM+mux+Vkn9w3VK6 +pNg5pUwCP0lqi9K1RNWEXyi4NQumrR+IEiaiV05twZ1oBaWBGXSTw12hIulZ3/v6 +GLiwfk9I5mr7yDWVDdyCsTu1rhfen+Lp4ClyfWHISRPL1mko4W9leczgPWPz4pIp +AgMBAAGjUDBOMAwGA1UdEwQFMAMBAQEwHQYDVR0OBBYEFMI3a8MtjW1x6dPPJGaV +LhMF7bGKMB8GA1UdIwQYMBaAFDgZfHnVZvx+cXUthBhHi837Wfw1MA0GCSqGSIb3 +DQEBCwUAA4IBAQCprzpoj6UaEG4eqLg2L3HqsvY73/XE8ytuZ9wDC3HodnmpezUX +48XwJPHFO7OGPGWZgsU2qX/Zp7yUXkVFSK4VnmnSzUtXNVlU0oWEEOzQLrpphksH +dcF8YNN/Y65KnhzIU784uHeFefUpPaE6yS5OSZboptZWVF9y1LoU3F7gN0UGvVG9 +hflz5O0/KvmYd+6+Yrje+2lbHiJHNXLmOPiZyk9TBDknygBuU14IOWghQim3yks9 +tKk8D38Vl85V5aG9nO4STjx5J8BtSl0x6wW3t9WwU5UC9geCROhZI1XRBafIoKkn +VSgHLpLTARtLikbbg/3SxpnW12msHvgLVasf +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert44.crt b/third_party/mbedtls/test/data/dir4/cert44.crt new file mode 100644 index 000000000..084fb2d82 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert44.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDFzCCAf+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDExtUZXN0 +IGludGVybWVkaWF0ZSBtYXhwYXRoIDIwHhcNMDEwMTAxMDAwMDAwWhcNMzAxMjMx +MjM1OTU5WjAmMSQwIgYDVQQDExtUZXN0IGludGVybWVkaWF0ZSBtYXhwYXRoIDMw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCRKuBYUPiVhDREX/PeYlmO +fWWA0GSGcI/SFyIm/962gw3dsIH65zx+jTDENDZlxvNMBDSoE2eMm8AnWqyVkD1u +ggEqZPwlKLGKL/VdMNYjcTlo69fWHqVbrqlWwjMubQ0B/RUmfbEvDRi/yF8pvCNw +14B+bsYLAkHyySN6Qwonz57qk/hkfGauc6jSRSUKDzDxErNnqxgnFfURN6RY8RRJ +euxxD9hKOk7OMsOmHWU7iBUSsGF0mAmknOeqStEGJHt/+EiukBXfA5Ru1+vGshvk +Vc4z2u3+y9ZFGvMhQacG+jThZn4pAc+wyf73HyL7+2546DUot+zXSFbRFaxNCOY5 +AgMBAAGjUDBOMAwGA1UdEwQFMAMBAQEwHQYDVR0OBBYEFI4GvVTiHk9jI6oZ7+Am +DBaTsV97MB8GA1UdIwQYMBaAFMI3a8MtjW1x6dPPJGaVLhMF7bGKMA0GCSqGSIb3 +DQEBCwUAA4IBAQCB3dtsoVdschVyCWSI16Se46RZJtLW1bM019KdyZj9DdIZ2VPm +Ip+BQFcVJyzbfmhn5QBbhNDKkwsfldI9Y8IqZ132j442/XIFZIilaPi3cE/WLFUY +Nxu2opuN3+KDwDYO32CUp3frr9OjAtB5amZnkXau+C1EkJlSuWaT+/gIlYwlr4/H +uADcyqFSmy28P9jmkK8AzZHhKnlRadAn2cDB8MFXD5VxnLJfejkprQVLdxTXRovP +cE/6c7PUGIK22WcSX8KTfuviKmjdGVhgeKps2nRNKaSIlqYCztyc8IjcZwJCnh6c +ZW8V9bi7WxDK+I9PPgrgLK8W+VTkS0RtjP5a +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert45.crt b/third_party/mbedtls/test/data/dir4/cert45.crt new file mode 100644 index 000000000..e5d5b3d89 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert45.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDExtUZXN0 +IGludGVybWVkaWF0ZSBtYXhwYXRoIDMwHhcNMDEwMTAxMDAwMDAwWhcNMzAxMjMx +MjM1OTU5WjAeMRwwGgYDVQQDExNUZXN0IGxlYWYgaW52YWxpZCA0MIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkcNsE/s4nauA5vSG/23znHT5ZjFAQiRa +83xo83MD2jMrBjgBBzOW0IKedk9lmqcRmoMsWt3PbYeH2Am+EqtOjh9vbHw/wXEw +eXg7DtZaYTjeRNkrwZ0z5Bz/TTvia7YkcfaU83OG4JyL8GmmbtiGNOHZyHqTv2Ky +j6YqyBJaDE7dwBNBJd5DElEuvr6Tu/Y3K3Z6z8bZUAX/5oII2sq8rg76ZQ+Dfk8i +upjp4MVPvowh/+ys+WNMW5MA5k1dwYyU1MZ20O/aa9VTMkb4DPyv4pXZgi1dBCMc +YskPRVoPPsE5xl3DZ3h4qZ039MbcalXFYe65689+Ra1O4/dsXR5raQIDAQABo00w +SzAJBgNVHRMEAjAAMB0GA1UdDgQWBBTKtXdQZA8cZkS/89eiih4GTJX+fDAfBgNV +HSMEGDAWgBSOBr1U4h5PYyOqGe/gJgwWk7FfezANBgkqhkiG9w0BAQsFAAOCAQEA +IWynyo8ezt+So+w29h7z2ZS3/EcrErnSiDDJ0DaE/vcvflrT/tEPeDHTxy61qQuX +KoseO84foFqLPu1YqgSjRgmbk76gt8aAu0lr6/t0RHWdHKZG3QtK8696pGoMAhVg +Ha3f/YYaEkqSnHwU+/vxEXEkGHM22UHwb7dtH2LfBHtoQtjE6M+Ulv6QdkLj2LFD +XMKJIyAlibTRMW8YOP4G/DekCq1DstUOcTn7BFqeAjjzYwv3NHpOJHdZrUgyGb7B +QqDXf2rM3s7LEpwDMvfdraAEWld4/LRLkfau/PfKD5YwGYg3Nb45xyXFSEijVjAr +23G8HAIcJJu2jUIWGr9OtQ== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert51.crt b/third_party/mbedtls/test/data/dir4/cert51.crt new file mode 100644 index 000000000..7065c9426 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert51.crt @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC9zCCAd+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtUZXN0 +IHJvb3QgNDAeFw0wMTAxMDEwMDAwMDBaFw0zMDEyMzEyMzU5NTlaMBYxFDASBgNV +BAMTC1Rlc3Qgcm9vdCA0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +mTX2sHY42Ord9gWyB6GcdlLjjE+4zBJ1BoDpMnvJ89niMTuZTq1ViMp/B6RuTH+2 +YF3+riZYQDH9yM/8rgvAUIvK9STaq19Zrm0mnfQUo9yKdkfoJ+XvWuvK6f+NkAMg +xfhAD6eSupigTvov/w2IT8rS0dxo4KF6hKBL2aYlXhiEyi/NmsEPZWvVh+qk3L/Q +GSwpgC+DhVoQzFRofUdK9O9MkgR675iftaFDvyi7F0fxrSLfB/Wy4cgRYzIW6pyN +2sXWivKdLI3bgB01ffdbO17ZAGILK1whO29/bX6hbH09Y/H7jR2vjy+KP9N0PEa3 +7SBymlokB3A8wq/LWPYPeQIDAQABo1AwTjAMBgNVHRMEBTADAQEBMB0GA1UdDgQW +BBSOBd1fH00Y9r5S8cELj/9IT4BGlDAfBgNVHSMEGDAWgBSOBd1fH00Y9r5S8cEL +j/9IT4BGlDANBgkqhkiG9w0BAQsFAAOCAQEAWhrHGIMcEG2UJfv920hftxi+Jvj/ +ivrhEscqlVA0QNLqZV8v/ai/AiypDLk7uwKtsxF2i+sl81473aSFS9hh3F83/ofm +x8EU8X1FBQHN1zyAEpZyPXr7MiaTXn4w5sCeZLmpWyxGk+cRiPVRE0QUbXDGfVRp +3v984oCUMUzbb+zv6QlkHa6m/kZq0qrnNVVp0X4c7/Pb5elJOVlKnIslNgd/eLrz +zSabToAX9OP6tbJdSRky/LmIYW+CXH/Y4YVwpEu7NisZmDo6lnCBoRQB3QgxoMLp +mM+RUY+AyHr0ZsSUSb6iicJMRZ3mhxCLvnK/Noe/3hq4pUk4Sit7s7JL7A== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert52.crt b/third_party/mbedtls/test/data/dir4/cert52.crt new file mode 100644 index 000000000..c0713188a --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert52.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDCjCCAfKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtUZXN0 +IHJvb3QgNDAeFw0wMTAxMDEwMDAwMDBaFw0zMDEyMzEyMzU5NTlaMCYxJDAiBgNV +BAMTG1Rlc3QgaW50ZXJtZWRpYXRlIG1heHBhdGggMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANpGlBMXdo8cO9oqUw/b6PMwiMNV8LCe6wB9VKHPa6OG +Q0o8Xqktgwnh1rojgpMhbCApE7UXeMr6ZGq/NtqmO1hO5adV5JehWZyvg7j4EBpG +g8iWo0jNpKMJ0Yx1uBkkljEdZLTHa4bK/zy2NKqDNS2yWs9/M5+xw5XE2ecAg7FT +cXhf3q50V+M6T2IaQ9BxntTyCT8IIF2eRM/t9Y944s9Rfzm/KQVKRYPudX7YhTt9 +iqCJB4JoqYhs3HEO0wPkJxY4KBTUCN94s+7jUFdRrYxe+8Ya6tIYWqD38i5qdGhY +xrVey1LatsDJQ2EgNYobM/LjoCLK1WUssEqf0OU2bi0CAwEAAaNTMFEwDwYDVR0T +BAgwBgEBAQIBATAdBgNVHQ4EFgQUOBl8edVm/H5xdS2EGEeLzftZ/DUwHwYDVR0j +BBgwFoAUjgXdXx9NGPa+UvHBC4//SE+ARpQwDQYJKoZIhvcNAQELBQADggEBAGKh +pBhYSGN0KGWIG4GG4mVoTiw880ehetDuTpl3ymZNqkoUuTaAtU3PJWOctcJva7h6 +4PSgyabi/WQmhntR1GxCUt0GTuhHmyJYsSwakXUgMgF6W6TKcxg6m4vjMkkrf+ZT +1lO/MiwxhTTluHPGkl/nBG+uxySInuQMDvdyQDXp2e17qxops+G+1UnRJinqLtsd +LMkCOT4pyh6B5ysnJ8gP1Z2EKWjhKJcIHRMUm7Ap/pf8Zgh5LIqdRtDSuNuTmPLP +lkgoebOCO3c/mWCciR0xGCcz86G3fYznvGp4XqHnRkg3SpAcHQbQ/nSHA+1LdfFi +nqZQPnJPVsJctDR935c= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert53.crt b/third_party/mbedtls/test/data/dir4/cert53.crt new file mode 100644 index 000000000..8e5d192b6 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert53.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDFzCCAf+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDExtUZXN0 +IGludGVybWVkaWF0ZSBtYXhwYXRoIDEwHhcNMDEwMTAxMDAwMDAwWhcNMzAxMjMx +MjM1OTU5WjAmMSQwIgYDVQQDExtUZXN0IGludGVybWVkaWF0ZSBtYXhwYXRoIDIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCKAaAcY1Y2QRZYWft5pTiQ +LZaNHdG1wGyhbUyVCd1S/BZQeBxt8iDueHro6LpeXcioAyMePUnQQ8ZzBN+Yt1pG +83fwqNMyHf8WIWutQvQw2CIbGORO2FaCx9XgL+Le9ENMJb7ZQwV13r7PuHAV/6V1 +OwI/1Cn73cZ2uyWu8BHZbSqMctQsAkaT/pbPEUbrF4KB2GSigM+mux+Vkn9w3VK6 +pNg5pUwCP0lqi9K1RNWEXyi4NQumrR+IEiaiV05twZ1oBaWBGXSTw12hIulZ3/v6 +GLiwfk9I5mr7yDWVDdyCsTu1rhfen+Lp4ClyfWHISRPL1mko4W9leczgPWPz4pIp +AgMBAAGjUDBOMAwGA1UdEwQFMAMBAQEwHQYDVR0OBBYEFMI3a8MtjW1x6dPPJGaV +LhMF7bGKMB8GA1UdIwQYMBaAFDgZfHnVZvx+cXUthBhHi837Wfw1MA0GCSqGSIb3 +DQEBCwUAA4IBAQCprzpoj6UaEG4eqLg2L3HqsvY73/XE8ytuZ9wDC3HodnmpezUX +48XwJPHFO7OGPGWZgsU2qX/Zp7yUXkVFSK4VnmnSzUtXNVlU0oWEEOzQLrpphksH +dcF8YNN/Y65KnhzIU784uHeFefUpPaE6yS5OSZboptZWVF9y1LoU3F7gN0UGvVG9 +hflz5O0/KvmYd+6+Yrje+2lbHiJHNXLmOPiZyk9TBDknygBuU14IOWghQim3yks9 +tKk8D38Vl85V5aG9nO4STjx5J8BtSl0x6wW3t9WwU5UC9geCROhZI1XRBafIoKkn +VSgHLpLTARtLikbbg/3SxpnW12msHvgLVasf +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert54.crt b/third_party/mbedtls/test/data/dir4/cert54.crt new file mode 100644 index 000000000..e42e14f54 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert54.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDCjCCAfKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDExtUZXN0 +IGludGVybWVkaWF0ZSBtYXhwYXRoIDIwHhcNMDEwMTAxMDAwMDAwWhcNMzAxMjMx +MjM1OTU5WjAcMRowGAYDVQQDExFUZXN0IExlYWYgNCB2YWxpZDCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJEq4FhQ+JWENERf895iWY59ZYDQZIZwj9IX +Iib/3raDDd2wgfrnPH6NMMQ0NmXG80wENKgTZ4ybwCdarJWQPW6CASpk/CUosYov +9V0w1iNxOWjr19YepVuuqVbCMy5tDQH9FSZ9sS8NGL/IXym8I3DXgH5uxgsCQfLJ +I3pDCifPnuqT+GR8Zq5zqNJFJQoPMPESs2erGCcV9RE3pFjxFEl67HEP2Eo6Ts4y +w6YdZTuIFRKwYXSYCaSc56pK0QYke3/4SK6QFd8DlG7X68ayG+RVzjPa7f7L1kUa +8yFBpwb6NOFmfikBz7DJ/vcfIvv7bnjoNSi37NdIVtEVrE0I5jkCAwEAAaNNMEsw +CQYDVR0TBAIwADAdBgNVHQ4EFgQUjga9VOIeT2Mjqhnv4CYMFpOxX3swHwYDVR0j +BBgwFoAUwjdrwy2NbXHp088kZpUuEwXtsYowDQYJKoZIhvcNAQELBQADggEBADdp +VpPr4AzE7ecrhclQKGjPa7leaorYuevjTLWsieY17mVQhlMX1itTNXlPBUfPAsOd +O7LUgY0yZOnV7l8TbfGal8pIF+acgFLgqM5A6z8ngChMi6iKEZChDVffAVHJs3e/ +WUm7VeFY8Mvwnay3iHj2trC7XQX2SZCovXYfNP3bVyqIaDNqt6SPY1skouWpmmUn +ISzcyH6EU/CegFjHJyXxrsIW9Nv2mDejrmcR0EJOmEAfWUgonfemeX93xkwZHW2s +lZ8/e6rTPPSGdhY/b4VRu6o1FpLcPLGZSgPwYBNVYtgT4WsoT0xUvm6Y1WipiZda +B/bpiL8l4GSVtTw1Jko= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert61.crt b/third_party/mbedtls/test/data/dir4/cert61.crt new file mode 100644 index 000000000..8c2af4c45 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert61.crt @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC+jCCAeKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtUZXN0 +IHJvb3QgMjAeFw0wMTAxMDEwMDAwMDBaFw0zMDEyMzEyMzU5NTlaMBYxFDASBgNV +BAMTC1Rlc3Qgcm9vdCAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +mTX2sHY42Ord9gWyB6GcdlLjjE+4zBJ1BoDpMnvJ89niMTuZTq1ViMp/B6RuTH+2 +YF3+riZYQDH9yM/8rgvAUIvK9STaq19Zrm0mnfQUo9yKdkfoJ+XvWuvK6f+NkAMg +xfhAD6eSupigTvov/w2IT8rS0dxo4KF6hKBL2aYlXhiEyi/NmsEPZWvVh+qk3L/Q +GSwpgC+DhVoQzFRofUdK9O9MkgR675iftaFDvyi7F0fxrSLfB/Wy4cgRYzIW6pyN +2sXWivKdLI3bgB01ffdbO17ZAGILK1whO29/bX6hbH09Y/H7jR2vjy+KP9N0PEa3 +7SBymlokB3A8wq/LWPYPeQIDAQABo1MwUTAPBgNVHRMECDAGAQEBAgEBMB0GA1Ud +DgQWBBSOBd1fH00Y9r5S8cELj/9IT4BGlDAfBgNVHSMEGDAWgBSOBd1fH00Y9r5S +8cELj/9IT4BGlDANBgkqhkiG9w0BAQsFAAOCAQEAB9nLaqxsBW0isDaBGNJyzH9O +WqYY0hex9tm3UqygfE9b9aahykpkowQIzh4D9Xpbd0hZGVlK/sw2qsKj6gDOiMtL +uWs4gaFNWIQqhVsTzL88c7XaW55n+TRQdVZyy38DZVWphte1Mumc9WB8N15rZTDh +iXjwGl0mrV1egq4hJZLpy14f6ihqU7KGfmc9onxvgvWxYLi+5v8874c4ophSKsI2 +qVE8iZ6uq2oQ66Pd5S50cYk6MEW5lifAhLM5WFZmW7dRKmykBGZ9rFrJrIvhkmh9 +He7q6TEQP1Wcoc147nIg0BTkHGtdrEv3jIX6UKKUEwUUk9ARB1mSodZQHBhuww== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert62.crt b/third_party/mbedtls/test/data/dir4/cert62.crt new file mode 100644 index 000000000..5dcd65def --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert62.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDBzCCAe+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtUZXN0 +IHJvb3QgMjAeFw0wMTAxMDEwMDAwMDBaFw0zMDEyMzEyMzU5NTlaMCYxJDAiBgNV +BAMTG1Rlc3QgaW50ZXJtZWRpYXRlIG1heHBhdGggMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANpGlBMXdo8cO9oqUw/b6PMwiMNV8LCe6wB9VKHPa6OG +Q0o8Xqktgwnh1rojgpMhbCApE7UXeMr6ZGq/NtqmO1hO5adV5JehWZyvg7j4EBpG +g8iWo0jNpKMJ0Yx1uBkkljEdZLTHa4bK/zy2NKqDNS2yWs9/M5+xw5XE2ecAg7FT +cXhf3q50V+M6T2IaQ9BxntTyCT8IIF2eRM/t9Y944s9Rfzm/KQVKRYPudX7YhTt9 +iqCJB4JoqYhs3HEO0wPkJxY4KBTUCN94s+7jUFdRrYxe+8Ya6tIYWqD38i5qdGhY +xrVey1LatsDJQ2EgNYobM/LjoCLK1WUssEqf0OU2bi0CAwEAAaNQME4wDAYDVR0T +BAUwAwEBATAdBgNVHQ4EFgQUOBl8edVm/H5xdS2EGEeLzftZ/DUwHwYDVR0jBBgw +FoAUjgXdXx9NGPa+UvHBC4//SE+ARpQwDQYJKoZIhvcNAQELBQADggEBAFwZriTu +DKkiDHFfz3UX4fIxYTHCi4TveYZGPeTbxhBb3XZC5qDF4T5HvCTSkG9+oFfZzI1a +lPN2yZB7QnmHJoyWa5fuovwUL0iI3iIZMqU56tdVPW8gkJe++U5kHMSpz2VF0eo8 +7XkKWxZovRwczgfDFRP9zM9CylyzQjqxx6kbxJozWnwc5UrVbJMaPIqonXp1nDoZ +i878+hX4rJUEjgO6Sa9GVZQpmuCrQF0qKsTiUBzZN67hoD3xoTAYi5IXQE2tRD1N +j3zwng9liCsxurGMnuV0BPWv/IDYRu/syjee1Qv1VFeRto5D4Rldmi2p1f5iWJCk +5m5YpRsknaICjYs= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert63.crt b/third_party/mbedtls/test/data/dir4/cert63.crt new file mode 100644 index 000000000..ffa90e4fd --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert63.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDCjCCAfKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDExtUZXN0 +IGludGVybWVkaWF0ZSBtYXhwYXRoIDEwHhcNMDEwMTAxMDAwMDAwWhcNMzAxMjMx +MjM1OTU5WjAcMRowGAYDVQQDExFUZXN0IExlYWYgdmFsaWQgMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAIoBoBxjVjZBFlhZ+3mlOJAtlo0d0bXAbKFt +TJUJ3VL8FlB4HG3yIO54eujoul5dyKgDIx49SdBDxnME35i3Wkbzd/Co0zId/xYh +a61C9DDYIhsY5E7YVoLH1eAv4t70Q0wlvtlDBXXevs+4cBX/pXU7Aj/UKfvdxna7 +Ja7wEdltKoxy1CwCRpP+ls8RRusXgoHYZKKAz6a7H5WSf3DdUrqk2DmlTAI/SWqL +0rVE1YRfKLg1C6atH4gSJqJXTm3BnWgFpYEZdJPDXaEi6Vnf+/oYuLB+T0jmavvI +NZUN3IKxO7WuF96f4ungKXJ9YchJE8vWaSjhb2V5zOA9Y/PikikCAwEAAaNNMEsw +CQYDVR0TBAIwADAdBgNVHQ4EFgQUwjdrwy2NbXHp088kZpUuEwXtsYowHwYDVR0j +BBgwFoAUOBl8edVm/H5xdS2EGEeLzftZ/DUwDQYJKoZIhvcNAQELBQADggEBABrt +2fKOUwAb5EFD/ebXMM4Qzg6sFYpq/mcnPlmGmqwNzmumlgYUBS15liTnA4nBgR09 +b2sejlwnzcnrsFB18YCmE/TIPuh3XMJXmUxjcnCy3qPuSwpuwG3brUGQPiIZhRZz +1+iSc7uba/JGaTqLBItaRPlB6dD3jqY3UowFaWvnYiVmCXg147EBC5Mn2EDiukg0 +xsqM03yfpUkp4/W9+WpJuGNyhicSJbNxlh3zEjrgWeMvhnFmrTr7ss6P2ZoKGS3/ +QrZBLUzkk25hCF3dTNfTDVSQUt0rONJvx3ym+Kp+zQWc/oHsDs0STs5Db2J0dGp8 +VEyxyevfwivF4EQ70Jw= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert71.crt b/third_party/mbedtls/test/data/dir4/cert71.crt new file mode 100644 index 000000000..8c2af4c45 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert71.crt @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC+jCCAeKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtUZXN0 +IHJvb3QgMjAeFw0wMTAxMDEwMDAwMDBaFw0zMDEyMzEyMzU5NTlaMBYxFDASBgNV +BAMTC1Rlc3Qgcm9vdCAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +mTX2sHY42Ord9gWyB6GcdlLjjE+4zBJ1BoDpMnvJ89niMTuZTq1ViMp/B6RuTH+2 +YF3+riZYQDH9yM/8rgvAUIvK9STaq19Zrm0mnfQUo9yKdkfoJ+XvWuvK6f+NkAMg +xfhAD6eSupigTvov/w2IT8rS0dxo4KF6hKBL2aYlXhiEyi/NmsEPZWvVh+qk3L/Q +GSwpgC+DhVoQzFRofUdK9O9MkgR675iftaFDvyi7F0fxrSLfB/Wy4cgRYzIW6pyN +2sXWivKdLI3bgB01ffdbO17ZAGILK1whO29/bX6hbH09Y/H7jR2vjy+KP9N0PEa3 +7SBymlokB3A8wq/LWPYPeQIDAQABo1MwUTAPBgNVHRMECDAGAQEBAgEBMB0GA1Ud +DgQWBBSOBd1fH00Y9r5S8cELj/9IT4BGlDAfBgNVHSMEGDAWgBSOBd1fH00Y9r5S +8cELj/9IT4BGlDANBgkqhkiG9w0BAQsFAAOCAQEAB9nLaqxsBW0isDaBGNJyzH9O +WqYY0hex9tm3UqygfE9b9aahykpkowQIzh4D9Xpbd0hZGVlK/sw2qsKj6gDOiMtL +uWs4gaFNWIQqhVsTzL88c7XaW55n+TRQdVZyy38DZVWphte1Mumc9WB8N15rZTDh +iXjwGl0mrV1egq4hJZLpy14f6ihqU7KGfmc9onxvgvWxYLi+5v8874c4ophSKsI2 +qVE8iZ6uq2oQ66Pd5S50cYk6MEW5lifAhLM5WFZmW7dRKmykBGZ9rFrJrIvhkmh9 +He7q6TEQP1Wcoc147nIg0BTkHGtdrEv3jIX6UKKUEwUUk9ARB1mSodZQHBhuww== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert72.crt b/third_party/mbedtls/test/data/dir4/cert72.crt new file mode 100644 index 000000000..5dcd65def --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert72.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDBzCCAe+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDEwtUZXN0 +IHJvb3QgMjAeFw0wMTAxMDEwMDAwMDBaFw0zMDEyMzEyMzU5NTlaMCYxJDAiBgNV +BAMTG1Rlc3QgaW50ZXJtZWRpYXRlIG1heHBhdGggMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANpGlBMXdo8cO9oqUw/b6PMwiMNV8LCe6wB9VKHPa6OG +Q0o8Xqktgwnh1rojgpMhbCApE7UXeMr6ZGq/NtqmO1hO5adV5JehWZyvg7j4EBpG +g8iWo0jNpKMJ0Yx1uBkkljEdZLTHa4bK/zy2NKqDNS2yWs9/M5+xw5XE2ecAg7FT +cXhf3q50V+M6T2IaQ9BxntTyCT8IIF2eRM/t9Y944s9Rfzm/KQVKRYPudX7YhTt9 +iqCJB4JoqYhs3HEO0wPkJxY4KBTUCN94s+7jUFdRrYxe+8Ya6tIYWqD38i5qdGhY +xrVey1LatsDJQ2EgNYobM/LjoCLK1WUssEqf0OU2bi0CAwEAAaNQME4wDAYDVR0T +BAUwAwEBATAdBgNVHQ4EFgQUOBl8edVm/H5xdS2EGEeLzftZ/DUwHwYDVR0jBBgw +FoAUjgXdXx9NGPa+UvHBC4//SE+ARpQwDQYJKoZIhvcNAQELBQADggEBAFwZriTu +DKkiDHFfz3UX4fIxYTHCi4TveYZGPeTbxhBb3XZC5qDF4T5HvCTSkG9+oFfZzI1a +lPN2yZB7QnmHJoyWa5fuovwUL0iI3iIZMqU56tdVPW8gkJe++U5kHMSpz2VF0eo8 +7XkKWxZovRwczgfDFRP9zM9CylyzQjqxx6kbxJozWnwc5UrVbJMaPIqonXp1nDoZ +i878+hX4rJUEjgO6Sa9GVZQpmuCrQF0qKsTiUBzZN67hoD3xoTAYi5IXQE2tRD1N +j3zwng9liCsxurGMnuV0BPWv/IDYRu/syjee1Qv1VFeRto5D4Rldmi2p1f5iWJCk +5m5YpRsknaICjYs= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert73.crt b/third_party/mbedtls/test/data/dir4/cert73.crt new file mode 100644 index 000000000..6854c74a0 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert73.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDFzCCAf+gAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDExtUZXN0 +IGludGVybWVkaWF0ZSBtYXhwYXRoIDEwHhcNMDEwMTAxMDAwMDAwWhcNMzAxMjMx +MjM1OTU5WjAmMSQwIgYDVQQDExtUZXN0IGludGVybWVkaWF0ZSBtYXhwYXRoIDEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaRpQTF3aPHDvaKlMP2+jz +MIjDVfCwnusAfVShz2ujhkNKPF6pLYMJ4da6I4KTIWwgKRO1F3jK+mRqvzbapjtY +TuWnVeSXoVmcr4O4+BAaRoPIlqNIzaSjCdGMdbgZJJYxHWS0x2uGyv88tjSqgzUt +slrPfzOfscOVxNnnAIOxU3F4X96udFfjOk9iGkPQcZ7U8gk/CCBdnkTP7fWPeOLP +UX85vykFSkWD7nV+2IU7fYqgiQeCaKmIbNxxDtMD5CcWOCgU1AjfeLPu41BXUa2M +XvvGGurSGFqg9/IuanRoWMa1XstS2rbAyUNhIDWKGzPy46AiytVlLLBKn9DlNm4t +AgMBAAGjUDBOMAwGA1UdEwQFMAMBAQEwHQYDVR0OBBYEFDgZfHnVZvx+cXUthBhH +i837Wfw1MB8GA1UdIwQYMBaAFDgZfHnVZvx+cXUthBhHi837Wfw1MA0GCSqGSIb3 +DQEBCwUAA4IBAQDPQC9vYJegBgVZHu0StoRT7L6ShWcZc5Z/TeyrqJBdoiguSRq5 +kMiFXZpksxeFlIUYry21MigYqxOXGZ2GZYNqhLpYVh7hzAY8uYvf4U70q88zj7mw +gIcgEaMd71GHqbb2O5x3fCN7vLeU5DFYBWfqLlkL57Uqr2aRDHlucryyRNordicN +WbCxPozmqtbNMABEUbjLMCCuzJeNRSZbS0OOod6Xd3N00EK7PqaRhbihbq3L6gUG +MjUI2keSxW4vXcDfI5Hqem6SHpCc3retx2VUgwIDAoTrw7E4dwmyC4Tp7TDJL/+d +GU8qhRmoQer7mLUzpb3s8mq/4rZx+alTQ3gu +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert74.crt b/third_party/mbedtls/test/data/dir4/cert74.crt new file mode 100644 index 000000000..920c4c208 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert74.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDCjCCAfKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDExtUZXN0 +IGludGVybWVkaWF0ZSBtYXhwYXRoIDEwHhcNMDEwMTAxMDAwMDAwWhcNMzAxMjMx +MjM1OTU5WjAcMRowGAYDVQQDExFUZXN0IExlYWYgdmFsaWQgMzCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAIoBoBxjVjZBFlhZ+3mlOJAtlo0d0bXAbKFt +TJUJ3VL8FlB4HG3yIO54eujoul5dyKgDIx49SdBDxnME35i3Wkbzd/Co0zId/xYh +a61C9DDYIhsY5E7YVoLH1eAv4t70Q0wlvtlDBXXevs+4cBX/pXU7Aj/UKfvdxna7 +Ja7wEdltKoxy1CwCRpP+ls8RRusXgoHYZKKAz6a7H5WSf3DdUrqk2DmlTAI/SWqL +0rVE1YRfKLg1C6atH4gSJqJXTm3BnWgFpYEZdJPDXaEi6Vnf+/oYuLB+T0jmavvI +NZUN3IKxO7WuF96f4ungKXJ9YchJE8vWaSjhb2V5zOA9Y/PikikCAwEAAaNNMEsw +CQYDVR0TBAIwADAdBgNVHQ4EFgQUwjdrwy2NbXHp088kZpUuEwXtsYowHwYDVR0j +BBgwFoAUOBl8edVm/H5xdS2EGEeLzftZ/DUwDQYJKoZIhvcNAQELBQADggEBAK9R +J7H8epG2NagZ3Gpl6R1jSiIixWlPJci2Bz1Nr8NIER64TJCKHeh9ku6tzSdrVL3B +2rj5GmpubDXEWAKfMtt0ccF2UIva9rDMNzaAnCSevWHXf9Httr84X6RmhtXb9/Rm +fp3W+L0GlDfHfHn8uoVdQe5e6xkmGxtcHDUsyO/CJMkrwUyoB8zs7UtlNtOf45H4 +PPg09lzV7RQ9vFIH48F/4gZW+w3AqN9ZwvYkGcJUY8tyHpb9hDrR4F6loVInrlCE +0pQiQXNCdee1za9QsScSjYNxGfR2Dkzote41H098jvLalLTTg5Fqx/AylnX285FI +ETGOumNQ51IJLUpq+hc= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert81.crt b/third_party/mbedtls/test/data/dir4/cert81.crt new file mode 100644 index 000000000..26b2bd555 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert81.crt @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBpTCCAUmgAwIBAgIBUTAMBggqhkjOPQQDAgUAMDExDzANBgNVBAMTBlJvb3Qg +ODERMA8GA1UEChMIbWJlZCBUTFMxCzAJBgNVBAYTAlVLMB4XDTAxMDEwMTAwMDAw +MFoXDTMwMTIzMTIzNTk1OVowMTEPMA0GA1UEAxMGUm9vdCA4MREwDwYDVQQKEwht +YmVkIFRMUzELMAkGA1UEBhMCVUswWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAT1 +GuTQ9vgf2l3oLM25r78cvIAQqE02GzQGjp/WWw3CysEwTwNEuZGhRiD5lDmkbUGW +UNxv/7uJjy7k3K3fDNdko1AwTjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBTHFA2h +Au0tPnzeYnLcmlTQj4FAajAfBgNVHSMEGDAWgBTHFA2hAu0tPnzeYnLcmlTQj4FA +ajAMBggqhkjOPQQDAgUAA0gAMEUCIH7Z/HNb/Pwbs40iNll1a9gmgAbYOgdlVPWo +nSdcb7cZAiEAlhVb6CdBXsjOfAWWEET/QP74z608PKFccCIFPCDLkxo= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert82.crt b/third_party/mbedtls/test/data/dir4/cert82.crt new file mode 100644 index 000000000..d49ecc9f3 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert82.crt @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBqDCCAUygAwIBAgIBUjAMBggqhkjOPQQDAgUAMDExDzANBgNVBAMTBlJvb3Qg +ODERMA8GA1UEChMIbWJlZCBUTFMxCzAJBgNVBAYTAlVLMB4XDTAxMDEwMTAwMDAw +MFoXDTMwMTIzMTIzNTk1OVowMTEPMA0GA1UEAxMGSW50IDgyMREwDwYDVQQKEwht +YmVkIFRMUzELMAkGA1UEBhMCVUswWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS2 +giYQt4HVfQ2t8eTS0bvISwp7ol2x17umbllBxwzGDFEUQ00JL1/SStezecK0lNhE +0AvY8Ez2soQEtdSeQGkCo1MwUTAPBgNVHRMECDAGAQH/AgEAMB0GA1UdDgQWBBS3 ++nsv3nQknSg4aDjlTiRpCPo7XzAfBgNVHSMEGDAWgBTHFA2hAu0tPnzeYnLcmlTQ +j4FAajAMBggqhkjOPQQDAgUAA0gAMEUCIQDus2Lvx3yyvaViY1s334uMm6ge484X +oktMyxLVjkAMiAIgehTHiJJaT9PnlVa+hUpxsIfVAuMexrm5fw/bDF5Nxzw= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert83.crt b/third_party/mbedtls/test/data/dir4/cert83.crt new file mode 100644 index 000000000..21a748e32 --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert83.crt @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBoDCCAUWgAwIBAgIBUzAMBggqhkjOPQQDAgUAMDExDzANBgNVBAMTBkludCA4 +MjERMA8GA1UEChMIbWJlZCBUTFMxCzAJBgNVBAYTAlVLMB4XDTAxMDEwMTAwMDAw +MFoXDTMwMTIzMTIzNTk1OVowMDEOMAwGA1UEAxMFRUUgODMxETAPBgNVBAoTCG1i +ZWQgVExTMQswCQYDVQQGEwJVSzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABMSy +6X5iBYrdxxOMfdcA23pLBoJCeyEjiWfALxTm80MJGBdRNVdnT50xNU3SDDwHWPda +/EQqHq+itsqkUeyAGAyjTTBLMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGsFH/KsvM4n +r+i1gI2iCVXi3KtFMB8GA1UdIwQYMBaAFLf6ey/edCSdKDhoOOVOJGkI+jtfMAwG +CCqGSM49BAMCBQADRwAwRAIgQURH8DHWFHVK38+znWc85G1P+g4ocdkA5Gt0LbOg +SJMCIBsacOLFywxZYF8atizw6zMRw+QeHR2514JIhJUck2kd +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert91.crt b/third_party/mbedtls/test/data/dir4/cert91.crt new file mode 100644 index 000000000..6d4605a7c --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert91.crt @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBqTCCAUygAwIBAgIBWzAMBggqhkjOPQQDAgUAMDExDzANBgNVBAMTBlJvb3Qg +OTERMA8GA1UEChMIbWJlZCBUTFMxCzAJBgNVBAYTAlVLMB4XDTAxMDEwMTAwMDAw +MFoXDTMwMTIzMTIzNTk1OVowMTEPMA0GA1UEAxMGUm9vdCA5MREwDwYDVQQKEwht +YmVkIFRMUzELMAkGA1UEBhMCVUswWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATh +D2SmdS6D7cYi2vGMyuCdol/OOUN2di2pS2wfSI/MsY/Z4O9iNHqbXQP6l+hcT5ap +daycs7r6ZPNqmWM7b16go1MwUTAPBgNVHRMECDAGAQH/AgEAMB0GA1UdDgQWBBRb +zVrcAxddj0i0DEqvTGT8F37bizAfBgNVHSMEGDAWgBRbzVrcAxddj0i0DEqvTGT8 +F37bizAMBggqhkjOPQQDAgUAA0kAMEYCIQDbrSV4ndH0vAR3HqJfBn8NT8zdvMjB +qSJes6Qwa42b2wIhAKyoH0H+b1Svw8pMkvUYF4ElH5Cnn7gxb7Wl3arc0+hQ +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/dir4/cert92.crt b/third_party/mbedtls/test/data/dir4/cert92.crt new file mode 100644 index 000000000..49b53a5bc --- /dev/null +++ b/third_party/mbedtls/test/data/dir4/cert92.crt @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBoTCCAUWgAwIBAgIBXDAMBggqhkjOPQQDAgUAMDExDzANBgNVBAMTBlJvb3Qg +OTERMA8GA1UEChMIbWJlZCBUTFMxCzAJBgNVBAYTAlVLMB4XDTAxMDEwMTAwMDAw +MFoXDTMwMTIzMTIzNTk1OVowMDEOMAwGA1UEAxMFRUUgOTIxETAPBgNVBAoTCG1i +ZWQgVExTMQswCQYDVQQGEwJVSzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABC9E +tK1pE8Ei8vgScunyjx50C+qDsQS8D2RhGHC4VkE2yyiFxJA/ynhoeXTKZsHuEWI9 +CfOSvk0RrTWf9nr0pTGjTTBLMAkGA1UdEwQCMAAwHQYDVR0OBBYEFLqsN52tAf1k +XlzxQmdD5qG6Sy6PMB8GA1UdIwQYMBaAFFvNWtwDF12PSLQMSq9MZPwXftuLMAwG +CCqGSM49BAMCBQADSAAwRQIgXlfKqhkhXgK112Eycl+Z5NHM+6aqXE7i9j7IyGfk +ikICIQDBYNGbpSx82XG+IS/h4AWNTa4Hs6rmWvQDWJum7NrzMQ== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/ec_224_prv.pem b/third_party/mbedtls/test/data/ec_224_prv.pem new file mode 100644 index 000000000..ebb83a02c --- /dev/null +++ b/third_party/mbedtls/test/data/ec_224_prv.pem @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MGgCAQEEHGhJ+X0QZvaZd1ljfH44mUZM7j7HrJcGU6C+B0KgBwYFK4EEACGhPAM6 +AAQWk6KQ9/C1cf4rQdXYSwEydjH0qGD5lfozLAl/VBkrsQ8AET8q/7E8GiTORJFF +calUQK4BSgDL9w== +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/ec_224_pub.pem b/third_party/mbedtls/test/data/ec_224_pub.pem new file mode 100644 index 000000000..d2da54a65 --- /dev/null +++ b/third_party/mbedtls/test/data/ec_224_pub.pem @@ -0,0 +1,4 @@ +-----BEGIN PUBLIC KEY----- +ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEFpOikPfwtXH+K0HV2EsBMnYx9Khg+ZX6 +MywJf1QZK7EPABE/Kv+xPBokzkSRRXGpVECuAUoAy/c= +-----END PUBLIC KEY----- diff --git a/third_party/mbedtls/test/data/ec_256_long_prv.pem b/third_party/mbedtls/test/data/ec_256_long_prv.pem new file mode 100644 index 000000000..5141e30b4 --- /dev/null +++ b/third_party/mbedtls/test/data/ec_256_long_prv.pem @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIIcex4mqXsQamUKTVf8vXmTAJrQvGjh5mXG8p9+OR4xAoAoGCCqGSM49 +AwEHoUQDQgAEqJ2HQjPpc6fDwE/vSa6U35USXawkTo98y4U6NsAl+rOGuqMPEFXf +P1Srm/Jrzwa/RuppRL5kgyAsGJTUmwZEzQ== +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/ec_256_prv.pem b/third_party/mbedtls/test/data/ec_256_prv.pem new file mode 100644 index 000000000..e42dd4a6c --- /dev/null +++ b/third_party/mbedtls/test/data/ec_256_prv.pem @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIEnJqMGMS4hWOMQxzx3xyZQTFgm1gNT9Q6DKsX2y8T7uoAoGCCqGSM49 +AwEHoUQDQgAEd3Jlb4FLOZJ51eHxeB+sbwmaPFyhsONTUYNLCLZeC1clkM2vj3aT +YbzzSs/BHl4HToQmvd4Evm5lOUVElhfeRQ== +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/ec_256_pub.pem b/third_party/mbedtls/test/data/ec_256_pub.pem new file mode 100644 index 000000000..701da02fc --- /dev/null +++ b/third_party/mbedtls/test/data/ec_256_pub.pem @@ -0,0 +1,4 @@ +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEd3Jlb4FLOZJ51eHxeB+sbwmaPFyh +sONTUYNLCLZeC1clkM2vj3aTYbzzSs/BHl4HToQmvd4Evm5lOUVElhfeRQ== +-----END PUBLIC KEY----- diff --git a/third_party/mbedtls/test/data/ec_384_prv.pem b/third_party/mbedtls/test/data/ec_384_prv.pem new file mode 100644 index 000000000..7890759b4 --- /dev/null +++ b/third_party/mbedtls/test/data/ec_384_prv.pem @@ -0,0 +1,6 @@ +-----BEGIN EC PRIVATE KEY----- +MIGkAgEBBDA/XY2b4oC1aWzFzJ+Uz4r35rYd1lkrKrKzpMYHRQQX7DJ9zcrtfBAF +PXGaBXTwp2qgBwYFK4EEACKhZANiAATZxmK1C6KcpHmQRQ4EOur08MabFWdtES9i +KnHJMFmvmZaRxWgNK0TREVedsS9KQTou1cRfz7Z7W2PgC5Hr5Z0JprGsLAxCgqoS +MX7VkU+Zm8SIuxMug0LMNvLKXjN5x0c= +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/ec_384_pub.pem b/third_party/mbedtls/test/data/ec_384_pub.pem new file mode 100644 index 000000000..de95382e4 --- /dev/null +++ b/third_party/mbedtls/test/data/ec_384_pub.pem @@ -0,0 +1,5 @@ +-----BEGIN PUBLIC KEY----- +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE2cZitQuinKR5kEUOBDrq9PDGmxVnbREv +YipxyTBZr5mWkcVoDStE0RFXnbEvSkE6LtXEX8+2e1tj4AuR6+WdCaaxrCwMQoKq +EjF+1ZFPmZvEiLsTLoNCzDbyyl4zecdH +-----END PUBLIC KEY----- diff --git a/third_party/mbedtls/test/data/ec_521_prv.pem b/third_party/mbedtls/test/data/ec_521_prv.pem new file mode 100644 index 000000000..144bb44b7 --- /dev/null +++ b/third_party/mbedtls/test/data/ec_521_prv.pem @@ -0,0 +1,7 @@ +-----BEGIN EC PRIVATE KEY----- +MIHcAgEBBEIBsbatB7t55zINpZhg6ijgVShPYFjyed5mbgbUNdKve9oo2Z+ke33Q +lj4WsAcweO6LijjZZqWC9G0Z/5XfOtloWq6gBwYFK4EEACOhgYkDgYYABAAd4ULV +T2nrA47kt6+dPKB3Nv2c9xnrNU1ph57n88E2+w+/nwj4a+X6Eo7BoFHT5sZD6Fra +j/rPNmPCYL0shEtvVgDO6OSKnmXQnK3YnyNd7gXzuKZGvnFfH2fVtDTg/yOh/Afv +d0AZPkDu/287zf12WqkVUDNST+TyBfVETiksTC9qwQ== +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/ec_521_pub.pem b/third_party/mbedtls/test/data/ec_521_pub.pem new file mode 100644 index 000000000..26bc5c51d --- /dev/null +++ b/third_party/mbedtls/test/data/ec_521_pub.pem @@ -0,0 +1,6 @@ +-----BEGIN PUBLIC KEY----- +MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAHeFC1U9p6wOO5LevnTygdzb9nPcZ +6zVNaYee5/PBNvsPv58I+Gvl+hKOwaBR0+bGQ+ha2o/6zzZjwmC9LIRLb1YAzujk +ip5l0Jyt2J8jXe4F87imRr5xXx9n1bQ04P8jofwH73dAGT5A7v9vO839dlqpFVAz +Uk/k8gX1RE4pLEwvasE= +-----END PUBLIC KEY----- diff --git a/third_party/mbedtls/test/data/ec_521_short_prv.pem b/third_party/mbedtls/test/data/ec_521_short_prv.pem new file mode 100644 index 000000000..427b7ad47 --- /dev/null +++ b/third_party/mbedtls/test/data/ec_521_short_prv.pem @@ -0,0 +1,7 @@ +-----BEGIN EC PRIVATE KEY----- +MIHcAgEBBEIAOXdk7W+Hf5L7Hc9fKe44wmpaRNs5ERFTkv5CrlXv/Bu3y28M673q +vBNo7a/UE/6NNQHu2pQODEYFpMg6R34b5SigBwYFK4EEACOhgYkDgYYABAFUMHXV +KPA4vkMgq+pFgDoH96XoM517gF2GJFV6h2gLhykzIHL/otAyEpAStw7MBvbU0V21 +ixB+hjqzO7Snxaj9mwB8g87OKxm5eGfsqvJNPdJ0RZ/EKy06Ukg6KThlhQeyrtIk +g5PTCrPnNszlffAy6/jCOe3Moi59g15H13sSzwfX6g== +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/ec_bp256_prv.pem b/third_party/mbedtls/test/data/ec_bp256_prv.pem new file mode 100644 index 000000000..9d6a867cc --- /dev/null +++ b/third_party/mbedtls/test/data/ec_bp256_prv.pem @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHgCAQEEICFh1vLbdlJvpiwW81aoDwHzL3dnhLNqqZeZqLdmIID/oAsGCSskAwMC +CAEBB6FEA0IABHaMjK5KvKYwbbDtgbDEpiFcN4Bm7G1hbBRuE/HH34CblqtpEcJ9 +igIznwkmhA5VI209HvviZp0JDkxMZg+tqR0= +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/ec_bp256_pub.pem b/third_party/mbedtls/test/data/ec_bp256_pub.pem new file mode 100644 index 000000000..f738623d8 --- /dev/null +++ b/third_party/mbedtls/test/data/ec_bp256_pub.pem @@ -0,0 +1,4 @@ +-----BEGIN PUBLIC KEY----- +MFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABHaMjK5KvKYwbbDtgbDEpiFcN4Bm +7G1hbBRuE/HH34CblqtpEcJ9igIznwkmhA5VI209HvviZp0JDkxMZg+tqR0= +-----END PUBLIC KEY----- diff --git a/third_party/mbedtls/test/data/ec_bp384_prv.pem b/third_party/mbedtls/test/data/ec_bp384_prv.pem new file mode 100644 index 000000000..34e82db7a --- /dev/null +++ b/third_party/mbedtls/test/data/ec_bp384_prv.pem @@ -0,0 +1,6 @@ +-----BEGIN EC PRIVATE KEY----- +MIGoAgEBBDA92S51DZDX05/BiFzYrRLqlEHyK5M0tNllICrbFEjOJMWAioXdmvwi +mvCjEk91W8ugCwYJKyQDAwIIAQELoWQDYgAEcZ+dCTpifg01A4XGYc6/AMYZI1Zv +6QBqMQevHYcbxrtomF/XIuoyvjFvjng7fNGVd4X2bPwMsZXdXJmo56uqhIVTpYTf +0rSOdtRF/gDdi+WQlth31GltI7S8jbFHJOZq +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/ec_bp384_pub.pem b/third_party/mbedtls/test/data/ec_bp384_pub.pem new file mode 100644 index 000000000..eb202e214 --- /dev/null +++ b/third_party/mbedtls/test/data/ec_bp384_pub.pem @@ -0,0 +1,5 @@ +-----BEGIN PUBLIC KEY----- +MHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABHGfnQk6Yn4NNQOFxmHOvwDGGSNW +b+kAajEHrx2HG8a7aJhf1yLqMr4xb454O3zRlXeF9mz8DLGV3VyZqOerqoSFU6WE +39K0jnbURf4A3YvlkJbYd9RpbSO0vI2xRyTmag== +-----END PUBLIC KEY----- diff --git a/third_party/mbedtls/test/data/ec_bp512_prv.pem b/third_party/mbedtls/test/data/ec_bp512_prv.pem new file mode 100644 index 000000000..a30c622db --- /dev/null +++ b/third_party/mbedtls/test/data/ec_bp512_prv.pem @@ -0,0 +1,7 @@ +-----BEGIN EC PRIVATE KEY----- +MIHaAgEBBEA3LJd49p9ybLyj9KJo8WtNYX0QKA15pqApzVGHn+EBKTTf5TlUVTN9 +9pBtx9bS7qTbsgZcAij3Oz7XFkgOfXHSoAsGCSskAwMCCAEBDaGBhQOBggAEOLfs +krYcXGx/vCik7HWdSPzU4uN03v1cSWilTb73UQ5ReIb7/DjqOapSk1nXCnFWw108 +usfOd2vbJR3WS85xI0Qk7nBJ7tBy8NvE15mW4XXVV+JjdjrpcJXAgec+fbLjitw9 +TJoEh7Ht6HbcH8phyQLpodhyK4YSko8YokhFWRo= +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/ec_bp512_pub.pem b/third_party/mbedtls/test/data/ec_bp512_pub.pem new file mode 100644 index 000000000..ff5d07296 --- /dev/null +++ b/third_party/mbedtls/test/data/ec_bp512_pub.pem @@ -0,0 +1,6 @@ +-----BEGIN PUBLIC KEY----- +MIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEOLfskrYcXGx/vCik7HWdSPzU +4uN03v1cSWilTb73UQ5ReIb7/DjqOapSk1nXCnFWw108usfOd2vbJR3WS85xI0Qk +7nBJ7tBy8NvE15mW4XXVV+JjdjrpcJXAgec+fbLjitw9TJoEh7Ht6HbcH8phyQLp +odhyK4YSko8YokhFWRo= +-----END PUBLIC KEY----- diff --git a/third_party/mbedtls/test/data/ec_prv.pk8.der b/third_party/mbedtls/test/data/ec_prv.pk8.der new file mode 100644 index 0000000000000000000000000000000000000000..f2bd2a9271ffd2601625ab95996180139b18b5b3 GIT binary patch literal 113 zcmXrWXJTY95N2c7YV$Z}%f!gW0cJ2WGO~mk1Tz6C3FE%D6^)N9zIyJ>XASoBE`EGX z(BSW}ler5`n2i`%0!#PYH&|Tod2aCJXF^3CHyG2me%Z3U>{!Y7W1mB|Us7Syk?*IS* literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/ec_prv.pk8.pem b/third_party/mbedtls/test/data/ec_prv.pk8.pem new file mode 100644 index 000000000..dbeab7c2f --- /dev/null +++ b/third_party/mbedtls/test/data/ec_prv.pk8.pem @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MG8CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQEEVTBTAgEBBBgzjoaogeI49Um9bwVT +SUtz49YRMP3GyW2hNAMyAARRdbzfMKNw851Tk+YScojYAWe19LS3dsZ098bzVLfS +JAYsH2hUtaevD+V46vJY8Cc= +-----END PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/ec_prv.pk8.pw.der b/third_party/mbedtls/test/data/ec_prv.pk8.pw.der new file mode 100644 index 0000000000000000000000000000000000000000..db0b5bdcc1e5968d6039da050329a4655450b70a GIT binary patch literal 148 zcmV;F0Bip+fsrsA1_~;MNQUQ00s;sC1aY=dO>V08rMojg zy}s5dmLWj|5RT&{O7fC_@-7`5hng0Hy)*?UdFgBfZG5)PKx%-7VT?&&PwBBo+X18@ zrJ}BIdWXNmQ-TDdU9Z9JVAxdA^WrGnj&B`sf=1PHrop=H2wm8ZhmEI@J1;(tx}>Oc CK0xLG literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/ec_prv.pk8.pw.pem b/third_party/mbedtls/test/data/ec_prv.pk8.pw.pem new file mode 100644 index 000000000..7413d1ea9 --- /dev/null +++ b/third_party/mbedtls/test/data/ec_prv.pk8.pw.pem @@ -0,0 +1,6 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIGRMBwGCiqGSIb3DQEMAQEwDgQIIrlmCCSpJzcCAggABHGm2LyJ60ojfilRRp8h +Xf+sWL3lJq6wlj4Nk41SHVnZ2RiVtP5NVK908/WxnXkridd6Qpjnq/14woWVmQxT +IzhKFVi22YmQyBsNj+bEGDAE4c9qaby8u6zbzs7Qj29F90f/PiYsaIEGcNn/W88e +XarNDw== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/ec_prv.pk8nopub.der b/third_party/mbedtls/test/data/ec_prv.pk8nopub.der new file mode 100644 index 0000000000000000000000000000000000000000..fde16a17a7551d655f8cb0e66febe4809a664845 GIT binary patch literal 67 zcmXqTWMX765N2c7YV$Z}%f!gW0cJ2Wva_fgs4_7!vM9Vh?a{s>m+gy*#G)C0*3J3b V_^STB<|iG Z_95o$c{5?fu8iy_Ouhb-7jPjo0RVjE8Gir( literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/ec_prv.pk8nopubparam.pem b/third_party/mbedtls/test/data/ec_prv.pk8nopubparam.pem new file mode 100644 index 000000000..5c910c9ad --- /dev/null +++ b/third_party/mbedtls/test/data/ec_prv.pk8nopubparam.pem @@ -0,0 +1,4 @@ +-----BEGIN PRIVATE KEY----- +ME0CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEMzAxAgEBBCDH78XUX+cxmTPQ1hVkYbu3VvBc9c82 +EyGKaGvkAo1Pk6AKBggqhkjOPQMBBw== +-----END PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/ec_prv.pk8param.der b/third_party/mbedtls/test/data/ec_prv.pk8param.der new file mode 100644 index 0000000000000000000000000000000000000000..8bbaa3a8b3a0ebf0a0839d4bf9498f7163600c25 GIT binary patch literal 150 zcmXqLoXo_?U?9xKuGQvo&X$RhjRVYJW@KlnG$?0cWMok|{{HBd_~(W*jW1jiO-bCn zJ?ulw*Yjq=id`AmPndfBCokYaXjul;z{G0p=sHBxz%dQ`KI7`k*H u-(Pz+_Jzqdxs#SpO;_sQD|c{WHb0UU?VDOj z12O;vQFXlEFr#quol}$M5^{*x0cW-Jw6}J~boa*dRJYP31}quXE DZeJ@@ literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/ec_prv.sec1.pem b/third_party/mbedtls/test/data/ec_prv.sec1.pem new file mode 100644 index 000000000..a8a7990fd --- /dev/null +++ b/third_party/mbedtls/test/data/ec_prv.sec1.pem @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MF8CAQEEGDOOhqiB4jj1Sb1vBVNJS3Pj1hEw/cbJbaAKBggqhkjOPQMBAaE0AzIA +BFF1vN8wo3DznVOT5hJyiNgBZ7X0tLd2xnT3xvNUt9IkBiwfaFS1p68P5Xjq8ljw +Jw== +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/ec_prv.sec1.pw.pem b/third_party/mbedtls/test/data/ec_prv.sec1.pw.pem new file mode 100644 index 000000000..62a0860bd --- /dev/null +++ b/third_party/mbedtls/test/data/ec_prv.sec1.pw.pem @@ -0,0 +1,8 @@ +-----BEGIN EC PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-CBC,AA94892A169FA426 + +gSkFuUENNke5MvkWHc11/w1NQWBxaIxGT+d5oRcqs44D3tltVOwtdnYexoD9uSIL +wMFFRLL6I5ii1Naa38nPOMaa7kLU2J3jY8SeIH1rQ43X6tlpv9WFGqDn/m6X7oKo +RMMfGdicPZg= +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/ec_prv.specdom.der b/third_party/mbedtls/test/data/ec_prv.specdom.der new file mode 100644 index 0000000000000000000000000000000000000000..a80a2e3ca8f64dde6b51eb5fb2175a980fe41aa5 GIT binary patch literal 214 zcmXqLyv)SN$fD4659*bng;n5O;PweHTd^&ShX_g{+ZxnSn#2(*5o3bPUe)3S380p3^o e^9o-rDsL%>UJ~wRzj?dci$+r}&h^@@Tz>%m9&f1t literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/ec_pub.der b/third_party/mbedtls/test/data/ec_pub.der new file mode 100644 index 0000000000000000000000000000000000000000..74c5951f60c2c13c29369f85c95958c4af70dc3c GIT binary patch literal 75 zcmXr;G!SNE*J|@PXUoLM#sOw9Gcqz8F|h2Ztlhk>p5u+JXSV+q!OhE^;4p#*mj($chDe6@ z4FLxRpn?a8FoFk!0s#Opf(LyD2`Yw2hW8Bt2LUh~1_~;MNQUSG)6eKb-*e(h`Xt>$Zy zUeW4x+>(b#T9UqeX!q#h95Vz-+_~Y?{$VrV?OD1a6zV~ z&c6NHRA@=(k=lmDOSvEGD0z4VkW`xH`hv{zIGo{^*df_^l1=Xo}FwR>2-mi3*L~#d*xBm|vh}L-du%`_c zNsRPYaX7h8G&ouPl@<#o!e%H5EJFn>;zClz%F;UL$ojg8A%O)U_5)rcmn;9JL`DiY zKJ6D~J?gox)!aPNb>f-aKfQ0KZ*WXy=IXugXYe0jWzoBr zNm%uI5?7D!H;Vt!K}T4ue=GXo^sZ{o4V^f+k+U zyv{<6Rj~BfWONJ6jF||#c$4A2Sk5%zf{KZt%@8GyzymflteKd)22l5TZ2dZGP)@@P z5Lc{FrJ*W9tqLgbkVl9j)6uHI$$WWzj=v4VFq`oY+yK}}b&ly`$;o~14t`Iev&CMN zZ(-Aw6$HV-B#4kP9!9Wa#xh~1cT4_qpoE{2o+}(291qYRZhM6NutQ8>uB!vLh7tOq ze%RYlM9D__Bh)EWLp^;tcfCb1JL~%*&R^0*=ri2armph1Am=^b8x>p;eB~2#R#s=0 z3Fw=jK(~t}8{5rZnM5MUVaWTewTkmgS4y+16}l!d!tS3^oHks47npEErV|CXpr@08!C?{Q zO}lC!8Cp^cZy&Bz_4v&XfxgLq(0`fPRF^`_&1jWxB39kh#FRlC*9U4GC@?Pilt_Vr z%&-0U*yuQt4DjxRH9X1ASh{wY6wAHR7g0689}_0QJ1uCr+}3us+zGhL+cY44DH|(M z(aYRwbr*ZDA8^Y?-P)abm|pb4x2SD$NoXWQ*Kets#m&R;v?%0k!_>s>aL{g^kO;~C zCvS0e*tJ5m7ye0EKu2#HZDcOfC-H@tHG|T}+{55yyok+KvN!C2I`ZVQrL}|$?vmSNgi0VGSavd!b_wa;x5K$lR zM0#eJK(E9+2g}mBqBuZ~oCPJx!F~6Ny+45;dC79PNF;290b}H3sxLHKHqb?S@30^H z>KddDc(h4V@ZUE}KX?V60rhfaGUvD=%^y|cxkC&^T1Yr55IlFp&?lw2rW0T2ZQEy+ z_;~}8@}fZ2RJ{qo14`G${gV^-c9A#b-5fNZN}4obxh&4w5Zc~n@{D{PIL1HT-}dyk zE0#N26>K={3)2HJ+W9#qSM700`UY_GjM{#3IGfoCl=yDqK1k3r;Vi8u z$t!5I@CFu>)Exv?V3H4s50zG%Ak2w^Kc&%QqzmY2Ko>Kyvlc4 zV)`41$(sTuzV+~&LNQUdh5Bo=7)G>8nT?um=P#aV&cYl{rA1eNkkK9v1`77 zzSVxq<0HiP-i73-g8)~-L@Ib6i73=Be(8oX#)!WkymR@nigIwl z29oC!|5)Rx7CqL{VHs>Egx11!9vk9{S`ML&k@iyXYjGlINW7W^Oca+isLok zuq+X4N)0R&ty*GB=8-E-+}h(g;y$&iTBy)2ozkZkg9N8`%TT+*U6LOsr_}hAMI=jm z6@j>~TAIT#{%u^UHIL6d#g95ZHV?2-1HZ$E54L2jH>FUDQ8EO&Dh0;XkIgQbpO~jL zse2-)Ydg?lknr+j&hLCLy}VBY@}IkNm?4J8$y}A(4R6Pr-W4(RD`6hnQSq-sn@!Fi z;O;X5M`MTNNCyReILNa8?iO-22bg?CVfKsTta^Bf3T*#4c9W;B?cR2>x&~yGa%lNDkf%OiQL^xVwkEMqSHUEDI+R&hJU`0Ypzb- z(0oZ&qQJ2ZsV@TB$&e^b@bkxp<#87U7y|(ON3=J(xa?351^+MOW`3+#0Pa3{-dQ`I zHkb0@*J#(Bllr*nC(s+;W*1M@U~67yL>o@wp}EOzySR8@aCg?K(3uz0V+tIwD6LXj zKSczM3PV^7iHZdQICIzQE$ z{8;cwl5|tvs-&`O;&t#5|4n@!h6+8E@gyvA7OUk!Xj2^>8|0q5^d^icEtyS%&$<(g z>8BhHgTo{vK?iVB}!|vM{k`_&c^v=%V3hOyea^}#ZydeAmy{SLl7*j->^Hyt z4Y<^d9pxC^+E*iBLq7_MAf@-^S9fBP6V;$nWahZ28jN%=mhtGV3(L>OTwidaA`fl=AnL?RRng%5t* z1j$A9?RazXuEA59G=V7M zSrU`1v%)5P1TZl$AutIB1uG5%0vZJX1Qb$?xAdc;PI%Fxc{oiXnYZd80XYN+Nj0L( Lu!EV#0s;sC_v&0} literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/format_rsa.key b/third_party/mbedtls/test/data/format_rsa.key new file mode 100644 index 000000000..0c8cb57c6 --- /dev/null +++ b/third_party/mbedtls/test/data/format_rsa.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQDA0UszjREl+JklUyevaN8fb0Gp13Dzb4pY3MCoJK15BWoeoUFA +IVvuI0C8bRm/i1OO4BN9tSRrRjW+S89YbYy1C73PUgKZSejjnEFA4chcSOKOhZlM +6K7+Pcrcx+sdiDu1DheODMiSFhoxt+H6IUvBEGkI5AWFu5MDP7wlU/AZfQIDAQAB +AoGAU6o9HEhIuZYuNZDodmdl8YjgECdIfojWmgpnmk4X65xa2KGV45LWBfXMADbC +5mc5QZSfQHuaKuYTKdhRRwh59c9VPwYhN8hdgFzbJS9KfJTDuKhsZrdomHRN2fHK +Jn5MrbVCeZPbYS0M1PzVgEz/BGRp4Ik3RAxTlt+XBtunHA0CQQDz6Gor3gFTdCWM +XtrWEfMW+arWvPUBlOhw3U0YgpWqdea36YeXd9DEIIKn9bQU4g0SjkpO7jd/ccBm +zM89dfjXAkEAymB11gLDd0JZhUCk155uBucaZeez/VNucEgvjWDphRInqJg+2JW2 +gSgXNFeSTY9iKlLdBL1zYdywOXM3fd6RywJAIqFYGbxeodO21RROq+BGjHeMWwrf +Godi7Utue9FmoJo21NvyZX4chQw8oM5Q8DocMwtC36wQ8yZac/4WWpqaZwJAbMIy +EXUivrC1k1sOO6I01xjTovhGTlnL/COPCpeOZ6k+DujivVqX3glBjyuQwIXR55To +mmeF3o3PVtCIfehiyQJATsyRPJ1FOYIlIywMSaGHqSpVoebWbDQ6BhYOOvmx5/Zd +Tun1+7WrtPoxM+LQumgPEdx7VDq2L4SetYB/Md1OSQ== +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/hash_file_1 b/third_party/mbedtls/test/data/hash_file_1 new file mode 100644 index 0000000000000000000000000000000000000000..681fad248fe41bd2a40bab1ebf35cb338c27d690 GIT binary patch literal 5120 zcmV+b6#wf?GWlN@9c7EgYk-wdqKTGXdjc54Ru`$FYzCy#(9E}onS>s{LyLzaDX2iY z^6rmF9|gWj{Q%PcwUdC38kvc4ZR?nRMf8O{I9BH|EL3#ir?STx~8oG#PWAnU-E$4q>3LBJxJ=84c*pMUxNN7#pTIgdqIbtAYD|QI|uv$m17}-LtP>M3|AXPTXUG7Y{`` zC&!q^5ZT&_{-^QYop49J)=fAYrHSt#?%h^`|MYZ@*4Fs&9Twv(?oSxkudKCnx>BqT0hkH0F7<-R%$R7n&z#zVI^-$MF?1y)49j<*SF6 z$9=`zo`2&`w|oqB!vSV&nsUBhu*Lij7=E5){s2+lya%gfSI1dwi^4zF3lxySK@)0W z8GE}Q^0lxbd6t>gs`q%SH)#r5yFf@OISbrD_$j*@E&0724GhzoMasL|Ft5g$8JJjo zH^i8^!8B8w-!;MollP?t%n-RW7ThM^ZT_uMAp3xxOCKcW35YkJ+}Cc@x9xT^%q4Fi zZy-@jj9PjSeGm4&cq`)*WPIK(XU>lp8x@Ku;U^#kRCK(4`9CJR{s7wHE|>2lT`!;+JmRgw>$Qd;0zZO-7Bvzuqb0 zP}wC(O5cN+=*@h$XV*Zf{EG?JA&p=BC6gP?%RW%|RM3u(4I`}c8R2qE_gjRzyCg`= z0~Gyoo8A}W@4X0BzL9F$qkryem?PD%4+8#Gbi(G#SbU&ngC88smic|yMq()h0MjT*`FG zfpe|iej}pZa;rP}8VK^qrwJF;N$0Th1%2cZ#Leg{GEfvT0Vs*HZ&}7ZAcxky$JN+| zYI1=E8M#71&Mq!Q@zjAajrZI0Hd#DPF7#)DcOAy}V4F{jb@~R#L?g`e&rrkgn?`!w z*U+5l;HbzlIOf2o$2NaO890oXv1Up%vbCo1X%tdBNLl%wwqgs%SM5*Jkt}hH0E#Y1 zG8?#~*K-A=xn5x|Pc~Z5q#%F~Aho2o+7z@h$4Ot(BuggPb!^X=lw^q+qgk^H`B@2VS0Kpc1~r6m9MlVlyWS*iWU>R#GTCUE&d#8)O-r8<@>T$)?`pgYUG$^aWAxA1R5OXKi*E)Gke59 z*(4+r=@DK4xUWNJ$(PuMcMF*4l@t9n^T-Bl+-=fG)Kg;ER%`3#j zeNT0tbGY-dyZp6R3)@hXm8}*dr|Fn@EMiy~rG=#kyh-}NOfwa%7Dm5ZTlp~IGzwu2 zA>7+amn#dyMKFa-fksu!0yoKR$hS_kvEXw_TxxxfxJj%vB*lz5M`U+~qCy}G2;8P4 z7*w8(_fpNhd2in9k~lh7qvpGm#F&I;FFmn&coNx}S5E|K3mbSrvhpq5(>am3{Thj8 zB~x-=>#u^dw%N0olD9>4ww1 zpfR?SO5Hhua!qR7PP8?Fh#NW1KxS%t>sbz!0euho)ZlAFy8yolCzcJDyZ<>_mN zh?a$JI|wFfOC~~(#yy+IYxnhDzX}o`<_$Io<0PPnXn4}nc%;L1YKGx=RzIPoP3w5} z)|~$DCm1sFBhLZNGWbD;hOnPPzBRLI5_4^pEq%A zs=$t=fUtETS+jqn-!ziw#6hWtLSV<&01vLX$g0ketpy;Li$p7#&nkf;7);E2nVfLQ zNHBW=F){ifm0UMY$wTAX&)vBpbog(w$LDehq2sdioBdU|#P(f8s$Ep!SM)euU773` zxx~RQljEsh>gjh$bpQZY;J0jZZzhIZ?DOvOa$S5n%}MDMn?0}%bc+g`p^^o;tNyES zq}xCxvzXhCe?e%B6oD~%A{7JINY3)QYy8R(5~|)YfS=?c<2)UTf)hN24>_FF=8s8S zCuzv)?SD3jI4x&6LJnm4$6_b&lV||TYML}prX&0rP7k&mStL>-xjCrkx(*v&@>WZ~az1wUvsck&7*r?lbHH3wx$J}as9t<YUS6O(}6d# z_u%%JFRMbCi78qHg`+{!g^Wecq@O*v^q3%WmLO$yzDyrPTDWC<0Cv?@#tCdTCQzCg z*@}%(RxXw7JY%$prjZ=>3>~F>U!D$*3q=gXqOGcz$ue$q8v)n?5jlIG-@t2U7cf}n zP-KgI1?s)EYYfhTsD+phPX0Regvu$OA6a_ z77o8x^OgzHcV={^H#nr^&=VHo@Ye1f?Oz_;Cj4f;h#f1tCU978F>YPd$`_Av;K@1neDk z26mGLE;AB>lfG12UWHwXth3%Ss0FrV@?^6b;Ss@S7726xV#`Ba_)JRYImmm3x_H}W z%r8xP>e7kiJZTQ8Ur#mH>}rg$Ok`R9TtfwMDP3gsgMuJzfs`&u#}iijoccIKuXLoU z&|_B{P#XH3okE==;g7ohF2_I2yB!eOiXMLChC$c5+c89SPeL1WRKW=n7+bXLT^&qM3gYXQ@A!q3=ouA^izJYs&Jp7a6e-90SSE;SRf&kc} z>u@TySxf<8=}Xm)BC-)2a7fx_4gS0r4}W3v3Vhj;k;b&1=`^zJEx^7=?mIxi={U~$ zIGv%>1qgt1zba6od&ng20Mxjj=yHa(Q)FLdxP+cE3~qyMseTZ4YP4)RVVo}QpCPb} z0Qyfhr>V@!I$LueH^;E?XGKky-0w1RsXNu%qcXF+1M*qF+S5}6DN!qejWtc-WbwS z4L1_FbZIHGW3g||l7yw*-ty@1841vWXWzk`mqd5<+OanFU_E!oH=9XJP^I=+74ZZu+gY7c0X^R=iD z3pIDvW^{b5Auo-w=OoPBQpB^@Bu|+DL?q(xT|-Sp@Wkj8mFTiVlv~!{+zLk<`iA7f0u?64pid^00Mo(>k`4BiFWlZ)y1p!Fi{naA^#VV*xIR9 z9s49Wf7hMC3RV17o7HjI5h3jAqbptXsn@p*H(J{NW=hHLMI7eAfA(HVx^hD=63buT zZ<%x`jE4|g(U?#I312+Ne|SkEfqJgOB2J!IZ`->}R5jI}cJBDLWAc8AjoB10Y6vaC zgf_-Z4YKX25VO{3vuEtld<3IbK|7y%VA(ksD$T?dpUk`|9#TQ5n8)GkO9jpfO3L#n zU!az1Xry`w{qY4Vg%{^8q5FfoY?Lal_@lAwF}eNmFyCamH5YQ{oUz=O1EJKF`SYUqg0rToIk1F?FD3Sc*IhgP<8uM_l+NCn9#bxf9j;MA^oei zJxprS4+^T@q!X0M&uO>Lh!y;HsYu9}iVr>rZQ@@;;8|3lE(q)tgMh9d@on%^(~P$5 z(~F+Kz)8}TOgity;{bT!D*;-g9*mY;l9DcJLGONab|RRmcP)QSf-Z(K`LUuthz}d>3a@fH3OgFCfU3GKoo{ z;%v6!R!yTPfy-d}%?GcqLdEtU&bm4mCZYTvuNvFt$IT#^d9wr0Gp&tWJ|APvKVfB@s+md!?CD@Q|4)Adb zK0?9$pDy?ay!^F(RszQSj+)gPQ$;a(@3u!5Z4^Lp^4(mrG5xvyCR-F z8^ZCqjvXU~pM6gbR;&$k5r)G|S@}H(-b{}jA+mPNS;{hW*be@_(iSXw=nH-Fju~O7 zx@6zpc@AU_E}|;xB=N}7>>y(Sx=c-KeSWO7Db z_uXr}nnB|sK%*SNNNpmk)b?Up$q_;n4JqR0HH=*3EJ)L=a!JW`Rg@_x#iHY377CL+ zoGR*$Z!HJS5N=4PQwp#Y4E zFV&*YbUq><2K;@NOHKla=D<4v&l=a6umy|5pZIv)f%^POV4!bcJxihkir|wKUJm$> ir4WYmAv+m;W`z}*XmvB;o*!<%?6TRYLi(#;rGhO^Ru|U* literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/hash_file_2 b/third_party/mbedtls/test/data/hash_file_2 new file mode 100644 index 000000000..cc44eacea --- /dev/null +++ b/third_party/mbedtls/test/data/hash_file_2 @@ -0,0 +1,2 @@ +'|'DW~J>UN *X"Qdi!q4],0V)oj~ mGwP j$ N4 ܔF>5/41z|-ۍ h*hA~ +f0 -/b2ȵ \ No newline at end of file diff --git a/third_party/mbedtls/test/data/hash_file_3 b/third_party/mbedtls/test/data/hash_file_3 new file mode 100644 index 0000000000000000000000000000000000000000..58bb0bad41ac235fed6e4781aba716da4c978421 GIT binary patch literal 13 Ucmdlf^K?!5WgBI`L 1 ? shift @ARGV : undef; +my $name = shift @ARGV; + +my @lines = map {chomp; s/([\\"])/\\$1/g; "\"$_\\r\\n\""} ; + +if (defined $pp_name) { + foreach ("#define $pp_name", @lines[0..@lines-2]) { + printf "%-72s\\\n", $_; + } + print "$lines[@lines-1]\n"; + print "const char $name\[\] = $pp_name;\n"; +} else { + print "const char $name\[\] ="; + foreach (@lines) { + print "\n$_"; + } + print ";\n"; +} diff --git a/third_party/mbedtls/test/data/rsa4096_prv.pem b/third_party/mbedtls/test/data/rsa4096_prv.pem new file mode 100644 index 000000000..b674aa0b9 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa4096_prv.pem @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJKQIBAAKCAgEA5F2mqEsdntPAEij6HfCYnKiLMGnm6PcfsaFYeFYO1EufOjN5 +ZJP90cr3CrCnN9JOAdpBbTpzA0RcIcAdWBzvNNAtIMvSfi22WJYVjzD0Bvs2rCYH +76Yc6vfx7y9zXZcanh8S/2t7B64xmxOWL4RE+f8HWTijAWlyUFDk+DuJWpQK2o0b +hE4S8mX+uUl3afNW5CiPsRky1N1v4a7/J2b7cG+7pDWUcjnvmNCN84v+gSucXfKg +/LiAnZgY7xih2ePEhkkIqn6kU0cVBQj1cZ7hXGRaZ/MnqZ2y+KjiuFot2saNk/v0 +vjjW+xOx76qJV99LtN/1qvCYnO1RqMv2EM8WhErLcgiRrihzaz3a2GaumL30CcNi +xrEXRyEjFaO/klqkpuZRHTtyUnkvhUkPUHuHn45XPxZ7a2XRyrSbFyyS0amTjQwQ +CveSRiJFjK5TZ56CVGKF/DmuLSHeTY3vwi+WXVdKMYQ6Zi9jwFJo/S4TRpzp+DTS +H68FrFRqE1+qIVyWQjmhWxuvPhqVkG0IT7CZ0M8lWesysyI759f5D8DhEp/KbWLD +eXWCzcNSbgWGHW5JA+fCV7+8m0PqodIy5D8Lhwm2tI5dA6Qcro8X127RWVaVsN8L +Izdf1THXfnZIm1fDBNUfhXapKfnFV8EvALFX2Gy8M3kZQ3slaGegILfqRKcCAwEA +AQKCAgBg8z1gr1so5b7iNtFQyqcPwyIscJleiCPFdrknhWmQSXaU7+t2frnASkmt +GSg0s6z4bl9ebvULCweOMJCEquwG4OZ3yPBZLzD91OHcQ60mFZq1ZQPzgvM98fud +TujMb+0V+h1HoKq/rP1UV/FnxOC/vbyx7TCO1eR5Io7CsAv1D2q4NDXdaoPyssh8 +gysWKP/Xpzyxs//3jPcFuhSK9taCen0QDssx31TP7KKHJgTrc8dTv0EHaZD41uym +/S8hYOg7FmB+eXtr+355/76r+Qa2Aci73ugUw2WK2bA/EdHr0mWi0NGrvFfQiiD9 +ncnnK15psLcMVk6EOOB1J/oUUsa8n6/lQiTJYRfFlf0hr+mbMEgdfImM2Xn4wF8Y +Ovapp8Gj/XO7FVVaWW8dIVUrgyrCuOz5SW11Pb0/KFebzOQytST0S3z1j55bUl5L +mDxR0rJU+fMvbdJvMgHgi6YYI1MBbSFmK7/Ue9HZaGxfUPBqXJetOgAJnuoWUqO4 +AtpYbLaIiqvdIDi1xF4jDMGIoOl7CnFzU9B3PjCkX4aGdARpXqRABwFT9bpf1lWe +DsEhbIg4/qTWKcA6DxIXaDhgP9eH6NDWS6WKb8L1SZ3mMytjaCxKsV6p7p9DjJR1 +dwOmY0Hv7eBYhjVYUj3ybZs6dfFlIg+M5RtarlOsFhZJ9nVhEQKCAQEA/l0FHos6 +k5c1726blx7zlRm9mOt+rV1nbEOSZUny++oXGyXrUYvX5NX+p8soF0Im9dCuiguQ +sdKNK6DZCIayennwwEncjKWH+O9VahXxMS9RwtaRDNWJRx3SP6b2s4T1W6PVZdTd +K7MlMB182ckvs67WQ2hMHNcKrTHuTddpAYSD5Lh/QYD6IdWqs6lwLAtmL7/WTkN7 +XdPhzVfCXLjeBBqr7PakNM9qI7duw29QpSfnArshDmvwiuVOGVGCcm4qB1RV0sQg +KQJ5nt9X5VoK2SMDR2IzYbq5I/wexiHIbr4kThaGok55lGiCNRjkane+/rSOirZX +Yo0sJ3RTUrBLyQKCAQEA5dXPAYF7lAo3Xpwo0Qou9IFc0qtiFK9pAp0q81DSbDJC +lkZOMm/ofzE6vF6jxja2skXccbEhIDu876m9370uRUAAmfimAdmRhUk+JzrlHXxO +tFSxbyG0iCmwtCSZmiBcMfvFJ/5HepBhxbUDBIc6Pi8EOgjcQdnJYr60KJxbovK0 +wr9mnwwaK7SrE+mX5vN2aOwGpG9n61ibUT1aELR9alOZ8H4SlhLtZvgP02YoOCSW +BKKe44fbOk/qUlZG1D6O6/H/OMT4TMyYgaswy0QuMHTjOBXrkAmVSch5dwo0eoxx +dFhn31nF9S5rBZt/PdBPR3imz7U6MoBh6/8olHFk7wKCAQEAxbOTGQxqOPDccP7t +W+YouQjKvqK7URA6JIHYtXVmsLpfvzAX2Mfyw+A4ED7tKDa4hXLvVkhq7GuUYgag +6emXq24/25UNIRw/tRKAtvXbA7mduOyAzRLjoizhj6u8MAf1lIaghIeQaDjTfLRO +qA+hTe1kh/v2vKu/lqIqcMIu0Ykn4owsDMOspsOl7AKUNwedIxvd+/KjXmgjJzFA +1kSx+0qnuoRxWMKl4qDeLHTGn7eF7C96H/VxfuN/clpSI5LQg+Xe1vStcnKECSHa +9V6o8+As2jzPZvR0li2N1b3IRZrwKOmFN337LYiVO6PfVYlBIENCTzoubWEAoqHd +aXWxUQKCAQEAuMDYuLMnbeeQfuM1BGUVPcNHpKnUHCCtX0aMIi+UFxmH4Vj+vxiq +YqRmPMovCMUus7vo6xOiN1EOHfHrChH/QfejBCKW/+GvUt9/sPVs+/jTI675OwZz +IwmwW/8X4oek1SE4aV/EgcfScKWDmX5C2X3d/fDlbaHuewwlsoeOOjy0BeDqU2vd +FckTxNwAGc0YIFurMz/C37LIl9OjtM4CCxjNJD+UHUN1x1IdFqiGKCtw1KUM6IZr +OkLHcAyevzrSlORhb3cWylWlOocsoBlcr+MmTA2C4LRzZ25aBdEUQnbnNMlkJmz5 +7o+zxDwtWrk7IY7hORLLh5EgJh9ktX85zQKCAQAZILSp21azS3KzKdAvq5u2KVAV +GumDf1douO5o+5HjV2Kcf5tkzj4A1ffVZKt7auZCNURAG4jaNIccScZBz33EtCuB +wvRQp5f8DN9EQH4yjaNIbPkFrKzgz5AY08n10PBm+X3cY48P27oR/IDfr2wVtCAE +UufjLZCkuUjdCFD1wJSCj7LNwjZURuCTocvtaa7HEqnjW9VB4aAbdtf53WRsbYwt +ZFEWVp8sYc917I6OUJFQcT7jxbv4kbUAXICLaLtaLW2bWfdRtFQSo08pmZAKxxCv +6Vu5VLZ8LGLVkpie8FEaYd/89gEsHh6HgY9LsJN7WxoaJn1sLmEtmyw9xRSW +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa4096_pub.pem b/third_party/mbedtls/test/data/rsa4096_pub.pem new file mode 100644 index 000000000..15d13d3d3 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa4096_pub.pem @@ -0,0 +1,14 @@ +-----BEGIN PUBLIC KEY----- +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5F2mqEsdntPAEij6HfCY +nKiLMGnm6PcfsaFYeFYO1EufOjN5ZJP90cr3CrCnN9JOAdpBbTpzA0RcIcAdWBzv +NNAtIMvSfi22WJYVjzD0Bvs2rCYH76Yc6vfx7y9zXZcanh8S/2t7B64xmxOWL4RE ++f8HWTijAWlyUFDk+DuJWpQK2o0bhE4S8mX+uUl3afNW5CiPsRky1N1v4a7/J2b7 +cG+7pDWUcjnvmNCN84v+gSucXfKg/LiAnZgY7xih2ePEhkkIqn6kU0cVBQj1cZ7h +XGRaZ/MnqZ2y+KjiuFot2saNk/v0vjjW+xOx76qJV99LtN/1qvCYnO1RqMv2EM8W +hErLcgiRrihzaz3a2GaumL30CcNixrEXRyEjFaO/klqkpuZRHTtyUnkvhUkPUHuH +n45XPxZ7a2XRyrSbFyyS0amTjQwQCveSRiJFjK5TZ56CVGKF/DmuLSHeTY3vwi+W +XVdKMYQ6Zi9jwFJo/S4TRpzp+DTSH68FrFRqE1+qIVyWQjmhWxuvPhqVkG0IT7CZ +0M8lWesysyI759f5D8DhEp/KbWLDeXWCzcNSbgWGHW5JA+fCV7+8m0PqodIy5D8L +hwm2tI5dA6Qcro8X127RWVaVsN8LIzdf1THXfnZIm1fDBNUfhXapKfnFV8EvALFX +2Gy8M3kZQ3slaGegILfqRKcCAwEAAQ== +-----END PUBLIC KEY----- diff --git a/third_party/mbedtls/test/data/rsa512.key b/third_party/mbedtls/test/data/rsa512.key new file mode 100644 index 000000000..1fd7987c2 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa512.key @@ -0,0 +1,9 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIBOwIBAAJBALB20jJQgW+aqwIwfkUrl/DK51mDabQWJOivx5caWaE4kvZLB+qm +7JKMFgstbsj50N1bY8izrAdntPZciS9WwQ8CAwEAAQJAKYfNcIoB7II6PQmsrhrU +Z5dZW3fSKNANX7X/A1DwR0DlF8uZnpWsWbYcRoXX7QjvepZqc54wryhW55Wlm6yI +AQIhAOJIaLjSpbHjzzcJQ7mylxn2WGIlbJPPzJ9OaFZCZQvxAiEAx6OEAvl6JKa6 +6a+N2Wvhtcgb4qqR6UHQGJQYGJz5nP8CIAvgoR6ScAAWZRoOcm+c4DGMrLb6H+ji +T2tNQkzEz2kBAiEAmw34GStU36STpa6RGJ4+tyZN6jWakDVqf7x+HpfFE1cCIQDc +KzXIxec2taye4OeIa1v4W/MigMmYE9w93Uw/Qi3azA== +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa521.key b/third_party/mbedtls/test/data/rsa521.key new file mode 100644 index 000000000..0b940aa6e --- /dev/null +++ b/third_party/mbedtls/test/data/rsa521.key @@ -0,0 +1,9 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIBPQIBAAJCATG2mGDzy5v4XqNY/fK9KZDxt3qA1qT9+BekPdiWvffdJq+KwCN/ +Um4NM7EFyXH9vU/6ns6Z/EafMez0Kej1YsHDAgMBAAECQCdoYjwdMSHp4kksL5Aa +0kDc58ni0chy9IgXo+FHjTVmR9DkaZANrwfVvYMJxqYCZo0im1Dw7ZJBUDJQNXnl +ZokCIRiSk66I24AWa7XGUFvatVwXWi2ACE4QEKqzWQe1mQ24/wIhDHD1TCKpqucA +XDI+1N7EHs+fN4CfTSWe8FPGiK6q3VM9AiESrKKLi/q011U4KeS8SfR2blDcL2cg +XFkuQWqxzzLoGOUCIQmgl5E0+Ypwe0zc7NYZFDarf4+ZjqxKQnXCvk0irMHcGQIh +EVPli6RQb3Gcx7vXJHltzSTno7NElzBDRMBVUlBmVxAJ +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa522.key b/third_party/mbedtls/test/data/rsa522.key new file mode 100644 index 000000000..18fbe70ca --- /dev/null +++ b/third_party/mbedtls/test/data/rsa522.key @@ -0,0 +1,9 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIBPgIBAAJCAtMCdT492ij0L02fkshkdCDqb7yXwQ+EmLlmqVPzV2mNZYEGDf4y +yKuY20vFzirN8MHm5ASnWhMoJVDBqjfTzci/AgMBAAECQU05ffxf7uVg74yC9tKg +qCa746NpMh3OM+HZrUxiOXv0sJMRXNEPD5HNLtgcNY6MI5NYbUvkOXktnFZpxWYP +TH7BAiEeFJGs5Z6gRd2v/IbYLMFDHgjqho04INGTOvnyI7lGVKUCIRgJM7moFuoM +UrKTmJK1uOzauWEykCKgc6BGH6TGZoEWkwIhBzQn2v82qO1ydOYGKRk2w2sa+Yd1 +pH5/kkHqf+m8QjKdAiEQ9eVW+4J30wxD0JyX4b1E/S5UpN5KYNhWX0US+6D3NBsC +IRxePzdQlutZWg0Cnku3QE1tOLBCFlP7QVVl5FbKcY5H5w== +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa528.key b/third_party/mbedtls/test/data/rsa528.key new file mode 100644 index 000000000..fd463b54d --- /dev/null +++ b/third_party/mbedtls/test/data/rsa528.key @@ -0,0 +1,9 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIBRQIBAAJDAOMcJG1GSFmEJh/RdMqz1DVzRGAuzXk8R9vlQlLTe7NQvGNDWbGV +FVQggORySktnIpG+V8dkj1Finq7yNOhH2ZzGXwIDAQABAkMAsWYyLglQSlwnS4NZ +L1z4zieTqW3lomWr2+BgxkHbxl2w0Rx4L+Ezp+YK6mhtIQWNkoytPvWJJMS7Jrkg +agMAHQJBAiIA+F1y5GO0Bv+igsNLXwwtbCqs8hAkavU9W8egt/oDbhzbAiIA6hds +PZp/s1X7n7dwfmebSs+3vLZFuQfifN8XZLw0CXHNAiEuEzgDQrPdMIN3er96zImI +rYoUBgabiQ9u/WPFfa4xOU0CIgDDYC089Tfjy72pPgcr2PkpZVhqro5esg/8PI5f +yxx7TXkCIgCYoE8Y5IxomtL1ub1AQzPe9UyyUGzQB1yWeiloJh6LjxA= +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_1024_3des.pem b/third_party/mbedtls/test/data/rsa_pkcs1_1024_3des.pem new file mode 100644 index 000000000..1bc87c9d1 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_1024_3des.pem @@ -0,0 +1,18 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,4A004A85A2D2D627 + +Ls3vMslumxSeBR4o+oncq359q0k0rDTO5FIFxcw7psy6ggd9Vpr3AdIq9qvevmuB +2t1KtlcHoI+Wi+PkpukHCpCvM0Kju19PQuNSvn6eFtR9VOwgk6x+j9x9ZeZp0Qks +BgsGzGubqdN3ze7CEwYGM6CvVpoP3qNC9hR6IogZ9VPTjZ0vM92cm4foSDSABxGt +Q37bLE1OKOfcCTvqx7/r+4U5Z47okeXvOS/Hf7yzayF9ZHuS0hCr+jGWl7qBWNyE +Ze7ITQ19RA7YS2nlvCvq/8rfduQsJyZTV0gIultM3tZ9qNwr1i5yp7Iq4U6O8SGC +cR/95R0Z8PMN2DSXoMJBsSRbK32r2GXJoGjvg+4R0UoTbc1MhUTtsoclIz98lsHk +zVxgPMzk4mEmQGaKVp/wa1ji+9joTkcv3cALHxTtNcE/dElAHBYjjJ7r9V4uAv3t +jay7R8SIPPh7iyuY4NTtDA5m8yyBKt7v6K5hb2WhT4aucWXHYTize+TxSTpekhrG +J0EEz5zhWsrLhXHV1KcGDIHVXlMnu7LCGyVNFCWKRBXIbZaujed0xwWgjfXKbkYd +MKePX76g5OyKFGGcv5KUknlQJhoRElrSz6pywbpwkl0Xqc1dusy1sZ9b5Uh6zjNc +r5sBvj1k7iK27bzdEuL1I3DEcUdmXLNF3dehNo4v5WQL5iBePLoFSxyL8EJkMQOx +fpwoutPzE7l71To1zmE3pmFdZbEXTfjcfqkRy9b4t57gUuo1UEhYYxoB0D0i+BkH +T0ZmJl4Qp2euaaMqYYN2E9FJAyrmpwBMvtgs5oprXRR6geZweT+J9g== +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_1024_aes128.pem b/third_party/mbedtls/test/data/rsa_pkcs1_1024_aes128.pem new file mode 100644 index 000000000..f76290f7c --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_1024_aes128.pem @@ -0,0 +1,18 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-128-CBC,BF176C0F284E2E5F3D50F9C82D9CF950 + +AS/03rvTNYSsPzqtLr13jwrSOVaTUYniMzj42/4psKVTmrI7Kaiujsa2bjI5Ae7S +HDAumVDdRCDO/AV5qL7iJ0iJ+PqOh6aL89PktcYjkgx6XK8FDOq1wl+dPLjmrsYn +oRyRcEllZigBZRbYpnuKZOQ25vnHxGeZ5A4dLm3zUXoMnNXs1h0rPDix/Yd2AbTh +p371Ac6LC8i3KlOIvjlzCFaOWQNwCkffutXDb+TN86xF9+DkJ0bxHhWhHvf9+fI7 +XJFgLAeCpIUMCdhdqwVqr4Y5X0NBA3spmftK4iILn32+RHfLBshRwompMD1mo4Jd +ueEY2P57z7fNxeCaHww7r+OUdZbySauuAmwWHEoA4NxDXAX7c/1/PoPKOI8Y1OPB +00bKQtzGE+FSJQjRzK/n9mIZQFS0A+H54EZ1Iu/ojTpEzmzzE0TR+75lZyfqaf9D +BhQcyjgkwnJpJ2S+u/ssJl0vpC4bKGqs/r3eWmLJQYvZuPKPqorCAUab/ta+dYfi +gxD1DjBCdosbUOolIsjJfsejSuhEQulpaI61DWeMMap5UvzfZLLrQ5kJuibi8XqM +oQioenXf8gPc/FOFiLAAzLKtNjmAgD4tNdA3exmkHwKj8ds+HHS/2FmF+oJ2LR3O +tmO+cov3ZReOVp7wzR6lctG1b2WoVRu3kzwzoOik+SFBnR1v5z3uEggJV6/cyfKm +U3KzhOkrghOjonAqw9+H+Q9hLO8d76cDAwyDB3KxLO9yzdpukB3f+wS+RgaTdrxc +oMSiXklsO9Ro9NIYzYKABjQ1tDLeY8SOOidoLJrrXltJNDKZSVLR3edyk1rZEFXf +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_1024_aes192.pem b/third_party/mbedtls/test/data/rsa_pkcs1_1024_aes192.pem new file mode 100644 index 000000000..c819c0201 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_1024_aes192.pem @@ -0,0 +1,18 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-192-CBC,B83D6A5D09E192044299B9D06C41BDA7 + +DQvNvAQflmShH/6aRopfKpdKCerQBAf4RYC7+MZLYaUxXUuUzFuIuUyEmNbgsvny +ARfFtjCL07e+SGJ31hdR/BM8wWgv3v5P5+VyAnd64vUP0R2mFl92CZVxzcXw2TAf +PbxDrgmiFxv9WfUsa2aDkDhQjKYb4qlLv1WFc1UM68jLiL8W5UBWKKQFnCivcORD +GlsGTSxMq3YXW0QQQ5x47/4uWaXROLnIuRW7ZSeCi0wgG+RkBW1yUH6plhhSb/Aa +EnHqsAlCMZDLwrkgeSnmsMSTpbUcCKfiZmJB5sJeJX3RVwZ6l04MHMBtWh9b5fIZ +4ieSeDJfHqtUgJ9ie8JcLHuNsUxu5Crzjv6yuZ5su6P+YSMsNhHtOBUXAaSunRh1 +1brw1eG7E6qCnRYr7YyvtKhppDXLHf4sB8tdumTCHhBdxxUd49+SrmY8pznkNjAz +Zhfky0/GKe+fTTMzHNjtw9/qhj0NllUpA6SyptMM1vWe62OkcQYSYeH81btdR22H +Kubx1iYMx2hr6dsvM1+BWP8CmtD6wFEhIMBNKYcg/AWHA/NMpd7E2HTmviXBdEVA +4xMh9fTx0cJ9YnNBuVgNNPGSJJLa7JGWdfdCUpTY6S0YEvTQw+1letrVbW3xumW2 +Tk/G/dS0t41QJuaW1sv9DkJJcl1696PSI4ysDJx9Y8LtV1+DzvdlxSyJdg3mJHEL +qC6bCvj9IhjLsrTDWPuwXjIPl2ycG5FGtAn79pJhlDJzKJZKsbzmQJAvD5jj99l5 +ZiJ1UkmVdsFeQLxU9hsKD2Cvpl9/tdhUvLaZ0UPl43c5XaBSwcT9eztiLUXGivzc +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_1024_aes256.pem b/third_party/mbedtls/test/data/rsa_pkcs1_1024_aes256.pem new file mode 100644 index 000000000..9450ec15c --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_1024_aes256.pem @@ -0,0 +1,18 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-256-CBC,28A56EB102CAFF494BF4AFB55C4ED52A + +5yOXbxDDgomJtRFC9iBL819dU/vCOe0JlwdyQOQbagd1Efj7oErrMuVZJOl18d/o +2G6OtjqlynzoeqkTwE0yJEyRMLz6CIZp0wHGoDMyT4Oe86uGh3ki9ZqIWlgxt+mA +7e1RApFnZOCzmHCGZNCqdSNUV5G/cs7or6Gd9HvdKSCdxffPptE6FaaY8OX4737P +pr7svylp569Secz6MO1Rds7eOPEjAZBJyDSah2AMIiEMJxGrZ662iFo/3S1MuDOY +/xoDHtP/Vo3ep6D8Fp24PeJ4/iocu6hmhAIO4j+zLN6uow/Wu+D8kBKMhtrUtnHO +AoP6sjkNOsMg7fbTEqTrXHkOw92PbZSBbwsgB5z6kKeTCYVDBHUaDDlOTbCxw+t8 +PH6IOrQXUIPl7dt2ilfLjqgzpw4T+RCYp1xgM1ZIsoCspUpizmMTPwtn7fuIjUHb +copBjLOT4tUx7itVi2tTAMvtiW9mrHVI8xgpqSiTz2Hg4uMCFlxkglrwp1yIUClY +BtMGL7qA/l/gmhHRYDpkzf+ewuTeOImyyfEnAawVT3+G6p3tf/Cs9RVgUCnCrFHa +/BuYhGTtTV+R6F7+3yRk/XORp9R3K4BbgWHHma2dB0zYIFDXYtlrODUyQ362Tv1q +JNFis2PbtNB7DRKrB/KtteWtg32mSaTL446a0HCF0VpFB/nq0wEPCvghed5KYHSR +PzoegmnjkDikgid4O/RhcOC5+qEykNalddhQOY6CxJEwVTAviHbQAyW3eP1AnIa+ ++Ifc2o67i57bkLLlg0pqHITlz1+g7SWDj7Aix2Y68zWZVL3n+e/wzqbdYqMVxiGz +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_1024_clear.pem b/third_party/mbedtls/test/data/rsa_pkcs1_1024_clear.pem new file mode 100644 index 000000000..e26eac3c3 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_1024_clear.pem @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDHOJLFw/RwEAhr+BM17PMBHIolD5WCNh6qHpYSVRqs+Ht1Mwtw +VzOc2ZXxTUxEN8i+xKA/5GQ80/PJAkM9w3xbjnmqCYSughM3Cr+Fab0qNWJssf7k +rOBCskF8e+SdJxSbLAdrjkM9P2x2OkaaHHANJZ28CMdA/NgCN2L/fev8LQIDAQAB +AoGBAL2/t6Qf6PDXhH350apaHnYfjcCQ4FEeZQSZj0y0vGylW0mcrbd5hxJM+BDW +E98h1tVEiHFygrqhEiCRRCROzmDhjlPVymxBXP+Jev4xeV5mvf2PzgwOR8MTdbFo +dOSI6t9bhpCyp0Ln8eQzGXtuWsH6arJsyJJ9JzCrzeI48sjNAkEA+lgGSPNyWHZW +E0zdtznvGphYKPMuDUTGzm1gTZ0oes6qjr4OA9rD3NTGHVW1FVLq63leTiqK8sOS +uJduIauW4wJBAMu4214tyhB720BuLH7vD0mCKipzD0cEuAdf3NEel3KZxnHD4AK+ +xeiEfFCstMg5uMCNLkShGjMZ5zNfRIqxfa8CQDJjW0h9r6s8jlCuLQY/I/A/b6c2 +YzOKf1V3UGXu1wH47P10JZADDV86eHHZGWykVuJ0eFXVXEhGsxZybFlcly8CQDet +Ks7fZsUAhJhkQ+bhAOWPHGUDkx5OrNjfGyNP4AYi/rgi1zsI1l/IrY0C1lmOZO7C +5u08tkNXBfflRn89KOMCQAwCFgbZqd/VDFyemqwMZAXp+Y1HvGeZI0pr3vBJzO3W +OvIa0KckJ793UjS6Iijfnyy9pWmKJLdKEMe/AtSRDi0= +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_1024_des.pem b/third_party/mbedtls/test/data/rsa_pkcs1_1024_des.pem new file mode 100644 index 000000000..9eafbb6d6 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_1024_des.pem @@ -0,0 +1,18 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-CBC,B23EB871129DD92A + +F6S1xLJn+qc/BVv7/0RjykUUqvLR12OcChmOFo3hboC5omWrmPzhhy1IS9XuVZuy +1gFiqMQwwLcvp5jtMvWTw2kW9zKVcnRiuzlc/wV07bpYS4YV7chi7aGp2+5oUhvV +Ea9HgFQbx6ZYARk/bcFpejLsptiUBu2gNyy6FC+Bwov36H51y+f3tJIl51ImWnGQ +R1HMDtLuzHTb31CmWvXCYf14IT3gowxvpO8smaqoYOIw4XeSzprBKMgqXL69/qjk ++et4W4/zG0p5R4WlKBaReXJ2C57xvSTmbaqbCjIYroshlPo9csPAwFtRrWi4Aqv5 +j9OELmZzgK745QnL3IkqsjQuS+Luqg8s4OFifcwBLSVpo2pWhdJnKk40cai8QLpr +St8e3BHGZPdxacC04cTc8zN8Xr7r76lZ7h+ppksx0uoTV2U0+3caMqyyByuF5If+ +RUYXOJ0Y2jUMUYdid3k+C0bn5VbChFCxniv10LpJZ24Nt4RKEYy+2VhIQ+FuAbQ/ +dSMJdqBP4TTBu0DzCmqaGvgjjKLTFF635hzP+cFvaFWhVOY2v4tkV+4zkvBUKzss +Ef3ZwhDses56/KTI54GUJqWxNK+a1ekor3tr1IUMPzeaApzUSRXusT62QMBOW0q9 +8lSNcAywvWrlcZ127J2zZMrk0SKo1jNNzYKWt0e9XpqMWAq07SlUL0MJCt/KYw6J +1eXT+xE9H5FEZvQkBFCHYyAyq54P3yrWV9y01xi0y3ruBf50i7k/IrAtE9c1FZda +2h5qh0GNAEiGRr8bbh3A3wugidwAVoHQeuMnAsShf+5gj8Np7W9kEQ== +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_2048_3des.pem b/third_party/mbedtls/test/data/rsa_pkcs1_2048_3des.pem new file mode 100644 index 000000000..ac7ef3c4c --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_2048_3des.pem @@ -0,0 +1,30 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,3F3828FEA9BF197C + +30fgMPEIKER2VH64TsY5lk8ICdP0prc+UiW/tjbQL+2APptirB5SDRAtuwTvbFRc +Da97zrRwrhhGxNVobJhhffQlyB6vhM6h5aq9dKwD3auOVFosOm0xdiAC/tv+DqAx +DIZIhYUB5IeleQ5rlDJWoReUeOcnB+d7VP+Zlc1l7zDMx/3FgOyOhlq7dufNUGnY +n0tZWKItiV7rOYWTjbDu79BpG52VyHf217v+DeDSugom4FIWQS+XwIKg7xvEnxn/ +vX9pgiaVfXlfZLfUMhKIP+azOIm5BdqB2rklCpa17/7aQ8gQid3qolOMObWfnBcr +MWY2BAq7qSkebPydELB+ULgGP2F7Xdx41RfsAq8RNyVITx0G/NDkYELx02M30f0G +8FGAP9ft1m5DMBbAYBUhZHlSFZ/9G/gWa/VskSmjniq83+RO24fXoTxYUx716z4S +NmDV6QEv5V8ZgLtspoC003H6FWTPXuDim8UuwJeGJ719kXChT2imMeAUpITuoC81 +edv2Yf4sqAqg0EqFlsW6Sd/1k7+GZKfW0LgCRvTaqYoZp0ey4wxFoa8jqvz67jKA +H4nywF2gyf17wk8CM01gXcGypyQcNHrqq7ai+Qr2pxyw8xNBIz5PgWmJ+3Etef0G +hy/tHfQqgqerk/ghiAnDJH4pc048BjFdXfoIr/gMGDM5aHBDJpZuEAmhgC8PMDmV +NjG5TxzRDlxTH1dKDI9SkMukURy9aYYVJgm0RA+Ehn6NnhZrdShv2G4MsLmEZSsm +aik4l71NlDZlAJNYGYik7bXI16Ou9cfU1JNT9+xZ8NcYIMFH7CPRPaTcuW+SgsaM +P7wVw5rUP9+rPwhcZCleRaR2vkD4MRK4r4+HqjIpPzlBagO8FHb5/wxhbRXUQrEW +r7F1bMa0ZlxIGRf+Tq2mLr0suuL2Rlvth6WeVVi+Il0VllO88e4cwA2EbPRW0G+2 ++yuOsb5PRf63BF3FFVhM4jGxYbC+uuGg0qC/RoI60A+098MlJZRoVV4qvvF5tOM6 +PHCqsxIijXHp4/Vvfu//E93AtVSnPxblXsUIYLx78NXMMl1j/i2PHJpTvxhGICwU +j4WUKXT/TQISYrfNiaqc521vq1MeCeYRi5JnILxvMz5UJIQ5ehUQJ6aDxN0OzZk7 +qGFhKD5K91X2ApoE6fq38fxYkh+MN3mjD7uBArQE37TxtDdX3+l7kcxHAiILQUcS +TIe4qYuyxHzuSlt07fkVWQg8ukDdHYBy/vL3HjDj+fuKATiSXbOLP3s5QgAiZQv5 +yzljGNvqtagxJMTjIeD8SUbg2kFwS6FR7q67S57jyyikSkeDKFXjOg56Zb8gEoBU +nrzTkLICntwdZqFpITklGfF3tZDIWWgbYZMqEOVk+u6WQWv+rBlXfgyW1UbmcgOP +yoiJRSvqtsVwY5cSyuiZcm4Py6VM33ad4/fd4E9W3HQL/axHfdUzN3YMGOsd/PfO +AdgGl81+uIgttDOjj+X+HF17gq3jZA409MZEyyBXEI1QXOJE8EKOVnzjHd+nO3OZ +GmXYWveeyMUrZba/VVoVB5S/wZntL64GHd+GqaXSuEgjmqYFTPgsehCUYoHHxxeA +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_2048_aes128.pem b/third_party/mbedtls/test/data/rsa_pkcs1_2048_aes128.pem new file mode 100644 index 000000000..4b9578e6e --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_2048_aes128.pem @@ -0,0 +1,30 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-128-CBC,4D279F635142BFE952A71E8EE6D14B0D + +6+qW0XUu06eXe0jjSsmRGySu1KXnEjg+682sUbxOk//2YitaMx8wMQqRQvT9Uusp +lW7tYOz47wiz2UrJXKo8Rxow3B38wW7vwjh/Xaw4m6DlcID8Ho3ubN1n9Or9goi9 +Kg3NYtrIWac5njywFzf17TIlxmbHg3wF98c0bKRInBGZxVcEtbcdRiM0ZSst4IAm +xi7vEwHHyo7d3cBJoItJ/1kELqHmwFoWZj2wlXCVEHUU5pFfK5WY7uq5P9FQFBmI +et0IeCCdysZyRmS8Y6BY5cWv2u9mccIvvazQev8H3W8hQ/LS418yYenqd8CAuvct +N0tTpVhV+jXxPwV1+F29kpkburnHrbDN+ZUIVaAdea/yNMC+bcoEypnpT6D1m2ig +ouV7jecJSOxhaDh4h1JccR6Pu2DOWTDpn6pxUrCIo4+2lVbLXOeDS8ClhFf5VzX0 +D+5ZOAdm/LSQIOBXBtqOJ2qDBJINZgpQlRDvo8wDHchslDChTNKdvzjgr/hxdPeE +tAf33lXR0TgqX2vhwbpjqMX2Zi+7VL8ylcjWITdderiNDueDpy7UN45f+0DVhNfT +JIleuqNl09tL34unugpM+QSzgJ0odHpZ1VXkr7zgSFOYau6/drlexS61KXsqk6x0 +rs+n9ssgVqS3HCne0l8I4VOejutBLAVGOXoz7EC9PtS+iYavetnEcqf4SBPHikrn +j67x/wz7jlEsSCyYA8SfPJY1wcKgfKaSU+w2XxAo5bMBjb3QiBYRSvb67q+DtO8K +hUnZMqdbvzFIyXfP4/5WGhBe7ho0dQrtVT+PcCxknMMQ+kyQp+f+jbddLCvcKQFa +Dlvw4XpMR4Ee2ukkaWpXAc6ES301NnXoAwlvKAkThfRDHwGckGfiEIunEZN5l1TK +0X1tp21gUZYE+o7SZNI98Sh2CjxIQSKdA212hI3A+2mOwqBNoZcoDBqrvd2cCoNR +xDA65eV8l5HrDAtMHHt5wTHzcfMik1CTHwL0/O8izQH+fTHKw8xR+VEoGbbQRkAY +PJzMvehkVkc7e4K22nXAs38LARUW0D77ppR78VV2d/D5FCIXrDn58pi4RjjnQOO4 +yoGv4snLhnMq8bYQ5En9403cbMCJBYp4gvC09xeNNkL6EKoBjpupSMrZNn19VsrO +VkACjifittw08/g5ncuAAO98YHQKmNPTM6py707dMs4L5jTOcLHCqo+fo+Wnx9Nx +v7JmWNuFwfG+gIBIYIKmW0om+pcxfYMsry8byIUGNj5SnaGtl5kLD67Lr+LLJwBJ +TNbGd8auBVtroIjdGVnvwtS1oM6eNXogL++sD7NBY5GdJvOMVP9X0VjyfHd+byjL +SfTAJq986dSO+5262mRY3fLsKCeQ/quIvxGsJ2sdRoTFXyKFUu5etuOH+40Yhivx +SnyUd+mVH3MF2sWpuBRE3Ny87mmE8CzFBh+pDdVpdvb1I387wwhpcSfW/6ila16R +1NSvAFwXMeZkxpZZ6hn1Avyc1VQi0fICjKCR0WYY7+Fl3Uv9uXznzuv9COHe2nmu +Giom0TSsOhNeMq0N9AbnUEPAhhIEsaMSZAOODsrvtbRijCcrCkY31EI0O2pT0Vgg +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_2048_aes192.pem b/third_party/mbedtls/test/data/rsa_pkcs1_2048_aes192.pem new file mode 100644 index 000000000..a9585bf37 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_2048_aes192.pem @@ -0,0 +1,30 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-192-CBC,9253446D0CFFFA0AA50C251F129E6148 + +CrtEJsyM72x0zqFnS3qGqTF8JtaUgKe7EkBRoDt5iEowPZFjPM6QILEsBQLAcG4J +RKi3My1S2nBweRpEvTYZHHzHXsO4UyTCNfeIDl7F1lJ4lO+SB/kBkjAWUTcdT+h/ +x5F6F+dZDMKgYvDjvvZfQyl+x3aDd0y2ZqWQWJEvqH/uGQK921d7sdDFclwDVrUT +YWjF91KNzycRaOvTHjX9X/bW4UZZif9KTZSKSr71zOX16YHU7aIWJH+OPD/DSylf +dbhZAVwRBlCsUxckkReg7u13D93jlOlgP0ufvpDAeR1y+jumLOeWddiMBtRtFUPj +IfS2RPcyP8NQnv09tru+ra6KqRJnT6SKRGS3/+cgXGIirwNz0PbYYN0BCIOh12Co +sK7gzCbVrbLLLSLuENsC4NeihK4WBe0NqZDU9BMqZ/ardjwhiT2InM+hZC+HbltV +4h2k/We2LSP3rAU9a7v6ve7U4OI1kFEGn+sNPuDb03C7IkIA3ThASh3gPq1nKs7O +uWQ6SINnZiPXDvlqZiQHzFipF4OBRRxvlYyly7IBdbIfw46cT4dnQh9uBqSadVq7 +dUf25ouFP6uvnmaZ9gEWvpa5yEafb4+x4io4CLbHPp/pPIgOJKIv2Olh5biN8IhM +BdO0surr+BHFogjjfh7p47yFNx3N4E+wc9wmEAzNgWijqq/btu6GxYkBltSwbh4X +8SSwfWrRxmY9+n4zIyehFJ/Q4VCsVTz2meyAc1hCyi21XWm8uBSA55DHmGXrrxwh +j4VQBzn6qYsWJPjvBfwluq0OOKjfniaoa8QiH3+Evmjyfs4wWaSDXOdxAZFvA8JG +oqiuFPuQwmsFLxrVsL9UMPj8U++zHahqOWzCFzrd3LlUrEAE6NRrzLmB5RPcdACM +cgoEgFRR6l81ZWOC+aM+vDyc1u15iOrYhbtgfeeUmj75nJQ3TLXDRv+BryRtP2Wd +kI6lNUL9M8QzqYfJqfKzJ9mKEGa5iuDH1RcWr7cOv8xZtq+ZrzI3BvWMeYs3CTpg +PFgKGg3uWvF6uwq6MQJIXU5K9AZtZE33oH0CQtDjSUVdrFyWgNmDgMGgMZlCeynC +y/82/qCO3xiFUoK53sh7Qv9Qa0xtIeWsRrZyutyxQQv9Lq5xuiOnqL29TL+GVPJm +/wztj2ElsxqPMgnDHJHjixBBC9POX3yHciDAiuXIukz3u6bsPhBfZKwZ6IhsKTVs +R1XMadx8g4kHiv1GnbK0/jlZDC+ne1C5yJg5F0n3X9lx0KJ0tlNe2N2/mWeVd0Eu +mIQq9fLYTrOguE6bSSp6sMzmtpm00Ef3GHSXsf3cWVOFRMEWGLJklDoPgPr/rSke +QwLb0U/in/NOqmO1gfl9y70XM2zJDDDPrSN+SDf7zEu9Y7R6KmHsT4wbcC/LnSbM +/TOodgWOBti4h9EybHc5udSMMSyQxBedAh7I0OkCyBDgXXyQv2g0ak3EgMMlaUHV +8Gtf6y2g4Kwh5DPpJJIJ/kxgsicO6XbSGOm/Ya7i67MBaG3TBZ74B4T/urEYYc2X +X2p8+n3RGXG6BKOQcXR195GWwwjxy+HI6hzXGO41Q7mrs1mOsUvk66VXYFFLpEcK +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_2048_aes256.pem b/third_party/mbedtls/test/data/rsa_pkcs1_2048_aes256.pem new file mode 100644 index 000000000..2e396e1d7 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_2048_aes256.pem @@ -0,0 +1,30 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-256-CBC,44804F408DA69A39B0DF6B8E84F4F663 + +zEIU+VIoZQIfjf55n7N2sCz7QOOZbVdvEacGnjOEh6NoZ41R4F+bio5HthVcq8qo +hyKUcZaPm3+2AceL/xfdx00pq52GqYVl41MSDTiKwCBE8ulCiHmh9bMZHPToAysC +sQlXWDP1FIcmILk+/OnorPLpsox2Is8CELgVfkd9j/ytCMA0TPVEqxqJzrmwp76p +vP2MWS65MIoDFnLHcabHdZZQlTP5DdRj3AlNfHqUMIGygzs0vEmpHjHttOFW9mMF +HIQ2x+Sznragg9ExjVgW4BgTD5SrXKAEDUcMv64w6VCE8Tox1QaWbKoWKEPMFBnZ +HH7uVQJnptFFgJ7cKd6xu+TynEMe4X6iR5GAqPIqd1rhjWFxkQb7zCUy9PukFHlH +uZ3kSLVGV2FDFWN0Hy1R0rfrEFOXc07dwg5lp6AXG7NziJoMChSS2ipAbXo2uE3G +PdIw6nAR/abyZqtwlyZD1jO2R8WIXYiGUeeXhC0C7OO73J7IZnZox6bbVemFyZw1 +AKgDGjuaEbBC2jBEt3TE5/Aaefef+/nm7MENF9BJlPF465H1ZfFbE3PRf+2eVPf2 +Q/dsfxKFG+Ui86qcXjBjex5BvC2kfMqXumdoTlEx24FGFCRUHB5dmnWRUejglJ9Y +QWfolL6ccre3LPYDSmGAnAzfSB8yCqtvsvT92NDFsSsO6KYBy6grhnvv0ieVcUh+ +iDQa5f80fB7ugitliOPPBzWjt5P9FDJJ7Ht2Fpbor0Ig/JKngyTfTRVjTh15PEMc +kYHFFoeT9r5w/4wABsh6/REnuiahcJlcUadN8js/zrPPXAoAjZGfpvin0uv6haBL +Qh9OHLSw/61J2EP7Jx1IL1TPBCBSsuNb4PLT4e3kqq6GVJNRHCMRpN35ytZr4pqj +lkEgl1uVVeOgJYWr8jMDWrCh9ih6xBCxGCb7SSUmeRU7FUJ+ybBbvfsnMWn1TJZX +Bee2PTac6JkXNdDgM/Pe+B/wCFR3clg0ptmr13hmLqmkbCMxkpCVCM+vPA01GNgc +MjYIxTNxB470tKva3jWqC86ffsvvmZb9eTEog/cfCABscX3Y2ufYl71t49tIOs8X +5AXE6GdJDCqJhyE9pDkt2prxeoDSh7tcDnxjb6JfAhvmNORrjv1hI9mmC+IT8F// +QrqxIxBjgKszkFeG7dS5MHo16FCsawCJyl87Dyq+51KTyqeqsXBvODsNT7FnrBmg +Hho96pEJQ4y0YqP/aXNo89fVfYM3hbdUS9XtN6xh4N4vXI6sNVS9NQzfZTcrtGAM +H6IE/AEYp4htKeFUM+QQsPZI/EcgL5e5GP7BA7xrx5L4T94kHIjz69iKSd1zNKT6 +KhOWNsWzHZABOnpYQPvsjjDeIG9/u0ryXYGtH5dwX/z3VvIz2mQ0w14OIw2KzVYu +KGUpGXRvSx+o7QYulVh1Q4BrA03bSaKtmYnCzpaKKslCBXxbQlTIvL2hlienA63T +V9l9edsJCtzElSfJteqc2uh5oVDkGkgUkfmrY1b/8RHKKbjeEKHOEZB2ZxMTT3mk +RGx6HBKoLSG5jC4TjjUcAIY0NAmJRLsabrBTDLBUqxnMZroF75Id9KaZHSa74x+Z +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_2048_clear.pem b/third_party/mbedtls/test/data/rsa_pkcs1_2048_clear.pem new file mode 100644 index 000000000..d9476348c --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_2048_clear.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAqFVn+bKgHDTGFY6QU25+HlEP7ppDRC320hNPs91pri4VZrjL +hOD4/N7sAoWTZiIOGCo5pJ+OztG7GA2B5tC9/cmdSN8UAXR8YO49+8ZqN4g9Ox6q +91E42Rq5A9aCMkr7wm5Ym3cK9dZGXHVa4QsROdnoaIKpu3UbbjYOrmQSXXzEkTiX +wMTIsXz8SclaRYNhHtnv6CKAIm1sTP4a3GyGeCzBW40zknNcgTqHo6J3FLw1AENY +iaQEeXqTOxq3MFWm0HQFoJC4IND54RiARCo7+qJe+aqMGPwIIzQEXRIQVVcG3lvU +8lUyTPpegYb2O4zdRrCE7GCpBBe137NmJcZMtQIDAQABAoIBABl8JKu3EWpzyvGE +jfEzr0BjwWe8TybJVq7jYZO3l8JZE8BjhdxuOwP9s/mFw5UY3s1lxyhXR8WkFxFD +KkGJpNoBZiCcNWkq+5GpQBUYKwiRRcPnlrauw06LLyuXlEqM86SyFBQlZ7FkaW6i +Dco4ZLk/dmIsNgo9ZpO+92YLnIQumq5nAY4Mw6CVra54koDmLXorJzidAo2n0059 +K0hUUMgh4o1BEn5I+YPZOkmASsNUh6zbm26tyaiBnU47ueYE//+RPCTPTI4ePBG5 +8nGuRGebGpdOm9OO3IGgps80mADnVUI3QTjcwQlY1pEeaQ6FMf6WpfwFSzssD6WS +lfEoVBkCgYEA0vRCLOvbhikfaKCnAkaBYlhna1BI32gPa4+bwCKupaI2Kl3uRhPT +JB+I+fzWXjPZDq4JsuTcHCpP2EpfBi3ltXmjmmI742D4h20Cv9lPWItICn11HHcQ +aV40Td2Lo96N8fSzwdgr0cH8fVvTEWaZiUMZpafypNIecf7UMMi7opMCgYEAzEdP +e/zyTHUIUpYI4OlD/C+mCHGOGnDtVG5RIAPNOiXuDshGBetQf+GmCt88RjH5Gz4R +LuYhOQIKObtMRzsgD8UbxBoRtmwTAtaX/e/rZiW6kEgplwA7ZV/7oADOBEqhf5Yz +ublAtD1VS9zDXr6ZoTeJVmZ0VMlKXPd3wgnZ+JcCgYBgYQRS7bcwBl25OZzT5055 +lhY560Y/+5T/+W6ZS78rIX9Jv/x6u9f9awLz49Y0189Va6I2v2To4VP1Z5Ueh52p +WderUzI1Yjpp9R4KdMhRleDmGgeFZ8hxu35+DLgduDJ11uzBpXfvr4ch5u/5xTxk +f+mZy6+KKg2K23gqiatgTQKBgQCW2Amfmvco8jrFETlZK6ciL+VA0umGKOF3uUZ6 +h5QiXiPeEpFyiYMWC4BbAuE1TG2QalKx+QmLWTBH1UDMUKKqQnjwY/e0ZzXaoK/3 +uhRvh2iuZjsf3/H8N9ZNHosCrEF5P2bOvDdFYQz9SfWSntg/Lg1iGaHJgiJBaBOs +2y1z3QKBgQDF1Fd/BqSCKA3WM0+3Bf7Mu4l40CKmzjFpVGALTQIscfE4kUiymXna +DLWearAGdiGpWLD9Wq6/hBC+LLQXQ0zckITz3L2Lh5IJBoysOc2R+N2BHdSvVlti +sF7IbcMbszEf8rtt2+ZosApwouLjqtb//15r8CfKiUKDRYNP3OBN2A== +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_2048_des.pem b/third_party/mbedtls/test/data/rsa_pkcs1_2048_des.pem new file mode 100644 index 000000000..c2968338d --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_2048_des.pem @@ -0,0 +1,30 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-CBC,A21ED2721C71226F + +KC/2MeXdBpU0LCzk1qh2ZkN4f/GNMR2iqyUYYqGdcXGe2tiw1ge21cH9+TPrwX9n +oHFPLGstWmCZDpp6ogyDLR5YD4pcCYrVaqKtHVaNnkuGj2ShMef8ql7c+xcXpWDH +ptya071WCyQO7yifUMj0KzSgN7evDjn7m94sbmBQ7T0hWhmKs9WiBDHqEG4zDsfC +StmDtaXoILmmruCrVgvGWAlCTfye4mBaqXvFjNl4xATLn/Nksk0TgmFijrRP0ynm ++J2shgJGyHvwSgwiX7bkOqhJrEZqI9v/ob2slaG9Kod5NUXiHKxnZjdqcH6PC4i9 +ZCdJTLlNzBEGm4Pq5w5kqm5OxD9ScTfyYKyeXbWpkCJmU8HRkXm0m3DP8jRoF6Il +QwMCY5ANRZ81sEzQQa6obdaXeioMaD1+CpvMVBCsu9EXVAmTiH5Jwj+xbtMXwjz1 +LNIGIlZg8YutLBfnMxnz9RFbz1+PBwJpKIDkK2Sp+Twh/3hbEfsxNrMl59urDyll +9iO/u45sY6wVXomuHiPrclC32S8QW61hGB44aGwdYTDfpTQ4hRo03xuE3l6x3GFZ +W8CPPReIsqv6m8bT2T8THgGDYmTJs/LOQFhZacTbnHi5LwVjNKyf/zq3TXBo8sTh +O2mpmt0Qu7VWOlEqmwmAGdzgxmuPnJtbKpPhAQbqTo35usRd7EjWkgTRzTEd7yle +t5ylUXQoA1DFO+H+VPmzzOo443BLhINJD8nhHKVfGj3VVpWFnZgDALhFB3pC+lpn +5ESLfD1wnMSlSUmKCYbOF5zgmasTAAOi0gaFKW7FehbAPbDha5OyrmZWO6/USAqt +3SrobdHX8XiEjrq83CWlTPDL98gL/LO2lv6lWoO9AA6t32Zur3oS6pjFEYTZtzT2 +sztUpGQbV5OSh7TSSoKRUHKl/0YqBeO/TBUBpM+H+rTtksdnUG9u+wKF7rZodMtS +TsnIb4onpmmk2GZc5YkV36P2kDlsceZHRPte7Vi5zEZvelHUOmiamGtpXWMug9um +lnRs6oryDFffoEZ3gHDetE0bG6f+pRtpnvMJ8VWOFXDnuei2Rv43HLtf5p02+ELq +m0/HtvjFGDvro7ktYFNogpVgAfOwadBArSelmH71GJa/4KvUcM6Anx+yJm2adqE6 +5Ugm8JTaJTxBTHqv8dEKsyDN/5M4QcBC1AfTx3R8XGjqYeApHd0das7w8FdDZtNJ +MK7Oqa2HEq3ChaV8OaiyHul34gR+NttskcQkgRfJX+LJ2j3IxVAqmUdid8LFJL28 +Rpx/pONcGJHjdubbZZ67Cldb/nUs0ST+HQ+BJbYZNqTeDDBSCIsye+MUKnqBIOl/ +30zEUz5WMe2w+c5BWw65aVL7F6gtKao+W93CQ4yZGbNRfiglX193BQYwR1+7QAWT +78jf5WyYzFj3VU8iwZ/PQ3njCR9Fumm75xtIlAhHqliKg8C3Jfb8uZvSjvntkjWn +ksgsLRF+/P1PdulaRYNcZAoYKTz9vYpVaWlSyOm3HnKpl2wSoJXrp/cHzd37FyqW +z8CeXtMSvio2wXmadhBEEoc8QSY5s3/J6jDJaWUxkQNPdWZkDmVgDC0DUlfEdSqh +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_2048_public.der b/third_party/mbedtls/test/data/rsa_pkcs1_2048_public.der new file mode 100644 index 0000000000000000000000000000000000000000..b6865144ab245817b04e3507d4aaec3dcff605fb GIT binary patch literal 270 zcmV+p0rCDYf&mHwf&l>l+Z=x`3(ddI(RC1@qPWg|s^SIUde}r`kF~wPuo<~GxEV?g z@m+L)XGVtx-dleL1HHkGUI!J_TlC!J&pr9U5iG81xr)6VXJ!}bPQBX|nu3Sq@OZ^HpQ)K&<1_5c>I=1DUhzqOKcg+`0SwGSns%GS&^Obu7Xe`b7Fm8A7sFHi(Q?a7 zU=`YZ;_9tX?~dY&)M|HC)^OQtyYcQh1URF;;?dw{YvPz(f!sWL%K7u0_tq#ICwP3r(A8t7fi#J&C2GC$>h1bh{N*&p!4GjQ(g+Y6twcfK U{&}EdlZvrj>9Fo^0s{d60Wn65O8@`> literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_2048_public.pem b/third_party/mbedtls/test/data/rsa_pkcs1_2048_public.pem new file mode 100644 index 000000000..9040cb04d --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_2048_public.pem @@ -0,0 +1,8 @@ +-----BEGIN RSA PUBLIC KEY----- +MIIBCgKCAQEA2xx/LgvNv87RdRCgorjOfariBeB62ERjj7W9wLAZuTe4GUoO8V10 +gGdGhwbeW38GA73BjV4HFdRb9Nzlzz35wREsrmq5ir0dZ2YX6k692xWagofk8HjD +o4WHsP2fqZlf4zPszOoLtWFe8Ul+P6Mt6gEMzEKadpvE0DfTsRcBYQEWWX4cF8NT +/dFyy0xgFdp94uqtUO+O4ovUandV1nDZa7vx7jkEOKO94tHgZmvinEeZ6Sjmtvwu +ymdDhOjVg9admGsBPoHcPHrK+fOc99YoGyd4fMPQ1WOngTSJrSVqvfLq7fpX/OU0 +xsEPcS3SCBAbrURB4P55oGOTirFd6bDubwIDAQAB +-----END RSA PUBLIC KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_4096_3des.pem b/third_party/mbedtls/test/data/rsa_pkcs1_4096_3des.pem new file mode 100644 index 000000000..6de58fb7b --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_4096_3des.pem @@ -0,0 +1,54 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,08A2EE4A627B9219 + +BZXLuKYuOupeUZGJPIIiGd1dFXaBiFNmczkwjADQeQPb5rzf89n2d7N1442YkJ5q +nIvyHoezi2er4bhxUX6ToftGdd9X/WeAbuW3QfzlLccf69RgLpKjWasKRlws27WE +ighuRsgPK+UO2CzR1PSBi2OIRdAsUFhUx4IN1oSMPcx5eR3jglH+jrFwv7oOclmz +KBWxAKBguVOFpYfbjy77Oa1sainVFIZMeXOqkOSggfX+kmHg9Vk+AgkCAhM7iy5m +u/2uYjL1Fp3OUuMcnjWG3GAurKAfquWcifF3GSzH6lLyJllC/RnsUwB034J5PHB0 +KrfHipJyIqFSj+lOizDteA65EoT576+4VOpts0aCc5sZeouQS28nyOVKbOtaAXJL +seQbR26RoAw6ngD8JZAFw4QrhekKRPKzkTq8s5E8QplW/Q+G2P4gmn7WeKDQGHW+ +8FJtBd3kmzIydaM8TkdgZOBaNPAvkRdJfPcce1xdhCOVfI+jM2ZrUjGNjGlVChLv +P9cKwP1KgzUVb/jYEboD8d+ia3xwOfB2sfNS7mDoTWeJzle7zl3Np2IVNpND6zpy +eP4sTjSMDJNGZI34aGkGQEBCznX/ssCT00CVLS4tikQQvHGGasHVqn12gTn+c4yl +ranvfJ72h8DIpHenIQdvzRhTHG1wqIn1SpLOxxRzUCtGUuSWmbTk2Hxxk8xZUoNu +n9n9mXv4DecGOmmaA2zHq9N/lmPv9ekRneMypD5sRjo9OUJVPeNkiHCzp8ud+Nr4 +PcKeZSsh9SBbGcgQXrGedntjualYq8/yoE0cLKOud3uq9PA7gtR6u3A+nT1NFMuD +hnsnlDj5p+k1rWDt4GnYDSjRrbFMZ3K+s/OaJ0+Ul7WXBup+0X48zNXv+8FPxsxr +4zMFpLuhxLAI6IJlqjM8TQhRmP79oGxolF/rNyOR+3K+HFjEFaBW/Cm6WZVKYV6N +6kY4HBFsYFhdfPlIpKX2FfdH0WT3yzHLuMBsb1Cc3u8DSYThg/vxldwj1LZnTUJL +ah/r94RjOXd2IDe3CvgxK8ofT5XdAPZHBKXosnMTBx0HZ/prwFXt4YvrwbSxHwT6 +Ekk+uqMZE73Ln5Qh4i1iEH0j6Gwyw+PekVsc5h++Et/7wHlvF1dv+RB1imQvZ09n +Qst9uN6SYhhfHm7CbGpNjMFJGopEgA719QoWnzCefgnuiULWd1nvUTjsmAw+w3DR +WbWVX88K62wE9g22uK/EB+yvyQjbOYDroTIlpL1Pndmj5R86Q84m6zgOsImmn7Jp +fbG1CXlRCIlFCD87dxNSccMeUB5cE/qpxtaAntYqChgcbNdQATuO2YB77ZQyL9T+ +cxCOIXzhnxhqvfZ/Gb6kT4LjxYFzuY2dVIwiGAHtqASpbrB8qhsj5SOcGg+qdNwD +LcN8nOIz90u9+odzilr5BZZIU/mFKzhPw4+Mv5QohAk4PUx50yz6NvFiCDwIhPxX +9MvV6l1pr2Kx6nH0uzpC8H524zL2zhYmNhUdRUOCPApLv5a58t8QkgymFD7ZXQmz +oYtIyuv0D7F5SfHcDCul0sQ/cOoVSLIX5lj23M1SLRVeUOCO1HGK1wLaZX7jLzbf +sZUFFWclSehoyt3Z83M9/nbDq+b1Vlk/1qrxO6/AVYBneb3KKYXiYXIQHkGt6ClF +yeAPRXunxm+R/qoXaIETcknyCOH3teePL0uC1aD4jJEwlFH3JvlSSA3ruAsrBuzQ +Oy9VUq/Q1lK09SRT+EKzmVhvb3lVYkP99Du1BoIyD9IURGyxoT4Flfn2E+tfN2CS +Jf/JQEtf5eI6jSM3xq9fslQORSNGWm+Gb8i1wH/Sl86d7OZMdma5fyfqA4dYAi+W +2k5sPNomZ2z8kL8uixR8Bt/Bg8nkIKjLpZIu4cd0gP8BWbmJ6axfwbcmP78Qk1Tq +kwW49WVg6Sc4sW3T+zPdV1wGm7DdW3KfJJOV+6i6q4GTf+4Idh0631lVC3L4wJ2v +C0l6XgR/VZQ0O5NFGeRU0tdrqvck27BjOkngRvDjTkApngilLrggvIXSeYMku3q1 +2MuydcUFA3najp/F5v+jTiYIzJkuYsF4T49M8N7L0XLuzmhpYK7EU6E6VdsoABCY +JWWzdZdfQ/dkGCbn1gIbSi92hG2YQ8nOJ8wOfm2fynO9iCu3o6h59sJ4zrplAyFs +TTdK6yd0uDnp9glPmurcEXmYOGVjVfRCRRx3K9tE2QHub7lGew52KrcKt9FUPaGc +iD/WQi6WdSVa+YvLopFBLzaau60QrwORYKBiZIOyZyVq4LVWcg1FIbni+1NTOpTO +bo7/ymJVA8yPqlcexbYAUUL9zF9BfS+lE+MWygA83dWVogIpORu8Us4GtUf9Atq8 +Q+uxiIK6V2h3KQn20E3EHFmoRJJ7My3GPHxuG8/mczEAVMhfZJSXqGNiUOgc9EIz +eFsfoyPiUoOkL0WCXYnt9GDPX+P5FZ2ycfLb7pQUCFqY/9Lr+0LzaEqqV/GLyBRH +SR8j61eEV4ZlISLA10eWkkyVVHRA2OeAc2kmaVC2H7xBUY7owYDDtlUzKeKL0/al +gvCqE7kcazHcoiBkQI8IzslFW2Q/plURJGkuiUPou36aFFTj77C2oeWT5hRxc+X3 +9frLSIRQItMhxIRxIccxuv46lHYGA/fiPLJ+L+GiuZZHYX11UIQ9wX+XB2eNLZFS +hvJy7+u9hsYyi7KWYnXM+8I5+RO2NhXfKhPwW9IJ1aMWMUh/VEYlGOMJGSr5c6qy +21qNuK0D5a6tKRkHxaUlLvPOlylqGINRZiupjXIrkbzNy5pEYqz3sJSv31FHUmc5 +EbrQJsI1ia1hEY5Zgq0eQc3k6HcfmfgIIZ2GB83N7AGrpMRyH9g5ZguxhdbSMjcR +1ZgUxx3sXWPIIwlLTsxl4wY6CqTQG2ZNPya2PTW2X+Qsl78NhLqKUgXHsfQjViKO +ZY/02FZEObhIfBprdq0HIu2sFKtqyzO14kVe4MX+ZrB+d7QmwPqDsKb9EpUWimFs +HFPsOkJ0lc8EY5i+V5XecWOhQccjEzoqQzffnlWC+E08/G0MyngXfym/JPRJxYu4 +nFYfGzbdedXl7vYXisw2kbrrQW/EtkVfYyho4G06tszUccLGh9akU1ie6ekDQT2o +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_4096_aes128.pem b/third_party/mbedtls/test/data/rsa_pkcs1_4096_aes128.pem new file mode 100644 index 000000000..c54c1be20 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_4096_aes128.pem @@ -0,0 +1,54 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-128-CBC,2DBF602A00D044C2770D4CDA0D26E8F1 + +945LBJrU1VrfEqmgyMSQmw0BtwxxjzegntS9iB/6XsTuRbyiOpj1YgiF8oHYhNXm +8Ubgwe0WEkqYOxyWvrBDxFgFfcpHvmrNvPssKW7u2jFx+wKKDCIBHuXIIfm8TJ1t +lhal/TpRAs0Zu6ub66UG6WNxtKIW8Na74OyHiBk74V0GCpNAnNNpWsJ4YW+M3wep +rMXnySl0EJ8caZYCXVzcHQVVygCEHCtSr+cehCPSJl2jeWIwqqy6fiFWYDj6s03C +eTylSyWFOMjpTmi593Dh8vwJ8bIC4aci3BP/+TYlvT6+91voYz/X8HtlNMen/nhP +ZRYbfwH/Qy2FaEhHI9VzQu83Wok07K9TayDBkjh2HDIL/SugeLGqBEeVzVN4aM2O +/QA8wg+gEBTOZH/uXim/81/pWAaYfXPH76/OxjgdrbKQx1CN9GR+h8stFrMnTlQV +AycGUc83rnWEJM9t/3KyrDMSPwbm8lm2npdboh0iXi/OocXxrW9Mm8OpD1mXFOg2 +Lm84CCs+X7lwiDMbBNRSFiiUSzmzX8GWMkwh+jjAiTa98pbc7EKcTlYlkOkOTeVj +rj8Xb9eBz/AfdrV52XnDBXhNmlpe41ceiw2aPmZ2UhfaHbm9wYL70GTrTvbVG/gC +u8yYT/3BLZ6j9BAaS1QlA/sbJvlvc3TqQA7wGUd8RonG1rqEK39wBM6M9dHddre9 +XyCXAaHH4GbXTGFY9xYGcoL61HFrEl6HZ8vBOs41rYROPYIkWJXFmoDHY1aZo1Oa +ofhJG2bvv6gZQdt2f5JKeWSCMpQFSP4PWj8Z8TXvHHYQm9e3dImVK0E2go6MjVrd +ZS6WsJajlp0UB6ceLFX+NYP5YH4u+VJF1PQ2M6+yno0BJpjPBFhv2pEHLxPCQDXg +L66ZgCiW5WPFfnm2PZOE4qtlK2msJGDzOez+nvOc/Pxv2BVhWKhOM9Jyc7c/at2M +gGNV3DPGFlRnuCdHDQy3ncb30fQsjJqQU2Xrj5DMYDaWcLTjznwXO5GMfVAQufdg +EJAYGa730fPudLsT/pDJUIj24Iz4Xfnd6ilj6C2Sbdl91JZP0JwFkEuQ43zo9Nr8 +vMcz+wzfkbq9gXKOM3WNjbHFX/BfS+/vM04Cu4m6dhLIFDw1sguI5yCaHOUiuk2E +gwGHkE2rKo+/afymCXYas/INFr944eIfkK/dMyMZI16CZZtiowG1UoFzynNb9o8U +NUMhy8Ba5qrbvx8LhaQkHbeiBZ2vKmyay5Y9FYZ0JiY/Jn3ngiec8zsgZG3as9XY +3quTs9W8fa0HYTNvJ4o9xZembpWMj+HLGjwZ8uiSQUFDp4mcwltb7t4cnFfu1X9Z +MPPKzHTrECAd8A1XH6HEmeZhUaMwtLt4vNm0daXe4LvgMAHk3pQO1flVrsRxl3K0 +VD5NhJCG1UTl3OUTV2WL5+WW76JkdZ4Mn1N8tTpyLmQraifG9yBhGMxUNl4x5brf +uAQGzV/U09eEjU8pDVZEteaLAbFqH0xsp8Chz9dGM6pKy2t2H/ZFvk3g5YOKo7cX +mMGf1wG8WRyiZTxM+XK+tpmUkuPgRjxdw7rFTTwKNG5VmBymIHGR7lwiv7fLPXo1 +0v3gCztnKBTfCdGUjdG8yRNGAKtT4VdRsCFeUYl3ZehQUXlO3ZU6bcVv8DGFmPli +B566h8BPIkQ49MKbxX2E6ukw5hGzilAoY4VN8txXGtncvm0FUTt+ji+wjIDAKjZM +DWMm4bN7/LCEfsx8f1+XivzqQY7hdVntkeUH6R9GMmJ7ldfR4DYVzGljB1xZmVNV +FD+HihBMVCtvzXLax5zlrf4iunmSMPBW8cNTJCHXNu8HbxNnlhIQ55G77DDIn8RC +sh2UDHEWfkXuhhCfdxOMCUIBTBMCgK4N4pRdxEmj+RFKJR1wHY3SyMrcU7ye5/nr +mxBF0HZKmHm6+U/oASjHeycUi2sXbzu60H+rSQjXVnCuFMubQ7LzJzNddmRc346O +6fNa+28RUAxdmWOD8co5N7f80GAGKh4VwD6Hi7KDFdXPNFclesjTKF8U6E/Q/hjm +HkH+uVeOKZI+41qiNxIpqP+76h4u69ZgZlYVd0qkbRABLBPN69cgsR4EEcLX8JLD +rwgPaLrLyX9muYsFf6I99DDjcqbW4BAu8gjzE5qGZWQnOXAfSihUBqE2VgUQttF1 +Lw+fEe34AqJFr3ARcQg8RsZLomtQbba8VxQBVMiPgi+53HSz9IHTApTQ2ukuFB6x +h/uyVtBImLCEmBu5p2ZSBx1SWXM9A2pj1tg7CgS6l5F+VIFInkjBmSVvRooCj/eL +kaEXz65E96Pq0tmRlw+Zg4Xo3RaU+Ah2Vt/6Je9ljD90wpso6QbQBNnJMDF01EKu +KJvvxf60xXB8j/EZvYm/7wDItCRnSBFZnOQlIfzy4bvM/TLFWN1AgOsIuWjROe+n +Daq5gnCBeTwNwiSkoM5WjjlGGl3K1ubm8t1dEbjgL0tUHEv/A+cD94SkqwdPiL+K +uY3qmWni4ZfwD7V0l9cCkUpdhmmCuX5v3ylwmSvXJ70Ag6tABDSMZK5pj2GTVGno +ggZYcO6eORb8iaiE5ZkJ3tRYjUtbXuqTharC2OqlwEvlOGF72SrQEiS12zgkGYnJ +ZYDGz+wDA2CCpFXxNwL1ZZp6ABgH2rgL3RUqPGrXefdib2lNupvrm7s69//wJmpC +yH4Hex8Y7zA9I1cumIPFARQIOgNbvnCoplRYNeX4TmIMY9uMGtFNRHvrk24bCdz+ +leOGPWFPrT2SbPb6ctGRwZmgXq9NLcea62ErzDHBwEvMxFVhKAGoRUR97YZv2y3F +hkj/kdgQVg5TEQfYWINkDlGX8kpRcyHKYA/VPzupgI9g7dvP65O9Fo3sivJ3RM8N +QJj1hcGn6disCHnw4PrgnxDkVELIAOD5xye5919AYj3j/MwIu7kGANNjJk34Tu6P +gRxagTKQB5qyBMsYJl7k/D0RUPA8OsRH1Z1Vl1+ZXtaraQP95Ozoin74NPESKMnf +8lhmetneI9kgnW7zDxZbz5On26/UnXB9FfJFPsHS60SVpUFihFudrpSB6CHxvYAm +hN5EUekFEAgB7LJ0Tcgc49MbVdMKk7H2Umoovc1Th2DBeET0Q1yabaPG3SQF9lPH +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_4096_aes192.pem b/third_party/mbedtls/test/data/rsa_pkcs1_4096_aes192.pem new file mode 100644 index 000000000..8f2af5a2c --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_4096_aes192.pem @@ -0,0 +1,54 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-192-CBC,3F70213897D2A537A35A891E5682E0BE + +cjhXvbgnfdO1KzCgWFTwBr0ga2bwtEhFIWSE2EeFXK4IWz413L9nfGyx4VGMcb4b +j9f1XvJIM53bZ1lrqPkDd90qzq3GG1juNdAKUqUSATFUjo41/KLE/yCETMEhWCIr +LdH51NvRGozU75SR+i3DlZGSepn2geDjdCrCQuwVOJlG3sXiyEKYvBpQDHYWhuH8 +isM6Vlh9sibC1WhYrvslY6M9l8C0WuKGkqZcJmIYC2q6uHTcq1g3vyZ7ZEwxSYe8 +qxGMJa9MwkmwAaT9d/FTLjXwfagl0Waz1dSBOegtqcTTjaougv+df0y9VcxVYcay +lMhjo3wasTl1k8PW6tM1SEEXA+4QJsGWdQSqi9TqwiqwPcsxAZ5ycNmF+Kr7h3dY +7yFzc1E3xMpH1zR2lOfvwKk+2aWEyeHrREd611Fpu4Dl0WEtxnTphswt+FHhmNqF +J8OAm2Cyd+pzkPJOJXgbaYqM/ff7DTo9KQd+WJbizOVW9tIwz9benq3KCuL0NyJK +r0Al9BI4ysc+3hmfPKhrGzvP/BaGPTAfE2Rk9qajPfyt1vYg6WzLrvvyPTuS14mC +Ldbfzl/KBZz3ED3eqmW3/uMxIZcnRUL0jr7DPkdN5hoJyEbtu/kT4Cjke9IrOnOR +rVHowECNOjiA+Z5cIW3HFK4jjQwUZKMrZNrN6gRbT/ZDa5CwgdmmFG49U+GwNHmu +cXvNnaGY8PDPvXBG9nmJ7mDA8P/VFPYQVcPLlTbcA3QL8NUBWi95tp4FX0tdEouP ++nR08+UutUnifGDgScBeBvzI1eYP8Tb4jc/yQDT1L2qsk0bY9LNTgo5XMOuStM/d +Hf1IH2vx5o4S71PtUClJ52dGSbdr1FGB7CNLOHugaX+D0FsjxsFiAnPAvOvZ64zR +vILBa9G7pFxhP2cbo1jO6mAixN6pXoZTEYv2i0SpFvQzxAP98PZqWFdAFLPjEza/ +Q+OUs4xV7MdcRh/wycihFCCeGs0QFcmZtlinP7qkTpaXUKdcQmJHj5CTawu2GFZz +4S53US3p8LqoBMOb5dgG8zzaCh85evrG6liKGtzpY3obsGZYej/Dvuht+Q2Pn9a9 +viln5g7al1KEz0cU1VTfB+SIunCMfNS36e0zl8PbSG231vEQqVbx8Xv5zgzSL5wg +I+XtotQEgQE57miw0hjW+DCaDaBc7mpYzPBaqtC0qJUSOpFE/fig21H4uDBBZbk3 +Pf5fkLXrCuoT1EJQ1iYAuJo6KTdvIO//6h1lXu3ZeassNKS3k6yAmyy+mN9+SY4i +RQR/tjyqbKRVoCLiNJ/h917NSa5jFJVM3DQD9ZNYR8KEzVFhullZd+MKeuVM4NoA +H7K50+vCfIPetZfkamT6DQxcgqwRz10pfY02HmNwx5sPk+US7epVcBlEQofklLEq +fUV3oVbnaID1FjcITwvL//MIYMyHa83e/WFkOLORxzRCOnCe5lZMRNNrWFZCCiqb +X61aRfeGtEkEvxe4QYbUnk2jOJYsaBW08T0gOPKaIo6DpzzGKsotzYrTFs4sVr+p +QfQvWVKq8yYwgBe+qCseNcbPFUd40xGSbZrYGLB/Btax5431A1KsRUlzo5gdDDoB +fEGA9oFbVTZ93r+hK+zs6lWXeefe3m1wAetlLWpEneNe9V0mHZ/GiPY3cpE8dJNV +OPucb0DQqJJdmCfC9ZXxgpXSppqB3jo+C75lgTyd2kepwf9uiVTz/ysnHvj7T5tF +A05lfnQa30MdllCBaYisJa77Tpq8VoB1boogC/UNsCorsuXCDe4PvKPeElGokdwF +Z32HdTWftm+9ZkiQBY7aKxPELnMaTEvxV7p3O45bqcLt2yuLejDSp64lPkX3I1Ze +nPdEnYfOLacvDWxZAmqDmzCTwbLqeuqeXEy7SDELsOsLjJQorIcv+t4y175javpP +8f9TNhteNhOTjg2com3KtyyApUPZHxEnFlq88zbWCqOg3pOLYXbm8qaHs2shlDoP +Qi18GHQy8eu/mnju6UDASAY5xCCkfuh3GVQX9TqU63kK3j3+VNFmD8v8luStPFqZ +Z41mebckvTPsdH1wzNSZ0yu1m0nTfGrbNbtG1gDEdnTBsLH4P1hm3DFVOLh1S4TK +iVl0JUnGbWmSP5AJjbxLw4Y8KrKgKMC7SDGlSyWiEH+rPkVtqrJEwG0nnanstM8M +Ddbf5YvpWXFYGzCERMm2WrpWVrXLwXdMW497cO+YeYviwGDTmAqFU8PoJkDCt3F/ +WbP7Sl8Y9r+a92eyoWlOh9iP1uEneNsT3z95wpqWlj9eYZlFNjD8aY/FXgfnjXey +dehNvuCNor5+FI8fuOHj1C/2Z0PskmzoYuWmno5sPhNtE2GpWhUFejVF6QdbRbzm +6WY9+sJeXaZcrd+AGH51ODgsliSPP48bCfkynkni6bVyURPYeTduhd9Ww8ZXpjNi +ROUGA73edxzZffhAuqujKNE7+cs25kVchZ5zh3S9RYCW4iXfMsIyLv2bi6dqJPtD +YW6emBTTHMYNE1EFyBVA/WLL75EDExJeCbIaCf7sh4lsVI6MMyU0TwTmZ+jNANqi +Ciiys0AYSfRAs41m36h1Efy8G1bx946iShl/BYQS/6Bv0nr/LAOfaqo8mx9/jj/z +Zx95oX8rKViAj/dtlH+/teW+i2zVVgjcvDr1pvekeb1n7xNLxMZs2bGHTeGFrqrB +1rv9h9uVJP11YP7AuyAflAC3LOKOtxen8cxhvFWJGW/djyrEaETyKy7mG87v63ze +OboJYP0F2005FS3xRZJGohcysp+CDZS/2r0DfiUi1b/yXeMf6yOdh3rXSVDDrxBZ +ZOciIgadV2wwMgj3tMpHfA4kRuNWMdr2OUws3/Kl2vVo2sd7oh+Nrud+peSnWq1f +0yhsbrEhxTFeSKxd39qkUg8ELMsO3mLjUVKC1bFZzd3cHulVJhBRC0vCrVAgfFye +hy7E9sU4+cbbGGb30k8WODn7ciG146B4rv+ZXDTuDG/PJeDf5FLrJAg78RycF1Xb +vRfMIcrygIczxKgd8sHuAk0/yYN8tM88+9wEzPr5F6Z2Dj6Giai8TH8p3t9SOpev +JIFSVyPYxUWg5B0kCOLhihe2aBP2Gi3+VoWbNoRiqH7dV6refqZG1CPf4RzKJdT2 +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_4096_aes256.pem b/third_party/mbedtls/test/data/rsa_pkcs1_4096_aes256.pem new file mode 100644 index 000000000..e2fc2e262 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_4096_aes256.pem @@ -0,0 +1,54 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-256-CBC,52B3A521A4BE45F79E26667FB6F79A81 + +m10sgThu0xP1wMx+664P/NHSZSjTW63ntAUwVsCfpWamzPLGWOQwGqhfTP7FF8Aj +ckgoYL9Gryulm4/YLH4lh78/beGVYbY+dhOiQoJ284J28v1hGbwr7jRITuabKted +PSqD8UEWqHRmJojDe9yznbfAKjdRyBapQg9qrbKsuumq9KKmEb/7kXKIy0eEe2lS +U0/aGFlPh2jpyLuV16K5NbeIZBzyuowZWcF12AI6gc+axP33gpWPDoNqP1PLluT3 +LFx7o/1S0mMpVNQ9GUcxk8X3mngJi89AyUVoby1YIffGEQWKM/lqbl4/uztVRaH+ +ZL6d/loOmIV3FqDs4RlDTUGMbauvur3BroH/sFNNfsPv0L60U5ZqNVWpJSLdiyzT +Baqm0jET+pQnwO5pNVMmC4lV7ZTIRcoSmXwautuoxAPoJKGjrU2nKGCFWvbYyq6f +pIR7RUH39pz6ivzW6+cHbS5B/6X4BLGMrgk4Y+DNUWtDaPebocIZKPhUfvnqwb79 +oNyDmn3wIniyOYsZg3YzVOoZGanWfEfMc8AQf/MsHmSETRRG3+zGqfuF2grgLt5M +6f3yz5ybKnMYC3U+Qug/R0xCw4r9PygCF9S1in2mPj4alyfgU7bfTSnyIeEEzA/e +csEnv8c3BUrfu5Mr5H2miBByEnaE8LoW4e/fo9Rjjli5YYPyS0Gmj9dsp2Sxh6d0 +F6uwftnHWidmPjzlYYRaCnCd13cf7MzIgCAALKU6YyZgj6wHZ9UGHuPY/gmM3Tly +rTxtaZ8RkQ63QLyC3rfed9/rScZLP3unnWrE8srxIBfkrdmF7q9F7GvpDLxjg+F/ +SPDXBU91sAVCLsV4uEVmx2uYBnCGQCvk/sESlsDWVHbIzhqQeeGOTFTwRi1L7dEb +b4+/+t5AtWV2/Jqp57c+pi9MISB6dGRi8PwzVL5o18mRqQoqDMGazqiZrnkQ2HLl +kpXAPaZiEC0B/nbHk1jvs7T8vyckNCo3u40Th0WWMWDBg2oMNkFg02Syp9suBfGv +eof3G7qPKGZ42hrMt/niBhRhyK4hB5P8ZtcYs/TdJJVAK3oBHbwZb44j8efkng05 +3gGCvvRjCYqP7ijhHaIBatqsStuAoJqZTQsXed+5BenACYqGxT8mJl+JMqS2kjum +Mt9WNK6EWV5uTe/8M/A4BMbR77/AOgLBYIWpOWcsjnTWDayZiapEwnKoMPUjePlr +pbwSdPhP2VHHFKqNak+OEDsPm3ouYrCAowe/kU+WvGuyf/83BizJZ4cbnu4XE7JO +jw5PHrfIW0HhdqNDM5CagQOOWQazCUB/uH+ehqt0tbDmx7ZHPtA35ZQy+tVYcvFE +RMozwpEcDQHDyooWBIWXx8v8LYySH5kYUkwTySe0WQrPjFAQ4WOQDTaq98gm/q6b +oUGQZeRwPAdUa1muj1xUELzbeok8h2uLFS3VEliLKMo9s3gK/GKcmyb3vhZpE+uW +JHRR+MkvSHNOyV3eT0m6S8zTj+WxDAkrwA4OWN+pZndlIMzUuJ5OH4iyXBDIbozX +OYZgHXN4hXLO2ThNFvud6JFj/pHurTVBIATSo4Bb+VCynRmtiV6OmHoDoNQPrv0J +OtttwAbKEIUp0dQLMDzxiyqnurEkvwXJJA/hXbh7pxCVt8mlTzuVWLLxN+paF5Ro +3BincBlVtPdWcx75TEXhewnF/JiM29iG5qx6NQmaIe4f0MGtPCFFnedhMJg/zKpf +WRQiXWfsCCJWPM6NQdCxmFJkPuoFWGU3wpFepUFrYVwgnSnwYdmDphyo8IzMdZKJ +HoC6TcfxoX3EaOOFYNPDrYqFU64gpfIX537Cunr4l11kmt9F2CpZSZ7SRT/b+fDn +JDk8+Adm8bdisO2ap/Uktei8ibEXMcpB5I0/t6VDOGFLnvax+u+eGH77YK0zVExP +5N6h8kuMFTLYSiDi01rOxB3EgAXYqiMNttM3XyKUiNvLRIuBqiAWjQ/i94PifQzG +i1UeItRU6Dx4JlJhKnk5C174dGwv2cg6iZpKydHexRyKl+/+pmvYFsNOQxkLc/U8 +uxxHANzHRImndCsFiWfX5Wm5AuY9Rj5EbW3D5vsGiAT2wm9Ire+OkIgAzOpp+Y+b +llT2q7aKV6ZRbGYxqy2b7crPhC1+OgvVapGdavCh1Kl28wZyW0z63KzwhKrfpzTG +keJn9uokrNTo8i7kB9OYQnB+Yj4l+FpX0vF6mC80HWtpe8dN1fEa+nBhMg9NYaeW +W/VBcd6HHsMUbI+LCxhJdJYm5ZcN7+7AkoIp1lkWb3hVDutKYKFE35o2PQaulVUw +Tsya4tqVB4FpXZ703IkBXKf2rS+mUZLkBM0FD0NZcVFC9DbYFKhqArhPygP8Dp0b +70eMENpvur+Y28Xi5nhgB5bYtb8AKuEPr2A+MQ2e0RNyS9ADf62Xnml1xKpPjtvP +lz40QIZai03vR4jY60RRVYxiCfbAjdR7UDnuyNynGXgRYR17GAEssztuWszOuneF +uZrUF+QqvjDnuX6TqUUzd7DR0tt9n5nWEeX94YEwkdnGMrPSDjYVBFrUzxb0C8EO +YduXo/ZQVQy0egZNqiIYt9MnaLpnm61PNqYjNAJ+4Lu48q7R1x3mnJj2XcHOonpI +gn3riWaDVOg5oS/M8T2Kog5QTfZXqYj4JYluWZjgPl1OwbxflAPvZ9SJwPnQoENA +v3emZVeCZDH7aIbLVIXPOq5cZtstuqFCVzafY8Fc9WpAQ7Av1TiSvJb/xPeD0D9g +Ka9q9E6K1Y+Y+4gdDkRnssG0ymLk+F164+6cuCAVALwGwW+VtDyc1e1cc+445siC +6epL71QT94CfZMQ7A0ZkgusKrL3Yvwkjf6mBkOvKeh14rbdrAltzCSrf9PmEJtB8 +BRI+CWhsBGUwqqT41U5SFkRG2G1Kx7xILbZgJXJfE71esB77zvTSZRc6/IuvLUyH +Lt+crv6L4NrN80dHYrdpcRKspIYOMpBSGGH8OMfSVU/kvAPVB2zqzHgFxA0oHkm9 +cLCLIPVZP8F2iA8Eghm9uGILxdUkR+YdAY2ZEr2N3722ZIMBBDIljdQEaRAGDh/H +B5e3w69NVD9d8cKHz/M7ld5O9B0o+G+/yrDkAokJuGACHjqhEzhBfpDO1orNb7Sj +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_4096_clear.pem b/third_party/mbedtls/test/data/rsa_pkcs1_4096_clear.pem new file mode 100644 index 000000000..96933cf8e --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_4096_clear.pem @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJKAIBAAKCAgEAzoPnqYh/7ETGmdNWcczq73FW++HfSm1PdeJqi9VlaQHvm4TZ +hj3JZAp3iw/DyQFiKDRGwukLbroWrQ5tGnksEmuLWYiinaCnApVLqgw3crzCTBoO +XoRwyj9mE7I8D2NyjBwak/Q3mnbqAouNVNtE2WAqBzEHNIBvub1BuIhh9MzqQViB +4SFLyuOzfSPfuRWO0/7RkykoiYC0o12SY+fALP12PMSqwsSuzTXaPNUBI94ScwZO +MAc8ey7jomUKPnEZRASBwCNaC+NYr5RlR4JP2hqozma0nbzndPwPdYZ2m4uZnTzP ++2Y9FbP2brRYCkMbPOmnt0g2CjiDdw1J0UHbFT9OOVXTmFYrGu/BlF3sX7akLz8l ++4EWQ97acGQ2goPk1wpiaoxFAujZsCGWGSdEWEM6LEmY6Jr/2cyX4Elw4+Q7Ljxp +DRN6jc3QFoui62bkKqozqPs+1yu93vPe8GRHIHxCzNTa3oDsE4MVX+boc/CY12nK +9uDkBjpwL4L8/FRFSMDbqiVlCnwqkQZhfutzgD64IMy0B2FhbvaPM+22OEEHVEb2 +hq/Gbs4y6aPQP4VtIWe+UrFh0FUIR0xayGnME+blxD2Px9oJ3KpJ2IEG9ulxtHXe +Lzw5jgC584s4wFJz8R2DL/js1dbNXiSQZnNOau0J2srz7w2XFo1puGxY9UsCAwEA +AQKCAgBp/PKRZNfah7WxzvAnuba9qtqsrVDvHsjQRKLQH3ZLfU3e8EC/j8hjSqft +u+qMp+QbpDDI6dgPPPxUVvoRwyymS4GaMvDam0/7mGnb3Sc8ALprWlgTlD9a3Uzj +QO9oKm7oj6foVUeQRAV3xu2DJoHgWmVXiYccH+q3VfV74qr7e4uie+00gOUoPNKq +oBW7JOBH1xjyQQZoA6Ex0t1F3vQXYwIi0ACfs1fPRBs8a0mJgfjQBeVs6tnUks0L +VHX8dAk2imWZGcumHEkw26VbHPskgdgvDjEWX5QeyxqYA6mtzOjK9SH88YzaLaGF +UZN5uNUq3vRPsYTim/yExlIjTnxEL+dNAeI0kZQpHZK8G4yHbWQ0WRJGd73lxIUS +fXiV4/MJNi/0pPfEklZ6TThUZI26im9QxRzGDxiIk5IfL4o9kF3JXdjNNd/rm62h +/t9pQdb7UvXGzU2RkN9q/fOsdXF7n4xibAtUMzCDSnQwID5sI13gIxsIYpLP6x1x +8Ew2s/4j4xVfyDt/TwimAgCdFQFZuO5IiHNVoAqa7mCcAJH5UFdtFkRvDhtk9/Il +zF9XpG+Bf6vwloUw/NEczjYzNLjKAnl1fZJCgU16ct6VQ6ysR2DXRzNi9VLigWJY +RC/+r4PvOTP0TB5Fid6MtPAakb1/YCP25zg7XZxRW1oAVS4n2QKCAQEA9DGty3ZL +h4BruBSRmkZfGySKS3Wo/eXyrY7kv8/6+Er7DKoGzcVbOeQxBBzwJMgssRkxSTpO +SedraYBA8mb8E1T3ZfuzS2eNPSMNci9ukWl7xSYUJh4BogmVqUDQPdtScgRdantP +/lSFSXFSHoRvte2aeTP6YVIwa6nYICnTi/F10++LBJPHBTWDW/DVjn6zoV4WBlML +zx8C3GAoXDMP38eJN+Yld9ApnlTfVv+yxKGJpJSCy7fDgjr6tVMMfMRlm9CJztqd +hAEVFRhX0HbRYnuU/vcQH8lk9NYDCY57+8xazcc/NdYthZANdRVOX0MVWVhxRrGs +QlBRKL7idcwEFwKCAQEA2H/i1q/oXXAsJ/HdCKVg4Y3dKG3XutDNJOHw7UTPOQdO +Vr8LA6hit+D6zkRlLyGFY22XqlwY8ae0lWlj+dCAbfefdIoNQwXz/K0F1ofz9CCc +qLBBccrvoB5+Lab9Sk7YEjxKAt8d/6UXk19OSKJFxxn/s2zwUtKIl+0gkKpbKLFp +QjP01B45GhYxHvwDTn3odittlaFw0VilnqDb5gqm2ficWgt15NZo160p3+f0MpCu +6f3umM0eRpLsvZxmHmVQmyQGR+STD5AlMHXAJjVoPP7iy8EOnrgGnJgY6uEVTEK/ +2hZ0qYaqU1rPveXSJ/g8su0sokarwKlOC7iXa8+07QKCAQBm75IdVE5eXioKPNFr +wQJSRMLvMDf+XzI/Kx8OJDPc+m59VibsEqdz7dcjrrckKiV8uevmvGdIC/9hR6kZ +BYR4+bYYDVP1Ez+cZ+xBF/F55odAAd84eimiDnxCDoo5qPxGB8UBH94GjcZpwRUm +vBkDDZeyQ9DluWmj2MK8PCVqtmw+3JkzYr/gWEB5PzomiQ5blXefTt6Jfr8L+pTI +2NV2NXyITcG5kcwZbBmBaOQIszd8YwYHrf0CJq6MROfcqEVUu0F8Kvd/L52deNd7 +jrqQ0xtppufrHlAqTRSWsLNe3zPfzn+8x/4EcUba9hJFYdfcA8YsULUWdxjfHigE +E+4dAoIBAQCjXq2f75HaoIDRi7ONiK44xkJy9aBq+pEzGcQiZ2Av2pGE6Bi5o+EK +fJ0F9ZqdHCB5zQM7rM+t2y1r6eFla67eTJNo75veTam1rCLRpjmyqMFOkeJwqgB0 +xU3VyUMtRZ3K9O+shw0uEjheHvcF3F3nRnkrvjMDbJdifa+rOsIbTPTu3iILxtq0 +ErbyeJ1OJ7i5I0BIP1DQyKIBt8T4LGWH6hCh6jAGhL0Ms0D8Ex604XT8YYAgkfgc +rVY0JsbwfOd8ioyqx5MplU5a6SAcNQT5siUWOBJ+NsPWeveilkLqDxySx4s1Ocdh +qw9Ebx5MxweWxV5+/fExKxEXyy2IT25pAoIBABGpeb93kYkzbycwkJl3wsqCPIby +kHwxWFpc0B3w4ugZQAUYt5EiJtLCiKpBqjm+6/1Gdv9zAJTndKnKPeY43gSjTV3P +bObZ3X7X8UuAI9yJ1TybGQKmqlPzMSViBMLu0JaOYCyan0CCSZUMB8Np9XSGkvwN +dgG9jzxqj6XvY+z9ghj3ffhB8o43T/VPIUh4ncIHH6dCToaMWAzPWAbAaIEbAjnv +zqGFToTirBHQguS9U5tmrUxgwdeZEXKt8UE1j/GVirAngnNiImigeUfNUlovmtv2 +CJuAkxzzREpVNdQUVn4+UnMNaaLs8lP+vVqL0ojBRGN3eZEQrvJi4LEbCDc= +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs1_4096_des.pem b/third_party/mbedtls/test/data/rsa_pkcs1_4096_des.pem new file mode 100644 index 000000000..5bcc71ee2 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs1_4096_des.pem @@ -0,0 +1,54 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-CBC,2B0C21459A0C9951 + +KN6p9tJbTD9sZ8jVAp7fX8Sug6XqCi8YF+oy0SB9NeHO+YBDGJDNtWHSMSKzjbxk +r5AN+75uV2pEoRrLyYaWVA22sbAJc766ZQX01tSkxUX96J++Do4zUxR+GJusIUnj +RBVDZfz7vg/qa3xJy5x3cB0iqunrGGCQJ+CZsUtYnk26V3iMBjTu/WQ+vqt2RRIy +dwzQNPy2LWkXQ7KIoh8yDGjGtWf3XYFYQU37jGlSoOG/AVxa7CrXdtATfa/kGLVP +fOeT4wDLjKdawT4GUhUj5yt70SUSFtisNtTCKsLGLSpgvO4KWMYOsvo6uB4jxUEF +X5pBJLz4978DJ4N4L09Qg2DxC2JIyxZ5L1dJiWSgMVnKtq4HM1J6VFNUseB0ZDB5 +X5/S8AWwfb7gtBRD8hZc+UBaBApgU/us3AZhkqczsa35j12op+mpLGnAWiQNqumn +iHdcCOJT6ZL8dq57qmbEzzyrcdhYtFJmv+GLS6m4YMKk4CHf9lcD/8CmjxhxVZ+x +OkeKF/MK6f1iUmXwZl28QIcoXrTzinyLjF2RbNQfhrgI2ZUTlbVgDVWhygB1eeXm +sW9J4B1H3zGslbOcrqdh0NHdWKTvTp+lfzTtrUtd0TqgRXErFJ6e3pKDDCDgglrI +7lyyrG9sOF2+BmYevLUe6R8XCBIFhbx0axClN19k2OnjvCbNpVlBeyUF/vbYzcBX +1toINEauWM2J9noi0ysFs7vy9nBVlFcrNnSXNFSgbydn73fYk2WnO5myoBBapsKD +Ph9sT48/E7xfgDmKJ+TLyz0Jfo94RMOQGgD8qNvZvAcxTpwZRY1q9c0crCihOdXE +qavdYIzIDF8oh46/SGSU3RilE14uHHOtowzWKc2jzD/Ly5/cHTZy+DfPd1ezL0Ym +w34jj952+FdMMXb9cmzS9Vw3zHNndWCMZ/9tPJMRoqGgbFxcXViwjWlkyNoGn2u2 +J4InmiIbxwvEt8JNfHC8qLLZkQbtdwLKP7viz2Lmyn2kSR7fWenTDr/bwgaLRhWK +Ii4/BiZy+R0vjR64U/12+XtdYI69ijkwOITDLePY+4SYeZjHTe2BhihhfVlR8sLL +xP0JW7MqnFs/eJy+xe+PU1MKG/WWpwhi+jGWPiYJq7cuIwz4l3x4GCuE7R+6EF9x +SxvwD67EhI9myx/ilzdPiPJBwPWqEvd9jVEvqbTBJERiNGH8XXH1pjZ/gPdKxH7L +QnJ+BcZrxxrNW+xKwvkABq12QhF60XkMik3o4XROY4mS9CGIOi7d+B1mrG69Hkg9 +BVVCwVibbYyX+7+Hb90x9x0e4CY9nm7h0PrGMj0vGFSY0oUKka1OPra3gqZVQzdN +Vb+hG22Iw36VlbGbkoEezL+ic7Hpvrl4WwAcNz8Bq5iyQLbupp/rdkmYh/JL4rSh +509YdEFAUV60eNPcGuSnxhxB2m6Oi5ViENMw/zU2po0oZkh5XUPCin+Q+Dg58z1D +qeWg+ZVhLMucsWeXUQiNA3UQEJde/nayi1f2SxMWuvZxsaS5Wh6PrqutfwtOokuf +DJzWJHiMavKP9nfIj9phlomZru1R/2fWEme89rCrUHv3Kl9qV4dwRMCDFsqL6iuh +siD1BjJ2EFwm8sPnNL4GW0SZPsWZiF/ENasiVbUhvRB6gyj9YYomimIhOIjtn7As +6dJpKFAYOFJDXFv9Ofj9sSdDQP/4GYwKTaYGbGYo/qIDPriiquA7CGBI/gksAmoL +DqBsSXrUCaiPF7Xc8Lji5oCTH34WQd0TYLOXawWB+oiCCCUwnIt8fClGBmvbfMfu +5oXoVPUFSDgKCylTedXJjkUXMREvNdQbSNb9osmp81WveLz3HVU7yYksuJK2Ungx +R+QeINhN7wC6E8JJUYtn6AvxfhLpMBpjDfQ1zOqDitye4Z0YR/aI42d5ll2ZilL0 +giof2N7Spnu0g5f1twuW8rIl1BjykiJHAkIFoTHaQApQDtV/iDarJJJ05Og1lWGk +4s5WMwXtVJiq4QIGheCW2ho9eKjcijoUzCDvK8pfb33jTd4/77h5M8DQwzyzVIqP +ap5mVK8WTd7NJypw/VP00EoyKTgYiRY1jxCCYtVajukg6BvLnZijP2YA/E+ivpau +lumYhCYJj/wZHxhBuL1qjjz74Eol6J81VPAgt3Dqmj4Did9XHl2K+OMzWlDfe+Ah +eQFEK0xhkPyScYAE59dTV2Grf+abGBxYnH8RzwxUi3/F0DVWW0lLZx3tfjfJ2GVp +dh54pdlN4DLIDcx6tuKMU/F0NC3l+esQy6sd+Cn62pj8IoJyOBStZuG9b3fJ5CfH +dAkjlCJwtX6F+X/3MAMYLMsFL1L5BxXIdn7F+mJftndtDRX4PuKuW2wv5zM7UiWa +oQSKofdQFI4w5jxup7SbYedLPFu22Gt8IpLWheEjxU6tOmWmp1F+SCFoM9vkv2+4 +hZjDexRp5jidGs8A3rzwQOpnWKD/HGtsJZAMYe1+UFwGJNpz7oNM2It4kfuvVqRE +Kvesu5Ut+2FmRJ80Y5nZWY53mZHle9GTGlJeFTeueOE+aFzpj8ghWXY5swUlcNwc +05J3fqom2j9Zt8PGt1yaVo6Hd/BbIdXJ3lWe63CnjlznSBKWn7XpgeiJ+sU+zqYE +vclIczNVJL+FuOa9h38jn0yblMZQybStDPYpOCpb/AHxr14EFkZJKCs5zNn9RV/S +ypllyB3DT9fBCWed8rxAH0PQ5iYc9UNeSkfmWapfJT4YCUmzNYU0C/f7blYet3xL +1gOXpiISdTh7ilzFe/i5d1I1UegmtTSj/MmVtT8mw1gqc6NIaFIFY+VKU6am0z07 ++aD5llI0Ok3/J2YMJKrW14u8VU6oAKfSqhZRdWnEemBJiAgKre9r+3qwg3pGgBCt +sRYpXZaRLbzmtFjI5Mfy0uB2zhB0XuqVCCgqT7WqzfWilgLRPW1PLJoMxOykg9FW +3EofQFJZ1/jHCm0Mxcy2a5edwgjIHevRQGGAWHaOnjiHXKBhpnRRTlxsv+ct13kH +c8cT7E1vQ614hRluDfTeQmyHXerlkSwgZDsEaJpOJ2nWnes2k6u6hRLNEPMoQy5F +dUdCwLvXxNEnClgx8IizMJmxzhvmAHF+9//WgJS+KxB002MnP4wX8ejpnCgM1/oe +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_1024_public.der b/third_party/mbedtls/test/data/rsa_pkcs8_1024_public.der new file mode 100644 index 0000000000000000000000000000000000000000..fe429985bf29b545b3d52a24b692807062a827b5 GIT binary patch literal 162 zcmV;T0A2qufuAr91_>&LNQUm7(YwGJ1K49Joe8Zo!w`XNif5NQbH1%0ondAf&n5h4F(A+hDe6@4FLfG1potr0S^E$f&mHwf&l>l+Z=x`3(ddI(RC1@ zqPWg|s^SIUde}r`kF~wPuo<~GxEV?g@m+L)XGVtx-dleL1HHkGUI!J_TlC!J&pr9U z5iG81xr)6VXJ!}bPQBX|nu3Sq@OZ^HpQ)K&<1_5c>I=1DUhzqOKcg+`0SwGS zns%GS&^Obu7Xe`b7Fm8A7sFHi(Q?a7U=`YZ;_9tX?~dY&)M|HC)^OQtyYcQh1URF; z;?dw{YvPz(f!sWL%K7u0_tq#ICwP3r(A8t7fi#J& sC2GC$>h1bh{N*&p!4GjQ(g+Y6twcfK{&}EdlZvrj>9Fo^0s{d60qM1nivR!s literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_2048_public.pem b/third_party/mbedtls/test/data/rsa_pkcs8_2048_public.pem new file mode 100644 index 000000000..f1e29cc6e --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_2048_public.pem @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2xx/LgvNv87RdRCgorjO +fariBeB62ERjj7W9wLAZuTe4GUoO8V10gGdGhwbeW38GA73BjV4HFdRb9Nzlzz35 +wREsrmq5ir0dZ2YX6k692xWagofk8HjDo4WHsP2fqZlf4zPszOoLtWFe8Ul+P6Mt +6gEMzEKadpvE0DfTsRcBYQEWWX4cF8NT/dFyy0xgFdp94uqtUO+O4ovUandV1nDZ +a7vx7jkEOKO94tHgZmvinEeZ6SjmtvwuymdDhOjVg9admGsBPoHcPHrK+fOc99Yo +Gyd4fMPQ1WOngTSJrSVqvfLq7fpX/OU0xsEPcS3SCBAbrURB4P55oGOTirFd6bDu +bwIDAQAB +-----END PUBLIC KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_2des.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_2des.der new file mode 100644 index 0000000000000000000000000000000000000000..e064e864d835480095cbb74fe4aa092aa0173349 GIT binary patch literal 678 zcmV;X0$Keqf&!v290m$1hDe6@4FL=R1TYQ+2!Mm*l=fJU)B*ws00e>pfYL7Rw!gMx zgv?GgA>;(i|gDNea_l|<{~6{GNn@YTVr zB(+Kn9te$&o__NL=Q~qw0V{(+sYHXXLG^3v?Qd$}jeo=jkXj#rK<=i(F*n#H`77I+ zc_8*JN7OGkSd+mC%e=oYiczQ!7FkXGr2gK32WjhVS#`RoC0*J zhtzas@j4h9H!+;cpSeY1qpLe{4q0;6b)BZ~Ia-4U!htU$bXoDb&!gSY?id{r#`7kQ z#Ip++2ak|Iu$PCTCi%k(ayPJ6Sa%>Sc9BmBrBvpd> zMdc_sg**C0bXqOPcS5XIg&4 MbJuDe54{vmUUPRwrvLx| literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_2des.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_2des.pem new file mode 100644 index 000000000..a809e038e --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_2des.pem @@ -0,0 +1,17 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIICojAcBgoqhkiG9w0BDAEEMA4ECAvRaVQoz78HAgIIAASCAoBiIDDzD49HEwvC +COrRrODVgYMJ4+jy08j0yQoyjjcLRt2TCMdNZ6F6ATuc7YUQhcvJIVT8RLGxluJ9 +Biolgd5Ur3elFFl/8D4jSR7x9zmEFq6fxDjrkcbb1vK/1pth9Cqfh7FXQgD6Dlmp +2Y1YTdrelZTQs0hRZye0YmQB/qpBs+1VY+zkSNvKtlJZqPYnKawMxD9Dif7glpDV +ndpZvNXDbbRy3vLq8k0rKRIJQ7mLjmAA+3kgRRtUhCSTbvUs9oIGqgq7xm60mcAz +yG4LfRQ2khZSQTK47PENsDoZrazioZ6F4d7qmB/peLWuvqVdpBY6gADecxJoGq5a +4qvZy5srgYvOFfGi8T3L88mJc38U2WQ2s/eHsmSzC7EmXapNE3OE6qwDfn3bkOF4 +odksNaz0IoK+msaUc1eweExE97ERlNKo+XuJeO7Q3rjO4+JkFINONbpfFJoSmZEm +XX15ZYFFkYZ5eI36zOpX4ilHmTFmXq7BOmNz8hHWwmKUSVx8JsdvpMDbl7bfTtxU +sTzS5LIgbxpP1n/RdTRe03ALuCFIyD/bFdbjH0tzzKChV8Y9OIHFt9aLDMU/br5i +tRQFh1D5baGV2atoXi080s4iiAm/ZN95btvLOs0C+ixHpolgHsVwrkJgKIzdQKCb +4CSHYst3/4Q/3KTm4Cp4uslKgVD2fbnSWMmHnN70kERG2kTLkCexS/Hht7YDU3WV +g0xSRKbmedpYJ0N4pSvpIwQKAaoBWpgUVjcWOnadLNFHz7rnpwDw5cfhWBKyOor+ +1YxRhpPCLzec7UG9dYu403ATh5nbhxnmz8JkUqumSt/fvfC7j8RSWhNIsBvoiWxh +7SCrd1Z1 +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_3des.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_3des.der new file mode 100644 index 0000000000000000000000000000000000000000..5a35ea8712d5606ea6319021690fce1191a6e563 GIT binary patch literal 678 zcmV;X0$Keqf&!v290m$1hDe6@4FL=R127H*2twD&HR0F)MFIi{00e>pfC-pZm@X?y zTgkyZ%$a@=0+r}Z#3bLi0m3c9cs_I3HMwt7Ib2hLdC<^%B8LupOk0AEJg&I|#OBbT zAsi{tPn6jIf@&HQ6#5hcCl&Ek4OyhpVrnPUQO_iDec*2}R3BdGi%gdRT7h+ZK8{_B zH2pXaV`b{)#$}|X14NUPM;T{GY|`sRif|0C0h)LM~S|DTOFure3E^%KAa>w0en0p)hMO-O&|QQOUhlF zPu)JaB|cxQB~VmrN-SqJl4%C-pKpjdFaD|LMR0r$rimNtPW5W_^mvp|(#I5U_of!k zJdK8g3(xs4d$<;luk@>G6xxVI6*AyQVN}~btyv!RBGA>PZK$8AeP*HX$RgzeqC}lFZu`4z;Vf;3^ zo7VmB@-K8OT2lE-oB@|yTt+bF0>B;J{Ky?1diIKUk4uTUo0gEf ze;c9i9zlJeOt5ihvb_y>+O<7X7CcyGq))Oo^!pLcG**ZU+foI4-T<|Q?3U0LcEy$q MleRV-ZdBP2a&!hh*#H0l literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_3des.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_3des.pem new file mode 100644 index 000000000..ba60e47b3 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_3des.pem @@ -0,0 +1,17 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIICojAcBgoqhkiG9w0BDAEDMA4ECFLoZ7dfvmefAgIIAASCAoCmLLB9OoXC5hH7 +nQ1+s4xBIk1CEfKAJGw0KRMaKsztHCB7hQwizu/pzJlGjDHlDVNkue79C0x3rhPU +1+894yR7pcwToUeJGkv1WGKmxOJUFJjmhnsBPQw7VK/0LkJJtaMriAyoB/3goQ9w +9itzzPBatbrc3t1omc0BQKvjl8T6qKoYOO7sKgKp8aKYxzf51fhlq7NPETnDK2Q0 +ib1L4cVeZS8MHsvl+rY37rrscTAIunEgx8hZj704ZjBMXb+wKvLNtWhpKdwyhwog +zusj155WD/GmqfXQyaTNu3KGKZ+1CtzJ57LC6hQou3tVvqX5lxRv3mk6PdZMeI5Y +vBaU4lBFUd7OEtVrpEegeMnKWAB6a5y83lhrK3t8yc2l7yzvkhLOK6iwF4OEjRXq +lZLZCcKzdVOt2WodwmQ7Q+ul+unnnlaBD8A/mScX5GJQxy7g+aczcPerMbHE4Ndx +H/ut6J4HM65TzVXl6EUGd1B5MkHa5nBqudqsyCAAYyZHlw2I3S4OF5MElsFJYlxE +vv5qCOajPCowvND2vWi9oVntTsbC/c34/Tmxlott8zlSIj5c2sDeEfDi3vJ6nrMe +W7tpAEyXe7Mh/Ya6jbJF64f9FLUHMwGjVsaHSTzMW89zp4H8Gw9ujiE5E8FwsVpJ +NLF/KMRjARZEu+uuhrWbsDQ3B3iHZ94fOH8oQn4K7TPpbK8INj/JG5/FPjTKk9Lw +1ji/zJFD4VfKuZdoRAoMRbC72i0i0h8ZBlZfpeG/pawaTJCE1SVLEvtHKB++2YHX +ZeDqzL95FdQwnK3FgfqfNLGMlIbG2JSuCE9JBY+92RsvXjMJRZxkZjvYL+C3alHR +VBkyv+4V +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_rc4_128.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_rc4_128.der new file mode 100644 index 0000000000000000000000000000000000000000..e7e32b0becd4c95a83d3acf00d0f68280b8e77b1 GIT binary patch literal 674 zcmV;T0$u$uf&!i}90m$1hDe6@4FL=R0Wb~(2#NLD)Dq1ka{>Yg00e>pd~;XIT-7rX zDBm0EzJ&z0p)Y4&28CpLV5F_nJg`kPcZfgZVhqQG8-V3KlXVTXT)TRknZnX$FDG{e zrxgP)xd}A&a=QuPP#*PtKVvyEqd)oq%u8q?YO9P#{M*|+xNrbIcNcnA=cC+f;(zcI z|1s}Ke9Tb!sI-vlDJ#lNjma@NlhATwOc;1Kj1s# z6M467t|kNez>TOu*EGK*#Wt|_z&~Av*3O(_&qEEA5&2ka7wp;Qo^_mOM%taaD_9K1 zliO`z*qp_tgu15nn(vHy*fzP2t%n%`CiJ}DXAnd98$^KrCH+#L0ScrzMBF7M){?rA zutv)QT?SYL%hFgQhOVu7KUoD=Z;4L0KMoykHtduh(SlP1GU7)pI`=%dll$t zaOZ?CPMlhUAC@UDX&!Nx9yZn;=yEACUY#YU{{(KxafZ&7wt0#IgJ6qWrhz**q?oID z0=u@-r7yy&+kLoy&#hCf5c!SC@n0FonKhs!r=GE?`ko%R*+)OmVX&%xP;oaL5M1E+ ztDaOt>St=!nMs;Rs(%U8P+V6>2ha#FZcM9lk)sjPE4nUbPM*`UoR1Prow4~sxsYeC IUzg?1#0gSGs{jB1 literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_rc4_128.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_rc4_128.pem new file mode 100644 index 000000000..089945b05 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_rc4_128.pem @@ -0,0 +1,17 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIICnjAcBgoqhkiG9w0BDAEBMA4ECHgR0/cyo14UAgIIAASCAnzDfJIvSkRQKqrV +lAzAMnhd42XlhqWAJLh6aB76LIWVmepDkNnXRNX0W1R+XE27/uzgs4lcovW5hU40 +2HZlv3R0u9MEvMhadjL4ZWS94143p9y7P4vnYembOcc2WnlhFaGSMLFSwMI5vgnL +8xz2P9+d8IuxGpFSgw8S8zchg4Ewzk+0nSdG0px4T5K21uhsFzjvZRLrG7XXuIee +tKluUauy4diqA5jrJ1ShmrFmNTvtzAPfMX+QohuY8nhRUeH6bx9dEWpbIq/1K/25 +1uIdInZff850YKRQpK1IkinW0YfFxoA+sUGvxs+aDecbq8w3noaRIjJN7r7ipFEK +dhdehOxD21Mq7iqsujV9RJxAbqkuoTfECHJP6N/Dmp9CY0wpnE1lnHOTZwCWqDPh +aumtaFsMxJdNPZ3M5xmGInPWnT3JpW2hwtoOF0Vb0pP9VSfo+3yCm9b5ipFvcs8C ++c2MdK87zSqFvKc19cuv9tggguCzNjAcECHN7pgY4VId7cWMK/y3k4mk2C8hPQDw +S7gm/n76BSxjZFjs9ZQn9n5meO/47ohgV1ua2WICPMuPmzz+IPJpT6mQrcPTbzm+ +nNGrBVRooPYwnHPYKGlPJWkfFzsWnQ6dRgEOcM3DJMfU29QLHmNHu0ucz2k2f2C2 +AHB1EFEIC5Rw2BxH1x/gqYlZAB7TCHZ86XWIzbYdJlyNjb+poXNczLvghpvoIBC6 +dxEEsxVVzRYCRbmLtNTdXa7XfQfEaRs5GR3qrKoNNDzms11btQWo8eiZUNIMA6sA +i3Qhs73feJ5P3hup8Kl2P9N29MuAjYsS2oeZApjdiXAzf5IeFaqTQRHR6Vumvn65 +TLE= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_2des.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_2des.der new file mode 100644 index 0000000000000000000000000000000000000000..9c33ac90affbc2d8b89963a05bdfc7d6af11d71e GIT binary patch literal 1262 zcmVr$hzBz5Nd$_ z9=C<8m2<-hsHtC14i;MGl*M>9TyK4@DX7z+RFCrF3$@wU=J$Y0dT~v4+b13|z$+5l z$;^5Z!GXhk<)(uXU(HOfQ>_pHQC`{8u<-E-;RrSx-1hA`(?1HAKCC^rZo*QEYJ38M z1B509X=9({<|T>FUK2uchLU1P(tUd2ebp+?Ar1(-P2a%t7EbCtIyvvd%>oU=4Wm-%|GViW!dKfe4Mg_hKntQ7Gkz8xY-d;(`#? z8<#@S%ehvEeRRQ-rtF{MoLi3>k zyz{4mq8^^(elV=@wa}OnP6@HYec1M0jh>sBZ-}YOhE=E&)0>4$glDR9%fK&UBp!(3 zzO)RZ!(=HH3y)S9#Y40c;FAxwc*IW~rv1(tDQ70I3PKy6mO*$kbUXond;Hus(0ZDvsY>y%>m#&eU^C-6v_CkE|o8@p*a z%zb*T4{+3Ne*Kf{cSQXbPD&au5&l~1hH!XcTWOd*J1zpbdn{<9s4W-g6eM0j1n{e1 ziS?yIfo%lma54Z!jZ0;j<5LHMA_Qc3bfz%{ujDv&boY4tx#o^OMRN!^LLZ@$9=D6g^&T9gPEz=Pmm>y? z&ch(sWO;-$W}q`#o_7ofj!$Tz4ymX@n=5c9DhH%uQ#S(fH+0a=fiJToe+auL$r5ru z>B+t)^N@}xcSSl87QU5nF<>x?Y1qY~bgrbdlNiSeKKA;wWNMa%0gcA z&7ozMu0?2Pdv@>Ek5^S!tr1RQ;;jmY&MiZ-7 zj{s;6MM+I2di3^Rtnu5*7{tNI1YmuI9^CT!ezbblN*oJg3RX?Ndc&M7@^n5P34W^V z(L_u_GYMKos3krh$ohczXO#6HvS&2d!j3|I%u(m;JW%1q;+3D|a!W1^HwFs=a{qQ_ zYe3hJ&sW_b%KWL)NvS=u`JY>W>F(jaje%Ec^{)J*TBNf1^NlWoI$Za)~nDAqM0 YL0z(?ueGNndR`qmc1{lL`Ee&B+GAZ|vH$=8 literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_2des.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_2des.pem new file mode 100644 index 000000000..534f109c4 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_2des.pem @@ -0,0 +1,29 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIE6jAcBgoqhkiG9w0BDAEEMA4ECA5GT+CJ7KU4AgIIAASCBMjIenQGGZ2PvUzA +9D9eyOS6Tnry7U35p/WsQ+DOp6p1fniIWQmMj2s2dH5+rq1N7acCPEpmTLvDZb0e ++YFrRQU44WuwAR9itfpvr4/yR/NzyvlGlDqY2BiJJIRc9g2oQixBLcN66GMVS8YF +Y9RadQYO3gMoR6adn3Of/6nxDvzy+4RHegXE2c6i15g563nObozLemnnThM6KiIa ++B4wOHbQD+ytp5D9oX9xbW7rK5v+SH834vlLtENres/Fr/DMV6rZGvYAPkJTxEcN +5eTTKpeB45xAZ0DLd5OBrBtVQw/33NIHR6unWbQcD7/Tyb2UvJEwf3RvNQ8LlQ1P +xwd85NBB1jNJ3cFMGZYCGL24m72KTanGdhuzBtXvaAEJe7fLdhtsDhJeD56yFMGX +2KlEvzgvIQYBBIqIgOsnoBAqXg4QdDN8GRc43VmnVjd+zMmQyq30Y6S30SkAs1Wt +lqoKw+HXSLVn3dt6fH/mwM4scau8r/qQxhsw/YkTXspGFvzjI34ejbh7kvlHe57o +1TyJMDcKeGrpC253TJKd5xPnzY9vFQ3OuoLd4Xt2cDbhz+EB/A0IJzRRxPE0Yx0Y +WRU5Y3I1EXI82Hv/DncGFuG91s+OIoWqB4ME9qByec8NQOH8h4Bz7Z6XuCINDBwN +u1GMAsocVL7SwaYdBtmG3Vx3+tFHj7W9IdFBd80nDzavoY08BTJCbfC/P6KgMj87 +oVtl3iD2yecfozPg8ffA4oqTfAW4ACbq6rU9KyETOqNPlRYvqcs8yLK54MRT7hMN +HeT32iOhMVdf/rqO2F3LasYUXY/MY3LFAlBaVWOuXvZ2sRHxDx36G0wyl5kA+Gea +kUftk2h6VtzWywQOzDetbYkSgNW3L6SrrD//3C8Y8vN1s3WB61flF12hR388LPHW +56KjT63/7fp58D94NotijYmXv1S1Vzu360hRmrj2+AsgInfFO2ldB0jxnSDJqyyK +D6SSOEY4jr1BvtZT+FNYBPCJyWiEuDedN+BPpo3arlNRG5uxttSQrXhXA9mtGFBL +wMxMdigt/+KKvZ/4yAmQjfm8JC3kDNC5w90t1Ky8Wb2SqCvW9tMK3whex8tJrER2 +UzAXyjSk3xngsbgopr1dsNVcfJPtMbPFW3X+pVqhwFgN0sVThkXLt2CRS7NTcOFL +mRzDjUphbX1YI5jiERja2+SOvqHvBbzDCvftR46W6h2RZIVICqpULS1Zz32nro0g +4fRBxOr4Ii3bL+wZx8uvYBDws/WjfWeOhDSyUEJx1pl3DnzspwP17JvdMvCoaxpA +qA/+wjogVmyMTaUO2tseo+jKf7Tp5Nd8P3tMelFVI1VxARUV/KXo/gllwYW/aM5H +8gzV5PXZXR3hKGNi+nrv5++JtddrmyisUEBVyBTDqwZHl1KCwmfZcFvsBbNOmdXd +SKp8Tqd5QwmgcOmVeTl9YxHhL7/3zNQB5F8V0ZNDsEXiVy0+UEEjFj1yLfbsl+2D +vWSl30AScCrIsa81iKk385wlAjftaO1XaR57ZxoDiHvG0ZJUtOV6YmW/RnkQUPZz +9+kMTdCjmcSIh6eF7AW6XR3OQ3tTqxLStSH8BUNM9RYnkeBCn5YPnGmgA4rI/Oo5 +8Rsd8ZHYYP6EVbRqqV4= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_3des.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_3des.der new file mode 100644 index 0000000000000000000000000000000000000000..28162fb6302dfa62a38d2b233de8aad7c11406d6 GIT binary patch literal 1262 zcmVr$R>ydW8c`P zj9J0|`g^2eT(dnD38OxisR-Me1-${D9p)``b)*01W^IP>_dGrGM5G)`fT$*)Waq_- zV4a}9-u^USeke^4(@qkN8h{)KJUq@dFdOVQdOeiMz=z%8mP#y7{%}RjHF%LB41hzK zd$_cW5dm0y5pKlunB6B+qwn$krDo3C$j2x zO$P*4k1p`~b4E(ohH~YXoM!2Vrb)LHL&1c1FHNt}W~c86bdD4sRZqhhAc@ zPd}uR2X`}&)k)b9K4l7pDXv*vWhq_W@3TYt?(B zed0>DL5zTufDU^#6SN(V2&e(;ja!1s`ca}3sDUJoqsA!+zIwxJk&sGag#K8GF%!^| z)HLYMcvK^Uq!LPM0r-uSIFt=SsNHQ`VUNjSeg1-{WjZ*PE zsy?`kaN>RZl=sK!A{tkTsj_9rqnPhAG)SFv!xk!&ukQaAJ$F%K54wn18uIs9#w=x- z>4k}xz{n|k2>_-P(`jE|oeN9kK9KCO8&Uko+2Nh(FUYN=jThY;mK2~A_Ni8#MVwId zT;uH=XV3n1(U=32OHj2ks6S?6WoOV8J6!;@?dtE%UmA7l&J@xP4v(%oKXqv0%S8`8^w~^oWs^TgJl!b=Vd)iOlEpw zvejPw)O>+3KLcEt+L`{UNFN(st%Qr@Mr5x~+d#V}9~aX<6IXBq)1oE5On$tA>|oea z7X+(iP&a)pA-zpZ4S5pnBA>|!1e8WxaGp=M>J^*a1Cgd%dJ8Ay+2a@*cOSmaL3*bT zJV^}TO&X~kBMB`c^J@HSr!LH|2TTAM!$QxK%z%sj57=3>=>bchpytkB?Y}W<98I^~ z%gl_O+dQu5Hlc1RoTUa(<|A}tPB>n)F`9b+Jh-DcF(zuG?EuWLr!T=`#Qt&hn2=yj zUA5%ahM&$O6s$)*Yv_##fMKe3!T%vfD@WQ69Pl3?9ZSuzb8M$6OGm>N|EKMx{1?QA zem;DCp$XO!AjbmW$t{U+U1;SL-drpiUW0E))i!6NnvlOeQ%6`CGC>lOWR}06)MADE zy|y?Rmy$&|Z#w$B{Hl%+qJL$Peq|wnD}smJzpqs$R7cDL->^5601m6%sufUuO^JR+ zvFLp%YXuHEXf#(+k&W8~d!o|Mqk>uR@(&j%c0dgB<&ba+y+uetOe*B|FBSz;PH zsq$_XEgsJvzeltAcxHb?Sw4oO>qpe3k^8MY=?7dD_cvwQgzMnql-^_;v@8}ILj_f% zWLJmJtsPro+M541lkaIZm4U*{5PTSA-69PA9X6SB_#$#l(x^lb?Z_XIc`QwhoN(pi z2ht}9PL{gNB{r; literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_3des.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_3des.pem new file mode 100644 index 000000000..bb9d227c7 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_3des.pem @@ -0,0 +1,29 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIE6jAcBgoqhkiG9w0BDAEDMA4ECMCMlAMpv/XoAgIIAASCBMhBuDiyb2dI7UGr +SSjkSXankWDZDnnu9ctLQNh86M63CcomlJelhpPlYOGiE8d190awlciHVdd6bqTK +TeMaeGGf2fG1oKrbXwTu/dhdVBXun82E6XYioHwaz574Cc4FE3zTX5AyiXQuEVpZ +aiMnwwpH9QuurlxOPxWlsv2j1bWo1nkenM7itJ1UqprvXZQRZgvfyVzLrW7k/T4g +MYzoowNNHzuS/IHaWXddpMsO/BGkaD376aSdQtmp89Xocq4ON2o4pjGs0r+iQ5rz +/IjdbNl6vq0KOP5Lkwob7Cl3ROGVim08hYivCDgxFFuN444n9oRFa5HcPkTT2uI4 +JLkJ6UtFfziXkPkMJAbYYNtKFp6XLnQEZ7IZGttGBwuSF/b19e6WIjrhkmc4PtTN +3GEtlnn8WeiohKz7zxINBAjGgH3QfL0SZnJctXXKArJTkpuMcbhvXIgR40ZlV12n +sF9IexnKbhCANkUd09xsDYevxes//6kyXKBvfw9jDNpRqN5JE/dfLtWZz/VdPfGh +z2ZNr/YCOpK6aum8GlPF3XGh0+5dXlRm6ODI5swGqLrJD28E0RBL+I580o7WLJKg +JJCycK/Ny+Bg4GTtqA5jtYihP8oRARdTHaDplujiGdh743qn1dGTBJ+McYxrPUQ1 +wWyNvEfaosF6GmZtFI4Jtp8rleLUmzfB34u09hzf7LgzD2WI9akgtDVH+sIOfXr5 +2iQUdkXumM+TGzCHso8mHVBKAWFn4IpqbpImJcUUcg3NV07lqtwOR2bM0nYnCQTx +ZSxtzs8dJxCGPPYPqmZukMSZfUHVN6zDmEpHbzbEgDbUTdmtVy80Zo7YTzec9fqE +CKlfK+6i06YMncZV4uqMzWUtbENTCX77w99Q5pQTpVRsaV9dDCgn6m8T7zxt7JHC +2uyH2H0Xk7aYQ3aeKqfwmHXkcGIexkxqJkR0JOcRa1wSEhMWnkoN1IPPA0HpcuWL +/QBI+Y2ZoDBjQVcbtB/VlCe6lBTBw+4Pb+fOqdt9DXgqMhoBXeeLIA9UZHef2v8z +cHT02+QpLZfdf8X8hcgca+kSvEiBrjUClivM5U1RcG7uE/Hqc0JE17B9LboRqzyk +MUvaWntz9HR09Z3Dlrvz/rBcVYkgF+tiLESPlINqnRLUsN+/xn9+VezFizO0G39X +95gO9W6lwc+CAA7iZL4+yVzfZa652Yg2eck8EOgZ2N9r+Vd/7rPsv6ysGpU/7p/z +96zCPaZ5FRzVUrh2jQb9ne8SKr2C08XxAO6pqvDEJxHBYC1U8dvki3dfbyO/rNei +GzXpJPnIvIkE1++XxPlWZz7xFOEP5qufivzm+P6cGCNbme3mY64NYhNsDox92S6h +PtYYxdjGrp+de3+vRwQXFkt8WHxg3jxBk1H06832rdP5Nx4SOpPEhFv4xE46oVr+ +WcOi7h15De6dk+0pPZaBffBj2eZjs5lqdokSjyS4ScCgMUVHz/Emq6XLE51C2SOb +c9Zo6w6/zxxfxoXJ+CF8Srmsn5H7cw/tqnTZZmOjsLw0Uh4LaHS5BIwvqfB4z1EU +6RwXSVvjNdZ+7uBKtmE3rETgAneiNSt8JWvpSxV/deq1exseugi89soTc+ki1Swn +UdVwFqkfgdODn/zZGp8= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_rc4_128.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_rc4_128.der new file mode 100644 index 0000000000000000000000000000000000000000..7ebca110c1bb346d99cbe0b362f40dd53fd9cd22 GIT binary patch literal 1256 zcmVr!ebm9w|w(s z#P5MFH=4cWYna;;oVKlDrR|k~RJ*%xqi@pUm2%PbHXQ6`@St{=65wIRTV)d(cae>HfU+p&^c%{7jv zF;HqMVcD;+c3LJ5tMeEYECvcP`M3uV3gu*3Y+hmE>lC$9yAd*aQzUn4>0#Mfki9KE zy1qqBv6qI7@1)M6e_KJw;h8`fGlk7RMsGRjMEJ<-(>Qnl#J$!yAG!uYdHix^&k5P~ z`%g7FbHT(C9ER(bCw`4?x3vybB{`9S_%EpvjYnpg=1K>RU0*2hzYY^M`{O5Q+tJ97 zADe6iSS@7E(}G;be6{o@&$}6bq{v8~671B9m_dV#1)!xBe+x&@#YG9M1OZBZW$cLE zz^gj-pu)16-uX}5sf{*8VDqwF ziNu5q!w^p{UjPWCf|r3?+f&hCjc*2cnDHVU_7-S>YueOY2dg;j))Vu-v6LOdLV)j2 zxX1I#u}>K9sC+LcNMx^8k{csUj;}Y?C6h_^QjfTMI!4@U(_ot0-!G9C%(;BJmcsu> zBeU1(*yn_xAX$23M5i4{(D+CG1%a)VB{vhl4Ql4nk6-QP!bEZ}mud-q(CMi=m7`P6 z4)y;^;xq-Tmrd1ln@rWMwJHuiR4{E3<{xy|p+2?UEj|q$bMjuqOHr5T?DqWAbU7Ve zjgb8fomayTu~mFS4tyd8rlt{NOXv6gj|ShyvvE+d0@(6(2--<^hw6KFV9Qs-(RLsP zE6MB_FFj-6RLxYnEwGwD{dRG0&R9*I!})xM^H861<;Y}Y-0bosf=J`QO4mKL-lys@ z=ZE2@VeHVV8~JdLKZut>I&OsPGW2N4FFfAl)Cy+lq_uvZ87SBrct_Y$;?<%UBkh6| zX2oGWhW#R|@?w;qF}g5NLK1_r)ti5T6W{(><>*URJvbgVFoa4bf4zYxW^>L%JHGtc z^FZ~^fTyjSLi7CYyG4ErJhdi`-@ZM~irMwH(1Av5wo)znsR6N&HijLnlj~ikOJXHVQnC(}+E=E!xGj&4eJhWiSw7Rcl%xyg zCKY&^3k)=kNXe z$UUzvaElx>)jR-R-smI-3!ja!(fMW73dKywNGeZ=qQnY1 z634&6)zWy#nPygDxlPCd6AE;Ff&ExJjnM3+y1i14?RpJTS8q6_qO4k5*P=lj?CM_kAyT|g7B#&abcr;{ z^I#a8Uil1>0Ie<1kLfKoU5(zaw#(1RE};aGZHYm?7k-3#Zy8SeI~f6R%_X^@2KIu_ zIyB{|+Pd79xDnDl;`X3sh&hT^=47OwnZ)8`S&Aw_ll;Hmsz{PQP}k znh5g6lGFA0d4Z$!M^#3#_kKqItJvUuHX{ugaEo~rto3Oj12$Nrm|;dggqv=Kz2~L7 z_whPtoHeC74ZTbwab$ltn*N0O2ca}GRoEOu0X8zRzM9FkTQkz%cxH?ge&(zIwMbB) zv(3xLtu~NNlQbY9kIbKXYoune!7L(8Evp%X`)dQnOdC_|xXzu4E5a569arEVH$0Eb zyhCX87y0`qYVfrpT-T?Cxq|U!zYkIQhuzQYa3#iVAI&_feO90Kv4pRg7)0vG|I~!e zA3&gMn9i?4x8)yQxnyNWz+xJOOZN%Csd7)!?4PrLz)}pH<@)y*;g4F<^4xVF??I{ygo=G#Gp6qmn&Qw2RsES(=r-B)Ldime@7YE z>ft8fBx0ns%-k%BN+b8$;XX83Bl=19m&Tzak?DYHPiuw=9f5H-b>UKvwMpI2_iKh- z#(gDKYqUFom%9AYYv%?eQWbsz`HkQVl~xRiU#;G#bzh?HI;W967OpubZ`ecf;?#tv zLb2|+I%r6_VfjJ1X!^##X-7A6OqPozg&s6U7?M-1hR7c^O>JSeVfn@IW}dp^U*haY zCDZNOmtrhO{bWX&2Y9SXP31)8c~Cb>hbx{xSWH;uRQlbBPM|(I+*ubNo{$2vPd%LQ z^k2>!*kxHz0)}}fxvRdC92{_pW>^Nj22WG!Wq0KXj;>>zmn6N$wO*zHV-!Ef0y;UL zBgxfN&*r{|P%PS#s-z5TamVKA5r;3#Vhxx+I9BlPKqI}=vs$Bc*RFR^M=tJVuDmTe z9T4>nj71{{^|Us~N_)NDk-1lVDnhA}67kDz+o{2a54Wx)MO;k#oF?iR_l0|gfaE34 zrFsKlY9&*2YWq1mf35o9^3z*)KQ!`;JGsB&L~u_RSvBm+H-q+I?1Fzg#dO+*V1C^%-?9NHLXC>I()qs9d(tC{uX!vxpeKv2S^S zxY;QS+FT8&EFrbT@*hwS$89J2SKuk*m=%^}JcE(QXW1rGe`d}h-IW4^^Yp$wr<(GQ zLOOd_{mo0UVe*oLHW$~o>$B@RV@h1{)2DvC5N}Ng2Ib=6LQLPN1US7x zIpZ?G{tc^lU8%n(Uj^Fo4$4ByH*TB#aG<9T3w39z(SlEc=Cf#5<0)_%t^jxl%af>G z%8r$}D=Zkp+}a;V;7(C?ke5i}p*dLKPDXt~BEpdKbKKZH8~qMUg^c|k8nro%ezK=? zxqQ|SeViMA)A{$jy=IKNU$0A8s>!;As!Fb-?#Up(#e#vkrT?UE7Nq?x@X!|FBg72W>d!|CKkCNU) zcVKY!=8!o-bv&FH)fl9TRzu|Y6B}a<>v1PWpdqVRU$b~^a53s*&OP?t?PXI#qJMf(uZ^NIIid)7A z>G>MZHBg0;h$VqWmf=wPIejKXlz)WVa4!fG1sEm07LI`e0Pt%u|96-iU)Ky9DGL&7>1T}iqIqVqTR^*nzb<;|SUDM_6 zau5YMx!9Db1LT>CLGR$%TC}8w?$Ef7mSa}>f9?B-q2E9-ru(iOKbci z7s*P*4|k*t<=WN+u!={C+=aA{QCdCF4(JJ39zrh*HhbZw-d$3Z^CC4Fj0@_(1=O@+ z`Ce=^w3Ps%lsz&geZ2{P{=9MlVAzl|(nXNwkNbeuLg$*GJqayCyj?T064F}2M;|@Z zVubW8X{V%-@HL=Dwm<8-(^J_+uS`y8s?9D?}H~4Vc~@Q zh*NeiFZ1c5SfH}CjI%}`VOOmfe-`qX%nAN}fn9Kya|6)dlOwt53fEgh#<962+W%rL z$>Qx*owDs3P>kHl9$LT-0D7~@yc&!igmS{>XI{)4e{43b(@>GaQ)l66XJ2S(oEI}s zGge=bf(-<&)nd|)ML$O-RcRnP%P)09somnYkLB74ES3Z=!E}S0sWBLxW#Op{&^Y|t zl%m7o=42LvOMguL#J6@4H_c;r4EWmOeI+IDv zm=@4_?QT_wFYQ9mznxS3^!>tjW>xfxQGWMVVt@5Y@JB#yYp5{5-G$HPw#I{}Cr``= g3Lq+fE0kz8XgbqB^9`p{v90#mk9=dxQ20snxuLhJLI3~& literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_2des.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_2des.pem new file mode 100644 index 000000000..28008ad11 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_2des.pem @@ -0,0 +1,53 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIJajAcBgoqhkiG9w0BDAEEMA4ECPkUjozrjcILAgIIAASCCUh6qXN1usH9xFF1 +BGJOOudiy+TSxZXhEFx5BBhUo7QgeixZ8evDOsjiKXeFCaLszkdN6q0+a26G37Vz +Pq6umDbE4lmwt4WSfvwTPEKmb1Z0e3EKiqJunjigvCASaxsnU6YebzvGAcCqiCHx +PvHLME/5zWhrBWvsPapGZMIOplXuZneQz1wwtLeUtHdRE3DNbbBj43BhRtNu0HA/ +S3WtwBVn+pzeNuAt4c1skQzp4Vi5wZtVxbw4UZPesK5K3v3rw3irl3zI5MWb/Oav +T8ZDcsGmOEnDJQCVD7LnKcXXwSCsvkFOAZ32UikX0g+htY0AX1691Dtjga5cNhnW +Vo6kdAO9JzrYTPgzacldbUg9DdOB+Jf2fcUnFtQEG/t8jN1IroswiTkySQ8FEn4b +ch9CFvMJmR9yQ/Xtb2E30CzIJZ8gcfbR+kIxtJaowSB7N9YEFcCehfxH+stFifU/ +O1MW1k6H+KQ4OFMChRJr4ZDQxGj6yK341G6sJn8KV1/YN6mAdjh0oYkWO1WTKIMs +MEdVyrP6RU8r6tWppS8J3C91qHBp5Uq7QQ+S5cgYLB4C9Y11UuRCePdGx4rx//aA +ibPWNvnI/0Y9+76KpWos+QgcRvkd1xUWN6lc2p8W6BNW5a7xGf0TggNaGy4PQ5Zu +oQc9T6c1OKB00Z4CKXkLV31whq7UPcC3bi0VT3hRr0WBI8L128QhV00WqwKpyRsW +HZb7tnkm3fU6hirLrSb/nmh/fQ8E2wTju5LvRqXNdjk7u69Tfs30qgYlDXUtGd4v +MzM3Xpw6he1QirK2jYKGX0aNcarc5eWHm0hc4HelJO83cQCaWv+CHcNl96hix5Zs +i+ME5L/C3nJ+5xRfsMdceIggwWL4ZRaH/8zMid9petOqmkYausQgbBZfdW6jvNxA +BPjV+rJDD+o0SC82ZXBK2TDNRVPJ0TYGSjh4fUp4yRpM0I3UZV0eOl2tTu9xwBJu +ErcklEDfu0Do2uD+w2dV9fU3fI5kZJQWNfhgMqUumbAl/pNpOAaU/WxX6GynaX6x +NgntoNIO2m8hzev5ORdxcRm90cdrtc1gBqkX+cKfepDE0tr21/8J1cRcgGc+M5tX +jpHCJWl3wgnfQUfJam8KRPYEzVFQg+NHHa0YnWLihAi/UwUegjekZbF8LNmqftEh +OU+PfluF/kOecEFiXPlzejlnzZtgpDh9oev0fJQVkH+1zDCMJDmTAyYa/RofpVNh +yslPPMVMvbrarrZUR13EcdHgq3h76+wrgr5afnQMkCduVuTrZv0UbJ87Bj8L1Q9l +AcwCtuP9ADijvOGtyv3/TVFxVkwLhjMJrxd7rr5pZZ70O/zaZK7zponJ/ieaeu8Q +YanLTkLKDXk8HXBcBV3J4FJ5s19JKMLOWFde/jE3/+FN6drUz4D/oKAKNzzAYmKA +6TWmB1ICmyXubc/oPiwNFLc/KiNcIL6k30d0ezPOVCQ+Wvu4mM4vOCKm8hxg5rFm +yn+KO3wLYi3T/iT6nUYGUpjTvEUGjvn5dwRcPIA2TgQNxJy+KswIpz0P9GbjRVLJ ++Wb/c+wbzLzM9KgmM6IYz1+Bzhmz/45iFhZBjGAILxu8G3hOmdoQJFePwqkehHgT +6L49fJ9niPkc3cUsRCMiY3zoflV0mtiworxNgaHEq+J6bRcSSp4sRNH/AGrG6FHa +dI/9FNgZwSE6rMvE3IxVCwlkF836DzRvlcELosS12KW69pNZokbONc/NZBsyuWq2 +g/rjVN7Iyx5TYt4DUgF38OtZexgJzgaZeKJh8q7nvThpZo0MzbfL1ony1uslmmpx +sMjKqGIPtU/Gcj9eSAQqBY5cWbNOUXyC39Akoe+YVNg2BS46s1Oj+IU0d8yyMtGs +SKGlsO7EuT0Ndn6ZrIXMhWvJzy4XuAGmhdpgeDkDHh6iwLEHZAqGZ8qbgO+UW+cb +pn2o5PHyCiMjkX9M04GzVSKQ36ULapXlqEH6PP/rXz2aZftvMtWZjaygh3240gOH +bZNkYKwe/yQMprb05wvMU+g4pKmz8g6GZ9/ddvSBxDuFc39iwiukZTUA/lfER+kS +c1vC2Qo0/aPXUWXDPF2OMwPYzHdvRgZtd3y4no6lzl+Mmsx8v0l53+ErBWFvxX+b +2jRwxJroalyZox9HD3XIb2nl5ZBDdGQ7C8WpSwlJvYDV7FsOh7ijz6UM9iQ8RKJv +6HYoWLAZ6Tjx1KJQ7j51wUMMWtmy5ktPCCphLYlHTyhLGNAuYY1/y4dSVPHtsjqn +bA5WGNwBILDvi8tJqSOgbkqQCd4zwZG4LgLp1yfrITX9Lq2spFnivRug0LySuTOd +/htruYm7ArA1GX6xzihD03DiVnWU1IawzOmDhujFwkwlrI+zMFuVsoObocQkEPTr +7Z1dQhafMQhHZ4LI4t9camcB3ytCEsGsURFnATqYsJGc83a5NhSoqSP4b4AWlMye +vOILcaoOW+UpjMah7+MIahz0NOr9YKpCNvgM4WybKcsWVjer4fKh8GiWowoHEQKS ++RR9OqfGhIzcSoYE3yxURE5zUB7dbvRtWhIIP+NW03eL+kCLbKK8QY/jsTm8kKS/ +tKZIv63xaA+BX0o0Uchgf9bvf0Nra5+CLGb6Q8NWeCnw4YmwkANiv13eeOzepuYQ +YldTRYAxxjGLJqxBDPb9MCVBB0G6cXvk7MUNL3MChG5bGZqlY/UkV7Yyp5nLiFRo +1a/LQKGHtlbSaNgyGUwof72qfNQZshbPvT+v72YXF53NkzxZzjA/fxp6qUd/Xhoa +HEXILcDRpUNEbdp1adnv8WMJh2q9X/D2qHiCxMJXsQZZEXjuILtZzjqj4cuVoPxZ +qfzGHtaBZJymol95iqcYXpYW3OYDYUJDMby7mEENfyoYA+mYx/7qlVaLBPScWZwx +NTOrntNRYrhLcabHsG6iT8jGYfpAw5Li7YlCMIzXo289fFKMxTUB5ynpPkRRxHeT +AW1itLT3AOsg/E7CMF/4ePe8T7bx/2Mj6YlovE0L2n9lu3AIKZAkdlst4qS1gy0K +2pYFJn6qIwBKVXC8RwQxX+nBOMFxTbrF0AxZ3Ff2IF1x0+JimljBFNr+ZN9I78sQ +lJUtQrgooNSYZJ3wLAZ8DrHb11dg6EsT8B5dtt3EsnZZZ1IHFbedAP0JxVxTTe0+ +7+0jri5fFGtpGIDCl70= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_3des.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_3des.der new file mode 100644 index 0000000000000000000000000000000000000000..b6c8249208a0130a32f4b81377a5f0c7a78d08bd GIT binary patch literal 2414 zcmV-!36b_Nf(dFc90m$1hDe6@4FL=R127H*2*PF@bqd0#jRFD)00e>wNU-yplw#&k zon-2w%=2Zntzrzh8i5E$@gzun1Kw_Tr|N&bfh}i`56_T^r-2Vayc57|1vA2=lxL~L zy;o<|d`IxjR@Jl3s@8Q=|=swzU?QE-ME04D$0jJp&8dui zkO#}rXj)DC@?9QxinIHv55Tbu5U&;He}V1W*=+;~EIfy@RO}ZgFt#bGW7tv^Zs6JY z@)0kNQ%d73@8`m^!Cm!oIAh$oF$Q6`wH6+6ikr!~|Lv|P;3gPWA zWoCfl-Wi}C8Wq(=wLroVgUr2QE1e1nKJzs4VNjRh1qTpg3i@J70BD6ieN_A;85g>Fez>Xq-fu-HrNHIf%>TM z)Fu-=)hCr?qf7mCD4|J{ac)}rJ*0u-XEW>*xhC7-4l-ZQGH+yRTw}>Z6)3&y;_|ot)n|uJ>e%iZhl0d)ee{TFS7~Kh4)+xh1ssHcl z7n+Ft$FzgA0TBErQMF3bAxz8VU7E>5ChUjU1qJ;##BdcM`+DgktA-oH#@)1-=k%>? z)J4lyiagGW1flGGPVMwd0Vi}tCB64V}olZ%*PywEJD$ko|W72bLK$8r7T(7aOVqGdQ`!;{+oQqa7q zEH+0o<^X>{T}4u8nhK!Kv2m=A<9RNIFA`i3-$jaSxfTmZ?Sjy=ax?b1%{CzD! z@FtP#54H+mkjl4@QXOGtN!@LG?*4Hr6ei2@6Ii;%5%2$zjlPgccO zxY?cv@y`7{s4J$@$6pv|HYH#^@llh34d+E1xrs6hs@RGl*bIB5b^0R3crd)t%G%!L z%6fo5#8%SCp1#S^NnKcelN+)h8Iae8n1%MYpgIzQ&2n(;gDNY{rD4^1T z&#mb*k)?l3&^+u{4sK#~;1Z#D)vhrUXx=tkm0~oHzm=onAs=xf@6JY8`6H^%Qnws^Ft!ld^4a_ea1D9 z`%b~4L!ki)-nhrq8&Hx4`%diM+kJnpPoAWJcG(M9SYt=PSBR>}t4b^%&#emKB19U# zpr1+-THXfy;PlQZW&XEHx-MxF_Xcz40sWg`ItCdy5q4~lXTG3qKmB&EpJ65I=>WZN3Um{SBWcCCuCBz%=L+n`PUjATkTO==%Er8kzr0oCjm#HG+V5p zKX1JpWZz}W6r_klHDm_Lkrg*QP(jhu= z(t|AuH1s`%DQ7f5IJx8HzkW2obYG8cv=OA62~IJIkci)(=BVF!yVw)0HOQ4tBZz#t zN;EKVTIO9_M5Mt6ma#7EbL>++X$pCM0q`ODrZL@ULJ%Im*ghc)Tct+UnCC=MrszEt z07m#(ydWEf8dhtm&0~*JiJ1Ml9))+HK_R6R;Q`v$fZ-ZiZp=K1os{OvDgF zz4{IP7j|xGBWd!rCWmzelKr-yDzhGtxg{c(-WsX>Q_N|fr-`AJ2HaZoArEpmeyR~s z!P+Vc%PF2WJ*Ub^Mb_FLaMK=zK)92lPay#yF@y82fkB<$+3o~WcZsh^^Zk--M0_~l z8F+DTM!cNzTe?wwU~J|EL=bS{kwkh|0xYb$_7`>FejLuCRs7bI1Tj>$EU%QDB{!my z(46b4j8*#gj_DwPYO+_-C9g)4l6)OuLvSZgURq98X84dHT0C;%uX7tkJ6l@4+$Pf6 z*C;_G4rSFSA)ii>jWEW`&^91!$f$OyZG;c;pS0aL^()@5T+rnk(}+vPqdd?M@}mm& zvBoz&Q-0SM4jb~hlK%8in7vnC3g~Jg7nE?~qSIU+Bk@44Eh-O1!N!^#2=9+Oe~tI7 z^?LEOGunt*U1FXDec%0~Z% zW>eO68$z8cB-PC<*PIJQ4zQWd?)3mX^gUPY@nBE&gR!Ln?K&;x0>FDMbHxp*>eC~9 z#4F16un&snAzXT6Ijzui^D|tWmpICja{_0g`Tbj;AJUnh;ex8MH|=}UF38*I{{w6k z>=Zv=lP{)s(KNZs)3TwwBCHDdZJEE{+G2quP|k^PuoUg>K5`{M=sHC23MIL@VIMI6 z@cHO_+GL_>LK~u)Mk9x{xrv<6hqa)}uyc190I0bQa|4EjYksI{b3M`t z^tB*a)Z6+n2_CMhpeizNJFiX3&HflR1f{F+su-%bg}b_}P*~}2L_}BQWSvTb=Ku6K z9W8jiNb9Wjo>`B&h$+; literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_3des.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_3des.pem new file mode 100644 index 000000000..e4333e49c --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_3des.pem @@ -0,0 +1,53 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIJajAcBgoqhkiG9w0BDAEDMA4ECLM+ZvfOIzTqAgIIAASCCUjfmUnY9iRw1tT8 +WER9PHxdcq3hHQwc1NE31oae0fgzT7SDLrcQaoFsiieBa5DpCszjxErG3xlCOspm +XPHD2zGdGu3tKfmf0ZhezMPfREg3OhQNDn82TIKEbs9bxvDkSuKjuDGGohWGNu1k +8eE5MfkrWUwcz2mGhPjgM0vyBJkMeMioZLzoccwgSti6AAwo4f6ITnUjbUR65VQo +l8Aj/JuuYmnWm7v/eh+I+4fkXHE/DpFRaIPrhzY4+EhgTLSHvkoEEnMGACS6AyQw ++n6IZ8Un3SkDPv8laZTUZIRRJVFmC1e6B2KW/Ky25EhnahDNvGALTanYdsvUFTXb ++dr7HAZjAQdWZGazifUNiqGBuSTXy81zK2NJBcztsAqaELWEufvGfBNngcXwgqN9 +vw4XHkK6mbAVCiVdIO5gx3z30LVdQLeXQE//pn4Cx0cmwXcoCw+5pIaTHQe5HMWe +4+pqQ7igwr8zFAFi5ClEfQP0L2DlBI/Wg4mFEP6ROW9FxGg5+9Sy+l3A7ke3lh5d +Ed3N0iqMAU0Ra9QXnqlArxwimuzLLleV0nMOL5jtG0qDWQhx5Aqb8QPkN4LGrZWI +VG7LFfPxFXFe8LlwI2n68CXOwYWAS2v+8Z1m4Xe+0ZfNMk0UUWhigXDmgXihRkoY +cDfVQxR+LBDoYcTXTVawP+YDyIeVz5X+EaRkN0m6bC8zG7/tYBEafdqjytUrtnZw +za+CfYRNPT5DZfURL32yKOSJ25PXUGfMt+shITmVCJakkIpI5WzhOoXbFVSNrNDt +3jhzgcSVOge0RCiS3iXQLOzhqLJHc7BkOkgRBw+HR3HIpmiXNm+GJJdVTxJYsdf4 +REIW3tGzC+77BXdgmI8bvOXTvOkA4aEYskNGzoslqpoIvcHVjliHbHcjQLkOc9uE +B6TB2qebX3GUFw6PtaazBcCs/WmFooprn1k99+Tp1ZSNXdfXMaq4IAkrixJn2MRS +T4vhzF7rrNQz/x3ky8QnFTvVKg+Ruo7bgJ83J3vuPTDZFO9RPTADjETA5FEHZTtP +Fj9vcPDawNwl2ww0eeqhiM3Lx/nGzz0+8DRykWAX7TPQdHmSEF+F19nhMrdls1F2 +b//ULjF5z3eV/qE+Rvjl8u7SkylXPvKbtVl1MV0us4tbwEz9pOViKk8sViISj1Gg +RzydfhpuCq5cFExDvHbUy0EvOZN6tq/FcuQa02jqVWybmqmQtVUhUX2Cgn9EVE5B +KYGj2od5eRyx+1Nb9uaYz7WO9hX5U/zpGvZweGgz7+/vdt+Yb/zTvP6beyKbJVhy +7gvBiuQcSV29bSUu6wn0IAN+34eMqkbhcS7F7e9/QVTNKaKF6Wx5jtoTUDp9iUlN +C702/MghLNKp4g33MkxryxYgVTbD8YuLalwQqzmytE7AnWX/f6Z+px1Z5aPGEfPl +R+DgvWWAptmb6NtcwYkue76dxy5PBdBsaq4K++W2CxdU0c0yj6I3X3ukzlPWz59R +T6q1ArHXv4dkMfa6bV0db83nldsypXN05qP6CsMrycGQlYQHKlVRjCav9W2hCKyp +nJvL3WTelGyDrC5cRNTZ3N8peMmWVazF49LhMZPpOyRKrvtynmRyB+oIQPe1ncOJ +8VOszefTLpzaIvJsFcygDq8ukZQsLxhyZghC0rKltaeVNYrbf+c1yZc7Xc3CTigY +YCZPNgIb2CVBwxCV+BhfpYAjCZ5h2lJqt32JwxJcc+c9+ZXO9hvYXY54Sv/ccK5D +O5TRDlFmS+PPg6H96LoyOYKy8BGACgTAIQFSNpOQq+LCDLcdxpsUxtfdLTfHyu4k +0+vNterIJ7NW5dZAU1rs5s2Kv/bIglMrYMUPV8gsewQTeHL4OwtcWgMWjgeASTdy +PQZCHw0l7NZBugUYwlMh7JiYerLhiAn8CoqLay6SKpI0OFhSjFwc5AIsSsBPOX+o +Y1kPWqzIBeaHOJYHyl/y4fvCz/8XC6nKD2wEem0i50RUMfZqAX/JHmEe2jxkECgI +XDIWPPLjP4xmb30qTIO7zsOPCc6RUCcPfjaTWKdvlL6GE4mUeS8+U4P6KrwY0KzA +yNKaGvm+QsET8f4YYma9h8Qtjmm9obr6eHIAOhw//qd4gniau/4xo8cROYJXOYzY +WMinLRNwO2U8k2hIzzH4c2G6GQ2+4PBlJwjpDj3OX4wG2O86IlTgWC9R/qoWDVLr +6uuzCtfc3hOQvBhscOBuwQdRH1h5Q8aznHzafovJhyuUi/HywcC+EQjuVnlEUDOH +LQdPczisyByRn7tgZVflKsgsKGRWu38LiCYJTWNSgFTgS0r7vPXf9sGFEsyezHhK +FFpUMga0NbQ+TgRv+7jDgjnmXu5fUrl/LdhuXEp8porhLd0QXNdfyd4xssNnHDAq +nN9SlG/VXqZNe/FX8Nbg2dvaXAm2Xqnfss8NYSpHdlWQvMPAjzyqictqjP8lKCK2 +BQ+ryu3Shq9jP1LoKbxjR9A1gZUcDe6YIcAUn4vu/7ehmCvbZIMhDwGCbdrabtrk +Y6V0/74a6lih0BoIAn5eF5em1wFlXxGVl+F/5O8IZv6FvpaH3DZTIwqUVRc08eai +2zm5OPNLlBiapfLD4jOYi/RLWOEn0TVOjZCPLK+Ij9+I4zhKR14kGtjuwQf77Owh +8t1pNW2kuxqtAR6XniQNlrzraeOA33TagSaBmFT0SuM3Mt6w5iwPTZ0GMnSAKCxg +93Qi/g7GlNgNRbWEV7yW5BJcVuem9Zzq/nvUPHQ35MRhAb3LVf4JDX78ipKM5nuN +nb1si+4lhxll3JK7HmTG9vW5VgRCdslfYmgLjVGGQizyoCsd/H3++7AUskDsptOG +c9iJtXE2RbW/VW8e+4TvqNwDCrtXGbLtw3GGyRoPdrAYOpABkuFoP0yYtvwM16dp +2kAvaIntN1aZbGVblJVNILv9SfmARchemI5Gl86RfyX9XyPAZ2Gma2QTXgm0f6An +BOYpqHE/7E4tEL69cyzkJjtjES0KqZ2BH3UXQNtuewo0bx4u9FSt5GP1qdx5v0+I +stI1KFTS4Pd97LdssbynNJsCex1ns6zXE60JlppXkTFInlor4bMi76PfjKYepQtJ +qIw+cDvt/u1KVQh8KJv+c1xQuABJk18RERYC0os5tTR81UaBAiqNwttJ4vjcC7Ku +yIu5YIqzVqms9uKNYNw= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_rc4_128.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_rc4_128.der new file mode 100644 index 0000000000000000000000000000000000000000..f3bda6335dc4548e5bf735798e16a93349ac1b5d GIT binary patch literal 2412 zcmV-y36u6Pf(d9a90m$1hDe6@4FL=R0Wb~(2rUD2G!2tw@&W<~00e>wM(Z0H-uQW) z@5Fvn`oD+=-66Vl!b=vj;W=;adBlq=!Ri@3)@YPWE#?n- z9r{cHB`sVOrT2jD?_pXG^OMeV7Nd8(50ho!2VlRWfuR|8lngZiVHq}x3MC+fXfXrz z2O7_91I#w-%qav!Bf(u#65B$TVR%61e!*JgOFL=F-F3CU%yQb#PVf(DZn3WmhZC3! zC`Jfzm}beXNqTBHUp~dBLAPs`D#lz@2=_*!Y|R|KiX;Ci`Z9KPvulOe|9!u_I8v+9 zOv6c^a3A|^5ewrciRI-LJ7O^zVoiGtvJAP^q@?MIo5Mp}>oK$P#5#;u+F33*Iav(C{%%(GI-u zmi2GSZ*UQrlcIA{U3KE7{D+2iI$ZmfzQ}SCzBTA28*n*_ADH(LsM04{RX~BsWk2UV zSm9@Z7xOdjNR?#Zs&_X-pBma3Z^N;x(1&sx7Hn01Z2_KXO>}Ic#d@9;WL9`#?Wv5E zzg?i`S+LI`)Nu-}4gf{$sRP{@ES*?Va-pk{H0^3{rDgL|u{th3D~BaJv59ND8^ui8 zKx&8S#;JVRQ&7O#rD_lWLsrqh2{mYcMlR2Ayvhysp@F2)NiJ&Q;&f!FF2M7EzF^G4 z#jib>ozEm2C4gYvcR0{s?tV}7+B=(Lcx@09*$>>IN2zXVA8ybEooy>}_W>=~4@Kcj z-F_oM4^U_3(Nu*2OIa9Bt>t(4d7Nxqys>F8FmpA%Uu^a|9N%E)c~adl&M5JsdQDHK z@OxwC6LPIE68vc_X=Ckqc{)iOn4rcq!`n2ofJ)^?K*c7XVb2EclAw~($@3Fc2tGMm zZ8Wz~{D|P{H$bmBQ`)z`2~P%wa92Og3Dyuj@b3Cd**I%R(FAbsy8Oa`f;r!z6a!)p zUYoNTcatp675L&?Lx7R)jZ5#u8G61Hs!hD54J1B@eB<--WcM&xWM6W{TtSX?J4v)-X#WcOKaZ36zf&;Yp}>@e*UhUu?SR z5cR{|@j+E)CF_jZc&DJ$;fj;~@>ac9{nvHm1Euz`VJyFYY)iU(%XR@EPt7J}qmGRs z5z2y41eWrFmt(8(mNL)opytdQ?yM}n7jAg|4b;9|RcJ}{%F5dTwxScUYtEiw`%oBJ z)TJjQ(_YHH z4VpZmfjZ&pB*MwFb?1>Ng=7^XT0k33@Sm-P31IIB0PS|KeBP)$rX&v3LGJT7eW!2i z&Zy!608|}89re~qf5&k6$`1)7IKG%l(=IwbuG+?)#l~ZXzWKg`jvT2k<(_m`+5q_*P=BH zpt-f(5sPy8DMFLf22?|9X+8Dn$(ar0+O2DRZCEnY*aEv^dJ!$r&fqFTc*U}q{v$$#;+4>m+BG}<;v@7*g9m~pSL8D zxe2GxlcKKTApoBeWWXK6UV%4iW6)FW+4l6lM!#Gl#vB@|t#)KPp}9bt82;BGo!Os_ z(6NN?y@^i8M}hp5uL?<_F^;;&+F-Y6L?IU1X%VxQ&YFv0LU=hlGF<{W|CB&Z+w-80 zg`2>l9{AGey1@*%qc4r4)lnY}qZe8q%tdBLq8I!Cx}br^zuskK**>TXd&)m~+xS0; zlrrYSsYH^canBsb{3_wgvR3L4o_(7;@-K(E%!NhTXuVI&Cn>9RD$O@k9GAelYp#~@ zYc5Luz03ijVJs_y2pE?M(d8jS0TpJ8nKsr1`}Kq&jdj<1pgZx;>;;}yz;+C9nN__s zHlDUGt*{As0#fMc!+dntoJe*Aifp2onPWJ$uF3!L9fghbIF`ECUZ=OB#!wpNN}}v0 zH3tkQTwvk0`W4a0g~+yWF1!KRVqNAw1fZ-{|9U|SFWV1L9Q(i2H-a^xA4=$fmUp=y za~WDETR<{0o+aj;O@%=&DA7?pT z=|an#z}|BQfd0Hs!9#AlEb~)5eOJd}V6cEFtj$O(lks90m2?fgycoJ6LTEa%a7%H$ e4b>KVe;92Q%sFRX4hjGC7p+t1Yx5%ihJV6X=AK;u literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_rc4_128.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_rc4_128.pem new file mode 100644 index 000000000..53867ac53 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_rc4_128.pem @@ -0,0 +1,53 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIJaDAcBgoqhkiG9w0BDAEBMA4ECOJxEWpN/HEEAgIIAASCCUYouEt15A4DUZoG +aJvr19vCKfGPErYDkh1fI9u04hDEKCdb+Z7oxaqXQ34rr0H1t8/SPdhpvqms9Bsz +3nMIlgzEPnppyiRLCa4Ycev0jtA66xkxgGGXnA5uxZQcTOFsGDR4gpTn2hi7//BO +gHhKVDbCd6nShZkNgNUe++tclNg65Fmazm2pwpnCPfY9TGnou8bynMrJrau0CPB+ +v+pI3NR39yxDcq6MNII542Ma8bZWE++WmqmSXjsnXyEV850Dw4j7khbevXlKIh3C +fsf1mb1/lUc+8HtsjFLgBS3Iag2D/AfAbCDCY3wWG5KcMJk2CtNayOAmMetL7P1t +S+i/zTmqAeNVaUF/6ciwY8JNA9YHnjV/0LH04I1Dn1emQVltcqKJahDSoxwGeLD0 +lv0EMQ9CBRHqdKKVaDjBJSqLkwQzLuiqye6ZREnoeIL2cYXDqWoxZzjtxr5t261F +jl+gGBvAX5RRKz3+Vj7hb8y4n7npYJYXk+CanrsTblsBhOMaFhgup+Vd+UhHGQku +FqHR28bHlJzxgUvlhYV/WdMUtHlGHvpax1Zo57ToC0JxlX/o+lPHiZvvpGZegYOe +Mta5f4xI8PcfVrVbfpHaEnt+ffZPtDVZUfhfZwlMniUKX/kJgKGdtpnrgm0wefUR +ymKmn4af2tY/nT828+pOBcRY8WV5G5EPthkA/EemXTor04bb9mglX9ZJ78vrv0n9 +XaOXkMGYuj698Rqkx5BtaVX8EjWKnknHn/GOLSINu38UelRDV+xf5GQyDQREHsuu +Mkj6AcygD5eP0p4AZZaHw9H6nytoZ9SX/vhUmRTk2vbrgnAPwRBFnZy6S4mipfFc +m82EyC4RHklbIriMRRY7EHamBrUTg+8axCqBWY1jtSvTXwm40ybpigsiphtbcaCN +9hT13VfVkglyQIbmxvxeoo9McgKv2BoP+0i5xIdmstu63bcHxO/DaMXw9WPOGgdm +kyFU4MwJZhvk57H4HwleIPXXJd93OJ0NNunDgBWxh3mnKqnM9hpit6ljjl8y41RC +QvJTO5cR3cKuzPpzTqfpC8eYeXiYChuFDgXKXubGE/PSSzSmU7cnKUrHAOyrXlD0 +EdCZkQBFF0gnLksVSjaF/owORlc1KualcD9ahOgWoaup4MqlyW7A+BHJ+f3Iz22z +oezU/B/FGPTcRc+kEpPyIHG+98nNeh2N5nmY1+piXkJCsq0WdcjB13t8MHLLGqQ8 +shUpiKtkwtO45DIP3xVykntZsPb2gHuj2JoHjXYnxmZ7MRVbTe+s1F3xpITNa+G2 +2Yorp0zqVrhNfvtsLG1i0XdOwockHo5k+dAFkNngJvQVTwsBUw/gqcDwgkoG0yKZ +NZTZDRJDv3yfopbIvGxmXBj723/OcR0prKLHUc5qaCvK5y0rvM7G+Dg2/W1rzRGx +9IjCOyZzkUVwE9vKZO+mdsa1zeVja1DtU1sjh3k3+Lw6P2+LcVZKWI7IjJ7vcNxt +XRI6+jlaR3/ht++3+ADgBpZUVAzBwiKeaneanFoiu0kbXv+G74bVDXvKLTXXbynv +0mabkp8cszm2wMehp9WuqnBKtAot5Q6sPg4i6E0si3LrdDzKgENgMAF8+ShG5r4w +ULHQBwMpvNS6LnrY69TqAQp7MNS5JoCCHnQqXSgUQN53Zmcnmaz9qysHvbJLK/On +Rp0akU5A+WHFNPvGqkF8ou5OZRrN9XQMk75RRgi1YYY+UddiaBAsxqFQBKq5ooxN +0sE65WM76WU2/v10va4iCNPTFjB0MhGLrq08sgSNfHhePpBK+WANuzjWDUWS+ekC +VCTNBAARzlPoxuF0YsUUhwYxqFw/VC4PW9WeT0kx8pvaIwhf7Xk++4TKbdayQehK +ImH5vmvpeWxNa1O7nVyvaJfNvSoj49X1zNg4PKDAOm+kEAjGvWeWKEOiHTLIXbzu +HztTw/pjNJ5NaCNVWeThYYduFuRZaqap5khpqP4s07zvDvkTyKiJj3MSFel/K7UV +uy1e0HPymTFToeinLW0x3YaJnLcOKDmF0DSJB1gVwl55B3rEYb8tODF6BLjz149J +BT91EXgj/Futj3YpPTcIjJXsBDElP/KaBtB6uZGkmXgnz8OvRgg7wJR3n1uHU6r+ +S+19ugY5I5hAFFMLAIg+zO2IqSXW1B+CiE94tr5z96VTyIckO2Ov6p5fcGpI1VkB +KtcuXGUVuF9pqFRKkFChu90OiqxdcdKYqgjHy1z1jovuYm2pfCB4kvPLn57XVsmB +T0ZcdHFBf+SwxuKdr8KsK2k4er5c4jTTIflWWktrD9JLcWLc1WUecL18lFByOOWh +5fF7zX+NNsbMBES3F6TG+06NfgC6z24/h29zfnps75usEExBc7YHJsmWl3Aef6bF +vcoS2ug8ZXaiefhlFkyx/frGpRnD57ZOvLCi/TUVf2G0cynEKvfsb21LN50eMKD2 +HiIBGoNj9f3vJdIhLTDFurf42ocY5EQzLGleIQ0Zpv6285LqwqKKl5v28o+A4qnp +Xhkt/3pqZ6aJeSCNQd9Zg5tOd1tXpcTdzl/BmFIvmE+SIsYydLxrX1UEWfJfEL41 +J6qXTzebh7N16bGfxU09OT7puztuK+/vAHEvCGINddDaOJFayVdEaMVUux9nDkoz +b1U/5UxzpzFdNUZBHg1JjkUWK8oTGmkJTlI1aKJKKA1RfmnzwOd4PeHI1hIuT8YQ +8qwKY72mCCb4Sr+Xiw43CqJ9NgWCxYr0ua+hqm2xv43QMhSCNd7v1Dg0bi3ZgOi8 +1eSns5VZFww2JkYo7rrKz21EiFXjhZ4u8MF45M5/cbDqbaPVb6FMx7MqaKmnkpQ8 +xT4BC2M4xCiXnYrrjhugw2/FMkMchIN9jG47IQiACQ8pNqoTd2tLFCFpTZeeRCaP +Dgd8rvaMXjY/Uu9zB+LgRlQ/c01hGL+/d8cNEFzTU9jajOLobi3pKQqLdvlo40Dl +qH6eLTnYusrZnZySBuZD5c57BBW4GMuetvtqr2l8iV4BJnMvLZ9tB69eA1PhKXwq +tHY7a0YkhLUUqKFyPvYcnHjU9Bvg9PnciXnoDFMP1Obkou27vpI6NVmIFKMX1OxQ +A2IJ5YWaN6h8nJOV/THzKjMDmPbXLmtQDuaDPpDaNE+oDwto/UlSQPV8KtW/MR+s +k3rLyN3KXoVl95gT +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.der new file mode 100644 index 0000000000000000000000000000000000000000..4f860bc963bd5078c4eaccddd204ba25dbdbb2af GIT binary patch literal 714 zcmV;*0yX_Gf&#`cKn4jahDe6@4FLrWFf%Y41_>&LNQU&4g?5;ThiYc354DP z0tf&w6b1+?hDe6@4Fd-R2r8Q|J{H(~Cj^25fC|LQpXed_Dk7CGlt4VQ)3gi#XMu3HDYGC?#62}p&gk7vI+eM5yO60=|&d=lgWjrii z2Pu7lELhZ$TB9cWTEX9&T9q&|9D>MowR6P`Y^u}-C~DAu3~%1PS`ILo5x;K<$^QS9*Yl-(wb zqE*hQ&qHI6&HJFgpLUH8CWS}n!;-vs$At|V8k^Q_;k9GyN@x)2FcDwG^Kz?w%;~H= zV0fyrj2g7&b*mOakZV)2o((g3zm%YUO(x|9;TW(qiiH+{P0d4`YCjPGie?071BUI~ z0yiZ$F1YWGtVg59%SK-kW9lN?KaXTA5@j2VsVOb_VSl^kzn40da>l1%-K$PgIUg|Ya{3;x6UAM0V;Jb&T zJ73a6prqR}WdS($&)-Y=0&~0mvgQsa7u-*M8S*Pm91O+W(FGp6IAr7QytY&V4F=$N w?6_~YcF-xs%YdiWRnW;VRj}SK4~1pFGs%!PC+aC5D8)w8F;8JNfB((fKFCl|-2eap literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem new file mode 100644 index 000000000..c7cf185e3 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem @@ -0,0 +1,17 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIERyXk+8ULCgCAggA +MBQGCCqGSIb3DQMHBAhUeao9yOi6uwSCAoDMyMGii0I2y8CvM8SrY9tRx+Zt8WsP +vhEWhI1kbzWpZUdS1URWGZZz6oS33GnvUDmN1fZC3V/k9OcknZvfv8UtHj6RhK3a +dBgLVjEkFfqz2/4cOfha9FrRUJXXwW5JmnNhn3e8WZTvbtEt0e89n4jZWjWnkeoJ +rySKWuPn9SKzwFdPh7ur8N2BfjvwxdAZ1uShnj/Umik8o5wJZUz/7w0nd7JpcsOE +r9wC446li8t3owkm81z5jFTQW9SYZmT0ecICF1CRJgsp060TQzBeAKAM2skiOZXr +ldQBUqZBrYV2ZZ3+bepLrmsgobxDzhiNrRXjs+8lO3TGerc6ZD496Xv5XSJF3QuF +aUjWnaW2YX46nRWY60Bq3IhAbuAGF3YGvk4O/+n90Y4NUXj8mwLq8sFMlXKMyxLy +fHBfWKpwTFgtdBO4nSPrn310+xiPSxU61WGMZkBlgv5X75xiX5ZYktUxVlktvr1Z ++ZPeIMRzuoeK8J8iwzx1ADbOVPCAGnPuYbvUalGoGQkjCUEdL08XauaUdK0eDMTh +5gh1amQg+PTb/ZmYAhaDjHsuzIIgfWtsfL+Xk9AsTimK/qwP6mQLT6Kb+PowX3mQ +Tr4SkJH31Jp6mTxueoCtqPEC1BxhuDlqlTvmPdgIPCf4dbFtsEsSGbWRUYuZXgwg +Qmhp6TC3YNPVtLusoCMwjXkUSxRhScAzb6RpEGJwL94grF1UvTfleTGfOppKxZdG +yjzbJcUlcSCuw844HZDwHVzORQT3zxaguKuu/XcgINd5mU2STOopz3AkHhKLSFej +UANon6Dke8NLp96JvX/NN8zqvauRHg/r7RgcSHQWRZpbAzX4bgsEX2Mc +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der new file mode 100644 index 0000000000000000000000000000000000000000..4d55a591130415c2fe32e3b9152471b3c9c5d8e5 GIT binary patch literal 728 zcmV;}0w?`2f&$bqP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UmRshQ@;Gp-Q= z0tf&w3gmBIG`st_(NFpncKNK%a4x_6kDwR@_XtXQZJaw z&-O|Gw}*kdOXWz?X4G$ni$U&XTx|*XzG*1wLqX9(kO!B{C}yEaZrh*7sIQd9BQ4L~ z>FQNEAJS!#FVi})RcG(;mRJk=1`X$GC7s#_d$|dO9wKINpuFejF;ZUh!`o7RzVf4- zDED92{rGHXHg9D~fY_MTe;XEKuWFx+)%p(fFL@p=s@cc_!DhFNnVt+67on=NrmJML zTQZ)H4u|aW*=RXuj~?R4TWH^pMJ{SlSubvRs{a^t=lMMx6@3W7C9tTra_+0Ru5hbi zT$X>L3G2mw|Bi?krWsj3OX!Lrhvv)Ptp_d>AjWj;J}aL{y4s*C15-%p?_p_jPB&kd zpOg8K9+rWxJ|TpR=dN|Hv6%xx-miqchQslXgpn{$lzoIhv|vjN<2XUbD+t)D@=b%e zhE2>`^{<~qC88w`Nu4!7t}XuS*!bA1?83YXwTf8QCXyvL$b41=gm1#1X&;~zCTC+3 zHF%Lau?Xce!O=JXfFCN!RPj;aoGd^Yr=b__;=-q8dTC9y!kv8b;~5Gpb(*b`+c^!a ze~opsFVK7Np4K$Y_;;5-JYd2}K=+`u8E!F(-LpZfnvy-Gea15iYN4aylyr$={Al^n z5e_js& literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem new file mode 100644 index 000000000..b47b5e8f9 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem @@ -0,0 +1,18 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIC1DBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIc1vbNC/8pHsCAggA +MAwGCCqGSIb3DQIIBQAwFAYIKoZIhvcNAwcECLMkF/Djhb0fBIICgAg/jv44TuAQ +yB+WMkHpvVS25ZLJabHUyHLS+vqhEkz2AqvJNETL/L6bIHRD1o4BJ8Fcrc339Bz+ +zuFHnK7JG0PzRKl9RcO/SY9lfLFNkXtyPxB6DtSXeYTV49NtAvWPV46LSBnMqnP5 +/Tkmk+sE3Lx+sBMqe/rpBeZM31fB9ShS9FgDGfE+ARvzcuQslYNazdT2KVeu+5Tp +qSN1lhAW18Dwo3r1IpnhWGZ5r66TEEunhGI+mX9GdkDhhFiHHn3tUPiWSh9UAPH2 +W59/c7sY0Rn5AmqeHu6F2b99ScRaLhkt6aFNnBAcnrjHhqZJOl4UOR7OGL3WlNjN +FXfCzJ3/+lA+NNEVWScb4xs6RNQRnJ9NHyfdSJuQQM/HXhaW1nSYoFS8nKDpenXA +8hb3gbrGeB0MybmpGtiR4MhJD7FWnH0uQsA4dOrrx2XYaPUBZGtqzvrIDmzO6jv1 +ixmuSyw7nZSYqT554tPT97oBRPHhQVdz7fGBEqxrBNJR1cQjS35Q3oes6jarzTsu +z8REC1QXZtgbWZvlm2m0iwKhQItqOfSnlNkL0IUJGUF8j3Ijz/fbNsfPOObpQCic +ARz1Mnq9ZaDMrvMMpJHcMhYe3y75zuv9WODuPl9vNVc7KRRWgqVDmBHYZqHh4M2w +T86WrEbnbNEHHPhXgSsaKYXvBD7zWocfQ3r2HEstHj9AmoqslxIDptqJv/8Lye9E +kbv+d48oEkStDIfa032Ha95zsMp7BuvWStwnOG2q5sCexNpQdw3Mp7Y2oejVKRS8 +Vc/icnFu35VxZLq/vBEFEDjzbCQ0ayk+GKYWyAxW7gsmWtSWDskv0WaJ0cNj5u2L ++BsyzY8Hw7s= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der new file mode 100644 index 0000000000000000000000000000000000000000..2ec275f143a9bcd1b9f17cb220140bbc17ff95d7 GIT binary patch literal 728 zcmV;}0w?`2f&$bqP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UlY;ErM%$%NVh z0tf&w3BtR;`W9zJI|G!laEfJ_H!|*Cm-l2p`RH`2!_XMk4~o3ci2pZXjycH4$nZ8@`B#winYFo=w5k1=PHeFC|u2{9HpVGXm74;h03D^Btq zw}#aR+nl}1Tf9g2a{N(3&_8HUW%kXeyx*A`wbj*LIZxfH? zfy0w}pa@HReT1;U6o{mzLHBc7uNX(_2ZKeJKpOk!3lRJydc{T1SasXspCP0zQiuzMvlc{bd^{DDb99*VW(syC- zj+=va7!K9qEc(s%pXdWKVsLROPWhR4g#cCO^4D>~l{?!>vVo*0FGvBUbh+8BbA&tO zGT~(mhpEUc$k*y}pr$PitycW1U4_TgQ9=0S8*?9_ifH%|O8nABYYVOM{tLTkXi<** zqq#Wjw;!j^jpSzrc-HM);*WEk|g`|wj^R%mzA~W(Xgiu+eaIEDbRLCEbnmQkY KfKkKkx^K4em|dj+ literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem new file mode 100644 index 000000000..959345483 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem @@ -0,0 +1,18 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIC1DBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQI9ROEj7BZDIsCAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECD8QzMKCoJNPBIICgG/g7EGQ8k7c +5j0huNkV3WdtH4a3b5w3xD5mzGy2LoTaM+iLdatb7JSA63v5KmWwYI9WDqGsbAfE +gApGcoAkXtb2FlnMOb1azjDHVkHkMGkINKD8LvwGEb5/eqW6Qk1GS6WH2q7IuruG +y77wsxkk2gLJcdO8+k0aLMZTQ5lyTm3d2ap2f5QA78NGo0n9zJJs6JAWsoXfdMZk +ShrYwJWaAYDlFVn3vne55mC54Omx1wCqNM+0kkTvbCS1U96FYNzbvIZe1gaULxAc +GkRIan8Mo5da+2jI0GZf6w9S5E3f8zi7lltGlfmcN4bMZR3fGwpAdPx7oW9j0GVc +162Dmn8SS9tgT2pWeDb1DjjabeSc5YzMIJpblMJM6KB4g2GpKhuWNtfHLIxR0M+7 +YTvmwE25L4Oq6bOzuM4lX8rp1fTqnOQDmXHIB7PO3w+kh2nxUwOoB/9nXNlkdUw6 +CbsKOr0MV98Ab8pTvwhZUm3UhHzONInDkHH5POHqqWc5XCfpW1fekUuOIkr3yPrt +F1lY0KBMq6FMcMm/aZDAaM6rB2yLzfe8ErtA7zwkfb3j44bYFFjo3WiaaBUnpmps +oAHdDqJMpsfs2sQeEa7jMb6dGUjlUU/3S+nf9cpQAH2spWbDMhM5Sewc9JpGDk4w +6KD9ICHr+FgT0sF8hTbBZifxAeuXuaq6r3LGaYNs6EvADC3MzSNu0dt2ZK4i804O +y3LSXX/5zVqSbmtQ6NW5oL0bAR4SP+QLCJtXYLI0n7WWJwesFokW3ZWgvOJe40gk +9oNQ8DyBRlK8ier9K/nyS0VVo6QGxPAKr2Th960ekBWleHr4UGnTUFM/iuTuOTJu +l6dmAeTEdaE= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der new file mode 100644 index 0000000000000000000000000000000000000000..106aa99de7e8238acfef03a40dcbf05d2d0123ff GIT binary patch literal 728 zcmV;}0w?`2f&$bqP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UkX_7#pQ_8xu$ z0tf&w3 zA|V}I@JRieAOg*4O-`E|X};Wd==p2=Gukmo@{-VwoIC^}vIldWf>tFnw|y6oFUJCO z{11~q6}Cu-nCOdEraPy&i(ccG&J%9Pug~%`0dZv=?0kn!+Q;Xzf2->zDt$v(b9_w` ztcela+b%f4^o#oy;PRS8?3T9jE&pS6OW?#H9mH@<>ML!$OJ;tkCJ*9+m{Q^pht^j+I(&+gr4XI=?`u+RO}{F`-`7Wz zW)x)LLDHHSQNtuS%Zh{9)u}!bJZpx3Bl~v8Jf<1ioZy($*cFLpKTZVdB=PhDX*8Ju z26GsqLIBec*>)8c&4f|FPozxFbPONn|4{5{EaA^$lw=gmLk?suJBxUKbvObA37wsj zscr1hm;{9%B3J7J>?kyiqbHZ#dMwhEzX_jq`3_VnAv1JVKDQk>P?BIm_Bkh(=uuZi ztJJ(K{|S^?MKK2!Xjom;`~YdX>T#3xt=q^QXGAoih*2x-M|T2A=^BF*+pd;ncvvPl zPQEM_V%TVnM<6WT6&%SB@Wk6Su8j$CFy4f(&k$e%y$MPK-k>GN`-?vj^PVcdGQD9A K`Vc1nEizwUwM>2h literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem new file mode 100644 index 000000000..3baddefea --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem @@ -0,0 +1,18 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIC1DBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIwD3fpS8RxVkCAggA +MAwGCCqGSIb3DQIKBQAwFAYIKoZIhvcNAwcECOmyF+CEzwvIBIICgPFC3z4bUVPM +EgLGuLP6CiDPSKuCx3VdAu5/G5WjjU+dDvEYDtOrVfbBpVhgGAYYuhXlI2bzoO2Z +RPZLwmaVZMUUPqHjNZHND0BPsHnb54Lyw+xnhIvipYpt7m3+swL9JUzbK4bImhzD +3UdVYaCwwnpnAcTy9gleqoQ2ikCX28Oc+bZ0VUUIX+KVbVOv3gNN4w5uTyUDRGgl +AW2E2IKoNNW8oQzZYatdSMMb4Qu09HRevWpUkB//XGrCcC8aAwynxHrz7hSrJYbt +SJVNsyl+djFRcKg8sudGUPua+mYWEecCs9/MVataWfpnT8hPtPUAQpyRpC9Yxa+c +yYfl+7jHvJk54Lw92P9YAb5k0T57+G7Fpxi6MaXn6FAMqFHY2dJO7cxsg41qkF6A +sc3nvcxAxj4gtCgV0d0vVLDjbgjcAevLbzOsJVDzB8y2i6V5l+2/ffV6DjjYO8Hb +jVl6psDscX4VfX1zkEIyTF2P77luZ1gvXuFDw3+y+HpUAAE11vvFH1hmj7RR7uH+ +Y1Y7gUvUA9KSvIStsSzfdcQwaZTMNdfUNkPzKHMVZJNQ2KYkv8F4QSA7qpC07Kt9 +4iCj+D+8nMxS9s2xsZo3lgksB3srmn6ryQimEcLb/cFWbkTSGAah81UOIVtNJT1l +Tmwv35rSTELD4YVWz7CHh9nE2JxeLg6WmtlzF5ALxi5L/grZUN8lx6jNeC8/O8fy +twXR/LD1xmAn6wxcxraqnctBqzknpOP3Eize7pCDpOJR0Z1WaHvULez8G2CedEo2 +SvU8YqnJ44ceom2V3wDS4+005Xq3zKDY6xL2htnDHd2vOPstGLfHxEppNpjBqa9A +qj22QdMCv58= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der new file mode 100644 index 0000000000000000000000000000000000000000..cb158b59e3855c228ad6bfcf280904f87a26e0d9 GIT binary patch literal 728 zcmV;}0w?`2f&$bqP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90Ul3NPR|`k?;2c z0tf&w3Kb>NmbbK?H&T*kc>;_L^5E1>6idd%d5sG%| zDZwYjAm|0hRd0gw16$l`k1Z?vZ@~;cv39-n`z)-%13|*;?sd|gvrjh_kJLSBCpSo? zMj*=Z4?n5ExksT7)r<9OkywX%(UNCsP!}x5^hlR8W$ccUn-tk+11{q8R<^PB2fv_n z7nVy4-i@!(fwwZ25f3YZbXO;tjVNhgR3oU5T0#XD79l?^K+eW7+0enQiL~KbTY}|T0P%xntz|&oJ!dWqQPuT%>Z`MbtDMJUc+`iuUyYB-H z)`2$KMgBo(%iauwddm@l=e84 z=VkYcot@CDYnj?E+bt0GbS=jA6x5Nn$SV=`x^R#<7H-CJ2$e%G36D{w(MU?PnG=9N z`#n+hDbuR*x6ybM#bee~ncw3mm1o2i|LF(24cZ}=ca{#a&Djp;bVEQONL6XAz86%L z!`KG)EQ5Z}25(hkJfDzIoj9#R_cE_| K7fa|51{f%?KunPU literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem new file mode 100644 index 000000000..95d946bc0 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem @@ -0,0 +1,18 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIC1DBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQINtUwWQJ0GUACAggA +MAwGCCqGSIb3DQILBQAwFAYIKoZIhvcNAwcECADq8lFajhVgBIICgJfbFYo4Pk6o +m0FhCL1/6VwE8oNU8iRbzYLs+ZjpHDKKs72N97M6FkPgwYQmcLBiJgYDfk+otjIy +Sv2QOklnEi8Vu22c+5P7UQxbobSf26hGgRlvue9xwBWylnBj9VwvgUAhbKUKJDW2 +lcUryZBQM9vX3cpeJUN7DsRFA0gyYjuoNTm1+Y1G4UqZcQUJyIVqSHA/dKpitnhR +xRNP/IkkY4GxTE3VXSoOm9KecA72iAnBdzrO3yMx7PkWUotZolMXK//5eacginYw +dSQIZDCnodaC0ugH/7QuKbe3UUyMt9b/a7Fx6c8CiR3xA1sJt0N9xGK0M1+JFBqr +cewSxvF7I+IRRE6buo1S5rqzBTZFfGArvyklBKgC0UmSFu9B25HcQzrBEXMPneG7 +W736jjfwclwKwboCXt/gHJBM69Pf2Y/Otjf1HGFcly9D+P8SPq8dkBSp49Ua9RpH +gtXpaBiNZ9Q3DIXMu1U9wLYhYJZQxU+FQHuO4wGR7h1KdSzZCg84E/T232qDr1Rf +7vLo7OHsAtQGU1pZGGorlTcY8KKwdeyo9Qk31jIZf4DwLKu+Zk1zICHrE1kuwNVE +5dcIIKA86Pu4iw2i91At2GJbGJku9j173rSL4IHV4ESUKKoHMH2ncBfjcTtjBXXj +FyauFwU6qFo71WXRMGKZpZgRenK2Lyr8/e1g/nEbHDfqN9ntgDlJhqku6ROP1Jns +WzqnWRquSk93p0xDMZAXxUZSmCzGlBr5xPhCOmHp7YWZrLmKVdWXM/6MFWpj5KeW +raxqwtiL0gU5wkKUkIxvIrjp0PqtU2q2dzwoL0blAXKEqU4v1nMeW2qhY30qz/rT +wu95SzZgh+Q= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des.der new file mode 100644 index 0000000000000000000000000000000000000000..6f1eac29e432f29c1fe7c07042f312cc4e3a1c1c GIT binary patch literal 711 zcmV;&0yzCJf&#-ZJq8IXhDe6@4FLrWFfcG11_>&LNQU&4g?4UZM&s}NnGs$ z0tf&w5e5Y-4g&%Q1PEZ@&5~$6)nf#L0)U+BBxT+fdbH~%S!#>pdxGNTAAe*K%P~LH zOWe*%BSuq-nF7mlA|G| zJz;aisn7&a*LV2^&)rB{gs?Fk$z^?^b03f|v1vfKhd1*M6x)g6CuT7Hht#WGg7?U{ zvKlQS=Uh*9W4fo<5INIjPwiJJR^}izGf7e*@G5estIQ8^9`+w>6w^;3C}fhVN|t1wmuguj0UgPMjRpv`ZH*2V>{oSYP0-@;*d6Y>`U}eOeOe=5AlVq0D4?eP+rV+Xq)#>6w=9*S%Wc1$O z{427i3};KfQ(==K9|t4OJh6V6LB$P2-Wi%b-bys!OLtfW7}O0jkpmW*vk+!Zcy`!O zWM*uunJY0zTqYa08cHJNSZt(v*({($!@^zCJGV%D=j`|{+lSVg$tH{uCG=#+il}n{ zE^4!a|M<2mo|niU2s@uBVZnNM&P*Sx1EEfPMvSoz3IVxxWO(GrRuV2s^1Y+Fk~!!k z7;+J%D7E7~;EWcR7ZuJ@;X0vorq*_22X<(RipNrIX53O{ANA%a4mZ8vZ2mE$!1t}L z%n1moJ|}1{s;FSqn3tnn?0$n3$RIIG(FOO;o9T$XFPYQZV$hXgTNk6R5oblvX|vG` t(aDts{{kKPdu=I)PNR!X%;iP1In-10nNZb<9)4J0g=?^P{!-0mQ-HA_L{0zz literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des.pem new file mode 100644 index 000000000..9ffa511ec --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des.pem @@ -0,0 +1,17 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIICwzA9BgkqhkiG9w0BBQ0wMDAbBgkqhkiG9w0BBQwwDgQIn5qnCAJVLccCAggA +MBEGBSsOAwIHBAi4cuNF2wB86gSCAoCiwf84D3eyaesCJsiUCgk7bakku/Y10456 +CzrvLgneXNCbksRuCb8iFtYtiHQJcUkAko9B4uVh/3u+L9dNMnBAEEfdW8E+40WM +tJZcX2f+FMZPaXNnGkS6mGRJc12tRmg+1wZTlKWrk1hHzEom3SpPHsIvz+aWlXUO +Vq0mYp+CQIRC311E+lxCT2acamfgyxrNHZpafUq2GwK3NjS55jBg5DYcp5uhMOvd +sPTh72+ZXZq8qn6dqu//RD3L13px9GGsdFPcwT0BPdpKYLkJfdAXRY002DpjAU9R +k3LVxl0O9Z9VDzjnwyJ1qSjmo+Ejz4WsDfwT2oLGrn+6UenTsHxAE2MXmC+mm4r1 +CJ6vdkgw4PTJGxgwVoXaskfzCyz5LjW3oyEQAQn0DHZ1kVS1s+pFSQo05S7wfjjR +KcYwfkMjiTHzWQ5LQmt8/a7GdKSJNEi1I9cs3M/HjlUa3U/KOYrdYlQGp1eD7N5p +mFqc16EdWaPjtVEZWWgprjLFA1SmqAnBtah9xSOHCOmqxbiUiUa1tQExglVYJfTT +cy6HRMBEP4yflxPrONYiHFLigBrb+Er0IRx93BjxGXWOriPytiYWG/idjP10Rmmy +3michch8jBYL+fGNiZs/sbK6+UVfHbAv5lMNvNVuntlnnCJkobBTdUww2YJKAamb +m/URTp8k1xKenzCfc/oqj2zl0j/vxr5jsv30JL8ryHzsUKYnhy3aoFNpknyM6Kid +UAaQtYX11+5tvnI+uKxzjW4AYi45PmLTul+bN4Zb/CysfGbWPtv5fiyM1mvSlyj/ +fI98jOK5GM2bALc1cj/ThK6RNtsRwCGohp6RO3wSlmfBdYye7OLk +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der new file mode 100644 index 0000000000000000000000000000000000000000..d29a1e69c87016dfda7bf260d80a2b721bc56b4a GIT binary patch literal 725 zcmV;`0xJD5f&$SnO9lxlhDe6@4FLrWFg`FT1_>&LNQU&90UkP{*EfDX^(&c z0tf&w3ikSmuYucgkjNL^8_S!!!$t@lKzZ?Q&su4^tGj(KiMcy z>AieN0cZCBzLh?3`5lJ>4Xn`;1P076HZM0eo8_)iy=}2^#s?jP&h{Kda%*s|8YAXv z3ZlN22OyP4pXH!J)4t_v*AP)N2P^=uJQssptRwPfN_%6W!`~LNHLS;V9IJ;Z!*ECt zHPO&r8X038Qj}R4x6NIxsXkE^B4<6&KoyP(KVlDmJCu%E?^R6XJ

@Ahzpo>#Fp}wVx$N+d`grh7@@H1X-X?X0p zcTKONM~r8UQm_u$9qOHK#&Ocph{A|0dlu#7>jc2e%Q6cF0huL-O#eMaxs`%R4ebij zDZi0yN9qz5fusDQ7QAc_{fPHfxL{98k^mNV6$JvY#47rNxC(JKc>ky>La82F?30r~ zJ#RZbJ)($aZW4a#Z3qB&+uvKB+?;R{x*ScKXtuIl zMj1@AKGu^{V~L&knK$FehRq>N8F;F(EolHwm{T_(6Tl0c*O46blK~GwijE)lzjng0 H>vXWe(bq*~ literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem new file mode 100644 index 000000000..9fd035c5a --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem @@ -0,0 +1,18 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIC0TBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIoN4P/1fEZkUCAggA +MAwGCCqGSIb3DQIIBQAwEQYFKw4DAgcECJntwhGUq6HXBIICgB4ql0o/M9lv7Px6 +DUZBn1QFddPrr0slxLK7CoR1gabr9FI91o+dpyejeLHF2VFUYY3F56Q7f0P0b6Fo ++OekgX1ySvsM5EPGZBopXaAnAaoiYuZRSfiLeauHHCC/eJx5SH58pwqy0rY4j2ND +U1dYB+AVsdpRVv/MOSn6MblqauywTo3rIleK8SsuywV7NqIDLb3CHWEkUQEHJoFB +NfNb51u3GETcrYWf49V1WCbftPHj6YHlsfmUwivGCieAnNckJvUXa2TTXq+tWpO3 +8ar1cRHCFZSgx2chTgY+S5KoXcSmTp1ilNb0XADQYyWGVH3FUo1BBVk+iwNWM6vA +d6yhtdAATsdaA8e26ehXsWDUV5OVxctgjX6NVem7hJJEmGxRLQIYfR1Z2bsJp/eG +ZiweIIhsSMyKQI1jTBV10VwX8M2ovffHfAmtxbZKGVPVLnxW+ilBy6YMR6viZW/1 +EPVKeKjqlgZkhLVBNgu9WsIeP0I+RvNPMaRE8j028NW71WGdgwJ4Qb+Z3687Ob9q +tgNwp32isZ0K99UX6fUj9sR+kEcF0yMaysE1PXJd56HNydftORdq9o0jetZadlE4 +WYEvIfUd6U4nHK6OcUsNVNLua0XB1hH+K1CcPgY6JV90apsE05fP6oncPwDQT25s +8wzGpitug30N8CtH/fS+4WjJo5qa8To/JZibg3KhufeRMYKLyflfV0cp7nMtdbtd +e1CI6KFhD+oBLzsSdG0BrwaSVfxsayQQGuz3FYx2NlcTRhgXeM13pmqmv/xoMYqE ++BC0kiRhZ0yIh7Xpzg/FZNjbuQpQvqbYmlqFdKsz6YjeKcqvGMI9iav9nRA+ag3Q +qUmDliI= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der new file mode 100644 index 0000000000000000000000000000000000000000..7f576bd16f29b70f450f515fae3912e520ce9c3a GIT binary patch literal 725 zcmV;`0xJD5f&$SnO9lxlhDe6@4FLrWFg`FT1_>&LNQU&90UkwRi6VL+AS zhhqw|Y6L;U58(5&u~ZS60S>504z9S!{-M9I|A!jBMaw%2N7kZd`>oc`44(Ud>I6G; zeibpq4KDm<&+^zw+BcWtnoysd{27%KB|nx4Trc}bL@ae%6v!%VxZ=mr*2$k?B7Qzp z5C+baLOI{*NXzV%@KFqC3ug;8_PXsBJDorKG=IGuzIU#Y|Bn2lncj1;eBfq~KCX@m zw4sHXVhol~t_%5eb{tK`0eD4D*l?2!aIta^FMM7)jY#3WY4H%X{ZX%j3O|LGP5RN@ zPj`ms2R0J6m=kYE0`lyK3yOuoq_ABF+pB^CcJI1_Thx-l4H=`u=HH@Wr!sk###k~@ zNuSChRwe-0c$r7nB%33AZ2Dh8w_peNurm)7!?e4vzi6o=DR$r#9JYYw+sLM^pLKPc z4lmu{6VpwpCt1TN7qC}?meG0*p#LHQR302Jjkr)-F5KX+){F_eo4XpJb@HMnZ&>Xc zr?|pri~>0B*E@*w)@s;3CFCs!@6cX6U}3xB_*dL{`1ykbDm{tVi4dL=`NNV}+_3JR zoHdmN0snUCUlRP}bD|9gDrt(r3{}p{GB=mBv|Acg?N->SL(wvU^n(+-dT!A{Xds#UkpxB9O0-OH#+l5j^DZ*AG!&O!fuUj!Lm&5s4LU zu|O85j?wavhPw1Y)&xJwN>sd*&_1wTX_6>CATbRm|_{C%ldmM{qmbP#g0cFV5MA~xiBYr@N HjSb}5LornW literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem new file mode 100644 index 000000000..22d39e3eb --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem @@ -0,0 +1,18 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIC0TBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIDhZ7Qmf2HYACAggA +MAwGCCqGSIb3DQIJBQAwEQYFKw4DAgcECHj4bQ/zjLVVBIICgOZGVB9PiB/MTUYA +HdiMnbJ3ackg1x5NBk4Jxlae/4WWBX9Cg6uGMA5CP6XlzhlFSDji+L7+OatW51/A +0nREuJWAoAAlayQujwuXN5YWOHzlf8007IHzKQqGtRTjhgGSa5kddXzfYvqLVsdV +MAb+8UZgc+6wO0Ag27rEWjvx4HKUzS03sqVqF/Rl22oK0VMbVWU12PqLMMBpL6BA +19MKsKDe6yO4fRbipT3aJ0fv6RW6RESWAXc/9dG/P/0kEZXvi4OwR0dkT0s9m2D3 +7r9Z+0AK5uSRU/ftcYIf5ARvIOLltfNN0TUo58I+f7CTKCDLUQbEfDLsHNuGaAfA +YRLyZukS1fppZiog/JtwGQsIWMChxE4SVThmYhqJ4mCUA3I2SXKSaS4TMAPrEJm4 +onOG2NSgHQWdf9cHNMHeGj4Ey+qgDHMYUC49ScsZQecdd395j5T0znIJk4ysawGr +34vt8HIn6iCxp2ZbHzqLm1qeV2Lgme+G9IxJi9+UR+eL0BZdaCt6tdyF9/4HXXTz +hrcHC7vFVVe1HnK4B2AzO2uitGE3aEodRertqJbafWyOfip6Agjbx/Eu5IDFFrCU +KxgZxV4agc3/zjwmwapVEZdTr9pyP/6HBxIhhd0KEX9cVMauCcOA83U+iezBaZHS +frP3GVqBs+CzCx4nIXiCRacc/pf6tec9nL7mbrUtT+lQoCOPcJKcUAZyW305+5Nq +mGho5y6i+AsF1M1l/Ar2gUGMN9//VscombNMRFXUE2Q8yL5//gJRS1rN7U3w5dRI +3Bk6pbMp+RlbtzeS2zA9cuLGWtxvdblYCo90p2iam8zqfDKEZ4dFfJlPZvRw2hot +7BkFp/Q= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der new file mode 100644 index 0000000000000000000000000000000000000000..4445235c8391ac6a9b16a1999cc4b6e422272567 GIT binary patch literal 725 zcmV;`0xJD5f&$SnO9lxlhDe6@4FLrWFg`FT1_>&LNQU&90UlQX*^4p%k*Oc z0tf&w3A z>|>be$lU!@4zr56BT&_O-^jC)e6^{yur#KJ&I_H5kRCr&a0jeSF>*4*?9%XO;qvQj zF83p9d2>=jYjsau9FbBHM3OpqPZjdgl2nAz8 z+`|7UV2DW+ zRI|Vj-Ua)H?0Pfk$fML{OA1%z%Xg{5QlqqQD|!j-!*7odE`)@pAi^Hlnsh|13uX>I zfOg3Tcl(U&i7&(av-rA)98lFo+We*&beP2|!k@F!QQe2zQ)aqJ{ox?)4OVx<|Hlpq zEru22&;q|QeE6@RvzG{Jr6#jLSN+VV>Lj(HqD0jxyY7bGbB7>^`9$87k$%2Bg6Y;8 zl#kCzeI5+pmtT{xdDiq5F+>}6iJsMH*usFLsjlC)K#p=r$Bp-xMsbgWtP1#WeEcr+T zl!~w?eMG~3_;u(660^;g)^bv;YsszqWyo9lU(?2b)_57(O3_0Eg2AtDvMN6ix4M&w ze|5Pw)p{&LNQU&90UmPfR3^TK>=w3 z0tf&w3!B1cCy9k1yIyRo$2Rqx`}d z#_Fb}F-5QZq!`>&U_Kfekbb!hBNTTL>y;s?48oi~UEPWFNm-NsM z_6~C`#+MiP*gANV86KKnJeWA3FDxPgvgdrT(-@*(u796YfE9hdXQ0yuuG<@`tXrMJ znfGAUB*JG{d#dLIVy}e z%wBOXoivu(V9*PVUP`T~MzOu_&)QT_lvRMg+c~}{ zG%AL>5LS1VkVzNs6J*GEU%%k)Js=g5)OGJM0-~boX$j;QG4Mo*(8S05z*A-!zy4`L zjv;x|ZLQ0D_8fHXT7o}Gw=qg*(w9ghtwwpF<*a>C9%ykwt4^NLsHvG<{qoxR3(lNN ze_yVEJPB>NOIW_Va+9rV*;vs`M%n|bWL6vJ1M@Np8J{-xV~?$f1x{U|k0=*sp2uS% z5CV3V*X2R@m&{b(*2ngpXRQDjU7^WLhzA#y9UjWS0)z-@x7@=%hZ)&OL_O`fs3CP9 HX^QSdO(Io5 literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem new file mode 100644 index 000000000..12725abe2 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem @@ -0,0 +1,18 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIC0TBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIEfr61PLRSswCAggA +MAwGCCqGSIb3DQILBQAwEQYFKw4DAgcECIis3kdV3MqyBIICgN8cVWWhMwix1YF1 +5atoT1U1EWGOUokVtb+oTlqJfMvnZeCHc6kYMwbWvTqga88AUhSssFL9WaXPb67a +BlhYYkijNdOcu7m0V331RWdzxGAYHHv6Zb+43+/a3fx0hYwWsAKBLKnYXbxAckA1 +NSuItKnyrWCprvhelNLJRBY3aJG9EeqjIeh0MLFMbIhFJosnB7oMliYVu4DxnMNq +JzWoiBHllgidjZm/vTTmfH9gL0ya6TwBgmj4gOvRu30P9wdBPxS7IZi0xj618SMm +eOSVdRpuxvX4gzQ0TuWTzFIRdhCFx5fL366tVca/YZ+9qRO5oOqAucVKWZ5zcMVp +yD1SOjMDP7x+3LBzIYAYb74kHol8ejIQM3IrO0nzANer5M/KWIRbXoDuyLzeiqrG +FbzpL/kAQ37L7o+GS6gyYgN0lQoZxlgTt4t1+DCNAMWh4xmFTNJgXB6a846u6c41 +K4GQrwOXGAr0pYdNg44fB5fqw+594VKxHEa+7MpMvzos4wsISkrCjbFRVCuO78HY +rwsD6pWtac02fg+8+a8cTmUXGkzoEKE80hTC0r1SO2w0RabyjTHxRQyZtcCgavkr +E6Avbabq3GDdxT4IpTI6LiDKFaRUpxMnTyToTlGzsi7sjELHDqgOw4/PbTeNeyJH +PPqoB71p9Djitpw0plUoO9MWQQPWB7ro3W0g+2lS1782wTk+9jWBDVdgDV8+FYJG +cr4GxoADHFOt2viKf+7cq5ZP8HxvLfHF4kULslea2AM+3yTQ5TTAahCbGOPVJgaA +tcqOZIGpIxk+aRceZRrKPerXRmZvRItbgZ+QUCw3kRxgzanOHB671jp+VORMFzJR +jhpl0rs= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des.der new file mode 100644 index 0000000000000000000000000000000000000000..eda37aa2e82f8fc70cc806498429e1a72d6c15f5 GIT binary patch literal 1298 zcmV+t1?~DUf&~sRKn4jahDe6@4FLrWFf%Y41_>&LNQU&4g?6*Mnj(di~9ls z0tf&w6b1+?hDe6@4Fd-R2;6$X)iR3sE(C%E$OWH~;^a*6ljG~bJnf$4#sx$}*y^X_ ze$E5wd9lB!2TJo z0g8{*4|18B4qOefA3iIWg3mGg9?hKA6ka$>=3nx*)x==qaq(bwYxy2Km4 zhZeBEiN$js48*AEjfbgRZ?38~EtJQgxwv$ZlbIa8c=I5(j|7=IQ26&oZ(|%aOda+e9z38&MwQXEQ}o#a4xfuJXATYJl1KQadooXQp>iMaiT+Q zGFg#LN%~6Y7^Y|lx6T{`jxJc`GOtY#gvC?=9}KxwT(P`MJJ|$T%RcLRXqH;0l+TZm zfnzoESgm-k4CN3UFZ6b6*NMb)8b*vek^c7{yJX?0x(-Ra2x(d`+NpwQmGS*oS;+eM z^9ZMIl4a%``aBywfc?6bk9OhzHhf%cfxRKf3jV534p4eSMQ6y=Da2Rp6j$^IG+In+ z)_&hu0~JqZ%3y}2H+@NOX!gJxZ&OJWO=Y0C=hNTCS|JF0;si5O7HIEU%n*58@%^gc zk>oVJtM8N!AfSP*26o&R9*Q{D_DRKcVfIt?|jYUC#zEWB&Qn{RV1 zK!O!|+e?kEgC#-}{@j+AJ=mP5^?jsrui6FLN}}%}vJQ{wjNw8rw7z?y1&UVK_0QwR zGlN!;C0|w=_K1%wl%*9mI|NOro;}#rK6VAyAawd#0P}W3TYVx!`tsfiy0oX*mQ3znmQTZk5o@WY`a~ zCg@Tw?4N(HSlF@krEEe|4^HIFvbTO>BJ*o;T?Nv>Oi9!mIjFI8!5d!CIj$QpQ5zbG z8;x+8-yq-_#-Ev2$@tjG74r`dUA$MlXeBO!=pgZ7<*3ho4+75Vi)O);ARt<$o@pWc z;!4A@MZpUib#ByloS9AZ-a+mI>)C>sY6R&DVHBe6HzSy1=^3$!j$Tk2DlZ%yudEFc zyb2jXbol9CJbh#ZW#GUk&&`#w1J$Op%ieldFg@`?8m}ob4n(}uaCL&_f4`(ta?SAr z`-y*%ilKF&BIB+pi`D&CQJaKhw}`V&;vBAPeW%ozwz!X1xaDTiG*d)C;M2LXg3AfC zdN+m!gi31U0lmr)Phdt`{!xfD?FG_mXS+3KMWm$3iV2M4=(WH4M6Mg)+wU-8!h+v; z$vhM>cuv(r0eKeb!}i*3hzUjQ^$NrLrfpFD)E^(??}<|VOW*L|gEGf(0BfP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UjmEypNdV`bk0 z0tf&w3|i(fyyQD+flhtUi@@ zOulBXzC0ixz1cpN5PXcXr4JLCKKm`G6|Thzl|Va32%EQ8TA9n5w2P!yQULQDYCJb0 zwTi}BXu)Tk7wb#p#CaO!T&>Xis5 z0kn&or^6du;RKZ)tBHB`6a(_(;%<^GFn1L+qI87x}h!JuyxM#e}wH zvmAQM?DesX72Z2Wjt6BAe-Hxyb-YYQ?gG{eQFB1e6p*`uoW&Cxt}4`ZY5vG)Y?_0T z>`8XXOyg3u?B8cXhTQoD*8=q%lFY8IJn5pQIT)!AoT`+u*+M`B&P8u{Bkg;ch`~?C z3{ri(mM@^@-`DREhrIhkIdeavzr7*@isY2vKu8H%;c@Y zC6~YF0^rvw*gada|2#hE4px#%O{v1j(xJRQeQBh>ziw|MorlWMdO*1ulArXcosc8XMA)+L-F15~W2c76Csr)w)GRdF!WY zv7=1ydC~x0UVHwEtzpL=iM=aPJ|28)G>?=$$kU}{cBJH~GL+@&`#6}jEVTKRX7I7~ zV@gTeEG@Td=p<>XB!=11azoTHgGP^~aMA;&*&+fSinf%esvWzZ~IwF>=9C`Y2o~`^Evsey;6u-ib`*mS#+!ogg zo{WW|8$Ga)FvM(Yp!MPu9t zHXE1CH8a>^?)1=v!Dg_pp&!?Ypgqh+@(?Vw$~?@72-ZcipeE8#+ojr*nMfB;_7h{F z9F(F5%Q1ugWN{54m`BaHiZ?28N|F7C!_t=7#f#cQD33;AyVfA_;(n+j9gwiltUr66 z&d2$hO8?ug7q_Ju&{E%qiJfjJltFR1eI_%*sE|j(a<4<<>VdI#TZ08oQ;%Ukk!MVr zs%VlTie^!h86pQJ5xhMh#|$#5oHP$D1c+~I?<7PDI^-!ljaZY#7KqfI^-hX>pw*KP zN6pGAEt8=rEH4>kYmtEr%|eFU-lR`x52v)qFr^s0t{OgL_XD%8sBZ|NK4FFR^?sN< z{%1FU*v82^c4S!M9yXX8{wvGpVxGyv7Uho7?;Pz4V{b92LHg*LW}qvvH&4B|)wIXp WhoI(N_@%t?rO{Ptb=-5^4%Ic2`EcO? literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem new file mode 100644 index 000000000..8ed64603f --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIur3B1wRZWJ0CAggA +MAwGCCqGSIb3DQIIBQAwFAYIKoZIhvcNAwcECEnKPmr6wiNuBIIEyKNZuEXIk0Eo +AC7KnJWaEhSDsr4zte/uGDTeOGRVT6MreaWUH3i/zwHXsavEBsw9ksLYqxXsIeJ9 +jfbn24gxlnKC4NR/GyDaIUBnwGlCZKGxoteoXBDXbQTFGLeHKs0ABUqjLZaPKvNB +qt9wQS+zQ8I6zSQyslUfcDr3CZNgHADdmDFiKisAmT1pbtBgPgzmxLNSmx9C1qwG +ejuZ/SJ0YYAdRPkDh1p2yEiAIfRVFTgWcjltcd69yDk7huA/2VCxWJyVDCGrEnlm +UJyybUcXXofneBp/g0J3njaIbIftmYIC+763EKD/dqVIRXVxrkHyYcvZ2nVNUT73 +Uflk+JuHIjTO4jHXiPcaPdAEPLeB2D3Geq5ISYOvTzOeurfD16Y9hrN3IHi9gedm +JTcEPkAx2hcb19h74XlV5tcQ5ImsPgLRl0euODN07+nj14AFxCQhuoGx+Yj04NkK +dV/l1rLsbmLiqr4n+y5ezGr0GJARVinLCBehptzxaipXPzRW71IQSddbtlSl1rz5 +Npv0HlwGgwTacv7T0ZdWncaw0VjxjXAwHBD82fCiuH3qZAXEa0M4drxROeIncart +MIky9qIRjfImr3oh6GLxNBB3FEFFf+23CO+Qt3vrh0j8sVYn3cpbgHcqv0q4fca7 +Sq2okw4RjxcDHyLgWiR20tUkqJT8FYQr0u0Ay+LT2YVVO7+EQVqvlraQcOS4Fkfa +Vnggn6sdyhWWCV1rab0v81qZYBvRoUK/ynICKCbXaJ8d1mirdNGgs3FxpVAiUPZ6 +LYZ21Uwtj9OoeEQ06GPKq60xHjUmTsNiEkh31AIlSAgdsN/0+pUiD6f1lCWfiLUi +8MuFUDXqkqXAvnJW2/mKrLvcx7Ebm02rkNw7AdAnUnEx9BGxD1B0TVZtRid6mPSO +kXv7adNyBH7qoI9vGGQ1ptNRcNxhxqgGgtfwI+0mV6P6G8BJMl8urZYN8aAC7dJX +/k9EICTUcOU6nIyFFe8tk4kkcjdo9BNkgB4JjANT4ptR2w950tYVqDMHBm1eKPBC +bL3SnDDm4Cplsy7zAdUPsCe7/Zk3K2SJwUj/lDUTDGCTtq4RplfDEBWb218XWgA6 +rHgi9/EFH3YCZM8EiE9Mnx9UafdnfKhk3tm3I5nKo56C54os/EKL8W+lhXYdK9dz +peehTsjEQjF0/1OE0097XlCShP8E0bdluoFkD8mKYC7mGv0muJLuHdGMEaCKzKoS +LBKpZNYdOu2wlFfCkf8zSWO4eZYKbSUL88AoEM7A/kquQsQnb80FkciPFazlF9lb +ihxh3YD+TNH58zpYvqgOZkBflW4kKIYbyWOm+ARMq+eVph1aNKMdzeW7Gmf1Fab3 +SQmfuEBAfS8u5ghW3J57q8gSJSGB8bpYWAmNGGeQE2g8C6HTxJ34kU2HoFLo8a1/ +cqrExWl0/lkhwqc7PpvJbKIMxVOOXtVMrzG2XBCkfQSmtwwOqH1g6AZv+6sXyLZJ +PmvQ+R/23+eDqp/lymz0G6F6B10pldgqt5FHYxGaVEp7GIx6L+GtI6G2qGxpHJA9 +x//r3gdd21Fd6y7qHYOLO4fEYAe2sN0mJVjxFLsg9AhCzfxKEHsit5LMdTkGFRG0 +XGP/QsVNcWJaYyaKTXaTCQ== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der new file mode 100644 index 0000000000000000000000000000000000000000..847de7a637e15dbd40950541ff5fbfb251255f45 GIT binary patch literal 1312 zcmV+*1>gEGf(0BfP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90Uj-fseZxA@*@Yn9f&|FNIhn)_E9dY` zp5IA#Zal1)@vtOnxxy;BbmTxQ01}Ya5+>nzV>(Y?(m7^?C(PU*LVhthb!rd)diuXobR$#L;YuS^BoIghj{H zEn9YWg1Wa+E_v&UR#FcbBMAnukZ4Vl9^*QH909)9s?-qcj+l^UdagC~OaLyC)A@md zG&J2;LsE11UN;oDeBuO8kUq&hLKP+(DgB0^y_Ey^ONH*xmNCx}Ysf!G?hMBJ7yqcAWCizgJWoN-W{(= zk(lvMO)sivA_$bAe}|ZVeFY+`uA(L=(_t5}AP^Bh(EsZ8Wc5cgBxb0($N7cz&EYt4 z9Kc}cAzv7@qm@QI*R4qMZS=XueMG_zJzEis5}~vhU6WJ(jYUmS+2crQL7YKPNSD<; zD0$b8=E9Qs^lx~Cc?&S~)GfdctPZ)cSw+!V$_?kKcl^#>Ibp%SDja~FOx3+pLF}Lj zN86_Ina&4$Gi#09V!d5CVbmJzg$lY1D22d>D*mU1N$b8>$fsuYO<_cMn1G++7_5Lr zxLf1hJp*TCQTL^)JA;7v!vlfyPZi7BS(%&}c!s!_D+LmR_aM(jK{pLCLIZ_{3MLIr z>)2?d7*)6Wh&tIXYzA0)6!*XAhHS{=W((4cvEbbYQWtQ>A!=pTkmUJ0(~U*5n=<){RKnXKo#T76sl9%Hq+Fxf#1W*x z!u3#41Xjq|RjA&9Djr_lG&1l2>Zsn(A-PaUYi6C@1I8%Be4S|>Twt^pV|_0k46~9w zAt}OlURULK9CoOGLrO?uHaI~YUKvgrj`arT;;S3Qg}dc0(_bwm!EbC%_ePy}RV~v8 zteUnd>et&;k#LV+oImtGO4|CAwSKp%ijHjH%W1D|;)oq~UD;^pbGkBe#}BKUZ-XBw z-iGPhfNjVuo|tnyQ&ZNfMX_yh#DZK6J^PCfq3!tE%&d6;^wR~GD04(0!s<&FnJ`p> z(;C%gz_UydfW0{phP-8F+D8eCkw(jJ14KTvYR`<~!NFsPFI|vr6#@X$GPw9O$V5p} zsM#|HO85Q|5_zwJ0hKVeCZ@8DS&j)Bwn=6EzzB1q_)mPVyMQvznrjxVb$1Da#N~L| zqz-x(5fA~guC~*oL3vH(klZA3%Jo>-LLv8^IfLN&2GiBX$D`*AX+byg01=u*lxU)% z;!V%n|Hicy17L=|*ipFp&dN6&#bKy&7*pVCaA#O#x*glfaI;w1V#Wg@H5HeLR>!kk W;TSo@PCc5A#R2q^wKv(pKESQ$cy#6f literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem new file mode 100644 index 000000000..33a770e2f --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIv/X98EPvjcYCAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECO5EBOummZrzBIIEyG+qrKhGE4TX +ch9QUfLBhcklrpcd4xOF0FfwVfaO17gWAOp2Ukdm1MBof1fF2wU0hNG+dX+wIMhM +/MFZWx5J0PLULmAe+m5rEVqRVY13Kxa5UJ8W4oglXVfeRkTvyuWr0Ov8E4wrh193 +jmGXA+jAjMZaAgHWZzmHDX0NwEeoitkFEXJc3tt7WAaq93/QmtTYKH5eoae17M1o +yiSAxI1uNzHryPRt+6hp1z+sCAcniIe0fF6GrmkS9KcFzO99yehhrxyojiFPLSDr +Cfv8mWY7nUSFAW5UBR6KA6Ggp27FyKXKc/k9fvZzASJzyjxG90FHyIEdxw5KsWU5 +NAAO+P2Da8aX2xctAnKxY78cFB9Iu5RSCGc92pp+G7OcdFUjXsYXr9KEX9s5bObh +TuYGtepHEKLajFZ9JvhjQm/t2lYa0GGBNH5j1wwmfdIqZZR82mYgsgVVhyp8NC+Y +Yw7K/rjZDgpQYSrUHGxlPYoxZwAHvbTHuTuGI3N3mS6kK4Y2NY0OLQOrVnFGNT57 +ER2LK2PDUrk3tqTwpIcRKIqeMRayqNQ9MUsjjQ+v+yPcbwbZ78Ci2niq4vclq+84 +tReLs/JBo4WHfdtFdzCnIqLVx2K6mjkaGL5q7tKYQoDjHxaU7Rp8cqy4d3EFovZr +W15EZaFo70vsxN6Dkr7lkJdBbDbeQCdkTyL4sLimYKselKZZLUl/gKw2hCC8vfoU +Jjs7td4IQ0vhBtVT46PUdLnvxcqpGoYBMiVNlGYowP0ugd2MHISFeMYytSSq4Kqn +0OnbqG262WnuxXIufm86KTs9c/x1+ZTrAKrk6XarmbF8I7pB0jBjObZntGmZ05bF +vJgRUDAx9sheNwPPiIM/7ttCDoxU1escT+u4l675FkHMhZDUSLSRqVNvGmt/ES2F +c/dIq4iDGgG+MZP85S09ah5KKruDE7wvZdpA7NTWzSN/FL6JokU+GsaWGt32Hmia +OK8F/CRtUfHFUjLIk/+v5wzqYWqI3LjorXQSV9pWmtahp1cLQ5Wba9vsPP/Wvi+2 +m7FyBEJtgKP813YOND5ZG+NndlkUahwditGJ2XtpS4sDhFyQ50oQm6vVY3nxlkyi +7gcCE8xOI8ufFS7CBl12pFys5XS6htkmBbMSncOoNo7P1kuu/n+CcjCnWAY1iFsN +OkYOKDZlRdkbish4JqTe0LdRV2CcpGmDoZkMqAo/gacweT1OswgxPZqRAlaakDsk +0z+wy1wNgJlLF6Mhub1zT15e1Q+/wHUNsAcIRbEsq4vfSVn562/umqqVZleHUfoB +tAKAAIwee5aNB8fBcUFCqiNPFGnyuJdEy2QCu/xiFQ4M5EGGApPOoQpSCu40X8kx +tIsIihquALlL2nx7jPvBIpasKq9SRRg54VYp+5WQBVxUSAY9EsaRSuNrkTJTG88q +4WO5rHW3WFZOwfU2LGvjhz7SY+9H7B/A5aRuTuU9BkVnm5w9WtkS5pHU24WJ34MY +LESH1yE99OtvHuz5PwX1kcoYKdGnd6OeNkRLWl72GeTiU8bTJkB8SHx9Ol4kVTuH +fPsY/ekPh0rSuhj7L0kCTPJqU0+Xfl3rqWAKlpXLFzMKyIEhu9kGgGRAr7kB9ACL +ocX/IfJDcGRqP9cpBI04aA== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der new file mode 100644 index 0000000000000000000000000000000000000000..5a7c60fe590ee880278ade7eccfce546bcc15bd9 GIT binary patch literal 1312 zcmV+*1>gEGf(0BfP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UlC%Q{Y!e{4MB0{=p!!Yqp`4SQ-}}lNLuPKwhOY?4 zNglW(sA9M}h~_=5oZF#93sRm#*2yPC9uDw|YcQpYFOoKC&p$q=R#a)Yn*Y~BDjQ;i ztl!Rj%;X%O70|{{Jy3BrEE!5Phk^=SK$^5m1`c^)$7P!&w8b}nZ5vE}qvL1lZmvwv`y8B;S=UL> zp#b-&VoDtl$bAfs-#ugfavEEt`uf+&--8a*%{Tw7^MtF&DE&hv1Y zB#SWy(Y@HkuiN|T(JUSf7~a@&+}s8~Y*4^iw7kViBMZ*NE7zjTxNI|#@Tgh2x!TX! zxDy&XuvlX)NDh41tBC$?l!+{n(;v7;(fyuAN&kFctVSD)Y#L|jCe>XqK=yresc~Sg zry9JhHx94dW<|r{ZXwLA{lW|)+_h1LeARhVn0)scTU~2*7rm0M zCXn;#+nfmh+IQ0tkpFHsnMSWeSWPD3i0N0D%%AHXOAxVPR>H0(fNz(#{W$ew8oc7> z88W=rtj;XXJ+8+w(mo`E3h$=~`!Ap@eO*4m2I96#<75Wk9Cf{|e6dqGK1BwkT;mi@ zN=ba26A}HyQKuyDToTp#_rz3I&u{mxiw}FL!P_zzF){!BET`DK2lkze?DQAOI{nHG zo1M({SIN-61dN6!l)4f){?e$Ar?xi0(8>rsabWh1X{rsq z5BedQsX>-By{%>bzozQrMv)QJujxLL7WXy0Y+2F1LV^LrSGH3Lmf$ExGf)rjT7eTw zat0>n0yReol9_lmL)%T>?G6*UhJ;BNc~RHJHzKe2vw^upIpG zggLQu7)hglR)w`^@6^q4w-5;0X0K=&^^3fz%2_<0-4_cRedkp|TDC7kT<^YGDX3mx z+32gEGf(0BfP6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UlZEa)UBEJ>CE z0tf&w3?Q7#nW7FGvSTouMJ{j%o&M$T>MSs zcZ!}KIi?eAOU>j>jhQ-B z)5|mQ!lazCs=^k+D3vqvP+~eqLD>usN8+AtsRx1Eh9-b1;;LaMF@J!1`SKwjwD$}k zBavcAJo>=Gob)=s8a}gVLt2g+Gb$FtL#Xv$(4=EI>)I&CJ`9zE-LV-ESyN8*8OaIo zwqqAwd9HyRy(t>uVE!)ICFeuGuv85pAxbmwj0dVWIH9XVPkL9%AJY|Q5LBDG6D3xj zhEkl#Mx>gT{p|@#kk*ON$;RyJv zbv{ZNi>zQ5{fEI^_DL(5$EF0@Of7O}pckuaes>^)4hfqJ$uYdE%>me4t12uq6pucY zc}M|SAh=>oq$r@f1Ktn-3my0Mzs2H%^=XR@mblzl0;vs%K*woV2e^T^br#G3sO~A# z^xP8P)2%*-WmlhU18jmM4-; zwCnS}(s5Ar0otJi9kYaA^3nA}-IIO_O|Fj#o}P1R4RTNdaPEpW4D1E(jqx_S=_^Z~ z1xRRQ;C^dJyBe2ez8)o3Ww6r;<;>0AUsZ-3{Z~jNQY16v8o;bQsll|LI9!L8jnQ1K zD{4UTV>%|krENZ8FAl|)r{`%v>uJU%y+waN<75Q>-W&LpI{rbfs@Uli^TvJj6Iv+T%4ulpF)iwC24CHc7wvNa@lTBXjZ zZm!=29rkWP5hvaLYVz-8)w;A3X2ehykybmqcbAQus+S7xCI)_2h=oc~P_%EJ1Kjgw6&fFs?n^yoI5O{t=X221qT(*^eRevWi4dbG%Ai@) zpg*UP;FRi~PX~}gv`HpYj~zPxMYG($FKO|1*I$}&I^ikkkz(#qNwEfJ3;_J z;j>9IS1%OL%GPwCha`M}Fb-FzzjNxu5#gjhBFMgj%{wc4NV1l)cFR*0@pvu_;6Z1T Wb#3`U=?D9U1ao!fEa9LXbvP}kJ8Uxm literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem new file mode 100644 index 000000000..dd9897b3a --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQI9z8gVJbtqxwCAggA +MAwGCCqGSIb3DQILBQAwFAYIKoZIhvcNAwcECCQqQHRFeFdeBIIEyMJpY0A21GrC +pKBL07F7zOyuFIdwQT2f0wnL6lPWvUg02M2jlHCLDYlciCeUhE9fHUDA67814lvM +dlZ8KgCsp+2mqkoZB/hRvvS+ZdUqkwSI1J3Wt5hz4dKq0cebJWpDAcY/+031+zTU +9iCshfsWAGdlcAIBZOEXDwejNfIayp5cFKvQqg7kmED+KN71QmSVmVyKafh5m0SC +2Y3CoZTQ1982VImx4ZOfh+r86XNkrKLj3KYC1K6DR64Uwq2yLNoypTjdUig81ste +Dhqm+0YXVN4dxXCLF4desKWxN9v78VmCuHvYkRyunj9Q43GVp51cMQfFRBLWIqnB +OrT8k020lne0MxO1xju2sr3GWA4Wn6MLqrxSdfTq+P7ZYcSh2BchkDPslxi5gNPS +Hv5o28rkVW/K34UQw72Kur5JGMRNwJpye2rSPUbtLKb0z81nPzJMP+BCl9DttTr2 +zDkkn/AFBRuKH0uWrKv+9f7FDu4hxsdFFnLcD6kWlX/V37b5tYAcy9Atd7lykw8F +K8wAoYZHyzYaIR5otYV5XgjMcw+z9U+5t4ouXSYght88Y10Tq1IYnIx0I55KaV44 +uCdrptsKnXXWvIux8h8p/SUwvJOrECc/nYxyfS42diH3V3VGV78fw6n74nDOYnLK +ruIASg92TXUp3Qd8xdoiqdTfx8ZCgNy0mmrYycrP3cUciAYURuKWjjdTN++fk2Vx +Rw1KTFgTf0Z3dxEMIKDHHDiGUbO9cE8oEMWCv0YJ9n97suoIN3vOcifxG/93RE5M +1xe91IEY494/DdgsMqb0D4T0G5rbFHnNY8bTDKIDpvZKzcbnm9vnxPi7Q1S1kkJG +230apDz1Rln0AFO51SAVS8QoF5wP69cL9vrC5miVh3mwqkDVoHnLNpJrT1o/XcVR +Jl1j1t9lgFNJhVTltTPza4FydXRe2ZBCNKpDci1jFtD8KYZGOCc+PQtJ0Wtcx4qJ +KVGO52gUT+DSxmaKd+3RyG7MsDw1CPT8inHkACa2G+GGQvqukbjLppQDkvmUPkTa +fEotMYqnlvqznwiWURl962lyRJJsxClC6Q9R7Pe7pxohsthIHgZFMMuECenUdhYj +3TdqtKKdbShoF2SBnwYUVScH2VR2ZE8ZLlldNIA+WswG4x242NoemE76JC6DyUQN +WaxFLL813TmiLYtRq1QZsiqCqr2jRBMJA4cdCt4jMZXpLd8heviNtcPmf6uEpHV6 +VBQmun8dCQAUeCHKsrkOLnAcnrIl9gPlyR6qVAI8tnfs4IezjnvAh7+cN8cQ1AZw +xRvoAHJfR7GMT7Rp/GTLrSYU+swlnjrDLQ7DwZ6seOVyzmKo1zRjysQ7qF5m6ELp +hlu6ED1/VZZw2kSbv6BVzYmWHCGnuyl/n9zXImMR9vcM/uTogjc/38F4zBlSyz78 +wHy4EWMn2jWyRYYFfwwLvrxmU1IHkNUKYfaM6qeq7F8R7cqbZhZ1cCrAGcIhPrPy +ig7iEmTblRw+ARmY+cjUuJtbU/a38kEfCMIbKKnUg4vUnO6s2XCGG9TpmcLR1Ti/ +80tOsEuvg5ZJB3FFGHhSH1gDMAKQwCkcP4wbP/YhzBhq9WU24AA82RtOsFV4xjFV +ptyV+PmEpJl0DpDeIv0I+w== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des.der new file mode 100644 index 0000000000000000000000000000000000000000..c7c4c8dc1fab8d5e9a558674e4988694e7b90e6b GIT binary patch literal 1295 zcmV+q1@QVXf&~jOJq8IXhDe6@4FLrWFfcG11_>&LNQU&4g?5s@KZRuS2;ui z0tf&w5e5Y-4g&%Q1PF-jn=No@4_^d=1jx2=J1mx!PzTQNN9yM)+|bD0ki@B4RtF5J zrmA8(oMMx=TBST9adUugZ>z*2+NV+4_z{rP+C>OH7JF24nO zIvm8)Pp&wLA01Z=r)a8csI zs`T+k2NII}lvs->?m{%uRx=v>&&?VF5{%b33@ z2>=J1LSsRDU@0b6=6Sr&IyKgKc(fr+`!=t)4Y&k5{gXhGDdv%&UAQh|kH_+rt&k^F#z zB2Q&?rf#N}A8aU>l0V&4{kq06trV z07)FIx{cWYl(XaLR!bFg=Y4=&qtajC6^7g`s2XZWE)ESZLxn9H&eVHsE+gWa2`wEd zv`J09M#L&_hskgro^=#9NjTtn+KaU{hdFvCHaC^7f>kU~>EpPV^0vEfp<61Ns`BHY zx*RIdXMh{iD5aRW>mh$R*^|; zNAjuksxY?0^Py=gdrOrlCEOLmGN-e_PCZULT#|_|dQv7TDQSdwe8KiHeX39)5C|Hj zb_F(3x>--qTM!}LK~T0m5@~j}_AsJdo_N&Fj;5aPT^(gU<7x|KSfxf6waf!`pA9-K zuvVoDJL-1b_06XSt{_M@LZT+a_F46igQ*O)GCwW{PO>T?97MMhb8zVggWTgSGIp1p z1>MhajPQ>D|1@)4>>xfF@D8HTl|Kg0K3CzZI1fC!{oI*t~7pE4#;Ai{dtK zNU=?`PG1RKh4ec4p9JF zBh0bsw-o@QBQ*Favk!<;yVUsW4xw1dU8vkgU7~R=o~?)W`G7-<5THD)LRN&6O$_Ur-m%z5c7Er*e`K_-SE?3ca881|VCco8M- zjFK)U7?0!~qU-&rr)Zu#TNjkP^pbq3J7B$qt0Bu2W{_|T?rhr9WgX;f0h*WJf(02cO9lxlhDe6@4FLrWFg`FT1_>&LNQU&90Ukd<|>*gFq+f? z0tf&w3aL~@X%DZ6N zP*KA2!@$u20EKj011qhd)gn9IKhN+?3c~_}jfE=7_7<_ygXt~RWA{y^XHmauOn3K0 zrXj}9@bg6Ggpg~dN8H#_rJ7G3VO`yM7bZ~n7K5MB2Sln7Q8~ZsJBxZVBLC)3XJL}L zpTDE=34pJ&P!-2W9lEUPaDKKD7#tD1ANC@J(ZV@b2=PC9Z>Wpzii=S5f zO98X3IPwx%ms0<%o%Y^v_zQA3)6ugpv&rXno3g8-9-ma^Yr1?}1{j~Wk5;~#-F467 zr5^`U7J0C7gDPNy93E_pYx9T+aN8Q;h(&fX>IZoL@m`4QEgC*@_zaiE-D1>BvX=^F z8SgsOoFE$xU%=oU|MQ+_Ljd%3FmHIKS!Tb%Jt@yD@Fp0reIXp@M4m`G7pm zzPwq=YhEGOldcHx-pq<;n8-YvB*2ub^|BnE+K)m1pqTv&7&>**LC85)5poj=x(a~n zJ<0|2V73CIBhK1X2d0>Xkff2>Gordd=8C}=+GC+NX0Jkq-hTv~hvH9pQ-yCSE7lww z1DU10CT2b+TxBr&|4uThr4G5sGy9hnaEP#J+Mne9AWk`$2@d0c za?1g2PCB*VM4yhY(O7mjYkgBa#B{19y?iUFVa?|!xv!A^AzxViOu)&G)z_bhLFxVH zK`qR6c0|;GULiWjvq(q1^?n3ppX#Tw(@|$w_Dlpf;`7h3*kLb)7e3{wJFl<+p?R#n zrToXD!y*iuYZ7-bQ literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem new file mode 100644 index 000000000..af4c4132c --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFGTBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQI/++dnhs4VZYCAggA +MAwGCCqGSIb3DQIIBQAwEQYFKw4DAgcECI5DLMkayM1pBIIEyEJHtZlUPIPn6DB6 +Z017kFJdaF29AqSatT5tukN862+b+0bGwoda5aR5lr4edgmmwMhR+1pTewsWyZK1 +xCYHwn0Jna1HXKRLfsoNdKCFPyvJkx9OdbNfop2uqbS/vrsriMKMloKV1KXUGqCI +zZ7BVEgfgH4hZu7cX5HH0tMw2/CzrC5OjMhFq/OyRe4retfACxN34WVAqMM4/N0S +S0ciNYR4C3vKu5+Nfk4R3GGMmmz1WejkYH0QMXFtq9IU8vbMUhAaBXIo7xwkAbQA +UJF5lurXLJELCIR1KQVEjfYCXViH2ZbhAZuk2BV0B8qIKhh9GhvL+y2nporiEhN4 +ddE7PdAmZPgi9vJ34+jY8E2UiXpXDkSr/8LpLRVQ/UISttARVkW49cOQ7oOV9hOB +R+0K9fyZWAJI7cZQSsuIPSO5DwDkXclWUFYaa9C0BcHRaz8ACkHu2vSF94LwG1th +WBvVvm9kTqznq2tNoAk18b4RKN2nVUkfhBJeR2GaJhzsshnpTo356kYNKpSUIm+S +4bg087Zovrsf0C+49mr+9uGNbDQ2EfG2BJ31faBJ4bwRNata7l3FvqlMLBFJEpUf +l2EIlr4qX9wfF9OnkmT0gGuuxwB9njCpe7XHbvjmvKalo9s9iP1z5rd9f6UPzDQh +XdV9pooBusM2Z/VjkrUxRdyurlewD+UQn2MLiRF7t4Rgx5+4g6nooIQlcV49JhEP +4Of5uDkWzHQ4G6TbffU/sd7THcwTp5wTot0BT2IPuP6qgLFRSQYwx5zplraVfTOm +GmXD8Y0I8DP3bymMVSuJWFQrSL/8X5b3snOhzF1J9o21NqetXY+YkGIZPfL80jUm +7ZRSsjz7A4M3MGhsD2i/gwGAUdkJ0kacdnBYCZjfvhEiMtyJhrtpRDT7pSFHCN4z +jCok/m94d+mPXcI7dSCfQ+4FUSMXDX6IKv7ivsoJ8wqI3YiR9cHdK+EZLWPKb0xE +I9Y1H93K9pQFlew3U7TzoFEJcee0JHlyM7JGShPQP/mPEoPsHTRoGjYwYp8OHEol +GAjRutyMS5/pEL3zqT0nWsr8rEEwtm8tpPKuMclPt/p2LCpVBVgTpuVF/Hfnr8Ab +teL2bpC/D0W0OOOMU3MlfU822vlm1gC5Yh+I/+b3jsgd4xH84PZUBGDLO5+Wrslw +f5BPuO/DHADonB+DeGqwSFol7zxqYWufdI1jb1YE5pWV7dO2e0vTD7463o6V907+ +Zfc4k7h5ohS/W+RGQDBM5lplssWcOPK5Rx8LpP/vXHFp6+EPnGJTFBg6I4fUYAZK +HbJAnLkjWjfy7F4AEBkx8jBjYyDqNx3r4WLMU5ds06C5nzG0usTpAtoJk6k3G/Hr +l/jMr/za+6TrtXyNBDGpZohgxP0wT4+hAMyLGymYnSWFlRVkkf0BANbtcJBszbAZ +EvNvJaCecjVw2ZsnLo+rapA5V87wR6Rzpc5Yh6IxLQs/pNOcl8S9HhC+EzwcErLk +J1LB5piJy64kLmzxC/wmJYvR5hY8GjMU8Q8cHOD5SVk0B87SOCt9LHuskl8j5/3/ +tLEjJ4T6nHSf8swXl4B2e0td8/5Cf6mnyqiuOyQK1yGhMjXbi6taYaxb2fNHBV68 +d6QDbGs8iCwGsp6ssw== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der new file mode 100644 index 0000000000000000000000000000000000000000..e25b4fb9c308623d9c7bdb0b8bebb48501c6be46 GIT binary patch literal 1309 zcmV+&1>*WJf(02cO9lxlhDe6@4FLrWFg`FT1_>&LNQU&90Ulvi-eaBbXR%; z0tf&w3$K-B+F7cPWJD#?kWM*0`QxfEuJ=Z*u zC|lSMhVlY3Hn5v4*j}cM!PAx_5X3+D^h~1I0wJ##K?D}rnyNX*;Woy zm{sf;2>xr&cKE*%SzL~p`^1&0QVy1gzGJaJu$kM~j5xYDmOy07RHcHY=DlgENR?JS zn*N2@ks4L+r-%qLXI6|v^-_8DU-Wi1zO~P+*>vxFPq+sLr^M|utY-U(oh_Q$&QUd(h?*Tsu?7?y1C?DVtE(j85j@SzBbl*`Q6)zw5RoZD-M z!=PWIP~acCJU?y(9Fq!{AKtqi>U~m94P~v%u6QCdMtr#JU>x1O8KOn$-TKYl)>&3NG@$p=5-@&=JWhYCQ`kIQz z*EE{X^ug#30AM%0(ARhq(sv1pVsXEhU zT$306K}H$MTB*+QKBoEiG3yPFvCoh+hXs*}ZD6W!<-dia6~q;f>LoZ9*h1znHYd== z>fNa&m-*^rh&A4V_$8`!!6UdWa^MmxM%q*X=TL^mY{Z_^ T$p#g`9VgTVL$n0dF>&=Da_4?b literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem new file mode 100644 index 000000000..717d3ffb6 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFGTBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIkkRHl74lgxACAggA +MAwGCCqGSIb3DQIJBQAwEQYFKw4DAgcECAGUDJYAr+n6BIIEyOthlgMNgyfjvQd8 +ZqQYF52juYrlvEdk/NY2xlEfa7NKUdEBS6jvL0lHOaCcn0dRbykqs+Do9yiWsW2A +cQ5BLrie7C/IeZSaF90Dh90QUe/aFvE/1fBjwuSdLj6Rf12MRXxtyCJb0WkStrUB +Rgb6ReGUiUVz7fJu0ePZeNKqVtCa+LDenaUaqo82L7y05KLoQP+qrQb94UK2B6IS +xUSORehQZnf6dpoXHMS5CFCv4Lw/C2VusBIZnAhEVWm3MljxMycOJz27YMLXiczj +H//rm8BhZQ5X2jYTvo8S0BPgRXPnxasvIAYLbAFvK3KP0umX7THVoYsXpwBgphS3 +penm9HExXsyYLNbefq9jPL4LlatNDi2LAg1QOr30jxGC73xESbYsM1WYIB24RSNL +ZKyhINxxsqcSkvuce5dtShWXkqD7P0nUNzygT1uSD4AJEKOaDL/YtA4dsTt/LCT7 +Ct8w9TR2+QkQdxgZri1S9+jSmPQgcg0BobPMncysTjTyC59Oh9KPcJCThR4BXitz +cvocqt1CsiKiMGR51xHfMs+p06DwTTz2LRYiLdXco72D57O4lixOk5LqXF0qiBfV +mN7LTqBIvuYiK9aEBZ53HRRurAhrOWBJ/UxM/VYi+lyCAUBhRu9XI02g0HA2UrlX +9RnuB/a44Ce5mgQWdEYdQIkI7JB0Kj05ktWdiXeLCPtTG0ytfQ0Cv/EwbWCG2tu6 +PEEmayz3KqMR/Av9jqsnk2qU7kKqR7hySMfoTuaMGpjcxCpj3Lg6Tmo0Nrvn5svc +NNChDlrgwyp4dX5ub1bwYYzibG8x23+fKKkil7NqZ3gqZ5ecmgX5XiU6VdBCz2kJ +k1xGGiyt89+gDdmoc+HyjRTJgfChZWiI6EhV3LZOnMa0ZUpQiM4lmq0SlQ78zSmY +ZyqG9dSEFWg6BMrOUpZbuY63wjvrxSHrHLAbCTlI9BRkFhmfwiyJ90FfMBUjBt6w +yCPW2r5aFPIhngNS3EayJKhAwchGHN2XdfeDj9GFhWZAIQsXS8R7JuGDIug7+QMj +WL77m1jy0K4PiGf3lt7PVy8KOqbiOHyzYQsuAuuMD7NZdV4+dVzznTe3HbXLWtxj +itPFNuSudfFBotAWDV2yOF4B7XbcTw4CEGv9bVJoGatJdaubzidUHPJUozWYQX8K +cw0LqdR8yxMtHOc9FYyawLbQMzcMzt/lijS75iO+vspT9TYXxf9rC5yX8xlSHHa0 +jlgvjnTDyEsrUnGHk9kNe906GV42YDO9MUJPvUmlv6/bAKA5iWX2+Jo5rwIWk6sg +vW33g7NPMn0I0pwzaWDaLd1XNP3JpjODwkL/5n9F2x1+LsbPpuk48DOnXQi7MV0J +2ZWSSxZltTLpObG8mI4dWrh5DXeswJIIta4ki1lSyFLu+hMY+PUVozyd6GVd4T0o +cVepNU1rHqxvsLHVkMsixypHpZwnkQigrE8EYeuMZQKPq7luHwh1AkTASr3SJF0/ +uztq0vmtn/0+lg7rI0pW+oFAlscmcRMrcOCLaX/TkvgX1JvO5lspIjP6IdaXsYNJ +14GImtXxQaPgAtWJ48o/AzF8KPez98DfnmpXKBM0K/kK5OGuxHvNCJ3eTDYS6X8I +Sj6Qf6Z9cjwB2xRFkw== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der new file mode 100644 index 0000000000000000000000000000000000000000..6674c48a7ccdf918b248467c985a132cc019cc43 GIT binary patch literal 1309 zcmV+&1>*WJf(02cO9lxlhDe6@4FLrWFg`FT1_>&LNQU&90Ul&C~s*CLpu5b z0tf&w3`RdZJiQq1TSxeJ`1`tPC44q1#n zB4Ikf2R#QptSWJb{k~?9`?v9r=A6Y@SGm6wUAVI`=w)GOvpv5zzDqXi7r*5`j2mCI z2W{&nMa!N?dv0=htZ&CVoB_mTIW9?Z^W&hlq1WC1qJ<1$Dox$Th<}9#=TwZFDSVxfFqAkNy4$=0> zUA>azHFB{G{%zP~lZ*x5d-WCF(pXMp)|{m#U&=h(dAH z6ap!#3j#&@Rk!R2LNq+b!Dq1y3p@o$^Gw%`!Ou8vCSLa{zA93cix>}bdx-Znna zcBbSb!7XJLV(S{B+OR*ST2`copwC=$K_Mwy^h7%=sTr?sv6`Rwb2*^M+W=L~7?xC( zdYKroHA?SZ4E(4f?PrhwH^~d%8QAV(mU~;oD`6Ac>Iu-LREEUB}=6gXb;s>kZHsVWbHH?1J~r_?R1D>!h;4;Be@#2c2_<95#Kc@V#}x)iz?jEv|W> z`PT7i3zNSk+=i}kA$dRo5bn5cu|nHrttz`BN#ex@!xsJ3oslZ>@}Q}|M^37`wO=+K zJW^2-hsj=n3K>D@`ETj22xlmI`ksht4+YF?s#rV5z?&v(!Q1A`w@IlN5>7JzJ7*O8 z=&|77E`;(a=iShPpcRXJro1qdk+v$`>_O}B%Jta#h<@$-1ZZ`&)YHHxa(etD8!wRr z42#&%_`$iuJO7oJTOQzKbiB+xPe%fF)!6fIZLj^up4+}JIOlU-TK@Z|9(h{ZX1jWt zt7i{?Bm5=g?)ldWBg$jPug{-ngz%6Id6X0ScAQvH{69+w|I|aB%hvGb!dP*^dxktQ zSbB!qARZp;Ygqp1CNSA{(|+f4{{%z?0Xr)6ik>uT@NS_|;Dd)NE2nS4a7dl8bim!*WJf(02cO9lxlhDe6@4FLrWFg`FT1_>&LNQU&90Ul=q}f&OAA`jL z0tf&w39@EMx|aB7s_f z^JOy=u`ZcrMG9{?H&S)V<3~%sIblXjGf*k_RzbvNiUDYMFEcg{JI9A|tHT1v;vTxB^ z?+56}D_*G>dbXDTn2Ae$hg2R?36*cDQ!*iI&!Nwdh%s8l6v374{7i7EW0{3tQKlR; zJPM&dF7p)UH7w>GT&pai!4;7N+7(z;Lb#~oVCZsM=hotiA%;EFxmx4hYyNP9V9V20 zZ2IZ&ypmP)vmc%yv@1ka$8%axQ=qLgYZAUM#AVh)*vc;U%$g8>L=lFPQa0q(-EY6J^Cfg8A9Umyz>Xay%$_6w|$%5Bj>?h;c4bX<^P^}S-bakIzSn% zw=xp8#RT&N`7+-q|5QI3Cx=)1uIb%QA;Y*Chj}Y4oEr~@g-3APvtzSYp9=(<>hg(_A{Tp*{Cc-x~di~+6 zzXe2OeJA`^WUVS=yy1Y04F{e-6I_PJpfsiq9nX!2o<)P6uNGfL*ekEaEg`>P!HPUi z7gcY$F<%CmWgyznwjob-zzC`;+kqrn@satUiRF)Y2`D+QNFS4L2;j*Syi0ay7o_-P z8Ja#No+#IU?(g{hn$)4GhBKv;%hI_gL#g(N zFP}SDckbc}jmx#=4eUtDP%r+n>T&)=2V%=^*j34Ofv@e14-*V^5xh+Q$|q@uC_O^& zcLmB;t|S53wbcWqrQx(c+y8H@5&TmU_gMR02xz{R5Ozg11PA#cO0J00V?Pf8V&n;J z-HfOjv>ZYe@=h)))li=vDGdHwN+h?K7MUZ3CV(tq;$!oSvrKYQNMA{blk=X|HU%W! z8UCiX4@L8jsdhL3rYjN;(UItQi*(0_^>;?w5Oaq#Z3=KwN8llY=sW1u-4~7po;a^o z=s%BOtLLc9@%{$00&3+FE5$_k@=nzuDt!cCm_|u{DWYBGj7H-{D(> TNEhrykb)NZ27EFE-xwT~zU6qK literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem new file mode 100644 index 000000000..15521d435 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFGTBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIzK6kx/qbJD8CAggA +MAwGCCqGSIb3DQILBQAwEQYFKw4DAgcECD74OAvJ1+LsBIIEyOekZ0qcxeX6hEYZ +4ONCHu41tmOKSvByGeUBZvenjJQ48AgTGYUXNoYri1ohnbQ3bcqiP0TUDfT4zRcQ +ZFZLuzAtwV8ZfZcYRCQ7kKxGfkciZJhjeHeuBy3moEbznzg9TEPCVzoOD+k3f6+W +7/bSycV7jk89CdaWU3FKU/W/RLZarpm99Uzat0Ecc2KOa/TckNTBvD9Ysj2j3D7Y +UmdmfUGORvwQhJG0mwv7OpkLFbFbYBehWp8/Fk5izJVdJs+77c2qiQvgeend1D41 +ZUBKtbKCoc3Inp83cSkl2XonncCUxBKLiWHAzZxhPiIHwZXGXHjCOUqbs/sXEogs +3HT5PHVQjqPGIbl5B8NYetelB1h1Udq4Py1VZqjLhZFH8q2SnjRxC9to4bXaiW9N +451NL5S8bJrcaun6E5cD74p32F8IOjR2Ojr3ofEFHQFVUFlLPY3gQ+IZs34hQBNR +QY75ffQDykZPBpLw0hIJkr1LoYfuEMdN0tPRRxYVO1lKAW0xbOAd0UEslFcsyXCY +oUnQP50nVpG44TI6bNfLj5y07EyMFo6vB/XiDXh9/Az8jIfsPeYOGIVMYFSnourw +3cjTPFrJnEQd8CHxjLLnB3ZeXIo4l03hZBy+qFOIF2Ezke0fmRtjO+OUVm8lAy2Z +J1wSTThBlsWX2/JOzh7kiWDipX0fN8sTGeepazxI8nNANX7ALcxwuLrjvPOmTxfX +ElpwebOvCxonwWR0C1gyZ0feOI8kh0dKwe0xi2fqxCwxWzPxN3EQZ+FtoUdtzPoF +7QRBFERPefUpO6214t1PgJMWvLjjCsOFy4tnF46nWI/r1XLOQlLP5cwAIXZlnSXz +ky6YqPm2OniXq5XqvyLOMy1RoLINJY1dhgBXFtC5I1ZQAmGJGmX9IxVjrRky9kKt +362X98edUUMMmW48L8RcyYOOVLpFewAmU/fr3qoUDjusOtC8O66J/V4vjI3G8Ve9 +kNLiPxQqbyfHHdbC2Pp6rXZXcl7L5FW/fc2YaZRqCuFpuGXZQ+SKrMXKY8oLa4tL +Emf4isvdlRQjuveXoebxPsoG9Ww3pz3nl7NQ40cnSxb1zxm/heQmAczPE0faDsOi +pGAQP7jAefh2XwJ6RWRqzyuA3bDWC7E4ASYODIJ1IAogMMOlg940hlmCXZ/8993C +aTncCQO10ibemZsWvD/X2+gL3LSgBi2Q6NjHqj4MPAe6yAOA2USc1GzwSW4WEpIg ++ttJpKZFnnnxzCfUU+pTz2ONGV7J5a50BiRLgslPawm0lbYl2BvjbSZJul9oqqy/ +7FI5Jy83OaHrqyMSRNKZbkPWy58zrhQNaiUaCrLE3C+hzj1k9BXrWm39AQM7olnp +T0yi7pivXYEff0/d8tClqQAzy0DnKEW58xQODxhFkZm70X0HkUABD3QObHb2DSjG +PE1XV9pXP/3pci+SFznuvn0p6CN3l+rIXW+pb6O4KW65go0LTo1evIuKTFjVtZyf +KqbgDrdu/Fd0KJJy7S2cg/i02x7TfcSJE8C3EDyyESpGegE8XAH2NEltO1yt0+/z +26d06Hr2livL87yVpzW8b4H1SlifZmPhy082InF65W1w4hAmmsWARfPmZUG0LWoG +6zRPj13ojxpLPr8kyw== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.der new file mode 100644 index 0000000000000000000000000000000000000000..bca2ff8cbdf8684d8d422334b3aea2962e10a135 GIT binary patch literal 2450 zcmV;D32pW;f(ec=Kn4jahDe6@4FLrWFf%Y41_>&LNQU&4g?6?>4JY~sOnP! z0tf&w6b1+?hDe6@4Fd-R2%F%?-B>|LQv`wuNc7d1rV&)LY#6Y0*fxI#O4HF9_c=j6 z9l5MyN#N8TXD+Z1{)gTL(DE28B)jSxpM_EjG=nDny*-O-1q4}i-LL`Zl-7$tDDJat zCbaK5{=e)G3JZifgHY~nd(;9j>Y-e*mbUe^tp{HECfw8Lf8-=ITM3&LcnH`Al*#vQ zYk|v&IzH?JVBlLGX$Q0d@re9@7~SDi;Eu!ko%bfsQECB94PwVxw&wfE2feESJ%!c- zmnT$%1p$Z16ik{jnpYD4K6w5nL?Zs2GA-2!4t_;D zBaV=0(-qOR^y3C-Ibih4_{9=zLFhmcTKpc8F zn!9m2QkN2GSg72hD9onIp~Ru#4fao-0t|cg(Jlp|wv-wJ&~6Z{y3{faE7Nw$eG(vD zQ}ew=K!D#2S1Pkw^U5?jETW0UY0T*uiZOih?MP+C$#RYt6!Y5Dy&nV6k*lTI1x*rt zAX4e9)ye?qkbRpRfBrB}v_B^#+JEDcux>ldFFZ9TYCg32rIlz&@MMeArMB4O9^K9M zHYX7tXCP`dO9Coc@zpRz7Zm1VZ`}5VjO5IA$@s2-u7Su&qG4TqMK+f7()SAY%xZ@T z(IJ;fzvM1@6w8LvZpZaWqg>;2I>cZyk^VfCaYHtaVl1P^e;H7FTS+uH3rPPwXmPU< zdn)NqBYIj3kk&qqL+F%*`-8Ro0qy$$w}7mV4xayNw=d4>hbDp;vW0K|ZJiIfsHmeY ziNoc*GLe z{8%XJ5M}a=@r&H{; zdO^^6AX({h%bdII_j)5haYlqhwbVC)lv!TS>F^7PwTyVTsC6|;!4K)G;Y$!vYe%dC zT(K_=pqHYA3$Wb=FAd`DKV_;PM(M_Nw+d*^5i=~81&Lc+!_497<|pi)G&a;F8GA^0 zcm6H~ZOMyLKE5SApHqhb+F?h8_QndrJiCs~y?M$2p8!M7&3P&4k&&lj9k%>qTK1dW zxCHu~>NYH|mjNs-dDII6n9^;>J!#aS0#R0LxJ9xHkPxV+0YDUp8IfXXc1e9Rn2=8db9V=uqN1lr_2i|n;rlx^ypp|CVuOJ~At z8s8yCp9&b0qn-|LdYYnpOs?;M9r$es1bvpqGEWYJA`L?+)6b7lioiwp=Io0h+tjjc zqe-c_0?;e6zKEV&Sts1NQw5YF{Ribi!*bx!y^{TzXSV~q@|V{<_NUk0rI?my#W<>v;3g@k&k z=dnt&SV^u2il$PsYX6jAO|c}^tjYG@I8kLN4{Y5u5%Ry(G~qgpP`g%~K%!7l{X3(E z@uJwj)qb$9jN%@TZ{LluzqU+H6pMP24+;Ti|x&H65_vKFc5@K>}7fIC)?Le3%wK?9jf8vcv9 zYyb#ZrXeQwm90^X_;<6%*=tAYm!+F-vO_cFc-VWaZ(w&=YPs{9Gbo(6F3PnPgajoB zC?dZP&LKTJV(nZ&*yPXK8gk~Z(OM}{_nx*OHS*K=Z`hWZ z@NnYCwDgHG#LWC4MtuszcXPjYZBK0Vr4FG;2x_Y89FJ4tJ@756witJiJMvbrz;;;QnSAt04AUS#5rcd zjc`7-l*7~(914D|^E;Q@iRrB*A&^{z=36d){pZWrzp5XB>?1G3nJsX zj!R>cd@nobPEg79ga`ylM%Xov6l>kuOu{77Nh5AdC{z@fW#1&KJX{r4XULT{t^B}L z~XDU$UFa+Hsu{B5Ty%%Ghj@pma!GkQr@8erEL+P;IiA%{->G z&AwKZD@Kg;nL)_ZE|6*ZUK(hxlktZ(9gpr%hLH!65S)7<{jCV>mxnJPA-vAawJNn z@qGty2#{CejmmfcZ#}mUN{UbaF-FohurP;rjt4@m*v=8SeH2A4nThpV%%g?z z{~6a-b?d=6&v9r+xO)8}LkWp_cucv<&0eKrelW+W^sLVEqCtJ47%woCw2O?RZiaPk zX#}D%5Q+yOEI4!KY5!x)24p>0;EVH@nD;kLccn#Q9we Q_FbR0{-)2QG5^wEFPiwO2mk;8 literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem new file mode 100644 index 000000000..c5113e713 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem @@ -0,0 +1,54 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIJjjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIRkUpAqxZvr4CAggA +MBQGCCqGSIb3DQMHBAjFyO62L4EIxwSCCUgDa+4NxmT4wXuKjxhe0+FV2qY41npE +e6jBLdDQuqtSlB4M9A+AVtKWi1sncYzV8FLtPofX25HCciByddYaxsYFtVdmaY1p +ckl9kBU2JIEZ9kvfBxcuHEVeesbvws4hJMO3ADf5CPS+vivEpYt4W6VUANZJTGwD +jA3QBIjSdJlC4ievdcxOn0mUc8Y7X+RMmAhEV778vQoTMaoYKOpAa5aQsL5eN392 +GRexE5rzhI+jSctBnGL1t8IhUbceBnLjAIDRyNrQFnDypzAMrV/Wqtvf3H8o7m/G +3YGSuGa4LbR32PAkT9MrZLIoaKBGxPu64UvxfBFm5RIubtrIgpQXHo5m84Jpwef4 +fD/0argZoh1DSlP/LMJ2s/Rhz6fM4bXohtpPJCqo55FLxjhfBrA180SNXwOWbUtp +wsR5qIhy78REHGHjm7ClQBvy7zr20yFJn0+XGFF58W2+GTKstOg6o+L64Ad5byei +VE0SxPhFUamiY2HGmLpBdbl7Rb5El57GJY6cDl9JRgLPoVZf0eYzScv58n1oLT4p +jHkLZgi7RkoLf9SAyR+Pq8dg+j7b7KLVy3fgIPJxmqERm8kqU4KKs1G5oSmD0wI3 +YVWCB9knPTU7VFnvBvDxmD+02uY5lcKCHIllLSZNWJFjtsYU6MJcLC+6dBDHokF5 +76/h5g7oe++YJjut759NqxeKWpXyJLbHgPT9W0+Q2bODItERHF2d3abGDuo4oY/I +28+ihesssWEfkRx4s7wY8KkbsT6FCXfR4uTxuYYeygsmN7F6rQhM97ErGeH9LtmW +JNq6A/RCZaA4rYiAUzpIFZ8x61EhoQtuSgs8EBJo2W7JSJc35zaMFb6oL0Qqkq3w +rMHlBXlTlf0phppJQxrEPqfCPfqdtAJVLk1SxpfW2RgQH0Gbl/VYbK3Fdu2kdnYA +my3uuOqT5k5vG2rdBkvIZWMqB97CWQNBZmiV8hUYjqIJ4HipCY3ZTtnXIipQVS8M +lnVFc+7nSTkzAQ5/RrTBAguiD+b4CvY0H+CVIp5FgaMuo2BaviqqLN8Nx2fUvCGl +7KsXhWjztJgKPbLubUu2UcmOh4QaTrFQ7Lb+/yt3HHzaUWLV/I4hdOgH3VNdTDbh +Y6+55ayW/gXzODhI21bDWRBa6RCyffRtYx+4fccpAz4mz58ho7QyvOoKnVzb6Len +EAAAPJctuwMbY+thu2mBOICn+fni/AMTqTggY37Mk4BAi0641F/6RkujGlz9/2FA +GFifDO/VSWO9OprlmYCr0HuuGdMaHB+VTEj5j+cwpJ5imUhQHaN1Q3masJmD+sdH +27Du/O164hIdblbvUsS+9v3l+EgMbHqC61RQbBuNzs/1slxTz7uO61a5Snu8XYWP +pibxyCaGznvyunCZGTiWuHNYR8OnEJAM4O/wU4ThCzb+fxKDMchs1LG0ptw54L/B +86oMiScXlkCbdl9fjPRuHTuWBqFDm0Lz77POyXzJFpre2XDbQeSQyTzZFeAOFeGy +P4mrLDMvxsrUU8U3EGeQtTvdiFjNS3Ba6k/VN7qjkBcETQHEmmOnO7EVDn9csybm +q+voR7JpokjD2YKCp2MwUUO+rjuTl8LYxUPrmpofY0yH2c+0OqHA6txszkEXgGbz +oXrgFKZqSM+kFGpaRCIPjkulCdC6IB9i0Qu8w1hCMVUPIN5HFoCkP+JC5jzdz08p +s8m2ZgkVmcZQCmtq0IaRQH2nPS1n2V2dbEd12r4exfxXiiU7GZ42jszfopEhF2wl +GCIjc/joTLGZ2M28tGVFDIg+kuCLiB/C97Uf3WGDTmDfqOY2aBfHcJ97rCHIyxpH +ZVnn94IBvanuoA1DZvEs8tmG4dG/QPhstTVcYZg9wALzOURXZix2zRJca937sEoO +PpVXOj5509lrQwOtbizl3zUcJNT9GJBYWQTpceNVY/1JhB6EKfnZ+Am+qVD8/rjg +1ei/jndWOmX628CGuqhCPT7VUnC/0H4oIvYnf+QJlNqv6sbhStw/VPNpMzDiOhnN +Kl/1aGktHth+IFdzTpmqFbRIxLkvvrAzjxLRGfOnH2N5V+sWBudq6PsQ38QbpdEd +WlF37Xdq74wpQKmX165eE10hd42DJkDORPUycpVTr3y0zDVUjnu5Bo2xi2AZqBoH +aylv9hae26ZYLzp2RmAQFkEFxcpuqUvuJq4MtCxmvXivttrBRqaFmBKojxJyOOon +JQQo6aiof1Zd3inx7Prao/aWI77R/vdaS/j1IWqyOFu5BMi3tkdL7yAxLq/e5cbX +KF+bJAvKvdjV48cPyMQ4i+SiJQtFBEj5l7ynrJ2XaOCh2jhxwyLJHG9/qGU5dF0M +YuD4OY8gTxZDpi1jTU5Q6WUqaQBTUrLQqWXEhDLhyHe+f1mqb6IfAfrW8X/Kbp19 +KeOmyOESPIrfz75yG/nQ3IpEk4ufOmNwA9kXYveZOYtFNfZJcjYMIlC37ypg8+Ly +dzvLpx8xuOplz8aMHtNLojkKKoKpc4KYZ+QZzj9FOB6r0mvc9Sqj2A3xFgntnZal +soJwZmaonKT3kRQxDZ3woU+JDfw2Sdg0Fb0jWvoyPcYdnQoExR7uF9Q9O262oAPg +r8g5UNtcKXpGz1x2/IfVNUQwIQfmz1Slty61ed7l+qNcd51jK9RAW8HGbx8Blukn +izE152He9hrM6XhO3h3WaSw7qx7//5n+VNV0yqp3rQnQDr6V+zcfjgRiNWITXkHg +a2Xvju81h5zT/RJD9jon3PBg88effiBF01UD+DxENNsJ2WKtc70HvhRgZoI6/e5b +04YX6HBLSwdbUCLoiXFbXDFtRE0Krmba0tU/i0eRgzUipPDrQQUNt/6x3a7Ks48A +OC3/EDfcCYzu12W9h0TR09YlfiNJnalxGSU2CgzdxWhXvqxu5lfswIgj6c759RnD +v6676NRTlS6J+wn4S0ShNon1D/9siAGkLbhRKBc9TjRhxSGwHLRFYSbRD0ql0RLZ +/8kIlsKSmX/wJo1k9g3MwEN+SddRkbFZwjgZy4vgTQhrH6r4WQzCUXcO9F1i4Acw +rnMmV9fUJ/IZ22snbGny6yaBa5T9RcvPpCW81PXeFBZo0cK9xrs0t5eRqwmyKTpF +FpldzwRoyFRjDnGVACMo/X1eaCwvew+1M8fcSs1p+qrBfrfRiI4tg8bNrYdL/0u1 +RoE= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der new file mode 100644 index 0000000000000000000000000000000000000000..52ac321438292452b55de644c0893a40c4027c22 GIT binary patch literal 2464 zcmV;R319Xwf(e{3P6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UklbL~GWDau;{ z0tf&w3zf#JzW08QCe!zTM}0hvt-dVemYKeS*}+4Pf-99hgW*VS{j>!`s}UPPazuLYAkHk0 zILr@FnOj&vzVzQjdzQ@ z@fL7i4OAR%Vbflzi~)ImbHci-UwVS`ii)wW05t}MP@MxY_XyGXvBwF$emCEM{6bnE zjIiac2WhC;wExm$p7_BOPCQoqrLX~RkH0sKgf z{+J$5=LLmYFxW-hc^u!c&v#XCGp-cx7y#D;4NIB}RnHHdg5^Hjs2Q;2-vacONU$Ks zzP&6uD{QEbIAv$BCjUjjEEHdnqFXBoPn@=oPJ+A z^#VPmGiWA9e)b(qaOdBjncsedb(ad60h%yh6}RNM(5+__N6zIi z1;pBx6==3|7K}+3h3+LT5%#Q9pZpkuhM=9b(BsO14O}Czm{mj@f>BCh%POzPA9Y`! zTGbQwMc}0js(OTbyt6#!cuov~UVwD(hx*I)1?L{*K7)M^Y0xByZimF?Iy>X<_GHbN zK0y7(XI7i)#?=#G?1FemmDym2Tr|^v zni3PE8gQ2=?*-c@ToUQ**DGpxy+PZdCTQOYD=AFUcEj?J(R6KB@~j7S*FH~Tmj+Vg zdQUVe0G~8Zbc%?(!+NLin*)Z^kg1U_C@tfZ8{;}q(u z!YmUx`lxB9{EA5#Qm9?)5+^QoYyb_(B<2-F<%FuGC3%KGQmvcwazE-2{8<~J^`;p! z47S966~#RE#c1T!h;yI$K3@xbY-muv{~ixHEvAxb815HjxZBa(gQS*$&1K|VPBsR-KcYZt!f(K;3q%p zywGn5YY`%)Ym5NL$0~}W+kJ***=x2yFSR-~DPWiitJMRQ6SU&yWes_?@i?hGiv@v0 zI3ULah(n98eRi!@La3$E)-gAXF|o`fxkZ$<-8vUKhY+{f9C*cBiYr5drB~9o+>TjG zBH&aoljO2G7c=C_hnmgm!=k?%d9=74Vxku1kO9d@qgJt#iDp$eD{rUHY5ow6(G`FA zy0u@cwpRK}r{Uu}a!prlL~)q+`eLb^tKF@MIv1@OVlKKP2-zMy8a-WNLCs+|7<-?y zN#yo~M({67a7As?eCv;;5OZ@N#2C%W0RH#K2QeIZUV+1|&7?Ft!^(@(5MG!NTogj; zz$gF}B_r5$ZAAIf!2&`izQ?_Ikh}NVU)5*oGu#i_Gx%uRX?mTw~~UecHos#EO|b>Q-=QkU7!dNr!zGpW}3izmpL=eUvN<1kBEoyEhJDG zxseHOa2L3neHFTdhTg{?v>6*v-Qal(2g`^>@~SaTq?h|=#-{WBm8c7f{%cP|`F#!^ z0^4wN2c*qzuvm6&*PB7*>a+nmo6`lKJuZ5qhx3HfK=@!?pa53e*UtB-J#^nU?}V|R z4jxuxJYr|oBTI8K40q_lp9fi21YNyQ89U2mC}hn40V7{>?y5oHYE@kr5B+?_|8iX1 zKx4f2m;Ai^a;`f}E`D0dCvY;X)AdECJ?ys3maq>)s|+q^p@El$P6jSU*?|E{0(3kU zT*dM6I5bV(M_UTcV!9p`8{qHmiLmmj&D^KZ`2!!lDLF!htLmdgU@-}4e6YAPPO;Xn z#|`L26>OZq+i%xIbJX+Q9-MCUYi$p$A2Sd7GT46x)%`!XyB zkIJ}wnXT(?6Y4Wu_xDWEU!`NESjXG)FL z5lZ(XHGDt;V9JHKI~pkm-xQD4+vq>*JQlt?>Zw44J|}=NW1Mxg|G67(agp%7LhgsD z<&J|Q6&OYL71Vhbj^CT4uxK9Gw@|5SH;Y?ZgBtAV0De@nf9!s%w0Ah|4T2SFJcj&N zzmGj>@TM@V)ACL zC1l|@*EN;$KNF!e`N^)s=8|2sC-c>MN5tF;t zD|Cwzo~FHjCrs$>3Y`9?UM>Nk`y{cV!2r;1E%xqRN}`pAb*&)rs5E235D`gZ+^BlW zfZYY5R}kAz>JVB;8SCp6^!Jcd3?4D&_P_YlCX>|1{dLi-bJ#BZnd5D_2#(`=)9^hD e_tA4>9CWHIP~w&LNQU&90UmVz(!H58B4AL z0tf&w3s-a5SVRdRD=Xeh5N>IJa#WUH18q~G{; z({tM(Zr=U%4sK~~I`UQ&82?JM+ju4&SaLNfuOqqQBpk^+gv$$LlT}}}F_xnz^+R|? z00S@v70%z)0WOr80YU_FIK|Bc^nk7^F6wy2tYmYjyB5c^d})@N9Sgs0o-0U>$Tyca zyMidC;bmhz&9OgIKMD{}zeEym14MoB+SSQaui(T__SoI}<+3A)RbyWSljIuFk~QhS zGer8|y=u2UB@l`Q$X)X+E2mEj)w?&2^#gf!31;am#V6^;g?V@lDU3MjAA;0ZpIrS>Y96F4rpt zUMBkoI|ewF1!ugd4R)Su&I&=0$Q{VX|1=8bK!D?}Xb zhn_Dl=X6fh;+3P=8Os}H8c1QzOYAtlp(j`w^|}&Bhha7 z*F2{1R>F}N_r}Fodl(WKzcE#1hq>b{855s*$03XOy&;t?t$mZNBs`GlHBtv; zlph3dH3G1>C(pV`=YlO4c8-OxFErX<>I8ZfK*f2%b8iG{S%;e>@Q;t?k&@*v^9kt# zf1N^yO6YM|`uo4y87*Mj*pelH^SMAf4Y2_s%F7;`;GVJ?{POziy4Z172NTrlY2_OR zLsK8J$TU)c^M3HNoC`INjMincOJEmVJ}+H>2zI7BUl=D&>f%G?4mv@iX>F-6aDd2{ zy{Hco#fV9ku-x}dpWh^=AY=6|p=M3*z+S=~#aas12HbhC{#v#xm6fOYmdL9agsfe} zV{4lXghf64YsP8S1(0mvkuLly+Imr}Qxef}Rfy`nirD4vgdx;y;Rb;r5L37?n|L+U zD6JZBgpOl8$-Enu8HaY3I=iMM?6PrRUIywF0NosR?dHb;`fm(fzvV06Di&RF5R4t;H6JqBDG!Tg{S-spvzB-|oyp-?&3P?C;x~7q~6qI?3Hl_zP`0 zR!h`Su|rLR6v=1jTg7}{_iO9Q3Gz;O|=FLYon z)ED3W&ItYVOs??3Ni6X3zT*U-=r0}5Jw2`%P!SAjdrB{@Jc4b7bR}~2^eO;m!5L4X zVYnb_98(iY;v3Lfh?_1qp);gdT2j3OCyWq z720-moX6CbXbDNB8y_%RbdT<@J`8?4QoO8FOCiVv4Z}?L**U zLIt%rg3ZK9B1kk4iUoJZA-PQW5Y%}BiVt$>uW-Zq=7YXK83%@*%fh*h0o|7>a^eouG0ieqULf(}43SvZCDM@Jh~{Zq2u`WS7FcdM)wA-=g|l=K{^()0 zc_oif17?d=ni@lJuGFw9p)h#9lzp;VV@B}*%#@`l=MS0{p>o+h`9xHa+UFh_f%HNm z-VbQ>ZMl1$CNE7e#QqM_#piVJC3oE1Uz2@Lt^kF}3@TmYUSMt{QuV4_kr_eKUL2#p zGN?vnz=kNraDipK)mN`bkZNxqh74$EaPDsPZ3HI>Go0LXsW0A$X>b8e``5Ltm|kF$ z_&>x4jd8e#X0FVK5s053wS5F)nFP;pDlrc?U~=Ve`E61K@cTX|!ZCrP*nybmk|Em5 zWt8{iOCGsiT%pscYr1I=m-_HFeWbakzulj)4Fz%OF$Lkrdv=h^;eVBas%1Jl=fL4p zw~y(n3aK5`i0iHQ&PI55zP7XkRJ>(F<(CBMU8ZbHtPEOaQ)w0py-{SfUY_N=;g`)o z$RBu(Fxw<|Y5&25C~a6rMBF$#mGA44lJklb-7s$ZBbX-*l(`sljc)wJZ8ACqGQu2kZ9?G)PB0mr}($0n9#g^FLEr3SJtPz2}F^zukoRQ?KEqe5iinS5!Pe#TFJHY~KW83EI7~X|I1s zo2GHp-K+QD9$0z|Y`5skMq=v|NFF&yoo-(d8Io^2PBt;UAIEyGJ(maFtP_WR5Va4c zY}YJ#RCj0{-sk|14=?kiPJ{^63u(!(jYjvI0x eeJBLQnG4K@p@xW=*%a(SGm`(}4;`;~T>;)MrLfTe literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem new file mode 100644 index 000000000..c3c0635ad --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem @@ -0,0 +1,54 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIJnDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQI/PTNX5reUuICAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECNepsPdfwKiMBIIJSHRy7kOzfWTH +O9Lp0TcHFXh2dkB3d9v8HDTquWY5brLGRVquXKEJo7DOK3MY/0Kaq3/s2hmwsAtG +XzsC7nKuYfeAaL/vC4065g8LWxXoCczkwLyJ8wl+i5lB9UYZO7UQ17ZQOvQquvYA +KKqe+IxFBJP7QLpI+iSYh6RGoqltU2CVW6rnVpA6mB1J5fR/w913bfkq/F8eLD3k +HIiUvKf71zu9YZNX1eMo4kCQJh5gV83D0oXo18RRe7uzcBq9ZVs90oKSuMKArqKp ++yiawCBmzUU8NVelWfpfdTAxRDgIj+5EzLd/Y94MHeie0GCPk8V4uDuoqnT8z9mG +IQPRe1x5IYpK+/6hcvEj3SSJlW7WVOkKxQfaTTxNVhXaSnfCwIUfHO+gYvGjN0HX +6P9gF9+LNlnHRA0dCdHpGFlvw/N5TZ/rmFmzqxLGmuLfocbVmYG5t2lZtBb7oEnl +D3Yx7tk2GtKg5uWXCLN1tGf22syzyLsNuHoUFLce8QzIgW8MJbeTu29vBTV7YJRY +akmJDkl1SX8GmkbemxN7jSRGQD0c8vHjnGdVevoc4z011gL+bEhzJu+dGlbpzLB2 +VGmhptvc0iTHFHVzeYJhvRfdG60lB7P1/XbTUVmZ5bPsrW+FgGNr0Vs670csFXIS +khTIC15Ey3kvyuB9BNoYE2l/kKyd1FeHqS+ISHriG2KGHO44Bak62Ol10DBv1/ks +YV0/3AQes39hoxGSqrTXxAoJDa3kttRz4/7lyrTCjRZoB66FD/q+hV93rzBBwPCU +PWva8LxcsYmF3VAIIudxfW68CuV8oq8p8+pJ1JjdZ8uyr8j+YuuX60o0vHRQAr6v +n4/zph9ssbThv22pN64MbGkZGpfC1r/8SXqMdmEu8mjvwLiC+S6+CDdUkZB1jPYa +JX6oEcextSvIivTlMC3AAff1ZZLDjotlchu/Ky3/ugu9oNC6zhzPWug69aUctumO +ahXbhAOjswkTjBp0TPvsIIylTNDwWNEfB9q16Tfj3I0d3VKCZOaJM7iDll/rM8M/ +AWBJ0L4dDuhvsM2TjMzJ8p4JXaxfX9OjgR1+cuRe2YzQPUDBeOt+mz2SCjgOCW6j +r1k76ilGmUD1JQby8T8MScSp9H2zi3RIuaDVJwHMPu5KooUR8eF7w4cTqsS0FhdI +n91M+o0TDcOzOjmDj0vH2tP2HPMlqMOHUut+Tm0J9flTtxQoAlftPq3bXhFjT7Wp +ry8JPZuzQDUMdQvi2+J4yXnc0+ElWAdSkaqpEpkOekgY0lTj3W/+GuxPPPqAxLF5 +GaZ5fCLFJF/ioQ55J3cnChfZRXrlQw08zsQiLdCyFq4Tnbx6Hmgt48jKhPddvxhu +b/StlvaRV+UaMdlnl3Mr3DwWjwIVgOEe8/c6T0TA7rhlh2muoO4dT1t42stGQZAy +rB5PoKJwLtzoyQKdk+LCvgrrdLmIQmK0AB14OhEAoWwnOyz9XZ7QM7Zi2j/msZXj +ipmzwdxn2+Zfl4g83dn3pXy0+X8MugcXLUfgRtNEk6ZAk8P1PaQZtiOT2DS+Khuj +WvnalHKoNYSeOfq1MJJkZ5kG6wriJewXtyRZtyXolTW0WbKNpcs/EtHbPxCceONe +CcYPPXnnQQ4Fwl8jNxUUs9vO2uLXOs4yKPkwgX7KBmGIlYLBjM1isNhi88fVXBvd +RTLFblxlnRHhjQmBQaLdkWwR7hN3TwdcxtobaRw7w7A3Pg76ktY+Y1jAuqu3HqTi +q+k7dicH29LFKs/ry5dAFJPgpG9EHPVemS/PIMKHp0wRLlHmP5+LvdRgSNKLUoyy +wlz+aZJXKobk5MIcLRZRAm7KF/hHfwldLMybrzobwwteTl8MtvQYpHc1cqAFtqEd +V49YwFCX0SNQLOcdJZyRoltcftiINsnoTzOKDN4y4NaHpU69lO8AA9TUx1UyH83o +jGUGAtAHQwUwmwygr+NRzq+1OHGA1JKLLfdwGKct2SY2smicjnOOgjF/x0wiSwyo +HjuARsdR0pc9ancPQ0KnD/6eqc2AcHXiCFi/xu7rCTwsmO5crSXRL1U/5CF8K29g +olCXV8cS6X7gqyARQMHXWN0Qx4vN6TqT7vuzLaaiC8cYiiKvDo63GPyT6qRZ5uY4 +u05ZLr18xzRM4hjUbxZaDyefOkL1DE9CO3rJDGX6njSLh3IxSNQVXNh6lu0Tx8CC +HA1S3a8eR9Da/tBD8PLwaQ0xvpHHQWsdX58Nb3AFu+W+ee4NFq0ZrPqlhLpSOGRn +bW+U25YFdIMsO41VhafsFKSd+/l7VwJqOSZzMgxLEr3p9ASFBbuzQeDVWr0kMYum ++Wf6ISkwu/s7hpnMibSACV3x1Fawwie8vH8zH6rg1aw2AITfb5RuIdA3h0uX7r/o +6MTUEgy21T14z/KPDfhJ5jP6ZNuVzpQJGgQfAsJzPKVZg2DramRvgSvdLw+/LB7J +FedNAXSgdeSJyLiwy9glD+1dWVj7gc0cj+HBQzAwSMdwoX5E7Rk7UX0O0S7y1+Q6 +w+Gd8yxl4NDaM/5PH9TSKC5oroPot4qH+oTUw/y32Kl5TXfJvWHaKDcluIQyB+4Z +ABvuEaxz3NR3yI5Xe+KDtprRtfI9IK8p0tFVYpZfFUULzjK+JGKi8g1CcDnqIM+S +1HdSJP/qsMMlb1iL619nXhWqO/hcVZvIffhYzKZJFAurqcEkc393zxnxkiA1ZaY4 +1sCBLnQWsmLeSKQ3rmzr4iPlG34Is5GsuV57s6w6NvmU11BTFh91psdpJ0iQLJm0 +jrUvZCTShcaV+lAGkqvnx5AIbPdZYSec6/J7J0OpmSypEfXITXO0Ihr8c7LMzPmL +AIHef/8cqJqJnM0pIZcptrdya3OTItfjZbOJ39Zkm+Vs0h6rpkpn5sfTBPONYti+ +JnB9yq6lWqo2wW4p9pyE5XXWcABMeq0uPoGXrZPY9It/aPB9RUCxID020Ehz7J1B +Y4yZjEx3Vii+LAg+AykB/0FL1Xe4SIn1/ShmEzan2wPxt3oNdCF5+6t/hgU1z+zE +hwpGnZfL8aMTSk4U2q1SJs3MQk9BlTmbKsOvajN+Cj8ZLa0X2oHjEV4o5Qc4Ggs5 +EZ/BJxGBwOFWkN41XE2DUW5E4Kq3AYShVAqmq24KIh1rOxrXebzEdn9+Jt+VWz4s +WqDsuRKobaoDpFFCQBLvQA== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der new file mode 100644 index 0000000000000000000000000000000000000000..5dec3c8b3c5da6dc9cc4009dce20a08b77d6898c GIT binary patch literal 2464 zcmV;R319Xwf(e{3P6i1ohDe6@4FLrWFhMXW1_>&LNQU&90UmJ`u9=H99wS! z0tf&w3My>{W-d$o+TFUy)b3zyHOu!WJ9_*et!Q-f`# zV~M7%bR4|Gp+SUQENPpvC)683y*njoZH809Mm>pTPr8+k{I+c~C$u_#k@+Zi(fM-? z18a0^mJfWK;VU&Mo%YDB+H1Gb)I}%m_a#BM4d7)>OVAPq)vN+pB4P02{WXFl0-si@ z!g^9qw;Ko_UD((nUzKH2sCtV(Z5@*str=tCPpJ$H7O_2=eE7d+R1bj3SA|!mk zW)c&)IO^1cLemc-?v<@FJmU-Nn11UOvL=%#&vnQ?Ol+s#5I=%x06i?gWF>G)Na;Gj zF@n~m@l@)GEbw|Q@Cqc_0>BXF&^J~TfKjY75SmVF7*cKkE+~(wMnkiLXo>(iqRyYd zVxxP>zo5y~I^1@(UM6!Uci`4%n2A-QHzJ`eIkvVzqECcDf{I-?6$wz$xO%gMVH?3? zVI<1{;bOgK%bDQ2-dy;&ebisdL38boEp#(kYXK*`+$gh32*ofYAGH)D2eboy;gCYQ zR6wZlT;(WRX+NxLhDOxsoJ0M!tI(kZB5fNj$sMm`rrJ2!L17z~D?|5!s~)^C;4zMH zb~})G|IfaaoZDu_Ch; zM-h9D$c0vsw{wmX(gT6S>fy-op3zc*QEw3s!nWFST?zD^XnMyD9Xns5ts7tIq8#$= zHCy&i0tmt$+wuq;Q&Fa-zj1-UYX$$?KvJfgMcE{cf0bQ}%FXa1YCP}3OF)g9jfM*c zaG_kNghpSTYm|GIEixk#}GdMx8BlPLBB*PZa#%E9U1ykj2HJh zLZ90RYvP^}j`1XC0N<7Omc6LZvb{@q*!pe2LU^fro)ooYt+zcutSj4FzQQt|o;Vy3 zK_#L^2pCRElbXkc>ENH?wlE=_pFqGp|AU@@-?nkHAoNiA|N7!rsLM=?z~EvdG8nON zP|vF{UHUJg^mysQ)iYBR`pjKYAdzNG=>>=p@v7QJuZd&d3i}|xyUr1;Gm~z9*1TD> z!Pnv8<>lr0x(8b=-JS|Tq?b7~=ZM){44&hM`5?z2^m?ri?HHx`2sNRtYpuY5lPzN> z(>eWl&O#%dNMBmJ25wS4{hQf9OO3B%+lVX4qH3< z(MjyTxZ*y`jNfSSphT2A1U?mru+69r#!rS>WZU{~=E~@_d4&duGTY=-t3m73FLdv< zGX73%ZDNRnfZ)6jiJBqLtP*^FL~m9sr2vI4;L~>o)V$wUn?^EH)x3=jPoXj7UjIKpK>>RyuP$ttA%8u*rA#$EpT% zs;MlhqdnnNUB`!Ekm3hbd^CxVbuVZggXWxxoZbf65P$`U3Z-osNFYhNNk~P^8<*|_ zcuL%0PvO#z^Ci*K+-7{Xf^N&+S~j=9HI&8On*D58b2?pgbxS!o9Z^P-&*dd_+hJ&; zz(pxf7;#Z9`V+5=zmmd|L2%BCTiI+m0ar5}qcKV0f1~?+9jE{AJ6Y-RNzSRbup05P zyKR$f;Q%wlI~0K6##3HFUjnaJQw{^hoCYes=uuur7qLW5X;1u*t?fq`?OcE5%lhQv zm`Q9zORjx1X}~c}ee4=U7rIL;9?Qhh-I!~~YTs^}bDJ)5m0rm*!>WfrbUOpyyGo;g z+%b&6f8{!|a;sJwgOL}!1dXp|r+#r21kcX_FI1f*Pb7qMK7|sSKITo+tlP+BvoUAm z{C?Z$T9%sr2o2HkA0$O-(Wb}cats95DH3NlV;`rDHu+S3$rF5JVjgJ8Yl1Q{$@9p_ zBI08vb}VMv&Y9?cbF=?l!8?Ct(3a2SJu8zbMl_u&&PX#CH?f5%NvH^3iha`=OuQ#O z#W^rlje@1;4bL>w#PaViN-$~^YxQ3MMVBgSo`?l>-uDViOV!AQdVyx~;Zwo~;Z(1L* zEo5cIIIjq(aov9Mw!e|09IZeLGVkwT{*p+v+63o!3n0s${VV;?U9z7thk@@;gVzoay}tBQfQ6I6#fn=)bdT`bT}sqTFPY3EEj1M%5_7U+EPOt43hQHojXPP-%i zl{-$?OCY=JQ~F(8uXt>748}t)K{tgujt`$u2IcgGK+szN`dGJva7Y&S>Hxe9HeDJz zh0QC`|Lg0(cJl15Qur44VjkZ`efjQx1&TPhiUZiymZAhj=qx45z*Ajgio?8&LNQU&90Uk%_7`Zhv z&G3*KQCUaP^_nbiXRyXwF1{7J$|(46Bi6`qs-HBYP%%u9TLjNk0gh2%I5HKdOTd@SNa`h?bkdAhW>elC+_8_&6lr6hv>hHY zYQR~q&90LS2>-LDdK$YG!*C}*I_p` zj)zkp6x`;*izL>$Rl}63A}nb|9)#8;kc|nL2gJ30lr$lc$=~ z=sWHrJ*vk!s6(~?ZLf5pFdH^5b%Cz9kVTcx_!Q_5H z+k%ioc0h`U!jAvP(;m#7@*Ln15h_nD4`}OY`&?9)7gBtYMrq#NKAI5_-`$6X^~sI4 z?8fGUrqK#+*CwsT%d6hVLXmn2;W#^p?siq_09kw}9ZkH_FdG}33ulA~9JDp9#Av%k zopVFS&2Uwd4{ab9Mfjav!s6tnq|mGK*6uvP@A^to3NV0OXAuokUT+%z|#}4K#-@n^tbC^Ap3gK5fg+2zQBe z8ijA~0(`ilp{j$_j2Kohx9>fx{T(ENq9p`^8p0MEY(T;oKZtY7B(br8a#IP+^+-fr zIgW%;pju#r!!*h6ZA+9*DA&dcYq^6A5S&c}53q;|LJD(|acETCOmADF)@_2QO{ADM z6A5<2v*7BC-6<{V=ax|LfF3O>Ht$NS5`%^oxxvjRzA&AS|2F!|(tNfc%ZK;W;AMRY z%j@BB%m#5Gt4ci?x?Q@|)(wW=rfZcrTu$ttWBX1M1CQeWrJ=|H?YCI(M4u9-#DxpG zPU-#&oXaBGXTK?-zL<)P>p3Q2VLHms%r5b5d2G1=9b(caZ|rY5%(d?}HAy6zO*w9# zm``)~ak5BOV@PP5$z&xN)=U{HOk!5Sr-S*>w5yIMmwy|-laIXVEnw=!`kuAkJzoK)ZN0u(?^*=NsQQ82qxz-$}7m!|}y0)u0vZIjeGCy*jQ7Fo#S6iSAKAG|Q zycuF}N^k480&ol97cEo$?*hVgJ}KP_d1dgNv<)f{WF^@^`CXeP3i4BVL`#<{?J^I~ zXj*okL~~->t++P6v^Xe2>rYkbCN}6=Sud! z#hHAWo+93u@*>{~5b){U_(3XoT#hjswYMH9P@@*-&~Y^0D&-+quN~E{>3(G9meErf z!B)fDxX!sVACJBHE|qCM+oj8Nt%!6*2MlQ+T3j~O3#wU@7@yz$q@@z|KcTZy{JM|0#r#{h&E2y||jJHB$&6W!7V?lIE3{C4um^ zLD%VqGQroR#cBJ>Fl}7z*?-_9F%CjK=Oy7W~{Q8%BHexLYW(j7D4G@b|tqKrh@U|pAv@{s~r|7 z@rFLBKMsW1Iy7`eMxXg8TH(meOn`iU&(6{Aloau}E;Im!l?r<)XhqZqk4L9ZRS}l? z9zWV!N4JCVzRnZq#|jS*?X4kHDH(m2-Rh&S0q*l*fx)}KkYW$7 zK13nR^$5}M_)bgmrZ(7BLcJZ)(Mhx}!N3zSjhPS6)CSM|z)ud%kMU8}F=dJ6mHi`m z&}{8LhaLY!T4X3Y^JfC5hExt@h+N!YG31jJ?3PMlMO)nkU#r~l_f zHsx_XEq1uA9O_(L0CG4GRV($yTKFPOqlrG&e$0EsB1>$4fq^9^5m!7hksbCBFvbax zzNH9pQ225`<0aT30qBOyD!q=ohSLyvqjcz5Tr~>||K>Ei?L3-?|7fpTmsO+1c?`^>&m2n{b%DWY9%DE#|2Tl0EG(RFvPc e{6Tu9c+Zhuq%Ff|0yiDFj-7}y3{5}ZgZP}Xt*&4I literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem new file mode 100644 index 000000000..194a89527 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem @@ -0,0 +1,54 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIJnDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIoWPVdNPvfTECAggA +MAwGCCqGSIb3DQILBQAwFAYIKoZIhvcNAwcECLYc1CA1Gf4IBIIJSG4dPOE6vprB +zPJLrO1hdLj3za2tdK/QlDbqMScFUC2mXq5cJ9rwwa7AyKtL0U4Q1O07Vw5GB92L +FVbY4hIRC0XtutCwhqlr0kUaIqH/IjyY6jy62Keu5KYYvkjPMFBkYBQD1UA/BT48 ++yIPH/RSXbpKU6z1KaW9FiEtPoXfw7kxyXHIglAEQtPaN+aeEvpuDiRAN38SU8Ci +j+Ub7spft4D7X5oARaAgQCNuhO7Lr9FD4OuxhurWoiFb7NJPuwTr35PK6wWYfjwC +kpd4iRCAhi4cl1z0ZofSmTyS21lz7uc3xJy6ztVMqOo52mIr3lFHatpC75/c0L3d +Cwcz0UNvkMOR1u1Z5iZhoqsFaysrKeddM/6iBWP2osuz7lTZ7z95hgksBF1wnPSh +5goSu7ZVbYnsn3WZGVQyDKbCcz2BzPj/RLzSYwjrr48h0ROj1acvZTdfFVioiiKg +t0w97W5h6DgnDZO0/yiN5Q/GLD+Laizawu2HD8e8dlkaMCD3rEl4RL7iigh4Co+F +8Raw+UPma/rdHX1mZttnk/bkOrpNVcrEL+ZxmQFn5it0Vn+U75sNHem3c4A+Hhzj +JaQtCPwChYTb8AZmNw/vFrKkUtNpMILHB/1sBHS7TIo0sEXJwWDEtrPLJDLvhojv +JIIpGQmoCqDHZpsYLGqI/kHtWRl3jAXGmVlqkt+QgjbkDxxr7kSBAcqEouuFcKKa +m2My3XxGMJrOP8iWuWpZx1p77oQcpIoIvnF06eq66x1H1oJaqYTgn4W/WBd7qScv +ILCTh3ceWYCh5Co/S+MonwqM2Ppc7JWIVinnrpduFWbuvvB/sugrjEoSAFNh+cqT +jTxM8+1tAVv7xyuOdFbR3TgiUeEfsK6E1+1Y6YKsqtiXpYN9PMpaLg+Gbw4+5esx +z4Mn2JSsYSejohhSZikrUMHE3Z8RgxMn2WkQ3hMNjaFetD45xUTla2v5yRgYd7yr +AQK7Chej4wtLx6yi5sTaiebxrrAunL4jBe2JpBeYg3J2dJjjPDr9Ym+YSSoc3s90 ++yplLoPxszvMfFaEAKrBI2lm3kemij7chtzSNAnkW/x02yxKcgwriNGHppojUQR6 +j4Bf9kvfZX1opyA/JSysGRDj99FHop4E4lHriwFNWMfoYj63BKluQFfmsCOptokf +9W/nAw+XTSFu9ojlXTSPtlyn3jPsSflYtO3UjMJsm9DHuRA/ZLpQ7Q11pOvI0hqj +XfLuQ4dhDTHpFE7Lfla4tOwz/lAOSqeuqUfYKqa9heH/LlpUBbsAQM+XSLqh2cVE +M5FXvRTcqdU9yJlMVo5+Asq5iK1cb18e3BSgAaHloJ3UaxiOaR8Ad26ryZsjAQXk +vKlqGQ2nvYmn7i9z7hYcVZRbXnDYsyA7tFHSYLTDUlOjtC4YjdmnAjRojezRHUoz +l1bceyBUGSKASMF08fHdMu3U1ffvze/GYr+uj5XyR4gZn1w2lkVYCC0GWAYuwdD/ +4xVR1qxDb1trdui+FNS/ET6FzlMtHHEO9f/veEPV8hsIgAouUVncN0bW0GKS0Fsp +N72r3bNHfv8tE9W5HPF+/ATh6zD0InHqOyX2wc51wFWnSWdC00DluZl5KS5wPi3S +MsLsRK6STboeOXgr8MhsmASGX1yUBWEs/G6jLAUDexM3FCQgYWCgCdPnMKvtesXn +3qOhdi6On1BPqvATyXndyQ4D2SLYv1mJ6CLTPO7PTyuCWobL9Is+S+D923+CpuI+ +1POOKOLgex8sflOa4bSkpWo36JvQOOp6dXYJ+5IUlA1MZphgtKzInz+WYar2hdHR +o6fuGzdne79XZrKSveK9L0r3H3h4n5JEZ9A6cd8bDAiYQp6w5yl7vXU7P0NL9HwR +XiSGHaoHlRIOr4wbIqNTnX681hq62S8dPtajukz8QOhgOox/gLULgTpSDMXhTN1q +NV/Bft6+lU9+PC0Dye3YesJWykuQFt2hM3Og4eWB9Ha/ACsGmzbgTAMtNLCD0Mud +m2DYCO/GpUDL6dDHJDzB2qBao5zSq+zoeYpP7d9Qs4amVxFwenLPf90BI0IV+D8N +0kh6rh9e1j/rmPv1qKzj2WvTqdBWmqOZvU5TBwAozeRI58JoSRiQLs1DfZ9o6V2H +bRvmVxdPHTryevrFqL8jEMypBNgB+A9x5VzhnD3y1z7rxKr4+7WW3Yu60EP5irVa +EjoKBE2hoGCuFfLGJn4xkpOzjN12SVGzL8NfXRtbkC8IBsOr13njFLNVLwzy7EwA +LFM9QN04KV6Z9AEX8d92NqT7w/9Su2ZgFe5aPTlPW/23uwL4o41U+FFrZU53/Pyu +e3vNy1AAh4INqP0urpy9Gnp4LP/u/AwrbdzmvJt8yjnKk03AaKNjNgFuprdplvqY +9TUFlr7sCf/TQ4w3BTZYI1VQNrduur5FwZblI9Q6obGunMPy3IYGeV6CcCchYkXp +u9vbe4hFFrsPlpOz5DHZT/5gI0g1ZYFJq+H73Ku78syDrWHiTGYJinj1s+Aceiak +J0sId66GMtunyojveJOUwfxliIKXUn37TqH8HLjEYk09Uy1yXBZVLaMhXIShGMs2 +aSL3nXv2KmGDGSFTBto1R69DPsHsb/oVDLUwgF5xyZFum2UE+D17mCK1RMczsWFz ++RIHc5SYwipdn1jBfJa/r3Gg7l7bM6/Fy2oAdrhcdB2oPV9cXF/Afyfu1yyXZfVu +Z6MWhorqZGvJ7HY+G5JFxumubE3u2x1EkrqAaFIjDc7NQQwHKxGyMTKg9I04WQew +8wcbSuvCcI4NVt9HMy0fR5+3QkSeZnoKI6CwqRqLEsexNO6N6l3V7dFgDUOFqe1b +Yl/81bS6b072jskkIsbFXTn76S95G3UYrEiYdn22+6KPLyOWQLczmVvztdVh6sOw +WRoiKYXdW2UnO2AYOXCQyUxUjW06m6BJ8F0NLJ3HVuJazKouF7iZsLpHBzI8luNz +VF4t0NLX60wv5G0AZLivVmVAadB4JIyT17ufud6sH0oSyVRid42zfBNzfn7L9rIv +vmjfhI7SeoT2MsE7l/QtQy9hJFSh+DpdWw2taJmxP210qXA8tgGgLjDqHJ+k0wvE +laqHGOzY4J/y4OPsGN2fiW8nRCoravNz26Ff9PZ0S35WJ46qxcMH3pIfxvIdtXZS +HESFHzL1ejv9Y4y0O56l+w== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des.der new file mode 100644 index 0000000000000000000000000000000000000000..f40c9c9fba44817037173a7a0f1433865f5857e4 GIT binary patch literal 2447 zcmV;A32^o>f(eT-Jq8IXhDe6@4FLrWFfcG11_>&LNQU&4g?58m=MWLy*x_- z0tf&w5e5Y-4g&%Q1PB`z&kI*RipvCo2}n<1K18;h*z((5wgp+kqs_>ehWuxDNE$0> z&G{*om#ZF-N?z@;3rmNt8tcWZUC|pi?r02cRy6+lrVfQ0{k1foW=N#VHLj1cRwt00 zS7e0(CEX2tzSWq?fqQ-fz{6B0GqTd=B8><_`P4JXRT$wUTfh*Buvk21xe@J=kPe#B+>#rV zPQ|FhA(JVmA8a{MKvs1Tk3+6-Mh5G0qVV9*VkNA)kcNuAnBTZjGmeX@#;AuAGx>^L z>{|N&jm>8w%J6cd0V`CK(ezel*1-kUhN{YUeXf&emn1oBk{gQaG<%;`EJ$cwy_d&_fU@2FlE2gIQ%y>>1`S2zx=+7|oG&NY_r|_oGc}cQ|o{3RP zHt+EeKW$T?!Cf-x(!4{OQG1igoxsJTt)vaM>S|$2 zIS^8>3uIT3YKn1Mxwi0xK>=O+S9c^(rmSh)IjYQ5A$*a@BP5 zfGQi!()mW*i}AMIRU3pxf#p104mJGLuU|4^)d^)kx7f|%0I!7d;gB;WR!d(6Zd(?}4Gw;s-qWE1 z(oi1}!@6wqk_BMB7iu$tXD5;UzJYj>Ot~4CpIX(krQ|gt+65QB;zt{+)j}BKZDnX^ z>e=YlH^Kk$AumAk@-qJrV?`4Dd~Az}1tq;?TU)_`w$mfr&Py3QZ+SifB0?|*PqoS# zT<2)+L+QS7g8Fv2=qvsa1JReqi#VcZqGyXi(=R#F?~MnjH4mZ*lKC~}h_shq8Dow> z)yI7OPrxy`K?*Xe2l9qurR5lp@Bv1rr!WAMD0HPOq|wt6klfB@C#`EqX0&fRn)$l` zdKm&i<$Pvn9Jp`Sl1o%hVDFZZFk}cNHYMa}<6}GejyD{L?_C7ML0IE8HD||%syMlO zncE7tWq5YgT;fFmdD#XtVUR3Ap5TGPQo}YmM>r$Z)eaF8&>y!k#N5k@=5O_7V~~Po zgys;O@hjJlD#(^7$za6zYw+}$@cE(3lD93LG**Yvpcm=xyIQYG#w;o7ek->CuUC6a zpoeDn`#f#ci0E;ewF6vwoSSJDYuMXSWfHf{q9MoSrSqD|xlyu7qFJb&gg`_8K7YXjK z*p9+9^<2Ke0S8@n6Xv3JfmTcrlPyT9+@|8(00OrXcpcT}6eP+LpLb>4<+G+Y zL(_*wHD+~&8@Mf01x`){*yPQRjkEXpJF530Yx#rAt^vX@cfSb$WP1A)6^QnbccxEO zoiXh9Sgr&L*L#Nos~13ey32^H6Ge{(D~+!ZRMW>(0<^JtfMxX9cMgKLTsRm|>?BS< z4D>sk{nGoo7cFu}B$ADtBd}%t8OW;Y*P8>Bp;Br|WH`t7O+i z6jo1I=5Vn|)B9-hq5BHfIDdT~1A|~&S9`Xa1LKZk$3ZqRy}Amo(9UBJZ6gT&rw-zy z*U7fhDI)vZI&i~=fU+3^kxD`fF&YBeVZe=tSF27`(A?cWuN+g!GwY2vPJfKI@lQb~ z;;9`gdwY?~3FdEy(<-@1&p~^(Lv-eK-Sej_SKU3<7dcAFJxLt;F&>d=-{i=XPz`CW zxbldud@WBzU9S~n&=ymOHqZ1#iSS0c#?h3TCLp$5pV!?CO1>4ZAM2TT_*16%9uMUR zaG{^SJM{wm${@Y6zp&*-RuctPwxVRTfsP_1B=-PR*rgCY?H5vu`(*%!|LEJF{t4Gk zddFDjOT^QZc(8f9&Oh(V1J2D`FGCTylyB_I&K%qETCX`4J6!XIM+Jjr3*T(th&LNQU&90Uk-v=6{XhaepS z0tf&w3qza|(a(0bR?ZJnY} zN6F@+l55rJg-#c$rPi z=yIaX<5XFGv!|JOrBl5rc`BgKoIp~j5=JqvEyv{PEt;0M5@Nqf&FO5|)Q8S8HMWv9 zhl~IlZsZABy#lHnHYXqr+Q>>KZs<3J81;!Lq)Rt0r1soU1|8L}B2p-vS@olXX79F% z9~&GBNZGiiCWHjT){6D340&%VByy=N#5;V==>Zrp!I?uW8vid8t`h*$cXJ05`hRbF zF1Ir?E2?Flf&KMZne5M+gA4Vqxpe0q>x0?Fn4@sf(T1sbZlnOgT+G ze>9vpEXD(hQbFAN-*~#;&h&|OHrH!t%%*&}X9rNW6Llsni!?nj8W+A$%V4JQ<2D31 z&wJ`cVEO)VkFH$yU^X4ZaB|qWxVCEn{jL8`z!;`;)o_;xm%`n96hV0sw4X|I%!}%H z)k^k7JFSy2anEqQ@E*3Y-YP05<`{w42Zke&PF~=FfElbCF-g5dR_rm#g=s5940s__ zZaStFnrA=Vg4PtMNHe72&e4%2-bZ7%8FTlGkl&A{X!zd$scMbBdDD@4kO`Yn`lNBf zgVHrdNW5b0Jg-u!sTdb5Nn;0kFkLs$^beC6Xf&5I$f31zU0;Xx!OcO%`#r@|I;fsH z5g$tY$%?MCE4PU)WyIXw17{|q{6n?IL6F1xa|g;h3x5Xj3JFK}8zMu)J7a?tRTjEx z!YZxfvU8}jZyI_yEZD;Fdhj^fz>Iq}n4Gi%vpZ+7X3pVBJN9P&kjH^st6Z<)_lQqKv?7)fEOYk{)$f!w zl48Yz2+-nCbk{MLrH3|`s3-e1z}t&|ay<~_0dQs^{OG?j?}DB%6A z_ICIKn)qHn@*(szTgUOIH9Y1U;*j#hyYx|cxJW(~JlW-6jEVQGI3Ydt7Ue4RB5cl+ zV$BDSESQm|B~I_kCk#VB*o|9##M1{```2@nq)q)zU!Wi-f2a&r5Be<}GSJi}JiD*xv zlRUpuq6z6!2eI8`^J55?n^n=(C=7s@!mCw7JQLNjY<1(L5N!azdQ>IyKkK~dal9EY9!)i?tCj^f zmW$O%DN3#4om0=}NLSt3Ql%*``;$d?_ZpLsAwK4pY|n{h(Zt4-tb9>$|2#+9hbEsLbt+ zyqH1j9Ud4d84i(RK&tzIrGW`#Zsmhq7+vGF(H@u{BWGvrmo>J@C+=7i)a@_E?(Ld? zhIHnb9tJAGXPTeUEG!jQ#z!v-60>)zL|uhYrjba9?Db66Q^6(r+`WJRXVcq5?)!V` z8C%^=%FGnvW%e@jm$-Fci zIv$|XW!2!FDv$nscT94!1WJezs?Qjhg6)8BF6;`2*P>%1^X1zvR1E#CDz|if*5deP z_G;wu2;-m2i7cCZEe58Y)Km1Rc&1E+P<{b|WT^R$}h+0KASd$24A+c#qi?7VN z8~(N+s5u$NoPnpyHJ^WweCFHZw}~2r^_V`VcWqQDq%y%AWZ}i*+HKmmjb!$24A6(K zfIkcL>&~~2t2LJbl!5N6JjS)!g?nz%F?U2%9W>o6#NWs+Ew||o$=UL5QL|vQaqlUTi zn||nh%w6Wn_FQtNUAJ#4x&qzkS?@V4vKhBFmeJVZ`x^g7ehw>OJ`K51=RGHYa$%XC0u~@mo{@ zQnu8wE9=)p$6pLq>;0yIarD;!8OnLCw`XbG>G$6J=uo+1YDT}DMTA^5k(lGsj8Gd$ z7Td{+9a^@rosAa;-T7+9{MQz6D&01tH+zY$;!U$jyvKb+aC@K+)fyoiLH4~m0Dhbk z;!xrEU)vs;b9g~qTI@kgV8+8+t*9$cpCFh({szEZ@s|lh9J61Pe50P~Exc5TejXKu zHvn8$ZhIj|o20Fic5J*cm(BE1_g9(>aF^@*(dB}huc`CTnIpmK!&{K7z z2@ni;9W;wYsC_0bVc0@T9a9;xqq_dVgBT!ODqO{#O&tJ z=nMX79Fd(BNtD_anv21Q_ERM3$n}H0{GfregQRsub=|oc34^1E1-Qk+Bua}}9)_M$ zAP1{i;0_sVwG|t~L25LK?UfI-q+ubx*MXPCTHN`NP$&<^;0;!UgRcWsVKpZHa~tv9 bPsEJav4jTW#X4ZBiEWB47NnWeA!0cUWns1? literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem new file mode 100644 index 000000000..16b13a450 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem @@ -0,0 +1,54 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIJmTBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIVI1x10/M7+ACAggA +MAwGCCqGSIb3DQIIBQAwEQYFKw4DAgcECPtdOOUMWuSbBIIJSAksArEUkFkTphQT +0c8tc3j45tJKHXFXhtt4V4pX26Ydh4cjenAveKvrawKhmpSW7O0n6A81nwwOxUH5 +VaPDrA20Uz61+S5BbC8bDa7U6IhA2g6nr5qERb9rCl4eUvm3RWyzEqbLeiUER1Rw +XrxiMva7wIZhZJNMdq5Bb9yhI1XMLlowf2WvNJGCgGC4aKbr1hp3AqJ3O79iRckF +XP0fyLt5u8CSU/1NWGAUkQbnqAXYpE0gN7tzDLbBcAyRet7njaplj0XaZlOdOofT +JQ8db7bavSGe7PeGjC2EZUNElgbHUbb2P31rNN76YR6JqN9cvj8gCGV1DETjEbgY +theTtptT7/f7UWzR2xrts1iieYRy0luPo5xPOa4UDvbYcHtUVgSkrblw4A0Id9R2 +8dRN8pW/7GPeaV6eqgUYVrqx76zVu8l7QtiZuA05tH2eVrTsMe9DnsvFV/kZIVpb +8fnkokxp5OZOIIsUxIQdA4fxHA5k3Dw6/0bXVgYHXJTpdIlA8yHFgAkOFkhi9Wl0 ++d02COhFQUMB8vqsHc61aFAvKTMwMIs8/ui34rTSBnBLsmMQlNxgNzc14Dz3fGcj +LU1lHosX+l9M+vEtiMD+lp3szj7b2+o1apc41L38CWo8XXVLyZ2lmQSHXz+PRWSl +afjR1chBzlulvELqIMZkjsBazv4jHJOD7Alwcg9pb/i0QqFTbZzDyRmHW2Vfjn7f +ZzfXZvnW0KLjH4BvRiSpkum/9PbXxQnxryMC36MHmEFUS2vwi5UUjSM9Ak1sdeUH +b3D00kcERPREb8Pru9+aqK7fBmV+QTAhG5UqJ1E+Zx1YZp5791At4oC7udTud7eE +n/1zKs1JWh/u8QZkLzHBkBZDIaRSCN6E/zSDmx4VjwCRv08fJK1ChkJJKs6mtCSA +mQ5noc1kqy8Osaj56FpOxV6Jgr6vpEO7vYpBnQ0DGU5lkE1ij3puyaODR0CMgWXO +DdoYWW1F53Sewu9MSpSf0/AZZZ4S2lQGhsH7Kfco/hXKV+/9Sj/8Mw82MDVojPvT +vCc23ORArMRzWFItdDR0jkFVj3sV3csjvjG7/uuRtnapHqqhwiNbfRYoW8cL0y3O +NO5179OE8Xmo0hHKYaDs3Nr+3dnFwQJ9HEJnKrH5MM2G1qUFknBYFqYEkmCXO87G +ZtEIywtFEGElGymGWWhlg6tJxEcObN8sNHf0hqv7kH/jN6JuEFLQlfLz1b20XNka +3rv5WKj7lMrpII9agGO7VR+zbpJ2RYv0a4N+D46SZGIoWKjravmrMzFhXju54HMR +OKrL06njAoRE0TfpqGzv3InPJg7L8Bb9FtXMdficQ8BM5f62b7u8xcce7VLyhz+6 +1cboaTywfD9mbGteysdoooFihVThc49/DPSi01jqZ4PE937tGDlt5GWFiIOaobF/ +zfWxJq3BWA1LaVj44r9P4jORcP0fWvabcgzlD7vewvSk7cp+g8fGYipN8t4oqynp +DGXYVCTzckllwNnVlCRcOpwYgdaz/2dEMqh4UH5bPI86Lu2J6Mr9iTuQ3CL967Lg +hEVmb7HTO2Tr5mnAIkAUveJbLXqPGynh6d3k39m56h5DyPKDPBidjkXFnLlSJwO4 +RPoAyVB3JOMEJ5Am/pXauj7NXErNTKRuWVQVspszi6ycoaiPGfXWYypZXy9W6hJ9 +NWif4SKTpVVYBWH39YXBfyHwnSHeggsvUpmVzRldXuLRags82i4bVd6AjXZRQLfg +SuvH/RPshm1CUwt+TArl6FM9MjdIOQM/8YUbyk/BcZsdM9ChHa+1soMXAhjz59ge +T19BzvZWeDIuw9uatqSL/QWAENQcKalo1zFphkFLkHCQnvs3+cwPLo8AP9ES1W4G +4KyiO+5e/04XqFDOg2iRYoaHEhM0zGTJpU9TDJQ1AQAmHj8TJ4eL6s5OaSzWN3dP +C4d4V9Ay2y4VFNacVuOTAI945+yi6GN+63sL4FB723Jkruma9vhOhqGht5WOltXl +yBjcMFmxhsvk9yErnPN/lUIpvy/BlAfPkTmSzTcam/ZfCOgIfFarbR5Hahynf6u4 +x2ECWJtELt5jhxs1gnepZRh71WJbjo25SJO/PSI13uMhd0cBIlhu0iiVtGzucgeU +PzUC6PO1gB2WgkFXaF839TO/dVpgbK2sBjRUjzqnYs+YMSVwiNY8gc2VAnXQu+oV +NdNaPEF79JTp14Tq0rmhcjczdVQ7gCNUD5g8ehovAkp6DkKCoMmbKgagP9MnKrhS +0tkaZwpLxRYiz7vZJhZvz1i64C7auy90fJxVAmsl0sC97dWsbcLaQoIKuwfn0kO8 +q2Rx4xRMixI5uoWDYamNL5RAo1nmsvCQCWO/E5pKzEyykFZfQ+iX5/cFgjXmMBcJ +1PRRrQcHvtAV51GhPXxPnskltHDUEV1xovYGH0yk20NZPEIVLf2OVGpcQICDzLyB +IwxufeHMkakAcQO1ngz6czBMMPFhEqaTBDafybw94ObpVrpjO8bEuj96nmFh5hc0 +o/dnMsU8q7syRIinjZTMcvwYLE1C6BSdY0j9TwDdFvH0IhmPaKgCxgoKuyiS2UtD +G8JPZI9ymOKMnzaqLc5F56j2LSsOIf1o6svHWG2nGGCLCMgLaDCl1rkVYOhQ56Bf +/a/iPfzkz1IYCO6zvq7AfImGHS7HLCk2Iusc2Oicf3fpjJ8TuMDwgUauGx9RKN2b +znBUQeI1d6PWflz/Xl1L8GTDc/YI344axYvi3F9HND+gcOEpfcw8jxy/yMYHv2RT +S4bGyRodGrVZDg7AjFyzLuwapM+GS09Qxdr/4cdEzLT+cuD+K9NsOr/TSvZD7YO8 +09yVbXWBIHOXoVKPz8PSg6bb+Wzk73btacNRgaWlqa2EhT2g5pwSAcDwrTqN9GG7 +0MiyEsWd2uCET8LBXmLPC4U0iHg85X0jC/fdM7xpRAKayuh5omYwyxxunZhAZ18H +1meJbao8mCqDopih6HYgDbH3sQvk2BUIr0wX3MC7ITLAiIiziJdvXWYaIrDf+y61 +gCf+0REpAKV0uaH1/PkOp7vmjeOHdUdSOOSH5AkyqBt4jNJDwi2yth3XJoyH+b+6 +XGuzvCFDuwIZa9PPsAXkg7lb7+n9L0LSddUChVZQ0NVirNRGTek8p8Y8SYPJZHk3 +ZuoG/kXvaiCSaP0ceg== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der new file mode 100644 index 0000000000000000000000000000000000000000..460fec89132938172b51bcda4afe83ff843b8ba8 GIT binary patch literal 2461 zcmV;O31apzf(e;0O9lxlhDe6@4FLrWFg`FT1_>&LNQU&90UlMC7T~- z0tf&w3m^ zr{$Ny<8nj!Dy|+OMn1|Tfj5Kt8v1!R>8tFWkk1%`k{$+jJwWLE!b$8Q~K0H zLeVxt1Xfn!o$8L0nVDazUfw+BDV+jxV&!KN_6@Ots=_;Z8oXyP_^zw_K3U!phj8*nLi{uN+8jd8#Un}>(PjCf=iWdK2Z~1_-g|RS{1&jyVuVsi18)tP+MYt$6)!{l zKt>1~pp=WLhh9OOnkL{`EXTded^;Ro3*qBWUAd&Y&}Gblmm@eNz4dgNW$O=e*g%A4 zt1o!xM0xK!m%=q^P@;tmL|pHyt(1$PLen1Z&w&M#!_ zlgeR1`VeamsHnMcl~LB9J}gPwV3+6*W4OGW6=YP@)n?(LXO$Pw9Gi0Wdc|6?`@kNt zCNkv1RoRM59jck$`dyr5${^i~(*OES#5nj8o)mY)V}2tCT?VFMALJ>lb&fUQQyX;F zZUAPCVNAad-3!xP&u>g{wx3Fb-q-Sg6mGy|qC&mxOYam(-4@;R?c0hqD9 zO6MD6+|}v0dy;mrCESA4QW>m9XwrY6c61O!j;Wa|F~M(g>PR?KJjTnL2D=4L8U(l! z4U7x&nHQo&AqHMSG$9f1k%@Gu8Vb`2>*^wdPp$=fS#RZCSF=^SiPuxD0Ne|;gzh<0 z4hK-UxiXa{g$B#ULzkBnAwf42=YbA8#uba_?UTU>xpOGgW0iQP|7=t?pFqX1vI~yX zcfdoigQ0!*Opc4mq5XWM%;lA=Vkq~<86o5oy?Ql59@FS|O#s?tmSKxR)3JD!2` z7dH;12VEQ7eC;cWj<_#tDpE*ke+}amX0jQ>gwl8ml>Kt8!I3Z$4LFkH_Rk_r4pjwY zMR7YR8`s0w;BbBQ1vGmB8MZ~Q10j;!heK5nPuvdG)X%zXiddXyJmpcHit<{AS|+D8F^GAuIo?DzWfVOS*%ZQ6Pg z{kBW-yPtcvg7lNh$njs!Lpl)1TE@1+wW5147#p7oh1$+ALPIViwIBHNyZ~5eOy&+sHdl*NCTcc2E@xd zAHRhIEw0P?FQI;Iq2>k9jb5wY9wI<<$0xri5-wTqL3&qa17m&AvkvqndSJ+dj!!G* z3lByR2w_4+XtOO4>V4teZs;XoL@F%Q!{(ixqMm_3PJy%BjKsR^_G;&xn>}(+fdli1a-K_oS&n!GJ^BjM+A7{p%SMoATeuGtI?(>Kj zlQ*&t-+m`AHr)|}s?4K=st1?{4)<6SXZ4@OvrPKxZ*~rUHD&MGUh~q$I)LZwJ63l& zOSWAmv2(QCOa-TfY)t-IxMMj4Iiz3Om+I8a(LL-&L(x4W7qLGWX|il4UN<&2HV1pS zB^3wb&n8*n^jdti(%o4^Bp_n2+=iuTnPGV`8|jxa|{zvvjbv zh4sbJ;`yqBsW1dbdFgXakvDsgk1|ag&!*JcAg4HnElNvu-UpVSU`-0*f>n+B0M{O| zpa-}W0%WU9Ho<8k3Ysf5R0d4UVwh&0rDN6WcV7`cCG6D1YnGFx3RIApWD%U zDUYyT@0RBo=DDY7oyWM`5BP+U7eR#!!(PNL12=-#~|5N@V3#v#*YRB!+=0but}DD zy5J|UFnjv*=TFLYTH~ZSF+wsdOL={Y}evgU$Q&azcts*kzx|{BN*FOkUC*lrZ z{|1K!Nvs>OV@5@D9xqC-cFx?h4ShjdAbr~RH~=)*1rCb>5TS(^6!u?n{Tg6LJ&qmR zmYQ6IaJwRFtnG&=XeT4j#W|G_F%w|jod%*MWbChhRZLx|y|>>g4I#9&jT4RP<`(Pj zR(y<=q5(MFA(M8qnqX_>je7uNSq&LNQU&90Ukfd>gP-s=TEF z0tf&w30);2uZtdzVR%lF|5+^1Ie)Q>mP}jD37A4&q{Ceq4xYuW}hgDbkYhu`>sDV&R0mxH^D5EWY z>Or*S)JU(x(v5xkx$%vxbV<)CTU51)MokvMq6|c>qzO@iqE$Tv81MLuZHC!i7g)th zIEQ7kEbXEQ0Nwu6!6tXUDj-Bg@31jn^H$G?0!=;7_qG#!52_G#D43`TPi`o(OulDx zRziR{fvxn{2DsZBGn64SvK*1t+Rba~?rTdazZ3bEest6c%Xu%?I(JS5zMwIkT7~pG zAl%GWa%Zp}Rh+l`2MVOPuo@Oi$NTEpN@xL9jB^m7D*exI0!0fC$%mc=T?nUMiY;`L z|4zU=XnWGiZ6*SI^2492&nXl}V-@t}k+g@dq<0t-0vI7Uw?5|b33iGs4d%h=Zx{l@ z)~_y_iB;@rnp~UY^O{V%=oDMZ#5QjU88b_iv;cBc^U9tkjJIJoSVqX1>WbDffT_aa z+u}U-*}c@Cz*`l9*|b`xK*Wj*Km4$W`w1qj!q$lt|BiKXc$G|co5Znj5``bt&M!s`I{f9lz)l3Jq{Dq@lY0u_%^FhtIfmIPQ#40k%yo})zsi2ph z8$z3d-v(&w>upisv8wgje(_ShU;ilVWDsUnr+^AnZx;tolGM93S(r)+XAzRzr|>N@ zxX*7YFD0ZcE~|mKjMX2z3&Y0J6uT`I z7RGc%!A!vK;~&D9zk73rClHV3Mq=|yAc|axf7pNTu0T;ubz)OeQV=%htfmi#kT$lw zBnxenh@wx7X?A-<0KLI8LVt`wiN%IV37nAf5Zar9Gu@gd?}pTwl0H*(`hJT>?2T_$ z1&}gpP5Yx#&o}~3Ou-RykhS>If|LNfHfsWFc1{Y@H_-Q~)w~l}x$i}GuS|4nWk;hCL5LisY(R7Y4qR_nD z!)AE{qFb0FrJ`0)?MJalV-E>cql>pW1tV9g0CA;Qynwns_5*9@Dw{Nik$1tTkUdPD zrGw7iiXZe;OG05~Ku7jqu^a(cW8hk6Pl6TNK@=W}PJnzMpV>9Lz_foLrFHP<8Pxi0 zT`E+}d1c9(VdkRO54p1i+bwmw?`QQuAD$q}zl)K$B2UZKhc%1!erjcgmr~K~gknh2 zqqA|1QfBjw7`qn%2q#t~)hk|moU*91EgJaH?pm#%k&PYftMU+izn*n>h+ztS6VMfI zNk-z=1{UMC<SgC3F(j=WC&uGQaW{VylKhrPfqkE-X z;2!W1J8dVUH(kPyso;W^FVCrOsc3aSfqURL{nH2%`~TUaPTs|I&#}=SVSZiRH$&(x z{2w0dHlt`Pi+9L)T4bl+lIQ#i#X`rXM}8#t#$f_tVit_dxt7XG*c)ERxan~^o3?G7 zEcNW=ivfl9!&#emEvC%)FjV3*Ekm6Rmr8z{@5Qjz>fLCY1f+UH_KowCO;vB{7N!=g zD*eVFOCin5s?mNQLuVh1sbW_tNrUO1iZ$iwL5%j zC5iNZ43BagH@LzsQPj)!B6>uot$`D$LA5%bCqXOz59l>6qRY%aNUar!#ww;JA}sAA z#`6YmNf`aqW^z=QGa^6{CC$C5Us0DX9UczYDBoY<1*dJ5BxYrOH@|?{F9mKl!JL0R zM>otoFFHDwVB%Z~gJd3!fvj*6I&cPU>X_UF|Bh^bjCc`I&Ip%q8~y0rLA(%rfBL_L zSkW^vynN>2`|*}Zvu^MrRL@Kv4QzSk0@H?(bhmu}A$?gzh#o76wkV#0TW`;ulf;w8 zXch*qyx;M{LumP{X{M%K>##@n?+x?NPWj+WG*acS87=!v?*X-eyRZ>Eu`5Lrlq4p^et6}_Ru bSm+*sM*?^b>6&LNQU&90Ul(W|R5lgs$ZR z0tf&w3k)74gr*hPTEhw{;BX20s@JZrB34{{>hzz6}L% zn=6JPWzl%~B<=c31?speFn)D$ySTX%YM957Z6{@w5vEA20k*sIxu1$MacjPW$G31g zejJgxhd0Cnhlu!+=uWfKQeAHN$ zcTZ!Ul7NNHk4T)<2xYGAV>FC~%@dT=>}4&)c{Hgdnw^Bwe&QSu-(I)|;B*`;g+VA% zey#CjaTQ@IJ7tMpr3?{~Oa5^AF2=_(YFKTb^IGqZoA4iIrgFQ-z+RPG!mZ}xOUOvA zZz+(f(bIqpVwCoq_Uv6RAHGZOfC6WI#4M47-5}Z?5VKw}G&WI(W0>RzuEKES6;Q^e zFjcwtwQ|sr6En*jH8902xfWY9*_-&}-dG_ka&MJVEhSKwrTX_G%bMzAkOXBV{MzDu z#p)u@#1YI*Io9aPfByxjf>E`5A=3wfCR@BGrvU@1we*9Gbucy7A+|Q$pVrO`5t9hx z{Jq`F=d}hO!b1_3)8ft}7r2F!Es&Ee@9Nxy-~J{cQLt`S<$*n;OKk2?T@#>I7DsTU z%Fr&Gl)y^6roi|$0{YmoU6!CBulUPw2y+7@CxHPXRw-R(4aSL_eOlkqji1iCu1!O7 zdhC6+NWhWRT}Z3`2*UWZ_^y@Q2xY>pi)VmmQUZyiG{}+MGHHncbldKsP?0wivxS&p zyS_d0l%Dlb4<$FOa`oKsWq=NtzJVQ>s#7JY@)_mG~KzpeQp}osE}>?WJMK@w8|-nKT7dH zadk$qwvG?MOf0cC7_$rc6jF{6!+_ebroQ6@(hQ_E6jp%}G)J#HLFQDr) zhW5J$3w(_V;Z%~w@8AkTn!OQ2<`6b3kMK}clbYTWib|ab2L>OJZk*tbk0a^t8y`yJ zK%crYXUyz2cum?wrpHGW6;Q!GCPA(4ea%BKQ=mXqHb=m9Oiidje|EhSQUJ-r#!Ihi zZTp&EGtgV)D4Qf>&}J6aatRZ3wP0aH)VOwu0Pv}WGt^u$f5z z==k{eE1HQ0^Ly3LF>XFveeD~JC0RbSOIb_f0oOK!h<%!8G<&8u?di&u!3=)^8f+Ml zxPr=%pH51S5~G5~{GQLi=x9}=OMLR!QVw|?!y-o_IP7*Ai5MueNf9OfpDHnk{JGGL z&Qm*rEqf=+eslMhE+A!+f4TvJjs+Y_Xf;*;5xt^L#{YapFWIA|LPp#bUag#>!TY>^*TMtt zk?98H(g*P#YRRe~Q70%WIAiPa&gT-|A^SDjATGQ1p_YB?f-QVpq~)%D^>$S6H3fQpqQSsfamy}q76!;AI z0QG(~giSZJPQFXF{php`+t*9zgWI?Vx%=;`RrQSax^ZI&7F7t$ppS&C_+sCJ>oz`- zX@hzR+FLDQsAkYuZzV`GE&<4AYP4)#=7Et2 zMxZSqibR)W41AiE*wB!*c3*_9$7P!zmzYu}0D!_;2PTa-qjF33hGckuOb3#ew1)MA z(B|ZF-s**H5a6YD%G;kvt91O-%WKlA z%*MIn#x@?&K4sQ;9Xu6&SMv(Zsw~iUe%({MKrsVIU6Fu+@v4p)O3{%p38BNL$9;BA zAA3sa6JSR^L9Q3ximkDIXeg)FV#u}`Iw%N|Uc5hD#G3bK?UED>wmRTGUpls$xn*{Q zfW`kY3}$wC!L*A@0@|>f;K1lyeEhuE6YuXPn;UVaRV%BffvmygLr%0+4}zlheoIpj zLA!UpkGnDS>pKLg%PMd)SDgywWFxmRDKD~BJIXbC{Y z8#-7M-24LT)M2hXILppKsC$}OletU_bUe-ik7Tr%cNV~g%uNh7 zaOaA>H^9#y_=))N)jcWW5RKryzTA#F#8}mNyF!$d7~chQc!Ly^NMdv&_d_0A5}J8c=av|2P_8(+3S@>2dl^&Sxl?;brbK7^=SCO#K3DIk@NAW z45y?~VN+OWLNj2|GIuECiB7Bv_e(}|CpLm&kocOJEbkch$K5D5tZYy3ehkxEXTs34 zBMDQ@Q;ToXBv8dqvklzjqf^4-G2oj`43QU)t~jk?^AaY8(a(4WQWdTwSQNqbi_Pdx zzJNjWuQHByvS(i`6|M~3%YkC^Evw*RZk@1{N*3RR*nLB!_{y_s{=~DoTp5)iEa<=H bj>dCj?&mAXi&F{ARYpAz$k=4#E_aPOF5T4# literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem new file mode 100644 index 000000000..11504a6c9 --- /dev/null +++ b/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem @@ -0,0 +1,54 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIJmTBLBgkqhkiG9w0BBQ0wPjApBgkqhkiG9w0BBQwwHAQIGOnVLKvKgHACAggA +MAwGCCqGSIb3DQILBQAwEQYFKw4DAgcECIGG28/TJRaGBIIJSFh6ZJN8xJaH30k1 +rH+L1DyTH4CELsRd164RoqfUq8rp6+XcNG/S41PdI3efK28iyLx85AcqFArqHHUM +7yGA6vmuSVz39ZXdu1CVMi7OQ4dTdg3KBXaz96cnyZ1EsoruibQDn6mQq1D0LG1u +5phVLsnfQLDiOFUFm6X4q9FdJj6NUJdOY5XRJZEu6q3wEmVXDfL7zYXJl2gZuiGO +eDp/d0IVcYFd1od0V8qI90nWPCeZziMcnR8wAloV2p8xiqHuVhV/4+I53ENqbqxo +v+0aObO3JsaxLVML6JGhabd2k1v3QAZLawMVGBNa/7IEOBVeD4j6VSiZPdKN473i +oXxRsya6HqCD4kx+zbofbL4dEZliLDmISoHRl9ipQfr1+Y//JYhEf6gLzmdFqP3q +N92+rVwdRWfmVdIsgdLiinJWO1xZ1dUnWvGOYZNjurGVHqv2IrDBd8FDjl/yMU6z +osnOynXspoSA53kQ46ZvArln8QGzWt1bD466nu86dXOkrfbAmS59VaNY4Y1D033l +p+d94eEjRwFUsQbRWv8mvb+KPn+nYcWZFNCg2RhTUKnU0Od1SHY5f9jfGFUyobYp +/tg6eizo7T+rU9PZoTkGnCf1qOwNPpbSh5FcLVajeDiYokoyc17VQJcc1xzKeIOs +tcU7kK/jA1GofCVhH3S1OPYqdjGvvoTVAYyXH3SuH04a8UJvFsRl8XdTNYOyecqi +tH17PADDa2UTvKE2dLhxxVUoO9dZVeEorNiFWCQ/rsl5M1eT9KXh2lvZRM+Yxo3+ +NPP1/CGa5sDYx9aZQPoJc6aTJicmqx/srRtMR/RuwBUUH/1AENHdNLBL2IPfYjsL +xKU/ox62cs2sCIywkBkR9WHPTqaU7HU6rlD8phinfljA5rMj3P3zrNk8XqfHNTpV +BVA2Eczf1HNizvLxE3+vp/eGYCecuLfnqwRj5zAjiYPcy8s1vETDkXSWdc9vQf2c +zky7tdAMS2WLFIulBIqYFDhicdlp9LTaeUOiwNIbPLVMzKy8zzW3UhMXyVi9EBCt +IDhkUTdaLmiHB0F14NISRK6/isa4Vfe+/Z9ML/z9iFm8eC6LMy+/YgWZD0vYIwow +JKHuEuuUuDR7gkHgZ/cvjMsyOI26uiW/W8qfAk7OR/qlZXMgWCQTgVBEcgmZio8U +BcVDRPKFqLCKOINQ4poxt45Ez+xRlYdwExPnSRD7ZMFPYcUllO+S72JYGsYdGs60 +i529HgXKp/bS+1JKK/zxQmjApZ5kWGmc7kAUU76zprd7NKmdpWv1nbDJBtNU1bmW +nzE/GXyNMYVGuxGnu/9scKSRATLzvLXtviRKoZVFm+6m7gR8J4GVSu8TxaXlYxg9 +NR+UujQJeoChR2dHvAZXc5g3j9rjQXZYlMm6M5rq0CbMlfeAFSwyG3Gm6D/cRxJg +MHPaU7HpeZL5r7rJwNfUt/c/cuQ5C8CadgTgDd1NW50uEUoJh3QGE2K3Jq+0wG9h +sk72lnVzH0bnMbJDXEV1btrs2qnnSots74+8F24gQb9PRQliuk50LGNddgrGoSgB +b9eaBl7cgcy7T1XUv4I+aEW+sfa8bGBffIF2nk3oCrkW9Sbdeh8qSE9uthewpGvK +WxBhCn6zUryHmt5ppiC6JrHJridCSu4RNbYL2umAM4DNh4lE5rBvFrCHaqet7hdy +wheQGRQnRzNru5alCxfNWXXuOp9naFmF5RFDWvSXukn8qfxzRcjMhvNS+z21O9nK +LPRaX9AICLGC+1C++Ka4pjVJVT/WhElXVap313Oj/Rc6KvRCdGpqMLVxPIrPFvbj +vzNFa/YEU3RK/wjO6/kQPtlcfwMzZFkDHMWiYMCUoi6Dpvze/mKSTA9G9lmc+/BF +sgqLZM7yltTmiGKQUDSlUOs08ZmPw1+HSOu2DZKWQ+2XoHSMih5ezu7GZ0xvUt4T +BHV95sRDCAvUywGTIPhx5xa+gICVeL97DOUCS+Y+WJYmeSlZ5r+dyg2V7+CX+qjr +ENMpouV8bIMpN05qXez8MuO4vJdDDsjqxq+y5kwN/ugb+DOq5okeRIaWRPWdyceT +NCayiE+5nnfdPMQAAJqZ/LGSx09fyamJqhcG3RJosFfrVPjj7aASUWi1BFjxIe1L +3fFSU9UDh9hfJczZx+hNKb56vhgrO+DaIbDMNMQqh6C2zdCirBT6M1NXhWvHKjkj +/MNyLBwnCWTUZ7gufn/0MAr1DaeoE6TzcwDCpW6ntXF9tG7L4DVbA8Cqy+M0HnQL +Pi2BCh4KrRiV1G4N8xDDCQw6IkfKRGGO6wCJ1HTnA2xmKqCzE2Ul8S/3+aEEpRNT +3FrcrEi+nzAkzBBkPcHaxayx3mR00Wv/mwcI7SoYKKfuidESQy+VBAHqekTmSELw +YRTdrXTKNWYlyms7pKMOgdqZAhFVOYxKBVaiuUeOGtvCNZ2qf7TOG/pT3nqTAbAg +UeP7kvf2BaYlKoFog3uvRypcWLomQqY6hwvWW7IwquHwxeFdCHHeNrr9CoBrF2lz +Z162/inTRzSbUhjumhLGEiJSzZyrEErjBjF5jE07TioEgmnXyCFWoc4nBnZ2+KXb +J7/QWMsCJwb/CsvQxegd8X6SwLDfH/28py+UAqSTi/HA2GY/68Q3PQ17V7fyg5l0 +h6FShhYOKmForUNwqn2TwGPH+0swtOU2fKFq0NMHPSvta6U0wpaRZMCojw8AV3y+ +lUdKesz2siioxfeIxhD1Rm1KZ5p1N/FgyAEu6wpWj8okQjxRiGe+GQLheQpsL/ZW +HsljSq73o9v/F7xNE9xqIxEGnUDYIAQCX47CiQOTTR9Lz6N/t36Eew1+KjiI4Xda +VCu207ipFQPpNkvc13z2NWC/4NeRQg82LCYep4y+ZblcyqLqvMwOhJro2Kxoe1e1 +rv1Mwzd0ShUosb/2CChCRdirLJFXaXzm+PzBZoCyJEWcSxi56By58jh6H+XeUxCj +0fl7eXLHb4sv8kf7P0KJGCxNY7ik3TLJjncsA9gLmFAeRcYWKq5SuSEW3DmfDSXZ +CC1pSsvFBvV60ZFm2r96xqFHKFHOb15qm9DBXphr870nZQB7+QgRwp+jd+xdXUDS +PelVGau5uoRN2tFPNvoeGyww9lkuNAJWK4U+LdLwHsQOUIKTf1rgwz5C077omOh4 +3u+3zMTCMRDNhiJb3g== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/server1-ms.req.sha256 b/third_party/mbedtls/test/data/server1-ms.req.sha256 new file mode 100644 index 000000000..b0d9414a2 --- /dev/null +++ b/third_party/mbedtls/test/data/server1-ms.req.sha256 @@ -0,0 +1,16 @@ +-----BEGIN NEW CERTIFICATE REQUEST----- +MIICgTCCAWkCAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoTCFBvbGFyU1NMMRow +GAYDVQQDExFQb2xhclNTTCBTZXJ2ZXIgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6Jv7joRZDb7ogWUtPxQ1BHlhJZ +ZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVBQ3dfOXwJBEeCsFc5cO2j7BUZ +HqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYElXwqxU8YwfhU5rPla7n+SnqYF +W+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk65Wb3P5BXhem2mxbacwCuhQs +FiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZPcG6ezr1YieJTWZ5uWpJl4og/ +DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEAAaAAMA0GCSqGSIb3DQEBCwUA +A4IBAQBY/1nnYQ3ThVyeZb1Z2wLYoHZ5rfeJCedyP7N/gjJZjhrMbwioUft2uHpb ++OZQfxRXJTbtj/1wpRMCoUMLWzapS7/xGx3IjoPtl42aM4M+xVYvbLjExL13kUAr +eE4JWcMIbTEPol2zSdX/LuB+m27jEp5VsvM2ty9qOw/T4iKwjFSe6pcYZ2spks19 +3ltgjnaamwqKcN9zUA3IERTsWjr5exKYgfXm2OeeuSP0tHr7Dh+w/2XA9dGcLhrm +TA4P8QjIgSDlyzmhYYmsrioFPuCfdi1uzs8bxmbLXbiCGZ8TDMy5oLqLo1K+j2pF +ox+ATHKxQ/XpRQP+2OTb9sw1kM59 +-----END NEW CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/server1-nospace.crt b/third_party/mbedtls/test/data/server1-nospace.crt new file mode 100644 index 000000000..932c236a5 --- /dev/null +++ b/third_party/mbedtls/test/data/server1-nospace.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDhDCCAmygAwIBAgIBHzANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTQwMzI2MDkyMzEyWhcNMjQwMzIzMDkyMzEyWjA7MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEHBvbGFyc3NsLmV4YW1wbGUwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpAh89QGrVVVOL/TbugmUuFWFeib+4 +6EWQ2+6IFlLT8UNQR5YSWWSHa/0r4Eb5c77dz5LhkVvtZqBviSl5RYDQg2rVQUN3 +Xzl8CQRHgrBXOXDto+wVGR6oMwhHwQVCqf1Mw7Tf3QYfTRBRQGdzEw9A+G2BJV8K +sVPGMH4VOaz5Wu5/kp6mBVvnE5eFtSOS2dQkBtUJJYl1B92mGo8/CRm+rWUsZOuV +m9z+QV4XptpsW2nMAroULBYknErczdD3Umdz8S2gI/1+9DHKLXDKiQsE2y6mT3Bu +ns69WIniU1meblqSZeKIPwyUGaPd5eidlRPtKdurcBLcWsprF6tSglSxAgMBAAGj +gZIwgY8wCQYDVR0TBAIwADAdBgNVHQ4EFgQUH3TWPynBdHRFOwUSLD2ovUNZAqYw +YwYDVR0jBFwwWoAUtFrkpbPe0lL2udWmlQ/rPrzH/f+hP6Q9MDsxCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEZMBcGA1UEAxMQUG9sYXJTU0wgVGVzdCBD +QYIBADANBgkqhkiG9w0BAQsFAAOCAQEAXs4vQqlIlxrMbE6IwAHLcGJuz17Ru/en +H9bUnnSh1pxa+NHMKZHBG3GT0iaxsVtXf56/tXH4+HL7ntJjrczGN1PbhMGPyt94 +556ZgDxkHT9k7KjPAIs9BrjFHvl9NyIZzcbwkiC0qGvdzjSfe3AiSYuhXI/9/Hog +uUwReH+T2U/ICEHQ5O8aV5nvpgqL3EeEmyx3bu+YXtZMWQUYzX+ya4TnKVPdqwbf +ebr6v1hLXrUFl6rZ3wEJ6MqUW3SGZRkCVNZUOD6Ky3+EiLwYFhuKGdFqSS0JAAD7 +ZO3yPu5hu3BhAQYavK4Yyfi9IQmubBqxopPwyzjG1HPw2lj+oapH0w== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server1-v1.crt b/third_party/mbedtls/test/data/server1-v1.crt new file mode 100644 index 000000000..47f1fff1c --- /dev/null +++ b/third_party/mbedtls/test/data/server1-v1.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDITCCAgkCDFOitscEzU2OvIALwTANBgkqhkiG9w0BAQsFADBQMRwwGgYDVQQD +ExNQb2xhclNTTCBUZXN0IENBIHYxMRAwDgYDVQQLEwd0ZXN0aW5nMREwDwYDVQQK +EwhQb2xhclNTTDELMAkGA1UEBhMCTkwwIhgPMjAxNDA2MTkxMDA5MTFaGA8yMDI0 +MDYxODEwMDkxMVowTjEaMBgGA1UEAxMRc2VydmVyMS9pbnQtY2EtdjExEDAOBgNV +BAsTB3Rlc3RpbmcxETAPBgNVBAoTCFBvbGFyU1NMMQswCQYDVQQGEwJOTDCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6J +v7joRZDb7ogWUtPxQ1BHlhJZZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVB +Q3dfOXwJBEeCsFc5cO2j7BUZHqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYEl +XwqxU8YwfhU5rPla7n+SnqYFW+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk +65Wb3P5BXhem2mxbacwCuhQsFiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZP +cG6ezr1YieJTWZ5uWpJl4og/DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEA +ATANBgkqhkiG9w0BAQsFAAOCAQEAPJl3fbVeTJ6gVAvCoLYM8JY5U7ZhrCCdBghw +WuZBS/TWwf4WLP0G/ZtTyTOENcT0gWHf0/VnXtNPw2/yBjWsLtTXxN2XQlEVf3j/ +WcQxWgSESYdx/sT/uTW6qihuONPWkTQizmx7OG6vBuGx3g54s9/oeJKXOraNqud3 +G4KBrytOazliMfoKO2hnzaeydpaDtb2tZX8apN/6KqQpTAcXsWrZRW9XEHWq2sNz +IR1nIE1F/9gnqi9Xy0HQprteLRUvM4tEQ35m4H20eS5Y9gJlE/DqXmMQ7aiU8DgP +krj+Z18pcrssO+Etv0BOiPjmU9TWWpDMj34ef7U/OH5qJxkSrA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server1.ca.crt b/third_party/mbedtls/test/data/server1.ca.crt new file mode 100644 index 000000000..84691d683 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.ca.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDRTCCAi2gAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIFNlcnZlciAxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVhXom/ +uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq1UFD +d185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPhtgSVf +CrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1lLGTr +lZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsupk9w +bp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQIDAQAB +o1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQfdNY/KcF0dEU7BRIsPai9 +Q1kCpjAfBgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0B +AQUFAAOCAQEAgt0Fk6cLMjsZUkVpkpTw6EJuKA48H8ieUSTDzYoaDWJQsFY34OIc +0UpfMwl1jl0qEcVboOdcJHug0EXsfm6XUlSJkPnmcdt/N4gU3/TVkdQwqbvrwjae +S+Jb1E7fTAiauMi6++svV/sfKqE3OCTJWF+6D0LdgnxEVZM6DvnFU9Jvw+CPTIx6 ++SYZLm5sOTL0sWMIxwAEjwGJ3T1m0sjPjnnl4Jn/XtD8UuRRYB/RS6e2TlKovwWP +G3eUdEs2QJ5lnnD+d7AUYq9nAYnb42M1ZdAxRQxxu2wweiTpUubvT4W6wkG8veix +UM45EKsxPinnK0rK9bzrPDwpntIHhEUcSQ== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server1.ca.der b/third_party/mbedtls/test/data/server1.ca.der new file mode 100644 index 0000000000000000000000000000000000000000..a5ff059bc76c412a5af81105e3e3dc2082ab2f04 GIT binary patch literal 841 zcmXqLVssC%f_kI=F#?@mywZ`mBGN;klTQhjX9KsO_<5g$57CK zAH?C};RwjjNh}Hu_A!(+5C;h{^9aC%6hcyqOB9?P4dldm4J{3f3=IrTOiT>SqQrTP zkhumn1PzxmkboF22sb=9wWut$NWsvciBSpJwT!F`%uS5^3_x)%rY1&4hLue6whmcW zLxa2jn!RgE)e}vO>)gNNh3kad?>fYSE`M|maGxd=nbMy9SNnn6&*FV|&rfK`77Q9{jMpRO6g)xWwK~|@ge|-*bxqp{U-d7;d zA-!0b-{D7YqiQ_Y#^7THb)uGQen!2kpEPe7YxHyB>8)FpC*8cF!giHYwX>A{?lP%< zdrrxHYg2VnUQeBU=bvMo__A9$(V1tMc8TbSsm$@ZbN0gbp!DL8x(k&5)_pNNrCV^S zlbhwX-ZKA!ym{yLMsz+3j+~blH7WH`hds{}$;Ee{zL+~z_^syc)dfO#qE2OtuMTPo z*~rAq$iTQb*dP!bXR^YKjQ?3!4VZzHfh;gkW%*ddSVZJYuGwoIEGcodW);%0U9s0W zl4+TNJV;uZMZ!R=L1atRlck&QT?+cP^Xjsx{IBiy9RK?tIoN@T1Q_g$3{7`gCoktV zvX%^T&73sl!waW84L%$B6Y~O94xjCk;!O(J5N7`1k<3M}cw^4ezE~~6qtOeV$EZ{< zxZwJxE^m5JNauu~&kAqXn|FxZ|8jNW6@!(#Umr4?=lv-9ir;-7j#)cS?E3v$Km516 z)o*m>7B z?b33M3UC0Gj`s7 zoNStU!O)ebaCeSDmCDPYXYc)6cO7!vv-icufOD1ts}1cmpKE)a`nu<}jg98KOYAMK GGM)e>#6WKV literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/server1.ca_noauthid.crt b/third_party/mbedtls/test/data/server1.ca_noauthid.crt new file mode 100644 index 000000000..e66956d58 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.ca_noauthid.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDJDCCAgygAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIFNlcnZlciAxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVhXom/ +uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq1UFD +d185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPhtgSVf +CrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1lLGTr +lZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsupk9w +bp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQIDAQAB +ozIwMDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQfdNY/KcF0dEU7BRIsPai9 +Q1kCpjANBgkqhkiG9w0BAQUFAAOCAQEAMblPCsjj6RJ8sOm54sdlSJOTGWEo/1LF +q1bJnKE3FXDeU8pbhEhpfsd2zcKdJxzp7Bg8Ms/xKBuOZhn/4C/n2FwZpEeAsS7J +tZifKp+GXVs0xbcji9aB8niWXSl/CoICpvHpMAz8k2HT4LDvbC2ElXkqLT7n7k1B +/ODI3BME34NquyBTDezQb4Gz7bx42OKLrxZkKrO3UF3TQTYBZvlH7IO7SvZhQPGk +b8a2jKYfeQCCIvcywWQ7qzlgzTgnXJ0RrLyCqOqLFs6ztHPgclHa+XYF5yftSKIS +zTJLT0IWBtwgB2opv7YSx7tKYhj+uHHY7C3iSXzAgPy5TYkissGXbw== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server1.cert_type.crt b/third_party/mbedtls/test/data/server1.cert_type.crt new file mode 100644 index 000000000..34fe4f6a4 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.cert_type.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDUjCCAjqgAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIFNlcnZlciAxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVhXom/ +uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq1UFD +d185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPhtgSVf +CrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1lLGTr +lZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsupk9w +bp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQIDAQAB +o2AwXjAJBgNVHRMEAjAAMB0GA1UdDgQWBBQfdNY/KcF0dEU7BRIsPai9Q1kCpjAf +BgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zARBglghkgBhvhCAQEEBAMC +BkAwDQYJKoZIhvcNAQEFBQADggEBAElJPaCG6aFHoymoCrzckPfjENxgXW2czh5t +TsMPshkzX5p2AU89GBGdy0gQwoPuMtcznsDe4adM6Na8f30YDffATsgDECMIWtV1 +XVYKQIwFmZzEt4B+5sUmyMOLtTuuZBThOLPwOw8e4RnILKOYPHnQNRf6Eap4lFDx +lp2pAaiXMDWH88gmWoU5XrGTppllYV0IorzJ4xV9Sg3ittNwNO40ehVQDAseFwZH +iyh9iHz4BqtWjElmQ3hL8N/Cbqp3iN15h2pUgIj8JIt9rCsIZrsG3K42iSlPzEn2 +DCzWQSj9cQNCRVJnwgJAWnC1Hx0YYFQMgQquVxnK15THTGQAeB8= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server1.cert_type.crt.openssl.v3_ext b/third_party/mbedtls/test/data/server1.cert_type.crt.openssl.v3_ext new file mode 100644 index 000000000..bd225ff74 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.cert_type.crt.openssl.v3_ext @@ -0,0 +1,5 @@ +[v3_ext] +basicConstraints = CA:false +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid +nsCertType=server diff --git a/third_party/mbedtls/test/data/server1.cert_type_noauthid.crt b/third_party/mbedtls/test/data/server1.cert_type_noauthid.crt new file mode 100644 index 000000000..c3a66ea41 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.cert_type_noauthid.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDMTCCAhmgAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIFNlcnZlciAxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVhXom/ +uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq1UFD +d185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPhtgSVf +CrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1lLGTr +lZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsupk9w +bp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQIDAQAB +oz8wPTAJBgNVHRMEAjAAMB0GA1UdDgQWBBQfdNY/KcF0dEU7BRIsPai9Q1kCpjAR +BglghkgBhvhCAQEEBAMCBkAwDQYJKoZIhvcNAQEFBQADggEBAEPc9VSJK60+WkAw +GZX3/AWJE8h31fZ++2Zu7O1V2ddI68Qoha41bORXdizfQFjTJkV/QHjbaCZKqpt0 +riGKvRpXfl3VDlf9fEZUnQEfIk612AjLwkHoNIKbCitrVoWu+p2V4kuKQpFky/so +wr/sl29fWa4innFUVgmQC52l4UiIU2rCV0RTpLofVKWRZPlzIi+AlMFkvz3JqRP0 +raKw8DHdGlrLg22VelrY0dXjUriWrSTDi2QdB+yn0FdrPap2nZiFctW1S0/wOCy+ +r0uVYQ+IsebJYST9dUuQNhWSZOhsjxOo+Gp36tywQzrjXFk7Jai8AkHoBmZVmx6b +a0/J7/w= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server1.crt b/third_party/mbedtls/test/data/server1.crt new file mode 100644 index 000000000..258da5e17 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDPzCCAiegAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIFNlcnZlciAxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVhXom/ +uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq1UFD +d185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPhtgSVf +CrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1lLGTr +lZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsupk9w +bp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQIDAQAB +o00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQfdNY/KcF0dEU7BRIsPai9Q1kCpjAf +BgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQUFAAOC +AQEAf2k5OiORp60gBNqioC2mIqSXA0CU/qzllt8IvlcMv1V0PAP9f4IEm5mdkERr +UXjnB1Tr3edrsvXLgZ9vEosbFpNMsKfsmBkpjgWG2ui8pdn8cJiws4k4h5fuueSw +Ps1FLK5Tfpi+GJyPqk4ha9Ojp2p9opuA0aIfLuxI+0UzXH4wgrEW/Yydowv959gf +gGSl766CRdUvJbXOeVryFjFTRfLFFNfTvrftZk1dl8tas1nim8xfWet+BZVvq2zY +C7LeCI9nrfuAxfMJTrWFp17y72+hCDk7NEaB2ZLVuAM/ri7LWrr2V2hLFdIAhfC2 +nUaulRRpGt/ZTISw6uSIumNoNA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server1.crt.der b/third_party/mbedtls/test/data/server1.crt.der new file mode 100644 index 0000000000000000000000000000000000000000..f9f58a0fcdfedb27375d2ec5e1a98520cb730d83 GIT binary patch literal 835 zcmXqLVzxJEVp3ng%*4pV#K>sC%f_kI=F#?@mywZ`mBGN;klTQhjX9KsO_<5g$57CK zAH?C};RwjjNh}Hu_A!(+5C;h{^9aC%6hcyqOB9?P4dldm4J{3f3=IrTOiT>SqQrTP zkhumn1PzxmkboF22sb=9wWut$NWsvciBSpJwT!F`%uS5^3_x)%rY1&4hLue6whmcW zLxa2jn!RgE)e}vO>)gNNh3kad?>fYSE`M|maGxd=nbMy9SNnn6&*FV|&rfK`77Q9{jMpRO6g)xWwK~|@ge|-*bxqp{U-d7;d zA-!0b-{D7YqiQ_Y#^7THb)uGQen!2kpEPe7YxHyB>8)FpC*8cF!giHYwX>A{?lP%< zdrrxHYg2VnUQeBU=bvMo__A9$(V1tMc8TbSsm$@ZbN0gbp!DL8x(k&5)_pNNrCV^S zlbhwX-ZKA!ym{yLMsz+3j+~blH7WH`hds{}$;Ee{zL+~z_^syc)dfO#qE2OtuMTPo z*~rAq$iTSR*T5SbfwICZOa=@FvcTY!<=xmVg6g+#4>y4+zBq(ffdi$Ltfu~p1tYo>Bjl_ zLfz70lYKTUe=|c;vyZjy){8w$Z~iHmv0-zkMf>!3JD+T@JL{^mF1T*SK8ZQ~tNawR zFE3u6Rl8_*!^K7NdT%^_yBf#T88mGa``a^jG56o+H{=^qmcC!ts z!LFZ-0`X?fMp;;VpWJq4mSIxo+#GieyUNzvsC%f_kI=F#?@mywZ`mBGN;klTQhjX9KsO_<5g$57CK zAH?C};RwjjNh}Hu_A!(+5C;h{^9aC%6hcyqOB9?P4dldm4Gj&942=v;OiT>SqQrTP zkhumn1PzxmkboF22sb=9wWut$NWsvciBSpJwT!F`%uS5^3_x)%rY1&4hLue6whmcW zLxa2jn!RgE)e}vO>)gNNh3kad?>fYSE`M|maGxd=nbMy9SNnn6&*FV|&rfK`77Q9{jMpRO6g)xWwK~|@ge|-*bxqp{U-d7;d zA-!0b-{D7YqiQ_Y#^7THb)uGQen!2kpEPe7YxHyB>8)FpC*8cF!giHYwX>A{?lP%< zdrrxHYg2VnUQeBU=bvMo__A9$(V1tMc8TbSsm$@ZbN0gbp!DL8x(k&5)_pNNrCV^S zlbhwX-ZKA!ym{yLMsz+3j+~blH7WH`hds{}$;Ee{zL+~z_^syc)dfO#qE2OtuMTPo z*~rAq$iTSR*T5SbfwICZOa=@FvcTY!FH%ccPe~-etutVQ*+wqDnp6m_JcfzA8T@! z2_4#?pxHEGwy}oaoy!&9XSv6&+kN)tBZ-cE+n*oVexg{pW2@8JB_Rtuw_Njkbn3>( zwTEW^|4}IR@x>9_+>%qXcl|gs)nv~rr=WGNJp6ong3V9&{W4z|@u*t-)+TEX&O+Zs z<;vTH)_U*$ac;Ll%;nGDGb%sa5T9cm5d2X3+f|2et~z@4x6W7p4 literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/server1.ext_ku.crt b/third_party/mbedtls/test/data/server1.ext_ku.crt new file mode 100644 index 000000000..3c4f854a2 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.ext_ku.crt @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDpzCCAo+gAwIBAgIBITANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTQwNDAxMTQ0NDQzWhcNMjQwMzI5MTQ0NDQzWjA8MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxGjAYBgNVBAMTEVBvbGFyU1NMIFNlcnZlciAxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVhXom/ +uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq1UFD +d185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPhtgSVf +CrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1lLGTr +lZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsupk9w +bp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQIDAQAB +o4G0MIGxMAkGA1UdEwQCMAAwHQYDVR0OBBYEFB901j8pwXR0RTsFEiw9qL1DWQKm +MGMGA1UdIwRcMFqAFLRa5KWz3tJS9rnVppUP6z68x/3/oT+kPTA7MQswCQYDVQQG +EwJOTDERMA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3Qg +Q0GCAQAwCwYDVR0PBAQDAgXgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3 +DQEBCwUAA4IBAQANtiYR2P6+a7rEtJARIgpurw1URYejATbbp3ZhaHBW603Wyb2+ +KJtm1KPCzoju/qTRt65YYkt+tu1wTzamyrkPxt8bBKmxiWnu5j1HLxdjOz8VW9lf +vTb5egR4dU9eNXni/5QkzrdkMO+ob4puDXY7ytPuGX6YfNVhCkrhBlYDJNE57CkK +vpCNj3+Te8PEkWPAEaUhqCnQk6qvPvpBfc/hqgwzlRMt3u5NkiVOuH72dtr4fOI1 +nlAU8D2wuvDVr3X5281ONNEtHU6rXe98vlUzS9QV9lBDdsO9nRYJzv2Nb1cjRIM5 +JZl0ILLR2tc6E/W5YXalNp37jfrFii1U9WrJ +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server1.key b/third_party/mbedtls/test/data/server1.key new file mode 100644 index 000000000..4281a5f52 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEogIBAAKCAQEAqQIfPUBq1VVTi/027oJlLhVhXom/uOhFkNvuiBZS0/FDUEeW +Ellkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq1UFDd185fAkER4KwVzlw7aPs +FRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPhtgSVfCrFTxjB+FTms+Vruf5Ke +pgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1lLGTrlZvc/kFeF6babFtpzAK6 +FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsupk9wbp7OvViJ4lNZnm5akmXi +iD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQIDAQABAoIBABaJ9eiRQq4Ypv+w +UTcVpLC0oTueWzcpor1i1zjG4Vzqe/Ok2FqyGToGKMlFK7Hwwa+LEyeJ3xyV5yd4 +v1Mw9bDZFdJC1eCBjoUAHtX6k9HOE0Vd6woVQ4Vi6OPI1g7B5Mnr/58rNrnN6TMs +x58NF6euecwTU811QJrZtLbX7j2Cr28yB2Vs8qyYlHwVw5jbDOv43D7vU5gmlIDN +0JQRuWAnOuPzZNoJr4SfJKqHNGxYYY6pHZ1s0dOTLIDb/B8KQWapA2kRmZyid2EH +nwzgLbAsHJCf+bQnhXjXuxtUsrcIL8noZLazlOMxwNEammglVWW23Ud/QRnFgJg5 +UgcAcRECgYEA19uYetht5qmwdJ+12oC6zeO+vXLcyD9gon23T5J6w2YThld7/OW0 +oArQJGgkAdaq0pcTyOIjtTQVMFygdVmCEJmxh/3RutPcTeydqW9fphKDMej32J8e +GniGmNGiclbcfNOS8E5TGp445yZb9P1+7AHng16bGg3Ykj5EA4G+HCcCgYEAyHAl +//ekk8YjQElm+8izLtFkymIK0aCtEe9C/RIRhFYBeFaotC5dStNhBOncn4ovMAPD +lX/92yDi9OP8PPLN3a4B9XpW3k/SS5GrbT5cwOivBHNllZSmu/2qz5WPGcjVCOrB +LYl3YWr2h3EGKICT03kEoTkiDBvCeOpW7cCGl2cCgYBD5whoXHz1+ptPlI4YVjZt +Xh86aU+ajpVPiEyJ84I6xXmO4SZXv8q6LaycR0ZMbcL+zBelMb4Z2nBv7jNrtuR7 +ZF28cdPv+YVr3esaybZE/73VjXup4SQPH6r3l7qKTVi+y6+FeJ4b2Xn8/MwgnT23 +8EFrye7wmzpthrjOgZnUMQKBgE9Lhsz/5J0Nis6Y+2Pqn3CLKEukg9Ewtqdct2y0 +5Dcta0F3TyCRIxlCDKTL/BslqMtfAdY4H268UO0+8IAQMn9boqzBrHIgs/pvc5kx +TbKHmw2wtWR6vYersBKVgVpbCGSRssDYHGFu1n74qM4HJ/RGcR1zI9QUe1gopSFD +xDtLAoGAVAdWvrqDwgoL2hHW3scGpxdE/ygJDOwHnf+1B9goKAOP5lf2FJaiAxf3 +ectoPOgZbCmm/iiDmigu703ld3O+VoCLDD4qx3R+KyALL78gtVJYzSRiKhzgCZ3g +mKsIVRBq4IfwiwyMNG2BYZQAwbSDjjPtn/kPBduPzPj7eriByhI= +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/server1.key_usage.crt b/third_party/mbedtls/test/data/server1.key_usage.crt new file mode 100644 index 000000000..9d70b0018 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.key_usage.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDTzCCAjegAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIFNlcnZlciAxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVhXom/ +uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq1UFD +d185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPhtgSVf +CrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1lLGTr +lZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsupk9w +bp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQIDAQAB +o10wWzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQfdNY/KcF0dEU7BRIsPai9Q1kCpjAf +BgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zAOBgNVHQ8BAf8EBAMCBeAw +DQYJKoZIhvcNAQEFBQADggEBAHM8eESmE8CQvuCw2/w1JSWKaU9cJIvrtpJXavRC +yMEv6SQL0hxrNZBhFPM8vAiq6zBdic2HwuiZ9N/iEXuCf92SOcK4b/2/Flos0JI5 +quu4eGkwoNrOvfZUcO7SB8JHUvmJtTP+avF3QeRfHo9bHRtnyOs9GXqq+CMZiNgO +Bw+/tAOml3tV1Uf+yjp6XroWLRNMbvY1Sor4UW6FFMpOii/vlJ4450OlpcJdRU70 +LpHfxjmPNvc9YOPWve75/+CNF9lMi29UoEUYslxMPylZ/L0vYxi+xuvQBTaLiZeP +CJ59Mc63LEmJNSAwnnV8s2KXL/Okm32lf6sy0fjsrvAdoCc= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server1.key_usage.crt.openssl.v3_ext b/third_party/mbedtls/test/data/server1.key_usage.crt.openssl.v3_ext new file mode 100644 index 000000000..e255027ee --- /dev/null +++ b/third_party/mbedtls/test/data/server1.key_usage.crt.openssl.v3_ext @@ -0,0 +1,5 @@ +[v3_ext] +basicConstraints = CA:false +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid +keyUsage=critical, digitalSignature, nonRepudiation, keyEncipherment diff --git a/third_party/mbedtls/test/data/server1.key_usage_noauthid.crt b/third_party/mbedtls/test/data/server1.key_usage_noauthid.crt new file mode 100644 index 000000000..b2d5d8304 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.key_usage_noauthid.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDLjCCAhagAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIFNlcnZlciAxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVhXom/ +uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq1UFD +d185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPhtgSVf +CrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1lLGTr +lZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsupk9w +bp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQIDAQAB +ozwwOjAJBgNVHRMEAjAAMB0GA1UdDgQWBBQfdNY/KcF0dEU7BRIsPai9Q1kCpjAO +BgNVHQ8BAf8EBAMCBeAwDQYJKoZIhvcNAQEFBQADggEBAJVYcBoNiXBLOY53sJcH +1X0oQA/KMVODJP1+rr/e6SuyROVgqUfFA/7Hn5evb94Ftxlb0d8uOlpoHWtyaRVw +JR3tKCGiyiSzAS5tXiioOYt6fLDg9B2mpvFqa9ISqsvzbR3aNj/8uM7ni/aSxjhf +L40SvCHbAsN5N087K55wiqUvkJFs2Ifl9IqCYjjq32Wuroi8lnPXSY1LTQ3DZqdj +yogX+HWj+Psd+U8BLyFnfuqKeQ0U2xpJiFMbdG+IkzPYj+IjNZo6+rcK0LQkEcZm +l4oQaDEaXi+7SqNbdpBJ5K3ZrSNNdt8pc1xhue2XXMFLEqO94ERTwnxiTg9TGRZ0 +u2U= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server1.noauthid.crt b/third_party/mbedtls/test/data/server1.noauthid.crt new file mode 100644 index 000000000..ba195ebf5 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.noauthid.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDHjCCAgagAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIFNlcnZlciAxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVhXom/ +uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq1UFD +d185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPhtgSVf +CrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1lLGTr +lZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsupk9w +bp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQIDAQAB +oywwKjAJBgNVHRMEAjAAMB0GA1UdDgQWBBQfdNY/KcF0dEU7BRIsPai9Q1kCpjAN +BgkqhkiG9w0BAQUFAAOCAQEAwEHP5IyPK/D9CEXfyQqE72RHl8uqMQCl6LcHiv9C +pTnu7hsbGgP0j8BIgBxHcpiJzPuCLNzOsCsfMfgfE9H0c50ePqNXpyOl6bLcQaw5 +TJapUFWtrZmC/nZWYZOvQ01/0QVKkgW2aXnQWV0EBqdwRHtJs3F1wBpKv/4bR31p +kzDMP+WOdIvMzxh5o0lSi++Tx6h7mk61PU/sw0K5NwxF6X7AIvla0sbOcEa9lH8W +bnkuieYbLA6euNPha1gjltT3aEkP5ZdnL/Vy/paCsT17bs6MNfeh99dd+WBvyBzQ +Hx9XRgMLRd1bZv0sli9q7Yz3V+d+cmv3D/3nRYVI/+wUmw== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server1.pubkey b/third_party/mbedtls/test/data/server1.pubkey new file mode 100644 index 000000000..93c669c61 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.pubkey @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJl +LhVhXom/uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA +0INq1UFDd185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMP +QPhtgSVfCrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZ +vq1lLGTrlZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokL +BNsupk9wbp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJU +sQIDAQAB +-----END PUBLIC KEY----- diff --git a/third_party/mbedtls/test/data/server1.req.cert_type b/third_party/mbedtls/test/data/server1.req.cert_type new file mode 100644 index 000000000..39ff3fdba --- /dev/null +++ b/third_party/mbedtls/test/data/server1.req.cert_type @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICpTCCAY0CAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRow +GAYDVQQDDBFQb2xhclNTTCBTZXJ2ZXIgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6Jv7joRZDb7ogWUtPxQ1BHlhJZ +ZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVBQ3dfOXwJBEeCsFc5cO2j7BUZ +HqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYElXwqxU8YwfhU5rPla7n+SnqYF +W+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk65Wb3P5BXhem2mxbacwCuhQs +FiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZPcG6ezr1YieJTWZ5uWpJl4og/ +DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEAAaAkMCIGCSqGSIb3DQEJDjEV +MBMwEQYJYIZIAYb4QgEBBAQDAgZAMA0GCSqGSIb3DQEBBQUAA4IBAQBErZcEaEEO +hLbRVuB3+N5by0mogdJsatJFSgW2/VztLvQBYu0O+VmTbZwCAWejA8U+cr6uPlyf +b4lDqj3W+XykeK9bSzoSr1yNO2VAcE74Y0ZrSz2yXMfT5R9IyKqQZspaKD8MOmYH +BqUH9o/phnGcaEG5xeSfhM1O/YNZuGnlLDQBGwT5puHOaLfjECvs8eZLopIWEBlD +QkRlhYqZBwhGZ8D/TxqG4teFtnBX5FG7UoSSVuneBrkREQM7ElhtD9jCWjfMnqm1 +59G84OycClwaKU7/Dm6zeMGDyFoMksBud7lyDHMhxvwSbzb1JR5v8iBsmVY2dhHt +Ot3Fx2be0gIr +-----END CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/server1.req.cert_type_empty b/third_party/mbedtls/test/data/server1.req.cert_type_empty new file mode 100644 index 000000000..70fd11133 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.req.cert_type_empty @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICpDCCAYwCAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRow +GAYDVQQDDBFQb2xhclNTTCBTZXJ2ZXIgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6Jv7joRZDb7ogWUtPxQ1BHlhJZ +ZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVBQ3dfOXwJBEeCsFc5cO2j7BUZ +HqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYElXwqxU8YwfhU5rPla7n+SnqYF +W+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk65Wb3P5BXhem2mxbacwCuhQs +FiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZPcG6ezr1YieJTWZ5uWpJl4og/ +DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEAAaAjMCEGCSqGSIb3DQEJDjEU +MBIwEAYJYIZIAYb4QgEBBAMDAQAwDQYJKoZIhvcNAQEFBQADggEBACU0LLDBIMgG +B7gyNANHv42RovhQdzmUulqJPHNHx3v9G17F00bEykJb/r3awW6l5fhY/6oPydsY +hnWEM6VVCUkJ6Zqm2/wE49uaNTbFd9JU4OywRBfjHHSTOGnYFg+BYSfwaIkSCkx2 +kVhyklFm7My5wkyDPpFSU2tTfgsgaQMyTm93a2kxM7qJ/X3gFDG8o7R0vyojFVSI +mwsF9QsC6N9cygdFx23zCB0KsJ9KfmBqaTsdbKh8BsocYm5FJCw4WS/CBrCWBj+z +N7yEJj4SR5F+P7sFc5I0HANov5wQe8E3+WxxQt8jcqIje6DlaaGja44cXOzvFQyx +Hg/6H5EtBQc= +-----END CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/server1.req.key_usage b/third_party/mbedtls/test/data/server1.req.key_usage new file mode 100644 index 000000000..30e481243 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.req.key_usage @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICnzCCAYcCAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRow +GAYDVQQDDBFQb2xhclNTTCBTZXJ2ZXIgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6Jv7joRZDb7ogWUtPxQ1BHlhJZ +ZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVBQ3dfOXwJBEeCsFc5cO2j7BUZ +HqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYElXwqxU8YwfhU5rPla7n+SnqYF +W+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk65Wb3P5BXhem2mxbacwCuhQs +FiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZPcG6ezr1YieJTWZ5uWpJl4og/ +DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEAAaAeMBwGCSqGSIb3DQEJDjEP +MA0wCwYDVR0PBAQDAgXgMA0GCSqGSIb3DQEBBQUAA4IBAQBsJ3v1Ar2X28GJsRSJ +WRQwFQwIbR/D0cHrwTf0ZfZttClytuc18JZlwkH3EG/rNkWaFp6MKIZoRMOBuSPc +MNvvKIo4nPaeouDPruymx0gNenlyRL3D4OZpBO/BmQIQjbUKWFbzEnEqvwvMDUnG +8w7UjPSFcxj2HzENr62HLPKKnVpL3nDXWK1a2A77KF9aMxyoWQ6FXb2xPD9cJjdo +c1jwskQbgosQzKKwwp5yxq0zRD3EAGw4A78mgHMfgFprq9e9azaB0JeyFG2Vn0t0 +L+vfiDEVQ3eJXSCen1kEVyHRju8g53UcSgd+JicWFboFj2/mJBuyW6yM++RGA9B5 +Zd62 +-----END CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/server1.req.key_usage_empty b/third_party/mbedtls/test/data/server1.req.key_usage_empty new file mode 100644 index 000000000..47e56bf1e --- /dev/null +++ b/third_party/mbedtls/test/data/server1.req.key_usage_empty @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICnjCCAYYCAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRow +GAYDVQQDDBFQb2xhclNTTCBTZXJ2ZXIgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6Jv7joRZDb7ogWUtPxQ1BHlhJZ +ZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVBQ3dfOXwJBEeCsFc5cO2j7BUZ +HqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYElXwqxU8YwfhU5rPla7n+SnqYF +W+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk65Wb3P5BXhem2mxbacwCuhQs +FiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZPcG6ezr1YieJTWZ5uWpJl4og/ +DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEAAaAdMBsGCSqGSIb3DQEJDjEO +MAwwCgYDVR0PBAMDAQAwDQYJKoZIhvcNAQEFBQADggEBAAqQ/EU/3oMt7YW4vWgm +0Q7F4v7DrFEoVMWfBzNWhMNIijzoaWKY8jwseZMzu8aCNQlJnM7c9FJF+OCgS7L5 +0ctwzjfCOi5I5cKgqv8WpuMZWHXNtB7YtjUWIZVri/RazCncZEwJGCKQjmQYrGJm +Qmu2+D+DWY+nEW47ZfDH9jOJtatnREjSNsKzc44L9zUaEy3bi+m455XGH+ABmeb7 +Iqmguh10xUyY6rEOFEuqvFyFr5g1eb53Rr5CQxGfw1j+2bbSh+rVb6Ehf9LAijyu +Ygqa91hGab/CjykS6HMrD91ouWtt2Rt3zCKo4Xxe8dlAszKB4W83M9OgDVVpiCfC +t3A= +-----END CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/server1.req.ku-ct b/third_party/mbedtls/test/data/server1.req.ku-ct new file mode 100644 index 000000000..ebd01f5cc --- /dev/null +++ b/third_party/mbedtls/test/data/server1.req.ku-ct @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICsjCCAZoCAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRow +GAYDVQQDDBFQb2xhclNTTCBTZXJ2ZXIgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6Jv7joRZDb7ogWUtPxQ1BHlhJZ +ZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVBQ3dfOXwJBEeCsFc5cO2j7BUZ +HqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYElXwqxU8YwfhU5rPla7n+SnqYF +W+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk65Wb3P5BXhem2mxbacwCuhQs +FiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZPcG6ezr1YieJTWZ5uWpJl4og/ +DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEAAaAxMC8GCSqGSIb3DQEJDjEi +MCAwCwYDVR0PBAQDAgXgMBEGCWCGSAGG+EIBAQQEAwIGQDANBgkqhkiG9w0BAQUF +AAOCAQEAWUMyIXHi4BbIxOeCD/Vtu9LGV8ENMV7dwYVEQcwrt1AHahtYgUtkoGcP +lOPqg1lbg22bu8dLPoY4HAzxCOAGs27otWL5LlE9M5QPH1RedEycmOuYrMl6K988 +hfDBJ+OkgCShcM91+udrc0gpDEI7N01A+fmukQ6EiaQjIf7HME/EKQqhEuEQMXHC +GBvdNuEF5BfV3aAYuT+xfdXDU2ZWwXXWAHGmVh3ntnhtEG6SnXSnBATU2wa4tpBd +KLbEbcsiy2uj0OLJlvG6LqsNggtkD58GCGpLpaVxdW80yw+f/krwLpeyocE1KGcT +7eX+9yhLe9NIZojvevw+53dNE7BUfw== +-----END CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/server1.req.md4 b/third_party/mbedtls/test/data/server1.req.md4 new file mode 100644 index 000000000..15585499c --- /dev/null +++ b/third_party/mbedtls/test/data/server1.req.md4 @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICgTCCAWkCAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRow +GAYDVQQDDBFQb2xhclNTTCBTZXJ2ZXIgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6Jv7joRZDb7ogWUtPxQ1BHlhJZ +ZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVBQ3dfOXwJBEeCsFc5cO2j7BUZ +HqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYElXwqxU8YwfhU5rPla7n+SnqYF +W+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk65Wb3P5BXhem2mxbacwCuhQs +FiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZPcG6ezr1YieJTWZ5uWpJl4og/ +DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEAAaAAMA0GCSqGSIb3DQEBAwUA +A4IBAQAu8SbWDi5udXrs/lljV+jdHky2BFuVFNxZgj5QvLslffdx2/Tj4MVCsqkY +tAcy5g/urW1WwHcnJ20PRgt60m3BSUJffdKF/kgRyTN1oBFpApHGAJEHPahR/3Mz +hMBk4D/r6lga60iUhIfky8o8KU+ovHXROHzGfYaVySatpyJW6tkJOz/1ZKLI4s4K +HGLFxKBd6bvyuMSCpV31J7ZHPQfSH38VEEaTLJ2QOltWDX5k4DlL/F3I5K4VFWOm +DMndMXkb7LhL9jcaJJRzEmbX3aMdt2aXhQt2LDFMnMCeSHI014URnQd6IzRQYZPp +qGZf2UmuJdLeIMzSNX2rZ+SVDX9o +-----END CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/server1.req.md5 b/third_party/mbedtls/test/data/server1.req.md5 new file mode 100644 index 000000000..57714ede3 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.req.md5 @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICgTCCAWkCAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRow +GAYDVQQDDBFQb2xhclNTTCBTZXJ2ZXIgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6Jv7joRZDb7ogWUtPxQ1BHlhJZ +ZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVBQ3dfOXwJBEeCsFc5cO2j7BUZ +HqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYElXwqxU8YwfhU5rPla7n+SnqYF +W+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk65Wb3P5BXhem2mxbacwCuhQs +FiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZPcG6ezr1YieJTWZ5uWpJl4og/ +DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEAAaAAMA0GCSqGSIb3DQEBBAUA +A4IBAQCEiv3QM4xyKhYTsoOjyzQdXMhsXK3Kpw+Rh874Hf6pXHxUaYy7xLUZUx6K +x5Bvem1HMHAdmOqYTzsE9ZblAMZNRwv/CKGS3pvMkx/VZwXQhFGlHLFG//fPrgl3 +j4dt20QsWP8LnL4LweYSYI1wt1rjgYRHeF6bG/VIck6BIYQhKOGlzIwWUmfAGym6 +q4SYrd+ObZullSarGGSfNKjIUEpYtfQBz31f5tRsyzSps7oG4uc7Xba4qnl2o9FN +lWOMEER79QGwr7+T41FTHFztFddfJ06CCjoRCfEn0Tcsg11tSMS0851oLkMm8RyY +aozIzO82R3Em7aPhZBiBDy3wZC2l +-----END CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/server1.req.sha1 b/third_party/mbedtls/test/data/server1.req.sha1 new file mode 100644 index 000000000..578ec7f79 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.req.sha1 @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICgTCCAWkCAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRow +GAYDVQQDDBFQb2xhclNTTCBTZXJ2ZXIgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6Jv7joRZDb7ogWUtPxQ1BHlhJZ +ZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVBQ3dfOXwJBEeCsFc5cO2j7BUZ +HqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYElXwqxU8YwfhU5rPla7n+SnqYF +W+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk65Wb3P5BXhem2mxbacwCuhQs +FiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZPcG6ezr1YieJTWZ5uWpJl4og/ +DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEAAaAAMA0GCSqGSIb3DQEBBQUA +A4IBAQCiYQMOv2ALPUeg8wHKn9L5SdDbNxOzuMwhYsCYTw2TJMQO7NLUq6icEzxY +pUIIFt60JUQjZHxQSY3y9cSivwKXQA7pPfaPaFC/aMA2GxG23t2eaIWNQX8MfcWf +XAa8bl/vmC1MTov+mP2DGoXRiKYORrEInyDS2RaTathvHckcAv25nCIx7wYO9tC9 +LUwyoE9bhiQ7fo3KFlz4dK1HukyCM/FoPbJuL7NgdzmKVPyYCLh5Ah+TTD6+sltz +dFc4fj28w1v3jsBXz+tLrgFQidzuUI2poxt5UwU9TKY0dAJaTCtfIRcXW3h6DGG7 +EDR6rim6sbIQkGzYvGqs4TNoJOR+ +-----END CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/server1.req.sha224 b/third_party/mbedtls/test/data/server1.req.sha224 new file mode 100644 index 000000000..a4f2af4c1 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.req.sha224 @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICgTCCAWkCAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRow +GAYDVQQDDBFQb2xhclNTTCBTZXJ2ZXIgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6Jv7joRZDb7ogWUtPxQ1BHlhJZ +ZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVBQ3dfOXwJBEeCsFc5cO2j7BUZ +HqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYElXwqxU8YwfhU5rPla7n+SnqYF +W+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk65Wb3P5BXhem2mxbacwCuhQs +FiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZPcG6ezr1YieJTWZ5uWpJl4og/ +DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEAAaAAMA0GCSqGSIb3DQEBDgUA +A4IBAQArYR2mLKU5lsHyAyGHr4PlmC/cfePmCRyC/mj1riGTjDlNC2X3J1VZDqKb +U/uUxLudP7sbuttRksIAREATT74Pa40bMWiPUlBfA/M2mFTmKb/91uXeIISW8DL3 +xM/5BCDrhnZ/cjP23gKDgJRk+IGBNhYZDGz50TIBbDJ2e4GDkFjzANngUW64UcCQ +7hZOYtnYLBnoRvPwtal5jZqHwsgaPPePXu+SQ8mfuAJwJ78MOCAaKw0IP1h1OnPG +iubdl34lSIaYWwbHTdjaqUSQG3SSs4oxEvluYymrpZ6XGKXtphJXEPdTRiLu9d9l +A5NYVgvqHFQPmuXS92zrGzB788pV +-----END CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/server1.req.sha256 b/third_party/mbedtls/test/data/server1.req.sha256 new file mode 100644 index 000000000..6d21dc5d9 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.req.sha256 @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICgTCCAWkCAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRow +GAYDVQQDDBFQb2xhclNTTCBTZXJ2ZXIgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6Jv7joRZDb7ogWUtPxQ1BHlhJZ +ZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVBQ3dfOXwJBEeCsFc5cO2j7BUZ +HqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYElXwqxU8YwfhU5rPla7n+SnqYF +W+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk65Wb3P5BXhem2mxbacwCuhQs +FiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZPcG6ezr1YieJTWZ5uWpJl4og/ +DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEAAaAAMA0GCSqGSIb3DQEBCwUA +A4IBAQCVlSU7qeKri7E3u8JCZbCyjsGJTH9iHYyeDZ/nDLig7iKGYvyNmyzJ76Qu ++EntSmL2OtL95Yqooc6h1AQHzoCs+SO2wPoTUs3Ypi9r7vNNVO3ZnnxVtGgqCRVA +W+z9W4p2mHXQhgW1HkuLa5JD1SvJViyZbx9z3ie1BQ9NVKfv++ArPIv70zBtA7O3 +PZNG1JYN30Esz7RsCDRHbz6Npvu9ggUQL/U3mvQQ+Yo+xhwu1yFV+dRH7PebBeQv +vjcD2fXDabeofK3zztIpUIyUULX0GGClM9jslgJ/ZHUlArWKpLZph0AgF1Dzts// +M6c/sRw7gtjXmV0zq2tf2fL4+e2b +-----END CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/server1.req.sha384 b/third_party/mbedtls/test/data/server1.req.sha384 new file mode 100644 index 000000000..b857af7f1 --- /dev/null +++ b/third_party/mbedtls/test/data/server1.req.sha384 @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICgTCCAWkCAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRow +GAYDVQQDDBFQb2xhclNTTCBTZXJ2ZXIgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6Jv7joRZDb7ogWUtPxQ1BHlhJZ +ZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVBQ3dfOXwJBEeCsFc5cO2j7BUZ +HqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYElXwqxU8YwfhU5rPla7n+SnqYF +W+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk65Wb3P5BXhem2mxbacwCuhQs +FiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZPcG6ezr1YieJTWZ5uWpJl4og/ +DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEAAaAAMA0GCSqGSIb3DQEBDAUA +A4IBAQBy35zHYLiYaScq1niQkzQ/BScUbdiWd2V90isBsB5Q3NjVoJl/yCaMrla3 +2XfrutpFpdqwenl5jM0o6+enKCmfur+z2/ije69Dju2aBd6A62cx1AEvFiMq7lyF +4DYJ32+2ty6KA8EhzE3NFs7zKXxmD5ybp+oXNEvXoeU3W8a+Ld5c1K/n+Ipa0TUy +cFBs6dCsbYO9wI6npwWqC5Hc9r/0zziMFO+4N5VORdYUFqObq4vCYOMXETpl8ryu +lGZorNUoJ7vV55T31CDqEtb0EE+nO+nT4agfDobncYjvc3WpQuLtUB4UwR5gpZl6 +ZI+j4uwikOgGO9gcx4IjaRP3q63F +-----END CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/server1.req.sha512 b/third_party/mbedtls/test/data/server1.req.sha512 new file mode 100644 index 000000000..85d52460d --- /dev/null +++ b/third_party/mbedtls/test/data/server1.req.sha512 @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICgTCCAWkCAQAwPDELMAkGA1UEBhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRow +GAYDVQQDDBFQb2xhclNTTCBTZXJ2ZXIgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6Jv7joRZDb7ogWUtPxQ1BHlhJZ +ZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVBQ3dfOXwJBEeCsFc5cO2j7BUZ +HqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYElXwqxU8YwfhU5rPla7n+SnqYF +W+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk65Wb3P5BXhem2mxbacwCuhQs +FiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZPcG6ezr1YieJTWZ5uWpJl4og/ +DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEAAaAAMA0GCSqGSIb3DQEBDQUA +A4IBAQBb8jNpt0nkNVWstVoOCepQSF5R1R9hF0yEr7mk3HB9oO/nK07R1Oamgjw+ +CHQReTSjIKUX53o7ZwNZB5E+jBDsGz/2Yyj/vxNHJFk2exELtW30he8K2omVHE1F +XESbftCssWLNpTSDq6ME12+llkEDtgCtkv69oRUkuuF5ESUSZRGIZN4Vledm8SM1 +uGFtaG/PXbBbtUaNwNISDeIWDKRtbuca5web+QEi1djiUH21ZWIGEpOy7mtkYmRs +Qt1D32FoaqFNhafiaxNIXO11yd4lgpaDDlmrOSBsELcTIF9916o3DwMeVXy0GONW +BrwaO8q8rg+C+xvMY7858Kk8kwjb +-----END CERTIFICATE REQUEST----- diff --git a/third_party/mbedtls/test/data/server1.v1.crt b/third_party/mbedtls/test/data/server1.v1.crt new file mode 100644 index 000000000..47e3813ed --- /dev/null +++ b/third_party/mbedtls/test/data/server1.v1.crt @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC6zCCAdMCAQEwDQYJKoZIhvcNAQEFBQAwOzELMAkGA1UEBhMCTkwxETAPBgNV +BAoMCFBvbGFyU1NMMRkwFwYDVQQDDBBQb2xhclNTTCBUZXN0IENBMB4XDTE5MDIx +MDE0NDQwNloXDTI5MDIxMDE0NDQwNlowPDELMAkGA1UEBhMCTkwxETAPBgNVBAoM +CFBvbGFyU1NMMRowGAYDVQQDDBFQb2xhclNTTCBTZXJ2ZXIgMTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKkCHz1AatVVU4v9Nu6CZS4VYV6Jv7joRZDb +7ogWUtPxQ1BHlhJZZIdr/SvgRvlzvt3PkuGRW+1moG+JKXlFgNCDatVBQ3dfOXwJ +BEeCsFc5cO2j7BUZHqgzCEfBBUKp/UzDtN/dBh9NEFFAZ3MTD0D4bYElXwqxU8Yw +fhU5rPla7n+SnqYFW+cTl4W1I5LZ1CQG1QkliXUH3aYajz8JGb6tZSxk65Wb3P5B +Xhem2mxbacwCuhQsFiScStzN0PdSZ3PxLaAj/X70McotcMqJCwTbLqZPcG6ezr1Y +ieJTWZ5uWpJl4og/DJQZo93l6J2VE+0p26twEtxaymsXq1KCVLECAwEAATANBgkq +hkiG9w0BAQUFAAOCAQEAfuGhX2pcmQglXcslzRuastNUW8AGatDsjssDec27L/c6 +bCz/yQCaZtw2gk9QLsYMOtef/hfb7Rbu5fLwCn4zcQdmuh17nHcWh7fmtXsoebiz +kzV4GMEaU+Cc6ws1h8GuLTLKpr/iMYFBhT1cjVGmi0C2FHBj8vbWv7sEEIUovrMQ +7eh1Y1NkZa+w0sagiMfhWs2DTzNikby9mmJYUSmKTX1dI23YYPEIG+3shkY88VC0 +IBuH2i+pUXKN+xKhh9bbwLGdHIfNHhuIvfkkALhDuAOvqAis1buEAUoHR3qahHkh +2nzY/ROBG3+NCSDggHEf6xxCDg8xZpkdbKKRFMGBCA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server10-badsign.crt b/third_party/mbedtls/test/data/server10-badsign.crt new file mode 100644 index 000000000..eca171f35 --- /dev/null +++ b/third_party/mbedtls/test/data/server10-badsign.crt @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBWjCCAQCgAwIBAgIBSzAKBggqhkjOPQQDAjBKMQswCQYDVQQGEwJVSzERMA8G +A1UEChMIbWJlZCBUTFMxKDAmBgNVBAMTH21iZWQgVExTIFRlc3QgaW50ZXJtZWRp +YXRlIENBIDMwHhcNMTUwOTAxMTM0NzU1WhcNMjUwODI5MTM0NzU1WjAUMRIwEAYD +VQQDEwlsb2NhbGhvc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQcbffp2qXq +oZyychmoCRxzrd4Vu96m47NPBehtEC46aTeXgDnBdf++znABrAtfXBRNQz8ARIeY +Bmskr22rlKjyow0wCzAJBgNVHRMEAjAAMAoGCCqGSM49BAMCA0gAMEUCIQDLc+Io +rg8VxEbCgVv8iH+kOIEn9MjhpvKzvwUoV+6rjQIgZU/RXAyc1a+H2+soGfNEIOBQ +AzO3pJx7WJAApZuBX10= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server10-bs_int3.pem b/third_party/mbedtls/test/data/server10-bs_int3.pem new file mode 100644 index 000000000..b84cee7c3 --- /dev/null +++ b/third_party/mbedtls/test/data/server10-bs_int3.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIBWjCCAQCgAwIBAgIBSzAKBggqhkjOPQQDAjBKMQswCQYDVQQGEwJVSzERMA8G +A1UEChMIbWJlZCBUTFMxKDAmBgNVBAMTH21iZWQgVExTIFRlc3QgaW50ZXJtZWRp +YXRlIENBIDMwHhcNMTUwOTAxMTM0NzU1WhcNMjUwODI5MTM0NzU1WjAUMRIwEAYD +VQQDEwlsb2NhbGhvc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQcbffp2qXq +oZyychmoCRxzrd4Vu96m47NPBehtEC46aTeXgDnBdf++znABrAtfXBRNQz8ARIeY +Bmskr22rlKjyow0wCzAJBgNVHRMEAjAAMAoGCCqGSM49BAMCA0gAMEUCIQDLc+Io +rg8VxEbCgVv8iH+kOIEn9MjhpvKzvwUoV+6rjQIgZU/RXAyc1a+H2+soGfNEIOBQ +AzO3pJx7WJAApZuBX10= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBtDCCATqgAwIBAgIBTTAKBggqhkjOPQQDAjBLMQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxKTAnBgNVBAMTIFBvbGFyU1NMIFRlc3QgSW50ZXJtZWRp +YXRlIEVDIENBMB4XDTE1MDkwMTE0MDg0M1oXDTI1MDgyOTE0MDg0M1owSjELMAkG +A1UEBhMCVUsxETAPBgNVBAoTCG1iZWQgVExTMSgwJgYDVQQDEx9tYmVkIFRMUyBU +ZXN0IGludGVybWVkaWF0ZSBDQSAzMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE +732fWHLNPMPsP1U1ibXvb55erlEVMlpXBGsj+KYwVqU1XCmW9Z9hhP7X/5js/DX9 +2J/utoHyjUtVpQOzdTrbsaMQMA4wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQDAgNo +ADBlAjAJRxbGRas3NBmk9MnGWXg7PT1xnRELHRWWIvfLdVQt06l1/xFg3ZuPdQdt +Qh7CK80CMQD7wa1o1a8qyDKBfLN636uKmKGga0E+vYXBeFCy9oARBangGCB0B2vt +pz590JvGWfM= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server10.crt b/third_party/mbedtls/test/data/server10.crt new file mode 100644 index 000000000..96a4040ce --- /dev/null +++ b/third_party/mbedtls/test/data/server10.crt @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBWjCCAQCgAwIBAgIBSzAKBggqhkjOPQQDAjBKMQswCQYDVQQGEwJVSzERMA8G +A1UEChMIbWJlZCBUTFMxKDAmBgNVBAMTH21iZWQgVExTIFRlc3QgaW50ZXJtZWRp +YXRlIENBIDMwHhcNMTUwOTAxMTM0NzU1WhcNMjUwODI5MTM0NzU1WjAUMRIwEAYD +VQQDEwlsb2NhbGhvc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQcbffp2qXq +oZyychmoCRxzrd4Vu96m47NPBehtEC46aTeXgDnBdf++znABrAtfXBRNQz8ARIeY +Bmskr22rlKjyow0wCzAJBgNVHRMEAjAAMAoGCCqGSM49BAMCA0gAMEUCIQDLc+Io +rg8VxEbCgVv8iH+kOIEn9MjhpvKzvwUoV+6rjQIgZU/RXAyc1a+H2+soGfNEIOBQ +AzO3pJx7WJAApZuBX1Q= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server10.key b/third_party/mbedtls/test/data/server10.key new file mode 100644 index 000000000..0088331ea --- /dev/null +++ b/third_party/mbedtls/test/data/server10.key @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEILBDMs7bRVxVg6ovTpf2zB9m+22jY7R3LNKRvCPfa6YJoAoGCCqGSM49 +AwEHoUQDQgAEHG336dql6qGcsnIZqAkcc63eFbvepuOzTwXobRAuOmk3l4A5wXX/ +vs5wAawLX1wUTUM/AESHmAZrJK9tq5So8g== +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/server10_int3-bs.pem b/third_party/mbedtls/test/data/server10_int3-bs.pem new file mode 100644 index 000000000..a9e06150b --- /dev/null +++ b/third_party/mbedtls/test/data/server10_int3-bs.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIBWjCCAQCgAwIBAgIBSzAKBggqhkjOPQQDAjBKMQswCQYDVQQGEwJVSzERMA8G +A1UEChMIbWJlZCBUTFMxKDAmBgNVBAMTH21iZWQgVExTIFRlc3QgaW50ZXJtZWRp +YXRlIENBIDMwHhcNMTUwOTAxMTM0NzU1WhcNMjUwODI5MTM0NzU1WjAUMRIwEAYD +VQQDEwlsb2NhbGhvc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQcbffp2qXq +oZyychmoCRxzrd4Vu96m47NPBehtEC46aTeXgDnBdf++znABrAtfXBRNQz8ARIeY +Bmskr22rlKjyow0wCzAJBgNVHRMEAjAAMAoGCCqGSM49BAMCA0gAMEUCIQDLc+Io +rg8VxEbCgVv8iH+kOIEn9MjhpvKzvwUoV+6rjQIgZU/RXAyc1a+H2+soGfNEIOBQ +AzO3pJx7WJAApZuBX1Q= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBtDCCATqgAwIBAgIBTTAKBggqhkjOPQQDAjBLMQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxKTAnBgNVBAMTIFBvbGFyU1NMIFRlc3QgSW50ZXJtZWRp +YXRlIEVDIENBMB4XDTE1MDkwMTE0MDg0M1oXDTI1MDgyOTE0MDg0M1owSjELMAkG +A1UEBhMCVUsxETAPBgNVBAoTCG1iZWQgVExTMSgwJgYDVQQDEx9tYmVkIFRMUyBU +ZXN0IGludGVybWVkaWF0ZSBDQSAzMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE +732fWHLNPMPsP1U1ibXvb55erlEVMlpXBGsj+KYwVqU1XCmW9Z9hhP7X/5js/DX9 +2J/utoHyjUtVpQOzdTrbsaMQMA4wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQDAgNo +ADBlAjAJRxbGRas3NBmk9MnGWXg7PT1xnRELHRWWIvfLdVQt06l1/xFg3ZuPdQdt +Qh7CK80CMQD7wa1o1a8qyDKBfLN636uKmKGga0E+vYXBeFCy9oARBangGCB0B2vt +pz590JvGWf0= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server10_int3_int-ca2.crt b/third_party/mbedtls/test/data/server10_int3_int-ca2.crt new file mode 100644 index 000000000..0df2c653b --- /dev/null +++ b/third_party/mbedtls/test/data/server10_int3_int-ca2.crt @@ -0,0 +1,40 @@ +-----BEGIN CERTIFICATE----- +MIIBWjCCAQCgAwIBAgIBSzAKBggqhkjOPQQDAjBKMQswCQYDVQQGEwJVSzERMA8G +A1UEChMIbWJlZCBUTFMxKDAmBgNVBAMTH21iZWQgVExTIFRlc3QgaW50ZXJtZWRp +YXRlIENBIDMwHhcNMTUwOTAxMTM0NzU1WhcNMjUwODI5MTM0NzU1WjAUMRIwEAYD +VQQDEwlsb2NhbGhvc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQcbffp2qXq +oZyychmoCRxzrd4Vu96m47NPBehtEC46aTeXgDnBdf++znABrAtfXBRNQz8ARIeY +Bmskr22rlKjyow0wCzAJBgNVHRMEAjAAMAoGCCqGSM49BAMCA0gAMEUCIQDLc+Io +rg8VxEbCgVv8iH+kOIEn9MjhpvKzvwUoV+6rjQIgZU/RXAyc1a+H2+soGfNEIOBQ +AzO3pJx7WJAApZuBX1Q= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBtDCCATqgAwIBAgIBTTAKBggqhkjOPQQDAjBLMQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxKTAnBgNVBAMTIFBvbGFyU1NMIFRlc3QgSW50ZXJtZWRp +YXRlIEVDIENBMB4XDTE1MDkwMTE0MDg0M1oXDTI1MDgyOTE0MDg0M1owSjELMAkG +A1UEBhMCVUsxETAPBgNVBAoTCG1iZWQgVExTMSgwJgYDVQQDEx9tYmVkIFRMUyBU +ZXN0IGludGVybWVkaWF0ZSBDQSAzMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE +732fWHLNPMPsP1U1ibXvb55erlEVMlpXBGsj+KYwVqU1XCmW9Z9hhP7X/5js/DX9 +2J/utoHyjUtVpQOzdTrbsaMQMA4wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQDAgNo +ADBlAjAJRxbGRas3NBmk9MnGWXg7PT1xnRELHRWWIvfLdVQt06l1/xFg3ZuPdQdt +Qh7CK80CMQD7wa1o1a8qyDKBfLN636uKmKGga0E+vYXBeFCy9oARBangGCB0B2vt +pz590JvGWfM= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC6TCCAdGgAwIBAgIBDzANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTMwOTI0MTYwODQyWhcNMjMwOTIyMTYwODQyWjBLMQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxKTAnBgNVBAMTIFBvbGFyU1NMIFRlc3QgSW50ZXJtZWRp +YXRlIEVDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE8Oih3fX5SLeN1dmFncQl +WMw9+Y6sXblhlrXBxhXxjwdwpCHENn+foUVdrqYVYa7Suv3QVeO6nJ19H3QNixW8 +ik1P+hxsbaq8bta78vAyHmC4EmXQLg1w7oxb9Q82qX1Yo4GVMIGSMB0GA1UdDgQW +BBQPib1jQevLXhco/2gwPcGI0JxYOTBjBgNVHSMEXDBagBS0WuSls97SUva51aaV +D+s+vMf9/6E/pD0wOzELMAkGA1UEBhMCTkwxETAPBgNVBAoTCFBvbGFyU1NMMRkw +FwYDVQQDExBQb2xhclNTTCBUZXN0IENBggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZI +hvcNAQELBQADggEBAAjeaTUaCBiXT1CYLVr6UFSeRNZBrDPnj6PwqUQTvgB5I5n6 +yXqoE4RYDaEL0Lg24juFxI26itBuypto6vscgGq77cfrP/avSdxU+xeZ4bCWvh3M +ddj9lmko2U8I8GhBcHpSuIiTvgKDB8eKkjeq3AsLGchHDvip8pB3IhcNfL7W94Zf +7/lH9VQiE3/px7amD32cidoPvWLA9U3f1FsPmJESUz0wwNfINpDjmPr8dGbkCN+M +CFhxo6sCfK8KLYG4nYX8FwxVR86kpSrO9e84AX0YYbdzxprbc2XOaebJ8+BDmzut +ARkD7DTXrodN1wV7jQJkrUuEwPj9Rhvk+MFRkaw= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server10_int3_int-ca2_ca.crt b/third_party/mbedtls/test/data/server10_int3_int-ca2_ca.crt new file mode 100644 index 000000000..c25482b8b --- /dev/null +++ b/third_party/mbedtls/test/data/server10_int3_int-ca2_ca.crt @@ -0,0 +1,120 @@ +-----BEGIN CERTIFICATE----- +MIIBWjCCAQCgAwIBAgIBSzAKBggqhkjOPQQDAjBKMQswCQYDVQQGEwJVSzERMA8G +A1UEChMIbWJlZCBUTFMxKDAmBgNVBAMTH21iZWQgVExTIFRlc3QgaW50ZXJtZWRp +YXRlIENBIDMwHhcNMTUwOTAxMTM0NzU1WhcNMjUwODI5MTM0NzU1WjAUMRIwEAYD +VQQDEwlsb2NhbGhvc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQcbffp2qXq +oZyychmoCRxzrd4Vu96m47NPBehtEC46aTeXgDnBdf++znABrAtfXBRNQz8ARIeY +Bmskr22rlKjyow0wCzAJBgNVHRMEAjAAMAoGCCqGSM49BAMCA0gAMEUCIQDLc+Io +rg8VxEbCgVv8iH+kOIEn9MjhpvKzvwUoV+6rjQIgZU/RXAyc1a+H2+soGfNEIOBQ +AzO3pJx7WJAApZuBX1Q= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBtDCCATqgAwIBAgIBTTAKBggqhkjOPQQDAjBLMQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxKTAnBgNVBAMTIFBvbGFyU1NMIFRlc3QgSW50ZXJtZWRp +YXRlIEVDIENBMB4XDTE1MDkwMTE0MDg0M1oXDTI1MDgyOTE0MDg0M1owSjELMAkG +A1UEBhMCVUsxETAPBgNVBAoTCG1iZWQgVExTMSgwJgYDVQQDEx9tYmVkIFRMUyBU +ZXN0IGludGVybWVkaWF0ZSBDQSAzMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE +732fWHLNPMPsP1U1ibXvb55erlEVMlpXBGsj+KYwVqU1XCmW9Z9hhP7X/5js/DX9 +2J/utoHyjUtVpQOzdTrbsaMQMA4wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQDAgNo +ADBlAjAJRxbGRas3NBmk9MnGWXg7PT1xnRELHRWWIvfLdVQt06l1/xFg3ZuPdQdt +Qh7CK80CMQD7wa1o1a8qyDKBfLN636uKmKGga0E+vYXBeFCy9oARBangGCB0B2vt +pz590JvGWfM= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC6TCCAdGgAwIBAgIBDzANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTMwOTI0MTYwODQyWhcNMjMwOTIyMTYwODQyWjBLMQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxKTAnBgNVBAMTIFBvbGFyU1NMIFRlc3QgSW50ZXJtZWRp +YXRlIEVDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE8Oih3fX5SLeN1dmFncQl +WMw9+Y6sXblhlrXBxhXxjwdwpCHENn+foUVdrqYVYa7Suv3QVeO6nJ19H3QNixW8 +ik1P+hxsbaq8bta78vAyHmC4EmXQLg1w7oxb9Q82qX1Yo4GVMIGSMB0GA1UdDgQW +BBQPib1jQevLXhco/2gwPcGI0JxYOTBjBgNVHSMEXDBagBS0WuSls97SUva51aaV +D+s+vMf9/6E/pD0wOzELMAkGA1UEBhMCTkwxETAPBgNVBAoTCFBvbGFyU1NMMRkw +FwYDVQQDExBQb2xhclNTTCBUZXN0IENBggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZI +hvcNAQELBQADggEBAAjeaTUaCBiXT1CYLVr6UFSeRNZBrDPnj6PwqUQTvgB5I5n6 +yXqoE4RYDaEL0Lg24juFxI26itBuypto6vscgGq77cfrP/avSdxU+xeZ4bCWvh3M +ddj9lmko2U8I8GhBcHpSuIiTvgKDB8eKkjeq3AsLGchHDvip8pB3IhcNfL7W94Zf +7/lH9VQiE3/px7amD32cidoPvWLA9U3f1FsPmJESUz0wwNfINpDjmPr8dGbkCN+M +CFhxo6sCfK8KLYG4nYX8FwxVR86kpSrO9e84AX0YYbdzxprbc2XOaebJ8+BDmzut +ARkD7DTXrodN1wV7jQJkrUuEwPj9Rhvk+MFRkaw= +-----END CERTIFICATE----- +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 0 (0x0) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=NL, O=PolarSSL, CN=PolarSSL Test CA + Validity + Not Before: Feb 12 14:44:00 2011 GMT + Not After : Feb 12 14:44:00 2021 GMT + Subject: C=NL, O=PolarSSL, CN=PolarSSL Test CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (2048 bit) + Modulus (2048 bit): + 00:c0:df:37:fc:17:bb:e0:96:9d:3f:86:de:96:32: + 7d:44:a5:16:a0:cd:21:f1:99:d4:ec:ea:cb:7c:18: + 58:08:94:a5:ec:9b:c5:8b:df:1a:1e:99:38:99:87: + 1e:7b:c0:8d:39:df:38:5d:70:78:07:d3:9e:d9:93: + e8:b9:72:51:c5:ce:a3:30:52:a9:f2:e7:40:70:14: + cb:44:a2:72:0b:c2:e5:40:f9:3e:e5:a6:0e:b3:f9: + ec:4a:63:c0:b8:29:00:74:9c:57:3b:a8:a5:04:90: + 71:f1:bd:83:d9:3f:d6:a5:e2:3c:2a:8f:ef:27:60: + c3:c6:9f:cb:ba:ec:60:7d:b7:e6:84:32:be:4f:fb: + 58:26:22:03:5b:d4:b4:d5:fb:f5:e3:96:2e:70:c0: + e4:2e:bd:fc:2e:ee:e2:41:55:c0:34:2e:7d:24:72: + 69:cb:47:b1:14:40:83:7d:67:f4:86:f6:31:ab:f1: + 79:a4:b2:b5:2e:12:f9:84:17:f0:62:6f:27:3e:13: + 58:b1:54:0d:21:9a:73:37:a1:30:cf:6f:92:dc:f6: + e9:fc:ac:db:2e:28:d1:7e:02:4b:23:a0:15:f2:38: + 65:64:09:ea:0c:6e:8e:1b:17:a0:71:c8:b3:9b:c9: + ab:e9:c3:f2:cf:87:96:8f:80:02:32:9e:99:58:6f: + a2:d5 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:TRUE + X509v3 Subject Key Identifier: + B4:5A:E4:A5:B3:DE:D2:52:F6:B9:D5:A6:95:0F:EB:3E:BC:C7:FD:FF + X509v3 Authority Key Identifier: + keyid:B4:5A:E4:A5:B3:DE:D2:52:F6:B9:D5:A6:95:0F:EB:3E:BC:C7:FD:FF + DirName:/C=NL/O=PolarSSL/CN=PolarSSL Test CA + serial:00 + + Signature Algorithm: sha1WithRSAEncryption + b8:fd:54:d8:00:54:90:8b:25:b0:27:dd:95:cd:a2:f7:84:07: + 1d:87:89:4a:c4:78:11:d8:07:b5:d7:22:50:8e:48:eb:62:7a: + 32:89:be:63:47:53:ff:b6:be:f1:2e:8c:54:c0:99:3f:a0:b9: + 37:23:72:5f:0d:46:59:8f:d8:47:cd:97:4c:9f:07:0c:12:62: + 09:3a:24:e4:36:d9:e9:2c:da:38:d0:73:75:61:d7:c1:6c:26: + 8b:9b:e0:d5:dc:67:ed:8c:6b:33:d7:74:22:3c:4c:db:b5:8d: + 2a:ce:2c:0d:08:59:05:09:05:a6:39:9f:b3:67:1b:e2:83:e5: + e1:8f:53:f6:67:93:c7:f9:6f:76:44:58:12:e8:3a:d4:97:e7: + e9:c0:3e:a8:7a:72:3d:87:53:1f:e5:2c:84:84:e7:9a:9e:7f: + 66:d9:1f:9b:f5:13:48:b0:4d:14:d1:de:b2:24:d9:78:7d:f5: + 35:cc:58:19:d1:d2:99:ef:4d:73:f8:1f:89:d4:5a:d0:52:ce: + 09:f5:b1:46:51:6a:00:8e:3b:cc:6f:63:01:00:99:ed:9d:a6: + 08:60:cd:32:18:d0:73:e0:58:71:d9:e5:d2:53:d7:8d:d0:ca: + e9:5d:2a:0a:0d:5d:55:ec:21:50:17:16:e6:06:4a:cd:5e:de: + f7:e0:e9:54 +-----BEGIN CERTIFICATE----- +MIIDhzCCAm+gAwIBAgIBADANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTEwMjEyMTQ0NDAwWhcNMjEwMjEyMTQ0NDAwWjA7MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA3zf8F7vglp0/ht6WMn1EpRagzSHx +mdTs6st8GFgIlKXsm8WL3xoemTiZhx57wI053zhdcHgH057Zk+i5clHFzqMwUqny +50BwFMtEonILwuVA+T7lpg6z+exKY8C4KQB0nFc7qKUEkHHxvYPZP9al4jwqj+8n +YMPGn8u67GB9t+aEMr5P+1gmIgNb1LTV+/Xjli5wwOQuvfwu7uJBVcA0Ln0kcmnL +R7EUQIN9Z/SG9jGr8XmksrUuEvmEF/Bibyc+E1ixVA0hmnM3oTDPb5Lc9un8rNsu +KNF+AksjoBXyOGVkCeoMbo4bF6BxyLObyavpw/LPh5aPgAIynplYb6LVAgMBAAGj +gZUwgZIwDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUtFrkpbPe0lL2udWmlQ/rPrzH +/f8wYwYDVR0jBFwwWoAUtFrkpbPe0lL2udWmlQ/rPrzH/f+hP6Q9MDsxCzAJBgNV +BAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEZMBcGA1UEAxMQUG9sYXJTU0wgVGVz +dCBDQYIBADANBgkqhkiG9w0BAQUFAAOCAQEAuP1U2ABUkIslsCfdlc2i94QHHYeJ +SsR4EdgHtdciUI5I62J6Mom+Y0dT/7a+8S6MVMCZP6C5NyNyXw1GWY/YR82XTJ8H +DBJiCTok5DbZ6SzaONBzdWHXwWwmi5vg1dxn7YxrM9d0IjxM27WNKs4sDQhZBQkF +pjmfs2cb4oPl4Y9T9meTx/lvdkRYEug61Jfn6cA+qHpyPYdTH+UshITnmp5/Ztkf +m/UTSLBNFNHesiTZeH31NcxYGdHSme9Nc/gfidRa0FLOCfWxRlFqAI47zG9jAQCZ +7Z2mCGDNMhjQc+BYcdnl0lPXjdDK6V0qCg1dVewhUBcW5gZKzV7e9+DpVA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server10_int3_spurious_int-ca2.crt b/third_party/mbedtls/test/data/server10_int3_spurious_int-ca2.crt new file mode 100644 index 000000000..c9d6715f4 --- /dev/null +++ b/third_party/mbedtls/test/data/server10_int3_spurious_int-ca2.crt @@ -0,0 +1,64 @@ +-----BEGIN CERTIFICATE----- +MIIBWjCCAQCgAwIBAgIBSzAKBggqhkjOPQQDAjBKMQswCQYDVQQGEwJVSzERMA8G +A1UEChMIbWJlZCBUTFMxKDAmBgNVBAMTH21iZWQgVExTIFRlc3QgaW50ZXJtZWRp +YXRlIENBIDMwHhcNMTUwOTAxMTM0NzU1WhcNMjUwODI5MTM0NzU1WjAUMRIwEAYD +VQQDEwlsb2NhbGhvc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQcbffp2qXq +oZyychmoCRxzrd4Vu96m47NPBehtEC46aTeXgDnBdf++znABrAtfXBRNQz8ARIeY +Bmskr22rlKjyow0wCzAJBgNVHRMEAjAAMAoGCCqGSM49BAMCA0gAMEUCIQDLc+Io +rg8VxEbCgVv8iH+kOIEn9MjhpvKzvwUoV+6rjQIgZU/RXAyc1a+H2+soGfNEIOBQ +AzO3pJx7WJAApZuBX1Q= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBtDCCATqgAwIBAgIBTTAKBggqhkjOPQQDAjBLMQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxKTAnBgNVBAMTIFBvbGFyU1NMIFRlc3QgSW50ZXJtZWRp +YXRlIEVDIENBMB4XDTE1MDkwMTE0MDg0M1oXDTI1MDgyOTE0MDg0M1owSjELMAkG +A1UEBhMCVUsxETAPBgNVBAoTCG1iZWQgVExTMSgwJgYDVQQDEx9tYmVkIFRMUyBU +ZXN0IGludGVybWVkaWF0ZSBDQSAzMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE +732fWHLNPMPsP1U1ibXvb55erlEVMlpXBGsj+KYwVqU1XCmW9Z9hhP7X/5js/DX9 +2J/utoHyjUtVpQOzdTrbsaMQMA4wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQDAgNo +ADBlAjAJRxbGRas3NBmk9MnGWXg7PT1xnRELHRWWIvfLdVQt06l1/xFg3ZuPdQdt +Qh7CK80CMQD7wa1o1a8qyDKBfLN636uKmKGga0E+vYXBeFCy9oARBangGCB0B2vt +pz590JvGWfM= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEATCCA4egAwIBAgIBDjAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MTMwOTI0MTU1NTE0WhcNMjMwOTIyMTU1NTE0WjBIMQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxJjAkBgNVBAMTHVBvbGFyU1NMIFRlc3QgSW50ZXJtZWRp +YXRlIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1Oc8nr6fMTq +vowV+CpC55i5BZGFGc50Eb4RLBSRTH1e7JepdFjAVbBtyQRJSiY1ja0tgLQDDKZR +wfEI+b4azse460InPHv7C1TN0upXlxuj6m9B1IlP+sBaM7WBC6dVfPO+jVMIxgkF +CaBCLhhdK1Fjf8HjkT/PkctWnho8NTwivc9+nqRZjXe/eIcqm5HwjDDhu+gz+o0g +Vz9MfZNi1JyCrOyNZcy+cr2QeNnNVGnFq8xTxtu6dLunhpmLFj2mm0Vjwa7Ypj5q +AjpqTMtDvqbRuToyoyzajhMNcCAf7gwzIupJJFVdjdtgYAcQwzikwF5HoITJzzJ2 +qgxF7CmvGZNb7G99mLdLdhtclH3wAQKHYwEGJo7XKyNEuHPQgB+e0cg1SD1HqlAM +uCfGGTWQ6me7Bjan3t0NzoTdDq6IpKTesbaY+/9e2xn8DCrhBKLXQMZFDZqUoLYA +kGPOEGgvlPnIIXAawouxCaNYEh5Uw871YMSPT28rLdFr49dwYOtDg9foA8hDIW2P +d6KXbrZteesvA1nYzEOs+3AjrbT79Md2W8Bz9bqBVNlNOESSqm4kiCJFmslm/6br +Np0MSQd+o22PQ4xRtmP6UsTfU0ueiMpYc8TYYhMbfnfFyo4m707ebcflPbBEN2dg +updQ66cvfCJB0QJt9upafY0lpdV1qUkCAwEAAaOBoDCBnTAdBgNVHQ4EFgQUOHfY +a3ecKHeCi07YG6ke95QWtw4wbgYDVR0jBGcwZYAUnW0gJEkBPyvLeLUZvH4kydv7 +NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UE +AxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAwGA1UdEwQFMAMBAf8w +CgYIKoZIzj0EAwIDaAAwZQIxAPyE+u+eP7gRrSFjQicmpYg8jiFUCYEowWY2zuOG +i1HXYwmpDHfasQ3rNSuf/gHvjwIwbSSjumDk+uYNci/KMELDsD0MFHxZhhBc9Hp9 +Af5cNR8KhzegznL6amRObGGKmX1F +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC6TCCAdGgAwIBAgIBDzANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTMwOTI0MTYwODQyWhcNMjMwOTIyMTYwODQyWjBLMQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxKTAnBgNVBAMTIFBvbGFyU1NMIFRlc3QgSW50ZXJtZWRp +YXRlIEVDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE8Oih3fX5SLeN1dmFncQl +WMw9+Y6sXblhlrXBxhXxjwdwpCHENn+foUVdrqYVYa7Suv3QVeO6nJ19H3QNixW8 +ik1P+hxsbaq8bta78vAyHmC4EmXQLg1w7oxb9Q82qX1Yo4GVMIGSMB0GA1UdDgQW +BBQPib1jQevLXhco/2gwPcGI0JxYOTBjBgNVHSMEXDBagBS0WuSls97SUva51aaV +D+s+vMf9/6E/pD0wOzELMAkGA1UEBhMCTkwxETAPBgNVBAoTCFBvbGFyU1NMMRkw +FwYDVQQDExBQb2xhclNTTCBUZXN0IENBggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZI +hvcNAQELBQADggEBAAjeaTUaCBiXT1CYLVr6UFSeRNZBrDPnj6PwqUQTvgB5I5n6 +yXqoE4RYDaEL0Lg24juFxI26itBuypto6vscgGq77cfrP/avSdxU+xeZ4bCWvh3M +ddj9lmko2U8I8GhBcHpSuIiTvgKDB8eKkjeq3AsLGchHDvip8pB3IhcNfL7W94Zf +7/lH9VQiE3/px7amD32cidoPvWLA9U3f1FsPmJESUz0wwNfINpDjmPr8dGbkCN+M +CFhxo6sCfK8KLYG4nYX8FwxVR86kpSrO9e84AX0YYbdzxprbc2XOaebJ8+BDmzut +ARkD7DTXrodN1wV7jQJkrUuEwPj9Rhvk+MFRkaw= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server1_ca.crt b/third_party/mbedtls/test/data/server1_ca.crt new file mode 100644 index 000000000..a597732a5 --- /dev/null +++ b/third_party/mbedtls/test/data/server1_ca.crt @@ -0,0 +1,40 @@ +-----BEGIN CERTIFICATE----- +MIIDPzCCAiegAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIFNlcnZlciAxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVhXom/ +uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq1UFD +d185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPhtgSVf +CrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1lLGTr +lZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsupk9w +bp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQIDAQAB +o00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQfdNY/KcF0dEU7BRIsPai9Q1kCpjAf +BgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQUFAAOC +AQEAf2k5OiORp60gBNqioC2mIqSXA0CU/qzllt8IvlcMv1V0PAP9f4IEm5mdkERr +UXjnB1Tr3edrsvXLgZ9vEosbFpNMsKfsmBkpjgWG2ui8pdn8cJiws4k4h5fuueSw +Ps1FLK5Tfpi+GJyPqk4ha9Ojp2p9opuA0aIfLuxI+0UzXH4wgrEW/Yydowv959gf +gGSl766CRdUvJbXOeVryFjFTRfLFFNfTvrftZk1dl8tas1nim8xfWet+BZVvq2zY +C7LeCI9nrfuAxfMJTrWFp17y72+hCDk7NEaB2ZLVuAM/ri7LWrr2V2hLFdIAhfC2 +nUaulRRpGt/ZTISw6uSIumNoNA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgIBAzANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDAwWhcNMjkwMjEwMTQ0NDAwWjA7MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA3zf8F7vglp0/ht6WMn1EpRagzSHx +mdTs6st8GFgIlKXsm8WL3xoemTiZhx57wI053zhdcHgH057Zk+i5clHFzqMwUqny +50BwFMtEonILwuVA+T7lpg6z+exKY8C4KQB0nFc7qKUEkHHxvYPZP9al4jwqj+8n +YMPGn8u67GB9t+aEMr5P+1gmIgNb1LTV+/Xjli5wwOQuvfwu7uJBVcA0Ln0kcmnL +R7EUQIN9Z/SG9jGr8XmksrUuEvmEF/Bibyc+E1ixVA0hmnM3oTDPb5Lc9un8rNsu +KNF+AksjoBXyOGVkCeoMbo4bF6BxyLObyavpw/LPh5aPgAIynplYb6LVAgMBAAGj +UDBOMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFLRa5KWz3tJS9rnVppUP6z68x/3/ +MB8GA1UdIwQYMBaAFLRa5KWz3tJS9rnVppUP6z68x/3/MA0GCSqGSIb3DQEBBQUA +A4IBAQB0ZiNRFdia6kskaPnhrqejIRq8YMEGAf2oIPnyZ78xoyERgc35lHGyMtsL +hWicNjP4d/hS9As4j5KA2gdNGi5ETA1X7SowWOGsryivSpMSHVy1+HdfWlsYQOzm +8o+faQNUm8XzPVmttfAVspxeHSxJZ36Oo+QWZ5wZlCIEyjEdLUId+Tm4Bz3B5jRD +zZa/SaqDokq66N2zpbgKKAl3GU2O++fBqP2dSkdQykmTxhLLWRN8FJqhYATyQntZ +0QSi3W9HfSZPnFTcPIXeoiPd2pLlxt1hZu8dws2LTXE63uP6MM4LHvWxiuJaWkP/ +mtxyUALj2pQxRitopORFQdn7AOY5 +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server1_csr.opensslconf b/third_party/mbedtls/test/data/server1_csr.opensslconf new file mode 100644 index 000000000..6e7075ea6 --- /dev/null +++ b/third_party/mbedtls/test/data/server1_csr.opensslconf @@ -0,0 +1,10 @@ +[ req ] +distinguished_name = req_distinguished_name +prompt = no +# Restrict to non-UTF8 PrintableStrings. +string_mask = nombstr + +[ req_distinguished_name ] +C = NL +O = PolarSSL +CN = PolarSSL Server 1 diff --git a/third_party/mbedtls/test/data/server1_pathlen_int_max-1.crt b/third_party/mbedtls/test/data/server1_pathlen_int_max-1.crt new file mode 100644 index 000000000..4944844d7 --- /dev/null +++ b/third_party/mbedtls/test/data/server1_pathlen_int_max-1.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDSDCCAjCgAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIFNlcnZlciAxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVhXom/ +uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq1UFD +d185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPhtgSVf +CrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1lLGTr +lZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsupk9w +bp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQIDAQAB +o1YwVDASBgNVHRMECzAJAQH/AgR////+MB0GA1UdDgQWBBQfdNY/KcF0dEU7BRIs +Pai9Q1kCpjAfBgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG +9w0BAQUFAAOCAQEAfuvq7FomQTSJmGInVwQjQddgoXpnmCZ97TpVq7jHLCFADowQ +jeiAsxmD8mwAQqw/By0U2PSmQcS7Vrn7Le0nFKNRYYrtpx5rsTFJzS/tQsgCe0Pf +zhiBgD1Dhw6PWAPmy+JlvhJF7REmFsM8KHQd0xSvJzB1gLN9FVlnd87C73bdDJZQ +Zdn977+Sn5anAFGHDWeKo8GYaYGnPBQqkX0Q2EKWR7yrwcKMogOevxELogB0jRj3 +L+nBpz7mO2J6XQ85ip+tLWAGCEHo0omAIQorAoCSqtLiaz47HxOdNK0hnM7V5k8P +05AVhxDa3WqZ9FmMaDc8j8XqmOgKYVMC4/WS0g== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server1_pathlen_int_max.crt b/third_party/mbedtls/test/data/server1_pathlen_int_max.crt new file mode 100644 index 000000000..517e0d678 --- /dev/null +++ b/third_party/mbedtls/test/data/server1_pathlen_int_max.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDSDCCAjCgAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA8MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGjAYBgNVBAMMEVBvbGFyU1NMIFNlcnZlciAxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQIfPUBq1VVTi/027oJlLhVhXom/ +uOhFkNvuiBZS0/FDUEeWEllkh2v9K+BG+XO+3c+S4ZFb7Wagb4kpeUWA0INq1UFD +d185fAkER4KwVzlw7aPsFRkeqDMIR8EFQqn9TMO0390GH00QUUBncxMPQPhtgSVf +CrFTxjB+FTms+Vruf5KepgVb5xOXhbUjktnUJAbVCSWJdQfdphqPPwkZvq1lLGTr +lZvc/kFeF6babFtpzAK6FCwWJJxK3M3Q91Jnc/EtoCP9fvQxyi1wyokLBNsupk9w +bp7OvViJ4lNZnm5akmXiiD8MlBmj3eXonZUT7Snbq3AS3FrKaxerUoJUsQIDAQAB +o1YwVDASBgNVHRMECzAJAQH/AgR/////MB0GA1UdDgQWBBQfdNY/KcF0dEU7BRIs +Pai9Q1kCpjAfBgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG +9w0BAQUFAAOCAQEAe5jPPMyWrKYGljJH2uh1gEh7KoYhmGIUfYu5A8Z2ou04yFZh +LDyWJnkE/qpNaIw3kPuoyGBTtADYzttPvxretUmaMyteOQe8DK/mmr8vl+gb54ZP +2jUE+R27Jp5GSGfl20LNVTBkKJloSyDaVzPI3ozje2lAsXsil8NTKbVJtfjZ9un+ +mGrpywSV7RpZC2PznGFdqQehwwnOscz0cVeMQqGcMRH3D5Bk2SjVexCaPu47QSyE +fNm6cATiNHjw/2dg5Aue7e4K+R6le+xY3Qy85Fq/lKDeMmbrJRrNyJ9lblCeihUd +qhkAEPelpaq5ZRM6cYJQoo0Ak64j4svjOZeF0g== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server2-badsign.crt b/third_party/mbedtls/test/data/server2-badsign.crt new file mode 100644 index 000000000..a9e40ba9c --- /dev/null +++ b/third_party/mbedtls/test/data/server2-badsign.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTN +owCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKz +NtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kM +tQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8P +hYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjya +HT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYD +VR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgw +FoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQEFBQADggEBAJklg3T/ +////7BzsxM/vLyKccO6op0/gZzM4ghuLq2Y32kl0sM6kSNUUmduuq3u/+GmUZN2A +O/7c+Hw7hDFEIvZk98aBGjCLqn3DmgHIv8ToQ67nellQxx2Uj309PdgjNi/r9HOc +KNAYPbBcg6MJGWWj2TI6vNaceios/DhOYx5V0j5nfqSJ/pnU0g9Ign2LAhgYpGJE +iEM9wW7hEMkwmk0h/sqZsrJsGH5YsF/VThSq/JVO1e2mZH2vruyZKJVBq+8tDNYp +HkK6tSyVYQhzIt3StMJWKMl/o5k2AYz6tSC164+1oG+ML3LWg8XrGKa91H4UOKap +Awgk0+4m0T25cNs= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server2-sha256.crt b/third_party/mbedtls/test/data/server2-sha256.crt new file mode 100644 index 000000000..b31be6b1f --- /dev/null +++ b/third_party/mbedtls/test/data/server2-sha256.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDA2WhcNMjkwMjEwMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTN +owCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKz +NtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kM +tQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8P +hYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjya +HT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYD +VR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgw +FoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQELBQADggEBAC465FJh +Pqel7zJngHIHJrqj/wVAxGAFOTF396XKATGAp+HRCqJ81Ry60CNK1jDzk8dv6M6U +HoS7RIFiM/9rXQCbJfiPD5xMTejZp5n5UYHAmxsxDaazfA5FuBhkfokKK6jD4Eq9 +1C94xGKb6X4/VkaPF7cqoBBw/bHxawXc0UEPjqayiBpCYU/rJoVZgLqFVP7Px3sv +a1nOrNx8rPPI1hJ+ZOg8maiPTxHZnBVLakSSLQy/sWeWyazO1RnrbxjrbgQtYKz0 +e3nwGpu1w13vfckFmUSBhHXH7AAS/HpKC4IH7G2GAk3+n8iSSN71sZzpxonQwVbo +pMZqLmbBm/7WPLc= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server2-sha256.crt.der b/third_party/mbedtls/test/data/server2-sha256.crt.der new file mode 100644 index 0000000000000000000000000000000000000000..699270b52a8f248175ed48d75fb18dd26cec6f4b GIT binary patch literal 827 zcmXqLVm3EuVv=9L%*4n9L*46F^g4LI4DLs{5_nf!bV1r7K? z94;P?fc%`qqTpa3LrDX1kPtJE08B_BB(=Ci!P(J3PMp`!(!j{jz|h3R#K0^{oYx4M zYhXgqa3KQ$h~b<$`N@en8TrK}22G4g$gX5$WngY%%5h)*oCMkXBRVcEPp4LJ#Bf=mI?25i>mBYX8qY_vPR`=`2)3- zo;e#dY8T#m)${D6%(OlK4zdJoHoLO;*TaovHzpiR+>#b#wn!~_)#{Qs_FBoN+gdl| z7u@8P(e+IG9<5sJ_JX_1Ka*!G!-R*ongr5n*M(?zr&dl}_$cx4SqD#!cNsh%yW1|g z?Z2>Nl_0ZReb@>qITs0j{?_hW-7ayDB#tHNA5ZK36?>!hvwEi{6u~JpTQa5Tn6# zCT2zk#>Kt{-r$In6=q>FU@(vc2BRz=ix`W@Qq~tKJMP?1;13Y;O<0k#-nZL%vVlBE zTA4+{K&(MzOVpF4o9|r;`nL1xvZ?&9?e-l1`yV;Lfyn|G;EW7wVN68&GRwMI7VY7O~!{&=;1cI3G=cWTyrK5ZMFjdNZe>%4F%5h)*oCMkXBRVcEPp4LJ#Bf=mI?25i>mBYX8qY_vPR`=`2)3- zo;e#dY8T#m)${D6%(OlK4zdJoHoLO;*TaovHzpiR+>#b#wn!~_)#{Qs_FBoN+gdl| z7u@8P(e+IG9<5sJ_JX_1Ka*!G!-R*ongr5n*M(?zr&dl}_$cx4SqD#!cNsh%yW1|g z?Z2>Nl_0ZReb@>qITs0j{?_hW-7ayDB#tHNA5ZK36?>!hvwEi{6u~JpTQa5Tn6# zCT2zk#>Kt{-r$In6=q>FU@(vc2BRz=ix`W@Qq~tKJMP?1;13Y;O<0k#-nZL%vVlBE zTA4+{K&(MzOVpF4o9|r;`nL1xvZ?&9?e-l1`yV;Lfyn|G;EW72RhvsJ3gq6uk$H3E z{Cj<+IR)=lEcbtqZfwyc-Mu=^{FZ0QhI30iu8PdOy>4~&{vVlBQtmcb|GV>}#=6DO zMd@40_hXGx2HmS_56@yevH!>m=XKAkA_I=gPU)|;wY{NirvLg&@f?i{61E#+niq3Q zrY^o|WVPqooGLAyKNfz;a-o;(((9IV{+oH_62C`NZ8wvI#F8YJ4rkkgc@G6n8qD%l z{C8^RrcF5#brBolulk9s`ZLw<>f2>0wd>ctnW-_=arJv$o@<(NPP?}1Oikn{R=Rs> z%b_rhll6;dnlbkL+N!Yib^q1{`91nY*P4&MmRPp;N}Y(svX#snDwp4>U9{aZ#K0^{oYx4M zYhXgqa3KQ$h~b<$`N@en8TrK}22G4g$gX5$WngY%%5h)*oCMkXBRVcEPp4LJ#Bf=mI?25i>mBYX8qY_vPR`=`2)3- zo;e#dY8T#m)${D6%(OlK4zdJoHoLO;*TaovHzpiR+>#b#wn!~_)#{Qs_FBoN+gdl| z7u@8P(e+IG9<5sJ_JX_1Ka*!G!-R*ongr5n*M(?zr&dl}_$cx4SqD#!cNsh%yW1|g z?Z2>Nl_0ZReb@>qITs0j{?_hW-7ayDB#tHNA5ZK36?>!hvwEi{6u~JpTQa5Tn6# zCT2zk#>Kt{-r$In6=q>FU@(vc2BRz=ix`W@Qq~tKJMP?1;13Y;O<0k#-nZL%vVlBE zTA4+{K&(MzOVpF4o9|r;`nL1xvZ?&9?e-l1`yV;Lfyn|G;6OWyxxJ2_UU2VYvP>C^ zwlMF37Qv(aR?CmhF|8`!p&-)qF66_f4MC?X&PB5O2WI}etpAepdF!MbyEeW)S{9qA z`?788J*}Vi!5U6&&Be|SSmN0yh@{TX6R6q~A*poewPjJ@r0ZK`OZ6{XX)`{*9kA}v z$1A?kHoG0QwU#{cVtSe&qBBQ+*%>x()lR=@21;{cB76_ux{wzj*OU77rnu>{2Wt7#C=BTy4jaQ zS-KblwmeR%$PpA>swH^PQ)c!Nfz*Wdn{t_ve*M|65B|%3lw2`2?}6_1<>o5@#6dhp literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/server2.key b/third_party/mbedtls/test/data/server2.key new file mode 100644 index 000000000..70a764a24 --- /dev/null +++ b/third_party/mbedtls/test/data/server2.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAwU2j3efNHdEE10lyuJmsDnjkOjxKzzoTFtBa5M2jAIin7h5r +lqdStJDvLXJ6PiSa/LY0rCT1d+AmZIycsCh9odrqjObJHJa8/sEEUrM21KP64bF2 +2JDBYbRmUjaiJlOqq3ReB30Zgtsq2B+g2Q0cLUlm91slc0boC4pPaQy1AJDh2oIQ +Zn2uVCuLZXmRoeJhw81ASQjuaAzxi4bSRr/QuKoRAx5/VqgaHkQYDw+Fi9qLRF7i +GMZiL8dmjfpd2H3zJ4kpAcWQDj8n8TDISg7v1t7HxydrxwU9esQCPJodPg/oNJhb +y3NLUpbYEaIsgIhpOVrTD7DeWS8Rx/fqEgEwlwIDAQABAoIBAQCXR0S8EIHFGORZ +++AtOg6eENxD+xVs0f1IeGz57Tjo3QnXX7VBZNdj+p1ECvhCE/G7XnkgU5hLZX+G +Z0jkz/tqJOI0vRSdLBbipHnWouyBQ4e/A1yIJdlBtqXxJ1KE/ituHRbNc4j4kL8Z +/r6pvwnTI0PSx2Eqs048YdS92LT6qAv4flbNDxMn2uY7s4ycS4Q8w1JXnCeaAnYm +WYI5wxO+bvRELR2Mcz5DmVnL8jRyml6l6582bSv5oufReFIbyPZbQWlXgYnpu6He +GTc7E1zKYQGG/9+DQUl/1vQuCPqQwny0tQoX2w5tdYpdMdVm+zkLtbajzdTviJJa +TWzL6lt5AoGBAN86+SVeJDcmQJcv4Eq6UhtRr4QGMiQMz0Sod6ettYxYzMgxtw28 +CIrgpozCc+UaZJLo7UxvC6an85r1b2nKPCLQFaggJ0H4Q0J/sZOhBIXaoBzWxveK +nupceKdVxGsFi8CDy86DBfiyFivfBj+47BbaQzPBj7C4rK7UlLjab2rDAoGBAN2u +AM2gchoFiu4v1HFL8D7lweEpi6ZnMJjnEu/dEgGQJFjwdpLnPbsj4c75odQ4Gz8g +sw9lao9VVzbusoRE/JGI4aTdO0pATXyG7eG1Qu+5Yc1YGXcCrliA2xM9xx+d7f+s +mPzN+WIEg5GJDYZDjAzHG5BNvi/FfM1C9dOtjv2dAoGAF0t5KmwbjWHBhcVqO4Ic +BVvN3BIlc1ue2YRXEDlxY5b0r8N4XceMgKmW18OHApZxfl8uPDauWZLXOgl4uepv +whZC3EuWrSyyICNhLY21Ah7hbIEBPF3L3ZsOwC+UErL+dXWLdB56Jgy3gZaBeW7b +vDrEnocJbqCm7IukhXHOBK8CgYEAwqdHB0hqyNSzIOGY7v9abzB6pUdA3BZiQvEs +3LjHVd4HPJ2x0N8CgrBIWOE0q8+0hSMmeE96WW/7jD3fPWwCR5zlXknxBQsfv0gP +3BC5PR0Qdypz+d+9zfMf625kyit4T/hzwhDveZUzHnk1Cf+IG7Q+TOEnLnWAWBED +ISOWmrUCgYAFEmRxgwAc/u+D6t0syCwAYh6POtscq9Y0i9GyWk89NzgC4NdwwbBH +4AgahOxIxXx2gxJnq3yfkJfIjwf0s2DyP0kY2y6Ua1OeomPeY9mrIS4tCuDQ6LrE +TB6l9VGoxJL4fyHnZb8L5gGvnB1bbD8cL6YPaDiOhcRseC9vBiEuVg== +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/server2.key.der b/third_party/mbedtls/test/data/server2.key.der new file mode 100644 index 0000000000000000000000000000000000000000..9905ce76bf764b584ef3edb883b1f46be89eb2f3 GIT binary patch literal 1192 zcmV;Z1Xueof&`=j0RRGm0RaHPO{3lC%^lGM*GY1?nXC?Y^SVWQ?4!D1D*Y>Wt>e9G1NP!30vXHq@i~;jwnu zkilWJW>PkyCR3`bbY2I28G_p?*dL(T4IC{=X7^hqb4KV3ice__wE&Re+JX>feXdk1 zi)DF{q2gh~%|J;A?r040i-yuhztFg<5d$87R;U^tL>Lbbg^SvYL|)<;#$qqWW{vt? z*nRUSi75fakPbg5@i53r4)509$HymY#|1rl!~#5;9X=1}G?-h}`OY|H9fc>;lf0N*1~McJ&qSzq zr>(V&Sj@;Vw+*}qir}VRfoIRm5uri@<}+&VvQ`vKA}f20ys$7TQBI!H=-Gtgh6QxY}=O!vcYU z0Nt(t&7g7`1&Z!3)NxDjKIOsTDT}6OFqr2O@7)pskR({}c9Q2kyCdPw`JvP}8$Tek z4`phPRaZ9dvV=tZk%-}>-8)J^O?-y!;k82Vxna#%8FvD%Sb*CTJ;xuN?ferb32vaK?2Dv@an1y< z0)c@5!ly?ENNUK`vmoJ^?*CeEFnXm&K-?B$Lh&rzxW`rA2Rxmz(BA@rut-?pG^@|F zg(D_-PkLEz`;0x`J!}F;oaJ6g@dXPXzeo?<5V<`a5O*qb`QN?G^B?POWXdaePxy1f z5bt@FGah+03IB*2v_4GXCoXk>SP=suBbJ)A0)c=95@d0M0381BgX-NZ$SeS29*;WP z9IMtei_x-LPdzs{0^rwh!LUc*2pWX!NX2}1gA!+}e4mh)$d3o~vtaT+Nf_HMlxtI- zqGR4;*{dNgEehb!=(@yA9;NkBsKk=^e<9~(zYFF8ubdrQY(E??rVnU1j)lZ*crR}T GAud+Y;XMKX literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/server2.key.enc b/third_party/mbedtls/test/data/server2.key.enc new file mode 100644 index 000000000..773aaad40 --- /dev/null +++ b/third_party/mbedtls/test/data/server2.key.enc @@ -0,0 +1,30 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-256-CBC,3DDADF5AEA525DD282D9D5E0B978AEE2 + +thP0fyNhHEWvVWHpBSGAA4C6wlqWwuCbYTGVs6GW07YNiyvInE/XxtKCrEJ6ORpR +tPZ0sTtmRFQgiAW4nSjol6AhnMAYCkt+bl2opihuKHr2IBKpGIytCwYwDB/soMw5 +/vYuZU3osENnWcv+R1+0PohU6eqo1bVBrk+Mrm+ZSX886uDNxAaqAW9dtsC7fZYV +w/uCOlk78rtrJUOTKfh3VEXG1fb/rYAP7bZYwzkmJZRozFPzjhnZZSOssz4xwCwY +04oHHrMDFCpbBmlZRLg60c5u0nduQx3SKig9o6gHCDoOYT0Bq64lvZLiPcwN7axV +L7+7TJ9u/kALO0CqAltiuz18msaErXIE3pHEGDt5zxgUcLxT4IhhixWfOL09nqjl +IltEBn0JAVC3qYsEzFGnr3C2NXLTYIFU8m1qtIyEc8vuhKw7HCgp3W/xw9f2jKZF +JivFX80URuBTs2/TWuGBKTmIGLQFWYPKwhyl9HNbbI8q5XdxKNiVxDnZfPU/icef +nJ+nM7msrkvXj4SdHO/if+rxQ07T/MHfU8PeqUL2LQAxY4gfBvkKJ/UAjfsHv0B2 +1WcZAt0yqrJu/ydOkQpwmQ/XCh/dITNYnxXZ0bjtY5fG+QGxA3RvqyfKbQFTi8qg +Nx8cxOUD1dZwZ6KrosdSFGkNkZwgIWAbIK4O3TLN5lD42031kx4iiKlxdjw6Q2df +MEVL6FqYXf4n5MhGQ5mu5MkEO9IDaz/iBdm2jkkjWaxozNC51r/i+STtsVQnY2f2 +pubekEnCOoqXN6BjuVLN28XSTLLTlJ5i9tdIMlIFUKfiNpJjOTjYBopZEf5hm3h4 +ollq6QhW9DIIsVuYgSpvoyLYLl57kvYgk1oGhV0KZyh7IPzRXTjEBiMTO+MZEoH0 +f3x2RU3LvMagb36zWs6CShV/TwAE08Mwbi7UDWYRHHaeO2bcKoEDGOXiOfsXE9HW +OVmAlIheR/W1eVAcszHcSVtXOjlsJ02CeVEcATnJCk6Ug0vc0TspCnwOCvM8+RmE +jQ0E6GeT6R/DVHW9XBNFxFxiS6ySd3yo9rKVLdGGPHns+qmlSMTAfYROoR1V8UiQ +0Tvd1CfVVBeYCm9UrWUXvGzoC3rstbD7SinGbdSU4wATIPeb+v1Tz/vVhr8AoRLJ +JK3jHMKCHH59Wx+tk8JdqAm8fgUK/69A5+gitZlM6sAmnfBJ6Vm8hqACLpjPXDWy +LjNDwWGqgWgqDOubY+ZJQwjUGQdPdGbEUF0ABZ6si9wW+RVVGSPAfiFqE4b/QwA/ +RZh1nm7dc/3elXxwXP60MyEsVddAP691xlDdL9mRpbDMx/JSp/hABFmdPOEtu5EB +02DS37+pOdI1kWkFiI4kkccZL04CTWLWh2lxb0RqUqQMeOf6j/WSTJ2In5etbHSB +R8IQOsfRINm3fD11SXXKUM7IzMi9VBD7TblN2HR9iXbW7twa8O0MRH805eY+vjsM +kcYoOtWSh+OFP9txcwjiXUBmVQDPtb+myGXmchSpMIFNV2tHVvVmUFBSipyAKr98 +3YI7mvWO0AVWXAqRHYmM3DLjlEXCauXCjgVicC/EUdA5CAO95X/ZQTNwBk8kYjy+ +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/server2.ku-ds.crt b/third_party/mbedtls/test/data/server2.ku-ds.crt new file mode 100644 index 000000000..3bd07d0fb --- /dev/null +++ b/third_party/mbedtls/test/data/server2.ku-ds.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDijCCAnKgAwIBAgIBLDANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTQwNDA5MDg0NDUxWhcNMjQwNDA2MDg0NDUxWjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTN +owCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKz +NtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kM +tQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8P +hYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjya +HT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaOBnzCBnDAJ +BgNVHRMEAjAAMB0GA1UdDgQWBBSlBehkuNzfYA9QEk1gqGSvTYtDkzBjBgNVHSME +XDBagBS0WuSls97SUva51aaVD+s+vMf9/6E/pD0wOzELMAkGA1UEBhMCTkwxETAP +BgNVBAoTCFBvbGFyU1NMMRkwFwYDVQQDExBQb2xhclNTTCBUZXN0IENBggEAMAsG +A1UdDwQEAwIHgDANBgkqhkiG9w0BAQUFAAOCAQEAc4kubASrFXFtplkYp6FUcnUn +Pf/6laS1htI+3y+q1UHWe2PcagZtCHTCUGBSWLeUIiaIBheaIRqv+4sSFVuXB7hV +0PGXpO5btth4R8BHzGqCdObKvPujp5BDq3xgcAFicA3HUMNsJoTDv/RYXY7je1Q5 +ntVyVPeji0AWMUYQjcqHTQQPGBgdJrRTMaYglZh15IhJ16ICNd9rWIeBA0h/+r0y +QuFEBz0nfe7Dvpqct7gJCv+7/5tCujx4LT17z7oK8BZN5SePAGU2ykJsUXk8ZICT +ongaQQVQwS6/GJ6A5V8ecaUvFrTby1h9+2sOW8n2NRGiaaG5gkvxVeayemcmOQ== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server2.ku-ds_ke.crt b/third_party/mbedtls/test/data/server2.ku-ds_ke.crt new file mode 100644 index 000000000..ebee7e1c3 --- /dev/null +++ b/third_party/mbedtls/test/data/server2.ku-ds_ke.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDijCCAnKgAwIBAgIBMDANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTQwNDA5MTAwMjQ5WhcNMjQwNDA2MTAwMjQ5WjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTN +owCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKz +NtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kM +tQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8P +hYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjya +HT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaOBnzCBnDAJ +BgNVHRMEAjAAMB0GA1UdDgQWBBSlBehkuNzfYA9QEk1gqGSvTYtDkzBjBgNVHSME +XDBagBS0WuSls97SUva51aaVD+s+vMf9/6E/pD0wOzELMAkGA1UEBhMCTkwxETAP +BgNVBAoTCFBvbGFyU1NMMRkwFwYDVQQDExBQb2xhclNTTCBUZXN0IENBggEAMAsG +A1UdDwQEAwIFoDANBgkqhkiG9w0BAQUFAAOCAQEAnW7+h85xBP2KJzFSpWfGirVe +ApdC9bX0Z1sVMmD486N+ty9W6BP6kJRxLDX0fOuRc3x7mCy5qZg/Yj40+yQSoA0w +bTNwJjuR8iMqWIqLw9hWR+E9T4lYLZWyGJVjlVTkO4i5wifwhoJE9Doohh/6crn5 +ImWgEkgT/wDVIHoamciO6KU36d0iAEEP2eYgxv2/sVHvjjsseTdvYh3D3VuOmQtS +uUvFxc6H5kYoq/yodJWDaOn3RS8pEpDsiW+abcWyxNTPtHFroJV7e9aaVmhlRSzw +sYDyD/ZyIlavoPSEiD3LTT/Tp6BIpz+zb4WHOHLEvUCsZputqxPVcNoEAi9xuA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server2.ku-ka.crt b/third_party/mbedtls/test/data/server2.ku-ka.crt new file mode 100644 index 000000000..90f7c4a99 --- /dev/null +++ b/third_party/mbedtls/test/data/server2.ku-ka.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDijCCAnKgAwIBAgIBKjANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTQwNDA5MDg0NDIzWhcNMjQwNDA2MDg0NDIzWjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTN +owCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKz +NtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kM +tQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8P +hYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjya +HT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaOBnzCBnDAJ +BgNVHRMEAjAAMB0GA1UdDgQWBBSlBehkuNzfYA9QEk1gqGSvTYtDkzBjBgNVHSME +XDBagBS0WuSls97SUva51aaVD+s+vMf9/6E/pD0wOzELMAkGA1UEBhMCTkwxETAP +BgNVBAoTCFBvbGFyU1NMMRkwFwYDVQQDExBQb2xhclNTTCBUZXN0IENBggEAMAsG +A1UdDwQEAwIDCDANBgkqhkiG9w0BAQUFAAOCAQEAriPloIWfu7U8d1hls97C7OBI +OiE2xFh2UmuN/9hTK2CyW6MtBf8aG3l4jQDrsutHO0gUyoR67ug4yj+s+0S/zETZ +q6mPo7cBbVwjhGciQRiYgufFpdnbXR05HDgOVPK7qqjL6UOZnbu5caIEvIJgdwXn +n8WB9x/Ii4/2S9ysmRdRhDBYekzgH3Ac2UnHJTMh1XaSL817MW6B9BDKHt4xa7pW +cplDzrFKYbmxSSxzALE4Dr+zRvmDx4bcYpBkRRfOhnnR1caQBgaZzPcX/Vu+vw8e +qs2nyBW5RBu8MBCBU1DpqOSo6jl0QTpuq3NzQZIouG9fyckqDJS5ibrxQTutPw== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server2.ku-ke.crt b/third_party/mbedtls/test/data/server2.ku-ke.crt new file mode 100644 index 000000000..8daa0c13d --- /dev/null +++ b/third_party/mbedtls/test/data/server2.ku-ke.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDijCCAnKgAwIBAgIBKzANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTQwNDA5MDg0NDM5WhcNMjQwNDA2MDg0NDM5WjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTN +owCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKz +NtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kM +tQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8P +hYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjya +HT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaOBnzCBnDAJ +BgNVHRMEAjAAMB0GA1UdDgQWBBSlBehkuNzfYA9QEk1gqGSvTYtDkzBjBgNVHSME +XDBagBS0WuSls97SUva51aaVD+s+vMf9/6E/pD0wOzELMAkGA1UEBhMCTkwxETAP +BgNVBAoTCFBvbGFyU1NMMRkwFwYDVQQDExBQb2xhclNTTCBUZXN0IENBggEAMAsG +A1UdDwQEAwIFIDANBgkqhkiG9w0BAQUFAAOCAQEAqreLAIuxeLGKbhoEROYRqXxO +ndaC6uDcpxhgmEW7B2DW6ZtX8155v3ov61MuMas8fEQjD5STDP9qERxNTePnhW3m +kDZd2jUBE3ioHhTBv47i1PYU+DRe42kY6z0jUmNPK8TsTKfdbqTGXg9THe1KYB7q +hdljqGS08IgBl/q2lK2OOSycu27xhfb9Mo0BcLBab92WgyBu+cFPQsKiL4mD7QyJ ++73Ndb21EuANUjsRDQ3NPklssJcyJB2v85eekwk1acZUG21no3wdTvjxhVE/Xrdz +zUP9WkvAVfUrwGjUzG4YHE8wkHO7xKbKixNt+nQmDhe+tHVbztZjVwFJ8010gg== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server3.crt b/third_party/mbedtls/test/data/server3.crt new file mode 100644 index 000000000..ed0d696b4 --- /dev/null +++ b/third_party/mbedtls/test/data/server3.crt @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICojCCAYqgAwIBAgIBDTANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTMwODA5MDkxNzAzWhcNMjMwODA3MDkxNzAzWjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBJMBMGByqGSM49AgEG +CCqGSM49AwEBAzIABH0AoQyUhPABS38y67uEVs4O3RXmKKrBdUR7/L2QPB8EC2p5 +fQcsej6EFasvlTdJ/6OBkjCBjzAJBgNVHRMEAjAAMB0GA1UdDgQWBBTkF2s2sgaJ +OtleQ7bgZH2Hq33eNzBjBgNVHSMEXDBagBS0WuSls97SUva51aaVD+s+vMf9/6E/ +pD0wOzELMAkGA1UEBhMCTkwxETAPBgNVBAoTCFBvbGFyU1NMMRkwFwYDVQQDExBQ +b2xhclNTTCBUZXN0IENBggEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjmSIjGKD1eH5W +4bl2MXfNIsTwc2vv/MAAhBzBEbTXd3T37+zAGPGjKncvTB+oufUVRGkoKbfoC6Jm +DYSEUuxtnUZOko/C//XlCEtK0TuS2aLEqF3gJjBJTCfthEdAhJCtmPAQDCzeKsdx +CoOtH0NQx6Xl64oDt2wYSQNWUTGLPfRpdsVEvBHhHYATQijkl2ZH8BDjsYcBicrS +qmCeN+0T1B9vrOQVEZe+fwgzVL38n8lkJZNPIbdovA9WLHwXAEzPv4la3w0qh4Tb +kSb8HtILl4I474QxrFywylyXR/p2znPleRIRgB5HtUp9tLSWkB0bwMlqQlg2EHXu +CAQ1sXmQ +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server3.key b/third_party/mbedtls/test/data/server3.key new file mode 100644 index 000000000..fecf44db1 --- /dev/null +++ b/third_party/mbedtls/test/data/server3.key @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MF8CAQEEGItTogpE7AOnjvYuTqm+9OabmsX02XKIAqAKBggqhkjOPQMBAaE0AzIA +BH0AoQyUhPABS38y67uEVs4O3RXmKKrBdUR7/L2QPB8EC2p5fQcsej6EFasvlTdJ +/w== +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/server4.crt b/third_party/mbedtls/test/data/server4.crt new file mode 100644 index 000000000..96b1aa772 --- /dev/null +++ b/third_party/mbedtls/test/data/server4.crt @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC6jCCAnCgAwIBAgIBCDAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKvXjL5VfYc7D/truqEpYcZcvlUhnuCNDJctYDJL +vgYYj5uxDxLHBXvnEHLgO5K+lps42p+r/dd4oE64ttRoeZZUvr+7eBnW35n0EpPA +Ik9Gwu+vg7GfxmifgIR8hZnOQkt2OjvvpChPCxvUailtB450Izh+mEK/hYFr+7Jl +NnxR1XQlbbyDM7Ect1HwYcuS3MBlBqq048J+0KEkQXICSjKeHFga9eDCq+Jyfqe5 +bt0K30hl1N0164B7aoh08Eomme+aSuAsz+MsJ3m7AO2DUYdrDxlrky1QrvRWWfX0 +d8djTM+uHTo1DviRM6o9+P9DfoFd53/Z0Km03sVLQWvUrhECAwEAAaOBnTCBmjAJ +BgNVHRMEAjAAMB0GA1UdDgQWBBTAlAm1+0L41mhqYWjFiejsRVrGeTBuBgNVHSME +ZzBlgBSdbSAkSQE/K8t4tRm8fiTJ2/s2fKFCpEAwPjELMAkGA1UEBhMCTkwxETAP +BgNVBAoTCFBvbGFyU1NMMRwwGgYDVQQDExNQb2xhcnNzbCBUZXN0IEVDIENBggkA +wUPifmJDzOgwCgYIKoZIzj0EAwIDaAAwZQIxAPWlxnMcjBaxaVieQYSLBqzizS3/ +O8Na6owRGPk0/UK+j5O9NTBHk+uXW/fQblKamQIwUQl4dl6gkRDE4rBR/yGjZZ1Z +3dEpvL2Wimt3keD7AcLpYB2FJ1mVcY1XQUeK1Vfc +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server4.key b/third_party/mbedtls/test/data/server4.key new file mode 100644 index 000000000..9e4daee4a --- /dev/null +++ b/third_party/mbedtls/test/data/server4.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAq9eMvlV9hzsP+2u6oSlhxly+VSGe4I0Mly1gMku+BhiPm7EP +EscFe+cQcuA7kr6Wmzjan6v913igTri21Gh5llS+v7t4GdbfmfQSk8AiT0bC76+D +sZ/GaJ+AhHyFmc5CS3Y6O++kKE8LG9RqKW0HjnQjOH6YQr+FgWv7smU2fFHVdCVt +vIMzsRy3UfBhy5LcwGUGqrTjwn7QoSRBcgJKMp4cWBr14MKr4nJ+p7lu3QrfSGXU +3TXrgHtqiHTwSiaZ75pK4CzP4ywnebsA7YNRh2sPGWuTLVCu9FZZ9fR3x2NMz64d +OjUO+JEzqj34/0N+gV3nf9nQqbTexUtBa9SuEQIDAQABAoIBAHnxtYvgCPttG1NU +yJTTU/I7IEozWJaLIZMqfShT/Z4/0bEvfb3ag/bAKzkKDNx+6Utvlh1XJQTCMiiL +BhtHpHjc3JwdAgZ8KCMNRB2ba/2L/ouupqrm8hqOjdn2r6xM5Vi9pmegEIMWTJDM +NSX+nC0oF1Jg69X6KViFc5DOKFMhacSEwLJkv/EqCgdWaBoqMlTtTWKdm34xSN2L +P5o9kOgihTBNUUnVBUWJiT7C6bBAFwb1rECpvNOk6h+lvG+fSDZKYdwBrAsKspIy +/aXZD4qaicefGblrHcZv2og/zYkFs4riWNOmglxZyrK/3rFFk0B8mBk1mWQvrK7+ +Jq/R4k0CgYEA0hO29hJjeTBDdOWgzyXr5uppmR1WU7fv/Jy8PLRMvUvmiMQqRDK3 +zwGc6H938wdsubpdTCLPhq0rhDCTqtwIEAuFjZIYJs4yZzfy6klaD3516iIgb+W7 +fe1RkYMBp9wV0x272vzP4Y5p/fzp5xhvN52OkhQsjHRHewfDaUwSFScCgYEA0Wgi +kGVK6OxzoMCgiWx/L+y3yrYuHdWANTIIa5RvZk4UQqEFkGYGVP1rpbB/fAa1Yqev +qXkLZqad2dhJCuBVryGt29CHsbnEQ/QuTwlGmyZj1U8NnJBgNCPTdmGTBIm/7w9S +ESZ48bUlcqzsZn1Big/A6JX1e5i9b/1jyozNVgcCgYEAnRZc49iQRZjPeGQVQZEL +u5ph6DrFyMhsTistnv77uzk8Y9y79k8unz6HhFt86GAO7zrqdPo60GxBdBGW+laa +ONVEwr4SDUJ28jQmEwdSru9TYQav1ryk3N9O9U5POKQcNcewJ2qQUAvcOi6bAVGG +KMJKT/WB8m0o3ljJyL03cFUCgYBoHFTq42Fd8oj+SCbIjCej5RXvc6nz7Tzjta9Y +BSFphLIv+ixxAThustv9MYYAXLl7hhEgueyAKaBbOVv/S09uVdlBayi7pLc+bb1E +UEFJS8nguH/08hbSdWlh9tsIK5BAQ6ayniUNTtmCbRTPU8Ds6i4ntL6qp2KvthQS +FPTVqwKBgQC8m2sJapMms0/7EeGpUwMO+WNCHeRyujnriWYL8Kms0lmAn8NrQoA5 +wgbx0nZ/VrXtLPGHy915jxDXOU1Yc2gqEf5Qm/GnByUuml1mUSldiPciSJvKzMqP +LeWnb62HD60t/zwstN20Yzt6mBLocm1PPdPhPweI/EF6pSgvlw5NTw== +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/server5-badsign.crt b/third_party/mbedtls/test/data/server5-badsign.crt new file mode 100644 index 000000000..0c6507233 --- /dev/null +++ b/third_party/mbedtls/test/data/server5-badsign.crt @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICHzCCAaWgAwIBAgIBCTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA +2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jgZ0wgZowCQYDVR0TBAIwADAd +BgNVHQ4EFgQUUGGlj9QH2deCAQzlZX+MY0anE74wbgYDVR0jBGcwZYAUnW0gJEkB +PyvLeLUZvH4kydv7NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xh +clNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAoG +CCqGSM49BAMCA2gAMGUCMQCaLFzXptui5WQN8LlO3ddh1hMxx6tzgLvT03MTVK2S +C12r0Lz3ri/moSEpNZWqPjkCMCE2f53GXcYLqyfyJR078c/xNSUU5+Xxl7VZ414V +fGa5kHvHARBPc8YAIVIqDvHH1A== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5-der0.crt b/third_party/mbedtls/test/data/server5-der0.crt new file mode 100644 index 0000000000000000000000000000000000000000..08d8dd311b525fd51171a1019ad3194dad91580a GIT binary patch literal 547 zcmXqLVv;v#VqCg_nTe5!iILNQi;Y98&EuRc3p0~}ogudYCmVAp3!5;LpO2xS0Y8Yt zCCm|!pOaV=9PDE#V;}_*Vipz#3l$gVD1@XImngV8D>yqE$cghB8XH&|nHZXy8X1^G ziSrtPxJFQ}feAtLg$x8B=5yxcCnx4)dUQv4h>n#0YgPGb1~*69bF+nXsE> zoN`e`cE=-i|10FZtNF<`vE;&9k*(h|lp>QR`8{R0p)C0SmHs7@*jTZ>T^)zA%Xvf3 zc4_hbVmz_s?f=D%a}642fxRp%%)(^AU?2;$U6zkUj720MacTb*_M6w67;`VyonyI+c^Rf1A}TbXwv-X(%>vG8}Y%RF~v@ z<^^)(FlR6rq%s*Y%+iUuzU=m*rzyN2cKY4Do_I~z@c8QDhTWGh7Ym21ox~lx`of;? z>-3*3RMa$`y2{Ry$w1Mpe(tf@W8ACNKdH)Ee?0%uR8{2p(~r})Mm~-ctx4NCq53$Z RfPe8Z2E`yPzK_SR0ss?|s)_&r literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/server5-der1a.crt b/third_party/mbedtls/test/data/server5-der1a.crt new file mode 100644 index 0000000000000000000000000000000000000000..015017b17db1c360392790665896ea46dc0feac2 GIT binary patch literal 548 zcmXqLVv;v#VqCg_nTe5!iILNQi;Y98&EuRc3p0~}ogudYCmVAp3!5;LpO2xS0Y8Yt zCCm|!pOaV=9PDE#V;}_*Vipz#3l$gVD1@XImngV8D>yqE$cghB8XH&|nHZXy8X1^G ziSrtPxJFQ}feAtLg$x8B=5yxcCnx4)dUQv4h>n#0YgPGb1~*69bF+nXsE> zoN`e`cE=-i|10FZtNF<`vE;&9k*(h|lp>QR`8{R0p)C0SmHs7@*jTZ>T^)zA%Xvf3 zc4_hbVmz_s?f=D%a}642fxRp%%)(^AU?2;$U6zkUj720MacTb*_M6w67;`VyonyI+c^Rf1A}TbXwv-X(%>vG8}Y%RF~v@ z<^^)(FlR6rq%s*Y%+iUuzU=m*rzyN2cKY4Do_I~z@c8QDhTWGh7Ym21ox~lx`of;? z>-3*3RMa$`y2{Ry$w1Mpe(tf@W8ACNKdH)Ee?0%uR8{2p(~r})Mm~-ctx4NCq53$Z SfPe8Z2E`yPzK_SRG5`R+9IA={ literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/server5-der1b.crt b/third_party/mbedtls/test/data/server5-der1b.crt new file mode 100644 index 0000000000000000000000000000000000000000..6340d9e2ed9fb5e60822f52182c08cddf98f4417 GIT binary patch literal 548 zcmXqLVv;v#VqCg_nTe5!iILNQi;Y98&EuRc3p0~}ogudYCmVAp3!5;LpO2xS0Y8Yt zCCm|!pOaV=9PDE#V;}_*Vipz#3l$gVD1@XImngV8D>yqE$cghB8XH&|nHZXy8X1^G ziSrtPxJFQ}feAtLg$x8B=5yxcCnx4)dUQv4h>n#0YgPGb1~*69bF+nXsE> zoN`e`cE=-i|10FZtNF<`vE;&9k*(h|lp>QR`8{R0p)C0SmHs7@*jTZ>T^)zA%Xvf3 zc4_hbVmz_s?f=D%a}642fxRp%%)(^AU?2;$U6zkUj720MacTb*_M6w67;`VyonyI+c^Rf1A}TbXwv-X(%>vG8}Y%RF~v@ z<^^)(FlR6rq%s*Y%+iUuzU=m*rzyN2cKY4Do_I~z@c8QDhTWGh7Ym21ox~lx`of;? z>-3*3RMa$`y2{Ry$w1Mpe(tf@W8ACNKdH)Ee?0%uR8{2p(~r})Mm~-ctx4NCq53$Z SfPe8Z2E`yPzK_SR9s~fs-K$Fg literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/server5-der2.crt b/third_party/mbedtls/test/data/server5-der2.crt new file mode 100644 index 0000000000000000000000000000000000000000..c6e320a369c20c3ee8c54d3caa1d5af0a7225206 GIT binary patch literal 549 zcmXqLVv;v#VqCg_nTe5!iILNQi;Y98&EuRc3p0~}ogudYCmVAp3!5;LpO2xS0Y8Yt zCCm|!pOaV=9PDE#V;}_*Vipz#3l$gVD1@XImngV8D>yqE$cghB8XH&|nHZXy8X1^G ziSrtPxJFQ}feAtLg$x8B=5yxcCnx4)dUQv4h>n#0YgPGb1~*69bF+nXsE> zoN`e`cE=-i|10FZtNF<`vE;&9k*(h|lp>QR`8{R0p)C0SmHs7@*jTZ>T^)zA%Xvf3 zc4_hbVmz_s?f=D%a}642fxRp%%)(^AU?2;$U6zkUj720MacTb*_M6w67;`VyonyI+c^Rf1A}TbXwv-X(%>vG8}Y%RF~v@ z<^^)(FlR6rq%s*Y%+iUuzU=m*rzyN2cKY4Do_I~z@c8QDhTWGh7Ym21ox~lx`of;? z>-3*3RMa$`y2{Ry$w1Mpe(tf@W8ACNKdH)Ee?0%uR8{2p(~r})Mm~-ctx4NCq53$Z TfPe8Z2E`yPzK_SR?&JahYB8%# literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/server5-der4.crt b/third_party/mbedtls/test/data/server5-der4.crt new file mode 100644 index 0000000000000000000000000000000000000000..4af05cce1ed05ea02e9fac3fed3a0904b44799b0 GIT binary patch literal 551 zcmXqLVv;v#VqCg_nTe5!iILNQi;Y98&EuRc3p0~}ogudYCmVAp3!5;LpO2xS0Y8Yt zCCm|!pOaV=9PDE#V;}_*Vipz#3l$gVD1@XImngV8D>yqE$cghB8XH&|nHZXy8X1^G ziSrtPxJFQ}feAtLg$x8B=5yxcCnx4)dUQv4h>n#0YgPGb1~*69bF+nXsE> zoN`e`cE=-i|10FZtNF<`vE;&9k*(h|lp>QR`8{R0p)C0SmHs7@*jTZ>T^)zA%Xvf3 zc4_hbVmz_s?f=D%a}642fxRp%%)(^AU?2;$U6zkUj720MacTb*_M6w67;`VyonyI+c^Rf1A}TbXwv-X(%>vG8}Y%RF~v@ z<^^)(FlR6rq%s*Y%+iUuzU=m*rzyN2cKY4Do_I~z@c8QDhTWGh7Ym21ox~lx`of;? z>-3*3RMa$`y2{Ry$w1Mpe(tf@W8ACNKdH)Ee?0%uR8{2p(~r})Mm~-ctx4NCq53$Z VfPe8Z2E`yPzK_SRE*F>*4*yqE$cghB8XH&|nHZXy8X1^G ziSrtPxJFQ}feAtLg$x8B=5yxcCnx4)dUQv4h>n#0YgPGb1~*69bF+nXsE> zoN`e`cE=-i|10FZtNF<`vE;&9k*(h|lp>QR`8{R0p)C0SmHs7@*jTZ>T^)zA%Xvf3 zc4_hbVmz_s?f=D%a}642fxRp%%)(^AU?2;$U6zkUj720MacTb*_M6w67;`VyonyI+c^Rf1A}TbXwv-X(%>vG8}Y%RF~v@ z<^^)(FlR6rq%s*Y%+iUuzU=m*rzyN2cKY4Do_I~z@c8QDhTWGh7Ym21ox~lx`of;? z>-3*3RMa$`y2{Ry$w1Mpe(tf@W8ACNKdH)Ee?0%uR8{2p(~r})Mm~-ctx4NCq53$Z ZfPe8Z2E`yPzK_SRE?NFxU9D;rKLC6Lu2cX3 literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/server5-der9.crt b/third_party/mbedtls/test/data/server5-der9.crt new file mode 100644 index 0000000000000000000000000000000000000000..4947f1f83fad41a48cee838ccf8cfdf2f2100e29 GIT binary patch literal 556 zcmXqLVv;v#VqCg_nTe5!iILNQi;Y98&EuRc3p0~}ogudYCmVAp3!5;LpO2xS0Y8Yt zCCm|!pOaV=9PDE#V;}_*Vipz#3l$gVD1@XImngV8D>yqE$cghB8XH&|nHZXy8X1^G ziSrtPxJFQ}feAtLg$x8B=5yxcCnx4)dUQv4h>n#0YgPGb1~*69bF+nXsE> zoN`e`cE=-i|10FZtNF<`vE;&9k*(h|lp>QR`8{R0p)C0SmHs7@*jTZ>T^)zA%Xvf3 zc4_hbVmz_s?f=D%a}642fxRp%%)(^AU?2;$U6zkUj720MacTb*_M6w67;`VyonyI+c^Rf1A}TbXwv-X(%>vG8}Y%RF~v@ z<^^)(FlR6rq%s*Y%+iUuzU=m*rzyN2cKY4Do_I~z@c8QDhTWGh7Ym21ox~lx`of;? z>-3*3RMa$`y2{Ry$w1Mpe(tf@W8ACNKdH)Ee?0%uR8{2p(~r})Mm~-ctx4NCq53$Z afPe8Z2E`yPzK_SRp8sKBT=suSl_mf!qOWiO literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/server5-expired.crt b/third_party/mbedtls/test/data/server5-expired.crt new file mode 100644 index 000000000..d726e5c8e --- /dev/null +++ b/third_party/mbedtls/test/data/server5-expired.crt @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICHjCCAaWgAwIBAgIBHjAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MDQwMzEwMTIwOTMwWhcNMTQwMzA4MTIwOTMwWjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA +2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jgZ0wgZowCQYDVR0TBAIwADAd +BgNVHQ4EFgQUUGGlj9QH2deCAQzlZX+MY0anE74wbgYDVR0jBGcwZYAUnW0gJEkB +PyvLeLUZvH4kydv7NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xh +clNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAoG +CCqGSM49BAMCA2cAMGQCMCDxvDmhlrEk0r4hqCwvQDxWEoXPbbD1gglfLT3BsGpu +XHUQ1W2HwB3o/7N5I13BBgIwcmG17zyNIOkYiyExYtPCZCpbofEMpRY5qWG0K6YL +fN08jSzyFt6kbO4ak0D6tC5Q +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5-fan.crt b/third_party/mbedtls/test/data/server5-fan.crt new file mode 100644 index 000000000..dc1eb380c --- /dev/null +++ b/third_party/mbedtls/test/data/server5-fan.crt @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBdTCCARugAwIBAgIBTTAKBggqhkjOPQQDAjA3MQswCQYDVQQGEwJVSzERMA8G +A1UECgwITWJlZCBUTFMxFTATBgNVBAMMDE1iZWQgVExTIEZBTjAeFw0xOTAzMjUw +OTAzNDZaFw0yOTAzMjIwOTAzNDZaMDcxCzAJBgNVBAYTAlVLMREwDwYDVQQKDAhN +YmVkIFRMUzEVMBMGA1UEAwwMTWJlZCBUTFMgRkFOMFkwEwYHKoZIzj0CAQYIKoZI +zj0DAQcDQgAEN8xW2XYJHlpyPsdZLf8gbu58+QaRdNCtFLX3aCJZYpJO5QDYIxH/ +6i/SNF1dFr2KiMJrdw1VzYoqDvoByLTt/6MYMBYwFAYDVR0lBA0wCwYJKwYBBAGC +5CUBMAoGCCqGSM49BAMCA0gAMEUCIQDp/Q5FaVy3YNeJflQKLGycQZoH6V3FQnLq +ERUCeimLIAIgdyiA4KdHxkpQhC1L1KfmxG8YJqu31FBjmNw00Sv8J9k= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5-future.crt b/third_party/mbedtls/test/data/server5-future.crt new file mode 100644 index 000000000..969c84b46 --- /dev/null +++ b/third_party/mbedtls/test/data/server5-future.crt @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICHjCCAaWgAwIBAgIBHTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MzIwMzEwMTEwNDExWhcNNDIwMzA4MTEwNDExWjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA +2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jgZ0wgZowCQYDVR0TBAIwADAd +BgNVHQ4EFgQUUGGlj9QH2deCAQzlZX+MY0anE74wbgYDVR0jBGcwZYAUnW0gJEkB +PyvLeLUZvH4kydv7NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xh +clNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAoG +CCqGSM49BAMCA2cAMGQCMAZWcb+NYxFVK+W6Z5eknM2TrbqQGZEYHQXeV9/XF0t7 +TLDhA6a/pFDTJVZunFzesgIwfqkBYuvMkiNlS4lWcVyf8L4CZIHCn1yHnOCxu8ix +uqgLb4na3i94x9urgbZZYfVK +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5-othername.crt b/third_party/mbedtls/test/data/server5-othername.crt new file mode 100644 index 000000000..3be1a772c --- /dev/null +++ b/third_party/mbedtls/test/data/server5-othername.crt @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBnzCCAUWgAwIBAgIBTTAKBggqhkjOPQQDAjBBMQswCQYDVQQGEwJVSzERMA8G +A1UECgwITWJlZCBUTFMxHzAdBgNVBAMMFk1iZWQgVExTIG90aGVybmFtZSBTQU4w +HhcNMTkwMzI0MDkwNjAyWhcNMjkwMzIxMDkwNjAyWjBBMQswCQYDVQQGEwJVSzER +MA8GA1UECgwITWJlZCBUTFMxHzAdBgNVBAMMFk1iZWQgVExTIG90aGVybmFtZSBT +QU4wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ3zFbZdgkeWnI+x1kt/yBu7nz5 +BpF00K0UtfdoIllikk7lANgjEf/qL9I0XV0WvYqIwmt3DVXNiioO+gHItO3/oy4w +LDAqBgNVHREEIzAhoB8GCCsGAQUFBwgEoBMwEQYHKwYBBAERAwQGMTIzNDU2MAoG +CCqGSM49BAMCA0gAMEUCIQCijdm1AfArx2p4cLCVciHCTE8UXRiTm8f85k4aNzzf +sgIgCdmLyfZB9jsSPH3A3O1GATAR3O9OTtEDC+YSc+lvxSw= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5-selfsigned.crt b/third_party/mbedtls/test/data/server5-selfsigned.crt new file mode 100644 index 000000000..cb5564751 --- /dev/null +++ b/third_party/mbedtls/test/data/server5-selfsigned.crt @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBzTCCAXKgAwIBAgIMU6LLSxJOrYN9qJSyMAoGCCqGSM49BAMCMEcxEzARBgNV +BAMTCnNlbGZzaWduZWQxEDAOBgNVBAsTB3Rlc3RpbmcxETAPBgNVBAoTCFBvbGFy +U1NMMQswCQYDVQQGEwJOTDAiGA8yMDE0MDYxOTExMzY0M1oYDzIwMjQwNjE4MTEz +NjQzWjBHMRMwEQYDVQQDEwpzZWxmc2lnbmVkMRAwDgYDVQQLEwd0ZXN0aW5nMREw +DwYDVQQKEwhQb2xhclNTTDELMAkGA1UEBhMCTkwwWTATBgcqhkjOPQIBBggqhkjO +PQMBBwNCAAQ3zFbZdgkeWnI+x1kt/yBu7nz5BpF00K0UtfdoIllikk7lANgjEf/q +L9I0XV0WvYqIwmt3DVXNiioO+gHItO3/o0AwPjAMBgNVHRMBAf8EAjAAMA8GA1Ud +DwEB/wQFAwMHgAAwHQYDVR0OBBYEFLZtURgXjmWq8uzV8wHkbFLCNB1bMAoGCCqG +SM49BAMCA0kAMEYCIQCf/bzFoge0pCOIrtHrABgc1+Cl9kjlsICpduXhdHUMOwIh +AOJ+nBHfaEGyF4PRJvn/jMDeIaH1zisinVzC2v+JQOWq +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5-sha1.crt b/third_party/mbedtls/test/data/server5-sha1.crt new file mode 100644 index 000000000..73e2d1745 --- /dev/null +++ b/third_party/mbedtls/test/data/server5-sha1.crt @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICHTCCAaSgAwIBAgIBEjAJBgcqhkjOPQQBMD4xCzAJBgNVBAYTAk5MMREwDwYD +VQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQTAeFw0x +MzA5MjQxNjIxMjdaFw0yMzA5MjIxNjIxMjdaMDQxCzAJBgNVBAYTAk5MMREwDwYD +VQQKEwhQb2xhclNTTDESMBAGA1UEAxMJbG9jYWxob3N0MFkwEwYHKoZIzj0CAQYI +KoZIzj0DAQcDQgAEN8xW2XYJHlpyPsdZLf8gbu58+QaRdNCtFLX3aCJZYpJO5QDY +IxH/6i/SNF1dFr2KiMJrdw1VzYoqDvoByLTt/6OBnTCBmjAJBgNVHRMEAjAAMB0G +A1UdDgQWBBRQYaWP1AfZ14IBDOVlf4xjRqcTvjBuBgNVHSMEZzBlgBSdbSAkSQE/ +K8t4tRm8fiTJ2/s2fKFCpEAwPjELMAkGA1UEBhMCTkwxETAPBgNVBAoTCFBvbGFy +U1NMMRwwGgYDVQQDExNQb2xhcnNzbCBUZXN0IEVDIENBggkAwUPifmJDzOgwCQYH +KoZIzj0EAQNoADBlAjEAyjvzRWtxbXvkoYTYSQY9gFBpP7/wTZ2q6FbRiAuZULFt +lc0PMPDfVZChgA6iDH+BAjBdkOb73f2pOwZpMRqrOgqSynbt2uWY87mC5lRlNEoR +WXEv1AzIeBCv+81DN1Iuu4w= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5-sha224.crt b/third_party/mbedtls/test/data/server5-sha224.crt new file mode 100644 index 000000000..47b11688c --- /dev/null +++ b/third_party/mbedtls/test/data/server5-sha224.crt @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICIDCCAaWgAwIBAgIBEzAKBggqhkjOPQQDATA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MTMwOTI0MTYyMTI3WhcNMjMwOTIyMTYyMTI3WjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA +2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jgZ0wgZowCQYDVR0TBAIwADAd +BgNVHQ4EFgQUUGGlj9QH2deCAQzlZX+MY0anE74wbgYDVR0jBGcwZYAUnW0gJEkB +PyvLeLUZvH4kydv7NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xh +clNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAoG +CCqGSM49BAMBA2kAMGYCMQCj0EyFUzDRmfokWzLVEWN0epR4/sZytfIeozp6BqWH +qaTBdAR2vthIKC7dKuUkg34CMQD6YtB2O9Vso79gbzSen2qh7gK7VvGE+31EVPbR +Ce/oNG/3OfhRSdn3FOvBBg2UErM= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5-sha384.crt b/third_party/mbedtls/test/data/server5-sha384.crt new file mode 100644 index 000000000..5d6a79b2f --- /dev/null +++ b/third_party/mbedtls/test/data/server5-sha384.crt @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICHzCCAaWgAwIBAgIBFDAKBggqhkjOPQQDAzA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MTMwOTI0MTYyMTI3WhcNMjMwOTIyMTYyMTI3WjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA +2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jgZ0wgZowCQYDVR0TBAIwADAd +BgNVHQ4EFgQUUGGlj9QH2deCAQzlZX+MY0anE74wbgYDVR0jBGcwZYAUnW0gJEkB +PyvLeLUZvH4kydv7NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xh +clNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAoG +CCqGSM49BAMDA2gAMGUCMQCnsd/6VB2kLIqMRsWdkJvRaQROyAg78CQExFEY3CMv +9t0kWRXPc4nCMH69RjQVvC4CMB4lk9A7hnX2zQy3bbUhOCOvXcsQdEe8AMgJBviz +5Nob2wThRqsm1wjCF60fyzXWuA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5-sha512.crt b/third_party/mbedtls/test/data/server5-sha512.crt new file mode 100644 index 000000000..16112ac54 --- /dev/null +++ b/third_party/mbedtls/test/data/server5-sha512.crt @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICHzCCAaWgAwIBAgIBFTAKBggqhkjOPQQDBDA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MTMwOTI0MTYyMTI3WhcNMjMwOTIyMTYyMTI3WjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA +2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jgZ0wgZowCQYDVR0TBAIwADAd +BgNVHQ4EFgQUUGGlj9QH2deCAQzlZX+MY0anE74wbgYDVR0jBGcwZYAUnW0gJEkB +PyvLeLUZvH4kydv7NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xh +clNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAoG +CCqGSM49BAMEA2gAMGUCMFPL2OI8arcbRlKAbRb/YfGibo4Mwts8KX3fOuRCbXEn +pDWeb82kBqfXwzPJwamFOwIxAPGzyhWrxn0qEynWV5nzFK02PYBnYFgClISyyudH +HJGHtbEVRc5JA8ALnggaLVpuvg== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5-ss-expired.crt b/third_party/mbedtls/test/data/server5-ss-expired.crt new file mode 100644 index 000000000..287ce9820 --- /dev/null +++ b/third_party/mbedtls/test/data/server5-ss-expired.crt @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIB1jCCAX2gAwIBAgIJANhkYQXjo814MAoGCCqGSM49BAMCMEgxCzAJBgNVBAYT +AlVLMREwDwYDVQQKDAhtYmVkIFRMUzESMBAGA1UECwwJdGVzdHN1aXRlMRIwEAYD +VQQDDAlsb2NhbGhvc3QwHhcNMDcwNjI3MDkyNzE1WhcNMTcwNjI3MDkyNzE1WjBI +MQswCQYDVQQGEwJVSzERMA8GA1UECgwIbWJlZCBUTFMxEjAQBgNVBAsMCXRlc3Rz +dWl0ZTESMBAGA1UEAwwJbG9jYWxob3N0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD +QgAEN8xW2XYJHlpyPsdZLf8gbu58+QaRdNCtFLX3aCJZYpJO5QDYIxH/6i/SNF1d +Fr2KiMJrdw1VzYoqDvoByLTt/6NQME4wHQYDVR0OBBYEFFBhpY/UB9nXggEM5WV/ +jGNGpxO+MB8GA1UdIwQYMBaAFFBhpY/UB9nXggEM5WV/jGNGpxO+MAwGA1UdEwQF +MAMBAf8wCgYIKoZIzj0EAwIDRwAwRAIgIAQ47gmTsbA8pphQ1jBeLQDp7W99qr6P +oTl7/vYSJJcCICxNSJGLrNu8TfWLhgJiRsozMR9jGhp+tse1rlGUUJL6 +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5-ss-forgeca.crt b/third_party/mbedtls/test/data/server5-ss-forgeca.crt new file mode 100644 index 000000000..2265bf576 --- /dev/null +++ b/third_party/mbedtls/test/data/server5-ss-forgeca.crt @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBlDCCATmgAwIBAgIBTTAKBggqhkjOPQQDAjBKMQswCQYDVQQGEwJVSzERMA8G +A1UECgwIbWJlZCBUTFMxKDAmBgNVBAMMH21iZWQgVExTIFRlc3QgaW50ZXJtZWRp +YXRlIENBIDMwHhcNMTUwOTAxMTEwODQzWhcNMjUwODI5MTEwODQzWjBKMQswCQYD +VQQGEwJVSzERMA8GA1UECgwIbWJlZCBUTFMxKDAmBgNVBAMMH21iZWQgVExTIFRl +c3QgaW50ZXJtZWRpYXRlIENBIDMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ3 +zFbZdgkeWnI+x1kt/yBu7nz5BpF00K0UtfdoIllikk7lANgjEf/qL9I0XV0WvYqI +wmt3DVXNiioO+gHItO3/oxAwDjAMBgNVHRMEBTADAQH/MAoGCCqGSM49BAMCA0kA +MEYCIQDBFcXh+IloVYbMiHfCFhw6cYJsj7PZXuTdDMMkNbyJNAIhALz7fBVAMYz9 +/g48bLdYT47LOc9QNuaboLIxsq5RseJL +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5-tricky-ip-san.crt b/third_party/mbedtls/test/data/server5-tricky-ip-san.crt new file mode 100644 index 000000000..135830fbe --- /dev/null +++ b/third_party/mbedtls/test/data/server5-tricky-ip-san.crt @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBljCCATygAwIBAgIBTTAKBggqhkjOPQQDAjBBMQswCQYDVQQGEwJVSzERMA8G +A1UECgwITWJlZCBUTFMxHzAdBgNVBAMMFk1iZWQgVExTIFRyaWNreSBJUCBTQU4w +HhcNMjAwNzIzMTAyNzQ2WhcNMzAwNzIxMTAyNzQ2WjBBMQswCQYDVQQGEwJVSzER +MA8GA1UECgwITWJlZCBUTFMxHzAdBgNVBAMMFk1iZWQgVExTIFRyaWNreSBJUCBT +QU4wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ3zFbZdgkeWnI+x1kt/yBu7nz5 +BpF00K0UtfdoIllikk7lANgjEf/qL9I0XV0WvYqIwmt3DVXNiioO+gHItO3/oyUw +IzAhBgNVHREEGjAYhwRhYmNkhxBhYmNkLmV4YW1wbGUuY29tMAoGCCqGSM49BAMC +A0gAMEUCIFDc8ZALA/9Zv7dZTWrZOOp/dgPAEJRT+h68nD6KF+XyAiEAs1QqugOo +Dwru0DSEmpYkmj1Keunpd0VopM0joC1cc5A= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5-unsupported_othername.crt b/third_party/mbedtls/test/data/server5-unsupported_othername.crt new file mode 100644 index 000000000..b46fc2d96 --- /dev/null +++ b/third_party/mbedtls/test/data/server5-unsupported_othername.crt @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBtjCCAVygAwIBAgIBTTAKBggqhkjOPQQDAjBNMQswCQYDVQQGEwJVSzERMA8G +A1UECgwITWJlZCBUTFMxKzApBgNVBAMMIk1iZWQgVExTIHVuc3VwcG9ydGVkIG90 +aGVybmFtZSBTQU4wHhcNMTkwNTAxMDkxMDM1WhcNMjkwNDI4MDkxMDM1WjBNMQsw +CQYDVQQGEwJVSzERMA8GA1UECgwITWJlZCBUTFMxKzApBgNVBAMMIk1iZWQgVExT +IHVuc3VwcG9ydGVkIG90aGVybmFtZSBTQU4wWTATBgcqhkjOPQIBBggqhkjOPQMB +BwNCAAQ3zFbZdgkeWnI+x1kt/yBu7nz5BpF00K0UtfdoIllikk7lANgjEf/qL9I0 +XV0WvYqIwmt3DVXNiioO+gHItO3/oy0wKzApBgNVHREEIjAgoB4GAyoDBKAXDBVz +b21lIG90aGVyIGlkZW50aWZpZXIwCgYIKoZIzj0EAwIDSAAwRQIhANkj6n9qHYVi +FLfb0IRZpIsvvuNCjSgT8yBLVjJYQj3nAiBffQKZ7y/F6rfon6L1GZU0BBja8BLX +rXp8WpY7Bc8myQ== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5.crt b/third_party/mbedtls/test/data/server5.crt new file mode 100644 index 000000000..459742828 --- /dev/null +++ b/third_party/mbedtls/test/data/server5.crt @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICHzCCAaWgAwIBAgIBCTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA +2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jgZ0wgZowCQYDVR0TBAIwADAd +BgNVHQ4EFgQUUGGlj9QH2deCAQzlZX+MY0anE74wbgYDVR0jBGcwZYAUnW0gJEkB +PyvLeLUZvH4kydv7NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xh +clNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAoG +CCqGSM49BAMCA2gAMGUCMQCaLFzXptui5WQN8LlO3ddh1hMxx6tzgLvT03MTVK2S +C12r0Lz3ri/moSEpNZWqPjkCMCE2f53GXcYLqyfyJR078c/xNSUU5+Xxl7VZ414V +fGa5kHvHARBPc8YAIVIqDvHH1Q== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5.crt.der b/third_party/mbedtls/test/data/server5.crt.der new file mode 100644 index 0000000000000000000000000000000000000000..08d8dd311b525fd51171a1019ad3194dad91580a GIT binary patch literal 547 zcmXqLVv;v#VqCg_nTe5!iILNQi;Y98&EuRc3p0~}ogudYCmVAp3!5;LpO2xS0Y8Yt zCCm|!pOaV=9PDE#V;}_*Vipz#3l$gVD1@XImngV8D>yqE$cghB8XH&|nHZXy8X1^G ziSrtPxJFQ}feAtLg$x8B=5yxcCnx4)dUQv4h>n#0YgPGb1~*69bF+nXsE> zoN`e`cE=-i|10FZtNF<`vE;&9k*(h|lp>QR`8{R0p)C0SmHs7@*jTZ>T^)zA%Xvf3 zc4_hbVmz_s?f=D%a}642fxRp%%)(^AU?2;$U6zkUj720MacTb*_M6w67;`VyonyI+c^Rf1A}TbXwv-X(%>vG8}Y%RF~v@ z<^^)(FlR6rq%s*Y%+iUuzU=m*rzyN2cKY4Do_I~z@c8QDhTWGh7Ym21ox~lx`of;? z>-3*3RMa$`y2{Ry$w1Mpe(tf@W8ACNKdH)Ee?0%uR8{2p(~r})Mm~-ctx4NCq53$Z RfPe8Z2E`yPzK_SR0ss?|s)_&r literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/server5.eku-cli.crt b/third_party/mbedtls/test/data/server5.eku-cli.crt new file mode 100644 index 000000000..8aa2e44a0 --- /dev/null +++ b/third_party/mbedtls/test/data/server5.eku-cli.crt @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB5DCCAWmgAwIBAgIBPDAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MTQwNDEwMTcyMTIxWhcNMjQwNDA3MTcyMTIxWjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA +2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jYjBgMAkGA1UdEwQCMAAwHQYD +VR0OBBYEFFBhpY/UB9nXggEM5WV/jGNGpxO+MB8GA1UdIwQYMBaAFJ1tICRJAT8r +y3i1Gbx+JMnb+zZ8MBMGA1UdJQQMMAoGCCsGAQUFBwMCMAoGCCqGSM49BAMCA2kA +MGYCMQCzHyEvd56zm1AzfDBi3psz3rDL/m0RN2WnbRBQJxIJqjwEXOrKazko9m9q +owgau88CMQDuI0fsq5tnyiHPaDSAE21/6hlrCR6deNbwzB94OuPIbx1wIas9D1jc +//iSmKtbl8Y= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5.eku-cs.crt b/third_party/mbedtls/test/data/server5.eku-cs.crt new file mode 100644 index 000000000..db97b403e --- /dev/null +++ b/third_party/mbedtls/test/data/server5.eku-cs.crt @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB4zCCAWmgAwIBAgIBOjAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MTQwNDEwMTcyMDQxWhcNMjQwNDA3MTcyMDQxWjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA +2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jYjBgMAkGA1UdEwQCMAAwHQYD +VR0OBBYEFFBhpY/UB9nXggEM5WV/jGNGpxO+MB8GA1UdIwQYMBaAFJ1tICRJAT8r +y3i1Gbx+JMnb+zZ8MBMGA1UdJQQMMAoGCCsGAQUFBwMDMAoGCCqGSM49BAMCA2gA +MGUCMQC294oVK6fUjH/abI1xzytTusi8dl7518L0Y19q8zi9K19OtxzPK09h7xyy +gaJRvpUCMFS6hYhrht38yqwwhSVlnmTMVtira58mEUhL6v7Qzw1sz/Dm4aXkW3s6 +JQV1kqqbRw== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5.eku-cs_any.crt b/third_party/mbedtls/test/data/server5.eku-cs_any.crt new file mode 100644 index 000000000..8fa8632dd --- /dev/null +++ b/third_party/mbedtls/test/data/server5.eku-cs_any.crt @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB6TCCAW+gAwIBAgIBOzAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MTQwNDEwMTcyMDU4WhcNMjQwNDA3MTcyMDU4WjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA +2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jaDBmMAkGA1UdEwQCMAAwHQYD +VR0OBBYEFFBhpY/UB9nXggEM5WV/jGNGpxO+MB8GA1UdIwQYMBaAFJ1tICRJAT8r +y3i1Gbx+JMnb+zZ8MBkGA1UdJQQSMBAGCCsGAQUFBwMDBgRVHSUAMAoGCCqGSM49 +BAMCA2gAMGUCMQCSYaq/9IKOTkzIrU/eOtpha/3af3JwT6vKh4N3cSX62ksMz0GT +Uxmq4UGMBt4VmBkCMBGpYqof6hS1o92ltNRpDSHuVQ+nke1lOsoQ1plZp4SI+bY1 +bUD/WrUSLlwikZAeng== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5.eku-srv.crt b/third_party/mbedtls/test/data/server5.eku-srv.crt new file mode 100644 index 000000000..64312f6c4 --- /dev/null +++ b/third_party/mbedtls/test/data/server5.eku-srv.crt @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB5DCCAWmgAwIBAgIBPjAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MTQwNDEwMTcyMTU0WhcNMjQwNDA3MTcyMTU0WjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA +2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jYjBgMAkGA1UdEwQCMAAwHQYD +VR0OBBYEFFBhpY/UB9nXggEM5WV/jGNGpxO+MB8GA1UdIwQYMBaAFJ1tICRJAT8r +y3i1Gbx+JMnb+zZ8MBMGA1UdJQQMMAoGCCsGAQUFBwMBMAoGCCqGSM49BAMCA2kA +MGYCMQDQzjWB0xZs/8IsqJb7owYYtCiT17939Uuc/1yBF69pJRy7KV/qJlHNvlVu +qwWVTx0CMQDNW/0dlX1gU6ashrZv5Ly4sijg/g645fFpfMKCNXysEb9xiBeEj5de +2x5sX/0OSx4= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5.eku-srv_cli.crt b/third_party/mbedtls/test/data/server5.eku-srv_cli.crt new file mode 100644 index 000000000..9f58fedd2 --- /dev/null +++ b/third_party/mbedtls/test/data/server5.eku-srv_cli.crt @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB7DCCAXOgAwIBAgIBPTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MTQwNDEwMTcyMTQyWhcNMjQwNDA3MTcyMTQyWjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA +2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jbDBqMAkGA1UdEwQCMAAwHQYD +VR0OBBYEFFBhpY/UB9nXggEM5WV/jGNGpxO+MB8GA1UdIwQYMBaAFJ1tICRJAT8r +y3i1Gbx+JMnb+zZ8MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAKBggq +hkjOPQQDAgNnADBkAjAmQjJxxC82ZhBpH/GQkOQXDmaaV/JHRHGok1cWn3j3Xj8A +fqRZkp8JihpGIMse208CMFCMdNAfNd1tv+oPuynoK5Oh6/YlASX/otJT68voEIAN +SmsT1m9VPQMIyUo/3RtYjg== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/server5.key b/third_party/mbedtls/test/data/server5.key new file mode 100644 index 000000000..c8459ee46 --- /dev/null +++ b/third_party/mbedtls/test/data/server5.key @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIPEqEyB2AnCoPL/9U/YDHvdqXYbIogTywwyp6/UfDw6noAoGCCqGSM49 +AwEHoUQDQgAEN8xW2XYJHlpyPsdZLf8gbu58+QaRdNCtFLX3aCJZYpJO5QDYIxH/ +6i/SNF1dFr2KiMJrdw1VzYoqDvoByLTt/w== +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/server5.key.der b/third_party/mbedtls/test/data/server5.key.der new file mode 100644 index 0000000000000000000000000000000000000000..6bd4ebb81c1f833140b5a097ef464bc9deffeb75 GIT binary patch literal 121 zcmV-<0EYiCcLD(c1R(J$6Cid1aHu@L{ZsY>9`|ZphRC7>^1}?N>-8TG4yT|B1_&yK zNX|V20SBQ(13~}&G%f_kI=F#?@mywZ`mBGN;klTQhjX9KsO_<5g$57CK zAH?C};RwjjNh}Hu_A!(+5C;h{^9aC%6hcyqOB9?P4dldm4J{3f3=IrTOiT<6qQrTP zkhzo@-o&Vc>{v!t2IeM4eg=akMlPl%Mn;AM_s#!^?|v|Cu6^6RX-2g!OT`wPRs1;f z%9~fGYa}8#rYwCk`)K!lDY=;zGu!2=5A<5zw}>sMV81-?=HwSUivo|HTWk=t^3!vN z0+G`$i;B1pJ$3kL_jDQG=AUo8k`L_AWGI;vZoOhD%Y?#@dz)|CUt9XfMyvn5dcxsj z^H1-3lTf?;S&Pv=|KAa6O3cw$wp{)F_3<>lf&)+V_Wsd(_sB8yfQeqMN>S!%_l+VB z&9&)Y+P)dC{#dzW(^fs9pDp4alJeExvi&hv5v`G zd4cFBi_{d(S3G%r(&7sWPi&rja`nr@pU$^W>u+E(nm02df6-MYW=00a#Q_F>20Xy{ zkrifPHDG3B{BIx&;_;w5Jo|G>;U=To z+^rdN%#44O{|NfRZP7oe;TF5El%9(ZZ}?j+gNTP~)@!Wynk*z6v-L-Ld{nfA!<%QH z`sZgdhs-|u**0?R)(@ha=ETYBc&69&Eq)@FK1Xtj63Zz=SzRaDpO!n=Z4W*(aXve3 zzvrsvMP9pJ+}*r%2bTtCxukF3@8<_s{GIFN9&pNY@-d;)k-{}1vlb?>d~&LeyvVZX zZoYf1n*W@TJ2tKN7AfDoHRG7>8hHly!OP;to-u%t*%n|?`U{pi^ literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/test-ca-sha256.crt b/third_party/mbedtls/test/data/test-ca-sha256.crt new file mode 100644 index 000000000..9c71cef0c --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca-sha256.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgIBAzANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDAwWhcNMjkwMjEwMTQ0NDAwWjA7MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA3zf8F7vglp0/ht6WMn1EpRagzSHx +mdTs6st8GFgIlKXsm8WL3xoemTiZhx57wI053zhdcHgH057Zk+i5clHFzqMwUqny +50BwFMtEonILwuVA+T7lpg6z+exKY8C4KQB0nFc7qKUEkHHxvYPZP9al4jwqj+8n +YMPGn8u67GB9t+aEMr5P+1gmIgNb1LTV+/Xjli5wwOQuvfwu7uJBVcA0Ln0kcmnL +R7EUQIN9Z/SG9jGr8XmksrUuEvmEF/Bibyc+E1ixVA0hmnM3oTDPb5Lc9un8rNsu +KNF+AksjoBXyOGVkCeoMbo4bF6BxyLObyavpw/LPh5aPgAIynplYb6LVAgMBAAGj +UDBOMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFLRa5KWz3tJS9rnVppUP6z68x/3/ +MB8GA1UdIwQYMBaAFLRa5KWz3tJS9rnVppUP6z68x/3/MA0GCSqGSIb3DQEBCwUA +A4IBAQA4qFSCth2q22uJIdE4KGHJsJjVEfw2/xn+MkTvCMfxVrvmRvqCtjE4tKDl +oK4MxFOek07oDZwvtAT9ijn1hHftTNS7RH9zd/fxNpfcHnMZXVC4w4DNA1fSANtW +5sY1JB5Je9jScrsLSS+mAjyv0Ow3Hb2Bix8wu7xNNrV5fIf7Ubm+wt6SqEBxu3Kb ++EfObAT4huf3czznhH3C17ed6NSbXwoXfby7stWUDeRJv08RaFOykf/Aae7bY5PL +yTVrkAnikMntJ9YI+hNNYt3inqq11A5cN0+rVTst8UKCxzQ4GpvroSwPKTFkbMw4 +/anT1dVxr/BtwJfiESoK3/4CeXR1 +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca-sha256.crt.der b/third_party/mbedtls/test/data/test-ca-sha256.crt.der new file mode 100644 index 0000000000000000000000000000000000000000..aefec20e96272db7482f1aa244601b90886b04a4 GIT binary patch literal 837 zcmXqLVs&G%f_kI=F#?@mywa1mBGN;klTQhjX9KsO_<5g$57CK zAH?C};RwjjNh}Hu_A!(+5C;h{^9aC%6hcyqOB9?P4dldm4J{3f3=IrTOiT<6qQrTP zkhzo@-o&Vc>{v!t2IeM4eg=akMlPl%Mn;AM_s#!^?|v|Cu6^6RX-2g!OT`wPRs1;f z%9~fGYa}8#rYwCk`)K!lDY=;zGu!2=5A<5zw}>sMV81-?=HwSUivo|HTWk=t^3!vN z0+G`$i;B1pJ$3kL_jDQG=AUo8k`L_AWGI;vZoOhD%Y?#@dz)|CUt9XfMyvn5dcxsj z^H1-3lTf?;S&Pv=|KAa6O3cw$wp{)F_3<>lf&)+V_Wsd(_sB8yfQeqMN>S!%_l+VB z&9&)Y+P)dC{#dzW(^fs9pDp4alJeExvi&hv5v`G zd4cFBi_{d(S3G%r(&7sWPi&rja`nr@pU$^W>u+E(nm02df6-MYW=00a#Q_F>20Xy{ zkrifPHDG3B{BIx&;_`ujt78;2sH_W&y_{Z$Oq_Z-JRhV6dl_N!@|p~aR3 zPZzA?ITAc?vfm5dIr>{z{&rb@Z7F~2b7i+neR28sk7m>F$Q4V*2JAT8aF#jz62tAV zXU9xcFN~TC!YKL1v7#-P5gf#^WE*_$)``6 zW>4UJG~wi1^=llzgng6lKAN{`>lMBjbN|($*18{^nvR=TNX>q|P={aBFeT@V#ov{e YuU;)&{~`Cl^hbhPT=)MmRhE&G%f_kI=F#?@mywZ`mBGN;klTQhjX9KsO_<5g$57CK zAH?C};RwjjNh}Hu_A!(+5C;h{^9aC%6hcyqOB9?P4dldm4J{3f3=IrTOiT<6qQrTP zkhzo@-o&Vc>{v!t2IeM4eg=akMlPl%Mn;AM_s#!^?|v|Cu6^6RX-2g!OT`wPRs1;f z%9~fGYa}8#rYwCk`)K!lDY=;zGu!2=5A<5zw}>sMV81-?=HwSUivo|HTWk=t^3!vN z0+G`$i;B1pJ$3kL_jDQG=AUo8k`L_AWGI;vZoOhD%Y?#@dz)|CUt9XfMyvn5dcxsj z^H1-3lTf?;S&Pv=|KAa6O3cw$wp{)F_3<>lf&)+V_Wsd(_sB8yfQeqMN>S!%_l+VB z&9&)Y+P)dC{#dzW(^fs9pDp4alJeExvi&hv5v`G zd4cFBi_{d(S3G%r(&7sWPi&rja`nr@pU$^W>u+E(nm02df6-MYW=00a#Q_F>20Xy{ zkrifPHDG3B{BIx&;_;w5Jo|G>;U=To z+^rdN%#44O{|NfRZP7oe;TF5El%9(ZZ}?j+gNTP~)@!Wynk*z6v-L-Ld{nfA!<%QH z`sZgdhs-|u**0?R)(@ha=ETYBc&69&Eq)@FK1Xtj63Zz=SzRaDpO!n=Z4W*(aXve3 zzvrsvMP9pJ+}*r%2bTtCxukF3@8<_s{GIFN9&pNY@-d;)k-{}1vlb?>d~&LeyvVZX zZoYf1n*W@TJ2tKN7AfDoHRG7>8hHly!OP;to-u%t*%n|?`U{pi^ literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/test-ca.der b/third_party/mbedtls/test/data/test-ca.der new file mode 100644 index 0000000000000000000000000000000000000000..039fb9e43004e622bd1404116f68208800005c6d GIT binary patch literal 837 zcmXqLVs&G%f_kI=F#?@mywZ`mBGN;klTQhjX9KsO_<5g$57CK zAH?C};RwjjNh}Hu_A!(+5C;h{^9aC%6hcyqOB9?P4dldm4Gj&942=v;OiT<6qQrTP zkhzo@-o&Vc>{v!t2IeM4eg=akMlPl%Mn;AM_s#!^?|v|Cu6^6RX-2g!OT`wPRs1;f z%9~fGYa}8#rYwCk`)K!lDY=;zGu!2=5A<5zw}>sMV81-?=HwSUivo|HTWk=t^3!vN z0+G`$i;B1pJ$3kL_jDQG=AUo8k`L_AWGI;vZoOhD%Y?#@dz)|CUt9XfMyvn5dcxsj z^H1-3lTf?;S&Pv=|KAa6O3cw$wp{)F_3<>lf&)+V_Wsd(_sB8yfQeqMN>S!%_l+VB z&9&)Y+P)dC{#dzW(^fs9pDp4alJeExvi&hv5v`G zd4cFBi_{d(S3G%r(&7sWPi&rja`nr@pU$^W>u+E(nm02df6-MYW=00a#Q_F>20Xy{ zkrifPHDG3B{BIx&;_TP!7QC4hV&D%ba$=(yp zSf5T{U|xOMYODB`ORhngYUdu$ke${2W5Fa@4<>WHgK<+21^?T)$E3-`#B5?uM^*ZC z6Nm2K9(kA78#MN@`c78-w(dSl>SO}D* z?3=}l-x?m7IGKkYd%%r3-#A@xcn8y-*^}tGa#6+3qcBpb^5;Ns6w5@Satp%cK>0r9 zrVg|D>`G(6xG4a1oL4)jr38?1@x6oDKh~wHMtQE-2A{0!t&H74kS`WC`jFZjKulpmE5vo5`!` z!}8CEmXCk}GM<@OZ=%%#0|5X50)hbmKlcaIG;iC-e{PC?6vYLjp;1&rsXmhe=~vTIC9mT`cC^M^%V=R zgl4M(;271BeAbW2OLhn=9f4>t;reiF6HX8VH9p14SRjfa7&xF0?Zmr9Z}o&*u+L7N zSQBeCHEE&J#PY#N1RznlYouMJON59+NSQ3Vq?gv#820R3(J@KM@{bEm?+F6_ef_(y zD}$6G#HT)H_25_B^6e}>fpm5rmTz<(G7c0m&~)(h2ff45BEqPZk_LZ60+GDkBLRt& zAVg&K9cR*y=xL=XCFW3^mEoaRT>w%6nFj-Kg*Ul5;T>;y#2 zKls@?7vN9+*iFqwRCK=z#AlqR*okFK{a7kT5A-*-Rj?iHr#bvjqr`POqnM{f^=8X_ zW&405=KuYfAC7DPUXy0uY;VK%I4=KbwXCkY#&H&F(D)+R_@Z(k(&9RBOWvz50)c@5 z+EJUhvMLmHSU`;@aQZPwupl8c`b<}-5s34rt|95RE78rT_}C1Jb|N)I&Oaq7gME3Y zG1ly|zuGjm_Od(kcv=L5Gd`l?fr1m%H5X%>p2UrjOaphvaa-<#ZPj>)_AGhAO0;>9 zaKGO)R+e$&4rr0Q>dQ00zD3vkF#Q2L0)c@5(w{1~I2p$mm2-Hm^~-gGe;G^5hWknt znzk1NNe7MgW=aP31*hL;f;|7W9ao7nUz`PXfAd}3G-YyyBBT@>LBr(Go@v$VICOAB z+}Tj%mu+*_`^cyIw8F%lT@2Nqd9zf)w`@Iq%PsiC^LSb_D!2@72Kw@1(?Za_$V#OR z0)c@5)Txja-oGrwjh*|U!sLVFd1WHgw@GYGlpi9oVCOmju{ffu543Em=bkjj`K;vcA#7 zgOoHl*2(NN3Hd>7Ttbxh1pG2NX}lc!K4F-^fY>%i!)?MY=Yc90G-NPNmb)evxj{Dm ziq=zns_Z#JQ19cj0Vp!cZS|TSpEth#I3OaCjLnq-@=b3Vv_tS2-(|p(=bbMJ=j>^y G!jBEQxnExZ literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/test-ca.opensslconf b/third_party/mbedtls/test/data/test-ca.opensslconf new file mode 100644 index 000000000..64347de83 --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca.opensslconf @@ -0,0 +1,77 @@ +[req] +x509_extensions = v3_ca +distinguished_name = req_dn + +[req_dn] +countryName = NL +organizationalUnitName = PolarSSL +commonName = PolarSSL Test CA + +[v3_ca] +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid:always,issuer:always +basicConstraints = CA:true + +[othername_san] +subjectAltName=otherName:1.3.6.1.5.5.7.8.4;SEQ:hw_module_name + +[unsupoported_othername_san] +subjectAltName=otherName:1.2.3.4;UTF8:some other identifier + +[dns_alt_names] +subjectAltName=DNS:example.com, DNS:example.net, DNS:*.example.org + +[alt_names] +DNS.1=example.com +otherName.1=1.3.6.1.5.5.7.8.4;SEQ:hw_module_name +DNS.2=example.net +DNS.3=*.example.org + +[multiple_san] +subjectAltName=@alt_names + +[hw_module_name] +hwtype = OID:1.3.6.1.4.1.17.3 +hwserial = OCT:123456 + +[v3_any_policy_ca] +basicConstraints = CA:true +certificatePolicies = 2.5.29.32.0 + +[v3_any_policy_qualifier_ca] +basicConstraints = CA:true +certificatePolicies = @policy_info + +[v3_multi_policy_ca] +basicConstraints = CA:true +certificatePolicies = 1.2.3.4,2.5.29.32.0 + +[v3_unsupported_policy_ca] +basicConstraints = CA:true +certificatePolicies = 1.2.3.4 + +[policy_info] +policyIdentifier = 2.5.29.32.0 +CPS.1 ="CPS uri string" + +[fan_cert] +extendedKeyUsage = 1.3.6.1.4.1.45605.1 + +[noext_ca] +basicConstraints = CA:true + +[test_ca] +database = /dev/null + +[crl_ext_idp] +issuingDistributionPoint=critical, @idpdata + +[crl_ext_idp_nc] +issuingDistributionPoint=@idpdata + +[idpdata] +fullname=URI:http://pki.example.com/ + +# these IPs are the ascii values for 'abcd' and 'abcd.example.com' +[tricky_ip_san] +subjectAltName=IP:97.98.99.100,IP:6162:6364:2e65:7861:6d70:6c65:2e63:6f6d diff --git a/third_party/mbedtls/test/data/test-ca.server1.db b/third_party/mbedtls/test/data/test-ca.server1.db new file mode 100644 index 000000000..3c0e0128e --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca.server1.db @@ -0,0 +1,2 @@ +R 210212144406Z 110212124407Z 01 unknown /C=NL/O=PolarSSL/CN=PolarSSL Server 1 +R 210212144400Z 110212124407Z 03 unknown /C=NL/O=PolarSSL/CN=PolarSSL Test CA diff --git a/third_party/mbedtls/test/data/test-ca.server1.future-crl.db b/third_party/mbedtls/test/data/test-ca.server1.future-crl.db new file mode 100644 index 000000000..763aa1219 --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca.server1.future-crl.db @@ -0,0 +1,2 @@ +R 210212144406Z 290101124407Z 01 unknown /C=NL/O=PolarSSL/CN=PolarSSL Server 1 +R 210212144400Z 290101124407Z 03 unknown /C=NL/O=PolarSSL/CN=PolarSSL Test CA diff --git a/third_party/mbedtls/test/data/test-ca.server1.future-crl.opensslconf b/third_party/mbedtls/test/data/test-ca.server1.future-crl.opensslconf new file mode 100644 index 000000000..e9ce7543a --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca.server1.future-crl.opensslconf @@ -0,0 +1,18 @@ + [ ca ] + default_ca = test-ca + + [ test-ca ] + certificate = test-ca.crt + private_key = test-ca.key + serial = test-ca.server1.serial + default_md = sha1 + default_startdate = 110212144406Z + default_enddate = 210212144406Z + new_certs_dir = ./ + database = ./test-ca.server1.future-crl.db + policy = policy_match + + [policy_match] + countryName = supplied + organizationName = supplied + commonName = supplied diff --git a/third_party/mbedtls/test/data/test-ca.server1.opensslconf b/third_party/mbedtls/test/data/test-ca.server1.opensslconf new file mode 100644 index 000000000..209b0fffa --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca.server1.opensslconf @@ -0,0 +1,18 @@ + [ ca ] + default_ca = test-ca + + [ test-ca ] + certificate = test-ca.crt + private_key = test-ca.key + serial = test-ca.server1.serial + default_md = sha1 + default_startdate = 110212144406Z + default_enddate = 210212144406Z + new_certs_dir = ./ + database = ./test-ca.server1.db + policy = policy_match + + [policy_match] + countryName = supplied + organizationName = supplied + commonName = supplied diff --git a/third_party/mbedtls/test/data/test-ca2-expired.crt b/third_party/mbedtls/test/data/test-ca2-expired.crt new file mode 100644 index 000000000..22e4797f3 --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca2-expired.crt @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB/TCCAYCgAwIBAgIBATAMBggqhkjOPQQDAgUAMD4xCzAJBgNVBAYTAk5MMREw +DwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQTAe +Fw0wMzA5MjQxNTQ5NDhaFw0xMzA5MjQxNTQ5NDhaMD4xCzAJBgNVBAYTAk5MMREw +DwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQTB2 +MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBuww5XUzM5 +WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiyaY7zQa0p +w7RfdadHb9UZKVVpmlM7ILRmFmAzHqNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4E +FgQUnW0gJEkBPyvLeLUZvH4kydv7NnwwHwYDVR0jBBgwFoAUnW0gJEkBPyvLeLUZ +vH4kydv7NnwwDAYIKoZIzj0EAwIFAANpADBmAjEAvQ/49lXXrLYdOIGtTaYWjpZP +tRBXQiGPMzUvmKBk7gM7bF4iFPsdJikyXHmuwv3RAjEA8vtUX8fAAB3fbh5dEXRm +l7tz0Sw/RW6AHFtaIauGkhHqeKIaKIi6WSgHu6x97uyg +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca2.crt b/third_party/mbedtls/test/data/test-ca2.crt new file mode 100644 index 000000000..7ac79e440 --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca2.crt @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIICBDCCAYigAwIBAgIJAMFD4n5iQ8zoMAwGCCqGSM49BAMCBQAwPjELMAkGA1UE +BhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRwwGgYDVQQDDBNQb2xhcnNzbCBUZXN0 +IEVDIENBMB4XDTE5MDIxMDE0NDQwMFoXDTI5MDIxMDE0NDQwMFowPjELMAkGA1UE +BhMCTkwxETAPBgNVBAoMCFBvbGFyU1NMMRwwGgYDVQQDDBNQb2xhcnNzbCBUZXN0 +IEVDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEw9orNEE3WC+HVv78ibopQ0tO +4G7DDldTMzlY1FK0kZU5CyPfXxckYkj8GpUpziwth8KIUoCv1mqrId240xxuWLjK +6LJpjvNBrSnDtF91p0dv1RkpVWmaUzsgtGYWYDMeo1AwTjAMBgNVHRMEBTADAQH/ +MB0GA1UdDgQWBBSdbSAkSQE/K8t4tRm8fiTJ2/s2fDAfBgNVHSMEGDAWgBSdbSAk +SQE/K8t4tRm8fiTJ2/s2fDAMBggqhkjOPQQDAgUAA2gAMGUCMFHKrjAPpHB0BN1a +LH8TwcJ3vh0AxeKZj30mRdOKBmg/jLS3rU3g8VQBHpn8sOTTBwIxANxPO5AerimZ +hCjMe0d4CTHf1gFZMF70+IqEP+o5VHsIp2Cqvflb0VGWFC5l9a4cQg== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca2.crt.der b/third_party/mbedtls/test/data/test-ca2.crt.der new file mode 100644 index 0000000000000000000000000000000000000000..2c8e217432a33259f5a5bf666daa4b77de32b0dc GIT binary patch literal 520 zcmXqLVq!69V(eJJ%*4pV#K~~b`B7bx^O+Y0JZv0VZ64=rS(uqv84TF}A43@fDUc8|k1$xMxHv~4B(=Ci!PQy8+0j5woY&CO zz{t?R(8R>Vz#vMT*9e(QvH4{N0&MJH_cAfEv1&K6Feou6F|ZuIrETJ99--eJ_U}*U zE=^}|zXy4T`ND&ZEhDZ3ZJ9XLl3V$Hytqn|#~-Pwn&)(M+YfaFHLSmuwOaA+j>|H6 z5j#%3*p%7#*>SDr;Vto{%iZ&@N@|8?&I-0x*peoeU@W&dz`zd}Qp};U!Yr%?%#4ix z4P-$)J{B<+k-51FDxQq?+NUeFO75vsIeGiHS&e}_NLrai!a%G6y8@JOXUFF(3k>|a@iRC6p(She?O^u@qwB6_J`*U2~m E0Kv4QxBvhE literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/test-ca2.key b/third_party/mbedtls/test/data/test-ca2.key new file mode 100644 index 000000000..ccbba3c2a --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca2.key @@ -0,0 +1,6 @@ +-----BEGIN EC PRIVATE KEY----- +MIGkAgEBBDCD2RUOoHHwVxAzozi4hsGmEV1ttAPhKXZF14dvI6tEIOpke4WxdueF +lap01tGkXuqgBwYFK4EEACKhZANiAATD2is0QTdYL4dW/vyJuilDS07gbsMOV1Mz +OVjUUrSRlTkLI99fFyRiSPwalSnOLC2HwohSgK/Waqsh3bjTHG5YuMrosmmO80Gt +KcO0X3WnR2/VGSlVaZpTOyC0ZhZgMx4= +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/test-ca2.key.der b/third_party/mbedtls/test/data/test-ca2.key.der new file mode 100644 index 0000000000000000000000000000000000000000..bf64141aaef8c4820c385bf55303706db2846d4d GIT binary patch literal 167 zcmV;Y09gMpfusTf0R%9E*%c0;aqw3VGov`ThQX#0U2U`j;VE`S*N1N-t3)8`WP63N zcISnas&v-Tq+aTv2L=Tzfdl{|p=1MM00hI@D>OkjSTBcG{``r$DML$6;BLbXS5q@N zSkzLqk(D_MBi~;aBw|SX8kH%|EG>t^h*E&B)@rLE-MG^nZdka==(1^!^FggC!?a&@ Vr$=wq87Wn1no~OX literal 0 HcmV?d00001 diff --git a/third_party/mbedtls/test/data/test-ca2.key.enc b/third_party/mbedtls/test/data/test-ca2.key.enc new file mode 100644 index 000000000..bb7099012 --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca2.key.enc @@ -0,0 +1,9 @@ +-----BEGIN EC PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,307EAB469933D64E + +IxbrRmKcAzctJqPdTQLA4SWyBYYGYJVkYEna+F7Pa5t5Yg/gKADrFKcm6B72e7DG +ihExtZI648s0zdYw6qSJ74vrPSuWDe5qm93BqsfVH9svtCzWHW0pm1p0KTBCFfUq +UsuWTITwJImcnlAs1gaRZ3sAWm7cOUidL0fo2G0fYUFNcYoCSLffCFTEHBuPnagb +a77x/sY1Bvii8S9/XhDTb6pTMx06wzrm +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/test-ca2.ku-crl.crt b/third_party/mbedtls/test/data/test-ca2.ku-crl.crt new file mode 100644 index 000000000..4fb40838c --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca2.ku-crl.crt @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBzDCCAVOgAwIBAgIJAP6mZLzh0IPSMAoGCCqGSM49BAMCMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTAeFw0xNDA0MDkxMTIzMzhaFw0yNDA0MDYxMTIzMzhaMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBu +ww5XUzM5WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiy +aY7zQa0pw7RfdadHb9UZKVVpmlM7ILRmFmAzHqMdMBswDAYDVR0TBAUwAwEB/zAL +BgNVHQ8EBAMCAQIwCgYIKoZIzj0EAwIDZwAwZAIwZOCKY0EHXYzI4cQsFnfOrxm1 +ufvNeZ4ZcSZWrkTBazW2OBCuCP9SLznec3SFOUvvAjAKe/qycfxkHivjieCEG1Kt +m2D4QKSJELUhTHr4zdkeqbzgui0y3iouaoyWsKvetNg= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca2.ku-crt.crt b/third_party/mbedtls/test/data/test-ca2.ku-crt.crt new file mode 100644 index 000000000..edacc64c9 --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca2.ku-crt.crt @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBzTCCAVOgAwIBAgIJAODh6PAeD9/vMAoGCCqGSM49BAMCMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTAeFw0xNDA0MDkxMTIzNTRaFw0yNDA0MDYxMTIzNTRaMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBu +ww5XUzM5WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiy +aY7zQa0pw7RfdadHb9UZKVVpmlM7ILRmFmAzHqMdMBswDAYDVR0TBAUwAwEB/zAL +BgNVHQ8EBAMCAgQwCgYIKoZIzj0EAwIDaAAwZQIwGGlbynd1jU3WkUx6Irhk9Lob +z2B+1eIO6+eu3En8B3rh8Ipfxo0e0hpfaRFYP1MUAjEAjxxBchRWJAzZ6/47Wg/7 +UoasRINgP5B/uJhTnftS1bqyuWHastb4LW5/YLOvPbMQ +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca2.ku-crt_crl.crt b/third_party/mbedtls/test/data/test-ca2.ku-crt_crl.crt new file mode 100644 index 000000000..ac74e402a --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca2.ku-crt_crl.crt @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBzDCCAVOgAwIBAgIJAPejOupCJS65MAoGCCqGSM49BAMCMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTAeFw0xNDA0MDkxMTIyMjVaFw0yNDA0MDYxMTIyMjVaMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBu +ww5XUzM5WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiy +aY7zQa0pw7RfdadHb9UZKVVpmlM7ILRmFmAzHqMdMBswDAYDVR0TBAUwAwEB/zAL +BgNVHQ8EBAMCAQYwCgYIKoZIzj0EAwIDZwAwZAIwMKLVXB4YBQ0Ha4dEvFPcJtau +TS5Vd4UqG3xQ10YcJogweuqaGHSFgdnEUfoX+4p5AjApMnYXFfUjSmlyfJmTaswO +gaR5sUnnw33NA9j1ercem3asCYz6a8T0zo8/rR33XVU= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca2.ku-ds.crt b/third_party/mbedtls/test/data/test-ca2.ku-ds.crt new file mode 100644 index 000000000..c28e17b22 --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca2.ku-ds.crt @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBzDCCAVOgAwIBAgIJAPOkPR3wsvm5MAoGCCqGSM49BAMCMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTAeFw0xNDA0MDkxMTI0MTNaFw0yNDA0MDYxMTI0MTNaMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBu +ww5XUzM5WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiy +aY7zQa0pw7RfdadHb9UZKVVpmlM7ILRmFmAzHqMdMBswDAYDVR0TBAUwAwEB/zAL +BgNVHQ8EBAMCB4AwCgYIKoZIzj0EAwIDZwAwZAIwGRCmU/rWNjW13g8ITuq3pMXb +jgwTFJHVlbMDiFJwUrRvytPV9doJOfzJ8nAQ0cZ1AjAbJ8QAV2e+DmYZpWc/p6Ug +nQdac59ev+lH+ju6wET3jNDjUthUPrdgqa54+UWQ5r4= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca2_cat-future-invalid.crt b/third_party/mbedtls/test/data/test-ca2_cat-future-invalid.crt new file mode 100644 index 000000000..b1cfbf054 --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca2_cat-future-invalid.crt @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIICIDCCAaWgAwIBAgIBCjAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABIFZMXZJJPoVraugMW4O7TMR+pElVcGwwZwDcj6Yui2kcjeJ +H0M3jR+OOtjwV+gvT8kApPfbcw+yxgSU0UA7OOOjgZ0wgZowCQYDVR0TBAIwADAd +BgNVHQ4EFgQUfmWPPjMDFOXhvmCy4IV/jOdgK3swbgYDVR0jBGcwZYAUnW0gJEkB +PyvLeLUZvH4kydv7NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xh +clNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAoG +CCqGSM49BAMCA2kAMGYCMQCsYTyleBFuI4nizuxo/ie5dxJnD0ynwCnRJ+84PZP4 +AQA3HdUz0qNYs4CZ2am9Gz0CMQDr2TNLFA3C3S3pmgXMT0eKzR1Ca1/Nulf0llQZ +Xj09kLboxuemP40IIqhQnpYptMg= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB+zCCAYCgAwIBAgIBATAMBggqhkjOPQQDAgUAMD4xCzAJBgNVBAYTAk5MMREw +DwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQTAe +Fw0yMzA5MjIxNTQ5NDlaFw0zMDEyMzEyMzU5NTlaMD4xCzAJBgNVBAYTAk5MMREw +DwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQTB2 +MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBuww5XUzM5 +WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiyaY7zQa0p +w7RfdadHb9UZKVVpmlM7ILRmFmAzHqNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4E +FgQUnW0gJEkBPyvLeLUZvH4kydv7NnwwHwYDVR0jBBgwFoAUnW0gJEkBPyvLeLUZ +vH4kydv7NnwwDAYIKoZIzj0EAwIFAANnADBkAjB1ZNdOM7KRJiPo45hP17A1sJSH +qHFPEJbml6KdNevoVZ1HqvP8AoFGcPJRpQVtzC0CMDa7JEqn0dOss8EmW9pVF/N2 ++XvzNczj89mWMgPhJJlT+MONQx3LFQO+TMSI9hLdkw== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca2_cat-future-present.crt b/third_party/mbedtls/test/data/test-ca2_cat-future-present.crt new file mode 100644 index 000000000..776e725cb --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca2_cat-future-present.crt @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIB+zCCAYCgAwIBAgIBATAMBggqhkjOPQQDAgUAMD4xCzAJBgNVBAYTAk5MMREw +DwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQTAe +Fw0yMzA5MjIxNTQ5NDlaFw0zMDEyMzEyMzU5NTlaMD4xCzAJBgNVBAYTAk5MMREw +DwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQTB2 +MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBuww5XUzM5 +WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiyaY7zQa0p +w7RfdadHb9UZKVVpmlM7ILRmFmAzHqNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4E +FgQUnW0gJEkBPyvLeLUZvH4kydv7NnwwHwYDVR0jBBgwFoAUnW0gJEkBPyvLeLUZ +vH4kydv7NnwwDAYIKoZIzj0EAwIFAANnADBkAjB1ZNdOM7KRJiPo45hP17A1sJSH +qHFPEJbml6KdNevoVZ1HqvP8AoFGcPJRpQVtzC0CMDa7JEqn0dOss8EmW9pVF/N2 ++XvzNczj89mWMgPhJJlT+MONQx3LFQO+TMSI9hLdkw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICUjCCAdegAwIBAgIJAMFD4n5iQ8zoMAoGCCqGSM49BAMCMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTAeFw0xMzA5MjQxNTQ5NDhaFw0yMzA5MjIxNTQ5NDhaMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBu +ww5XUzM5WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiy +aY7zQa0pw7RfdadHb9UZKVVpmlM7ILRmFmAzHqOBoDCBnTAdBgNVHQ4EFgQUnW0g +JEkBPyvLeLUZvH4kydv7NnwwbgYDVR0jBGcwZYAUnW0gJEkBPyvLeLUZvH4kydv7 +NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UE +AxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAwGA1UdEwQFMAMBAf8w +CgYIKoZIzj0EAwIDaQAwZgIxAMO0YnNWKJUAfXgSJtJxexn4ipg+kv4znuR50v56 +t4d0PCu412mUC6Nnd7izvtE2MgIxAP1nnJQjZ8BWukszFQDG48wxCCyci9qpdSMv +uCjn8pwUOkABXK8Mss90fzCfCEOtIA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca2_cat-past-invalid.crt b/third_party/mbedtls/test/data/test-ca2_cat-past-invalid.crt new file mode 100644 index 000000000..febad7408 --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca2_cat-past-invalid.crt @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIB/TCCAYCgAwIBAgIBATAMBggqhkjOPQQDAgUAMD4xCzAJBgNVBAYTAk5MMREw +DwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQTAe +Fw0wMzA5MjQxNTQ5NDhaFw0xMzA5MjQxNTQ5NDhaMD4xCzAJBgNVBAYTAk5MMREw +DwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQTB2 +MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBuww5XUzM5 +WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiyaY7zQa0p +w7RfdadHb9UZKVVpmlM7ILRmFmAzHqNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4E +FgQUnW0gJEkBPyvLeLUZvH4kydv7NnwwHwYDVR0jBBgwFoAUnW0gJEkBPyvLeLUZ +vH4kydv7NnwwDAYIKoZIzj0EAwIFAANpADBmAjEAvQ/49lXXrLYdOIGtTaYWjpZP +tRBXQiGPMzUvmKBk7gM7bF4iFPsdJikyXHmuwv3RAjEA8vtUX8fAAB3fbh5dEXRm +l7tz0Sw/RW6AHFtaIauGkhHqeKIaKIi6WSgHu6x97uyg +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICIDCCAaWgAwIBAgIBCjAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjA0MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG +CCqGSM49AwEHA0IABIFZMXZJJPoVraugMW4O7TMR+pElVcGwwZwDcj6Yui2kcjeJ +H0M3jR+OOtjwV+gvT8kApPfbcw+yxgSU0UA7OOOjgZ0wgZowCQYDVR0TBAIwADAd +BgNVHQ4EFgQUfmWPPjMDFOXhvmCy4IV/jOdgK3swbgYDVR0jBGcwZYAUnW0gJEkB +PyvLeLUZvH4kydv7NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xh +clNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAoG +CCqGSM49BAMCA2kAMGYCMQCsYTyleBFuI4nizuxo/ie5dxJnD0ynwCnRJ+84PZP4 +AQA3HdUz0qNYs4CZ2am9Gz0CMQDr2TNLFA3C3S3pmgXMT0eKzR1Ca1/Nulf0llQZ +Xj09kLboxuemP40IIqhQnpYptMg= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca2_cat-past-present.crt b/third_party/mbedtls/test/data/test-ca2_cat-past-present.crt new file mode 100644 index 000000000..bc1ba9a2e --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca2_cat-past-present.crt @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIB/TCCAYCgAwIBAgIBATAMBggqhkjOPQQDAgUAMD4xCzAJBgNVBAYTAk5MMREw +DwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQTAe +Fw0wMzA5MjQxNTQ5NDhaFw0xMzA5MjQxNTQ5NDhaMD4xCzAJBgNVBAYTAk5MMREw +DwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQTB2 +MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBuww5XUzM5 +WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiyaY7zQa0p +w7RfdadHb9UZKVVpmlM7ILRmFmAzHqNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4E +FgQUnW0gJEkBPyvLeLUZvH4kydv7NnwwHwYDVR0jBBgwFoAUnW0gJEkBPyvLeLUZ +vH4kydv7NnwwDAYIKoZIzj0EAwIFAANpADBmAjEAvQ/49lXXrLYdOIGtTaYWjpZP +tRBXQiGPMzUvmKBk7gM7bF4iFPsdJikyXHmuwv3RAjEA8vtUX8fAAB3fbh5dEXRm +l7tz0Sw/RW6AHFtaIauGkhHqeKIaKIi6WSgHu6x97uyg +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICUjCCAdegAwIBAgIJAMFD4n5iQ8zoMAoGCCqGSM49BAMCMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTAeFw0xMzA5MjQxNTQ5NDhaFw0yMzA5MjIxNTQ5NDhaMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBu +ww5XUzM5WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiy +aY7zQa0pw7RfdadHb9UZKVVpmlM7ILRmFmAzHqOBoDCBnTAdBgNVHQ4EFgQUnW0g +JEkBPyvLeLUZvH4kydv7NnwwbgYDVR0jBGcwZYAUnW0gJEkBPyvLeLUZvH4kydv7 +NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UE +AxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAwGA1UdEwQFMAMBAf8w +CgYIKoZIzj0EAwIDaQAwZgIxAMO0YnNWKJUAfXgSJtJxexn4ipg+kv4znuR50v56 +t4d0PCu412mUC6Nnd7izvtE2MgIxAP1nnJQjZ8BWukszFQDG48wxCCyci9qpdSMv +uCjn8pwUOkABXK8Mss90fzCfCEOtIA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca2_cat-present-future.crt b/third_party/mbedtls/test/data/test-ca2_cat-present-future.crt new file mode 100644 index 000000000..d62ed09cd --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca2_cat-present-future.crt @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIICUjCCAdegAwIBAgIJAMFD4n5iQ8zoMAoGCCqGSM49BAMCMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTAeFw0xMzA5MjQxNTQ5NDhaFw0yMzA5MjIxNTQ5NDhaMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBu +ww5XUzM5WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiy +aY7zQa0pw7RfdadHb9UZKVVpmlM7ILRmFmAzHqOBoDCBnTAdBgNVHQ4EFgQUnW0g +JEkBPyvLeLUZvH4kydv7NnwwbgYDVR0jBGcwZYAUnW0gJEkBPyvLeLUZvH4kydv7 +NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UE +AxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAwGA1UdEwQFMAMBAf8w +CgYIKoZIzj0EAwIDaQAwZgIxAMO0YnNWKJUAfXgSJtJxexn4ipg+kv4znuR50v56 +t4d0PCu412mUC6Nnd7izvtE2MgIxAP1nnJQjZ8BWukszFQDG48wxCCyci9qpdSMv +uCjn8pwUOkABXK8Mss90fzCfCEOtIA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB+zCCAYCgAwIBAgIBATAMBggqhkjOPQQDAgUAMD4xCzAJBgNVBAYTAk5MMREw +DwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQTAe +Fw0yMzA5MjIxNTQ5NDlaFw0zMDEyMzEyMzU5NTlaMD4xCzAJBgNVBAYTAk5MMREw +DwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQTB2 +MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBuww5XUzM5 +WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiyaY7zQa0p +w7RfdadHb9UZKVVpmlM7ILRmFmAzHqNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4E +FgQUnW0gJEkBPyvLeLUZvH4kydv7NnwwHwYDVR0jBBgwFoAUnW0gJEkBPyvLeLUZ +vH4kydv7NnwwDAYIKoZIzj0EAwIFAANnADBkAjB1ZNdOM7KRJiPo45hP17A1sJSH +qHFPEJbml6KdNevoVZ1HqvP8AoFGcPJRpQVtzC0CMDa7JEqn0dOss8EmW9pVF/N2 ++XvzNczj89mWMgPhJJlT+MONQx3LFQO+TMSI9hLdkw== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca2_cat-present-past.crt b/third_party/mbedtls/test/data/test-ca2_cat-present-past.crt new file mode 100644 index 000000000..a321d5dd7 --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca2_cat-present-past.crt @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIICUjCCAdegAwIBAgIJAMFD4n5iQ8zoMAoGCCqGSM49BAMCMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTAeFw0xMzA5MjQxNTQ5NDhaFw0yMzA5MjIxNTQ5NDhaMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBu +ww5XUzM5WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiy +aY7zQa0pw7RfdadHb9UZKVVpmlM7ILRmFmAzHqOBoDCBnTAdBgNVHQ4EFgQUnW0g +JEkBPyvLeLUZvH4kydv7NnwwbgYDVR0jBGcwZYAUnW0gJEkBPyvLeLUZvH4kydv7 +NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UE +AxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAwGA1UdEwQFMAMBAf8w +CgYIKoZIzj0EAwIDaQAwZgIxAMO0YnNWKJUAfXgSJtJxexn4ipg+kv4znuR50v56 +t4d0PCu412mUC6Nnd7izvtE2MgIxAP1nnJQjZ8BWukszFQDG48wxCCyci9qpdSMv +uCjn8pwUOkABXK8Mss90fzCfCEOtIA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB/TCCAYCgAwIBAgIBATAMBggqhkjOPQQDAgUAMD4xCzAJBgNVBAYTAk5MMREw +DwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQTAe +Fw0wMzA5MjQxNTQ5NDhaFw0xMzA5MjQxNTQ5NDhaMD4xCzAJBgNVBAYTAk5MMREw +DwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQTB2 +MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBuww5XUzM5 +WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiyaY7zQa0p +w7RfdadHb9UZKVVpmlM7ILRmFmAzHqNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4E +FgQUnW0gJEkBPyvLeLUZvH4kydv7NnwwHwYDVR0jBBgwFoAUnW0gJEkBPyvLeLUZ +vH4kydv7NnwwDAYIKoZIzj0EAwIFAANpADBmAjEAvQ/49lXXrLYdOIGtTaYWjpZP +tRBXQiGPMzUvmKBk7gM7bF4iFPsdJikyXHmuwv3RAjEA8vtUX8fAAB3fbh5dEXRm +l7tz0Sw/RW6AHFtaIauGkhHqeKIaKIi6WSgHu6x97uyg +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca_cat12.crt b/third_party/mbedtls/test/data/test-ca_cat12.crt new file mode 100644 index 000000000..892814463 --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca_cat12.crt @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgIBAzANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDAwWhcNMjkwMjEwMTQ0NDAwWjA7MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA3zf8F7vglp0/ht6WMn1EpRagzSHx +mdTs6st8GFgIlKXsm8WL3xoemTiZhx57wI053zhdcHgH057Zk+i5clHFzqMwUqny +50BwFMtEonILwuVA+T7lpg6z+exKY8C4KQB0nFc7qKUEkHHxvYPZP9al4jwqj+8n +YMPGn8u67GB9t+aEMr5P+1gmIgNb1LTV+/Xjli5wwOQuvfwu7uJBVcA0Ln0kcmnL +R7EUQIN9Z/SG9jGr8XmksrUuEvmEF/Bibyc+E1ixVA0hmnM3oTDPb5Lc9un8rNsu +KNF+AksjoBXyOGVkCeoMbo4bF6BxyLObyavpw/LPh5aPgAIynplYb6LVAgMBAAGj +UDBOMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFLRa5KWz3tJS9rnVppUP6z68x/3/ +MB8GA1UdIwQYMBaAFLRa5KWz3tJS9rnVppUP6z68x/3/MA0GCSqGSIb3DQEBBQUA +A4IBAQB0ZiNRFdia6kskaPnhrqejIRq8YMEGAf2oIPnyZ78xoyERgc35lHGyMtsL +hWicNjP4d/hS9As4j5KA2gdNGi5ETA1X7SowWOGsryivSpMSHVy1+HdfWlsYQOzm +8o+faQNUm8XzPVmttfAVspxeHSxJZ36Oo+QWZ5wZlCIEyjEdLUId+Tm4Bz3B5jRD +zZa/SaqDokq66N2zpbgKKAl3GU2O++fBqP2dSkdQykmTxhLLWRN8FJqhYATyQntZ +0QSi3W9HfSZPnFTcPIXeoiPd2pLlxt1hZu8dws2LTXE63uP6MM4LHvWxiuJaWkP/ +mtxyUALj2pQxRitopORFQdn7AOY5 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICUjCCAdegAwIBAgIJAMFD4n5iQ8zoMAoGCCqGSM49BAMCMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTAeFw0xMzA5MjQxNTQ5NDhaFw0yMzA5MjIxNTQ5NDhaMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBu +ww5XUzM5WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiy +aY7zQa0pw7RfdadHb9UZKVVpmlM7ILRmFmAzHqOBoDCBnTAdBgNVHQ4EFgQUnW0g +JEkBPyvLeLUZvH4kydv7NnwwbgYDVR0jBGcwZYAUnW0gJEkBPyvLeLUZvH4kydv7 +NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UE +AxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAwGA1UdEwQFMAMBAf8w +CgYIKoZIzj0EAwIDaQAwZgIxAMO0YnNWKJUAfXgSJtJxexn4ipg+kv4znuR50v56 +t4d0PCu412mUC6Nnd7izvtE2MgIxAP1nnJQjZ8BWukszFQDG48wxCCyci9qpdSMv +uCjn8pwUOkABXK8Mss90fzCfCEOtIA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca_cat21.crt b/third_party/mbedtls/test/data/test-ca_cat21.crt new file mode 100644 index 000000000..7234863c7 --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca_cat21.crt @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +MIICUjCCAdegAwIBAgIJAMFD4n5iQ8zoMAoGCCqGSM49BAMCMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTAeFw0xMzA5MjQxNTQ5NDhaFw0yMzA5MjIxNTQ5NDhaMD4xCzAJBgNVBAYT +Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF +QyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBu +ww5XUzM5WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiy +aY7zQa0pw7RfdadHb9UZKVVpmlM7ILRmFmAzHqOBoDCBnTAdBgNVHQ4EFgQUnW0g +JEkBPyvLeLUZvH4kydv7NnwwbgYDVR0jBGcwZYAUnW0gJEkBPyvLeLUZvH4kydv7 +NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UE +AxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAwGA1UdEwQFMAMBAf8w +CgYIKoZIzj0EAwIDaQAwZgIxAMO0YnNWKJUAfXgSJtJxexn4ipg+kv4znuR50v56 +t4d0PCu412mUC6Nnd7izvtE2MgIxAP1nnJQjZ8BWukszFQDG48wxCCyci9qpdSMv +uCjn8pwUOkABXK8Mss90fzCfCEOtIA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgIBAzANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjEwMTQ0NDAwWhcNMjkwMjEwMTQ0NDAwWjA7MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA3zf8F7vglp0/ht6WMn1EpRagzSHx +mdTs6st8GFgIlKXsm8WL3xoemTiZhx57wI053zhdcHgH057Zk+i5clHFzqMwUqny +50BwFMtEonILwuVA+T7lpg6z+exKY8C4KQB0nFc7qKUEkHHxvYPZP9al4jwqj+8n +YMPGn8u67GB9t+aEMr5P+1gmIgNb1LTV+/Xjli5wwOQuvfwu7uJBVcA0Ln0kcmnL +R7EUQIN9Z/SG9jGr8XmksrUuEvmEF/Bibyc+E1ixVA0hmnM3oTDPb5Lc9un8rNsu +KNF+AksjoBXyOGVkCeoMbo4bF6BxyLObyavpw/LPh5aPgAIynplYb6LVAgMBAAGj +UDBOMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFLRa5KWz3tJS9rnVppUP6z68x/3/ +MB8GA1UdIwQYMBaAFLRa5KWz3tJS9rnVppUP6z68x/3/MA0GCSqGSIb3DQEBBQUA +A4IBAQB0ZiNRFdia6kskaPnhrqejIRq8YMEGAf2oIPnyZ78xoyERgc35lHGyMtsL +hWicNjP4d/hS9As4j5KA2gdNGi5ETA1X7SowWOGsryivSpMSHVy1+HdfWlsYQOzm +8o+faQNUm8XzPVmttfAVspxeHSxJZ36Oo+QWZ5wZlCIEyjEdLUId+Tm4Bz3B5jRD +zZa/SaqDokq66N2zpbgKKAl3GU2O++fBqP2dSkdQykmTxhLLWRN8FJqhYATyQntZ +0QSi3W9HfSZPnFTcPIXeoiPd2pLlxt1hZu8dws2LTXE63uP6MM4LHvWxiuJaWkP/ +mtxyUALj2pQxRitopORFQdn7AOY5 +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca_printable.crt b/third_party/mbedtls/test/data/test-ca_printable.crt new file mode 100644 index 000000000..1e95b6d9b --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca_printable.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDhzCCAm+gAwIBAgIBAzANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjExMTM0NTI5WhcNMjkwMjExMTM0NTI5WjA7MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA3zf8F7vglp0/ht6WMn1EpRagzSHx +mdTs6st8GFgIlKXsm8WL3xoemTiZhx57wI053zhdcHgH057Zk+i5clHFzqMwUqny +50BwFMtEonILwuVA+T7lpg6z+exKY8C4KQB0nFc7qKUEkHHxvYPZP9al4jwqj+8n +YMPGn8u67GB9t+aEMr5P+1gmIgNb1LTV+/Xjli5wwOQuvfwu7uJBVcA0Ln0kcmnL +R7EUQIN9Z/SG9jGr8XmksrUuEvmEF/Bibyc+E1ixVA0hmnM3oTDPb5Lc9un8rNsu +KNF+AksjoBXyOGVkCeoMbo4bF6BxyLObyavpw/LPh5aPgAIynplYb6LVAgMBAAGj +gZUwgZIwHQYDVR0OBBYEFLRa5KWz3tJS9rnVppUP6z68x/3/MGMGA1UdIwRcMFqA +FLRa5KWz3tJS9rnVppUP6z68x/3/oT+kPTA7MQswCQYDVQQGEwJOTDERMA8GA1UE +CgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0GCAQMwDAYDVR0T +BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAbhaFBCuqOenkJdwQvr3B3hX8MGER +s0PWgKwSkrkfaRp8Vg2GBaVt+GdqtL+wpo9NYoeoPrEOjWHm7grdolhcKOs9SdKq +XsiQKCJqvwqiJ0PfIwSA30ZqIGtb3I9WLXBXregk/ku9se2GhKlLCYeW09Tq3pex +tGottVVypNJuMed+yX2MUMHrAW7+/ZJhxfTVTv6YYqqr6eufvLiYPhUgihTndqj9 +Keko1kOb7XyYMGKGEmLYFXS4oJc5uvwhkyTIjIZr6enYRzjLTkmhVpznSXdERKjl +b8Jh/hzdws8yQOCk+NlqZPKz9LDQiI5p5tT4eGmX5w4fD30QYzgTQWLSKQ== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca_uppercase.crt b/third_party/mbedtls/test/data/test-ca_uppercase.crt new file mode 100644 index 000000000..3126a11d1 --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca_uppercase.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDhzCCAm+gAwIBAgIBAzANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjExMTM0NTQ3WhcNMjkwMjExMTM0NTQ3WjA7MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA3zf8F7vglp0/ht6WMn1EpRagzSHx +mdTs6st8GFgIlKXsm8WL3xoemTiZhx57wI053zhdcHgH057Zk+i5clHFzqMwUqny +50BwFMtEonILwuVA+T7lpg6z+exKY8C4KQB0nFc7qKUEkHHxvYPZP9al4jwqj+8n +YMPGn8u67GB9t+aEMr5P+1gmIgNb1LTV+/Xjli5wwOQuvfwu7uJBVcA0Ln0kcmnL +R7EUQIN9Z/SG9jGr8XmksrUuEvmEF/Bibyc+E1ixVA0hmnM3oTDPb5Lc9un8rNsu +KNF+AksjoBXyOGVkCeoMbo4bF6BxyLObyavpw/LPh5aPgAIynplYb6LVAgMBAAGj +gZUwgZIwHQYDVR0OBBYEFLRa5KWz3tJS9rnVppUP6z68x/3/MGMGA1UdIwRcMFqA +FLRa5KWz3tJS9rnVppUP6z68x/3/oT+kPTA7MQswCQYDVQQGEwJOTDERMA8GA1UE +CgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0GCAQMwDAYDVR0T +BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAFs2TDNHnSAONhAJcaz4W5gi9Gzdq +PgG30wTf2FWCtbmY7b/tPfXi+O8zn42cmuVC6m7lp5akisN34bubQNjrMYvhkg9o +PK+mIJw9/JxfMX8JYCQaU8UV4K+xaBY9Gu9jNhZklt0RUKgdhr/9r217R9ClX5XZ ++HBmQCUG1AXlD8qmMxu2VVkgBubMLZQQxsy6L3b3x0NKXx0SiO7YBVtFTB9KpwlG +0R6lso+XfrQK3Q0g/kASyhuaaDfIGNPtNG+wEe/gA9K3NUY99TwKWpHhz5Yd+mfW +rJcP89L7thXizripRT22b/ElPIgLSYarjKA317wkQJxYQ3ElkpgNbhaKHg== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-ca_utf8.crt b/third_party/mbedtls/test/data/test-ca_utf8.crt new file mode 100644 index 000000000..2dadc7766 --- /dev/null +++ b/third_party/mbedtls/test/data/test-ca_utf8.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDhzCCAm+gAwIBAgIBAzANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTkwMjExMTM0NTE0WhcNMjkwMjExMTM0NTE0WjA7MQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA3zf8F7vglp0/ht6WMn1EpRagzSHx +mdTs6st8GFgIlKXsm8WL3xoemTiZhx57wI053zhdcHgH057Zk+i5clHFzqMwUqny +50BwFMtEonILwuVA+T7lpg6z+exKY8C4KQB0nFc7qKUEkHHxvYPZP9al4jwqj+8n +YMPGn8u67GB9t+aEMr5P+1gmIgNb1LTV+/Xjli5wwOQuvfwu7uJBVcA0Ln0kcmnL +R7EUQIN9Z/SG9jGr8XmksrUuEvmEF/Bibyc+E1ixVA0hmnM3oTDPb5Lc9un8rNsu +KNF+AksjoBXyOGVkCeoMbo4bF6BxyLObyavpw/LPh5aPgAIynplYb6LVAgMBAAGj +gZUwgZIwHQYDVR0OBBYEFLRa5KWz3tJS9rnVppUP6z68x/3/MGMGA1UdIwRcMFqA +FLRa5KWz3tJS9rnVppUP6z68x/3/oT+kPTA7MQswCQYDVQQGEwJOTDERMA8GA1UE +CgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0GCAQMwDAYDVR0T +BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAKePyGUC4+Ehb1/e0ldwipj8SZZPe +QEXwUfF2T3Km/Bgo7tRhCMoRkMbqtGhhWM/nVfHlsFj68nQisxpGyuFzMdb/56aX +Zh5KSocnlvvFeD3nQCQClnCRiboReuasIpH7UrFSLJgk30O+7mAWHLRD3n51hOTy +50seLBgBUbXw/wYcxpS718DTUw9tSuRDxB/uGB5iwhz1lOnnslL0vswKacNFisGd +7H7Vyn6YQFFuw6W04V4RzClXEyPTJg5QRMKR+vGMtoMTCNUG+sAwwM5NiAM4CDXc +0vPALzpvlXnf2pi1WWSZSLgGMgn99N+7XXaA5W1FJ97fTzprTnOG6kl0YA== +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-int-ca-exp.crt b/third_party/mbedtls/test/data/test-int-ca-exp.crt new file mode 100644 index 000000000..c549654b0 --- /dev/null +++ b/third_party/mbedtls/test/data/test-int-ca-exp.crt @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIIEATCCA4egAwIBAgIBDjAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MDcwNjI3MTAzODM3WhcNMTcwNjI3MTAzODM3WjBIMQswCQYDVQQGEwJOTDERMA8G +A1UECgwIUG9sYXJTU0wxJjAkBgNVBAMMHVBvbGFyU1NMIFRlc3QgSW50ZXJtZWRp +YXRlIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1Oc8nr6fMTq +vowV+CpC55i5BZGFGc50Eb4RLBSRTH1e7JepdFjAVbBtyQRJSiY1ja0tgLQDDKZR +wfEI+b4azse460InPHv7C1TN0upXlxuj6m9B1IlP+sBaM7WBC6dVfPO+jVMIxgkF +CaBCLhhdK1Fjf8HjkT/PkctWnho8NTwivc9+nqRZjXe/eIcqm5HwjDDhu+gz+o0g +Vz9MfZNi1JyCrOyNZcy+cr2QeNnNVGnFq8xTxtu6dLunhpmLFj2mm0Vjwa7Ypj5q +AjpqTMtDvqbRuToyoyzajhMNcCAf7gwzIupJJFVdjdtgYAcQwzikwF5HoITJzzJ2 +qgxF7CmvGZNb7G99mLdLdhtclH3wAQKHYwEGJo7XKyNEuHPQgB+e0cg1SD1HqlAM +uCfGGTWQ6me7Bjan3t0NzoTdDq6IpKTesbaY+/9e2xn8DCrhBKLXQMZFDZqUoLYA +kGPOEGgvlPnIIXAawouxCaNYEh5Uw871YMSPT28rLdFr49dwYOtDg9foA8hDIW2P +d6KXbrZteesvA1nYzEOs+3AjrbT79Md2W8Bz9bqBVNlNOESSqm4kiCJFmslm/6br +Np0MSQd+o22PQ4xRtmP6UsTfU0ueiMpYc8TYYhMbfnfFyo4m707ebcflPbBEN2dg +updQ66cvfCJB0QJt9upafY0lpdV1qUkCAwEAAaOBoDCBnTAdBgNVHQ4EFgQUOHfY +a3ecKHeCi07YG6ke95QWtw4wbgYDVR0jBGcwZYAUnW0gJEkBPyvLeLUZvH4kydv7 +NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UE +AxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAwGA1UdEwQFMAMBAf8w +CgYIKoZIzj0EAwIDaAAwZQIxAPu/FDEPvIC/BnzPQDAr1bQakGiwBsE9zGKRgXgX +Y3Q+XJKhMEKZ8h1m+S5c6taO0gIwNB14zmJ1gJ9X3+tPDfriWrVaNMG54Kr57/Ep +773Ap7Gxpk168id1EFhvW22YabKs +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-int-ca.crt b/third_party/mbedtls/test/data/test-int-ca.crt new file mode 100644 index 000000000..cbe99e0a6 --- /dev/null +++ b/third_party/mbedtls/test/data/test-int-ca.crt @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIIEATCCA4egAwIBAgIBDjAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN +MTMwOTI0MTU1NTE0WhcNMjMwOTIyMTU1NTE0WjBIMQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxJjAkBgNVBAMTHVBvbGFyU1NMIFRlc3QgSW50ZXJtZWRp +YXRlIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1Oc8nr6fMTq +vowV+CpC55i5BZGFGc50Eb4RLBSRTH1e7JepdFjAVbBtyQRJSiY1ja0tgLQDDKZR +wfEI+b4azse460InPHv7C1TN0upXlxuj6m9B1IlP+sBaM7WBC6dVfPO+jVMIxgkF +CaBCLhhdK1Fjf8HjkT/PkctWnho8NTwivc9+nqRZjXe/eIcqm5HwjDDhu+gz+o0g +Vz9MfZNi1JyCrOyNZcy+cr2QeNnNVGnFq8xTxtu6dLunhpmLFj2mm0Vjwa7Ypj5q +AjpqTMtDvqbRuToyoyzajhMNcCAf7gwzIupJJFVdjdtgYAcQwzikwF5HoITJzzJ2 +qgxF7CmvGZNb7G99mLdLdhtclH3wAQKHYwEGJo7XKyNEuHPQgB+e0cg1SD1HqlAM +uCfGGTWQ6me7Bjan3t0NzoTdDq6IpKTesbaY+/9e2xn8DCrhBKLXQMZFDZqUoLYA +kGPOEGgvlPnIIXAawouxCaNYEh5Uw871YMSPT28rLdFr49dwYOtDg9foA8hDIW2P +d6KXbrZteesvA1nYzEOs+3AjrbT79Md2W8Bz9bqBVNlNOESSqm4kiCJFmslm/6br +Np0MSQd+o22PQ4xRtmP6UsTfU0ueiMpYc8TYYhMbfnfFyo4m707ebcflPbBEN2dg +updQ66cvfCJB0QJt9upafY0lpdV1qUkCAwEAAaOBoDCBnTAdBgNVHQ4EFgQUOHfY +a3ecKHeCi07YG6ke95QWtw4wbgYDVR0jBGcwZYAUnW0gJEkBPyvLeLUZvH4kydv7 +NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UE +AxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAwGA1UdEwQFMAMBAf8w +CgYIKoZIzj0EAwIDaAAwZQIxAPyE+u+eP7gRrSFjQicmpYg8jiFUCYEowWY2zuOG +i1HXYwmpDHfasQ3rNSuf/gHvjwIwbSSjumDk+uYNci/KMELDsD0MFHxZhhBc9Hp9 +Af5cNR8KhzegznL6amRObGGKmX1F +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-int-ca.key b/third_party/mbedtls/test/data/test-int-ca.key new file mode 100644 index 000000000..4fd62f3f3 --- /dev/null +++ b/third_party/mbedtls/test/data/test-int-ca.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJKQIBAAKCAgEAo1Oc8nr6fMTqvowV+CpC55i5BZGFGc50Eb4RLBSRTH1e7Jep +dFjAVbBtyQRJSiY1ja0tgLQDDKZRwfEI+b4azse460InPHv7C1TN0upXlxuj6m9B +1IlP+sBaM7WBC6dVfPO+jVMIxgkFCaBCLhhdK1Fjf8HjkT/PkctWnho8NTwivc9+ +nqRZjXe/eIcqm5HwjDDhu+gz+o0gVz9MfZNi1JyCrOyNZcy+cr2QeNnNVGnFq8xT +xtu6dLunhpmLFj2mm0Vjwa7Ypj5qAjpqTMtDvqbRuToyoyzajhMNcCAf7gwzIupJ +JFVdjdtgYAcQwzikwF5HoITJzzJ2qgxF7CmvGZNb7G99mLdLdhtclH3wAQKHYwEG +Jo7XKyNEuHPQgB+e0cg1SD1HqlAMuCfGGTWQ6me7Bjan3t0NzoTdDq6IpKTesbaY ++/9e2xn8DCrhBKLXQMZFDZqUoLYAkGPOEGgvlPnIIXAawouxCaNYEh5Uw871YMSP +T28rLdFr49dwYOtDg9foA8hDIW2Pd6KXbrZteesvA1nYzEOs+3AjrbT79Md2W8Bz +9bqBVNlNOESSqm4kiCJFmslm/6brNp0MSQd+o22PQ4xRtmP6UsTfU0ueiMpYc8TY +YhMbfnfFyo4m707ebcflPbBEN2dgupdQ66cvfCJB0QJt9upafY0lpdV1qUkCAwEA +AQKCAgEAgyuxzuSJrA8SYLptIoP+e7YiUqCOfy1Z9q3paLeUAhRmWilrxK9KuQcb +BOhWXCDXvdMpykXIdS5WVyZYCQtuyEeK8haNIHyKII2ZSB1A/3EJckysWB93hnFZ +gFHzNALOG64+iY34a+Pukc6NmCulGBcjjAWR2KOg9vyRsiRr2m1TkZHFpW9lJMLZ +mdkklRDeWhkgEiPpKv6QzMFfkzL9mregE3VgEjQfeFNaZlS2HWddhB5z4i+yTfIw +F1/VXqVg2y8dcP4VrV5PET8NBGPzInkj0lk1NeveE2Cl2DlUq4BMyWvUFkQhAL8B +Zd4GzmL9nimZ6Qb8dVWYC/YTahoIL3+YUCZAGIeczAo6dryheUsj1w3pSErOIY9U +dGSyq9I9XYXqcRNeyfkoNVOZ7ugqk4DvMyv64tt+NIIy9SZGcHuWo3GL0FdKiR5c +Xbn18tD+Wwrka0O1ntvzX1qkwJcpvu5+xNVbobkM4DiluoivOq+29CGANtG2Et7S +m6KCUwSElKsvpI4dNW4nWcbdj8i8gcLiKjqRu9n2BdkvAHaMhVbl9xnp9sveGLcR +iFg6mDsCQuVEH8bGPIMIav/3VUjy1wbMAA54PsqKM0aTA+DHnleXchVAhMm9eHD8 +yrV8eb8/bcCbWvhDDi80kuRIaDSsYTwMWpzjz6MU9v8OuFGZZaECggEBANL44VQ7 +7tok5XeJJgnRV/PGNlHKksctPMj+ye8iSDrRvHVlHHqvZ26MZJPgXwHCO/NVIWv6 +hfCYlfmP/63fZ1WJqDUDxHOgjIbPtOIKTsJi3PbbODVrsycZ3y5OjpbjXKG97cKM +6RX6zbnjtGKPfbUJx+kuAOxmkFLiLJGNlLqzaJafkgWjUAV/nT6Qm2663msfZ/Md +7uDFDNOTbPS74ki5JTjlj8xmxAPcnxjNJ2ijDQ7eiCAm6JozJYy9PYixmuScFF2x +D2N6E9/JWUcYezybUgOLzbwzvJkCRJoBXj09F8cb3m6ZQ04n2peQg/0bn6HUVovF +opZJW9uZTRmFae0CggEBAMYveBnYRXyWqENf8PZ8xlqiOvJBARaIYQOPy1t4LeOv +t4ssvkSJPEG0tP2IT6ptecNN9CVRdPJn7tsgvjgPvqgymLlaw8DheFS3EK4sFd0a +SIwrYcXY8fyAFuGbbcx2JTfmxwLGYXeWG4MDkcYctUhXiObMb0YI2eXlTu4JXqJH +q1myl7pi3gux7JcFjr0ANh9mDOYXzL52WqZObaVUUNn8p/aNWpati9Z9PL2uJNxY +myZbTqWGTpZ8XlZnZYg8bHVJGoc7/seSDEnSreGQtXl6MrnsN9bDU6UhufI0iAiH +fCeELpxjBpvZi2TzYnltX+21f3oUXurXT4eYPJm6YU0CggEBAIrJUSphtvJovU/S +uGRTBEIIzekmk0JWHxu2iU84RT30hb7QwlhvFWLjFrM1MirtBRVBlpf7Gau6JUck +lLVkNw1NXotprA3Iu0lgUIU29LLp6KS4eBSkghmh6nEDGshmT6TTVhrbKebctAOq +qRsBfFfhVFKwgckCe8Uapukls4bSyWX1GVF+KwFC/0WOScIhSno8Ed0cfu38k0CI +RnAFPYpLyhHQ6rUzkZVcyIi/RUKPqOJ0QCaukewG45ffUiCffd8QUlGETjRJtdNN +GN8tWrz3DI/qo3BAtLwPguOxLLaqfv7r9Xradi1vCF0Wo82ZI32JO1n9rMSjA7vF +8LNuUc0CggEAedBPh8Mw4qVPgyoDV93VpXu1s5VU796fkqrdmblCq4Ij1L2JrWKU +0OYboQIZxW1IvEy71fw9X4mWfMWhZZ/31jZTPQqW64UqixeCfyvFvIMdOFqp3Au+ +oS6x4bXBRT0RH00P4ZrB6dkvy9Vz0ktu+aokEYhylJ94HyBU5WaI7kITBi0JqZx/ +Urzn6OOXmn/4xE/becoDJMZmbXYjWs16bKIpMxgrKBY/r3SG0yeorG8h3e+dZYwp +3cFP0tf2xkgteeGXFqw/q7cPKoj+K3jgsmvzpeeVYsHoNcWHH2I+gs+T9k3+wEz1 +kPGkBka6rlwV7Gv0kLrYpIv27CcciHjQuQKCAQActQM3DTC3pzEwwPeYMnSXL9/s +uDqbj3MV6H8fxPIGJWfpDst7nWXhT81uKG6fYmeg5Z6nJXfP0dUF5TpW1zk6VGwn +t/ch6U7HYpseZsywdZPVIo/upgkowXSl6mfqyxzGngXuORh4zhRpcn4GTwzHG2Te +xNqMEb/i/IWnvtfvyfhEBewJcMr9Npwrg615pCiZ8y3cjvJf/gl0cGZ5LIuWBQB5 +F16JxF3mm1XCukTXZO90vg3Y1JxeB+YYyF+1aQL+DgvhGZNRrGrBT/QuXQpiMCMf +VM9oZVrI7cYVNnPBEoHVcyP21NQ5AWoFTaSpMJiHZ4FBie0BGO6IkzMcG23r +-----END RSA PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/test-int-ca2.crt b/third_party/mbedtls/test/data/test-int-ca2.crt new file mode 100644 index 000000000..9ce44c231 --- /dev/null +++ b/third_party/mbedtls/test/data/test-int-ca2.crt @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC6TCCAdGgAwIBAgIBDzANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDER +MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN +MTMwOTI0MTYwODQyWhcNMjMwOTIyMTYwODQyWjBLMQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxKTAnBgNVBAMTIFBvbGFyU1NMIFRlc3QgSW50ZXJtZWRp +YXRlIEVDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE8Oih3fX5SLeN1dmFncQl +WMw9+Y6sXblhlrXBxhXxjwdwpCHENn+foUVdrqYVYa7Suv3QVeO6nJ19H3QNixW8 +ik1P+hxsbaq8bta78vAyHmC4EmXQLg1w7oxb9Q82qX1Yo4GVMIGSMB0GA1UdDgQW +BBQPib1jQevLXhco/2gwPcGI0JxYOTBjBgNVHSMEXDBagBS0WuSls97SUva51aaV +D+s+vMf9/6E/pD0wOzELMAkGA1UEBhMCTkwxETAPBgNVBAoTCFBvbGFyU1NMMRkw +FwYDVQQDExBQb2xhclNTTCBUZXN0IENBggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZI +hvcNAQELBQADggEBAAjeaTUaCBiXT1CYLVr6UFSeRNZBrDPnj6PwqUQTvgB5I5n6 +yXqoE4RYDaEL0Lg24juFxI26itBuypto6vscgGq77cfrP/avSdxU+xeZ4bCWvh3M +ddj9lmko2U8I8GhBcHpSuIiTvgKDB8eKkjeq3AsLGchHDvip8pB3IhcNfL7W94Zf +7/lH9VQiE3/px7amD32cidoPvWLA9U3f1FsPmJESUz0wwNfINpDjmPr8dGbkCN+M +CFhxo6sCfK8KLYG4nYX8FwxVR86kpSrO9e84AX0YYbdzxprbc2XOaebJ8+BDmzut +ARkD7DTXrodN1wV7jQJkrUuEwPj9Rhvk+MFRkaw= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-int-ca2.key b/third_party/mbedtls/test/data/test-int-ca2.key new file mode 100644 index 000000000..9df5b7aad --- /dev/null +++ b/third_party/mbedtls/test/data/test-int-ca2.key @@ -0,0 +1,6 @@ +-----BEGIN EC PRIVATE KEY----- +MIGkAgEBBDAtxOHUV4be1MdH1frBHzxITCyUSxrVjJN8QTvTVk558ka0a3zhd4Pb +ekWt7wBPXQegBwYFK4EEACKhZANiAATw6KHd9flIt43V2YWdxCVYzD35jqxduWGW +tcHGFfGPB3CkIcQ2f5+hRV2uphVhrtK6/dBV47qcnX0fdA2LFbyKTU/6HGxtqrxu +1rvy8DIeYLgSZdAuDXDujFv1DzapfVg= +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/data/test-int-ca3-badsign.crt b/third_party/mbedtls/test/data/test-int-ca3-badsign.crt new file mode 100644 index 000000000..2087056e8 --- /dev/null +++ b/third_party/mbedtls/test/data/test-int-ca3-badsign.crt @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBtDCCATqgAwIBAgIBTTAKBggqhkjOPQQDAjBLMQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxKTAnBgNVBAMTIFBvbGFyU1NMIFRlc3QgSW50ZXJtZWRp +YXRlIEVDIENBMB4XDTE1MDkwMTE0MDg0M1oXDTI1MDgyOTE0MDg0M1owSjELMAkG +A1UEBhMCVUsxETAPBgNVBAoTCG1iZWQgVExTMSgwJgYDVQQDEx9tYmVkIFRMUyBU +ZXN0IGludGVybWVkaWF0ZSBDQSAzMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE +732fWHLNPMPsP1U1ibXvb55erlEVMlpXBGsj+KYwVqU1XCmW9Z9hhP7X/5js/DX9 +2J/utoHyjUtVpQOzdTrbsaMQMA4wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQDAgNo +ADBlAjAJRxbGRas3NBmk9MnGWXg7PT1xnRELHRWWIvfLdVQt06l1/xFg3ZuPdQdt +Qh7CK80CMQD7wa1o1a8qyDKBfLN636uKmKGga0E+vYXBeFCy9oARBangGCB0B2vt +pz590JvGWf0= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-int-ca3.crt b/third_party/mbedtls/test/data/test-int-ca3.crt new file mode 100644 index 000000000..7e724b241 --- /dev/null +++ b/third_party/mbedtls/test/data/test-int-ca3.crt @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBtDCCATqgAwIBAgIBTTAKBggqhkjOPQQDAjBLMQswCQYDVQQGEwJOTDERMA8G +A1UEChMIUG9sYXJTU0wxKTAnBgNVBAMTIFBvbGFyU1NMIFRlc3QgSW50ZXJtZWRp +YXRlIEVDIENBMB4XDTE1MDkwMTE0MDg0M1oXDTI1MDgyOTE0MDg0M1owSjELMAkG +A1UEBhMCVUsxETAPBgNVBAoTCG1iZWQgVExTMSgwJgYDVQQDEx9tYmVkIFRMUyBU +ZXN0IGludGVybWVkaWF0ZSBDQSAzMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE +732fWHLNPMPsP1U1ibXvb55erlEVMlpXBGsj+KYwVqU1XCmW9Z9hhP7X/5js/DX9 +2J/utoHyjUtVpQOzdTrbsaMQMA4wDAYDVR0TBAUwAwEB/zAKBggqhkjOPQQDAgNo +ADBlAjAJRxbGRas3NBmk9MnGWXg7PT1xnRELHRWWIvfLdVQt06l1/xFg3ZuPdQdt +Qh7CK80CMQD7wa1o1a8qyDKBfLN636uKmKGga0E+vYXBeFCy9oARBangGCB0B2vt +pz590JvGWfM= +-----END CERTIFICATE----- diff --git a/third_party/mbedtls/test/data/test-int-ca3.key b/third_party/mbedtls/test/data/test-int-ca3.key new file mode 100644 index 000000000..1bcc7116b --- /dev/null +++ b/third_party/mbedtls/test/data/test-int-ca3.key @@ -0,0 +1,8 @@ +-----BEGIN EC PARAMETERS----- +BggqhkjOPQMBBw== +-----END EC PARAMETERS----- +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIC9zTt8jgjBlbq+qCsGj6uclaKLYBqxYSmUiuBdM1KG9oAoGCCqGSM49 +AwEHoUQDQgAE732fWHLNPMPsP1U1ibXvb55erlEVMlpXBGsj+KYwVqU1XCmW9Z9h +hP7X/5js/DX92J/utoHyjUtVpQOzdTrbsQ== +-----END EC PRIVATE KEY----- diff --git a/third_party/mbedtls/test/lib.c b/third_party/mbedtls/test/lib.c new file mode 100644 index 000000000..cff0974e8 --- /dev/null +++ b/third_party/mbedtls/test/lib.c @@ -0,0 +1,1085 @@ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "libc/assert.h" +#include "libc/calls/calls.h" +#include "libc/fmt/conv.h" +#include "libc/fmt/fmt.h" +#include "libc/log/log.h" +#include "libc/rand/rand.h" +#include "libc/runtime/internal.h" +#include "libc/stdio/stdio.h" +#include "libc/str/str.h" +#include "libc/sysv/consts/exit.h" +#include "third_party/mbedtls/config.h" +#include "third_party/mbedtls/endian.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/test/lib.h" + +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +#if defined(MBEDTLS_PLATFORM_C) +static mbedtls_platform_context platform_ctx; +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) +typedef struct { + uint8_t expected_call; + uint8_t expected_call_happened; + jmp_buf state; + mbedtls_test_param_failed_location_record_t location_record; +} param_failed_ctx_t; +static param_failed_ctx_t param_failed_ctx; +#endif + +jmp_buf jmp_tmp; +int option_verbose; +struct Buffer output; +mbedtls_test_info_t mbedtls_test_info; + +int mbedtls_test_platform_setup(void) { + int ret = 0; + showcrashreports(); +#if defined(MBEDTLS_PLATFORM_C) + ret = mbedtls_platform_setup(&platform_ctx); +#endif /* MBEDTLS_PLATFORM_C */ + return ret; +} + +void mbedtls_test_platform_teardown(void) { +#if defined(MBEDTLS_PLATFORM_C) + mbedtls_platform_teardown(&platform_ctx); +#endif /* MBEDTLS_PLATFORM_C */ +} + +wontreturn void exit(int rc) { + if (rc != EXIT_SUCCESS) { + fwrite(output.p, 1, output.i, stderr); + } + __cxa_finalize(0); + _Exit(rc); +} + +int AppendFmt(struct Buffer *b, const char *fmt, ...) { + char *p; + int i, n; + va_list va, vb; + va_start(va, fmt); + if (option_verbose) { + n = vfprintf(stderr, fmt, va); + } else { + va_copy(vb, va); + n = vsnprintf(b->p + b->i, b->n - b->i, fmt, va); + if (n >= b->n - b->i) { + do { + if (b->n) { + b->n += b->n >> 1; + } else { + b->n = 16; + } + } while (b->i + n > b->n); + b->p = realloc(b->p, b->n); + vsnprintf(b->p + b->i, b->n - b->i, fmt, vb); + } + va_end(vb); + b->i += n; + } + va_end(va); + return n; +} + +static int ascii2uc(const char c, unsigned char *uc) { + if ((c >= '0') && (c <= '9')) { + *uc = c - '0'; + } else if ((c >= 'a') && (c <= 'f')) { + *uc = c - 'a' + 10; + } else if ((c >= 'A') && (c <= 'F')) { + *uc = c - 'A' + 10; + } else { + return -1; + } + return 0; +} + +int mbedtls_test_hexcmp(uint8_t *a, uint8_t *b, uint32_t a_len, + uint32_t b_len) { + int ret = 0; + uint32_t i = 0; + if (a_len != b_len) return -1; + for (i = 0; i < a_len; i++) { + if (a[i] != b[i]) { + ret = -1; + break; + } + } + return ret; +} + +/** + * \brief Record the current test case as a failure. + * + * This function can be called directly however it is usually + * called via macros such as TEST_ASSERT, TEST_EQUAL, + * PSA_ASSERT, etc... + * + * \note If the test case was already marked as failed, calling + * `mbedtls_test_fail( )` again will not overwrite any + * previous information about the failure. + * + * \param test Description of the failure or assertion that failed. This + * MUST be a string literal. + * \param line_no Line number where the failure originated. + * \param filename Filename where the failure originated. + */ +void mbedtls_test_fail(const char *test, int line_no, const char *filename) { + if (mbedtls_test_info.result == MBEDTLS_TEST_RESULT_FAILED) { + /* We've already recorded the test as having failed. Don't + * overwrite any previous information about the failure. */ + return; + } + mbedtls_test_info.result = MBEDTLS_TEST_RESULT_FAILED; + mbedtls_test_info.test = test; + mbedtls_test_info.line_no = line_no; + mbedtls_test_info.filename = filename; +} + +#ifdef MBEDTLS_CHECK_PARAMS +void mbedtls_param_failed(const char *msg, const char *file, int line) { + /* Record the location of the failure */ + param_failed_ctx.location_record.failure_condition = msg; + param_failed_ctx.location_record.file = file; + param_failed_ctx.location_record.line = line; + /* If we are testing the callback function... */ + if (param_failed_ctx.expected_call != 0) { + param_failed_ctx.expected_call = 0; + param_failed_ctx.expected_call_happened = 1; + } else { + /* ...else try a long jump. If the execution state has not been set-up + * or reset then the long jump buffer is all zero's and the call will + * with high probability fault, emphasizing there is something to look + * at. + */ + longjmp(param_failed_ctx.state, 1); + } +} +#endif + +/** + * \brief Record the current test case as skipped. + * + * This function can be called directly however it is usually + * called via the TEST_ASSUME macro. + * + * \param test Description of the assumption that caused the test case to + * be skipped. This MUST be a string literal. + * \param line_no Line number where the test case was skipped. + * \param filename Filename where the test case was skipped. + */ +void mbedtls_test_skip(const char *test, int line_no, const char *filename) { + mbedtls_test_info.result = MBEDTLS_TEST_RESULT_SKIPPED; + mbedtls_test_info.test = test; + mbedtls_test_info.line_no = line_no; + mbedtls_test_info.filename = filename; +} + +/** + * \brief Set the test step number for failure reports. + * + * Call this function to display "step NNN" in addition to the + * line number and file name if a test fails. Typically the "step + * number" is the index of a for loop but it can be whatever you + * want. + * + * \param step The step number to report. + */ +void mbedtls_test_set_step(unsigned long step) { + mbedtls_test_info.step = step; +} + +/** + * \brief Reset mbedtls_test_info to a ready/starting state. + */ +void mbedtls_test_info_reset(void) { + mbedtls_test_info.result = MBEDTLS_TEST_RESULT_SUCCESS; + mbedtls_test_info.step = -1; + mbedtls_test_info.test = 0; + mbedtls_test_info.line_no = 0; + mbedtls_test_info.filename = 0; +} + +/** + * \brief This function decodes the hexadecimal representation of + * data. + * + * \note The output buffer can be the same as the input buffer. For + * any other overlapping of the input and output buffers, the + * behavior is undefined. + * + * \param obuf Output buffer. + * \param obufmax Size in number of bytes of \p obuf. + * \param ibuf Input buffer. + * \param len The number of unsigned char written in \p obuf. This must + * not be \c NULL. + * + * \return \c 0 on success. + * \return \c -1 if the output buffer is too small or the input string + * is not a valid hexadecimal representation. + */ +int mbedtls_test_unhexify(unsigned char *obuf, size_t obufmax, const char *ibuf, + size_t *len) { + unsigned char uc, uc2; + *len = strlen(ibuf); + /* Must be even number of bytes. */ + if ((*len) & 1) return -1; + *len /= 2; + if ((*len) > obufmax) return -1; + while (*ibuf != 0) { + if (ascii2uc(*(ibuf++), &uc) != 0) return -1; + if (ascii2uc(*(ibuf++), &uc2) != 0) return -1; + *(obuf++) = (uc << 4) | uc2; + } + return 0; +} + +void mbedtls_test_hexify(unsigned char *obuf, const unsigned char *ibuf, + int len) { + unsigned char l, h; + while (len != 0) { + h = *ibuf / 16; + l = *ibuf % 16; + if (h < 10) + *obuf++ = '0' + h; + else + *obuf++ = 'a' + h - 10; + if (l < 10) + *obuf++ = '0' + l; + else + *obuf++ = 'a' + l - 10; + ++ibuf; + len--; + } +} + +/** + * Allocate and zeroize a buffer. + * + * If the size if zero, a pointer to a zeroized 1-byte buffer is returned. + * + * For convenience, dies if allocation fails. + */ +unsigned char *mbedtls_test_zero_alloc(size_t len) { + void *p; + size_t actual_len = (len != 0) ? len : 1; + p = mbedtls_calloc(1, actual_len); + TEST_HELPER_ASSERT(p != NULL); + memset(p, 0x00, actual_len); + return (p); +} + +/** + * Allocate and fill a buffer from hex data. + * + * The buffer is sized exactly as needed. This allows to detect buffer + * overruns (including overreads) when running the test suite under valgrind. + * + * If the size if zero, a pointer to a zeroized 1-byte buffer is returned. + * + * For convenience, dies if allocation fails. + */ +unsigned char *mbedtls_test_unhexify_alloc(const char *ibuf, size_t *olen) { + unsigned char *obuf; + size_t len; + *olen = strlen(ibuf) / 2; + if (*olen == 0) return (mbedtls_test_zero_alloc(*olen)); + obuf = mbedtls_calloc(1, *olen); + TEST_HELPER_ASSERT(obuf != NULL); + TEST_HELPER_ASSERT(mbedtls_test_unhexify(obuf, *olen, ibuf, &len) == 0); + return (obuf); +} + +#ifdef MBEDTLS_CHECK_PARAMS +/** + * \brief Get the location record of the last call to + * mbedtls_test_param_failed(). + * + * \note The call expectation is set up and active until the next call to + * mbedtls_test_param_failed_check_expected_call() or + * mbedtls_param_failed() that cancels it. + */ +void mbedtls_test_param_failed_get_location_record( + mbedtls_test_param_failed_location_record_t *location_record) { + *location_record = param_failed_ctx.location_record; +} +#endif + +#ifdef MBEDTLS_CHECK_PARAMS +/** + * \brief State that a call to mbedtls_param_failed() is expected. + * + * \note The call expectation is set up and active until the next call to + * mbedtls_test_param_failed_check_expected_call() or + * mbedtls_param_failed that cancel it. + */ +void mbedtls_test_param_failed_expect_call(void) { + param_failed_ctx.expected_call_happened = 0; + param_failed_ctx.expected_call = 1; +} +#endif + +#ifdef MBEDTLS_CHECK_PARAMS +/** + * \brief Check whether mbedtls_param_failed() has been called as expected. + * + * \note Check whether mbedtls_param_failed() has been called between the + * last call to mbedtls_test_param_failed_expect_call() and the call + * to this function. + * + * \return \c 0 Since the last call to mbedtls_param_failed_expect_call(), + * mbedtls_param_failed() has been called. + * \c -1 Otherwise. + */ +int mbedtls_test_param_failed_check_expected_call(void) { + param_failed_ctx.expected_call = 0; + if (param_failed_ctx.expected_call_happened != 0) return 0; + return -1; +} +#endif + +#ifdef MBEDTLS_CHECK_PARAMS +/** + * \brief Get the address of the object of type jmp_buf holding the execution + * state information used by mbedtls_param_failed() to do a long jump. + * + * \note If a call to mbedtls_param_failed() is not expected in the sense + * that there is no call to mbedtls_test_param_failed_expect_call() + * preceding it, then mbedtls_param_failed() will try to restore the + * execution to the state stored in the jmp_buf object whose address + * is returned by the present function. + * + * \note This function is intended to provide the parameter of the + * setjmp() function to set-up where mbedtls_param_failed() should + * long-jump if it has to. It is foreseen to be used as: + * + * setjmp( mbedtls_test_param_failed_get_state_buf() ). + * + * \note The type of the returned value is not jmp_buf as jmp_buf is an + * an array type (C specification) and a function cannot return an + * array type. + * + * \note The type of the returned value is not jmp_buf* as then the return + * value couldn't be used by setjmp(), as its parameter's type is + * jmp_buf. + * + * \return Address of the object of type jmp_buf holding the execution state + * information used by mbedtls_param_failed() to do a long jump. + */ +void *mbedtls_test_param_failed_get_state_buf(void) { + return ¶m_failed_ctx.state; +} +#endif + +#ifdef MBEDTLS_CHECK_PARAMS +/** + * \brief Reset the execution state used by mbedtls_param_failed() to do a + * long jump. + * + * \note If a call to mbedtls_param_failed() is not expected in the sense + * that there is no call to mbedtls_test_param_failed_expect_call() + * preceding it, then mbedtls_param_failed() will try to restore the + * execution state that this function reset. + * + * \note It is recommended to reset the execution state when the state + * is not relevant anymore. That way an unexpected call to + * mbedtls_param_failed() will not trigger a long jump with + * undefined behavior but rather a long jump that will rather fault. + */ +void mbedtls_test_param_failed_reset_state(void) { + memset(param_failed_ctx.state, 0, sizeof(param_failed_ctx.state)); +} +#endif + +/** + * This function just returns data from rand(). + * Although predictable and often similar on multiple + * runs, this does not result in identical random on + * each run. So do not use this if the results of a + * test depend on the random data that is generated. + * + * rng_state shall be NULL. + */ +int mbedtls_test_rnd_std_rand(void *rng_state, unsigned char *output, + size_t len) { + size_t i; + if (rng_state != NULL) rng_state = NULL; + for (i = 0; i < len; ++i) output[i] = rand(); + return 0; +} + +/** + * This function only returns zeros + * + * rng_state shall be NULL. + */ +int mbedtls_test_rnd_zero_rand(void *rng_state, unsigned char *output, + size_t len) { + if (rng_state != NULL) rng_state = NULL; + memset(output, 0, len); + return 0; +} + +/** + * This function returns random based on a buffer it receives. + * + * rng_state shall be a pointer to a rnd_buf_info structure. + * + * The number of bytes released from the buffer on each call to + * the random function is specified by per_call. (Can be between + * 1 and 4) + * + * After the buffer is empty it will return rand(); + */ +int mbedtls_test_rnd_buffer_rand(void *rng_state, unsigned char *output, + size_t len) { + mbedtls_test_rnd_buf_info *info = (mbedtls_test_rnd_buf_info *)rng_state; + size_t use_len; + if (rng_state == NULL) return (mbedtls_test_rnd_std_rand(NULL, output, len)); + use_len = len; + if (len > info->length) use_len = info->length; + if (use_len) { + memcpy(output, info->buf, use_len); + info->buf += use_len; + info->length -= use_len; + } + if (len - use_len > 0) + return (mbedtls_test_rnd_std_rand(NULL, output + use_len, len - use_len)); + return 0; +} + +/** + * This function returns random based on a pseudo random function. + * This means the results should be identical on all systems. + * Pseudo random is based on the XTEA encryption algorithm to + * generate pseudorandom. + * + * rng_state shall be a pointer to a rnd_pseudo_info structure. + */ +int mbedtls_test_rnd_pseudo_rand(void *rng_state, unsigned char *output, + size_t len) { + mbedtls_test_rnd_pseudo_info *info = + (mbedtls_test_rnd_pseudo_info *)rng_state; + uint32_t i, *k, sum, delta = 0x9E3779B9; + unsigned char result[4], *out = output; + if (rng_state == NULL) return (mbedtls_test_rnd_std_rand(NULL, output, len)); + k = info->key; + while (len > 0) { + size_t use_len = (len > 4) ? 4 : len; + sum = 0; + for (i = 0; i < 32; i++) { + info->v0 += + (((info->v1 << 4) ^ (info->v1 >> 5)) + info->v1) ^ (sum + k[sum & 3]); + sum += delta; + info->v1 += (((info->v0 << 4) ^ (info->v0 >> 5)) + info->v0) ^ + (sum + k[(sum >> 11) & 3]); + } + PUT_UINT32_BE(info->v0, result, 0); + memcpy(out, result, use_len); + len -= use_len; + out += 4; + } + return 0; +} + +/** + * \brief Verifies that string is in string parameter format i.e. "" + * It also strips enclosing '"' from the input string. + * + * \param str String parameter. + * + * \return 0 if success else 1 + */ +int verify_string(char **str) { + if ((*str)[0] != '"' || (*str)[strlen(*str) - 1] != '"') { + WRITE("Expected string (with \"\") for parameter and got: %`'s\n", *str); + return -1; + } + (*str)++; + (*str)[strlen(*str) - 1] = '\0'; + return 0; +} + +/** + * \brief Verifies that string is an integer. Also gives the converted + * integer value. + * + * \param str Input string. + * \param value Pointer to int for output value. + * + * \return 0 if success else 1 + */ +int verify_int(char *str, int *value) { + size_t i; + int minus = 0; + int digits = 1; + int hex = 0; + for (i = 0; i < strlen(str); i++) { + if (i == 0 && str[i] == '-') { + minus = 1; + continue; + } + if (((minus && i == 2) || (!minus && i == 1)) && str[i - 1] == '0' && + (str[i] == 'x' || str[i] == 'X')) { + hex = 1; + continue; + } + if (!((str[i] >= '0' && str[i] <= '9') || + (hex && ((str[i] >= 'a' && str[i] <= 'f') || + (str[i] >= 'A' && str[i] <= 'F'))))) { + digits = 0; + break; + } + } + if (digits) { + if (hex) + *value = strtol(str, NULL, 16); + else + *value = strtol(str, NULL, 10); + return 0; + } + WRITE("Expected integer for parameter and got: %s\n", str); + return KEY_VALUE_MAPPING_NOT_FOUND; +} + +/** + * \brief Read a line from the passed file pointer. + * + * \param f FILE pointer + * \param buf Pointer to memory to hold read line. + * \param len Length of the buf. + * + * \return 0 if success else -1 + */ +int get_line(FILE *f, char *buf, size_t len) { + char *ret; + int i = 0, str_len = 0, has_string = 0; + /* Read until we get a valid line */ + do { + ret = fgets(buf, len, f); + if (ret == NULL) return -1; + str_len = strlen(buf); + /* Skip empty line and comment */ + if (str_len == 0 || buf[0] == '#') continue; + has_string = 0; + for (i = 0; i < str_len; i++) { + char c = buf[i]; + if (c != ' ' && c != '\t' && c != '\n' && c != '\v' && c != '\f' && + c != '\r') { + has_string = 1; + break; + } + } + } while (!has_string); + /* Strip new line and carriage return */ + ret = buf + strlen(buf); + if (ret-- > buf && *ret == '\n') *ret = '\0'; + if (ret-- > buf && *ret == '\r') *ret = '\0'; + return 0; +} + +/** + * \brief Splits string delimited by ':'. Ignores '\:'. + * + * \param buf Input string + * \param len Input string length + * \param params Out params found + * \param params_len Out params array len + * + * \return Count of strings found. + */ +static int parse_arguments(char *buf, size_t len, char **params, + size_t params_len) { + int t = 0; + size_t cnt = 0, i; + char *cur = buf; + char *p = buf, *q; + params[cnt++] = cur; + while (*p != '\0' && p < (buf + len)) { + if (*p == '"') { + if (t) { + t = 0; + } else { + t = 1; + } + } + if (*p == '\\') { + p++; + p++; + continue; + } + if (*p == ':' && !t) { + if (p + 1 < buf + len) { + cur = p + 1; + TEST_HELPER_ASSERT(cnt < params_len); + params[cnt++] = cur; + } + *p = '\0'; + } + p++; + } + /* Replace newlines, question marks and colons in strings */ + for (i = 0; i < cnt; i++) { + p = params[i]; + q = params[i]; + while (*p != '\0') { + if (*p == '\\' && *(p + 1) == 'n') { + p += 2; + *(q++) = '\n'; + } else if (*p == '\\' && *(p + 1) == ':') { + p += 2; + *(q++) = ':'; + } else if (*p == '\\' && *(p + 1) == '?') { + p += 2; + *(q++) = '?'; + } else + *(q++) = *(p++); + } + *q = '\0'; + } + return (cnt); +} + +/** + * \brief Converts parameters into test function consumable parameters. + * Example: Input: {"int", "0", "char*", "Hello", + * "hex", "abef", "exp", "1"} + * Output: { + * 0, // Verified int + * "Hello", // Verified string + * 2, { 0xab, 0xef },// Converted len,hex pair + * 9600 // Evaluated expression + * } + * + * + * \param cnt Parameter array count. + * \param params Out array of found parameters. + * \param int_params_store Memory for storing processed integer parameters. + * + * \return 0 for success else 1 + */ +static int convert_params(size_t cnt, char **params, int *int_params_store) { + char **cur = params; + char **out = params; + int ret = DISPATCH_TEST_SUCCESS; + while (cur < params + cnt) { + char *type = *cur++; + char *val = *cur++; + if (strcmp(type, "char*") == 0) { + if (verify_string(&val) == 0) { + *out++ = val; + } else { + ret = (DISPATCH_INVALID_TEST_DATA); + break; + } + } else if (strcmp(type, "int") == 0) { + if (verify_int(val, int_params_store) == 0) { + *out++ = (char *)int_params_store++; + } else { + ret = (DISPATCH_INVALID_TEST_DATA); + break; + } + } else if (strcmp(type, "hex") == 0) { + if (verify_string(&val) == 0) { + size_t len; + TEST_HELPER_ASSERT(mbedtls_test_unhexify((unsigned char *)val, + strlen(val), val, &len) == 0); + *int_params_store = len; + *out++ = val; + *out++ = (char *)(int_params_store++); + } else { + ret = (DISPATCH_INVALID_TEST_DATA); + break; + } + } else if (strcmp(type, "exp") == 0) { + int exp_id = strtol(val, NULL, 10); + if (get_expression(exp_id, int_params_store) == 0) { + *out++ = (char *)int_params_store++; + } else { + ret = (DISPATCH_INVALID_TEST_DATA); + break; + } + } else { + ret = (DISPATCH_INVALID_TEST_DATA); + break; + } + } + return (ret); +} + +/** + * \brief Tests snprintf implementation with test input. + * + * \note + * At high optimization levels (e.g. gcc -O3), this function may be + * inlined in run_test_snprintf. This can trigger a spurious warning about + * potential misuse of snprintf from gcc -Wformat-truncation (observed with + * gcc 7.2). This warning makes tests in run_test_snprintf redundant on gcc + * only. They are still valid for other compilers. Avoid this warning by + * forbidding inlining of this function by gcc. + * + * \param n Buffer test length. + * \param ref_buf Expected buffer. + * \param ref_ret Expected snprintf return value. + * + * \return 0 for success else 1 + */ +static noinline int test_snprintf(size_t n, const char *ref_buf, int ref_ret) { + int ret; + char buf[10] = "xxxxxxxxx"; + const char ref[10] = "xxxxxxxxx"; + if (n >= sizeof(buf)) return -1; + ret = mbedtls_snprintf(buf, n, "%s", "123"); + if (ret < 0 || (size_t)ret >= n) ret = -1; + if (strncmp(ref_buf, buf, sizeof(buf)) != 0 || ref_ret != ret || + memcmp(buf + n, ref + n, sizeof(buf) - n) != 0) { + return 1; + } + return 0; +} + +/** + * \brief Tests snprintf implementation. + * + * \return 0 for success else 1 + */ +static int run_test_snprintf(void) { + return (test_snprintf(0, "xxxxxxxxx", -1) != 0 || + test_snprintf(1, "", -1) != 0 || test_snprintf(2, "1", -1) != 0 || + test_snprintf(3, "12", -1) != 0 || test_snprintf(4, "123", 3) != 0 || + test_snprintf(5, "123", 3) != 0); +} + +/** + * \brief Write the description of the test case to the outcome CSV file. + * + * \param outcome_file The file to write to. + * If this is \c NULL, this function does nothing. + * \param argv0 The test suite name. + * \param test_case The test case description. + */ +static void write_outcome_entry(FILE *outcome_file, const char *argv0, + const char *test_case) { + /* The non-varying fields are initialized on first use. */ + static const char *platform = NULL; + static const char *configuration = NULL; + static const char *test_suite = NULL; + if (outcome_file == NULL) return; + if (platform == NULL) { + platform = getenv("MBEDTLS_TEST_PLATFORM"); + if (platform == NULL) platform = "unknown"; + } + if (configuration == NULL) { + configuration = getenv("MBEDTLS_TEST_CONFIGURATION"); + if (configuration == NULL) configuration = "unknown"; + } + if (test_suite == NULL) { + test_suite = strrchr(argv0, '/'); + if (test_suite != NULL) + test_suite += 1; // skip the '/' + else + test_suite = argv0; + } + /* Write the beginning of the outcome line. + * Ignore errors: writing the outcome file is on a best-effort basis. */ + WRITE("%s;%s;%s;%s;", platform, configuration, test_suite, test_case); +} + +/** + * \brief Write the result of the test case to the outcome CSV file. + * + * \param outcome_file The file to write to. + * If this is \c NULL, this function does nothing. + * \param unmet_dep_count The number of unmet dependencies. + * \param unmet_dependencies The array of unmet dependencies. + * \param missing_unmet_dependencies Non-zero if there was a problem tracking + * all unmet dependencies, 0 otherwise. + * \param ret The test dispatch status (DISPATCH_xxx). + * \param info A pointer to the test info structure. + */ +static void write_outcome_result(FILE *outcome_file, size_t unmet_dep_count, + int unmet_dependencies[], + int missing_unmet_dependencies, int ret, + const mbedtls_test_info_t *info) { + if (outcome_file == NULL) return; + /* Write the end of the outcome line. + * Ignore errors: writing the outcome file is on a best-effort basis. */ + switch (ret) { + case DISPATCH_TEST_SUCCESS: + if (unmet_dep_count > 0) { + size_t i; + WRITE("SKIP"); + for (i = 0; i < unmet_dep_count; i++) { + WRITE("%c%d", i == 0 ? ';' : ':', unmet_dependencies[i]); + } + if (missing_unmet_dependencies) WRITE(":..."); + break; + } + switch (info->result) { + case MBEDTLS_TEST_RESULT_SUCCESS: + WRITE("PASS;"); + break; + case MBEDTLS_TEST_RESULT_SKIPPED: + WRITE("SKIP;Runtime skip"); + break; + default: + WRITE("FAIL;%s:%d:%s", info->filename, info->line_no, info->test); + break; + } + break; + case DISPATCH_TEST_FN_NOT_FOUND: + WRITE("FAIL;Test function not found"); + break; + case DISPATCH_INVALID_TEST_DATA: + WRITE("FAIL;Invalid test data"); + break; + case DISPATCH_UNSUPPORTED_SUITE: + WRITE("SKIP;Unsupported suite"); + break; + default: + WRITE("FAIL;Unknown cause"); + break; + } + WRITE("\n"); + fflush(outcome_file); +} + +/** + * \brief Desktop implementation of execute_tests(). + * Parses command line and executes tests from + * supplied or default data file. + * + * \param argc Command line argument count. + * \param argv Argument array. + * + * \return Program exit status. + */ +int execute_tests(int argc, const char **argv, const char *default_filename) { + /* Local Configurations and options */ + long double t1, t2; + const char *test_filename = NULL; + const char **test_files = NULL; + size_t testfile_count = 0; + size_t function_id = 0; + /* Other Local variables */ + int arg_index = 1; + const char *next_arg; + size_t testfile_index, i, cnt; + int ret; + unsigned total_errors = 0, total_tests = 0, total_skipped = 0; + FILE *file; + char buf[5000]; + char *params[50]; + /* Store for proccessed integer params. */ + int int_params[50]; + void *pointer; + const char *outcome_file_name = getenv("MBEDTLS_TEST_OUTCOME_FILE"); + FILE *outcome_file = NULL; + /* + * The C standard doesn't guarantee that all-bits-0 is the representation + * of a NULL pointer. We do however use that in our code for initializing + * structures, which should work on every modern platform. Let's be sure. + */ + memset(&pointer, 0, sizeof(void *)); + if (pointer != NULL) { + WRITE("all-bits-zero is not a NULL pointer\n"); + return 1; + } + /* + * Make sure we have a snprintf that correctly zero-terminates + */ + if (run_test_snprintf() != 0) { + WRITE("the snprintf implementation is broken\n"); + return 1; + } + if (outcome_file_name != NULL && *outcome_file_name != '\0') { + outcome_file = fopen(outcome_file_name, "a"); + if (outcome_file == NULL) { + WRITE("Unable to open outcome file. Continuing anyway.\n"); + } + } + while (arg_index < argc) { + next_arg = argv[arg_index]; + if (strcmp(next_arg, "--verbose") == 0 || strcmp(next_arg, "-v") == 0) { + option_verbose = 1; + } else if (strcmp(next_arg, "--help") == 0 || strcmp(next_arg, "-h") == 0) { + WRITE( + "Usage: %s [OPTIONS] files...\n\n" + " Command line arguments:\n" + " files... One or more test data files. If no file is\n" + " specified the following default test case\n" + " file is used:\n" + " %s\n\n" + " Options:\n" + " -v | --verbose Display full information about each test\n" + " -h | --help Display this information\n\n", + argv[0], "TESTCASE_FILENAME"); + exit(EXIT_SUCCESS); + } else { + /* Not an option, therefore treat all further arguments as the file + * list. + */ + test_files = &argv[arg_index]; + testfile_count = argc - arg_index; + } + arg_index++; + } + /* If no files were specified, assume a default */ + if (test_files == NULL || testfile_count == 0) { + test_files = &default_filename; + testfile_count = 1; + } + /* Initialize the struct that holds information about the last test */ + mbedtls_test_info_reset(); + /* Now begin to execute the tests in the testfiles */ + for (testfile_index = 0; testfile_index < testfile_count; testfile_index++) { + size_t unmet_dep_count = 0; + int unmet_dependencies[20]; + int missing_unmet_dependencies = 0; + test_filename = test_files[testfile_index]; + file = fopen(test_filename, "r"); + if (file == NULL) { + WRITE("Failed to open test file: %s\n", test_filename); + if (outcome_file != NULL) fclose(outcome_file); + return 1; + } + while (!feof(file)) { + if (unmet_dep_count > 0) { + WRITE("FATAL: Dep count larger than zero at start of loop\n"); + exit(EXIT_FAILURE); + } + unmet_dep_count = 0; + missing_unmet_dependencies = 0; + if ((ret = get_line(file, buf, sizeof(buf))) != 0) break; + WRITE("%s%.66s", + mbedtls_test_info.result == MBEDTLS_TEST_RESULT_FAILED ? "\n" : "", + buf); + WRITE(" "); + for (i = strlen(buf) + 1; i < 67; i++) WRITE("."); + WRITE(" "); + fflush(stdout); + write_outcome_entry(outcome_file, argv[0], buf); + total_tests++; + if ((ret = get_line(file, buf, sizeof(buf))) != 0) break; + cnt = parse_arguments(buf, strlen(buf), params, + sizeof(params) / sizeof(params[0])); + if (strcmp(params[0], "depends_on") == 0) { + for (i = 1; i < cnt; i++) { + int dep_id = strtol(params[i], NULL, 10); + if (dep_check(dep_id) != DEPENDENCY_SUPPORTED) { + if (unmet_dep_count < ARRAY_LENGTH(unmet_dependencies)) { + unmet_dependencies[unmet_dep_count] = dep_id; + unmet_dep_count++; + } else { + missing_unmet_dependencies = 1; + } + } + } + if ((ret = get_line(file, buf, sizeof(buf))) != 0) break; + cnt = parse_arguments(buf, strlen(buf), params, + sizeof(params) / sizeof(params[0])); + } + // If there are no unmet dependencies execute the test + t1 = nowl(); + if (unmet_dep_count == 0) { + mbedtls_test_info_reset(); + function_id = strtoul(params[0], NULL, 10); + if ((ret = check_test(function_id)) == DISPATCH_TEST_SUCCESS) { + ret = convert_params(cnt - 1, params + 1, int_params); + if (DISPATCH_TEST_SUCCESS == ret) { + ret = dispatch_test(function_id, (void **)(params + 1)); + } + } + } + t2 = nowl(); + write_outcome_result(outcome_file, unmet_dep_count, unmet_dependencies, + missing_unmet_dependencies, ret, &mbedtls_test_info); + if (unmet_dep_count > 0 || ret == DISPATCH_UNSUPPORTED_SUITE) { + total_skipped++; + WRITE("----"); + if (1 == option_verbose && ret == DISPATCH_UNSUPPORTED_SUITE) { + WRITE("\n Test Suite not enabled"); + } + if (1 == option_verbose && unmet_dep_count > 0) { + WRITE("\n Unmet dependencies: "); + for (i = 0; i < unmet_dep_count; i++) { + WRITE("%d ", unmet_dependencies[i]); + } + if (missing_unmet_dependencies) WRITE("..."); + } + WRITE("\n"); + fflush(stdout); + unmet_dep_count = 0; + missing_unmet_dependencies = 0; + } else if (ret == DISPATCH_TEST_SUCCESS) { + if (mbedtls_test_info.result == MBEDTLS_TEST_RESULT_SUCCESS) { + WRITE("PASS (%,ldus)\n", (int64_t)((t2 - t1) * 1e6)); + } else if (mbedtls_test_info.result == MBEDTLS_TEST_RESULT_SKIPPED) { + WRITE("----\n"); + total_skipped++; + } else { + total_errors++; + WRITE("FAILED\n"); + WRITE(" %s\n at ", mbedtls_test_info.test); + if (mbedtls_test_info.step != -1) { + WRITE("step %lu, ", mbedtls_test_info.step); + } + WRITE("line %d, %s", mbedtls_test_info.line_no, + mbedtls_test_info.filename); + } + fflush(stdout); + } else if (ret == DISPATCH_INVALID_TEST_DATA) { + WRITE("FAILED: FATAL PARSE ERROR\n"); + fclose(file); + exit(2); + } else if (ret == DISPATCH_TEST_FN_NOT_FOUND) { + WRITE("FAILED: FATAL TEST FUNCTION NOT FOUND\n"); + fclose(file); + exit(2); + } else + total_errors++; + } + fclose(file); + } + if (outcome_file != NULL) fclose(outcome_file); + WRITE("\n--------------------------------------------------" + "--------------------------\n\n"); + if (total_errors == 0) + WRITE("PASSED"); + else + WRITE("FAILED"); + WRITE(" (%u / %u tests (%u skipped))\n", total_tests - total_errors, + total_tests, total_skipped); +#if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) && \ + !defined(TEST_SUITE_MEMORY_BUFFER_ALLOC) +#if defined(MBEDTLS_MEMORY_DEBUG) + mbedtls_memory_buffer_alloc_status(); +#endif + mbedtls_memory_buffer_alloc_free(); +#endif + return total_errors != 0; +} diff --git a/third_party/mbedtls/test/lib.h b/third_party/mbedtls/test/lib.h new file mode 100644 index 000000000..f897b6da9 --- /dev/null +++ b/third_party/mbedtls/test/lib.h @@ -0,0 +1,230 @@ +#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_TEST_LIB_H_ +#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_TEST_LIB_H_ +#include "third_party/mbedtls/config.h" +#include "third_party/mbedtls/platform.h" + +#define DEPENDENCY_SUPPORTED 0 +#define KEY_VALUE_MAPPING_FOUND 0 +#define DISPATCH_TEST_SUCCESS 0 + +#define KEY_VALUE_MAPPING_NOT_FOUND -1 +#define DEPENDENCY_NOT_SUPPORTED -2 +#define DISPATCH_TEST_FN_NOT_FOUND -3 +#define DISPATCH_INVALID_TEST_DATA -4 +#define DISPATCH_UNSUPPORTED_SUITE -5 + +#define PSA_ECC_FAMILY_SECP_R1 0x12 +#define PSA_ECC_FAMILY_SECP_K1 0x17 +#define PSA_ECC_FAMILY_BRAINPOOL_P_R1 0x30 + +#if defined(MBEDTLS_TEST_CONSTANT_FLOW_MEMSAN) +#include +#define TEST_CF_SECRET __msan_allocated_memory +#define TEST_CF_PUBLIC __msan_unpoison +#elif defined(MBEDTLS_TEST_CONSTANT_FLOW_VALGRIND) +#include +#define TEST_CF_SECRET VALGRIND_MAKE_MEM_UNDEFINED +#define TEST_CF_PUBLIC VALGRIND_MAKE_MEM_DEFINED +#else +#define TEST_CF_SECRET(ptr, size) +#define TEST_CF_PUBLIC(ptr, size) +#endif + +#if defined(MBEDTLS_TEST_NULL_ENTROPY) || \ + (!defined(MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES) && \ + (!defined(MBEDTLS_NO_PLATFORM_ENTROPY) || defined(MBEDTLS_HAVEGE_C) || \ + defined(MBEDTLS_ENTROPY_HARDWARE_ALT) || defined(ENTROPY_NV_SEED))) +#define ENTROPY_HAVE_STRONG +#else +#error oh no entropy +#endif + +#if !(__ASSEMBLER__ + __LINKER__ + 0) +COSMOPOLITAN_C_START_ + +#define WRITE(...) AppendFmt(&output, __VA_ARGS__) + +#define TEST_ASSERT(TEST) \ + do { \ + if (!(TEST)) { \ + mbedtls_test_fail(#TEST, __LINE__, __FILE__); \ + goto exit; \ + } \ + } while (0) + +#define TEST_EQUAL(expr1, expr2) TEST_ASSERT((expr1) == (expr2)) + +#define ASSERT_ALLOC(pointer, length) \ + do { \ + TEST_ASSERT((pointer) == NULL); \ + if ((length) != 0) { \ + (pointer) = mbedtls_calloc(sizeof(*(pointer)), (length)); \ + TEST_ASSERT((pointer) != NULL); \ + } \ + } while (0) + +#define ASSERT_ALLOC_WEAK(pointer, length) \ + do { \ + TEST_ASSERT((pointer) == NULL); \ + if ((length) != 0) { \ + (pointer) = mbedtls_calloc(sizeof(*(pointer)), (length)); \ + TEST_ASSUME((pointer) != NULL); \ + } \ + } while (0) + +#define ASSERT_COMPARE(p1, size1, p2, size2) \ + do { \ + TEST_ASSERT((size1) == (size2)); \ + if ((size1) != 0) TEST_ASSERT(memcmp((p1), (p2), (size1)) == 0); \ + } while (0) + +#define TEST_ASSUME(TEST) \ + do { \ + if (!(TEST)) { \ + mbedtls_test_skip(#TEST, __LINE__, __FILE__); \ + goto exit; \ + } \ + } while (0) + +#define TEST_INVALID_PARAM_RET(PARAM_ERR_VALUE, TEST) \ + do { \ + mbedtls_test_param_failed_expect_call(); \ + if (((TEST) != (PARAM_ERR_VALUE)) || \ + (mbedtls_test_param_failed_check_expected_call() != 0)) { \ + mbedtls_test_fail(#TEST, __LINE__, __FILE__); \ + goto exit; \ + } \ + mbedtls_test_param_failed_check_expected_call(); \ + } while (0) + +#define TEST_INVALID_PARAM(TEST) \ + do { \ + memcpy(jmp_tmp, mbedtls_test_param_failed_get_state_buf(), \ + sizeof(jmp_tmp)); \ + if (setjmp(mbedtls_test_param_failed_get_state_buf()) == 0) { \ + TEST; \ + mbedtls_test_fail(#TEST, __LINE__, __FILE__); \ + goto exit; \ + } \ + mbedtls_test_param_failed_reset_state(); \ + } while (0) + +#define TEST_VALID_PARAM(TEST) TEST_ASSERT((TEST, 1)); + +#define ASSERT_ALLOC(pointer, length) \ + do { \ + TEST_ASSERT((pointer) == NULL); \ + if ((length) != 0) { \ + (pointer) = mbedtls_calloc(sizeof(*(pointer)), (length)); \ + TEST_ASSERT((pointer) != NULL); \ + } \ + } while (0) + +#define TEST_HELPER_ASSERT(a) \ + if (!(a)) { \ + WRITE("%s:%d: assertion failed: %s\n", __FILE__, __LINE__, #a); \ + exit(1); \ + } + +#define ARRAY_LENGTH_UNSAFE(array) (sizeof(array) / sizeof(*(array))) + +#ifdef __GNUC__ +#define IS_ARRAY_NOT_POINTER(arg) \ + (!__builtin_types_compatible_p(__typeof__(arg), __typeof__(&(arg)[0]))) +#define STATIC_ASSERT_EXPR(const_expr) \ + (0 && sizeof(struct { unsigned int STATIC_ASSERT : 1 - 2 * !(const_expr); })) +#define STATIC_ASSERT_THEN_RETURN(condition, value) \ + (STATIC_ASSERT_EXPR(condition) ? 0 : (value)) +#define ARRAY_LENGTH(array) \ + (STATIC_ASSERT_THEN_RETURN(IS_ARRAY_NOT_POINTER(array), \ + ARRAY_LENGTH_UNSAFE(array))) +#else +#define ARRAY_LENGTH(array) ARRAY_LENGTH_UNSAFE(array) +#endif + +#define USE_PSA_INIT() ((void)0) +#define USE_PSA_DONE() ((void)0) + +typedef enum { + MBEDTLS_TEST_RESULT_SUCCESS = 0, + MBEDTLS_TEST_RESULT_FAILED, + MBEDTLS_TEST_RESULT_SKIPPED +} mbedtls_test_result_t; + +typedef struct { + mbedtls_test_result_t result; + const char *test; + const char *filename; + int line_no; + unsigned long step; +} mbedtls_test_info_t; + +extern mbedtls_test_info_t mbedtls_test_info; + +typedef struct { + const char *failure_condition; + const char *file; + int line; +} mbedtls_test_param_failed_location_record_t; + +typedef struct { + unsigned char *buf; + size_t length; +} mbedtls_test_rnd_buf_info; + +typedef struct data_tag { + uint8_t *x; + uint32_t len; +} data_t; + +/** + * Info structure for the pseudo random function + * + * Key should be set at the start to a test-unique value. + * Do not forget endianness! + * State( v0, v1 ) should be set to zero. + */ +typedef struct { + uint32_t key[16]; + uint32_t v0, v1; +} mbedtls_test_rnd_pseudo_info; + +struct Buffer { + size_t i, n; + char *p; +}; + +extern jmp_buf jmp_tmp; +extern struct Buffer output; + +int mbedtls_test_platform_setup(void); +void mbedtls_test_platform_teardown(void); +int mbedtls_test_hexcmp(uint8_t *, uint8_t *, uint32_t, uint32_t); +void mbedtls_test_fail(const char *, int, const char *); +void mbedtls_test_skip(const char *, int, const char *); +void mbedtls_test_set_step(unsigned long); +void mbedtls_test_info_reset(void); +int mbedtls_test_unhexify(unsigned char *, size_t, const char *, size_t *); +void mbedtls_test_hexify(unsigned char *, const unsigned char *, int); +unsigned char *mbedtls_test_zero_alloc(size_t); +unsigned char *mbedtls_test_unhexify_alloc(const char *, size_t *); +void mbedtls_test_param_failed_get_location_record( + mbedtls_test_param_failed_location_record_t *); +void mbedtls_test_param_failed_expect_call(void); +int mbedtls_test_param_failed_check_expected_call(void); +void *mbedtls_test_param_failed_get_state_buf(void); +void mbedtls_test_param_failed_reset_state(void); +int mbedtls_test_rnd_std_rand(void *, unsigned char *, size_t); +int mbedtls_test_rnd_zero_rand(void *, unsigned char *, size_t); +int mbedtls_test_rnd_buffer_rand(void *, unsigned char *, size_t); +int mbedtls_test_rnd_pseudo_rand(void *, unsigned char *, size_t); +int execute_tests(int, const char **, const char *); +int get_expression(int32_t, int32_t *); +int dispatch_test(size_t, void **); +int dep_check(int); +int check_test(size_t); +int AppendFmt(struct Buffer *, const char *, ...); + +COSMOPOLITAN_C_END_ +#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ +#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_TEST_LIB_H_ */ diff --git a/third_party/mbedtls/test/test.inc b/third_party/mbedtls/test/test.inc new file mode 100644 index 000000000..c2c68ab64 --- /dev/null +++ b/third_party/mbedtls/test/test.inc @@ -0,0 +1,16 @@ +#include "libc/calls/calls.h" +#include "libc/errno.h" +#include "libc/fmt/conv.h" +#include "libc/limits.h" +#include "libc/macros.internal.h" +#include "libc/sysv/consts/exit.h" +#include "third_party/mbedtls/config.h" +#include "third_party/mbedtls/test/lib.h" + +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +STATIC_YOINK("zip_uri_support"); diff --git a/third_party/mbedtls/test/test.mk b/third_party/mbedtls/test/test.mk new file mode 100644 index 000000000..e33da40a1 --- /dev/null +++ b/third_party/mbedtls/test/test.mk @@ -0,0 +1,1338 @@ +#-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐ +#───vi: set et ft=make ts=8 tw=8 fenc=utf-8 :vi───────────────────────┘ + +PKGS += THIRD_PARTY_MBEDTLS_TEST + +THIRD_PARTY_MBEDTLS_TEST_FILES := $(wildcard third_party/mbedtls/test/*) +THIRD_PARTY_MBEDTLS_TEST_SRCS = $(filter %.c,$(THIRD_PARTY_MBEDTLS_TEST_FILES)) +THIRD_PARTY_MBEDTLS_TEST_HDRS = $(filter %.h,$(THIRD_PARTY_MBEDTLS_TEST_FILES)) + +THIRD_PARTY_MBEDTLS_TEST_OBJS = \ + $(THIRD_PARTY_MBEDTLS_TEST_SRCS:%.c=o/$(MODE)/%.o) + +THIRD_PARTY_MBEDTLS_TEST_COMS = \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.cbc.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.cfb.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.ecb.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.ofb.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.rest.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.xts.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_asn1parse.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_asn1write.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_base64.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_blowfish.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_chacha20.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_chachapoly.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.aes.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.blowfish.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.ccm.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.chacha20.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.chachapoly.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.des.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.gcm.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.misc.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.nist_kw.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.null.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.padding.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ctr_drbg.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_des.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_dhm.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ecdh.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ecdsa.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ecjpake.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ecp.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_entropy.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_error.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes128_de.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes128_en.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes192_de.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes192_en.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes256_de.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes256_en.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.misc.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_hkdf.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.misc.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.no_reseed.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.nopr.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.pr.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_md.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_mdx.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_memory_buffer_alloc.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_mpi.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_net.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_nist_kw.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_oid.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pem.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pk.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs1_v15.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs1_v21.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs5.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pkparse.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pkwrite.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_poly1305.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_random.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_rsa.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_shax.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ssl.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_timing.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_version.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_x509parse.com \ + o/$(MODE)/third_party/mbedtls/test/test_suite_x509write.com + +THIRD_PARTY_MBEDTLS_TEST_TESTS = \ + $(THIRD_PARTY_MBEDTLS_TEST_COMS:%=%.ok) + +THIRD_PARTY_CHIBICC_TEST_BINS = \ + $(THIRD_PARTY_CHIBICC_TEST_COMS) \ + $(THIRD_PARTY_CHIBICC_TEST_COMS:%=%.dbg) + +THIRD_PARTY_MBEDTLS_TEST_CHECKS = \ + $(THIRD_PARTY_MBEDTLS_TEST_COMS:%=%.runs) \ + $(THIRD_PARTY_MBEDTLS_TEST_HDRS:%=o/$(MODE)/%.ok) + +THIRD_PARTY_MBEDTLS_TEST_DIRECTDEPS = \ + LIBC_CALLS \ + LIBC_DNS \ + LIBC_FMT \ + LIBC_INTRIN \ + LIBC_LOG \ + LIBC_MEM \ + LIBC_NEXGEN32E \ + LIBC_RAND \ + LIBC_RUNTIME \ + LIBC_STDIO \ + LIBC_STR \ + LIBC_SYSV \ + LIBC_TIME \ + LIBC_TESTLIB \ + LIBC_UNICODE \ + LIBC_ZIPOS \ + THIRD_PARTY_COMPILER_RT \ + THIRD_PARTY_GDTOA \ + THIRD_PARTY_MBEDTLS + +THIRD_PARTY_MBEDTLS_TEST_DEPS := \ + $(call uniq,$(foreach x,$(THIRD_PARTY_MBEDTLS_TEST_DIRECTDEPS),$($(x)))) + +o/$(MODE)/third_party/mbedtls/test/test.pkg: \ + $(THIRD_PARTY_MBEDTLS_TEST_OBJS) \ + $(foreach x,$(THIRD_PARTY_MBEDTLS_TEST_DIRECTDEPS),$($(x)_A).pkg) + +o/$(MODE)/third_party/mbedtls/test/%.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/%.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/%.com: o/$(MODE)/third_party/mbedtls/test/%.com.dbg + @$(COMPILE) -AOBJCOPY -T$@ $(OBJCOPY) -S -O binary $< $@ + +o/$(MODE)/third_party/mbedtls/test/%.com.runs: o/$(MODE)/third_party/mbedtls/test/%.com + @$(COMPILE) -ACHECK -tT$@ $< $(TESTARGS) + +$(THIRD_PARTY_MBEDTLS_TEST_OBJS): \ + OVERRIDE_CFLAGS += \ + -DSTACK_FRAME_UNLIMITED + +o/$(MODE)/third_party/mbedtls/test/lib.o: \ + OVERRIDE_CFLAGS += \ + -fdata-sections \ + -ffunction-sections + +.PHONY: o/$(MODE)/third_party/mbedtls/test +.PRECIOUS: $(THIRD_PARTY_CHIBICC_TEST_COMS:%=%.dbg) +o/$(MODE)/third_party/mbedtls/test: \ + $(THIRD_PARTY_MBEDTLS_TEST_CHECKS) + +o/$(MODE)/third_party/mbedtls/test/test_suite_aes.cbc.com: o/$(MODE)/third_party/mbedtls/test/test_suite_aes.cbc.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_aes.cbc.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.cbc.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.cbc.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_aes.cfb.com: o/$(MODE)/third_party/mbedtls/test/test_suite_aes.cfb.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_aes.cfb.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.cfb.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.cfb.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_aes.ecb.com: o/$(MODE)/third_party/mbedtls/test/test_suite_aes.ecb.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_aes.ecb.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.ecb.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.ecb.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_aes.ofb.com: o/$(MODE)/third_party/mbedtls/test/test_suite_aes.ofb.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_aes.ofb.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.ofb.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.ofb.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_aes.rest.com: o/$(MODE)/third_party/mbedtls/test/test_suite_aes.rest.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_aes.rest.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.rest.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.rest.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_aes.xts.com: o/$(MODE)/third_party/mbedtls/test/test_suite_aes.xts.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_aes.xts.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.xts.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_aes.xts.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_asn1parse.com: o/$(MODE)/third_party/mbedtls/test/test_suite_asn1parse.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_asn1parse.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_asn1parse.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_asn1parse.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_asn1write.com: o/$(MODE)/third_party/mbedtls/test/test_suite_asn1write.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_asn1write.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_asn1write.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_asn1write.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_base64.com: o/$(MODE)/third_party/mbedtls/test/test_suite_base64.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_base64.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_base64.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_base64.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_blowfish.com: o/$(MODE)/third_party/mbedtls/test/test_suite_blowfish.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_blowfish.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_blowfish.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_blowfish.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_chacha20.com: o/$(MODE)/third_party/mbedtls/test/test_suite_chacha20.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_chacha20.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_chacha20.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_chacha20.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_chachapoly.com: o/$(MODE)/third_party/mbedtls/test/test_suite_chachapoly.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_chachapoly.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_chachapoly.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_chachapoly.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.aes.com: o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.aes.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.aes.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.aes.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.aes.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.blowfish.com: o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.blowfish.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.blowfish.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.blowfish.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.blowfish.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.ccm.com: o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.ccm.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.ccm.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.ccm.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.ccm.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.chacha20.com: o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.chacha20.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.chacha20.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.chacha20.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.chacha20.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.chachapoly.com: o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.chachapoly.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.chachapoly.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.chachapoly.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.chachapoly.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.des.com: o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.des.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.des.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.des.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.des.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.gcm.com: o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.gcm.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.gcm.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.gcm.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.gcm.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.misc.com: o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.misc.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.misc.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.misc.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.misc.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.nist_kw.com: o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.nist_kw.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.nist_kw.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.nist_kw.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.nist_kw.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.null.com: o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.null.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.null.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.null.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.null.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.padding.com: o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.padding.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.padding.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.padding.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_cipher.padding.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_ctr_drbg.com: o/$(MODE)/third_party/mbedtls/test/test_suite_ctr_drbg.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_ctr_drbg.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ctr_drbg.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ctr_drbg.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_des.com: o/$(MODE)/third_party/mbedtls/test/test_suite_des.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_des.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_des.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_des.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_dhm.com: o/$(MODE)/third_party/mbedtls/test/test_suite_dhm.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_dhm.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_dhm.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_dhm.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dh.optlen.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dhparams.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_ecdh.com: o/$(MODE)/third_party/mbedtls/test/test_suite_ecdh.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_ecdh.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ecdh.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ecdh.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_ecdsa.com: o/$(MODE)/third_party/mbedtls/test/test_suite_ecdsa.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_ecdsa.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ecdsa.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ecdsa.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_ecjpake.com: o/$(MODE)/third_party/mbedtls/test/test_suite_ecjpake.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_ecjpake.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ecjpake.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ecjpake.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_ecp.com: o/$(MODE)/third_party/mbedtls/test/test_suite_ecp.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_ecp.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ecp.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ecp.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_entropy.com: o/$(MODE)/third_party/mbedtls/test/test_suite_entropy.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_entropy.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_entropy.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_entropy.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_error.com: o/$(MODE)/third_party/mbedtls/test/test_suite_error.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_error.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_error.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_error.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes128_de.com: o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes128_de.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes128_de.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes128_de.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes128_de.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes128_en.com: o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes128_en.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes128_en.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes128_en.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes128_en.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes192_de.com: o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes192_de.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes192_de.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes192_de.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes192_de.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes192_en.com: o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes192_en.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes192_en.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes192_en.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes192_en.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes256_de.com: o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes256_de.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes256_de.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes256_de.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes256_de.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes256_en.com: o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes256_en.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes256_en.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes256_en.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.aes256_en.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.misc.com: o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.misc.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.misc.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.misc.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_gcm.misc.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_hkdf.com: o/$(MODE)/third_party/mbedtls/test/test_suite_hkdf.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_hkdf.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_hkdf.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_hkdf.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.misc.com: o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.misc.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.misc.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.misc.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.misc.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.no_reseed.com: o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.no_reseed.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.no_reseed.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.no_reseed.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.no_reseed.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.nopr.com: o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.nopr.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.nopr.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.nopr.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.nopr.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.pr.com: o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.pr.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.pr.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.pr.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_hmac_drbg.pr.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_md.com: o/$(MODE)/third_party/mbedtls/test/test_suite_md.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_md.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_md.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_md.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/hash_file_1.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/hash_file_2.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/hash_file_3.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/hash_file_4.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/hash_file_5.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_mdx.com: o/$(MODE)/third_party/mbedtls/test/test_suite_mdx.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_mdx.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_mdx.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_mdx.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_memory_buffer_alloc.com: o/$(MODE)/third_party/mbedtls/test/test_suite_memory_buffer_alloc.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_memory_buffer_alloc.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_memory_buffer_alloc.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_memory_buffer_alloc.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_mpi.com: o/$(MODE)/third_party/mbedtls/test/test_suite_mpi.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_mpi.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_mpi.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_mpi.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/hash_file_3.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/hash_file_4.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/mpi_10.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/mpi_too_big.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/mpi_write.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_net.com: o/$(MODE)/third_party/mbedtls/test/test_suite_net.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_net.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_net.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_net.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_nist_kw.com: o/$(MODE)/third_party/mbedtls/test/test_suite_nist_kw.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_nist_kw.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_nist_kw.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_nist_kw.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_oid.com: o/$(MODE)/third_party/mbedtls/test/test_suite_oid.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_oid.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_oid.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_oid.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_pem.com: o/$(MODE)/third_party/mbedtls/test/test_suite_pem.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_pem.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pem.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pem.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_pk.com: o/$(MODE)/third_party/mbedtls/test/test_suite_pk.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_pk.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pk.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pk.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_256_prv.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_256_pub.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.pubkey.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server2.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs1_v15.com: o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs1_v15.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs1_v15.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs1_v15.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs1_v15.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs1_v21.com: o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs1_v21.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs1_v21.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs1_v21.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs1_v21.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs5.com: o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs5.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs5.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs5.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pkcs5.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_pkparse.com: o/$(MODE)/third_party/mbedtls/test/test_suite_pkparse.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_pkparse.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pkparse.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pkparse.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_224_prv.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_224_pub.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_256_prv.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_256_pub.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_384_prv.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_384_pub.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_521_prv.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_521_pub.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_bp256_prv.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_bp256_pub.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_bp384_prv.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_bp384_pub.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_bp512_prv.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_bp512_pub.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_prv.pk8.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_prv.pk8.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_prv.pk8.pw.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_prv.pk8.pw.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_prv.pk8nopub.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_prv.pk8nopub.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_prv.pk8nopubparam.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_prv.pk8nopubparam.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_prv.pk8param.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_prv.pk8param.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_prv.sec1.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_prv.sec1.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_prv.sec1.pw.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_prv.specdom.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_pub.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_pub.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/format_gen.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_1024_3des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_1024_aes128.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_1024_aes192.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_1024_aes256.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_1024_des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_2048_3des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_2048_aes128.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_2048_aes192.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_2048_aes256.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_2048_des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_2048_public.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_2048_public.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_4096_3des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_4096_aes128.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_4096_aes192.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_4096_aes256.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs1_4096_des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_2048_public.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_2048_public.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_2des.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_2des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_3des.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_3des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_rc4_128.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_rc4_128.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_2des.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_2des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_3des.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_3des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_rc4_128.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_rc4_128.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_2des.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_2des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_3des.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_3des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_rc4_128.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_rc4_128.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_pkwrite.com: o/$(MODE)/third_party/mbedtls/test/test_suite_pkwrite.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_pkwrite.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pkwrite.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_pkwrite.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_256_long_prv.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_521_prv.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_521_pub.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_521_short_prv.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_bp512_prv.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_bp512_pub.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_prv.sec1.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/ec_pub.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa4096_prv.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/rsa4096_pub.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.pubkey.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_poly1305.com: o/$(MODE)/third_party/mbedtls/test/test_suite_poly1305.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_poly1305.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_poly1305.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_poly1305.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_random.com: o/$(MODE)/third_party/mbedtls/test/test_suite_random.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_random.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_random.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_random.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_rsa.com: o/$(MODE)/third_party/mbedtls/test/test_suite_rsa.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_rsa.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_rsa.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_rsa.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_shax.com: o/$(MODE)/third_party/mbedtls/test/test_suite_shax.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_shax.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_shax.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_shax.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_ssl.com: o/$(MODE)/third_party/mbedtls/test/test_suite_ssl.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_ssl.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ssl.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_ssl.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_timing.com: o/$(MODE)/third_party/mbedtls/test/test_suite_timing.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_timing.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_timing.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_timing.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_version.com: o/$(MODE)/third_party/mbedtls/test/test_suite_version.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_version.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_version.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_version.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_x509parse.com: o/$(MODE)/third_party/mbedtls/test/test_suite_x509parse.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_x509parse.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_x509parse.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_x509parse.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/bitstring-in-dn.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/cert_example_multi.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/cert_example_multi_nocn.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/cert_example_wildcard.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/cert_md2.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/cert_md4.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/cert_md5.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/cert_sha1.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/cert_sha224.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/cert_sha256.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/cert_sha384.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/cert_sha512.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/cert_v1_with_ext.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/cli-rsa-sha256-badalg.crt.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-ec-sha1.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-ec-sha224.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-ec-sha256.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-ec-sha384.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-ec-sha512.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-future.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-futureRevocationDate.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-idp.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-idpnc.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-malformed-trailing-spaces.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-rsa-pss-sha1-badsign.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-rsa-pss-sha1.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-rsa-pss-sha224.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-rsa-pss-sha256.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-rsa-pss-sha384.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl-rsa-pss-sha512.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl_cat_ec-rsa.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl_cat_ecfut-rsa.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl_cat_rsa-ec.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl_expired.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl_md2.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl_md4.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl_md5.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl_sha1.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl_sha224.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl_sha256.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl_sha384.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/crl_sha512.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/00.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/00.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/01.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/01.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/02.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/02.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/03.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/03.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/04.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/04.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/05.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/05.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/06.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/06.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/07.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/07.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/08.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/08.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/09.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/09.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/10.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/10.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/11.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/11.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/12.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/12.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/13.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/13.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/14.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/14.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/15.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/15.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/16.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/16.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/17.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/17.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/18.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/18.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/19.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/19.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/20.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/20.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/Readme.txt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c00.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c01.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c02.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c03.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c04.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c05.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c06.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c07.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c08.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c09.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c10.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c11.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c12.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c13.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c14.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c15.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c16.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c17.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c18.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c19.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/c20.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/int.opensslconf.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir-maxpath/long.sh.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir1/test-ca.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir2/test-ca.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir2/test-ca2.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir3/Readme.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir3/test-ca.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir3/test-ca2.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert11.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert12.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert13.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert14.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert21.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert22.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert23.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert31.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert32.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert33.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert34.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert41.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert42.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert43.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert44.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert45.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert51.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert52.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert53.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert54.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert61.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert62.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert63.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert71.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert72.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert73.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert74.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert81.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert82.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert83.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert91.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/dir4/cert92.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/enco-ca-prstr.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/enco-cert-utf8str.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/keyUsage.decipherOnly.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/multiple_san.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/non-ascii-string-in-issuer.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1-ms.req.sha256.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1-v1.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.cert_type.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.crt.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.ext_ku.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.key_usage.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.md4.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.md5.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.sha1.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.sha224.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.sha256.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.sha384.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.sha512.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server10-bs_int3.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server10_int3-bs.pem.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server10_int3_int-ca2.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server10_int3_int-ca2_ca.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server10_int3_spurious_int-ca2.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1_ca.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1_pathlen_int_max-1.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1_pathlen_int_max.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server2-badsign.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server2-v1-chain.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server2-v1.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server2.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server2.crt.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server3.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server4.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5-badsign.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5-expired.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5-fan.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5-future.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5-othername.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5-selfsigned.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5-sha1.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5-sha224.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5-sha384.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5-sha512.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5-ss-expired.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5-ss-forgeca.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5-tricky-ip-san.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5-unsupported_othername.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5.eku-cli.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5.eku-cs_any.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5.eku-srv.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5.eku-srv_cli.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5.req.sha1.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5.req.sha224.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5.req.sha256.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5.req.sha384.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5.req.sha512.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server6-ss-child.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server6.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server7-badsign.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server7-expired.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server7-future.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server7.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server7_all_space.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server7_int-ca-exp.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server7_int-ca.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server7_int-ca_ca2.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server7_pem_space.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server7_spurious_int-ca.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server7_trailing_space.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server8.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server8_int-ca2.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server9-bad-mgfhash.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server9-bad-saltlen.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server9-badsign.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server9-defaults.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server9-sha224.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server9-sha256.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server9-sha384.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server9-sha512.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server9-with-ca.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server9.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server9.req.sha1.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server9.req.sha224.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server9.req.sha256.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server9.req.sha384.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server9.req.sha512.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca-alt-good.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca-any_policy.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca-any_policy_ec.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca-any_policy_with_qualifier.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca-any_policy_with_qualifier_ec.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca-good-alt.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca-multi_policy.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca-multi_policy_ec.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca-unsupported_policy.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca-unsupported_policy_ec.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca-v1.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca.crt.der.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca2-expired.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca2.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca2.ku-crl.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca2.ku-crt.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca2.ku-crt_crl.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca2.ku-ds.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca2_cat-future-invalid.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca2_cat-future-present.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca2_cat-past-invalid.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca2_cat-past-present.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca2_cat-present-future.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca2_cat-present-past.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca_cat12.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca_cat21.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca_printable.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca_uppercase.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca_utf8.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-int-ca.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-int-ca2.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-int-ca3.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/third_party/mbedtls/test/test_suite_x509write.com: o/$(MODE)/third_party/mbedtls/test/test_suite_x509write.com.dbg +o/$(MODE)/third_party/mbedtls/test/test_suite_x509write.com.dbg: \ + $(THIRD_PARTY_MBEDTLS_TEST_DEPS) \ + o/$(MODE)/third_party/mbedtls/test/lib.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_x509write.o \ + o/$(MODE)/third_party/mbedtls/test/test_suite_x509write.datax.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.ca.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.ca_noauthid.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.cert_type.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.cert_type_noauthid.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.key_usage.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.key_usage_noauthid.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.noauthid.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.cert_type.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.cert_type_empty.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.key_usage.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.key_usage_empty.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.ku-ct.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.md4.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.md5.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.sha1.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.sha224.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.sha256.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.sha384.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.req.sha512.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server1.v1.crt.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/server5.req.ku.sha1.zip.o \ + o/$(MODE)/third_party/mbedtls/test/data/test-ca.key.zip.o \ + o/$(MODE)/third_party/mbedtls/test/test.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) diff --git a/third_party/mbedtls/test/test_suite_aes.cbc.c b/third_party/mbedtls/test/test_suite_aes.cbc.c new file mode 100644 index 000000000..a28806fc7 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_aes.cbc.c @@ -0,0 +1,1109 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "libc/log/log.h" +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_aes.cbc.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_aes.function + * Test suite data : suites/test_suite_aes.cbc.data + * + */ + +/*----------------------------------------------------------------------------*/ +/* Test Suite Code */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +void test_aes_encrypt_ecb( data_t * key_str, data_t * src_str, + data_t * dst, int setkey_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); + if( setkey_result == 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_ENCRYPT, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_aes_encrypt_ecb( &data0, &data2, &data4, *( (int *) params[6] ) ); +} +void test_aes_decrypt_ecb( data_t * key_str, data_t * src_str, + data_t * dst, int setkey_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_setkey_dec( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); + if( setkey_result == 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_DECRYPT, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_aes_decrypt_ecb( &data0, &data2, &data4, *( (int *) params[6] ) ); +} + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_aes_encrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, + int cbc_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_aes_decrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, + int cbc_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + mbedtls_aes_setkey_dec( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_encrypt_xts( char *hex_key_string, char *hex_data_unit_string, + char *hex_src_string, char *hex_dst_string ) +{ + enum { AES_BLOCK_SIZE = 16 }; + unsigned char *data_unit = NULL; + unsigned char *key = NULL; + unsigned char *src = NULL; + unsigned char *dst = NULL; + unsigned char *output = NULL; + mbedtls_aes_xts_context ctx; + size_t key_len, src_len, dst_len, data_unit_len; + + mbedtls_aes_xts_init( &ctx ); + + data_unit = mbedtls_test_unhexify_alloc( hex_data_unit_string, + &data_unit_len ); + TEST_ASSERT( data_unit_len == AES_BLOCK_SIZE ); + + key = mbedtls_test_unhexify_alloc( hex_key_string, &key_len ); + TEST_ASSERT( key_len % 2 == 0 ); + + src = mbedtls_test_unhexify_alloc( hex_src_string, &src_len ); + dst = mbedtls_test_unhexify_alloc( hex_dst_string, &dst_len ); + TEST_ASSERT( src_len == dst_len ); + + output = mbedtls_test_zero_alloc( dst_len ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_enc( &ctx, key, key_len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, src_len, + data_unit, src, output ) == 0 ); + + TEST_ASSERT( memcmp( output, dst, dst_len ) == 0 ); + +exit: + mbedtls_aes_xts_free( &ctx ); + mbedtls_free( data_unit ); + mbedtls_free( key ); + mbedtls_free( src ); + mbedtls_free( dst ); + mbedtls_free( output ); +} + +void test_aes_encrypt_xts_wrapper( void ** params ) +{ + + test_aes_encrypt_xts( (char *) params[0], (char *) params[1], (char *) params[2], (char *) params[3] ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_decrypt_xts( char *hex_key_string, char *hex_data_unit_string, + char *hex_dst_string, char *hex_src_string ) +{ + enum { AES_BLOCK_SIZE = 16 }; + unsigned char *data_unit = NULL; + unsigned char *key = NULL; + unsigned char *src = NULL; + unsigned char *dst = NULL; + unsigned char *output = NULL; + mbedtls_aes_xts_context ctx; + size_t key_len, src_len, dst_len, data_unit_len; + + mbedtls_aes_xts_init( &ctx ); + + data_unit = mbedtls_test_unhexify_alloc( hex_data_unit_string, + &data_unit_len ); + TEST_ASSERT( data_unit_len == AES_BLOCK_SIZE ); + + key = mbedtls_test_unhexify_alloc( hex_key_string, &key_len ); + TEST_ASSERT( key_len % 2 == 0 ); + + src = mbedtls_test_unhexify_alloc( hex_src_string, &src_len ); + dst = mbedtls_test_unhexify_alloc( hex_dst_string, &dst_len ); + TEST_ASSERT( src_len == dst_len ); + + output = mbedtls_test_zero_alloc( dst_len ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_dec( &ctx, key, key_len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_DECRYPT, src_len, + data_unit, src, output ) == 0 ); + + TEST_ASSERT( memcmp( output, dst, dst_len ) == 0 ); + +exit: + mbedtls_aes_xts_free( &ctx ); + mbedtls_free( data_unit ); + mbedtls_free( key ); + mbedtls_free( src ); + mbedtls_free( dst ); + mbedtls_free( output ); +} + +void test_aes_decrypt_xts_wrapper( void ** params ) +{ + + test_aes_decrypt_xts( (char *) params[0], (char *) params[1], (char *) params[2], (char *) params[3] ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_crypt_xts_size( int size, int retval ) +{ + mbedtls_aes_xts_context ctx; + const unsigned char src[16] = { 0 }; + unsigned char output[16]; + unsigned char data_unit[16]; + size_t length = size; + + mbedtls_aes_xts_init( &ctx ); + memset( data_unit, 0x00, sizeof( data_unit ) ); + + + /* Valid pointers are passed for builds with MBEDTLS_CHECK_PARAMS, as + * otherwise we wouldn't get to the size check we're interested in. */ + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, length, data_unit, src, output ) == retval ); +exit: + ; +} + +void test_aes_crypt_xts_size_wrapper( void ** params ) +{ + + test_aes_crypt_xts_size( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_crypt_xts_keysize( int size, int retval ) +{ + mbedtls_aes_xts_context ctx; + const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + size_t key_len = size; + + mbedtls_aes_xts_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_enc( &ctx, key, key_len * 8 ) == retval ); + TEST_ASSERT( mbedtls_aes_xts_setkey_dec( &ctx, key, key_len * 8 ) == retval ); +exit: + mbedtls_aes_xts_free( &ctx ); +} + +void test_aes_crypt_xts_keysize_wrapper( void ** params ) +{ + + test_aes_crypt_xts_keysize( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_encrypt_cfb128( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_ENCRYPT, 16, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cfb128_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cfb128( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_decrypt_cfb128( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_DECRYPT, 16, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cfb128_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cfb128( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_encrypt_cfb8( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cfb8_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cfb8( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ + +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_decrypt_cfb8( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cfb8_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cfb8( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ + +#if defined(MBEDTLS_CIPHER_MODE_OFB) +void test_aes_encrypt_ofb( int fragment_size, data_t *key_str, + data_t *iv_str, data_t *src_str, + data_t *expected_output ) +{ + unsigned char output[32]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + int in_buffer_len; + unsigned char* src_str_next; + + memset( output, 0x00, sizeof( output ) ); + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( (size_t)fragment_size < sizeof( output ) ); + + TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str->x, + key_str->len * 8 ) == 0 ); + in_buffer_len = src_str->len; + src_str_next = src_str->x; + + while( in_buffer_len > 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ofb( &ctx, fragment_size, &iv_offset, + iv_str->x, src_str_next, output ) == 0 ); + + TEST_ASSERT( memcmp( output, expected_output->x, fragment_size ) == 0 ); + + in_buffer_len -= fragment_size; + expected_output->x += fragment_size; + src_str_next += fragment_size; + + if( in_buffer_len < fragment_size ) + fragment_size = in_buffer_len; + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_ofb_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + + test_aes_encrypt_ofb( *( (int *) params[0] ), &data1, &data3, &data5, &data7 ); +} +#endif /* MBEDTLS_CIPHER_MODE_OFB */ + +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_aes_check_params( ) +{ + mbedtls_aes_context aes_ctx; +#if defined(MBEDTLS_CIPHER_MODE_XTS) + mbedtls_aes_xts_context xts_ctx; +#endif + const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const unsigned char in[16] = { 0 }; + unsigned char out[16]; + size_t size; + const int valid_mode = MBEDTLS_AES_ENCRYPT; + const int invalid_mode = 42; + + TEST_INVALID_PARAM( mbedtls_aes_init( NULL ) ); +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM( mbedtls_aes_xts_init( NULL ) ); +#endif + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_enc( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_enc( &aes_ctx, NULL, 128 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_dec( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_dec( &aes_ctx, NULL, 128 ) ); + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_enc( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_enc( &xts_ctx, NULL, 128 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_dec( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_dec( &xts_ctx, NULL, 128 ) ); +#endif + + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( NULL, + valid_mode, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + invalid_mode, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + valid_mode, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + valid_mode, in, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( NULL, + valid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + invalid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( NULL, + valid_mode, 16, + in, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + invalid_mode, 16, + in, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + in, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + in, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_XTS */ + +#if defined(MBEDTLS_CIPHER_MODE_CFB) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( NULL, + valid_mode, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + invalid_mode, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + NULL, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, out, in, NULL ) ); + + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( NULL, + valid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + invalid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CFB */ + +#if defined(MBEDTLS_CIPHER_MODE_OFB) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( NULL, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + NULL, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_OFB */ + +#if defined(MBEDTLS_CIPHER_MODE_CTR) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( NULL, 16, &size, out, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, NULL, out, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, NULL, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CTR */ +exit: + ; +} + +void test_aes_check_params_wrapper( void ** params ) +{ + (void)params; + + test_aes_check_params( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_aes_misc_params( ) +{ +#if defined(MBEDTLS_CIPHER_MODE_CBC) || \ + defined(MBEDTLS_CIPHER_MODE_XTS) || \ + defined(MBEDTLS_CIPHER_MODE_CFB) || \ + defined(MBEDTLS_CIPHER_MODE_OFB) + mbedtls_aes_context aes_ctx; + const unsigned char in[16] = { 0 }; + unsigned char out[16]; +#endif +#if defined(MBEDTLS_CIPHER_MODE_XTS) + mbedtls_aes_xts_context xts_ctx; +#endif +#if defined(MBEDTLS_CIPHER_MODE_CFB) || \ + defined(MBEDTLS_CIPHER_MODE_OFB) + size_t size; +#endif + + /* These calls accept NULL */ + TEST_VALID_PARAM( mbedtls_aes_free( NULL ) ); +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_VALID_PARAM( mbedtls_aes_xts_free( NULL ) ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT, + 15, + out, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT, + 17, + out, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_ASSERT( mbedtls_aes_crypt_xts( &xts_ctx, MBEDTLS_AES_ENCRYPT, + 15, + in, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &xts_ctx, MBEDTLS_AES_ENCRYPT, + (1 << 24) + 1, + in, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CFB) + size = 16; + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &aes_ctx, MBEDTLS_AES_ENCRYPT, 16, + &size, out, in, out ) + == MBEDTLS_ERR_AES_BAD_INPUT_DATA ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_OFB) + size = 16; + TEST_ASSERT( mbedtls_aes_crypt_ofb( &aes_ctx, 16, &size, out, in, out ) + == MBEDTLS_ERR_AES_BAD_INPUT_DATA ); +#endif +exit: + ; +} + +void test_aes_misc_params_wrapper( void ** params ) +{ + (void)params; + + test_aes_misc_params( ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_aes_selftest( ) +{ + TEST_ASSERT( mbedtls_aes_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_aes_selftest_wrapper( void ** params ) +{ + (void)params; + + test_aes_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_AES_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_AES_C) + +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_AES_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_AES_C) + test_aes_encrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_AES_C) + test_aes_decrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_aes_encrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_aes_decrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_encrypt_xts_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_decrypt_xts_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_crypt_xts_size_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_crypt_xts_keysize_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_encrypt_cfb128_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_decrypt_cfb128_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_encrypt_cfb8_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_decrypt_cfb8_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_OFB) + test_aes_encrypt_ofb_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_aes_check_params_wrapper, +#else + NULL, +#endif +/* Function Id: 14 */ + +#if defined(MBEDTLS_AES_C) + test_aes_misc_params_wrapper, +#else + NULL, +#endif +/* Function Id: 15 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_SELF_TEST) + test_aes_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_aes.cbc.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_aes.cbc.datax b/third_party/mbedtls/test/test_suite_aes.cbc.datax new file mode 100644 index 000000000..542fa0ee7 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_aes.cbc.datax @@ -0,0 +1,216 @@ +AES-128-CBC Encrypt NIST KAT #1 +2:hex:"fffffffffffff8000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"8b527a6aebdaec9eaef8eda2cb7783e5":int:0 + +AES-128-CBC Encrypt NIST KAT #2 +2:hex:"fffffffffffffc000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"43fdaf53ebbc9880c228617d6a9b548b":int:0 + +AES-128-CBC Encrypt NIST KAT #3 +2:hex:"fffffffffffffe000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"53786104b9744b98f052c46f1c850d0b":int:0 + +AES-128-CBC Encrypt NIST KAT #4 +2:hex:"e37b1c6aa2846f6fdb413f238b089f23":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"43c9f7e62f5d288bb27aa40ef8fe1ea8":int:0 + +AES-128-CBC Encrypt NIST KAT #5 +2:hex:"6c002b682483e0cabcc731c253be5674":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"3580d19cff44f1014a7c966a69059de5":int:0 + +AES-128-CBC Encrypt NIST KAT #6 +2:hex:"143ae8ed6555aba96110ab58893a8ae1":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"806da864dd29d48deafbe764f8202aef":int:0 + +AES-128-CBC Encrypt NIST KAT #7 +2:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"6a118a874519e64e9963798a503f1d35":hex:"dc43be40be0e53712f7e2bf5ca707209":int:0 + +AES-128-CBC Encrypt NIST KAT #8 +2:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"cb9fceec81286ca3e989bd979b0cb284":hex:"92beedab1895a94faa69b632e5cc47ce":int:0 + +AES-128-CBC Encrypt NIST KAT #9 +2:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"b26aeb1874e47ca8358ff22378f09144":hex:"459264f4798f6a78bacb89c15ed3d601":int:0 + +AES-128-CBC Encrypt NIST KAT #10 +2:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"ffffffffffffffffffffffc000000000":hex:"90684a2ac55fe1ec2b8ebd5622520b73":int:0 + +AES-128-CBC Encrypt NIST KAT #11 +2:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"ffffffffffffffffffffffe000000000":hex:"7472f9a7988607ca79707795991035e6":int:0 + +AES-128-CBC Encrypt NIST KAT #12 +2:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"fffffffffffffffffffffff000000000":hex:"56aff089878bf3352f8df172a3ae47d8":int:0 + +AES-128-CBC Decrypt NIST KAT #1 +3:hex:"ffffffffe00000000000000000000000":hex:"00000000000000000000000000000000":hex:"23f710842b9bb9c32f26648c786807ca":hex:"00000000000000000000000000000000":int:0 + +AES-128-CBC Decrypt NIST KAT #2 +3:hex:"fffffffff00000000000000000000000":hex:"00000000000000000000000000000000":hex:"44a98bf11e163f632c47ec6a49683a89":hex:"00000000000000000000000000000000":int:0 + +AES-128-CBC Decrypt NIST KAT #3 +3:hex:"fffffffff80000000000000000000000":hex:"00000000000000000000000000000000":hex:"0f18aff94274696d9b61848bd50ac5e5":hex:"00000000000000000000000000000000":int:0 + +AES-128-CBC Decrypt NIST KAT #4 +3:hex:"e234cdca2606b81f29408d5f6da21206":hex:"00000000000000000000000000000000":hex:"fff60a4740086b3b9c56195b98d91a7b":hex:"00000000000000000000000000000000":int:0 + +AES-128-CBC Decrypt NIST KAT #5 +3:hex:"13237c49074a3da078dc1d828bb78c6f":hex:"00000000000000000000000000000000":hex:"8146a08e2357f0caa30ca8c94d1a0544":hex:"00000000000000000000000000000000":int:0 + +AES-128-CBC Decrypt NIST KAT #6 +3:hex:"3071a2a48fe6cbd04f1a129098e308f8":hex:"00000000000000000000000000000000":hex:"4b98e06d356deb07ebb824e5713f7be3":hex:"00000000000000000000000000000000":int:0 + +AES-128-CBC Decrypt NIST KAT #7 +3:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"0336763e966d92595a567cc9ce537f5e":hex:"f34481ec3cc627bacd5dc3fb08f273e6":int:0 + +AES-128-CBC Decrypt NIST KAT #8 +3:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"a9a1631bf4996954ebc093957b234589":hex:"9798c4640bad75c7c3227db910174e72":int:0 + +AES-128-CBC Decrypt NIST KAT #9 +3:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"ff4f8391a6a40ca5b25d23bedd44a597":hex:"96ab5c2ff612d9dfaae8c31f30c42168":int:0 + +AES-128-CBC Decrypt NIST KAT #10 +3:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"f9b0fda0c4a898f5b9e6f661c4ce4d07":hex:"fffffffffffffffffffffffffffffff0":int:0 + +AES-128-CBC Decrypt NIST KAT #11 +3:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"8ade895913685c67c5269f8aae42983e":hex:"fffffffffffffffffffffffffffffff8":int:0 + +AES-128-CBC Decrypt NIST KAT #12 +3:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"39bde67d5c8ed8a8b1c37eb8fa9f5ac0":hex:"fffffffffffffffffffffffffffffffc":int:0 + +AES-192-CBC Encrypt NIST KAT #1 +2:hex:"fffffffffffffffffffffffffffffffffffffffffffffe00":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"ddb505e6cc1384cbaec1df90b80beb20":int:0 + +AES-192-CBC Encrypt NIST KAT #2 +2:hex:"ffffffffffffffffffffffffffffffffffffffffffffff00":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"5674a3bed27bf4bd3622f9f5fe208306":int:0 + +AES-192-CBC Encrypt NIST KAT #3 +2:hex:"ffffffffffffffffffffffffffffffffffffffffffffff80":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"b687f26a89cfbfbb8e5eeac54055315e":int:0 + +AES-192-CBC Encrypt NIST KAT #4 +2:hex:"25a39dbfd8034f71a81f9ceb55026e4037f8f6aa30ab44ce":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"3608c344868e94555d23a120f8a5502d":int:0 + +AES-192-CBC Encrypt NIST KAT #5 +2:hex:"e08c15411774ec4a908b64eadc6ac4199c7cd453f3aaef53":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"77da2021935b840b7f5dcc39132da9e5":int:0 + +AES-192-CBC Encrypt NIST KAT #6 +2:hex:"3b375a1ff7e8d44409696e6326ec9dec86138e2ae010b980":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"3b7c24f825e3bf9873c9f14d39a0e6f4":int:0 + +AES-192-CBC Encrypt NIST KAT #7 +2:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"51719783d3185a535bd75adc65071ce1":hex:"4f354592ff7c8847d2d0870ca9481b7c":int:0 + +AES-192-CBC Encrypt NIST KAT #8 +2:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"26aa49dcfe7629a8901a69a9914e6dfd":hex:"d5e08bf9a182e857cf40b3a36ee248cc":int:0 + +AES-192-CBC Encrypt NIST KAT #9 +2:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"941a4773058224e1ef66d10e0a6ee782":hex:"067cd9d3749207791841562507fa9626":int:0 + +AES-192-CBC Encrypt NIST KAT #10 +2:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"ffc00000000000000000000000000000":hex:"030d7e5b64f380a7e4ea5387b5cd7f49":int:0 + +AES-192-CBC Encrypt NIST KAT #11 +2:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"ffe00000000000000000000000000000":hex:"0dc9a2610037009b698f11bb7e86c83e":int:0 + +AES-192-CBC Encrypt NIST KAT #12 +2:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"fff00000000000000000000000000000":hex:"0046612c766d1840c226364f1fa7ed72":int:0 + +AES-192-CBC Decrypt NIST KAT #1 +3:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"902d88d13eae52089abd6143cfe394e9":hex:"ffffffffe00000000000000000000000":int:0 + +AES-192-CBC Decrypt NIST KAT #2 +3:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"d49bceb3b823fedd602c305345734bd2":hex:"fffffffff00000000000000000000000":int:0 + +AES-192-CBC Decrypt NIST KAT #3 +3:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"707b1dbb0ffa40ef7d95def421233fae":hex:"fffffffff80000000000000000000000":int:0 + +AES-192-CBC Decrypt NIST KAT #4 +3:hex:"fffffffffffffffffffc0000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"8dfd999be5d0cfa35732c0ddc88ff5a5":hex:"00000000000000000000000000000000":int:0 + +AES-192-CBC Decrypt NIST KAT #5 +3:hex:"fffffffffffffffffffe0000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"02647c76a300c3173b841487eb2bae9f":hex:"00000000000000000000000000000000":int:0 + +AES-192-CBC Decrypt NIST KAT #6 +3:hex:"ffffffffffffffffffff0000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"172df8b02f04b53adab028b4e01acd87":hex:"00000000000000000000000000000000":int:0 + +AES-192-CBC Decrypt NIST KAT #7 +3:hex:"b3ad5cea1dddc214ca969ac35f37dae1a9a9d1528f89bb35":hex:"00000000000000000000000000000000":hex:"3cf5e1d21a17956d1dffad6a7c41c659":hex:"00000000000000000000000000000000":int:0 + +AES-192-CBC Decrypt NIST KAT #8 +3:hex:"45899367c3132849763073c435a9288a766c8b9ec2308516":hex:"00000000000000000000000000000000":hex:"69fd12e8505f8ded2fdcb197a121b362":hex:"00000000000000000000000000000000":int:0 + +AES-192-CBC Decrypt NIST KAT #9 +3:hex:"ec250e04c3903f602647b85a401a1ae7ca2f02f67fa4253e":hex:"00000000000000000000000000000000":hex:"8aa584e2cc4d17417a97cb9a28ba29c8":hex:"00000000000000000000000000000000":int:0 + +AES-192-CBC Decrypt NIST KAT #10 +3:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"c9b8135ff1b5adc413dfd053b21bd96d":hex:"9c2d8842e5f48f57648205d39a239af1":int:0 + +AES-192-CBC Decrypt NIST KAT #11 +3:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"4a3650c3371ce2eb35e389a171427440":hex:"bff52510095f518ecca60af4205444bb":int:0 + +AES-192-CBC Decrypt NIST KAT #12 +3:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"4f354592ff7c8847d2d0870ca9481b7c":hex:"51719783d3185a535bd75adc65071ce1":int:0 + +AES-256-CBC Encrypt NIST KAT #1 +2:hex:"8000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"e35a6dcb19b201a01ebcfa8aa22b5759":int:0 + +AES-256-CBC Encrypt NIST KAT #2 +2:hex:"c000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"b29169cdcf2d83e838125a12ee6aa400":int:0 + +AES-256-CBC Encrypt NIST KAT #3 +2:hex:"e000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"d8f3a72fc3cdf74dfaf6c3e6b97b2fa6":int:0 + +AES-256-CBC Encrypt NIST KAT #4 +2:hex:"dc0eba1f2232a7879ded34ed8428eeb8769b056bbaf8ad77cb65c3541430b4cf":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"fc6aec906323480005c58e7e1ab004ad":int:0 + +AES-256-CBC Encrypt NIST KAT #5 +2:hex:"f8be9ba615c5a952cabbca24f68f8593039624d524c816acda2c9183bd917cb9":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"a3944b95ca0b52043584ef02151926a8":int:0 + +AES-256-CBC Encrypt NIST KAT #6 +2:hex:"797f8b3d176dac5b7e34a2d539c4ef367a16f8635f6264737591c5c07bf57a3e":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"a74289fe73a4c123ca189ea1e1b49ad5":int:0 + +AES-256-CBC Encrypt NIST KAT #7 +2:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"761c1fe41a18acf20d241650611d90f1":hex:"623a52fcea5d443e48d9181ab32c7421":int:0 + +AES-256-CBC Encrypt NIST KAT #8 +2:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"8a560769d605868ad80d819bdba03771":hex:"38f2c7ae10612415d27ca190d27da8b4":int:0 + +AES-256-CBC Encrypt NIST KAT #9 +2:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"91fbef2d15a97816060bee1feaa49afe":hex:"1bc704f1bce135ceb810341b216d7abe":int:0 + +AES-256-CBC Encrypt NIST KAT #10 +2:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"ffffffffffffff800000000000000000":hex:"0d9ac756eb297695eed4d382eb126d26":int:0 + +AES-256-CBC Encrypt NIST KAT #11 +2:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"ffffffffffffffc00000000000000000":hex:"56ede9dda3f6f141bff1757fa689c3e1":int:0 + +AES-256-CBC Encrypt NIST KAT #12 +2:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"ffffffffffffffe00000000000000000":hex:"768f520efe0f23e61d3ec8ad9ce91774":int:0 + +AES-256-CBC Decrypt NIST KAT #1 +3:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"49af6b372135acef10132e548f217b17":hex:"ff000000000000000000000000000000":int:0 + +AES-256-CBC Decrypt NIST KAT #2 +3:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"8bcd40f94ebb63b9f7909676e667f1e7":hex:"ff800000000000000000000000000000":int:0 + +AES-256-CBC Decrypt NIST KAT #3 +3:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"fe1cffb83f45dcfb38b29be438dbd3ab":hex:"ffc00000000000000000000000000000":int:0 + +AES-256-CBC Decrypt NIST KAT #4 +3:hex:"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00":hex:"00000000000000000000000000000000":hex:"cca7c3086f5f9511b31233da7cab9160":hex:"00000000000000000000000000000000":int:0 + +AES-256-CBC Decrypt NIST KAT #5 +3:hex:"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00":hex:"00000000000000000000000000000000":hex:"5b40ff4ec9be536ba23035fa4f06064c":hex:"00000000000000000000000000000000":int:0 + +AES-256-CBC Decrypt NIST KAT #6 +3:hex:"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00":hex:"00000000000000000000000000000000":hex:"60eb5af8416b257149372194e8b88749":hex:"00000000000000000000000000000000":int:0 + +AES-256-CBC Decrypt NIST KAT #7 +3:hex:"90143ae20cd78c5d8ebdd6cb9dc1762427a96c78c639bccc41a61424564eafe1":hex:"00000000000000000000000000000000":hex:"798c7c005dee432b2c8ea5dfa381ecc3":hex:"00000000000000000000000000000000":int:0 + +AES-256-CBC Decrypt NIST KAT #8 +3:hex:"b7a5794d52737475d53d5a377200849be0260a67a2b22ced8bbef12882270d07":hex:"00000000000000000000000000000000":hex:"637c31dc2591a07636f646b72daabbe7":hex:"00000000000000000000000000000000":int:0 + +AES-256-CBC Decrypt NIST KAT #9 +3:hex:"fca02f3d5011cfc5c1e23165d413a049d4526a991827424d896fe3435e0bf68e":hex:"00000000000000000000000000000000":hex:"179a49c712154bbffbe6e7a84a18e220":hex:"00000000000000000000000000000000":int:0 + +AES-256-CBC Decrypt NIST KAT #10 +3:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"5c9d844ed46f9885085e5d6a4f94c7d7":hex:"014730f80ac625fe84f026c60bfd547d":int:0 + +AES-256-CBC Decrypt NIST KAT #11 +3:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"a9ff75bd7cf6613d3731c77c3b6d0c04":hex:"0b24af36193ce4665f2825d7b4749c98":int:0 + +AES-256-CBC Decrypt NIST KAT #12 +3:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"623a52fcea5d443e48d9181ab32c7421":hex:"761c1fe41a18acf20d241650611d90f1":int:0 + diff --git a/third_party/mbedtls/test/test_suite_aes.cfb.c b/third_party/mbedtls/test/test_suite_aes.cfb.c new file mode 100644 index 000000000..157fa7fb6 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_aes.cfb.c @@ -0,0 +1,1108 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_aes.cfb.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_aes.function + * Test suite data : suites/test_suite_aes.cfb.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +void test_aes_encrypt_ecb( data_t * key_str, data_t * src_str, + data_t * dst, int setkey_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); + if( setkey_result == 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_ENCRYPT, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_aes_encrypt_ecb( &data0, &data2, &data4, *( (int *) params[6] ) ); +} +void test_aes_decrypt_ecb( data_t * key_str, data_t * src_str, + data_t * dst, int setkey_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_setkey_dec( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); + if( setkey_result == 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_DECRYPT, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_aes_decrypt_ecb( &data0, &data2, &data4, *( (int *) params[6] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_aes_encrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, + int cbc_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_aes_decrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, + int cbc_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + mbedtls_aes_setkey_dec( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_encrypt_xts( char *hex_key_string, char *hex_data_unit_string, + char *hex_src_string, char *hex_dst_string ) +{ + enum { AES_BLOCK_SIZE = 16 }; + unsigned char *data_unit = NULL; + unsigned char *key = NULL; + unsigned char *src = NULL; + unsigned char *dst = NULL; + unsigned char *output = NULL; + mbedtls_aes_xts_context ctx; + size_t key_len, src_len, dst_len, data_unit_len; + + mbedtls_aes_xts_init( &ctx ); + + data_unit = mbedtls_test_unhexify_alloc( hex_data_unit_string, + &data_unit_len ); + TEST_ASSERT( data_unit_len == AES_BLOCK_SIZE ); + + key = mbedtls_test_unhexify_alloc( hex_key_string, &key_len ); + TEST_ASSERT( key_len % 2 == 0 ); + + src = mbedtls_test_unhexify_alloc( hex_src_string, &src_len ); + dst = mbedtls_test_unhexify_alloc( hex_dst_string, &dst_len ); + TEST_ASSERT( src_len == dst_len ); + + output = mbedtls_test_zero_alloc( dst_len ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_enc( &ctx, key, key_len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, src_len, + data_unit, src, output ) == 0 ); + + TEST_ASSERT( memcmp( output, dst, dst_len ) == 0 ); + +exit: + mbedtls_aes_xts_free( &ctx ); + mbedtls_free( data_unit ); + mbedtls_free( key ); + mbedtls_free( src ); + mbedtls_free( dst ); + mbedtls_free( output ); +} + +void test_aes_encrypt_xts_wrapper( void ** params ) +{ + + test_aes_encrypt_xts( (char *) params[0], (char *) params[1], (char *) params[2], (char *) params[3] ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_decrypt_xts( char *hex_key_string, char *hex_data_unit_string, + char *hex_dst_string, char *hex_src_string ) +{ + enum { AES_BLOCK_SIZE = 16 }; + unsigned char *data_unit = NULL; + unsigned char *key = NULL; + unsigned char *src = NULL; + unsigned char *dst = NULL; + unsigned char *output = NULL; + mbedtls_aes_xts_context ctx; + size_t key_len, src_len, dst_len, data_unit_len; + + mbedtls_aes_xts_init( &ctx ); + + data_unit = mbedtls_test_unhexify_alloc( hex_data_unit_string, + &data_unit_len ); + TEST_ASSERT( data_unit_len == AES_BLOCK_SIZE ); + + key = mbedtls_test_unhexify_alloc( hex_key_string, &key_len ); + TEST_ASSERT( key_len % 2 == 0 ); + + src = mbedtls_test_unhexify_alloc( hex_src_string, &src_len ); + dst = mbedtls_test_unhexify_alloc( hex_dst_string, &dst_len ); + TEST_ASSERT( src_len == dst_len ); + + output = mbedtls_test_zero_alloc( dst_len ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_dec( &ctx, key, key_len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_DECRYPT, src_len, + data_unit, src, output ) == 0 ); + + TEST_ASSERT( memcmp( output, dst, dst_len ) == 0 ); + +exit: + mbedtls_aes_xts_free( &ctx ); + mbedtls_free( data_unit ); + mbedtls_free( key ); + mbedtls_free( src ); + mbedtls_free( dst ); + mbedtls_free( output ); +} + +void test_aes_decrypt_xts_wrapper( void ** params ) +{ + + test_aes_decrypt_xts( (char *) params[0], (char *) params[1], (char *) params[2], (char *) params[3] ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_crypt_xts_size( int size, int retval ) +{ + mbedtls_aes_xts_context ctx; + const unsigned char src[16] = { 0 }; + unsigned char output[16]; + unsigned char data_unit[16]; + size_t length = size; + + mbedtls_aes_xts_init( &ctx ); + memset( data_unit, 0x00, sizeof( data_unit ) ); + + + /* Valid pointers are passed for builds with MBEDTLS_CHECK_PARAMS, as + * otherwise we wouldn't get to the size check we're interested in. */ + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, length, data_unit, src, output ) == retval ); +exit: + ; +} + +void test_aes_crypt_xts_size_wrapper( void ** params ) +{ + + test_aes_crypt_xts_size( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_crypt_xts_keysize( int size, int retval ) +{ + mbedtls_aes_xts_context ctx; + const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + size_t key_len = size; + + mbedtls_aes_xts_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_enc( &ctx, key, key_len * 8 ) == retval ); + TEST_ASSERT( mbedtls_aes_xts_setkey_dec( &ctx, key, key_len * 8 ) == retval ); +exit: + mbedtls_aes_xts_free( &ctx ); +} + +void test_aes_crypt_xts_keysize_wrapper( void ** params ) +{ + + test_aes_crypt_xts_keysize( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_encrypt_cfb128( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_ENCRYPT, 16, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cfb128_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cfb128( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_decrypt_cfb128( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_DECRYPT, 16, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cfb128_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cfb128( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_encrypt_cfb8( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cfb8_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cfb8( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_decrypt_cfb8( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cfb8_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cfb8( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_OFB) +void test_aes_encrypt_ofb( int fragment_size, data_t *key_str, + data_t *iv_str, data_t *src_str, + data_t *expected_output ) +{ + unsigned char output[32]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + int in_buffer_len; + unsigned char* src_str_next; + + memset( output, 0x00, sizeof( output ) ); + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( (size_t)fragment_size < sizeof( output ) ); + + TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str->x, + key_str->len * 8 ) == 0 ); + in_buffer_len = src_str->len; + src_str_next = src_str->x; + + while( in_buffer_len > 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ofb( &ctx, fragment_size, &iv_offset, + iv_str->x, src_str_next, output ) == 0 ); + + TEST_ASSERT( memcmp( output, expected_output->x, fragment_size ) == 0 ); + + in_buffer_len -= fragment_size; + expected_output->x += fragment_size; + src_str_next += fragment_size; + + if( in_buffer_len < fragment_size ) + fragment_size = in_buffer_len; + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_ofb_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + + test_aes_encrypt_ofb( *( (int *) params[0] ), &data1, &data3, &data5, &data7 ); +} +#endif /* MBEDTLS_CIPHER_MODE_OFB */ +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_aes_check_params( ) +{ + mbedtls_aes_context aes_ctx; +#if defined(MBEDTLS_CIPHER_MODE_XTS) + mbedtls_aes_xts_context xts_ctx; +#endif + const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const unsigned char in[16] = { 0 }; + unsigned char out[16]; + size_t size; + const int valid_mode = MBEDTLS_AES_ENCRYPT; + const int invalid_mode = 42; + + TEST_INVALID_PARAM( mbedtls_aes_init( NULL ) ); +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM( mbedtls_aes_xts_init( NULL ) ); +#endif + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_enc( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_enc( &aes_ctx, NULL, 128 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_dec( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_dec( &aes_ctx, NULL, 128 ) ); + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_enc( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_enc( &xts_ctx, NULL, 128 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_dec( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_dec( &xts_ctx, NULL, 128 ) ); +#endif + + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( NULL, + valid_mode, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + invalid_mode, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + valid_mode, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + valid_mode, in, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( NULL, + valid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + invalid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( NULL, + valid_mode, 16, + in, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + invalid_mode, 16, + in, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + in, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + in, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_XTS */ + +#if defined(MBEDTLS_CIPHER_MODE_CFB) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( NULL, + valid_mode, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + invalid_mode, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + NULL, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, out, in, NULL ) ); + + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( NULL, + valid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + invalid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CFB */ + +#if defined(MBEDTLS_CIPHER_MODE_OFB) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( NULL, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + NULL, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_OFB */ + +#if defined(MBEDTLS_CIPHER_MODE_CTR) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( NULL, 16, &size, out, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, NULL, out, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, NULL, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CTR */ +exit: + ; +} + +void test_aes_check_params_wrapper( void ** params ) +{ + (void)params; + + test_aes_check_params( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_aes_misc_params( ) +{ +#if defined(MBEDTLS_CIPHER_MODE_CBC) || \ + defined(MBEDTLS_CIPHER_MODE_XTS) || \ + defined(MBEDTLS_CIPHER_MODE_CFB) || \ + defined(MBEDTLS_CIPHER_MODE_OFB) + mbedtls_aes_context aes_ctx; + const unsigned char in[16] = { 0 }; + unsigned char out[16]; +#endif +#if defined(MBEDTLS_CIPHER_MODE_XTS) + mbedtls_aes_xts_context xts_ctx; +#endif +#if defined(MBEDTLS_CIPHER_MODE_CFB) || \ + defined(MBEDTLS_CIPHER_MODE_OFB) + size_t size; +#endif + + /* These calls accept NULL */ + TEST_VALID_PARAM( mbedtls_aes_free( NULL ) ); +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_VALID_PARAM( mbedtls_aes_xts_free( NULL ) ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT, + 15, + out, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT, + 17, + out, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_ASSERT( mbedtls_aes_crypt_xts( &xts_ctx, MBEDTLS_AES_ENCRYPT, + 15, + in, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &xts_ctx, MBEDTLS_AES_ENCRYPT, + (1 << 24) + 1, + in, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CFB) + size = 16; + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &aes_ctx, MBEDTLS_AES_ENCRYPT, 16, + &size, out, in, out ) + == MBEDTLS_ERR_AES_BAD_INPUT_DATA ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_OFB) + size = 16; + TEST_ASSERT( mbedtls_aes_crypt_ofb( &aes_ctx, 16, &size, out, in, out ) + == MBEDTLS_ERR_AES_BAD_INPUT_DATA ); +#endif +exit: + ; +} + +void test_aes_misc_params_wrapper( void ** params ) +{ + (void)params; + + test_aes_misc_params( ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_aes_selftest( ) +{ + TEST_ASSERT( mbedtls_aes_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_aes_selftest_wrapper( void ** params ) +{ + (void)params; + + test_aes_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_AES_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_AES_C) + +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_AES_C) + + case 0: + { +#if defined(MBEDTLS_CIPHER_MODE_CFB) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_AES_C) + test_aes_encrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_AES_C) + test_aes_decrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_aes_encrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_aes_decrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_encrypt_xts_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_decrypt_xts_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_crypt_xts_size_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_crypt_xts_keysize_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_encrypt_cfb128_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_decrypt_cfb128_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_encrypt_cfb8_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_decrypt_cfb8_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_OFB) + test_aes_encrypt_ofb_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_aes_check_params_wrapper, +#else + NULL, +#endif +/* Function Id: 14 */ + +#if defined(MBEDTLS_AES_C) + test_aes_misc_params_wrapper, +#else + NULL, +#endif +/* Function Id: 15 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_SELF_TEST) + test_aes_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_aes.cfb.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_aes.cfb.datax b/third_party/mbedtls/test/test_suite_aes.cfb.datax new file mode 100644 index 000000000..fd2c2889d --- /dev/null +++ b/third_party/mbedtls/test/test_suite_aes.cfb.datax @@ -0,0 +1,468 @@ +AES-128-CFB128 Encrypt NIST KAT #1 +depends_on:0 +8:hex:"f0000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"970014d634e2b7650777e8e84d03ccd8" + +AES-128-CFB128 Encrypt NIST KAT #2 +depends_on:0 +8:hex:"f8000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"f17e79aed0db7e279e955b5f493875a7" + +AES-128-CFB128 Encrypt NIST KAT #3 +depends_on:0 +8:hex:"fc000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"9ed5a75136a940d0963da379db4af26a" + +AES-128-CFB128 Encrypt NIST KAT #4 +depends_on:0 +8:hex:"64cf9c7abc50b888af65f49d521944b2":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"f7efc89d5dba578104016ce5ad659c05" + +AES-128-CFB128 Encrypt NIST KAT #5 +depends_on:0 +8:hex:"47d6742eefcc0465dc96355e851b64d9":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"0306194f666d183624aa230a8b264ae7" + +AES-128-CFB128 Encrypt NIST KAT #6 +depends_on:0 +8:hex:"3eb39790678c56bee34bbcdeccf6cdb5":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"858075d536d79ccee571f7d7204b1f67" + +AES-128-CFB128 Encrypt NIST KAT #7 +depends_on:0 +8:hex:"00000000000000000000000000000000":hex:"6a118a874519e64e9963798a503f1d35":hex:"00000000000000000000000000000000":hex:"dc43be40be0e53712f7e2bf5ca707209" + +AES-128-CFB128 Encrypt NIST KAT #8 +depends_on:0 +8:hex:"00000000000000000000000000000000":hex:"cb9fceec81286ca3e989bd979b0cb284":hex:"00000000000000000000000000000000":hex:"92beedab1895a94faa69b632e5cc47ce" + +AES-128-CFB128 Encrypt NIST KAT #9 +depends_on:0 +8:hex:"00000000000000000000000000000000":hex:"b26aeb1874e47ca8358ff22378f09144":hex:"00000000000000000000000000000000":hex:"459264f4798f6a78bacb89c15ed3d601" + +AES-128-CFB128 Encrypt NIST KAT #10 +depends_on:0 +8:hex:"00000000000000000000000000000000":hex:"fffffffffffffffffffffffffffffff0":hex:"00000000000000000000000000000000":hex:"f9b0fda0c4a898f5b9e6f661c4ce4d07" + +AES-128-CFB128 Encrypt NIST KAT #11 +depends_on:0 +8:hex:"00000000000000000000000000000000":hex:"fffffffffffffffffffffffffffffff8":hex:"00000000000000000000000000000000":hex:"8ade895913685c67c5269f8aae42983e" + +AES-128-CFB128 Encrypt NIST KAT #12 +depends_on:0 +8:hex:"00000000000000000000000000000000":hex:"fffffffffffffffffffffffffffffffc":hex:"00000000000000000000000000000000":hex:"39bde67d5c8ed8a8b1c37eb8fa9f5ac0" + +AES-128-CFB128 Decrypt NIST KAT #1 +depends_on:0 +9:hex:"fffffffe000000000000000000000000":hex:"00000000000000000000000000000000":hex:"1114bc2028009b923f0b01915ce5e7c4":hex:"00000000000000000000000000000000" + +AES-128-CFB128 Decrypt NIST KAT #2 +depends_on:0 +9:hex:"ffffffff000000000000000000000000":hex:"00000000000000000000000000000000":hex:"9c28524a16a1e1c1452971caa8d13476":hex:"00000000000000000000000000000000" + +AES-128-CFB128 Decrypt NIST KAT #3 +depends_on:0 +9:hex:"ffffffff800000000000000000000000":hex:"00000000000000000000000000000000":hex:"ed62e16363638360fdd6ad62112794f0":hex:"00000000000000000000000000000000" + +AES-128-CFB128 Decrypt NIST KAT #4 +depends_on:0 +9:hex:"3071a2a48fe6cbd04f1a129098e308f8":hex:"00000000000000000000000000000000":hex:"4b98e06d356deb07ebb824e5713f7be3":hex:"00000000000000000000000000000000" + +AES-128-CFB128 Decrypt NIST KAT #5 +depends_on:0 +9:hex:"90f42ec0f68385f2ffc5dfc03a654dce":hex:"00000000000000000000000000000000":hex:"7a20a53d460fc9ce0423a7a0764c6cf2":hex:"00000000000000000000000000000000" + +AES-128-CFB128 Decrypt NIST KAT #6 +depends_on:0 +9:hex:"febd9a24d8b65c1c787d50a4ed3619a9":hex:"00000000000000000000000000000000":hex:"f4a70d8af877f9b02b4c40df57d45b17":hex:"00000000000000000000000000000000" + +AES-128-CFB128 Decrypt NIST KAT #7 +depends_on:0 +9:hex:"00000000000000000000000000000000":hex:"f34481ec3cc627bacd5dc3fb08f273e6":hex:"0336763e966d92595a567cc9ce537f5e":hex:"00000000000000000000000000000000" + +AES-128-CFB128 Decrypt NIST KAT #8 +depends_on:0 +9:hex:"00000000000000000000000000000000":hex:"9798c4640bad75c7c3227db910174e72":hex:"a9a1631bf4996954ebc093957b234589":hex:"00000000000000000000000000000000" + +AES-128-CFB128 Decrypt NIST KAT #9 +depends_on:0 +9:hex:"00000000000000000000000000000000":hex:"96ab5c2ff612d9dfaae8c31f30c42168":hex:"ff4f8391a6a40ca5b25d23bedd44a597":hex:"00000000000000000000000000000000" + +AES-128-CFB128 Decrypt NIST KAT #10 +depends_on:0 +9:hex:"00000000000000000000000000000000":hex:"ffffffffffffffff0000000000000000":hex:"f807c3e7985fe0f5a50e2cdb25c5109e":hex:"00000000000000000000000000000000" + +AES-128-CFB128 Decrypt NIST KAT #11 +depends_on:0 +9:hex:"00000000000000000000000000000000":hex:"ffffffffffffffff8000000000000000":hex:"41f992a856fb278b389a62f5d274d7e9":hex:"00000000000000000000000000000000" + +AES-128-CFB128 Decrypt NIST KAT #12 +depends_on:0 +9:hex:"00000000000000000000000000000000":hex:"ffffffffffffffffc000000000000000":hex:"10d3ed7a6fe15ab4d91acbc7d0767ab1":hex:"00000000000000000000000000000000" + +AES-192-CFB128 Encrypt NIST KAT #1 +depends_on:0 +8:hex:"fffffffffffffffffffc0000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"8dfd999be5d0cfa35732c0ddc88ff5a5" + +AES-192-CFB128 Encrypt NIST KAT #2 +depends_on:0 +8:hex:"fffffffffffffffffffe0000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"02647c76a300c3173b841487eb2bae9f" + +AES-192-CFB128 Encrypt NIST KAT #3 +depends_on:0 +8:hex:"ffffffffffffffffffff0000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"172df8b02f04b53adab028b4e01acd87" + +AES-192-CFB128 Encrypt NIST KAT #4 +depends_on:0 +8:hex:"d184c36cf0dddfec39e654195006022237871a47c33d3198":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"2e19fb60a3e1de0166f483c97824a978" + +AES-192-CFB128 Encrypt NIST KAT #5 +depends_on:0 +8:hex:"4c6994ffa9dcdc805b60c2c0095334c42d95a8fc0ca5b080":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"7656709538dd5fec41e0ce6a0f8e207d" + +AES-192-CFB128 Encrypt NIST KAT #6 +depends_on:0 +8:hex:"c88f5b00a4ef9a6840e2acaf33f00a3bdc4e25895303fa72":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"a67cf333b314d411d3c0ae6e1cfcd8f5" + +AES-192-CFB128 Encrypt NIST KAT #7 +depends_on:0 +8:hex:"000000000000000000000000000000000000000000000000":hex:"9c2d8842e5f48f57648205d39a239af1":hex:"00000000000000000000000000000000":hex:"c9b8135ff1b5adc413dfd053b21bd96d" + +AES-192-CFB128 Encrypt NIST KAT #8 +depends_on:0 +8:hex:"000000000000000000000000000000000000000000000000":hex:"bff52510095f518ecca60af4205444bb":hex:"00000000000000000000000000000000":hex:"4a3650c3371ce2eb35e389a171427440" + +AES-192-CFB128 Encrypt NIST KAT #9 +depends_on:0 +8:hex:"000000000000000000000000000000000000000000000000":hex:"51719783d3185a535bd75adc65071ce1":hex:"00000000000000000000000000000000":hex:"4f354592ff7c8847d2d0870ca9481b7c" + +AES-192-CFB128 Encrypt NIST KAT #10 +depends_on:0 +8:hex:"000000000000000000000000000000000000000000000000":hex:"ffffffffffffffe00000000000000000":hex:"00000000000000000000000000000000":hex:"f34e4a6324ea4a5c39a661c8fe5ada8f" + +AES-192-CFB128 Encrypt NIST KAT #11 +depends_on:0 +8:hex:"000000000000000000000000000000000000000000000000":hex:"fffffffffffffff00000000000000000":hex:"00000000000000000000000000000000":hex:"0882a16f44088d42447a29ac090ec17e" + +AES-192-CFB128 Encrypt NIST KAT #12 +depends_on:0 +8:hex:"000000000000000000000000000000000000000000000000":hex:"fffffffffffffff80000000000000000":hex:"00000000000000000000000000000000":hex:"3a3c15bfc11a9537c130687004e136ee" + +AES-192-CFB128 Decrypt NIST KAT #1 +depends_on:0 +9:hex:"ffffffffffffffffffffffffffffffffffffffffffe00000":hex:"00000000000000000000000000000000":hex:"60136703374f64e860b48ce31f930716":hex:"00000000000000000000000000000000" + +AES-192-CFB128 Decrypt NIST KAT #2 +depends_on:0 +9:hex:"fffffffffffffffffffffffffffffffffffffffffff00000":hex:"00000000000000000000000000000000":hex:"8d63a269b14d506ccc401ab8a9f1b591":hex:"00000000000000000000000000000000" + +AES-192-CFB128 Decrypt NIST KAT #3 +depends_on:0 +9:hex:"fffffffffffffffffffffffffffffffffffffffffff80000":hex:"00000000000000000000000000000000":hex:"d317f81dc6aa454aee4bd4a5a5cff4bd":hex:"00000000000000000000000000000000" + +AES-192-CFB128 Decrypt NIST KAT #4 +depends_on:0 +9:hex:"98c6b8e01e379fbd14e61af6af891596583565f2a27d59e9":hex:"00000000000000000000000000000000":hex:"19c80ec4a6deb7e5ed1033dda933498f":hex:"00000000000000000000000000000000" + +AES-192-CFB128 Decrypt NIST KAT #5 +depends_on:0 +9:hex:"b3ad5cea1dddc214ca969ac35f37dae1a9a9d1528f89bb35":hex:"00000000000000000000000000000000":hex:"3cf5e1d21a17956d1dffad6a7c41c659":hex:"00000000000000000000000000000000" + +AES-192-CFB128 Decrypt NIST KAT #6 +depends_on:0 +9:hex:"45899367c3132849763073c435a9288a766c8b9ec2308516":hex:"00000000000000000000000000000000":hex:"69fd12e8505f8ded2fdcb197a121b362":hex:"00000000000000000000000000000000" + +AES-192-CFB128 Decrypt NIST KAT #7 +depends_on:0 +9:hex:"000000000000000000000000000000000000000000000000":hex:"1b077a6af4b7f98229de786d7516b639":hex:"275cfc0413d8ccb70513c3859b1d0f72":hex:"00000000000000000000000000000000" + +AES-192-CFB128 Decrypt NIST KAT #8 +depends_on:0 +9:hex:"000000000000000000000000000000000000000000000000":hex:"9c2d8842e5f48f57648205d39a239af1":hex:"c9b8135ff1b5adc413dfd053b21bd96d":hex:"00000000000000000000000000000000" + +AES-192-CFB128 Decrypt NIST KAT #9 +depends_on:0 +9:hex:"000000000000000000000000000000000000000000000000":hex:"bff52510095f518ecca60af4205444bb":hex:"4a3650c3371ce2eb35e389a171427440":hex:"00000000000000000000000000000000" + +AES-192-CFB128 Decrypt NIST KAT #10 +depends_on:0 +9:hex:"000000000000000000000000000000000000000000000000":hex:"ffffffffffffffffffff000000000000":hex:"54d632d03aba0bd0f91877ebdd4d09cb":hex:"00000000000000000000000000000000" + +AES-192-CFB128 Decrypt NIST KAT #11 +depends_on:0 +9:hex:"000000000000000000000000000000000000000000000000":hex:"ffffffffffffffffffff800000000000":hex:"d3427be7e4d27cd54f5fe37b03cf0897":hex:"00000000000000000000000000000000" + +AES-192-CFB128 Decrypt NIST KAT #12 +depends_on:0 +9:hex:"000000000000000000000000000000000000000000000000":hex:"ffffffffffffffffffffc00000000000":hex:"b2099795e88cc158fd75ea133d7e7fbe":hex:"00000000000000000000000000000000" + +AES-256-CFB128 Encrypt NIST KAT #1 +depends_on:0 +8:hex:"ffffffe000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"bbd1097a62433f79449fa97d4ee80dbf" + +AES-256-CFB128 Encrypt NIST KAT #2 +depends_on:0 +8:hex:"fffffff000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"07058e408f5b99b0e0f061a1761b5b3b" + +AES-256-CFB128 Encrypt NIST KAT #3 +depends_on:0 +8:hex:"fffffff800000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"5fd1f13fa0f31e37fabde328f894eac2" + +AES-256-CFB128 Encrypt NIST KAT #4 +depends_on:0 +8:hex:"13428b5e4c005e0636dd338405d173ab135dec2a25c22c5df0722d69dcc43887":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"649a71545378c783e368c9ade7114f6c" + +AES-256-CFB128 Encrypt NIST KAT #5 +depends_on:0 +8:hex:"07eb03a08d291d1b07408bf3512ab40c91097ac77461aad4bb859647f74f00ee":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"47cb030da2ab051dfc6c4bf6910d12bb" + +AES-256-CFB128 Encrypt NIST KAT #6 +depends_on:0 +8:hex:"90143ae20cd78c5d8ebdd6cb9dc1762427a96c78c639bccc41a61424564eafe1":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"798c7c005dee432b2c8ea5dfa381ecc3" + +AES-256-CFB128 Encrypt NIST KAT #7 +depends_on:0 +8:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"0b24af36193ce4665f2825d7b4749c98":hex:"00000000000000000000000000000000":hex:"a9ff75bd7cf6613d3731c77c3b6d0c04" + +AES-256-CFB128 Encrypt NIST KAT #8 +depends_on:0 +8:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"761c1fe41a18acf20d241650611d90f1":hex:"00000000000000000000000000000000":hex:"623a52fcea5d443e48d9181ab32c7421" + +AES-256-CFB128 Encrypt NIST KAT #9 +depends_on:0 +8:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"8a560769d605868ad80d819bdba03771":hex:"00000000000000000000000000000000":hex:"38f2c7ae10612415d27ca190d27da8b4" + +AES-256-CFB128 Encrypt NIST KAT #10 +depends_on:0 +8:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"ffffffffffffffffffffffffe0000000":hex:"00000000000000000000000000000000":hex:"2be1fae5048a25582a679ca10905eb80" + +AES-256-CFB128 Encrypt NIST KAT #11 +depends_on:0 +8:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"fffffffffffffffffffffffff0000000":hex:"00000000000000000000000000000000":hex:"da86f292c6f41ea34fb2068df75ecc29" + +AES-256-CFB128 Encrypt NIST KAT #12 +depends_on:0 +8:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"fffffffffffffffffffffffff8000000":hex:"00000000000000000000000000000000":hex:"220df19f85d69b1b562fa69a3c5beca5" + +AES-256-CFB128 Decrypt NIST KAT #1 +depends_on:0 +9:hex:"ffffffffff800000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"be66cfea2fecd6bf0ec7b4352c99bcaa":hex:"00000000000000000000000000000000" + +AES-256-CFB128 Decrypt NIST KAT #2 +depends_on:0 +9:hex:"ffffffffffc00000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"df31144f87a2ef523facdcf21a427804":hex:"00000000000000000000000000000000" + +AES-256-CFB128 Decrypt NIST KAT #3 +depends_on:0 +9:hex:"ffffffffffe00000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"b5bb0f5629fb6aae5e1839a3c3625d63":hex:"00000000000000000000000000000000" + +AES-256-CFB128 Decrypt NIST KAT #4 +depends_on:0 +9:hex:"1d85a181b54cde51f0e098095b2962fdc93b51fe9b88602b3f54130bf76a5bd9":hex:"00000000000000000000000000000000":hex:"531c2c38344578b84d50b3c917bbb6e1":hex:"00000000000000000000000000000000" + +AES-256-CFB128 Decrypt NIST KAT #5 +depends_on:0 +9:hex:"dc0eba1f2232a7879ded34ed8428eeb8769b056bbaf8ad77cb65c3541430b4cf":hex:"00000000000000000000000000000000":hex:"fc6aec906323480005c58e7e1ab004ad":hex:"00000000000000000000000000000000" + +AES-256-CFB128 Decrypt NIST KAT #6 +depends_on:0 +9:hex:"f8be9ba615c5a952cabbca24f68f8593039624d524c816acda2c9183bd917cb9":hex:"00000000000000000000000000000000":hex:"a3944b95ca0b52043584ef02151926a8":hex:"00000000000000000000000000000000" + +AES-256-CFB128 Decrypt NIST KAT #7 +depends_on:0 +9:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"761c1fe41a18acf20d241650611d90f1":hex:"623a52fcea5d443e48d9181ab32c7421":hex:"00000000000000000000000000000000" + +AES-256-CFB128 Decrypt NIST KAT #8 +depends_on:0 +9:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"8a560769d605868ad80d819bdba03771":hex:"38f2c7ae10612415d27ca190d27da8b4":hex:"00000000000000000000000000000000" + +AES-256-CFB128 Decrypt NIST KAT #9 +depends_on:0 +9:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"91fbef2d15a97816060bee1feaa49afe":hex:"1bc704f1bce135ceb810341b216d7abe":hex:"00000000000000000000000000000000" + +AES-256-CFB128 Decrypt NIST KAT #10 +depends_on:0 +9:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"e0000000000000000000000000000000":hex:"9b80eefb7ebe2d2b16247aa0efc72f5d":hex:"00000000000000000000000000000000" + +AES-256-CFB128 Decrypt NIST KAT #11 +depends_on:0 +9:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"f0000000000000000000000000000000":hex:"7f2c5ece07a98d8bee13c51177395ff7":hex:"00000000000000000000000000000000" + +AES-256-CFB128 Decrypt NIST KAT #12 +depends_on:0 +9:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"f8000000000000000000000000000000":hex:"7818d800dcf6f4be1e0e94f403d1e4c2":hex:"00000000000000000000000000000000" + +AES-128-CFB8 Encrypt NIST MMT #0 +10:hex:"c57d699d89df7cfbef71c080a6b10ac3":hex:"fcb2bc4c006b87483978796a2ae2c42e":hex:"61":hex:"24" + +AES-128-CFB8 Encrypt NIST MMT #1 +10:hex:"0d8f3dc3edee60db658bb97faf46fba3":hex:"e481fdc42e606b96a383c0a1a5520ebb":hex:"aacd":hex:"5066" + +AES-128-CFB8 Encrypt NIST MMT #2 +10:hex:"c8fe9bf77b930f46d2078b8c0e657cd4":hex:"f475c64991b20eaee183a22629e21e22":hex:"c90635":hex:"d27691" + +AES-128-CFB8 Encrypt NIST MMT #3 +10:hex:"280cf81af5cc7e7363579c1da03390e6":hex:"5d6cf4722d0e21f1d9ced53a0e36c342":hex:"b2a22ced":hex:"73f3aebf" + +AES-128-CFB8 Encrypt NIST MMT #4 +10:hex:"5d5e7f20e0a66d3e09e0e5a9912f8a46":hex:"052d7ea0ad1f2956a23b27afe1d87b6b":hex:"b84a90fc6d":hex:"1a9a61c307" + +AES-128-CFB8 Encrypt NIST MMT #5 +10:hex:"ec89fb348787cf902ca973c47081438d":hex:"528fe95c711bd13f37bc52cc9e96d45c":hex:"14253472e99d":hex:"cfc247e33a3b" + +AES-128-CFB8 Encrypt NIST MMT #6 +10:hex:"6607987c354809cba818639dcd185147":hex:"552c101a0b7c0ca143af258453937fa3":hex:"9b1a5a1369166e":hex:"b7ab2a4cc71904" + +AES-128-CFB8 Encrypt NIST MMT #7 +10:hex:"c028e6bf2b749ffa86759f2f84e93cb0":hex:"288c752d9faccf367e5d0cca1fa6ec3b":hex:"324015878cdc82bf":hex:"873250152fc6a5bb" + +AES-128-CFB8 Encrypt NIST MMT #8 +10:hex:"d01da95d2c2a61da06ea78cfba59cc30":hex:"f9a393ad90814faf262e3a5b1d97592e":hex:"57c1a30e48166d9640":hex:"e9a8c3b776edd39e3d" + +AES-128-CFB8 Encrypt NIST MMT #9 +10:hex:"3a6f9159263fa6cef2a075caface5817":hex:"0fc23662b7dbf73827f0c7de321ca36e":hex:"87efeb8d559ed3367728":hex:"8e9c50425614d540ce11" + +AES-128-CFB8 Decrypt NIST MMT #0 +11:hex:"03edfe082550bd5ac8ddf64f42a0547f":hex:"52acd8dab62c981da08e51939cc08dab":hex:"21":hex:"09" + +AES-128-CFB8 Decrypt NIST MMT #1 +11:hex:"38cf776750162edc63c3b5dbe311ab9f":hex:"98fbbd288872c40f1926b16ecaec1561":hex:"4878":hex:"eb24" + +AES-128-CFB8 Decrypt NIST MMT #2 +11:hex:"c9053c87c3e56bc5e52bd31f6545f991":hex:"b8f9640d0923da13fe6eb87b01f0cfa0":hex:"aeb6d2":hex:"910949" + +AES-128-CFB8 Decrypt NIST MMT #3 +11:hex:"e96771f5f20a89ee871261d2d18e1e46":hex:"6e86403e33396655907ae06ef192262f":hex:"83cab2f3":hex:"3b7f1f1c" + +AES-128-CFB8 Decrypt NIST MMT #4 +11:hex:"92ad13ecb60bde1bb3b34ce07867672b":hex:"f95a4060b8f80e3f839d4c3ca33dad94":hex:"49f73e652b":hex:"17b9b9e16d" + +AES-128-CFB8 Decrypt NIST MMT #5 +11:hex:"eb57b8dd076e7bbb33d4bfc4d7ecb27e":hex:"51135997a067dcd2e016c57134c5fa52":hex:"b0eacbf2ca46":hex:"ca989fa4e818" + +AES-128-CFB8 Decrypt NIST MMT #6 +11:hex:"70abc48bb1be490183f0fe3df56195ff":hex:"e251f179174b71ee1e488ab3dd200483":hex:"08fbef9b2a369a":hex:"5405da1186b7e0" + +AES-128-CFB8 Decrypt NIST MMT #7 +11:hex:"1273b8e0eee1a1ca827059b4d0a3a55d":hex:"622cab49092d026f554dd98a6441dc26":hex:"b3cb9d8892423aeb":hex:"d497df73afb9787c" + +AES-128-CFB8 Decrypt NIST MMT #8 +11:hex:"49437e06b6faa5f20fd98bf71f8ff554":hex:"63c818e0d3cb5b7054ef3e1e87df0e12":hex:"01992a986279c3685e":hex:"f203bcd402b65919da" + +AES-128-CFB8 Decrypt NIST MMT #9 +11:hex:"6399c1dc068ba3509845628fa9ed1a96":hex:"1157c2766c86b754df485be9dd5851df":hex:"c9c284e9abbfe6fb11fe":hex:"feff4e2e2458addf2a54" + +AES-192-CFB8 Encrypt NIST MMT #0 +10:hex:"32a1b0e3da368db563d7316b9779d3327e53d9a6d287ed97":hex:"3dd0e7e21f09d5842f3a699da9b57346":hex:"54":hex:"6d" + +AES-192-CFB8 Encrypt NIST MMT #1 +10:hex:"a6381dcc18dd85d7729c1dce90743bbe1df580d857f5b9c4":hex:"c0ac501fad7f4a1465daf32e18fc1a4f":hex:"a456":hex:"8fb6" + +AES-192-CFB8 Encrypt NIST MMT #2 +10:hex:"d08dbee4732c7ffc544c1695b201d30e795037325ef0aa18":hex:"a1e39aeeb972a8d70aa0fc7d6fac6eac":hex:"fd115d":hex:"c4c016" + +AES-192-CFB8 Encrypt NIST MMT #3 +10:hex:"277185a4a440869920f523c4d578fc5bedd33aee8d2ebaf7":hex:"67be00572f82aabc13d6e5a2e51d1f08":hex:"88e07061":hex:"8bb630ba" + +AES-192-CFB8 Encrypt NIST MMT #4 +10:hex:"83f70fdce47306fcbb8c21b6a8b3209f7ec185fef4deebd4":hex:"ff73b310cf7e62ce6f501092fa6cc888":hex:"36664e222d":hex:"20855555d1" + +AES-192-CFB8 Encrypt NIST MMT #5 +10:hex:"c5be271a29f4a29e085e8e98196601dcb88ccc03e559a304":hex:"9f51fa2eb8a084718f7240e47d135dce":hex:"b57f12342a62":hex:"73ff9bf3ec4b" + +AES-192-CFB8 Encrypt NIST MMT #6 +10:hex:"9c55322e6d495be01076d4b80371ad1479ae5636ff9861f5":hex:"2b79cfc1ff37254dedf5924a6b61e3e0":hex:"6dcede43c2ee65":hex:"7c897658282220" + +AES-192-CFB8 Encrypt NIST MMT #7 +10:hex:"6e78ccece7d1b2a3c08cf0de738bee33cbbbf78d9bf4922c":hex:"4bbe15b1e94a7b97250a2136d8804e46":hex:"ceda42527871f802":hex:"d92ff89045b1917f" + +AES-192-CFB8 Encrypt NIST MMT #8 +10:hex:"13c98665746f7825b37b404916240adbd1e4364be1d05c63":hex:"0e479fbd5f3961f38b8a26be1f2d65c5":hex:"1b0a63d73464ab3c8a":hex:"5485847e5d3c2e2cc4" + +AES-192-CFB8 Encrypt NIST MMT #9 +10:hex:"537e7bf661fd4024a024613f15b13690f7d0c847c1e18965":hex:"3a81f9d9d3c155b0caad5d73349476fc":hex:"d3d8b9b984adc24237ee":hex:"3879fea72ac99929e53a" + +AES-192-CFB8 Decrypt NIST MMT #0 +11:hex:"7dbdc15ad4034ed828dc862799b7adc9abd68eaf9d526d5d":hex:"4359683af5a3a85c248fb7f5506f317b":hex:"25":hex:"2d" + +AES-192-CFB8 Decrypt NIST MMT #1 +11:hex:"3a2cdf9c9608c1dd6233d03dd855293b0885915114b25279":hex:"e7a28ee34acc52128ddae658ec6398a2":hex:"0678":hex:"7b04" + +AES-192-CFB8 Decrypt NIST MMT #2 +11:hex:"c984b99a6cc5bc88003143cbe4b755e6e30ba94114f7ad1e":hex:"41e3b8fd138f8c358dfeef420302f634":hex:"037cf6":hex:"658d0a" + +AES-192-CFB8 Decrypt NIST MMT #3 +11:hex:"39747da225bdc0c53c3463fd686dbe19d14157535171f91d":hex:"77d3a5ad8bbdb169f8d29e5f21798651":hex:"0fb0cee2":hex:"2d191f2f" + +AES-192-CFB8 Decrypt NIST MMT #4 +11:hex:"4cd13179dfa16d01c6a8633dfc8783e723e72114c9b0d50a":hex:"6657c46c99d642474c330d8016b71dbe":hex:"09d914cf0b":hex:"105a64c872" + +AES-192-CFB8 Decrypt NIST MMT #5 +11:hex:"5dcc9b8d8a456e9917cd8d54d7f7100b34964b4ed2d398a0":hex:"4fa295a8987f1b010ce4e011fbf94156":hex:"288c752d9fac":hex:"98f332d37b78" + +AES-192-CFB8 Decrypt NIST MMT #6 +11:hex:"c8baf0204ef80b8e0125efe43a0bccdfd0f356b62e6c75fe":hex:"e9144bf2cbc5720a1b4cb6f37d11edff":hex:"c9981a34b7aa89":hex:"56bb4c3cae53b3" + +AES-192-CFB8 Decrypt NIST MMT #7 +11:hex:"64e40763f38a63ae378c32052b0ae3aa538bb868a04ac985":hex:"aacf65089e4b285438451ffdcd0f6389":hex:"d8fcf83a88510a0d":hex:"b567411bc61b0a76" + +AES-192-CFB8 Decrypt NIST MMT #8 +11:hex:"7bfdca9605f17253f203efffc92da96fde023007d22cdad0":hex:"45c09e44036070f8a7737a5176b8cf26":hex:"9c195b1944c4af5bfb":hex:"89358df65c3ef14d26" + +AES-192-CFB8 Decrypt NIST MMT #9 +11:hex:"baf08b76317a65c5f07ae6f57eb0e65488659324d29709e3":hex:"0a02846b62abb693ef31d754842eed29":hex:"729c0b6deb75fa6eb5e8":hex:"9895932402393dc33a60" + +AES-256-CFB8 Encrypt NIST MMT #0 +10:hex:"34e8091cee09f1bd3ebf1e8f05f51bfbd4899ef2ae006a3a0f7875052cdd46c8":hex:"43eb4dcc4b04a80216a20e4a09a7abb5":hex:"f9":hex:"28" + +AES-256-CFB8 Encrypt NIST MMT #1 +10:hex:"e04e43173113109e1343393842fe6caef3f8a2e506d7f55f83dcb10444c6ad23":hex:"a38b88a293b077fb5546636aad90d663":hex:"2914":hex:"69a6" + +AES-256-CFB8 Encrypt NIST MMT #2 +10:hex:"064874092f7a13cc4462247ad423d0e96edf42e8b67a5a23b7a0a6477b098e66":hex:"338c552ff1eca14408e05d8cf9f3b31b":hex:"b974fa":hex:"1cff95" + +AES-256-CFB8 Encrypt NIST MMT #3 +10:hex:"56794adb0ef04aeddeabd650de736531d408837954b919002c33edfdff976cc2":hex:"71b5526facea4236d33f1f4107e4b04f":hex:"db774912":hex:"f04d9d4f" + +AES-256-CFB8 Encrypt NIST MMT #4 +10:hex:"dddd7f234e7d0e6ec64560b96430986a856f2ee9805443a7946e31601ef6679d":hex:"e20f39db0025eb24491bd06012887108":hex:"ad1d5311ea":hex:"19cc97a662" + +AES-256-CFB8 Encrypt NIST MMT #5 +10:hex:"ec73a760272c83f91771b3ab7b188715c6d6afb9c554feae83856e966a3863d0":hex:"ae7bfa38fd25778fcf66ce8157f6e42e":hex:"02fe724fbc5d":hex:"b0eca63405f4" + +AES-256-CFB8 Encrypt NIST MMT #6 +10:hex:"a66874ca0b70fb98b37c033ec96413f339adae02acade015b9f016b459db3309":hex:"6ed480d9e4ed031cf66bb1e07f8d5514":hex:"b4777e6bcd9a05":hex:"8c017397ad5bab" + +AES-256-CFB8 Encrypt NIST MMT #7 +10:hex:"a3dbbb775ada92b0b8ed1632444e21c1c86ff3eba8f628307306e766b8c15b5c":hex:"4ec56a8e541f5cfe7b8ab947bfa4fd08":hex:"1d70a5a82badf5ea":hex:"1e22bebebeacd81d" + +AES-256-CFB8 Encrypt NIST MMT #8 +10:hex:"64135e67c0ca1acef3360d930afcd726c5b04861a69c1b6a48bde1daf20f3b1f":hex:"5377a154d5f948189f9aa57b466c16b2":hex:"a36ca5ea382a322eef":hex:"3105016567d3174aed" + +AES-256-CFB8 Encrypt NIST MMT #9 +10:hex:"ebbb4566b5e182e0f072466b0b311df38f9175bc0213a5530bce2ec4d74f400d":hex:"0956a48e01002c9e16376d6e308dbad1":hex:"b0fe25ac8d3d28a2f471":hex:"638c6823e7256fb5626e" + +AES-256-CFB8 Decrypt NIST MMT #0 +11:hex:"1687831580cb764321a9d674dbd0a9640f668b0f58ef01b87a710b3095d5f855":hex:"6cd5bec6d6e1fd23afc543b8f80d3f89":hex:"6f":hex:"98" + +AES-256-CFB8 Decrypt NIST MMT #1 +11:hex:"b6b504e8b7065373ea31cd549e52eda7cb96fd1db14eddacbc420085ab48b747":hex:"870ecd45b1241803ddaf8bad15a025d7":hex:"17d4":hex:"3572" + +AES-256-CFB8 Decrypt NIST MMT #2 +11:hex:"6ad3105e15fb5b742bf4fe1eb8e98c6c1ffea653107c84f6b42ed1232a0bbc21":hex:"17534c89c4eae5dea6ea353dde7b1623":hex:"a9841e":hex:"f9411a" + +AES-256-CFB8 Decrypt NIST MMT #3 +11:hex:"758f3fa8b2b289f19fd59e7316be40b904eff7f565caac4570f972360e0da787":hex:"b21335ae980898fa92c4b3069e532973":hex:"84b35e25":hex:"47887872" + +AES-256-CFB8 Decrypt NIST MMT #4 +11:hex:"802e854eb799500975d960a67885820d195e02ab23d51f15e5cdbcee86a1580c":hex:"94478c4e44e2fa8d2e6bc43d384597e6":hex:"d1e96bf1e8":hex:"ed414b5689" + +AES-256-CFB8 Decrypt NIST MMT #5 +11:hex:"3a0c03ca9d1e5d49bb37f9041f88d159c3f1d5ce26c798f59ed54a93f0a0e600":hex:"9aae38ba832e4b093b50444074517d20":hex:"74410ccd12da":hex:"8207eee2a7ab" + +AES-256-CFB8 Decrypt NIST MMT #6 +11:hex:"ee05462128fea75e919f6f436cb198f222847d698a283f5767df682d33d3ce77":hex:"d2ad55e41887075184635112a22fc093":hex:"ff039e89877b44":hex:"aff3aa4c24e353" + +AES-256-CFB8 Decrypt NIST MMT #7 +11:hex:"08abbdcc3eb9c1717db1faa38dcd0893afd5e16e2596747af58f8d61ebedf9cd":hex:"b925c8dc9a9b55a4372ea6d37d21c1eb":hex:"e176ba99ea602fd9":hex:"b7370050288bf600" + +AES-256-CFB8 Decrypt NIST MMT #8 +11:hex:"56d404a893fb3b3f594aab18939230b096646a37a781629fbd9270f3891a5cea":hex:"e5906b36f2d97e6f2db19b6c7a3ce319":hex:"c55a9a917a809a784b":hex:"e44995bbb0fff40fee" + +AES-256-CFB8 Decrypt NIST MMT #9 +11:hex:"ec13062551e4d7291e320f565b749eea1809b663b26f2c4d53b52058b833e0ad":hex:"fbfa5a528e20863012790c2abafb5a0c":hex:"2bfc3f0209307140101a":hex:"547bfd642cf6e12ed942" + diff --git a/third_party/mbedtls/test/test_suite_aes.ecb.c b/third_party/mbedtls/test/test_suite_aes.ecb.c new file mode 100644 index 000000000..6c857737b --- /dev/null +++ b/third_party/mbedtls/test/test_suite_aes.ecb.c @@ -0,0 +1,1099 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_aes.ecb.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_aes.function + * Test suite data : suites/test_suite_aes.ecb.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +void test_aes_encrypt_ecb( data_t * key_str, data_t * src_str, + data_t * dst, int setkey_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); + if( setkey_result == 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_ENCRYPT, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_aes_encrypt_ecb( &data0, &data2, &data4, *( (int *) params[6] ) ); +} +void test_aes_decrypt_ecb( data_t * key_str, data_t * src_str, + data_t * dst, int setkey_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_setkey_dec( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); + if( setkey_result == 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_DECRYPT, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_aes_decrypt_ecb( &data0, &data2, &data4, *( (int *) params[6] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_aes_encrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, + int cbc_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_aes_decrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, + int cbc_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + mbedtls_aes_setkey_dec( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_encrypt_xts( char *hex_key_string, char *hex_data_unit_string, + char *hex_src_string, char *hex_dst_string ) +{ + enum { AES_BLOCK_SIZE = 16 }; + unsigned char *data_unit = NULL; + unsigned char *key = NULL; + unsigned char *src = NULL; + unsigned char *dst = NULL; + unsigned char *output = NULL; + mbedtls_aes_xts_context ctx; + size_t key_len, src_len, dst_len, data_unit_len; + + mbedtls_aes_xts_init( &ctx ); + + data_unit = mbedtls_test_unhexify_alloc( hex_data_unit_string, + &data_unit_len ); + TEST_ASSERT( data_unit_len == AES_BLOCK_SIZE ); + + key = mbedtls_test_unhexify_alloc( hex_key_string, &key_len ); + TEST_ASSERT( key_len % 2 == 0 ); + + src = mbedtls_test_unhexify_alloc( hex_src_string, &src_len ); + dst = mbedtls_test_unhexify_alloc( hex_dst_string, &dst_len ); + TEST_ASSERT( src_len == dst_len ); + + output = mbedtls_test_zero_alloc( dst_len ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_enc( &ctx, key, key_len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, src_len, + data_unit, src, output ) == 0 ); + + TEST_ASSERT( memcmp( output, dst, dst_len ) == 0 ); + +exit: + mbedtls_aes_xts_free( &ctx ); + mbedtls_free( data_unit ); + mbedtls_free( key ); + mbedtls_free( src ); + mbedtls_free( dst ); + mbedtls_free( output ); +} + +void test_aes_encrypt_xts_wrapper( void ** params ) +{ + + test_aes_encrypt_xts( (char *) params[0], (char *) params[1], (char *) params[2], (char *) params[3] ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_decrypt_xts( char *hex_key_string, char *hex_data_unit_string, + char *hex_dst_string, char *hex_src_string ) +{ + enum { AES_BLOCK_SIZE = 16 }; + unsigned char *data_unit = NULL; + unsigned char *key = NULL; + unsigned char *src = NULL; + unsigned char *dst = NULL; + unsigned char *output = NULL; + mbedtls_aes_xts_context ctx; + size_t key_len, src_len, dst_len, data_unit_len; + + mbedtls_aes_xts_init( &ctx ); + + data_unit = mbedtls_test_unhexify_alloc( hex_data_unit_string, + &data_unit_len ); + TEST_ASSERT( data_unit_len == AES_BLOCK_SIZE ); + + key = mbedtls_test_unhexify_alloc( hex_key_string, &key_len ); + TEST_ASSERT( key_len % 2 == 0 ); + + src = mbedtls_test_unhexify_alloc( hex_src_string, &src_len ); + dst = mbedtls_test_unhexify_alloc( hex_dst_string, &dst_len ); + TEST_ASSERT( src_len == dst_len ); + + output = mbedtls_test_zero_alloc( dst_len ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_dec( &ctx, key, key_len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_DECRYPT, src_len, + data_unit, src, output ) == 0 ); + + TEST_ASSERT( memcmp( output, dst, dst_len ) == 0 ); + +exit: + mbedtls_aes_xts_free( &ctx ); + mbedtls_free( data_unit ); + mbedtls_free( key ); + mbedtls_free( src ); + mbedtls_free( dst ); + mbedtls_free( output ); +} + +void test_aes_decrypt_xts_wrapper( void ** params ) +{ + + test_aes_decrypt_xts( (char *) params[0], (char *) params[1], (char *) params[2], (char *) params[3] ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_crypt_xts_size( int size, int retval ) +{ + mbedtls_aes_xts_context ctx; + const unsigned char src[16] = { 0 }; + unsigned char output[16]; + unsigned char data_unit[16]; + size_t length = size; + + mbedtls_aes_xts_init( &ctx ); + memset( data_unit, 0x00, sizeof( data_unit ) ); + + + /* Valid pointers are passed for builds with MBEDTLS_CHECK_PARAMS, as + * otherwise we wouldn't get to the size check we're interested in. */ + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, length, data_unit, src, output ) == retval ); +exit: + ; +} + +void test_aes_crypt_xts_size_wrapper( void ** params ) +{ + + test_aes_crypt_xts_size( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_crypt_xts_keysize( int size, int retval ) +{ + mbedtls_aes_xts_context ctx; + const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + size_t key_len = size; + + mbedtls_aes_xts_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_enc( &ctx, key, key_len * 8 ) == retval ); + TEST_ASSERT( mbedtls_aes_xts_setkey_dec( &ctx, key, key_len * 8 ) == retval ); +exit: + mbedtls_aes_xts_free( &ctx ); +} + +void test_aes_crypt_xts_keysize_wrapper( void ** params ) +{ + + test_aes_crypt_xts_keysize( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_encrypt_cfb128( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_ENCRYPT, 16, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cfb128_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cfb128( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_decrypt_cfb128( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_DECRYPT, 16, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cfb128_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cfb128( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_encrypt_cfb8( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cfb8_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cfb8( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_decrypt_cfb8( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cfb8_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cfb8( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_OFB) +void test_aes_encrypt_ofb( int fragment_size, data_t *key_str, + data_t *iv_str, data_t *src_str, + data_t *expected_output ) +{ + unsigned char output[32]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + int in_buffer_len; + unsigned char* src_str_next; + + memset( output, 0x00, sizeof( output ) ); + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( (size_t)fragment_size < sizeof( output ) ); + + TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str->x, + key_str->len * 8 ) == 0 ); + in_buffer_len = src_str->len; + src_str_next = src_str->x; + + while( in_buffer_len > 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ofb( &ctx, fragment_size, &iv_offset, + iv_str->x, src_str_next, output ) == 0 ); + + TEST_ASSERT( memcmp( output, expected_output->x, fragment_size ) == 0 ); + + in_buffer_len -= fragment_size; + expected_output->x += fragment_size; + src_str_next += fragment_size; + + if( in_buffer_len < fragment_size ) + fragment_size = in_buffer_len; + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_ofb_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + + test_aes_encrypt_ofb( *( (int *) params[0] ), &data1, &data3, &data5, &data7 ); +} +#endif /* MBEDTLS_CIPHER_MODE_OFB */ +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_aes_check_params( ) +{ + mbedtls_aes_context aes_ctx; +#if defined(MBEDTLS_CIPHER_MODE_XTS) + mbedtls_aes_xts_context xts_ctx; +#endif + const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const unsigned char in[16] = { 0 }; + unsigned char out[16]; + size_t size; + const int valid_mode = MBEDTLS_AES_ENCRYPT; + const int invalid_mode = 42; + + TEST_INVALID_PARAM( mbedtls_aes_init( NULL ) ); +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM( mbedtls_aes_xts_init( NULL ) ); +#endif + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_enc( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_enc( &aes_ctx, NULL, 128 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_dec( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_dec( &aes_ctx, NULL, 128 ) ); + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_enc( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_enc( &xts_ctx, NULL, 128 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_dec( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_dec( &xts_ctx, NULL, 128 ) ); +#endif + + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( NULL, + valid_mode, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + invalid_mode, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + valid_mode, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + valid_mode, in, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( NULL, + valid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + invalid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( NULL, + valid_mode, 16, + in, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + invalid_mode, 16, + in, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + in, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + in, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_XTS */ + +#if defined(MBEDTLS_CIPHER_MODE_CFB) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( NULL, + valid_mode, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + invalid_mode, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + NULL, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, out, in, NULL ) ); + + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( NULL, + valid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + invalid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CFB */ + +#if defined(MBEDTLS_CIPHER_MODE_OFB) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( NULL, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + NULL, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_OFB */ + +#if defined(MBEDTLS_CIPHER_MODE_CTR) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( NULL, 16, &size, out, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, NULL, out, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, NULL, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CTR */ +exit: + ; +} + +void test_aes_check_params_wrapper( void ** params ) +{ + (void)params; + + test_aes_check_params( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_aes_misc_params( ) +{ +#if defined(MBEDTLS_CIPHER_MODE_CBC) || \ + defined(MBEDTLS_CIPHER_MODE_XTS) || \ + defined(MBEDTLS_CIPHER_MODE_CFB) || \ + defined(MBEDTLS_CIPHER_MODE_OFB) + mbedtls_aes_context aes_ctx; + const unsigned char in[16] = { 0 }; + unsigned char out[16]; +#endif +#if defined(MBEDTLS_CIPHER_MODE_XTS) + mbedtls_aes_xts_context xts_ctx; +#endif +#if defined(MBEDTLS_CIPHER_MODE_CFB) || \ + defined(MBEDTLS_CIPHER_MODE_OFB) + size_t size; +#endif + + /* These calls accept NULL */ + TEST_VALID_PARAM( mbedtls_aes_free( NULL ) ); +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_VALID_PARAM( mbedtls_aes_xts_free( NULL ) ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT, + 15, + out, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT, + 17, + out, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_ASSERT( mbedtls_aes_crypt_xts( &xts_ctx, MBEDTLS_AES_ENCRYPT, + 15, + in, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &xts_ctx, MBEDTLS_AES_ENCRYPT, + (1 << 24) + 1, + in, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CFB) + size = 16; + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &aes_ctx, MBEDTLS_AES_ENCRYPT, 16, + &size, out, in, out ) + == MBEDTLS_ERR_AES_BAD_INPUT_DATA ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_OFB) + size = 16; + TEST_ASSERT( mbedtls_aes_crypt_ofb( &aes_ctx, 16, &size, out, in, out ) + == MBEDTLS_ERR_AES_BAD_INPUT_DATA ); +#endif +exit: + ; +} + +void test_aes_misc_params_wrapper( void ** params ) +{ + (void)params; + + test_aes_misc_params( ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_aes_selftest( ) +{ + TEST_ASSERT( mbedtls_aes_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_aes_selftest_wrapper( void ** params ) +{ + (void)params; + + test_aes_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_AES_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_AES_C) + +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_AES_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_AES_C) + test_aes_encrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_AES_C) + test_aes_decrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_aes_encrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_aes_decrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_encrypt_xts_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_decrypt_xts_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_crypt_xts_size_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_crypt_xts_keysize_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_encrypt_cfb128_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_decrypt_cfb128_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_encrypt_cfb8_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_decrypt_cfb8_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_OFB) + test_aes_encrypt_ofb_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_aes_check_params_wrapper, +#else + NULL, +#endif +/* Function Id: 14 */ + +#if defined(MBEDTLS_AES_C) + test_aes_misc_params_wrapper, +#else + NULL, +#endif +/* Function Id: 15 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_SELF_TEST) + test_aes_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_aes.ecb.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_aes.ecb.datax b/third_party/mbedtls/test/test_suite_aes.ecb.datax new file mode 100644 index 000000000..651b1c412 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_aes.ecb.datax @@ -0,0 +1,231 @@ +AES-128-ECB Encrypt NIST KAT #1 +0:hex:"00000000000000000000000000000000":hex:"f34481ec3cc627bacd5dc3fb08f273e6":hex:"0336763e966d92595a567cc9ce537f5e":int:0 + +AES-128-ECB Encrypt NIST KAT #2 +0:hex:"00000000000000000000000000000000":hex:"9798c4640bad75c7c3227db910174e72":hex:"a9a1631bf4996954ebc093957b234589":int:0 + +AES-128-ECB Encrypt NIST KAT #3 +0:hex:"00000000000000000000000000000000":hex:"96ab5c2ff612d9dfaae8c31f30c42168":hex:"ff4f8391a6a40ca5b25d23bedd44a597":int:0 + +AES-128-ECB Encrypt NIST KAT #4 +0:hex:"e0000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"72a1da770f5d7ac4c9ef94d822affd97":int:0 + +AES-128-ECB Encrypt NIST KAT #5 +0:hex:"f0000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"970014d634e2b7650777e8e84d03ccd8":int:0 + +AES-128-ECB Encrypt NIST KAT #6 +0:hex:"f8000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"f17e79aed0db7e279e955b5f493875a7":int:0 + +AES-128-ECB Encrypt NIST KAT #7 +0:hex:"fffffffffffff0000000000000000000":hex:"00000000000000000000000000000000":hex:"7b90785125505fad59b13c186dd66ce3":int:0 + +AES-128-ECB Encrypt NIST KAT #8 +0:hex:"fffffffffffff8000000000000000000":hex:"00000000000000000000000000000000":hex:"8b527a6aebdaec9eaef8eda2cb7783e5":int:0 + +AES-128-ECB Encrypt NIST KAT #9 +0:hex:"fffffffffffffc000000000000000000":hex:"00000000000000000000000000000000":hex:"43fdaf53ebbc9880c228617d6a9b548b":int:0 + +AES-128-ECB Encrypt NIST KAT #10 +0:hex:"ffffffffffffffffffffffffffffc000":hex:"00000000000000000000000000000000":hex:"70c46bb30692be657f7eaa93ebad9897":int:0 + +AES-128-ECB Encrypt NIST KAT #11 +0:hex:"ffffffffffffffffffffffffffffe000":hex:"00000000000000000000000000000000":hex:"323994cfb9da285a5d9642e1759b224a":int:0 + +AES-128-ECB Encrypt NIST KAT #12 +0:hex:"fffffffffffffffffffffffffffff000":hex:"00000000000000000000000000000000":hex:"1dbf57877b7b17385c85d0b54851e371":int:0 + +AES-128-ECB Encrypt NIST KAT #13 +0:hex:"00000000000000000000000000000000":hex:"ffffffffffffffc00000000000000000":hex:"3a4d354f02bb5a5e47d39666867f246a":int:0 + +AES-128-ECB Encrypt NIST KAT #14 +0:hex:"00000000000000000000000000000000":hex:"ffffffffffffffe00000000000000000":hex:"d451b8d6e1e1a0ebb155fbbf6e7b7dc3":int:0 + +AES-128-ECB Encrypt NIST KAT #15 +0:hex:"00000000000000000000000000000000":hex:"fffffffffffffff00000000000000000":hex:"6898d4f42fa7ba6a10ac05e87b9f2080":int:0 + +AES-128-ECB Encrypt NIST KAT #16 +0:hex:"00000000000000000000000000000000":hex:"ffffffffffffffffffffffffe0000000":hex:"082eb8be35f442fb52668e16a591d1d6":int:0 + +AES-128-ECB Encrypt NIST KAT #17 +0:hex:"00000000000000000000000000000000":hex:"fffffffffffffffffffffffff0000000":hex:"e656f9ecf5fe27ec3e4a73d00c282fb3":int:0 + +AES-128-ECB Encrypt NIST KAT #18 +0:hex:"00000000000000000000000000000000":hex:"fffffffffffffffffffffffff8000000":hex:"2ca8209d63274cd9a29bb74bcd77683a":int:0 + +AES-128-ECB Decrypt NIST KAT #1 +1:hex:"00000000000000000000000000000000":hex:"db4f1aa530967d6732ce4715eb0ee24b":hex:"ff000000000000000000000000000000":int:0 + +AES-128-ECB Decrypt NIST KAT #2 +1:hex:"00000000000000000000000000000000":hex:"a81738252621dd180a34f3455b4baa2f":hex:"ff800000000000000000000000000000":int:0 + +AES-128-ECB Decrypt NIST KAT #3 +1:hex:"00000000000000000000000000000000":hex:"77e2b508db7fd89234caf7939ee5621a":hex:"ffc00000000000000000000000000000":int:0 + +AES-128-ECB Decrypt NIST KAT #4 +1:hex:"00000000000000000000000000000000":hex:"dc43be40be0e53712f7e2bf5ca707209":hex:"6a118a874519e64e9963798a503f1d35":int:0 + +AES-128-ECB Decrypt NIST KAT #5 +1:hex:"00000000000000000000000000000000":hex:"92beedab1895a94faa69b632e5cc47ce":hex:"cb9fceec81286ca3e989bd979b0cb284":int:0 + +AES-128-ECB Decrypt NIST KAT #6 +1:hex:"00000000000000000000000000000000":hex:"459264f4798f6a78bacb89c15ed3d601":hex:"b26aeb1874e47ca8358ff22378f09144":int:0 + +AES-128-ECB Decrypt NIST KAT #7 +1:hex:"b69418a85332240dc82492353956ae0c":hex:"a303d940ded8f0baff6f75414cac5243":hex:"00000000000000000000000000000000":int:0 + +AES-128-ECB Decrypt NIST KAT #8 +1:hex:"71b5c08a1993e1362e4d0ce9b22b78d5":hex:"c2dabd117f8a3ecabfbb11d12194d9d0":hex:"00000000000000000000000000000000":int:0 + +AES-128-ECB Decrypt NIST KAT #9 +1:hex:"e234cdca2606b81f29408d5f6da21206":hex:"fff60a4740086b3b9c56195b98d91a7b":hex:"00000000000000000000000000000000":int:0 + +AES-128-ECB Decrypt NIST KAT #10 +1:hex:"ffffffffffffffff0000000000000000":hex:"84be19e053635f09f2665e7bae85b42d":hex:"00000000000000000000000000000000":int:0 + +AES-128-ECB Decrypt NIST KAT #11 +1:hex:"ffffffffffffffff8000000000000000":hex:"32cd652842926aea4aa6137bb2be2b5e":hex:"00000000000000000000000000000000":int:0 + +AES-192-ECB Encrypt NIST KAT #1 +0:hex:"000000000000000000000000000000000000000000000000":hex:"fffffffffffffffffffff80000000000":hex:"156f07767a85a4312321f63968338a01":int:0 + +AES-192-ECB Encrypt NIST KAT #2 +0:hex:"000000000000000000000000000000000000000000000000":hex:"fffffffffffffffffffffc0000000000":hex:"15eec9ebf42b9ca76897d2cd6c5a12e2":int:0 + +AES-192-ECB Encrypt NIST KAT #3 +0:hex:"000000000000000000000000000000000000000000000000":hex:"fffffffffffffffffffffe0000000000":hex:"db0d3a6fdcc13f915e2b302ceeb70fd8":int:0 + +AES-192-ECB Encrypt NIST KAT #4 +0:hex:"000000000000000000000000000000000000000000000000":hex:"51719783d3185a535bd75adc65071ce1":hex:"4f354592ff7c8847d2d0870ca9481b7c":int:0 + +AES-192-ECB Encrypt NIST KAT #5 +0:hex:"000000000000000000000000000000000000000000000000":hex:"26aa49dcfe7629a8901a69a9914e6dfd":hex:"d5e08bf9a182e857cf40b3a36ee248cc":int:0 + +AES-192-ECB Encrypt NIST KAT #6 +0:hex:"000000000000000000000000000000000000000000000000":hex:"941a4773058224e1ef66d10e0a6ee782":hex:"067cd9d3749207791841562507fa9626":int:0 + +AES-192-ECB Encrypt NIST KAT #7 +0:hex:"d2926527e0aa9f37b45e2ec2ade5853ef807576104c7ace3":hex:"00000000000000000000000000000000":hex:"dd619e1cf204446112e0af2b9afa8f8c":int:0 + +AES-192-ECB Encrypt NIST KAT #8 +0:hex:"982215f4e173dfa0fcffe5d3da41c4812c7bcc8ed3540f93":hex:"00000000000000000000000000000000":hex:"d4f0aae13c8fe9339fbf9e69ed0ad74d":int:0 + +AES-192-ECB Encrypt NIST KAT #9 +0:hex:"98c6b8e01e379fbd14e61af6af891596583565f2a27d59e9":hex:"00000000000000000000000000000000":hex:"19c80ec4a6deb7e5ed1033dda933498f":int:0 + +AES-192-ECB Encrypt NIST KAT #10 +0:hex:"fffffffffffffffffffffffffff800000000000000000000":hex:"00000000000000000000000000000000":hex:"8dd274bd0f1b58ae345d9e7233f9b8f3":int:0 + +AES-192-ECB Encrypt NIST KAT #11 +0:hex:"fffffffffffffffffffffffffffc00000000000000000000":hex:"00000000000000000000000000000000":hex:"9d6bdc8f4ce5feb0f3bed2e4b9a9bb0b":int:0 + +AES-192-ECB Encrypt NIST KAT #12 +0:hex:"fffffffffffffffffffffffffffe00000000000000000000":hex:"00000000000000000000000000000000":hex:"fd5548bcf3f42565f7efa94562528d46":int:0 + +AES-192-ECB Decrypt NIST KAT #1 +1:hex:"fffffffffffffffffffffffffffffffff000000000000000":hex:"bb2852c891c5947d2ed44032c421b85f":hex:"00000000000000000000000000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #2 +1:hex:"fffffffffffffffffffffffffffffffff800000000000000":hex:"1b9f5fbd5e8a4264c0a85b80409afa5e":hex:"00000000000000000000000000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #3 +1:hex:"fffffffffffffffffffffffffffffffffc00000000000000":hex:"30dab809f85a917fe924733f424ac589":hex:"00000000000000000000000000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #4 +1:hex:"61257134a518a0d57d9d244d45f6498cbc32f2bafc522d79":hex:"cfe4d74002696ccf7d87b14a2f9cafc9":hex:"00000000000000000000000000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #5 +1:hex:"b0ab0a6a818baef2d11fa33eac947284fb7d748cfb75e570":hex:"d2eafd86f63b109b91f5dbb3a3fb7e13":hex:"00000000000000000000000000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #6 +1:hex:"ee053aa011c8b428cdcc3636313c54d6a03cac01c71579d6":hex:"9b9fdd1c5975655f539998b306a324af":hex:"00000000000000000000000000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #7 +1:hex:"000000000000000000000000000000000000000000000000":hex:"275cfc0413d8ccb70513c3859b1d0f72":hex:"1b077a6af4b7f98229de786d7516b639":int:0 + +AES-192-ECB Decrypt NIST KAT #8 +1:hex:"000000000000000000000000000000000000000000000000":hex:"c9b8135ff1b5adc413dfd053b21bd96d":hex:"9c2d8842e5f48f57648205d39a239af1":int:0 + +AES-192-ECB Decrypt NIST KAT #9 +1:hex:"000000000000000000000000000000000000000000000000":hex:"4a3650c3371ce2eb35e389a171427440":hex:"bff52510095f518ecca60af4205444bb":int:0 + +AES-192-ECB Decrypt NIST KAT #10 +1:hex:"000000000000000000000000000000000000000000000000":hex:"b2099795e88cc158fd75ea133d7e7fbe":hex:"ffffffffffffffffffffc00000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #11 +1:hex:"000000000000000000000000000000000000000000000000":hex:"a6cae46fb6fadfe7a2c302a34242817b":hex:"ffffffffffffffffffffe00000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #12 +1:hex:"000000000000000000000000000000000000000000000000":hex:"026a7024d6a902e0b3ffccbaa910cc3f":hex:"fffffffffffffffffffff00000000000":int:0 + +AES-256-ECB Encrypt NIST KAT #1 +0:hex:"c1cc358b449909a19436cfbb3f852ef8bcb5ed12ac7058325f56e6099aab1a1c":hex:"00000000000000000000000000000000":hex:"352065272169abf9856843927d0674fd":int:0 + +AES-256-ECB Encrypt NIST KAT #2 +0:hex:"984ca75f4ee8d706f46c2d98c0bf4a45f5b00d791c2dfeb191b5ed8e420fd627":hex:"00000000000000000000000000000000":hex:"4307456a9e67813b452e15fa8fffe398":int:0 + +AES-256-ECB Encrypt NIST KAT #3 +0:hex:"b43d08a447ac8609baadae4ff12918b9f68fc1653f1269222f123981ded7a92f":hex:"00000000000000000000000000000000":hex:"4663446607354989477a5c6f0f007ef4":int:0 + +AES-256-ECB Encrypt NIST KAT #4 +0:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"0b24af36193ce4665f2825d7b4749c98":hex:"a9ff75bd7cf6613d3731c77c3b6d0c04":int:0 + +AES-256-ECB Encrypt NIST KAT #5 +0:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"761c1fe41a18acf20d241650611d90f1":hex:"623a52fcea5d443e48d9181ab32c7421":int:0 + +AES-256-ECB Encrypt NIST KAT #6 +0:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"8a560769d605868ad80d819bdba03771":hex:"38f2c7ae10612415d27ca190d27da8b4":int:0 + +AES-256-ECB Encrypt NIST KAT #7 +0:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"ffffff80000000000000000000000000":hex:"36aff0ef7bf3280772cf4cac80a0d2b2":int:0 + +AES-256-ECB Encrypt NIST KAT #8 +0:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"ffffffc0000000000000000000000000":hex:"1f8eedea0f62a1406d58cfc3ecea72cf":int:0 + +AES-256-ECB Encrypt NIST KAT #9 +0:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"ffffffe0000000000000000000000000":hex:"abf4154a3375a1d3e6b1d454438f95a6":int:0 + +AES-256-ECB Encrypt NIST KAT #10 +0:hex:"ffffffffffffffffffffffffffffffffffff8000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"45d089c36d5c5a4efc689e3b0de10dd5":int:0 + +AES-256-ECB Encrypt NIST KAT #11 +0:hex:"ffffffffffffffffffffffffffffffffffffc000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"b4da5df4becb5462e03a0ed00d295629":int:0 + +AES-256-ECB Encrypt NIST KAT #12 +0:hex:"ffffffffffffffffffffffffffffffffffffe000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"dcf4e129136c1a4b7a0f38935cc34b2b":int:0 + +AES-256-ECB Decrypt NIST KAT #1 +1:hex:"fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000":hex:"edf61ae362e882ddc0167474a7a77f3a":hex:"00000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #2 +1:hex:"fffffffffffffffffffffffffffffffffffffffffffffff80000000000000000":hex:"6168b00ba7859e0970ecfd757efecf7c":hex:"00000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #3 +1:hex:"fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000":hex:"d1415447866230d28bb1ea18a4cdfd02":hex:"00000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #4 +1:hex:"f8be9ba615c5a952cabbca24f68f8593039624d524c816acda2c9183bd917cb9":hex:"a3944b95ca0b52043584ef02151926a8":hex:"00000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #5 +1:hex:"797f8b3d176dac5b7e34a2d539c4ef367a16f8635f6264737591c5c07bf57a3e":hex:"a74289fe73a4c123ca189ea1e1b49ad5":hex:"00000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #6 +1:hex:"6838d40caf927749c13f0329d331f448e202c73ef52c5f73a37ca635d4c47707":hex:"b91d4ea4488644b56cf0812fa7fcf5fc":hex:"00000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #7 +1:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"623a52fcea5d443e48d9181ab32c7421":hex:"761c1fe41a18acf20d241650611d90f1":int:0 + +AES-256-ECB Decrypt NIST KAT #8 +1:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"38f2c7ae10612415d27ca190d27da8b4":hex:"8a560769d605868ad80d819bdba03771":int:0 + +AES-256-ECB Decrypt NIST KAT #9 +1:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"1bc704f1bce135ceb810341b216d7abe":hex:"91fbef2d15a97816060bee1feaa49afe":int:0 + +AES-256-ECB Decrypt NIST KAT #10 +1:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"ddc6bf790c15760d8d9aeb6f9a75fd4e":hex:"80000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #11 +1:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"0a6bdc6d4c1e6280301fd8e97ddbe601":hex:"c0000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #12 +1:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"9b80eefb7ebe2d2b16247aa0efc72f5d":hex:"e0000000000000000000000000000000":int:0 + diff --git a/third_party/mbedtls/test/test_suite_aes.ofb.c b/third_party/mbedtls/test/test_suite_aes.ofb.c new file mode 100644 index 000000000..eb2b522d2 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_aes.ofb.c @@ -0,0 +1,1108 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_aes.ofb.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_aes.function + * Test suite data : suites/test_suite_aes.ofb.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +void test_aes_encrypt_ecb( data_t * key_str, data_t * src_str, + data_t * dst, int setkey_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); + if( setkey_result == 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_ENCRYPT, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_aes_encrypt_ecb( &data0, &data2, &data4, *( (int *) params[6] ) ); +} +void test_aes_decrypt_ecb( data_t * key_str, data_t * src_str, + data_t * dst, int setkey_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_setkey_dec( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); + if( setkey_result == 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_DECRYPT, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_aes_decrypt_ecb( &data0, &data2, &data4, *( (int *) params[6] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_aes_encrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, + int cbc_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_aes_decrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, + int cbc_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + mbedtls_aes_setkey_dec( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_encrypt_xts( char *hex_key_string, char *hex_data_unit_string, + char *hex_src_string, char *hex_dst_string ) +{ + enum { AES_BLOCK_SIZE = 16 }; + unsigned char *data_unit = NULL; + unsigned char *key = NULL; + unsigned char *src = NULL; + unsigned char *dst = NULL; + unsigned char *output = NULL; + mbedtls_aes_xts_context ctx; + size_t key_len, src_len, dst_len, data_unit_len; + + mbedtls_aes_xts_init( &ctx ); + + data_unit = mbedtls_test_unhexify_alloc( hex_data_unit_string, + &data_unit_len ); + TEST_ASSERT( data_unit_len == AES_BLOCK_SIZE ); + + key = mbedtls_test_unhexify_alloc( hex_key_string, &key_len ); + TEST_ASSERT( key_len % 2 == 0 ); + + src = mbedtls_test_unhexify_alloc( hex_src_string, &src_len ); + dst = mbedtls_test_unhexify_alloc( hex_dst_string, &dst_len ); + TEST_ASSERT( src_len == dst_len ); + + output = mbedtls_test_zero_alloc( dst_len ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_enc( &ctx, key, key_len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, src_len, + data_unit, src, output ) == 0 ); + + TEST_ASSERT( memcmp( output, dst, dst_len ) == 0 ); + +exit: + mbedtls_aes_xts_free( &ctx ); + mbedtls_free( data_unit ); + mbedtls_free( key ); + mbedtls_free( src ); + mbedtls_free( dst ); + mbedtls_free( output ); +} + +void test_aes_encrypt_xts_wrapper( void ** params ) +{ + + test_aes_encrypt_xts( (char *) params[0], (char *) params[1], (char *) params[2], (char *) params[3] ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_decrypt_xts( char *hex_key_string, char *hex_data_unit_string, + char *hex_dst_string, char *hex_src_string ) +{ + enum { AES_BLOCK_SIZE = 16 }; + unsigned char *data_unit = NULL; + unsigned char *key = NULL; + unsigned char *src = NULL; + unsigned char *dst = NULL; + unsigned char *output = NULL; + mbedtls_aes_xts_context ctx; + size_t key_len, src_len, dst_len, data_unit_len; + + mbedtls_aes_xts_init( &ctx ); + + data_unit = mbedtls_test_unhexify_alloc( hex_data_unit_string, + &data_unit_len ); + TEST_ASSERT( data_unit_len == AES_BLOCK_SIZE ); + + key = mbedtls_test_unhexify_alloc( hex_key_string, &key_len ); + TEST_ASSERT( key_len % 2 == 0 ); + + src = mbedtls_test_unhexify_alloc( hex_src_string, &src_len ); + dst = mbedtls_test_unhexify_alloc( hex_dst_string, &dst_len ); + TEST_ASSERT( src_len == dst_len ); + + output = mbedtls_test_zero_alloc( dst_len ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_dec( &ctx, key, key_len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_DECRYPT, src_len, + data_unit, src, output ) == 0 ); + + TEST_ASSERT( memcmp( output, dst, dst_len ) == 0 ); + +exit: + mbedtls_aes_xts_free( &ctx ); + mbedtls_free( data_unit ); + mbedtls_free( key ); + mbedtls_free( src ); + mbedtls_free( dst ); + mbedtls_free( output ); +} + +void test_aes_decrypt_xts_wrapper( void ** params ) +{ + + test_aes_decrypt_xts( (char *) params[0], (char *) params[1], (char *) params[2], (char *) params[3] ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_crypt_xts_size( int size, int retval ) +{ + mbedtls_aes_xts_context ctx; + const unsigned char src[16] = { 0 }; + unsigned char output[16]; + unsigned char data_unit[16]; + size_t length = size; + + mbedtls_aes_xts_init( &ctx ); + memset( data_unit, 0x00, sizeof( data_unit ) ); + + + /* Valid pointers are passed for builds with MBEDTLS_CHECK_PARAMS, as + * otherwise we wouldn't get to the size check we're interested in. */ + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, length, data_unit, src, output ) == retval ); +exit: + ; +} + +void test_aes_crypt_xts_size_wrapper( void ** params ) +{ + + test_aes_crypt_xts_size( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_crypt_xts_keysize( int size, int retval ) +{ + mbedtls_aes_xts_context ctx; + const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + size_t key_len = size; + + mbedtls_aes_xts_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_enc( &ctx, key, key_len * 8 ) == retval ); + TEST_ASSERT( mbedtls_aes_xts_setkey_dec( &ctx, key, key_len * 8 ) == retval ); +exit: + mbedtls_aes_xts_free( &ctx ); +} + +void test_aes_crypt_xts_keysize_wrapper( void ** params ) +{ + + test_aes_crypt_xts_keysize( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_encrypt_cfb128( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_ENCRYPT, 16, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cfb128_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cfb128( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_decrypt_cfb128( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_DECRYPT, 16, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cfb128_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cfb128( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_encrypt_cfb8( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cfb8_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cfb8( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_decrypt_cfb8( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cfb8_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cfb8( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_OFB) +void test_aes_encrypt_ofb( int fragment_size, data_t *key_str, + data_t *iv_str, data_t *src_str, + data_t *expected_output ) +{ + unsigned char output[32]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + int in_buffer_len; + unsigned char* src_str_next; + + memset( output, 0x00, sizeof( output ) ); + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( (size_t)fragment_size < sizeof( output ) ); + + TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str->x, + key_str->len * 8 ) == 0 ); + in_buffer_len = src_str->len; + src_str_next = src_str->x; + + while( in_buffer_len > 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ofb( &ctx, fragment_size, &iv_offset, + iv_str->x, src_str_next, output ) == 0 ); + + TEST_ASSERT( memcmp( output, expected_output->x, fragment_size ) == 0 ); + + in_buffer_len -= fragment_size; + expected_output->x += fragment_size; + src_str_next += fragment_size; + + if( in_buffer_len < fragment_size ) + fragment_size = in_buffer_len; + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_ofb_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + + test_aes_encrypt_ofb( *( (int *) params[0] ), &data1, &data3, &data5, &data7 ); +} +#endif /* MBEDTLS_CIPHER_MODE_OFB */ +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_aes_check_params( ) +{ + mbedtls_aes_context aes_ctx; +#if defined(MBEDTLS_CIPHER_MODE_XTS) + mbedtls_aes_xts_context xts_ctx; +#endif + const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const unsigned char in[16] = { 0 }; + unsigned char out[16]; + size_t size; + const int valid_mode = MBEDTLS_AES_ENCRYPT; + const int invalid_mode = 42; + + TEST_INVALID_PARAM( mbedtls_aes_init( NULL ) ); +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM( mbedtls_aes_xts_init( NULL ) ); +#endif + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_enc( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_enc( &aes_ctx, NULL, 128 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_dec( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_dec( &aes_ctx, NULL, 128 ) ); + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_enc( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_enc( &xts_ctx, NULL, 128 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_dec( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_dec( &xts_ctx, NULL, 128 ) ); +#endif + + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( NULL, + valid_mode, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + invalid_mode, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + valid_mode, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + valid_mode, in, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( NULL, + valid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + invalid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( NULL, + valid_mode, 16, + in, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + invalid_mode, 16, + in, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + in, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + in, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_XTS */ + +#if defined(MBEDTLS_CIPHER_MODE_CFB) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( NULL, + valid_mode, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + invalid_mode, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + NULL, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, out, in, NULL ) ); + + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( NULL, + valid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + invalid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CFB */ + +#if defined(MBEDTLS_CIPHER_MODE_OFB) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( NULL, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + NULL, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_OFB */ + +#if defined(MBEDTLS_CIPHER_MODE_CTR) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( NULL, 16, &size, out, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, NULL, out, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, NULL, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CTR */ +exit: + ; +} + +void test_aes_check_params_wrapper( void ** params ) +{ + (void)params; + + test_aes_check_params( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_aes_misc_params( ) +{ +#if defined(MBEDTLS_CIPHER_MODE_CBC) || \ + defined(MBEDTLS_CIPHER_MODE_XTS) || \ + defined(MBEDTLS_CIPHER_MODE_CFB) || \ + defined(MBEDTLS_CIPHER_MODE_OFB) + mbedtls_aes_context aes_ctx; + const unsigned char in[16] = { 0 }; + unsigned char out[16]; +#endif +#if defined(MBEDTLS_CIPHER_MODE_XTS) + mbedtls_aes_xts_context xts_ctx; +#endif +#if defined(MBEDTLS_CIPHER_MODE_CFB) || \ + defined(MBEDTLS_CIPHER_MODE_OFB) + size_t size; +#endif + + /* These calls accept NULL */ + TEST_VALID_PARAM( mbedtls_aes_free( NULL ) ); +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_VALID_PARAM( mbedtls_aes_xts_free( NULL ) ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT, + 15, + out, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT, + 17, + out, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_ASSERT( mbedtls_aes_crypt_xts( &xts_ctx, MBEDTLS_AES_ENCRYPT, + 15, + in, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &xts_ctx, MBEDTLS_AES_ENCRYPT, + (1 << 24) + 1, + in, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CFB) + size = 16; + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &aes_ctx, MBEDTLS_AES_ENCRYPT, 16, + &size, out, in, out ) + == MBEDTLS_ERR_AES_BAD_INPUT_DATA ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_OFB) + size = 16; + TEST_ASSERT( mbedtls_aes_crypt_ofb( &aes_ctx, 16, &size, out, in, out ) + == MBEDTLS_ERR_AES_BAD_INPUT_DATA ); +#endif +exit: + ; +} + +void test_aes_misc_params_wrapper( void ** params ) +{ + (void)params; + + test_aes_misc_params( ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_aes_selftest( ) +{ + TEST_ASSERT( mbedtls_aes_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_aes_selftest_wrapper( void ** params ) +{ + (void)params; + + test_aes_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_AES_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_AES_C) + +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_AES_C) + + case 0: + { +#if defined(MBEDTLS_CIPHER_MODE_OFB) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_AES_C) + test_aes_encrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_AES_C) + test_aes_decrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_aes_encrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_aes_decrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_encrypt_xts_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_decrypt_xts_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_crypt_xts_size_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_crypt_xts_keysize_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_encrypt_cfb128_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_decrypt_cfb128_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_encrypt_cfb8_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_decrypt_cfb8_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_OFB) + test_aes_encrypt_ofb_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_aes_check_params_wrapper, +#else + NULL, +#endif +/* Function Id: 14 */ + +#if defined(MBEDTLS_AES_C) + test_aes_misc_params_wrapper, +#else + NULL, +#endif +/* Function Id: 15 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_SELF_TEST) + test_aes_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_aes.ofb.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_aes.ofb.datax b/third_party/mbedtls/test/test_suite_aes.ofb.datax new file mode 100644 index 000000000..2291d9e9f --- /dev/null +++ b/third_party/mbedtls/test/test_suite_aes.ofb.datax @@ -0,0 +1,32 @@ +OFB-AES128.Encrypt - Single block +depends_on:0 +12:int:16:hex:"2b7e151628aed2a6abf7158809cf4f3c":hex:"000102030405060708090a0b0c0d0e0f":hex:"6bc1bee22e409f96e93d7e117393172a":hex:"3b3fd92eb72dad20333449f8e83cfb4a" + +OFB-AES128.Encrypt - Partial blocks - 7 bytes +depends_on:0 +12:int:5:hex:"2b7e151628aed2a6abf7158809cf4f3c":hex:"000102030405060708090a0b0c0d0e0f":hex:"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710":hex:"3b3fd92eb72dad20333449f8e83cfb4a7789508d16918f03f53c52dac54ed8259740051e9c5fecf64344f7a82260edcc304c6528f659c77866a510d9c1d6ae5e" + +OFB-AES128.Encrypt - Test NIST SP800-38A - F.4.1 +depends_on:0 +12:int:16:hex:"2b7e151628aed2a6abf7158809cf4f3c":hex:"000102030405060708090a0b0c0d0e0f":hex:"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710":hex:"3b3fd92eb72dad20333449f8e83cfb4a7789508d16918f03f53c52dac54ed8259740051e9c5fecf64344f7a82260edcc304c6528f659c77866a510d9c1d6ae5e" + +OFB-AES128.Decrypt - Test NIST SP800-38A - F.4.2 +depends_on:0 +12:int:16:hex:"2b7e151628aed2a6abf7158809cf4f3c":hex:"000102030405060708090a0b0c0d0e0f":hex:"3b3fd92eb72dad20333449f8e83cfb4a7789508d16918f03f53c52dac54ed8259740051e9c5fecf64344f7a82260edcc304c6528f659c77866a510d9c1d6ae5e":hex:"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" + +OFB-AES192.Encrypt - Test NIST SP800-38A - F.4.3 +depends_on:0 +12:int:16:hex:"8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b":hex:"000102030405060708090a0b0c0d0e0f":hex:"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710":hex:"cdc80d6fddf18cab34c25909c99a4174fcc28b8d4c63837c09e81700c11004018d9a9aeac0f6596f559c6d4daf59a5f26d9f200857ca6c3e9cac524bd9acc92a" + +OFB-AES192.Decrypt - Test NIST SP800-38A - F.4.4 +depends_on:0 +12:int:16:hex:"8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b":hex:"000102030405060708090a0b0c0d0e0f":hex:"cdc80d6fddf18cab34c25909c99a4174fcc28b8d4c63837c09e81700c11004018d9a9aeac0f6596f559c6d4daf59a5f26d9f200857ca6c3e9cac524bd9acc92a":hex:"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" + +OFB-AES256.Encrypt - Test NIST SP800-38A - F.4.5 +depends_on:0 +12:int:16:hex:"603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4":hex:"000102030405060708090a0b0c0d0e0f":hex:"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710":hex:"dc7e84bfda79164b7ecd8486985d38604febdc6740d20b3ac88f6ad82a4fb08d71ab47a086e86eedf39d1c5bba97c4080126141d67f37be8538f5a8be740e484" + +OFB-AES256.Decrypt - Test NIST SP800-38A - F.4.6 +depends_on:0 +12:int:16:hex:"603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4":hex:"000102030405060708090a0b0c0d0e0f":hex:"dc7e84bfda79164b7ecd8486985d38604febdc6740d20b3ac88f6ad82a4fb08d71ab47a086e86eedf39d1c5bba97c4080126141d67f37be8538f5a8be740e484":hex:"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" + diff --git a/third_party/mbedtls/test/test_suite_aes.rest.c b/third_party/mbedtls/test/test_suite_aes.rest.c new file mode 100644 index 000000000..df5a6c6ab --- /dev/null +++ b/third_party/mbedtls/test/test_suite_aes.rest.c @@ -0,0 +1,1118 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_aes.rest.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_aes.function + * Test suite data : suites/test_suite_aes.rest.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +void test_aes_encrypt_ecb( data_t * key_str, data_t * src_str, + data_t * dst, int setkey_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); + if( setkey_result == 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_ENCRYPT, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_aes_encrypt_ecb( &data0, &data2, &data4, *( (int *) params[6] ) ); +} +void test_aes_decrypt_ecb( data_t * key_str, data_t * src_str, + data_t * dst, int setkey_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_setkey_dec( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); + if( setkey_result == 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_DECRYPT, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_aes_decrypt_ecb( &data0, &data2, &data4, *( (int *) params[6] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_aes_encrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, + int cbc_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_aes_decrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, + int cbc_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + mbedtls_aes_setkey_dec( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_encrypt_xts( char *hex_key_string, char *hex_data_unit_string, + char *hex_src_string, char *hex_dst_string ) +{ + enum { AES_BLOCK_SIZE = 16 }; + unsigned char *data_unit = NULL; + unsigned char *key = NULL; + unsigned char *src = NULL; + unsigned char *dst = NULL; + unsigned char *output = NULL; + mbedtls_aes_xts_context ctx; + size_t key_len, src_len, dst_len, data_unit_len; + + mbedtls_aes_xts_init( &ctx ); + + data_unit = mbedtls_test_unhexify_alloc( hex_data_unit_string, + &data_unit_len ); + TEST_ASSERT( data_unit_len == AES_BLOCK_SIZE ); + + key = mbedtls_test_unhexify_alloc( hex_key_string, &key_len ); + TEST_ASSERT( key_len % 2 == 0 ); + + src = mbedtls_test_unhexify_alloc( hex_src_string, &src_len ); + dst = mbedtls_test_unhexify_alloc( hex_dst_string, &dst_len ); + TEST_ASSERT( src_len == dst_len ); + + output = mbedtls_test_zero_alloc( dst_len ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_enc( &ctx, key, key_len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, src_len, + data_unit, src, output ) == 0 ); + + TEST_ASSERT( memcmp( output, dst, dst_len ) == 0 ); + +exit: + mbedtls_aes_xts_free( &ctx ); + mbedtls_free( data_unit ); + mbedtls_free( key ); + mbedtls_free( src ); + mbedtls_free( dst ); + mbedtls_free( output ); +} + +void test_aes_encrypt_xts_wrapper( void ** params ) +{ + + test_aes_encrypt_xts( (char *) params[0], (char *) params[1], (char *) params[2], (char *) params[3] ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_decrypt_xts( char *hex_key_string, char *hex_data_unit_string, + char *hex_dst_string, char *hex_src_string ) +{ + enum { AES_BLOCK_SIZE = 16 }; + unsigned char *data_unit = NULL; + unsigned char *key = NULL; + unsigned char *src = NULL; + unsigned char *dst = NULL; + unsigned char *output = NULL; + mbedtls_aes_xts_context ctx; + size_t key_len, src_len, dst_len, data_unit_len; + + mbedtls_aes_xts_init( &ctx ); + + data_unit = mbedtls_test_unhexify_alloc( hex_data_unit_string, + &data_unit_len ); + TEST_ASSERT( data_unit_len == AES_BLOCK_SIZE ); + + key = mbedtls_test_unhexify_alloc( hex_key_string, &key_len ); + TEST_ASSERT( key_len % 2 == 0 ); + + src = mbedtls_test_unhexify_alloc( hex_src_string, &src_len ); + dst = mbedtls_test_unhexify_alloc( hex_dst_string, &dst_len ); + TEST_ASSERT( src_len == dst_len ); + + output = mbedtls_test_zero_alloc( dst_len ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_dec( &ctx, key, key_len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_DECRYPT, src_len, + data_unit, src, output ) == 0 ); + + TEST_ASSERT( memcmp( output, dst, dst_len ) == 0 ); + +exit: + mbedtls_aes_xts_free( &ctx ); + mbedtls_free( data_unit ); + mbedtls_free( key ); + mbedtls_free( src ); + mbedtls_free( dst ); + mbedtls_free( output ); +} + +void test_aes_decrypt_xts_wrapper( void ** params ) +{ + + test_aes_decrypt_xts( (char *) params[0], (char *) params[1], (char *) params[2], (char *) params[3] ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_crypt_xts_size( int size, int retval ) +{ + mbedtls_aes_xts_context ctx; + const unsigned char src[16] = { 0 }; + unsigned char output[16]; + unsigned char data_unit[16]; + size_t length = size; + + mbedtls_aes_xts_init( &ctx ); + memset( data_unit, 0x00, sizeof( data_unit ) ); + + + /* Valid pointers are passed for builds with MBEDTLS_CHECK_PARAMS, as + * otherwise we wouldn't get to the size check we're interested in. */ + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, length, data_unit, src, output ) == retval ); +exit: + ; +} + +void test_aes_crypt_xts_size_wrapper( void ** params ) +{ + + test_aes_crypt_xts_size( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_crypt_xts_keysize( int size, int retval ) +{ + mbedtls_aes_xts_context ctx; + const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + size_t key_len = size; + + mbedtls_aes_xts_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_enc( &ctx, key, key_len * 8 ) == retval ); + TEST_ASSERT( mbedtls_aes_xts_setkey_dec( &ctx, key, key_len * 8 ) == retval ); +exit: + mbedtls_aes_xts_free( &ctx ); +} + +void test_aes_crypt_xts_keysize_wrapper( void ** params ) +{ + + test_aes_crypt_xts_keysize( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_encrypt_cfb128( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_ENCRYPT, 16, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cfb128_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cfb128( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_decrypt_cfb128( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_DECRYPT, 16, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cfb128_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cfb128( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_encrypt_cfb8( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cfb8_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cfb8( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_decrypt_cfb8( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cfb8_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cfb8( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_OFB) +void test_aes_encrypt_ofb( int fragment_size, data_t *key_str, + data_t *iv_str, data_t *src_str, + data_t *expected_output ) +{ + unsigned char output[32]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + int in_buffer_len; + unsigned char* src_str_next; + + memset( output, 0x00, sizeof( output ) ); + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( (size_t)fragment_size < sizeof( output ) ); + + TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str->x, + key_str->len * 8 ) == 0 ); + in_buffer_len = src_str->len; + src_str_next = src_str->x; + + while( in_buffer_len > 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ofb( &ctx, fragment_size, &iv_offset, + iv_str->x, src_str_next, output ) == 0 ); + + TEST_ASSERT( memcmp( output, expected_output->x, fragment_size ) == 0 ); + + in_buffer_len -= fragment_size; + expected_output->x += fragment_size; + src_str_next += fragment_size; + + if( in_buffer_len < fragment_size ) + fragment_size = in_buffer_len; + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_ofb_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + + test_aes_encrypt_ofb( *( (int *) params[0] ), &data1, &data3, &data5, &data7 ); +} +#endif /* MBEDTLS_CIPHER_MODE_OFB */ +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_aes_check_params( ) +{ + mbedtls_aes_context aes_ctx; +#if defined(MBEDTLS_CIPHER_MODE_XTS) + mbedtls_aes_xts_context xts_ctx; +#endif + const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const unsigned char in[16] = { 0 }; + unsigned char out[16]; + size_t size; + const int valid_mode = MBEDTLS_AES_ENCRYPT; + const int invalid_mode = 42; + + TEST_INVALID_PARAM( mbedtls_aes_init( NULL ) ); +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM( mbedtls_aes_xts_init( NULL ) ); +#endif + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_enc( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_enc( &aes_ctx, NULL, 128 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_dec( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_dec( &aes_ctx, NULL, 128 ) ); + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_enc( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_enc( &xts_ctx, NULL, 128 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_dec( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_dec( &xts_ctx, NULL, 128 ) ); +#endif + + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( NULL, + valid_mode, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + invalid_mode, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + valid_mode, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + valid_mode, in, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( NULL, + valid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + invalid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( NULL, + valid_mode, 16, + in, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + invalid_mode, 16, + in, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + in, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + in, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_XTS */ + +#if defined(MBEDTLS_CIPHER_MODE_CFB) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( NULL, + valid_mode, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + invalid_mode, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + NULL, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, out, in, NULL ) ); + + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( NULL, + valid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + invalid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CFB */ + +#if defined(MBEDTLS_CIPHER_MODE_OFB) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( NULL, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + NULL, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_OFB */ + +#if defined(MBEDTLS_CIPHER_MODE_CTR) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( NULL, 16, &size, out, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, NULL, out, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, NULL, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CTR */ +exit: + ; +} + +void test_aes_check_params_wrapper( void ** params ) +{ + (void)params; + + test_aes_check_params( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_aes_misc_params( ) +{ +#if defined(MBEDTLS_CIPHER_MODE_CBC) || \ + defined(MBEDTLS_CIPHER_MODE_XTS) || \ + defined(MBEDTLS_CIPHER_MODE_CFB) || \ + defined(MBEDTLS_CIPHER_MODE_OFB) + mbedtls_aes_context aes_ctx; + const unsigned char in[16] = { 0 }; + unsigned char out[16]; +#endif +#if defined(MBEDTLS_CIPHER_MODE_XTS) + mbedtls_aes_xts_context xts_ctx; +#endif +#if defined(MBEDTLS_CIPHER_MODE_CFB) || \ + defined(MBEDTLS_CIPHER_MODE_OFB) + size_t size; +#endif + + /* These calls accept NULL */ + TEST_VALID_PARAM( mbedtls_aes_free( NULL ) ); +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_VALID_PARAM( mbedtls_aes_xts_free( NULL ) ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT, + 15, + out, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT, + 17, + out, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_ASSERT( mbedtls_aes_crypt_xts( &xts_ctx, MBEDTLS_AES_ENCRYPT, + 15, + in, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &xts_ctx, MBEDTLS_AES_ENCRYPT, + (1 << 24) + 1, + in, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CFB) + size = 16; + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &aes_ctx, MBEDTLS_AES_ENCRYPT, 16, + &size, out, in, out ) + == MBEDTLS_ERR_AES_BAD_INPUT_DATA ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_OFB) + size = 16; + TEST_ASSERT( mbedtls_aes_crypt_ofb( &aes_ctx, 16, &size, out, in, out ) + == MBEDTLS_ERR_AES_BAD_INPUT_DATA ); +#endif +exit: + ; +} + +void test_aes_misc_params_wrapper( void ** params ) +{ + (void)params; + + test_aes_misc_params( ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_aes_selftest( ) +{ + TEST_ASSERT( mbedtls_aes_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_aes_selftest_wrapper( void ** params ) +{ + (void)params; + + test_aes_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_AES_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_AES_C) + + case 0: + { + *out_value = MBEDTLS_ERR_AES_INVALID_KEY_LENGTH; + } + break; + case 1: + { + *out_value = MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_AES_C) + + case 0: + { +#if defined(MBEDTLS_SELF_TEST) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_AES_C) + test_aes_encrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_AES_C) + test_aes_decrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_aes_encrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_aes_decrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_encrypt_xts_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_decrypt_xts_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_crypt_xts_size_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_crypt_xts_keysize_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_encrypt_cfb128_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_decrypt_cfb128_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_encrypt_cfb8_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_decrypt_cfb8_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_OFB) + test_aes_encrypt_ofb_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_aes_check_params_wrapper, +#else + NULL, +#endif +/* Function Id: 14 */ + +#if defined(MBEDTLS_AES_C) + test_aes_misc_params_wrapper, +#else + NULL, +#endif +/* Function Id: 15 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_SELF_TEST) + test_aes_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_aes.rest.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_aes.rest.datax b/third_party/mbedtls/test/test_suite_aes.rest.datax new file mode 100644 index 000000000..f3b9846ef --- /dev/null +++ b/third_party/mbedtls/test/test_suite_aes.rest.datax @@ -0,0 +1,22 @@ +AES-ECB Encrypt (Invalid keylength) +0:hex:"000000000000000000000000000000":hex:"f34481ec3cc627bacd5dc3fb08f273e6":hex:"0336763e966d92595a567cc9ce537f5e":exp:0 + +AES-ECB Decrypt (Invalid keylength) +1:hex:"000000000000000000000000000000":hex:"f34481ec3cc627bacd5dc3fb08f273e6":hex:"0336763e966d92595a567cc9ce537f5e":exp:0 + +AES-256-CBC Encrypt (Invalid input length) +2:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"ffffffffffffffe000000000000000":hex:"":exp:1 + +AES-256-CBC Decrypt (Invalid input length) +3:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"623a52fcea5d443e48d9181ab32c74":hex:"":exp:1 + +AES - Optional Parameter Validation (MBEDTLS_CHECK_PARAMS) +13 + +AES - Mandatory Parameter Validation and Valid Parameters +14 + +AES Selftest +depends_on:0 +15 + diff --git a/third_party/mbedtls/test/test_suite_aes.xts.c b/third_party/mbedtls/test/test_suite_aes.xts.c new file mode 100644 index 000000000..2dc30e0f9 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_aes.xts.c @@ -0,0 +1,1109 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_aes.xts.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_aes.function + * Test suite data : suites/test_suite_aes.xts.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +void test_aes_encrypt_ecb( data_t * key_str, data_t * src_str, + data_t * dst, int setkey_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); + if( setkey_result == 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_ENCRYPT, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_aes_encrypt_ecb( &data0, &data2, &data4, *( (int *) params[6] ) ); +} +void test_aes_decrypt_ecb( data_t * key_str, data_t * src_str, + data_t * dst, int setkey_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_setkey_dec( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); + if( setkey_result == 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ecb( &ctx, MBEDTLS_AES_DECRYPT, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_aes_decrypt_ecb( &data0, &data2, &data4, *( (int *) params[6] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_aes_encrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, + int cbc_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + + mbedtls_aes_init( &ctx ); + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_aes_decrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, + int cbc_result ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + mbedtls_aes_setkey_dec( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_encrypt_xts( char *hex_key_string, char *hex_data_unit_string, + char *hex_src_string, char *hex_dst_string ) +{ + enum { AES_BLOCK_SIZE = 16 }; + unsigned char *data_unit = NULL; + unsigned char *key = NULL; + unsigned char *src = NULL; + unsigned char *dst = NULL; + unsigned char *output = NULL; + mbedtls_aes_xts_context ctx; + size_t key_len, src_len, dst_len, data_unit_len; + + mbedtls_aes_xts_init( &ctx ); + + data_unit = mbedtls_test_unhexify_alloc( hex_data_unit_string, + &data_unit_len ); + TEST_ASSERT( data_unit_len == AES_BLOCK_SIZE ); + + key = mbedtls_test_unhexify_alloc( hex_key_string, &key_len ); + TEST_ASSERT( key_len % 2 == 0 ); + + src = mbedtls_test_unhexify_alloc( hex_src_string, &src_len ); + dst = mbedtls_test_unhexify_alloc( hex_dst_string, &dst_len ); + TEST_ASSERT( src_len == dst_len ); + + output = mbedtls_test_zero_alloc( dst_len ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_enc( &ctx, key, key_len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, src_len, + data_unit, src, output ) == 0 ); + + TEST_ASSERT( memcmp( output, dst, dst_len ) == 0 ); + +exit: + mbedtls_aes_xts_free( &ctx ); + mbedtls_free( data_unit ); + mbedtls_free( key ); + mbedtls_free( src ); + mbedtls_free( dst ); + mbedtls_free( output ); +} + +void test_aes_encrypt_xts_wrapper( void ** params ) +{ + + test_aes_encrypt_xts( (char *) params[0], (char *) params[1], (char *) params[2], (char *) params[3] ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_decrypt_xts( char *hex_key_string, char *hex_data_unit_string, + char *hex_dst_string, char *hex_src_string ) +{ + enum { AES_BLOCK_SIZE = 16 }; + unsigned char *data_unit = NULL; + unsigned char *key = NULL; + unsigned char *src = NULL; + unsigned char *dst = NULL; + unsigned char *output = NULL; + mbedtls_aes_xts_context ctx; + size_t key_len, src_len, dst_len, data_unit_len; + + mbedtls_aes_xts_init( &ctx ); + + data_unit = mbedtls_test_unhexify_alloc( hex_data_unit_string, + &data_unit_len ); + TEST_ASSERT( data_unit_len == AES_BLOCK_SIZE ); + + key = mbedtls_test_unhexify_alloc( hex_key_string, &key_len ); + TEST_ASSERT( key_len % 2 == 0 ); + + src = mbedtls_test_unhexify_alloc( hex_src_string, &src_len ); + dst = mbedtls_test_unhexify_alloc( hex_dst_string, &dst_len ); + TEST_ASSERT( src_len == dst_len ); + + output = mbedtls_test_zero_alloc( dst_len ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_dec( &ctx, key, key_len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_DECRYPT, src_len, + data_unit, src, output ) == 0 ); + + TEST_ASSERT( memcmp( output, dst, dst_len ) == 0 ); + +exit: + mbedtls_aes_xts_free( &ctx ); + mbedtls_free( data_unit ); + mbedtls_free( key ); + mbedtls_free( src ); + mbedtls_free( dst ); + mbedtls_free( output ); +} + +void test_aes_decrypt_xts_wrapper( void ** params ) +{ + + test_aes_decrypt_xts( (char *) params[0], (char *) params[1], (char *) params[2], (char *) params[3] ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_crypt_xts_size( int size, int retval ) +{ + mbedtls_aes_xts_context ctx; + const unsigned char src[16] = { 0 }; + unsigned char output[16]; + unsigned char data_unit[16]; + size_t length = size; + + mbedtls_aes_xts_init( &ctx ); + memset( data_unit, 0x00, sizeof( data_unit ) ); + + + /* Valid pointers are passed for builds with MBEDTLS_CHECK_PARAMS, as + * otherwise we wouldn't get to the size check we're interested in. */ + TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, length, data_unit, src, output ) == retval ); +exit: + ; +} + +void test_aes_crypt_xts_size_wrapper( void ** params ) +{ + + test_aes_crypt_xts_size( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_XTS) +void test_aes_crypt_xts_keysize( int size, int retval ) +{ + mbedtls_aes_xts_context ctx; + const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + size_t key_len = size; + + mbedtls_aes_xts_init( &ctx ); + + TEST_ASSERT( mbedtls_aes_xts_setkey_enc( &ctx, key, key_len * 8 ) == retval ); + TEST_ASSERT( mbedtls_aes_xts_setkey_dec( &ctx, key, key_len * 8 ) == retval ); +exit: + mbedtls_aes_xts_free( &ctx ); +} + +void test_aes_crypt_xts_keysize_wrapper( void ** params ) +{ + + test_aes_crypt_xts_keysize( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_XTS */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_encrypt_cfb128( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_ENCRYPT, 16, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cfb128_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cfb128( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_decrypt_cfb128( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &ctx, MBEDTLS_AES_DECRYPT, 16, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 16, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cfb128_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cfb128( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_encrypt_cfb8( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_cfb8_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_encrypt_cfb8( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_aes_decrypt_cfb8( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_aes_context ctx; + + memset(output, 0x00, 100); + mbedtls_aes_init( &ctx ); + + + mbedtls_aes_setkey_enc( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_aes_crypt_cfb8( &ctx, MBEDTLS_AES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_decrypt_cfb8_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_aes_decrypt_cfb8( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_OFB) +void test_aes_encrypt_ofb( int fragment_size, data_t *key_str, + data_t *iv_str, data_t *src_str, + data_t *expected_output ) +{ + unsigned char output[32]; + mbedtls_aes_context ctx; + size_t iv_offset = 0; + int in_buffer_len; + unsigned char* src_str_next; + + memset( output, 0x00, sizeof( output ) ); + mbedtls_aes_init( &ctx ); + + TEST_ASSERT( (size_t)fragment_size < sizeof( output ) ); + + TEST_ASSERT( mbedtls_aes_setkey_enc( &ctx, key_str->x, + key_str->len * 8 ) == 0 ); + in_buffer_len = src_str->len; + src_str_next = src_str->x; + + while( in_buffer_len > 0 ) + { + TEST_ASSERT( mbedtls_aes_crypt_ofb( &ctx, fragment_size, &iv_offset, + iv_str->x, src_str_next, output ) == 0 ); + + TEST_ASSERT( memcmp( output, expected_output->x, fragment_size ) == 0 ); + + in_buffer_len -= fragment_size; + expected_output->x += fragment_size; + src_str_next += fragment_size; + + if( in_buffer_len < fragment_size ) + fragment_size = in_buffer_len; + } + +exit: + mbedtls_aes_free( &ctx ); +} + +void test_aes_encrypt_ofb_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + + test_aes_encrypt_ofb( *( (int *) params[0] ), &data1, &data3, &data5, &data7 ); +} +#endif /* MBEDTLS_CIPHER_MODE_OFB */ +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_aes_check_params( ) +{ + mbedtls_aes_context aes_ctx; +#if defined(MBEDTLS_CIPHER_MODE_XTS) + mbedtls_aes_xts_context xts_ctx; +#endif + const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const unsigned char in[16] = { 0 }; + unsigned char out[16]; + size_t size; + const int valid_mode = MBEDTLS_AES_ENCRYPT; + const int invalid_mode = 42; + + TEST_INVALID_PARAM( mbedtls_aes_init( NULL ) ); +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM( mbedtls_aes_xts_init( NULL ) ); +#endif + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_enc( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_enc( &aes_ctx, NULL, 128 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_dec( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_setkey_dec( &aes_ctx, NULL, 128 ) ); + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_enc( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_enc( &xts_ctx, NULL, 128 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_dec( NULL, key, 128 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_xts_setkey_dec( &xts_ctx, NULL, 128 ) ); +#endif + + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( NULL, + valid_mode, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + invalid_mode, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + valid_mode, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ecb( &aes_ctx, + valid_mode, in, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( NULL, + valid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + invalid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cbc( &aes_ctx, + valid_mode, 16, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( NULL, + valid_mode, 16, + in, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + invalid_mode, 16, + in, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + in, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_xts( &xts_ctx, + valid_mode, 16, + in, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_XTS */ + +#if defined(MBEDTLS_CIPHER_MODE_CFB) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( NULL, + valid_mode, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + invalid_mode, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + NULL, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb128( &aes_ctx, + valid_mode, 16, + &size, out, in, NULL ) ); + + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( NULL, + valid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + invalid_mode, 16, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_cfb8( &aes_ctx, + valid_mode, 16, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CFB */ + +#if defined(MBEDTLS_CIPHER_MODE_OFB) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( NULL, 16, + &size, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + NULL, out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ofb( &aes_ctx, 16, + &size, out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_OFB */ + +#if defined(MBEDTLS_CIPHER_MODE_CTR) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( NULL, 16, &size, out, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, NULL, out, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, NULL, + out, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + NULL, in, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + out, NULL, out ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA, + mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out, + out, in, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CTR */ +exit: + ; +} + +void test_aes_check_params_wrapper( void ** params ) +{ + (void)params; + + test_aes_check_params( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_aes_misc_params( ) +{ +#if defined(MBEDTLS_CIPHER_MODE_CBC) || \ + defined(MBEDTLS_CIPHER_MODE_XTS) || \ + defined(MBEDTLS_CIPHER_MODE_CFB) || \ + defined(MBEDTLS_CIPHER_MODE_OFB) + mbedtls_aes_context aes_ctx; + const unsigned char in[16] = { 0 }; + unsigned char out[16]; +#endif +#if defined(MBEDTLS_CIPHER_MODE_XTS) + mbedtls_aes_xts_context xts_ctx; +#endif +#if defined(MBEDTLS_CIPHER_MODE_CFB) || \ + defined(MBEDTLS_CIPHER_MODE_OFB) + size_t size; +#endif + + /* These calls accept NULL */ + TEST_VALID_PARAM( mbedtls_aes_free( NULL ) ); +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_VALID_PARAM( mbedtls_aes_xts_free( NULL ) ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT, + 15, + out, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); + TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT, + 17, + out, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_XTS) + TEST_ASSERT( mbedtls_aes_crypt_xts( &xts_ctx, MBEDTLS_AES_ENCRYPT, + 15, + in, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); + TEST_ASSERT( mbedtls_aes_crypt_xts( &xts_ctx, MBEDTLS_AES_ENCRYPT, + (1 << 24) + 1, + in, in, out ) + == MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_CFB) + size = 16; + TEST_ASSERT( mbedtls_aes_crypt_cfb128( &aes_ctx, MBEDTLS_AES_ENCRYPT, 16, + &size, out, in, out ) + == MBEDTLS_ERR_AES_BAD_INPUT_DATA ); +#endif + +#if defined(MBEDTLS_CIPHER_MODE_OFB) + size = 16; + TEST_ASSERT( mbedtls_aes_crypt_ofb( &aes_ctx, 16, &size, out, in, out ) + == MBEDTLS_ERR_AES_BAD_INPUT_DATA ); +#endif +exit: + ; +} + +void test_aes_misc_params_wrapper( void ** params ) +{ + (void)params; + + test_aes_misc_params( ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_aes_selftest( ) +{ + TEST_ASSERT( mbedtls_aes_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_aes_selftest_wrapper( void ** params ) +{ + (void)params; + + test_aes_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_AES_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_AES_C) + + case 0: + { + *out_value = MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH; + } + break; + case 1: + { + *out_value = MBEDTLS_ERR_AES_INVALID_KEY_LENGTH; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_AES_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_AES_C) + test_aes_encrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_AES_C) + test_aes_decrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_aes_encrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_aes_decrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_encrypt_xts_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_decrypt_xts_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_crypt_xts_size_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_XTS) + test_aes_crypt_xts_keysize_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_encrypt_cfb128_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_decrypt_cfb128_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_encrypt_cfb8_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_aes_decrypt_cfb8_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CIPHER_MODE_OFB) + test_aes_encrypt_ofb_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_aes_check_params_wrapper, +#else + NULL, +#endif +/* Function Id: 14 */ + +#if defined(MBEDTLS_AES_C) + test_aes_misc_params_wrapper, +#else + NULL, +#endif +/* Function Id: 15 */ + +#if defined(MBEDTLS_AES_C) && defined(MBEDTLS_SELF_TEST) + test_aes_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_aes.xts.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_aes.xts.datax b/third_party/mbedtls/test/test_suite_aes.xts.datax new file mode 100644 index 000000000..23df25cca --- /dev/null +++ b/third_party/mbedtls/test/test_suite_aes.xts.datax @@ -0,0 +1,141 @@ +AES-128-XTS Encrypt Fail Sector Too Small (by 16 bytes) +6:int:0:exp:0 + +AES-128-XTS Encrypt Fail Sector Too Small (by 1 byte) +6:int:15:exp:0 + +AES-128-XTS Encrypt Fail Sector Too Large (by 1 byte) +6:int:16777217:exp:0 + +AES-128-XTS Encrypt Fail Sector Too Large (by 1 block) +6:int:16777232:exp:0 + +AES-0-XTS Setkey Fail Invalid Key Length +7:int:0:exp:1 + +AES-4-XTS Setkey Fail Invalid Key Length +7:int:1:exp:1 + +AES-64-XTS Setkey Fail Invalid Key Length +7:int:16:exp:1 + +AES-192-XTS Setkey Fail Invalid Key Length +7:int:48:exp:1 + +AES-384-XTS Setkey Fail Invalid Key Length +7:int:96:exp:1 + +AES-128-XTS Encrypt IEEE P1619/D16 Vector 1 +4:char*:"0000000000000000000000000000000000000000000000000000000000000000":char*:"00000000000000000000000000000000":char*:"0000000000000000000000000000000000000000000000000000000000000000":char*:"917cf69ebd68b2ec9b9fe9a3eadda692cd43d2f59598ed858c02c2652fbf922e" + +AES-128-XTS Encrypt IEEE P1619/D16 Vector 2 +4:char*:"1111111111111111111111111111111122222222222222222222222222222222":char*:"33333333330000000000000000000000":char*:"4444444444444444444444444444444444444444444444444444444444444444":char*:"c454185e6a16936e39334038acef838bfb186fff7480adc4289382ecd6d394f0" + +AES-128-XTS Encrypt IEEE P1619/D16 Vector 3 +4:char*:"fffefdfcfbfaf9f8f7f6f5f4f3f2f1f022222222222222222222222222222222":char*:"33333333330000000000000000000000":char*:"4444444444444444444444444444444444444444444444444444444444444444":char*:"af85336b597afc1a900b2eb21ec949d292df4c047e0b21532186a5971a227a89" + +AES-128-XTS Encrypt IEEE P1619/D16 Vector 4 +4:char*:"2718281828459045235360287471352631415926535897932384626433832795":char*:"00000000000000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568" + +AES-128-XTS Encrypt IEEE P1619/D16 Vector 5 +4:char*:"2718281828459045235360287471352631415926535897932384626433832795":char*:"01000000000000000000000000000000":char*:"27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568":char*:"264d3ca8512194fec312c8c9891f279fefdd608d0c027b60483a3fa811d65ee59d52d9e40ec5672d81532b38b6b089ce951f0f9c35590b8b978d175213f329bb1c2fd30f2f7f30492a61a532a79f51d36f5e31a7c9a12c286082ff7d2394d18f783e1a8e72c722caaaa52d8f065657d2631fd25bfd8e5baad6e527d763517501c68c5edc3cdd55435c532d7125c8614deed9adaa3acade5888b87bef641c4c994c8091b5bcd387f3963fb5bc37aa922fbfe3df4e5b915e6eb514717bdd2a74079a5073f5c4bfd46adf7d282e7a393a52579d11a028da4d9cd9c77124f9648ee383b1ac763930e7162a8d37f350b2f74b8472cf09902063c6b32e8c2d9290cefbd7346d1c779a0df50edcde4531da07b099c638e83a755944df2aef1aa31752fd323dcb710fb4bfbb9d22b925bc3577e1b8949e729a90bbafeacf7f7879e7b1147e28ba0bae940db795a61b15ecf4df8db07b824bb062802cc98a9545bb2aaeed77cb3fc6db15dcd7d80d7d5bc406c4970a3478ada8899b329198eb61c193fb6275aa8ca340344a75a862aebe92eee1ce032fd950b47d7704a3876923b4ad62844bf4a09c4dbe8b4397184b7471360c9564880aedddb9baa4af2e75394b08cd32ff479c57a07d3eab5d54de5f9738b8d27f27a9f0ab11799d7b7ffefb2704c95c6ad12c39f1e867a4b7b1d7818a4b753dfd2a89ccb45e001a03a867b187f225dd" + +AES-128-XTS Encrypt IEEE P1619/D16 Vector 6 +4:char*:"2718281828459045235360287471352631415926535897932384626433832795":char*:"02000000000000000000000000000000":char*:"264d3ca8512194fec312c8c9891f279fefdd608d0c027b60483a3fa811d65ee59d52d9e40ec5672d81532b38b6b089ce951f0f9c35590b8b978d175213f329bb1c2fd30f2f7f30492a61a532a79f51d36f5e31a7c9a12c286082ff7d2394d18f783e1a8e72c722caaaa52d8f065657d2631fd25bfd8e5baad6e527d763517501c68c5edc3cdd55435c532d7125c8614deed9adaa3acade5888b87bef641c4c994c8091b5bcd387f3963fb5bc37aa922fbfe3df4e5b915e6eb514717bdd2a74079a5073f5c4bfd46adf7d282e7a393a52579d11a028da4d9cd9c77124f9648ee383b1ac763930e7162a8d37f350b2f74b8472cf09902063c6b32e8c2d9290cefbd7346d1c779a0df50edcde4531da07b099c638e83a755944df2aef1aa31752fd323dcb710fb4bfbb9d22b925bc3577e1b8949e729a90bbafeacf7f7879e7b1147e28ba0bae940db795a61b15ecf4df8db07b824bb062802cc98a9545bb2aaeed77cb3fc6db15dcd7d80d7d5bc406c4970a3478ada8899b329198eb61c193fb6275aa8ca340344a75a862aebe92eee1ce032fd950b47d7704a3876923b4ad62844bf4a09c4dbe8b4397184b7471360c9564880aedddb9baa4af2e75394b08cd32ff479c57a07d3eab5d54de5f9738b8d27f27a9f0ab11799d7b7ffefb2704c95c6ad12c39f1e867a4b7b1d7818a4b753dfd2a89ccb45e001a03a867b187f225dd":char*:"fa762a3680b76007928ed4a4f49a9456031b704782e65e16cecb54ed7d017b5e18abd67b338e81078f21edb7868d901ebe9c731a7c18b5e6dec1d6a72e078ac9a4262f860beefa14f4e821018272e411a951502b6e79066e84252c3346f3aa62344351a291d4bedc7a07618bdea2af63145cc7a4b8d4070691ae890cd65733e7946e9021a1dffc4c59f159425ee6d50ca9b135fa6162cea18a939838dc000fb386fad086acce5ac07cb2ece7fd580b00cfa5e98589631dc25e8e2a3daf2ffdec26531659912c9d8f7a15e5865ea8fb5816d6207052bd7128cd743c12c8118791a4736811935eb982a532349e31dd401e0b660a568cb1a4711f552f55ded59f1f15bf7196b3ca12a91e488ef59d64f3a02bf45239499ac6176ae321c4a211ec545365971c5d3f4f09d4eb139bfdf2073d33180b21002b65cc9865e76cb24cd92c874c24c18350399a936ab3637079295d76c417776b94efce3a0ef7206b15110519655c956cbd8b2489405ee2b09a6b6eebe0c53790a12a8998378b33a5b71159625f4ba49d2a2fdba59fbf0897bc7aabd8d707dc140a80f0f309f835d3da54ab584e501dfa0ee977fec543f74186a802b9a37adb3e8291eca04d66520d229e60401e7282bef486ae059aa70696e0e305d777140a7a883ecdcb69b9ff938e8a4231864c69ca2c2043bed007ff3e605e014bcf518138dc3a25c5e236171a2d01d6" + +AES-128-XTS Encrypt IEEE P1619/D16 Vector 7 +4:char*:"2718281828459045235360287471352631415926535897932384626433832795":char*:"fd000000000000000000000000000000":char*:"8e41b78c390b5af9d758bb214a67e9f6bf7727b09ac6124084c37611398fa45daad94868600ed391fb1acd4857a95b466e62ef9f4b377244d1c152e7b30d731aad30c716d214b707aed99eb5b5e580b3e887cf7497465651d4b60e6042051da3693c3b78c14489543be8b6ad0ba629565bba202313ba7b0d0c94a3252b676f46cc02ce0f8a7d34c0ed229129673c1f61aed579d08a9203a25aac3a77e9db60267996db38df637356d9dcd1632e369939f2a29d89345c66e05066f1a3677aef18dea4113faeb629e46721a66d0a7e785d3e29af2594eb67dfa982affe0aac058f6e15864269b135418261fc3afb089472cf68c45dd7f231c6249ba0255e1e033833fc4d00a3fe02132d7bc3873614b8aee34273581ea0325c81f0270affa13641d052d36f0757d484014354d02d6883ca15c24d8c3956b1bd027bcf41f151fd8023c5340e5606f37e90fdb87c86fb4fa634b3718a30bace06a66eaf8f63c4aa3b637826a87fe8cfa44282e92cb1615af3a28e53bc74c7cba1a0977be9065d0c1a5dec6c54ae38d37f37aa35283e048e5530a85c4e7a29d7b92ec0c3169cdf2a805c7604bce60049b9fb7b8eaac10f51ae23794ceba68bb58112e293b9b692ca721b37c662f8574ed4dba6f88e170881c82cddc1034a0ca7e284bf0962b6b26292d836fa9f73c1ac770eef0f2d3a1eaf61d3e03555fd424eedd67e18a18094f888":char*:"d55f684f81f4426e9fde92a5ff02df2ac896af63962888a97910c1379e20b0a3b1db613fb7fe2e07004329ea5c22bfd33e3dbe4cf58cc608c2c26c19a2e2fe22f98732c2b5cb844cc6c0702d91e1d50fc4382a7eba5635cd602432a2306ac4ce82f8d70c8d9bc15f918fe71e74c622d5cf71178bf6e0b9cc9f2b41dd8dbe441c41cd0c73a6dc47a348f6702f9d0e9b1b1431e948e299b9ec2272ab2c5f0c7be86affa5dec87a0bee81d3d50007edaa2bcfccb35605155ff36ed8edd4a40dcd4b243acd11b2b987bdbfaf91a7cac27e9c5aea525ee53de7b2d3332c8644402b823e94a7db26276d2d23aa07180f76b4fd29b9c0823099c9d62c519880aee7e9697617c1497d47bf3e571950311421b6b734d38b0db91eb85331b91ea9f61530f54512a5a52a4bad589eb69781d537f23297bb459bdad2948a29e1550bf4787e0be95bb173cf5fab17dab7a13a052a63453d97ccec1a321954886b7a1299faaeecae35c6eaaca753b041b5e5f093bf83397fd21dd6b3012066fcc058cc32c3b09d7562dee29509b5839392c9ff05f51f3166aaac4ac5f238038a3045e6f72e48ef0fe8bc675e82c318a268e43970271bf119b81bf6a982746554f84e72b9f00280a320a08142923c23c883423ff949827f29bbacdc1ccdb04938ce6098c95ba6b32528f4ef78eed778b2e122ddfd1cbdd11d1c0a6783e011fc536d63d053260637" + +AES-128-XTS Encrypt IEEE P1619/D16 Vector 8 +4:char*:"2718281828459045235360287471352631415926535897932384626433832795":char*:"fe000000000000000000000000000000":char*:"d55f684f81f4426e9fde92a5ff02df2ac896af63962888a97910c1379e20b0a3b1db613fb7fe2e07004329ea5c22bfd33e3dbe4cf58cc608c2c26c19a2e2fe22f98732c2b5cb844cc6c0702d91e1d50fc4382a7eba5635cd602432a2306ac4ce82f8d70c8d9bc15f918fe71e74c622d5cf71178bf6e0b9cc9f2b41dd8dbe441c41cd0c73a6dc47a348f6702f9d0e9b1b1431e948e299b9ec2272ab2c5f0c7be86affa5dec87a0bee81d3d50007edaa2bcfccb35605155ff36ed8edd4a40dcd4b243acd11b2b987bdbfaf91a7cac27e9c5aea525ee53de7b2d3332c8644402b823e94a7db26276d2d23aa07180f76b4fd29b9c0823099c9d62c519880aee7e9697617c1497d47bf3e571950311421b6b734d38b0db91eb85331b91ea9f61530f54512a5a52a4bad589eb69781d537f23297bb459bdad2948a29e1550bf4787e0be95bb173cf5fab17dab7a13a052a63453d97ccec1a321954886b7a1299faaeecae35c6eaaca753b041b5e5f093bf83397fd21dd6b3012066fcc058cc32c3b09d7562dee29509b5839392c9ff05f51f3166aaac4ac5f238038a3045e6f72e48ef0fe8bc675e82c318a268e43970271bf119b81bf6a982746554f84e72b9f00280a320a08142923c23c883423ff949827f29bbacdc1ccdb04938ce6098c95ba6b32528f4ef78eed778b2e122ddfd1cbdd11d1c0a6783e011fc536d63d053260637":char*:"72efc1ebfe1ee25975a6eb3aa8589dda2b261f1c85bdab442a9e5b2dd1d7c3957a16fc08e526d4b1223f1b1232a11af274c3d70dac57f83e0983c498f1a6f1aecb021c3e70085a1e527f1ce41ee5911a82020161529cd82773762daf5459de94a0a82adae7e1703c808543c29ed6fb32d9e004327c1355180c995a07741493a09c21ba01a387882da4f62534b87bb15d60d197201c0fd3bf30c1500a3ecfecdd66d8721f90bcc4c17ee925c61b0a03727a9c0d5f5ca462fbfa0af1c2513a9d9d4b5345bd27a5f6e653f751693e6b6a2b8ead57d511e00e58c45b7b8d005af79288f5c7c22fd4f1bf7a898b03a5634c6a1ae3f9fae5de4f296a2896b23e7ed43ed14fa5a2803f4d28f0d3ffcf24757677aebdb47bb388378708948a8d4126ed1839e0da29a537a8c198b3c66ab00712dd261674bf45a73d67f76914f830ca014b65596f27e4cf62de66125a5566df9975155628b400fbfb3a29040ed50faffdbb18aece7c5c44693260aab386c0a37b11b114f1c415aebb653be468179428d43a4d8bc3ec38813eca30a13cf1bb18d524f1992d44d8b1a42ea30b22e6c95b199d8d182f8840b09d059585c31ad691fa0619ff038aca2c39a943421157361717c49d322028a74648113bd8c9d7ec77cf3c89c1ec8718ceff8516d96b34c3c614f10699c9abc4ed0411506223bea16af35c883accdbe1104eef0cfdb54e12fb230a" + +AES-128-XTS Encrypt IEEE P1619/D16 Vector 9 +4:char*:"2718281828459045235360287471352631415926535897932384626433832795":char*:"ff000000000000000000000000000000":char*:"72efc1ebfe1ee25975a6eb3aa8589dda2b261f1c85bdab442a9e5b2dd1d7c3957a16fc08e526d4b1223f1b1232a11af274c3d70dac57f83e0983c498f1a6f1aecb021c3e70085a1e527f1ce41ee5911a82020161529cd82773762daf5459de94a0a82adae7e1703c808543c29ed6fb32d9e004327c1355180c995a07741493a09c21ba01a387882da4f62534b87bb15d60d197201c0fd3bf30c1500a3ecfecdd66d8721f90bcc4c17ee925c61b0a03727a9c0d5f5ca462fbfa0af1c2513a9d9d4b5345bd27a5f6e653f751693e6b6a2b8ead57d511e00e58c45b7b8d005af79288f5c7c22fd4f1bf7a898b03a5634c6a1ae3f9fae5de4f296a2896b23e7ed43ed14fa5a2803f4d28f0d3ffcf24757677aebdb47bb388378708948a8d4126ed1839e0da29a537a8c198b3c66ab00712dd261674bf45a73d67f76914f830ca014b65596f27e4cf62de66125a5566df9975155628b400fbfb3a29040ed50faffdbb18aece7c5c44693260aab386c0a37b11b114f1c415aebb653be468179428d43a4d8bc3ec38813eca30a13cf1bb18d524f1992d44d8b1a42ea30b22e6c95b199d8d182f8840b09d059585c31ad691fa0619ff038aca2c39a943421157361717c49d322028a74648113bd8c9d7ec77cf3c89c1ec8718ceff8516d96b34c3c614f10699c9abc4ed0411506223bea16af35c883accdbe1104eef0cfdb54e12fb230a":char*:"3260ae8dad1f4a32c5cafe3ab0eb95549d461a67ceb9e5aa2d3afb62dece0553193ba50c75be251e08d1d08f1088576c7efdfaaf3f459559571e12511753b07af073f35da06af0ce0bbf6b8f5ccc5cea500ec1b211bd51f63b606bf6528796ca12173ba39b8935ee44ccce646f90a45bf9ccc567f0ace13dc2d53ebeedc81f58b2e41179dddf0d5a5c42f5d8506c1a5d2f8f59f3ea873cbcd0eec19acbf325423bd3dcb8c2b1bf1d1eaed0eba7f0698e4314fbeb2f1566d1b9253008cbccf45a2b0d9c5c9c21474f4076e02be26050b99dee4fd68a4cf890e496e4fcae7b70f94ea5a9062da0daeba1993d2ccd1dd3c244b8428801495a58b216547e7e847c46d1d756377b6242d2e5fb83bf752b54e0df71e889f3a2bb0f4c10805bf3c590376e3c24e22ff57f7fa965577375325cea5d920db94b9c336b455f6e894c01866fe9fbb8c8d3f70a2957285f6dfb5dcd8cbf54782f8fe7766d4723819913ac773421e3a31095866bad22c86a6036b2518b2059b4229d18c8c2ccbdf906c6cc6e82464ee57bddb0bebcb1dc645325bfb3e665ef7251082c88ebb1cf203bd779fdd38675713c8daadd17e1cabee432b09787b6ddf3304e38b731b45df5df51b78fcfb3d32466028d0ba36555e7e11ab0ee0666061d1645d962444bc47a38188930a84b4d561395c73c087021927ca638b7afc8a8679ccb84c26555440ec7f10445cd" + +AES-256-XTS Encrypt IEEE P1619/D16 Vector 10 +4:char*:"27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592":char*:"ff000000000000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"1c3b3a102f770386e4836c99e370cf9bea00803f5e482357a4ae12d414a3e63b5d31e276f8fe4a8d66b317f9ac683f44680a86ac35adfc3345befecb4bb188fd5776926c49a3095eb108fd1098baec70aaa66999a72a82f27d848b21d4a741b0c5cd4d5fff9dac89aeba122961d03a757123e9870f8acf1000020887891429ca2a3e7a7d7df7b10355165c8b9a6d0a7de8b062c4500dc4cd120c0f7418dae3d0b5781c34803fa75421c790dfe1de1834f280d7667b327f6c8cd7557e12ac3a0f93ec05c52e0493ef31a12d3d9260f79a289d6a379bc70c50841473d1a8cc81ec583e9645e07b8d9670655ba5bbcfecc6dc3966380ad8fecb17b6ba02469a020a84e18e8f84252070c13e9f1f289be54fbc481457778f616015e1327a02b140f1505eb309326d68378f8374595c849d84f4c333ec4423885143cb47bd71c5edae9be69a2ffeceb1bec9de244fbe15992b11b77c040f12bd8f6a975a44a0f90c29a9abc3d4d893927284c58754cce294529f8614dcd2aba991925fedc4ae74ffac6e333b93eb4aff0479da9a410e4450e0dd7ae4c6e2910900575da401fc07059f645e8b7e9bfdef33943054ff84011493c27b3429eaedb4ed5376441a77ed43851ad77f16f541dfd269d50d6a5f14fb0aab1cbb4c1550be97f7ab4066193c4caa773dad38014bd2092fa755c824bb5e54c4f36ffda9fcea70b9c6e693e148c151" + +AES-256-XTS Encrypt IEEE P1619/D16 Vector 11 +4:char*:"27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592":char*:"ffff0000000000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"77a31251618a15e6b92d1d66dffe7b50b50bad552305ba0217a610688eff7e11e1d0225438e093242d6db274fde801d4cae06f2092c728b2478559df58e837c2469ee4a4fa794e4bbc7f39bc026e3cb72c33b0888f25b4acf56a2a9804f1ce6d3d6e1dc6ca181d4b546179d55544aa7760c40d06741539c7e3cd9d2f6650b2013fd0eeb8c2b8e3d8d240ccae2d4c98320a7442e1c8d75a42d6e6cfa4c2eca1798d158c7aecdf82490f24bb9b38e108bcda12c3faf9a21141c3613b58367f922aaa26cd22f23d708dae699ad7cb40a8ad0b6e2784973dcb605684c08b8d6998c69aac049921871ebb65301a4619ca80ecb485a31d744223ce8ddc2394828d6a80470c092f5ba413c3378fa6054255c6f9df4495862bbb3287681f931b687c888abf844dfc8fc28331e579928cd12bd2390ae123cf03818d14dedde5c0c24c8ab018bfca75ca096f2d531f3d1619e785f1ada437cab92e980558b3dce1474afb75bfedbf8ff54cb2618e0244c9ac0d3c66fb51598cd2db11f9be39791abe447c63094f7c453b7ff87cb5bb36b7c79efb0872d17058b83b15ab0866ad8a58656c5a7e20dbdf308b2461d97c0ec0024a2715055249cf3b478ddd4740de654f75ca686e0d7345c69ed50cdc2a8b332b1f8824108ac937eb050585608ee734097fc09054fbff89eeaeea791f4a7ab1f9868294a4f9e27b42af8100cb9d59cef9645803" + +AES-256-XTS Encrypt IEEE P1619/D16 Vector 12 +4:char*:"27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592":char*:"ffffff00000000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"e387aaa58ba483afa7e8eb469778317ecf4cf573aa9d4eac23f2cdf914e4e200a8b490e42ee646802dc6ee2b471b278195d60918ececb44bf79966f83faba0499298ebc699c0c8634715a320bb4f075d622e74c8c932004f25b41e361025b5a87815391f6108fc4afa6a05d9303c6ba68a128a55705d415985832fdeaae6c8e19110e84d1b1f199a2692119edc96132658f09da7c623efcec712537a3d94c0bf5d7e352ec94ae5797fdb377dc1551150721adf15bd26a8efc2fcaad56881fa9e62462c28f30ae1ceaca93c345cf243b73f542e2074a705bd2643bb9f7cc79bb6e7091ea6e232df0f9ad0d6cf502327876d82207abf2115cdacf6d5a48f6c1879a65b115f0f8b3cb3c59d15dd8c769bc014795a1837f3901b5845eb491adfefe097b1fa30a12fc1f65ba22905031539971a10f2f36c321bb51331cdefb39e3964c7ef079994f5b69b2edd83a71ef549971ee93f44eac3938fcdd61d01fa71799da3a8091c4c48aa9ed263ff0749df95d44fef6a0bb578ec69456aa5408ae32c7af08ad7ba8921287e3bbee31b767be06a0e705c864a769137df28292283ea81a2480241b44d9921cdbec1bc28dc1fda114bd8e5217ac9d8ebafa720e9da4f9ace231cc949e5b96fe76ffc21063fddc83a6b8679c00d35e09576a875305bed5f36ed242c8900dd1fa965bc950dfce09b132263a1eef52dd6888c309f5a7d712826" + +AES-256-XTS Encrypt IEEE P1619/D16 Vector 13 +4:char*:"27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592":char*:"ffffffff000000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"bf53d2dade78e822a4d949a9bc6766b01b06a8ef70d26748c6a7fc36d80ae4c5520f7c4ab0ac8544424fa405162fef5a6b7f229498063618d39f0003cb5fb8d1c86b643497da1ff945c8d3bedeca4f479702a7a735f043ddb1d6aaade3c4a0ac7ca7f3fa5279bef56f82cd7a2f38672e824814e10700300a055e1630b8f1cb0e919f5e942010a416e2bf48cb46993d3cb6a51c19bacf864785a00bc2ecff15d350875b246ed53e68be6f55bd7e05cfc2b2ed6432198a6444b6d8c247fab941f569768b5c429366f1d3f00f0345b96123d56204c01c63b22ce78baf116e525ed90fdea39fa469494d3866c31e05f295ff21fea8d4e6e13d67e47ce722e9698a1c1048d68ebcde76b86fcf976eab8aa9790268b7068e017a8b9b749409514f1053027fd16c3786ea1bac5f15cb79711ee2abe82f5cf8b13ae73030ef5b9e4457e75d1304f988d62dd6fc4b94ed38ba831da4b7634971b6cd8ec325d9c61c00f1df73627ed3745a5e8489f3a95c69639c32cd6e1d537a85f75cc844726e8a72fc0077ad22000f1d5078f6b866318c668f1ad03d5a5fced5219f2eabbd0aa5c0f460d183f04404a0d6f469558e81fab24a167905ab4c7878502ad3e38fdbe62a41556cec37325759533ce8f25f367c87bb5578d667ae93f9e2fd99bcbc5f2fbba88cf6516139420fcff3b7361d86322c4bd84c82f335abb152c4a93411373aaa8220" + +AES-256-XTS Encrypt IEEE P1619/D16 Vector 14 +4:char*:"27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592":char*:"ffffffffff0000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"64497e5a831e4a932c09be3e5393376daa599548b816031d224bbf50a818ed2350eae7e96087c8a0db51ad290bd00c1ac1620857635bf246c176ab463be30b808da548081ac847b158e1264be25bb0910bbc92647108089415d45fab1b3d2604e8a8eff1ae4020cfa39936b66827b23f371b92200be90251e6d73c5f86de5fd4a950781933d79a28272b782a2ec313efdfcc0628f43d744c2dc2ff3dcb66999b50c7ca895b0c64791eeaa5f29499fb1c026f84ce5b5c72ba1083cddb5ce45434631665c333b60b11593fb253c5179a2c8db813782a004856a1653011e93fb6d876c18366dd8683f53412c0c180f9c848592d593f8609ca736317d356e13e2bff3a9f59cd9aeb19cd482593d8c46128bb32423b37a9adfb482b99453fbe25a41bf6feb4aa0bef5ed24bf73c762978025482c13115e4015aac992e5613a3b5c2f685b84795cb6e9b2656d8c88157e52c42f978d8634c43d06fea928f2822e465aa6576e9bf419384506cc3ce3c54ac1a6f67dc66f3b30191e698380bc999b05abce19dc0c6dcc2dd001ec535ba18deb2df1a101023108318c75dc98611a09dc48a0acdec676fabdf222f07e026f059b672b56e5cbc8e1d21bbd867dd927212054681d70ea737134cdfce93b6f82ae22423274e58a0821cc5502e2d0ab4585e94de6975be5e0b4efce51cd3e70c25a1fbbbd609d273ad5b0d59631c531f6a0a57b9" + +AES-128-XTS Encrypt IEEE P1619/D16 Vector 15 +4:char*:"fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0":char*:"9a785634120000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f10":char*:"6c1625db4671522d3d7599601de7ca09ed" + +AES-128-XTS Encrypt IEEE P1619/D16 Vector 16 +4:char*:"fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0":char*:"9a785634120000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f1011":char*:"d069444b7a7e0cab09e24447d24deb1fedbf" + +AES-128-XTS Encrypt IEEE P1619/D16 Vector 17 +4:char*:"fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0":char*:"9a785634120000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112":char*:"e5df1351c0544ba1350b3363cd8ef4beedbf9d" + +AES-128-XTS Encrypt IEEE P1619/D16 Vector 18 +4:char*:"fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0":char*:"9a785634120000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f10111213":char*:"9d84c813f719aa2c7be3f66171c7c5c2edbf9dac" + +AES-128-XTS Encrypt IEEE P1619/D16 Vector 19 +4:char*:"e0e1e2e3e4e5e6e7e8e9eaebecedeeefc0c1c2c3c4c5c6c7c8c9cacbcccdcecf":char*:"21436587a90000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"38b45812ef43a05bd957e545907e223b954ab4aaf088303ad910eadf14b42be68b2461149d8c8ba85f992be970bc621f1b06573f63e867bf5875acafa04e42ccbd7bd3c2a0fb1fff791ec5ec36c66ae4ac1e806d81fbf709dbe29e471fad38549c8e66f5345d7c1eb94f405d1ec785cc6f6a68f6254dd8339f9d84057e01a17741990482999516b5611a38f41bb6478e6f173f320805dd71b1932fc333cb9ee39936beea9ad96fa10fb4112b901734ddad40bc1878995f8e11aee7d141a2f5d48b7a4e1e7f0b2c04830e69a4fd1378411c2f287edf48c6c4e5c247a19680f7fe41cefbd49b582106e3616cbbe4dfb2344b2ae9519391f3e0fb4922254b1d6d2d19c6d4d537b3a26f3bcc51588b32f3eca0829b6a5ac72578fb814fb43cf80d64a233e3f997a3f02683342f2b33d25b492536b93becb2f5e1a8b82f5b883342729e8ae09d16938841a21a97fb543eea3bbff59f13c1a18449e398701c1ad51648346cbc04c27bb2da3b93a1372ccae548fb53bee476f9e9c91773b1bb19828394d55d3e1a20ed69113a860b6829ffa847224604435070221b257e8dff783615d2cae4803a93aa4334ab482a0afac9c0aeda70b45a481df5dec5df8cc0f423c77a5fd46cd312021d4b438862419a791be03bb4d97c0e59578542531ba466a83baf92cefc151b5cc1611a167893819b63fb8a6b18e86de60290fa72b797b0ce59f3" + +AES-128-XTS Decrypt IEEE P1619/D16 Vector 1 +5:char*:"0000000000000000000000000000000000000000000000000000000000000000":char*:"00000000000000000000000000000000":char*:"0000000000000000000000000000000000000000000000000000000000000000":char*:"917cf69ebd68b2ec9b9fe9a3eadda692cd43d2f59598ed858c02c2652fbf922e" + +AES-128-XTS Decrypt IEEE P1619/D16 Vector 2 +5:char*:"1111111111111111111111111111111122222222222222222222222222222222":char*:"33333333330000000000000000000000":char*:"4444444444444444444444444444444444444444444444444444444444444444":char*:"c454185e6a16936e39334038acef838bfb186fff7480adc4289382ecd6d394f0" + +AES-128-XTS Decrypt IEEE P1619/D16 Vector 3 +5:char*:"2718281828459045235360287471352631415926535897932384626433832795":char*:"00000000000000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568" + +AES-128-XTS Decrypt IEEE P1619/D16 Vector 4 +5:char*:"2718281828459045235360287471352631415926535897932384626433832795":char*:"00000000000000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568" + +AES-128-XTS Decrypt IEEE P1619/D16 Vector 5 +5:char*:"2718281828459045235360287471352631415926535897932384626433832795":char*:"01000000000000000000000000000000":char*:"27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568":char*:"264d3ca8512194fec312c8c9891f279fefdd608d0c027b60483a3fa811d65ee59d52d9e40ec5672d81532b38b6b089ce951f0f9c35590b8b978d175213f329bb1c2fd30f2f7f30492a61a532a79f51d36f5e31a7c9a12c286082ff7d2394d18f783e1a8e72c722caaaa52d8f065657d2631fd25bfd8e5baad6e527d763517501c68c5edc3cdd55435c532d7125c8614deed9adaa3acade5888b87bef641c4c994c8091b5bcd387f3963fb5bc37aa922fbfe3df4e5b915e6eb514717bdd2a74079a5073f5c4bfd46adf7d282e7a393a52579d11a028da4d9cd9c77124f9648ee383b1ac763930e7162a8d37f350b2f74b8472cf09902063c6b32e8c2d9290cefbd7346d1c779a0df50edcde4531da07b099c638e83a755944df2aef1aa31752fd323dcb710fb4bfbb9d22b925bc3577e1b8949e729a90bbafeacf7f7879e7b1147e28ba0bae940db795a61b15ecf4df8db07b824bb062802cc98a9545bb2aaeed77cb3fc6db15dcd7d80d7d5bc406c4970a3478ada8899b329198eb61c193fb6275aa8ca340344a75a862aebe92eee1ce032fd950b47d7704a3876923b4ad62844bf4a09c4dbe8b4397184b7471360c9564880aedddb9baa4af2e75394b08cd32ff479c57a07d3eab5d54de5f9738b8d27f27a9f0ab11799d7b7ffefb2704c95c6ad12c39f1e867a4b7b1d7818a4b753dfd2a89ccb45e001a03a867b187f225dd" + +AES-128-XTS Decrypt IEEE P1619/D16 Vector 6 +5:char*:"2718281828459045235360287471352631415926535897932384626433832795":char*:"02000000000000000000000000000000":char*:"264d3ca8512194fec312c8c9891f279fefdd608d0c027b60483a3fa811d65ee59d52d9e40ec5672d81532b38b6b089ce951f0f9c35590b8b978d175213f329bb1c2fd30f2f7f30492a61a532a79f51d36f5e31a7c9a12c286082ff7d2394d18f783e1a8e72c722caaaa52d8f065657d2631fd25bfd8e5baad6e527d763517501c68c5edc3cdd55435c532d7125c8614deed9adaa3acade5888b87bef641c4c994c8091b5bcd387f3963fb5bc37aa922fbfe3df4e5b915e6eb514717bdd2a74079a5073f5c4bfd46adf7d282e7a393a52579d11a028da4d9cd9c77124f9648ee383b1ac763930e7162a8d37f350b2f74b8472cf09902063c6b32e8c2d9290cefbd7346d1c779a0df50edcde4531da07b099c638e83a755944df2aef1aa31752fd323dcb710fb4bfbb9d22b925bc3577e1b8949e729a90bbafeacf7f7879e7b1147e28ba0bae940db795a61b15ecf4df8db07b824bb062802cc98a9545bb2aaeed77cb3fc6db15dcd7d80d7d5bc406c4970a3478ada8899b329198eb61c193fb6275aa8ca340344a75a862aebe92eee1ce032fd950b47d7704a3876923b4ad62844bf4a09c4dbe8b4397184b7471360c9564880aedddb9baa4af2e75394b08cd32ff479c57a07d3eab5d54de5f9738b8d27f27a9f0ab11799d7b7ffefb2704c95c6ad12c39f1e867a4b7b1d7818a4b753dfd2a89ccb45e001a03a867b187f225dd":char*:"fa762a3680b76007928ed4a4f49a9456031b704782e65e16cecb54ed7d017b5e18abd67b338e81078f21edb7868d901ebe9c731a7c18b5e6dec1d6a72e078ac9a4262f860beefa14f4e821018272e411a951502b6e79066e84252c3346f3aa62344351a291d4bedc7a07618bdea2af63145cc7a4b8d4070691ae890cd65733e7946e9021a1dffc4c59f159425ee6d50ca9b135fa6162cea18a939838dc000fb386fad086acce5ac07cb2ece7fd580b00cfa5e98589631dc25e8e2a3daf2ffdec26531659912c9d8f7a15e5865ea8fb5816d6207052bd7128cd743c12c8118791a4736811935eb982a532349e31dd401e0b660a568cb1a4711f552f55ded59f1f15bf7196b3ca12a91e488ef59d64f3a02bf45239499ac6176ae321c4a211ec545365971c5d3f4f09d4eb139bfdf2073d33180b21002b65cc9865e76cb24cd92c874c24c18350399a936ab3637079295d76c417776b94efce3a0ef7206b15110519655c956cbd8b2489405ee2b09a6b6eebe0c53790a12a8998378b33a5b71159625f4ba49d2a2fdba59fbf0897bc7aabd8d707dc140a80f0f309f835d3da54ab584e501dfa0ee977fec543f74186a802b9a37adb3e8291eca04d66520d229e60401e7282bef486ae059aa70696e0e305d777140a7a883ecdcb69b9ff938e8a4231864c69ca2c2043bed007ff3e605e014bcf518138dc3a25c5e236171a2d01d6" + +AES-128-XTS Decrypt IEEE P1619/D16 Vector 7 +5:char*:"2718281828459045235360287471352631415926535897932384626433832795":char*:"fd000000000000000000000000000000":char*:"8e41b78c390b5af9d758bb214a67e9f6bf7727b09ac6124084c37611398fa45daad94868600ed391fb1acd4857a95b466e62ef9f4b377244d1c152e7b30d731aad30c716d214b707aed99eb5b5e580b3e887cf7497465651d4b60e6042051da3693c3b78c14489543be8b6ad0ba629565bba202313ba7b0d0c94a3252b676f46cc02ce0f8a7d34c0ed229129673c1f61aed579d08a9203a25aac3a77e9db60267996db38df637356d9dcd1632e369939f2a29d89345c66e05066f1a3677aef18dea4113faeb629e46721a66d0a7e785d3e29af2594eb67dfa982affe0aac058f6e15864269b135418261fc3afb089472cf68c45dd7f231c6249ba0255e1e033833fc4d00a3fe02132d7bc3873614b8aee34273581ea0325c81f0270affa13641d052d36f0757d484014354d02d6883ca15c24d8c3956b1bd027bcf41f151fd8023c5340e5606f37e90fdb87c86fb4fa634b3718a30bace06a66eaf8f63c4aa3b637826a87fe8cfa44282e92cb1615af3a28e53bc74c7cba1a0977be9065d0c1a5dec6c54ae38d37f37aa35283e048e5530a85c4e7a29d7b92ec0c3169cdf2a805c7604bce60049b9fb7b8eaac10f51ae23794ceba68bb58112e293b9b692ca721b37c662f8574ed4dba6f88e170881c82cddc1034a0ca7e284bf0962b6b26292d836fa9f73c1ac770eef0f2d3a1eaf61d3e03555fd424eedd67e18a18094f888":char*:"d55f684f81f4426e9fde92a5ff02df2ac896af63962888a97910c1379e20b0a3b1db613fb7fe2e07004329ea5c22bfd33e3dbe4cf58cc608c2c26c19a2e2fe22f98732c2b5cb844cc6c0702d91e1d50fc4382a7eba5635cd602432a2306ac4ce82f8d70c8d9bc15f918fe71e74c622d5cf71178bf6e0b9cc9f2b41dd8dbe441c41cd0c73a6dc47a348f6702f9d0e9b1b1431e948e299b9ec2272ab2c5f0c7be86affa5dec87a0bee81d3d50007edaa2bcfccb35605155ff36ed8edd4a40dcd4b243acd11b2b987bdbfaf91a7cac27e9c5aea525ee53de7b2d3332c8644402b823e94a7db26276d2d23aa07180f76b4fd29b9c0823099c9d62c519880aee7e9697617c1497d47bf3e571950311421b6b734d38b0db91eb85331b91ea9f61530f54512a5a52a4bad589eb69781d537f23297bb459bdad2948a29e1550bf4787e0be95bb173cf5fab17dab7a13a052a63453d97ccec1a321954886b7a1299faaeecae35c6eaaca753b041b5e5f093bf83397fd21dd6b3012066fcc058cc32c3b09d7562dee29509b5839392c9ff05f51f3166aaac4ac5f238038a3045e6f72e48ef0fe8bc675e82c318a268e43970271bf119b81bf6a982746554f84e72b9f00280a320a08142923c23c883423ff949827f29bbacdc1ccdb04938ce6098c95ba6b32528f4ef78eed778b2e122ddfd1cbdd11d1c0a6783e011fc536d63d053260637" + +AES-128-XTS Decrypt IEEE P1619/D16 Vector 8 +5:char*:"2718281828459045235360287471352631415926535897932384626433832795":char*:"fe000000000000000000000000000000":char*:"d55f684f81f4426e9fde92a5ff02df2ac896af63962888a97910c1379e20b0a3b1db613fb7fe2e07004329ea5c22bfd33e3dbe4cf58cc608c2c26c19a2e2fe22f98732c2b5cb844cc6c0702d91e1d50fc4382a7eba5635cd602432a2306ac4ce82f8d70c8d9bc15f918fe71e74c622d5cf71178bf6e0b9cc9f2b41dd8dbe441c41cd0c73a6dc47a348f6702f9d0e9b1b1431e948e299b9ec2272ab2c5f0c7be86affa5dec87a0bee81d3d50007edaa2bcfccb35605155ff36ed8edd4a40dcd4b243acd11b2b987bdbfaf91a7cac27e9c5aea525ee53de7b2d3332c8644402b823e94a7db26276d2d23aa07180f76b4fd29b9c0823099c9d62c519880aee7e9697617c1497d47bf3e571950311421b6b734d38b0db91eb85331b91ea9f61530f54512a5a52a4bad589eb69781d537f23297bb459bdad2948a29e1550bf4787e0be95bb173cf5fab17dab7a13a052a63453d97ccec1a321954886b7a1299faaeecae35c6eaaca753b041b5e5f093bf83397fd21dd6b3012066fcc058cc32c3b09d7562dee29509b5839392c9ff05f51f3166aaac4ac5f238038a3045e6f72e48ef0fe8bc675e82c318a268e43970271bf119b81bf6a982746554f84e72b9f00280a320a08142923c23c883423ff949827f29bbacdc1ccdb04938ce6098c95ba6b32528f4ef78eed778b2e122ddfd1cbdd11d1c0a6783e011fc536d63d053260637":char*:"72efc1ebfe1ee25975a6eb3aa8589dda2b261f1c85bdab442a9e5b2dd1d7c3957a16fc08e526d4b1223f1b1232a11af274c3d70dac57f83e0983c498f1a6f1aecb021c3e70085a1e527f1ce41ee5911a82020161529cd82773762daf5459de94a0a82adae7e1703c808543c29ed6fb32d9e004327c1355180c995a07741493a09c21ba01a387882da4f62534b87bb15d60d197201c0fd3bf30c1500a3ecfecdd66d8721f90bcc4c17ee925c61b0a03727a9c0d5f5ca462fbfa0af1c2513a9d9d4b5345bd27a5f6e653f751693e6b6a2b8ead57d511e00e58c45b7b8d005af79288f5c7c22fd4f1bf7a898b03a5634c6a1ae3f9fae5de4f296a2896b23e7ed43ed14fa5a2803f4d28f0d3ffcf24757677aebdb47bb388378708948a8d4126ed1839e0da29a537a8c198b3c66ab00712dd261674bf45a73d67f76914f830ca014b65596f27e4cf62de66125a5566df9975155628b400fbfb3a29040ed50faffdbb18aece7c5c44693260aab386c0a37b11b114f1c415aebb653be468179428d43a4d8bc3ec38813eca30a13cf1bb18d524f1992d44d8b1a42ea30b22e6c95b199d8d182f8840b09d059585c31ad691fa0619ff038aca2c39a943421157361717c49d322028a74648113bd8c9d7ec77cf3c89c1ec8718ceff8516d96b34c3c614f10699c9abc4ed0411506223bea16af35c883accdbe1104eef0cfdb54e12fb230a" + +AES-128-XTS Decrypt IEEE P1619/D16 Vector 9 +5:char*:"2718281828459045235360287471352631415926535897932384626433832795":char*:"ff000000000000000000000000000000":char*:"72efc1ebfe1ee25975a6eb3aa8589dda2b261f1c85bdab442a9e5b2dd1d7c3957a16fc08e526d4b1223f1b1232a11af274c3d70dac57f83e0983c498f1a6f1aecb021c3e70085a1e527f1ce41ee5911a82020161529cd82773762daf5459de94a0a82adae7e1703c808543c29ed6fb32d9e004327c1355180c995a07741493a09c21ba01a387882da4f62534b87bb15d60d197201c0fd3bf30c1500a3ecfecdd66d8721f90bcc4c17ee925c61b0a03727a9c0d5f5ca462fbfa0af1c2513a9d9d4b5345bd27a5f6e653f751693e6b6a2b8ead57d511e00e58c45b7b8d005af79288f5c7c22fd4f1bf7a898b03a5634c6a1ae3f9fae5de4f296a2896b23e7ed43ed14fa5a2803f4d28f0d3ffcf24757677aebdb47bb388378708948a8d4126ed1839e0da29a537a8c198b3c66ab00712dd261674bf45a73d67f76914f830ca014b65596f27e4cf62de66125a5566df9975155628b400fbfb3a29040ed50faffdbb18aece7c5c44693260aab386c0a37b11b114f1c415aebb653be468179428d43a4d8bc3ec38813eca30a13cf1bb18d524f1992d44d8b1a42ea30b22e6c95b199d8d182f8840b09d059585c31ad691fa0619ff038aca2c39a943421157361717c49d322028a74648113bd8c9d7ec77cf3c89c1ec8718ceff8516d96b34c3c614f10699c9abc4ed0411506223bea16af35c883accdbe1104eef0cfdb54e12fb230a":char*:"3260ae8dad1f4a32c5cafe3ab0eb95549d461a67ceb9e5aa2d3afb62dece0553193ba50c75be251e08d1d08f1088576c7efdfaaf3f459559571e12511753b07af073f35da06af0ce0bbf6b8f5ccc5cea500ec1b211bd51f63b606bf6528796ca12173ba39b8935ee44ccce646f90a45bf9ccc567f0ace13dc2d53ebeedc81f58b2e41179dddf0d5a5c42f5d8506c1a5d2f8f59f3ea873cbcd0eec19acbf325423bd3dcb8c2b1bf1d1eaed0eba7f0698e4314fbeb2f1566d1b9253008cbccf45a2b0d9c5c9c21474f4076e02be26050b99dee4fd68a4cf890e496e4fcae7b70f94ea5a9062da0daeba1993d2ccd1dd3c244b8428801495a58b216547e7e847c46d1d756377b6242d2e5fb83bf752b54e0df71e889f3a2bb0f4c10805bf3c590376e3c24e22ff57f7fa965577375325cea5d920db94b9c336b455f6e894c01866fe9fbb8c8d3f70a2957285f6dfb5dcd8cbf54782f8fe7766d4723819913ac773421e3a31095866bad22c86a6036b2518b2059b4229d18c8c2ccbdf906c6cc6e82464ee57bddb0bebcb1dc645325bfb3e665ef7251082c88ebb1cf203bd779fdd38675713c8daadd17e1cabee432b09787b6ddf3304e38b731b45df5df51b78fcfb3d32466028d0ba36555e7e11ab0ee0666061d1645d962444bc47a38188930a84b4d561395c73c087021927ca638b7afc8a8679ccb84c26555440ec7f10445cd" + +AES-256-XTS Decrypt IEEE P1619/D16 Vector 10 +5:char*:"27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592":char*:"ff000000000000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"1c3b3a102f770386e4836c99e370cf9bea00803f5e482357a4ae12d414a3e63b5d31e276f8fe4a8d66b317f9ac683f44680a86ac35adfc3345befecb4bb188fd5776926c49a3095eb108fd1098baec70aaa66999a72a82f27d848b21d4a741b0c5cd4d5fff9dac89aeba122961d03a757123e9870f8acf1000020887891429ca2a3e7a7d7df7b10355165c8b9a6d0a7de8b062c4500dc4cd120c0f7418dae3d0b5781c34803fa75421c790dfe1de1834f280d7667b327f6c8cd7557e12ac3a0f93ec05c52e0493ef31a12d3d9260f79a289d6a379bc70c50841473d1a8cc81ec583e9645e07b8d9670655ba5bbcfecc6dc3966380ad8fecb17b6ba02469a020a84e18e8f84252070c13e9f1f289be54fbc481457778f616015e1327a02b140f1505eb309326d68378f8374595c849d84f4c333ec4423885143cb47bd71c5edae9be69a2ffeceb1bec9de244fbe15992b11b77c040f12bd8f6a975a44a0f90c29a9abc3d4d893927284c58754cce294529f8614dcd2aba991925fedc4ae74ffac6e333b93eb4aff0479da9a410e4450e0dd7ae4c6e2910900575da401fc07059f645e8b7e9bfdef33943054ff84011493c27b3429eaedb4ed5376441a77ed43851ad77f16f541dfd269d50d6a5f14fb0aab1cbb4c1550be97f7ab4066193c4caa773dad38014bd2092fa755c824bb5e54c4f36ffda9fcea70b9c6e693e148c151" + +AES-256-XTS Decrypt IEEE P1619/D16 Vector 11 +5:char*:"27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592":char*:"ffff0000000000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"77a31251618a15e6b92d1d66dffe7b50b50bad552305ba0217a610688eff7e11e1d0225438e093242d6db274fde801d4cae06f2092c728b2478559df58e837c2469ee4a4fa794e4bbc7f39bc026e3cb72c33b0888f25b4acf56a2a9804f1ce6d3d6e1dc6ca181d4b546179d55544aa7760c40d06741539c7e3cd9d2f6650b2013fd0eeb8c2b8e3d8d240ccae2d4c98320a7442e1c8d75a42d6e6cfa4c2eca1798d158c7aecdf82490f24bb9b38e108bcda12c3faf9a21141c3613b58367f922aaa26cd22f23d708dae699ad7cb40a8ad0b6e2784973dcb605684c08b8d6998c69aac049921871ebb65301a4619ca80ecb485a31d744223ce8ddc2394828d6a80470c092f5ba413c3378fa6054255c6f9df4495862bbb3287681f931b687c888abf844dfc8fc28331e579928cd12bd2390ae123cf03818d14dedde5c0c24c8ab018bfca75ca096f2d531f3d1619e785f1ada437cab92e980558b3dce1474afb75bfedbf8ff54cb2618e0244c9ac0d3c66fb51598cd2db11f9be39791abe447c63094f7c453b7ff87cb5bb36b7c79efb0872d17058b83b15ab0866ad8a58656c5a7e20dbdf308b2461d97c0ec0024a2715055249cf3b478ddd4740de654f75ca686e0d7345c69ed50cdc2a8b332b1f8824108ac937eb050585608ee734097fc09054fbff89eeaeea791f4a7ab1f9868294a4f9e27b42af8100cb9d59cef9645803" + +AES-256-XTS Decrypt IEEE P1619/D16 Vector 12 +5:char*:"27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592":char*:"ffffff00000000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"e387aaa58ba483afa7e8eb469778317ecf4cf573aa9d4eac23f2cdf914e4e200a8b490e42ee646802dc6ee2b471b278195d60918ececb44bf79966f83faba0499298ebc699c0c8634715a320bb4f075d622e74c8c932004f25b41e361025b5a87815391f6108fc4afa6a05d9303c6ba68a128a55705d415985832fdeaae6c8e19110e84d1b1f199a2692119edc96132658f09da7c623efcec712537a3d94c0bf5d7e352ec94ae5797fdb377dc1551150721adf15bd26a8efc2fcaad56881fa9e62462c28f30ae1ceaca93c345cf243b73f542e2074a705bd2643bb9f7cc79bb6e7091ea6e232df0f9ad0d6cf502327876d82207abf2115cdacf6d5a48f6c1879a65b115f0f8b3cb3c59d15dd8c769bc014795a1837f3901b5845eb491adfefe097b1fa30a12fc1f65ba22905031539971a10f2f36c321bb51331cdefb39e3964c7ef079994f5b69b2edd83a71ef549971ee93f44eac3938fcdd61d01fa71799da3a8091c4c48aa9ed263ff0749df95d44fef6a0bb578ec69456aa5408ae32c7af08ad7ba8921287e3bbee31b767be06a0e705c864a769137df28292283ea81a2480241b44d9921cdbec1bc28dc1fda114bd8e5217ac9d8ebafa720e9da4f9ace231cc949e5b96fe76ffc21063fddc83a6b8679c00d35e09576a875305bed5f36ed242c8900dd1fa965bc950dfce09b132263a1eef52dd6888c309f5a7d712826" + +AES-256-XTS Decrypt IEEE P1619/D16 Vector 13 +5:char*:"27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592":char*:"ffffffff000000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"bf53d2dade78e822a4d949a9bc6766b01b06a8ef70d26748c6a7fc36d80ae4c5520f7c4ab0ac8544424fa405162fef5a6b7f229498063618d39f0003cb5fb8d1c86b643497da1ff945c8d3bedeca4f479702a7a735f043ddb1d6aaade3c4a0ac7ca7f3fa5279bef56f82cd7a2f38672e824814e10700300a055e1630b8f1cb0e919f5e942010a416e2bf48cb46993d3cb6a51c19bacf864785a00bc2ecff15d350875b246ed53e68be6f55bd7e05cfc2b2ed6432198a6444b6d8c247fab941f569768b5c429366f1d3f00f0345b96123d56204c01c63b22ce78baf116e525ed90fdea39fa469494d3866c31e05f295ff21fea8d4e6e13d67e47ce722e9698a1c1048d68ebcde76b86fcf976eab8aa9790268b7068e017a8b9b749409514f1053027fd16c3786ea1bac5f15cb79711ee2abe82f5cf8b13ae73030ef5b9e4457e75d1304f988d62dd6fc4b94ed38ba831da4b7634971b6cd8ec325d9c61c00f1df73627ed3745a5e8489f3a95c69639c32cd6e1d537a85f75cc844726e8a72fc0077ad22000f1d5078f6b866318c668f1ad03d5a5fced5219f2eabbd0aa5c0f460d183f04404a0d6f469558e81fab24a167905ab4c7878502ad3e38fdbe62a41556cec37325759533ce8f25f367c87bb5578d667ae93f9e2fd99bcbc5f2fbba88cf6516139420fcff3b7361d86322c4bd84c82f335abb152c4a93411373aaa8220" + +AES-256-XTS Decrypt IEEE P1619/D16 Vector 14 +5:char*:"27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592":char*:"ffffffffff0000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"64497e5a831e4a932c09be3e5393376daa599548b816031d224bbf50a818ed2350eae7e96087c8a0db51ad290bd00c1ac1620857635bf246c176ab463be30b808da548081ac847b158e1264be25bb0910bbc92647108089415d45fab1b3d2604e8a8eff1ae4020cfa39936b66827b23f371b92200be90251e6d73c5f86de5fd4a950781933d79a28272b782a2ec313efdfcc0628f43d744c2dc2ff3dcb66999b50c7ca895b0c64791eeaa5f29499fb1c026f84ce5b5c72ba1083cddb5ce45434631665c333b60b11593fb253c5179a2c8db813782a004856a1653011e93fb6d876c18366dd8683f53412c0c180f9c848592d593f8609ca736317d356e13e2bff3a9f59cd9aeb19cd482593d8c46128bb32423b37a9adfb482b99453fbe25a41bf6feb4aa0bef5ed24bf73c762978025482c13115e4015aac992e5613a3b5c2f685b84795cb6e9b2656d8c88157e52c42f978d8634c43d06fea928f2822e465aa6576e9bf419384506cc3ce3c54ac1a6f67dc66f3b30191e698380bc999b05abce19dc0c6dcc2dd001ec535ba18deb2df1a101023108318c75dc98611a09dc48a0acdec676fabdf222f07e026f059b672b56e5cbc8e1d21bbd867dd927212054681d70ea737134cdfce93b6f82ae22423274e58a0821cc5502e2d0ab4585e94de6975be5e0b4efce51cd3e70c25a1fbbbd609d273ad5b0d59631c531f6a0a57b9" + +AES-128-XTS Decrypt IEEE P1619/D16 Vector 15 +5:char*:"fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0":char*:"9a785634120000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f10":char*:"6c1625db4671522d3d7599601de7ca09ed" + +AES-128-XTS Decrypt IEEE P1619/D16 Vector 16 +5:char*:"fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0":char*:"9a785634120000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f1011":char*:"d069444b7a7e0cab09e24447d24deb1fedbf" + +AES-128-XTS Decrypt IEEE P1619/D16 Vector 17 +5:char*:"fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0":char*:"9a785634120000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112":char*:"e5df1351c0544ba1350b3363cd8ef4beedbf9d" + +AES-128-XTS Decrypt IEEE P1619/D16 Vector 18 +5:char*:"fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0":char*:"9a785634120000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f10111213":char*:"9d84c813f719aa2c7be3f66171c7c5c2edbf9dac" + +AES-128-XTS Decrypt IEEE P1619/D16 Vector 19 +5:char*:"e0e1e2e3e4e5e6e7e8e9eaebecedeeefc0c1c2c3c4c5c6c7c8c9cacbcccdcecf":char*:"21436587a90000000000000000000000":char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"38b45812ef43a05bd957e545907e223b954ab4aaf088303ad910eadf14b42be68b2461149d8c8ba85f992be970bc621f1b06573f63e867bf5875acafa04e42ccbd7bd3c2a0fb1fff791ec5ec36c66ae4ac1e806d81fbf709dbe29e471fad38549c8e66f5345d7c1eb94f405d1ec785cc6f6a68f6254dd8339f9d84057e01a17741990482999516b5611a38f41bb6478e6f173f320805dd71b1932fc333cb9ee39936beea9ad96fa10fb4112b901734ddad40bc1878995f8e11aee7d141a2f5d48b7a4e1e7f0b2c04830e69a4fd1378411c2f287edf48c6c4e5c247a19680f7fe41cefbd49b582106e3616cbbe4dfb2344b2ae9519391f3e0fb4922254b1d6d2d19c6d4d537b3a26f3bcc51588b32f3eca0829b6a5ac72578fb814fb43cf80d64a233e3f997a3f02683342f2b33d25b492536b93becb2f5e1a8b82f5b883342729e8ae09d16938841a21a97fb543eea3bbff59f13c1a18449e398701c1ad51648346cbc04c27bb2da3b93a1372ccae548fb53bee476f9e9c91773b1bb19828394d55d3e1a20ed69113a860b6829ffa847224604435070221b257e8dff783615d2cae4803a93aa4334ab482a0afac9c0aeda70b45a481df5dec5df8cc0f423c77a5fd46cd312021d4b438862419a791be03bb4d97c0e59578542531ba466a83baf92cefc151b5cc1611a167893819b63fb8a6b18e86de60290fa72b797b0ce59f3" + diff --git a/third_party/mbedtls/test/test_suite_asn1parse.c b/third_party/mbedtls/test/test_suite_asn1parse.c new file mode 100644 index 000000000..0009f62e8 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_asn1parse.c @@ -0,0 +1,1259 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_asn1parse.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_asn1parse.function + * Test suite data : suites/test_suite_asn1parse.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_ASN1_PARSE_C) + +#include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/asn1.h" +#if defined(MBEDTLS_ASN1_WRITE_C) +#include "third_party/mbedtls/asn1write.h" +#endif + +/* Used internally to report an error that indicates a bug in a parsing function. */ +#define ERR_PARSE_INCONSISTENCY INT_MAX + +/* Use this magic value in some tests to indicate that the expected result + * should not be checked. */ +#define UNPREDICTABLE_RESULT 0x5552 + +static int nested_parse( unsigned char **const p, + const unsigned char *const end ) +{ + int ret; + size_t len = 0; + size_t len2 = 0; + unsigned char *const start = *p; + unsigned char *content_start; + unsigned char tag; + + /* First get the length, skipping over the tag. */ + content_start = start + 1; + ret = mbedtls_asn1_get_len( &content_start, end, &len ); + TEST_ASSERT( content_start <= end ); + if( ret != 0 ) + return( ret ); + + /* Since we have a valid element start (tag and length), retrieve and + * check the tag. */ + tag = start[0]; + TEST_EQUAL( mbedtls_asn1_get_tag( p, end, &len2, tag ^ 1 ), + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + *p = start; + TEST_EQUAL( mbedtls_asn1_get_tag( p, end, &len2, tag ), 0 ); + TEST_EQUAL( len, len2 ); + TEST_ASSERT( *p == content_start ); + *p = content_start; + + switch( tag & 0x1f ) + { + case MBEDTLS_ASN1_BOOLEAN: + { + int val = -257; + *p = start; + ret = mbedtls_asn1_get_bool( p, end, &val ); + if( ret == 0 ) + TEST_ASSERT( val == 0 || val == 1 ); + break; + } + + case MBEDTLS_ASN1_INTEGER: + { +#if defined(MBEDTLS_BIGNUM_C) + mbedtls_mpi mpi; + mbedtls_mpi_init( &mpi ); + *p = start; + ret = mbedtls_asn1_get_mpi( p, end, &mpi ); + mbedtls_mpi_free( &mpi ); +#else + *p = start + 1; + ret = mbedtls_asn1_get_len( p, end, &len ); + *p += len; +#endif + /* If we're sure that the number fits in an int, also + * call mbedtls_asn1_get_int(). */ + if( ret == 0 && len < sizeof( int ) ) + { + int val = -257; + unsigned char *q = start; + ret = mbedtls_asn1_get_int( &q, end, &val ); + TEST_ASSERT( *p == q ); + } + break; + } + + case MBEDTLS_ASN1_BIT_STRING: + { + mbedtls_asn1_bitstring bs; + *p = start; + ret = mbedtls_asn1_get_bitstring( p, end, &bs ); + break; + } + + case MBEDTLS_ASN1_SEQUENCE: + { + while( *p <= end && *p < content_start + len && ret == 0 ) + ret = nested_parse( p, content_start + len ); + break; + } + + case MBEDTLS_ASN1_OCTET_STRING: + case MBEDTLS_ASN1_NULL: + case MBEDTLS_ASN1_OID: + case MBEDTLS_ASN1_UTF8_STRING: + case MBEDTLS_ASN1_SET: + case MBEDTLS_ASN1_PRINTABLE_STRING: + case MBEDTLS_ASN1_T61_STRING: + case MBEDTLS_ASN1_IA5_STRING: + case MBEDTLS_ASN1_UTC_TIME: + case MBEDTLS_ASN1_GENERALIZED_TIME: + case MBEDTLS_ASN1_UNIVERSAL_STRING: + case MBEDTLS_ASN1_BMP_STRING: + default: + /* No further testing implemented for this tag. */ + *p += len; + return( 0 ); + } + + TEST_ASSERT( *p <= end ); + return( ret ); + +exit: + return( ERR_PARSE_INCONSISTENCY ); +} + +int get_len_step( const data_t *input, size_t buffer_size, + size_t actual_length ) +{ + unsigned char *buf = NULL; + unsigned char *p = NULL; + unsigned char *end; + size_t parsed_length; + int ret; + + mbedtls_test_set_step( buffer_size ); + /* Allocate a new buffer of exactly the length to parse each time. + * This gives memory sanitizers a chance to catch buffer overreads. */ + if( buffer_size == 0 ) + { + ASSERT_ALLOC( buf, 1 ); + end = buf + 1; + p = end; + } + else + { + ASSERT_ALLOC_WEAK( buf, buffer_size ); + if( buffer_size > input->len ) + { + memcpy( buf, input->x, input->len ); + memset( buf + input->len, 'A', buffer_size - input->len ); + } + else + { + memcpy( buf, input->x, buffer_size ); + } + p = buf; + end = buf + buffer_size; + } + + ret = mbedtls_asn1_get_len( &p, end, &parsed_length ); + + if( buffer_size >= input->len + actual_length ) + { + TEST_EQUAL( ret, 0 ); + TEST_ASSERT( p == buf + input->len ); + TEST_EQUAL( parsed_length, actual_length ); + } + else + { + TEST_EQUAL( ret, MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + } + mbedtls_free( buf ); + return( 1 ); + +exit: + mbedtls_free( buf ); + return( 0 ); +} + +typedef struct +{ + const unsigned char *input_start; + const char *description; +} traverse_state_t; + +/* Value returned by traverse_callback if description runs out. */ +#define RET_TRAVERSE_STOP 1 +/* Value returned by traverse_callback if description has an invalid format + * (see traverse_sequence_of). */ +#define RET_TRAVERSE_ERROR 2 + + +static int traverse_callback( void *ctx, int tag, + unsigned char *content, size_t len ) +{ + traverse_state_t *state = ctx; + size_t offset; + const char *rest = state->description; + unsigned long n; + + TEST_ASSERT( content > state->input_start ); + offset = content - state->input_start; + mbedtls_test_set_step( offset ); + + if( *rest == 0 ) + return( RET_TRAVERSE_STOP ); + n = strtoul( rest, (char **) &rest, 0 ); + TEST_EQUAL( n, offset ); + TEST_EQUAL( *rest, ',' ); + ++rest; + n = strtoul( rest, (char **) &rest, 0 ); + TEST_EQUAL( n, (unsigned) tag ); + TEST_EQUAL( *rest, ',' ); + ++rest; + n = strtoul( rest, (char **) &rest, 0 ); + TEST_EQUAL( n, len ); + if( *rest == ',' ) + ++rest; + + state->description = rest; + return( 0 ); + +exit: + return( RET_TRAVERSE_ERROR ); +} + +void test_parse_prefixes( const data_t *input, + int full_result, + int overfull_result ) +{ + /* full_result: expected result from parsing the given string. */ + /* overfull_result: expected_result from parsing the given string plus + * some trailing garbage. This may be UNPREDICTABLE_RESULT to accept + * any result: use this for invalid inputs that may or may not become + * valid depending on what the trailing garbage is. */ + + unsigned char *buf = NULL; + unsigned char *p = NULL; + size_t buffer_size; + int ret; + + /* Test every prefix of the input, except the empty string. + * The first byte of the string is the tag. Without a tag byte, + * we wouldn't know what to parse the input as. + * Also test the input followed by an extra byte. + */ + for( buffer_size = 1; buffer_size <= input->len + 1; buffer_size++ ) + { + mbedtls_test_set_step( buffer_size ); + /* Allocate a new buffer of exactly the length to parse each time. + * This gives memory sanitizers a chance to catch buffer overreads. */ + ASSERT_ALLOC( buf, buffer_size ); + memcpy( buf, input->x, buffer_size ); + p = buf; + ret = nested_parse( &p, buf + buffer_size ); + + if( ret == ERR_PARSE_INCONSISTENCY ) + goto exit; + if( buffer_size < input->len ) + { + TEST_EQUAL( ret, MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + } + else if( buffer_size == input->len ) + { + TEST_EQUAL( ret, full_result ); + } + else /* ( buffer_size > input->len ) */ + { + if( overfull_result != UNPREDICTABLE_RESULT ) + TEST_EQUAL( ret, overfull_result ); + } + if( ret == 0 ) + TEST_ASSERT( p == buf + input->len ); + + mbedtls_free( buf ); + buf = NULL; + } + +exit: + mbedtls_free( buf ); +} + +void test_parse_prefixes_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_parse_prefixes( &data0, *( (int *) params[2] ), *( (int *) params[3] ) ); +} +void test_get_len( const data_t *input, int actual_length_arg ) +{ + size_t actual_length = actual_length_arg; + size_t buffer_size; + + /* Test prefixes of a buffer containing the given length string + * followed by `actual_length` bytes of payload. To save a bit of + * time, we skip some "boring" prefixes: we don't test prefixes where + * the payload is truncated more than one byte away from either end, + * and we only test the empty string on a 1-byte input. + */ + for( buffer_size = 1; buffer_size <= input->len + 1; buffer_size++ ) + { + if( ! get_len_step( input, buffer_size, actual_length ) ) + goto exit; + } + if( ! get_len_step( input, input->len + actual_length - 1, actual_length ) ) + goto exit; + if( ! get_len_step( input, input->len + actual_length, actual_length ) ) + goto exit; +exit: + ; +} + +void test_get_len_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_get_len( &data0, *( (int *) params[2] ) ); +} +void test_get_boolean( const data_t *input, + int expected_value, int expected_result ) +{ + unsigned char *p = input->x; + int val; + int ret; + ret = mbedtls_asn1_get_bool( &p, input->x + input->len, &val ); + TEST_EQUAL( ret, expected_result ); + if( expected_result == 0 ) + { + TEST_EQUAL( val, expected_value ); + TEST_ASSERT( p == input->x + input->len ); + } +exit: + ; +} + +void test_get_boolean_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_get_boolean( &data0, *( (int *) params[2] ), *( (int *) params[3] ) ); +} +void test_empty_integer( const data_t *input ) +{ + unsigned char *p; +#if defined(MBEDTLS_BIGNUM_C) + mbedtls_mpi actual_mpi; +#endif + int val; + +#if defined(MBEDTLS_BIGNUM_C) + mbedtls_mpi_init( & actual_mpi ); +#endif + + /* An INTEGER with no content is not valid. */ + p = input->x; + TEST_EQUAL( mbedtls_asn1_get_int( &p, input->x + input->len, &val ), + MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + +#if defined(MBEDTLS_BIGNUM_C) + /* INTEGERs are sometimes abused as bitstrings, so the library accepts + * an INTEGER with empty content and gives it the value 0. */ + p = input->x; + TEST_EQUAL( mbedtls_asn1_get_mpi( &p, input->x + input->len, &actual_mpi ), + 0 ); + TEST_EQUAL( mbedtls_mpi_cmp_int( &actual_mpi, 0 ), 0 ); +#endif + +exit: +#if defined(MBEDTLS_BIGNUM_C) + mbedtls_mpi_free( &actual_mpi ); +#endif + /*empty cleanup in some configurations*/ ; +} + +void test_empty_integer_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_empty_integer( &data0 ); +} +void test_get_integer( const data_t *input, + const char *expected_hex, int expected_result ) +{ + unsigned char *p; +#if defined(MBEDTLS_BIGNUM_C) + mbedtls_mpi expected_mpi; + mbedtls_mpi actual_mpi; + mbedtls_mpi complement; + int expected_result_for_mpi = expected_result; +#endif + long expected_value; + int expected_result_for_int = expected_result; + int val; + int ret; + +#if defined(MBEDTLS_BIGNUM_C) + mbedtls_mpi_init( &expected_mpi ); + mbedtls_mpi_init( &actual_mpi ); + mbedtls_mpi_init( &complement ); +#endif + + errno = 0; + expected_value = strtol( expected_hex, NULL, 16 ); + if( expected_result == 0 && + ( errno == ERANGE +#if LONG_MAX > INT_MAX + || expected_value > INT_MAX || expected_value < INT_MIN +#endif + ) ) + { + /* The library returns the dubious error code INVALID_LENGTH + * for integers that are out of range. */ + expected_result_for_int = MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + if( expected_result == 0 && expected_value < 0 ) + { + /* The library does not support negative INTEGERs and + * returns the dubious error code INVALID_LENGTH. + * Test that we preserve the historical behavior. If we + * decide to change the behavior, we'll also change this test. */ + expected_result_for_int = MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + + p = input->x; + ret = mbedtls_asn1_get_int( &p, input->x + input->len, &val ); + TEST_EQUAL( ret, expected_result_for_int ); + if( ret == 0 ) + { + TEST_EQUAL( val, expected_value ); + TEST_ASSERT( p == input->x + input->len ); + } + +#if defined(MBEDTLS_BIGNUM_C) + ret = mbedtls_mpi_read_string( &expected_mpi, 16, expected_hex ); + TEST_ASSERT( ret == 0 || ret == MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if( ret == MBEDTLS_ERR_MPI_BAD_INPUT_DATA ) + { + /* The data overflows the maximum MPI size. */ + expected_result_for_mpi = MBEDTLS_ERR_MPI_BAD_INPUT_DATA; + } + p = input->x; + ret = mbedtls_asn1_get_mpi( &p, input->x + input->len, &actual_mpi ); + TEST_EQUAL( ret, expected_result_for_mpi ); + if( ret == 0 ) + { + if( expected_value >= 0 ) + { + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &actual_mpi, + &expected_mpi ) == 0 ); + } + else + { + /* The library ignores the sign bit in ASN.1 INTEGERs + * (which makes sense insofar as INTEGERs are sometimes + * abused as bit strings), so the result of parsing them + * is a positive integer such that expected_mpi + + * actual_mpi = 2^n where n is the length of the content + * of the INTEGER. (Leading ff octets don't matter for the + * expected value, but they matter for the actual value.) + * Test that we don't change from this behavior. If we + * decide to fix the library to change the behavior on + * negative INTEGERs, we'll fix this test code. */ + unsigned char *q = input->x + 1; + size_t len; + TEST_ASSERT( mbedtls_asn1_get_len( &q, input->x + input->len, + &len ) == 0 ); + TEST_ASSERT( mbedtls_mpi_lset( &complement, 1 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_shift_l( &complement, len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_add_mpi( &complement, &complement, + &expected_mpi ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &complement, + &actual_mpi ) == 0 ); + } + TEST_ASSERT( p == input->x + input->len ); + } +#endif + +exit: +#if defined(MBEDTLS_BIGNUM_C) + mbedtls_mpi_free( &expected_mpi ); + mbedtls_mpi_free( &actual_mpi ); + mbedtls_mpi_free( &complement ); +#endif + /*empty cleanup in some configurations*/ ; +} + +void test_get_integer_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_get_integer( &data0, (char *) params[2], *( (int *) params[3] ) ); +} +void test_get_enum( const data_t *input, + const char *expected_hex, int expected_result ) +{ + unsigned char *p; + long expected_value; + int expected_result_for_enum = expected_result; + int val; + int ret; + + errno = 0; + expected_value = strtol( expected_hex, NULL, 16 ); + if( expected_result == 0 && + ( errno == ERANGE +#if LONG_MAX > INT_MAX + || expected_value > INT_MAX || expected_value < INT_MIN +#endif + ) ) + { + /* The library returns the dubious error code INVALID_LENGTH + * for integers that are out of range. */ + expected_result_for_enum = MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + if( expected_result == 0 && expected_value < 0 ) + { + /* The library does not support negative INTEGERs and + * returns the dubious error code INVALID_LENGTH. + * Test that we preserve the historical behavior. If we + * decide to change the behavior, we'll also change this test. */ + expected_result_for_enum = MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + + p = input->x; + ret = mbedtls_asn1_get_enum( &p, input->x + input->len, &val ); + TEST_EQUAL( ret, expected_result_for_enum ); + if( ret == 0 ) + { + TEST_EQUAL( val, expected_value ); + TEST_ASSERT( p == input->x + input->len ); + } +exit: + ; +} + +void test_get_enum_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_get_enum( &data0, (char *) params[2], *( (int *) params[3] ) ); +} +#if defined(MBEDTLS_BIGNUM_C) +void test_get_mpi_too_large( ) +{ + unsigned char *buf = NULL; + unsigned char *p; + mbedtls_mpi actual_mpi; + size_t too_many_octets = + MBEDTLS_MPI_MAX_LIMBS * sizeof(mbedtls_mpi_uint) + 1; + size_t size = too_many_octets + 6; + + mbedtls_mpi_init( &actual_mpi ); + + ASSERT_ALLOC( buf, size ); + buf[0] = 0x02; /* tag: INTEGER */ + buf[1] = 0x84; /* 4-octet length */ + buf[2] = ( too_many_octets >> 24 ) & 0xff; + buf[3] = ( too_many_octets >> 16 ) & 0xff; + buf[4] = ( too_many_octets >> 8 ) & 0xff; + buf[5] = too_many_octets & 0xff; + buf[6] = 0x01; /* most significant octet */ + + p = buf; + TEST_EQUAL( mbedtls_asn1_get_mpi( &p, buf + size, &actual_mpi ), + MBEDTLS_ERR_MPI_ALLOC_FAILED ); + +exit: + mbedtls_mpi_free( &actual_mpi ); + mbedtls_free( buf ); +} + +void test_get_mpi_too_large_wrapper( void ** params ) +{ + (void)params; + + test_get_mpi_too_large( ); +} +#endif /* MBEDTLS_BIGNUM_C */ +void test_get_bitstring( const data_t *input, + int expected_length, int expected_unused_bits, + int expected_result, int expected_result_null ) +{ + mbedtls_asn1_bitstring bs = { 0xdead, 0x21, NULL }; + unsigned char *p = input->x; + + TEST_EQUAL( mbedtls_asn1_get_bitstring( &p, input->x + input->len, &bs ), + expected_result ); + if( expected_result == 0 ) + { + TEST_EQUAL( bs.len, (size_t) expected_length ); + TEST_EQUAL( bs.unused_bits, expected_unused_bits ); + TEST_ASSERT( bs.p != NULL ); + TEST_EQUAL( bs.p - input->x + bs.len, input->len ); + TEST_ASSERT( p == input->x + input->len ); + } + + p = input->x; + TEST_EQUAL( mbedtls_asn1_get_bitstring_null( &p, input->x + input->len, + &bs.len ), + expected_result_null ); + if( expected_result_null == 0 ) + { + TEST_EQUAL( bs.len, (size_t) expected_length ); + if( expected_result == 0 ) + TEST_ASSERT( p == input->x + input->len - bs.len ); + } +exit: + ; +} + +void test_get_bitstring_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_get_bitstring( &data0, *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ) ); +} +void test_get_sequence_of( const data_t *input, int tag, + const char *description, + int expected_result ) +{ + /* The description string is a comma-separated list of integers. + * For each element in the SEQUENCE in input, description contains + * two integers: the offset of the element (offset from the start + * of input to the tag of the element) and the length of the + * element's contents. + * "offset1,length1,..." */ + + mbedtls_asn1_sequence head = { { 0, 0, NULL }, NULL }; + mbedtls_asn1_sequence *cur; + unsigned char *p = input->x; + const char *rest = description; + unsigned long n; + unsigned int step = 0; + + TEST_EQUAL( mbedtls_asn1_get_sequence_of( &p, input->x + input->len, + &head, tag ), + expected_result ); + if( expected_result == 0 ) + { + TEST_ASSERT( p == input->x + input->len ); + + if( ! *rest ) + { + TEST_EQUAL( head.buf.tag, 0 ); + TEST_ASSERT( head.buf.p == NULL ); + TEST_EQUAL( head.buf.len, 0 ); + TEST_ASSERT( head.next == NULL ); + } + else + { + cur = &head; + while( *rest ) + { + mbedtls_test_set_step( step ); + TEST_ASSERT( cur != NULL ); + TEST_EQUAL( cur->buf.tag, tag ); + n = strtoul( rest, (char **) &rest, 0 ); + TEST_EQUAL( n, (size_t)( cur->buf.p - input->x ) ); + ++rest; + n = strtoul( rest, (char **) &rest, 0 ); + TEST_EQUAL( n, cur->buf.len ); + if( *rest ) + ++rest; + cur = cur->next; + ++step; + } + TEST_ASSERT( cur == NULL ); + } + } + +exit: + mbedtls_asn1_sequence_free( head.next ); +} + +void test_get_sequence_of_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_get_sequence_of( &data0, *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ) ); +} +void test_traverse_sequence_of( const data_t *input, + int tag_must_mask, int tag_must_val, + int tag_may_mask, int tag_may_val, + const char *description, + int expected_result ) +{ + /* The description string is a comma-separated list of integers. + * For each element in the SEQUENCE in input, description contains + * three integers: the offset of the element's content (offset from + * the start of input to the content of the element), the element's tag, + * and the length of the element's contents. + * "offset1,tag1,length1,..." */ + + unsigned char *p = input->x; + traverse_state_t traverse_state = {input->x, description}; + int ret; + + ret = mbedtls_asn1_traverse_sequence_of( &p, input->x + input->len, + (uint8_t) tag_must_mask, (uint8_t) tag_must_val, + (uint8_t) tag_may_mask, (uint8_t) tag_may_val, + traverse_callback, &traverse_state ); + if( ret == RET_TRAVERSE_ERROR ) + goto exit; + TEST_EQUAL( ret, expected_result ); + TEST_EQUAL( *traverse_state.description, 0 ); +exit: + ; +} + +void test_traverse_sequence_of_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_traverse_sequence_of( &data0, *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), (char *) params[6], *( (int *) params[7] ) ); +} +void test_get_alg( const data_t *input, + int oid_offset, int oid_length, + int params_tag, int params_offset, int params_length, + int total_length, + int expected_result ) +{ + mbedtls_asn1_buf oid = { -1, 0, NULL }; + mbedtls_asn1_buf params = { -1, 0, NULL }; + unsigned char *p = input->x; + int ret; + + TEST_EQUAL( mbedtls_asn1_get_alg( &p, input->x + input->len, + &oid, ¶ms ), + expected_result ); + if( expected_result == 0 ) + { + TEST_EQUAL( oid.tag, MBEDTLS_ASN1_OID ); + TEST_EQUAL( oid.p - input->x, oid_offset ); + TEST_EQUAL( oid.len, (size_t) oid_length ); + TEST_EQUAL( params.tag, params_tag ); + if( params_offset != 0 ) + TEST_EQUAL( params.p - input->x, params_offset ); + else + TEST_ASSERT( params.p == NULL ); + TEST_EQUAL( params.len, (size_t) params_length ); + TEST_EQUAL( p - input->x, total_length ); + } + + ret = mbedtls_asn1_get_alg_null( &p, input->x + input->len, &oid ); + if( expected_result == 0 && params_offset == 0 ) + { + TEST_EQUAL( oid.tag, MBEDTLS_ASN1_OID ); + TEST_EQUAL( oid.p - input->x, oid_offset ); + TEST_EQUAL( oid.len, (size_t) oid_length ); + TEST_EQUAL( p - input->x, total_length ); + } + else + TEST_ASSERT( ret != 0 ); +exit: + ; +} + +void test_get_alg_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_get_alg( &data0, *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ) ); +} +void test_find_named_data( data_t *oid0, data_t *oid1, data_t *oid2, data_t *oid3, + data_t *needle, int from, int position ) +{ + mbedtls_asn1_named_data nd[] ={ + { {0x06, oid0->len, oid0->x}, {0, 0, NULL}, NULL, 0 }, + { {0x06, oid1->len, oid1->x}, {0, 0, NULL}, NULL, 0 }, + { {0x06, oid2->len, oid2->x}, {0, 0, NULL}, NULL, 0 }, + { {0x06, oid3->len, oid3->x}, {0, 0, NULL}, NULL, 0 }, + }; + mbedtls_asn1_named_data *pointers[ARRAY_LENGTH( nd ) + 1]; + size_t i; + mbedtls_asn1_named_data *found; + + for( i = 0; i < ARRAY_LENGTH( nd ); i++ ) + pointers[i] = &nd[i]; + pointers[ARRAY_LENGTH( nd )] = NULL; + for( i = 0; i < ARRAY_LENGTH( nd ); i++ ) + nd[i].next = pointers[i+1]; + + found = mbedtls_asn1_find_named_data( pointers[from], + (const char *) needle->x, + needle->len ); + TEST_ASSERT( found == pointers[position] ); +exit: + ; +} + +void test_find_named_data_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_find_named_data( &data0, &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +void test_free_named_data_null( ) +{ + mbedtls_asn1_free_named_data( NULL ); + goto exit; /* Silence unused label warning */ +exit: + ; +} + +void test_free_named_data_null_wrapper( void ** params ) +{ + (void)params; + + test_free_named_data_null( ); +} +void test_free_named_data( int with_oid, int with_val, int with_next ) +{ + mbedtls_asn1_named_data next = + { {0x06, 0, NULL}, {0, 0xcafe, NULL}, NULL, 0 }; + mbedtls_asn1_named_data head = + { {0x06, 0, NULL}, {0, 0, NULL}, NULL, 0 }; + + if( with_oid ) + ASSERT_ALLOC( head.oid.p, 1 ); + if( with_val ) + ASSERT_ALLOC( head.val.p, 1 ); + if( with_next ) + head.next = &next; + + mbedtls_asn1_free_named_data( &head ); + TEST_ASSERT( head.oid.p == NULL ); + TEST_ASSERT( head.val.p == NULL ); + TEST_ASSERT( head.next == NULL ); + TEST_ASSERT( next.val.len == 0xcafe ); + +exit: + mbedtls_free( head.oid.p ); + mbedtls_free( head.val.p ); +} + +void test_free_named_data_wrapper( void ** params ) +{ + + test_free_named_data( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +void test_free_named_data_list( int length ) +{ + mbedtls_asn1_named_data *head = NULL; + int i; + + for( i = 0; i < length; i++ ) + { + mbedtls_asn1_named_data *new = NULL; + ASSERT_ALLOC( new, sizeof( mbedtls_asn1_named_data ) ); + new->next = head; + head = new; + } + + mbedtls_asn1_free_named_data_list( &head ); + TEST_ASSERT( head == NULL ); + /* Most of the point of the test is that it doesn't leak memory. + * So this test is only really useful under a memory leak detection + * framework. */ +exit: + mbedtls_asn1_free_named_data_list( &head ); +} + +void test_free_named_data_list_wrapper( void ** params ) +{ + + test_free_named_data_list( *( (int *) params[0] ) ); +} +#endif /* MBEDTLS_ASN1_PARSE_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_ASN1_PARSE_C) + + case 0: + { + *out_value = MBEDTLS_ERR_ASN1_OUT_OF_DATA; + } + break; + case 1: + { + *out_value = UNPREDICTABLE_RESULT; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + break; + case 3: + { + *out_value = MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; + } + break; + case 4: + { + *out_value = MBEDTLS_ERR_ASN1_UNEXPECTED_TAG; + } + break; + case 5: + { + *out_value = MBEDTLS_ERR_ASN1_INVALID_DATA; + } + break; + case 6: + { + *out_value = RET_TRAVERSE_STOP; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_ASN1_PARSE_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_ASN1_PARSE_C) + test_parse_prefixes_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_ASN1_PARSE_C) + test_get_len_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_ASN1_PARSE_C) + test_get_boolean_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_ASN1_PARSE_C) + test_empty_integer_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_ASN1_PARSE_C) + test_get_integer_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_ASN1_PARSE_C) + test_get_enum_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_ASN1_PARSE_C) && defined(MBEDTLS_BIGNUM_C) + test_get_mpi_too_large_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_ASN1_PARSE_C) + test_get_bitstring_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_ASN1_PARSE_C) + test_get_sequence_of_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_ASN1_PARSE_C) + test_traverse_sequence_of_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_ASN1_PARSE_C) + test_get_alg_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_ASN1_PARSE_C) + test_find_named_data_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_ASN1_PARSE_C) + test_free_named_data_null_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_ASN1_PARSE_C) + test_free_named_data_wrapper, +#else + NULL, +#endif +/* Function Id: 14 */ + +#if defined(MBEDTLS_ASN1_PARSE_C) + test_free_named_data_list_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_asn1parse.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_asn1parse.datax b/third_party/mbedtls/test/test_suite_asn1parse.datax new file mode 100644 index 000000000..4d3be8f5f --- /dev/null +++ b/third_party/mbedtls/test/test_suite_asn1parse.datax @@ -0,0 +1,633 @@ +Empty length +0:hex:"04":exp:0:exp:1 + +Incomplete length +0:hex:"0481":exp:0:exp:1 + +Prefixes of OCTET STRING, length=0 +0:hex:"0400":int:0:int:0 + +Prefixes of OCTET STRING, length=0 (0 length bytes) +0:hex:"0480":exp:2:exp:2 + +Prefixes of OCTET STRING, length=1 +0:hex:"040141":int:0:int:0 + +Prefixes of OCTET STRING, length=2 +0:hex:"04024142":int:0:int:0 + +Prefixes of BOOLEAN, length=0 +0:hex:"0100":exp:2:exp:2 + +Prefixes of BOOLEAN, length=1 +0:hex:"010100":int:0:int:0 + +Prefixes of BOOLEAN, length=2 +0:hex:"01020000":exp:2:exp:2 + +Prefixes of INTEGER, length=1 +0:hex:"020141":int:0:int:0 + +Prefixes of INTEGER, length=2 +0:hex:"02024142":int:0:int:0 + +Prefixes of INTEGER, length=5 +0:hex:"02054142434445":int:0:int:0 + +Prefixes of empty BIT STRING +0:hex:"0300":exp:0:exp:1 + +Prefixes of BIT STRING, unused_bits=0, payload_length=0 +0:hex:"030100":int:0:exp:3 + +Prefixes of BIT STRING, unused_bits=0, payload_length=1 +0:hex:"0302002a":int:0:exp:3 + +Prefixes of BIT STRING, unused_bits=1, payload_length=1 +0:hex:"0302012a":int:0:exp:3 + +Prefixes of empty SEQUENCE +0:hex:"3000":int:0:int:0 + +Prefixes of SEQUENCE of BOOLEAN, INTEGER, INTEGER +0:hex:"300b01010102012a0203123456":int:0:int:0 + +Prefixes of SEQUENCE of (SEQUENCE of INTEGER, INTEGER), INTEGER +0:hex:"300b3006020141020142020161":int:0:int:0 + +length=0 (short form) +1:hex:"00":int:0 + +length=0 (1 length byte) +1:hex:"8100":int:0 + +length=0 (2 length bytes) +1:hex:"820000":int:0 + +length=1 (short form) +1:hex:"01":int:1 + +length=1 (1 length byte) +1:hex:"8101":int:1 + +length=1 (2 length bytes) +1:hex:"820001":int:1 + +length=1 (3 length bytes) +1:hex:"83000001":int:1 + +length=1 (4 length bytes) +1:hex:"8400000001":int:1 + +length=2 (short form) +1:hex:"02":int:2 + +length=2 (1 length byte) +1:hex:"8102":int:2 + +length=2 (2 length bytes) +1:hex:"820002":int:2 + +length=2 (3 length bytes) +1:hex:"83000002":int:2 + +length=2 (4 length bytes) +1:hex:"8400000002":int:2 + +length=127 (short form) +1:hex:"7f":int:127 + +length=128 (1 length byte) +1:hex:"8180":int:128 + +length=128 (2 length bytes) +1:hex:"820080":int:128 + +length=255 (1 length byte) +1:hex:"81ff":int:255 + +length=255 (2 length bytes) +1:hex:"8200ff":int:255 + +length=256 (2 length bytes) +1:hex:"820100":int:256 + +length=256 (3 length bytes) +1:hex:"83000100":int:256 + +length=258 (2 length bytes) +1:hex:"820102":int:258 + +length=258 (3 length bytes) +1:hex:"83000102":int:258 + +length=65535 (2 length bytes) +1:hex:"82ffff":int:65535 + +length=65535 (3 length bytes) +1:hex:"8300ffff":int:65535 + +length=65535 (4 length bytes) +1:hex:"840000ffff":int:65535 + +length=65536 (3 length bytes) +1:hex:"83010000":int:65536 + +length=65536 (4 length bytes) +1:hex:"8400010000":int:65536 + +length=16777215 (3 length bytes) +1:hex:"83ffffff":int:16777215 + +length=16777215 (4 length bytes) +1:hex:"8400ffffff":int:16777215 + +length=16777216 (4 length bytes) +1:hex:"8401000000":int:16777216 + +length=16909060 (4 length bytes) +1:hex:"8401020304":int:16909060 + +BOOLEAN FALSE +2:hex:"010100":int:0:int:0 + +BOOLEAN TRUE (1) +2:hex:"010101":int:1:int:0 + +BOOLEAN TRUE (2) +2:hex:"010101":int:1:int:0 + +BOOLEAN TRUE (128) +2:hex:"010180":int:1:int:0 + +BOOLEAN TRUE (255) +2:hex:"0101ff":int:1:int:0 + +Not BOOLEAN +2:hex:"020101":int:0:exp:4 + +Empty INTEGER +3:hex:"0200" + +INTEGER 0 +4:hex:"020100":char*:"0":int:0 + +INTEGER 0, extra leading 0 +4:hex:"02020000":char*:"0":int:0 + +INTEGER 1 +4:hex:"020101":char*:"1":int:0 + +INTEGER 1, extra leading 0 +4:hex:"02020001":char*:"1":int:0 + +INTEGER 0x7f +4:hex:"02017f":char*:"7f":int:0 + +INTEGER 0x80 +4:hex:"02020080":char*:"80":int:0 + +INTEGER 0x80, extra leading 0 +4:hex:"0203000080":char*:"80":int:0 + +INTEGER 0xff +4:hex:"020200ff":char*:"ff":int:0 + +INTEGER 0x7fff +4:hex:"02027fff":char*:"7fff":int:0 + +INTEGER 0x12345678 +4:hex:"020412345678":char*:"12345678":int:0 + +INTEGER 0x12345678, extra leading 0 +4:hex:"02050012345678":char*:"12345678":int:0 + +INTEGER 0x7fffffff +4:hex:"02047fffffff":char*:"7fffffff":int:0 + +INTEGER 0x7fffffff, extra leading 0 +4:hex:"0205007fffffff":char*:"7fffffff":int:0 + +INTEGER 0x80000000 +4:hex:"02050080000000":char*:"80000000":int:0 + +INTEGER 0xffffffff +4:hex:"020500ffffffff":char*:"ffffffff":int:0 + +INTEGER 0x100000000 +4:hex:"02050100000000":char*:"0100000000":int:0 + +INTEGER 0x123456789abcdef0 +4:hex:"0208123456789abcdef0":char*:"123456789abcdef0":int:0 + +INTEGER 0xfedcab9876543210 +4:hex:"020900fedcab9876543210":char*:"fedcab9876543210":int:0 + +INTEGER 0x1fedcab9876543210 +4:hex:"020901fedcab9876543210":char*:"1fedcab9876543210":int:0 + +INTEGER with 127 value octets +4:hex:"027f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcd":char*:"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcd":int:0 + +INTEGER with 127 value octets (long length encoding) +4:hex:"02817f0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcd":char*:"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcd":int:0 + +INTEGER with 128 value octets +4:hex:"0281800123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef":char*:"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef":int:0 + +INTEGER with 128 value octets (leading 0 in length) +4:hex:"028200800123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef":char*:"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef":int:0 + +INTEGER -1 +4:hex:"0201ff":char*:"-1":int:0 + +INTEGER -1, extra leading ff +4:hex:"0202ffff":char*:"-1":int:0 + +INTEGER -0x7f +4:hex:"020181":char*:"-7f":int:0 + +INTEGER -0x80 +4:hex:"020180":char*:"-80":int:0 + +INTEGER -0x81 +4:hex:"0202ff7f":char*:"-81":int:0 + +INTEGER -0xff +4:hex:"0202ff01":char*:"-ff":int:0 + +INTEGER -0x100 +4:hex:"0202ff00":char*:"-100":int:0 + +INTEGER -0x7fffffff +4:hex:"020480000001":char*:"-7fffffff":int:0 + +INTEGER -0x80000000 +4:hex:"020480000000":char*:"-80000000":int:0 + +INTEGER -0x80000001 +4:hex:"0205ff7fffffff":char*:"-80000001":int:0 + +INTEGER -0xffffffff +4:hex:"0205ff00000001":char*:"-ffffffff":int:0 + +INTEGER -0x100000000 +4:hex:"0205ff00000000":char*:"-100000000":int:0 + +INTEGER -0x123456789abcdef0 +4:hex:"0208edcba98765432110":char*:"-123456789abcdef0":int:0 + +INTEGER -0xfedcba9876543210 +4:hex:"0209ff0123456789abcdf0":char*:"-fedcba9876543210":int:0 + +INTEGER -0x1fedcab9876543210 +4:hex:"0209fe0123546789abcdf0":char*:"-1fedcab9876543210":int:0 + +Not INTEGER +4:hex:"010101":char*:"":exp:4 + +INTEGER too large for mpi +6 + +ENUMERATED 0 +5:hex:"0A0100":char*:"0":int:0 + +ENUMERATED 0, extra leading 0 +5:hex:"0A020000":char*:"0":int:0 + +ENUMERATED 1 +5:hex:"0A0101":char*:"1":int:0 + +ENUMERATED 1, extra leading 0 +5:hex:"0A020001":char*:"1":int:0 + +ENUMERATED 0x7f +5:hex:"0A017f":char*:"7f":int:0 + +ENUMERATED 0x80 +5:hex:"0A020080":char*:"80":int:0 + +ENUMERATED 0x80, extra leading 0 +5:hex:"0A03000080":char*:"80":int:0 + +ENUMERATED 0xff +5:hex:"0A0200ff":char*:"ff":int:0 + +ENUMERATED 0x7fff +5:hex:"0A027fff":char*:"7fff":int:0 + +ENUMERATED 0x12345678 +5:hex:"0A0412345678":char*:"12345678":int:0 + +ENUMERATED 0x12345678, extra leading 0 +5:hex:"0A050012345678":char*:"12345678":int:0 + +ENUMERATED 0x7fffffff +5:hex:"0A047fffffff":char*:"7fffffff":int:0 + +ENUMERATED 0x7fffffff, extra leading 0 +5:hex:"0A05007fffffff":char*:"7fffffff":int:0 + +ENUMERATED 0x80000000 +5:hex:"0A050080000000":char*:"80000000":int:0 + +ENUMERATED 0xffffffff +5:hex:"0A0500ffffffff":char*:"ffffffff":int:0 + +ENUMERATED 0x100000000 +5:hex:"0A050100000000":char*:"0100000000":int:0 + +ENUMERATED -1 +5:hex:"0A01ff":char*:"-1":int:0 + +ENUMERATED -1, extra leading ff +5:hex:"0A02ffff":char*:"-1":int:0 + +ENUMERATED -0x7f +5:hex:"0A0181":char*:"-7f":int:0 + +ENUMERATED -0x80 +5:hex:"0A0180":char*:"-80":int:0 + +ENUMERATED -0x81 +5:hex:"0A02ff7f":char*:"-81":int:0 + +ENUMERATED -0xff +5:hex:"0A02ff01":char*:"-ff":int:0 + +ENUMERATED -0x100 +5:hex:"0A02ff00":char*:"-100":int:0 + +ENUMERATED -0x7fffffff +5:hex:"0A0480000001":char*:"-7fffffff":int:0 + +ENUMERATED -0x80000000 +5:hex:"0A0480000000":char*:"-80000000":int:0 + +ENUMERATED -0x80000001 +5:hex:"0A05ff7fffffff":char*:"-80000001":int:0 + +ENUMERATED -0xffffffff +5:hex:"0A05ff00000001":char*:"-ffffffff":int:0 + +ENUMERATED -0x100000000 +5:hex:"0A05ff00000000":char*:"-100000000":int:0 + +BIT STRING: empty +7:hex:"0300":int:0:int:0:exp:0:exp:5 + +BIT STRING: octets=0, unused_bits=0 +7:hex:"030100":int:0:int:0:int:0:int:0 + +BIT STRING: octets=0, unused_bits=7 +7:hex:"030107":int:0:int:7:int:0:exp:5 + +BIT STRING: octets=0, unused_bits=8 +7:hex:"030108":int:0:int:0:exp:2:exp:5 + +BIT STRING: octets=1, unused_bits=0 +7:hex:"03020041":int:1:int:0:int:0:int:0 + +BIT STRING: octets=1, unused_bits=7 +7:hex:"03020741":int:1:int:7:int:0:exp:5 + +BIT STRING: octets=1, unused_bits=8 +7:hex:"03020841":int:1:int:8:exp:2:exp:5 + +BIT STRING: octets=2, unused_bits=0 +7:hex:"0303004142":int:2:int:0:int:0:int:0 + +BIT STRING: octets=2, unused_bits=7 +7:hex:"0303074142":int:2:int:7:int:0:exp:5 + +BIT STRING: octets=2, unused_bits=8 +7:hex:"0303084142":int:2:int:8:exp:2:exp:5 + +BIT STRING with trailing garbage, unused_bits=0 +7:hex:"030200417e":int:1:int:0:exp:3:int:0 + +BIT STRING with trailing garbage, unused_bits=7 +7:hex:"030207417e":int:1:int:7:exp:3:exp:5 + +BIT STRING with trailing garbage, unused_bits=8 +7:hex:"030208417e":int:1:int:8:exp:2:exp:5 + +Not BIT STRING +7:hex:"04020100":int:0:int:0:exp:4:exp:4 + +SEQUENCE OF 0 OCTET STRING +8:hex:"3000":int:0x04:char*:"":int:0 + +SEQUENCE OF 0 OCTET STRING plus trailing garbage +8:hex:"30007e":int:0x04:char*:"":exp:3 + +SEQUENCE of 1 OCTET STRING truncated after tag +8:hex:"300104":int:0x04:char*:"":exp:0 + +SEQUENCE of 1 OCTET STRING truncated in length #1 +8:hex:"30020481":int:0x04:char*:"":exp:0 + +SEQUENCE of 1 OCTET STRING truncated in length #2 +8:hex:"3003048201":int:0x04:char*:"":exp:0 + +SEQUENCE of 1 OCTET STRING truncated in content #1 +8:hex:"30020401":int:0x04:char*:"":exp:0 + +SEQUENCE of 1 OCTET STRING truncated in content #2 +8:hex:"3003040241":int:0x04:char*:"":exp:0 + +SEQUENCE of 1 OCTET STRING truncated in content #3 +8:hex:"300404034142":int:0x04:char*:"":exp:0 + +SEQUENCE of 1 OCTET STRING (0) +8:hex:"30020400":int:0x04:char*:"4,0":int:0 + +SEQUENCE of 1 OCTET STRING (1) +8:hex:"3003040141":int:0x04:char*:"4,1":int:0 + +SEQUENCE of 1 OCTET STRING (126) +8:hex:"308180047e414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141":int:0x04:char*:"5,126":int:0 + +SEQUENCE of 2 OCTET STRINGs, second truncated after tag +8:hex:"30050402414104":int:0x04:char*:"":exp:0 + +SEQUENCE of 2 OCTET STRINGs, second truncated in length #1 +8:hex:"3006040241410481":int:0x04:char*:"":exp:0 + +SEQUENCE of 2 OCTET STRINGs, second truncated in length #2 +8:hex:"300704024141048201":int:0x04:char*:"":exp:0 + +SEQUENCE of 2 OCTET STRINGs, second truncated in content #1 +8:hex:"3006040241410401":int:0x04:char*:"":exp:0 + +SEQUENCE of 2 OCTET STRINGs, second truncated in content #2 +8:hex:"300704024141040241":int:0x04:char*:"":exp:0 + +SEQUENCE of 2 OCTET STRINGs, second truncated in content #3 +8:hex:"30080402414104034142":int:0x04:char*:"":exp:0 + +SEQUENCE of 2 OCTET STRINGs (2, 0) +8:hex:"3006040241410400":int:0x04:char*:"4,2,8,0":int:0 + +SEQUENCE of 2 OCTET STRINGs (2, 1) +8:hex:"300704024141040142":int:0x04:char*:"4,2,8,1":int:0 + +SEQUENCE of 2 OCTET STRINGs (0, 2) +8:hex:"3006040004024141":int:0x04:char*:"4,0,6,2":int:0 + +SEQUENCE of 2 OCTET STRINGs (1, 2) +8:hex:"300704014104024242":int:0x04:char*:"4,1,7,2":int:0 + +Not a SEQUENCE (not CONSTRUCTED) +8:hex:"1000":int:0x04:char*:"":exp:4 + +Not a SEQUENCE (not SEQUENCE) +8:hex:"3100":int:0x04:char*:"":exp:4 + +Traverse empty SEQUENCE +9:hex:"3000":int:0:int:0:int:0:int:0:char*:"":int:0 + +Traverse empty SEQUENCE plus trailing garbage +9:hex:"30007e":int:0:int:0:int:0:int:0:char*:"":exp:3 + +Traverse SEQUENCE of INTEGER: 1 INTEGER +9:hex:"30050203123456":int:0xff:int:0x02:int:0:int:0:char*:"4,0x02,3":int:0 + +Traverse SEQUENCE of INTEGER: 2 INTEGERs +9:hex:"30080203123456020178":int:0xff:int:0x02:int:0:int:0:char*:"4,0x02,3,9,0x02,1":int:0 + +Traverse SEQUENCE of INTEGER: INTEGER, NULL +9:hex:"300702031234560500":int:0xff:int:0x02:int:0:int:0:char*:"4,0x02,3":exp:4 + +Traverse SEQUENCE of INTEGER: NULL, INTEGER +9:hex:"300705000203123456":int:0xff:int:0x02:int:0:int:0:char*:"":exp:4 + +Traverse SEQUENCE of ANY: NULL, INTEGER +9:hex:"300705000203123456":int:0:int:0:int:0:int:0:char*:"4,0x05,0,6,0x02,3":int:0 + +Traverse SEQUENCE of ANY, skip non-INTEGER: INTEGER, NULL +9:hex:"300702031234560500":int:0:int:0:int:0xff:int:0x02:char*:"4,0x02,3":int:0 + +Traverse SEQUENCE of ANY, skip non-INTEGER: NULL, INTEGER +9:hex:"300705000203123456":int:0:int:0:int:0xff:int:0x02:char*:"6,0x02,3":int:0 + +Traverse SEQUENCE of INTEGER, skip everything +9:hex:"30080203123456020178":int:0xff:int:0x02:int:0:int:1:char*:"":int:0 + +Traverse SEQUENCE of {NULL, OCTET STRING}, skip NULL: OS, NULL +9:hex:"300704031234560500":int:0xfe:int:0x04:int:0xff:int:0x04:char*:"4,0x04,3":int:0 + +Traverse SEQUENCE of {NULL, OCTET STRING}, skip NULL: NULL, OS +9:hex:"300705000403123456":int:0xfe:int:0x04:int:0xff:int:0x04:char*:"6,0x04,3":int:0 + +Traverse SEQUENCE of {NULL, OCTET STRING}, skip everything +9:hex:"300705000403123456":int:0xfe:int:0x04:int:0:int:1:char*:"":int:0 + +Traverse SEQUENCE of INTEGER, stop at 0: NULL +9:hex:"30020500":int:0xff:int:0x02:int:0:int:0:char*:"":exp:4 + +Traverse SEQUENCE of INTEGER, stop at 0: INTEGER +9:hex:"30050203123456":int:0xff:int:0x02:int:0:int:0:char*:"":exp:6 + +Traverse SEQUENCE of INTEGER, stop at 0: INTEGER, NULL +9:hex:"300702031234560500":int:0xff:int:0x02:int:0:int:0:char*:"":exp:6 + +Traverse SEQUENCE of INTEGER, stop at 1: INTEGER, NULL +9:hex:"300702031234560500":int:0xff:int:0x02:int:0:int:0:char*:"4,0x02,3":exp:4 + +Traverse SEQUENCE of INTEGER, stop at 1: INTEGER, INTEGER +9:hex:"30080203123456020178":int:0xff:int:0x02:int:0:int:0:char*:"4,0x02,3":exp:6 + +AlgorithmIdentifier, no params +10:hex:"300506034f4944":int:4:int:3:int:0:int:0:int:0:int:7:int:0 + +AlgorithmIdentifier, no params, trailing garbage +10:hex:"300506034f49447e":int:4:int:3:int:0:int:0:int:0:int:7:int:0 + +AlgorithmIdentifier, null params +10:hex:"300706034f49440500":int:4:int:3:int:0x05:int:9:int:0:int:9:int:0 + +AlgorithmIdentifier, null params, trailing garbage +10:hex:"300706034f494405007e":int:4:int:3:int:0x05:int:9:int:0:int:9:int:0 + +AlgorithmIdentifier, OCTET STRING params +10:hex:"300c06034f494404056162636465":int:4:int:3:int:0x04:int:9:int:5:int:14:int:0 + +AlgorithmIdentifier, truncated before OID +10:hex:"3000":int:4:int:3:int:0:int:0:int:0:int:2:exp:0 + +AlgorithmIdentifier, truncated in OID after tag +10:hex:"300106":int:0:int:0:int:0:int:0:int:0:int:3:exp:0 + +AlgorithmIdentifier, truncated in OID after length +10:hex:"30020603":int:4:int:3:int:0:int:0:int:0:int:4:exp:0 + +AlgorithmIdentifier, truncated inside OID content +10:hex:"300406034f49":int:4:int:3:int:0:int:0:int:0:int:6:exp:0 + +AlgorithmIdentifier, truncated in params after tag +10:hex:"300606034f494404":int:4:int:3:int:0x04:int:0:int:0:int:8:exp:0 + +AlgorithmIdentifier, truncated in params after length +10:hex:"300706034f49440405":int:4:int:3:int:0x04:int:9:int:0:int:9:exp:0 + +AlgorithmIdentifier, truncated inside params content +10:hex:"300806034f4944040561":int:4:int:3:int:0x04:int:9:int:5:int:10:exp:0 + +Not an AlgorithmIdentifier (not a SEQUENCE) +10:hex:"310506034f4944":int:0:int:0:int:0:int:0:int:0:int:0:exp:4 + +Not an AlgorithmIdentifier (empty SEQUENCE) +10:hex:"3000":int:0:int:0:int:0:int:0:int:0:int:0:exp:0 + +Not an AlgorithmIdentifier (not an OID) +10:hex:"3006050006034f4944":int:0:int:0:int:0:int:0:int:0:int:0:exp:4 + +Not an AlgorithmIdentifier (too many elements) +10:hex:"300f06034f494406034f494406034f4944":int:0:int:0:int:0:int:0:int:0:int:0:exp:3 + +Find named data: not found +11:hex:"414141":hex:"424242":hex:"434343":hex:"444444":hex:"7f7f7f":int:0:int:4 + +Find named data: empty haystack +11:hex:"414141":hex:"424242":hex:"434343":hex:"444444":hex:"7f7f7f":int:4:int:4 + +Find named data: first +11:hex:"414141":hex:"424242":hex:"434343":hex:"444444":hex:"414141":int:0:int:0 + +Find named data: last +11:hex:"414141":hex:"424242":hex:"434343":hex:"444444":hex:"444444":int:0:int:3 + +Find named data: skip suffix +11:hex:"41414141":hex:"414141":hex:"434343":hex:"444444":hex:"414141":int:0:int:1 + +Find named data: skip prefix +11:hex:"4141":hex:"414141":hex:"434343":hex:"444444":hex:"414141":int:0:int:1 + +Find named data: first match +11:hex:"414141":hex:"414141":hex:"434343":hex:"444444":hex:"414141":int:0:int:0 + +Free named data: null pointer +12 + +Free named data: all null +13:int:0:int:0:int:0 + +Free named data: with oid +13:int:1:int:0:int:0 + +Free named data: with val +13:int:0:int:1:int:0 + +Free named data: with next +13:int:0:int:0:int:1 + +Free named data list (empty) +14:int:0 + +Free named data list (1) +14:int:1 + +Free named data list (2) +14:int:2 + diff --git a/third_party/mbedtls/test/test_suite_asn1write.c b/third_party/mbedtls/test/test_suite_asn1write.c new file mode 100644 index 000000000..d9e46f59b --- /dev/null +++ b/third_party/mbedtls/test/test_suite_asn1write.c @@ -0,0 +1,908 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_asn1write.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_asn1write.function + * Test suite data : suites/test_suite_asn1write.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_ASN1_WRITE_C) +#include "third_party/mbedtls/asn1write.h" + +#define GUARD_LEN 4 +#define GUARD_VAL 0x2a + +typedef struct +{ + unsigned char *output; + unsigned char *start; + unsigned char *end; + unsigned char *p; + size_t size; +} generic_write_data_t; + +int generic_write_start_step( generic_write_data_t *data ) +{ + mbedtls_test_set_step( data->size ); + ASSERT_ALLOC( data->output, data->size == 0 ? 1 : data->size ); + data->end = data->output + data->size; + data->p = data->end; + data->start = data->end - data->size; + return( 1 ); +exit: + return( 0 ); +} + +int generic_write_finish_step( generic_write_data_t *data, + const data_t *expected, int ret ) +{ + int ok = 0; + + if( data->size < expected->len ) + { + TEST_EQUAL( ret, MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + } + else + { + TEST_EQUAL( ret, data->end - data->p ); + TEST_ASSERT( data->p >= data->start ); + TEST_ASSERT( data->p <= data->end ); + ASSERT_COMPARE( data->p, (size_t)( data->end - data->p ), + expected->x, expected->len ); + } + ok = 1; + +exit: + mbedtls_free( data->output ); + data->output = NULL; + return( ok ); +} + +void test_mbedtls_asn1_write_null( data_t *expected ) +{ + generic_write_data_t data = { NULL, NULL, NULL, NULL, 0 }; + int ret; + + for( data.size = 0; data.size < expected->len + 1; data.size++ ) + { + if( ! generic_write_start_step( &data ) ) + goto exit; + ret = mbedtls_asn1_write_null( &data.p, data.start ); + if( ! generic_write_finish_step( &data, expected, ret ) ) + goto exit; + } + +exit: + mbedtls_free( data.output ); +} + +void test_mbedtls_asn1_write_null_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_mbedtls_asn1_write_null( &data0 ); +} +void test_mbedtls_asn1_write_bool( int val, data_t *expected ) +{ + generic_write_data_t data = { NULL, NULL, NULL, NULL, 0 }; + int ret; + + for( data.size = 0; data.size < expected->len + 1; data.size++ ) + { + if( ! generic_write_start_step( &data ) ) + goto exit; + ret = mbedtls_asn1_write_bool( &data.p, data.start, val ); + if( ! generic_write_finish_step( &data, expected, ret ) ) + goto exit; + } + +exit: + mbedtls_free( data.output ); +} + +void test_mbedtls_asn1_write_bool_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_mbedtls_asn1_write_bool( *( (int *) params[0] ), &data1 ); +} +void test_mbedtls_asn1_write_int( int val, data_t *expected ) +{ + generic_write_data_t data = { NULL, NULL, NULL, NULL, 0 }; + int ret; + + for( data.size = 0; data.size < expected->len + 1; data.size++ ) + { + if( ! generic_write_start_step( &data ) ) + goto exit; + ret = mbedtls_asn1_write_int( &data.p, data.start, val ); + if( ! generic_write_finish_step( &data, expected, ret ) ) + goto exit; + } + +exit: + mbedtls_free( data.output ); +} + +void test_mbedtls_asn1_write_int_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_mbedtls_asn1_write_int( *( (int *) params[0] ), &data1 ); +} +void test_mbedtls_asn1_write_enum( int val, data_t *expected ) +{ + generic_write_data_t data = { NULL, NULL, NULL, NULL, 0 }; + int ret; + + for( data.size = 0; data.size < expected->len + 1; data.size++ ) + { + if( ! generic_write_start_step( &data ) ) + goto exit; + ret = mbedtls_asn1_write_enum( &data.p, data.start, val ); + if( ! generic_write_finish_step( &data, expected, ret ) ) + goto exit; + } + +exit: + mbedtls_free( data.output ); +} + +void test_mbedtls_asn1_write_enum_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_mbedtls_asn1_write_enum( *( (int *) params[0] ), &data1 ); +} +#if defined(MBEDTLS_BIGNUM_C) +void test_mbedtls_asn1_write_mpi( data_t *val, data_t *expected ) +{ + generic_write_data_t data = { NULL, NULL, NULL, NULL, 0 }; + mbedtls_mpi mpi; + int ret; + + mbedtls_mpi_init( &mpi ); + TEST_ASSERT( mbedtls_mpi_read_binary( &mpi, val->x, val->len ) == 0 ); + + for( data.size = 0; data.size < expected->len + 1; data.size++ ) + { + if( ! generic_write_start_step( &data ) ) + goto exit; + ret = mbedtls_asn1_write_mpi( &data.p, data.start, &mpi ); + if( ! generic_write_finish_step( &data, expected, ret ) ) + goto exit; + if( expected->len > 10 && data.size == 8 ) + data.size = expected->len - 2; + } + +exit: + mbedtls_mpi_free( &mpi ); + mbedtls_free( data.output ); +} + +void test_mbedtls_asn1_write_mpi_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_mbedtls_asn1_write_mpi( &data0, &data2 ); +} +#endif /* MBEDTLS_BIGNUM_C */ +void test_mbedtls_asn1_write_string( int tag, data_t *content, data_t *expected ) +{ + generic_write_data_t data = { NULL, NULL, NULL, NULL, 0 }; + int ret; + + for( data.size = 0; data.size < expected->len + 1; data.size++ ) + { + if( ! generic_write_start_step( &data ) ) + goto exit; + switch( tag ) + { + case MBEDTLS_ASN1_OCTET_STRING: + ret = mbedtls_asn1_write_octet_string( + &data.p, data.start, content->x, content->len ); + break; + case MBEDTLS_ASN1_OID: + ret = mbedtls_asn1_write_oid( + &data.p, data.start, + (const char *) content->x, content->len ); + break; + case MBEDTLS_ASN1_UTF8_STRING: + ret = mbedtls_asn1_write_utf8_string( + &data.p, data.start, + (const char *) content->x, content->len ); + break; + case MBEDTLS_ASN1_PRINTABLE_STRING: + ret = mbedtls_asn1_write_printable_string( + &data.p, data.start, + (const char *) content->x, content->len ); + break; + case MBEDTLS_ASN1_IA5_STRING: + ret = mbedtls_asn1_write_ia5_string( + &data.p, data.start, + (const char *) content->x, content->len ); + break; + default: + ret = mbedtls_asn1_write_tagged_string( + &data.p, data.start, tag, + (const char *) content->x, content->len ); + } + if( ! generic_write_finish_step( &data, expected, ret ) ) + goto exit; + if( expected->len > 10 && data.size == 8 ) + data.size = expected->len - 2; + } + +exit: + mbedtls_free( data.output ); +} + +void test_mbedtls_asn1_write_string_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + + test_mbedtls_asn1_write_string( *( (int *) params[0] ), &data1, &data3 ); +} +void test_mbedtls_asn1_write_algorithm_identifier( data_t *oid, + int par_len, + data_t *expected ) +{ + generic_write_data_t data = { NULL, NULL, NULL, NULL, 0 }; + int ret; + + for( data.size = 0; data.size < expected->len + 1; data.size++ ) + { + if( ! generic_write_start_step( &data ) ) + goto exit; + ret = mbedtls_asn1_write_algorithm_identifier( + &data.p, data.start, + (const char *) oid->x, oid->len, par_len ); + /* If params_len != 0, mbedtls_asn1_write_algorithm_identifier() + * assumes that the parameters are already present in the buffer + * and returns a length that accounts for this, but our test + * data omits the parameters. */ + if( ret >= 0 ) + ret -= par_len; + if( ! generic_write_finish_step( &data, expected, ret ) ) + goto exit; + } + +exit: + mbedtls_free( data.output ); +} + +void test_mbedtls_asn1_write_algorithm_identifier_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + + test_mbedtls_asn1_write_algorithm_identifier( &data0, *( (int *) params[2] ), &data3 ); +} +#if defined(MBEDTLS_ASN1_PARSE_C) +void test_mbedtls_asn1_write_len( int len, data_t * asn1, int buf_len, + int result ) +{ + int ret; + unsigned char buf[150]; + unsigned char *p; + size_t i; + size_t read_len; + + memset( buf, GUARD_VAL, sizeof( buf ) ); + + p = buf + GUARD_LEN + buf_len; + + ret = mbedtls_asn1_write_len( &p, buf + GUARD_LEN, (size_t) len ); + + TEST_ASSERT( ret == result ); + + /* Check for buffer overwrite on both sides */ + for( i = 0; i < GUARD_LEN; i++ ) + { + TEST_ASSERT( buf[i] == GUARD_VAL ); + TEST_ASSERT( buf[GUARD_LEN + buf_len + i] == GUARD_VAL ); + } + + if( result >= 0 ) + { + TEST_ASSERT( p + asn1->len == buf + GUARD_LEN + buf_len ); + + TEST_ASSERT( memcmp( p, asn1->x, asn1->len ) == 0 ); + + /* Read back with mbedtls_asn1_get_len() to check */ + ret = mbedtls_asn1_get_len( &p, buf + GUARD_LEN + buf_len, &read_len ); + + if( len == 0 ) + { + TEST_ASSERT( ret == 0 ); + } + else + { + /* Return will be MBEDTLS_ERR_ASN1_OUT_OF_DATA because the rest of + * the buffer is missing + */ + TEST_ASSERT( ret == MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + } + TEST_ASSERT( read_len == (size_t) len ); + TEST_ASSERT( p == buf + GUARD_LEN + buf_len ); + } +exit: + ; +} + +void test_mbedtls_asn1_write_len_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_mbedtls_asn1_write_len( *( (int *) params[0] ), &data1, *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_ASN1_PARSE_C */ +void test_test_asn1_write_bitstrings( data_t *bitstring, int bits, + data_t *expected, int is_named ) +{ + generic_write_data_t data = { NULL, NULL, NULL, NULL, 0 }; + int ret; + int ( *func )( unsigned char **p, unsigned char *start, + const unsigned char *buf, size_t bits ) = + ( is_named ? mbedtls_asn1_write_named_bitstring : + mbedtls_asn1_write_bitstring ); + + for( data.size = 0; data.size < expected->len + 1; data.size++ ) + { + if( ! generic_write_start_step( &data ) ) + goto exit; + ret = ( *func )( &data.p, data.start, bitstring->x, bits ); + if( ! generic_write_finish_step( &data, expected, ret ) ) + goto exit; + } + +exit: + mbedtls_free( data.output ); +} + +void test_test_asn1_write_bitstrings_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + + test_test_asn1_write_bitstrings( &data0, *( (int *) params[2] ), &data3, *( (int *) params[5] ) ); +} +void test_store_named_data_find( data_t *oid0, data_t *oid1, + data_t *oid2, data_t *oid3, + data_t *needle, int from, int position ) +{ + data_t *oid[4] = {oid0, oid1, oid2, oid3}; + mbedtls_asn1_named_data nd[] ={ + { {0x06, 0, NULL}, {0, 0, NULL}, NULL, 0 }, + { {0x06, 0, NULL}, {0, 0, NULL}, NULL, 0 }, + { {0x06, 0, NULL}, {0, 0, NULL}, NULL, 0 }, + { {0x06, 0, NULL}, {0, 0, NULL}, NULL, 0 }, + }; + mbedtls_asn1_named_data *pointers[ARRAY_LENGTH( nd ) + 1]; + size_t i; + mbedtls_asn1_named_data *head = NULL; + mbedtls_asn1_named_data *found = NULL; + + for( i = 0; i < ARRAY_LENGTH( nd ); i++ ) + pointers[i] = &nd[i]; + pointers[ARRAY_LENGTH( nd )] = NULL; + for( i = 0; i < ARRAY_LENGTH( nd ); i++ ) + { + ASSERT_ALLOC( nd[i].oid.p, oid[i]->len ); + memcpy( nd[i].oid.p, oid[i]->x, oid[i]->len ); + nd[i].oid.len = oid[i]->len; + nd[i].next = pointers[i+1]; + } + + head = pointers[from]; + found = mbedtls_asn1_store_named_data( &head, + (const char *) needle->x, + needle->len, + NULL, 0 ); + + /* In any case, the existing list structure must be unchanged. */ + for( i = 0; i < ARRAY_LENGTH( nd ); i++ ) + TEST_ASSERT( nd[i].next == pointers[i+1] ); + + if( position >= 0 ) + { + /* position should have been found and modified. */ + TEST_ASSERT( head == pointers[from] ); + TEST_ASSERT( found == pointers[position] ); + } + else + { + /* A new entry should have been created. */ + TEST_ASSERT( found == head ); + TEST_ASSERT( head->next == pointers[from] ); + for( i = 0; i < ARRAY_LENGTH( nd ); i++ ) + TEST_ASSERT( found != &nd[i] ); + } + +exit: + if( found != NULL && found == head && found != pointers[from] ) + { + mbedtls_free( found->oid.p ); + mbedtls_free( found ); + } + for( i = 0; i < ARRAY_LENGTH( nd ); i++ ) + mbedtls_free( nd[i].oid.p ); +} + +void test_store_named_data_find_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_store_named_data_find( &data0, &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +void test_store_named_data_val_found( int old_len, int new_len ) +{ + mbedtls_asn1_named_data nd = + { {0x06, 3, (unsigned char *) "OID"}, {0, 0, NULL}, NULL, 0 }; + mbedtls_asn1_named_data *head = &nd; + mbedtls_asn1_named_data *found = NULL; + unsigned char *old_val = NULL; + unsigned char *new_val = (unsigned char *) "new value"; + + if( old_len != 0 ) + { + ASSERT_ALLOC( nd.val.p, (size_t) old_len ); + old_val = nd.val.p; + nd.val.len = old_len; + memset( old_val, 'x', old_len ); + } + if( new_len <= 0 ) + { + new_len = - new_len; + new_val = NULL; + } + + found = mbedtls_asn1_store_named_data( &head, "OID", 3, + new_val, new_len ); + TEST_ASSERT( head == &nd ); + TEST_ASSERT( found == head ); + + if( new_val != NULL) + ASSERT_COMPARE( found->val.p, found->val.len, + new_val, (size_t) new_len ); + if( new_len == 0) + TEST_ASSERT( found->val.p == NULL ); + else if( new_len == old_len ) + TEST_ASSERT( found->val.p == old_val ); + else + TEST_ASSERT( found->val.p != old_val ); + +exit: + mbedtls_free( nd.val.p ); +} + +void test_store_named_data_val_found_wrapper( void ** params ) +{ + + test_store_named_data_val_found( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +void test_store_named_data_val_new( int new_len ) +{ + mbedtls_asn1_named_data *head = NULL; + mbedtls_asn1_named_data *found = NULL; + const unsigned char *oid = (unsigned char *) "OID"; + size_t oid_len = strlen( (const char *) oid ); + const unsigned char *new_val = (unsigned char *) "new value"; + + if( new_len <= 0 ) + new_val = NULL; + if( new_len < 0 ) + new_len = - new_len; + + found = mbedtls_asn1_store_named_data( &head, + (const char *) oid, oid_len, + new_val, (size_t) new_len ); + TEST_ASSERT( found != NULL ); + TEST_ASSERT( found == head ); + TEST_ASSERT( found->oid.p != oid ); + ASSERT_COMPARE( found->oid.p, found->oid.len, oid, oid_len ); + if( new_len == 0 ) + TEST_ASSERT( found->val.p == NULL ); + else if( new_val == NULL ) + TEST_ASSERT( found->val.p != NULL ); + else + { + TEST_ASSERT( found->val.p != new_val ); + ASSERT_COMPARE( found->val.p, found->val.len, + new_val, (size_t) new_len ); + } + +exit: + if( found != NULL ) + { + mbedtls_free( found->oid.p ); + mbedtls_free( found->val.p ); + } + mbedtls_free( found ); +} + +void test_store_named_data_val_new_wrapper( void ** params ) +{ + + test_store_named_data_val_new( *( (int *) params[0] ) ); +} +#endif /* MBEDTLS_ASN1_WRITE_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_ASN1_WRITE_C) + + case 0: + { + *out_value = MBEDTLS_ASN1_OCTET_STRING; + } + break; + case 1: + { + *out_value = MBEDTLS_ASN1_UTF8_STRING; + } + break; + case 2: + { + *out_value = MBEDTLS_ASN1_PRINTABLE_STRING; + } + break; + case 3: + { + *out_value = MBEDTLS_ASN1_IA5_STRING; + } + break; + case 4: + { + *out_value = MBEDTLS_ASN1_IA5_STRING | MBEDTLS_ASN1_CONTEXT_SPECIFIC; + } + break; + case 5: + { + *out_value = MBEDTLS_ASN1_OID; + } + break; + case 6: + { + *out_value = MBEDTLS_ERR_ASN1_BUF_TOO_SMALL; + } + break; + case 7: + { + *out_value = -1; + } + break; + case 8: + { + *out_value = -4; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_ASN1_WRITE_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_ASN1_WRITE_C) + test_mbedtls_asn1_write_null_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_ASN1_WRITE_C) + test_mbedtls_asn1_write_bool_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_ASN1_WRITE_C) + test_mbedtls_asn1_write_int_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_ASN1_WRITE_C) + test_mbedtls_asn1_write_enum_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_ASN1_WRITE_C) && defined(MBEDTLS_BIGNUM_C) + test_mbedtls_asn1_write_mpi_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_ASN1_WRITE_C) + test_mbedtls_asn1_write_string_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_ASN1_WRITE_C) + test_mbedtls_asn1_write_algorithm_identifier_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_ASN1_WRITE_C) && defined(MBEDTLS_ASN1_PARSE_C) + test_mbedtls_asn1_write_len_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_ASN1_WRITE_C) + test_test_asn1_write_bitstrings_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_ASN1_WRITE_C) + test_store_named_data_find_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_ASN1_WRITE_C) + test_store_named_data_val_found_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_ASN1_WRITE_C) + test_store_named_data_val_new_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_asn1write.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_asn1write.datax b/third_party/mbedtls/test/test_suite_asn1write.datax new file mode 100644 index 000000000..28811671d --- /dev/null +++ b/third_party/mbedtls/test/test_suite_asn1write.datax @@ -0,0 +1,369 @@ +ASN.1 Write NULL +0:hex:"0500" + +ASN.1 Write BOOLEAN FALSE +1:int:0:hex:"010100" + +ASN.1 Write BOOLEAN TRUE +1:int:1:hex:"0101ff" + +ASN.1 Write int 0 +2:int:0:hex:"020100" + +ASN.1 Write int 1 +2:int:1:hex:"020101" + +ASN.1 Write int 127 +2:int:0x7f:hex:"02017f" + +ASN.1 Write int 128 +2:int:0x80:hex:"02020080" + +ASN.1 Write int 255 +2:int:0xff:hex:"020200ff" + +ASN.1 Write int 256 +2:int:0x100:hex:"02020100" + +ASN.1 Write int 32767 +2:int:0x7fff:hex:"02027fff" + +ASN.1 Write int 32768 +2:int:0x8000:hex:"0203008000" + +ASN.1 Write int 65535 +2:int:0xffff:hex:"020300ffff" + +ASN.1 Write int 65536 +2:int:0x10000:hex:"0203010000" + +ASN.1 Write int 8388607 +2:int:0x7fffff:hex:"02037fffff" + +ASN.1 Write int 8388608 +2:int:0x800000:hex:"020400800000" + +ASN.1 Write int 0x12345678 +2:int:0x12345678:hex:"020412345678" + +ASN.1 Write int 2147483647 +2:int:0x7fffffff:hex:"02047fffffff" + +ASN.1 Write enum 0 +3:int:0:hex:"0A0100" + +ASN.1 Write enum 1 +3:int:1:hex:"0A0101" + +ASN.1 Write enum 127 +3:int:0x7f:hex:"0A017f" + +ASN.1 Write enum 128 +3:int:0x80:hex:"0A020080" + +ASN.1 Write enum 255 +3:int:0xff:hex:"0A0200ff" + +ASN.1 Write enum 256 +3:int:0x100:hex:"0A020100" + +ASN.1 Write enum 32767 +3:int:0x7fff:hex:"0A027fff" + +ASN.1 Write enum 32768 +3:int:0x8000:hex:"0A03008000" + +ASN.1 Write enum 65535 +3:int:0xffff:hex:"0A0300ffff" + +ASN.1 Write enum 65536 +3:int:0x10000:hex:"0A03010000" + +ASN.1 Write enum 8388607 +3:int:0x7fffff:hex:"0A037fffff" + +ASN.1 Write enum 8388608 +3:int:0x800000:hex:"0A0400800000" + +ASN.1 Write enum 0x12345678 +3:int:0x12345678:hex:"0A0412345678" + +ASN.1 Write enum 2147483647 +3:int:0x7fffffff:hex:"0A047fffffff" + +ASN.1 Write mpi 1 +4:hex:"01":hex:"020101" + +ASN.1 Write mpi 0x7f +4:hex:"7f":hex:"02017f" + +ASN.1 Write mpi 0x100 +4:hex:"0100":hex:"02020100" + +ASN.1 Write mpi, 127*8-1 bits +4:hex:"7f7b16e05c1537de7c41cef1a0985d6a3ced98aec28e091874cbad6b5e40a5c956258f18861c28bed8ba808259339ee34b2e509c4080149474d5d5b86093f90c475a6443fc87e1a293d4151be625d652f1c32a00a018bba10c8a2ae5b2b0ee4be64e053dce9d07ec7919526c9dfcf2ec9fc3db485caa8e5a68a2cd0a427de8":hex:"027f7f7b16e05c1537de7c41cef1a0985d6a3ced98aec28e091874cbad6b5e40a5c956258f18861c28bed8ba808259339ee34b2e509c4080149474d5d5b86093f90c475a6443fc87e1a293d4151be625d652f1c32a00a018bba10c8a2ae5b2b0ee4be64e053dce9d07ec7919526c9dfcf2ec9fc3db485caa8e5a68a2cd0a427de8" + +ASN.1 Write mpi, 127*8+1 bits +4:hex:"108446d68934cc1af23c4cd909884d4bd737a1890e12f5ef8bf3d807d72feffa63c0bf2633345f8b8418d144617c871a7a0277ac0150eed4b3db7f9dff21114cd0d7f282400f03c931cb00c367550e374a1ed3762a1801ca714cfc8d5aac69707ca81e0661400ed0014d97cba48f94d835dd681fc3053c51958afbf7583cf49c":hex:"028180108446d68934cc1af23c4cd909884d4bd737a1890e12f5ef8bf3d807d72feffa63c0bf2633345f8b8418d144617c871a7a0277ac0150eed4b3db7f9dff21114cd0d7f282400f03c931cb00c367550e374a1ed3762a1801ca714cfc8d5aac69707ca81e0661400ed0014d97cba48f94d835dd681fc3053c51958afbf7583cf49c" + +ASN.1 Write mpi, 255*8-1 bits +4:hex:"7bd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c":hex:"0281ff7bd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c" + +ASN.1 Write mpi, 256*8-1 bits +4:hex:"7bd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c89":hex:"028201007bd1913fcfb652896209ad3e62f5d04a8dfc71eb1698543c52200bd7bbf3c11dd9ff57c299a2f4da172b3d5bd7e29affddf8859be7d50a45537a0df15b17af603d18803fd17134847cba78d83e64bf9fee58364d6124add0541da7bad331cd35fb48186a74bc502ddb967602401c0db02b19e5d38f09e8618fa7f6a1a3f738629baffdc63d9d70d396007d943fd64ae696e5b7e88f2c6d6ec322b461dbddd36efa91d990343b66419cf4832a22dc9ad13021185a1bf007989a50ba3bfd1152b8db899482d3ed498d1b9fae243a3cdae9530d8b29fdb684f70cdc0c9b8527265312603b405e67d59d4b1d654ddc3b7fd5515acb32440dc80903c8474a2c136c89" + +ASN.1 Write OCTET STRING: length=0 +5:exp:0:hex:"":hex:"0400" + +ASN.1 Write OCTET STRING: length=1 +5:exp:0:hex:"41":hex:"040141" + +ASN.1 Write OCTET STRING: length=2 +5:exp:0:hex:"4142":hex:"04024142" + +ASN.1 Write OCTET STRING: length=127 +5:exp:0:hex:"99a66790856f7199641f55cadabb660aaed6aa0d9ef8cef4417118c6e8c6e15becbaa21c63faf48726e92357a38b3079a0b9d60be7457ec6552f900dd032577167c91e829927343c3a769b362db4de0ad2ffb8f13cc2eeca9e52dc557118baa88b857477595622bc301a1ae2150030d652c4a482cf88d0ded85d6731ff2d38":hex:"047f99a66790856f7199641f55cadabb660aaed6aa0d9ef8cef4417118c6e8c6e15becbaa21c63faf48726e92357a38b3079a0b9d60be7457ec6552f900dd032577167c91e829927343c3a769b362db4de0ad2ffb8f13cc2eeca9e52dc557118baa88b857477595622bc301a1ae2150030d652c4a482cf88d0ded85d6731ff2d38" + +ASN.1 Write OCTET STRING: length=128 +5:exp:0:hex:"0199a66790856f7199641f55cadabb660aaed6aa0d9ef8cef4417118c6e8c6e15becbaa21c63faf48726e92357a38b3079a0b9d60be7457ec6552f900dd032577167c91e829927343c3a769b362db4de0ad2ffb8f13cc2eeca9e52dc557118baa88b857477595622bc301a1ae2150030d652c4a482cf88d0ded85d6731ff2d38":hex:"0481800199a66790856f7199641f55cadabb660aaed6aa0d9ef8cef4417118c6e8c6e15becbaa21c63faf48726e92357a38b3079a0b9d60be7457ec6552f900dd032577167c91e829927343c3a769b362db4de0ad2ffb8f13cc2eeca9e52dc557118baa88b857477595622bc301a1ae2150030d652c4a482cf88d0ded85d6731ff2d38" + +ASN.1 Write OCTET STRING: length=255 +5:exp:0:hex:"633ed2cb0a2915dc4438a4c063017eb336cd9571d2a0585522c5073ca22a30ca7b8c9bd167d89ba1827bc6fb5d6ef6dcc52ee6eecc47e84ee0dd18fa3ebbdb6edfc679f037160d48d46a0d7e571335b24a28c8fd29b7f4a93d013b74e522bc1f5f605096bb99d438814b77b54d6dde608417b0a0ce9a8cb507fbeb95e9926b4bb6eec725599493d4b156ef3a5fd701426456029111c20f1d03c5d8999d2c042277ef91c5114a6c06218c1ba28d41ef08e4870d0cef260cba9de16d7d11ed5889b88fb93073746ebb158a4246cdb8a4ce403a5d1d598a0d11548f22070f833c1344d15e7a1445c133d19b8295b7c071bf2227178938031249d22d21c6f8e53d":hex:"0481ff633ed2cb0a2915dc4438a4c063017eb336cd9571d2a0585522c5073ca22a30ca7b8c9bd167d89ba1827bc6fb5d6ef6dcc52ee6eecc47e84ee0dd18fa3ebbdb6edfc679f037160d48d46a0d7e571335b24a28c8fd29b7f4a93d013b74e522bc1f5f605096bb99d438814b77b54d6dde608417b0a0ce9a8cb507fbeb95e9926b4bb6eec725599493d4b156ef3a5fd701426456029111c20f1d03c5d8999d2c042277ef91c5114a6c06218c1ba28d41ef08e4870d0cef260cba9de16d7d11ed5889b88fb93073746ebb158a4246cdb8a4ce403a5d1d598a0d11548f22070f833c1344d15e7a1445c133d19b8295b7c071bf2227178938031249d22d21c6f8e53d" + +ASN.1 Write OCTET STRING: length=256 +5:exp:0:hex:"5a633ed2cb0a2915dc4438a4c063017eb336cd9571d2a0585522c5073ca22a30ca7b8c9bd167d89ba1827bc6fb5d6ef6dcc52ee6eecc47e84ee0dd18fa3ebbdb6edfc679f037160d48d46a0d7e571335b24a28c8fd29b7f4a93d013b74e522bc1f5f605096bb99d438814b77b54d6dde608417b0a0ce9a8cb507fbeb95e9926b4bb6eec725599493d4b156ef3a5fd701426456029111c20f1d03c5d8999d2c042277ef91c5114a6c06218c1ba28d41ef08e4870d0cef260cba9de16d7d11ed5889b88fb93073746ebb158a4246cdb8a4ce403a5d1d598a0d11548f22070f833c1344d15e7a1445c133d19b8295b7c071bf2227178938031249d22d21c6f8e53d":hex:"048201005a633ed2cb0a2915dc4438a4c063017eb336cd9571d2a0585522c5073ca22a30ca7b8c9bd167d89ba1827bc6fb5d6ef6dcc52ee6eecc47e84ee0dd18fa3ebbdb6edfc679f037160d48d46a0d7e571335b24a28c8fd29b7f4a93d013b74e522bc1f5f605096bb99d438814b77b54d6dde608417b0a0ce9a8cb507fbeb95e9926b4bb6eec725599493d4b156ef3a5fd701426456029111c20f1d03c5d8999d2c042277ef91c5114a6c06218c1ba28d41ef08e4870d0cef260cba9de16d7d11ed5889b88fb93073746ebb158a4246cdb8a4ce403a5d1d598a0d11548f22070f833c1344d15e7a1445c133d19b8295b7c071bf2227178938031249d22d21c6f8e53d" + +ASN.1 Write UTF8 STRING: length=0 +5:exp:1:hex:"":hex:"0c00" + +ASN.1 Write UTF8 STRING: length=1 +5:exp:1:hex:"41":hex:"0c0141" + +ASN.1 Write UTF8 STRING: length=128 +5:exp:1:hex:"0199a66790856f7199641f55cadabb660aaed6aa0d9ef8cef4417118c6e8c6e15becbaa21c63faf48726e92357a38b3079a0b9d60be7457ec6552f900dd032577167c91e829927343c3a769b362db4de0ad2ffb8f13cc2eeca9e52dc557118baa88b857477595622bc301a1ae2150030d652c4a482cf88d0ded85d6731ff2d38":hex:"0c81800199a66790856f7199641f55cadabb660aaed6aa0d9ef8cef4417118c6e8c6e15becbaa21c63faf48726e92357a38b3079a0b9d60be7457ec6552f900dd032577167c91e829927343c3a769b362db4de0ad2ffb8f13cc2eeca9e52dc557118baa88b857477595622bc301a1ae2150030d652c4a482cf88d0ded85d6731ff2d38" + +ASN.1 Write PRINTABLE STRING: length=0 +5:exp:2:hex:"":hex:"1300" + +ASN.1 Write PRINTABLE STRING: length=1 +5:exp:2:hex:"41":hex:"130141" + +ASN.1 Write PRINTABLE STRING: length=128 +5:exp:2:hex:"0199a66790856f7199641f55cadabb660aaed6aa0d9ef8cef4417118c6e8c6e15becbaa21c63faf48726e92357a38b3079a0b9d60be7457ec6552f900dd032577167c91e829927343c3a769b362db4de0ad2ffb8f13cc2eeca9e52dc557118baa88b857477595622bc301a1ae2150030d652c4a482cf88d0ded85d6731ff2d38":hex:"1381800199a66790856f7199641f55cadabb660aaed6aa0d9ef8cef4417118c6e8c6e15becbaa21c63faf48726e92357a38b3079a0b9d60be7457ec6552f900dd032577167c91e829927343c3a769b362db4de0ad2ffb8f13cc2eeca9e52dc557118baa88b857477595622bc301a1ae2150030d652c4a482cf88d0ded85d6731ff2d38" + +ASN.1 Write IA5 STRING: length=0 +5:exp:3:hex:"":hex:"1600" + +ASN.1 Write IA5 STRING: length=1 +5:exp:3:hex:"41":hex:"160141" + +ASN.1 Write IA5 STRING: length=128 +5:exp:3:hex:"0199a66790856f7199641f55cadabb660aaed6aa0d9ef8cef4417118c6e8c6e15becbaa21c63faf48726e92357a38b3079a0b9d60be7457ec6552f900dd032577167c91e829927343c3a769b362db4de0ad2ffb8f13cc2eeca9e52dc557118baa88b857477595622bc301a1ae2150030d652c4a482cf88d0ded85d6731ff2d38":hex:"1681800199a66790856f7199641f55cadabb660aaed6aa0d9ef8cef4417118c6e8c6e15becbaa21c63faf48726e92357a38b3079a0b9d60be7457ec6552f900dd032577167c91e829927343c3a769b362db4de0ad2ffb8f13cc2eeca9e52dc557118baa88b857477595622bc301a1ae2150030d652c4a482cf88d0ded85d6731ff2d38" + +ASN.1 Write tagged string: length=0 +5:exp:4:hex:"":hex:"9600" + +ASN.1 Write tagged string: length=1 +5:exp:4:hex:"41":hex:"960141" + +ASN.1 Write tagged string: length=128 +5:exp:4:hex:"0199a66790856f7199641f55cadabb660aaed6aa0d9ef8cef4417118c6e8c6e15becbaa21c63faf48726e92357a38b3079a0b9d60be7457ec6552f900dd032577167c91e829927343c3a769b362db4de0ad2ffb8f13cc2eeca9e52dc557118baa88b857477595622bc301a1ae2150030d652c4a482cf88d0ded85d6731ff2d38":hex:"9681800199a66790856f7199641f55cadabb660aaed6aa0d9ef8cef4417118c6e8c6e15becbaa21c63faf48726e92357a38b3079a0b9d60be7457ec6552f900dd032577167c91e829927343c3a769b362db4de0ad2ffb8f13cc2eeca9e52dc557118baa88b857477595622bc301a1ae2150030d652c4a482cf88d0ded85d6731ff2d38" + +ASN.1 Write OID: length=0 +5:exp:5:hex:"":hex:"0600" + +ASN.1 Write OID: length=1 +5:exp:5:hex:"41":hex:"060141" + +ASN.1 Write AlgorithmIdentifier, null parameters +6:hex:"4f4944":int:8:hex:"300d06034f4944" + +ASN.1 Write AlgorithmIdentifier, parameters (8 bytes) +6:hex:"4f4944":int:8:hex:"300d06034f4944" + +ASN.1 Write AlgorithmIdentifier, total length=0x7f +6:hex:"4f4944":int:0x7a:hex:"307f06034f4944" + +ASN.1 Write AlgorithmIdentifier, total length=0x80 +6:hex:"4f4944":int:0x7b:hex:"30818006034f4944" + +ASN.1 Write AlgorithmIdentifier, total length=0xff +6:hex:"4f4944":int:0xfa:hex:"3081ff06034f4944" + +ASN.1 Write AlgorithmIdentifier, total length=0x100 +6:hex:"4f4944":int:0xfb:hex:"3082010006034f4944" + +ASN.1 Write AlgorithmIdentifier, total length=0xffff +6:hex:"4f4944":int:0xfffa:hex:"3082ffff06034f4944" + +ASN.1 Write AlgorithmIdentifier, total length=0x10000 +6:hex:"4f4944":int:0xfffb:hex:"308301000006034f4944" + +ASN.1 Write AlgorithmIdentifier, total length=0xffffff +6:hex:"4f4944":int:0xfffffa:hex:"3083ffffff06034f4944" + +ASN.1 Write AlgorithmIdentifier, total length=0x1000000 +6:hex:"4f4944":int:0xfffffb:hex:"30840100000006034f4944" + +ASN.1 Write / Read Length #0 (Len = 0, short form) +7:int:0:hex:"00":int:1:int:1 + +ASN.1 Write / Read Length #1 (Len = 127, short form) +7:int:127:hex:"7F":int:1:int:1 + +ASN.1 Write / Read Length #2 (Len = 127, buffer too small) +7:int:127:hex:"7F":int:0:exp:6 + +ASN.1 Write / Read Length #3 (Len = 128, long form) +7:int:128:hex:"8180":int:2:int:2 + +ASN.1 Write / Read Length #4 (Len = 255, long form) +7:int:255:hex:"81FF":int:2:int:2 + +ASN.1 Write / Read Length #5 (Len = 255, buffer too small) +7:int:255:hex:"81FF":int:1:exp:6 + +ASN.1 Write / Read Length #6 (Len = 258, byte order) +7:int:258:hex:"820102":int:3:int:3 + +ASN.1 Write / Read Length #7 (Len = 65535, long form) +7:int:65535:hex:"82FFFF":int:3:int:3 + +ASN.1 Write / Read Length #8 (Len = 65535, buffer too small) +7:int:65535:hex:"82FFFF":int:2:exp:6 + +ASN.1 Write / Read Length #9 (Len = 66051, byte order) +7:int:66051:hex:"83010203":int:4:int:4 + +ASN.1 Write / Read Length #10 (Len = 16777215, long form) +7:int:16777215:hex:"83FFFFFF":int:4:int:4 + +ASN.1 Write / Read Length #11 (Len = 16777215, buffer too small) +7:int:16777215:hex:"83FFFFFF":int:3:exp:6 + +ASN.1 Write / Read Length #12 (Len = 16909060, byte order) +7:int:16909060:hex:"8401020304":int:5:int:5 + +ASN.1 Write / Read Length #12 (Len = 16909060, buffer too small) +7:int:16909060:hex:"8401020304":int:4:exp:6 + +ASN.1 Write Named Bitstring / Unused bits #0 +8:hex:"FF":int:8:hex:"030200FF":int:1 + +ASN.1 Write Named Bitstring / Unused bits #1 +8:hex:"FE":int:8:hex:"030201FE":int:1 + +ASN.1 Write Named Bitstring / Unused bits #2 +8:hex:"FC":int:7:hex:"030202FC":int:1 + +ASN.1 Write Named Bitstring / Unused bits #3 +8:hex:"F8":int:8:hex:"030203F8":int:1 + +ASN.1 Write Named Bitstring / Unused bits #4 +8:hex:"F0":int:6:hex:"030204F0":int:1 + +ASN.1 Write Named Bitstring / Unused bits #5 +8:hex:"E0":int:6:hex:"030205E0":int:1 + +ASN.1 Write Named Bitstring / Unused bits #6 +8:hex:"C0":int:8:hex:"030206C0":int:1 + +ASN.1 Write Named Bitstring / Unused bits #7 +8:hex:"80":int:8:hex:"03020780":int:1 + +ASN.1 Write Named Bitstring / Empty bitstring +8:hex:"00":int:7:hex:"030100":int:1 + +ASN.1 Write Named Bitstring / Empty bitstring (bits = 16) +8:hex:"0000":int:16:hex:"030100":int:1 + +ASN.1 Write Named Bitstring / Empty bitstring (bits = 24) +8:hex:"FFFFFF":int:0:hex:"030100":int:1 + +ASN.1 Write Named Bitstring / 15 trailing bits all unset +8:hex:"F88000":int:24:hex:"030307F880":int:1 + +ASN.1 Write Named Bitstring / 15 trailing bits all set +8:hex:"F8FFFF":int:9:hex:"030307F880":int:1 + +ASN.1 Write Bitstring / Unused bits #0 +8:hex:"FF":int:8:hex:"030200FF":int:0 + +ASN.1 Write Bitstring / Unused bits #1 +8:hex:"FF":int:7:hex:"030201FE":int:0 + +ASN.1 Write Bitstring / Unused bits #2 +8:hex:"FF":int:6:hex:"030202FC":int:0 + +ASN.1 Write Bitstring / Unused bits #3 +8:hex:"FF":int:5:hex:"030203F8":int:0 + +ASN.1 Write Bitstring / Unused bits #4 +8:hex:"FF":int:4:hex:"030204F0":int:0 + +ASN.1 Write Bitstring / Unused bits #5 +8:hex:"FF":int:3:hex:"030205E0":int:0 + +ASN.1 Write Bitstring / Unused bits #6 +8:hex:"FF":int:2:hex:"030206C0":int:0 + +ASN.1 Write Bitstring / Unused bits #7 +8:hex:"FF":int:1:hex:"03020780":int:0 + +ASN.1 Write Bitstring / 1 trailing bit (bits 15) +8:hex:"0003":int:15:hex:"0303010002":int:0 + +ASN.1 Write Bitstring / 0 bits +8:hex:"":int:0:hex:"030100":int:0 + +ASN.1 Write Bitstring / long string all bits unset except trailing bits +8:hex:"000000000007":int:45:hex:"030703000000000000":int:0 + +Store named data: not found +9:hex:"414141":hex:"424242":hex:"434343":hex:"444444":hex:"7f7f7f":int:0:exp:7 + +Store named data: empty haystack +9:hex:"414141":hex:"424242":hex:"434343":hex:"444444":hex:"7f7f7f":int:4:exp:7 + +Store named data: first +9:hex:"414141":hex:"424242":hex:"434343":hex:"444444":hex:"414141":int:0:int:0 + +Store named data: last +9:hex:"414141":hex:"424242":hex:"434343":hex:"444444":hex:"444444":int:0:int:3 + +Store named data: skip suffix +9:hex:"41414141":hex:"414141":hex:"434343":hex:"444444":hex:"414141":int:0:int:1 + +Store named data: skip prefix +9:hex:"4141":hex:"414141":hex:"434343":hex:"444444":hex:"414141":int:0:int:1 + +Store named data: first match +9:hex:"414141":hex:"414141":hex:"434343":hex:"444444":hex:"414141":int:0:int:0 + +Store named data: found, null to zero +10:int:0:int:0 + +Store named data: found, null to data +10:int:0:int:9 + +Store named data: found, data to zero +10:int:9:int:0 + +Store named data: found, smaller data +10:int:9:int:2 + +Store named data: found, same-size data +10:int:9:int:9 + +Store named data: found, larger data +10:int:4:int:9 + +Store named data: new, val_len=0 +11:int:0 + +Store named data: new, val_len=4 +11:int:4 + +Store named data: new, val_len=4, val=NULL +11:exp:8 + diff --git a/third_party/mbedtls/test/test_suite_base64.c b/third_party/mbedtls/test/test_suite_base64.c new file mode 100644 index 000000000..12545aa24 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_base64.c @@ -0,0 +1,471 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_base64.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_base64.function + * Test suite data : suites/test_suite_base64.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_BASE64_C) +#include "third_party/mbedtls/base64.h" +void test_mbedtls_base64_encode( char * src_string, char * dst_string, + int dst_buf_size, int result ) +{ + unsigned char src_str[1000]; + unsigned char dst_str[1000]; + size_t len, src_len; + + memset(src_str, 0x00, 1000); + memset(dst_str, 0x00, 1000); + + strncpy( (char *) src_str, src_string, sizeof(src_str) - 1 ); + src_len = strlen( (char *) src_str ); + + TEST_CF_SECRET( src_str, sizeof( src_str ) ); + TEST_ASSERT( mbedtls_base64_encode( dst_str, dst_buf_size, &len, src_str, src_len) == result ); + TEST_CF_PUBLIC( src_str, sizeof( src_str ) ); + + /* dest_str will have had tainted data copied to it, prevent the TEST_ASSERT below from triggering + CF failures by unmarking it. */ + TEST_CF_PUBLIC( dst_str, len ); + + if( result == 0 ) + { + TEST_ASSERT( strcmp( (char *) dst_str, dst_string ) == 0 ); + } +exit: + ; +} + +void test_mbedtls_base64_encode_wrapper( void ** params ) +{ + + test_mbedtls_base64_encode( (char *) params[0], (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ) ); +} +void test_mbedtls_base64_decode( char * src_string, char * dst_string, int result ) +{ + unsigned char src_str[1000]; + unsigned char dst_str[1000]; + size_t len; + int res; + + memset(src_str, 0x00, 1000); + memset(dst_str, 0x00, 1000); + + strncpy( (char *) src_str, src_string, sizeof(src_str) - 1 ); + res = mbedtls_base64_decode( dst_str, sizeof( dst_str ), &len, src_str, strlen( (char *) src_str ) ); + TEST_ASSERT( res == result ); + if( result == 0 ) + { + TEST_ASSERT( strcmp( (char *) dst_str, dst_string ) == 0 ); + } +exit: + ; +} + +void test_mbedtls_base64_decode_wrapper( void ** params ) +{ + + test_mbedtls_base64_decode( (char *) params[0], (char *) params[1], *( (int *) params[2] ) ); +} +void test_base64_encode_hex( data_t * src, char * dst, int dst_buf_size, + int result ) +{ + unsigned char *res = NULL; + size_t len; + + res = mbedtls_test_zero_alloc( dst_buf_size ); + + TEST_CF_SECRET( src->x, src->len ); + TEST_ASSERT( mbedtls_base64_encode( res, dst_buf_size, &len, src->x, src->len ) == result ); + TEST_CF_PUBLIC( src->x, src->len ); + + /* res will have had tainted data copied to it, prevent the TEST_ASSERT below from triggering + CF failures by unmarking it. */ + TEST_CF_PUBLIC( res, len ); + + if( result == 0 ) + { + TEST_ASSERT( len == strlen( dst ) ); + TEST_ASSERT( memcmp( dst, res, len ) == 0 ); + } + +exit: + mbedtls_free( res ); +} + +void test_base64_encode_hex_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_base64_encode_hex( &data0, (char *) params[2], *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_base64_decode_hex( char * src, data_t * dst, int dst_buf_size, + int result ) +{ + unsigned char *res = NULL; + size_t len; + + res = mbedtls_test_zero_alloc( dst_buf_size ); + + TEST_ASSERT( mbedtls_base64_decode( res, dst_buf_size, &len, (unsigned char *) src, + strlen( src ) ) == result ); + if( result == 0 ) + { + TEST_ASSERT( len == dst->len ); + TEST_ASSERT( memcmp( dst->x, res, len ) == 0 ); + } + +exit: + mbedtls_free( res ); +} + +void test_base64_decode_hex_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_base64_decode_hex( (char *) params[0], &data1, *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_base64_decode_hex_src( data_t * src, char * dst_ref, int result ) +{ + unsigned char dst[1000] = { 0 }; + size_t len; + + TEST_ASSERT( mbedtls_base64_decode( dst, sizeof( dst ), &len, src->x, src->len ) == result ); + if( result == 0 ) + { + TEST_ASSERT( len == strlen( dst_ref ) ); + TEST_ASSERT( memcmp( dst, dst_ref, len ) == 0 ); + } + +exit: + ;; +} + +void test_base64_decode_hex_src_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_base64_decode_hex_src( &data0, (char *) params[2], *( (int *) params[3] ) ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_base64_selftest( ) +{ + TEST_ASSERT( mbedtls_base64_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_base64_selftest_wrapper( void ** params ) +{ + (void)params; + + test_base64_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_BASE64_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_BASE64_C) + + case 0: + { + *out_value = MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL; + } + break; + case 1: + { + *out_value = MBEDTLS_ERR_BASE64_INVALID_CHARACTER; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_BASE64_C) + + case 0: + { +#if defined(MBEDTLS_SELF_TEST) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_BASE64_C) + test_mbedtls_base64_encode_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_BASE64_C) + test_mbedtls_base64_decode_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_BASE64_C) + test_base64_encode_hex_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_BASE64_C) + test_base64_decode_hex_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_BASE64_C) + test_base64_decode_hex_src_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_BASE64_C) && defined(MBEDTLS_SELF_TEST) + test_base64_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_base64.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_base64.datax b/third_party/mbedtls/test/test_suite_base64.datax new file mode 100644 index 000000000..3bd645e95 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_base64.datax @@ -0,0 +1,187 @@ +Test case mbedtls_base64_encode #1 buffer just right +0:char*:"":char*:"":int:0:int:0 + +Test case mbedtls_base64_encode #2 buffer just right +0:char*:"f":char*:"Zg==":int:5:int:0 + +Test case mbedtls_base64_encode #2 buffer too small +0:char*:"f":char*:"Zg==":int:4:exp:0 + +Test case mbedtls_base64_encode #3 buffer just right +0:char*:"fo":char*:"Zm8=":int:5:int:0 + +Test case mbedtls_base64_encode #3 buffer too small +0:char*:"fo":char*:"Zm8=":int:4:exp:0 + +Test case mbedtls_base64_encode #4 buffer just right +0:char*:"foo":char*:"Zm9v":int:5:int:0 + +Test case mbedtls_base64_encode #4 buffer too small +0:char*:"foo":char*:"Zm9v":int:4:exp:0 + +Test case mbedtls_base64_encode #5 buffer just right +0:char*:"foob":char*:"Zm9vYg==":int:9:int:0 + +Test case mbedtls_base64_encode #5 buffer too small +0:char*:"foob":char*:"Zm9vYg==":int:8:exp:0 + +Test case mbedtls_base64_encode #6 buffer just right +0:char*:"fooba":char*:"Zm9vYmE=":int:9:int:0 + +Test case mbedtls_base64_encode #6 buffer too small +0:char*:"fooba":char*:"Zm9vYmE=":int:8:exp:0 + +Test case mbedtls_base64_encode #7 buffer just right +0:char*:"foobar":char*:"Zm9vYmFy":int:9:int:0 + +Test case mbedtls_base64_encode #7 buffer too small +0:char*:"foobar":char*:"Zm9vYmFy":int:8:exp:0 + +Test case mbedtls_base64_decode #1 +1:char*:"":char*:"":int:0 + +Test case mbedtls_base64_decode #2 +1:char*:"Zg==":char*:"f":int:0 + +Test case mbedtls_base64_decode #3 +1:char*:"Zm8=":char*:"fo":int:0 + +Test case mbedtls_base64_decode #4 +1:char*:"Zm9v":char*:"foo":int:0 + +Test case mbedtls_base64_decode #5 +1:char*:"Zm9vYg==":char*:"foob":int:0 + +Test case mbedtls_base64_decode #6 +1:char*:"Zm9vYmE=":char*:"fooba":int:0 + +Test case mbedtls_base64_decode #7 +1:char*:"Zm9vYmFy":char*:"foobar":int:0 + +Base64 decode (Illegal character) +1:char*:"zm#=":char*:"":exp:1 + +Base64 decode (Too much equal signs) +1:char*:"zm===":char*:"":exp:1 + +Base64 decode (Invalid char after equal signs) +1:char*:"zm=masd":char*:"":exp:1 + +Base64 decode (Space inside string) +1:char*:"zm masd":char*:"":exp:1 + +Base64 decode "Zm9vYmFy" (no newline nor '\0' at end) +4:hex:"5a6d3976596d4679":char*:"foobar":int:0 + +Base64 decode "Zm9vYmFy\n" (LF at end) +4:hex:"5a6d3976596d46790a":char*:"foobar":int:0 + +Base64 decode "Zm9vYmFy\r\n" (CRLF at end) +4:hex:"5a6d3976596d46790d0a":char*:"foobar":int:0 + +Base64 decode "Zm9vYmFy\r" (CR at end) +4:hex:"5a6d3976596d46790d":char*:"":exp:1 + +Base64 decode "Zm9vYmFy " (SP at end) +4:hex:"5a6d3976596d467920":char*:"foobar":int:0 + +Base64 decode "Zm9vYmFy \n" (SP+LF at end) +4:hex:"5a6d3976596d4679200a":char*:"foobar":int:0 + +Base64 decode "Zm9vYmFy \r\n" (SP+CRLF at end) +4:hex:"5a6d3976596d4679200d0a":char*:"foobar":int:0 + +Base64 decode "Zm9vYmFy \r" (SP+CR at end) +4:hex:"5a6d3976596d4679200d":char*:"":exp:1 + +Base64 decode "Zm9vYmFy " (2SP at end) +4:hex:"5a6d3976596d46792020":char*:"foobar":int:0 + +Base64 decode "Zm9vYmFy \n" (2SP+LF at end) +4:hex:"5a6d3976596d467920200a":char*:"foobar":int:0 + +Base64 decode "Zm9vYmFy \r\n" (2SP+CRLF at end) +4:hex:"5a6d3976596d467920200d0a":char*:"foobar":int:0 + +Base64 decode "Zm9vYmFy \r" (2SP+CR at end) +4:hex:"5a6d3976596d467920200d":char*:"":exp:1 + +Base64 decode "Zm9vYmF\ny" (LF inside) +4:hex:"5a6d3976596d460a79":char*:"foobar":int:0 + +Base64 decode "Zm9vYmF\ry" (CRLF inside) +4:hex:"5a6d3976596d460d0a79":char*:"foobar":int:0 + +Base64 decode "Zm9vYmF\ry" (CR inside) +4:hex:"5a6d3976596d460d79":char*:"":exp:1 + +Base64 decode "Zm9vYmF y" (SP inside) +4:hex:"5a6d3976596d462079":char*:"":exp:1 + +Base64 decode "Zm9vYmF \ny" (SP+LF inside) +4:hex:"5a6d3976596d46200a79":char*:"foobar":int:0 + +Base64 decode "Zm9vYmF \ry" (SP+CRLF inside) +4:hex:"5a6d3976596d46200d0a79":char*:"foobar":int:0 + +Base64 decode "Zm9vYmF \ry" (SP+CR inside) +4:hex:"5a6d3976596d46200d79":char*:"":exp:1 + +Base64 decode "Zm9vYmF y" (2SP inside) +4:hex:"5a6d3976596d46202079":char*:"":exp:1 + +Base64 decode "Zm9vYmF \ny" (2SP+LF inside) +4:hex:"5a6d3976596d4620200a79":char*:"foobar":int:0 + +Base64 decode "Zm9vYmF \ry" (2SP+CRLF inside) +4:hex:"5a6d3976596d4620200d0a79":char*:"foobar":int:0 + +Base64 decode "Zm9vYmF \ry" (2SP+CR inside) +4:hex:"5a6d3976596d4620200d79":char*:"":exp:1 + +Base64 encode hex #1 +2:hex:"010203040506070809":char*:"AQIDBAUGBwgJ":int:13:int:0 + +Base64 encode hex #2 (buffer too small) +2:hex:"010203040506070809":char*:"AQIDBAUGBwgJ":int:12:exp:0 + +Base64 encode hex #3 +2:hex:"0102030405060708":char*:"AQIDBAUGBwg=":int:13:int:0 + +Base64 encode hex #4 +2:hex:"01020304050607":char*:"AQIDBAUGBw==":int:13:int:0 + +Base64 encode hex all valid input bytes #0 +2:hex:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==":int:345:int:0 + +Base64 encode hex all valid input bytes #1 +2:hex:"0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff00":char*:"AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/AA==":int:345:int:0 + +Base64 encode hex all valid input bytes #2 +2:hex:"02030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff0001":char*:"AgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAQ==":int:345:int:0 + +Base64 encode all valid output characters at all offsets +2:hex:"00108310518720928b30d38f41149351559761969b71d79f8218a39259a7a29aabb2dbafc31cb3d35db7e39ebbf3dfbff800420c41461c824a2cc34e3d04524d45565d865a6dc75e7e08628e49669e8a6aaecb6ebf0c72cf4d76df8e7aefcf7effe00108310518720928b30d38f41149351559761969b71d79f8218a39259a7a29aabb2dbafc31cb3d35db7e39ebbf3dfbff800420c41461c824a2cc34e3d04524d45565d865a6dc75e7e08628e49669e8a6aaecb6ebf0c72cf4d76df8e7aefcf7efd0":char*:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/Q":int:261:int:0 + +Base64 decode hex #1 +3:char*:"AQIDBAUGBwgJ":hex:"010203040506070809":int:9:int:0 + +Base64 decode hex #2 (buffer too small) +3:char*:"AQIDBAUGBwgJ":hex:"010203040506070809":int:8:exp:0 + +Base64 decode hex #3 +3:char*:"AQIDBAUGBwg=":hex:"0102030405060708":int:8:int:0 + +Base64 decode hex #4 +3:char*:"AQIDBAUGBw==":hex:"01020304050607":int:7:int:0 + +Base64 decode hex #5 (buffer too small) +3:char*:"AQIDBAUGBw==":hex:"01020304050607":int:6:exp:0 + +Base64 decode all valid input characters at all offsets +3:char*:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/Q":hex:"00108310518720928b30d38f41149351559761969b71d79f8218a39259a7a29aabb2dbafc31cb3d35db7e39ebbf3dfbff800420c41461c824a2cc34e3d04524d45565d865a6dc75e7e08628e49669e8a6aaecb6ebf0c72cf4d76df8e7aefcf7effe00108310518720928b30d38f41149351559761969b71d79f8218a39259a7a29aabb2dbafc31cb3d35db7e39ebbf3dfbff800420c41461c824a2cc34e3d04524d45565d865a6dc75e7e08628e49669e8a6aaecb6ebf0c72cf4d76df8e7aefcf7efd0":int:195:int:0 + +Base64 Selftest +depends_on:0 +5 + diff --git a/third_party/mbedtls/test/test_suite_blowfish.c b/third_party/mbedtls/test/test_suite_blowfish.c new file mode 100644 index 000000000..d5af0182e --- /dev/null +++ b/third_party/mbedtls/test/test_suite_blowfish.c @@ -0,0 +1,728 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_blowfish.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_blowfish.function + * Test suite data : suites/test_suite_blowfish.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_BLOWFISH_C) +void test_blowfish_valid_param( ) +{ + TEST_VALID_PARAM( mbedtls_blowfish_free( NULL ) ); +exit: + ; +} + +void test_blowfish_valid_param_wrapper( void ** params ) +{ + (void)params; + + test_blowfish_valid_param( ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_blowfish_invalid_param( ) +{ + mbedtls_blowfish_context ctx; + unsigned char buf[16] = { 0 }; + size_t const valid_keylength = sizeof( buf ) * 8; + size_t valid_mode = MBEDTLS_BLOWFISH_ENCRYPT; + size_t invalid_mode = 42; + size_t off; + ((void) off); + + TEST_INVALID_PARAM( mbedtls_blowfish_init( NULL ) ); + TEST_VALID_PARAM( mbedtls_blowfish_free( NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_setkey( NULL, + buf, + valid_keylength ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_setkey( &ctx, + NULL, + valid_keylength ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_ecb( NULL, + valid_mode, + buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_ecb( &ctx, + invalid_mode, + buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_ecb( &ctx, + valid_mode, + NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_ecb( &ctx, + valid_mode, + buf, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_cbc( NULL, + valid_mode, + sizeof( buf ), + buf, buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_cbc( &ctx, + invalid_mode, + sizeof( buf ), + buf, buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_cbc( &ctx, + valid_mode, + sizeof( buf ), + NULL, buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_cbc( &ctx, + valid_mode, + sizeof( buf ), + buf, NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_cbc( &ctx, + valid_mode, + sizeof( buf ), + buf, buf, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#if defined(MBEDTLS_CIPHER_MODE_CFB) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_cfb64( NULL, + valid_mode, + sizeof( buf ), + &off, buf, + buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_cfb64( &ctx, + invalid_mode, + sizeof( buf ), + &off, buf, + buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_cfb64( &ctx, + valid_mode, + sizeof( buf ), + NULL, buf, + buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_cfb64( &ctx, + valid_mode, + sizeof( buf ), + &off, NULL, + buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_cfb64( &ctx, + valid_mode, + sizeof( buf ), + &off, buf, + NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_cfb64( &ctx, + valid_mode, + sizeof( buf ), + &off, buf, + buf, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CFB */ + +#if defined(MBEDTLS_CIPHER_MODE_CTR) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_ctr( NULL, + sizeof( buf ), + &off, + buf, buf, + buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_ctr( &ctx, + sizeof( buf ), + NULL, + buf, buf, + buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_ctr( &ctx, + sizeof( buf ), + &off, + NULL, buf, + buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_ctr( &ctx, + sizeof( buf ), + &off, + buf, NULL, + buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_ctr( &ctx, + sizeof( buf ), + &off, + buf, buf, + NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA, + mbedtls_blowfish_crypt_ctr( &ctx, + sizeof( buf ), + &off, + buf, buf, + buf, NULL ) ); +#endif /* MBEDTLS_CIPHER_MODE_CTR */ + +exit: + return; +} + +void test_blowfish_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_blowfish_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_blowfish_encrypt_ecb( data_t * key_str, data_t * src_str, + data_t * dst, int setkey_result ) +{ + unsigned char output[100]; + mbedtls_blowfish_context ctx; + + memset(output, 0x00, 100); + mbedtls_blowfish_init( &ctx ); + + + TEST_ASSERT( mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); + if( setkey_result == 0 ) + { + TEST_ASSERT( mbedtls_blowfish_crypt_ecb( &ctx, MBEDTLS_BLOWFISH_ENCRYPT, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 8, dst->len ) == 0 ); + } + +exit: + mbedtls_blowfish_free( &ctx ); +} + +void test_blowfish_encrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_blowfish_encrypt_ecb( &data0, &data2, &data4, *( (int *) params[6] ) ); +} +void test_blowfish_decrypt_ecb( data_t * key_str, data_t * src_str, + data_t * dst, int setkey_result ) +{ + unsigned char output[100]; + mbedtls_blowfish_context ctx; + + memset(output, 0x00, 100); + mbedtls_blowfish_init( &ctx ); + + + TEST_ASSERT( mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ) == setkey_result ); + if( setkey_result == 0 ) + { + TEST_ASSERT( mbedtls_blowfish_crypt_ecb( &ctx, MBEDTLS_BLOWFISH_DECRYPT, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 8, dst->len ) == 0 ); + } + +exit: + mbedtls_blowfish_free( &ctx ); +} + +void test_blowfish_decrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_blowfish_decrypt_ecb( &data0, &data2, &data4, *( (int *) params[6] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_blowfish_encrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, + int cbc_result ) +{ + unsigned char output[100]; + mbedtls_blowfish_context ctx; + + memset(output, 0x00, 100); + mbedtls_blowfish_init( &ctx ); + + + mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ); + + TEST_ASSERT( mbedtls_blowfish_crypt_cbc( &ctx, MBEDTLS_BLOWFISH_ENCRYPT, src_str->len , iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + } + +exit: + mbedtls_blowfish_free( &ctx ); +} + +void test_blowfish_encrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_blowfish_encrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_blowfish_decrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, + int cbc_result ) +{ + unsigned char output[100]; + mbedtls_blowfish_context ctx; + + memset(output, 0x00, 100); + mbedtls_blowfish_init( &ctx ); + + + mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_blowfish_crypt_cbc( &ctx, MBEDTLS_BLOWFISH_DECRYPT, src_str->len , iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, src_str->len, + dst->len ) == 0 ); + } + +exit: + mbedtls_blowfish_free( &ctx ); +} + +void test_blowfish_decrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_blowfish_decrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_blowfish_encrypt_cfb64( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_blowfish_context ctx; + size_t iv_offset = 0; + + memset(output, 0x00, 100); + mbedtls_blowfish_init( &ctx ); + + + mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_blowfish_crypt_cfb64( &ctx, MBEDTLS_BLOWFISH_ENCRYPT, src_str->len, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, src_str->len, + dst->len ) == 0 ); + +exit: + mbedtls_blowfish_free( &ctx ); +} + +void test_blowfish_encrypt_cfb64_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_blowfish_encrypt_cfb64( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CFB) +void test_blowfish_decrypt_cfb64( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_blowfish_context ctx; + size_t iv_offset = 0; + + memset(output, 0x00, 100); + mbedtls_blowfish_init( &ctx ); + + + mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_blowfish_crypt_cfb64( &ctx, MBEDTLS_BLOWFISH_DECRYPT, src_str->len, &iv_offset, iv_str->x, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, src_str->len, + dst->len ) == 0 ); + +exit: + mbedtls_blowfish_free( &ctx ); +} + +void test_blowfish_decrypt_cfb64_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_blowfish_decrypt_cfb64( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CFB */ +#if defined(MBEDTLS_CIPHER_MODE_CTR) +void test_blowfish_encrypt_ctr( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst ) +{ + unsigned char stream_str[100]; + unsigned char output[100]; + mbedtls_blowfish_context ctx; + size_t iv_offset = 0; + + memset(stream_str, 0x00, 100); + memset(output, 0x00, 100); + mbedtls_blowfish_init( &ctx ); + + + mbedtls_blowfish_setkey( &ctx, key_str->x, key_str->len * 8 ); + TEST_ASSERT( mbedtls_blowfish_crypt_ctr( &ctx, src_str->len, &iv_offset, iv_str->x, stream_str, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, src_str->len, + dst->len ) == 0 ); + +exit: + mbedtls_blowfish_free( &ctx ); +} + +void test_blowfish_encrypt_ctr_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_blowfish_encrypt_ctr( &data0, &data2, &data4, &data6 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CTR */ +#endif /* MBEDTLS_BLOWFISH_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_BLOWFISH_C) + + case 0: + { + *out_value = MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA; + } + break; + case 1: + { + *out_value = MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_BLOWFISH_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_BLOWFISH_C) + test_blowfish_valid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_BLOWFISH_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_blowfish_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_BLOWFISH_C) + test_blowfish_encrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_BLOWFISH_C) + test_blowfish_decrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_BLOWFISH_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_blowfish_encrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_BLOWFISH_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_blowfish_decrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_BLOWFISH_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_blowfish_encrypt_cfb64_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_BLOWFISH_C) && defined(MBEDTLS_CIPHER_MODE_CFB) + test_blowfish_decrypt_cfb64_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_BLOWFISH_C) && defined(MBEDTLS_CIPHER_MODE_CTR) + test_blowfish_encrypt_ctr_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_blowfish.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_blowfish.datax b/third_party/mbedtls/test/test_suite_blowfish.datax new file mode 100644 index 000000000..dea859a35 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_blowfish.datax @@ -0,0 +1,315 @@ +BLOWFISH - Valid parameters +0 + +BLOWFISH - Invalid parameters +1 + +BLOWFISH-ECB Encrypt SSLeay reference #1 +2:hex:"0000000000000000":hex:"0000000000000000":hex:"4ef997456198dd78":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #2 +2:hex:"ffffffffffffffff":hex:"ffffffffffffffff":hex:"51866fd5b85ecb8a":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #3 +2:hex:"3000000000000000":hex:"1000000000000001":hex:"7d856f9a613063f2":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #4 +2:hex:"1111111111111111":hex:"1111111111111111":hex:"2466dd878b963c9d":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #5 +2:hex:"0123456789abcdef":hex:"1111111111111111":hex:"61f9c3802281b096":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #6 +2:hex:"1111111111111111":hex:"0123456789abcdef":hex:"7d0cc630afda1ec7":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #7 +2:hex:"0000000000000000":hex:"0000000000000000":hex:"4ef997456198dd78":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #8 +2:hex:"fedcba9876543210":hex:"0123456789abcdef":hex:"0aceab0fc6a0a28d":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #9 +2:hex:"7ca110454a1a6e57":hex:"01a1d6d039776742":hex:"59c68245eb05282b":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #10 +2:hex:"0131d9619dc1376e":hex:"5cd54ca83def57da":hex:"b1b8cc0b250f09a0":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #11 +2:hex:"07a1133e4a0b2686":hex:"0248d43806f67172":hex:"1730e5778bea1da4":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #12 +2:hex:"3849674c2602319e":hex:"51454b582ddf440a":hex:"a25e7856cf2651eb":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #13 +2:hex:"04b915ba43feb5b6":hex:"42fd443059577fa2":hex:"353882b109ce8f1a":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #14 +2:hex:"0113b970fd34f2ce":hex:"059b5e0851cf143a":hex:"48f4d0884c379918":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #15 +2:hex:"0170f175468fb5e6":hex:"0756d8e0774761d2":hex:"432193b78951fc98":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #16 +2:hex:"43297fad38e373fe":hex:"762514b829bf486a":hex:"13f04154d69d1ae5":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #17 +2:hex:"07a7137045da2a16":hex:"3bdd119049372802":hex:"2eedda93ffd39c79":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #18 +2:hex:"04689104c2fd3b2f":hex:"26955f6835af609a":hex:"d887e0393c2da6e3":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #19 +2:hex:"37d06bb516cb7546":hex:"164d5e404f275232":hex:"5f99d04f5b163969":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #20 +2:hex:"1f08260d1ac2465e":hex:"6b056e18759f5cca":hex:"4a057a3b24d3977b":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #21 +2:hex:"584023641aba6176":hex:"004bd6ef09176062":hex:"452031c1e4fada8e":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #22 +2:hex:"025816164629b007":hex:"480d39006ee762f2":hex:"7555ae39f59b87bd":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #23 +2:hex:"49793ebc79b3258f":hex:"437540c8698f3cfa":hex:"53c55f9cb49fc019":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #24 +2:hex:"4fb05e1515ab73a7":hex:"072d43a077075292":hex:"7a8e7bfa937e89a3":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #25 +2:hex:"49e95d6d4ca229bf":hex:"02fe55778117f12a":hex:"cf9c5d7a4986adb5":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #26 +2:hex:"018310dc409b26d6":hex:"1d9d5c5018f728c2":hex:"d1abb290658bc778":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #27 +2:hex:"1c587f1c13924fef":hex:"305532286d6f295a":hex:"55cb3774d13ef201":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #28 +2:hex:"0101010101010101":hex:"0123456789abcdef":hex:"fa34ec4847b268b2":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #29 +2:hex:"1f1f1f1f0e0e0e0e":hex:"0123456789abcdef":hex:"a790795108ea3cae":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #30 +2:hex:"e0fee0fef1fef1fe":hex:"0123456789abcdef":hex:"c39e072d9fac631d":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #31 +2:hex:"0000000000000000":hex:"ffffffffffffffff":hex:"014933e0cdaff6e4":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #32 +2:hex:"ffffffffffffffff":hex:"0000000000000000":hex:"f21e9a77b71c49bc":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #33 +2:hex:"0123456789abcdef":hex:"0000000000000000":hex:"245946885754369a":int:0 + +BLOWFISH-ECB Encrypt SSLeay reference #34 +2:hex:"fedcba9876543210":hex:"ffffffffffffffff":hex:"6b5c5a9c5d9e0a5a":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #1 +3:hex:"0000000000000000":hex:"4ef997456198dd78":hex:"0000000000000000":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #2 +3:hex:"ffffffffffffffff":hex:"51866fd5b85ecb8a":hex:"ffffffffffffffff":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #3 +3:hex:"3000000000000000":hex:"7d856f9a613063f2":hex:"1000000000000001":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #4 +3:hex:"1111111111111111":hex:"2466dd878b963c9d":hex:"1111111111111111":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #5 +3:hex:"0123456789abcdef":hex:"61f9c3802281b096":hex:"1111111111111111":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #6 +3:hex:"1111111111111111":hex:"7d0cc630afda1ec7":hex:"0123456789abcdef":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #7 +3:hex:"0000000000000000":hex:"4ef997456198dd78":hex:"0000000000000000":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #8 +3:hex:"fedcba9876543210":hex:"0aceab0fc6a0a28d":hex:"0123456789abcdef":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #9 +3:hex:"7ca110454a1a6e57":hex:"59c68245eb05282b":hex:"01a1d6d039776742":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #10 +3:hex:"0131d9619dc1376e":hex:"b1b8cc0b250f09a0":hex:"5cd54ca83def57da":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #11 +3:hex:"07a1133e4a0b2686":hex:"1730e5778bea1da4":hex:"0248d43806f67172":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #12 +3:hex:"3849674c2602319e":hex:"a25e7856cf2651eb":hex:"51454b582ddf440a":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #13 +3:hex:"04b915ba43feb5b6":hex:"353882b109ce8f1a":hex:"42fd443059577fa2":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #14 +3:hex:"0113b970fd34f2ce":hex:"48f4d0884c379918":hex:"059b5e0851cf143a":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #15 +3:hex:"0170f175468fb5e6":hex:"432193b78951fc98":hex:"0756d8e0774761d2":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #16 +3:hex:"43297fad38e373fe":hex:"13f04154d69d1ae5":hex:"762514b829bf486a":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #17 +3:hex:"07a7137045da2a16":hex:"2eedda93ffd39c79":hex:"3bdd119049372802":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #18 +3:hex:"04689104c2fd3b2f":hex:"d887e0393c2da6e3":hex:"26955f6835af609a":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #19 +3:hex:"37d06bb516cb7546":hex:"5f99d04f5b163969":hex:"164d5e404f275232":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #20 +3:hex:"1f08260d1ac2465e":hex:"4a057a3b24d3977b":hex:"6b056e18759f5cca":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #21 +3:hex:"584023641aba6176":hex:"452031c1e4fada8e":hex:"004bd6ef09176062":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #22 +3:hex:"025816164629b007":hex:"7555ae39f59b87bd":hex:"480d39006ee762f2":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #23 +3:hex:"49793ebc79b3258f":hex:"53c55f9cb49fc019":hex:"437540c8698f3cfa":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #24 +3:hex:"4fb05e1515ab73a7":hex:"7a8e7bfa937e89a3":hex:"072d43a077075292":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #25 +3:hex:"49e95d6d4ca229bf":hex:"cf9c5d7a4986adb5":hex:"02fe55778117f12a":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #26 +3:hex:"018310dc409b26d6":hex:"d1abb290658bc778":hex:"1d9d5c5018f728c2":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #27 +3:hex:"1c587f1c13924fef":hex:"55cb3774d13ef201":hex:"305532286d6f295a":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #28 +3:hex:"0101010101010101":hex:"fa34ec4847b268b2":hex:"0123456789abcdef":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #29 +3:hex:"1f1f1f1f0e0e0e0e":hex:"a790795108ea3cae":hex:"0123456789abcdef":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #30 +3:hex:"e0fee0fef1fef1fe":hex:"c39e072d9fac631d":hex:"0123456789abcdef":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #31 +3:hex:"0000000000000000":hex:"014933e0cdaff6e4":hex:"ffffffffffffffff":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #32 +3:hex:"ffffffffffffffff":hex:"f21e9a77b71c49bc":hex:"0000000000000000":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #33 +3:hex:"0123456789abcdef":hex:"245946885754369a":hex:"0000000000000000":int:0 + +BLOWFISH-ECB Decrypt SSLeay reference #34 +3:hex:"fedcba9876543210":hex:"6b5c5a9c5d9e0a5a":hex:"ffffffffffffffff":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #1 +2:hex:"f0":hex:"fedcba9876543210":hex:"":exp:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #2 +2:hex:"f0e1":hex:"fedcba9876543210":hex:"":exp:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #3 +2:hex:"f0e1d2":hex:"fedcba9876543210":hex:"":exp:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #4 +2:hex:"f0e1d2c3":hex:"fedcba9876543210":hex:"be1e639408640f05":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #5 +2:hex:"f0e1d2c3b4":hex:"fedcba9876543210":hex:"b39e44481bdb1e6e":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #6 +2:hex:"f0e1d2c3b4a5":hex:"fedcba9876543210":hex:"9457aa83b1928c0d":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #7 +2:hex:"f0e1d2c3b4a596":hex:"fedcba9876543210":hex:"8bb77032f960629d":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #8 +2:hex:"f0e1d2c3b4a59687":hex:"fedcba9876543210":hex:"e87a244e2cc85e82":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #9 +2:hex:"f0e1d2c3b4a5968778":hex:"fedcba9876543210":hex:"15750e7a4f4ec577":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #10 +2:hex:"f0e1d2c3b4a596877869":hex:"fedcba9876543210":hex:"122ba70b3ab64ae0":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #11 +2:hex:"f0e1d2c3b4a5968778695a":hex:"fedcba9876543210":hex:"3a833c9affc537f6":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #12 +2:hex:"f0e1d2c3b4a5968778695a4b":hex:"fedcba9876543210":hex:"9409da87a90f6bf2":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #13 +2:hex:"f0e1d2c3b4a5968778695a4b3c":hex:"fedcba9876543210":hex:"884f80625060b8b4":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #14 +2:hex:"f0e1d2c3b4a5968778695a4b3c2d":hex:"fedcba9876543210":hex:"1f85031c19e11968":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #15 +2:hex:"f0e1d2c3b4a5968778695a4b3c2d1e":hex:"fedcba9876543210":hex:"79d9373a714ca34f":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #16 +2:hex:"f0e1d2c3b4a5968778695a4b3c2d1e0f":hex:"fedcba9876543210":hex:"93142887ee3be15c":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #17 +2:hex:"f0e1d2c3b4a5968778695a4b3c2d1e0f00":hex:"fedcba9876543210":hex:"03429e838ce2d14b":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #18 +2:hex:"f0e1d2c3b4a5968778695a4b3c2d1e0f0011":hex:"fedcba9876543210":hex:"a4299e27469ff67b":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #19 +2:hex:"f0e1d2c3b4a5968778695a4b3c2d1e0f001122":hex:"fedcba9876543210":hex:"afd5aed1c1bc96a8":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #20 +2:hex:"f0e1d2c3b4a5968778695a4b3c2d1e0f00112233":hex:"fedcba9876543210":hex:"10851c0e3858da9f":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #21 +2:hex:"f0e1d2c3b4a5968778695a4b3c2d1e0f0011223344":hex:"fedcba9876543210":hex:"e6f51ed79b9db21f":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #22 +2:hex:"f0e1d2c3b4a5968778695a4b3c2d1e0f001122334455":hex:"fedcba9876543210":hex:"64a6e14afd36b46f":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #23 +2:hex:"f0e1d2c3b4a5968778695a4b3c2d1e0f00112233445566":hex:"fedcba9876543210":hex:"80c7d7d45a5479ad":int:0 + +BLOWFISH-SETKEY Setkey SSLeay reference #24 +2:hex:"f0e1d2c3b4a5968778695a4b3c2d1e0f0011223344556677":hex:"fedcba9876543210":hex:"05044b62fa52d080":int:0 + +BLOWFISH-SETKEY Setkey 440 bits +2:hex:"f0e1d2c3b4a5968778695a4b3c2d1e0f00112233445566778899aabbccddeeff0123456789abcdef0102030405060708090a0b0c0d0e0f":hex:"fedcba9876543210":hex:"9a2ab8f1b00c73d2":int:0 + +BLOWFISH-SETKEY Setkey 448 bits +2:hex:"f0e1d2c3b4a5968778695a4b3c2d1e0f00112233445566778899aabbccddeeff0123456789abcdef0102030405060708090a0b0c0d0e0fff":hex:"fedcba9876543210":hex:"2fb3ab7f0ee91b69":int:0 + +BLOWFISH-SETKEY Setkey 456 bits +2:hex:"f0e1d2c3b4a5968778695a4b3c2d1e0f00112233445566778899aabbccddeeff0123456789abcdef0102030405060708090a0b0c0d0e0fffff":hex:"fedcba9876543210":hex:"":exp:0 + +BLOWFISH-CBC Encrypt [#1] +4:hex:"0123456789ABCDEFF0E1D2C3B4A59687":hex:"FEDCBA9876543210":hex:"37363534333231204E6F77206973207468652074696D6520666F722000000000":hex:"6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5ff92cc":int:0 + +BLOWFISH-CBC Decrypt [#1] +5:hex:"0123456789ABCDEFF0E1D2C3B4A59687":hex:"FEDCBA9876543210":hex:"6B77B4D63006DEE605B156E27403979358DEB9E7154616D959F1652BD5FF92CC":hex:"37363534333231204e6f77206973207468652074696d6520666f722000000000":int:0 + +BLOWFISH-CBC Encrypt [#2] +4:hex:"0123456789ABCDEFF0E1D2C3B4A59687":hex:"FEDCBA9876543210":hex:"37363534333231204E6F77206973207468652074696D6520666F7220000000":hex:"":exp:1 + +BLOWFISH-CBC Decrypt [#2] +5:hex:"0123456789ABCDEFF0E1D2C3B4A59687":hex:"FEDCBA9876543210":hex:"6B77B4D63006DEE605B156E27403979358DEB9E7154616D959F1652BD5FF92CC00":hex:"":exp:1 + +BLOWFISH-CFB Encrypt +6:hex:"0123456789ABCDEFF0E1D2C3B4A59687":hex:"FEDCBA9876543210":hex:"37363534333231204E6F77206973207468652074696D6520666F722000":hex:"e73214a2822139caf26ecf6d2eb9e76e3da3de04d1517200519d57a6c3" + +BLOWFISH-CFB Decrypt +7:hex:"0123456789ABCDEFF0E1D2C3B4A59687":hex:"FEDCBA9876543210":hex:"E73214A2822139CAF26ECF6D2EB9E76E3DA3DE04D1517200519D57A6C3":hex:"37363534333231204e6f77206973207468652074696d6520666f722000" + +BLOWFISH-CTR Encrypt +8:hex:"0123456789ABCDEFF0E1D2C3B4A59687":hex:"FEDCBA9876543210":hex:"37363534333231204E6F77206973207468652074696D6520666F722000":hex:"e73214a2822139ca60254740dd8c5b8acf5e9569c4affeb944b8fc020e" + +BLOWFISH-CTR Decrypt +8:hex:"0123456789ABCDEFF0E1D2C3B4A59687":hex:"FEDCBA9876543210":hex:"e73214a2822139ca60254740dd8c5b8acf5e9569c4affeb944b8fc020e":hex:"37363534333231204e6f77206973207468652074696d6520666f722000" + diff --git a/third_party/mbedtls/test/test_suite_ccm.c b/third_party/mbedtls/test/test_suite_ccm.c new file mode 100644 index 000000000..5023e6a97 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_ccm.c @@ -0,0 +1,953 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_ccm.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_ccm.function + * Test suite data : suites/test_suite_ccm.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_CCM_C) +#include "third_party/mbedtls/ccm.h" +#if defined(MBEDTLS_SELF_TEST) +#if defined(MBEDTLS_AES_C) +void test_mbedtls_ccm_self_test( ) +{ + TEST_ASSERT( mbedtls_ccm_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_mbedtls_ccm_self_test_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_ccm_self_test( ); +} +#endif /* MBEDTLS_AES_C */ +#endif /* MBEDTLS_SELF_TEST */ +void test_mbedtls_ccm_setkey( int cipher_id, int key_size, int result ) +{ + mbedtls_ccm_context ctx; + unsigned char key[32]; + int ret; + + mbedtls_ccm_init( &ctx ); + + memset( key, 0x2A, sizeof( key ) ); + TEST_ASSERT( (unsigned) key_size <= 8 * sizeof( key ) ); + + ret = mbedtls_ccm_setkey( &ctx, cipher_id, key, key_size ); + TEST_ASSERT( ret == result ); + +exit: + mbedtls_ccm_free( &ctx ); +} + +void test_mbedtls_ccm_setkey_wrapper( void ** params ) +{ + + test_mbedtls_ccm_setkey( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#if defined(MBEDTLS_AES_C) +void test_ccm_lengths( int msg_len, int iv_len, int add_len, int tag_len, int res ) +{ + mbedtls_ccm_context ctx; + unsigned char key[16]; + unsigned char msg[10]; + unsigned char iv[14]; + unsigned char *add = NULL; + unsigned char out[10]; + unsigned char tag[18]; + int decrypt_ret; + + mbedtls_ccm_init( &ctx ); + + ASSERT_ALLOC_WEAK( add, add_len ); + memset( key, 0, sizeof( key ) ); + memset( msg, 0, sizeof( msg ) ); + memset( iv, 0, sizeof( iv ) ); + memset( out, 0, sizeof( out ) ); + memset( tag, 0, sizeof( tag ) ); + + TEST_ASSERT( mbedtls_ccm_setkey( &ctx, MBEDTLS_CIPHER_ID_AES, + key, 8 * sizeof( key ) ) == 0 ); + + TEST_ASSERT( mbedtls_ccm_encrypt_and_tag( &ctx, msg_len, iv, iv_len, add, add_len, + msg, out, tag, tag_len ) == res ); + + decrypt_ret = mbedtls_ccm_auth_decrypt( &ctx, msg_len, iv, iv_len, add, add_len, + msg, out, tag, tag_len ); + + if( res == 0 ) + TEST_ASSERT( decrypt_ret == MBEDTLS_ERR_CCM_AUTH_FAILED ); + else + TEST_ASSERT( decrypt_ret == res ); + +exit: + mbedtls_free( add ); + mbedtls_ccm_free( &ctx ); +} + +void test_ccm_lengths_wrapper( void ** params ) +{ + + test_ccm_lengths( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_AES_C */ +#if defined(MBEDTLS_AES_C) +void test_ccm_star_lengths( int msg_len, int iv_len, int add_len, int tag_len, + int res ) +{ + mbedtls_ccm_context ctx; + unsigned char key[16]; + unsigned char msg[10]; + unsigned char iv[14]; + unsigned char add[10]; + unsigned char out[10]; + unsigned char tag[18]; + int decrypt_ret; + + mbedtls_ccm_init( &ctx ); + + memset( key, 0, sizeof( key ) ); + memset( msg, 0, sizeof( msg ) ); + memset( iv, 0, sizeof( iv ) ); + memset( add, 0, sizeof( add ) ); + memset( out, 0, sizeof( out ) ); + memset( tag, 0, sizeof( tag ) ); + + TEST_ASSERT( mbedtls_ccm_setkey( &ctx, MBEDTLS_CIPHER_ID_AES, + key, 8 * sizeof( key ) ) == 0 ); + + TEST_ASSERT( mbedtls_ccm_star_encrypt_and_tag( &ctx, msg_len, iv, iv_len, + add, add_len, msg, out, tag, tag_len ) == res ); + + decrypt_ret = mbedtls_ccm_star_auth_decrypt( &ctx, msg_len, iv, iv_len, add, + add_len, msg, out, tag, tag_len ); + + if( res == 0 && tag_len != 0 ) + TEST_ASSERT( decrypt_ret == MBEDTLS_ERR_CCM_AUTH_FAILED ); + else + TEST_ASSERT( decrypt_ret == res ); + +exit: + mbedtls_ccm_free( &ctx ); +} + +void test_ccm_star_lengths_wrapper( void ** params ) +{ + + test_ccm_star_lengths( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_AES_C */ +void test_mbedtls_ccm_encrypt_and_tag( int cipher_id, data_t * key, + data_t * msg, data_t * iv, + data_t * add, data_t * result ) +{ + mbedtls_ccm_context ctx; + size_t tag_len; + uint8_t * msg_n_tag = (uint8_t *)malloc( result->len + 2 ); + + mbedtls_ccm_init( &ctx ); + + memset( msg_n_tag, 0, result->len + 2 ); + memcpy( msg_n_tag, msg->x, msg->len ); + + tag_len = result->len - msg->len; + + TEST_ASSERT( mbedtls_ccm_setkey( &ctx, cipher_id, key->x, key->len * 8 ) == 0 ); + + /* Test with input == output */ + TEST_ASSERT( mbedtls_ccm_encrypt_and_tag( &ctx, msg->len, iv->x, iv->len, add->x, add->len, + msg_n_tag, msg_n_tag, msg_n_tag + msg->len, tag_len ) == 0 ); + + TEST_ASSERT( memcmp( msg_n_tag, result->x, result->len ) == 0 ); + + /* Check we didn't write past the end */ + TEST_ASSERT( msg_n_tag[result->len] == 0 && msg_n_tag[result->len + 1] == 0 ); + +exit: + mbedtls_ccm_free( &ctx ); + free( msg_n_tag ); +} + +void test_mbedtls_ccm_encrypt_and_tag_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + + test_mbedtls_ccm_encrypt_and_tag( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9 ); +} +void test_mbedtls_ccm_auth_decrypt( int cipher_id, data_t * key, + data_t * msg, data_t * iv, + data_t * add, int tag_len, int result, + data_t * expected_msg ) +{ + unsigned char tag[16]; + mbedtls_ccm_context ctx; + + mbedtls_ccm_init( &ctx ); + + memset( tag, 0x00, sizeof( tag ) ); + + msg->len -= tag_len; + memcpy( tag, msg->x + msg->len, tag_len ); + + TEST_ASSERT( mbedtls_ccm_setkey( &ctx, cipher_id, key->x, key->len * 8 ) == 0 ); + + /* Test with input == output */ + TEST_ASSERT( mbedtls_ccm_auth_decrypt( &ctx, msg->len, iv->x, iv->len, add->x, add->len, + msg->x, msg->x, msg->x + msg->len, tag_len ) == result ); + + if( result == 0 ) + { + TEST_ASSERT( memcmp( msg->x, expected_msg->x, expected_msg->len ) == 0 ); + } + else + { + size_t i; + + for( i = 0; i < msg->len; i++ ) + TEST_ASSERT( msg->x[i] == 0 ); + } + + /* Check we didn't write past the end (where the original tag is) */ + TEST_ASSERT( memcmp( msg->x + msg->len, tag, tag_len ) == 0 ); + +exit: + mbedtls_ccm_free( &ctx ); +} + +void test_mbedtls_ccm_auth_decrypt_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data11 = {(uint8_t *) params[11], *( (uint32_t *) params[12] )}; + + test_mbedtls_ccm_auth_decrypt( *( (int *) params[0] ), &data1, &data3, &data5, &data7, *( (int *) params[9] ), *( (int *) params[10] ), &data11 ); +} +void test_mbedtls_ccm_star_encrypt_and_tag( int cipher_id, + data_t *key, data_t *msg, + data_t *source_address, data_t *frame_counter, + int sec_level, data_t *add, + data_t *expected_result, int output_ret ) +{ + unsigned char iv[13]; + unsigned char result[50]; + mbedtls_ccm_context ctx; + size_t iv_len, tag_len; + int ret; + + mbedtls_ccm_init( &ctx ); + + memset( result, 0x00, sizeof( result ) ); + + if( sec_level % 4 == 0) + tag_len = 0; + else + tag_len = 1 << ( sec_level % 4 + 1); + + TEST_ASSERT( source_address->len == 8 ); + TEST_ASSERT( frame_counter->len == 4 ); + memcpy( iv, source_address->x, source_address->len ); + memcpy( iv + source_address->len, frame_counter->x, frame_counter->len ); + iv[source_address->len + frame_counter->len] = sec_level; + iv_len = sizeof( iv ); + + TEST_ASSERT( mbedtls_ccm_setkey( &ctx, cipher_id, + key->x, key->len * 8 ) == 0 ); + + ret = mbedtls_ccm_star_encrypt_and_tag( &ctx, msg->len, iv, iv_len, + add->x, add->len, msg->x, + result, result + msg->len, tag_len ); + + TEST_ASSERT( ret == output_ret ); + + TEST_ASSERT( memcmp( result, + expected_result->x, expected_result->len ) == 0 ); + + /* Check we didn't write past the end */ + TEST_ASSERT( result[expected_result->len] == 0 && + result[expected_result->len + 1] == 0 ); + +exit: + mbedtls_ccm_free( &ctx ); +} + +void test_mbedtls_ccm_star_encrypt_and_tag_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_mbedtls_ccm_star_encrypt_and_tag( *( (int *) params[0] ), &data1, &data3, &data5, &data7, *( (int *) params[9] ), &data10, &data12, *( (int *) params[14] ) ); +} +void test_mbedtls_ccm_star_auth_decrypt( int cipher_id, + data_t *key, data_t *msg, + data_t *source_address, data_t *frame_counter, + int sec_level, data_t *add, + data_t *expected_result, int output_ret ) +{ + unsigned char iv[13]; + unsigned char result[50]; + mbedtls_ccm_context ctx; + size_t iv_len, tag_len; + int ret; + + mbedtls_ccm_init( &ctx ); + + memset( iv, 0x00, sizeof( iv ) ); + memset( result, '+', sizeof( result ) ); + + if( sec_level % 4 == 0) + tag_len = 0; + else + tag_len = 1 << ( sec_level % 4 + 1); + + TEST_ASSERT( source_address->len == 8 ); + TEST_ASSERT( frame_counter->len == 4 ); + memcpy( iv, source_address->x, source_address->len ); + memcpy( iv + source_address->len, frame_counter->x, frame_counter->len ); + iv[source_address->len + frame_counter->len] = sec_level; + iv_len = sizeof( iv ); + + TEST_ASSERT( mbedtls_ccm_setkey( &ctx, cipher_id, key->x, key->len * 8 ) == 0 ); + + ret = mbedtls_ccm_star_auth_decrypt( &ctx, msg->len - tag_len, iv, iv_len, + add->x, add->len, msg->x, result, + msg->x + msg->len - tag_len, tag_len ); + + TEST_ASSERT( ret == output_ret ); + + TEST_ASSERT( memcmp( result, expected_result->x, + expected_result->len ) == 0 ); + + /* Check we didn't write past the end (where the original tag is) */ + TEST_ASSERT( ( msg->len + 2 ) <= sizeof( result ) ); + TEST_EQUAL( result[msg->len], '+' ); + TEST_EQUAL( result[msg->len + 1], '+' ); + +exit: + mbedtls_ccm_free( &ctx ); +} + +void test_mbedtls_ccm_star_auth_decrypt_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_mbedtls_ccm_star_auth_decrypt( *( (int *) params[0] ), &data1, &data3, &data5, &data7, *( (int *) params[9] ), &data10, &data12, *( (int *) params[14] ) ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_ccm_invalid_param( ) +{ + struct mbedtls_ccm_context ctx; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + mbedtls_cipher_id_t valid_cipher = MBEDTLS_CIPHER_ID_AES; + int valid_len = sizeof(valid_buffer); + int valid_bitlen = valid_len * 8; + + mbedtls_ccm_init( &ctx ); + + /* mbedtls_ccm_init() */ + TEST_INVALID_PARAM( mbedtls_ccm_init( NULL ) ); + + /* mbedtls_ccm_setkey() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_setkey( NULL, valid_cipher, valid_buffer, valid_bitlen ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_setkey( &ctx, valid_cipher, NULL, valid_bitlen ) ); + + /* mbedtls_ccm_encrypt_and_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_encrypt_and_tag( NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_encrypt_and_tag( &ctx, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_encrypt_and_tag( &ctx, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_encrypt_and_tag( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_encrypt_and_tag( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_encrypt_and_tag( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + NULL, valid_len ) ); + + /* mbedtls_ccm_star_encrypt_and_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_star_encrypt_and_tag( NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_buffer, valid_len) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_star_encrypt_and_tag( &ctx, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_star_encrypt_and_tag( &ctx, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_star_encrypt_and_tag( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_star_encrypt_and_tag( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_star_encrypt_and_tag( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + NULL, valid_len ) ); + + /* mbedtls_ccm_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_auth_decrypt( NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_auth_decrypt( &ctx, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + NULL, valid_len ) ); + + /* mbedtls_ccm_star_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_star_auth_decrypt( NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_star_auth_decrypt( &ctx, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_star_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_star_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_star_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL, + valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CCM_BAD_INPUT, + mbedtls_ccm_star_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + NULL, valid_len ) ); + +exit: + mbedtls_ccm_free( &ctx ); + return; +} + +void test_ccm_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_ccm_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_ccm_valid_param( ) +{ + TEST_VALID_PARAM( mbedtls_ccm_free( NULL ) ); +exit: + return; +} + +void test_ccm_valid_param_wrapper( void ** params ) +{ + (void)params; + + test_ccm_valid_param( ); +} +#endif /* MBEDTLS_CCM_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_CCM_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_ID_AES; + } + break; + case 1: + { + *out_value = MBEDTLS_CIPHER_ID_CAMELLIA; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_CCM_BAD_INPUT; + } + break; + case 3: + { + *out_value = MBEDTLS_CIPHER_ID_BLOWFISH; + } + break; + case 4: + { + *out_value = MBEDTLS_ERR_CCM_AUTH_FAILED; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_CCM_C) + + case 0: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_CAMELLIA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_BLOWFISH_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if !defined(MBEDTLS_CCM_ALT) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_AES_C) + test_mbedtls_ccm_self_test_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_CCM_C) + test_mbedtls_ccm_setkey_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C) + test_ccm_lengths_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_AES_C) + test_ccm_star_lengths_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_CCM_C) + test_mbedtls_ccm_encrypt_and_tag_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_CCM_C) + test_mbedtls_ccm_auth_decrypt_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_CCM_C) + test_mbedtls_ccm_star_encrypt_and_tag_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_CCM_C) + test_mbedtls_ccm_star_auth_decrypt_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_CCM_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_ccm_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_CCM_C) + test_ccm_valid_param_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_ccm.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_ccm.datax b/third_party/mbedtls/test/test_suite_ccm.datax new file mode 100644 index 000000000..861b043dc --- /dev/null +++ b/third_party/mbedtls/test/test_suite_ccm.datax @@ -0,0 +1,1526 @@ +CCM self test +0 + +CCM - Invalid parameters +8 + +CCM - Valid parameters +9 + +CCM init #1 AES-128: OK +depends_on:0 +1:exp:0:int:128:int:0 + +CCM init #2 CAMELLIA-256: OK +depends_on:1 +1:exp:1:int:256:int:0 + +CCM init #3 AES-224: bad key size +depends_on:0 +1:exp:0:int:224:exp:2 + +CCM init #4 BLOWFISH-128: bad block size +depends_on:2 +1:exp:3:int:128:exp:2 + +CCM lengths #1 all OK +2:int:5:int:10:int:5:int:8:int:0 + +CCM lengths #2 nonce too short +2:int:5:int:6:int:5:int:8:exp:2 + +CCM lengths #3 nonce too long +2:int:5:int:14:int:5:int:8:exp:2 + +CCM lengths #4 tag too short +2:int:5:int:10:int:5:int:2:exp:2 + +CCM lengths #5 tag too long +2:int:5:int:10:int:5:int:18:exp:2 + +CCM lengths #6 tag length not even +2:int:5:int:10:int:5:int:7:exp:2 + +CCM lengths #7 AD too long (2^16 - 2^8) +depends_on:3 +2:int:5:int:10:int:65280:int:8:exp:2 + +CCM lengths #8 msg too long for this IV length (2^16, q = 2) +2:int:65536:int:13:int:5:int:8:exp:2 + +CCM lengths #9 tag length 0 +2:int:5:int:10:int:5:int:0:exp:2 + +CCM lengths #10 Large AD +2:int:5:int:10:int:32768:int:8:int:0 + +CCM* fixed tag lengths #1 all OK +3:int:5:int:10:int:5:int:8:int:0 + +CCM* fixed tag lengths #2 all OK - tag length 0 +3:int:5:int:10:int:5:int:0:int:0 + +CCM* encrypt and tag #1 +depends_on:0 +6:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"":hex:"ACDE480000000001":hex:"00000005":int:2:hex:"08D0842143010000000048DEAC020500000055CF000051525354":hex:"223BC1EC841AB553":int:0 + +CCM* encrypt and tag #2 +depends_on:0 +6:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"61626364":hex:"ACDE480000000001":hex:"00000005":int:4:hex:"69DC842143020000000048DEAC010000000048DEAC0405000000":hex:"D43E022B":int:0 + +CCM* encrypt and tag #3 +depends_on:0 +6:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"CE":hex:"ACDE480000000001":hex:"00000005":int:6:hex:"2BDC842143020000000048DEACFFFF010000000048DEAC060500000001":hex:"D84FDE529061F9C6F1":int:0 + +CCM* auth decrypt tag #1 +depends_on:0 +7:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"223BC1EC841AB553":hex:"ACDE480000000001":hex:"00000005":int:2:hex:"08D0842143010000000048DEAC020500000055CF000051525354":hex:"":int:0 + +CCM* auth decrypt tag #2 +depends_on:0 +7:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"D43E022B":hex:"ACDE480000000001":hex:"00000005":int:4:hex:"69DC842143020000000048DEAC010000000048DEAC0405000000":hex:"61626364":int:0 + +CCM* auth decrypt tag #3 +depends_on:0 +7:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"D84FDE529061F9C6F1":hex:"ACDE480000000001":hex:"00000005":int:6:hex:"2BDC842143020000000048DEACFFFF010000000048DEAC060500000001":hex:"CE":int:0 + +CCM encrypt and tag RFC 3610 #1 +depends_on:0 +4:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E":hex:"00000003020100A0A1A2A3A4A5":hex:"0001020304050607":hex:"588C979A61C663D2F066D0C2C0F989806D5F6B61DAC38417E8D12CFDF926E0" + +CCM encrypt and tag RFC 3610 #2 +depends_on:0 +4:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F":hex:"00000004030201A0A1A2A3A4A5":hex:"0001020304050607":hex:"72C91A36E135F8CF291CA894085C87E3CC15C439C9E43A3BA091D56E10400916" + +CCM encrypt and tag RFC 3610 #3 +depends_on:0 +4:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20":hex:"00000005040302A0A1A2A3A4A5":hex:"0001020304050607":hex:"51B1E5F44A197D1DA46B0F8E2D282AE871E838BB64DA8596574ADAA76FBD9FB0C5" + +CCM encrypt and tag RFC 3610 #4 +depends_on:0 +4:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0C0D0E0F101112131415161718191A1B1C1D1E":hex:"00000006050403A0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"A28C6865939A9A79FAAA5C4C2A9D4A91CDAC8C96C861B9C9E61EF1" + +CCM encrypt and tag RFC 3610 #5 +depends_on:0 +4:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0C0D0E0F101112131415161718191A1B1C1D1E1F":hex:"00000007060504A0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"DCF1FB7B5D9E23FB9D4E131253658AD86EBDCA3E51E83F077D9C2D93" + +CCM encrypt and tag RFC 3610 #6 +depends_on:0 +4:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0C0D0E0F101112131415161718191A1B1C1D1E1F20":hex:"00000008070605A0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"6FC1B011F006568B5171A42D953D469B2570A4BD87405A0443AC91CB94" + +CCM encrypt and tag RFC 3610 #7 +depends_on:0 +4:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E":hex:"00000009080706A0A1A2A3A4A5":hex:"0001020304050607":hex:"0135D1B2C95F41D5D1D4FEC185D166B8094E999DFED96C048C56602C97ACBB7490" + +CCM encrypt and tag RFC 3610 #8 +depends_on:0 +4:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F":hex:"0000000A090807A0A1A2A3A4A5":hex:"0001020304050607":hex:"7B75399AC0831DD2F0BBD75879A2FD8F6CAE6B6CD9B7DB24C17B4433F434963F34B4" + +CCM encrypt and tag RFC 3610 #9 +depends_on:0 +4:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20":hex:"0000000B0A0908A0A1A2A3A4A5":hex:"0001020304050607":hex:"82531A60CC24945A4B8279181AB5C84DF21CE7F9B73F42E197EA9C07E56B5EB17E5F4E" + +CCM encrypt and tag RFC 3610 #10 +depends_on:0 +4:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0C0D0E0F101112131415161718191A1B1C1D1E":hex:"0000000C0B0A09A0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"07342594157785152B074098330ABB141B947B566AA9406B4D999988DD" + +CCM encrypt and tag RFC 3610 #11 +depends_on:0 +4:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0C0D0E0F101112131415161718191A1B1C1D1E1F":hex:"0000000D0C0B0AA0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"676BB20380B0E301E8AB79590A396DA78B834934F53AA2E9107A8B6C022C" + +CCM encrypt and tag RFC 3610 #12 +depends_on:0 +4:exp:0:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0C0D0E0F101112131415161718191A1B1C1D1E1F20":hex:"0000000E0D0C0BA0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"C0FFA0D6F05BDB67F24D43A4338D2AA4BED7B20E43CD1AA31662E7AD65D6DB" + +CCM encrypt and tag RFC 3610 #13 +depends_on:0 +4:exp:0:hex:"D7828D13B2B0BDC325A76236DF93CC6B":hex:"08E8CF97D820EA258460E96AD9CF5289054D895CEAC47C":hex:"00412B4EA9CDBE3C9696766CFA":hex:"0BE1A88BACE018B1":hex:"4CB97F86A2A4689A877947AB8091EF5386A6FFBDD080F8E78CF7CB0CDDD7B3" + +CCM encrypt and tag RFC 3610 #14 +depends_on:0 +4:exp:0:hex:"D7828D13B2B0BDC325A76236DF93CC6B":hex:"9020EA6F91BDD85AFA0039BA4BAFF9BFB79C7028949CD0EC":hex:"0033568EF7B2633C9696766CFA":hex:"63018F76DC8A1BCB":hex:"4CCB1E7CA981BEFAA0726C55D378061298C85C92814ABC33C52EE81D7D77C08A" + +CCM encrypt and tag RFC 3610 #15 +depends_on:0 +4:exp:0:hex:"D7828D13B2B0BDC325A76236DF93CC6B":hex:"B916E0EACC1C00D7DCEC68EC0B3BBB1A02DE8A2D1AA346132E":hex:"00103FE41336713C9696766CFA":hex:"AA6CFA36CAE86B40":hex:"B1D23A2220DDC0AC900D9AA03C61FCF4A559A4417767089708A776796EDB723506" + +CCM encrypt and tag RFC 3610 #16 +depends_on:0 +4:exp:0:hex:"D7828D13B2B0BDC325A76236DF93CC6B":hex:"12DAAC5630EFA5396F770CE1A66B21F7B2101C":hex:"00764C63B8058E3C9696766CFA":hex:"D0D0735C531E1BECF049C244":hex:"14D253C3967B70609B7CBB7C499160283245269A6F49975BCADEAF" + +CCM encrypt and tag RFC 3610 #17 +depends_on:0 +4:exp:0:hex:"D7828D13B2B0BDC325A76236DF93CC6B":hex:"E88B6A46C78D63E52EB8C546EFB5DE6F75E9CC0D":hex:"00F8B678094E3B3C9696766CFA":hex:"77B60F011C03E1525899BCAE":hex:"5545FF1A085EE2EFBF52B2E04BEE1E2336C73E3F762C0C7744FE7E3C" + +CCM encrypt and tag RFC 3610 #18 +depends_on:0 +4:exp:0:hex:"D7828D13B2B0BDC325A76236DF93CC6B":hex:"6435ACBAFB11A82E2F071D7CA4A5EBD93A803BA87F":hex:"00D560912D3F703C9696766CFA":hex:"CD9044D2B71FDB8120EA60C0":hex:"009769ECABDF48625594C59251E6035722675E04C847099E5AE0704551" + +CCM encrypt and tag RFC 3610 #19 +depends_on:0 +4:exp:0:hex:"D7828D13B2B0BDC325A76236DF93CC6B":hex:"8A19B950BCF71A018E5E6701C91787659809D67DBEDD18":hex:"0042FFF8F1951C3C9696766CFA":hex:"D85BC7E69F944FB8":hex:"BC218DAA947427B6DB386A99AC1AEF23ADE0B52939CB6A637CF9BEC2408897C6BA" + +CCM encrypt and tag RFC 3610 #20 +depends_on:0 +4:exp:0:hex:"D7828D13B2B0BDC325A76236DF93CC6B":hex:"1761433C37C5A35FC1F39F406302EB907C6163BE38C98437":hex:"00920F40E56CDC3C9696766CFA":hex:"74A0EBC9069F5B37":hex:"5810E6FD25874022E80361A478E3E9CF484AB04F447EFFF6F0A477CC2FC9BF548944" + +CCM encrypt and tag RFC 3610 #21 +depends_on:0 +4:exp:0:hex:"D7828D13B2B0BDC325A76236DF93CC6B":hex:"A434A8E58500C6E41530538862D686EA9E81301B5AE4226BFA":hex:"0027CA0C7120BC3C9696766CFA":hex:"44A3AA3AAE6475CA":hex:"F2BEED7BC5098E83FEB5B31608F8E29C38819A89C8E776F1544D4151A4ED3A8B87B9CE" + +CCM encrypt and tag RFC 3610 #22 +depends_on:0 +4:exp:0:hex:"D7828D13B2B0BDC325A76236DF93CC6B":hex:"B96B49E21D621741632875DB7F6C9243D2D7C2":hex:"005B8CCBCD9AF83C9696766CFA":hex:"EC46BB63B02520C33C49FD70":hex:"31D750A09DA3ED7FDDD49A2032AABF17EC8EBF7D22C8088C666BE5C197" + +CCM encrypt and tag RFC 3610 #23 +depends_on:0 +4:exp:0:hex:"D7828D13B2B0BDC325A76236DF93CC6B":hex:"E2FCFBB880442C731BF95167C8FFD7895E337076":hex:"003EBE94044B9A3C9696766CFA":hex:"47A65AC78B3D594227E85E71":hex:"E882F1DBD38CE3EDA7C23F04DD65071EB41342ACDF7E00DCCEC7AE52987D" + +CCM encrypt and tag RFC 3610 #24 +depends_on:0 +4:exp:0:hex:"D7828D13B2B0BDC325A76236DF93CC6B":hex:"ABF21C0B02FEB88F856DF4A37381BCE3CC128517D4":hex:"008D493B30AE8B3C9696766CFA":hex:"6E37A6EF546D955D34AB6059":hex:"F32905B88A641B04B9C9FFB58CC390900F3DA12AB16DCE9E82EFA16DA62059" + +CCM encrypt and tag NIST VTT AES-128 #1 (P=24, N=13, A=32, T=4) +depends_on:0 +4:exp:0:hex:"43b1a6bc8d0d22d6d1ca95c18593cca5":hex:"a2b381c7d1545c408fe29817a21dc435a154c87256346b05":hex:"9882578e750b9682c6ca7f8f86":hex:"2084f3861c9ad0ccee7c63a7e05aece5db8b34bd8724cc06b4ca99a7f9c4914f":hex:"cc69ed76985e0ed4c8365a72775e5a19bfccc71aeb116c85a8c74677" + +CCM encrypt and tag NIST VTT AES-128 #2 (P=24, N=13, A=32, T=6) +depends_on:0 +4:exp:0:hex:"44e89189b815b4649c4e9b38c4275a5a":hex:"8db6ae1eb959963931d1c5224f29ef50019d2b0db7f5f76f":hex:"374c83e94384061ac01963f88d":hex:"cd149d17dba7ec50000b8c5390d114697fafb61025301f4e3eaa9f4535718a08":hex:"df952dce0f843374d33da94c969eff07b7bc2418ca9ee01e32bc2ffa8600" + +CCM encrypt and tag NIST VTT AES-128 #3 (P=24, N=13, A=32, T=8) +depends_on:0 +4:exp:0:hex:"368f35a1f80eaaacd6bb136609389727":hex:"1cccd55825316a94c5979e049310d1d717cdfb7624289dac":hex:"842a8445847502ea77363a16b6":hex:"34396dfcfa6f742aea7040976bd596497a7a6fa4fb85ee8e4ca394d02095b7bf":hex:"1a58094f0e8c6035a5584bfa8d1009c5f78fd2ca487ff222f6d1d897d6051618" + +CCM encrypt and tag NIST VTT AES-128 #4 (P=24, N=13, A=32, T=10) +depends_on:0 +4:exp:0:hex:"996a09a652fa6c82eae8be7886d7e75e":hex:"84cdd7380f47524b86168ed95386faa402831f22045183d0":hex:"a8b3eb68f205a46d8f632c3367":hex:"c71620d0477c8137b77ec5c72ced4df3a1e987fd9af6b5b10853f0526d876cd5":hex:"a7fbf9dd1b099ed3acf6bcbd0b6f7cae57bee99f9d084f826d86e69c07f053d1a607" + +CCM encrypt and tag NIST VTT AES-128 #5 (P=24, N=13, A=32, T=12) +depends_on:0 +4:exp:0:hex:"3ee186594f110fb788a8bf8aa8be5d4a":hex:"d71864877f2578db092daba2d6a1f9f4698a9c356c7830a1":hex:"44f705d52acf27b7f17196aa9b":hex:"2c16724296ff85e079627be3053ea95adf35722c21886baba343bd6c79b5cb57":hex:"b4dd74e7a0cc51aea45dfb401a41d5822c96901a83247ea0d6965f5aa6e31302a9cc2b36" + +CCM encrypt and tag NIST VTT AES-128 #6 (P=24, N=13, A=32, T=14) +depends_on:0 +4:exp:0:hex:"7b2d52a5186d912cf6b83ace7740ceda":hex:"ea384b081f60bb450808e0c20dc2914ae14a320612c3e1e8":hex:"f47be3a2b019d1beededf5b80c":hex:"76cf3522aff97a44b4edd0eef3b81e3ab3cd1ccc93a767a133afd508315f05ed":hex:"79070f33114a980dfd48215051e224dfd01471ac293242afddb36e37da1ee8a88a77d7f12cc6" + +CCM encrypt and tag NIST VTT AES-128 #7 (P=24, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"4189351b5caea375a0299e81c621bf43":hex:"4535d12b4377928a7c0a61c9f825a48671ea05910748c8ef":hex:"48c0906930561e0ab0ef4cd972":hex:"40a27c1d1e23ea3dbe8056b2774861a4a201cce49f19997d19206d8c8a343951":hex:"26c56961c035a7e452cce61bc6ee220d77b3f94d18fd10b6d80e8bf80f4a46cab06d4313f0db9be9" + +CCM encrypt and tag NIST VTT AES-192 #1 (P=24, N=13, A=32, T=4) +depends_on:0 +4:exp:0:hex:"11fd45743d946e6d37341fec49947e8c70482494a8f07fcc":hex:"ee7e6075ba52846de5d6254959a18affc4faf59c8ef63489":hex:"c6aeebcb146cfafaae66f78aab":hex:"7dc8c52144a7cb65b3e5a846e8fd7eae37bf6996c299b56e49144ebf43a1770f":hex:"137d9da59baf5cbfd46620c5f298fc766de10ac68e774edf1f2c5bad" + +CCM encrypt and tag NIST VTT AES-192 #2 (P=24, N=13, A=32, T=6) +depends_on:0 +4:exp:0:hex:"146a163bbf10746e7c1201546ba46de769be23f9d7cc2c80":hex:"473b6600559aefb67f7976f0a5cc744fb456efd86f615648":hex:"f5827e51707d8d64bb522985bb":hex:"599b12ebd3347a5ad098772c44c49eed954ec27c3ba6206d899ddaabca23a762":hex:"26d2be30e171439d54a0fec291c6024d1de09d61b44f53258ba1360406f9" + +CCM encrypt and tag NIST VTT AES-192 #3 (P=24, N=13, A=32, T=8) +depends_on:0 +4:exp:0:hex:"bdf277af2226f03ec1a0ba7a8532ade6aea9b3d519fe2d38":hex:"0ff89eff92a530b66684cd75a39481e7e069a7d05e89b692":hex:"cc3c596be884e7caed503315c0":hex:"4d6546167b3ed55f01c62bd384e02e1039c0d67ef7abe33291fecb136272f73b":hex:"6ef66a52c866bd5df20ec5096de92167ad83cab0e095ad0c778a299f1224f10c" + +CCM encrypt and tag NIST VTT AES-192 #4 (P=24, N=13, A=32, T=10) +depends_on:0 +4:exp:0:hex:"62f8eba1c2c5f66215493a6fa6ae007aae5be92f7880336a":hex:"f5522e3405d9b77cbf3257db2b9675e618e8744a0ee03f0f":hex:"15769753f503aa324f4b0e8ee0":hex:"1bc05440ee3e34d0f25e90ca1ecbb555d0fb92b311621d171be6f2b719923d23":hex:"b9103942dbbb93e15086751c9bb0a3d33112b55f95b7d4f32ff0bb90a8879812683f" + +CCM encrypt and tag NIST VTT AES-192 #5 (P=24, N=13, A=32, T=12) +depends_on:0 +4:exp:0:hex:"5a5667197f46b8027980d0a3166c0a419713d4df0629a860":hex:"d0e4024d6e33daafc011fe463545ed20f172872f6f33cefa":hex:"6236b01079d180fce156fbaab4":hex:"29bdf65b29394d363d5243d4249bad087520f8d733a763daa1356be458d487e5":hex:"479f3d408bfa00d1cd1c8bf11a167ce7ae4bcdb011f04e38733013b8ebe5e92b1917640c" + +CCM encrypt and tag NIST VTT AES-192 #6 (P=24, N=13, A=32, T=14) +depends_on:0 +4:exp:0:hex:"d2d4482ea8e98c1cf309671895a16610152ce283434bca38":hex:"78168e5cc3cddf4b90d5bc11613465030903e0196f1fe443":hex:"6ee177d48f59bd37045ec03731":hex:"9ef2d0d556d05cf9d1ee9dab9b322a389c75cd4e9dee2c0d08eea961efce8690":hex:"e2324a6d5643dfc8aea8c08cbbc245494a3dcbcb800c797c3abcdb0563978785bf7fd71c6c1f" + +CCM encrypt and tag NIST VTT AES-192 #7 (P=24, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"a7177fd129674c6c91c1c89f4408139afe187026b8114893":hex:"2cea0f7304860a4f40a28c8b890db60f3891b9982478495e":hex:"31bb28f0e1e63c36ca3959dd18":hex:"2529a834668187213f5342a1f3deea0dc2765478c7d71c9c21b9eb1351a5f6cb":hex:"5bb7aa6ab9c02a5712d62343fbe61f774e598d6b87545612380ea23dcffc9574f672bca92e306411" + +CCM encrypt and tag NIST VTT AES-256 #1 (P=24, N=13, A=32, T=4) +depends_on:0 +4:exp:0:hex:"9074b1ae4ca3342fe5bf6f14bcf2f27904f0b15179d95a654f61e699692e6f71":hex:"239029f150bccbd67edbb67f8ae456b4ea066a4beee065f9":hex:"2e1e0132468500d4bd47862563":hex:"3c5f5404370abdcb1edde99de60d0682c600b034e063b7d3237723da70ab7552":hex:"9c8d5dd227fd9f81237601830afee4f0115636c8e5d5fd743cb9afed" + +CCM encrypt and tag NIST VTT AES-256 #2 (P=24, N=13, A=32, T=6) +depends_on:0 +4:exp:0:hex:"8596a69890b0e47d43aeeca54b52029331da06fae63aa3249faaca94e2605feb":hex:"f0b065da6ecb9ddcab855152d3b4155037adfa758ba96070":hex:"20442e1c3f3c88919c39978b78":hex:"4e0d3aa502bd03fe1761b167c4e0df1d228301d3ebaa4a0281becd813266e255":hex:"d6a0f377f7c1b14dcdba729cae5271b027e71cc7850173ec265867a29eb3" + +CCM encrypt and tag NIST VTT AES-256 #3 (P=24, N=13, A=32, T=8) +depends_on:0 +4:exp:0:hex:"bae73483de27b581a7c13f178a6d7bda168c1b4a1cb9180512a13e3ab914eb61":hex:"28ef408d57930086011b167ac04b866e5b58fe6690a0b9c3":hex:"daf54faef6e4fc7867624b76f2":hex:"7022eaa52c9da821da72d2edd98f6b91dfe474999b75b34699aeb38465f70c1c":hex:"356367c6cee4453658418d9517f7c6faddcd7c65aef460138cf050f48c505151" + +CCM encrypt and tag NIST VTT AES-256 #4 (P=24, N=13, A=32, T=10) +depends_on:0 +4:exp:0:hex:"d5b321b0ac2fedce0933d57d12195c7b9941f4caa95529125ed21c41fac43374":hex:"6aa6ea668df60b0db85592d0a819c9df9e1099916272aafb":hex:"b35fb2262edfa14938a0fba03e":hex:"ba762bbda601d711e2dfc9dbe3003d39df1043ca845612b8e9dc9ff5c5d06ec4":hex:"97027de5effd82c58f8dbfb909d7696fbe2d54916262912001a4d765bc1c95c90a95" + +CCM encrypt and tag NIST VTT AES-256 #5 (P=24, N=13, A=32, T=12) +depends_on:0 +4:exp:0:hex:"7f4af6765cad1d511db07e33aaafd57646ec279db629048aa6770af24849aa0d":hex:"7ebef26bf4ecf6f0ebb2eb860edbf900f27b75b4a6340fdb":hex:"dde2a362ce81b2b6913abc3095":hex:"404f5df97ece7431987bc098cce994fc3c063b519ffa47b0365226a0015ef695":hex:"353022db9c568bd7183a13c40b1ba30fcc768c54264aa2cd2927a053c9244d3217a7ad05" + +CCM encrypt and tag NIST VTT AES-256 #6 (P=24, N=13, A=32, T=14) +depends_on:0 +4:exp:0:hex:"5c8b59d3e7986c277d5ad51e4a2233251076809ebf59463f47cd10b4aa951f8c":hex:"138ee53b1914d3322c2dd0a4e02faab2236555131d5eea08":hex:"21ff892b743d661189e205c7f3":hex:"f1e0af185180d2eb63e50e37ba692647cac2c6a149d70c81dbd34685ed78feaa":hex:"5b2f3026f30fdd50accc40ddd093b7997f23d7c6d3c8bc425f82c828413643b8794494cb5236" + +CCM encrypt and tag NIST VTT AES-256 #7 (P=24, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"60823b64e0b2da3a7eb772bd5941c534e6ff94ea96b564e2b38f82c78bb54522":hex:"a8be794613835c4366e75817d228438f011a2ec8a86f9797":hex:"48526f1bffc97dd65e42906983":hex:"fab62b3e5deda7a9c1128663cc81c44b74ab1bfe70bc1c9dec7c7fd08173b80a":hex:"cc3efe04d84a4ec5cb6a6c28dc2c2d386a359d9550dbdec963ddd56464aed6d0613159d1aa181dcb" + +CCM encrypt and tag NIST VPT AES-128 #1 (P=0, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"2ebf60f0969013a54a3dedb19d20f6c8":hex:"":hex:"1de8c5e21f9db33123ff870add":hex:"e1de6c6119d7db471136285d10b47a450221b16978569190ef6a22b055295603":hex:"0ead29ef205fbb86d11abe5ed704b880" + +CCM encrypt and tag NIST VPT AES-128 #2 (P=1, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"6ae7a8e907b8720f4b0d5507c1d0dc41":hex:"0e":hex:"7f18ad442e536a0159e7aa8c0f":hex:"9c9b0f11e020c6512a63dfa1a5ec8df8bd8e2ad83cf87b80b38635621c5dc0d7":hex:"4c201784bdab19e255787fecd02000c49d" + +CCM encrypt and tag NIST VPT AES-128 #3 (P=2, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"3d746ae6cac5cefd01f021c0bbf4bc3c":hex:"4360":hex:"597b3614ff9cd567afd1aad4e5":hex:"90446190e1ff5e48e8a09d692b217de3ad0ab4a670e7f1b437f9c07a902cad60":hex:"e38fdb77c1f8bbac2903a2ec7bc0f9c5654d" + +CCM encrypt and tag NIST VPT AES-128 #4 (P=3, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"3e4fa1c6f8b00f1296956735ee86e310":hex:"3a6734":hex:"c6a170936568651020edfe15df":hex:"00d57896da2435a4271afb9c98f61a650e63a4955357c47d073c5165dd4ea318":hex:"384be657bfc5f385b179be7333eb3f57df546b" + +CCM encrypt and tag NIST VPT AES-128 #5 (P=4, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"7ccbb8557f6e08f436d0957d4bbe7fdf":hex:"4cabeb02":hex:"bb8e2ef2ed9484f9021cda7073":hex:"fba1d18a74a3bb38671ab2842ffaa434cd572a0b45320e4145930b3008d8d350":hex:"32501f4235c4dd96e83d5ab4c3c31c523453c317" + +CCM encrypt and tag NIST VPT AES-128 #6 (P=5, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"3725c7905bfaca415908c617b78f8dee":hex:"f5499a7082":hex:"c98ec4473e051a4d4ac56fd082":hex:"11bc87f1c2d2076ba47c5cb530dd6c2a224f7a0f7f554e23d7d29077c7787680":hex:"e378b776242066751af249d521c6eaebdff40b2642" + +CCM encrypt and tag NIST VPT AES-128 #7 (P=6, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"80bead98a05d1bb173cd4fca463b8fa3":hex:"e479990bf082":hex:"8a14a6d255aa4032ebff37a3d7":hex:"bb4e706e73d21df66f64173859d47e247527cd9832e20dccff8548ed5f554108":hex:"89c9246238878427f36b1f6c633e4542f32b50ca8edb" + +CCM encrypt and tag NIST VPT AES-128 #8 (P=7, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"dc8ec91184ba18eae31ac2d3b252673f":hex:"2a5775986551c8":hex:"0da4c988f521f5648259f2bec2":hex:"6d5573c9279897d7d1602d8a95c04bb5ca3fad2dbe89a024b3651eb227e73bb5":hex:"4f259f2a718faea852a7c4358dfa9f5467357638acac90" + +CCM encrypt and tag NIST VPT AES-128 #9 (P=8, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"19f97ef5318b8005fc7133fa31dd1236":hex:"6d972a673fbe1ca1":hex:"01ce9814c6329dbee1d02b1321":hex:"85853f120981f33cf1d50fde6b8bc865fe988a9f12579acdb336f9f992b08b89":hex:"2f12a7e7acecae5d2563309efc19368cdee8266538ca89d3" + +CCM encrypt and tag NIST VPT AES-128 #10 (P=9, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"c17944bfaeeb808eed66ae7242ab545f":hex:"7caae2640e734539d3":hex:"910b3db64df3728ca98219e01b":hex:"edf64f98b3ab593cbcf68ab37a8c9472e49cb849d4a744deae925a5a43faf262":hex:"0dae8b3ccf0b439f6ff8ee4a233dfb7753f6bfe321b3e26959" + +CCM encrypt and tag NIST VPT AES-128 #11 (P=10, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"0fb9df6f638847f5de371f003dd938f4":hex:"e10cc36bc1c5d3c646ab":hex:"c9ddf61c052f3502ad6b229819":hex:"4f9938d5bc3dcbe47f6b256d5e99723d0891e50c6175aba41b011e4686113c49":hex:"7f797367de50be6dc04e4cf0d8c24189affd35060cb7ca3dd136" + +CCM encrypt and tag NIST VPT AES-128 #12 (P=11, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"006ff7d3153caf906ec7929f5aef9276":hex:"31be1b241cae79c54c2446":hex:"57db1541a185bd9cdc34d62025":hex:"7d9681cac38e778fba11f4464f69ed9ebfea31b7ffcaf2925b3381c65d975974":hex:"9dd8a4244fbdb30b624578a625c43233476bbb959acd9edebe2883" + +CCM encrypt and tag NIST VPT AES-128 #13 (P=12, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"026331e98aba9e8c23a9e8a91d0b0c97":hex:"a82200ef3a08c390dec5cbf9":hex:"bccfe69bba168b81cbdf7d018a":hex:"26e011143a686a7224ddb8c5b1e5d31713fa22c386785e2c34f498ae56d07ed5":hex:"adf4fc6f9be113066c09248fcb56a9c1a1c3bb16fbb9fbaedacdb12b" + +CCM encrypt and tag NIST VPT AES-128 #14 (P=13, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"d32088d50df9aba14d9022c870a0cb85":hex:"4b10788c1a03bca656f04f1f98":hex:"e16c69861efc206e85aab1255e":hex:"0eff7d7bcceb873c3203a8df74f4e91b04bd607ec11202f96cfeb99f5bcdb7aa":hex:"89f15b1cb665a8851da03b874ca6f73242f2f227350c0277e4e72cdaa6" + +CCM encrypt and tag NIST VPT AES-128 #15 (P=14, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"7301c907b9d2aaac355c5416ff25c59b":hex:"484300aa3a506afcd313b49ead8d":hex:"7304b65b6dab466273862c88b9":hex:"2c5d114eff62c527cc2e03c33c595a80fe609bfc0fe13ce3380efe05d85cceac":hex:"928ca58b0d373dc50c52afac787ce8eeb5d5b493661259a9d91ea31a5f7e" + +CCM encrypt and tag NIST VPT AES-128 #16 (P=15, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"38be46d271bf868c198052391f8a2147":hex:"61bd1385be92097e866550a55278f0":hex:"6758f67db9bfea5f0e0972e08b":hex:"c6de3be97f11d0e2ab85c9353b783f25b37366a78a2012cecf5b7a87138b3c86":hex:"7c9fa8d99b38f825315ece6a2613f55e902f296dcce870263ae50cda4fadae" + +CCM encrypt and tag NIST VPT AES-128 #17 (P=16, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"70010ed90e6186ecad41f0d3c7c42ff8":hex:"be322f58efa7f8c68a635e0b9cce77f2":hex:"a5f4f4986e98472965f5abcc4b":hex:"3fec0e5cc24d67139437cbc8112414fc8daccd1a94b49a4c76e2d39303547317":hex:"8e4425ae573974f0f0693a188b525812eef08e3fb15f4227e0d989a4d587a8cf" + +CCM encrypt and tag NIST VPT AES-128 #18 (P=17, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"79eae5baddc5887bdf3031fd1d65085b":hex:"001343e6191f5f1738e7d19d4eec2b9592":hex:"9da59614535d1fad35f2ece00f":hex:"46603500af9e4e7a2f9545411a58b21a6efd21f2b5f315d02d964c09270145b3":hex:"2162e27bfbf1d00f2404754a254665fd9270f0edb415993588b2535e2e0e4fd086" + +CCM encrypt and tag NIST VPT AES-128 #19 (P=18, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"c14eda0f958465246fe6ab541e5dfd75":hex:"617868ae91f705c6b583b5fd7e1e4086a1bb":hex:"32b63ca7e269223f80a56baaaa":hex:"733f8e7670de3446016916510dfe722ce671570121d91331a64feb3d03f210e6":hex:"b2dc1e548b3d3f225a34082f4391980a0788b4cc36852fd64a423fb8e872252b248e" + +CCM encrypt and tag NIST VPT AES-128 #20 (P=19, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"c5e7147f56ba4530b8799ababeb82772":hex:"2f3bf0b566440912a1e47a0c07f1cfd39cb440":hex:"bdd38e173fb20b981659c597d6":hex:"3a069a2bfda44abbb0a82a97e5e9047258c803da2c66190d77149e0f010b3af9":hex:"bd6265dcba9e14c59e515e395dc60bd053345fa6d7568c738e3a7fdf142d8f2d1562c0" + +CCM encrypt and tag NIST VPT AES-128 #21 (P=20, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"78c46e3249ca28e1ef0531d80fd37c12":hex:"4802422c9b3b4459ba26e7863ad87b0c172cfe4b":hex:"5de41a86ce3f3fb1b685b3ca4d":hex:"e98a77f2a941b36232589486b05f4278275588665a06d98aec98915cc5607e06":hex:"daea2234ea433533bf0716abe1aa3844b6d3c51e9d5ca3d8ec5065630d2de0717cdeb7d5" + +CCM encrypt and tag NIST VPT AES-128 #22 (P=21, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"8883002bf13b3a94b2467225970df938":hex:"d516bbff452e7706c91c7ace3e9baa76d65ff7050f":hex:"818a702d5c8ee973b34e9acda1":hex:"545aeac737c0ca2a3d5e1fd966840c3a0d71e0301abbe99c7af18d24cc7e9633":hex:"b85242fdc06344f2bd9a97b408902ebcd22aece3d42f2da4dd4d817c9fa2d44bc02163a0a9" + +CCM encrypt and tag NIST VPT AES-128 #23 (P=22, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"5cea00ee44cfb9cfbb598d3812e380ef":hex:"33bfd0713f30fcac8f7f95920ac6d9b803ddd5480dd8":hex:"948788a9c8188cb988430a7ebd":hex:"50422c5e6a0fb8231b3bb6e2f89607019be6ad92a4dae8e0fe3f9e486476004b":hex:"b168747dea3ae0fbede4402af9a3dc3185d6d162f859d828101682de32923788c70262b84814" + +CCM encrypt and tag NIST VPT AES-128 #24 (P=23, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"cb83f77751e72711401cbbf4f61aa0ed":hex:"eede01b08f9a303cdf14c99d7a45732972c6eff2a1db06":hex:"c0b461b2e15b8b116ef9281704":hex:"2bd112231f903fa0dff085db48a2e2a96ec0199249b005d5ab4c2eab753f9ad0":hex:"feb114b7bd3b43497b62454a675a632c3546d2802462c6af57647efda119c59862cd5dd3904efc" + +CCM encrypt and tag NIST VPT AES-128 #25 (P=24, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"43c1142877d9f450e12d7b6db47a85ba":hex:"b506a6ba900c1147c806775324b36eb376aa01d4c3eef6f5":hex:"76becd9d27ca8a026215f32712":hex:"6a59aacadd416e465264c15e1a1e9bfa084687492710f9bda832e2571e468224":hex:"14b14fe5b317411392861638ec383ae40ba95fefe34255dc2ec067887114bc370281de6f00836ce4" + +CCM encrypt and tag NIST VPT AES-192 #1 (P=0, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"086e2967cde99e90faaea8a94e168bf0e066c503a849a9f3":hex:"":hex:"929542cd690f1babcf1696cb03":hex:"58f70bab24e0a6137e5cd3eb18656f2b5ccddc3f538a0000c65190e4a3668e71":hex:"3bf9d93af6ffac9ac84cd3202d4e0cc8" + +CCM encrypt and tag NIST VPT AES-192 #2 (P=1, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"992d38768b11a236945bd4b327c3728fac24c091238b6553":hex:"1c":hex:"b248a90b84b0122a5ad8e12760":hex:"27cabc40da0e1eda0ea5f8abbb7c179e30776250a7b30d711b0e106c5ee9d84a":hex:"1a96f58c3f38c44d1a345f3e2da6679f20" + +CCM encrypt and tag NIST VPT AES-192 #3 (P=2, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"5012db40ff6ae23c1e1ce43768c5936c4400b0e79ae77f30":hex:"0c6c":hex:"b67e500b35d60ad7264240027c":hex:"40affd355416200191ba64edec8d7d27ead235a7b2e01a12662273deb36379b8":hex:"c996ef3d6ef9f981557506ecc8797bbaaaa7" + +CCM encrypt and tag NIST VPT AES-192 #4 (P=3, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"fa15cc7f0de294d7341b1fd79326c8be78e67822343c1992":hex:"bcb898":hex:"e5257aed2bda0495aa44591db4":hex:"31a0338c3839931fa1dd5131cb796c4c6cfde9fb336d8a80ac35dec463be7a94":hex:"68f08298d9a2147776dca9c1a42382bce323b2" + +CCM encrypt and tag NIST VPT AES-192 #5 (P=4, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"b5330a8447d74a7987fb718cfae246b5c7e057991064eeaf":hex:"b46b343e":hex:"2ef29d62b40d8643848797cde8":hex:"1225b036e6044df52314016760e92750de0936120395de750a2c54a7fa0cea82":hex:"c2c39d6f9344e2de064f269d065a2a6108605916" + +CCM encrypt and tag NIST VPT AES-192 #6 (P=5, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"30419145ae966591b408c29e5fd14d9112542909be5363f7":hex:"8ceaeb89fd":hex:"27e6b2a482bbc6f13702005708":hex:"e04e81e860daf9696098c723085d8023c240ebe7a643131e35359ab04bd650fe":hex:"ec9d5ed36243ddf77b33d8cf2963ba76fd4e19f3c5" + +CCM encrypt and tag NIST VPT AES-192 #7 (P=6, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"748ad503388a34041a7bdae6361d57894357c333bacf02ca":hex:"24d6880aed7e":hex:"518b79d194579b19f2d8845b70":hex:"691dd98f61fd213b0840ec5a6f06ef9a1420be0d59bde5e43546347a2a865a94":hex:"270120f9634ec15536e21d961c675070ec4cff9037bc" + +CCM encrypt and tag NIST VPT AES-192 #8 (P=7, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"b930cca30a3fd230c237c8f3cc6792d0c4084dff5c18d775":hex:"2a755e362373ef":hex:"7574802fd82fe96c05431acd40":hex:"1cf83928b6a9e525fe578c5c0f40c322be71b3092239bff954dd6883738d6d71":hex:"f06238b0450fd1f4b6cab1383adb420c4724aa7bdfefb7" + +CCM encrypt and tag NIST VPT AES-192 #9 (P=8, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"314c136999e41d137bd7ba17201a9fa406025868334e39b3":hex:"4d54d8b06b204445":hex:"65f7a0f4c0f5bba9d26f7e0ddb":hex:"5c7ce4819b30b975ae6ce58dcc1bfa29a8b6dda8f4b76c7e23516487745e829c":hex:"2baf90c490b11f9607482362ab3f157c42d0e9c6c5cffcf0" + +CCM encrypt and tag NIST VPT AES-192 #10 (P=9, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"a19f6be062ec0aaf33046bd52734f3336c85d8368bef86ab":hex:"13511ae5ff6c6860a1":hex:"7f2d07f8169c5672b4df7f6cac":hex:"d68d5f763db6111c5d6324d694cb0236beab877daae8115ecb75d60530777b58":hex:"b3859b757802ebd048467fd8e139eb9ee8fcdca45ed87dc1c8" + +CCM encrypt and tag NIST VPT AES-192 #11 (P=10, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"de1c8263345081d2dfa9afdf37675971135e178df554a4d8":hex:"f777aba1fa70f94e6de9":hex:"a301bb82f91a582db01355c388":hex:"9ad52c041390d0d4aaf65a4667c3239c95e7eae6178acc23fb4e70a852d483c6":hex:"9d8bff6d2dcde77104ac6aba025abc01416a7ca9f096ab2529cb" + +CCM encrypt and tag NIST VPT AES-192 #12 (P=11, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"248d36bd15f58e47fcf1c948272355821f8492e6e69f3661":hex:"33709d9c7906e2f82dd9e2":hex:"9e8d492c304cf6ad59102bca0e":hex:"9ec08c7ed6b70823d819e9ab019e9929249f966fdb2069311a0ddc680ac468f5":hex:"9114d36b79b1918b2720f40cddce66df9b4802f737bea4bd8f5378" + +CCM encrypt and tag NIST VPT AES-192 #13 (P=12, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"77a67fb504b961028633321111aac2c30eb6d71a8cf72056":hex:"10554c062d269ff6dcd98493":hex:"acadc0330194906f8c75ac287f":hex:"8c18486d52571f70f2ba6a747aaa3d4b3ebc2e481ee1b70907dddb94bdfa0ca6":hex:"7f8b0cad79b545e5addf0b04ff4b0f2b2a5067283210aba8630d0306" + +CCM encrypt and tag NIST VPT AES-192 #14 (P=13, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"0d423519e4110c06063061323f8c7c95387776b6ee4e4b6e":hex:"4021ff104ff1dbd91e46db249f":hex:"39abe53826d9b8e300fe747533":hex:"cdd9bf1b4f865e922c678ec4947ea0cb02e78bd5c1538f33aeb818ad3f47e519":hex:"7953d3cd66d093785d123f65ba37f16761dd6aedbfc789ad96edf1490d" + +CCM encrypt and tag NIST VPT AES-192 #15 (P=14, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"a60cf7ceb62bf3118532bc61daa25ce946991047f951b536":hex:"d64f9426febce6a84c954dd5ded5":hex:"7499494faa44a7576f9ed5580d":hex:"baa482c64eefd09118549a8968f44cfea7a436913a428e30aa4ab44802a4ba35":hex:"f7580f17266d68237747bf57c7ed8242ac1a1979c5a9e7bc67d7698c7efa" + +CCM encrypt and tag NIST VPT AES-192 #16 (P=15, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"82d4bc9aac298b09112073277205e1bf42176d1e6339b76c":hex:"25a53fd3e476dc0860eeeea25fcb0c":hex:"70325ef19e581b743095cd5eb1":hex:"6d14bb2635c5d0ae83687f1824279cf141173527e1b32d1baf8a27f7fe34a542":hex:"4a1cfd0023557a184b929965b0a445cb3993ca35acf354cb2b4254ff672e7f" + +CCM encrypt and tag NIST VPT AES-192 #17 (P=16, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"6873f1c6c30975aff6f08470264321130a6e5984ade324e9":hex:"5051a0b0b6766cd6ea29a672769d40fe":hex:"7c4d2f7cec04361f187f0726d5":hex:"77743b5d83a00d2c8d5f7e10781531b496e09f3bc9295d7ae9799e64668ef8c5":hex:"0ce5ac8d6b256fb7580bf6acc76426af40bce58fd4cd6548df90a0337c842004" + +CCM encrypt and tag NIST VPT AES-192 #18 (P=17, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"3cf8da27d5be1af024158985f725fd7a6242cbe0041f2c17":hex:"f6dd2c64bf597e63263ccae1c54e0805fe":hex:"07f77f114d7264a122a7e9db4f":hex:"30457e99616f0247f1339b101974ea231904d0ef7bd0d5ee9b57c6c16761a282":hex:"ce3031c3a70600e9340b2ddfe56aa72cffdc5e53e68c51ee55b276eb3f85d2cf63" + +CCM encrypt and tag NIST VPT AES-192 #19 (P=18, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"b46a3a24c66eb846ca6413c001153dc6998970c12e7acd5a":hex:"56d18d3e2e496440d0a5c9e1bcb464faf5bc":hex:"b79c33c96a0a90030694163e2a":hex:"ea9405d6a46cac9783a7b48ac2e25cc9a3a519c4658b2a8770a37240d41587fb":hex:"01baba2e0d5b49d600d03a7ed84ee878926c0ca478f40a6fbde01f584d938a1c91bf" + +CCM encrypt and tag NIST VPT AES-192 #20 (P=19, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"7b71045ccef735bd0c5bea3cf3b7e16e58d9c62061a204e0":hex:"890d05420d57e3b3d8dbef117fe60c3fa6a095":hex:"2b9ecfd179242c295fe6c6fa55":hex:"b89166f97deb9cc7fdeb63639eeafb145895b307749ec1a293b27115f3aa8232":hex:"f842ff6662684de8785af275fa2d82d587de0687ebe35e883cbd53b82f2a4624c03894" + +CCM encrypt and tag NIST VPT AES-192 #21 (P=20, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"dc7c67715f2709e150cceff020aaacf88a1e7568191acbcf":hex:"f383bd3e6270876b74abbb5d35e7d4f11d83412c":hex:"da56ea046990c70fa216e5e6c4":hex:"f799818d91be7bab555a2e39f1f45810a94d07179f94fe1151d95ab963c47611":hex:"377b5df263c5c74f63603692cbb61ea37b6d686c743f71e15490ca41d245768988719ede" + +CCM encrypt and tag NIST VPT AES-192 #22 (P=21, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"f41e369a1599627e76983e9a4fc2e963dab4960b09ebe390":hex:"81ad3f386bedcbf656ff535c63580d1f87e3c72326":hex:"68ef8285b90f28bcd3cb1bacea":hex:"dbe3e82e49624d968f5463ceb8af189fb3ad8b3b4122142b110d848a286dae71":hex:"9f6028153e06d14d30b862a99a35413413c04a49dc6f68a03a11cf00d58f062a7b36465d13" + +CCM encrypt and tag NIST VPT AES-192 #23 (P=22, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"3289e59e3a7b29bf4a309afc253030bba4b9bdd64f0722f9":hex:"53911a67b65738f87fc7c20d6db8044bde1af95838d1":hex:"30259ce106e9bd7a8bacbaf212":hex:"2870bd9a26c510e9a256920899bbc77a4eb9b53f927045a943d5ed6b13638cf3":hex:"70cf37d4b6f7e707376b1574ce17c040b5143da47abb2fe9afafc2fccd98ccf63b0fdec30eac" + +CCM encrypt and tag NIST VPT AES-192 #24 (P=23, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"40f1aff2e44d05f12126097a0f07ac0359ba1a609356a4e6":hex:"8d98c580fb366f330dbfda20f91d99a0878b47efd14c6d":hex:"0df3fc6396f851785fca9aa5ff":hex:"e9699b20b0574fce8b5cbc4ef792eb96e2c1cce36b1b1f06ea2a95fe300633cc":hex:"579cdf9da62a2df471e03450516adb4ce99ae0f70b1776a39c3b429a1f922fac0b59e29a122e43" + +CCM encrypt and tag NIST VPT AES-192 #25 (P=24, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"91f9d636a071c3aad1743137e0644a73de9e47bd76acd919":hex:"4eaf9384cad976f65f98042d561d760b5a787330dc658f6c":hex:"1bf491ac320d660eb2dd45c6c3":hex:"3bdfd7f18d2b6d0804d779f0679aaa2d7d32978c2df8015ae4b758d337be81dd":hex:"635530cab14e3d0a135bb6eebb5829412676e6dd4995f99cb7e17f235bd660e7e17b2c65320e9fd4" + +CCM encrypt and tag NIST VPT AES-256 #1 (P=0, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"c6c14c655e52c8a4c7e8d54e974d698e1f21ee3ba717a0adfa6136d02668c476":hex:"":hex:"291e91b19de518cd7806de44f6":hex:"b4f8326944a45d95f91887c2a6ac36b60eea5edef84c1c358146a666b6878335":hex:"ca482c674b599046cc7d7ee0d00eec1e" + +CCM encrypt and tag NIST VPT AES-256 #2 (P=1, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"cc49d4a397887cb57bc92c8a8c26a7aac205c653ef4011c1f48390ad35f5df14":hex:"1a":hex:"6df8c5c28d1728975a0b766cd7":hex:"080f82469505118842e5fa70df5323de175a37609904ee5e76288f94ca84b3c5":hex:"a5f24e87a11a95374d4c190945bf08ef2f" + +CCM encrypt and tag NIST VPT AES-256 #3 (P=2, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"36b0175379e7ae19c277fe656a2252a82796309be0f0d4e1c07fdde88aca4510":hex:"be80":hex:"021bd8b551947be4c18cf1a455":hex:"b5c6e8313b9c68e6bb84bffd65fa4108d243f580eab99bb80563ed1050c8266b":hex:"ecacc3152e43d9efea26e16c1d1793e2a8c4" + +CCM encrypt and tag NIST VPT AES-256 #4 (P=3, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"ddb739acda6c56ec9aefc4f4cbc258587f443da4e76ddfa85dbe0813a8784944":hex:"db457c":hex:"0bddf342121b82f906368b0d7b":hex:"887486fff7922768186363ef17eb78e5cf2fab8f47a4eb327de8b16d63b02acb":hex:"54473c3f65d6be431e79700378049ac06f2599" + +CCM encrypt and tag NIST VPT AES-256 #5 (P=4, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"62b82637e567ad27c3066d533ed76e314522ac5c53851a8c958ce6c64b82ffd0":hex:"87294078":hex:"5bc2896d8b81999546f88232ab":hex:"fffb40b0d18cb23018aac109bf62d849adca42629d8a9ad1299b83fe274f9a63":hex:"2bc22735ab21dfdcfe95bd83592fb6b4168d9a23" + +CCM encrypt and tag NIST VPT AES-256 #6 (P=5, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"bc29a16e19cfbe32bf4948e8e4484159bc819b7eec504e4441a1a98ca210e576":hex:"3e8c6d1b12":hex:"4f18bcc8ee0bbb80de30a9e086":hex:"574931ae4b24bdf7e9217eca6ce2a07287999e529f6e106e3721c42dacf00f5d":hex:"45f3795fcf9c66e1a43103d9a18f5fba5fab83f994" + +CCM encrypt and tag NIST VPT AES-256 #7 (P=6, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"5f4b4f97b6aa48adb3336c451aac377fde4adf47897fd9ccdf139f33be76b18c":hex:"1b62ad19dcac":hex:"7a76eac44486afdb112fc4aab9":hex:"a66c980f6621e03ff93b55d5a148615c4ad36d6cbdd0b22b173b4b1479fb8ff7":hex:"4ad1fcf57c12b14e0e659a6305b4aeffae82f8a66c94" + +CCM encrypt and tag NIST VPT AES-256 #8 (P=7, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"f7aaeff3a1dc0cc5ecf220c67ad9f6dda060b4f1be3cc609cb4f18b2342a88a2":hex:"d48daa2919348d":hex:"d0d6871b9adc8623ac63faf00f":hex:"e97175c23c5b47da8ce67811c6d60a7499b3b7e1347ad860519285b67201fe38":hex:"eb32ab153a8e092fa325bafc176a07c31e6cc0a852d288" + +CCM encrypt and tag NIST VPT AES-256 #9 (P=8, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"493e14623cd250058a7fc66a3fee0c24b6e363b966c2314aff53b276b6c2ea7b":hex:"e5653e512d8b0b70":hex:"fe2d8ae8da94a6df563f89ce00":hex:"579a637e37a0974cd2fc3b735d9ed088e8e488ffe210f043e0f9d2079a015ad6":hex:"75d31f8d47bee5c4e2ba537355ae8ab25cc9ed3511ff5053" + +CCM encrypt and tag NIST VPT AES-256 #10 (P=9, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"b23255372455c69244a0210e6a9e13b155a5ec9d6d0900e54a8f4d9f7a255e3a":hex:"615d724ae94a5daf8d":hex:"274846196d78f0af2df5860231":hex:"69adcae8a1e9a3f2fe9e62591f7b4c5b19d3b50e769521f67e7ea8d7b58d9fc8":hex:"f019ae51063239287d896e7127f17d13f98013b420219eb877" + +CCM encrypt and tag NIST VPT AES-256 #11 (P=10, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"dbf06366f766e2811ecd5d4384d6d08336adc37e0824d620cf0d9e7fd1e7afa9":hex:"2e3cf0af8c96c7b22719":hex:"b3503ed4e277ed9769b20c10c0":hex:"9ae5a04baa9d02c8854e609899c6240851cbc83f81f752bc04c71affa4eed385":hex:"e317df43ab46eb31be7e76f2730d771d56099a0c8d2703d7a24e" + +CCM encrypt and tag NIST VPT AES-256 #12 (P=11, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"4dd555bd3a5253a90b68b5d4d46bd050340ee07ddad3a72048c657b5d76bb207":hex:"8015c0f07a7acd4b1cbdd2":hex:"bdb1b82ba864893c2ee8f7426c":hex:"9bcc5848e928ba0068f7a867e79e83a6f93593354a8bfcfc306aeeb9821c1da1":hex:"8e9f80c726980b3d42e43a6512a0481255b729a10f9edb5f07c60c" + +CCM encrypt and tag NIST VPT AES-256 #13 (P=12, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"d3ad8cda9a0d91a205c4c05665728bb255d50a83403c9ab9243fcbbe95ae7906":hex:"a203aeb635e195bc33fd42fa":hex:"0b5f69697eb1af24e8e6fcb605":hex:"ea26ea68facdac3c75ba0cdf7b1ad703c9474af83b3fbfc58e548d776b2529b9":hex:"62666297a809c982b50722bd56bc555899345e0404b2938edf33168e" + +CCM encrypt and tag NIST VPT AES-256 #14 (P=13, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"e300fc7a5b96806382c35af5b2c2e8e26382751b59010d4b1cfc90a4a9cb06df":hex:"8714eb9ecf8bdb13e919de40f9":hex:"55b59eb434dd1ba3723ee0dc72":hex:"9b1d85384cb6f47c0b13514a303d4e1d95af4c6442691f314a401135f07829ec":hex:"ba6063824d314aa3cbab14b8c54c6520dac0f073856d9b9010b7857736" + +CCM encrypt and tag NIST VPT AES-256 #15 (P=14, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"3ae5be5904bae62609ac525e2d1cad90133447573d7b608975a6a2b16cb2efc0":hex:"959403e0771c21a416bd03f38983":hex:"61bf06b9fa5a450d094f3ddcb5":hex:"0245484bcd987787fe97fda6c8ffb6e7058d7b8f7064f27514afaac4048767fd":hex:"37a346bc4909965c5497838251826385a52c68914e9d1f63fd297ee6e7ed" + +CCM encrypt and tag NIST VPT AES-256 #16 (P=15, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"fab62b3e5deda7a9c1128663cc81c44b74ab1bfe70bc1c9dec7c7fd08173b80a":hex:"54be71705e453177b53c92bbf2ab13":hex:"a5c1b146c82c34b2e6ebeceb58":hex:"5e60b02b26e2d5f752eb55ea5f50bb354a6f01b800cea5c815ff0030b8c7d475":hex:"788db949697b8cd9abbc74ed9aa40cd6852dc829469368491149d6bb140071" + +CCM encrypt and tag NIST VPT AES-256 #17 (P=16, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"ee8ce187169779d13e443d6428e38b38b55dfb90f0228a8a4e62f8f535806e62":hex:"d15f98f2c6d670f55c78a06648332bc9":hex:"121642c4218b391c98e6269c8a":hex:"718d13e47522ac4cdf3f828063980b6d452fcdcd6e1a1904bf87f548a5fd5a05":hex:"cc17bf8794c843457d899391898ed22a6f9d28fcb64234e1cd793c4144f1da50" + +CCM encrypt and tag NIST VPT AES-256 #18 (P=17, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"7da6ef35ad594a09cb74daf27e50a6b30d6b4160cf0de41ee32bbf2a208b911d":hex:"b0053d1f490809794250d856062d0aaa92":hex:"98a32d7fe606583e2906420297":hex:"217d130408a738e6a833931e69f8696960c817407301560bbe5fbd92361488b4":hex:"a6341ee3d60eb34a8a8bc2806d50dd57a3f628ee49a8c2005c7d07d354bf80994d" + +CCM encrypt and tag NIST VPT AES-256 #19 (P=18, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"0786706f680c27b792d054faa63f499a8e6b5ddb90502946235bf74c022d772c":hex:"6a26677836d65bd0d35a027d278b2534e7df":hex:"f61ef1c8c10a863efeb4a1de86":hex:"67874c808600a27fcab34d6f69cc5c730831ad4589075dd82479823cb9b41dc3":hex:"d1c1f3c60603359c7d6a707f05ecb2296f8e52f2210b7a798ad5c778ee7cfd7fe6e0" + +CCM encrypt and tag NIST VPT AES-256 #20 (P=19, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"bac55f9847d93325bf5071c220c0a3dfeb38f214292d47b4acb7b0a597fe056f":hex:"c1a994dc198f5676ea85801cd27cc8f47267ec":hex:"05b50c458adbba16c55fcc454d":hex:"89ad6ae1e550975eaa916a62615e6b6a66366a17a7e06380a95ea5cdcc1d3302":hex:"7c9b138177590edaafec4728c4663e77458ffbe3243faec177de4a2e4a293952073e43" + +CCM encrypt and tag NIST VPT AES-256 #21 (P=20, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"8beedeb85d42c2a7fa6f7237b05acb197dd8e1672471ac878064fe5319eab876":hex:"7b125c3b9612a8b554913d0384f4795c90cd387c":hex:"8479bdfad28ebe781e9c01a3f6":hex:"7aebdfd955d6e8a19a701d387447a4bdd59a9382156ab0c0dcd37b89419d6eff":hex:"6cc611d816b18c6847b348e46a4119465104254a04e2dfeeeac9c3255f6227704848d5b2" + +CCM encrypt and tag NIST VPT AES-256 #22 (P=21, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"c3a0c126cad581012151c25cf85a44472c23f83b6095b6004f4f32cd60ec2db2":hex:"73b09d18554471309141aa33b687f9248b50fe3154":hex:"94ab51ce75db8b046d6ab92830":hex:"2a243246bfe5b5ab05f51bf5f401af52d5bbaa2549cf57a18e197597fe15dd8c":hex:"b7e8264ca70fd2a4fb76f20a8ad5da3c37f5893fb12abeeaef1187f815ca481ed8ddd3dd37" + +CCM encrypt and tag NIST VPT AES-256 #23 (P=22, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"9cdebaeee8690b68751070691f49593668a6de12d3a948b38ddbd3f75218b2d4":hex:"3cbb08f133270e4454bcaaa0f20f6d63c38b6572e766":hex:"af1a97d43151f5ea9c48ad36a3":hex:"f5353fb6bfc8f09d556158132d6cbb97d9045eacdc71f782bcef62d258b1950a":hex:"3966930a2ae8fdd8f40e7007f3fde0bd6eb48a46e6d26eef83da9f6384b1a2bda10790dadb3f" + +CCM encrypt and tag NIST VPT AES-256 #24 (P=23, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"d34264a12c35cdd67ac105e2826b071e46f8131d1e325f8e0ae80a6447375135":hex:"79ac1a6a9eca5e07ce635bfd666ef72b16f3f2e140d56c":hex:"3891e308b9f44c5b5a8b59004a":hex:"0cda000ed754456a844c9ed61843deea9dadf5e723ea1448057712996d660f8c":hex:"1abcc9b1649deaa0bfa7dcd23508282d9c50ca7fee72486950608d7bcb39dcf03a2cab01587f61" + +CCM encrypt and tag NIST VPT AES-256 #25 (P=24, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"4ad98dbef0fb2a188b6c49a859c920967214b998435a00b93d931b5acecaf976":hex:"9cea3b061e5c402d48497ea4948d75b8af7746d4e570c848":hex:"00d772b07788536b688ff2b84a":hex:"5f8b1400920891e8057639618183c9c847821c1aae79f2a90d75f114db21e975":hex:"f28ec535c2d834963c85814ec4173c0b8983dff8dc4a2d4e0f73bfb28ad42aa8f75f549a93594dd4" + +CCM encrypt and tag NIST VNT AES-128 #1 (P=24, N=7, A=32, T=16) +depends_on:0 +4:exp:0:hex:"c0425ed20cd28fda67a2bcc0ab342a49":hex:"4f065a23eeca6b18d118e1de4d7e5ca1a7c0e556d786d407":hex:"37667f334dce90":hex:"0b3e8d9785c74c8f41ea257d4d87495ffbbb335542b12e0d62bb177ec7a164d9":hex:"768fccdf4898bca099e33c3d40565497dec22dd6e33dcf4384d71be8565c21a455db45816da8158c" + +CCM encrypt and tag NIST VNT AES-128 #2 (P=24, N=8, A=32, T=16) +depends_on:0 +4:exp:0:hex:"0b6256bd328a4cda2510d527c0f73ed4":hex:"78a292662b8e05abc2d44fbefd0840795e7493028015d9f2":hex:"21fd9011d6d9484a":hex:"66ff35c4f86ad7755b149e14e299034763023e7384f4af8c35277d2c7e1a7de2":hex:"5a0be834c57b59d47a4590d8d19a1206d3c06e937a9b57f74034d9fdb43c3f48932aa72177b23bf6" + +CCM encrypt and tag NIST VNT AES-128 #3 (P=24, N=9, A=32, T=16) +depends_on:0 +4:exp:0:hex:"afdccc84f257cb768b7ad735edbd1990":hex:"56d0942490e546798f30d3c60ad4e3e110fc04f5b1c1fa83":hex:"b7776aa998f4d1189b":hex:"9f9ac464de508b98e789243fdb32db458538f8a291ed93ddf8aeaacfbfc371aa":hex:"96f124c74fd737819008ddef440320f4a3733d0062c83c893e259aecf12ba08f2a2e966a3341d6d4" + +CCM encrypt and tag NIST VNT AES-128 #4 (P=24, N=10, A=32, T=16) +depends_on:0 +4:exp:0:hex:"6ccb68d3838d4ddf660b9cd904cad40f":hex:"5ea35c082e2b190e9d98e6b2daad8672f587b4f2968072fc":hex:"c4fb7519a19f13d9d1fc":hex:"092e64fef08b5655a86cdb8de63ffaa7772e8730844e9016141af8bad2216246":hex:"cda5fe3d15d00150b99120c7f206b88a4c2c4a39ca9143425603ab284a73a38cc916f8b653c92ab4" + +CCM encrypt and tag NIST VNT AES-128 #5 (P=24, N=11, A=32, T=16) +depends_on:0 +4:exp:0:hex:"e6ab9e70a4fb51b01c2e262233e64c0d":hex:"ba15916733550d7aa82b2f6b117cd3f54c83ddc16cd0288a":hex:"74e689eb5af9441dd690a6":hex:"42f6518ee0fbe42f28e13b4bb2eb60517b37c9744394d9143393a879c3e107c7":hex:"dcc151443288f35d39ed8fae6f0ce1d1eb656f4f7fd65c0b16f322ce85d7c54e71ac560fd4da9651" + +CCM encrypt and tag NIST VNT AES-128 #6 (P=24, N=12, A=32, T=16) +depends_on:0 +4:exp:0:hex:"005e8f4d8e0cbf4e1ceeb5d87a275848":hex:"b6f345204526439daf84998f380dcfb4b4167c959c04ff65":hex:"0ec3ac452b547b9062aac8fa":hex:"2f1821aa57e5278ffd33c17d46615b77363149dbc98470413f6543a6b749f2ca":hex:"9575e16f35da3c88a19c26a7b762044f4d7bbbafeff05d754829e2a7752fa3a14890972884b511d8" + +CCM encrypt and tag NIST VNT AES-128 #7 (P=24, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"ac87fef3b76e725d66d905625a387e82":hex:"959403e0771c21a416bd03f3898390e90d0a0899f69f9552":hex:"61bf06b9fa5a450d094f3ddcb5":hex:"0245484bcd987787fe97fda6c8ffb6e7058d7b8f7064f27514afaac4048767fd":hex:"cabf8aa613d5357aa3e70173d43f1f202b628a61d18e8b572eb66bb8213a515aa61e5f0945cd57f4" + +CCM encrypt and tag NIST VNT AES-192 #1 (P=24, N=7, A=32, T=16) +depends_on:0 +4:exp:0:hex:"ceb009aea4454451feadf0e6b36f45555dd04723baa448e8":hex:"c8d275f919e17d7fe69c2a1f58939dfe4d403791b5df1310":hex:"764043c49460b7":hex:"6e80dd7f1badf3a1c9ab25c75f10bde78c23fa0eb8f9aaa53adefbf4cbf78fe4":hex:"8a0f3d8229e48e7487fd95a28ad392c80b3681d4fbc7bbfd2dd6ef1c45d4ccb723dc074414db506d" + +CCM encrypt and tag NIST VNT AES-192 #2 (P=24, N=8, A=32, T=16) +depends_on:0 +4:exp:0:hex:"1dd56442fa09a42890b1b4274b950770ea8beea2e048193d":hex:"bd92d6744cde446fc8621625658fc4bc00dcb97f06195ad7":hex:"ad749d596d88a4b4":hex:"c67219909828adef64422286008e1e306867a1c0b3da95444507a68b45c953e4":hex:"076cffd0ca978fe2bad411ced45a090abafb22a99896f6a75a1969276aa2b0cdb37ccaf2845dbf6e" + +CCM encrypt and tag NIST VNT AES-192 #3 (P=24, N=9, A=32, T=16) +depends_on:0 +4:exp:0:hex:"8cc622645065c72d0d2aca75802cf1bbbd81096721627c08":hex:"597b3614ff9cd567afd1aad4e5f52cc3fa4ca32b9b213c55":hex:"cd84acbe9abb6a990a":hex:"447b6f36acdad2d1cfd6e9a92f4055ad90142e61f4a19927caea9dbe634d3208":hex:"2d7fb83e6621eed9073e0386d032c6941bef37b2cf36a4c6c5e36222d17c6fb0631c3f560a3ce4a4" + +CCM encrypt and tag NIST VNT AES-192 #4 (P=24, N=10, A=32, T=16) +depends_on:0 +4:exp:0:hex:"ab72eef2aba30205c986e2052d6e2c67881d24ae5fceaa8f":hex:"2a794b84fc9e4a7e6d70a82b5141fd132177a86b4e8fc13a":hex:"d7a46e726ed43f1580eb":hex:"baa86f14271b2be7dbb37ddc7c95ce4857e57aa94624d594d7bd6ceeaada8d5f":hex:"2d7f76464417613bb61d3657481346b74fc9d6abc6a3babd39365dce86859cd82395d11bfc8cf188" + +CCM encrypt and tag NIST VNT AES-192 #5 (P=24, N=11, A=32, T=16) +depends_on:0 +4:exp:0:hex:"af84c6f302c59aeee6d5728ed5da2e3c64a5a781c52c4d1b":hex:"6db41aeb5f7c24df8929dbc30483b3c7934b3bd1cdce5bb9":hex:"df990c42a268950677c433":hex:"a6ab5d78427f297a4b7e21f1091ff3a5b20caa3fe1cbcb09459d9df596a6c8e1":hex:"8c9328258bf71970d33e23a3ff81cc1c9cbe196a1294264bfd6a7255e4801963bb30a63de3fc5b82" + +CCM encrypt and tag NIST VNT AES-192 #6 (P=24, N=12, A=32, T=16) +depends_on:0 +4:exp:0:hex:"d49b255aed8be1c02eb6d8ae2bac6dcd7901f1f61df3bbf5":hex:"062eafb0cd09d26e65108c0f56fcc7a305f31c34e0f3a24c":hex:"1af29e721c98e81fb6286370":hex:"64f8a0eee5487a4958a489ed35f1327e2096542c1bdb2134fb942ca91804c274":hex:"721344e2fd05d2ee50713531052d75e4071103ab0436f65f0af2a663da51bac626c9f4128ba5ec0b" + +CCM encrypt and tag NIST VNT AES-192 #7 (P=24, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"36ad1e3fb630d1b1fbccfd685f44edd8984427b78deae7a9":hex:"8b9db1c8f9b4892a5654c85467bcffa2e15e28392c938952":hex:"3af625df8be9d7685a842f260e":hex:"308443033ecd4a814475672b814b7c6d813d0ec2a0caeecbcaba18a2840cdb6c":hex:"6bc6890fee299c712fb8d9df9c141f24ee1572b8f15112c2f8c99ccf2d82788cf613a61d60dae458" + +CCM encrypt and tag NIST VNT AES-256 #1 (P=24, N=7, A=32, T=16) +depends_on:0 +4:exp:0:hex:"553521a765ab0c3fd203654e9916330e189bdf951feee9b44b10da208fee7acf":hex:"644eb34b9a126e437b5e015eea141ca1a88020f2d5d6cc2c":hex:"aaa23f101647d8":hex:"a355d4c611812e5f9258d7188b3df8851477094ffc2af2cf0c8670db903fbbe0":hex:"27ed90668174ebf8241a3c74b35e1246b6617e4123578f153bdb67062a13ef4e986f5bb3d0bb4307" + +CCM encrypt and tag NIST VNT AES-256 #2 (P=24, N=8, A=32, T=16) +depends_on:0 +4:exp:0:hex:"472bf7946bce1d3c6f168f4475e5bb3a67d5df2fa01e64bce8bb6e43a6c8b177":hex:"59eb45bbbeb054b0b97334d53580ce03f699ac2a7e490143":hex:"790134a8db83f2da":hex:"a7a86a4407b7ecebc89434baa65ef173e88bd2dad9899b717ca578867c2d916f":hex:"db4961070f528ccd1a5a0681ee4d0ce3515fb890bccedc2dbc00b1d8b2bc393a8d09e87af7811f55" + +CCM encrypt and tag NIST VNT AES-256 #3 (P=24, N=9, A=32, T=16) +depends_on:0 +4:exp:0:hex:"58ae7965a508e8dd2eda69b5d888a28a1cb3783bad55d59d5b0da87137b72e93":hex:"e61bad17640ecff926d0b0238271ee4c9f8e801dd7243e9e":hex:"caa3d928d2bf2b7f2c":hex:"304678b3ffd3200e33a8912bcb556b3cfec53ca17f70ecba00d359f9f51d3e3b":hex:"7bb1137c14cb4d324a4a8f1115c619ebf74927f0bed60a8d5a9140ff50dc4da375c7d2de80de097f" + +CCM encrypt and tag NIST VNT AES-256 #4 (P=24, N=10, A=32, T=16) +depends_on:0 +4:exp:0:hex:"aecc5e18088bf9fd7b17f089bdd5607b69903b04b726361f8a81e221b1c91891":hex:"d4291c99901345afe29f58912a414a7498f37b44362bdf3c":hex:"c527d309ab29ee91c5fc":hex:"8f9a73e7bc1c11e2919020ba3a404cbddf861e9e78477218e3be2cd4337b278d":hex:"392784a9e0b14bcd37639ec5409d6ead3e75f855e5a92c33ffc040ef3977e0035ce6ea6d157c18d3" + +CCM encrypt and tag NIST VNT AES-256 #5 (P=24, N=11, A=32, T=16) +depends_on:0 +4:exp:0:hex:"97bc7482a87ba005475dfa3448f59d4b3f9c4c969d08b39b1b21ef965c0f5125":hex:"b99bf4dc781795fc4d3a8467b06e1665d4e543657f23129f":hex:"0bcf78103ec52d6df28887":hex:"049c10f0cb37ae08eae2d0766563b7c5a8454f841c2061a4f71a0a2158ae6ce5":hex:"0d3891fa0caac1f7ebe41b480920ffd34d4155064c24f3b17a483163dd8f228d1f20cd4f86cf38fd" + +CCM encrypt and tag NIST VNT AES-256 #6 (P=24, N=12, A=32, T=16) +depends_on:0 +4:exp:0:hex:"d6ff67379a2ead2ca87aa4f29536258f9fb9fc2e91b0ed18e7b9f5df332dd1dc":hex:"98626ffc6c44f13c964e7fcb7d16e988990d6d063d012d33":hex:"2f1d0717a822e20c7cd28f0a":hex:"d50741d34c8564d92f396b97be782923ff3c855ea9757bde419f632c83997630":hex:"50e22db70ac2bab6d6af7059c90d00fbf0fb52eee5eb650e08aca7dec636170f481dcb9fefb85c05" + +CCM encrypt and tag NIST VNT AES-256 #7 (P=24, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"4a75ff2f66dae2935403cce27e829ad8be98185c73f8bc61d3ce950a83007e11":hex:"205f2a664a8512e18321a91c13ec13b9e6b633228c57cc1e":hex:"46eb390b175e75da6193d7edb6":hex:"282f05f734f249c0535ee396282218b7c4913c39b59ad2a03ffaf5b0e9b0f780":hex:"58f1584f761983bef4d0060746b5d5ee610ecfda31101a7f5460e9b7856d60a5ad9803c0762f8176" + +CCM encrypt and tag NIST VADT AES-128 #1 (P=24, N=13, A=0, T=16) +depends_on:0 +4:exp:0:hex:"d24a3d3dde8c84830280cb87abad0bb3":hex:"7c86135ed9c2a515aaae0e9a208133897269220f30870006":hex:"f1100035bb24a8d26004e0e24b":hex:"":hex:"1faeb0ee2ca2cd52f0aa3966578344f24e69b742c4ab37ab1123301219c70599b7c373ad4b3ad67b" + +CCM encrypt and tag NIST VADT AES-128 #2 (P=24, N=13, A=1, T=16) +depends_on:0 +4:exp:0:hex:"08b0da255d2083808a1b4d367090bacc":hex:"1b156d7e2bf7c9a25ad91cff7b0b02161cb78ff9162286b0":hex:"777828b13679a9e2ca89568233":hex:"dd":hex:"e8b80af4960d5417c15726406e345c5c46831192b03432eed16b6282283e16602331bcca9d51ce76" + +CCM encrypt and tag NIST VADT AES-128 #3 (P=24, N=13, A=2, T=16) +depends_on:0 +4:exp:0:hex:"1538cc03b60880bf3e7d388e29f27739":hex:"e7b819a853ffe79baaa72097ff0d04f02640ae62bcfd3da5":hex:"9e734de325026b5d7128193973":hex:"c93c":hex:"1d8f42f9730424fa27240bd6277f4882604f440324b11b003ca01d874439b4e1f79a26d8c6dc433a" + +CCM encrypt and tag NIST VADT AES-128 #4 (P=24, N=13, A=3, T=16) +depends_on:0 +4:exp:0:hex:"f149e41d848f59276cfddd743bafa9a9":hex:"9759e6f21f5a588010f57e6d6eae178d8b20ab59cda66f42":hex:"14b756d66fc51134e203d1c6f9":hex:"f5827e":hex:"f634bf00f1f9f1f93f41049d7f3797b05e805f0b14850f4e78e2a23411147a6187da6818506232ee" + +CCM encrypt and tag NIST VADT AES-128 #5 (P=24, N=13, A=4, T=16) +depends_on:0 +4:exp:0:hex:"9a57a22c7f26feff8ca6cceff214e4c2":hex:"035c516776c706a7dd5f181fa6aa891b04dd423042ea0667":hex:"88f30fd2b04fb8ddbce8fc26e6":hex:"a95bdff6":hex:"b92f7ec2ebecebdbd2977b3874e61bf496a382153b2529fc9b6443a35f329b2068916fb6ab8227eb" + +CCM encrypt and tag NIST VADT AES-128 #6 (P=24, N=13, A=5, T=16) +depends_on:0 +4:exp:0:hex:"54caf96ef6d448734700aadab50faf7a":hex:"c69f7c5a50f3e72123371bbfd6bdf532b99ef78500508dfe":hex:"a3803e752ae849c910d8da36af":hex:"5f476348dd":hex:"20c43ad83610880249f1632dd418ec9a5ed333b50e996d1a4e5a32fbe7961b832b722bc07a18595b" + +CCM encrypt and tag NIST VADT AES-128 #7 (P=24, N=13, A=6, T=16) +depends_on:0 +4:exp:0:hex:"cc0c084d7de011e2f031616a302e7a31":hex:"15b369889699b6de1fa3ee73e5fe19814e46f129074c965b":hex:"f0b4522847f6f8336fe534a4e7":hex:"da853a27aee2":hex:"f39755d160a64611368a8eccf6fcbc45ef7f1f56240eb19a2e3ca4ec3c776ab58843f617d605fd72" + +CCM encrypt and tag NIST VADT AES-128 #8 (P=24, N=13, A=7, T=16) +depends_on:0 +4:exp:0:hex:"d7572ed0e37261efa02f8c83e695efdc":hex:"1edef80c57d17f969f8bde10ab38a1a8811a124de72c526e":hex:"f4f96d7b4384a3930b3d830f82":hex:"922340ec94861f":hex:"de14558cc686e1836f1f121ea1b941a9ebd4f0fb916dc870fd541b988a801cb5751c7faaf5b0c164" + +CCM encrypt and tag NIST VADT AES-128 #9 (P=24, N=13, A=8, T=16) +depends_on:0 +4:exp:0:hex:"98a42d7a0c5917deaf3b4de3f0cbe0a1":hex:"9aa9c8358117564371366beeec923051ef433252197aaad5":hex:"03d33ab0c2df7bfce88b5ee4c4":hex:"2d5438b728b950d9":hex:"9ff942baa60f440c17a78e9581216b9a947a67f04d54911feecfff971fdfaa856310b014aa59c978" + +CCM encrypt and tag NIST VADT AES-128 #10 (P=24, N=13, A=9, T=16) +depends_on:0 +4:exp:0:hex:"2a68e3fe746f593c1b97cb637079c3e5":hex:"13b4a874888db0e5d8fd814b5e7e04f7fdfbc1601ccc02bc":hex:"cd62d0f27b7f4864dc7c343acd":hex:"abe4f1d3812bfe3ccf":hex:"032835a3dbf688d09cf2a32a92b101959d33ff47500f92f4fd49840440f866d1a22b0854996111d8" + +CCM encrypt and tag NIST VADT AES-128 #11 (P=24, N=13, A=10, T=16) +depends_on:0 +4:exp:0:hex:"46b067cf9b1a28cf187002e90b14e130":hex:"cc0915194218d4536e467433cd6d79ff1d9eb9ff160ab684":hex:"bad8c03292bf01cfd8d34f860c":hex:"8d65880eddb9fd96d276":hex:"bd56edc015692c6ab9bec493a9893863598414a3d11a6a0f27ecdcb257d0d30491e5bf1aa8f90958" + +CCM encrypt and tag NIST VADT AES-128 #12 (P=24, N=13, A=11, T=16) +depends_on:0 +4:exp:0:hex:"e94dac9c90984790a7c0c867536615ff":hex:"4d64461c55eb16bf7b9120f22be349598f2f394da8460dc6":hex:"c19f06f91e645d4199365f18c0":hex:"537038b5357e358a930bd6":hex:"e9fc5004c2359724e1e4411ae6f834ef6bea046d549753c88790c1648f461a31c84e62ea8592a074" + +CCM encrypt and tag NIST VADT AES-128 #13 (P=24, N=13, A=12, T=16) +depends_on:0 +4:exp:0:hex:"f6bb5d59b0fa9de0828b115303bf94aa":hex:"011fc50329bfd63a85ebd4f7693363602f1a4147371270b7":hex:"05358f33e1fc6a53ab5a5c98ce":hex:"040b25771239cc2a39446e3c":hex:"4432d7eb42980734d34f19c50cf8abf71ac1b19ed75a727854e5d050a405f755047d09cb0f49546a" + +CCM encrypt and tag NIST VADT AES-128 #14 (P=24, N=13, A=13, T=16) +depends_on:0 +4:exp:0:hex:"d1da2e961e78063af8de41865b226873":hex:"8e5fa1a6662a8378cda15697e926841594f2f394fa5a34ab":hex:"03739f5474857006340cce554d":hex:"e3afd091d2b588465872a6300f":hex:"ca0d95e3ff186ad6b88d45fc4079e6b7b4a615e7e8dd5f4742d522cc9dc19c47a4fa0b1528069cf8" + +CCM encrypt and tag NIST VADT AES-128 #15 (P=24, N=13, A=14, T=16) +depends_on:0 +4:exp:0:hex:"1eee667267ef10b03624cf9c341e3f75":hex:"798e31cce0a83702a95171fb1162a17b9ce00ec3592ce262":hex:"0630a3eae27e505c61c56e6560":hex:"d24651ef0561282d3e20e834960c":hex:"f3c3e52f1a1ff528a8d3783ee4e75f114e3e6416334815d2d9236d5c5c9319092078411b72c51ba8" + +CCM encrypt and tag NIST VADT AES-128 #16 (P=24, N=13, A=15, T=16) +depends_on:0 +4:exp:0:hex:"dbbd26f5d9e970e4e384b2273961be5a":hex:"553714e17a208a2eceb847a4a2d95088388b1ac8d8ca43e0":hex:"0b1eabe504ef4822542e397fec":hex:"477937301c83ba02d50760b603e0ea":hex:"1c80213268bad5402c4dc9b5d836ab7499810d0d8a974716df9a0e986ab2890736423bb3772cec3e" + +CCM encrypt and tag NIST VADT AES-128 #17 (P=24, N=13, A=16, T=16) +depends_on:0 +4:exp:0:hex:"10a7720f2e18f739c26924925af6b670":hex:"e59782a9aea45f467b90e51a0fdf166baba05663def2d8b6":hex:"8c4e7813ab9bce9dafee01c628":hex:"a209941fab710fda38d11c68b13d930f":hex:"e357b1ccdaca6f3506dc45279c2e4c59f5307a5fd6a99cd72341ea8c0785569973f90ee9ee645acc" + +CCM encrypt and tag NIST VADT AES-128 #18 (P=24, N=13, A=17, T=16) +depends_on:0 +4:exp:0:hex:"6bffab1f4f4c1ff66b4a669b515b2f8d":hex:"d91b12e8655dd92b1332fc1d71c391c96a17111562d90ba3":hex:"ddb34d5e0140fb96d690e1a2b7":hex:"5cbba9ea778e01af00afb2a934f28c7211":hex:"d302e5b2d5d90433186b804cd7717e2db2f22cdc34fb2942ab30780a2c4f12af8f35350d65284c59" + +CCM encrypt and tag NIST VADT AES-128 #19 (P=24, N=13, A=18, T=16) +depends_on:0 +4:exp:0:hex:"ae6136df9ab43631ef143515dacedbe7":hex:"6a493c5ef3769ccc4101dbb2eb36e1e5bbc577a057ce0731":hex:"c5c445792208a50c8e93d64aa3":hex:"e04006b68c83a5dd4ceac3cde238e48895ae":hex:"c7584c0203c2535c5702c6ae93b7cbfb066f4a055c627a180d6d676d11fce907b5c93fa1ed7bff2b" + +CCM encrypt and tag NIST VADT AES-128 #20 (P=24, N=13, A=19, T=16) +depends_on:0 +4:exp:0:hex:"f1908328edf2996ebfc9655472ca5ad0":hex:"eede01b08f9a303cdf14c99d7a45732972c6eff2a1db06eb":hex:"4c693364546930b6c5250e2699":hex:"4a3634e5028df97fbe00eb016e8ea4f1918faa":hex:"90c850790b0b380f5aeb2488fdf43c9d5ef1759861e86f6e52570e769629dcc2e568737ba53a1195" + +CCM encrypt and tag NIST VADT AES-128 #21 (P=24, N=13, A=20, T=16) +depends_on:0 +4:exp:0:hex:"61cb8eb792e95d099a1455fb789d8d16":hex:"6ad541695a37c32d73ff6d5f870abd5b0f362a8968c4fce0":hex:"1f37b3e59137f2a60dc09d16ac":hex:"09db3efac9473f713da630ae92c2c8604c61c51e":hex:"e65fcc975865c1499b088b58ba163283085d8ca68dc3b235d89756e5d78753ef22c012ae34b39a20" + +CCM encrypt and tag NIST VADT AES-128 #22 (P=24, N=13, A=21, T=16) +depends_on:0 +4:exp:0:hex:"be1ed49e2cb0caf6b6a0940c58453b93":hex:"a9eec383f63892521e4616fcbadc5485942ffaf4669c43a7":hex:"b78ad129457681fa7346435b97":hex:"161d92c7df1ebb0924719e066e08b95eb4914a5eda":hex:"949be340720c4fdc4adc05cb777dd81a2549628d33fba07e62d2b338a7b34ebd9d85c244c952d681" + +CCM encrypt and tag NIST VADT AES-128 #23 (P=24, N=13, A=22, T=16) +depends_on:0 +4:exp:0:hex:"34ab6fd7f54a2e0276fcb7cf1e203aba":hex:"8d164f598ea141082b1069776fccd87baf6a2563cbdbc9d1":hex:"6091afb62c1a8eed4da5624dd7":hex:"1ab5cc3d7b01dc74e6cf838bb565fea3187d33d552a2":hex:"0d30ab07153b5153637969e6bd3539448c541e42b3d432fd7ef14622a9b621d1721b944c60f7fd67" + +CCM encrypt and tag NIST VADT AES-128 #24 (P=24, N=13, A=23, T=16) +depends_on:0 +4:exp:0:hex:"ea96f90fbae12a857f5c97e0cba57943":hex:"49db80f22bc267a70e5636dfbc8a21c83d9691fe4b9c3051":hex:"21cc46d9ced1539b0ad946e600":hex:"105258d2f25f62675aee975cfdb668aff833f05b61eb2a":hex:"d2fcc8b7809b5fc07e44083e437d8180157f1782a9ce9f65c7fa9ee2e7cdc1b755258f2212a8a8f4" + +CCM encrypt and tag NIST VADT AES-128 #25 (P=24, N=13, A=24, T=16) +depends_on:0 +4:exp:0:hex:"35b403a15212097085d6e2b77ec3d4f2":hex:"7dd7396db6613eb80909a3b8c0029b624912aabedda0659b":hex:"daa423bf9256c3fcc347a293aa":hex:"d3c0ed74e5f25e4c1e479e1a51182bb018698ec267269149":hex:"5b00cf8a66baa7fe22502ed6f4861af71fa64b550d643f95eee82c19ecba34280604b58d92dacd3f" + +CCM encrypt and tag NIST VADT AES-128 #26 (P=24, N=13, A=25, T=16) +depends_on:0 +4:exp:0:hex:"7a459aadb48f1a528edae71fcf698b84":hex:"0b3d947de8632dc8ff752f619ba7c84716fac7a23e101641":hex:"fa4616b715ea898772b0e89dd4":hex:"0c0b4a45df5c3919c1e1669c5af5d398d9545e44307d95c481":hex:"7db9f3f7dc26fc2adf58d4525d26d5601e977de5a7c33911a1138cff7b624f9908b5b4d7e90a824a" + +CCM encrypt and tag NIST VADT AES-128 #27 (P=24, N=13, A=26, T=16) +depends_on:0 +4:exp:0:hex:"ca748225057f735f712ecc64791367f0":hex:"e92cd0cb97afe4fb00c4f12e9b9abe1d08db98f49a27f461":hex:"1341a6998eb1f50d4b710a13ac":hex:"5fb96b045f494808c02014f06074bd45b8a8ad12b4cb448ec162":hex:"82b666694232e86e82295beae66ae67d56aceb5d6b1484ceb4a6843ec16078038c10afedc41f5362" + +CCM encrypt and tag NIST VADT AES-128 #28 (P=24, N=13, A=27, T=16) +depends_on:0 +4:exp:0:hex:"fdf2b2c7fcb3789b4e90abe607dca2af":hex:"d7aa4efa5d75195a400018bd38f7d8cd53fdffe88df1837f":hex:"a69ddc66e63a3415f21009d53a":hex:"c76846da496ed87b9c0f65c6266c9a822224acde9775efb186a4a5":hex:"150d9a8b78d9c04239d66207a1f95021bbb1b7c70d7c354825d05e5a2e76a90f6fe489fd74cab2a3" + +CCM encrypt and tag NIST VADT AES-128 #29 (P=24, N=13, A=28, T=16) +depends_on:0 +4:exp:0:hex:"7d870d7e52d3053c65eefad47764cfeb":hex:"109317556c21c969eda65a94176d7a11462c9ae18a865b6d":hex:"37d888f4aa452d7bf217f5a529":hex:"9610949f6d23d5b1f3989b2f4e524fab4f297a5bec8ddad4f16cb616":hex:"4e6b967b1571c6d7b9e118b112b7ac949a4a175650316a242dd579cb0d201d22c86bbc7fbe47bd0d" + +CCM encrypt and tag NIST VADT AES-128 #30 (P=24, N=13, A=29, T=16) +depends_on:0 +4:exp:0:hex:"8fcac40527c0e7ca8eaff265ca12c053":hex:"78d1e96af8cebdcc7e7e2a4ddcfa34f6cf9a24fb85672ad7":hex:"ae9f012fd9af60a400e20b1690":hex:"9ce65598cd1f86afc9aaaf172809570cc306333c25523f863c6d0e0154":hex:"9adb9a95a9379ad795d8d3ffd4e37a045160d6d727f974a6cb3b5151f327e65447e52c7525562c91" + +CCM encrypt and tag NIST VADT AES-128 #31 (P=24, N=13, A=30, T=16) +depends_on:0 +4:exp:0:hex:"ddf9f150cc3f1c15e8e773663c5b061c":hex:"79d8841ab83279724ce35e1a8abd4e158168dcf388ab4c3d":hex:"98c5036b7d54da9a1177105600":hex:"20c5ab290e6d97f53c74121951f39ba865b3acc465fa3f0fb8a591622277":hex:"d00d29396ffa9e691290d746527777bf96a851f306d4da0b1816df1e0e82bb7bc8105930ad6a2232" + +CCM encrypt and tag NIST VADT AES-128 #32 (P=24, N=13, A=31, T=16) +depends_on:0 +4:exp:0:hex:"b1dc81d116d94f5eced526b37c004b95":hex:"54390715b6e7c7bd51a234db059a51ba030cf22ee00b7277":hex:"97c8f69fb91b17299461fd8d63":hex:"f8b08aa83bed09ca342249b2cf9e2b45a89dcfb8711a120395e455921af481":hex:"cb629994c3418a662a8cde1b5f4d99aa7df66e24c53dc6df11297930fd44c63675b7cca70671ef4d" + +CCM encrypt and tag NIST VADT AES-128 #33 (P=24, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"5a33980e71e7d67fd6cf171454dc96e5":hex:"a34dfa24847c365291ce1b54bcf8d9a75d861e5133cc3a74":hex:"33ae68ebb8010c6b3da6b9cb29":hex:"eca622a37570df619e10ebb18bebadb2f2b49c4d2b2ff715873bb672e30fc0ff":hex:"7a60fa7ee8859e283cce378fb6b95522ab8b70efcdb0265f7c4b4fa597666b86dd1353e400f28864" + +CCM encrypt and tag NIST VADT AES-192 #1 (P=24, N=13, A=0, T=16) +depends_on:0 +4:exp:0:hex:"26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886":hex:"39f08a2af1d8da6212550639b91fb2573e39a8eb5d801de8":hex:"15b369889699b6de1fa3ee73e5":hex:"":hex:"6342b8700edec97a960eb16e7cb1eb4412fb4e263ddd2206b090155d34a76c8324e5550c3ef426ed" + +CCM encrypt and tag NIST VADT AES-192 #2 (P=24, N=13, A=1, T=16) +depends_on:0 +4:exp:0:hex:"9748798c0f3cc766795c8ce0e4c979c1930dfe7faefea84a":hex:"100fa71462277d76ca81f2cfdb3d39d3894b0ca28074a0f0":hex:"cdf4ba655acfe8e2134fa0542f":hex:"67":hex:"36e2415b4f888a6072f260d7e786d803be16f8b9cbee112d7ff74e3b05b7d7c13284573bd3e7e481" + +CCM encrypt and tag NIST VADT AES-192 #3 (P=24, N=13, A=2, T=16) +depends_on:0 +4:exp:0:hex:"393dcac5a28d77297946d7ab471ae03bd303ba3499e2ce26":hex:"262f4ac988812500cb437f52f0c182148e85a0bec67a2736":hex:"fe7329f343f6e726a90b11ae37":hex:"1c8b":hex:"e6d43f822ad168aa9c2e29c07f4592d7bbeb0203f418f3020ecdbc200be353112faf20e2be711908" + +CCM encrypt and tag NIST VADT AES-192 #4 (P=24, N=13, A=3, T=16) +depends_on:0 +4:exp:0:hex:"a74abc4347e4be0acb0a73bb8f7d25c35bae13b77f80233a":hex:"6372824bf416cd072a7ad0ae5f9f596c6127520c1b688ab4":hex:"6a850e94940da8781159ba97ef":hex:"a4490e":hex:"b14a07bdc119d87611342c4c6935c5786ff1f9ae2eb49e6191c88a3cb4fbafcb8a4a157d587d7e39" + +CCM encrypt and tag NIST VADT AES-192 #5 (P=24, N=13, A=4, T=16) +depends_on:0 +4:exp:0:hex:"df052e95aea3769a433ce4e4e800b8418649bbe8c6297eb0":hex:"e8c1a89228d8212f75c136bab7923a89f9fea18e781cb836":hex:"ba356d392c3f700f4f2706a4ca":hex:"8ffc0e3d":hex:"66b5d782323925e1bd0a8413a9a5a881356453d5df2cbeb199b2e1e803550dcdde55fd66ecb45edd" + +CCM encrypt and tag NIST VADT AES-192 #6 (P=24, N=13, A=5, T=16) +depends_on:0 +4:exp:0:hex:"16d345606a315ad2406abbcb43cd8cabe948107ba6d17a72":hex:"d3bef460223c81e4579c9d1d463ac5e0881685de1420a411":hex:"d4ef3e9e04f1b7f20ffc5a022e":hex:"a468f08d07":hex:"abb85db49a9b1c8724ecbc734cc8373bd20083cfa4007b1cfe4d3a3bb25f89f692884be230c6035c" + +CCM encrypt and tag NIST VADT AES-192 #7 (P=24, N=13, A=6, T=16) +depends_on:0 +4:exp:0:hex:"1c476cfd7dd300d961fd3f24a6fe0e80742b00851676ca63":hex:"6f3938932b5c1280311e892280d8a822a828a0be7fdb1bcd":hex:"e300fc7a5b96806382c35af5b2":hex:"28130f938c45":hex:"df48662fe134e75a85abc2cece2c3b6236c88a70fa792e9beadc9601adf9fbdf4e3e94b395b0a332" + +CCM encrypt and tag NIST VADT AES-192 #8 (P=24, N=13, A=7, T=16) +depends_on:0 +4:exp:0:hex:"79d1e38a70df1cf239be168833dcd0570bc8f37b3aa26c37":hex:"83c24f3a77b83b4ef45277ba90225f3ba1722312f52b1a07":hex:"8229d6d7e9e21fdc789bff5dcf":hex:"076887d2abe900":hex:"19d880f1d959a68f162de243d4a45747ace704613359b27218d1531a066de60a95d2924a6910e990" + +CCM encrypt and tag NIST VADT AES-192 #9 (P=24, N=13, A=8, T=16) +depends_on:0 +4:exp:0:hex:"72e6cebdaf88205c4e74428664bc0d7eb4687a272217b7ca":hex:"54bc7e3c227df4e83252a5848fea12dfdb2d14b9e67c1629":hex:"3820db475c7cb04a0f74d8e449":hex:"f427c47e10c45bb3":hex:"91e7baff2b42af63e26c87ce6991af22422c1f82906858b1721961de5c768f4d19bd3034f44f08d2" + +CCM encrypt and tag NIST VADT AES-192 #10 (P=24, N=13, A=9, T=16) +depends_on:0 +4:exp:0:hex:"39c03a0c8634047b1635348f284d3dc1e752ab40548eb337":hex:"0662e63c88e963d3e0cf2c4653515ae4474a2c78ab0394c0":hex:"9e2ea8eb7f56087ee506925648":hex:"28d157f09a71da80dd":hex:"01dcd4dd3b8c1369518136ce45e8bb9df565b0ad231a887b02ada34addf0aa2f4744ed2e07995491" + +CCM encrypt and tag NIST VADT AES-192 #11 (P=24, N=13, A=10, T=16) +depends_on:0 +4:exp:0:hex:"e2a92ffbb0b5eb68cb82687f12449fae5167d375131b0b10":hex:"048c9ba4597c3bb595bfd5048e5e9a1296f30e5c0118b177":hex:"441ad5e1382e083a95224f395d":hex:"2352648299b0413cb2ce":hex:"25247a258e4ac0a988d8def60cc174a9d4578cd5346fb5150c96e8ab8774baa421f39c64a386c418" + +CCM encrypt and tag NIST VADT AES-192 #12 (P=24, N=13, A=11, T=16) +depends_on:0 +4:exp:0:hex:"ef1ad3eb0bde7d4728389da2255d1f8a66ecb72e6f2f1ac4":hex:"9f580cc6c62a05ce125c6bec109a48ca527ee26a64b14b68":hex:"8e7d8a44244daa7df2b340993e":hex:"521583c25eb4a3b2e46120":hex:"ff0ff95bcb0bccd5e4aadd77ac6770f5013654eb3c6386fded2c87135861b43a99f258b6938f66e3" + +CCM encrypt and tag NIST VADT AES-192 #13 (P=24, N=13, A=12, T=16) +depends_on:0 +4:exp:0:hex:"44cba20b7204ed85327c9c71c6fea00b47ce7bdde9dea490":hex:"6333bde218b784ccd8370492f7c8c722f8ef143af66d71d7":hex:"f3329154d8908f4e4a5b079992":hex:"f1e0af185180d2eb63e50e37":hex:"b9401a4927b34dc15e9193db00212f85f0c319781ec90e3b4484d93cb422cb564acc63d3d18e169c" + +CCM encrypt and tag NIST VADT AES-192 #14 (P=24, N=13, A=13, T=16) +depends_on:0 +4:exp:0:hex:"b5f43f3ae38a6165f0f990abe9ee50cd9ad7e847a0a51731":hex:"3726c1aaf85ee8099a7ebd3268700e07d4b3f292c65bba34":hex:"13501aebda19a9bf1b5ffaa42a":hex:"ead4c45ff9db54f9902a6de181":hex:"fd80e88f07dad09eed5569a4f9bb65c42ef426dda40450119503d811701642143013f28ce384d912" + +CCM encrypt and tag NIST VADT AES-192 #15 (P=24, N=13, A=14, T=16) +depends_on:0 +4:exp:0:hex:"13f179aa2a23bc90a85660306394940e9bb226ce3885ec01":hex:"d3b36c6289ad6ae7c5d885fe83d62a76270689ce05fa3b48":hex:"aaa52c63ca1f74a203d08c2078":hex:"5cc924222692979a8e28ab1e0018":hex:"bc4fcef401c2e1d1c335734ff23ea52c3474d2e6f31648a7f58649400ac9e825b038d67f0c2a6f1c" + +CCM encrypt and tag NIST VADT AES-192 #16 (P=24, N=13, A=15, T=16) +depends_on:0 +4:exp:0:hex:"c1dfc48273d406a3a7b9176f80b2dc4e9a7f68134bab66d2":hex:"67d9728a88f1fac3af43ed6d634ba902896bd226858697d9":hex:"1ac53ba965cdaeeef7326a37e4":hex:"39ba54a410a58a5d11615a2163cc3b":hex:"360f0fc714994e3b59448b50cdd61d511b4f09e0e5fb5ac826a51fe5b9b598a17eb3da10f936813b" + +CCM encrypt and tag NIST VADT AES-192 #17 (P=24, N=13, A=16, T=16) +depends_on:0 +4:exp:0:hex:"d8a662ab8449bd037da0346a24565683a3bbbbd1800e3c1c":hex:"61fdd10938557080191d13dd6c3002dd445d9af988029199":hex:"166fb8d0e110124c09013e0568":hex:"1c1c082eeb5b8548283d50cc2ace1c35":hex:"23c05927502a4ee6e61e4e10552d49b020643eab476eeacc867601fe79a122a7817819655183283e" + +CCM encrypt and tag NIST VADT AES-192 #18 (P=24, N=13, A=17, T=16) +depends_on:0 +4:exp:0:hex:"116f4855121d6aa53e8b8b43a2e23d468c8568c744f49de5":hex:"1bd3b5db392402790be16e8d0a715453928f17f3384c13a7":hex:"924322a3ef0c64412f460a91b2":hex:"03c2d22a3bb08bbb96b2811ce4b1110a83":hex:"ad736402626df0f9393fe4491eb812725ad39d6facf20b5b2f9340b0d48a17ae1cc71d7515e61ee9" + +CCM encrypt and tag NIST VADT AES-192 #19 (P=24, N=13, A=18, T=16) +depends_on:0 +4:exp:0:hex:"e67f3ba11282d61fe36e38cab7b559c2fd9cbe8bf7eb5863":hex:"d7a954dae563b93385c02c82e0143b6c17ce3067d8b54120":hex:"a727ed373886dd872859b92ccd":hex:"68d199e8fced02b7aeba31aa94068a25d27a":hex:"c6cfaa1f54d041089bd81f89197e57a53b2880cefc3f9d877e30b2bcc3f1ea9ec2b8f28bf0af4ecf" + +CCM encrypt and tag NIST VADT AES-192 #20 (P=24, N=13, A=19, T=16) +depends_on:0 +4:exp:0:hex:"e0a29a2c7840cf9b41de49780b9ee92d646a4bfc5b9da74a":hex:"344dc8b6bd66a1fbbe330a95af5dd2a8783dc264d6a9267d":hex:"fc9fd876b1edded09f70b18824":hex:"36e15baafa0002efbb4bb26503b7e3b79f6c68":hex:"43b3b96aa5a54378f3bb573ffda3e154aa7f425fc3008175b60a77b9d38740356b544b1c0f259086" + +CCM encrypt and tag NIST VADT AES-192 #21 (P=24, N=13, A=20, T=16) +depends_on:0 +4:exp:0:hex:"26d0a3a8509d97f81379d21981fe1a02c579121ab7356ca0":hex:"37ab2a0b7b69942278e21032fc83eba6cdc34f5285a8b711":hex:"8015c0f07a7acd4b1cbdd21b54":hex:"093ed26ada5628cfb8cfc1391526b3bcc4af97d9":hex:"a3a60b422eb070b499cf6da0a404b13a05cedda549c6b93e6ca0e07e04674f21a46df2659a5905fb" + +CCM encrypt and tag NIST VADT AES-192 #22 (P=24, N=13, A=21, T=16) +depends_on:0 +4:exp:0:hex:"aac60835c309d837aacc635931af95702a4784c214283ebb":hex:"e8610756528f75607b83926597ef515f4b32a8386437e6d4":hex:"0e20602d4dc38baa1ebf94ded5":hex:"796e55fbe7bed46d025599c258964a99574c523f6a":hex:"e0a3d5f43e688ce104f4ae1a4fcd85500aa6b8fdbcd1b8d3003c0c3b7369e79339433e1754c0937f" + +CCM encrypt and tag NIST VADT AES-192 #23 (P=24, N=13, A=22, T=16) +depends_on:0 +4:exp:0:hex:"671544bf2988056f7f9ccd526861391a27233793a23f811f":hex:"576b069ae2713f53d2924c1fd68f786cb2eec68892f9e1be":hex:"0a259148a1d081e0df381ecd0c":hex:"61dafc237cb52f83ab773ba8a885462b6f77d4924611":hex:"ce06b3d09b02921f290544032a081a7766612940048867281bb089af0245792c16e6320cf5ffa19e" + +CCM encrypt and tag NIST VADT AES-192 #24 (P=24, N=13, A=23, T=16) +depends_on:0 +4:exp:0:hex:"90e2c63b6e5394b1aeec03f95a9d13a01a7d4e9d58610786":hex:"44dd098b1f869d670a8a841900c4bef023a1946a0c278354":hex:"dada5465eb9b7229807a39e557":hex:"f5629ca0eea589f6cf963d875a7d2efb656983f2dd2231":hex:"6b38ca85450e05e7b9362ed7e6e291a130ff233b5a561cdef7ec84dd992fdf98514f845dac8f656e" + +CCM encrypt and tag NIST VADT AES-192 #25 (P=24, N=13, A=24, T=16) +depends_on:0 +4:exp:0:hex:"13cdaaa4f5721c6d7e709cc048063cfb8b9d92e6425903e6":hex:"d7c837971b973f5f651102bf8d032e7dcd10e306739a0d6c":hex:"f97b532259babac5322e9d9a79":hex:"ad6622279832502839a82348486d42e9b38626e8f06317c4":hex:"4709600418f2839841e6d126359f6982bdb53acc7ff209635623d15b24184481eadc63bb8c878fc4" + +CCM encrypt and tag NIST VADT AES-192 #26 (P=24, N=13, A=25, T=16) +depends_on:0 +4:exp:0:hex:"90851933d4d3257137984cdb9cba2ca737322dac4dbd64bc":hex:"ba1785a149cb8b69a4e011c11a3ff06f6d7218f525ac81b5":hex:"be02df3a840322df8d448c600c":hex:"69a9dd9ac8be489c3a3f7f070bdaca10699171f66ab3da9351":hex:"89ab2efefa8406336d9e2245199fbc9454f0ef650b9ed0f446c7246bd3130803bf8d703ef5bdf15c" + +CCM encrypt and tag NIST VADT AES-192 #27 (P=24, N=13, A=26, T=16) +depends_on:0 +4:exp:0:hex:"5c5d02c93faa74a848e5046fc52f236049e28cd8096dcac6":hex:"b4da43ebfe9396b68f4689fba8837c68d0064841c6ddd4a7":hex:"54cbf2889437673b8875a0f567":hex:"09fc21ac4a1f43de29621cacf3ad84e055c6b220721af7ce33bb":hex:"d40725397229021a18f3481e3a85f70445557bb2a85e4ae8101a34c777e918e16186fda05a386572" + +CCM encrypt and tag NIST VADT AES-192 #28 (P=24, N=13, A=27, T=16) +depends_on:0 +4:exp:0:hex:"0234dae5bd7ae66c67ff0c1a3f1a191a0d7bceb451bc2b7d":hex:"0f960a89a7e806f8709047cb7a2e7c4211ad724692c88a05":hex:"16d345606a315ad2406abbcb43":hex:"c37fdf7449fd7e943595d75e977089c623be0a3926e63fdbbfdf4a":hex:"3907880d25f910eab12dd14e704d1b33ea7c453634d54da2a461f44dac1112ae3f9c65671a931d3e" + +CCM encrypt and tag NIST VADT AES-192 #29 (P=24, N=13, A=28, T=16) +depends_on:0 +4:exp:0:hex:"6351a67fd6daabd2fd49ee944dd41dd37301f958dd17fcc3":hex:"0c0663dd69ccbffbbd0c8c2e9473d0354451ae7a20fa3695":hex:"b8d517b033754058128d13d11a":hex:"511c6924fa96db716f6b053b7a48aebdc1504145a56cd02d6be2590d":hex:"19f2745df5007619c79c84d174e4521b942776478a0601d982c560fede4741e2fd3b54b3a48f3e38" + +CCM encrypt and tag NIST VADT AES-192 #30 (P=24, N=13, A=29, T=16) +depends_on:0 +4:exp:0:hex:"9a5a9560baed3b8e0e90b92655d4e5f33889e5d7253d9f6c":hex:"5bbe9c1fb2563e3e82999fe097b28da4dc6ff2e020f3b4f3":hex:"c0049382cdd8646756d4e6bff5":hex:"c95a86d52088a8b0107cc5b437a8938b2c9e74e46e2e03bb9bceecdbe3":hex:"6d5401db42b5c48b79203b6ad82806d7460ac4c82ad0809b811020480e834f6fe55900a162a4e61a" + +CCM encrypt and tag NIST VADT AES-192 #31 (P=24, N=13, A=30, T=16) +depends_on:0 +4:exp:0:hex:"3e61094c80df0053e86d43fccf4e1d3ee2cdb862d3237b0a":hex:"1fada8f4c7daea0d1c370184c169485b80a278708ed41451":hex:"63f00b2488809fdc49ca5f05d5":hex:"a08763ca936abdeece06467bef8c3c47c3a473636a039d4db540c867d3e3":hex:"680dd22f16a1290bde42c9792dfa997aed24d5bd2265b6e095aa6b99d3f894d3790c2aa2dae1ba2c" + +CCM encrypt and tag NIST VADT AES-192 #32 (P=24, N=13, A=31, T=16) +depends_on:0 +4:exp:0:hex:"b5664dd6ed435df006052f6ded74bb7ce9482ca9229886f7":hex:"0b6de49b530703affc94010c2b793ddc6de0c44d48037ff2":hex:"7a1649896f3e030c18f0205599":hex:"c5f1a26351e53e6509c8bbbed03c42c23ad81c65fccec7ffa1cb494c7f1fc4":hex:"56b02fea595cc24e798691ae905be3d466ca68ca744005dba260b5ea3b047020b73b5bafa17e5084" + +CCM encrypt and tag NIST VADT AES-192 #33 (P=24, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"50925853a84a33ff392154e4e737efc18dcfc98f4d5235a9":hex:"718f061e8b972a3adcf465d66c5b28e8661f080127f6722f":hex:"809343e986f6ff47f54d4cac22":hex:"d70aef3532bdc5293a3ebb11589ac1f801c9f93ea0d656e1d04068facf9f768b":hex:"bad3b0e6772e9c4c9c631c095e259d99692292932efb72b8966e91a19617bb748f3495aa433585bb" + +CCM encrypt and tag NIST VADT AES-256 #1 (P=24, N=13, A=0, T=16) +depends_on:0 +4:exp:0:hex:"26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886df3ba3e6da3a1389":hex:"30d56ff2a25b83fee791110fcaea48e41db7c7f098a81000":hex:"72a60f345a1978fb40f28a2fa4":hex:"":hex:"55f068c0bbba8b598013dd1841fd740fda2902322148ab5e935753e601b79db4ae730b6ae3500731" + +CCM encrypt and tag NIST VADT AES-256 #2 (P=24, N=13, A=1, T=16) +depends_on:0 +4:exp:0:hex:"a4490ed6ab51dbfccd6f3702a857575dad44da3a27eaf31178abc97da60d1e4b":hex:"1b5cc6b1651dec4bbbf5130343852e971c7ff1774100d9be":hex:"26ceaf6e3b28190a17c4f0c378":hex:"9e":hex:"789bce069a725a96c484e64a9e54dcb7a7c268c85df47815a462ff2dd8ba44a381e1f6edab12b5a9" + +CCM encrypt and tag NIST VADT AES-256 #3 (P=24, N=13, A=2, T=16) +depends_on:0 +4:exp:0:hex:"df594db94ef8eca56a417afe946085eaed444c7cc648d07d58132e6cb5bc2bc3":hex:"f4d7978fad36223623ccb5bb18a7373cba8a6e3b1c921259":hex:"c1ad812bf2bbb2cdaee4636ee7":hex:"c0c3":hex:"bea778540a90033b2c0d087e3cc447711ea25f7eea96855506ec97f23bd6ea97834f92f7263c3195" + +CCM encrypt and tag NIST VADT AES-256 #4 (P=24, N=13, A=3, T=16) +depends_on:0 +4:exp:0:hex:"d98193ab2a465e3fcd85651aaeca18b8e91489b73b7c7e93b518c4b5b81fc6ac":hex:"edba7d6312144e90ec9eaace7576045a46e553dcb8ee5a98":hex:"2247dc7e2674e9e0a63fe70613":hex:"4dc2f4":hex:"44b9ea727c847336fd739ad11f4b906b292edb810462f06ef59626ad5cdac2e4d4cb07b538a1fd8f" + +CCM encrypt and tag NIST VADT AES-256 #5 (P=24, N=13, A=4, T=16) +depends_on:0 +4:exp:0:hex:"45c8afd7373cb0f6b092af3a633d9fd97c4ca378e19d75f9b74d089429726c29":hex:"0b92adbb251dc29a67f0bb97f8e7160862b6c4e843d07fd9":hex:"fdb1fa230ae0b172ff98fc7496":hex:"270981af":hex:"274e2faea3271ea6fa0494c1951f115b5491a893056c3ee4c76fc350e585277e373e9119bf9595cb" + +CCM encrypt and tag NIST VADT AES-256 #6 (P=24, N=13, A=5, T=16) +depends_on:0 +4:exp:0:hex:"a2e6bf39efd1ceddc92b4333ed92d65efeea6c031ca345adb93a7770a8039bcd":hex:"d822f84b023f12ea9e3ce16b904278e4aaab5e11c2c23f3f":hex:"693cbb46bc8366086ec7cd7776":hex:"3ba11282d6":hex:"9f91fd2f6472e33b02b1eabb9d6655729d44c44dad6b3883fe0667bcc5806b225224b04ade8b21c1" + +CCM encrypt and tag NIST VADT AES-256 #7 (P=24, N=13, A=6, T=16) +depends_on:0 +4:exp:0:hex:"c5a850167a5bfdf56636ce9e56e2952855504e35cc4f5d24ee5e168853be82d8":hex:"e758796d7db73bccb1697c42df691ac57974b40ca9186a43":hex:"c45b165477e8bfa9ca3a1cd3ca":hex:"4759557e9bab":hex:"93ad58bd5f4f77ac4f92b0ae16c62489e4074c7f152e2ed8a88179e0d32f4928eff13b4ce2873338" + +CCM encrypt and tag NIST VADT AES-256 #8 (P=24, N=13, A=7, T=16) +depends_on:0 +4:exp:0:hex:"ae8f93c3efe38e2af07e256961dd33028faa0716e5320a7ab319a10d2f4c5548":hex:"bc9ca92a9c9919e39095d3e53fb148694620ae61227e0069":hex:"6333bde218b784ccd8370492f7":hex:"0b1fabdf2a4107":hex:"45811b0c8f754bf03950e520cd4afc81c2e3eb8a11f4fd386d5a6e4b1fbee15d35939c721004502e" + +CCM encrypt and tag NIST VADT AES-256 #9 (P=24, N=13, A=8, T=16) +depends_on:0 +4:exp:0:hex:"548c2d1eb7d91e003633d4d9ff199e4a8447180edd89ac7867d25a1db288b5ce":hex:"49fd5cbe4aff89dc3b8718f9ce545d612cbbebb289ecbf42":hex:"23b205bd6ff8ed0bab0c98999c":hex:"a6601111cd92c943":hex:"3cfc6211e359ae322802fc9566f377b0dfe17d1dfe0878ebf2a9047e37cc0be1fab0006af8db8dc4" + +CCM encrypt and tag NIST VADT AES-256 #10 (P=24, N=13, A=9, T=16) +depends_on:0 +4:exp:0:hex:"aab793e377a12484dbdd74c9b3a85c74c286e1cc498663fbd7c718b5633bb91a":hex:"7c0889854658d3408c5d8043aad2f4ae4a89449a36f8a3b8":hex:"10022cddb323e88b3c08f95a0f":hex:"82b8c736037ce2f2e8":hex:"1044250f58857c69f72b5d3454d43949e5c02b3822970b280de1a3f7fc5d06cc30f06075f5504ed7" + +CCM encrypt and tag NIST VADT AES-256 #11 (P=24, N=13, A=10, T=16) +depends_on:0 +4:exp:0:hex:"06ac39896073a44283611a66ccab067e2dd2faa8da82ff9a45bb29e54d2e6e77":hex:"3216dce3b8b1ce0e79e40fffcac728ab191aaaf319d971d3":hex:"6c7942c9819cf69b817bfcdb0a":hex:"215e2a6c24325340fdec":hex:"c5b3b50ed8a7b7b96b02ba9464b6a2ff80e90548605699a63d70e6dffb31a376a1eb7f94526dca48" + +CCM encrypt and tag NIST VADT AES-256 #12 (P=24, N=13, A=11, T=16) +depends_on:0 +4:exp:0:hex:"50412c6444bcf9829506ab019e98234af1541061557412740bc120b456052763":hex:"6cdbd63f6d591f59776f828533b28e2453a214d1d0dd8a39":hex:"85684f94c3702c5d870310166d":hex:"f706a3e09df95d3e21d2e0":hex:"8c8b4ae854a5d5c265b25e3b54bded9444cc454b3e0e6a24d6c05eaf406a5ebd578e19edd5227380" + +CCM encrypt and tag NIST VADT AES-256 #13 (P=24, N=13, A=12, T=16) +depends_on:0 +4:exp:0:hex:"8a56588fe5e125237b6cdc30f940b8d88b2863ec501a0cb00b1abade1b5ce0ed":hex:"c825952293e434ea866db558aaf486ef09a92bf366988f71":hex:"d80210b9f9776ea36dc0e0a787":hex:"e4296d1c8cf4ffc4b2635135":hex:"b8b3b15fdf6a4a0b5abc313afc769e4e8413bd887552583ede3ed995d1b70561c8e28a7b1a7e3dc8" + +CCM encrypt and tag NIST VADT AES-256 #14 (P=24, N=13, A=13, T=16) +depends_on:0 +4:exp:0:hex:"a4cc7e1c90f8684e6a5f95e6898ab4e3c194cb46e196d8228062b9f3fa744930":hex:"10d4cff95ef490923c9e0906880729d4d05412e7675cce76":hex:"cdc2712e51c7f333d6bad78eee":hex:"569c56b27268d3db54e728aac0":hex:"be3ce3e9dc72499839a98ae52abb17415e8547687e8a3c7b8aaaac20d4c9276f2851cbba2b04d185" + +CCM encrypt and tag NIST VADT AES-256 #15 (P=24, N=13, A=14, T=16) +depends_on:0 +4:exp:0:hex:"347e12eec56e95aafcc7d25bf10fc756b4e42bc2e43da7f97df24331f27f1f5c":hex:"ca88dddfc876a12f45f19562bc9ca250f43267ab251a7f34":hex:"b8d517b033754058128d13d11a":hex:"511c6924fa96db716f6b053b7a48":hex:"eeedcfa8f5b5b48c1d7e277526eecb7294213b9f5785167ae949b93003dfe63c95c1d49edfb4de3f" + +CCM encrypt and tag NIST VADT AES-256 #16 (P=24, N=13, A=15, T=16) +depends_on:0 +4:exp:0:hex:"520902aa27c16dee112812b2e685aa203aeb8b8633bd1bfc99728a482d96c1fe":hex:"533fee7d2c7740db55770e48cb1b541d990ea3f8f08ed1a6":hex:"ddf50502f414c1bf24888f1328":hex:"22b4f8f1aac02a9b2ef785d0ff6f93":hex:"fc867b319e0e4ab45ec518a1b5dcec4f29982173f3abfd4d8a8f8d14d2bdac84c3737cfbd75b7c0b" + +CCM encrypt and tag NIST VADT AES-256 #17 (P=24, N=13, A=16, T=16) +depends_on:0 +4:exp:0:hex:"57da1c2704219ed59abfdf04743a9a93c87a63d471818de0f1564b2db6421562":hex:"ddc3c1aa73fb6de92bb4db138e26f3c2e0543ab4f5924871":hex:"4b60a47b7e90f622fa0bf803e1":hex:"0ae8c012ff39753510df3ee80707e4e2":hex:"daa8256d4753fdf9cfef876295badaba89b45cc497f54d220ec2c6fb687753bca4580adc6aa2f296" + +CCM encrypt and tag NIST VADT AES-256 #18 (P=24, N=13, A=17, T=16) +depends_on:0 +4:exp:0:hex:"9267ebc99ccf648b146cba3c251187e24a9947d806ceb0ced6894211641a1e0d":hex:"967daf12f16f166b7b5038f83a1cf0b980f5abf4c7746f2a":hex:"9b7298950280e8762ecdc9bbe4":hex:"5824689453bc406bf891b85e4576e38fe8":hex:"7cfe2a7a54306eb8d8a63d3d1ae86794f9a2c22198b2cb4f10ca926f1a430c08c12e23db3d913e93" + +CCM encrypt and tag NIST VADT AES-256 #19 (P=24, N=13, A=18, T=16) +depends_on:0 +4:exp:0:hex:"7a855e1690ee638de01db43b37401dcd569c1ae03dc73dd0a917d0cadb5abc29":hex:"33ae68ebb8010c6b3da6b9cb29fe9f8bd09b59ec39f4ce4b":hex:"8f160a873a1166c8b32bccbba7":hex:"72674aca7eba2fc0eeafbd143c2c4d8aa6c8":hex:"b22afdf4f12c43ec23e01ac1215a3f5286059211207e957057e9a9203da74387a9468f8af5e27547" + +CCM encrypt and tag NIST VADT AES-256 #20 (P=24, N=13, A=19, T=16) +depends_on:0 +4:exp:0:hex:"0ebdc6ddb4c502725dd6ee8da95d56a0d1044b4694d6ba8475a4434f23a8474f":hex:"c7360282c85484a5a33ab1c68dd70873ab4e74ffd4a62cd5":hex:"fb717a8c82114477253acc14f6":hex:"41e9d65632f74f449a6842d5e6c4a86ef83791":hex:"2e961b3a2fa1609a4e6fd04bff6ac5e306ae2638706f997b42be2e2ba05c54b619850db5c9d684fe" + +CCM encrypt and tag NIST VADT AES-256 #21 (P=24, N=13, A=20, T=16) +depends_on:0 +4:exp:0:hex:"2ff64bbec197a63315c2f328dcb4837d0cdc21a5d6f89ff1d97cb51195330cd8":hex:"4a17522da707b4b2587a0ae367a2cd2831bb593a18ef442a":hex:"a235f8ee3de9896b71910ac02c":hex:"2b411bea57b51d10a4d2fb17ef0f204aa53cf112":hex:"1bf122798bd8ee8e73391d589bd046a294d1615794e69cb9e6f3ba30143acbc3a1c1c6ec74333107" + +CCM encrypt and tag NIST VADT AES-256 #22 (P=24, N=13, A=21, T=16) +depends_on:0 +4:exp:0:hex:"24e9f08a9a007f9976919e10dc432002e2e078a339677f00105c72ed35633a3f":hex:"d3416a81b4246eb0bf8119a72a886bbc0ac9449c69f71d2f":hex:"15977424eeec0ec7f647e6c798":hex:"2d838eb51a4bc69a001a18adf2084a680f02a3c5fc":hex:"e001a8fae390dc5d672cdd18f86a1f728158ec83a002050def9af5679edbcbb7db20ab6af30698db" + +CCM encrypt and tag NIST VADT AES-256 #23 (P=24, N=13, A=22, T=16) +depends_on:0 +4:exp:0:hex:"0ec1b22b8df05dc92135d2dfbefed8ea81458f5ea1b801e8a218faf6cbdf1a79":hex:"2f59d94d4ab8eeb84c2a6fefb7fb0a3ac059c1e1a65ae34a":hex:"97ebcb8575bb58260208d5c227":hex:"a2f6337f86dd00d1a58448851e95d8c9bace4a5c8710":hex:"7ca0b1dbe34b0391e524b868b0af08b3e096917664d6aa2cabc1f9d0132394149c9062b74b82f04b" + +CCM encrypt and tag NIST VADT AES-256 #24 (P=24, N=13, A=23, T=16) +depends_on:0 +4:exp:0:hex:"0875020959ed969cfb38636d1d5aabce9658b00171a7614ea9e5395331c7659c":hex:"065ef9eeafbe077c1c7049f43eb0d8999708e8609f214d5c":hex:"451101250ec6f26652249d59dc":hex:"7cc9c51b69f98a06391ab32742fb6365e15106c811fe8a":hex:"990065322a438e136860f7b019807e9feff52a642bf3d44a9163fa7a867f04cab6f52dc250070f31" + +CCM encrypt and tag NIST VADT AES-256 #25 (P=24, N=13, A=24, T=16) +depends_on:0 +4:exp:0:hex:"ef4c1d2314e671f666cc6667660f1438a293208c7cc29b412d81277f0a635c91":hex:"c99c3e79125b6fd95e737326a842424eb6c6ecea4c0475c4":hex:"50b23b052922366c25dd40e348":hex:"cd0522ebe1fed82465277d1c10ae9316a98b4469be63b180":hex:"76df4be4ec8373864399acda11294b220b9f7c3a7d2b3660b25764e40ac6a171e7e6bab4fdee4288" + +CCM encrypt and tag NIST VADT AES-256 #26 (P=24, N=13, A=25, T=16) +depends_on:0 +4:exp:0:hex:"8544808e8fbf8c3a5e1d4ca751d4b603af9fe119eabc6923205815e0e748b7e7":hex:"617d54fc6a23601c79e3984f93bfc2d151fde420863206b3":hex:"b44a58724596b4d8dea827c1a0":hex:"f5b2c88f5232c37273b1e66aa31cfa7201e33c21d60054d025":hex:"57b3414db48982c6567265e1e0173bf38fdfaffe4461fbebc1411af83237c0f9eb0bfe8ed914da66" + +CCM encrypt and tag NIST VADT AES-256 #27 (P=24, N=13, A=26, T=16) +depends_on:0 +4:exp:0:hex:"e19eaddd9f1574447e7e6525f7fd67e3b42807e44fbb60e75d8c3e98abc18361":hex:"b3b0de10b7c0996662f1b064e04e528b7d85ca1166985d33":hex:"a8c459ce0223358826fb1ec0f0":hex:"ef88f4393d6c1e7b7be55a12144209ee051bb779e440432721ef":hex:"d63e6082c95c6c5ff2bc0771321a4f883ef61cff7b99e0ea8a20a1abe7c842ebc08c8c81a2743c81" + +CCM encrypt and tag NIST VADT AES-256 #28 (P=24, N=13, A=27, T=16) +depends_on:0 +4:exp:0:hex:"9498f02e50487cfbda1ce6459e241233bd4c4cb10281dcb51915dbc7fb6545c0":hex:"0d16cc69caa9f19b88b05e151b3d26accd018ca4a5786a80":hex:"e3bd4bc3a60cddd26c20aa8636":hex:"70cfcb828d483216b46c3cd22e2f9ee879e9e3059b566179b6e16c":hex:"f1c4bedb8d6f91676881daa37656a7e6402f472735b04a0f1f8332f4236437737438e7aa1b5100c7" + +CCM encrypt and tag NIST VADT AES-256 #29 (P=24, N=13, A=28, T=16) +depends_on:0 +4:exp:0:hex:"3ac7d5bc4698c021e49a685cd71057e09821633957d1d59c3c30cbc3f2d1dbf8":hex:"89198d3acc39b950f0d411119c478c60b2422ffe7e26e00b":hex:"54c8ff5459702aac058bb3be04":hex:"ecbd7091732e49c0f4bda2e63235ea43bbf8c8730f955f9c049dd1ec":hex:"7717b8e4447afcea1eeebf3e39ffdab2f52828e7931ef27e475acd27900478f09fec1f479ab3a7c8" + +CCM encrypt and tag NIST VADT AES-256 #30 (P=24, N=13, A=29, T=16) +depends_on:0 +4:exp:0:hex:"948882c3667caa81c9b900996e3d591e6fcb3d08333eeb29911e9c6338710c17":hex:"8b9130b0c3c15366831bbb19f377e3209a8dbf7619cd09bd":hex:"43b0aca2f0a9030f90559fa6d3":hex:"a516ca8405e5c8854e667921b5c5e1968bdd052915b55ac9984b7eefb3":hex:"4646b2acdeb11174171da23999cd54e297daa32bbc13d30512e57c576b315f48c11877178389aaa0" + +CCM encrypt and tag NIST VADT AES-256 #31 (P=24, N=13, A=30, T=16) +depends_on:0 +4:exp:0:hex:"3bf52cc5ee86b9a0190f390a5c0366a560b557000dbe5115fd9ee11630a62769":hex:"094b538110495e938b08cf748a6bcf3e0c80ff9c66570237":hex:"f9fbd02f28ecc929d369182752":hex:"ebf0b3e3199a5c3773c761c725c7600add5f9d8321c9f8e5e5fd1c7a5d2f":hex:"4d8b53016fc8bc9677184c0fa15bbd3d671b9366d82ecb67f8562eadcdcbcdbad1299bea1523f5d2" + +CCM encrypt and tag NIST VADT AES-256 #32 (P=24, N=13, A=31, T=16) +depends_on:0 +4:exp:0:hex:"e45bb1730d0d539aab3805350ac986540de9f0f6c239ee70395c291397b70309":hex:"bc8b3bc48c7a88c9fafde258b6ccaa9d4f0d018703d63871":hex:"d5c7824af715bb7822b6b340fe":hex:"860f4a09ad8b3d345c2aa18ffb803f0bc3b734a4d047a1437701a5e3d95288":hex:"95f083ad6bbaee6ab540fe023858f8baf25e333fd3e89c00e678a392d228b210dc5c991905dacf3f" + +CCM encrypt and tag NIST VADT AES-256 #33 (P=24, N=13, A=32, T=16) +depends_on:0 +4:exp:0:hex:"2e6e34070caf1b8820ed39edfa83459abe1c15a1827f1c39f7ac316c4c27910f":hex:"771a7baa9cf83aa253349f6475d5e74dba4525307b022ba7":hex:"c49ccef869bb86d21932cb443b":hex:"d37e35d7cdccd9824a1ae4c787819735e4af798a3beb49d4705336d6496853ad":hex:"eebac2475004970071dfa2cfb855c4e78b1add8dcbccfc0bd6b14027324b657a56263df148665393" + +CCM auth decrypt tag NIST DVPT AES-128 #1 (P=0, N=7, A=0, T=4) +depends_on:0 +5:exp:0:hex:"4ae701103c63deca5b5a3939d7d05992":hex:"02209f55":hex:"5a8aa485c316e9":hex:"":int:4:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #2 (P=0, N=7, A=0, T=4) +depends_on:0 +5:exp:0:hex:"4ae701103c63deca5b5a3939d7d05992":hex:"9a04c241":hex:"3796cf51b87266":hex:"":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #3 (P=0, N=7, A=0, T=16) +depends_on:0 +5:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3":hex:"75d582db43ce9b13ab4b6f7f14341330":hex:"5a8aa485c316e9":hex:"":int:16:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #4 (P=0, N=7, A=0, T=16) +depends_on:0 +5:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3":hex:"3a65e03af37b81d05acc7ec1bc39deb0":hex:"3796cf51b87266":hex:"":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #5 (P=0, N=13, A=0, T=4) +depends_on:0 +5:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3":hex:"90156f3f":hex:"5a8aa485c316e9403aff859fbb":hex:"":int:4:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #6 (P=0, N=13, A=0, T=4) +depends_on:0 +5:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3":hex:"88909016":hex:"a16a2e741f1cd9717285b6d882":hex:"":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #7 (P=0, N=13, A=0, T=16) +depends_on:0 +5:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd":hex:"fb04dc5a44c6bb000f2440f5154364b4":hex:"5a8aa485c316e9403aff859fbb":hex:"":int:16:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #8 (P=0, N=13, A=0, T=16) +depends_on:0 +5:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd":hex:"5447075bf42a59b91f08064738b015ab":hex:"a16a2e741f1cd9717285b6d882":hex:"":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #9 (P=24, N=7, A=0, T=4) +depends_on:0 +5:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd":hex:"a90e8ea44085ced791b2fdb7fd44b5cf0bd7d27718029bb703e1fa6b":hex:"5a8aa485c316e9":hex:"":int:4:int:0:hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22" + +CCM auth decrypt tag NIST DVPT AES-128 #10 (P=24, N=7, A=0, T=4) +depends_on:0 +5:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd":hex:"50aafe0578c115c4a8e126ff7b3ccb64dce8ccaa8ceda69f23e5d81c":hex:"31f8fa25827d48":hex:"":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #11 (P=24, N=7, A=0, T=16) +depends_on:0 +5:exp:0:hex:"197afb02ffbd8f699dacae87094d5243":hex:"24ab9eeb0e5508cae80074f1070ee188a637171860881f1f2d9a3fbc210595b7b8b1b41523111a8e":hex:"5a8aa485c316e9":hex:"":int:16:int:0:hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22" + +CCM auth decrypt tag NIST DVPT AES-128 #12 (P=24, N=7, A=0, T=16) +depends_on:0 +5:exp:0:hex:"197afb02ffbd8f699dacae87094d5243":hex:"7ebfda6fa5da1dbffd82dc29b875798fbcef8ba0084fbd2463af747cc88a001fa94e060290f209c4":hex:"31f8fa25827d48":hex:"":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #13 (P=24, N=13, A=0, T=4) +depends_on:0 +5:exp:0:hex:"197afb02ffbd8f699dacae87094d5243":hex:"4a550134f94455979ec4bf89ad2bd80d25a77ae94e456134a3e138b9":hex:"5a8aa485c316e9403aff859fbb":hex:"":int:4:int:0:hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697" + +CCM auth decrypt tag NIST DVPT AES-128 #14 (P=24, N=13, A=0, T=4) +depends_on:0 +5:exp:0:hex:"197afb02ffbd8f699dacae87094d5243":hex:"118ec53dd1bfbe52d5b9fe5dfebecf2ee674ec983eada654091a5ae9":hex:"49004912fdd7269279b1f06a89":hex:"":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #15 (P=24, N=13, A=0, T=16) +depends_on:0 +5:exp:0:hex:"90929a4b0ac65b350ad1591611fe4829":hex:"4bfe4e35784f0a65b545477e5e2f4bae0e1e6fa717eaf2cb6a9a970b9beb2ac1bd4fd62168f8378a":hex:"5a8aa485c316e9403aff859fbb":hex:"":int:16:int:0:hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697" + +CCM auth decrypt tag NIST DVPT AES-128 #16 (P=24, N=13, A=0, T=16) +depends_on:0 +5:exp:0:hex:"90929a4b0ac65b350ad1591611fe4829":hex:"0c56a503aa2c12e87450d45a7b714db980fd348f327c0065a65666144994bad0c8195bcb4ade1337":hex:"49004912fdd7269279b1f06a89":hex:"":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #17 (P=0, N=7, A=32, T=4) +depends_on:0 +5:exp:0:hex:"90929a4b0ac65b350ad1591611fe4829":hex:"782e4318":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":int:4:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #18 (P=0, N=7, A=32, T=4) +depends_on:0 +5:exp:0:hex:"90929a4b0ac65b350ad1591611fe4829":hex:"a04f270a":hex:"a265480ca88d5f":hex:"a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #19 (P=0, N=7, A=32, T=16) +depends_on:0 +5:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b":hex:"41b476013f45e4a781f253a6f3b1e530":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":int:16:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #20 (P=0, N=7, A=32, T=16) +depends_on:0 +5:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b":hex:"f9f018fcd125822616083fffebc4c8e6":hex:"a265480ca88d5f":hex:"a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #21 (P=0, N=13, A=32, T=4) +depends_on:0 +5:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b":hex:"9f69f24f":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":int:4:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #22 (P=0, N=13, A=32, T=4) +depends_on:0 +5:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b":hex:"e17afaa4":hex:"8739b4bea1a099fe547499cbc6":hex:"f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #23 (P=0, N=13, A=32, T=16) +depends_on:0 +5:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c7571":hex:"1859ac36a40a6b28b34266253627797a":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":int:16:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #24 (P=0, N=13, A=32, T=16) +depends_on:0 +5:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c7571":hex:"edf8b46eb69ac0044116019dec183072":hex:"8739b4bea1a099fe547499cbc6":hex:"f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #25 (P=24, N=7, A=32, T=4) +depends_on:0 +5:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c7571":hex:"6be31860ca271ef448de8f8d8b39346daf4b81d7e92d65b338f125fa":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":int:4:int:0:hex:"a265480ca88d5f536db0dc6abc40faf0d05be7a966977768" + +CCM auth decrypt tag NIST DVPT AES-128 #26 (P=24, N=7, A=32, T=4) +depends_on:0 +5:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c7571":hex:"4cc57a9927a6bc401441870d3193bf89ebd163f5c01501c728a66b69":hex:"fdd2d6f503c915":hex:"5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #27 (P=24, N=7, A=32, T=16) +depends_on:0 +5:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728c":hex:"b351ab96b2e45515254558d5212673ee6c776d42dbca3b512cf3a20b7fd7c49e6e79bef475c2906f":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":int:16:int:0:hex:"a265480ca88d5f536db0dc6abc40faf0d05be7a966977768" + +CCM auth decrypt tag NIST DVPT AES-128 #28 (P=24, N=7, A=32, T=16) +depends_on:0 +5:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728c":hex:"df1a5285caa41b4bb47f6e5ceceba4e82721828d68427a3081d18ca149d6766bfaccec88f194eb5b":hex:"fdd2d6f503c915":hex:"5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #29 (P=24, N=13, A=32, T=4) +depends_on:0 +5:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728c":hex:"934f893824e880f743d196b22d1f340a52608155087bd28ac25e5329":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":int:4:int:0:hex:"8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5" + +CCM auth decrypt tag NIST DVPT AES-128 #30 (P=24, N=13, A=32, T=4) +depends_on:0 +5:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728c":hex:"f43ba9d834ad85dfab3f1c0c27c3441fe4e411a38a261a6559b3b3ee":hex:"0812757ad0cc4d17c4cfe7a642":hex:"ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-128 #31 (P=24, N=13, A=32, T=16) +depends_on:0 +5:exp:0:hex:"26511fb51fcfa75cb4b44da75a6e5a0e":hex:"50038b5fdd364ee747b70d00bd36840ece4ea19998123375c0a458bfcafa3b2609afe0f825cbf503":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":int:16:int:0:hex:"8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5" + +CCM auth decrypt tag NIST DVPT AES-128 #32 (P=24, N=13, A=32, T=16) +depends_on:0 +5:exp:0:hex:"26511fb51fcfa75cb4b44da75a6e5a0e":hex:"78ed8ff6b5a1255d0fbd0a719a9c27b059ff5f83d0c4962c390042ba8bb5f6798dab01c5afad7306":hex:"0812757ad0cc4d17c4cfe7a642":hex:"ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #1 (P=0, N=7, A=0, T=4) +depends_on:0 +5:exp:0:hex:"c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c":hex:"9d4b7f3b":hex:"5a8aa485c316e9":hex:"":int:4:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #2 (P=0, N=7, A=0, T=4) +depends_on:0 +5:exp:0:hex:"c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c":hex:"80745de9":hex:"3796cf51b87266":hex:"":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #3 (P=0, N=7, A=0, T=16) +depends_on:0 +5:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65":hex:"17223038fa99d53681ca1beabe78d1b4":hex:"5a8aa485c316e9":hex:"":int:16:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #4 (P=0, N=7, A=0, T=16) +depends_on:0 +5:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65":hex:"d0e1eeef4d2a264536bb1c2c1bde7c35":hex:"3796cf51b87266":hex:"":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #5 (P=0, N=13, A=0, T=4) +depends_on:0 +5:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65":hex:"fe69ed84":hex:"5a8aa485c316e9403aff859fbb":hex:"":int:4:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #6 (P=0, N=13, A=0, T=4) +depends_on:0 +5:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65":hex:"db7ffc82":hex:"a16a2e741f1cd9717285b6d882":hex:"":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #7 (P=0, N=13, A=0, T=16) +depends_on:0 +5:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa":hex:"0c66a8e547ed4f8c2c9a9a1eb5d455b9":hex:"5a8aa485c316e9403aff859fbb":hex:"":int:16:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #8 (P=0, N=13, A=0, T=16) +depends_on:0 +5:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa":hex:"38757b3a61a4dc97ca3ab88bf1240695":hex:"a16a2e741f1cd9717285b6d882":hex:"":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #9 (P=24, N=7, A=0, T=4) +depends_on:0 +5:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa":hex:"411986d04d6463100bff03f7d0bde7ea2c3488784378138cddc93a54":hex:"5a8aa485c316e9":hex:"":int:4:int:0:hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22" + +CCM auth decrypt tag NIST DVPT AES-192 #10 (P=24, N=7, A=0, T=4) +depends_on:0 +5:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa":hex:"32b649ab56162e55d4148a1292d6a225a988eb1308298273b6889036":hex:"31f8fa25827d48":hex:"":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #11 (P=24, N=7, A=0, T=16) +depends_on:0 +5:exp:0:hex:"197afb02ffbd8f699dacae87094d524324576b99844f75e1":hex:"cba4b4aeb85f0492fd8d905c4a6d8233139833373ef188a8c5a5ebecf7ac8607fe412189e83d9d20":hex:"5a8aa485c316e9":hex:"":int:16:int:0:hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22" + +CCM auth decrypt tag NIST DVPT AES-192 #12 (P=24, N=7, A=0, T=16) +depends_on:0 +5:exp:0:hex:"197afb02ffbd8f699dacae87094d524324576b99844f75e1":hex:"ca62713728b5c9d652504b0ae8fd4fee5d297ee6a8d19cb6e699f15f14d34dcaf9ba8ed4b877c97d":hex:"31f8fa25827d48":hex:"":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #13 (P=24, N=13, A=0, T=4) +depends_on:0 +5:exp:0:hex:"197afb02ffbd8f699dacae87094d524324576b99844f75e1":hex:"042653c674ef2a90f7fb11d30848e530ae59478f1051633a34fad277":hex:"5a8aa485c316e9403aff859fbb":hex:"":int:4:int:0:hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697" + +CCM auth decrypt tag NIST DVPT AES-192 #14 (P=24, N=13, A=0, T=4) +depends_on:0 +5:exp:0:hex:"197afb02ffbd8f699dacae87094d524324576b99844f75e1":hex:"1902d9769a7ba3d3268e1257395c8c2e5f98eef295dcbfa5a35df775":hex:"49004912fdd7269279b1f06a89":hex:"":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #15 (P=24, N=13, A=0, T=16) +depends_on:0 +5:exp:0:hex:"90929a4b0ac65b350ad1591611fe48297e03956f6083e451":hex:"a5b7d8cca2069908d1ed88e6a9fe2c9bede3131dad54671ea7ade30a07d185692ab0ebdf4c78cf7a":hex:"5a8aa485c316e9403aff859fbb":hex:"":int:16:int:0:hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697" + +CCM auth decrypt tag NIST DVPT AES-192 #16 (P=24, N=13, A=0, T=16) +depends_on:0 +5:exp:0:hex:"90929a4b0ac65b350ad1591611fe48297e03956f6083e451":hex:"9a98617fb97a0dfe466be692272dcdaec1c5443a3b51312ef042c86363cc05afb98c66e16be8a445":hex:"49004912fdd7269279b1f06a89":hex:"":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #17 (P=0, N=7, A=32, T=4) +depends_on:0 +5:exp:0:hex:"90929a4b0ac65b350ad1591611fe48297e03956f6083e451":hex:"1d089a5f":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":int:4:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #18 (P=0, N=7, A=32, T=4) +depends_on:0 +5:exp:0:hex:"90929a4b0ac65b350ad1591611fe48297e03956f6083e451":hex:"2f46022a":hex:"a265480ca88d5f":hex:"a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #19 (P=0, N=7, A=32, T=16) +depends_on:0 +5:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2":hex:"5280a2137fee3deefcfe9b63a1199fb3":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":int:16:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #20 (P=0, N=7, A=32, T=16) +depends_on:0 +5:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2":hex:"d40a7318c5f2d82f838c0beeefe0d598":hex:"a265480ca88d5f":hex:"a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #21 (P=0, N=13, A=32, T=4) +depends_on:0 +5:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2":hex:"5e0eaebd":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":int:4:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #22 (P=0, N=13, A=32, T=4) +depends_on:0 +5:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2":hex:"71b7fc33":hex:"8739b4bea1a099fe547499cbc6":hex:"f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #23 (P=0, N=13, A=32, T=16) +depends_on:0 +5:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4":hex:"d07ccf9fdc3d33aa94cda3d230da707c":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":int:16:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #24 (P=0, N=13, A=32, T=16) +depends_on:0 +5:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4":hex:"65fe32b649dc328c9f531584897e85b3":hex:"8739b4bea1a099fe547499cbc6":hex:"f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #25 (P=24, N=7, A=32, T=4) +depends_on:0 +5:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4":hex:"9f6ca4af9b159148c889a6584d1183ea26e2614874b0504575dea8d1":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":int:4:int:0:hex:"a265480ca88d5f536db0dc6abc40faf0d05be7a966977768" + +CCM auth decrypt tag NIST DVPT AES-192 #26 (P=24, N=7, A=32, T=4) +depends_on:0 +5:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4":hex:"84d8212e9cfc2121252baa3b065b1edcf50497b9594db1ebd7965825":hex:"fdd2d6f503c915":hex:"5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #27 (P=24, N=7, A=32, T=16) +depends_on:0 +5:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d":hex:"6aab64c4787599d8f213446beadb16e08dba60e97f56dbd14d1d980d6fe0fb44b421992662b97975":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":int:16:int:0:hex:"a265480ca88d5f536db0dc6abc40faf0d05be7a966977768" + +CCM auth decrypt tag NIST DVPT AES-192 #28 (P=24, N=7, A=32, T=16) +depends_on:0 +5:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d":hex:"4980b2ee49b1aaf393175f5ab9bae95ec7904557dfa206603c51d36c826f01384100886198a7f6a3":hex:"fdd2d6f503c915":hex:"5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #29 (P=24, N=13, A=32, T=4) +depends_on:0 +5:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d":hex:"16e543d0e20615ff0df15acd9927ddfe40668a54bb854cccc25e9fce":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":int:4:int:0:hex:"8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5" + +CCM auth decrypt tag NIST DVPT AES-192 #30 (P=24, N=13, A=32, T=4) +depends_on:0 +5:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d":hex:"df35b109caf690656ae278bbd8f8bba687a2ce11b105dae98ecedb3e":hex:"0812757ad0cc4d17c4cfe7a642":hex:"ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-192 #31 (P=24, N=13, A=32, T=16) +depends_on:0 +5:exp:0:hex:"26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886":hex:"c5b0b2ef17498c5570eb335df4588032958ba3d69bf6f3178464a6f7fa2b76744e8e8d95691cecb8":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":int:16:int:0:hex:"8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5" + +CCM auth decrypt tag NIST DVPT AES-192 #32 (P=24, N=13, A=32, T=16) +depends_on:0 +5:exp:0:hex:"26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886":hex:"d1f0518929f4ae2f0543de2a7dfe4bb0110bb3057e524a1c06bd6dc2e6bcc3436cffb969ae900388":hex:"0812757ad0cc4d17c4cfe7a642":hex:"ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #1 (P=0, N=7, A=0, T=4) +depends_on:0 +5:exp:0:hex:"eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6":hex:"469c90bb":hex:"a544218dadd3c1":hex:"":int:4:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #2 (P=0, N=7, A=0, T=4) +depends_on:0 +5:exp:0:hex:"eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6":hex:"46a908ed":hex:"d3d5424e20fbec":hex:"":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #3 (P=0, N=7, A=0, T=16) +depends_on:0 +5:exp:0:hex:"e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8":hex:"8207eb14d33855a52acceed17dbcbf6e":hex:"a544218dadd3c1":hex:"":int:16:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #4 (P=0, N=7, A=0, T=16) +depends_on:0 +5:exp:0:hex:"e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8":hex:"60f8e127cb4d30db6df0622158cd931d":hex:"d3d5424e20fbec":hex:"":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #5 (P=0, N=13, A=0, T=4) +depends_on:0 +5:exp:0:hex:"e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8":hex:"8a19a133":hex:"a544218dadd3c10583db49cf39":hex:"":int:4:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #6 (P=0, N=13, A=0, T=4) +depends_on:0 +5:exp:0:hex:"e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8":hex:"2e317f1b":hex:"3c0e2815d37d844f7ac240ba9d":hex:"":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #7 (P=0, N=13, A=0, T=16) +depends_on:0 +5:exp:0:hex:"af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569":hex:"97e1a8dd4259ccd2e431e057b0397fcf":hex:"a544218dadd3c10583db49cf39":hex:"":int:16:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #8 (P=0, N=13, A=0, T=16) +depends_on:0 +5:exp:0:hex:"af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569":hex:"5a9596c511ea6a8671adefc4f2157d8b":hex:"3c0e2815d37d844f7ac240ba9d":hex:"":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #9 (P=24, N=7, A=0, T=4) +depends_on:0 +5:exp:0:hex:"af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569":hex:"64a1341679972dc5869fcf69b19d5c5ea50aa0b5e985f5b722aa8d59":hex:"a544218dadd3c1":hex:"":int:4:int:0:hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c98" + +CCM auth decrypt tag NIST DVPT AES-256 #10 (P=24, N=7, A=0, T=4) +depends_on:0 +5:exp:0:hex:"af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569":hex:"c5b7f802bffc498c1626e3774f1d9f94045dfd8e1a10a20277d00a75":hex:"bfcda8b5a2d0d2":hex:"":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #11 (P=24, N=7, A=0, T=16) +depends_on:0 +5:exp:0:hex:"f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453":hex:"bc51c3925a960e7732533e4ef3a4f69ee6826de952bcb0fd374f3bb6db8377ebfc79674858c4f305":hex:"a544218dadd3c1":hex:"":int:16:int:0:hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c98" + +CCM auth decrypt tag NIST DVPT AES-256 #12 (P=24, N=7, A=0, T=16) +depends_on:0 +5:exp:0:hex:"f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453":hex:"afa1fa8e8a70e26b02161150556d604101fdf423f332c3363275f2a4907d51b734fe7238cebbd48f":hex:"bfcda8b5a2d0d2":hex:"":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #13 (P=24, N=13, A=0, T=4) +depends_on:0 +5:exp:0:hex:"f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453":hex:"63e00d30e4b08fd2a1cc8d70fab327b2368e77a93be4f4123d14fb3f":hex:"a544218dadd3c10583db49cf39":hex:"":int:4:int:0:hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e" + +CCM auth decrypt tag NIST DVPT AES-256 #14 (P=24, N=13, A=0, T=4) +depends_on:0 +5:exp:0:hex:"f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453":hex:"bb5425b3869b76856ec58e39886fb6f6f2ac13fe44cb132d8d0c0099":hex:"894dcaa61008eb8fb052c60d41":hex:"":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #15 (P=24, N=13, A=0, T=16) +depends_on:0 +5:exp:0:hex:"1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4":hex:"f0050ad16392021a3f40207bed3521fb1e9f808f49830c423a578d179902f912f9ea1afbce1120b3":hex:"a544218dadd3c10583db49cf39":hex:"":int:16:int:0:hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e" + +CCM auth decrypt tag NIST DVPT AES-256 #16 (P=24, N=13, A=0, T=16) +depends_on:0 +5:exp:0:hex:"1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4":hex:"c408190d0fbf5034f83b24a8ed9657331a7ce141de4fae769084607b83bd06e6442eac8dacf583cc":hex:"894dcaa61008eb8fb052c60d41":hex:"":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #17 (P=0, N=7, A=32, T=4) +depends_on:0 +5:exp:0:hex:"1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4":hex:"92d00fbe":hex:"a544218dadd3c1":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab":int:4:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #18 (P=0, N=7, A=32, T=4) +depends_on:0 +5:exp:0:hex:"1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4":hex:"9143e5c4":hex:"78c46e3249ca28":hex:"232e957c65ffa11988e830d4617d500f1c4a35c1221f396c41ab214f074ca2dc":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #19 (P=0, N=7, A=32, T=16) +depends_on:0 +5:exp:0:hex:"a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088":hex:"93af11a08379eb37a16aa2837f09d69d":hex:"a544218dadd3c1":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab":int:16:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #20 (P=0, N=7, A=32, T=16) +depends_on:0 +5:exp:0:hex:"a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088":hex:"d19b0c14ec686a7961ca7c386d125a65":hex:"78c46e3249ca28":hex:"232e957c65ffa11988e830d4617d500f1c4a35c1221f396c41ab214f074ca2dc":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #21 (P=0, N=13, A=32, T=4) +depends_on:0 +5:exp:0:hex:"a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088":hex:"866d4227":hex:"a544218dadd3c10583db49cf39":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907":int:4:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #22 (P=0, N=13, A=32, T=4) +depends_on:0 +5:exp:0:hex:"a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088":hex:"94cb1127":hex:"e8de970f6ee8e80ede933581b5":hex:"89f8b068d34f56bc49d839d8e47b347e6dae737b903b278632447e6c0485d26a":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #23 (P=0, N=13, A=32, T=16) +depends_on:0 +5:exp:0:hex:"8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a":hex:"867b0d87cf6e0f718200a97b4f6d5ad5":hex:"a544218dadd3c10583db49cf39":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907":int:16:int:0:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #24 (P=0, N=13, A=32, T=16) +depends_on:0 +5:exp:0:hex:"8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a":hex:"677a040d46ee3f2b7838273bdad14f16":hex:"e8de970f6ee8e80ede933581b5":hex:"89f8b068d34f56bc49d839d8e47b347e6dae737b903b278632447e6c0485d26a":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #25 (P=24, N=7, A=32, T=4) +depends_on:0 +5:exp:0:hex:"8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a":hex:"c2fe12658139f5d0dd22cadf2e901695b579302a72fc56083ebc7720":hex:"a544218dadd3c1":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab":int:4:int:0:hex:"78c46e3249ca28e1ef0531d80fd37c124d9aecb7be6668e3" + +CCM auth decrypt tag NIST DVPT AES-256 #26 (P=24, N=7, A=32, T=4) +depends_on:0 +5:exp:0:hex:"8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a":hex:"94748ba81229e53c38583a8564b23ebbafc6f6efdf4c2a81c44db2c9":hex:"6ba004fd176791":hex:"5a053b2a1bb87e85d56527bfcdcd3ecafb991bb10e4c862bb0751c700a29f54b":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #27 (P=24, N=7, A=32, T=16) +depends_on:0 +5:exp:0:hex:"705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe":hex:"3341168eb8c48468c414347fb08f71d2086f7c2d1bd581ce1ac68bd42f5ec7fa7e068cc0ecd79c2a":hex:"a544218dadd3c1":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab":int:16:int:0:hex:"78c46e3249ca28e1ef0531d80fd37c124d9aecb7be6668e3" + +CCM auth decrypt tag NIST DVPT AES-256 #28 (P=24, N=7, A=32, T=16) +depends_on:0 +5:exp:0:hex:"705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe":hex:"d543acda712b898cbb27b8f598b2e4438ce587a836e2785147c3338a2400809e739b63ba8227d2f9":hex:"6ba004fd176791":hex:"5a053b2a1bb87e85d56527bfcdcd3ecafb991bb10e4c862bb0751c700a29f54b":int:16:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #29 (P=24, N=13, A=32, T=4) +depends_on:0 +5:exp:0:hex:"705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe":hex:"c0ea400b599561e7905b99262b4565d5c3dc49fad84d7c69ef891339":hex:"a544218dadd3c10583db49cf39":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907":int:4:int:0:hex:"e8de970f6ee8e80ede933581b5bcf4d837e2b72baa8b00c3" + +CCM auth decrypt tag NIST DVPT AES-256 #30 (P=24, N=13, A=32, T=4) +depends_on:0 +5:exp:0:hex:"705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe":hex:"60871e03ea0eb968536c99f926ea24ef43d41272ad9fb7f63d488623":hex:"8fa501c5dd9ac9b868144c9fa5":hex:"5bb40e3bb72b4509324a7edc852f72535f1f6283156e63f6959ffaf39dcde800":int:4:exp:4:hex:"" + +CCM auth decrypt tag NIST DVPT AES-256 #31 (P=24, N=13, A=32, T=16) +depends_on:0 +5:exp:0:hex:"314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e":hex:"8d34cdca37ce77be68f65baf3382e31efa693e63f914a781367f30f2eaad8c063ca50795acd90203":hex:"a544218dadd3c10583db49cf39":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907":int:16:int:0:hex:"e8de970f6ee8e80ede933581b5bcf4d837e2b72baa8b00c3" + +CCM auth decrypt tag NIST DVPT AES-256 #32 (P=24, N=13, A=32, T=16) +depends_on:0 +5:exp:0:hex:"314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e":hex:"516c0095cc3d85fd55e48da17c592e0c7014b9daafb82bdc4b41096dfdbe9cc1ab610f8f3e038d16":hex:"8fa501c5dd9ac9b868144c9fa5":hex:"5bb40e3bb72b4509324a7edc852f72535f1f6283156e63f6959ffaf39dcde800":int:16:exp:4:hex:"" + +CCM-Camellia encrypt and tag RFC 5528 #1 +depends_on:1 +4:exp:1:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E":hex:"00000003020100A0A1A2A3A4A5":hex:"0001020304050607":hex:"BA737185E719310492F38A5F1251DA55FAFBC949848A0DFCAECE746B3DB9AD" + +CCM-Camellia encrypt and tag RFC 5528 #2 +depends_on:1 +4:exp:1:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F":hex:"00000004030201A0A1A2A3A4A5":hex:"0001020304050607":hex:"5D2564BF8EAFE1D99526EC016D1BF0424CFBD2CD62848F3360B2295DF24283E8" + +CCM-Camellia encrypt and tag RFC 5528 #3 +depends_on:1 +4:exp:1:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20":hex:"00000005040302A0A1A2A3A4A5":hex:"0001020304050607":hex:"81F663D6C7787817F9203608B982AD15DC2BBD87D756F79204F551D6682F23AA46" + +CCM-Camellia encrypt and tag RFC 5528 #4 +depends_on:1 +4:exp:1:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0C0D0E0F101112131415161718191A1B1C1D1E":hex:"00000006050403A0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"CAEF1E827211B08F7BD90F08C77288C070A4A08B3A933A63E497A0" + +CCM-Camellia encrypt and tag RFC 5528 #5 +depends_on:1 +4:exp:1:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0C0D0E0F101112131415161718191A1B1C1D1E1F":hex:"00000007060504A0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"2AD3BAD94FC52E92BE438E827C1023B96A8A77258FA17BA7F331DB09" + +CCM-Camellia encrypt and tag RFC 5528 #6 +depends_on:1 +4:exp:1:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0C0D0E0F101112131415161718191A1B1C1D1E1F20":hex:"00000008070605A0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"FEA5480BA53FA8D3C34422AACE4DE67FFA3BB73BABAB36A1EE4FE0FE28" + +CCM-Camellia encrypt and tag RFC 5528 #7 +depends_on:1 +4:exp:1:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E":hex:"00000009080706A0A1A2A3A4A5":hex:"0001020304050607":hex:"54532026E54C119A8D36D9EC6E1ED97416C8708C4B5C2CACAFA3BCCF7A4EBF9573" + +CCM-Camellia encrypt and tag RFC 5528 #8 +depends_on:1 +4:exp:1:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F":hex:"0000000A090807A0A1A2A3A4A5":hex:"0001020304050607":hex:"8AD19B001A87D148F4D92BEF34525CCCE3A63C6512A6F5757388E4913EF14701F441" + +CCM-Camellia encrypt and tag RFC 5528 #9 +depends_on:1 +4:exp:1:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20":hex:"0000000B0A0908A0A1A2A3A4A5":hex:"0001020304050607":hex:"5DB08D62407E6E31D60F9CA2C60474219AC0BE50C0D4A5778794D6E230CD25C9FEBF87" + +CCM-Camellia encrypt and tag RFC 5528 #10 +depends_on:1 +4:exp:1:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0C0D0E0F101112131415161718191A1B1C1D1E":hex:"0000000C0B0A09A0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"DB118CCEC1B8761C877CD8963A67D6F3BBBC5CD09299EB11F312F23237" + +CCM-Camellia encrypt and tag RFC 5528 #11 +depends_on:1 +4:exp:1:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0C0D0E0F101112131415161718191A1B1C1D1E1F":hex:"0000000D0C0B0AA0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"7CC83D8DC49103525B483DC5CA7EA9AB812B7056079DAFFADA16CCCF2C4E" + +CCM-Camellia encrypt and tag RFC 5528 #12 +depends_on:1 +4:exp:1:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0C0D0E0F101112131415161718191A1B1C1D1E1F20":hex:"0000000E0D0C0BA0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"2CD35B8820D23E7AA351B0E92FC79367238B2CC748CBB94C2947793D64AF75" + +CCM-Camellia encrypt and tag RFC 5528 #13 +depends_on:1 +4:exp:1:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"C6B5F3E6CA2311AEF7472B203E735EA561ADB17D56C5A3":hex:"00A970110E1927B160B6A31C1C":hex:"6B7F464507FAE496":hex:"A435D727348DDD22907F7EB8F5FDBB4D939DA6524DB4F64558C02D25B127EE" + +CCM-Camellia encrypt and tag RFC 5528 #14 +depends_on:1 +4:exp:1:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"01F6CE6764C574483BB02E6BBF1E0ABD26A22572B4D80EE7":hex:"0083CD8CE0CB42B160B6A31C1C":hex:"986605B43DF15DE7":hex:"8AE052508FBECA932E346F05E0DC0DFBCF939EAFFA3E587C867D6E1C48703806" + +CCM-Camellia encrypt and tag RFC 5528 #15 +depends_on:1 +4:exp:1:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"CDF1D8406FC2E9014953897005FBFB8BA57276F92404608E08":hex:"005F54950B18F2B160B6A31C1C":hex:"48F2E7E1A7671A51":hex:"08B67EE21C8BF26E473E408599E9C0836D6AF0BB18DF55466CA80878A790476DE5" + +CCM-Camellia encrypt and tag RFC 5528 #16 +depends_on:1 +4:exp:1:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"B005DCFA0B59181426A961685A993D8C43185B":hex:"00EC600863319AB160B6A31C1C":hex:"DE97DF3B8CBD6D8E5030DA4C":hex:"63B78B4967B19EDBB733CD1114F64EB226089368C354828D950CC5" + +CCM-Camellia encrypt and tag RFC 5528 #17 +depends_on:1 +4:exp:1:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"2E20211298105F129D5ED95B93F72D30B2FACCD7":hex:"0060CFF1A31EA1B160B6A31C1C":hex:"A5EE93E457DF05466E782DCF":hex:"0BC6BBE2A8B909F4629EE6DC148DA44410E18AF43147383276F66A9F" + +CCM-Camellia encrypt and tag RFC 5528 #18 +depends_on:1 +4:exp:1:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"2645941E75632D3491AF0FC0C9876C3BE4AA7468C9":hex:"000F85CD995C97B160B6A31C1C":hex:"24AA1BF9A5CD876182A25074":hex:"222AD632FA31D6AF970C345F7E77CA3BD0DC25B340A1A3D31F8D4B44B7" + +CCM-Camellia encrypt and tag RFC 5528 #19 +depends_on:1 +4:exp:1:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"070135A6437C9DB120CD61D8F6C39C3EA125FD95A0D23D":hex:"00C29B2CAAC4CDB160B6A31C1C":hex:"691946B9CA07BE87":hex:"05B8E1B9C49CFD56CF130AA6251DC2ECC06CCC508FE697A0066D57C84BEC182768" + +CCM-Camellia encrypt and tag RFC 5528 #20 +depends_on:1 +4:exp:1:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"C8C0880E6C636E20093DD6594217D2E18877DB264E71A5CC":hex:"002C6B7595EE62B160B6A31C1C":hex:"D0C54ECB84627DC4":hex:"54CEB968DEE23611575EC003DFAA1CD48849BDF5AE2EDB6B7FA775B150ED4383C5A9" + +CCM-Camellia encrypt and tag RFC 5528 #21 +depends_on:1 +4:exp:1:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"F75DAA0710C4E64297794DC2B7D2A20757B1AA4E448002FFAB":hex:"00C53CD4C2AA24B160B6A31C1C":hex:"E285E0E4808CDA3D":hex:"B1404546BF667210CA28E309B39BD6CA7E9FC8285FE698D43CD20A02E0BDCAED2010D3" + +CCM-Camellia encrypt and tag RFC 5528 #22 +depends_on:1 +4:exp:1:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"C238822FAC5F98FF929405B0AD127A4E41854E":hex:"00BEE9267FBADCB160B6A31C1C":hex:"6CAEF9941141570D7C813405":hex:"94C8959C11569A297831A721005857AB61B87A2DEA0936B6EB5F625F5D" + +CCM-Camellia encrypt and tag RFC 5528 #23 +depends_on:1 +4:exp:1:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"4DBF3E774AD245E5D5891F9D1C32A0AE022C85D7":hex:"00DFA8B1245007B160B6A31C1C":hex:"36A52CF16B19A2037AB7011E":hex:"5869E3AAD2447C74E0FC05F9A4EA74577F4DE8CA8924764296AD04119CE7" + +CCM-Camellia encrypt and tag RFC 5528 #24 +depends_on:1 +4:exp:1:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"9DC9EDAE2FF5DF8636E8C6DE0EED55F7867E33337D":hex:"003B8FD8D3A937B160B6A31C1C":hex:"A4D499F78419728C19178B0C":hex:"4B198156393B0F7796086AAFB454F8C3F034CCA966945F1FCEA7E11BEE6A2F" + diff --git a/third_party/mbedtls/test/test_suite_chacha20.c b/third_party/mbedtls/test/test_suite_chacha20.c new file mode 100644 index 000000000..6ff7ad13b --- /dev/null +++ b/third_party/mbedtls/test/test_suite_chacha20.c @@ -0,0 +1,413 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_chacha20.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_chacha20.function + * Test suite data : suites/test_suite_chacha20.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_CHACHA20_C) +#include "third_party/mbedtls/chacha20.h" +void test_chacha20_crypt( data_t *key_str, + data_t *nonce_str, + int counter, + data_t *src_str, + data_t *expected_output_str ) +{ + unsigned char output[375]; + mbedtls_chacha20_context ctx; + + memset( output, 0x00, sizeof( output ) ); + + TEST_ASSERT( src_str->len == expected_output_str->len ); + TEST_ASSERT( key_str->len == 32U ); + TEST_ASSERT( nonce_str->len == 12U ); + + /* + * Test the integrated API + */ + TEST_ASSERT( mbedtls_chacha20_crypt( key_str->x, nonce_str->x, counter, src_str->len, src_str->x, output ) == 0 ); + + ASSERT_COMPARE( output, expected_output_str->len, + expected_output_str->x, expected_output_str->len ); + + /* + * Test the streaming API + */ + mbedtls_chacha20_init( &ctx ); + + TEST_ASSERT( mbedtls_chacha20_setkey( &ctx, key_str->x ) == 0 ); + + TEST_ASSERT( mbedtls_chacha20_starts( &ctx, nonce_str->x, counter ) == 0 ); + + memset( output, 0x00, sizeof( output ) ); + TEST_ASSERT( mbedtls_chacha20_update( &ctx, src_str->len, src_str->x, output ) == 0 ); + + ASSERT_COMPARE( output, expected_output_str->len, + expected_output_str->x, expected_output_str->len ); + + /* + * Test the streaming API again, piecewise + */ + + /* Don't free/init the context nor set the key again, + * in order to test that starts() does the right thing. */ + TEST_ASSERT( mbedtls_chacha20_starts( &ctx, nonce_str->x, counter ) == 0 ); + + memset( output, 0x00, sizeof( output ) ); + TEST_ASSERT( mbedtls_chacha20_update( &ctx, 1, src_str->x, output ) == 0 ); + TEST_ASSERT( mbedtls_chacha20_update( &ctx, src_str->len - 1, + src_str->x + 1, output + 1 ) == 0 ); + + ASSERT_COMPARE( output, expected_output_str->len, + expected_output_str->x, expected_output_str->len ); + + mbedtls_chacha20_free( &ctx ); +exit: + ; +} + +void test_chacha20_crypt_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + + test_chacha20_crypt( &data0, &data2, *( (int *) params[4] ), &data5, &data7 ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_chacha20_bad_params() +{ + unsigned char key[32]; + unsigned char nonce[12]; + unsigned char src[1]; + unsigned char dst[1]; + uint32_t counter = 0; + size_t len = sizeof( src ); + mbedtls_chacha20_context ctx; + + TEST_INVALID_PARAM( mbedtls_chacha20_init( NULL ) ); + TEST_VALID_PARAM( mbedtls_chacha20_free( NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA, + mbedtls_chacha20_setkey( NULL, key ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA, + mbedtls_chacha20_setkey( &ctx, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA, + mbedtls_chacha20_starts( NULL, nonce, counter ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA, + mbedtls_chacha20_starts( &ctx, NULL, counter ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA, + mbedtls_chacha20_update( NULL, 0, src, dst ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA, + mbedtls_chacha20_update( &ctx, len, NULL, dst ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA, + mbedtls_chacha20_update( &ctx, len, src, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA, + mbedtls_chacha20_crypt( NULL, nonce, counter, 0, src, dst ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA, + mbedtls_chacha20_crypt( key, NULL, counter, 0, src, dst ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA, + mbedtls_chacha20_crypt( key, nonce, counter, len, NULL, dst ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA, + mbedtls_chacha20_crypt( key, nonce, counter, len, src, NULL ) ); + +exit: + return; + +} + +void test_chacha20_bad_params_wrapper( void ** params ) +{ + (void)params; + + test_chacha20_bad_params( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#if defined(MBEDTLS_SELF_TEST) +void test_chacha20_self_test() +{ + TEST_ASSERT( mbedtls_chacha20_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_chacha20_self_test_wrapper( void ** params ) +{ + (void)params; + + test_chacha20_self_test( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_CHACHA20_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_CHACHA20_C) + +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_CHACHA20_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_CHACHA20_C) + test_chacha20_crypt_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_CHACHA20_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_chacha20_bad_params_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_CHACHA20_C) && defined(MBEDTLS_SELF_TEST) + test_chacha20_self_test_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_chacha20.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_chacha20.datax b/third_party/mbedtls/test/test_suite_chacha20.datax new file mode 100644 index 000000000..ca203892c --- /dev/null +++ b/third_party/mbedtls/test/test_suite_chacha20.datax @@ -0,0 +1,30 @@ +ChaCha20 RFC 7539 Example and Test Vector (Encrypt) +0:hex:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f":hex:"000000000000004a00000000":int:1:hex:"4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e":hex:"6e2e359a2568f98041ba0728dd0d6981e97e7aec1d4360c20a27afccfd9fae0bf91b65c5524733ab8f593dabcd62b3571639d624e65152ab8f530c359f0861d807ca0dbf500d6a6156a38e088a22b65e52bc514d16ccf806818ce91ab77937365af90bbf74a35be6b40b8eedf2785e42874d" + +ChaCha20 RFC 7539 Example and Test Vector (Decrypt) +0:hex:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f":hex:"000000000000004a00000000":int:1:hex:"6e2e359a2568f98041ba0728dd0d6981e97e7aec1d4360c20a27afccfd9fae0bf91b65c5524733ab8f593dabcd62b3571639d624e65152ab8f530c359f0861d807ca0dbf500d6a6156a38e088a22b65e52bc514d16ccf806818ce91ab77937365af90bbf74a35be6b40b8eedf2785e42874d":hex:"4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e" + +ChaCha20 RFC 7539 Test Vector #1 (Encrypt) +0:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"000000000000000000000000":int:0:hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":hex:"76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc8b770dc7da41597c5157488d7724e03fb8d84a376a43b8f41518a11cc387b669b2ee6586" + +ChaCha20 RFC 7539 Test Vector #1 (Decrypt) +0:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"000000000000000000000000":int:0:hex:"76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc8b770dc7da41597c5157488d7724e03fb8d84a376a43b8f41518a11cc387b669b2ee6586":hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + +ChaCha20 RFC 7539 Test Vector #2 (Encrypt) +0:hex:"0000000000000000000000000000000000000000000000000000000000000001":hex:"000000000000000000000002":int:1:hex:"416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f":hex:"a3fbf07df3fa2fde4f376ca23e82737041605d9f4f4f57bd8cff2c1d4b7955ec2a97948bd3722915c8f3d337f7d370050e9e96d647b7c39f56e031ca5eb6250d4042e02785ececfa4b4bb5e8ead0440e20b6e8db09d881a7c6132f420e52795042bdfa7773d8a9051447b3291ce1411c680465552aa6c405b7764d5e87bea85ad00f8449ed8f72d0d662ab052691ca66424bc86d2df80ea41f43abf937d3259dc4b2d0dfb48a6c9139ddd7f76966e928e635553ba76c5c879d7b35d49eb2e62b0871cdac638939e25e8a1e0ef9d5280fa8ca328b351c3c765989cbcf3daa8b6ccc3aaf9f3979c92b3720fc88dc95ed84a1be059c6499b9fda236e7e818b04b0bc39c1e876b193bfe5569753f88128cc08aaa9b63d1a16f80ef2554d7189c411f5869ca52c5b83fa36ff216b9c1d30062bebcfd2dc5bce0911934fda79a86f6e698ced759c3ff9b6477338f3da4f9cd8514ea9982ccafb341b2384dd902f3d1ab7ac61dd29c6f21ba5b862f3730e37cfdc4fd806c22f221" + +ChaCha20 RFC 7539 Test Vector #2 (Decrypt) +0:hex:"0000000000000000000000000000000000000000000000000000000000000001":hex:"000000000000000000000002":int:1:hex:"a3fbf07df3fa2fde4f376ca23e82737041605d9f4f4f57bd8cff2c1d4b7955ec2a97948bd3722915c8f3d337f7d370050e9e96d647b7c39f56e031ca5eb6250d4042e02785ececfa4b4bb5e8ead0440e20b6e8db09d881a7c6132f420e52795042bdfa7773d8a9051447b3291ce1411c680465552aa6c405b7764d5e87bea85ad00f8449ed8f72d0d662ab052691ca66424bc86d2df80ea41f43abf937d3259dc4b2d0dfb48a6c9139ddd7f76966e928e635553ba76c5c879d7b35d49eb2e62b0871cdac638939e25e8a1e0ef9d5280fa8ca328b351c3c765989cbcf3daa8b6ccc3aaf9f3979c92b3720fc88dc95ed84a1be059c6499b9fda236e7e818b04b0bc39c1e876b193bfe5569753f88128cc08aaa9b63d1a16f80ef2554d7189c411f5869ca52c5b83fa36ff216b9c1d30062bebcfd2dc5bce0911934fda79a86f6e698ced759c3ff9b6477338f3da4f9cd8514ea9982ccafb341b2384dd902f3d1ab7ac61dd29c6f21ba5b862f3730e37cfdc4fd806c22f221":hex:"416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f" + +ChaCha20 RFC 7539 Test Vector #3 (Encrypt) +0:hex:"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0":hex:"000000000000000000000002":int:42:hex:"2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e":hex:"62e6347f95ed87a45ffae7426f27a1df5fb69110044c0d73118effa95b01e5cf166d3df2d721caf9b21e5fb14c616871fd84c54f9d65b283196c7fe4f60553ebf39c6402c42234e32a356b3e764312a61a5532055716ead6962568f87d3f3f7704c6a8d1bcd1bf4d50d6154b6da731b187b58dfd728afa36757a797ac188d1" + +ChaCha20 RFC 7539 Test Vector #3 (Decrypt) +0:hex:"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0":hex:"000000000000000000000002":int:42:hex:"62e6347f95ed87a45ffae7426f27a1df5fb69110044c0d73118effa95b01e5cf166d3df2d721caf9b21e5fb14c616871fd84c54f9d65b283196c7fe4f60553ebf39c6402c42234e32a356b3e764312a61a5532055716ead6962568f87d3f3f7704c6a8d1bcd1bf4d50d6154b6da731b187b58dfd728afa36757a797ac188d1":hex:"2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e" + +ChaCha20 Paremeter Validation +1 + +ChaCha20 Selftest +2 + diff --git a/third_party/mbedtls/test/test_suite_chachapoly.c b/third_party/mbedtls/test/test_suite_chachapoly.c new file mode 100644 index 000000000..e20dcf427 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_chachapoly.c @@ -0,0 +1,619 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_chachapoly.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_chachapoly.function + * Test suite data : suites/test_suite_chachapoly.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_CHACHAPOLY_C) +#include "third_party/mbedtls/chachapoly.h" +void test_mbedtls_chachapoly_enc( data_t *key_str, data_t *nonce_str, data_t *aad_str, data_t *input_str, data_t *output_str, data_t *mac_str ) +{ + unsigned char output[265]; + unsigned char mac[16]; /* size set by the standard */ + mbedtls_chachapoly_context ctx; + + TEST_ASSERT( key_str->len == 32 ); + TEST_ASSERT( nonce_str->len == 12 ); + TEST_ASSERT( mac_str->len == 16 ); + + mbedtls_chachapoly_init( &ctx ); + + TEST_ASSERT( mbedtls_chachapoly_setkey( &ctx, key_str->x ) == 0 ); + + TEST_ASSERT( mbedtls_chachapoly_encrypt_and_tag( &ctx, + input_str->len, nonce_str->x, + aad_str->x, aad_str->len, + input_str->x, output, mac ) == 0 ); + + TEST_ASSERT( memcmp( output_str->x, output, output_str->len ) == 0 ); + TEST_ASSERT( memcmp( mac_str->x, mac, 16U ) == 0 ); + +exit: + mbedtls_chachapoly_free( &ctx ); +} + +void test_mbedtls_chachapoly_enc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + + test_mbedtls_chachapoly_enc( &data0, &data2, &data4, &data6, &data8, &data10 ); +} +void test_mbedtls_chachapoly_dec( data_t *key_str, data_t *nonce_str, data_t *aad_str, data_t *input_str, data_t *output_str, data_t *mac_str, int ret_exp ) +{ + unsigned char output[265]; + int ret; + mbedtls_chachapoly_context ctx; + + TEST_ASSERT( key_str->len == 32 ); + TEST_ASSERT( nonce_str->len == 12 ); + TEST_ASSERT( mac_str->len == 16 ); + + mbedtls_chachapoly_init( &ctx ); + + TEST_ASSERT( mbedtls_chachapoly_setkey( &ctx, key_str->x ) == 0 ); + + ret = mbedtls_chachapoly_auth_decrypt( &ctx, + input_str->len, nonce_str->x, + aad_str->x, aad_str->len, + mac_str->x, input_str->x, output ); + + TEST_ASSERT( ret == ret_exp ); + if( ret_exp == 0 ) + { + TEST_ASSERT( memcmp( output_str->x, output, output_str->len ) == 0 ); + } + +exit: + mbedtls_chachapoly_free( &ctx ); +} + +void test_mbedtls_chachapoly_dec_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + + test_mbedtls_chachapoly_dec( &data0, &data2, &data4, &data6, &data8, &data10, *( (int *) params[12] ) ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_chachapoly_bad_params() +{ + unsigned char key[32]; + unsigned char nonce[12]; + unsigned char aad[1]; + unsigned char input[1]; + unsigned char output[1]; + unsigned char mac[16]; + size_t input_len = sizeof( input ); + size_t aad_len = sizeof( aad ); + mbedtls_chachapoly_context ctx; + + memset( key, 0x00, sizeof( key ) ); + memset( nonce, 0x00, sizeof( nonce ) ); + memset( aad, 0x00, sizeof( aad ) ); + memset( input, 0x00, sizeof( input ) ); + memset( output, 0x00, sizeof( output ) ); + memset( mac, 0x00, sizeof( mac ) ); + + TEST_INVALID_PARAM( mbedtls_chachapoly_init( NULL ) ); + TEST_VALID_PARAM( mbedtls_chachapoly_free( NULL ) ); + + /* setkey */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_setkey( NULL, key ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_setkey( &ctx, NULL ) ); + + /* encrypt_and_tag */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_encrypt_and_tag( NULL, + 0, nonce, + aad, 0, + input, output, mac ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_encrypt_and_tag( &ctx, + 0, NULL, + aad, 0, + input, output, mac ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_encrypt_and_tag( &ctx, + 0, nonce, + NULL, aad_len, + input, output, mac ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_encrypt_and_tag( &ctx, + input_len, nonce, + aad, 0, + NULL, output, mac ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_encrypt_and_tag( &ctx, + input_len, nonce, + aad, 0, + input, NULL, mac ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_encrypt_and_tag( &ctx, + 0, nonce, + aad, 0, + input, output, NULL ) ); + + /* auth_decrypt */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_auth_decrypt( NULL, + 0, nonce, + aad, 0, + mac, input, output ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_auth_decrypt( &ctx, + 0, NULL, + aad, 0, + mac, input, output ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_auth_decrypt( &ctx, + 0, nonce, + NULL, aad_len, + mac, input, output ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_auth_decrypt( &ctx, + 0, nonce, + aad, 0, + NULL, input, output ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_auth_decrypt( &ctx, + input_len, nonce, + aad, 0, + mac, NULL, output ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_auth_decrypt( &ctx, + input_len, nonce, + aad, 0, + mac, input, NULL ) ); + + /* starts */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_starts( NULL, nonce, + MBEDTLS_CHACHAPOLY_ENCRYPT ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_starts( &ctx, NULL, + MBEDTLS_CHACHAPOLY_ENCRYPT ) ); + + /* update_aad */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_update_aad( NULL, aad, + aad_len ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_update_aad( &ctx, NULL, + aad_len ) ); + + /* update */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_update( NULL, input_len, + input, output ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_update( &ctx, input_len, + NULL, output ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_update( &ctx, input_len, + input, NULL ) ); + + /* finish */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_finish( NULL, mac ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_chachapoly_finish( &ctx, NULL ) ); + +exit: + return; +} + +void test_chachapoly_bad_params_wrapper( void ** params ) +{ + (void)params; + + test_chachapoly_bad_params( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_chachapoly_state() +{ + unsigned char key[32]; + unsigned char nonce[12]; + unsigned char aad[1]; + unsigned char input[1]; + unsigned char output[1]; + unsigned char mac[16]; + size_t input_len = sizeof( input ); + size_t aad_len = sizeof( aad ); + mbedtls_chachapoly_context ctx; + + memset( key, 0x00, sizeof( key ) ); + memset( nonce, 0x00, sizeof( nonce ) ); + memset( aad, 0x00, sizeof( aad ) ); + memset( input, 0x00, sizeof( input ) ); + memset( output, 0x00, sizeof( output ) ); + memset( mac, 0x00, sizeof( mac ) ); + + /* Initial state: finish, update, update_aad forbidden */ + mbedtls_chachapoly_init( &ctx ); + + TEST_ASSERT( mbedtls_chachapoly_finish( &ctx, mac ) + == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); + TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, output ) + == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); + TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) + == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); + + /* Still initial state: finish, update, update_aad forbidden */ + TEST_ASSERT( mbedtls_chachapoly_setkey( &ctx, key ) + == 0 ); + + TEST_ASSERT( mbedtls_chachapoly_finish( &ctx, mac ) + == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); + TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, output ) + == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); + TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) + == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); + + /* Starts -> finish OK */ + TEST_ASSERT( mbedtls_chachapoly_starts( &ctx, nonce, MBEDTLS_CHACHAPOLY_ENCRYPT ) + == 0 ); + TEST_ASSERT( mbedtls_chachapoly_finish( &ctx, mac ) + == 0 ); + + /* After finish: update, update_aad forbidden */ + TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, output ) + == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); + TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) + == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); + + /* Starts -> update* OK */ + TEST_ASSERT( mbedtls_chachapoly_starts( &ctx, nonce, MBEDTLS_CHACHAPOLY_ENCRYPT ) + == 0 ); + TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, output ) + == 0 ); + TEST_ASSERT( mbedtls_chachapoly_update( &ctx, input_len, input, output ) + == 0 ); + + /* After update: update_aad forbidden */ + TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) + == MBEDTLS_ERR_CHACHAPOLY_BAD_STATE ); + + /* Starts -> update_aad* -> finish OK */ + TEST_ASSERT( mbedtls_chachapoly_starts( &ctx, nonce, MBEDTLS_CHACHAPOLY_ENCRYPT ) + == 0 ); + TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) + == 0 ); + TEST_ASSERT( mbedtls_chachapoly_update_aad( &ctx, aad, aad_len ) + == 0 ); + TEST_ASSERT( mbedtls_chachapoly_finish( &ctx, mac ) + == 0 ); + +exit: + mbedtls_chachapoly_free( &ctx ); +} + +void test_chachapoly_state_wrapper( void ** params ) +{ + (void)params; + + test_chachapoly_state( ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_chachapoly_selftest() +{ + TEST_ASSERT( mbedtls_chachapoly_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_chachapoly_selftest_wrapper( void ** params ) +{ + (void)params; + + test_chachapoly_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_CHACHAPOLY_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_CHACHAPOLY_C) + + case 0: + { + *out_value = MBEDTLS_ERR_CHACHAPOLY_AUTH_FAILED; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_CHACHAPOLY_C) + + case 0: + { +#if defined(MBEDTLS_SELF_TEST) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_CHACHAPOLY_C) + test_mbedtls_chachapoly_enc_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_CHACHAPOLY_C) + test_mbedtls_chachapoly_dec_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_CHACHAPOLY_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_chachapoly_bad_params_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_CHACHAPOLY_C) + test_chachapoly_state_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_CHACHAPOLY_C) && defined(MBEDTLS_SELF_TEST) + test_chachapoly_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_chachapoly.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_chachapoly.datax b/third_party/mbedtls/test/test_suite_chachapoly.datax new file mode 100644 index 000000000..e8164fc98 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_chachapoly.datax @@ -0,0 +1,28 @@ +ChaCha20-Poly1305 RFC 7539 Example and Test Vector (Encrypt) +0:hex:"808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f":hex:"070000004041424344454647":hex:"50515253c0c1c2c3c4c5c6c7":hex:"4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e":hex:"d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116":hex:"1ae10b594f09e26a7e902ecbd0600691" + +ChaCha20-Poly1305 RFC 7539 Example and Test Vector (Decrypt) +1:hex:"808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f":hex:"070000004041424344454647":hex:"50515253c0c1c2c3c4c5c6c7":hex:"d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116":hex:"4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e":hex:"1ae10b594f09e26a7e902ecbd0600691":int:0 + +ChaCha20-Poly1305 RFC 7539 Example and Test Vector (Decrypt, not authentic) +1:hex:"808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f":hex:"070000004041424344454647":hex:"50515253c0c1c2c3c4c5c6c7":hex:"d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b6116":hex:"4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e":hex:"1ae10b594f09e26a7e902ecbd0600690":exp:0 + +ChaCha20-Poly1305 RFC 7539 Test Vector #1 (Encrypt) +0:hex:"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0":hex:"000000000102030405060708":hex:"f33388860000000000004e91":hex:"496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d":hex:"64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709b":hex:"eead9d67890cbb22392336fea1851f38" + +ChaCha20-Poly1305 RFC 7539 Test Vector #1 (Decrypt) +1:hex:"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0":hex:"000000000102030405060708":hex:"f33388860000000000004e91":hex:"64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709b":hex:"496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d":hex:"eead9d67890cbb22392336fea1851f38":int:0 + +ChaCha20-Poly1305 RFC 7539 Test Vector #1 (Decrypt, not authentic) +1:hex:"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0":hex:"000000000102030405060708":hex:"f33388860000000000004e91":hex:"64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709b":hex:"496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d":hex:"fead9d67890cbb22392336fea1851f38":exp:0 + +ChaCha20-Poly1305 State Flow +3 + +ChaCha20-Poly1305 Parameter Validation +2 + +ChaCha20-Poly1305 Selftest +depends_on:0 +4 + diff --git a/third_party/mbedtls/test/test_suite_cipher.aes.c b/third_party/mbedtls/test/test_suite_cipher.aes.c new file mode 100644 index 000000000..1a0f0a2c8 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.aes.c @@ -0,0 +1,2238 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_cipher.aes.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_cipher.function + * Test suite data : suites/test_suite_cipher.aes.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_CIPHER_C) +#include "third_party/mbedtls/cipher.h" + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +#endif + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +#endif + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) +#define MBEDTLS_CIPHER_AUTH_CRYPT +#endif + +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +/* Helper for resetting key/direction + * + * The documentation doesn't explicitly say whether calling + * mbedtls_cipher_setkey() twice is allowed or not. This currently works with + * the default software implementation, but only by accident. It isn't + * guaranteed to work with new ciphers or with alternative implementations of + * individual ciphers, and it doesn't work with the PSA wrappers. So don't do + * it, and instead start with a fresh context. + */ +static int cipher_reset_key( mbedtls_cipher_context_t *ctx, int cipher_id, + int use_psa, size_t tag_len, const data_t *key, int direction ) +{ + mbedtls_cipher_free( ctx ); + mbedtls_cipher_init( ctx ); + +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; + (void) tag_len; +#else + if( use_psa == 1 ) + { + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( ctx, + mbedtls_cipher_info_from_type( cipher_id ), + tag_len ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + TEST_ASSERT( 0 == mbedtls_cipher_setup( ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + } + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( ctx, key->x, 8 * key->len, + direction ) ); + return( 1 ); + +exit: + return( 0 ); +} + +/* + * Check if a buffer is all-0 bytes: + * return 1 if it is, + * 0 if it isn't. + */ +int buffer_is_all_zero( const uint8_t *buf, size_t size ) +{ + for( size_t i = 0; i < size; i++ ) + if( buf[i] != 0 ) + return 0; + return 1; +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ + +void test_mbedtls_cipher_list( ) +{ + const int *cipher_type; + + for( cipher_type = mbedtls_cipher_list(); *cipher_type != 0; cipher_type++ ) + TEST_ASSERT( mbedtls_cipher_info_from_type( *cipher_type ) != NULL ); +exit: + ; +} + +void test_mbedtls_cipher_list_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_cipher_list( ); +} +void test_cipher_invalid_param_unconditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + mbedtls_cipher_context_t invalid_ctx; + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + mbedtls_cipher_init( &valid_ctx ); + mbedtls_cipher_setup( &valid_ctx, valid_info ); + mbedtls_cipher_init( &invalid_ctx ); + + /* mbedtls_cipher_setup() */ + TEST_ASSERT( mbedtls_cipher_setup( &valid_ctx, NULL ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_get_block_size() */ + TEST_ASSERT( mbedtls_cipher_get_block_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_ASSERT( mbedtls_cipher_get_cipher_mode( &invalid_ctx ) == + MBEDTLS_MODE_NONE ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_ASSERT( mbedtls_cipher_get_iv_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_type() */ + TEST_ASSERT( + mbedtls_cipher_get_type( &invalid_ctx ) == + MBEDTLS_CIPHER_NONE); + + /* mbedtls_cipher_get_name() */ + TEST_ASSERT( mbedtls_cipher_get_name( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_ASSERT( mbedtls_cipher_get_key_bitlen( &invalid_ctx ) == + MBEDTLS_KEY_LENGTH_NONE ); + + /* mbedtls_cipher_get_operation() */ + TEST_ASSERT( mbedtls_cipher_get_operation( &invalid_ctx ) == + MBEDTLS_OPERATION_NONE ); + + /* mbedtls_cipher_setkey() */ + TEST_ASSERT( + mbedtls_cipher_setkey( &invalid_ctx, + valid_buffer, + valid_bitlen, + valid_operation ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_set_iv() */ + TEST_ASSERT( + mbedtls_cipher_set_iv( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_reset() */ + TEST_ASSERT( mbedtls_cipher_reset( &invalid_ctx ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_ASSERT( + mbedtls_cipher_update_ad( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_ASSERT( mbedtls_cipher_set_padding_mode( &invalid_ctx, valid_mode ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif + + /* mbedtls_cipher_update() */ + TEST_ASSERT( + mbedtls_cipher_update( &invalid_ctx, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_finish() */ + TEST_ASSERT( + mbedtls_cipher_finish( &invalid_ctx, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_ASSERT( + mbedtls_cipher_write_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_check_tag() */ + TEST_ASSERT( + mbedtls_cipher_check_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +exit: + mbedtls_cipher_free( &invalid_ctx ); + mbedtls_cipher_free( &valid_ctx ); +} + +void test_cipher_invalid_param_unconditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_unconditional( ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_cipher_invalid_param_conditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_operation_t invalid_operation = 100; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + /* mbedtls_cipher_init() */ + TEST_VALID_PARAM( mbedtls_cipher_init( &valid_ctx ) ); + TEST_INVALID_PARAM( mbedtls_cipher_init( NULL ) ); + + /* mbedtls_cipher_setup() */ + TEST_VALID_PARAM( mbedtls_cipher_setup( &valid_ctx, valid_info ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setup( NULL, valid_info ) ); + + /* mbedtls_cipher_get_block_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_block_size( NULL ) ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_MODE_NONE, + mbedtls_cipher_get_cipher_mode( NULL ) ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_iv_size( NULL ) ); + + /* mbedtls_cipher_get_type() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_CIPHER_NONE, + mbedtls_cipher_get_type( NULL ) ); + + /* mbedtls_cipher_get_name() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_name( NULL ) ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_KEY_LENGTH_NONE, + mbedtls_cipher_get_key_bitlen( NULL ) ); + + /* mbedtls_cipher_get_operation() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_OPERATION_NONE, + mbedtls_cipher_get_operation( NULL ) ); + + /* mbedtls_cipher_setkey() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( NULL, + valid_buffer, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + NULL, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + valid_buffer, + valid_bitlen, + invalid_operation ) ); + + /* mbedtls_cipher_set_iv() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_reset() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_reset( NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_padding_mode( NULL, valid_mode ) ); +#endif + + /* mbedtls_cipher_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( NULL, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + NULL, valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, + NULL ) ); + + /* mbedtls_cipher_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( NULL, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + valid_buffer, + NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_check_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + + /* mbedtls_cipher_crypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) + /* mbedtls_cipher_auth_encrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); + + /* mbedtls_cipher_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); +#endif /* defined(MBEDTLS_CIPHER_MODE_AEAD) */ + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) + /* mbedtls_cipher_auth_encrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); + + /* mbedtls_cipher_auth_decrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); +#endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */ + + /* mbedtls_cipher_free() */ + TEST_VALID_PARAM( mbedtls_cipher_free( NULL ) ); +exit: + TEST_VALID_PARAM( mbedtls_cipher_free( &valid_ctx ) ); +} + +void test_cipher_invalid_param_conditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_conditional( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#if defined(MBEDTLS_AES_C) +void test_cipher_special_behaviours( ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + unsigned char input[32]; + unsigned char output[32]; +#if defined (MBEDTLS_CIPHER_MODE_CBC) + unsigned char iv[32]; +#endif + size_t olen = 0; + + mbedtls_cipher_init( &ctx ); + memset( input, 0, sizeof( input ) ); + memset( output, 0, sizeof( output ) ); +#if defined(MBEDTLS_CIPHER_MODE_CBC) + memset( iv, 0, sizeof( iv ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_CBC ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* IV too big */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, MBEDTLS_MAX_IV_LENGTH + 1 ) + == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + + /* IV too small */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, 0 ) + == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_cipher_free( &ctx ); + mbedtls_cipher_init( &ctx ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_ECB ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* Update ECB with partial block */ + TEST_ASSERT( mbedtls_cipher_update( &ctx, input, 1, output, &olen ) + == MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_cipher_special_behaviours_wrapper( void ** params ) +{ + (void)params; + + test_cipher_special_behaviours( ); +} +#endif /* MBEDTLS_AES_C */ +void test_enc_dec_buf( int cipher_id, char * cipher_string, int key_len, + int length_val, int pad_mode ) +{ + size_t length = length_val, outlen, total_len, i, block_size; + unsigned char key[64]; + unsigned char iv[16]; + unsigned char ad[13]; + unsigned char tag[16]; + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + + /* + * Prepare contexts + */ + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( key, 0x2a, sizeof( key ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( mbedtls_cipher_info_from_string( cipher_string ) == cipher_info ); + + /* Initialise enc and dec contexts */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + /* + * Do a few encode/decode cycles + */ + for( i = 0; i < 3; i++ ) + { + memset( iv , 0x00 + i, sizeof( iv ) ); + memset( ad, 0x10 + i, sizeof( ad ) ); + memset( inbuf, 0x20 + i, sizeof( inbuf ) ); + + memset( encbuf, 0, sizeof( encbuf ) ); + memset( decbuf, 0, sizeof( decbuf ) ); + memset( tag, 0, sizeof( tag ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, sizeof( iv ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, sizeof( iv ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, ad, sizeof( ad ) - i ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, ad, sizeof( ad ) - i ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, length, encbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_write_tag( &ctx_enc, tag, sizeof( tag ) ) ); +#endif + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len > length && + total_len <= length + block_size ) ); + + /* decode the previously encoded string */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, total_len, decbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_check_tag( &ctx_dec, tag, sizeof( tag ) ) ); +#endif + + /* check result */ + TEST_ASSERT( total_len == length ); + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + } + + /* + * Done + */ +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_wrapper( void ** params ) +{ + + test_enc_dec_buf( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_enc_fail( int cipher_id, int pad_mode, int key_len, int length_val, + int ret ) +{ + size_t length = length_val; + unsigned char key[32]; + unsigned char iv[16]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + + /* Initialise context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key, key_len, MBEDTLS_ENCRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, NULL, 0 ) ); +#endif + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, inbuf, length, encbuf, &outlen ) ); + TEST_ASSERT( ret == mbedtls_cipher_finish( &ctx, encbuf + outlen, &outlen ) ); + + /* done */ +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_enc_fail_wrapper( void ** params ) +{ + + test_enc_fail( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_dec_empty_buf( int cipher, + int expected_update_ret, + int expected_finish_ret ) +{ + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise context */ + cipher_info = mbedtls_cipher_info_from_type( cipher ); + TEST_ASSERT( NULL != cipher_info); + TEST_ASSERT( sizeof(key) * 8 >= cipher_info->key_bitlen ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, + key, cipher_info->key_bitlen, + MBEDTLS_DECRYPT ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); +#endif + + /* decode 0-byte string */ + TEST_ASSERT( expected_update_ret == + mbedtls_cipher_update( &ctx_dec, encbuf, 0, decbuf, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + if ( expected_finish_ret == 0 && + ( cipher_info->mode == MBEDTLS_MODE_CBC || + cipher_info->mode == MBEDTLS_MODE_ECB ) ) + { + /* Non-CBC and non-ECB ciphers are OK with decrypting empty buffers and + * return success, not MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED, when + * decrypting an empty buffer. + * On the other hand, CBC and ECB ciphers need a full block of input. + */ + expected_finish_ret = MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED; + } + + TEST_ASSERT( expected_finish_ret == mbedtls_cipher_finish( + &ctx_dec, decbuf + outlen, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + +exit: + mbedtls_cipher_free( &ctx_dec ); +} + +void test_dec_empty_buf_wrapper( void ** params ) +{ + + test_dec_empty_buf( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +void test_enc_dec_buf_multipart( int cipher_id, int key_len, int first_length_val, + int second_length_val, int pad_mode, + int first_encrypt_output_len, int second_encrypt_output_len, + int first_decrypt_output_len, int second_decrypt_output_len ) +{ + size_t first_length = first_length_val; + size_t second_length = second_length_val; + size_t length = first_length + second_length; + size_t block_size; + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + size_t totaloutlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise enc and dec contexts */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, NULL, 0 ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, first_length, encbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_encrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf + first_length, second_length, encbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_encrypt_output_len == outlen ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen > length && + totaloutlen <= length + block_size ) ); + + /* decode the previously encoded string */ + second_length = totaloutlen - first_length; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, first_length, decbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_decrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf + first_length, second_length, decbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_decrypt_output_len == outlen ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length ); + + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_multipart_wrapper( void ** params ) +{ + + test_enc_dec_buf_multipart( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ) ); +} +void test_decrypt_test_vec( int cipher_id, int pad_mode, data_t * key, + data_t * iv, data_t * cipher, + data_t * clear, data_t * ad, data_t * tag, + int finish_result, int tag_result ) +{ + unsigned char output[265]; + mbedtls_cipher_context_t ctx; + size_t outlen, total_len; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + +#if !defined(MBEDTLS_GCM_C) && !defined(MBEDTLS_CHACHAPOLY_C) + ((void) ad); + ((void) tag); +#endif + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, MBEDTLS_DECRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( pad_mode != -1 ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv->x, iv->len ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, ad->x, ad->len ) ); +#endif + + /* decode buffer and check tag->x */ + total_len = 0; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, cipher->x, cipher->len, output, &outlen ) ); + total_len += outlen; + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + total_len += outlen; +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( tag_result == mbedtls_cipher_check_tag( &ctx, tag->x, tag->len ) ); +#endif + + /* check plaintext only if everything went fine */ + if( 0 == finish_result && 0 == tag_result ) + { + TEST_ASSERT( total_len == clear->len ); + TEST_ASSERT( 0 == memcmp( output, clear->x, clear->len ) ); + } + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_decrypt_test_vec_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_decrypt_test_vec( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, &data10, &data12, *( (int *) params[14] ), *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +void test_auth_crypt_tv( int cipher_id, data_t * key, data_t * iv, + data_t * ad, data_t * cipher, data_t * tag, + char * result, data_t * clear, int use_psa ) +{ + /* + * Take an AEAD ciphertext + tag and perform a pair + * of AEAD decryption and AEAD encryption. Check that + * this results in the expected plaintext, and that + * decryption and encryption are inverse to one another. + * + * Do that twice: + * - once with legacy functions auth_decrypt/auth_encrypt + * - once with new functions auth_decrypt_ext/auth_encrypt_ext + * This allows testing both without duplicating test cases. + */ + + int ret; + int using_nist_kw, using_nist_kw_padding; + + mbedtls_cipher_context_t ctx; + size_t outlen; + + unsigned char *cipher_plus_tag = NULL; + size_t cipher_plus_tag_len; + unsigned char *decrypt_buf = NULL; + size_t decrypt_buf_len = 0; + unsigned char *encrypt_buf = NULL; + size_t encrypt_buf_len = 0; + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + unsigned char *tmp_tag = NULL; + unsigned char *tmp_cipher = NULL; + unsigned char *tag_buf = NULL; +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + + /* Null pointers are documented as valid for inputs of length 0. + * The test framework passes non-null pointers, so set them to NULL. + * key, cipher and tag can't be empty. */ + if( iv->len == 0 ) + iv->x = NULL; + if( ad->len == 0 ) + ad->x = NULL; + if( clear->len == 0 ) + clear->x = NULL; + + mbedtls_cipher_init( &ctx ); + + /* Initialize PSA Crypto */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_ASSERT( psa_crypto_init( ) ); +#else + (void) use_psa; +#endif + + /* + * Are we using NIST_KW? with padding? + */ + using_nist_kw_padding = cipher_id == MBEDTLS_CIPHER_AES_128_KWP || + cipher_id == MBEDTLS_CIPHER_AES_192_KWP || + cipher_id == MBEDTLS_CIPHER_AES_256_KWP; + using_nist_kw = cipher_id == MBEDTLS_CIPHER_AES_128_KW || + cipher_id == MBEDTLS_CIPHER_AES_192_KW || + cipher_id == MBEDTLS_CIPHER_AES_256_KW || + using_nist_kw_padding; + + /**************************************************************** + * * + * Part 1: non-deprecated API * + * * + ****************************************************************/ + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * prepare buffer for decryption + * (we need the tag appended to the ciphertext) + */ + cipher_plus_tag_len = cipher->len + tag->len; + ASSERT_ALLOC( cipher_plus_tag, cipher_plus_tag_len ); + memcpy( cipher_plus_tag, cipher->x, cipher->len ); + memcpy( cipher_plus_tag + cipher->len, tag->x, tag->len ); + + /* + * Compute length of output buffer according to the documentation + */ + if( using_nist_kw ) + decrypt_buf_len = cipher_plus_tag_len - 8; + else + decrypt_buf_len = cipher_plus_tag_len - tag->len; + + + /* + * Try decrypting to a buffer that's 1B too small + */ + if( decrypt_buf_len != 0 ) + { + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + } + + /* + * Authenticate and decrypt, and check result + */ + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len, &outlen, tag->len ); + + if( strcmp( result, "FAIL" ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, decrypt_buf_len ) ); + } + else + { + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + /* Free this, but keep cipher_plus_tag for deprecated function with PSA */ + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* + * Compute size of output buffer according to documentation + */ + if( using_nist_kw ) + { + encrypt_buf_len = clear->len + 8; + if( using_nist_kw_padding && encrypt_buf_len % 8 != 0 ) + encrypt_buf_len += 8 - encrypt_buf_len % 8; + } + else + { + encrypt_buf_len = clear->len + tag->len; + } + + /* + * Try encrypting with an output buffer that's 1B too small + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret != 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + + /* + * Encrypt and check the result + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len, &outlen, tag->len ); + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len + tag->len ); + TEST_ASSERT( memcmp( encrypt_buf, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( encrypt_buf + cipher->len, + tag->x, tag->len ) == 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + } + + /**************************************************************** + * * + * Part 2: deprecated API * + * * + ****************************************************************/ + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * Prepare pointers for decryption + */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + { + /* PSA requires that the tag immediately follows the ciphertext. + * Fortunately, we already have that from testing the new API. */ + tmp_cipher = cipher_plus_tag; + tmp_tag = tmp_cipher + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + tmp_cipher = cipher->x; + tmp_tag = tag->x; + } + + /* + * Authenticate and decrypt, and check result + */ + + ASSERT_ALLOC( decrypt_buf, cipher->len ); + outlen = 0; + ret = mbedtls_cipher_auth_decrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + tmp_cipher, cipher->len, decrypt_buf, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + /* NIST_KW with legacy API */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else if( strcmp( result, "FAIL" ) == 0 ) + { + /* unauthentic message */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, cipher->len ) ); + } + else + { + /* authentic message: is the plaintext correct? */ + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + mbedtls_free( cipher_plus_tag ); + cipher_plus_tag = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* prepare buffers for encryption */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa ) + { + ASSERT_ALLOC( cipher_plus_tag, cipher->len + tag->len ); + tmp_cipher = cipher_plus_tag; + tmp_tag = cipher_plus_tag + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + ASSERT_ALLOC( encrypt_buf, cipher->len ); + ASSERT_ALLOC( tag_buf, tag->len ); + tmp_cipher = encrypt_buf; + tmp_tag = tag_buf; + } + + /* + * Encrypt and check the result + */ + outlen = 0; + ret = mbedtls_cipher_auth_encrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + clear->x, clear->len, tmp_cipher, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len ); + if( cipher->len != 0 ) + TEST_ASSERT( memcmp( tmp_cipher, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( tmp_tag, tag->x, tag->len ) == 0 ); + } + } + +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +exit: + + mbedtls_cipher_free( &ctx ); + mbedtls_free( decrypt_buf ); + mbedtls_free( encrypt_buf ); + mbedtls_free( cipher_plus_tag ); +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + mbedtls_free( tag_buf ); +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_auth_crypt_tv_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_auth_crypt_tv( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, (char *) params[11], &data12, *( (int *) params[14] ) ); +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ +void test_test_vec_ecb( int cipher_id, int operation, data_t * key, + data_t * input, data_t * result, int finish_result + ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, input->x, + mbedtls_cipher_get_block_size( &ctx ), + output, &outlen ) ); + TEST_ASSERT( outlen == mbedtls_cipher_get_block_size( &ctx ) ); + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, + mbedtls_cipher_get_block_size( &ctx ) ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_test_vec_ecb_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_test_vec_ecb( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_test_vec_crypt( int cipher_id, int operation, data_t *key, + data_t *iv, data_t *input, data_t *result, + int finish_result, int use_psa ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; +#else + if( use_psa == 1 ) + { + PSA_ASSERT( psa_crypto_init( ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( &ctx, + mbedtls_cipher_info_from_type( cipher_id ), 0 ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + if( MBEDTLS_MODE_CBC == ctx.cipher_info->mode ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, MBEDTLS_PADDING_NONE ) ); + + TEST_ASSERT( finish_result == mbedtls_cipher_crypt( &ctx, iv->len ? iv->x : NULL, + iv->len, input->x, input->len, + output, &outlen ) ); + TEST_ASSERT( result->len == outlen ); + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, outlen ) ); + +exit: + mbedtls_cipher_free( &ctx ); +#if defined(MBEDTLS_USE_PSA_CRYPTO) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_test_vec_crypt_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_test_vec_crypt( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_set_padding( int cipher_id, int pad_mode, int ret ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + mbedtls_cipher_init( &ctx ); + + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + TEST_ASSERT( ret == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_set_padding_wrapper( void ** params ) +{ + + test_set_padding( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_check_padding( int pad_mode, data_t * input, int ret, int dlen_check + ) +{ + mbedtls_cipher_info_t cipher_info; + mbedtls_cipher_context_t ctx; + size_t dlen; + + /* build a fake context just for getting access to get_padding */ + mbedtls_cipher_init( &ctx ); + cipher_info.mode = MBEDTLS_MODE_CBC; + ctx.cipher_info = &cipher_info; + + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + + + TEST_ASSERT( ret == ctx.get_padding( input->x, input->len, &dlen ) ); + if( 0 == ret ) + TEST_ASSERT( dlen == (size_t) dlen_check ); +exit: + ; +} + +void test_check_padding_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_check_padding( *( (int *) params[0] ), &data1, *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#endif /* MBEDTLS_CIPHER_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_AES_128_CBC; + } + break; + case 1: + { + *out_value = MBEDTLS_CIPHER_AES_128_XTS; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH; + } + break; + case 3: + { + *out_value = -1; + } + break; + case 4: + { + *out_value = MBEDTLS_PADDING_ONE_AND_ZEROS; + } + break; + case 5: + { + *out_value = MBEDTLS_PADDING_ZEROS_AND_LEN; + } + break; + case 6: + { + *out_value = MBEDTLS_PADDING_ZEROS; + } + break; + case 7: + { + *out_value = MBEDTLS_PADDING_NONE; + } + break; + case 8: + { + *out_value = MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED; + } + break; + case 9: + { + *out_value = MBEDTLS_PADDING_PKCS7; + } + break; + case 10: + { + *out_value = MBEDTLS_CIPHER_AES_128_CFB128; + } + break; + case 11: + { + *out_value = MBEDTLS_CIPHER_AES_128_OFB; + } + break; + case 12: + { + *out_value = MBEDTLS_CIPHER_AES_192_OFB; + } + break; + case 13: + { + *out_value = MBEDTLS_CIPHER_AES_256_OFB; + } + break; + case 14: + { + *out_value = MBEDTLS_CIPHER_AES_256_XTS; + } + break; + case 15: + { + *out_value = MBEDTLS_CIPHER_AES_128_CTR; + } + break; + case 16: + { + *out_value = MBEDTLS_CIPHER_AES_192_CBC; + } + break; + case 17: + { + *out_value = MBEDTLS_CIPHER_AES_256_CBC; + } + break; + case 18: + { + *out_value = MBEDTLS_ERR_CIPHER_INVALID_PADDING; + } + break; + case 19: + { + *out_value = MBEDTLS_CIPHER_AES_192_CFB128; + } + break; + case 20: + { + *out_value = MBEDTLS_CIPHER_AES_256_CFB128; + } + break; + case 21: + { + *out_value = MBEDTLS_CIPHER_AES_128_ECB; + } + break; + case 22: + { + *out_value = MBEDTLS_ENCRYPT; + } + break; + case 23: + { + *out_value = MBEDTLS_DECRYPT; + } + break; + case 24: + { + *out_value = MBEDTLS_CIPHER_AES_192_ECB; + } + break; + case 25: + { + *out_value = MBEDTLS_CIPHER_AES_256_ECB; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_CIPHER_MODE_CBC) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_CIPHER_PADDING_PKCS7) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_CIPHER_MODE_XTS) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 5: + { +#if defined(MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 6: + { +#if defined(MBEDTLS_CIPHER_PADDING_ZEROS) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 7: + { +#if defined(MBEDTLS_CIPHER_MODE_CFB) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 8: + { +#if defined(MBEDTLS_CIPHER_MODE_OFB) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 9: + { +#if defined(MBEDTLS_CIPHER_MODE_CTR) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 10: + { +#if defined(MBEDTLS_USE_PSA_CRYPTO) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_CIPHER_C) + test_mbedtls_cipher_list_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_CIPHER_C) + test_cipher_invalid_param_unconditional_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_cipher_invalid_param_conditional_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_AES_C) + test_cipher_special_behaviours_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_fail_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_CIPHER_C) + test_dec_empty_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_multipart_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_CIPHER_C) + test_decrypt_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_AUTH_CRYPT) + test_auth_crypt_tv_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_CIPHER_C) + test_test_vec_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_test_vec_crypt_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_set_padding_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_check_padding_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_cipher.aes.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_cipher.aes.datax b/third_party/mbedtls/test/test_suite_cipher.aes.datax new file mode 100644 index 000000000..6247590dc --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.aes.datax @@ -0,0 +1,1804 @@ +AES-128 CBC - Decrypt empty buffer +depends_on:0:1:2 +6:exp:0:int:0:int:0 + +AES-128 XTS - Decrypt empty buffer +depends_on:0:3 +6:exp:1:exp:2:int:0 + +AES-128 CBC - Encrypt and decrypt 0 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:0:exp:3 + +AES-128 CBC - Encrypt and decrypt 1 byte with PKCS7 padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:1:exp:3 + +AES-128 CBC - Encrypt and decrypt 2 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:2:exp:3 + +AES-128 CBC - Encrypt and decrypt 7 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:7:exp:3 + +AES-128 CBC - Encrypt and decrypt 8 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:8:exp:3 + +AES-128 CBC - Encrypt and decrypt 9 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:9:exp:3 + +AES-128 CBC - Encrypt and decrypt 15 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:15:exp:3 + +AES-128 CBC - Encrypt and decrypt 16 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:16:exp:3 + +AES-128 CBC - Encrypt and decrypt 17 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:17:exp:3 + +AES-128 CBC - Encrypt and decrypt 31 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:31:exp:3 + +AES-128 CBC - Encrypt and decrypt 32 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:32:exp:3 + +AES-128 CBC - Encrypt and decrypt 33 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:33:exp:3 + +AES-128 CBC - Encrypt and decrypt 47 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:47:exp:3 + +AES-128 CBC - Encrypt and decrypt 48 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:48:exp:3 + +AES-128 CBC - Encrypt and decrypt 49 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:49:exp:3 + +AES-128 CBC - Encrypt and decrypt 0 bytes with one and zeros padding +depends_on:0:1:4 +4:exp:0:char*:"AES-128-CBC":int:128:int:0:exp:4 + +AES-128 CBC - Encrypt and decrypt 1 byte with one and zeros padding +depends_on:0:1:4 +4:exp:0:char*:"AES-128-CBC":int:128:int:1:exp:4 + +AES-128 CBC - Encrypt and decrypt 2 bytes with one and zeros padding +depends_on:0:1:4 +4:exp:0:char*:"AES-128-CBC":int:128:int:2:exp:4 + +AES-128 CBC - Encrypt and decrypt 7 bytes with one and zeros padding +depends_on:0:1:4 +4:exp:0:char*:"AES-128-CBC":int:128:int:7:exp:4 + +AES-128 CBC - Encrypt and decrypt 8 bytes with one and zeros padding +depends_on:0:1:4 +4:exp:0:char*:"AES-128-CBC":int:128:int:8:exp:4 + +AES-128 CBC - Encrypt and decrypt 9 bytes with one and zeros padding +depends_on:0:1:4 +4:exp:0:char*:"AES-128-CBC":int:128:int:9:exp:4 + +AES-128 CBC - Encrypt and decrypt 15 bytes with one and zeros padding +depends_on:0:1:4 +4:exp:0:char*:"AES-128-CBC":int:128:int:15:exp:4 + +AES-128 CBC - Encrypt and decrypt 16 bytes with one and zeros padding +depends_on:0:1:4 +4:exp:0:char*:"AES-128-CBC":int:128:int:16:exp:4 + +AES-128 CBC - Encrypt and decrypt 17 bytes with one and zeros padding +depends_on:0:1:4 +4:exp:0:char*:"AES-128-CBC":int:128:int:17:exp:4 + +AES-128 CBC - Encrypt and decrypt 31 bytes with one and zeros padding +depends_on:0:1:4 +4:exp:0:char*:"AES-128-CBC":int:128:int:31:exp:4 + +AES-128 CBC - Encrypt and decrypt 32 bytes with one and zeros padding +depends_on:0:1:4 +4:exp:0:char*:"AES-128-CBC":int:128:int:32:exp:4 + +AES-128 CBC - Encrypt and decrypt 33 bytes with one and zeros padding +depends_on:0:1:4 +4:exp:0:char*:"AES-128-CBC":int:128:int:33:exp:4 + +AES-128 CBC - Encrypt and decrypt 47 bytes with one and zeros padding +depends_on:0:1:4 +4:exp:0:char*:"AES-128-CBC":int:128:int:47:exp:4 + +AES-128 CBC - Encrypt and decrypt 48 bytes with one and zeros padding +depends_on:0:1:4 +4:exp:0:char*:"AES-128-CBC":int:128:int:48:exp:4 + +AES-128 CBC - Encrypt and decrypt 49 bytes with one and zeros padding +depends_on:0:1:4 +4:exp:0:char*:"AES-128-CBC":int:128:int:49:exp:4 + +AES-128 CBC - Encrypt and decrypt 0 bytes with zeros and len padding +depends_on:0:1:5 +4:exp:0:char*:"AES-128-CBC":int:128:int:0:exp:5 + +AES-128 CBC - Encrypt and decrypt 1 byte with zeros and len padding +depends_on:0:1:5 +4:exp:0:char*:"AES-128-CBC":int:128:int:1:exp:5 + +AES-128 CBC - Encrypt and decrypt 2 bytes with zeros and len padding +depends_on:0:1:5 +4:exp:0:char*:"AES-128-CBC":int:128:int:2:exp:5 + +AES-128 CBC - Encrypt and decrypt 7 bytes with zeros and len padding +depends_on:0:1:5 +4:exp:0:char*:"AES-128-CBC":int:128:int:7:exp:5 + +AES-128 CBC - Encrypt and decrypt 8 bytes with zeros and len padding +depends_on:0:1:5 +4:exp:0:char*:"AES-128-CBC":int:128:int:8:exp:5 + +AES-128 CBC - Encrypt and decrypt 9 bytes with zeros and len padding +depends_on:0:1:5 +4:exp:0:char*:"AES-128-CBC":int:128:int:9:exp:5 + +AES-128 CBC - Encrypt and decrypt 15 bytes with zeros and len padding +depends_on:0:1:5 +4:exp:0:char*:"AES-128-CBC":int:128:int:15:exp:5 + +AES-128 CBC - Encrypt and decrypt 16 bytes with zeros and len padding +depends_on:0:1:5 +4:exp:0:char*:"AES-128-CBC":int:128:int:16:exp:5 + +AES-128 CBC - Encrypt and decrypt 17 bytes with zeros and len padding +depends_on:0:1:5 +4:exp:0:char*:"AES-128-CBC":int:128:int:17:exp:5 + +AES-128 CBC - Encrypt and decrypt 31 bytes with zeros and len padding +depends_on:0:1:5 +4:exp:0:char*:"AES-128-CBC":int:128:int:31:exp:5 + +AES-128 CBC - Encrypt and decrypt 32 bytes with zeros and len padding +depends_on:0:1:5 +4:exp:0:char*:"AES-128-CBC":int:128:int:32:exp:5 + +AES-128 CBC - Encrypt and decrypt 33 bytes with zeros and len padding +depends_on:0:1:5 +4:exp:0:char*:"AES-128-CBC":int:128:int:33:exp:5 + +AES-128 CBC - Encrypt and decrypt 47 bytes with zeros and len padding +depends_on:0:1:5 +4:exp:0:char*:"AES-128-CBC":int:128:int:47:exp:5 + +AES-128 CBC - Encrypt and decrypt 48 bytes with zeros and len padding +depends_on:0:1:5 +4:exp:0:char*:"AES-128-CBC":int:128:int:48:exp:5 + +AES-128 CBC - Encrypt and decrypt 49 bytes with zeros and len padding +depends_on:0:1:5 +4:exp:0:char*:"AES-128-CBC":int:128:int:49:exp:5 + +AES-128 CBC - Encrypt and decrypt 0 bytes with zeros padding +depends_on:0:1:6 +4:exp:0:char*:"AES-128-CBC":int:128:int:0:exp:6 + +AES-128 CBC - Encrypt and decrypt 1 byte with zeros padding +depends_on:0:1:6 +4:exp:0:char*:"AES-128-CBC":int:128:int:1:exp:6 + +AES-128 CBC - Encrypt and decrypt 2 bytes with zeros padding +depends_on:0:1:6 +4:exp:0:char*:"AES-128-CBC":int:128:int:2:exp:6 + +AES-128 CBC - Encrypt and decrypt 7 bytes with zeros padding +depends_on:0:1:6 +4:exp:0:char*:"AES-128-CBC":int:128:int:7:exp:6 + +AES-128 CBC - Encrypt and decrypt 8 bytes with zeros padding +depends_on:0:1:6 +4:exp:0:char*:"AES-128-CBC":int:128:int:8:exp:6 + +AES-128 CBC - Encrypt and decrypt 9 bytes with zeros padding +depends_on:0:1:6 +4:exp:0:char*:"AES-128-CBC":int:128:int:9:exp:6 + +AES-128 CBC - Encrypt and decrypt 15 bytes with zeros padding +depends_on:0:1:6 +4:exp:0:char*:"AES-128-CBC":int:128:int:15:exp:6 + +AES-128 CBC - Encrypt and decrypt 16 bytes with zeros padding +depends_on:0:1:6 +4:exp:0:char*:"AES-128-CBC":int:128:int:16:exp:6 + +AES-128 CBC - Encrypt and decrypt 17 bytes with zeros padding +depends_on:0:1:6 +4:exp:0:char*:"AES-128-CBC":int:128:int:17:exp:6 + +AES-128 CBC - Encrypt and decrypt 31 bytes with zeros padding +depends_on:0:1:6 +4:exp:0:char*:"AES-128-CBC":int:128:int:31:exp:6 + +AES-128 CBC - Encrypt and decrypt 32 bytes with zeros padding +depends_on:0:1:6 +4:exp:0:char*:"AES-128-CBC":int:128:int:32:exp:6 + +AES-128 CBC - Encrypt and decrypt 33 bytes with zeros padding +depends_on:0:1:6 +4:exp:0:char*:"AES-128-CBC":int:128:int:33:exp:6 + +AES-128 CBC - Encrypt and decrypt 47 bytes with zeros padding +depends_on:0:1:6 +4:exp:0:char*:"AES-128-CBC":int:128:int:47:exp:6 + +AES-128 CBC - Encrypt and decrypt 48 bytes with zeros padding +depends_on:0:1:6 +4:exp:0:char*:"AES-128-CBC":int:128:int:48:exp:6 + +AES-128 CBC - Encrypt and decrypt 49 bytes with zeros padding +depends_on:0:1:6 +4:exp:0:char*:"AES-128-CBC":int:128:int:49:exp:6 + +AES-128 CBC - Encrypt and decrypt 0 bytes with no padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:0:exp:7 + +AES-128 CBC - Encrypt and decrypt 16 bytes with no padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:16:exp:7 + +AES-128 CBC - Encrypt and decrypt 32 bytes with no padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:32:exp:7 + +AES-128 CBC - Encrypt and decrypt 48 bytes with no padding +depends_on:0:1:2 +4:exp:0:char*:"AES-128-CBC":int:128:int:48:exp:7 + +AES-128 CBC - Try encrypting 1 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:128:int:1:exp:8 + +AES-128 CBC - Try encrypting 2 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:128:int:2:exp:8 + +AES-128 CBC - Try encrypting 7 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:128:int:7:exp:8 + +AES-128 CBC - Try encrypting 8 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:128:int:8:exp:8 + +AES-128 CBC - Try encrypting 9 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:128:int:9:exp:8 + +AES-128 CBC - Try encrypting 15 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:128:int:15:exp:8 + +AES-128 CBC - Try encrypting 17 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:128:int:17:exp:8 + +AES-128 CBC - Try encrypting 31 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:128:int:31:exp:8 + +AES-128 CBC - Try encrypting 33 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:128:int:33:exp:8 + +AES-128 CBC - Try encrypting 47 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:128:int:47:exp:8 + +AES-128 CBC - Try encrypting 49 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:128:int:49:exp:8 + +AES-128 CBC - Encrypt and decrypt 0 bytes in multiple parts with PKCS7 padding +depends_on:0:1:2 +7:exp:0:int:128:int:0:int:0:exp:9:int:0:int:0:int:0:int:0 + +AES-128 CBC - Encrypt and decrypt 1 bytes in multiple parts with PKCS7 padding 1 +depends_on:0:1:2 +7:exp:0:int:128:int:1:int:0:exp:9:int:0:int:0:int:0:int:0 + +AES-128 CBC - Encrypt and decrypt 1 bytes in multiple parts with PKCS7 padding 2 +depends_on:0:1:2 +7:exp:0:int:128:int:0:int:1:exp:9:int:0:int:0:int:0:int:0 + +AES-128 CBC - Encrypt and decrypt 16 bytes in multiple parts with PKCS7 padding 1 +depends_on:0:1:2 +7:exp:0:int:128:int:16:int:0:exp:9:int:16:int:0:int:0:int:16 + +AES-128 CBC - Encrypt and decrypt 16 bytes in multiple parts with PKCS7 padding 2 +depends_on:0:1:2 +7:exp:0:int:128:int:0:int:16:exp:9:int:0:int:16:int:0:int:16 + +AES-128 CBC - Encrypt and decrypt 16 bytes in multiple parts with PKCS7 padding 3 +depends_on:0:1:2 +7:exp:0:int:128:int:1:int:15:exp:9:int:0:int:16:int:0:int:16 + +AES-128 CBC - Encrypt and decrypt 16 bytes in multiple parts with PKCS7 padding 4 +depends_on:0:1:2 +7:exp:0:int:128:int:15:int:1:exp:9:int:0:int:16:int:0:int:16 + +AES-128 CBC - Encrypt and decrypt 22 bytes in multiple parts with PKCS7 padding 1 +depends_on:0:1:2 +7:exp:0:int:128:int:15:int:7:exp:9:int:0:int:16:int:0:int:16 + +AES-128 CBC - Encrypt and decrypt 22 bytes in multiple parts with PKCS7 padding 2 +depends_on:0:1:2 +7:exp:0:int:128:int:16:int:6:exp:9:int:16:int:0:int:0:int:16 + +AES-128 CBC - Encrypt and decrypt 23 bytes in multiple parts with PKCS7 padding 1 +depends_on:0:1:2 +7:exp:0:int:128:int:17:int:6:exp:9:int:16:int:0:int:16:int:0 + +AES-128 CBC - Encrypt and decrypt 32 bytes in multiple parts with PKCS7 padding 1 +depends_on:0:1:2 +7:exp:0:int:128:int:16:int:16:exp:9:int:16:int:16:int:0:int:32 + +AES-128 CBC - Encrypt and decrypt 0 bytes in multiple parts with no padding +depends_on:0:1 +7:exp:0:int:128:int:0:int:0:exp:7:int:0:int:0:int:0:int:0 + +AES-128 CBC - Encrypt and decrypt 16 bytes in multiple parts with no padding 1 +depends_on:0:1 +7:exp:0:int:128:int:16:int:0:exp:7:int:16:int:0:int:16:int:0 + +AES-128 CBC - Encrypt and decrypt 16 bytes in multiple parts with no padding 2 +depends_on:0:1 +7:exp:0:int:128:int:0:int:16:exp:7:int:0:int:16:int:0:int:16 + +AES-128 CBC - Encrypt and decrypt 16 bytes in multiple parts with no padding 3 +depends_on:0:1 +7:exp:0:int:128:int:1:int:15:exp:7:int:0:int:16:int:0:int:16 + +AES-128 CBC - Encrypt and decrypt 16 bytes in multiple parts with no padding 4 +depends_on:0:1 +7:exp:0:int:128:int:15:int:1:exp:7:int:0:int:16:int:0:int:16 + +AES-128 CBC - Encrypt and decrypt 32 bytes in multiple parts with no padding 1 +depends_on:0:1 +7:exp:0:int:128:int:16:int:16:exp:7:int:16:int:16:int:16:int:16 + +AES-128 CFB - Encrypt and decrypt 0 bytes +depends_on:0:7 +4:exp:10:char*:"AES-128-CFB128":int:128:int:0:exp:3 + +AES-128 CFB - Encrypt and decrypt 1 byte +depends_on:0:7 +4:exp:10:char*:"AES-128-CFB128":int:128:int:1:exp:3 + +AES-128 CFB - Encrypt and decrypt 2 bytes +depends_on:0:7 +4:exp:10:char*:"AES-128-CFB128":int:128:int:2:exp:3 + +AES-128 CFB - Encrypt and decrypt 7 bytes +depends_on:0:7 +4:exp:10:char*:"AES-128-CFB128":int:128:int:7:exp:3 + +AES-128 CFB - Encrypt and decrypt 8 bytes +depends_on:0:7 +4:exp:10:char*:"AES-128-CFB128":int:128:int:8:exp:3 + +AES-128 CFB - Encrypt and decrypt 9 bytes +depends_on:0:7 +4:exp:10:char*:"AES-128-CFB128":int:128:int:9:exp:3 + +AES-128 CFB - Encrypt and decrypt 15 bytes +depends_on:0:7 +4:exp:10:char*:"AES-128-CFB128":int:128:int:15:exp:3 + +AES-128 CFB - Encrypt and decrypt 16 bytes +depends_on:0:7 +4:exp:10:char*:"AES-128-CFB128":int:128:int:16:exp:3 + +AES-128 CFB - Encrypt and decrypt 17 bytes +depends_on:0:7 +4:exp:10:char*:"AES-128-CFB128":int:128:int:17:exp:3 + +AES-128 CFB - Encrypt and decrypt 31 bytes +depends_on:0:7 +4:exp:10:char*:"AES-128-CFB128":int:128:int:31:exp:3 + +AES-128 CFB - Encrypt and decrypt 32 bytes +depends_on:0:7 +4:exp:10:char*:"AES-128-CFB128":int:128:int:32:exp:3 + +AES-128 CFB - Encrypt and decrypt 33 bytes +depends_on:0:7 +4:exp:10:char*:"AES-128-CFB128":int:128:int:33:exp:3 + +AES-128 CFB - Encrypt and decrypt 47 bytes +depends_on:0:7 +4:exp:10:char*:"AES-128-CFB128":int:128:int:47:exp:3 + +AES-128 CFB - Encrypt and decrypt 48 bytes +depends_on:0:7 +4:exp:10:char*:"AES-128-CFB128":int:128:int:48:exp:3 + +AES-128 CFB - Encrypt and decrypt 49 bytes +depends_on:0:7 +4:exp:10:char*:"AES-128-CFB128":int:128:int:49:exp:3 + +AES-128 CFB - Encrypt and decrypt 0 bytes in multiple parts +depends_on:0:7 +7:exp:10:int:128:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +AES-128 CFB - Encrypt and decrypt 1 bytes in multiple parts 1 +depends_on:0:7 +7:exp:10:int:128:int:1:int:0:exp:3:int:1:int:0:int:1:int:0 + +AES-128 CFB - Encrypt and decrypt 1 bytes in multiple parts 2 +depends_on:0:7 +7:exp:10:int:128:int:0:int:1:exp:3:int:0:int:1:int:0:int:1 + +AES-128 CFB - Encrypt and decrypt 16 bytes in multiple parts 1 +depends_on:0:7 +7:exp:10:int:128:int:16:int:0:exp:3:int:16:int:0:int:16:int:0 + +AES-128 CFB - Encrypt and decrypt 16 bytes in multiple parts 2 +depends_on:0:7 +7:exp:10:int:128:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +AES-128 CFB - Encrypt and decrypt 16 bytes in multiple parts 3 +depends_on:0:7 +7:exp:10:int:128:int:1:int:15:exp:3:int:1:int:15:int:1:int:15 + +AES-128 CFB - Encrypt and decrypt 16 bytes in multiple parts 4 +depends_on:0:7 +7:exp:10:int:128:int:15:int:1:exp:3:int:15:int:1:int:15:int:1 + +AES-128 CFB - Encrypt and decrypt 22 bytes in multiple parts 1 +depends_on:0:7 +7:exp:10:int:128:int:15:int:7:exp:3:int:15:int:7:int:15:int:7 + +AES-128 CFB - Encrypt and decrypt 22 bytes in multiple parts 2 +depends_on:0:7 +7:exp:10:int:128:int:16:int:6:exp:3:int:16:int:6:int:16:int:6 + +AES-128 CFB - Encrypt and decrypt 23 bytes in multiple parts 1 +depends_on:0:7 +7:exp:10:int:128:int:17:int:6:exp:3:int:17:int:6:int:17:int:6 + +AES-128 CFB - Encrypt and decrypt 32 bytes in multiple parts 1 +depends_on:0:7 +7:exp:10:int:128:int:16:int:16:exp:3:int:16:int:16:int:16:int:16 + +AES-128 OFB - Encrypt and decrypt 0 bytes +depends_on:0:8 +4:exp:11:char*:"AES-128-OFB":int:128:int:0:exp:3 + +AES-128 OFB - Encrypt and decrypt 1 byte +depends_on:0:8 +4:exp:11:char*:"AES-128-OFB":int:128:int:1:exp:3 + +AES-128 OFB - Encrypt and decrypt 2 bytes +depends_on:0:8 +4:exp:11:char*:"AES-128-OFB":int:128:int:2:exp:3 + +AES-128 OFB - Encrypt and decrypt 7 bytes +depends_on:0:8 +4:exp:11:char*:"AES-128-OFB":int:128:int:7:exp:3 + +AES-128 OFB - Encrypt and decrypt 8 bytes +depends_on:0:8 +4:exp:11:char*:"AES-128-OFB":int:128:int:8:exp:3 + +AES-128 OFB - Encrypt and decrypt 9 bytes +depends_on:0:8 +4:exp:11:char*:"AES-128-OFB":int:128:int:9:exp:3 + +AES-128 OFB - Encrypt and decrypt 15 bytes +depends_on:0:8 +4:exp:11:char*:"AES-128-OFB":int:128:int:15:exp:3 + +AES-128 OFB - Encrypt and decrypt 16 bytes +depends_on:0:8 +4:exp:11:char*:"AES-128-OFB":int:128:int:16:exp:3 + +AES-128 OFB - Encrypt and decrypt 17 bytes +depends_on:0:8 +4:exp:11:char*:"AES-128-OFB":int:128:int:17:exp:3 + +AES-128 OFB - Encrypt and decrypt 31 bytes +depends_on:0:8 +4:exp:11:char*:"AES-128-OFB":int:128:int:31:exp:3 + +AES-128 OFB - Encrypt and decrypt 32 bytes +depends_on:0:8 +4:exp:11:char*:"AES-128-OFB":int:128:int:32:exp:3 + +AES-128 OFB - Encrypt and decrypt 33 bytes +depends_on:0:8 +4:exp:11:char*:"AES-128-OFB":int:128:int:33:exp:3 + +AES-128 OFB - Encrypt and decrypt 47 bytes +depends_on:0:8 +4:exp:11:char*:"AES-128-OFB":int:128:int:47:exp:3 + +AES-128 OFB - Encrypt and decrypt 48 bytes +depends_on:0:8 +4:exp:11:char*:"AES-128-OFB":int:128:int:48:exp:3 + +AES-128 OFB - Encrypt and decrypt 49 bytes +depends_on:0:8 +4:exp:11:char*:"AES-128-OFB":int:128:int:49:exp:3 + +AES-128 OFB - Encrypt and decrypt 0 bytes in multiple parts +depends_on:0:8 +7:exp:11:int:128:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +AES-128 OFB - Encrypt and decrypt 1 bytes in multiple parts 1 +depends_on:0:8 +7:exp:11:int:128:int:1:int:0:exp:3:int:1:int:0:int:1:int:0 + +AES-128 OFB - Encrypt and decrypt 1 bytes in multiple parts 2 +depends_on:0:8 +7:exp:11:int:128:int:0:int:1:exp:3:int:0:int:1:int:0:int:1 + +AES-128 OFB - Encrypt and decrypt 16 bytes in multiple parts 1 +depends_on:0:8 +7:exp:11:int:128:int:16:int:0:exp:3:int:16:int:0:int:16:int:0 + +AES-128 OFB - Encrypt and decrypt 16 bytes in multiple parts 2 +depends_on:0:8 +7:exp:11:int:128:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +AES-128 OFB - Encrypt and decrypt 16 bytes in multiple parts 3 +depends_on:0:8 +7:exp:11:int:128:int:1:int:15:exp:3:int:1:int:15:int:1:int:15 + +AES-128 OFB - Encrypt and decrypt 16 bytes in multiple parts 4 +depends_on:0:8 +7:exp:11:int:128:int:15:int:1:exp:3:int:15:int:1:int:15:int:1 + +AES-128 OFB - Encrypt and decrypt 22 bytes in multiple parts 1 +depends_on:0:8 +7:exp:11:int:128:int:15:int:7:exp:3:int:15:int:7:int:15:int:7 + +AES-128 OFB - Encrypt and decrypt 22 bytes in multiple parts 2 +depends_on:0:8 +7:exp:11:int:128:int:16:int:6:exp:3:int:16:int:6:int:16:int:6 + +AES-128 OFB - Encrypt and decrypt 23 bytes in multiple parts 1 +depends_on:0:8 +7:exp:11:int:128:int:17:int:6:exp:3:int:17:int:6:int:17:int:6 + +AES-128 OFB - Encrypt and decrypt 32 bytes in multiple parts 1 +depends_on:0:8 +7:exp:11:int:128:int:16:int:16:exp:3:int:16:int:16:int:16:int:16 + +AES-192 OFB - Encrypt and decrypt 0 bytes +depends_on:0:8 +4:exp:12:char*:"AES-192-OFB":int:192:int:0:exp:3 + +AES-192 OFB - Encrypt and decrypt 1 byte +depends_on:0:8 +4:exp:12:char*:"AES-192-OFB":int:192:int:1:exp:3 + +AES-192 OFB - Encrypt and decrypt 2 bytes +depends_on:0:8 +4:exp:12:char*:"AES-192-OFB":int:192:int:2:exp:3 + +AES-192 OFB - Encrypt and decrypt 7 bytes +depends_on:0:8 +4:exp:12:char*:"AES-192-OFB":int:192:int:7:exp:3 + +AES-192 OFB - Encrypt and decrypt 8 bytes +depends_on:0:8 +4:exp:12:char*:"AES-192-OFB":int:192:int:8:exp:3 + +AES-192 OFB - Encrypt and decrypt 9 bytes +depends_on:0:8 +4:exp:12:char*:"AES-192-OFB":int:192:int:9:exp:3 + +AES-192 OFB - Encrypt and decrypt 15 bytes +depends_on:0:8 +4:exp:12:char*:"AES-192-OFB":int:192:int:15:exp:3 + +AES-192 OFB - Encrypt and decrypt 16 bytes +depends_on:0:8 +4:exp:12:char*:"AES-192-OFB":int:192:int:16:exp:3 + +AES-192 OFB - Encrypt and decrypt 17 bytes +depends_on:0:8 +4:exp:12:char*:"AES-192-OFB":int:192:int:17:exp:3 + +AES-192 OFB - Encrypt and decrypt 31 bytes +depends_on:0:8 +4:exp:12:char*:"AES-192-OFB":int:192:int:31:exp:3 + +AES-192 OFB - Encrypt and decrypt 32 bytes +depends_on:0:8 +4:exp:12:char*:"AES-192-OFB":int:192:int:32:exp:3 + +AES-192 OFB - Encrypt and decrypt 33 bytes +depends_on:0:8 +4:exp:12:char*:"AES-192-OFB":int:192:int:33:exp:3 + +AES-192 OFB - Encrypt and decrypt 47 bytes +depends_on:0:8 +4:exp:12:char*:"AES-192-OFB":int:192:int:47:exp:3 + +AES-192 OFB - Encrypt and decrypt 48 bytes +depends_on:0:8 +4:exp:12:char*:"AES-192-OFB":int:192:int:48:exp:3 + +AES-192 OFB - Encrypt and decrypt 49 bytes +depends_on:0:8 +4:exp:12:char*:"AES-192-OFB":int:192:int:49:exp:3 + +AES-192 OFB - Encrypt and decrypt 0 bytes in multiple parts +depends_on:0:8 +7:exp:12:int:192:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +AES-192 OFB - Encrypt and decrypt 1 bytes in multiple parts 1 +depends_on:0:8 +7:exp:12:int:192:int:1:int:0:exp:3:int:1:int:0:int:1:int:0 + +AES-192 OFB - Encrypt and decrypt 1 bytes in multiple parts 2 +depends_on:0:8 +7:exp:12:int:192:int:0:int:1:exp:3:int:0:int:1:int:0:int:1 + +AES-192 OFB - Encrypt and decrypt 16 bytes in multiple parts 1 +depends_on:0:8 +7:exp:12:int:192:int:16:int:0:exp:3:int:16:int:0:int:16:int:0 + +AES-192 OFB - Encrypt and decrypt 16 bytes in multiple parts 2 +depends_on:0:8 +7:exp:12:int:192:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +AES-192 OFB - Encrypt and decrypt 16 bytes in multiple parts 3 +depends_on:0:8 +7:exp:12:int:192:int:1:int:15:exp:3:int:1:int:15:int:1:int:15 + +AES-192 OFB - Encrypt and decrypt 16 bytes in multiple parts 4 +depends_on:0:8 +7:exp:12:int:192:int:15:int:1:exp:3:int:15:int:1:int:15:int:1 + +AES-192 OFB - Encrypt and decrypt 22 bytes in multiple parts 1 +depends_on:0:8 +7:exp:12:int:192:int:15:int:7:exp:3:int:15:int:7:int:15:int:7 + +AES-192 OFB - Encrypt and decrypt 22 bytes in multiple parts 2 +depends_on:0:8 +7:exp:12:int:192:int:16:int:6:exp:3:int:16:int:6:int:16:int:6 + +AES-192 OFB - Encrypt and decrypt 23 bytes in multiple parts 1 +depends_on:0:8 +7:exp:12:int:192:int:17:int:6:exp:3:int:17:int:6:int:17:int:6 + +AES-192 OFB - Encrypt and decrypt 32 bytes in multiple parts 1 +depends_on:0:8 +7:exp:12:int:192:int:16:int:16:exp:3:int:16:int:16:int:16:int:16 + +AES-256 OFB - Encrypt and decrypt 0 bytes +depends_on:0:8 +4:exp:13:char*:"AES-256-OFB":int:256:int:0:exp:3 + +AES-256 OFB - Encrypt and decrypt 1 byte +depends_on:0:8 +4:exp:13:char*:"AES-256-OFB":int:256:int:1:exp:3 + +AES-256 OFB - Encrypt and decrypt 2 bytes +depends_on:0:8 +4:exp:13:char*:"AES-256-OFB":int:256:int:2:exp:3 + +AES-256 OFB - Encrypt and decrypt 7 bytes +depends_on:0:8 +4:exp:13:char*:"AES-256-OFB":int:256:int:7:exp:3 + +AES-256 OFB - Encrypt and decrypt 8 bytes +depends_on:0:8 +4:exp:13:char*:"AES-256-OFB":int:256:int:8:exp:3 + +AES-256 OFB - Encrypt and decrypt 9 bytes +depends_on:0:8 +4:exp:13:char*:"AES-256-OFB":int:256:int:9:exp:3 + +AES-256 OFB - Encrypt and decrypt 15 bytes +depends_on:0:8 +4:exp:13:char*:"AES-256-OFB":int:256:int:15:exp:3 + +AES-256 OFB - Encrypt and decrypt 16 bytes +depends_on:0:8 +4:exp:13:char*:"AES-256-OFB":int:256:int:16:exp:3 + +AES-256 OFB - Encrypt and decrypt 17 bytes +depends_on:0:8 +4:exp:13:char*:"AES-256-OFB":int:256:int:17:exp:3 + +AES-256 OFB - Encrypt and decrypt 31 bytes +depends_on:0:8 +4:exp:13:char*:"AES-256-OFB":int:256:int:31:exp:3 + +AES-256 OFB - Encrypt and decrypt 32 bytes +depends_on:0:8 +4:exp:13:char*:"AES-256-OFB":int:256:int:32:exp:3 + +AES-256 OFB - Encrypt and decrypt 33 bytes +depends_on:0:8 +4:exp:13:char*:"AES-256-OFB":int:256:int:33:exp:3 + +AES-256 OFB - Encrypt and decrypt 47 bytes +depends_on:0:8 +4:exp:13:char*:"AES-256-OFB":int:256:int:47:exp:3 + +AES-256 OFB - Encrypt and decrypt 48 bytes +depends_on:0:8 +4:exp:13:char*:"AES-256-OFB":int:256:int:48:exp:3 + +AES-256 OFB - Encrypt and decrypt 49 bytes +depends_on:0:8 +4:exp:13:char*:"AES-256-OFB":int:256:int:49:exp:3 + +AES-256 OFB - Encrypt and decrypt 0 bytes in multiple parts +depends_on:0:8 +7:exp:13:int:256:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +AES-256 OFB - Encrypt and decrypt 1 bytes in multiple parts 1 +depends_on:0:8 +7:exp:13:int:256:int:1:int:0:exp:3:int:1:int:0:int:1:int:0 + +AES-256 OFB - Encrypt and decrypt 1 bytes in multiple parts 2 +depends_on:0:8 +7:exp:13:int:256:int:0:int:1:exp:3:int:0:int:1:int:0:int:1 + +AES-256 OFB - Encrypt and decrypt 16 bytes in multiple parts 1 +depends_on:0:8 +7:exp:13:int:256:int:16:int:0:exp:3:int:16:int:0:int:16:int:0 + +AES-256 OFB - Encrypt and decrypt 16 bytes in multiple parts 2 +depends_on:0:8 +7:exp:13:int:256:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +AES-256 OFB - Encrypt and decrypt 16 bytes in multiple parts 3 +depends_on:0:8 +7:exp:13:int:256:int:1:int:15:exp:3:int:1:int:15:int:1:int:15 + +AES-256 OFB - Encrypt and decrypt 16 bytes in multiple parts 4 +depends_on:0:8 +7:exp:13:int:256:int:15:int:1:exp:3:int:15:int:1:int:15:int:1 + +AES-256 OFB - Encrypt and decrypt 22 bytes in multiple parts 1 +depends_on:0:8 +7:exp:13:int:256:int:15:int:7:exp:3:int:15:int:7:int:15:int:7 + +AES-256 OFB - Encrypt and decrypt 22 bytes in multiple parts 2 +depends_on:0:8 +7:exp:13:int:256:int:16:int:6:exp:3:int:16:int:6:int:16:int:6 + +AES-256 OFB - Encrypt and decrypt 23 bytes in multiple parts 1 +depends_on:0:8 +7:exp:13:int:256:int:17:int:6:exp:3:int:17:int:6:int:17:int:6 + +AES-256 OFB - Encrypt and decrypt 32 bytes in multiple parts 1 +depends_on:0:8 +7:exp:13:int:256:int:16:int:16:exp:3:int:16:int:16:int:16:int:16 + +AES-128 XTS - Encrypt and decrypt 16 bytes +depends_on:0:3 +4:exp:1:char*:"AES-128-XTS":int:256:int:16:exp:3 + +AES-128 XTS - Encrypt and decrypt 17 bytes +depends_on:0:3 +4:exp:1:char*:"AES-128-XTS":int:256:int:17:exp:3 + +AES-128 XTS - Encrypt and decrypt 31 bytes +depends_on:0:3 +4:exp:1:char*:"AES-128-XTS":int:256:int:31:exp:3 + +AES-128 XTS - Encrypt and decrypt 32 bytes +depends_on:0:3 +4:exp:1:char*:"AES-128-XTS":int:256:int:32:exp:3 + +AES-128 XTS - Encrypt and decrypt 33 bytes +depends_on:0:3 +4:exp:1:char*:"AES-128-XTS":int:256:int:33:exp:3 + +AES-128 XTS - Encrypt and decrypt 47 bytes +depends_on:0:3 +4:exp:1:char*:"AES-128-XTS":int:256:int:47:exp:3 + +AES-128 XTS - Encrypt and decrypt 48 bytes +depends_on:0:3 +4:exp:1:char*:"AES-128-XTS":int:256:int:48:exp:3 + +AES-128 XTS - Encrypt and decrypt 49 bytes +depends_on:0:3 +4:exp:1:char*:"AES-128-XTS":int:256:int:49:exp:3 + +AES-256 XTS - Encrypt and decrypt 16 bytes +depends_on:0:3 +4:exp:14:char*:"AES-256-XTS":int:512:int:16:exp:3 + +AES-256 XTS - Encrypt and decrypt 17 bytes +depends_on:0:3 +4:exp:14:char*:"AES-256-XTS":int:512:int:17:exp:3 + +AES-256 XTS - Encrypt and decrypt 31 bytes +depends_on:0:3 +4:exp:14:char*:"AES-256-XTS":int:512:int:31:exp:3 + +AES-256 XTS - Encrypt and decrypt 32 bytes +depends_on:0:3 +4:exp:14:char*:"AES-256-XTS":int:512:int:32:exp:3 + +AES-256 XTS - Encrypt and decrypt 33 bytes +depends_on:0:3 +4:exp:14:char*:"AES-256-XTS":int:512:int:33:exp:3 + +AES-256 XTS - Encrypt and decrypt 47 bytes +depends_on:0:3 +4:exp:14:char*:"AES-256-XTS":int:512:int:47:exp:3 + +AES-256 XTS - Encrypt and decrypt 48 bytes +depends_on:0:3 +4:exp:14:char*:"AES-256-XTS":int:512:int:48:exp:3 + +AES-256 XTS - Encrypt and decrypt 49 bytes +depends_on:0:3 +4:exp:14:char*:"AES-256-XTS":int:512:int:49:exp:3 + +AES-128 CTR - Encrypt and decrypt 0 bytes +depends_on:0:9 +4:exp:15:char*:"AES-128-CTR":int:128:int:0:exp:3 + +AES-128 CTR - Encrypt and decrypt 1 byte +depends_on:0:9 +4:exp:15:char*:"AES-128-CTR":int:128:int:1:exp:3 + +AES-128 CTR - Encrypt and decrypt 2 bytes +depends_on:0:9 +4:exp:15:char*:"AES-128-CTR":int:128:int:2:exp:3 + +AES-128 CTR - Encrypt and decrypt 7 bytes +depends_on:0:9 +4:exp:15:char*:"AES-128-CTR":int:128:int:7:exp:3 + +AES-128 CTR - Encrypt and decrypt 8 bytes +depends_on:0:9 +4:exp:15:char*:"AES-128-CTR":int:128:int:8:exp:3 + +AES-128 CTR - Encrypt and decrypt 9 bytes +depends_on:0:9 +4:exp:15:char*:"AES-128-CTR":int:128:int:9:exp:3 + +AES-128 CTR - Encrypt and decrypt 15 bytes +depends_on:0:9 +4:exp:15:char*:"AES-128-CTR":int:128:int:15:exp:3 + +AES-128 CTR - Encrypt and decrypt 16 bytes +depends_on:0:9 +4:exp:15:char*:"AES-128-CTR":int:128:int:16:exp:3 + +AES-128 CTR - Encrypt and decrypt 17 bytes +depends_on:0:9 +4:exp:15:char*:"AES-128-CTR":int:128:int:17:exp:3 + +AES-128 CTR - Encrypt and decrypt 31 bytes +depends_on:0:9 +4:exp:15:char*:"AES-128-CTR":int:128:int:31:exp:3 + +AES-128 CTR - Encrypt and decrypt 32 bytes +depends_on:0:9 +4:exp:15:char*:"AES-128-CTR":int:128:int:32:exp:3 + +AES-128 CTR - Encrypt and decrypt 33 bytes +depends_on:0:9 +4:exp:15:char*:"AES-128-CTR":int:128:int:33:exp:3 + +AES-128 CTR - Encrypt and decrypt 47 bytes +depends_on:0:9 +4:exp:15:char*:"AES-128-CTR":int:128:int:47:exp:3 + +AES-128 CTR - Encrypt and decrypt 48 bytes +depends_on:0:9 +4:exp:15:char*:"AES-128-CTR":int:128:int:48:exp:3 + +AES-128 CTR - Encrypt and decrypt 49 bytes +depends_on:0:9 +4:exp:15:char*:"AES-128-CTR":int:128:int:49:exp:3 + +AES-128 CTR - Encrypt and decrypt 0 bytes in multiple parts +depends_on:0:9 +7:exp:15:int:128:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +AES-128 CTR - Encrypt and decrypt 1 bytes in multiple parts 1 +depends_on:0:9 +7:exp:15:int:128:int:1:int:0:exp:3:int:1:int:0:int:1:int:0 + +AES-128 CTR - Encrypt and decrypt 1 bytes in multiple parts 2 +depends_on:0:9 +7:exp:15:int:128:int:0:int:1:exp:3:int:0:int:1:int:0:int:1 + +AES-128 CTR - Encrypt and decrypt 16 bytes in multiple parts 1 +depends_on:0:9 +7:exp:15:int:128:int:16:int:0:exp:3:int:16:int:0:int:16:int:0 + +AES-128 CTR - Encrypt and decrypt 16 bytes in multiple parts 2 +depends_on:0:9 +7:exp:15:int:128:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +AES-128 CTR - Encrypt and decrypt 16 bytes in multiple parts 3 +depends_on:0:9 +7:exp:15:int:128:int:1:int:15:exp:3:int:1:int:15:int:1:int:15 + +AES-128 CTR - Encrypt and decrypt 16 bytes in multiple parts 4 +depends_on:0:9 +7:exp:15:int:128:int:15:int:1:exp:3:int:15:int:1:int:15:int:1 + +AES-128 CTR - Encrypt and decrypt 22 bytes in multiple parts 1 +depends_on:0:9 +7:exp:15:int:128:int:15:int:7:exp:3:int:15:int:7:int:15:int:7 + +AES-128 CTR - Encrypt and decrypt 22 bytes in multiple parts 2 +depends_on:0:9 +7:exp:15:int:128:int:16:int:6:exp:3:int:16:int:6:int:16:int:6 + +AES-128 CTR - Encrypt and decrypt 23 bytes in multiple parts 1 +depends_on:0:9 +7:exp:15:int:128:int:17:int:6:exp:3:int:17:int:6:int:17:int:6 + +AES-128 CTR - Encrypt and decrypt 32 bytes in multiple parts 1 +depends_on:0:9 +7:exp:15:int:128:int:16:int:16:exp:3:int:16:int:16:int:16:int:16 + +AES-192 CBC - Encrypt and decrypt 0 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:16:char*:"AES-192-CBC":int:192:int:0:exp:3 + +AES-192 CBC - Encrypt and decrypt 1 byte with PKCS7 padding +depends_on:0:1:2 +4:exp:16:char*:"AES-192-CBC":int:192:int:1:exp:3 + +AES-192 CBC - Encrypt and decrypt 2 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:16:char*:"AES-192-CBC":int:192:int:2:exp:3 + +AES-192 CBC - Encrypt and decrypt 7 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:16:char*:"AES-192-CBC":int:192:int:7:exp:3 + +AES-192 CBC - Encrypt and decrypt 8 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:16:char*:"AES-192-CBC":int:192:int:8:exp:3 + +AES-192 CBC - Encrypt and decrypt 9 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:16:char*:"AES-192-CBC":int:192:int:9:exp:3 + +AES-192 CBC - Encrypt and decrypt 15 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:16:char*:"AES-192-CBC":int:192:int:15:exp:3 + +AES-192 CBC - Encrypt and decrypt 16 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:16:char*:"AES-192-CBC":int:192:int:16:exp:3 + +AES-192 CBC - Encrypt and decrypt 17 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:16:char*:"AES-192-CBC":int:192:int:17:exp:3 + +AES-192 CBC - Encrypt and decrypt 31 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:16:char*:"AES-192-CBC":int:192:int:31:exp:3 + +AES-192 CBC - Encrypt and decrypt 32 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:16:char*:"AES-192-CBC":int:192:int:32:exp:3 + +AES-192 CBC - Encrypt and decrypt 33 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:16:char*:"AES-192-CBC":int:192:int:33:exp:3 + +AES-192 CBC - Encrypt and decrypt 47 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:16:char*:"AES-192-CBC":int:192:int:47:exp:3 + +AES-192 CBC - Encrypt and decrypt 48 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:16:char*:"AES-192-CBC":int:192:int:48:exp:3 + +AES-192 CBC - Encrypt and decrypt 49 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:16:char*:"AES-192-CBC":int:192:int:49:exp:3 + +AES-192 CBC - Encrypt and decrypt 0 bytes in multiple parts with PKCS7 padding +depends_on:0:1:2 +7:exp:16:int:192:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +AES-192 CBC - Encrypt and decrypt 1 bytes in multiple parts with PKCS7 padding 1 +depends_on:0:1:2 +7:exp:16:int:192:int:1:int:0:exp:3:int:0:int:0:int:0:int:0 + +AES-192 CBC - Encrypt and decrypt 1 bytes in multiple parts with PKCS7 padding 2 +depends_on:0:1:2 +7:exp:16:int:192:int:0:int:1:exp:3:int:0:int:0:int:0:int:0 + +AES-192 CBC - Encrypt and decrypt 16 bytes in multiple parts with PKCS7 padding 1 +depends_on:0:1:2 +7:exp:16:int:192:int:16:int:0:exp:3:int:16:int:0:int:0:int:16 + +AES-192 CBC - Encrypt and decrypt 16 bytes in multiple parts with PKCS7 padding 2 +depends_on:0:1:2 +7:exp:16:int:192:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +AES-192 CBC - Encrypt and decrypt 16 bytes in multiple parts with PKCS7 padding 3 +depends_on:0:1:2 +7:exp:16:int:192:int:1:int:15:exp:3:int:0:int:16:int:0:int:16 + +AES-192 CBC - Encrypt and decrypt 16 bytes in multiple parts with PKCS7 padding 4 +depends_on:0:1:2 +7:exp:16:int:192:int:15:int:1:exp:3:int:0:int:16:int:0:int:16 + +AES-192 CBC - Encrypt and decrypt 22 bytes in multiple parts with PKCS7 padding 1 +depends_on:0:1:2 +7:exp:16:int:192:int:15:int:7:exp:3:int:0:int:16:int:0:int:16 + +AES-192 CBC - Encrypt and decrypt 22 bytes in multiple parts with PKCS7 padding 2 +depends_on:0:1:2 +7:exp:16:int:192:int:16:int:6:exp:3:int:16:int:0:int:0:int:16 + +AES-192 CBC - Encrypt and decrypt 23 bytes in multiple parts with PKCS7 padding 1 +depends_on:0:1:2 +7:exp:16:int:192:int:17:int:6:exp:3:int:16:int:0:int:16:int:0 + +AES-192 CBC - Encrypt and decrypt 32 bytes in multiple parts with PKCS7 padding 1 +depends_on:0:1:2 +7:exp:16:int:192:int:16:int:16:exp:3:int:16:int:16:int:0:int:32 + +AES-256 CBC - Decrypt empty buffer +depends_on:0:1:2 +6:exp:17:int:0:int:0 + +AES-256 CBC - Encrypt and decrypt 0 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:17:char*:"AES-256-CBC":int:256:int:0:exp:3 + +AES-256 CBC - Encrypt and decrypt 1 byte with PKCS7 padding +depends_on:0:1:2 +4:exp:17:char*:"AES-256-CBC":int:256:int:1:exp:3 + +AES-256 CBC - Encrypt and decrypt 2 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:17:char*:"AES-256-CBC":int:256:int:2:exp:3 + +AES-256 CBC - Encrypt and decrypt 7 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:17:char*:"AES-256-CBC":int:256:int:7:exp:3 + +AES-256 CBC - Encrypt and decrypt 8 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:17:char*:"AES-256-CBC":int:256:int:8:exp:3 + +AES-256 CBC - Encrypt and decrypt 9 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:17:char*:"AES-256-CBC":int:256:int:9:exp:3 + +AES-256 CBC - Encrypt and decrypt 15 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:17:char*:"AES-256-CBC":int:256:int:15:exp:3 + +AES-256 CBC - Encrypt and decrypt 16 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:17:char*:"AES-256-CBC":int:256:int:16:exp:3 + +AES-256 CBC - Encrypt and decrypt 17 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:17:char*:"AES-256-CBC":int:256:int:17:exp:3 + +AES-256 CBC - Encrypt and decrypt 31 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:17:char*:"AES-256-CBC":int:256:int:31:exp:3 + +AES-256 CBC - Encrypt and decrypt 32 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:17:char*:"AES-256-CBC":int:256:int:32:exp:3 + +AES-256 CBC - Encrypt and decrypt 33 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:17:char*:"AES-256-CBC":int:256:int:33:exp:3 + +AES-256 CBC - Encrypt and decrypt 47 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:17:char*:"AES-256-CBC":int:256:int:47:exp:3 + +AES-256 CBC - Encrypt and decrypt 48 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:17:char*:"AES-256-CBC":int:256:int:48:exp:3 + +AES-256 CBC - Encrypt and decrypt 49 bytes with PKCS7 padding +depends_on:0:1:2 +4:exp:17:char*:"AES-256-CBC":int:256:int:49:exp:3 + +AES-256 CBC - Encrypt and decrypt 0 bytes in multiple parts with PKCS7 padding +depends_on:0:1:2 +7:exp:17:int:256:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +AES-256 CBC - Encrypt and decrypt 1 bytes in multiple parts with PKCS7 padding 1 +depends_on:0:1:2 +7:exp:17:int:256:int:1:int:0:exp:3:int:0:int:0:int:0:int:0 + +AES-256 CBC - Encrypt and decrypt 1 bytes in multiple parts with PKCS7 padding 2 +depends_on:0:1:2 +7:exp:17:int:256:int:0:int:1:exp:3:int:0:int:0:int:0:int:0 + +AES-256 CBC - Encrypt and decrypt 16 bytes in multiple parts with PKCS7 padding 1 +depends_on:0:1:2 +7:exp:17:int:256:int:16:int:0:exp:3:int:16:int:0:int:0:int:16 + +AES-256 CBC - Encrypt and decrypt 16 bytes in multiple parts with PKCS7 padding 2 +depends_on:0:1:2 +7:exp:17:int:256:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +AES-256 CBC - Encrypt and decrypt 16 bytes in multiple parts with PKCS7 padding 3 +depends_on:0:1:2 +7:exp:17:int:256:int:1:int:15:exp:3:int:0:int:16:int:0:int:16 + +AES-256 CBC - Encrypt and decrypt 16 bytes in multiple parts with PKCS7 padding 4 +depends_on:0:1:2 +7:exp:17:int:256:int:15:int:1:exp:3:int:0:int:16:int:0:int:16 + +AES-256 CBC - Encrypt and decrypt 22 bytes in multiple parts with PKCS7 padding 1 +depends_on:0:1:2 +7:exp:17:int:256:int:15:int:7:exp:3:int:0:int:16:int:0:int:16 + +AES-256 CBC - Encrypt and decrypt 22 bytes in multiple parts with PKCS7 padding 2 +depends_on:0:1:2 +7:exp:17:int:256:int:16:int:6:exp:3:int:16:int:0:int:0:int:16 + +AES-256 CBC - Encrypt and decrypt 23 bytes in multiple parts with PKCS7 padding 1 +depends_on:0:1:2 +7:exp:17:int:256:int:17:int:6:exp:3:int:16:int:0:int:16:int:0 + +AES-256 CBC - Encrypt and decrypt 32 bytes in multiple parts with PKCS7 padding 1 +depends_on:0:1:2 +7:exp:17:int:256:int:16:int:16:exp:3:int:16:int:16:int:0:int:32 + +AES Decrypt test vector #0 +depends_on:0:2:1:2 +8:exp:0:exp:9:hex:"ffffffffe00000000000000000000000":hex:"00000000000000000000000000000000":hex:"23f710842b9bb9c32f26648c786807ca":hex:"00000000000000000000000000000000":hex:"":hex:"":exp:18:int:0 + +AES Decrypt test vector #1 +depends_on:0:1:2 +8:exp:0:exp:7:hex:"ffffffffe00000000000000000000000":hex:"00000000000000000000000000000000":hex:"23f710842b9bb9c32f26648c786807ca":hex:"00000000000000000000000000000000":hex:"":hex:"":int:0:int:0 + +AES Decrypt test vector #2 +depends_on:0:1:2 +8:exp:16:exp:7:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"707b1dbb0ffa40ef7d95def421233fae":hex:"fffffffff80000000000000000000000":hex:"":hex:"":int:0:int:0 + +AES Decrypt test vector #3 +depends_on:0:1:2 +8:exp:17:exp:7:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"49af6b372135acef10132e548f217b17":hex:"ff000000000000000000000000000000":hex:"":hex:"":int:0:int:0 + +AES Decrypt test vector #4 +depends_on:0:7 +8:exp:10:exp:3:hex:"fffffffe000000000000000000000000":hex:"00000000000000000000000000000000":hex:"1114bc2028009b923f0b01915ce5e7c4":hex:"00000000000000000000000000000000":hex:"":hex:"":int:0:int:0 + +AES Decrypt test vector #5 +depends_on:0:7 +8:exp:19:exp:3:hex:"ffffffffffffffffffffffffffffffffffffffffffe00000":hex:"00000000000000000000000000000000":hex:"60136703374f64e860b48ce31f930716":hex:"00000000000000000000000000000000":hex:"":hex:"":int:0:int:0 + +AES Decrypt test vector #6 +depends_on:0:7 +8:exp:20:exp:3:hex:"ffffffffff800000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"be66cfea2fecd6bf0ec7b4352c99bcaa":hex:"00000000000000000000000000000000":hex:"":hex:"":int:0:int:0 + +AES Decrypt test vector #7 +depends_on:0:8 +8:exp:11:exp:3:hex:"2B7E151628AED2A6ABF7158809CF4F3C":hex:"000102030405060708090A0B0C0D0E0F":hex:"3B3FD92EB72DAD20333449F8E83CFB4A7789508d16918f03f53c52dac54ed8259740051e9c5fecf64344f7a82260edcc304c6528f659c77866a510d9c1d6ae5e":hex:"6BC1BEE22E409F96E93D7E117393172AAE2D8A571E03AC9C9EB76FAC45AF8E5130C81C46A35CE411E5FBC1191A0A52EFF69F2445DF4F9B17AD2B417BE66C3710":hex:"":hex:"":int:0:int:0 + +AES Decrypt test vector #8 +depends_on:0:8 +8:exp:12:exp:3:hex:"8E73B0F7DA0E6452C810F32B809079E562F8EAD2522C6B7B":hex:"000102030405060708090A0B0C0D0E0F":hex:"CDC80D6FDDF18CAB34C25909C99A4174fcc28b8d4c63837c09e81700c11004018d9a9aeac0f6596f559c6d4daf59a5f26d9f200857ca6c3e9cac524bd9acc92a":hex:"6BC1BEE22E409F96E93D7E117393172AAE2D8A571E03AC9C9EB76FAC45AF8E5130C81C46A35CE411E5FBC1191A0A52EFF69F2445DF4F9B17AD2B417BE66C3710":hex:"":hex:"":int:0:int:0 + +AES Decrypt test vector #9 +depends_on:0:8 +8:exp:13:exp:3:hex:"603DEB1015CA71BE2B73AEF0857D77811F352C073B6108D72D9810A30914DFF4":hex:"000102030405060708090A0B0C0D0E0F":hex:"DC7E84BFDA79164B7ECD8486985D38604febdc6740d20b3ac88f6ad82a4fb08d71ab47a086e86eedf39d1c5bba97c4080126141d67f37be8538f5a8be740e484":hex:"6BC1BEE22E409F96E93D7E117393172AAE2D8A571E03AC9C9EB76FAC45AF8E5130C81C46A35CE411E5FBC1191A0A52EFF69F2445DF4F9B17AD2B417BE66C3710":hex:"":hex:"":int:0:int:0 + +AES-128-ECB Encrypt NIST KAT #1 +depends_on:0 +10:exp:21:exp:22:hex:"00000000000000000000000000000000":hex:"f34481ec3cc627bacd5dc3fb08f273e6":hex:"0336763e966d92595a567cc9ce537f5e":int:0 + +AES-128-ECB Encrypt NIST KAT #2 +depends_on:0 +10:exp:21:exp:22:hex:"00000000000000000000000000000000":hex:"9798c4640bad75c7c3227db910174e72":hex:"a9a1631bf4996954ebc093957b234589":int:0 + +AES-128-ECB Encrypt NIST KAT #3 +depends_on:0 +10:exp:21:exp:22:hex:"00000000000000000000000000000000":hex:"96ab5c2ff612d9dfaae8c31f30c42168":hex:"ff4f8391a6a40ca5b25d23bedd44a597":int:0 + +AES-128-ECB Encrypt NIST KAT #4 +depends_on:0 +10:exp:21:exp:22:hex:"e0000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"72a1da770f5d7ac4c9ef94d822affd97":int:0 + +AES-128-ECB Encrypt NIST KAT #5 +depends_on:0 +10:exp:21:exp:22:hex:"f0000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"970014d634e2b7650777e8e84d03ccd8":int:0 + +AES-128-ECB Encrypt NIST KAT #6 +depends_on:0 +10:exp:21:exp:22:hex:"f8000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"f17e79aed0db7e279e955b5f493875a7":int:0 + +AES-128-ECB Encrypt NIST KAT #7 +depends_on:0 +10:exp:21:exp:22:hex:"fffffffffffff0000000000000000000":hex:"00000000000000000000000000000000":hex:"7b90785125505fad59b13c186dd66ce3":int:0 + +AES-128-ECB Encrypt NIST KAT #8 +depends_on:0 +10:exp:21:exp:22:hex:"fffffffffffff8000000000000000000":hex:"00000000000000000000000000000000":hex:"8b527a6aebdaec9eaef8eda2cb7783e5":int:0 + +AES-128-ECB Encrypt NIST KAT #9 +depends_on:0 +10:exp:21:exp:22:hex:"fffffffffffffc000000000000000000":hex:"00000000000000000000000000000000":hex:"43fdaf53ebbc9880c228617d6a9b548b":int:0 + +AES-128-ECB Encrypt NIST KAT #10 +depends_on:0 +10:exp:21:exp:22:hex:"ffffffffffffffffffffffffffffc000":hex:"00000000000000000000000000000000":hex:"70c46bb30692be657f7eaa93ebad9897":int:0 + +AES-128-ECB Encrypt NIST KAT #11 +depends_on:0 +10:exp:21:exp:22:hex:"ffffffffffffffffffffffffffffe000":hex:"00000000000000000000000000000000":hex:"323994cfb9da285a5d9642e1759b224a":int:0 + +AES-128-ECB Encrypt NIST KAT #12 +depends_on:0 +10:exp:21:exp:22:hex:"fffffffffffffffffffffffffffff000":hex:"00000000000000000000000000000000":hex:"1dbf57877b7b17385c85d0b54851e371":int:0 + +AES-128-ECB Encrypt NIST KAT #13 +depends_on:0 +10:exp:21:exp:22:hex:"00000000000000000000000000000000":hex:"ffffffffffffffc00000000000000000":hex:"3a4d354f02bb5a5e47d39666867f246a":int:0 + +AES-128-ECB Encrypt NIST KAT #14 +depends_on:0 +10:exp:21:exp:22:hex:"00000000000000000000000000000000":hex:"ffffffffffffffe00000000000000000":hex:"d451b8d6e1e1a0ebb155fbbf6e7b7dc3":int:0 + +AES-128-ECB Encrypt NIST KAT #15 +depends_on:0 +10:exp:21:exp:22:hex:"00000000000000000000000000000000":hex:"fffffffffffffff00000000000000000":hex:"6898d4f42fa7ba6a10ac05e87b9f2080":int:0 + +AES-128-ECB Encrypt NIST KAT #16 +depends_on:0 +10:exp:21:exp:22:hex:"00000000000000000000000000000000":hex:"ffffffffffffffffffffffffe0000000":hex:"082eb8be35f442fb52668e16a591d1d6":int:0 + +AES-128-ECB Encrypt NIST KAT #17 +depends_on:0 +10:exp:21:exp:22:hex:"00000000000000000000000000000000":hex:"fffffffffffffffffffffffff0000000":hex:"e656f9ecf5fe27ec3e4a73d00c282fb3":int:0 + +AES-128-ECB Encrypt NIST KAT #18 +depends_on:0 +10:exp:21:exp:22:hex:"00000000000000000000000000000000":hex:"fffffffffffffffffffffffff8000000":hex:"2ca8209d63274cd9a29bb74bcd77683a":int:0 + +AES-128-ECB Decrypt NIST KAT #1 +depends_on:0 +10:exp:21:exp:23:hex:"00000000000000000000000000000000":hex:"db4f1aa530967d6732ce4715eb0ee24b":hex:"ff000000000000000000000000000000":int:0 + +AES-128-ECB Decrypt NIST KAT #2 +depends_on:0 +10:exp:21:exp:23:hex:"00000000000000000000000000000000":hex:"a81738252621dd180a34f3455b4baa2f":hex:"ff800000000000000000000000000000":int:0 + +AES-128-ECB Decrypt NIST KAT #3 +depends_on:0 +10:exp:21:exp:23:hex:"00000000000000000000000000000000":hex:"77e2b508db7fd89234caf7939ee5621a":hex:"ffc00000000000000000000000000000":int:0 + +AES-128-ECB Decrypt NIST KAT #4 +depends_on:0 +10:exp:21:exp:23:hex:"00000000000000000000000000000000":hex:"dc43be40be0e53712f7e2bf5ca707209":hex:"6a118a874519e64e9963798a503f1d35":int:0 + +AES-128-ECB Decrypt NIST KAT #5 +depends_on:0 +10:exp:21:exp:23:hex:"00000000000000000000000000000000":hex:"92beedab1895a94faa69b632e5cc47ce":hex:"cb9fceec81286ca3e989bd979b0cb284":int:0 + +AES-128-ECB Decrypt NIST KAT #6 +depends_on:0 +10:exp:21:exp:23:hex:"00000000000000000000000000000000":hex:"459264f4798f6a78bacb89c15ed3d601":hex:"b26aeb1874e47ca8358ff22378f09144":int:0 + +AES-128-ECB Decrypt NIST KAT #7 +depends_on:0 +10:exp:21:exp:23:hex:"b69418a85332240dc82492353956ae0c":hex:"a303d940ded8f0baff6f75414cac5243":hex:"00000000000000000000000000000000":int:0 + +AES-128-ECB Decrypt NIST KAT #8 +depends_on:0 +10:exp:21:exp:23:hex:"71b5c08a1993e1362e4d0ce9b22b78d5":hex:"c2dabd117f8a3ecabfbb11d12194d9d0":hex:"00000000000000000000000000000000":int:0 + +AES-128-ECB Decrypt NIST KAT #9 +depends_on:0 +10:exp:21:exp:23:hex:"e234cdca2606b81f29408d5f6da21206":hex:"fff60a4740086b3b9c56195b98d91a7b":hex:"00000000000000000000000000000000":int:0 + +AES-128-ECB Decrypt NIST KAT #10 +depends_on:0 +10:exp:21:exp:23:hex:"ffffffffffffffff0000000000000000":hex:"84be19e053635f09f2665e7bae85b42d":hex:"00000000000000000000000000000000":int:0 + +AES-128-ECB Decrypt NIST KAT #11 +depends_on:0 +10:exp:21:exp:23:hex:"ffffffffffffffff8000000000000000":hex:"32cd652842926aea4aa6137bb2be2b5e":hex:"00000000000000000000000000000000":int:0 + +AES-192-ECB Encrypt NIST KAT #1 +depends_on:0 +10:exp:24:exp:22:hex:"000000000000000000000000000000000000000000000000":hex:"fffffffffffffffffffff80000000000":hex:"156f07767a85a4312321f63968338a01":int:0 + +AES-192-ECB Encrypt NIST KAT #2 +depends_on:0 +10:exp:24:exp:22:hex:"000000000000000000000000000000000000000000000000":hex:"fffffffffffffffffffffc0000000000":hex:"15eec9ebf42b9ca76897d2cd6c5a12e2":int:0 + +AES-192-ECB Encrypt NIST KAT #3 +depends_on:0 +10:exp:24:exp:22:hex:"000000000000000000000000000000000000000000000000":hex:"fffffffffffffffffffffe0000000000":hex:"db0d3a6fdcc13f915e2b302ceeb70fd8":int:0 + +AES-192-ECB Encrypt NIST KAT #4 +depends_on:0 +10:exp:24:exp:22:hex:"000000000000000000000000000000000000000000000000":hex:"51719783d3185a535bd75adc65071ce1":hex:"4f354592ff7c8847d2d0870ca9481b7c":int:0 + +AES-192-ECB Encrypt NIST KAT #5 +depends_on:0 +10:exp:24:exp:22:hex:"000000000000000000000000000000000000000000000000":hex:"26aa49dcfe7629a8901a69a9914e6dfd":hex:"d5e08bf9a182e857cf40b3a36ee248cc":int:0 + +AES-192-ECB Encrypt NIST KAT #6 +depends_on:0 +10:exp:24:exp:22:hex:"000000000000000000000000000000000000000000000000":hex:"941a4773058224e1ef66d10e0a6ee782":hex:"067cd9d3749207791841562507fa9626":int:0 + +AES-192-ECB Encrypt NIST KAT #7 +depends_on:0 +10:exp:24:exp:22:hex:"d2926527e0aa9f37b45e2ec2ade5853ef807576104c7ace3":hex:"00000000000000000000000000000000":hex:"dd619e1cf204446112e0af2b9afa8f8c":int:0 + +AES-192-ECB Encrypt NIST KAT #8 +depends_on:0 +10:exp:24:exp:22:hex:"982215f4e173dfa0fcffe5d3da41c4812c7bcc8ed3540f93":hex:"00000000000000000000000000000000":hex:"d4f0aae13c8fe9339fbf9e69ed0ad74d":int:0 + +AES-192-ECB Encrypt NIST KAT #9 +depends_on:0 +10:exp:24:exp:22:hex:"98c6b8e01e379fbd14e61af6af891596583565f2a27d59e9":hex:"00000000000000000000000000000000":hex:"19c80ec4a6deb7e5ed1033dda933498f":int:0 + +AES-192-ECB Encrypt NIST KAT #10 +depends_on:0 +10:exp:24:exp:22:hex:"fffffffffffffffffffffffffff800000000000000000000":hex:"00000000000000000000000000000000":hex:"8dd274bd0f1b58ae345d9e7233f9b8f3":int:0 + +AES-192-ECB Encrypt NIST KAT #11 +depends_on:0 +10:exp:24:exp:22:hex:"fffffffffffffffffffffffffffc00000000000000000000":hex:"00000000000000000000000000000000":hex:"9d6bdc8f4ce5feb0f3bed2e4b9a9bb0b":int:0 + +AES-192-ECB Encrypt NIST KAT #12 +depends_on:0 +10:exp:24:exp:22:hex:"fffffffffffffffffffffffffffe00000000000000000000":hex:"00000000000000000000000000000000":hex:"fd5548bcf3f42565f7efa94562528d46":int:0 + +AES-192-ECB Decrypt NIST KAT #1 +depends_on:0 +10:exp:24:exp:23:hex:"fffffffffffffffffffffffffffffffff000000000000000":hex:"bb2852c891c5947d2ed44032c421b85f":hex:"00000000000000000000000000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #2 +depends_on:0 +10:exp:24:exp:23:hex:"fffffffffffffffffffffffffffffffff800000000000000":hex:"1b9f5fbd5e8a4264c0a85b80409afa5e":hex:"00000000000000000000000000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #3 +depends_on:0 +10:exp:24:exp:23:hex:"fffffffffffffffffffffffffffffffffc00000000000000":hex:"30dab809f85a917fe924733f424ac589":hex:"00000000000000000000000000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #4 +depends_on:0 +10:exp:24:exp:23:hex:"61257134a518a0d57d9d244d45f6498cbc32f2bafc522d79":hex:"cfe4d74002696ccf7d87b14a2f9cafc9":hex:"00000000000000000000000000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #5 +depends_on:0 +10:exp:24:exp:23:hex:"b0ab0a6a818baef2d11fa33eac947284fb7d748cfb75e570":hex:"d2eafd86f63b109b91f5dbb3a3fb7e13":hex:"00000000000000000000000000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #6 +depends_on:0 +10:exp:24:exp:23:hex:"ee053aa011c8b428cdcc3636313c54d6a03cac01c71579d6":hex:"9b9fdd1c5975655f539998b306a324af":hex:"00000000000000000000000000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #7 +depends_on:0 +10:exp:24:exp:23:hex:"000000000000000000000000000000000000000000000000":hex:"275cfc0413d8ccb70513c3859b1d0f72":hex:"1b077a6af4b7f98229de786d7516b639":int:0 + +AES-192-ECB Decrypt NIST KAT #8 +depends_on:0 +10:exp:24:exp:23:hex:"000000000000000000000000000000000000000000000000":hex:"c9b8135ff1b5adc413dfd053b21bd96d":hex:"9c2d8842e5f48f57648205d39a239af1":int:0 + +AES-192-ECB Decrypt NIST KAT #9 +depends_on:0 +10:exp:24:exp:23:hex:"000000000000000000000000000000000000000000000000":hex:"4a3650c3371ce2eb35e389a171427440":hex:"bff52510095f518ecca60af4205444bb":int:0 + +AES-192-ECB Decrypt NIST KAT #10 +depends_on:0 +10:exp:24:exp:23:hex:"000000000000000000000000000000000000000000000000":hex:"b2099795e88cc158fd75ea133d7e7fbe":hex:"ffffffffffffffffffffc00000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #11 +depends_on:0 +10:exp:24:exp:23:hex:"000000000000000000000000000000000000000000000000":hex:"a6cae46fb6fadfe7a2c302a34242817b":hex:"ffffffffffffffffffffe00000000000":int:0 + +AES-192-ECB Decrypt NIST KAT #12 +depends_on:0 +10:exp:24:exp:23:hex:"000000000000000000000000000000000000000000000000":hex:"026a7024d6a902e0b3ffccbaa910cc3f":hex:"fffffffffffffffffffff00000000000":int:0 + +AES-256-ECB Encrypt NIST KAT #1 +depends_on:0 +10:exp:25:exp:22:hex:"c1cc358b449909a19436cfbb3f852ef8bcb5ed12ac7058325f56e6099aab1a1c":hex:"00000000000000000000000000000000":hex:"352065272169abf9856843927d0674fd":int:0 + +AES-256-ECB Encrypt NIST KAT #2 +depends_on:0 +10:exp:25:exp:22:hex:"984ca75f4ee8d706f46c2d98c0bf4a45f5b00d791c2dfeb191b5ed8e420fd627":hex:"00000000000000000000000000000000":hex:"4307456a9e67813b452e15fa8fffe398":int:0 + +AES-256-ECB Encrypt NIST KAT #3 +depends_on:0 +10:exp:25:exp:22:hex:"b43d08a447ac8609baadae4ff12918b9f68fc1653f1269222f123981ded7a92f":hex:"00000000000000000000000000000000":hex:"4663446607354989477a5c6f0f007ef4":int:0 + +AES-256-ECB Encrypt NIST KAT #4 +depends_on:0 +10:exp:25:exp:22:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"0b24af36193ce4665f2825d7b4749c98":hex:"a9ff75bd7cf6613d3731c77c3b6d0c04":int:0 + +AES-256-ECB Encrypt NIST KAT #5 +depends_on:0 +10:exp:25:exp:22:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"761c1fe41a18acf20d241650611d90f1":hex:"623a52fcea5d443e48d9181ab32c7421":int:0 + +AES-256-ECB Encrypt NIST KAT #6 +depends_on:0 +10:exp:25:exp:22:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"8a560769d605868ad80d819bdba03771":hex:"38f2c7ae10612415d27ca190d27da8b4":int:0 + +AES-256-ECB Encrypt NIST KAT #7 +depends_on:0 +10:exp:25:exp:22:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"ffffff80000000000000000000000000":hex:"36aff0ef7bf3280772cf4cac80a0d2b2":int:0 + +AES-256-ECB Encrypt NIST KAT #8 +depends_on:0 +10:exp:25:exp:22:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"ffffffc0000000000000000000000000":hex:"1f8eedea0f62a1406d58cfc3ecea72cf":int:0 + +AES-256-ECB Encrypt NIST KAT #9 +depends_on:0 +10:exp:25:exp:22:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"ffffffe0000000000000000000000000":hex:"abf4154a3375a1d3e6b1d454438f95a6":int:0 + +AES-256-ECB Encrypt NIST KAT #10 +depends_on:0 +10:exp:25:exp:22:hex:"ffffffffffffffffffffffffffffffffffff8000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"45d089c36d5c5a4efc689e3b0de10dd5":int:0 + +AES-256-ECB Encrypt NIST KAT #11 +depends_on:0 +10:exp:25:exp:22:hex:"ffffffffffffffffffffffffffffffffffffc000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"b4da5df4becb5462e03a0ed00d295629":int:0 + +AES-256-ECB Encrypt NIST KAT #12 +depends_on:0 +10:exp:25:exp:22:hex:"ffffffffffffffffffffffffffffffffffffe000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"dcf4e129136c1a4b7a0f38935cc34b2b":int:0 + +AES-256-ECB Decrypt NIST KAT #1 +depends_on:0 +10:exp:25:exp:23:hex:"fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000":hex:"edf61ae362e882ddc0167474a7a77f3a":hex:"00000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #2 +depends_on:0 +10:exp:25:exp:23:hex:"fffffffffffffffffffffffffffffffffffffffffffffff80000000000000000":hex:"6168b00ba7859e0970ecfd757efecf7c":hex:"00000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #3 +depends_on:0 +10:exp:25:exp:23:hex:"fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000":hex:"d1415447866230d28bb1ea18a4cdfd02":hex:"00000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #4 +depends_on:0 +10:exp:25:exp:23:hex:"f8be9ba615c5a952cabbca24f68f8593039624d524c816acda2c9183bd917cb9":hex:"a3944b95ca0b52043584ef02151926a8":hex:"00000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #5 +depends_on:0 +10:exp:25:exp:23:hex:"797f8b3d176dac5b7e34a2d539c4ef367a16f8635f6264737591c5c07bf57a3e":hex:"a74289fe73a4c123ca189ea1e1b49ad5":hex:"00000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #6 +depends_on:0 +10:exp:25:exp:23:hex:"6838d40caf927749c13f0329d331f448e202c73ef52c5f73a37ca635d4c47707":hex:"b91d4ea4488644b56cf0812fa7fcf5fc":hex:"00000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #7 +depends_on:0 +10:exp:25:exp:23:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"623a52fcea5d443e48d9181ab32c7421":hex:"761c1fe41a18acf20d241650611d90f1":int:0 + +AES-256-ECB Decrypt NIST KAT #8 +depends_on:0 +10:exp:25:exp:23:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"38f2c7ae10612415d27ca190d27da8b4":hex:"8a560769d605868ad80d819bdba03771":int:0 + +AES-256-ECB Decrypt NIST KAT #9 +depends_on:0 +10:exp:25:exp:23:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"1bc704f1bce135ceb810341b216d7abe":hex:"91fbef2d15a97816060bee1feaa49afe":int:0 + +AES-256-ECB Decrypt NIST KAT #10 +depends_on:0 +10:exp:25:exp:23:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"ddc6bf790c15760d8d9aeb6f9a75fd4e":hex:"80000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #11 +depends_on:0 +10:exp:25:exp:23:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"0a6bdc6d4c1e6280301fd8e97ddbe601":hex:"c0000000000000000000000000000000":int:0 + +AES-256-ECB Decrypt NIST KAT #12 +depends_on:0 +10:exp:25:exp:23:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"9b80eefb7ebe2d2b16247aa0efc72f5d":hex:"e0000000000000000000000000000000":int:0 + +AES-128-ECB crypt Encrypt NIST KAT #1 +depends_on:0 +11:exp:21:exp:22:hex:"00000000000000000000000000000000":hex:"":hex:"f34481ec3cc627bacd5dc3fb08f273e6":hex:"0336763e966d92595a567cc9ce537f5e":int:0:int:0 + +AES-128-ECB crypt Encrypt NIST KAT #2 +depends_on:0 +11:exp:21:exp:22:hex:"f0000000000000000000000000000000":hex:"":hex:"00000000000000000000000000000000":hex:"970014d634e2b7650777e8e84d03ccd8":int:0:int:0 + +AES-128-ECB crypt Encrypt NIST KAT #3 +depends_on:0 +11:exp:21:exp:22:hex:"00000000000000000000000000000000":hex:"":hex:"ffffffffffffffc00000000000000000":hex:"3a4d354f02bb5a5e47d39666867f246a":int:0:int:0 + +AES-128-ECB crypt Decrypt NIST KAT #1 +depends_on:0 +11:exp:21:exp:23:hex:"00000000000000000000000000000000":hex:"":hex:"db4f1aa530967d6732ce4715eb0ee24b":hex:"ff000000000000000000000000000000":int:0:int:0 + +AES-128-ECB crypt Decrypt NIST KAT #2 +depends_on:0 +11:exp:21:exp:23:hex:"b69418a85332240dc82492353956ae0c":hex:"":hex:"a303d940ded8f0baff6f75414cac5243":hex:"00000000000000000000000000000000":int:0:int:0 + +AES-128-ECB crypt Decrypt NIST KAT #3 +depends_on:0 +11:exp:21:exp:23:hex:"ffffffffffffffff8000000000000000":hex:"":hex:"32cd652842926aea4aa6137bb2be2b5e":hex:"00000000000000000000000000000000":int:0:int:0 + +AES-192-ECB crypt Encrypt NIST KAT #1 +depends_on:0 +11:exp:24:exp:22:hex:"000000000000000000000000000000000000000000000000":hex:"":hex:"fffffffffffffffffffff80000000000":hex:"156f07767a85a4312321f63968338a01":int:0:int:0 + +AES-192-ECB crypt Encrypt NIST KAT #2 +depends_on:0 +11:exp:24:exp:22:hex:"000000000000000000000000000000000000000000000000":hex:"":hex:"51719783d3185a535bd75adc65071ce1":hex:"4f354592ff7c8847d2d0870ca9481b7c":int:0:int:0 + +AES-192-ECB crypt Encrypt NIST KAT #3 +depends_on:0 +11:exp:24:exp:22:hex:"d2926527e0aa9f37b45e2ec2ade5853ef807576104c7ace3":hex:"":hex:"00000000000000000000000000000000":hex:"dd619e1cf204446112e0af2b9afa8f8c":int:0:int:0 + +AES-192-ECB crypt Encrypt NIST KAT #4 +depends_on:0 +11:exp:24:exp:22:hex:"fffffffffffffffffffffffffff800000000000000000000":hex:"":hex:"00000000000000000000000000000000":hex:"8dd274bd0f1b58ae345d9e7233f9b8f3":int:0:int:0 + +AES-192-ECB crypt Decrypt NIST KAT #1 +depends_on:0 +11:exp:24:exp:23:hex:"fffffffffffffffffffffffffffffffff000000000000000":hex:"":hex:"bb2852c891c5947d2ed44032c421b85f":hex:"00000000000000000000000000000000":int:0:int:0 + +AES-192-ECB crypt Decrypt NIST KAT #2 +depends_on:0 +11:exp:24:exp:23:hex:"61257134a518a0d57d9d244d45f6498cbc32f2bafc522d79":hex:"":hex:"cfe4d74002696ccf7d87b14a2f9cafc9":hex:"00000000000000000000000000000000":int:0:int:0 + +AES-192-ECB crypt Decrypt NIST KAT #3 +depends_on:0 +11:exp:24:exp:23:hex:"000000000000000000000000000000000000000000000000":hex:"":hex:"275cfc0413d8ccb70513c3859b1d0f72":hex:"1b077a6af4b7f98229de786d7516b639":int:0:int:0 + +AES-192-ECB crypt Decrypt NIST KAT #4 +depends_on:0 +11:exp:24:exp:23:hex:"000000000000000000000000000000000000000000000000":hex:"":hex:"b2099795e88cc158fd75ea133d7e7fbe":hex:"ffffffffffffffffffffc00000000000":int:0:int:0 + +AES-256-ECB crypt Encrypt NIST KAT #1 +depends_on:0 +11:exp:25:exp:22:hex:"c1cc358b449909a19436cfbb3f852ef8bcb5ed12ac7058325f56e6099aab1a1c":hex:"":hex:"00000000000000000000000000000000":hex:"352065272169abf9856843927d0674fd":int:0:int:0 + +AES-256-ECB crypt Encrypt NIST KAT #2 +depends_on:0 +11:exp:25:exp:22:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"":hex:"0b24af36193ce4665f2825d7b4749c98":hex:"a9ff75bd7cf6613d3731c77c3b6d0c04":int:0:int:0 + +AES-256-ECB crypt Encrypt NIST KAT #3 +depends_on:0 +11:exp:25:exp:22:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"":hex:"ffffff80000000000000000000000000":hex:"36aff0ef7bf3280772cf4cac80a0d2b2":int:0:int:0 + +AES-256-ECB crypt Encrypt NIST KAT #4 +depends_on:0 +11:exp:25:exp:22:hex:"ffffffffffffffffffffffffffffffffffff8000000000000000000000000000":hex:"":hex:"00000000000000000000000000000000":hex:"45d089c36d5c5a4efc689e3b0de10dd5":int:0:int:0 + +AES-256-ECB crypt Decrypt NIST KAT #1 +depends_on:0 +11:exp:25:exp:23:hex:"fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000":hex:"":hex:"edf61ae362e882ddc0167474a7a77f3a":hex:"00000000000000000000000000000000":int:0:int:0 + +AES-256-ECB crypt Decrypt NIST KAT #2 +depends_on:0 +11:exp:25:exp:23:hex:"f8be9ba615c5a952cabbca24f68f8593039624d524c816acda2c9183bd917cb9":hex:"":hex:"a3944b95ca0b52043584ef02151926a8":hex:"00000000000000000000000000000000":int:0:int:0 + +AES-256-ECB crypt Decrypt NIST KAT #3 +depends_on:0 +11:exp:25:exp:23:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"":hex:"623a52fcea5d443e48d9181ab32c7421":hex:"761c1fe41a18acf20d241650611d90f1":int:0:int:0 + +AES-256-ECB crypt Decrypt NIST KAT #4 +depends_on:0 +11:exp:25:exp:23:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"":hex:"ddc6bf790c15760d8d9aeb6f9a75fd4e":hex:"80000000000000000000000000000000":int:0:int:0 + +AES-128-CBC crypt Encrypt NIST KAT #1 +depends_on:0:1 +11:exp:0:exp:22:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"80000000000000000000000000000000":hex:"3ad78e726c1ec02b7ebfe92b23d9ec34":int:0:int:0 + +AES-128-CBC crypt Encrypt NIST KAT #2 +depends_on:0:1 +11:exp:0:exp:22:hex:"ffffffffffffffffffffffffffffe000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"323994cfb9da285a5d9642e1759b224a":int:0:int:0 + +AES-128-CBC crypt Encrypt NIST KAT #3 +depends_on:0:1 +11:exp:0:exp:22:hex:"10a58869d74be5a374cf867cfb473859":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"6d251e6944b051e04eaa6fb4dbf78465":int:0:int:0 + +AES-128-CBC crypt Encrypt NIST KAT #4 +depends_on:0:1 +11:exp:0:exp:22:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"f34481ec3cc627bacd5dc3fb08f273e6":hex:"0336763e966d92595a567cc9ce537f5e":int:0:int:0 + +AES-128-CBC crypt Decrypt NIST KAT #1 +depends_on:0:1 +11:exp:0:exp:23:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"3ad78e726c1ec02b7ebfe92b23d9ec34":hex:"80000000000000000000000000000000":int:0:int:0 + +AES-128-CBC crypt Decrypt NIST KAT #2 +depends_on:0:1 +11:exp:0:exp:23:hex:"ffffc000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"df556a33438db87bc41b1752c55e5e49":hex:"00000000000000000000000000000000":int:0:int:0 + +AES-128-CBC crypt Decrypt NIST KAT #3 +depends_on:0:1 +11:exp:0:exp:23:hex:"10a58869d74be5a374cf867cfb473859":hex:"00000000000000000000000000000000":hex:"6d251e6944b051e04eaa6fb4dbf78465":hex:"00000000000000000000000000000000":int:0:int:0 + +AES-128-CBC crypt Decrypt NIST KAT #4 +depends_on:0:1 +11:exp:0:exp:23:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"0336763e966d92595a567cc9ce537f5e":hex:"f34481ec3cc627bacd5dc3fb08f273e6":int:0:int:0 + +AES-192-CBC crypt Encrypt NIST KAT #1 +depends_on:0:1 +11:exp:16:exp:22:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"80000000000000000000000000000000":hex:"6cd02513e8d4dc986b4afe087a60bd0c":int:0:int:0 + +AES-192-CBC crypt Encrypt NIST KAT #2 +depends_on:0:1 +11:exp:16:exp:22:hex:"ff0000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"833f71258d53036b02952c76c744f5a1":int:0:int:0 + +AES-192-CBC crypt Encrypt NIST KAT #3 +depends_on:0:1 +11:exp:16:exp:22:hex:"e9f065d7c13573587f7875357dfbb16c53489f6a4bd0f7cd":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"0956259c9cd5cfd0181cca53380cde06":int:0:int:0 + +AES-192-CBC crypt Encrypt NIST KAT #4 +depends_on:0:1 +11:exp:16:exp:22:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"1b077a6af4b7f98229de786d7516b639":hex:"275cfc0413d8ccb70513c3859b1d0f72":int:0:int:0 + +AES-192-CBC crypt Decrypt NIST KAT #1 +depends_on:0:1 +11:exp:16:exp:23:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"6cd02513e8d4dc986b4afe087a60bd0c":hex:"80000000000000000000000000000000":int:0:int:0 + +AES-192-CBC crypt Decrypt NIST KAT #2 +depends_on:0:1 +11:exp:16:exp:23:hex:"ffe000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"7ababc4b3f516c9aafb35f4140b548f9":hex:"00000000000000000000000000000000":int:0:int:0 + +AES-192-CBC crypt Decrypt NIST KAT #3 +depends_on:0:1 +11:exp:16:exp:23:hex:"e9f065d7c13573587f7875357dfbb16c53489f6a4bd0f7cd":hex:"00000000000000000000000000000000":hex:"0956259c9cd5cfd0181cca53380cde06":hex:"00000000000000000000000000000000":int:0:int:0 + +AES-192-CBC crypt Decrypt NIST KAT #4 +depends_on:0:1 +11:exp:16:exp:23:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"275cfc0413d8ccb70513c3859b1d0f72":hex:"1b077a6af4b7f98229de786d7516b639":int:0:int:0 + +AES-256-CBC crypt Encrypt NIST KAT #1 +depends_on:0:1 +11:exp:17:exp:22:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"80000000000000000000000000000000":hex:"ddc6bf790c15760d8d9aeb6f9a75fd4e":int:0:int:0 + +AES-256-CBC crypt Encrypt NIST KAT #2 +depends_on:0:1 +11:exp:17:exp:22:hex:"ff00000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"ec52a212f80a09df6317021bc2a9819e":int:0:int:0 + +AES-256-CBC crypt Encrypt NIST KAT #3 +depends_on:0:1 +11:exp:17:exp:22:hex:"c47b0294dbbbee0fec4757f22ffeee3587ca4730c3d33b691df38bab076bc558":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"46f2fb342d6f0ab477476fc501242c5f":int:0:int:0 + +AES-256-CBC crypt Encrypt NIST KAT #4 +depends_on:0:1 +11:exp:17:exp:22:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"014730f80ac625fe84f026c60bfd547d":hex:"5c9d844ed46f9885085e5d6a4f94c7d7":int:0:int:0 + +AES-256-CBC crypt Decrypt NIST KAT #1 +depends_on:0:1 +11:exp:17:exp:23:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"ddc6bf790c15760d8d9aeb6f9a75fd4e":hex:"80000000000000000000000000000000":int:0:int:0 + +AES-256-CBC crypt Decrypt NIST KAT #2 +depends_on:0:1 +11:exp:17:exp:23:hex:"ffe0000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"d1ccb9b1337002cbac42c520b5d67722":hex:"00000000000000000000000000000000":int:0:int:0 + +AES-256-CBC crypt Decrypt NIST KAT #3 +depends_on:0:1 +11:exp:17:exp:23:hex:"c47b0294dbbbee0fec4757f22ffeee3587ca4730c3d33b691df38bab076bc558":hex:"00000000000000000000000000000000":hex:"46f2fb342d6f0ab477476fc501242c5f":hex:"00000000000000000000000000000000":int:0:int:0 + +AES-256-CBC crypt Decrypt NIST KAT #4 +depends_on:0:1 +11:exp:17:exp:23:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"5c9d844ed46f9885085e5d6a4f94c7d7":hex:"014730f80ac625fe84f026c60bfd547d":int:0:int:0 + +AES-128-CBC crypt Encrypt NIST KAT #1 PSA +depends_on:10:0:1 +11:exp:0:exp:22:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"80000000000000000000000000000000":hex:"3ad78e726c1ec02b7ebfe92b23d9ec34":int:0:int:1 + +AES-128-CBC crypt Encrypt NIST KAT #2 PSA +depends_on:10:0:1 +11:exp:0:exp:22:hex:"ffffffffffffffffffffffffffffe000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"323994cfb9da285a5d9642e1759b224a":int:0:int:1 + +AES-128-CBC crypt Encrypt NIST KAT #3 PSA +depends_on:10:0:1 +11:exp:0:exp:22:hex:"10a58869d74be5a374cf867cfb473859":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"6d251e6944b051e04eaa6fb4dbf78465":int:0:int:1 + +AES-128-CBC crypt Encrypt NIST KAT #4 PSA +depends_on:10:0:1 +11:exp:0:exp:22:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"f34481ec3cc627bacd5dc3fb08f273e6":hex:"0336763e966d92595a567cc9ce537f5e":int:0:int:1 + +AES-128-CBC crypt Decrypt NIST KAT #1 PSA +depends_on:10:0:1 +11:exp:0:exp:23:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"3ad78e726c1ec02b7ebfe92b23d9ec34":hex:"80000000000000000000000000000000":int:0:int:1 + +AES-128-CBC crypt Decrypt NIST KAT #2 PSA +depends_on:10:0:1 +11:exp:0:exp:23:hex:"ffffc000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"df556a33438db87bc41b1752c55e5e49":hex:"00000000000000000000000000000000":int:0:int:1 + +AES-128-CBC crypt Decrypt NIST KAT #3 PSA +depends_on:10:0:1 +11:exp:0:exp:23:hex:"10a58869d74be5a374cf867cfb473859":hex:"00000000000000000000000000000000":hex:"6d251e6944b051e04eaa6fb4dbf78465":hex:"00000000000000000000000000000000":int:0:int:1 + +AES-128-CBC crypt Decrypt NIST KAT #4 PSA +depends_on:10:0:1 +11:exp:0:exp:23:hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"0336763e966d92595a567cc9ce537f5e":hex:"f34481ec3cc627bacd5dc3fb08f273e6":int:0:int:1 + +AES-192-CBC crypt Encrypt NIST KAT #1 PSA +depends_on:10:0:1 +11:exp:16:exp:22:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"80000000000000000000000000000000":hex:"6cd02513e8d4dc986b4afe087a60bd0c":int:0:int:1 + +AES-192-CBC crypt Encrypt NIST KAT #2 PSA +depends_on:10:0:1 +11:exp:16:exp:22:hex:"ff0000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"833f71258d53036b02952c76c744f5a1":int:0:int:1 + +AES-192-CBC crypt Encrypt NIST KAT #3 PSA +depends_on:10:0:1 +11:exp:16:exp:22:hex:"e9f065d7c13573587f7875357dfbb16c53489f6a4bd0f7cd":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"0956259c9cd5cfd0181cca53380cde06":int:0:int:1 + +AES-192-CBC crypt Encrypt NIST KAT #4 PSA +depends_on:10:0:1 +11:exp:16:exp:22:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"1b077a6af4b7f98229de786d7516b639":hex:"275cfc0413d8ccb70513c3859b1d0f72":int:0:int:1 + +AES-192-CBC crypt Decrypt NIST KAT #1 PSA +depends_on:10:0:1 +11:exp:16:exp:23:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"6cd02513e8d4dc986b4afe087a60bd0c":hex:"80000000000000000000000000000000":int:0:int:1 + +AES-192-CBC crypt Decrypt NIST KAT #2 PSA +depends_on:10:0:1 +11:exp:16:exp:23:hex:"ffe000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"7ababc4b3f516c9aafb35f4140b548f9":hex:"00000000000000000000000000000000":int:0:int:1 + +AES-192-CBC crypt Decrypt NIST KAT #3 PSA +depends_on:10:0:1 +11:exp:16:exp:23:hex:"e9f065d7c13573587f7875357dfbb16c53489f6a4bd0f7cd":hex:"00000000000000000000000000000000":hex:"0956259c9cd5cfd0181cca53380cde06":hex:"00000000000000000000000000000000":int:0:int:1 + +AES-192-CBC crypt Decrypt NIST KAT #4 PSA +depends_on:10:0:1 +11:exp:16:exp:23:hex:"000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"275cfc0413d8ccb70513c3859b1d0f72":hex:"1b077a6af4b7f98229de786d7516b639":int:0:int:1 + +AES-256-CBC crypt Encrypt NIST KAT #1 PSA +depends_on:10:0:1 +11:exp:17:exp:22:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"80000000000000000000000000000000":hex:"ddc6bf790c15760d8d9aeb6f9a75fd4e":int:0:int:1 + +AES-256-CBC crypt Encrypt NIST KAT #2 PSA +depends_on:10:0:1 +11:exp:17:exp:22:hex:"ff00000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"ec52a212f80a09df6317021bc2a9819e":int:0:int:1 + +AES-256-CBC crypt Encrypt NIST KAT #3 PSA +depends_on:10:0:1 +11:exp:17:exp:22:hex:"c47b0294dbbbee0fec4757f22ffeee3587ca4730c3d33b691df38bab076bc558":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"46f2fb342d6f0ab477476fc501242c5f":int:0:int:1 + +AES-256-CBC crypt Encrypt NIST KAT #4 PSA +depends_on:10:0:1 +11:exp:17:exp:22:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"014730f80ac625fe84f026c60bfd547d":hex:"5c9d844ed46f9885085e5d6a4f94c7d7":int:0:int:1 + +AES-256-CBC crypt Decrypt NIST KAT #1 PSA +depends_on:10:0:1 +11:exp:17:exp:23:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"ddc6bf790c15760d8d9aeb6f9a75fd4e":hex:"80000000000000000000000000000000":int:0:int:1 + +AES-256-CBC crypt Decrypt NIST KAT #2 PSA +depends_on:10:0:1 +11:exp:17:exp:23:hex:"ffe0000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"d1ccb9b1337002cbac42c520b5d67722":hex:"00000000000000000000000000000000":int:0:int:1 + +AES-256-CBC crypt Decrypt NIST KAT #3 PSA +depends_on:10:0:1 +11:exp:17:exp:23:hex:"c47b0294dbbbee0fec4757f22ffeee3587ca4730c3d33b691df38bab076bc558":hex:"00000000000000000000000000000000":hex:"46f2fb342d6f0ab477476fc501242c5f":hex:"00000000000000000000000000000000":int:0:int:1 + +AES-256-CBC crypt Decrypt NIST KAT #4 PSA +depends_on:10:0:1 +11:exp:17:exp:23:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"5c9d844ed46f9885085e5d6a4f94c7d7":hex:"014730f80ac625fe84f026c60bfd547d":int:0:int:1 + +Cipher Corner Case behaviours +depends_on:0 +3 + diff --git a/third_party/mbedtls/test/test_suite_cipher.blowfish.c b/third_party/mbedtls/test/test_suite_cipher.blowfish.c new file mode 100644 index 000000000..0639694ce --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.blowfish.c @@ -0,0 +1,2114 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_cipher.blowfish.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_cipher.function + * Test suite data : suites/test_suite_cipher.blowfish.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_CIPHER_C) +#include "third_party/mbedtls/cipher.h" + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +#endif + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +#endif + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) +#define MBEDTLS_CIPHER_AUTH_CRYPT +#endif + +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +/* Helper for resetting key/direction + * + * The documentation doesn't explicitly say whether calling + * mbedtls_cipher_setkey() twice is allowed or not. This currently works with + * the default software implementation, but only by accident. It isn't + * guaranteed to work with new ciphers or with alternative implementations of + * individual ciphers, and it doesn't work with the PSA wrappers. So don't do + * it, and instead start with a fresh context. + */ +static int cipher_reset_key( mbedtls_cipher_context_t *ctx, int cipher_id, + int use_psa, size_t tag_len, const data_t *key, int direction ) +{ + mbedtls_cipher_free( ctx ); + mbedtls_cipher_init( ctx ); + +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; + (void) tag_len; +#else + if( use_psa == 1 ) + { + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( ctx, + mbedtls_cipher_info_from_type( cipher_id ), + tag_len ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + TEST_ASSERT( 0 == mbedtls_cipher_setup( ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + } + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( ctx, key->x, 8 * key->len, + direction ) ); + return( 1 ); + +exit: + return( 0 ); +} + +/* + * Check if a buffer is all-0 bytes: + * return 1 if it is, + * 0 if it isn't. + */ +int buffer_is_all_zero( const uint8_t *buf, size_t size ) +{ + for( size_t i = 0; i < size; i++ ) + if( buf[i] != 0 ) + return 0; + return 1; +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ + +void test_mbedtls_cipher_list( ) +{ + const int *cipher_type; + + for( cipher_type = mbedtls_cipher_list(); *cipher_type != 0; cipher_type++ ) + TEST_ASSERT( mbedtls_cipher_info_from_type( *cipher_type ) != NULL ); +exit: + ; +} + +void test_mbedtls_cipher_list_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_cipher_list( ); +} +void test_cipher_invalid_param_unconditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + mbedtls_cipher_context_t invalid_ctx; + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + mbedtls_cipher_init( &valid_ctx ); + mbedtls_cipher_setup( &valid_ctx, valid_info ); + mbedtls_cipher_init( &invalid_ctx ); + + /* mbedtls_cipher_setup() */ + TEST_ASSERT( mbedtls_cipher_setup( &valid_ctx, NULL ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_get_block_size() */ + TEST_ASSERT( mbedtls_cipher_get_block_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_ASSERT( mbedtls_cipher_get_cipher_mode( &invalid_ctx ) == + MBEDTLS_MODE_NONE ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_ASSERT( mbedtls_cipher_get_iv_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_type() */ + TEST_ASSERT( + mbedtls_cipher_get_type( &invalid_ctx ) == + MBEDTLS_CIPHER_NONE); + + /* mbedtls_cipher_get_name() */ + TEST_ASSERT( mbedtls_cipher_get_name( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_ASSERT( mbedtls_cipher_get_key_bitlen( &invalid_ctx ) == + MBEDTLS_KEY_LENGTH_NONE ); + + /* mbedtls_cipher_get_operation() */ + TEST_ASSERT( mbedtls_cipher_get_operation( &invalid_ctx ) == + MBEDTLS_OPERATION_NONE ); + + /* mbedtls_cipher_setkey() */ + TEST_ASSERT( + mbedtls_cipher_setkey( &invalid_ctx, + valid_buffer, + valid_bitlen, + valid_operation ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_set_iv() */ + TEST_ASSERT( + mbedtls_cipher_set_iv( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_reset() */ + TEST_ASSERT( mbedtls_cipher_reset( &invalid_ctx ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_ASSERT( + mbedtls_cipher_update_ad( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_ASSERT( mbedtls_cipher_set_padding_mode( &invalid_ctx, valid_mode ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif + + /* mbedtls_cipher_update() */ + TEST_ASSERT( + mbedtls_cipher_update( &invalid_ctx, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_finish() */ + TEST_ASSERT( + mbedtls_cipher_finish( &invalid_ctx, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_ASSERT( + mbedtls_cipher_write_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_check_tag() */ + TEST_ASSERT( + mbedtls_cipher_check_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +exit: + mbedtls_cipher_free( &invalid_ctx ); + mbedtls_cipher_free( &valid_ctx ); +} + +void test_cipher_invalid_param_unconditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_unconditional( ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_cipher_invalid_param_conditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_operation_t invalid_operation = 100; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + /* mbedtls_cipher_init() */ + TEST_VALID_PARAM( mbedtls_cipher_init( &valid_ctx ) ); + TEST_INVALID_PARAM( mbedtls_cipher_init( NULL ) ); + + /* mbedtls_cipher_setup() */ + TEST_VALID_PARAM( mbedtls_cipher_setup( &valid_ctx, valid_info ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setup( NULL, valid_info ) ); + + /* mbedtls_cipher_get_block_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_block_size( NULL ) ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_MODE_NONE, + mbedtls_cipher_get_cipher_mode( NULL ) ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_iv_size( NULL ) ); + + /* mbedtls_cipher_get_type() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_CIPHER_NONE, + mbedtls_cipher_get_type( NULL ) ); + + /* mbedtls_cipher_get_name() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_name( NULL ) ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_KEY_LENGTH_NONE, + mbedtls_cipher_get_key_bitlen( NULL ) ); + + /* mbedtls_cipher_get_operation() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_OPERATION_NONE, + mbedtls_cipher_get_operation( NULL ) ); + + /* mbedtls_cipher_setkey() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( NULL, + valid_buffer, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + NULL, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + valid_buffer, + valid_bitlen, + invalid_operation ) ); + + /* mbedtls_cipher_set_iv() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_reset() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_reset( NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_padding_mode( NULL, valid_mode ) ); +#endif + + /* mbedtls_cipher_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( NULL, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + NULL, valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, + NULL ) ); + + /* mbedtls_cipher_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( NULL, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + valid_buffer, + NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_check_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + + /* mbedtls_cipher_crypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) + /* mbedtls_cipher_auth_encrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); + + /* mbedtls_cipher_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); +#endif /* defined(MBEDTLS_CIPHER_MODE_AEAD) */ + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) + /* mbedtls_cipher_auth_encrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); + + /* mbedtls_cipher_auth_decrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); +#endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */ + + /* mbedtls_cipher_free() */ + TEST_VALID_PARAM( mbedtls_cipher_free( NULL ) ); +exit: + TEST_VALID_PARAM( mbedtls_cipher_free( &valid_ctx ) ); +} + +void test_cipher_invalid_param_conditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_conditional( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#if defined(MBEDTLS_AES_C) +void test_cipher_special_behaviours( ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + unsigned char input[32]; + unsigned char output[32]; +#if defined (MBEDTLS_CIPHER_MODE_CBC) + unsigned char iv[32]; +#endif + size_t olen = 0; + + mbedtls_cipher_init( &ctx ); + memset( input, 0, sizeof( input ) ); + memset( output, 0, sizeof( output ) ); +#if defined(MBEDTLS_CIPHER_MODE_CBC) + memset( iv, 0, sizeof( iv ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_CBC ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* IV too big */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, MBEDTLS_MAX_IV_LENGTH + 1 ) + == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + + /* IV too small */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, 0 ) + == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_cipher_free( &ctx ); + mbedtls_cipher_init( &ctx ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_ECB ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* Update ECB with partial block */ + TEST_ASSERT( mbedtls_cipher_update( &ctx, input, 1, output, &olen ) + == MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_cipher_special_behaviours_wrapper( void ** params ) +{ + (void)params; + + test_cipher_special_behaviours( ); +} +#endif /* MBEDTLS_AES_C */ +void test_enc_dec_buf( int cipher_id, char * cipher_string, int key_len, + int length_val, int pad_mode ) +{ + size_t length = length_val, outlen, total_len, i, block_size; + unsigned char key[64]; + unsigned char iv[16]; + unsigned char ad[13]; + unsigned char tag[16]; + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + + /* + * Prepare contexts + */ + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( key, 0x2a, sizeof( key ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( mbedtls_cipher_info_from_string( cipher_string ) == cipher_info ); + + /* Initialise enc and dec contexts */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + /* + * Do a few encode/decode cycles + */ + for( i = 0; i < 3; i++ ) + { + memset( iv , 0x00 + i, sizeof( iv ) ); + memset( ad, 0x10 + i, sizeof( ad ) ); + memset( inbuf, 0x20 + i, sizeof( inbuf ) ); + + memset( encbuf, 0, sizeof( encbuf ) ); + memset( decbuf, 0, sizeof( decbuf ) ); + memset( tag, 0, sizeof( tag ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, sizeof( iv ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, sizeof( iv ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, ad, sizeof( ad ) - i ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, ad, sizeof( ad ) - i ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, length, encbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_write_tag( &ctx_enc, tag, sizeof( tag ) ) ); +#endif + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len > length && + total_len <= length + block_size ) ); + + /* decode the previously encoded string */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, total_len, decbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_check_tag( &ctx_dec, tag, sizeof( tag ) ) ); +#endif + + /* check result */ + TEST_ASSERT( total_len == length ); + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + } + + /* + * Done + */ +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_wrapper( void ** params ) +{ + + test_enc_dec_buf( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_enc_fail( int cipher_id, int pad_mode, int key_len, int length_val, + int ret ) +{ + size_t length = length_val; + unsigned char key[32]; + unsigned char iv[16]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + + /* Initialise context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key, key_len, MBEDTLS_ENCRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, NULL, 0 ) ); +#endif + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, inbuf, length, encbuf, &outlen ) ); + TEST_ASSERT( ret == mbedtls_cipher_finish( &ctx, encbuf + outlen, &outlen ) ); + + /* done */ +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_enc_fail_wrapper( void ** params ) +{ + + test_enc_fail( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_dec_empty_buf( int cipher, + int expected_update_ret, + int expected_finish_ret ) +{ + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise context */ + cipher_info = mbedtls_cipher_info_from_type( cipher ); + TEST_ASSERT( NULL != cipher_info); + TEST_ASSERT( sizeof(key) * 8 >= cipher_info->key_bitlen ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, + key, cipher_info->key_bitlen, + MBEDTLS_DECRYPT ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); +#endif + + /* decode 0-byte string */ + TEST_ASSERT( expected_update_ret == + mbedtls_cipher_update( &ctx_dec, encbuf, 0, decbuf, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + if ( expected_finish_ret == 0 && + ( cipher_info->mode == MBEDTLS_MODE_CBC || + cipher_info->mode == MBEDTLS_MODE_ECB ) ) + { + /* Non-CBC and non-ECB ciphers are OK with decrypting empty buffers and + * return success, not MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED, when + * decrypting an empty buffer. + * On the other hand, CBC and ECB ciphers need a full block of input. + */ + expected_finish_ret = MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED; + } + + TEST_ASSERT( expected_finish_ret == mbedtls_cipher_finish( + &ctx_dec, decbuf + outlen, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + +exit: + mbedtls_cipher_free( &ctx_dec ); +} + +void test_dec_empty_buf_wrapper( void ** params ) +{ + + test_dec_empty_buf( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +void test_enc_dec_buf_multipart( int cipher_id, int key_len, int first_length_val, + int second_length_val, int pad_mode, + int first_encrypt_output_len, int second_encrypt_output_len, + int first_decrypt_output_len, int second_decrypt_output_len ) +{ + size_t first_length = first_length_val; + size_t second_length = second_length_val; + size_t length = first_length + second_length; + size_t block_size; + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + size_t totaloutlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise enc and dec contexts */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, NULL, 0 ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, first_length, encbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_encrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf + first_length, second_length, encbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_encrypt_output_len == outlen ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen > length && + totaloutlen <= length + block_size ) ); + + /* decode the previously encoded string */ + second_length = totaloutlen - first_length; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, first_length, decbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_decrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf + first_length, second_length, decbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_decrypt_output_len == outlen ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length ); + + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_multipart_wrapper( void ** params ) +{ + + test_enc_dec_buf_multipart( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ) ); +} +void test_decrypt_test_vec( int cipher_id, int pad_mode, data_t * key, + data_t * iv, data_t * cipher, + data_t * clear, data_t * ad, data_t * tag, + int finish_result, int tag_result ) +{ + unsigned char output[265]; + mbedtls_cipher_context_t ctx; + size_t outlen, total_len; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + +#if !defined(MBEDTLS_GCM_C) && !defined(MBEDTLS_CHACHAPOLY_C) + ((void) ad); + ((void) tag); +#endif + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, MBEDTLS_DECRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( pad_mode != -1 ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv->x, iv->len ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, ad->x, ad->len ) ); +#endif + + /* decode buffer and check tag->x */ + total_len = 0; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, cipher->x, cipher->len, output, &outlen ) ); + total_len += outlen; + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + total_len += outlen; +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( tag_result == mbedtls_cipher_check_tag( &ctx, tag->x, tag->len ) ); +#endif + + /* check plaintext only if everything went fine */ + if( 0 == finish_result && 0 == tag_result ) + { + TEST_ASSERT( total_len == clear->len ); + TEST_ASSERT( 0 == memcmp( output, clear->x, clear->len ) ); + } + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_decrypt_test_vec_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_decrypt_test_vec( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, &data10, &data12, *( (int *) params[14] ), *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +void test_auth_crypt_tv( int cipher_id, data_t * key, data_t * iv, + data_t * ad, data_t * cipher, data_t * tag, + char * result, data_t * clear, int use_psa ) +{ + /* + * Take an AEAD ciphertext + tag and perform a pair + * of AEAD decryption and AEAD encryption. Check that + * this results in the expected plaintext, and that + * decryption and encryption are inverse to one another. + * + * Do that twice: + * - once with legacy functions auth_decrypt/auth_encrypt + * - once with new functions auth_decrypt_ext/auth_encrypt_ext + * This allows testing both without duplicating test cases. + */ + + int ret; + int using_nist_kw, using_nist_kw_padding; + + mbedtls_cipher_context_t ctx; + size_t outlen; + + unsigned char *cipher_plus_tag = NULL; + size_t cipher_plus_tag_len; + unsigned char *decrypt_buf = NULL; + size_t decrypt_buf_len = 0; + unsigned char *encrypt_buf = NULL; + size_t encrypt_buf_len = 0; + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + unsigned char *tmp_tag = NULL; + unsigned char *tmp_cipher = NULL; + unsigned char *tag_buf = NULL; +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + + /* Null pointers are documented as valid for inputs of length 0. + * The test framework passes non-null pointers, so set them to NULL. + * key, cipher and tag can't be empty. */ + if( iv->len == 0 ) + iv->x = NULL; + if( ad->len == 0 ) + ad->x = NULL; + if( clear->len == 0 ) + clear->x = NULL; + + mbedtls_cipher_init( &ctx ); + + /* Initialize PSA Crypto */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_ASSERT( psa_crypto_init( ) ); +#else + (void) use_psa; +#endif + + /* + * Are we using NIST_KW? with padding? + */ + using_nist_kw_padding = cipher_id == MBEDTLS_CIPHER_AES_128_KWP || + cipher_id == MBEDTLS_CIPHER_AES_192_KWP || + cipher_id == MBEDTLS_CIPHER_AES_256_KWP; + using_nist_kw = cipher_id == MBEDTLS_CIPHER_AES_128_KW || + cipher_id == MBEDTLS_CIPHER_AES_192_KW || + cipher_id == MBEDTLS_CIPHER_AES_256_KW || + using_nist_kw_padding; + + /**************************************************************** + * * + * Part 1: non-deprecated API * + * * + ****************************************************************/ + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * prepare buffer for decryption + * (we need the tag appended to the ciphertext) + */ + cipher_plus_tag_len = cipher->len + tag->len; + ASSERT_ALLOC( cipher_plus_tag, cipher_plus_tag_len ); + memcpy( cipher_plus_tag, cipher->x, cipher->len ); + memcpy( cipher_plus_tag + cipher->len, tag->x, tag->len ); + + /* + * Compute length of output buffer according to the documentation + */ + if( using_nist_kw ) + decrypt_buf_len = cipher_plus_tag_len - 8; + else + decrypt_buf_len = cipher_plus_tag_len - tag->len; + + + /* + * Try decrypting to a buffer that's 1B too small + */ + if( decrypt_buf_len != 0 ) + { + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + } + + /* + * Authenticate and decrypt, and check result + */ + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len, &outlen, tag->len ); + + if( strcmp( result, "FAIL" ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, decrypt_buf_len ) ); + } + else + { + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + /* Free this, but keep cipher_plus_tag for deprecated function with PSA */ + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* + * Compute size of output buffer according to documentation + */ + if( using_nist_kw ) + { + encrypt_buf_len = clear->len + 8; + if( using_nist_kw_padding && encrypt_buf_len % 8 != 0 ) + encrypt_buf_len += 8 - encrypt_buf_len % 8; + } + else + { + encrypt_buf_len = clear->len + tag->len; + } + + /* + * Try encrypting with an output buffer that's 1B too small + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret != 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + + /* + * Encrypt and check the result + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len, &outlen, tag->len ); + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len + tag->len ); + TEST_ASSERT( memcmp( encrypt_buf, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( encrypt_buf + cipher->len, + tag->x, tag->len ) == 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + } + + /**************************************************************** + * * + * Part 2: deprecated API * + * * + ****************************************************************/ + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * Prepare pointers for decryption + */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + { + /* PSA requires that the tag immediately follows the ciphertext. + * Fortunately, we already have that from testing the new API. */ + tmp_cipher = cipher_plus_tag; + tmp_tag = tmp_cipher + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + tmp_cipher = cipher->x; + tmp_tag = tag->x; + } + + /* + * Authenticate and decrypt, and check result + */ + + ASSERT_ALLOC( decrypt_buf, cipher->len ); + outlen = 0; + ret = mbedtls_cipher_auth_decrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + tmp_cipher, cipher->len, decrypt_buf, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + /* NIST_KW with legacy API */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else if( strcmp( result, "FAIL" ) == 0 ) + { + /* unauthentic message */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, cipher->len ) ); + } + else + { + /* authentic message: is the plaintext correct? */ + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + mbedtls_free( cipher_plus_tag ); + cipher_plus_tag = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* prepare buffers for encryption */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa ) + { + ASSERT_ALLOC( cipher_plus_tag, cipher->len + tag->len ); + tmp_cipher = cipher_plus_tag; + tmp_tag = cipher_plus_tag + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + ASSERT_ALLOC( encrypt_buf, cipher->len ); + ASSERT_ALLOC( tag_buf, tag->len ); + tmp_cipher = encrypt_buf; + tmp_tag = tag_buf; + } + + /* + * Encrypt and check the result + */ + outlen = 0; + ret = mbedtls_cipher_auth_encrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + clear->x, clear->len, tmp_cipher, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len ); + if( cipher->len != 0 ) + TEST_ASSERT( memcmp( tmp_cipher, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( tmp_tag, tag->x, tag->len ) == 0 ); + } + } + +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +exit: + + mbedtls_cipher_free( &ctx ); + mbedtls_free( decrypt_buf ); + mbedtls_free( encrypt_buf ); + mbedtls_free( cipher_plus_tag ); +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + mbedtls_free( tag_buf ); +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_auth_crypt_tv_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_auth_crypt_tv( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, (char *) params[11], &data12, *( (int *) params[14] ) ); +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ +void test_test_vec_ecb( int cipher_id, int operation, data_t * key, + data_t * input, data_t * result, int finish_result + ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, input->x, + mbedtls_cipher_get_block_size( &ctx ), + output, &outlen ) ); + TEST_ASSERT( outlen == mbedtls_cipher_get_block_size( &ctx ) ); + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, + mbedtls_cipher_get_block_size( &ctx ) ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_test_vec_ecb_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_test_vec_ecb( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_test_vec_crypt( int cipher_id, int operation, data_t *key, + data_t *iv, data_t *input, data_t *result, + int finish_result, int use_psa ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; +#else + if( use_psa == 1 ) + { + PSA_ASSERT( psa_crypto_init( ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( &ctx, + mbedtls_cipher_info_from_type( cipher_id ), 0 ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + if( MBEDTLS_MODE_CBC == ctx.cipher_info->mode ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, MBEDTLS_PADDING_NONE ) ); + + TEST_ASSERT( finish_result == mbedtls_cipher_crypt( &ctx, iv->len ? iv->x : NULL, + iv->len, input->x, input->len, + output, &outlen ) ); + TEST_ASSERT( result->len == outlen ); + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, outlen ) ); + +exit: + mbedtls_cipher_free( &ctx ); +#if defined(MBEDTLS_USE_PSA_CRYPTO) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_test_vec_crypt_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_test_vec_crypt( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_set_padding( int cipher_id, int pad_mode, int ret ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + mbedtls_cipher_init( &ctx ); + + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + TEST_ASSERT( ret == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_set_padding_wrapper( void ** params ) +{ + + test_set_padding( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_check_padding( int pad_mode, data_t * input, int ret, int dlen_check + ) +{ + mbedtls_cipher_info_t cipher_info; + mbedtls_cipher_context_t ctx; + size_t dlen; + + /* build a fake context just for getting access to get_padding */ + mbedtls_cipher_init( &ctx ); + cipher_info.mode = MBEDTLS_MODE_CBC; + ctx.cipher_info = &cipher_info; + + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + + + TEST_ASSERT( ret == ctx.get_padding( input->x, input->len, &dlen ) ); + if( 0 == ret ) + TEST_ASSERT( dlen == (size_t) dlen_check ); +exit: + ; +} + +void test_check_padding_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_check_padding( *( (int *) params[0] ), &data1, *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#endif /* MBEDTLS_CIPHER_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_BLOWFISH_CBC; + } + break; + case 1: + { + *out_value = -1; + } + break; + case 2: + { + *out_value = MBEDTLS_PADDING_ONE_AND_ZEROS; + } + break; + case 3: + { + *out_value = MBEDTLS_PADDING_ZEROS_AND_LEN; + } + break; + case 4: + { + *out_value = MBEDTLS_PADDING_ZEROS; + } + break; + case 5: + { + *out_value = MBEDTLS_PADDING_NONE; + } + break; + case 6: + { + *out_value = MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED; + } + break; + case 7: + { + *out_value = MBEDTLS_CIPHER_BLOWFISH_CFB64; + } + break; + case 8: + { + *out_value = MBEDTLS_CIPHER_BLOWFISH_CTR; + } + break; + case 9: + { + *out_value = MBEDTLS_CIPHER_BLOWFISH_ECB; + } + break; + case 10: + { + *out_value = MBEDTLS_ENCRYPT; + } + break; + case 11: + { + *out_value = MBEDTLS_DECRYPT; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { +#if defined(MBEDTLS_BLOWFISH_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_CIPHER_MODE_CBC) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_CIPHER_PADDING_PKCS7) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_CIPHER_MODE_CFB) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_CIPHER_MODE_CTR) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_CIPHER_C) + test_mbedtls_cipher_list_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_CIPHER_C) + test_cipher_invalid_param_unconditional_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_cipher_invalid_param_conditional_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_AES_C) + test_cipher_special_behaviours_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_fail_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_CIPHER_C) + test_dec_empty_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_multipart_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_CIPHER_C) + test_decrypt_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_AUTH_CRYPT) + test_auth_crypt_tv_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_CIPHER_C) + test_test_vec_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_test_vec_crypt_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_set_padding_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_check_padding_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_cipher.blowfish.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_cipher.blowfish.datax b/third_party/mbedtls/test/test_suite_cipher.blowfish.datax new file mode 100644 index 000000000..09a219329 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.blowfish.datax @@ -0,0 +1,608 @@ +BLOWFISH CBC Decrypt empty buffer +depends_on:0:1:2 +6:exp:0:int:0:int:0 + +BLOWFISH Encrypt and decrypt 0 bytes [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:0:exp:1 + +BLOWFISH Encrypt and decrypt 1 byte [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:1:exp:1 + +BLOWFISH Encrypt and decrypt 2 bytes [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:2:exp:1 + +BLOWFISH Encrypt and decrypt 7 bytes [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:7:exp:1 + +BLOWFISH Encrypt and decrypt 8 bytes [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:8:exp:1 + +BLOWFISH Encrypt and decrypt 9 bytes [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:9:exp:1 + +BLOWFISH Encrypt and decrypt 15 bytes [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:15:exp:1 + +BLOWFISH Encrypt and decrypt 16 bytes [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:16:exp:1 + +BLOWFISH Encrypt and decrypt 17 bytes [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:17:exp:1 + +BLOWFISH Encrypt and decrypt 31 bytes [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:31:exp:1 + +BLOWFISH Encrypt and decrypt 32 bytes [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:32:exp:1 + +BLOWFISH Encrypt and decrypt 32 bytes [#2] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:33:exp:1 + +BLOWFISH Encrypt and decrypt 47 bytes [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:47:exp:1 + +BLOWFISH Encrypt and decrypt 48 bytes [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:48:exp:1 + +BLOWFISH Encrypt and decrypt 49 bytes [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:49:exp:1 + +BLOWFISH Encrypt and decrypt 0 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:0:exp:2 + +BLOWFISH Encrypt and decrypt 1 byte with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:1:exp:2 + +BLOWFISH Encrypt and decrypt 2 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:2:exp:2 + +BLOWFISH Encrypt and decrypt 7 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:7:exp:2 + +BLOWFISH Encrypt and decrypt 8 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:8:exp:2 + +BLOWFISH Encrypt and decrypt 9 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:9:exp:2 + +BLOWFISH Encrypt and decrypt 15 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:15:exp:2 + +BLOWFISH Encrypt and decrypt 16 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:16:exp:2 + +BLOWFISH Encrypt and decrypt 17 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:17:exp:2 + +BLOWFISH Encrypt and decrypt 31 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:31:exp:2 + +BLOWFISH Encrypt and decrypt 32 bytes with one and zeros padding [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:32:exp:2 + +BLOWFISH Encrypt and decrypt 32 bytes with one and zeros padding [#2] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:33:exp:2 + +BLOWFISH Encrypt and decrypt 47 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:47:exp:2 + +BLOWFISH Encrypt and decrypt 48 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:48:exp:2 + +BLOWFISH Encrypt and decrypt 49 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:49:exp:2 + +BLOWFISH Encrypt and decrypt 0 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:0:exp:3 + +BLOWFISH Encrypt and decrypt 1 byte with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:1:exp:3 + +BLOWFISH Encrypt and decrypt 2 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:2:exp:3 + +BLOWFISH Encrypt and decrypt 7 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:7:exp:3 + +BLOWFISH Encrypt and decrypt 8 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:8:exp:3 + +BLOWFISH Encrypt and decrypt 9 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:9:exp:3 + +BLOWFISH Encrypt and decrypt 15 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:15:exp:3 + +BLOWFISH Encrypt and decrypt 16 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:16:exp:3 + +BLOWFISH Encrypt and decrypt 17 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:17:exp:3 + +BLOWFISH Encrypt and decrypt 31 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:31:exp:3 + +BLOWFISH Encrypt and decrypt 32 bytes with zeros and len padding [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:32:exp:3 + +BLOWFISH Encrypt and decrypt 32 bytes with zeros and len padding [#2] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:33:exp:3 + +BLOWFISH Encrypt and decrypt 47 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:47:exp:3 + +BLOWFISH Encrypt and decrypt 48 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:48:exp:3 + +BLOWFISH Encrypt and decrypt 49 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:49:exp:3 + +BLOWFISH Encrypt and decrypt 0 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:0:exp:4 + +BLOWFISH Encrypt and decrypt 1 byte with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:1:exp:4 + +BLOWFISH Encrypt and decrypt 2 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:2:exp:4 + +BLOWFISH Encrypt and decrypt 7 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:7:exp:4 + +BLOWFISH Encrypt and decrypt 8 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:8:exp:4 + +BLOWFISH Encrypt and decrypt 9 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:9:exp:4 + +BLOWFISH Encrypt and decrypt 15 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:15:exp:4 + +BLOWFISH Encrypt and decrypt 16 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:16:exp:4 + +BLOWFISH Encrypt and decrypt 17 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:17:exp:4 + +BLOWFISH Encrypt and decrypt 31 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:31:exp:4 + +BLOWFISH Encrypt and decrypt 32 bytes with zeros padding [#1] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:32:exp:4 + +BLOWFISH Encrypt and decrypt 32 bytes with zeros padding [#2] +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:33:exp:4 + +BLOWFISH Encrypt and decrypt 47 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:47:exp:4 + +BLOWFISH Encrypt and decrypt 48 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:48:exp:4 + +BLOWFISH Encrypt and decrypt 49 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:49:exp:4 + +BLOWFISH Encrypt and decrypt 0 bytes with no padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:0:exp:5 + +BLOWFISH Encrypt and decrypt 8 bytes with no padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:8:exp:5 + +BLOWFISH Encrypt and decrypt 16 bytes with no padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:16:exp:5 + +BLOWFISH Encrypt and decrypt 32 bytes with no padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:32:exp:5 + +BLOWFISH Encrypt and decrypt 48 bytes with no padding +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:128:int:48:exp:5 + +BLOWFISH Try encrypting 1 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:5:int:128:int:1:exp:6 + +BLOWFISH Try encrypting 2 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:5:int:128:int:2:exp:6 + +BLOWFISH Try encrypting 7 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:5:int:128:int:7:exp:6 + +BLOWFISH Try encrypting 9 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:5:int:128:int:9:exp:6 + +BLOWFISH Try encrypting 15 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:5:int:128:int:15:exp:6 + +BLOWFISH Try encrypting 17 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:5:int:128:int:17:exp:6 + +BLOWFISH Try encrypting 31 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:5:int:128:int:31:exp:6 + +BLOWFISH Try encrypting 33 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:5:int:128:int:33:exp:6 + +BLOWFISH Try encrypting 47 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:5:int:128:int:47:exp:6 + +BLOWFISH Try encrypting 49 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:5:int:128:int:49:exp:6 + +BLOWFISH Encrypt and decrypt 0 bytes in multiple parts [#1] +depends_on:0:1:2 +7:exp:0:int:128:int:0:int:0:exp:1:int:0:int:0:int:0:int:0 + +BLOWFISH Encrypt and decrypt 1 bytes in multiple parts 1 [#1] +depends_on:0:1:2 +7:exp:0:int:128:int:1:int:0:exp:1:int:0:int:0:int:0:int:0 + +BLOWFISH Encrypt and decrypt 1 bytes in multiple parts 2 [#1] +depends_on:0:1:2 +7:exp:0:int:128:int:0:int:1:exp:1:int:0:int:0:int:0:int:0 + +BLOWFISH Encrypt and decrypt 16 bytes in multiple parts 1 [#1] +depends_on:0:1:2 +7:exp:0:int:128:int:16:int:0:exp:1:int:16:int:0:int:8:int:8 + +BLOWFISH Encrypt and decrypt 16 bytes in multiple parts 2 [#1] +depends_on:0:1:2 +7:exp:0:int:128:int:0:int:16:exp:1:int:0:int:16:int:0:int:16 + +BLOWFISH Encrypt and decrypt 16 bytes in multiple parts 3 [#1] +depends_on:0:1:2 +7:exp:0:int:128:int:1:int:15:exp:1:int:0:int:16:int:0:int:16 + +BLOWFISH Encrypt and decrypt 16 bytes in multiple parts 4 [#1] +depends_on:0:1:2 +7:exp:0:int:128:int:15:int:1:exp:1:int:8:int:8:int:8:int:8 + +BLOWFISH Encrypt and decrypt 22 bytes in multiple parts 1 [#1] +depends_on:0:1:2 +7:exp:0:int:128:int:15:int:7:exp:1:int:8:int:8:int:8:int:8 + +BLOWFISH Encrypt and decrypt 22 bytes in multiple parts 1 [#2] +depends_on:0:1:2 +7:exp:0:int:128:int:16:int:6:exp:1:int:16:int:0:int:8:int:8 + +BLOWFISH Encrypt and decrypt 22 bytes in multiple parts 1 [#3] +depends_on:0:1:2 +7:exp:0:int:128:int:17:int:6:exp:1:int:16:int:0:int:16:int:0 + +BLOWFISH Encrypt and decrypt 32 bytes in multiple parts 1 [#1] +depends_on:0:1:2 +7:exp:0:int:128:int:16:int:16:exp:1:int:16:int:16:int:8:int:24 + +BLOWFISH Encrypt and decrypt 0 bytes [#2] +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:128:int:0:exp:1 + +BLOWFISH Encrypt and decrypt 1 byte [#2] +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:128:int:1:exp:1 + +BLOWFISH Encrypt and decrypt 2 bytes [#2] +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:128:int:2:exp:1 + +BLOWFISH Encrypt and decrypt 7 bytes [#2] +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:128:int:7:exp:1 + +BLOWFISH Encrypt and decrypt 8 bytes [#2] +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:128:int:8:exp:1 + +BLOWFISH Encrypt and decrypt 9 bytes [#2] +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:128:int:9:exp:1 + +BLOWFISH Encrypt and decrypt 15 bytes [#2] +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:128:int:15:exp:1 + +BLOWFISH Encrypt and decrypt 16 bytes [#2] +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:128:int:16:exp:1 + +BLOWFISH Encrypt and decrypt 17 bytes [#2] +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:128:int:17:exp:1 + +BLOWFISH Encrypt and decrypt 31 bytes [#2] +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:128:int:31:exp:1 + +BLOWFISH Encrypt and decrypt 32 bytes [#3] +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:128:int:32:exp:1 + +BLOWFISH Encrypt and decrypt 32 bytes [#4] +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:128:int:33:exp:1 + +BLOWFISH Encrypt and decrypt 47 bytes [#2] +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:128:int:47:exp:1 + +BLOWFISH Encrypt and decrypt 48 bytes [#2] +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:128:int:48:exp:1 + +BLOWFISH Encrypt and decrypt 49 bytes [#2] +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:128:int:49:exp:1 + +BLOWFISH Encrypt and decrypt 0 bytes in multiple parts [#2] +depends_on:0:3 +7:exp:7:int:128:int:0:int:0:exp:1:int:0:int:0:int:0:int:0 + +BLOWFISH Encrypt and decrypt 1 bytes in multiple parts 1 [#2] +depends_on:0:3 +7:exp:7:int:128:int:1:int:0:exp:1:int:1:int:0:int:1:int:0 + +BLOWFISH Encrypt and decrypt 1 bytes in multiple parts 2 [#2] +depends_on:0:3 +7:exp:7:int:128:int:0:int:1:exp:1:int:0:int:1:int:0:int:1 + +BLOWFISH Encrypt and decrypt 16 bytes in multiple parts 1 [#2] +depends_on:0:3 +7:exp:7:int:128:int:16:int:0:exp:1:int:16:int:0:int:16:int:0 + +BLOWFISH Encrypt and decrypt 16 bytes in multiple parts 2 [#2] +depends_on:0:3 +7:exp:7:int:128:int:0:int:16:exp:1:int:0:int:16:int:0:int:16 + +BLOWFISH Encrypt and decrypt 16 bytes in multiple parts 3 [#2] +depends_on:0:3 +7:exp:7:int:128:int:1:int:15:exp:1:int:1:int:15:int:1:int:15 + +BLOWFISH Encrypt and decrypt 16 bytes in multiple parts 4 [#2] +depends_on:0:3 +7:exp:7:int:128:int:15:int:1:exp:1:int:15:int:1:int:15:int:1 + +BLOWFISH Encrypt and decrypt 22 bytes in multiple parts 1 [#4] +depends_on:0:3 +7:exp:7:int:128:int:15:int:7:exp:1:int:15:int:7:int:15:int:7 + +BLOWFISH Encrypt and decrypt 22 bytes in multiple parts 1 [#5] +depends_on:0:3 +7:exp:7:int:128:int:16:int:6:exp:1:int:16:int:6:int:16:int:6 + +BLOWFISH Encrypt and decrypt 22 bytes in multiple parts 1 [#6] +depends_on:0:3 +7:exp:7:int:128:int:17:int:6:exp:1:int:17:int:6:int:17:int:6 + +BLOWFISH Encrypt and decrypt 32 bytes in multiple parts 1 [#2] +depends_on:0:3 +7:exp:7:int:128:int:16:int:16:exp:1:int:16:int:16:int:16:int:16 + +BLOWFISH Encrypt and decrypt 0 bytes [#3] +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:128:int:0:exp:1 + +BLOWFISH Encrypt and decrypt 1 byte [#3] +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:128:int:1:exp:1 + +BLOWFISH Encrypt and decrypt 2 bytes [#3] +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:128:int:2:exp:1 + +BLOWFISH Encrypt and decrypt 7 bytes [#3] +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:128:int:7:exp:1 + +BLOWFISH Encrypt and decrypt 8 bytes [#3] +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:128:int:8:exp:1 + +BLOWFISH Encrypt and decrypt 9 bytes [#3] +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:128:int:9:exp:1 + +BLOWFISH Encrypt and decrypt 15 bytes [#3] +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:128:int:15:exp:1 + +BLOWFISH Encrypt and decrypt 16 bytes [#3] +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:128:int:16:exp:1 + +BLOWFISH Encrypt and decrypt 17 bytes [#3] +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:128:int:17:exp:1 + +BLOWFISH Encrypt and decrypt 31 bytes [#3] +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:128:int:31:exp:1 + +BLOWFISH Encrypt and decrypt 32 bytes [#5] +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:128:int:32:exp:1 + +BLOWFISH Encrypt and decrypt 32 bytes [#6] +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:128:int:33:exp:1 + +BLOWFISH Encrypt and decrypt 47 bytes [#3] +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:128:int:47:exp:1 + +BLOWFISH Encrypt and decrypt 48 bytes [#3] +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:128:int:48:exp:1 + +BLOWFISH Encrypt and decrypt 49 bytes [#3] +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:128:int:49:exp:1 + +BLOWFISH Encrypt and decrypt 0 bytes in multiple parts [#3] +depends_on:0:4 +7:exp:8:int:128:int:0:int:0:exp:1:int:0:int:0:int:0:int:0 + +BLOWFISH Encrypt and decrypt 1 bytes in multiple parts 1 [#3] +depends_on:0:4 +7:exp:8:int:128:int:1:int:0:exp:1:int:1:int:0:int:1:int:0 + +BLOWFISH Encrypt and decrypt 1 bytes in multiple parts 2 [#3] +depends_on:0:4 +7:exp:8:int:128:int:0:int:1:exp:1:int:0:int:1:int:0:int:1 + +BLOWFISH Encrypt and decrypt 16 bytes in multiple parts 1 [#3] +depends_on:0:4 +7:exp:8:int:128:int:16:int:0:exp:1:int:16:int:0:int:16:int:0 + +BLOWFISH Encrypt and decrypt 16 bytes in multiple parts 2 [#3] +depends_on:0:4 +7:exp:8:int:128:int:0:int:16:exp:1:int:0:int:16:int:0:int:16 + +BLOWFISH Encrypt and decrypt 16 bytes in multiple parts 3 [#3] +depends_on:0:4 +7:exp:8:int:128:int:1:int:15:exp:1:int:1:int:15:int:1:int:15 + +BLOWFISH Encrypt and decrypt 16 bytes in multiple parts 4 [#3] +depends_on:0:4 +7:exp:8:int:128:int:15:int:1:exp:1:int:15:int:1:int:15:int:1 + +BLOWFISH Encrypt and decrypt 22 bytes in multiple parts 1 [#7] +depends_on:0:4 +7:exp:8:int:128:int:15:int:7:exp:1:int:15:int:7:int:15:int:7 + +BLOWFISH Encrypt and decrypt 22 bytes in multiple parts 1 [#8] +depends_on:0:4 +7:exp:8:int:128:int:16:int:6:exp:1:int:16:int:6:int:16:int:6 + +BLOWFISH Encrypt and decrypt 22 bytes in multiple parts 1 [#9] +depends_on:0:4 +7:exp:8:int:128:int:17:int:6:exp:1:int:17:int:6:int:17:int:6 + +BLOWFISH Encrypt and decrypt 32 bytes in multiple parts 1 [#3] +depends_on:0:4 +7:exp:8:int:128:int:16:int:16:exp:1:int:16:int:16:int:16:int:16 + +BLOWFISH CBC Encrypt and decrypt 7 bytes, 192-bits key +depends_on:0:1:2 +4:exp:0:char*:"BLOWFISH-CBC":int:192:int:7:exp:1 + +BLOWFISH CTR Encrypt and decrypt 7 bytes, 192-bits key +depends_on:0:4 +4:exp:8:char*:"BLOWFISH-CTR":int:192:int:7:exp:1 + +BLOWFISH CFB64 Encrypt and decrypt 7 bytes, 192-bits key +depends_on:0:3 +4:exp:7:char*:"BLOWFISH-CFB64":int:192:int:7:exp:1 + +BLOWFISH ECB Encrypt test vector (SSLeay) #1 +depends_on:0 +10:exp:9:exp:10:hex:"00000000000000000000000000000000":hex:"0000000000000000":hex:"4ef997456198dd78":int:0 + +BLOWFISH ECB Encrypt test vector (SSLeay) #2 +depends_on:0 +10:exp:9:exp:10:hex:"ffffffffffffffffffffffffffffffff":hex:"ffffffffffffffff":hex:"51866fd5b85ecb8a":int:0 + +BLOWFISH ECB Encrypt test vector (SSLeay) #3 +depends_on:0 +10:exp:9:exp:10:hex:"fedcba9876543210fedcba9876543210":hex:"0123456789abcdef":hex:"0aceab0fc6a0a28d":int:0 + +BLOWFISH ECB Encrypt test vector (SSLeay) #3, 64-bit key +depends_on:0 +10:exp:9:exp:10:hex:"fedcba9876543210":hex:"0123456789abcdef":hex:"0aceab0fc6a0a28d":int:0 + +BLOWFISH ECB Encrypt test vector (SSLeay) #3, 192-bit key +depends_on:0 +10:exp:9:exp:10:hex:"fedcba9876543210fedcba9876543210fedcba9876543210":hex:"0123456789abcdef":hex:"0aceab0fc6a0a28d":int:0 + +BLOWFISH ECB Decrypt test vector (SSLeay) #1 +depends_on:0 +10:exp:9:exp:11:hex:"00000000000000000000000000000000":hex:"4ef997456198dd78":hex:"0000000000000000":int:0 + +BLOWFISH ECB Decrypt test vector (SSLeay) #2 +depends_on:0 +10:exp:9:exp:11:hex:"ffffffffffffffffffffffffffffffff":hex:"51866fd5b85ecb8a":hex:"ffffffffffffffff":int:0 + +BLOWFISH ECB Decrypt test vector (SSLeay) #3 +depends_on:0 +10:exp:9:exp:11:hex:"3849674c2602319e3849674c2602319e":hex:"a25e7856cf2651eb":hex:"51454b582ddf440a":int:0 + +BLOWFISH ECB Decrypt test vector (SSLeay) #3, 64-bit key +depends_on:0 +10:exp:9:exp:11:hex:"3849674c2602319e":hex:"a25e7856cf2651eb":hex:"51454b582ddf440a":int:0 + +BLOWFISH ECB Decrypt test vector (SSLeay) #3, 192-bit key +depends_on:0 +10:exp:9:exp:11:hex:"3849674c2602319e3849674c2602319e3849674c2602319e":hex:"a25e7856cf2651eb":hex:"51454b582ddf440a":int:0 + diff --git a/third_party/mbedtls/test/test_suite_cipher.ccm.c b/third_party/mbedtls/test/test_suite_cipher.ccm.c new file mode 100644 index 000000000..34fb33406 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.ccm.c @@ -0,0 +1,2065 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_cipher.ccm.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_cipher.function + * Test suite data : suites/test_suite_cipher.ccm.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_CIPHER_C) +#include "third_party/mbedtls/cipher.h" + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +#endif + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +#endif + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) +#define MBEDTLS_CIPHER_AUTH_CRYPT +#endif + +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +/* Helper for resetting key/direction + * + * The documentation doesn't explicitly say whether calling + * mbedtls_cipher_setkey() twice is allowed or not. This currently works with + * the default software implementation, but only by accident. It isn't + * guaranteed to work with new ciphers or with alternative implementations of + * individual ciphers, and it doesn't work with the PSA wrappers. So don't do + * it, and instead start with a fresh context. + */ +static int cipher_reset_key( mbedtls_cipher_context_t *ctx, int cipher_id, + int use_psa, size_t tag_len, const data_t *key, int direction ) +{ + mbedtls_cipher_free( ctx ); + mbedtls_cipher_init( ctx ); + +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; + (void) tag_len; +#else + if( use_psa == 1 ) + { + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( ctx, + mbedtls_cipher_info_from_type( cipher_id ), + tag_len ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + TEST_ASSERT( 0 == mbedtls_cipher_setup( ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + } + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( ctx, key->x, 8 * key->len, + direction ) ); + return( 1 ); + +exit: + return( 0 ); +} + +/* + * Check if a buffer is all-0 bytes: + * return 1 if it is, + * 0 if it isn't. + */ +int buffer_is_all_zero( const uint8_t *buf, size_t size ) +{ + for( size_t i = 0; i < size; i++ ) + if( buf[i] != 0 ) + return 0; + return 1; +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ + +void test_mbedtls_cipher_list( ) +{ + const int *cipher_type; + + for( cipher_type = mbedtls_cipher_list(); *cipher_type != 0; cipher_type++ ) + TEST_ASSERT( mbedtls_cipher_info_from_type( *cipher_type ) != NULL ); +exit: + ; +} + +void test_mbedtls_cipher_list_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_cipher_list( ); +} +void test_cipher_invalid_param_unconditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + mbedtls_cipher_context_t invalid_ctx; + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + mbedtls_cipher_init( &valid_ctx ); + mbedtls_cipher_setup( &valid_ctx, valid_info ); + mbedtls_cipher_init( &invalid_ctx ); + + /* mbedtls_cipher_setup() */ + TEST_ASSERT( mbedtls_cipher_setup( &valid_ctx, NULL ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_get_block_size() */ + TEST_ASSERT( mbedtls_cipher_get_block_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_ASSERT( mbedtls_cipher_get_cipher_mode( &invalid_ctx ) == + MBEDTLS_MODE_NONE ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_ASSERT( mbedtls_cipher_get_iv_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_type() */ + TEST_ASSERT( + mbedtls_cipher_get_type( &invalid_ctx ) == + MBEDTLS_CIPHER_NONE); + + /* mbedtls_cipher_get_name() */ + TEST_ASSERT( mbedtls_cipher_get_name( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_ASSERT( mbedtls_cipher_get_key_bitlen( &invalid_ctx ) == + MBEDTLS_KEY_LENGTH_NONE ); + + /* mbedtls_cipher_get_operation() */ + TEST_ASSERT( mbedtls_cipher_get_operation( &invalid_ctx ) == + MBEDTLS_OPERATION_NONE ); + + /* mbedtls_cipher_setkey() */ + TEST_ASSERT( + mbedtls_cipher_setkey( &invalid_ctx, + valid_buffer, + valid_bitlen, + valid_operation ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_set_iv() */ + TEST_ASSERT( + mbedtls_cipher_set_iv( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_reset() */ + TEST_ASSERT( mbedtls_cipher_reset( &invalid_ctx ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_ASSERT( + mbedtls_cipher_update_ad( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_ASSERT( mbedtls_cipher_set_padding_mode( &invalid_ctx, valid_mode ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif + + /* mbedtls_cipher_update() */ + TEST_ASSERT( + mbedtls_cipher_update( &invalid_ctx, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_finish() */ + TEST_ASSERT( + mbedtls_cipher_finish( &invalid_ctx, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_ASSERT( + mbedtls_cipher_write_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_check_tag() */ + TEST_ASSERT( + mbedtls_cipher_check_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +exit: + mbedtls_cipher_free( &invalid_ctx ); + mbedtls_cipher_free( &valid_ctx ); +} + +void test_cipher_invalid_param_unconditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_unconditional( ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_cipher_invalid_param_conditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_operation_t invalid_operation = 100; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + /* mbedtls_cipher_init() */ + TEST_VALID_PARAM( mbedtls_cipher_init( &valid_ctx ) ); + TEST_INVALID_PARAM( mbedtls_cipher_init( NULL ) ); + + /* mbedtls_cipher_setup() */ + TEST_VALID_PARAM( mbedtls_cipher_setup( &valid_ctx, valid_info ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setup( NULL, valid_info ) ); + + /* mbedtls_cipher_get_block_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_block_size( NULL ) ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_MODE_NONE, + mbedtls_cipher_get_cipher_mode( NULL ) ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_iv_size( NULL ) ); + + /* mbedtls_cipher_get_type() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_CIPHER_NONE, + mbedtls_cipher_get_type( NULL ) ); + + /* mbedtls_cipher_get_name() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_name( NULL ) ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_KEY_LENGTH_NONE, + mbedtls_cipher_get_key_bitlen( NULL ) ); + + /* mbedtls_cipher_get_operation() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_OPERATION_NONE, + mbedtls_cipher_get_operation( NULL ) ); + + /* mbedtls_cipher_setkey() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( NULL, + valid_buffer, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + NULL, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + valid_buffer, + valid_bitlen, + invalid_operation ) ); + + /* mbedtls_cipher_set_iv() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_reset() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_reset( NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_padding_mode( NULL, valid_mode ) ); +#endif + + /* mbedtls_cipher_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( NULL, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + NULL, valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, + NULL ) ); + + /* mbedtls_cipher_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( NULL, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + valid_buffer, + NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_check_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + + /* mbedtls_cipher_crypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) + /* mbedtls_cipher_auth_encrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); + + /* mbedtls_cipher_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); +#endif /* defined(MBEDTLS_CIPHER_MODE_AEAD) */ + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) + /* mbedtls_cipher_auth_encrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); + + /* mbedtls_cipher_auth_decrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); +#endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */ + + /* mbedtls_cipher_free() */ + TEST_VALID_PARAM( mbedtls_cipher_free( NULL ) ); +exit: + TEST_VALID_PARAM( mbedtls_cipher_free( &valid_ctx ) ); +} + +void test_cipher_invalid_param_conditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_conditional( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#if defined(MBEDTLS_AES_C) +void test_cipher_special_behaviours( ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + unsigned char input[32]; + unsigned char output[32]; +#if defined (MBEDTLS_CIPHER_MODE_CBC) + unsigned char iv[32]; +#endif + size_t olen = 0; + + mbedtls_cipher_init( &ctx ); + memset( input, 0, sizeof( input ) ); + memset( output, 0, sizeof( output ) ); +#if defined(MBEDTLS_CIPHER_MODE_CBC) + memset( iv, 0, sizeof( iv ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_CBC ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* IV too big */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, MBEDTLS_MAX_IV_LENGTH + 1 ) + == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + + /* IV too small */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, 0 ) + == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_cipher_free( &ctx ); + mbedtls_cipher_init( &ctx ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_ECB ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* Update ECB with partial block */ + TEST_ASSERT( mbedtls_cipher_update( &ctx, input, 1, output, &olen ) + == MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_cipher_special_behaviours_wrapper( void ** params ) +{ + (void)params; + + test_cipher_special_behaviours( ); +} +#endif /* MBEDTLS_AES_C */ +void test_enc_dec_buf( int cipher_id, char * cipher_string, int key_len, + int length_val, int pad_mode ) +{ + size_t length = length_val, outlen, total_len, i, block_size; + unsigned char key[64]; + unsigned char iv[16]; + unsigned char ad[13]; + unsigned char tag[16]; + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + + /* + * Prepare contexts + */ + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( key, 0x2a, sizeof( key ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( mbedtls_cipher_info_from_string( cipher_string ) == cipher_info ); + + /* Initialise enc and dec contexts */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + /* + * Do a few encode/decode cycles + */ + for( i = 0; i < 3; i++ ) + { + memset( iv , 0x00 + i, sizeof( iv ) ); + memset( ad, 0x10 + i, sizeof( ad ) ); + memset( inbuf, 0x20 + i, sizeof( inbuf ) ); + + memset( encbuf, 0, sizeof( encbuf ) ); + memset( decbuf, 0, sizeof( decbuf ) ); + memset( tag, 0, sizeof( tag ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, sizeof( iv ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, sizeof( iv ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, ad, sizeof( ad ) - i ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, ad, sizeof( ad ) - i ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, length, encbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_write_tag( &ctx_enc, tag, sizeof( tag ) ) ); +#endif + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len > length && + total_len <= length + block_size ) ); + + /* decode the previously encoded string */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, total_len, decbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_check_tag( &ctx_dec, tag, sizeof( tag ) ) ); +#endif + + /* check result */ + TEST_ASSERT( total_len == length ); + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + } + + /* + * Done + */ +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_wrapper( void ** params ) +{ + + test_enc_dec_buf( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_enc_fail( int cipher_id, int pad_mode, int key_len, int length_val, + int ret ) +{ + size_t length = length_val; + unsigned char key[32]; + unsigned char iv[16]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + + /* Initialise context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key, key_len, MBEDTLS_ENCRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, NULL, 0 ) ); +#endif + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, inbuf, length, encbuf, &outlen ) ); + TEST_ASSERT( ret == mbedtls_cipher_finish( &ctx, encbuf + outlen, &outlen ) ); + + /* done */ +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_enc_fail_wrapper( void ** params ) +{ + + test_enc_fail( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_dec_empty_buf( int cipher, + int expected_update_ret, + int expected_finish_ret ) +{ + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise context */ + cipher_info = mbedtls_cipher_info_from_type( cipher ); + TEST_ASSERT( NULL != cipher_info); + TEST_ASSERT( sizeof(key) * 8 >= cipher_info->key_bitlen ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, + key, cipher_info->key_bitlen, + MBEDTLS_DECRYPT ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); +#endif + + /* decode 0-byte string */ + TEST_ASSERT( expected_update_ret == + mbedtls_cipher_update( &ctx_dec, encbuf, 0, decbuf, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + if ( expected_finish_ret == 0 && + ( cipher_info->mode == MBEDTLS_MODE_CBC || + cipher_info->mode == MBEDTLS_MODE_ECB ) ) + { + /* Non-CBC and non-ECB ciphers are OK with decrypting empty buffers and + * return success, not MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED, when + * decrypting an empty buffer. + * On the other hand, CBC and ECB ciphers need a full block of input. + */ + expected_finish_ret = MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED; + } + + TEST_ASSERT( expected_finish_ret == mbedtls_cipher_finish( + &ctx_dec, decbuf + outlen, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + +exit: + mbedtls_cipher_free( &ctx_dec ); +} + +void test_dec_empty_buf_wrapper( void ** params ) +{ + + test_dec_empty_buf( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +void test_enc_dec_buf_multipart( int cipher_id, int key_len, int first_length_val, + int second_length_val, int pad_mode, + int first_encrypt_output_len, int second_encrypt_output_len, + int first_decrypt_output_len, int second_decrypt_output_len ) +{ + size_t first_length = first_length_val; + size_t second_length = second_length_val; + size_t length = first_length + second_length; + size_t block_size; + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + size_t totaloutlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise enc and dec contexts */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, NULL, 0 ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, first_length, encbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_encrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf + first_length, second_length, encbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_encrypt_output_len == outlen ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen > length && + totaloutlen <= length + block_size ) ); + + /* decode the previously encoded string */ + second_length = totaloutlen - first_length; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, first_length, decbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_decrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf + first_length, second_length, decbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_decrypt_output_len == outlen ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length ); + + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_multipart_wrapper( void ** params ) +{ + + test_enc_dec_buf_multipart( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ) ); +} +void test_decrypt_test_vec( int cipher_id, int pad_mode, data_t * key, + data_t * iv, data_t * cipher, + data_t * clear, data_t * ad, data_t * tag, + int finish_result, int tag_result ) +{ + unsigned char output[265]; + mbedtls_cipher_context_t ctx; + size_t outlen, total_len; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + +#if !defined(MBEDTLS_GCM_C) && !defined(MBEDTLS_CHACHAPOLY_C) + ((void) ad); + ((void) tag); +#endif + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, MBEDTLS_DECRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( pad_mode != -1 ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv->x, iv->len ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, ad->x, ad->len ) ); +#endif + + /* decode buffer and check tag->x */ + total_len = 0; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, cipher->x, cipher->len, output, &outlen ) ); + total_len += outlen; + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + total_len += outlen; +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( tag_result == mbedtls_cipher_check_tag( &ctx, tag->x, tag->len ) ); +#endif + + /* check plaintext only if everything went fine */ + if( 0 == finish_result && 0 == tag_result ) + { + TEST_ASSERT( total_len == clear->len ); + TEST_ASSERT( 0 == memcmp( output, clear->x, clear->len ) ); + } + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_decrypt_test_vec_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_decrypt_test_vec( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, &data10, &data12, *( (int *) params[14] ), *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +void test_auth_crypt_tv( int cipher_id, data_t * key, data_t * iv, + data_t * ad, data_t * cipher, data_t * tag, + char * result, data_t * clear, int use_psa ) +{ + /* + * Take an AEAD ciphertext + tag and perform a pair + * of AEAD decryption and AEAD encryption. Check that + * this results in the expected plaintext, and that + * decryption and encryption are inverse to one another. + * + * Do that twice: + * - once with legacy functions auth_decrypt/auth_encrypt + * - once with new functions auth_decrypt_ext/auth_encrypt_ext + * This allows testing both without duplicating test cases. + */ + + int ret; + int using_nist_kw, using_nist_kw_padding; + + mbedtls_cipher_context_t ctx; + size_t outlen; + + unsigned char *cipher_plus_tag = NULL; + size_t cipher_plus_tag_len; + unsigned char *decrypt_buf = NULL; + size_t decrypt_buf_len = 0; + unsigned char *encrypt_buf = NULL; + size_t encrypt_buf_len = 0; + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + unsigned char *tmp_tag = NULL; + unsigned char *tmp_cipher = NULL; + unsigned char *tag_buf = NULL; +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + + /* Null pointers are documented as valid for inputs of length 0. + * The test framework passes non-null pointers, so set them to NULL. + * key, cipher and tag can't be empty. */ + if( iv->len == 0 ) + iv->x = NULL; + if( ad->len == 0 ) + ad->x = NULL; + if( clear->len == 0 ) + clear->x = NULL; + + mbedtls_cipher_init( &ctx ); + + /* Initialize PSA Crypto */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_ASSERT( psa_crypto_init( ) ); +#else + (void) use_psa; +#endif + + /* + * Are we using NIST_KW? with padding? + */ + using_nist_kw_padding = cipher_id == MBEDTLS_CIPHER_AES_128_KWP || + cipher_id == MBEDTLS_CIPHER_AES_192_KWP || + cipher_id == MBEDTLS_CIPHER_AES_256_KWP; + using_nist_kw = cipher_id == MBEDTLS_CIPHER_AES_128_KW || + cipher_id == MBEDTLS_CIPHER_AES_192_KW || + cipher_id == MBEDTLS_CIPHER_AES_256_KW || + using_nist_kw_padding; + + /**************************************************************** + * * + * Part 1: non-deprecated API * + * * + ****************************************************************/ + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * prepare buffer for decryption + * (we need the tag appended to the ciphertext) + */ + cipher_plus_tag_len = cipher->len + tag->len; + ASSERT_ALLOC( cipher_plus_tag, cipher_plus_tag_len ); + memcpy( cipher_plus_tag, cipher->x, cipher->len ); + memcpy( cipher_plus_tag + cipher->len, tag->x, tag->len ); + + /* + * Compute length of output buffer according to the documentation + */ + if( using_nist_kw ) + decrypt_buf_len = cipher_plus_tag_len - 8; + else + decrypt_buf_len = cipher_plus_tag_len - tag->len; + + + /* + * Try decrypting to a buffer that's 1B too small + */ + if( decrypt_buf_len != 0 ) + { + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + } + + /* + * Authenticate and decrypt, and check result + */ + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len, &outlen, tag->len ); + + if( strcmp( result, "FAIL" ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, decrypt_buf_len ) ); + } + else + { + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + /* Free this, but keep cipher_plus_tag for deprecated function with PSA */ + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* + * Compute size of output buffer according to documentation + */ + if( using_nist_kw ) + { + encrypt_buf_len = clear->len + 8; + if( using_nist_kw_padding && encrypt_buf_len % 8 != 0 ) + encrypt_buf_len += 8 - encrypt_buf_len % 8; + } + else + { + encrypt_buf_len = clear->len + tag->len; + } + + /* + * Try encrypting with an output buffer that's 1B too small + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret != 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + + /* + * Encrypt and check the result + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len, &outlen, tag->len ); + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len + tag->len ); + TEST_ASSERT( memcmp( encrypt_buf, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( encrypt_buf + cipher->len, + tag->x, tag->len ) == 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + } + + /**************************************************************** + * * + * Part 2: deprecated API * + * * + ****************************************************************/ + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * Prepare pointers for decryption + */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + { + /* PSA requires that the tag immediately follows the ciphertext. + * Fortunately, we already have that from testing the new API. */ + tmp_cipher = cipher_plus_tag; + tmp_tag = tmp_cipher + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + tmp_cipher = cipher->x; + tmp_tag = tag->x; + } + + /* + * Authenticate and decrypt, and check result + */ + + ASSERT_ALLOC( decrypt_buf, cipher->len ); + outlen = 0; + ret = mbedtls_cipher_auth_decrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + tmp_cipher, cipher->len, decrypt_buf, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + /* NIST_KW with legacy API */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else if( strcmp( result, "FAIL" ) == 0 ) + { + /* unauthentic message */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, cipher->len ) ); + } + else + { + /* authentic message: is the plaintext correct? */ + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + mbedtls_free( cipher_plus_tag ); + cipher_plus_tag = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* prepare buffers for encryption */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa ) + { + ASSERT_ALLOC( cipher_plus_tag, cipher->len + tag->len ); + tmp_cipher = cipher_plus_tag; + tmp_tag = cipher_plus_tag + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + ASSERT_ALLOC( encrypt_buf, cipher->len ); + ASSERT_ALLOC( tag_buf, tag->len ); + tmp_cipher = encrypt_buf; + tmp_tag = tag_buf; + } + + /* + * Encrypt and check the result + */ + outlen = 0; + ret = mbedtls_cipher_auth_encrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + clear->x, clear->len, tmp_cipher, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len ); + if( cipher->len != 0 ) + TEST_ASSERT( memcmp( tmp_cipher, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( tmp_tag, tag->x, tag->len ) == 0 ); + } + } + +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +exit: + + mbedtls_cipher_free( &ctx ); + mbedtls_free( decrypt_buf ); + mbedtls_free( encrypt_buf ); + mbedtls_free( cipher_plus_tag ); +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + mbedtls_free( tag_buf ); +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_auth_crypt_tv_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_auth_crypt_tv( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, (char *) params[11], &data12, *( (int *) params[14] ) ); +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ +void test_test_vec_ecb( int cipher_id, int operation, data_t * key, + data_t * input, data_t * result, int finish_result + ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, input->x, + mbedtls_cipher_get_block_size( &ctx ), + output, &outlen ) ); + TEST_ASSERT( outlen == mbedtls_cipher_get_block_size( &ctx ) ); + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, + mbedtls_cipher_get_block_size( &ctx ) ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_test_vec_ecb_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_test_vec_ecb( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_test_vec_crypt( int cipher_id, int operation, data_t *key, + data_t *iv, data_t *input, data_t *result, + int finish_result, int use_psa ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; +#else + if( use_psa == 1 ) + { + PSA_ASSERT( psa_crypto_init( ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( &ctx, + mbedtls_cipher_info_from_type( cipher_id ), 0 ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + if( MBEDTLS_MODE_CBC == ctx.cipher_info->mode ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, MBEDTLS_PADDING_NONE ) ); + + TEST_ASSERT( finish_result == mbedtls_cipher_crypt( &ctx, iv->len ? iv->x : NULL, + iv->len, input->x, input->len, + output, &outlen ) ); + TEST_ASSERT( result->len == outlen ); + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, outlen ) ); + +exit: + mbedtls_cipher_free( &ctx ); +#if defined(MBEDTLS_USE_PSA_CRYPTO) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_test_vec_crypt_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_test_vec_crypt( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_set_padding( int cipher_id, int pad_mode, int ret ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + mbedtls_cipher_init( &ctx ); + + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + TEST_ASSERT( ret == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_set_padding_wrapper( void ** params ) +{ + + test_set_padding( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_check_padding( int pad_mode, data_t * input, int ret, int dlen_check + ) +{ + mbedtls_cipher_info_t cipher_info; + mbedtls_cipher_context_t ctx; + size_t dlen; + + /* build a fake context just for getting access to get_padding */ + mbedtls_cipher_init( &ctx ); + cipher_info.mode = MBEDTLS_MODE_CBC; + ctx.cipher_info = &cipher_info; + + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + + + TEST_ASSERT( ret == ctx.get_padding( input->x, input->len, &dlen ) ); + if( 0 == ret ) + TEST_ASSERT( dlen == (size_t) dlen_check ); +exit: + ; +} + +void test_check_padding_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_check_padding( *( (int *) params[0] ), &data1, *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#endif /* MBEDTLS_CIPHER_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_AES_128_CCM; + } + break; + case 1: + { + *out_value = MBEDTLS_CIPHER_AES_192_CCM; + } + break; + case 2: + { + *out_value = MBEDTLS_CIPHER_AES_256_CCM; + } + break; + case 3: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_128_CCM; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_CCM_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_CAMELLIA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_USE_PSA_CRYPTO) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_CIPHER_C) + test_mbedtls_cipher_list_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_CIPHER_C) + test_cipher_invalid_param_unconditional_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_cipher_invalid_param_conditional_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_AES_C) + test_cipher_special_behaviours_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_fail_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_CIPHER_C) + test_dec_empty_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_multipart_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_CIPHER_C) + test_decrypt_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_AUTH_CRYPT) + test_auth_crypt_tv_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_CIPHER_C) + test_test_vec_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_test_vec_crypt_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_set_padding_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_check_padding_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_cipher.ccm.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_cipher.ccm.datax b/third_party/mbedtls/test/test_suite_cipher.ccm.datax new file mode 100644 index 000000000..5bae9a64c --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.ccm.datax @@ -0,0 +1,864 @@ +AES-128-CCM test vector NIST #1 (P=0, N=7, A=0, T=4) +depends_on:0:1 +9:exp:0:hex:"4ae701103c63deca5b5a3939d7d05992":hex:"5a8aa485c316e9":hex:"":hex:"":hex:"02209f55":char*:"":hex:"":int:0 + +AES-128-CCM test vector NIST #2 (P=0, N=7, A=0, T=4) +depends_on:0:1 +9:exp:0:hex:"4ae701103c63deca5b5a3939d7d05992":hex:"3796cf51b87266":hex:"":hex:"":hex:"9a04c241":char*:"FAIL":hex:"":int:0 + +AES-128-CCM test vector NIST #3 (P=0, N=7, A=0, T=16) +depends_on:0:1 +9:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3":hex:"5a8aa485c316e9":hex:"":hex:"":hex:"75d582db43ce9b13ab4b6f7f14341330":char*:"":hex:"":int:0 + +AES-128-CCM test vector NIST #4 (P=0, N=7, A=0, T=16) +depends_on:0:1 +9:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3":hex:"3796cf51b87266":hex:"":hex:"":hex:"3a65e03af37b81d05acc7ec1bc39deb0":char*:"FAIL":hex:"":int:0 + +AES-128-CCM test vector NIST #5 (P=0, N=13, A=0, T=4) +depends_on:0:1 +9:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"":hex:"90156f3f":char*:"":hex:"":int:0 + +AES-128-CCM test vector NIST #6 (P=0, N=13, A=0, T=4) +depends_on:0:1 +9:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3":hex:"a16a2e741f1cd9717285b6d882":hex:"":hex:"":hex:"88909016":char*:"FAIL":hex:"":int:0 + +AES-128-CCM test vector NIST #7 (P=0, N=13, A=0, T=16) +depends_on:0:1 +9:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"":hex:"fb04dc5a44c6bb000f2440f5154364b4":char*:"":hex:"":int:0 + +AES-128-CCM test vector NIST #8 (P=0, N=13, A=0, T=16) +depends_on:0:1 +9:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd":hex:"a16a2e741f1cd9717285b6d882":hex:"":hex:"":hex:"5447075bf42a59b91f08064738b015ab":char*:"FAIL":hex:"":int:0 + +AES-128-CCM test vector NIST #9 (P=24, N=7, A=0, T=4) +depends_on:0:1 +9:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd":hex:"5a8aa485c316e9":hex:"":hex:"a90e8ea44085ced791b2fdb7fd44b5cf0bd7d27718029bb7":hex:"03e1fa6b":char*:"":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22":int:0 + +AES-128-CCM test vector NIST #10 (P=24, N=7, A=0, T=4) +depends_on:0:1 +9:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd":hex:"31f8fa25827d48":hex:"":hex:"50aafe0578c115c4a8e126ff7b3ccb64dce8ccaa8ceda69f":hex:"23e5d81c":char*:"FAIL":hex:"":int:0 + +AES-128-CCM test vector NIST #11 (P=24, N=7, A=0, T=16) +depends_on:0:1 +9:exp:0:hex:"197afb02ffbd8f699dacae87094d5243":hex:"5a8aa485c316e9":hex:"":hex:"24ab9eeb0e5508cae80074f1070ee188a637171860881f1f":hex:"2d9a3fbc210595b7b8b1b41523111a8e":char*:"":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22":int:0 + +AES-128-CCM test vector NIST #12 (P=24, N=7, A=0, T=16) +depends_on:0:1 +9:exp:0:hex:"197afb02ffbd8f699dacae87094d5243":hex:"31f8fa25827d48":hex:"":hex:"7ebfda6fa5da1dbffd82dc29b875798fbcef8ba0084fbd24":hex:"63af747cc88a001fa94e060290f209c4":char*:"FAIL":hex:"":int:0 + +AES-128-CCM test vector NIST #13 (P=24, N=13, A=0, T=4) +depends_on:0:1 +9:exp:0:hex:"197afb02ffbd8f699dacae87094d5243":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"4a550134f94455979ec4bf89ad2bd80d25a77ae94e456134":hex:"a3e138b9":char*:"":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697":int:0 + +AES-128-CCM test vector NIST #14 (P=24, N=13, A=0, T=4) +depends_on:0:1 +9:exp:0:hex:"197afb02ffbd8f699dacae87094d5243":hex:"49004912fdd7269279b1f06a89":hex:"":hex:"118ec53dd1bfbe52d5b9fe5dfebecf2ee674ec983eada654":hex:"091a5ae9":char*:"FAIL":hex:"":int:0 + +AES-128-CCM test vector NIST #15 (P=24, N=13, A=0, T=16) +depends_on:0:1 +9:exp:0:hex:"90929a4b0ac65b350ad1591611fe4829":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"4bfe4e35784f0a65b545477e5e2f4bae0e1e6fa717eaf2cb":hex:"6a9a970b9beb2ac1bd4fd62168f8378a":char*:"":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697":int:0 + +AES-128-CCM test vector NIST #16 (P=24, N=13, A=0, T=16) +depends_on:0:1 +9:exp:0:hex:"90929a4b0ac65b350ad1591611fe4829":hex:"49004912fdd7269279b1f06a89":hex:"":hex:"0c56a503aa2c12e87450d45a7b714db980fd348f327c0065":hex:"a65666144994bad0c8195bcb4ade1337":char*:"FAIL":hex:"":int:0 + +AES-128-CCM test vector NIST #17 (P=0, N=7, A=32, T=4) +depends_on:0:1 +9:exp:0:hex:"90929a4b0ac65b350ad1591611fe4829":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"":hex:"782e4318":char*:"":hex:"":int:0 + +AES-128-CCM test vector NIST #18 (P=0, N=7, A=32, T=4) +depends_on:0:1 +9:exp:0:hex:"90929a4b0ac65b350ad1591611fe4829":hex:"a265480ca88d5f":hex:"a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe":hex:"":hex:"a04f270a":char*:"FAIL":hex:"":int:0 + +AES-128-CCM test vector NIST #19 (P=0, N=7, A=32, T=16) +depends_on:0:1 +9:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"":hex:"41b476013f45e4a781f253a6f3b1e530":char*:"":hex:"":int:0 + +AES-128-CCM test vector NIST #20 (P=0, N=7, A=32, T=16) +depends_on:0:1 +9:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b":hex:"a265480ca88d5f":hex:"a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe":hex:"":hex:"f9f018fcd125822616083fffebc4c8e6":char*:"FAIL":hex:"":int:0 + +AES-128-CCM test vector NIST #21 (P=0, N=13, A=32, T=4) +depends_on:0:1 +9:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"":hex:"9f69f24f":char*:"":hex:"":int:0 + +AES-128-CCM test vector NIST #22 (P=0, N=13, A=32, T=4) +depends_on:0:1 +9:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b":hex:"8739b4bea1a099fe547499cbc6":hex:"f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7":hex:"":hex:"e17afaa4":char*:"FAIL":hex:"":int:0 + +AES-128-CCM test vector NIST #23 (P=0, N=13, A=32, T=16) +depends_on:0:1 +9:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c7571":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"":hex:"1859ac36a40a6b28b34266253627797a":char*:"":hex:"":int:0 + +AES-128-CCM test vector NIST #24 (P=0, N=13, A=32, T=16) +depends_on:0:1 +9:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c7571":hex:"8739b4bea1a099fe547499cbc6":hex:"f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7":hex:"":hex:"edf8b46eb69ac0044116019dec183072":char*:"FAIL":hex:"":int:0 + +AES-128-CCM test vector NIST #25 (P=24, N=7, A=32, T=4) +depends_on:0:1 +9:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c7571":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"6be31860ca271ef448de8f8d8b39346daf4b81d7e92d65b3":hex:"38f125fa":char*:"":hex:"a265480ca88d5f536db0dc6abc40faf0d05be7a966977768":int:0 + +AES-128-CCM test vector NIST #26 (P=24, N=7, A=32, T=4) +depends_on:0:1 +9:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c7571":hex:"fdd2d6f503c915":hex:"5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e":hex:"4cc57a9927a6bc401441870d3193bf89ebd163f5c01501c7":hex:"28a66b69":char*:"FAIL":hex:"":int:0 + +AES-128-CCM test vector NIST #27 (P=24, N=7, A=32, T=16) +depends_on:0:1 +9:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728c":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"b351ab96b2e45515254558d5212673ee6c776d42dbca3b51":hex:"2cf3a20b7fd7c49e6e79bef475c2906f":char*:"":hex:"a265480ca88d5f536db0dc6abc40faf0d05be7a966977768":int:0 + +AES-128-CCM test vector NIST #28 (P=24, N=7, A=32, T=16) +depends_on:0:1 +9:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728c":hex:"fdd2d6f503c915":hex:"5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e":hex:"df1a5285caa41b4bb47f6e5ceceba4e82721828d68427a30":hex:"81d18ca149d6766bfaccec88f194eb5b":char*:"FAIL":hex:"":int:0 + +AES-128-CCM test vector NIST #29 (P=24, N=13, A=32, T=4) +depends_on:0:1 +9:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728c":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"934f893824e880f743d196b22d1f340a52608155087bd28a":hex:"c25e5329":char*:"":hex:"8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5":int:0 + +AES-128-CCM test vector NIST #30 (P=24, N=13, A=32, T=4) +depends_on:0:1 +9:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728c":hex:"0812757ad0cc4d17c4cfe7a642":hex:"ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10":hex:"f43ba9d834ad85dfab3f1c0c27c3441fe4e411a38a261a65":hex:"59b3b3ee":char*:"FAIL":hex:"":int:0 + +AES-128-CCM test vector NIST #31 (P=24, N=13, A=32, T=16) +depends_on:0:1 +9:exp:0:hex:"26511fb51fcfa75cb4b44da75a6e5a0e":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"50038b5fdd364ee747b70d00bd36840ece4ea19998123375":hex:"c0a458bfcafa3b2609afe0f825cbf503":char*:"":hex:"8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5":int:0 + +AES-128-CCM test vector NIST #32 (P=24, N=13, A=32, T=16) +depends_on:0:1 +9:exp:0:hex:"26511fb51fcfa75cb4b44da75a6e5a0e":hex:"0812757ad0cc4d17c4cfe7a642":hex:"ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10":hex:"78ed8ff6b5a1255d0fbd0a719a9c27b059ff5f83d0c4962c":hex:"390042ba8bb5f6798dab01c5afad7306":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #1 (P=0, N=7, A=0, T=4) +depends_on:0:1 +9:exp:1:hex:"c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c":hex:"5a8aa485c316e9":hex:"":hex:"":hex:"9d4b7f3b":char*:"":hex:"":int:0 + +AES-192-CCM test vector NIST #2 (P=0, N=7, A=0, T=4) +depends_on:0:1 +9:exp:1:hex:"c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c":hex:"3796cf51b87266":hex:"":hex:"":hex:"80745de9":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #3 (P=0, N=7, A=0, T=16) +depends_on:0:1 +9:exp:1:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65":hex:"5a8aa485c316e9":hex:"":hex:"":hex:"17223038fa99d53681ca1beabe78d1b4":char*:"":hex:"":int:0 + +AES-192-CCM test vector NIST #4 (P=0, N=7, A=0, T=16) +depends_on:0:1 +9:exp:1:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65":hex:"3796cf51b87266":hex:"":hex:"":hex:"d0e1eeef4d2a264536bb1c2c1bde7c35":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #5 (P=0, N=13, A=0, T=4) +depends_on:0:1 +9:exp:1:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"":hex:"fe69ed84":char*:"":hex:"":int:0 + +AES-192-CCM test vector NIST #6 (P=0, N=13, A=0, T=4) +depends_on:0:1 +9:exp:1:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65":hex:"a16a2e741f1cd9717285b6d882":hex:"":hex:"":hex:"db7ffc82":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #7 (P=0, N=13, A=0, T=16) +depends_on:0:1 +9:exp:1:hex:"19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"":hex:"0c66a8e547ed4f8c2c9a9a1eb5d455b9":char*:"":hex:"":int:0 + +AES-192-CCM test vector NIST #8 (P=0, N=13, A=0, T=16) +depends_on:0:1 +9:exp:1:hex:"19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa":hex:"a16a2e741f1cd9717285b6d882":hex:"":hex:"":hex:"38757b3a61a4dc97ca3ab88bf1240695":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #9 (P=24, N=7, A=0, T=4) +depends_on:0:1 +9:exp:1:hex:"19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa":hex:"5a8aa485c316e9":hex:"":hex:"411986d04d6463100bff03f7d0bde7ea2c3488784378138c":hex:"ddc93a54":char*:"":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22":int:0 + +AES-192-CCM test vector NIST #10 (P=24, N=7, A=0, T=4) +depends_on:0:1 +9:exp:1:hex:"19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa":hex:"31f8fa25827d48":hex:"":hex:"32b649ab56162e55d4148a1292d6a225a988eb1308298273":hex:"b6889036":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #11 (P=24, N=7, A=0, T=16) +depends_on:0:1 +9:exp:1:hex:"197afb02ffbd8f699dacae87094d524324576b99844f75e1":hex:"5a8aa485c316e9":hex:"":hex:"cba4b4aeb85f0492fd8d905c4a6d8233139833373ef188a8":hex:"c5a5ebecf7ac8607fe412189e83d9d20":char*:"":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22":int:0 + +AES-192-CCM test vector NIST #12 (P=24, N=7, A=0, T=16) +depends_on:0:1 +9:exp:1:hex:"197afb02ffbd8f699dacae87094d524324576b99844f75e1":hex:"31f8fa25827d48":hex:"":hex:"ca62713728b5c9d652504b0ae8fd4fee5d297ee6a8d19cb6":hex:"e699f15f14d34dcaf9ba8ed4b877c97d":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #13 (P=24, N=13, A=0, T=4) +depends_on:0:1 +9:exp:1:hex:"197afb02ffbd8f699dacae87094d524324576b99844f75e1":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"042653c674ef2a90f7fb11d30848e530ae59478f1051633a":hex:"34fad277":char*:"":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697":int:0 + +AES-192-CCM test vector NIST #14 (P=24, N=13, A=0, T=4) +depends_on:0:1 +9:exp:1:hex:"197afb02ffbd8f699dacae87094d524324576b99844f75e1":hex:"49004912fdd7269279b1f06a89":hex:"":hex:"1902d9769a7ba3d3268e1257395c8c2e5f98eef295dcbfa5":hex:"a35df775":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #15 (P=24, N=13, A=0, T=16) +depends_on:0:1 +9:exp:1:hex:"90929a4b0ac65b350ad1591611fe48297e03956f6083e451":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"a5b7d8cca2069908d1ed88e6a9fe2c9bede3131dad54671e":hex:"a7ade30a07d185692ab0ebdf4c78cf7a":char*:"":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697":int:0 + +AES-192-CCM test vector NIST #16 (P=24, N=13, A=0, T=16) +depends_on:0:1 +9:exp:1:hex:"90929a4b0ac65b350ad1591611fe48297e03956f6083e451":hex:"49004912fdd7269279b1f06a89":hex:"":hex:"9a98617fb97a0dfe466be692272dcdaec1c5443a3b51312e":hex:"f042c86363cc05afb98c66e16be8a445":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #17 (P=0, N=7, A=32, T=4) +depends_on:0:1 +9:exp:1:hex:"90929a4b0ac65b350ad1591611fe48297e03956f6083e451":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"":hex:"1d089a5f":char*:"":hex:"":int:0 + +AES-192-CCM test vector NIST #18 (P=0, N=7, A=32, T=4) +depends_on:0:1 +9:exp:1:hex:"90929a4b0ac65b350ad1591611fe48297e03956f6083e451":hex:"a265480ca88d5f":hex:"a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe":hex:"":hex:"2f46022a":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #19 (P=0, N=7, A=32, T=16) +depends_on:0:1 +9:exp:1:hex:"6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"":hex:"5280a2137fee3deefcfe9b63a1199fb3":char*:"":hex:"":int:0 + +AES-192-CCM test vector NIST #20 (P=0, N=7, A=32, T=16) +depends_on:0:1 +9:exp:1:hex:"6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2":hex:"a265480ca88d5f":hex:"a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe":hex:"":hex:"d40a7318c5f2d82f838c0beeefe0d598":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #21 (P=0, N=13, A=32, T=4) +depends_on:0:1 +9:exp:1:hex:"6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"":hex:"5e0eaebd":char*:"":hex:"":int:0 + +AES-192-CCM test vector NIST #22 (P=0, N=13, A=32, T=4) +depends_on:0:1 +9:exp:1:hex:"6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2":hex:"8739b4bea1a099fe547499cbc6":hex:"f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7":hex:"":hex:"71b7fc33":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #23 (P=0, N=13, A=32, T=16) +depends_on:0:1 +9:exp:1:hex:"f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"":hex:"d07ccf9fdc3d33aa94cda3d230da707c":char*:"":hex:"":int:0 + +AES-192-CCM test vector NIST #24 (P=0, N=13, A=32, T=16) +depends_on:0:1 +9:exp:1:hex:"f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4":hex:"8739b4bea1a099fe547499cbc6":hex:"f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7":hex:"":hex:"65fe32b649dc328c9f531584897e85b3":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #25 (P=24, N=7, A=32, T=4) +depends_on:0:1 +9:exp:1:hex:"f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"9f6ca4af9b159148c889a6584d1183ea26e2614874b05045":hex:"75dea8d1":char*:"":hex:"a265480ca88d5f536db0dc6abc40faf0d05be7a966977768":int:0 + +AES-192-CCM test vector NIST #26 (P=24, N=7, A=32, T=4) +depends_on:0:1 +9:exp:1:hex:"f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4":hex:"fdd2d6f503c915":hex:"5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e":hex:"84d8212e9cfc2121252baa3b065b1edcf50497b9594db1eb":hex:"d7965825":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #27 (P=24, N=7, A=32, T=16) +depends_on:0:1 +9:exp:1:hex:"a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"6aab64c4787599d8f213446beadb16e08dba60e97f56dbd1":hex:"4d1d980d6fe0fb44b421992662b97975":char*:"":hex:"a265480ca88d5f536db0dc6abc40faf0d05be7a966977768":int:0 + +AES-192-CCM test vector NIST #28 (P=24, N=7, A=32, T=16) +depends_on:0:1 +9:exp:1:hex:"a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d":hex:"fdd2d6f503c915":hex:"5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e":hex:"4980b2ee49b1aaf393175f5ab9bae95ec7904557dfa20660":hex:"3c51d36c826f01384100886198a7f6a3":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #29 (P=24, N=13, A=32, T=4) +depends_on:0:1 +9:exp:1:hex:"a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"16e543d0e20615ff0df15acd9927ddfe40668a54bb854ccc":hex:"c25e9fce":char*:"":hex:"8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5":int:0 + +AES-192-CCM test vector NIST #30 (P=24, N=13, A=32, T=4) +depends_on:0:1 +9:exp:1:hex:"a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d":hex:"0812757ad0cc4d17c4cfe7a642":hex:"ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10":hex:"df35b109caf690656ae278bbd8f8bba687a2ce11b105dae9":hex:"8ecedb3e":char*:"FAIL":hex:"":int:0 + +AES-192-CCM test vector NIST #31 (P=24, N=13, A=32, T=16) +depends_on:0:1 +9:exp:1:hex:"26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"c5b0b2ef17498c5570eb335df4588032958ba3d69bf6f317":hex:"8464a6f7fa2b76744e8e8d95691cecb8":char*:"":hex:"8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5":int:0 + +AES-192-CCM test vector NIST #32 (P=24, N=13, A=32, T=16) +depends_on:0:1 +9:exp:1:hex:"26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886":hex:"0812757ad0cc4d17c4cfe7a642":hex:"ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10":hex:"d1f0518929f4ae2f0543de2a7dfe4bb0110bb3057e524a1c":hex:"06bd6dc2e6bcc3436cffb969ae900388":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #1 (P=0, N=7, A=0, T=4) +depends_on:0:1 +9:exp:2:hex:"eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6":hex:"a544218dadd3c1":hex:"":hex:"":hex:"469c90bb":char*:"":hex:"":int:0 + +AES-256-CCM test vector NIST #2 (P=0, N=7, A=0, T=4) +depends_on:0:1 +9:exp:2:hex:"eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6":hex:"d3d5424e20fbec":hex:"":hex:"":hex:"46a908ed":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #3 (P=0, N=7, A=0, T=16) +depends_on:0:1 +9:exp:2:hex:"e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8":hex:"a544218dadd3c1":hex:"":hex:"":hex:"8207eb14d33855a52acceed17dbcbf6e":char*:"":hex:"":int:0 + +AES-256-CCM test vector NIST #4 (P=0, N=7, A=0, T=16) +depends_on:0:1 +9:exp:2:hex:"e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8":hex:"d3d5424e20fbec":hex:"":hex:"":hex:"60f8e127cb4d30db6df0622158cd931d":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #5 (P=0, N=13, A=0, T=4) +depends_on:0:1 +9:exp:2:hex:"e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8":hex:"a544218dadd3c10583db49cf39":hex:"":hex:"":hex:"8a19a133":char*:"":hex:"":int:0 + +AES-256-CCM test vector NIST #6 (P=0, N=13, A=0, T=4) +depends_on:0:1 +9:exp:2:hex:"e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8":hex:"3c0e2815d37d844f7ac240ba9d":hex:"":hex:"":hex:"2e317f1b":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #7 (P=0, N=13, A=0, T=16) +depends_on:0:1 +9:exp:2:hex:"af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569":hex:"a544218dadd3c10583db49cf39":hex:"":hex:"":hex:"97e1a8dd4259ccd2e431e057b0397fcf":char*:"":hex:"":int:0 + +AES-256-CCM test vector NIST #8 (P=0, N=13, A=0, T=16) +depends_on:0:1 +9:exp:2:hex:"af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569":hex:"3c0e2815d37d844f7ac240ba9d":hex:"":hex:"":hex:"5a9596c511ea6a8671adefc4f2157d8b":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #9 (P=24, N=7, A=0, T=4) +depends_on:0:1 +9:exp:2:hex:"af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569":hex:"a544218dadd3c1":hex:"":hex:"64a1341679972dc5869fcf69b19d5c5ea50aa0b5e985f5b7":hex:"22aa8d59":char*:"":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c98":int:0 + +AES-256-CCM test vector NIST #10 (P=24, N=7, A=0, T=4) +depends_on:0:1 +9:exp:2:hex:"af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569":hex:"bfcda8b5a2d0d2":hex:"":hex:"c5b7f802bffc498c1626e3774f1d9f94045dfd8e1a10a202":hex:"77d00a75":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #11 (P=24, N=7, A=0, T=16) +depends_on:0:1 +9:exp:2:hex:"f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453":hex:"a544218dadd3c1":hex:"":hex:"bc51c3925a960e7732533e4ef3a4f69ee6826de952bcb0fd":hex:"374f3bb6db8377ebfc79674858c4f305":char*:"":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c98":int:0 + +AES-256-CCM test vector NIST #12 (P=24, N=7, A=0, T=16) +depends_on:0:1 +9:exp:2:hex:"f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453":hex:"bfcda8b5a2d0d2":hex:"":hex:"afa1fa8e8a70e26b02161150556d604101fdf423f332c336":hex:"3275f2a4907d51b734fe7238cebbd48f":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #13 (P=24, N=13, A=0, T=4) +depends_on:0:1 +9:exp:2:hex:"f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453":hex:"a544218dadd3c10583db49cf39":hex:"":hex:"63e00d30e4b08fd2a1cc8d70fab327b2368e77a93be4f412":hex:"3d14fb3f":char*:"":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e":int:0 + +AES-256-CCM test vector NIST #14 (P=24, N=13, A=0, T=4) +depends_on:0:1 +9:exp:2:hex:"f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453":hex:"894dcaa61008eb8fb052c60d41":hex:"":hex:"bb5425b3869b76856ec58e39886fb6f6f2ac13fe44cb132d":hex:"8d0c0099":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #15 (P=24, N=13, A=0, T=16) +depends_on:0:1 +9:exp:2:hex:"1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4":hex:"a544218dadd3c10583db49cf39":hex:"":hex:"f0050ad16392021a3f40207bed3521fb1e9f808f49830c42":hex:"3a578d179902f912f9ea1afbce1120b3":char*:"":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e":int:0 + +AES-256-CCM test vector NIST #16 (P=24, N=13, A=0, T=16) +depends_on:0:1 +9:exp:2:hex:"1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4":hex:"894dcaa61008eb8fb052c60d41":hex:"":hex:"c408190d0fbf5034f83b24a8ed9657331a7ce141de4fae76":hex:"9084607b83bd06e6442eac8dacf583cc":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #17 (P=0, N=7, A=32, T=4) +depends_on:0:1 +9:exp:2:hex:"1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4":hex:"a544218dadd3c1":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab":hex:"":hex:"92d00fbe":char*:"":hex:"":int:0 + +AES-256-CCM test vector NIST #18 (P=0, N=7, A=32, T=4) +depends_on:0:1 +9:exp:2:hex:"1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4":hex:"78c46e3249ca28":hex:"232e957c65ffa11988e830d4617d500f1c4a35c1221f396c41ab214f074ca2dc":hex:"":hex:"9143e5c4":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #19 (P=0, N=7, A=32, T=16) +depends_on:0:1 +9:exp:2:hex:"a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088":hex:"a544218dadd3c1":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab":hex:"":hex:"93af11a08379eb37a16aa2837f09d69d":char*:"":hex:"":int:0 + +AES-256-CCM test vector NIST #20 (P=0, N=7, A=32, T=16) +depends_on:0:1 +9:exp:2:hex:"a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088":hex:"78c46e3249ca28":hex:"232e957c65ffa11988e830d4617d500f1c4a35c1221f396c41ab214f074ca2dc":hex:"":hex:"d19b0c14ec686a7961ca7c386d125a65":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #21 (P=0, N=13, A=32, T=4) +depends_on:0:1 +9:exp:2:hex:"a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088":hex:"a544218dadd3c10583db49cf39":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907":hex:"":hex:"866d4227":char*:"":hex:"":int:0 + +AES-256-CCM test vector NIST #22 (P=0, N=13, A=32, T=4) +depends_on:0:1 +9:exp:2:hex:"a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088":hex:"e8de970f6ee8e80ede933581b5":hex:"89f8b068d34f56bc49d839d8e47b347e6dae737b903b278632447e6c0485d26a":hex:"":hex:"94cb1127":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #23 (P=0, N=13, A=32, T=16) +depends_on:0:1 +9:exp:2:hex:"8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a":hex:"a544218dadd3c10583db49cf39":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907":hex:"":hex:"867b0d87cf6e0f718200a97b4f6d5ad5":char*:"":hex:"":int:0 + +AES-256-CCM test vector NIST #24 (P=0, N=13, A=32, T=16) +depends_on:0:1 +9:exp:2:hex:"8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a":hex:"e8de970f6ee8e80ede933581b5":hex:"89f8b068d34f56bc49d839d8e47b347e6dae737b903b278632447e6c0485d26a":hex:"":hex:"677a040d46ee3f2b7838273bdad14f16":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #25 (P=24, N=7, A=32, T=4) +depends_on:0:1 +9:exp:2:hex:"8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a":hex:"a544218dadd3c1":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab":hex:"c2fe12658139f5d0dd22cadf2e901695b579302a72fc5608":hex:"3ebc7720":char*:"":hex:"78c46e3249ca28e1ef0531d80fd37c124d9aecb7be6668e3":int:0 + +AES-256-CCM test vector NIST #26 (P=24, N=7, A=32, T=4) +depends_on:0:1 +9:exp:2:hex:"8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a":hex:"6ba004fd176791":hex:"5a053b2a1bb87e85d56527bfcdcd3ecafb991bb10e4c862bb0751c700a29f54b":hex:"94748ba81229e53c38583a8564b23ebbafc6f6efdf4c2a81":hex:"c44db2c9":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #27 (P=24, N=7, A=32, T=16) +depends_on:0:1 +9:exp:2:hex:"705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe":hex:"a544218dadd3c1":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab":hex:"3341168eb8c48468c414347fb08f71d2086f7c2d1bd581ce":hex:"1ac68bd42f5ec7fa7e068cc0ecd79c2a":char*:"":hex:"78c46e3249ca28e1ef0531d80fd37c124d9aecb7be6668e3":int:0 + +AES-256-CCM test vector NIST #28 (P=24, N=7, A=32, T=16) +depends_on:0:1 +9:exp:2:hex:"705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe":hex:"6ba004fd176791":hex:"5a053b2a1bb87e85d56527bfcdcd3ecafb991bb10e4c862bb0751c700a29f54b":hex:"d543acda712b898cbb27b8f598b2e4438ce587a836e27851":hex:"47c3338a2400809e739b63ba8227d2f9":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #29 (P=24, N=13, A=32, T=4) +depends_on:0:1 +9:exp:2:hex:"705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe":hex:"a544218dadd3c10583db49cf39":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907":hex:"c0ea400b599561e7905b99262b4565d5c3dc49fad84d7c69":hex:"ef891339":char*:"":hex:"e8de970f6ee8e80ede933581b5bcf4d837e2b72baa8b00c3":int:0 + +AES-256-CCM test vector NIST #30 (P=24, N=13, A=32, T=4) +depends_on:0:1 +9:exp:2:hex:"705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe":hex:"8fa501c5dd9ac9b868144c9fa5":hex:"5bb40e3bb72b4509324a7edc852f72535f1f6283156e63f6959ffaf39dcde800":hex:"60871e03ea0eb968536c99f926ea24ef43d41272ad9fb7f6":hex:"3d488623":char*:"FAIL":hex:"":int:0 + +AES-256-CCM test vector NIST #31 (P=24, N=13, A=32, T=16) +depends_on:0:1 +9:exp:2:hex:"314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e":hex:"a544218dadd3c10583db49cf39":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907":hex:"8d34cdca37ce77be68f65baf3382e31efa693e63f914a781":hex:"367f30f2eaad8c063ca50795acd90203":char*:"":hex:"e8de970f6ee8e80ede933581b5bcf4d837e2b72baa8b00c3":int:0 + +AES-256-CCM test vector NIST #32 (P=24, N=13, A=32, T=16) +depends_on:0:1 +9:exp:2:hex:"314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e":hex:"8fa501c5dd9ac9b868144c9fa5":hex:"5bb40e3bb72b4509324a7edc852f72535f1f6283156e63f6959ffaf39dcde800":hex:"516c0095cc3d85fd55e48da17c592e0c7014b9daafb82bdc":hex:"4b41096dfdbe9cc1ab610f8f3e038d16":char*:"FAIL":hex:"":int:0 + +Camellia-CCM test vector RFC 5528 #1 +depends_on:2:1 +9:exp:3:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"00000003020100A0A1A2A3A4A5":hex:"0001020304050607":hex:"BA737185E719310492F38A5F1251DA55FAFBC949848A0D":hex:"FCAECE746B3DB9AD":char*:"":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E":int:0 + +Camellia-CCM test vector RFC 5528 #2 +depends_on:2:1 +9:exp:3:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"00000004030201A0A1A2A3A4A5":hex:"0001020304050607":hex:"5D2564BF8EAFE1D99526EC016D1BF0424CFBD2CD62848F33":hex:"60B2295DF24283E8":char*:"":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F":int:0 + +Camellia-CCM test vector RFC 5528 #3 +depends_on:2:1 +9:exp:3:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"00000005040302A0A1A2A3A4A5":hex:"0001020304050607":hex:"81F663D6C7787817F9203608B982AD15DC2BBD87D756F79204":hex:"F551D6682F23AA46":char*:"":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20":int:0 + +Camellia-CCM test vector RFC 5528 #4 +depends_on:2:1 +9:exp:3:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"00000006050403A0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"CAEF1E827211B08F7BD90F08C77288C070A4A0":hex:"8B3A933A63E497A0":char*:"":hex:"0C0D0E0F101112131415161718191A1B1C1D1E":int:0 + +Camellia-CCM test vector RFC 5528 #5 +depends_on:2:1 +9:exp:3:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"00000007060504A0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"2AD3BAD94FC52E92BE438E827C1023B96A8A7725":hex:"8FA17BA7F331DB09":char*:"":hex:"0C0D0E0F101112131415161718191A1B1C1D1E1F":int:0 + +Camellia-CCM test vector RFC 5528 #6 +depends_on:2:1 +9:exp:3:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"00000008070605A0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"FEA5480BA53FA8D3C34422AACE4DE67FFA3BB73BAB":hex:"AB36A1EE4FE0FE28":char*:"":hex:"0C0D0E0F101112131415161718191A1B1C1D1E1F20":int:0 + +Camellia-CCM test vector RFC 5528 #7 +depends_on:2:1 +9:exp:3:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"00000009080706A0A1A2A3A4A5":hex:"0001020304050607":hex:"54532026E54C119A8D36D9EC6E1ED97416C8708C4B5C2C":hex:"ACAFA3BCCF7A4EBF9573":char*:"":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E":int:0 + +Camellia-CCM test vector RFC 5528 #8 +depends_on:2:1 +9:exp:3:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0000000A090807A0A1A2A3A4A5":hex:"0001020304050607":hex:"8AD19B001A87D148F4D92BEF34525CCCE3A63C6512A6F575":hex:"7388E4913EF14701F441":char*:"":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F":int:0 + +Camellia-CCM test vector RFC 5528 #9 +depends_on:2:1 +9:exp:3:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0000000B0A0908A0A1A2A3A4A5":hex:"0001020304050607":hex:"5DB08D62407E6E31D60F9CA2C60474219AC0BE50C0D4A57787":hex:"94D6E230CD25C9FEBF87":char*:"":hex:"08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20":int:0 + +Camellia-CCM test vector RFC 5528 #10 +depends_on:2:1 +9:exp:3:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0000000C0B0A09A0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"DB118CCEC1B8761C877CD8963A67D6F3BBBC5C":hex:"D09299EB11F312F23237":char*:"":hex:"0C0D0E0F101112131415161718191A1B1C1D1E":int:0 + +Camellia-CCM test vector RFC 5528 #11 +depends_on:2:1 +9:exp:3:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0000000D0C0B0AA0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"7CC83D8DC49103525B483DC5CA7EA9AB812B7056":hex:"079DAFFADA16CCCF2C4E":char*:"":hex:"0C0D0E0F101112131415161718191A1B1C1D1E1F":int:0 + +Camellia-CCM test vector RFC 5528 #12 +depends_on:2:1 +9:exp:3:hex:"C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF":hex:"0000000E0D0C0BA0A1A2A3A4A5":hex:"000102030405060708090A0B":hex:"2CD35B8820D23E7AA351B0E92FC79367238B2CC748":hex:"CBB94C2947793D64AF75":char*:"":hex:"0C0D0E0F101112131415161718191A1B1C1D1E1F20":int:0 + +Camellia-CCM test vector RFC 5528 #13 +depends_on:2:1 +9:exp:3:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"00A970110E1927B160B6A31C1C":hex:"6B7F464507FAE496":hex:"A435D727348DDD22907F7EB8F5FDBB4D939DA6524DB4F6":hex:"4558C02D25B127EE":char*:"":hex:"C6B5F3E6CA2311AEF7472B203E735EA561ADB17D56C5A3":int:0 + +Camellia-CCM test vector RFC 5528 #14 +depends_on:2:1 +9:exp:3:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"0083CD8CE0CB42B160B6A31C1C":hex:"986605B43DF15DE7":hex:"8AE052508FBECA932E346F05E0DC0DFBCF939EAFFA3E587C":hex:"867D6E1C48703806":char*:"":hex:"01F6CE6764C574483BB02E6BBF1E0ABD26A22572B4D80EE7":int:0 + +Camellia-CCM test vector RFC 5528 #15 +depends_on:2:1 +9:exp:3:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"005F54950B18F2B160B6A31C1C":hex:"48F2E7E1A7671A51":hex:"08B67EE21C8BF26E473E408599E9C0836D6AF0BB18DF55466C":hex:"A80878A790476DE5":char*:"":hex:"CDF1D8406FC2E9014953897005FBFB8BA57276F92404608E08":int:0 + +Camellia-CCM test vector RFC 5528 #16 +depends_on:2:1 +9:exp:3:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"00EC600863319AB160B6A31C1C":hex:"DE97DF3B8CBD6D8E5030DA4C":hex:"63B78B4967B19EDBB733CD1114F64EB2260893":hex:"68C354828D950CC5":char*:"":hex:"B005DCFA0B59181426A961685A993D8C43185B":int:0 + +Camellia-CCM test vector RFC 5528 #17 +depends_on:2:1 +9:exp:3:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"0060CFF1A31EA1B160B6A31C1C":hex:"A5EE93E457DF05466E782DCF":hex:"0BC6BBE2A8B909F4629EE6DC148DA44410E18AF4":hex:"3147383276F66A9F":char*:"":hex:"2E20211298105F129D5ED95B93F72D30B2FACCD7":int:0 + +Camellia-CCM test vector RFC 5528 #18 +depends_on:2:1 +9:exp:3:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"000F85CD995C97B160B6A31C1C":hex:"24AA1BF9A5CD876182A25074":hex:"222AD632FA31D6AF970C345F7E77CA3BD0DC25B340":hex:"A1A3D31F8D4B44B7":char*:"":hex:"2645941E75632D3491AF0FC0C9876C3BE4AA7468C9":int:0 + +Camellia-CCM test vector RFC 5528 #19 +depends_on:2:1 +9:exp:3:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"00C29B2CAAC4CDB160B6A31C1C":hex:"691946B9CA07BE87":hex:"05B8E1B9C49CFD56CF130AA6251DC2ECC06CCC508FE697":hex:"A0066D57C84BEC182768":char*:"":hex:"070135A6437C9DB120CD61D8F6C39C3EA125FD95A0D23D":int:0 + +Camellia-CCM test vector RFC 5528 #20 +depends_on:2:1 +9:exp:3:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"002C6B7595EE62B160B6A31C1C":hex:"D0C54ECB84627DC4":hex:"54CEB968DEE23611575EC003DFAA1CD48849BDF5AE2EDB6B":hex:"7FA775B150ED4383C5A9":char*:"":hex:"C8C0880E6C636E20093DD6594217D2E18877DB264E71A5CC":int:0 + +Camellia-CCM test vector RFC 5528 #21 +depends_on:2:1 +9:exp:3:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"00C53CD4C2AA24B160B6A31C1C":hex:"E285E0E4808CDA3D":hex:"B1404546BF667210CA28E309B39BD6CA7E9FC8285FE698D43C":hex:"D20A02E0BDCAED2010D3":char*:"":hex:"F75DAA0710C4E64297794DC2B7D2A20757B1AA4E448002FFAB":int:0 + +Camellia-CCM test vector RFC 5528 #22 +depends_on:2:1 +9:exp:3:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"00BEE9267FBADCB160B6A31C1C":hex:"6CAEF9941141570D7C813405":hex:"94C8959C11569A297831A721005857AB61B87A":hex:"2DEA0936B6EB5F625F5D":char*:"":hex:"C238822FAC5F98FF929405B0AD127A4E41854E":int:0 + +Camellia-CCM test vector RFC 5528 #23 +depends_on:2:1 +9:exp:3:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"00DFA8B1245007B160B6A31C1C":hex:"36A52CF16B19A2037AB7011E":hex:"5869E3AAD2447C74E0FC05F9A4EA74577F4DE8CA":hex:"8924764296AD04119CE7":char*:"":hex:"4DBF3E774AD245E5D5891F9D1C32A0AE022C85D7":int:0 + +Camellia-CCM test vector RFC 5528 #24 +depends_on:2:1 +9:exp:3:hex:"D75C2778078CA93D971F96FDE720F4CD":hex:"003B8FD8D3A937B160B6A31C1C":hex:"A4D499F78419728C19178B0C":hex:"4B198156393B0F7796086AAFB454F8C3F034CCA966":hex:"945F1FCEA7E11BEE6A2F":char*:"":hex:"9DC9EDAE2FF5DF8636E8C6DE0EED55F7867E33337D":int:0 + +AES-128-CCM test vector NIST #1 PSA (P=0, N=7, A=0, T=4) +depends_on:3:0:1 +9:exp:0:hex:"4ae701103c63deca5b5a3939d7d05992":hex:"5a8aa485c316e9":hex:"":hex:"":hex:"02209f55":char*:"":hex:"":int:1 + +AES-128-CCM test vector NIST #2 PSA (P=0, N=7, A=0, T=4) +depends_on:3:0:1 +9:exp:0:hex:"4ae701103c63deca5b5a3939d7d05992":hex:"3796cf51b87266":hex:"":hex:"":hex:"9a04c241":char*:"FAIL":hex:"":int:1 + +AES-128-CCM test vector NIST #3 PSA (P=0, N=7, A=0, T=16) +depends_on:3:0:1 +9:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3":hex:"5a8aa485c316e9":hex:"":hex:"":hex:"75d582db43ce9b13ab4b6f7f14341330":char*:"":hex:"":int:1 + +AES-128-CCM test vector NIST #4 PSA (P=0, N=7, A=0, T=16) +depends_on:3:0:1 +9:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3":hex:"3796cf51b87266":hex:"":hex:"":hex:"3a65e03af37b81d05acc7ec1bc39deb0":char*:"FAIL":hex:"":int:1 + +AES-128-CCM test vector NIST #5 PSA (P=0, N=13, A=0, T=4) +depends_on:3:0:1 +9:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"":hex:"90156f3f":char*:"":hex:"":int:1 + +AES-128-CCM test vector NIST #6 PSA (P=0, N=13, A=0, T=4) +depends_on:3:0:1 +9:exp:0:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3":hex:"a16a2e741f1cd9717285b6d882":hex:"":hex:"":hex:"88909016":char*:"FAIL":hex:"":int:1 + +AES-128-CCM test vector NIST #7 PSA (P=0, N=13, A=0, T=16) +depends_on:3:0:1 +9:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"":hex:"fb04dc5a44c6bb000f2440f5154364b4":char*:"":hex:"":int:1 + +AES-128-CCM test vector NIST #8 PSA (P=0, N=13, A=0, T=16) +depends_on:3:0:1 +9:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd":hex:"a16a2e741f1cd9717285b6d882":hex:"":hex:"":hex:"5447075bf42a59b91f08064738b015ab":char*:"FAIL":hex:"":int:1 + +AES-128-CCM test vector NIST #9 PSA (P=24, N=7, A=0, T=4) +depends_on:3:0:1 +9:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd":hex:"5a8aa485c316e9":hex:"":hex:"a90e8ea44085ced791b2fdb7fd44b5cf0bd7d27718029bb7":hex:"03e1fa6b":char*:"":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22":int:1 + +AES-128-CCM test vector NIST #10 PSA (P=24, N=7, A=0, T=4) +depends_on:3:0:1 +9:exp:0:hex:"19ebfde2d5468ba0a3031bde629b11fd":hex:"31f8fa25827d48":hex:"":hex:"50aafe0578c115c4a8e126ff7b3ccb64dce8ccaa8ceda69f":hex:"23e5d81c":char*:"FAIL":hex:"":int:1 + +AES-128-CCM test vector NIST #11 PSA (P=24, N=7, A=0, T=16) +depends_on:3:0:1 +9:exp:0:hex:"197afb02ffbd8f699dacae87094d5243":hex:"5a8aa485c316e9":hex:"":hex:"24ab9eeb0e5508cae80074f1070ee188a637171860881f1f":hex:"2d9a3fbc210595b7b8b1b41523111a8e":char*:"":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22":int:1 + +AES-128-CCM test vector NIST #12 PSA (P=24, N=7, A=0, T=16) +depends_on:3:0:1 +9:exp:0:hex:"197afb02ffbd8f699dacae87094d5243":hex:"31f8fa25827d48":hex:"":hex:"7ebfda6fa5da1dbffd82dc29b875798fbcef8ba0084fbd24":hex:"63af747cc88a001fa94e060290f209c4":char*:"FAIL":hex:"":int:1 + +AES-128-CCM test vector NIST #13 PSA (P=24, N=13, A=0, T=4) +depends_on:3:0:1 +9:exp:0:hex:"197afb02ffbd8f699dacae87094d5243":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"4a550134f94455979ec4bf89ad2bd80d25a77ae94e456134":hex:"a3e138b9":char*:"":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697":int:1 + +AES-128-CCM test vector NIST #14 PSA (P=24, N=13, A=0, T=4) +depends_on:3:0:1 +9:exp:0:hex:"197afb02ffbd8f699dacae87094d5243":hex:"49004912fdd7269279b1f06a89":hex:"":hex:"118ec53dd1bfbe52d5b9fe5dfebecf2ee674ec983eada654":hex:"091a5ae9":char*:"FAIL":hex:"":int:1 + +AES-128-CCM test vector NIST #15 PSA (P=24, N=13, A=0, T=16) +depends_on:3:0:1 +9:exp:0:hex:"90929a4b0ac65b350ad1591611fe4829":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"4bfe4e35784f0a65b545477e5e2f4bae0e1e6fa717eaf2cb":hex:"6a9a970b9beb2ac1bd4fd62168f8378a":char*:"":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697":int:1 + +AES-128-CCM test vector NIST #16 PSA (P=24, N=13, A=0, T=16) +depends_on:3:0:1 +9:exp:0:hex:"90929a4b0ac65b350ad1591611fe4829":hex:"49004912fdd7269279b1f06a89":hex:"":hex:"0c56a503aa2c12e87450d45a7b714db980fd348f327c0065":hex:"a65666144994bad0c8195bcb4ade1337":char*:"FAIL":hex:"":int:1 + +AES-128-CCM test vector NIST #17 PSA (P=0, N=7, A=32, T=4) +depends_on:3:0:1 +9:exp:0:hex:"90929a4b0ac65b350ad1591611fe4829":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"":hex:"782e4318":char*:"":hex:"":int:1 + +AES-128-CCM test vector NIST #18 PSA (P=0, N=7, A=32, T=4) +depends_on:3:0:1 +9:exp:0:hex:"90929a4b0ac65b350ad1591611fe4829":hex:"a265480ca88d5f":hex:"a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe":hex:"":hex:"a04f270a":char*:"FAIL":hex:"":int:1 + +AES-128-CCM test vector NIST #19 PSA (P=0, N=7, A=32, T=16) +depends_on:3:0:1 +9:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"":hex:"41b476013f45e4a781f253a6f3b1e530":char*:"":hex:"":int:1 + +AES-128-CCM test vector NIST #20 PSA (P=0, N=7, A=32, T=16) +depends_on:3:0:1 +9:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b":hex:"a265480ca88d5f":hex:"a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe":hex:"":hex:"f9f018fcd125822616083fffebc4c8e6":char*:"FAIL":hex:"":int:1 + +AES-128-CCM test vector NIST #21 PSA (P=0, N=13, A=32, T=4) +depends_on:3:0:1 +9:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"":hex:"9f69f24f":char*:"":hex:"":int:1 + +AES-128-CCM test vector NIST #22 PSA (P=0, N=13, A=32, T=4) +depends_on:3:0:1 +9:exp:0:hex:"6a798d7c5e1a72b43e20ad5c7b08567b":hex:"8739b4bea1a099fe547499cbc6":hex:"f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7":hex:"":hex:"e17afaa4":char*:"FAIL":hex:"":int:1 + +AES-128-CCM test vector NIST #23 PSA (P=0, N=13, A=32, T=16) +depends_on:3:0:1 +9:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c7571":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"":hex:"1859ac36a40a6b28b34266253627797a":char*:"":hex:"":int:1 + +AES-128-CCM test vector NIST #24 PSA (P=0, N=13, A=32, T=16) +depends_on:3:0:1 +9:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c7571":hex:"8739b4bea1a099fe547499cbc6":hex:"f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7":hex:"":hex:"edf8b46eb69ac0044116019dec183072":char*:"FAIL":hex:"":int:1 + +AES-128-CCM test vector NIST #25 PSA (P=24, N=7, A=32, T=4) +depends_on:3:0:1 +9:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c7571":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"6be31860ca271ef448de8f8d8b39346daf4b81d7e92d65b3":hex:"38f125fa":char*:"":hex:"a265480ca88d5f536db0dc6abc40faf0d05be7a966977768":int:1 + +AES-128-CCM test vector NIST #26 PSA (P=24, N=7, A=32, T=4) +depends_on:3:0:1 +9:exp:0:hex:"f9fdca4ac64fe7f014de0f43039c7571":hex:"fdd2d6f503c915":hex:"5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e":hex:"4cc57a9927a6bc401441870d3193bf89ebd163f5c01501c7":hex:"28a66b69":char*:"FAIL":hex:"":int:1 + +AES-128-CCM test vector NIST #27 PSA (P=24, N=7, A=32, T=16) +depends_on:3:0:1 +9:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728c":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"b351ab96b2e45515254558d5212673ee6c776d42dbca3b51":hex:"2cf3a20b7fd7c49e6e79bef475c2906f":char*:"":hex:"a265480ca88d5f536db0dc6abc40faf0d05be7a966977768":int:1 + +AES-128-CCM test vector NIST #28 PSA (P=24, N=7, A=32, T=16) +depends_on:3:0:1 +9:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728c":hex:"fdd2d6f503c915":hex:"5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e":hex:"df1a5285caa41b4bb47f6e5ceceba4e82721828d68427a30":hex:"81d18ca149d6766bfaccec88f194eb5b":char*:"FAIL":hex:"":int:1 + +AES-128-CCM test vector NIST #29 PSA (P=24, N=13, A=32, T=4) +depends_on:3:0:1 +9:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728c":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"934f893824e880f743d196b22d1f340a52608155087bd28a":hex:"c25e5329":char*:"":hex:"8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5":int:1 + +AES-128-CCM test vector NIST #30 PSA (P=24, N=13, A=32, T=4) +depends_on:3:0:1 +9:exp:0:hex:"a7aa635ea51b0bb20a092bd5573e728c":hex:"0812757ad0cc4d17c4cfe7a642":hex:"ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10":hex:"f43ba9d834ad85dfab3f1c0c27c3441fe4e411a38a261a65":hex:"59b3b3ee":char*:"FAIL":hex:"":int:1 + +AES-128-CCM test vector NIST #31 PSA (P=24, N=13, A=32, T=16) +depends_on:3:0:1 +9:exp:0:hex:"26511fb51fcfa75cb4b44da75a6e5a0e":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"50038b5fdd364ee747b70d00bd36840ece4ea19998123375":hex:"c0a458bfcafa3b2609afe0f825cbf503":char*:"":hex:"8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5":int:1 + +AES-128-CCM test vector NIST #32 PSA (P=24, N=13, A=32, T=16) +depends_on:3:0:1 +9:exp:0:hex:"26511fb51fcfa75cb4b44da75a6e5a0e":hex:"0812757ad0cc4d17c4cfe7a642":hex:"ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10":hex:"78ed8ff6b5a1255d0fbd0a719a9c27b059ff5f83d0c4962c":hex:"390042ba8bb5f6798dab01c5afad7306":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #1 PSA (P=0, N=7, A=0, T=4) +depends_on:3:0:1 +9:exp:1:hex:"c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c":hex:"5a8aa485c316e9":hex:"":hex:"":hex:"9d4b7f3b":char*:"":hex:"":int:1 + +AES-192-CCM test vector NIST #2 PSA (P=0, N=7, A=0, T=4) +depends_on:3:0:1 +9:exp:1:hex:"c98ad7f38b2c7e970c9b965ec87a08208384718f78206c6c":hex:"3796cf51b87266":hex:"":hex:"":hex:"80745de9":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #3 PSA (P=0, N=7, A=0, T=16) +depends_on:3:0:1 +9:exp:1:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65":hex:"5a8aa485c316e9":hex:"":hex:"":hex:"17223038fa99d53681ca1beabe78d1b4":char*:"":hex:"":int:1 + +AES-192-CCM test vector NIST #4 PSA (P=0, N=7, A=0, T=16) +depends_on:3:0:1 +9:exp:1:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65":hex:"3796cf51b87266":hex:"":hex:"":hex:"d0e1eeef4d2a264536bb1c2c1bde7c35":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #5 PSA (P=0, N=13, A=0, T=4) +depends_on:3:0:1 +9:exp:1:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"":hex:"fe69ed84":char*:"":hex:"":int:1 + +AES-192-CCM test vector NIST #6 PSA (P=0, N=13, A=0, T=4) +depends_on:3:0:1 +9:exp:1:hex:"4bb3c4a4f893ad8c9bdc833c325d62b3d3ad1bccf9282a65":hex:"a16a2e741f1cd9717285b6d882":hex:"":hex:"":hex:"db7ffc82":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #7 PSA (P=0, N=13, A=0, T=16) +depends_on:3:0:1 +9:exp:1:hex:"19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"":hex:"0c66a8e547ed4f8c2c9a9a1eb5d455b9":char*:"":hex:"":int:1 + +AES-192-CCM test vector NIST #8 PSA (P=0, N=13, A=0, T=16) +depends_on:3:0:1 +9:exp:1:hex:"19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa":hex:"a16a2e741f1cd9717285b6d882":hex:"":hex:"":hex:"38757b3a61a4dc97ca3ab88bf1240695":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #9 PSA (P=24, N=7, A=0, T=4) +depends_on:3:0:1 +9:exp:1:hex:"19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa":hex:"5a8aa485c316e9":hex:"":hex:"411986d04d6463100bff03f7d0bde7ea2c3488784378138c":hex:"ddc93a54":char*:"":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22":int:1 + +AES-192-CCM test vector NIST #10 PSA (P=24, N=7, A=0, T=4) +depends_on:3:0:1 +9:exp:1:hex:"19ebfde2d5468ba0a3031bde629b11fd4094afcb205393fa":hex:"31f8fa25827d48":hex:"":hex:"32b649ab56162e55d4148a1292d6a225a988eb1308298273":hex:"b6889036":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #11 PSA (P=24, N=7, A=0, T=16) +depends_on:3:0:1 +9:exp:1:hex:"197afb02ffbd8f699dacae87094d524324576b99844f75e1":hex:"5a8aa485c316e9":hex:"":hex:"cba4b4aeb85f0492fd8d905c4a6d8233139833373ef188a8":hex:"c5a5ebecf7ac8607fe412189e83d9d20":char*:"":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22":int:1 + +AES-192-CCM test vector NIST #12 PSA (P=24, N=7, A=0, T=16) +depends_on:3:0:1 +9:exp:1:hex:"197afb02ffbd8f699dacae87094d524324576b99844f75e1":hex:"31f8fa25827d48":hex:"":hex:"ca62713728b5c9d652504b0ae8fd4fee5d297ee6a8d19cb6":hex:"e699f15f14d34dcaf9ba8ed4b877c97d":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #13 PSA (P=24, N=13, A=0, T=4) +depends_on:3:0:1 +9:exp:1:hex:"197afb02ffbd8f699dacae87094d524324576b99844f75e1":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"042653c674ef2a90f7fb11d30848e530ae59478f1051633a":hex:"34fad277":char*:"":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697":int:1 + +AES-192-CCM test vector NIST #14 PSA (P=24, N=13, A=0, T=4) +depends_on:3:0:1 +9:exp:1:hex:"197afb02ffbd8f699dacae87094d524324576b99844f75e1":hex:"49004912fdd7269279b1f06a89":hex:"":hex:"1902d9769a7ba3d3268e1257395c8c2e5f98eef295dcbfa5":hex:"a35df775":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #15 PSA (P=24, N=13, A=0, T=16) +depends_on:3:0:1 +9:exp:1:hex:"90929a4b0ac65b350ad1591611fe48297e03956f6083e451":hex:"5a8aa485c316e9403aff859fbb":hex:"":hex:"a5b7d8cca2069908d1ed88e6a9fe2c9bede3131dad54671e":hex:"a7ade30a07d185692ab0ebdf4c78cf7a":char*:"":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697":int:1 + +AES-192-CCM test vector NIST #16 PSA (P=24, N=13, A=0, T=16) +depends_on:3:0:1 +9:exp:1:hex:"90929a4b0ac65b350ad1591611fe48297e03956f6083e451":hex:"49004912fdd7269279b1f06a89":hex:"":hex:"9a98617fb97a0dfe466be692272dcdaec1c5443a3b51312e":hex:"f042c86363cc05afb98c66e16be8a445":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #17 PSA (P=0, N=7, A=32, T=4) +depends_on:3:0:1 +9:exp:1:hex:"90929a4b0ac65b350ad1591611fe48297e03956f6083e451":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"":hex:"1d089a5f":char*:"":hex:"":int:1 + +AES-192-CCM test vector NIST #18 PSA (P=0, N=7, A=32, T=4) +depends_on:3:0:1 +9:exp:1:hex:"90929a4b0ac65b350ad1591611fe48297e03956f6083e451":hex:"a265480ca88d5f":hex:"a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe":hex:"":hex:"2f46022a":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #19 PSA (P=0, N=7, A=32, T=16) +depends_on:3:0:1 +9:exp:1:hex:"6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"":hex:"5280a2137fee3deefcfe9b63a1199fb3":char*:"":hex:"":int:1 + +AES-192-CCM test vector NIST #20 PSA (P=0, N=7, A=32, T=16) +depends_on:3:0:1 +9:exp:1:hex:"6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2":hex:"a265480ca88d5f":hex:"a2248a882ecbf850daf91933a389e78e81623d233dfd47bf8321361a38f138fe":hex:"":hex:"d40a7318c5f2d82f838c0beeefe0d598":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #21 PSA (P=0, N=13, A=32, T=4) +depends_on:3:0:1 +9:exp:1:hex:"6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"":hex:"5e0eaebd":char*:"":hex:"":int:1 + +AES-192-CCM test vector NIST #22 PSA (P=0, N=13, A=32, T=4) +depends_on:3:0:1 +9:exp:1:hex:"6a798d7c5e1a72b43e20ad5c7b08567b12ab744b61c070e2":hex:"8739b4bea1a099fe547499cbc6":hex:"f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7":hex:"":hex:"71b7fc33":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #23 PSA (P=0, N=13, A=32, T=16) +depends_on:3:0:1 +9:exp:1:hex:"f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"":hex:"d07ccf9fdc3d33aa94cda3d230da707c":char*:"":hex:"":int:1 + +AES-192-CCM test vector NIST #24 PSA (P=0, N=13, A=32, T=16) +depends_on:3:0:1 +9:exp:1:hex:"f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4":hex:"8739b4bea1a099fe547499cbc6":hex:"f6107696edb332b2ea059d8860fee26be42e5e12e1a4f79a8d0eafce1b2278a7":hex:"":hex:"65fe32b649dc328c9f531584897e85b3":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #25 PSA (P=24, N=7, A=32, T=4) +depends_on:3:0:1 +9:exp:1:hex:"f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"9f6ca4af9b159148c889a6584d1183ea26e2614874b05045":hex:"75dea8d1":char*:"":hex:"a265480ca88d5f536db0dc6abc40faf0d05be7a966977768":int:1 + +AES-192-CCM test vector NIST #26 PSA (P=24, N=7, A=32, T=4) +depends_on:3:0:1 +9:exp:1:hex:"f9fdca4ac64fe7f014de0f43039c757194d544ce5d15eed4":hex:"fdd2d6f503c915":hex:"5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e":hex:"84d8212e9cfc2121252baa3b065b1edcf50497b9594db1eb":hex:"d7965825":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #27 PSA (P=24, N=7, A=32, T=16) +depends_on:3:0:1 +9:exp:1:hex:"a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d":hex:"5a8aa485c316e9":hex:"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c":hex:"6aab64c4787599d8f213446beadb16e08dba60e97f56dbd1":hex:"4d1d980d6fe0fb44b421992662b97975":char*:"":hex:"a265480ca88d5f536db0dc6abc40faf0d05be7a966977768":int:1 + +AES-192-CCM test vector NIST #28 PSA (P=24, N=7, A=32, T=16) +depends_on:3:0:1 +9:exp:1:hex:"a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d":hex:"fdd2d6f503c915":hex:"5b92394f21ddc3ad49d9b0881b829a5935cb3a4d23e292a62fb66b5e7ab7020e":hex:"4980b2ee49b1aaf393175f5ab9bae95ec7904557dfa20660":hex:"3c51d36c826f01384100886198a7f6a3":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #29 PSA (P=24, N=13, A=32, T=4) +depends_on:3:0:1 +9:exp:1:hex:"a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"16e543d0e20615ff0df15acd9927ddfe40668a54bb854ccc":hex:"c25e9fce":char*:"":hex:"8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5":int:1 + +AES-192-CCM test vector NIST #30 PSA (P=24, N=13, A=32, T=4) +depends_on:3:0:1 +9:exp:1:hex:"a7aa635ea51b0bb20a092bd5573e728ccd4b3e8cdd2ab33d":hex:"0812757ad0cc4d17c4cfe7a642":hex:"ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10":hex:"df35b109caf690656ae278bbd8f8bba687a2ce11b105dae9":hex:"8ecedb3e":char*:"FAIL":hex:"":int:1 + +AES-192-CCM test vector NIST #31 PSA (P=24, N=13, A=32, T=16) +depends_on:3:0:1 +9:exp:1:hex:"26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886":hex:"5a8aa485c316e9403aff859fbb":hex:"a16a2e741f1cd9717285b6d882c1fc53655e9773761ad697a7ee6410184c7982":hex:"c5b0b2ef17498c5570eb335df4588032958ba3d69bf6f317":hex:"8464a6f7fa2b76744e8e8d95691cecb8":char*:"":hex:"8739b4bea1a099fe547499cbc6d1b13d849b8084c9b6acc5":int:1 + +AES-192-CCM test vector NIST #32 PSA (P=24, N=13, A=32, T=16) +depends_on:3:0:1 +9:exp:1:hex:"26511fb51fcfa75cb4b44da75a6e5a0eb8d9c8f3b906f886":hex:"0812757ad0cc4d17c4cfe7a642":hex:"ec6c44a7e94e51a3ca6dee229098391575ec7213c85267fbf7492fdbeee61b10":hex:"d1f0518929f4ae2f0543de2a7dfe4bb0110bb3057e524a1c":hex:"06bd6dc2e6bcc3436cffb969ae900388":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #1 PSA (P=0, N=7, A=0, T=4) +depends_on:3:0:1 +9:exp:2:hex:"eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6":hex:"a544218dadd3c1":hex:"":hex:"":hex:"469c90bb":char*:"":hex:"":int:1 + +AES-256-CCM test vector NIST #2 PSA (P=0, N=7, A=0, T=4) +depends_on:3:0:1 +9:exp:2:hex:"eda32f751456e33195f1f499cf2dc7c97ea127b6d488f211ccc5126fbb24afa6":hex:"d3d5424e20fbec":hex:"":hex:"":hex:"46a908ed":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #3 PSA (P=0, N=7, A=0, T=16) +depends_on:3:0:1 +9:exp:2:hex:"e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8":hex:"a544218dadd3c1":hex:"":hex:"":hex:"8207eb14d33855a52acceed17dbcbf6e":char*:"":hex:"":int:1 + +AES-256-CCM test vector NIST #4 PSA (P=0, N=7, A=0, T=16) +depends_on:3:0:1 +9:exp:2:hex:"e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8":hex:"d3d5424e20fbec":hex:"":hex:"":hex:"60f8e127cb4d30db6df0622158cd931d":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #5 PSA (P=0, N=13, A=0, T=4) +depends_on:3:0:1 +9:exp:2:hex:"e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8":hex:"a544218dadd3c10583db49cf39":hex:"":hex:"":hex:"8a19a133":char*:"":hex:"":int:1 + +AES-256-CCM test vector NIST #6 PSA (P=0, N=13, A=0, T=4) +depends_on:3:0:1 +9:exp:2:hex:"e1b8a927a95efe94656677b692662000278b441c79e879dd5c0ddc758bdc9ee8":hex:"3c0e2815d37d844f7ac240ba9d":hex:"":hex:"":hex:"2e317f1b":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #7 PSA (P=0, N=13, A=0, T=16) +depends_on:3:0:1 +9:exp:2:hex:"af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569":hex:"a544218dadd3c10583db49cf39":hex:"":hex:"":hex:"97e1a8dd4259ccd2e431e057b0397fcf":char*:"":hex:"":int:1 + +AES-256-CCM test vector NIST #8 PSA (P=0, N=13, A=0, T=16) +depends_on:3:0:1 +9:exp:2:hex:"af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569":hex:"3c0e2815d37d844f7ac240ba9d":hex:"":hex:"":hex:"5a9596c511ea6a8671adefc4f2157d8b":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #9 PSA (P=24, N=7, A=0, T=4) +depends_on:3:0:1 +9:exp:2:hex:"af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569":hex:"a544218dadd3c1":hex:"":hex:"64a1341679972dc5869fcf69b19d5c5ea50aa0b5e985f5b7":hex:"22aa8d59":char*:"":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c98":int:1 + +AES-256-CCM test vector NIST #10 PSA (P=24, N=7, A=0, T=4) +depends_on:3:0:1 +9:exp:2:hex:"af063639e66c284083c5cf72b70d8bc277f5978e80d9322d99f2fdc718cda569":hex:"bfcda8b5a2d0d2":hex:"":hex:"c5b7f802bffc498c1626e3774f1d9f94045dfd8e1a10a202":hex:"77d00a75":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #11 PSA (P=24, N=7, A=0, T=16) +depends_on:3:0:1 +9:exp:2:hex:"f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453":hex:"a544218dadd3c1":hex:"":hex:"bc51c3925a960e7732533e4ef3a4f69ee6826de952bcb0fd":hex:"374f3bb6db8377ebfc79674858c4f305":char*:"":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c98":int:1 + +AES-256-CCM test vector NIST #12 PSA (P=24, N=7, A=0, T=16) +depends_on:3:0:1 +9:exp:2:hex:"f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453":hex:"bfcda8b5a2d0d2":hex:"":hex:"afa1fa8e8a70e26b02161150556d604101fdf423f332c336":hex:"3275f2a4907d51b734fe7238cebbd48f":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #13 PSA (P=24, N=13, A=0, T=4) +depends_on:3:0:1 +9:exp:2:hex:"f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453":hex:"a544218dadd3c10583db49cf39":hex:"":hex:"63e00d30e4b08fd2a1cc8d70fab327b2368e77a93be4f412":hex:"3d14fb3f":char*:"":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e":int:1 + +AES-256-CCM test vector NIST #14 PSA (P=24, N=13, A=0, T=4) +depends_on:3:0:1 +9:exp:2:hex:"f7079dfa3b5c7b056347d7e437bcded683abd6e2c9e069d333284082cbb5d453":hex:"894dcaa61008eb8fb052c60d41":hex:"":hex:"bb5425b3869b76856ec58e39886fb6f6f2ac13fe44cb132d":hex:"8d0c0099":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #15 PSA (P=24, N=13, A=0, T=16) +depends_on:3:0:1 +9:exp:2:hex:"1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4":hex:"a544218dadd3c10583db49cf39":hex:"":hex:"f0050ad16392021a3f40207bed3521fb1e9f808f49830c42":hex:"3a578d179902f912f9ea1afbce1120b3":char*:"":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e":int:1 + +AES-256-CCM test vector NIST #16 PSA (P=24, N=13, A=0, T=16) +depends_on:3:0:1 +9:exp:2:hex:"1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4":hex:"894dcaa61008eb8fb052c60d41":hex:"":hex:"c408190d0fbf5034f83b24a8ed9657331a7ce141de4fae76":hex:"9084607b83bd06e6442eac8dacf583cc":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #17 PSA (P=0, N=7, A=32, T=4) +depends_on:3:0:1 +9:exp:2:hex:"1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4":hex:"a544218dadd3c1":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab":hex:"":hex:"92d00fbe":char*:"":hex:"":int:1 + +AES-256-CCM test vector NIST #18 PSA (P=0, N=7, A=32, T=4) +depends_on:3:0:1 +9:exp:2:hex:"1b0e8df63c57f05d9ac457575ea764524b8610ae5164e6215f426f5a7ae6ede4":hex:"78c46e3249ca28":hex:"232e957c65ffa11988e830d4617d500f1c4a35c1221f396c41ab214f074ca2dc":hex:"":hex:"9143e5c4":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #19 PSA (P=0, N=7, A=32, T=16) +depends_on:3:0:1 +9:exp:2:hex:"a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088":hex:"a544218dadd3c1":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab":hex:"":hex:"93af11a08379eb37a16aa2837f09d69d":char*:"":hex:"":int:1 + +AES-256-CCM test vector NIST #20 PSA (P=0, N=7, A=32, T=16) +depends_on:3:0:1 +9:exp:2:hex:"a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088":hex:"78c46e3249ca28":hex:"232e957c65ffa11988e830d4617d500f1c4a35c1221f396c41ab214f074ca2dc":hex:"":hex:"d19b0c14ec686a7961ca7c386d125a65":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #21 PSA (P=0, N=13, A=32, T=4) +depends_on:3:0:1 +9:exp:2:hex:"a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088":hex:"a544218dadd3c10583db49cf39":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907":hex:"":hex:"866d4227":char*:"":hex:"":int:1 + +AES-256-CCM test vector NIST #22 PSA (P=0, N=13, A=32, T=4) +depends_on:3:0:1 +9:exp:2:hex:"a4bc10b1a62c96d459fbaf3a5aa3face7313bb9e1253e696f96a7a8e36801088":hex:"e8de970f6ee8e80ede933581b5":hex:"89f8b068d34f56bc49d839d8e47b347e6dae737b903b278632447e6c0485d26a":hex:"":hex:"94cb1127":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #23 PSA (P=0, N=13, A=32, T=16) +depends_on:3:0:1 +9:exp:2:hex:"8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a":hex:"a544218dadd3c10583db49cf39":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907":hex:"":hex:"867b0d87cf6e0f718200a97b4f6d5ad5":char*:"":hex:"":int:1 + +AES-256-CCM test vector NIST #24 PSA (P=0, N=13, A=32, T=16) +depends_on:3:0:1 +9:exp:2:hex:"8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a":hex:"e8de970f6ee8e80ede933581b5":hex:"89f8b068d34f56bc49d839d8e47b347e6dae737b903b278632447e6c0485d26a":hex:"":hex:"677a040d46ee3f2b7838273bdad14f16":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #25 PSA (P=24, N=7, A=32, T=4) +depends_on:3:0:1 +9:exp:2:hex:"8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a":hex:"a544218dadd3c1":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab":hex:"c2fe12658139f5d0dd22cadf2e901695b579302a72fc5608":hex:"3ebc7720":char*:"":hex:"78c46e3249ca28e1ef0531d80fd37c124d9aecb7be6668e3":int:1 + +AES-256-CCM test vector NIST #26 PSA (P=24, N=7, A=32, T=4) +depends_on:3:0:1 +9:exp:2:hex:"8c5cf3457ff22228c39c051c4e05ed4093657eb303f859a9d4b0f8be0127d88a":hex:"6ba004fd176791":hex:"5a053b2a1bb87e85d56527bfcdcd3ecafb991bb10e4c862bb0751c700a29f54b":hex:"94748ba81229e53c38583a8564b23ebbafc6f6efdf4c2a81":hex:"c44db2c9":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #27 PSA (P=24, N=7, A=32, T=16) +depends_on:3:0:1 +9:exp:2:hex:"705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe":hex:"a544218dadd3c1":hex:"d3d5424e20fbec43ae495353ed830271515ab104f8860c988d15b6d36c038eab":hex:"3341168eb8c48468c414347fb08f71d2086f7c2d1bd581ce":hex:"1ac68bd42f5ec7fa7e068cc0ecd79c2a":char*:"":hex:"78c46e3249ca28e1ef0531d80fd37c124d9aecb7be6668e3":int:1 + +AES-256-CCM test vector NIST #28 PSA (P=24, N=7, A=32, T=16) +depends_on:3:0:1 +9:exp:2:hex:"705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe":hex:"6ba004fd176791":hex:"5a053b2a1bb87e85d56527bfcdcd3ecafb991bb10e4c862bb0751c700a29f54b":hex:"d543acda712b898cbb27b8f598b2e4438ce587a836e27851":hex:"47c3338a2400809e739b63ba8227d2f9":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #29 PSA (P=24, N=13, A=32, T=4) +depends_on:3:0:1 +9:exp:2:hex:"705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe":hex:"a544218dadd3c10583db49cf39":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907":hex:"c0ea400b599561e7905b99262b4565d5c3dc49fad84d7c69":hex:"ef891339":char*:"":hex:"e8de970f6ee8e80ede933581b5bcf4d837e2b72baa8b00c3":int:1 + +AES-256-CCM test vector NIST #30 PSA (P=24, N=13, A=32, T=4) +depends_on:3:0:1 +9:exp:2:hex:"705334e30f53dd2f92d190d2c1437c8772f940c55aa35e562214ed45bd458ffe":hex:"8fa501c5dd9ac9b868144c9fa5":hex:"5bb40e3bb72b4509324a7edc852f72535f1f6283156e63f6959ffaf39dcde800":hex:"60871e03ea0eb968536c99f926ea24ef43d41272ad9fb7f6":hex:"3d488623":char*:"FAIL":hex:"":int:1 + +AES-256-CCM test vector NIST #31 PSA (P=24, N=13, A=32, T=16) +depends_on:3:0:1 +9:exp:2:hex:"314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e":hex:"a544218dadd3c10583db49cf39":hex:"3c0e2815d37d844f7ac240ba9d6e3a0b2a86f706e885959e09a1005e024f6907":hex:"8d34cdca37ce77be68f65baf3382e31efa693e63f914a781":hex:"367f30f2eaad8c063ca50795acd90203":char*:"":hex:"e8de970f6ee8e80ede933581b5bcf4d837e2b72baa8b00c3":int:1 + +AES-256-CCM test vector NIST #32 PSA (P=24, N=13, A=32, T=16) +depends_on:3:0:1 +9:exp:2:hex:"314a202f836f9f257e22d8c11757832ae5131d357a72df88f3eff0ffcee0da4e":hex:"8fa501c5dd9ac9b868144c9fa5":hex:"5bb40e3bb72b4509324a7edc852f72535f1f6283156e63f6959ffaf39dcde800":hex:"516c0095cc3d85fd55e48da17c592e0c7014b9daafb82bdc":hex:"4b41096dfdbe9cc1ab610f8f3e038d16":char*:"FAIL":hex:"":int:1 + diff --git a/third_party/mbedtls/test/test_suite_cipher.chacha20.c b/third_party/mbedtls/test/test_suite_cipher.chacha20.c new file mode 100644 index 000000000..6669e7c67 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.chacha20.c @@ -0,0 +1,2028 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_cipher.chacha20.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_cipher.function + * Test suite data : suites/test_suite_cipher.chacha20.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_CIPHER_C) +#include "third_party/mbedtls/cipher.h" + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +#endif + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +#endif + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) +#define MBEDTLS_CIPHER_AUTH_CRYPT +#endif + +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +/* Helper for resetting key/direction + * + * The documentation doesn't explicitly say whether calling + * mbedtls_cipher_setkey() twice is allowed or not. This currently works with + * the default software implementation, but only by accident. It isn't + * guaranteed to work with new ciphers or with alternative implementations of + * individual ciphers, and it doesn't work with the PSA wrappers. So don't do + * it, and instead start with a fresh context. + */ +static int cipher_reset_key( mbedtls_cipher_context_t *ctx, int cipher_id, + int use_psa, size_t tag_len, const data_t *key, int direction ) +{ + mbedtls_cipher_free( ctx ); + mbedtls_cipher_init( ctx ); + +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; + (void) tag_len; +#else + if( use_psa == 1 ) + { + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( ctx, + mbedtls_cipher_info_from_type( cipher_id ), + tag_len ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + TEST_ASSERT( 0 == mbedtls_cipher_setup( ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + } + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( ctx, key->x, 8 * key->len, + direction ) ); + return( 1 ); + +exit: + return( 0 ); +} + +/* + * Check if a buffer is all-0 bytes: + * return 1 if it is, + * 0 if it isn't. + */ +int buffer_is_all_zero( const uint8_t *buf, size_t size ) +{ + for( size_t i = 0; i < size; i++ ) + if( buf[i] != 0 ) + return 0; + return 1; +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ + +void test_mbedtls_cipher_list( ) +{ + const int *cipher_type; + + for( cipher_type = mbedtls_cipher_list(); *cipher_type != 0; cipher_type++ ) + TEST_ASSERT( mbedtls_cipher_info_from_type( *cipher_type ) != NULL ); +exit: + ; +} + +void test_mbedtls_cipher_list_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_cipher_list( ); +} +void test_cipher_invalid_param_unconditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + mbedtls_cipher_context_t invalid_ctx; + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + mbedtls_cipher_init( &valid_ctx ); + mbedtls_cipher_setup( &valid_ctx, valid_info ); + mbedtls_cipher_init( &invalid_ctx ); + + /* mbedtls_cipher_setup() */ + TEST_ASSERT( mbedtls_cipher_setup( &valid_ctx, NULL ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_get_block_size() */ + TEST_ASSERT( mbedtls_cipher_get_block_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_ASSERT( mbedtls_cipher_get_cipher_mode( &invalid_ctx ) == + MBEDTLS_MODE_NONE ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_ASSERT( mbedtls_cipher_get_iv_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_type() */ + TEST_ASSERT( + mbedtls_cipher_get_type( &invalid_ctx ) == + MBEDTLS_CIPHER_NONE); + + /* mbedtls_cipher_get_name() */ + TEST_ASSERT( mbedtls_cipher_get_name( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_ASSERT( mbedtls_cipher_get_key_bitlen( &invalid_ctx ) == + MBEDTLS_KEY_LENGTH_NONE ); + + /* mbedtls_cipher_get_operation() */ + TEST_ASSERT( mbedtls_cipher_get_operation( &invalid_ctx ) == + MBEDTLS_OPERATION_NONE ); + + /* mbedtls_cipher_setkey() */ + TEST_ASSERT( + mbedtls_cipher_setkey( &invalid_ctx, + valid_buffer, + valid_bitlen, + valid_operation ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_set_iv() */ + TEST_ASSERT( + mbedtls_cipher_set_iv( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_reset() */ + TEST_ASSERT( mbedtls_cipher_reset( &invalid_ctx ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_ASSERT( + mbedtls_cipher_update_ad( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_ASSERT( mbedtls_cipher_set_padding_mode( &invalid_ctx, valid_mode ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif + + /* mbedtls_cipher_update() */ + TEST_ASSERT( + mbedtls_cipher_update( &invalid_ctx, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_finish() */ + TEST_ASSERT( + mbedtls_cipher_finish( &invalid_ctx, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_ASSERT( + mbedtls_cipher_write_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_check_tag() */ + TEST_ASSERT( + mbedtls_cipher_check_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +exit: + mbedtls_cipher_free( &invalid_ctx ); + mbedtls_cipher_free( &valid_ctx ); +} + +void test_cipher_invalid_param_unconditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_unconditional( ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_cipher_invalid_param_conditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_operation_t invalid_operation = 100; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + /* mbedtls_cipher_init() */ + TEST_VALID_PARAM( mbedtls_cipher_init( &valid_ctx ) ); + TEST_INVALID_PARAM( mbedtls_cipher_init( NULL ) ); + + /* mbedtls_cipher_setup() */ + TEST_VALID_PARAM( mbedtls_cipher_setup( &valid_ctx, valid_info ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setup( NULL, valid_info ) ); + + /* mbedtls_cipher_get_block_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_block_size( NULL ) ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_MODE_NONE, + mbedtls_cipher_get_cipher_mode( NULL ) ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_iv_size( NULL ) ); + + /* mbedtls_cipher_get_type() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_CIPHER_NONE, + mbedtls_cipher_get_type( NULL ) ); + + /* mbedtls_cipher_get_name() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_name( NULL ) ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_KEY_LENGTH_NONE, + mbedtls_cipher_get_key_bitlen( NULL ) ); + + /* mbedtls_cipher_get_operation() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_OPERATION_NONE, + mbedtls_cipher_get_operation( NULL ) ); + + /* mbedtls_cipher_setkey() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( NULL, + valid_buffer, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + NULL, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + valid_buffer, + valid_bitlen, + invalid_operation ) ); + + /* mbedtls_cipher_set_iv() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_reset() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_reset( NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_padding_mode( NULL, valid_mode ) ); +#endif + + /* mbedtls_cipher_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( NULL, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + NULL, valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, + NULL ) ); + + /* mbedtls_cipher_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( NULL, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + valid_buffer, + NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_check_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + + /* mbedtls_cipher_crypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) + /* mbedtls_cipher_auth_encrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); + + /* mbedtls_cipher_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); +#endif /* defined(MBEDTLS_CIPHER_MODE_AEAD) */ + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) + /* mbedtls_cipher_auth_encrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); + + /* mbedtls_cipher_auth_decrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); +#endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */ + + /* mbedtls_cipher_free() */ + TEST_VALID_PARAM( mbedtls_cipher_free( NULL ) ); +exit: + TEST_VALID_PARAM( mbedtls_cipher_free( &valid_ctx ) ); +} + +void test_cipher_invalid_param_conditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_conditional( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#if defined(MBEDTLS_AES_C) +void test_cipher_special_behaviours( ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + unsigned char input[32]; + unsigned char output[32]; +#if defined (MBEDTLS_CIPHER_MODE_CBC) + unsigned char iv[32]; +#endif + size_t olen = 0; + + mbedtls_cipher_init( &ctx ); + memset( input, 0, sizeof( input ) ); + memset( output, 0, sizeof( output ) ); +#if defined(MBEDTLS_CIPHER_MODE_CBC) + memset( iv, 0, sizeof( iv ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_CBC ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* IV too big */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, MBEDTLS_MAX_IV_LENGTH + 1 ) + == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + + /* IV too small */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, 0 ) + == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_cipher_free( &ctx ); + mbedtls_cipher_init( &ctx ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_ECB ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* Update ECB with partial block */ + TEST_ASSERT( mbedtls_cipher_update( &ctx, input, 1, output, &olen ) + == MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_cipher_special_behaviours_wrapper( void ** params ) +{ + (void)params; + + test_cipher_special_behaviours( ); +} +#endif /* MBEDTLS_AES_C */ +void test_enc_dec_buf( int cipher_id, char * cipher_string, int key_len, + int length_val, int pad_mode ) +{ + size_t length = length_val, outlen, total_len, i, block_size; + unsigned char key[64]; + unsigned char iv[16]; + unsigned char ad[13]; + unsigned char tag[16]; + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + + /* + * Prepare contexts + */ + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( key, 0x2a, sizeof( key ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( mbedtls_cipher_info_from_string( cipher_string ) == cipher_info ); + + /* Initialise enc and dec contexts */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + /* + * Do a few encode/decode cycles + */ + for( i = 0; i < 3; i++ ) + { + memset( iv , 0x00 + i, sizeof( iv ) ); + memset( ad, 0x10 + i, sizeof( ad ) ); + memset( inbuf, 0x20 + i, sizeof( inbuf ) ); + + memset( encbuf, 0, sizeof( encbuf ) ); + memset( decbuf, 0, sizeof( decbuf ) ); + memset( tag, 0, sizeof( tag ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, sizeof( iv ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, sizeof( iv ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, ad, sizeof( ad ) - i ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, ad, sizeof( ad ) - i ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, length, encbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_write_tag( &ctx_enc, tag, sizeof( tag ) ) ); +#endif + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len > length && + total_len <= length + block_size ) ); + + /* decode the previously encoded string */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, total_len, decbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_check_tag( &ctx_dec, tag, sizeof( tag ) ) ); +#endif + + /* check result */ + TEST_ASSERT( total_len == length ); + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + } + + /* + * Done + */ +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_wrapper( void ** params ) +{ + + test_enc_dec_buf( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_enc_fail( int cipher_id, int pad_mode, int key_len, int length_val, + int ret ) +{ + size_t length = length_val; + unsigned char key[32]; + unsigned char iv[16]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + + /* Initialise context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key, key_len, MBEDTLS_ENCRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, NULL, 0 ) ); +#endif + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, inbuf, length, encbuf, &outlen ) ); + TEST_ASSERT( ret == mbedtls_cipher_finish( &ctx, encbuf + outlen, &outlen ) ); + + /* done */ +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_enc_fail_wrapper( void ** params ) +{ + + test_enc_fail( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_dec_empty_buf( int cipher, + int expected_update_ret, + int expected_finish_ret ) +{ + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise context */ + cipher_info = mbedtls_cipher_info_from_type( cipher ); + TEST_ASSERT( NULL != cipher_info); + TEST_ASSERT( sizeof(key) * 8 >= cipher_info->key_bitlen ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, + key, cipher_info->key_bitlen, + MBEDTLS_DECRYPT ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); +#endif + + /* decode 0-byte string */ + TEST_ASSERT( expected_update_ret == + mbedtls_cipher_update( &ctx_dec, encbuf, 0, decbuf, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + if ( expected_finish_ret == 0 && + ( cipher_info->mode == MBEDTLS_MODE_CBC || + cipher_info->mode == MBEDTLS_MODE_ECB ) ) + { + /* Non-CBC and non-ECB ciphers are OK with decrypting empty buffers and + * return success, not MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED, when + * decrypting an empty buffer. + * On the other hand, CBC and ECB ciphers need a full block of input. + */ + expected_finish_ret = MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED; + } + + TEST_ASSERT( expected_finish_ret == mbedtls_cipher_finish( + &ctx_dec, decbuf + outlen, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + +exit: + mbedtls_cipher_free( &ctx_dec ); +} + +void test_dec_empty_buf_wrapper( void ** params ) +{ + + test_dec_empty_buf( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +void test_enc_dec_buf_multipart( int cipher_id, int key_len, int first_length_val, + int second_length_val, int pad_mode, + int first_encrypt_output_len, int second_encrypt_output_len, + int first_decrypt_output_len, int second_decrypt_output_len ) +{ + size_t first_length = first_length_val; + size_t second_length = second_length_val; + size_t length = first_length + second_length; + size_t block_size; + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + size_t totaloutlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise enc and dec contexts */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, NULL, 0 ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, first_length, encbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_encrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf + first_length, second_length, encbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_encrypt_output_len == outlen ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen > length && + totaloutlen <= length + block_size ) ); + + /* decode the previously encoded string */ + second_length = totaloutlen - first_length; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, first_length, decbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_decrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf + first_length, second_length, decbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_decrypt_output_len == outlen ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length ); + + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_multipart_wrapper( void ** params ) +{ + + test_enc_dec_buf_multipart( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ) ); +} +void test_decrypt_test_vec( int cipher_id, int pad_mode, data_t * key, + data_t * iv, data_t * cipher, + data_t * clear, data_t * ad, data_t * tag, + int finish_result, int tag_result ) +{ + unsigned char output[265]; + mbedtls_cipher_context_t ctx; + size_t outlen, total_len; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + +#if !defined(MBEDTLS_GCM_C) && !defined(MBEDTLS_CHACHAPOLY_C) + ((void) ad); + ((void) tag); +#endif + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, MBEDTLS_DECRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( pad_mode != -1 ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv->x, iv->len ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, ad->x, ad->len ) ); +#endif + + /* decode buffer and check tag->x */ + total_len = 0; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, cipher->x, cipher->len, output, &outlen ) ); + total_len += outlen; + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + total_len += outlen; +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( tag_result == mbedtls_cipher_check_tag( &ctx, tag->x, tag->len ) ); +#endif + + /* check plaintext only if everything went fine */ + if( 0 == finish_result && 0 == tag_result ) + { + TEST_ASSERT( total_len == clear->len ); + TEST_ASSERT( 0 == memcmp( output, clear->x, clear->len ) ); + } + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_decrypt_test_vec_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_decrypt_test_vec( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, &data10, &data12, *( (int *) params[14] ), *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +void test_auth_crypt_tv( int cipher_id, data_t * key, data_t * iv, + data_t * ad, data_t * cipher, data_t * tag, + char * result, data_t * clear, int use_psa ) +{ + /* + * Take an AEAD ciphertext + tag and perform a pair + * of AEAD decryption and AEAD encryption. Check that + * this results in the expected plaintext, and that + * decryption and encryption are inverse to one another. + * + * Do that twice: + * - once with legacy functions auth_decrypt/auth_encrypt + * - once with new functions auth_decrypt_ext/auth_encrypt_ext + * This allows testing both without duplicating test cases. + */ + + int ret; + int using_nist_kw, using_nist_kw_padding; + + mbedtls_cipher_context_t ctx; + size_t outlen; + + unsigned char *cipher_plus_tag = NULL; + size_t cipher_plus_tag_len; + unsigned char *decrypt_buf = NULL; + size_t decrypt_buf_len = 0; + unsigned char *encrypt_buf = NULL; + size_t encrypt_buf_len = 0; + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + unsigned char *tmp_tag = NULL; + unsigned char *tmp_cipher = NULL; + unsigned char *tag_buf = NULL; +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + + /* Null pointers are documented as valid for inputs of length 0. + * The test framework passes non-null pointers, so set them to NULL. + * key, cipher and tag can't be empty. */ + if( iv->len == 0 ) + iv->x = NULL; + if( ad->len == 0 ) + ad->x = NULL; + if( clear->len == 0 ) + clear->x = NULL; + + mbedtls_cipher_init( &ctx ); + + /* Initialize PSA Crypto */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_ASSERT( psa_crypto_init( ) ); +#else + (void) use_psa; +#endif + + /* + * Are we using NIST_KW? with padding? + */ + using_nist_kw_padding = cipher_id == MBEDTLS_CIPHER_AES_128_KWP || + cipher_id == MBEDTLS_CIPHER_AES_192_KWP || + cipher_id == MBEDTLS_CIPHER_AES_256_KWP; + using_nist_kw = cipher_id == MBEDTLS_CIPHER_AES_128_KW || + cipher_id == MBEDTLS_CIPHER_AES_192_KW || + cipher_id == MBEDTLS_CIPHER_AES_256_KW || + using_nist_kw_padding; + + /**************************************************************** + * * + * Part 1: non-deprecated API * + * * + ****************************************************************/ + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * prepare buffer for decryption + * (we need the tag appended to the ciphertext) + */ + cipher_plus_tag_len = cipher->len + tag->len; + ASSERT_ALLOC( cipher_plus_tag, cipher_plus_tag_len ); + memcpy( cipher_plus_tag, cipher->x, cipher->len ); + memcpy( cipher_plus_tag + cipher->len, tag->x, tag->len ); + + /* + * Compute length of output buffer according to the documentation + */ + if( using_nist_kw ) + decrypt_buf_len = cipher_plus_tag_len - 8; + else + decrypt_buf_len = cipher_plus_tag_len - tag->len; + + + /* + * Try decrypting to a buffer that's 1B too small + */ + if( decrypt_buf_len != 0 ) + { + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + } + + /* + * Authenticate and decrypt, and check result + */ + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len, &outlen, tag->len ); + + if( strcmp( result, "FAIL" ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, decrypt_buf_len ) ); + } + else + { + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + /* Free this, but keep cipher_plus_tag for deprecated function with PSA */ + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* + * Compute size of output buffer according to documentation + */ + if( using_nist_kw ) + { + encrypt_buf_len = clear->len + 8; + if( using_nist_kw_padding && encrypt_buf_len % 8 != 0 ) + encrypt_buf_len += 8 - encrypt_buf_len % 8; + } + else + { + encrypt_buf_len = clear->len + tag->len; + } + + /* + * Try encrypting with an output buffer that's 1B too small + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret != 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + + /* + * Encrypt and check the result + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len, &outlen, tag->len ); + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len + tag->len ); + TEST_ASSERT( memcmp( encrypt_buf, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( encrypt_buf + cipher->len, + tag->x, tag->len ) == 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + } + + /**************************************************************** + * * + * Part 2: deprecated API * + * * + ****************************************************************/ + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * Prepare pointers for decryption + */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + { + /* PSA requires that the tag immediately follows the ciphertext. + * Fortunately, we already have that from testing the new API. */ + tmp_cipher = cipher_plus_tag; + tmp_tag = tmp_cipher + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + tmp_cipher = cipher->x; + tmp_tag = tag->x; + } + + /* + * Authenticate and decrypt, and check result + */ + + ASSERT_ALLOC( decrypt_buf, cipher->len ); + outlen = 0; + ret = mbedtls_cipher_auth_decrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + tmp_cipher, cipher->len, decrypt_buf, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + /* NIST_KW with legacy API */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else if( strcmp( result, "FAIL" ) == 0 ) + { + /* unauthentic message */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, cipher->len ) ); + } + else + { + /* authentic message: is the plaintext correct? */ + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + mbedtls_free( cipher_plus_tag ); + cipher_plus_tag = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* prepare buffers for encryption */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa ) + { + ASSERT_ALLOC( cipher_plus_tag, cipher->len + tag->len ); + tmp_cipher = cipher_plus_tag; + tmp_tag = cipher_plus_tag + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + ASSERT_ALLOC( encrypt_buf, cipher->len ); + ASSERT_ALLOC( tag_buf, tag->len ); + tmp_cipher = encrypt_buf; + tmp_tag = tag_buf; + } + + /* + * Encrypt and check the result + */ + outlen = 0; + ret = mbedtls_cipher_auth_encrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + clear->x, clear->len, tmp_cipher, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len ); + if( cipher->len != 0 ) + TEST_ASSERT( memcmp( tmp_cipher, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( tmp_tag, tag->x, tag->len ) == 0 ); + } + } + +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +exit: + + mbedtls_cipher_free( &ctx ); + mbedtls_free( decrypt_buf ); + mbedtls_free( encrypt_buf ); + mbedtls_free( cipher_plus_tag ); +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + mbedtls_free( tag_buf ); +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_auth_crypt_tv_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_auth_crypt_tv( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, (char *) params[11], &data12, *( (int *) params[14] ) ); +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ +void test_test_vec_ecb( int cipher_id, int operation, data_t * key, + data_t * input, data_t * result, int finish_result + ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, input->x, + mbedtls_cipher_get_block_size( &ctx ), + output, &outlen ) ); + TEST_ASSERT( outlen == mbedtls_cipher_get_block_size( &ctx ) ); + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, + mbedtls_cipher_get_block_size( &ctx ) ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_test_vec_ecb_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_test_vec_ecb( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_test_vec_crypt( int cipher_id, int operation, data_t *key, + data_t *iv, data_t *input, data_t *result, + int finish_result, int use_psa ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; +#else + if( use_psa == 1 ) + { + PSA_ASSERT( psa_crypto_init( ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( &ctx, + mbedtls_cipher_info_from_type( cipher_id ), 0 ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + if( MBEDTLS_MODE_CBC == ctx.cipher_info->mode ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, MBEDTLS_PADDING_NONE ) ); + + TEST_ASSERT( finish_result == mbedtls_cipher_crypt( &ctx, iv->len ? iv->x : NULL, + iv->len, input->x, input->len, + output, &outlen ) ); + TEST_ASSERT( result->len == outlen ); + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, outlen ) ); + +exit: + mbedtls_cipher_free( &ctx ); +#if defined(MBEDTLS_USE_PSA_CRYPTO) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_test_vec_crypt_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_test_vec_crypt( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_set_padding( int cipher_id, int pad_mode, int ret ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + mbedtls_cipher_init( &ctx ); + + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + TEST_ASSERT( ret == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_set_padding_wrapper( void ** params ) +{ + + test_set_padding( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_check_padding( int pad_mode, data_t * input, int ret, int dlen_check + ) +{ + mbedtls_cipher_info_t cipher_info; + mbedtls_cipher_context_t ctx; + size_t dlen; + + /* build a fake context just for getting access to get_padding */ + mbedtls_cipher_init( &ctx ); + cipher_info.mode = MBEDTLS_MODE_CBC; + ctx.cipher_info = &cipher_info; + + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + + + TEST_ASSERT( ret == ctx.get_padding( input->x, input->len, &dlen ) ); + if( 0 == ret ) + TEST_ASSERT( dlen == (size_t) dlen_check ); +exit: + ; +} + +void test_check_padding_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_check_padding( *( (int *) params[0] ), &data1, *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#endif /* MBEDTLS_CIPHER_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_CHACHA20; + } + break; + case 1: + { + *out_value = -1; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { +#if defined(MBEDTLS_CHACHA20_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_CIPHER_C) + test_mbedtls_cipher_list_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_CIPHER_C) + test_cipher_invalid_param_unconditional_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_cipher_invalid_param_conditional_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_AES_C) + test_cipher_special_behaviours_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_fail_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_CIPHER_C) + test_dec_empty_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_multipart_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_CIPHER_C) + test_decrypt_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_AUTH_CRYPT) + test_auth_crypt_tv_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_CIPHER_C) + test_test_vec_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_test_vec_crypt_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_set_padding_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_check_padding_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_cipher.chacha20.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_cipher.chacha20.datax b/third_party/mbedtls/test/test_suite_cipher.chacha20.datax new file mode 100644 index 000000000..66ed3bb4e --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.chacha20.datax @@ -0,0 +1,112 @@ +Chacha20 RFC 7539 Test Vector #1 +depends_on:0 +8:exp:0:exp:1:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"000000000000000000000000":hex:"76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc8b770dc7da41597c5157488d7724e03fb8d84a376a43b8f41518a11cc387b669b2ee6586":hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":hex:"":hex:"":int:0:int:0 + +ChaCha20 Encrypt and decrypt 0 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20":int:256:int:0:exp:1 + +ChaCha20 Encrypt and decrypt 1 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20":int:256:int:1:exp:1 + +ChaCha20 Encrypt and decrypt 2 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20":int:256:int:2:exp:1 + +ChaCha20 Encrypt and decrypt 7 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20":int:256:int:7:exp:1 + +ChaCha20 Encrypt and decrypt 8 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20":int:256:int:8:exp:1 + +ChaCha20 Encrypt and decrypt 9 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20":int:256:int:9:exp:1 + +ChaCha20 Encrypt and decrypt 15 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20":int:256:int:15:exp:1 + +ChaCha20 Encrypt and decrypt 16 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20":int:256:int:16:exp:1 + +ChaCha20 Encrypt and decrypt 17 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20":int:256:int:17:exp:1 + +ChaCha20 Encrypt and decrypt 31 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20":int:256:int:31:exp:1 + +ChaCha20 Encrypt and decrypt 32 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20":int:256:int:32:exp:1 + +ChaCha20 Encrypt and decrypt 33 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20":int:256:int:33:exp:1 + +ChaCha20 Encrypt and decrypt 47 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20":int:256:int:47:exp:1 + +ChaCha20 Encrypt and decrypt 48 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20":int:256:int:48:exp:1 + +ChaCha20 Encrypt and decrypt 49 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20":int:256:int:49:exp:1 + +ChaCha20 Encrypt and decrypt 0 bytes in multiple parts 1 +depends_on:0 +7:exp:0:int:256:int:0:int:0:exp:1:int:0:int:0:int:0:int:0 + +ChaCha20 Encrypt and decrypt 1 bytes in multiple parts 1 +depends_on:0 +7:exp:0:int:256:int:1:int:0:exp:1:int:1:int:0:int:1:int:0 + +ChaCha20 Encrypt and decrypt 1 bytes in multiple parts 2 +depends_on:0 +7:exp:0:int:256:int:0:int:1:exp:1:int:0:int:1:int:0:int:1 + +ChaCha20 Encrypt and decrypt 16 bytes in multiple parts 1 +depends_on:0 +7:exp:0:int:256:int:16:int:0:exp:1:int:16:int:0:int:16:int:0 + +ChaCha20 Encrypt and decrypt 16 bytes in multiple parts 2 +depends_on:0 +7:exp:0:int:256:int:0:int:16:exp:1:int:0:int:16:int:0:int:16 + +ChaCha20 Encrypt and decrypt 16 bytes in multiple parts 3 +depends_on:0 +7:exp:0:int:256:int:1:int:15:exp:1:int:1:int:15:int:1:int:15 + +ChaCha20 Encrypt and decrypt 16 bytes in multiple parts 4 +depends_on:0 +7:exp:0:int:256:int:15:int:1:exp:1:int:15:int:1:int:15:int:1 + +ChaCha20 Encrypt and decrypt 22 bytes in multiple parts 1 +depends_on:0 +7:exp:0:int:256:int:15:int:7:exp:1:int:15:int:7:int:15:int:7 + +ChaCha20 Encrypt and decrypt 22 bytes in multiple parts 2 +depends_on:0 +7:exp:0:int:256:int:7:int:15:exp:1:int:7:int:15:int:7:int:15 + +ChaCha20 Encrypt and decrypt 22 bytes in multiple parts 3 +depends_on:0 +7:exp:0:int:256:int:16:int:6:exp:1:int:16:int:6:int:16:int:6 + +ChaCha20 Encrypt and decrypt 22 bytes in multiple parts 4 +depends_on:0 +7:exp:0:int:256:int:6:int:16:exp:1:int:6:int:16:int:6:int:16 + +ChaCha20 Encrypt and decrypt 32 bytes in multiple parts +depends_on:0 +7:exp:0:int:256:int:16:int:16:exp:1:int:16:int:16:int:16:int:16 + diff --git a/third_party/mbedtls/test/test_suite_cipher.chachapoly.c b/third_party/mbedtls/test/test_suite_cipher.chachapoly.c new file mode 100644 index 000000000..2c0758ae9 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.chachapoly.c @@ -0,0 +1,2028 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_cipher.chachapoly.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_cipher.function + * Test suite data : suites/test_suite_cipher.chachapoly.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_CIPHER_C) +#include "third_party/mbedtls/cipher.h" + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +#endif + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +#endif + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) +#define MBEDTLS_CIPHER_AUTH_CRYPT +#endif + +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +/* Helper for resetting key/direction + * + * The documentation doesn't explicitly say whether calling + * mbedtls_cipher_setkey() twice is allowed or not. This currently works with + * the default software implementation, but only by accident. It isn't + * guaranteed to work with new ciphers or with alternative implementations of + * individual ciphers, and it doesn't work with the PSA wrappers. So don't do + * it, and instead start with a fresh context. + */ +static int cipher_reset_key( mbedtls_cipher_context_t *ctx, int cipher_id, + int use_psa, size_t tag_len, const data_t *key, int direction ) +{ + mbedtls_cipher_free( ctx ); + mbedtls_cipher_init( ctx ); + +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; + (void) tag_len; +#else + if( use_psa == 1 ) + { + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( ctx, + mbedtls_cipher_info_from_type( cipher_id ), + tag_len ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + TEST_ASSERT( 0 == mbedtls_cipher_setup( ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + } + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( ctx, key->x, 8 * key->len, + direction ) ); + return( 1 ); + +exit: + return( 0 ); +} + +/* + * Check if a buffer is all-0 bytes: + * return 1 if it is, + * 0 if it isn't. + */ +int buffer_is_all_zero( const uint8_t *buf, size_t size ) +{ + for( size_t i = 0; i < size; i++ ) + if( buf[i] != 0 ) + return 0; + return 1; +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ + +void test_mbedtls_cipher_list( ) +{ + const int *cipher_type; + + for( cipher_type = mbedtls_cipher_list(); *cipher_type != 0; cipher_type++ ) + TEST_ASSERT( mbedtls_cipher_info_from_type( *cipher_type ) != NULL ); +exit: + ; +} + +void test_mbedtls_cipher_list_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_cipher_list( ); +} +void test_cipher_invalid_param_unconditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + mbedtls_cipher_context_t invalid_ctx; + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + mbedtls_cipher_init( &valid_ctx ); + mbedtls_cipher_setup( &valid_ctx, valid_info ); + mbedtls_cipher_init( &invalid_ctx ); + + /* mbedtls_cipher_setup() */ + TEST_ASSERT( mbedtls_cipher_setup( &valid_ctx, NULL ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_get_block_size() */ + TEST_ASSERT( mbedtls_cipher_get_block_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_ASSERT( mbedtls_cipher_get_cipher_mode( &invalid_ctx ) == + MBEDTLS_MODE_NONE ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_ASSERT( mbedtls_cipher_get_iv_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_type() */ + TEST_ASSERT( + mbedtls_cipher_get_type( &invalid_ctx ) == + MBEDTLS_CIPHER_NONE); + + /* mbedtls_cipher_get_name() */ + TEST_ASSERT( mbedtls_cipher_get_name( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_ASSERT( mbedtls_cipher_get_key_bitlen( &invalid_ctx ) == + MBEDTLS_KEY_LENGTH_NONE ); + + /* mbedtls_cipher_get_operation() */ + TEST_ASSERT( mbedtls_cipher_get_operation( &invalid_ctx ) == + MBEDTLS_OPERATION_NONE ); + + /* mbedtls_cipher_setkey() */ + TEST_ASSERT( + mbedtls_cipher_setkey( &invalid_ctx, + valid_buffer, + valid_bitlen, + valid_operation ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_set_iv() */ + TEST_ASSERT( + mbedtls_cipher_set_iv( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_reset() */ + TEST_ASSERT( mbedtls_cipher_reset( &invalid_ctx ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_ASSERT( + mbedtls_cipher_update_ad( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_ASSERT( mbedtls_cipher_set_padding_mode( &invalid_ctx, valid_mode ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif + + /* mbedtls_cipher_update() */ + TEST_ASSERT( + mbedtls_cipher_update( &invalid_ctx, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_finish() */ + TEST_ASSERT( + mbedtls_cipher_finish( &invalid_ctx, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_ASSERT( + mbedtls_cipher_write_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_check_tag() */ + TEST_ASSERT( + mbedtls_cipher_check_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +exit: + mbedtls_cipher_free( &invalid_ctx ); + mbedtls_cipher_free( &valid_ctx ); +} + +void test_cipher_invalid_param_unconditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_unconditional( ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_cipher_invalid_param_conditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_operation_t invalid_operation = 100; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + /* mbedtls_cipher_init() */ + TEST_VALID_PARAM( mbedtls_cipher_init( &valid_ctx ) ); + TEST_INVALID_PARAM( mbedtls_cipher_init( NULL ) ); + + /* mbedtls_cipher_setup() */ + TEST_VALID_PARAM( mbedtls_cipher_setup( &valid_ctx, valid_info ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setup( NULL, valid_info ) ); + + /* mbedtls_cipher_get_block_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_block_size( NULL ) ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_MODE_NONE, + mbedtls_cipher_get_cipher_mode( NULL ) ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_iv_size( NULL ) ); + + /* mbedtls_cipher_get_type() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_CIPHER_NONE, + mbedtls_cipher_get_type( NULL ) ); + + /* mbedtls_cipher_get_name() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_name( NULL ) ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_KEY_LENGTH_NONE, + mbedtls_cipher_get_key_bitlen( NULL ) ); + + /* mbedtls_cipher_get_operation() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_OPERATION_NONE, + mbedtls_cipher_get_operation( NULL ) ); + + /* mbedtls_cipher_setkey() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( NULL, + valid_buffer, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + NULL, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + valid_buffer, + valid_bitlen, + invalid_operation ) ); + + /* mbedtls_cipher_set_iv() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_reset() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_reset( NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_padding_mode( NULL, valid_mode ) ); +#endif + + /* mbedtls_cipher_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( NULL, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + NULL, valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, + NULL ) ); + + /* mbedtls_cipher_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( NULL, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + valid_buffer, + NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_check_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + + /* mbedtls_cipher_crypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) + /* mbedtls_cipher_auth_encrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); + + /* mbedtls_cipher_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); +#endif /* defined(MBEDTLS_CIPHER_MODE_AEAD) */ + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) + /* mbedtls_cipher_auth_encrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); + + /* mbedtls_cipher_auth_decrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); +#endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */ + + /* mbedtls_cipher_free() */ + TEST_VALID_PARAM( mbedtls_cipher_free( NULL ) ); +exit: + TEST_VALID_PARAM( mbedtls_cipher_free( &valid_ctx ) ); +} + +void test_cipher_invalid_param_conditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_conditional( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#if defined(MBEDTLS_AES_C) +void test_cipher_special_behaviours( ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + unsigned char input[32]; + unsigned char output[32]; +#if defined (MBEDTLS_CIPHER_MODE_CBC) + unsigned char iv[32]; +#endif + size_t olen = 0; + + mbedtls_cipher_init( &ctx ); + memset( input, 0, sizeof( input ) ); + memset( output, 0, sizeof( output ) ); +#if defined(MBEDTLS_CIPHER_MODE_CBC) + memset( iv, 0, sizeof( iv ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_CBC ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* IV too big */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, MBEDTLS_MAX_IV_LENGTH + 1 ) + == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + + /* IV too small */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, 0 ) + == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_cipher_free( &ctx ); + mbedtls_cipher_init( &ctx ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_ECB ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* Update ECB with partial block */ + TEST_ASSERT( mbedtls_cipher_update( &ctx, input, 1, output, &olen ) + == MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_cipher_special_behaviours_wrapper( void ** params ) +{ + (void)params; + + test_cipher_special_behaviours( ); +} +#endif /* MBEDTLS_AES_C */ +void test_enc_dec_buf( int cipher_id, char * cipher_string, int key_len, + int length_val, int pad_mode ) +{ + size_t length = length_val, outlen, total_len, i, block_size; + unsigned char key[64]; + unsigned char iv[16]; + unsigned char ad[13]; + unsigned char tag[16]; + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + + /* + * Prepare contexts + */ + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( key, 0x2a, sizeof( key ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( mbedtls_cipher_info_from_string( cipher_string ) == cipher_info ); + + /* Initialise enc and dec contexts */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + /* + * Do a few encode/decode cycles + */ + for( i = 0; i < 3; i++ ) + { + memset( iv , 0x00 + i, sizeof( iv ) ); + memset( ad, 0x10 + i, sizeof( ad ) ); + memset( inbuf, 0x20 + i, sizeof( inbuf ) ); + + memset( encbuf, 0, sizeof( encbuf ) ); + memset( decbuf, 0, sizeof( decbuf ) ); + memset( tag, 0, sizeof( tag ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, sizeof( iv ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, sizeof( iv ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, ad, sizeof( ad ) - i ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, ad, sizeof( ad ) - i ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, length, encbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_write_tag( &ctx_enc, tag, sizeof( tag ) ) ); +#endif + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len > length && + total_len <= length + block_size ) ); + + /* decode the previously encoded string */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, total_len, decbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_check_tag( &ctx_dec, tag, sizeof( tag ) ) ); +#endif + + /* check result */ + TEST_ASSERT( total_len == length ); + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + } + + /* + * Done + */ +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_wrapper( void ** params ) +{ + + test_enc_dec_buf( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_enc_fail( int cipher_id, int pad_mode, int key_len, int length_val, + int ret ) +{ + size_t length = length_val; + unsigned char key[32]; + unsigned char iv[16]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + + /* Initialise context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key, key_len, MBEDTLS_ENCRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, NULL, 0 ) ); +#endif + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, inbuf, length, encbuf, &outlen ) ); + TEST_ASSERT( ret == mbedtls_cipher_finish( &ctx, encbuf + outlen, &outlen ) ); + + /* done */ +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_enc_fail_wrapper( void ** params ) +{ + + test_enc_fail( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_dec_empty_buf( int cipher, + int expected_update_ret, + int expected_finish_ret ) +{ + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise context */ + cipher_info = mbedtls_cipher_info_from_type( cipher ); + TEST_ASSERT( NULL != cipher_info); + TEST_ASSERT( sizeof(key) * 8 >= cipher_info->key_bitlen ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, + key, cipher_info->key_bitlen, + MBEDTLS_DECRYPT ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); +#endif + + /* decode 0-byte string */ + TEST_ASSERT( expected_update_ret == + mbedtls_cipher_update( &ctx_dec, encbuf, 0, decbuf, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + if ( expected_finish_ret == 0 && + ( cipher_info->mode == MBEDTLS_MODE_CBC || + cipher_info->mode == MBEDTLS_MODE_ECB ) ) + { + /* Non-CBC and non-ECB ciphers are OK with decrypting empty buffers and + * return success, not MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED, when + * decrypting an empty buffer. + * On the other hand, CBC and ECB ciphers need a full block of input. + */ + expected_finish_ret = MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED; + } + + TEST_ASSERT( expected_finish_ret == mbedtls_cipher_finish( + &ctx_dec, decbuf + outlen, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + +exit: + mbedtls_cipher_free( &ctx_dec ); +} + +void test_dec_empty_buf_wrapper( void ** params ) +{ + + test_dec_empty_buf( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +void test_enc_dec_buf_multipart( int cipher_id, int key_len, int first_length_val, + int second_length_val, int pad_mode, + int first_encrypt_output_len, int second_encrypt_output_len, + int first_decrypt_output_len, int second_decrypt_output_len ) +{ + size_t first_length = first_length_val; + size_t second_length = second_length_val; + size_t length = first_length + second_length; + size_t block_size; + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + size_t totaloutlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise enc and dec contexts */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, NULL, 0 ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, first_length, encbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_encrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf + first_length, second_length, encbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_encrypt_output_len == outlen ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen > length && + totaloutlen <= length + block_size ) ); + + /* decode the previously encoded string */ + second_length = totaloutlen - first_length; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, first_length, decbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_decrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf + first_length, second_length, decbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_decrypt_output_len == outlen ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length ); + + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_multipart_wrapper( void ** params ) +{ + + test_enc_dec_buf_multipart( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ) ); +} +void test_decrypt_test_vec( int cipher_id, int pad_mode, data_t * key, + data_t * iv, data_t * cipher, + data_t * clear, data_t * ad, data_t * tag, + int finish_result, int tag_result ) +{ + unsigned char output[265]; + mbedtls_cipher_context_t ctx; + size_t outlen, total_len; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + +#if !defined(MBEDTLS_GCM_C) && !defined(MBEDTLS_CHACHAPOLY_C) + ((void) ad); + ((void) tag); +#endif + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, MBEDTLS_DECRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( pad_mode != -1 ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv->x, iv->len ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, ad->x, ad->len ) ); +#endif + + /* decode buffer and check tag->x */ + total_len = 0; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, cipher->x, cipher->len, output, &outlen ) ); + total_len += outlen; + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + total_len += outlen; +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( tag_result == mbedtls_cipher_check_tag( &ctx, tag->x, tag->len ) ); +#endif + + /* check plaintext only if everything went fine */ + if( 0 == finish_result && 0 == tag_result ) + { + TEST_ASSERT( total_len == clear->len ); + TEST_ASSERT( 0 == memcmp( output, clear->x, clear->len ) ); + } + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_decrypt_test_vec_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_decrypt_test_vec( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, &data10, &data12, *( (int *) params[14] ), *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +void test_auth_crypt_tv( int cipher_id, data_t * key, data_t * iv, + data_t * ad, data_t * cipher, data_t * tag, + char * result, data_t * clear, int use_psa ) +{ + /* + * Take an AEAD ciphertext + tag and perform a pair + * of AEAD decryption and AEAD encryption. Check that + * this results in the expected plaintext, and that + * decryption and encryption are inverse to one another. + * + * Do that twice: + * - once with legacy functions auth_decrypt/auth_encrypt + * - once with new functions auth_decrypt_ext/auth_encrypt_ext + * This allows testing both without duplicating test cases. + */ + + int ret; + int using_nist_kw, using_nist_kw_padding; + + mbedtls_cipher_context_t ctx; + size_t outlen; + + unsigned char *cipher_plus_tag = NULL; + size_t cipher_plus_tag_len; + unsigned char *decrypt_buf = NULL; + size_t decrypt_buf_len = 0; + unsigned char *encrypt_buf = NULL; + size_t encrypt_buf_len = 0; + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + unsigned char *tmp_tag = NULL; + unsigned char *tmp_cipher = NULL; + unsigned char *tag_buf = NULL; +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + + /* Null pointers are documented as valid for inputs of length 0. + * The test framework passes non-null pointers, so set them to NULL. + * key, cipher and tag can't be empty. */ + if( iv->len == 0 ) + iv->x = NULL; + if( ad->len == 0 ) + ad->x = NULL; + if( clear->len == 0 ) + clear->x = NULL; + + mbedtls_cipher_init( &ctx ); + + /* Initialize PSA Crypto */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_ASSERT( psa_crypto_init( ) ); +#else + (void) use_psa; +#endif + + /* + * Are we using NIST_KW? with padding? + */ + using_nist_kw_padding = cipher_id == MBEDTLS_CIPHER_AES_128_KWP || + cipher_id == MBEDTLS_CIPHER_AES_192_KWP || + cipher_id == MBEDTLS_CIPHER_AES_256_KWP; + using_nist_kw = cipher_id == MBEDTLS_CIPHER_AES_128_KW || + cipher_id == MBEDTLS_CIPHER_AES_192_KW || + cipher_id == MBEDTLS_CIPHER_AES_256_KW || + using_nist_kw_padding; + + /**************************************************************** + * * + * Part 1: non-deprecated API * + * * + ****************************************************************/ + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * prepare buffer for decryption + * (we need the tag appended to the ciphertext) + */ + cipher_plus_tag_len = cipher->len + tag->len; + ASSERT_ALLOC( cipher_plus_tag, cipher_plus_tag_len ); + memcpy( cipher_plus_tag, cipher->x, cipher->len ); + memcpy( cipher_plus_tag + cipher->len, tag->x, tag->len ); + + /* + * Compute length of output buffer according to the documentation + */ + if( using_nist_kw ) + decrypt_buf_len = cipher_plus_tag_len - 8; + else + decrypt_buf_len = cipher_plus_tag_len - tag->len; + + + /* + * Try decrypting to a buffer that's 1B too small + */ + if( decrypt_buf_len != 0 ) + { + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + } + + /* + * Authenticate and decrypt, and check result + */ + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len, &outlen, tag->len ); + + if( strcmp( result, "FAIL" ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, decrypt_buf_len ) ); + } + else + { + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + /* Free this, but keep cipher_plus_tag for deprecated function with PSA */ + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* + * Compute size of output buffer according to documentation + */ + if( using_nist_kw ) + { + encrypt_buf_len = clear->len + 8; + if( using_nist_kw_padding && encrypt_buf_len % 8 != 0 ) + encrypt_buf_len += 8 - encrypt_buf_len % 8; + } + else + { + encrypt_buf_len = clear->len + tag->len; + } + + /* + * Try encrypting with an output buffer that's 1B too small + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret != 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + + /* + * Encrypt and check the result + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len, &outlen, tag->len ); + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len + tag->len ); + TEST_ASSERT( memcmp( encrypt_buf, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( encrypt_buf + cipher->len, + tag->x, tag->len ) == 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + } + + /**************************************************************** + * * + * Part 2: deprecated API * + * * + ****************************************************************/ + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * Prepare pointers for decryption + */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + { + /* PSA requires that the tag immediately follows the ciphertext. + * Fortunately, we already have that from testing the new API. */ + tmp_cipher = cipher_plus_tag; + tmp_tag = tmp_cipher + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + tmp_cipher = cipher->x; + tmp_tag = tag->x; + } + + /* + * Authenticate and decrypt, and check result + */ + + ASSERT_ALLOC( decrypt_buf, cipher->len ); + outlen = 0; + ret = mbedtls_cipher_auth_decrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + tmp_cipher, cipher->len, decrypt_buf, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + /* NIST_KW with legacy API */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else if( strcmp( result, "FAIL" ) == 0 ) + { + /* unauthentic message */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, cipher->len ) ); + } + else + { + /* authentic message: is the plaintext correct? */ + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + mbedtls_free( cipher_plus_tag ); + cipher_plus_tag = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* prepare buffers for encryption */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa ) + { + ASSERT_ALLOC( cipher_plus_tag, cipher->len + tag->len ); + tmp_cipher = cipher_plus_tag; + tmp_tag = cipher_plus_tag + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + ASSERT_ALLOC( encrypt_buf, cipher->len ); + ASSERT_ALLOC( tag_buf, tag->len ); + tmp_cipher = encrypt_buf; + tmp_tag = tag_buf; + } + + /* + * Encrypt and check the result + */ + outlen = 0; + ret = mbedtls_cipher_auth_encrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + clear->x, clear->len, tmp_cipher, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len ); + if( cipher->len != 0 ) + TEST_ASSERT( memcmp( tmp_cipher, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( tmp_tag, tag->x, tag->len ) == 0 ); + } + } + +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +exit: + + mbedtls_cipher_free( &ctx ); + mbedtls_free( decrypt_buf ); + mbedtls_free( encrypt_buf ); + mbedtls_free( cipher_plus_tag ); +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + mbedtls_free( tag_buf ); +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_auth_crypt_tv_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_auth_crypt_tv( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, (char *) params[11], &data12, *( (int *) params[14] ) ); +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ +void test_test_vec_ecb( int cipher_id, int operation, data_t * key, + data_t * input, data_t * result, int finish_result + ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, input->x, + mbedtls_cipher_get_block_size( &ctx ), + output, &outlen ) ); + TEST_ASSERT( outlen == mbedtls_cipher_get_block_size( &ctx ) ); + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, + mbedtls_cipher_get_block_size( &ctx ) ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_test_vec_ecb_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_test_vec_ecb( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_test_vec_crypt( int cipher_id, int operation, data_t *key, + data_t *iv, data_t *input, data_t *result, + int finish_result, int use_psa ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; +#else + if( use_psa == 1 ) + { + PSA_ASSERT( psa_crypto_init( ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( &ctx, + mbedtls_cipher_info_from_type( cipher_id ), 0 ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + if( MBEDTLS_MODE_CBC == ctx.cipher_info->mode ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, MBEDTLS_PADDING_NONE ) ); + + TEST_ASSERT( finish_result == mbedtls_cipher_crypt( &ctx, iv->len ? iv->x : NULL, + iv->len, input->x, input->len, + output, &outlen ) ); + TEST_ASSERT( result->len == outlen ); + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, outlen ) ); + +exit: + mbedtls_cipher_free( &ctx ); +#if defined(MBEDTLS_USE_PSA_CRYPTO) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_test_vec_crypt_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_test_vec_crypt( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_set_padding( int cipher_id, int pad_mode, int ret ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + mbedtls_cipher_init( &ctx ); + + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + TEST_ASSERT( ret == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_set_padding_wrapper( void ** params ) +{ + + test_set_padding( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_check_padding( int pad_mode, data_t * input, int ret, int dlen_check + ) +{ + mbedtls_cipher_info_t cipher_info; + mbedtls_cipher_context_t ctx; + size_t dlen; + + /* build a fake context just for getting access to get_padding */ + mbedtls_cipher_init( &ctx ); + cipher_info.mode = MBEDTLS_MODE_CBC; + ctx.cipher_info = &cipher_info; + + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + + + TEST_ASSERT( ret == ctx.get_padding( input->x, input->len, &dlen ) ); + if( 0 == ret ) + TEST_ASSERT( dlen == (size_t) dlen_check ); +exit: + ; +} + +void test_check_padding_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_check_padding( *( (int *) params[0] ), &data1, *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#endif /* MBEDTLS_CIPHER_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_CHACHA20_POLY1305; + } + break; + case 1: + { + *out_value = -1; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { +#if defined(MBEDTLS_CHACHAPOLY_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_CIPHER_C) + test_mbedtls_cipher_list_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_CIPHER_C) + test_cipher_invalid_param_unconditional_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_cipher_invalid_param_conditional_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_AES_C) + test_cipher_special_behaviours_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_fail_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_CIPHER_C) + test_dec_empty_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_multipart_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_CIPHER_C) + test_decrypt_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_AUTH_CRYPT) + test_auth_crypt_tv_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_CIPHER_C) + test_test_vec_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_test_vec_crypt_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_set_padding_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_check_padding_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_cipher.chachapoly.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_cipher.chachapoly.datax b/third_party/mbedtls/test/test_suite_cipher.chachapoly.datax new file mode 100644 index 000000000..f77f7157d --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.chachapoly.datax @@ -0,0 +1,124 @@ +Decrypt empty buffer +depends_on:0 +6:exp:0:int:0:int:0 + +ChaCha20+Poly1305 Encrypt and decrypt 0 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20-POLY1305":int:256:int:0:exp:1 + +ChaCha20+Poly1305 Encrypt and decrypt 1 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20-POLY1305":int:256:int:1:exp:1 + +ChaCha20+Poly1305 Encrypt and decrypt 2 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20-POLY1305":int:256:int:2:exp:1 + +ChaCha20+Poly1305 Encrypt and decrypt 7 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20-POLY1305":int:256:int:7:exp:1 + +ChaCha20+Poly1305 Encrypt and decrypt 8 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20-POLY1305":int:256:int:8:exp:1 + +ChaCha20+Poly1305 Encrypt and decrypt 9 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20-POLY1305":int:256:int:9:exp:1 + +ChaCha20+Poly1305 Encrypt and decrypt 15 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20-POLY1305":int:256:int:15:exp:1 + +ChaCha20+Poly1305 Encrypt and decrypt 16 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20-POLY1305":int:256:int:16:exp:1 + +ChaCha20+Poly1305 Encrypt and decrypt 17 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20-POLY1305":int:256:int:17:exp:1 + +ChaCha20+Poly1305 Encrypt and decrypt 31 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20-POLY1305":int:256:int:31:exp:1 + +ChaCha20+Poly1305 Encrypt and decrypt 32 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20-POLY1305":int:256:int:32:exp:1 + +ChaCha20+Poly1305 Encrypt and decrypt 33 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20-POLY1305":int:256:int:33:exp:1 + +ChaCha20+Poly1305 Encrypt and decrypt 47 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20-POLY1305":int:256:int:47:exp:1 + +ChaCha20+Poly1305 Encrypt and decrypt 48 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20-POLY1305":int:256:int:48:exp:1 + +ChaCha20+Poly1305 Encrypt and decrypt 49 bytes +depends_on:0 +4:exp:0:char*:"CHACHA20-POLY1305":int:256:int:49:exp:1 + +ChaCha20+Poly1305 Encrypt and decrypt 0 bytes in multiple parts 1 +depends_on:0 +7:exp:0:int:256:int:0:int:0:exp:1:int:0:int:0:int:0:int:0 + +ChaCha20+Poly1305 Encrypt and decrypt 1 bytes in multiple parts 1 +depends_on:0 +7:exp:0:int:256:int:1:int:0:exp:1:int:1:int:0:int:1:int:0 + +ChaCha20+Poly1305 Encrypt and decrypt 1 bytes in multiple parts 2 +depends_on:0 +7:exp:0:int:256:int:0:int:1:exp:1:int:0:int:1:int:0:int:1 + +ChaCha20+Poly1305 Encrypt and decrypt 16 bytes in multiple parts 1 +depends_on:0 +7:exp:0:int:256:int:16:int:0:exp:1:int:16:int:0:int:16:int:0 + +ChaCha20+Poly1305 Encrypt and decrypt 16 bytes in multiple parts 2 +depends_on:0 +7:exp:0:int:256:int:0:int:16:exp:1:int:0:int:16:int:0:int:16 + +ChaCha20+Poly1305 Encrypt and decrypt 16 bytes in multiple parts 3 +depends_on:0 +7:exp:0:int:256:int:1:int:15:exp:1:int:1:int:15:int:1:int:15 + +ChaCha20+Poly1305 Encrypt and decrypt 16 bytes in multiple parts 4 +depends_on:0 +7:exp:0:int:256:int:15:int:1:exp:1:int:15:int:1:int:15:int:1 + +ChaCha20+Poly1305 Encrypt and decrypt 22 bytes in multiple parts 1 +depends_on:0 +7:exp:0:int:256:int:15:int:7:exp:1:int:15:int:7:int:15:int:7 + +ChaCha20+Poly1305 Encrypt and decrypt 22 bytes in multiple parts 2 +depends_on:0 +7:exp:0:int:256:int:7:int:15:exp:1:int:7:int:15:int:7:int:15 + +ChaCha20+Poly1305 Encrypt and decrypt 22 bytes in multiple parts 3 +depends_on:0 +7:exp:0:int:256:int:16:int:6:exp:1:int:16:int:6:int:16:int:6 + +ChaCha20+Poly1305 Encrypt and decrypt 22 bytes in multiple parts 4 +depends_on:0 +7:exp:0:int:256:int:6:int:16:exp:1:int:6:int:16:int:6:int:16 + +ChaCha20+Poly1305 Encrypt and decrypt 32 bytes in multiple parts +depends_on:0 +7:exp:0:int:256:int:16:int:16:exp:1:int:16:int:16:int:16:int:16 + +ChaCha20+Poly1305 RFC 7539 Test Vector #1 +depends_on:0 +9:exp:0:hex:"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0":hex:"000000000102030405060708":hex:"f33388860000000000004e91":hex:"64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709b":hex:"eead9d67890cbb22392336fea1851f38":char*:"":hex:"496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d":int:0 + +ChaCha20+Poly1305 RFC 7539 Test Vector #1 Unauthentic (1st bit flipped) +depends_on:0 +9:exp:0:hex:"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0":hex:"000000000102030405060708":hex:"f33388860000000000004e91":hex:"64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709b":hex:"6ead9d67890cbb22392336fea1851f38":char*:"FAIL":hex:"":int:0 + +Chacha20+Poly1305 RFC 7539 Test Vector #1 (streaming) +depends_on:0 +8:exp:0:exp:1:hex:"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0":hex:"000000000102030405060708":hex:"64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709b":hex:"496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d":hex:"f33388860000000000004e91":hex:"eead9d67890cbb22392336fea1851f38":int:0:int:0 + diff --git a/third_party/mbedtls/test/test_suite_cipher.des.c b/third_party/mbedtls/test/test_suite_cipher.des.c new file mode 100644 index 000000000..0e28241e8 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.des.c @@ -0,0 +1,2031 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_cipher.des.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_cipher.function + * Test suite data : suites/test_suite_cipher.des.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_CIPHER_C) +#include "third_party/mbedtls/cipher.h" + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +#endif + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +#endif + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) +#define MBEDTLS_CIPHER_AUTH_CRYPT +#endif + +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +/* Helper for resetting key/direction + * + * The documentation doesn't explicitly say whether calling + * mbedtls_cipher_setkey() twice is allowed or not. This currently works with + * the default software implementation, but only by accident. It isn't + * guaranteed to work with new ciphers or with alternative implementations of + * individual ciphers, and it doesn't work with the PSA wrappers. So don't do + * it, and instead start with a fresh context. + */ +static int cipher_reset_key( mbedtls_cipher_context_t *ctx, int cipher_id, + int use_psa, size_t tag_len, const data_t *key, int direction ) +{ + mbedtls_cipher_free( ctx ); + mbedtls_cipher_init( ctx ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( ctx, mbedtls_cipher_info_from_type( cipher_id ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( ctx, key->x, 8 * key->len, direction ) ); + return( 1 ); +exit: + return( 0 ); +} + +/* + * Check if a buffer is all-0 bytes: + * return 1 if it is, + * 0 if it isn't. + */ +int buffer_is_all_zero( const uint8_t *buf, size_t size ) +{ + for( size_t i = 0; i < size; i++ ) + if( buf[i] != 0 ) + return 0; + return 1; +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ + +void test_mbedtls_cipher_list( ) +{ + const int *cipher_type; + for( cipher_type = mbedtls_cipher_list(); *cipher_type != 0; cipher_type++ ) + TEST_ASSERT( mbedtls_cipher_info_from_type( *cipher_type ) != NULL ); +exit: + ; +} + +void test_mbedtls_cipher_list_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_cipher_list( ); +} +void test_cipher_invalid_param_unconditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + mbedtls_cipher_context_t invalid_ctx; + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + mbedtls_cipher_init( &valid_ctx ); + mbedtls_cipher_setup( &valid_ctx, valid_info ); + mbedtls_cipher_init( &invalid_ctx ); + + /* mbedtls_cipher_setup() */ + TEST_ASSERT( mbedtls_cipher_setup( &valid_ctx, NULL ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_get_block_size() */ + TEST_ASSERT( mbedtls_cipher_get_block_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_ASSERT( mbedtls_cipher_get_cipher_mode( &invalid_ctx ) == + MBEDTLS_MODE_NONE ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_ASSERT( mbedtls_cipher_get_iv_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_type() */ + TEST_ASSERT( + mbedtls_cipher_get_type( &invalid_ctx ) == + MBEDTLS_CIPHER_NONE); + + /* mbedtls_cipher_get_name() */ + TEST_ASSERT( mbedtls_cipher_get_name( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_ASSERT( mbedtls_cipher_get_key_bitlen( &invalid_ctx ) == + MBEDTLS_KEY_LENGTH_NONE ); + + /* mbedtls_cipher_get_operation() */ + TEST_ASSERT( mbedtls_cipher_get_operation( &invalid_ctx ) == + MBEDTLS_OPERATION_NONE ); + + /* mbedtls_cipher_setkey() */ + TEST_ASSERT( + mbedtls_cipher_setkey( &invalid_ctx, + valid_buffer, + valid_bitlen, + valid_operation ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_set_iv() */ + TEST_ASSERT( + mbedtls_cipher_set_iv( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_reset() */ + TEST_ASSERT( mbedtls_cipher_reset( &invalid_ctx ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_ASSERT( + mbedtls_cipher_update_ad( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_ASSERT( mbedtls_cipher_set_padding_mode( &invalid_ctx, valid_mode ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif + + /* mbedtls_cipher_update() */ + TEST_ASSERT( + mbedtls_cipher_update( &invalid_ctx, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_finish() */ + TEST_ASSERT( + mbedtls_cipher_finish( &invalid_ctx, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_ASSERT( + mbedtls_cipher_write_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_check_tag() */ + TEST_ASSERT( + mbedtls_cipher_check_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +exit: + mbedtls_cipher_free( &invalid_ctx ); + mbedtls_cipher_free( &valid_ctx ); +} + +void test_cipher_invalid_param_unconditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_unconditional( ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_cipher_invalid_param_conditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_operation_t invalid_operation = 100; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + /* mbedtls_cipher_init() */ + TEST_VALID_PARAM( mbedtls_cipher_init( &valid_ctx ) ); + TEST_INVALID_PARAM( mbedtls_cipher_init( NULL ) ); + + /* mbedtls_cipher_setup() */ + TEST_VALID_PARAM( mbedtls_cipher_setup( &valid_ctx, valid_info ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setup( NULL, valid_info ) ); + + /* mbedtls_cipher_get_block_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_block_size( NULL ) ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_MODE_NONE, + mbedtls_cipher_get_cipher_mode( NULL ) ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_iv_size( NULL ) ); + + /* mbedtls_cipher_get_type() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_CIPHER_NONE, + mbedtls_cipher_get_type( NULL ) ); + + /* mbedtls_cipher_get_name() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_name( NULL ) ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_KEY_LENGTH_NONE, + mbedtls_cipher_get_key_bitlen( NULL ) ); + + /* mbedtls_cipher_get_operation() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_OPERATION_NONE, + mbedtls_cipher_get_operation( NULL ) ); + + /* mbedtls_cipher_setkey() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( NULL, + valid_buffer, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + NULL, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + valid_buffer, + valid_bitlen, + invalid_operation ) ); + + /* mbedtls_cipher_set_iv() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_reset() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_reset( NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_padding_mode( NULL, valid_mode ) ); +#endif + + /* mbedtls_cipher_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( NULL, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + NULL, valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, + NULL ) ); + + /* mbedtls_cipher_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( NULL, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + valid_buffer, + NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_check_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + + /* mbedtls_cipher_crypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) + /* mbedtls_cipher_auth_encrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); + + /* mbedtls_cipher_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); +#endif /* defined(MBEDTLS_CIPHER_MODE_AEAD) */ + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) + /* mbedtls_cipher_auth_encrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); + + /* mbedtls_cipher_auth_decrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); +#endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */ + + /* mbedtls_cipher_free() */ + TEST_VALID_PARAM( mbedtls_cipher_free( NULL ) ); +exit: + TEST_VALID_PARAM( mbedtls_cipher_free( &valid_ctx ) ); +} + +void test_cipher_invalid_param_conditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_conditional( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#if defined(MBEDTLS_AES_C) +void test_cipher_special_behaviours( ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + unsigned char input[32]; + unsigned char output[32]; +#if defined (MBEDTLS_CIPHER_MODE_CBC) + unsigned char iv[32]; +#endif + size_t olen = 0; + + mbedtls_cipher_init( &ctx ); + memset( input, 0, sizeof( input ) ); + memset( output, 0, sizeof( output ) ); +#if defined(MBEDTLS_CIPHER_MODE_CBC) + memset( iv, 0, sizeof( iv ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_CBC ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* IV too big */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, MBEDTLS_MAX_IV_LENGTH + 1 ) + == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + + /* IV too small */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, 0 ) + == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_cipher_free( &ctx ); + mbedtls_cipher_init( &ctx ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_ECB ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* Update ECB with partial block */ + TEST_ASSERT( mbedtls_cipher_update( &ctx, input, 1, output, &olen ) + == MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_cipher_special_behaviours_wrapper( void ** params ) +{ + (void)params; + + test_cipher_special_behaviours( ); +} +#endif /* MBEDTLS_AES_C */ +void test_enc_dec_buf( int cipher_id, char * cipher_string, int key_len, + int length_val, int pad_mode ) +{ + size_t length = length_val, outlen, total_len, i, block_size; + unsigned char key[64]; + unsigned char iv[16]; + unsigned char ad[13]; + unsigned char tag[16]; + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + + /* + * Prepare contexts + */ + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( key, 0x2a, sizeof( key ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( mbedtls_cipher_info_from_string( cipher_string ) == cipher_info ); + + /* Initialise enc and dec contexts */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + /* + * Do a few encode/decode cycles + */ + for( i = 0; i < 3; i++ ) + { + memset( iv , 0x00 + i, sizeof( iv ) ); + memset( ad, 0x10 + i, sizeof( ad ) ); + memset( inbuf, 0x20 + i, sizeof( inbuf ) ); + + memset( encbuf, 0, sizeof( encbuf ) ); + memset( decbuf, 0, sizeof( decbuf ) ); + memset( tag, 0, sizeof( tag ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, sizeof( iv ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, sizeof( iv ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, ad, sizeof( ad ) - i ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, ad, sizeof( ad ) - i ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, length, encbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_write_tag( &ctx_enc, tag, sizeof( tag ) ) ); +#endif + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len > length && + total_len <= length + block_size ) ); + + /* decode the previously encoded string */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, total_len, decbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_check_tag( &ctx_dec, tag, sizeof( tag ) ) ); +#endif + + /* check result */ + TEST_ASSERT( total_len == length ); + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + } + + /* + * Done + */ +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_wrapper( void ** params ) +{ + + test_enc_dec_buf( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_enc_fail( int cipher_id, int pad_mode, int key_len, int length_val, + int ret ) +{ + size_t length = length_val; + unsigned char key[32]; + unsigned char iv[16]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + + /* Initialise context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key, key_len, MBEDTLS_ENCRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, NULL, 0 ) ); +#endif + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, inbuf, length, encbuf, &outlen ) ); + TEST_ASSERT( ret == mbedtls_cipher_finish( &ctx, encbuf + outlen, &outlen ) ); + + /* done */ +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_enc_fail_wrapper( void ** params ) +{ + + test_enc_fail( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_dec_empty_buf( int cipher, + int expected_update_ret, + int expected_finish_ret ) +{ + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise context */ + cipher_info = mbedtls_cipher_info_from_type( cipher ); + TEST_ASSERT( NULL != cipher_info); + TEST_ASSERT( sizeof(key) * 8 >= cipher_info->key_bitlen ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, + key, cipher_info->key_bitlen, + MBEDTLS_DECRYPT ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); +#endif + + /* decode 0-byte string */ + TEST_ASSERT( expected_update_ret == + mbedtls_cipher_update( &ctx_dec, encbuf, 0, decbuf, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + if ( expected_finish_ret == 0 && + ( cipher_info->mode == MBEDTLS_MODE_CBC || + cipher_info->mode == MBEDTLS_MODE_ECB ) ) + { + /* Non-CBC and non-ECB ciphers are OK with decrypting empty buffers and + * return success, not MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED, when + * decrypting an empty buffer. + * On the other hand, CBC and ECB ciphers need a full block of input. + */ + expected_finish_ret = MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED; + } + + TEST_ASSERT( expected_finish_ret == mbedtls_cipher_finish( + &ctx_dec, decbuf + outlen, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + +exit: + mbedtls_cipher_free( &ctx_dec ); +} + +void test_dec_empty_buf_wrapper( void ** params ) +{ + + test_dec_empty_buf( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +void test_enc_dec_buf_multipart( int cipher_id, int key_len, int first_length_val, + int second_length_val, int pad_mode, + int first_encrypt_output_len, int second_encrypt_output_len, + int first_decrypt_output_len, int second_decrypt_output_len ) +{ + size_t first_length = first_length_val; + size_t second_length = second_length_val; + size_t length = first_length + second_length; + size_t block_size; + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + size_t totaloutlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise enc and dec contexts */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, NULL, 0 ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, first_length, encbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_encrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf + first_length, second_length, encbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_encrypt_output_len == outlen ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen > length && + totaloutlen <= length + block_size ) ); + + /* decode the previously encoded string */ + second_length = totaloutlen - first_length; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, first_length, decbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_decrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf + first_length, second_length, decbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_decrypt_output_len == outlen ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length ); + + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_multipart_wrapper( void ** params ) +{ + + test_enc_dec_buf_multipart( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ) ); +} +void test_decrypt_test_vec( int cipher_id, int pad_mode, data_t * key, + data_t * iv, data_t * cipher, + data_t * clear, data_t * ad, data_t * tag, + int finish_result, int tag_result ) +{ + unsigned char output[265]; + mbedtls_cipher_context_t ctx; + size_t outlen, total_len; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + +#if !defined(MBEDTLS_GCM_C) && !defined(MBEDTLS_CHACHAPOLY_C) + ((void) ad); + ((void) tag); +#endif + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, MBEDTLS_DECRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( pad_mode != -1 ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv->x, iv->len ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, ad->x, ad->len ) ); +#endif + + /* decode buffer and check tag->x */ + total_len = 0; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, cipher->x, cipher->len, output, &outlen ) ); + total_len += outlen; + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + total_len += outlen; +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( tag_result == mbedtls_cipher_check_tag( &ctx, tag->x, tag->len ) ); +#endif + + /* check plaintext only if everything went fine */ + if( 0 == finish_result && 0 == tag_result ) + { + TEST_ASSERT( total_len == clear->len ); + TEST_ASSERT( 0 == memcmp( output, clear->x, clear->len ) ); + } + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_decrypt_test_vec_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_decrypt_test_vec( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, &data10, &data12, *( (int *) params[14] ), *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +void test_auth_crypt_tv( int cipher_id, data_t * key, data_t * iv, + data_t * ad, data_t * cipher, data_t * tag, + char * result, data_t * clear, int use_psa ) +{ + /* + * Take an AEAD ciphertext + tag and perform a pair + * of AEAD decryption and AEAD encryption. Check that + * this results in the expected plaintext, and that + * decryption and encryption are inverse to one another. + * + * Do that twice: + * - once with legacy functions auth_decrypt/auth_encrypt + * - once with new functions auth_decrypt_ext/auth_encrypt_ext + * This allows testing both without duplicating test cases. + */ + + int ret; + int using_nist_kw, using_nist_kw_padding; + + mbedtls_cipher_context_t ctx; + size_t outlen; + + unsigned char *cipher_plus_tag = NULL; + size_t cipher_plus_tag_len; + unsigned char *decrypt_buf = NULL; + size_t decrypt_buf_len = 0; + unsigned char *encrypt_buf = NULL; + size_t encrypt_buf_len = 0; + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + unsigned char *tmp_tag = NULL; + unsigned char *tmp_cipher = NULL; + unsigned char *tag_buf = NULL; +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + + /* Null pointers are documented as valid for inputs of length 0. + * The test framework passes non-null pointers, so set them to NULL. + * key, cipher and tag can't be empty. */ + if( iv->len == 0 ) + iv->x = NULL; + if( ad->len == 0 ) + ad->x = NULL; + if( clear->len == 0 ) + clear->x = NULL; + + mbedtls_cipher_init( &ctx ); + + /* + * Are we using NIST_KW? with padding? + */ + using_nist_kw_padding = cipher_id == MBEDTLS_CIPHER_AES_128_KWP || + cipher_id == MBEDTLS_CIPHER_AES_192_KWP || + cipher_id == MBEDTLS_CIPHER_AES_256_KWP; + using_nist_kw = cipher_id == MBEDTLS_CIPHER_AES_128_KW || + cipher_id == MBEDTLS_CIPHER_AES_192_KW || + cipher_id == MBEDTLS_CIPHER_AES_256_KW || + using_nist_kw_padding; + + /**************************************************************** + * * + * Part 1: non-deprecated API * + * * + ****************************************************************/ + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * prepare buffer for decryption + * (we need the tag appended to the ciphertext) + */ + cipher_plus_tag_len = cipher->len + tag->len; + ASSERT_ALLOC( cipher_plus_tag, cipher_plus_tag_len ); + memcpy( cipher_plus_tag, cipher->x, cipher->len ); + memcpy( cipher_plus_tag + cipher->len, tag->x, tag->len ); + + /* + * Compute length of output buffer according to the documentation + */ + if( using_nist_kw ) + decrypt_buf_len = cipher_plus_tag_len - 8; + else + decrypt_buf_len = cipher_plus_tag_len - tag->len; + + + /* + * Try decrypting to a buffer that's 1B too small + */ + if( decrypt_buf_len != 0 ) + { + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + } + + /* + * Authenticate and decrypt, and check result + */ + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len, &outlen, tag->len ); + + if( strcmp( result, "FAIL" ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, decrypt_buf_len ) ); + } + else + { + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + /* Free this, but keep cipher_plus_tag for deprecated function with PSA */ + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* + * Compute size of output buffer according to documentation + */ + if( using_nist_kw ) + { + encrypt_buf_len = clear->len + 8; + if( using_nist_kw_padding && encrypt_buf_len % 8 != 0 ) + encrypt_buf_len += 8 - encrypt_buf_len % 8; + } + else + { + encrypt_buf_len = clear->len + tag->len; + } + + /* + * Try encrypting with an output buffer that's 1B too small + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret != 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + + /* + * Encrypt and check the result + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len, &outlen, tag->len ); + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len + tag->len ); + TEST_ASSERT( memcmp( encrypt_buf, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( encrypt_buf + cipher->len, + tag->x, tag->len ) == 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + } + + /**************************************************************** + * * + * Part 2: deprecated API * + * * + ****************************************************************/ + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * Prepare pointers for decryption + */ + tmp_cipher = cipher->x; + tmp_tag = tag->x; + + /* + * Authenticate and decrypt, and check result + */ + + ASSERT_ALLOC( decrypt_buf, cipher->len ); + outlen = 0; + ret = mbedtls_cipher_auth_decrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + tmp_cipher, cipher->len, decrypt_buf, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + /* NIST_KW with legacy API */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else if( strcmp( result, "FAIL" ) == 0 ) + { + /* unauthentic message */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, cipher->len ) ); + } + else + { + /* authentic message: is the plaintext correct? */ + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + mbedtls_free( cipher_plus_tag ); + cipher_plus_tag = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* prepare buffers for encryption */ + ASSERT_ALLOC( encrypt_buf, cipher->len ); + ASSERT_ALLOC( tag_buf, tag->len ); + tmp_cipher = encrypt_buf; + tmp_tag = tag_buf; + + /* + * Encrypt and check the result + */ + outlen = 0; + ret = mbedtls_cipher_auth_encrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + clear->x, clear->len, tmp_cipher, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len ); + if( cipher->len != 0 ) + TEST_ASSERT( memcmp( tmp_cipher, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( tmp_tag, tag->x, tag->len ) == 0 ); + } + } + +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +exit: + + mbedtls_cipher_free( &ctx ); + mbedtls_free( decrypt_buf ); + mbedtls_free( encrypt_buf ); + mbedtls_free( cipher_plus_tag ); +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + mbedtls_free( tag_buf ); +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ +} + +void test_auth_crypt_tv_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_auth_crypt_tv( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, (char *) params[11], &data12, *( (int *) params[14] ) ); +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ +void test_test_vec_ecb( int cipher_id, int operation, data_t * key, + data_t * input, data_t * result, int finish_result + ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, input->x, + mbedtls_cipher_get_block_size( &ctx ), + output, &outlen ) ); + TEST_ASSERT( outlen == mbedtls_cipher_get_block_size( &ctx ) ); + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, + mbedtls_cipher_get_block_size( &ctx ) ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_test_vec_ecb_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_test_vec_ecb( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_test_vec_crypt( int cipher_id, int operation, data_t *key, + data_t *iv, data_t *input, data_t *result, + int finish_result, int use_psa ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + if( MBEDTLS_MODE_CBC == ctx.cipher_info->mode ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, MBEDTLS_PADDING_NONE ) ); + + TEST_ASSERT( finish_result == mbedtls_cipher_crypt( &ctx, iv->len ? iv->x : NULL, + iv->len, input->x, input->len, + output, &outlen ) ); + TEST_ASSERT( result->len == outlen ); + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, outlen ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_test_vec_crypt_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_test_vec_crypt( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_set_padding( int cipher_id, int pad_mode, int ret ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + mbedtls_cipher_init( &ctx ); + + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + TEST_ASSERT( ret == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_set_padding_wrapper( void ** params ) +{ + + test_set_padding( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_check_padding( int pad_mode, data_t * input, int ret, int dlen_check + ) +{ + mbedtls_cipher_info_t cipher_info; + mbedtls_cipher_context_t ctx; + size_t dlen; + + /* build a fake context just for getting access to get_padding */ + mbedtls_cipher_init( &ctx ); + cipher_info.mode = MBEDTLS_MODE_CBC; + ctx.cipher_info = &cipher_info; + + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + + + TEST_ASSERT( ret == ctx.get_padding( input->x, input->len, &dlen ) ); + if( 0 == ret ) + TEST_ASSERT( dlen == (size_t) dlen_check ); +exit: + ; +} + +void test_check_padding_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_check_padding( *( (int *) params[0] ), &data1, *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#endif /* MBEDTLS_CIPHER_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_DES_CBC; + } + break; + case 1: + { + *out_value = MBEDTLS_CIPHER_DES_EDE_CBC; + } + break; + case 2: + { + *out_value = MBEDTLS_CIPHER_DES_EDE3_CBC; + } + break; + case 3: + { + *out_value = -1; + } + break; + case 4: + { + *out_value = MBEDTLS_PADDING_ONE_AND_ZEROS; + } + break; + case 5: + { + *out_value = MBEDTLS_PADDING_ZEROS_AND_LEN; + } + break; + case 6: + { + *out_value = MBEDTLS_PADDING_ZEROS; + } + break; + case 7: + { + *out_value = MBEDTLS_PADDING_NONE; + } + break; + case 8: + { + *out_value = MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED; + } + break; + case 9: + { + *out_value = MBEDTLS_CIPHER_DES_ECB; + } + break; + case 10: + { + *out_value = MBEDTLS_ENCRYPT; + } + break; + case 11: + { + *out_value = MBEDTLS_DECRYPT; + } + break; + case 12: + { + *out_value = MBEDTLS_CIPHER_DES_EDE_ECB; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { +#if defined(MBEDTLS_DES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_CIPHER_MODE_CBC) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_CIPHER_PADDING_PKCS7) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_CIPHER_C) + test_mbedtls_cipher_list_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_CIPHER_C) + test_cipher_invalid_param_unconditional_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_cipher_invalid_param_conditional_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_AES_C) + test_cipher_special_behaviours_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_fail_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_CIPHER_C) + test_dec_empty_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_multipart_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_CIPHER_C) + test_decrypt_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_AUTH_CRYPT) + test_auth_crypt_tv_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_CIPHER_C) + test_test_vec_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_test_vec_crypt_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_set_padding_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_check_padding_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_cipher.des.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_cipher.des.datax b/third_party/mbedtls/test/test_suite_cipher.des.datax new file mode 100644 index 000000000..731af3168 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.des.datax @@ -0,0 +1,604 @@ +DES CBC Decrypt empty buffer +depends_on:0:1:2 +6:exp:0:int:0:int:0 + +DES EDE CBC Decrypt empty buffer +depends_on:0:1:2 +6:exp:1:int:0:int:0 + +DES EDE3 CBC Decrypt empty buffer +depends_on:0:1:2 +6:exp:2:int:0:int:0 + +DES Encrypt and decrypt 0 bytes [#1] +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:0:exp:3 + +DES Encrypt and decrypt 1 byte +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:1:exp:3 + +DES Encrypt and decrypt 2 bytes +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:2:exp:3 + +DES Encrypt and decrypt 7 bytes +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:7:exp:3 + +DES Encrypt and decrypt 8 bytes +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:8:exp:3 + +DES Encrypt and decrypt 9 bytes +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:9:exp:3 + +DES Encrypt and decrypt 15 bytes +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:15:exp:3 + +DES Encrypt and decrypt 16 bytes +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:16:exp:3 + +DES Encrypt and decrypt 17 bytes +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:17:exp:3 + +DES Encrypt and decrypt 31 bytes +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:31:exp:3 + +DES Encrypt and decrypt 32 bytes [#1] +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:32:exp:3 + +DES Encrypt and decrypt 32 bytes [#2] +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:33:exp:3 + +DES Encrypt and decrypt 47 bytes +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:47:exp:3 + +DES Encrypt and decrypt 48 bytes +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:48:exp:3 + +DES Encrypt and decrypt 49 bytes +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:49:exp:3 + +DES Encrypt and decrypt 0 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:0:exp:4 + +DES Encrypt and decrypt 1 byte with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:1:exp:4 + +DES Encrypt and decrypt 2 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:2:exp:4 + +DES Encrypt and decrypt 7 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:7:exp:4 + +DES Encrypt and decrypt 8 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:8:exp:4 + +DES Encrypt and decrypt 9 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:9:exp:4 + +DES Encrypt and decrypt 15 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:15:exp:4 + +DES Encrypt and decrypt 16 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:16:exp:4 + +DES Encrypt and decrypt 17 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:17:exp:4 + +DES Encrypt and decrypt 31 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:31:exp:4 + +DES Encrypt and decrypt 32 bytes with one and zeros padding [#1] +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:32:exp:4 + +DES Encrypt and decrypt 32 bytes with one and zeros padding [#2] +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:33:exp:4 + +DES Encrypt and decrypt 47 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:47:exp:4 + +DES Encrypt and decrypt 48 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:48:exp:4 + +DES Encrypt and decrypt 49 bytes with one and zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:49:exp:4 + +DES Encrypt and decrypt 0 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:0:exp:5 + +DES Encrypt and decrypt 1 byte with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:1:exp:5 + +DES Encrypt and decrypt 2 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:2:exp:5 + +DES Encrypt and decrypt 7 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:7:exp:5 + +DES Encrypt and decrypt 8 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:8:exp:5 + +DES Encrypt and decrypt 9 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:9:exp:5 + +DES Encrypt and decrypt 15 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:15:exp:5 + +DES Encrypt and decrypt 16 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:16:exp:5 + +DES Encrypt and decrypt 17 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:17:exp:5 + +DES Encrypt and decrypt 31 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:31:exp:5 + +DES Encrypt and decrypt 32 bytes with zeros and len padding [#1] +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:32:exp:5 + +DES Encrypt and decrypt 32 bytes with zeros and len padding [#2] +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:33:exp:5 + +DES Encrypt and decrypt 47 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:47:exp:5 + +DES Encrypt and decrypt 48 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:48:exp:5 + +DES Encrypt and decrypt 49 bytes with zeros and len padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:49:exp:5 + +DES Encrypt and decrypt 0 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:0:exp:6 + +DES Encrypt and decrypt 1 byte with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:1:exp:6 + +DES Encrypt and decrypt 2 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:2:exp:6 + +DES Encrypt and decrypt 7 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:7:exp:6 + +DES Encrypt and decrypt 8 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:8:exp:6 + +DES Encrypt and decrypt 9 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:9:exp:6 + +DES Encrypt and decrypt 15 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:15:exp:6 + +DES Encrypt and decrypt 16 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:16:exp:6 + +DES Encrypt and decrypt 17 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:17:exp:6 + +DES Encrypt and decrypt 31 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:31:exp:6 + +DES Encrypt and decrypt 32 bytes with zeros padding [#1] +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:32:exp:6 + +DES Encrypt and decrypt 32 bytes with zeros padding [#2] +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:33:exp:6 + +DES Encrypt and decrypt 47 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:47:exp:6 + +DES Encrypt and decrypt 48 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:48:exp:6 + +DES Encrypt and decrypt 49 bytes with zeros padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:49:exp:6 + +DES Encrypt and decrypt 0 bytes with no padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:0:exp:7 + +DES Encrypt and decrypt 8 bytes with no padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:8:exp:7 + +DES Encrypt and decrypt 16 bytes with no padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:16:exp:7 + +DES Encrypt and decrypt 32 bytes with no padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:32:exp:7 + +DES Encrypt and decrypt 48 bytes with no padding +depends_on:0:1:2 +4:exp:0:char*:"DES-CBC":int:64:int:48:exp:7 + +DES Try encrypting 1 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:64:int:1:exp:8 + +DES Try encrypting 2 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:64:int:2:exp:8 + +DES Try encrypting 7 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:64:int:7:exp:8 + +DES Try encrypting 9 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:64:int:9:exp:8 + +DES Try encrypting 15 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:64:int:15:exp:8 + +DES Try encrypting 17 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:64:int:17:exp:8 + +DES Try encrypting 31 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:64:int:31:exp:8 + +DES Try encrypting 33 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:64:int:33:exp:8 + +DES Try encrypting 47 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:64:int:47:exp:8 + +DES Try encrypting 49 bytes with no padding +depends_on:0:1:2 +5:exp:0:exp:7:int:64:int:49:exp:8 + +DES Encrypt and decrypt 0 bytes in multiple parts +depends_on:0:1:2 +7:exp:0:int:64:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +DES Encrypt and decrypt 1 bytes in multiple parts 1 +depends_on:0:1:2 +7:exp:0:int:64:int:1:int:0:exp:3:int:0:int:0:int:0:int:0 + +DES Encrypt and decrypt 1 bytes in multiple parts 2 +depends_on:0:1:2 +7:exp:0:int:64:int:0:int:1:exp:3:int:0:int:0:int:0:int:0 + +DES Encrypt and decrypt 16 bytes in multiple parts 1 +depends_on:0:1:2 +7:exp:0:int:64:int:16:int:0:exp:3:int:16:int:0:int:8:int:8 + +DES Encrypt and decrypt 16 bytes in multiple parts 2 +depends_on:0:1:2 +7:exp:0:int:64:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +DES Encrypt and decrypt 16 bytes in multiple parts 3 +depends_on:0:1:2 +7:exp:0:int:64:int:1:int:15:exp:3:int:0:int:16:int:0:int:16 + +DES Encrypt and decrypt 16 bytes in multiple parts 4 +depends_on:0:1:2 +7:exp:0:int:64:int:15:int:1:exp:3:int:8:int:8:int:8:int:8 + +DES Encrypt and decrypt 22 bytes in multiple parts 1 [#1] +depends_on:0:1:2 +7:exp:0:int:64:int:15:int:7:exp:3:int:8:int:8:int:8:int:8 + +DES Encrypt and decrypt 22 bytes in multiple parts 1 [#2] +depends_on:0:1:2 +7:exp:0:int:64:int:16:int:6:exp:3:int:16:int:0:int:8:int:8 + +DES Encrypt and decrypt 22 bytes in multiple parts 1 [#3] +depends_on:0:1:2 +7:exp:0:int:64:int:17:int:6:exp:3:int:16:int:0:int:16:int:0 + +DES Encrypt and decrypt 32 bytes in multiple parts 1 +depends_on:0:1:2 +7:exp:0:int:64:int:16:int:16:exp:3:int:16:int:16:int:8:int:24 + +DES Encrypt and decrypt 0 bytes [#2] +depends_on:0:1:2 +4:exp:1:char*:"DES-EDE-CBC":int:128:int:0:exp:3 + +DES3 Encrypt and decrypt 1 byte [#1] +depends_on:0:1:2 +4:exp:1:char*:"DES-EDE-CBC":int:128:int:1:exp:3 + +DES3 Encrypt and decrypt 2 bytes [#1] +depends_on:0:1:2 +4:exp:1:char*:"DES-EDE-CBC":int:128:int:2:exp:3 + +DES3 Encrypt and decrypt 7 bytes [#1] +depends_on:0:1:2 +4:exp:1:char*:"DES-EDE-CBC":int:128:int:7:exp:3 + +DES3 Encrypt and decrypt 8 bytes [#1] +depends_on:0:1:2 +4:exp:1:char*:"DES-EDE-CBC":int:128:int:8:exp:3 + +DES3 Encrypt and decrypt 9 bytes [#1] +depends_on:0:1:2 +4:exp:1:char*:"DES-EDE-CBC":int:128:int:9:exp:3 + +DES3 Encrypt and decrypt 15 bytes [#1] +depends_on:0:1:2 +4:exp:1:char*:"DES-EDE-CBC":int:128:int:15:exp:3 + +DES3 Encrypt and decrypt 16 bytes [#1] +depends_on:0:1:2 +4:exp:1:char*:"DES-EDE-CBC":int:128:int:16:exp:3 + +DES3 Encrypt and decrypt 17 bytes [#1] +depends_on:0:1:2 +4:exp:1:char*:"DES-EDE-CBC":int:128:int:17:exp:3 + +DES3 Encrypt and decrypt 31 bytes [#1] +depends_on:0:1:2 +4:exp:1:char*:"DES-EDE-CBC":int:128:int:31:exp:3 + +DES3 Encrypt and decrypt 32 bytes [#1] +depends_on:0:1:2 +4:exp:1:char*:"DES-EDE-CBC":int:128:int:32:exp:3 + +DES3 Encrypt and decrypt 32 bytes [#2] +depends_on:0:1:2 +4:exp:1:char*:"DES-EDE-CBC":int:128:int:33:exp:3 + +DES3 Encrypt and decrypt 47 bytes [#1] +depends_on:0:1:2 +4:exp:1:char*:"DES-EDE-CBC":int:128:int:47:exp:3 + +DES3 Encrypt and decrypt 48 bytes [#1] +depends_on:0:1:2 +4:exp:1:char*:"DES-EDE-CBC":int:128:int:48:exp:3 + +DES3 Encrypt and decrypt 49 bytes [#1] +depends_on:0:1:2 +4:exp:1:char*:"DES-EDE-CBC":int:128:int:49:exp:3 + +DES3 Encrypt and decrypt 0 bytes in multiple parts [#1] +depends_on:0:1:2 +7:exp:1:int:128:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +DES3 Encrypt and decrypt 1 bytes in multiple parts 1 [#1] +depends_on:0:1:2 +7:exp:1:int:128:int:1:int:0:exp:3:int:0:int:0:int:0:int:0 + +DES3 Encrypt and decrypt 1 bytes in multiple parts 2 [#1] +depends_on:0:1:2 +7:exp:1:int:128:int:0:int:1:exp:3:int:0:int:0:int:0:int:0 + +DES3 Encrypt and decrypt 16 bytes in multiple parts 1 [#1] +depends_on:0:1:2 +7:exp:1:int:128:int:16:int:0:exp:3:int:16:int:0:int:8:int:8 + +DES3 Encrypt and decrypt 16 bytes in multiple parts 2 [#1] +depends_on:0:1:2 +7:exp:1:int:128:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +DES3 Encrypt and decrypt 16 bytes in multiple parts 3 [#1] +depends_on:0:1:2 +7:exp:1:int:128:int:1:int:15:exp:3:int:0:int:16:int:0:int:16 + +DES3 Encrypt and decrypt 16 bytes in multiple parts 4 [#1] +depends_on:0:1:2 +7:exp:1:int:128:int:15:int:1:exp:3:int:8:int:8:int:8:int:8 + +DES3 Encrypt and decrypt 22 bytes in multiple parts 1 [#1] +depends_on:0:1:2 +7:exp:1:int:128:int:15:int:7:exp:3:int:8:int:8:int:8:int:8 + +DES3 Encrypt and decrypt 22 bytes in multiple parts 1 [#2] +depends_on:0:1:2 +7:exp:1:int:128:int:16:int:6:exp:3:int:16:int:0:int:8:int:8 + +DES3 Encrypt and decrypt 22 bytes in multiple parts 1 [#3] +depends_on:0:1:2 +7:exp:1:int:128:int:17:int:6:exp:3:int:16:int:0:int:16:int:0 + +DES3 Encrypt and decrypt 32 bytes in multiple parts 1 [#1] +depends_on:0:1:2 +7:exp:1:int:128:int:16:int:16:exp:3:int:16:int:16:int:8:int:24 + +DES3 Encrypt and decrypt 0 bytes +depends_on:0:1:2 +4:exp:2:char*:"DES-EDE3-CBC":int:192:int:0:exp:3 + +DES3 Encrypt and decrypt 1 byte [#2] +depends_on:0:1:2 +4:exp:2:char*:"DES-EDE3-CBC":int:192:int:1:exp:3 + +DES3 Encrypt and decrypt 2 bytes [#2] +depends_on:0:1:2 +4:exp:2:char*:"DES-EDE3-CBC":int:192:int:2:exp:3 + +DES3 Encrypt and decrypt 7 bytes [#2] +depends_on:0:1:2 +4:exp:2:char*:"DES-EDE3-CBC":int:192:int:7:exp:3 + +DES3 Encrypt and decrypt 8 bytes [#2] +depends_on:0:1:2 +4:exp:2:char*:"DES-EDE3-CBC":int:192:int:8:exp:3 + +DES3 Encrypt and decrypt 9 bytes [#2] +depends_on:0:1:2 +4:exp:2:char*:"DES-EDE3-CBC":int:192:int:9:exp:3 + +DES3 Encrypt and decrypt 15 bytes [#2] +depends_on:0:1:2 +4:exp:2:char*:"DES-EDE3-CBC":int:192:int:15:exp:3 + +DES3 Encrypt and decrypt 16 bytes [#2] +depends_on:0:1:2 +4:exp:2:char*:"DES-EDE3-CBC":int:192:int:16:exp:3 + +DES3 Encrypt and decrypt 17 bytes [#2] +depends_on:0:1:2 +4:exp:2:char*:"DES-EDE3-CBC":int:192:int:17:exp:3 + +DES3 Encrypt and decrypt 31 bytes [#2] +depends_on:0:1:2 +4:exp:2:char*:"DES-EDE3-CBC":int:192:int:31:exp:3 + +DES3 Encrypt and decrypt 32 bytes [#3] +depends_on:0:1:2 +4:exp:2:char*:"DES-EDE3-CBC":int:192:int:32:exp:3 + +DES3 Encrypt and decrypt 32 bytes [#4] +depends_on:0:1:2 +4:exp:2:char*:"DES-EDE3-CBC":int:192:int:33:exp:3 + +DES3 Encrypt and decrypt 47 bytes [#2] +depends_on:0:1:2 +4:exp:2:char*:"DES-EDE3-CBC":int:192:int:47:exp:3 + +DES3 Encrypt and decrypt 48 bytes [#2] +depends_on:0:1:2 +4:exp:2:char*:"DES-EDE3-CBC":int:192:int:48:exp:3 + +DES3 Encrypt and decrypt 49 bytes [#2] +depends_on:0:1:2 +4:exp:2:char*:"DES-EDE3-CBC":int:192:int:49:exp:3 + +DES3 Encrypt and decrypt 0 bytes in multiple parts [#2] +depends_on:0:1:2 +7:exp:2:int:192:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +DES3 Encrypt and decrypt 1 bytes in multiple parts 1 [#2] +depends_on:0:1:2 +7:exp:2:int:192:int:1:int:0:exp:3:int:0:int:0:int:0:int:0 + +DES3 Encrypt and decrypt 1 bytes in multiple parts 2 [#2] +depends_on:0:1:2 +7:exp:2:int:192:int:0:int:1:exp:3:int:0:int:0:int:0:int:0 + +DES3 Encrypt and decrypt 16 bytes in multiple parts 1 [#2] +depends_on:0:1:2 +7:exp:2:int:192:int:16:int:0:exp:3:int:16:int:0:int:8:int:8 + +DES3 Encrypt and decrypt 16 bytes in multiple parts 2 [#2] +depends_on:0:1:2 +7:exp:2:int:192:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +DES3 Encrypt and decrypt 16 bytes in multiple parts 3 [#2] +depends_on:0:1:2 +7:exp:2:int:192:int:1:int:15:exp:3:int:0:int:16:int:0:int:16 + +DES3 Encrypt and decrypt 16 bytes in multiple parts 4 [#2] +depends_on:0:1:2 +7:exp:2:int:192:int:15:int:1:exp:3:int:8:int:8:int:8:int:8 + +DES3 Encrypt and decrypt 22 bytes in multiple parts 1 [#4] +depends_on:0:1:2 +7:exp:2:int:192:int:15:int:7:exp:3:int:8:int:8:int:8:int:8 + +DES3 Encrypt and decrypt 22 bytes in multiple parts 1 [#5] +depends_on:0:1:2 +7:exp:2:int:192:int:16:int:6:exp:3:int:16:int:0:int:8:int:8 + +DES3 Encrypt and decrypt 22 bytes in multiple parts 1 [#6] +depends_on:0:1:2 +7:exp:2:int:192:int:17:int:6:exp:3:int:16:int:0:int:16:int:0 + +DES3 Encrypt and decrypt 32 bytes in multiple parts 1 [#2] +depends_on:0:1:2 +7:exp:2:int:192:int:16:int:16:exp:3:int:16:int:16:int:8:int:24 + +DES ECB Encrypt test vector (OpenSSL) #1 +depends_on:0 +10:exp:9:exp:10:hex:"0000000000000000":hex:"0000000000000000":hex:"8CA64DE9C1B123A7":int:0 + +DES ECB Encrypt test vector (OpenSSL) #2 +depends_on:0 +10:exp:9:exp:10:hex:"FFFFFFFFFFFFFFFF":hex:"FFFFFFFFFFFFFFFF":hex:"7359B2163E4EDC58":int:0 + +DES ECB Encrypt test vector (OpenSSL) #3 +depends_on:0 +10:exp:9:exp:10:hex:"FEDCBA9876543210":hex:"0123456789ABCDEF":hex:"ED39D950FA74BCC4":int:0 + +DES ECB Decrypt test vector (OpenSSL) #1 +depends_on:0 +10:exp:9:exp:11:hex:"0000000000000000":hex:"8CA64DE9C1B123A7":hex:"0000000000000000":int:0 + +DES ECB Decrypt test vector (OpenSSL) #2 +depends_on:0 +10:exp:9:exp:11:hex:"FFFFFFFFFFFFFFFF":hex:"7359B2163E4EDC58":hex:"FFFFFFFFFFFFFFFF":int:0 + +DES ECB Decrypt test vector (OpenSSL) #3 +depends_on:0 +10:exp:9:exp:11:hex:"43297FAD38E373FE":hex:"EA676B2CB7DB2B7A":hex:"762514B829BF486A":int:0 + +DES3-EDE ECB Encrypt test vector (OpenSSL) #1 +depends_on:0 +10:exp:12:exp:10:hex:"0000000000000000FFFFFFFFFFFFFFFF":hex:"0000000000000000":hex:"9295B59BB384736E":int:0 + +DES3-EDE ECB Encrypt test vector (OpenSSL) #2 +depends_on:0 +10:exp:12:exp:10:hex:"FFFFFFFFFFFFFFFF3000000000000000":hex:"FFFFFFFFFFFFFFFF":hex:"199E9D6DF39AA816":int:0 + +DES3-EDE ECB Decrypt test vector (OpenSSL) #1 +depends_on:0 +10:exp:12:exp:11:hex:"0000000000000000FFFFFFFFFFFFFFFF":hex:"9295B59BB384736E":hex:"0000000000000000":int:0 + +DES3-EDE ECB Decrypt test vector (OpenSSL) #2 +depends_on:0 +10:exp:12:exp:11:hex:"FFFFFFFFFFFFFFFF3000000000000000":hex:"199E9D6DF39AA816":hex:"FFFFFFFFFFFFFFFF":int:0 + diff --git a/third_party/mbedtls/test/test_suite_cipher.gcm.c b/third_party/mbedtls/test/test_suite_cipher.gcm.c new file mode 100644 index 000000000..20a618a9d --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.gcm.c @@ -0,0 +1,2099 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_cipher.gcm.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_cipher.function + * Test suite data : suites/test_suite_cipher.gcm.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_CIPHER_C) +#include "third_party/mbedtls/cipher.h" + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +#endif + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +#endif + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) +#define MBEDTLS_CIPHER_AUTH_CRYPT +#endif + +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +/* Helper for resetting key/direction + * + * The documentation doesn't explicitly say whether calling + * mbedtls_cipher_setkey() twice is allowed or not. This currently works with + * the default software implementation, but only by accident. It isn't + * guaranteed to work with new ciphers or with alternative implementations of + * individual ciphers, and it doesn't work with the PSA wrappers. So don't do + * it, and instead start with a fresh context. + */ +static int cipher_reset_key( mbedtls_cipher_context_t *ctx, int cipher_id, + int use_psa, size_t tag_len, const data_t *key, int direction ) +{ + mbedtls_cipher_free( ctx ); + mbedtls_cipher_init( ctx ); + +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; + (void) tag_len; +#else + if( use_psa == 1 ) + { + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( ctx, + mbedtls_cipher_info_from_type( cipher_id ), + tag_len ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + TEST_ASSERT( 0 == mbedtls_cipher_setup( ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + } + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( ctx, key->x, 8 * key->len, + direction ) ); + return( 1 ); + +exit: + return( 0 ); +} + +/* + * Check if a buffer is all-0 bytes: + * return 1 if it is, + * 0 if it isn't. + */ +int buffer_is_all_zero( const uint8_t *buf, size_t size ) +{ + for( size_t i = 0; i < size; i++ ) + if( buf[i] != 0 ) + return 0; + return 1; +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ + +void test_mbedtls_cipher_list( ) +{ + const int *cipher_type; + + for( cipher_type = mbedtls_cipher_list(); *cipher_type != 0; cipher_type++ ) + TEST_ASSERT( mbedtls_cipher_info_from_type( *cipher_type ) != NULL ); +exit: + ; +} + +void test_mbedtls_cipher_list_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_cipher_list( ); +} +void test_cipher_invalid_param_unconditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + mbedtls_cipher_context_t invalid_ctx; + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + mbedtls_cipher_init( &valid_ctx ); + mbedtls_cipher_setup( &valid_ctx, valid_info ); + mbedtls_cipher_init( &invalid_ctx ); + + /* mbedtls_cipher_setup() */ + TEST_ASSERT( mbedtls_cipher_setup( &valid_ctx, NULL ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_get_block_size() */ + TEST_ASSERT( mbedtls_cipher_get_block_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_ASSERT( mbedtls_cipher_get_cipher_mode( &invalid_ctx ) == + MBEDTLS_MODE_NONE ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_ASSERT( mbedtls_cipher_get_iv_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_type() */ + TEST_ASSERT( + mbedtls_cipher_get_type( &invalid_ctx ) == + MBEDTLS_CIPHER_NONE); + + /* mbedtls_cipher_get_name() */ + TEST_ASSERT( mbedtls_cipher_get_name( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_ASSERT( mbedtls_cipher_get_key_bitlen( &invalid_ctx ) == + MBEDTLS_KEY_LENGTH_NONE ); + + /* mbedtls_cipher_get_operation() */ + TEST_ASSERT( mbedtls_cipher_get_operation( &invalid_ctx ) == + MBEDTLS_OPERATION_NONE ); + + /* mbedtls_cipher_setkey() */ + TEST_ASSERT( + mbedtls_cipher_setkey( &invalid_ctx, + valid_buffer, + valid_bitlen, + valid_operation ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_set_iv() */ + TEST_ASSERT( + mbedtls_cipher_set_iv( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_reset() */ + TEST_ASSERT( mbedtls_cipher_reset( &invalid_ctx ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_ASSERT( + mbedtls_cipher_update_ad( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_ASSERT( mbedtls_cipher_set_padding_mode( &invalid_ctx, valid_mode ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif + + /* mbedtls_cipher_update() */ + TEST_ASSERT( + mbedtls_cipher_update( &invalid_ctx, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_finish() */ + TEST_ASSERT( + mbedtls_cipher_finish( &invalid_ctx, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_ASSERT( + mbedtls_cipher_write_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_check_tag() */ + TEST_ASSERT( + mbedtls_cipher_check_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +exit: + mbedtls_cipher_free( &invalid_ctx ); + mbedtls_cipher_free( &valid_ctx ); +} + +void test_cipher_invalid_param_unconditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_unconditional( ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_cipher_invalid_param_conditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_operation_t invalid_operation = 100; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + /* mbedtls_cipher_init() */ + TEST_VALID_PARAM( mbedtls_cipher_init( &valid_ctx ) ); + TEST_INVALID_PARAM( mbedtls_cipher_init( NULL ) ); + + /* mbedtls_cipher_setup() */ + TEST_VALID_PARAM( mbedtls_cipher_setup( &valid_ctx, valid_info ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setup( NULL, valid_info ) ); + + /* mbedtls_cipher_get_block_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_block_size( NULL ) ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_MODE_NONE, + mbedtls_cipher_get_cipher_mode( NULL ) ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_iv_size( NULL ) ); + + /* mbedtls_cipher_get_type() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_CIPHER_NONE, + mbedtls_cipher_get_type( NULL ) ); + + /* mbedtls_cipher_get_name() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_name( NULL ) ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_KEY_LENGTH_NONE, + mbedtls_cipher_get_key_bitlen( NULL ) ); + + /* mbedtls_cipher_get_operation() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_OPERATION_NONE, + mbedtls_cipher_get_operation( NULL ) ); + + /* mbedtls_cipher_setkey() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( NULL, + valid_buffer, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + NULL, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + valid_buffer, + valid_bitlen, + invalid_operation ) ); + + /* mbedtls_cipher_set_iv() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_reset() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_reset( NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_padding_mode( NULL, valid_mode ) ); +#endif + + /* mbedtls_cipher_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( NULL, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + NULL, valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, + NULL ) ); + + /* mbedtls_cipher_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( NULL, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + valid_buffer, + NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_check_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + + /* mbedtls_cipher_crypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) + /* mbedtls_cipher_auth_encrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); + + /* mbedtls_cipher_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); +#endif /* defined(MBEDTLS_CIPHER_MODE_AEAD) */ + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) + /* mbedtls_cipher_auth_encrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); + + /* mbedtls_cipher_auth_decrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); +#endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */ + + /* mbedtls_cipher_free() */ + TEST_VALID_PARAM( mbedtls_cipher_free( NULL ) ); +exit: + TEST_VALID_PARAM( mbedtls_cipher_free( &valid_ctx ) ); +} + +void test_cipher_invalid_param_conditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_conditional( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#if defined(MBEDTLS_AES_C) +void test_cipher_special_behaviours( ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + unsigned char input[32]; + unsigned char output[32]; +#if defined (MBEDTLS_CIPHER_MODE_CBC) + unsigned char iv[32]; +#endif + size_t olen = 0; + + mbedtls_cipher_init( &ctx ); + memset( input, 0, sizeof( input ) ); + memset( output, 0, sizeof( output ) ); +#if defined(MBEDTLS_CIPHER_MODE_CBC) + memset( iv, 0, sizeof( iv ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_CBC ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* IV too big */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, MBEDTLS_MAX_IV_LENGTH + 1 ) + == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + + /* IV too small */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, 0 ) + == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_cipher_free( &ctx ); + mbedtls_cipher_init( &ctx ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_ECB ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* Update ECB with partial block */ + TEST_ASSERT( mbedtls_cipher_update( &ctx, input, 1, output, &olen ) + == MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_cipher_special_behaviours_wrapper( void ** params ) +{ + (void)params; + + test_cipher_special_behaviours( ); +} +#endif /* MBEDTLS_AES_C */ +void test_enc_dec_buf( int cipher_id, char * cipher_string, int key_len, + int length_val, int pad_mode ) +{ + size_t length = length_val, outlen, total_len, i, block_size; + unsigned char key[64]; + unsigned char iv[16]; + unsigned char ad[13]; + unsigned char tag[16]; + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + + /* + * Prepare contexts + */ + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( key, 0x2a, sizeof( key ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( mbedtls_cipher_info_from_string( cipher_string ) == cipher_info ); + + /* Initialise enc and dec contexts */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + /* + * Do a few encode/decode cycles + */ + for( i = 0; i < 3; i++ ) + { + memset( iv , 0x00 + i, sizeof( iv ) ); + memset( ad, 0x10 + i, sizeof( ad ) ); + memset( inbuf, 0x20 + i, sizeof( inbuf ) ); + + memset( encbuf, 0, sizeof( encbuf ) ); + memset( decbuf, 0, sizeof( decbuf ) ); + memset( tag, 0, sizeof( tag ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, sizeof( iv ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, sizeof( iv ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, ad, sizeof( ad ) - i ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, ad, sizeof( ad ) - i ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, length, encbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_write_tag( &ctx_enc, tag, sizeof( tag ) ) ); +#endif + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len > length && + total_len <= length + block_size ) ); + + /* decode the previously encoded string */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, total_len, decbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_check_tag( &ctx_dec, tag, sizeof( tag ) ) ); +#endif + + /* check result */ + TEST_ASSERT( total_len == length ); + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + } + + /* + * Done + */ +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_wrapper( void ** params ) +{ + + test_enc_dec_buf( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_enc_fail( int cipher_id, int pad_mode, int key_len, int length_val, + int ret ) +{ + size_t length = length_val; + unsigned char key[32]; + unsigned char iv[16]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + + /* Initialise context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key, key_len, MBEDTLS_ENCRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, NULL, 0 ) ); +#endif + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, inbuf, length, encbuf, &outlen ) ); + TEST_ASSERT( ret == mbedtls_cipher_finish( &ctx, encbuf + outlen, &outlen ) ); + + /* done */ +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_enc_fail_wrapper( void ** params ) +{ + + test_enc_fail( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_dec_empty_buf( int cipher, + int expected_update_ret, + int expected_finish_ret ) +{ + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise context */ + cipher_info = mbedtls_cipher_info_from_type( cipher ); + TEST_ASSERT( NULL != cipher_info); + TEST_ASSERT( sizeof(key) * 8 >= cipher_info->key_bitlen ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, + key, cipher_info->key_bitlen, + MBEDTLS_DECRYPT ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); +#endif + + /* decode 0-byte string */ + TEST_ASSERT( expected_update_ret == + mbedtls_cipher_update( &ctx_dec, encbuf, 0, decbuf, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + if ( expected_finish_ret == 0 && + ( cipher_info->mode == MBEDTLS_MODE_CBC || + cipher_info->mode == MBEDTLS_MODE_ECB ) ) + { + /* Non-CBC and non-ECB ciphers are OK with decrypting empty buffers and + * return success, not MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED, when + * decrypting an empty buffer. + * On the other hand, CBC and ECB ciphers need a full block of input. + */ + expected_finish_ret = MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED; + } + + TEST_ASSERT( expected_finish_ret == mbedtls_cipher_finish( + &ctx_dec, decbuf + outlen, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + +exit: + mbedtls_cipher_free( &ctx_dec ); +} + +void test_dec_empty_buf_wrapper( void ** params ) +{ + + test_dec_empty_buf( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +void test_enc_dec_buf_multipart( int cipher_id, int key_len, int first_length_val, + int second_length_val, int pad_mode, + int first_encrypt_output_len, int second_encrypt_output_len, + int first_decrypt_output_len, int second_decrypt_output_len ) +{ + size_t first_length = first_length_val; + size_t second_length = second_length_val; + size_t length = first_length + second_length; + size_t block_size; + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + size_t totaloutlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise enc and dec contexts */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, NULL, 0 ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, first_length, encbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_encrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf + first_length, second_length, encbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_encrypt_output_len == outlen ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen > length && + totaloutlen <= length + block_size ) ); + + /* decode the previously encoded string */ + second_length = totaloutlen - first_length; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, first_length, decbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_decrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf + first_length, second_length, decbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_decrypt_output_len == outlen ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length ); + + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_multipart_wrapper( void ** params ) +{ + + test_enc_dec_buf_multipart( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ) ); +} +void test_decrypt_test_vec( int cipher_id, int pad_mode, data_t * key, + data_t * iv, data_t * cipher, + data_t * clear, data_t * ad, data_t * tag, + int finish_result, int tag_result ) +{ + unsigned char output[265]; + mbedtls_cipher_context_t ctx; + size_t outlen, total_len; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + +#if !defined(MBEDTLS_GCM_C) && !defined(MBEDTLS_CHACHAPOLY_C) + ((void) ad); + ((void) tag); +#endif + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, MBEDTLS_DECRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( pad_mode != -1 ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv->x, iv->len ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, ad->x, ad->len ) ); +#endif + + /* decode buffer and check tag->x */ + total_len = 0; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, cipher->x, cipher->len, output, &outlen ) ); + total_len += outlen; + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + total_len += outlen; +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( tag_result == mbedtls_cipher_check_tag( &ctx, tag->x, tag->len ) ); +#endif + + /* check plaintext only if everything went fine */ + if( 0 == finish_result && 0 == tag_result ) + { + TEST_ASSERT( total_len == clear->len ); + TEST_ASSERT( 0 == memcmp( output, clear->x, clear->len ) ); + } + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_decrypt_test_vec_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_decrypt_test_vec( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, &data10, &data12, *( (int *) params[14] ), *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +void test_auth_crypt_tv( int cipher_id, data_t * key, data_t * iv, + data_t * ad, data_t * cipher, data_t * tag, + char * result, data_t * clear, int use_psa ) +{ + /* + * Take an AEAD ciphertext + tag and perform a pair + * of AEAD decryption and AEAD encryption. Check that + * this results in the expected plaintext, and that + * decryption and encryption are inverse to one another. + * + * Do that twice: + * - once with legacy functions auth_decrypt/auth_encrypt + * - once with new functions auth_decrypt_ext/auth_encrypt_ext + * This allows testing both without duplicating test cases. + */ + + int ret; + int using_nist_kw, using_nist_kw_padding; + + mbedtls_cipher_context_t ctx; + size_t outlen; + + unsigned char *cipher_plus_tag = NULL; + size_t cipher_plus_tag_len; + unsigned char *decrypt_buf = NULL; + size_t decrypt_buf_len = 0; + unsigned char *encrypt_buf = NULL; + size_t encrypt_buf_len = 0; + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + unsigned char *tmp_tag = NULL; + unsigned char *tmp_cipher = NULL; + unsigned char *tag_buf = NULL; +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + + /* Null pointers are documented as valid for inputs of length 0. + * The test framework passes non-null pointers, so set them to NULL. + * key, cipher and tag can't be empty. */ + if( iv->len == 0 ) + iv->x = NULL; + if( ad->len == 0 ) + ad->x = NULL; + if( clear->len == 0 ) + clear->x = NULL; + + mbedtls_cipher_init( &ctx ); + + /* Initialize PSA Crypto */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_ASSERT( psa_crypto_init( ) ); +#else + (void) use_psa; +#endif + + /* + * Are we using NIST_KW? with padding? + */ + using_nist_kw_padding = cipher_id == MBEDTLS_CIPHER_AES_128_KWP || + cipher_id == MBEDTLS_CIPHER_AES_192_KWP || + cipher_id == MBEDTLS_CIPHER_AES_256_KWP; + using_nist_kw = cipher_id == MBEDTLS_CIPHER_AES_128_KW || + cipher_id == MBEDTLS_CIPHER_AES_192_KW || + cipher_id == MBEDTLS_CIPHER_AES_256_KW || + using_nist_kw_padding; + + /**************************************************************** + * * + * Part 1: non-deprecated API * + * * + ****************************************************************/ + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * prepare buffer for decryption + * (we need the tag appended to the ciphertext) + */ + cipher_plus_tag_len = cipher->len + tag->len; + ASSERT_ALLOC( cipher_plus_tag, cipher_plus_tag_len ); + memcpy( cipher_plus_tag, cipher->x, cipher->len ); + memcpy( cipher_plus_tag + cipher->len, tag->x, tag->len ); + + /* + * Compute length of output buffer according to the documentation + */ + if( using_nist_kw ) + decrypt_buf_len = cipher_plus_tag_len - 8; + else + decrypt_buf_len = cipher_plus_tag_len - tag->len; + + + /* + * Try decrypting to a buffer that's 1B too small + */ + if( decrypt_buf_len != 0 ) + { + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + } + + /* + * Authenticate and decrypt, and check result + */ + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len, &outlen, tag->len ); + + if( strcmp( result, "FAIL" ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, decrypt_buf_len ) ); + } + else + { + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + /* Free this, but keep cipher_plus_tag for deprecated function with PSA */ + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* + * Compute size of output buffer according to documentation + */ + if( using_nist_kw ) + { + encrypt_buf_len = clear->len + 8; + if( using_nist_kw_padding && encrypt_buf_len % 8 != 0 ) + encrypt_buf_len += 8 - encrypt_buf_len % 8; + } + else + { + encrypt_buf_len = clear->len + tag->len; + } + + /* + * Try encrypting with an output buffer that's 1B too small + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret != 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + + /* + * Encrypt and check the result + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len, &outlen, tag->len ); + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len + tag->len ); + TEST_ASSERT( memcmp( encrypt_buf, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( encrypt_buf + cipher->len, + tag->x, tag->len ) == 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + } + + /**************************************************************** + * * + * Part 2: deprecated API * + * * + ****************************************************************/ + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * Prepare pointers for decryption + */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + { + /* PSA requires that the tag immediately follows the ciphertext. + * Fortunately, we already have that from testing the new API. */ + tmp_cipher = cipher_plus_tag; + tmp_tag = tmp_cipher + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + tmp_cipher = cipher->x; + tmp_tag = tag->x; + } + + /* + * Authenticate and decrypt, and check result + */ + + ASSERT_ALLOC( decrypt_buf, cipher->len ); + outlen = 0; + ret = mbedtls_cipher_auth_decrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + tmp_cipher, cipher->len, decrypt_buf, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + /* NIST_KW with legacy API */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else if( strcmp( result, "FAIL" ) == 0 ) + { + /* unauthentic message */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, cipher->len ) ); + } + else + { + /* authentic message: is the plaintext correct? */ + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + mbedtls_free( cipher_plus_tag ); + cipher_plus_tag = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* prepare buffers for encryption */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa ) + { + ASSERT_ALLOC( cipher_plus_tag, cipher->len + tag->len ); + tmp_cipher = cipher_plus_tag; + tmp_tag = cipher_plus_tag + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + ASSERT_ALLOC( encrypt_buf, cipher->len ); + ASSERT_ALLOC( tag_buf, tag->len ); + tmp_cipher = encrypt_buf; + tmp_tag = tag_buf; + } + + /* + * Encrypt and check the result + */ + outlen = 0; + ret = mbedtls_cipher_auth_encrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + clear->x, clear->len, tmp_cipher, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len ); + if( cipher->len != 0 ) + TEST_ASSERT( memcmp( tmp_cipher, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( tmp_tag, tag->x, tag->len ) == 0 ); + } + } + +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +exit: + + mbedtls_cipher_free( &ctx ); + mbedtls_free( decrypt_buf ); + mbedtls_free( encrypt_buf ); + mbedtls_free( cipher_plus_tag ); +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + mbedtls_free( tag_buf ); +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_auth_crypt_tv_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_auth_crypt_tv( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, (char *) params[11], &data12, *( (int *) params[14] ) ); +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ +void test_test_vec_ecb( int cipher_id, int operation, data_t * key, + data_t * input, data_t * result, int finish_result + ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, input->x, + mbedtls_cipher_get_block_size( &ctx ), + output, &outlen ) ); + TEST_ASSERT( outlen == mbedtls_cipher_get_block_size( &ctx ) ); + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, + mbedtls_cipher_get_block_size( &ctx ) ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_test_vec_ecb_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_test_vec_ecb( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_test_vec_crypt( int cipher_id, int operation, data_t *key, + data_t *iv, data_t *input, data_t *result, + int finish_result, int use_psa ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; +#else + if( use_psa == 1 ) + { + PSA_ASSERT( psa_crypto_init( ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( &ctx, + mbedtls_cipher_info_from_type( cipher_id ), 0 ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + if( MBEDTLS_MODE_CBC == ctx.cipher_info->mode ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, MBEDTLS_PADDING_NONE ) ); + + TEST_ASSERT( finish_result == mbedtls_cipher_crypt( &ctx, iv->len ? iv->x : NULL, + iv->len, input->x, input->len, + output, &outlen ) ); + TEST_ASSERT( result->len == outlen ); + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, outlen ) ); + +exit: + mbedtls_cipher_free( &ctx ); +#if defined(MBEDTLS_USE_PSA_CRYPTO) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_test_vec_crypt_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_test_vec_crypt( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_set_padding( int cipher_id, int pad_mode, int ret ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + mbedtls_cipher_init( &ctx ); + + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + TEST_ASSERT( ret == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_set_padding_wrapper( void ** params ) +{ + + test_set_padding( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_check_padding( int pad_mode, data_t * input, int ret, int dlen_check + ) +{ + mbedtls_cipher_info_t cipher_info; + mbedtls_cipher_context_t ctx; + size_t dlen; + + /* build a fake context just for getting access to get_padding */ + mbedtls_cipher_init( &ctx ); + cipher_info.mode = MBEDTLS_MODE_CBC; + ctx.cipher_info = &cipher_info; + + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + + + TEST_ASSERT( ret == ctx.get_padding( input->x, input->len, &dlen ) ); + if( 0 == ret ) + TEST_ASSERT( dlen == (size_t) dlen_check ); +exit: + ; +} + +void test_check_padding_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_check_padding( *( (int *) params[0] ), &data1, *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#endif /* MBEDTLS_CIPHER_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_128_GCM; + } + break; + case 1: + { + *out_value = MBEDTLS_CIPHER_AES_128_GCM; + } + break; + case 2: + { + *out_value = MBEDTLS_CIPHER_ARIA_128_GCM; + } + break; + case 3: + { + *out_value = -1; + } + break; + case 4: + { + *out_value = MBEDTLS_ERR_CIPHER_AUTH_FAILED; + } + break; + case 5: + { + *out_value = MBEDTLS_CIPHER_AES_192_GCM; + } + break; + case 6: + { + *out_value = MBEDTLS_CIPHER_AES_256_GCM; + } + break; + case 7: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_192_GCM; + } + break; + case 8: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_256_GCM; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { +#if defined(MBEDTLS_CAMELLIA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_GCM_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_ARIA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_USE_PSA_CRYPTO) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_CIPHER_C) + test_mbedtls_cipher_list_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_CIPHER_C) + test_cipher_invalid_param_unconditional_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_cipher_invalid_param_conditional_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_AES_C) + test_cipher_special_behaviours_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_fail_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_CIPHER_C) + test_dec_empty_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_multipart_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_CIPHER_C) + test_decrypt_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_AUTH_CRYPT) + test_auth_crypt_tv_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_CIPHER_C) + test_test_vec_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_test_vec_crypt_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_set_padding_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_check_padding_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_cipher.gcm.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_cipher.gcm.datax b/third_party/mbedtls/test/test_suite_cipher.gcm.datax new file mode 100644 index 000000000..f5c8d038b --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.gcm.datax @@ -0,0 +1,4748 @@ +CAMELLIA GCM Decrypt empty buffer +depends_on:0:1 +6:exp:0:int:0:int:0 + +AES GCM Decrypt empty buffer +depends_on:2:1 +6:exp:1:int:0:int:0 + +Aria GCM Decrypt empty buffer +depends_on:3:1 +6:exp:2:int:0:int:0 + +AES 128 GCM Encrypt and decrypt 0 bytes +depends_on:2:1 +4:exp:1:char*:"AES-128-GCM":int:128:int:0:exp:3 + +AES 128 GCM Encrypt and decrypt 1 byte +depends_on:2:1 +4:exp:1:char*:"AES-128-GCM":int:128:int:1:exp:3 + +AES 128 GCM Encrypt and decrypt 2 bytes +depends_on:2:1 +4:exp:1:char*:"AES-128-GCM":int:128:int:2:exp:3 + +AES 128 GCM Encrypt and decrypt 7 bytes +depends_on:2:1 +4:exp:1:char*:"AES-128-GCM":int:128:int:7:exp:3 + +AES 128 GCM Encrypt and decrypt 8 bytes +depends_on:2:1 +4:exp:1:char*:"AES-128-GCM":int:128:int:8:exp:3 + +AES 128 GCM Encrypt and decrypt 9 bytes +depends_on:2:1 +4:exp:1:char*:"AES-128-GCM":int:128:int:9:exp:3 + +AES 128 GCM Encrypt and decrypt 15 bytes +depends_on:2:1 +4:exp:1:char*:"AES-128-GCM":int:128:int:15:exp:3 + +AES 128 GCM Encrypt and decrypt 16 bytes +depends_on:2:1 +4:exp:1:char*:"AES-128-GCM":int:128:int:16:exp:3 + +AES 128 GCM Encrypt and decrypt 17 bytes +depends_on:2:1 +4:exp:1:char*:"AES-128-GCM":int:128:int:17:exp:3 + +AES 128 GCM Encrypt and decrypt 31 bytes +depends_on:2:1 +4:exp:1:char*:"AES-128-GCM":int:128:int:31:exp:3 + +AES 128 GCM Encrypt and decrypt 32 bytes [#1] +depends_on:2:1 +4:exp:1:char*:"AES-128-GCM":int:128:int:32:exp:3 + +AES 128 GCM Encrypt and decrypt 32 bytes [#2] +depends_on:2:1 +4:exp:1:char*:"AES-128-GCM":int:128:int:33:exp:3 + +AES 128 GCM Encrypt and decrypt 47 bytes +depends_on:2:1 +4:exp:1:char*:"AES-128-GCM":int:128:int:47:exp:3 + +AES 128 GCM Encrypt and decrypt 48 bytes +depends_on:2:1 +4:exp:1:char*:"AES-128-GCM":int:128:int:48:exp:3 + +AES 128 GCM Encrypt and decrypt 49 bytes +depends_on:2:1 +4:exp:1:char*:"AES-128-GCM":int:128:int:49:exp:3 + +AES 128 GCM Encrypt and decrypt 0 bytes in multiple parts +depends_on:2:1 +7:exp:1:int:128:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +AES 128 GCM Encrypt and decrypt 1 bytes in multiple parts 1 +depends_on:2:1 +7:exp:1:int:128:int:1:int:0:exp:3:int:1:int:0:int:1:int:0 + +AES 128 GCM Encrypt and decrypt 1 bytes in multiple parts 2 +depends_on:2:1 +7:exp:1:int:128:int:0:int:1:exp:3:int:0:int:1:int:0:int:1 + +AES 128 GCM Encrypt and decrypt 16 bytes in multiple parts 1 +depends_on:2:1 +7:exp:1:int:128:int:16:int:0:exp:3:int:16:int:0:int:16:int:0 + +AES 128 GCM Encrypt and decrypt 16 bytes in multiple parts 2 +depends_on:2:1 +7:exp:1:int:128:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +AES 128 GCM Encrypt and decrypt 22 bytes in multiple parts 1 +depends_on:2:1 +7:exp:1:int:128:int:16:int:6:exp:3:int:16:int:6:int:16:int:6 + +AES 128 GCM Encrypt and decrypt 22 bytes in multiple parts 2 +depends_on:2:1 +7:exp:1:int:128:int:0:int:22:exp:3:int:0:int:22:int:0:int:22 + +AES 128 GCM Encrypt and decrypt 32 bytes in multiple parts 1 +depends_on:2:1 +7:exp:1:int:128:int:16:int:16:exp:3:int:16:int:16:int:16:int:16 + +AES 128 GCM Decrypt test vector #1 [#1] +depends_on:2:1 +8:exp:1:exp:3:hex:"d785dafea3e966731ef6fc6202262584":hex:"d91a46205ee94058b3b8403997592dd2":hex:"":hex:"":hex:"":hex:"3b92a17c1b9c3578a68cffea5a5b6245":int:0:int:0 + +AES 128 GCM Decrypt test vector #2 [#1] +depends_on:2:1 +8:exp:1:exp:3:hex:"9ab5c8ca905b5fe50461f4a68941144b":hex:"96dd3927a96e16123f2e9d6b367d303f":hex:"":hex:"":hex:"":hex:"6e0c53ef":int:0:int:0 + +AES 128 GCM Decrypt test vector #3 [#1] +depends_on:2:1 +8:exp:1:exp:3:hex:"b5fc7af605721a9cfe61c1ee6a4b3e22":hex:"6b757d4055823d1035d01077666037d6":hex:"":hex:"":hex:"":hex:"e8c09ddd":int:0:exp:4 + +AES 128 GCM Decrypt test vector #4 [#1] +depends_on:2:1 +8:exp:1:exp:3:hex:"03c0b4a6e508a8490db0d086a82c9db7":hex:"ac52f6c1a05030321fa39f87e89fdb5e":hex:"":hex:"":hex:"33316ca79d10a79f4fd038593e8eef09625089dc4e0ffe4bc1f2871554fa6666ab3e7fe7885edef694b410456f3ec0e513bb25f1b48d95e4820c5972c1aabb25c84c08566002dadc36df334c1ce86847964a122016d389ac873bca8c335a7a99bcef91e1b985ae5d488a2d7f78b4bf14e0c2dc715e814f4e24276057cf668172":hex:"756292d8b4653887edef51679b161812":int:0:exp:4 + +AES 128 GCM Decrypt test vector #5 [#1] +depends_on:2:1 +8:exp:1:exp:3:hex:"2bc73fba942ff105823b5dccf6befb1c":hex:"902c3e3b69b1ef8395d7281ff74cce38":hex:"":hex:"":hex:"4adec0b4ac00325a860044d9f9519daa4f7c163229a75819b0fd7d8e23319f030e61dfa8eadabff42ea27bc36bdb6cad249e801ca631b656836448b7172c11126bad2781e6a1aa4f62c4eda53409408b008c057e0b81215cc13ddabbb8f1915f4bbab854f8b00763a530ad5055d265778cd3080d0bd35b76a329bdd5b5a2d268":hex:"ebdd7c8e87fe733138a433543542d1":int:0:int:0 + +AES 128 GCM Decrypt test vector #6 [#1] +depends_on:2:1 +8:exp:1:exp:3:hex:"0dd358bc3f992f26e81e3a2f3aa2d517":hex:"d8c750bb443ee1a169dfe97cfe4d855b":hex:"87cc4fd75788c9d5cc83bae5d764dd249d178ab23224049795d4288b5ed9ea3f317068a39a7574b300c8544226e87b08e008fbe241d094545c211d56ac44437d41491a438272738968c8d371aa7787b5f606c8549a9d868d8a71380e9657d3c0337979feb01de5991fc1470dfc59eb02511efbbff3fcb479a862ba3844a25aaa":hex:"77949b29f085bb3abb71a5386003811233056d3296eb093370f7777dadd306d93d59dcb9754d3857cf2758091ba661f845ef0582f6ae0e134328106f0d5d16b541cd74fdc756dc7b53f4f8a194daeea9369ebb1630c01ccb307b848e9527da20a39898d748fd59206f0b79d0ed946a8958033a45bd9ae673518b32606748eb65":hex:"":hex:"a81d13973baa22a751833d7d3f94b3b1":int:0:int:0 + +AES 128 GCM Decrypt test vector #7 [#1] +depends_on:2:1 +8:exp:1:exp:3:hex:"9a433c612d7e1bdff881e4d63ba8b141":hex:"8b670cf31f470f79a6c0b79e73863ca1":hex:"ce10758332f423228b5e4ae31efda7677586934a1d8f05d9b7a0dc4e2010ec3eaacb71a527a5fff8e787d75ebd24ad163394c891b33477ed9e2a2d853c364cb1c5d0bc317fcaf4010817dbe5f1fd1037c701b291b3a66b164bc818bf5c00a4c210a1671faa574d74c7f3543f6c09aaf117e12e2eb3dae55edb1cc5b4086b617d":hex:"":hex:"":hex:"8526fd25daf890e79946a205b698f287":int:0:exp:4 + +AES 128 GCM Decrypt test vector #8 +depends_on:2:1 +8:exp:1:exp:3:hex:"69eedf3777e594c30e94e9c5e2bce467":hex:"a3330638a809ba358d6c098e4342b81e":hex:"5114e9983c96fecec3f7304ca42f52aa16cb7c6aadfb62ad537c93a3188835ca0703dad34c73cf96435b668b68a7a1d056931959316e8d3ab956bf64c4e07479c7767f9d488b0c0c351333ccf400b7e0be19a0fd173e3f2a1ae313f27e516952260fd2da9ab9daca478ebb93cd07d0b7503b32364d8e308d904d966c58f226bb":hex:"208e6321238bf5c6e2ef55a4b8f531cbbfb0d77374fe32df6dd663486cf79beeed39bb6910c3c78dd0cc30707a0a12b226b2d06024db25dcd8a4e620f009cafa5242121e864c7f3f4360aaf1e9d4e548d99615156f156008418c1c41ff2bbc007cecf8f209c73203e6df89b32871de637b3d6af2e277d146ae03f3404d387b77":hex:"df4e3f2b47cf0e8590228fcf9913fb8a5eb9751bba318fd2d57be68c7e788e04fabf303699b99f26313d1c4956105cd2817aad21b91c28f3b9251e9c0b354490fa5abfcea0065aa3cc9b96772eb8af06a1a9054bf12d3ae698dfb01a13f989f8b8a4bb61686cf3adf58f05873a24d403a62a092290c2481e4159588fea6b9a09":hex:"5de3068e1e20eed469265000077b1db9":int:0:int:0 + +AES 128 GCM Decrypt test vector #9 +depends_on:2:1 +8:exp:1:exp:3:hex:"45cc35311eedf0ba093bf901931a7036":hex:"fed5084de3c348f5a0adf4c2fd4e848a":hex:"5dc8d7525eaad035c19714ae1b1e538cb66a4089027245351e0ad9297410fb3a0c1155407c10a8bb95a9ca624a9c9925dac003ee78926c6e90ff4ccdba10e8a78bda1c4478162a0e302de5ff05fb0f94c89c3c7429fb94828bdcd97d21333c2ee72963ee6f056ce272b8bab007e653a42b01d1d2041ba627f169c8c0d32e6dae":hex:"":hex:"6e210914e4aed188d576f5ad7fc7e4cf7dd8d82f34ea3bcbdb7267cfd9045f806978dbff3460c4e8ff8c4edb6ad2edba405a8d915729d89aab2116b36a70b54f5920a97f5a571977e0329eda6c696749be940eabfc6d8b0bbd6fbdb87657b3a7695da9f5d3a7384257f20e0becd8512d3705cc246ee6ca1e610921cf92603d79":hex:"266a895fc21da5176b44b446d7d1921d":int:0:exp:4 + +AES 192 GCM Encrypt and decrypt 0 bytes +depends_on:2:1 +4:exp:5:char*:"AES-192-GCM":int:192:int:0:exp:3 + +AES 192 GCM Encrypt and decrypt 1 byte +depends_on:2:1 +4:exp:5:char*:"AES-192-GCM":int:192:int:1:exp:3 + +AES 192 GCM Encrypt and decrypt 2 bytes +depends_on:2:1 +4:exp:5:char*:"AES-192-GCM":int:192:int:2:exp:3 + +AES 192 GCM Encrypt and decrypt 7 bytes +depends_on:2:1 +4:exp:5:char*:"AES-192-GCM":int:192:int:7:exp:3 + +AES 192 GCM Encrypt and decrypt 8 bytes +depends_on:2:1 +4:exp:5:char*:"AES-192-GCM":int:192:int:8:exp:3 + +AES 192 GCM Encrypt and decrypt 9 bytes +depends_on:2:1 +4:exp:5:char*:"AES-192-GCM":int:192:int:9:exp:3 + +AES 192 GCM Encrypt and decrypt 15 bytes +depends_on:2:1 +4:exp:5:char*:"AES-192-GCM":int:192:int:15:exp:3 + +AES 192 GCM Encrypt and decrypt 16 bytes +depends_on:2:1 +4:exp:5:char*:"AES-192-GCM":int:192:int:16:exp:3 + +AES 192 GCM Encrypt and decrypt 17 bytes +depends_on:2:1 +4:exp:5:char*:"AES-192-GCM":int:192:int:17:exp:3 + +AES 192 GCM Encrypt and decrypt 31 bytes +depends_on:2:1 +4:exp:5:char*:"AES-192-GCM":int:192:int:31:exp:3 + +AES 192 GCM Encrypt and decrypt 32 bytes [#1] +depends_on:2:1 +4:exp:5:char*:"AES-192-GCM":int:192:int:32:exp:3 + +AES 192 GCM Encrypt and decrypt 32 bytes [#2] +depends_on:2:1 +4:exp:5:char*:"AES-192-GCM":int:192:int:33:exp:3 + +AES 192 GCM Encrypt and decrypt 47 bytes +depends_on:2:1 +4:exp:5:char*:"AES-192-GCM":int:192:int:47:exp:3 + +AES 192 GCM Encrypt and decrypt 48 bytes +depends_on:2:1 +4:exp:5:char*:"AES-192-GCM":int:192:int:48:exp:3 + +AES 192 GCM Encrypt and decrypt 49 bytes +depends_on:2:1 +4:exp:5:char*:"AES-192-GCM":int:192:int:49:exp:3 + +AES 192 GCM Encrypt and decrypt 0 bytes in multiple parts +depends_on:2:1 +7:exp:5:int:192:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +AES 192 GCM Encrypt and decrypt 1 bytes in multiple parts 1 +depends_on:2:1 +7:exp:5:int:192:int:1:int:0:exp:3:int:1:int:0:int:1:int:0 + +AES 192 GCM Encrypt and decrypt 1 bytes in multiple parts 2 +depends_on:2:1 +7:exp:5:int:192:int:0:int:1:exp:3:int:0:int:1:int:0:int:1 + +AES 192 GCM Encrypt and decrypt 16 bytes in multiple parts 1 +depends_on:2:1 +7:exp:5:int:192:int:16:int:0:exp:3:int:16:int:0:int:16:int:0 + +AES 192 GCM Encrypt and decrypt 16 bytes in multiple parts 2 +depends_on:2:1 +7:exp:5:int:192:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +AES 192 GCM Encrypt and decrypt 22 bytes in multiple parts 1 +depends_on:2:1 +7:exp:5:int:192:int:16:int:6:exp:3:int:16:int:6:int:16:int:6 + +AES 192 GCM Encrypt and decrypt 22 bytes in multiple parts 2 +depends_on:2:1 +7:exp:5:int:192:int:0:int:22:exp:3:int:0:int:22:int:0:int:22 + +AES 192 GCM Encrypt and decrypt 32 bytes in multiple parts 1 +depends_on:2:1 +7:exp:5:int:192:int:16:int:16:exp:3:int:16:int:16:int:16:int:16 + +AES 192 GCM Decrypt test vector #1 +depends_on:2:1 +8:exp:5:exp:3:hex:"806766a4d2b6507cc4113bc0e46eebe120eacd948c24dc7f":hex:"4f801c772395c4519ec830980c8ca5a4":hex:"":hex:"":hex:"":hex:"8fa16452b132bebc6aa521e92cb3b0ea":int:0:exp:4 + +AES 192 GCM Decrypt test vector #2 +depends_on:2:1 +8:exp:5:exp:3:hex:"be2f0f4ae4ab851b258ec5602628df261b6a69e309ff9043":hex:"646a91d83ae72b9b9e9fce64135cbf73":hex:"":hex:"":hex:"":hex:"169e717e2bae42e3eb61d0a1a29b":int:0:exp:4 + +AES 192 GCM Decrypt test vector #3 +depends_on:2:1 +8:exp:5:exp:3:hex:"1eb53aa548b41bfdc85c657ebdebdae0c7e525a6432bc012":hex:"37ffc64d4b2d9c82dd17d1ad3076d82b":hex:"":hex:"":hex:"":hex:"34b8e037084b3f2d":int:0:exp:4 + +AES 192 GCM Decrypt test vector #4 +depends_on:2:1 +8:exp:5:exp:3:hex:"c6a98102af3d875bcdebe594661d3a6b376970c02b11d019":hex:"bea8cd85a28a2c05bf7406b8eef1efcc":hex:"":hex:"":hex:"f2f80e2c042092cc7240b598ab30fad055bce85408aa0f8cefaf8a7204f0e2acb87c78f46a5867b1f1c19461cbf5ed5d2ca21c96a63fb1f42f10f394952e63520795c56df77d6a04cb5ad006ee865a47dc2349a814a630b3d4c4e0fd149f51e8fa846656ea569fd29a1ebafc061446eb80ec182f833f1f6d9083545abf52fa4c":hex:"04b80f25ae9d07f5fd8220263ac3f2f7":int:0:int:0 + +AES 192 GCM Decrypt test vector #5 +depends_on:2:1 +8:exp:5:exp:3:hex:"a249135c9f2f5a8b1af66442a4d4e101771a918ef8acee05":hex:"80b6e48fe4a3b08d40c1636b25dfd2c4":hex:"c62b39b937edbdc9b644321d5d284e62eaa4154010c7a3208c1ef4706fba90223da04b2f686a28b975eff17386598ba77e212855692f384782c1f3c00be011e466e145f6f8b65c458e41409e01a019b290773992e19334ffaca544e28fc9044a5e86bcd2fa5ad2e76f2be3f014d8c387456a8fcfded3ae4d1194d0e3e53a2031":hex:"b865f8dd64a6f51a500bcfc8cadbc9e9f5d54d2d27d815ecfe3d5731e1b230c587b46958c6187e41b52ff187a14d26aa41c5f9909a3b77859429232e5bd6c6dc22cf5590402476d033a32682e8ab8dc7ed0b089c5ab20ab9a8c5d6a3be9ea7aa56c9d3ab08de4a4a019abb447db448062f16a533d416951a8ff6f13ed5608f77":hex:"":hex:"951c1c89b6d95661630d739dd9120a73":int:0:int:0 + +AES 192 GCM Decrypt test vector #6 +depends_on:2:1 +8:exp:5:exp:3:hex:"23c201968def551817f20e49b09dbb5aae0033305bef68a0":hex:"bd2952d215aed5e915d863e7f7696b3e":hex:"77bc8af42d1b64ee39012df5fc33c554af32bfef6d9182804dcfe370dfc4b9d059bdbc55f6ba4eacb8e3a491d96a65360d790864ba60acf1a605f6b28a6591513ea3cfd768ff47aee242a8e9bdfac399b452231bfd59d81c9b91f8dc589ad751d8f9fdad01dd00631f0cb51cb0248332f24194b577e5571ceb5c037a6d0bcfe8":hex:"17d93c921009c6b0b3ecf243d08b701422983f2dcaec9c8d7604a2d5565ed96ce5cddcb183cd5882f8d61d3202c9015d207fed16a4c1195ba712428c727601135315fc504e80c253c3a2e4a5593fc6c4a206edce1fd7104e8a888385bbb396d3cdf1eb2b2aa4d0c9e45451e99550d9cfa05aafe6e7b5319c73c33fd6f98db3c5":hex:"23f35fac583897519b94998084ad6d77666e13595109e874625bc6ccc6d0c7816a62d64b02e670fa664e3bb52c276b1bafbeb44e5f9cc3ae028daf1d787344482f31fce5d2800020732b381a8b11c6837f428204b7ed2f4c4810067f2d4da99987b66e6525fc6b9217a8f6933f1681b7cfa857e102f616a7c84adc2f676e3a8f":hex:"bb9ba3a9ac7d63e67bd78d71dc3133b3":int:0:int:0 + +AES 256 GCM Encrypt and decrypt 0 bytes +depends_on:2:1 +4:exp:6:char*:"AES-256-GCM":int:256:int:0:exp:3 + +AES 256 GCM Encrypt and decrypt 1 byte +depends_on:2:1 +4:exp:6:char*:"AES-256-GCM":int:256:int:1:exp:3 + +AES 256 GCM Encrypt and decrypt 2 bytes +depends_on:2:1 +4:exp:6:char*:"AES-256-GCM":int:256:int:2:exp:3 + +AES 256 GCM Encrypt and decrypt 7 bytes +depends_on:2:1 +4:exp:6:char*:"AES-256-GCM":int:256:int:7:exp:3 + +AES 256 GCM Encrypt and decrypt 8 bytes +depends_on:2:1 +4:exp:6:char*:"AES-256-GCM":int:256:int:8:exp:3 + +AES 256 GCM Encrypt and decrypt 9 bytes +depends_on:2:1 +4:exp:6:char*:"AES-256-GCM":int:256:int:9:exp:3 + +AES 256 GCM Encrypt and decrypt 15 bytes +depends_on:2:1 +4:exp:6:char*:"AES-256-GCM":int:256:int:15:exp:3 + +AES 256 GCM Encrypt and decrypt 16 bytes +depends_on:2:1 +4:exp:6:char*:"AES-256-GCM":int:256:int:16:exp:3 + +AES 256 GCM Encrypt and decrypt 17 bytes +depends_on:2:1 +4:exp:6:char*:"AES-256-GCM":int:256:int:17:exp:3 + +AES 256 GCM Encrypt and decrypt 31 bytes +depends_on:2:1 +4:exp:6:char*:"AES-256-GCM":int:256:int:31:exp:3 + +AES 256 GCM Encrypt and decrypt 32 bytes [#1] +depends_on:2:1 +4:exp:6:char*:"AES-256-GCM":int:256:int:32:exp:3 + +AES 256 GCM Encrypt and decrypt 32 bytes [#2] +depends_on:2:1 +4:exp:6:char*:"AES-256-GCM":int:256:int:33:exp:3 + +AES 256 GCM Encrypt and decrypt 47 bytes +depends_on:2:1 +4:exp:6:char*:"AES-256-GCM":int:256:int:47:exp:3 + +AES 256 GCM Encrypt and decrypt 48 bytes +depends_on:2:1 +4:exp:6:char*:"AES-256-GCM":int:256:int:48:exp:3 + +AES 256 GCM Encrypt and decrypt 49 bytes +depends_on:2:1 +4:exp:6:char*:"AES-256-GCM":int:256:int:49:exp:3 + +AES 256 GCM Encrypt and decrypt 0 bytes in multiple parts +depends_on:2:1 +7:exp:6:int:256:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +AES 256 GCM Encrypt and decrypt 1 bytes in multiple parts 1 +depends_on:2:1 +7:exp:6:int:256:int:1:int:0:exp:3:int:1:int:0:int:1:int:0 + +AES 256 GCM Encrypt and decrypt 1 bytes in multiple parts 2 +depends_on:2:1 +7:exp:6:int:256:int:0:int:1:exp:3:int:0:int:1:int:0:int:1 + +AES 256 GCM Encrypt and decrypt 16 bytes in multiple parts 1 +depends_on:2:1 +7:exp:6:int:256:int:16:int:0:exp:3:int:16:int:0:int:16:int:0 + +AES 256 GCM Encrypt and decrypt 16 bytes in multiple parts 2 +depends_on:2:1 +7:exp:6:int:256:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +AES 256 GCM Encrypt and decrypt 22 bytes in multiple parts 1 +depends_on:2:1 +7:exp:6:int:256:int:16:int:6:exp:3:int:16:int:6:int:16:int:6 + +AES 256 GCM Encrypt and decrypt 22 bytes in multiple parts 2 +depends_on:2:1 +7:exp:6:int:256:int:0:int:22:exp:3:int:0:int:22:int:0:int:22 + +AES 256 GCM Encrypt and decrypt 32 bytes in multiple parts 1 +depends_on:2:1 +7:exp:6:int:256:int:16:int:16:exp:3:int:16:int:16:int:16:int:16 + +AES 128 GCM Decrypt test vector #0 +depends_on:2:1 +8:exp:6:exp:3:hex:"2c186654406b2b92c9639a7189d4ab5ab0b9bb87c43005027f3fa832fd3507b1":hex:"3a0324d63a70400490c92e7604a3ba97":hex:"":hex:"":hex:"":hex:"4c61cd2e28a13d78a4e87ea7374dd01a":int:0:exp:4 + +AES 128 GCM Decrypt test vector #1 [#2] +depends_on:2:1 +8:exp:6:exp:3:hex:"c8ae011795c9a60ad7660a31fe354fa6f7e9c2724d7a126436291680cd95c007":hex:"1bd9ea6186450f9cd253ccfed2812b1c":hex:"":hex:"":hex:"":hex:"35214bbc510430e3":int:0:int:0 + +AES 128 GCM Decrypt test vector #2 [#2] +depends_on:2:1 +8:exp:6:exp:3:hex:"449d39f863e4909984b37f2e5c09ea4d4b3e9fac67bd57c299e4e1d1f084aaa3":hex:"d8e9118f331bb5a359f0aa8882861b72":hex:"":hex:"":hex:"4ddcae0bc24d622e12bdeaac73e8d1ab7957af051d27dfaafce53aeed4cdd3f989ea25989a2f41cfb3c38dbd841c5560b0b5ab1861b1fbcd236865d13da55b50219462e021f8a21848a64a85326031fcec8fe47a6ef4a435dd2b2fff637644ffcf3914ef2dfa5dd556421bfd297be150b31db039f0f2cc422b282e659e70cceb":hex:"c595b9d99414891228c9fa5edb5fcce3":int:0:int:0 + +AES 128 GCM Decrypt test vector #3 [#2] +depends_on:2:1 +8:exp:6:exp:3:hex:"1a1bb9122e762ecd7ff861a1d65e52607d98e7ae5bd1c3a944e443710f3b0599":hex:"32f99ea4cbf52c2701c2252e5e6c863d":hex:"":hex:"":hex:"91b7a70c3a06c1f7f2ea584acb5dd76177ba07323c94f2e8f7cbe93fc0bb7c389c3c88e16aa53174f0fc373bc778a6ccf91bf61b6e92c2969d3441eb17a0a835d30dcf882472a6d3cb036533b04d79f05ebfaadf221ae1c14af3f02fa41867acfdfa35f81e8a9d11d42b9a63288c759063c0c3040c3e6ee69cf7c75f9c33fea1":hex:"a8e29e08623a3efdbbe8b111de30a4":int:0:exp:4 + +AES 128 GCM Decrypt test vector #4 [#2] +depends_on:2:1 +8:exp:6:exp:3:hex:"f10965a66255f0c3515af497ccbb257a09f22ec2d57c5edae322a3e6d2d188ef":hex:"c571ce0e911de5d883dc4a0787483235":hex:"91598690edf2de8b27f9bc7461a84e80811cee544f0542923898328cf157590251f0342cb81d359b5dccc5391a12320d1444c26f24178977dd6705c2b365dc1ece0152c42e2f0ee3162cf886ef5529f4f16a77f3bdd2aeccd405b59addf098521d0d38cc25f1991e11be7ecf24caedb48a2a286d2e560a38fa9001c5a228c4d1":hex:"2867996e389e09ec0da94d42e77b1e436b50065b09ca4adf1cd03240444ee699dbb7b3fc081a1869ca607d77d5ff9754fc3c997ff0a4ee17543a2ba77886b88a7128bcc51d3450df58ff3a26671b02c1d213df6adb6f7e853080eb46b504517cbaea162710a9bbc2da8b552eb6b0e0cb98e44fcab0a157312be67974678d143e":hex:"":hex:"6d9d3a5dbc8dce385f092fff14bfffda":int:0:int:0 + +AES 128 GCM Decrypt test vector #5 [#2] +depends_on:2:1 +8:exp:6:exp:3:hex:"4103b1ddff87a508a219c808a04ad4750668688f4c2ee75b92d28d70b98a2c94":hex:"5cea906737518c2cb901016e30206276":hex:"a00a196193ff07006b7df524824bd0971d63f447a3a7bb1b75c1e2d11789482c115cff677b54948d36dc4de34200bce97be0101d88cee39b177857dd5da3cb0d2f9d6e1150f72a3bd655e0bace1d25a657ba9a7f8dff082b4460432075afb20173da22b49beeb6a030d72ba07869ff4389fc1c28d87018d7c1a9829c21932197":hex:"":hex:"":hex:"3a3a771dd5f31c977e154ef5c73a":int:0:exp:4 + +AES 128 GCM Decrypt test vector #6 [#2] +depends_on:2:1 +8:exp:6:exp:3:hex:"df867d1dd8a287821a54479cab6f88636d2aca30e1bf01a5dffc735e17590356":hex:"35019826c51dd1ef07ff915d9ac4ea96":hex:"6517272cac85d7f38902bcb4b96a0c59c4bdc46bfefa6ebacd7f2fb1629b87ca91de2ffefc42ce3cfd34dcbf01b3f7cadcea3f99e6addf35d36c51f2ceb1f85c1f56a04ec9c9fff60cd7fc238674992183ea3de72ef778561b906202b7b83fe6562a0bca9c1e0a18638e8685b998b4192f5120435809ad6e93a0422d00725262":hex:"723be39bc13adbc48c861b07753f64fac1ae28fc8933acba888b6538721df0a8b91c040a26522fe0dbb7335d8f63d209e89f7cde23afa9ca3c584b336d63a91e07fdd8808b14c3214c96a202e665bbaaa34248ff30348f3d79c9f16e66ad6c5903305acd887a89b6244eb7c2d96e18b13a686de935bf3821444ee20f48678be5":hex:"0375ed93f287eefe414ab2968844bd10148860c528dbf571a77aa74f98cc669a7fc317adc9f7cf2d80dda29b19db635b30a044399f3665b6176ed669146d28f5ada03b3d32d53fe46575a8afcd37f20386d9e36f7e090b4fefadfab7f008e02f1b5022c0eeb81d03443a276eae48c038ed173631687d2450b913b02c97243edb":hex:"e49beb083a9b008ae97a17e3825692f0":int:0:int:0 + +AES 128 GCM Decrypt test vector #7 [#2] +depends_on:2:1 +8:exp:6:exp:3:hex:"886c77b80f5f3a21c01932685a540b23629f6d41d5574fc527227ed0bdf2e21b":hex:"5ec506edb1890a5a63b464490450d419":hex:"53a17d7b69f607f08676d6f6dd4e8db08e01333a8355d8c87616e84cdf10ef5b041fc6ddc3f6a245c0f534c2b167064af82f45e4702a5e8dede59579fdecf6713353392433950c9b97c38d9ee515ac97d0970ccf03981954540088567a30941bb2cca08cbed680500f8342faa7aebbc6c143e2ea57ba6b4ac1fd975dcc5d0871":hex:"79ee27adfa9698a97d217c5010ec807806feda37db811e398c3b82abf698aece08561fffc6c601d2691738e279eeb57e5804e1405a9913830e3ba0d7b979213ef40d733a19497d4bb1b8b2c609a8f904e29771fa230c39a48ebb8c3376f07c8013fff6e34f10fe53988a6ec87a9296c0a7cfba769adefe599ec6671012965973":hex:"05b8d820c9f439d7aeae5c7da0ee25fb0dad47cc3e6f3a47e8b984e856201546975f8214531fc3c2e504d2ac10fa49cb948596b9a8fab01b95c49d6f04d1589f93b77b899e803dd20e1f00a51c0b5953e85be639109b14b100e35ca26d84ea629964b0db8260dfa5a150a66261bf37e79de2ec49e9f1b082a7c58ecd3d39b6c9":hex:"ffdf56e1c1a7252b88422787536484":int:0:int:0 + +CAMELLIA 128 GCM Encrypt and decrypt 0 bytes +depends_on:0:1 +4:exp:0:char*:"CAMELLIA-128-GCM":int:128:int:0:exp:3 + +CAMELLIA 128 GCM Encrypt and decrypt 1 byte +depends_on:0:1 +4:exp:0:char*:"CAMELLIA-128-GCM":int:128:int:1:exp:3 + +CAMELLIA 128 GCM Encrypt and decrypt 2 bytes +depends_on:0:1 +4:exp:0:char*:"CAMELLIA-128-GCM":int:128:int:2:exp:3 + +CAMELLIA 128 GCM Encrypt and decrypt 7 bytes +depends_on:0:1 +4:exp:0:char*:"CAMELLIA-128-GCM":int:128:int:7:exp:3 + +CAMELLIA 128 GCM Encrypt and decrypt 8 bytes +depends_on:0:1 +4:exp:0:char*:"CAMELLIA-128-GCM":int:128:int:8:exp:3 + +CAMELLIA 128 GCM Encrypt and decrypt 9 bytes +depends_on:0:1 +4:exp:0:char*:"CAMELLIA-128-GCM":int:128:int:9:exp:3 + +CAMELLIA 128 GCM Encrypt and decrypt 15 bytes +depends_on:0:1 +4:exp:0:char*:"CAMELLIA-128-GCM":int:128:int:15:exp:3 + +CAMELLIA 128 GCM Encrypt and decrypt 16 bytes +depends_on:0:1 +4:exp:0:char*:"CAMELLIA-128-GCM":int:128:int:16:exp:3 + +CAMELLIA 128 GCM Encrypt and decrypt 17 bytes +depends_on:0:1 +4:exp:0:char*:"CAMELLIA-128-GCM":int:128:int:17:exp:3 + +CAMELLIA 128 GCM Encrypt and decrypt 31 bytes +depends_on:0:1 +4:exp:0:char*:"CAMELLIA-128-GCM":int:128:int:31:exp:3 + +CAMELLIA 128 GCM Encrypt and decrypt 32 bytes [#1] +depends_on:0:1 +4:exp:0:char*:"CAMELLIA-128-GCM":int:128:int:32:exp:3 + +CAMELLIA 128 GCM Encrypt and decrypt 32 bytes [#2] +depends_on:0:1 +4:exp:0:char*:"CAMELLIA-128-GCM":int:128:int:33:exp:3 + +CAMELLIA 128 GCM Encrypt and decrypt 47 bytes +depends_on:0:1 +4:exp:0:char*:"CAMELLIA-128-GCM":int:128:int:47:exp:3 + +CAMELLIA 128 GCM Encrypt and decrypt 48 bytes +depends_on:0:1 +4:exp:0:char*:"CAMELLIA-128-GCM":int:128:int:48:exp:3 + +CAMELLIA 128 GCM Encrypt and decrypt 49 bytes +depends_on:0:1 +4:exp:0:char*:"CAMELLIA-128-GCM":int:128:int:49:exp:3 + +CAMELLIA 128 GCM Encrypt and decrypt 0 bytes in multiple parts +depends_on:0:1 +7:exp:0:int:128:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +CAMELLIA 128 GCM Encrypt and decrypt 1 bytes in multiple parts 1 +depends_on:0:1 +7:exp:0:int:128:int:1:int:0:exp:3:int:1:int:0:int:1:int:0 + +CAMELLIA 128 GCM Encrypt and decrypt 1 bytes in multiple parts 2 +depends_on:0:1 +7:exp:0:int:128:int:0:int:1:exp:3:int:0:int:1:int:0:int:1 + +CAMELLIA 128 GCM Encrypt and decrypt 16 bytes in multiple parts 1 +depends_on:0:1 +7:exp:0:int:128:int:16:int:0:exp:3:int:16:int:0:int:16:int:0 + +CAMELLIA 128 GCM Encrypt and decrypt 16 bytes in multiple parts 2 +depends_on:0:1 +7:exp:0:int:128:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +CAMELLIA 128 GCM Encrypt and decrypt 22 bytes in multiple parts 1 +depends_on:0:1 +7:exp:0:int:128:int:16:int:6:exp:3:int:16:int:6:int:16:int:6 + +CAMELLIA 128 GCM Encrypt and decrypt 22 bytes in multiple parts 2 +depends_on:0:1 +7:exp:0:int:128:int:0:int:22:exp:3:int:0:int:22:int:0:int:22 + +CAMELLIA 128 GCM Encrypt and decrypt 32 bytes in multiple parts 1 +depends_on:0:1 +7:exp:0:int:128:int:16:int:16:exp:3:int:16:int:16:int:16:int:16 + +CAMELLIA 128 GCM Decrypt test vector #1 +depends_on:0:1 +8:exp:0:exp:3:hex:"00000000000000000000000000000000":hex:"000000000000000000000000":hex:"":hex:"":hex:"":hex:"f5574acc3148dfcb9015200631024df8":int:0:exp:4 + +CAMELLIA 128 GCM Decrypt test vector #2 +depends_on:0:1 +8:exp:0:exp:3:hex:"00000000000000000000000000000000":hex:"000000000000000000000000":hex:"defe3e0b5c54c94b4f2a0f5a46f6210d":hex:"00000000000000000000000000000000":hex:"":hex:"f672b94d192266c7c8c8dbb427cc989a":int:0:int:0 + +CAMELLIA 128 GCM Decrypt test vector #3 +depends_on:0:1 +8:exp:0:exp:3:hex:"feffe9928665731c6d6a8f9467308308":hex:"cafebabefacedbaddecaf889":hex:"d0d94a13b632f337a0cc9955b94fa020c815f903aab12f1efaf2fe9d90f729a6cccbfa986ef2ff2c33de418d9a2529091cf18fe652c1cfde13f8260614bab815":hex:"":hex:"":hex:"86e318012dd8329dc9dae6a170f61b24":int:0:exp:4 + +CAMELLIA 128 GCM Decrypt test vector #4 +depends_on:0:1 +8:exp:0:exp:3:hex:"feffe9928665731c6d6a8f9467308308":hex:"cafebabefacedbaddecaf888":hex:"d0d94a13b632f337a0cc9955b94fa020c815f903aab12f1efaf2fe9d90f729a6cccbfa986ef2ff2c33de418d9a2529091cf18fe652c1cfde13f82606":hex:"d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39":hex:"feedfacedeadbeeffeedfacedeadbeefabaddad2":hex:"9f458869431576ea6a095456ec6b8101":int:0:int:0 + +CAMELLIA 128 GCM Decrypt test vector #5 +depends_on:0:1 +8:exp:0:exp:3:hex:"feffe9928665731c6d6a8f9467308308":hex:"cafebabefacedbad":hex:"28fd7434d5cd424a5353818fc21a982460d20cf632eb1e6c4fbfca17d5abcf6a52111086162fe9570e7774c7a912aca3dfa10067ddaad40688645bdd":hex:"":hex:"feedfadedeadbeeffeedfacedeadbeefabaddad2":hex:"e86f8f2e730c49d536f00fb5225d28b1":int:0:exp:4 + +CAMELLIA 192 GCM Encrypt and decrypt 0 bytes +depends_on:0:1 +4:exp:7:char*:"CAMELLIA-192-GCM":int:192:int:0:exp:3 + +CAMELLIA 192 GCM Encrypt and decrypt 1 byte +depends_on:0:1 +4:exp:7:char*:"CAMELLIA-192-GCM":int:192:int:1:exp:3 + +CAMELLIA 192 GCM Encrypt and decrypt 2 bytes +depends_on:0:1 +4:exp:7:char*:"CAMELLIA-192-GCM":int:192:int:2:exp:3 + +CAMELLIA 192 GCM Encrypt and decrypt 7 bytes +depends_on:0:1 +4:exp:7:char*:"CAMELLIA-192-GCM":int:192:int:7:exp:3 + +CAMELLIA 192 GCM Encrypt and decrypt 8 bytes +depends_on:0:1 +4:exp:7:char*:"CAMELLIA-192-GCM":int:192:int:8:exp:3 + +CAMELLIA 192 GCM Encrypt and decrypt 9 bytes +depends_on:0:1 +4:exp:7:char*:"CAMELLIA-192-GCM":int:192:int:9:exp:3 + +CAMELLIA 192 GCM Encrypt and decrypt 15 bytes +depends_on:0:1 +4:exp:7:char*:"CAMELLIA-192-GCM":int:192:int:15:exp:3 + +CAMELLIA 192 GCM Encrypt and decrypt 16 bytes +depends_on:0:1 +4:exp:7:char*:"CAMELLIA-192-GCM":int:192:int:16:exp:3 + +CAMELLIA 192 GCM Encrypt and decrypt 17 bytes +depends_on:0:1 +4:exp:7:char*:"CAMELLIA-192-GCM":int:192:int:17:exp:3 + +CAMELLIA 192 GCM Encrypt and decrypt 31 bytes +depends_on:0:1 +4:exp:7:char*:"CAMELLIA-192-GCM":int:192:int:31:exp:3 + +CAMELLIA 192 GCM Encrypt and decrypt 32 bytes [#1] +depends_on:0:1 +4:exp:7:char*:"CAMELLIA-192-GCM":int:192:int:32:exp:3 + +CAMELLIA 192 GCM Encrypt and decrypt 32 bytes [#2] +depends_on:0:1 +4:exp:7:char*:"CAMELLIA-192-GCM":int:192:int:33:exp:3 + +CAMELLIA 192 GCM Encrypt and decrypt 47 bytes +depends_on:0:1 +4:exp:7:char*:"CAMELLIA-192-GCM":int:192:int:47:exp:3 + +CAMELLIA 192 GCM Encrypt and decrypt 48 bytes +depends_on:0:1 +4:exp:7:char*:"CAMELLIA-192-GCM":int:192:int:48:exp:3 + +CAMELLIA 192 GCM Encrypt and decrypt 49 bytes +depends_on:0:1 +4:exp:7:char*:"CAMELLIA-192-GCM":int:192:int:49:exp:3 + +CAMELLIA 192 GCM Encrypt and decrypt 0 bytes in multiple parts +depends_on:0:1 +7:exp:7:int:192:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +CAMELLIA 192 GCM Encrypt and decrypt 1 bytes in multiple parts 1 +depends_on:0:1 +7:exp:7:int:192:int:1:int:0:exp:3:int:1:int:0:int:1:int:0 + +CAMELLIA 192 GCM Encrypt and decrypt 1 bytes in multiple parts 2 +depends_on:0:1 +7:exp:7:int:192:int:0:int:1:exp:3:int:0:int:1:int:0:int:1 + +CAMELLIA 192 GCM Encrypt and decrypt 16 bytes in multiple parts 1 +depends_on:0:1 +7:exp:7:int:192:int:16:int:0:exp:3:int:16:int:0:int:16:int:0 + +CAMELLIA 192 GCM Encrypt and decrypt 16 bytes in multiple parts 2 +depends_on:0:1 +7:exp:7:int:192:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +CAMELLIA 192 GCM Encrypt and decrypt 22 bytes in multiple parts 1 +depends_on:0:1 +7:exp:7:int:192:int:16:int:6:exp:3:int:16:int:6:int:16:int:6 + +CAMELLIA 192 GCM Encrypt and decrypt 22 bytes in multiple parts 2 +depends_on:0:1 +7:exp:7:int:192:int:0:int:22:exp:3:int:0:int:22:int:0:int:22 + +CAMELLIA 192 GCM Encrypt and decrypt 32 bytes in multiple parts 1 +depends_on:0:1 +7:exp:7:int:192:int:16:int:16:exp:3:int:16:int:16:int:16:int:16 + +CAMELLIA 192 GCM Decrypt test vector #1 +depends_on:0:1 +8:exp:7:exp:3:hex:"000000000000000000000000000000000000000000000000":hex:"000000000000000000000000":hex:"":hex:"":hex:"":hex:"ba9ae89fddce4b51131e17c4d65ce587":int:0:int:0 + +CAMELLIA 192 GCM Decrypt test vector #2 +depends_on:0:1 +8:exp:7:exp:3:hex:"000000000000000000000000000000000000000000000000":hex:"000000000000000000000000":hex:"8f9c0aa2549714c88bb2665e8af86d42":hex:"":hex:"":hex:"783cff5c5aca7197320658a74279ab37":int:0:exp:4 + +CAMELLIA 192 GCM Decrypt test vector #3 +depends_on:0:1 +8:exp:7:exp:3:hex:"feffe9928665731c6d6a8f9467308308feffe9928665731c":hex:"cafebabefacedbaddecaf888":hex:"0f009e88410d84ad93c90d55efbe20ffa855492f4dfd0fb485c4f02f536feffbb4d967729e5c67f1de0750255cc500716ba483eb3b0a2bf607af28f6a60bb2e9":hex:"d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255":hex:"":hex:"8d645a0b0e48d3c3b60a014157cb49b4":int:0:int:0 + +CAMELLIA 192 GCM Decrypt test vector #4 +depends_on:0:1 +8:exp:7:exp:3:hex:"feffe9928665731c6d6a8f9467308308feffe9928665731c":hex:"cafebabefacedbaddecaf888":hex:"0f009e88410d84ad93c90d55efbe20ffa855492f4dfd0fb485c4f02f536feffbb4d967729e5c67f1de0750255cc500716ba483eb3b0a2bf607af28f6":hex:"":hex:"feedfacedeadbeeffeedfacedeadbeefabaddad2":hex:"11b15bb5ab6fac0c422014e91eacbf2b":int:0:exp:4 + +CAMELLIA 192 GCM Decrypt test vector #5 +depends_on:0:1 +8:exp:7:exp:3:hex:"feffe9928665731c6d6a8f9467308308feffe9928665731c":hex:"cafebabefacedbad":hex:"678b3dcb270faa206dc5f6fbb5014996e86d6f3e35cdcdfeb03b37b9b06ff4ff2682248823bd3c84124dc76af7bde3dd440c228b5efbc795dd80dfb6":hex:"d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39":hex:"feedfacedeadbeeffeedfacedeadbeefabaddad2":hex:"f876143d933214a5035ff0bb96ff650b":int:0:int:0 + +CAMELLIA 256 GCM Encrypt and decrypt 0 bytes +depends_on:0:1 +4:exp:8:char*:"CAMELLIA-256-GCM":int:256:int:0:exp:3 + +CAMELLIA 256 GCM Encrypt and decrypt 1 byte +depends_on:0:1 +4:exp:8:char*:"CAMELLIA-256-GCM":int:256:int:1:exp:3 + +CAMELLIA 256 GCM Encrypt and decrypt 2 bytes +depends_on:0:1 +4:exp:8:char*:"CAMELLIA-256-GCM":int:256:int:2:exp:3 + +CAMELLIA 256 GCM Encrypt and decrypt 7 bytes +depends_on:0:1 +4:exp:8:char*:"CAMELLIA-256-GCM":int:256:int:7:exp:3 + +CAMELLIA 256 GCM Encrypt and decrypt 8 bytes +depends_on:0:1 +4:exp:8:char*:"CAMELLIA-256-GCM":int:256:int:8:exp:3 + +CAMELLIA 256 GCM Encrypt and decrypt 9 bytes +depends_on:0:1 +4:exp:8:char*:"CAMELLIA-256-GCM":int:256:int:9:exp:3 + +CAMELLIA 256 GCM Encrypt and decrypt 15 bytes +depends_on:0:1 +4:exp:8:char*:"CAMELLIA-256-GCM":int:256:int:15:exp:3 + +CAMELLIA 256 GCM Encrypt and decrypt 16 bytes +depends_on:0:1 +4:exp:8:char*:"CAMELLIA-256-GCM":int:256:int:16:exp:3 + +CAMELLIA 256 GCM Encrypt and decrypt 17 bytes +depends_on:0:1 +4:exp:8:char*:"CAMELLIA-256-GCM":int:256:int:17:exp:3 + +CAMELLIA 256 GCM Encrypt and decrypt 31 bytes +depends_on:0:1 +4:exp:8:char*:"CAMELLIA-256-GCM":int:256:int:31:exp:3 + +CAMELLIA 256 GCM Encrypt and decrypt 32 bytes [#1] +depends_on:0:1 +4:exp:8:char*:"CAMELLIA-256-GCM":int:256:int:32:exp:3 + +CAMELLIA 256 GCM Encrypt and decrypt 32 bytes [#2] +depends_on:0:1 +4:exp:8:char*:"CAMELLIA-256-GCM":int:256:int:33:exp:3 + +CAMELLIA 256 GCM Encrypt and decrypt 47 bytes +depends_on:0:1 +4:exp:8:char*:"CAMELLIA-256-GCM":int:256:int:47:exp:3 + +CAMELLIA 256 GCM Encrypt and decrypt 48 bytes +depends_on:0:1 +4:exp:8:char*:"CAMELLIA-256-GCM":int:256:int:48:exp:3 + +CAMELLIA 256 GCM Encrypt and decrypt 49 bytes +depends_on:0:1 +4:exp:8:char*:"CAMELLIA-256-GCM":int:256:int:49:exp:3 + +CAMELLIA 256 GCM Encrypt and decrypt 0 bytes in multiple parts +depends_on:0:1 +7:exp:8:int:256:int:0:int:0:exp:3:int:0:int:0:int:0:int:0 + +CAMELLIA 256 GCM Encrypt and decrypt 1 bytes in multiple parts 1 +depends_on:0:1 +7:exp:8:int:256:int:1:int:0:exp:3:int:1:int:0:int:1:int:0 + +CAMELLIA 256 GCM Encrypt and decrypt 1 bytes in multiple parts 2 +depends_on:0:1 +7:exp:8:int:256:int:0:int:1:exp:3:int:0:int:1:int:0:int:1 + +CAMELLIA 256 GCM Encrypt and decrypt 16 bytes in multiple parts 1 +depends_on:0:1 +7:exp:8:int:256:int:16:int:0:exp:3:int:16:int:0:int:16:int:0 + +CAMELLIA 256 GCM Encrypt and decrypt 16 bytes in multiple parts 2 +depends_on:0:1 +7:exp:8:int:256:int:0:int:16:exp:3:int:0:int:16:int:0:int:16 + +CAMELLIA 256 GCM Encrypt and decrypt 22 bytes in multiple parts 1 +depends_on:0:1 +7:exp:8:int:256:int:16:int:6:exp:3:int:16:int:6:int:16:int:6 + +CAMELLIA 256 GCM Encrypt and decrypt 22 bytes in multiple parts 2 +depends_on:0:1 +7:exp:8:int:256:int:0:int:22:exp:3:int:0:int:22:int:0:int:22 + +CAMELLIA 256 GCM Encrypt and decrypt 32 bytes in multiple parts 1 +depends_on:0:1 +7:exp:8:int:256:int:16:int:16:exp:3:int:16:int:16:int:16:int:16 + +CAMELLIA 256 GCM Decrypt test vector #1 +depends_on:0:1 +8:exp:8:exp:3:hex:"0000000000000000000000000000000000000000000000000000000000000001":hex:"000000000000000000000000":hex:"":hex:"":hex:"":hex:"9cdb269b5d293bc5db9c55b057d9b591":int:0:exp:4 + +CAMELLIA 256 GCM Decrypt test vector #2 +depends_on:0:1 +8:exp:8:exp:3:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"000000000000000000000000":hex:"3d4b2cde666761ba5dfb305178e667fb":hex:"00000000000000000000000000000000":hex:"":hex:"284b63bb143c40ce100fb4dea6bb617b":int:0:int:0 + +CAMELLIA 256 GCM Decrypt test vector #3 +depends_on:0:1 +8:exp:8:exp:3:hex:"feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308":hex:"cafebabefacedbaddecaf888":hex:"ad142c11579dd95e41f3c1f324dabc255864d920f1b65759d8f560d4949d447758dfdcf77aa9f62581c7ff572a037f810cb1a9c4b3ca6ed638179b776549e092":hex:"":hex:"":hex:"c912686270a2b9966415fca3be75c468":int:0:exp:4 + +CAMELLIA 256 GCM Decrypt test vector #4 +depends_on:0:1 +8:exp:8:exp:3:hex:"feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308":hex:"cafebabefacedbaddecaf888":hex:"ad142c11579dd95e41f3c1f324dabc255864d920f1b65759d8f560d4948d447758dfdcf77aa9f62581c7ff572a037f810cb1a9c4b3ca6ed638179b77":hex:"d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39":hex:"feedfacedeadbeeffeedfacedeadbeefabaddad2":hex:"4e4b178d8fe26fdc95e2e7246dd94bec":int:0:int:0 + +CAMELLIA 256 GCM Decrypt test vector #5 +depends_on:0:1 +8:exp:8:exp:3:hex:"feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308":hex:"cafebabefacedbad":hex:"6ca95fbb7d16577a9ef2fded94dc85b5d40c629f6bef2c649888e3cbb0ededc7810c04b12c2983bbbbc482e16e45c9215ae12c15c55f2f4809d06652":hex:"":hex:"feedfacedeadbeeffeedfacedeadbeefabaddad2":hex:"e6472b8ebd331bfcc7c0fa63ce094462":int:0:exp:4 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"d785dafea3e966731ef6fc6202262584":hex:"d91a46205ee94058b3b8403997592dd2":hex:"":hex:"":hex:"3b92a17c1b9c3578a68cffea5a5b6245":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"aec963833b9098de1ababc853ab74d96":hex:"4e0ffd93beffd732c6f7d6ad606a2d24":hex:"":hex:"":hex:"e9fcedc176dfe587dc61b2011010cdf1":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"c4fb9e3393681da9cec5ec96f87c5c31":hex:"845e910bc055d895879f62101d08b4c7":hex:"":hex:"":hex:"99fb783c497416e4b6e2a5de7c782057":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"2a930f2e09beceacd9919cb76f2ac8d3":hex:"340d9af44f6370eff534c653033a785a":hex:"":hex:"":hex:"0c1e5e9c8fe5edfd11f114f3503d63":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"fe71177e02073b1c407b5724e2263a5e":hex:"83c23d20d2a9d4b8f92da96587c96b18":hex:"":hex:"":hex:"43b2ca795420f35f6cb39f5dfa47a2":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"b02392fd7f228888c281e59d1eaa15fb":hex:"2726344ba8912c737e195424e1e6679e":hex:"":hex:"":hex:"a10b601ca8053536a2af2cc255d2b6":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"21895cbafc16b7b8bf5867e88e0853d4":hex:"f987ce1005d9bbd31d2452fb80957753":hex:"":hex:"":hex:"952a7e265830d58a6778d68b9450":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"9bb9742bf47f68caf64963d7c10a97b0":hex:"34a85669de64e1cd44731905fddbcbc5":hex:"":hex:"":hex:"e9b6be928aa77b2de28b480ae74c":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"4e9708e4b37e2e1b5feaf4f5ab54e2a6":hex:"1c53a9fdd23919b036d99560619a9939":hex:"":hex:"":hex:"6611b50d6fbca83047f9f5fe1768":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"82fede79db25f00be96eb050a22cea87":hex:"e9c50b517ab26c89b83c1f0cac50162c":hex:"":hex:"":hex:"d0c0ce9db60b77b0e31d05e048":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"1d98566fca5201abb12914311a8bd532":hex:"590aef4b46a9023405d075edab7e6849":hex:"":hex:"":hex:"a1cfd1a27b341f49eda2ca8305":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"3038771820c2e1319f02a74b8a7a0c08":hex:"e556d9f07fb69d7e9a644261c80fac92":hex:"":hex:"":hex:"4d2f005d662b6a8787f231c5e1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"0fb7eef50de598d7d8b508d019a30d5a":hex:"a2a2617040116c2c7e4236d2d8278213":hex:"":hex:"":hex:"68413c58df7bb5f067197ca0":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"8cc58b609204215c8ab4908286e56e5c":hex:"fb83ea637279332677b5f68081173e99":hex:"":hex:"":hex:"a2a9160d82739a55d8cd419f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"81a5fd184742a478432963f6477e8f92":hex:"da297cbb53b11d7c379e0566299b4d5a":hex:"":hex:"":hex:"200bee49466fdda2f21f0062":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"f604ac66d626959e595cbb7b4128e096":hex:"269d2a49d533c6bb38008711f38e0b39":hex:"":hex:"":hex:"468200fa4683e8be":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"2e308ba7903e925f768c1d00ff3eb623":hex:"335acd2aa48a47a37cfe21e491f1b141":hex:"":hex:"":hex:"4872bfd5e2ff55f6":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"1304e2a5a3520454a5109df61a67da7a":hex:"dbe8b452acf4fa1444c3668e9ee72d26":hex:"":hex:"":hex:"83a0d3440200ca95":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"ecf1ec2c9a8f2e9cc799f9b9fddb3232":hex:"ddf0b695aef5df2b594fcaae72b7e41c":hex:"":hex:"":hex:"2819aedf":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"9ab5c8ca905b5fe50461f4a68941144b":hex:"96dd3927a96e16123f2e9d6b367d303f":hex:"":hex:"":hex:"6e0c53ef":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"b5fc7af605721a9cfe61c1ee6a4b3e22":hex:"6b757d4055823d1035d01077666037d6":hex:"":hex:"":hex:"e8c09ddd":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"03c0b4a6e508a8490db0d086a82c9db7":hex:"ac52f6c1a05030321fa39f87e89fdb5e":hex:"33316ca79d10a79f4fd038593e8eef09625089dc4e0ffe4bc1f2871554fa6666ab3e7fe7885edef694b410456f3ec0e513bb25f1b48d95e4820c5972c1aabb25c84c08566002dadc36df334c1ce86847964a122016d389ac873bca8c335a7a99bcef91e1b985ae5d488a2d7f78b4bf14e0c2dc715e814f4e24276057cf668172":hex:"":hex:"756292d8b4653887edef51679b161812":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"b228d3d15219ea9ad5651fce02c8374d":hex:"5c7eafaead029c3fe3cf3835fe758d0e":hex:"8c35dd805c08686b9b4d460f81b4dcb8c46c6d57842dc3e72ba90952e2bebf17fe7184445b02f801800a944486d662a127d01d3b7f42679052cdc73ce533129af8d13957415c5495142157d6ce8a68aa977e56f562fed98e468e42522767656ce50369471060381bb752dd5e77c79677a4cadffa39e518e30a789e793b07ea21":hex:"":hex:"a4dde1ab93c84937c3bbc3ad5237818d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"776afcbabedd5577fe660a60f920b536":hex:"5bbb7f1b14084e520408dd87b97705e9":hex:"44631fc9d4a07416b0dfb4e2b42071e3e2be45502c9ddf72b3e61810eeda31a7d685ebb2ee43a2c06af374569f439ee1668c550067de2dece9ec46ee72b260858d6033f814e85275c5ae669b60803a8c516de32804fa34d3a213ccfaf6689046e25eeb30b9e1608e689f4d31cc664b83a468a51165f5625f12f098a6bf7ddab2":hex:"":hex:"a5347d41d93b587240651bcd5230264f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"20abeafa25fc4ea7d0592cb3e9b4d5fe":hex:"3aba79a58c5aa664856b41d552c7a8d3":hex:"98cfecaae9eb9a7c3b17e6bc5f80d8a4bf7a9f4fa5e01b74cae15ee6af14633205aafe3b28fb7b7918e12322ea27352056a603746d728a61361134a561619400ff2bf679045bac2e0fbc2c1d41f8faba4b27c7827bceda4e9bf505df4185515dd3a5e26f7639c8ad5a38bc5906a44be062f02cc53862678ae36fa3de3c02c982":hex:"":hex:"2a67ad1471a520fe09a304f0975f31":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"2bc73fba942ff105823b5dccf6befb1c":hex:"902c3e3b69b1ef8395d7281ff74cce38":hex:"4adec0b4ac00325a860044d9f9519daa4f7c163229a75819b0fd7d8e23319f030e61dfa8eadabff42ea27bc36bdb6cad249e801ca631b656836448b7172c11126bad2781e6a1aa4f62c4eda53409408b008c057e0b81215cc13ddabbb8f1915f4bbab854f8b00763a530ad5055d265778cd3080d0bd35b76a329bdd5b5a2d268":hex:"":hex:"ebdd7c8e87fe733138a433543542d1":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"356a4c245868243d61756cabe86da887":hex:"b442f2ec6d45a17144c258fd59fe5b3b":hex:"12cccc3c60474b0a1579c5006c2134850724fa6c9da3a7022d4f65fd238b052bdf34ea34aa7dbadad64996065acee588ab6bd29726d07ed24ffae2d33aadf3e66ebb87f57e689fd85128be1c9e3d8362fad1f8096ee391f75b576fb213d394cef6f091fc5488d9aa152be69475b9167abd6dd4fd93bbbc7b8ca316c952eb19c6":hex:"":hex:"ed26080dcb670590613d97d7c47cf4":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"dfa7e93aff73600fc552324253066e2c":hex:"c20001e93f1cd05253c277a9445d61e4":hex:"a64d1e20058a1f7e698622a02f7ff8dc11886717ede17bbdc3c4645a66a71d8b04346fb389a251ffb0a7f445a25faf642bb7e4697d2cacf925e78c4be98457996afb25b0516b50f179441d1923312364947f8f1e0f5715b43bd537727bf943d7b4679b0b0b28b94e56e7bbf554d9cf79fcee4387f32bb6f91efdd23620035be6":hex:"":hex:"6ba5e4dace9a54b50b901d9b73ad":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"2ecea80b48d2ecd194a7699aa7d8ccfc":hex:"8b4db08bafc23b65ae50a2d20661d270":hex:"efc2ca1a3b41b90f8ddf74291d68f072a6e025d0c91c3ce2b133525943c73ebadc71f150be20afeb097442fa51be31a641df65d90ebd81dcbaf32711ed31f5e0271421377ffe14ddafea3ca60a600588d484856a98de73f56a766ae60bae384a4ae01a1a06821cf0c7a6b4ee4c8f413748457b3777283d3310218fb55c107293":hex:"":hex:"246a9d37553088b6411ebb62aa16":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"d38fee3fd3d6d08224c3c83529a25d08":hex:"a942ccb11cf9468186fabfc18c899801":hex:"1c92a4ce0a1dae27e720d6f9b1e460276538de437f3812ab1177cf0273b05908f296f33ba0f4c790abe2ce958b1d92b930a0d81243e6ad09ef86ee8e3270243095096537cb1054fcfcf537d828b65af9b6cf7c50f5b8470f7908f314d0859107eed772ee1732c78e8a2e35b2493f3e8c1e601b08aeab8d9729e0294dca168c62":hex:"":hex:"803a08700ec86fdeb88f7a388921":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"1899b0cbae41d705c6eed3226afb5bc0":hex:"82d0910aa53e300a487d880d018d0dea":hex:"6bf5583cc1007d74f3529db63b8d4e085400ccf3725eab8e19cb145f3910c61465a21486740a26f74691866a9f632af9fae81f5f0bffedf0c28a6ce0fd520bb4db04a3cd1a7d29d8801e05e4b9c9374fd89bcb539489c2f7f1f801c253a1cc737408669bcd133b62da357f7399a52179125aa59fae6707d340846886d730a835":hex:"":hex:"c5d58870fee9ce157f5ec1fa8f":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"8b95323d86d02754f4c2874b42ec6eb0":hex:"4f76084acbdef9999c71dcc794238d7c":hex:"ebc75788377c0b264818a6f97c19cf92c29f1c7cdeb6b5f0a92d238fa4614bc35d0cfe4ec9d045cd628ff6262c460679ac15b0c6366d9289bbd217e5012279e0af0fb2cfcbdf51fe16935968cbb727f725fe5bcd4428905849746c8493600ce8b2cfc1b61b04c8b752b915fed611d6b54ef73ec4e3950d6db1807b1ce7ed1dcc":hex:"":hex:"c4724ff1d2c57295eb733e9cad":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"30da555559eb11cf7e0eff9d99e9607d":hex:"7799275bf12335f281ec94a870f90a0b":hex:"e735d556e15aec78d9736016c8c99db753ed14d4e4adaaa1dd7eaad702ea5dc337433f8c2b45afdf2f385fdf6c55574425571e079ca759b6235f877ed11618ff212bafd865a22b80b76b3b5cf1acfd24d92fd41607bbb7382f26cd703757088d497b16b32de80e1256c734a9b83356b6fced207177de75458481eaef59a431d7":hex:"":hex:"3c82272130e17c4a0a007a908e":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"ed2ac74af896c5190c271cfa6af02fd2":hex:"e0226e2d8da47badad1fb78b9a797f27":hex:"8f11353ae476ff923013e6e736ffc9d23101a1c471ccc07ad372a8430d6559c376075efce2e318cdf4c9443dbf132e7e6da5524045028c97e904633b44c4d189a4b64237ac7692dd03c0e751ce9f04d0fdbd8a96074cd7dfa2fd441a52328b4ac3974b4902db45663f7b6f24947dba618f8b9769e927faf84c9f49ad8239b9fb":hex:"":hex:"db8af7a0d548fc54d9457c73":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"0225b73fe5fbbe52f838d873173959d8":hex:"02a048764f48d9aed1147ee922395bbf":hex:"9b46a57b06e156c877e94c089814493ead879397dab3dfcab2db349ef387efcd0cc339a7e79131a2c580188fc7429044a465b8329d74cd8f47272a4ed32582b1c5c7e3d32341ae902ea4923dc33df8062bc24bb51a11d2ecc82f464f615041387f9c82bd2135d4e240fe56fa8a68e6a9a417e6702430a434b14d70cf02db3181":hex:"":hex:"e2c2ce4022c49a95c9ac9026":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"89ca3771a0ef3287568b4ac036120198":hex:"7e83d2ffa8af8c554cfd71a0db56ef5b":hex:"1bd7a9d6262882bd12c62bd50942965b3cdcadf5e0fab2dc4d0daf0ee4b16e92c6e2464c0caa423cdce88e4d843490609716ec5e44c41672c656ac0e444d3622557ea8420c94deae3ad190ddaf859f6f8c23e4e2e32a46d28df23de4f99bd6c34f69e06eddfdfa5f263dbe8baf9d4296b2c543e4c4847271e7590374edf46234":hex:"":hex:"06b2bf62591dc7ec1b814705":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"a41a297bd96e224942998fe2192934a1":hex:"6827f2c5a0b7ecd6bbc696abb0adf556":hex:"f32041abd8543415cbac423d945dda5378a16a7e94d9ab5dbd2d32eb1c5048cc7c8e4df3ca84ec725f18c34cfdeaa7595392aabfd66d9e2f37c1165369cd806cd9d2110def6f5fad4345e5a6e2326c9300199438fcc078cd9fcf4d76872cac77fc9a0a8ac7e4d63995078a9addecf798460ff5910861b76c71bccfb6b629d722":hex:"":hex:"49a4917eef61f78e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"a9372c058f42e0a1d019bdb528313919":hex:"8d03f423230c8f00a5b6b712d426a2af":hex:"cfef4e70fcc1821eeccf7c7b5eb3c0c3b5f72dc762426e0bd26242f8aa68c5b716ab97eded5e5720caccc1965da603d556d8214d5828f2cf276d95bf552d47313876796221f62ccb818a6d801088755d58cfb751bfed0d5a19718d4e0f94b850e0279b3a69295d1837cba958a6cc56e7594080b9e5b954a199fdc9e54ddc8583":hex:"":hex:"b82cd11cd3575c8d":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"6302b7338f8fa84195ad9abbacd89b4e":hex:"e1bed5c53547cbc85f3411fbb43bb08b":hex:"bcd329c076e8da2797d50dcdcf271cecf3ce12f3c136ed746edc722f907be6133276ee099038fdc5d73eec812739c7489d4bcc275f95451b44890416e3ffe5a1b6fa3986b84eee3adad774c6feaecb1f785053eeda2cfc18953b8547866d98918dbe0a6abc168ac7d77467a367f11c284924d9d186ef64ef0fd54eacd75156d2":hex:"":hex:"5222d092e9e8bd6c":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"78b5c28d62e4b2097873a1180bd5a3a5":hex:"c93902c2819ee494f0fc4b259ee65dd8":hex:"e6b1192674a02083a6cf36d4ba93ba40a5331fadf63fd1eb2efa2ee9c0d8818472aaaf2b4705746011753f30f447c8f58dd34d29606daf57eadc172529837058cb78a378b19da8d63c321f550dfa256b5fd9f30e93d8f377443bfcd125f86a079a1765d2010be73d060f24eebae8d05e644688b2149bc39e18bd527bc066f2ba":hex:"":hex:"eae48137":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"3d84130578070e036c9e3df5b5509473":hex:"3b9b4950523a19c6866fd2b0cde541fd":hex:"a764931e1b21a140c54a8619aacdb4358834987fb6e263cec525f888f9e9764c165aaa7db74f2c42273f912daeae6d72b232a872ac2c652d7cd3af3a5753f58331c11b6c866475697876dbc4c6ca0e52a00ba015ee3c3b7fb444c6e50a4b4b9bbe135fc0632d32a3f79f333d8f487771ed12522e664b9cf90e66da267f47a74d":hex:"":hex:"79987692":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"08428605ab4742a3e8a55354d4764620":hex:"128f5f4a817e4af04113847a223adeb0":hex:"464b484ed79d93a48e0f804e04df69d7ca10ad04ba7188d69e6549ab50503baaec67e0acba5537d1163c868fd3e350e9d0ae9123046bc76815c201a947aa4a7e4ed239ce889d4ff9c8d043877de06df5fc27cf67442b729b02e9c30287c0821ef9fa15d4cccbc53a95fa9ec3ed432ca960ebbf5a169ccada95a5bf4c7c968830":hex:"":hex:"3eb3e3a2":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"0dd358bc3f992f26e81e3a2f3aa2d517":hex:"d8c750bb443ee1a169dfe97cfe4d855b":hex:"":hex:"87cc4fd75788c9d5cc83bae5d764dd249d178ab23224049795d4288b5ed9ea3f317068a39a7574b300c8544226e87b08e008fbe241d094545c211d56ac44437d41491a438272738968c8d371aa7787b5f606c8549a9d868d8a71380e9657d3c0337979feb01de5991fc1470dfc59eb02511efbbff3fcb479a862ba3844a25aaa":hex:"a81d13973baa22a751833d7d3f94b3b1":char*:"":hex:"77949b29f085bb3abb71a5386003811233056d3296eb093370f7777dadd306d93d59dcb9754d3857cf2758091ba661f845ef0582f6ae0e134328106f0d5d16b541cd74fdc756dc7b53f4f8a194daeea9369ebb1630c01ccb307b848e9527da20a39898d748fd59206f0b79d0ed946a8958033a45bd9ae673518b32606748eb65":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"43b5f18227e5c74288dbeff03801acd6":hex:"08ee12246cf7edb81da3d610f3ebd167":hex:"":hex:"f58d630f10cfca61d4644d4f6505bab629e8e8faf1673e64417f9b79e622966a7011cfb3ff74db5cebf09ad3f41643d4437d213204a6c8397e7d59b8a5b1970aed2b6bb5ea1933c72c351f6ba96c0b0b98188f6e373f5db6c5ebece911ec7a1848abd3ae335515c774e0027dab7d1c07d047d3b8825ff94222dbaf6f9ab597ee":hex:"82d83b2f7da218d1d1441a5b37bcb065":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"9a433c612d7e1bdff881e4d63ba8b141":hex:"8b670cf31f470f79a6c0b79e73863ca1":hex:"":hex:"ce10758332f423228b5e4ae31efda7677586934a1d8f05d9b7a0dc4e2010ec3eaacb71a527a5fff8e787d75ebd24ad163394c891b33477ed9e2a2d853c364cb1c5d0bc317fcaf4010817dbe5f1fd1037c701b291b3a66b164bc818bf5c00a4c210a1671faa574d74c7f3543f6c09aaf117e12e2eb3dae55edb1cc5b4086b617d":hex:"8526fd25daf890e79946a205b698f287":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"8e9d75c781d63b29f1816859f7a0e0a0":hex:"748a3b486b62a164cedcf1bab9325add":hex:"":hex:"a9f1883f58e4ef78377992101ab86da0dafcefa827904dd94dff6f6704b1e45517165a34c5555a55b04c6992fb6d0840a71bd262fe59815e5c7b80fe803b47d5ba44982a3f72cb42f591d8b62df38c9f56a5868af8f68242e3a15f97be8ef2399dbace1273f509623b6f9e4d27a97436aebf2d044e75f1c62694db77ceac05de":hex:"131e0e4ce46d768674a7bcacdcef9c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"fe6b8553002c69396d9976bb48d30779":hex:"595b17d0d76b83780235f5e0c92bd21f":hex:"":hex:"786f4801b16de7a4931ab143b269c7acc68f1ed9b17a95e8929ccec7d53413059fd4267bedbf079d9d69e90314c1345bc9cb9132f1af69323157ddf7533ced42b4b7bd39004f14d326f5b03bc19084d231d93bcab328312d99b426c1e86e8e049d380bb492e2e32ad690af4cf86838d89a0dfdcbc30e8c9e9039e423a234e113":hex:"8879de07815a88877b0623de9be411":char*:"":hex:"b15dc7cd44adcb0783f30f592e5e03ccd47851725af9fe45bfc5b01ae35779b9a8b3f26fec468b188ec3cad40785c608d6bfd867b0ccf07a836ec20d2d9b8451636df153a32b637e7dcdbd606603d9e53f6e4c4cc8396286ce64b0ea638c10e5a567c0bc8e808080b71be51381e051336e60bf1663f6d2d7640a575e0752553b":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"14898c56009b459172fef9c17993b54f":hex:"0862f8f87289988711a877d3231d44eb":hex:"":hex:"e7ba6ef722273238b975d551f95d3e77e9b75b24c547b86eafb457d409803bdf6e1443839d8604ee497020e1a3dbd687a819b17fdde0fcf240ce2129792792a58bfcd825773001ee959bf9ec8d228e27ce1cd93d7fb86769a3793361b6f82bf7daf284afc1ece657a1ee6346ea9294880755b9b623563ad2657ba2286488a2ef":hex:"36938974301ae733760f83439437c4":char*:"":hex:"3fd56897a62743e0ab4a465bcc9777d5fd21ad2c9a59d7e4e1a60feccdc722b9820ec65cb47e1d1160d12ff2ea93abe11bc101b82514ead7d542007fee7b4e2dd6822849cd3e82d761ff7cf5ce4f40ad9fec54050a632a401451b426812cf03c2b16a8667a88bb3f7497e3308a91de6fd646d6a3562c92c24272411229a90802":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"fe5253d4b071793b081ebc122cc2a5f8":hex:"49e82d86804e196421ec19ddc8541066":hex:"":hex:"b57a0bd7714ae95e77fa9452e11a7ed4a2bec60f81ad6ddb956d4b1cb5dfc277dcb4034d501801b26733b5e08c710c3cfdccc1b208dc7a92cd7ebe166320582bcaff64cc943c36fbe7008f004e5db70c40de05fa68b0c9d4c16c8f976130f20702b99674cd2f4c93aeaeb3abca4b1114dbc3a4b33e1226ad801aa0e21f7cc49b":hex:"e8b8ae34f842277fe92729e891e3":char*:"":hex:"c4a31c7ec820469f895d57579f987733337ec6547d78d17c44a18fab91f0322cfe05f23f9afaf019cf9531dec2d420f3591d334f40d78643fd957b91ab588a7e392447bd702652017ede7fb0d61d444a3b3cc4136e1d4df13d9532eb71bcf3ff0ae65e847e1c572a2f90632362bc424da2249b36a84be2c2bb216ae7708f745c":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"b3502d6f0d172246e16503cdf5793296":hex:"6ce994689ff72f9df62f386a187c1a13":hex:"":hex:"09268b8046f1558794e35cdc4945b94227a176dd8cb77f92f883542b1c4be698c379541fd1d557c2a07c7206afdd49506d6a1559123de1783c7a60006df06d87f9119fb105e9b278eb93f81fd316b6fdc38ef702a2b9feaa878a0d1ea999db4c593438f32e0f849f3adabf277a161afb5c1c3460039156eec78944d5666c2563":hex:"21cdf44ff4993eb54b55d58e5a8f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"5fb33dd73db309b9dfd3aee605cd94bf":hex:"3f6486f9e9e645292e0e425bac232268":hex:"":hex:"f4e011f8c99038c46854b427475f23488077ebf051c4b705a1adfdd493a0a10af7a7e9453965b94f52f61ae62ce9243a82a2dbf9c5a285db3fe34ed34ed08b5926f34c48171195f7062d02a6e6e795322a0475017371cb8f645cdcac94afc66dc43e7583bdf1c25790f4235076a53de6c64f3bc5004e5a9ce4783fbf639fad97":hex:"7ee5e0e2082b18d09abf141f902e":char*:"":hex:"0503cb531f1c967dae24f16dd651d544988a732020134896a0f109222e8639bf29ff69877c6ef4ac3df1b260842f909384e3d4409b99a47112681c4b17430041ca447a903a6c1b138f0efbb3b850d8290fceac9723a32edbf8e2d6e8143b1cbc7bf2d28d1b6c7f341a69918758cc82bbab5d898fa0f572d4ceaa11234cb511ec":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"a958fe3b520081b638d9e4c7d5da7ac7":hex:"c396109e96afde6f685d3c38aa3c2fae":hex:"":hex:"dfa9487378c7d8af9c8dbd9e533cd81503d9e4e7dab43133bad11fd3050a53a833df9cc3208af1a86110567d311d5fc54b0d627de433c381b10e113898203ac5225140f951cdb64c6494592b6453f9b6f952ec5ece732fb46c09a324f26b27cdad63588006bb5c6c00b9aa10d5d3b2f9eaab69beeddd6f93966654f964260018":hex:"06ca91004be43cf46ed4599e23":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"ec319fb143eac8215b51541daec268f2":hex:"8a4684f42a1775b03806574f401cff78":hex:"":hex:"d298d988e74927736237eb8ab09d7a86b854fa2fd1f7f3be83b417ac10aa9291f4af5b3fbaf75a296ac32369ad57ded3984b84711953e477de3035ba430a30ffb84c941936e6c8d2cae8d80159876f87dd682747f2dccc36d7c32ab227032b8ac70b313fa4202ea236e3ec4d9e4d8b48cf3b90b378edc5b1dbeec929549344f8":hex:"e91acb1bfda191630b560debc9":char*:"":hex:"27ce4a622959930f4059f247d29d1438257093cc973bf1bae4e0515da88b9a7e21ec59c7e4d062035cdf88b91254d856b11c8c1944865fa12922227ded3eecccaa36341ecf5405c708e9ea173f1e6cdf090499d3bb079910771080814607a1efe62ec6835dc0333d19dd39dd9ea9f31cd3632128536149a122050bb9365b521d":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"14a3e69f351ac39b4297749a90c1365c":hex:"eb1c6c04437aa5a32bcc208bb3c01724":hex:"":hex:"051224f7b208549dcfda5f9d56ce5f0a072ef1f23f3810c693516c92622be6ed4d7a9e0f9450980ba490b2e9e3468ea7eef10bc9ebd673d91f32b748c1bf2c50cc4ebb59fc409c6d780bba00700d563ce1dc9927a6c860095a42ed053f3d640debfbfa7a4e6d5de234af19755000d95e7f414f1f78285ee165410c020038286b":hex:"e418815960559aefee8e0c3831":char*:"":hex:"797310a6ed9ce47cdc25f7f88f5dbbf6f8f4837701704d7afced250585922744598d6f95ba2eecf86e030cc5ee71b328fc1c4f2d4df945d1b91a2803d6ae8eba6881be5fe0f298dd0c0279e12720ede60b9e857ccca5abe9b4d7ee7f25108beebbfe33f05c0d9903bf613c2e7ed6a87b71b5e386d81b3ae53efd01055bbcccc2":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"c34827771fc3918d1cee09ba9401b832":hex:"2379bbd39a1c22bc93b9b9cc45f3840b":hex:"":hex:"ce79701b661066e53191c9acdaf677ad41622314898d7216e3f113e2e6e215d26d8bd139827f06ab3ea5c4105694e87db1dd6cec10e1f86a8744d4c541f08e40319e22ab42fc1a6c89edfd486b6f142c6bbbf84a73912e0b2e55b79db306ccabf839855afdd889e52ae981520c89e7dc29bb2adb1906cca8c93fcb21290a095b":hex:"26e1f6cf0d9e0f36dfd669eb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"b1f9bd2006ec550b7b9913d383200b5d":hex:"ca28fa6b64bb3b32ef7d211f1c8be759":hex:"":hex:"6d9fc8f586d50d6e0128172ae147844e80136905d3a297497a9566ca7c7445029028f14c9950acee92a5c12a9150f5e024e01c7505dd83937542b0b1288de9c292ae8ad918a09b2edf8493540b74c73d2794f2eb6eed18eba520ddea9567462c83330f33d7892fcde0b10c73a4e26ab1bef037cec7e0190b95188e9a752fee6f":hex:"c87aac7ad0e85dbb103c0733":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"8b2cef1a92aa0af2b00fb2a99855d5bc":hex:"08d87b7acee87d884667f6b1e32e34d0":hex:"":hex:"fd09525ef3c65ab5823e1b6c36b4a9449a3975c5d3a9e7e33c61fb32edcbb8e8c915b6202e3fbce87d73cc3b66d83d9ea7e1e353cc7468f08626932cf0235563e2a28953ee5a0afadb1c3cb513b1f1fc9a8a6cf326174b877448672f7731dd6430a51619da1a169ab302da5af5b38802f8bbf5890b5d9b45deda799679501dc4":hex:"3bd7685318010b0c5fe3308b":char*:"":hex:"583e64631c218549923e8ad33b728d07f23b0f19d2aff1ad7e20d564c591db0e117caa8f21e3f3345e3d84f0ccbb27274cddf9274410fc342cb2a5d4aea4e925d0dd5350389ee0dea23a842ff3f5c1198374a96f41e055f999cfbc2f47ceaa883da8eb6ff729f583eff1f91bd3f3254d4e81e60d9993b3455e67f405708e4422":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"175c306f8644b0c4b894ae3d0971505e":hex:"9860268ca2e10974f3726a0e5b9b310f":hex:"":hex:"fbe7ced7048f83e3a075661c4924eb77da1b4d6019d504afb942d728b31fd3b17557bd101c08453540a5e28d3505aeb8801a448afac2d9f68d20c0a31c7ef22bd95438851789eef1bebe8d96ac29607025b7e1366fecd3690ba90c315528dc435d9a786d36a16808d4b3e2c7c5175a1279792f1daccf51b2f91ac839465bb89a":hex:"f809105e5fc5b13c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"08c0edcfe342a676ccdc04bdf854b4b0":hex:"4a7b70753930fe659f8cc38e5833f0c7":hex:"":hex:"1fc8ef8480c32d908b4bcbfa7074a38e915c20ed7a1c608422087e89442d7c5af6fe9c9a716c55793248062d8e6c6e8e904e2804da3a43701e4c78ecdb67e0b25308afc6d9b463356439cd095cff1bdf0fd91ab301c79fd257046cba79a5d5cd99f2502ad968420e4d499110106072dc687f434db0955c756a174a9024373c48":hex:"9ab1e2f3c4606376":char*:"":hex:"983458c3f198bc685d98cea2b23cf71f0eb126e90937cab3492a46d9dc85d76bbb8035c6e209c34b2a7187df007faabe9f3064dc63f1cb15bf5a10655e39b94732e0c6583d56327e9701344e048887a81b256181cdfa9ec42ebc990875e4852240ddcb3cbc4ea4e6307075fd314f7190f3553267bd68b19e954e310ec3f8dbab":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"241067a0301edf0f825d793e03383ea1":hex:"a30994261f48a66bb6c1fc3d69659228":hex:"":hex:"6984bb9830843529fad7f5e7760db89c778d62c764fcd2136ffb35d7d869f62f61d7fef64f65b7136398c1b5a792844528a18a13fba40b186ae08d1153b538007fc460684e2add8a9ed8dd82acbb8d357240daaa0c4deb979e54715545db03fe22e6d3906e89bdc81d535dae53075a58f65099434bfeed943dbc6024a92aa06a":hex:"36c3b4a732ba75ae":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"03cccb5357bd2848332d1696f2ff90cb":hex:"e0754022dfb1f813ccaf321558790806":hex:"":hex:"5e2f18cbc1e773df9f28be08abb3d0b64d545c870c5778ac8bb396bef857d2ac1342ae1afb3bf5d64e667bf837458415d48396204fe560e3b635eb10e560e437f2d0396952998fd36e116cd047c1d7f6fc9901094454d24165c557a8816e0d0a8e0ce41e040ba6f26ca567c74fc47d9738b8cd8dae5dfc831c65bc1ba9603a07":hex:"c75f0246":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"4e5e53c84a05d5a5348bac7b2611cf62":hex:"47e40543b7d16bc9122c40b106d31d43":hex:"":hex:"489c00c05dec06f282924c680f621ab99ac87f7d33ebbb4ca0eee187ec177d30d2b4afb4ee9f0dc019cf1a4da16d84b7f5f5c7fce72a32461db115b5a5a433024fd5ed3d47161836bb057a0189ed768f95e45fa967d0cc512fc91b555808c4033c945e8f2f7d36428dcb61f697e791b74e5c79b2bcb9cb81bec70d8119cd8d76":hex:"81eec75d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"2c94008bf377f90b7a1c0d2ea38f730c":hex:"abfe92931a8411a39986b74560a38211":hex:"":hex:"7b3d619d115de9970b2df4e1f25194940b3f3da04c653231e8e6946de9dc08ae5ba37e2a93c232e1f9445f31c01333045f22bd832e3b5f9833f37070fafb0ef1c44cc5637058ab64d9e07bb81b32852d4cf749a3ddbfdb494f8de8bb4e31f46033f8a16bc22e2595d023845505ea5db74dd69ab4ca940078b09efb4ff19bdb66":hex:"47d42e78":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"69eedf3777e594c30e94e9c5e2bce467":hex:"a3330638a809ba358d6c098e4342b81e":hex:"df4e3f2b47cf0e8590228fcf9913fb8a5eb9751bba318fd2d57be68c7e788e04fabf303699b99f26313d1c4956105cd2817aad21b91c28f3b9251e9c0b354490fa5abfcea0065aa3cc9b96772eb8af06a1a9054bf12d3ae698dfb01a13f989f8b8a4bb61686cf3adf58f05873a24d403a62a092290c2481e4159588fea6b9a09":hex:"5114e9983c96fecec3f7304ca42f52aa16cb7c6aadfb62ad537c93a3188835ca0703dad34c73cf96435b668b68a7a1d056931959316e8d3ab956bf64c4e07479c7767f9d488b0c0c351333ccf400b7e0be19a0fd173e3f2a1ae313f27e516952260fd2da9ab9daca478ebb93cd07d0b7503b32364d8e308d904d966c58f226bb":hex:"5de3068e1e20eed469265000077b1db9":char*:"":hex:"208e6321238bf5c6e2ef55a4b8f531cbbfb0d77374fe32df6dd663486cf79beeed39bb6910c3c78dd0cc30707a0a12b226b2d06024db25dcd8a4e620f009cafa5242121e864c7f3f4360aaf1e9d4e548d99615156f156008418c1c41ff2bbc007cecf8f209c73203e6df89b32871de637b3d6af2e277d146ae03f3404d387b77":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"45cc35311eedf0ba093bf901931a7036":hex:"fed5084de3c348f5a0adf4c2fd4e848a":hex:"6e210914e4aed188d576f5ad7fc7e4cf7dd8d82f34ea3bcbdb7267cfd9045f806978dbff3460c4e8ff8c4edb6ad2edba405a8d915729d89aab2116b36a70b54f5920a97f5a571977e0329eda6c696749be940eabfc6d8b0bbd6fbdb87657b3a7695da9f5d3a7384257f20e0becd8512d3705cc246ee6ca1e610921cf92603d79":hex:"5dc8d7525eaad035c19714ae1b1e538cb66a4089027245351e0ad9297410fb3a0c1155407c10a8bb95a9ca624a9c9925dac003ee78926c6e90ff4ccdba10e8a78bda1c4478162a0e302de5ff05fb0f94c89c3c7429fb94828bdcd97d21333c2ee72963ee6f056ce272b8bab007e653a42b01d1d2041ba627f169c8c0d32e6dae":hex:"266a895fc21da5176b44b446d7d1921d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"9edb5231ca4a136b4df4ae22b8588f9f":hex:"c342e9bdabe7be922b2695f5894e032c":hex:"a45c7f8032ac5144deef8d5380f033aea2786b0592720a867f4831eaccc6b85d3fd568aedc6e472e017455b0b5b30cf7a08ea43ca587f35e1646ecd9b4dc774d11e350c82c65692be1e9541cbd72a283bdcf93dc7115545f373747b4f8d5915ed0c42fbeefd3e9bd86003d65efc2361fde5b874ddabcf8265e6b884615102eff":hex:"493df801c57f8bb591955712d92d3fc34518f0599fec8533b2b4473364e1df4f560c12444cf50eeb584676b7e955c742189de6b50b8e012dfa6642f3679fb02bc6d8e08d1db88c8ae955a7946263e06494e17f8df246b672942661e5563302252208f2e00a0d77068a020e26082c291a75a06f63c41e2830292a418b2b5fd9dd":hex:"5ed3ea75c8172fa0e8755fef7b4c90f1":char*:"":hex:"56696e501fac1e8d5b83ef911ed11337d5d51ff5342a82993dd5340bb9632e6606eef68ec5fe8cec6b34ebbc596c279e6cbc9221c4cde933f6d93ae014e3c4ca49593f35eaa638606d059519bac3a3373519e6184e7227d2aa62170c36479fe239cb698bfca863925a4c9fb1338685a55a6dfd3bd9c52d8ae12be8551fce6e1a":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"d5fdcb8f5225090e63fae9b68f92c7cb":hex:"581c818282a0905df5ffff652e5604e9":hex:"f1ae6cd7b07f261105f555cf812a1d5bf8dd9aac07666318acffa11abb77d0238156663acbf7543825b45c6e9cddb481a40995ecd78bb5f4cba5df7c7efb00fc19c7f45e94d37697aca8ef368b99165393b6107f900194c797cd3289cb097eb5915f2abfd6aa52dd1effffdde448e30075a1c053246db54b0ec16eadca1c0071":hex:"d39b9cba95e3a3aab9bc1d03ff475c04faeb5b7f0510777f39e5a05756606eb7ddd154aac035d9ddaf3535629821dd8f014dedd52cd184f52fc706e3c89a3a271398c9125d9a624dafb297a56022ca2ea331ea7359ab5e65f8e14814788e64e0a886a9b1a0144bf268fdcf9d94c3d10a0452f40111da9df108252e9039eacea3":hex:"827e66b5b70dce56215cfb86c9a642":char*:"":hex:"cec11a12e47fd443f878e8e9fe23c65f29dd2d53cec59b799bcb0928de8e2f92fe85c27cec5c842ef30967b919accafe0c0d731b57f0bb5685d90a3061cb473e50e8aeca1346d1f47f7db06941f83f21ba5976d97c28cab547d8c1f38387a04b8a0b212da55b75fbaf9562eeeabd78eadcbab66457f0cd4e0d28133a64cb063f":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"036198cd3a3ab9319684d0f811cf2992":hex:"47dffc6b3b80ffef4b943bde87b9cf3c":hex:"ec4de476cd337f564a3facb544d0ff31cd89af4c3d9a28543e45156189f8eff8f804494dda83a1fb2c30ce858884a01ec63db59268452b1eea0f0d48280bb7340eaacc84509469dd94d303774d053d7ab4fb5f6c26581efeb19165f8cb09d58ec314d09ab8356731e87fd081f661e7b2d1a7c3aa4af5448a12b742e7b210b0b0":hex:"6b95b9e82a695fb7b466ce3adb536f525d8314f95eada39efb49baf121093ce7d5439f0d8223e03530b85accd388a70650ca9f7e63eb32afecb7b1916ed9b762128cc641caf3e08e027c3d88481d653b6b15172e977dfb9b3f88465911aee162501cbf8501ce2b66ee151bbfdc23225f638f18750c239d62471663e5ee2a5856":hex:"6cf68a374bea08a977ec8a04b92e8b":char*:"":hex:"5c2f7c408167be3d266ff634e1993fe291aef7efae245fa0b6b5bde886a810c866ae6a078286684d1b66116e636e285f03646e09f3c4ed7b184e7c171ba84f3bfd9500c6f35964a404892b4cdcdd3f697fc5b01934a86019810987a9fea7efca016049873f1072f62df3c17f57ea1d88ccd8757f7e3c5d96e8a18d5366a39ea9":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"c9fbbff8f25f951ba874dfc5ff38584e":hex:"1c1fc752673be6d4ff4cc749fc11e0fe":hex:"abfde0b60acfe265b62ed68ebebc1f5f725f155c4b8a8aeec8d704701c51ff7817060c1b0ce6b80d6efc9836c9ea2bc022ec67db4cd34e945e3a1b153fd2e0f7ac84bb4b07e04cbb529ee24014b16067f9f082b940c9d5e54024d3e5e910310457478560721587da7b5343d89eec5a8fce389c01185db15e7faa9a3fa32e8ab9":hex:"ca401071396da00376add467490abc6e6a7d8a85852026979f7013a09cf689113c8d833560cd6c5b8fdaa8fdd818e773ac13954839a0a2c91efeaf4e0e14de43308419a8b86fa2ae600a88a6bd39dfaabc16a3c7c1b77a5c2aab7f7caceb2f8595324125efbb7c96ba16c47d0bd10568b24bf445d72d683268466e68e46df500":hex:"ff0b2c384e03b50e7e829c7a9f95aa":char*:"":hex:"239637fac6e180e71b2c9fa63ce8805f453d81499623ec2deba9b033350250662897867bffaf0c314244baf9e1fe3e1bb7c626d616bfbf3e0ac09a32aaf718b432337c9dc57c2d6fc4a0a09bdc05b9184d1b90c7193b7869f91e2caa8b3b35c10c6621ffae4c609bdf4e4e3f06e930541c381451ef58f4f30a559d2b79b0e6b6":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"3a314ec178da96311e42334a616fb38b":hex:"d7ea27c819e3eb2666611bb1c7fc068d":hex:"db8dcc31a5681f13d56abd51bd2dcb0d2b171628186e215a68bf16167b4acd00c3441973c3fa62fa2698ee5c6749fc20e542364d63c40756d8bcff780269e5201bafdced3cdc97931d8203873431882c84522c151b775285d0a3c5d7667254c74724ff0ea9d417aa6c62835865dfded34edd331c0c235a089427672c5a9211c9":hex:"518b3f5384ab54f80497d55be7a5d6902bc7718386212c2ec7537db331514b3838f104bf9054e03039a4cfb73f41e5d0a9648e569ed738cea8d33917430dff6afa8f07a75e324b9262fa196a4439dcd66b0535ee5bea0d292600227c2a79ed03be0671740e5cb7b306d855612bd3abcbf02cf7e7cecbb6cdbb33d57b4e3234a2":hex:"1e774647b1ca406e0ed7141a8e1e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"e818372a63b7e2c23b524e29ba752bdb":hex:"36e617e787cb25e154f73af1da68cb06":hex:"71801d69796c2ce36b043c157aec9fd2e06fd1ec596126d10c26b6d44e3dc36c4fa30a030d65c382b6ddfd958e71fe9c16732e595137a3d6764c15480fc3358e9a113ba492b31274663f5842df5d1cc6bad70e83b34675a4411e2e70755aede0ff5035601be130562e27a20283d6f144ff1bdb5276dec05fad80d51b28d50688":hex:"c1bf1b702a95ceaa6b48a1cdd888ae51f58a9fc3232bd6c784529a83301c6d0cdda6e605ad9a2563f54a8d59f624ae7c589e48b85041a010dcb6fb8739d43e79a456fc0e8574af086df78680460c3cdc4e00dc3b9d4e76b0de26e9aec546705249fa7e7466c01001c2667eaf2813be1f0f116916f34843a06b201d653aa1b27e":hex:"3744262bc76f283964c1c15dc069":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"9a04f16882ff45816739d1b6697ce8b7":hex:"66f504d9a9128ad7fb7f1430d37c4784":hex:"f641c53c83c4fb1ff8044bfa97cdf63fe75d8159d65b3e5ad585b89c083a53cf4a2f7a58eaeaf45fa71f2c07bc5725a6b03307d7f32884a133a4c803700bf1e12564b98b71f63b434ddf13ad2c467dda25ffa6effcafa72452b20c34cfae71e47096f8745b487e9f1945f5bec83f7ec2709a13b504d92315b1b727a78902be84":hex:"6a4f3dbb3371f64258fd1f831349e745a4e19a33aad794b1de3788729618beed619586092120e9e5dc3ac6e0d52f991f7be61afbfaa4399ac716ad79a2734827254b1627791dc92a128a6f43426b8085dee94242e83176a3d762658f18ecc1e37e3e1531648c9caed212ea2cf3b3843cb92cb07730f30fe2dca3925470fadd06":hex:"fbb37084396394fecd9581741f3c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"38cf029a4b20607030586cd2d82146e6":hex:"6330084319e2bf32cd5240f4826944bc":hex:"80746cfb0127c592f8164d751b0e14a5b379056a884cece7ee4e9b80538d7ff6be56a3b19c135786722aaf315123b47672b0251e87ea45f0fd3601cf93f9efa6cbd9ad537f54d57f1e187f821faac24096ecec19d137c9f4cf145c278af4cd8de01c7758784fda06f1cc62d92ae1977786f3d0645714ab4ab6f48c8794b12f73":hex:"f4c9f4476561c9ebdac71b282ae6e2f9f03547da98e66d4d857720db2fcc9ed1f363858db34c9dcaca0109d7c81db24150493115f2bb6985efa8686e3d2ab719d33b230aa4c5c70696bf42f225fb3c6704711c054a882d89b320884a78cb59cd2100496edf4010487597fb9135d8ca79693a43843e9626fd6c64a8722b3a27dc":hex:"7b021de5cda915ba58f90ceef4":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"cf4d81fc5997c744a572bed71f4ae609":hex:"bc4e20c56931c967ce8e3b8f5f1c392f":hex:"b6b8294abf7da5703f864721f7904d3821f5568bf4b269e44edef4f1c95ddc172d83a06c0ad9f7f1fd2e292c17a876392bc5bb705d370b2f16ff721bef7648f423346fd3a4d762676e6fcf2d690553a47224af29afed0f452d263be90eb8150a13d720f1db6f1abc1c2ec18cfbf93b8ed3c5aa7cfc1dcb514d69f90409687a4d":hex:"f3d65d70326e641fbe7fd945fe9cf66c74f17d0d1020ae8ac488f39b7285c99d8632bc2201960f3d77daccfecc04428abe0853aa8d82b90a93127c72b2d2af53f7f1bd0afb99d50f0b3b24e934ec98eddb278b2c65866442cebf10208c7ce1b7ecf764858480b2a269b106fa6d2428d5ad17612e53e62ccc7ad1184663aeb9a7":hex:"0a86142a0af81c8df64ba689f4":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"d88ad40b42ead744f1b7a36685658be1":hex:"52c3158f5bd65a0a7ce1c5b57b9b295e":hex:"dde2663335c40e5550ae192b843fa9fb4ef357b5c09d9f39dafda3296a4d14031817ee4dc1a201d677597d81e37050cd3dc86c25adbd551e947a080b6c47ec7be8a927ef7920bd1bb81f2c59801a2b9d745d33344cbe4838bcf2eb8dce53ab82c75c9bbab8e406597f6908aaa81fbbdef25aa69116c8f7a8cdc9958435aa32ac":hex:"e99d2566fe6bcb2a04d167605db7c0f1e5567ff2d8d3292c15bbccc5d1e872bcb15a30b3bb8b1eb45e02fba15946e6bca310583a6740845a0f74f4ebfd5c59ced46875823e369e0447cc3e5d03dae530adf3c9846362c94e7f9d17207bf92d4d59981d8fd904eb8b96a0a23eb0f8d7e7a87e8e8892a2451524da6841ce575c27":hex:"7643b3534eb5cb38331ed2e572":char*:"":hex:"6f87f6be2f4e7421aa26fe321045d1e23066a02158634bef35890581c92367d0bc232940de30974c70a66c60137a9f3924d12db1e5bc1b0e7131ea3620a25eb805b7d670263b82c8bbfcd6839305025390fc17d42d82daebe1b24f73ff9aa4617e3866785dded88f8b55ef89b2798ea2641a592a46428d9020f9bf853c194576":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"c3ce86a212a30e724b4c624057db4e79":hex:"9e03f0dd4cb2b3d830a6925e4400ed89":hex:"92c48a39d93ea3308f55f6650d33fdf17a902076d582a94a82ac99496de9f62312292b844bbca5a683ef0f0710bbc1c7f89cbcca8f9c0299f154590d32059bd99fca5d78c450ede0d11d55075947caf2151218ce7a06c1e81985a7781a3444054170b457fd7ba816026310112abb47c8eddfd3ab7f679a0f60efc6c6dd3b759e":hex:"3582ef7a9565c9a8e4496750ee5ca3e3a80df6238f7b7608e3394ec56d1360777921da039ede34abcedd01081babd496ba4de74a7de501181d6bb2022a6cc7f79d89a4c6a97676fb0f2b42f70e2d0bc1eaac364c3646df4f611c1d6b09737451b81b5a4da73c05fb58391c74e44498b80b26f1c29562d23c39b5d3f086b280cb":hex:"3230fe94b6ccd63e605f87d0":char*:"":hex:"052347a4273cddba65b2a0b961477f07edee440a9117ab204359d2dd45ad2a6dad3b60ead891e7da6d79f3017ac90f95725a0089f04d25ce537bf53b7ea8e1ea58692d34c221db141e2a9fd7211adcee03ef8b5bf3c5d36311d20bb3d81f70f7e7272d0e2b6d12293b1a2c31b70f140a8f08d98c6231a3c429c3d0a10b2e1c1c":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"a0155360b84420b5bf4fb410ea02f31e":hex:"46f0386be7363887e7e357376305eab5":hex:"611bc290f91798ad84f0a5ecb5a7cb8fa35e9ab6a5a51c9869a68a076e96f92c9c117595f92cbac5d33343fa2accd2541473907cbc54792c5e215ae857424c921b04ca4b81376bbedbfcc0e565c118f2aced08f247698eed5e2d202c48245161cabeac9fa195219f9799fa253e339561e13012167f1d02b4012b7791b7c863ba":hex:"ecdb51522fc440f7471ea6a31f7c1ef1ec2153e5bcf6303297dbf8ddb3830b45ed9866157375ce4bdeb5e32fcbc6607984fccd7e6552628736608ab13072856d432ceccd3e90d1bb52ca9ada9cee90eb89ac10e887a1978fd0fb3d7bb20caaf35539e150be8044b725b8427c4c4a910f79980865d36344a8784bcc3d58460acb":hex:"ac5addcc10cae6c1345520f1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"694f621f594d96b16c32254ff06f3f9c":hex:"542db4e107485a3cd24c7ad337a4f1b5":hex:"27b7bfa5eb34ba376e515e58ab8b6556c396820d0074a1fe3b984945dcf5251ca450456ccb4bb66ec739b03fdc5f72d24553e843255adc012d1f1c95aa3cdac5d12926465354217203052cbd4869a8b5be2e01d0fe66b5a6a8da0a2ce351557e2991ce77baa812b9c67b8e1c5a1fc348710e1a73a0fd49acfd538b7db6bef8b3":hex:"e61476b8b7f101ca6005f25af2b9bee795d62720bbbf59357057ca7cd473e00f0d465255fce8d6164657603323549fb4e3d33fa51054b1a70cc7e492916dea85453e9107fe781bfeb4a622c5b2306a8dddef99386dc50745003aa7220cd7f32fb0a060fa7682576769a48f9169c7d11fe0a8a61b95f5d6dfcf216f7d0c652a84":hex:"0bdef4d771a1740381e7db97":char*:"":hex:"8b27a338fd2153d304f04655e09bd9bdf4468890ecce1e3b51de2c9a25a8d9336a9acd753ce270b1fe8d50196feac68145e0fd59c9cb3aa7c1e8af03494bc4279c6e287c849f3c775ada584ae173100946ae6921ef7c96bbc6f216093548702cf1867bb1bf1f4c9e90a34230a2b2aeb584622dd615023a43a406e64428bd9170":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"78826a5215a1d5e1b39cad5a06861f8f":hex:"feb9d740fd1e221e328b5ef5ed19eff5":hex:"ca9411b368d8295210d7a04da05a351d287f2f67d978ef1bb936de9f8065473f6fa11495da2eab13a1002231c86411d5409bbc718e2042ee99e013b1df1ef786e9fc1f2d43293c854128184efb9317c4ef82a002eac8b28fcd91d8a714a3aa25fc3c0ae4af9f4bcf5ad19a30cd8ec4b1785df70aa92074da419abe433dd4c435":hex:"0fe2c798d7015d3e2f8725648d95729c45d357dc0c89fc63b9df5a68d3e65419540f663e9190793a29c58c495d5c6a731782acf119e2df8a96fb180ad772c301d098dbc5e3560ac45b6631a01cef7eed6db51f223775d601d2e11b9baa55e2f0651344777e5a03f6738a2013626a891b5f134f07b16598b8cbe3aeaefa1c2a26":hex:"a724bbb295a02883":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"d450f5253251121606e56687952bf2f1":hex:"fe7ff90b020fc77d7fcd90bc583850ac":hex:"a3bca9ff25a60006eb18f993dcdc99681e414e27605264dfd25652195d7fe1489550afd07fc7346b88d93b59eb6642913646e93bf50ee1db5dd30106cf181124d8ad01c72ed99038c9798620abdf5c78c419b08c97f982b34d9e9105d9aa4538afcd37f62e2412f14f7a248fcd60abaf2b66cd4554767f99030f1a495d56a5ae":hex:"479b4f421bd8ac7f615c4a507da187cb5d4b1f1e2c6113d1f9678c1ba92dc5e17c5b525d7f3208733223eb82af0820b8476e9b08ca714ce044417b24d2238720cb8ffdc69db558cbaff52e3651b400e16c9d5ac8ed8949a19c35516f80394a04bd1cfdced7b204f779d792086e00b2ebca2f55a1140e85f5ee9ac7cfc5a31747":hex:"6446398aff73ed23":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"90a59f6b0abf932311f0b65623c17740":hex:"20778bea82a6717038e7064f48a31981":hex:"4022d04f1454a72d2efe57533bd32757595220b20f3a37d166cec0412fb1eb2588f939ecd906c805f4827338669888e9f730905001eb1b136b95e306edf70d9ba1e5cd0aa13a25a1f28ab55cff36f9cd7036c735e3b285d26002ad2ed1074b566e252ea3ec8a9ce10882375dc3f1d9676e301dcb179eaae991120b796cc35648":hex:"be5a948a771a8df12adaf74d702f064a75f6483c03203365fbde7d184844fe6dee0b84cf344be05b1d163817ba1516fcb87b9167ed81f884ada73b0058e2b38cba515bbbe462f4c21f8de1d41bca2cf4340aa659f9f07886c2bb620d9c3295318c07fa3c17fe8242409359c08bcb337e5cf268880839b6a20f4ee4b3f04e7024":hex:"dc77c1d7e0902d48":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #0 [#1] +depends_on:1:2 +9:exp:1:hex:"6be4ef629f0b38194c74f7b66418922d":hex:"fb77a4b9b246271abfc656433f87628c":hex:"e5d5227725a19a3050fbf2a97a6e854bc1218b94a4a3403b721ace3447daff68fff5553a26edd41219e68fb61fb9e964d0a3c29796251ae4eb942187cdc55d13a09dfb487e93d9e2072d7271456a77c6ccb81154443eea176314d6e3a08619b52cd880f1c28ae5214ac0090a3855dbd74f87389fe8afebd464330fb683dff81a":hex:"b67ea20a320f4ec0e4185c62a4ad79a3c97a8189a5e4d1deff9d3edff0f9a9323532853c1a2a2c1e62e4d1afebfcdf1d8461921ea601750380e63b912d8b7389198f976851d88a19f1aa32c97143668ad00838d98da1c4f2be0e6e2dc964d170d7f7ad2e2997982e5ca110e744b6e10c24ca18eadff6b129b1f290c8a7e0a593":hex:"3d8fc6fb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #1 [#1] +depends_on:1:2 +9:exp:1:hex:"c50e37244931e8debc12b3d561c83ba2":hex:"6c0b1fd7ab424a6883c36457d1b5521f":hex:"516dc25f6452ae169ce293c5cee440de47353ca5ba770dca0f04175950e87a2d4c3f84fbc6eeacaac436853492929680066f959e74de4b736ab924d8367b90aaa6e9492561ad4b5aa78b6737d562e960edc3b983e2e01a186e9f22896f48d8dfcfb6a42cfe2c6006c687a27772820a1e8875bdf09e8104248ce4db883376bc04":hex:"b9abf0796f2d2f774735546cf809030f65ed0c7f6bd469ef2fe0ef32aa0225b57fbce07c36017bbc1806a81ff1a429278160a07643f864485b4e0e35d57553dc1a131e32aa10f1f91d663b10f0a418f472ed7b4bca54fd7ffdbb22c4d7764d94a7ffd04730614459431eb64335b9b65363de292c04275d40a7b968c0f5c486e9":hex:"7d4393f0":char*:"":hex:"962509e494f10269b70ebad02b0cd799d1d41191a734863ef502aff3d3ba48dc2acf9da9a3fc3f40be4d210dc5e128bc00499aec57aa0a4669863165428687b88d46fad41e36af8ea6605586eaa5c0736d0d53b9d523e0cb5a0b285048e060a73cbf4b587d2cd787debdb2b4c8cda731a61a15b19fe8b561fbdd3a7373853ae1":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #2 [#1] +depends_on:1:2 +9:exp:1:hex:"8531ddb03977383405baf2ee9ca7d64b":hex:"baf623867d6a25fd85d1f08e599c0566":hex:"18f92cdd37dcd7f99b06838f3f68748aba367baabaebd0da9ee787d70e752fa07dea553a43b643b8d8f460175c0746675205e20a7a98acfcac864d7c4cf5ab4c41c031738c76882acda003c5af47b1c4df8894a827a317935d970d4afaee17715c9cfd1883e8c345f19d1f89e229b8edba6b4f53b86d8da1c0f159afb83b6b33":hex:"d90c9e26509bdba9b1dea8d2b94f2b1881d22c2bd756ad23cd61944710a1c1f2807170ed47a6870ae654e44757fcb3822ef28b37946cafc07284f8a0c22ae3552954f0d87b8d8c825bd546935b494cacb4262d9e2a88f254f200ad31367d8b3715afbabea5f34214ffedb14d7c84806022aba2dc8f88a314ffbb24017d1a9b9f":hex:"2fc9de46":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"862dd5b362cfa556ca37e73cff7f4a0e":hex:"81530a243655a60d22d9ab40d2520447":hex:"":hex:"":hex:"3b9b2af54e610ed0b3dda96961dd8783":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"3452b7bc100c334292e08343f139b9d0":hex:"8f92739a30fe4ba24079f5d42753d6ac":hex:"":hex:"":hex:"0eeca69f8b95e1a902cc3ab1aaa8e2af":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"31a0cbaf21b943f8badc939e94eac7eb":hex:"d5bb2c4eaec47088230972ae34fcda9c":hex:"":hex:"":hex:"580e728512c8e44fbb3fe2c498e05323":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"9e8fca537746e7cbff97f1dcd40a3392":hex:"43e9f2bf186b2af8cc022e7c7412d641":hex:"":hex:"":hex:"4465a3f9d9751789bcef5c7c58cbc5":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"35b5854ca83792ad691dbda1a66790fb":hex:"cff61cf9b32ea30cf7e3692aa6e74bed":hex:"":hex:"":hex:"726793199df533dd9055b0ac7c939d":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"07259267c1c6a015437a5d8cfa92f9e6":hex:"18b9cf2ad7ace6ec1c8366b72878cf20":hex:"":hex:"":hex:"4340f6263f0ba2d82c2eb79cb0cc7e":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"fa1df8955aa3ef191900b06e7c1b7d46":hex:"6928c138c98a4350c318fbdccd3f44ba":hex:"":hex:"":hex:"7c89d9e77515d271b6ed54c9c4e3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"c04200ce41ce77d772babb206315ec7d":hex:"a885d58f0f38f9ff26d906fa1bfb12f4":hex:"":hex:"":hex:"9ee0d025421f2bf18caf563953fb":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"650df049461be341c3099bd1613dcead":hex:"8a4ff6327b49d297248ce2d5bd38afa8":hex:"":hex:"":hex:"13f067ef0d7b448d56e70d282fed":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"ee61b5bf5060fcc637dc833926898508":hex:"b2dcf21f9ffa4a883044d29f087f9b85":hex:"":hex:"":hex:"9ab1d66666d4dea3cbb5982238":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"01cc56ca7e64db7fbef66236a5c49493":hex:"8ea5b63004189792cc040ef18b37e550":hex:"":hex:"":hex:"d685aeb54aa129a21bed17766e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"134dd72ac8e28ab46720c2f42284a303":hex:"c6368e4c0ba0ec90fa7488af9997a4c7":hex:"":hex:"":hex:"4ad9cdf19ff7d7fd7e273efced":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"180c04b2bde6901edcda66085f73ecd9":hex:"9193b206beade4cb036f01a9db187cb8":hex:"":hex:"":hex:"530f5e9ed0879ccef3a7b360":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"aaac85742a55ffa07e98106d6d6b1004":hex:"630cd8ab849253c4da95ac80324ecc28":hex:"":hex:"":hex:"37911820c810e3700c3a9321":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"ab663c4f8f2fdc7d5eabf6ef26169b4e":hex:"86e6100669929e329a1d258cd3552dc9":hex:"":hex:"":hex:"958d6141f7fb2b2dc7d851a6":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"0dd756d49fd25380c4026ea03cafc2da":hex:"6a6f7e39b0d730ea1670e13d16c12c28":hex:"":hex:"":hex:"872ef05a28da5ea1":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"bd8a834b288bdc7578b6c6ab36f5d068":hex:"aa77de0af5fa4dd1ed2ada5cb94813a0":hex:"":hex:"":hex:"c5c094e83755f2b6":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"020d280dbd06939bbb5e6edc6f6d39c6":hex:"09aea6f0e57598452719d6f63b6fe5a0":hex:"":hex:"":hex:"05d6c56ba601e85b":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"e47f41a27a2722df293c1431badc0f90":hex:"227c036fca03171a890806b9fa0c250d":hex:"":hex:"":hex:"86c22189":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"9d3e112114b94e26e93d3855d4be26bd":hex:"99b98525160c4bb2029da5553ff82b59":hex:"":hex:"":hex:"33bee715":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"5b4b7688588125349fbb66004a30d5d4":hex:"b4ae363edb529d8b927c051cf21a2d9d":hex:"":hex:"":hex:"6a920617":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"c4b6c5b8e21c32f36b0ae4ef3b75d5cd":hex:"3d1036bf0000e6f1b77a799f2ef32dec":hex:"1cf2b6cbe86a87b4b5bb3cc50024aeb27c48143658d47b41f2f20b87ed67bd6fc3b85a3a803f66d3576608f5d6ce6cad11e02fe12de5390722dccb8242e1dd140051bef51aa9716c860d45d45bca6effbb1a4797e6e7406a04db5d823766c0f011ebc28e9a8cd4446ec8a75ea8bdc1b2fdbb5cc364fa9877886e30404593df34":hex:"":hex:"a49725014c214ef7cc2d28b9b2b53da7":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"63c3f81500746eaf383fe3975d84f849":hex:"0799d4152fd73c1604b4610cf7171fe1":hex:"cb8248e5f904cc9ccccf6f273fe621eee1b4d7ed98480f9e806a48b84e2d6a733772ecf8fb7fe91805715cddab2b462b89f6e6c7cf873f65031f13c357d5f57b00b7c391c39e78ad1ed94be236ca0ae316bce11bc33c5d701fdfc58abbe918b9c42f7b3d6e89d46f9784b388a6e6daf47730b9fa665d755a17e89932fa669c44":hex:"":hex:"c53d01e53ee4a6ea106ea4a66538265e":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"b0c88b191ce6e8e4a3941f7960b7eae5":hex:"e2a899961c332c815685c553351fa519":hex:"308bf10570af48d632911f3641dea60d78046211c01a63bb8e4e5cbddfff8841d2f2b11e18ccb2170805ef4cacf7804d64e0feef40731a1704907f33b77788c18ccf35b224ec3046a67664ac9a3481d2385b6ddeec6da4f32423f94ea9663a5c51cc388cef33744a8159b4fb654dfdb5092718bf926c824be31197f07f276b5f":hex:"":hex:"92604d37407aff33f8b677326cbb94fc":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"c818dfa0885a09f65ef78712f5ce6609":hex:"ca279284723530fdd68ae880e0ce775c":hex:"2a562abdbb483ca5f355f9cc1c5e607bdd624a078a76b717ce0f8f35d0d4c54b629f372f15d20c848d01420c6af5a7040d42063704a17b46259dcc53723caf2d4bf556143ff9117c752fa4f22c9c155c99b7bf5949d089cdafd562165b9cbf53ff51cec21f49128c8a599718bbcdb4a5d705d20509c44c8945e2a133164b9942":hex:"":hex:"20e9a3a98d71d460743e1efaab13c6":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"2354c6b6afaa883e7ce91faca4981f8b":hex:"604f2730c756c8c39a0527093bc2feb5":hex:"959b4b0b9ce2e9120b327d2d090117553999ee10bdd384a546fc6de0957ef4b447daf07b3d07ef7dbc811f36b0fc09a175d26e4d1263cb5e21eda5ecab85d763807bb20b3cb6ac3f31d548dff00aae058d434ebcf6f7e3a37f11324134f453dd0ea7f51094863486426ff1706129a5a93c53d8c5ccb56cafa5881981fe233cb0":hex:"":hex:"3588c9aa769897dfa328549fbbd10a":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"b0af48e6aebbb6ff5b7c92bd140b085f":hex:"d210d6502a5221ac1274a9c7f5a81725":hex:"d725311ca10eb4b4aa24e6dd19c5e72dc34fc1ff53feb25d924a9b7d8d72205790ca4b1275bd93ad60c27a5587a45659bca07c111e9748fb683a03465153ffd735b7d134b479674ab8596f0596496fe2090f623fd1e4dd730c5283d8b172db8a25df42d9b34f388ed32676a56b8ba03347e47379702654508ccd0a21ff03516e":hex:"":hex:"e6222f068a1e18f09ba6c771eabd86":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"a05fe482fe164b2eca7f6c3e377b39d8":hex:"145327bcc10335fccb93afbf4b17e6e7":hex:"ea6f2e93b5e1bf127d40440b8d6397405246b1b48eebe16964f18928f6b4b8ee2c36322d7126905c1a5b816996e340404b586edc2d77afac11a6c1266511f9eff1a320b035442d4078f8e42ca63cf26d12a971a7adf4645d1bd9a8e4d0a20722f7c2d529beaecc4033f7738075e1cdc6d8a929da5582540678935b82e7b7ba68":hex:"":hex:"3900bde9fa9ae2cbeee54d04f224":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"dacbadf819eb16a63f6f091d13ed04d4":hex:"b9ebce724b0dcb0989ac2d8e7ff8aaec":hex:"7dc6e2189d8a96f3507e352e05e8fd1b4bab988c2f1c706115887119f63b78084f015d85f6b460901a02880103e4d36e8f6527dfd74e4a3acd3f578c0cc726b528875f701ff8b66e5c11b4689c346a098e123bebfa253362cb86829be73c2b85a6881fa976aa730fabb76775027feec7fd920a6c8965a4a509ea812d7c413a95":hex:"":hex:"8988fca83c8cfb1f8feefac46f04":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"969244c7444f3f3bf193b28f8e8e96dc":hex:"49b2845a1a1c87fa66eb8f78c05ac029":hex:"1414a07e86d8b61d1eff43e1ff4ab42c1c95e159058b74c731e3007d21a5eb78bc17b7e920363a3974aeb8608813dc9a4655199b6703ed337450702d8ab16a89776831b2c7c811fec3acc23598a0aa01680a7bf42a4e258145beb08c9f0eacf2bb5f56d26bea3ad11e1a956a630b80f3d22bf35592b4704f7c464b08b06dd7f8":hex:"":hex:"a291c7527385f037f62e60fd8a96":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"525abe490c8434802b69439c590a5290":hex:"141f79f0501316e66451c41c7af0f0cd":hex:"be440db66d3f81be467605a7b2805ec1df5e71e1b1b04bd7a4d05e912f5aa1912ba08de72df18613b32b7edf78963c48c80c25178b3b19262b85bb829f5377e0b368b500d6d3b442f54172d4ca4500eb5b4d478b602e5dc11d090539455087ce1e5b9ea74355fc06e9b60cbf25a9804d3f8c623fff130abc48bc2d8d116b8366":hex:"":hex:"038c7e95f790e6ca5ce73f9551":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"51644e025659de983f5c8156516b812e":hex:"614837c743d0974e9cca497f13038c02":hex:"60c5d062ade2c5c2dec68b734dd3e58ec474a586d1c4797fdfa2337800510134cb27a10d501927632af3c1febc275010c0d2e5abee630cd2bc792963fa82a42286ab047b934a261927311b40f5f953bfd661427921147cac7613d95ee86e16326ef67c1ed097e8fb87a78753d785de34e03a182232786079cb6be00182e41c9e":hex:"":hex:"77e3deba2c7f9386f85bc4a801":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"08566ca7310302dfb84d76ea0525ba20":hex:"5f20ec9c35c08aa7f1c0e8a20fdbd2b3":hex:"5d84e32768b8d1e7e3c426b3118d48e35491bf1bb454b359c8429220216efd8826be94fe1919409a128ccd8125a594f1691c9421fc3dbbb3f757bf2355bb0d074ceec165eb70e26eb53fa2cb5d84dfae06babb557805ef7b8c61c1bc76137571bcc5e84bf5987dc49013831d78bd497ccc49cde7dca2cb75e7ab967da8c6ce81":hex:"":hex:"873f037fc05252a44dc76f8155":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"dfb54db96383fa911bf5b4fa1218ef9a":hex:"7e849e24983f63f1194b396bbd2d55e0":hex:"d3fb689c5818810dd104693f3306a10b27178444af26798a194f7c2ab31ff3a172904b951942b1a26c8ae5b5b1ee2d86dc78bb72a335fde350766d7d9aef6f549871dd46b04b2cc319fcdd47be437d431ad18cab82d51ca9fa57f4108a8de622a92f87d28c0349fab27757fd773413f559a8c00d30e258c1f6cd96f9759bd957":hex:"":hex:"dada7fc7fed58db462854ef6":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"389cf888474e9403e5f4d0e22ffec439":hex:"ef57794cf6fac9f9cea3e8499b53b1d6":hex:"7ea7f7f4763ad208eb6199285b6b2819756c4e3caf2d0ac6f5076ae6785fecdcc4b138a51860ff8b87aaac3a18c2df778a4818308d458dba28f5017513e1454f60be20dae68736ea6d48b1f9deadb517df63140acbd329fbfbc9b82f3ca1862c9e998f0faff1d3ae60b005bf66829f5cf0c5fa03efbdd92d39351e3954be0257":hex:"":hex:"92726d90ad26130e65f2beb4":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"e55abb2ca36c822bf2a030ac703cb8b4":hex:"d86f7177e8ec90f9e9edf10175d5012d":hex:"777a9d93091de56324c10712243f5541722e0b27e1f303fef6faa387a8666161ab354dbea6c43c82a24e8623bfec39aab13164add6be0dfd55d23204c0975b4ba6fbda51363befde482a9ccc1eb9f151e6ad59c77a1e24dd268389e4686f198a936dd603044a3fb653d63cff80597f5a2913c8a2ec1b7d9dce5728dd56c78c2c":hex:"":hex:"65025250343ed8c09b3fceed":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"586114f3b1dc087e1b2739b28c592dfe":hex:"ae5a38ddd455505284434a4bcfe81ef2":hex:"531ff8c285e532d961f49bd210a5523cd9b19a697a3a3fb26db940a496f253862405b1e825daeda7eb0445c98022b8342c8f8ea20301618483f8ab04b6ebccd7e7fc57878fb544a5bf78fa896f50ac30126ff8afca8a86388666b64c643d16812729bfd7e5c03ba52f7e6ea4c6a685404f7bcbd956964417fa0ea9a6d7290c41":hex:"":hex:"467a815610faeb82":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"cbfe806bddb7f06b3826b097550c68f5":hex:"04c1b6c9fd2ab76fc2adfe15d3421bbb":hex:"cfa86d02599652cb4ffff027b9c6ef2336dc9fe946f64fa5ce83f624e144563d4738381bc5371c3cb55cf41ceda07e62cb635ff37246bfa428785229c6e869d5df69d7949a8577889a29e3d05b788ddd43608d9c14e3f1b51ce2085b9a976fe843e3396a74922babe6797d5f01c37ead623b5b582505bcd29edf8a6ea36b0fc7":hex:"":hex:"0697ac372a9acafd":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"96ce3a095a91effdd91d616f1f02ddcd":hex:"579d6633ec6687afa24ef874899b58e0":hex:"3ff3c0038148ed391b6a10aad623a82fe9209c5ba74482f11506d597b5fc7af977235d8ee9e28cf2160346ddd0e33a5bd1fb67b87dad7167fdd4b2b4000d8460ef7b3e1b59b9d61d06cfbe7945379ed6b650de86f396a38cc70d47b8a349f067d00144c903c276b323be6a929a7d7dd8ae7d254d640cdc1176f98e01a1d8c82f":hex:"":hex:"55a0f61032e048f3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"24ece168c2971cf2b404ea206dc9e29d":hex:"e9db62a42491664a6c46cbb0b2bafc92":hex:"3579f6c0cb3d2a5d0c4548855c7c052d36b6a8dfc60f4ca1b4bbe28ed87306119e71982dd84c4205ceba918d675472753df1b5192d3693dbf6a061c6056e312135ffc5ff426895a7e30f7f675d2cb21de06eea5e3761b94deef7537b985d324864c9ff6ab6e230a1006720f98c958912b604a6d03e3979887c07be3ceaafc78f":hex:"":hex:"d2b15a23":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"d3c3cf993f6740a019e61ce13c29955c":hex:"af900ac348082ff32d2e0ab886079516":hex:"2ddd0e8c99661f0757f04aa79a1ffa24ad48fbe5da68b9e71f7a0cf1b4f2ca9b757695900b7549d48847ae49950dc9b270b1569d29dcbef412216737bd83509c17ae41c34ccda318939cb37a0a380762993a7568c0b07794e78746173dd5c0d921cd50de4b548c1589e142c3dadbad42161aaeda2310f3c6d5c722d9ac69e96d":hex:"":hex:"f2d3a6ff":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"5f1e5bd45ee8bb207ebbd730510ff218":hex:"8846424a194f5de858556e6be5b65d7f":hex:"e968947fc0e49136e730b97f6b16e393d5e4fdf3e4803a23af79211ef59f29167c60ead72fd489da32d2ffa43b2bca2074f9d1b4f5396ca65004b0806cb7c6dfa751fb6afbee3e443f3c9b0e3df6722e0d1320441400c5ca508afb657c2b7f1669b0de21761dccab9a40fc513768bd1f552692626ce35078a2e0e12f5d930647":hex:"":hex:"0d6c15da":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"3997050377cfbb802cc438d973661688":hex:"c95c84c263bdfd5f1de66e7e616cf3fb":hex:"":hex:"b02f0dd373e42c65e8e1db2dd76a432e0b2bf6e630c8aaf0d48af51b3709b175de9a19b3245ae75818274c771c06fae225c4f8b002236712336e805ab006449eb29cc5e29abd82b06c32d4c36ee99acb9a6d7d9eae6ec6ec263c002a22c4a898c74f6abd6d92112367ca7ffe82787c5b39e7012ba22825d3612af3d41e8008a8":hex:"b35b3cf6ed59ccb69dbc9b47a3f284ae":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"c58583f6479d9bc9f1bffddefee66e59":hex:"cee448b48d3506ff3ecc227a87987846":hex:"":hex:"564a9f700cbc1f895e4f4fa6426f73b4956896a15e6127e7560d74e3fd0b980d2ee45b7a6a3884fa613d91d13921e3f90967d7132bdafcd146dd8ff7147ed1964c2bdb3e12f4133d3dbbc3bf030ff37b1d2147c493ce885068d9ba5bebae24903aaac004aa0ab73fe789e4150e75ddc2bde2700db02e6398d53e88ac652964ac":hex:"361fc2896d7ee986ecef7cbe665bc60c":char*:"":hex:"9cce7db3fc087d8cb384f6b1a81f03b3fafa2e3281e9f0fcf08a8283929f32439bb0d302516f0ab65b79181fc223a42345bad6e46ff8bcb55add90207f74481227f71a6230a3e13739ef2d015f5003638234b01e58537b7cfab5a8edac19721f41d46948987d1bb1b1d9485a672647bb3b5cb246a1d753a0d107bff036ac7d95":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"0bc2bde877e881aea512068105694968":hex:"05f0c34ab2e8e8026b0a23719344b71f":hex:"":hex:"1a6369a45e8ef2846c42d54f92d0d140a94f9633432782dcbf094f1444a1d006acd07ef6076cd0faee226f9ff14adc1fb23e3c63ed818c9a743efbe16624981663e5a64f03f411dcd326e0c259bcadca3b3dd7660ed985c1b77f13a3b232a5934f8b54e46f8368c6e6eb75f933196fa973e7413e4b1442b9dee5e265b44255ed":hex:"46bab9fc2dbe87b8f6ca0ed4d73e5368":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"e14f45ba5d1eb52e0412240da5d7b5f9":hex:"d7f8ef12f66f8b7c60aea02ef6ff688f":hex:"":hex:"9a85fda19ce923f093a0c25b0c52f5d9534828af7c7687d22307004ae2d10c4592242c0f2704070307ab55b137780d1e2013a19396ab43ff6a295b63fdcf323456d149758f9a2bb37f1418d62ea6368b24d5067b9c63d2968e06d6586c7e3275faffa005f7c7bfef51303e4c2b2ed4564acd17d50efac9f5e3e7f16ce589c39b":hex:"beede05e4928c808bc660f3de95634":char*:"":hex:"4ad5b9ace0c0c7c07df2900faf37a902899471e7aa4a0a1ad5387f8f56d73f78f619be79a4e253f95b15d52895a05bae9ecffa916d35efacd8baf1c704d2aa4a38c234efc4dcfb191ec0fa0b522328fa5b5dff55e8c443fee660ebe3d8ad85de157a889aefc823720030a4cd6ba94a6309dd61806f0abb27772432018bc61701":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"9a64579f3601b0022d357b601cd876ab":hex:"515efc6d036f95db7df56b1bbec0aff2":hex:"":hex:"88be1f4bc8c81b8a9d7abc073cb2751e209ab6b912c15dc094002f95a57a660b9f08b1b34f5947223205b579e704d70a9ecb54520ce3491e52965be643f729516f5cb018beeedc68a7d66c0d40a3f392ec7729c566ce1e9f964c4c0bd61b291ccb96e3d1fac18a401a302f3775697c71edb8ff5a8275a815eba9dd3b912e3759":hex:"13ea92ba35fced366d1e47c97ca5c9":char*:"":hex:"7fc8565760c168d640f24896c69758355b17310dbc359f38b73fc7b57fe3f4b6ecad3f298be931c96a639df3c5744f7e932b32d222f5534efb8eb5d5b98d218dce3efef5c8c7ce65738bf63412d0a8ed209071218a6fa2f7be79b38d0b2f5b571ec73f1a91721bd409b1722b313683e97d53df19ded95fd471124fa5f294a4bb":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"1bda4acfd10ab635f357935bb0ab7020":hex:"48b77c587616ffaa449533a91230b449":hex:"":hex:"c9ac8d4ef7d83848fdc03664957c28b9b76710797d5db1c21e713e85eb0898892223e52be1644fc7362c95026ebb9c9ca74d7d3739eff10cab1eda00c36628dae0b98d119a14635800e37cd340faa6fbba9c3d41d52722cc3969612b1a8c5ca9a68773f5ee654506cb88ea65fb1eddf5ab6312d0170dc03324e483342448b854":hex:"8325e4394c91719691145e68e56439":char*:"":hex:"1287ad3719508a9be70c19e3b134a2eaa4415d736c55922e9abcfd7f621ea07ffb9b78d8a9668c74bbd548b5e6519ea12609d2d6197c8bd3da9c13c46628f218e7ff81884ff7eb34664ab00f86e09cd623bec248d8898ef054fce8f718a0e0978e8b5d037709c524114ec37809ac3fd1604e223e08f594e7aa12097f7dc1850b":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"d21cf24bc5bd176b4b0fd4c8477bb70d":hex:"208cb9dced20b18edddb91596e902124":hex:"":hex:"2e7108fd25c88b799263791940594ec80b26ccd53455c837b2e6cf4e27fcf9707af3f0fe311355e1b03ac3b5ee0af09fb6fb9f0311f8545d40a658119e6a87ba8ba72cc5fdb1386bc455c8fec51a7c0fec957bed4d6441180741197962d51b17c393b57553e53602f2a343a0871ea2dc4b1506663b2768ce271b89c4ed99eec6":hex:"7edfb9daf8ca2babcc02537463e9":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"3d02e2b02170986944487cba8448f998":hex:"6336077bb83eff1c9ea715de99b372cd":hex:"":hex:"bc1d7553f4a28754cf59ed6f7a901901f04ce62a449db2b45ad60329d0341bb9ba421c783c28a9200b41da8ab6328d826293134a7d0c9a5775dd2735e7767efda4ad183566e0847d6d978abd1a8ab13b16b8323acef05ced3b571631e1e24ad44d65e6ffa64e03c9970e94bacb9f721aba06cda6a08806a3be63dddd8029301d":hex:"0466bb2957281f64b59eafed3509":char*:"":hex:"5f395958f2f7acafb1bca6d3a6ec48b717f2ceeac1b77e1b0edc09a09e4a299d2ec722cc7daf34c8f4121a93c80b2adb20a2fc95afd09320f91085c93c8b082dd703814c9777501d23bf9b328f07f04652592dc5a3f4321626a695b8db8e65c8617c809eb2978d8c9a882ffa82a4bb707c1a8f9a965bdacce5c041bafc94a1c6":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"cd1ad1de0521d41645d13c97a18f4a20":hex:"413873a0b063ad039da5513896233286":hex:"":hex:"588c2617517329f3e1e7ba6206a183dc9232e6a4fa8c8b89532d46235af1e542acaa7eae4d034f139b00449076ba2ef9a692cae422998878dabdac60993dce9880d280bec1419803ba937366e5285c4a7f31a5f232f8d3ef73efe7267b3ef82a02f97d320ebc9db6219fbdf1c7f611e8e5164e9ecf25b32f9c07dfa12aa705af":hex:"d4dbe9cae116553b0cbe1984d176":char*:"":hex:"bd519b7e6921e6026784cd7b836c89bc1fa98e4013b41d2bf091ef0d602e44a70df89816c068d37f0c6377af46c8bfa73ec0d5bc0b61966f23e55a15a83cea49f37cc02213b4996f9353ee2b73a798b626e524b9c15937ecf98a4eded83fb62e6deea1de31e0a7f1d210f6d964bc3e69b269da834720fd33487874489b8932a8":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"1cb120e9cd718b5119b4a58af0644eff":hex:"5a7087989bfe2f6eddcb56fde4d72529":hex:"":hex:"4c8e8fb8c87ff6b994ae71bfbf0fa4529f03bad86edf9d27cf899ea93a32972640697e00546136c1dbc7e63662200951b6479c58ae26b1bd8c3b4f507c0d945d615183196868ec4f4865d1d00bb919a00184e9663f6cb9a7a0ddfc73ee2901f7a56ef2074d554f48cef254be558fca35651be405f91c39e0367762b4715d05fa":hex:"95d8bd12af8a5ab677309df0fb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"315b206778c28ed0bfdd6e66088a5c39":hex:"7ec6f47ec56dda5b52bbdaa6ad2eb6da":hex:"":hex:"6186f57a85b65f54efbf9974a193012b1396fc0ca887227e1865f1c915ac2af9bbd55969f7de57ce9fb87604cf11c7bc822b542f745be8a101877a810ed72bf4544d0acb91f0f9d3c30b6a18c48b82557433d0db930e03bcecc6fb53530bfd99ee89f9e154aa1a3e2a2c2a7a9e08c9aed1deab7fae8ea5a31158b50bca2f5e79":hex:"930750c53effc7b84aa10b2276":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"e886de1c907c97e7db8ec80a79df90f8":hex:"612cacbf33266353d0a29a24532f3c0c":hex:"":hex:"c64cc9596d7c738746ab800f688eec190a4c802c55b2528931d74d294496892b81f53d3073d48f9bef1d58ce3be26547474cdda2868abeab71aff566fff613b4e5bfed1be1d2fff35d8ffa33302d3da1c82e421aa3a23848f31e26d90c0cb2ac2ae136ada73404ed3e0e1d3e7cb355a11cd2a4f9393b4d5eac988104fe1cf959":hex:"76634e58d8f3a48f15875ac1d6":char*:"":hex:"7001d7395efb432e2804cc65c0ba5d4719ce84177ce46292c4fd62a5596bd2bab1d5c44217ac43235bd94489c43d01618a11f047d2e247062c3b88d6e59adaa1f46514fb33b7843483920bee60a41f3cb312322c305d25251b4704fb66da58637c95a9d539731434f60ef44fe3cd6d37e2c8e7089880a563938dcc98b43f08fd":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"3b936e09a6477f3bd52030a29df5001d":hex:"f93105be83fa5e315d73acfdcf578de7":hex:"":hex:"65cf11d1afad19b34f282f98f140315992392f5d4eed4265085b29e1e5553f4783fec681ba2d368486ba6a54c00e71c82c08ca3d097904f021ce4b0acba2d2a7005e28e5f8750ea3d18a4f78363c37583e85104234498942c639a0564b0d80055c21cb7735dd44348298291ab602f345b1d74d624750c0177fbd5cca6f99223b":hex:"91b55bb5e3f3f1abcf335db5":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"dc9e2095de7b1b48481b56bf6a3604cd":hex:"9e5268db19a1b51c0496a160ca76f8f7":hex:"":hex:"ed61ff94a3f84c72147faefa615e2df00324fb01790cf9764c72c1b8ba47f17866a1fd64ee5c2f53865d1bc24ec93165a6774466a59603199ee476c1f2da7d932c8943d126aa172d532d8475a484d42bb45fcf92766feafd7f3e2e3d42d22f6f84a90e7e688232f799d80cd2cc152ddd21ecfb137701ecafcb2b65abe2e4e6f4":hex:"0fa9588536fca71bb44260f7":char*:"":hex:"ef562e301fcf923ff1a1acd3aff9b1c963058228655fe8a66cab01396547dbd2aa1f79a22eefc62944b86d1a31ebe2d17130175b8c003d6755b0eb8b79895b0f7f8046c5ae888a067ba17bc8e11a8f6e5023a9cd42f6461966c28e505b371c0f72a2606bff430a58016e99713d25ce11f10391fb4a922e27989422c6a64f9107":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"3f93901fd7cc88db3ba76a158d658c7b":hex:"7e98de461e6d96c0ce6c8d8b3854cf49":hex:"":hex:"16402fded879fcbfe9405902aa63ca2a520889e0045f687455469b7bb867829a01208b8dc5dcc852d8ee478993c30e6d9ec6408773b367821310a0ae171d38d71e06981ff6e845acffbc794142b87c748e12484c0636419d79be3d798cde59e9dae0a4a4a4346596427e6b235ad52e6a1b02d6f4df0c7de35fc390cae36aef14":hex:"86c9a70e4bab304ae46e6542":char*:"":hex:"1b4c09569b42c469b3ab6b39312c214502ec09f5fe2fed1d1933d13cdc6a7b77a5d135123fa69d9207d6844b0357b26b7a2f53b33a5cd218dacda87b78b09cf259e48e74076812c432e2d0833fb269721f9347c96e158500f9b2283342a35c8de0a022edce711118d72d8fbaa354bfb0ffee465844ef2d37e24ec2cea8556648":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"42289f3d3cd5838e250ef54b128e60d1":hex:"e557389a216ad724aafdab0180e1892e":hex:"":hex:"3edae1d554b67d2036f5fdbdb2945cc112f100adc1b47009c2e23f6a2eaee78d1f39ce8a98f715853cc29fc793fb6981ec3036834188dea7d668185ccc8642071b15de1332f6a59c8a9b4399733eb4b3d8f224af57ba6b4a8e64494bb6630b9d28e7ec3349064350febcef6a3ad1d6cca1b1da74f3d2921c2b28a2dd399c3416":hex:"6f78bc809f31393e":char*:"":hex:"25c476659cc7b343a69088baf868a811ba37daca85c4093105bf98235a90aeca015ab034da008af0982f9b2e80df804c186a9b2e97f74cffd70ebb7771d874fcaf12f6d01c44a8b0ec2898cf4493cf09a16a88a65cd77909bbf0430c9603869bd5f20d56cb51d8a3f0a032fc30d925c96599d296b1ec41c2912bda426adea4fb":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"3d772eabb7f19475665ca2a7e693bcfc":hex:"0747cbb486a013453fde1ca6abb11dbe":hex:"":hex:"e9fc4d86f5b857fa6057b73f967351e06f87288c40a95b9e378c84f1a4c0f4b80ed0a0b44ff90a8973be4199c0c4006fc4f5ea19d5f1fe8b9c8c01f4675ab85afab0592bb3daba36bb4fc7ed9eea867e9d8cc50c19fb62a5a57956e9efacebac5e9f849649d35a329bd68de97bb6e5ff7bef477a86765c2c9ec15e24cbba5c6e":hex:"8e761ffaea68f967":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"fb7fd753ee6eaaf283a42a121dab4e43":hex:"8164929fb54485377ecccc9b9621af5e":hex:"":hex:"fd5cecb2c0287cb8229e97d9cc4b9885f428710528884ce663ed1728cd44cb2df93e56ef17ace0678d1e341366c652f4ba7ee45797d39be4a05c1151e5cde499e13e5d45549b5d95a174d03616d06ef96e9d7b2b6bb0d79a726b253dd64223a5f09611671b234ccf9b383952f8888814b2c167e774cfbf54e9c6b99a753f4fa9":hex:"40a2fa7f4370afb2":char*:"":hex:"6208d068be60f7b04b80fc611062e6caaef9a5cf59f850d174b7446c78c039ea9aefe4885e19c2b33911d32ce1fe3c48ddffa4b03e450fd35da03f40c4e7c5bb3b1c3f3049dbfad3ac81ca1b79cafbaa172f4900e3829d38edea3b64000f93924a801259bc4b2523445c64bc23bfee190b952468507fa4baf6dc2bec66fcf0d8":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"30d757fd73a0fd5fa49159ad0653296d":hex:"b35b8df0aebd0608517f2830e0e70cd0":hex:"":hex:"17d485b258f80d8924e35291118cfdcffd86c47851b65f0b06a7c1f5202de82f3f460fc61b1aa38fdba7c8ded375c92cf005afe63e59d362c0960044af39241b81ca24e85c5faa43903229355b7313fee21b992ef3931d9d2407b32b3cf72dd7acbc7948395eb513cb2fd428b215ba2bd1e29c62f45d0ce231884f62480c6d8f":hex:"954c0e99":char*:"":hex:"022618d2598f79104e918a09c937a82b3db59243b5e13de731fcb912e4366105797ce47f6dce7f08073f2f41e5c15fd6b1ec4b5861469a4880c3b0bd769b78c696ff29c28c9349d5a46a6e5ad9211bd4b708a8c0b6928ebbb0dac1c0a5f5ce6b05de6a50073128566a23f09cc1b826aa5803f9f750aa4debf59f24ae9f98c9b5":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"d9d3cfd5900de5d5e2109e7721cfeef6":hex:"b4b9dfb013de6f7c44779e5a9daaf5e5":hex:"":hex:"e4243cc37cc32dfcedf9bb76890e706af6ab1e06b290b8ccfe2a55e5dabe68cb390f7636dc9676b431d4dc8ad3f6d989e510194294ab7ab0556789046743cf374d8b6462f5f95a17f3f44337d6c69ee47b0e1ad7e5ce6f9b224c54099a104e70d2d06af869b921ea47febe08f90c591ed49c1f12003afceabd2c7bba458a0111":hex:"2b81e8ce":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"68dc138f19354d73eaa1cf0e79231d74":hex:"e7147749560f491420a2d893c075bb76":hex:"":hex:"ce345567a76bc30d8b4fd2239788221cfa75e1a310aeeeb8c355f8eea57d80967f3047fbd4e6173fac5caeb22151fa607065953c4c35e0537b9e3788cc80de9eedf2a340698bde99a6a1bdc81265319da3e52f7a53883b7f21749237fcfd3cd4f149bb2be7a4ddd9ef0544cfe0789040d1dc951b6447304942f03ab0beae8866":hex:"70a83f6f":char*:"":hex:"64b021612c78b3e192e8349d48b77d02927e7fd70c7160d37cb8ef472f6bcd9df9d93431627c1c80875e208724ae05f94fdd2e005e9707b78a1bf3bbca7beec4b03ddd4d9de6235ffd6d84a8b9a1842e104c1e22df4566f6c4d3d4e3d96a56b9b8a5cdce9da70aa236109b289266036f285564060b204dfd7ac915eea0dd0b1e":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"7362c86344e0aefb0cf0d04768f9c05d":hex:"7e8d12c2f0dcf4f792247134234ac94b":hex:"86d2b5debc3b10495da353d6821f6cad380776d805bd8660b08dcdb1acd87026e4f344b547a4db47b5f44cded314bec4ce9a417ce40a2acd5a21460c42dfcd27483abf3f38dd8cc5fa523b6768a26513df5896435baa97781cff1966e2e3d6ec6d0a9cdc013de5a50e4d46831667055bad04f784024a82f9cd087ae4cd37dd64":hex:"8baffc7836004deb87c0111d47c182512bf861874021ddfcd559acf2c4a51cf5bc4bfdee2d039b9c005b6af95a2607643dcf4d9cd9d62412f709334556db22fc91d7b40438505d6806ccb2f2c21ae731bc1f1c825d28a71ab27095a39985e96ccd07cfb2e75243ccafd474494a2338c324ef533ca5f17d2ac1b1883140342ced":hex:"9594da428fd8c1b13ecb23afa2c1af2e":char*:"":hex:"e2c424f42aedd56f0e17a39d43ad19c8e2731efc7a25f077aef51d55280b10e667e338bd981b82a975ef62bf53bc52496b6995d33c90c7ae14767c126826e3f32bd23f444ddcfd7a0dd323b0ae2c22defad04ce63892b45c176bd0b86f5fa057a3dc371359744cb80bbfb4a195755136a0ea90b4044a45bc1b069f3cb3695c04":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"58748bb204ccb7bdafdbf739b6c19a3e":hex:"93ac298c73c88e127a4d9dd81bf24e3d":hex:"8f168fc4d1da13bdbefae3f9d6ac1d8cb19fcec1f43f727951af0a466d8826649a46c3cb50c045ea83849fce0eedbc042a1a435e6d9d59017997a2d5459b940078b8a7f3b6b0ff279ff8c560248296a17240ff1b0643d1f436b6e3f2079363fc49fb45f410debbdde083b92057916368cb807d603cb82e2c0dc01658bff7f1ab":hex:"b72902c9ebb72a86be539b19a52fd9af00aa4de081d90c0d8ad580ebb5900177a036f40a1e9b43e3a07d715466526d6d7544e5a5551805b62463f956cd519fc99182c2d54bd62fc7ffc6e5ebf1503859b706da11a1b6c707a67a70789dbfc10ef726bd360f9f2347326e068e757c8443ddc9308a171e682359ae1bfe87194ab5":hex:"efba4589d4a03555766bbc3b421dd60f":char*:"":hex:"d5c97a659f016904ff76286f810e8e92da6f8db2c63d8a42e617760780637e32105503440cdf04d1fe67813312f1479fda8d746c8b0b080591eba83850382f600e9d8680516c6579669f0b3d0a30323510f9de1c92512790b8347751994d022156cae64da0808a649d163a0e99e869fdf224b7c1a6a8fbc613d5917eca8ee08c":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"6cc13cbd62428bb8658dd3954fe9181f":hex:"86740da7ce4efbed70af55e1d6c10fdf":hex:"be561ac15e3cfda624b422af97c26719c140bb50e4a993d636efe9c7f1963fb9047a0762169b571a698ff310bc417e34d4039b7562a95af710ccc1b197964a376c986fd2ed8ac4b0c7b4e843c37a41366f2f483c821a1823f317416c7e4f32eed9b9dc2ae1a2f3ed32c4b3187358a2329aa42191b7c2fe87b6e27ff20303cb29":hex:"2c9ec982d1cfb644ddbc53c0759b10493206d5186affc6882fbb2ba3aa430f9bae1209db2d78dcc125f3c909a54dd84fdff96c71e678216a58390ef4308bdd90f94f7109c4edefa76a74fda64b201b7a435bbabc27298f3eaa4c2d1393bd584f811fff52638f6ad2f6d86a8c3c9c030d9d4264c8c079592a36178d25991cff09":hex:"76b990a1e010e5f088f6ae90bec40b32":char*:"":hex:"0b9a5f5d2e6852b75b9cf26c1b310b2200e56dafcf3c941478862cdf9737ac8e2cb9b38d41bd4a1872ea1b4cfd51a1a0b9b743aca439eefa10de8459a0a7a221c5429b3dee393f17031ca6c399df8e05657c3db55be9c9dd29e690042a4ed8db732efce7c58d6b20a2a0f7c79e42e5ada43b87ab00f481c20cac1b35514dcdc9":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"286d3f5080cfe88538571188fbeb2dd5":hex:"da6140bd4dc6456ddab19069e86efb35":hex:"5d350a04562a605e9082ebd8faec6c27e561425849e7f0f05f5049859c2c1bd2c4682ebf9773fab6177d2601fd5a086cefc3adef5a2f8f6b5dc9e649e98dd0a3d1a2524419f01305bd0fcfff52d84a20d1b14dea2138dcc54eea2bf263c6fe27c3e7255f1f359d0d00fb1b350d7a04965af30027632520197e85eb41de6bb286":hex:"55135928997711360622eda1820c815aa22115204b1e9bb567e231ac6ea2594b4d652627b6816bdc6c40a4411fd6b12fab9a1f169d81c476dbf77151bff13f98ca0d1dc0a68ea681652be089fadbc66c604284eebfc8ce4cf10f4ca6bda0e0f6634023db6e3f0f1de626c3249a28a642ecc9ec5ff401e941fa8a3c691566c0ae":hex:"d90d34094d740214dd3de685010ce3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"726ae113a096769b657f973ea6d2d5dd":hex:"2f9900226c97585d200dd20a279c154a":hex:"761663c3fcbf1db12bc25546b2425b8229b3153e75f79fa63958819caee3febff74603d99264b5a82ef5980439bef89301ae3206a1d01a3bbd7a6c99d27d1e934cc725daeb483f826c2c9d788fd1f67a627864cf8b5f94df777bb59ef90cb6781a2000e6f0baa4f1ea4754b47bb7cbd2699f83634e4d8ab16b325b2c49f13499":hex:"90636012ba8c51d16f8f6df3d3bcabc3f09aeffbe2a762f62e677913188045b861b2e7d9a7bd93dcee46e9e4832e497a6f79db52b4e45c8dab20fa568ff9c4ace55be3216f514a3284768a25d86b1c7da5377622f3e90ed4c7bd4571715af4d0a2ab5181d0475f699202e4406bb9cfdbd4fa7f22d0dd744d36b3223134658496":hex:"d095bfb8990d4fd64752ee24f3de1e":char*:"":hex:"9f7759c6d24fd9aa0df02a7c0cc5f17e61622c63195f85dfafa5d820d3ad218c7288ec017821100f1fade10f9bb447a4a01e3698b045548c7619a08f2304e2818a9bf55e70b40f8b994b7dcf0cb243848cf3f6fdfec3ebbb147d01df84a3ec62cd8fa5d78ad9f2f28cd288a35eb49a5172339e9872e8e7e3350b0d69f59acd07":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"73a9eeda721c6f292e6b399e2647f8a6":hex:"c1e80eb723960049cc4448b66433f1cf":hex:"fb2a0b1f817404e74aee0a6ec8f2cd86f0c9114ed367b2690c44ad80f9d3377d7fd5066beaf1daa739d27ed3fba98379188016b1fe901204a174f9ffca370c181aece5e5d40939a0d460913b40b895e78a3b80ddf3d613c05e4e27bfd161ea2ef42271a2679f2cdca5b728ffb2319781c946a4f3ecacf486b754b30bb04ea60b":hex:"215fc7e52abe4c751ca2f7f9a5cbde9ab8b44b8d4054bb62dcea6df5b936145ca6ec83a2b78b070638fd6e5ea3bad5d0caf1b8f755f391c3e0962a92337e3eba575585eb83680075fc818860388c587746af78d5fc75ccd0a63f1612abb1ba0f04a2228ca27fbddba4878f9b2683683f516b6d6fe4f6622e603bd3c5ad45e332":hex:"e08161262234d0d5be22f09e5646bf":char*:"":hex:"b5e286183f16dd9403bec6786bd4836cc6add47947ef111fb1d5503c18c333c8fe60959502f58390d0e0f69fbe5fee13c72aed65fe6e32f6ea45877fe44f8a556aa5157b112e572197c1c350b7943c6cf2e9146018599524d27599f09c86027f2c5927e4a20c63833870e8369baa36ecc07cdb3ced520b5ae46869ff357ca089":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"90dbda7397d8fc46215a1218a6ffd0d8":hex:"7be477d14df5dc15877ae537b62e1a56":hex:"7358ddf1310a58871a2f76705f1cf64223c015c4d1574104d2e38783bb866205042f05c86e76c47a2516ce284911f1d2cbee079982dd77167e328b8324eec47c9244cc5668cf908c679bb586d4dd32c6c99ed99a6b571cf18b00689463e7a88cea6ea32d288301a10a9139ed6092ffe298e25b8cfb6b4be8217f16076dcd0a90":hex:"4f82a1eca6c9184240f50f7e0cfec07ec772cad5276d93043c462d8364addd9a652eed385ccc6b0faa6ca679ab3a4c3d0be6a759425fd38316ee6a1b1b0c52c1bb3b57a9bd7c8a3be95c82f37800c2e3b42dde031851937398811f8f8dc2a15bfd2d6be99a572d56f536e62bc5b041d3944da666081cd755ec347f464214bf33":hex:"776d871944159c51b2f5ec1980a6":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"0c85174d428fc1c7c89ca5d1b8aaba25":hex:"b3c9dfa4c55388a128fbf62aa5927361":hex:"3f552d45b61cf05ae2aa92668e89f3338a15ec7c5b7113b6571cfcd9e4c4a962043ccd9323f828dd645e8a91b007ce2112b7f978ad22ee9821698a4f2559d987ae4421452ad2e8d180953297156426d4540aff2104d8637b56b034a3a1823cf962bffbc465fe6148097975a8821ca7487e6e6c7ff4ee4de899fe67345676bb1c":hex:"3735cbfb8000260021d1938d2a18e7737f378ecddb11a46ce387bf04e20bbfcc902457637fd152ab87017185601f32a7f906057123b6c2da31a1069c93e3cacc59a359aebd3e31b302e1a1f7d5d8f1b2917a8fe79181fa633b925ce03a1198dac48f4c959076b55bc6b3d50188af2c6aa33d83698aa8db22649f39825ba54775":hex:"1e7dec83830183d56f443a16471d":char*:"":hex:"3d98cabca4afb7c1f6b8eeed521f4666ae252ac12d17ebf4a710b9a22d839b69458387ba4bbec2f6400e0cff80fbe4682c24efcd3b8c594d9b515ca7842c9d5988c42b59b6526c29a99256451e2927f5b956ef262f97c733dfa8bff73644473b9a8562bdfca748f4733ddce94a60024dfbfcde62fb3cbd7c3d955012d5338b91":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"d89f06eb07744d43d44734faf9751d07":hex:"185f8d033713ee629e93561cf8d5acb8":hex:"743bcb671d0aa1c547b5448d64d7c6b290777625ba28f25ca0fbf1fc66495a2fde0648a8db51039b0e7340d993aef8afb48269e660cb599837d1e46f72727762d887ee84c073d6136d1b0bc7d4c78f5673a4a6b73375937e8d54a47304845f38ca6b4f51cf14136a0826016535dc5ed003e38c3ac362b9d58ba8b555a05a1412":hex:"36cc3b2f563305208a03378f7dc036119f7de3fee77cefac06515853d36609a622382ed026c59783fbc0d9910767874c516e10c7bf3e3d104f73b3463c8d93a63418c76cb0d05e62e9c8642cb4f32caced2620912cb6c79e5110a27d5fba1ef3b4d0578077858526c5e4254365f2b2ab47a45df4af08980b3b7a9b66dff5b38c":hex:"fcad48076eb03ebe85c6d64f6357":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"6150f14dc53f391e815acfabed9f9e20":hex:"7e92dd558bd2662c3a539dfe21a352cf":hex:"9b4624e9118e6aa5dc65b69856638f77fd3f9f562046f50ba92a64e988258637932af7979f000505b84a71ff5dd7b60bad62586b1a8837a61c15a1a1ba7f06668272c28169915d7f06297b6c2a96c8c44203a422bfd25500c82e11274ffe07706365bfd3da34af4c4dd8ad7b620de7284a5af729bea9c4ed2631bdcba2ebdb7d":hex:"fd8f337017e1b60d6618e6e4ad37c1f230cdeb78891579c2c63d4e6a4f7d2cb7252e99de333c73db45958808c08e91359c885a7385ab6f9ed98a27927a5b83c3a456ce2e01869712675e527155ba1e339ac14a3ccd7a4b87360902f2b8381308fe5a4eac5c90d0b84da4bf5b907de6ff3139cffd23b49a78750006100183032a":hex:"922a7b48ad5bf61e6d70751cfe":char*:"":hex:"f272a3ee9b981f97785cc6fad350e516d72d402dae0d8a531c064ec64598b2a5760f9b279c10aa1ff71bec07300ab0373187138e7a103fc4130105afa6b6346f3d368b40d6f542375de97878ad4d976d64c5c4968a17be2b1757a17c03100231c34721250cd37cc596678764083ade89ae3b1a2151ff9151edcd7ba0eb8a4649":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"3e8216072ed6fcde0fe0f636b27ed718":hex:"23a122cf363c3117b8c663388c760ee4":hex:"28ce0b4a44fa83323e060f3ff6436b8829d4f842090296bdc952b6d4a6b1b1a66be06168c63c4643e6ac186f7ffd8d144f603b2d4bc0d65be48121676f9fa1f359029c512bebfd75075ff357bc55f20fc76d9f2477c9930f16408f9f09c5ae86efa2529d2f1449ceeb635b83ca13662860ef9ac04a3d8ab4605eccd2d9ae5a71":hex:"3b50f2a8dca9f70178503d861d9e37f5edfafc80ee023bfed390a477372986e4794175ec22ac038c3461aba50c9b2379cab48512946efdfe2cb9c12a858b373a5309324f410e6a05e88ba892759dbee6e486dc9665f66cb5950ea7e71317fa94abbebd67a3948746a998173fbbb4f14f9effbdf66d3b6e346053496a4b1934ce":hex:"531a65cc5dfeca671cc64078d1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"1af434b73a1210b08595ffa686079832":hex:"ae318f3cb881d1680f6afbf6713a9a2f":hex:"3763c9241be0d9d9a9e46e64b12e107d16cca267ff87844c2325af910cc9a485c7015d95bbe62398864d079fb2b577ba0cfad923c24fa30691ad7d767d651eed4a33d0be8f06fed43f58b2e0bb04959f10b9e8e73bd80d3a6a8c8ce637bfbdb9d02c2b0a3dd8317c4997822031a35d34b3b61819b425c10c64e839b29874ddfb":hex:"13f6c1c2d4edcf1438a7b4e85bcd1c84a989831a64d205e7854fce8817ddfceab67d10506ccf6ed9ce50080ef809e28e46cba7b0c96be6a811f59cd09cb3b7b3fe5073ee6763f40aee61e3e65356093f97deef5a8721d995e71db27a51f60a50e34ac3348852c445188cfc64337455f317f87535d465c6f96006f4079396eba3":hex:"2ae7350dd3d1909a73f8d64255":char*:"":hex:"3cd2a770300ce4c85740666640936a0fe48888788702fc37e7a8296adb40b862ec799f257a16821adaa7315bd31e8dec60e4a8faeb8ba2ee606340f0219a6440e9c1d3168425e58fac02e8a88865f30649913d988353ab81f42a5ad43f960055f0877acda20f493208c2c40754fbf4ccee040975aa358ea3fe62cbd028c1611a":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"04036d2f5273c6ff5b8364aa595359c9":hex:"edc433c381140dff929d9df9f62f4cb6":hex:"404acfeeea342aeea8c8b7449af9e20ddf5b85dc7770d2144a4dd05959613d04d0cfece5a21cbb1a9175ddc9443ffacd2085332eb4c337a12a7bb294c95960e7c0bde4b8ab30a91e50267bbd0b8d2a4ed381409ea2e4c84f9a2070a793ce3c90ea8a4b140651b452674f85d5b76d0055df115608bf3a3c60996108023ebabe65":hex:"acf79b6099490af938fb5fd8913255b3daa22786b03356cdf3e0ffaf570f9f866047b8e15c9953f893d97e7098265297396868ebc383be8547e8ec9d974b6a65b5dc5147cdadef2e2ad96696e84e44f364c2ba18c8aabe21f99489957b2b5484bf3fb4fecaf5ddaa1d373e910059c978918a3d01b955de2adb475914bf2c2067":hex:"71f818f1a2b789fabbda8ec1":char*:"":hex:"4729cb642304de928b9dca32bb3d7b7836dd3973bbccf3f013c8ff4b59eca56f5d34d1b8f030a7b581b2f8fdc1e22b76a4cbc10095559876736d318d6c96c5c64cbd9fbd1d8eb4df38a2d56640d67d490d03acc1cd32d3f377eb1907bbd600f21d740b578080ba9c6ddc7dc6c50cdcee41fec51499cb944713c0961fc64f5a70":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"59fe44c6e28d025b2ad05e6e867051ab":hex:"eb0c30320029433f66d29b3fd5c6563b":hex:"49b7418b87374b462d25309b1c06e3132a3c8f4a4fcf29fed58e0902509426be712639db21c076df7b83dcfcc2c2c8fcc88576f4622a4366eb42f84ebf760e3eb22b14f8b5ff83f06a6f04a924eaab05b912e126e80da22461abf7f1925fd72ebdf2aea335a044726e7c2ebbb2b8aeebab4f7de5e186b50f275b700794d895d8":hex:"20e66bae1215de9a87a0b878d39015d17e0d4542a1aaba2000cefbd5f892c26a410f55f0d7dc2f6b66690f2997032985e5516e068bfc6ec8a3669f566e280b0cefded519023b735ee3bcbfc5b6ce8203b727933a750f9bd515ec448c1f3a030aa0f40e607727a3239ebbe655d46b38a3d867e481ccf0fadbf0d59b665d2ed6b5":hex:"296c4cdaeb94beb2847dc53d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"c314264cee0e6db30ebe9b2f6d4991b2":hex:"4cd4431bb6dea8eb18ae74e4c35a6698":hex:"0eeafbfd04f9a0ea18e5bdc688c7df27183f346187e9574b61222006f2b3e12e8d9d9bf1f0f15949ee1a7ee8e5c80ee903b8ba2860e15ccb999929f280200b159c2adca481748d0632a7b40601c45055f8cb5126148e6cbab2c76f543537ab54eb276188343cea3c4ab0d7b65b8754e55cfe3f6a5c41b6ea3c08b81fcecc968a":hex:"d436ff9abfb044a332c4e009b591719a67b12a5366da0a66edf19605c34daa37588e15dd3da0d1a097215e469439de79cca74e04cd4904e5b4a6cb4e0ea54e6ba4e624ed6bd48be32d1ef68ffea1639a14e91a5914c2346ea526df95cbd4ad1b8ee842da210b35b6315c3075ecc267d51643c4b39202d0ad793cbb0045ebdc19":hex:"fda18d2f795d900f057fe872":char*:"":hex:"cb9e0fb0ac13ca730b79e34745584b362d0716c344e4de90d8352b21117471ba12c97f193150b33774baee5e4a0f11b10428eaf0106c958e16aa46c5f6f3d99eed93d1b9ba3957bed05a8b9cc8c5511cf813a66dc7d773cb735b0523d8d6b0b80639b031ddc375f714c6dd50055320cd7ed44a471c8d5645c938a9005d0b5050":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"26072018bd0bda524b5beb66a622c63e":hex:"c783d6d3b8392160e3b68038b43cf1f4":hex:"8ae7c809a9dc40a6732a7384e3c64abb359c1b09dcb752e5a6b584873e3890230c6fc572b9ad24d849766f849c73f060fc48f664c1af9e6707e223691b77e170966ed164e0cc25ede3fbc3541c480f75b71e7be88fe730d8b361ea2733c6f37e6a59621de6004e020894b51dfb525973d641efe8d5fd9077a0bbc9dc7933a5de":hex:"91c524b359dae3bc49117eebfa610672af1e7754054607317d4c417e7b1a68453f72d355468f825aeb7fde044b20049aed196ec6646cce1eeeccf06cb394286272b573220cdb846613ebc4683442dccc7a19ec86ef1ec971c115726584ae1f4008f94e47d1290d8b6b7a932cfe07165fd2b94e8f96d15f73bf72939c73f4bd11":hex:"edffe55c60235556":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"201751d3da98bd39ff4e5990a56cfea7":hex:"6172468634bf4e5dda96f67d433062d7":hex:"ae2d770f40706e1eaa36e087b0093ec11ed58afbde4695794745e7523be0a1e4e54daade393f68ba770956d1cfb267b083431851d713249ffe4b61227f1784769ce8c9127f54271526d54181513aca69dc013b2dfb4a5277f4798b1ff674bca79b3dec4a7a27fcf2905ae0ce03f727c315662cd906e57aa557d1023cce2acd84":hex:"2965af0bde3565a00e61cebbfe0b51b5b5ee98dbbfff7b1b5bf61da5ba537e6f4cf5fa07d2b20e518232c4961e6bc3ae247b797429da5d7eee2fc675b07066ac2e670261c6e9a91d920c7076101d86d5ef422b58e74bdc1e0b1d58298d3ee0f510ee3a3f63a3bbc24a55be556e465c20525dd100e33815c2a128ac89574884c1":hex:"66c247e5ad4e1d6a":char*:"":hex:"efd064d4b4ef4c37b48ddf2fa6f5facc5e9cc4c3255b23a1e3765fabb5a339fa0eda754a5381b72989fc1323ff9a6bbaecd904eb4835e5a511b922927574673061ed8de23299ea1456054e7ebb62869878c34fb95e48c8385b5ebceecb962654cf1586b3f54e7887ce31850363e9a22be9e6fbc22e694db81aa055490495dbf2":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"3bc0dcb5261a641a08e6cb00d23e4deb":hex:"16fa19f69fceed9e97173207158755a5":hex:"92ddd3b98f08fc8538f6106f6434a1efa0a7441cc7f6fd0841103c2e4dd181ea0c9a4811b3cb1bad1986a44d8addabc02dd6980daf7d60405b38dadc836bb1d0620ceab84e0134aca7c30f9f9490436b27acfd7052f9d7f0379b8e7116571017add46b9976f4b41431d47bae6f5f34dc42410793bc26c84bfe84fb53ae138c85":hex:"d533ad89a1a578db330c01b4e04d08238b020e36aebe87cf2b0bf0b01f1ce4197be8b0596e475a95946918152e8b334ba89f60486c31f0bd8773ca4ff1319fe92197088b131e728d64405441c4fb5466641f0b8682e6cb371f8a8936140b16677f6def8b3dd9cbf47a73f553f1dca4320ad76f387e92f910f9434543f0df0626":hex:"f5289e1204ace3b2":char*:"":hex:"be0c30deeffbe51706247928132002b24d29272eee6b9d618483868e67280236632fa1ae06f3ef793f67bd01b1b01f70a827367c1cd28f778910457c7cbd977dfefff1f84a522247e19b2fd01fa22ce67cef9503d45c80a5084741f04108f2462b7cdd06a8f1f044fea2b05e920bcc061fbc6910175d732f45102a63c76ae48c":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #0 [#2] +depends_on:1:2 +9:exp:1:hex:"239c15492d6deec979e79236baca4635":hex:"916b8b5417578fa83d2e9e9b8e2e7f6b":hex:"b39eb732bc296c555cc9f00cf4caaf37d012329f344a6b74a873baf0d8dde9631f5e57b45b957d6aec0f7978e573dd78b43d459b77756037cd64d10d49966eb3a2a08d0f4d5e4f5dcb8713f4e4756acdf9925c5fc6120c477f6dffc59b0b47a3d5efd32b8c9052b321bb9b5129e5c6a095d8de563601b34608456f58d7221f2d":hex:"d64886ce5f5b4adb7fe8f95904bc1461749c931655b02819ffdd0ae31bad4175125aa68962f8e36ec834a7d53a191a74c937e81ec93ad9ce0d3b286d3c11ff1733c0b7780130768c120b1833933561cf07399ca49b912370ae34f0e49b9c8cb9920eddc6816ab2ae261c6d7f70058a9b83a494026f249e58c4c613eefafe6974":hex:"fc08cbbe":char*:"":hex:"95c169721ea007c3f292e4ec7562a426d9baa7d374fd82e1e48d1eaca93d891d5ffa9acf5e3bd82e713ac627141e26a8b654920baffab948401cc3c390d6eea9d7b78c4fcb080b0aa9222e4d51bf201ccfd9328995831435e065d92ad37ee41c7c4366cc1efe15c07fc0470608866aeea96997772ecf926934c5d02efe05f250":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #1 [#2] +depends_on:1:2 +9:exp:1:hex:"db68a96e216b0dd9945f14b878487e03":hex:"8a1a72e7bb740ec37ea4619c3007f8ae":hex:"1b4f37190a59a4fff41d348798d1829031204fd7ac2a1be7b5ea385567e95e2ace25bf9e324488dd3ab8ce7f29d4c9a4f4b1a8a97f774871ee825e2c17700128d3c55908d3b684a1f550fdb8b38149ff759c21debdd54e49d64d3e8aac803dfd81600464ed484749bb993f89d4224b3d7d55c756b454466ff9fd609019ed5e83":hex:"5634196a32d4cbfa7a2f874a1e0f86287d2942090e0cc6a82bd5caf40136a27ddf524a17713ce4af04ca6cb640a7205cce4ac9cb2d0ab380d533e1e968089ea5740c0fcbfa51f2424008e0b89dc7b3396b224cfaed53b3ac0604879983d3e6e6d36053de4866f52976890f72b8f4b9505e4ebdd04c0497048c3ce19336133ea4":hex:"9251d3e3":char*:"":hex:"0c6bb3ee5de5cbb4b39d85d509bcacb3dda63fa50897936531339882962e8dc54c285c8944768d12096d4a3c2b42ffa92603cee2da9b435ec52908fca6d38ed74f898fe0ffa761f96038ff7dfeccc65bb841c3457b8de1e97d9bee82e2911602ee2dc555b33a227424dea86d610d37c447776295b412b412903ad2cede5170b6":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #2 [#2] +depends_on:1:2 +9:exp:1:hex:"659b9e729d12f68b73fdc2f7260ab114":hex:"459df18e2dfbd66d6ad04978432a6d97":hex:"ee0b0b52a729c45b899cc924f46eb1908e55aaaeeaa0c4cdaacf57948a7993a6debd7b6cd7aa426dc3b3b6f56522ba3d5700a820b1697b8170bad9ca7caf1050f13d54fb1ddeb111086cb650e1c5f4a14b6a927205a83bf49f357576fd0f884a83b068154352076a6e36a5369436d2c8351f3e6bfec65b4816e3eb3f144ed7f9":hex:"fd0732a38224c3f16f58de3a7f333da2ecdb6eec92b469544a891966dd4f8fb64a711a793f1ef6a90e49765eacaccdd8cc438c2b57c51902d27a82ee4f24925a864a9513a74e734ddbf77204a99a3c0060fcfbaccae48fe509bc95c3d6e1b1592889c489801265715e6e4355a45357ce467c1caa2f1c3071bd3a9168a7d223e3":hex:"8e5a6a79":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"806766a4d2b6507cc4113bc0e46eebe120eacd948c24dc7f":hex:"4f801c772395c4519ec830980c8ca5a4":hex:"":hex:"":hex:"8fa16452b132bebc6aa521e92cb3b0ea":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"0c2abdcd2e4ae4137509761a38e6ca436b99c21b141f28f5":hex:"335ca01a07081fea4e605eb5f23a778e":hex:"":hex:"":hex:"d7f475dfcb92a75bc8521c12bb2e8b86":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"eef490a0c2ecb32472e1654184340cc7433c34da981c062d":hex:"d9172c3344d37ff93d2dcb2170ea5d01":hex:"":hex:"":hex:"017fef05260a496654896d4703db3888":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"fe0c3490f1f0dba23cf5c64e6e1740d06f85e0afec6772f3":hex:"f47e915163fa3df7f6c15b9d69f53907":hex:"":hex:"":hex:"14e1a057a2e7ffbd2208e9c25dbba1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"4356b3b1f308df3573509945afe5268984f9d953f01096de":hex:"a35b397b34a14a8e24d05a37be4d1822":hex:"":hex:"":hex:"e045ecba220d22c80826b77a21b013":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"e2898937cc575c8bb7444413884deafe8eaf326be8849e42":hex:"169a449ccb3eb29805b15304d603b132":hex:"":hex:"":hex:"3a807251f3d6242849a69972b14f6d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"75683c7df0442e10b5368fcd6bb481f0bff8d95aae90487e":hex:"538641f7d1cc5c68715971cee607da73":hex:"":hex:"":hex:"07d68fffe417adc3397706d73b95":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"0724ee1f317997ce77bb659446fcb5a557490f40597341c7":hex:"0d8eb78032d83c676820b2ef5ccc2cc8":hex:"":hex:"":hex:"7da181563b26c7aefeb29e71cc69":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"be2f0f4ae4ab851b258ec5602628df261b6a69e309ff9043":hex:"646a91d83ae72b9b9e9fce64135cbf73":hex:"":hex:"":hex:"169e717e2bae42e3eb61d0a1a29b":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"583c328daecd18c2ac5c83a0c263de194a4c73aa4700fe76":hex:"55e10d5e9b438b02505d30f211b16fea":hex:"":hex:"":hex:"95c0a4ea9e80f91a4acce500f7":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"b40857e7e6f26050f1e9a6cbe05e15a0ba07c2055634ad47":hex:"e25ef162a4295d7d24de75a673172346":hex:"":hex:"":hex:"89ea4d1f34edb716b322ea7f6f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"627008956e31fea497fb120b438a2a043c23b1b38dc6bc10":hex:"08ea464baac54469b0498419d83820e6":hex:"":hex:"":hex:"ab064a8d380fe2cda38e61f9e1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"8c386d67d7c2bfd46b8571d8685b35741e87a3ed4a46c9db":hex:"766996fb67ace9e6a22d7f802455d4ef":hex:"":hex:"":hex:"9a641be173dc3557ea015372":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"711bc5aa6b94fa3287fad0167ac1a9ef5e8e01c16a79e95a":hex:"75cdb8b83017f3dc5ac8733016ab47c7":hex:"":hex:"":hex:"81e3a5580234d8e0b2204bc3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"c74620828402e0bdf3f7a5353668505dc1550a31debce59a":hex:"cfbefe265583ab3a2285e8080141ba48":hex:"":hex:"":hex:"355a43bcebbe7f72b6cd27ea":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"1eb53aa548b41bfdc85c657ebdebdae0c7e525a6432bc012":hex:"37ffc64d4b2d9c82dd17d1ad3076d82b":hex:"":hex:"":hex:"34b8e037084b3f2d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"50d077575f6db91024a8e564db83324539e9b7add7bb98e4":hex:"118d0283294d4084127cce4b0cd5b5fa":hex:"":hex:"":hex:"507a361d8ac59882":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"d9ddca0807305025d61919ed7893d7d5c5a3c9f012f4842f":hex:"b78d518b6c41a9e031a00b10fb178327":hex:"":hex:"":hex:"f401d546c8b739ff":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"6ed8d8afde4dc3872cbc274d7c47b719205518496dd7951d":hex:"14eb280288740d464e3b8f296c642daa":hex:"":hex:"":hex:"39e64d7a":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"80aace5ab74f261bc09ac6f66898f69e7f348f805d52404d":hex:"f54bf4aac8fb631c8b6ff5e96465fae6":hex:"":hex:"":hex:"1ec1c1a1":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"23b76efd0dbc8d501885ab7d43a7dacde91edd9cde1e1048":hex:"75532d15e582e6c477b411e727d4171e":hex:"":hex:"":hex:"76a0e017":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"94c50453dd3ef7f7ea763ae13fa34debb9c1198abbf32326":hex:"1afe962bc46e36099165552ddb329ac6":hex:"b2920dd9b0325a87e8edda8db560bfe287e44df79cf61edba3b2c95e34629638ecb86584f05a303603065e63323523f6ccc5b605679d1722cde5561f89d268d5f8db8e6bdffda4839c4a04982e8314da78e89f8f8ad9c0fee86332906bf78d2f20afcaabdc282008c6d09df2bfe9be2c9027bb49268b8be8936be39fa8b1ae03":hex:"":hex:"51e1f19a7dea5cfe9b9ca9d09096c3e7":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"c6a98102af3d875bcdebe594661d3a6b376970c02b11d019":hex:"bea8cd85a28a2c05bf7406b8eef1efcc":hex:"f2f80e2c042092cc7240b598ab30fad055bce85408aa0f8cefaf8a7204f0e2acb87c78f46a5867b1f1c19461cbf5ed5d2ca21c96a63fb1f42f10f394952e63520795c56df77d6a04cb5ad006ee865a47dc2349a814a630b3d4c4e0fd149f51e8fa846656ea569fd29a1ebafc061446eb80ec182f833f1f6d9083545abf52fa4c":hex:"":hex:"04b80f25ae9d07f5fd8220263ac3f2f7":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"ec3cc45a22fdc7cc79ed658d9e9dbc138dcc7d6e795cba1a":hex:"b10d9c70205e142704f9d1f74caee0f6":hex:"714994017c169c574aaff2f8bad15f8fa6a385117f5405f74846eca873ca4a8f4876adf704f2fcaff2dfa75c17afefd08a4707292debc6d9fafda6244ca509bc52b0c6b70f09b14c0d7c667583c091d4064e241ba1f82dd43dc3ea4b8922be65faf5583f6b21ff5b22d3632eb4a426675648250e4b3e37c688d6129b954ef6a8":hex:"":hex:"d22407fd3ae1921d1b380461d2e60210":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"5a32ebc7a2338038ced36d2b85cbc6c45cca9845a7c5aa99":hex:"9afe0882e418c9af205eeb90e131d212":hex:"61ff8a8bc22803f17e8e9f01aff865bc7d3083ff413ce392a989e46ebed5114894de906f7d36439024d8f2e69cc815ac043fff2f75169f6c9aa9761ff32d10a1353213ac756cb84bd3613f8261ef390e1d00c3a8fb82764b0cda4e0049219e87d2e92c38f78ffac242391f838a248f608bb2b56b31bbb453d1098e99d079ea1b":hex:"":hex:"fcbb932ddb0128df78a71971c52838":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"9bf22885e7f13bcc63bb0a2ca90c20e5c86001f05edf85d8":hex:"99dec21f4781284722b5074ea567c171":hex:"9f4176dacf26e27aa0e669cd4d44bca41f83468c70b54c745a601408a214bf876941ae2ae4d26929113f5de2e7d15a7bb656541292137bf2129fdc31f06f070e3cfaf0a7b30d93d8d3c76a981d75cd0ffa0bcacb34597d5be1a055c35eefeddc07ee098603e48ad88eb7a2ec19c1aefc5c7be9a237797397aa27590d5261f67a":hex:"":hex:"18fd1feec5e3bbf0985312dd6100d1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"cfd75a9d3788d965895553ab5fb7a8ff0aa383b7594850a6":hex:"a6df69e5f77f4d99d5318c45c87451b2":hex:"041aeb2fa0f7df027cd7709a992e041179d499f5dbccd389035bf7e514a38b5f8368379d2d7b5015d4fa6fadfd7c75abd2d855f5ea4220315fad2c2d435d910253bf76f252a21c57fe74f7247dac32f4276d793d30d48dd61d0e14a4b7f07a56c94d3799d04324dfb2b27a22a5077e280422d4f014f253d138e74c9ac3428a7b":hex:"":hex:"fd78b9956e4e4522605db410f97e84":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"b0b21ae138485591c6bef7b3d5a0aa0e9762c30a50e4bba2":hex:"56dc980e1cba1bc2e3b4a0733d7897ca":hex:"a38458e5cc71f22f6f5880dc018c5777c0e6c8a1301e7d0300c02c976423c2b65f522db4a90401035346d855c892cbf27092c81b969e99cb2b6198e450a95c547bb0145652c9720aaf72a975e4cb5124b483a42f84b5cd022367802c5f167a7dfc885c1f983bb4525a88c8257df3067b6d36d2dbf6323df80c3eaeffc2d176a5":hex:"":hex:"b11f5c0e8cb6fea1a170c9342437":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"8775665aba345b1c3e626128b5afa3d0da8f4d36b8cf1ca6":hex:"cd17f761670e1f104f8ea4fb0cec7166":hex:"2ee08a51ceaca1dbbb3ee09b72f57427fd34bd95da5b4c0933cbb0fc2f7270cffd3476aa05deeb892a7e6a8a3407e61f8631d1a00e47d46efb918393ee5099df7d65c12ab8c9640bfcb3a6cce00c3243d0b3f316f0822cfeae05ee67b419393cc81846b60c42aeb5c53f0ede1280dc36aa8ef59addd10668dd61557ce760c544":hex:"":hex:"6cdf60e62c91a6a944fa80da1854":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"cc9922299b47725952f06272168b728218d2443028d81597":hex:"9b2f1a40717afcdbb6a95d6e335c9e4d":hex:"bcfca8420bc7b9df0290d8c1bcf4e3e66d3a4be1c947af82dd541336e44e2c4fa7c6b456980b174948de30b694232b03f8eb990f849b5f57762886b449671e4f0b5e7a173f12910393bdf5c162163584c774ad3bba39794767a4cc45f4a582d307503960454631cdf551e528a863f2e014b1fca4955a78bd545dec831e4d71c7":hex:"":hex:"dd515e5a8b41ecc441443a749b31":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"5a27d718f21c5cbdc52a745b931bc77bd1afa8b1231f8815":hex:"59661051912fba45023aef4e6f9380a5":hex:"2b7ce5cea81300ed23501493310f1316581ef8a50e37eaadd4bb5f527add6deb09e7dcc67652e44ac889b48726d8c0ae80e2b3a89dd34232eb1da32f7f4fcd5bf8e920d286db8604f23ab06eab3e6f99beb55fe3725107e9d67a491cdada1580717bbf64c28799c9ab67922da9194747f32fd84197070a86838d1c9ebae379b7":hex:"":hex:"f33e8f42b58f45a0456f83a13e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"b83e933cf54ac58f8c7e5ed18e4ed2213059158ed9cb2c30":hex:"8710af55dd79da45a4b24f6e972bc60a":hex:"b7a428bc68696cee06f2f8b43f63b47914e29f04a4a40c0eec6193a9a24bbe012d68bea5573382dd579beeb0565b0e0334cce6724997138b198fce8325f07069d6890ac4c052e127aa6e70a6248e6536d1d3c6ac60d8cd14d9a45200f6540305f882df5fca2cac48278f94fe502b5abe2992fa2719b0ce98b7ef1b5582e0151c":hex:"":hex:"380128ad7f35be87a17c9590fa":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"d2f85f92092385f15da43a086cff64c7448b4ee5a83ed72e":hex:"9026dfd09e4553cd51c4c13ce70830de":hex:"3c8de64c14df73c1b470a9d8aa693af96e487d548d03a92ce59c0baec8576129945c722586a66f03deb5029cbda029fb22d355952c3dadfdede20b63f4221f27c8e5d710e2b335c2d9a9b7ca899597a03c41ee6508e40a6d74814441ac3acb64a20f48a61e8a18f4bbcbd3e7e59bb3cd2be405afd6ac80d47ce6496c4b9b294c":hex:"":hex:"e9e5beea7d39c9250347a2a33d":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"de7df44ce007c99f7baad6a6955195f14e60999ed9818707":hex:"4d209e414965fe99636c1c6493bba3a3":hex:"da3bc6bdd414a1e07e00981cf9199371192a1fb2eaae20f7091e5fe5368e26d61b981f7f1d29f1a9085ad2789d101155a980de98d961c093941502268adb70537ad9783e6c7d5157c939f59b8ad474c3d7fc1fcc91165cdf8dd9d6ec70d6400086d564b68ebead0d03ebd3aa66ded555692b8de0baf43bc0ddef42e3a9eb34ab":hex:"":hex:"24483a57c20826a709b7d10a":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"1dfa5ff20046c775b5e768c2bd9775066ae766345b7befc3":hex:"2d49409b869b8b9fc5b67767979ca8cd":hex:"e35d34478b228bc903ea2423697e603cc077967d7cfb062e95bc11d89fbe0a1f1d4569f89b2a7047300c1f5131d91564ec9bce014d18ba605a1c1e4e15e3e5c18413b8b59cbb25ab8f088885225de1235c16c7d9a8d06a23cb0b38fd1d5c6c19617fe08fd6bf01c965ed593149a1c6295435e98463e4f03a511d1a7e82c11f01":hex:"":hex:"23012503febbf26dc2d872dc":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"2df3ee3a6484c48fdd0d37bab443228c7d873c984529dfb4":hex:"dc6aeb41415c115d66443fbd7acdfc8f":hex:"eafc6007fafb461d3b151bdff459e56dd09b7b48b93ea730c85e5424f762b4a9080de44497a7c56dd7855628ffc61c7b4faeb7d6f413d464fe5ec6401f3028427ae3e62db3ff39cd0f5333a664d3505ff42caa8899b96a92ec01934d4b59556feb9055e8dfb81f55e60135345bfce3e4199bfcdb3ce42523e7d24be2a04cdb67":hex:"":hex:"e8e80bf6e5c4a55e7964f455":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"ce0787f65e6c24a1c444c35dcd38195197530aa20f1f6f3b":hex:"55300431b1eaac0375681d7821e1eb7a":hex:"84a699a34a1e597061ef95e8ec3c21b592e9236ddb98c68d7e05f1e709937b48ec34a4b88d99708d133a2cc33f5cf6819d5e7b82888e49faa5d54147d36c9e486630aa68fef88d55537119db1d57df0402f56e219f7ece7b4bb5f996dbe1c664a75174c880a00b0f2a56e35d17b69c550921961505afabf4bfd66cf04dc596d1":hex:"":hex:"74264163131d16ac":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"3a15541b5857a668dc9899b2e198d2416e83bac13282ca46":hex:"89bf8ab0cea6f59616eeb9b314d7c333":hex:"4d2843f34f9ea13a1ac521479457005178bcf8b2ebeaeb09097ea4471da9f6cc60a532bcda1c18cab822af541de3b87de606999e994ace3951f58a02de0d6620c9ae04549326da449a3e90364a17b90b6b17debc0f454bb0e7e98aef56a1caccf8c91614d1616db30fc8223dbcd8e77bf55d8253efe034fd66f7191e0303c52f":hex:"":hex:"8f4877806daff10e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"b61cdfd19c136ee2acbe09b7993a4683a713427518f8e559":hex:"4066118061c904ed1e866d4f31d11234":hex:"153c075ecdd184fd8a0fca25cae8f720201361ef84f3c638b148ca32c51d091a0e394236d0b51c1d2ee601914120c56dfea1289af470dbc9ef462ec5f974e455e6a83e215a2c8e27c0c5b5b45b662b7f58635a29866e8f76ab41ee628c12a24ab4d5f7954665c3e4a3a346739f20393fc5700ec79d2e3c2722c3fb3c77305337":hex:"":hex:"4eff7227b42f9a7d":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"ce175a7df7e429fcc233540e6b8524323e91f40f592ba144":hex:"c34484b4857b93e309df8e1a0e1ec9a3":hex:"ce8d8775f047b543a6cc0d9ef9bc0db5ac5d610dc3ff6e12e0ad7cd3a399ebb762331e3c1101a189b3433a7ff4cd880a0639d2581b71e398dd982f55a11bf0f4e6ee95bacd897e8ec34649e1c256ee6ccecb33e36c76927cc5124bc2962713ad44cbd435ae3c1143796d3037fa1d659e5dad7ebf3c8cbdb5b619113d7ce8c483":hex:"":hex:"ff355f10":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"5f659ed236ba60494e9bf1ee2cb40edcf3f25a2bac2e5bc5":hex:"ad49f12f202320255406c2f40e55b034":hex:"6da62892f436dfe9790e72d26f4858ca156d1d655c9cc4336fcf282b0f3f0b201e47f799c3019109af89ef5fd48a4811980930e82cd95f86b1995d977c847bbb06ecdcc98b1aae100b23c9c2f0dcf317a1fb36f14e90e396e6c0c594bcc0dc5f3ebf86ce7ecd4b06d1c43202734d53f55751a6e6bbda982104102af240def4eb":hex:"":hex:"cb4d8c1d":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"a73f318b1e298ba4ac0ab2aed74f73543b1017cccbd1b240":hex:"abe33b7e8d88bd30deb96d1e90c4e951":hex:"6de616b000047b14b6759015183dd753c61499c0e665d06a89e4fb0cd0dd3064ff8651582e901ef5d0cdf3344c29c70c3aabc2aaf83cb3f284c6fe4104906d389b027e7d9ca60d010f06ef8cd9e55db2483d06552ddbe3fc43b24c55085cd998eae3edec36673445bf626e933c15b6af08ea21cbace4720b0b68fe1a374877d5":hex:"":hex:"4a28ec97":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"73d5be74615bc5b627eedfb95746fb5f17cbf25b500a597f":hex:"eb16ed8de81efde2915a901f557fba95":hex:"":hex:"fc40993eb8559e6b127315c03103ce31b70fc0e07a766d9eecf2e4e8d973faa4afd3053c9ebef0282c9e3d2289d21b6c339748273fa1edf6d6ef5c8f1e1e9301b250297092d9ac4f4843125ea7299d5370f7f49c258eac2a58cc9df14c162604ba0801728994dc82cb625981130c3ca8cdb3391658d4e034691e62ece0a6e407":hex:"804056dca9f102c4a13a930c81d77eca":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"a249135c9f2f5a8b1af66442a4d4e101771a918ef8acee05":hex:"80b6e48fe4a3b08d40c1636b25dfd2c4":hex:"":hex:"c62b39b937edbdc9b644321d5d284e62eaa4154010c7a3208c1ef4706fba90223da04b2f686a28b975eff17386598ba77e212855692f384782c1f3c00be011e466e145f6f8b65c458e41409e01a019b290773992e19334ffaca544e28fc9044a5e86bcd2fa5ad2e76f2be3f014d8c387456a8fcfded3ae4d1194d0e3e53a2031":hex:"951c1c89b6d95661630d739dd9120a73":char*:"":hex:"b865f8dd64a6f51a500bcfc8cadbc9e9f5d54d2d27d815ecfe3d5731e1b230c587b46958c6187e41b52ff187a14d26aa41c5f9909a3b77859429232e5bd6c6dc22cf5590402476d033a32682e8ab8dc7ed0b089c5ab20ab9a8c5d6a3be9ea7aa56c9d3ab08de4a4a019abb447db448062f16a533d416951a8ff6f13ed5608f77":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"fa832a4b37dcb3c0879a771bb8ae734f0d88b9be497797a8":hex:"70835abab9f945c84ef4e97cdcf2a694":hex:"":hex:"0f1105f9ec24121232b60b6ef3c3e8ca9eec1a3d7625004b857d1d77f292b6ec065d92f5bb97e0dc2fdfdf823a5db275109a9472690caea04730e4bd732c33548718e9f7658bbf3e30b8d07790cd540c5754486ed8e4d6920cefaeb1c182c4d67ebed0d205ba0bd9441a599d55e45094b380f3478bcfca9646a0d7aa18d08e52":hex:"a459be0b349f6e8392c2a86edd8a9da5":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"dda216287910d1f5c0a312f63c243612388bc510cb76c5ba":hex:"7f770140df5b8678bc9c4b962b8c9034":hex:"":hex:"d6617d583344d4fe472099d2a688297857215a3e31b47d1bf355ccfe9cf2398a3eba362c670c88f8c7162903275dfd4761d095900bd97eba72200d4045d72bd239bda156829c36b38b1ff5e4230125e5695f623e129829721e889da235bb7d4b9da07cce8c3ceb96964fd2f9dd1ff0997e1a3e253a688ceb1bfec76a7c567266":hex:"9823e3242b3f890c6a456f1837e039":char*:"":hex:"b4910277224025f58a5d0f37385b03fcd488dfef7580eb5c270c10bd7a6f6d9c7ddc2d1368d68d4e04f90e3df029ed028432a09f710be1610b2a75bd05f31bae83920573929573affd0eb03c63e0cec7a027deab792f43ee6307fd3c5078d43d5b1407ac023824d41c9437d66eeec172488f28d700aa4b54931aad7cd458456f":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"c5afa1e61d4594b1c2fa637f64f18dd557e4df3255b47f24":hex:"151fd3ba32f5bde72adce6291bcf63ea":hex:"":hex:"5c772cdf19571cd51d71fc166d33a0b892fbca4eae36ab0ac94e6164d51acb2d4e60d4f3a19c3757a93960e7fd90b9a6cdf98bdf259b370ed6c7ef8cb96dba7e3a875e6e7fe6abc76aabad30c8743b3e47c8de5d604c748eeb16806c2e75180a96af7741904eca61769d39e943eb4c4c25f2afd68e9472043de2bb03e9edae20":hex:"f0626cc07f2ed1a7570386a4110fc1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"febd4ff0fedd9f16bccb62380d59cd41b8eff1834347d8fa":hex:"743699d3759781e82a3d21c7cd7991c8":hex:"":hex:"dc971c8f65ece2ea4130afd4db38fc657c085ea19c76fef50f5bd0f8dd364cc22471c2fa36be8cde78529f58a78888e9de10961760a01af005e42fc5b03e6f64962e6b18eaedea979d33d1b06e2038b1aad8993e5b20cae6cc93f3f7cf2ad658fbba633d74f21a2003dded5f5dda3b46ed7424845c11bab439fbb987f0be09f8":hex:"1da347f9b6341049e63140395ad445":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"d280d079110c1c826cc77f490d807dd8d508eb579a160c49":hex:"85b241d516b94759c9ef975f557bccea":hex:"":hex:"a286d19610a990d64f3accd329fc005d468465a98cfa2f3606c6d0fbeb9732879bad3ca8094322a334a43155baed02d8e13a2fbf259d80066c6f418a1a74b23e0f6238f505b2b3dc906ffcb4910ce6c878b595bb4e5f8f3e2ede912b38dbafdf4659a93b056a1a67cb0ec1dbf00d93223f3b20b3f64a157105c5445b61628abf":hex:"bbf289df539f78c3a912b141da3a":char*:"":hex:"b9286ab91645c20de040a805020fed53c612d493a8ce9c71649ae16bd50eab6fb7f3a9180e1651d5413aa542608d7ecbf9fc7378c0bef4d439bc35434b6cf803976b8783aecc83a91e95cea72c2a26a883b710252e0c2a6baa115739a0692c85f6d34ff06234fbdc79b8c4a8ea0a7056fb48c18f73aaf5084868abb0dfaa287d":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"5e80f87fa2156c62df7be2ad16c4890de5ee5868a684fcf9":hex:"9769f71c76b5b6c60462a845d2c123ad":hex:"":hex:"c829073efd5c5150d2b7e2cdaeff979830d1aa983c747724ade6472c647a6e8e5033046e0359ea62fc26b4c95bccb3ac416fdf54e95815c35bf86d3fdd7856abbb618fe8fcd35a9295114926a0c9df92317d44ba1885a0c67c10b9ba24b8b2f3a464308c5578932247bf9c79d939aa3576376d2d6b4f14a378ab775531fe8abf":hex:"394b6c631a69be3ed8c90770f3d4":char*:"":hex:"f886bd92ca9d73a52e626b0c63a3daa138faaacf7809086d04f5c0c899362aa22e25d8659653b59c3103668461d9785bb425c6c1026ad9c924271cec9f27a9b341f708ca86f1d82a77aae88b25da9061b78b97276f3216720352629bd1a27ebf890da6f42d8c63d68342a93c382442d49dd4b62219504785cee89dffdc36f868":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"d8a7b99e53f5e5b197364d4516cace4b928de50e571315e3":hex:"4b12c6701534098e23e1b4659f684d6f":hex:"":hex:"d0db0ac5e14bf03729125f3137d4854b4d8ce2d264f8646da17402bdad7034c0d84d7a80f107eb202aeadbfdf063904ae9793c6ae91ee8bcc0fc0674d8111f6aea6607633f92e4be3cfbb64418101db8b0a9225c83e60ffcf7a7f71f77149a13f8c5227cd92855241e11ee363062a893a76ac282fb47b523b306cd8235cd81c2":hex:"729b31c65d8699c93d741caac8e3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"c874b427b7181b0c90b887147c36f242827149324fd5c945":hex:"4b8dda046a5b7c46abeeca2f2f9bcaf8":hex:"":hex:"bdd90190d587a564af022f06c8bd1a68735b6f18f04113fdcec24c6027aaf0271b183336fb713d247a173d9e095dae6e9badb0ab069712302875406f14320151fd43b90a3d6f35cc856636b1a6f98afc797cb5259567e2e9b7ce62d7b3370b5ee852722faf740edf815b3af460cdd7de90ca6ab6cd173844216c064b16ea3696":hex:"fe1e427bcb15ce026413a0da87":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"56543cd6e2ebb1e3dc136a826bfc37eddb12f7a26430a1b4":hex:"927ce8a596ed28c85d9cb8e688a829e6":hex:"":hex:"d541dd3acec2da042e6ea26fb90ff9a3861191926423b6dc99c5110b3bf150b362017159d0b85ffea397106a0d8299ec22791cb06103cd44036eed0d6d9f953724fb003068b3c3d97da129c28d97f09e6300cbea06ba66f410ca61c3311ce334c55f077c37acb3b7129c481748f79c958bc3bbeb2d3ff445ad361ed4bbc79f0a":hex:"3a98f471112a8a646460e8efd0":char*:"":hex:"a602d61e7a35cbe0e463119bb66fd4bb6c75d1fe0b211b9d6a0a6e9e84b0794282318f0d33ec053f2cfba1623e865681affeaf29f3da3113995e87d51a5ab4872bb05b5be8ef2b14dfc3df5a48cbc9b10853a708ee4886a7390e8e4d286740a0dd41c025c8d72eda3f73f3cec5c33d5e50b643afd7691213cccccc2c41b9bd7a":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"caaf81cd380f3af7885ef0d6196a1688c9372c5850dc5b0b":hex:"508c55f1726896f5b9f0a7024fe2fad0":hex:"":hex:"6f269929b92c6281e00672eaec183f187b2ddecc11c9045319521d245b595ab154dd50f045a660c4d53ae07d1b7a7fd6b21da10976eb5ffcddda08c1e9075a3b4d785faa003b4dd243f379e0654740b466704d9173bc43292ae0e279a903a955ce33b299bf2842b3461f7c9a2bd311f3e87254b5413d372ec543d6efa237b95a":hex:"3b8026268caf599ee677ecfd70":char*:"":hex:"c4a96fb08d7c2eebd17046172b98569bc2441929fc0d6876aa1f389b80c05e2ede74dc6f8c3896a2ccf518e1b375ee75e4967f7cca21fa81ee176f8fb8753381ce03b2df873897131adc62a0cbebf718c8e0bb8eeed3104535f17a9c706d178d95a1b232e9dac31f2d1bdb3a1b098f3056f0e3d18be36bd746675779c0f80a10":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"2fc9d9ac8469cfc718add2b03a4d8c8dcc2eeca08e5ff7bc":hex:"b2a7c0d52fc60bacc3d1a94f33087095":hex:"":hex:"bc84d8a962a9cfd179d242788473d980d177abd0af9edccb14c6dc41535439a1768978158eeed99466574ea820dbedea68c819ffd9f9915ca8392c2e03049d7198baeca1d3491fe2345e64c1012aff03985b86c831ad516d4f5eb538109fff25383c7b0fa6b940ae19b0987d8c3e4a37ccbbd2034633c1eb0df1e9ddf3a8239e":hex:"0a7a36ec128d0deb60869893":char*:"":hex:"fc3cd6486dfe944f7cb035787573a554f4fe010c15bd08d6b09f73066f6f272ff84474f3845337b6e429c947d419c511c2945ffb181492c5465940cef85077e8a6a272a07e310a2f3808f11be03d96162913c613d9c3f25c3893c2bd2a58a619a9757fd16cc20c1308f2140557330379f07dbfd8979b26b075977805f1885acc":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"81ff729efa4a9aa2eccc37c5f846235b53d3b93c79c709c8":hex:"1bd17f04d1dc2e447b41665952ad9031":hex:"":hex:"3992ad29eeb97d17bd5c0f04d8589903ee23ccb2b1adc2992a48a2eb62c2644c0df53b4afe4ace60dc5ec249c0c083473ebac3323539a575c14fa74c8381d1ac90cb501240f96d1779b287f7d8ba8775281d453aae37c803185f2711d21f5c00eb45cad37587ed196d1633f1eb0b33abef337447d03ec09c0e3f7fd32e8c69f0":hex:"01b0a815dc6da3e32851e1fb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"068500e8d4f8d4af9035cdaa8e005a648352e8f28bdafc8a":hex:"5ea9198b860679759357befdbb106b62":hex:"":hex:"98e32428d9d21c4b60e690a2ce1cf70bee90df31302d1819b7d27fd577dd990f7ffe6ba5ef117caac718cc1880b4ca98f72db281c9609e189307302dc2866f20be3a545a565521368a6881e2642cba63b3cf4c8b5e5a8eabeb3e8b004618b8f77667c111e5402c5d7c66afd297c575ce5092e898d5831031d225cee668c186a1":hex:"d58752f66b2cb9bb2bc388eb":char*:"":hex:"2ef3a17fcdb154f60d5e80263b7301a8526d2de451ea49adb441aa2541986b868dab24027178f48759dbe874ae7aa7b27fb19461c6678a0ba84bbcd8567ba2412a55179e15e7c1a1392730ac392b59c51d48f8366d45b933880095800e1f36ff1ac00753f6363b0e854f494552f1f2efe028d969e6b1a8080149dd853aa6751e":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"7474d9b07739001b25baf6867254994e06e54c578508232f":hex:"3ade6c92fe2dc575c136e3fbbba5c484":hex:"":hex:"1cbab2b6e4274caa80987072914f667b887198f7aaf4574608b91b5274f5afc3eb05a457554ff5d346d460f92c068bc626fd301d0bb15cb3726504b3d88ecd46a15077728ddc2b698a2e8c5ea5885fc534ac227b8f103d193f1977badf4f853a0931398da01f8019a9b1ff271b3a783ff0fae6f54db425af6e3a345ba7512cbf":hex:"67c25240b8e39b63":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"d50d4c7d442d8a92d0489a96e897d50dda6fbe47ca7713ee":hex:"41b37c04ab8a80f5a8d9d82a3a444772":hex:"":hex:"b36b4caf1d47b0d10652824bd57b603ec1c16f4720ce7d43edde8af1b9737f61b68b882566e04da50136f27d9af4c4c57fff4c8465c8a85f0aeadc17e02709cc9ba818d9a272709e5fb65dd5612a5c5d700da399b3668a00041a51c23de616ea3f72093d85ecbfd9dd0b5d02b541fb605dcffe81e9f45a5c0c191cc0b92ac56d":hex:"4ee54d280829e6ef":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"38f3ec3ec775dac76ae484d5b6ca61c695c7beafba4606ca":hex:"9af53cf6891a749ab286f5c34238088a":hex:"":hex:"49726b8cefc842a02f2d7bef099871f38257cc8ea096c9ac50baced6d940acb4e8baf932bec379a973a2c3a3bc49f60f7e9eef45eafdd15bda1dd1557f068e81226af503934eb96564d14c03f0f351974c8a54fb104fb07417fe79272e4b0c0072b9f89b770326562e4e1b14cad784a2cd1b4ae1dc43623ec451a1cae55f6f84":hex:"6f6f344dd43b0d20":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"6db4ef061513ef6690d57aef50d8011e0dd7eb4432d82374":hex:"623df5a0922d1e8c883debb2e0e5e0b1":hex:"":hex:"b7f9206995bc97311855ee832e2b40c41ab2d1a40d9263683c95b14dcc51c74d2de7b6198f9d4766c659e7619fe2693a5b188fac464ccbd5e632c5fd248cedba4028a92de12ed91415077e94cfe7a60f117052dea8916dfe0a51d92c1c03927e93012dbacd29bbbc50ce537a8173348ca904ac86df55940e9394c2895a9fe563":hex:"14f690d7":char*:"":hex:"a6414daa9be693e7ebb32480a783c54292e57feef4abbb3636bebbc3074bfc608ad55896fe9bd5ab875e52a43f715b98f52c07fc9fa6194ea0cd8ed78404f251639069c5a313ccfc6b94fb1657153ff48f16f6e22b3c4a0b7f88e188c90176447fe27fa7ddc2bac3d2b7edecad5f7605093ac4280b38ae6a4c040d2d4d491b42":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"8901bec4d3c64071d8c30c720c093221e05efed71da280bf":hex:"9265abe966cb83838d7fd9302938f49d":hex:"":hex:"7c447e700db7367260dffa42050e612eff062eb0c8a6b4fe34858800bcb8ec2f622cb5213767b5771433783e9b0fa617c9ffb7fde09845dafc16dfc0df61215c0ca1191eabf43293db6603d5285859de7ef3329f5e71201586fb0188f0840ed5b877043ca06039768c77ff8687c5cfc2fd013a0b8da48344c568fce6b39e2b19":hex:"6f6c38bc":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"2c57eb763f886154d3846cc333fc8ae8b3c7c9c3705f9872":hex:"9b3781165e7ff113ecd1d83d1df2366d":hex:"":hex:"9fe7d210221773ba4a163850bab290ba9b7bf5e825760ac940c290a1b40cd6dd5b9fb6385ae1a79d35ee7b355b34275857d5b847bef4ac7a58f6f0e9de68687807009f5dc26244935d7bcafc7aed18316ce6c375192d2a7bf0bee8a632fe4f412440292e39339b94b28281622842f88048be4640486f2b21a119658c294ce32e":hex:"62f32d4e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"307d31a594e54f673bea2f977835670aca4f3d45c9c376cc":hex:"0bdaa353c4904d32432926f27534c73c":hex:"aa39f04559ccc2cae3d563dda831fb238b2582cb2c2bb28cff20cc20200724c8771b9805ef7464b8fc06c7b8060c6920fd2779fbc807c2292c8c1f88f8088755609a1732ff8c0b06606452b970c79997b985889404fd907c4668a0bcc11ba617175f4525523494a244da60b238468c863055f04db20ea489adf545d56c0a71d8":hex:"d7385a7bd0cb76e1e242fa547c474370bcc7cc7cf3e3fa37b00fe08a56383ca31d023d8c493f6d42e482b0f32e4f244dd100ea08eee6535e5bb8d27f76dbb7eead6ba8e031ccd0eaeb649edee92aeaf0f027d59efd4e39b1f34b15ceb8b592ee0f171b1773b308c0e747790b0e6ace90fc661caa5f942bdc197067f28fbe87d1":hex:"2ddda790aae2ca427f5fb032c29673e6":char*:"":hex:"0b92262759897f4bd5624a891187eba6040d79322a2a5a60fb75c6c6a5badd117abe40c6d963931bbc72dca1a1bf1f5388030fe323b3b24bd408334b95908177fb59af57c5cc6b31825bc7097eec7fec19f9cdb41c0264fd22f71893bcf881c1510feb8057e64880f1ea2df8dc60bb300fd06b0a582f7be534e522caadc4a2c7":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"23c201968def551817f20e49b09dbb5aae0033305bef68a0":hex:"bd2952d215aed5e915d863e7f7696b3e":hex:"23f35fac583897519b94998084ad6d77666e13595109e874625bc6ccc6d0c7816a62d64b02e670fa664e3bb52c276b1bafbeb44e5f9cc3ae028daf1d787344482f31fce5d2800020732b381a8b11c6837f428204b7ed2f4c4810067f2d4da99987b66e6525fc6b9217a8f6933f1681b7cfa857e102f616a7c84adc2f676e3a8f":hex:"77bc8af42d1b64ee39012df5fc33c554af32bfef6d9182804dcfe370dfc4b9d059bdbc55f6ba4eacb8e3a491d96a65360d790864ba60acf1a605f6b28a6591513ea3cfd768ff47aee242a8e9bdfac399b452231bfd59d81c9b91f8dc589ad751d8f9fdad01dd00631f0cb51cb0248332f24194b577e5571ceb5c037a6d0bcfe8":hex:"bb9ba3a9ac7d63e67bd78d71dc3133b3":char*:"":hex:"17d93c921009c6b0b3ecf243d08b701422983f2dcaec9c8d7604a2d5565ed96ce5cddcb183cd5882f8d61d3202c9015d207fed16a4c1195ba712428c727601135315fc504e80c253c3a2e4a5593fc6c4a206edce1fd7104e8a888385bbb396d3cdf1eb2b2aa4d0c9e45451e99550d9cfa05aafe6e7b5319c73c33fd6f98db3c5":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"6baec0669add30acb8f678ce477a2b171f89d1f41935c491":hex:"b1472f92f552ca0d62496b8fa622c569":hex:"5ae64edf11b4dbc7294d3d01bc9faf310dc08a92b28e664e0a7525f938d32ef033033f1de8931f39a58df0eabc8784423f0a6355efcff008cae62c1d8e5b7baefd360a5a2aa1b7068522faf8e437e6419be305ada05715bf21d73bd227531fea4bc31a6ce1662aec49f1961ee28e33ae00eb20013fd84b51cfe0d5adbdaff592":hex:"5712b84c4c97d75f84edd50561bc1d3f1ba451cc3b358b2403b5e528290954348cf7a235b4dc11a72ddbc503191204e98a9744d85419508c8ca76438c13305f716f1e239a6d9f6423c27217a0057aa75f6d7e2fb356e7194f271459ab5482589ea311b33e3d3845952ff4067dd2b9bcc2e8f83630b0a219e904040abd643d839":hex:"29a2d607b2d2d9c96d093000b401a94f":char*:"":hex:"beb687f062ae7f5159d07609dd58d7b81c478d180bc0b4c07ae799626ff1da2be2e0d78b2a2a1f563257f161491a5ac500cd719da6379e30d0f6d0a7a33203381e058f487fc60989923afbee76e703c03abc73bb01bd262ff6f0ac931f771e9b4f2980e7d8c0a9e939fa6e1094796894f2c78f453e4abe64cb285016435ef0e8":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"7b882a2df81fdb9275fb05d120f32417e8ffedd07457e938":hex:"5c064d3418b89388fb21c61d8c74d2c5":hex:"5bfa7113d34e00f34713cf07c386d055e889bb42d7f6c8631ffce5668e98cb19bed8820b90ecb2b35df7134f975700347e5514287cfef7ffa2b0ff48b1de0769b03dca6610995d67cb80052cb2e5914eb4ed43ef5861f4b9364314fde6ad2b82fbba7fd849dfa6e46ecc12edc8cabfff28d9bd23c2bcc8ab3661c9ba4d5fee06":hex:"0aae7213da279b34d6dcf2a691b2d0333112ea22de0c3c68d47cf9f9f4ed8ad4e03d4a60ec18c3a04ac9c2abb73e1023051029b5e8705bb69c4c50afc84deb0379db5077be1f663652f8bd8958271af2c1ac4a87e08cb526bab8a030652f2a29af8055d0f31e35475caee27f84c156ef8642e5bfef89192f5bde3c54279ffe06":hex:"0943abb85adee47741540900cc833f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"51d94d21482c00bb5bc7e7e03aa017ba58f5a23494b72c2a":hex:"fb21cd763e6f25540f8ad455deaccdf0":hex:"019d1db5569eeff83306f65d653b01064854c1be8446cd2516336667c6557e7844fc349adea64a12dc19ac7e8e40b0520a48fac64571a93d669045607085ac9fa78fed99bbf644908d7763fe5f7f503947a9fe8661b7c6aef8da101acca0aed758ca1580eeb2f26ae3bf2de06ce8827a91a694179991a993cdf814efbcc61ca5":hex:"3a9c69c1ed2340bfde1495658dbf4f54731a19b3922a1d535df8d0b2582f5e803b5891e8ad1aa256c923956dcda2430d0c0696bce63295fb61183e040566e459338f908d23ae51f64020c1ef3d192428f23312b285fc4111d50d1add58f4a49008a22c90d3365230e9158cd56f9d84f079bdd673555d4dc76c74b02fa9920e7d":hex:"a93bd682b57e1d1bf4af97e93b8927":char*:"":hex:"7093f44703f2cbb3d12d9872b07a8cd44deb62dae48bc573b11a1ee1c9f3105223423fac3181c312a8a61757a432d92719f486c21e311b840aa63cf530710c873df27fecda0956075923f1ecc39bffb862706f48bde2de15612930fc8630d2036e9e4cfc1c69779171bd23d9e1d5de50a9e0a0de4bd82ed3efc45299980bb4cc":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"e6756470937f5d9af76f2abe6df2d0bc15ff8e39b5154071":hex:"4500193711a5d817a9f48deafda39772":hex:"92fa22dba0eee6b1de1ddd24713b1be44c7105df90e6e7a54dcbf19025e560eb4986ee080cf613898a1a69d5ab460a3b8aa2723a95ac4a4af48224b011b55fb7582ae18f6746591eab2bd33d82a8dbbae3f7877e28afef9857a623530b31d8198b2df43f903d6e48ddae0848741f9eaae7b5504c67ad13791818f3c55c9b3d1e":hex:"afae92bd56c426c095d76633701aa9bea5ce05490482c6c64ac24468c3e1af6e6030a6bb6649745b011c6729bde985b9242e22105322fbb8853dcabbd00165d0b07d7b499e0238b6513bf6351eb40635a798f7e6e2d31125dda45ffe8964596fdbff55df22d4e9025bd4f39e7c9b90e74b3ee58d6901f113900ee47a4df5afd7":hex:"7d9f97c97c3424c79966f5b45af090":char*:"":hex:"62258d60f0138c0405df4b2ec1e308b374603a9eace45932fdc2999e9e2261de8b1099473d1fc741c46c334023aa5d9359f7ef966240aaf7e310d874b5956fd180fb1124cbeb91cf86020c78a1a0335f5f029bd34677dd2d5076482f3b3e85808f54998f4bac8b8fa968febceec3458fb882fc0530271f144fb3e2ab8c1a6289":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"30db73d46b518669c45b81bc67b93bed3d0864f7e9e8e789":hex:"5069e2d2f82b36de8c2eb171f301135d":hex:"ef781dce556b84188adee2b6e1d64dac2751dd8592abc6c72af7b998dfae40cbe692a4cae0b4aa2c95910e270600550fca1e83640c64efb1eb0e0a90a6fc475ae1db863a64ce9cc272f00abac8a63d48dd9f1c0a5f4586224befed05be4afae5bd92249833d565cc6b65fd8955cb8a7d7bd9f4b6a229e3881212871a52c15d1c":hex:"750bc1d2f91d786bb1e621192a376f552538ba8c07d50d9e10b9345f31b3e5f9d8ad7c719c03d8548a3b184b741cd06c49d7fb6fe80258d60c01c2987c337c823211cee7c1cf82077266889bc7767475e0eeabb2ef6b5a1de2089aaef77565d40a1c2c470a880c911e77a186eacca173b25970574f05c0bdcd5428b39b52af7f":hex:"a5100c5e9a16aedf0e1bd8604335":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"209f0478f1a62cb54c551181cbd4d24b796e95f3a06b6cb9":hex:"7be1768f6ffb31599eb6def7d1daa41c":hex:"9cb49357536ebe087e1475a5387907a9e51ad1550697f13c6cc04384ec8a67dea13376bdd5e26b815c84a78f921b506b9e2086de50f849185f05ba7c3041e49e42c0673df856da109a78b8e0ce918c25836f7e781e6b16168e4e5976d27ebc83f20b7bf4beadecb9b4f17a7a0d3a3db27fc65288a754b5031a2f5a1394801e6e":hex:"66db7cc97b4a8266c0a2228e8028e38d8986e79fcbcc3caff3050fdd2de87b7ff7a6895b988b0bdb7fcc4d6e2d538dcfaad43ce2f98b6d32500f5a6e6183d84cb19157a699cdde1266d6d75a251ee1a2eb97bfe6405d50be2b17a58ba6eafaee0a023a28d568fd1c914f06041a49c79b9df9efe63d56883cbbbeaba809273d2e":hex:"4d2ac05bfd4b59b15a6f70ea7cd0":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"1bfa30b315e7b908263330140fa2d66ed57104784a43cc70":hex:"b7081a3010b524218390ba6dd460a1ec":hex:"8c1f42b5931d69ae351fcde7d2b4136d4898a4fa8ba62d55cef721dadf19beaabf9d1900bdf2e58ee568b808684eecbf7aa3c890f65c54b967b94484be082193b2d8393007389abaa9debbb49d727a2ac16b4dab2c8f276840e9c65a47974d9b04f2e63adf38b6aad763f0d7cdb2c3d58691adde6e51e0a85093a4c4944f5bf2":hex:"8eeee9865e23fa51dbbf197fa41776b7edbdb9381a22c935299cd959a46190788ae82f4e645b0362df89bfc00241964784bc7ef70f6f97e81687d52e552a33af20ae34a3005e0a7b85d094368d707c3c4cd3ef31c0daf3ccaa1676609ed199327f4139d0c120977e6babceed28896d2cb3129630f3ee135572dc39433057e26a":hex:"4da85b8ec861dd8be54787bb83f1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"fc47156a693e59a1dea0618c41441fe669fc65dcfb7d0726":hex:"ea1935ed014883cc427983d7962d9992":hex:"0d85b8513becfe8c91d0f6ffb65ec31f2cf406c51c0da88893c43d1327fd8ad1f4bab2d7b5e27438d643397034a72f8666bf641b6781bc90f764db387eae6720b5723d510194570ccd773e1b3bebfc333cc099d078583e8dac60d174d332925a24a45110c8d2abe8924ea677ac74db66ea789e2838efc96c78bceaa6236c0a67":hex:"3e4f0a586bad532a08c8863ebba01fd25014baa907e6032ee43d4a7dfc7c3171916dcdf9faee0531f27527872ae4e127b6b9aaee93f5e74d0ab23f3874aa0e291564bc97f17085dd7d5eb9a85d9f44574e5952929eda08863b64c85dd395c91b01fe5bef66e3fa8f9ee5bf62c25d80dc84fbe002ecfd218430b26f3549f734a1":hex:"8781b045a509c4239b9f44624e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"b5fcd780a03ba80341081ef96b440c0e4348afde4d60c1d5":hex:"ad20cce056e74ec5d0a76d6280998f15":hex:"28f8fcf23b9c1ba40c19ffc1092632e35f234c1e8b82bcd5309d37bf849a2ce401413d1f242cf255ed597f9a93a1d6e50676997f95aa612e580d88234a86ddc404292746f0b2f5cf15abebcea6659f998ec6a1cb5a9914fee5aa1aa5d04b3c20914e45095e4141ce9c173653dd91c3ebe4ed4a9a28f3915d7b2edba34c2a58d8":hex:"6316f3beb32f6f3bf8f2ff6a2c160b432bafd3036d3eefa1e4ec204f24892e37dc4d75c7ce9a24b5c49fb4df901f35ef9d5955f7dc289c56cb74753f4d6b2982267d5269d12237e21202a65061849c65e90e6702dda03a35ace3a3a098d16b4bfbb85b7232404baee37776a9b51af6b3059a5f170f4ebe4ecf11061ca3c1f1f3":hex:"2ad4520ddc3b907414d934cc1d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"4382507dddccf1385fc831da8924147563416d0656e168ec":hex:"a37687c9cd4bdc1ead4e6b8f78bee7f5":hex:"fa9ae30509cbb6fe104c21480ae7b8ec9f12f1afb17320d77b77cdf32ce8c5a3f7f927e501118c7ccd6975b79225059cef530a4fcb0a9719f5e2d3bebe7bb6ec0855e495a31e5075eb50aa6c1227e48b03e3fdf780084ac4912eb3a5674cca9dd6ac037366b230ae631a8580d2d117942dee5d5ddbbb2233afeca53289cc4f68":hex:"e5c5430b960aa35dc8540215c2772d66811270859e33dd4477904759e7e5eb2986a52a4ccc9f592e614147b5ea2ead6636a15c6426336b2995d9a31ab36d76578c3540bc6693842a4bc0491c7963ee9cda2317951cf93244bd30bcdfec69a4767004636fe7d1be7300c35e80627bab9236a075a803e9e1080b9159060c643a78":hex:"4221818d4be45306e205813789":char*:"":hex:"b5b36719bc4d13a5fbf37188ea814cdf3c97a430784330540325c899570e15482300bc82c5b8163074e0544c5132e3ce93bba68bd7a8d2db81d1431b424b697c1158c4d70625666d5ff99145ca34856815c905b5a0fd95806df56b9cd5b384bda3e394b409048eb1037144cc071539c02397e931da28a43cc354d584643afd4f":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"7a66db3450dac9a1e63d2639f34c5c6a3fbfb3c8e8230199":hex:"21f8341529b210ade7f2c6055e13007a":hex:"1699bc8c198ab03e22d9bc4f3682aad335c6e35f3f616bb69769a9d5a202511797e770ae0d8d8528ef7b2bb25b4294d47427b43f0580fa71d93fdef667f4f4196f84e41c0b1978796d0de74a94420fb8571bff39137fa231c572b31be9ae72338288bef5f8c992121dc918538551f346e279a9047df14ec9fc0fd399cd3bd8d8":hex:"6463a7eb2496379bc8a5635541525926a6f9fa718e338221952118ae4cf03a85f2074b4ebaf108b9c725809be1e6309c3a444b66f12286f6ea9d80c3413706b234b26372e8f00783819314a994c9e3ecf6abdd255cbfe01b3865e1390a35dcd2853a3d99ed992e82ec67ba245f088cb090adade74bdbc8a1bad0f06cbea766a6":hex:"4af02b81b26104d1d31e295a":char*:"":hex:"53fe6a34d280f2c96d1ae2b2e8baf6abd67cedf7d214312f75dd4a1bec28a641dda3e71aa398726b2b0b1f515e1f4259ee97acaf17f122db9ec7814c2de6a88d36c3ac106396ad03d337c2cd2d2b9b4b7170e23a5848ca7ea129838f967dfdfe83b45ff2a9be699bfb2346115465d59f074f09e24d8fcbd9ece0018c92776c43":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"1f5c818f24d201f9fb23fcca211b0545eee5c5c9b440810d":hex:"3a163067bdd90fce0406d1c198a88771":hex:"a5e94e233d04fe0c4b6c4684b386902fe05096702237dfbe76f73befa69b6f30394cf9fe3358997942df65842748fb4f075a3dc06e147bd8d67fc4371113a4d75c70219257c650a6f38a136659e20a1cf3a119397835c304e0fb2a33aa3c3019175c86463043d5edc6992874f61e81cd0d26af8b62cf8c8626901d4f16d84236":hex:"9a7566817a06f792e96a6a2ba8e0a01f8837e2de06796e68b0782cc54ed0b04fc5e24a1ad37d5ffb035548b882d88150e89915b89f57cde2bf3c43ab9dae356927daef6bd61cc9edd5e1b7a4abea2f71313677f1b2fdf3d8d4a7e9814ea820fbc3e5c83947db961839a985a57ced7f5e4a1efffcfd17a2c806d4cdc1e79162da":hex:"b124eea927e2a62a875494a1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"9a301f7edf83da63bcf37216a3a33d7613331c3210281dd7":hex:"d73a546b0fa307633ac89506fa86138b":hex:"f57fe548cf4a551a216ffb24a1dcf1b79c95f9abf06443fd58af042d287c2165db373c82a94172db517840f22e45e966e3ead91ce1ddad132bcb844e406e84b76a0b5b0ee23064b66a229f32a2d3b9c71103f020c4ba57fc0f0608b7114914cf2ada0c5a9bc4afbfa9ce5da320f34beb2211d569a142f53bfd262f6d149c4350":hex:"e09cc8543db7804870004706a26e94b457c125bd648b581a196f962f2ae8fa55d9bc66530ba5020e22d282080b4720dc9a2096a11c0fcc3d9a67cd1cf95cd7cd2417ba308c761e64be24347a14c9423447094a5c72a0043c288b35e753ba0aa748f208381249fb1c8d195a472192404b6c8172663ee4b4d4ecfa426e1fb003f2":hex:"f536a3b8c333b1aa520d6440":char*:"":hex:"124a327a8c22b7652886dac2c84b8997ca8a6f61c9ba9c094b5aea41eaa050a6df6cbf280259e5466071bcfa53b4ebc76c3cc4afc8c0385189a5382933aa57c89aab78dca84331e0fe8f0aab3a7857d3e13f08dcd90ec5f0684f82088ef8eb7fd67e75de43b67afc3a0beb458f5ebd61b2c779e6c539d795c667bb7dcc2b762e":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"fd40e8226fd13cb95ba50b7cdf0f07f7ab7037cf8705ca50":hex:"3406e70cbe16b047fedaa537eb892279":hex:"390b18d22d5ecc0b5a524ae9afac6fd948ac72d1360775a88b385aa862cce8a27f3e4b420e539bec6e8958f8c1b5416c313fa0a16f921149a2bfeae29ad2348949b29a73970e5be925ec0c35218b82a020cf21bb68c6931f86b29e01b85500a73f3ee7eb78da60078f42550da83b2e301d151d69b273a050f89e57dfc4787cbf":hex:"75aa7df5c3c443d48ee998064b6fd112c20d2d90c98e00d025ef08d1ad3595385be99de47fa627549b827c48bc79eb1dcaf2f1be95a45f7e55755b952aee5ae0748e68bee1b014a628f3f7dc88e0ebac1d1d00e268355f5101838ce125c57003aebc02a1c9d6ae2cd6e2592f52c0be38cef21a680ae35c909cab99dce9837aef":hex:"69e06c72ead69501":char*:"":hex:"6e8d661cd320b1b39f8494836fcf738b0ab82873d3903c9ee34d74f618aea36099926b54c1589225ec9a9d48ca53657f10d9289c31f199c37c48fb9cbe1cda1e790aaeedf73871f66a3761625cca3c4f642bc4f254868f6b903e80ceeeb015569ace23376567d3712ad16d1289dc504f15d9b2751b23e7722b9e6d8e0827859f":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"a85ab87563b809b01725764d64ba4cc6a143e2e0362f0c52":hex:"9f991ff16a3e3eb164a4f819c9f1821a":hex:"df289511f78d8fa2505afc4c71ab1d7c31a8d15d1e5fcbb29d70f0e56f89c4d7b30f1b3b4745b5d2cc7af34fb4c95461372bf516ec192b400dc8fdb0ca9fe1f30f5320d0fadf20155cfcddcf09233c6f591c1c89917e38a003f56b94a1e2429d1f2b6297db790d7dce84d9fa13d2d86a0e4d100e154050b07178bee4cdf18126":hex:"ef43629721b50bd3656b7ae31b6e4b4ba1cf2c72ed0460ee7d9fb416631ddc597e5f9aebbcf4442b95cc46e28476a464dd87caf9c1c1d6c99d3e3e059dc23f8d2fe155ff5e59c50d640bc052c62adee3aa1295b38732e3458f379e98a8dbdfed04c22a5761792e87fa67ecbcbf3b90eb1bcd1d3f49e60132452f28afece83e90":hex:"dc4c97fe8cc53350":char*:"":hex:"ff0e531c7344f0425d62d5fbedf4bc8d3d5cc80647e67b852c1a58ad1516d376d954cb8dda739f6a4df3cf1507e59696610bcb6b34340d6313028e00d7197845d392e73331aaf168b474a67364d8f9dab740509fabf92af75045f0afabc1b5829264d138820952bbc484d1100d058a4de32b4ece82746b2b4a85fb2993d4add8":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"f4f1e03abb927ffd0b081b9dce83a56a6dd419a6313ac34f":hex:"d1e29bb51a3c4e871d15bb0cd86257e2":hex:"ae2911cdaaad1194c5d7868b6d8f30287105df132eb0cecca14b6e23ec7ac39cc01da1c567a0219cca7b902cc2e825e30f9524a473eb6e1d4d1beff5ab4f29103b2c7522a33dd33182fa955c4f09a75196b1072a6f0340fc55a802d29c7067f05219c21857ebff89ada11f648c1f28dfbfdaab56028f05509de17e2381457ebc":hex:"0e70421499bc4bcb3851afa34cdf5be374722815abdd9bcee5f332dbe890bdc1c0210ab10667e5bb924bf3c1120e25a0c074da620076f143940989e222086d1b34a1200d09aea1f810ef6de7d8520c65eef9539fde5a6422606c588fce6264e5f91f934ede6397c4b307d2d7e07a518fce577a427fa92923cbba637ae495afad":hex:"44f760787f7bc3c0":char*:"":hex:"2199fa5051461b67581429ab19de2ccb50b8b02e12c0e1d81a8a14929f84e09d9715b7d198e77e632de4af1c08c5041276204a7ed76646385e288e96e1a4b0b0f2b1a9df7f0892beaea3cb58d9632720158f6daa4cbbfc0ebdc56ff6a5175768ff2abd24cb7669bc3fe40f8aba7869d2dd7dac86b6ebc4e4ce261edbec88db17":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #0 [#1] +depends_on:1:2 +9:exp:5:hex:"33efe20433c6a1ad261a1fed494961749e5bf9d35809b59d":hex:"dc94673b0c49c6d3b4611e278212c748":hex:"919f7397a6d03836423b7cac53177fcfbe457d4aa4348646f646aae1bc5a15568cdb8c96fabef278ace248aca531110a4f4f9e8ab0c32525ad816ae3facf03175232dc84addcd6065f9cc1f513966b63fd27e91a09f1921b95d6bd8f08f1dbce073bcf827847f774514b478b9d7fb5426847dd4dee6f39b5768c1fb729b32d03":hex:"cfbeb61be50def25f513346498f75984bfe797a8ad56be34f2461e2d673f6ce14e7479a59777267b75dadc6b9522599ebe5d7b079495a58ca187ec47796f6ee8c322278ad7451b038c938928adcff6105a8ea3780aedc45b6a3323d3ae6fbce5da4fb59ca5ec0a16a70494c3c4859672348532505e44f915e0b9b8a296ef5225":hex:"c5098340":char*:"":hex:"c5e47d8c60b04df1974b68a14095d9bc8429a413d21960b15bae4fd7356bf7872e0da0a1a385ca2982d3aa3182e63ea4bb8ca01410cd4e71ddad34aa1f12c1387902b3d56634f89c619a2e6756648ab3bf90e9bc945afc9140eb935b633bae96bb067e9ee421697bcf80b14b1b88dbf13e010b472a7ca5411db36848b9c7a37f":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #1 [#1] +depends_on:1:2 +9:exp:5:hex:"3ed5dadefa0f6d14fedd1a3cdbab109f6660896a952ac5ab":hex:"553a14f1e1619f9d7bd07cd823961f25":hex:"eb8ea81d3e328a1113942cd5efd0f2b5e7f088791c8fc05690a34584101c4d493628ee7d0099a2865ac194b9124c3fb924de0c4428d0a1c26ea3ad9a0bc89187a16673e3b6f7e370dfb2dc26e8a56a9cf91f9c2088c020a766efe0d0c91689743a603f2cd1e300a6a84828b3b515a4b9a06e6bb20457bf124cd6ce4ac8b83d51":hex:"aef617f69724e020309ec39d9587520efda68a8e303686c3a41ef700cba05b7c6e43e95aadb1a566f61650c87845835e789eb2366941e3bfef6d9846af0e0dbc43249117ad6f299bbc40669ac383cdf79289ada6ccd8ccfe329a0dc6a38eea1a99550457102d10f641cda50c21f533b1f981663f74a0a7c657c04d9fc6696ff4":hex:"dc413c4c":char*:"":hex:"bc1f34991a48aabb0fea513f790f0d223e9feac4c99fa1e8427f01ab8b4b2827cfaf239342de36051a846af0306a3f82e7aed98dd0416fb078bc7f3b617b00ceb2cea4ddafc22dd022efa8303e9804510e0e888065d8427345156d823f796f74130c06db9f9934435552b4fefd051953e20ecba3a4514ac121d7d2097d597439":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #2 [#1] +depends_on:1:2 +9:exp:5:hex:"6d97e8bff3923a778504fb917dbc1428a1328587047697d9":hex:"0c28dc4cd53725091c2fb68a476c2e40":hex:"f3932f5e82d75a1e3eba1591c17769e1a45819ccf057c31e76fa810b93678766d25905e859775c244e96bcafbc75c4a2d95e7d02868ccb2f65e49276f0b645ac8cf6e3758402304a3c25ce2de0a49f401b1acadaff8b57589b45cc79130ddc8387f41cc383e33ef38eec019152051c756198d6f782ccf56297b9fe944269a65a":hex:"dc1a81efd51e967767f5bdd7e2e425732c1d28451f2bf5bdf3f5a6492279330594d360dd8a193e5dbde1be49bf143a35c38bcd059f762ada65c5119e097f0976891347f4d829b087bd72daa3494b344cbd3370c4459ca243bd57aeda4cb86cdd0bf274f07830cdbf5e5be4eb9b742ddffef8aa35626d2b9ea0a29d3c3d058b28":hex:"e6d6df7a":char*:"":hex:"39327836e9d8cfb59397adcf045a85644c52c3563290795811f26350c8bce8f55ca779cbcd15479efd8144b8a39ef611153955c70bf3a7da9d4d944c2407a0d735784fcb68de1083eebf6940ebc9cf92f9f139c01404b503ff64e61126a94e881351473507884357040fd32714b872c254349071069644e2bd642905521b944e":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"2c78e29971e90a01bb65973f81260b9344fa835751f5f142":hex:"f1a23ce6e2bc9088a62c887abecd30ae":hex:"":hex:"":hex:"d4d5c22f993c8c610145fcbe4e021687":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"8c582d5b6a40ef0e4048ec20f0263572d7cc82704e380851":hex:"ef221a1c66fda17906190b7c99ab60b8":hex:"":hex:"":hex:"6327dcb46ffb3d0fd8fbf3d2848a8f01":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"3a58abadd29e946e23ca9eb09af059913d5394971bda6a4f":hex:"7c29b3196d44df78fa514a1967fcd3a6":hex:"":hex:"":hex:"fc123944bbea6c5075a5f987aed9cf99":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"04bdde4c35c385783715d8a883640851b860ce0e8436ec19":hex:"783f9a3c36b6d0c9fd57c15105316535":hex:"":hex:"":hex:"23e21a803cac5237777014686564f2":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"4ba5fba0c22fbe10c2d1690c5d99938522de9c5186721bac":hex:"2acc2073089a34d4651eee39a262e8ae":hex:"":hex:"":hex:"7ac742c859a02a543b50464c66dcf5":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"f12890b0a8819faa5a8e0e487f7f064af42fa6d5519d009f":hex:"c937615675738f4b3227c799833d1e61":hex:"":hex:"":hex:"88300bd65b12dcb341f1f6d8a15584":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"51878f3630298a81297f4a21514fea637faa3815d4f26fae":hex:"1f939226feab012dabfc2193637d15b1":hex:"":hex:"":hex:"eed5fcb7607c038b354746d91c5b":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"ae596e74840a600556a06f97b13b89e38f67c152f1a1b930":hex:"e2076e1050070d468659885ea77e88d0":hex:"":hex:"":hex:"b4586bdbd4b6b899648f2333eee0":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"fd33b7a0efae34339ca987b5eb8075385fd1276e63cc8530":hex:"2d07bb8616fc0bbb71755a1bd256e7fb":hex:"":hex:"":hex:"6b60d645220cfde42d88296ac193":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"5685b12a6617d554c36b62af5b8ff2239cb3ffb1d2c40e14":hex:"6c31194df99d08881fa5b1dd33b45a92":hex:"":hex:"":hex:"69431593c376c9f8052bf10747":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"036ae037410dae9f0741608516d03b855c9c1851df8c54a4":hex:"73599275f8237f14c4a52b283c07275d":hex:"":hex:"":hex:"6f7249d25c9f273434c4720275":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"ac144f39ebd6124bad85c9c7fb4f75bff389ece2e8085d83":hex:"d0871bfc3693245be478e6a257c79efb":hex:"":hex:"":hex:"5a99d59631d0e12f58b7b95ccd":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"a8a541ff11a1b8548e832d9e015edeccc94b87dadc156065":hex:"c72bb300b624c27cded863eba56e7587":hex:"":hex:"":hex:"ea2528e7439be2ed0a0d6b2a":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"30dd8f400335e9c688e13cc0b1007bd21736a6d395d152e2":hex:"28899601fa95f532b030f11bbeb87011":hex:"":hex:"":hex:"35625638589bb7f6ccdb0222":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"cb8f672b04d706d7d4125d6830fff5d2ec069569bea050ce":hex:"375d4134e8649367f4db9bdb07aa8594":hex:"":hex:"":hex:"70610bf329683e15ecf8c79f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"bf71e5b1cd6eb363ecd89a4958675a1166c10749e1ff1f44":hex:"9f502fb5ac90ff5f5616dd1fa837387d":hex:"":hex:"":hex:"a4b5138122e1209d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"5b9d1dfb2303b66848e363793bdca0e5ada8599cb2c09e24":hex:"2ee96384dd29f8a4c4a6102549a026ab":hex:"":hex:"":hex:"3b33a10189338c3b":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"a35ae271f70ebacb28173b37b921f5abcad1712a1cf5d5db":hex:"8d97f354564d8185b57f7727626850a0":hex:"":hex:"":hex:"813d2f98a760130c":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"9bdd0cb826d5d28c2ab9777d5a0c1558e7c8227c53ed4c4f":hex:"daf13501a47ee73c0197d8b774eec399":hex:"":hex:"":hex:"a6d108c0":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"81b4d5ee4e1cbee1d8966fb3946409e6e64319a4b83231f5":hex:"bc2f9320d6b62eea29ebc9cf7fc9f04a":hex:"":hex:"":hex:"a47cdadd":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"5813627d26d568dfe5a0f8184cf561fe455eb98b98841fe0":hex:"817199254a912880405c9729d75ed391":hex:"":hex:"":hex:"d81d9b41":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"94f160e2325da2330fbe4e15910d33c2014f01ace58e5b24":hex:"80a1b99750980bf2be84a17032fc2721":hex:"066fdd980cf043a732403ee5f65c82ca81e3fc858ad3cfa343014a8426fd3806770f127e2041efb42e31506ce83390ac5d76de2fe1806df24ce6e4bb894972a107ef99e51e4acfb0e325ab053f9824514b5941ab1ec598fbb57a5d18ed34d72992a19215d914e34ad1a22326e493d1ff2da7bc271c96ad3ab66d0c32bd711293":hex:"":hex:"dd153cfd7aa946280660c445f586fa28":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"4785846f7c0524e78f3eb137fd433e1808af64549af69183":hex:"5334476a5fa3fa50dcc4b12f8ac00b51":hex:"e70f82d1e3361ac5a5c9a087e47984d5533ba296f9b7e4a192a4ab28a833cdbbd5cece3415cf6fbb2f8055560b5c31c98d83d139954e1c03a464739f1eb5ad982c4371cf20b8984bbd97d5f40b336f5e96df3d272b95f7547be15c3bc05b3caac7d08c5eb5de8bdd246e74f6caa6bff76ea0417730ce72b911867f88fdcf73a0":hex:"":hex:"c59231ddaae98e0e8db6b3fe8f4d3427":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"49b085fe1a8e1ae769ed09fc585d29eb24d589689992e6c5":hex:"899878b0684fb865d30190821817b88c":hex:"f789eafe3d02826b619ca4fbca7bb1919e5c6f7c33824a2f7f815dc50e329979705f7ef61e9adf7899d34f1b8840384ff62ef6d29eea38c45d12be9249aca69a02222cd744d81958c6816304ff0d81d6714a2023b3dd9d940db5c50afd89c52774d28d6afde2b6c68425b6acbe34682531a2e57e2b9a7729b3e8d96a729b15cc":hex:"":hex:"2c84bf7a8947ab93b10ae408243b4993":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"75847588760ecb6ca548747b743914c89fea367a5ccb81b6":hex:"7d8a9fd254e2061c01e39eb574951924":hex:"b03c57dfd49152401a225357f1d6e533f3a423e5cfce07b8ae7ca9daf68645e5bd67b3ca2421eac447530b27c6dc6bd9c7f1b22441b8cc8c4ac26cec2c9c0d665a35b66d779a3772d714f802d6b6272984808d0740344b6abdb63e626ef4e1ab0469da521c7908b2c95a0fd07437c0e9d4d2451ae189ad61ff19f4efb405127c":hex:"":hex:"e8aac14b53cdbc2028d330fc8d92a7":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"e3a18a96d2e45d2f60780dc39cee7160e28cb810bf09858c":hex:"26a4d659665ded39b7a1583de756d0ad":hex:"83f8d9c58169b4c68032321197077ff5c8ee4ebb732b040748e1b55dcf53375ae86fb9646a672b5c5bc805a92c475cbb6d0ed689a58abdf2230250a7d3fbd8cfab07835fa85e738a7f74bc3e93616d844b1ec61b79f23dfea62e1815f295d43f61d7b5956103b31ca88afb0b3d37eb42cf77232dbf2258065232971c397dcbcb":hex:"":hex:"dc034564d4be7de243ff059b5f9160":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"7be3909170ea7a2ff76f9f28241d8cc48ddeafa8517c6f8c":hex:"8dee7e29350c60c5bcfec89da6617d2e":hex:"f6e9e7a7f9716760eb43060d5c80236a0f118b0f750ebd5df01fd2dba95c556ecd2e54a3f337767321abf569c8137a8e48c5b44037ba62951e9f9f709e6e4540a36d769f3945d01a20a2ed1891c415a16d95cab7ddf9bcebf18842c830067509a2a5d49a9684324c433d53824d2f8fd326b149af17f40e5bf5e49185738fba60":hex:"":hex:"942b52277e9dc0a30d737d00f5e597":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"1fe413bafc4753e1511b580c830449bee56e0e5b9acb852c":hex:"e30829f64f3eda13bfb2ac572aceb3de":hex:"6c772d08b4d7507e35804572fa697c646c77301954cc5c160941e49e230697ed8c23338b9f30c3ead69b1c1a2329ff025dcd3c0d0a9cc83fee4979448aa71ddb9d569bedc8c497a2a4ac3b60d087d7872f0a110bf90493ae7da03b0953734223156cd2d6c562e4a978a6dd5cdb229dd58dd4d0f50ac015f2f5e89dac4aa29a19":hex:"":hex:"87737873b82586bb29b406946cae":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"b4bc4378d423931f9b320bb57df584c641406c1daa7448ad":hex:"eca70e10c0358838a3f4a45c4b016ccd":hex:"68d1c045c1604e3c3dd4f7c7543240aca8dbc5266dc18c5a8071e8b09e3700b7cf819044b2722d8db92021f42a0afb295d7b16ecf4e4704a50a527a2e72d7f53617c358e3b7be3d7fecda612ce6842fcfaa68f2d1b8a59d8b8391779f2fab99f820862c94029f444abe62367c5de0a4becc359660e4a5366f7d482bdc362b866":hex:"":hex:"06f95ca69c222a8985887925b15e":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"1cd4414ffd24e830e2dc49727efa592e430a6a75391cf111":hex:"a08e32ad7d63f975de314ad2c0fa13fc":hex:"20a271f1f4c6bea8f1584ab39a7179ec448650e2ff67a7338d1bc9fab7f73b2ce5222cd07ded947d135d9d0670dc368f0a4b50ece85cbf641877f9fe0ac6a7e6afb32fdb1b3cd35360bb80cfffc34cfb94dbcbee9ca5be98a0ca846394a135860fba57c6f0125dcb9fb8b61be681ada31a997638ee172525c03dd13171534a91":hex:"":hex:"c68842cafc50070799f7c8acd62a":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"9e0ef9ed5e6f00a721a9893e1f0d9079c5aa667a4cdd2a52":hex:"5f015fd556e87ff0d0df586fb452306d":hex:"b82986135e49e03f6f8f3ce4048ded2e63ee0c31ddc84929e022ee8561159179b3bb4403ebdafdf6beae51ac5bf4abed4dbc251433417ece3228b260eca5134e5390cba49a0b6fcbbbabb085378374e4e671d9ba265298e9864bfce256884247c36f9bddceb79b6a3e700cb3dd40088ba7bb6ab6aa11b6be261a7e5348f4a7d1":hex:"":hex:"ec9a79a88a164e1a6253d8312e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"9bc8f15d98e089d60d4db00808700053f78b33c31652c3e4":hex:"5cc0ff9bb7d5b9b2aa06f6ecf669d5bb":hex:"24ac95a6ed2f78853f9ab20f53de47e7f662f72aea454141e2131aace7ed2daeb395bbccdbf004e23ce04ad85909f30151b6526c1ce7934726f99997bbab27055b379e5e43b80ad546e2d1655d1adad4cbe51282643bb4df086deb1b48c1bd3ac3b53c4a406be2687174028ecf7e7976e5c7a11c9a3827813ade32baef9f15ec":hex:"":hex:"9779b7c3ece6c23d5813e243ec":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"19afc43a4481f796d77561f80b5b2e1514c96c5d1d86e64c":hex:"d4c06595fefd4a81bbbd4b40c2e1989d":hex:"98fcca51352998d0126b5539e3fb9a238ac31c05954fc206d381909aee70983b6ab99d3f3efe8530a1c3cfe3b62756321b1d0771a5940055eba1e71fa64f29291aa5e5b0af0fcc8e6f5a02688d9e93417225eded791a35217822ffb346d3fa2809b65abe729448316be30cf661137d3c0e49846cb0df598d90eda545afb64a5e":hex:"":hex:"ca82448429106009094c21d70b":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"b4fc31dcfef6203fdb296cc928c13b7df56bfe6f32583057":hex:"6308a78dc8f3c90442dc52196649c38e":hex:"2567d80c253b080c0158102558551445d8ce4d5ddee2014a2be5cbad62e1717a0fd4d2059447c3151192951eb11a4a7b19a952f6ba261c87f10f4c9032028de3cc5a2a573a4e993a690fc8954daa3ec92743e7343e75b646c4fa9cbc3fceb4f5d59bb439c23754c4d9666fbc16c90c0cac91679b6ad1bfe5dcf6bd1a8a67c6b5":hex:"":hex:"9d1603799e2485a03e7b05a0":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"1c2d9412486c381440213e1588b6bb58b0da53300b9d3089":hex:"727ed8846daab874d5a9918b47d016f4":hex:"656430f0c1423018b5e2efbb1e32a5385c1a9a1779c4dbd585dea91edc39ea8752ebfc2d8064251a8a5ae71e1845f24a7e42c6371c2ecb31e2229d5f4923bffc21d4804575a84836f3cf90ec6047bb360b558a41a975ece111b5284dfa2441705a6df54fc66ca6cc1af9163ecc46902fac337d5f67f563fde8e8e7e64b8588b7":hex:"":hex:"05ee6ce13711535864674a5b":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"abf7a97569427225a4bd5143c716a22e62f84c145bb51511":hex:"e255088cdfe8ae5c9fea86d74d2f1b7d":hex:"b850993300f54d078f83ceb9aef7345bbf758f92365b6625c210f61dad4f2a2319f51d883a383a706392d3dfca1706eba585a6fac8bd4294c0bb2cb3f6b454d5c97819e8e5c926754840261b07ec4ef1f87cf281d75c187839689944230306e1903047915e086043990745864819ad713d34a244aa4e9d755fdb137105d7eed8":hex:"":hex:"0c9c17388d0610f99d0a093f":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"45a6df655e88bc880acff41520aafd0cc8aa8aeb8952fd06":hex:"1125e1de94970c9e7be70e58e7626ef4":hex:"fe9838a445b8edef19b3e9f33c8c0c265b3a12c97b8ec57ceb94f65ae5227177de38f1e338dccb2b24e5bd0f0eb8127f83eba0f1ddfa55198789df0cdd1d977fcb985ad9c7d51b96e749d2cf3cc7a1ec4dfcbc641a1a022d55def328e081af890a7e699f2dbafdf506389e045aa1219239d5868ba675a3925602b6fb6f6e6d37":hex:"":hex:"1c3bd1e0d4918e36":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"279f4f2ab4b70778fdb9ca7800cd20e323601d7aa2c75366":hex:"0f7b402560735cf03d5da58de5b6c685":hex:"7dd9a8c848bbcf5127161c8a419a436a0dad559f7c1613cdf41594e177016acb1ccf44be852185c42e7120902a42efe83855995ab52cf5c190d499fcfd698c671fd72949dc3ea7ddb874e586a3aa455a021cec7b5f8608462ca66f926aba76e60a5846d4eb204155cd3c1328da51ba35c3007b8bb394f34e3a8b81ddd2ea1115":hex:"":hex:"dab612351f75e2cb":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"6716ab937755684af7403e6fba5452c1b11568a9047bb50f":hex:"2fd5a446dd564619ef75b6e00905ffe0":hex:"20d261d3192996c21da69e979c26f5f937e6ea4cb7b05c6ef556ce4d86ca0fe85ec2425d274c43b5212fe9d27bb48b04e887461a9f45f524059b87eaea2e287a8d4537f338b0212012a9d4b6610e8c97dd554e0b3c3133e05c14d0ddab3524c93fd527e223b1996b4cff0a4a7438f1d54890bf573cd803941b69e5fc6212c5d2":hex:"":hex:"f1d743b7e1b73af5":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"7dc94b5bbd6315ad8d2b67f0c683d10cf456f822a3ebb024":hex:"6f3eedeb57dcf12bfb3cd80849893c90":hex:"ee1ff367f4b23c156e3dccff84ae4bf2b8ecec1fb5ffd25ccaa93b6c6834389bd79655bd4bac75238eb0f65d3603ecc57c8774798309e85b6677e78ed2077b712cf28795d0dc8fee994f97373a82338ef67c62378136a79a990ecbcd6367445e805efa98f9168826e57cb8dd7e7b1d5c89ad98358646fa56dd2a71c40e0275a1":hex:"":hex:"4dc74971":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"3bbe223e253bf272599e28af6861013ecd0c88710947ed41":hex:"4fbf09ffaffb600f0de38fb12315cab5":hex:"5388146f6479f7b3b280f45655a95b847ee27c734fb2fd91f6c009b1ab1810c772c7435d3221069f9490d251b76e740147906ac1db1c209c175b21aa10881c44fb307d4d2900aa3b1d56fb0edb9f2a58505653a17fee350e12755b9656bc65c78c1593d5cb7178e29f82209caf53e60fddf725f6957cc9718bf410c4a0229ed4":hex:"":hex:"fb845ab7":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"461877813acfe6e9979eab729b52e3d192b3236758bb6563":hex:"6985cf77b75a47a3978dd6412d59200b":hex:"385551854a89ab37063ba0ed911501b3d632153c5c2992e154c0a334bc36620476f11495437b842409e0954f7352cbf288d158bdbbaf72621ea2ce75b708bc276f796c5aa7fd0071e522c5f175a9e7787deef79f6362101aa3607b4588f2e1df7127f617c6073593a1c792b959e201e4a7a43ea8b1c3af026376439ef629266c":hex:"":hex:"c840d994":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"09770f9114120a2c1c3cc416fe0eb8699e07141158a5bdff":hex:"cff291d2364fc06a3a89e867b0e67e56":hex:"":hex:"875e2e5b5c02e0a33e71b678aa29c15ce18ec259cf4b41874893ed3112daa56ff2a7475681b8b3d9028ef184d30658e881c908f3588f69899962074db4ddfc0597f8debb66c8388a1bccf0ffe2cf9f078dc1c93f8191f920754442ad4a325985c62de1a57a25de4e9ed5c2fd0f2c8af33f3b140bac12bf60fdb33e0ec557955b":hex:"81f1eb568d0af29680518df7378ba3e8":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"4fbf1c785c087ad06b43d4163cf9b9396deffd3712856379":hex:"1c8f41424acaf009996ceaa815b24ad4":hex:"":hex:"96a690e5319c94d94923988025307e543f16fd970aec24524cf9808dc62b093359287251503f4231bf52cd1a16a80bfa82d8f585d96855dc1932f4919a92da2618d6448fc18a234f9acb386ab4ab4a9e38ea341e7c54faceff38c162d74e7fabbca13aadb71e9c8ae6072e7bef4073cf08aa7faaa6d639f98d15bad4ed183ced":hex:"9f3c0349c5a4a740a82d6d63bf00fb17":char*:"":hex:"6100b091e52366fb422251d9b68974b6c666a62a8bb77a1ffd7c7d1ae586a6ee763b84dc11aace02a25af91d194b70b3265ec46872fded54275b7ddb26ee1f20c857328f46a694fb1dce68bcaecbd587ece5b505d658d57d50333e30b639eea1f6537b37c175f62497c6c84e3cfddae214285d2d68d90dd5cd8ce2273d25c8ca":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"3e0ce4fb4fe4bb2fdf97b23084ff5671b9b899624184acef":hex:"a950ab0dd84115e3829ab0ad3bbb1193":hex:"":hex:"df89974b1534f0ba262bbea5efe39d8b72820cc8a720cc99520fedbf667515c3f6d8c3e25c72c48c1cff042171df58421741aacb2a49f23167257be7d7004d56b14901b2075eaca85946e9fbf1bbf4ae98227efc62bf255a25dd0402d37c67ba553531c699dd89ff797e7a5b5b9a9aa51e73ca2dacfda0f814152aa8ed8c79f9":hex:"25cfde73e7a29115828dfe1617f8b53e":char*:"":hex:"847b54e176ccc83081cb966efc4b4a3bf7809ce0b4885009f620f61fafcaa78feee91a835ae6c1a942571811108b1e81b4c4ddac46aaff599c14988c9a1fb9f387ab7f1357b581568b7b34e167ac2c8c2b2b8a4df3fd7ad8947a363c1c0cb782ec54b1901e928821cf319669dd77eb37b15c67f13ad787ff74312812731ca3e6":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"6be3c66b20e5e66ababbfba1b38e5a716eafce23a1767b69":hex:"3a2acf69bba19f5d1d1947af2cfda781":hex:"":hex:"de1cd978354a499415176f260021abe0a8c5bc34d166f53d20e02e413e1377ce4ef5d7f58337c62251a3b4ddea0dea23c40e5de037fd5dd8a558eb53bffa4e8ce94899afa8284afab503c1a485999a154d23777f9d8a031b7ad5c6d23d6abbe3b775c77876ad50f6bed14ac0b2b88fb19c438e4b7eb03f7d4d3fcca90dd01260":hex:"f826d212f7c1212fb8a8bf23996826":char*:"":hex:"fd1f7b56e5664cf4c91e58f7c50f6c5e98e42ca2e4adcc00348cee6f662b382ad4022da54a47d8faeb9b76a24dfc4f493c27fc0bc421a4648fad7b14b0df95d8752013feb033b1fd971daa2c9a5df898bece6a3b8fa078dd130071df20a68cd0f394be25dcbb3e85bdfa0df4797fa6f01f5f0da7a6e86320207ddb5b3be53ae0":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"d16abb9f5b38d7f5abba9dc36995ce6ce928ed822a07b7c4":hex:"3cd95429c6de1d327b9eb3c45424a87c":hex:"":hex:"e72f29b1fc1dbfc2d93a0f3b79ea4b9806ce9b2c4d490ac5c0c3c793df9dc7df5471e834b84d18afa5a7516f9a6a813a9b65ae2f083a854730547e28a1f60fe97d8dba1d2d433e11847b9bffd8873ec634e64365530c905dd6f274e45c9795ac127a6f356f63cc6c116c5dd8c628e7e17e1fadc58f8452bf21f53c4133198118":hex:"13521236f190f78e75c0897c5fb237":char*:"":hex:"cd8bb97c28df092b6783ef653fd26f2bdc27c442bab0a4c7bee2789f389dcd1b280c0231672721bfbbc939a0449557678ec61ba0afb2e5817e6f7d94387f84ecafbfa1216d65e7f5025f47b0d2905cff7c99adf8306a3d9850c5908be05f87cb1d36a4837dba428aac97d7fbc18e3778f8d81a319259504c87fc94bd0766ed93":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"0bc344b1a4078807e5f53a6e7e1e36fa83108473ae2fb4c2":hex:"bd505fcba464e6e2c58fdf29f5695fb9":hex:"":hex:"8bd73f94c71e3765bc7d17fdc90a9ba6aff9648b46300e4048985fbbd7c60c39c3766f7c524780bfc2296dc11e1132134921760a373104edc376eab6e91e9a60a5c4a5972935df12eadae074722bdc0147c3caf6a62fd449ef37d76b65f6d210283c94ac524cf13186e444d80a70b01e4373cc0462546f1caee6b49e738a742c":hex:"8510fff71bb879f56ea2fe43f6ff50":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"c8097398fc21f93eea6a95aa93a3231096817b65520bc549":hex:"776248381941e16908f52d19207881f5":hex:"":hex:"80b0abbaebbd537a0810ed75cd172d29d50f5982e4d01f8664ddb2dfda8f57fa0ed87e64a779a1d7f5e568b6acfdc739572a7176752307b430fb1fa1c3c2c346477cebe7d01b16745ca6c8929a7f446c03ad9a9e8a5a935de78ca6c701e8c1c5e6d2550c42949cf5342fb5ef4c6ab9bb02ace8388b16edf72a1237e5d1d0e820":hex:"7fc4388b2f8eab0f0c2d6a08527e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"76d4bb5694faaf344db83bc6d6c47d56bb6ab52700826f2d":hex:"603977845d82faccb401817ecce6e2fe":hex:"":hex:"9e31fda6a171f0d4a5f2af2c4f827b1312d9dda5d78fa329b8f1b6373b9b29be358601e5bb0d0c615aef4b9e441c811219f1f2ff2d0ab23e0cd829a88b5b615ee72e5e3ea604fa26cc6438ec4c30e90f7348e9116adf8e8efb7498320d2da16679fa546b1aa9afc7720b074c4e48e06862d41428c9e71a4772c2e195a6f36978":hex:"c955a3bc316841be07e406d289c8":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"a3e5020695587984074d78d9c98b8e1a5719e5f88372740e":hex:"4cd56de54e5140a587be7dfd02d3a39e":hex:"":hex:"c0bfe3b2dc4dad17ec5a7662d86847fb67e582cc0baf469bc9baa7a075d48a8b97521a1072c2798bfbdae5ca3752eda1cb96fe5cf24af989eb77a2948aae3d8b70d83d93f84c49347f788480f34051621c358c03cf8159a70fc72cb8bc02876234ffe76b181da8b22b8796c87b0904da1af46de519c20d8d1b1dc7cc24e39ba5":hex:"1a29527a41330259f918d99d7509":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"afe986ead799727063958e2ce13ca846f76c51605439f839":hex:"f85a95ed10b69623162ab68d1098de94":hex:"":hex:"7c1b354a5bb214bd95147e32d81e658705089c38035d0ea423eb1a5c82f97443c6903d2cf1ba7a007eec7c8ff98b8f82b073d9636a79bd47c7f2f639a8eb4e92076f9ed615766f43ac3a4f1687301ed7d507766605e0e332880ae740ab72e861a2cb6dce1df1ff8be1873d25845ee7c665e712c5bbe029a1788634bce122836c":hex:"3cf1cdb4a4fdc48da78a8b4e81":char*:"":hex:"a7f252ad7983e7083260598051bffd83f40f4d4a8b580cc2388d720a0979dde71549ddcb86b0a62c4964fca591d0982f3a203f2f8884ff4991f17e20f759ea7125ba2bb4d993722f23938994eb2709c850f33ed9889e5a3966f9d7b76add46aedf230e8f417425f9db79ccd46b5660361de7c5d87f71a9d82c491c0c3daaf56c":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"2cfaa215841826a977ae6adfdd993346210c49dd04d5d493":hex:"537a4ee307af3072e745570aaaadce34":hex:"":hex:"e8eb3b6edd0ca4201b49a6a83036445aba1a1db040f3e74511363bce769760a9914e05a067f555ca15a57c6e02e66fbe4e04dd8c8db8d6d14ebc01cc7d84a20ff0aacb69bb3679d6b7d9d2e07deda7c2d4fe4c584fe1166e78d21dc56b9cdad93709c03b9145b887f87b4f605f24f989d5e0534fc71a58e8a8619ee99f69e5f5":hex:"df01cffbd3978850e07328e6b8":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"128ddc83d2170c403a517615056dceec0d19d6fd7632e738":hex:"5124b410c43d875eca6ce298c45994a7":hex:"":hex:"cfe9f7797ee37bfc4f564419bf2268c964479efa7435970874154432930f3b2736438da4dc9c76200009651340e23044bc9d200a32acfd4df2e1b98b0bae3e9ff9d6e8181d926d2d03f89768edc35b963d341931ac57d2739b270ce254f042b64ceac4b75223b233602c9a4bdc925967b051440c28805d816abe76fc9d593f5a":hex:"56ad9c1653f11a41fd649cccd8":char*:"":hex:"cf91f087fd7faf362caacf4a68cff51ec57b3075563e4ad0955df20b366e92bd75c3762cf4a6f0eb859872667a5c55aa5d94f5ac9479b1b9c9345b50f82379d551506a2ab02b0441b14b28b78a12b38500d703a8c19888fe612d4710eec7cd18c16d6a4b55d3c69760e2bed99efc8b551dbe2ac9b9b64715f87180b8e14d1795":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"98581c28983c4da321ce0c419cc0d476d539e77da513c894":hex:"ff10234524433b871202c2cca6acb194":hex:"":hex:"bdef5b65b5111b29e781a6b71a0160179c52b5bccb1ac5c0377b26cf3f61432f3ccd67633a836357c24b5099db0510a7f8110f59e8227cacd11f17ea1798b5d4d68902ca6c6eccd319fef14545edd135078b38d43b61c9af269fc72f7a209ba7897e4c6dbd21bb71d7e93d2d2426ffa1557cae28e74059d3baf06ba419a47b39":hex:"984943355a7aef15c4fb8033":char*:"":hex:"808e28bfd441cb8890416a757d252c986daa8d607ac9cadd2f4fd29eddbcf3b859ba298e14a4ccefe2c2752b123f87b98d6708fde48faca4bc7dd818a7ea76cfa4357932e59cb6be0e9283bdfb49454b86b9fd04aa8cdef503c65d13fcff42e9cd8f142f8c06cf7daa6d8ef8b9c9d69c39e8afd980048fecf731fd674b2a814b":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"167b8b6df8014c8f3de912b77f5a0c113580aa42d785298f":hex:"49da91e926091a448d57d521cc90f3c0":hex:"":hex:"4f787de12ba907a589edf74c8e7a6cdaaabebddd465a86e170e1efc289240298b516fddc43c7fd9bb1c51720a4455db4dd630b59aebaa82bd578eb3cb19f8b23ee6897c1fefaef820430efa6eb7d6ff04de4d8b079605fb520b0d33e96c28f0cd71983c4ce76c0ea62fd7209d21ec7b416881d545824a73d1f9f8d3323fdb90c":hex:"99198f55f9fa763651bba58e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"71f5f8505fba62f08fa0557dd5407fc83a852c6007ccecc8":hex:"b5efb9feae3de41b5ce9aa75583b8d21":hex:"":hex:"3e19ec02365e450e946123a3362f9859352eb52902a6bcb8a782285dfac9d2b282f56302b60d6e9f53fddd16bbf04976cf4eb84ef3b6583e9dc2f805276a7b7340dec7abde4916fb94b0ed9c9af6d4917b27e44d25f3952d0444cd32a4a574e165a23fa8c93229ceb48345171a4f20d610b5be7d9e40dcf7209128f029fed6bf":hex:"9604d031fa43dcd0853e641c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"4cdb38f8185a4186fc983e58a776a6454b92ecf0bffefe98":hex:"aef257dd44d14d0bc75f9311ef24e85a":hex:"":hex:"1ca72c50a093076e9a9dfa09888b9c89eb36a942072fc536a81713f05a2669b39fdb2871b82ca47dcaf18393ca81dcb499aafcc4ed57ea79f8d4f9bd63540610215b2c65481b294638cec41264a7fdca4230df5fe1e7e3d8d26dcd0c435fec8e9bf778f9e6f13482157a9722761601e08425f6160d3bb626ae39ee1117b0353c":hex:"d951becb0d55f9fb":char*:"":hex:"2eaa7e922dbd8963e2078aae216636276f3f7cb5d7f35fa759e91bddb6e247a93c388241ba1d0d37040c0b9e447c67d35b4991c1acce97914f3bc22ee50171bc5922299983ee70af79303265bc1ae1e7334202460618b4a8891d1a7eaaac5cac1e4dce024ce662d14849993f89e771fb873644b552120fd346250df39aaaa403":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"ee8d3aced3aa3cb2166aa66c4a252c12dc0978830d0bc75b":hex:"c15c9c0b0b70c7321df044bfde2b15fb":hex:"":hex:"ee69b2421d43a9f383d99f9802ba4d6cf1c537b42041c86cce681049bb475e5098d4181f1902b0a49c202bf34ef70ea7b787fa685ab8f824fcc27282146d8158925bfef47ccba89aa81c0565eacb087b46b8706c9f886b7edf863701003051d6fb57e45e61d33412591ec818d016eec7dee4254636615a43dacb4f1e6ec35702":hex:"c5c9851a6bf686d0":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"4a8538d609444e3197ab740cd33b66db1cf53600096b94e0":hex:"0bd64d222532dae8ab63dc299355bf2a":hex:"":hex:"8c2b8fb775d1b21c41a3dcf48ad6d68ab05be3879f9b94b305a6ce4d799e3a992c1c3a65a3e4eab563edb57424927c90c76e49386e29dd5e7de2800fcc0eefbc8b4f977f71be3754c006ee93dc09b1cfa59c424b6b3987aeb56feefc21004c63e8284b6845e395bc8843cca0917267fb4a8f2db1f7daafe7a9da95083a44de70":hex:"3477cad1fd4098b2":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"447f0f065771b6129952e52206a64fe0844658ed685e39cd":hex:"37e3a300542d9caf3975c6429cb8a2e8":hex:"":hex:"fea5d227869e527882c63a68a6623f4a699df82b3dc715c7260a5554336df8376744c05ae89ec27d40da02d9f1c5e9e29405579fd4132143cb21cdbe3edfaaab62128ecc28018725c8dd309d2376223d2e2edfea9765699b2630ff5d9fe9bec416c0ca6418b938d195d31a08e4034c49d79e3a249edd65f985230b33c444dd02":hex:"06bfca29":char*:"":hex:"e1bdd1c212b159b87e41a5f64dcba6b27aa0f5c8871fabfb588df0e06bd7730ec1beb0e3388f96c992a573ff69b34870f83c53fb65b420c1c6f92e2aa6f03917e8203d77c7f5ee08baf9fab12f9d38fc0ffb83807ba781c3dd7b62edca2121f68ef230b42b8adbd4cea072209d02713789ed559b83739a54cfde69e68bdc4128":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"f465e95f6fc19fe6968b98319b547104d0c01c17105f8fc0":hex:"6cba4efc8d4840aa044a92d03d6b4d69":hex:"":hex:"2426f108368a00d2a49670a3b64b4f0569c6da9660163e7b209ec3f8d058ee11f7818a8c5030c5f4ce6e1e5a93faa3e5ae3d0bd5d712fbc891cfeb20845707edcf5e29719a5246a3b024fb12d37bd1b81df3812fd50b1dfb3e948ce546dd165cc77f903c07fe32bc7da7fbc25036679017317ce94cd8a00c1bce7379774f1714":hex:"92750ac9":char*:"":hex:"2e59b104c1a6f6d651000396adbfa009bf4cf8cbf714da8e4d3b4a62bd7f522d614decf090c7552a4b9e8d7ee457ba642d5100c0c81c14cbba8c8ff49b12827f6ebd41504ccb6dfc97cdf8532d1f7f7e603c609efa72d2ae0dce036ec4ab36849a0c06f8737d9710075a1daaed3867ca0a7e22111c0e7afae91f553b6fd66c6e":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"f08e3e9f7b3a20ccdc4d98b56f2b567399a28a6b3908deab":hex:"4f4636d1b283bfa72c82809eb4f12519":hex:"":hex:"a986e816f1eafb532c716a555cca1839a1b0523410134ea0426ab309520b339fc1fdeb40478ae76823cee4e03b8d3450e6be92d5ff17b2f78400f0176e6d6a3930bd076a7a3c87c3397dcc0520c6b7b4ff9059ea21e71c91912a74aac2ca70eec422b507cc5c60860bb8baca01eec2a3003970ba84011efe576804b2820e306c":hex:"16c80a62":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"87b5372571fb244648053c99405999130f87a7c178052297":hex:"a1cc81b87bd36affe3af50546e361c9e":hex:"684ce23f59632308d7db14f7f6eddaf4d83271fb0c27401b09518a775b36252540f14305f0dae13ff6c0dc565c9e570759e070c8ac73dfb97abd3285689a7cdcfc941f6271be3b418740b42ba4a114421065a785be3dfa944c86af56da8209779e8736e62529c418b507c6d8ae002cbc0431747722afd64521734f99273de455":hex:"ae078d1554fc6a14447a28c3dd753e790f7ef9b53e35c3e0fe63a7b1b326bc56034847f8a31c2d6358049aae990bfe7575b439db370aa515e225e0ec730488c700a7b0a96a7b8e4e8e4c6afec20decd16fe3c0f3f8d7a6cf7a8711d170829d14c706cceb00e133b8c65c8e08cd984b884662eddd2258ce629abf6b9dd28688c9":hex:"98177b3428e64bc98631375905c0100f":char*:"":hex:"8be7df33a86b1162464af738de582a357d0ce8e213bba1b7913c0d13ad759d62c3bf4366f5130b3af2b255b7ad530b4977627f9e76b07e360c079d0f763dabbd22e976b98cd5495c6182f95bc963aad4b719446f49d3a448d11cac5bfcba4b675b8e4d88a389e2580e8f383f95bf85c72e698680d2a2bc993c9ee1ce0d1f1ac3":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"a2d069b826455d5e79e65db4f1d2b6a29ae9f401bc623917":hex:"6d40a0c7813bc0410ff73f19bb5d89c9":hex:"9960376b1898618d98c327c1761959d045488cc6198238bbe72662f276d47b41e8aebc06dbce63da5adcb302a61ade140c72b9cf9f6dfad6ecedd7401c9509fae349d3c7debe35117776227ba167f2b75921d7321d79f4ebca13d20af1638a1567043365f179f4162795fe4fd80b5d832e4ca70e7bf9830bc272b82182f70d2e":hex:"acd6225dc5b9109d56ea565ab38dd4db432a7ec08f0db04f1c6b691c96d2eaaa6be62da7cc7fd75f931716c7f39705ea7cf828f1a5a325955e9b2c77e7fb2d562be6a89b3351b1b3d1355b43b73ed425049430314c16bf0836ed580e9390a3b8e2a652fddbfa939ca4c3c99765b09db7f30bf2ef88e1aa030e68958722cb0da3":hex:"010195091d4e1684029e58439039d91e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"f3252351fe8e7c628c418c1a49709bf1f8e20add82539948":hex:"eacd2b1c3cf01bf4ea7582d8ee2675d5":hex:"141cb39a2fb8e735e0c97207f1b618a4b98f6b9bf8c44a1c8e9ea575a7759cc2a02301274553e7744408b2c577b4c8c2a00e18f8717fd8a6d2f46a44eeb05d685fbef7edeb4229e7ea9b8e419ffcb504d33583b3ae421c84caeca9f9789047dd7b1810318d3765307233567bc40e003401c9f4e1b07a2a7162889e1a092aedc1":hex:"7e8d2816d280c91d232bad43b6610e2d0532a9f670f221a3a975fb16472c2e83b168115e87a487bcd14b37f075e1faa59c42515c353cdefc728ac617b7d273fa96778e3fb5f7a1132f8e2add4a57015b15d1984338b7862356243d1c5aa628406f4a507498eda12d2f652c55e8e58113ed828783b82505790654f036b610f89a":hex:"63a310b4f43b421a863fb00fafd7eac4":char*:"":hex:"699c146927ae29025e5b20088b20af27bc75449e4725ee6b7d5dc60b44ba8a06f7d265330c16060fbd6def244630d056c82676be2dc85d891c63d005804085c93ce88f3f57c2d2c0371c31027d0a4a0031e3f473cb373db63d4ff8f65be9ebe74045de813a4e6c688110d000f6b12406881c08085c9348e1f0315038907e33f7":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"e462957f2c500bf2d6bfa9af97938fdd8930e360ea4175e7":hex:"b380584a3f4e0e59add4753c282f2cf7":hex:"682b0af6592eef173e559407e7f56574c069251b92092570cbb7f5a2f05e88bed0af48dcda45b2930b1ee7d5da78dc43ec3598a38593df7c548058eda3c9275c1304489aff95f33a6cd79e724e8d12ca0ae92b20273eb3736efcd50dc49e803ad631dcbf64376a45a687eb4e417aef08a3f5f8230d3f0b266ea732c21ed2eed7":hex:"82a7a6dd82a5ea3d9a8e9541d854978487eda298b483df02b45c76b8b38bac98ffd969dd160a2765595b19d4ea3e64351ce95764a903f595dd673d13facf5a5594e01be1d60a0c6d28b866a1f93a63a74fecb6d73ac6fb26b20c008b93db53e9dc1d3e3902359fd47734fe22a5c6958f97e9001cc4e8b6484d9542dbbdfcfcdc":hex:"28a43253d8b37795433140641e9ffd":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"4a62ddd87f41c6df756e8da0985dcd8c91e73ba395b3d79b":hex:"1d1843e2118772d76a0244a2c33c60bd":hex:"028b92727b75b14cb8dfeb7a86a7fec50cd5de46aa4a34645754918b8606819d4bf8a2e7531a05ae5505492ca6cbc8c0e6d6ab2dea23bff1fdf581bb780b4a3312aa39639383fd10bcf92489801954733f16b021c2e84809345216f8f28a99773341e40c4a64305a2098eaa39f26a93bd556c97f02090e1a6c181a4e13e17d3a":hex:"37a83ee6dbdece212446739ea353cb957b9aa409c88bee042bbc3a6e5199aeb28f2b4b00ff433c0c68d6db5a197566019db8a4c7a792e2839a19a302ee02bee046adce04c1fbbd5b0c457d7cbe277992ce2c153d132269e2d1f12b084cf3026a202b4664bc9d11832e9b99c7cc5035dcfde5991dd41aeb4fbf8bec5126a9f524":hex:"ab738073228bdf1e8fd4430b5c7d79":char*:"":hex:"e702f1bb9a1f395c74fca0ce9cdf29e7332c14acaca45200cd432a5767be38929ef8de43d0e1a5e7300c1eb669ac1ab997b31cb1403af8451e77e63505920af0f8c3abf5a9450ea47371039ba1cf2d65a14fa5f013b7ce1d175859404dcf6461a36e8bc260e7abf739d8951ddf1a3754e2d65e0aa31320a5ffca822023bc0906":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"fc46976d38a581a7042a94ea4b5bfe3587ddc65d1162d71e":hex:"b5e92563dd0339df00b7ffa2239d21bc":hex:"7b6f6e104acbcd7188161477d8e425ff99add22df4d22de7f28d0a0075ca4ef848f68d07ed22d3165c08e40890ce04d1bd05b1a6ccb2fec8193d5f7dffc93d97a0c036b3748f708b011b68247a0249b9e1a60b652164e5c2fd7210377de804ac010c8aa08a11f40af97e8370a59f936cd14c22ea7a236d904145adc04a241fc0":hex:"4b9e858fc8f01903e426112192d4ae4686b1ae4d683b75afb2b8c63590275943d0d6d6a23b6d35796a2f101203acba107474ca6f4ff6dd87d6b77785ad1d160ef2755d84092dc70c86db5e639b689943b15efa646aff44b3f51f5d3f4cf6c8f7fc5adfe7bf2d72f75b93b8ee94ef3fa69ea0fc0bb77b3983901fdcd30bcd36f5":hex:"d4356cb417953b01f7b1110c8aa3eb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"403e49feadd4db763652ed5c4b1e12680cfe0abc30f4696d":hex:"1a60258a56e15f92814b4d372255a80d":hex:"a4ffa9e3c612103224c86515dad4343cbca7a7daf277f5828670834f4d9af67b9a935c71b2130dfbc929c4409bffb7974ffa87523b58890770439c33342880b33319c626bf776c1c0aeb9c2a348a7681572f4ff711d94c192f3450e8b1275f9d02c742a2c9f1da316e9918bf787f22699172986cb9b10fc56d5f6b8392ff92b8":hex:"221c61d769febce3913bfead9a201a805f11005ddcac185cbae00ce749de9c4362889b1b0d9546e91598e0ddedb88b673a90acca65d7e71a85636be052f361839a646dc8b834c02f3e2261d370e6bac9636b7536225b5ea77881200c8a3450d21bfd1e11afb3a470e178ecfe944a25a7cd0254e04a42b67723aac8afffd56fee":hex:"62646fc8bfe38b3ba6d62f9011e3":char*:"":hex:"5c76c90dea7d659804ad873960906259fbdda3614277ec575d9eec730e747a2e7b9df6716b4c38d3451e319eeecee74d1f4918266fc9239de87080f1ad437b47c6904ed2d5514161ad25e3e237655e00e53fe18d452576580e89b2f1f0f6aa7e40a337fd8c48d690fe013a67264a80e9b5dfd009a9152d559aa02a68f401a09b":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"c3471259512d1f03ce44c1ddac186e9a56c1434a6ac567c6":hex:"50164c63d466148ab371376d5c2b6b72":hex:"11d1f523888bea1fbc680d34bc9b66957d651efa59e788db3d3f6f50e72184b9d14e9ff9bc05fb687520cf423d681812e007025eedf0e78e7e8191e6b62404e8eb400cf837d762a31aa248553367263d6de091fcf7abedc3e69fc118b7efb0594c89b96c387b7c28ed9a7b75db60b6b5133949b891ff81eca5790a265f12a58c":hex:"dd5b98b3b3cf03fb92be579068a885afd984630692eb5f155fa6b49f2b1690b803d34b90e8de3cc39c2e61650ffffb51e7ef36d35ad17dc4d91f336363b0734996b162b509c9954cab3dd959bde7e437e9100d84c44104c61e29dbe12492a0272ce6eea2906d390de7808d337e8c650b3301af04a9ed52ab9ea208f3c7439d6c":hex:"6c5f38232e8a43871ab72a3419ad":char*:"":hex:"50438ee712720abf2089331e4c058b30c30c3d17834c507c0010ac3f974a256d01b14a45e9ce5193c5cede41330cf31e1a07a1f5e3ceca515cc971bfda0fbe0b823450efc30563e8ed941b0350f146ec75cd31a2c7e1e469c2dd860c0fd5b286219018d4fbacda164a40d2980aa3a27aa95f8b8e2cd8e2f5f20d79a22c3ff028":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"ec326a1e0fe6a99421398df4fc7d8fea67b67e5f5fcd50ad":hex:"c94aa4baa840a044dbd5942787a0c951":hex:"f8401c578f20d9c250ea86eb945184e007a0190462c7abddf238ce1ceddcc230756aa222386d8ba66ebbba13de008ced140896ac55bc47c231cc81370ca9feadc225e017d59890e6291cc4cca27db3078c0cd6cbb51afb62210226a76837c5454728cb5ce3afe7352e7fe75421f94986e6b7b26321bbca15c75ac7c13dc15f50":hex:"6d5016c434a0f4b4a5d9e0b6b8e2d848a94f132f055d2d847e54601a4c9cfc5966a654d696f8a3529a48a90b491ea0d31c08eae8ef364f71f8ec7ae7f7e39bb9c331137b2578362ff165628099944ba8deb0d99ac660d5ed2215b9a7626ff1fa6173cd8dd676c988d16c9cf750a0d793f584c3c8f5fd5d167bc278f4d77a629c":hex:"3269922affb9d767f5abe041cc8e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"a7ef81652f604e88a72416924c53979dc73cadd3575eda1c":hex:"0cc9ae54c9a85f3e9325c5f3658ab3b2":hex:"d0195b744351aa25a57a99df9573dfa3cebe9850139149b64f7e4af37756a430dda8af98e4ed480e913aa82821c01c1f75b187e105a8f39621757d522c083a8d81d7d8bfe6cf15c439d0692b6affd655a11bcd2457046fae996a1075c66029867b88cd23c503ae04037dd41f27bafd5000d1f516002f9fcc0f2500e8c1b27de0":hex:"9ecd19a8eba9fba843486e1bbfb8d9053c5e04b24e30174d4aa89d8307439d653f8630edddafd51719c744bcb4bce3e444847567bd2cdde2995870d0634cc0ba2bde4b6bc2bc583062fb83874a1c25b50aeb945bd109a151772c077438c4d1caaeb5b0c56390ac23c6d117f3a00fd616306fc2ffc4c1e76f934b30fbbc52eec2":hex:"22c2efeddfd5d9cb528861c4eb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"605271a41e263c92dc14fe9df5203e79d58cc2d1289dc361":hex:"7f128092a777fc503adc7f6b85eb2006":hex:"aef9f984fb645e08d5f0aa07a31c114d2f8e9eca047e4a8d5471378cfc2ced1159dc093d174788e58447a854be58942ed9a3fd45f3f4a1af7351e087369a267797c525f134e79709097e733b9003b9be0c569fc70ee3462b815b6410e19954ce2efac121300c06fd9e00542a9c6a5a682fe1010c145acbbb8b82333bdb5ddfd9":hex:"2bda3448a283ecba31e0299c0a9e44628cb2b41fa7b1a41107e107cabc381083bdbe048f2804568fdd5fe016f4d607f694042a459ba03a2deda4cccc8cbe4612d8ed0d4575e48bc9f59843369dbe2af6d048e65ff4250e1eef61d7b1b378fe2f3305b133ddc7e37d95ca6de89a971730fc80da943a767ff137707a8d8a24329c":hex:"673afea592b2ce16bd058469f1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"fa076f36cb678e2275561e9553ebdf397360e5a5e44791c4":hex:"1ecd53d94fe287047ff184e8b9b71a26":hex:"5ff25f7bac5f76f533f9edffdfd2b2991d7fc4cd5a0452a1031da6094cd498297fb2a05ae8db71cb3451e4ac33a01172619035a9621d2d54f812ef5343e14b9dedc93838e4cf30e223d215b4d2476ea961a17ac7295069f25b2a12d6e2efe76d91f45632c6d4e61ff19a95d5ae36af960d95050ce98b5791df0b7e322411c884":hex:"513305e86c0cb046c5d3720b25a406392766bd1fb7de2758de370ff2e68281e211922890c61f3659460f22c45a57895b424441262a3ba0606df4e2701f38281fd3436a4d0e0f8efecd231808a9ea063dfb725015a91f27cadfe7909a0ee109eac391ac807afed1767ae0515b9c1b51ae9a48b38fe7fec7fe0ddee562c945e5ae":hex:"079e8db9c3e6eddb0335b1cf64":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"ce9dafa0e7e53a8766fc0bc38fba807d04e14e5ed61bc234":hex:"fd0751af49814ee98b2b0cdf730adaa6":hex:"1cba488a0fc8a012f9a336cc7b01cbcc504178eeb08237dbedbc6c7ac68fdf3a6742751a207e43d43068abf6ef4e12a5e3c17e5a2f9398fc04ced67377cbb858fd6020fad675a880adb249e4aba94b96efa515d1cdf5c0c3071a27a3245968867ea94b2bfc2028a67be34c84c3f475944497aa8ca1ab009f8e4b11c8308c1996":hex:"b585b8bf634757dac015f2f69f2ae674372a664f2115ad2d03bd3e0c335306b02d0947d3cda5991f5c0c25f12ead2c3cc2d65d575fd67091c70bc93ddb4b1e21f7b0fc6e6ae652dea93a6564ff13489f927942e64dd94bf8f821c7ffdef16df58bd8306a957821ac256da6f19c9d96e48eee87f88acb83bae05d693b70b9337b":hex:"e5dc92f4ad4000e9b62fb637":char*:"":hex:"95f4324b0656bef19eca5570548fc6a7a9923f4e2a7e42066891bc132fd73bc1c9089755d996756de0072824e69c43f2db8ba2bf6f90d3c4eafc0721ceaccce1af896f9fb15fb19c4746979b6d945f593fad61d550f81d12b5945ed728c02931d7f8d917285c22a3af748d75a6bf163fddd84b941d8564c1a63192c816ad6d6d":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"8a328554fed68dc4838fbc89fd162c99ec105b36651abbc9":hex:"e4f7c69a1d026eeebfc45e77bd7b3538":hex:"e349dcedb0bfcc771c820f0d510b80cef32ae3326484e25aa183015941e7844bc46f617d5e61fd64fa71759e90fcb72ae220bcd507f0fb389b689dd3fa29b3b937eded85f26ada9e0f3f5109f82fef47c7eba7313049750ad17969e7550c0d4093ed18ee27843d082bcee8bf3fc7833d569b7723998595a5a1d871089fd238da":hex:"75986f56972c045c850ed68aeb229f203b228fdfc36cad6b16d9bd12037c48700d20d8062a983ffeca76b8d36a67ef51bc8853706e83a34e4e23ff4f4a4eb943f19dbe85e454043d7906be6587a85079f9ccd27962d2905117d2dbeaf725d6ffe87bef52b2138da153ef29b18065b3342b3f9d07837d57b8bc5f2597de06c54f":hex:"8e8320912fff628f47e92430":char*:"":hex:"a1ed65cfc7e1aeccd0531bce1dc749c7aa84451ec0f29856f12f22c4105888c7d62e2e2fc8ad7a62748610b16e57490f061ad063c88800037d7244ee59e109d445205280473390336d7b6089f3a78218447b1b2398c4d0b3aac8b57a35891ad60dc1b69ad75e2e86248ceac7bb4cf3caade4a896e5ee8c76893ef990f6f65266":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"6e7f6feb4022312de5c804ed1d7a37580d74499107f8cc8b":hex:"6ce13485ffbc80567b02dd542344d7ef":hex:"c6804a2bd8c34de14fe485c8b7caa2564adaf9fcbb754bd2cc1d88ba9183f13d110c762a3c5d2afc0fbc80aedcb91e45efe43d9320075420ee85ab22505f20e77fa4624b0387346c1bd944e9cd54055b5135c7fc92e85390ecf45a7091136b47e3d68d9076594cfad36c36047538e652178c375a2fe59a246a79784577860189":hex:"4f5bbdf575ab8f778549f749f2265e17dc7225713e73ee6d7be163ff7071557dcc2240b0705c079008605f81396414ac64f06b1b637876e04c3fca8d0fa576cef4dd3dc553fd6808eaf120f837f9bb1d9dbbd5cf67ed497167fc7db89d3a84151b81aeab0e921057f121583df5ed7f976b206ece17a913f23485385f64c462a8":hex:"974bd0c4a8cac1563a0e0ce0":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"46d6e982feff0e7d04a84384c56739b69626dde500e4b7fb":hex:"71a6d1e022a6bdff6460c674fb0cf048":hex:"67a8455c7d3fbfdba3c5ec5f40e0be935fbb9417e805771832ffad06ba38a61b8377997af1f586dc0fa1e3da0b39facd520db1f0ec2bdf1904a3a897f0b507c901fab30a85de51effa9f7d4703ceeb2ca72abe0bd146ba0bd3ffdee11628310db7d65ea1343b018084ea2414995f86fefb45ba91a9dc2236d92078b4305671b5":hex:"a5160fb2d397b55a7eba02df33a042404188f02f4492d46f4edc03fc67723d64f5f7fed3a60728438703c60454a30f473ac918ffc8f98be5c5e9779ee984415e415ce3c71f9acc3f808d215be58535d3144cebe7982b9b527edbe41446161094d6fc74dec2e0a1c644bbc2cf5779a22bd4117a7edb11d13e35e95feeb418d3f0":hex:"84f1efd34ff84e83":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"991dcaa2e8fdad2b4e6e462a3c06c96067ef5e9fb133496a":hex:"978913d2c822ba7cc758041d5ee46759":hex:"5a94dc81af011a8af263318b60215b9752292b194b89f6fc013b0fe8e29133de631d981862f2c131ee34905bd93caffc3b8f91aeb0264b27a509e5c6a41ae781209f8c5895d0d35b3c5e1ae34a1a92a2b979e0e62132051394940ea4d9bfffb8d89ba1e8331b15bdf05c41db83a57745a4a651a757cc8648acdcf850a2f25367":hex:"9cd0c27f0c2011c1ab947400d28516c7f46d22a409a18fd35c1babf693b8030dfd7822d9ba03bb8fd56a00f9c7149c056640dde690889d2f23978eeeb28ccc26e2fc251220a3682c963f5580c654c1a6736cccb1b8ed104ec7390021d244bd9f92abde89e39a4b83eff8211c8a6259bd6ac2af1da7dfb8cf1355238056c60381":hex:"15d456da7645abf2":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"f29cff00781f5916930f125489c87d21f6593324d1506f65":hex:"50db7ee25a9f815c784236f908bfd7f2":hex:"ec1482e18692bcd6894a364c4a6abb9c3b9818bb17e5e1fc9ec0b41702c423f3a60907e94c888fad8e78f51e1f724b39969ba7b11d31b503504b304d5c4b4cbd42634f4ec5080a9fe51c82e121ae191270dd2c307af84c82d892d982413a50ccce33698054f761a3fa93da9a1fca321296b378a50d458ba78e57a70da4676150":hex:"a3e8595747b7147d471ac4fe38014bf4a409931e3f419ff88ae249ba7a7f51bd0ede371bf153bab4b28020b7a82a8ca30b75f1e3bcfee3c13db813cbc85138ef05874dedb14a6e5b6d06d7589a83bd5e052dc64433a8e24c1188b9470ddb2536d13b4b7bff0c5afcfaa9aa0157c3aae3b1774df2df14f965d6dee4332edba67e":hex:"a1e19ef2f0d4b9f1":char*:"":hex:"eea18261a4de31d8619e77005ebbb3998c5dcfac2bc120ae465e29d6b4c46de7e6c044c8b148ffe4eda7629c243df8af4e7ceb512d5751a3ee58defb0690b6f26b51086dedfde38748f6f0bbe6b495f4304373188e5d2dc93461bd51bf720149a7d3aa543623b122b9af0123b2cdc9020136b041a49498ec4aa696c2d3c46d06":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #0 [#2] +depends_on:1:2 +9:exp:5:hex:"2087e14092dad6df8996715cb1cfca90094f030328080ffd":hex:"d30504afb6f8b6ac444b4a76115d79d1":hex:"d95845d268c8d8f9135d310c39e30f55f83ef7ffee69e6ba1f80d08e92ed473b5ac12cc8f7a872bfc8b325e6b8e374609c90beaf52d975f71caeef5ee4c13de08dce80d358ee1cd091faea209a24e3392adcfe01aeb2b2e1738bc75d4a9b7cd31df7f878141cf278d150f6faa83fb3a2fd1225542a39c900606c602f15c06a4f":hex:"6d039513061980fb195bdf2f7c7079ca4b7e0fdd50d948cbfab5ba10b99e3aea27f08abd000c428851de82cacb0d64c146cd9567e9d55b89819876d6a635bd68bcaf47ffa41e02d9ee97f5a2363bfe6131ae7a21ea5130ae953a64d57d6cbfd45260c5f1946388d445ce97d23ab7ba31a5069a4896bc940a71de32bde02bc18d":hex:"5412f25c":char*:"":hex:"1e81a4c10a3440d0002ddc1bfa42ebb08e504fcc8f0497915c51b6f5f75fee3f0cd3e9c5a81ff6528e0fecd68a36192114f17fa1a4cfe21918dac46e3ba1383c2678c7a6889a980024ee2a21bcf737f7723b5735e1ebe78996f7c7eace2802ebb8284216867d73b53a370a57d5b587d070a96db34b5b4f5afe7f39830498c112":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #1 [#2] +depends_on:1:2 +9:exp:5:hex:"3fc76d627c775de2f789279dc7b67979a9f1cc23c8dcabc9":hex:"8f6fd53eb97e12dcd4d40f2843e25365":hex:"e56995df73e52606a11de9df6c7bfb0ef93b86bf6766e319aea59372060294b0e1b13c6288c2310a4bef725a2dddb174f3e1228649861757903c4497a0eec9c141454fc75f101439a2150e368857c4f0f6e5161c42c77f632bf1c229a52595cbf16e9018de9a8f6a1e6b8b18bd244f93f001eb2eb315405d223c0d27ece9d4d9":hex:"92a60d38fc687b92d44635aafee416a142d11a025680e5aa42e9ba5aa010462991ad3dd7328ca4a693673410f9bba37f05a551b949ab0d43fc61ef3b8996dd3fc1b325e66eec6cc61ea667500f82a83e699756a139d14be6ca9747ed38cd9b1d9da032ece311331bdcd698666ddc970b8be2b746ec55fe60e65d7ae47c6f853c":hex:"613ba486":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #2 [#2] +depends_on:1:2 +9:exp:5:hex:"b10979797fb8f418a126120d45106e1779b4538751a19bf6":hex:"ca362e615024a1fe11286668646cc1de":hex:"237d95d86a5ad46035870f576a1757eded636c7234d5ed0f8039f6f59f1333cc31cb893170d1baa98bd4e79576de920120ead0fdecfb343edbc2fcc556540a91607388a05d43bdb8b55f1327552feed3b620614dfcccb2b342083896cbc81dc9670b761add998913ca813163708a45974e6d7b56dfd0511a72eb879f239d6a6d":hex:"e3dc64e3c02731fe6e6ec0e899183018da347bf8bd476aa7746d7a7729d83a95f64bb732ba987468d0cede154e28169f7bafa36559200795037ee38279e0e4ca40f9cfa85aa0c8035df9649345c8fdffd1c31528b485dfe443c1923180cc8fae5196d16f822be4ad07e3f1234e1d218e7c8fb37a0e4480dc6717c9c09ff5c45f":hex:"28d730ea":char*:"":hex:"dafde27aa8b3076bfa16ab1d89207d339c4997f8a756cc3eb62c0b023976de808ab640ba4467f2b2ea83d238861229c73387594cd43770386512ea595a70888b4c38863472279e06b923e7cf32438199b3e054ac4bc21baa8df39ddaa207ebb17fa4cad6e83ea58c3a92ec74e6e01b0a8979af145dd31d5df29750bb91b42d45":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"2c186654406b2b92c9639a7189d4ab5ab0b9bb87c43005027f3fa832fd3507b1":hex:"3a0324d63a70400490c92e7604a3ba97":hex:"":hex:"":hex:"4c61cd2e28a13d78a4e87ea7374dd01a":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"747d01d82d7382b4263e7cbf25bd198a8a92faabf8d7367584c7e2fa506e9c5f":hex:"7156358b203a44ef173706fdc81900f8":hex:"":hex:"":hex:"9687fb231c4742a74d6bf78c62b8ac53":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"1cbe30216136b7eaf223e6a7b46c06625176d9a08182fa806a63d8b143aa768b":hex:"4fe6ace582c4e26ce71ee7f756fb7a88":hex:"":hex:"":hex:"d5bdf8ec2896acafb7022708d74646c7":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"f31194c83bb8da979a1eabb3337ceb3d38a663790da74380d8f94142ab8b8797":hex:"404efd26b665c97ea75437892cf676b6":hex:"":hex:"":hex:"e491075851eec28c723159cc1b2c76":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"daeed52ae4bf5cbe1ad58ae4ccb3da81fb9c0b6f7619ca21979313ad9d3e83c1":hex:"4037eadb11249884b6b38b5525ba2df4":hex:"":hex:"":hex:"360c6ef41cbd9cd4a4e649712d2930":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"3ad81c34389406a965c60edb3214663ac4a6bd5cfd154ae8d9dc86dae93def64":hex:"cebbce06a88852d3bb2978dbe2b5995a":hex:"":hex:"":hex:"bd7ca9f6bd1099cde87c0f0d7cc887":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"4c152ba30aefa5b2a08b0b4d9bf3f16fc208bb0bc4c4eca9411dc262d9276bad":hex:"008d040fbd7342464209f330cf56722c":hex:"":hex:"":hex:"c87107585751e666bedae2b1b7e8":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"9aed4ae6b1d857fdcbe5aec6db38440613dcc49f24aa31fba1f300b2585723f1":hex:"947c5f0432723f2d7b560eca90842df1":hex:"":hex:"":hex:"7d331fedcea0fd1e9e6a84385467":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"cc80bc031676eff5f34dd076388a5130e985f9e06df4b4bf8490ff9ff20aae73":hex:"51f639467083377795111d44f7d16592":hex:"":hex:"":hex:"02d31f29e15f60ae3bee1ad7ea65":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"db7a40213b5b4b07e9900dc28f599403b0579cbce13fcd44dff090062f952686":hex:"aea6f8690f865bca9f77a5ff843d2365":hex:"":hex:"":hex:"7f2280776d6cd6802b3c85083c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"299b874eaa8b7baf769f81f4988a41e2708ae928e69a5ba7b893e8e6b2db5c3b":hex:"2aa04d85d2c0dc6f5294cb71c0d89ac1":hex:"":hex:"":hex:"ea01723a22838ed65ceb80b1cf":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"a6c7b4c8175db4cf23d0593ed8ea949043880fc02e2725f0ab90ae638f9dcfce":hex:"ae07f8c7ac82c4f4c086e04a20db12bc":hex:"":hex:"":hex:"1132e4fff06db51ff135ed9ced":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"b98e1bf76828b65a81005449971fdc8b11be546d31de6616cd73c5813050c326":hex:"929b006eb30d69b49a7f52392d7d3f11":hex:"":hex:"":hex:"33940d330f7c019a57b74f2d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"09ccef64ae761a70fe16772cba462b058a69477c91595de26a5f1bd637c3816f":hex:"e34b19381f05693f7606ce043626664d":hex:"":hex:"":hex:"2adc2c45947bfa7faa5c464a":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"654cf46598e5ad3e243472a459bcd80f1e026a65429352dbd56e73fcc5895d1c":hex:"a56f27709e670b85e5917d5c1d5b0cc2":hex:"":hex:"":hex:"177b9a5e6d9731419dd33c5c":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"84bca1b2768b9202bf194f2d5e5a0a5f51fd8bb725f2bab8a3fccbdb64a4ea70":hex:"c45b2708c5bdf65ec6cc66b6dfb3623b":hex:"":hex:"":hex:"fe82300adffd8c17":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"c8ae011795c9a60ad7660a31fe354fa6f7e9c2724d7a126436291680cd95c007":hex:"1bd9ea6186450f9cd253ccfed2812b1c":hex:"":hex:"":hex:"35214bbc510430e3":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"df2f0a8a3849f497d12bda44e12ce30a6957f3febcd5ec9bc134171326ca66d3":hex:"728cb9608b67a489a382aa677b1f4f5b":hex:"":hex:"":hex:"e2ef5d9cc5791c01":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"78e8a8ad1ecd17446cf9cd9c56facfd4e10faf5762da0fd0da177f6a9b9c3a71":hex:"f169ce6f3ccc58f6434ae2b8ad1a63a1":hex:"":hex:"":hex:"0fe57572":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"02ca6d8a862e25db9d68e4404abc107e700135df4157cfb135ce98eaa33151c9":hex:"7b722fdd43cff20832812f9baf2d6791":hex:"":hex:"":hex:"72dea6cc":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"9a2b709dbcc3a4fb15b3ad541fb008c381b7e985b57df52f07ca7cd26ab1ecc4":hex:"729baa4c0ef75ed8aae746376b39fe3c":hex:"":hex:"":hex:"2a0d607c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"449d39f863e4909984b37f2e5c09ea4d4b3e9fac67bd57c299e4e1d1f084aaa3":hex:"d8e9118f331bb5a359f0aa8882861b72":hex:"4ddcae0bc24d622e12bdeaac73e8d1ab7957af051d27dfaafce53aeed4cdd3f989ea25989a2f41cfb3c38dbd841c5560b0b5ab1861b1fbcd236865d13da55b50219462e021f8a21848a64a85326031fcec8fe47a6ef4a435dd2b2fff637644ffcf3914ef2dfa5dd556421bfd297be150b31db039f0f2cc422b282e659e70cceb":hex:"":hex:"c595b9d99414891228c9fa5edb5fcce3":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"3e70e66813fc48f984dcda4d1c9c24f1d5d1b71ecfc8bb9581782e7cca5a5cc6":hex:"d804f1051e72c9b7117002b862eb45ff":hex:"0b1ab2b7a87cebac668c7a532fa8fa56a22cabf0c41fc1e6744ffe07c857c6865d623f508351f98f3f0c577d1eb94300a30a445472218c8ac626b0bee7d4c122d33f8130436a89add341e8ef7e00694afb4ad80d314d87ad3f921c7105eed05431b8151df7cff2c8e3790efd4acd3f60332dc7f34fdd90beef70f9093361d65b":hex:"":hex:"c09c2e3fdfefa222f7345ae4efb978fc":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"8e534041090b45b80f287dc5fa20ebda017ad81b0530e680f62c6280fd8881af":hex:"ead675b019ef5c6bbf4985f2a382d6c1":hex:"b1db220052c4bebcef27eed6db0dc91be481179d71160c5a2ddb2fe497a05484840b04cce48980057d770fbbd0d5f3d5c633b55470617ad2cab5767188283310337825c4b0eafe13b5b11293dec230dad43b220885105767938c7ec4600fe063f98aa14bc6afb886fc874c10546749da295f571e696305bd9165486e29f43f52":hex:"":hex:"9aa0cdad5686ca515cd58aed94938ef4":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"2de18874470c09db683cf45cd752bdfa8bf33e7967220b1a69f41f2a02da1d80":hex:"af30eb2d0a0c2a50ea413f3285aa88d4":hex:"22889b868d8ccc9f488406813caed199b23091ddd796c8632f564e7cf5a39dfb725266a931fec958659b6fc5b6b9343b8217edb0acb010afc9416601155262b57bd398d62f555953f0e15958e19ae004fbc9cb25e0269a9eaa38a4635a27bfa719fb249fa49337796bcf5f416bba87fbf3b19f0d8c11290c25ca50bbdc822f01":hex:"":hex:"646bbc9b14681af65b0d1c4c9f1d0d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"1a1bb9122e762ecd7ff861a1d65e52607d98e7ae5bd1c3a944e443710f3b0599":hex:"32f99ea4cbf52c2701c2252e5e6c863d":hex:"91b7a70c3a06c1f7f2ea584acb5dd76177ba07323c94f2e8f7cbe93fc0bb7c389c3c88e16aa53174f0fc373bc778a6ccf91bf61b6e92c2969d3441eb17a0a835d30dcf882472a6d3cb036533b04d79f05ebfaadf221ae1c14af3f02fa41867acfdfa35f81e8a9d11d42b9a63288c759063c0c3040c3e6ee69cf7c75f9c33fea1":hex:"":hex:"a8e29e08623a3efdbbe8b111de30a4":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"3bfad1e8f9850577f9ba3f290e9a5e91b494c2d99534220362e171a7543177ac":hex:"8410886b70c57d7ded8596443bd1b157":hex:"ca801c83596795515ea931edba00e06e332bf84246b7036e10b317e2d09a51b2981fcb664ee3bf4180bb0b12ed1cda221abc6790b27c26914f5ef9cea9536e2453cd5b247cb054e295c2687b725a97cbc484b8eb86c6ceee03bd07a54a9301a3ac0ddb23aecb825a238252e7575329058b40e75575a7f16439edf5be163ce5f5":hex:"":hex:"e3645db0c600dba52044efcecfc331":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"65debdf2f2191a6cd8de8ad4d5d4d0d8f731f67744e2545df6b2a7cba89c1ee0":hex:"fdab2ee547dd8b6f5a4ea2dd19697b3e":hex:"d2b0a0438ee0f145aec9a7ca452b788ecb473152b78fb75f6ace721afc7b0ae1942049b790f3a5b6221a8760295659756d35347cc04029be03459f3e23a71209b4e0bbe13a253a888c83db23376d3a6d9a539f7c9fa4a12dc64297e7c93dfa0ab53ef76b6e1d95bf6f3d5e6ee8f08662fc03ec9d40eff0a43f23ac313671bfd9":hex:"":hex:"c25fc157c3f2474885e2eea48aea":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"496ae810380460d40cd2fdae8c0739f16b87205cc7f57db0a71a473eb361d570":hex:"77233de96f5e1744337778212b411bd5":hex:"85f5b54b4c4af5c808120bd28d98e44e96f4126623e57684957e9fc4fd1a2d0583940b8fc8314a249325476e8d05247831b04709580ae714e8187cd38f9559419e14c9fc4f8c454ec191b8ef2a3610988fe3339d0dc6b72f5978f9eff9d596dfabf27056e3a908c6497267461386e860f6b9d65526294bcb92908b5661b06b5a":hex:"":hex:"4ed91af6340e70b0c2b94ab6f82e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"aca188183b46139cc7cffc82a6aaaeb2fd73cecad14e75c663bd62daf1ec711d":hex:"7bbf7fb55eb70cce94cc6a2b67de55ba":hex:"015cfba90f069545fed60f31992ff3d3c3592eb91e7a53df5978ded64291954cb99a57de82d5398ce782b68d14ac04a8b425395bd076ead59eb445721bdb2f45e19fa089117800cbbac7b8313fb165ccb1122acb654e1242dc7fe6885ea1cbb7281b1270cfa1549cdfe9b47caf47b4ac3807e562e48c066566f5e606b5023b47":hex:"":hex:"3bcb5c2a4261d75bfa106fb25ee1":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"8cd6815f6ec15f03b7a53f159e877a5981e0ab7f6e6c261ddde4b47cbb2f2366":hex:"c431c07d9adf5f61204a017259cddd75":hex:"4e1a835402bde4f5227e64b46a1f8d0f23a9434e189377fcdf1b9621ba1987eb86a7f3b97ed0babfd674e74c5604a03dd016d71000a72bbbd00a7f7fe56ad0fcb36a3e24dd0fdb63bd66d4db415f35012416ed599796ca3f678df7eb5a1b17f75abb348ddd3b366369a7b362c9488aedab836b61f9a158f0b129c8ca0a53a81e":hex:"":hex:"0e463806ff34e206f703dd96b3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"8f0a72abcda104aa7fae501f9a3b686d00d3f6fe984731db8a2865bfec587073":hex:"ab8acd063775d1b1314f14e90fddd1be":hex:"02c6d426e7f20b725d8cde0a6382e49b029b52126889013ef45251f27b2fadb95ca4a9a3b16ad06999eeca4a473e813045db4942e9b9ff2e5a5e429d9bac298372344d1b781d5facabf6d779643f31ada6124eb50aad599044b54279ec9b25714ac8a3b9ad2487cec7f4b1ee245d7be3d496d6af1d4cbee1c8201312541f3064":hex:"":hex:"3f0ccc134091e0c0425887b1b9":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"417135cad74280e6f8597dc791431c95cb8fa63bbf7197e3ab37c4b1d6d9438a":hex:"0fe22d9ba1d0e32656e3a9f07a517a27":hex:"a0b2712e81d329d5b076a4be2ad6823cee6dbd17d9a592d065bdebb92b1ff37a56bf2f5e5341f39c574246ccda19e5f35fede49c9ba958f3920cc5440fb404fab7846884ca0c2a3af5b51f4fe97a1395571319cc5b40f8aac986d77de280db82343983982638326ef003e0c013af19c34672975dc99ccc0853a1acf7c617d965":hex:"":hex:"888b836c9111073924a9b43069":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"304824914e32ea0efd61be6972586093349bd2cc2cf0cff44be943682b2dbff5":hex:"b6d927a71929029f6766be42746f7cb1":hex:"7281c81c7514f4b17cb125c4649006ef8959a400a1e4d609d277e363e433725fa32346a10bcbd826b6afc8222158920d0a2db1e6fc915e81231c34c3941ecf3c6f94ffe2136190cae3dc39a4277acbc247f36291b5614a8433b1a0780434a6c50521b72ec25145bbd3b192647155d5dd9df9e66762d39592602ea99bf9bfff49":hex:"":hex:"b6044c4d7f59491f68b2c61e":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"8a10e9abe9389738e12a4bb6f553ae81e8bd320e0dfbc05fbae2128c1fde7a23":hex:"6da44354e198e3beb54792718becbcc1":hex:"199d754630135b669bf2ec581d3027a569412ab39a78dd9d482e87b778ec65c6473656260c27827e00e566f1e3728fd7bc1853a39d00e43752c6f62c6f9b542a302eea4fd314473674f6926a878ec1e4b475d889126ce6317115aea7660b86ab7f7595695787f6954903f72361c917523615a86d6ce724bd4a20c9257984c0c6":hex:"":hex:"5c5683e587baf2bd32de3df5":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"d164ffde5dd684becaf73e9667e3e6acb316682c41aea247899e104a54dd7a7f":hex:"1d388e19e9d7a9750e2fc1187d4b075a":hex:"f166a5b6f91261cda56f1a537f42ffb8aed10af5e0248f8910034b92dbc58d25953f1497f571d31fbf5ec30d92234b440161703851f0e43530418147ce6270fbcb5db33ab819ba8973051908704b6bea8aaca0718947e6aa82498a6e26a813981783ed9bf9d02eb1ea60927530c4700ff21f00179002b27903dd4103bbc5c645":hex:"":hex:"52e10495105799ead991547b":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"2854188c28b15af4b8e528ab25c0950fc1384976f242716c91bddeec06f2fdea":hex:"075af9c31f5252b8920092cbd999e7a0":hex:"e9452f71093843a025bb5f655eb6a4e8316ab5946484b11818f22b62f4df75d5891fa3397537093a261dc9a7648b7477ea1f5fc761716e302763364bcab7992595edd0fc1c7f7ac719c879e6616e2007948eb8530065a6cccf73d0fe4a0598819b471b0856e6d90ea0fc0e5d36a30ee925b6b8e5dbf40e77f01efe782c0bb4f7":hex:"":hex:"6ff8fd87e5a31eb6":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"2bfc445ac0365ae6c3c3815fd18bbd0c60ea224f6620d9b6ac442a500221f104":hex:"43c5f3367a9955aaee1a0c4d4a330059":hex:"db0bae8ce7c66a8ba2fedec22f236212e9a7ad72b371de285c7dc6d2f6c22df0ce4920e0f03f91eb1653c4490050b9f18a2a047115796f0adc41707d1ffcbf148aed5c82013f557e6c28f49434fc4eb20112f43566f212c48cec9894ac40772fcd9b611ee9444df7b73e35b8a38428ccb064c9c50491d2535e0b539f424db83e":hex:"":hex:"49aaa806cb2eeadd":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"7b828f99aaf751bf22d993ed682e488595617a607ed74aaacbb6b60457453080":hex:"d48dac1d8d77e245420feb2598812418":hex:"f50f785f4e7c848a55a616ecf4b6b1e1ca85e16de7100c7e4273d411bd95c1380ee157ba501ba9616980195f34e39f43e335f33253342feb8ed64443483c721b85241a0320b3cac83104de2db47188c61a373fba592ea16feeefdee1f2bb43927396f58151418672ebb74afff5c029503a0d0be81430e81ed443e08b74c03183":hex:"":hex:"a5b71ecf845b25d0":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"7b6da11d69fca3e4c907628d3eb63d95c7e502fc901372fd097e064e70831432":hex:"6fe2148f250ea178d4c8ca8423ead87d":hex:"a8097bb74ded776f578eb7588f5ef8915db9bfa7262af700c8e76ee114e07557b6786dd5a60a66b2703e7c9de5d6b42aca92568aec5d1ecc298dbd0edb150b8cc13c9a78698f7674caa94da6cacd1f3ef4ca4238c59830ea725ab3a6284e28966c8c32d9bccfb0cfd6583a5ca309debe86549a6f317d15c5f928cbc7f473310c":hex:"":hex:"e9cdbc52":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"c5ae9328be49e761064080fc213e53e373fd86359a09d0355e2d438d9b8e68f1":hex:"a7e3f8660ff925d5c88c5aceffbd7026":hex:"2ddddba7a56cc808aec4602f09ae9bd78887827bf0315d8dbe16821606ef9d117746dd138bf1f23565d1ab8f4cee36d53fe3730632c5df9f12109b16edbeae285bb49dfdd155f5dc97b319a85362d53cc86817b7c1c31e5e87c9f37422f133d00dd0776bd92ab05ce6860573cd911645cfe3fbe515e85f744899a447fe443653":hex:"":hex:"e35dbac8":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"e4f8ca13ba86c658cc7f42d4f029422209efbd101bc10a1df81a42cfb3a0f79f":hex:"1a362fa0e4054ba11e4b06d59c8bc9cf":hex:"e7ad5c75aa13659f8ce4b1650c46382645ec67418199b84ea445b8ceef619ef3fbde59ed3d313c459e36fcf87d26ef2b453409b32f1086934c3072c1ef0aac83762d28b1193b9afff2c083ce4300b768b0ae23ff9d3dcf65bc1693f1350da65180620aab205aceacfc683c8be53a332e2d0337a7518d2a5204f9c8d7325a4799":hex:"":hex:"e7a37f15":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"00050a21ca1e72cd0924be31b943c60854be6744577de3dd9d1f4fada4a19ea6":hex:"2fc1afc1395d8409919248709f468496":hex:"":hex:"693ffd3d92294857a99c702a0799eeca28ab066dd90917b9ea5ef8f6547f1d90b106cbec8ef2c22af9f8efa6c652f2f97c2baf33af14fe9def230d49524bd65909c3df1490f637f99e788dcc042b40e00bd524c91e2427ef991bf77e7b2f770cda6e90076c5dac4cac7ee3958b53ff8ce846c3a96281f53c2c52f5f3e523536f":hex:"e39b6a7fd5ac67a2a1cc24d5eb9d9c74":char*:"":hex:"cfcd6b9ff7641829cbadeaa2e56f1f150a099eccf3e378fa4da59794dcc4490aa4f9c5db0ab245bec36a7d4557a572008e42f03bc1baff3c946f23f54a4dc9828f106cf4264e4ab40165839d1085e7795b1ae0950f0ee4a08e46ada501b6b51dee0e518129c9426e5bd44c66674a9f99cfe676f002cfd344c5bbd22d3d91e600":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"f10965a66255f0c3515af497ccbb257a09f22ec2d57c5edae322a3e6d2d188ef":hex:"c571ce0e911de5d883dc4a0787483235":hex:"":hex:"91598690edf2de8b27f9bc7461a84e80811cee544f0542923898328cf157590251f0342cb81d359b5dccc5391a12320d1444c26f24178977dd6705c2b365dc1ece0152c42e2f0ee3162cf886ef5529f4f16a77f3bdd2aeccd405b59addf098521d0d38cc25f1991e11be7ecf24caedb48a2a286d2e560a38fa9001c5a228c4d1":hex:"6d9d3a5dbc8dce385f092fff14bfffda":char*:"":hex:"2867996e389e09ec0da94d42e77b1e436b50065b09ca4adf1cd03240444ee699dbb7b3fc081a1869ca607d77d5ff9754fc3c997ff0a4ee17543a2ba77886b88a7128bcc51d3450df58ff3a26671b02c1d213df6adb6f7e853080eb46b504517cbaea162710a9bbc2da8b552eb6b0e0cb98e44fcab0a157312be67974678d143e":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"4437ee7d16d8c3ca1aa01e20b66749efa901614d4bb4bee786ad5a5f1bfde2e6":hex:"275393276745bc43bae4af1e5d43a31e":hex:"":hex:"ff80727a3485cdbc7fab4ee9fadfdc621c538e2055706629046078f1aa3fb687fc728d3a7ffa52ae457b7b5649613eab7bafa464bb435314c49e5900750f7ad39ca9b75df6b2eaa755439e101f67b7ae4cd80dc4a9dea0027048253f2d0a6014056ca69b8c85605b00cf75fa7634a0ddf464270a8c79ce1a1324c4a4c513b24b":hex:"a82ff1e87d26e4d6e417b60fb2d3ce23":char*:"":hex:"88f994d276ed20be3932d16f551c4b7e2ed80411f2e72ce098fa0b70c22157a59edab30649fec447dd63f0c87dceca7238ef0d9561b58489ba7bd86f2892743099f40af63c432f78ac0ad0b5c2be47b9e3045e7237b096ee400f430af63a6f309de785caf190f3f4aabbe79f727a741590de542bd343df68d13db55a5f8bab41":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"fe4ec037ce563dadee435cfcb2bf090f1f7ccc7d1b5b4fab2f1b738348f8ed2f":hex:"47f5264f7a5b65b671892a05fa556f63":hex:"":hex:"64eb8a4bda9804c09b04cfcd89094928c21480908b81ee19d6c29c2a3631b1a5bdc8e7f8ea56f7b8b8e14a5208296026785cac3a6afa54be8af4d5faedcd12b6621bde0f8ec5a2635fe72a89468ca7704c73aa40cd2ba97aef08886b27a694d339b00e7d12a31308672f87c06a7388a1432f869eb4cc1da864140b1b33931925":hex:"660462b4088f6628a630f2e4170b21":char*:"":hex:"4a310e035361f98b8c54fb4cef70b1a9c910552ece056ca8fdab54c52308ec0ad7fe9dd1dae92badab5010577de522088768fa6466fbccce22e14c51ca7986c4063d0f06bf578dab16a91856713198a7138395c49c78b6314b57ab72fd079028c8dc351952d90b04a7cd2b245df0c0522447cdb7d3329fd9425fe5cb40a8e7c9":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"e6e1ada628ca76eb9832cc6b5efc5c9d2686bb587366a6de2d734233fa95279e":hex:"5a100b451e3a63a3e6d4b8a9e59c6bce":hex:"":hex:"a0ac738e0fb35246b84a6fbe319f827039515df25d0c0fc6de7c048253ae63d3c561e44a12672ffeae1cb925610b482aa422bbee0e1784fc69baac3a97d69f51e6d2a17957b44b318624ea7ec680a559f4d3f2761d09bee66efb3a312ae6b3ecb673e756b2a0f654671e82500e7ace91f2be2a74bc3bc1ec1a4b6877a53c27c8":hex:"88df9a1ea54e5bd2ef24da6880b79d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"cd5c1e90d78213155c51767c52c290b3d657db8414ee0a7604a2ec7b48105667":hex:"4e022d8d86efbd347e8cbab7e979771f":hex:"":hex:"8e987693da0fb77b6d1282eebd3a03e05d9955ff81929b1a2c721574862a067ddee392c7ece52ca1451f3e6e321d7208882d97b4149af6d78d65c054e1bfcdfa62bd2202de32dea8363f8d7f041891ce281840f3cd906ab46ca748e5b3b11890b4014bf0271c9427c874097782d1c13dbb40e78fc8276fc134f3c29923a43a01":hex:"e7df79af0aef011299c3b882e3a45b":char*:"":hex:"3b20473d9b5018d089e7f74d3fef22ec2805948a9e07689831973c704a6d8db4d090af88d696ab8c3aae9740a2bbd7f03e0b18b2b591e59c335c1043a2578a89b1a9f20fd0dd53f12e00e9bfdb27de8caac772bbfc4de9e4a255a5d1b04e59625a87b8279babe613def58d890d5502abf2f709aab625dcc20c58772832c7bbab":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"6e3dfc07003bb6a2d82bd5263b2832f47db4e73279266c7a9ea21f4f18eddf83":hex:"7c0f49fb54f5e68c84e81add009284e6":hex:"":hex:"a960da222af9d4da5797e6957d59b00f6d3893599c70e95c0984b56eb3329b191703c2532f3288b15ebf655b9b5ee4617484e5ac9c39bb06731d03ebe4fef9495d003b0ed694cf540b4dc759d32629e55512680badd81234bd71ffd55fcb5e6a85031c1dc31ee1ed198939582d8336c905717cc87101dcfcf9d833fac815c8ea":hex:"b2ec0f3da02a9eb3132fb4ebe3b8":char*:"":hex:"a40b6f70f0572fe0bc70d83368e7c154f7dbd501f52501630a2e523d18e216e07368521f6040d806299397722b99bcf7f85d36b8bed934b49aa1fa76d38783e6a2e392d6d0786d467f7bc894a739ecf94f0fe884a9c391154f8326bf31ea5242a18aa263d04da4b63b11de23b42d3e10a2d5460cb32700cdf50a0d89165ba22a":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"4103b1ddff87a508a219c808a04ad4750668688f4c2ee75b92d28d70b98a2c94":hex:"5cea906737518c2cb901016e30206276":hex:"":hex:"a00a196193ff07006b7df524824bd0971d63f447a3a7bb1b75c1e2d11789482c115cff677b54948d36dc4de34200bce97be0101d88cee39b177857dd5da3cb0d2f9d6e1150f72a3bd655e0bace1d25a657ba9a7f8dff082b4460432075afb20173da22b49beeb6a030d72ba07869ff4389fc1c28d87018d7c1a9829c21932197":hex:"3a3a771dd5f31c977e154ef5c73a":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"cd8c2f0c330d5db316dae7a16b57d681ca058864f7bd60f3d0de174442283f77":hex:"387ee8c1e7f047e94d06d0322eec02fc":hex:"":hex:"e2a5ad295d35031535bf13c2993bd0b292e8a9465b9dab738e59ba03670248a1ecc92b38a55bae34729162271cc1572c35fcccb27417b48dfcbff852a7a8845cc829a4461061b558ac8b5930a5c6491ffba04a9d0dff220b3cd5e4fc2e0f3db3b2ddd90328f2cad819573a7856299620b02f5ee0267f3b56981afbf1b7d9e3e1":hex:"62356850d12b54e39872357cfa03":char*:"":hex:"17b7f6bdfc1993c56dd9bd674cc276a55a46fdd9fd5fe435b9e4b7ebc7052a9dc76a99e4e43aba7d486603189c90d10a21ad3722c86bf5bc856a0f930ff5bca65be708b76bb8a29105da67f31eebcec81f28aaf526d2f8f0feac393a24959dcd612e2b93b4463f61957d2b3046bcdf855e346601e4c7760c0ca618ee7bf55381":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"7e19e400872eed721d560202cd757d3eb99729496b6e3a6d38dd8afe1066045a":hex:"d2b277f78e98f1fa16f977ce72ee22a7":hex:"":hex:"3fb9abc7aba654dfb174e8899c17db222ffbb387b7260fc6f015b54f1cd74284c516e21aae3b72338e5e8dc643cfafca0678f5bda3a7539f1612dddb04366031b5a3eda55f3232c1b176cc9be7cc07e0ebca674a272224929c401a2530efc6d4eed0087b544b12d172a01bc8340d9c2a2ebcb5af8b07d96073a879fda140c196":hex:"4c81c044101f458fdfac9ca3b9":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"d0653934a16fd36c27d54488a1829302b931bed6e26ca26047242b85b50bfb61":hex:"94886a1845aebba5ed6b86f580be47f9":hex:"":hex:"c02347e1add9178d830d8baaad9aeee37e958bedf2cc846e2561fe8c83481d0a8a85911e7f1f6e444b28f30bd96c13c390e80f616feb6844ee6fa486543a2e3f38c138f45b4405e3fb331b64648219aaf1d574be948ccfca6afc18d12488db19c35b05601e47c0af5d49a93a5dd4420f38585c1eb033e173376fa390d3f948df":hex:"4be34ff42085ef4443c8b6042d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"d0f0ccb88c7cec9496f26a59ddc67dc59ebe49ae3dd89ef3be008598727e214c":hex:"e5ca84b907ac761a5e68a9080da0a88a":hex:"":hex:"7845e155f4f28021291e7c814a1ace8f42b239990831aa82758fc1e376cace0b6f668f7f2f224dede1ef5b1df7ae74b2c01483701044acbbb72a9216eec6b7ef0190f114b3c73c6985c4653f11601c774d10b7f9df1f1e1f3ff4fafa20d6525edb37d9e5acfafe6d3468ee068d407fdb56dc718c98425926831253978d727854":hex:"c8f78e4139dd3eaf2baef8aafb":char*:"":hex:"0cc3ede50b0d3fb9ada11300a3239a383c98f968ad65266d57a195bb18d3e568fe6cabba258da4bee9e923c7c838e06dc887a6c49cc1453ea6a227c6a83e651a8742e0316cad5efc93739393e3603446b5c920a206db1434adbb8ebde4d1a7a8699c7f6c61b2d57c9709b564338423b4f526d6c157647a6c45da9dd521061f05":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"e35dcea17cbf391491ae5ba6056d0dd13b348183474dd4b614742751bdebfc32":hex:"fa549b33b5a43d85f012929a4816297a":hex:"":hex:"5213542beb044910d7fdeec8bb89de93f350760e493286eaef1140485380d429f74a4279c1842a5c64f3ca3381cb5dbb0621de48821bded650cb59703e0ca88f4e9c3d15875f9dc87d85ba7e4bae9986ef8c203fce6f0ce52c28e3a93befb4cc4ba3d963d2283cd30f9bf6ab99d92f2f4f3aff0b022f1751b89d43ea10bbb28a":hex:"afa61e843cee615c97de42a7":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"844c50ddc0ac1d9364b21003287d6ae6360d12bbb17a85351362420ee4ca588e":hex:"2f8512bb7e214db774a217a4615139e1":hex:"":hex:"3a3bf4ccaf05f7c02f5e158dd2c5cb08c6aed4b1ba404a6d8ef9a0737fe2f350b3e22188fc330ea63e35df82f996e3cf94d331c4246cdb25bb2c409762e05ddc21f337edee51b64f1766ad18f520b3f34735b24278d9d647c533a743e0c1e9c81e9dee975cdc47e8582113fd250ef59353605b64acb7c025a97854c1a5c03237":hex:"f1da1cebe00d80eb4e025feb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"2aae1aa047a20ed2d6d8336d923864cee9404f924031ae327fbfe2d293e1d93c":hex:"3da9af3567d70553ca3a9636f0b26470":hex:"":hex:"8e5b6b9e4e7d01de9a919dd33c0c1eb94dcfebf28847c754c62c1c00642d9e96f15b5d28ad103ff6969be750aadfd02fc146935562c83ec459a932a2fd5fda32eb851e6cff33335abd5c2434ae4f5524d6bc74a38094ced360f4606a1a17096ff06604952c8ca94a9a6dc4a251e13b0e0c54bd8a6dff5f397a1eb1cf186fa518":hex:"e1026b3d15d261b2fb47632e":char*:"":hex:"58c52ea9f3b162511160eed1a68b6f52b3c4f5834af728de97a3d9e4ba337b29aad12636003cf5be9ffbeae0f383f7cf32f645a8f6fc5cdc1cde91c625c69a92bc434ed671e52a0044a48f3fce55cae49a7d065c2a72603a7efe58b5a7b18ac500d1a51420e820357e7a439b1c02198ebe3d4e62d5573a3aa5f40900a21e3b41":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"f3d69208cb0d27474e9a231cd46eac7c1574fff950c48bbd1ba03fad16f563df":hex:"b957f05921d21f2192f587768dc12b4f":hex:"":hex:"0d1f06eef5e8f2c81d1a73bb1dca93c22cfb6e40e9948bc75b0d84830fb9216330424f580b89050c3fb3f620eca8f9fd09fb86d2e8b3a0869c6022d8a705fc280d66fd16d3aba7395d6be4bed44145d51d42d56285f3675726d62d94c081364a6d440511de83a613c598b03078e2ec7648c6302defbbea66aafd33e1a4b1686c":hex:"322374fbb192abbc":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"cb2cdeb17fa6bcb006c7fc60858a12a411804464458db351957e8caf42f1ee6c":hex:"31bd7c971a6d330b566567ab19590545":hex:"":hex:"296504131354b2c1928982f12d408ba2377f2d4bbe87e4c69f92a15bf6003910a43bda6c8929df66b3ab1d202a5258cad199f32f36cc30d2dc06199c2a52f7ccadad1fce50123c5f8434dec57cc60cc780263d7aace8f59cc8a6c54bddbaded3adb12ae2ee0bacf6a8da635ff85b51a4e8a1b3dc404863b90059de4ad0f158dd":hex:"efc5a1acf433aaa3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"f94170790fadab3240df568197f9d6f6855afaed8d07eceeaa2380121872529f":hex:"2f9c0647a4af7f61ced45f28d45c43f1":hex:"":hex:"ed231b78db082f652bc6310c396993b52de804a82464fa3fac602a1286535f59c67fc2b1b420c7321eb42b971edde24cd4cb9e75c843f2ac6fb8ecdad612d2e5049cf39327aa7a8d43ec821161c385f3fdc92284a764a5d1cbae886f07f93017f83a105bb7c3cc4fc51e2781516a2471b65c940ddae6b550ad37b35f53d7cc64":hex:"ab74877a0b223e1c":char*:"":hex:"1cb5ed0c10cee98ff8ecfa5a1b6592391bbd9f9b1dc1ff351e0af23920d546b5e27d62b94daabd32f7f96a2632dc9fd7c19bf55f3b9b7cd492e76f4d6b0f5b437c155c14a75e65bfc4120bef186da05e06a2fd3696f210292ee422ddbce6e63d99ee766b68363139438733c5e567177f72e52ef2df6a7dd33fc0376d12ec3005":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"797c0091ff8787fe7cd0427c02922620e7f6fb71c52ddcc03a9f25c89ba33490":hex:"69d81c73008a6827a692fa636fbab8bb":hex:"":hex:"2d3efc8900315c3691a8e3c9de3319d4deaf538fcf41aa0e295b861d0ac85baf56d149a6437747dd6976f44016e012b88de542fb8e5b9e4ad10c19deec4b7c0b69bc1b2e33d44a981ded66127dea354b072010b8dc24b85ed2ffeea3b9c0e931619dbbf22677691f0d54fc03eaa162e0ab0d760ad41021f67057c0d6ac19ca8f":hex:"be2dda5c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"90ce1afb5500489b9edbad987f4009509c847b3e55cdf0c764ef2fb085e3d033":hex:"e119e166471ecf44bc3a070639619931":hex:"":hex:"98482b54edce2bac1cd64d44917dcf117ebfbfe26ad17a9b263447028304f1cf5a69559c05b5d833420f4fddb6e308277d01eb4b3235f1c4b47d33d3899325b55e7be19d43187a5b1b1354ce02a529b3df1c13b4883902ae9fc565079dee825e705f3e580371e4fd86c3b0d31bae98adb529901f346ca07127314152b4370edd":hex:"b2f54b3a":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"29264a90f114a800c0fc3247b3bda00981a12a8f85cf3a19ea4c7ffdd005f4bb":hex:"cf296aa43cb7b328e09c8975e067404e":hex:"":hex:"587c8e53ab5ae8c31e16160b4a41d88798e27f4ad61c573c023c62d4dbb3952eef5026ad7b453fa9e0694347ab8fe50a6cf20da566202b81e325cee9c07ab2d4d53ed45b3ec2d2135936515f8a24f2a8116807dce9df3c44edf64c32647145152ff241d9e018e4101e400af070192dc3b498b5a213d265b4cfc8c8d4d7deccb5":hex:"56015c1e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"84ff9a8772815b929d55f6052c0354cf3e02bcc8336fcfe5794952b4c45d5d96":hex:"5c044a66e488b853baf479f7dee2aadb":hex:"00304e3d40cbc6d2bee0778462884f4ec047a8c74bb3dd7e100f2b9d0e529fd24730063986117b56ca876b208a3691425ac63afc3d504ccb499c76622eade09717023fcb7d956b01ce24a3e53cb5da472be3fcf5b278b5d9e377de22fab75bc74afa9670f5fe9691aa0ed77e43f6abc67a61ec409ec39fd66ac0307bf195f36f":hex:"a87de56d49725a1625baf12fd15931fe1a6783dce5d1e744eba108f45e0c105d8141dc027d0e33ad7efb6752b43729715e2f3e2c42ebdab4d5f72f886bd821c4372244699ddded99a63dbe7763a5a3bc21cbfc253cdc2514eba2a4f54e24dca7c207cb3f6ae80153d77fe0641f357d5a073dcd425c38deb77c45f27427345516":hex:"72ddd9966ede9b684bc981cbb2113313":char*:"":hex:"aadb8537309940422f67ca393aa6182d67fe7c52092538a15e98a4254f0a9087c7f10903d5e78078c2e55de914dec8b6b35cb720e3e55963c0ac9901e44b83a0e7c5b2d3f002aec0a4a08354febe47b2abb955f2a21107626ef0b8e1e099650812a6fecf36908fce2d078c2735cf7c2b970a309e5c6d6ff29c26a05720c57105":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"b5ca3991d0160b1729ae1a622dcf4b03b1f4ba86150bd66bf35cbbee9258af10":hex:"f8402184d1cc36df07b68ecb1ab42047":hex:"d378cfd29758bcbd21e26a324239c42c992941b3ad68d9f2b3d2def3a051fd172ee882562970ef59798ff8d9eb5f724ff17626156f4cf5d93e41ffef6e525919af6194ea9bbb58c67563d3ffd90e5a6e2a3a33bd1fa3d55eff5dba7cd439d571f7e08014c4780e3d10904ef22b660897e78258da20b2600e88d71c35ecb6329a":hex:"62aad5854a238f096bdde0711ac6f5763e7fea29db068ea8c911f17ba91e6d7807883e6fc5ba7db17af33da2b00973008a3425e65cc786ce1b97360019ee2cef74563d54752be436b905705b507c3d62689df4edf0356d26b693eb43d8a2a927a9f3866b7e0e19e84a90447bd6f47e31070fa7c2a71e3f78229ee19fa47e848f":hex:"9e8b59b4971130557aa84ec3ac7e4133":char*:"":hex:"556dd32edc0af3c64186fe8c000ddad1516cd14721c93c228e379d4f87e32c79e734539cec930322048f34a2b34931c585d44f09966caf187ec4b9244c991a8a5f263e9da1d08d6086e52535afdb36c7662307521cbceb9ecb470a76970243723fbc1613b6ebbcae261ac2f1936e66ce29ec7350b2e6b2f73a910ade645154f7":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"df867d1dd8a287821a54479cab6f88636d2aca30e1bf01a5dffc735e17590356":hex:"35019826c51dd1ef07ff915d9ac4ea96":hex:"0375ed93f287eefe414ab2968844bd10148860c528dbf571a77aa74f98cc669a7fc317adc9f7cf2d80dda29b19db635b30a044399f3665b6176ed669146d28f5ada03b3d32d53fe46575a8afcd37f20386d9e36f7e090b4fefadfab7f008e02f1b5022c0eeb81d03443a276eae48c038ed173631687d2450b913b02c97243edb":hex:"6517272cac85d7f38902bcb4b96a0c59c4bdc46bfefa6ebacd7f2fb1629b87ca91de2ffefc42ce3cfd34dcbf01b3f7cadcea3f99e6addf35d36c51f2ceb1f85c1f56a04ec9c9fff60cd7fc238674992183ea3de72ef778561b906202b7b83fe6562a0bca9c1e0a18638e8685b998b4192f5120435809ad6e93a0422d00725262":hex:"e49beb083a9b008ae97a17e3825692f0":char*:"":hex:"723be39bc13adbc48c861b07753f64fac1ae28fc8933acba888b6538721df0a8b91c040a26522fe0dbb7335d8f63d209e89f7cde23afa9ca3c584b336d63a91e07fdd8808b14c3214c96a202e665bbaaa34248ff30348f3d79c9f16e66ad6c5903305acd887a89b6244eb7c2d96e18b13a686de935bf3821444ee20f48678be5":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"0e8e9ce6294b7fbc534a96bdd060120976a6e08315d2ea73ac61d085cd462a44":hex:"4edc6be20f904b4789e5bee0a80a3fc8":hex:"db28ce076b360816cd1e04b7729f8ab080e0a07f35204350f3bd056945aab8638c0e8311ab056f3e5debdbfbb03fae700770264faf73e0f3a05a5812aee84ab613c82f4a76da276250675f6a663f85e2c26d4f4a8666a7f4cedaffc1a7218dec11ca4e72b8b5d5b620d1efbd3d3b94a5ae0d118b9860dfd543b04c78d13a94c3":hex:"9855f186b51358f0e2111c06bfaaeaec9bf95c55e246375c614fad9883d86c82a20c86538dc5f42a0ea69677d59a20c5112d15d2a8396f12096242ad5d7b838d16ee0679fc4017af75bc15e8ad2f77b0e802c864031cbfb0bacd95c828d1db4b7bab0713619e9e5e8fe6902aac7a9e6c42eb05f5b156f7e663ee43e6fdb62480":hex:"03cfe6c36c3f54b3188a6ef3866b84":char*:"":hex:"e10142f852a0d680c983aad2b4609ccbd35ff61bb3eb66442aee6e01d4cc1cd70f45210acbd506395d6ca0cfebc195a196c94b94fc2afb9ffa3b1714653e07e048804746955e2070e1e96bff58f9bc56f3862aaa5fe23a6a57b5e764666ddec9e3e5a6af063f2c150889268619d0128b3b5562d27070e58e41aadd471d92d07e":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"886c77b80f5f3a21c01932685a540b23629f6d41d5574fc527227ed0bdf2e21b":hex:"5ec506edb1890a5a63b464490450d419":hex:"05b8d820c9f439d7aeae5c7da0ee25fb0dad47cc3e6f3a47e8b984e856201546975f8214531fc3c2e504d2ac10fa49cb948596b9a8fab01b95c49d6f04d1589f93b77b899e803dd20e1f00a51c0b5953e85be639109b14b100e35ca26d84ea629964b0db8260dfa5a150a66261bf37e79de2ec49e9f1b082a7c58ecd3d39b6c9":hex:"53a17d7b69f607f08676d6f6dd4e8db08e01333a8355d8c87616e84cdf10ef5b041fc6ddc3f6a245c0f534c2b167064af82f45e4702a5e8dede59579fdecf6713353392433950c9b97c38d9ee515ac97d0970ccf03981954540088567a30941bb2cca08cbed680500f8342faa7aebbc6c143e2ea57ba6b4ac1fd975dcc5d0871":hex:"ffdf56e1c1a7252b88422787536484":char*:"":hex:"79ee27adfa9698a97d217c5010ec807806feda37db811e398c3b82abf698aece08561fffc6c601d2691738e279eeb57e5804e1405a9913830e3ba0d7b979213ef40d733a19497d4bb1b8b2c609a8f904e29771fa230c39a48ebb8c3376f07c8013fff6e34f10fe53988a6ec87a9296c0a7cfba769adefe599ec6671012965973":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"5231ca6d772edd9ea2d251e22d7d455928c22474b4b44130dad57e6511fed6ee":hex:"048698a4a0feabc1f336112e2794795a":hex:"3a81b6b0b722899ff931cb73c39222d555b83ae3f8880b982593cbc1ab8be90d1ee32fd7dfe697cf24c95b7309d82c3fed3aa6b3d5740cc86a28174ac8f17d860ebb251ac0d71751c2ff47b48bfb0b3beb4f51494464cda34feaecddb1dbbe5fa36c681ada0787d6ed728afc4008b95929a1905787917adc95f1034fedcd817a":hex:"2767c808410ee132291585ea74a48ad3102f883f07d060c91c5f10abd37fe0996d2210dc490260238ae15f5d74c7be2a1e15d80db09079c520047f88488a7802857a3fc3b81d85a96949997430a880177880a31d4d0c9c9045247804f057a4f2756d6e40375a4a3187c4376d6bf573ce334cda1ed88d8a50db499e7cdb89d8db":hex:"ba61edeb7b8966188854fc7926aad2":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"5a3f516a7898e04e5da4efd6c7c5989b77552d195464620c2b35b9a4fda29cce":hex:"9310af6974890c0a0364231f9cc8103d":hex:"2103af8356bcb9dfc2a4f1d4ed09cbcd8e1990d23865605e19f87feb50bf8d10d0257740e5557a9297f0499c01e29a1a513ca18e6f43f7406c865cbe3951a7771128f3110c8da3bd696368901944549552842a1f6fd96cc681b45da098f3c1acb3d237d2363285f520d0b6714b698790b7660c52ac84a42c9721ac7e9d38a2ef":hex:"5cc28b61ae97557774bdcd7ff653f4aa349df68d53c7e5a65263883ef1fe224ad40e86bffc2d38f28a2ed9ae1fc08563e2a1e46246106546eb8e6064c06baa0046fa137421734b7f0f94656a4f459d9d981717557d843700d116b6e5e2dd3af5f67c34edf31b40b71fd3c6f2475f9310feb70bcb973be52d41e86792c49d54c0":hex:"993fc8e7176557ee9eb8dd944691":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"59c9258554363d8a885fc0f5d112fee08eadfc7ce52a0e7e73e3d0d41d9a0290":hex:"77e51e89dc47bbcac79cca21e81a61de":hex:"25a6f8800a9b914c0ebf9a45d72355c03ee72a138eb81b2980f332645ce1d7aa4659805821866aee2b276e2c032776b4eaf36f93b5f9a72b791be24e31eff105ca6d0700e3069ee327983dd7fe1c7465d6c6d77837aff69055149988e7199847fad98605c377d997dbd40f3e2ff1a4f978a493684e401249e69540fbde96323c":hex:"79c491411402ea7878e480519fd984dde44bce6459303bb76d4eaf97d4e345d1aafaa68ceb0590b41cfed0f411b675d9344c7e888cccfc9eb6fe6b229d198f94ba516ee850ee7f078a4f5f32a23f92f72264e3a76a31ebd042564315ac4f2ec0bb49ba6d08cfd2d3a6308688e39f28e3ecd669c588368cee8210edf5dbefb925":hex:"ee6d85d3f3703b45adb4f9b2f155":char*:"":hex:"44ca68deed5478074adfddc97f06f44c08bf7bca4dee8707d621fc7396fe2efcdad0a167d1708a9ff59ce4cddb86920bf1dbdf41b2109a1815ffc4e596787319114cad8adab46cf7f080c9ef20bcf67a8441ba55eac449f979280319524c74cf247818a8c5478ea6f6770996026a43781285dd89c36212050afc88faa56135fb":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"5e9eae594cb54c8089330e4404ff79abb1c0841b0be5347a14633ad1e1ff44fa":hex:"0917b486da754f48bb43ecc8766a7ce3":hex:"2aa1ef2f91aeba5da10b48a882dbd4574df4e9157a18abf8cecd03e4176712ba171b6ecb0e745841ff84e35063e47b08101afc44cfd9cededb913a82f00b9d4bac922f23a22f200642270399896405d00fa5271718eefb4cd5fe7e5f32097766ebff36ff1898a1c8a1a01cc18e6121e470805c37ff298fc65ef2fb1b336d09fd":hex:"32abc1eb6077555a85a0a6fd1c78cccca6c8b375842e2eb8eee45ee6c38dc0837443d16c647252e8124639dd01c808ac5e857a25d927c2a75e2fa8955cad5beb5c206fc050cd933fc4621f5718936f01f39dd700ae1aee7537cc595df8789c5d1a6e1e87b1c7a60e3ce5d57c80dd65dee3801798e1481b1963bcc78cc69f8c50":hex:"92282b022e393924ab9c65b258c2":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"aaf03c3055a35362212b9b059931e7a24fc71e32bc9a533428c9dc31077f2ebc":hex:"7dfccd077b29e6ed5720244bb76bde9f":hex:"21edd1c6056f51fd5f314e5c26728182edcd9df92877f30498949098dcde8089eed84e76d774ef8874d77125669a302d268b99dcd66b349d0271dde6f8cc94dc4f2df3787887b1173cad94d067e346846befb108005387102854d9387d2c0fbc9636cdf73a10d145f4b612c201b46e1ff4465f6a7654ce3da5792daf9a27fb35":hex:"c0e12cdd8233878505e025d52427536be7b6bf1887d2dd20eac7092db80b22417a3a4ca83cdf5bc5e36161be1ff9b73f7ceb297c6d07c9cb2a75035a5dc079e48283daea60596f4b356ca28c243e628cbe459f069709fe193394c9b1a31d8ccc5a3a4eba30056c415e68571a2c34bb5c32efff12e9aa483c4a68be5e76aba4cd":hex:"6154c6799ad7cdc2d89801943a":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"60c775971a9eac7950ed2bdd85bd60fe948ba04c419f6743fb67f37557e46c6e":hex:"9b92ad7079b0de09c94091386577338b":hex:"1f6a84b0df75bd99a2a64849e9686957c6a60932ebe898d033128be9b757e9890225925d856bfdc33ff514c63145f357730bb0435c65342bc5e025267b410af6fd388a5eca01b7efc87fd3b1b791df791bd47dfab736350d7b7f368b4100e04c939d5af957bab95ed502dac904e969876674602a0f0790da2d7351b686e46590":hex:"8abb2e66a4d08074916056bb8e925551372f737f0e1b597c5d08ee102989743a273b29d7281013f8b3aee2934399cb427370d70370ee86eb41584b653660c633506a53cae747826bb7d93909f069d5aacf058b7f2bbdc58ea08653db857bda83a979fc22a4f126dfef7aac45177f4cdb802fab0c812fb35d12a8176ec21336d7":hex:"1d6cd4ab3914e109f22668867f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"3b426e449337a14bc0663246ab61b671b523c9a3130c21ed59c93fa6a5aa5ae3":hex:"e6efc96acd105fe4a48d1ac931eea096":hex:"0902cf7a0685444126369712ac47962bc2f7a3a5837f1b6190d9ab1adb4cd35e7f0892eee628b8e07fcf2b598cebe1ec07d8c4823172ae66a135bb51cc71590707b691a66b56af1ffe38772911d11685da355728eaddd83752d21c119d7b59f4c17c2403629fa55cd70cd331aed7b0de673c85f25c2e9e0267f53f0b7480c8ca":hex:"291bd5a00d71eb7d547b7c94e7030ba4a947418eaeb378a3bacd304b08c6f92f6958eaba968ac6aa23e0512a2a8ad7c1ca2f8fcf623bfc1281f5b7b598c08d2aebcd447668b23238c5e338b4c2ac7f8fd381714c596ea3e0c17aca4317a08563e58f0f52a8af08e078dc242ae54ee0fe3869f8c9687b004a4ded0aa27d8f4c5d":hex:"ca4bfeedcd19d301d3f08cb729":char*:"":hex:"bcef3f2fd101b828d36cb38530cf9a0a7a285ac1c55ee1069cc78466327e85887534c98a8891d579effd832c0f7d6e7e822fb1eea85a39317a547591def4aeed6660872859fc9d1df9725d3c40e9ccaa900e0f1426a55d20ac4f2e8e07bd3bbc687f8e059ab93e7604c97e75ac94be1c8c24f4c4da0080a4d77953fb090cbb62":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"ceaf204ff504ea8e7fade1a2097f2b527a44766860447322fa5ad346cd810217":hex:"cfdb8183251f4b61c64e73243594fdc6":hex:"a60f3969fd1b14793dd1425aa0b1f742a4861e0b50eaffd1525cd209ba6d1252176763bb5bee59aaa55f92341cdc0705899aba44cf0ec05cbf80274ebef65cd9507fd4224b25cac19610968d6a37e2daf9ddf046ef158ef512401f8fd0e4f95662eebdee09dd4a7894cc8c409be086d41280bd78d6bc04c35a4e8cd3a2e83be3":hex:"1c8e4cf6018211518494d46c2e0607fa42e236abc28d58f8175c530f84b1f030572f5f6a74cb5517e1fb999a637d352afcbeadea9121e695675859b66b499a3a351ecba5226e58ebbb59fe12e359e4c89cd51c8703d4643c49921ae495801c73627df404b91e828e1d0e03ae09a39defb5aa5f2c8106953772ba0713d3261329":hex:"9e45029f4f13a4767ee05cec":char*:"":hex:"5cdc66b587ed5eebb04f42b83a6ab7017093514881c598cce332d74fa3fab927493ac15bff26835296e080b5b45ef907c0529fc2f4ed2fc09db179ef598e5d193ea60c301d3f8d823404814e3e74de0e1d2417c963e9246c353201c7a42659d447376e7d05c579dd4c3ae51c2436407b8eff16ec31f592f04b8013efcfd0f367":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"15652abe38cd09777bba21d0db04637f5737d3cb3922181b9f2d07bfdafd327a":hex:"3a5e0d223ae981efb405566264e3e776":hex:"cd755437cb61b539908e0cfaaa36c0123f8f17d1e6539783cb61d4b56cac3bc1e971c1ea558b12669b025cb6b9ad55991c6e2f8ee8b0b7901790193e226a0fbbfff7ff0bee6a554660b9f32e061b6c04bf048484ff9ebd492f7e50e744edd72d02c8fd32f87f9421bf18a5a20ebb4d9dbe39a13c34b7296232470e8be587ba09":hex:"1d6c153dec3b4738a09c9fbdfe31a093eb7ea79b8fa49f83e5e1f46893590f074fb171fb66e30ef887767014e3a10a3aa05da2bd50dd7b7936e1d7f6f31af9030e31e76bdf147f4396464db0f6a72511c4885c6c2305d339906e3c761a3249d7ebea3bf463e8b79c3706e684575550e964b8047979f7aed6ea05056c4b5840b1":hex:"01a573d8e99c884563310954":char*:"":hex:"162430c23f7adcf98575a2d9249b4b5cec42efae33776360ebfa6a19c8eee4bd6b07cbd274deadc3292b7cdbb7803e99d9f67ccc5077f3ad5808f339a05b3213dbfd11377673d4f9b486a67a72a9ac8ea9ba699861dce0de7e2fd83d3ba2a2ec7fabf18b95a2bbe2184ff7bddd63111b560b3afe7f2c76807614ba36c1b011fb":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"a43f6d07042a15cd49f6f52a2a3a67c6c2ff420d95bb94b9fe03b287c3abcaf8":hex:"3b6fad21f0034bba8b1f7a344edf7a3c":hex:"2e01c0523c8293fc51388281dccdb8d0a2d215d729289deb327b8142d716c2bb849e9476545b82f3882ba7961b70c5da2a925ba18b6b121e9215d52ac479c9129c9cd28f81584ff84509d5f9dcb7eaae66911b303cc388efa5020ac26a9cd9ea953f61992a306eb4b35bcd8447eea63cef37bb0c95c1e37811115cf26c53e8c5":hex:"b67e58c8b608724fd20aa097ee483bc4c804490cc79de635170944af75c87ae0ad8261365c1dc80d852553bcba18da9fbc3fbe61d27550a03003ef0c60202054626655509a9e1ab54677e537a4e761df011d6c6dd041c795446b384161ae9eab441afd24d19b58eb4fe5116cd7b11b751ebbd0a2adba7afc380d9d775177099a":hex:"43470bc3d7c573cb3a5230f5":char*:"":hex:"e1720d451fa7ab9db4988567187244b15b6fe795dd4fef579fb72e41b21aaa436d2e5d8735a4abd232a3fb9188c75c247f6034cdebb07fd7f260f8e54efefa4f2981cafa510dd5c482a27753a7c015b3cae1c18c7c99a6d6daa4781b80f18bbe6620bfc1518a32531017a1a52aadb96a7794887c11ad6bdd68187ba14f72a4b5":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"1f0f0191e18db07c0501dbab4ed952c5603a4cd249d2d8d17e62e10b96ae713f":hex:"ab8be16b4db809c81be4684b726c05ab":hex:"a5a6e828352a44bd438ad58de80011be0408d410f6e762e3145f8b264a70c593476b41bb87875746c97de7d5fab120bd2f716b37c343608ee48d197a46c7546fafcdbe3e7688b7e9d2f5b6319c91d3881d804546b5f3dbe480996968dd046f406c11f0dc671be0421cbc8b4ea6811dd504281518bb96148dddf9f0dc4e2e2436":hex:"aad40e7866c26e486b6f6e8eb14a130d5f88891bf0d09aa8fe32f447ab8dea7bee5d3eda4499c0103a010483f2b64fdf1155499d31decf528c77dd7627884f9995c213cf7402143dbb7561d69c86886734260ac94ffac7eb33598d25714228ef43f744ec1af2a87e789f1e5d6fff0fbd5082dcc49328f194e8f8a14a5bfc962d":hex:"d8bd7d8773893519":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"a6cf7d83137f57f2310ee6bf31e8883952bb07ccdc12f516233ed533ea967e5d":hex:"f17e37e73a28c682366bfe619cc673bb":hex:"0f4dd201b18e20230b6233e0d7add6f96537dd4e82d3d0704c047fab41af5faf6bd52bd14fa9a072f81d92a2ce04352f0b66f088c67102d2d127a9850b09ff6087f194a6e8ccaba24091feb303eebb65f1203b2d22af44e7be4de71f03e6f6cbadf28e15af58f58eb62e5bddfae06df773cc3f0942520de20078dda752e3270f":hex:"83ab20698fd7573fd121976a72b45a7f03aad84702fc8ac73d6926eabd8a546895aeffe4ba81d117507e2cd37d58eeff71cc3afa8a4449be85f228ea52f6dc6395bb43c1c9f795343720841682d9b2f00602eafa4d4cbe297bfc62467e526b9d823cc8eeecd9e5f8dbc2f65610663c6f37b3d896651b254bd60215629ade3b2a":hex:"74110471ccd75912":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"b0c85ac6b3887639838ddca94c5c69f38115aa00122322c8114642d12ea1b8fe":hex:"14f68e533ecf02bceb9a504d452e78c7":hex:"796a46236fd0ff6572b1d6257c874038f870aa71cbb06b39046d0fb6489d6ae8622b5154292ae5c4e1d5ff706daedb2e812533ae3a635d339a7fbe53780e3e8204924a5deb4b6856618f4c7465d125a3edffe1ab8f88b31d49537791c0f3171f08dbb5ed1d9ed863dafbae4ecb46824a4922862fe0954ee2caa09ab0e77ed8fc":hex:"0210fce418e7e2199cb8f899c81b9be74a630d00269755f882fc4db27632e99685cc12c426a7503473646df1288d0ede28408be9add5713628700f8e2b2e27d7522520ed00ac47239084651eb99e7d03e1520aae137b768f3144232c16b72158fd5da4a26a2525b9b27791bf06d1eb2e671c54daf64fddc1420bc2a30a324ba5":hex:"6fb0b5c83b5212bf":char*:"":hex:"5e6c362f7587936bcb306673713a6f1fb080783a20e9bbb906456973e529cfa0298206184509c30e1d3793eaaa5d564edd4488f04311821eb652e0a1f4adaf6971505ca014788c8ce085ceb3523d70284ed2bb0aebeba7af83d484df69c87f55a93b3d87baa43bd301c4e55eb8c45dcf3e4612535ea1bd5fdb4c3b9056d0cae9":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #0 [#1] +depends_on:1:2 +9:exp:6:hex:"e61b1a6b40e2ab1245ff65dcfb9948318ac4fe55e9ed600cec301dae32ae0e93":hex:"c356244b3034d288e4d4fe901b8e27c1":hex:"bdcfeb09d5b97bab05a7acd9849e7de2c5beb7a4dc573c7e1c1d0c0409245a6584023114fdcc6413c800ca16847bde750b27c4d590248e2ce457c19b0f614f6aff4d78d4a19b3251531e5e852fbb05d09412cc1ff8988d1955ca6f5fe2d820f20a7642e3ae69e8122b06ba0918e806400b9b615e1abe6fdd4f56a7d02d649083":hex:"8d67fa9fcf078e421cb63abeb25dba739ab0e09a091dd06b0c616e1e888f350edb2d73a42f57f115266ea20c7f8fc143ac746649612df06a5e29b4a15934dc049be1ab49d018ab86c4f37d8c3d9c714f038029e74d8ee3dbe61d81adc63712ea413b37f7604da12107aa1695d9b0981e5a92cdfaa5fbda0e31b22c6fd6f3b499":hex:"86acc02f":char*:"":hex:"7c73182eca97d9617abb478a6ce62e3491a7e9951981c89c3071b161a4c80440614c3f24d0155073e28dcccee96bc8303dab4901ef77318df522d16d9da47770ef022395d6104cd623d93d67090a27507fc8ca04157e7939e639c62cd0e7d8a472314833c0eaa9ba2fd54a25b02854e3bff25cccd638885c082374ae520ed392":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #1 [#1] +depends_on:1:2 +9:exp:6:hex:"4f5a02e9843d28c8c226ed70d44b8fced8fb757ab6ece4d4f06e3c3cec79e44f":hex:"099e5d9aae89fb6391a18adf844a758e":hex:"ad93e8662c3196e48cfdb5aa3bc923cd204151aa980cbec78f0d592b701f779c1c49f9e8686d7e2385a4146b21a643a59c18c8b82214f42560bcd686fad7c7c8e8c1944ce6b20ec9537dd14b6cf2592740ca112f4cd582250d69f240d3e957040e1f7e19c60b3c8f2bd00cb666604c38946eb9b2f17336d281b4794f71e538a2":hex:"3ec13950d329f24074714c583bdc35686b811f775b76b0a8fcfa66fc56426c9d022f8ab0af38f8d2f71a068548330cdbe891670181ed7491bf40c739ef4dd93689fd35929b225089d2b151f83d9b3cd767300611144586767354c0491112c205409f3168092d27f9b9f433afb79820a2811984d48e70c1fb2a13bbb3ddbc53fb":hex:"30298885":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #2 [#1] +depends_on:1:2 +9:exp:6:hex:"1cdb218e0bd0e02156e5b48182990f778889793ef6018a8928e61164ac047c8e":hex:"d2ffbb176f86bee958e08e5c7c6357c7":hex:"bc580c4223f34e4f867d97febf9b03629d1c00c73df94436852cafd1408c945c5474c554cb0faf2bae35d3160c823d339a64ebd607cf765fa91f416fc6db042bc2bd7445c129b4a0e04b6f92a7b7b669eb70be9f9b2569e774db7cb7ae83943e3a12d29221356e08e5bf1b09e65f193d00d9fe89f82b84b3b8b062e649163dc8":hex:"4d039618a0eb640329f90fe97de18bc928fc3fc7a0db42c97774bec2e882e872fc1097c8319f7837a16516bf387b1bae321c565e8fc1cb8480f051158e4685f0adba310d2c6253bc1300403cbd3f7ddcb2796a69f8bf9e73d47aada9a02673c1a3d5ecdac838abf22b385906236529a1b7dd5b8af2611a04cf4f83b15ba41cfc":hex:"1997daa9":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"dc1a145c18bdbca760f35eea0d4a5992de04a0615964ec8b419c8288ab1470f0":hex:"7f8368254955e1b6d55b5c64458f3e66":hex:"":hex:"":hex:"8ddaa2c3ed09d53731834fa932d9d3af":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"7b4766d3a6615ee58b390daa228ae7a541c46ce80a1efe227cc43cb777df3232":hex:"274367f31ec16601fe87a8e35b7a22dd":hex:"":hex:"":hex:"5f3a757b596e06e9b246ed9bac9397f9":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"d19b04055bf6e7ff82e89daef66c9d8319ab25f9197e559444c5729b92c4f338":hex:"796efaff4f172bef78453d36a237cd36":hex:"":hex:"":hex:"3b445f38bf4db94f1a9ec771173a29e8":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"7ca68e300534a90a7a87ca9906e4ac614a6aa51f769b6e6129753a4f83d10317":hex:"45e6b23f8b3feefd4b0ea06880b2c324":hex:"":hex:"":hex:"6c0a1c9c2cf5a40407bfa1d5958612":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"a2b7cd693239bbc93599d3d12c9876e7303b227b8ae718e2c62e689e1fd62903":hex:"548c9c8fcc16416a9d2b35c29f0dacb3":hex:"":hex:"":hex:"3aa21f221266e7773eeba4440d1d01":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"156b854beb0c276a5e724f5da72f0d1ca4ae7cbd5f93a2257d95c2e5bfd78ad4":hex:"a5129e2530f47bcad42fc5774ee09fe7":hex:"":hex:"":hex:"6bb09ed183527c5d5ed46f568af35f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"d824330c60141264e1f709d63227a9a731bcc42b4adec1d8f0161b10b4fdb2ab":hex:"c5afaa45312c64ab3c3cf9d6c4e0cc47":hex:"":hex:"":hex:"55952a01eee29d8a1734bbdf3f8f":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"b5517589948d8aea778df6fd66c17a170d327f69e504f0a4bd504c4286a9f578":hex:"6404b111c6289eefa0d88ed6117bb730":hex:"":hex:"":hex:"637f82e592831531a8e877adfc2c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"f6137b2bcbd327fbcc7f313efa10f6ffaed30e4782e222e1225c87103fcae905":hex:"3b87b08337a82272b192bd067e3245ec":hex:"":hex:"":hex:"1f2dda372f20ffddd9dd4810e05f":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"b5e70d1b78e931abf44bba3f937dbc344858516a8a8afe605818dc67d0c3e4c4":hex:"58e70095c6f3a0cda2cdc7775e2f383d":hex:"":hex:"":hex:"1763573f7dab8b46bc177e6147":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"90de0c047d1dd01d521f2dedec7eb81bc0ace7a5a693a7869eaafbb6e725ad7b":hex:"d565c9cdfb5d0a25c4083b51729626bd":hex:"":hex:"":hex:"78738d3e9f5e00b49635ac9a2d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"c43e8dbeafb079692483a9fcbab964b76fccca6ca99e1388a1aa9bf78dfd2f02":hex:"f2bd4fe0d30c0e8d429cac90c8a7b1c8":hex:"":hex:"":hex:"ea7b52490943380ccc902ca5ae":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"13540919fdb95559e37b535a427efeee334309e34c4608459e204d931b8087e7":hex:"c993c1802df0f075ce92963eb9bff9bd":hex:"":hex:"":hex:"edfab013213591beb53e6419":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"2a7b2e07c148ff0f627ae28c241a395876bbed0c20f3fd637330e986db025714":hex:"8f7e1621c2227839da4ea60548290ffa":hex:"":hex:"":hex:"f9da62f59c080160ec30b43d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"b3e7837a75b38ae6d4299a1ae4af3c2460dfca558708de0874d6b1a5689b8360":hex:"05d363b2452beff4b47afb052ac3c973":hex:"":hex:"":hex:"6b4a16d1ea1c21b22bdcb235":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"9df3ccd95f7570f6ecf5e5329dcb79bcd46cbcf083fe03aa8f5bd0f645c6a607":hex:"774f4e70a7577b5101c0c3d019655d3e":hex:"":hex:"":hex:"98ff89a8e28c03fd":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"1c7123e2e8d3774c8f1bdbb2272f19129e04f29b4351ae19c3b9d24e6ea1fe87":hex:"99f25cebd6cfa7f41390b42df6a65f48":hex:"":hex:"":hex:"8e14a0a4853a156a":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"490090323e9257517e2453469caa3414045cacb4d05d5cebc6b9c06fa6d19291":hex:"c1beff1ff6cdd62339aa21149c4da1e6":hex:"":hex:"":hex:"f998d7c08d609b3a":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"360e48dd38d9e7f5bf29a2994ab5b3c9c70247102d94049ae791850807a4c845":hex:"88126c350dfc079c569210ee44a0e31a":hex:"":hex:"":hex:"f2ebe5e4":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"1562b32e4dd843edaf4474b62cadd8f46d50461f5b22c9f1a8eae7367d35d71b":hex:"af29fdb96f726c76f76c473c873b9e08":hex:"":hex:"":hex:"13fd6dfd":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"d5160d0c98ffcb1c26aad755f67589000e2bb25fa940e6b1d81d780f421353d9":hex:"1552604763453b48a57cea1aed8113f4":hex:"":hex:"":hex:"660c5175":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"c3a3ea3a097c0c2b3a4cb78462d87fd5a8f348687c4150e9d3354b388ab13d17":hex:"f77945979241fb3a454d8e3da193e169":hex:"a69bac31241a2c07d3f7e331b77f662b1e67ccb81c07f52578b01f5785de9437f02eb7627ca7b9af09c1cb428fe93d6deb31f4d6dd2f0729f87480bdeb92d985de1aaad4bcebc6fbad83bede9a5dd1ca6a15bf5d8a96d4edb5bee1f7d195e9b2e5fb2221a596d69f257c18a143eda870e22d3f2ed20c9b3b0d8c8a229c462fff":hex:"":hex:"6b4b1a84f49befe3897d59ce85598a9f":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"e1626327d987342cba5c8c63b75b4ed65463a2b9c831f4f9f80325fa867d1d73":hex:"4e25800deab7ecec2a2311f8fb44eb7d":hex:"ebaffd558f24dae03117c69ac4b2b4aaeaffe7e0e7599eaba678bfce23a9914dc9f80b69f4a1c837a5544cba08064a8f924064cba4d783623600d8b61837a08b4e0d4eb9218c29bc3edb8dd0e78c1534ab52331f949b09b25fbf73bece7054179817bc15b4e869c5df1af569c2b19cb6d060855be9a15f2cf497c168c4e683f2":hex:"":hex:"8faa0ffb91311a1a2827b86fec01788d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"938da64b837275b0c80c442bdf2301aa75e387fe65a775d10a8ec840f62ff429":hex:"dec6adeb60216cbb8a6c3afba49fa201":hex:"4ac144bd95f405649444f01ab67ef3e4c0a54fdbd933b6ba00518c79db45c22c90030c45aadcfdb53ec8199be0cbb22dbb9ab938a871f4b3b0c98ed32590a051abb946c42726b3e9701f183b2092985e3457943a6350fbcaece2e6b111b179ea3fd10ac080a577a1481785111d5f294bc28519c470ff94392a51a2c40a42d8b5":hex:"":hex:"2211ca91a809adb8cf55f001745c0563":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"e2436484ea1f454d6451ad8dbd1574b208d7a3ab4fa34869299b85c24348b43d":hex:"97040d2ec094fe1c64fa35b35b7451a7":hex:"bc198677513ce0e66697dfe52b22315fa5d8f92042f34cc9f373a01f94607df1a599132f60af010ed9b5e52162dd7b162912b68b11700e08f5fdafd84d10f760fc05ec97c05b83e55155194f399594015b90a19c04fb992e228940fe1b54ba59c4bb8318b33cc0df1cb1d71c389473dfb3eefabfe269ca95db59a7bc0201c253":hex:"":hex:"2e080ba16011e22a779da1922345c2":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"7fb3fc72eb8a3aa5b102f90039f852cc3fd64f46915f5e49f1d9e02fe9cc13b1":hex:"f6120fea313362524917c53d90bafb4f":hex:"60c2be7fbd15faf895fd19a9ce775fe2b183b45cffafe4fcbf50d421bea97347e41a9418cfa129b2dda63b889a70063010215dbe38c37feae18bc31b34f31b726f22177f2b4b9d648dd4aa80edfd12dafaee10baa83224354432d1cb62ccabe38bb8448d162cd0d30e988d2e1a2458ffdafaacbdff928756390f66dc60d7ea45":hex:"":hex:"83de3f521fcfdaff902386f359e683":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"697c96d80d0a3fa9af35b86f31fb71a17aed30ce841c79896bbc8863b3b3ee04":hex:"3a5163ec7e007061838d755ac219855e":hex:"de50c12da63232768d5eb9920d49683b5b7114cb77448fa10b9d63552ec5d9c2eac94b375d11f944959f903bb20c696639b6e7f108ec1e873870098c631ddacb2c25268cfc26d2a4cacfb7dda7383374c5456bcf4daa887a887f4293f8caa14419472a8bf7ffd214dfb2743091238b6d1142b116c2b9f4360c6fe0015cd7de81":hex:"":hex:"cd4542b26094a1c8e058648874f06f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"66c1d9ce3feb0e966c33e3fd542ec11cc32f18c2514b953103d32abcdc72633a":hex:"46fdb88fdde9b7d74e893802a0303256":hex:"55d2f263d2e3cf0b390fce1dd1ebd5f666086f26e1ce2f08002bedbb810ada3922c6bfcf6a6adaa556e9e326c9766f02b3eb6e278da2fa3baa7dbdb6373be3c6ecfbe646b1a39e27c5a449db9b559e7ea3496366b8cdbca00ee7a3dea7fdfbea1665bbf58bd69bb961c33a0fd7d37b580b6a82804f394f9d5d4366772cee3115":hex:"":hex:"96ca402b16b0f2cd0cdff77935d3":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"d7c949420dc9497232cd5810f316d11f9e85d36c430b5943ba79836d88c1eb92":hex:"7ef9788ff09cbeedd9569d49083a4097":hex:"ca1de5cc3fcde2638eb72210e551e9c0e0a3f5570d5be83a9a4406b545d854bf17e75b9cd0f4c45722fbd71319a317b72a8798485e9316a1c8102432b83bc95af42f6d50700ba68f6f2e19b6af609b73ad643dfa43da94be32cc09b024e087c120e4d2c20f96f8e9ddfe7eae186a540a22131cedfe556d1ebd9306684e345fd1":hex:"":hex:"8233588fca3ad1698d07b25fa3c4":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"6fe7c70815aa12326cdcbb2d2d3e088bbaaef98b730f87fe8510b33d30e12afe":hex:"e0253bd1f19e99a7f8848206fb8ac4a4":hex:"397897eca4856f90d14c3cdfe1ad3cba47e23174ae2dab7d2a6320898584e03bffa3ffd526f416d7b3c579b0f3628744e36eebb5df519240c81d8bbbf5c5966519c5da083ab30a7aa42deae6180e517cdd764b7f77d19cc1a84141817758887a8d7265e7e62279b9d33cd2f1ba10fd54c6c96d4b8a5dbe2318fef629c8e2af0f":hex:"":hex:"477b0a884d788d1905646bd66084":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"cbeefb3817cb02d617f385cf2371d52c8bcbc29e5e7a55cd2da131ca184c6e89":hex:"f74156d6400ae46b612531848bffe18f":hex:"1abe2ab05ceccf2391273126fe4a4426b94d2c3b97a7f1cd2ee6bb952bf4a546e972b5a1701d5ddb0e5bb7a248fcb47107a9fc77e4b9806b68a11850119aa239fa8be1370e3a2e1a8b168f7323afdfc4b8917d92570167848a56132d68876abc386c258a9233dc8a9eb73443b052e842c3d63e8b5369acdd038404e4e9a4b038":hex:"":hex:"0cb67cec1820339fa0552702dd":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"e6f5f65ce2fc8ec3f602f5df90eb7d506dd771337913680ac16bdcd15c56583d":hex:"9212a548c597677d1747e98ce6fb18a4":hex:"55ca486c0183d0134925880d2e21dde0af51c4c77c6038a5a9c0497884e0aa4715bdb5b4bb864acc708ac00b511a24fa08496df6a0ca83259110e97a011b876e748a1d0eae2951ce7c22661a3e2ecf50633c50e3d26fa33c2319c139b288825b7aa5efbd133a5ce7483feecb11167099565e3131d5f0cb360f2174f46cb6b37c":hex:"":hex:"08d7cc52d1637db2a43c399310":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"0e9a0391435acb57eae2e6217e0941c79a3ff938ec6a19b8a7db2ea972e49f54":hex:"27cd1d7af7e491e30c8110cc01392529":hex:"79140d32bb32dace0779e2d37a0f744d6d973e99a279962b43a6c0af63772e8a0a21d5d9dd3c33d4b218cb2f6f24dd8d93bb4e1e6a788cb93135321ecfed455e747fa919b85b63b9e98b4980a8ccb3b19d50d735742cb5853720c2ad37fa5b0e655149583585830f8d799c0d2e67c0dc24fc9273d9730f3bb367c487a5f89a25":hex:"":hex:"fbb477dd4b9898a9abc5a45c63":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"55a12eeca637654252e3e40b371667e3f308b00f2fd2af696223e4cd89e3fd4e":hex:"8a3793b6441258360f7f4801b03d0b26":hex:"f5810dc5f25e49bd6d94bc63c2494aa7a579a4056a25f1dd9b2734d0b8731ee52523edd54ff475651d45c213e1bf254327fb0e2c41a7d85345b02bcc9d27b08915d332e1659671991a4bb74055967bebbba6ecceb182f57977130623d5a7b2175fa5a84b334868661c1f450b95562928b4791759796a177d59ed18bbf141e2ad":hex:"":hex:"99230019630647aedebbb24b":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"3d353f870a9c088de5674efd97646b9c5420b2bcdfcffefcadd81682847e5331":hex:"f267fa982af5c85359b6447f9b7715ea":hex:"7cf55630867af5dff747c8dd25bcc531d94a7730a20b6c03d46059ea93fcaa00d07ee17dad0e0dff814b02dfef0cbe00b37fd2f5f95ead7c72be60016f2934d7683fc1e47185c7211c49cb03e209b088edb14e533dbcb792ab7033728904f7ff12381a236dba97894ec1fafcf853ab15fff343f9265d0283acef10168ffd1271":hex:"":hex:"9553b583d4f9a1a8946fe053":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"d227c9ff5d17a984983056fb96f3991932ae8132377529c29238cf7db94a359d":hex:"b8f6536f376a7efe0e684acf350bae70":hex:"1cc25da31f90de7fa47ebce92754d3faa99f88d4e25ccab45645c1acdf850d55d7f02f61a0bfdc3125f29259d7da8abef532fe0966c63d3486753c8a2cb63a39349a0641b2f2b9526a03b97d58ca60fbb054c6c164ff2836688b0cad54df2b165bc082eeae660e768dde5130e30f8edc863446661c74da69b9e56de8ae388da0":hex:"":hex:"44b95a37fab232c2efb11231":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"b2a57ef85ffcf0548c3d087012b336c46f6574cf1d97ca087bfad042ee83eec2":hex:"3d580402d2a8dc4d7466e5dcb456be7a":hex:"c2b9e95c16e55028794a63ef82d11fb83a2a75dc34a81f238e472c33264534bdd54cd07d02a0ecf9019ad1a6d6c779f339dd479e37940486950f183bade24fca2f24f06d4037b3555b09fc80279ea311769473eb0630b694a29823324cdf780d7d1a50d89f7a23b05f7a8c3ad04b7949aa9e6a55978ba48d8078b5a2fd3c1bbb":hex:"":hex:"072d4118e70cd5ab":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"63889ed5bf2c27d518a696b71c0f85592e3337aae95b5bf07289e4c5dfdc088d":hex:"1ad534280a0fac7dce31f2ae4fb73f5a":hex:"be1b9dabea33bb9443e27f674b27931c0fba699a33dc86fab29e50b76a9441030444b465317bbf2949faf908bc1b501d11a5ea2042e4b460a85f3be5836729e523d99b56ef39231d5c6d8ae2c2ab36ef44e2aa02a1f2c559c6e333216c7f9ed5f9b880a88e920219204c99a3ae8f90afd1396563bc59a691a93e0070b0b5fd90":hex:"":hex:"1bcea0ac2c1a0c73":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"94e3e2c17cfb6f52d4fdba3ba6d18bba891b6662e85df14d7e61f04adb69e0e5":hex:"8a80efb3bfe220526997543409fddb4d":hex:"05da1b0f7ac6eef488d3f087ecae7f35abe3ef36d339709dc3fcb5b471979268ee894c3b6c7f984300d70bc5ea5fba923bfb41d88652bdaecc710964c51f3e2ae2c280b7d6c8e3b9a8a8991d19d92d46c8a158123187f19397ad1ad9080b4ffd04b82b5d68d89dacd3e76439013728c1395263e722b28e45dabf1ef46b8e70b5":hex:"":hex:"faa5c13d899f17ea":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"fe5e479ad0d79dbf717a1f51f5250d467819e444b79cb3def1e0033c80ddadd8":hex:"47ce838083fd070d8544c0ad5337cdc6":hex:"98476bf05a18c4ff1b6024dd779c1ac06d838705a0a83fe42bee5fc6ebf3b2a1a5049b67f4aabc8239cd6ff56504bcbad1e2498c159bbec2a6635933945f6ea49e5bc763dcf94f4b3643d3888f16105abb0965e24f51cb4949406124145e9ae31cc76535b4178492f38b311099df2751f674363ae7a58f6f93019653b7e6a6f0":hex:"":hex:"a3958500":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"27d4dedb71a8f68ca5ce2b9e56da772bf5a09b7981d41cd29f485bd2d1adb8d4":hex:"7e6f0343c54539717a97b6c8b9f7dec4":hex:"d386db78043f719b7e137cbf79a7f53dda2fe3baccbebb57d499f6eb168e5151f10081d76b72ae0f30165efbdda469e826f9246e59dbcad5c0b27691c00d6c192c24073e99c19cf8c142087c0b83c4ce2fc7ba1e696394e5620ab2d117d5dcd2ac2298997407fd5de07d008de8f9941a4a5f8074736a59404118afac0700be6c":hex:"":hex:"50fd1798":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"5a7aa836a469d28542d0d24d3232fad266da8fc889c6b6038b726d3da25f7b20":hex:"9faf7cd805803e143ec8f3f13475efd2":hex:"1006c707f608728b2bf64734062b12a5625062bcdcb80a3ce2058352a2922d5e6fbe19681b4f0d79ad3c837f81e72f2fbf8df669894e802a39072b26c286f4b05188c708f7c6edd5f5bb90b87ffa95b86d84d6c1c4591b11d22c772a8ad7f2fe6bd8b46be0e93672df2e8bff8ba80629e1846cfd4603e75f2d98874665c1a089":hex:"":hex:"07764143":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"a9444fd176acbe061d0221fde3ddfcc4ff74e995d981a831297c4cbda51c22a1":hex:"5714732145470da1c42452e10cd274b5":hex:"":hex:"c146ff5a988496cad7eced7a2ea471e0117d5d6bd2562c23ce9db4bf36d83ba3fc22e90486ec288a627d208e0b2fd3b65f8301cf7fc41d97959981a95cd1cf37effc46db99b94b21c941c3613c26a10b1a6b7793f467d58ff5134612230f1c49d7e1fcf664fe52fc6eca46273982f6fe729b009d90eb8d8e4a0b0dbe907b76da":hex:"db85b830a03357f408587410ebafd10d":char*:"":hex:"a3cad9a57fa28e6f6aaa37150a803bf8b77e765f0702e492c4e5ebb31ae6b12d791149153e469a92bb625784a699fd7ca517500ee3f2851840ba67063b28b481e24ba441314e8b7128f5aaccaf4c4e2c92258eb27310bf031422b7fc2f220f621d4c64837c9377222aced2411628018a409a744902c9e95c14b77d5bb7f5846b":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"686d3bd071e3f46f180611bc4ec8d7726fe72b6c617e7d42b3339f53918c9e36":hex:"a714e51e43aecfe2fda8f824ea1dc4b7":hex:"":hex:"21983ad66449c557263aef299da6eef8f31d576fc17ed2dac3e836f7c2ceaff3094b2695452680e188df10c174810efd1fbaa6c832baedce0b92e4c7121447f6461ac909b4302cdf658095b1de532b536faa4fb38cfdf4192eb5c3fe090d979a343492f841b1edc6eb24b24bdcb90bbbe36d5f8409ce7d27194a7bb995ecc387":hex:"cd30c3618c10d57e9a4477b4a44c5c36":char*:"":hex:"9610908a0eb2ee885981c9e512e1a55075a212d311073bbb2fb9248cce07af16ee4c58bdc8dbe806d28480f9065838146f3e1eb3ae97012cfe53863a13d487f061a49a6c78ca22a321fa25157dbe68c47d78f2359540cc9031ee42d78855ed90e6b8ea3d67725bfffcb6db3d438c982b5f88d9b660f7d82cb300c1fa1edebb6b":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"6fe81f15a02e2ecf46e61199c057102d160e6b5d447d4a275972323fff908c3e":hex:"91d55cfdcdcd7d735d48100ff82227c3":hex:"":hex:"0b4ee0385e6665da8fd2ae47f2d0cf1c5bd395a3bb447047ab5a3ae0b95355bf83d0381119a8d4c01acbe60cd7885da650502f73498a682fdc94f7b14f4c753226064fa15e3a90a6083e053f52f404b0d22394e243b187f913ee2c6bb16c3033f79d794852071970523a67467ce63c35390c163775de2be68b505a63f60245e8":hex:"cd7da82e890b6d7480c7186b2ea7e6f1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"4c2095e1379389dc3810e8819314f5a2f87d1494213c5b1de1a402f7f4f746c4":hex:"19788b2e0bd757947596676436e22df1":hex:"":hex:"26ec8ebac0560538a948afbc18fb730e9a91f21392bde24b88b200f96114b229a5b57fa9d02cf10e6592d4dfb28bf0f00740c61157ce28784e9066ea3afd44ecf3a494723610cb593c0feffc6897e3435c6f448697ad3e241685c4e133eff53bdd0fe44dd8a033cfb1e1ea37a493934eb5303ae6ef47ce6478f767ef9e3301ab":hex:"f26a20bea561004267a0bfbf01674e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"be5351efc0277afc9759ec2464a22cb4401f7a17efd1a205e7af023c7ed30ee1":hex:"c6b26117d9dbd80c1c242ad41abe2acc":hex:"":hex:"1eca91406f338fc09c2988b1d7dc8c409d719300c03840a497d7b680cdd5e09b144903477f7116a934e1d931cf368af1fc2a0a0e7caa95475a3cd7bf585a16fda31eb3f8201db0216b37a1635c1c030836b3dd05ca5b0194388fa198e717822131d5d4318690ef82d35ac80b27fff19aec8f020dc6c6ce28f0813bbbf8230ad9":hex:"61051d6c0801b4a6b6ca0124c019f3":char*:"":hex:"95447aded336d6c20d483a6f062d533efed0261ad321d37bf8b7321b98f55c0f0082ce7f3d341b18fea29a72fc909d30cd8c84a1640227227287674a9b2f16a81b191ecf3b6232d656c32d7b38bea82a1b27d5897694a2be56d7e39aa1e725f326b91bad20455f58a94a545170cb43d13d4b91e1cee82abb6a6e0d95d4de0567":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"814c2cdfdeecf39d43bb141fbfc62dac44f7552c5e5dac2d4913303fc860119b":hex:"0db3ade15cb0dea98a47d1377e034d63":hex:"":hex:"0d3013a1d7132f685d001420daa6c7b643bc36b887511acc4588237d3b412c79e4ebba29c08248ad46c7239e8daa232b7483c9c4e3d1c0bbebc696401efe21f7fd6fc0525a4ab81bd9a893d5f7ab23b70ed07c00f33649b8a996a006de6c94f7793f72848793f4d5b31311c68aae1e715b37409fbe506dac038a0950f05fe82b":hex:"e62f910b6046ba4e934d3cfc6e024c":char*:"":hex:"374d03cfe4dacf668df5e703902cc784f011f418b43887702972dcc3f021bcb9bdd61ed5425f2975b6da7052c4859501eb2f295eb95d10ba6b2d74e7decc1acacebf8568e93a70a7f40be41ac38db6f751518c2f44a69c01c44745c51ad9a333eda9c89d001aa644f1e4063a8eb2a3592e21c6abc515b5aacaec8c32bcf1d3c4":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"1ae4541110f2bc4f83cd720b5c40c8315413d896e034b75007f172baa13d29ec":hex:"83f98eec51ee4cae4cb7fe28b64d1355":hex:"":hex:"5ea811e7fbfc0e00bf2a6abfac50cad9efd90041c5f7fb8f046a0fecbd193b70a2de8a774d01dd3cd54f848cb3e9f5152ee1b052ba698bebfba1fbbdae44a260447d6e6482640ae4d01c9cac3d37d4ffe9a0de0b6001de504a33ef7620efe3ce48ecd6f5b1b3a89185c86d4d662a843ff730e040e3668d6170be4cced8a18a1c":hex:"df47eef69ba2faab887aa8f48e4b":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"20c9b662ec4bd13bf58d64cb0a7159b0e7fee4703af66292bf75c8bd6e42e8dc":hex:"2bc0847d46f3d1064bbf8fe8567f54a2":hex:"":hex:"45b64f2ed5ac707890c0c1726adf338770ce6a728fe86bb372c4c49409a32705f881bc4d31a27c455c7c7df9dd2c541743523e7d32f88930d988857847f011be5f5f31a31e8812745147cbff5c1294d0fd4a7285db4833f22bf1975250da99c4d0dd2c9688d7f8001bb6ef2bc898ce4d42c5b78e74645b56ce992338f49d4183":hex:"5a1bf25aa8d5c3fe5cf1be8e54a1":char*:"":hex:"9079d6275db076625e8474c2914fe483d413d5339202f98f06c3b0ef063d8f3d31029deaf7f9349bfec57e5cf11f46f02d5a6520c7992efc951adbbea6d08e53faeb10dfe8b67ee4685da9ea4fe932551a65821147d06d4c462338e6ddda52017c2bc187fd6d02b7d5193f77da809d4e59a9061efad2f9cadbc4cd9b29728d32":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"0a1554db37f2e275732a77e521cbd8170729d8677a85db73feacf3c66a89d689":hex:"b9194a4d42b139f04c29178467955f1d":hex:"":hex:"5421d93b7e6e0091978c673df4f3a406aef5f13eb5e6f95da19b0783308cbe26d4fd6c669cc4a9f069d7e62e4c6fad14b80e918fe91556a9a941a28b3dbf776a68ac7c42df7059b5ed713e78120aec84e7b68e96226c2b5e11a994864ed61b122e7e42ef6cfdae278fadbae1b3ea3362f4e6dc68eef6a70477b8a3ffcfba0df9":hex:"05949d591793ca52e679bfdf64f3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"3ab1d9bb571c4bdc9f3ef340914bddcfe0c8e7718d4a2530334372cec86e5fcb":hex:"6a5335901284dd3b64dc4a7f810bab96":hex:"":hex:"80bcea307e009745724d5f15d21f3b61a5d5a8401530346b34a2adfa13e3e8c9c9327d6fad914b081e554fbe6c1c6fe070b566620e559555c702c0ab5becf61ea1d9de64351ce43b2276ef4e20b5af7ce43db6d21286af4e740ef00c6d790705afcf0ee4850fffc12c662f2bd8212feb21db31065ab8f717a7509c213352b869":hex:"04b8e5423aee8c06539f435edd":char*:"":hex:"36b9602eee20b8f18dce0783cd1e01a799f81ae0a1ce6d293a26c62f47e7dad85c8446697cc09c81d3d9ead6f9e55c4147211660c8aea9536cc5516e9883c7d6854be580af8cd47ba38fa8451f0dad9c904e0e7f9997eff7e29bf880cd7cedd79493a0e299efe644046e4a46bf6645dfb2397b3a482a346b215deb778c9b7636":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"7dddbd5657e22750bfe6baa70a1f4ac46c1ef8bee573a57cfcef50b66f85e593":hex:"fcb962c39e4850efc8ffd43d9cd960a6":hex:"":hex:"2bf5aba83a8161b9d21ff29251fb0efa697b1ea9c1b3de8481d5fd4d6b57afda0b098decdc8278cc855f25da4116ed558fc4e665a49a8fff3aef11115757a99c10b5a73b1f794f9502186c13dc79442f9226bbf4df19a6440281f76184933aeae438a25f85dbd0781e020a9f7e29fb8e517f597719e639cbd6061ea3b4b67fb0":hex:"1d8cdadcf1872fb2b697e82ef6":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"6916b93b2712421f1f4582de7ec4237c4e42e2b32c7dced2f8bb5bd2e0598312":hex:"b4d9248bb500e40de99ca2a13e743f1c":hex:"":hex:"3739cca20279a36ddb857ac22beae901a49529b3182463ab81a7c46e437eb0b0571e8c16f7b626ecd9f2ca0cd83debe3f83e5d58ed3738899f4b616755eb57fb965208f261736bdf7648b1f8595c6b6a779768115e3077dfee7a42d44b555a51675fb1ce9961d0e21b2b9b477c0541184350e70decf7c14a4c24b8a6cd5fed8e":hex:"090d03446d65adcc0a42387e8e":char*:"":hex:"0255be7ac7ac6feb3a21f572f6a593cc8a97f17af7064c80e478f4a6c469cf94d604bc014b003bf284d216161a9c8a493af43c6a0d8caf813a9e6f83c7ed56dd57543876b11f76aa2be80dcd79d19ac61f00fa423ac2f52fae7a8327cd91494ca4116feb735980ad0a4b1445cb7f38cc712b8aee72179e65b97fca38694e3670":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"b751c8b724165009a8bd97a9d2a0e22cae5a95c4743c55eeeef0a6fe7d946bec":hex:"160c50c0621c03fd1572df6ba49f0d1e":hex:"":hex:"e8546a5af1e38114822e60e75563a9399c88796f303c99c69d1f3c50379da81e1cd5b5a4a721e23c59da58ea4361b7ff58408e506a27fea24f9a235c6af7f7a5bd93fa31e90edfc322821c08d6324134830b7fe160b4a3e6d27866a10e6e60762a31618ef92f5c67ccb1deb1f1b188f0e687165e7c366c7418920df4f4fcdcae":hex:"9fef9becf21901496772996f":char*:"":hex:"175fa6b7cd781ec057ff78ba410f2897a920739b5fc4f04bc9b998fbc7cc18e327ad44d59b167e4627256aaecd97dc3e4a7c9baaf51d177787a7f4a0a2d207a855753c4754d41348982d9418b6b24b590632d5115dc186b0ba3bec16b41fa47c0077c5d091ec705e554475024814c5167121dd224c544686398df3f33c210e82":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"0faf32c22c2a4ee38fe4b5ce08f98fdf6f83b5038dcba5ec8332b3eeb5c710c7":hex:"04885a5846f5f75a760193de7f07853c":hex:"":hex:"8a556cc30075753c6e94c2f669bca2058ff6abcbffffc82da7cfca0a45af82dfb4cf487ceb4ede72be87ee4c8b72db1e96459de1dc96721464c544c001d785f2188b9fccaec4b1a37970d38b326f30163d2fdfdf8a2ce74aec55abcd823772b54f8081d086a2e7b17b4086d6c4a5ea67828ef0b593ea1387b2c61f5dfe8f2bb0":hex:"0c13506ed9f082dd08434342":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"0dddc3d2f82bdcdbc37648a6b9b416af28753740f8e998cd1a52a0b665369f1c":hex:"0a93b883cbd42998ae2e39aab342cb28":hex:"":hex:"07bf84b15b21951fd22049be6991a672503ae243b8d285fb1e515e1d2c36bfd5b0d0bcce85791f2cea8f616aed68a7d9cf4eaf76418e8b1ec27751de67cbfd9d9f7905b2667904f10d598503f04c04ea00a681ff89a9c446d5763898430bd7a9dfebfe544e3ed3e639b362683a651e087626ffa63c0c2b3e0dd088b81b07f75e":hex:"5c37918edb7aa65b246fd5a6":char*:"":hex:"ff7b7b2f88b8c6f9f9bad7152874e995eea0ff1ce1ecd9b8d563642a37a31499f14d70f0dd835b7adf80928497f845fd8c2786cd53af25f8c9fe1bba24e3c3860162635bbed58f06cf6c9966bb9b570987a48329279bb84afb9e464bb4ad19ae6600175086e28929569027c5285d2ed97615e5a7dada40ba03c440861f524475":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"a0b1a62e46e7712277fc711e19d0c0c865ee77b42ac964b7202dbcaf428086c2":hex:"e20957a49a27e247d00379850f934d6c":hex:"":hex:"7dd7c0787fdbea4aacf929341659dcf4b75cbca8f92001e8b62a4d7b40272c5755fa9c445857db05328dc11ce5221f044f4b3dafbf0e2d72a1ad0d3e4c804148db578218690ccc620d8b97b4450ff83400a6caaa959617611446a6627138a4067be9ea410d4b0581022ab621928205b4a4480560fc4c2c3b39a2805684006f35":hex:"c99751516620bf89":char*:"":hex:"9307620479f076c39f53965c87d20c2aff11c736c040dba74cd690d275591a5defc57a02f6806de82eb7051548589484364f6c9b91f233a87258ede1ee276cb2c93b4fc76f4d7e60cbd29ba2c54cb479c178fa462c1c2fb6eeb3f1df0edfb894c9222b994c4931dedf7c6e8ddecbde385ddf4481807f52322a47bf5ff7272991":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"ffcc1c88fba1723b3ab57b458d9bffb98b878c967fb43b9db2ae0753d32a3bb1":hex:"d533c2170c5dc203512c81c34eff4077":hex:"":hex:"19b6dec86d93c466307de3a36c0791ed1010b1b9cf8d30347ae46e0f9283c9fda43da8cb491dd17cc4298b1f0b876d6a0f4bcbc9667fe34564bc08f8f7b67045057d19f4bf027bc839e590822fa09a5cef1af18e64a0116aa2a01a3f246c2b5272c18c9aa23efe674ba53d533ae8f0695cb78c1155cdc7a9d7fae2c4567dc07c":hex:"167ec8675e7f9e12":char*:"":hex:"0539287ac546fe5342e4c3c0ec07127dcd22899abfe8cdd6e89d08f1374d76e877bec4844d06e0a9f32d181c8d945ba16a54ce3725fae21d8245c070a4da0c646203d6b91325b665ab98c30295851c59265b4ab567b968b6e98536b7850738d92e9627b4c9c6f5d9ae2520944783d8f788a1aa11f3f5245660d41f388e26e0a1":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"55e94b339c3bafe068ef9cc30787cc6705850114976843777c92b4b331801650":hex:"2e2b31214d61276a54daf2ccb98baa36":hex:"":hex:"147cc7bc4008dadf1956520b5998d961499bdf3d8b168591adbfd99411ad7b34eb4b2a5c1bb0522b810fec12dd7c775784d7ecdc741e6dec8191361e6abf473b219221801951b4d5ffe955ab50eef9cffdfee65ba29ddfa943fb52d722825338c307870a48a35f51db340aa946c71904d03174b1e4a498238b9d631a6982c68d":hex:"5266e9c67c252164":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"13c9572bdef62510d84f2d415cc481cd1e71b9c1132b43e63b21ba4e16de9b39":hex:"a8339ba505a14786ad05edfe8cebb8d0":hex:"":hex:"7c78e634dec811173ff3c4a9a48ae3ae794fbd2aefd4b31701777ff6fcb670744c592a1d298d319717870dca364b2a3562a4ffa422bf7173c4f7ea9b0edf675e948f8370ffd0fd0d5703a9d33e8f9f375b8b641a1b1eecd1692ad1d461a68d97f91f9087f213aff23db1246ee16f403969c238f99eed894658277da23ced11ee":hex:"df3cab08":char*:"":hex:"91f9780daefd2c1010c458054ac6e35baa885cdd2c95e28e13f84451064e31e0739f27bf259cb376ab951e1c7048e1252f0849ccb5453fc97b319666ebbfbc7ef3055212a61582d1b69158f3b1629950a41bc756bded20498492ebc49a1535d1bd915e59c49b87ffebea2f4ad4516ecdd63fa5afda9cce9dc730d6ab2757384a":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"30a14ca53913acbb215b4e4159083106db3fff83cbedd1e5425f65af1e94f5dd":hex:"4f23f04904de76d6decd4bd380ff56b1":hex:"":hex:"8c5f73ee1544553b712ad7a14f31379c8d54a4e432fb6c5112436988d83c4e94954b0249b470538fb977b756fbee70b811d4dc047a869e207bb0b495f1e271d0034e912000e97594033e0dedde0591b297f8a84bafcc93a46268a5bba117b558f1c73513e971c80a7083e1718fc12d0cc0d996a8e09603d564f0b8e81eea28bc":hex:"18e92b96":char*:"":hex:"bb4b3f8061edd6fa418dd71fe22eb0528547050b3bfbaa1c74e82148470d557499ce856de3e988384c0a73671bf370e560d8fda96dabe4728b5f72a6f9efd5023b07a96a631cafdf2c878b2567104c466f82b89f429915cf3331845febcff008558f836b4c12d53e94d363eae43a50fc6cb36f4ca183be92ca5f299704e2c8cf":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"e69f419140289ac25fb0e2ef9cc4f7e06777ac20f7d631918d1af0c8883b7d6a":hex:"531248afdaaf1b86cf34d2394900afd9":hex:"":hex:"ff8dfa4e70490ea9c84cb894dc5d7e1b935ebcdea80a39c4161d4db42cbb269cc86abd381af15ec9a4a42ed18c1eed540decec19722df46f22aa06883297cb393fb23e4bb31a817e88357aa923c7ecbcf24c28a09f622dd21fa70c0a02193024fdcefeaa96cc1b50f81a65dfa9e1bb5126f0c9766a861eed096ec15fb07b0f81":hex:"c6885cdd":char*:"":hex:"f75299e0ead3834fc7ebd4b2051541b598ad57cc908fdcd4324cf4ccf7dcf7b3f0737ad6c026399a8b1b6d3d50011b3c48ea2c89833b4b44c437677f230b75d36848781d4af14546894eecd873a2b1c3d2fcdd676b10bd55112038c0fdaa7b5598fe4db273a1b6744cba47189b7e2a973651bfc2aaa9e9abea4494047b957a80":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"404a5d1ac9e32f9caabffbfa485ce9c27edc9e5cde0f2aab4f32ce3121449b88":hex:"b6e6c078e6869df156faa9ac32f057c3":hex:"6ebc75fc9304f2b139abc7d3f68b253228009c503a08b7be77852da9e1afbe72c9ab374740b0dc391fa4d7e17de6a0aa08c69e6f5c5f05411e71e70c69dfbcf693df84c30f7a8e6c7949ea1e734297c0ea3df9b7e905faa6bbdcaf1ff2625a39363308331d74892cf531cb3f6d7db31bbe9a039fca87100367747024f68c5b77":hex:"b63ec4d28854b7fe2d4d13973f5bcb16f78494ce25cc2820de9d0dc1d8d91db1f19bc9e01cee8418c9e88a69b2f30cdbb0dbdbb50be71e1e666c111c126f2b7197c02f69a1b2ec5e1bf4062b2d0b22fb0fa1585b4e6286b29f6ac98d1b1319dd99851fa6921607077d2947140fdeeea145b56ea7b6af276c9f65393bc43ede33":hex:"94c1b9b70f9c48e7efd40ecab320c2d3":char*:"":hex:"56a0ac94f3ec7be2608154f779c434ee96db5ed4f5a6e1acfb32361ce04e16e1337be5978df06d7c4f6012385fb9d45bb397dc00f165883714b4a5b2f72f69c018ffa6d4420ad1b772e94575f035ad203be3d34b5b789a99389f295b43f004de3daaef7fa918712d3a23ca44329595e08da190e3678bc6ad9b500b9f885abe23":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"b56f0c980acf7875cf7f27d53ad4a276adc126d0b93a5774ac4277eecad4309e":hex:"b004c049decfb43d6f3ec13c56f839ef":hex:"b2045b97fbb52a5fc6ff03d74e59dd696f3f442c0b555add8e6d111f835df420f45e970c4b32a84f0c45ba3710b5cd574001862b073efa5c9c4bd50127b2ce72d2c736c5e2723956da5a0acb82041a609386d07b50551c1d1fa4678886bac54b0bd080cc5ef607dca2a0d6a1e71f0e3833678bf8560bc059dae370ec94d43af6":hex:"2c94299e36b7c4a825ecbc5a7809061e0a6761764a5a655ffdb0c20e5c3fcb10f4e93c68aa0a38c2acc5d06f2b7c4ff4fcf814b551bfefa248dbe06a09a0f153213538a31fa7cf7d646b5b53908d8978f514c9c4d6d66f2b3738024b5f9c3fd86b6da0c818203183f4205f186ea44a54edb911b1a17c424c95852c8d271b2e93":hex:"fce7234f7f76b5d502fd2b96fc9b1ce7":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"1c5027c36e6caa1b3e5e45fead32b5e3126ac41f106c491b0b3a7c16502f4fe6":hex:"3ee660f03858669e557e3effdd7df6bd":hex:"93e803c79de6ad652def62cf3cd34f9addc9dd1774967a0f69e1d28361eb2cacc177c63c07657389ce23bbe65d73e0460946d31be495424655c7724eac044cafafe1540fcbd4218921367054e43e3d21e0fa6a0da9f8b20c5cdbd019c944a2d2ee6aa6760ee1131e58fec9da30790f5a873e792098a82ddf18c3813611d9242a":hex:"58f0ceaa31c0025d2e6bb58720cce4b64f5f6c657c847ae42936eb1e343fea397c8a8cf2f5ef02ffaec25f431900dcb0910cf32cea9eca3b78aed1c451c7af51066489f87b2a5f8cf28d6fdb6ce49d898b6167b590a3907be7618be11fb0922a3cfd18e73efef19e5cdc250fa33f61e3940c6482ae35f339e8c0a85a17379a4e":hex:"ac33f5ffca9df4efc09271ff7a4f58e2":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"34c3019810d72b5e584f0758f2f5888a42729a33610aafa9824badade4136bbd":hex:"f315ea36c17fc57dab3a2737d687cd4f":hex:"f33c5a3a9e546ad5b35e4febf2ae557ca767b55d93bb3c1cf62d862d112dbd26f8fe2a3f54d347c1bc30029e55118bab2662b99b984b8b8e2d76831f94e48587de2709e32f16c26695f07e654b703eba6428f30070e23ed40b61d04dd1430e33c629117d945d9c0e4d36c79a8b8ab555d85083a898e7e7fbeb64a45cc3511d99":hex:"22deef66cbb7db240c399b6c83407f090d6999ba25e560b2087fed0467904bb5c40cbaa05b8bf0ff5a77c53fa229478d8e0736414daf9c420417c391c9a523fd85954533f1304d81359bdcc2c4ac90d9f5f8a67a517d7f05ba0409b718159baf11cd9154e815d5745179beb59954a45a8676a375d5af7fae4d0da05c4ea91a13":hex:"0bae9403888efb4d8ec97df604cd5d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"29397d98fc5a7f04b5c8b6aa3a1dd975b6e4678457ae7f0691eee40b5397503a":hex:"885543a45fd1163e34ef9276145b0f8c":hex:"d88beaa0664bcef178cbdbfab17ff526b5c0f8ad9543c6a312d93c336707fbf87c0448b07a550580953279f552f368225cc6971f1eecc718d6aad1729c8d8873081357752bd09d77075fa680cb2dc4139171e4a0aaa50b28c262c14fd10b8d799ca1c6641bb7dfdfdf3dea69aa2b9e4e4726dc18b0784afa4228e5ccb1eb2422":hex:"0bbf1079cb5569c32257bc7e52371db46f3961b457402b816588243b4523543430d5ca56b52de6632724c51e6c3af310b28822c749a12bdd58dee58bbc3266631562a998ec3acdc8a2567a9f07f7f9759c3f50b1d1dcdd529256b80c0d227fc1fe8b58c62d1c643f1ac2996809fd061afcf4a9af184c14db9e63ec885c49de61":hex:"7b334d7af54b916821f6136e977a1f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"7555dfcf354da07fd70f951d94ec1d86a635edfdb7929460207b2a39cc0cf4a3":hex:"e1b30b6a47e8c21228e41a21b1a004f0":hex:"bf986d3842378440f8924bb7f117d1a86888a666915a93ba65d486d14c580501e736d3418cebee572439318b21b6e4e504a7b075b8c2300c014e87e04fa842b6a2a3ebd9e6134b9ddd78e0a696223b1dc775f3288a6a9569c64b4d8fc5e04f2047c70115f692d2c2cefe7488de42ff862d7c0f542e58d69f0f8c9bf67ef48aea":hex:"a1351cfffd1b0cbf80c3318cc432d3238cb647e996b7b53c527783594683f535950cd08788687c77226b2d3f095955884adc2e475ca1e1eab04e37d5e901ae8934a9d3a0cb37b80612ca25d989856dfa7607b03039b64d7dcd468204f03e0f2c55cb41c5367c56ca6c561425992b40e2d4f380b3d8419f681e88ebe2d4bdad36":hex:"d8ef5438b7cf5dc11209a635ce1095":char*:"":hex:"95e8db7c8ecab8a60ceb49726153a7c5553cf571bc40515944d833485e19bf33cb954e2555943778040165a6cfffecef79eb7d82fef5a2f136f004bb5e7c35ae827fac3da292a185b5b8fc262012c05caeda5453ede3303cfeb0c890db1facadaa2895bdbb33265ada0bb46030607b6cf94f86961178e2e2deeb53c63900f1ec":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"bbeafe86c72ab0354b733b69b09e4d3462feb1658fe404004d81503f3a6e132f":hex:"ee1caba93cb549054ca29715a536393e":hex:"e44b0e0d275ae7c38a7dc2f768e899c1c11a4c4cb5b5bd25cd2132e3ecbaa5a63654312603e1c5b393c0ce6253c55986ee45bb1daac78a26749d88928f9b9908690fc148a656b78e3595319432763efbcf6957c9b2150ccabfd4833d0dcee01758c5efb47321a948b379a2ec0abcd6b6cbf41a8883f0f5d5bf7b240cb35f0777":hex:"a033c2051e425d01d97d563572e42c5113860e5dedcd24c76e3e357559ba3250f1fc5d4a931a9d0900ac025400f0158621f0b1215b2907467bfc874bcabbb28e28de81fe1ee5b79985261c512afec2327c8c5957df90c9eb77950de4a4860b57a9e6e145ea15eb52da63f217f94a5c8e5fcb5d361b86e0e67637a450cdbcb06f":hex:"a4809e072f93deb7b77c52427095":char*:"":hex:"e62adf9bbd92dd03cc5250251691f724c6ece1cb89d8c4daf31cc732a5420f6bedab71aab0238ba23bd7165ed1f692561ef457fd1d47413949405b6fc8e17922b17026d89d5830b383546ea516a56f3a1c45ec1251583ae880fa8985bd3dcc1d6a57b746971937bf370e76482238cc08c2c3b13258151e0a6475cc017f8a3d0e":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"6ad06c88dd4f3becf35eed95bb859be2406a1803a66e4332a74c5f75c09b9a01":hex:"07d8b4a6e77aef9018828b61e0fdf2a4":hex:"cca1fd0278045dda80b847f0975b6cbf31e1910d2c99b4eb78c360d89133a1c52e66c5c3801824afc1f079d2b2b1c827199e83f680e59b9a7de9b15fa7b6848b5bf4e16a12ac1af4cf2b4d7bb45673c5e1241e9996440860a9204fc27cae46a991607bc5e7120d6c115ddcbdd02c022b262602139081e61eee4aba7193f13992":hex:"2219c11672884b93d0290b6a7140feafe416461f1cdaf0b3aa64693d7db2eb10feae46aac7af549fa1b0abc78c11f8df7ee803ef70310fc3e67769f8b4bc64f81143a6ebf8bee9d386a8ede5d2cc0ed17985a3b7bb95191ef55e684690ccdc5ca504bc6eb28442b353861a034a43532c025f666e80be967a6b05b9dd3a91ff58":hex:"e3ede170386e76321a575c095966":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"87bbf7c15689e8c99a5a32a8ba0dfebcfe1989159807428cdd1f382c3ea95178":hex:"2f19aa1f3a82a7398706953f01739da7":hex:"590dbd230854aa2b5ac19fc3dc9453e5bb9637e47d97b92486a599bdafdfb27c3852e3d06a91429bb820eb12a5318ed8861ffe87d659c462ef167be22604facfa3afb601b2167989b9e3b2e5b59e7d07fda27ffccd450869d528410b0aff468f70cc10ef6723a74af6eebc1572c123a9b5a9aab748a31fa764716d3293ff5de7":hex:"b77d3bf3b30b3e6e5c86cbfb7e5455f6480f423cc76834b4663d28d9f1eb5c40212634e3347668427f7848352ab789886f96682a568260bdaeb7de0aae2af36f5ae04f06c332b158d923706c1c6255c673feeadb6d30bfc901e60b92acd9ddd83ef98686c4d492f4a60e97af2541d470a6a6b21903441020ea7619cf28a06986":hex:"5c43fc4dc959fabeebb188dbf3a5":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"24095a66b6eb0320ca75e2ab78e8496a45f4b000fc43436904c3e386fb852ed2":hex:"0955c1f0e271edca279e016074886f60":hex:"f5160c75c449e6bb971e73b7d04ab9b9a85879f6eb2d67354af94a4f0ca339c0a03a5b9ede87a4ff6823b698113a38ae5327e6878c3ccc0e36d74fe07aa51c027c3b334812862bc660178f5d0f3e764c0b828a5e3f2e7d7a1185b7e79828304a7ad3ddcd724305484177e66f4f81e66afdc5bbee0ec174bff5eb3719482bd2d8":hex:"4690edc843e23d9d9b9a4dab8fa8193f8bf03897d3d29759e9dc9e0f8a970c0f5d4399b9f60461fe5cf439f9b0d54bbc075695e4d76b76298cc2b75bb3e0b516ee9ada93f77c4c002ba9fd163a1e4b377befb76c1e5ab8b3901f214c0a4c48bd2aa2f33560d46e2721a060d4671dc97633ff9bcd703bb0fbed9a4a2c259b53f3":hex:"75a31347598f09fceeea6736fe":char*:"":hex:"0dd2dca260325967267667ff3ccdc6d6b35648821a42090abba46282869bac4bdc20a8bee024bea18a07396c38dbb45d9481fedcc423a3928cfa78a2f0ae8eedb062add810bdbee77ddc26c29e4f9fda1ab336d04ef42947b05fbdb9bc4df79e37af951d19d6bf5e5cb34eef898f23642a9c4a9111ed0b7a08abeeefbbd45c23":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"086b77b5731f971f0bf5b8227361b216746daf8b08c583ad38f114a64aa7877b":hex:"164058e5e425f9da40d22c9098a16204":hex:"6633eae08a1df85f2d36e162f2d7ddd92b0c56b7477f3c6cdb9919d0e4b1e54ea7635c202dcf52d1c688afbbb15552adda32b4cd30aa462b367f02ded02e0d64eeee2a6b95462b191784143c25607fd08a23a2fbc75cf6bee294daf2042587fdd8fe3d22c3a242c624cf0a51a7c14db4f0f766ec437de4c83b64f23706a24437":hex:"629317212ff8bd8a7676e4c00b81a9577de6397c832f99ac974fa2bbbccb6e3b8aa776db6922eed0b014bf3923799da7d9d0854c8817470e1e2f7fc7a572f9d0316ee60cde7ef025d59b897d29a6fee721aeb2f7bb44f9afb471e8a7b0b43a39b5497a3b4d6beb4b511f0cefa12ce5e6d843609d3e06999acfbee50a22ca1eee":hex:"2eb6eb6d516ed4cf1778b4e378":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"0f9e806b0d937268561c0eafbbdd14ec715b7e9cef4118d6eb28abbb91266745":hex:"8657996634e74d4689f292645f103a2e":hex:"2ca253355e893e58cb1a900fbb62d61595de5c4186dc8a9129da3657a92b4a631bbdc3d5f86395385a9aa8557b67f886e3bb807620e558c93aea8e65826eadeb21544418ee40f5420c2d2b8270491be6fc2dcbfd12847fa350910dd615e9a1881bc2ced3b0ac3bde445b735e43c0c84f9d120ca5edd655779fc13c6f88b484f7":hex:"2ae4baef22ace26f464a9b0c75802303f2d7c0f9a1ed1d0180135189765bdd347fea0cc2b73ee7fbbf95ea1fda22597b8aad826f63e744069a9c349488b2cc1cf9372f423cc650302082125724730ae5a4d878e07385ddc99034c6b6b46748f02c80b179fe6406b1d33581950cb9bcd1d1ea1ec7b5becfd6c1f5b279412c433a":hex:"83155ebb1a42112dd1c474f37b":char*:"":hex:"87d69fc3cbc757b2b57b180c6ba34db4e20dde19976bfb3d274d32e7cea13f0c7d9e840d59ce857718c985763b7639e448516ddbbda559457cd8cb364fa99addd5ba44ef45c11060d9be82b4ebe1f0711ac95433074649b6c08eeab539fdfc99c77498b420427e4d70e316111845793de1f67fb0d04e3389a8862f46f4582dc8":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"c24c17911f6db4b3e37c46bcc6fa35efc1a55f7754f0bb99f2eea93398116447":hex:"5098cc52a69ee044197e2c000c2d4ab8":hex:"9ad4dee311d854925fc7f10eca4f5dd4e6990cb2d4325da2ef25a9a23690f5c5590be285d33aaeba76506c59edec64b8c3ff8e62716d1c385fbce2a42bc7bd5d8e8584de1944543ab6f340c20911f8b7b3be1a1db18a4bb94119333339de95815cae09365b016edc184e11f3c5b851f1fa92b1b63cfa3872a127109c1294b677":hex:"0bd92cb106867e25ad427ff6e5f384d2d0f432fc389852187fcc7b0bf9f6d11a102a872b99ed1ad9a05dab0f79fa634745535efed804ff42b0af8dad20ba44709391fb263f245e5a2c52d9ce904179633282f57a1229b0a9c4557a5c0aeda29bbc5a7a871fa8b62d58100c3722c21e51e3b3e913185235526e7a5a91c559717d":hex:"f7930e3fab74a91cb6543e72":char*:"":hex:"6124ede608d416baa5e653a898ca76e9f47f08403c1984feec112e670ded2226e0073f8881ab2161cfda541dccae19691285f7391a729f07aba18f340bb452c1da39cbe83cf476cfc105b64187e0d2227dd283dcba8b6a350f9956b18861fa131d3f00c034443e8f60e0fdfcfaabbed93381ae374a8bf66523d33646183e1379":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"d267a8379260036ff3d1ec07a7b086ff75706bad12d37d9656f04776f3d8b85c":hex:"674dc34e8c74c51fa42aacd625a1bd5b":hex:"6a9a8af732ae96d0b5a9730ad792e296150d59770a20a3fdbbc2a3a035a88ac445d64f37d684e22003c214b771c1995719da72f3ed24a96618284dd414f0cac364640b23c680dc80492a435c8ec10add53b0d9e3374f1cf5bfc663e3528fa2f6209846421ea6f481b7ecf57714f7bc2527edc4e0466b13e750dd4d4c0cc0cdfc":hex:"80c68a330ef50e3e516681f1e535868b03466e7edbb86cb385d01db487da3dd3edad940fdc98d918b7db9b59f8d61369eee2928c88557306c4a13e366af0708d94cb90a15f1c3bc45544bdb05ff964da5e06c5ae965f20adb504620aed7bce2e82f4e408d00219c15ef85fae1ff13fea53deb78afa5f2a50edbd622446e4a894":hex:"bea660e963b08fc657741bc8":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"c86cb637753010f639fa3aa3bff7c28b74f012ad6090f2a31b0801d086f183ad":hex:"87ff6e0bb313502fedf3d2696bff99b5":hex:"2816f1132724f42e40deabab25e325b282f8c615a79e0c98c00d488ee56237537240234966565e46bfb0c50f2b10366d1589620e6e78bd90ade24d38a272f3fff53c09466aa2d3ef793d7f814a064b713821850a6e6a058f5139a1088347a9fa0f54e38abd51ddfc7ef040bf41d188f3f86c973551ced019812c1fc668649621":hex:"6b7858557e0fd0f957842fb30e8d54dedbc127eb4bbf9de319f731fa28a606df2c046a0bce8ecda4e75d3596e4e988efd6bc279aa005bc52fad92ba07f5b1dfda4cc417029f9778c88d6fe5341a0fd48893dcb7c68d0df310a060f2a5235aee422d380f7209bc0909b2aa7e876044056f0b915dab0bc13cbea5a3b86d40ca802":hex:"7859f047f32b51833333accf":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"2c31ca0cac3efe467168198f06beacf39565a6f57f82e1048a5c06a231315882":hex:"95cae6e85f33f3043182460589be3639":hex:"67523751a9b1b643d00de4511b55e4268cb2d18e79e01a55fc7b677d529bd6400940fb25ea6ae135c1a816e61b69e90b966981aeda685934b107066e1467db78973492ad791e20aef430db3a047447141def8be6e6a9a15089607c3af9368cdb11b7b5fbf90691505d0c33664766945d387904e7089b915a3c28886ba1763bb5":hex:"65261d6e29b2369b1828a7cef2df9873d6e6057c499301afedd6cb65b5036ddb95f9e353fbf38e54c4f46f88164325b33620ce183beb2e411fbb89a0e0002e542fc161cad32a61ee6f1e1717e0b4dcd0340b116f795bc1009dbbc65bc31c9b549bf03c40bc204cd0d02ec884be907777ebeed8b527ec3af7cbb508193c0745de":hex:"21309d0351cac45e":char*:"":hex:"1d5f2cb921f54aeb552b4304142facd49497837deb1f00d26fbeddbab922fd80b00dba782961f8fce84f1f7973e81eed6ee168b1760c575c891f40a1dae0fa1a08738025d13ef6e0b30be4f054d874f1b8a2427a19ebb071d98365c32316a88a68c2b40daf1ea831a64519ac3679acb4e04986ecc614ec673c498c6fee459e40":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"ca9fa36ca2159dff9723f6cfdb13280446eb6bc3688043c7e2e2504184791596":hex:"d13ca73365e57114fc698ee60ba0ad84":hex:"2aa510b7f1620bfce90080e0e25f5468dbc5314b50914e793b5278369c51ac017eace9fd15127fca5a726ad9e67bdee5af298988d9a57ec4bbc43d4eb849535eb10521ac7cd7ed647479a42876af2ebc9e2108b539febdaa9127c49bda1bda800f6034050b8576e944311dfbca59d64d259571b6d2ed5b2fc07127239b03f4b7":hex:"ac04c4293554cd832aa400c811cb202d815d6178aa1343b4628592b7f3ae45dc5f12ea47be4b43e1865f40b06ab67b3a9fb3644248a9b3efe131a8addb7447978bb51ccf749e75574fea60e8781677200af023b2f8c415f4e6d8c575a9e374916d9ec3a612b16e37beb589444b588e0b770d9f8e818ad83f83aa4ecf386d17a7":hex:"2111d55d96a4d84d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"2f802e838250064c15fdee28d7bd4872850355870847701ad9742b2d6eb4b0c0":hex:"2dd550cfd97f8e1d8d31ba5537ae4710":hex:"72b9630dda40306e785b961934c56e20948f8eac0e981f49787eb3dbd6e4607f7d08d10ca643746bf1efa7e5066993683d527a90f2d45ec9cf73113f1f17bb67958be669acd4e2927f1dacfde902cd3048056d7f6dfdd8630ff054efce4526db7c9321d6d2be2236f4d60e27b89d8ec94f65a06dc0953c8c4533a51b6a29bd2c":hex:"e2ca8c8d172ff90232879f510d1225af91bc323bdf636363c2903fcd1790692c8bcb03a1cccb18814678852c6b3a441552e541b843ee5e4f86a152fa73d05aea659fe08aa6428bb257eaa2a7b579fdc4022c1dec359a854253c1aefc983c5ede8c97517ea69fc4606e25f13ffb0f5f49160691454fbb74e704326738353525f7":hex:"bd6c8823c9005c85":char*:"":hex:"f6dd0b5f3d1a393a1837112962dba175a13c2d1e525ef95734caf34949d8b2d63b4fe5603226b5f632f2d7f927361ba639dc0e3c63414f45462342695916d5792133b4a24c7c4cbe2b97c712bf27ab62d3d68b3875d58ffe4b7c30a8171bff1a9e2f3995768faacda2ea9213ff35798b9e4513f6a87bd3f5a9d93e847e768359":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #0 [#2] +depends_on:1:2 +9:exp:6:hex:"84dd53ce0146cb71c32776033bb243098d78a22ac17f52a62a122f5653fb4e33":hex:"f0c90a1bca52f30fab3670df0d3beab0":hex:"a3ea8032f36a5ca3d7a1088fd08ac50ae6bdc06ad3a534b773ac3e3d4a3d524499e56274a0062c58c3b0685cc850f4725e5c221af8f51c6df2bbd5fbcff4a93ba4c1054f7f9c67fd9285511a08d328d76a642f067227d378f95a1e67587b90251f9103ed3cacdb6bf69e0794e366d8b92d8de37b4e028de0778841f356ac044d":hex:"68222bffa782dcfe4f328fc20eb520e75a9a5fedbe13ec7fcf0e82fba08bb87a8a8e02902638e32fe0e2294344b380797f8028426ffcc0531c739c884892394c48ff0779c5f5edf0a36a3fb8aa91213347774ec4bf0fe1049bd53746b13beef3c637169826c367056cb1aa0a3868e23f886a9c7b8015c26af9e40794662f6b21":hex:"b1ece9fb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #1 [#2] +depends_on:1:2 +9:exp:6:hex:"9bb36fe25e966a075ae2c3bb43b5877679ebc379d5123c8eda3fa0e30b95cae0":hex:"59869df4ef5754b406478a2fb608ee99":hex:"ecd125682e8a8e26757c888b0c8b95dec5e7ed7ac991768f93e8af5bcf6f21ed4d4d38699ee7984ed13635fff72f938150157c9a27fcda121ffced7b492d2b18dad299cb6495ed5f68441aefc8219d2cf717d15d5cd2dbce4606fcf90fe45f3601127cf6acee210bd7df97309f773974a35bef1d33df984101c2fc9d4b55259e":hex:"fb3a4be643c10343251c6f0745aaa54349463f622ca04a792e9b4780866844b30aeef3269fc60cac0ea031c5f3780b535e15154f7c76eb4a371b8ae368550f3fa2ce693c34511ec96b839cac567f1b0de0e7e3116d729b45d1b16e453703a43db73f5d0c3e430f16b142420b5f0d26d72ac3dba543d7d813603b0bfdca3dd63e":hex:"cb3f5338":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #2 [#2] +depends_on:1:2 +9:exp:6:hex:"ca264e7caecad56ee31c8bf8dde9592f753a6299e76c60ac1e93cff3b3de8ce9":hex:"4763a4e37b806a5f4510f69fd8c63571":hex:"07daeba37a66ebe15f3d6451d1176f3a7107a302da6966680c425377e621fd71610d1fc9c95122da5bf85f83b24c4b783b1dcd6b508d41e22c09b5c43693d072869601fc7e3f5a51dbd3bc6508e8d095b9130fb6a7f2a043f3a432e7ce68b7de06c1379e6bab5a1a48823b76762051b4e707ddc3201eb36456e3862425cb011a":hex:"8d03cf6fac31182ad3e6f32e4c823e3b421aef786d5651afafbf70ef14c00524ab814bc421b1d4181b4d3d82d6ae4e8032e43a6c4e0691184425b37320798f865c88b9b306466311d79e3e42076837474c37c9f6336ed777f05f70b0c7d72bd4348a4cd754d0f0c3e4587f9a18313ea2d2bace502a24ea417d3041b709a0471f":hex:"3105dddb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,128) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"d785dafea3e966731ef6fc6202262584":hex:"d91a46205ee94058b3b8403997592dd2":hex:"":hex:"":hex:"3b92a17c1b9c3578a68cffea5a5b6245":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,128) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"aec963833b9098de1ababc853ab74d96":hex:"4e0ffd93beffd732c6f7d6ad606a2d24":hex:"":hex:"":hex:"e9fcedc176dfe587dc61b2011010cdf1":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,128) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"c4fb9e3393681da9cec5ec96f87c5c31":hex:"845e910bc055d895879f62101d08b4c7":hex:"":hex:"":hex:"99fb783c497416e4b6e2a5de7c782057":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,120) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"2a930f2e09beceacd9919cb76f2ac8d3":hex:"340d9af44f6370eff534c653033a785a":hex:"":hex:"":hex:"0c1e5e9c8fe5edfd11f114f3503d63":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,120) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"fe71177e02073b1c407b5724e2263a5e":hex:"83c23d20d2a9d4b8f92da96587c96b18":hex:"":hex:"":hex:"43b2ca795420f35f6cb39f5dfa47a2":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,120) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"b02392fd7f228888c281e59d1eaa15fb":hex:"2726344ba8912c737e195424e1e6679e":hex:"":hex:"":hex:"a10b601ca8053536a2af2cc255d2b6":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,112) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"21895cbafc16b7b8bf5867e88e0853d4":hex:"f987ce1005d9bbd31d2452fb80957753":hex:"":hex:"":hex:"952a7e265830d58a6778d68b9450":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,112) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"9bb9742bf47f68caf64963d7c10a97b0":hex:"34a85669de64e1cd44731905fddbcbc5":hex:"":hex:"":hex:"e9b6be928aa77b2de28b480ae74c":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,112) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"4e9708e4b37e2e1b5feaf4f5ab54e2a6":hex:"1c53a9fdd23919b036d99560619a9939":hex:"":hex:"":hex:"6611b50d6fbca83047f9f5fe1768":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,104) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"82fede79db25f00be96eb050a22cea87":hex:"e9c50b517ab26c89b83c1f0cac50162c":hex:"":hex:"":hex:"d0c0ce9db60b77b0e31d05e048":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,104) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"1d98566fca5201abb12914311a8bd532":hex:"590aef4b46a9023405d075edab7e6849":hex:"":hex:"":hex:"a1cfd1a27b341f49eda2ca8305":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,104) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"3038771820c2e1319f02a74b8a7a0c08":hex:"e556d9f07fb69d7e9a644261c80fac92":hex:"":hex:"":hex:"4d2f005d662b6a8787f231c5e1":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,96) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"0fb7eef50de598d7d8b508d019a30d5a":hex:"a2a2617040116c2c7e4236d2d8278213":hex:"":hex:"":hex:"68413c58df7bb5f067197ca0":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,96) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"8cc58b609204215c8ab4908286e56e5c":hex:"fb83ea637279332677b5f68081173e99":hex:"":hex:"":hex:"a2a9160d82739a55d8cd419f":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,96) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"81a5fd184742a478432963f6477e8f92":hex:"da297cbb53b11d7c379e0566299b4d5a":hex:"":hex:"":hex:"200bee49466fdda2f21f0062":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,64) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"f604ac66d626959e595cbb7b4128e096":hex:"269d2a49d533c6bb38008711f38e0b39":hex:"":hex:"":hex:"468200fa4683e8be":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,64) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"2e308ba7903e925f768c1d00ff3eb623":hex:"335acd2aa48a47a37cfe21e491f1b141":hex:"":hex:"":hex:"4872bfd5e2ff55f6":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,64) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"1304e2a5a3520454a5109df61a67da7a":hex:"dbe8b452acf4fa1444c3668e9ee72d26":hex:"":hex:"":hex:"83a0d3440200ca95":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,32) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"ecf1ec2c9a8f2e9cc799f9b9fddb3232":hex:"ddf0b695aef5df2b594fcaae72b7e41c":hex:"":hex:"":hex:"2819aedf":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,32) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"9ab5c8ca905b5fe50461f4a68941144b":hex:"96dd3927a96e16123f2e9d6b367d303f":hex:"":hex:"":hex:"6e0c53ef":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,32) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"b5fc7af605721a9cfe61c1ee6a4b3e22":hex:"6b757d4055823d1035d01077666037d6":hex:"":hex:"":hex:"e8c09ddd":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,128) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"03c0b4a6e508a8490db0d086a82c9db7":hex:"ac52f6c1a05030321fa39f87e89fdb5e":hex:"33316ca79d10a79f4fd038593e8eef09625089dc4e0ffe4bc1f2871554fa6666ab3e7fe7885edef694b410456f3ec0e513bb25f1b48d95e4820c5972c1aabb25c84c08566002dadc36df334c1ce86847964a122016d389ac873bca8c335a7a99bcef91e1b985ae5d488a2d7f78b4bf14e0c2dc715e814f4e24276057cf668172":hex:"":hex:"756292d8b4653887edef51679b161812":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,128) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"b228d3d15219ea9ad5651fce02c8374d":hex:"5c7eafaead029c3fe3cf3835fe758d0e":hex:"8c35dd805c08686b9b4d460f81b4dcb8c46c6d57842dc3e72ba90952e2bebf17fe7184445b02f801800a944486d662a127d01d3b7f42679052cdc73ce533129af8d13957415c5495142157d6ce8a68aa977e56f562fed98e468e42522767656ce50369471060381bb752dd5e77c79677a4cadffa39e518e30a789e793b07ea21":hex:"":hex:"a4dde1ab93c84937c3bbc3ad5237818d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,128) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"776afcbabedd5577fe660a60f920b536":hex:"5bbb7f1b14084e520408dd87b97705e9":hex:"44631fc9d4a07416b0dfb4e2b42071e3e2be45502c9ddf72b3e61810eeda31a7d685ebb2ee43a2c06af374569f439ee1668c550067de2dece9ec46ee72b260858d6033f814e85275c5ae669b60803a8c516de32804fa34d3a213ccfaf6689046e25eeb30b9e1608e689f4d31cc664b83a468a51165f5625f12f098a6bf7ddab2":hex:"":hex:"a5347d41d93b587240651bcd5230264f":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,120) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"20abeafa25fc4ea7d0592cb3e9b4d5fe":hex:"3aba79a58c5aa664856b41d552c7a8d3":hex:"98cfecaae9eb9a7c3b17e6bc5f80d8a4bf7a9f4fa5e01b74cae15ee6af14633205aafe3b28fb7b7918e12322ea27352056a603746d728a61361134a561619400ff2bf679045bac2e0fbc2c1d41f8faba4b27c7827bceda4e9bf505df4185515dd3a5e26f7639c8ad5a38bc5906a44be062f02cc53862678ae36fa3de3c02c982":hex:"":hex:"2a67ad1471a520fe09a304f0975f31":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,120) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"2bc73fba942ff105823b5dccf6befb1c":hex:"902c3e3b69b1ef8395d7281ff74cce38":hex:"4adec0b4ac00325a860044d9f9519daa4f7c163229a75819b0fd7d8e23319f030e61dfa8eadabff42ea27bc36bdb6cad249e801ca631b656836448b7172c11126bad2781e6a1aa4f62c4eda53409408b008c057e0b81215cc13ddabbb8f1915f4bbab854f8b00763a530ad5055d265778cd3080d0bd35b76a329bdd5b5a2d268":hex:"":hex:"ebdd7c8e87fe733138a433543542d1":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,120) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"356a4c245868243d61756cabe86da887":hex:"b442f2ec6d45a17144c258fd59fe5b3b":hex:"12cccc3c60474b0a1579c5006c2134850724fa6c9da3a7022d4f65fd238b052bdf34ea34aa7dbadad64996065acee588ab6bd29726d07ed24ffae2d33aadf3e66ebb87f57e689fd85128be1c9e3d8362fad1f8096ee391f75b576fb213d394cef6f091fc5488d9aa152be69475b9167abd6dd4fd93bbbc7b8ca316c952eb19c6":hex:"":hex:"ed26080dcb670590613d97d7c47cf4":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,112) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"dfa7e93aff73600fc552324253066e2c":hex:"c20001e93f1cd05253c277a9445d61e4":hex:"a64d1e20058a1f7e698622a02f7ff8dc11886717ede17bbdc3c4645a66a71d8b04346fb389a251ffb0a7f445a25faf642bb7e4697d2cacf925e78c4be98457996afb25b0516b50f179441d1923312364947f8f1e0f5715b43bd537727bf943d7b4679b0b0b28b94e56e7bbf554d9cf79fcee4387f32bb6f91efdd23620035be6":hex:"":hex:"6ba5e4dace9a54b50b901d9b73ad":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,112) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"2ecea80b48d2ecd194a7699aa7d8ccfc":hex:"8b4db08bafc23b65ae50a2d20661d270":hex:"efc2ca1a3b41b90f8ddf74291d68f072a6e025d0c91c3ce2b133525943c73ebadc71f150be20afeb097442fa51be31a641df65d90ebd81dcbaf32711ed31f5e0271421377ffe14ddafea3ca60a600588d484856a98de73f56a766ae60bae384a4ae01a1a06821cf0c7a6b4ee4c8f413748457b3777283d3310218fb55c107293":hex:"":hex:"246a9d37553088b6411ebb62aa16":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,112) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"d38fee3fd3d6d08224c3c83529a25d08":hex:"a942ccb11cf9468186fabfc18c899801":hex:"1c92a4ce0a1dae27e720d6f9b1e460276538de437f3812ab1177cf0273b05908f296f33ba0f4c790abe2ce958b1d92b930a0d81243e6ad09ef86ee8e3270243095096537cb1054fcfcf537d828b65af9b6cf7c50f5b8470f7908f314d0859107eed772ee1732c78e8a2e35b2493f3e8c1e601b08aeab8d9729e0294dca168c62":hex:"":hex:"803a08700ec86fdeb88f7a388921":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,104) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"1899b0cbae41d705c6eed3226afb5bc0":hex:"82d0910aa53e300a487d880d018d0dea":hex:"6bf5583cc1007d74f3529db63b8d4e085400ccf3725eab8e19cb145f3910c61465a21486740a26f74691866a9f632af9fae81f5f0bffedf0c28a6ce0fd520bb4db04a3cd1a7d29d8801e05e4b9c9374fd89bcb539489c2f7f1f801c253a1cc737408669bcd133b62da357f7399a52179125aa59fae6707d340846886d730a835":hex:"":hex:"c5d58870fee9ce157f5ec1fa8f":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,104) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"8b95323d86d02754f4c2874b42ec6eb0":hex:"4f76084acbdef9999c71dcc794238d7c":hex:"ebc75788377c0b264818a6f97c19cf92c29f1c7cdeb6b5f0a92d238fa4614bc35d0cfe4ec9d045cd628ff6262c460679ac15b0c6366d9289bbd217e5012279e0af0fb2cfcbdf51fe16935968cbb727f725fe5bcd4428905849746c8493600ce8b2cfc1b61b04c8b752b915fed611d6b54ef73ec4e3950d6db1807b1ce7ed1dcc":hex:"":hex:"c4724ff1d2c57295eb733e9cad":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,104) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"30da555559eb11cf7e0eff9d99e9607d":hex:"7799275bf12335f281ec94a870f90a0b":hex:"e735d556e15aec78d9736016c8c99db753ed14d4e4adaaa1dd7eaad702ea5dc337433f8c2b45afdf2f385fdf6c55574425571e079ca759b6235f877ed11618ff212bafd865a22b80b76b3b5cf1acfd24d92fd41607bbb7382f26cd703757088d497b16b32de80e1256c734a9b83356b6fced207177de75458481eaef59a431d7":hex:"":hex:"3c82272130e17c4a0a007a908e":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,96) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"ed2ac74af896c5190c271cfa6af02fd2":hex:"e0226e2d8da47badad1fb78b9a797f27":hex:"8f11353ae476ff923013e6e736ffc9d23101a1c471ccc07ad372a8430d6559c376075efce2e318cdf4c9443dbf132e7e6da5524045028c97e904633b44c4d189a4b64237ac7692dd03c0e751ce9f04d0fdbd8a96074cd7dfa2fd441a52328b4ac3974b4902db45663f7b6f24947dba618f8b9769e927faf84c9f49ad8239b9fb":hex:"":hex:"db8af7a0d548fc54d9457c73":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,96) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"0225b73fe5fbbe52f838d873173959d8":hex:"02a048764f48d9aed1147ee922395bbf":hex:"9b46a57b06e156c877e94c089814493ead879397dab3dfcab2db349ef387efcd0cc339a7e79131a2c580188fc7429044a465b8329d74cd8f47272a4ed32582b1c5c7e3d32341ae902ea4923dc33df8062bc24bb51a11d2ecc82f464f615041387f9c82bd2135d4e240fe56fa8a68e6a9a417e6702430a434b14d70cf02db3181":hex:"":hex:"e2c2ce4022c49a95c9ac9026":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,96) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"89ca3771a0ef3287568b4ac036120198":hex:"7e83d2ffa8af8c554cfd71a0db56ef5b":hex:"1bd7a9d6262882bd12c62bd50942965b3cdcadf5e0fab2dc4d0daf0ee4b16e92c6e2464c0caa423cdce88e4d843490609716ec5e44c41672c656ac0e444d3622557ea8420c94deae3ad190ddaf859f6f8c23e4e2e32a46d28df23de4f99bd6c34f69e06eddfdfa5f263dbe8baf9d4296b2c543e4c4847271e7590374edf46234":hex:"":hex:"06b2bf62591dc7ec1b814705":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,64) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"a41a297bd96e224942998fe2192934a1":hex:"6827f2c5a0b7ecd6bbc696abb0adf556":hex:"f32041abd8543415cbac423d945dda5378a16a7e94d9ab5dbd2d32eb1c5048cc7c8e4df3ca84ec725f18c34cfdeaa7595392aabfd66d9e2f37c1165369cd806cd9d2110def6f5fad4345e5a6e2326c9300199438fcc078cd9fcf4d76872cac77fc9a0a8ac7e4d63995078a9addecf798460ff5910861b76c71bccfb6b629d722":hex:"":hex:"49a4917eef61f78e":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,64) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"a9372c058f42e0a1d019bdb528313919":hex:"8d03f423230c8f00a5b6b712d426a2af":hex:"cfef4e70fcc1821eeccf7c7b5eb3c0c3b5f72dc762426e0bd26242f8aa68c5b716ab97eded5e5720caccc1965da603d556d8214d5828f2cf276d95bf552d47313876796221f62ccb818a6d801088755d58cfb751bfed0d5a19718d4e0f94b850e0279b3a69295d1837cba958a6cc56e7594080b9e5b954a199fdc9e54ddc8583":hex:"":hex:"b82cd11cd3575c8d":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,64) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"6302b7338f8fa84195ad9abbacd89b4e":hex:"e1bed5c53547cbc85f3411fbb43bb08b":hex:"bcd329c076e8da2797d50dcdcf271cecf3ce12f3c136ed746edc722f907be6133276ee099038fdc5d73eec812739c7489d4bcc275f95451b44890416e3ffe5a1b6fa3986b84eee3adad774c6feaecb1f785053eeda2cfc18953b8547866d98918dbe0a6abc168ac7d77467a367f11c284924d9d186ef64ef0fd54eacd75156d2":hex:"":hex:"5222d092e9e8bd6c":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,32) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"78b5c28d62e4b2097873a1180bd5a3a5":hex:"c93902c2819ee494f0fc4b259ee65dd8":hex:"e6b1192674a02083a6cf36d4ba93ba40a5331fadf63fd1eb2efa2ee9c0d8818472aaaf2b4705746011753f30f447c8f58dd34d29606daf57eadc172529837058cb78a378b19da8d63c321f550dfa256b5fd9f30e93d8f377443bfcd125f86a079a1765d2010be73d060f24eebae8d05e644688b2149bc39e18bd527bc066f2ba":hex:"":hex:"eae48137":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,32) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"3d84130578070e036c9e3df5b5509473":hex:"3b9b4950523a19c6866fd2b0cde541fd":hex:"a764931e1b21a140c54a8619aacdb4358834987fb6e263cec525f888f9e9764c165aaa7db74f2c42273f912daeae6d72b232a872ac2c652d7cd3af3a5753f58331c11b6c866475697876dbc4c6ca0e52a00ba015ee3c3b7fb444c6e50a4b4b9bbe135fc0632d32a3f79f333d8f487771ed12522e664b9cf90e66da267f47a74d":hex:"":hex:"79987692":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,32) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"08428605ab4742a3e8a55354d4764620":hex:"128f5f4a817e4af04113847a223adeb0":hex:"464b484ed79d93a48e0f804e04df69d7ca10ad04ba7188d69e6549ab50503baaec67e0acba5537d1163c868fd3e350e9d0ae9123046bc76815c201a947aa4a7e4ed239ce889d4ff9c8d043877de06df5fc27cf67442b729b02e9c30287c0821ef9fa15d4cccbc53a95fa9ec3ed432ca960ebbf5a169ccada95a5bf4c7c968830":hex:"":hex:"3eb3e3a2":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,128) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"0dd358bc3f992f26e81e3a2f3aa2d517":hex:"d8c750bb443ee1a169dfe97cfe4d855b":hex:"":hex:"87cc4fd75788c9d5cc83bae5d764dd249d178ab23224049795d4288b5ed9ea3f317068a39a7574b300c8544226e87b08e008fbe241d094545c211d56ac44437d41491a438272738968c8d371aa7787b5f606c8549a9d868d8a71380e9657d3c0337979feb01de5991fc1470dfc59eb02511efbbff3fcb479a862ba3844a25aaa":hex:"a81d13973baa22a751833d7d3f94b3b1":char*:"":hex:"77949b29f085bb3abb71a5386003811233056d3296eb093370f7777dadd306d93d59dcb9754d3857cf2758091ba661f845ef0582f6ae0e134328106f0d5d16b541cd74fdc756dc7b53f4f8a194daeea9369ebb1630c01ccb307b848e9527da20a39898d748fd59206f0b79d0ed946a8958033a45bd9ae673518b32606748eb65":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,128) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"43b5f18227e5c74288dbeff03801acd6":hex:"08ee12246cf7edb81da3d610f3ebd167":hex:"":hex:"f58d630f10cfca61d4644d4f6505bab629e8e8faf1673e64417f9b79e622966a7011cfb3ff74db5cebf09ad3f41643d4437d213204a6c8397e7d59b8a5b1970aed2b6bb5ea1933c72c351f6ba96c0b0b98188f6e373f5db6c5ebece911ec7a1848abd3ae335515c774e0027dab7d1c07d047d3b8825ff94222dbaf6f9ab597ee":hex:"82d83b2f7da218d1d1441a5b37bcb065":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,128) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"9a433c612d7e1bdff881e4d63ba8b141":hex:"8b670cf31f470f79a6c0b79e73863ca1":hex:"":hex:"ce10758332f423228b5e4ae31efda7677586934a1d8f05d9b7a0dc4e2010ec3eaacb71a527a5fff8e787d75ebd24ad163394c891b33477ed9e2a2d853c364cb1c5d0bc317fcaf4010817dbe5f1fd1037c701b291b3a66b164bc818bf5c00a4c210a1671faa574d74c7f3543f6c09aaf117e12e2eb3dae55edb1cc5b4086b617d":hex:"8526fd25daf890e79946a205b698f287":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,120) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"8e9d75c781d63b29f1816859f7a0e0a0":hex:"748a3b486b62a164cedcf1bab9325add":hex:"":hex:"a9f1883f58e4ef78377992101ab86da0dafcefa827904dd94dff6f6704b1e45517165a34c5555a55b04c6992fb6d0840a71bd262fe59815e5c7b80fe803b47d5ba44982a3f72cb42f591d8b62df38c9f56a5868af8f68242e3a15f97be8ef2399dbace1273f509623b6f9e4d27a97436aebf2d044e75f1c62694db77ceac05de":hex:"131e0e4ce46d768674a7bcacdcef9c":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,120) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"fe6b8553002c69396d9976bb48d30779":hex:"595b17d0d76b83780235f5e0c92bd21f":hex:"":hex:"786f4801b16de7a4931ab143b269c7acc68f1ed9b17a95e8929ccec7d53413059fd4267bedbf079d9d69e90314c1345bc9cb9132f1af69323157ddf7533ced42b4b7bd39004f14d326f5b03bc19084d231d93bcab328312d99b426c1e86e8e049d380bb492e2e32ad690af4cf86838d89a0dfdcbc30e8c9e9039e423a234e113":hex:"8879de07815a88877b0623de9be411":char*:"":hex:"b15dc7cd44adcb0783f30f592e5e03ccd47851725af9fe45bfc5b01ae35779b9a8b3f26fec468b188ec3cad40785c608d6bfd867b0ccf07a836ec20d2d9b8451636df153a32b637e7dcdbd606603d9e53f6e4c4cc8396286ce64b0ea638c10e5a567c0bc8e808080b71be51381e051336e60bf1663f6d2d7640a575e0752553b":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,120) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"14898c56009b459172fef9c17993b54f":hex:"0862f8f87289988711a877d3231d44eb":hex:"":hex:"e7ba6ef722273238b975d551f95d3e77e9b75b24c547b86eafb457d409803bdf6e1443839d8604ee497020e1a3dbd687a819b17fdde0fcf240ce2129792792a58bfcd825773001ee959bf9ec8d228e27ce1cd93d7fb86769a3793361b6f82bf7daf284afc1ece657a1ee6346ea9294880755b9b623563ad2657ba2286488a2ef":hex:"36938974301ae733760f83439437c4":char*:"":hex:"3fd56897a62743e0ab4a465bcc9777d5fd21ad2c9a59d7e4e1a60feccdc722b9820ec65cb47e1d1160d12ff2ea93abe11bc101b82514ead7d542007fee7b4e2dd6822849cd3e82d761ff7cf5ce4f40ad9fec54050a632a401451b426812cf03c2b16a8667a88bb3f7497e3308a91de6fd646d6a3562c92c24272411229a90802":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,112) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"fe5253d4b071793b081ebc122cc2a5f8":hex:"49e82d86804e196421ec19ddc8541066":hex:"":hex:"b57a0bd7714ae95e77fa9452e11a7ed4a2bec60f81ad6ddb956d4b1cb5dfc277dcb4034d501801b26733b5e08c710c3cfdccc1b208dc7a92cd7ebe166320582bcaff64cc943c36fbe7008f004e5db70c40de05fa68b0c9d4c16c8f976130f20702b99674cd2f4c93aeaeb3abca4b1114dbc3a4b33e1226ad801aa0e21f7cc49b":hex:"e8b8ae34f842277fe92729e891e3":char*:"":hex:"c4a31c7ec820469f895d57579f987733337ec6547d78d17c44a18fab91f0322cfe05f23f9afaf019cf9531dec2d420f3591d334f40d78643fd957b91ab588a7e392447bd702652017ede7fb0d61d444a3b3cc4136e1d4df13d9532eb71bcf3ff0ae65e847e1c572a2f90632362bc424da2249b36a84be2c2bb216ae7708f745c":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,112) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"b3502d6f0d172246e16503cdf5793296":hex:"6ce994689ff72f9df62f386a187c1a13":hex:"":hex:"09268b8046f1558794e35cdc4945b94227a176dd8cb77f92f883542b1c4be698c379541fd1d557c2a07c7206afdd49506d6a1559123de1783c7a60006df06d87f9119fb105e9b278eb93f81fd316b6fdc38ef702a2b9feaa878a0d1ea999db4c593438f32e0f849f3adabf277a161afb5c1c3460039156eec78944d5666c2563":hex:"21cdf44ff4993eb54b55d58e5a8f":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,112) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"5fb33dd73db309b9dfd3aee605cd94bf":hex:"3f6486f9e9e645292e0e425bac232268":hex:"":hex:"f4e011f8c99038c46854b427475f23488077ebf051c4b705a1adfdd493a0a10af7a7e9453965b94f52f61ae62ce9243a82a2dbf9c5a285db3fe34ed34ed08b5926f34c48171195f7062d02a6e6e795322a0475017371cb8f645cdcac94afc66dc43e7583bdf1c25790f4235076a53de6c64f3bc5004e5a9ce4783fbf639fad97":hex:"7ee5e0e2082b18d09abf141f902e":char*:"":hex:"0503cb531f1c967dae24f16dd651d544988a732020134896a0f109222e8639bf29ff69877c6ef4ac3df1b260842f909384e3d4409b99a47112681c4b17430041ca447a903a6c1b138f0efbb3b850d8290fceac9723a32edbf8e2d6e8143b1cbc7bf2d28d1b6c7f341a69918758cc82bbab5d898fa0f572d4ceaa11234cb511ec":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,104) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"a958fe3b520081b638d9e4c7d5da7ac7":hex:"c396109e96afde6f685d3c38aa3c2fae":hex:"":hex:"dfa9487378c7d8af9c8dbd9e533cd81503d9e4e7dab43133bad11fd3050a53a833df9cc3208af1a86110567d311d5fc54b0d627de433c381b10e113898203ac5225140f951cdb64c6494592b6453f9b6f952ec5ece732fb46c09a324f26b27cdad63588006bb5c6c00b9aa10d5d3b2f9eaab69beeddd6f93966654f964260018":hex:"06ca91004be43cf46ed4599e23":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,104) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"ec319fb143eac8215b51541daec268f2":hex:"8a4684f42a1775b03806574f401cff78":hex:"":hex:"d298d988e74927736237eb8ab09d7a86b854fa2fd1f7f3be83b417ac10aa9291f4af5b3fbaf75a296ac32369ad57ded3984b84711953e477de3035ba430a30ffb84c941936e6c8d2cae8d80159876f87dd682747f2dccc36d7c32ab227032b8ac70b313fa4202ea236e3ec4d9e4d8b48cf3b90b378edc5b1dbeec929549344f8":hex:"e91acb1bfda191630b560debc9":char*:"":hex:"27ce4a622959930f4059f247d29d1438257093cc973bf1bae4e0515da88b9a7e21ec59c7e4d062035cdf88b91254d856b11c8c1944865fa12922227ded3eecccaa36341ecf5405c708e9ea173f1e6cdf090499d3bb079910771080814607a1efe62ec6835dc0333d19dd39dd9ea9f31cd3632128536149a122050bb9365b521d":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,104) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"14a3e69f351ac39b4297749a90c1365c":hex:"eb1c6c04437aa5a32bcc208bb3c01724":hex:"":hex:"051224f7b208549dcfda5f9d56ce5f0a072ef1f23f3810c693516c92622be6ed4d7a9e0f9450980ba490b2e9e3468ea7eef10bc9ebd673d91f32b748c1bf2c50cc4ebb59fc409c6d780bba00700d563ce1dc9927a6c860095a42ed053f3d640debfbfa7a4e6d5de234af19755000d95e7f414f1f78285ee165410c020038286b":hex:"e418815960559aefee8e0c3831":char*:"":hex:"797310a6ed9ce47cdc25f7f88f5dbbf6f8f4837701704d7afced250585922744598d6f95ba2eecf86e030cc5ee71b328fc1c4f2d4df945d1b91a2803d6ae8eba6881be5fe0f298dd0c0279e12720ede60b9e857ccca5abe9b4d7ee7f25108beebbfe33f05c0d9903bf613c2e7ed6a87b71b5e386d81b3ae53efd01055bbcccc2":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,96) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"c34827771fc3918d1cee09ba9401b832":hex:"2379bbd39a1c22bc93b9b9cc45f3840b":hex:"":hex:"ce79701b661066e53191c9acdaf677ad41622314898d7216e3f113e2e6e215d26d8bd139827f06ab3ea5c4105694e87db1dd6cec10e1f86a8744d4c541f08e40319e22ab42fc1a6c89edfd486b6f142c6bbbf84a73912e0b2e55b79db306ccabf839855afdd889e52ae981520c89e7dc29bb2adb1906cca8c93fcb21290a095b":hex:"26e1f6cf0d9e0f36dfd669eb":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,96) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"b1f9bd2006ec550b7b9913d383200b5d":hex:"ca28fa6b64bb3b32ef7d211f1c8be759":hex:"":hex:"6d9fc8f586d50d6e0128172ae147844e80136905d3a297497a9566ca7c7445029028f14c9950acee92a5c12a9150f5e024e01c7505dd83937542b0b1288de9c292ae8ad918a09b2edf8493540b74c73d2794f2eb6eed18eba520ddea9567462c83330f33d7892fcde0b10c73a4e26ab1bef037cec7e0190b95188e9a752fee6f":hex:"c87aac7ad0e85dbb103c0733":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,96) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"8b2cef1a92aa0af2b00fb2a99855d5bc":hex:"08d87b7acee87d884667f6b1e32e34d0":hex:"":hex:"fd09525ef3c65ab5823e1b6c36b4a9449a3975c5d3a9e7e33c61fb32edcbb8e8c915b6202e3fbce87d73cc3b66d83d9ea7e1e353cc7468f08626932cf0235563e2a28953ee5a0afadb1c3cb513b1f1fc9a8a6cf326174b877448672f7731dd6430a51619da1a169ab302da5af5b38802f8bbf5890b5d9b45deda799679501dc4":hex:"3bd7685318010b0c5fe3308b":char*:"":hex:"583e64631c218549923e8ad33b728d07f23b0f19d2aff1ad7e20d564c591db0e117caa8f21e3f3345e3d84f0ccbb27274cddf9274410fc342cb2a5d4aea4e925d0dd5350389ee0dea23a842ff3f5c1198374a96f41e055f999cfbc2f47ceaa883da8eb6ff729f583eff1f91bd3f3254d4e81e60d9993b3455e67f405708e4422":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,64) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"175c306f8644b0c4b894ae3d0971505e":hex:"9860268ca2e10974f3726a0e5b9b310f":hex:"":hex:"fbe7ced7048f83e3a075661c4924eb77da1b4d6019d504afb942d728b31fd3b17557bd101c08453540a5e28d3505aeb8801a448afac2d9f68d20c0a31c7ef22bd95438851789eef1bebe8d96ac29607025b7e1366fecd3690ba90c315528dc435d9a786d36a16808d4b3e2c7c5175a1279792f1daccf51b2f91ac839465bb89a":hex:"f809105e5fc5b13c":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,64) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"08c0edcfe342a676ccdc04bdf854b4b0":hex:"4a7b70753930fe659f8cc38e5833f0c7":hex:"":hex:"1fc8ef8480c32d908b4bcbfa7074a38e915c20ed7a1c608422087e89442d7c5af6fe9c9a716c55793248062d8e6c6e8e904e2804da3a43701e4c78ecdb67e0b25308afc6d9b463356439cd095cff1bdf0fd91ab301c79fd257046cba79a5d5cd99f2502ad968420e4d499110106072dc687f434db0955c756a174a9024373c48":hex:"9ab1e2f3c4606376":char*:"":hex:"983458c3f198bc685d98cea2b23cf71f0eb126e90937cab3492a46d9dc85d76bbb8035c6e209c34b2a7187df007faabe9f3064dc63f1cb15bf5a10655e39b94732e0c6583d56327e9701344e048887a81b256181cdfa9ec42ebc990875e4852240ddcb3cbc4ea4e6307075fd314f7190f3553267bd68b19e954e310ec3f8dbab":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,64) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"241067a0301edf0f825d793e03383ea1":hex:"a30994261f48a66bb6c1fc3d69659228":hex:"":hex:"6984bb9830843529fad7f5e7760db89c778d62c764fcd2136ffb35d7d869f62f61d7fef64f65b7136398c1b5a792844528a18a13fba40b186ae08d1153b538007fc460684e2add8a9ed8dd82acbb8d357240daaa0c4deb979e54715545db03fe22e6d3906e89bdc81d535dae53075a58f65099434bfeed943dbc6024a92aa06a":hex:"36c3b4a732ba75ae":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,32) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"03cccb5357bd2848332d1696f2ff90cb":hex:"e0754022dfb1f813ccaf321558790806":hex:"":hex:"5e2f18cbc1e773df9f28be08abb3d0b64d545c870c5778ac8bb396bef857d2ac1342ae1afb3bf5d64e667bf837458415d48396204fe560e3b635eb10e560e437f2d0396952998fd36e116cd047c1d7f6fc9901094454d24165c557a8816e0d0a8e0ce41e040ba6f26ca567c74fc47d9738b8cd8dae5dfc831c65bc1ba9603a07":hex:"c75f0246":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,32) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"4e5e53c84a05d5a5348bac7b2611cf62":hex:"47e40543b7d16bc9122c40b106d31d43":hex:"":hex:"489c00c05dec06f282924c680f621ab99ac87f7d33ebbb4ca0eee187ec177d30d2b4afb4ee9f0dc019cf1a4da16d84b7f5f5c7fce72a32461db115b5a5a433024fd5ed3d47161836bb057a0189ed768f95e45fa967d0cc512fc91b555808c4033c945e8f2f7d36428dcb61f697e791b74e5c79b2bcb9cb81bec70d8119cd8d76":hex:"81eec75d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,32) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"2c94008bf377f90b7a1c0d2ea38f730c":hex:"abfe92931a8411a39986b74560a38211":hex:"":hex:"7b3d619d115de9970b2df4e1f25194940b3f3da04c653231e8e6946de9dc08ae5ba37e2a93c232e1f9445f31c01333045f22bd832e3b5f9833f37070fafb0ef1c44cc5637058ab64d9e07bb81b32852d4cf749a3ddbfdb494f8de8bb4e31f46033f8a16bc22e2595d023845505ea5db74dd69ab4ca940078b09efb4ff19bdb66":hex:"47d42e78":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,128) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"69eedf3777e594c30e94e9c5e2bce467":hex:"a3330638a809ba358d6c098e4342b81e":hex:"df4e3f2b47cf0e8590228fcf9913fb8a5eb9751bba318fd2d57be68c7e788e04fabf303699b99f26313d1c4956105cd2817aad21b91c28f3b9251e9c0b354490fa5abfcea0065aa3cc9b96772eb8af06a1a9054bf12d3ae698dfb01a13f989f8b8a4bb61686cf3adf58f05873a24d403a62a092290c2481e4159588fea6b9a09":hex:"5114e9983c96fecec3f7304ca42f52aa16cb7c6aadfb62ad537c93a3188835ca0703dad34c73cf96435b668b68a7a1d056931959316e8d3ab956bf64c4e07479c7767f9d488b0c0c351333ccf400b7e0be19a0fd173e3f2a1ae313f27e516952260fd2da9ab9daca478ebb93cd07d0b7503b32364d8e308d904d966c58f226bb":hex:"5de3068e1e20eed469265000077b1db9":char*:"":hex:"208e6321238bf5c6e2ef55a4b8f531cbbfb0d77374fe32df6dd663486cf79beeed39bb6910c3c78dd0cc30707a0a12b226b2d06024db25dcd8a4e620f009cafa5242121e864c7f3f4360aaf1e9d4e548d99615156f156008418c1c41ff2bbc007cecf8f209c73203e6df89b32871de637b3d6af2e277d146ae03f3404d387b77":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,128) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"45cc35311eedf0ba093bf901931a7036":hex:"fed5084de3c348f5a0adf4c2fd4e848a":hex:"6e210914e4aed188d576f5ad7fc7e4cf7dd8d82f34ea3bcbdb7267cfd9045f806978dbff3460c4e8ff8c4edb6ad2edba405a8d915729d89aab2116b36a70b54f5920a97f5a571977e0329eda6c696749be940eabfc6d8b0bbd6fbdb87657b3a7695da9f5d3a7384257f20e0becd8512d3705cc246ee6ca1e610921cf92603d79":hex:"5dc8d7525eaad035c19714ae1b1e538cb66a4089027245351e0ad9297410fb3a0c1155407c10a8bb95a9ca624a9c9925dac003ee78926c6e90ff4ccdba10e8a78bda1c4478162a0e302de5ff05fb0f94c89c3c7429fb94828bdcd97d21333c2ee72963ee6f056ce272b8bab007e653a42b01d1d2041ba627f169c8c0d32e6dae":hex:"266a895fc21da5176b44b446d7d1921d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,128) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"9edb5231ca4a136b4df4ae22b8588f9f":hex:"c342e9bdabe7be922b2695f5894e032c":hex:"a45c7f8032ac5144deef8d5380f033aea2786b0592720a867f4831eaccc6b85d3fd568aedc6e472e017455b0b5b30cf7a08ea43ca587f35e1646ecd9b4dc774d11e350c82c65692be1e9541cbd72a283bdcf93dc7115545f373747b4f8d5915ed0c42fbeefd3e9bd86003d65efc2361fde5b874ddabcf8265e6b884615102eff":hex:"493df801c57f8bb591955712d92d3fc34518f0599fec8533b2b4473364e1df4f560c12444cf50eeb584676b7e955c742189de6b50b8e012dfa6642f3679fb02bc6d8e08d1db88c8ae955a7946263e06494e17f8df246b672942661e5563302252208f2e00a0d77068a020e26082c291a75a06f63c41e2830292a418b2b5fd9dd":hex:"5ed3ea75c8172fa0e8755fef7b4c90f1":char*:"":hex:"56696e501fac1e8d5b83ef911ed11337d5d51ff5342a82993dd5340bb9632e6606eef68ec5fe8cec6b34ebbc596c279e6cbc9221c4cde933f6d93ae014e3c4ca49593f35eaa638606d059519bac3a3373519e6184e7227d2aa62170c36479fe239cb698bfca863925a4c9fb1338685a55a6dfd3bd9c52d8ae12be8551fce6e1a":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,120) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"d5fdcb8f5225090e63fae9b68f92c7cb":hex:"581c818282a0905df5ffff652e5604e9":hex:"f1ae6cd7b07f261105f555cf812a1d5bf8dd9aac07666318acffa11abb77d0238156663acbf7543825b45c6e9cddb481a40995ecd78bb5f4cba5df7c7efb00fc19c7f45e94d37697aca8ef368b99165393b6107f900194c797cd3289cb097eb5915f2abfd6aa52dd1effffdde448e30075a1c053246db54b0ec16eadca1c0071":hex:"d39b9cba95e3a3aab9bc1d03ff475c04faeb5b7f0510777f39e5a05756606eb7ddd154aac035d9ddaf3535629821dd8f014dedd52cd184f52fc706e3c89a3a271398c9125d9a624dafb297a56022ca2ea331ea7359ab5e65f8e14814788e64e0a886a9b1a0144bf268fdcf9d94c3d10a0452f40111da9df108252e9039eacea3":hex:"827e66b5b70dce56215cfb86c9a642":char*:"":hex:"cec11a12e47fd443f878e8e9fe23c65f29dd2d53cec59b799bcb0928de8e2f92fe85c27cec5c842ef30967b919accafe0c0d731b57f0bb5685d90a3061cb473e50e8aeca1346d1f47f7db06941f83f21ba5976d97c28cab547d8c1f38387a04b8a0b212da55b75fbaf9562eeeabd78eadcbab66457f0cd4e0d28133a64cb063f":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,120) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"036198cd3a3ab9319684d0f811cf2992":hex:"47dffc6b3b80ffef4b943bde87b9cf3c":hex:"ec4de476cd337f564a3facb544d0ff31cd89af4c3d9a28543e45156189f8eff8f804494dda83a1fb2c30ce858884a01ec63db59268452b1eea0f0d48280bb7340eaacc84509469dd94d303774d053d7ab4fb5f6c26581efeb19165f8cb09d58ec314d09ab8356731e87fd081f661e7b2d1a7c3aa4af5448a12b742e7b210b0b0":hex:"6b95b9e82a695fb7b466ce3adb536f525d8314f95eada39efb49baf121093ce7d5439f0d8223e03530b85accd388a70650ca9f7e63eb32afecb7b1916ed9b762128cc641caf3e08e027c3d88481d653b6b15172e977dfb9b3f88465911aee162501cbf8501ce2b66ee151bbfdc23225f638f18750c239d62471663e5ee2a5856":hex:"6cf68a374bea08a977ec8a04b92e8b":char*:"":hex:"5c2f7c408167be3d266ff634e1993fe291aef7efae245fa0b6b5bde886a810c866ae6a078286684d1b66116e636e285f03646e09f3c4ed7b184e7c171ba84f3bfd9500c6f35964a404892b4cdcdd3f697fc5b01934a86019810987a9fea7efca016049873f1072f62df3c17f57ea1d88ccd8757f7e3c5d96e8a18d5366a39ea9":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,120) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"c9fbbff8f25f951ba874dfc5ff38584e":hex:"1c1fc752673be6d4ff4cc749fc11e0fe":hex:"abfde0b60acfe265b62ed68ebebc1f5f725f155c4b8a8aeec8d704701c51ff7817060c1b0ce6b80d6efc9836c9ea2bc022ec67db4cd34e945e3a1b153fd2e0f7ac84bb4b07e04cbb529ee24014b16067f9f082b940c9d5e54024d3e5e910310457478560721587da7b5343d89eec5a8fce389c01185db15e7faa9a3fa32e8ab9":hex:"ca401071396da00376add467490abc6e6a7d8a85852026979f7013a09cf689113c8d833560cd6c5b8fdaa8fdd818e773ac13954839a0a2c91efeaf4e0e14de43308419a8b86fa2ae600a88a6bd39dfaabc16a3c7c1b77a5c2aab7f7caceb2f8595324125efbb7c96ba16c47d0bd10568b24bf445d72d683268466e68e46df500":hex:"ff0b2c384e03b50e7e829c7a9f95aa":char*:"":hex:"239637fac6e180e71b2c9fa63ce8805f453d81499623ec2deba9b033350250662897867bffaf0c314244baf9e1fe3e1bb7c626d616bfbf3e0ac09a32aaf718b432337c9dc57c2d6fc4a0a09bdc05b9184d1b90c7193b7869f91e2caa8b3b35c10c6621ffae4c609bdf4e4e3f06e930541c381451ef58f4f30a559d2b79b0e6b6":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,112) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"3a314ec178da96311e42334a616fb38b":hex:"d7ea27c819e3eb2666611bb1c7fc068d":hex:"db8dcc31a5681f13d56abd51bd2dcb0d2b171628186e215a68bf16167b4acd00c3441973c3fa62fa2698ee5c6749fc20e542364d63c40756d8bcff780269e5201bafdced3cdc97931d8203873431882c84522c151b775285d0a3c5d7667254c74724ff0ea9d417aa6c62835865dfded34edd331c0c235a089427672c5a9211c9":hex:"518b3f5384ab54f80497d55be7a5d6902bc7718386212c2ec7537db331514b3838f104bf9054e03039a4cfb73f41e5d0a9648e569ed738cea8d33917430dff6afa8f07a75e324b9262fa196a4439dcd66b0535ee5bea0d292600227c2a79ed03be0671740e5cb7b306d855612bd3abcbf02cf7e7cecbb6cdbb33d57b4e3234a2":hex:"1e774647b1ca406e0ed7141a8e1e":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,112) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"e818372a63b7e2c23b524e29ba752bdb":hex:"36e617e787cb25e154f73af1da68cb06":hex:"71801d69796c2ce36b043c157aec9fd2e06fd1ec596126d10c26b6d44e3dc36c4fa30a030d65c382b6ddfd958e71fe9c16732e595137a3d6764c15480fc3358e9a113ba492b31274663f5842df5d1cc6bad70e83b34675a4411e2e70755aede0ff5035601be130562e27a20283d6f144ff1bdb5276dec05fad80d51b28d50688":hex:"c1bf1b702a95ceaa6b48a1cdd888ae51f58a9fc3232bd6c784529a83301c6d0cdda6e605ad9a2563f54a8d59f624ae7c589e48b85041a010dcb6fb8739d43e79a456fc0e8574af086df78680460c3cdc4e00dc3b9d4e76b0de26e9aec546705249fa7e7466c01001c2667eaf2813be1f0f116916f34843a06b201d653aa1b27e":hex:"3744262bc76f283964c1c15dc069":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,112) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"9a04f16882ff45816739d1b6697ce8b7":hex:"66f504d9a9128ad7fb7f1430d37c4784":hex:"f641c53c83c4fb1ff8044bfa97cdf63fe75d8159d65b3e5ad585b89c083a53cf4a2f7a58eaeaf45fa71f2c07bc5725a6b03307d7f32884a133a4c803700bf1e12564b98b71f63b434ddf13ad2c467dda25ffa6effcafa72452b20c34cfae71e47096f8745b487e9f1945f5bec83f7ec2709a13b504d92315b1b727a78902be84":hex:"6a4f3dbb3371f64258fd1f831349e745a4e19a33aad794b1de3788729618beed619586092120e9e5dc3ac6e0d52f991f7be61afbfaa4399ac716ad79a2734827254b1627791dc92a128a6f43426b8085dee94242e83176a3d762658f18ecc1e37e3e1531648c9caed212ea2cf3b3843cb92cb07730f30fe2dca3925470fadd06":hex:"fbb37084396394fecd9581741f3c":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,104) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"38cf029a4b20607030586cd2d82146e6":hex:"6330084319e2bf32cd5240f4826944bc":hex:"80746cfb0127c592f8164d751b0e14a5b379056a884cece7ee4e9b80538d7ff6be56a3b19c135786722aaf315123b47672b0251e87ea45f0fd3601cf93f9efa6cbd9ad537f54d57f1e187f821faac24096ecec19d137c9f4cf145c278af4cd8de01c7758784fda06f1cc62d92ae1977786f3d0645714ab4ab6f48c8794b12f73":hex:"f4c9f4476561c9ebdac71b282ae6e2f9f03547da98e66d4d857720db2fcc9ed1f363858db34c9dcaca0109d7c81db24150493115f2bb6985efa8686e3d2ab719d33b230aa4c5c70696bf42f225fb3c6704711c054a882d89b320884a78cb59cd2100496edf4010487597fb9135d8ca79693a43843e9626fd6c64a8722b3a27dc":hex:"7b021de5cda915ba58f90ceef4":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,104) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"cf4d81fc5997c744a572bed71f4ae609":hex:"bc4e20c56931c967ce8e3b8f5f1c392f":hex:"b6b8294abf7da5703f864721f7904d3821f5568bf4b269e44edef4f1c95ddc172d83a06c0ad9f7f1fd2e292c17a876392bc5bb705d370b2f16ff721bef7648f423346fd3a4d762676e6fcf2d690553a47224af29afed0f452d263be90eb8150a13d720f1db6f1abc1c2ec18cfbf93b8ed3c5aa7cfc1dcb514d69f90409687a4d":hex:"f3d65d70326e641fbe7fd945fe9cf66c74f17d0d1020ae8ac488f39b7285c99d8632bc2201960f3d77daccfecc04428abe0853aa8d82b90a93127c72b2d2af53f7f1bd0afb99d50f0b3b24e934ec98eddb278b2c65866442cebf10208c7ce1b7ecf764858480b2a269b106fa6d2428d5ad17612e53e62ccc7ad1184663aeb9a7":hex:"0a86142a0af81c8df64ba689f4":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,104) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"d88ad40b42ead744f1b7a36685658be1":hex:"52c3158f5bd65a0a7ce1c5b57b9b295e":hex:"dde2663335c40e5550ae192b843fa9fb4ef357b5c09d9f39dafda3296a4d14031817ee4dc1a201d677597d81e37050cd3dc86c25adbd551e947a080b6c47ec7be8a927ef7920bd1bb81f2c59801a2b9d745d33344cbe4838bcf2eb8dce53ab82c75c9bbab8e406597f6908aaa81fbbdef25aa69116c8f7a8cdc9958435aa32ac":hex:"e99d2566fe6bcb2a04d167605db7c0f1e5567ff2d8d3292c15bbccc5d1e872bcb15a30b3bb8b1eb45e02fba15946e6bca310583a6740845a0f74f4ebfd5c59ced46875823e369e0447cc3e5d03dae530adf3c9846362c94e7f9d17207bf92d4d59981d8fd904eb8b96a0a23eb0f8d7e7a87e8e8892a2451524da6841ce575c27":hex:"7643b3534eb5cb38331ed2e572":char*:"":hex:"6f87f6be2f4e7421aa26fe321045d1e23066a02158634bef35890581c92367d0bc232940de30974c70a66c60137a9f3924d12db1e5bc1b0e7131ea3620a25eb805b7d670263b82c8bbfcd6839305025390fc17d42d82daebe1b24f73ff9aa4617e3866785dded88f8b55ef89b2798ea2641a592a46428d9020f9bf853c194576":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,96) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"c3ce86a212a30e724b4c624057db4e79":hex:"9e03f0dd4cb2b3d830a6925e4400ed89":hex:"92c48a39d93ea3308f55f6650d33fdf17a902076d582a94a82ac99496de9f62312292b844bbca5a683ef0f0710bbc1c7f89cbcca8f9c0299f154590d32059bd99fca5d78c450ede0d11d55075947caf2151218ce7a06c1e81985a7781a3444054170b457fd7ba816026310112abb47c8eddfd3ab7f679a0f60efc6c6dd3b759e":hex:"3582ef7a9565c9a8e4496750ee5ca3e3a80df6238f7b7608e3394ec56d1360777921da039ede34abcedd01081babd496ba4de74a7de501181d6bb2022a6cc7f79d89a4c6a97676fb0f2b42f70e2d0bc1eaac364c3646df4f611c1d6b09737451b81b5a4da73c05fb58391c74e44498b80b26f1c29562d23c39b5d3f086b280cb":hex:"3230fe94b6ccd63e605f87d0":char*:"":hex:"052347a4273cddba65b2a0b961477f07edee440a9117ab204359d2dd45ad2a6dad3b60ead891e7da6d79f3017ac90f95725a0089f04d25ce537bf53b7ea8e1ea58692d34c221db141e2a9fd7211adcee03ef8b5bf3c5d36311d20bb3d81f70f7e7272d0e2b6d12293b1a2c31b70f140a8f08d98c6231a3c429c3d0a10b2e1c1c":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,96) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"a0155360b84420b5bf4fb410ea02f31e":hex:"46f0386be7363887e7e357376305eab5":hex:"611bc290f91798ad84f0a5ecb5a7cb8fa35e9ab6a5a51c9869a68a076e96f92c9c117595f92cbac5d33343fa2accd2541473907cbc54792c5e215ae857424c921b04ca4b81376bbedbfcc0e565c118f2aced08f247698eed5e2d202c48245161cabeac9fa195219f9799fa253e339561e13012167f1d02b4012b7791b7c863ba":hex:"ecdb51522fc440f7471ea6a31f7c1ef1ec2153e5bcf6303297dbf8ddb3830b45ed9866157375ce4bdeb5e32fcbc6607984fccd7e6552628736608ab13072856d432ceccd3e90d1bb52ca9ada9cee90eb89ac10e887a1978fd0fb3d7bb20caaf35539e150be8044b725b8427c4c4a910f79980865d36344a8784bcc3d58460acb":hex:"ac5addcc10cae6c1345520f1":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,96) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"694f621f594d96b16c32254ff06f3f9c":hex:"542db4e107485a3cd24c7ad337a4f1b5":hex:"27b7bfa5eb34ba376e515e58ab8b6556c396820d0074a1fe3b984945dcf5251ca450456ccb4bb66ec739b03fdc5f72d24553e843255adc012d1f1c95aa3cdac5d12926465354217203052cbd4869a8b5be2e01d0fe66b5a6a8da0a2ce351557e2991ce77baa812b9c67b8e1c5a1fc348710e1a73a0fd49acfd538b7db6bef8b3":hex:"e61476b8b7f101ca6005f25af2b9bee795d62720bbbf59357057ca7cd473e00f0d465255fce8d6164657603323549fb4e3d33fa51054b1a70cc7e492916dea85453e9107fe781bfeb4a622c5b2306a8dddef99386dc50745003aa7220cd7f32fb0a060fa7682576769a48f9169c7d11fe0a8a61b95f5d6dfcf216f7d0c652a84":hex:"0bdef4d771a1740381e7db97":char*:"":hex:"8b27a338fd2153d304f04655e09bd9bdf4468890ecce1e3b51de2c9a25a8d9336a9acd753ce270b1fe8d50196feac68145e0fd59c9cb3aa7c1e8af03494bc4279c6e287c849f3c775ada584ae173100946ae6921ef7c96bbc6f216093548702cf1867bb1bf1f4c9e90a34230a2b2aeb584622dd615023a43a406e64428bd9170":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,64) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"78826a5215a1d5e1b39cad5a06861f8f":hex:"feb9d740fd1e221e328b5ef5ed19eff5":hex:"ca9411b368d8295210d7a04da05a351d287f2f67d978ef1bb936de9f8065473f6fa11495da2eab13a1002231c86411d5409bbc718e2042ee99e013b1df1ef786e9fc1f2d43293c854128184efb9317c4ef82a002eac8b28fcd91d8a714a3aa25fc3c0ae4af9f4bcf5ad19a30cd8ec4b1785df70aa92074da419abe433dd4c435":hex:"0fe2c798d7015d3e2f8725648d95729c45d357dc0c89fc63b9df5a68d3e65419540f663e9190793a29c58c495d5c6a731782acf119e2df8a96fb180ad772c301d098dbc5e3560ac45b6631a01cef7eed6db51f223775d601d2e11b9baa55e2f0651344777e5a03f6738a2013626a891b5f134f07b16598b8cbe3aeaefa1c2a26":hex:"a724bbb295a02883":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,64) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"d450f5253251121606e56687952bf2f1":hex:"fe7ff90b020fc77d7fcd90bc583850ac":hex:"a3bca9ff25a60006eb18f993dcdc99681e414e27605264dfd25652195d7fe1489550afd07fc7346b88d93b59eb6642913646e93bf50ee1db5dd30106cf181124d8ad01c72ed99038c9798620abdf5c78c419b08c97f982b34d9e9105d9aa4538afcd37f62e2412f14f7a248fcd60abaf2b66cd4554767f99030f1a495d56a5ae":hex:"479b4f421bd8ac7f615c4a507da187cb5d4b1f1e2c6113d1f9678c1ba92dc5e17c5b525d7f3208733223eb82af0820b8476e9b08ca714ce044417b24d2238720cb8ffdc69db558cbaff52e3651b400e16c9d5ac8ed8949a19c35516f80394a04bd1cfdced7b204f779d792086e00b2ebca2f55a1140e85f5ee9ac7cfc5a31747":hex:"6446398aff73ed23":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,64) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"90a59f6b0abf932311f0b65623c17740":hex:"20778bea82a6717038e7064f48a31981":hex:"4022d04f1454a72d2efe57533bd32757595220b20f3a37d166cec0412fb1eb2588f939ecd906c805f4827338669888e9f730905001eb1b136b95e306edf70d9ba1e5cd0aa13a25a1f28ab55cff36f9cd7036c735e3b285d26002ad2ed1074b566e252ea3ec8a9ce10882375dc3f1d9676e301dcb179eaae991120b796cc35648":hex:"be5a948a771a8df12adaf74d702f064a75f6483c03203365fbde7d184844fe6dee0b84cf344be05b1d163817ba1516fcb87b9167ed81f884ada73b0058e2b38cba515bbbe462f4c21f8de1d41bca2cf4340aa659f9f07886c2bb620d9c3295318c07fa3c17fe8242409359c08bcb337e5cf268880839b6a20f4ee4b3f04e7024":hex:"dc77c1d7e0902d48":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,32) #0 [#1] +depends_on:4:2 +9:exp:1:hex:"6be4ef629f0b38194c74f7b66418922d":hex:"fb77a4b9b246271abfc656433f87628c":hex:"e5d5227725a19a3050fbf2a97a6e854bc1218b94a4a3403b721ace3447daff68fff5553a26edd41219e68fb61fb9e964d0a3c29796251ae4eb942187cdc55d13a09dfb487e93d9e2072d7271456a77c6ccb81154443eea176314d6e3a08619b52cd880f1c28ae5214ac0090a3855dbd74f87389fe8afebd464330fb683dff81a":hex:"b67ea20a320f4ec0e4185c62a4ad79a3c97a8189a5e4d1deff9d3edff0f9a9323532853c1a2a2c1e62e4d1afebfcdf1d8461921ea601750380e63b912d8b7389198f976851d88a19f1aa32c97143668ad00838d98da1c4f2be0e6e2dc964d170d7f7ad2e2997982e5ca110e744b6e10c24ca18eadff6b129b1f290c8a7e0a593":hex:"3d8fc6fb":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,32) #1 [#1] +depends_on:4:2 +9:exp:1:hex:"c50e37244931e8debc12b3d561c83ba2":hex:"6c0b1fd7ab424a6883c36457d1b5521f":hex:"516dc25f6452ae169ce293c5cee440de47353ca5ba770dca0f04175950e87a2d4c3f84fbc6eeacaac436853492929680066f959e74de4b736ab924d8367b90aaa6e9492561ad4b5aa78b6737d562e960edc3b983e2e01a186e9f22896f48d8dfcfb6a42cfe2c6006c687a27772820a1e8875bdf09e8104248ce4db883376bc04":hex:"b9abf0796f2d2f774735546cf809030f65ed0c7f6bd469ef2fe0ef32aa0225b57fbce07c36017bbc1806a81ff1a429278160a07643f864485b4e0e35d57553dc1a131e32aa10f1f91d663b10f0a418f472ed7b4bca54fd7ffdbb22c4d7764d94a7ffd04730614459431eb64335b9b65363de292c04275d40a7b968c0f5c486e9":hex:"7d4393f0":char*:"":hex:"962509e494f10269b70ebad02b0cd799d1d41191a734863ef502aff3d3ba48dc2acf9da9a3fc3f40be4d210dc5e128bc00499aec57aa0a4669863165428687b88d46fad41e36af8ea6605586eaa5c0736d0d53b9d523e0cb5a0b285048e060a73cbf4b587d2cd787debdb2b4c8cda731a61a15b19fe8b561fbdd3a7373853ae1":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,32) #2 [#1] +depends_on:4:2 +9:exp:1:hex:"8531ddb03977383405baf2ee9ca7d64b":hex:"baf623867d6a25fd85d1f08e599c0566":hex:"18f92cdd37dcd7f99b06838f3f68748aba367baabaebd0da9ee787d70e752fa07dea553a43b643b8d8f460175c0746675205e20a7a98acfcac864d7c4cf5ab4c41c031738c76882acda003c5af47b1c4df8894a827a317935d970d4afaee17715c9cfd1883e8c345f19d1f89e229b8edba6b4f53b86d8da1c0f159afb83b6b33":hex:"d90c9e26509bdba9b1dea8d2b94f2b1881d22c2bd756ad23cd61944710a1c1f2807170ed47a6870ae654e44757fcb3822ef28b37946cafc07284f8a0c22ae3552954f0d87b8d8c825bd546935b494cacb4262d9e2a88f254f200ad31367d8b3715afbabea5f34214ffedb14d7c84806022aba2dc8f88a314ffbb24017d1a9b9f":hex:"2fc9de46":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,128) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"862dd5b362cfa556ca37e73cff7f4a0e":hex:"81530a243655a60d22d9ab40d2520447":hex:"":hex:"":hex:"3b9b2af54e610ed0b3dda96961dd8783":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,128) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"3452b7bc100c334292e08343f139b9d0":hex:"8f92739a30fe4ba24079f5d42753d6ac":hex:"":hex:"":hex:"0eeca69f8b95e1a902cc3ab1aaa8e2af":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,128) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"31a0cbaf21b943f8badc939e94eac7eb":hex:"d5bb2c4eaec47088230972ae34fcda9c":hex:"":hex:"":hex:"580e728512c8e44fbb3fe2c498e05323":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,120) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"9e8fca537746e7cbff97f1dcd40a3392":hex:"43e9f2bf186b2af8cc022e7c7412d641":hex:"":hex:"":hex:"4465a3f9d9751789bcef5c7c58cbc5":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,120) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"35b5854ca83792ad691dbda1a66790fb":hex:"cff61cf9b32ea30cf7e3692aa6e74bed":hex:"":hex:"":hex:"726793199df533dd9055b0ac7c939d":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,120) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"07259267c1c6a015437a5d8cfa92f9e6":hex:"18b9cf2ad7ace6ec1c8366b72878cf20":hex:"":hex:"":hex:"4340f6263f0ba2d82c2eb79cb0cc7e":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,112) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"fa1df8955aa3ef191900b06e7c1b7d46":hex:"6928c138c98a4350c318fbdccd3f44ba":hex:"":hex:"":hex:"7c89d9e77515d271b6ed54c9c4e3":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,112) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"c04200ce41ce77d772babb206315ec7d":hex:"a885d58f0f38f9ff26d906fa1bfb12f4":hex:"":hex:"":hex:"9ee0d025421f2bf18caf563953fb":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,112) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"650df049461be341c3099bd1613dcead":hex:"8a4ff6327b49d297248ce2d5bd38afa8":hex:"":hex:"":hex:"13f067ef0d7b448d56e70d282fed":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,104) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"ee61b5bf5060fcc637dc833926898508":hex:"b2dcf21f9ffa4a883044d29f087f9b85":hex:"":hex:"":hex:"9ab1d66666d4dea3cbb5982238":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,104) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"01cc56ca7e64db7fbef66236a5c49493":hex:"8ea5b63004189792cc040ef18b37e550":hex:"":hex:"":hex:"d685aeb54aa129a21bed17766e":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,104) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"134dd72ac8e28ab46720c2f42284a303":hex:"c6368e4c0ba0ec90fa7488af9997a4c7":hex:"":hex:"":hex:"4ad9cdf19ff7d7fd7e273efced":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,96) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"180c04b2bde6901edcda66085f73ecd9":hex:"9193b206beade4cb036f01a9db187cb8":hex:"":hex:"":hex:"530f5e9ed0879ccef3a7b360":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,96) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"aaac85742a55ffa07e98106d6d6b1004":hex:"630cd8ab849253c4da95ac80324ecc28":hex:"":hex:"":hex:"37911820c810e3700c3a9321":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,96) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"ab663c4f8f2fdc7d5eabf6ef26169b4e":hex:"86e6100669929e329a1d258cd3552dc9":hex:"":hex:"":hex:"958d6141f7fb2b2dc7d851a6":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,64) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"0dd756d49fd25380c4026ea03cafc2da":hex:"6a6f7e39b0d730ea1670e13d16c12c28":hex:"":hex:"":hex:"872ef05a28da5ea1":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,64) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"bd8a834b288bdc7578b6c6ab36f5d068":hex:"aa77de0af5fa4dd1ed2ada5cb94813a0":hex:"":hex:"":hex:"c5c094e83755f2b6":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,64) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"020d280dbd06939bbb5e6edc6f6d39c6":hex:"09aea6f0e57598452719d6f63b6fe5a0":hex:"":hex:"":hex:"05d6c56ba601e85b":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,32) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"e47f41a27a2722df293c1431badc0f90":hex:"227c036fca03171a890806b9fa0c250d":hex:"":hex:"":hex:"86c22189":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,32) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"9d3e112114b94e26e93d3855d4be26bd":hex:"99b98525160c4bb2029da5553ff82b59":hex:"":hex:"":hex:"33bee715":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,0,32) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"5b4b7688588125349fbb66004a30d5d4":hex:"b4ae363edb529d8b927c051cf21a2d9d":hex:"":hex:"":hex:"6a920617":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,128) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"c4b6c5b8e21c32f36b0ae4ef3b75d5cd":hex:"3d1036bf0000e6f1b77a799f2ef32dec":hex:"1cf2b6cbe86a87b4b5bb3cc50024aeb27c48143658d47b41f2f20b87ed67bd6fc3b85a3a803f66d3576608f5d6ce6cad11e02fe12de5390722dccb8242e1dd140051bef51aa9716c860d45d45bca6effbb1a4797e6e7406a04db5d823766c0f011ebc28e9a8cd4446ec8a75ea8bdc1b2fdbb5cc364fa9877886e30404593df34":hex:"":hex:"a49725014c214ef7cc2d28b9b2b53da7":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,128) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"63c3f81500746eaf383fe3975d84f849":hex:"0799d4152fd73c1604b4610cf7171fe1":hex:"cb8248e5f904cc9ccccf6f273fe621eee1b4d7ed98480f9e806a48b84e2d6a733772ecf8fb7fe91805715cddab2b462b89f6e6c7cf873f65031f13c357d5f57b00b7c391c39e78ad1ed94be236ca0ae316bce11bc33c5d701fdfc58abbe918b9c42f7b3d6e89d46f9784b388a6e6daf47730b9fa665d755a17e89932fa669c44":hex:"":hex:"c53d01e53ee4a6ea106ea4a66538265e":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,128) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"b0c88b191ce6e8e4a3941f7960b7eae5":hex:"e2a899961c332c815685c553351fa519":hex:"308bf10570af48d632911f3641dea60d78046211c01a63bb8e4e5cbddfff8841d2f2b11e18ccb2170805ef4cacf7804d64e0feef40731a1704907f33b77788c18ccf35b224ec3046a67664ac9a3481d2385b6ddeec6da4f32423f94ea9663a5c51cc388cef33744a8159b4fb654dfdb5092718bf926c824be31197f07f276b5f":hex:"":hex:"92604d37407aff33f8b677326cbb94fc":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,120) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"c818dfa0885a09f65ef78712f5ce6609":hex:"ca279284723530fdd68ae880e0ce775c":hex:"2a562abdbb483ca5f355f9cc1c5e607bdd624a078a76b717ce0f8f35d0d4c54b629f372f15d20c848d01420c6af5a7040d42063704a17b46259dcc53723caf2d4bf556143ff9117c752fa4f22c9c155c99b7bf5949d089cdafd562165b9cbf53ff51cec21f49128c8a599718bbcdb4a5d705d20509c44c8945e2a133164b9942":hex:"":hex:"20e9a3a98d71d460743e1efaab13c6":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,120) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"2354c6b6afaa883e7ce91faca4981f8b":hex:"604f2730c756c8c39a0527093bc2feb5":hex:"959b4b0b9ce2e9120b327d2d090117553999ee10bdd384a546fc6de0957ef4b447daf07b3d07ef7dbc811f36b0fc09a175d26e4d1263cb5e21eda5ecab85d763807bb20b3cb6ac3f31d548dff00aae058d434ebcf6f7e3a37f11324134f453dd0ea7f51094863486426ff1706129a5a93c53d8c5ccb56cafa5881981fe233cb0":hex:"":hex:"3588c9aa769897dfa328549fbbd10a":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,120) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"b0af48e6aebbb6ff5b7c92bd140b085f":hex:"d210d6502a5221ac1274a9c7f5a81725":hex:"d725311ca10eb4b4aa24e6dd19c5e72dc34fc1ff53feb25d924a9b7d8d72205790ca4b1275bd93ad60c27a5587a45659bca07c111e9748fb683a03465153ffd735b7d134b479674ab8596f0596496fe2090f623fd1e4dd730c5283d8b172db8a25df42d9b34f388ed32676a56b8ba03347e47379702654508ccd0a21ff03516e":hex:"":hex:"e6222f068a1e18f09ba6c771eabd86":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,112) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"a05fe482fe164b2eca7f6c3e377b39d8":hex:"145327bcc10335fccb93afbf4b17e6e7":hex:"ea6f2e93b5e1bf127d40440b8d6397405246b1b48eebe16964f18928f6b4b8ee2c36322d7126905c1a5b816996e340404b586edc2d77afac11a6c1266511f9eff1a320b035442d4078f8e42ca63cf26d12a971a7adf4645d1bd9a8e4d0a20722f7c2d529beaecc4033f7738075e1cdc6d8a929da5582540678935b82e7b7ba68":hex:"":hex:"3900bde9fa9ae2cbeee54d04f224":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,112) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"dacbadf819eb16a63f6f091d13ed04d4":hex:"b9ebce724b0dcb0989ac2d8e7ff8aaec":hex:"7dc6e2189d8a96f3507e352e05e8fd1b4bab988c2f1c706115887119f63b78084f015d85f6b460901a02880103e4d36e8f6527dfd74e4a3acd3f578c0cc726b528875f701ff8b66e5c11b4689c346a098e123bebfa253362cb86829be73c2b85a6881fa976aa730fabb76775027feec7fd920a6c8965a4a509ea812d7c413a95":hex:"":hex:"8988fca83c8cfb1f8feefac46f04":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,112) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"969244c7444f3f3bf193b28f8e8e96dc":hex:"49b2845a1a1c87fa66eb8f78c05ac029":hex:"1414a07e86d8b61d1eff43e1ff4ab42c1c95e159058b74c731e3007d21a5eb78bc17b7e920363a3974aeb8608813dc9a4655199b6703ed337450702d8ab16a89776831b2c7c811fec3acc23598a0aa01680a7bf42a4e258145beb08c9f0eacf2bb5f56d26bea3ad11e1a956a630b80f3d22bf35592b4704f7c464b08b06dd7f8":hex:"":hex:"a291c7527385f037f62e60fd8a96":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,104) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"525abe490c8434802b69439c590a5290":hex:"141f79f0501316e66451c41c7af0f0cd":hex:"be440db66d3f81be467605a7b2805ec1df5e71e1b1b04bd7a4d05e912f5aa1912ba08de72df18613b32b7edf78963c48c80c25178b3b19262b85bb829f5377e0b368b500d6d3b442f54172d4ca4500eb5b4d478b602e5dc11d090539455087ce1e5b9ea74355fc06e9b60cbf25a9804d3f8c623fff130abc48bc2d8d116b8366":hex:"":hex:"038c7e95f790e6ca5ce73f9551":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,104) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"51644e025659de983f5c8156516b812e":hex:"614837c743d0974e9cca497f13038c02":hex:"60c5d062ade2c5c2dec68b734dd3e58ec474a586d1c4797fdfa2337800510134cb27a10d501927632af3c1febc275010c0d2e5abee630cd2bc792963fa82a42286ab047b934a261927311b40f5f953bfd661427921147cac7613d95ee86e16326ef67c1ed097e8fb87a78753d785de34e03a182232786079cb6be00182e41c9e":hex:"":hex:"77e3deba2c7f9386f85bc4a801":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,104) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"08566ca7310302dfb84d76ea0525ba20":hex:"5f20ec9c35c08aa7f1c0e8a20fdbd2b3":hex:"5d84e32768b8d1e7e3c426b3118d48e35491bf1bb454b359c8429220216efd8826be94fe1919409a128ccd8125a594f1691c9421fc3dbbb3f757bf2355bb0d074ceec165eb70e26eb53fa2cb5d84dfae06babb557805ef7b8c61c1bc76137571bcc5e84bf5987dc49013831d78bd497ccc49cde7dca2cb75e7ab967da8c6ce81":hex:"":hex:"873f037fc05252a44dc76f8155":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,96) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"dfb54db96383fa911bf5b4fa1218ef9a":hex:"7e849e24983f63f1194b396bbd2d55e0":hex:"d3fb689c5818810dd104693f3306a10b27178444af26798a194f7c2ab31ff3a172904b951942b1a26c8ae5b5b1ee2d86dc78bb72a335fde350766d7d9aef6f549871dd46b04b2cc319fcdd47be437d431ad18cab82d51ca9fa57f4108a8de622a92f87d28c0349fab27757fd773413f559a8c00d30e258c1f6cd96f9759bd957":hex:"":hex:"dada7fc7fed58db462854ef6":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,96) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"389cf888474e9403e5f4d0e22ffec439":hex:"ef57794cf6fac9f9cea3e8499b53b1d6":hex:"7ea7f7f4763ad208eb6199285b6b2819756c4e3caf2d0ac6f5076ae6785fecdcc4b138a51860ff8b87aaac3a18c2df778a4818308d458dba28f5017513e1454f60be20dae68736ea6d48b1f9deadb517df63140acbd329fbfbc9b82f3ca1862c9e998f0faff1d3ae60b005bf66829f5cf0c5fa03efbdd92d39351e3954be0257":hex:"":hex:"92726d90ad26130e65f2beb4":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,96) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"e55abb2ca36c822bf2a030ac703cb8b4":hex:"d86f7177e8ec90f9e9edf10175d5012d":hex:"777a9d93091de56324c10712243f5541722e0b27e1f303fef6faa387a8666161ab354dbea6c43c82a24e8623bfec39aab13164add6be0dfd55d23204c0975b4ba6fbda51363befde482a9ccc1eb9f151e6ad59c77a1e24dd268389e4686f198a936dd603044a3fb653d63cff80597f5a2913c8a2ec1b7d9dce5728dd56c78c2c":hex:"":hex:"65025250343ed8c09b3fceed":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,64) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"586114f3b1dc087e1b2739b28c592dfe":hex:"ae5a38ddd455505284434a4bcfe81ef2":hex:"531ff8c285e532d961f49bd210a5523cd9b19a697a3a3fb26db940a496f253862405b1e825daeda7eb0445c98022b8342c8f8ea20301618483f8ab04b6ebccd7e7fc57878fb544a5bf78fa896f50ac30126ff8afca8a86388666b64c643d16812729bfd7e5c03ba52f7e6ea4c6a685404f7bcbd956964417fa0ea9a6d7290c41":hex:"":hex:"467a815610faeb82":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,64) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"cbfe806bddb7f06b3826b097550c68f5":hex:"04c1b6c9fd2ab76fc2adfe15d3421bbb":hex:"cfa86d02599652cb4ffff027b9c6ef2336dc9fe946f64fa5ce83f624e144563d4738381bc5371c3cb55cf41ceda07e62cb635ff37246bfa428785229c6e869d5df69d7949a8577889a29e3d05b788ddd43608d9c14e3f1b51ce2085b9a976fe843e3396a74922babe6797d5f01c37ead623b5b582505bcd29edf8a6ea36b0fc7":hex:"":hex:"0697ac372a9acafd":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,64) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"96ce3a095a91effdd91d616f1f02ddcd":hex:"579d6633ec6687afa24ef874899b58e0":hex:"3ff3c0038148ed391b6a10aad623a82fe9209c5ba74482f11506d597b5fc7af977235d8ee9e28cf2160346ddd0e33a5bd1fb67b87dad7167fdd4b2b4000d8460ef7b3e1b59b9d61d06cfbe7945379ed6b650de86f396a38cc70d47b8a349f067d00144c903c276b323be6a929a7d7dd8ae7d254d640cdc1176f98e01a1d8c82f":hex:"":hex:"55a0f61032e048f3":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,32) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"24ece168c2971cf2b404ea206dc9e29d":hex:"e9db62a42491664a6c46cbb0b2bafc92":hex:"3579f6c0cb3d2a5d0c4548855c7c052d36b6a8dfc60f4ca1b4bbe28ed87306119e71982dd84c4205ceba918d675472753df1b5192d3693dbf6a061c6056e312135ffc5ff426895a7e30f7f675d2cb21de06eea5e3761b94deef7537b985d324864c9ff6ab6e230a1006720f98c958912b604a6d03e3979887c07be3ceaafc78f":hex:"":hex:"d2b15a23":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,32) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"d3c3cf993f6740a019e61ce13c29955c":hex:"af900ac348082ff32d2e0ab886079516":hex:"2ddd0e8c99661f0757f04aa79a1ffa24ad48fbe5da68b9e71f7a0cf1b4f2ca9b757695900b7549d48847ae49950dc9b270b1569d29dcbef412216737bd83509c17ae41c34ccda318939cb37a0a380762993a7568c0b07794e78746173dd5c0d921cd50de4b548c1589e142c3dadbad42161aaeda2310f3c6d5c722d9ac69e96d":hex:"":hex:"f2d3a6ff":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,0,1024,32) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"5f1e5bd45ee8bb207ebbd730510ff218":hex:"8846424a194f5de858556e6be5b65d7f":hex:"e968947fc0e49136e730b97f6b16e393d5e4fdf3e4803a23af79211ef59f29167c60ead72fd489da32d2ffa43b2bca2074f9d1b4f5396ca65004b0806cb7c6dfa751fb6afbee3e443f3c9b0e3df6722e0d1320441400c5ca508afb657c2b7f1669b0de21761dccab9a40fc513768bd1f552692626ce35078a2e0e12f5d930647":hex:"":hex:"0d6c15da":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,128) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"3997050377cfbb802cc438d973661688":hex:"c95c84c263bdfd5f1de66e7e616cf3fb":hex:"":hex:"b02f0dd373e42c65e8e1db2dd76a432e0b2bf6e630c8aaf0d48af51b3709b175de9a19b3245ae75818274c771c06fae225c4f8b002236712336e805ab006449eb29cc5e29abd82b06c32d4c36ee99acb9a6d7d9eae6ec6ec263c002a22c4a898c74f6abd6d92112367ca7ffe82787c5b39e7012ba22825d3612af3d41e8008a8":hex:"b35b3cf6ed59ccb69dbc9b47a3f284ae":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,128) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"c58583f6479d9bc9f1bffddefee66e59":hex:"cee448b48d3506ff3ecc227a87987846":hex:"":hex:"564a9f700cbc1f895e4f4fa6426f73b4956896a15e6127e7560d74e3fd0b980d2ee45b7a6a3884fa613d91d13921e3f90967d7132bdafcd146dd8ff7147ed1964c2bdb3e12f4133d3dbbc3bf030ff37b1d2147c493ce885068d9ba5bebae24903aaac004aa0ab73fe789e4150e75ddc2bde2700db02e6398d53e88ac652964ac":hex:"361fc2896d7ee986ecef7cbe665bc60c":char*:"":hex:"9cce7db3fc087d8cb384f6b1a81f03b3fafa2e3281e9f0fcf08a8283929f32439bb0d302516f0ab65b79181fc223a42345bad6e46ff8bcb55add90207f74481227f71a6230a3e13739ef2d015f5003638234b01e58537b7cfab5a8edac19721f41d46948987d1bb1b1d9485a672647bb3b5cb246a1d753a0d107bff036ac7d95":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,128) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"0bc2bde877e881aea512068105694968":hex:"05f0c34ab2e8e8026b0a23719344b71f":hex:"":hex:"1a6369a45e8ef2846c42d54f92d0d140a94f9633432782dcbf094f1444a1d006acd07ef6076cd0faee226f9ff14adc1fb23e3c63ed818c9a743efbe16624981663e5a64f03f411dcd326e0c259bcadca3b3dd7660ed985c1b77f13a3b232a5934f8b54e46f8368c6e6eb75f933196fa973e7413e4b1442b9dee5e265b44255ed":hex:"46bab9fc2dbe87b8f6ca0ed4d73e5368":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,120) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"e14f45ba5d1eb52e0412240da5d7b5f9":hex:"d7f8ef12f66f8b7c60aea02ef6ff688f":hex:"":hex:"9a85fda19ce923f093a0c25b0c52f5d9534828af7c7687d22307004ae2d10c4592242c0f2704070307ab55b137780d1e2013a19396ab43ff6a295b63fdcf323456d149758f9a2bb37f1418d62ea6368b24d5067b9c63d2968e06d6586c7e3275faffa005f7c7bfef51303e4c2b2ed4564acd17d50efac9f5e3e7f16ce589c39b":hex:"beede05e4928c808bc660f3de95634":char*:"":hex:"4ad5b9ace0c0c7c07df2900faf37a902899471e7aa4a0a1ad5387f8f56d73f78f619be79a4e253f95b15d52895a05bae9ecffa916d35efacd8baf1c704d2aa4a38c234efc4dcfb191ec0fa0b522328fa5b5dff55e8c443fee660ebe3d8ad85de157a889aefc823720030a4cd6ba94a6309dd61806f0abb27772432018bc61701":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,120) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"9a64579f3601b0022d357b601cd876ab":hex:"515efc6d036f95db7df56b1bbec0aff2":hex:"":hex:"88be1f4bc8c81b8a9d7abc073cb2751e209ab6b912c15dc094002f95a57a660b9f08b1b34f5947223205b579e704d70a9ecb54520ce3491e52965be643f729516f5cb018beeedc68a7d66c0d40a3f392ec7729c566ce1e9f964c4c0bd61b291ccb96e3d1fac18a401a302f3775697c71edb8ff5a8275a815eba9dd3b912e3759":hex:"13ea92ba35fced366d1e47c97ca5c9":char*:"":hex:"7fc8565760c168d640f24896c69758355b17310dbc359f38b73fc7b57fe3f4b6ecad3f298be931c96a639df3c5744f7e932b32d222f5534efb8eb5d5b98d218dce3efef5c8c7ce65738bf63412d0a8ed209071218a6fa2f7be79b38d0b2f5b571ec73f1a91721bd409b1722b313683e97d53df19ded95fd471124fa5f294a4bb":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,120) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"1bda4acfd10ab635f357935bb0ab7020":hex:"48b77c587616ffaa449533a91230b449":hex:"":hex:"c9ac8d4ef7d83848fdc03664957c28b9b76710797d5db1c21e713e85eb0898892223e52be1644fc7362c95026ebb9c9ca74d7d3739eff10cab1eda00c36628dae0b98d119a14635800e37cd340faa6fbba9c3d41d52722cc3969612b1a8c5ca9a68773f5ee654506cb88ea65fb1eddf5ab6312d0170dc03324e483342448b854":hex:"8325e4394c91719691145e68e56439":char*:"":hex:"1287ad3719508a9be70c19e3b134a2eaa4415d736c55922e9abcfd7f621ea07ffb9b78d8a9668c74bbd548b5e6519ea12609d2d6197c8bd3da9c13c46628f218e7ff81884ff7eb34664ab00f86e09cd623bec248d8898ef054fce8f718a0e0978e8b5d037709c524114ec37809ac3fd1604e223e08f594e7aa12097f7dc1850b":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,112) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"d21cf24bc5bd176b4b0fd4c8477bb70d":hex:"208cb9dced20b18edddb91596e902124":hex:"":hex:"2e7108fd25c88b799263791940594ec80b26ccd53455c837b2e6cf4e27fcf9707af3f0fe311355e1b03ac3b5ee0af09fb6fb9f0311f8545d40a658119e6a87ba8ba72cc5fdb1386bc455c8fec51a7c0fec957bed4d6441180741197962d51b17c393b57553e53602f2a343a0871ea2dc4b1506663b2768ce271b89c4ed99eec6":hex:"7edfb9daf8ca2babcc02537463e9":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,112) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"3d02e2b02170986944487cba8448f998":hex:"6336077bb83eff1c9ea715de99b372cd":hex:"":hex:"bc1d7553f4a28754cf59ed6f7a901901f04ce62a449db2b45ad60329d0341bb9ba421c783c28a9200b41da8ab6328d826293134a7d0c9a5775dd2735e7767efda4ad183566e0847d6d978abd1a8ab13b16b8323acef05ced3b571631e1e24ad44d65e6ffa64e03c9970e94bacb9f721aba06cda6a08806a3be63dddd8029301d":hex:"0466bb2957281f64b59eafed3509":char*:"":hex:"5f395958f2f7acafb1bca6d3a6ec48b717f2ceeac1b77e1b0edc09a09e4a299d2ec722cc7daf34c8f4121a93c80b2adb20a2fc95afd09320f91085c93c8b082dd703814c9777501d23bf9b328f07f04652592dc5a3f4321626a695b8db8e65c8617c809eb2978d8c9a882ffa82a4bb707c1a8f9a965bdacce5c041bafc94a1c6":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,112) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"cd1ad1de0521d41645d13c97a18f4a20":hex:"413873a0b063ad039da5513896233286":hex:"":hex:"588c2617517329f3e1e7ba6206a183dc9232e6a4fa8c8b89532d46235af1e542acaa7eae4d034f139b00449076ba2ef9a692cae422998878dabdac60993dce9880d280bec1419803ba937366e5285c4a7f31a5f232f8d3ef73efe7267b3ef82a02f97d320ebc9db6219fbdf1c7f611e8e5164e9ecf25b32f9c07dfa12aa705af":hex:"d4dbe9cae116553b0cbe1984d176":char*:"":hex:"bd519b7e6921e6026784cd7b836c89bc1fa98e4013b41d2bf091ef0d602e44a70df89816c068d37f0c6377af46c8bfa73ec0d5bc0b61966f23e55a15a83cea49f37cc02213b4996f9353ee2b73a798b626e524b9c15937ecf98a4eded83fb62e6deea1de31e0a7f1d210f6d964bc3e69b269da834720fd33487874489b8932a8":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,104) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"1cb120e9cd718b5119b4a58af0644eff":hex:"5a7087989bfe2f6eddcb56fde4d72529":hex:"":hex:"4c8e8fb8c87ff6b994ae71bfbf0fa4529f03bad86edf9d27cf899ea93a32972640697e00546136c1dbc7e63662200951b6479c58ae26b1bd8c3b4f507c0d945d615183196868ec4f4865d1d00bb919a00184e9663f6cb9a7a0ddfc73ee2901f7a56ef2074d554f48cef254be558fca35651be405f91c39e0367762b4715d05fa":hex:"95d8bd12af8a5ab677309df0fb":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,104) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"315b206778c28ed0bfdd6e66088a5c39":hex:"7ec6f47ec56dda5b52bbdaa6ad2eb6da":hex:"":hex:"6186f57a85b65f54efbf9974a193012b1396fc0ca887227e1865f1c915ac2af9bbd55969f7de57ce9fb87604cf11c7bc822b542f745be8a101877a810ed72bf4544d0acb91f0f9d3c30b6a18c48b82557433d0db930e03bcecc6fb53530bfd99ee89f9e154aa1a3e2a2c2a7a9e08c9aed1deab7fae8ea5a31158b50bca2f5e79":hex:"930750c53effc7b84aa10b2276":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,104) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"e886de1c907c97e7db8ec80a79df90f8":hex:"612cacbf33266353d0a29a24532f3c0c":hex:"":hex:"c64cc9596d7c738746ab800f688eec190a4c802c55b2528931d74d294496892b81f53d3073d48f9bef1d58ce3be26547474cdda2868abeab71aff566fff613b4e5bfed1be1d2fff35d8ffa33302d3da1c82e421aa3a23848f31e26d90c0cb2ac2ae136ada73404ed3e0e1d3e7cb355a11cd2a4f9393b4d5eac988104fe1cf959":hex:"76634e58d8f3a48f15875ac1d6":char*:"":hex:"7001d7395efb432e2804cc65c0ba5d4719ce84177ce46292c4fd62a5596bd2bab1d5c44217ac43235bd94489c43d01618a11f047d2e247062c3b88d6e59adaa1f46514fb33b7843483920bee60a41f3cb312322c305d25251b4704fb66da58637c95a9d539731434f60ef44fe3cd6d37e2c8e7089880a563938dcc98b43f08fd":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,96) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"3b936e09a6477f3bd52030a29df5001d":hex:"f93105be83fa5e315d73acfdcf578de7":hex:"":hex:"65cf11d1afad19b34f282f98f140315992392f5d4eed4265085b29e1e5553f4783fec681ba2d368486ba6a54c00e71c82c08ca3d097904f021ce4b0acba2d2a7005e28e5f8750ea3d18a4f78363c37583e85104234498942c639a0564b0d80055c21cb7735dd44348298291ab602f345b1d74d624750c0177fbd5cca6f99223b":hex:"91b55bb5e3f3f1abcf335db5":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,96) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"dc9e2095de7b1b48481b56bf6a3604cd":hex:"9e5268db19a1b51c0496a160ca76f8f7":hex:"":hex:"ed61ff94a3f84c72147faefa615e2df00324fb01790cf9764c72c1b8ba47f17866a1fd64ee5c2f53865d1bc24ec93165a6774466a59603199ee476c1f2da7d932c8943d126aa172d532d8475a484d42bb45fcf92766feafd7f3e2e3d42d22f6f84a90e7e688232f799d80cd2cc152ddd21ecfb137701ecafcb2b65abe2e4e6f4":hex:"0fa9588536fca71bb44260f7":char*:"":hex:"ef562e301fcf923ff1a1acd3aff9b1c963058228655fe8a66cab01396547dbd2aa1f79a22eefc62944b86d1a31ebe2d17130175b8c003d6755b0eb8b79895b0f7f8046c5ae888a067ba17bc8e11a8f6e5023a9cd42f6461966c28e505b371c0f72a2606bff430a58016e99713d25ce11f10391fb4a922e27989422c6a64f9107":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,96) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"3f93901fd7cc88db3ba76a158d658c7b":hex:"7e98de461e6d96c0ce6c8d8b3854cf49":hex:"":hex:"16402fded879fcbfe9405902aa63ca2a520889e0045f687455469b7bb867829a01208b8dc5dcc852d8ee478993c30e6d9ec6408773b367821310a0ae171d38d71e06981ff6e845acffbc794142b87c748e12484c0636419d79be3d798cde59e9dae0a4a4a4346596427e6b235ad52e6a1b02d6f4df0c7de35fc390cae36aef14":hex:"86c9a70e4bab304ae46e6542":char*:"":hex:"1b4c09569b42c469b3ab6b39312c214502ec09f5fe2fed1d1933d13cdc6a7b77a5d135123fa69d9207d6844b0357b26b7a2f53b33a5cd218dacda87b78b09cf259e48e74076812c432e2d0833fb269721f9347c96e158500f9b2283342a35c8de0a022edce711118d72d8fbaa354bfb0ffee465844ef2d37e24ec2cea8556648":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,64) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"42289f3d3cd5838e250ef54b128e60d1":hex:"e557389a216ad724aafdab0180e1892e":hex:"":hex:"3edae1d554b67d2036f5fdbdb2945cc112f100adc1b47009c2e23f6a2eaee78d1f39ce8a98f715853cc29fc793fb6981ec3036834188dea7d668185ccc8642071b15de1332f6a59c8a9b4399733eb4b3d8f224af57ba6b4a8e64494bb6630b9d28e7ec3349064350febcef6a3ad1d6cca1b1da74f3d2921c2b28a2dd399c3416":hex:"6f78bc809f31393e":char*:"":hex:"25c476659cc7b343a69088baf868a811ba37daca85c4093105bf98235a90aeca015ab034da008af0982f9b2e80df804c186a9b2e97f74cffd70ebb7771d874fcaf12f6d01c44a8b0ec2898cf4493cf09a16a88a65cd77909bbf0430c9603869bd5f20d56cb51d8a3f0a032fc30d925c96599d296b1ec41c2912bda426adea4fb":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,64) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"3d772eabb7f19475665ca2a7e693bcfc":hex:"0747cbb486a013453fde1ca6abb11dbe":hex:"":hex:"e9fc4d86f5b857fa6057b73f967351e06f87288c40a95b9e378c84f1a4c0f4b80ed0a0b44ff90a8973be4199c0c4006fc4f5ea19d5f1fe8b9c8c01f4675ab85afab0592bb3daba36bb4fc7ed9eea867e9d8cc50c19fb62a5a57956e9efacebac5e9f849649d35a329bd68de97bb6e5ff7bef477a86765c2c9ec15e24cbba5c6e":hex:"8e761ffaea68f967":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,64) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"fb7fd753ee6eaaf283a42a121dab4e43":hex:"8164929fb54485377ecccc9b9621af5e":hex:"":hex:"fd5cecb2c0287cb8229e97d9cc4b9885f428710528884ce663ed1728cd44cb2df93e56ef17ace0678d1e341366c652f4ba7ee45797d39be4a05c1151e5cde499e13e5d45549b5d95a174d03616d06ef96e9d7b2b6bb0d79a726b253dd64223a5f09611671b234ccf9b383952f8888814b2c167e774cfbf54e9c6b99a753f4fa9":hex:"40a2fa7f4370afb2":char*:"":hex:"6208d068be60f7b04b80fc611062e6caaef9a5cf59f850d174b7446c78c039ea9aefe4885e19c2b33911d32ce1fe3c48ddffa4b03e450fd35da03f40c4e7c5bb3b1c3f3049dbfad3ac81ca1b79cafbaa172f4900e3829d38edea3b64000f93924a801259bc4b2523445c64bc23bfee190b952468507fa4baf6dc2bec66fcf0d8":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,32) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"30d757fd73a0fd5fa49159ad0653296d":hex:"b35b8df0aebd0608517f2830e0e70cd0":hex:"":hex:"17d485b258f80d8924e35291118cfdcffd86c47851b65f0b06a7c1f5202de82f3f460fc61b1aa38fdba7c8ded375c92cf005afe63e59d362c0960044af39241b81ca24e85c5faa43903229355b7313fee21b992ef3931d9d2407b32b3cf72dd7acbc7948395eb513cb2fd428b215ba2bd1e29c62f45d0ce231884f62480c6d8f":hex:"954c0e99":char*:"":hex:"022618d2598f79104e918a09c937a82b3db59243b5e13de731fcb912e4366105797ce47f6dce7f08073f2f41e5c15fd6b1ec4b5861469a4880c3b0bd769b78c696ff29c28c9349d5a46a6e5ad9211bd4b708a8c0b6928ebbb0dac1c0a5f5ce6b05de6a50073128566a23f09cc1b826aa5803f9f750aa4debf59f24ae9f98c9b5":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,32) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"d9d3cfd5900de5d5e2109e7721cfeef6":hex:"b4b9dfb013de6f7c44779e5a9daaf5e5":hex:"":hex:"e4243cc37cc32dfcedf9bb76890e706af6ab1e06b290b8ccfe2a55e5dabe68cb390f7636dc9676b431d4dc8ad3f6d989e510194294ab7ab0556789046743cf374d8b6462f5f95a17f3f44337d6c69ee47b0e1ad7e5ce6f9b224c54099a104e70d2d06af869b921ea47febe08f90c591ed49c1f12003afceabd2c7bba458a0111":hex:"2b81e8ce":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,0,32) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"68dc138f19354d73eaa1cf0e79231d74":hex:"e7147749560f491420a2d893c075bb76":hex:"":hex:"ce345567a76bc30d8b4fd2239788221cfa75e1a310aeeeb8c355f8eea57d80967f3047fbd4e6173fac5caeb22151fa607065953c4c35e0537b9e3788cc80de9eedf2a340698bde99a6a1bdc81265319da3e52f7a53883b7f21749237fcfd3cd4f149bb2be7a4ddd9ef0544cfe0789040d1dc951b6447304942f03ab0beae8866":hex:"70a83f6f":char*:"":hex:"64b021612c78b3e192e8349d48b77d02927e7fd70c7160d37cb8ef472f6bcd9df9d93431627c1c80875e208724ae05f94fdd2e005e9707b78a1bf3bbca7beec4b03ddd4d9de6235ffd6d84a8b9a1842e104c1e22df4566f6c4d3d4e3d96a56b9b8a5cdce9da70aa236109b289266036f285564060b204dfd7ac915eea0dd0b1e":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,128) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"7362c86344e0aefb0cf0d04768f9c05d":hex:"7e8d12c2f0dcf4f792247134234ac94b":hex:"86d2b5debc3b10495da353d6821f6cad380776d805bd8660b08dcdb1acd87026e4f344b547a4db47b5f44cded314bec4ce9a417ce40a2acd5a21460c42dfcd27483abf3f38dd8cc5fa523b6768a26513df5896435baa97781cff1966e2e3d6ec6d0a9cdc013de5a50e4d46831667055bad04f784024a82f9cd087ae4cd37dd64":hex:"8baffc7836004deb87c0111d47c182512bf861874021ddfcd559acf2c4a51cf5bc4bfdee2d039b9c005b6af95a2607643dcf4d9cd9d62412f709334556db22fc91d7b40438505d6806ccb2f2c21ae731bc1f1c825d28a71ab27095a39985e96ccd07cfb2e75243ccafd474494a2338c324ef533ca5f17d2ac1b1883140342ced":hex:"9594da428fd8c1b13ecb23afa2c1af2e":char*:"":hex:"e2c424f42aedd56f0e17a39d43ad19c8e2731efc7a25f077aef51d55280b10e667e338bd981b82a975ef62bf53bc52496b6995d33c90c7ae14767c126826e3f32bd23f444ddcfd7a0dd323b0ae2c22defad04ce63892b45c176bd0b86f5fa057a3dc371359744cb80bbfb4a195755136a0ea90b4044a45bc1b069f3cb3695c04":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,128) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"58748bb204ccb7bdafdbf739b6c19a3e":hex:"93ac298c73c88e127a4d9dd81bf24e3d":hex:"8f168fc4d1da13bdbefae3f9d6ac1d8cb19fcec1f43f727951af0a466d8826649a46c3cb50c045ea83849fce0eedbc042a1a435e6d9d59017997a2d5459b940078b8a7f3b6b0ff279ff8c560248296a17240ff1b0643d1f436b6e3f2079363fc49fb45f410debbdde083b92057916368cb807d603cb82e2c0dc01658bff7f1ab":hex:"b72902c9ebb72a86be539b19a52fd9af00aa4de081d90c0d8ad580ebb5900177a036f40a1e9b43e3a07d715466526d6d7544e5a5551805b62463f956cd519fc99182c2d54bd62fc7ffc6e5ebf1503859b706da11a1b6c707a67a70789dbfc10ef726bd360f9f2347326e068e757c8443ddc9308a171e682359ae1bfe87194ab5":hex:"efba4589d4a03555766bbc3b421dd60f":char*:"":hex:"d5c97a659f016904ff76286f810e8e92da6f8db2c63d8a42e617760780637e32105503440cdf04d1fe67813312f1479fda8d746c8b0b080591eba83850382f600e9d8680516c6579669f0b3d0a30323510f9de1c92512790b8347751994d022156cae64da0808a649d163a0e99e869fdf224b7c1a6a8fbc613d5917eca8ee08c":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,128) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"6cc13cbd62428bb8658dd3954fe9181f":hex:"86740da7ce4efbed70af55e1d6c10fdf":hex:"be561ac15e3cfda624b422af97c26719c140bb50e4a993d636efe9c7f1963fb9047a0762169b571a698ff310bc417e34d4039b7562a95af710ccc1b197964a376c986fd2ed8ac4b0c7b4e843c37a41366f2f483c821a1823f317416c7e4f32eed9b9dc2ae1a2f3ed32c4b3187358a2329aa42191b7c2fe87b6e27ff20303cb29":hex:"2c9ec982d1cfb644ddbc53c0759b10493206d5186affc6882fbb2ba3aa430f9bae1209db2d78dcc125f3c909a54dd84fdff96c71e678216a58390ef4308bdd90f94f7109c4edefa76a74fda64b201b7a435bbabc27298f3eaa4c2d1393bd584f811fff52638f6ad2f6d86a8c3c9c030d9d4264c8c079592a36178d25991cff09":hex:"76b990a1e010e5f088f6ae90bec40b32":char*:"":hex:"0b9a5f5d2e6852b75b9cf26c1b310b2200e56dafcf3c941478862cdf9737ac8e2cb9b38d41bd4a1872ea1b4cfd51a1a0b9b743aca439eefa10de8459a0a7a221c5429b3dee393f17031ca6c399df8e05657c3db55be9c9dd29e690042a4ed8db732efce7c58d6b20a2a0f7c79e42e5ada43b87ab00f481c20cac1b35514dcdc9":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,120) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"286d3f5080cfe88538571188fbeb2dd5":hex:"da6140bd4dc6456ddab19069e86efb35":hex:"5d350a04562a605e9082ebd8faec6c27e561425849e7f0f05f5049859c2c1bd2c4682ebf9773fab6177d2601fd5a086cefc3adef5a2f8f6b5dc9e649e98dd0a3d1a2524419f01305bd0fcfff52d84a20d1b14dea2138dcc54eea2bf263c6fe27c3e7255f1f359d0d00fb1b350d7a04965af30027632520197e85eb41de6bb286":hex:"55135928997711360622eda1820c815aa22115204b1e9bb567e231ac6ea2594b4d652627b6816bdc6c40a4411fd6b12fab9a1f169d81c476dbf77151bff13f98ca0d1dc0a68ea681652be089fadbc66c604284eebfc8ce4cf10f4ca6bda0e0f6634023db6e3f0f1de626c3249a28a642ecc9ec5ff401e941fa8a3c691566c0ae":hex:"d90d34094d740214dd3de685010ce3":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,120) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"726ae113a096769b657f973ea6d2d5dd":hex:"2f9900226c97585d200dd20a279c154a":hex:"761663c3fcbf1db12bc25546b2425b8229b3153e75f79fa63958819caee3febff74603d99264b5a82ef5980439bef89301ae3206a1d01a3bbd7a6c99d27d1e934cc725daeb483f826c2c9d788fd1f67a627864cf8b5f94df777bb59ef90cb6781a2000e6f0baa4f1ea4754b47bb7cbd2699f83634e4d8ab16b325b2c49f13499":hex:"90636012ba8c51d16f8f6df3d3bcabc3f09aeffbe2a762f62e677913188045b861b2e7d9a7bd93dcee46e9e4832e497a6f79db52b4e45c8dab20fa568ff9c4ace55be3216f514a3284768a25d86b1c7da5377622f3e90ed4c7bd4571715af4d0a2ab5181d0475f699202e4406bb9cfdbd4fa7f22d0dd744d36b3223134658496":hex:"d095bfb8990d4fd64752ee24f3de1e":char*:"":hex:"9f7759c6d24fd9aa0df02a7c0cc5f17e61622c63195f85dfafa5d820d3ad218c7288ec017821100f1fade10f9bb447a4a01e3698b045548c7619a08f2304e2818a9bf55e70b40f8b994b7dcf0cb243848cf3f6fdfec3ebbb147d01df84a3ec62cd8fa5d78ad9f2f28cd288a35eb49a5172339e9872e8e7e3350b0d69f59acd07":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,120) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"73a9eeda721c6f292e6b399e2647f8a6":hex:"c1e80eb723960049cc4448b66433f1cf":hex:"fb2a0b1f817404e74aee0a6ec8f2cd86f0c9114ed367b2690c44ad80f9d3377d7fd5066beaf1daa739d27ed3fba98379188016b1fe901204a174f9ffca370c181aece5e5d40939a0d460913b40b895e78a3b80ddf3d613c05e4e27bfd161ea2ef42271a2679f2cdca5b728ffb2319781c946a4f3ecacf486b754b30bb04ea60b":hex:"215fc7e52abe4c751ca2f7f9a5cbde9ab8b44b8d4054bb62dcea6df5b936145ca6ec83a2b78b070638fd6e5ea3bad5d0caf1b8f755f391c3e0962a92337e3eba575585eb83680075fc818860388c587746af78d5fc75ccd0a63f1612abb1ba0f04a2228ca27fbddba4878f9b2683683f516b6d6fe4f6622e603bd3c5ad45e332":hex:"e08161262234d0d5be22f09e5646bf":char*:"":hex:"b5e286183f16dd9403bec6786bd4836cc6add47947ef111fb1d5503c18c333c8fe60959502f58390d0e0f69fbe5fee13c72aed65fe6e32f6ea45877fe44f8a556aa5157b112e572197c1c350b7943c6cf2e9146018599524d27599f09c86027f2c5927e4a20c63833870e8369baa36ecc07cdb3ced520b5ae46869ff357ca089":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,112) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"90dbda7397d8fc46215a1218a6ffd0d8":hex:"7be477d14df5dc15877ae537b62e1a56":hex:"7358ddf1310a58871a2f76705f1cf64223c015c4d1574104d2e38783bb866205042f05c86e76c47a2516ce284911f1d2cbee079982dd77167e328b8324eec47c9244cc5668cf908c679bb586d4dd32c6c99ed99a6b571cf18b00689463e7a88cea6ea32d288301a10a9139ed6092ffe298e25b8cfb6b4be8217f16076dcd0a90":hex:"4f82a1eca6c9184240f50f7e0cfec07ec772cad5276d93043c462d8364addd9a652eed385ccc6b0faa6ca679ab3a4c3d0be6a759425fd38316ee6a1b1b0c52c1bb3b57a9bd7c8a3be95c82f37800c2e3b42dde031851937398811f8f8dc2a15bfd2d6be99a572d56f536e62bc5b041d3944da666081cd755ec347f464214bf33":hex:"776d871944159c51b2f5ec1980a6":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,112) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"0c85174d428fc1c7c89ca5d1b8aaba25":hex:"b3c9dfa4c55388a128fbf62aa5927361":hex:"3f552d45b61cf05ae2aa92668e89f3338a15ec7c5b7113b6571cfcd9e4c4a962043ccd9323f828dd645e8a91b007ce2112b7f978ad22ee9821698a4f2559d987ae4421452ad2e8d180953297156426d4540aff2104d8637b56b034a3a1823cf962bffbc465fe6148097975a8821ca7487e6e6c7ff4ee4de899fe67345676bb1c":hex:"3735cbfb8000260021d1938d2a18e7737f378ecddb11a46ce387bf04e20bbfcc902457637fd152ab87017185601f32a7f906057123b6c2da31a1069c93e3cacc59a359aebd3e31b302e1a1f7d5d8f1b2917a8fe79181fa633b925ce03a1198dac48f4c959076b55bc6b3d50188af2c6aa33d83698aa8db22649f39825ba54775":hex:"1e7dec83830183d56f443a16471d":char*:"":hex:"3d98cabca4afb7c1f6b8eeed521f4666ae252ac12d17ebf4a710b9a22d839b69458387ba4bbec2f6400e0cff80fbe4682c24efcd3b8c594d9b515ca7842c9d5988c42b59b6526c29a99256451e2927f5b956ef262f97c733dfa8bff73644473b9a8562bdfca748f4733ddce94a60024dfbfcde62fb3cbd7c3d955012d5338b91":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,112) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"d89f06eb07744d43d44734faf9751d07":hex:"185f8d033713ee629e93561cf8d5acb8":hex:"743bcb671d0aa1c547b5448d64d7c6b290777625ba28f25ca0fbf1fc66495a2fde0648a8db51039b0e7340d993aef8afb48269e660cb599837d1e46f72727762d887ee84c073d6136d1b0bc7d4c78f5673a4a6b73375937e8d54a47304845f38ca6b4f51cf14136a0826016535dc5ed003e38c3ac362b9d58ba8b555a05a1412":hex:"36cc3b2f563305208a03378f7dc036119f7de3fee77cefac06515853d36609a622382ed026c59783fbc0d9910767874c516e10c7bf3e3d104f73b3463c8d93a63418c76cb0d05e62e9c8642cb4f32caced2620912cb6c79e5110a27d5fba1ef3b4d0578077858526c5e4254365f2b2ab47a45df4af08980b3b7a9b66dff5b38c":hex:"fcad48076eb03ebe85c6d64f6357":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,104) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"6150f14dc53f391e815acfabed9f9e20":hex:"7e92dd558bd2662c3a539dfe21a352cf":hex:"9b4624e9118e6aa5dc65b69856638f77fd3f9f562046f50ba92a64e988258637932af7979f000505b84a71ff5dd7b60bad62586b1a8837a61c15a1a1ba7f06668272c28169915d7f06297b6c2a96c8c44203a422bfd25500c82e11274ffe07706365bfd3da34af4c4dd8ad7b620de7284a5af729bea9c4ed2631bdcba2ebdb7d":hex:"fd8f337017e1b60d6618e6e4ad37c1f230cdeb78891579c2c63d4e6a4f7d2cb7252e99de333c73db45958808c08e91359c885a7385ab6f9ed98a27927a5b83c3a456ce2e01869712675e527155ba1e339ac14a3ccd7a4b87360902f2b8381308fe5a4eac5c90d0b84da4bf5b907de6ff3139cffd23b49a78750006100183032a":hex:"922a7b48ad5bf61e6d70751cfe":char*:"":hex:"f272a3ee9b981f97785cc6fad350e516d72d402dae0d8a531c064ec64598b2a5760f9b279c10aa1ff71bec07300ab0373187138e7a103fc4130105afa6b6346f3d368b40d6f542375de97878ad4d976d64c5c4968a17be2b1757a17c03100231c34721250cd37cc596678764083ade89ae3b1a2151ff9151edcd7ba0eb8a4649":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,104) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"3e8216072ed6fcde0fe0f636b27ed718":hex:"23a122cf363c3117b8c663388c760ee4":hex:"28ce0b4a44fa83323e060f3ff6436b8829d4f842090296bdc952b6d4a6b1b1a66be06168c63c4643e6ac186f7ffd8d144f603b2d4bc0d65be48121676f9fa1f359029c512bebfd75075ff357bc55f20fc76d9f2477c9930f16408f9f09c5ae86efa2529d2f1449ceeb635b83ca13662860ef9ac04a3d8ab4605eccd2d9ae5a71":hex:"3b50f2a8dca9f70178503d861d9e37f5edfafc80ee023bfed390a477372986e4794175ec22ac038c3461aba50c9b2379cab48512946efdfe2cb9c12a858b373a5309324f410e6a05e88ba892759dbee6e486dc9665f66cb5950ea7e71317fa94abbebd67a3948746a998173fbbb4f14f9effbdf66d3b6e346053496a4b1934ce":hex:"531a65cc5dfeca671cc64078d1":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,104) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"1af434b73a1210b08595ffa686079832":hex:"ae318f3cb881d1680f6afbf6713a9a2f":hex:"3763c9241be0d9d9a9e46e64b12e107d16cca267ff87844c2325af910cc9a485c7015d95bbe62398864d079fb2b577ba0cfad923c24fa30691ad7d767d651eed4a33d0be8f06fed43f58b2e0bb04959f10b9e8e73bd80d3a6a8c8ce637bfbdb9d02c2b0a3dd8317c4997822031a35d34b3b61819b425c10c64e839b29874ddfb":hex:"13f6c1c2d4edcf1438a7b4e85bcd1c84a989831a64d205e7854fce8817ddfceab67d10506ccf6ed9ce50080ef809e28e46cba7b0c96be6a811f59cd09cb3b7b3fe5073ee6763f40aee61e3e65356093f97deef5a8721d995e71db27a51f60a50e34ac3348852c445188cfc64337455f317f87535d465c6f96006f4079396eba3":hex:"2ae7350dd3d1909a73f8d64255":char*:"":hex:"3cd2a770300ce4c85740666640936a0fe48888788702fc37e7a8296adb40b862ec799f257a16821adaa7315bd31e8dec60e4a8faeb8ba2ee606340f0219a6440e9c1d3168425e58fac02e8a88865f30649913d988353ab81f42a5ad43f960055f0877acda20f493208c2c40754fbf4ccee040975aa358ea3fe62cbd028c1611a":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,96) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"04036d2f5273c6ff5b8364aa595359c9":hex:"edc433c381140dff929d9df9f62f4cb6":hex:"404acfeeea342aeea8c8b7449af9e20ddf5b85dc7770d2144a4dd05959613d04d0cfece5a21cbb1a9175ddc9443ffacd2085332eb4c337a12a7bb294c95960e7c0bde4b8ab30a91e50267bbd0b8d2a4ed381409ea2e4c84f9a2070a793ce3c90ea8a4b140651b452674f85d5b76d0055df115608bf3a3c60996108023ebabe65":hex:"acf79b6099490af938fb5fd8913255b3daa22786b03356cdf3e0ffaf570f9f866047b8e15c9953f893d97e7098265297396868ebc383be8547e8ec9d974b6a65b5dc5147cdadef2e2ad96696e84e44f364c2ba18c8aabe21f99489957b2b5484bf3fb4fecaf5ddaa1d373e910059c978918a3d01b955de2adb475914bf2c2067":hex:"71f818f1a2b789fabbda8ec1":char*:"":hex:"4729cb642304de928b9dca32bb3d7b7836dd3973bbccf3f013c8ff4b59eca56f5d34d1b8f030a7b581b2f8fdc1e22b76a4cbc10095559876736d318d6c96c5c64cbd9fbd1d8eb4df38a2d56640d67d490d03acc1cd32d3f377eb1907bbd600f21d740b578080ba9c6ddc7dc6c50cdcee41fec51499cb944713c0961fc64f5a70":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,96) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"59fe44c6e28d025b2ad05e6e867051ab":hex:"eb0c30320029433f66d29b3fd5c6563b":hex:"49b7418b87374b462d25309b1c06e3132a3c8f4a4fcf29fed58e0902509426be712639db21c076df7b83dcfcc2c2c8fcc88576f4622a4366eb42f84ebf760e3eb22b14f8b5ff83f06a6f04a924eaab05b912e126e80da22461abf7f1925fd72ebdf2aea335a044726e7c2ebbb2b8aeebab4f7de5e186b50f275b700794d895d8":hex:"20e66bae1215de9a87a0b878d39015d17e0d4542a1aaba2000cefbd5f892c26a410f55f0d7dc2f6b66690f2997032985e5516e068bfc6ec8a3669f566e280b0cefded519023b735ee3bcbfc5b6ce8203b727933a750f9bd515ec448c1f3a030aa0f40e607727a3239ebbe655d46b38a3d867e481ccf0fadbf0d59b665d2ed6b5":hex:"296c4cdaeb94beb2847dc53d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,96) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"c314264cee0e6db30ebe9b2f6d4991b2":hex:"4cd4431bb6dea8eb18ae74e4c35a6698":hex:"0eeafbfd04f9a0ea18e5bdc688c7df27183f346187e9574b61222006f2b3e12e8d9d9bf1f0f15949ee1a7ee8e5c80ee903b8ba2860e15ccb999929f280200b159c2adca481748d0632a7b40601c45055f8cb5126148e6cbab2c76f543537ab54eb276188343cea3c4ab0d7b65b8754e55cfe3f6a5c41b6ea3c08b81fcecc968a":hex:"d436ff9abfb044a332c4e009b591719a67b12a5366da0a66edf19605c34daa37588e15dd3da0d1a097215e469439de79cca74e04cd4904e5b4a6cb4e0ea54e6ba4e624ed6bd48be32d1ef68ffea1639a14e91a5914c2346ea526df95cbd4ad1b8ee842da210b35b6315c3075ecc267d51643c4b39202d0ad793cbb0045ebdc19":hex:"fda18d2f795d900f057fe872":char*:"":hex:"cb9e0fb0ac13ca730b79e34745584b362d0716c344e4de90d8352b21117471ba12c97f193150b33774baee5e4a0f11b10428eaf0106c958e16aa46c5f6f3d99eed93d1b9ba3957bed05a8b9cc8c5511cf813a66dc7d773cb735b0523d8d6b0b80639b031ddc375f714c6dd50055320cd7ed44a471c8d5645c938a9005d0b5050":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,64) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"26072018bd0bda524b5beb66a622c63e":hex:"c783d6d3b8392160e3b68038b43cf1f4":hex:"8ae7c809a9dc40a6732a7384e3c64abb359c1b09dcb752e5a6b584873e3890230c6fc572b9ad24d849766f849c73f060fc48f664c1af9e6707e223691b77e170966ed164e0cc25ede3fbc3541c480f75b71e7be88fe730d8b361ea2733c6f37e6a59621de6004e020894b51dfb525973d641efe8d5fd9077a0bbc9dc7933a5de":hex:"91c524b359dae3bc49117eebfa610672af1e7754054607317d4c417e7b1a68453f72d355468f825aeb7fde044b20049aed196ec6646cce1eeeccf06cb394286272b573220cdb846613ebc4683442dccc7a19ec86ef1ec971c115726584ae1f4008f94e47d1290d8b6b7a932cfe07165fd2b94e8f96d15f73bf72939c73f4bd11":hex:"edffe55c60235556":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,64) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"201751d3da98bd39ff4e5990a56cfea7":hex:"6172468634bf4e5dda96f67d433062d7":hex:"ae2d770f40706e1eaa36e087b0093ec11ed58afbde4695794745e7523be0a1e4e54daade393f68ba770956d1cfb267b083431851d713249ffe4b61227f1784769ce8c9127f54271526d54181513aca69dc013b2dfb4a5277f4798b1ff674bca79b3dec4a7a27fcf2905ae0ce03f727c315662cd906e57aa557d1023cce2acd84":hex:"2965af0bde3565a00e61cebbfe0b51b5b5ee98dbbfff7b1b5bf61da5ba537e6f4cf5fa07d2b20e518232c4961e6bc3ae247b797429da5d7eee2fc675b07066ac2e670261c6e9a91d920c7076101d86d5ef422b58e74bdc1e0b1d58298d3ee0f510ee3a3f63a3bbc24a55be556e465c20525dd100e33815c2a128ac89574884c1":hex:"66c247e5ad4e1d6a":char*:"":hex:"efd064d4b4ef4c37b48ddf2fa6f5facc5e9cc4c3255b23a1e3765fabb5a339fa0eda754a5381b72989fc1323ff9a6bbaecd904eb4835e5a511b922927574673061ed8de23299ea1456054e7ebb62869878c34fb95e48c8385b5ebceecb962654cf1586b3f54e7887ce31850363e9a22be9e6fbc22e694db81aa055490495dbf2":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,64) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"3bc0dcb5261a641a08e6cb00d23e4deb":hex:"16fa19f69fceed9e97173207158755a5":hex:"92ddd3b98f08fc8538f6106f6434a1efa0a7441cc7f6fd0841103c2e4dd181ea0c9a4811b3cb1bad1986a44d8addabc02dd6980daf7d60405b38dadc836bb1d0620ceab84e0134aca7c30f9f9490436b27acfd7052f9d7f0379b8e7116571017add46b9976f4b41431d47bae6f5f34dc42410793bc26c84bfe84fb53ae138c85":hex:"d533ad89a1a578db330c01b4e04d08238b020e36aebe87cf2b0bf0b01f1ce4197be8b0596e475a95946918152e8b334ba89f60486c31f0bd8773ca4ff1319fe92197088b131e728d64405441c4fb5466641f0b8682e6cb371f8a8936140b16677f6def8b3dd9cbf47a73f553f1dca4320ad76f387e92f910f9434543f0df0626":hex:"f5289e1204ace3b2":char*:"":hex:"be0c30deeffbe51706247928132002b24d29272eee6b9d618483868e67280236632fa1ae06f3ef793f67bd01b1b01f70a827367c1cd28f778910457c7cbd977dfefff1f84a522247e19b2fd01fa22ce67cef9503d45c80a5084741f04108f2462b7cdd06a8f1f044fea2b05e920bcc061fbc6910175d732f45102a63c76ae48c":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,32) #0 [#2] +depends_on:4:2 +9:exp:1:hex:"239c15492d6deec979e79236baca4635":hex:"916b8b5417578fa83d2e9e9b8e2e7f6b":hex:"b39eb732bc296c555cc9f00cf4caaf37d012329f344a6b74a873baf0d8dde9631f5e57b45b957d6aec0f7978e573dd78b43d459b77756037cd64d10d49966eb3a2a08d0f4d5e4f5dcb8713f4e4756acdf9925c5fc6120c477f6dffc59b0b47a3d5efd32b8c9052b321bb9b5129e5c6a095d8de563601b34608456f58d7221f2d":hex:"d64886ce5f5b4adb7fe8f95904bc1461749c931655b02819ffdd0ae31bad4175125aa68962f8e36ec834a7d53a191a74c937e81ec93ad9ce0d3b286d3c11ff1733c0b7780130768c120b1833933561cf07399ca49b912370ae34f0e49b9c8cb9920eddc6816ab2ae261c6d7f70058a9b83a494026f249e58c4c613eefafe6974":hex:"fc08cbbe":char*:"":hex:"95c169721ea007c3f292e4ec7562a426d9baa7d374fd82e1e48d1eaca93d891d5ffa9acf5e3bd82e713ac627141e26a8b654920baffab948401cc3c390d6eea9d7b78c4fcb080b0aa9222e4d51bf201ccfd9328995831435e065d92ad37ee41c7c4366cc1efe15c07fc0470608866aeea96997772ecf926934c5d02efe05f250":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,32) #1 [#2] +depends_on:4:2 +9:exp:1:hex:"db68a96e216b0dd9945f14b878487e03":hex:"8a1a72e7bb740ec37ea4619c3007f8ae":hex:"1b4f37190a59a4fff41d348798d1829031204fd7ac2a1be7b5ea385567e95e2ace25bf9e324488dd3ab8ce7f29d4c9a4f4b1a8a97f774871ee825e2c17700128d3c55908d3b684a1f550fdb8b38149ff759c21debdd54e49d64d3e8aac803dfd81600464ed484749bb993f89d4224b3d7d55c756b454466ff9fd609019ed5e83":hex:"5634196a32d4cbfa7a2f874a1e0f86287d2942090e0cc6a82bd5caf40136a27ddf524a17713ce4af04ca6cb640a7205cce4ac9cb2d0ab380d533e1e968089ea5740c0fcbfa51f2424008e0b89dc7b3396b224cfaed53b3ac0604879983d3e6e6d36053de4866f52976890f72b8f4b9505e4ebdd04c0497048c3ce19336133ea4":hex:"9251d3e3":char*:"":hex:"0c6bb3ee5de5cbb4b39d85d509bcacb3dda63fa50897936531339882962e8dc54c285c8944768d12096d4a3c2b42ffa92603cee2da9b435ec52908fca6d38ed74f898fe0ffa761f96038ff7dfeccc65bb841c3457b8de1e97d9bee82e2911602ee2dc555b33a227424dea86d610d37c447776295b412b412903ad2cede5170b6":int:1 + +AES-GCM NIST Validation PSA (AES-128,128,1024,1024,32) #2 [#2] +depends_on:4:2 +9:exp:1:hex:"659b9e729d12f68b73fdc2f7260ab114":hex:"459df18e2dfbd66d6ad04978432a6d97":hex:"ee0b0b52a729c45b899cc924f46eb1908e55aaaeeaa0c4cdaacf57948a7993a6debd7b6cd7aa426dc3b3b6f56522ba3d5700a820b1697b8170bad9ca7caf1050f13d54fb1ddeb111086cb650e1c5f4a14b6a927205a83bf49f357576fd0f884a83b068154352076a6e36a5369436d2c8351f3e6bfec65b4816e3eb3f144ed7f9":hex:"fd0732a38224c3f16f58de3a7f333da2ecdb6eec92b469544a891966dd4f8fb64a711a793f1ef6a90e49765eacaccdd8cc438c2b57c51902d27a82ee4f24925a864a9513a74e734ddbf77204a99a3c0060fcfbaccae48fe509bc95c3d6e1b1592889c489801265715e6e4355a45357ce467c1caa2f1c3071bd3a9168a7d223e3":hex:"8e5a6a79":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,128) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"806766a4d2b6507cc4113bc0e46eebe120eacd948c24dc7f":hex:"4f801c772395c4519ec830980c8ca5a4":hex:"":hex:"":hex:"8fa16452b132bebc6aa521e92cb3b0ea":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,128) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"0c2abdcd2e4ae4137509761a38e6ca436b99c21b141f28f5":hex:"335ca01a07081fea4e605eb5f23a778e":hex:"":hex:"":hex:"d7f475dfcb92a75bc8521c12bb2e8b86":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,128) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"eef490a0c2ecb32472e1654184340cc7433c34da981c062d":hex:"d9172c3344d37ff93d2dcb2170ea5d01":hex:"":hex:"":hex:"017fef05260a496654896d4703db3888":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,120) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"fe0c3490f1f0dba23cf5c64e6e1740d06f85e0afec6772f3":hex:"f47e915163fa3df7f6c15b9d69f53907":hex:"":hex:"":hex:"14e1a057a2e7ffbd2208e9c25dbba1":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,120) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"4356b3b1f308df3573509945afe5268984f9d953f01096de":hex:"a35b397b34a14a8e24d05a37be4d1822":hex:"":hex:"":hex:"e045ecba220d22c80826b77a21b013":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,120) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"e2898937cc575c8bb7444413884deafe8eaf326be8849e42":hex:"169a449ccb3eb29805b15304d603b132":hex:"":hex:"":hex:"3a807251f3d6242849a69972b14f6d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,112) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"75683c7df0442e10b5368fcd6bb481f0bff8d95aae90487e":hex:"538641f7d1cc5c68715971cee607da73":hex:"":hex:"":hex:"07d68fffe417adc3397706d73b95":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,112) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"0724ee1f317997ce77bb659446fcb5a557490f40597341c7":hex:"0d8eb78032d83c676820b2ef5ccc2cc8":hex:"":hex:"":hex:"7da181563b26c7aefeb29e71cc69":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,112) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"be2f0f4ae4ab851b258ec5602628df261b6a69e309ff9043":hex:"646a91d83ae72b9b9e9fce64135cbf73":hex:"":hex:"":hex:"169e717e2bae42e3eb61d0a1a29b":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,104) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"583c328daecd18c2ac5c83a0c263de194a4c73aa4700fe76":hex:"55e10d5e9b438b02505d30f211b16fea":hex:"":hex:"":hex:"95c0a4ea9e80f91a4acce500f7":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,104) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"b40857e7e6f26050f1e9a6cbe05e15a0ba07c2055634ad47":hex:"e25ef162a4295d7d24de75a673172346":hex:"":hex:"":hex:"89ea4d1f34edb716b322ea7f6f":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,104) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"627008956e31fea497fb120b438a2a043c23b1b38dc6bc10":hex:"08ea464baac54469b0498419d83820e6":hex:"":hex:"":hex:"ab064a8d380fe2cda38e61f9e1":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,96) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"8c386d67d7c2bfd46b8571d8685b35741e87a3ed4a46c9db":hex:"766996fb67ace9e6a22d7f802455d4ef":hex:"":hex:"":hex:"9a641be173dc3557ea015372":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,96) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"711bc5aa6b94fa3287fad0167ac1a9ef5e8e01c16a79e95a":hex:"75cdb8b83017f3dc5ac8733016ab47c7":hex:"":hex:"":hex:"81e3a5580234d8e0b2204bc3":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,96) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"c74620828402e0bdf3f7a5353668505dc1550a31debce59a":hex:"cfbefe265583ab3a2285e8080141ba48":hex:"":hex:"":hex:"355a43bcebbe7f72b6cd27ea":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,64) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"1eb53aa548b41bfdc85c657ebdebdae0c7e525a6432bc012":hex:"37ffc64d4b2d9c82dd17d1ad3076d82b":hex:"":hex:"":hex:"34b8e037084b3f2d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,64) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"50d077575f6db91024a8e564db83324539e9b7add7bb98e4":hex:"118d0283294d4084127cce4b0cd5b5fa":hex:"":hex:"":hex:"507a361d8ac59882":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,64) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"d9ddca0807305025d61919ed7893d7d5c5a3c9f012f4842f":hex:"b78d518b6c41a9e031a00b10fb178327":hex:"":hex:"":hex:"f401d546c8b739ff":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,32) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"6ed8d8afde4dc3872cbc274d7c47b719205518496dd7951d":hex:"14eb280288740d464e3b8f296c642daa":hex:"":hex:"":hex:"39e64d7a":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,32) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"80aace5ab74f261bc09ac6f66898f69e7f348f805d52404d":hex:"f54bf4aac8fb631c8b6ff5e96465fae6":hex:"":hex:"":hex:"1ec1c1a1":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,32) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"23b76efd0dbc8d501885ab7d43a7dacde91edd9cde1e1048":hex:"75532d15e582e6c477b411e727d4171e":hex:"":hex:"":hex:"76a0e017":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,128) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"94c50453dd3ef7f7ea763ae13fa34debb9c1198abbf32326":hex:"1afe962bc46e36099165552ddb329ac6":hex:"b2920dd9b0325a87e8edda8db560bfe287e44df79cf61edba3b2c95e34629638ecb86584f05a303603065e63323523f6ccc5b605679d1722cde5561f89d268d5f8db8e6bdffda4839c4a04982e8314da78e89f8f8ad9c0fee86332906bf78d2f20afcaabdc282008c6d09df2bfe9be2c9027bb49268b8be8936be39fa8b1ae03":hex:"":hex:"51e1f19a7dea5cfe9b9ca9d09096c3e7":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,128) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"c6a98102af3d875bcdebe594661d3a6b376970c02b11d019":hex:"bea8cd85a28a2c05bf7406b8eef1efcc":hex:"f2f80e2c042092cc7240b598ab30fad055bce85408aa0f8cefaf8a7204f0e2acb87c78f46a5867b1f1c19461cbf5ed5d2ca21c96a63fb1f42f10f394952e63520795c56df77d6a04cb5ad006ee865a47dc2349a814a630b3d4c4e0fd149f51e8fa846656ea569fd29a1ebafc061446eb80ec182f833f1f6d9083545abf52fa4c":hex:"":hex:"04b80f25ae9d07f5fd8220263ac3f2f7":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,128) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"ec3cc45a22fdc7cc79ed658d9e9dbc138dcc7d6e795cba1a":hex:"b10d9c70205e142704f9d1f74caee0f6":hex:"714994017c169c574aaff2f8bad15f8fa6a385117f5405f74846eca873ca4a8f4876adf704f2fcaff2dfa75c17afefd08a4707292debc6d9fafda6244ca509bc52b0c6b70f09b14c0d7c667583c091d4064e241ba1f82dd43dc3ea4b8922be65faf5583f6b21ff5b22d3632eb4a426675648250e4b3e37c688d6129b954ef6a8":hex:"":hex:"d22407fd3ae1921d1b380461d2e60210":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,120) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"5a32ebc7a2338038ced36d2b85cbc6c45cca9845a7c5aa99":hex:"9afe0882e418c9af205eeb90e131d212":hex:"61ff8a8bc22803f17e8e9f01aff865bc7d3083ff413ce392a989e46ebed5114894de906f7d36439024d8f2e69cc815ac043fff2f75169f6c9aa9761ff32d10a1353213ac756cb84bd3613f8261ef390e1d00c3a8fb82764b0cda4e0049219e87d2e92c38f78ffac242391f838a248f608bb2b56b31bbb453d1098e99d079ea1b":hex:"":hex:"fcbb932ddb0128df78a71971c52838":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,120) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"9bf22885e7f13bcc63bb0a2ca90c20e5c86001f05edf85d8":hex:"99dec21f4781284722b5074ea567c171":hex:"9f4176dacf26e27aa0e669cd4d44bca41f83468c70b54c745a601408a214bf876941ae2ae4d26929113f5de2e7d15a7bb656541292137bf2129fdc31f06f070e3cfaf0a7b30d93d8d3c76a981d75cd0ffa0bcacb34597d5be1a055c35eefeddc07ee098603e48ad88eb7a2ec19c1aefc5c7be9a237797397aa27590d5261f67a":hex:"":hex:"18fd1feec5e3bbf0985312dd6100d1":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,120) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"cfd75a9d3788d965895553ab5fb7a8ff0aa383b7594850a6":hex:"a6df69e5f77f4d99d5318c45c87451b2":hex:"041aeb2fa0f7df027cd7709a992e041179d499f5dbccd389035bf7e514a38b5f8368379d2d7b5015d4fa6fadfd7c75abd2d855f5ea4220315fad2c2d435d910253bf76f252a21c57fe74f7247dac32f4276d793d30d48dd61d0e14a4b7f07a56c94d3799d04324dfb2b27a22a5077e280422d4f014f253d138e74c9ac3428a7b":hex:"":hex:"fd78b9956e4e4522605db410f97e84":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,112) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"b0b21ae138485591c6bef7b3d5a0aa0e9762c30a50e4bba2":hex:"56dc980e1cba1bc2e3b4a0733d7897ca":hex:"a38458e5cc71f22f6f5880dc018c5777c0e6c8a1301e7d0300c02c976423c2b65f522db4a90401035346d855c892cbf27092c81b969e99cb2b6198e450a95c547bb0145652c9720aaf72a975e4cb5124b483a42f84b5cd022367802c5f167a7dfc885c1f983bb4525a88c8257df3067b6d36d2dbf6323df80c3eaeffc2d176a5":hex:"":hex:"b11f5c0e8cb6fea1a170c9342437":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,112) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"8775665aba345b1c3e626128b5afa3d0da8f4d36b8cf1ca6":hex:"cd17f761670e1f104f8ea4fb0cec7166":hex:"2ee08a51ceaca1dbbb3ee09b72f57427fd34bd95da5b4c0933cbb0fc2f7270cffd3476aa05deeb892a7e6a8a3407e61f8631d1a00e47d46efb918393ee5099df7d65c12ab8c9640bfcb3a6cce00c3243d0b3f316f0822cfeae05ee67b419393cc81846b60c42aeb5c53f0ede1280dc36aa8ef59addd10668dd61557ce760c544":hex:"":hex:"6cdf60e62c91a6a944fa80da1854":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,112) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"cc9922299b47725952f06272168b728218d2443028d81597":hex:"9b2f1a40717afcdbb6a95d6e335c9e4d":hex:"bcfca8420bc7b9df0290d8c1bcf4e3e66d3a4be1c947af82dd541336e44e2c4fa7c6b456980b174948de30b694232b03f8eb990f849b5f57762886b449671e4f0b5e7a173f12910393bdf5c162163584c774ad3bba39794767a4cc45f4a582d307503960454631cdf551e528a863f2e014b1fca4955a78bd545dec831e4d71c7":hex:"":hex:"dd515e5a8b41ecc441443a749b31":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,104) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"5a27d718f21c5cbdc52a745b931bc77bd1afa8b1231f8815":hex:"59661051912fba45023aef4e6f9380a5":hex:"2b7ce5cea81300ed23501493310f1316581ef8a50e37eaadd4bb5f527add6deb09e7dcc67652e44ac889b48726d8c0ae80e2b3a89dd34232eb1da32f7f4fcd5bf8e920d286db8604f23ab06eab3e6f99beb55fe3725107e9d67a491cdada1580717bbf64c28799c9ab67922da9194747f32fd84197070a86838d1c9ebae379b7":hex:"":hex:"f33e8f42b58f45a0456f83a13e":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,104) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"b83e933cf54ac58f8c7e5ed18e4ed2213059158ed9cb2c30":hex:"8710af55dd79da45a4b24f6e972bc60a":hex:"b7a428bc68696cee06f2f8b43f63b47914e29f04a4a40c0eec6193a9a24bbe012d68bea5573382dd579beeb0565b0e0334cce6724997138b198fce8325f07069d6890ac4c052e127aa6e70a6248e6536d1d3c6ac60d8cd14d9a45200f6540305f882df5fca2cac48278f94fe502b5abe2992fa2719b0ce98b7ef1b5582e0151c":hex:"":hex:"380128ad7f35be87a17c9590fa":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,104) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"d2f85f92092385f15da43a086cff64c7448b4ee5a83ed72e":hex:"9026dfd09e4553cd51c4c13ce70830de":hex:"3c8de64c14df73c1b470a9d8aa693af96e487d548d03a92ce59c0baec8576129945c722586a66f03deb5029cbda029fb22d355952c3dadfdede20b63f4221f27c8e5d710e2b335c2d9a9b7ca899597a03c41ee6508e40a6d74814441ac3acb64a20f48a61e8a18f4bbcbd3e7e59bb3cd2be405afd6ac80d47ce6496c4b9b294c":hex:"":hex:"e9e5beea7d39c9250347a2a33d":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,96) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"de7df44ce007c99f7baad6a6955195f14e60999ed9818707":hex:"4d209e414965fe99636c1c6493bba3a3":hex:"da3bc6bdd414a1e07e00981cf9199371192a1fb2eaae20f7091e5fe5368e26d61b981f7f1d29f1a9085ad2789d101155a980de98d961c093941502268adb70537ad9783e6c7d5157c939f59b8ad474c3d7fc1fcc91165cdf8dd9d6ec70d6400086d564b68ebead0d03ebd3aa66ded555692b8de0baf43bc0ddef42e3a9eb34ab":hex:"":hex:"24483a57c20826a709b7d10a":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,96) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"1dfa5ff20046c775b5e768c2bd9775066ae766345b7befc3":hex:"2d49409b869b8b9fc5b67767979ca8cd":hex:"e35d34478b228bc903ea2423697e603cc077967d7cfb062e95bc11d89fbe0a1f1d4569f89b2a7047300c1f5131d91564ec9bce014d18ba605a1c1e4e15e3e5c18413b8b59cbb25ab8f088885225de1235c16c7d9a8d06a23cb0b38fd1d5c6c19617fe08fd6bf01c965ed593149a1c6295435e98463e4f03a511d1a7e82c11f01":hex:"":hex:"23012503febbf26dc2d872dc":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,96) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"2df3ee3a6484c48fdd0d37bab443228c7d873c984529dfb4":hex:"dc6aeb41415c115d66443fbd7acdfc8f":hex:"eafc6007fafb461d3b151bdff459e56dd09b7b48b93ea730c85e5424f762b4a9080de44497a7c56dd7855628ffc61c7b4faeb7d6f413d464fe5ec6401f3028427ae3e62db3ff39cd0f5333a664d3505ff42caa8899b96a92ec01934d4b59556feb9055e8dfb81f55e60135345bfce3e4199bfcdb3ce42523e7d24be2a04cdb67":hex:"":hex:"e8e80bf6e5c4a55e7964f455":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,64) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"ce0787f65e6c24a1c444c35dcd38195197530aa20f1f6f3b":hex:"55300431b1eaac0375681d7821e1eb7a":hex:"84a699a34a1e597061ef95e8ec3c21b592e9236ddb98c68d7e05f1e709937b48ec34a4b88d99708d133a2cc33f5cf6819d5e7b82888e49faa5d54147d36c9e486630aa68fef88d55537119db1d57df0402f56e219f7ece7b4bb5f996dbe1c664a75174c880a00b0f2a56e35d17b69c550921961505afabf4bfd66cf04dc596d1":hex:"":hex:"74264163131d16ac":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,64) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"3a15541b5857a668dc9899b2e198d2416e83bac13282ca46":hex:"89bf8ab0cea6f59616eeb9b314d7c333":hex:"4d2843f34f9ea13a1ac521479457005178bcf8b2ebeaeb09097ea4471da9f6cc60a532bcda1c18cab822af541de3b87de606999e994ace3951f58a02de0d6620c9ae04549326da449a3e90364a17b90b6b17debc0f454bb0e7e98aef56a1caccf8c91614d1616db30fc8223dbcd8e77bf55d8253efe034fd66f7191e0303c52f":hex:"":hex:"8f4877806daff10e":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,64) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"b61cdfd19c136ee2acbe09b7993a4683a713427518f8e559":hex:"4066118061c904ed1e866d4f31d11234":hex:"153c075ecdd184fd8a0fca25cae8f720201361ef84f3c638b148ca32c51d091a0e394236d0b51c1d2ee601914120c56dfea1289af470dbc9ef462ec5f974e455e6a83e215a2c8e27c0c5b5b45b662b7f58635a29866e8f76ab41ee628c12a24ab4d5f7954665c3e4a3a346739f20393fc5700ec79d2e3c2722c3fb3c77305337":hex:"":hex:"4eff7227b42f9a7d":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,32) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"ce175a7df7e429fcc233540e6b8524323e91f40f592ba144":hex:"c34484b4857b93e309df8e1a0e1ec9a3":hex:"ce8d8775f047b543a6cc0d9ef9bc0db5ac5d610dc3ff6e12e0ad7cd3a399ebb762331e3c1101a189b3433a7ff4cd880a0639d2581b71e398dd982f55a11bf0f4e6ee95bacd897e8ec34649e1c256ee6ccecb33e36c76927cc5124bc2962713ad44cbd435ae3c1143796d3037fa1d659e5dad7ebf3c8cbdb5b619113d7ce8c483":hex:"":hex:"ff355f10":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,32) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"5f659ed236ba60494e9bf1ee2cb40edcf3f25a2bac2e5bc5":hex:"ad49f12f202320255406c2f40e55b034":hex:"6da62892f436dfe9790e72d26f4858ca156d1d655c9cc4336fcf282b0f3f0b201e47f799c3019109af89ef5fd48a4811980930e82cd95f86b1995d977c847bbb06ecdcc98b1aae100b23c9c2f0dcf317a1fb36f14e90e396e6c0c594bcc0dc5f3ebf86ce7ecd4b06d1c43202734d53f55751a6e6bbda982104102af240def4eb":hex:"":hex:"cb4d8c1d":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,32) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"a73f318b1e298ba4ac0ab2aed74f73543b1017cccbd1b240":hex:"abe33b7e8d88bd30deb96d1e90c4e951":hex:"6de616b000047b14b6759015183dd753c61499c0e665d06a89e4fb0cd0dd3064ff8651582e901ef5d0cdf3344c29c70c3aabc2aaf83cb3f284c6fe4104906d389b027e7d9ca60d010f06ef8cd9e55db2483d06552ddbe3fc43b24c55085cd998eae3edec36673445bf626e933c15b6af08ea21cbace4720b0b68fe1a374877d5":hex:"":hex:"4a28ec97":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,128) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"73d5be74615bc5b627eedfb95746fb5f17cbf25b500a597f":hex:"eb16ed8de81efde2915a901f557fba95":hex:"":hex:"fc40993eb8559e6b127315c03103ce31b70fc0e07a766d9eecf2e4e8d973faa4afd3053c9ebef0282c9e3d2289d21b6c339748273fa1edf6d6ef5c8f1e1e9301b250297092d9ac4f4843125ea7299d5370f7f49c258eac2a58cc9df14c162604ba0801728994dc82cb625981130c3ca8cdb3391658d4e034691e62ece0a6e407":hex:"804056dca9f102c4a13a930c81d77eca":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,128) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"a249135c9f2f5a8b1af66442a4d4e101771a918ef8acee05":hex:"80b6e48fe4a3b08d40c1636b25dfd2c4":hex:"":hex:"c62b39b937edbdc9b644321d5d284e62eaa4154010c7a3208c1ef4706fba90223da04b2f686a28b975eff17386598ba77e212855692f384782c1f3c00be011e466e145f6f8b65c458e41409e01a019b290773992e19334ffaca544e28fc9044a5e86bcd2fa5ad2e76f2be3f014d8c387456a8fcfded3ae4d1194d0e3e53a2031":hex:"951c1c89b6d95661630d739dd9120a73":char*:"":hex:"b865f8dd64a6f51a500bcfc8cadbc9e9f5d54d2d27d815ecfe3d5731e1b230c587b46958c6187e41b52ff187a14d26aa41c5f9909a3b77859429232e5bd6c6dc22cf5590402476d033a32682e8ab8dc7ed0b089c5ab20ab9a8c5d6a3be9ea7aa56c9d3ab08de4a4a019abb447db448062f16a533d416951a8ff6f13ed5608f77":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,128) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"fa832a4b37dcb3c0879a771bb8ae734f0d88b9be497797a8":hex:"70835abab9f945c84ef4e97cdcf2a694":hex:"":hex:"0f1105f9ec24121232b60b6ef3c3e8ca9eec1a3d7625004b857d1d77f292b6ec065d92f5bb97e0dc2fdfdf823a5db275109a9472690caea04730e4bd732c33548718e9f7658bbf3e30b8d07790cd540c5754486ed8e4d6920cefaeb1c182c4d67ebed0d205ba0bd9441a599d55e45094b380f3478bcfca9646a0d7aa18d08e52":hex:"a459be0b349f6e8392c2a86edd8a9da5":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,120) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"dda216287910d1f5c0a312f63c243612388bc510cb76c5ba":hex:"7f770140df5b8678bc9c4b962b8c9034":hex:"":hex:"d6617d583344d4fe472099d2a688297857215a3e31b47d1bf355ccfe9cf2398a3eba362c670c88f8c7162903275dfd4761d095900bd97eba72200d4045d72bd239bda156829c36b38b1ff5e4230125e5695f623e129829721e889da235bb7d4b9da07cce8c3ceb96964fd2f9dd1ff0997e1a3e253a688ceb1bfec76a7c567266":hex:"9823e3242b3f890c6a456f1837e039":char*:"":hex:"b4910277224025f58a5d0f37385b03fcd488dfef7580eb5c270c10bd7a6f6d9c7ddc2d1368d68d4e04f90e3df029ed028432a09f710be1610b2a75bd05f31bae83920573929573affd0eb03c63e0cec7a027deab792f43ee6307fd3c5078d43d5b1407ac023824d41c9437d66eeec172488f28d700aa4b54931aad7cd458456f":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,120) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"c5afa1e61d4594b1c2fa637f64f18dd557e4df3255b47f24":hex:"151fd3ba32f5bde72adce6291bcf63ea":hex:"":hex:"5c772cdf19571cd51d71fc166d33a0b892fbca4eae36ab0ac94e6164d51acb2d4e60d4f3a19c3757a93960e7fd90b9a6cdf98bdf259b370ed6c7ef8cb96dba7e3a875e6e7fe6abc76aabad30c8743b3e47c8de5d604c748eeb16806c2e75180a96af7741904eca61769d39e943eb4c4c25f2afd68e9472043de2bb03e9edae20":hex:"f0626cc07f2ed1a7570386a4110fc1":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,120) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"febd4ff0fedd9f16bccb62380d59cd41b8eff1834347d8fa":hex:"743699d3759781e82a3d21c7cd7991c8":hex:"":hex:"dc971c8f65ece2ea4130afd4db38fc657c085ea19c76fef50f5bd0f8dd364cc22471c2fa36be8cde78529f58a78888e9de10961760a01af005e42fc5b03e6f64962e6b18eaedea979d33d1b06e2038b1aad8993e5b20cae6cc93f3f7cf2ad658fbba633d74f21a2003dded5f5dda3b46ed7424845c11bab439fbb987f0be09f8":hex:"1da347f9b6341049e63140395ad445":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,112) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"d280d079110c1c826cc77f490d807dd8d508eb579a160c49":hex:"85b241d516b94759c9ef975f557bccea":hex:"":hex:"a286d19610a990d64f3accd329fc005d468465a98cfa2f3606c6d0fbeb9732879bad3ca8094322a334a43155baed02d8e13a2fbf259d80066c6f418a1a74b23e0f6238f505b2b3dc906ffcb4910ce6c878b595bb4e5f8f3e2ede912b38dbafdf4659a93b056a1a67cb0ec1dbf00d93223f3b20b3f64a157105c5445b61628abf":hex:"bbf289df539f78c3a912b141da3a":char*:"":hex:"b9286ab91645c20de040a805020fed53c612d493a8ce9c71649ae16bd50eab6fb7f3a9180e1651d5413aa542608d7ecbf9fc7378c0bef4d439bc35434b6cf803976b8783aecc83a91e95cea72c2a26a883b710252e0c2a6baa115739a0692c85f6d34ff06234fbdc79b8c4a8ea0a7056fb48c18f73aaf5084868abb0dfaa287d":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,112) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"5e80f87fa2156c62df7be2ad16c4890de5ee5868a684fcf9":hex:"9769f71c76b5b6c60462a845d2c123ad":hex:"":hex:"c829073efd5c5150d2b7e2cdaeff979830d1aa983c747724ade6472c647a6e8e5033046e0359ea62fc26b4c95bccb3ac416fdf54e95815c35bf86d3fdd7856abbb618fe8fcd35a9295114926a0c9df92317d44ba1885a0c67c10b9ba24b8b2f3a464308c5578932247bf9c79d939aa3576376d2d6b4f14a378ab775531fe8abf":hex:"394b6c631a69be3ed8c90770f3d4":char*:"":hex:"f886bd92ca9d73a52e626b0c63a3daa138faaacf7809086d04f5c0c899362aa22e25d8659653b59c3103668461d9785bb425c6c1026ad9c924271cec9f27a9b341f708ca86f1d82a77aae88b25da9061b78b97276f3216720352629bd1a27ebf890da6f42d8c63d68342a93c382442d49dd4b62219504785cee89dffdc36f868":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,112) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"d8a7b99e53f5e5b197364d4516cace4b928de50e571315e3":hex:"4b12c6701534098e23e1b4659f684d6f":hex:"":hex:"d0db0ac5e14bf03729125f3137d4854b4d8ce2d264f8646da17402bdad7034c0d84d7a80f107eb202aeadbfdf063904ae9793c6ae91ee8bcc0fc0674d8111f6aea6607633f92e4be3cfbb64418101db8b0a9225c83e60ffcf7a7f71f77149a13f8c5227cd92855241e11ee363062a893a76ac282fb47b523b306cd8235cd81c2":hex:"729b31c65d8699c93d741caac8e3":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,104) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"c874b427b7181b0c90b887147c36f242827149324fd5c945":hex:"4b8dda046a5b7c46abeeca2f2f9bcaf8":hex:"":hex:"bdd90190d587a564af022f06c8bd1a68735b6f18f04113fdcec24c6027aaf0271b183336fb713d247a173d9e095dae6e9badb0ab069712302875406f14320151fd43b90a3d6f35cc856636b1a6f98afc797cb5259567e2e9b7ce62d7b3370b5ee852722faf740edf815b3af460cdd7de90ca6ab6cd173844216c064b16ea3696":hex:"fe1e427bcb15ce026413a0da87":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,104) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"56543cd6e2ebb1e3dc136a826bfc37eddb12f7a26430a1b4":hex:"927ce8a596ed28c85d9cb8e688a829e6":hex:"":hex:"d541dd3acec2da042e6ea26fb90ff9a3861191926423b6dc99c5110b3bf150b362017159d0b85ffea397106a0d8299ec22791cb06103cd44036eed0d6d9f953724fb003068b3c3d97da129c28d97f09e6300cbea06ba66f410ca61c3311ce334c55f077c37acb3b7129c481748f79c958bc3bbeb2d3ff445ad361ed4bbc79f0a":hex:"3a98f471112a8a646460e8efd0":char*:"":hex:"a602d61e7a35cbe0e463119bb66fd4bb6c75d1fe0b211b9d6a0a6e9e84b0794282318f0d33ec053f2cfba1623e865681affeaf29f3da3113995e87d51a5ab4872bb05b5be8ef2b14dfc3df5a48cbc9b10853a708ee4886a7390e8e4d286740a0dd41c025c8d72eda3f73f3cec5c33d5e50b643afd7691213cccccc2c41b9bd7a":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,104) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"caaf81cd380f3af7885ef0d6196a1688c9372c5850dc5b0b":hex:"508c55f1726896f5b9f0a7024fe2fad0":hex:"":hex:"6f269929b92c6281e00672eaec183f187b2ddecc11c9045319521d245b595ab154dd50f045a660c4d53ae07d1b7a7fd6b21da10976eb5ffcddda08c1e9075a3b4d785faa003b4dd243f379e0654740b466704d9173bc43292ae0e279a903a955ce33b299bf2842b3461f7c9a2bd311f3e87254b5413d372ec543d6efa237b95a":hex:"3b8026268caf599ee677ecfd70":char*:"":hex:"c4a96fb08d7c2eebd17046172b98569bc2441929fc0d6876aa1f389b80c05e2ede74dc6f8c3896a2ccf518e1b375ee75e4967f7cca21fa81ee176f8fb8753381ce03b2df873897131adc62a0cbebf718c8e0bb8eeed3104535f17a9c706d178d95a1b232e9dac31f2d1bdb3a1b098f3056f0e3d18be36bd746675779c0f80a10":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,96) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"2fc9d9ac8469cfc718add2b03a4d8c8dcc2eeca08e5ff7bc":hex:"b2a7c0d52fc60bacc3d1a94f33087095":hex:"":hex:"bc84d8a962a9cfd179d242788473d980d177abd0af9edccb14c6dc41535439a1768978158eeed99466574ea820dbedea68c819ffd9f9915ca8392c2e03049d7198baeca1d3491fe2345e64c1012aff03985b86c831ad516d4f5eb538109fff25383c7b0fa6b940ae19b0987d8c3e4a37ccbbd2034633c1eb0df1e9ddf3a8239e":hex:"0a7a36ec128d0deb60869893":char*:"":hex:"fc3cd6486dfe944f7cb035787573a554f4fe010c15bd08d6b09f73066f6f272ff84474f3845337b6e429c947d419c511c2945ffb181492c5465940cef85077e8a6a272a07e310a2f3808f11be03d96162913c613d9c3f25c3893c2bd2a58a619a9757fd16cc20c1308f2140557330379f07dbfd8979b26b075977805f1885acc":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,96) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"81ff729efa4a9aa2eccc37c5f846235b53d3b93c79c709c8":hex:"1bd17f04d1dc2e447b41665952ad9031":hex:"":hex:"3992ad29eeb97d17bd5c0f04d8589903ee23ccb2b1adc2992a48a2eb62c2644c0df53b4afe4ace60dc5ec249c0c083473ebac3323539a575c14fa74c8381d1ac90cb501240f96d1779b287f7d8ba8775281d453aae37c803185f2711d21f5c00eb45cad37587ed196d1633f1eb0b33abef337447d03ec09c0e3f7fd32e8c69f0":hex:"01b0a815dc6da3e32851e1fb":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,96) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"068500e8d4f8d4af9035cdaa8e005a648352e8f28bdafc8a":hex:"5ea9198b860679759357befdbb106b62":hex:"":hex:"98e32428d9d21c4b60e690a2ce1cf70bee90df31302d1819b7d27fd577dd990f7ffe6ba5ef117caac718cc1880b4ca98f72db281c9609e189307302dc2866f20be3a545a565521368a6881e2642cba63b3cf4c8b5e5a8eabeb3e8b004618b8f77667c111e5402c5d7c66afd297c575ce5092e898d5831031d225cee668c186a1":hex:"d58752f66b2cb9bb2bc388eb":char*:"":hex:"2ef3a17fcdb154f60d5e80263b7301a8526d2de451ea49adb441aa2541986b868dab24027178f48759dbe874ae7aa7b27fb19461c6678a0ba84bbcd8567ba2412a55179e15e7c1a1392730ac392b59c51d48f8366d45b933880095800e1f36ff1ac00753f6363b0e854f494552f1f2efe028d969e6b1a8080149dd853aa6751e":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,64) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"7474d9b07739001b25baf6867254994e06e54c578508232f":hex:"3ade6c92fe2dc575c136e3fbbba5c484":hex:"":hex:"1cbab2b6e4274caa80987072914f667b887198f7aaf4574608b91b5274f5afc3eb05a457554ff5d346d460f92c068bc626fd301d0bb15cb3726504b3d88ecd46a15077728ddc2b698a2e8c5ea5885fc534ac227b8f103d193f1977badf4f853a0931398da01f8019a9b1ff271b3a783ff0fae6f54db425af6e3a345ba7512cbf":hex:"67c25240b8e39b63":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,64) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"d50d4c7d442d8a92d0489a96e897d50dda6fbe47ca7713ee":hex:"41b37c04ab8a80f5a8d9d82a3a444772":hex:"":hex:"b36b4caf1d47b0d10652824bd57b603ec1c16f4720ce7d43edde8af1b9737f61b68b882566e04da50136f27d9af4c4c57fff4c8465c8a85f0aeadc17e02709cc9ba818d9a272709e5fb65dd5612a5c5d700da399b3668a00041a51c23de616ea3f72093d85ecbfd9dd0b5d02b541fb605dcffe81e9f45a5c0c191cc0b92ac56d":hex:"4ee54d280829e6ef":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,64) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"38f3ec3ec775dac76ae484d5b6ca61c695c7beafba4606ca":hex:"9af53cf6891a749ab286f5c34238088a":hex:"":hex:"49726b8cefc842a02f2d7bef099871f38257cc8ea096c9ac50baced6d940acb4e8baf932bec379a973a2c3a3bc49f60f7e9eef45eafdd15bda1dd1557f068e81226af503934eb96564d14c03f0f351974c8a54fb104fb07417fe79272e4b0c0072b9f89b770326562e4e1b14cad784a2cd1b4ae1dc43623ec451a1cae55f6f84":hex:"6f6f344dd43b0d20":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,32) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"6db4ef061513ef6690d57aef50d8011e0dd7eb4432d82374":hex:"623df5a0922d1e8c883debb2e0e5e0b1":hex:"":hex:"b7f9206995bc97311855ee832e2b40c41ab2d1a40d9263683c95b14dcc51c74d2de7b6198f9d4766c659e7619fe2693a5b188fac464ccbd5e632c5fd248cedba4028a92de12ed91415077e94cfe7a60f117052dea8916dfe0a51d92c1c03927e93012dbacd29bbbc50ce537a8173348ca904ac86df55940e9394c2895a9fe563":hex:"14f690d7":char*:"":hex:"a6414daa9be693e7ebb32480a783c54292e57feef4abbb3636bebbc3074bfc608ad55896fe9bd5ab875e52a43f715b98f52c07fc9fa6194ea0cd8ed78404f251639069c5a313ccfc6b94fb1657153ff48f16f6e22b3c4a0b7f88e188c90176447fe27fa7ddc2bac3d2b7edecad5f7605093ac4280b38ae6a4c040d2d4d491b42":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,32) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"8901bec4d3c64071d8c30c720c093221e05efed71da280bf":hex:"9265abe966cb83838d7fd9302938f49d":hex:"":hex:"7c447e700db7367260dffa42050e612eff062eb0c8a6b4fe34858800bcb8ec2f622cb5213767b5771433783e9b0fa617c9ffb7fde09845dafc16dfc0df61215c0ca1191eabf43293db6603d5285859de7ef3329f5e71201586fb0188f0840ed5b877043ca06039768c77ff8687c5cfc2fd013a0b8da48344c568fce6b39e2b19":hex:"6f6c38bc":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,32) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"2c57eb763f886154d3846cc333fc8ae8b3c7c9c3705f9872":hex:"9b3781165e7ff113ecd1d83d1df2366d":hex:"":hex:"9fe7d210221773ba4a163850bab290ba9b7bf5e825760ac940c290a1b40cd6dd5b9fb6385ae1a79d35ee7b355b34275857d5b847bef4ac7a58f6f0e9de68687807009f5dc26244935d7bcafc7aed18316ce6c375192d2a7bf0bee8a632fe4f412440292e39339b94b28281622842f88048be4640486f2b21a119658c294ce32e":hex:"62f32d4e":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,128) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"307d31a594e54f673bea2f977835670aca4f3d45c9c376cc":hex:"0bdaa353c4904d32432926f27534c73c":hex:"aa39f04559ccc2cae3d563dda831fb238b2582cb2c2bb28cff20cc20200724c8771b9805ef7464b8fc06c7b8060c6920fd2779fbc807c2292c8c1f88f8088755609a1732ff8c0b06606452b970c79997b985889404fd907c4668a0bcc11ba617175f4525523494a244da60b238468c863055f04db20ea489adf545d56c0a71d8":hex:"d7385a7bd0cb76e1e242fa547c474370bcc7cc7cf3e3fa37b00fe08a56383ca31d023d8c493f6d42e482b0f32e4f244dd100ea08eee6535e5bb8d27f76dbb7eead6ba8e031ccd0eaeb649edee92aeaf0f027d59efd4e39b1f34b15ceb8b592ee0f171b1773b308c0e747790b0e6ace90fc661caa5f942bdc197067f28fbe87d1":hex:"2ddda790aae2ca427f5fb032c29673e6":char*:"":hex:"0b92262759897f4bd5624a891187eba6040d79322a2a5a60fb75c6c6a5badd117abe40c6d963931bbc72dca1a1bf1f5388030fe323b3b24bd408334b95908177fb59af57c5cc6b31825bc7097eec7fec19f9cdb41c0264fd22f71893bcf881c1510feb8057e64880f1ea2df8dc60bb300fd06b0a582f7be534e522caadc4a2c7":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,128) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"23c201968def551817f20e49b09dbb5aae0033305bef68a0":hex:"bd2952d215aed5e915d863e7f7696b3e":hex:"23f35fac583897519b94998084ad6d77666e13595109e874625bc6ccc6d0c7816a62d64b02e670fa664e3bb52c276b1bafbeb44e5f9cc3ae028daf1d787344482f31fce5d2800020732b381a8b11c6837f428204b7ed2f4c4810067f2d4da99987b66e6525fc6b9217a8f6933f1681b7cfa857e102f616a7c84adc2f676e3a8f":hex:"77bc8af42d1b64ee39012df5fc33c554af32bfef6d9182804dcfe370dfc4b9d059bdbc55f6ba4eacb8e3a491d96a65360d790864ba60acf1a605f6b28a6591513ea3cfd768ff47aee242a8e9bdfac399b452231bfd59d81c9b91f8dc589ad751d8f9fdad01dd00631f0cb51cb0248332f24194b577e5571ceb5c037a6d0bcfe8":hex:"bb9ba3a9ac7d63e67bd78d71dc3133b3":char*:"":hex:"17d93c921009c6b0b3ecf243d08b701422983f2dcaec9c8d7604a2d5565ed96ce5cddcb183cd5882f8d61d3202c9015d207fed16a4c1195ba712428c727601135315fc504e80c253c3a2e4a5593fc6c4a206edce1fd7104e8a888385bbb396d3cdf1eb2b2aa4d0c9e45451e99550d9cfa05aafe6e7b5319c73c33fd6f98db3c5":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,128) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"6baec0669add30acb8f678ce477a2b171f89d1f41935c491":hex:"b1472f92f552ca0d62496b8fa622c569":hex:"5ae64edf11b4dbc7294d3d01bc9faf310dc08a92b28e664e0a7525f938d32ef033033f1de8931f39a58df0eabc8784423f0a6355efcff008cae62c1d8e5b7baefd360a5a2aa1b7068522faf8e437e6419be305ada05715bf21d73bd227531fea4bc31a6ce1662aec49f1961ee28e33ae00eb20013fd84b51cfe0d5adbdaff592":hex:"5712b84c4c97d75f84edd50561bc1d3f1ba451cc3b358b2403b5e528290954348cf7a235b4dc11a72ddbc503191204e98a9744d85419508c8ca76438c13305f716f1e239a6d9f6423c27217a0057aa75f6d7e2fb356e7194f271459ab5482589ea311b33e3d3845952ff4067dd2b9bcc2e8f83630b0a219e904040abd643d839":hex:"29a2d607b2d2d9c96d093000b401a94f":char*:"":hex:"beb687f062ae7f5159d07609dd58d7b81c478d180bc0b4c07ae799626ff1da2be2e0d78b2a2a1f563257f161491a5ac500cd719da6379e30d0f6d0a7a33203381e058f487fc60989923afbee76e703c03abc73bb01bd262ff6f0ac931f771e9b4f2980e7d8c0a9e939fa6e1094796894f2c78f453e4abe64cb285016435ef0e8":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,120) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"7b882a2df81fdb9275fb05d120f32417e8ffedd07457e938":hex:"5c064d3418b89388fb21c61d8c74d2c5":hex:"5bfa7113d34e00f34713cf07c386d055e889bb42d7f6c8631ffce5668e98cb19bed8820b90ecb2b35df7134f975700347e5514287cfef7ffa2b0ff48b1de0769b03dca6610995d67cb80052cb2e5914eb4ed43ef5861f4b9364314fde6ad2b82fbba7fd849dfa6e46ecc12edc8cabfff28d9bd23c2bcc8ab3661c9ba4d5fee06":hex:"0aae7213da279b34d6dcf2a691b2d0333112ea22de0c3c68d47cf9f9f4ed8ad4e03d4a60ec18c3a04ac9c2abb73e1023051029b5e8705bb69c4c50afc84deb0379db5077be1f663652f8bd8958271af2c1ac4a87e08cb526bab8a030652f2a29af8055d0f31e35475caee27f84c156ef8642e5bfef89192f5bde3c54279ffe06":hex:"0943abb85adee47741540900cc833f":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,120) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"51d94d21482c00bb5bc7e7e03aa017ba58f5a23494b72c2a":hex:"fb21cd763e6f25540f8ad455deaccdf0":hex:"019d1db5569eeff83306f65d653b01064854c1be8446cd2516336667c6557e7844fc349adea64a12dc19ac7e8e40b0520a48fac64571a93d669045607085ac9fa78fed99bbf644908d7763fe5f7f503947a9fe8661b7c6aef8da101acca0aed758ca1580eeb2f26ae3bf2de06ce8827a91a694179991a993cdf814efbcc61ca5":hex:"3a9c69c1ed2340bfde1495658dbf4f54731a19b3922a1d535df8d0b2582f5e803b5891e8ad1aa256c923956dcda2430d0c0696bce63295fb61183e040566e459338f908d23ae51f64020c1ef3d192428f23312b285fc4111d50d1add58f4a49008a22c90d3365230e9158cd56f9d84f079bdd673555d4dc76c74b02fa9920e7d":hex:"a93bd682b57e1d1bf4af97e93b8927":char*:"":hex:"7093f44703f2cbb3d12d9872b07a8cd44deb62dae48bc573b11a1ee1c9f3105223423fac3181c312a8a61757a432d92719f486c21e311b840aa63cf530710c873df27fecda0956075923f1ecc39bffb862706f48bde2de15612930fc8630d2036e9e4cfc1c69779171bd23d9e1d5de50a9e0a0de4bd82ed3efc45299980bb4cc":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,120) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"e6756470937f5d9af76f2abe6df2d0bc15ff8e39b5154071":hex:"4500193711a5d817a9f48deafda39772":hex:"92fa22dba0eee6b1de1ddd24713b1be44c7105df90e6e7a54dcbf19025e560eb4986ee080cf613898a1a69d5ab460a3b8aa2723a95ac4a4af48224b011b55fb7582ae18f6746591eab2bd33d82a8dbbae3f7877e28afef9857a623530b31d8198b2df43f903d6e48ddae0848741f9eaae7b5504c67ad13791818f3c55c9b3d1e":hex:"afae92bd56c426c095d76633701aa9bea5ce05490482c6c64ac24468c3e1af6e6030a6bb6649745b011c6729bde985b9242e22105322fbb8853dcabbd00165d0b07d7b499e0238b6513bf6351eb40635a798f7e6e2d31125dda45ffe8964596fdbff55df22d4e9025bd4f39e7c9b90e74b3ee58d6901f113900ee47a4df5afd7":hex:"7d9f97c97c3424c79966f5b45af090":char*:"":hex:"62258d60f0138c0405df4b2ec1e308b374603a9eace45932fdc2999e9e2261de8b1099473d1fc741c46c334023aa5d9359f7ef966240aaf7e310d874b5956fd180fb1124cbeb91cf86020c78a1a0335f5f029bd34677dd2d5076482f3b3e85808f54998f4bac8b8fa968febceec3458fb882fc0530271f144fb3e2ab8c1a6289":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,112) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"30db73d46b518669c45b81bc67b93bed3d0864f7e9e8e789":hex:"5069e2d2f82b36de8c2eb171f301135d":hex:"ef781dce556b84188adee2b6e1d64dac2751dd8592abc6c72af7b998dfae40cbe692a4cae0b4aa2c95910e270600550fca1e83640c64efb1eb0e0a90a6fc475ae1db863a64ce9cc272f00abac8a63d48dd9f1c0a5f4586224befed05be4afae5bd92249833d565cc6b65fd8955cb8a7d7bd9f4b6a229e3881212871a52c15d1c":hex:"750bc1d2f91d786bb1e621192a376f552538ba8c07d50d9e10b9345f31b3e5f9d8ad7c719c03d8548a3b184b741cd06c49d7fb6fe80258d60c01c2987c337c823211cee7c1cf82077266889bc7767475e0eeabb2ef6b5a1de2089aaef77565d40a1c2c470a880c911e77a186eacca173b25970574f05c0bdcd5428b39b52af7f":hex:"a5100c5e9a16aedf0e1bd8604335":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,112) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"209f0478f1a62cb54c551181cbd4d24b796e95f3a06b6cb9":hex:"7be1768f6ffb31599eb6def7d1daa41c":hex:"9cb49357536ebe087e1475a5387907a9e51ad1550697f13c6cc04384ec8a67dea13376bdd5e26b815c84a78f921b506b9e2086de50f849185f05ba7c3041e49e42c0673df856da109a78b8e0ce918c25836f7e781e6b16168e4e5976d27ebc83f20b7bf4beadecb9b4f17a7a0d3a3db27fc65288a754b5031a2f5a1394801e6e":hex:"66db7cc97b4a8266c0a2228e8028e38d8986e79fcbcc3caff3050fdd2de87b7ff7a6895b988b0bdb7fcc4d6e2d538dcfaad43ce2f98b6d32500f5a6e6183d84cb19157a699cdde1266d6d75a251ee1a2eb97bfe6405d50be2b17a58ba6eafaee0a023a28d568fd1c914f06041a49c79b9df9efe63d56883cbbbeaba809273d2e":hex:"4d2ac05bfd4b59b15a6f70ea7cd0":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,112) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"1bfa30b315e7b908263330140fa2d66ed57104784a43cc70":hex:"b7081a3010b524218390ba6dd460a1ec":hex:"8c1f42b5931d69ae351fcde7d2b4136d4898a4fa8ba62d55cef721dadf19beaabf9d1900bdf2e58ee568b808684eecbf7aa3c890f65c54b967b94484be082193b2d8393007389abaa9debbb49d727a2ac16b4dab2c8f276840e9c65a47974d9b04f2e63adf38b6aad763f0d7cdb2c3d58691adde6e51e0a85093a4c4944f5bf2":hex:"8eeee9865e23fa51dbbf197fa41776b7edbdb9381a22c935299cd959a46190788ae82f4e645b0362df89bfc00241964784bc7ef70f6f97e81687d52e552a33af20ae34a3005e0a7b85d094368d707c3c4cd3ef31c0daf3ccaa1676609ed199327f4139d0c120977e6babceed28896d2cb3129630f3ee135572dc39433057e26a":hex:"4da85b8ec861dd8be54787bb83f1":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,104) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"fc47156a693e59a1dea0618c41441fe669fc65dcfb7d0726":hex:"ea1935ed014883cc427983d7962d9992":hex:"0d85b8513becfe8c91d0f6ffb65ec31f2cf406c51c0da88893c43d1327fd8ad1f4bab2d7b5e27438d643397034a72f8666bf641b6781bc90f764db387eae6720b5723d510194570ccd773e1b3bebfc333cc099d078583e8dac60d174d332925a24a45110c8d2abe8924ea677ac74db66ea789e2838efc96c78bceaa6236c0a67":hex:"3e4f0a586bad532a08c8863ebba01fd25014baa907e6032ee43d4a7dfc7c3171916dcdf9faee0531f27527872ae4e127b6b9aaee93f5e74d0ab23f3874aa0e291564bc97f17085dd7d5eb9a85d9f44574e5952929eda08863b64c85dd395c91b01fe5bef66e3fa8f9ee5bf62c25d80dc84fbe002ecfd218430b26f3549f734a1":hex:"8781b045a509c4239b9f44624e":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,104) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"b5fcd780a03ba80341081ef96b440c0e4348afde4d60c1d5":hex:"ad20cce056e74ec5d0a76d6280998f15":hex:"28f8fcf23b9c1ba40c19ffc1092632e35f234c1e8b82bcd5309d37bf849a2ce401413d1f242cf255ed597f9a93a1d6e50676997f95aa612e580d88234a86ddc404292746f0b2f5cf15abebcea6659f998ec6a1cb5a9914fee5aa1aa5d04b3c20914e45095e4141ce9c173653dd91c3ebe4ed4a9a28f3915d7b2edba34c2a58d8":hex:"6316f3beb32f6f3bf8f2ff6a2c160b432bafd3036d3eefa1e4ec204f24892e37dc4d75c7ce9a24b5c49fb4df901f35ef9d5955f7dc289c56cb74753f4d6b2982267d5269d12237e21202a65061849c65e90e6702dda03a35ace3a3a098d16b4bfbb85b7232404baee37776a9b51af6b3059a5f170f4ebe4ecf11061ca3c1f1f3":hex:"2ad4520ddc3b907414d934cc1d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,104) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"4382507dddccf1385fc831da8924147563416d0656e168ec":hex:"a37687c9cd4bdc1ead4e6b8f78bee7f5":hex:"fa9ae30509cbb6fe104c21480ae7b8ec9f12f1afb17320d77b77cdf32ce8c5a3f7f927e501118c7ccd6975b79225059cef530a4fcb0a9719f5e2d3bebe7bb6ec0855e495a31e5075eb50aa6c1227e48b03e3fdf780084ac4912eb3a5674cca9dd6ac037366b230ae631a8580d2d117942dee5d5ddbbb2233afeca53289cc4f68":hex:"e5c5430b960aa35dc8540215c2772d66811270859e33dd4477904759e7e5eb2986a52a4ccc9f592e614147b5ea2ead6636a15c6426336b2995d9a31ab36d76578c3540bc6693842a4bc0491c7963ee9cda2317951cf93244bd30bcdfec69a4767004636fe7d1be7300c35e80627bab9236a075a803e9e1080b9159060c643a78":hex:"4221818d4be45306e205813789":char*:"":hex:"b5b36719bc4d13a5fbf37188ea814cdf3c97a430784330540325c899570e15482300bc82c5b8163074e0544c5132e3ce93bba68bd7a8d2db81d1431b424b697c1158c4d70625666d5ff99145ca34856815c905b5a0fd95806df56b9cd5b384bda3e394b409048eb1037144cc071539c02397e931da28a43cc354d584643afd4f":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,96) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"7a66db3450dac9a1e63d2639f34c5c6a3fbfb3c8e8230199":hex:"21f8341529b210ade7f2c6055e13007a":hex:"1699bc8c198ab03e22d9bc4f3682aad335c6e35f3f616bb69769a9d5a202511797e770ae0d8d8528ef7b2bb25b4294d47427b43f0580fa71d93fdef667f4f4196f84e41c0b1978796d0de74a94420fb8571bff39137fa231c572b31be9ae72338288bef5f8c992121dc918538551f346e279a9047df14ec9fc0fd399cd3bd8d8":hex:"6463a7eb2496379bc8a5635541525926a6f9fa718e338221952118ae4cf03a85f2074b4ebaf108b9c725809be1e6309c3a444b66f12286f6ea9d80c3413706b234b26372e8f00783819314a994c9e3ecf6abdd255cbfe01b3865e1390a35dcd2853a3d99ed992e82ec67ba245f088cb090adade74bdbc8a1bad0f06cbea766a6":hex:"4af02b81b26104d1d31e295a":char*:"":hex:"53fe6a34d280f2c96d1ae2b2e8baf6abd67cedf7d214312f75dd4a1bec28a641dda3e71aa398726b2b0b1f515e1f4259ee97acaf17f122db9ec7814c2de6a88d36c3ac106396ad03d337c2cd2d2b9b4b7170e23a5848ca7ea129838f967dfdfe83b45ff2a9be699bfb2346115465d59f074f09e24d8fcbd9ece0018c92776c43":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,96) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"1f5c818f24d201f9fb23fcca211b0545eee5c5c9b440810d":hex:"3a163067bdd90fce0406d1c198a88771":hex:"a5e94e233d04fe0c4b6c4684b386902fe05096702237dfbe76f73befa69b6f30394cf9fe3358997942df65842748fb4f075a3dc06e147bd8d67fc4371113a4d75c70219257c650a6f38a136659e20a1cf3a119397835c304e0fb2a33aa3c3019175c86463043d5edc6992874f61e81cd0d26af8b62cf8c8626901d4f16d84236":hex:"9a7566817a06f792e96a6a2ba8e0a01f8837e2de06796e68b0782cc54ed0b04fc5e24a1ad37d5ffb035548b882d88150e89915b89f57cde2bf3c43ab9dae356927daef6bd61cc9edd5e1b7a4abea2f71313677f1b2fdf3d8d4a7e9814ea820fbc3e5c83947db961839a985a57ced7f5e4a1efffcfd17a2c806d4cdc1e79162da":hex:"b124eea927e2a62a875494a1":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,96) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"9a301f7edf83da63bcf37216a3a33d7613331c3210281dd7":hex:"d73a546b0fa307633ac89506fa86138b":hex:"f57fe548cf4a551a216ffb24a1dcf1b79c95f9abf06443fd58af042d287c2165db373c82a94172db517840f22e45e966e3ead91ce1ddad132bcb844e406e84b76a0b5b0ee23064b66a229f32a2d3b9c71103f020c4ba57fc0f0608b7114914cf2ada0c5a9bc4afbfa9ce5da320f34beb2211d569a142f53bfd262f6d149c4350":hex:"e09cc8543db7804870004706a26e94b457c125bd648b581a196f962f2ae8fa55d9bc66530ba5020e22d282080b4720dc9a2096a11c0fcc3d9a67cd1cf95cd7cd2417ba308c761e64be24347a14c9423447094a5c72a0043c288b35e753ba0aa748f208381249fb1c8d195a472192404b6c8172663ee4b4d4ecfa426e1fb003f2":hex:"f536a3b8c333b1aa520d6440":char*:"":hex:"124a327a8c22b7652886dac2c84b8997ca8a6f61c9ba9c094b5aea41eaa050a6df6cbf280259e5466071bcfa53b4ebc76c3cc4afc8c0385189a5382933aa57c89aab78dca84331e0fe8f0aab3a7857d3e13f08dcd90ec5f0684f82088ef8eb7fd67e75de43b67afc3a0beb458f5ebd61b2c779e6c539d795c667bb7dcc2b762e":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,64) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"fd40e8226fd13cb95ba50b7cdf0f07f7ab7037cf8705ca50":hex:"3406e70cbe16b047fedaa537eb892279":hex:"390b18d22d5ecc0b5a524ae9afac6fd948ac72d1360775a88b385aa862cce8a27f3e4b420e539bec6e8958f8c1b5416c313fa0a16f921149a2bfeae29ad2348949b29a73970e5be925ec0c35218b82a020cf21bb68c6931f86b29e01b85500a73f3ee7eb78da60078f42550da83b2e301d151d69b273a050f89e57dfc4787cbf":hex:"75aa7df5c3c443d48ee998064b6fd112c20d2d90c98e00d025ef08d1ad3595385be99de47fa627549b827c48bc79eb1dcaf2f1be95a45f7e55755b952aee5ae0748e68bee1b014a628f3f7dc88e0ebac1d1d00e268355f5101838ce125c57003aebc02a1c9d6ae2cd6e2592f52c0be38cef21a680ae35c909cab99dce9837aef":hex:"69e06c72ead69501":char*:"":hex:"6e8d661cd320b1b39f8494836fcf738b0ab82873d3903c9ee34d74f618aea36099926b54c1589225ec9a9d48ca53657f10d9289c31f199c37c48fb9cbe1cda1e790aaeedf73871f66a3761625cca3c4f642bc4f254868f6b903e80ceeeb015569ace23376567d3712ad16d1289dc504f15d9b2751b23e7722b9e6d8e0827859f":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,64) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"a85ab87563b809b01725764d64ba4cc6a143e2e0362f0c52":hex:"9f991ff16a3e3eb164a4f819c9f1821a":hex:"df289511f78d8fa2505afc4c71ab1d7c31a8d15d1e5fcbb29d70f0e56f89c4d7b30f1b3b4745b5d2cc7af34fb4c95461372bf516ec192b400dc8fdb0ca9fe1f30f5320d0fadf20155cfcddcf09233c6f591c1c89917e38a003f56b94a1e2429d1f2b6297db790d7dce84d9fa13d2d86a0e4d100e154050b07178bee4cdf18126":hex:"ef43629721b50bd3656b7ae31b6e4b4ba1cf2c72ed0460ee7d9fb416631ddc597e5f9aebbcf4442b95cc46e28476a464dd87caf9c1c1d6c99d3e3e059dc23f8d2fe155ff5e59c50d640bc052c62adee3aa1295b38732e3458f379e98a8dbdfed04c22a5761792e87fa67ecbcbf3b90eb1bcd1d3f49e60132452f28afece83e90":hex:"dc4c97fe8cc53350":char*:"":hex:"ff0e531c7344f0425d62d5fbedf4bc8d3d5cc80647e67b852c1a58ad1516d376d954cb8dda739f6a4df3cf1507e59696610bcb6b34340d6313028e00d7197845d392e73331aaf168b474a67364d8f9dab740509fabf92af75045f0afabc1b5829264d138820952bbc484d1100d058a4de32b4ece82746b2b4a85fb2993d4add8":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,64) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"f4f1e03abb927ffd0b081b9dce83a56a6dd419a6313ac34f":hex:"d1e29bb51a3c4e871d15bb0cd86257e2":hex:"ae2911cdaaad1194c5d7868b6d8f30287105df132eb0cecca14b6e23ec7ac39cc01da1c567a0219cca7b902cc2e825e30f9524a473eb6e1d4d1beff5ab4f29103b2c7522a33dd33182fa955c4f09a75196b1072a6f0340fc55a802d29c7067f05219c21857ebff89ada11f648c1f28dfbfdaab56028f05509de17e2381457ebc":hex:"0e70421499bc4bcb3851afa34cdf5be374722815abdd9bcee5f332dbe890bdc1c0210ab10667e5bb924bf3c1120e25a0c074da620076f143940989e222086d1b34a1200d09aea1f810ef6de7d8520c65eef9539fde5a6422606c588fce6264e5f91f934ede6397c4b307d2d7e07a518fce577a427fa92923cbba637ae495afad":hex:"44f760787f7bc3c0":char*:"":hex:"2199fa5051461b67581429ab19de2ccb50b8b02e12c0e1d81a8a14929f84e09d9715b7d198e77e632de4af1c08c5041276204a7ed76646385e288e96e1a4b0b0f2b1a9df7f0892beaea3cb58d9632720158f6daa4cbbfc0ebdc56ff6a5175768ff2abd24cb7669bc3fe40f8aba7869d2dd7dac86b6ebc4e4ce261edbec88db17":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,32) #0 [#1] +depends_on:4:2 +9:exp:5:hex:"33efe20433c6a1ad261a1fed494961749e5bf9d35809b59d":hex:"dc94673b0c49c6d3b4611e278212c748":hex:"919f7397a6d03836423b7cac53177fcfbe457d4aa4348646f646aae1bc5a15568cdb8c96fabef278ace248aca531110a4f4f9e8ab0c32525ad816ae3facf03175232dc84addcd6065f9cc1f513966b63fd27e91a09f1921b95d6bd8f08f1dbce073bcf827847f774514b478b9d7fb5426847dd4dee6f39b5768c1fb729b32d03":hex:"cfbeb61be50def25f513346498f75984bfe797a8ad56be34f2461e2d673f6ce14e7479a59777267b75dadc6b9522599ebe5d7b079495a58ca187ec47796f6ee8c322278ad7451b038c938928adcff6105a8ea3780aedc45b6a3323d3ae6fbce5da4fb59ca5ec0a16a70494c3c4859672348532505e44f915e0b9b8a296ef5225":hex:"c5098340":char*:"":hex:"c5e47d8c60b04df1974b68a14095d9bc8429a413d21960b15bae4fd7356bf7872e0da0a1a385ca2982d3aa3182e63ea4bb8ca01410cd4e71ddad34aa1f12c1387902b3d56634f89c619a2e6756648ab3bf90e9bc945afc9140eb935b633bae96bb067e9ee421697bcf80b14b1b88dbf13e010b472a7ca5411db36848b9c7a37f":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,32) #1 [#1] +depends_on:4:2 +9:exp:5:hex:"3ed5dadefa0f6d14fedd1a3cdbab109f6660896a952ac5ab":hex:"553a14f1e1619f9d7bd07cd823961f25":hex:"eb8ea81d3e328a1113942cd5efd0f2b5e7f088791c8fc05690a34584101c4d493628ee7d0099a2865ac194b9124c3fb924de0c4428d0a1c26ea3ad9a0bc89187a16673e3b6f7e370dfb2dc26e8a56a9cf91f9c2088c020a766efe0d0c91689743a603f2cd1e300a6a84828b3b515a4b9a06e6bb20457bf124cd6ce4ac8b83d51":hex:"aef617f69724e020309ec39d9587520efda68a8e303686c3a41ef700cba05b7c6e43e95aadb1a566f61650c87845835e789eb2366941e3bfef6d9846af0e0dbc43249117ad6f299bbc40669ac383cdf79289ada6ccd8ccfe329a0dc6a38eea1a99550457102d10f641cda50c21f533b1f981663f74a0a7c657c04d9fc6696ff4":hex:"dc413c4c":char*:"":hex:"bc1f34991a48aabb0fea513f790f0d223e9feac4c99fa1e8427f01ab8b4b2827cfaf239342de36051a846af0306a3f82e7aed98dd0416fb078bc7f3b617b00ceb2cea4ddafc22dd022efa8303e9804510e0e888065d8427345156d823f796f74130c06db9f9934435552b4fefd051953e20ecba3a4514ac121d7d2097d597439":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,32) #2 [#1] +depends_on:4:2 +9:exp:5:hex:"6d97e8bff3923a778504fb917dbc1428a1328587047697d9":hex:"0c28dc4cd53725091c2fb68a476c2e40":hex:"f3932f5e82d75a1e3eba1591c17769e1a45819ccf057c31e76fa810b93678766d25905e859775c244e96bcafbc75c4a2d95e7d02868ccb2f65e49276f0b645ac8cf6e3758402304a3c25ce2de0a49f401b1acadaff8b57589b45cc79130ddc8387f41cc383e33ef38eec019152051c756198d6f782ccf56297b9fe944269a65a":hex:"dc1a81efd51e967767f5bdd7e2e425732c1d28451f2bf5bdf3f5a6492279330594d360dd8a193e5dbde1be49bf143a35c38bcd059f762ada65c5119e097f0976891347f4d829b087bd72daa3494b344cbd3370c4459ca243bd57aeda4cb86cdd0bf274f07830cdbf5e5be4eb9b742ddffef8aa35626d2b9ea0a29d3c3d058b28":hex:"e6d6df7a":char*:"":hex:"39327836e9d8cfb59397adcf045a85644c52c3563290795811f26350c8bce8f55ca779cbcd15479efd8144b8a39ef611153955c70bf3a7da9d4d944c2407a0d735784fcb68de1083eebf6940ebc9cf92f9f139c01404b503ff64e61126a94e881351473507884357040fd32714b872c254349071069644e2bd642905521b944e":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,128) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"2c78e29971e90a01bb65973f81260b9344fa835751f5f142":hex:"f1a23ce6e2bc9088a62c887abecd30ae":hex:"":hex:"":hex:"d4d5c22f993c8c610145fcbe4e021687":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,128) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"8c582d5b6a40ef0e4048ec20f0263572d7cc82704e380851":hex:"ef221a1c66fda17906190b7c99ab60b8":hex:"":hex:"":hex:"6327dcb46ffb3d0fd8fbf3d2848a8f01":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,128) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"3a58abadd29e946e23ca9eb09af059913d5394971bda6a4f":hex:"7c29b3196d44df78fa514a1967fcd3a6":hex:"":hex:"":hex:"fc123944bbea6c5075a5f987aed9cf99":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,120) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"04bdde4c35c385783715d8a883640851b860ce0e8436ec19":hex:"783f9a3c36b6d0c9fd57c15105316535":hex:"":hex:"":hex:"23e21a803cac5237777014686564f2":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,120) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"4ba5fba0c22fbe10c2d1690c5d99938522de9c5186721bac":hex:"2acc2073089a34d4651eee39a262e8ae":hex:"":hex:"":hex:"7ac742c859a02a543b50464c66dcf5":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,120) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"f12890b0a8819faa5a8e0e487f7f064af42fa6d5519d009f":hex:"c937615675738f4b3227c799833d1e61":hex:"":hex:"":hex:"88300bd65b12dcb341f1f6d8a15584":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,112) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"51878f3630298a81297f4a21514fea637faa3815d4f26fae":hex:"1f939226feab012dabfc2193637d15b1":hex:"":hex:"":hex:"eed5fcb7607c038b354746d91c5b":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,112) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"ae596e74840a600556a06f97b13b89e38f67c152f1a1b930":hex:"e2076e1050070d468659885ea77e88d0":hex:"":hex:"":hex:"b4586bdbd4b6b899648f2333eee0":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,112) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"fd33b7a0efae34339ca987b5eb8075385fd1276e63cc8530":hex:"2d07bb8616fc0bbb71755a1bd256e7fb":hex:"":hex:"":hex:"6b60d645220cfde42d88296ac193":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,104) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"5685b12a6617d554c36b62af5b8ff2239cb3ffb1d2c40e14":hex:"6c31194df99d08881fa5b1dd33b45a92":hex:"":hex:"":hex:"69431593c376c9f8052bf10747":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,104) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"036ae037410dae9f0741608516d03b855c9c1851df8c54a4":hex:"73599275f8237f14c4a52b283c07275d":hex:"":hex:"":hex:"6f7249d25c9f273434c4720275":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,104) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"ac144f39ebd6124bad85c9c7fb4f75bff389ece2e8085d83":hex:"d0871bfc3693245be478e6a257c79efb":hex:"":hex:"":hex:"5a99d59631d0e12f58b7b95ccd":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,96) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"a8a541ff11a1b8548e832d9e015edeccc94b87dadc156065":hex:"c72bb300b624c27cded863eba56e7587":hex:"":hex:"":hex:"ea2528e7439be2ed0a0d6b2a":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,96) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"30dd8f400335e9c688e13cc0b1007bd21736a6d395d152e2":hex:"28899601fa95f532b030f11bbeb87011":hex:"":hex:"":hex:"35625638589bb7f6ccdb0222":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,96) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"cb8f672b04d706d7d4125d6830fff5d2ec069569bea050ce":hex:"375d4134e8649367f4db9bdb07aa8594":hex:"":hex:"":hex:"70610bf329683e15ecf8c79f":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,64) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"bf71e5b1cd6eb363ecd89a4958675a1166c10749e1ff1f44":hex:"9f502fb5ac90ff5f5616dd1fa837387d":hex:"":hex:"":hex:"a4b5138122e1209d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,64) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"5b9d1dfb2303b66848e363793bdca0e5ada8599cb2c09e24":hex:"2ee96384dd29f8a4c4a6102549a026ab":hex:"":hex:"":hex:"3b33a10189338c3b":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,64) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"a35ae271f70ebacb28173b37b921f5abcad1712a1cf5d5db":hex:"8d97f354564d8185b57f7727626850a0":hex:"":hex:"":hex:"813d2f98a760130c":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,32) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"9bdd0cb826d5d28c2ab9777d5a0c1558e7c8227c53ed4c4f":hex:"daf13501a47ee73c0197d8b774eec399":hex:"":hex:"":hex:"a6d108c0":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,32) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"81b4d5ee4e1cbee1d8966fb3946409e6e64319a4b83231f5":hex:"bc2f9320d6b62eea29ebc9cf7fc9f04a":hex:"":hex:"":hex:"a47cdadd":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,0,32) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"5813627d26d568dfe5a0f8184cf561fe455eb98b98841fe0":hex:"817199254a912880405c9729d75ed391":hex:"":hex:"":hex:"d81d9b41":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,128) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"94f160e2325da2330fbe4e15910d33c2014f01ace58e5b24":hex:"80a1b99750980bf2be84a17032fc2721":hex:"066fdd980cf043a732403ee5f65c82ca81e3fc858ad3cfa343014a8426fd3806770f127e2041efb42e31506ce83390ac5d76de2fe1806df24ce6e4bb894972a107ef99e51e4acfb0e325ab053f9824514b5941ab1ec598fbb57a5d18ed34d72992a19215d914e34ad1a22326e493d1ff2da7bc271c96ad3ab66d0c32bd711293":hex:"":hex:"dd153cfd7aa946280660c445f586fa28":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,128) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"4785846f7c0524e78f3eb137fd433e1808af64549af69183":hex:"5334476a5fa3fa50dcc4b12f8ac00b51":hex:"e70f82d1e3361ac5a5c9a087e47984d5533ba296f9b7e4a192a4ab28a833cdbbd5cece3415cf6fbb2f8055560b5c31c98d83d139954e1c03a464739f1eb5ad982c4371cf20b8984bbd97d5f40b336f5e96df3d272b95f7547be15c3bc05b3caac7d08c5eb5de8bdd246e74f6caa6bff76ea0417730ce72b911867f88fdcf73a0":hex:"":hex:"c59231ddaae98e0e8db6b3fe8f4d3427":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,128) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"49b085fe1a8e1ae769ed09fc585d29eb24d589689992e6c5":hex:"899878b0684fb865d30190821817b88c":hex:"f789eafe3d02826b619ca4fbca7bb1919e5c6f7c33824a2f7f815dc50e329979705f7ef61e9adf7899d34f1b8840384ff62ef6d29eea38c45d12be9249aca69a02222cd744d81958c6816304ff0d81d6714a2023b3dd9d940db5c50afd89c52774d28d6afde2b6c68425b6acbe34682531a2e57e2b9a7729b3e8d96a729b15cc":hex:"":hex:"2c84bf7a8947ab93b10ae408243b4993":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,120) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"75847588760ecb6ca548747b743914c89fea367a5ccb81b6":hex:"7d8a9fd254e2061c01e39eb574951924":hex:"b03c57dfd49152401a225357f1d6e533f3a423e5cfce07b8ae7ca9daf68645e5bd67b3ca2421eac447530b27c6dc6bd9c7f1b22441b8cc8c4ac26cec2c9c0d665a35b66d779a3772d714f802d6b6272984808d0740344b6abdb63e626ef4e1ab0469da521c7908b2c95a0fd07437c0e9d4d2451ae189ad61ff19f4efb405127c":hex:"":hex:"e8aac14b53cdbc2028d330fc8d92a7":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,120) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"e3a18a96d2e45d2f60780dc39cee7160e28cb810bf09858c":hex:"26a4d659665ded39b7a1583de756d0ad":hex:"83f8d9c58169b4c68032321197077ff5c8ee4ebb732b040748e1b55dcf53375ae86fb9646a672b5c5bc805a92c475cbb6d0ed689a58abdf2230250a7d3fbd8cfab07835fa85e738a7f74bc3e93616d844b1ec61b79f23dfea62e1815f295d43f61d7b5956103b31ca88afb0b3d37eb42cf77232dbf2258065232971c397dcbcb":hex:"":hex:"dc034564d4be7de243ff059b5f9160":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,120) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"7be3909170ea7a2ff76f9f28241d8cc48ddeafa8517c6f8c":hex:"8dee7e29350c60c5bcfec89da6617d2e":hex:"f6e9e7a7f9716760eb43060d5c80236a0f118b0f750ebd5df01fd2dba95c556ecd2e54a3f337767321abf569c8137a8e48c5b44037ba62951e9f9f709e6e4540a36d769f3945d01a20a2ed1891c415a16d95cab7ddf9bcebf18842c830067509a2a5d49a9684324c433d53824d2f8fd326b149af17f40e5bf5e49185738fba60":hex:"":hex:"942b52277e9dc0a30d737d00f5e597":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,112) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"1fe413bafc4753e1511b580c830449bee56e0e5b9acb852c":hex:"e30829f64f3eda13bfb2ac572aceb3de":hex:"6c772d08b4d7507e35804572fa697c646c77301954cc5c160941e49e230697ed8c23338b9f30c3ead69b1c1a2329ff025dcd3c0d0a9cc83fee4979448aa71ddb9d569bedc8c497a2a4ac3b60d087d7872f0a110bf90493ae7da03b0953734223156cd2d6c562e4a978a6dd5cdb229dd58dd4d0f50ac015f2f5e89dac4aa29a19":hex:"":hex:"87737873b82586bb29b406946cae":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,112) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"b4bc4378d423931f9b320bb57df584c641406c1daa7448ad":hex:"eca70e10c0358838a3f4a45c4b016ccd":hex:"68d1c045c1604e3c3dd4f7c7543240aca8dbc5266dc18c5a8071e8b09e3700b7cf819044b2722d8db92021f42a0afb295d7b16ecf4e4704a50a527a2e72d7f53617c358e3b7be3d7fecda612ce6842fcfaa68f2d1b8a59d8b8391779f2fab99f820862c94029f444abe62367c5de0a4becc359660e4a5366f7d482bdc362b866":hex:"":hex:"06f95ca69c222a8985887925b15e":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,112) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"1cd4414ffd24e830e2dc49727efa592e430a6a75391cf111":hex:"a08e32ad7d63f975de314ad2c0fa13fc":hex:"20a271f1f4c6bea8f1584ab39a7179ec448650e2ff67a7338d1bc9fab7f73b2ce5222cd07ded947d135d9d0670dc368f0a4b50ece85cbf641877f9fe0ac6a7e6afb32fdb1b3cd35360bb80cfffc34cfb94dbcbee9ca5be98a0ca846394a135860fba57c6f0125dcb9fb8b61be681ada31a997638ee172525c03dd13171534a91":hex:"":hex:"c68842cafc50070799f7c8acd62a":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,104) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"9e0ef9ed5e6f00a721a9893e1f0d9079c5aa667a4cdd2a52":hex:"5f015fd556e87ff0d0df586fb452306d":hex:"b82986135e49e03f6f8f3ce4048ded2e63ee0c31ddc84929e022ee8561159179b3bb4403ebdafdf6beae51ac5bf4abed4dbc251433417ece3228b260eca5134e5390cba49a0b6fcbbbabb085378374e4e671d9ba265298e9864bfce256884247c36f9bddceb79b6a3e700cb3dd40088ba7bb6ab6aa11b6be261a7e5348f4a7d1":hex:"":hex:"ec9a79a88a164e1a6253d8312e":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,104) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"9bc8f15d98e089d60d4db00808700053f78b33c31652c3e4":hex:"5cc0ff9bb7d5b9b2aa06f6ecf669d5bb":hex:"24ac95a6ed2f78853f9ab20f53de47e7f662f72aea454141e2131aace7ed2daeb395bbccdbf004e23ce04ad85909f30151b6526c1ce7934726f99997bbab27055b379e5e43b80ad546e2d1655d1adad4cbe51282643bb4df086deb1b48c1bd3ac3b53c4a406be2687174028ecf7e7976e5c7a11c9a3827813ade32baef9f15ec":hex:"":hex:"9779b7c3ece6c23d5813e243ec":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,104) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"19afc43a4481f796d77561f80b5b2e1514c96c5d1d86e64c":hex:"d4c06595fefd4a81bbbd4b40c2e1989d":hex:"98fcca51352998d0126b5539e3fb9a238ac31c05954fc206d381909aee70983b6ab99d3f3efe8530a1c3cfe3b62756321b1d0771a5940055eba1e71fa64f29291aa5e5b0af0fcc8e6f5a02688d9e93417225eded791a35217822ffb346d3fa2809b65abe729448316be30cf661137d3c0e49846cb0df598d90eda545afb64a5e":hex:"":hex:"ca82448429106009094c21d70b":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,96) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"b4fc31dcfef6203fdb296cc928c13b7df56bfe6f32583057":hex:"6308a78dc8f3c90442dc52196649c38e":hex:"2567d80c253b080c0158102558551445d8ce4d5ddee2014a2be5cbad62e1717a0fd4d2059447c3151192951eb11a4a7b19a952f6ba261c87f10f4c9032028de3cc5a2a573a4e993a690fc8954daa3ec92743e7343e75b646c4fa9cbc3fceb4f5d59bb439c23754c4d9666fbc16c90c0cac91679b6ad1bfe5dcf6bd1a8a67c6b5":hex:"":hex:"9d1603799e2485a03e7b05a0":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,96) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"1c2d9412486c381440213e1588b6bb58b0da53300b9d3089":hex:"727ed8846daab874d5a9918b47d016f4":hex:"656430f0c1423018b5e2efbb1e32a5385c1a9a1779c4dbd585dea91edc39ea8752ebfc2d8064251a8a5ae71e1845f24a7e42c6371c2ecb31e2229d5f4923bffc21d4804575a84836f3cf90ec6047bb360b558a41a975ece111b5284dfa2441705a6df54fc66ca6cc1af9163ecc46902fac337d5f67f563fde8e8e7e64b8588b7":hex:"":hex:"05ee6ce13711535864674a5b":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,96) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"abf7a97569427225a4bd5143c716a22e62f84c145bb51511":hex:"e255088cdfe8ae5c9fea86d74d2f1b7d":hex:"b850993300f54d078f83ceb9aef7345bbf758f92365b6625c210f61dad4f2a2319f51d883a383a706392d3dfca1706eba585a6fac8bd4294c0bb2cb3f6b454d5c97819e8e5c926754840261b07ec4ef1f87cf281d75c187839689944230306e1903047915e086043990745864819ad713d34a244aa4e9d755fdb137105d7eed8":hex:"":hex:"0c9c17388d0610f99d0a093f":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,64) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"45a6df655e88bc880acff41520aafd0cc8aa8aeb8952fd06":hex:"1125e1de94970c9e7be70e58e7626ef4":hex:"fe9838a445b8edef19b3e9f33c8c0c265b3a12c97b8ec57ceb94f65ae5227177de38f1e338dccb2b24e5bd0f0eb8127f83eba0f1ddfa55198789df0cdd1d977fcb985ad9c7d51b96e749d2cf3cc7a1ec4dfcbc641a1a022d55def328e081af890a7e699f2dbafdf506389e045aa1219239d5868ba675a3925602b6fb6f6e6d37":hex:"":hex:"1c3bd1e0d4918e36":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,64) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"279f4f2ab4b70778fdb9ca7800cd20e323601d7aa2c75366":hex:"0f7b402560735cf03d5da58de5b6c685":hex:"7dd9a8c848bbcf5127161c8a419a436a0dad559f7c1613cdf41594e177016acb1ccf44be852185c42e7120902a42efe83855995ab52cf5c190d499fcfd698c671fd72949dc3ea7ddb874e586a3aa455a021cec7b5f8608462ca66f926aba76e60a5846d4eb204155cd3c1328da51ba35c3007b8bb394f34e3a8b81ddd2ea1115":hex:"":hex:"dab612351f75e2cb":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,64) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"6716ab937755684af7403e6fba5452c1b11568a9047bb50f":hex:"2fd5a446dd564619ef75b6e00905ffe0":hex:"20d261d3192996c21da69e979c26f5f937e6ea4cb7b05c6ef556ce4d86ca0fe85ec2425d274c43b5212fe9d27bb48b04e887461a9f45f524059b87eaea2e287a8d4537f338b0212012a9d4b6610e8c97dd554e0b3c3133e05c14d0ddab3524c93fd527e223b1996b4cff0a4a7438f1d54890bf573cd803941b69e5fc6212c5d2":hex:"":hex:"f1d743b7e1b73af5":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,32) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"7dc94b5bbd6315ad8d2b67f0c683d10cf456f822a3ebb024":hex:"6f3eedeb57dcf12bfb3cd80849893c90":hex:"ee1ff367f4b23c156e3dccff84ae4bf2b8ecec1fb5ffd25ccaa93b6c6834389bd79655bd4bac75238eb0f65d3603ecc57c8774798309e85b6677e78ed2077b712cf28795d0dc8fee994f97373a82338ef67c62378136a79a990ecbcd6367445e805efa98f9168826e57cb8dd7e7b1d5c89ad98358646fa56dd2a71c40e0275a1":hex:"":hex:"4dc74971":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,32) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"3bbe223e253bf272599e28af6861013ecd0c88710947ed41":hex:"4fbf09ffaffb600f0de38fb12315cab5":hex:"5388146f6479f7b3b280f45655a95b847ee27c734fb2fd91f6c009b1ab1810c772c7435d3221069f9490d251b76e740147906ac1db1c209c175b21aa10881c44fb307d4d2900aa3b1d56fb0edb9f2a58505653a17fee350e12755b9656bc65c78c1593d5cb7178e29f82209caf53e60fddf725f6957cc9718bf410c4a0229ed4":hex:"":hex:"fb845ab7":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,0,1024,32) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"461877813acfe6e9979eab729b52e3d192b3236758bb6563":hex:"6985cf77b75a47a3978dd6412d59200b":hex:"385551854a89ab37063ba0ed911501b3d632153c5c2992e154c0a334bc36620476f11495437b842409e0954f7352cbf288d158bdbbaf72621ea2ce75b708bc276f796c5aa7fd0071e522c5f175a9e7787deef79f6362101aa3607b4588f2e1df7127f617c6073593a1c792b959e201e4a7a43ea8b1c3af026376439ef629266c":hex:"":hex:"c840d994":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,128) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"09770f9114120a2c1c3cc416fe0eb8699e07141158a5bdff":hex:"cff291d2364fc06a3a89e867b0e67e56":hex:"":hex:"875e2e5b5c02e0a33e71b678aa29c15ce18ec259cf4b41874893ed3112daa56ff2a7475681b8b3d9028ef184d30658e881c908f3588f69899962074db4ddfc0597f8debb66c8388a1bccf0ffe2cf9f078dc1c93f8191f920754442ad4a325985c62de1a57a25de4e9ed5c2fd0f2c8af33f3b140bac12bf60fdb33e0ec557955b":hex:"81f1eb568d0af29680518df7378ba3e8":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,128) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"4fbf1c785c087ad06b43d4163cf9b9396deffd3712856379":hex:"1c8f41424acaf009996ceaa815b24ad4":hex:"":hex:"96a690e5319c94d94923988025307e543f16fd970aec24524cf9808dc62b093359287251503f4231bf52cd1a16a80bfa82d8f585d96855dc1932f4919a92da2618d6448fc18a234f9acb386ab4ab4a9e38ea341e7c54faceff38c162d74e7fabbca13aadb71e9c8ae6072e7bef4073cf08aa7faaa6d639f98d15bad4ed183ced":hex:"9f3c0349c5a4a740a82d6d63bf00fb17":char*:"":hex:"6100b091e52366fb422251d9b68974b6c666a62a8bb77a1ffd7c7d1ae586a6ee763b84dc11aace02a25af91d194b70b3265ec46872fded54275b7ddb26ee1f20c857328f46a694fb1dce68bcaecbd587ece5b505d658d57d50333e30b639eea1f6537b37c175f62497c6c84e3cfddae214285d2d68d90dd5cd8ce2273d25c8ca":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,128) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"3e0ce4fb4fe4bb2fdf97b23084ff5671b9b899624184acef":hex:"a950ab0dd84115e3829ab0ad3bbb1193":hex:"":hex:"df89974b1534f0ba262bbea5efe39d8b72820cc8a720cc99520fedbf667515c3f6d8c3e25c72c48c1cff042171df58421741aacb2a49f23167257be7d7004d56b14901b2075eaca85946e9fbf1bbf4ae98227efc62bf255a25dd0402d37c67ba553531c699dd89ff797e7a5b5b9a9aa51e73ca2dacfda0f814152aa8ed8c79f9":hex:"25cfde73e7a29115828dfe1617f8b53e":char*:"":hex:"847b54e176ccc83081cb966efc4b4a3bf7809ce0b4885009f620f61fafcaa78feee91a835ae6c1a942571811108b1e81b4c4ddac46aaff599c14988c9a1fb9f387ab7f1357b581568b7b34e167ac2c8c2b2b8a4df3fd7ad8947a363c1c0cb782ec54b1901e928821cf319669dd77eb37b15c67f13ad787ff74312812731ca3e6":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,120) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"6be3c66b20e5e66ababbfba1b38e5a716eafce23a1767b69":hex:"3a2acf69bba19f5d1d1947af2cfda781":hex:"":hex:"de1cd978354a499415176f260021abe0a8c5bc34d166f53d20e02e413e1377ce4ef5d7f58337c62251a3b4ddea0dea23c40e5de037fd5dd8a558eb53bffa4e8ce94899afa8284afab503c1a485999a154d23777f9d8a031b7ad5c6d23d6abbe3b775c77876ad50f6bed14ac0b2b88fb19c438e4b7eb03f7d4d3fcca90dd01260":hex:"f826d212f7c1212fb8a8bf23996826":char*:"":hex:"fd1f7b56e5664cf4c91e58f7c50f6c5e98e42ca2e4adcc00348cee6f662b382ad4022da54a47d8faeb9b76a24dfc4f493c27fc0bc421a4648fad7b14b0df95d8752013feb033b1fd971daa2c9a5df898bece6a3b8fa078dd130071df20a68cd0f394be25dcbb3e85bdfa0df4797fa6f01f5f0da7a6e86320207ddb5b3be53ae0":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,120) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"d16abb9f5b38d7f5abba9dc36995ce6ce928ed822a07b7c4":hex:"3cd95429c6de1d327b9eb3c45424a87c":hex:"":hex:"e72f29b1fc1dbfc2d93a0f3b79ea4b9806ce9b2c4d490ac5c0c3c793df9dc7df5471e834b84d18afa5a7516f9a6a813a9b65ae2f083a854730547e28a1f60fe97d8dba1d2d433e11847b9bffd8873ec634e64365530c905dd6f274e45c9795ac127a6f356f63cc6c116c5dd8c628e7e17e1fadc58f8452bf21f53c4133198118":hex:"13521236f190f78e75c0897c5fb237":char*:"":hex:"cd8bb97c28df092b6783ef653fd26f2bdc27c442bab0a4c7bee2789f389dcd1b280c0231672721bfbbc939a0449557678ec61ba0afb2e5817e6f7d94387f84ecafbfa1216d65e7f5025f47b0d2905cff7c99adf8306a3d9850c5908be05f87cb1d36a4837dba428aac97d7fbc18e3778f8d81a319259504c87fc94bd0766ed93":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,120) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"0bc344b1a4078807e5f53a6e7e1e36fa83108473ae2fb4c2":hex:"bd505fcba464e6e2c58fdf29f5695fb9":hex:"":hex:"8bd73f94c71e3765bc7d17fdc90a9ba6aff9648b46300e4048985fbbd7c60c39c3766f7c524780bfc2296dc11e1132134921760a373104edc376eab6e91e9a60a5c4a5972935df12eadae074722bdc0147c3caf6a62fd449ef37d76b65f6d210283c94ac524cf13186e444d80a70b01e4373cc0462546f1caee6b49e738a742c":hex:"8510fff71bb879f56ea2fe43f6ff50":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,112) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"c8097398fc21f93eea6a95aa93a3231096817b65520bc549":hex:"776248381941e16908f52d19207881f5":hex:"":hex:"80b0abbaebbd537a0810ed75cd172d29d50f5982e4d01f8664ddb2dfda8f57fa0ed87e64a779a1d7f5e568b6acfdc739572a7176752307b430fb1fa1c3c2c346477cebe7d01b16745ca6c8929a7f446c03ad9a9e8a5a935de78ca6c701e8c1c5e6d2550c42949cf5342fb5ef4c6ab9bb02ace8388b16edf72a1237e5d1d0e820":hex:"7fc4388b2f8eab0f0c2d6a08527e":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,112) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"76d4bb5694faaf344db83bc6d6c47d56bb6ab52700826f2d":hex:"603977845d82faccb401817ecce6e2fe":hex:"":hex:"9e31fda6a171f0d4a5f2af2c4f827b1312d9dda5d78fa329b8f1b6373b9b29be358601e5bb0d0c615aef4b9e441c811219f1f2ff2d0ab23e0cd829a88b5b615ee72e5e3ea604fa26cc6438ec4c30e90f7348e9116adf8e8efb7498320d2da16679fa546b1aa9afc7720b074c4e48e06862d41428c9e71a4772c2e195a6f36978":hex:"c955a3bc316841be07e406d289c8":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,112) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"a3e5020695587984074d78d9c98b8e1a5719e5f88372740e":hex:"4cd56de54e5140a587be7dfd02d3a39e":hex:"":hex:"c0bfe3b2dc4dad17ec5a7662d86847fb67e582cc0baf469bc9baa7a075d48a8b97521a1072c2798bfbdae5ca3752eda1cb96fe5cf24af989eb77a2948aae3d8b70d83d93f84c49347f788480f34051621c358c03cf8159a70fc72cb8bc02876234ffe76b181da8b22b8796c87b0904da1af46de519c20d8d1b1dc7cc24e39ba5":hex:"1a29527a41330259f918d99d7509":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,104) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"afe986ead799727063958e2ce13ca846f76c51605439f839":hex:"f85a95ed10b69623162ab68d1098de94":hex:"":hex:"7c1b354a5bb214bd95147e32d81e658705089c38035d0ea423eb1a5c82f97443c6903d2cf1ba7a007eec7c8ff98b8f82b073d9636a79bd47c7f2f639a8eb4e92076f9ed615766f43ac3a4f1687301ed7d507766605e0e332880ae740ab72e861a2cb6dce1df1ff8be1873d25845ee7c665e712c5bbe029a1788634bce122836c":hex:"3cf1cdb4a4fdc48da78a8b4e81":char*:"":hex:"a7f252ad7983e7083260598051bffd83f40f4d4a8b580cc2388d720a0979dde71549ddcb86b0a62c4964fca591d0982f3a203f2f8884ff4991f17e20f759ea7125ba2bb4d993722f23938994eb2709c850f33ed9889e5a3966f9d7b76add46aedf230e8f417425f9db79ccd46b5660361de7c5d87f71a9d82c491c0c3daaf56c":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,104) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"2cfaa215841826a977ae6adfdd993346210c49dd04d5d493":hex:"537a4ee307af3072e745570aaaadce34":hex:"":hex:"e8eb3b6edd0ca4201b49a6a83036445aba1a1db040f3e74511363bce769760a9914e05a067f555ca15a57c6e02e66fbe4e04dd8c8db8d6d14ebc01cc7d84a20ff0aacb69bb3679d6b7d9d2e07deda7c2d4fe4c584fe1166e78d21dc56b9cdad93709c03b9145b887f87b4f605f24f989d5e0534fc71a58e8a8619ee99f69e5f5":hex:"df01cffbd3978850e07328e6b8":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,104) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"128ddc83d2170c403a517615056dceec0d19d6fd7632e738":hex:"5124b410c43d875eca6ce298c45994a7":hex:"":hex:"cfe9f7797ee37bfc4f564419bf2268c964479efa7435970874154432930f3b2736438da4dc9c76200009651340e23044bc9d200a32acfd4df2e1b98b0bae3e9ff9d6e8181d926d2d03f89768edc35b963d341931ac57d2739b270ce254f042b64ceac4b75223b233602c9a4bdc925967b051440c28805d816abe76fc9d593f5a":hex:"56ad9c1653f11a41fd649cccd8":char*:"":hex:"cf91f087fd7faf362caacf4a68cff51ec57b3075563e4ad0955df20b366e92bd75c3762cf4a6f0eb859872667a5c55aa5d94f5ac9479b1b9c9345b50f82379d551506a2ab02b0441b14b28b78a12b38500d703a8c19888fe612d4710eec7cd18c16d6a4b55d3c69760e2bed99efc8b551dbe2ac9b9b64715f87180b8e14d1795":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,96) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"98581c28983c4da321ce0c419cc0d476d539e77da513c894":hex:"ff10234524433b871202c2cca6acb194":hex:"":hex:"bdef5b65b5111b29e781a6b71a0160179c52b5bccb1ac5c0377b26cf3f61432f3ccd67633a836357c24b5099db0510a7f8110f59e8227cacd11f17ea1798b5d4d68902ca6c6eccd319fef14545edd135078b38d43b61c9af269fc72f7a209ba7897e4c6dbd21bb71d7e93d2d2426ffa1557cae28e74059d3baf06ba419a47b39":hex:"984943355a7aef15c4fb8033":char*:"":hex:"808e28bfd441cb8890416a757d252c986daa8d607ac9cadd2f4fd29eddbcf3b859ba298e14a4ccefe2c2752b123f87b98d6708fde48faca4bc7dd818a7ea76cfa4357932e59cb6be0e9283bdfb49454b86b9fd04aa8cdef503c65d13fcff42e9cd8f142f8c06cf7daa6d8ef8b9c9d69c39e8afd980048fecf731fd674b2a814b":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,96) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"167b8b6df8014c8f3de912b77f5a0c113580aa42d785298f":hex:"49da91e926091a448d57d521cc90f3c0":hex:"":hex:"4f787de12ba907a589edf74c8e7a6cdaaabebddd465a86e170e1efc289240298b516fddc43c7fd9bb1c51720a4455db4dd630b59aebaa82bd578eb3cb19f8b23ee6897c1fefaef820430efa6eb7d6ff04de4d8b079605fb520b0d33e96c28f0cd71983c4ce76c0ea62fd7209d21ec7b416881d545824a73d1f9f8d3323fdb90c":hex:"99198f55f9fa763651bba58e":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,96) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"71f5f8505fba62f08fa0557dd5407fc83a852c6007ccecc8":hex:"b5efb9feae3de41b5ce9aa75583b8d21":hex:"":hex:"3e19ec02365e450e946123a3362f9859352eb52902a6bcb8a782285dfac9d2b282f56302b60d6e9f53fddd16bbf04976cf4eb84ef3b6583e9dc2f805276a7b7340dec7abde4916fb94b0ed9c9af6d4917b27e44d25f3952d0444cd32a4a574e165a23fa8c93229ceb48345171a4f20d610b5be7d9e40dcf7209128f029fed6bf":hex:"9604d031fa43dcd0853e641c":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,64) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"4cdb38f8185a4186fc983e58a776a6454b92ecf0bffefe98":hex:"aef257dd44d14d0bc75f9311ef24e85a":hex:"":hex:"1ca72c50a093076e9a9dfa09888b9c89eb36a942072fc536a81713f05a2669b39fdb2871b82ca47dcaf18393ca81dcb499aafcc4ed57ea79f8d4f9bd63540610215b2c65481b294638cec41264a7fdca4230df5fe1e7e3d8d26dcd0c435fec8e9bf778f9e6f13482157a9722761601e08425f6160d3bb626ae39ee1117b0353c":hex:"d951becb0d55f9fb":char*:"":hex:"2eaa7e922dbd8963e2078aae216636276f3f7cb5d7f35fa759e91bddb6e247a93c388241ba1d0d37040c0b9e447c67d35b4991c1acce97914f3bc22ee50171bc5922299983ee70af79303265bc1ae1e7334202460618b4a8891d1a7eaaac5cac1e4dce024ce662d14849993f89e771fb873644b552120fd346250df39aaaa403":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,64) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"ee8d3aced3aa3cb2166aa66c4a252c12dc0978830d0bc75b":hex:"c15c9c0b0b70c7321df044bfde2b15fb":hex:"":hex:"ee69b2421d43a9f383d99f9802ba4d6cf1c537b42041c86cce681049bb475e5098d4181f1902b0a49c202bf34ef70ea7b787fa685ab8f824fcc27282146d8158925bfef47ccba89aa81c0565eacb087b46b8706c9f886b7edf863701003051d6fb57e45e61d33412591ec818d016eec7dee4254636615a43dacb4f1e6ec35702":hex:"c5c9851a6bf686d0":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,64) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"4a8538d609444e3197ab740cd33b66db1cf53600096b94e0":hex:"0bd64d222532dae8ab63dc299355bf2a":hex:"":hex:"8c2b8fb775d1b21c41a3dcf48ad6d68ab05be3879f9b94b305a6ce4d799e3a992c1c3a65a3e4eab563edb57424927c90c76e49386e29dd5e7de2800fcc0eefbc8b4f977f71be3754c006ee93dc09b1cfa59c424b6b3987aeb56feefc21004c63e8284b6845e395bc8843cca0917267fb4a8f2db1f7daafe7a9da95083a44de70":hex:"3477cad1fd4098b2":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,32) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"447f0f065771b6129952e52206a64fe0844658ed685e39cd":hex:"37e3a300542d9caf3975c6429cb8a2e8":hex:"":hex:"fea5d227869e527882c63a68a6623f4a699df82b3dc715c7260a5554336df8376744c05ae89ec27d40da02d9f1c5e9e29405579fd4132143cb21cdbe3edfaaab62128ecc28018725c8dd309d2376223d2e2edfea9765699b2630ff5d9fe9bec416c0ca6418b938d195d31a08e4034c49d79e3a249edd65f985230b33c444dd02":hex:"06bfca29":char*:"":hex:"e1bdd1c212b159b87e41a5f64dcba6b27aa0f5c8871fabfb588df0e06bd7730ec1beb0e3388f96c992a573ff69b34870f83c53fb65b420c1c6f92e2aa6f03917e8203d77c7f5ee08baf9fab12f9d38fc0ffb83807ba781c3dd7b62edca2121f68ef230b42b8adbd4cea072209d02713789ed559b83739a54cfde69e68bdc4128":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,32) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"f465e95f6fc19fe6968b98319b547104d0c01c17105f8fc0":hex:"6cba4efc8d4840aa044a92d03d6b4d69":hex:"":hex:"2426f108368a00d2a49670a3b64b4f0569c6da9660163e7b209ec3f8d058ee11f7818a8c5030c5f4ce6e1e5a93faa3e5ae3d0bd5d712fbc891cfeb20845707edcf5e29719a5246a3b024fb12d37bd1b81df3812fd50b1dfb3e948ce546dd165cc77f903c07fe32bc7da7fbc25036679017317ce94cd8a00c1bce7379774f1714":hex:"92750ac9":char*:"":hex:"2e59b104c1a6f6d651000396adbfa009bf4cf8cbf714da8e4d3b4a62bd7f522d614decf090c7552a4b9e8d7ee457ba642d5100c0c81c14cbba8c8ff49b12827f6ebd41504ccb6dfc97cdf8532d1f7f7e603c609efa72d2ae0dce036ec4ab36849a0c06f8737d9710075a1daaed3867ca0a7e22111c0e7afae91f553b6fd66c6e":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,0,32) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"f08e3e9f7b3a20ccdc4d98b56f2b567399a28a6b3908deab":hex:"4f4636d1b283bfa72c82809eb4f12519":hex:"":hex:"a986e816f1eafb532c716a555cca1839a1b0523410134ea0426ab309520b339fc1fdeb40478ae76823cee4e03b8d3450e6be92d5ff17b2f78400f0176e6d6a3930bd076a7a3c87c3397dcc0520c6b7b4ff9059ea21e71c91912a74aac2ca70eec422b507cc5c60860bb8baca01eec2a3003970ba84011efe576804b2820e306c":hex:"16c80a62":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,128) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"87b5372571fb244648053c99405999130f87a7c178052297":hex:"a1cc81b87bd36affe3af50546e361c9e":hex:"684ce23f59632308d7db14f7f6eddaf4d83271fb0c27401b09518a775b36252540f14305f0dae13ff6c0dc565c9e570759e070c8ac73dfb97abd3285689a7cdcfc941f6271be3b418740b42ba4a114421065a785be3dfa944c86af56da8209779e8736e62529c418b507c6d8ae002cbc0431747722afd64521734f99273de455":hex:"ae078d1554fc6a14447a28c3dd753e790f7ef9b53e35c3e0fe63a7b1b326bc56034847f8a31c2d6358049aae990bfe7575b439db370aa515e225e0ec730488c700a7b0a96a7b8e4e8e4c6afec20decd16fe3c0f3f8d7a6cf7a8711d170829d14c706cceb00e133b8c65c8e08cd984b884662eddd2258ce629abf6b9dd28688c9":hex:"98177b3428e64bc98631375905c0100f":char*:"":hex:"8be7df33a86b1162464af738de582a357d0ce8e213bba1b7913c0d13ad759d62c3bf4366f5130b3af2b255b7ad530b4977627f9e76b07e360c079d0f763dabbd22e976b98cd5495c6182f95bc963aad4b719446f49d3a448d11cac5bfcba4b675b8e4d88a389e2580e8f383f95bf85c72e698680d2a2bc993c9ee1ce0d1f1ac3":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,128) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"a2d069b826455d5e79e65db4f1d2b6a29ae9f401bc623917":hex:"6d40a0c7813bc0410ff73f19bb5d89c9":hex:"9960376b1898618d98c327c1761959d045488cc6198238bbe72662f276d47b41e8aebc06dbce63da5adcb302a61ade140c72b9cf9f6dfad6ecedd7401c9509fae349d3c7debe35117776227ba167f2b75921d7321d79f4ebca13d20af1638a1567043365f179f4162795fe4fd80b5d832e4ca70e7bf9830bc272b82182f70d2e":hex:"acd6225dc5b9109d56ea565ab38dd4db432a7ec08f0db04f1c6b691c96d2eaaa6be62da7cc7fd75f931716c7f39705ea7cf828f1a5a325955e9b2c77e7fb2d562be6a89b3351b1b3d1355b43b73ed425049430314c16bf0836ed580e9390a3b8e2a652fddbfa939ca4c3c99765b09db7f30bf2ef88e1aa030e68958722cb0da3":hex:"010195091d4e1684029e58439039d91e":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,128) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"f3252351fe8e7c628c418c1a49709bf1f8e20add82539948":hex:"eacd2b1c3cf01bf4ea7582d8ee2675d5":hex:"141cb39a2fb8e735e0c97207f1b618a4b98f6b9bf8c44a1c8e9ea575a7759cc2a02301274553e7744408b2c577b4c8c2a00e18f8717fd8a6d2f46a44eeb05d685fbef7edeb4229e7ea9b8e419ffcb504d33583b3ae421c84caeca9f9789047dd7b1810318d3765307233567bc40e003401c9f4e1b07a2a7162889e1a092aedc1":hex:"7e8d2816d280c91d232bad43b6610e2d0532a9f670f221a3a975fb16472c2e83b168115e87a487bcd14b37f075e1faa59c42515c353cdefc728ac617b7d273fa96778e3fb5f7a1132f8e2add4a57015b15d1984338b7862356243d1c5aa628406f4a507498eda12d2f652c55e8e58113ed828783b82505790654f036b610f89a":hex:"63a310b4f43b421a863fb00fafd7eac4":char*:"":hex:"699c146927ae29025e5b20088b20af27bc75449e4725ee6b7d5dc60b44ba8a06f7d265330c16060fbd6def244630d056c82676be2dc85d891c63d005804085c93ce88f3f57c2d2c0371c31027d0a4a0031e3f473cb373db63d4ff8f65be9ebe74045de813a4e6c688110d000f6b12406881c08085c9348e1f0315038907e33f7":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,120) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"e462957f2c500bf2d6bfa9af97938fdd8930e360ea4175e7":hex:"b380584a3f4e0e59add4753c282f2cf7":hex:"682b0af6592eef173e559407e7f56574c069251b92092570cbb7f5a2f05e88bed0af48dcda45b2930b1ee7d5da78dc43ec3598a38593df7c548058eda3c9275c1304489aff95f33a6cd79e724e8d12ca0ae92b20273eb3736efcd50dc49e803ad631dcbf64376a45a687eb4e417aef08a3f5f8230d3f0b266ea732c21ed2eed7":hex:"82a7a6dd82a5ea3d9a8e9541d854978487eda298b483df02b45c76b8b38bac98ffd969dd160a2765595b19d4ea3e64351ce95764a903f595dd673d13facf5a5594e01be1d60a0c6d28b866a1f93a63a74fecb6d73ac6fb26b20c008b93db53e9dc1d3e3902359fd47734fe22a5c6958f97e9001cc4e8b6484d9542dbbdfcfcdc":hex:"28a43253d8b37795433140641e9ffd":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,120) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"4a62ddd87f41c6df756e8da0985dcd8c91e73ba395b3d79b":hex:"1d1843e2118772d76a0244a2c33c60bd":hex:"028b92727b75b14cb8dfeb7a86a7fec50cd5de46aa4a34645754918b8606819d4bf8a2e7531a05ae5505492ca6cbc8c0e6d6ab2dea23bff1fdf581bb780b4a3312aa39639383fd10bcf92489801954733f16b021c2e84809345216f8f28a99773341e40c4a64305a2098eaa39f26a93bd556c97f02090e1a6c181a4e13e17d3a":hex:"37a83ee6dbdece212446739ea353cb957b9aa409c88bee042bbc3a6e5199aeb28f2b4b00ff433c0c68d6db5a197566019db8a4c7a792e2839a19a302ee02bee046adce04c1fbbd5b0c457d7cbe277992ce2c153d132269e2d1f12b084cf3026a202b4664bc9d11832e9b99c7cc5035dcfde5991dd41aeb4fbf8bec5126a9f524":hex:"ab738073228bdf1e8fd4430b5c7d79":char*:"":hex:"e702f1bb9a1f395c74fca0ce9cdf29e7332c14acaca45200cd432a5767be38929ef8de43d0e1a5e7300c1eb669ac1ab997b31cb1403af8451e77e63505920af0f8c3abf5a9450ea47371039ba1cf2d65a14fa5f013b7ce1d175859404dcf6461a36e8bc260e7abf739d8951ddf1a3754e2d65e0aa31320a5ffca822023bc0906":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,120) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"fc46976d38a581a7042a94ea4b5bfe3587ddc65d1162d71e":hex:"b5e92563dd0339df00b7ffa2239d21bc":hex:"7b6f6e104acbcd7188161477d8e425ff99add22df4d22de7f28d0a0075ca4ef848f68d07ed22d3165c08e40890ce04d1bd05b1a6ccb2fec8193d5f7dffc93d97a0c036b3748f708b011b68247a0249b9e1a60b652164e5c2fd7210377de804ac010c8aa08a11f40af97e8370a59f936cd14c22ea7a236d904145adc04a241fc0":hex:"4b9e858fc8f01903e426112192d4ae4686b1ae4d683b75afb2b8c63590275943d0d6d6a23b6d35796a2f101203acba107474ca6f4ff6dd87d6b77785ad1d160ef2755d84092dc70c86db5e639b689943b15efa646aff44b3f51f5d3f4cf6c8f7fc5adfe7bf2d72f75b93b8ee94ef3fa69ea0fc0bb77b3983901fdcd30bcd36f5":hex:"d4356cb417953b01f7b1110c8aa3eb":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,112) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"403e49feadd4db763652ed5c4b1e12680cfe0abc30f4696d":hex:"1a60258a56e15f92814b4d372255a80d":hex:"a4ffa9e3c612103224c86515dad4343cbca7a7daf277f5828670834f4d9af67b9a935c71b2130dfbc929c4409bffb7974ffa87523b58890770439c33342880b33319c626bf776c1c0aeb9c2a348a7681572f4ff711d94c192f3450e8b1275f9d02c742a2c9f1da316e9918bf787f22699172986cb9b10fc56d5f6b8392ff92b8":hex:"221c61d769febce3913bfead9a201a805f11005ddcac185cbae00ce749de9c4362889b1b0d9546e91598e0ddedb88b673a90acca65d7e71a85636be052f361839a646dc8b834c02f3e2261d370e6bac9636b7536225b5ea77881200c8a3450d21bfd1e11afb3a470e178ecfe944a25a7cd0254e04a42b67723aac8afffd56fee":hex:"62646fc8bfe38b3ba6d62f9011e3":char*:"":hex:"5c76c90dea7d659804ad873960906259fbdda3614277ec575d9eec730e747a2e7b9df6716b4c38d3451e319eeecee74d1f4918266fc9239de87080f1ad437b47c6904ed2d5514161ad25e3e237655e00e53fe18d452576580e89b2f1f0f6aa7e40a337fd8c48d690fe013a67264a80e9b5dfd009a9152d559aa02a68f401a09b":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,112) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"c3471259512d1f03ce44c1ddac186e9a56c1434a6ac567c6":hex:"50164c63d466148ab371376d5c2b6b72":hex:"11d1f523888bea1fbc680d34bc9b66957d651efa59e788db3d3f6f50e72184b9d14e9ff9bc05fb687520cf423d681812e007025eedf0e78e7e8191e6b62404e8eb400cf837d762a31aa248553367263d6de091fcf7abedc3e69fc118b7efb0594c89b96c387b7c28ed9a7b75db60b6b5133949b891ff81eca5790a265f12a58c":hex:"dd5b98b3b3cf03fb92be579068a885afd984630692eb5f155fa6b49f2b1690b803d34b90e8de3cc39c2e61650ffffb51e7ef36d35ad17dc4d91f336363b0734996b162b509c9954cab3dd959bde7e437e9100d84c44104c61e29dbe12492a0272ce6eea2906d390de7808d337e8c650b3301af04a9ed52ab9ea208f3c7439d6c":hex:"6c5f38232e8a43871ab72a3419ad":char*:"":hex:"50438ee712720abf2089331e4c058b30c30c3d17834c507c0010ac3f974a256d01b14a45e9ce5193c5cede41330cf31e1a07a1f5e3ceca515cc971bfda0fbe0b823450efc30563e8ed941b0350f146ec75cd31a2c7e1e469c2dd860c0fd5b286219018d4fbacda164a40d2980aa3a27aa95f8b8e2cd8e2f5f20d79a22c3ff028":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,112) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"ec326a1e0fe6a99421398df4fc7d8fea67b67e5f5fcd50ad":hex:"c94aa4baa840a044dbd5942787a0c951":hex:"f8401c578f20d9c250ea86eb945184e007a0190462c7abddf238ce1ceddcc230756aa222386d8ba66ebbba13de008ced140896ac55bc47c231cc81370ca9feadc225e017d59890e6291cc4cca27db3078c0cd6cbb51afb62210226a76837c5454728cb5ce3afe7352e7fe75421f94986e6b7b26321bbca15c75ac7c13dc15f50":hex:"6d5016c434a0f4b4a5d9e0b6b8e2d848a94f132f055d2d847e54601a4c9cfc5966a654d696f8a3529a48a90b491ea0d31c08eae8ef364f71f8ec7ae7f7e39bb9c331137b2578362ff165628099944ba8deb0d99ac660d5ed2215b9a7626ff1fa6173cd8dd676c988d16c9cf750a0d793f584c3c8f5fd5d167bc278f4d77a629c":hex:"3269922affb9d767f5abe041cc8e":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,104) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"a7ef81652f604e88a72416924c53979dc73cadd3575eda1c":hex:"0cc9ae54c9a85f3e9325c5f3658ab3b2":hex:"d0195b744351aa25a57a99df9573dfa3cebe9850139149b64f7e4af37756a430dda8af98e4ed480e913aa82821c01c1f75b187e105a8f39621757d522c083a8d81d7d8bfe6cf15c439d0692b6affd655a11bcd2457046fae996a1075c66029867b88cd23c503ae04037dd41f27bafd5000d1f516002f9fcc0f2500e8c1b27de0":hex:"9ecd19a8eba9fba843486e1bbfb8d9053c5e04b24e30174d4aa89d8307439d653f8630edddafd51719c744bcb4bce3e444847567bd2cdde2995870d0634cc0ba2bde4b6bc2bc583062fb83874a1c25b50aeb945bd109a151772c077438c4d1caaeb5b0c56390ac23c6d117f3a00fd616306fc2ffc4c1e76f934b30fbbc52eec2":hex:"22c2efeddfd5d9cb528861c4eb":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,104) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"605271a41e263c92dc14fe9df5203e79d58cc2d1289dc361":hex:"7f128092a777fc503adc7f6b85eb2006":hex:"aef9f984fb645e08d5f0aa07a31c114d2f8e9eca047e4a8d5471378cfc2ced1159dc093d174788e58447a854be58942ed9a3fd45f3f4a1af7351e087369a267797c525f134e79709097e733b9003b9be0c569fc70ee3462b815b6410e19954ce2efac121300c06fd9e00542a9c6a5a682fe1010c145acbbb8b82333bdb5ddfd9":hex:"2bda3448a283ecba31e0299c0a9e44628cb2b41fa7b1a41107e107cabc381083bdbe048f2804568fdd5fe016f4d607f694042a459ba03a2deda4cccc8cbe4612d8ed0d4575e48bc9f59843369dbe2af6d048e65ff4250e1eef61d7b1b378fe2f3305b133ddc7e37d95ca6de89a971730fc80da943a767ff137707a8d8a24329c":hex:"673afea592b2ce16bd058469f1":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,104) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"fa076f36cb678e2275561e9553ebdf397360e5a5e44791c4":hex:"1ecd53d94fe287047ff184e8b9b71a26":hex:"5ff25f7bac5f76f533f9edffdfd2b2991d7fc4cd5a0452a1031da6094cd498297fb2a05ae8db71cb3451e4ac33a01172619035a9621d2d54f812ef5343e14b9dedc93838e4cf30e223d215b4d2476ea961a17ac7295069f25b2a12d6e2efe76d91f45632c6d4e61ff19a95d5ae36af960d95050ce98b5791df0b7e322411c884":hex:"513305e86c0cb046c5d3720b25a406392766bd1fb7de2758de370ff2e68281e211922890c61f3659460f22c45a57895b424441262a3ba0606df4e2701f38281fd3436a4d0e0f8efecd231808a9ea063dfb725015a91f27cadfe7909a0ee109eac391ac807afed1767ae0515b9c1b51ae9a48b38fe7fec7fe0ddee562c945e5ae":hex:"079e8db9c3e6eddb0335b1cf64":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,96) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"ce9dafa0e7e53a8766fc0bc38fba807d04e14e5ed61bc234":hex:"fd0751af49814ee98b2b0cdf730adaa6":hex:"1cba488a0fc8a012f9a336cc7b01cbcc504178eeb08237dbedbc6c7ac68fdf3a6742751a207e43d43068abf6ef4e12a5e3c17e5a2f9398fc04ced67377cbb858fd6020fad675a880adb249e4aba94b96efa515d1cdf5c0c3071a27a3245968867ea94b2bfc2028a67be34c84c3f475944497aa8ca1ab009f8e4b11c8308c1996":hex:"b585b8bf634757dac015f2f69f2ae674372a664f2115ad2d03bd3e0c335306b02d0947d3cda5991f5c0c25f12ead2c3cc2d65d575fd67091c70bc93ddb4b1e21f7b0fc6e6ae652dea93a6564ff13489f927942e64dd94bf8f821c7ffdef16df58bd8306a957821ac256da6f19c9d96e48eee87f88acb83bae05d693b70b9337b":hex:"e5dc92f4ad4000e9b62fb637":char*:"":hex:"95f4324b0656bef19eca5570548fc6a7a9923f4e2a7e42066891bc132fd73bc1c9089755d996756de0072824e69c43f2db8ba2bf6f90d3c4eafc0721ceaccce1af896f9fb15fb19c4746979b6d945f593fad61d550f81d12b5945ed728c02931d7f8d917285c22a3af748d75a6bf163fddd84b941d8564c1a63192c816ad6d6d":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,96) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"8a328554fed68dc4838fbc89fd162c99ec105b36651abbc9":hex:"e4f7c69a1d026eeebfc45e77bd7b3538":hex:"e349dcedb0bfcc771c820f0d510b80cef32ae3326484e25aa183015941e7844bc46f617d5e61fd64fa71759e90fcb72ae220bcd507f0fb389b689dd3fa29b3b937eded85f26ada9e0f3f5109f82fef47c7eba7313049750ad17969e7550c0d4093ed18ee27843d082bcee8bf3fc7833d569b7723998595a5a1d871089fd238da":hex:"75986f56972c045c850ed68aeb229f203b228fdfc36cad6b16d9bd12037c48700d20d8062a983ffeca76b8d36a67ef51bc8853706e83a34e4e23ff4f4a4eb943f19dbe85e454043d7906be6587a85079f9ccd27962d2905117d2dbeaf725d6ffe87bef52b2138da153ef29b18065b3342b3f9d07837d57b8bc5f2597de06c54f":hex:"8e8320912fff628f47e92430":char*:"":hex:"a1ed65cfc7e1aeccd0531bce1dc749c7aa84451ec0f29856f12f22c4105888c7d62e2e2fc8ad7a62748610b16e57490f061ad063c88800037d7244ee59e109d445205280473390336d7b6089f3a78218447b1b2398c4d0b3aac8b57a35891ad60dc1b69ad75e2e86248ceac7bb4cf3caade4a896e5ee8c76893ef990f6f65266":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,96) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"6e7f6feb4022312de5c804ed1d7a37580d74499107f8cc8b":hex:"6ce13485ffbc80567b02dd542344d7ef":hex:"c6804a2bd8c34de14fe485c8b7caa2564adaf9fcbb754bd2cc1d88ba9183f13d110c762a3c5d2afc0fbc80aedcb91e45efe43d9320075420ee85ab22505f20e77fa4624b0387346c1bd944e9cd54055b5135c7fc92e85390ecf45a7091136b47e3d68d9076594cfad36c36047538e652178c375a2fe59a246a79784577860189":hex:"4f5bbdf575ab8f778549f749f2265e17dc7225713e73ee6d7be163ff7071557dcc2240b0705c079008605f81396414ac64f06b1b637876e04c3fca8d0fa576cef4dd3dc553fd6808eaf120f837f9bb1d9dbbd5cf67ed497167fc7db89d3a84151b81aeab0e921057f121583df5ed7f976b206ece17a913f23485385f64c462a8":hex:"974bd0c4a8cac1563a0e0ce0":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,64) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"46d6e982feff0e7d04a84384c56739b69626dde500e4b7fb":hex:"71a6d1e022a6bdff6460c674fb0cf048":hex:"67a8455c7d3fbfdba3c5ec5f40e0be935fbb9417e805771832ffad06ba38a61b8377997af1f586dc0fa1e3da0b39facd520db1f0ec2bdf1904a3a897f0b507c901fab30a85de51effa9f7d4703ceeb2ca72abe0bd146ba0bd3ffdee11628310db7d65ea1343b018084ea2414995f86fefb45ba91a9dc2236d92078b4305671b5":hex:"a5160fb2d397b55a7eba02df33a042404188f02f4492d46f4edc03fc67723d64f5f7fed3a60728438703c60454a30f473ac918ffc8f98be5c5e9779ee984415e415ce3c71f9acc3f808d215be58535d3144cebe7982b9b527edbe41446161094d6fc74dec2e0a1c644bbc2cf5779a22bd4117a7edb11d13e35e95feeb418d3f0":hex:"84f1efd34ff84e83":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,64) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"991dcaa2e8fdad2b4e6e462a3c06c96067ef5e9fb133496a":hex:"978913d2c822ba7cc758041d5ee46759":hex:"5a94dc81af011a8af263318b60215b9752292b194b89f6fc013b0fe8e29133de631d981862f2c131ee34905bd93caffc3b8f91aeb0264b27a509e5c6a41ae781209f8c5895d0d35b3c5e1ae34a1a92a2b979e0e62132051394940ea4d9bfffb8d89ba1e8331b15bdf05c41db83a57745a4a651a757cc8648acdcf850a2f25367":hex:"9cd0c27f0c2011c1ab947400d28516c7f46d22a409a18fd35c1babf693b8030dfd7822d9ba03bb8fd56a00f9c7149c056640dde690889d2f23978eeeb28ccc26e2fc251220a3682c963f5580c654c1a6736cccb1b8ed104ec7390021d244bd9f92abde89e39a4b83eff8211c8a6259bd6ac2af1da7dfb8cf1355238056c60381":hex:"15d456da7645abf2":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,64) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"f29cff00781f5916930f125489c87d21f6593324d1506f65":hex:"50db7ee25a9f815c784236f908bfd7f2":hex:"ec1482e18692bcd6894a364c4a6abb9c3b9818bb17e5e1fc9ec0b41702c423f3a60907e94c888fad8e78f51e1f724b39969ba7b11d31b503504b304d5c4b4cbd42634f4ec5080a9fe51c82e121ae191270dd2c307af84c82d892d982413a50ccce33698054f761a3fa93da9a1fca321296b378a50d458ba78e57a70da4676150":hex:"a3e8595747b7147d471ac4fe38014bf4a409931e3f419ff88ae249ba7a7f51bd0ede371bf153bab4b28020b7a82a8ca30b75f1e3bcfee3c13db813cbc85138ef05874dedb14a6e5b6d06d7589a83bd5e052dc64433a8e24c1188b9470ddb2536d13b4b7bff0c5afcfaa9aa0157c3aae3b1774df2df14f965d6dee4332edba67e":hex:"a1e19ef2f0d4b9f1":char*:"":hex:"eea18261a4de31d8619e77005ebbb3998c5dcfac2bc120ae465e29d6b4c46de7e6c044c8b148ffe4eda7629c243df8af4e7ceb512d5751a3ee58defb0690b6f26b51086dedfde38748f6f0bbe6b495f4304373188e5d2dc93461bd51bf720149a7d3aa543623b122b9af0123b2cdc9020136b041a49498ec4aa696c2d3c46d06":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,32) #0 [#2] +depends_on:4:2 +9:exp:5:hex:"2087e14092dad6df8996715cb1cfca90094f030328080ffd":hex:"d30504afb6f8b6ac444b4a76115d79d1":hex:"d95845d268c8d8f9135d310c39e30f55f83ef7ffee69e6ba1f80d08e92ed473b5ac12cc8f7a872bfc8b325e6b8e374609c90beaf52d975f71caeef5ee4c13de08dce80d358ee1cd091faea209a24e3392adcfe01aeb2b2e1738bc75d4a9b7cd31df7f878141cf278d150f6faa83fb3a2fd1225542a39c900606c602f15c06a4f":hex:"6d039513061980fb195bdf2f7c7079ca4b7e0fdd50d948cbfab5ba10b99e3aea27f08abd000c428851de82cacb0d64c146cd9567e9d55b89819876d6a635bd68bcaf47ffa41e02d9ee97f5a2363bfe6131ae7a21ea5130ae953a64d57d6cbfd45260c5f1946388d445ce97d23ab7ba31a5069a4896bc940a71de32bde02bc18d":hex:"5412f25c":char*:"":hex:"1e81a4c10a3440d0002ddc1bfa42ebb08e504fcc8f0497915c51b6f5f75fee3f0cd3e9c5a81ff6528e0fecd68a36192114f17fa1a4cfe21918dac46e3ba1383c2678c7a6889a980024ee2a21bcf737f7723b5735e1ebe78996f7c7eace2802ebb8284216867d73b53a370a57d5b587d070a96db34b5b4f5afe7f39830498c112":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,32) #1 [#2] +depends_on:4:2 +9:exp:5:hex:"3fc76d627c775de2f789279dc7b67979a9f1cc23c8dcabc9":hex:"8f6fd53eb97e12dcd4d40f2843e25365":hex:"e56995df73e52606a11de9df6c7bfb0ef93b86bf6766e319aea59372060294b0e1b13c6288c2310a4bef725a2dddb174f3e1228649861757903c4497a0eec9c141454fc75f101439a2150e368857c4f0f6e5161c42c77f632bf1c229a52595cbf16e9018de9a8f6a1e6b8b18bd244f93f001eb2eb315405d223c0d27ece9d4d9":hex:"92a60d38fc687b92d44635aafee416a142d11a025680e5aa42e9ba5aa010462991ad3dd7328ca4a693673410f9bba37f05a551b949ab0d43fc61ef3b8996dd3fc1b325e66eec6cc61ea667500f82a83e699756a139d14be6ca9747ed38cd9b1d9da032ece311331bdcd698666ddc970b8be2b746ec55fe60e65d7ae47c6f853c":hex:"613ba486":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-192,128,1024,1024,32) #2 [#2] +depends_on:4:2 +9:exp:5:hex:"b10979797fb8f418a126120d45106e1779b4538751a19bf6":hex:"ca362e615024a1fe11286668646cc1de":hex:"237d95d86a5ad46035870f576a1757eded636c7234d5ed0f8039f6f59f1333cc31cb893170d1baa98bd4e79576de920120ead0fdecfb343edbc2fcc556540a91607388a05d43bdb8b55f1327552feed3b620614dfcccb2b342083896cbc81dc9670b761add998913ca813163708a45974e6d7b56dfd0511a72eb879f239d6a6d":hex:"e3dc64e3c02731fe6e6ec0e899183018da347bf8bd476aa7746d7a7729d83a95f64bb732ba987468d0cede154e28169f7bafa36559200795037ee38279e0e4ca40f9cfa85aa0c8035df9649345c8fdffd1c31528b485dfe443c1923180cc8fae5196d16f822be4ad07e3f1234e1d218e7c8fb37a0e4480dc6717c9c09ff5c45f":hex:"28d730ea":char*:"":hex:"dafde27aa8b3076bfa16ab1d89207d339c4997f8a756cc3eb62c0b023976de808ab640ba4467f2b2ea83d238861229c73387594cd43770386512ea595a70888b4c38863472279e06b923e7cf32438199b3e054ac4bc21baa8df39ddaa207ebb17fa4cad6e83ea58c3a92ec74e6e01b0a8979af145dd31d5df29750bb91b42d45":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,128) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"2c186654406b2b92c9639a7189d4ab5ab0b9bb87c43005027f3fa832fd3507b1":hex:"3a0324d63a70400490c92e7604a3ba97":hex:"":hex:"":hex:"4c61cd2e28a13d78a4e87ea7374dd01a":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,128) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"747d01d82d7382b4263e7cbf25bd198a8a92faabf8d7367584c7e2fa506e9c5f":hex:"7156358b203a44ef173706fdc81900f8":hex:"":hex:"":hex:"9687fb231c4742a74d6bf78c62b8ac53":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,128) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"1cbe30216136b7eaf223e6a7b46c06625176d9a08182fa806a63d8b143aa768b":hex:"4fe6ace582c4e26ce71ee7f756fb7a88":hex:"":hex:"":hex:"d5bdf8ec2896acafb7022708d74646c7":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,120) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"f31194c83bb8da979a1eabb3337ceb3d38a663790da74380d8f94142ab8b8797":hex:"404efd26b665c97ea75437892cf676b6":hex:"":hex:"":hex:"e491075851eec28c723159cc1b2c76":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,120) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"daeed52ae4bf5cbe1ad58ae4ccb3da81fb9c0b6f7619ca21979313ad9d3e83c1":hex:"4037eadb11249884b6b38b5525ba2df4":hex:"":hex:"":hex:"360c6ef41cbd9cd4a4e649712d2930":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,120) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"3ad81c34389406a965c60edb3214663ac4a6bd5cfd154ae8d9dc86dae93def64":hex:"cebbce06a88852d3bb2978dbe2b5995a":hex:"":hex:"":hex:"bd7ca9f6bd1099cde87c0f0d7cc887":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,112) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"4c152ba30aefa5b2a08b0b4d9bf3f16fc208bb0bc4c4eca9411dc262d9276bad":hex:"008d040fbd7342464209f330cf56722c":hex:"":hex:"":hex:"c87107585751e666bedae2b1b7e8":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,112) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"9aed4ae6b1d857fdcbe5aec6db38440613dcc49f24aa31fba1f300b2585723f1":hex:"947c5f0432723f2d7b560eca90842df1":hex:"":hex:"":hex:"7d331fedcea0fd1e9e6a84385467":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,112) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"cc80bc031676eff5f34dd076388a5130e985f9e06df4b4bf8490ff9ff20aae73":hex:"51f639467083377795111d44f7d16592":hex:"":hex:"":hex:"02d31f29e15f60ae3bee1ad7ea65":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,104) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"db7a40213b5b4b07e9900dc28f599403b0579cbce13fcd44dff090062f952686":hex:"aea6f8690f865bca9f77a5ff843d2365":hex:"":hex:"":hex:"7f2280776d6cd6802b3c85083c":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,104) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"299b874eaa8b7baf769f81f4988a41e2708ae928e69a5ba7b893e8e6b2db5c3b":hex:"2aa04d85d2c0dc6f5294cb71c0d89ac1":hex:"":hex:"":hex:"ea01723a22838ed65ceb80b1cf":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,104) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"a6c7b4c8175db4cf23d0593ed8ea949043880fc02e2725f0ab90ae638f9dcfce":hex:"ae07f8c7ac82c4f4c086e04a20db12bc":hex:"":hex:"":hex:"1132e4fff06db51ff135ed9ced":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,96) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"b98e1bf76828b65a81005449971fdc8b11be546d31de6616cd73c5813050c326":hex:"929b006eb30d69b49a7f52392d7d3f11":hex:"":hex:"":hex:"33940d330f7c019a57b74f2d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,96) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"09ccef64ae761a70fe16772cba462b058a69477c91595de26a5f1bd637c3816f":hex:"e34b19381f05693f7606ce043626664d":hex:"":hex:"":hex:"2adc2c45947bfa7faa5c464a":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,96) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"654cf46598e5ad3e243472a459bcd80f1e026a65429352dbd56e73fcc5895d1c":hex:"a56f27709e670b85e5917d5c1d5b0cc2":hex:"":hex:"":hex:"177b9a5e6d9731419dd33c5c":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,64) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"84bca1b2768b9202bf194f2d5e5a0a5f51fd8bb725f2bab8a3fccbdb64a4ea70":hex:"c45b2708c5bdf65ec6cc66b6dfb3623b":hex:"":hex:"":hex:"fe82300adffd8c17":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,64) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"c8ae011795c9a60ad7660a31fe354fa6f7e9c2724d7a126436291680cd95c007":hex:"1bd9ea6186450f9cd253ccfed2812b1c":hex:"":hex:"":hex:"35214bbc510430e3":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,64) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"df2f0a8a3849f497d12bda44e12ce30a6957f3febcd5ec9bc134171326ca66d3":hex:"728cb9608b67a489a382aa677b1f4f5b":hex:"":hex:"":hex:"e2ef5d9cc5791c01":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,32) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"78e8a8ad1ecd17446cf9cd9c56facfd4e10faf5762da0fd0da177f6a9b9c3a71":hex:"f169ce6f3ccc58f6434ae2b8ad1a63a1":hex:"":hex:"":hex:"0fe57572":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,32) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"02ca6d8a862e25db9d68e4404abc107e700135df4157cfb135ce98eaa33151c9":hex:"7b722fdd43cff20832812f9baf2d6791":hex:"":hex:"":hex:"72dea6cc":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,32) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"9a2b709dbcc3a4fb15b3ad541fb008c381b7e985b57df52f07ca7cd26ab1ecc4":hex:"729baa4c0ef75ed8aae746376b39fe3c":hex:"":hex:"":hex:"2a0d607c":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,128) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"449d39f863e4909984b37f2e5c09ea4d4b3e9fac67bd57c299e4e1d1f084aaa3":hex:"d8e9118f331bb5a359f0aa8882861b72":hex:"4ddcae0bc24d622e12bdeaac73e8d1ab7957af051d27dfaafce53aeed4cdd3f989ea25989a2f41cfb3c38dbd841c5560b0b5ab1861b1fbcd236865d13da55b50219462e021f8a21848a64a85326031fcec8fe47a6ef4a435dd2b2fff637644ffcf3914ef2dfa5dd556421bfd297be150b31db039f0f2cc422b282e659e70cceb":hex:"":hex:"c595b9d99414891228c9fa5edb5fcce3":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,128) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"3e70e66813fc48f984dcda4d1c9c24f1d5d1b71ecfc8bb9581782e7cca5a5cc6":hex:"d804f1051e72c9b7117002b862eb45ff":hex:"0b1ab2b7a87cebac668c7a532fa8fa56a22cabf0c41fc1e6744ffe07c857c6865d623f508351f98f3f0c577d1eb94300a30a445472218c8ac626b0bee7d4c122d33f8130436a89add341e8ef7e00694afb4ad80d314d87ad3f921c7105eed05431b8151df7cff2c8e3790efd4acd3f60332dc7f34fdd90beef70f9093361d65b":hex:"":hex:"c09c2e3fdfefa222f7345ae4efb978fc":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,128) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"8e534041090b45b80f287dc5fa20ebda017ad81b0530e680f62c6280fd8881af":hex:"ead675b019ef5c6bbf4985f2a382d6c1":hex:"b1db220052c4bebcef27eed6db0dc91be481179d71160c5a2ddb2fe497a05484840b04cce48980057d770fbbd0d5f3d5c633b55470617ad2cab5767188283310337825c4b0eafe13b5b11293dec230dad43b220885105767938c7ec4600fe063f98aa14bc6afb886fc874c10546749da295f571e696305bd9165486e29f43f52":hex:"":hex:"9aa0cdad5686ca515cd58aed94938ef4":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,120) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"2de18874470c09db683cf45cd752bdfa8bf33e7967220b1a69f41f2a02da1d80":hex:"af30eb2d0a0c2a50ea413f3285aa88d4":hex:"22889b868d8ccc9f488406813caed199b23091ddd796c8632f564e7cf5a39dfb725266a931fec958659b6fc5b6b9343b8217edb0acb010afc9416601155262b57bd398d62f555953f0e15958e19ae004fbc9cb25e0269a9eaa38a4635a27bfa719fb249fa49337796bcf5f416bba87fbf3b19f0d8c11290c25ca50bbdc822f01":hex:"":hex:"646bbc9b14681af65b0d1c4c9f1d0d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,120) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"1a1bb9122e762ecd7ff861a1d65e52607d98e7ae5bd1c3a944e443710f3b0599":hex:"32f99ea4cbf52c2701c2252e5e6c863d":hex:"91b7a70c3a06c1f7f2ea584acb5dd76177ba07323c94f2e8f7cbe93fc0bb7c389c3c88e16aa53174f0fc373bc778a6ccf91bf61b6e92c2969d3441eb17a0a835d30dcf882472a6d3cb036533b04d79f05ebfaadf221ae1c14af3f02fa41867acfdfa35f81e8a9d11d42b9a63288c759063c0c3040c3e6ee69cf7c75f9c33fea1":hex:"":hex:"a8e29e08623a3efdbbe8b111de30a4":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,120) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"3bfad1e8f9850577f9ba3f290e9a5e91b494c2d99534220362e171a7543177ac":hex:"8410886b70c57d7ded8596443bd1b157":hex:"ca801c83596795515ea931edba00e06e332bf84246b7036e10b317e2d09a51b2981fcb664ee3bf4180bb0b12ed1cda221abc6790b27c26914f5ef9cea9536e2453cd5b247cb054e295c2687b725a97cbc484b8eb86c6ceee03bd07a54a9301a3ac0ddb23aecb825a238252e7575329058b40e75575a7f16439edf5be163ce5f5":hex:"":hex:"e3645db0c600dba52044efcecfc331":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,112) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"65debdf2f2191a6cd8de8ad4d5d4d0d8f731f67744e2545df6b2a7cba89c1ee0":hex:"fdab2ee547dd8b6f5a4ea2dd19697b3e":hex:"d2b0a0438ee0f145aec9a7ca452b788ecb473152b78fb75f6ace721afc7b0ae1942049b790f3a5b6221a8760295659756d35347cc04029be03459f3e23a71209b4e0bbe13a253a888c83db23376d3a6d9a539f7c9fa4a12dc64297e7c93dfa0ab53ef76b6e1d95bf6f3d5e6ee8f08662fc03ec9d40eff0a43f23ac313671bfd9":hex:"":hex:"c25fc157c3f2474885e2eea48aea":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,112) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"496ae810380460d40cd2fdae8c0739f16b87205cc7f57db0a71a473eb361d570":hex:"77233de96f5e1744337778212b411bd5":hex:"85f5b54b4c4af5c808120bd28d98e44e96f4126623e57684957e9fc4fd1a2d0583940b8fc8314a249325476e8d05247831b04709580ae714e8187cd38f9559419e14c9fc4f8c454ec191b8ef2a3610988fe3339d0dc6b72f5978f9eff9d596dfabf27056e3a908c6497267461386e860f6b9d65526294bcb92908b5661b06b5a":hex:"":hex:"4ed91af6340e70b0c2b94ab6f82e":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,112) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"aca188183b46139cc7cffc82a6aaaeb2fd73cecad14e75c663bd62daf1ec711d":hex:"7bbf7fb55eb70cce94cc6a2b67de55ba":hex:"015cfba90f069545fed60f31992ff3d3c3592eb91e7a53df5978ded64291954cb99a57de82d5398ce782b68d14ac04a8b425395bd076ead59eb445721bdb2f45e19fa089117800cbbac7b8313fb165ccb1122acb654e1242dc7fe6885ea1cbb7281b1270cfa1549cdfe9b47caf47b4ac3807e562e48c066566f5e606b5023b47":hex:"":hex:"3bcb5c2a4261d75bfa106fb25ee1":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,104) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"8cd6815f6ec15f03b7a53f159e877a5981e0ab7f6e6c261ddde4b47cbb2f2366":hex:"c431c07d9adf5f61204a017259cddd75":hex:"4e1a835402bde4f5227e64b46a1f8d0f23a9434e189377fcdf1b9621ba1987eb86a7f3b97ed0babfd674e74c5604a03dd016d71000a72bbbd00a7f7fe56ad0fcb36a3e24dd0fdb63bd66d4db415f35012416ed599796ca3f678df7eb5a1b17f75abb348ddd3b366369a7b362c9488aedab836b61f9a158f0b129c8ca0a53a81e":hex:"":hex:"0e463806ff34e206f703dd96b3":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,104) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"8f0a72abcda104aa7fae501f9a3b686d00d3f6fe984731db8a2865bfec587073":hex:"ab8acd063775d1b1314f14e90fddd1be":hex:"02c6d426e7f20b725d8cde0a6382e49b029b52126889013ef45251f27b2fadb95ca4a9a3b16ad06999eeca4a473e813045db4942e9b9ff2e5a5e429d9bac298372344d1b781d5facabf6d779643f31ada6124eb50aad599044b54279ec9b25714ac8a3b9ad2487cec7f4b1ee245d7be3d496d6af1d4cbee1c8201312541f3064":hex:"":hex:"3f0ccc134091e0c0425887b1b9":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,104) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"417135cad74280e6f8597dc791431c95cb8fa63bbf7197e3ab37c4b1d6d9438a":hex:"0fe22d9ba1d0e32656e3a9f07a517a27":hex:"a0b2712e81d329d5b076a4be2ad6823cee6dbd17d9a592d065bdebb92b1ff37a56bf2f5e5341f39c574246ccda19e5f35fede49c9ba958f3920cc5440fb404fab7846884ca0c2a3af5b51f4fe97a1395571319cc5b40f8aac986d77de280db82343983982638326ef003e0c013af19c34672975dc99ccc0853a1acf7c617d965":hex:"":hex:"888b836c9111073924a9b43069":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,96) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"304824914e32ea0efd61be6972586093349bd2cc2cf0cff44be943682b2dbff5":hex:"b6d927a71929029f6766be42746f7cb1":hex:"7281c81c7514f4b17cb125c4649006ef8959a400a1e4d609d277e363e433725fa32346a10bcbd826b6afc8222158920d0a2db1e6fc915e81231c34c3941ecf3c6f94ffe2136190cae3dc39a4277acbc247f36291b5614a8433b1a0780434a6c50521b72ec25145bbd3b192647155d5dd9df9e66762d39592602ea99bf9bfff49":hex:"":hex:"b6044c4d7f59491f68b2c61e":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,96) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"8a10e9abe9389738e12a4bb6f553ae81e8bd320e0dfbc05fbae2128c1fde7a23":hex:"6da44354e198e3beb54792718becbcc1":hex:"199d754630135b669bf2ec581d3027a569412ab39a78dd9d482e87b778ec65c6473656260c27827e00e566f1e3728fd7bc1853a39d00e43752c6f62c6f9b542a302eea4fd314473674f6926a878ec1e4b475d889126ce6317115aea7660b86ab7f7595695787f6954903f72361c917523615a86d6ce724bd4a20c9257984c0c6":hex:"":hex:"5c5683e587baf2bd32de3df5":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,96) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"d164ffde5dd684becaf73e9667e3e6acb316682c41aea247899e104a54dd7a7f":hex:"1d388e19e9d7a9750e2fc1187d4b075a":hex:"f166a5b6f91261cda56f1a537f42ffb8aed10af5e0248f8910034b92dbc58d25953f1497f571d31fbf5ec30d92234b440161703851f0e43530418147ce6270fbcb5db33ab819ba8973051908704b6bea8aaca0718947e6aa82498a6e26a813981783ed9bf9d02eb1ea60927530c4700ff21f00179002b27903dd4103bbc5c645":hex:"":hex:"52e10495105799ead991547b":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,64) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"2854188c28b15af4b8e528ab25c0950fc1384976f242716c91bddeec06f2fdea":hex:"075af9c31f5252b8920092cbd999e7a0":hex:"e9452f71093843a025bb5f655eb6a4e8316ab5946484b11818f22b62f4df75d5891fa3397537093a261dc9a7648b7477ea1f5fc761716e302763364bcab7992595edd0fc1c7f7ac719c879e6616e2007948eb8530065a6cccf73d0fe4a0598819b471b0856e6d90ea0fc0e5d36a30ee925b6b8e5dbf40e77f01efe782c0bb4f7":hex:"":hex:"6ff8fd87e5a31eb6":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,64) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"2bfc445ac0365ae6c3c3815fd18bbd0c60ea224f6620d9b6ac442a500221f104":hex:"43c5f3367a9955aaee1a0c4d4a330059":hex:"db0bae8ce7c66a8ba2fedec22f236212e9a7ad72b371de285c7dc6d2f6c22df0ce4920e0f03f91eb1653c4490050b9f18a2a047115796f0adc41707d1ffcbf148aed5c82013f557e6c28f49434fc4eb20112f43566f212c48cec9894ac40772fcd9b611ee9444df7b73e35b8a38428ccb064c9c50491d2535e0b539f424db83e":hex:"":hex:"49aaa806cb2eeadd":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,64) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"7b828f99aaf751bf22d993ed682e488595617a607ed74aaacbb6b60457453080":hex:"d48dac1d8d77e245420feb2598812418":hex:"f50f785f4e7c848a55a616ecf4b6b1e1ca85e16de7100c7e4273d411bd95c1380ee157ba501ba9616980195f34e39f43e335f33253342feb8ed64443483c721b85241a0320b3cac83104de2db47188c61a373fba592ea16feeefdee1f2bb43927396f58151418672ebb74afff5c029503a0d0be81430e81ed443e08b74c03183":hex:"":hex:"a5b71ecf845b25d0":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,32) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"7b6da11d69fca3e4c907628d3eb63d95c7e502fc901372fd097e064e70831432":hex:"6fe2148f250ea178d4c8ca8423ead87d":hex:"a8097bb74ded776f578eb7588f5ef8915db9bfa7262af700c8e76ee114e07557b6786dd5a60a66b2703e7c9de5d6b42aca92568aec5d1ecc298dbd0edb150b8cc13c9a78698f7674caa94da6cacd1f3ef4ca4238c59830ea725ab3a6284e28966c8c32d9bccfb0cfd6583a5ca309debe86549a6f317d15c5f928cbc7f473310c":hex:"":hex:"e9cdbc52":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,32) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"c5ae9328be49e761064080fc213e53e373fd86359a09d0355e2d438d9b8e68f1":hex:"a7e3f8660ff925d5c88c5aceffbd7026":hex:"2ddddba7a56cc808aec4602f09ae9bd78887827bf0315d8dbe16821606ef9d117746dd138bf1f23565d1ab8f4cee36d53fe3730632c5df9f12109b16edbeae285bb49dfdd155f5dc97b319a85362d53cc86817b7c1c31e5e87c9f37422f133d00dd0776bd92ab05ce6860573cd911645cfe3fbe515e85f744899a447fe443653":hex:"":hex:"e35dbac8":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,32) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"e4f8ca13ba86c658cc7f42d4f029422209efbd101bc10a1df81a42cfb3a0f79f":hex:"1a362fa0e4054ba11e4b06d59c8bc9cf":hex:"e7ad5c75aa13659f8ce4b1650c46382645ec67418199b84ea445b8ceef619ef3fbde59ed3d313c459e36fcf87d26ef2b453409b32f1086934c3072c1ef0aac83762d28b1193b9afff2c083ce4300b768b0ae23ff9d3dcf65bc1693f1350da65180620aab205aceacfc683c8be53a332e2d0337a7518d2a5204f9c8d7325a4799":hex:"":hex:"e7a37f15":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,128) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"00050a21ca1e72cd0924be31b943c60854be6744577de3dd9d1f4fada4a19ea6":hex:"2fc1afc1395d8409919248709f468496":hex:"":hex:"693ffd3d92294857a99c702a0799eeca28ab066dd90917b9ea5ef8f6547f1d90b106cbec8ef2c22af9f8efa6c652f2f97c2baf33af14fe9def230d49524bd65909c3df1490f637f99e788dcc042b40e00bd524c91e2427ef991bf77e7b2f770cda6e90076c5dac4cac7ee3958b53ff8ce846c3a96281f53c2c52f5f3e523536f":hex:"e39b6a7fd5ac67a2a1cc24d5eb9d9c74":char*:"":hex:"cfcd6b9ff7641829cbadeaa2e56f1f150a099eccf3e378fa4da59794dcc4490aa4f9c5db0ab245bec36a7d4557a572008e42f03bc1baff3c946f23f54a4dc9828f106cf4264e4ab40165839d1085e7795b1ae0950f0ee4a08e46ada501b6b51dee0e518129c9426e5bd44c66674a9f99cfe676f002cfd344c5bbd22d3d91e600":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,128) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"f10965a66255f0c3515af497ccbb257a09f22ec2d57c5edae322a3e6d2d188ef":hex:"c571ce0e911de5d883dc4a0787483235":hex:"":hex:"91598690edf2de8b27f9bc7461a84e80811cee544f0542923898328cf157590251f0342cb81d359b5dccc5391a12320d1444c26f24178977dd6705c2b365dc1ece0152c42e2f0ee3162cf886ef5529f4f16a77f3bdd2aeccd405b59addf098521d0d38cc25f1991e11be7ecf24caedb48a2a286d2e560a38fa9001c5a228c4d1":hex:"6d9d3a5dbc8dce385f092fff14bfffda":char*:"":hex:"2867996e389e09ec0da94d42e77b1e436b50065b09ca4adf1cd03240444ee699dbb7b3fc081a1869ca607d77d5ff9754fc3c997ff0a4ee17543a2ba77886b88a7128bcc51d3450df58ff3a26671b02c1d213df6adb6f7e853080eb46b504517cbaea162710a9bbc2da8b552eb6b0e0cb98e44fcab0a157312be67974678d143e":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,128) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"4437ee7d16d8c3ca1aa01e20b66749efa901614d4bb4bee786ad5a5f1bfde2e6":hex:"275393276745bc43bae4af1e5d43a31e":hex:"":hex:"ff80727a3485cdbc7fab4ee9fadfdc621c538e2055706629046078f1aa3fb687fc728d3a7ffa52ae457b7b5649613eab7bafa464bb435314c49e5900750f7ad39ca9b75df6b2eaa755439e101f67b7ae4cd80dc4a9dea0027048253f2d0a6014056ca69b8c85605b00cf75fa7634a0ddf464270a8c79ce1a1324c4a4c513b24b":hex:"a82ff1e87d26e4d6e417b60fb2d3ce23":char*:"":hex:"88f994d276ed20be3932d16f551c4b7e2ed80411f2e72ce098fa0b70c22157a59edab30649fec447dd63f0c87dceca7238ef0d9561b58489ba7bd86f2892743099f40af63c432f78ac0ad0b5c2be47b9e3045e7237b096ee400f430af63a6f309de785caf190f3f4aabbe79f727a741590de542bd343df68d13db55a5f8bab41":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,120) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"fe4ec037ce563dadee435cfcb2bf090f1f7ccc7d1b5b4fab2f1b738348f8ed2f":hex:"47f5264f7a5b65b671892a05fa556f63":hex:"":hex:"64eb8a4bda9804c09b04cfcd89094928c21480908b81ee19d6c29c2a3631b1a5bdc8e7f8ea56f7b8b8e14a5208296026785cac3a6afa54be8af4d5faedcd12b6621bde0f8ec5a2635fe72a89468ca7704c73aa40cd2ba97aef08886b27a694d339b00e7d12a31308672f87c06a7388a1432f869eb4cc1da864140b1b33931925":hex:"660462b4088f6628a630f2e4170b21":char*:"":hex:"4a310e035361f98b8c54fb4cef70b1a9c910552ece056ca8fdab54c52308ec0ad7fe9dd1dae92badab5010577de522088768fa6466fbccce22e14c51ca7986c4063d0f06bf578dab16a91856713198a7138395c49c78b6314b57ab72fd079028c8dc351952d90b04a7cd2b245df0c0522447cdb7d3329fd9425fe5cb40a8e7c9":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,120) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"e6e1ada628ca76eb9832cc6b5efc5c9d2686bb587366a6de2d734233fa95279e":hex:"5a100b451e3a63a3e6d4b8a9e59c6bce":hex:"":hex:"a0ac738e0fb35246b84a6fbe319f827039515df25d0c0fc6de7c048253ae63d3c561e44a12672ffeae1cb925610b482aa422bbee0e1784fc69baac3a97d69f51e6d2a17957b44b318624ea7ec680a559f4d3f2761d09bee66efb3a312ae6b3ecb673e756b2a0f654671e82500e7ace91f2be2a74bc3bc1ec1a4b6877a53c27c8":hex:"88df9a1ea54e5bd2ef24da6880b79d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,120) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"cd5c1e90d78213155c51767c52c290b3d657db8414ee0a7604a2ec7b48105667":hex:"4e022d8d86efbd347e8cbab7e979771f":hex:"":hex:"8e987693da0fb77b6d1282eebd3a03e05d9955ff81929b1a2c721574862a067ddee392c7ece52ca1451f3e6e321d7208882d97b4149af6d78d65c054e1bfcdfa62bd2202de32dea8363f8d7f041891ce281840f3cd906ab46ca748e5b3b11890b4014bf0271c9427c874097782d1c13dbb40e78fc8276fc134f3c29923a43a01":hex:"e7df79af0aef011299c3b882e3a45b":char*:"":hex:"3b20473d9b5018d089e7f74d3fef22ec2805948a9e07689831973c704a6d8db4d090af88d696ab8c3aae9740a2bbd7f03e0b18b2b591e59c335c1043a2578a89b1a9f20fd0dd53f12e00e9bfdb27de8caac772bbfc4de9e4a255a5d1b04e59625a87b8279babe613def58d890d5502abf2f709aab625dcc20c58772832c7bbab":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,112) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"6e3dfc07003bb6a2d82bd5263b2832f47db4e73279266c7a9ea21f4f18eddf83":hex:"7c0f49fb54f5e68c84e81add009284e6":hex:"":hex:"a960da222af9d4da5797e6957d59b00f6d3893599c70e95c0984b56eb3329b191703c2532f3288b15ebf655b9b5ee4617484e5ac9c39bb06731d03ebe4fef9495d003b0ed694cf540b4dc759d32629e55512680badd81234bd71ffd55fcb5e6a85031c1dc31ee1ed198939582d8336c905717cc87101dcfcf9d833fac815c8ea":hex:"b2ec0f3da02a9eb3132fb4ebe3b8":char*:"":hex:"a40b6f70f0572fe0bc70d83368e7c154f7dbd501f52501630a2e523d18e216e07368521f6040d806299397722b99bcf7f85d36b8bed934b49aa1fa76d38783e6a2e392d6d0786d467f7bc894a739ecf94f0fe884a9c391154f8326bf31ea5242a18aa263d04da4b63b11de23b42d3e10a2d5460cb32700cdf50a0d89165ba22a":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,112) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"4103b1ddff87a508a219c808a04ad4750668688f4c2ee75b92d28d70b98a2c94":hex:"5cea906737518c2cb901016e30206276":hex:"":hex:"a00a196193ff07006b7df524824bd0971d63f447a3a7bb1b75c1e2d11789482c115cff677b54948d36dc4de34200bce97be0101d88cee39b177857dd5da3cb0d2f9d6e1150f72a3bd655e0bace1d25a657ba9a7f8dff082b4460432075afb20173da22b49beeb6a030d72ba07869ff4389fc1c28d87018d7c1a9829c21932197":hex:"3a3a771dd5f31c977e154ef5c73a":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,112) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"cd8c2f0c330d5db316dae7a16b57d681ca058864f7bd60f3d0de174442283f77":hex:"387ee8c1e7f047e94d06d0322eec02fc":hex:"":hex:"e2a5ad295d35031535bf13c2993bd0b292e8a9465b9dab738e59ba03670248a1ecc92b38a55bae34729162271cc1572c35fcccb27417b48dfcbff852a7a8845cc829a4461061b558ac8b5930a5c6491ffba04a9d0dff220b3cd5e4fc2e0f3db3b2ddd90328f2cad819573a7856299620b02f5ee0267f3b56981afbf1b7d9e3e1":hex:"62356850d12b54e39872357cfa03":char*:"":hex:"17b7f6bdfc1993c56dd9bd674cc276a55a46fdd9fd5fe435b9e4b7ebc7052a9dc76a99e4e43aba7d486603189c90d10a21ad3722c86bf5bc856a0f930ff5bca65be708b76bb8a29105da67f31eebcec81f28aaf526d2f8f0feac393a24959dcd612e2b93b4463f61957d2b3046bcdf855e346601e4c7760c0ca618ee7bf55381":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,104) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"7e19e400872eed721d560202cd757d3eb99729496b6e3a6d38dd8afe1066045a":hex:"d2b277f78e98f1fa16f977ce72ee22a7":hex:"":hex:"3fb9abc7aba654dfb174e8899c17db222ffbb387b7260fc6f015b54f1cd74284c516e21aae3b72338e5e8dc643cfafca0678f5bda3a7539f1612dddb04366031b5a3eda55f3232c1b176cc9be7cc07e0ebca674a272224929c401a2530efc6d4eed0087b544b12d172a01bc8340d9c2a2ebcb5af8b07d96073a879fda140c196":hex:"4c81c044101f458fdfac9ca3b9":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,104) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"d0653934a16fd36c27d54488a1829302b931bed6e26ca26047242b85b50bfb61":hex:"94886a1845aebba5ed6b86f580be47f9":hex:"":hex:"c02347e1add9178d830d8baaad9aeee37e958bedf2cc846e2561fe8c83481d0a8a85911e7f1f6e444b28f30bd96c13c390e80f616feb6844ee6fa486543a2e3f38c138f45b4405e3fb331b64648219aaf1d574be948ccfca6afc18d12488db19c35b05601e47c0af5d49a93a5dd4420f38585c1eb033e173376fa390d3f948df":hex:"4be34ff42085ef4443c8b6042d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,104) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"d0f0ccb88c7cec9496f26a59ddc67dc59ebe49ae3dd89ef3be008598727e214c":hex:"e5ca84b907ac761a5e68a9080da0a88a":hex:"":hex:"7845e155f4f28021291e7c814a1ace8f42b239990831aa82758fc1e376cace0b6f668f7f2f224dede1ef5b1df7ae74b2c01483701044acbbb72a9216eec6b7ef0190f114b3c73c6985c4653f11601c774d10b7f9df1f1e1f3ff4fafa20d6525edb37d9e5acfafe6d3468ee068d407fdb56dc718c98425926831253978d727854":hex:"c8f78e4139dd3eaf2baef8aafb":char*:"":hex:"0cc3ede50b0d3fb9ada11300a3239a383c98f968ad65266d57a195bb18d3e568fe6cabba258da4bee9e923c7c838e06dc887a6c49cc1453ea6a227c6a83e651a8742e0316cad5efc93739393e3603446b5c920a206db1434adbb8ebde4d1a7a8699c7f6c61b2d57c9709b564338423b4f526d6c157647a6c45da9dd521061f05":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,96) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"e35dcea17cbf391491ae5ba6056d0dd13b348183474dd4b614742751bdebfc32":hex:"fa549b33b5a43d85f012929a4816297a":hex:"":hex:"5213542beb044910d7fdeec8bb89de93f350760e493286eaef1140485380d429f74a4279c1842a5c64f3ca3381cb5dbb0621de48821bded650cb59703e0ca88f4e9c3d15875f9dc87d85ba7e4bae9986ef8c203fce6f0ce52c28e3a93befb4cc4ba3d963d2283cd30f9bf6ab99d92f2f4f3aff0b022f1751b89d43ea10bbb28a":hex:"afa61e843cee615c97de42a7":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,96) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"844c50ddc0ac1d9364b21003287d6ae6360d12bbb17a85351362420ee4ca588e":hex:"2f8512bb7e214db774a217a4615139e1":hex:"":hex:"3a3bf4ccaf05f7c02f5e158dd2c5cb08c6aed4b1ba404a6d8ef9a0737fe2f350b3e22188fc330ea63e35df82f996e3cf94d331c4246cdb25bb2c409762e05ddc21f337edee51b64f1766ad18f520b3f34735b24278d9d647c533a743e0c1e9c81e9dee975cdc47e8582113fd250ef59353605b64acb7c025a97854c1a5c03237":hex:"f1da1cebe00d80eb4e025feb":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,96) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"2aae1aa047a20ed2d6d8336d923864cee9404f924031ae327fbfe2d293e1d93c":hex:"3da9af3567d70553ca3a9636f0b26470":hex:"":hex:"8e5b6b9e4e7d01de9a919dd33c0c1eb94dcfebf28847c754c62c1c00642d9e96f15b5d28ad103ff6969be750aadfd02fc146935562c83ec459a932a2fd5fda32eb851e6cff33335abd5c2434ae4f5524d6bc74a38094ced360f4606a1a17096ff06604952c8ca94a9a6dc4a251e13b0e0c54bd8a6dff5f397a1eb1cf186fa518":hex:"e1026b3d15d261b2fb47632e":char*:"":hex:"58c52ea9f3b162511160eed1a68b6f52b3c4f5834af728de97a3d9e4ba337b29aad12636003cf5be9ffbeae0f383f7cf32f645a8f6fc5cdc1cde91c625c69a92bc434ed671e52a0044a48f3fce55cae49a7d065c2a72603a7efe58b5a7b18ac500d1a51420e820357e7a439b1c02198ebe3d4e62d5573a3aa5f40900a21e3b41":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,64) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"f3d69208cb0d27474e9a231cd46eac7c1574fff950c48bbd1ba03fad16f563df":hex:"b957f05921d21f2192f587768dc12b4f":hex:"":hex:"0d1f06eef5e8f2c81d1a73bb1dca93c22cfb6e40e9948bc75b0d84830fb9216330424f580b89050c3fb3f620eca8f9fd09fb86d2e8b3a0869c6022d8a705fc280d66fd16d3aba7395d6be4bed44145d51d42d56285f3675726d62d94c081364a6d440511de83a613c598b03078e2ec7648c6302defbbea66aafd33e1a4b1686c":hex:"322374fbb192abbc":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,64) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"cb2cdeb17fa6bcb006c7fc60858a12a411804464458db351957e8caf42f1ee6c":hex:"31bd7c971a6d330b566567ab19590545":hex:"":hex:"296504131354b2c1928982f12d408ba2377f2d4bbe87e4c69f92a15bf6003910a43bda6c8929df66b3ab1d202a5258cad199f32f36cc30d2dc06199c2a52f7ccadad1fce50123c5f8434dec57cc60cc780263d7aace8f59cc8a6c54bddbaded3adb12ae2ee0bacf6a8da635ff85b51a4e8a1b3dc404863b90059de4ad0f158dd":hex:"efc5a1acf433aaa3":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,64) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"f94170790fadab3240df568197f9d6f6855afaed8d07eceeaa2380121872529f":hex:"2f9c0647a4af7f61ced45f28d45c43f1":hex:"":hex:"ed231b78db082f652bc6310c396993b52de804a82464fa3fac602a1286535f59c67fc2b1b420c7321eb42b971edde24cd4cb9e75c843f2ac6fb8ecdad612d2e5049cf39327aa7a8d43ec821161c385f3fdc92284a764a5d1cbae886f07f93017f83a105bb7c3cc4fc51e2781516a2471b65c940ddae6b550ad37b35f53d7cc64":hex:"ab74877a0b223e1c":char*:"":hex:"1cb5ed0c10cee98ff8ecfa5a1b6592391bbd9f9b1dc1ff351e0af23920d546b5e27d62b94daabd32f7f96a2632dc9fd7c19bf55f3b9b7cd492e76f4d6b0f5b437c155c14a75e65bfc4120bef186da05e06a2fd3696f210292ee422ddbce6e63d99ee766b68363139438733c5e567177f72e52ef2df6a7dd33fc0376d12ec3005":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,32) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"797c0091ff8787fe7cd0427c02922620e7f6fb71c52ddcc03a9f25c89ba33490":hex:"69d81c73008a6827a692fa636fbab8bb":hex:"":hex:"2d3efc8900315c3691a8e3c9de3319d4deaf538fcf41aa0e295b861d0ac85baf56d149a6437747dd6976f44016e012b88de542fb8e5b9e4ad10c19deec4b7c0b69bc1b2e33d44a981ded66127dea354b072010b8dc24b85ed2ffeea3b9c0e931619dbbf22677691f0d54fc03eaa162e0ab0d760ad41021f67057c0d6ac19ca8f":hex:"be2dda5c":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,32) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"90ce1afb5500489b9edbad987f4009509c847b3e55cdf0c764ef2fb085e3d033":hex:"e119e166471ecf44bc3a070639619931":hex:"":hex:"98482b54edce2bac1cd64d44917dcf117ebfbfe26ad17a9b263447028304f1cf5a69559c05b5d833420f4fddb6e308277d01eb4b3235f1c4b47d33d3899325b55e7be19d43187a5b1b1354ce02a529b3df1c13b4883902ae9fc565079dee825e705f3e580371e4fd86c3b0d31bae98adb529901f346ca07127314152b4370edd":hex:"b2f54b3a":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,32) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"29264a90f114a800c0fc3247b3bda00981a12a8f85cf3a19ea4c7ffdd005f4bb":hex:"cf296aa43cb7b328e09c8975e067404e":hex:"":hex:"587c8e53ab5ae8c31e16160b4a41d88798e27f4ad61c573c023c62d4dbb3952eef5026ad7b453fa9e0694347ab8fe50a6cf20da566202b81e325cee9c07ab2d4d53ed45b3ec2d2135936515f8a24f2a8116807dce9df3c44edf64c32647145152ff241d9e018e4101e400af070192dc3b498b5a213d265b4cfc8c8d4d7deccb5":hex:"56015c1e":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,128) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"84ff9a8772815b929d55f6052c0354cf3e02bcc8336fcfe5794952b4c45d5d96":hex:"5c044a66e488b853baf479f7dee2aadb":hex:"00304e3d40cbc6d2bee0778462884f4ec047a8c74bb3dd7e100f2b9d0e529fd24730063986117b56ca876b208a3691425ac63afc3d504ccb499c76622eade09717023fcb7d956b01ce24a3e53cb5da472be3fcf5b278b5d9e377de22fab75bc74afa9670f5fe9691aa0ed77e43f6abc67a61ec409ec39fd66ac0307bf195f36f":hex:"a87de56d49725a1625baf12fd15931fe1a6783dce5d1e744eba108f45e0c105d8141dc027d0e33ad7efb6752b43729715e2f3e2c42ebdab4d5f72f886bd821c4372244699ddded99a63dbe7763a5a3bc21cbfc253cdc2514eba2a4f54e24dca7c207cb3f6ae80153d77fe0641f357d5a073dcd425c38deb77c45f27427345516":hex:"72ddd9966ede9b684bc981cbb2113313":char*:"":hex:"aadb8537309940422f67ca393aa6182d67fe7c52092538a15e98a4254f0a9087c7f10903d5e78078c2e55de914dec8b6b35cb720e3e55963c0ac9901e44b83a0e7c5b2d3f002aec0a4a08354febe47b2abb955f2a21107626ef0b8e1e099650812a6fecf36908fce2d078c2735cf7c2b970a309e5c6d6ff29c26a05720c57105":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,128) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"b5ca3991d0160b1729ae1a622dcf4b03b1f4ba86150bd66bf35cbbee9258af10":hex:"f8402184d1cc36df07b68ecb1ab42047":hex:"d378cfd29758bcbd21e26a324239c42c992941b3ad68d9f2b3d2def3a051fd172ee882562970ef59798ff8d9eb5f724ff17626156f4cf5d93e41ffef6e525919af6194ea9bbb58c67563d3ffd90e5a6e2a3a33bd1fa3d55eff5dba7cd439d571f7e08014c4780e3d10904ef22b660897e78258da20b2600e88d71c35ecb6329a":hex:"62aad5854a238f096bdde0711ac6f5763e7fea29db068ea8c911f17ba91e6d7807883e6fc5ba7db17af33da2b00973008a3425e65cc786ce1b97360019ee2cef74563d54752be436b905705b507c3d62689df4edf0356d26b693eb43d8a2a927a9f3866b7e0e19e84a90447bd6f47e31070fa7c2a71e3f78229ee19fa47e848f":hex:"9e8b59b4971130557aa84ec3ac7e4133":char*:"":hex:"556dd32edc0af3c64186fe8c000ddad1516cd14721c93c228e379d4f87e32c79e734539cec930322048f34a2b34931c585d44f09966caf187ec4b9244c991a8a5f263e9da1d08d6086e52535afdb36c7662307521cbceb9ecb470a76970243723fbc1613b6ebbcae261ac2f1936e66ce29ec7350b2e6b2f73a910ade645154f7":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,128) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"df867d1dd8a287821a54479cab6f88636d2aca30e1bf01a5dffc735e17590356":hex:"35019826c51dd1ef07ff915d9ac4ea96":hex:"0375ed93f287eefe414ab2968844bd10148860c528dbf571a77aa74f98cc669a7fc317adc9f7cf2d80dda29b19db635b30a044399f3665b6176ed669146d28f5ada03b3d32d53fe46575a8afcd37f20386d9e36f7e090b4fefadfab7f008e02f1b5022c0eeb81d03443a276eae48c038ed173631687d2450b913b02c97243edb":hex:"6517272cac85d7f38902bcb4b96a0c59c4bdc46bfefa6ebacd7f2fb1629b87ca91de2ffefc42ce3cfd34dcbf01b3f7cadcea3f99e6addf35d36c51f2ceb1f85c1f56a04ec9c9fff60cd7fc238674992183ea3de72ef778561b906202b7b83fe6562a0bca9c1e0a18638e8685b998b4192f5120435809ad6e93a0422d00725262":hex:"e49beb083a9b008ae97a17e3825692f0":char*:"":hex:"723be39bc13adbc48c861b07753f64fac1ae28fc8933acba888b6538721df0a8b91c040a26522fe0dbb7335d8f63d209e89f7cde23afa9ca3c584b336d63a91e07fdd8808b14c3214c96a202e665bbaaa34248ff30348f3d79c9f16e66ad6c5903305acd887a89b6244eb7c2d96e18b13a686de935bf3821444ee20f48678be5":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,120) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"0e8e9ce6294b7fbc534a96bdd060120976a6e08315d2ea73ac61d085cd462a44":hex:"4edc6be20f904b4789e5bee0a80a3fc8":hex:"db28ce076b360816cd1e04b7729f8ab080e0a07f35204350f3bd056945aab8638c0e8311ab056f3e5debdbfbb03fae700770264faf73e0f3a05a5812aee84ab613c82f4a76da276250675f6a663f85e2c26d4f4a8666a7f4cedaffc1a7218dec11ca4e72b8b5d5b620d1efbd3d3b94a5ae0d118b9860dfd543b04c78d13a94c3":hex:"9855f186b51358f0e2111c06bfaaeaec9bf95c55e246375c614fad9883d86c82a20c86538dc5f42a0ea69677d59a20c5112d15d2a8396f12096242ad5d7b838d16ee0679fc4017af75bc15e8ad2f77b0e802c864031cbfb0bacd95c828d1db4b7bab0713619e9e5e8fe6902aac7a9e6c42eb05f5b156f7e663ee43e6fdb62480":hex:"03cfe6c36c3f54b3188a6ef3866b84":char*:"":hex:"e10142f852a0d680c983aad2b4609ccbd35ff61bb3eb66442aee6e01d4cc1cd70f45210acbd506395d6ca0cfebc195a196c94b94fc2afb9ffa3b1714653e07e048804746955e2070e1e96bff58f9bc56f3862aaa5fe23a6a57b5e764666ddec9e3e5a6af063f2c150889268619d0128b3b5562d27070e58e41aadd471d92d07e":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,120) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"886c77b80f5f3a21c01932685a540b23629f6d41d5574fc527227ed0bdf2e21b":hex:"5ec506edb1890a5a63b464490450d419":hex:"05b8d820c9f439d7aeae5c7da0ee25fb0dad47cc3e6f3a47e8b984e856201546975f8214531fc3c2e504d2ac10fa49cb948596b9a8fab01b95c49d6f04d1589f93b77b899e803dd20e1f00a51c0b5953e85be639109b14b100e35ca26d84ea629964b0db8260dfa5a150a66261bf37e79de2ec49e9f1b082a7c58ecd3d39b6c9":hex:"53a17d7b69f607f08676d6f6dd4e8db08e01333a8355d8c87616e84cdf10ef5b041fc6ddc3f6a245c0f534c2b167064af82f45e4702a5e8dede59579fdecf6713353392433950c9b97c38d9ee515ac97d0970ccf03981954540088567a30941bb2cca08cbed680500f8342faa7aebbc6c143e2ea57ba6b4ac1fd975dcc5d0871":hex:"ffdf56e1c1a7252b88422787536484":char*:"":hex:"79ee27adfa9698a97d217c5010ec807806feda37db811e398c3b82abf698aece08561fffc6c601d2691738e279eeb57e5804e1405a9913830e3ba0d7b979213ef40d733a19497d4bb1b8b2c609a8f904e29771fa230c39a48ebb8c3376f07c8013fff6e34f10fe53988a6ec87a9296c0a7cfba769adefe599ec6671012965973":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,120) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"5231ca6d772edd9ea2d251e22d7d455928c22474b4b44130dad57e6511fed6ee":hex:"048698a4a0feabc1f336112e2794795a":hex:"3a81b6b0b722899ff931cb73c39222d555b83ae3f8880b982593cbc1ab8be90d1ee32fd7dfe697cf24c95b7309d82c3fed3aa6b3d5740cc86a28174ac8f17d860ebb251ac0d71751c2ff47b48bfb0b3beb4f51494464cda34feaecddb1dbbe5fa36c681ada0787d6ed728afc4008b95929a1905787917adc95f1034fedcd817a":hex:"2767c808410ee132291585ea74a48ad3102f883f07d060c91c5f10abd37fe0996d2210dc490260238ae15f5d74c7be2a1e15d80db09079c520047f88488a7802857a3fc3b81d85a96949997430a880177880a31d4d0c9c9045247804f057a4f2756d6e40375a4a3187c4376d6bf573ce334cda1ed88d8a50db499e7cdb89d8db":hex:"ba61edeb7b8966188854fc7926aad2":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,112) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"5a3f516a7898e04e5da4efd6c7c5989b77552d195464620c2b35b9a4fda29cce":hex:"9310af6974890c0a0364231f9cc8103d":hex:"2103af8356bcb9dfc2a4f1d4ed09cbcd8e1990d23865605e19f87feb50bf8d10d0257740e5557a9297f0499c01e29a1a513ca18e6f43f7406c865cbe3951a7771128f3110c8da3bd696368901944549552842a1f6fd96cc681b45da098f3c1acb3d237d2363285f520d0b6714b698790b7660c52ac84a42c9721ac7e9d38a2ef":hex:"5cc28b61ae97557774bdcd7ff653f4aa349df68d53c7e5a65263883ef1fe224ad40e86bffc2d38f28a2ed9ae1fc08563e2a1e46246106546eb8e6064c06baa0046fa137421734b7f0f94656a4f459d9d981717557d843700d116b6e5e2dd3af5f67c34edf31b40b71fd3c6f2475f9310feb70bcb973be52d41e86792c49d54c0":hex:"993fc8e7176557ee9eb8dd944691":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,112) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"59c9258554363d8a885fc0f5d112fee08eadfc7ce52a0e7e73e3d0d41d9a0290":hex:"77e51e89dc47bbcac79cca21e81a61de":hex:"25a6f8800a9b914c0ebf9a45d72355c03ee72a138eb81b2980f332645ce1d7aa4659805821866aee2b276e2c032776b4eaf36f93b5f9a72b791be24e31eff105ca6d0700e3069ee327983dd7fe1c7465d6c6d77837aff69055149988e7199847fad98605c377d997dbd40f3e2ff1a4f978a493684e401249e69540fbde96323c":hex:"79c491411402ea7878e480519fd984dde44bce6459303bb76d4eaf97d4e345d1aafaa68ceb0590b41cfed0f411b675d9344c7e888cccfc9eb6fe6b229d198f94ba516ee850ee7f078a4f5f32a23f92f72264e3a76a31ebd042564315ac4f2ec0bb49ba6d08cfd2d3a6308688e39f28e3ecd669c588368cee8210edf5dbefb925":hex:"ee6d85d3f3703b45adb4f9b2f155":char*:"":hex:"44ca68deed5478074adfddc97f06f44c08bf7bca4dee8707d621fc7396fe2efcdad0a167d1708a9ff59ce4cddb86920bf1dbdf41b2109a1815ffc4e596787319114cad8adab46cf7f080c9ef20bcf67a8441ba55eac449f979280319524c74cf247818a8c5478ea6f6770996026a43781285dd89c36212050afc88faa56135fb":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,112) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"5e9eae594cb54c8089330e4404ff79abb1c0841b0be5347a14633ad1e1ff44fa":hex:"0917b486da754f48bb43ecc8766a7ce3":hex:"2aa1ef2f91aeba5da10b48a882dbd4574df4e9157a18abf8cecd03e4176712ba171b6ecb0e745841ff84e35063e47b08101afc44cfd9cededb913a82f00b9d4bac922f23a22f200642270399896405d00fa5271718eefb4cd5fe7e5f32097766ebff36ff1898a1c8a1a01cc18e6121e470805c37ff298fc65ef2fb1b336d09fd":hex:"32abc1eb6077555a85a0a6fd1c78cccca6c8b375842e2eb8eee45ee6c38dc0837443d16c647252e8124639dd01c808ac5e857a25d927c2a75e2fa8955cad5beb5c206fc050cd933fc4621f5718936f01f39dd700ae1aee7537cc595df8789c5d1a6e1e87b1c7a60e3ce5d57c80dd65dee3801798e1481b1963bcc78cc69f8c50":hex:"92282b022e393924ab9c65b258c2":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,104) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"aaf03c3055a35362212b9b059931e7a24fc71e32bc9a533428c9dc31077f2ebc":hex:"7dfccd077b29e6ed5720244bb76bde9f":hex:"21edd1c6056f51fd5f314e5c26728182edcd9df92877f30498949098dcde8089eed84e76d774ef8874d77125669a302d268b99dcd66b349d0271dde6f8cc94dc4f2df3787887b1173cad94d067e346846befb108005387102854d9387d2c0fbc9636cdf73a10d145f4b612c201b46e1ff4465f6a7654ce3da5792daf9a27fb35":hex:"c0e12cdd8233878505e025d52427536be7b6bf1887d2dd20eac7092db80b22417a3a4ca83cdf5bc5e36161be1ff9b73f7ceb297c6d07c9cb2a75035a5dc079e48283daea60596f4b356ca28c243e628cbe459f069709fe193394c9b1a31d8ccc5a3a4eba30056c415e68571a2c34bb5c32efff12e9aa483c4a68be5e76aba4cd":hex:"6154c6799ad7cdc2d89801943a":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,104) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"60c775971a9eac7950ed2bdd85bd60fe948ba04c419f6743fb67f37557e46c6e":hex:"9b92ad7079b0de09c94091386577338b":hex:"1f6a84b0df75bd99a2a64849e9686957c6a60932ebe898d033128be9b757e9890225925d856bfdc33ff514c63145f357730bb0435c65342bc5e025267b410af6fd388a5eca01b7efc87fd3b1b791df791bd47dfab736350d7b7f368b4100e04c939d5af957bab95ed502dac904e969876674602a0f0790da2d7351b686e46590":hex:"8abb2e66a4d08074916056bb8e925551372f737f0e1b597c5d08ee102989743a273b29d7281013f8b3aee2934399cb427370d70370ee86eb41584b653660c633506a53cae747826bb7d93909f069d5aacf058b7f2bbdc58ea08653db857bda83a979fc22a4f126dfef7aac45177f4cdb802fab0c812fb35d12a8176ec21336d7":hex:"1d6cd4ab3914e109f22668867f":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,104) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"3b426e449337a14bc0663246ab61b671b523c9a3130c21ed59c93fa6a5aa5ae3":hex:"e6efc96acd105fe4a48d1ac931eea096":hex:"0902cf7a0685444126369712ac47962bc2f7a3a5837f1b6190d9ab1adb4cd35e7f0892eee628b8e07fcf2b598cebe1ec07d8c4823172ae66a135bb51cc71590707b691a66b56af1ffe38772911d11685da355728eaddd83752d21c119d7b59f4c17c2403629fa55cd70cd331aed7b0de673c85f25c2e9e0267f53f0b7480c8ca":hex:"291bd5a00d71eb7d547b7c94e7030ba4a947418eaeb378a3bacd304b08c6f92f6958eaba968ac6aa23e0512a2a8ad7c1ca2f8fcf623bfc1281f5b7b598c08d2aebcd447668b23238c5e338b4c2ac7f8fd381714c596ea3e0c17aca4317a08563e58f0f52a8af08e078dc242ae54ee0fe3869f8c9687b004a4ded0aa27d8f4c5d":hex:"ca4bfeedcd19d301d3f08cb729":char*:"":hex:"bcef3f2fd101b828d36cb38530cf9a0a7a285ac1c55ee1069cc78466327e85887534c98a8891d579effd832c0f7d6e7e822fb1eea85a39317a547591def4aeed6660872859fc9d1df9725d3c40e9ccaa900e0f1426a55d20ac4f2e8e07bd3bbc687f8e059ab93e7604c97e75ac94be1c8c24f4c4da0080a4d77953fb090cbb62":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,96) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"ceaf204ff504ea8e7fade1a2097f2b527a44766860447322fa5ad346cd810217":hex:"cfdb8183251f4b61c64e73243594fdc6":hex:"a60f3969fd1b14793dd1425aa0b1f742a4861e0b50eaffd1525cd209ba6d1252176763bb5bee59aaa55f92341cdc0705899aba44cf0ec05cbf80274ebef65cd9507fd4224b25cac19610968d6a37e2daf9ddf046ef158ef512401f8fd0e4f95662eebdee09dd4a7894cc8c409be086d41280bd78d6bc04c35a4e8cd3a2e83be3":hex:"1c8e4cf6018211518494d46c2e0607fa42e236abc28d58f8175c530f84b1f030572f5f6a74cb5517e1fb999a637d352afcbeadea9121e695675859b66b499a3a351ecba5226e58ebbb59fe12e359e4c89cd51c8703d4643c49921ae495801c73627df404b91e828e1d0e03ae09a39defb5aa5f2c8106953772ba0713d3261329":hex:"9e45029f4f13a4767ee05cec":char*:"":hex:"5cdc66b587ed5eebb04f42b83a6ab7017093514881c598cce332d74fa3fab927493ac15bff26835296e080b5b45ef907c0529fc2f4ed2fc09db179ef598e5d193ea60c301d3f8d823404814e3e74de0e1d2417c963e9246c353201c7a42659d447376e7d05c579dd4c3ae51c2436407b8eff16ec31f592f04b8013efcfd0f367":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,96) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"15652abe38cd09777bba21d0db04637f5737d3cb3922181b9f2d07bfdafd327a":hex:"3a5e0d223ae981efb405566264e3e776":hex:"cd755437cb61b539908e0cfaaa36c0123f8f17d1e6539783cb61d4b56cac3bc1e971c1ea558b12669b025cb6b9ad55991c6e2f8ee8b0b7901790193e226a0fbbfff7ff0bee6a554660b9f32e061b6c04bf048484ff9ebd492f7e50e744edd72d02c8fd32f87f9421bf18a5a20ebb4d9dbe39a13c34b7296232470e8be587ba09":hex:"1d6c153dec3b4738a09c9fbdfe31a093eb7ea79b8fa49f83e5e1f46893590f074fb171fb66e30ef887767014e3a10a3aa05da2bd50dd7b7936e1d7f6f31af9030e31e76bdf147f4396464db0f6a72511c4885c6c2305d339906e3c761a3249d7ebea3bf463e8b79c3706e684575550e964b8047979f7aed6ea05056c4b5840b1":hex:"01a573d8e99c884563310954":char*:"":hex:"162430c23f7adcf98575a2d9249b4b5cec42efae33776360ebfa6a19c8eee4bd6b07cbd274deadc3292b7cdbb7803e99d9f67ccc5077f3ad5808f339a05b3213dbfd11377673d4f9b486a67a72a9ac8ea9ba699861dce0de7e2fd83d3ba2a2ec7fabf18b95a2bbe2184ff7bddd63111b560b3afe7f2c76807614ba36c1b011fb":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,96) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"a43f6d07042a15cd49f6f52a2a3a67c6c2ff420d95bb94b9fe03b287c3abcaf8":hex:"3b6fad21f0034bba8b1f7a344edf7a3c":hex:"2e01c0523c8293fc51388281dccdb8d0a2d215d729289deb327b8142d716c2bb849e9476545b82f3882ba7961b70c5da2a925ba18b6b121e9215d52ac479c9129c9cd28f81584ff84509d5f9dcb7eaae66911b303cc388efa5020ac26a9cd9ea953f61992a306eb4b35bcd8447eea63cef37bb0c95c1e37811115cf26c53e8c5":hex:"b67e58c8b608724fd20aa097ee483bc4c804490cc79de635170944af75c87ae0ad8261365c1dc80d852553bcba18da9fbc3fbe61d27550a03003ef0c60202054626655509a9e1ab54677e537a4e761df011d6c6dd041c795446b384161ae9eab441afd24d19b58eb4fe5116cd7b11b751ebbd0a2adba7afc380d9d775177099a":hex:"43470bc3d7c573cb3a5230f5":char*:"":hex:"e1720d451fa7ab9db4988567187244b15b6fe795dd4fef579fb72e41b21aaa436d2e5d8735a4abd232a3fb9188c75c247f6034cdebb07fd7f260f8e54efefa4f2981cafa510dd5c482a27753a7c015b3cae1c18c7c99a6d6daa4781b80f18bbe6620bfc1518a32531017a1a52aadb96a7794887c11ad6bdd68187ba14f72a4b5":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,64) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"1f0f0191e18db07c0501dbab4ed952c5603a4cd249d2d8d17e62e10b96ae713f":hex:"ab8be16b4db809c81be4684b726c05ab":hex:"a5a6e828352a44bd438ad58de80011be0408d410f6e762e3145f8b264a70c593476b41bb87875746c97de7d5fab120bd2f716b37c343608ee48d197a46c7546fafcdbe3e7688b7e9d2f5b6319c91d3881d804546b5f3dbe480996968dd046f406c11f0dc671be0421cbc8b4ea6811dd504281518bb96148dddf9f0dc4e2e2436":hex:"aad40e7866c26e486b6f6e8eb14a130d5f88891bf0d09aa8fe32f447ab8dea7bee5d3eda4499c0103a010483f2b64fdf1155499d31decf528c77dd7627884f9995c213cf7402143dbb7561d69c86886734260ac94ffac7eb33598d25714228ef43f744ec1af2a87e789f1e5d6fff0fbd5082dcc49328f194e8f8a14a5bfc962d":hex:"d8bd7d8773893519":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,64) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"a6cf7d83137f57f2310ee6bf31e8883952bb07ccdc12f516233ed533ea967e5d":hex:"f17e37e73a28c682366bfe619cc673bb":hex:"0f4dd201b18e20230b6233e0d7add6f96537dd4e82d3d0704c047fab41af5faf6bd52bd14fa9a072f81d92a2ce04352f0b66f088c67102d2d127a9850b09ff6087f194a6e8ccaba24091feb303eebb65f1203b2d22af44e7be4de71f03e6f6cbadf28e15af58f58eb62e5bddfae06df773cc3f0942520de20078dda752e3270f":hex:"83ab20698fd7573fd121976a72b45a7f03aad84702fc8ac73d6926eabd8a546895aeffe4ba81d117507e2cd37d58eeff71cc3afa8a4449be85f228ea52f6dc6395bb43c1c9f795343720841682d9b2f00602eafa4d4cbe297bfc62467e526b9d823cc8eeecd9e5f8dbc2f65610663c6f37b3d896651b254bd60215629ade3b2a":hex:"74110471ccd75912":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,64) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"b0c85ac6b3887639838ddca94c5c69f38115aa00122322c8114642d12ea1b8fe":hex:"14f68e533ecf02bceb9a504d452e78c7":hex:"796a46236fd0ff6572b1d6257c874038f870aa71cbb06b39046d0fb6489d6ae8622b5154292ae5c4e1d5ff706daedb2e812533ae3a635d339a7fbe53780e3e8204924a5deb4b6856618f4c7465d125a3edffe1ab8f88b31d49537791c0f3171f08dbb5ed1d9ed863dafbae4ecb46824a4922862fe0954ee2caa09ab0e77ed8fc":hex:"0210fce418e7e2199cb8f899c81b9be74a630d00269755f882fc4db27632e99685cc12c426a7503473646df1288d0ede28408be9add5713628700f8e2b2e27d7522520ed00ac47239084651eb99e7d03e1520aae137b768f3144232c16b72158fd5da4a26a2525b9b27791bf06d1eb2e671c54daf64fddc1420bc2a30a324ba5":hex:"6fb0b5c83b5212bf":char*:"":hex:"5e6c362f7587936bcb306673713a6f1fb080783a20e9bbb906456973e529cfa0298206184509c30e1d3793eaaa5d564edd4488f04311821eb652e0a1f4adaf6971505ca014788c8ce085ceb3523d70284ed2bb0aebeba7af83d484df69c87f55a93b3d87baa43bd301c4e55eb8c45dcf3e4612535ea1bd5fdb4c3b9056d0cae9":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,32) #0 [#1] +depends_on:4:2 +9:exp:6:hex:"e61b1a6b40e2ab1245ff65dcfb9948318ac4fe55e9ed600cec301dae32ae0e93":hex:"c356244b3034d288e4d4fe901b8e27c1":hex:"bdcfeb09d5b97bab05a7acd9849e7de2c5beb7a4dc573c7e1c1d0c0409245a6584023114fdcc6413c800ca16847bde750b27c4d590248e2ce457c19b0f614f6aff4d78d4a19b3251531e5e852fbb05d09412cc1ff8988d1955ca6f5fe2d820f20a7642e3ae69e8122b06ba0918e806400b9b615e1abe6fdd4f56a7d02d649083":hex:"8d67fa9fcf078e421cb63abeb25dba739ab0e09a091dd06b0c616e1e888f350edb2d73a42f57f115266ea20c7f8fc143ac746649612df06a5e29b4a15934dc049be1ab49d018ab86c4f37d8c3d9c714f038029e74d8ee3dbe61d81adc63712ea413b37f7604da12107aa1695d9b0981e5a92cdfaa5fbda0e31b22c6fd6f3b499":hex:"86acc02f":char*:"":hex:"7c73182eca97d9617abb478a6ce62e3491a7e9951981c89c3071b161a4c80440614c3f24d0155073e28dcccee96bc8303dab4901ef77318df522d16d9da47770ef022395d6104cd623d93d67090a27507fc8ca04157e7939e639c62cd0e7d8a472314833c0eaa9ba2fd54a25b02854e3bff25cccd638885c082374ae520ed392":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,32) #1 [#1] +depends_on:4:2 +9:exp:6:hex:"4f5a02e9843d28c8c226ed70d44b8fced8fb757ab6ece4d4f06e3c3cec79e44f":hex:"099e5d9aae89fb6391a18adf844a758e":hex:"ad93e8662c3196e48cfdb5aa3bc923cd204151aa980cbec78f0d592b701f779c1c49f9e8686d7e2385a4146b21a643a59c18c8b82214f42560bcd686fad7c7c8e8c1944ce6b20ec9537dd14b6cf2592740ca112f4cd582250d69f240d3e957040e1f7e19c60b3c8f2bd00cb666604c38946eb9b2f17336d281b4794f71e538a2":hex:"3ec13950d329f24074714c583bdc35686b811f775b76b0a8fcfa66fc56426c9d022f8ab0af38f8d2f71a068548330cdbe891670181ed7491bf40c739ef4dd93689fd35929b225089d2b151f83d9b3cd767300611144586767354c0491112c205409f3168092d27f9b9f433afb79820a2811984d48e70c1fb2a13bbb3ddbc53fb":hex:"30298885":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,32) #2 [#1] +depends_on:4:2 +9:exp:6:hex:"1cdb218e0bd0e02156e5b48182990f778889793ef6018a8928e61164ac047c8e":hex:"d2ffbb176f86bee958e08e5c7c6357c7":hex:"bc580c4223f34e4f867d97febf9b03629d1c00c73df94436852cafd1408c945c5474c554cb0faf2bae35d3160c823d339a64ebd607cf765fa91f416fc6db042bc2bd7445c129b4a0e04b6f92a7b7b669eb70be9f9b2569e774db7cb7ae83943e3a12d29221356e08e5bf1b09e65f193d00d9fe89f82b84b3b8b062e649163dc8":hex:"4d039618a0eb640329f90fe97de18bc928fc3fc7a0db42c97774bec2e882e872fc1097c8319f7837a16516bf387b1bae321c565e8fc1cb8480f051158e4685f0adba310d2c6253bc1300403cbd3f7ddcb2796a69f8bf9e73d47aada9a02673c1a3d5ecdac838abf22b385906236529a1b7dd5b8af2611a04cf4f83b15ba41cfc":hex:"1997daa9":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,128) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"dc1a145c18bdbca760f35eea0d4a5992de04a0615964ec8b419c8288ab1470f0":hex:"7f8368254955e1b6d55b5c64458f3e66":hex:"":hex:"":hex:"8ddaa2c3ed09d53731834fa932d9d3af":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,128) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"7b4766d3a6615ee58b390daa228ae7a541c46ce80a1efe227cc43cb777df3232":hex:"274367f31ec16601fe87a8e35b7a22dd":hex:"":hex:"":hex:"5f3a757b596e06e9b246ed9bac9397f9":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,128) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"d19b04055bf6e7ff82e89daef66c9d8319ab25f9197e559444c5729b92c4f338":hex:"796efaff4f172bef78453d36a237cd36":hex:"":hex:"":hex:"3b445f38bf4db94f1a9ec771173a29e8":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,120) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"7ca68e300534a90a7a87ca9906e4ac614a6aa51f769b6e6129753a4f83d10317":hex:"45e6b23f8b3feefd4b0ea06880b2c324":hex:"":hex:"":hex:"6c0a1c9c2cf5a40407bfa1d5958612":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,120) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"a2b7cd693239bbc93599d3d12c9876e7303b227b8ae718e2c62e689e1fd62903":hex:"548c9c8fcc16416a9d2b35c29f0dacb3":hex:"":hex:"":hex:"3aa21f221266e7773eeba4440d1d01":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,120) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"156b854beb0c276a5e724f5da72f0d1ca4ae7cbd5f93a2257d95c2e5bfd78ad4":hex:"a5129e2530f47bcad42fc5774ee09fe7":hex:"":hex:"":hex:"6bb09ed183527c5d5ed46f568af35f":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,112) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"d824330c60141264e1f709d63227a9a731bcc42b4adec1d8f0161b10b4fdb2ab":hex:"c5afaa45312c64ab3c3cf9d6c4e0cc47":hex:"":hex:"":hex:"55952a01eee29d8a1734bbdf3f8f":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,112) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"b5517589948d8aea778df6fd66c17a170d327f69e504f0a4bd504c4286a9f578":hex:"6404b111c6289eefa0d88ed6117bb730":hex:"":hex:"":hex:"637f82e592831531a8e877adfc2c":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,112) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"f6137b2bcbd327fbcc7f313efa10f6ffaed30e4782e222e1225c87103fcae905":hex:"3b87b08337a82272b192bd067e3245ec":hex:"":hex:"":hex:"1f2dda372f20ffddd9dd4810e05f":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,104) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"b5e70d1b78e931abf44bba3f937dbc344858516a8a8afe605818dc67d0c3e4c4":hex:"58e70095c6f3a0cda2cdc7775e2f383d":hex:"":hex:"":hex:"1763573f7dab8b46bc177e6147":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,104) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"90de0c047d1dd01d521f2dedec7eb81bc0ace7a5a693a7869eaafbb6e725ad7b":hex:"d565c9cdfb5d0a25c4083b51729626bd":hex:"":hex:"":hex:"78738d3e9f5e00b49635ac9a2d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,104) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"c43e8dbeafb079692483a9fcbab964b76fccca6ca99e1388a1aa9bf78dfd2f02":hex:"f2bd4fe0d30c0e8d429cac90c8a7b1c8":hex:"":hex:"":hex:"ea7b52490943380ccc902ca5ae":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,96) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"13540919fdb95559e37b535a427efeee334309e34c4608459e204d931b8087e7":hex:"c993c1802df0f075ce92963eb9bff9bd":hex:"":hex:"":hex:"edfab013213591beb53e6419":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,96) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"2a7b2e07c148ff0f627ae28c241a395876bbed0c20f3fd637330e986db025714":hex:"8f7e1621c2227839da4ea60548290ffa":hex:"":hex:"":hex:"f9da62f59c080160ec30b43d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,96) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"b3e7837a75b38ae6d4299a1ae4af3c2460dfca558708de0874d6b1a5689b8360":hex:"05d363b2452beff4b47afb052ac3c973":hex:"":hex:"":hex:"6b4a16d1ea1c21b22bdcb235":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,64) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"9df3ccd95f7570f6ecf5e5329dcb79bcd46cbcf083fe03aa8f5bd0f645c6a607":hex:"774f4e70a7577b5101c0c3d019655d3e":hex:"":hex:"":hex:"98ff89a8e28c03fd":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,64) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"1c7123e2e8d3774c8f1bdbb2272f19129e04f29b4351ae19c3b9d24e6ea1fe87":hex:"99f25cebd6cfa7f41390b42df6a65f48":hex:"":hex:"":hex:"8e14a0a4853a156a":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,64) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"490090323e9257517e2453469caa3414045cacb4d05d5cebc6b9c06fa6d19291":hex:"c1beff1ff6cdd62339aa21149c4da1e6":hex:"":hex:"":hex:"f998d7c08d609b3a":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,32) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"360e48dd38d9e7f5bf29a2994ab5b3c9c70247102d94049ae791850807a4c845":hex:"88126c350dfc079c569210ee44a0e31a":hex:"":hex:"":hex:"f2ebe5e4":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,32) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"1562b32e4dd843edaf4474b62cadd8f46d50461f5b22c9f1a8eae7367d35d71b":hex:"af29fdb96f726c76f76c473c873b9e08":hex:"":hex:"":hex:"13fd6dfd":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,0,32) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"d5160d0c98ffcb1c26aad755f67589000e2bb25fa940e6b1d81d780f421353d9":hex:"1552604763453b48a57cea1aed8113f4":hex:"":hex:"":hex:"660c5175":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,128) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"c3a3ea3a097c0c2b3a4cb78462d87fd5a8f348687c4150e9d3354b388ab13d17":hex:"f77945979241fb3a454d8e3da193e169":hex:"a69bac31241a2c07d3f7e331b77f662b1e67ccb81c07f52578b01f5785de9437f02eb7627ca7b9af09c1cb428fe93d6deb31f4d6dd2f0729f87480bdeb92d985de1aaad4bcebc6fbad83bede9a5dd1ca6a15bf5d8a96d4edb5bee1f7d195e9b2e5fb2221a596d69f257c18a143eda870e22d3f2ed20c9b3b0d8c8a229c462fff":hex:"":hex:"6b4b1a84f49befe3897d59ce85598a9f":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,128) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"e1626327d987342cba5c8c63b75b4ed65463a2b9c831f4f9f80325fa867d1d73":hex:"4e25800deab7ecec2a2311f8fb44eb7d":hex:"ebaffd558f24dae03117c69ac4b2b4aaeaffe7e0e7599eaba678bfce23a9914dc9f80b69f4a1c837a5544cba08064a8f924064cba4d783623600d8b61837a08b4e0d4eb9218c29bc3edb8dd0e78c1534ab52331f949b09b25fbf73bece7054179817bc15b4e869c5df1af569c2b19cb6d060855be9a15f2cf497c168c4e683f2":hex:"":hex:"8faa0ffb91311a1a2827b86fec01788d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,128) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"938da64b837275b0c80c442bdf2301aa75e387fe65a775d10a8ec840f62ff429":hex:"dec6adeb60216cbb8a6c3afba49fa201":hex:"4ac144bd95f405649444f01ab67ef3e4c0a54fdbd933b6ba00518c79db45c22c90030c45aadcfdb53ec8199be0cbb22dbb9ab938a871f4b3b0c98ed32590a051abb946c42726b3e9701f183b2092985e3457943a6350fbcaece2e6b111b179ea3fd10ac080a577a1481785111d5f294bc28519c470ff94392a51a2c40a42d8b5":hex:"":hex:"2211ca91a809adb8cf55f001745c0563":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,120) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"e2436484ea1f454d6451ad8dbd1574b208d7a3ab4fa34869299b85c24348b43d":hex:"97040d2ec094fe1c64fa35b35b7451a7":hex:"bc198677513ce0e66697dfe52b22315fa5d8f92042f34cc9f373a01f94607df1a599132f60af010ed9b5e52162dd7b162912b68b11700e08f5fdafd84d10f760fc05ec97c05b83e55155194f399594015b90a19c04fb992e228940fe1b54ba59c4bb8318b33cc0df1cb1d71c389473dfb3eefabfe269ca95db59a7bc0201c253":hex:"":hex:"2e080ba16011e22a779da1922345c2":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,120) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"7fb3fc72eb8a3aa5b102f90039f852cc3fd64f46915f5e49f1d9e02fe9cc13b1":hex:"f6120fea313362524917c53d90bafb4f":hex:"60c2be7fbd15faf895fd19a9ce775fe2b183b45cffafe4fcbf50d421bea97347e41a9418cfa129b2dda63b889a70063010215dbe38c37feae18bc31b34f31b726f22177f2b4b9d648dd4aa80edfd12dafaee10baa83224354432d1cb62ccabe38bb8448d162cd0d30e988d2e1a2458ffdafaacbdff928756390f66dc60d7ea45":hex:"":hex:"83de3f521fcfdaff902386f359e683":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,120) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"697c96d80d0a3fa9af35b86f31fb71a17aed30ce841c79896bbc8863b3b3ee04":hex:"3a5163ec7e007061838d755ac219855e":hex:"de50c12da63232768d5eb9920d49683b5b7114cb77448fa10b9d63552ec5d9c2eac94b375d11f944959f903bb20c696639b6e7f108ec1e873870098c631ddacb2c25268cfc26d2a4cacfb7dda7383374c5456bcf4daa887a887f4293f8caa14419472a8bf7ffd214dfb2743091238b6d1142b116c2b9f4360c6fe0015cd7de81":hex:"":hex:"cd4542b26094a1c8e058648874f06f":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,112) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"66c1d9ce3feb0e966c33e3fd542ec11cc32f18c2514b953103d32abcdc72633a":hex:"46fdb88fdde9b7d74e893802a0303256":hex:"55d2f263d2e3cf0b390fce1dd1ebd5f666086f26e1ce2f08002bedbb810ada3922c6bfcf6a6adaa556e9e326c9766f02b3eb6e278da2fa3baa7dbdb6373be3c6ecfbe646b1a39e27c5a449db9b559e7ea3496366b8cdbca00ee7a3dea7fdfbea1665bbf58bd69bb961c33a0fd7d37b580b6a82804f394f9d5d4366772cee3115":hex:"":hex:"96ca402b16b0f2cd0cdff77935d3":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,112) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"d7c949420dc9497232cd5810f316d11f9e85d36c430b5943ba79836d88c1eb92":hex:"7ef9788ff09cbeedd9569d49083a4097":hex:"ca1de5cc3fcde2638eb72210e551e9c0e0a3f5570d5be83a9a4406b545d854bf17e75b9cd0f4c45722fbd71319a317b72a8798485e9316a1c8102432b83bc95af42f6d50700ba68f6f2e19b6af609b73ad643dfa43da94be32cc09b024e087c120e4d2c20f96f8e9ddfe7eae186a540a22131cedfe556d1ebd9306684e345fd1":hex:"":hex:"8233588fca3ad1698d07b25fa3c4":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,112) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"6fe7c70815aa12326cdcbb2d2d3e088bbaaef98b730f87fe8510b33d30e12afe":hex:"e0253bd1f19e99a7f8848206fb8ac4a4":hex:"397897eca4856f90d14c3cdfe1ad3cba47e23174ae2dab7d2a6320898584e03bffa3ffd526f416d7b3c579b0f3628744e36eebb5df519240c81d8bbbf5c5966519c5da083ab30a7aa42deae6180e517cdd764b7f77d19cc1a84141817758887a8d7265e7e62279b9d33cd2f1ba10fd54c6c96d4b8a5dbe2318fef629c8e2af0f":hex:"":hex:"477b0a884d788d1905646bd66084":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,104) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"cbeefb3817cb02d617f385cf2371d52c8bcbc29e5e7a55cd2da131ca184c6e89":hex:"f74156d6400ae46b612531848bffe18f":hex:"1abe2ab05ceccf2391273126fe4a4426b94d2c3b97a7f1cd2ee6bb952bf4a546e972b5a1701d5ddb0e5bb7a248fcb47107a9fc77e4b9806b68a11850119aa239fa8be1370e3a2e1a8b168f7323afdfc4b8917d92570167848a56132d68876abc386c258a9233dc8a9eb73443b052e842c3d63e8b5369acdd038404e4e9a4b038":hex:"":hex:"0cb67cec1820339fa0552702dd":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,104) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"e6f5f65ce2fc8ec3f602f5df90eb7d506dd771337913680ac16bdcd15c56583d":hex:"9212a548c597677d1747e98ce6fb18a4":hex:"55ca486c0183d0134925880d2e21dde0af51c4c77c6038a5a9c0497884e0aa4715bdb5b4bb864acc708ac00b511a24fa08496df6a0ca83259110e97a011b876e748a1d0eae2951ce7c22661a3e2ecf50633c50e3d26fa33c2319c139b288825b7aa5efbd133a5ce7483feecb11167099565e3131d5f0cb360f2174f46cb6b37c":hex:"":hex:"08d7cc52d1637db2a43c399310":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,104) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"0e9a0391435acb57eae2e6217e0941c79a3ff938ec6a19b8a7db2ea972e49f54":hex:"27cd1d7af7e491e30c8110cc01392529":hex:"79140d32bb32dace0779e2d37a0f744d6d973e99a279962b43a6c0af63772e8a0a21d5d9dd3c33d4b218cb2f6f24dd8d93bb4e1e6a788cb93135321ecfed455e747fa919b85b63b9e98b4980a8ccb3b19d50d735742cb5853720c2ad37fa5b0e655149583585830f8d799c0d2e67c0dc24fc9273d9730f3bb367c487a5f89a25":hex:"":hex:"fbb477dd4b9898a9abc5a45c63":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,96) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"55a12eeca637654252e3e40b371667e3f308b00f2fd2af696223e4cd89e3fd4e":hex:"8a3793b6441258360f7f4801b03d0b26":hex:"f5810dc5f25e49bd6d94bc63c2494aa7a579a4056a25f1dd9b2734d0b8731ee52523edd54ff475651d45c213e1bf254327fb0e2c41a7d85345b02bcc9d27b08915d332e1659671991a4bb74055967bebbba6ecceb182f57977130623d5a7b2175fa5a84b334868661c1f450b95562928b4791759796a177d59ed18bbf141e2ad":hex:"":hex:"99230019630647aedebbb24b":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,96) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"3d353f870a9c088de5674efd97646b9c5420b2bcdfcffefcadd81682847e5331":hex:"f267fa982af5c85359b6447f9b7715ea":hex:"7cf55630867af5dff747c8dd25bcc531d94a7730a20b6c03d46059ea93fcaa00d07ee17dad0e0dff814b02dfef0cbe00b37fd2f5f95ead7c72be60016f2934d7683fc1e47185c7211c49cb03e209b088edb14e533dbcb792ab7033728904f7ff12381a236dba97894ec1fafcf853ab15fff343f9265d0283acef10168ffd1271":hex:"":hex:"9553b583d4f9a1a8946fe053":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,96) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"d227c9ff5d17a984983056fb96f3991932ae8132377529c29238cf7db94a359d":hex:"b8f6536f376a7efe0e684acf350bae70":hex:"1cc25da31f90de7fa47ebce92754d3faa99f88d4e25ccab45645c1acdf850d55d7f02f61a0bfdc3125f29259d7da8abef532fe0966c63d3486753c8a2cb63a39349a0641b2f2b9526a03b97d58ca60fbb054c6c164ff2836688b0cad54df2b165bc082eeae660e768dde5130e30f8edc863446661c74da69b9e56de8ae388da0":hex:"":hex:"44b95a37fab232c2efb11231":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,64) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"b2a57ef85ffcf0548c3d087012b336c46f6574cf1d97ca087bfad042ee83eec2":hex:"3d580402d2a8dc4d7466e5dcb456be7a":hex:"c2b9e95c16e55028794a63ef82d11fb83a2a75dc34a81f238e472c33264534bdd54cd07d02a0ecf9019ad1a6d6c779f339dd479e37940486950f183bade24fca2f24f06d4037b3555b09fc80279ea311769473eb0630b694a29823324cdf780d7d1a50d89f7a23b05f7a8c3ad04b7949aa9e6a55978ba48d8078b5a2fd3c1bbb":hex:"":hex:"072d4118e70cd5ab":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,64) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"63889ed5bf2c27d518a696b71c0f85592e3337aae95b5bf07289e4c5dfdc088d":hex:"1ad534280a0fac7dce31f2ae4fb73f5a":hex:"be1b9dabea33bb9443e27f674b27931c0fba699a33dc86fab29e50b76a9441030444b465317bbf2949faf908bc1b501d11a5ea2042e4b460a85f3be5836729e523d99b56ef39231d5c6d8ae2c2ab36ef44e2aa02a1f2c559c6e333216c7f9ed5f9b880a88e920219204c99a3ae8f90afd1396563bc59a691a93e0070b0b5fd90":hex:"":hex:"1bcea0ac2c1a0c73":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,64) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"94e3e2c17cfb6f52d4fdba3ba6d18bba891b6662e85df14d7e61f04adb69e0e5":hex:"8a80efb3bfe220526997543409fddb4d":hex:"05da1b0f7ac6eef488d3f087ecae7f35abe3ef36d339709dc3fcb5b471979268ee894c3b6c7f984300d70bc5ea5fba923bfb41d88652bdaecc710964c51f3e2ae2c280b7d6c8e3b9a8a8991d19d92d46c8a158123187f19397ad1ad9080b4ffd04b82b5d68d89dacd3e76439013728c1395263e722b28e45dabf1ef46b8e70b5":hex:"":hex:"faa5c13d899f17ea":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,32) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"fe5e479ad0d79dbf717a1f51f5250d467819e444b79cb3def1e0033c80ddadd8":hex:"47ce838083fd070d8544c0ad5337cdc6":hex:"98476bf05a18c4ff1b6024dd779c1ac06d838705a0a83fe42bee5fc6ebf3b2a1a5049b67f4aabc8239cd6ff56504bcbad1e2498c159bbec2a6635933945f6ea49e5bc763dcf94f4b3643d3888f16105abb0965e24f51cb4949406124145e9ae31cc76535b4178492f38b311099df2751f674363ae7a58f6f93019653b7e6a6f0":hex:"":hex:"a3958500":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,32) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"27d4dedb71a8f68ca5ce2b9e56da772bf5a09b7981d41cd29f485bd2d1adb8d4":hex:"7e6f0343c54539717a97b6c8b9f7dec4":hex:"d386db78043f719b7e137cbf79a7f53dda2fe3baccbebb57d499f6eb168e5151f10081d76b72ae0f30165efbdda469e826f9246e59dbcad5c0b27691c00d6c192c24073e99c19cf8c142087c0b83c4ce2fc7ba1e696394e5620ab2d117d5dcd2ac2298997407fd5de07d008de8f9941a4a5f8074736a59404118afac0700be6c":hex:"":hex:"50fd1798":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,0,1024,32) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"5a7aa836a469d28542d0d24d3232fad266da8fc889c6b6038b726d3da25f7b20":hex:"9faf7cd805803e143ec8f3f13475efd2":hex:"1006c707f608728b2bf64734062b12a5625062bcdcb80a3ce2058352a2922d5e6fbe19681b4f0d79ad3c837f81e72f2fbf8df669894e802a39072b26c286f4b05188c708f7c6edd5f5bb90b87ffa95b86d84d6c1c4591b11d22c772a8ad7f2fe6bd8b46be0e93672df2e8bff8ba80629e1846cfd4603e75f2d98874665c1a089":hex:"":hex:"07764143":char*:"":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,128) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"a9444fd176acbe061d0221fde3ddfcc4ff74e995d981a831297c4cbda51c22a1":hex:"5714732145470da1c42452e10cd274b5":hex:"":hex:"c146ff5a988496cad7eced7a2ea471e0117d5d6bd2562c23ce9db4bf36d83ba3fc22e90486ec288a627d208e0b2fd3b65f8301cf7fc41d97959981a95cd1cf37effc46db99b94b21c941c3613c26a10b1a6b7793f467d58ff5134612230f1c49d7e1fcf664fe52fc6eca46273982f6fe729b009d90eb8d8e4a0b0dbe907b76da":hex:"db85b830a03357f408587410ebafd10d":char*:"":hex:"a3cad9a57fa28e6f6aaa37150a803bf8b77e765f0702e492c4e5ebb31ae6b12d791149153e469a92bb625784a699fd7ca517500ee3f2851840ba67063b28b481e24ba441314e8b7128f5aaccaf4c4e2c92258eb27310bf031422b7fc2f220f621d4c64837c9377222aced2411628018a409a744902c9e95c14b77d5bb7f5846b":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,128) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"686d3bd071e3f46f180611bc4ec8d7726fe72b6c617e7d42b3339f53918c9e36":hex:"a714e51e43aecfe2fda8f824ea1dc4b7":hex:"":hex:"21983ad66449c557263aef299da6eef8f31d576fc17ed2dac3e836f7c2ceaff3094b2695452680e188df10c174810efd1fbaa6c832baedce0b92e4c7121447f6461ac909b4302cdf658095b1de532b536faa4fb38cfdf4192eb5c3fe090d979a343492f841b1edc6eb24b24bdcb90bbbe36d5f8409ce7d27194a7bb995ecc387":hex:"cd30c3618c10d57e9a4477b4a44c5c36":char*:"":hex:"9610908a0eb2ee885981c9e512e1a55075a212d311073bbb2fb9248cce07af16ee4c58bdc8dbe806d28480f9065838146f3e1eb3ae97012cfe53863a13d487f061a49a6c78ca22a321fa25157dbe68c47d78f2359540cc9031ee42d78855ed90e6b8ea3d67725bfffcb6db3d438c982b5f88d9b660f7d82cb300c1fa1edebb6b":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,128) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"6fe81f15a02e2ecf46e61199c057102d160e6b5d447d4a275972323fff908c3e":hex:"91d55cfdcdcd7d735d48100ff82227c3":hex:"":hex:"0b4ee0385e6665da8fd2ae47f2d0cf1c5bd395a3bb447047ab5a3ae0b95355bf83d0381119a8d4c01acbe60cd7885da650502f73498a682fdc94f7b14f4c753226064fa15e3a90a6083e053f52f404b0d22394e243b187f913ee2c6bb16c3033f79d794852071970523a67467ce63c35390c163775de2be68b505a63f60245e8":hex:"cd7da82e890b6d7480c7186b2ea7e6f1":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,120) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"4c2095e1379389dc3810e8819314f5a2f87d1494213c5b1de1a402f7f4f746c4":hex:"19788b2e0bd757947596676436e22df1":hex:"":hex:"26ec8ebac0560538a948afbc18fb730e9a91f21392bde24b88b200f96114b229a5b57fa9d02cf10e6592d4dfb28bf0f00740c61157ce28784e9066ea3afd44ecf3a494723610cb593c0feffc6897e3435c6f448697ad3e241685c4e133eff53bdd0fe44dd8a033cfb1e1ea37a493934eb5303ae6ef47ce6478f767ef9e3301ab":hex:"f26a20bea561004267a0bfbf01674e":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,120) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"be5351efc0277afc9759ec2464a22cb4401f7a17efd1a205e7af023c7ed30ee1":hex:"c6b26117d9dbd80c1c242ad41abe2acc":hex:"":hex:"1eca91406f338fc09c2988b1d7dc8c409d719300c03840a497d7b680cdd5e09b144903477f7116a934e1d931cf368af1fc2a0a0e7caa95475a3cd7bf585a16fda31eb3f8201db0216b37a1635c1c030836b3dd05ca5b0194388fa198e717822131d5d4318690ef82d35ac80b27fff19aec8f020dc6c6ce28f0813bbbf8230ad9":hex:"61051d6c0801b4a6b6ca0124c019f3":char*:"":hex:"95447aded336d6c20d483a6f062d533efed0261ad321d37bf8b7321b98f55c0f0082ce7f3d341b18fea29a72fc909d30cd8c84a1640227227287674a9b2f16a81b191ecf3b6232d656c32d7b38bea82a1b27d5897694a2be56d7e39aa1e725f326b91bad20455f58a94a545170cb43d13d4b91e1cee82abb6a6e0d95d4de0567":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,120) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"814c2cdfdeecf39d43bb141fbfc62dac44f7552c5e5dac2d4913303fc860119b":hex:"0db3ade15cb0dea98a47d1377e034d63":hex:"":hex:"0d3013a1d7132f685d001420daa6c7b643bc36b887511acc4588237d3b412c79e4ebba29c08248ad46c7239e8daa232b7483c9c4e3d1c0bbebc696401efe21f7fd6fc0525a4ab81bd9a893d5f7ab23b70ed07c00f33649b8a996a006de6c94f7793f72848793f4d5b31311c68aae1e715b37409fbe506dac038a0950f05fe82b":hex:"e62f910b6046ba4e934d3cfc6e024c":char*:"":hex:"374d03cfe4dacf668df5e703902cc784f011f418b43887702972dcc3f021bcb9bdd61ed5425f2975b6da7052c4859501eb2f295eb95d10ba6b2d74e7decc1acacebf8568e93a70a7f40be41ac38db6f751518c2f44a69c01c44745c51ad9a333eda9c89d001aa644f1e4063a8eb2a3592e21c6abc515b5aacaec8c32bcf1d3c4":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,112) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"1ae4541110f2bc4f83cd720b5c40c8315413d896e034b75007f172baa13d29ec":hex:"83f98eec51ee4cae4cb7fe28b64d1355":hex:"":hex:"5ea811e7fbfc0e00bf2a6abfac50cad9efd90041c5f7fb8f046a0fecbd193b70a2de8a774d01dd3cd54f848cb3e9f5152ee1b052ba698bebfba1fbbdae44a260447d6e6482640ae4d01c9cac3d37d4ffe9a0de0b6001de504a33ef7620efe3ce48ecd6f5b1b3a89185c86d4d662a843ff730e040e3668d6170be4cced8a18a1c":hex:"df47eef69ba2faab887aa8f48e4b":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,112) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"20c9b662ec4bd13bf58d64cb0a7159b0e7fee4703af66292bf75c8bd6e42e8dc":hex:"2bc0847d46f3d1064bbf8fe8567f54a2":hex:"":hex:"45b64f2ed5ac707890c0c1726adf338770ce6a728fe86bb372c4c49409a32705f881bc4d31a27c455c7c7df9dd2c541743523e7d32f88930d988857847f011be5f5f31a31e8812745147cbff5c1294d0fd4a7285db4833f22bf1975250da99c4d0dd2c9688d7f8001bb6ef2bc898ce4d42c5b78e74645b56ce992338f49d4183":hex:"5a1bf25aa8d5c3fe5cf1be8e54a1":char*:"":hex:"9079d6275db076625e8474c2914fe483d413d5339202f98f06c3b0ef063d8f3d31029deaf7f9349bfec57e5cf11f46f02d5a6520c7992efc951adbbea6d08e53faeb10dfe8b67ee4685da9ea4fe932551a65821147d06d4c462338e6ddda52017c2bc187fd6d02b7d5193f77da809d4e59a9061efad2f9cadbc4cd9b29728d32":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,112) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"0a1554db37f2e275732a77e521cbd8170729d8677a85db73feacf3c66a89d689":hex:"b9194a4d42b139f04c29178467955f1d":hex:"":hex:"5421d93b7e6e0091978c673df4f3a406aef5f13eb5e6f95da19b0783308cbe26d4fd6c669cc4a9f069d7e62e4c6fad14b80e918fe91556a9a941a28b3dbf776a68ac7c42df7059b5ed713e78120aec84e7b68e96226c2b5e11a994864ed61b122e7e42ef6cfdae278fadbae1b3ea3362f4e6dc68eef6a70477b8a3ffcfba0df9":hex:"05949d591793ca52e679bfdf64f3":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,104) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"3ab1d9bb571c4bdc9f3ef340914bddcfe0c8e7718d4a2530334372cec86e5fcb":hex:"6a5335901284dd3b64dc4a7f810bab96":hex:"":hex:"80bcea307e009745724d5f15d21f3b61a5d5a8401530346b34a2adfa13e3e8c9c9327d6fad914b081e554fbe6c1c6fe070b566620e559555c702c0ab5becf61ea1d9de64351ce43b2276ef4e20b5af7ce43db6d21286af4e740ef00c6d790705afcf0ee4850fffc12c662f2bd8212feb21db31065ab8f717a7509c213352b869":hex:"04b8e5423aee8c06539f435edd":char*:"":hex:"36b9602eee20b8f18dce0783cd1e01a799f81ae0a1ce6d293a26c62f47e7dad85c8446697cc09c81d3d9ead6f9e55c4147211660c8aea9536cc5516e9883c7d6854be580af8cd47ba38fa8451f0dad9c904e0e7f9997eff7e29bf880cd7cedd79493a0e299efe644046e4a46bf6645dfb2397b3a482a346b215deb778c9b7636":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,104) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"7dddbd5657e22750bfe6baa70a1f4ac46c1ef8bee573a57cfcef50b66f85e593":hex:"fcb962c39e4850efc8ffd43d9cd960a6":hex:"":hex:"2bf5aba83a8161b9d21ff29251fb0efa697b1ea9c1b3de8481d5fd4d6b57afda0b098decdc8278cc855f25da4116ed558fc4e665a49a8fff3aef11115757a99c10b5a73b1f794f9502186c13dc79442f9226bbf4df19a6440281f76184933aeae438a25f85dbd0781e020a9f7e29fb8e517f597719e639cbd6061ea3b4b67fb0":hex:"1d8cdadcf1872fb2b697e82ef6":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,104) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"6916b93b2712421f1f4582de7ec4237c4e42e2b32c7dced2f8bb5bd2e0598312":hex:"b4d9248bb500e40de99ca2a13e743f1c":hex:"":hex:"3739cca20279a36ddb857ac22beae901a49529b3182463ab81a7c46e437eb0b0571e8c16f7b626ecd9f2ca0cd83debe3f83e5d58ed3738899f4b616755eb57fb965208f261736bdf7648b1f8595c6b6a779768115e3077dfee7a42d44b555a51675fb1ce9961d0e21b2b9b477c0541184350e70decf7c14a4c24b8a6cd5fed8e":hex:"090d03446d65adcc0a42387e8e":char*:"":hex:"0255be7ac7ac6feb3a21f572f6a593cc8a97f17af7064c80e478f4a6c469cf94d604bc014b003bf284d216161a9c8a493af43c6a0d8caf813a9e6f83c7ed56dd57543876b11f76aa2be80dcd79d19ac61f00fa423ac2f52fae7a8327cd91494ca4116feb735980ad0a4b1445cb7f38cc712b8aee72179e65b97fca38694e3670":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,96) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"b751c8b724165009a8bd97a9d2a0e22cae5a95c4743c55eeeef0a6fe7d946bec":hex:"160c50c0621c03fd1572df6ba49f0d1e":hex:"":hex:"e8546a5af1e38114822e60e75563a9399c88796f303c99c69d1f3c50379da81e1cd5b5a4a721e23c59da58ea4361b7ff58408e506a27fea24f9a235c6af7f7a5bd93fa31e90edfc322821c08d6324134830b7fe160b4a3e6d27866a10e6e60762a31618ef92f5c67ccb1deb1f1b188f0e687165e7c366c7418920df4f4fcdcae":hex:"9fef9becf21901496772996f":char*:"":hex:"175fa6b7cd781ec057ff78ba410f2897a920739b5fc4f04bc9b998fbc7cc18e327ad44d59b167e4627256aaecd97dc3e4a7c9baaf51d177787a7f4a0a2d207a855753c4754d41348982d9418b6b24b590632d5115dc186b0ba3bec16b41fa47c0077c5d091ec705e554475024814c5167121dd224c544686398df3f33c210e82":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,96) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"0faf32c22c2a4ee38fe4b5ce08f98fdf6f83b5038dcba5ec8332b3eeb5c710c7":hex:"04885a5846f5f75a760193de7f07853c":hex:"":hex:"8a556cc30075753c6e94c2f669bca2058ff6abcbffffc82da7cfca0a45af82dfb4cf487ceb4ede72be87ee4c8b72db1e96459de1dc96721464c544c001d785f2188b9fccaec4b1a37970d38b326f30163d2fdfdf8a2ce74aec55abcd823772b54f8081d086a2e7b17b4086d6c4a5ea67828ef0b593ea1387b2c61f5dfe8f2bb0":hex:"0c13506ed9f082dd08434342":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,96) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"0dddc3d2f82bdcdbc37648a6b9b416af28753740f8e998cd1a52a0b665369f1c":hex:"0a93b883cbd42998ae2e39aab342cb28":hex:"":hex:"07bf84b15b21951fd22049be6991a672503ae243b8d285fb1e515e1d2c36bfd5b0d0bcce85791f2cea8f616aed68a7d9cf4eaf76418e8b1ec27751de67cbfd9d9f7905b2667904f10d598503f04c04ea00a681ff89a9c446d5763898430bd7a9dfebfe544e3ed3e639b362683a651e087626ffa63c0c2b3e0dd088b81b07f75e":hex:"5c37918edb7aa65b246fd5a6":char*:"":hex:"ff7b7b2f88b8c6f9f9bad7152874e995eea0ff1ce1ecd9b8d563642a37a31499f14d70f0dd835b7adf80928497f845fd8c2786cd53af25f8c9fe1bba24e3c3860162635bbed58f06cf6c9966bb9b570987a48329279bb84afb9e464bb4ad19ae6600175086e28929569027c5285d2ed97615e5a7dada40ba03c440861f524475":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,64) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"a0b1a62e46e7712277fc711e19d0c0c865ee77b42ac964b7202dbcaf428086c2":hex:"e20957a49a27e247d00379850f934d6c":hex:"":hex:"7dd7c0787fdbea4aacf929341659dcf4b75cbca8f92001e8b62a4d7b40272c5755fa9c445857db05328dc11ce5221f044f4b3dafbf0e2d72a1ad0d3e4c804148db578218690ccc620d8b97b4450ff83400a6caaa959617611446a6627138a4067be9ea410d4b0581022ab621928205b4a4480560fc4c2c3b39a2805684006f35":hex:"c99751516620bf89":char*:"":hex:"9307620479f076c39f53965c87d20c2aff11c736c040dba74cd690d275591a5defc57a02f6806de82eb7051548589484364f6c9b91f233a87258ede1ee276cb2c93b4fc76f4d7e60cbd29ba2c54cb479c178fa462c1c2fb6eeb3f1df0edfb894c9222b994c4931dedf7c6e8ddecbde385ddf4481807f52322a47bf5ff7272991":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,64) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"ffcc1c88fba1723b3ab57b458d9bffb98b878c967fb43b9db2ae0753d32a3bb1":hex:"d533c2170c5dc203512c81c34eff4077":hex:"":hex:"19b6dec86d93c466307de3a36c0791ed1010b1b9cf8d30347ae46e0f9283c9fda43da8cb491dd17cc4298b1f0b876d6a0f4bcbc9667fe34564bc08f8f7b67045057d19f4bf027bc839e590822fa09a5cef1af18e64a0116aa2a01a3f246c2b5272c18c9aa23efe674ba53d533ae8f0695cb78c1155cdc7a9d7fae2c4567dc07c":hex:"167ec8675e7f9e12":char*:"":hex:"0539287ac546fe5342e4c3c0ec07127dcd22899abfe8cdd6e89d08f1374d76e877bec4844d06e0a9f32d181c8d945ba16a54ce3725fae21d8245c070a4da0c646203d6b91325b665ab98c30295851c59265b4ab567b968b6e98536b7850738d92e9627b4c9c6f5d9ae2520944783d8f788a1aa11f3f5245660d41f388e26e0a1":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,64) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"55e94b339c3bafe068ef9cc30787cc6705850114976843777c92b4b331801650":hex:"2e2b31214d61276a54daf2ccb98baa36":hex:"":hex:"147cc7bc4008dadf1956520b5998d961499bdf3d8b168591adbfd99411ad7b34eb4b2a5c1bb0522b810fec12dd7c775784d7ecdc741e6dec8191361e6abf473b219221801951b4d5ffe955ab50eef9cffdfee65ba29ddfa943fb52d722825338c307870a48a35f51db340aa946c71904d03174b1e4a498238b9d631a6982c68d":hex:"5266e9c67c252164":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,32) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"13c9572bdef62510d84f2d415cc481cd1e71b9c1132b43e63b21ba4e16de9b39":hex:"a8339ba505a14786ad05edfe8cebb8d0":hex:"":hex:"7c78e634dec811173ff3c4a9a48ae3ae794fbd2aefd4b31701777ff6fcb670744c592a1d298d319717870dca364b2a3562a4ffa422bf7173c4f7ea9b0edf675e948f8370ffd0fd0d5703a9d33e8f9f375b8b641a1b1eecd1692ad1d461a68d97f91f9087f213aff23db1246ee16f403969c238f99eed894658277da23ced11ee":hex:"df3cab08":char*:"":hex:"91f9780daefd2c1010c458054ac6e35baa885cdd2c95e28e13f84451064e31e0739f27bf259cb376ab951e1c7048e1252f0849ccb5453fc97b319666ebbfbc7ef3055212a61582d1b69158f3b1629950a41bc756bded20498492ebc49a1535d1bd915e59c49b87ffebea2f4ad4516ecdd63fa5afda9cce9dc730d6ab2757384a":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,32) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"30a14ca53913acbb215b4e4159083106db3fff83cbedd1e5425f65af1e94f5dd":hex:"4f23f04904de76d6decd4bd380ff56b1":hex:"":hex:"8c5f73ee1544553b712ad7a14f31379c8d54a4e432fb6c5112436988d83c4e94954b0249b470538fb977b756fbee70b811d4dc047a869e207bb0b495f1e271d0034e912000e97594033e0dedde0591b297f8a84bafcc93a46268a5bba117b558f1c73513e971c80a7083e1718fc12d0cc0d996a8e09603d564f0b8e81eea28bc":hex:"18e92b96":char*:"":hex:"bb4b3f8061edd6fa418dd71fe22eb0528547050b3bfbaa1c74e82148470d557499ce856de3e988384c0a73671bf370e560d8fda96dabe4728b5f72a6f9efd5023b07a96a631cafdf2c878b2567104c466f82b89f429915cf3331845febcff008558f836b4c12d53e94d363eae43a50fc6cb36f4ca183be92ca5f299704e2c8cf":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,0,32) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"e69f419140289ac25fb0e2ef9cc4f7e06777ac20f7d631918d1af0c8883b7d6a":hex:"531248afdaaf1b86cf34d2394900afd9":hex:"":hex:"ff8dfa4e70490ea9c84cb894dc5d7e1b935ebcdea80a39c4161d4db42cbb269cc86abd381af15ec9a4a42ed18c1eed540decec19722df46f22aa06883297cb393fb23e4bb31a817e88357aa923c7ecbcf24c28a09f622dd21fa70c0a02193024fdcefeaa96cc1b50f81a65dfa9e1bb5126f0c9766a861eed096ec15fb07b0f81":hex:"c6885cdd":char*:"":hex:"f75299e0ead3834fc7ebd4b2051541b598ad57cc908fdcd4324cf4ccf7dcf7b3f0737ad6c026399a8b1b6d3d50011b3c48ea2c89833b4b44c437677f230b75d36848781d4af14546894eecd873a2b1c3d2fcdd676b10bd55112038c0fdaa7b5598fe4db273a1b6744cba47189b7e2a973651bfc2aaa9e9abea4494047b957a80":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,128) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"404a5d1ac9e32f9caabffbfa485ce9c27edc9e5cde0f2aab4f32ce3121449b88":hex:"b6e6c078e6869df156faa9ac32f057c3":hex:"6ebc75fc9304f2b139abc7d3f68b253228009c503a08b7be77852da9e1afbe72c9ab374740b0dc391fa4d7e17de6a0aa08c69e6f5c5f05411e71e70c69dfbcf693df84c30f7a8e6c7949ea1e734297c0ea3df9b7e905faa6bbdcaf1ff2625a39363308331d74892cf531cb3f6d7db31bbe9a039fca87100367747024f68c5b77":hex:"b63ec4d28854b7fe2d4d13973f5bcb16f78494ce25cc2820de9d0dc1d8d91db1f19bc9e01cee8418c9e88a69b2f30cdbb0dbdbb50be71e1e666c111c126f2b7197c02f69a1b2ec5e1bf4062b2d0b22fb0fa1585b4e6286b29f6ac98d1b1319dd99851fa6921607077d2947140fdeeea145b56ea7b6af276c9f65393bc43ede33":hex:"94c1b9b70f9c48e7efd40ecab320c2d3":char*:"":hex:"56a0ac94f3ec7be2608154f779c434ee96db5ed4f5a6e1acfb32361ce04e16e1337be5978df06d7c4f6012385fb9d45bb397dc00f165883714b4a5b2f72f69c018ffa6d4420ad1b772e94575f035ad203be3d34b5b789a99389f295b43f004de3daaef7fa918712d3a23ca44329595e08da190e3678bc6ad9b500b9f885abe23":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,128) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"b56f0c980acf7875cf7f27d53ad4a276adc126d0b93a5774ac4277eecad4309e":hex:"b004c049decfb43d6f3ec13c56f839ef":hex:"b2045b97fbb52a5fc6ff03d74e59dd696f3f442c0b555add8e6d111f835df420f45e970c4b32a84f0c45ba3710b5cd574001862b073efa5c9c4bd50127b2ce72d2c736c5e2723956da5a0acb82041a609386d07b50551c1d1fa4678886bac54b0bd080cc5ef607dca2a0d6a1e71f0e3833678bf8560bc059dae370ec94d43af6":hex:"2c94299e36b7c4a825ecbc5a7809061e0a6761764a5a655ffdb0c20e5c3fcb10f4e93c68aa0a38c2acc5d06f2b7c4ff4fcf814b551bfefa248dbe06a09a0f153213538a31fa7cf7d646b5b53908d8978f514c9c4d6d66f2b3738024b5f9c3fd86b6da0c818203183f4205f186ea44a54edb911b1a17c424c95852c8d271b2e93":hex:"fce7234f7f76b5d502fd2b96fc9b1ce7":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,128) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"1c5027c36e6caa1b3e5e45fead32b5e3126ac41f106c491b0b3a7c16502f4fe6":hex:"3ee660f03858669e557e3effdd7df6bd":hex:"93e803c79de6ad652def62cf3cd34f9addc9dd1774967a0f69e1d28361eb2cacc177c63c07657389ce23bbe65d73e0460946d31be495424655c7724eac044cafafe1540fcbd4218921367054e43e3d21e0fa6a0da9f8b20c5cdbd019c944a2d2ee6aa6760ee1131e58fec9da30790f5a873e792098a82ddf18c3813611d9242a":hex:"58f0ceaa31c0025d2e6bb58720cce4b64f5f6c657c847ae42936eb1e343fea397c8a8cf2f5ef02ffaec25f431900dcb0910cf32cea9eca3b78aed1c451c7af51066489f87b2a5f8cf28d6fdb6ce49d898b6167b590a3907be7618be11fb0922a3cfd18e73efef19e5cdc250fa33f61e3940c6482ae35f339e8c0a85a17379a4e":hex:"ac33f5ffca9df4efc09271ff7a4f58e2":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,120) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"34c3019810d72b5e584f0758f2f5888a42729a33610aafa9824badade4136bbd":hex:"f315ea36c17fc57dab3a2737d687cd4f":hex:"f33c5a3a9e546ad5b35e4febf2ae557ca767b55d93bb3c1cf62d862d112dbd26f8fe2a3f54d347c1bc30029e55118bab2662b99b984b8b8e2d76831f94e48587de2709e32f16c26695f07e654b703eba6428f30070e23ed40b61d04dd1430e33c629117d945d9c0e4d36c79a8b8ab555d85083a898e7e7fbeb64a45cc3511d99":hex:"22deef66cbb7db240c399b6c83407f090d6999ba25e560b2087fed0467904bb5c40cbaa05b8bf0ff5a77c53fa229478d8e0736414daf9c420417c391c9a523fd85954533f1304d81359bdcc2c4ac90d9f5f8a67a517d7f05ba0409b718159baf11cd9154e815d5745179beb59954a45a8676a375d5af7fae4d0da05c4ea91a13":hex:"0bae9403888efb4d8ec97df604cd5d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,120) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"29397d98fc5a7f04b5c8b6aa3a1dd975b6e4678457ae7f0691eee40b5397503a":hex:"885543a45fd1163e34ef9276145b0f8c":hex:"d88beaa0664bcef178cbdbfab17ff526b5c0f8ad9543c6a312d93c336707fbf87c0448b07a550580953279f552f368225cc6971f1eecc718d6aad1729c8d8873081357752bd09d77075fa680cb2dc4139171e4a0aaa50b28c262c14fd10b8d799ca1c6641bb7dfdfdf3dea69aa2b9e4e4726dc18b0784afa4228e5ccb1eb2422":hex:"0bbf1079cb5569c32257bc7e52371db46f3961b457402b816588243b4523543430d5ca56b52de6632724c51e6c3af310b28822c749a12bdd58dee58bbc3266631562a998ec3acdc8a2567a9f07f7f9759c3f50b1d1dcdd529256b80c0d227fc1fe8b58c62d1c643f1ac2996809fd061afcf4a9af184c14db9e63ec885c49de61":hex:"7b334d7af54b916821f6136e977a1f":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,120) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"7555dfcf354da07fd70f951d94ec1d86a635edfdb7929460207b2a39cc0cf4a3":hex:"e1b30b6a47e8c21228e41a21b1a004f0":hex:"bf986d3842378440f8924bb7f117d1a86888a666915a93ba65d486d14c580501e736d3418cebee572439318b21b6e4e504a7b075b8c2300c014e87e04fa842b6a2a3ebd9e6134b9ddd78e0a696223b1dc775f3288a6a9569c64b4d8fc5e04f2047c70115f692d2c2cefe7488de42ff862d7c0f542e58d69f0f8c9bf67ef48aea":hex:"a1351cfffd1b0cbf80c3318cc432d3238cb647e996b7b53c527783594683f535950cd08788687c77226b2d3f095955884adc2e475ca1e1eab04e37d5e901ae8934a9d3a0cb37b80612ca25d989856dfa7607b03039b64d7dcd468204f03e0f2c55cb41c5367c56ca6c561425992b40e2d4f380b3d8419f681e88ebe2d4bdad36":hex:"d8ef5438b7cf5dc11209a635ce1095":char*:"":hex:"95e8db7c8ecab8a60ceb49726153a7c5553cf571bc40515944d833485e19bf33cb954e2555943778040165a6cfffecef79eb7d82fef5a2f136f004bb5e7c35ae827fac3da292a185b5b8fc262012c05caeda5453ede3303cfeb0c890db1facadaa2895bdbb33265ada0bb46030607b6cf94f86961178e2e2deeb53c63900f1ec":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,112) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"bbeafe86c72ab0354b733b69b09e4d3462feb1658fe404004d81503f3a6e132f":hex:"ee1caba93cb549054ca29715a536393e":hex:"e44b0e0d275ae7c38a7dc2f768e899c1c11a4c4cb5b5bd25cd2132e3ecbaa5a63654312603e1c5b393c0ce6253c55986ee45bb1daac78a26749d88928f9b9908690fc148a656b78e3595319432763efbcf6957c9b2150ccabfd4833d0dcee01758c5efb47321a948b379a2ec0abcd6b6cbf41a8883f0f5d5bf7b240cb35f0777":hex:"a033c2051e425d01d97d563572e42c5113860e5dedcd24c76e3e357559ba3250f1fc5d4a931a9d0900ac025400f0158621f0b1215b2907467bfc874bcabbb28e28de81fe1ee5b79985261c512afec2327c8c5957df90c9eb77950de4a4860b57a9e6e145ea15eb52da63f217f94a5c8e5fcb5d361b86e0e67637a450cdbcb06f":hex:"a4809e072f93deb7b77c52427095":char*:"":hex:"e62adf9bbd92dd03cc5250251691f724c6ece1cb89d8c4daf31cc732a5420f6bedab71aab0238ba23bd7165ed1f692561ef457fd1d47413949405b6fc8e17922b17026d89d5830b383546ea516a56f3a1c45ec1251583ae880fa8985bd3dcc1d6a57b746971937bf370e76482238cc08c2c3b13258151e0a6475cc017f8a3d0e":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,112) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"6ad06c88dd4f3becf35eed95bb859be2406a1803a66e4332a74c5f75c09b9a01":hex:"07d8b4a6e77aef9018828b61e0fdf2a4":hex:"cca1fd0278045dda80b847f0975b6cbf31e1910d2c99b4eb78c360d89133a1c52e66c5c3801824afc1f079d2b2b1c827199e83f680e59b9a7de9b15fa7b6848b5bf4e16a12ac1af4cf2b4d7bb45673c5e1241e9996440860a9204fc27cae46a991607bc5e7120d6c115ddcbdd02c022b262602139081e61eee4aba7193f13992":hex:"2219c11672884b93d0290b6a7140feafe416461f1cdaf0b3aa64693d7db2eb10feae46aac7af549fa1b0abc78c11f8df7ee803ef70310fc3e67769f8b4bc64f81143a6ebf8bee9d386a8ede5d2cc0ed17985a3b7bb95191ef55e684690ccdc5ca504bc6eb28442b353861a034a43532c025f666e80be967a6b05b9dd3a91ff58":hex:"e3ede170386e76321a575c095966":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,112) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"87bbf7c15689e8c99a5a32a8ba0dfebcfe1989159807428cdd1f382c3ea95178":hex:"2f19aa1f3a82a7398706953f01739da7":hex:"590dbd230854aa2b5ac19fc3dc9453e5bb9637e47d97b92486a599bdafdfb27c3852e3d06a91429bb820eb12a5318ed8861ffe87d659c462ef167be22604facfa3afb601b2167989b9e3b2e5b59e7d07fda27ffccd450869d528410b0aff468f70cc10ef6723a74af6eebc1572c123a9b5a9aab748a31fa764716d3293ff5de7":hex:"b77d3bf3b30b3e6e5c86cbfb7e5455f6480f423cc76834b4663d28d9f1eb5c40212634e3347668427f7848352ab789886f96682a568260bdaeb7de0aae2af36f5ae04f06c332b158d923706c1c6255c673feeadb6d30bfc901e60b92acd9ddd83ef98686c4d492f4a60e97af2541d470a6a6b21903441020ea7619cf28a06986":hex:"5c43fc4dc959fabeebb188dbf3a5":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,104) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"24095a66b6eb0320ca75e2ab78e8496a45f4b000fc43436904c3e386fb852ed2":hex:"0955c1f0e271edca279e016074886f60":hex:"f5160c75c449e6bb971e73b7d04ab9b9a85879f6eb2d67354af94a4f0ca339c0a03a5b9ede87a4ff6823b698113a38ae5327e6878c3ccc0e36d74fe07aa51c027c3b334812862bc660178f5d0f3e764c0b828a5e3f2e7d7a1185b7e79828304a7ad3ddcd724305484177e66f4f81e66afdc5bbee0ec174bff5eb3719482bd2d8":hex:"4690edc843e23d9d9b9a4dab8fa8193f8bf03897d3d29759e9dc9e0f8a970c0f5d4399b9f60461fe5cf439f9b0d54bbc075695e4d76b76298cc2b75bb3e0b516ee9ada93f77c4c002ba9fd163a1e4b377befb76c1e5ab8b3901f214c0a4c48bd2aa2f33560d46e2721a060d4671dc97633ff9bcd703bb0fbed9a4a2c259b53f3":hex:"75a31347598f09fceeea6736fe":char*:"":hex:"0dd2dca260325967267667ff3ccdc6d6b35648821a42090abba46282869bac4bdc20a8bee024bea18a07396c38dbb45d9481fedcc423a3928cfa78a2f0ae8eedb062add810bdbee77ddc26c29e4f9fda1ab336d04ef42947b05fbdb9bc4df79e37af951d19d6bf5e5cb34eef898f23642a9c4a9111ed0b7a08abeeefbbd45c23":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,104) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"086b77b5731f971f0bf5b8227361b216746daf8b08c583ad38f114a64aa7877b":hex:"164058e5e425f9da40d22c9098a16204":hex:"6633eae08a1df85f2d36e162f2d7ddd92b0c56b7477f3c6cdb9919d0e4b1e54ea7635c202dcf52d1c688afbbb15552adda32b4cd30aa462b367f02ded02e0d64eeee2a6b95462b191784143c25607fd08a23a2fbc75cf6bee294daf2042587fdd8fe3d22c3a242c624cf0a51a7c14db4f0f766ec437de4c83b64f23706a24437":hex:"629317212ff8bd8a7676e4c00b81a9577de6397c832f99ac974fa2bbbccb6e3b8aa776db6922eed0b014bf3923799da7d9d0854c8817470e1e2f7fc7a572f9d0316ee60cde7ef025d59b897d29a6fee721aeb2f7bb44f9afb471e8a7b0b43a39b5497a3b4d6beb4b511f0cefa12ce5e6d843609d3e06999acfbee50a22ca1eee":hex:"2eb6eb6d516ed4cf1778b4e378":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,104) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"0f9e806b0d937268561c0eafbbdd14ec715b7e9cef4118d6eb28abbb91266745":hex:"8657996634e74d4689f292645f103a2e":hex:"2ca253355e893e58cb1a900fbb62d61595de5c4186dc8a9129da3657a92b4a631bbdc3d5f86395385a9aa8557b67f886e3bb807620e558c93aea8e65826eadeb21544418ee40f5420c2d2b8270491be6fc2dcbfd12847fa350910dd615e9a1881bc2ced3b0ac3bde445b735e43c0c84f9d120ca5edd655779fc13c6f88b484f7":hex:"2ae4baef22ace26f464a9b0c75802303f2d7c0f9a1ed1d0180135189765bdd347fea0cc2b73ee7fbbf95ea1fda22597b8aad826f63e744069a9c349488b2cc1cf9372f423cc650302082125724730ae5a4d878e07385ddc99034c6b6b46748f02c80b179fe6406b1d33581950cb9bcd1d1ea1ec7b5becfd6c1f5b279412c433a":hex:"83155ebb1a42112dd1c474f37b":char*:"":hex:"87d69fc3cbc757b2b57b180c6ba34db4e20dde19976bfb3d274d32e7cea13f0c7d9e840d59ce857718c985763b7639e448516ddbbda559457cd8cb364fa99addd5ba44ef45c11060d9be82b4ebe1f0711ac95433074649b6c08eeab539fdfc99c77498b420427e4d70e316111845793de1f67fb0d04e3389a8862f46f4582dc8":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,96) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"c24c17911f6db4b3e37c46bcc6fa35efc1a55f7754f0bb99f2eea93398116447":hex:"5098cc52a69ee044197e2c000c2d4ab8":hex:"9ad4dee311d854925fc7f10eca4f5dd4e6990cb2d4325da2ef25a9a23690f5c5590be285d33aaeba76506c59edec64b8c3ff8e62716d1c385fbce2a42bc7bd5d8e8584de1944543ab6f340c20911f8b7b3be1a1db18a4bb94119333339de95815cae09365b016edc184e11f3c5b851f1fa92b1b63cfa3872a127109c1294b677":hex:"0bd92cb106867e25ad427ff6e5f384d2d0f432fc389852187fcc7b0bf9f6d11a102a872b99ed1ad9a05dab0f79fa634745535efed804ff42b0af8dad20ba44709391fb263f245e5a2c52d9ce904179633282f57a1229b0a9c4557a5c0aeda29bbc5a7a871fa8b62d58100c3722c21e51e3b3e913185235526e7a5a91c559717d":hex:"f7930e3fab74a91cb6543e72":char*:"":hex:"6124ede608d416baa5e653a898ca76e9f47f08403c1984feec112e670ded2226e0073f8881ab2161cfda541dccae19691285f7391a729f07aba18f340bb452c1da39cbe83cf476cfc105b64187e0d2227dd283dcba8b6a350f9956b18861fa131d3f00c034443e8f60e0fdfcfaabbed93381ae374a8bf66523d33646183e1379":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,96) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"d267a8379260036ff3d1ec07a7b086ff75706bad12d37d9656f04776f3d8b85c":hex:"674dc34e8c74c51fa42aacd625a1bd5b":hex:"6a9a8af732ae96d0b5a9730ad792e296150d59770a20a3fdbbc2a3a035a88ac445d64f37d684e22003c214b771c1995719da72f3ed24a96618284dd414f0cac364640b23c680dc80492a435c8ec10add53b0d9e3374f1cf5bfc663e3528fa2f6209846421ea6f481b7ecf57714f7bc2527edc4e0466b13e750dd4d4c0cc0cdfc":hex:"80c68a330ef50e3e516681f1e535868b03466e7edbb86cb385d01db487da3dd3edad940fdc98d918b7db9b59f8d61369eee2928c88557306c4a13e366af0708d94cb90a15f1c3bc45544bdb05ff964da5e06c5ae965f20adb504620aed7bce2e82f4e408d00219c15ef85fae1ff13fea53deb78afa5f2a50edbd622446e4a894":hex:"bea660e963b08fc657741bc8":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,96) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"c86cb637753010f639fa3aa3bff7c28b74f012ad6090f2a31b0801d086f183ad":hex:"87ff6e0bb313502fedf3d2696bff99b5":hex:"2816f1132724f42e40deabab25e325b282f8c615a79e0c98c00d488ee56237537240234966565e46bfb0c50f2b10366d1589620e6e78bd90ade24d38a272f3fff53c09466aa2d3ef793d7f814a064b713821850a6e6a058f5139a1088347a9fa0f54e38abd51ddfc7ef040bf41d188f3f86c973551ced019812c1fc668649621":hex:"6b7858557e0fd0f957842fb30e8d54dedbc127eb4bbf9de319f731fa28a606df2c046a0bce8ecda4e75d3596e4e988efd6bc279aa005bc52fad92ba07f5b1dfda4cc417029f9778c88d6fe5341a0fd48893dcb7c68d0df310a060f2a5235aee422d380f7209bc0909b2aa7e876044056f0b915dab0bc13cbea5a3b86d40ca802":hex:"7859f047f32b51833333accf":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,64) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"2c31ca0cac3efe467168198f06beacf39565a6f57f82e1048a5c06a231315882":hex:"95cae6e85f33f3043182460589be3639":hex:"67523751a9b1b643d00de4511b55e4268cb2d18e79e01a55fc7b677d529bd6400940fb25ea6ae135c1a816e61b69e90b966981aeda685934b107066e1467db78973492ad791e20aef430db3a047447141def8be6e6a9a15089607c3af9368cdb11b7b5fbf90691505d0c33664766945d387904e7089b915a3c28886ba1763bb5":hex:"65261d6e29b2369b1828a7cef2df9873d6e6057c499301afedd6cb65b5036ddb95f9e353fbf38e54c4f46f88164325b33620ce183beb2e411fbb89a0e0002e542fc161cad32a61ee6f1e1717e0b4dcd0340b116f795bc1009dbbc65bc31c9b549bf03c40bc204cd0d02ec884be907777ebeed8b527ec3af7cbb508193c0745de":hex:"21309d0351cac45e":char*:"":hex:"1d5f2cb921f54aeb552b4304142facd49497837deb1f00d26fbeddbab922fd80b00dba782961f8fce84f1f7973e81eed6ee168b1760c575c891f40a1dae0fa1a08738025d13ef6e0b30be4f054d874f1b8a2427a19ebb071d98365c32316a88a68c2b40daf1ea831a64519ac3679acb4e04986ecc614ec673c498c6fee459e40":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,64) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"ca9fa36ca2159dff9723f6cfdb13280446eb6bc3688043c7e2e2504184791596":hex:"d13ca73365e57114fc698ee60ba0ad84":hex:"2aa510b7f1620bfce90080e0e25f5468dbc5314b50914e793b5278369c51ac017eace9fd15127fca5a726ad9e67bdee5af298988d9a57ec4bbc43d4eb849535eb10521ac7cd7ed647479a42876af2ebc9e2108b539febdaa9127c49bda1bda800f6034050b8576e944311dfbca59d64d259571b6d2ed5b2fc07127239b03f4b7":hex:"ac04c4293554cd832aa400c811cb202d815d6178aa1343b4628592b7f3ae45dc5f12ea47be4b43e1865f40b06ab67b3a9fb3644248a9b3efe131a8addb7447978bb51ccf749e75574fea60e8781677200af023b2f8c415f4e6d8c575a9e374916d9ec3a612b16e37beb589444b588e0b770d9f8e818ad83f83aa4ecf386d17a7":hex:"2111d55d96a4d84d":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,64) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"2f802e838250064c15fdee28d7bd4872850355870847701ad9742b2d6eb4b0c0":hex:"2dd550cfd97f8e1d8d31ba5537ae4710":hex:"72b9630dda40306e785b961934c56e20948f8eac0e981f49787eb3dbd6e4607f7d08d10ca643746bf1efa7e5066993683d527a90f2d45ec9cf73113f1f17bb67958be669acd4e2927f1dacfde902cd3048056d7f6dfdd8630ff054efce4526db7c9321d6d2be2236f4d60e27b89d8ec94f65a06dc0953c8c4533a51b6a29bd2c":hex:"e2ca8c8d172ff90232879f510d1225af91bc323bdf636363c2903fcd1790692c8bcb03a1cccb18814678852c6b3a441552e541b843ee5e4f86a152fa73d05aea659fe08aa6428bb257eaa2a7b579fdc4022c1dec359a854253c1aefc983c5ede8c97517ea69fc4606e25f13ffb0f5f49160691454fbb74e704326738353525f7":hex:"bd6c8823c9005c85":char*:"":hex:"f6dd0b5f3d1a393a1837112962dba175a13c2d1e525ef95734caf34949d8b2d63b4fe5603226b5f632f2d7f927361ba639dc0e3c63414f45462342695916d5792133b4a24c7c4cbe2b97c712bf27ab62d3d68b3875d58ffe4b7c30a8171bff1a9e2f3995768faacda2ea9213ff35798b9e4513f6a87bd3f5a9d93e847e768359":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,32) #0 [#2] +depends_on:4:2 +9:exp:6:hex:"84dd53ce0146cb71c32776033bb243098d78a22ac17f52a62a122f5653fb4e33":hex:"f0c90a1bca52f30fab3670df0d3beab0":hex:"a3ea8032f36a5ca3d7a1088fd08ac50ae6bdc06ad3a534b773ac3e3d4a3d524499e56274a0062c58c3b0685cc850f4725e5c221af8f51c6df2bbd5fbcff4a93ba4c1054f7f9c67fd9285511a08d328d76a642f067227d378f95a1e67587b90251f9103ed3cacdb6bf69e0794e366d8b92d8de37b4e028de0778841f356ac044d":hex:"68222bffa782dcfe4f328fc20eb520e75a9a5fedbe13ec7fcf0e82fba08bb87a8a8e02902638e32fe0e2294344b380797f8028426ffcc0531c739c884892394c48ff0779c5f5edf0a36a3fb8aa91213347774ec4bf0fe1049bd53746b13beef3c637169826c367056cb1aa0a3868e23f886a9c7b8015c26af9e40794662f6b21":hex:"b1ece9fb":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,32) #1 [#2] +depends_on:4:2 +9:exp:6:hex:"9bb36fe25e966a075ae2c3bb43b5877679ebc379d5123c8eda3fa0e30b95cae0":hex:"59869df4ef5754b406478a2fb608ee99":hex:"ecd125682e8a8e26757c888b0c8b95dec5e7ed7ac991768f93e8af5bcf6f21ed4d4d38699ee7984ed13635fff72f938150157c9a27fcda121ffced7b492d2b18dad299cb6495ed5f68441aefc8219d2cf717d15d5cd2dbce4606fcf90fe45f3601127cf6acee210bd7df97309f773974a35bef1d33df984101c2fc9d4b55259e":hex:"fb3a4be643c10343251c6f0745aaa54349463f622ca04a792e9b4780866844b30aeef3269fc60cac0ea031c5f3780b535e15154f7c76eb4a371b8ae368550f3fa2ce693c34511ec96b839cac567f1b0de0e7e3116d729b45d1b16e453703a43db73f5d0c3e430f16b142420b5f0d26d72ac3dba543d7d813603b0bfdca3dd63e":hex:"cb3f5338":char*:"FAIL":hex:"":int:1 + +AES-GCM NIST Validation PSA (AES-256,128,1024,1024,32) #2 [#2] +depends_on:4:2 +9:exp:6:hex:"ca264e7caecad56ee31c8bf8dde9592f753a6299e76c60ac1e93cff3b3de8ce9":hex:"4763a4e37b806a5f4510f69fd8c63571":hex:"07daeba37a66ebe15f3d6451d1176f3a7107a302da6966680c425377e621fd71610d1fc9c95122da5bf85f83b24c4b783b1dcd6b508d41e22c09b5c43693d072869601fc7e3f5a51dbd3bc6508e8d095b9130fb6a7f2a043f3a432e7ce68b7de06c1379e6bab5a1a48823b76762051b4e707ddc3201eb36456e3862425cb011a":hex:"8d03cf6fac31182ad3e6f32e4c823e3b421aef786d5651afafbf70ef14c00524ab814bc421b1d4181b4d3d82d6ae4e8032e43a6c4e0691184425b37320798f865c88b9b306466311d79e3e42076837474c37c9f6336ed777f05f70b0c7d72bd4348a4cd754d0f0c3e4587f9a18313ea2d2bace502a24ea417d3041b709a0471f":hex:"3105dddb":char*:"FAIL":hex:"":int:1 + diff --git a/third_party/mbedtls/test/test_suite_cipher.misc.c b/third_party/mbedtls/test/test_suite_cipher.misc.c new file mode 100644 index 000000000..f3f4fcaae --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.misc.c @@ -0,0 +1,2009 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_cipher.misc.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_cipher.function + * Test suite data : suites/test_suite_cipher.misc.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_CIPHER_C) +#include "third_party/mbedtls/cipher.h" + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +#endif + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +#endif + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) +#define MBEDTLS_CIPHER_AUTH_CRYPT +#endif + +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +/* Helper for resetting key/direction + * + * The documentation doesn't explicitly say whether calling + * mbedtls_cipher_setkey() twice is allowed or not. This currently works with + * the default software implementation, but only by accident. It isn't + * guaranteed to work with new ciphers or with alternative implementations of + * individual ciphers, and it doesn't work with the PSA wrappers. So don't do + * it, and instead start with a fresh context. + */ +static int cipher_reset_key( mbedtls_cipher_context_t *ctx, int cipher_id, + int use_psa, size_t tag_len, const data_t *key, int direction ) +{ + mbedtls_cipher_free( ctx ); + mbedtls_cipher_init( ctx ); + +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; + (void) tag_len; +#else + if( use_psa == 1 ) + { + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( ctx, + mbedtls_cipher_info_from_type( cipher_id ), + tag_len ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + TEST_ASSERT( 0 == mbedtls_cipher_setup( ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + } + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( ctx, key->x, 8 * key->len, + direction ) ); + return( 1 ); + +exit: + return( 0 ); +} + +/* + * Check if a buffer is all-0 bytes: + * return 1 if it is, + * 0 if it isn't. + */ +int buffer_is_all_zero( const uint8_t *buf, size_t size ) +{ + for( size_t i = 0; i < size; i++ ) + if( buf[i] != 0 ) + return 0; + return 1; +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ + +void test_mbedtls_cipher_list( ) +{ + const int *cipher_type; + + for( cipher_type = mbedtls_cipher_list(); *cipher_type != 0; cipher_type++ ) + TEST_ASSERT( mbedtls_cipher_info_from_type( *cipher_type ) != NULL ); +exit: + ; +} + +void test_mbedtls_cipher_list_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_cipher_list( ); +} +void test_cipher_invalid_param_unconditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + mbedtls_cipher_context_t invalid_ctx; + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + mbedtls_cipher_init( &valid_ctx ); + mbedtls_cipher_setup( &valid_ctx, valid_info ); + mbedtls_cipher_init( &invalid_ctx ); + + /* mbedtls_cipher_setup() */ + TEST_ASSERT( mbedtls_cipher_setup( &valid_ctx, NULL ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_get_block_size() */ + TEST_ASSERT( mbedtls_cipher_get_block_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_ASSERT( mbedtls_cipher_get_cipher_mode( &invalid_ctx ) == + MBEDTLS_MODE_NONE ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_ASSERT( mbedtls_cipher_get_iv_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_type() */ + TEST_ASSERT( + mbedtls_cipher_get_type( &invalid_ctx ) == + MBEDTLS_CIPHER_NONE); + + /* mbedtls_cipher_get_name() */ + TEST_ASSERT( mbedtls_cipher_get_name( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_ASSERT( mbedtls_cipher_get_key_bitlen( &invalid_ctx ) == + MBEDTLS_KEY_LENGTH_NONE ); + + /* mbedtls_cipher_get_operation() */ + TEST_ASSERT( mbedtls_cipher_get_operation( &invalid_ctx ) == + MBEDTLS_OPERATION_NONE ); + + /* mbedtls_cipher_setkey() */ + TEST_ASSERT( + mbedtls_cipher_setkey( &invalid_ctx, + valid_buffer, + valid_bitlen, + valid_operation ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_set_iv() */ + TEST_ASSERT( + mbedtls_cipher_set_iv( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_reset() */ + TEST_ASSERT( mbedtls_cipher_reset( &invalid_ctx ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_ASSERT( + mbedtls_cipher_update_ad( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_ASSERT( mbedtls_cipher_set_padding_mode( &invalid_ctx, valid_mode ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif + + /* mbedtls_cipher_update() */ + TEST_ASSERT( + mbedtls_cipher_update( &invalid_ctx, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_finish() */ + TEST_ASSERT( + mbedtls_cipher_finish( &invalid_ctx, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_ASSERT( + mbedtls_cipher_write_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_check_tag() */ + TEST_ASSERT( + mbedtls_cipher_check_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +exit: + mbedtls_cipher_free( &invalid_ctx ); + mbedtls_cipher_free( &valid_ctx ); +} + +void test_cipher_invalid_param_unconditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_unconditional( ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_cipher_invalid_param_conditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_operation_t invalid_operation = 100; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + /* mbedtls_cipher_init() */ + TEST_VALID_PARAM( mbedtls_cipher_init( &valid_ctx ) ); + TEST_INVALID_PARAM( mbedtls_cipher_init( NULL ) ); + + /* mbedtls_cipher_setup() */ + TEST_VALID_PARAM( mbedtls_cipher_setup( &valid_ctx, valid_info ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setup( NULL, valid_info ) ); + + /* mbedtls_cipher_get_block_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_block_size( NULL ) ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_MODE_NONE, + mbedtls_cipher_get_cipher_mode( NULL ) ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_iv_size( NULL ) ); + + /* mbedtls_cipher_get_type() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_CIPHER_NONE, + mbedtls_cipher_get_type( NULL ) ); + + /* mbedtls_cipher_get_name() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_name( NULL ) ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_KEY_LENGTH_NONE, + mbedtls_cipher_get_key_bitlen( NULL ) ); + + /* mbedtls_cipher_get_operation() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_OPERATION_NONE, + mbedtls_cipher_get_operation( NULL ) ); + + /* mbedtls_cipher_setkey() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( NULL, + valid_buffer, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + NULL, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + valid_buffer, + valid_bitlen, + invalid_operation ) ); + + /* mbedtls_cipher_set_iv() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_reset() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_reset( NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_padding_mode( NULL, valid_mode ) ); +#endif + + /* mbedtls_cipher_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( NULL, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + NULL, valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, + NULL ) ); + + /* mbedtls_cipher_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( NULL, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + valid_buffer, + NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_check_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + + /* mbedtls_cipher_crypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) + /* mbedtls_cipher_auth_encrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); + + /* mbedtls_cipher_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); +#endif /* defined(MBEDTLS_CIPHER_MODE_AEAD) */ + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) + /* mbedtls_cipher_auth_encrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); + + /* mbedtls_cipher_auth_decrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); +#endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */ + + /* mbedtls_cipher_free() */ + TEST_VALID_PARAM( mbedtls_cipher_free( NULL ) ); +exit: + TEST_VALID_PARAM( mbedtls_cipher_free( &valid_ctx ) ); +} + +void test_cipher_invalid_param_conditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_conditional( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#if defined(MBEDTLS_AES_C) +void test_cipher_special_behaviours( ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + unsigned char input[32]; + unsigned char output[32]; +#if defined (MBEDTLS_CIPHER_MODE_CBC) + unsigned char iv[32]; +#endif + size_t olen = 0; + + mbedtls_cipher_init( &ctx ); + memset( input, 0, sizeof( input ) ); + memset( output, 0, sizeof( output ) ); +#if defined(MBEDTLS_CIPHER_MODE_CBC) + memset( iv, 0, sizeof( iv ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_CBC ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* IV too big */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, MBEDTLS_MAX_IV_LENGTH + 1 ) + == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + + /* IV too small */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, 0 ) + == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_cipher_free( &ctx ); + mbedtls_cipher_init( &ctx ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_ECB ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* Update ECB with partial block */ + TEST_ASSERT( mbedtls_cipher_update( &ctx, input, 1, output, &olen ) + == MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_cipher_special_behaviours_wrapper( void ** params ) +{ + (void)params; + + test_cipher_special_behaviours( ); +} +#endif /* MBEDTLS_AES_C */ +void test_enc_dec_buf( int cipher_id, char * cipher_string, int key_len, + int length_val, int pad_mode ) +{ + size_t length = length_val, outlen, total_len, i, block_size; + unsigned char key[64]; + unsigned char iv[16]; + unsigned char ad[13]; + unsigned char tag[16]; + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + + /* + * Prepare contexts + */ + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( key, 0x2a, sizeof( key ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( mbedtls_cipher_info_from_string( cipher_string ) == cipher_info ); + + /* Initialise enc and dec contexts */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + /* + * Do a few encode/decode cycles + */ + for( i = 0; i < 3; i++ ) + { + memset( iv , 0x00 + i, sizeof( iv ) ); + memset( ad, 0x10 + i, sizeof( ad ) ); + memset( inbuf, 0x20 + i, sizeof( inbuf ) ); + + memset( encbuf, 0, sizeof( encbuf ) ); + memset( decbuf, 0, sizeof( decbuf ) ); + memset( tag, 0, sizeof( tag ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, sizeof( iv ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, sizeof( iv ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, ad, sizeof( ad ) - i ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, ad, sizeof( ad ) - i ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, length, encbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_write_tag( &ctx_enc, tag, sizeof( tag ) ) ); +#endif + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len > length && + total_len <= length + block_size ) ); + + /* decode the previously encoded string */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, total_len, decbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_check_tag( &ctx_dec, tag, sizeof( tag ) ) ); +#endif + + /* check result */ + TEST_ASSERT( total_len == length ); + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + } + + /* + * Done + */ +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_wrapper( void ** params ) +{ + + test_enc_dec_buf( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_enc_fail( int cipher_id, int pad_mode, int key_len, int length_val, + int ret ) +{ + size_t length = length_val; + unsigned char key[32]; + unsigned char iv[16]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + + /* Initialise context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key, key_len, MBEDTLS_ENCRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, NULL, 0 ) ); +#endif + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, inbuf, length, encbuf, &outlen ) ); + TEST_ASSERT( ret == mbedtls_cipher_finish( &ctx, encbuf + outlen, &outlen ) ); + + /* done */ +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_enc_fail_wrapper( void ** params ) +{ + + test_enc_fail( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_dec_empty_buf( int cipher, + int expected_update_ret, + int expected_finish_ret ) +{ + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise context */ + cipher_info = mbedtls_cipher_info_from_type( cipher ); + TEST_ASSERT( NULL != cipher_info); + TEST_ASSERT( sizeof(key) * 8 >= cipher_info->key_bitlen ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, + key, cipher_info->key_bitlen, + MBEDTLS_DECRYPT ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); +#endif + + /* decode 0-byte string */ + TEST_ASSERT( expected_update_ret == + mbedtls_cipher_update( &ctx_dec, encbuf, 0, decbuf, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + if ( expected_finish_ret == 0 && + ( cipher_info->mode == MBEDTLS_MODE_CBC || + cipher_info->mode == MBEDTLS_MODE_ECB ) ) + { + /* Non-CBC and non-ECB ciphers are OK with decrypting empty buffers and + * return success, not MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED, when + * decrypting an empty buffer. + * On the other hand, CBC and ECB ciphers need a full block of input. + */ + expected_finish_ret = MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED; + } + + TEST_ASSERT( expected_finish_ret == mbedtls_cipher_finish( + &ctx_dec, decbuf + outlen, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + +exit: + mbedtls_cipher_free( &ctx_dec ); +} + +void test_dec_empty_buf_wrapper( void ** params ) +{ + + test_dec_empty_buf( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +void test_enc_dec_buf_multipart( int cipher_id, int key_len, int first_length_val, + int second_length_val, int pad_mode, + int first_encrypt_output_len, int second_encrypt_output_len, + int first_decrypt_output_len, int second_decrypt_output_len ) +{ + size_t first_length = first_length_val; + size_t second_length = second_length_val; + size_t length = first_length + second_length; + size_t block_size; + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + size_t totaloutlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise enc and dec contexts */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, NULL, 0 ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, first_length, encbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_encrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf + first_length, second_length, encbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_encrypt_output_len == outlen ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen > length && + totaloutlen <= length + block_size ) ); + + /* decode the previously encoded string */ + second_length = totaloutlen - first_length; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, first_length, decbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_decrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf + first_length, second_length, decbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_decrypt_output_len == outlen ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length ); + + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_multipart_wrapper( void ** params ) +{ + + test_enc_dec_buf_multipart( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ) ); +} +void test_decrypt_test_vec( int cipher_id, int pad_mode, data_t * key, + data_t * iv, data_t * cipher, + data_t * clear, data_t * ad, data_t * tag, + int finish_result, int tag_result ) +{ + unsigned char output[265]; + mbedtls_cipher_context_t ctx; + size_t outlen, total_len; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + +#if !defined(MBEDTLS_GCM_C) && !defined(MBEDTLS_CHACHAPOLY_C) + ((void) ad); + ((void) tag); +#endif + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, MBEDTLS_DECRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( pad_mode != -1 ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv->x, iv->len ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, ad->x, ad->len ) ); +#endif + + /* decode buffer and check tag->x */ + total_len = 0; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, cipher->x, cipher->len, output, &outlen ) ); + total_len += outlen; + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + total_len += outlen; +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( tag_result == mbedtls_cipher_check_tag( &ctx, tag->x, tag->len ) ); +#endif + + /* check plaintext only if everything went fine */ + if( 0 == finish_result && 0 == tag_result ) + { + TEST_ASSERT( total_len == clear->len ); + TEST_ASSERT( 0 == memcmp( output, clear->x, clear->len ) ); + } + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_decrypt_test_vec_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_decrypt_test_vec( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, &data10, &data12, *( (int *) params[14] ), *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +void test_auth_crypt_tv( int cipher_id, data_t * key, data_t * iv, + data_t * ad, data_t * cipher, data_t * tag, + char * result, data_t * clear, int use_psa ) +{ + /* + * Take an AEAD ciphertext + tag and perform a pair + * of AEAD decryption and AEAD encryption. Check that + * this results in the expected plaintext, and that + * decryption and encryption are inverse to one another. + * + * Do that twice: + * - once with legacy functions auth_decrypt/auth_encrypt + * - once with new functions auth_decrypt_ext/auth_encrypt_ext + * This allows testing both without duplicating test cases. + */ + + int ret; + int using_nist_kw, using_nist_kw_padding; + + mbedtls_cipher_context_t ctx; + size_t outlen; + + unsigned char *cipher_plus_tag = NULL; + size_t cipher_plus_tag_len; + unsigned char *decrypt_buf = NULL; + size_t decrypt_buf_len = 0; + unsigned char *encrypt_buf = NULL; + size_t encrypt_buf_len = 0; + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + unsigned char *tmp_tag = NULL; + unsigned char *tmp_cipher = NULL; + unsigned char *tag_buf = NULL; +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + + /* Null pointers are documented as valid for inputs of length 0. + * The test framework passes non-null pointers, so set them to NULL. + * key, cipher and tag can't be empty. */ + if( iv->len == 0 ) + iv->x = NULL; + if( ad->len == 0 ) + ad->x = NULL; + if( clear->len == 0 ) + clear->x = NULL; + + mbedtls_cipher_init( &ctx ); + + /* Initialize PSA Crypto */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_ASSERT( psa_crypto_init( ) ); +#else + (void) use_psa; +#endif + + /* + * Are we using NIST_KW? with padding? + */ + using_nist_kw_padding = cipher_id == MBEDTLS_CIPHER_AES_128_KWP || + cipher_id == MBEDTLS_CIPHER_AES_192_KWP || + cipher_id == MBEDTLS_CIPHER_AES_256_KWP; + using_nist_kw = cipher_id == MBEDTLS_CIPHER_AES_128_KW || + cipher_id == MBEDTLS_CIPHER_AES_192_KW || + cipher_id == MBEDTLS_CIPHER_AES_256_KW || + using_nist_kw_padding; + + /**************************************************************** + * * + * Part 1: non-deprecated API * + * * + ****************************************************************/ + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * prepare buffer for decryption + * (we need the tag appended to the ciphertext) + */ + cipher_plus_tag_len = cipher->len + tag->len; + ASSERT_ALLOC( cipher_plus_tag, cipher_plus_tag_len ); + memcpy( cipher_plus_tag, cipher->x, cipher->len ); + memcpy( cipher_plus_tag + cipher->len, tag->x, tag->len ); + + /* + * Compute length of output buffer according to the documentation + */ + if( using_nist_kw ) + decrypt_buf_len = cipher_plus_tag_len - 8; + else + decrypt_buf_len = cipher_plus_tag_len - tag->len; + + + /* + * Try decrypting to a buffer that's 1B too small + */ + if( decrypt_buf_len != 0 ) + { + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + } + + /* + * Authenticate and decrypt, and check result + */ + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len, &outlen, tag->len ); + + if( strcmp( result, "FAIL" ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, decrypt_buf_len ) ); + } + else + { + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + /* Free this, but keep cipher_plus_tag for deprecated function with PSA */ + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* + * Compute size of output buffer according to documentation + */ + if( using_nist_kw ) + { + encrypt_buf_len = clear->len + 8; + if( using_nist_kw_padding && encrypt_buf_len % 8 != 0 ) + encrypt_buf_len += 8 - encrypt_buf_len % 8; + } + else + { + encrypt_buf_len = clear->len + tag->len; + } + + /* + * Try encrypting with an output buffer that's 1B too small + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret != 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + + /* + * Encrypt and check the result + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len, &outlen, tag->len ); + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len + tag->len ); + TEST_ASSERT( memcmp( encrypt_buf, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( encrypt_buf + cipher->len, + tag->x, tag->len ) == 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + } + + /**************************************************************** + * * + * Part 2: deprecated API * + * * + ****************************************************************/ + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * Prepare pointers for decryption + */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + { + /* PSA requires that the tag immediately follows the ciphertext. + * Fortunately, we already have that from testing the new API. */ + tmp_cipher = cipher_plus_tag; + tmp_tag = tmp_cipher + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + tmp_cipher = cipher->x; + tmp_tag = tag->x; + } + + /* + * Authenticate and decrypt, and check result + */ + + ASSERT_ALLOC( decrypt_buf, cipher->len ); + outlen = 0; + ret = mbedtls_cipher_auth_decrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + tmp_cipher, cipher->len, decrypt_buf, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + /* NIST_KW with legacy API */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else if( strcmp( result, "FAIL" ) == 0 ) + { + /* unauthentic message */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, cipher->len ) ); + } + else + { + /* authentic message: is the plaintext correct? */ + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + mbedtls_free( cipher_plus_tag ); + cipher_plus_tag = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* prepare buffers for encryption */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa ) + { + ASSERT_ALLOC( cipher_plus_tag, cipher->len + tag->len ); + tmp_cipher = cipher_plus_tag; + tmp_tag = cipher_plus_tag + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + ASSERT_ALLOC( encrypt_buf, cipher->len ); + ASSERT_ALLOC( tag_buf, tag->len ); + tmp_cipher = encrypt_buf; + tmp_tag = tag_buf; + } + + /* + * Encrypt and check the result + */ + outlen = 0; + ret = mbedtls_cipher_auth_encrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + clear->x, clear->len, tmp_cipher, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len ); + if( cipher->len != 0 ) + TEST_ASSERT( memcmp( tmp_cipher, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( tmp_tag, tag->x, tag->len ) == 0 ); + } + } + +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +exit: + + mbedtls_cipher_free( &ctx ); + mbedtls_free( decrypt_buf ); + mbedtls_free( encrypt_buf ); + mbedtls_free( cipher_plus_tag ); +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + mbedtls_free( tag_buf ); +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_auth_crypt_tv_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_auth_crypt_tv( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, (char *) params[11], &data12, *( (int *) params[14] ) ); +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ +void test_test_vec_ecb( int cipher_id, int operation, data_t * key, + data_t * input, data_t * result, int finish_result + ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, input->x, + mbedtls_cipher_get_block_size( &ctx ), + output, &outlen ) ); + TEST_ASSERT( outlen == mbedtls_cipher_get_block_size( &ctx ) ); + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, + mbedtls_cipher_get_block_size( &ctx ) ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_test_vec_ecb_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_test_vec_ecb( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_test_vec_crypt( int cipher_id, int operation, data_t *key, + data_t *iv, data_t *input, data_t *result, + int finish_result, int use_psa ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; +#else + if( use_psa == 1 ) + { + PSA_ASSERT( psa_crypto_init( ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( &ctx, + mbedtls_cipher_info_from_type( cipher_id ), 0 ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + if( MBEDTLS_MODE_CBC == ctx.cipher_info->mode ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, MBEDTLS_PADDING_NONE ) ); + + TEST_ASSERT( finish_result == mbedtls_cipher_crypt( &ctx, iv->len ? iv->x : NULL, + iv->len, input->x, input->len, + output, &outlen ) ); + TEST_ASSERT( result->len == outlen ); + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, outlen ) ); + +exit: + mbedtls_cipher_free( &ctx ); +#if defined(MBEDTLS_USE_PSA_CRYPTO) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_test_vec_crypt_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_test_vec_crypt( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_set_padding( int cipher_id, int pad_mode, int ret ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + mbedtls_cipher_init( &ctx ); + + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + TEST_ASSERT( ret == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_set_padding_wrapper( void ** params ) +{ + + test_set_padding( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_check_padding( int pad_mode, data_t * input, int ret, int dlen_check + ) +{ + mbedtls_cipher_info_t cipher_info; + mbedtls_cipher_context_t ctx; + size_t dlen; + + /* build a fake context just for getting access to get_padding */ + mbedtls_cipher_init( &ctx ); + cipher_info.mode = MBEDTLS_MODE_CBC; + ctx.cipher_info = &cipher_info; + + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + + + TEST_ASSERT( ret == ctx.get_padding( input->x, input->len, &dlen ) ); + if( 0 == ret ) + TEST_ASSERT( dlen == (size_t) dlen_check ); +exit: + ; +} + +void test_check_padding_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_check_padding( *( (int *) params[0] ), &data1, *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#endif /* MBEDTLS_CIPHER_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_CIPHER_C) + test_mbedtls_cipher_list_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_CIPHER_C) + test_cipher_invalid_param_unconditional_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_cipher_invalid_param_conditional_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_AES_C) + test_cipher_special_behaviours_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_fail_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_CIPHER_C) + test_dec_empty_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_multipart_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_CIPHER_C) + test_decrypt_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_AUTH_CRYPT) + test_auth_crypt_tv_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_CIPHER_C) + test_test_vec_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_test_vec_crypt_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_set_padding_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_check_padding_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_cipher.misc.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_cipher.misc.datax b/third_party/mbedtls/test/test_suite_cipher.misc.datax new file mode 100644 index 000000000..89bba6da8 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.misc.datax @@ -0,0 +1,6 @@ +CIPHER - Conditional invalid parameter checks +2 + +CIPHER - Unconditional invalid parameter checks +1 + diff --git a/third_party/mbedtls/test/test_suite_cipher.nist_kw.c b/third_party/mbedtls/test/test_suite_cipher.nist_kw.c new file mode 100644 index 000000000..1a6f37294 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.nist_kw.c @@ -0,0 +1,2062 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_cipher.nist_kw.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_cipher.function + * Test suite data : suites/test_suite_cipher.nist_kw.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_CIPHER_C) +#include "third_party/mbedtls/cipher.h" + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +#endif + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +#endif + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) +#define MBEDTLS_CIPHER_AUTH_CRYPT +#endif + +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +/* Helper for resetting key/direction + * + * The documentation doesn't explicitly say whether calling + * mbedtls_cipher_setkey() twice is allowed or not. This currently works with + * the default software implementation, but only by accident. It isn't + * guaranteed to work with new ciphers or with alternative implementations of + * individual ciphers, and it doesn't work with the PSA wrappers. So don't do + * it, and instead start with a fresh context. + */ +static int cipher_reset_key( mbedtls_cipher_context_t *ctx, int cipher_id, + int use_psa, size_t tag_len, const data_t *key, int direction ) +{ + mbedtls_cipher_free( ctx ); + mbedtls_cipher_init( ctx ); + +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; + (void) tag_len; +#else + if( use_psa == 1 ) + { + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( ctx, + mbedtls_cipher_info_from_type( cipher_id ), + tag_len ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + TEST_ASSERT( 0 == mbedtls_cipher_setup( ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + } + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( ctx, key->x, 8 * key->len, + direction ) ); + return( 1 ); + +exit: + return( 0 ); +} + +/* + * Check if a buffer is all-0 bytes: + * return 1 if it is, + * 0 if it isn't. + */ +int buffer_is_all_zero( const uint8_t *buf, size_t size ) +{ + for( size_t i = 0; i < size; i++ ) + if( buf[i] != 0 ) + return 0; + return 1; +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ + +void test_mbedtls_cipher_list( ) +{ + const int *cipher_type; + + for( cipher_type = mbedtls_cipher_list(); *cipher_type != 0; cipher_type++ ) + TEST_ASSERT( mbedtls_cipher_info_from_type( *cipher_type ) != NULL ); +exit: + ; +} + +void test_mbedtls_cipher_list_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_cipher_list( ); +} +void test_cipher_invalid_param_unconditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + mbedtls_cipher_context_t invalid_ctx; + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + mbedtls_cipher_init( &valid_ctx ); + mbedtls_cipher_setup( &valid_ctx, valid_info ); + mbedtls_cipher_init( &invalid_ctx ); + + /* mbedtls_cipher_setup() */ + TEST_ASSERT( mbedtls_cipher_setup( &valid_ctx, NULL ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_get_block_size() */ + TEST_ASSERT( mbedtls_cipher_get_block_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_ASSERT( mbedtls_cipher_get_cipher_mode( &invalid_ctx ) == + MBEDTLS_MODE_NONE ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_ASSERT( mbedtls_cipher_get_iv_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_type() */ + TEST_ASSERT( + mbedtls_cipher_get_type( &invalid_ctx ) == + MBEDTLS_CIPHER_NONE); + + /* mbedtls_cipher_get_name() */ + TEST_ASSERT( mbedtls_cipher_get_name( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_ASSERT( mbedtls_cipher_get_key_bitlen( &invalid_ctx ) == + MBEDTLS_KEY_LENGTH_NONE ); + + /* mbedtls_cipher_get_operation() */ + TEST_ASSERT( mbedtls_cipher_get_operation( &invalid_ctx ) == + MBEDTLS_OPERATION_NONE ); + + /* mbedtls_cipher_setkey() */ + TEST_ASSERT( + mbedtls_cipher_setkey( &invalid_ctx, + valid_buffer, + valid_bitlen, + valid_operation ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_set_iv() */ + TEST_ASSERT( + mbedtls_cipher_set_iv( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_reset() */ + TEST_ASSERT( mbedtls_cipher_reset( &invalid_ctx ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_ASSERT( + mbedtls_cipher_update_ad( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_ASSERT( mbedtls_cipher_set_padding_mode( &invalid_ctx, valid_mode ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif + + /* mbedtls_cipher_update() */ + TEST_ASSERT( + mbedtls_cipher_update( &invalid_ctx, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_finish() */ + TEST_ASSERT( + mbedtls_cipher_finish( &invalid_ctx, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_ASSERT( + mbedtls_cipher_write_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_check_tag() */ + TEST_ASSERT( + mbedtls_cipher_check_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +exit: + mbedtls_cipher_free( &invalid_ctx ); + mbedtls_cipher_free( &valid_ctx ); +} + +void test_cipher_invalid_param_unconditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_unconditional( ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_cipher_invalid_param_conditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_operation_t invalid_operation = 100; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + /* mbedtls_cipher_init() */ + TEST_VALID_PARAM( mbedtls_cipher_init( &valid_ctx ) ); + TEST_INVALID_PARAM( mbedtls_cipher_init( NULL ) ); + + /* mbedtls_cipher_setup() */ + TEST_VALID_PARAM( mbedtls_cipher_setup( &valid_ctx, valid_info ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setup( NULL, valid_info ) ); + + /* mbedtls_cipher_get_block_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_block_size( NULL ) ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_MODE_NONE, + mbedtls_cipher_get_cipher_mode( NULL ) ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_iv_size( NULL ) ); + + /* mbedtls_cipher_get_type() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_CIPHER_NONE, + mbedtls_cipher_get_type( NULL ) ); + + /* mbedtls_cipher_get_name() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_name( NULL ) ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_KEY_LENGTH_NONE, + mbedtls_cipher_get_key_bitlen( NULL ) ); + + /* mbedtls_cipher_get_operation() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_OPERATION_NONE, + mbedtls_cipher_get_operation( NULL ) ); + + /* mbedtls_cipher_setkey() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( NULL, + valid_buffer, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + NULL, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + valid_buffer, + valid_bitlen, + invalid_operation ) ); + + /* mbedtls_cipher_set_iv() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_reset() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_reset( NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_padding_mode( NULL, valid_mode ) ); +#endif + + /* mbedtls_cipher_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( NULL, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + NULL, valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, + NULL ) ); + + /* mbedtls_cipher_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( NULL, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + valid_buffer, + NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_check_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + + /* mbedtls_cipher_crypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) + /* mbedtls_cipher_auth_encrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); + + /* mbedtls_cipher_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); +#endif /* defined(MBEDTLS_CIPHER_MODE_AEAD) */ + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) + /* mbedtls_cipher_auth_encrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); + + /* mbedtls_cipher_auth_decrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); +#endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */ + + /* mbedtls_cipher_free() */ + TEST_VALID_PARAM( mbedtls_cipher_free( NULL ) ); +exit: + TEST_VALID_PARAM( mbedtls_cipher_free( &valid_ctx ) ); +} + +void test_cipher_invalid_param_conditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_conditional( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#if defined(MBEDTLS_AES_C) +void test_cipher_special_behaviours( ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + unsigned char input[32]; + unsigned char output[32]; +#if defined (MBEDTLS_CIPHER_MODE_CBC) + unsigned char iv[32]; +#endif + size_t olen = 0; + + mbedtls_cipher_init( &ctx ); + memset( input, 0, sizeof( input ) ); + memset( output, 0, sizeof( output ) ); +#if defined(MBEDTLS_CIPHER_MODE_CBC) + memset( iv, 0, sizeof( iv ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_CBC ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* IV too big */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, MBEDTLS_MAX_IV_LENGTH + 1 ) + == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + + /* IV too small */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, 0 ) + == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_cipher_free( &ctx ); + mbedtls_cipher_init( &ctx ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_ECB ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* Update ECB with partial block */ + TEST_ASSERT( mbedtls_cipher_update( &ctx, input, 1, output, &olen ) + == MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_cipher_special_behaviours_wrapper( void ** params ) +{ + (void)params; + + test_cipher_special_behaviours( ); +} +#endif /* MBEDTLS_AES_C */ +void test_enc_dec_buf( int cipher_id, char * cipher_string, int key_len, + int length_val, int pad_mode ) +{ + size_t length = length_val, outlen, total_len, i, block_size; + unsigned char key[64]; + unsigned char iv[16]; + unsigned char ad[13]; + unsigned char tag[16]; + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + + /* + * Prepare contexts + */ + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( key, 0x2a, sizeof( key ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( mbedtls_cipher_info_from_string( cipher_string ) == cipher_info ); + + /* Initialise enc and dec contexts */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + /* + * Do a few encode/decode cycles + */ + for( i = 0; i < 3; i++ ) + { + memset( iv , 0x00 + i, sizeof( iv ) ); + memset( ad, 0x10 + i, sizeof( ad ) ); + memset( inbuf, 0x20 + i, sizeof( inbuf ) ); + + memset( encbuf, 0, sizeof( encbuf ) ); + memset( decbuf, 0, sizeof( decbuf ) ); + memset( tag, 0, sizeof( tag ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, sizeof( iv ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, sizeof( iv ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, ad, sizeof( ad ) - i ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, ad, sizeof( ad ) - i ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, length, encbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_write_tag( &ctx_enc, tag, sizeof( tag ) ) ); +#endif + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len > length && + total_len <= length + block_size ) ); + + /* decode the previously encoded string */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, total_len, decbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_check_tag( &ctx_dec, tag, sizeof( tag ) ) ); +#endif + + /* check result */ + TEST_ASSERT( total_len == length ); + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + } + + /* + * Done + */ +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_wrapper( void ** params ) +{ + + test_enc_dec_buf( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_enc_fail( int cipher_id, int pad_mode, int key_len, int length_val, + int ret ) +{ + size_t length = length_val; + unsigned char key[32]; + unsigned char iv[16]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + + /* Initialise context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key, key_len, MBEDTLS_ENCRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, NULL, 0 ) ); +#endif + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, inbuf, length, encbuf, &outlen ) ); + TEST_ASSERT( ret == mbedtls_cipher_finish( &ctx, encbuf + outlen, &outlen ) ); + + /* done */ +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_enc_fail_wrapper( void ** params ) +{ + + test_enc_fail( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_dec_empty_buf( int cipher, + int expected_update_ret, + int expected_finish_ret ) +{ + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise context */ + cipher_info = mbedtls_cipher_info_from_type( cipher ); + TEST_ASSERT( NULL != cipher_info); + TEST_ASSERT( sizeof(key) * 8 >= cipher_info->key_bitlen ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, + key, cipher_info->key_bitlen, + MBEDTLS_DECRYPT ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); +#endif + + /* decode 0-byte string */ + TEST_ASSERT( expected_update_ret == + mbedtls_cipher_update( &ctx_dec, encbuf, 0, decbuf, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + if ( expected_finish_ret == 0 && + ( cipher_info->mode == MBEDTLS_MODE_CBC || + cipher_info->mode == MBEDTLS_MODE_ECB ) ) + { + /* Non-CBC and non-ECB ciphers are OK with decrypting empty buffers and + * return success, not MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED, when + * decrypting an empty buffer. + * On the other hand, CBC and ECB ciphers need a full block of input. + */ + expected_finish_ret = MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED; + } + + TEST_ASSERT( expected_finish_ret == mbedtls_cipher_finish( + &ctx_dec, decbuf + outlen, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + +exit: + mbedtls_cipher_free( &ctx_dec ); +} + +void test_dec_empty_buf_wrapper( void ** params ) +{ + + test_dec_empty_buf( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +void test_enc_dec_buf_multipart( int cipher_id, int key_len, int first_length_val, + int second_length_val, int pad_mode, + int first_encrypt_output_len, int second_encrypt_output_len, + int first_decrypt_output_len, int second_decrypt_output_len ) +{ + size_t first_length = first_length_val; + size_t second_length = second_length_val; + size_t length = first_length + second_length; + size_t block_size; + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + size_t totaloutlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise enc and dec contexts */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, NULL, 0 ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, first_length, encbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_encrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf + first_length, second_length, encbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_encrypt_output_len == outlen ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen > length && + totaloutlen <= length + block_size ) ); + + /* decode the previously encoded string */ + second_length = totaloutlen - first_length; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, first_length, decbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_decrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf + first_length, second_length, decbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_decrypt_output_len == outlen ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length ); + + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_multipart_wrapper( void ** params ) +{ + + test_enc_dec_buf_multipart( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ) ); +} +void test_decrypt_test_vec( int cipher_id, int pad_mode, data_t * key, + data_t * iv, data_t * cipher, + data_t * clear, data_t * ad, data_t * tag, + int finish_result, int tag_result ) +{ + unsigned char output[265]; + mbedtls_cipher_context_t ctx; + size_t outlen, total_len; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + +#if !defined(MBEDTLS_GCM_C) && !defined(MBEDTLS_CHACHAPOLY_C) + ((void) ad); + ((void) tag); +#endif + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, MBEDTLS_DECRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( pad_mode != -1 ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv->x, iv->len ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, ad->x, ad->len ) ); +#endif + + /* decode buffer and check tag->x */ + total_len = 0; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, cipher->x, cipher->len, output, &outlen ) ); + total_len += outlen; + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + total_len += outlen; +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( tag_result == mbedtls_cipher_check_tag( &ctx, tag->x, tag->len ) ); +#endif + + /* check plaintext only if everything went fine */ + if( 0 == finish_result && 0 == tag_result ) + { + TEST_ASSERT( total_len == clear->len ); + TEST_ASSERT( 0 == memcmp( output, clear->x, clear->len ) ); + } + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_decrypt_test_vec_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_decrypt_test_vec( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, &data10, &data12, *( (int *) params[14] ), *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +void test_auth_crypt_tv( int cipher_id, data_t * key, data_t * iv, + data_t * ad, data_t * cipher, data_t * tag, + char * result, data_t * clear, int use_psa ) +{ + /* + * Take an AEAD ciphertext + tag and perform a pair + * of AEAD decryption and AEAD encryption. Check that + * this results in the expected plaintext, and that + * decryption and encryption are inverse to one another. + * + * Do that twice: + * - once with legacy functions auth_decrypt/auth_encrypt + * - once with new functions auth_decrypt_ext/auth_encrypt_ext + * This allows testing both without duplicating test cases. + */ + + int ret; + int using_nist_kw, using_nist_kw_padding; + + mbedtls_cipher_context_t ctx; + size_t outlen; + + unsigned char *cipher_plus_tag = NULL; + size_t cipher_plus_tag_len; + unsigned char *decrypt_buf = NULL; + size_t decrypt_buf_len = 0; + unsigned char *encrypt_buf = NULL; + size_t encrypt_buf_len = 0; + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + unsigned char *tmp_tag = NULL; + unsigned char *tmp_cipher = NULL; + unsigned char *tag_buf = NULL; +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + + /* Null pointers are documented as valid for inputs of length 0. + * The test framework passes non-null pointers, so set them to NULL. + * key, cipher and tag can't be empty. */ + if( iv->len == 0 ) + iv->x = NULL; + if( ad->len == 0 ) + ad->x = NULL; + if( clear->len == 0 ) + clear->x = NULL; + + mbedtls_cipher_init( &ctx ); + + /* Initialize PSA Crypto */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_ASSERT( psa_crypto_init( ) ); +#else + (void) use_psa; +#endif + + /* + * Are we using NIST_KW? with padding? + */ + using_nist_kw_padding = cipher_id == MBEDTLS_CIPHER_AES_128_KWP || + cipher_id == MBEDTLS_CIPHER_AES_192_KWP || + cipher_id == MBEDTLS_CIPHER_AES_256_KWP; + using_nist_kw = cipher_id == MBEDTLS_CIPHER_AES_128_KW || + cipher_id == MBEDTLS_CIPHER_AES_192_KW || + cipher_id == MBEDTLS_CIPHER_AES_256_KW || + using_nist_kw_padding; + + /**************************************************************** + * * + * Part 1: non-deprecated API * + * * + ****************************************************************/ + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * prepare buffer for decryption + * (we need the tag appended to the ciphertext) + */ + cipher_plus_tag_len = cipher->len + tag->len; + ASSERT_ALLOC( cipher_plus_tag, cipher_plus_tag_len ); + memcpy( cipher_plus_tag, cipher->x, cipher->len ); + memcpy( cipher_plus_tag + cipher->len, tag->x, tag->len ); + + /* + * Compute length of output buffer according to the documentation + */ + if( using_nist_kw ) + decrypt_buf_len = cipher_plus_tag_len - 8; + else + decrypt_buf_len = cipher_plus_tag_len - tag->len; + + + /* + * Try decrypting to a buffer that's 1B too small + */ + if( decrypt_buf_len != 0 ) + { + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + } + + /* + * Authenticate and decrypt, and check result + */ + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len, &outlen, tag->len ); + + if( strcmp( result, "FAIL" ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, decrypt_buf_len ) ); + } + else + { + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + /* Free this, but keep cipher_plus_tag for deprecated function with PSA */ + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* + * Compute size of output buffer according to documentation + */ + if( using_nist_kw ) + { + encrypt_buf_len = clear->len + 8; + if( using_nist_kw_padding && encrypt_buf_len % 8 != 0 ) + encrypt_buf_len += 8 - encrypt_buf_len % 8; + } + else + { + encrypt_buf_len = clear->len + tag->len; + } + + /* + * Try encrypting with an output buffer that's 1B too small + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret != 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + + /* + * Encrypt and check the result + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len, &outlen, tag->len ); + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len + tag->len ); + TEST_ASSERT( memcmp( encrypt_buf, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( encrypt_buf + cipher->len, + tag->x, tag->len ) == 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + } + + /**************************************************************** + * * + * Part 2: deprecated API * + * * + ****************************************************************/ + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * Prepare pointers for decryption + */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + { + /* PSA requires that the tag immediately follows the ciphertext. + * Fortunately, we already have that from testing the new API. */ + tmp_cipher = cipher_plus_tag; + tmp_tag = tmp_cipher + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + tmp_cipher = cipher->x; + tmp_tag = tag->x; + } + + /* + * Authenticate and decrypt, and check result + */ + + ASSERT_ALLOC( decrypt_buf, cipher->len ); + outlen = 0; + ret = mbedtls_cipher_auth_decrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + tmp_cipher, cipher->len, decrypt_buf, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + /* NIST_KW with legacy API */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else if( strcmp( result, "FAIL" ) == 0 ) + { + /* unauthentic message */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, cipher->len ) ); + } + else + { + /* authentic message: is the plaintext correct? */ + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + mbedtls_free( cipher_plus_tag ); + cipher_plus_tag = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* prepare buffers for encryption */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa ) + { + ASSERT_ALLOC( cipher_plus_tag, cipher->len + tag->len ); + tmp_cipher = cipher_plus_tag; + tmp_tag = cipher_plus_tag + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + ASSERT_ALLOC( encrypt_buf, cipher->len ); + ASSERT_ALLOC( tag_buf, tag->len ); + tmp_cipher = encrypt_buf; + tmp_tag = tag_buf; + } + + /* + * Encrypt and check the result + */ + outlen = 0; + ret = mbedtls_cipher_auth_encrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + clear->x, clear->len, tmp_cipher, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len ); + if( cipher->len != 0 ) + TEST_ASSERT( memcmp( tmp_cipher, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( tmp_tag, tag->x, tag->len ) == 0 ); + } + } + +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +exit: + + mbedtls_cipher_free( &ctx ); + mbedtls_free( decrypt_buf ); + mbedtls_free( encrypt_buf ); + mbedtls_free( cipher_plus_tag ); +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + mbedtls_free( tag_buf ); +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_auth_crypt_tv_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_auth_crypt_tv( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, (char *) params[11], &data12, *( (int *) params[14] ) ); +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ +void test_test_vec_ecb( int cipher_id, int operation, data_t * key, + data_t * input, data_t * result, int finish_result + ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, input->x, + mbedtls_cipher_get_block_size( &ctx ), + output, &outlen ) ); + TEST_ASSERT( outlen == mbedtls_cipher_get_block_size( &ctx ) ); + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, + mbedtls_cipher_get_block_size( &ctx ) ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_test_vec_ecb_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_test_vec_ecb( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_test_vec_crypt( int cipher_id, int operation, data_t *key, + data_t *iv, data_t *input, data_t *result, + int finish_result, int use_psa ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; +#else + if( use_psa == 1 ) + { + PSA_ASSERT( psa_crypto_init( ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( &ctx, + mbedtls_cipher_info_from_type( cipher_id ), 0 ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + if( MBEDTLS_MODE_CBC == ctx.cipher_info->mode ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, MBEDTLS_PADDING_NONE ) ); + + TEST_ASSERT( finish_result == mbedtls_cipher_crypt( &ctx, iv->len ? iv->x : NULL, + iv->len, input->x, input->len, + output, &outlen ) ); + TEST_ASSERT( result->len == outlen ); + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, outlen ) ); + +exit: + mbedtls_cipher_free( &ctx ); +#if defined(MBEDTLS_USE_PSA_CRYPTO) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_test_vec_crypt_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_test_vec_crypt( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_set_padding( int cipher_id, int pad_mode, int ret ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + mbedtls_cipher_init( &ctx ); + + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + TEST_ASSERT( ret == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_set_padding_wrapper( void ** params ) +{ + + test_set_padding( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_check_padding( int pad_mode, data_t * input, int ret, int dlen_check + ) +{ + mbedtls_cipher_info_t cipher_info; + mbedtls_cipher_context_t ctx; + size_t dlen; + + /* build a fake context just for getting access to get_padding */ + mbedtls_cipher_init( &ctx ); + cipher_info.mode = MBEDTLS_MODE_CBC; + ctx.cipher_info = &cipher_info; + + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + + + TEST_ASSERT( ret == ctx.get_padding( input->x, input->len, &dlen ) ); + if( 0 == ret ) + TEST_ASSERT( dlen == (size_t) dlen_check ); +exit: + ; +} + +void test_check_padding_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_check_padding( *( (int *) params[0] ), &data1, *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#endif /* MBEDTLS_CIPHER_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_AES_128_KW; + } + break; + case 1: + { + *out_value = MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; + } + break; + case 2: + { + *out_value = MBEDTLS_CIPHER_AES_128_KWP; + } + break; + case 3: + { + *out_value = MBEDTLS_CIPHER_AES_192_KW; + } + break; + case 4: + { + *out_value = MBEDTLS_CIPHER_AES_256_KW; + } + break; + case 5: + { + *out_value = MBEDTLS_CIPHER_AES_192_KWP; + } + break; + case 6: + { + *out_value = MBEDTLS_CIPHER_AES_256_KWP; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_NIST_KW_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_CIPHER_C) + test_mbedtls_cipher_list_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_CIPHER_C) + test_cipher_invalid_param_unconditional_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_cipher_invalid_param_conditional_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_AES_C) + test_cipher_special_behaviours_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_fail_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_CIPHER_C) + test_dec_empty_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_multipart_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_CIPHER_C) + test_decrypt_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_AUTH_CRYPT) + test_auth_crypt_tv_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_CIPHER_C) + test_test_vec_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_test_vec_crypt_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_set_padding_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_check_padding_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_cipher.nist_kw.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_cipher.nist_kw.datax b/third_party/mbedtls/test/test_suite_cipher.nist_kw.datax new file mode 100644 index 000000000..648eaf0f7 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.nist_kw.datax @@ -0,0 +1,280 @@ +KW AES-128 wrap - Decrypt empty buffer +depends_on:0:1 +6:exp:0:exp:1:exp:1 + +KWP AES-128 wrap - Decrypt empty buffer +depends_on:0:1 +6:exp:2:exp:1:exp:1 + +KW AES-128 wrap rfc 3394 +depends_on:0:1 +9:exp:0:hex:"000102030405060708090A0B0C0D0E0F":hex:"":hex:"":hex:"1FA68B0A8112B447AEF34BD8FB5A7B829D3E862371D2CFE5":hex:"":char*:"":hex:"00112233445566778899AABBCCDDEEFF":int:0 + +KW AES-192 wrap rfc 3394 +depends_on:0:1 +9:exp:3:hex:"000102030405060708090A0B0C0D0E0F1011121314151617":hex:"":hex:"":hex:"96778B25AE6CA435F92B5B97C050AED2468AB8A17AD84E5D":hex:"":char*:"":hex:"00112233445566778899AABBCCDDEEFF":int:0 + +KW AES-256 wrap rfc 3394 [#1] +depends_on:0:1 +9:exp:4:hex:"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F":hex:"":hex:"":hex:"A8F9BC1612C68B3FF6E6F4FBE30E71E4769C8B80A32CB8958CD5D17D6B254DA1":hex:"":char*:"":hex:"00112233445566778899AABBCCDDEEFF0001020304050607":int:0 + +KW AES-256 wrap rfc 3394 [#2] +depends_on:0:1 +9:exp:4:hex:"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F":hex:"":hex:"":hex:"64E8C3F9CE0F5BA263E9777905818A2A93C8191E7D6E8AE7":hex:"":char*:"":hex:"00112233445566778899AABBCCDDEEFF":int:0 + +KWP AES-192 RFC 5649 #1 +depends_on:0:1 +9:exp:5:hex:"5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8":hex:"":hex:"":hex:"138bdeaa9b8fa7fc61f97742e72248ee5ae6ae5360d1ae6a5f54f373fa543b6a":hex:"":char*:"":hex:"c37b7e6492584340bed12207808941155068f738":int:0 + +KWP AES-192 RFC 5649 #2 +depends_on:0:1 +9:exp:5:hex:"5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8":hex:"":hex:"":hex:"afbeb0f07dfbf5419200f2ccb50bb24f":hex:"":char*:"":hex:"466f7250617369":int:0 + +KWP AES-128 1 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"A9D2D4394815D53F2799ABD7E51D2C8B":hex:"":char*:"":hex:"00":int:0 + +KWP AES-128 2 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"36D0CA197F638BF478D022C7E543B699":hex:"":char*:"":hex:"0001":int:0 + +KWP AES-128 3 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"DAB4EE2853E1C44C5E553E644143902B":hex:"":char*:"":hex:"000102":int:0 + +KWP AES-128 4 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"446C037F831092B147C372616357BF7D":hex:"":char*:"":hex:"00010203":int:0 + +KWP AES-128 5 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"9ED0AF6457B82E0DDADBD2240A303D74":hex:"":char*:"":hex:"0001020304":int:0 + +KWP AES-128 6 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"D863A8CE0DF301A564945259B4F74E7D":hex:"":char*:"":hex:"000102030405":int:0 + +KWP AES-128 7 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"E8387E5456242B0C30BE77FC1FF0C1FD":hex:"":char*:"":hex:"00010203040506":int:0 + +KWP AES-128 8 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"01FF4C430CDF3D2D815B0972B23D7C35":hex:"":char*:"":hex:"0001020304050607":int:0 + +KWP AES-128 9 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"C06E2163E0CC845B348E012AC9413DEEE40C8C3B030A3681":hex:"":char*:"":hex:"000102030405060708":int:0 + +KWP AES-128 10 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"3DFD2F643C38B07E121C77C2CA0EF82DA742B0989B6D848E":hex:"":char*:"":hex:"00010203040506070809":int:0 + +KWP AES-128 11 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"AFAEF390634E21E754FD09F55A4EDD918A1D23ECA9B76F2B":hex:"":char*:"":hex:"000102030405060708090A":int:0 + +KWP AES-128 12 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"A42D14C830F64F0A73570BFA7FDF8DDDD5E3AD3065A09FB0":hex:"":char*:"":hex:"000102030405060708090A0B":int:0 + +KWP AES-128 13 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"83F23527625FC643942279D090C1B61D10FC978B54D778CD":hex:"":char*:"":hex:"000102030405060708090A0B0C":int:0 + +KWP AES-128 14 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"E073C30E0DAC595F9FD28A0CB9E53945B26D1E1DE4E66D04":hex:"":char*:"":hex:"000102030405060708090A0B0C0D":int:0 + +KWP AES-128 15 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"64E3C2F7E0F7CB297C6B8C4CAF665F9F0A3F7082D2522635":hex:"":char*:"":hex:"000102030405060708090A0B0C0D0E":int:0 + +KWP AES-128 16 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"8F5982C7D265A0A40FC81D2326429A0A65BCD1368F0E16CB":hex:"":char*:"":hex:"000102030405060708090A0B0C0D0E0F":int:0 + +KWP AES-128 17 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"E29EC6664BCBA00986DD9845F8C4B26472BFDDF98522E537B5D23D5D2A8D02C5":hex:"":char*:"":hex:"000102030405060708090A0B0C0D0E0F10":int:0 + +KWP AES-128 18 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"9451ABCA0B9756A183F8C9ADA834E1AD2400B693C33624E59F26C35AC1586E2B":hex:"":char*:"":hex:"000102030405060708090A0B0C0D0E0F1011":int:0 + +KWP AES-128 19 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"F03CB49A65FD3EF8FC83C52F029A3D73667D5B84DB429C38436619ED8320D12E":hex:"":char*:"":hex:"000102030405060708090A0B0C0D0E0F101112":int:0 + +KWP AES-128 20 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"759524B855037849812D62979A18F24D3E672C2663DEA9204BA5A639FB7DB292":hex:"":char*:"":hex:"000102030405060708090A0B0C0D0E0F10111213":int:0 + +KWP AES-128 21 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"F352B8228FBFA0769C2E3858D7451FA603E9B751CFE780ED0F93C850C7870259":hex:"":char*:"":hex:"000102030405060708090A0B0C0D0E0F1011121314":int:0 + +KWP AES-128 22 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"3491F4C8D916A1BC3824D1478EC746BE8C837415017ED52A1ABC30FB14DDE825":hex:"":char*:"":hex:"000102030405060708090A0B0C0D0E0F101112131415":int:0 + +KWP AES-128 23 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"0E6E35C5B9D706C2FF2C4C6CFCF254849879D6C1CB577E0A73BB12CBC7AC9740":hex:"":char*:"":hex:"000102030405060708090A0B0C0D0E0F10111213141516":int:0 + +KWP AES-128 24 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"E7DB580663B113B57489E1107F2DCAF7CF80629E7CE1839E1ED044ECD0299E79":hex:"":char*:"":hex:"000102030405060708090A0B0C0D0E0F1011121314151617":int:0 + +KWP AES-128 25 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"883500DB91747BAD8C5E122ED2338F3BCB6B43064F5DA9D1303E165815EC8CC4C5BFD31AEAE1B6A3":hex:"":char*:"":hex:"000102030405060708090A0B0C0D0E0F101112131415161718":int:0 + +KWP AES-128 26 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"24099AAAD4F19BF614ECC35DA9E3646F73AAFAA9C46975D4B56D72A332AF7EC4850B8294D94B7E1A":hex:"":char*:"":hex:"000102030405060708090A0B0C0D0E0F10111213141516171819":int:0 + +KWP AES-128 27 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"C24F8CCE3425AC9638145A0DAC28B59368583FF3A7AAD85FBE1AEAAB5D23C0B128A1F9BC575B785A":hex:"":char*:"":hex:"000102030405060708090A0B0C0D0E0F101112131415161718191A":int:0 + +KWP AES-128 28 byte input +depends_on:0:1 +9:exp:2:hex:"00000000000000000000000000000000":hex:"":hex:"":hex:"EFD0BC7612331A98F2D68F86E606717197BF57E35114234C675D40E9462ACF00DE7860C0F38677F7":hex:"":char*:"":hex:"000102030405060708090A0B0C0D0E0F101112131415161718191A1B":int:0 + +KW AES-128 wrap CAVS 17.4 COUNT 0 PLEN 16 [#1] +depends_on:0:1 +9:exp:0:hex:"7575da3a93607cc2bfd8cec7aadfd9a6":hex:"":hex:"":hex:"031f6bd7e61e643df68594816f64caa3f56fabea2548f5fb":hex:"":char*:"":hex:"42136d3c384a3eeac95a066fd28fed3f":int:0 + +KW AES-128 wrap CAVS 17.4 COUNT 0 PLEN 16 [#2] +depends_on:0:1 +9:exp:0:hex:"7575da3a93607cc2bfd8cec7aadfd9a7":hex:"":hex:"":hex:"031f6bd7e61e643df68594816f64cbb3f56fabea2548f5fb":hex:"":char*:"FAIL":hex:"":int:0 + +KW AES-128 wrap CAVS 17.4 COUNT 0 PLEN 32 +depends_on:0:1 +9:exp:0:hex:"e5d058e7f1c22c016c4e1cc9b26b9f8f":hex:"":hex:"":hex:"60b9f8ac797c56e01e9b5f84d65816a980777869f67991a0e6dc19b8cd75c9b54db4a38456bbd6f3":hex:"":char*:"":hex:"7f604e9b8d39d3c91e193fe6f196c1e3da6211a7c9a33b8873b64b138d1803e4":int:0 + +KW AES-128 wrap CAVS 17.4 COUNT 0 PLEN 24 +depends_on:0:1 +9:exp:0:hex:"67ae4270bcdd31e8326b7e7f94c80276":hex:"":hex:"":hex:"96cec0e3272a21faa550a857957aa38ce3c1cf06f0dd9f5b5c5c422cef6c69a1":hex:"":char*:"":hex:"57e748b62fbc37ba25e904ee973d01b136cf7c1d0c8c5c87":int:0 + +KW AES-192 wrap CAVS 17.4 COUNT 0 PLEN 16 +depends_on:0:1 +9:exp:3:hex:"a6a3f6d509811859238fc569b5664605f7a73c475a691a8f":hex:"":hex:"":hex:"57d7a4b4e85ffdcb7788b9b666cb63303dd2c5d0f11b1bbb":hex:"":char*:"":hex:"8484e414b091f8a9f72cfd13087ddec1":int:0 + +KW AES-192 wrap CAVS 17.4 COUNT 0 PLEN 32 +depends_on:0:1 +9:exp:3:hex:"3686e50dd602f84024570f545bbf618362bef80d45472436":hex:"":hex:"":hex:"c7d5a1a5dfeb7327acbb94767d74cc2afc622ffd01f854d7d3e2b6f75ca7e8f441a0c0bad3d26ee2":hex:"":char*:"":hex:"d780d69b45483b682d311ccaaadcfa3a1cecf1f05dbe2ebc71e6d3fa979f3de8":int:0 + +KW AES-192 wrap CAVS 17.4 COUNT 0 PLEN 24 +depends_on:0:1 +9:exp:3:hex:"0a833412e7aa1384ff26866dc9c551bf60413c17e847d317":hex:"":hex:"":hex:"3a7efd629305bf1d61360ed6ff8ec7d059e8af3e5104c29729adb55d1bb94f7e":hex:"":char*:"":hex:"f734760cc0fa3bbfb271277d4f29a48ddecda733d610fa42":int:0 + +KW AES-256 wrap CAVS 17.4 COUNT 0 PLEN 16 +depends_on:0:1 +9:exp:4:hex:"f59782f1dceb0544a8da06b34969b9212b55ce6dcbdd0975a33f4b3f88b538da":hex:"":hex:"":hex:"2e63946ea3c090902fa1558375fdb2907742ac74e39403fc":hex:"":char*:"":hex:"73d33060b5f9f2eb5785c0703ddfa704":int:0 + +KW AES-256 wrap CAVS 17.4 COUNT 0 PLEN 32 +depends_on:0:1 +9:exp:4:hex:"8b54e6bc3d20e823d96343dc776c0db10c51708ceecc9a38a14beb4ca5b8b221":hex:"":hex:"":hex:"b13eeb7619fab818f1519266516ceb82abc0e699a7153cf26edcb8aeb879f4c011da906841fc5956":hex:"":char*:"":hex:"d6192635c620dee3054e0963396b260af5c6f02695a5205f159541b4bc584bac":int:0 + +KW AES-256 wrap CAVS 17.4 COUNT 0 PLEN 24 +depends_on:0:1 +9:exp:4:hex:"112ad41b4856c7254a9848d30fdd78335b039a48a8962c4d1cb78eabd5dad788":hex:"":hex:"":hex:"ba8a259a471b787dd5d540ec25d43d87200fdadc6d1f05d916584fa9f6cbf512":hex:"":char*:"":hex:"1b20bf1990b065d798e1b32264ad50a8747492ba09a04dd1":int:0 + +KWP AES-128 wrap CAVS 17.4 COUNT 0 PLEN 1 +depends_on:0:1 +9:exp:2:hex:"6decf10a1caf8e3b80c7a4be8c9c84e8":hex:"":hex:"":hex:"01a7d657fc4a5b216f261cca4d052c2b":hex:"":char*:"":hex:"49":int:0 + +KWP AES-128 wrap CAVS 17.4 COUNT 0 PLEN 8 +depends_on:0:1 +9:exp:2:hex:"a8e06da625a65b25cf5030826830b661":hex:"":hex:"":hex:"b6f967616dd8d772e9fea295a456dba7":hex:"":char*:"":hex:"43acff293120dd5d":int:0 + +KWP AES-128 wrap CAVS 17.4 COUNT 0 PLEN 9 +depends_on:0:1 +9:exp:2:hex:"7865e20f3c21659ab4690b629cdf3cc4":hex:"":hex:"":hex:"41eca956d4aa047eb5cf4efe659661e74db6f8c564e23500":hex:"":char*:"":hex:"bd6843d420378dc896":int:0 + +KWP AES-128 wrap CAVS 17.4 COUNT 0 PLEN 31 +depends_on:0:1 +9:exp:2:hex:"be96dc195ec034d616486ed70e97fe83":hex:"":hex:"":hex:"974769b3a7b4d5d32985f87fddf9990631e5610fbfb278387b58b1f48e05c77d2fb7575c5169eb0e":hex:"":char*:"":hex:"85b5437b6335ebba7635903a4493d12a77d9357a9e0dbc013456d85f1d3201":int:0 + +KWP AES-192 wrap CAVS 17.4 COUNT 0 PLEN 1 +depends_on:0:1 +9:exp:5:hex:"9ca11078baebc1597a68ce2fe3fc79a201626575252b8860":hex:"":hex:"":hex:"866bc0ae30e290bb20a0dab31a6e7165":hex:"":char*:"":hex:"76":int:0 + +KWP AES-192 wrap CAVS 17.4 COUNT 0 PLEN 8 +depends_on:0:1 +9:exp:5:hex:"c5029804d28341ca267c9e73afc5f963b14bb604708b43f2":hex:"":hex:"":hex:"15b98046b2a3a49b9c0831c476fc34fb":hex:"":char*:"":hex:"e6eb18a3e969ab5c":int:0 + +KWP AES-192 wrap CAVS 17.4 COUNT 0 PLEN 9 +depends_on:0:1 +9:exp:5:hex:"9464f1af6aabad076661328bcfd15777da16a288a2660009":hex:"":hex:"":hex:"d9b257b400d808a0b0386af3be9154fc7f2fb2d7edc06201":hex:"":char*:"":hex:"431527c3a644c106bb":int:0 + +KWP AES-192 wrap CAVS 17.4 COUNT 0 PLEN 31 +depends_on:0:1 +9:exp:5:hex:"a354ccd6dd97cf40bed840f8137e0cf2e91c00e592104765":hex:"":hex:"":hex:"f018e7c8d6dcdbd20606502b2667439d9049a9a2d5c960af8e9251466d6ff8923fb82432b299f1a4":hex:"":char*:"":hex:"22ccc034c5345550f5bc0114f2951f0fe439ec3ecd8ac1fea8889dd12bfb8e":int:0 + +KWP AES-256 wrap CAVS 17.4 COUNT 0 PLEN 1 +depends_on:0:1 +9:exp:6:hex:"95da2700ca6fd9a52554ee2a8df1386f5b94a1a60ed8a4aef60a8d61ab5f225a":hex:"":hex:"":hex:"06ba7ae6f3248cfdcf267507fa001bc4":hex:"":char*:"":hex:"d1":int:0 + +KWP AES-256 wrap CAVS 17.4 COUNT 0 PLEN 8 +depends_on:0:1 +9:exp:6:hex:"3517f0efa7f0c4d74f91af83ece5e7503bcc5ab82907a6e4b7ed34d87b69ab1d":hex:"":hex:"":hex:"0b06a9b635d50cda9d4210cb3a71f990":hex:"":char*:"":hex:"897e0456b289ad31":int:0 + +KWP AES-256 wrap CAVS 17.4 COUNT 0 PLEN 9 +depends_on:0:1 +9:exp:6:hex:"70da43aac823c6dd37d1109f5b18feb4503c973288989745e2cc1cc21d9570c6":hex:"":hex:"":hex:"d67b5b2ad15c645450e23b5e7b6d682f8ae20e716d470db7":hex:"":char*:"":hex:"edf17d966ed896aee3":int:0 + +KWP AES-256 wrap CAVS 17.4 COUNT 0 PLEN 31 +depends_on:0:1 +9:exp:6:hex:"e9bb7f44c7baafbf392ab912589a2f8db53268106eafb74689bb1833136e6113":hex:"":hex:"":hex:"15b9f06fbc765e5e3d55d6b824616f21921d2a6918ee7bf1406b524274e170b4a78333ca5ee92af5":hex:"":char*:"":hex:"ffe952604834bff899e63658f34246815c91597eb40a21729e0a8a959b61f2":int:0 + +KW AES-128 wrap CAVS 17.4 FAIL COUNT 1 CLEN 48 +depends_on:0:1 +9:exp:0:hex:"5d4899ee66beff1bda1fc717a1ad4c50":hex:"":hex:"":hex:"bb7fd0bce778bd775e4e88d904d26a7134364c53a6c493a0":hex:"":char*:"FAIL":hex:"":int:0 + +KW AES-128 wrap CAVS 17.4 FAIL COUNT 1 CLEN 80 +depends_on:0:1 +9:exp:0:hex:"84bc6ce7ee4fd9db512536669d0686da":hex:"":hex:"":hex:"c383db930ffd02c0073ac2cc79ec289e6866bdcc6a135a3b776aa42f14ee04f9cca06ed6c0b22901":hex:"":char*:"FAIL":hex:"":int:0 + +KW AES-128 wrap CAVS 17.4 FAIL COUNT 3 CLEN 64 +depends_on:0:1 +9:exp:0:hex:"266b009e911bb55f9aa0661539a6fdd5":hex:"":hex:"":hex:"db9c94e7236ec56982d7ddeb9427c24580bc1fb96db98ab19340e03670045b7a":hex:"":char*:"FAIL":hex:"":int:0 + +KW AES-192 wrap CAVS 17.4 FAIL COUNT 3 CLEN 48 +depends_on:0:1 +9:exp:3:hex:"9200a0f688d86c0b6bfd9abeff66341684a373fe3f9a3057":hex:"":hex:"":hex:"5c685c8596e374710fe327bafc45cd09190215fdcc03d010":hex:"":char*:"FAIL":hex:"":int:0 + +KW AES-192 wrap CAVS 17.4 FAIL COUNT 1 CLEN 80 +depends_on:0:1 +9:exp:3:hex:"95c9e644559919cace6f93f545dbfe48b130808ed66d0964":hex:"":hex:"":hex:"7b8d1307e992221f6ffdcc7909d972d5f02e92187139cfd77f79345cb998bbdbabedb3ac00a6cdc4":hex:"":char*:"FAIL":hex:"":int:0 + +KW AES-192 wrap CAVS 17.4 FAIL COUNT 2 CLEN 64 +depends_on:0:1 +9:exp:3:hex:"e218e9643d5db01b412fcaefafe5eb237d03acfad0a3abaa":hex:"":hex:"":hex:"5eee8fbf6a8ab6ba371f4581982ec61839bf28c0eb913d1f417a284dccd72580":hex:"":char*:"FAIL":hex:"":int:0 + +KW AES-256 wrap CAVS 17.4 FAIL COUNT 4 CLEN 48 +depends_on:0:1 +9:exp:4:hex:"08c936b25b567a0aa679c29f201bf8b190327df0c2563e39cee061f149f4d91b":hex:"":hex:"":hex:"e227eb8ae9d239ccd8928adec39c28810ca9b3dc1f366444":hex:"":char*:"FAIL":hex:"":int:0 + +KW AES-256 wrap CAVS 17.4 FAIL COUNT 3 CLEN 80 +depends_on:0:1 +9:exp:4:hex:"605b22935f1eee56ba884bc7a869febc159ac306b66fb9767a7cc6ab7068dffa":hex:"":hex:"":hex:"6607f5a64c8f9fd96dc6f9f735b06a193762cdbacfc367e410926c1bfe6dd715490adbad5b9697a6":hex:"":char*:"FAIL":hex:"":int:0 + +KW AES-256 wrap CAVS 17.4 FAIL COUNT 3 CLEN 64 +depends_on:0:1 +9:exp:4:hex:"81c93da5baa5157bf700fd38d7d67662670778b690cfbca9fe11e06268b35605":hex:"":hex:"":hex:"875e1ca385586f83d1e23e44ca201006df04e1854e41b933fd607a7383ae1a39":hex:"":char*:"FAIL":hex:"":int:0 + +KWP AES-128 wrap CAVS 17.4 FAIL COUNT 1 CLEN 32 +depends_on:0:1 +9:exp:2:hex:"30be7ff51227f0eef786cb7be2482510":hex:"":hex:"":hex:"7f61a0a8b2fe7803f2947d233ec3a255":hex:"":char*:"FAIL":hex:"":int:0 + +KWP AES-192 wrap CAVS 17.4 FAIL COUNT 3 CLEN 32 +depends_on:0:1 +9:exp:5:hex:"21fb6600c1d34a74adee67612672593a86cf235421735350":hex:"":hex:"":hex:"56b45c49c3e379b18d9c38b6423db133":hex:"":char*:"FAIL":hex:"":int:0 + +KWP AES-256 wrap CAVS 17.4 FAIL COUNT 4 CLEN 32 +depends_on:0:1 +9:exp:6:hex:"c32cb3e1e41a4b9f4de79989957866f5dd48dba38c22a6ebb80e14c84bdd9534":hex:"":hex:"":hex:"c29b05c2619a58ecc1d239e7a34273cd":hex:"":char*:"FAIL":hex:"":int:0 + diff --git a/third_party/mbedtls/test/test_suite_cipher.null.c b/third_party/mbedtls/test/test_suite_cipher.null.c new file mode 100644 index 000000000..5e2a50d3c --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.null.c @@ -0,0 +1,2028 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_cipher.null.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_cipher.function + * Test suite data : suites/test_suite_cipher.null.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_CIPHER_C) +#include "third_party/mbedtls/cipher.h" + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +#endif + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +#endif + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) +#define MBEDTLS_CIPHER_AUTH_CRYPT +#endif + +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +/* Helper for resetting key/direction + * + * The documentation doesn't explicitly say whether calling + * mbedtls_cipher_setkey() twice is allowed or not. This currently works with + * the default software implementation, but only by accident. It isn't + * guaranteed to work with new ciphers or with alternative implementations of + * individual ciphers, and it doesn't work with the PSA wrappers. So don't do + * it, and instead start with a fresh context. + */ +static int cipher_reset_key( mbedtls_cipher_context_t *ctx, int cipher_id, + int use_psa, size_t tag_len, const data_t *key, int direction ) +{ + mbedtls_cipher_free( ctx ); + mbedtls_cipher_init( ctx ); + +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; + (void) tag_len; +#else + if( use_psa == 1 ) + { + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( ctx, + mbedtls_cipher_info_from_type( cipher_id ), + tag_len ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + TEST_ASSERT( 0 == mbedtls_cipher_setup( ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + } + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( ctx, key->x, 8 * key->len, + direction ) ); + return( 1 ); + +exit: + return( 0 ); +} + +/* + * Check if a buffer is all-0 bytes: + * return 1 if it is, + * 0 if it isn't. + */ +int buffer_is_all_zero( const uint8_t *buf, size_t size ) +{ + for( size_t i = 0; i < size; i++ ) + if( buf[i] != 0 ) + return 0; + return 1; +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ + +void test_mbedtls_cipher_list( ) +{ + const int *cipher_type; + + for( cipher_type = mbedtls_cipher_list(); *cipher_type != 0; cipher_type++ ) + TEST_ASSERT( mbedtls_cipher_info_from_type( *cipher_type ) != NULL ); +exit: + ; +} + +void test_mbedtls_cipher_list_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_cipher_list( ); +} +void test_cipher_invalid_param_unconditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + mbedtls_cipher_context_t invalid_ctx; + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + mbedtls_cipher_init( &valid_ctx ); + mbedtls_cipher_setup( &valid_ctx, valid_info ); + mbedtls_cipher_init( &invalid_ctx ); + + /* mbedtls_cipher_setup() */ + TEST_ASSERT( mbedtls_cipher_setup( &valid_ctx, NULL ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_get_block_size() */ + TEST_ASSERT( mbedtls_cipher_get_block_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_ASSERT( mbedtls_cipher_get_cipher_mode( &invalid_ctx ) == + MBEDTLS_MODE_NONE ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_ASSERT( mbedtls_cipher_get_iv_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_type() */ + TEST_ASSERT( + mbedtls_cipher_get_type( &invalid_ctx ) == + MBEDTLS_CIPHER_NONE); + + /* mbedtls_cipher_get_name() */ + TEST_ASSERT( mbedtls_cipher_get_name( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_ASSERT( mbedtls_cipher_get_key_bitlen( &invalid_ctx ) == + MBEDTLS_KEY_LENGTH_NONE ); + + /* mbedtls_cipher_get_operation() */ + TEST_ASSERT( mbedtls_cipher_get_operation( &invalid_ctx ) == + MBEDTLS_OPERATION_NONE ); + + /* mbedtls_cipher_setkey() */ + TEST_ASSERT( + mbedtls_cipher_setkey( &invalid_ctx, + valid_buffer, + valid_bitlen, + valid_operation ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_set_iv() */ + TEST_ASSERT( + mbedtls_cipher_set_iv( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_reset() */ + TEST_ASSERT( mbedtls_cipher_reset( &invalid_ctx ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_ASSERT( + mbedtls_cipher_update_ad( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_ASSERT( mbedtls_cipher_set_padding_mode( &invalid_ctx, valid_mode ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif + + /* mbedtls_cipher_update() */ + TEST_ASSERT( + mbedtls_cipher_update( &invalid_ctx, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_finish() */ + TEST_ASSERT( + mbedtls_cipher_finish( &invalid_ctx, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_ASSERT( + mbedtls_cipher_write_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_check_tag() */ + TEST_ASSERT( + mbedtls_cipher_check_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +exit: + mbedtls_cipher_free( &invalid_ctx ); + mbedtls_cipher_free( &valid_ctx ); +} + +void test_cipher_invalid_param_unconditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_unconditional( ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_cipher_invalid_param_conditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_operation_t invalid_operation = 100; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + /* mbedtls_cipher_init() */ + TEST_VALID_PARAM( mbedtls_cipher_init( &valid_ctx ) ); + TEST_INVALID_PARAM( mbedtls_cipher_init( NULL ) ); + + /* mbedtls_cipher_setup() */ + TEST_VALID_PARAM( mbedtls_cipher_setup( &valid_ctx, valid_info ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setup( NULL, valid_info ) ); + + /* mbedtls_cipher_get_block_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_block_size( NULL ) ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_MODE_NONE, + mbedtls_cipher_get_cipher_mode( NULL ) ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_iv_size( NULL ) ); + + /* mbedtls_cipher_get_type() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_CIPHER_NONE, + mbedtls_cipher_get_type( NULL ) ); + + /* mbedtls_cipher_get_name() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_name( NULL ) ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_KEY_LENGTH_NONE, + mbedtls_cipher_get_key_bitlen( NULL ) ); + + /* mbedtls_cipher_get_operation() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_OPERATION_NONE, + mbedtls_cipher_get_operation( NULL ) ); + + /* mbedtls_cipher_setkey() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( NULL, + valid_buffer, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + NULL, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + valid_buffer, + valid_bitlen, + invalid_operation ) ); + + /* mbedtls_cipher_set_iv() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_reset() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_reset( NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_padding_mode( NULL, valid_mode ) ); +#endif + + /* mbedtls_cipher_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( NULL, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + NULL, valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, + NULL ) ); + + /* mbedtls_cipher_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( NULL, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + valid_buffer, + NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_check_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + + /* mbedtls_cipher_crypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) + /* mbedtls_cipher_auth_encrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); + + /* mbedtls_cipher_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); +#endif /* defined(MBEDTLS_CIPHER_MODE_AEAD) */ + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) + /* mbedtls_cipher_auth_encrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); + + /* mbedtls_cipher_auth_decrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); +#endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */ + + /* mbedtls_cipher_free() */ + TEST_VALID_PARAM( mbedtls_cipher_free( NULL ) ); +exit: + TEST_VALID_PARAM( mbedtls_cipher_free( &valid_ctx ) ); +} + +void test_cipher_invalid_param_conditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_conditional( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#if defined(MBEDTLS_AES_C) +void test_cipher_special_behaviours( ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + unsigned char input[32]; + unsigned char output[32]; +#if defined (MBEDTLS_CIPHER_MODE_CBC) + unsigned char iv[32]; +#endif + size_t olen = 0; + + mbedtls_cipher_init( &ctx ); + memset( input, 0, sizeof( input ) ); + memset( output, 0, sizeof( output ) ); +#if defined(MBEDTLS_CIPHER_MODE_CBC) + memset( iv, 0, sizeof( iv ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_CBC ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* IV too big */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, MBEDTLS_MAX_IV_LENGTH + 1 ) + == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + + /* IV too small */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, 0 ) + == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_cipher_free( &ctx ); + mbedtls_cipher_init( &ctx ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_ECB ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* Update ECB with partial block */ + TEST_ASSERT( mbedtls_cipher_update( &ctx, input, 1, output, &olen ) + == MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_cipher_special_behaviours_wrapper( void ** params ) +{ + (void)params; + + test_cipher_special_behaviours( ); +} +#endif /* MBEDTLS_AES_C */ +void test_enc_dec_buf( int cipher_id, char * cipher_string, int key_len, + int length_val, int pad_mode ) +{ + size_t length = length_val, outlen, total_len, i, block_size; + unsigned char key[64]; + unsigned char iv[16]; + unsigned char ad[13]; + unsigned char tag[16]; + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + + /* + * Prepare contexts + */ + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( key, 0x2a, sizeof( key ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( mbedtls_cipher_info_from_string( cipher_string ) == cipher_info ); + + /* Initialise enc and dec contexts */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + /* + * Do a few encode/decode cycles + */ + for( i = 0; i < 3; i++ ) + { + memset( iv , 0x00 + i, sizeof( iv ) ); + memset( ad, 0x10 + i, sizeof( ad ) ); + memset( inbuf, 0x20 + i, sizeof( inbuf ) ); + + memset( encbuf, 0, sizeof( encbuf ) ); + memset( decbuf, 0, sizeof( decbuf ) ); + memset( tag, 0, sizeof( tag ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, sizeof( iv ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, sizeof( iv ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, ad, sizeof( ad ) - i ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, ad, sizeof( ad ) - i ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, length, encbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_write_tag( &ctx_enc, tag, sizeof( tag ) ) ); +#endif + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len > length && + total_len <= length + block_size ) ); + + /* decode the previously encoded string */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, total_len, decbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_check_tag( &ctx_dec, tag, sizeof( tag ) ) ); +#endif + + /* check result */ + TEST_ASSERT( total_len == length ); + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + } + + /* + * Done + */ +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_wrapper( void ** params ) +{ + + test_enc_dec_buf( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_enc_fail( int cipher_id, int pad_mode, int key_len, int length_val, + int ret ) +{ + size_t length = length_val; + unsigned char key[32]; + unsigned char iv[16]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + + /* Initialise context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key, key_len, MBEDTLS_ENCRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, NULL, 0 ) ); +#endif + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, inbuf, length, encbuf, &outlen ) ); + TEST_ASSERT( ret == mbedtls_cipher_finish( &ctx, encbuf + outlen, &outlen ) ); + + /* done */ +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_enc_fail_wrapper( void ** params ) +{ + + test_enc_fail( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_dec_empty_buf( int cipher, + int expected_update_ret, + int expected_finish_ret ) +{ + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise context */ + cipher_info = mbedtls_cipher_info_from_type( cipher ); + TEST_ASSERT( NULL != cipher_info); + TEST_ASSERT( sizeof(key) * 8 >= cipher_info->key_bitlen ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, + key, cipher_info->key_bitlen, + MBEDTLS_DECRYPT ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); +#endif + + /* decode 0-byte string */ + TEST_ASSERT( expected_update_ret == + mbedtls_cipher_update( &ctx_dec, encbuf, 0, decbuf, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + if ( expected_finish_ret == 0 && + ( cipher_info->mode == MBEDTLS_MODE_CBC || + cipher_info->mode == MBEDTLS_MODE_ECB ) ) + { + /* Non-CBC and non-ECB ciphers are OK with decrypting empty buffers and + * return success, not MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED, when + * decrypting an empty buffer. + * On the other hand, CBC and ECB ciphers need a full block of input. + */ + expected_finish_ret = MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED; + } + + TEST_ASSERT( expected_finish_ret == mbedtls_cipher_finish( + &ctx_dec, decbuf + outlen, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + +exit: + mbedtls_cipher_free( &ctx_dec ); +} + +void test_dec_empty_buf_wrapper( void ** params ) +{ + + test_dec_empty_buf( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +void test_enc_dec_buf_multipart( int cipher_id, int key_len, int first_length_val, + int second_length_val, int pad_mode, + int first_encrypt_output_len, int second_encrypt_output_len, + int first_decrypt_output_len, int second_decrypt_output_len ) +{ + size_t first_length = first_length_val; + size_t second_length = second_length_val; + size_t length = first_length + second_length; + size_t block_size; + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + size_t totaloutlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise enc and dec contexts */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, NULL, 0 ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, first_length, encbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_encrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf + first_length, second_length, encbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_encrypt_output_len == outlen ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen > length && + totaloutlen <= length + block_size ) ); + + /* decode the previously encoded string */ + second_length = totaloutlen - first_length; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, first_length, decbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_decrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf + first_length, second_length, decbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_decrypt_output_len == outlen ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length ); + + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_multipart_wrapper( void ** params ) +{ + + test_enc_dec_buf_multipart( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ) ); +} +void test_decrypt_test_vec( int cipher_id, int pad_mode, data_t * key, + data_t * iv, data_t * cipher, + data_t * clear, data_t * ad, data_t * tag, + int finish_result, int tag_result ) +{ + unsigned char output[265]; + mbedtls_cipher_context_t ctx; + size_t outlen, total_len; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + +#if !defined(MBEDTLS_GCM_C) && !defined(MBEDTLS_CHACHAPOLY_C) + ((void) ad); + ((void) tag); +#endif + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, MBEDTLS_DECRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( pad_mode != -1 ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv->x, iv->len ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, ad->x, ad->len ) ); +#endif + + /* decode buffer and check tag->x */ + total_len = 0; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, cipher->x, cipher->len, output, &outlen ) ); + total_len += outlen; + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + total_len += outlen; +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( tag_result == mbedtls_cipher_check_tag( &ctx, tag->x, tag->len ) ); +#endif + + /* check plaintext only if everything went fine */ + if( 0 == finish_result && 0 == tag_result ) + { + TEST_ASSERT( total_len == clear->len ); + TEST_ASSERT( 0 == memcmp( output, clear->x, clear->len ) ); + } + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_decrypt_test_vec_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_decrypt_test_vec( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, &data10, &data12, *( (int *) params[14] ), *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +void test_auth_crypt_tv( int cipher_id, data_t * key, data_t * iv, + data_t * ad, data_t * cipher, data_t * tag, + char * result, data_t * clear, int use_psa ) +{ + /* + * Take an AEAD ciphertext + tag and perform a pair + * of AEAD decryption and AEAD encryption. Check that + * this results in the expected plaintext, and that + * decryption and encryption are inverse to one another. + * + * Do that twice: + * - once with legacy functions auth_decrypt/auth_encrypt + * - once with new functions auth_decrypt_ext/auth_encrypt_ext + * This allows testing both without duplicating test cases. + */ + + int ret; + int using_nist_kw, using_nist_kw_padding; + + mbedtls_cipher_context_t ctx; + size_t outlen; + + unsigned char *cipher_plus_tag = NULL; + size_t cipher_plus_tag_len; + unsigned char *decrypt_buf = NULL; + size_t decrypt_buf_len = 0; + unsigned char *encrypt_buf = NULL; + size_t encrypt_buf_len = 0; + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + unsigned char *tmp_tag = NULL; + unsigned char *tmp_cipher = NULL; + unsigned char *tag_buf = NULL; +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + + /* Null pointers are documented as valid for inputs of length 0. + * The test framework passes non-null pointers, so set them to NULL. + * key, cipher and tag can't be empty. */ + if( iv->len == 0 ) + iv->x = NULL; + if( ad->len == 0 ) + ad->x = NULL; + if( clear->len == 0 ) + clear->x = NULL; + + mbedtls_cipher_init( &ctx ); + + /* Initialize PSA Crypto */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_ASSERT( psa_crypto_init( ) ); +#else + (void) use_psa; +#endif + + /* + * Are we using NIST_KW? with padding? + */ + using_nist_kw_padding = cipher_id == MBEDTLS_CIPHER_AES_128_KWP || + cipher_id == MBEDTLS_CIPHER_AES_192_KWP || + cipher_id == MBEDTLS_CIPHER_AES_256_KWP; + using_nist_kw = cipher_id == MBEDTLS_CIPHER_AES_128_KW || + cipher_id == MBEDTLS_CIPHER_AES_192_KW || + cipher_id == MBEDTLS_CIPHER_AES_256_KW || + using_nist_kw_padding; + + /**************************************************************** + * * + * Part 1: non-deprecated API * + * * + ****************************************************************/ + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * prepare buffer for decryption + * (we need the tag appended to the ciphertext) + */ + cipher_plus_tag_len = cipher->len + tag->len; + ASSERT_ALLOC( cipher_plus_tag, cipher_plus_tag_len ); + memcpy( cipher_plus_tag, cipher->x, cipher->len ); + memcpy( cipher_plus_tag + cipher->len, tag->x, tag->len ); + + /* + * Compute length of output buffer according to the documentation + */ + if( using_nist_kw ) + decrypt_buf_len = cipher_plus_tag_len - 8; + else + decrypt_buf_len = cipher_plus_tag_len - tag->len; + + + /* + * Try decrypting to a buffer that's 1B too small + */ + if( decrypt_buf_len != 0 ) + { + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + } + + /* + * Authenticate and decrypt, and check result + */ + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len, &outlen, tag->len ); + + if( strcmp( result, "FAIL" ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, decrypt_buf_len ) ); + } + else + { + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + /* Free this, but keep cipher_plus_tag for deprecated function with PSA */ + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* + * Compute size of output buffer according to documentation + */ + if( using_nist_kw ) + { + encrypt_buf_len = clear->len + 8; + if( using_nist_kw_padding && encrypt_buf_len % 8 != 0 ) + encrypt_buf_len += 8 - encrypt_buf_len % 8; + } + else + { + encrypt_buf_len = clear->len + tag->len; + } + + /* + * Try encrypting with an output buffer that's 1B too small + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret != 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + + /* + * Encrypt and check the result + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len, &outlen, tag->len ); + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len + tag->len ); + TEST_ASSERT( memcmp( encrypt_buf, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( encrypt_buf + cipher->len, + tag->x, tag->len ) == 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + } + + /**************************************************************** + * * + * Part 2: deprecated API * + * * + ****************************************************************/ + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * Prepare pointers for decryption + */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + { + /* PSA requires that the tag immediately follows the ciphertext. + * Fortunately, we already have that from testing the new API. */ + tmp_cipher = cipher_plus_tag; + tmp_tag = tmp_cipher + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + tmp_cipher = cipher->x; + tmp_tag = tag->x; + } + + /* + * Authenticate and decrypt, and check result + */ + + ASSERT_ALLOC( decrypt_buf, cipher->len ); + outlen = 0; + ret = mbedtls_cipher_auth_decrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + tmp_cipher, cipher->len, decrypt_buf, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + /* NIST_KW with legacy API */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else if( strcmp( result, "FAIL" ) == 0 ) + { + /* unauthentic message */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, cipher->len ) ); + } + else + { + /* authentic message: is the plaintext correct? */ + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + mbedtls_free( cipher_plus_tag ); + cipher_plus_tag = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* prepare buffers for encryption */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa ) + { + ASSERT_ALLOC( cipher_plus_tag, cipher->len + tag->len ); + tmp_cipher = cipher_plus_tag; + tmp_tag = cipher_plus_tag + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + ASSERT_ALLOC( encrypt_buf, cipher->len ); + ASSERT_ALLOC( tag_buf, tag->len ); + tmp_cipher = encrypt_buf; + tmp_tag = tag_buf; + } + + /* + * Encrypt and check the result + */ + outlen = 0; + ret = mbedtls_cipher_auth_encrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + clear->x, clear->len, tmp_cipher, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len ); + if( cipher->len != 0 ) + TEST_ASSERT( memcmp( tmp_cipher, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( tmp_tag, tag->x, tag->len ) == 0 ); + } + } + +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +exit: + + mbedtls_cipher_free( &ctx ); + mbedtls_free( decrypt_buf ); + mbedtls_free( encrypt_buf ); + mbedtls_free( cipher_plus_tag ); +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + mbedtls_free( tag_buf ); +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_auth_crypt_tv_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_auth_crypt_tv( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, (char *) params[11], &data12, *( (int *) params[14] ) ); +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ +void test_test_vec_ecb( int cipher_id, int operation, data_t * key, + data_t * input, data_t * result, int finish_result + ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, input->x, + mbedtls_cipher_get_block_size( &ctx ), + output, &outlen ) ); + TEST_ASSERT( outlen == mbedtls_cipher_get_block_size( &ctx ) ); + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, + mbedtls_cipher_get_block_size( &ctx ) ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_test_vec_ecb_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_test_vec_ecb( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_test_vec_crypt( int cipher_id, int operation, data_t *key, + data_t *iv, data_t *input, data_t *result, + int finish_result, int use_psa ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; +#else + if( use_psa == 1 ) + { + PSA_ASSERT( psa_crypto_init( ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( &ctx, + mbedtls_cipher_info_from_type( cipher_id ), 0 ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + if( MBEDTLS_MODE_CBC == ctx.cipher_info->mode ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, MBEDTLS_PADDING_NONE ) ); + + TEST_ASSERT( finish_result == mbedtls_cipher_crypt( &ctx, iv->len ? iv->x : NULL, + iv->len, input->x, input->len, + output, &outlen ) ); + TEST_ASSERT( result->len == outlen ); + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, outlen ) ); + +exit: + mbedtls_cipher_free( &ctx ); +#if defined(MBEDTLS_USE_PSA_CRYPTO) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_test_vec_crypt_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_test_vec_crypt( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_set_padding( int cipher_id, int pad_mode, int ret ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + mbedtls_cipher_init( &ctx ); + + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + TEST_ASSERT( ret == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_set_padding_wrapper( void ** params ) +{ + + test_set_padding( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_check_padding( int pad_mode, data_t * input, int ret, int dlen_check + ) +{ + mbedtls_cipher_info_t cipher_info; + mbedtls_cipher_context_t ctx; + size_t dlen; + + /* build a fake context just for getting access to get_padding */ + mbedtls_cipher_init( &ctx ); + cipher_info.mode = MBEDTLS_MODE_CBC; + ctx.cipher_info = &cipher_info; + + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + + + TEST_ASSERT( ret == ctx.get_padding( input->x, input->len, &dlen ) ); + if( 0 == ret ) + TEST_ASSERT( dlen == (size_t) dlen_check ); +exit: + ; +} + +void test_check_padding_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_check_padding( *( (int *) params[0] ), &data1, *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#endif /* MBEDTLS_CIPHER_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_NULL; + } + break; + case 1: + { + *out_value = -1; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { +#if defined(MBEDTLS_CIPHER_NULL_CIPHER) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_CIPHER_C) + test_mbedtls_cipher_list_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_CIPHER_C) + test_cipher_invalid_param_unconditional_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_cipher_invalid_param_conditional_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_AES_C) + test_cipher_special_behaviours_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_fail_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_CIPHER_C) + test_dec_empty_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_multipart_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_CIPHER_C) + test_decrypt_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_AUTH_CRYPT) + test_auth_crypt_tv_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_CIPHER_C) + test_test_vec_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_test_vec_crypt_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_set_padding_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_check_padding_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_cipher.null.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_cipher.null.datax b/third_party/mbedtls/test/test_suite_cipher.null.datax new file mode 100644 index 000000000..2204c373d --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.null.datax @@ -0,0 +1,96 @@ +NULL Encrypt and decrypt 0 bytes +depends_on:0 +4:exp:0:char*:"NULL":int:0:int:0:exp:1 + +NULL Encrypt and decrypt 1 bytes +depends_on:0 +4:exp:0:char*:"NULL":int:0:int:1:exp:1 + +NULL Encrypt and decrypt 2 bytes +depends_on:0 +4:exp:0:char*:"NULL":int:0:int:2:exp:1 + +NULL Encrypt and decrypt 7 bytes +depends_on:0 +4:exp:0:char*:"NULL":int:0:int:7:exp:1 + +NULL Encrypt and decrypt 8 bytes +depends_on:0 +4:exp:0:char*:"NULL":int:0:int:8:exp:1 + +NULL Encrypt and decrypt 9 bytes +depends_on:0 +4:exp:0:char*:"NULL":int:0:int:9:exp:1 + +NULL Encrypt and decrypt 15 bytes +depends_on:0 +4:exp:0:char*:"NULL":int:0:int:15:exp:1 + +NULL Encrypt and decrypt 16 bytes +depends_on:0 +4:exp:0:char*:"NULL":int:0:int:16:exp:1 + +NULL Encrypt and decrypt 31 bytes +depends_on:0 +4:exp:0:char*:"NULL":int:0:int:31:exp:1 + +NULL Encrypt and decrypt 32 bytes +depends_on:0 +4:exp:0:char*:"NULL":int:0:int:32:exp:1 + +NULL Encrypt and decrypt 33 bytes +depends_on:0 +4:exp:0:char*:"NULL":int:0:int:33:exp:1 + +NULL Encrypt and decrypt 47 bytes +depends_on:0 +4:exp:0:char*:"NULL":int:0:int:47:exp:1 + +NULL Encrypt and decrypt 48 bytes +depends_on:0 +4:exp:0:char*:"NULL":int:0:int:48:exp:1 + +NULL Encrypt and decrypt 49 bytes +depends_on:0 +4:exp:0:char*:"NULL":int:0:int:49:exp:1 + +NULL Encrypt and decrypt 1 bytes in multiple parts 1 +depends_on:0 +7:exp:0:int:0:int:1:int:0:exp:1:int:1:int:0:int:1:int:0 + +NULL Encrypt and decrypt 1 bytes in multiple parts 2 +depends_on:0 +7:exp:0:int:0:int:0:int:1:exp:1:int:0:int:1:int:0:int:1 + +NULL Encrypt and decrypt 16 bytes in multiple parts 1 +depends_on:0 +7:exp:0:int:0:int:16:int:0:exp:1:int:16:int:0:int:16:int:0 + +NULL Encrypt and decrypt 16 bytes in multiple parts 2 +depends_on:0 +7:exp:0:int:0:int:0:int:16:exp:1:int:0:int:16:int:0:int:16 + +NULL Encrypt and decrypt 16 bytes in multiple parts 3 +depends_on:0 +7:exp:0:int:0:int:1:int:15:exp:1:int:1:int:15:int:1:int:15 + +NULL Encrypt and decrypt 16 bytes in multiple parts 4 +depends_on:0 +7:exp:0:int:0:int:15:int:1:exp:1:int:15:int:1:int:15:int:1 + +NULL Encrypt and decrypt 22 bytes in multiple parts 1 [#1] +depends_on:0 +7:exp:0:int:0:int:15:int:7:exp:1:int:15:int:7:int:15:int:7 + +NULL Encrypt and decrypt 22 bytes in multiple parts 1 [#2] +depends_on:0 +7:exp:0:int:0:int:16:int:6:exp:1:int:16:int:6:int:16:int:6 + +NULL Encrypt and decrypt 22 bytes in multiple parts 1 [#3] +depends_on:0 +7:exp:0:int:0:int:17:int:6:exp:1:int:17:int:6:int:17:int:6 + +NULL Encrypt and decrypt 32 bytes in multiple parts 1 +depends_on:0 +7:exp:0:int:0:int:16:int:16:exp:1:int:16:int:16:int:16:int:16 + diff --git a/third_party/mbedtls/test/test_suite_cipher.padding.c b/third_party/mbedtls/test/test_suite_cipher.padding.c new file mode 100644 index 000000000..9b1d7862a --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.padding.c @@ -0,0 +1,2200 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_cipher.padding.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_cipher.function + * Test suite data : suites/test_suite_cipher.padding.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_CIPHER_C) +#include "third_party/mbedtls/cipher.h" + +#if defined(MBEDTLS_AES_C) +#include "third_party/mbedtls/aes.h" +#endif + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +#endif + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) +#define MBEDTLS_CIPHER_AUTH_CRYPT +#endif + +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +/* Helper for resetting key/direction + * + * The documentation doesn't explicitly say whether calling + * mbedtls_cipher_setkey() twice is allowed or not. This currently works with + * the default software implementation, but only by accident. It isn't + * guaranteed to work with new ciphers or with alternative implementations of + * individual ciphers, and it doesn't work with the PSA wrappers. So don't do + * it, and instead start with a fresh context. + */ +static int cipher_reset_key( mbedtls_cipher_context_t *ctx, int cipher_id, + int use_psa, size_t tag_len, const data_t *key, int direction ) +{ + mbedtls_cipher_free( ctx ); + mbedtls_cipher_init( ctx ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( ctx, key->x, 8 * key->len, + direction ) ); + return( 1 ); +exit: + return( 0 ); +} + +/* + * Check if a buffer is all-0 bytes: + * return 1 if it is, + * 0 if it isn't. + */ +int buffer_is_all_zero( const uint8_t *buf, size_t size ) +{ + for( size_t i = 0; i < size; i++ ) + if( buf[i] != 0 ) + return 0; + return 1; +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ + +void test_mbedtls_cipher_list( ) +{ + const int *cipher_type; + + for( cipher_type = mbedtls_cipher_list(); *cipher_type != 0; cipher_type++ ) + TEST_ASSERT( mbedtls_cipher_info_from_type( *cipher_type ) != NULL ); +exit: + ; +} + +void test_mbedtls_cipher_list_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_cipher_list( ); +} +void test_cipher_invalid_param_unconditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + mbedtls_cipher_context_t invalid_ctx; + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + mbedtls_cipher_init( &valid_ctx ); + mbedtls_cipher_setup( &valid_ctx, valid_info ); + mbedtls_cipher_init( &invalid_ctx ); + + /* mbedtls_cipher_setup() */ + TEST_ASSERT( mbedtls_cipher_setup( &valid_ctx, NULL ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_get_block_size() */ + TEST_ASSERT( mbedtls_cipher_get_block_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_ASSERT( mbedtls_cipher_get_cipher_mode( &invalid_ctx ) == + MBEDTLS_MODE_NONE ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_ASSERT( mbedtls_cipher_get_iv_size( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_type() */ + TEST_ASSERT( + mbedtls_cipher_get_type( &invalid_ctx ) == + MBEDTLS_CIPHER_NONE); + + /* mbedtls_cipher_get_name() */ + TEST_ASSERT( mbedtls_cipher_get_name( &invalid_ctx ) == 0 ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_ASSERT( mbedtls_cipher_get_key_bitlen( &invalid_ctx ) == + MBEDTLS_KEY_LENGTH_NONE ); + + /* mbedtls_cipher_get_operation() */ + TEST_ASSERT( mbedtls_cipher_get_operation( &invalid_ctx ) == + MBEDTLS_OPERATION_NONE ); + + /* mbedtls_cipher_setkey() */ + TEST_ASSERT( + mbedtls_cipher_setkey( &invalid_ctx, + valid_buffer, + valid_bitlen, + valid_operation ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_set_iv() */ + TEST_ASSERT( + mbedtls_cipher_set_iv( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_reset() */ + TEST_ASSERT( mbedtls_cipher_reset( &invalid_ctx ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_ASSERT( + mbedtls_cipher_update_ad( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_ASSERT( mbedtls_cipher_set_padding_mode( &invalid_ctx, valid_mode ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif + + /* mbedtls_cipher_update() */ + TEST_ASSERT( + mbedtls_cipher_update( &invalid_ctx, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_finish() */ + TEST_ASSERT( + mbedtls_cipher_finish( &invalid_ctx, + valid_buffer, + &size_t_var ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_ASSERT( + mbedtls_cipher_write_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + /* mbedtls_cipher_check_tag() */ + TEST_ASSERT( + mbedtls_cipher_check_tag( &invalid_ctx, + valid_buffer, + valid_size ) == + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +exit: + mbedtls_cipher_free( &invalid_ctx ); + mbedtls_cipher_free( &valid_ctx ); +} + +void test_cipher_invalid_param_unconditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_unconditional( ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_cipher_invalid_param_conditional( ) +{ + mbedtls_cipher_context_t valid_ctx; + + mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT; + mbedtls_operation_t invalid_operation = 100; + mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; + int valid_size = sizeof(valid_buffer); + int valid_bitlen = valid_size * 8; + const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type( + *( mbedtls_cipher_list() ) ); + + size_t size_t_var; + + (void)valid_mode; /* In some configurations this is unused */ + + /* mbedtls_cipher_init() */ + TEST_VALID_PARAM( mbedtls_cipher_init( &valid_ctx ) ); + TEST_INVALID_PARAM( mbedtls_cipher_init( NULL ) ); + + /* mbedtls_cipher_setup() */ + TEST_VALID_PARAM( mbedtls_cipher_setup( &valid_ctx, valid_info ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setup( NULL, valid_info ) ); + + /* mbedtls_cipher_get_block_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_block_size( NULL ) ); + + /* mbedtls_cipher_get_cipher_mode() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_MODE_NONE, + mbedtls_cipher_get_cipher_mode( NULL ) ); + + /* mbedtls_cipher_get_iv_size() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_iv_size( NULL ) ); + + /* mbedtls_cipher_get_type() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_CIPHER_NONE, + mbedtls_cipher_get_type( NULL ) ); + + /* mbedtls_cipher_get_name() */ + TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_name( NULL ) ); + + /* mbedtls_cipher_get_key_bitlen() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_KEY_LENGTH_NONE, + mbedtls_cipher_get_key_bitlen( NULL ) ); + + /* mbedtls_cipher_get_operation() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_OPERATION_NONE, + mbedtls_cipher_get_operation( NULL ) ); + + /* mbedtls_cipher_setkey() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( NULL, + valid_buffer, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + NULL, + valid_bitlen, + valid_operation ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_setkey( &valid_ctx, + valid_buffer, + valid_bitlen, + invalid_operation ) ); + + /* mbedtls_cipher_set_iv() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_iv( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_reset() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_reset( NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_update_ad() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update_ad( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + /* mbedtls_cipher_set_padding_mode() */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_set_padding_mode( NULL, valid_mode ) ); +#endif + + /* mbedtls_cipher_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( NULL, + valid_buffer, + valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + NULL, valid_size, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_update( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, + NULL ) ); + + /* mbedtls_cipher_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( NULL, + valid_buffer, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + NULL, + &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_finish( &valid_ctx, + valid_buffer, + NULL ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + /* mbedtls_cipher_write_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_write_tag( &valid_ctx, + NULL, + valid_size ) ); + + /* mbedtls_cipher_check_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( NULL, + valid_buffer, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_check_tag( &valid_ctx, + NULL, + valid_size ) ); +#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */ + + /* mbedtls_cipher_crypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_crypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL ) ); + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) + /* mbedtls_cipher_auth_encrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); + + /* mbedtls_cipher_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, &size_t_var, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, NULL, + valid_buffer, valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, &size_t_var, + NULL, valid_size ) ); +#endif /* defined(MBEDTLS_CIPHER_MODE_AEAD) */ + +#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C) + /* mbedtls_cipher_auth_encrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_encrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); + + /* mbedtls_cipher_auth_decrypt_ext */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( NULL, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, + valid_buffer, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + NULL, valid_size, &size_t_var, + valid_size ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, + mbedtls_cipher_auth_decrypt_ext( &valid_ctx, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, + valid_buffer, valid_size, NULL, + valid_size ) ); +#endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */ + + /* mbedtls_cipher_free() */ + TEST_VALID_PARAM( mbedtls_cipher_free( NULL ) ); +exit: + TEST_VALID_PARAM( mbedtls_cipher_free( &valid_ctx ) ); +} + +void test_cipher_invalid_param_conditional_wrapper( void ** params ) +{ + (void)params; + + test_cipher_invalid_param_conditional( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#if defined(MBEDTLS_AES_C) +void test_cipher_special_behaviours( ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + unsigned char input[32]; + unsigned char output[32]; +#if defined (MBEDTLS_CIPHER_MODE_CBC) + unsigned char iv[32]; +#endif + size_t olen = 0; + + mbedtls_cipher_init( &ctx ); + memset( input, 0, sizeof( input ) ); + memset( output, 0, sizeof( output ) ); +#if defined(MBEDTLS_CIPHER_MODE_CBC) + memset( iv, 0, sizeof( iv ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_CBC ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* IV too big */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, MBEDTLS_MAX_IV_LENGTH + 1 ) + == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + + /* IV too small */ + TEST_ASSERT( mbedtls_cipher_set_iv( &ctx, iv, 0 ) + == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_cipher_free( &ctx ); + mbedtls_cipher_init( &ctx ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_ECB ); + TEST_ASSERT( NULL != cipher_info ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + /* Update ECB with partial block */ + TEST_ASSERT( mbedtls_cipher_update( &ctx, input, 1, output, &olen ) + == MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_cipher_special_behaviours_wrapper( void ** params ) +{ + (void)params; + + test_cipher_special_behaviours( ); +} +#endif /* MBEDTLS_AES_C */ +void test_enc_dec_buf( int cipher_id, char * cipher_string, int key_len, + int length_val, int pad_mode ) +{ + size_t length = length_val, outlen, total_len, i, block_size; + unsigned char key[64]; + unsigned char iv[16]; + unsigned char ad[13]; + unsigned char tag[16]; + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + + /* + * Prepare contexts + */ + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( key, 0x2a, sizeof( key ) ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( mbedtls_cipher_info_from_string( cipher_string ) == cipher_info ); + + /* Initialise enc and dec contexts */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + /* + * Do a few encode/decode cycles + */ + for( i = 0; i < 3; i++ ) + { + memset( iv , 0x00 + i, sizeof( iv ) ); + memset( ad, 0x10 + i, sizeof( ad ) ); + memset( inbuf, 0x20 + i, sizeof( inbuf ) ); + + memset( encbuf, 0, sizeof( encbuf ) ); + memset( decbuf, 0, sizeof( decbuf ) ); + memset( tag, 0, sizeof( tag ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, sizeof( iv ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, sizeof( iv ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, ad, sizeof( ad ) - i ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, ad, sizeof( ad ) - i ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, length, encbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_write_tag( &ctx_enc, tag, sizeof( tag ) ) ); +#endif + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len > length && + total_len <= length + block_size ) ); + + /* decode the previously encoded string */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, total_len, decbuf, &outlen ) ); + total_len = outlen; + + TEST_ASSERT( total_len == length || + ( total_len % block_size == 0 && + total_len < length && + total_len + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + outlen, &outlen ) ); + total_len += outlen; + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_check_tag( &ctx_dec, tag, sizeof( tag ) ) ); +#endif + + /* check result */ + TEST_ASSERT( total_len == length ); + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + } + + /* + * Done + */ +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_wrapper( void ** params ) +{ + + test_enc_dec_buf( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_enc_fail( int cipher_id, int pad_mode, int key_len, int length_val, + int ret ) +{ + size_t length = length_val; + unsigned char key[32]; + unsigned char iv[16]; + + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + + /* Check and get info structures */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + + /* Initialise context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key, key_len, MBEDTLS_ENCRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, NULL, 0 ) ); +#endif + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, inbuf, length, encbuf, &outlen ) ); + TEST_ASSERT( ret == mbedtls_cipher_finish( &ctx, encbuf + outlen, &outlen ) ); + + /* done */ +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_enc_fail_wrapper( void ** params ) +{ + + test_enc_fail( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_dec_empty_buf( int cipher, + int expected_update_ret, + int expected_finish_ret ) +{ + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise context */ + cipher_info = mbedtls_cipher_info_from_type( cipher ); + TEST_ASSERT( NULL != cipher_info); + TEST_ASSERT( sizeof(key) * 8 >= cipher_info->key_bitlen ); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, + key, cipher_info->key_bitlen, + MBEDTLS_DECRYPT ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); +#endif + + /* decode 0-byte string */ + TEST_ASSERT( expected_update_ret == + mbedtls_cipher_update( &ctx_dec, encbuf, 0, decbuf, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + if ( expected_finish_ret == 0 && + ( cipher_info->mode == MBEDTLS_MODE_CBC || + cipher_info->mode == MBEDTLS_MODE_ECB ) ) + { + /* Non-CBC and non-ECB ciphers are OK with decrypting empty buffers and + * return success, not MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED, when + * decrypting an empty buffer. + * On the other hand, CBC and ECB ciphers need a full block of input. + */ + expected_finish_ret = MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED; + } + + TEST_ASSERT( expected_finish_ret == mbedtls_cipher_finish( + &ctx_dec, decbuf + outlen, &outlen ) ); + TEST_ASSERT( 0 == outlen ); + +exit: + mbedtls_cipher_free( &ctx_dec ); +} + +void test_dec_empty_buf_wrapper( void ** params ) +{ + + test_dec_empty_buf( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +void test_enc_dec_buf_multipart( int cipher_id, int key_len, int first_length_val, + int second_length_val, int pad_mode, + int first_encrypt_output_len, int second_encrypt_output_len, + int first_decrypt_output_len, int second_decrypt_output_len ) +{ + size_t first_length = first_length_val; + size_t second_length = second_length_val; + size_t length = first_length + second_length; + size_t block_size; + unsigned char key[32]; + unsigned char iv[16]; + + mbedtls_cipher_context_t ctx_dec; + mbedtls_cipher_context_t ctx_enc; + const mbedtls_cipher_info_t *cipher_info; + + unsigned char inbuf[64]; + unsigned char encbuf[64]; + unsigned char decbuf[64]; + + size_t outlen = 0; + size_t totaloutlen = 0; + + memset( key, 0, 32 ); + memset( iv , 0, 16 ); + + mbedtls_cipher_init( &ctx_dec ); + mbedtls_cipher_init( &ctx_enc ); + + memset( inbuf, 5, 64 ); + memset( encbuf, 0, 64 ); + memset( decbuf, 0, 64 ); + + /* Initialise enc and dec contexts */ + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info); + + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_dec, cipher_info ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx_enc, cipher_info ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_dec, key, key_len, MBEDTLS_DECRYPT ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx_enc, key, key_len, MBEDTLS_ENCRYPT ) ); + +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( -1 != pad_mode ) + { + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_dec, pad_mode ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx_enc, pad_mode ) ); + } +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_dec, iv, 16 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx_enc, iv, 16 ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_dec ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx_enc ) ); + +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_dec, NULL, 0 ) ); + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx_enc, NULL, 0 ) ); +#endif + + block_size = mbedtls_cipher_get_block_size( &ctx_enc ); + TEST_ASSERT( block_size != 0 ); + + /* encode length number of bytes from inbuf */ + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf, first_length, encbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_encrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_enc, inbuf + first_length, second_length, encbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_encrypt_output_len == outlen ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size > length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_enc, encbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen > length && + totaloutlen <= length + block_size ) ); + + /* decode the previously encoded string */ + second_length = totaloutlen - first_length; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf, first_length, decbuf, &outlen ) ); + TEST_ASSERT( (size_t)first_decrypt_output_len == outlen ); + totaloutlen = outlen; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx_dec, encbuf + first_length, second_length, decbuf + totaloutlen, &outlen ) ); + TEST_ASSERT( (size_t)second_decrypt_output_len == outlen ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length || + ( totaloutlen % block_size == 0 && + totaloutlen < length && + totaloutlen + block_size >= length ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_finish( &ctx_dec, decbuf + totaloutlen, &outlen ) ); + totaloutlen += outlen; + + TEST_ASSERT( totaloutlen == length ); + + TEST_ASSERT( 0 == memcmp(inbuf, decbuf, length) ); + +exit: + mbedtls_cipher_free( &ctx_dec ); + mbedtls_cipher_free( &ctx_enc ); +} + +void test_enc_dec_buf_multipart_wrapper( void ** params ) +{ + + test_enc_dec_buf_multipart( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ) ); +} +void test_decrypt_test_vec( int cipher_id, int pad_mode, data_t * key, + data_t * iv, data_t * cipher, + data_t * clear, data_t * ad, data_t * tag, + int finish_result, int tag_result ) +{ + unsigned char output[265]; + mbedtls_cipher_context_t ctx; + size_t outlen, total_len; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + +#if !defined(MBEDTLS_GCM_C) && !defined(MBEDTLS_CHACHAPOLY_C) + ((void) ad); + ((void) tag); +#endif + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, MBEDTLS_DECRYPT ) ); +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + if( pad_mode != -1 ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); +#else + (void) pad_mode; +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ + TEST_ASSERT( 0 == mbedtls_cipher_set_iv( &ctx, iv->x, iv->len ) ); + TEST_ASSERT( 0 == mbedtls_cipher_reset( &ctx ) ); +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( 0 == mbedtls_cipher_update_ad( &ctx, ad->x, ad->len ) ); +#endif + + /* decode buffer and check tag->x */ + total_len = 0; + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, cipher->x, cipher->len, output, &outlen ) ); + total_len += outlen; + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + total_len += outlen; +#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) + TEST_ASSERT( tag_result == mbedtls_cipher_check_tag( &ctx, tag->x, tag->len ) ); +#endif + + /* check plaintext only if everything went fine */ + if( 0 == finish_result && 0 == tag_result ) + { + TEST_ASSERT( total_len == clear->len ); + TEST_ASSERT( 0 == memcmp( output, clear->x, clear->len ) ); + } + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_decrypt_test_vec_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_decrypt_test_vec( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, &data10, &data12, *( (int *) params[14] ), *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CIPHER_AUTH_CRYPT) +void test_auth_crypt_tv( int cipher_id, data_t * key, data_t * iv, + data_t * ad, data_t * cipher, data_t * tag, + char * result, data_t * clear, int use_psa ) +{ + /* + * Take an AEAD ciphertext + tag and perform a pair + * of AEAD decryption and AEAD encryption. Check that + * this results in the expected plaintext, and that + * decryption and encryption are inverse to one another. + * + * Do that twice: + * - once with legacy functions auth_decrypt/auth_encrypt + * - once with new functions auth_decrypt_ext/auth_encrypt_ext + * This allows testing both without duplicating test cases. + */ + + int ret; + int using_nist_kw, using_nist_kw_padding; + + mbedtls_cipher_context_t ctx; + size_t outlen; + + unsigned char *cipher_plus_tag = NULL; + size_t cipher_plus_tag_len; + unsigned char *decrypt_buf = NULL; + size_t decrypt_buf_len = 0; + unsigned char *encrypt_buf = NULL; + size_t encrypt_buf_len = 0; + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + unsigned char *tmp_tag = NULL; + unsigned char *tmp_cipher = NULL; + unsigned char *tag_buf = NULL; +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + + /* Null pointers are documented as valid for inputs of length 0. + * The test framework passes non-null pointers, so set them to NULL. + * key, cipher and tag can't be empty. */ + if( iv->len == 0 ) + iv->x = NULL; + if( ad->len == 0 ) + ad->x = NULL; + if( clear->len == 0 ) + clear->x = NULL; + + mbedtls_cipher_init( &ctx ); + + /* Initialize PSA Crypto */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_ASSERT( psa_crypto_init( ) ); +#else + (void) use_psa; +#endif + + /* + * Are we using NIST_KW? with padding? + */ + using_nist_kw_padding = cipher_id == MBEDTLS_CIPHER_AES_128_KWP || + cipher_id == MBEDTLS_CIPHER_AES_192_KWP || + cipher_id == MBEDTLS_CIPHER_AES_256_KWP; + using_nist_kw = cipher_id == MBEDTLS_CIPHER_AES_128_KW || + cipher_id == MBEDTLS_CIPHER_AES_192_KW || + cipher_id == MBEDTLS_CIPHER_AES_256_KW || + using_nist_kw_padding; + + /**************************************************************** + * * + * Part 1: non-deprecated API * + * * + ****************************************************************/ + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * prepare buffer for decryption + * (we need the tag appended to the ciphertext) + */ + cipher_plus_tag_len = cipher->len + tag->len; + ASSERT_ALLOC( cipher_plus_tag, cipher_plus_tag_len ); + memcpy( cipher_plus_tag, cipher->x, cipher->len ); + memcpy( cipher_plus_tag + cipher->len, tag->x, tag->len ); + + /* + * Compute length of output buffer according to the documentation + */ + if( using_nist_kw ) + decrypt_buf_len = cipher_plus_tag_len - 8; + else + decrypt_buf_len = cipher_plus_tag_len - tag->len; + + + /* + * Try decrypting to a buffer that's 1B too small + */ + if( decrypt_buf_len != 0 ) + { + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + } + + /* + * Authenticate and decrypt, and check result + */ + ASSERT_ALLOC( decrypt_buf, decrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_decrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, cipher_plus_tag, cipher_plus_tag_len, + decrypt_buf, decrypt_buf_len, &outlen, tag->len ); + + if( strcmp( result, "FAIL" ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, decrypt_buf_len ) ); + } + else + { + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + /* Free this, but keep cipher_plus_tag for deprecated function with PSA */ + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* + * Compute size of output buffer according to documentation + */ + if( using_nist_kw ) + { + encrypt_buf_len = clear->len + 8; + if( using_nist_kw_padding && encrypt_buf_len % 8 != 0 ) + encrypt_buf_len += 8 - encrypt_buf_len % 8; + } + else + { + encrypt_buf_len = clear->len + tag->len; + } + + /* + * Try encrypting with an output buffer that's 1B too small + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len - 1 ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len - 1, &outlen, tag->len ); + TEST_ASSERT( ret != 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + + /* + * Encrypt and check the result + */ + ASSERT_ALLOC( encrypt_buf, encrypt_buf_len ); + + outlen = 0; + ret = mbedtls_cipher_auth_encrypt_ext( &ctx, iv->x, iv->len, + ad->x, ad->len, clear->x, clear->len, + encrypt_buf, encrypt_buf_len, &outlen, tag->len ); + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len + tag->len ); + TEST_ASSERT( memcmp( encrypt_buf, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( encrypt_buf + cipher->len, + tag->x, tag->len ) == 0 ); + + mbedtls_free( encrypt_buf ); + encrypt_buf = NULL; + } + + /**************************************************************** + * * + * Part 2: deprecated API * + * * + ****************************************************************/ + +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + + /* + * Prepare context for decryption + */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_DECRYPT ) ) + goto exit; + + /* + * Prepare pointers for decryption + */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + { + /* PSA requires that the tag immediately follows the ciphertext. + * Fortunately, we already have that from testing the new API. */ + tmp_cipher = cipher_plus_tag; + tmp_tag = tmp_cipher + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + tmp_cipher = cipher->x; + tmp_tag = tag->x; + } + + /* + * Authenticate and decrypt, and check result + */ + + ASSERT_ALLOC( decrypt_buf, cipher->len ); + outlen = 0; + ret = mbedtls_cipher_auth_decrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + tmp_cipher, cipher->len, decrypt_buf, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + /* NIST_KW with legacy API */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else if( strcmp( result, "FAIL" ) == 0 ) + { + /* unauthentic message */ + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + TEST_ASSERT( buffer_is_all_zero( decrypt_buf, cipher->len ) ); + } + else + { + /* authentic message: is the plaintext correct? */ + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( decrypt_buf, outlen, clear->x, clear->len ); + } + + mbedtls_free( decrypt_buf ); + decrypt_buf = NULL; + mbedtls_free( cipher_plus_tag ); + cipher_plus_tag = NULL; + + /* + * Encrypt back if test data was authentic + */ + if( strcmp( result, "FAIL" ) != 0 ) + { + /* prepare context for encryption */ + if( ! cipher_reset_key( &ctx, cipher_id, use_psa, tag->len, key, + MBEDTLS_ENCRYPT ) ) + goto exit; + + /* prepare buffers for encryption */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa ) + { + ASSERT_ALLOC( cipher_plus_tag, cipher->len + tag->len ); + tmp_cipher = cipher_plus_tag; + tmp_tag = cipher_plus_tag + cipher->len; + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + { + ASSERT_ALLOC( encrypt_buf, cipher->len ); + ASSERT_ALLOC( tag_buf, tag->len ); + tmp_cipher = encrypt_buf; + tmp_tag = tag_buf; + } + + /* + * Encrypt and check the result + */ + outlen = 0; + ret = mbedtls_cipher_auth_encrypt( &ctx, iv->x, iv->len, ad->x, ad->len, + clear->x, clear->len, tmp_cipher, &outlen, + tmp_tag, tag->len ); + + if( using_nist_kw ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( outlen == cipher->len ); + if( cipher->len != 0 ) + TEST_ASSERT( memcmp( tmp_cipher, cipher->x, cipher->len ) == 0 ); + TEST_ASSERT( memcmp( tmp_tag, tag->x, tag->len ) == 0 ); + } + } + +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +exit: + + mbedtls_cipher_free( &ctx ); + mbedtls_free( decrypt_buf ); + mbedtls_free( encrypt_buf ); + mbedtls_free( cipher_plus_tag ); +#if !defined(MBEDTLS_DEPRECATED_WARNING) && \ + !defined(MBEDTLS_DEPRECATED_REMOVED) + mbedtls_free( tag_buf ); +#endif /* !MBEDTLS_DEPRECATED_WARNING && !MBEDTLS_DEPRECATED_REMOVED */ + +#if defined(MBEDTLS_USE_PSA_CRYPTO) + if( use_psa == 1 ) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_auth_crypt_tv_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_auth_crypt_tv( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, (char *) params[11], &data12, *( (int *) params[14] ) ); +} +#endif /* MBEDTLS_CIPHER_AUTH_CRYPT */ +void test_test_vec_ecb( int cipher_id, int operation, data_t * key, + data_t * input, data_t * result, int finish_result + ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_update( &ctx, input->x, + mbedtls_cipher_get_block_size( &ctx ), + output, &outlen ) ); + TEST_ASSERT( outlen == mbedtls_cipher_get_block_size( &ctx ) ); + TEST_ASSERT( finish_result == mbedtls_cipher_finish( &ctx, output + outlen, + &outlen ) ); + TEST_ASSERT( 0 == outlen ); + + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, + mbedtls_cipher_get_block_size( &ctx ) ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_test_vec_ecb_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_test_vec_ecb( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_test_vec_crypt( int cipher_id, int operation, data_t *key, + data_t *iv, data_t *input, data_t *result, + int finish_result, int use_psa ) +{ + mbedtls_cipher_context_t ctx; + unsigned char output[32]; + size_t outlen; + + mbedtls_cipher_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + + /* Prepare context */ +#if !defined(MBEDTLS_USE_PSA_CRYPTO) + (void) use_psa; +#else + if( use_psa == 1 ) + { + PSA_ASSERT( psa_crypto_init( ) ); + TEST_ASSERT( 0 == mbedtls_cipher_setup_psa( &ctx, + mbedtls_cipher_info_from_type( cipher_id ), 0 ) ); + } + else +#endif /* MBEDTLS_USE_PSA_CRYPTO */ + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, + mbedtls_cipher_info_from_type( cipher_id ) ) ); + + TEST_ASSERT( 0 == mbedtls_cipher_setkey( &ctx, key->x, 8 * key->len, operation ) ); + if( MBEDTLS_MODE_CBC == ctx.cipher_info->mode ) + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, MBEDTLS_PADDING_NONE ) ); + + TEST_ASSERT( finish_result == mbedtls_cipher_crypt( &ctx, iv->len ? iv->x : NULL, + iv->len, input->x, input->len, + output, &outlen ) ); + TEST_ASSERT( result->len == outlen ); + /* check plaintext only if everything went fine */ + if( 0 == finish_result ) + TEST_ASSERT( 0 == memcmp( output, result->x, outlen ) ); + +exit: + mbedtls_cipher_free( &ctx ); +#if defined(MBEDTLS_USE_PSA_CRYPTO) + PSA_DONE( ); +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +} + +void test_test_vec_crypt_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_test_vec_crypt( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) +void test_set_padding( int cipher_id, int pad_mode, int ret ) +{ + const mbedtls_cipher_info_t *cipher_info; + mbedtls_cipher_context_t ctx; + + mbedtls_cipher_init( &ctx ); + + cipher_info = mbedtls_cipher_info_from_type( cipher_id ); + TEST_ASSERT( NULL != cipher_info ); + TEST_ASSERT( 0 == mbedtls_cipher_setup( &ctx, cipher_info ) ); + + TEST_ASSERT( ret == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + +exit: + mbedtls_cipher_free( &ctx ); +} + +void test_set_padding_wrapper( void ** params ) +{ + + test_set_padding( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_check_padding( int pad_mode, data_t * input, int ret, int dlen_check + ) +{ + mbedtls_cipher_info_t cipher_info; + mbedtls_cipher_context_t ctx; + size_t dlen; + + /* build a fake context just for getting access to get_padding */ + mbedtls_cipher_init( &ctx ); + cipher_info.mode = MBEDTLS_MODE_CBC; + ctx.cipher_info = &cipher_info; + + TEST_ASSERT( 0 == mbedtls_cipher_set_padding_mode( &ctx, pad_mode ) ); + + + TEST_ASSERT( ret == ctx.get_padding( input->x, input->len, &dlen ) ); + if( 0 == ret ) + TEST_ASSERT( dlen == (size_t) dlen_check ); +exit: + ; +} + +void test_check_padding_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_check_padding( *( (int *) params[0] ), &data1, *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#endif /* MBEDTLS_CIPHER_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_AES_128_CBC; + } + break; + case 1: + { + *out_value = MBEDTLS_PADDING_PKCS7; + } + break; + case 2: + { + *out_value = MBEDTLS_CIPHER_AES_128_CFB128; + } + break; + case 3: + { + *out_value = MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA; + } + break; + case 4: + { + *out_value = MBEDTLS_CIPHER_AES_128_CTR; + } + break; + case 5: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_128_CBC; + } + break; + case 6: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_128_CFB128; + } + break; + case 7: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_128_CTR; + } + break; + case 8: + { + *out_value = MBEDTLS_CIPHER_DES_CBC; + } + break; + case 9: + { + *out_value = MBEDTLS_CIPHER_BLOWFISH_CBC; + } + break; + case 10: + { + *out_value = MBEDTLS_CIPHER_BLOWFISH_CFB64; + } + break; + case 11: + { + *out_value = MBEDTLS_CIPHER_BLOWFISH_CTR; + } + break; + case 12: + { + *out_value = MBEDTLS_CIPHER_NULL; + } + break; + case 13: + { + *out_value = -1; + } + break; + case 14: + { + *out_value = MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; + } + break; + case 15: + { + *out_value = MBEDTLS_ERR_CIPHER_INVALID_PADDING; + } + break; + case 16: + { + *out_value = MBEDTLS_PADDING_ONE_AND_ZEROS; + } + break; + case 17: + { + *out_value = MBEDTLS_PADDING_ZEROS_AND_LEN; + } + break; + case 18: + { + *out_value = MBEDTLS_PADDING_ZEROS; + } + break; + case 19: + { + *out_value = MBEDTLS_PADDING_NONE; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_CIPHER_C) + + case 0: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_CIPHER_MODE_CBC) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_CIPHER_PADDING_PKCS7) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_CIPHER_MODE_CFB) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_CIPHER_MODE_CTR) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 5: + { +#if defined(MBEDTLS_CAMELLIA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 6: + { +#if defined(MBEDTLS_DES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 7: + { +#if defined(MBEDTLS_BLOWFISH_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 8: + { +#if defined(MBEDTLS_CIPHER_NULL_CIPHER) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 9: + { +#if defined(MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 10: + { +#if defined(MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 11: + { +#if defined(MBEDTLS_CIPHER_PADDING_ZEROS) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_CIPHER_C) + test_mbedtls_cipher_list_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_CIPHER_C) + test_cipher_invalid_param_unconditional_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_cipher_invalid_param_conditional_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_AES_C) + test_cipher_special_behaviours_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_fail_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_CIPHER_C) + test_dec_empty_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_CIPHER_C) + test_enc_dec_buf_multipart_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_CIPHER_C) + test_decrypt_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_AUTH_CRYPT) + test_auth_crypt_tv_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_CIPHER_C) + test_test_vec_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_test_vec_crypt_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) + test_set_padding_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_CIPHER_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_check_padding_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_cipher.padding.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_cipher.padding.datax b/third_party/mbedtls/test/test_suite_cipher.padding.datax new file mode 100644 index 000000000..c6f09a3a1 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_cipher.padding.datax @@ -0,0 +1,236 @@ +Cipher list +0 + +Set padding with AES-CBC +depends_on:0:1:2 +12:exp:0:exp:1:int:0 + +Set padding with AES-CFB +depends_on:0:3 +12:exp:2:exp:1:exp:3 + +Set padding with AES-CTR +depends_on:0:4 +12:exp:4:exp:1:exp:3 + +Set padding with CAMELLIA-CBC +depends_on:5:1:2 +12:exp:5:exp:1:int:0 + +Set padding with CAMELLIA-CFB +depends_on:5:3 +12:exp:6:exp:1:exp:3 + +Set padding with CAMELLIA-CTR +depends_on:5:4 +12:exp:7:exp:1:exp:3 + +Set padding with DES-CBC +depends_on:6:1:2 +12:exp:8:exp:1:int:0 + +Set padding with BLOWFISH-CBC +depends_on:7:1:2 +12:exp:9:exp:1:int:0 + +Set padding with BLOWFISH-CFB +depends_on:7:3 +12:exp:10:exp:1:exp:3 + +Set padding with BLOWFISH-CTR +depends_on:7:4 +12:exp:11:exp:1:exp:3 + +Set padding with NULL +depends_on:8 +12:exp:12:exp:1:exp:3 + +Set non-existent padding with AES-CBC +depends_on:0:1 +12:exp:0:exp:13:exp:14 + +Set non-existent padding with CAMELLIA-CBC +depends_on:5:1 +12:exp:5:exp:13:exp:14 + +Set non-existent padding with DES-CBC +depends_on:6:1 +12:exp:8:exp:13:exp:14 + +Set non-existent padding with BLOWFISH-CBC +depends_on:7:1 +12:exp:9:exp:13:exp:14 + +Check PKCS padding #1 (correct) +depends_on:2 +13:exp:1:hex:"DABBAD0004040404":int:0:int:4 + +Check PKCS padding #2 (correct) +depends_on:2 +13:exp:1:hex:"DABBAD0001":int:0:int:4 + +Check PKCS padding #3 (correct) +depends_on:2 +13:exp:1:hex:"DABBAD000101":int:0:int:5 + +Check PKCS padding #4 (correct) +depends_on:2 +13:exp:1:hex:"030303":int:0:int:0 + +Check PKCS padding #5 (null padding) +depends_on:2 +13:exp:1:hex:"DABBAD0000":exp:15:int:0 + +Check PKCS padding #6 (too few padding bytes) +depends_on:2 +13:exp:1:hex:"DABBAD0002":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #1) +depends_on:2 +13:exp:1:hex:"DABBAD00030203":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #2) +depends_on:2 +13:exp:1:hex:"DABBAD00030103":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #3) +depends_on:2 +13:exp:1:hex:"DABBAD00030703":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #4) +depends_on:2 +13:exp:1:hex:"DABBAD00030b03":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #5) +depends_on:2 +13:exp:1:hex:"DABBAD00031303":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #6) +depends_on:2 +13:exp:1:hex:"DABBAD00032303":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #7) +depends_on:2 +13:exp:1:hex:"DABBAD00034203":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #8) +depends_on:2 +13:exp:1:hex:"DABBAD00038303":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #9) +depends_on:2 +13:exp:1:hex:"DABBAD00020303":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #10) +depends_on:2 +13:exp:1:hex:"DABBAD00010303":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #11) +depends_on:2 +13:exp:1:hex:"DABBAD00070303":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #12) +depends_on:2 +13:exp:1:hex:"DABBAD000b0303":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #13) +depends_on:2 +13:exp:1:hex:"DABBAD00130303":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #14) +depends_on:2 +13:exp:1:hex:"DABBAD00230303":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #15) +depends_on:2 +13:exp:1:hex:"DABBAD00420303":exp:15:int:0 + +Check PKCS padding #7 (non-uniform padding bytes #16) +depends_on:2 +13:exp:1:hex:"DABBAD00830303":exp:15:int:0 + +Check PKCS padding #8 (overlong) +depends_on:2 +13:exp:1:hex:"040404":exp:15:int:0 + +Check one and zeros padding #1 (correct) +depends_on:9 +13:exp:16:hex:"DABBAD0080":int:0:int:4 + +Check one and zeros padding #2 (correct) +depends_on:9 +13:exp:16:hex:"DABBAD008000":int:0:int:4 + +Check one and zeros padding #3 (correct) +depends_on:9 +13:exp:16:hex:"DABBAD00800000":int:0:int:4 + +Check one and zeros padding #4 (correct) +depends_on:9 +13:exp:16:hex:"DABBAD00808000":int:0:int:5 + +Check one and zeros padding #5 (correct) +depends_on:9 +13:exp:16:hex:"800000":int:0:int:0 + +Check one and zeros padding #6 (missing one) +depends_on:9 +13:exp:16:hex:"DABBAD0000":exp:15:int:4 + +Check one and zeros padding #7 (overlong) +depends_on:9 +13:exp:16:hex:"0000000000":exp:15:int:4 + +Check one and zeros padding #8 (last byte 0x80 | x) +depends_on:9 +13:exp:16:hex:"0000000082":exp:15:int:4 + +Check zeros and len padding #1 (correct) +depends_on:10 +13:exp:17:hex:"DABBAD0001":int:0:int:4 + +Check zeros and len padding #2 (correct) +depends_on:10 +13:exp:17:hex:"DABBAD000002":int:0:int:4 + +Check zeros and len padding #3 (correct) +depends_on:10 +13:exp:17:hex:"DABBAD000003":int:0:int:3 + +Check zeros and len padding #4 (correct) +depends_on:10 +13:exp:17:hex:"000003":int:0:int:0 + +Check zeros and len padding #5 (overlong) +depends_on:10 +13:exp:17:hex:"000004":exp:15:int:0 + +Check zeros and len padding #6 (not enough zeros) +depends_on:10 +13:exp:17:hex:"DABBAD000004":exp:15:int:0 + +Check zeros padding #1 (correct) +depends_on:11 +13:exp:18:hex:"DABBAD00":int:0:int:3 + +Check zeros padding #2 (correct) +depends_on:11 +13:exp:18:hex:"DABBAD0000":int:0:int:3 + +Check zeros padding #3 (correct) +depends_on:11 +13:exp:18:hex:"DABBAD":int:0:int:3 + +Check zeros padding #4 (correct) +depends_on:11 +13:exp:18:hex:"000000":int:0:int:0 + +Check no padding #1 (correct by definition) +13:exp:19:hex:"DABBAD00":int:0:int:4 + +Check no padding #2 (correct by definition) +13:exp:19:hex:"DABBAD0001":int:0:int:5 + +Check no padding #3 (correct by definition) +13:exp:19:hex:"":int:0:int:0 + diff --git a/third_party/mbedtls/test/test_suite_ctr_drbg.c b/third_party/mbedtls/test/test_suite_ctr_drbg.c new file mode 100644 index 000000000..27204c90d --- /dev/null +++ b/third_party/mbedtls/test/test_suite_ctr_drbg.c @@ -0,0 +1,739 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_ctr_drbg.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_ctr_drbg.function + * Test suite data : suites/test_suite_ctr_drbg.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_CTR_DRBG_C) +#include "third_party/mbedtls/entropy.h" +#include "third_party/mbedtls/ctr_drbg.h" + +/* Modes for ctr_drbg_validate */ +enum reseed_mode +{ + RESEED_NEVER, /* never reseed */ + RESEED_FIRST, /* instantiate, reseed, generate, generate */ + RESEED_SECOND, /* instantiate, generate, reseed, generate */ + RESEED_ALWAYS /* prediction resistance, no explicit reseed */ +}; + +static size_t test_offset_idx = 0; +static size_t test_max_idx = 0; +static int mbedtls_test_entropy_func( void *data, unsigned char *buf, size_t len ) +{ + const unsigned char *p = (unsigned char *) data; + if( test_offset_idx + len > test_max_idx ) + return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + memcpy( buf, p + test_offset_idx, len ); + test_offset_idx += len; + return( 0 ); +} + +static void ctr_drbg_validate_internal( int reseed_mode, data_t * nonce, + int entropy_len_arg, data_t * entropy, + data_t * reseed, + data_t * add1, data_t * add2, + data_t * result ) +{ + mbedtls_ctr_drbg_context ctx; + unsigned char buf[64]; + + size_t entropy_chunk_len = (size_t) entropy_len_arg; + + TEST_ASSERT( entropy_chunk_len <= sizeof( buf ) ); + + test_offset_idx = 0; + mbedtls_ctr_drbg_init( &ctx ); + + test_max_idx = entropy->len; + + /* CTR_DRBG_Instantiate(entropy[:entropy->len], nonce, perso, ) + * where nonce||perso = nonce[nonce->len] */ + mbedtls_ctr_drbg_set_entropy_len( &ctx, entropy_chunk_len ); + mbedtls_ctr_drbg_set_nonce_len( &ctx, 0 ); + TEST_ASSERT( mbedtls_ctr_drbg_seed( + &ctx, + mbedtls_test_entropy_func, entropy->x, + nonce->x, nonce->len ) == 0 ); + if( reseed_mode == RESEED_ALWAYS ) + mbedtls_ctr_drbg_set_prediction_resistance( + &ctx, + MBEDTLS_CTR_DRBG_PR_ON ); + + if( reseed_mode == RESEED_FIRST ) + { + /* CTR_DRBG_Reseed(entropy[idx:idx+entropy->len], + * reseed[:reseed->len]) */ + TEST_ASSERT( mbedtls_ctr_drbg_reseed( + &ctx, + reseed->x, reseed->len ) == 0 ); + } + + /* CTR_DRBG_Generate(result->len * 8 bits, add1[:add1->len]) -> buf */ + /* Then reseed if prediction resistance is enabled. */ + TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( + &ctx, + buf, result->len, + add1->x, add1->len ) == 0 ); + + + if( reseed_mode == RESEED_SECOND ) + { + /* CTR_DRBG_Reseed(entropy[idx:idx+entropy->len], + * reseed[:reseed->len]) */ + TEST_ASSERT( mbedtls_ctr_drbg_reseed( + &ctx, + reseed->x, reseed->len ) == 0 ); + } + + /* CTR_DRBG_Generate(result->len * 8 bits, add2->x[:add2->len]) -> buf */ + /* Then reseed if prediction resistance is enabled. */ + TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( + &ctx, + buf, result->len, + add2->x, add2->len ) == 0 ); + TEST_ASSERT( memcmp( buf, result->x, result->len ) == 0 ); + +exit: + mbedtls_ctr_drbg_free( &ctx ); +} + +void test_ctr_drbg_special_behaviours( ) +{ + mbedtls_ctr_drbg_context ctx; + unsigned char output[512]; + unsigned char additional[512]; + + mbedtls_ctr_drbg_init( &ctx ); + memset( output, 0, sizeof( output ) ); + memset( additional, 0, sizeof( additional ) ); + + TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( &ctx, + output, MBEDTLS_CTR_DRBG_MAX_REQUEST + 1, + additional, 16 ) == + MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG ); + TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( &ctx, + output, 16, + additional, MBEDTLS_CTR_DRBG_MAX_INPUT + 1 ) == + MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); + + TEST_ASSERT( mbedtls_ctr_drbg_reseed( &ctx, additional, + MBEDTLS_CTR_DRBG_MAX_SEED_INPUT + 1 ) == + MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); + + mbedtls_ctr_drbg_set_entropy_len( &ctx, ~0 ); + TEST_ASSERT( mbedtls_ctr_drbg_reseed( &ctx, additional, + MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) == + MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); +exit: + mbedtls_ctr_drbg_free( &ctx ); +} + +void test_ctr_drbg_special_behaviours_wrapper( void ** params ) +{ + (void)params; + + test_ctr_drbg_special_behaviours( ); +} +void test_ctr_drbg_validate_no_reseed( data_t * add_init, data_t * entropy, + data_t * add1, data_t * add2, + data_t * result_string ) +{ + data_t empty = { 0, 0 }; + ctr_drbg_validate_internal( RESEED_NEVER, add_init, + entropy->len, entropy, + &empty, add1, add2, + result_string ); + goto exit; // goto is needed to avoid warning ( no test assertions in func) +exit: + ; +} + +void test_ctr_drbg_validate_no_reseed_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_ctr_drbg_validate_no_reseed( &data0, &data2, &data4, &data6, &data8 ); +} +void test_ctr_drbg_validate_pr( data_t * add_init, data_t * entropy, + data_t * add1, data_t * add2, + data_t * result_string ) +{ + data_t empty = { 0, 0 }; + ctr_drbg_validate_internal( RESEED_ALWAYS, add_init, + entropy->len / 3, entropy, + &empty, add1, add2, + result_string ); + goto exit; // goto is needed to avoid warning ( no test assertions in func) +exit: + ; +} + +void test_ctr_drbg_validate_pr_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_ctr_drbg_validate_pr( &data0, &data2, &data4, &data6, &data8 ); +} +void test_ctr_drbg_validate_reseed_between( data_t * add_init, data_t * entropy, + data_t * add1, data_t * add_reseed, + data_t * add2, data_t * result_string ) +{ + ctr_drbg_validate_internal( RESEED_SECOND, add_init, + entropy->len / 2, entropy, + add_reseed, add1, add2, + result_string ); + goto exit; // goto is needed to avoid warning ( no test assertions in func) +exit: + ; +} + +void test_ctr_drbg_validate_reseed_between_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + + test_ctr_drbg_validate_reseed_between( &data0, &data2, &data4, &data6, &data8, &data10 ); +} +void test_ctr_drbg_validate_reseed_first( data_t * add_init, data_t * entropy, + data_t * add1, data_t * add_reseed, + data_t * add2, data_t * result_string ) +{ + ctr_drbg_validate_internal( RESEED_FIRST, add_init, + entropy->len / 2, entropy, + add_reseed, add1, add2, + result_string ); + goto exit; // goto is needed to avoid warning ( no test assertions in func) +exit: + ; +} + +void test_ctr_drbg_validate_reseed_first_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + + test_ctr_drbg_validate_reseed_first( &data0, &data2, &data4, &data6, &data8, &data10 ); +} +void test_ctr_drbg_entropy_strength( int expected_bit_strength ) +{ + unsigned char entropy[/*initial entropy*/ MBEDTLS_CTR_DRBG_ENTROPY_LEN + + /*nonce*/ MBEDTLS_CTR_DRBG_ENTROPY_NONCE_LEN + + /*reseed*/ MBEDTLS_CTR_DRBG_ENTROPY_LEN]; + mbedtls_ctr_drbg_context ctx; + size_t last_idx; + size_t byte_strength = expected_bit_strength / 8; + + mbedtls_ctr_drbg_init( &ctx ); + test_offset_idx = 0; + test_max_idx = sizeof( entropy ); + memset( entropy, 0, sizeof( entropy ) ); + + /* The initial seeding must grab at least byte_strength bytes of entropy + * for the entropy input and byte_strength/2 bytes for a nonce. */ + TEST_ASSERT( mbedtls_ctr_drbg_seed( &ctx, + mbedtls_test_entropy_func, entropy, + NULL, 0 ) == 0 ); + TEST_ASSERT( test_offset_idx >= ( byte_strength * 3 + 1 ) / 2 ); + last_idx = test_offset_idx; + + /* A reseed must grab at least byte_strength bytes of entropy. */ + TEST_ASSERT( mbedtls_ctr_drbg_reseed( &ctx, NULL, 0 ) == 0 ); + TEST_ASSERT( test_offset_idx - last_idx >= byte_strength ); + +exit: + mbedtls_ctr_drbg_free( &ctx ); +} + +void test_ctr_drbg_entropy_strength_wrapper( void ** params ) +{ + + test_ctr_drbg_entropy_strength( *( (int *) params[0] ) ); +} +void test_ctr_drbg_entropy_usage( int entropy_nonce_len ) +{ + unsigned char out[16]; + unsigned char add[16]; + unsigned char entropy[1024]; + mbedtls_ctr_drbg_context ctx; + size_t i, reps = 10; + size_t expected_idx = 0; + + mbedtls_ctr_drbg_init( &ctx ); + test_offset_idx = 0; + test_max_idx = sizeof( entropy ); + memset( entropy, 0, sizeof( entropy ) ); + memset( out, 0, sizeof( out ) ); + memset( add, 0, sizeof( add ) ); + + if( entropy_nonce_len >= 0 ) + TEST_ASSERT( mbedtls_ctr_drbg_set_nonce_len( &ctx, entropy_nonce_len ) == 0 ); + + /* Set reseed interval before seed */ + mbedtls_ctr_drbg_set_reseed_interval( &ctx, 2 * reps ); + + /* Init must use entropy */ + TEST_ASSERT( mbedtls_ctr_drbg_seed( &ctx, mbedtls_test_entropy_func, entropy, NULL, 0 ) == 0 ); + expected_idx += MBEDTLS_CTR_DRBG_ENTROPY_LEN; + if( entropy_nonce_len >= 0 ) + expected_idx += entropy_nonce_len; + else + expected_idx += MBEDTLS_CTR_DRBG_ENTROPY_NONCE_LEN; + TEST_EQUAL( test_offset_idx, expected_idx ); + + /* By default, PR is off, and reseed interval was set to + * 2 * reps so the next few calls should not use entropy */ + for( i = 0; i < reps; i++ ) + { + TEST_ASSERT( mbedtls_ctr_drbg_random( &ctx, out, sizeof( out ) - 4 ) == 0 ); + TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( &ctx, out, sizeof( out ) - 4, + add, sizeof( add ) ) == 0 ); + } + TEST_EQUAL( test_offset_idx, expected_idx ); + + /* While at it, make sure we didn't write past the requested length */ + TEST_ASSERT( out[sizeof( out ) - 4] == 0 ); + TEST_ASSERT( out[sizeof( out ) - 3] == 0 ); + TEST_ASSERT( out[sizeof( out ) - 2] == 0 ); + TEST_ASSERT( out[sizeof( out ) - 1] == 0 ); + + /* There have been 2 * reps calls to random. The next call should reseed */ + TEST_ASSERT( mbedtls_ctr_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_idx += MBEDTLS_CTR_DRBG_ENTROPY_LEN; + TEST_EQUAL( test_offset_idx, expected_idx ); + + /* Set reseed interval after seed */ + mbedtls_ctr_drbg_set_reseed_interval( &ctx, 4 * reps + 1 ); + + /* The next few calls should not reseed */ + for( i = 0; i < (2 * reps); i++ ) + { + TEST_ASSERT( mbedtls_ctr_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + TEST_ASSERT( mbedtls_ctr_drbg_random_with_add( &ctx, out, sizeof( out ) , + add, sizeof( add ) ) == 0 ); + } + TEST_EQUAL( test_offset_idx, expected_idx ); + + /* Call update with too much data (sizeof entropy > MAX(_SEED)_INPUT). + * Make sure it's detected as an error and doesn't cause memory + * corruption. */ + TEST_ASSERT( mbedtls_ctr_drbg_update_ret( + &ctx, entropy, sizeof( entropy ) ) != 0 ); + + /* Now enable PR, so the next few calls should all reseed */ + mbedtls_ctr_drbg_set_prediction_resistance( &ctx, MBEDTLS_CTR_DRBG_PR_ON ); + TEST_ASSERT( mbedtls_ctr_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_idx += MBEDTLS_CTR_DRBG_ENTROPY_LEN; + TEST_EQUAL( test_offset_idx, expected_idx ); + + /* Finally, check setting entropy_len */ + mbedtls_ctr_drbg_set_entropy_len( &ctx, 42 ); + TEST_ASSERT( mbedtls_ctr_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_idx += 42; + TEST_EQUAL( test_offset_idx, expected_idx ); + + mbedtls_ctr_drbg_set_entropy_len( &ctx, 13 ); + TEST_ASSERT( mbedtls_ctr_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_idx += 13; + TEST_EQUAL( test_offset_idx, expected_idx ); + +exit: + mbedtls_ctr_drbg_free( &ctx ); +} + +void test_ctr_drbg_entropy_usage_wrapper( void ** params ) +{ + + test_ctr_drbg_entropy_usage( *( (int *) params[0] ) ); +} +#if defined(MBEDTLS_FS_IO) +void test_ctr_drbg_seed_file( char * path, int ret ) +{ + mbedtls_ctr_drbg_context ctx; + + mbedtls_ctr_drbg_init( &ctx ); + + TEST_ASSERT( mbedtls_ctr_drbg_seed( &ctx, mbedtls_test_rnd_std_rand, + NULL, NULL, 0 ) == 0 ); + TEST_ASSERT( mbedtls_ctr_drbg_write_seed_file( &ctx, path ) == ret ); + TEST_ASSERT( mbedtls_ctr_drbg_update_seed_file( &ctx, path ) == ret ); + +exit: + mbedtls_ctr_drbg_free( &ctx ); +} + +void test_ctr_drbg_seed_file_wrapper( void ** params ) +{ + + test_ctr_drbg_seed_file( (char *) params[0], *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_SELF_TEST) +void test_ctr_drbg_selftest( ) +{ + TEST_ASSERT( mbedtls_ctr_drbg_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_ctr_drbg_selftest_wrapper( void ** params ) +{ + (void)params; + + test_ctr_drbg_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_CTR_DRBG_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_CTR_DRBG_C) + + case 0: + { + *out_value = -1; + } + break; + case 1: + { + *out_value = MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_CTR_DRBG_C) + + case 0: + { +#if !defined(MBEDTLS_CTR_DRBG_USE_128_BIT_KEY) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_CTR_DRBG_USE_128_BIT_KEY) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_CTR_DRBG_C) + test_ctr_drbg_special_behaviours_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_CTR_DRBG_C) + test_ctr_drbg_validate_no_reseed_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_CTR_DRBG_C) + test_ctr_drbg_validate_pr_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_CTR_DRBG_C) + test_ctr_drbg_validate_reseed_between_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_CTR_DRBG_C) + test_ctr_drbg_validate_reseed_first_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_CTR_DRBG_C) + test_ctr_drbg_entropy_strength_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_CTR_DRBG_C) + test_ctr_drbg_entropy_usage_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_CTR_DRBG_C) && defined(MBEDTLS_FS_IO) + test_ctr_drbg_seed_file_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_CTR_DRBG_C) && defined(MBEDTLS_SELF_TEST) + test_ctr_drbg_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_ctr_drbg.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_ctr_drbg.datax b/third_party/mbedtls/test/test_suite_ctr_drbg.datax new file mode 100644 index 000000000..6f11d720b --- /dev/null +++ b/third_party/mbedtls/test/test_suite_ctr_drbg.datax @@ -0,0 +1,1101 @@ +CTR_DRBG_withDF.pdf: AES-256, PR=no, perso=no, add=no +depends_on:0 +1:hex:"202122232425262728292a2b2c2d2e2f":hex:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f":hex:"":hex:"":hex:"8da6cc59e703ced07d58d96e5b6d7836c32599735b734f88c1a73b53c7a6d82e" + +CTR_DRBG_withDF.pdf: AES-256, PR=no, perso=no, add=yes +depends_on:0 +1:hex:"202122232425262728292a2b2c2d2e2f":hex:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f":hex:"606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f":hex:"a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf":hex:"81daaf9800c34ff0a104e51d87e36f5b17eb14b9abc5064cadda976ec4f77d34" + +CTR_DRBG_withDF.pdf: AES-256, PR=no, perso=yes, add=no +depends_on:0 +1:hex:"202122232425262728292a2b2c2d2e2f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f":hex:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f":hex:"":hex:"":hex:"bb2a0f5f0ca6d30634ba6068eb94aae8701437db7223a1b5afe8771547da3cee" + +CTR_DRBG_withDF.pdf: AES-256, PR=no, perso=yes, add=yes +depends_on:0 +1:hex:"202122232425262728292a2b2c2d2e2f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f":hex:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f":hex:"606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f":hex:"a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf":hex:"98a28e3b1ba363c9daf0f6887a1cf52b833d3354d77a7c10837dd63dd2e645f8" + +CTR_DRBG_withDF.pdf: AES-256, PR=yes, perso=no, add=no +depends_on:0 +2:hex:"202122232425262728292a2b2c2d2e2f":hex:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef":hex:"":hex:"":hex:"259dc78ccfaec4210c30af815e4f75a5662b7da4b41013bdc00302dfb6076492" + +CTR_DRBG_withDF.pdf: AES-256, PR=yes, perso=no, add=yes +depends_on:0 +2:hex:"202122232425262728292a2b2c2d2e2f":hex:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef":hex:"606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f":hex:"a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf":hex:"386debbbf091bbf0502957b0329938fb836b82e594a2f5fdd5eb28d4e35528f4" + +CTR_DRBG_withDF.pdf: AES-256, PR=yes, perso=yes, add=no +depends_on:0 +2:hex:"202122232425262728292a2b2c2d2e2f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f":hex:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef":hex:"":hex:"":hex:"601f95384f0d85946301d1eace8f645a825ce38f1e2565b0c0c439448e9ca8ac" + +CTR_DRBG_withDF.pdf: AES-256, PR=yes, perso=yes, add=yes +depends_on:0 +2:hex:"202122232425262728292a2b2c2d2e2f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f":hex:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef":hex:"606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f":hex:"a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf":hex:"738e99c95af59519aad37ff3d5180986adebab6e95836725097e50a8d1d0bd28" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,0) #0 +depends_on:0 +2:hex:"d254fcff021e69d229c9cfad85fa486c":hex:"c18081a65d44021619b3f180b1c920026a546f0c7081498b6ea662526d51b1cb583bfad5375ffbc9ff46d219c7223e95459d82e1e7229f633169d26b57474fa337c9981c0bfb91314d55b9e91c5a5ee49392cfc52312d5562c4a6effdc10d068":hex:"":hex:"":hex:"34011656b429008f3563ecb5f2590723" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,0) #1 +depends_on:0 +2:hex:"7be87545266dadd1d73546c0927afc8d":hex:"a7f38c750bd6ff41c4e79f5b7dd3024d58ca3f1f4c096486c4a73c4f74a2410c4c9c5143eb8c09df842ba4427f385bbf65c350b0bf2c87242c7a23c8c2e0e419e44e500c250f6bc0dc25ec0ce929c4ad5ffb7a87950c618f8cee1af4831b4b8e":hex:"":hex:"":hex:"d5b1da77f36ce58510b75dfde71dbd5d" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,0) #2 +depends_on:0 +2:hex:"3771416b162f4d9c5f48a05b7aa73938":hex:"d20a0e5cdb714f01b48e00bae51909f345af05de13217e5d55fc6c2d705aea550420d9a458594d825b71e16b36130020cf5948fe813462061c1a222d1ff0e1e4b3d21ae8eee31d3260330d668d24ef3c8941b8720e8591b7deec4bd35a3a1f1a":hex:"":hex:"":hex:"3cbd7d53ac1772c959311419adad836e" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,0) #3 +depends_on:0 +2:hex:"f2bad8f7dab3f5886faa1cf6e1f52c87":hex:"4df54a483b4510ed76049faae14b962fbb16459d1f6b4f4dbeca85deded6018361223c893f9442719c51eb5695e1304a1c2be8c05d0846b6510a9525a28831a8efcbd82aa50540d7e7864e2b8a42d44380cdc6e02eebb48d0b5a840b7cdd6e04":hex:"":hex:"":hex:"0062d822bc549bea292c37846340789b" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,0) #4 +depends_on:0 +2:hex:"1c5760aa0fd4ce308735b28682b67246":hex:"89defd4445061c080e4762afac194b9f79c4bb1ed88c961af41d9d37bd388a1d45c82ca46f404348a2ae5e22ce00aa35ebc7c5051d8800890d44d25284489efcbd1f5e2b16e403f6921f71bbdfcf7b9aeddef65bc92fbd1cb9e4ea389aee5179":hex:"":hex:"":hex:"3baf81155548afca67d57c503d00a5b4" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,0) #5 +depends_on:0 +2:hex:"b72b9451a5e866e226978623d36b3491":hex:"2713d74affed98e3433559e17d240288bb1a1790904cd7754cad97007e205a157b8ddca704a3624413f2ec8361ccd85442fb0b7cc60a247f0fd102cef44677321514ea4186d0203ab7387925d0222800ce2078c4588bc50cdfccbc04fbecd593":hex:"":hex:"":hex:"047a50890c282e26bfede4c0904f5369" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,0) #6 +depends_on:0 +2:hex:"91b955a3e7eccd7f07290cba4464baff":hex:"b160465448894c7d5ee1963bb3e1a2f3f75fcd167ffa332c41c4c91c1830b7c07413bd580302958aa6fa81588ad2b3173698a4afafda468acb368dbbd524207196b9a3be37ac21ba7a072b4c8223492ee18b48551524d5c3449c5c8d3517212e":hex:"":hex:"":hex:"af2c062fedb98ee599ae1f47fc202071" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,0) #7 +depends_on:0 +2:hex:"d08114670c4f6016a4cf9d2da3e3a674":hex:"38dfbfb52c185acf74de00b5a50f0cd9688286747ab340cfe9ad30d38b390fd2443bfd7ea93941d8262ae0f66b0eab4ff64ba59a2ff940c3c26fda103e0d798dbcaa1318e842143975673af8408b5af48dfbaa56ca4f9ddc87100028b4a95549":hex:"":hex:"":hex:"55030fef65c679ecaffb0dc070bfd4d2" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,0) #8 +depends_on:0 +2:hex:"e2af9abe8770e33798a5f05b22057d24":hex:"88fb2a8020e604ea64a620f4704078857062cc97e24604c30de4c70cbf5e5bea0f0db79d16f4db636a2d6cd992c5890389a40cfe93967eac609e5b9f66788944285758547c7136ef2ee3b38724ed340d61763d0d5991ece4924bb72483b96945":hex:"":hex:"":hex:"a44f0cfa383916811fffb2e0cfc9bfc3" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,0) #9 +depends_on:0 +2:hex:"ae30f1642753c5cb6e118d7ff5d59f1d":hex:"340def3420b608420d81b4ea8252a3d86d3e1dd7597e6063ed923a73a7b8e981e6079f7f0c42deb9f4ef11d2f3581abadf44b06d882afdc47896777ce8dafd85ec040f7873d0e25c4be709c614a28b708e547266ac8f07f5fdb450d63bc0c999":hex:"":hex:"":hex:"c7e7670145573581842bd1f3e0c6e90b" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,0) #10 +depends_on:0 +2:hex:"711ecfe467d6f83bcc82e566729669af":hex:"21d6c822706d1af09e4d233c0ebac7f4ec60c7be2500dd41a85a19b2dc5c7da27f8a82164bd2a644218cb5ac283c547da1064784413eed5ecf32fadd00357abaae81225ac8d0391ead533362cff56798825445d639b0b45e0312aa7047c00b4d":hex:"":hex:"":hex:"d3a0d2c457f5e9d1328a9e1d22b6eaf6" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,0) #11 +depends_on:0 +2:hex:"f9b22152bc0eff1ebf0bfafeea40aecf":hex:"4ee32f0aeadb3936e17f1aa3b18c10f773def5f83500c2ba96f84408a2521c1258f6be9aa5cee528746629aa2b8118ac41dd98ef1b3de31d26b8c2ad3442081203f5ef21df409df3381fbf2e064fbaec64d731dc93b3218e34bb3b03bfd88373":hex:"":hex:"":hex:"86009b14c4906a409abe6ca9b0718cbe" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,0) #12 +depends_on:0 +2:hex:"5174e76e904ff1471367ccace9c66ed9":hex:"fa81535670275e8ab74121377cf88a4742dd0d7a99cf06eb9c2b4fe2b03423dbe441201144c22a9fc0ca49f5ef614987a2271cc1089d10ee01b25163c090a1f263797e4f130920cdc3b890a078e8abbb070ded2e8fd717f4389f06ff2c10d180":hex:"":hex:"":hex:"18d6fcd35457d2678175df36df5e215d" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,0) #13 +depends_on:0 +2:hex:"73c372f60519e8eca371eaa13fb54f88":hex:"930c290a797b85d58b52d0d92356436977b2f636f07d5a80c987fb7eea6b750cceb9eb87860547ab4029865a6810fc5c3663c4e369f290994461d2e9c7160a8b5985853bd9088b3e969f988fe6923b3994040eeee09ad353b969d58938237cfe":hex:"":hex:"":hex:"f62c7cfbe74555744790bcc7930e03c3" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,0) #14 +depends_on:0 +2:hex:"75ba8ddeef24f9f5b00b426a362c4f02":hex:"7065d128ddb2fc6ea31f4110b6c0934ed112c51d74a4a0741a0843d8befac22902a01353322674c3d58935144a0f8f171a99dbeab71272ff7518c46cc7ebb573adbf95bff8ec68eeba5e8ec1221655aed8420086bda89c7de34f217dce73ccab":hex:"":hex:"":hex:"700761857ea2763e8739b8f6f6481d1c" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,256) #0 +depends_on:0 +2:hex:"14051b57277bc3d3bbae51bdecfb9f5d":hex:"82c80d922c47bbec0f664dd623e22a11a3b84d308351e45e30ee286e89547d22c43e17b3ca0fa08f77eef1001ba696932e9ee890e7aac4661c138e5b5ce36773d3120c35f8c94e0a78ffbf407a63ca435392e17c07461522fdc1f63f037aacff":hex:"b70e7c1c4b8e0f1770e05b29a93f9d7a6540f23ab84136b05b161d85e5f19251":hex:"5a737c128bd69f927f8f3ad68f93f6356d5f4ec0e36b6b50ced43dcd5c44dbc2":hex:"a4e6c754194a09614994b36ecce33b55" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,256) #1 +depends_on:0 +2:hex:"4526b268128ea35f8558b4e1d08388f2":hex:"952f3f179cbbda27ebd30f4fc31bf96baccb2adbaa9c090bc0f37044a44e85b3bc668cd3533faaf56b5da9242844d65733f7ac1f55c38b175749b88e18d19672b7bdab54e0ababdd4519fb07e0c25578f64ad40d0beb0a26275d5e2f4906aa70":hex:"6b167c7cebea2e585ab974b60c4d305a113102ca8c3dc87651665728c4c675ad":hex:"a038f1ca1f420eae449791f13be4901bfb91e41e052e02635b1f1817bd8969b1":hex:"745ec376282e20fd1f9151f7040ed94a" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,256) #2 +depends_on:0 +2:hex:"c1aafa90f394e0ba9a528032dc6780d3":hex:"75fd042bfd994de2c92e5aa505945ec93bd7cf366d86a356723fca3c9479ee17fb59c6ca8ba89784d43f06cdad113e5081e02427ee0714439d88dc1a6257fc91d99c1a15e92527847ab10883cc8f471cad8cf0882f5b6d33a846a00dee154012":hex:"c704164ce80a400cb2f54d1b2d7efa20f32b699fa881bfc7b56cfd7c4bee1ea6":hex:"f3baff4b6f42c8e75b70c2a72a027b14a99ae49a5a47c7af0f538843c94e1a69":hex:"7af9113cd607cdb4c6534f401fe4e96c" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,256) #3 +depends_on:0 +2:hex:"e6e726b72e7b264a36ec0cd60d4578b5":hex:"0c3c6dd706076d6484478347559b495d7ee898c39cde06027bc99f7bf69ce1140ca04602265e1308af6dd6446a1cf151749b22a99e8a05d30cc3ccd00e663bc1bc37e08ee62834fcc52a4bc8c1d6442544187484f81dc729417d5bedfcab5a54":hex:"d84b978483c0bd8f8c231d92ea88ac21e6e667215804b15725a7ed32f7fc5dd7":hex:"9a8971f6c559f7f197c73a94a92f957d1919ad305f4167c56fe729d50e5754a5":hex:"e16ee5bceca30f1fbcadb5de2d7cfc42" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,256) #4 +depends_on:0 +2:hex:"0272d86db283244eb7ee0ed8c8054b89":hex:"a08ce39f2f671e1f934821a8db9070f39a734a7a20e70307fccca17db15bb4e8a421600df11d1a6e7806a14826739322c8043649ea707180f1d00dea752c2c36398030519465864c4d38163f5b0dd5be07dbc0ae29693ad4a67ca69f28414634":hex:"aa97055cf46ba26465dfb3ef1cf93191625c352768b2d8e34459499a27502e50":hex:"dddd0007eb29fdf942220e920ca0637db4b91cbf898efd2696576ff6bfacb9d1":hex:"9db0057e39ca6e0f16e79b4f8a0ed5c7" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,256) #5 +depends_on:0 +2:hex:"4ad8f72a0d0e28a758722b20e3017d7e":hex:"89af36a1c53f730c1b818b26aa510627b17e6f9da51c8e53930de883b7cc7a3e8c3c463c910646ac3ff08f05bca8e340daf9a322d133ae453fdf7e6860a27ff4495c89875431ba9de3e4f3247cda8c62acc86f7066448f639d8ba8b5249337f8":hex:"9d060b7ed63bdb59263c75ebe6a54bf3a4ac9c9926ca8fb49caa905a2651eead":hex:"016099232dc44bb7cdb492f4955ab1aabc5dc0b5731447cea2eb1d92e41482d1":hex:"4b658e95adae4bf0c418fded4431c27f" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,256) #6 +depends_on:0 +2:hex:"aa19b944c2e1b9d27933bc87322bdf14":hex:"dc8c60dd42c85fed86cb32af035bbde5737526eb07991397c853256f2f0cb311bce70e1c5e32fc3510402d7d7e3de36fa5e584234daf391bc53cc651e001ab7fcf760679b3c82057f9d09bfdcab8e158d4daa63b20c0e1102f7a06bf5a2788dd":hex:"6b98fec5f7de8098ff9df80f62473c73831edace832a767abf5965ea8bf789ba":hex:"cc998bd5752f9c96ec35d9658cc8b3833dd6ab80c7accd6777c06c2cf7c01e59":hex:"fc58833e0e27f7705e4937dd2aadb238" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,256) #7 +depends_on:0 +2:hex:"10c8c17a25041e2ef0d3cc80671e4cfe":hex:"513fb96b6164ece801e52855aad28cb80131e7872d8432d27a974fb62d8d0100bb7ebcb8f5c066e230377a8847d6798c3d8090469b9719a80ac956ac33186b00eb8ca64c5530421f93932bc7c98ee92651e85dab562483bdb189676802726647":hex:"240f36a0a598fe2116ffa682824f25acc35132f137f5221bc0ff05b501f5fd97":hex:"22a5eb5aa00309a762ab60a8c2647eebe1083f8905104b5d375ed1661b4c8478":hex:"145a16109ec39b0615a9916d07f0854e" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,256) #8 +depends_on:0 +2:hex:"cea0c3c12be683c0f27693650a6a3d7d":hex:"df8bc70e45fe14abb02c1b9a9754c37497fc2f67709edd854196fc4d074b12797ce7cb292f14cb1d6904abf32bf229299db5ccf5a791a3b8cd3e40a64f38f6b57df759a863e09d7676d2f3ff2762cdab221151000dba32a67f38cab93d5b7a55":hex:"bf2ac545d94e318066ff88f39791a8385e1a8539e99ac4fa5a6b97a4caead9d4":hex:"846efef8672d256c63aa05a61de86a1bbc6950de8bfb9808d1c1066aef7f7d70":hex:"8d8f0389d41adcac8ca7b61fc02409c3" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,256) #9 +depends_on:0 +2:hex:"1b782af2545352631983dc89945ffc37":hex:"51930fb7095edef3fc20aca2a24127f03d3c4b983329e013ad8a35016f581dd7b2d11bafbf971c1fdefd95a0024195e6e90a60ec39b1a8dbe0cb0c3aabf9cf56b662efc722b2dffa6c3be651f199cbc3da2315b4d55aeafd1492283889e1c34f":hex:"1b6295986f6fb55dc4c4c19a3dba41066fdc0297d50fb14e9501ba4378d662ed":hex:"6e66ff63fc457014550b85210a18f00beab765f9e12aa16818f29d1449620d28":hex:"78dfcb662736a831efaa592153a9aff9" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,256) #10 +depends_on:0 +2:hex:"6580f6df5c8de7c4a105c11ed44435c2":hex:"d37403db6f84a7ba162e1cc351fe2e44d674ae8606280c9dac3e3975f30cbe1c9925e502a9804b91aada5cc97b259b90ccb5b8103394d9a28f0709fc9b5ffe9d73ad3672e02064ea68cebe3face5d823ee605c46c173db591135f564558dab4c":hex:"97486a5e6ce6c6cf9d3f9a313d346cbc34b2bd54db80c5f8d74d6f6939f89519":hex:"8377fcb52556f9974f1aa325d6e141d7b81355bd160abbc86e0007571b3c1904":hex:"77031d3474303470dca9336b1692c504" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,256) #11 +depends_on:0 +2:hex:"f5303f148d6d6faca90aa88b07ab2ba9":hex:"a0de51b8efa44b8245dba31d78f7840b2b7abced4e265b4cd9628eabc6ebbccb0f118dd8cc958b36dc959e22c4a03dafa212eeedec7d25ee6c5961187bee83b1ed3a75c7bdd9d0713b16cc67e68231f4cb274c8f3dfcc7e5d288c426a0d43b8f":hex:"8d1fddc11dbad007e9b14679a5599e5e8a836197f14d010f3329d164c02d46d6":hex:"9ceb6570568455d42a7397f8ca8b8af7a961a33a73770544cca563c04bc919ca":hex:"9882f0bd1f6129a78b51d108e752b2d9" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,256) #12 +depends_on:0 +2:hex:"5a799c58985aa2898cc8fe8e5bc4a9f8":hex:"dbdbef9d217e9051025c321b628c1cc823d508ffdd13fc4edbe8677658a57ef5b64395a6b7d62c0e93dc0956ee0217ec48ae054f1d4680023cc1b2af666efa9e1458cf6b0dae72eef2392e93687bd1fb5f366bb2cdd12937ad09724e39db4189":hex:"8c179b35739e75719e74f7c3e038bc06eb3e212d6ade85275cfebf12b2dce2a2":hex:"af617f2e228adde3edaf52a7e5979476dbb9cd2956a1737d93a16563bbbb4888":hex:"49a04f3b4ef052747c7f4e77c91603e8" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,256) #13 +depends_on:0 +2:hex:"8f5b51983a8156a529f559ac3afebbf0":hex:"bf22b182d39622e941017285adbdfe446c3d1a72601d0e5a15674f3b1b260170b1b2ab6b588a0267d86776a5d4ce80e132d7135a581af75ea6de65153680e28ce35ce78d0917b4932000d62260149e5a3ae72bc250548390b664f53c697dac45":hex:"4cbb5b2d6e666d5dd3dd99b951ea435cae5a75d2e1eb41a48c775829b860e98b":hex:"a4b4171c2592516404434932ad0a8ee67bd776a03479b507c406405b3d8962bc":hex:"cab49631733f06e3fb3e0898e5ad22e7" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,0,256) #14 +depends_on:0 +2:hex:"9f305a77cbaec1ab408cfc0eb89c6cbb":hex:"1e50fada1e76a0d243e6f64c36a173ddc1f47a1dab834f5cd492568792958d5be22cce3110c8e8958b47f07b5c63f86b254942361d4d553e47d36103f47cd7f0bbee27d2e238b1d85671afe8284ee1fd2a431a5f69b2df73e95341c3a2e4fe4b":hex:"c254f3b40e773eb09053b226820f68cafa3458ad403ad36f715245a854752a93":hex:"699e177b7be3353c45ce7b7a0d573b00087d700a9f2c1cd2e370e05d4ddadc86":hex:"bb6b02b25a496f29245315f58a16febc" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,0) #0 +depends_on:0 +2:hex:"e09f65dcffc0d3a4d84bacc41617a4e46ce5184eca011049ab657566f728e4aa28315ffac166ebe50e1269b01c95b3a2":hex:"545a783ae97d827ed0b81d9752ad0f7e965f511b1f5dae0f872e9ec37cfe63af86c1d15e153887989b605773b16ad5505e65f617cfa8ef46547c4c3f9d0c4fd0b6e1cff5ca0f1929266fe43ba8f45ad664cfe5e90903a9cb722b42ae8989c148":hex:"":hex:"":hex:"1e77d7cc18775fef9a3d3e00903da01b" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,0) #1 +depends_on:0 +2:hex:"056cd44c8847d89da05fbef95e9660d589046b0c02f9b42c17fd8b069f831c73cd896005ec080113589b6f07be6e42ea":hex:"dde6c0850fe642602eb222ca7371213c598cef8c3e71e0593ea8edb54e1bed130b9b0aebe0893093b950c52f56eb9b338aa4bd01dae030515726ece1bf751660b4a3602da6400e4b94edebba646b5c3d4e64ceea1c4f14b7a19f0142783247df":hex:"":hex:"":hex:"a790ab939e63555d02ea1e9696051725" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,0) #2 +depends_on:0 +2:hex:"73c72c7dfe138ef4b9817d41b9722b3940762b59bda26b3f6bb8b30583e01d088a29726b71d36ffeebdb387010cb1bb6":hex:"6fe09520e26f5abece0fceadc54913c650a9f55725af45a9a5f373d09b9970b8706b9041d0189a204f6a4eb527dfa86584a3bee3265b809c3932ae5e7228194a3cf7592fc9301c833b45a53be32b9caec9f0f91ba86519f12b0b235f68419c1e":hex:"":hex:"":hex:"798d997f46ff7cc4206994085340325e" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,0) #3 +depends_on:0 +2:hex:"cdba7c7033c34852b7bc1a6b33edab36f41d563bd0395d1001c02ffc0c42ec8595ed2b5ddabc923372e3b6bb457833fa":hex:"532960c23c8c8b2146576dde52fadc985134914abf42ca1c5f47206937fda41289ae5d9f935dc4ce45f77cad230a4f345599e3bae4071188324483a0b93593c96d8b6ac6c0d8b52f8795c44171f0d8cd0b1e85dc75ce8abe65d5f25460166ba0":hex:"":hex:"":hex:"9d48160aca60f1a82baaa8a7d804a3d8" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,0) #4 +depends_on:0 +2:hex:"02cef01aca992f60aa12db4b2c441689e4972a6f9deaf3663082afed642c1502b67b42d490af1c52c7e6eaf459882eca":hex:"9216c9a833f81953792260a688eb7c3dfc85565ae6a6033203741a763db056247808e0ecd5ba1fc4549c3a757eba535adc786e810ddaae9a2714d31f5154f2c3ee81108669f1239f4f4efd6e18aabfa2d88f0ac25f4740108f6cfebffeb2d857":hex:"":hex:"":hex:"d6378bcf43be1ad42da83780c1dab314" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,0) #5 +depends_on:0 +2:hex:"d7d80084e9d1fbb9315c3bce1510dbf22cf11fa54177d913a3b04b64cb30957395bd6f3d7e3d866d1be41b29db9ed81d":hex:"80d4741e4e646748bb65e1289f1f9b3c21bffec4d0a666b301f199d76b4a83464583057079b069946b03d6ac81ebf9e6fa8d4081120f18bf58286a0c4de7576f36f3c7c353126f481a065ac28bdf28e13cd0c1e7911db6343c47d613f1750dc6":hex:"":hex:"":hex:"9165a92ed92248b2d237d9f46d39bde8" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,0) #6 +depends_on:0 +2:hex:"df5a68d3bede467fd69716f5f8fbac297594b8573921afb864ba76aaa6dd89e83b89e359a5a0dd1aac9b4acb9573d218":hex:"52df6336f93781115c2a77bd8f99cb717871fe14707947a21f6093dd9205bc378acf61329f8831369b4b1af0a9edfb25d74f5863f26859ad9c920767b113c47ed2690053bf9a2f7c7a67a8d680e08865720b9e9f7b6ae697e3c93e66f24b6ddc":hex:"":hex:"":hex:"c542cf248a163bbceee7b9f1453bd90b" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,0) #7 +depends_on:0 +2:hex:"2945527372ff71edfa5776f55f7e4a247544aa6de974e81b2eba5552843ab6dfa248695f4f3225a43d4bf3672c3a6b2e":hex:"aa560af2132cbd0624a69c7a7e733cd59a4f2d4e61d2b830087bd88f30fa792c7e4d3168fa86a10f7619d5b9dcf4f7bb08b350ba6a6bfc0fdfb7ee7aca07260c9a11abe49963c36efaefa94d2978ed09472bf93cc873d0f24c000762bb1402cd":hex:"":hex:"":hex:"33af0134eeca279dce5e69c2cda3f3f4" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,0) #8 +depends_on:0 +2:hex:"b30cb767125674f6099a5cf7cb2e4f5b6c1cd1e32ffc1e393b1c5698b52b37f971f12521a7c1ffaaf3233d5391bc4c86":hex:"2d42b00248d95d9378a2aece40d636bc1ab22edaaa64daa34335195a9efa4c1b58f13ac184ca2be52e15c3a977abde2aa505243fc106c4ea6f0671fe0f209b106ea8965645af73d8ebb8a80251db2967149c701cfe1d157cc189b03bf1bff1ac":hex:"":hex:"":hex:"1e10eff9ceebc7e5f66e5213cb07fca4" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,0) #9 +depends_on:0 +2:hex:"c962a2da4524f08adcdd5ceddc04e669ad6154aee06164645e80c832506b98f9919451c7ec1d3a6a9704f83def8f6e2d":hex:"a1ff68a85e437475b1b518821dbaac1730071a4ddd3255361778194fb0cfe3293e38df81527d8b8da15d03acb26467b6b53d7952441b79f95b633f4a979d998fd0417b9193023288b657d30c0cb2dada264addf9d13f1f8ed10b74e2dd2b56b3":hex:"":hex:"":hex:"58990069b72b7557c234d5caf4334853" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,0) #10 +depends_on:0 +2:hex:"a3cc1fe561d03a055e8eedaa0e713be490c4bd4c6839a5b98c2ac0139bf215bdc46783d2a3e6b9d15d9b7a8bfe15104b":hex:"207267911c12125cb3012230e4fafd257777ccbfb91653f77e4c1287574f9b79d81af7fb304790349dd457983cc99b48d5f4677ccd979fcc6e545cbf5b5c8b98102c9a89ae354349dbdee31a362d47c7cdae128034c0f4c3e71e298fe1af33c6":hex:"":hex:"":hex:"ffd1d259acd79111a6fb508181272831" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,0) #11 +depends_on:0 +2:hex:"ecf186071b81e0ed384d4ebfb5bf261b4054e2e6072b51d21dfb6817adc51ff1c8956ff3612767538cdc8d73fade78b3":hex:"3b9aec9f8bf8495004c5e4e731e5c347988e787caf003f001e68584e3510a6abdedffa15895702c2d57c304300f4f0af80a89bcc36b3cea2f08a0740236b80cfd2ea6e5cfe4144bc4ae09270fb6bc58c313dbaaedc16d643fc0565171f963222":hex:"":hex:"":hex:"a2d917f5ec39a090b55d51713006e49d" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,0) #12 +depends_on:0 +2:hex:"3fcedba86089709aa638d00713150df781d4a93e85f155338e90ff537bcbf017f37a2d62259f5d8cc40ddfb041592539":hex:"6b1e9d45c2ec598de7527b6414a339f26192fc4e3f5eff4b3a3e2a80ee0f2e9743031804d1be12b3c7ff6fbc222db1d97226890addeef0e1579a860e2279292c2f769416b7068f582f6ffc192ae4c4f1eeb41d5f77f0a612b059c47aef8e3d8e":hex:"":hex:"":hex:"aa414799c51957de97c0070fb00eb919" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,0) #13 +depends_on:0 +2:hex:"f4c45fb8f58b7ebf73a0cd81c6a26686977558d4b8bf1cedfc6bd3754de6aaed5008fd72208437c54d8feb9a16ce3224":hex:"6d170cf472ea07da6146a7087ed15d3f5b6ad72b8c99e46bae3b89e49a6e63467199ee16096516c2362dbd181bf5343a29fd0932d72eeb019fc3bfea3a3b01ffc2b985e341cfb6479d9dc71e2197b5cffc402587182e5fe93b5a8cf75eac2e42":hex:"":hex:"":hex:"f557f627688fe63c119cf0f25274aa74" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,0) #14 +depends_on:0 +2:hex:"7120742a7807b66c5a9b50995d5494a5b9451bb795393c0d8a30ae665879269408f8297d49ab87410a7f16a65a54b1cb":hex:"c08a6f9797ea668cd14ba6338cb5d23c0921e637e66a96259f78e33e45aafd035edb44394cb459453b9b48beac1e32d3b6f281473cda42fb6fd6c6b9858e7a4143d81bfc2faf4ef4b632c473be50a87b982815be589a91ca750dc875a0808b89":hex:"":hex:"":hex:"521973eac38e81de4e41ccc35db6193d" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,256) #0 +depends_on:0 +2:hex:"add2bbbab76589c3216c55332b36ffa46ecae72072d3845a32d34b2472c4632b9d12240c23268e8316370bd1064f686d":hex:"6168fc1af0b5956b85099b743f1378493b85ec93133ba94f96ab2ce4c88fdd6a0b23afdff162d7d34397f87704a84220bdf60fc1172f9f54bb561786680ebaa9bf6c592a0d440fae9a5e0373d8a6e1cf25613824869e53e8a4df56f406079c0f":hex:"7e084abbe3217cc923d2f8b07398ba847423ab068ae222d37bce9bd24a76b8de":hex:"946bc99fab8dc5ec71881d008c8968e4c8077736176d7978c7064e99042829c3":hex:"224ab4b8b6ee7db19ec9f9a0d9e29700" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,256) #1 +depends_on:0 +2:hex:"8964ebde61f0c4e23f8e91244ae9682ed0b17e424edd4c025b461a2d209a538583f29465df3f89cf04f703b771ff5c90":hex:"4db8e8a27fe7a0378e37d4cc01b6a465d34be91f48c52fdc1023ef2ea1241082f522805bc8777fda6c10e3d441b58f648edcd7d4df3df8c8a398d7b005c4fd6f41c9b033bd38fc5f577069251529b58273f6a9175feb3978798fdeb78a043232":hex:"5eb3fb44784f181852d80fcf7c2e3b8414ae797f7b9b013b59cf86b9d3a19006":hex:"3eec358f7f9e789e4ad5a78dd73987addbf3ae5b06d826cec2d54425289dc9af":hex:"9a66c015d2550e3f78c44b901075fabb" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,256) #2 +depends_on:0 +2:hex:"98784aa794df5400890e6803f06d886aeb0833b1fea28a5f7952397aa21092ceafdb9194079f3609bc68233147c778e7":hex:"7338521e8e127e70da259b37f5f5cdf83079bdb4024234b8ceecfba8d8c3f1c8510ff91f3bd08f2c54f11b534048a320a15ba0fccec8da34d4ef7f49ade4847814c859831907992d0adab27046324d4d9a853eb986b8de25b34ea74eb3d11048":hex:"b14c5314aac11cb43f45730e474b84fbf5d1480d94d0699b80e3570f6636aa72":hex:"d6208912348236feee1d258092283dd9db75899769dd109cc2f0f26d88dcc6bf":hex:"5ec75fdd1ed3a742328e11344784b681" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,256) #3 +depends_on:0 +2:hex:"fe9b7df306c4ccd02afd6142c6650418325617945147de436a55e78aa45866116d6678e013a0e2c5a13e0d01fbd84039":hex:"c4da56f4239fde0bc49b1d852cb36c80205f9e99e5995a80be04bbbba15f25b8d054c397a34cff1326a71f0acc4f7942795cabc3fa46339dc54b4bf7f11c095af8503004d97c485acec8815d1404674592c896ecfabefcbf222f4fe5a3ced0af":hex:"086d09a6ee20c69bf5c054ebc6250f06097c8da1a932fb3d4b1fb5f40af6268a":hex:"44e64b14c49ebb75c536329bb41ab198848849ca121c960db99f7b26330b1f6d":hex:"7aa3a7e159d194399fc8ef9eb531a704" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,256) #4 +depends_on:0 +2:hex:"c0d47ee2328185df2c299d270e11fee26df753a5b4f899fdc0dff79eb50748232f9f79cf3f5e9bd4a26a48e743843b02":hex:"a6b5dd5f1bad95331caae5852be50a26267af655c98feb8b66c45a8ae2ddfca270ab0d8023e43e6e22a7b5904d63482f045e85556b9c105cde0f3eb7b1fff1026086c80b195196803b5f664362b659578894d6551fb7c4566eec02202fdc298f":hex:"3b575d028046e7f6005dfcdfcdcf03ff77a9cacd2516bcdff7f3601a9a951317":hex:"f13b58daed46f5bf3c62b518ab5c508dd2bc3e33d132939049421ff29c31c4f0":hex:"8469dfa89453d1481abedd6cc62e4e44" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,256) #5 +depends_on:0 +2:hex:"a0db812a939fbf3942b00be018cff4578b9fb62629c766a50f3518fe634100b1cbc4244ae843fe32125c53b653705457":hex:"7e3dca20a7a977b6616a684e309015cf6a37edd0d85819fe91d074c915b0c9540a8aa486f58685b064851d6164150b1c1b0e2e545c6358d28b2f5263b2fd12c503d271ab6de76d4fa4c604cae469335840328008d8ce5545586b9ea6b21da4f9":hex:"554b297bc32866a52884fabfc6d837690de30467b8f9158b258869e6f4ed0831":hex:"4f688cba5908e0699b33b508847f7dac32f233e6f02cf093efdacae74259f3b6":hex:"9696dd6ed5875cdef4a918a6686455a8" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,256) #6 +depends_on:0 +2:hex:"ff6cd20443a32c9e938f2a617bbb969ba54040b12723b0d452a669b584ba16ffaacbe38af62b5a62e0c67d165d022344":hex:"efcf7536f32932526fe82b3a2333508404727878723fc09cbd902581d82463cf6acf1ddf4217ea6404469193e8db0e7e8c864ae655b49c6a095f80f1ab16985453f0fb729c119d8a3b820034626a93b1f70eb99b6cd8c990dda34a1c6a4b6eea":hex:"8d412208091b987ee0781ff679c50dbab9ef389156f570f27aaf3e699bdade48":hex:"501381ce5e7718c92ee73e9c247965dd5f0bbde013c4b5e625e9af8907e40566":hex:"4f323934adb8a2096f17d5c4d7444078" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,256) #7 +depends_on:0 +2:hex:"bd14779153ed9696d3e5143c50b2050b6acd3ea2f8b670ef0e5f4bedf01705727bf9e64ae859214abe6ef497163f0236":hex:"bfb0931b05a3fe232614e1b1c3060b3b07fb75d23ac10190a47a7245a6ecad5f3834e6727b75acc37e9d512d01a4a9cef6cb17eb97e4d1d7c1df572296972f0437a89c19894f721cbe085cf3b89767291a82b999bf3925357d860f181a3681ce":hex:"0b5dc1cdfc40cfdc225798da773411dc9a8779316ceb18d1e8f13809466c6366":hex:"843eb7297570e536b5760c3158adb27c0c426c77d798c08314f53b59aa72d08b":hex:"1e703f3122455a40536c39f9ea3ceaa6" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,256) #8 +depends_on:0 +2:hex:"64b155fd4b8634663a7e8a602e2b9fe2477be74692643ccfd0b316a025ea6f1fc0dfd0833248cb011082be36cba3c5d1":hex:"a5b15cb1e039d7bbe2db80a32d4f402c7d3c59a45b05255401d1122770dbdb9894841964d5cadc9ae9af007d63e870d0510078885ca402bd222f16d2d27892e23292b65cf370b15d5e5a739ddd13e3e27f7c2e2b945f8e21897c3bbf05d8b043":hex:"aea2fe995be77dfdca6ebaa1c05ba4c84d0e6b9a87905c398a3dfe08aeb26d38":hex:"f4e9e7eb0eea4e2d419de6ad2909d36ec06c79097884bf98981e86dedae366ba":hex:"4a28955dc97936b1c0aed0751a1afed5" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,256) #9 +depends_on:0 +2:hex:"e6c08e8b8d8e418477087911610096f7e0422083a376a77198e9c60fb2dc8c14aff33d7835878b65322f1561738b1ebb":hex:"d4e0347c2158b882eb1e165f7f2aa1324d6606fe259ca730b2a3367435cb93b89108e49bd97355215063f63e78e8926b264c8a97571fd4d55882364915b7bd544254c25c2b67cdd979737c7811bcdeef5b052d8fe05a89b3291ef669d5579a61":hex:"6607541177bc0c5f278c11cb2dcb187fc9f2c9a9e8eefa657ba92dee12d84b07":hex:"7a439c8593b927867cfa853949e592baea0eeb394b0e2fe9ab0876243b7e11e2":hex:"420888122f2e0334757c4af87bbc28a4" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,256) #10 +depends_on:0 +2:hex:"4413ff775c9b7d9a3003e0b727e34554e0f615471d52aeb4a059777b372d60332a1a4bcaf906e598581bc5a369b2c933":hex:"a21cf567362fed0edddfd0b1c2d85ff6d2db5484fca8bf90a82da2ab76efcac9286e417628496f37effda150ef4912125aac68aac72e6f900a70192d4ef0b4cc4e9419c93ffb245965ae30c5f8abe20f732d76080bde5a1c6b3f075eb35622d1":hex:"b924d145fc3ecd76f000f12638ef0a49a5d4cf887aa93fc9e5c536febc454f2d":hex:"73dbb40b257e6598744f9107c8e7ff51a080407fc9e80d39d9a4db94f167c116":hex:"84457ea753771ad7c97ce9c03ab08f43" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,256) #11 +depends_on:0 +2:hex:"5e409d56afb6940f9ffa45e0f92ef4972acedd3557b8e0f5418e302f2720ae5289294176045ad3096ea68db634cf5597":hex:"c5a63c886af7ed7496473a6ae2f27f056c7e61c9aca8c5d095af11b2efe1a6b43344f92b37c7b6977ddbef1273e9511d9305fcbe7f32bc6a62f28d34841350362d2717dd00467224a35985b9fecc2739acd198743849dbfa97f458e2e7d6b1dc":hex:"7fda133a23e929b17548a05013ff9c7085c5af9c979057b8f961ba7514509ff3":hex:"bd061292b6bc3d3e71ed01af091f0169f70f23862efccd9e76345ff607dff3ec":hex:"75b35dab3ad5e35c10ee39529a7f840f" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,256) #12 +depends_on:0 +2:hex:"ed2a52169791d7c7d332cf258ea4847c359335f9a6839ee767a8f76800ba28e94858cc9b7f526e62a93603fa2b1caa6b":hex:"0a6155ff422ff6ae9814f81bf353bd3454d0c9892f9f3d730dcd8c87626f813cbe1dff1922fe73e4a319be53f4ec05e965c27f239b1e51869069a7e7cdd916fc1fd6f640bfe4b761a8040f8db37fb5ee7508e7d226c7695fb2a8bd791fe49ef2":hex:"14073a1b4f07f3b594fa43d0c8781b8089dd2d9b8ad266e0321aaa6b71a0d058":hex:"4247fc6886e8657b84369cf14469b42aa371d57d27093ee724f87bf20fa9e4e6":hex:"f2aea2bc23e7c70f4ee2f7b60c59d24d" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,256) #13 +depends_on:0 +2:hex:"f0d3a46501da7ab23d8688725f53f4289ce3bfa627646fe301533ec585f866caafb8131e95460566270f68cd25e1f153":hex:"223d49f99a56cfcf2eb8cca39a8a82ee306c6272d521257f3d7d2a87699111e442fc55a399994d57373141f2207d43a8bbc1e086d67343b7dc2a891853c860fe43fb6be32cf035aca582bf5590cb5001b09b4976ea617fa7bd56da81fdef2df9":hex:"7d12673cad5ad5003400fb94547e2b987e934acf6b930c0e7aec72634bfb8388":hex:"e8583b9983b3ac589a6bb7a8405edfc05d7aa5874a8643f9ac30a3d8945a9f96":hex:"ce72c0ea0e76be6bc82331c9bddd7ffb" + +CTR_DRBG NIST Validation (AES-256 use df,True,256,128,256,256) #14 +depends_on:0 +2:hex:"1e4644df1d01f9a0f31d1d0c67bc9fb9a1ee2223fbfb25520d3881cde2b183b73fe1a8cc5f17796cf22aaaed57607420":hex:"cdac62b5e4ccee8609b1f4b7a8733e69068c71219b6292ecb318b9d3479516807af280cfa20e455d5e96eb6794a3b963957f3c099fd1e1199706d36a06011836af890f3b7b15cda6346a06fdd0f194de40bfbec12b021b02eeabaa34d35b30a3":hex:"8169251ea55cce534c6efd0e8a2956d32ed73be71d12477cea8e0f1ab8251b50":hex:"865d14cb37dd160a3f02f56ac32738f9e350da9e789a1f280ee7b7961ec918a7":hex:"ff11ba8349daa9b9c87cf6ab4c2adfd7" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #0 [#1] +depends_on:0 +3:hex:"1b54b8ff0642bff521f15c1c0b665f3f":hex:"5a194d5e2b31581454def675fb7958fec7db873e5689fc9d03217c68d8033820f9e65e04d856f3a9c44a4cbdc1d00846f5983d771c1b137e4e0f9d8ef409f92e":hex:"":hex:"":hex:"":hex:"a054303d8a7ea9889d903e077c6f218f" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #1 [#1] +depends_on:0 +3:hex:"90bc3b555b9d6b6aeb1774a583f98cad":hex:"93b7055d7888ae234bfb431e379069d00ae810fbd48f2e06c204beae3b0bfaf091d1d0e853525ead0e7f79abb0f0bf68064576339c3585cfd6d9b55d4f39278d":hex:"":hex:"":hex:"":hex:"aaf27fc2bf64b0320dd3564bb9b03377" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #2 [#1] +depends_on:0 +3:hex:"4a2a7dcbde58b8b3c3f4697beb67bba2":hex:"58364ceefad37581c518b7d42ac4f9aae22befd84cbc986c08d1fb20d3bd2400a899bafd470278fad8f0a50f8490af29f938471b4075654fda577dad20fa01ca":hex:"":hex:"":hex:"":hex:"20c5117a8aca72ee5ab91468daf44f29" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #3 [#1] +depends_on:0 +3:hex:"911faab1347ae2b3093a607c8bc77bfe":hex:"2f044b8651e1c9d99317084cc6c4fa1f502dd62466a57d4b88bc0d703cabc562708201ac19cdb5cf918fae29c009fb1a2cf42fd714cc9a53ca5acb715482456a":hex:"":hex:"":hex:"":hex:"aae0c0ac97f53d222b83578a2b3dd05d" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #4 [#1] +depends_on:0 +3:hex:"f959f1bc100ae30088017fae51289d8e":hex:"77d0f0efbc7ca794a51dff96e85b8e7dfd4875fbfb6e5593ae17908bfbddc313e051cb7d659c838180d834fdd987ae3c7f605aaa1b3a936575384b002a35dd98":hex:"":hex:"":hex:"":hex:"5d80bc3fffa42b89ccb390e8447e33e5" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #5 [#1] +depends_on:0 +3:hex:"45a8bb33062783eede09b05a35bd44dd":hex:"6bb14dc34f669759f8fa5453c4899eb5ac4e33a69e35e89b19a46dbd0888429d1367f7f3191e911b3b355b6e3b2426e242ef4140ddcc9676371101209662f253":hex:"":hex:"":hex:"":hex:"0dfa9955a13a9c57a3546a04108b8e9e" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #6 [#1] +depends_on:0 +3:hex:"0ada129f9948073d628c11274cec3f69":hex:"b3d01bcb1ec747fdb7feb5a7de92807afa4338aba1c81ce1eb50955e125af46b19aed891366ec0f70b079037a5aeb33f07f4c894fdcda3ff41e2867ace1aa05c":hex:"":hex:"":hex:"":hex:"f34710c9ebf9d5aaa5f797fd85a1c413" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #7 [#1] +depends_on:0 +3:hex:"052a5ad4cd38de90e5d3c2fc430fa51e":hex:"98482e58e44b8e4a6b09fa02c05fcc491da03a479a7fad13a83b6080d30b3b255e01a43568a9d6dd5cecf99b0ce9fd594d69eff8fa88159b2da24c33ba81a14d":hex:"":hex:"":hex:"":hex:"3f55144eec263aed50f9c9a641538e55" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #8 [#1] +depends_on:0 +3:hex:"004cd2f28f083d1cee68975d5cbbbe4f":hex:"6238d448015e86aa16af62cdc287f1c17b78a79809fa00b8c655e06715cd2b935bf4df966e3ec1f14b28cc1d080f882a7215e258430c91a4a0a2aa98d7cd8053":hex:"":hex:"":hex:"":hex:"b137119dbbd9d752a8dfceec05b884b6" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #9 [#1] +depends_on:0 +3:hex:"f985b3ea2d8b15db26a71895a2ff57cd":hex:"50d3c4ecb1d6e95aebb87e9e8a5c869c11fb945dfad2e45ee90fb61931fcedd47d6005aa5df24bb9efc11bbb96bb21065d44e2532a1e17493f974a4bf8f8b580":hex:"":hex:"":hex:"":hex:"eb419628fbc441ae6a03e26aeecb34a6" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #10 [#1] +depends_on:0 +3:hex:"100f196991b6e96f8b96a3456f6e2baf":hex:"d27cbeac39a6c899938197f0e61dc90be3a3a20fa5c5e1f7a76adde00598e59555c1e9fd102d4b52e1ae9fb004be8944bad85c58e341d1bee014057da98eb3bc":hex:"":hex:"":hex:"":hex:"e3e09d0ed827e4f24a20553fd1087c9d" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #11 [#1] +depends_on:0 +3:hex:"88f55d9ba8fef7828483298321133fec":hex:"16f9f5354d624c5ab1f82c750e05f51f2a2eeca7e5b774fd96148ddba3b38d34ba7f1472567c52087252480d305ad1c69e4aac8472a154ae03511d0e8aac905a":hex:"":hex:"":hex:"":hex:"07cd821012ef03f16d8510c23b86baf3" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #12 [#1] +depends_on:0 +3:hex:"126479abd70b25acd891e1c4c92044f9":hex:"70afbc83bf9ff09535d6f0ddc51278ad7909f11e6f198b59132c9e269deb41ba901c62346283e293b8714fd3241ae870f974ff33c35f9aff05144be039d24e50":hex:"":hex:"":hex:"":hex:"0f90df350741d88552a5b03b6488e9fb" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #13 [#1] +depends_on:0 +3:hex:"a45f2fca553089fe04e7832059dc7976":hex:"5e5a9e1e3cb80738c238464ede1b6b6a321261a3b006a98a79265ad1f635573bba48dccf17b12f6868478252f556b77c3ec57a3bf6bb6599429453db2d050352":hex:"":hex:"":hex:"":hex:"6eb85ae2406c43814b687f74f4e942bc" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #14 [#1] +depends_on:0 +3:hex:"52dbb43241002415966eaec2615aba27":hex:"31cfe60e5ed12ff37d7f2270963def598726320c02b910b5c6c795e2209b4b4a95866c64cb097af1d6404d1e6182edf9600e1855345375b201801d6f4c4e4b32":hex:"":hex:"":hex:"":hex:"2a270f5ef815665ddd07527c48719ab1" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #0 [#1] +depends_on:0 +3:hex:"176200bb44808b5400b24e1b5f56cf73":hex:"f84d395b1734eac4600dbc36f6b1e1599bc7f2608dc8ecb3a55369d7b1b122a09f5ac9c16d9a2be37d2ff70a9bba732fc3785b23ff4ade3c8404da3f09f95a8f":hex:"aef28c9169e9af74c73432d4aa6f5dff9ea4a53433de2ecb9bf380a8868c86e1":hex:"0626ae19763c5313b627a8d65cf1cfba46dfd6773242738b9b81fde8d566ade1":hex:"63c160ed6a6c1fffd0586f52fa488a9055533930b36d4fa5ea3467cda9ffe198":hex:"e8f91633725d786081625fb99336a993" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #1 [#1] +depends_on:0 +3:hex:"19c3d16197ac93bf58c4110c9e864804":hex:"50755cc0178c68ae70befd7744f6f1e3f6a59b3bbe484a744436079c7fae8d83c4965516fb952c63e1d0561d92cccc56037465815c9e549c9adce4a064877128":hex:"5cb82d2c297404f3db1909480c597dd081d94ca282ba9370786a50f3cbab6a9b":hex:"96d130faf1a971920c2bf57bcd6c02d5a4af7d3c840706081e4a50e55f38bf96":hex:"1b0d04f179690a30d501e8f6f82201dbab6d972ece2a0edfb5ca66a8c9bcf47d":hex:"4628b26492e5cb3b21956d4160f0b911" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #2 [#1] +depends_on:0 +3:hex:"4b1edd0f53bf4e012def80efd740140b":hex:"e50c31ebbb735c4a53fc0535647ae1fff7a5ac4fa4068ba90f1fa03ca4ddedecd5b1898d5e38185054b0de7e348034b57067a82a478b0057e0c46de4a7280cd9":hex:"e7154ec1f7ac369d0bd41238f603b5315314d1dc82f71191de9e74364226eb09":hex:"9444238bd27c45128a25d55e0734d3adafecccb2c24abdaa50ac2ca479c3830b":hex:"ab2488c8b7e819d8ce5ec1ffb77efc770453970d6b852b496426d5db05c03947":hex:"a488a87c04eb1c7586b8141ed45e7761" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #3 [#1] +depends_on:0 +3:hex:"1f89c914649ae8a234c0e9230f3460f9":hex:"5e029c173dc28ab19851a8db008efbcf862f4187fca84e4e6f5ba686e3005dba5b95c5a0bcf78fb35ada347af58ec0aca09ed4799cd8a734739f3c425273e441":hex:"b51f5fd5888552af0e9b667c2750c79106ce37c00c850afbe3776746d8c3bce1":hex:"9b132a2cbffb8407aa06954ae6ebee265f986666757b5453601207e0cbb4871b":hex:"f1c435e2ebf083a222218ee4602263872a2d3e097b536a8cc32a5a2220b8065f":hex:"a065cc203881254ca81bd9595515e705" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #4 [#1] +depends_on:0 +3:hex:"0ef2be2d00a16051404fc2a0faa74fdc":hex:"b66c882ae02c5215ed3bcd9e9a40934b09bf48a15fe7558c9d9ceb0ebec63625ea18f7c3ab341d9f7edd8e1d8816edecb34dbd71ae02771327b5ebc74613dadd":hex:"1ebe9893957a5c4a707793906d31bb201e88d88a22abd6baa6461fc61def7ffb":hex:"f81e26744834413cb95af8d438d0050c7c968f929a33e35ee5c6715a0a520950":hex:"687a848b2b6c715a0e613b3f3bb16cf2f056543eb9dd6b8aee8de8aa6fd8a1e6":hex:"a6c4a7e99d08cc847ac0b8c8bcf22ec0" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #5 [#1] +depends_on:0 +3:hex:"eb2439d156c4f51fb1943c26f27de8af":hex:"ad153fd266d9f73b21f4e5e88d3d13ba8325abdec427d5d8f671cfccdbd3510e9774d59a14d9b5472b217b7bcf355436a51965d2dff7c4ac586ab812f20d326e":hex:"e24bd6b69a40fa0a02cefbbaa282f8f63a80e154be338d1b913418d4ff7a810d":hex:"fd40baf11d7cdd77641a2b46916cb0c12980e02612ef59fb6fe7dabbbe7a85c0":hex:"a40019e3b85d7d5775e793dd4c09b2bdc8253694b1dcb73e63a18b066a7f7d0c":hex:"7cd8d2710147a0b7f053bb271edf07b5" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #6 [#1] +depends_on:0 +3:hex:"b23796d88ee5ae75ff2ba4fbbd5e2de8":hex:"b249d2d9b269b58c5355710aaae98be12d8fb2e79046b4e6deeec28adad7e789999847e20de11f7c3277216374f117e3e006bdf99bb8631aa4c4c542cd482840":hex:"79f0214b6b0c5ffb21b1d521498b71d22c67be4607c16300ab8dde3b52498097":hex:"582be1e080264b3e68ec184347a5b6db1e8be1811578206e14ad84029fe39f71":hex:"f5e9c3356810793f461f889d8c5003b1c0b20a284cb348301ce7b2dd7a1c7dd7":hex:"1aa8cf54994be6b329e9eb897007abf0" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #7 [#1] +depends_on:0 +3:hex:"081db0b1620a56afd87c2fd2bebb1db3":hex:"3f1e90d88870a0bd03364036b655495e3e7d51bf67fb64ba0cbf003430af5585f5936b84ab3b8a55c02b8b6c54bea09cf2d77691858c5818991383add5f0c644":hex:"5b98bc83ae8bed5c49cb71689dc39fee38d5d08bdfa2a01cee9d61e9f3d1e115":hex:"aad3e58fdd98aa60fc2cae0df3fc734fff01a07f29f69c5ffeb96d299200d0d8":hex:"bad9039ebb7c3a44061353542a2b1c1a89b3e9b493e9f59e438bfc80de3d1836":hex:"8d01e3dc48b28f016fc34655c54be81f" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #8 [#1] +depends_on:0 +3:hex:"a8427443d9c34abcdcca061a2bbcff52":hex:"b0e9b2192adc8912653d90a634d5d40c53ca4383290a8764bdf92667f859d833c3e72ad0ff41e07fe257b1ead11649be655c58a5df233114e7eda2558b7214d7":hex:"c6cad9fb17ada437d195d1f8b6a7fa463e20050e94024170d2ffc34b80a50108":hex:"be461a9c1a72ebaf28ee732219e3ca54cbee36921daaa946917a7c63279a6b0e":hex:"b6d110d6b746d7ccf7a48a4337ba341d52508d0336d017ae20377977163c1a20":hex:"16ccd63dbf7b24b6b427126b863f7c86" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #9 [#1] +depends_on:0 +3:hex:"86bd02976e6c50656372b8c212cf0a7a":hex:"89900b0febf6b4e19ab8fc5babb4122a8aad86d658d0c2f98988c99fbd8530ff4ad365bd5fddaa15f96537bd72deb5384405b610e6ebae83e848307051fd6c82":hex:"41bf3794ee54647a48a2588fdfdea686f1af6792e957d42f181f2631b207ac0c":hex:"c4478afbea4eecb225448f069b02a74c2a222698c68e37eb144aff9e457f9610":hex:"41a99e0d3f5b767f9bedcb2f878a5d99d42856bed29042d568b04e347624bf7f":hex:"863337529aac9ab1e9f7f8187ea7aa7d" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #10 [#1] +depends_on:0 +3:hex:"e809ef8d4c3d82575833d51ac69481b2":hex:"3e831b7715ce202c95ec85337e2c0061d972169955bd96fbe1f758508c0336b3226260ea5e66f943b538eb115ffe4d5e534cbe58262a610528641629bc12fc75":hex:"4d40c6a961168445c1691fea02ebd693cb4b3f74b03d45a350c65f0aaccb118b":hex:"b07dc50e6ca7544ed6fdebd8f00ed5fa9b1f2213b477de8568eb92dddaabfe3f":hex:"cbac982aa9f1830d0dc7373d9907670f561642adb1888f66b4150d3487bf0b8d":hex:"2814be767d79778ebb82a096976f30db" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #11 [#1] +depends_on:0 +3:hex:"ad71caa50420d213b25f5558e0dc1170":hex:"6a3fd23e7dc934e6de6eb4cc846c0dc3cf35ea4be3f561c34666aed1bbd6331004afba5a5b83fff1e7b8a957fbee7cd9f8142326c796ca129ec9fbacf295b882":hex:"3042dd041b89aaa61f185fdda706c77667515c037f2a88c6d47f23ddadc828ae":hex:"9b1e3f72aaab66b202f17c5cc075cfba7242817b2b38c19fe8924ca325b826ea":hex:"8660b503329aaea56acdb73ca83763299bac0f30264702cb9d52cbaf3d71d69d":hex:"c204a3174784d82b664e9a1c0a13ffa6" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #12 [#1] +depends_on:0 +3:hex:"5fd6606b08e7e625af788814bef7f263":hex:"baf8750e07194fc7172c736e0fdea0a632810d45602dff17ce37adf106d652f87e31b6bd24d21481c86444d8109586118672a6f93731b7438a3f0f39648b83a3":hex:"3c37193d40e79ce8d569d8aa7ef80aabaa294f1b6d5a8341805f5ac67a6abf42":hex:"c7033b3b68be178d120379e7366980d076c73280e629dd6e82f5af1af258931b":hex:"452218a426a58463940785a67cb34799a1787f39d376c9e56e4a3f2215785dad":hex:"561e16a8b297e458c4ec39ba43f0b67e" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #13 [#1] +depends_on:0 +3:hex:"08def734914ecf74b9eccb5dfaa045b8":hex:"6697f889fcf6dae16881dc1e540e5c07f9461d409acee31842b04f93c00efbba670dfbf6040c1c2e29ad89064eae283fd6d431832f356e492bc5b2049f229892":hex:"a6ac87af21efd3508990aac51d36243d46237b3755a0e68680adb59e19e8ae23":hex:"0052152872b21615775431eb51889a264fed6ca44fa0436b72a419b91f92604c":hex:"ebadf71565d9a8cc2621403c36e6411e7bed67193a843b90ccf2f7aa9f229ca2":hex:"c83fa5df210b63f4bf4a0aca63650aab" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #14 [#1] +depends_on:0 +3:hex:"6437862e93060def199029ff2182f1e5":hex:"719d1afcb6dc8ca26cba6a7c10f59cf82345b2a0c631a7879812d6f2d2663b49f9e92daecb81ff7c0790205d66694526477d6de54a269f542cb5e77fe4bc8db3":hex:"5c961db0ac2ea8caf62c9acc44465dcfb4d721fcb2cd3e1c76cdcb61bfaa7e75":hex:"24eabd392d37493e306705d0b287be11a4d72dd4b9577ac4098ef0dae69b0000":hex:"9e4f05c1b85613e97958bc3863e521331b2bd78fdf2585f84607bf2238e82415":hex:"21aaae76dc97c9bf7cf858054839653e" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #0 [#1] +depends_on:0 +3:hex:"cd7a1981c1b7079c1c38f5aeee86db22207cb9faed8c576b1724ca7817aa6abfb26c42a019eb4c2f4064f0587ea2b952":hex:"7f88c3805ae0857c5cbb085a5d6259d26fb3a88dfe7084172ec959066f26296a800953ce19a24785b6acef451c4ce4c2dfb565cbe057f21b054a28633afbdd97":hex:"":hex:"":hex:"":hex:"76c1cdb0b95af271b52ac3b0c9289146" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #1 [#1] +depends_on:0 +3:hex:"0ccdac2fd65a86bf8f8e9ddcabffb9d29a935139f627c165a815b23137eeee94cbb21be86ac5117379177d37728db6fd":hex:"6f61703f92d3192cd982b2e52a8683e0d62918d51b12e084deae06c4a8e08ecfb3d2d30a980a70b083710bc45d9d407966b52829cf3813cc970b859aa4c871fe":hex:"":hex:"":hex:"":hex:"e6c73e159d73c2ba8950cd77acb39c10" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #2 [#1] +depends_on:0 +3:hex:"fbbcc4abfd671296de3e0dcf409a139e35deae126c1941bf1afcc8d3da3a2d65f54a6d317bb6d683a3a77f6266b007ff":hex:"c662ed723e7041877542fdcf629533d4a74393eb4dae4f3ec06d2d1c0d37ed7f519609a8485cb8deb578ae4cbb45c98ef7f2f2e677363e89fb3744286db6bfc1":hex:"":hex:"":hex:"":hex:"9d934d34417c6d0858f4a3faacbe759e" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #3 [#1] +depends_on:0 +3:hex:"1b824790b6b22b246bcc1bcfbbb61a76045476672f917b72e79cca358e650eb29ed49fb0a5739e097f5f5336d46fc619":hex:"c57a5686486ebacc2422236b19110c754795a869a8157901cf71303de1adc6af16a952190a395d6c20e155e690f41922f6f721dc8e93da81afb844f68714cba7":hex:"":hex:"":hex:"":hex:"13e7bf23d88f3bb5a5106a8227c8c456" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #4 [#1] +depends_on:0 +3:hex:"2ea7861e374232cb8ceecbbd9a18fc1f63c31f833fe394f1e19c8ef61092a56f28342fa5b591f7b951583d50c12ef081":hex:"6a0873634094be7028b885c345cd5016295eec5e524f069de6510ae8ac843dba2cc05c10baa8aad75eac8e8d1a8570f4d2a3cf718914a199deb3edf8c993a822":hex:"":hex:"":hex:"":hex:"c008f46a242ae0babad17268c9e0839a" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #5 [#1] +depends_on:0 +3:hex:"39caa986b82b5303d98e07b211ddc5ce89a67506095cad1aeed63b8bfe0d9c3d3c906f0c05cfb6b26bab4af7d03c9e1a":hex:"f2059f7fb797e8e22de14dac783c56942a33d092c1ab68a762528ae8d74b7ad0690694ede462edbd6527550677b6d080d80cdabe51c963d5d6830a4ae04c993f":hex:"":hex:"":hex:"":hex:"202d3b2870be8f29b518f2e3e52f1564" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #6 [#1] +depends_on:0 +3:hex:"a4e25102c1b04bafd66bfe1ce4a4b340797f776f54a2b3afe351eede44e75c28e3525155f837e7974269d398048c83c3":hex:"0a03b7d026fab3773e9724dacb436197954b770eca3060535f2f8152aa136942915304dede1de0f5e89bd91d8e92531b5e39373013628fea4ee7622b9255d179":hex:"":hex:"":hex:"":hex:"be21cab637218ddffa3510c86271db7f" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #7 [#1] +depends_on:0 +3:hex:"6de33a116425ebfe01f0a0124ad3fad382ca28473f5fc53885639788f9b1a470ab523b649bad87e76dee768f6abacb55":hex:"d88312da6acbe792d087012c0bf3c83f363fa6b7a9dd45c3501009fb47b4cfcfeb7b31386155fe3b967f46e2898a00ecf51ec38b6e420852bef0a16081d778cc":hex:"":hex:"":hex:"":hex:"2c285bfd758f0156e782bb4467f6832c" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #8 [#1] +depends_on:0 +3:hex:"b8ab42fd3f6306426602cae0c48eb02ffa7053940389900c17846e1d9726251762095383f2ec3406b3381d94a6d53dd8":hex:"6a7873ccb7afb140e923acbec8256fa78232f40c0c8ba3dcbcf7074d26d6d18a7e78fffda328f097706b6d358048ee6a4728c92a6f62b3f2730a753b7bf5ec1f":hex:"":hex:"":hex:"":hex:"13504a2b09474f90d2e9ef40d1f2d0d5" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #9 [#1] +depends_on:0 +3:hex:"042b524444b9903c1ecb80af21eef0e884115561a15a1ab2f9f3a322edcbf14174f54d315196a632940c2c6f56612c09":hex:"31ba5f801aeaac790f2480fbd2373a76ba1685ebebc5ae7cd4844733ec3cfb112634b3899104dcc16050e1206f8b3fb787d43d54de2c804fd3d8eb98e512bb00":hex:"":hex:"":hex:"":hex:"0a0484c14e7868178e68d6d5c5f57c5c" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #10 [#1] +depends_on:0 +3:hex:"632758f92efaca39615862177c267906ab0424230d481ee0a5aa1a5f66697d3918d4aab3f310b72a7f2d71c0a96b9247":hex:"46dc837620872a5ffa642399213b4eebfb28ca069c5eaaf2a636f5bd647de365c11402b10ecd7780c56d464f56b653e17af8550b90a54adb38173a0b2f9e2ea7":hex:"":hex:"":hex:"":hex:"90432ce3f7b580961abecde259aa5af6" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #11 [#1] +depends_on:0 +3:hex:"7b389118af3d0f8336b41cf58c2d810f0e5f9940703fd56a46c10a315fb09aafd7670c9e96ffa61e0cb750cb2aa6a7fe":hex:"76e92e9f00fc7d0c525c48739a8b3601c51f8f5996117a7e07497afee36829636e714dbcb84c8f8d57e0850a361a5bdfc21084a1c30fb7797ce6280e057309b7":hex:"":hex:"":hex:"":hex:"7243964051082c0617e200fcbbe7ff45" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #12 [#1] +depends_on:0 +3:hex:"e50d38434e9dfe3601e7ea1765d9fe777d467d9918974b5599ec19f42d7054b70ff6db63a3403d2fd09333eda17a5e76":hex:"c9aa4739011c60f8e99db0580b3cad4269874d1dda1c81ffa872f01669e8f75215aaad1ccc301c12f90cd240bf99ad42bb06965afb0aa2bd3fcb681c710aa375":hex:"":hex:"":hex:"":hex:"28499495c94c6ceec1bd494e364ad97c" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #13 [#1] +depends_on:0 +3:hex:"3253cb074d610db602b0a0d2836df1f20c3ee162d80b90b31660bb86ef3f0789fa857af4f45a5897bdd73c2295f879b6":hex:"b06960a92d32a9e9658d9800de87a3800f3595e173fdc46bef22966264953672e2d7c638cc7b1cada747026726baf6cea4c64ba956be8bb1d1801158bee5e5d4":hex:"":hex:"":hex:"":hex:"b6608d6e5fcb4591a718f9149b79f8f1" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #14 [#1] +depends_on:0 +3:hex:"83e4733566f90c8d69e6bcbe9fb52521ff3e26f806d9b7b86e9344cca0305dbf106de855240f1d35492cc6d651b8b6ae":hex:"0e0105b12af35ac87cb23cf9ca8fb6a44307c3dcdc5bc890eb5253f4034c1533392a1760c98ba30d7751af93dd865d4bd66fbbeb215d7ff239b700527247775d":hex:"":hex:"":hex:"":hex:"68d64d1522c09a859b9b85b528d0d912" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #0 [#1] +depends_on:0 +3:hex:"a94da55afdc50ce51c9a3b8a4c4484408b52a24a93c34ea71e1ca705eb829ba65de4d4e07fa3d86b37845ff1c7d5f6d2":hex:"a53e371017439193591e475087aaddd5c1c386cdca0ddb68e002d80fdc401a47dd40e5987b2716731568d276bf0c6715757903d3dede914642ddd467c879c81e":hex:"20f422edf85ca16a01cfbe5f8d6c947fae12a857db2aa9bfc7b36581808d0d46":hex:"7fd81fbd2ab51c115d834e99f65ca54020ed388ed59ee07593fe125e5d73fb75":hex:"cd2cff14693e4c9efdfe260de986004930bab1c65057772a62392c3b74ebc90d":hex:"4f78beb94d978ce9d097feadfafd355e" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #1 [#1] +depends_on:0 +3:hex:"e8649d4f86b3de85fe39ff04d7afe6e4dd00770931330b27e975a7b1e7b5206ee2f247d50401a372c3a27197fec5da46":hex:"78d7d65c457218a63e2eb1eba287f121c5466728ac4f963aeaabf593b9d72b6376daea6436e55415ad097dee10c40a1ff61fca1c30b8ab51ed11ff090d19ef9a":hex:"cc57adc98b2540664403ad6fd50c9042f0bf0e0b54ed33584ee189e072d0fb8f":hex:"ab2f99e2d983aa8dd05336a090584f4f84d485a4763e00ced42ddda72483cd84":hex:"0ecd7680e2e9f0250a43e28f2f8936d7ef16f45d79c0fa3f69e4fafce4aeb362":hex:"08e38625611bb0fb844f43439550bd7a" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #2 [#1] +depends_on:0 +3:hex:"6c79e1556889b3c074fc083a120d73784b888c5acb877899f17ce52e424b84178d144441aa9f328c730a951b02b048df":hex:"c78ff6b9fc91cbce246c9fcc2366d5f7dd6d99fb1325d8997f36819232d5fcd12ccafdcbefd01409d90acd0e0ffb7427c820b2d729fe7e845e6a6168fc1af0b5":hex:"60cba10826de22c5e85d06357de63d6b2ff0719694dafca6ab33283f3a4aacdd":hex:"8943c22fb68b30811790a99b9cbb056e1a2c329185a199c76ba5aeceb2fcd769":hex:"70671a50e8387bf232989d904c19215c7535ad2d0c5dec30a744c8d2706be6ec":hex:"f6b94b671cae8dfa8387719bfd75ee84" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #3 [#1] +depends_on:0 +3:hex:"f5ab77b2a8e370548b88febfd79772144cd5fc8d78062582addd4ff1e5c10094b390e66b3c4efb087510de1b9d25703f":hex:"21a21c9314b37d4ade4a50a5d85995e0be07e358ed9bca19daa867a8d47847105dca7a424f32f715adb8fea5d3a41cfe388872a42ab18aa5cbcd7bde4adc3f8b":hex:"023d582569a7ff1405e44cf09ceebb9d3254eef72286e4b87e6577a8ab091a06":hex:"39597519872d49fbd186704241ba1dc10b1f84f9296fb61d597dbd655a18f997":hex:"3091c9fe96109b41da63aa5fa00d716b5fa20e96d4f3e0f9c97666a706fa56f1":hex:"1fb57058b3ba8751df5a99f018798983" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #4 [#1] +depends_on:0 +3:hex:"f0b79e292d0e393e78b6d6117e06d2e725823fe35bde1146502967a78d99d6bca564f0e2f324272f968be5baab4aeb29":hex:"192054dddac02157a35eb7f75ae8ebdb43d6b969e33942fb16ff06cd6d8a602506c41e4e743b8230e8239b71b31b2d5e3614e3a65d79e91d5b9fc9d2a66f8553":hex:"b12241e90d80f129004287c5b9911a70f7159794e6f9c1023b3b68da9237e8b7":hex:"59e9c3c0f90e91f22c35a3be0c65f16157c569c7e3c78a545d9840f648c60069":hex:"089a59af69f47ddb4191bd27720bb4c29216f738c48c0e14d2b8afd68de63c17":hex:"15287156e544617529e7eede4aa9c70e" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #5 [#1] +depends_on:0 +3:hex:"e3f33843aecb35d01001ff92ab9a0f1a5431ba9de3e4f3247cda8c62acc86f7066448f639d8ba8b5249337f8c353bbbd":hex:"ef081af1f62400a3d193969d689a40234998afb646d99a7c4b9cbbf47e650cda93a90e754a16fffa25fc2a2edab09720b4520c47309ec4f6d9f76f0162af6cae":hex:"e7cc55b72862544a8661b5034e15587b1e5a45eb5dc744f5fa1db9b267f1c3ff":hex:"882d30c888eb8e344b1d17057074606fe232ceb42eb71055264ede7bb638f2a2":hex:"9ce65e95c1e735fe950e52c324e7551403d0ef70ad865bd31fef1e22b129fdd6":hex:"205e3a53367c4a5183be74bb875fa717" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #6 [#1] +depends_on:0 +3:hex:"f30a18d597d8591a22dee908de95c5af74884b025f39b4f6707d28447d9d0a3114a57bc2d9eed8e621ec75e8ce389a16":hex:"fae3d554d12a14e29de1b622922f27559559ca1518c9f800375a37a212e8b9a653cc3700223e9404d5bf781d15fccf638050a1394592caba001cfc65d61ef90b":hex:"54240edd89016ed27e3bb3977a206836f5ef1fba0f000af95337d79caca9cf71":hex:"250611e51852d933ff1a177b509c05e3228cb9f46dfb7b26848a68aad2ce4779":hex:"f8b602d89fa1a0bfb31d0bd49246b458200a1adb28b64a68f7c197f335d69706":hex:"7b63bfb325bafe7d9ef342cd14ea40a4" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #7 [#1] +depends_on:0 +3:hex:"c8dbc3d39beb612811c52e2b46ef76d2b7bd5d3a90ceddf9fb864fe6f44e36687d88158d61014e192f9a3cd474338e13":hex:"8e60115b4af9c8e5606223792539e9ba87e9ef46cd16fcc09046db1ef8d3c036241cae5d61141711818e9e861dbd833632069ebf5af1bd6d4e513f059ab1efd3":hex:"9b56eba0838457f736fc5efa2cfbe698908340f07d4680e279d21dd530fdc8c8":hex:"62c47ece469a7a409e4b2b76d1c793aaf11654e177cc8bf63faff3e6c5a5395c":hex:"4251597013d0c949c53bbd945477b78aa91baa95f1ff757c3a039ccc4e1f4789":hex:"af2f37160940f0cc27d144a043ddf79b" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #8 [#1] +depends_on:0 +3:hex:"a37f9ed6c4e8f74ff16046b0678ef7bd24fcdca247b771ea1ce1fd48e3f5d2067e38aaf64ec59f1f49d96fa85e60ef03":hex:"95da91f4185b254322ef0fc852473a9b9e4c274b242ded8a4eae6f1e2badde0664cf57f2128aa3dc83e436f7e80928a01d93bf25011eedf0190d0bf3619cd555":hex:"b4a22f5598f79d34f0b9600763c081b0200ba489da7028ad0283828545c6d594":hex:"fa3edc0962b20a9d9e1d0afcad907c8097c21d7a65c0e47c63d65cea94bf43bd":hex:"49ba791a227e9e391e04225ad67f43f64754daac0b0bb4c6db77320943231ec3":hex:"32f313ded225289793c14a71d1d32c9f" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #9 [#1] +depends_on:0 +3:hex:"87f85b9c19eba1d953b6613cf555c21bc74428d9a8fee15e6cd717e240506f3e80860423973a66c61820d4ce1c6bb77d":hex:"f22dd3517350176e35e1b7ecc8c00bea4747f0ac17bda1b1ddf8cdf7be53ff8c326268366e89cf3b023a9646177a0dcca902f0c98bf3840c9cbdf5c0494bee3c":hex:"611caa00f93d4456fd2abb90de4dbcd934afbf1a56c2c4633b704c998f649960":hex:"cba68367dc2fc92250e23e2b1a547fb3231b2beaab5e5a2ee39c5c74c9bab5f5":hex:"f4895c9653b44a96152b893b7c94db80057fb67824d61c5c4186b9d8f16d3d98":hex:"a05de6531a1aa1b2ba3faea8ad6ac209" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #10 [#1] +depends_on:0 +3:hex:"9670deb707caabc888a3b0df7270942934732e02be728a4bedb5fc9ca4d675b2f3b47c7132c364ce6292cef7c19b60c7":hex:"bba34e6f4ee27e5d4e885e59f8bbb0dc7353a8912e66637d7515a66e5398d9a8cbd328fed32f71bdd34c73cdf97e0d211be6dabfb0144e1011fd136cf01ea4e4":hex:"9f55da36babd6ea42082f5f5d4330f023440bb864f8ad5498a29cf89757eaeab":hex:"8013a309058c91c80f4d966f98bce1d4291003ad547e915777a3fce8ae2eaf77":hex:"c83106272d44e832e94c7096c9c11f6342e12ec06d5db336424af73d12451406":hex:"bc8d4d00609662c1163dca930901821d" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #11 [#1] +depends_on:0 +3:hex:"6d984c8ab923a7e118447fd53ad287b8f01d1e6112cff12bfb338ecd3ed16bafdd634677c600bdd68f852a946f45c3d9":hex:"ed0e524ed2990ef348dbb15b3f964b12ad3109978d6952ae193b21e94510a47406926620798e71a0ffcbdd2e54ec45509d784a8bfc9d59cb733f9f11fc474b5e":hex:"0a3a32260d04dd7a82fb0873ecae7db5e5a4b6a51b09f4bf8a989e1afacbda3b":hex:"3cbcabb83aab5a3e54836bbf12d3a7862a18e2dffeeb8bdd5770936d61fd839a":hex:"f63b30a3efc0273eba03bf3cf90b1e4ac20b00e53a317dbf77b0fe70960e7c60":hex:"ab9af144e8fad6a978a636ad84e0469e" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #12 [#1] +depends_on:0 +3:hex:"2c59520d6f8ce946dcc5222f4fc80ba83f38df9dce2861412eebb1614245331626e7fb93eedbad33a12e94c276deff0a":hex:"2882d4a30b22659b87ad2d71db1d7cf093ffca80079a4ef21660de9223940969afec70b0384a54b1de9bcca6b43fb182e58d8dfcad82b0df99a8929201476ae9":hex:"d3c17a2d9c5da051b2d1825120814eaee07dfca65ab4df01195c8b1fcea0ed41":hex:"dcc39555b87f31973ae085f83eaf497441d22ab6d87b69e47296b0ab51733687":hex:"9a8a1b4ccf8230e3d3a1be79e60ae06c393fe6b1ca245281825317468ca114c7":hex:"fba523a09c587ecad4e7e7fd81e5ca39" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #13 [#1] +depends_on:0 +3:hex:"1c1207f50b645aaed5c16fe36f6aae83af4924e6b98a7e2a2533a584c1bac123f8b6f0e05109e0132950ae97b389001a":hex:"8ae9a5903da32a38b7c6fed92dd0c6a035ca5104a3528d71a3eacc2f1681379724991a0053e8dac65e35f3deee0435e99f86364577c8ebdba321872973dc9790":hex:"568bfee681d7f9be23a175a3cbf441b513829a9cbdf0706c145fdcd7803ce099":hex:"e32cb5fec72c068894aaeabfc1b8d5e0de0b5acdf287a82e130a46e846770dc2":hex:"d4418c333687a1c15cac7d4021f7d8823a114bb98f92c8a6dccc59ff8ad51c1f":hex:"194e3018377cef71610794006b95def5" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #14 [#1] +depends_on:0 +3:hex:"28254014c5d6ebf9bd9e5f3946fc98e55fe351deee8fc70333e4f20f1f7719a522b3ea9a4424afe68208d1cc6c128c47":hex:"98a0db985544c33990aee0f69655dba7198e6720ce56ff9d4662e26f0c6b4ee7ab599932c05295f6c5a4011085c5b2c861a5a8ae4f572ce614ff2dafc0fddb34":hex:"64215cbe384f1f4cf548078ffd51f91eee9a8bae5aacdd19ca16bcaaf354f8ad":hex:"2e21df638dabe24aebf62d97e25f701f781d12d0064f2f5a4a44d320c90b7260":hex:"7f936274f74a466cbf69dbfe46db79f3c349377df683cb461f2da3b842ad438e":hex:"25c469cc8407b82f42e34f11db3d8462" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #0 [#2] +depends_on:0 +3:hex:"e26c8a13dae5c2da81023f27ab10b878":hex:"fea104f90c5881df7ad1c863307bad22c98770ecd0d717513a2807682582e3e18e81d7935c8a7bacddd5176e7ca4911b9f8f5b1d9c349152fa215393eb006384":hex:"":hex:"":hex:"":hex:"fd87337c305a0a8ef8eef797601732c2" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #1 [#2] +depends_on:0 +3:hex:"8d7dda20a9807804bfc37bd7472d3b0c":hex:"1d723cbc2ff2c115160e7240340adbf31c717696d0fdfecf3ec21150fca00cde477d37e2abbe32f399a505b74d82e502fbff94cecac87e87127d1397d3d76532":hex:"":hex:"":hex:"":hex:"7221761b913b1f50125abca6c3b2f229" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #2 [#2] +depends_on:0 +3:hex:"c02e3b6fd4fea7ec517a232f48aaa8cb":hex:"0820fc21cecba6b2fe053a269a34e6a7637dedaf55ef46d266f672ca7cfd9cc21cd807e2b7f6a1c640b4f059952ae6da7282c5c32959fed39f734a5e88a408d2":hex:"":hex:"":hex:"":hex:"667d4dbefe938d6a662440a17965a334" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #3 [#2] +depends_on:0 +3:hex:"9aee0326f9b16f88a4114e8d49b8e282":hex:"ef0aae3f9c425253205215e5bf0ad70f141ad8cc72a332247cfe989601ca4fc52ba48b82db4d00fe1f279979b5aed1ae2ec2b02d2c921ee2d9cb89e3a900b97d":hex:"":hex:"":hex:"":hex:"651ad783fe3def80a8456552e405b98d" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #4 [#2] +depends_on:0 +3:hex:"1e7a4961d1cd2fd30f571b92a763c2c5":hex:"a9262ed5b54880cc8ecd4119cce9afe3de8875d403f7ca6b8ed8c88559470b29e644fddd83e127c5f938bc8a425db169c33c5c2d0b0c5133c8f87bbc0b0a7d79":hex:"":hex:"":hex:"":hex:"1124c509ca52693977cf461b0f0a0da9" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #5 [#2] +depends_on:0 +3:hex:"ae0b0d2e84f48c632f031356cdea60ac":hex:"554cf6fad1c376ad6148cd40b53105c16e2f5dd5fa564865b26faa8c318150bfb2294e711735df5eb86ff4b4e778531793bad42403d93a80d05c5421229a53da":hex:"":hex:"":hex:"":hex:"1212e5d3070b1cdf52c0217866481c58" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #6 [#2] +depends_on:0 +3:hex:"16b8c7495d43cd2ff5f65ad2ab48ecef":hex:"7cffe2bef0d42374f7263a386b67fba991e59cefd73590cbcde3a4dc635a5a328f1a8e5edd3ada75854f251ee9f2de6cd247f64c6ca4f6c983805aa0fe9d3106":hex:"":hex:"":hex:"":hex:"d3869a9c5004b8a6ae8d8f0f461b602b" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #7 [#2] +depends_on:0 +3:hex:"a2d5eff6f73f98e5b04c01967dffa69b":hex:"59759bb91b3c4feb18c0f086269ec52e097b67698f4dfe91ebe8bef851caa35cadb3fd22d1309f13510e1252856c71394a8e210fdbf3c7aae7998865f98e8744":hex:"":hex:"":hex:"":hex:"a1f99bd9522342e963af2ec8eed25c08" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #8 [#2] +depends_on:0 +3:hex:"ea1f47fe5e281136706419ea9b652967":hex:"0ec7c617f85bec74044111020c977be32ab8050b326ebc03715bbbffa5a34622f2264d4b5141b7883281c21ea91981155a64fb7b902e674e9a41a8a86c32052b":hex:"":hex:"":hex:"":hex:"daf75b8288fc66802b23af5fd04a9434" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #9 [#2] +depends_on:0 +3:hex:"6f072c681a82c00dcd0d9dd5b7ffa2af":hex:"cd7ce90f0141e80f6bd6ff3d981d8a0a877d0ddae7c98f9091763b5946fc38b64c1ef698485007d53251ad278daf5d4ae94a725d617fc9a45a919a9e785a9849":hex:"":hex:"":hex:"":hex:"39c0144f28c5a490eff6221b62384602" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #10 [#2] +depends_on:0 +3:hex:"9d730655366e2aa89ee09332bd0a5053":hex:"854766e842eb165a31551f96008354bca1628a9520d29c3cc4f6a41068bf76d8054b75b7d69f5865266c310b5e9f0290af37c5d94535cb5dc9c854ea1cb36eb7":hex:"":hex:"":hex:"":hex:"baa2a3ed6fdc049d0f158693db8c70ef" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #11 [#2] +depends_on:0 +3:hex:"3363881611bfd5d16814360e83d8544f":hex:"6abfab14cbf222d553d0e930a38941f6f271b48943ea6f69e796e30135bc9eb30204b77ab416ac066da0a649c8558e5a0eac62f54f2f6e66c207cab461c71510":hex:"":hex:"":hex:"":hex:"5be410ce54288e881acd3e566964df78" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #12 [#2] +depends_on:0 +3:hex:"14e589065423528ff84a1f89507ab519":hex:"0d2e446cad387a962ff2217c7cf4826dcabb997ab7f74f64aa18fbcb69151993f263925ae71f9dfdff122bb61802480f2803930efce01a3f37c97101893c140f":hex:"":hex:"":hex:"":hex:"fc2d3df6c9aae68fb01d8382fcd82104" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #13 [#2] +depends_on:0 +3:hex:"974c5ae90347d839475f0f994f2bf01d":hex:"aa04d9fc56349fdd31d868e9efc2938f9104c0291e55ac0aa0c24ec4609731b8e0ac04b42180bde1af6ad1b26faff8a6de60a8a4a828cd6f8758c54b6037a0ee":hex:"":hex:"":hex:"":hex:"3caec482015003643d5a319a2af48fb4" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #14 [#2] +depends_on:0 +3:hex:"b3a110587a16c1eafe51128a66816ecf":hex:"203bba645fb5ccee3383cf402e04c713b7a6b6cca8b154e827520daac4ea3a0247bbdc3b2cd853e170587d22c70fb96c320ea71cb80c04826316c7317c797b8a":hex:"":hex:"":hex:"":hex:"9af4f67a30a4346e0cfcf51c45fd2589" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #0 [#2] +depends_on:0 +3:hex:"55546068cd524c51496c5fc9622b64c6":hex:"951e712d057028158831ca8c74d4ae303c6e4641c344a1c80292260bdd9d8e2f5b97606370e95903e3124659de3e3f6e021cd9ccc86aa4a619c0e94b2a9aa3cc":hex:"2d6de8661c7a30a0ca6a20c13c4c04421ba200fbef4f6eb499c17aee1561faf1":hex:"41797b2eeaccb8a002538d3480cb0b76060ee5ba9d7e4a2bb2b201154f61c975":hex:"b744980bb0377e176b07f48e7994fffd7b0d8a539e1f02a5535d2f4051f054f3":hex:"65b9f7382ed578af03efa2008dbdd56f" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #1 [#2] +depends_on:0 +3:hex:"a0c92565640a3315cac8da6d0458fb07":hex:"6e9b31755c1f45df7d685f86044ab3bc25433a3ff08ab5de7154e06b0867f4e3531ed2e2a15ab63c611fc2894240fdac1d3292d1b36da87caa2080d1c41bcf24":hex:"c6c74690bdee26288d2f87a06435d664431206b23b24f426e847fb892d40d5d5":hex:"4e7dc1adbc8bc16ba7b584c18a0d7e4383c470bff2f320af54ad5ade5f43265b":hex:"c6fb8ee194a339726f5051b91925c6a214079a661ec78358e98fc4f41e8c4724":hex:"c3f849ee7d87291301e11b467fa2162f" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #2 [#2] +depends_on:0 +3:hex:"63e143bd6a87065a00eea930593f9b29":hex:"62c2c790cb56518ed2d8d65952bbd4ab85a56463495c940b94f403a93338bdc96129feea9335b1a3e0ada7cf4c207f4732013bc6a52db41407bf5d6fe9183b3c":hex:"7b4e9ff0c8f8c90f8b324c7189226d3adccd79df2d0c22b52fb31dbb5dfefba6":hex:"49e1aecf2b96a366325dc1892c016a5535dd2480360a382e9cc78bf75b2bba37":hex:"f4ce1d27e759f3ba4a56aaab713642b4c56810c9995fbfc04ce285429f95a8f4":hex:"513111abaae3069e599b56f7e5fb91d1" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #3 [#2] +depends_on:0 +3:hex:"98dc16e95f97b5b9d8287875774d9d19":hex:"2fab4a629e4b21f27488a0c9ed36fc8e75bee0c386346c6ec59a6f045975e29818440a6638eb3b9e952e19df82d6dc7b8b9c18530aef763d0709b3b55433ddc6":hex:"2e9d2f52a55df05fb8b9549947f8690c9ce410268d1d3aa7d69e63cbb28e4eb8":hex:"57ecdad71d709dcdb1eba6cf36e0ecf04aaccd7527ca44c6f96768968027274f":hex:"7b2da3d1ae252a71bccbb318e0eec95493a236f0dec97f2600de9f0743030529":hex:"841882e4d9346bea32b1216eebc06aac" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #4 [#2] +depends_on:0 +3:hex:"5dbac5c313527d4d0e5ca9b6f5596ed7":hex:"c00b28c78da4f9ce159741437fe7f90e4e23ecd01cd292f197202decbbc823d9ce46b8191c11e8f8d007d38e2ecd93b8bd9bbad5812aaf547ddf4c7a6738b777":hex:"460c54f4c3fe49d9b25b069ff6664517ed3b234890175a59cde5c3bc230c0a9e":hex:"bf5187f1f55ae6711c2bc1884324490bf2d29d29e95cad7a1c295045eed5a310":hex:"28fd8277dcb807741d4d5cb255a8d9a32ef56a880ccf2b3dcca54645bd6f1013":hex:"b488f5c13bb017b0d9de2092d577c76e" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #5 [#2] +depends_on:0 +3:hex:"254d5f5044415c694a89249b0b6e1a2c":hex:"4c1cc9ebe7a03cde31860637d8222faeefa9cbf789fab62e99a98d83084fef29eafcf7177d62d55435a1acb77e7a61ad86c47d1950b8683e167fe3ece3f8c9e8":hex:"71af584657160f0f0b81740ef93017a37c174bee5a02c8967f087fdbfd33bfde":hex:"96e8522f6ed8e8a9772ffb19e9416a1c6293ad6d1ecd317972e2f6258d7d68dd":hex:"3aaa5e4d6af79055742150e630c5e3a46288e216d6607793c021d6705349f96a":hex:"66629af4a0e90550b9bd3811243d6b86" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #6 [#2] +depends_on:0 +3:hex:"b46fceed0fcc29665815cc9459971913":hex:"ff62d52aed55d8e966044f7f7c5013b4915197c73668e01b4487c3243bbf5f9248a4fdd6ef0f63b87fc8d1c5d514ff243319b2fbdfa474d5f83b935399655e15":hex:"994d6b5393fbf0351f0bcfb48e1e763b377b732c73bf8e28dec720a2cadcb8a5":hex:"118bb8c7a43b9c30afaf9ce4db3e6a60a3f9d01c30b9ab3572662955808b41e4":hex:"bb47e443090afc32ee34873bd106bf867650adf5b5d90a2e7d0e58ed0ae83e8a":hex:"1865fee6024db510690725f16b938487" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #7 [#2] +depends_on:0 +3:hex:"e1a5dd32fc7cefb281d5d6ce3200f4ca":hex:"bf1ba4166007b53fcaee41f9c54771c8a0b309a52ea7894a005783c1e3e43e2eb9871d7909a1c3567953aabdf75e38c8f5578c51a692d883755102a0c82c7c12":hex:"32e9922bd780303828091a140274d04f879cd821f352bd18bcaa49ffef840010":hex:"01830ddd2f0e323c90830beddedf1480e6c23b0d99c2201871f18cc308ab3139":hex:"f36d792dbde7609b8bf4724d7d71362840b309c5f2961e2537c8b5979a569ae8":hex:"7080e8379a43c2e28e07d0c7ed9705a8" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #8 [#2] +depends_on:0 +3:hex:"d1b7be857a422b425ae62c61e90a192a":hex:"6ac34c4ce22b644632283ab13e294df2093e939d32411340b046c26fcc449d0fd6d14132c7205df303dbb663190e6e86ad12e14e145b6603308241f38d94eb5d":hex:"aacfe8553d5ffef6abc3fd8f94d796cae2079ff04f7ab1b41982003f02427c7a":hex:"01d2d1bc29d6a6b52bb29bd6652be772096ca23c838c40730d5b4a4f8f735daa":hex:"27af728ee07d3f5902f4e56453b6a9feb308ef14795eb5630b2651debdd36d5b":hex:"b03fbcd03fa1cc69db0a4e3492a52bad" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #9 [#2] +depends_on:0 +3:hex:"a2c49aa6f3f92e36266bf267af5877ed":hex:"5684c3eb99314127078484959314d52b3bc50cb3615c0eef6b48850d98aee04c528b0693be13ed1bb4040e8e96cb13c316143f0815cd68d1bb7931a3d9b88a3d":hex:"566522085426b76bdef152adefd73ef0f76eee4614bc5a4391629ec49e0acffb":hex:"30ef9585148dd2270c41540a4235328de8952f28cf5472df463e88e837419e99":hex:"adc46e0afcf69302f62c84c5c4bfcbb7132f8db118d1a84dc2b910753fe86a2d":hex:"4edc4383977ee91aaa2f5b9ac4257570" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #10 [#2] +depends_on:0 +3:hex:"43852c53041a3a4f710435dbd3e4382b":hex:"ab7bca5595084bccdba80ade7ac3df2a0ce198fa49d29414c0249ec3d1c50d271ca74ba5c3521576a89a1964e6deded2d5ba7ff28a364a8f9235981bec1bedfa":hex:"c5612a9540b64fc134074cb36f4c9ea62fff993938709b5d354a917e5265adee":hex:"eee2258aba665aa6d3f5b8c2207f135276f597adb2a0fbfb16a20460e8cc3c68":hex:"a6d6d126bed13dbcf2b327aa884b7260a9c388cb03751dbe9feb28a3fe351d62":hex:"e04c3de51a1ffe8cda89e881c396584b" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #11 [#2] +depends_on:0 +3:hex:"52628551ce90c338ed94b655d4f05811":hex:"b3a4a3c4d3d53ffa41b85ce3b8f292b1cc8e5af7488286d4c581005f8c02c5545c09bb08d8470b8cffdf62731b1d4b75c036af7dc4f2f1fc7e9a496f3d235f2d":hex:"f5f9d5b51075b12aa300afdc7b8ea3944fc8cf4d1e95625cc4e42fdfdcbeb169":hex:"60bccbc7345f23733fe8f8eb9760975057238705d9cee33b3269f9bfedd72202":hex:"c0fa3afd6e9decfbffa7ea6678d2481c5f55ec0a35172ff93214b997400e97c3":hex:"5a113906e1ef76b7b75fefbf20d78ef8" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #12 [#2] +depends_on:0 +3:hex:"0e4873c4cbcde280abc6711a66dbb81a":hex:"1ab7c7d8fe8f505e1dd7ddb8e7cda962572f7004b2a14c7a7c5bcf24bd16616e2c42c50ae5db9981ccd7d0c79062ac572d3893486bd0ae1f99cbc1d28a9e4c1e":hex:"e4b89e28663e853f8b380c8a4491b54121fe6927340a74342362c37d8d615b66":hex:"619775878879eff9ee2189790ff6f187baed4ed1b156029b80e7a070a1072a09":hex:"ba3d673e5e41bd1abbc7191cc4b9a945201b8fef0016e4774047ee2abf499e74":hex:"4758fd021c34a5cf6bea760ad09438a0" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #13 [#2] +depends_on:0 +3:hex:"0684e8ef93c3363ba535c4e573af1c24":hex:"748a5f5fde271c563a8f8d15520d6818f7ed0efb9b434adf2ff9471b391dd225b37868179ffa9a6e58df3b1b765b8945685a2f966d29648dd86a42078339650b":hex:"e90c82153d2280f1ddb55bd65e7752bf6717fbe08c49414f6c129bf608578db7":hex:"c17e97c93cfabe0b925ca5d22615a06430a201b7595ad0d9967cc89a4777947d":hex:"3d554c430c8928dcdb1f6d5e5a4306b309856a9b78c5f431c55d7ebd519443bb":hex:"d3da71af70e196483c951d95eb3f0135" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #14 [#2] +depends_on:0 +3:hex:"89b885ddb12abc4f7422334f27c00439":hex:"e2366eec626bfd9cb932bcaa0569de6a7a37cf1dfde1f25d00d1a0c89fe25fea592cbd2af7c8202521fa48e15f7cc7e97e431b222b516a3ad2bb7b55b7fcf7f4":hex:"c77ee92bd17939efe9bee48af66589aee1d9fe4cd6c8ae26b74b3799e35342a6":hex:"23e80d36ca72ecc38551e7e0a4f9502bed0e160f382d802f48fb2714ec6e3315":hex:"6b83f7458dc813ce0b963b231c424e8bced599d002c0ef91a9c20dcc3f172ea5":hex:"81d13a6b79f05137e233e3c3a1091360" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #0 [#2] +depends_on:0 +3:hex:"ff568be02a46343113f06949a16cc7d9da315aef82f5681f0459650e5e180e65d1d77b00e5ce3e3f9eb6c18efff4db36":hex:"77de4e5db3b308c38c814228583dfd1eb415771f4ae30f9cc2d35b48075286a4e8c2c6f441d1aac496d0d4be395d078519e31cb77d06d6f7fd4c033bc40fd659":hex:"":hex:"":hex:"":hex:"448ac707ba934c909335425de62944d6" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #1 [#2] +depends_on:0 +3:hex:"6f092b85eb9f96427642f69467911172cba6df86e0db08d04e824cde6fb91d9b9af2cea53f42d53c45ee3e69a2327172":hex:"667d3ed9f41a154ea33b55182b8bee4d7d46eff8e890c7036cf7c2665d44c28f9e3a8cff166dabfaf262933d337e729e0b6a60a51d00ba18f877bdc9d0cc659e":hex:"":hex:"":hex:"":hex:"16a200f683ab862947e061cddaac5597" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #2 [#2] +depends_on:0 +3:hex:"26e635a6a2b6402b968c1eea13c6a980a0ee9b8497abc14fccdc5bf8439008861f74de2c200505185bf5907d3adc9de2":hex:"80e56f9893beb9f22b2b03caa8f1861d5b31b37f636f2ccbc7e4040ad3073aa20f2f3c6bfefc041df8e57e7100794c42732b6d4b63d8bb51329ca99671d53c7c":hex:"":hex:"":hex:"":hex:"807586c977febcf2ad28fcd45e1a1deb" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #3 [#2] +depends_on:0 +3:hex:"b239c485d319ce964d69bd3dbc5b7ab9cc72ac9134a25e641bcd3c8b6f89e7e08ef2d0a45cf67667a4e2e634b32d73ff":hex:"c963e17ef46b7b2c68756019704ec7435ec093c423600b3f2f99dd8989f8539a11b1b0598e93e84d50b65e816e794421ab546b202e4b224a8494538dda85da82":hex:"":hex:"":hex:"":hex:"2a3218b4d59f99bd3825631a6eefb09c" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #4 [#2] +depends_on:0 +3:hex:"0239545a23735b803ae7cb7766194917d6cce164f7ec4f65c6ccd5ec1db5297722d4b7466589da4d39f4585856bc1d7e":hex:"71a440b70a2b5ce41b85de27d987fa2a0628d7990dd7cd1460fddc5410ce6e9bb0ae4f90231f45bc71188fd94e4170389a8bbe4a7e781c95c9a97ad78ba7d07b":hex:"":hex:"":hex:"":hex:"9dafaa8b727c4829dda10a831e67419d" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #5 [#2] +depends_on:0 +3:hex:"237e8916eadd65e3422fe59ab257b7e6957fe24f760b499fbd052241879e8294b01d2169ec2b98f52660d9f5170dee22":hex:"d8908cfc1ea8518c1442e46731f30fdad85399894db262b8f4fdc0dbcbf11b60b60b25d3108f4b169fcbef621a14c635525fa3af8ccef6b91f808479509967f4":hex:"":hex:"":hex:"":hex:"593c39c56bb9e476550299ee8d85d2fc" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #6 [#2] +depends_on:0 +3:hex:"28b6639b415c79012c749dc2a0d18433ec36eda55815f0841241453fa11b9d572b7c29208e01dbb0be91e1075f305d7f":hex:"6767c3eb6ba1b19412c32bfe44e4d0317beba10f3abea328cda7b7c14109b72046c8691c1c7b28487037d381f77a3bbc8464a51b87de68bdc50ec9c658f915ab":hex:"":hex:"":hex:"":hex:"e390806219fa727e74a90011b4835ed6" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #7 [#2] +depends_on:0 +3:hex:"ce735a8549fc3f9dfc7b96bf0d48936a711439ac7271d715a278718aca9e2fe3c801030bc74b048ac1e40852345e87cc":hex:"510b0dc06e84ceb901c7195c2f00ad7a04bdd75e0ab52b3d2cd47ddfcd89248dd58e3f1aa8c1ffe306f493905f65369eaed2a5b337dff8ac81c4c1e8903a6ad5":hex:"":hex:"":hex:"":hex:"ba871ba5843083b553a57cf8defa39d7" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #8 [#2] +depends_on:0 +3:hex:"841ea92fa42c06769c5c52fe152d07837b8ff0048392caa5dd045054353d363b25439eb5885e96771dded4005f2baf42":hex:"97511ae52590a0b64b75c37e10b89671880d2d6e8f90780ac27263dbc0e32d0824be5e80a88cf8fc3d4c607eb873c0322d09b9ca3498c4015c53ca6fee890093":hex:"":hex:"":hex:"":hex:"a8fb31362bd997adf4d9116e23dbaf10" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #9 [#2] +depends_on:0 +3:hex:"55cd76fa5f004b97bb8e14170f79f52715d18c60f142b06d16e8e06c274798190a79c8b325163989d86323c03dbe0d68":hex:"bafc0ba64669c9a36514bde6169034101f29e2a0a4b9a55c0aae7dff0c5aca2371b523e26dc44bf75493bdaa023d1555294178288b70f1ae72150d9f7265b4e6":hex:"":hex:"":hex:"":hex:"fa16dbdaf01b3c202426adabf61fa64a" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #10 [#2] +depends_on:0 +3:hex:"ff3f3098fa3d2b23b38ed982e7afb61d46b4848c878b9280f8e5ed6bd81176e76f0a2a85071a411829cf84421c22f23e":hex:"92194e2c700fa724489683d0b6ddcf72c89b9c3f3ff584e802ae426be4908b1ade093bcf9baf7738b988dc0fde1739498a97c9610da853a7c83981c6a7b68096":hex:"":hex:"":hex:"":hex:"f85490426dc243ba09f9719bff73545a" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #11 [#2] +depends_on:0 +3:hex:"7242c1020a63770cccf6f8100970990232a9d11d61c9b0d38fe5e7a568a86252a66481212e5d53c868561298dd5bdeec":hex:"7c3806a32ccf3252ac27a92a07209cd7000b160faa70b9024420b903587d1d77f002d3abe28b563d32ccc502b88f83bc5996f3dbbf0f57835839eadd94563b9d":hex:"":hex:"":hex:"":hex:"2232181f08c1569efaad1a82bcb5f3ba" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #12 [#2] +depends_on:0 +3:hex:"a2e445290fed8187df6d2a57e68385bb62d700cb8f140410766b53e69e6a0f2939bbfa7ce091525c9051f064e383a2e1":hex:"fdae5f1ea253108fcb255d215a3ce1dc1d101acf89de4423b75a74619e95f3feaa35b5e0bec430b0ad9567df818989c36c77742129af335c90ceb6dd79c7d2c4":hex:"":hex:"":hex:"":hex:"3841e2d795b17cb9a2081d6016a1a71d" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #13 [#2] +depends_on:0 +3:hex:"bc885454e385d911336dda9b7a609a6a7079a4a5a860fcd704161c34658bd98685bb03418b7f24f2ed9475eb8ceb232e":hex:"77bef884a91126564b3214029ac6842d86e4c1fa283e33d6828d428377416f66947e39a4a6708e10bfdae8337a6f302420a6649fc109d0f094c18c1e9361375a":hex:"":hex:"":hex:"":hex:"ea20780ed280d8109f811a6a398c3e76" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #14 [#2] +depends_on:0 +3:hex:"c1825cf00cdc2da93adb3e7a33c1f3a76c49166887883744ea2683ddca23f31900f25c434364c992a6d913f753a9c42a":hex:"56940a6fc4823c9e42e8ffed63fc3cf46d0a2b305c236a511b0b5ec7005ecd8989bf2006ebe52ed55845f7cc25d3d0086cece95f0bff6fa7e17ddf474704abfe":hex:"":hex:"":hex:"":hex:"b037c7f0f85f4d7eaeeb17f4c8643a74" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #0 [#2] +depends_on:0 +3:hex:"19b83c0deea6463a3912d21ffc8d8041a5b30640352abc9652770cfca99dc53c9c09942ddd67b91f4da50a8615462ce4":hex:"5d85c56d0d20ee39958a90f301d2f8bb136fa34d09b41a0c9375114a0df9c1dcdb2a62c4be398d9eaf2440949b806f0e5a977da608eeb652a41711d1e9b72655":hex:"9c1db928b95c84cb674060a6d2f6b7a6a5d43e9ee967e9f821bf309ca5f8821f":hex:"a3111cb57365c617df0b0bb3a1aada49ca789bc75903eeb21e42a7d3d0dd0825":hex:"ce7f557c70676987d13aca60bc4585147efeed97be139871a1b29caa1e180af9":hex:"4a49430277d64446e2fa75763eb79ec6" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #1 [#2] +depends_on:0 +3:hex:"239f21be6cda23e8660c8a5e04c79f6dad6f363ac6dcffd9228699ae43fbce5ac3c51645500cb3eae68f0b604dc4472c":hex:"2975a099f7e6530e5576534c25171f39131d6bffb99259f7f2bbf7d77de9fb1e829052b54a9631a733113021692eba1097438347c6de82307a0c2bb308edf065":hex:"d451a54584e6d1d634217379e7e60e67303e19dd4ba63b097899c7349a5a7433":hex:"a33dc24c6a656eb26275415581d568b7c2424a9c5fb9e2944ca35ecbf641f713":hex:"8dfccc62379af46844df136122b72a878d9d61b40ccaa029b09e6b9f0b4d0192":hex:"005e91760d89ecb64b5fc3b0e222fca3" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #2 [#2] +depends_on:0 +3:hex:"e326abbe1db3ead3738d2ca4d9f1d62080cd23ff3396f43a0af992bed2420cec6661dfaac83c3c4d83347ac840f7dc14":hex:"37c94d11ed0e93b8199d43d6eb242165dddd12fe39c0bea4cdef6bcfeb5d17bb866f080a9daef128f685fb3bc59c945927fb0aa3e17068515c3c92fbdf04a228":hex:"1ff41405dbb3b12b8ddc973069edc2d2801af0e0dc9bde2cdd35c5b2d4091509":hex:"138b6d2eabef4b32174afb0156ad1df570cf6e5f6ebde5d19cc30daffd9ca4f2":hex:"f27cf7422808c54c58fcdde1cece92f5342c7a10ac43ab3b2e53362b2272e3ad":hex:"506d6fae6fff9f222e65ac86df61a832" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #3 [#2] +depends_on:0 +3:hex:"cb0229d2bb72d910b0169e8f93318905aef8dd93ed91a2f8388545db32db3f2489e7988b50de64c49a9f7feb5abe8630":hex:"514ec8c02439290853434e75e3d0bd159eacd5ac13b8f202cfd5c36cdc0fe99b53a1b7a1619e94eb661ac825a48ea5ef8bb9120dd6efc351e39eb7cc5223f637":hex:"a6ed69c9216c551793107f1bdaa04944f6d76fe4474f64bb08b0ebc10a18f337":hex:"e0bc1cc56fdfeef686e0c7ec359e2e8bd48d76c8643c40d12325328170bbf702":hex:"87c5b23aa3c100ff9e368fc47534ff8fa2f9e2bfd3599519ee6f60164485cf6d":hex:"bd419968f636e374268ccdd62403f79c" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #4 [#2] +depends_on:0 +3:hex:"bdd156ef3c4e09b77fe8781c446eac55b562e4ee1b7d15515a966882d4c7fadb0fc7b37554ba03908838db40499ded5b":hex:"9facd9f4587819acb358e4936d9f44b67ddf82616e79a44ffd6a2510f652f6b9cebc1424b5c642362b19f63c615f49686df66a8f80ddffb56ce0c0d8540150fb":hex:"35ea316fe302786f626e3831530622b62eb33a3608d4af3384ecfcbd198f3f05":hex:"8d4fae22290b6ef8618ded1c3412e85fab7b8d17fb9cbd09dbc87f97279cc72d":hex:"2f54928372e4ce447201427a3ae05769ae1c54b2e83bdc86d380a90b07f2890c":hex:"8045e8da88b1bc126785c8a771db5354" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #5 [#2] +depends_on:0 +3:hex:"154876298a1b63334624b367da984eb31d7260abe79ced41de35ba68a716233a5df0937b90f89dde7fd55a9693c9031f":hex:"36895f574e9e9d08e6c885d305eb4764c1e5689d1f99c2462b3ebdf659e8ce43818dfc886ec797843bfee361b554cd5f969b0c7b0381b53f4afc1bcadbf7eb1c":hex:"c3a46105c50a167a5b0391053f3814a06c90cea2c1fa9329d97fdbc62887ff6d":hex:"54c7d66c65dbddb4665981bff0f503de37d724362aeb67abce6a870fd6a7398a":hex:"58204ca953cbd46dd6c8870b358cba77c436870db49bcd3e2f92697bb580b460":hex:"cd903c0f11ea701214f91715cfec11a3" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #6 [#2] +depends_on:0 +3:hex:"94e273fde1e699f84aeef343eb0277c50d169bb5496575301021a2be50df6a555d1422ea88e0e4d905158e93fd8d0089":hex:"1cd97b6e6e7f19401e409aea7b3ec33a8faefd71402b8f34a73c1cb1af215e0e87debe68bce590d41c1f90c6ad9db3d30b3901862e076d765ffdf58776e5fb7e":hex:"6ee75e9f9aee6ac93e20f742f20427e5eb9b4ad2ed06fbba8c7b7870a96941ac":hex:"0ba60399893ede284372bc4e0a37702a23b16aa8e5fe70ea95429af87ff291aa":hex:"94bd2b51c32d29cd14e2123221e45ec0cf1f38766fb6bb0716856d0138f6fa39":hex:"831793686abd406f7b385cd59e497b18" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #7 [#2] +depends_on:0 +3:hex:"5a699113ebf98bff9cb780ce29747a61ba2d7581a5716065d018c89348d7c2ed3f5bba32442cd192c1e37b77b98f5791":hex:"de6d2a3b6ad9af07058d3b1d1976cf61d49566b965eb4e9b74a4cad8e286e7a40b254b860e2e209a8cb4cff3a8e615b84f5ae7505957a758e266a4c3e915d251":hex:"ed18c16a61ba5ecc0755f94c286390a6d46e6e26439dadd36c83ebdee42b4b4c":hex:"7c4550d058b85580be2053fd9d933c87041c5c3f62a5b6b303259dafc90d9041":hex:"ebebfcb9b4b3595e516939ca0688422bbdfc4b9f67b0d6619757cb315b7d7908":hex:"1a5a496aa2268483444b3740c9cc4104" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #8 [#2] +depends_on:0 +3:hex:"42450f2689b87a3dd940f3b9e3b32d4654c725a24ddd2c22f006694321dacf1980b50f7ac0401626453ec836039bfdc9":hex:"4765399ccbbf3d33433bb992ee29e4381f28d800b05431f1c5b3e949c5db72c582bfe8ba08db1575b866816cabbe5e1d31d8a870ceed49fb75676c97020d1f22":hex:"6ee5a7613c25ecec263a2fd2288948b2df9a05d50040c4031b0653878fdb067f":hex:"68a1038481be7412d6a7c8474d4b2a2535c9b55ea301ee800d5a846127d345cb":hex:"7a1915cf78e6da2dc7840cba40390d668d07571608b77857d2224c4531c17bb8":hex:"80a6c622e64495f9a391f5a8a9c76818" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #9 [#2] +depends_on:0 +3:hex:"873869e194201b822b140bdd7797dd1ed408f2190b759c068b7019e6707f60751e101d3465c4ec57dbf9d1ea7597fa44":hex:"d2f92706ca3fb9ced8183c74704440d7eedee1542c2e812f65afc83f4b62dadf1c51fa68f8d5f457a893211c8afc82c93e6a1e15822eff0d4ada6efd25d271a0":hex:"8d0393d2a1ae8930ea88773adfa47b49060f0bf2d3def2acc57786bfbd1e2d6f":hex:"5bcf5ff4fbd9eaabf8bf82ec7c59b043fd64b0025ad1ab2b384e399b9e13147a":hex:"6e2d05e286c90502a3abf2ee72ab7ffb520ce5facfb27e095787a09a412abec3":hex:"e1ceda71b8feb4b0d14d35bbb57a79a2" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #10 [#2] +depends_on:0 +3:hex:"1fecb5fe87c2a208b4f193e9c3ff810954c554150d544baea1685fb4774320315d5cb651be493ef120ef6966e3e7518c":hex:"34bc292809674352ffb60786dca59ec799188aa401b366a48cdeddf37c12ee4c666f8fb3a0d53df4cd7191166d50ff01d992f94cd92da7a385ffe5795b197ced":hex:"38249fed34a907768eac49267c2c613a65154eec5b73b541d7d7b314b5080061":hex:"115be9cb914b50480fffe078d8170870b56129a0a74271dee063f8b2049e1be3":hex:"69fa6faf7223f5bb1b55f35a544f78181579b1745990053357916fe507e51db6":hex:"60cc92d3ba3ff0715f5627182334ed1b" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #11 [#2] +depends_on:0 +3:hex:"4d283eb5ecd85a1613c975e24832770643613c9a5aee0d8649bc0d68c89cf1ea6ec3a1a22eefd9e212d602c338d64c6e":hex:"4aa6917a5c9f370590d70536fdd89c916fec5e5bcbade8c6a6cfcf5b232c98a6b3e6b79a2dfb0778fbc3f1da7b06044d7b0fa2c04ffc3b71324aca1ee19f936b":hex:"05a7092a684ba7a7fbd33533f9be58a4140a3855d4c5f44a31d665a0720c1739":hex:"557ef1bedc890d1543de6cfeb25642782683d77a46bc8aa0836b07157599c7c3":hex:"e87e45073ff8e36c38b128cd2275a160e431787b5e81f6c2fd7a37909eb72ea5":hex:"31ecfb1bcf3253ba5f71b185a66c7cff" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #12 [#2] +depends_on:0 +3:hex:"a6f488104a6c03e354d5d1805c62dcd3016322d218747fa83f9199e20f6ab1cfbc2b889536bda1187f59b7294d557ff2":hex:"22f8ad57a2dfa8010e2865ad6263823652917b84dfea61f639efdb0fdbb35c6341ca7721095d69686212dffe78410c0d0db94f04756d52e7d76165d5a1d516d9":hex:"fb9951d563f7aa88db545874b1a3049c5f79774d486e7a28aed1ed75f59224a5":hex:"b1ea7c6b53e79e4e947e63086dee32dcc17bc4f27fba6142f8215ec081cdd5c9":hex:"0d12cc0a39bfbf87194e4070f6b54caaabbe48fa192b96cfed2a794d95fa299d":hex:"62a1c5678e6e8fc738d375e2ca48751f" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #13 [#2] +depends_on:0 +3:hex:"9d67e017e0abdd7c079bc0354f33dab696ad64146802f06d6cefd9cdefbf55b197f5899e5efaa269cc0432c87648ce18":hex:"d8be0ec1119ff959c32c9cf29914e3f7bf2b01bdbf806c2d9ba119ae2a2cfb565871762b02ee7bf68f1d280532fd7ae7368517f6f751739b228d23df2f207f35":hex:"74a5e24477e8759bedfbaa196f398777108392efb8c64c65c0c9ecd6cd3b5f04":hex:"70cbc6cfe1d6ab4bc30d66fa162d5d4b3029e4b1b9d759f3eae17fb508e91a46":hex:"d3c538e042f0eb796b4af9b4e65cd850425c72e2c896fcea741c17172faf27d9":hex:"559a5e04b75cec250aac2433176a725e" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #14 [#2] +depends_on:0 +3:hex:"10914608a6d373a26c53ab83014283b678d73dfea65b4a3540af17f2fafa3b3cf698925b423edb9f946b906f43110795":hex:"9ded87d289412dfda8935e5b08ec66b68abd1bae1fc5363e4341f58db954f1f9bc4b681c0d930ba080f85f8fd04c173cb2b77723ce67692efa7ade48b82b6926":hex:"225159b4c679094f277516b2335b1e8b7d0a7ea33fd56822906d481fe412586d":hex:"4967cd401cd466aba0be5f55615ca0d9fb8adbde5cb4e6ae3a0159fcd6c36bf0":hex:"fec14f325b8b458ddf3e7f2e10938f4c2d04c8d9885bb5b9277bdc229c70b354":hex:"1cd5c0bdeb87c79235bead416c565d32" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #0 [#3] +depends_on:0 +3:hex:"b023f6a6f73d4749b36eb54867994432":hex:"2462ad760ddbca4e013688bf61381f190c7b2de57cbeeec81d6ab7b6f067b75adc3545887f8d2aa5d9b9dfcbfa425d610faa9c247eb5d71145f302918e908ae5":hex:"":hex:"":hex:"":hex:"c0620c68515a4618e572db6e4c14473d" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #1 [#3] +depends_on:0 +3:hex:"7e0fcd953c1c8bb8d03d7a0e918fb59d":hex:"56b2e11d5c2d87d2c9c90c285e0041beb4594a6efdd577580095612e50cf47c0b76208337e1e18453082d725629667d86226ab22944bbfb40c38b7986e489adb":hex:"":hex:"":hex:"":hex:"7194eee0d333fa5282dc44db964ecf5b" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #2 [#3] +depends_on:0 +3:hex:"0130217d4a3945402ed99d7b8504fe4b":hex:"28e592fd9db72b40ae4888078aedde260f6de4f0472a7601258e694d7bb6af6810ff4eabdffb332932765fa1d66650fb78cc2be484c0ba803eb9a2502020e865":hex:"":hex:"":hex:"":hex:"4652f0545385fdbe02d05aec21668608" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #3 [#3] +depends_on:0 +3:hex:"07854447e33521d2d997d90c0887f42d":hex:"c561ab6acfbfb98879982ac7add92b80471e0154b77ccc9fd98e7c2013c411e8075948e97ab4db7505797a99d456e54e6585042efeff7e3970e399ea0d27537c":hex:"":hex:"":hex:"":hex:"1a14a810c11b4f0af23c6467c47bbde0" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #4 [#3] +depends_on:0 +3:hex:"68a8ec01581d6066391f3e5977465026":hex:"747c7e9aace6d4f840c7b5261e0af796c516477421d52850a7072a0ab2c768fcc80c9ba8d18b228e77a7f6131c788a76515fe31aef4ed67376568231a4700fac":hex:"":hex:"":hex:"":hex:"a5723c43743442fae3637bb553891aeb" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #5 [#3] +depends_on:0 +3:hex:"1459038c60b70bae7af0da6cfab707a2":hex:"9f7d839310846bd452827a185539c0eb0f106acc7bc4de80d3521a970b23483d57826b1484d329a2d1c2ecfeaf8eeffbaa6e1a305e3f1e47b96ad48a711ad1aa":hex:"":hex:"":hex:"":hex:"5fcd6bf108fe68b85f61f85c0556f5c0" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #6 [#3] +depends_on:0 +3:hex:"a3357db173df98da4dd02ee24ce5c303":hex:"f1ce08587ac0338b4d0b8e075b42b6501e77758b30087de028a8622fb7abd7f65e3b4f802d1a472dedb9c1a6dc9263c65918d8b7fafd0ae7e9c39e2e8684af3f":hex:"":hex:"":hex:"":hex:"8a5fa11d8e78fbf1ca4e4ca3e1ae82b8" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #7 [#3] +depends_on:0 +3:hex:"212f4c80c7e9287c8d25e3b965f91a3c":hex:"bf1d715b3f56c433827c9cb429bee5ca61c80a8d9b2fd4498e1c86ce703637f8f7f34056ab0039e0baa63320df0ec61de60354f2ece06356d9be3c6d1cdcc4cf":hex:"":hex:"":hex:"":hex:"04ac2f969e828f375b03ee16317e8572" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #8 [#3] +depends_on:0 +3:hex:"46e85752e0af82fc63932950120e4b5d":hex:"ae4316424fa765179404188eb8839ce84ad8db92cb12f39089a93a2dbdc371e2fdbef1ad080eb354eecdda3a10ea66ef647aa095afa1786c01bd1c9f70d8da4f":hex:"":hex:"":hex:"":hex:"de576284d8ad36b31bd4f8f3da633e36" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #9 [#3] +depends_on:0 +3:hex:"ec2459b1dd7f50df63e14e40aa4a4e66":hex:"b964a24bf98264327c0b9e2e1c99ed1b35f534be801c996f318bc2074ed2500ba8488c4feb442b507c3220523c0041c9543133379365e65e092850a5e3f96cc9":hex:"":hex:"":hex:"":hex:"4d466e2f388aae40d1b31ce1f8ddc5e8" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #10 [#3] +depends_on:0 +3:hex:"acf480d54f4c66d611519b72f2c0dca6":hex:"d5b3277cf8badf6be86af27dd36f23ffc580847c5fcb56c4d8a42339336f185c38ffb86f4d8aa7646c1aaed6c2b0c7ae7e4d435f481d62bb01e632f6bbb2abf9":hex:"":hex:"":hex:"":hex:"746aaa5423ef77ea6b1eda47410262dd" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #11 [#3] +depends_on:0 +3:hex:"edb80fddc595b234e3c5c03b2be3d721":hex:"94aad8c772201435543efd9013c9f5f022038db6864e9ed4141ea75beb236844da6e6a17109262bc80f528427b37d9da6df03c7dd25be233774384a7f53197ea":hex:"":hex:"":hex:"":hex:"511927f10f800445b705ea3cfe6ec823" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #12 [#3] +depends_on:0 +3:hex:"c7790c9888b0e731ca6ccd60c32bb98a":hex:"967050c11050a6d99a5da428d1f0fc8068b29ba4c66965addbfd31b745cb07d2439d268ab32a5fa2b1934bf277ff586506a941768468905ed980537d8baa1d07":hex:"":hex:"":hex:"":hex:"978493f0cece6f94d21863a519e06dbe" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #13 [#3] +depends_on:0 +3:hex:"58c75625771df61c48a82590eeed3378":hex:"be3120e8515a98701b4b2fb0667de2bad3f32bcbf10fb9b820956f9aa7ffa1bbbafb70002a9c7fdd1cf7e76a735261798dc60a1163919d58e39ef0c38b54b27b":hex:"":hex:"":hex:"":hex:"90f5c486e7efe932258610e744506487" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,0) #14 [#3] +depends_on:0 +3:hex:"d3f64c11aa21bb2d12278847547fb11b":hex:"855c0e3a7567730b11e197c136e5c22b1dc7271d4dbe04bcdfd2fc0ef806b3c05b4264ee6c60d526506622ebf6130738dba4bf35c13ce33db19487312ee691fe":hex:"":hex:"":hex:"":hex:"33ed7089ebae738c6a7e6e2390d573e4" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #0 [#3] +depends_on:0 +3:hex:"132ad1c40afb066620f004f08409c59e":hex:"2e5beadd89b663b3903d3a63c3ab5605bfb1a0045a42430e0220243c51a69f7ff7678c2f8edb7bb4a29b646f3edfaca2463f9defd342da87d22b1b8fdb012fd5":hex:"150deb841d1a4d90e66e85b036d9f5a7efca726b907ae3e8f05e1d1338cdfd32":hex:"fb199beeeaf3939be2a5f9e6ba22f97cdd2c7576e81eccc686facbdf8bb4f2aa":hex:"4293341721f57e4548ce8c003531d38622446c8825904e1b868dcddc626c5164":hex:"66d8f3bfb78186b57136ec2c1602e1ef" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #1 [#3] +depends_on:0 +3:hex:"1c1502ca97c109399a72a77c8d6cc22b":hex:"1d33b1b257a3ae1210fa2099307916a73dd92270769697ea2d7901f56865e3cae1be94b5024d0da3880bce06f0b31231c5a889f8ba3d92a20844b61009db672d":hex:"23eede46eff4a04b08dcc2133e4537b332351f8469630f11b0c8853fb762a4bc":hex:"6fd9f9da108e68aea9d1cecd81c49bcd0e7bedb348890f2248cb31c4277369f7":hex:"76bcc11bd952123f78dd2ba60dd932d49203e418bb832d60b45c083e1e129834":hex:"a1eee46001616f2bf87729895da0d0d1" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #2 [#3] +depends_on:0 +3:hex:"c79c0a1db75e83af258cdf9ead81264d":hex:"5e8cc0fdadc170ed0f5e12f79a6b9e585f9d7c2926c163686a6a724495d88fabcec940d752545cae63f1792dcb966a7325f61997ba8883559ad6f6f8fc09898a":hex:"a2cf6c1c9e4489f504e17f385f08aa82775aa2b0a84abd0b7ee3c6b393d7fd50":hex:"c7529b874e07d4b876196786d510cc038c9e1ab93c461df2474eba484ae6876f":hex:"63c6e7f3548529386c9f47c5aece52ce8454da5db9a807a1b960f7730a61582b":hex:"43b7931e0b3b3769ef8972d0026896a3" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #3 [#3] +depends_on:0 +3:hex:"b44d1dd914e88840bc65a94ee199b3ac":hex:"c3dae1863d323cc78f43ccb3f632fde29130e6b23b843ff5a8d79fddc3c1f92b55cd3dcaf7848d40d189c0de7790bebb889e01be05980dcdf30d2b3333426c50":hex:"41e2fce9b48642a1b9bd1695314adcdd38e1a8afe4891e633c5088c6753438a2":hex:"1eb3f8bbacb0c6b901718bfd7eba29f6f87e1fe056ad442d6d38c1351a684e1f":hex:"85570db773f3f5202967376f91a0a9c09c89cd4eddd58cdc6210335fd5e7acef":hex:"bd53036538d9ed904a49966b5428a2a8" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #4 [#3] +depends_on:0 +3:hex:"5ef97f7af7df5cc6fa94f8428ec7be5c":hex:"be67434ac4d77f0f50ec5bacc8112d1480bd9f20d6b4ea768d9b51bb69c1dffcd8c30e4412127644aaa6fc453e59fb633f6a5a8c2f69e40d1863e35d4d4c0227":hex:"a64195b1e56cf97fd81e99fa1833d191faf62f534c874def4b8bed0ae7195ac7":hex:"353cd3a8d9cd92bce82cd8d1cc198baa9276db478b0cfe50249e30c3042ee9db":hex:"393ab4726f088fdfeb4df752e1b2aec678e41fa60781bc5e914296227d6b3dfc":hex:"24bdc2cad5dccd2309425f11a24c8c39" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #5 [#3] +depends_on:0 +3:hex:"567130da4e7ecc4db0f035d7ecb11878":hex:"cc070df6aa3623f74afd85b59d1bef2b1fcd9c8093362512ff109ebfe992ed75bd58b5ae1561d702b69065eb3cc0bd328ab698d4c6ca274e96d673309b5df5df":hex:"42033054cefa1f20b3443f8ab7d9635ae8f047b833c8529245ba8b4aa07edba3":hex:"72972fb947bff60df291888ddbfd91e698e0c1c26a346b95fc7c5dac596d0073":hex:"af29b6a13602ba9c6b11f8dbdeb6cb52e211f9cd2fc96e63b61e3c1ec631d2ea":hex:"b0849f8317e043271a3fc5f2eaaaaba2" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #6 [#3] +depends_on:0 +3:hex:"2c20ae36f1e74542ed8b0a177b8050aa":hex:"c4bf7a39caf26dc3f61311f54ab3095493c626a988f5abee2826c67a4f4b4d6a02329c99a6bcb5e387fa160741c871acc2929c1cc07f2f0a7ce1619eb7da1ec4":hex:"97c148dd10c3dd72b1eaaafbe37a9310ed15b23872e9f2b62d1feb91ea81ffe3":hex:"23df0c30c68bf2eeb55d273a596f1f54ed916271595b906e4f7793b7a52f2573":hex:"22f120fa09215105116919aaf8eebcb69eccd5da42feb737018a05268bf08e46":hex:"b7c73b9ceea2e6ca0be6a3773cdd6886" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #7 [#3] +depends_on:0 +3:hex:"2076f9e116a2648e1e664b815b1b3674":hex:"979b5aeafe555aeba152ed66e32e30e110df20ee1f227932a72acfb8218aec767941efaefa091c0128dad9b93b06b28fc76e01f275e8ce1c02f0eb567c914f89":hex:"d12fb10b9fa6d2fd0f39cf76294cd44dcbfa80dca7c2f8537c75453d985ef551":hex:"4228a99faf35547a58c1a4d842301dca374f1f13c6fd067b7c1b815863b73158":hex:"a3a7d5f1e2dcf95a90715ec5fd32e7f88c38b0a452b6ccd1f107458db4f74fd6":hex:"8a63a5002a3636b241f0bec14fd9c2ac" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #8 [#3] +depends_on:0 +3:hex:"a71015cf06ddd0a6cd72fa014cf0aee6":hex:"c810cb9db0f169dbc30fda85ccb6d4c40db68d429eeb3653070db7641fbbaba60ef0ff970eaf40887b7e154e2ecd5331de7004689ec604e69927da630a8dd7a7":hex:"5f99f45d8770041703e5a14521c501904fd05ff3340835ac0c41b86442e4939c":hex:"eb7efa6e46ab926ea04c87eb9ce454f5b10717bd9d85305f27d71bea1bc991b3":hex:"cbc80c6171d098fc81023486d327efe2415a0f32e5fa6f6793ce1d0e98783258":hex:"a353f6b350404f3f7b4fb724f84a948a" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #9 [#3] +depends_on:0 +3:hex:"395931837614c322d8488ec6a2c4c919":hex:"831fc8d63592b6ce358c08aeac39d67c3e48b4c2617735b6fe5e9fa44d7aee9d60f2fcf549db239d5bed9c608c94e8f8c23b32901442ac53442127377bdcf205":hex:"eb261c737c0a17c8cb1ae055c143f701b74c96c852e4a76ca3ea045e7efdf5ee":hex:"153276007b3843a897efbf022bd1bcabcf655c7eb8acef9baac710b339ecfd99":hex:"a8a5cb17a2945e5b41ff370cc88ac498389b89b6cd82bb3bbde81c212f7c17d4":hex:"537fc2b73183d2c0c106886937a6609c" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #10 [#3] +depends_on:0 +3:hex:"9a1983859dd6c4cb602970d705952b2b":hex:"68c5cf31f7959ffaa83af9dd55a75ec001befbf835e42a789ac42d39d96128eb6d9b3f07ced15e57e39760390c065fb4425c19ef7184635c18e5ed28256937e1":hex:"e06497a181a5362980579c91d263f630ad4794519a64261ede8b36cf0ac5e713":hex:"714e4fc52aea763e23a1f5b18949ab8fd949f1768560559bccb49d78d51dfab5":hex:"6b6b7f65fd472ad428df2bbb86b85067d0a6f89d9233eea92f5189a9163d0419":hex:"e32af8a81c59dc44540ed8845b447fdb" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #11 [#3] +depends_on:0 +3:hex:"230576e9518fb9a6a8391a84919b0d97":hex:"6193f0e7b33ce19fde922aec9c93f1271ebcdd296d9c8c77029b59afa2064e3159088e07e91c14a4a3dc23b6005dd8ef1425d7d2ae8282a5b30b7498b6754234":hex:"ffaca30a256d18836a0d49bbaad599a28fc7821d71aa91b97158a492d84a6280":hex:"a3da13852d0717afed7c58c52530d2ae047b645a5e7aa8cfabc11478444151ac":hex:"e15fdaeea31c95555fc509d2a266abf78d86ca11aa2f87ce1041142eb9f82bae":hex:"7906f8da1e140345c191dbc2de5ead1b" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #12 [#3] +depends_on:0 +3:hex:"e08a3a33adb4399a9be72fead224155f":hex:"cfbe8b1464b00bb9e0d18b04d2040ed9bd822741188812b98a440fbc66ff018ddf6c0ea20c62d01b8237bc7c3da9e3f9fb874fca79a360b4f0f967d8d02083ba":hex:"56f975849197e2eae5a2e6fb445a93c1fadf57280ac27e27c7cbea2cb00c10cc":hex:"0a6d9e2d6e181addab0ea1ee89c65ce557e10fb8e8d43a24cdd27033d3fff507":hex:"823e9400a9f563cc1fa5daf10f4ff1ab8affa18d8371f9cd0e067fcddce8caed":hex:"5ded298f98cffb2e7f5ea97bd50c7e3e" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #13 [#3] +depends_on:0 +3:hex:"11c13b917d9f94fd7a008566d8598e89":hex:"f53343a5a455132df3d1b03db39e44d933855b375d7422ad0d07dfdfb352af28946eb29980793456ec8634bf113e75783246bbd05aa8a7cb5886d372fa012f58":hex:"ff1d8d33083023ffbe28f153bddfa9d9f3c221da16f8f20967d2508fa7752b55":hex:"66a98c7d778d798617e1d31d4bdfabf8d381d38b82125838ddf43fb7f5b27dc6":hex:"407c72d7c890c00b249be00a53ae722e5d8033c84b1e1a6a69d4b278ba5db9eb":hex:"67ab88156f20d03b3a1bc363daefc0c6" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,0,256) #14 [#3] +depends_on:0 +3:hex:"7b95343a4ac0f8c8b2645c33757a3146":hex:"3d7e2987860cbcba14a12594e1a394ee754c9a7a65cecc990bc79b5e86e672e12f8c144d843e1abca46b4759a11b3d29f4e219077a8696efadee618f254cb80a":hex:"16297534a79c4ae7493178226b29e42a6f1e0066aeaee8b5af65bcefa2ee3ebb":hex:"b429ee986f16fb35fe2c47c03c0918870b4560f4ec4678f9df471cbd7ca6a887":hex:"2b14d612eb00c7fba0d8e23bf91df91daef6f8e279e0050d5497ddf0f3466c76":hex:"8f72c17405163090fe0bd795b65811c6" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #0 [#3] +depends_on:0 +3:hex:"327290da2e9a19c840de8d33e425efaa5aa7a7afa4e5a812065965478d640f78520cf3c670b098943fec1914d4c8c411":hex:"80bdf18288cb8adb6e3dacb09c553af2e7317c194d37f433eec27e324a0bad752899bda91fd41e5a08acdfd76007aecabc19c95a8bcede310f7320ce97aaad0e":hex:"":hex:"":hex:"":hex:"c26222662ed3a649a1745dee5df4eef0" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #1 [#3] +depends_on:0 +3:hex:"be14f473472db07a43b7f9a517735d7f7ede2aa70dbdb729bc4f578a0dce9d7fe9fd97939cd1ef731262417b5213bd7f":hex:"ac71ff53140c1383eb379e5311e37637af933db494e5e689d065661e9095b8302e4174c392f324fac43695d9381e3cf4626a5347938ed9e21502cbd789cca363":hex:"":hex:"":hex:"":hex:"4bab95f9f05fc36a337b6f2582c2ce98" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #2 [#3] +depends_on:0 +3:hex:"88c31e24f4f859b668946ce73f8600621a70731440762b3c267ceab52a9d77a23d6f70ddba0e46a786697a906ccb18a3":hex:"bf9bf25a949d447274a8c72f1ae51399521f8aca39b1b37bb7b4d5cf3c67d55ef8dbacfb71aa9c5949416e2868b968883e517215bc20292894f8406ab39c1ea1":hex:"":hex:"":hex:"":hex:"841aaa0b171d1526ef365b9201adbff3" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #3 [#3] +depends_on:0 +3:hex:"8545a0de5ea028c8e5976d5b58fa50079b20ba716f0856cc1af7b98537c895f0266b956542d2b8ca661aef5da1f7f8c5":hex:"686f4f9ee74c3402845fbad9353d7dfeff727584d892eb64bd84b764110cbe4ac8581e7e23acb95caf12979983e8947c570264aec292f1c7b756f7184007dcba":hex:"":hex:"":hex:"":hex:"f6d6ae6449b2984df8bcb69584fb16f3" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #4 [#3] +depends_on:0 +3:hex:"d6cd4b4fb9105374605deac7bb49ad792eb225daa560f2a86f66269bf9afc2ea01b6ee6f0eb4926d2f09329df6e90d79":hex:"5d1b8fa0ca2ee127d1bd41423c17b9a8c736715cc2906818e9216dfd81b7637b66c89b772b55ae707c6effa2d9ce7425df26f966646ab613d5599143cf51e5e8":hex:"":hex:"":hex:"":hex:"c36ab451116d733eb4377de3511db5ce" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #5 [#3] +depends_on:0 +3:hex:"e73ebae0d0834fdff1829ac3d9722fe9f1bc65b5f652fae5f7615af116440e3d5709b5cddd6065d568c246820de46b09":hex:"2026cf7c1b1fe9645ab8759958ac04fb1d8938b9913c3b7f22da81e398b2c00b1921e1d4edb5d21c4531515cb0f9644fe8068685b9fca813176e6780796e8ded":hex:"":hex:"":hex:"":hex:"98d1dce30593de8a8d5b4d956f6c684b" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #6 [#3] +depends_on:0 +3:hex:"a53c1813c06b609eff9ddc77204b085ca985f22170b8ecfcbbf45ea11c45c24fcf25bc33150f9f97ce48244d5beb685c":hex:"1d0dd1a87d59c69f28e118e1083d65f1ee0df31f6308a92dcc47503ec4d20a018d9821c6a7d64385724f0e941231426e028efe6d75e53ff8edf095ef1baf2656":hex:"":hex:"":hex:"":hex:"035cec3a24ba7c44e5c19436c2689a75" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #7 [#3] +depends_on:0 +3:hex:"16d5b8290693a5c40c5a526dd6d653ac54cabb5608d77bb2cb7d6270b96c2fe2de076716ae8cf0a5c781edbde861dc70":hex:"aa82a5ea33439d0c16a1cc13cbae53b169f4d369bcbdae81a9a38129c65ae0ea4f720576c012f8d7eb1c0202003c39d28453a22e502b4949cf5ba23a727721bf":hex:"":hex:"":hex:"":hex:"de4ed9d163d11e9b52470d078df4c869" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #8 [#3] +depends_on:0 +3:hex:"68bfabdbb821cb978527ff18ce37c96c79ad751756551f36b6991981285a68854ec7f72f548c3395ad3ee40410064d4b":hex:"3da9e9518eb1f1b6268e4597f158844ff672ddb414f7ec23fa66d6c86b90a732a7b3016a3387ec3dbed34eb479413d017932ebf9f2a2fea0b35d2bf4e06718f9":hex:"":hex:"":hex:"":hex:"ec4e3e2b6b8763deb17b8611d1fe7953" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #9 [#3] +depends_on:0 +3:hex:"171a74ab694a7d7c2baa3ccf103ad94f11094e07a955ae9ac3bad370f1448753e99b63cc23d1878ab66f94136ec2ecac":hex:"72ebeda7342770d03bc0e531754f946ca5cca684c41f9d089fe9147fad93b6154919c5cb2e6d162fbfde7b9ff0aa590a17993ca6c80bd59eee4134fc2ce944d8":hex:"":hex:"":hex:"":hex:"582ab4f105c3e1fed9593f58fc335fc3" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #10 [#3] +depends_on:0 +3:hex:"caed30015b34064762591eba9a59f440566a6621832f650572362229e8a38cd0f5d6d322afd8444132056690d6fa5540":hex:"8e27f0dbeae4613bcf0011105f824ed2ecb150a83a0994f8f6607833755216e016fb175e51d42370afe27b11c18477886b530c95bc31bd1c0f8fe00f61fc15a0":hex:"":hex:"":hex:"":hex:"d42787e97147d457f1590c742443ad92" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #11 [#3] +depends_on:0 +3:hex:"c58d62f8145622cd86cfbda66bc26d2ce4c5610cd9cd1c326b99b60355a6fe751783c07f2cc21ba68f1f20ca70f0ad31":hex:"38a8b685e6bbab67824f4cc72995043ea2854f067f2afaec762c9e78ff9d585a25bc63c8d0d075d06d43f3f694733982d26cbe0648b2d0cf8053918b912c303a":hex:"":hex:"":hex:"":hex:"84001709f15a2fd167c161b5d376d86d" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #12 [#3] +depends_on:0 +3:hex:"dc9719050d5257152d8a7d60d3ef1fc5b8cb1700bafc7de863c019f244779c464b6214f21a2f6d0aa3ca282007615ce5":hex:"f188a1ba21b1791ebf8a08d8ba555e49423d9178a561bcc1672539c3a7ba1d856eae9922c4d96c181ed045d6f1d15e855690cdae451edac60f1ca2021f1fec57":hex:"":hex:"":hex:"":hex:"7540fed313c96261cac255bf83b5ae99" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #13 [#3] +depends_on:0 +3:hex:"ff057781af4a4a1eefeb26ab38f82a2efb6f065de290ebf225bd693dfb1f97455b49143bdb430324c9d945c48824f6cc":hex:"0ddd0f4a43a7b54d9abb0928a2242c378db7a95a0b206baa642afe5cd55108f412f1d727fd591bca2c76355aa62aa8638cfa1916739bc66e02b9459ccd0881ba":hex:"":hex:"":hex:"":hex:"8b6e74a94fcac0d2f212d3594213fbb6" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,0) #14 [#3] +depends_on:0 +3:hex:"ef027327e47fc5875c01cb17d798fdc2b27a5c78000727842f8a516f4e8dd34afc167ae145b1e763bebdca51e2f461a7":hex:"128566fe6c5b5595742190519445c25db85ee0ce29371f4cab213400d479d2bfe27655155be0fa237173abb214f0226a2f1770802dd69485adb25e6d837485e1":hex:"":hex:"":hex:"":hex:"76cd1553b2b73d4ef6043a09fb90d679" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #0 [#3] +depends_on:0 +3:hex:"8e1a59210f876d017109cb90c7d5dd669b375d971266b7320ba8db9bd79b373bcc895974460e08eadd07a00ce7bdade9":hex:"23677c04a2d6ab446b7b3c582a8071654d27859441b10799f08b788378b926ca4306e7cb5c0f9f104c607fbf0c379be49426e53bf5637225b551f0cc694d6593":hex:"19e914ffbc6d872be010d66b17874010ec8b036a3d60d7f7dda5accc6962a542":hex:"bd7a0c09e780e0ad783fd708355b8df77b4454c3d606fb8de053bffa5ecf9021":hex:"d284dc2caf6d214f8909efc9a75297bccfc04353c2788a96f8b752749c7fec0c":hex:"129d256e7db6269e5a0a160d2278f305" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #1 [#3] +depends_on:0 +3:hex:"00674e633670c9971be7af789d37d5a4ef567b3ca4766722cd8f67e09d21cbbfa08d43ea1aa259999c6a307ae6347d62":hex:"ec47b029643f85ea19388b6e9de6ab22705b060ae10cee71262027d0bdff5efd7393af619bc6658612fabc78439a0bd5a01255563a96013fa130dd06fd0f5442":hex:"5b92bce3f87645126daa4704fd7df98b880aa07743a57399b985ad1a00b1f2fc":hex:"8199de1338c688234c77262ef35423f4695b277726c76d8b5f426399c14d83b5":hex:"eb95f5a4d8400cec2d4e0f548b6e92636b5e284fb6b61766a1f35bb9cdc5df0a":hex:"9fbe95817578eb272aa9da2f509c2a06" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #2 [#3] +depends_on:0 +3:hex:"2553423c3cb0fae8ca54af56f496e9935d5af4738898f77f789a9bee867dfbc6010c4e5bc68da2b922cdd84eea68e1da":hex:"a9bebd13711c0c22c94b3252654854515a9dc015fe69e688fbac9676b3d77ab67e19b020cd2427ac789ca17f656e499be3ba3ab2075ff95247c6355157eebc79":hex:"e74e45fa28697a06dab08545fde0cc26e7eca31c40aa68ee41c4de402fdcc961":hex:"5aa8abf7062079929d6a131cd3844a5fb6514c07061e25cad67677d867297685":hex:"84819109b2e09b46ba3f5464c34b28ce25a186f0e0fd83fe5fa0ab026c01292a":hex:"3846f3406e49040c48b5cfc9cbc75d1a" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #3 [#3] +depends_on:0 +3:hex:"856f1371454bb9aa06be897dcda9b295817c6eeb865a9acb3a89d145bfe29ce5e1b3b12b714571afdfaca7951cd47e33":hex:"a691b8bf6a407c93a36d18aeced4c75f76d8397d4ecbcd4e8f820cb393186897f05c1ef668b027fc78ba6da9bd554cc31a467d47b5e534b5340c7799383ec05c":hex:"2c81d1e94b33164a177d0183d182fe7d23ef4f88444246464e58bdd0de38d82c":hex:"1b5dae81c96771bea091521c0973c5af76a03e3624160e2511e57ff43a1d32a9":hex:"bf5878e2bd139f8f058f3d834acd771514da6d4c5b9ef84466e5a4e0e4b2eaaf":hex:"6a5ea73aad476ce201e173d4d5a7ffcc" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #4 [#3] +depends_on:0 +3:hex:"0436075cf8cf62ce623c2301ebd45203c98282611cfa5a12dd7c04525ffa7eb343a607af2f57feb7ce3af97e0abc2285":hex:"1ab9ada5eeebc3fc8e53f358b643476fcfd4dd9f092f21d2bc1c4bb1ffd01a0c5b207aaa09ff76a9cab0aa6ce62b6a65b2650ab448b8bb2e8696a7aa4b6f4e8d":hex:"62f07d1f49e40f7f472985947ac4d8ef2d58216d918f7942b9c70f43daff8972":hex:"37ae758141fbc890ee7e1d0854426b2984fb1c094677e6a61546e9315bab0898":hex:"353d1dd0c8d8656bc418a6a3ace138ecd62819d4e21b8bd87694ea683ec0cc37":hex:"bfee6bb4afc228da981bfe7f0d17578b" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #5 [#3] +depends_on:0 +3:hex:"d004a0893bf326d50ee52e04cb3e64409f204f4e9af780d5dd092d04162d088385b1f243000914c62cba3dadf9827c81":hex:"c36004075f5fd078137ea08de6cb15f71aeb9eca21c891cfdf7a8c0d21790c94ffa93be5fa06beb5e82d9fbf173ef9b29c18511fee2455dbbe61d6b01baf024a":hex:"7d313ada131650c7a506d2c194444ed202d568544caa75bbc60e57a0b74c9a10":hex:"791d60238677ff53150cf7074061eac68335c0a7cec7de43ea63a5df0f312cd8":hex:"6754366be264deb9e94f39e92ac2894bd93c1d7e1198d39e6eddccb0ea486f4d":hex:"1c29795f03e3c771603293473e347ab4" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #6 [#3] +depends_on:0 +3:hex:"9a8c79b48ada409183f7260aa1415c9ee4e0b662e0fb81b5c56f85d76ed75efac5751dd4de7e7f8b53a36ee0dce2bc9e":hex:"c4d68b76dc0e785823be2da9d339dc900132f12721e8a63ebe92e36d740c5a5e5564c367bff4a52bc70b1c60c86f0bcb7c1d99c414956a259963207184f01246":hex:"04c7060f36569a5d9578c718627fc2695e8d783c0c8aefca2744da6664e67c8c":hex:"1d4b7d587421dea4f7f3e77fcf997607ecfeb6e665a9a184138eb5736b16f516":hex:"8cb8daf9cda230d8d39b829b968aaa5f5d3e3106d8b693227ab1b6201b78a7b8":hex:"faa146098526546927a43fa4a5073e46" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #7 [#3] +depends_on:0 +3:hex:"a0736a5a8b0a394625d8985b05e3a9f277c7ba03b253c0e783359a8c4c086121cb46ea469c7756d5f099f5ee8ed16243":hex:"ea7a046fa1760866bcb37fecf9ade7bcea4444662ea782d6f2820b22a96bab97b4c5adcb0a50ced885121b6b85a5074444b1555d9655f4f6ded31fe15281b30e":hex:"47f3655dd05c42454fad68e330aabca49f27c76ba05ef07b6d77fba41153c0ab":hex:"a5d07da3e399cc51d136096599fcbd9779e839b1fd86f21d7d1e23acd91f9fa7":hex:"150b028b64a988fc1ffdfc9e66b4c8dfe4fcd8538ee976c89923638ebad33802":hex:"6ffdc685169b174ad0dd84cdeed050a7" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #8 [#3] +depends_on:0 +3:hex:"d445a3d9332c8577715c1e93f119521bd31a464db08cdbd73d50080d62d5a48fba4cef2dd097ec749973037e33e8d6fa":hex:"da5f9b2db13d0555846c00da96115036bb75ace66d56fc582d6cd0171e3e23335c5c2b8691e58af8899ed0204316479f849ca6f47309cae571ccb42d3d35c166":hex:"79346394f795f05c5a5199423649b8b5345355ef11eb4239db1c767c68afa70a":hex:"c22810de9987b228c19680eb044da22a08032148a6015f358849d6d608a214b9":hex:"7747d68ca8bcb43931f1edce4f8c9727dd56c1d1d2600ad1fb767eb4fbc7b2d6":hex:"f5c40babbec97cb60ba65200e82d7a68" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #9 [#3] +depends_on:0 +3:hex:"2728be06796e2a77c60a401752cd36e4a051724aa3276a146b4b351017eee79c8257398c612fc1129c0e74ecef455cd3":hex:"d663d2cfcddf40ff61377c3811266d927a5dfc7b73cf549e673e5a15f4056ad1f9733c8ed875ff77928284dc1cdb33accc47971d3626615a45b9a16d9baf426e":hex:"62349efbac4a4747d0e92727c67a6bc7f8404cf746002e7d3eeffb9a9be0bbdc":hex:"381c0cffbdfa61a6af3f11ccd0e543208b584c3f520130e33617564ec7a48cf7":hex:"6974043362f834fd793de07ceebd051599163d50489441005afc9db09a9ab44f":hex:"df7894746c599e02d985b195ca3b4863" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #10 [#3] +depends_on:0 +3:hex:"2b65b56de410ee82e55bd2bf80e6cee356a37c3a3aa7042df45fa750a74e097b071fc18d6eed96523dd4fbb677b8c729":hex:"bf03a6b3e8e23ff53369b971217dc3d3f4c1211329c94847347b3aa77dc7a3e0670381573527844a1ade786f18631944558defffb9a00900ca55f97ec726126b":hex:"59255e5cd2221316c945bd614471df76d5b2f394b8829de82e5c30bc178565e2":hex:"5739bc14f0f2ef9d3393928aee67b0908adaf587650928916d8ae78b0077a3b3":hex:"6b236cf0ee0dba0c92b26c60235d3868715a80c0efbc0c898b6f0b1ace8146e9":hex:"8374b571d7f2d94ce2bdadeb9d815397" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #11 [#3] +depends_on:0 +3:hex:"8756ee2c5e381c7c1dc530748b76a6274ef6583090e555d85210e2356feb2974a8f15119a04e9b481cd3bc557a197b8e":hex:"19705743eaaaa0e8890a0faa2e0df37c820d556c7a45f04d76276f9f9ce2e7c133258ae6d1ba9cdf7745d01745763d18dcd1af2c9e9b0bed2806e60f0f9b636c":hex:"2b4a92b682e9a557466af97b735e2ffdbac3bfc31fd5be2cd212cfbd4b8d690a":hex:"e86504f10317bbeab346f3b9e4b310cbe9fbd81a42054f358eacd08cccab6eff":hex:"19ffad856a6675268cc464ca6fdb8afd0912143e552668528d1484c9a54592cf":hex:"f347fd58aff2999530e258be77591701" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #12 [#3] +depends_on:0 +3:hex:"f58be57e5035d5c455b17a41ccf7542ffd77f5c009e0a737118ed6c4188f78fcbdbe946bf82e1fa50fd81691de82dcf3":hex:"f9939592ab2b31d92ac72673da013a588ea17bbf02cfd6e79d79f8296601633d04ceb005110f266e6100040ef33194858def8b535314c73caa0e48fc4d2f6e2d":hex:"bb1cb21a316d4b88093cbfc7917d614dca97090cdc8bb340d864547cb3e1fef6":hex:"7e42d5439d81680c8edf5c571d548699730cfada33b650a4d510172a42b298bb":hex:"e9e3cf180f72ba2c1a45d0a94b822943612143e0b642398796b0428ae1af6cf5":hex:"d0c83a4bf3517648b441d411ddcb808c" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #13 [#3] +depends_on:0 +3:hex:"898064243e44ff67151736ce8bb6f1c759cab4aaca9b87543a1ac984ef955cd5db76c1aa56aff83f1f6799f18fe531cc":hex:"b8d6be3036eeb5657fb10766354d4be897bd27973b3530270ccc02a08169a2e437b30a3635eb6ccb310f319257f58d8aa030c8aab616418e0914a46131306a0c":hex:"37572428df5826e6ae5ce95db4ef63f41e908f685204a7b64edb9f473c41e45c":hex:"28beda0e0e346b447d32208c6b4c42dcd567acfe1e483fb4a95ea82cb8ce55a5":hex:"7a0fffa541d723e16340eeb960b1b9c9aae912477e0ebfac03f8f1a3a8bdc531":hex:"611c9f6fc5193dbe3db96cbcd276168a" + +CTR_DRBG NIST Validation (AES-256 use df,False,256,128,256,256) #14 [#3] +depends_on:0 +3:hex:"50de72903b9d99764123ffaa0c721e14ad1ab5c46a34c040f25324ba1d937b8ef10467161fcf2978c2a680ac5570c6d2":hex:"5c9954fd0143e62c3bf2d5734052e3c9370f7b9d75c70f58fe33b12e3997ee2c8db84f8467affd7cfd9a9e7ec60da6f31bf9bf32aedf644e4934bd1fc916bc8d":hex:"d5dc4c9fc7171fcbfdaead558a565ffd55d245a58b22ad1666ee05131e33f49e":hex:"ea3114e92e6a19f53b207a0a54cd363a6d053fed0a827f92556f0a8580f7a342":hex:"53686f069b455af4692888d11fac15cf7b4bd38e198de4e62b7098f875198a75":hex:"9fb0df053e0345e5640aa97fedef50a6" + +CTR_DRBG CAVS 14.3 (AES-256 no df,no reseed,256,128,0,0) block 1 #0 +depends_on:0 +1:hex:"496f25b0f1301b4f501be30380a137eb":hex:"36401940fa8b1fba91a1661f211d78a0b9389a74e5bccfece8d766af1a6d3b14":hex:"":hex:"":hex:"5862eb38bd558dd978a696e6df164782ddd887e7e9a6c9f3f1fbafb78941b535a64912dfd224c6dc7454e5250b3d97165e16260c2faf1cc7735cb75fb4f07e1d" + +CTR_DRBG CAVS 14.3 (AES-256 no df,no reseed,256,128,0,256) block 1 #0 +depends_on:0 +1:hex:"41c71a24d17d974190982bb7515ce7f5":hex:"8148d65d86513ce7d38923ec2f26b9e7c677dcc8997e325b7372619e753ed944":hex:"55b446046c2d14bdd0cdba4b71873fd4762650695a11507949462da8d964ab6a":hex:"91468f1a097d99ee339462ca916cb4a10f63d53850a4f17f598eac490299b02e":hex:"54603d1a506132bbfa05b153a04f22a1d516cc46323cef15111af221f030f38d6841d4670518b4914a4631af682e7421dffaac986a38e94d92bfa758e2eb101f" + +CTR_DRBG CAVS 14.3 (AES-256 no df,no reseed,256,128,0,0) block 2 #0 +depends_on:0 +1:hex:"bac0fdc0c417aa269bbdea77e928f9f8":hex:"8b0bcb3f932170416739ea42e7dcdc6fa960645bc018820134f714b3c6912b56":hex:"":hex:"":hex:"d9c4fd81f6621a8cf06d612e9a84b80fa13d098dceaf2c083dc81cd80caedd105c7f2789963a167d72f76e81178001fd93de4623c260fe9eebced89f7b4b047a" + +CTR_DRBG CAVS 14.3 (AES-256 no df,no reseed,256,128,0,256) block 2 #0 +depends_on:0 +1:hex:"69ff3310141dbf3ece409ade58745113":hex:"d67439abf1e162e5b25941605a8aeba7d686dec133257f6c220e1c595e954a07":hex:"03e795be8379c481cb32534011ca6bf524dc754978ee5ebee475129ad39eca98":hex:"5685c7330f33004515f8c0ab27f2a1cbe0c8a4a6806d6c8486e0217b43e859f2":hex:"a6d22a4370251c51978fedc7e7753c78179ed1943d2ff1b5a374860106041a304b124d47cfa304c909f7d417843846d52dcc7ebcf5c93afef885c893b40c81ed" + +CTR_DRBG CAVS 14.3 (AES-256 no df,no reseed,256,128,0,0) block 3 #0 +depends_on:0 +1:hex:"aaa46610681167ff8d4d2c51e77911d4":hex:"58a5f79da44b9f23a98a39352972ad16031fe13637bd18d6cb6c9f5269d8e240":hex:"":hex:"":hex:"c1714f89459ce746b151509e5066d4811a06ad06c1e9b13b50c0fc7cdd77ceedc233908ebe1ea8140ec2dc262a43201be667008e081e5476b19b27214111d325" + +CTR_DRBG CAVS 14.3 (AES-256 no df,no reseed,256,128,0,256) block 3 #0 +depends_on:0 +1:hex:"6ca848651d420fb02f9b66f06b377e59":hex:"001ec3b192ddc765553e15742dffeb21cc7d97a4bcf866e3664d8a5ecb4c2463":hex:"99f139ab5ee4f7eed6148e82d79ad5f2b9fa638d574e5db79b650c0e682ca466":hex:"6e7bf0ae28a797ccbb47101f26bfe5a0b1e450c57aedf731272411fa7b6c4ed4":hex:"865b6dd4363c5940d6228cc90ba8f1a21efbaa99b0c7b37361f7fed7e969a97b68d550dd6ad4bbfaf6626779bfb43c66845c2923df9f55307c8bc9f0a3872fa7" + +CTR_DRBG CAVS 14.3 (AES-256 no df,no reseed,256,128,0,0) block 4 #0 +depends_on:0 +1:hex:"1c6a80d82012c39c9f14a808643f08e7":hex:"4ee68b3352b874e1cc29375028851dee9d5dfd88a40664c79e2b724fb11b2808":hex:"":hex:"":hex:"7c58d2a5522a88341fb55facefdb6e24840cae283948d53148a384e13b5407d7712c33434bd3d19448b43270c54860bf3495579057c70bff3084dddff08a091d" + +CTR_DRBG CAVS 14.3 (AES-256 no df,no reseed,256,128,0,256) block 4 #0 +depends_on:0 +1:hex:"70bdedbc6825c4fe0a9f7e45290ddd51":hex:"481e505bf7a36f9d96690d49154d98d6a247c14a703dbfed7cf1b7a71bee737f":hex:"5b07610c2c946eda2975a26ddadf7d73e3d287e923d9b1a2d2070776a446d8e6":hex:"2792a988ebb2e768eee0d5c263bcd76a675d6f339e5f1ab2ca595e6b3b4d024a":hex:"303448a355fc0a69a130b6ab194997b220970bf680914913da904e92109dee3d9f23871130c407045cf463ce783a5dfafd603a8384790573af385d479acd7206" + +CTR_DRBG CAVS 14.3 (AES-128 use df,no reseed,128,64,0,0) block 1 #0 +depends_on:1 +1:hex:"aad471ef3ef1d203":hex:"890eb067acf7382eff80b0c73bc872c6":hex:"":hex:"":hex:"a5514ed7095f64f3d0d3a5760394ab42062f373a25072a6ea6bcfd8489e94af6cf18659fea22ed1ca0a9e33f718b115ee536b12809c31b72b08ddd8be1910fa3" + +CTR_DRBG CAVS 14.3 (AES-128 use df,no reseed,128,64,0,128) block 1 #0 +depends_on:1 +1:hex:"026c768fd577b92a":hex:"b408cefb5bc7157d3f26cb95a8b1d7ac":hex:"5737ef81dee365b6dadb3feebf5d1084":hex:"3368a516b3431a3daaa60dc8743c8297":hex:"4e909ebb24147a0004063a5e47ee044fead610d62324bd0f963f756fb91361e8b87e3a76a398143fe88130fe1b547b661a6480c711b739f18a9df3ae51d41bc9" + +CTR_DRBG CAVS 14.3 (AES-128 use df,no reseed,128,64,0,0) block 2 #0 +depends_on:1 +1:hex:"259195269ec11af6":hex:"2d2ab564202918c4ef5b102dda385a18":hex:"":hex:"":hex:"2c5cd79ed87622a91b8654c8903d852242cd49cb5df2d4b4150584301c59f01fd95a702ac157c84cc15f42c8211335672d8ce1291ef9b1def78149a04fa2697c" + +CTR_DRBG CAVS 14.3 (AES-128 use df,no reseed,128,64,0,128) block 2 #0 +depends_on:1 +1:hex:"b25716931b6e3cc1":hex:"adf5711f93d8c8997349429ccaedae0a":hex:"abf8cd66dd39758b01d7dbb99ab17dc3":hex:"4be0f6b2755377c6e881fbb261b56beb":hex:"d420604dee6467492db5957c86207a708fd242ed67942aed299425335c83b41437418582f41bc7fc0ef0d6927f34d83acd67c70133644fd711dd5a65731f9f02" + +CTR_DRBG CAVS 14.3 (AES-128 use df,no reseed,128,64,0,0) block 3 #0 +depends_on:1 +1:hex:"38aa5590f6bfaa4b":hex:"2e1724db482232a3e61f92c1c266faf8":hex:"":hex:"":hex:"4438b48a45fb0141e31f0a9624dfe6fcc2f9edc075c0a52bc5fc46d85a966c853feee6af913234b3f9a679f667898dc15a24aaed89f035bfa5da516e435bbad1" + +CTR_DRBG CAVS 14.3 (AES-128 use df,no reseed,128,64,0,128) block 3 #0 +depends_on:1 +1:hex:"111d8612a0f04e2a":hex:"9bfaefb698b1b5fcc62db2c16498c33a":hex:"aedbe02847b1b08b6a673bdf25b0224c":hex:"9901ead62ce56573b0f71cd020fe3469":hex:"dff8bf2aec531f8532607e738bd79f91d6085cb19568b7b0240ce6a6b371a282bafcdba02137df990535d9ebf0ba77117751626b2678aca7be4decfd6b9d4b38" + +CTR_DRBG CAVS 14.3 (AES-128 use df,no reseed,128,64,0,0) block 4 #0 +depends_on:1 +1:hex:"e78c5571c5f926f9":hex:"6bdf5332bdce4655d45c2cfea897b000":hex:"":hex:"":hex:"e0715688765a3285e7b7db555f277924e7171f7541bf26122b13dbaaa39f9e2b0345c659583ff8c9cfd888f1abd2f3b36a7c9d47c687b01c819a9f9888542e0f" + +CTR_DRBG CAVS 14.3 (AES-128 use df,no reseed,128,64,0,128) block 4 #0 +depends_on:1 +1:hex:"7ee2614ead3c128e":hex:"8b80936e69c67edb771c28f9b9452124":hex:"fc35cba97a1e211bc420e8af53f8e13c":hex:"fba438aaa75a3cd4cd0cce399bfec74a":hex:"6721cc1ada5ebc1713f74c759000765652eeb5f3f9c24fb9341b36a369cec1d27ea80d6b73b56047af07138c5a43c99a87753115c471b8587ea65fa2065e3ce0" + +CTR_DRBG CAVS 14.3 (AES-256 use df,False,256,128,0,0) #0 +depends_on:0 +4:hex:"0bf814b411f65ec4866be1abb59d3c32":hex:"2d4c9f46b981c6a0b2b5d8c69391e569ff13851437ebc0fc00d616340252fed593500fae4fa32b86033b7a7bac9d37e710dcc67ca266bc8607d665937766d207":hex:"":hex:"":hex:"":hex:"322dd28670e75c0ea638f3cb68d6a9d6e50ddfd052b772a7b1d78263a7b8978b6740c2b65a9550c3a76325866fa97e16d74006bc96f26249b9f0a90d076f08e5" + +CTR_DRBG CAVS 14.3 (AES-128 use df,False,128,64,0,0) #0 +depends_on:1 +4:hex:"5209e5b4ed82a234":hex:"0f65da13dca407999d4773c2b4a11d851dea0a12c52bf64339dd291c80d8ca89":hex:"":hex:"":hex:"":hex:"2859cc468a76b08661ffd23b28547ffd0997ad526a0f51261b99ed3a37bd407bf418dbe6c6c3e26ed0ddefcb7474d899bd99f3655427519fc5b4057bcaf306d4" + +CTR_DRBG CAVS 14.3 (AES-256 use df,True,256,128,0,0) #0 +depends_on:0 +2:hex:"a2d015f22d854e29de278d910c573de5":hex:"16a1f035388cd8d956026e3b0117cb524dd3eb563f9a7720bb7dcb0fc6fbe743cf140bcd4d7130e7e3ea14046c56442b57c43b34ad219553e7105c18f6e561afe27c9f0be60d82d6cc474efb7fc737b16a6895d9a3a45b971d19b743c1a4ac8f":hex:"":hex:"":hex:"b4e8395bcb7503410a94633f70e9904a5b30e62c35bc6dd2a03496c4a49932e184fbffdbcf1de1c72c50d36dc2ae8f04f40f96aae159c3fb816ca16df99b6c3e" + +CTR_DRBG CAVS 14.3 (AES-128 use df,True,128,64,0,0) #0 +depends_on:1 +2:hex:"d4f1f4ae08bcb3e1":hex:"5d4041942bcf68864a4997d8171f1f9fef55a769b7eaf03fe082029bb32a2b9d8239e865c0a42e14b964b9c09de85a20":hex:"":hex:"":hex:"4155320287eedcf7d484c2c2a1e2eb64b9c9ce77c87202a1ae1616c7a5cfd1c687c7a0bfcc85bda48fdd4629fd330c22d0a76076f88fc7cd04037ee06b7af602" + +CTR_DRBG entropy usage (default entropy_nonce_len) +6:exp:0 + +CTR_DRBG entropy usage (entropy_nonce_len=0) +6:int:0 + +CTR_DRBG entropy usage (entropy_nonce_len=7) +6:int:7 + +CTR_DRBG entropy strength: 128 bits +depends_on:1 +5:int:128 + +CTR_DRBG entropy strength: 256 bits +depends_on:0 +5:int:256 + +CTR_DRBG write/update seed file [#1] +7:char*:"/tmp/test_suite_ctr_drbg_seed":int:0 + +CTR_DRBG write/update seed file [#2] +7:char*:"/tmp/test_suite_ctr_dbg_no_such_dir/file":exp:1 + +CTR_DRBG Special Behaviours +0 + +CTR_DRBG self test +8 + diff --git a/third_party/mbedtls/test/test_suite_des.c b/third_party/mbedtls/test/test_suite_des.c new file mode 100644 index 000000000..32957279b --- /dev/null +++ b/third_party/mbedtls/test/test_suite_des.c @@ -0,0 +1,685 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_des.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_des.function + * Test suite data : suites/test_suite_des.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_DES_C) +#include "third_party/mbedtls/des.h" +void test_des_check_weak( data_t * key, int ret ) +{ + TEST_ASSERT( mbedtls_des_key_check_weak( key->x ) == ret ); +exit: + ; +} + +void test_des_check_weak_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_des_check_weak( &data0, *( (int *) params[2] ) ); +} +void test_des_encrypt_ecb( data_t * key_str, data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_des_context ctx; + + memset(output, 0x00, 100); + mbedtls_des_init( &ctx ); + + + mbedtls_des_setkey_enc( &ctx, key_str->x ); + TEST_ASSERT( mbedtls_des_crypt_ecb( &ctx, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 8, dst->len ) == 0 ); + +exit: + mbedtls_des_free( &ctx ); +} + +void test_des_encrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_des_encrypt_ecb( &data0, &data2, &data4 ); +} +void test_des_decrypt_ecb( data_t * key_str, data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_des_context ctx; + + memset(output, 0x00, 100); + mbedtls_des_init( &ctx ); + + + mbedtls_des_setkey_dec( &ctx, key_str->x ); + TEST_ASSERT( mbedtls_des_crypt_ecb( &ctx, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 8, dst->len ) == 0 ); + +exit: + mbedtls_des_free( &ctx ); +} + +void test_des_decrypt_ecb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_des_decrypt_ecb( &data0, &data2, &data4 ); +} +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_des_encrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, int cbc_result ) +{ + unsigned char output[100]; + mbedtls_des_context ctx; + + memset(output, 0x00, 100); + mbedtls_des_init( &ctx ); + + + mbedtls_des_setkey_enc( &ctx, key_str->x ); + TEST_ASSERT( mbedtls_des_crypt_cbc( &ctx, MBEDTLS_DES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, src_str->len, + dst->len ) == 0 ); + } + +exit: + mbedtls_des_free( &ctx ); +} + +void test_des_encrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_des_encrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_des_decrypt_cbc( data_t * key_str, data_t * iv_str, + data_t * src_str, data_t * dst, + int cbc_result ) +{ + unsigned char output[100]; + mbedtls_des_context ctx; + + memset(output, 0x00, 100); + mbedtls_des_init( &ctx ); + + + mbedtls_des_setkey_dec( &ctx, key_str->x ); + TEST_ASSERT( mbedtls_des_crypt_cbc( &ctx, MBEDTLS_DES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + if( cbc_result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, src_str->len, + dst->len ) == 0 ); + } + +exit: + mbedtls_des_free( &ctx ); +} + +void test_des_decrypt_cbc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_des_decrypt_cbc( &data0, &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +void test_des3_encrypt_ecb( int key_count, data_t * key_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_des3_context ctx; + + memset(output, 0x00, 100); + mbedtls_des3_init( &ctx ); + + + if( key_count == 2 ) + mbedtls_des3_set2key_enc( &ctx, key_str->x ); + else if( key_count == 3 ) + mbedtls_des3_set3key_enc( &ctx, key_str->x ); + else + TEST_ASSERT( 0 ); + + TEST_ASSERT( mbedtls_des3_crypt_ecb( &ctx, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 8, dst->len ) == 0 ); + +exit: + mbedtls_des3_free( &ctx ); +} + +void test_des3_encrypt_ecb_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + + test_des3_encrypt_ecb( *( (int *) params[0] ), &data1, &data3, &data5 ); +} +void test_des3_decrypt_ecb( int key_count, data_t * key_str, + data_t * src_str, data_t * dst ) +{ + unsigned char output[100]; + mbedtls_des3_context ctx; + + memset(output, 0x00, 100); + mbedtls_des3_init( &ctx ); + + + if( key_count == 2 ) + mbedtls_des3_set2key_dec( &ctx, key_str->x ); + else if( key_count == 3 ) + mbedtls_des3_set3key_dec( &ctx, key_str->x ); + else + TEST_ASSERT( 0 ); + + TEST_ASSERT( mbedtls_des3_crypt_ecb( &ctx, src_str->x, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, 8, dst->len ) == 0 ); + +exit: + mbedtls_des3_free( &ctx ); +} + +void test_des3_decrypt_ecb_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + + test_des3_decrypt_ecb( *( (int *) params[0] ), &data1, &data3, &data5 ); +} +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_des3_encrypt_cbc( int key_count, data_t * key_str, + data_t * iv_str, data_t * src_str, + data_t * dst, int cbc_result ) +{ + unsigned char output[100]; + mbedtls_des3_context ctx; + + memset(output, 0x00, 100); + mbedtls_des3_init( &ctx ); + + + if( key_count == 2 ) + mbedtls_des3_set2key_enc( &ctx, key_str->x ); + else if( key_count == 3 ) + mbedtls_des3_set3key_enc( &ctx, key_str->x ); + else + TEST_ASSERT( 0 ); + + TEST_ASSERT( mbedtls_des3_crypt_cbc( &ctx, MBEDTLS_DES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + + if( cbc_result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + } + +exit: + mbedtls_des3_free( &ctx ); +} + +void test_des3_encrypt_cbc_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + + test_des3_encrypt_cbc( *( (int *) params[0] ), &data1, &data3, &data5, &data7, *( (int *) params[9] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_des3_decrypt_cbc( int key_count, data_t * key_str, + data_t * iv_str, data_t * src_str, + data_t * dst, int cbc_result ) +{ + unsigned char output[100]; + mbedtls_des3_context ctx; + + memset(output, 0x00, 100); + mbedtls_des3_init( &ctx ); + + + if( key_count == 2 ) + mbedtls_des3_set2key_dec( &ctx, key_str->x ); + else if( key_count == 3 ) + mbedtls_des3_set3key_dec( &ctx, key_str->x ); + else + TEST_ASSERT( 0 ); + + TEST_ASSERT( mbedtls_des3_crypt_cbc( &ctx, MBEDTLS_DES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result ); + + if( cbc_result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, src_str->len, + dst->len ) == 0 ); + } + +exit: + mbedtls_des3_free( &ctx ); +} + +void test_des3_decrypt_cbc_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + + test_des3_decrypt_cbc( *( (int *) params[0] ), &data1, &data3, &data5, &data7, *( (int *) params[9] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +void test_des_key_parity_run( ) +{ + int i, j, cnt; + unsigned char key[MBEDTLS_DES_KEY_SIZE]; + unsigned int parity; + + memset( key, 0, MBEDTLS_DES_KEY_SIZE ); + cnt = 0; + + // Iterate through all possible byte values + // + for( i = 0; i < 32; i++ ) + { + for( j = 0; j < 8; j++ ) + key[j] = cnt++; + + // Set the key parity according to the table + // + mbedtls_des_key_set_parity( key ); + + // Check the parity with a function + // + for( j = 0; j < 8; j++ ) + { + parity = key[j] ^ ( key[j] >> 4 ); + parity = parity ^ + ( parity >> 1 ) ^ + ( parity >> 2 ) ^ + ( parity >> 3 ); + parity &= 1; + + if( parity != 1 ) + TEST_ASSERT( 0 ); + } + + // Check the parity with the table + // + TEST_ASSERT( mbedtls_des_key_check_key_parity( key ) == 0 ); + } +exit: + ; +} + +void test_des_key_parity_run_wrapper( void ** params ) +{ + (void)params; + + test_des_key_parity_run( ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_des_selftest( ) +{ + TEST_ASSERT( mbedtls_des_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_des_selftest_wrapper( void ** params ) +{ + (void)params; + + test_des_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_DES_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_DES_C) + + case 0: + { + *out_value = MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_DES_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_DES_C) + test_des_check_weak_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_DES_C) + test_des_encrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_DES_C) + test_des_decrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_DES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_des_encrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_DES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_des_decrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_DES_C) + test_des3_encrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_DES_C) + test_des3_decrypt_ecb_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_DES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_des3_encrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_DES_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_des3_decrypt_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_DES_C) + test_des_key_parity_run_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_DES_C) && defined(MBEDTLS_SELF_TEST) + test_des_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_des.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_des.datax b/third_party/mbedtls/test/test_suite_des.datax new file mode 100644 index 000000000..251a8f4ef --- /dev/null +++ b/third_party/mbedtls/test/test_suite_des.datax @@ -0,0 +1,252 @@ +DES check weak key #1 +0:hex:"0101010101010101":int:1 + +DES check weak key #2 +0:hex:"FEE0FEE0FEF1FEF1":int:1 + +DES check weak key #3 +0:hex:"0101010101010100":int:0 + +DES check weak key #4 +0:hex:"EEE0FEE0FEF1FEF1":int:0 + +DES Encrypt OpenSSL Test Vector #1 +1:hex:"0000000000000000":hex:"0000000000000000":hex:"8CA64DE9C1B123A7" + +DES Encrypt OpenSSL Test Vector #2 +1:hex:"FFFFFFFFFFFFFFFF":hex:"FFFFFFFFFFFFFFFF":hex:"7359B2163E4EDC58" + +DES Encrypt OpenSSL Test Vector #3 +1:hex:"3000000000000000":hex:"1000000000000001":hex:"958E6E627A05557B" + +DES Encrypt OpenSSL Test Vector #4 +1:hex:"1111111111111111":hex:"1111111111111111":hex:"F40379AB9E0EC533" + +DES Encrypt OpenSSL Test Vector #5 +1:hex:"0123456789ABCDEF":hex:"1111111111111111":hex:"17668DFC7292532D" + +DES Encrypt OpenSSL Test Vector #6 +1:hex:"1111111111111111":hex:"0123456789ABCDEF":hex:"8A5AE1F81AB8F2DD" + +DES Encrypt OpenSSL Test Vector #7 +1:hex:"0000000000000000":hex:"0000000000000000":hex:"8CA64DE9C1B123A7" + +DES Encrypt OpenSSL Test Vector #8 +1:hex:"FEDCBA9876543210":hex:"0123456789ABCDEF":hex:"ED39D950FA74BCC4" + +DES Encrypt OpenSSL Test Vector #9 +1:hex:"7CA110454A1A6E57":hex:"01A1D6D039776742":hex:"690F5B0D9A26939B" + +DES Encrypt OpenSSL Test Vector #10 +1:hex:"0131D9619DC1376E":hex:"5CD54CA83DEF57DA":hex:"7A389D10354BD271" + +DES Encrypt OpenSSL Test Vector #11 +1:hex:"07A1133E4A0B2686":hex:"0248D43806F67172":hex:"868EBB51CAB4599A" + +DES Encrypt OpenSSL Test Vector #12 +1:hex:"3849674C2602319E":hex:"51454B582DDF440A":hex:"7178876E01F19B2A" + +DES Encrypt OpenSSL Test Vector #13 +1:hex:"04B915BA43FEB5B6":hex:"42FD443059577FA2":hex:"AF37FB421F8C4095" + +DES Encrypt OpenSSL Test Vector #14 +1:hex:"0113B970FD34F2CE":hex:"059B5E0851CF143A":hex:"86A560F10EC6D85B" + +DES Encrypt OpenSSL Test Vector #15 +1:hex:"0170F175468FB5E6":hex:"0756D8E0774761D2":hex:"0CD3DA020021DC09" + +DES Encrypt OpenSSL Test Vector #16 +1:hex:"43297FAD38E373FE":hex:"762514B829BF486A":hex:"EA676B2CB7DB2B7A" + +DES Encrypt OpenSSL Test Vector #17 +1:hex:"07A7137045DA2A16":hex:"3BDD119049372802":hex:"DFD64A815CAF1A0F" + +DES Encrypt OpenSSL Test Vector #18 +1:hex:"04689104C2FD3B2F":hex:"26955F6835AF609A":hex:"5C513C9C4886C088" + +DES Encrypt OpenSSL Test Vector #19 +1:hex:"37D06BB516CB7546":hex:"164D5E404F275232":hex:"0A2AEEAE3FF4AB77" + +DES Encrypt OpenSSL Test Vector #20 +1:hex:"1F08260D1AC2465E":hex:"6B056E18759F5CCA":hex:"EF1BF03E5DFA575A" + +DES Encrypt OpenSSL Test Vector #21 +1:hex:"584023641ABA6176":hex:"004BD6EF09176062":hex:"88BF0DB6D70DEE56" + +DES Encrypt OpenSSL Test Vector #22 +1:hex:"025816164629B007":hex:"480D39006EE762F2":hex:"A1F9915541020B56" + +DES Encrypt OpenSSL Test Vector #23 +1:hex:"49793EBC79B3258F":hex:"437540C8698F3CFA":hex:"6FBF1CAFCFFD0556" + +DES Encrypt OpenSSL Test Vector #24 +1:hex:"4FB05E1515AB73A7":hex:"072D43A077075292":hex:"2F22E49BAB7CA1AC" + +DES Encrypt OpenSSL Test Vector #25 +1:hex:"49E95D6D4CA229BF":hex:"02FE55778117F12A":hex:"5A6B612CC26CCE4A" + +DES Encrypt OpenSSL Test Vector #26 +1:hex:"018310DC409B26D6":hex:"1D9D5C5018F728C2":hex:"5F4C038ED12B2E41" + +DES Encrypt OpenSSL Test Vector #27 +1:hex:"1C587F1C13924FEF":hex:"305532286D6F295A":hex:"63FAC0D034D9F793" + +DES Encrypt OpenSSL Test Vector #28 +1:hex:"0101010101010101":hex:"0123456789ABCDEF":hex:"617B3A0CE8F07100" + +DES Encrypt OpenSSL Test Vector #29 +1:hex:"1F1F1F1F0E0E0E0E":hex:"0123456789ABCDEF":hex:"DB958605F8C8C606" + +DES Encrypt OpenSSL Test Vector #30 +1:hex:"E0FEE0FEF1FEF1FE":hex:"0123456789ABCDEF":hex:"EDBFD1C66C29CCC7" + +DES Encrypt OpenSSL Test Vector #31 +1:hex:"0000000000000000":hex:"FFFFFFFFFFFFFFFF":hex:"355550B2150E2451" + +DES Encrypt OpenSSL Test Vector #32 +1:hex:"FFFFFFFFFFFFFFFF":hex:"0000000000000000":hex:"CAAAAF4DEAF1DBAE" + +DES Encrypt OpenSSL Test Vector #33 +1:hex:"0123456789ABCDEF":hex:"0000000000000000":hex:"D5D44FF720683D0D" + +DES Encrypt OpenSSL Test Vector #34 +1:hex:"FEDCBA9876543210":hex:"FFFFFFFFFFFFFFFF":hex:"2A2BB008DF97C2F2" + +DES Decrypt OpenSSL Test Vector #1 +2:hex:"0000000000000000":hex:"8CA64DE9C1B123A7":hex:"0000000000000000" + +DES Decrypt OpenSSL Test Vector #2 +2:hex:"FFFFFFFFFFFFFFFF":hex:"7359B2163E4EDC58":hex:"FFFFFFFFFFFFFFFF" + +DES Decrypt OpenSSL Test Vector #3 +2:hex:"3000000000000000":hex:"958E6E627A05557B":hex:"1000000000000001" + +DES Decrypt OpenSSL Test Vector #4 +2:hex:"1111111111111111":hex:"F40379AB9E0EC533":hex:"1111111111111111" + +DES Decrypt OpenSSL Test Vector #5 +2:hex:"0123456789ABCDEF":hex:"17668DFC7292532D":hex:"1111111111111111" + +DES Decrypt OpenSSL Test Vector #6 +2:hex:"1111111111111111":hex:"8A5AE1F81AB8F2DD":hex:"0123456789ABCDEF" + +DES Decrypt OpenSSL Test Vector #7 +2:hex:"0000000000000000":hex:"8CA64DE9C1B123A7":hex:"0000000000000000" + +DES Decrypt OpenSSL Test Vector #8 +2:hex:"FEDCBA9876543210":hex:"ED39D950FA74BCC4":hex:"0123456789ABCDEF" + +DES Decrypt OpenSSL Test Vector #9 +2:hex:"7CA110454A1A6E57":hex:"690F5B0D9A26939B":hex:"01A1D6D039776742" + +DES Decrypt OpenSSL Test Vector #10 +2:hex:"0131D9619DC1376E":hex:"7A389D10354BD271":hex:"5CD54CA83DEF57DA" + +DES Decrypt OpenSSL Test Vector #11 +2:hex:"07A1133E4A0B2686":hex:"868EBB51CAB4599A":hex:"0248D43806F67172" + +DES Decrypt OpenSSL Test Vector #12 +2:hex:"3849674C2602319E":hex:"7178876E01F19B2A":hex:"51454B582DDF440A" + +DES Decrypt OpenSSL Test Vector #13 +2:hex:"04B915BA43FEB5B6":hex:"AF37FB421F8C4095":hex:"42FD443059577FA2" + +DES Decrypt OpenSSL Test Vector #14 +2:hex:"0113B970FD34F2CE":hex:"86A560F10EC6D85B":hex:"059B5E0851CF143A" + +DES Decrypt OpenSSL Test Vector #15 +2:hex:"0170F175468FB5E6":hex:"0CD3DA020021DC09":hex:"0756D8E0774761D2" + +DES Decrypt OpenSSL Test Vector #16 +2:hex:"43297FAD38E373FE":hex:"EA676B2CB7DB2B7A":hex:"762514B829BF486A" + +DES Decrypt OpenSSL Test Vector #17 +2:hex:"07A7137045DA2A16":hex:"DFD64A815CAF1A0F":hex:"3BDD119049372802" + +DES Decrypt OpenSSL Test Vector #18 +2:hex:"04689104C2FD3B2F":hex:"5C513C9C4886C088":hex:"26955F6835AF609A" + +DES Decrypt OpenSSL Test Vector #19 +2:hex:"37D06BB516CB7546":hex:"0A2AEEAE3FF4AB77":hex:"164D5E404F275232" + +DES Decrypt OpenSSL Test Vector #20 +2:hex:"1F08260D1AC2465E":hex:"EF1BF03E5DFA575A":hex:"6B056E18759F5CCA" + +DES Decrypt OpenSSL Test Vector #21 +2:hex:"584023641ABA6176":hex:"88BF0DB6D70DEE56":hex:"004BD6EF09176062" + +DES Decrypt OpenSSL Test Vector #22 +2:hex:"025816164629B007":hex:"A1F9915541020B56":hex:"480D39006EE762F2" + +DES Decrypt OpenSSL Test Vector #23 +2:hex:"49793EBC79B3258F":hex:"6FBF1CAFCFFD0556":hex:"437540C8698F3CFA" + +DES Decrypt OpenSSL Test Vector #24 +2:hex:"4FB05E1515AB73A7":hex:"2F22E49BAB7CA1AC":hex:"072D43A077075292" + +DES Decrypt OpenSSL Test Vector #25 +2:hex:"49E95D6D4CA229BF":hex:"5A6B612CC26CCE4A":hex:"02FE55778117F12A" + +DES Decrypt OpenSSL Test Vector #26 +2:hex:"018310DC409B26D6":hex:"5F4C038ED12B2E41":hex:"1D9D5C5018F728C2" + +DES Decrypt OpenSSL Test Vector #27 +2:hex:"1C587F1C13924FEF":hex:"63FAC0D034D9F793":hex:"305532286D6F295A" + +DES Decrypt OpenSSL Test Vector #28 +2:hex:"0101010101010101":hex:"617B3A0CE8F07100":hex:"0123456789ABCDEF" + +DES Decrypt OpenSSL Test Vector #29 +2:hex:"1F1F1F1F0E0E0E0E":hex:"DB958605F8C8C606":hex:"0123456789ABCDEF" + +DES Decrypt OpenSSL Test Vector #30 +2:hex:"E0FEE0FEF1FEF1FE":hex:"EDBFD1C66C29CCC7":hex:"0123456789ABCDEF" + +DES Decrypt OpenSSL Test Vector #31 +2:hex:"0000000000000000":hex:"355550B2150E2451":hex:"FFFFFFFFFFFFFFFF" + +DES Decrypt OpenSSL Test Vector #32 +2:hex:"FFFFFFFFFFFFFFFF":hex:"CAAAAF4DEAF1DBAE":hex:"0000000000000000" + +DES Decrypt OpenSSL Test Vector #33 +2:hex:"0123456789ABCDEF":hex:"D5D44FF720683D0D":hex:"0000000000000000" + +DES Decrypt OpenSSL Test Vector #34 +2:hex:"FEDCBA9876543210":hex:"2A2BB008DF97C2F2":hex:"FFFFFFFFFFFFFFFF" + +DES-CBC Encrypt OpenSSL Test Vector #1 +3:hex:"0123456789abcdef":hex:"fedcba9876543210":hex:"37363534333231204E6F77206973207468652074696D6520":hex:"ccd173ffab2039f4acd8aefddfd8a1eb468e91157888ba68":int:0 + +DES-CBC Decrypt OpenSSL Test Vector #1 +4:hex:"0123456789abcdef":hex:"fedcba9876543210":hex:"ccd173ffab2039f4acd8aefddfd8a1eb468e91157888ba68":hex:"37363534333231204E6F77206973207468652074696D6520":int:0 + +3DES-ECB 2Key Encrypt OpenSSL Test Vector #1 +5:int:2:hex:"0000000000000000FFFFFFFFFFFFFFFF":hex:"0000000000000000":hex:"9295B59BB384736E" + +3DES-ECB 2Key Encrypt OpenSSL Test Vector #2 +5:int:2:hex:"FFFFFFFFFFFFFFFF3000000000000000":hex:"FFFFFFFFFFFFFFFF":hex:"199E9D6DF39AA816" + +3DES-ECB 2Key Decrypt OpenSSL Test Vector #1 +6:int:2:hex:"0000000000000000FFFFFFFFFFFFFFFF":hex:"9295B59BB384736E":hex:"0000000000000000" + +3DES-ECB 2Key Decrypt OpenSSL Test Vector #2 +6:int:2:hex:"FFFFFFFFFFFFFFFF3000000000000000":hex:"199E9D6DF39AA816":hex:"FFFFFFFFFFFFFFFF" + +3DES-CBC 3Key Encrypt OpenSSL Test Vector #1 +7:int:3:hex:"0123456789abcdeff1e0d3c2b5a49786fedcba9876543210":hex:"fedcba9876543210":hex:"37363534333231204E6F77206973207468652074696D6520":hex:"3FE301C962AC01D02213763C1CBD4CDC799657C064ECF5D4":int:0 + +3DES-CBC 3Key Decrypt OpenSSL Test Vector #1 +8:int:3:hex:"0123456789abcdeff1e0d3c2b5a49786fedcba9876543210":hex:"fedcba9876543210":hex:"3FE301C962AC01D02213763C1CBD4CDC799657C064ECF5D4":hex:"37363534333231204E6F77206973207468652074696D6520":int:0 + +DES-CBC Encrypt (Invalid input length) +3:hex:"0123456789abcdef":hex:"fedcba9876543210":hex:"37363534333231204E6F77206973207468652074696D65":hex:"":exp:0 + +3DES-CBC 3Key Encrypt (Invalid input length) +7:int:3:hex:"0123456789abcdeff1e0d3c2b5a49786fedcba9876543210":hex:"fedcba9876543210":hex:"37363534333231204E6F77206973207468652074696D65":hex:"":exp:0 + +Run through parity bit tests +9 + +DES Selftest +10 + diff --git a/third_party/mbedtls/test/test_suite_dhm.c b/third_party/mbedtls/test/test_suite_dhm.c new file mode 100644 index 000000000..b39abedbe --- /dev/null +++ b/third_party/mbedtls/test/test_suite_dhm.c @@ -0,0 +1,621 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_dhm.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_dhm.function + * Test suite data : suites/test_suite_dhm.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_DHM_C) +#if defined(MBEDTLS_BIGNUM_C) +#include "third_party/mbedtls/dhm.h" +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_dhm_invalid_params( ) +{ + mbedtls_dhm_context ctx; + unsigned char buf[42] = { 0 }; + unsigned char *buf_null = NULL; + mbedtls_mpi X; + size_t const buflen = sizeof( buf ); + size_t len; + + TEST_INVALID_PARAM( mbedtls_dhm_init( NULL ) ); + TEST_VALID_PARAM( mbedtls_dhm_free( NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_read_params( NULL, + (unsigned char**) &buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_read_params( &ctx, &buf_null, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_read_params( &ctx, NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_read_params( &ctx, + (unsigned char**) &buf, + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_make_params( NULL, buflen, + buf, &len, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_make_params( &ctx, buflen, + NULL, &len, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_make_params( &ctx, buflen, + buf, NULL, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_make_params( &ctx, buflen, + buf, &len, + NULL, + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_set_group( NULL, &X, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_set_group( &ctx, NULL, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_set_group( &ctx, &X, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_read_public( NULL, buf, buflen ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_read_public( &ctx, NULL, buflen ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_make_public( NULL, buflen, + buf, buflen, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_make_public( &ctx, buflen, + NULL, buflen, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_make_public( &ctx, buflen, + buf, buflen, + NULL, + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_calc_secret( NULL, buf, buflen, &len, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_calc_secret( &ctx, NULL, buflen, &len, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_calc_secret( &ctx, buf, buflen, NULL, + mbedtls_test_rnd_std_rand, + NULL ) ); + +#if defined(MBEDTLS_ASN1_PARSE_C) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_parse_dhm( NULL, buf, buflen ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_parse_dhm( &ctx, NULL, buflen ) ); + +#if defined(MBEDTLS_FS_IO) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_parse_dhmfile( NULL, "" ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA, + mbedtls_dhm_parse_dhmfile( &ctx, NULL ) ); +#endif /* MBEDTLS_FS_IO */ +#endif /* MBEDTLS_ASN1_PARSE_C */ + +exit: + return; +} + +void test_dhm_invalid_params_wrapper( void ** params ) +{ + (void)params; + + test_dhm_invalid_params( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_dhm_do_dhm( int radix_P, char *input_P, + int radix_G, char *input_G, int result ) +{ + mbedtls_dhm_context ctx_srv; + mbedtls_dhm_context ctx_cli; + unsigned char ske[1000]; + unsigned char *p = ske; + unsigned char pub_cli[1000]; + unsigned char sec_srv[1000]; + unsigned char sec_cli[1000]; + size_t ske_len = 0; + size_t pub_cli_len = 0; + size_t sec_srv_len; + size_t sec_cli_len; + int x_size, i; + mbedtls_test_rnd_pseudo_info rnd_info; + + mbedtls_dhm_init( &ctx_srv ); + mbedtls_dhm_init( &ctx_cli ); + memset( ske, 0x00, 1000 ); + memset( pub_cli, 0x00, 1000 ); + memset( sec_srv, 0x00, 1000 ); + memset( sec_cli, 0x00, 1000 ); + memset( &rnd_info, 0x00, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + /* + * Set params + */ + TEST_ASSERT( mbedtls_mpi_read_string( &ctx_srv.P, radix_P, input_P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &ctx_srv.G, radix_G, input_G ) == 0 ); + x_size = mbedtls_mpi_size( &ctx_srv.P ); + pub_cli_len = x_size; + + /* + * First key exchange + */ + TEST_ASSERT( mbedtls_dhm_make_params( &ctx_srv, x_size, ske, &ske_len, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == result ); + if ( result != 0 ) + goto exit; + + ske[ske_len++] = 0; + ske[ske_len++] = 0; + TEST_ASSERT( mbedtls_dhm_read_params( &ctx_cli, &p, ske + ske_len ) == 0 ); + + TEST_ASSERT( mbedtls_dhm_make_public( &ctx_cli, x_size, pub_cli, pub_cli_len, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_dhm_read_public( &ctx_srv, pub_cli, pub_cli_len ) == 0 ); + + TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_srv, sec_srv, sizeof( sec_srv ), + &sec_srv_len, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_cli, sec_cli, sizeof( sec_cli ), &sec_cli_len, NULL, NULL ) == 0 ); + + TEST_ASSERT( sec_srv_len == sec_cli_len ); + TEST_ASSERT( sec_srv_len != 0 ); + TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 ); + + /* Re-do calc_secret on server a few times to test update of blinding values */ + for( i = 0; i < 3; i++ ) + { + sec_srv_len = 1000; + TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_srv, sec_srv, + sizeof( sec_srv ), &sec_srv_len, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + + TEST_ASSERT( sec_srv_len == sec_cli_len ); + TEST_ASSERT( sec_srv_len != 0 ); + TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 ); + } + + /* + * Second key exchange to test change of blinding values on server + */ + p = ske; + + TEST_ASSERT( mbedtls_dhm_make_params( &ctx_srv, x_size, ske, &ske_len, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + ske[ske_len++] = 0; + ske[ske_len++] = 0; + TEST_ASSERT( mbedtls_dhm_read_params( &ctx_cli, &p, ske + ske_len ) == 0 ); + + TEST_ASSERT( mbedtls_dhm_make_public( &ctx_cli, x_size, pub_cli, pub_cli_len, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_dhm_read_public( &ctx_srv, pub_cli, pub_cli_len ) == 0 ); + + TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_srv, sec_srv, sizeof( sec_srv ), + &sec_srv_len, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_dhm_calc_secret( &ctx_cli, sec_cli, sizeof( sec_cli ), &sec_cli_len, NULL, NULL ) == 0 ); + + TEST_ASSERT( sec_srv_len == sec_cli_len ); + TEST_ASSERT( sec_srv_len != 0 ); + TEST_ASSERT( memcmp( sec_srv, sec_cli, sec_srv_len ) == 0 ); + +exit: + mbedtls_dhm_free( &ctx_srv ); + mbedtls_dhm_free( &ctx_cli ); +} + +void test_dhm_do_dhm_wrapper( void ** params ) +{ + + test_dhm_do_dhm( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ) ); +} +void test_dhm_make_public( int P_bytes, int radix_G, char *input_G, int result ) +{ + mbedtls_mpi P, G; + mbedtls_dhm_context ctx; + unsigned char output[MBEDTLS_MPI_MAX_SIZE]; + + mbedtls_mpi_init( &P ); + mbedtls_mpi_init( &G ); + mbedtls_dhm_init( &ctx ); + + TEST_ASSERT( mbedtls_mpi_lset( &P, 1 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_shift_l( &P, ( P_bytes * 8 ) - 1 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_set_bit( &P, 0, 1 ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_string( &G, radix_G, input_G ) == 0 ); + + TEST_ASSERT( mbedtls_dhm_set_group( &ctx, &P, &G ) == 0 ); + TEST_ASSERT( mbedtls_dhm_make_public( &ctx, (int) mbedtls_mpi_size( &P ), + output, sizeof(output), + &mbedtls_test_rnd_pseudo_rand, + NULL ) == result ); + +exit: + mbedtls_mpi_free( &P ); + mbedtls_mpi_free( &G ); + mbedtls_dhm_free( &ctx ); +} + +void test_dhm_make_public_wrapper( void ** params ) +{ + + test_dhm_make_public( *( (int *) params[0] ), *( (int *) params[1] ), (char *) params[2], *( (int *) params[3] ) ); +} +#if defined(MBEDTLS_FS_IO) +void test_dhm_file( char * filename, char * p, char * g, int len ) +{ + mbedtls_dhm_context ctx; + mbedtls_mpi P, G; + + mbedtls_dhm_init( &ctx ); + mbedtls_mpi_init( &P ); mbedtls_mpi_init( &G ); + + TEST_ASSERT( mbedtls_mpi_read_string( &P, 16, p ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &G, 16, g ) == 0 ); + + TEST_ASSERT( mbedtls_dhm_parse_dhmfile( &ctx, filename ) == 0 ); + + TEST_ASSERT( ctx.len == (size_t) len ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx.P, &P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx.G, &G ) == 0 ); + +exit: + mbedtls_mpi_free( &P ); mbedtls_mpi_free( &G ); + mbedtls_dhm_free( &ctx ); +} + +void test_dhm_file_wrapper( void ** params ) +{ + + test_dhm_file( (char *) params[0], (char *) params[1], (char *) params[2], *( (int *) params[3] ) ); +} +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_SELF_TEST) +void test_dhm_selftest( ) +{ + TEST_ASSERT( mbedtls_dhm_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_dhm_selftest_wrapper( void ** params ) +{ + (void)params; + + test_dhm_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_BIGNUM_C */ +#endif /* MBEDTLS_DHM_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_BIGNUM_C) + + case 0: + { + *out_value = MBEDTLS_ERR_DHM_BAD_INPUT_DATA; + } + break; + case 1: + { + *out_value = MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED; + } + break; + case 2: + { + *out_value = MBEDTLS_MPI_MAX_SIZE; + } + break; + case 3: + { + *out_value = MBEDTLS_MPI_MAX_SIZE + 1; + } + break; + case 4: + { + *out_value = MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED+MBEDTLS_ERR_MPI_BAD_INPUT_DATA; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_BIGNUM_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_dhm_invalid_params_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_BIGNUM_C) + test_dhm_do_dhm_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_BIGNUM_C) + test_dhm_make_public_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) + test_dhm_file_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_SELF_TEST) + test_dhm_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_dhm.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_dhm.datax b/third_party/mbedtls/test/test_suite_dhm.datax new file mode 100644 index 000000000..9fdce3995 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_dhm.datax @@ -0,0 +1,39 @@ +Diffie-Hellman parameter validation +0 + +Diffie-Hellman full exchange #1 +1:int:10:char*:"23":int:10:char*:"5":int:0 + +Diffie-Hellman full exchange #2 +1:int:10:char*:"93450983094850938450983409623":int:10:char*:"9345098304850938450983409622":int:0 + +Diffie-Hellman full exchange #3 +1:int:10:char*:"93450983094850938450983409623982317398171298719873918739182739712938719287391879381271":int:10:char*:"9345098309485093845098340962223981329819812792137312973297123912791271":int:0 + +Diffie-Hellman trivial subgroup #1 +1:int:10:char*:"23":int:10:char*:"1":exp:0 + +Diffie-Hellman trivial subgroup #2 +1:int:10:char*:"23":int:10:char*:"-1":exp:0 + +Diffie-Hellman small modulus +1:int:10:char*:"3":int:10:char*:"5":exp:1 + +Diffie-Hellman zero modulus +1:int:10:char*:"0":int:10:char*:"5":exp:0 + +Diffie-Hellman MPI_MAX_SIZE modulus +2:exp:2:int:10:char*:"5":int:0 + +Diffie-Hellman MPI_MAX_SIZE + 1 modulus +2:exp:3:int:10:char*:"5":exp:4 + +Diffie-Hellman load parameters from file [#1] +3:char*:"zip:third_party/mbedtls/test/data/dhparams.pem":char*:"9e35f430443a09904f3a39a979797d070df53378e79c2438bef4e761f3c714553328589b041c809be1d6c6b5f1fc9f47d3a25443188253a992a56818b37ba9de5a40d362e56eff0be5417474c125c199272c8fe41dea733df6f662c92ae76556e755d10c64e6a50968f67fc6ea73d0dca8569be2ba204e23580d8bca2f4975b3":char*:"02":int:128 + +Diffie-Hellman load parameters from file [#2] +3:char*:"zip:third_party/mbedtls/test/data/dh.optlen.pem":char*:"b3126aeaf47153c7d67f403030b292b5bd5a6c9eae1c137af34087fce2a36a578d70c5c560ad2bdb924c4a4dbee20a1671be7103ce87defa76908936803dbeca60c33e1289c1a03ac2c6c4e49405e5902fa0596a1cbaa895cc402d5213ed4a5f1f5ba8b5e1ed3da951a4c475afeb0ca660b7368c38c8e809f382d96ae19e60dc984e61cb42b5dfd723322acf327f9e413cda6400c15c5b2ea1fa34405d83982fba40e6d852da3d91019bf23511314254dc211a90833e5b1798ee52a78198c555644729ad92f060367c74ded37704adfc273a4a33fec821bd2ebd3bc051730e97a4dd14d2b766062592f5eec09d16bb50efebf2cc00dd3e0e3418e60ec84870f7":char*:"800abfe7dc667aa17bcd7c04614bc221a65482ccc04b604602b0e131908a938ea11b48dc515dab7abcbb1e0c7fd66511edc0d86551b7632496e03df94357e1c4ea07a7ce1e381a2fcafdff5f5bf00df828806020e875c00926e4d011f88477a1b01927d73813cad4847c6396b9244621be2b00b63c659253318413443cd244215cd7fd4cbe796e82c6cf70f89cc0c528fb8e344809b31876e7ef739d5160d095c9684188b0c8755c7a468d47f56d6db9ea012924ecb0556fb71312a8d7c93bb2898ea08ee54eeb594548285f06a973cbbe2a0cb02e90f323fe045521f34c68354a6d3e95dbfff1eb64692edc0a44f3d3e408d0e479a541e779a6054259e2d854":int:256 + +Diffie-Hellman selftest +4 + diff --git a/third_party/mbedtls/test/test_suite_ecdh.c b/third_party/mbedtls/test/test_suite_ecdh.c new file mode 100644 index 000000000..c7aa71d49 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_ecdh.c @@ -0,0 +1,1073 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_ecdh.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_ecdh.function + * Test suite data : suites/test_suite_ecdh.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_ECDH_C) +#include "third_party/mbedtls/ecdh.h" + +static int load_public_key( int grp_id, data_t *point, + mbedtls_ecp_keypair *ecp ) +{ + int ok = 0; + TEST_ASSERT( mbedtls_ecp_group_load( &ecp->grp, grp_id ) == 0 ); + TEST_ASSERT( mbedtls_ecp_point_read_binary( &ecp->grp, + &ecp->Q, + point->x, + point->len ) == 0 ); + TEST_ASSERT( mbedtls_ecp_check_pubkey( &ecp->grp, + &ecp->Q ) == 0 ); + ok = 1; +exit: + return( ok ); +} + +static int load_private_key( int grp_id, data_t *private_key, + mbedtls_ecp_keypair *ecp, + mbedtls_test_rnd_pseudo_info *rnd_info ) +{ + int ok = 0; + TEST_ASSERT( mbedtls_ecp_read_key( grp_id, ecp, + private_key->x, + private_key->len ) == 0 ); + TEST_ASSERT( mbedtls_ecp_check_privkey( &ecp->grp, &ecp->d ) == 0 ); + /* Calculate the public key from the private key. */ + TEST_ASSERT( mbedtls_ecp_mul( &ecp->grp, &ecp->Q, &ecp->d, + &ecp->grp.G, + &mbedtls_test_rnd_pseudo_rand, + rnd_info ) == 0 ); + ok = 1; +exit: + return( ok ); +} + +void test_ecdh_valid_param( ) +{ + TEST_VALID_PARAM( mbedtls_ecdh_free( NULL ) ); +exit: + ; +} + +void test_ecdh_valid_param_wrapper( void ** params ) +{ + (void)params; + + test_ecdh_valid_param( ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_ecdh_invalid_param( ) +{ + mbedtls_ecp_group grp; + mbedtls_ecdh_context ctx; + mbedtls_mpi m; + mbedtls_ecp_point P; + mbedtls_ecp_keypair kp; + size_t olen; + unsigned char buf[42] = { 0 }; + const unsigned char *buf_null = NULL; + size_t const buflen = sizeof( buf ); + int invalid_side = 42; + mbedtls_ecp_group_id valid_grp = MBEDTLS_ECP_DP_SECP192R1; + + TEST_INVALID_PARAM( mbedtls_ecdh_init( NULL ) ); + +#if defined(MBEDTLS_ECP_RESTARTABLE) + TEST_INVALID_PARAM( mbedtls_ecdh_enable_restart( NULL ) ); +#endif /* MBEDTLS_ECP_RESTARTABLE */ + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_gen_public( NULL, &m, &P, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_gen_public( &grp, NULL, &P, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_gen_public( &grp, &m, NULL, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_gen_public( &grp, &m, &P, + NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_compute_shared( NULL, &m, &P, &m, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_compute_shared( &grp, NULL, &P, &m, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_compute_shared( &grp, &m, NULL, &m, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_compute_shared( &grp, &m, &P, NULL, + mbedtls_test_rnd_std_rand, + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_setup( NULL, valid_grp ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_make_params( NULL, &olen, buf, buflen, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_make_params( &ctx, NULL, buf, buflen, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_make_params( &ctx, &olen, NULL, buflen, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_make_params( &ctx, &olen, buf, buflen, NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_read_params( NULL, + (const unsigned char**) &buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_read_params( &ctx, &buf_null, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_read_params( &ctx, NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_read_params( &ctx, + (const unsigned char**) &buf, + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_get_params( NULL, &kp, + MBEDTLS_ECDH_OURS ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_get_params( &ctx, NULL, + MBEDTLS_ECDH_OURS ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_get_params( &ctx, &kp, + invalid_side ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_make_public( NULL, &olen, buf, buflen, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_make_public( &ctx, NULL, buf, buflen, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_make_public( &ctx, &olen, NULL, buflen, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_make_public( &ctx, &olen, buf, buflen, NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_read_public( NULL, buf, buflen ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_read_public( &ctx, NULL, buflen ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_calc_secret( NULL, &olen, buf, buflen, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_calc_secret( &ctx, NULL, buf, buflen, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdh_calc_secret( &ctx, &olen, NULL, buflen, + mbedtls_test_rnd_std_rand, NULL ) ); + +exit: + return; +} + +void test_ecdh_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_ecdh_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_ecdh_primitive_random( int id ) +{ + mbedtls_ecp_group grp; + mbedtls_ecp_point qA, qB; + mbedtls_mpi dA, dB, zA, zB; + mbedtls_test_rnd_pseudo_info rnd_info; + + mbedtls_ecp_group_init( &grp ); + mbedtls_ecp_point_init( &qA ); mbedtls_ecp_point_init( &qB ); + mbedtls_mpi_init( &dA ); mbedtls_mpi_init( &dB ); + mbedtls_mpi_init( &zA ); mbedtls_mpi_init( &zB ); + memset( &rnd_info, 0x00, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + + TEST_ASSERT( mbedtls_ecdh_gen_public( &grp, &dA, &qA, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_ecdh_gen_public( &grp, &dB, &qB, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_ecdh_compute_shared( &grp, &zA, &qB, &dA, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_ecdh_compute_shared( &grp, &zB, &qA, &dB, + NULL, NULL ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &zA, &zB ) == 0 ); + +exit: + mbedtls_ecp_group_free( &grp ); + mbedtls_ecp_point_free( &qA ); mbedtls_ecp_point_free( &qB ); + mbedtls_mpi_free( &dA ); mbedtls_mpi_free( &dB ); + mbedtls_mpi_free( &zA ); mbedtls_mpi_free( &zB ); +} + +void test_ecdh_primitive_random_wrapper( void ** params ) +{ + + test_ecdh_primitive_random( *( (int *) params[0] ) ); +} +void test_ecdh_primitive_testvec( int id, data_t * rnd_buf_A, char * xA_str, + char * yA_str, data_t * rnd_buf_B, + char * xB_str, char * yB_str, char * z_str ) +{ + mbedtls_ecp_group grp; + mbedtls_ecp_point qA, qB; + mbedtls_mpi dA, dB, zA, zB, check; + mbedtls_test_rnd_buf_info rnd_info_A, rnd_info_B; + + mbedtls_ecp_group_init( &grp ); + mbedtls_ecp_point_init( &qA ); mbedtls_ecp_point_init( &qB ); + mbedtls_mpi_init( &dA ); mbedtls_mpi_init( &dB ); + mbedtls_mpi_init( &zA ); mbedtls_mpi_init( &zB ); mbedtls_mpi_init( &check ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + + rnd_info_A.buf = rnd_buf_A->x; + rnd_info_A.length = rnd_buf_A->len; + + /* Fix rnd_buf_A->x by shifting it left if necessary */ + if( grp.nbits % 8 != 0 ) + { + unsigned char shift = 8 - ( grp.nbits % 8 ); + size_t i; + + for( i = 0; i < rnd_info_A.length - 1; i++ ) + rnd_buf_A->x[i] = rnd_buf_A->x[i] << shift + | rnd_buf_A->x[i+1] >> ( 8 - shift ); + + rnd_buf_A->x[rnd_info_A.length-1] <<= shift; + } + + rnd_info_B.buf = rnd_buf_B->x; + rnd_info_B.length = rnd_buf_B->len; + + /* Fix rnd_buf_B->x by shifting it left if necessary */ + if( grp.nbits % 8 != 0 ) + { + unsigned char shift = 8 - ( grp.nbits % 8 ); + size_t i; + + for( i = 0; i < rnd_info_B.length - 1; i++ ) + rnd_buf_B->x[i] = rnd_buf_B->x[i] << shift + | rnd_buf_B->x[i+1] >> ( 8 - shift ); + + rnd_buf_B->x[rnd_info_B.length-1] <<= shift; + } + + TEST_ASSERT( mbedtls_ecdh_gen_public( &grp, &dA, &qA, + mbedtls_test_rnd_buffer_rand, + &rnd_info_A ) == 0 ); + TEST_ASSERT( ! mbedtls_ecp_is_zero( &qA ) ); + TEST_ASSERT( mbedtls_mpi_read_string( &check, 16, xA_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &qA.X, &check ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &check, 16, yA_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &qA.Y, &check ) == 0 ); + + TEST_ASSERT( mbedtls_ecdh_gen_public( &grp, &dB, &qB, + mbedtls_test_rnd_buffer_rand, + &rnd_info_B ) == 0 ); + TEST_ASSERT( ! mbedtls_ecp_is_zero( &qB ) ); + TEST_ASSERT( mbedtls_mpi_read_string( &check, 16, xB_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &qB.X, &check ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &check, 16, yB_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &qB.Y, &check ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_string( &check, 16, z_str ) == 0 ); + TEST_ASSERT( mbedtls_ecdh_compute_shared( &grp, &zA, &qB, &dA, NULL, NULL ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &zA, &check ) == 0 ); + TEST_ASSERT( mbedtls_ecdh_compute_shared( &grp, &zB, &qA, &dB, NULL, NULL ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &zB, &check ) == 0 ); + +exit: + mbedtls_ecp_group_free( &grp ); + mbedtls_ecp_point_free( &qA ); mbedtls_ecp_point_free( &qB ); + mbedtls_mpi_free( &dA ); mbedtls_mpi_free( &dB ); + mbedtls_mpi_free( &zA ); mbedtls_mpi_free( &zB ); mbedtls_mpi_free( &check ); +} + +void test_ecdh_primitive_testvec_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + + test_ecdh_primitive_testvec( *( (int *) params[0] ), &data1, (char *) params[3], (char *) params[4], &data5, (char *) params[7], (char *) params[8], (char *) params[9] ); +} +void test_ecdh_exchange( int id ) +{ + mbedtls_ecdh_context srv, cli; + unsigned char buf[1000]; + const unsigned char *vbuf; + size_t len; + mbedtls_test_rnd_pseudo_info rnd_info; + unsigned char res_buf[1000]; + size_t res_len; + + mbedtls_ecdh_init( &srv ); + mbedtls_ecdh_init( &cli ); + memset( &rnd_info, 0x00, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + TEST_ASSERT( mbedtls_ecdh_setup( &srv, id ) == 0 ); + + memset( buf, 0x00, sizeof( buf ) ); vbuf = buf; + TEST_ASSERT( mbedtls_ecdh_make_params( &srv, &len, buf, 1000, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_ecdh_read_params( &cli, &vbuf, buf + len ) == 0 ); + + memset( buf, 0x00, sizeof( buf ) ); + TEST_ASSERT( mbedtls_ecdh_make_public( &cli, &len, buf, 1000, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_ecdh_read_public( &srv, buf, len ) == 0 ); + + TEST_ASSERT( mbedtls_ecdh_calc_secret( &srv, &len, buf, 1000, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_ecdh_calc_secret( &cli, &res_len, res_buf, 1000, + NULL, NULL ) == 0 ); + TEST_ASSERT( len == res_len ); + TEST_ASSERT( memcmp( buf, res_buf, len ) == 0 ); + +exit: + mbedtls_ecdh_free( &srv ); + mbedtls_ecdh_free( &cli ); +} + +void test_ecdh_exchange_wrapper( void ** params ) +{ + + test_ecdh_exchange( *( (int *) params[0] ) ); +} +#if defined(MBEDTLS_ECP_RESTARTABLE) +void test_ecdh_restart( int id, data_t *dA, data_t *dB, data_t *z, + int enable, int max_ops, int min_restart, int max_restart ) +{ + int ret; + mbedtls_ecdh_context srv, cli; + unsigned char buf[1000]; + const unsigned char *vbuf; + size_t len; + mbedtls_test_rnd_buf_info rnd_info_A, rnd_info_B; + int cnt_restart; + mbedtls_ecp_group grp; + + mbedtls_ecp_group_init( &grp ); + mbedtls_ecdh_init( &srv ); + mbedtls_ecdh_init( &cli ); + + rnd_info_A.buf = dA->x; + rnd_info_A.length = dA->len; + + rnd_info_B.buf = dB->x; + rnd_info_B.length = dB->len; + + /* The ECDH context is not guaranteed ot have an mbedtls_ecp_group structure + * in every configuration, therefore we load it separately. */ + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + + /* Otherwise we would have to fix the random buffer, + * as in ecdh_primitive_testvec. */ + TEST_ASSERT( grp.nbits % 8 == 0 ); + + TEST_ASSERT( mbedtls_ecdh_setup( &srv, id ) == 0 ); + + /* set up restart parameters */ + mbedtls_ecp_set_max_ops( max_ops ); + + if( enable ) + { + mbedtls_ecdh_enable_restart( &srv ); + mbedtls_ecdh_enable_restart( &cli ); + } + + /* server writes its parameters */ + memset( buf, 0x00, sizeof( buf ) ); + len = 0; + + cnt_restart = 0; + do { + ret = mbedtls_ecdh_make_params( &srv, &len, buf, sizeof( buf ), + mbedtls_test_rnd_buffer_rand, + &rnd_info_A ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restart ); + + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( cnt_restart >= min_restart ); + TEST_ASSERT( cnt_restart <= max_restart ); + + /* client read server params */ + vbuf = buf; + TEST_ASSERT( mbedtls_ecdh_read_params( &cli, &vbuf, buf + len ) == 0 ); + + /* client writes its key share */ + memset( buf, 0x00, sizeof( buf ) ); + len = 0; + + cnt_restart = 0; + do { + ret = mbedtls_ecdh_make_public( &cli, &len, buf, sizeof( buf ), + mbedtls_test_rnd_buffer_rand, + &rnd_info_B ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restart ); + + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( cnt_restart >= min_restart ); + TEST_ASSERT( cnt_restart <= max_restart ); + + /* server reads client key share */ + TEST_ASSERT( mbedtls_ecdh_read_public( &srv, buf, len ) == 0 ); + + /* server computes shared secret */ + memset( buf, 0, sizeof( buf ) ); + len = 0; + + cnt_restart = 0; + do { + ret = mbedtls_ecdh_calc_secret( &srv, &len, buf, sizeof( buf ), + NULL, NULL ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restart ); + + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( cnt_restart >= min_restart ); + TEST_ASSERT( cnt_restart <= max_restart ); + + TEST_ASSERT( len == z->len ); + TEST_ASSERT( memcmp( buf, z->x, len ) == 0 ); + + /* client computes shared secret */ + memset( buf, 0, sizeof( buf ) ); + len = 0; + + cnt_restart = 0; + do { + ret = mbedtls_ecdh_calc_secret( &cli, &len, buf, sizeof( buf ), + NULL, NULL ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restart ); + + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( cnt_restart >= min_restart ); + TEST_ASSERT( cnt_restart <= max_restart ); + + TEST_ASSERT( len == z->len ); + TEST_ASSERT( memcmp( buf, z->x, len ) == 0 ); + +exit: + mbedtls_ecp_group_free( &grp ); + mbedtls_ecdh_free( &srv ); + mbedtls_ecdh_free( &cli ); +} + +void test_ecdh_restart_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + + test_ecdh_restart( *( (int *) params[0] ), &data1, &data3, &data5, *( (int *) params[7] ), *( (int *) params[8] ), *( (int *) params[9] ), *( (int *) params[10] ) ); +} +#endif /* MBEDTLS_ECP_RESTARTABLE */ +#if defined(MBEDTLS_ECDH_LEGACY_CONTEXT) +void test_ecdh_exchange_legacy( int id ) +{ + mbedtls_ecdh_context srv, cli; + unsigned char buf[1000]; + const unsigned char *vbuf; + size_t len; + + mbedtls_test_rnd_pseudo_info rnd_info; + + mbedtls_ecdh_init( &srv ); + mbedtls_ecdh_init( &cli ); + memset( &rnd_info, 0x00, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + TEST_ASSERT( mbedtls_ecp_group_load( &srv.grp, id ) == 0 ); + + memset( buf, 0x00, sizeof( buf ) ); vbuf = buf; + TEST_ASSERT( mbedtls_ecdh_make_params( &srv, &len, buf, 1000, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_ecdh_read_params( &cli, &vbuf, buf + len ) == 0 ); + + memset( buf, 0x00, sizeof( buf ) ); + TEST_ASSERT( mbedtls_ecdh_make_public( &cli, &len, buf, 1000, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_ecdh_read_public( &srv, buf, len ) == 0 ); + + TEST_ASSERT( mbedtls_ecdh_calc_secret( &srv, &len, buf, 1000, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_ecdh_calc_secret( &cli, &len, buf, 1000, NULL, + NULL ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &srv.z, &cli.z ) == 0 ); + +exit: + mbedtls_ecdh_free( &srv ); + mbedtls_ecdh_free( &cli ); +} + +void test_ecdh_exchange_legacy_wrapper( void ** params ) +{ + + test_ecdh_exchange_legacy( *( (int *) params[0] ) ); +} +#endif /* MBEDTLS_ECDH_LEGACY_CONTEXT */ +void test_ecdh_exchange_calc_secret( int grp_id, + data_t *our_private_key, + data_t *their_point, + int ours_first, + data_t *expected ) +{ + mbedtls_test_rnd_pseudo_info rnd_info; + mbedtls_ecp_keypair our_key; + mbedtls_ecp_keypair their_key; + mbedtls_ecdh_context ecdh; + unsigned char shared_secret[MBEDTLS_ECP_MAX_BYTES]; + size_t shared_secret_length = 0; + + memset( &rnd_info, 0x00, sizeof( mbedtls_test_rnd_pseudo_info ) ); + mbedtls_ecdh_init( &ecdh ); + mbedtls_ecp_keypair_init( &our_key ); + mbedtls_ecp_keypair_init( &their_key ); + + if( ! load_private_key( grp_id, our_private_key, &our_key, &rnd_info ) ) + goto exit; + if( ! load_public_key( grp_id, their_point, &their_key ) ) + goto exit; + + /* Import the keys to the ECDH calculation. */ + if( ours_first ) + { + TEST_ASSERT( mbedtls_ecdh_get_params( + &ecdh, &our_key, MBEDTLS_ECDH_OURS ) == 0 ); + TEST_ASSERT( mbedtls_ecdh_get_params( + &ecdh, &their_key, MBEDTLS_ECDH_THEIRS ) == 0 ); + } + else + { + TEST_ASSERT( mbedtls_ecdh_get_params( + &ecdh, &their_key, MBEDTLS_ECDH_THEIRS ) == 0 ); + TEST_ASSERT( mbedtls_ecdh_get_params( + &ecdh, &our_key, MBEDTLS_ECDH_OURS ) == 0 ); + } + + /* Perform the ECDH calculation. */ + TEST_ASSERT( mbedtls_ecdh_calc_secret( + &ecdh, + &shared_secret_length, + shared_secret, sizeof( shared_secret ), + &mbedtls_test_rnd_pseudo_rand, &rnd_info ) == 0 ); + TEST_ASSERT( shared_secret_length == expected->len ); + TEST_ASSERT( memcmp( expected->x, shared_secret, + shared_secret_length ) == 0 ); + +exit: + mbedtls_ecdh_free( &ecdh ); + mbedtls_ecp_keypair_free( &our_key ); + mbedtls_ecp_keypair_free( &their_key ); +} + +void test_ecdh_exchange_calc_secret_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_ecdh_exchange_calc_secret( *( (int *) params[0] ), &data1, &data3, *( (int *) params[5] ), &data6 ); +} +void test_ecdh_exchange_get_params_fail( int our_grp_id, + data_t *our_private_key, + int their_grp_id, + data_t *their_point, + int ours_first, + int expected_ret ) +{ + mbedtls_test_rnd_pseudo_info rnd_info; + mbedtls_ecp_keypair our_key; + mbedtls_ecp_keypair their_key; + mbedtls_ecdh_context ecdh; + + memset( &rnd_info, 0x00, sizeof( mbedtls_test_rnd_pseudo_info ) ); + mbedtls_ecdh_init( &ecdh ); + mbedtls_ecp_keypair_init( &our_key ); + mbedtls_ecp_keypair_init( &their_key ); + + if( ! load_private_key( our_grp_id, our_private_key, &our_key, &rnd_info ) ) + goto exit; + if( ! load_public_key( their_grp_id, their_point, &their_key ) ) + goto exit; + + if( ours_first ) + { + TEST_ASSERT( mbedtls_ecdh_get_params( + &ecdh, &our_key, MBEDTLS_ECDH_OURS ) == 0 ); + TEST_ASSERT( mbedtls_ecdh_get_params( + &ecdh, &their_key, MBEDTLS_ECDH_THEIRS ) == + expected_ret ); + } + else + { + TEST_ASSERT( mbedtls_ecdh_get_params( + &ecdh, &their_key, MBEDTLS_ECDH_THEIRS ) == 0 ); + TEST_ASSERT( mbedtls_ecdh_get_params( + &ecdh, &our_key, MBEDTLS_ECDH_OURS ) == + expected_ret ); + } + +exit: + mbedtls_ecdh_free( &ecdh ); + mbedtls_ecp_keypair_free( &our_key ); + mbedtls_ecp_keypair_free( &their_key ); +} + +void test_ecdh_exchange_get_params_fail_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_ecdh_exchange_get_params_fail( *( (int *) params[0] ), &data1, *( (int *) params[3] ), &data4, *( (int *) params[6] ), *( (int *) params[7] ) ); +} +#endif /* MBEDTLS_ECDH_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_ECDH_C) + + case 0: + { + *out_value = MBEDTLS_ECP_DP_SECP192R1; + } + break; + case 1: + { + *out_value = MBEDTLS_ECP_DP_SECP224R1; + } + break; + case 2: + { + *out_value = MBEDTLS_ECP_DP_SECP256R1; + } + break; + case 3: + { + *out_value = MBEDTLS_ECP_DP_SECP384R1; + } + break; + case 4: + { + *out_value = MBEDTLS_ECP_DP_SECP521R1; + } + break; + case 5: + { + *out_value = MBEDTLS_ECP_DP_CURVE25519; + } + break; + case 6: + { + *out_value = MBEDTLS_ECP_DP_BP256R1; + } + break; + case 7: + { + *out_value = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_ECDH_C) + + case 0: + { +#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 5: + { +#if defined(MBEDTLS_ECP_DP_CURVE25519_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 6: + { +#if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_ECDH_C) + test_ecdh_valid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_ECDH_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_ecdh_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_ECDH_C) + test_ecdh_primitive_random_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_ECDH_C) + test_ecdh_primitive_testvec_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_ECDH_C) + test_ecdh_exchange_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_ECDH_C) && defined(MBEDTLS_ECP_RESTARTABLE) + test_ecdh_restart_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_ECDH_C) && defined(MBEDTLS_ECDH_LEGACY_CONTEXT) + test_ecdh_exchange_legacy_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_ECDH_C) + test_ecdh_exchange_calc_secret_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_ECDH_C) + test_ecdh_exchange_get_params_fail_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_ecdh.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_ecdh.datax b/third_party/mbedtls/test/test_suite_ecdh.datax new file mode 100644 index 000000000..9efc75eb1 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_ecdh.datax @@ -0,0 +1,110 @@ +ECDH - Valid parameters +0 + +ECDH - Invalid parameters +1 + +ECDH primitive random #1 +depends_on:0 +2:exp:0 + +ECDH primitive random #2 +depends_on:1 +2:exp:1 + +ECDH primitive random #3 +depends_on:2 +2:exp:2 + +ECDH primitive random #4 +depends_on:3 +2:exp:3 + +ECDH primitive random #5 +depends_on:4 +2:exp:4 + +ECDH primitive rfc 5903 p256 +depends_on:2 +3:exp:2:hex:"C88F01F510D9AC3F70A292DAA2316DE544E9AAB8AFE84049C62A9C57862D1433":char*:"DAD0B65394221CF9B051E1FECA5787D098DFE637FC90B9EF945D0C3772581180":char*:"5271A0461CDB8252D61F1C456FA3E59AB1F45B33ACCF5F58389E0577B8990BB3":hex:"C6EF9C5D78AE012A011164ACB397CE2088685D8F06BF9BE0B283AB46476BEE53":char*:"D12DFB5289C8D4F81208B70270398C342296970A0BCCB74C736FC7554494BF63":char*:"56FBF3CA366CC23E8157854C13C58D6AAC23F046ADA30F8353E74F33039872AB":char*:"D6840F6B42F6EDAFD13116E0E12565202FEF8E9ECE7DCE03812464D04B9442DE" + +ECDH primitive rfc 5903 p384 +depends_on:3 +3:exp:3:hex:"099F3C7034D4A2C699884D73A375A67F7624EF7C6B3C0F160647B67414DCE655E35B538041E649EE3FAEF896783AB194":char*:"667842D7D180AC2CDE6F74F37551F55755C7645C20EF73E31634FE72B4C55EE6DE3AC808ACB4BDB4C88732AEE95F41AA":char*:"9482ED1FC0EEB9CAFC4984625CCFC23F65032149E0E144ADA024181535A0F38EEB9FCFF3C2C947DAE69B4C634573A81C":hex:"41CB0779B4BDB85D47846725FBEC3C9430FAB46CC8DC5060855CC9BDA0AA2942E0308312916B8ED2960E4BD55A7448FC":char*:"E558DBEF53EECDE3D3FCCFC1AEA08A89A987475D12FD950D83CFA41732BC509D0D1AC43A0336DEF96FDA41D0774A3571":char*:"DCFBEC7AACF3196472169E838430367F66EEBE3C6E70C416DD5F0C68759DD1FFF83FA40142209DFF5EAAD96DB9E6386C":char*:"11187331C279962D93D604243FD592CB9D0A926F422E47187521287E7156C5C4D603135569B9E9D09CF5D4A270F59746" + +ECDH primitive rfc 5903 p521 +depends_on:4 +3:exp:4:hex:"0037ADE9319A89F4DABDB3EF411AACCCA5123C61ACAB57B5393DCE47608172A095AA85A30FE1C2952C6771D937BA9777F5957B2639BAB072462F68C27A57382D4A52":char*:"0015417E84DBF28C0AD3C278713349DC7DF153C897A1891BD98BAB4357C9ECBEE1E3BF42E00B8E380AEAE57C2D107564941885942AF5A7F4601723C4195D176CED3E":char*:"017CAE20B6641D2EEB695786D8C946146239D099E18E1D5A514C739D7CB4A10AD8A788015AC405D7799DC75E7B7D5B6CF2261A6A7F1507438BF01BEB6CA3926F9582":hex:"0145BA99A847AF43793FDD0E872E7CDFA16BE30FDC780F97BCCC3F078380201E9C677D600B343757A3BDBF2A3163E4C2F869CCA7458AA4A4EFFC311F5CB151685EB9":char*:"00D0B3975AC4B799F5BEA16D5E13E9AF971D5E9B984C9F39728B5E5739735A219B97C356436ADC6E95BB0352F6BE64A6C2912D4EF2D0433CED2B6171640012D9460F":char*:"015C68226383956E3BD066E797B623C27CE0EAC2F551A10C2C724D9852077B87220B6536C5C408A1D2AEBB8E86D678AE49CB57091F4732296579AB44FCD17F0FC56A":char*:"01144C7D79AE6956BC8EDB8E7C787C4521CB086FA64407F97894E5E6B2D79B04D1427E73CA4BAA240A34786859810C06B3C715A3A8CC3151F2BEE417996D19F3DDEA" + +ECDH exchange #1 +depends_on:0 +4:exp:0 + +ECDH exchange #2 +depends_on:4 +4:exp:4 + +ECDH restartable rfc 5903 p256 restart enabled max_ops=0 (disabled) +depends_on:2 +5:exp:2:hex:"C88F01F510D9AC3F70A292DAA2316DE544E9AAB8AFE84049C62A9C57862D1433":hex:"C6EF9C5D78AE012A011164ACB397CE2088685D8F06BF9BE0B283AB46476BEE53":hex:"D6840F6B42F6EDAFD13116E0E12565202FEF8E9ECE7DCE03812464D04B9442DE":int:1:int:0:int:0:int:0 + +ECDH restartable rfc 5903 p256 restart enabled max_ops=1 +depends_on:2 +5:exp:2:hex:"C88F01F510D9AC3F70A292DAA2316DE544E9AAB8AFE84049C62A9C57862D1433":hex:"C6EF9C5D78AE012A011164ACB397CE2088685D8F06BF9BE0B283AB46476BEE53":hex:"D6840F6B42F6EDAFD13116E0E12565202FEF8E9ECE7DCE03812464D04B9442DE":int:1:int:1:int:1:int:10000 + +ECDH restartable rfc 5903 p256 restart enabled max_ops=10000 +depends_on:2 +5:exp:2:hex:"C88F01F510D9AC3F70A292DAA2316DE544E9AAB8AFE84049C62A9C57862D1433":hex:"C6EF9C5D78AE012A011164ACB397CE2088685D8F06BF9BE0B283AB46476BEE53":hex:"D6840F6B42F6EDAFD13116E0E12565202FEF8E9ECE7DCE03812464D04B9442DE":int:1:int:10000:int:0:int:0 + +ECDH restartable rfc 5903 p256 restart enabled max_ops=250 +depends_on:2 +5:exp:2:hex:"C88F01F510D9AC3F70A292DAA2316DE544E9AAB8AFE84049C62A9C57862D1433":hex:"C6EF9C5D78AE012A011164ACB397CE2088685D8F06BF9BE0B283AB46476BEE53":hex:"D6840F6B42F6EDAFD13116E0E12565202FEF8E9ECE7DCE03812464D04B9442DE":int:1:int:250:int:2:int:32 + +ECDH restartable rfc 5903 p256 restart disabled max_ops=0 (disabled) +depends_on:2 +5:exp:2:hex:"C88F01F510D9AC3F70A292DAA2316DE544E9AAB8AFE84049C62A9C57862D1433":hex:"C6EF9C5D78AE012A011164ACB397CE2088685D8F06BF9BE0B283AB46476BEE53":hex:"D6840F6B42F6EDAFD13116E0E12565202FEF8E9ECE7DCE03812464D04B9442DE":int:0:int:0:int:0:int:0 + +ECDH restartable rfc 5903 p256 restart disabled max_ops=1 +depends_on:2 +5:exp:2:hex:"C88F01F510D9AC3F70A292DAA2316DE544E9AAB8AFE84049C62A9C57862D1433":hex:"C6EF9C5D78AE012A011164ACB397CE2088685D8F06BF9BE0B283AB46476BEE53":hex:"D6840F6B42F6EDAFD13116E0E12565202FEF8E9ECE7DCE03812464D04B9442DE":int:0:int:1:int:0:int:0 + +ECDH restartable rfc 5903 p256 restart disabled max_ops=10000 +depends_on:2 +5:exp:2:hex:"C88F01F510D9AC3F70A292DAA2316DE544E9AAB8AFE84049C62A9C57862D1433":hex:"C6EF9C5D78AE012A011164ACB397CE2088685D8F06BF9BE0B283AB46476BEE53":hex:"D6840F6B42F6EDAFD13116E0E12565202FEF8E9ECE7DCE03812464D04B9442DE":int:0:int:10000:int:0:int:0 + +ECDH restartable rfc 5903 p256 restart disabled max_ops=250 +depends_on:2 +5:exp:2:hex:"C88F01F510D9AC3F70A292DAA2316DE544E9AAB8AFE84049C62A9C57862D1433":hex:"C6EF9C5D78AE012A011164ACB397CE2088685D8F06BF9BE0B283AB46476BEE53":hex:"D6840F6B42F6EDAFD13116E0E12565202FEF8E9ECE7DCE03812464D04B9442DE":int:0:int:250:int:0:int:0 + +ECDH exchange legacy context +depends_on:0 +6:exp:0 + +ECDH calc_secret: ours first, SECP256R1 (RFC 5903) +depends_on:2 +7:exp:2:hex:"c6ef9c5d78ae012a011164acb397ce2088685d8f06bf9be0b283ab46476bee53":hex:"04dad0b65394221cf9b051e1feca5787d098dfe637fc90b9ef945d0c37725811805271a0461cdb8252d61f1c456fa3e59ab1f45b33accf5f58389e0577b8990bb3":int:0:hex:"d6840f6b42f6edafd13116e0e12565202fef8e9ece7dce03812464d04b9442de" + +ECDH calc_secret: theirs first, SECP256R1 (RFC 5903) +depends_on:2 +7:exp:2:hex:"c6ef9c5d78ae012a011164acb397ce2088685d8f06bf9be0b283ab46476bee53":hex:"04dad0b65394221cf9b051e1feca5787d098dfe637fc90b9ef945d0c37725811805271a0461cdb8252d61f1c456fa3e59ab1f45b33accf5f58389e0577b8990bb3":int:1:hex:"d6840f6b42f6edafd13116e0e12565202fef8e9ece7dce03812464d04b9442de" + +ecdh calc_secret: ours first (Alice), curve25519 (rfc 7748) +depends_on:5 +7:exp:5:hex:"77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a":hex:"de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f":int:0:hex:"4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742" + +ecdh calc_secret: theirs first (Alice), curve25519 (rfc 7748) +depends_on:5 +7:exp:5:hex:"77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a":hex:"de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f":int:1:hex:"4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742" + +ecdh calc_secret: ours first (Bob), curve25519 (rfc 7748) +depends_on:5 +7:exp:5:hex:"5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb":hex:"8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a":int:0:hex:"4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742" + +ECDH get_params with mismatched groups: our BP256R1, their SECP256R1 +depends_on:2:6 +8:exp:6:hex:"1234567812345678123456781234567812345678123456781234567812345678":exp:2:hex:"04dad0b65394221cf9b051e1feca5787d098dfe637fc90b9ef945d0c37725811805271a0461cdb8252d61f1c456fa3e59ab1f45b33accf5f58389e0577b8990bb3":int:0:exp:7 + +ECDH get_params with mismatched groups: their SECP256R1, our BP256R1 +depends_on:2:6 +8:exp:6:hex:"1234567812345678123456781234567812345678123456781234567812345678":exp:2:hex:"04dad0b65394221cf9b051e1feca5787d098dfe637fc90b9ef945d0c37725811805271a0461cdb8252d61f1c456fa3e59ab1f45b33accf5f58389e0577b8990bb3":int:1:exp:7 + diff --git a/third_party/mbedtls/test/test_suite_ecdsa.c b/third_party/mbedtls/test/test_suite_ecdsa.c new file mode 100644 index 000000000..573575c30 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_ecdsa.c @@ -0,0 +1,1007 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_ecdsa.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_ecdsa.function + * Test suite data : suites/test_suite_ecdsa.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_ECDSA_C) +#include "third_party/mbedtls/ecdsa.h" +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_ecdsa_invalid_param( ) +{ + mbedtls_ecdsa_context ctx; + mbedtls_ecp_keypair key; + mbedtls_ecp_group grp; + mbedtls_ecp_group_id valid_group = MBEDTLS_ECP_DP_SECP192R1; + mbedtls_ecp_point P; + mbedtls_md_type_t valid_md = MBEDTLS_MD_SHA256; + mbedtls_mpi m; + size_t slen; + unsigned char buf[42] = { 0 }; + + TEST_INVALID_PARAM( mbedtls_ecdsa_init( NULL ) ); + TEST_VALID_PARAM( mbedtls_ecdsa_free( NULL ) ); + +#if defined(MBEDTLS_ECP_RESTARTABLE) + TEST_INVALID_PARAM( mbedtls_ecdsa_restart_init( NULL ) ); + TEST_VALID_PARAM( mbedtls_ecdsa_restart_free( NULL ) ); +#endif /* MBEDTLS_ECP_RESTARTABLE */ + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_sign( NULL, &m, &m, &m, + buf, sizeof( buf ), + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_sign( &grp, NULL, &m, &m, + buf, sizeof( buf ), + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_sign( &grp, &m, NULL, &m, + buf, sizeof( buf ), + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_sign( &grp, &m, &m, NULL, + buf, sizeof( buf ), + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_sign( &grp, &m, &m, &m, + NULL, sizeof( buf ), + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_sign( &grp, &m, &m, &m, + buf, sizeof( buf ), + NULL, NULL ) ); + +#if defined(MBEDTLS_ECDSA_DETERMINISTIC) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_sign_det_ext( NULL, &m, &m, &m, + buf, sizeof( buf ), + valid_md, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_sign_det_ext( &grp, NULL, &m, &m, + buf, sizeof( buf ), + valid_md, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_sign_det_ext( &grp, &m, NULL, &m, + buf, sizeof( buf ), + valid_md, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_sign_det_ext( &grp, &m, &m, NULL, + buf, sizeof( buf ), + valid_md, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_sign_det_ext( &grp, &m, &m, &m, + NULL, sizeof( buf ), + valid_md, + mbedtls_test_rnd_std_rand, + NULL ) ); +#endif /* MBEDTLS_ECDSA_DETERMINISTIC */ + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_verify( NULL, + buf, sizeof( buf ), + &P, &m, &m ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_verify( &grp, + NULL, sizeof( buf ), + &P, &m, &m ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_verify( &grp, + buf, sizeof( buf ), + NULL, &m, &m ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_verify( &grp, + buf, sizeof( buf ), + &P, NULL, &m ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_verify( &grp, + buf, sizeof( buf ), + &P, &m, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_write_signature( NULL, valid_md, buf, sizeof( buf ), + buf, &slen, mbedtls_test_rnd_std_rand, + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_write_signature( &ctx, valid_md, NULL, sizeof( buf ), + buf, &slen, mbedtls_test_rnd_std_rand, + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_write_signature( &ctx, valid_md, buf, sizeof( buf ), + NULL, &slen, mbedtls_test_rnd_std_rand, + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_write_signature( &ctx, valid_md, buf, sizeof( buf ), + buf, NULL, mbedtls_test_rnd_std_rand, + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_write_signature_restartable( NULL, valid_md, buf, + sizeof( buf ), buf, &slen, + mbedtls_test_rnd_std_rand, + NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_write_signature_restartable( &ctx, valid_md, NULL, + sizeof( buf ), buf, &slen, + mbedtls_test_rnd_std_rand, + NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_write_signature_restartable( &ctx, valid_md, buf, + sizeof( buf ), NULL, &slen, + mbedtls_test_rnd_std_rand, + NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_write_signature_restartable( &ctx, valid_md, buf, + sizeof( buf ), buf, NULL, + mbedtls_test_rnd_std_rand, + NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_read_signature( NULL, + buf, sizeof( buf ), + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_read_signature( &ctx, + NULL, sizeof( buf ), + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_read_signature( &ctx, + buf, sizeof( buf ), + NULL, sizeof( buf ) ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_read_signature_restartable( NULL, + buf, sizeof( buf ), + buf, sizeof( buf ), + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_read_signature_restartable( &ctx, + NULL, sizeof( buf ), + buf, sizeof( buf ), + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_read_signature_restartable( &ctx, + buf, sizeof( buf ), + NULL, sizeof( buf ), + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_genkey( NULL, valid_group, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_genkey( &ctx, valid_group, + NULL, NULL ) ); + + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_from_keypair( NULL, &key ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecdsa_from_keypair( &ctx, NULL ) ); + +exit: + return; +} + +void test_ecdsa_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_ecdsa_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_ecdsa_prim_random( int id ) +{ + mbedtls_ecp_group grp; + mbedtls_ecp_point Q; + mbedtls_mpi d, r, s; + mbedtls_test_rnd_pseudo_info rnd_info; + unsigned char buf[MBEDTLS_MD_MAX_SIZE]; + + mbedtls_ecp_group_init( &grp ); + mbedtls_ecp_point_init( &Q ); + mbedtls_mpi_init( &d ); mbedtls_mpi_init( &r ); mbedtls_mpi_init( &s ); + memset( &rnd_info, 0x00, sizeof( mbedtls_test_rnd_pseudo_info ) ); + memset( buf, 0, sizeof( buf ) ); + + /* prepare material for signature */ + TEST_ASSERT( mbedtls_test_rnd_pseudo_rand( &rnd_info, + buf, sizeof( buf ) ) == 0 ); + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + TEST_ASSERT( mbedtls_ecp_gen_keypair( &grp, &d, &Q, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + + TEST_ASSERT( mbedtls_ecdsa_sign( &grp, &r, &s, &d, buf, sizeof( buf ), + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_ecdsa_verify( &grp, buf, sizeof( buf ), &Q, &r, &s ) == 0 ); + +exit: + mbedtls_ecp_group_free( &grp ); + mbedtls_ecp_point_free( &Q ); + mbedtls_mpi_free( &d ); mbedtls_mpi_free( &r ); mbedtls_mpi_free( &s ); +} + +void test_ecdsa_prim_random_wrapper( void ** params ) +{ + + test_ecdsa_prim_random( *( (int *) params[0] ) ); +} +void test_ecdsa_prim_test_vectors( int id, char * d_str, char * xQ_str, + char * yQ_str, data_t * rnd_buf, + data_t * hash, char * r_str, char * s_str, + int result ) +{ + mbedtls_ecp_group grp; + mbedtls_ecp_point Q; + mbedtls_mpi d, r, s, r_check, s_check; + mbedtls_test_rnd_buf_info rnd_info; + + mbedtls_ecp_group_init( &grp ); + mbedtls_ecp_point_init( &Q ); + mbedtls_mpi_init( &d ); mbedtls_mpi_init( &r ); mbedtls_mpi_init( &s ); + mbedtls_mpi_init( &r_check ); mbedtls_mpi_init( &s_check ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + TEST_ASSERT( mbedtls_ecp_point_read_string( &Q, 16, xQ_str, yQ_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &d, 16, d_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &r_check, 16, r_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &s_check, 16, s_str ) == 0 ); + rnd_info.buf = rnd_buf->x; + rnd_info.length = rnd_buf->len; + + /* Fix rnd_buf->x by shifting it left if necessary */ + if( grp.nbits % 8 != 0 ) + { + unsigned char shift = 8 - ( grp.nbits % 8 ); + size_t i; + + for( i = 0; i < rnd_info.length - 1; i++ ) + rnd_buf->x[i] = rnd_buf->x[i] << shift | rnd_buf->x[i+1] >> ( 8 - shift ); + + rnd_buf->x[rnd_info.length-1] <<= shift; + } + + TEST_ASSERT( mbedtls_ecdsa_sign( &grp, &r, &s, &d, hash->x, hash->len, + mbedtls_test_rnd_buffer_rand, &rnd_info ) == result ); + + if ( result == 0) + { + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &r, &r_check ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &s, &s_check ) == 0 ); + + TEST_ASSERT( mbedtls_ecdsa_verify( &grp, hash->x, hash->len, &Q, &r_check, &s_check ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_sub_int( &r, &r, 1 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_add_int( &s, &s, 1 ) == 0 ); + + TEST_ASSERT( mbedtls_ecdsa_verify( &grp, hash->x, hash->len, + &Q, &r, &s_check ) == MBEDTLS_ERR_ECP_VERIFY_FAILED ); + TEST_ASSERT( mbedtls_ecdsa_verify( &grp, hash->x, hash->len, + &Q, &r_check, &s ) == MBEDTLS_ERR_ECP_VERIFY_FAILED ); + TEST_ASSERT( mbedtls_ecdsa_verify( &grp, hash->x, hash->len, + &grp.G, &r_check, &s_check ) == MBEDTLS_ERR_ECP_VERIFY_FAILED ); + } + +exit: + mbedtls_ecp_group_free( &grp ); + mbedtls_ecp_point_free( &Q ); + mbedtls_mpi_free( &d ); mbedtls_mpi_free( &r ); mbedtls_mpi_free( &s ); + mbedtls_mpi_free( &r_check ); mbedtls_mpi_free( &s_check ); +} + +void test_ecdsa_prim_test_vectors_wrapper( void ** params ) +{ + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_ecdsa_prim_test_vectors( *( (int *) params[0] ), (char *) params[1], (char *) params[2], (char *) params[3], &data4, &data6, (char *) params[8], (char *) params[9], *( (int *) params[10] ) ); +} +#if defined(MBEDTLS_ECDSA_DETERMINISTIC) +void test_ecdsa_det_test_vectors( int id, char * d_str, int md_alg, char * msg, + char * r_str, char * s_str ) +{ + mbedtls_ecp_group grp; + mbedtls_mpi d, r, s, r_check, s_check; + unsigned char hash[MBEDTLS_MD_MAX_SIZE]; + size_t hlen; + const mbedtls_md_info_t *md_info; + + mbedtls_ecp_group_init( &grp ); + mbedtls_mpi_init( &d ); mbedtls_mpi_init( &r ); mbedtls_mpi_init( &s ); + mbedtls_mpi_init( &r_check ); mbedtls_mpi_init( &s_check ); + memset( hash, 0, sizeof( hash ) ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &d, 16, d_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &r_check, 16, r_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &s_check, 16, s_str ) == 0 ); + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + hlen = mbedtls_md_get_size( md_info ); + TEST_ASSERT( mbedtls_md( md_info, (const unsigned char *) msg, + strlen( msg ), hash ) == 0 ); + + TEST_ASSERT( + mbedtls_ecdsa_sign_det_ext( &grp, &r, &s, &d, hash, hlen, + md_alg, mbedtls_test_rnd_std_rand, + NULL ) + == 0 ); + + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &r, &r_check ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &s, &s_check ) == 0 ); + +exit: + mbedtls_ecp_group_free( &grp ); + mbedtls_mpi_free( &d ); mbedtls_mpi_free( &r ); mbedtls_mpi_free( &s ); + mbedtls_mpi_free( &r_check ); mbedtls_mpi_free( &s_check ); +} + +void test_ecdsa_det_test_vectors_wrapper( void ** params ) +{ + + test_ecdsa_det_test_vectors( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], (char *) params[4], (char *) params[5] ); +} +#endif /* MBEDTLS_ECDSA_DETERMINISTIC */ +#if defined(MBEDTLS_SHA256_C) +void test_ecdsa_write_read_random( int id ) +{ + mbedtls_ecdsa_context ctx; + mbedtls_test_rnd_pseudo_info rnd_info; + unsigned char hash[32]; + unsigned char sig[200]; + size_t sig_len, i; + + mbedtls_ecdsa_init( &ctx ); + memset( &rnd_info, 0x00, sizeof( mbedtls_test_rnd_pseudo_info ) ); + memset( hash, 0, sizeof( hash ) ); + memset( sig, 0x2a, sizeof( sig ) ); + + /* prepare material for signature */ + TEST_ASSERT( mbedtls_test_rnd_pseudo_rand( &rnd_info, + hash, sizeof( hash ) ) == 0 ); + + /* generate signing key */ + TEST_ASSERT( mbedtls_ecdsa_genkey( &ctx, id, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + + /* generate and write signature, then read and verify it */ + TEST_ASSERT( mbedtls_ecdsa_write_signature( &ctx, MBEDTLS_MD_SHA256, + hash, sizeof( hash ), + sig, &sig_len, &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_ecdsa_read_signature( &ctx, hash, sizeof( hash ), + sig, sig_len ) == 0 ); + + /* check we didn't write past the announced length */ + for( i = sig_len; i < sizeof( sig ); i++ ) + TEST_ASSERT( sig[i] == 0x2a ); + + /* try verification with invalid length */ + TEST_ASSERT( mbedtls_ecdsa_read_signature( &ctx, hash, sizeof( hash ), + sig, sig_len - 1 ) != 0 ); + TEST_ASSERT( mbedtls_ecdsa_read_signature( &ctx, hash, sizeof( hash ), + sig, sig_len + 1 ) != 0 ); + + /* try invalid sequence tag */ + sig[0]++; + TEST_ASSERT( mbedtls_ecdsa_read_signature( &ctx, hash, sizeof( hash ), + sig, sig_len ) != 0 ); + sig[0]--; + + /* try modifying r */ + sig[10]++; + TEST_ASSERT( mbedtls_ecdsa_read_signature( &ctx, hash, sizeof( hash ), + sig, sig_len ) == MBEDTLS_ERR_ECP_VERIFY_FAILED ); + sig[10]--; + + /* try modifying s */ + sig[sig_len - 1]++; + TEST_ASSERT( mbedtls_ecdsa_read_signature( &ctx, hash, sizeof( hash ), + sig, sig_len ) == MBEDTLS_ERR_ECP_VERIFY_FAILED ); + sig[sig_len - 1]--; + +exit: + mbedtls_ecdsa_free( &ctx ); +} + +void test_ecdsa_write_read_random_wrapper( void ** params ) +{ + + test_ecdsa_write_read_random( *( (int *) params[0] ) ); +} +#endif /* MBEDTLS_SHA256_C */ +#if defined(MBEDTLS_ECP_RESTARTABLE) +void test_ecdsa_read_restart( int id, data_t *pk, data_t *hash, data_t *sig, + int max_ops, int min_restart, int max_restart ) +{ + mbedtls_ecdsa_context ctx; + mbedtls_ecdsa_restart_ctx rs_ctx; + int ret, cnt_restart; + + mbedtls_ecdsa_init( &ctx ); + mbedtls_ecdsa_restart_init( &rs_ctx ); + + TEST_ASSERT( mbedtls_ecp_group_load( &ctx.grp, id ) == 0 ); + TEST_ASSERT( mbedtls_ecp_point_read_binary( &ctx.grp, &ctx.Q, + pk->x, pk->len ) == 0 ); + + mbedtls_ecp_set_max_ops( max_ops ); + + cnt_restart = 0; + do { + ret = mbedtls_ecdsa_read_signature_restartable( &ctx, + hash->x, hash->len, sig->x, sig->len, &rs_ctx ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restart ); + + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( cnt_restart >= min_restart ); + TEST_ASSERT( cnt_restart <= max_restart ); + + /* try modifying r */ + + TEST_ASSERT( sig->len > 10 ); + sig->x[10]++; + do { + ret = mbedtls_ecdsa_read_signature_restartable( &ctx, + hash->x, hash->len, sig->x, sig->len, &rs_ctx ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS ); + TEST_ASSERT( ret == MBEDTLS_ERR_ECP_VERIFY_FAILED ); + sig->x[10]--; + + /* try modifying s */ + sig->x[sig->len - 1]++; + do { + ret = mbedtls_ecdsa_read_signature_restartable( &ctx, + hash->x, hash->len, sig->x, sig->len, &rs_ctx ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS ); + TEST_ASSERT( ret == MBEDTLS_ERR_ECP_VERIFY_FAILED ); + sig->x[sig->len - 1]--; + + /* Do we leak memory when aborting an operation? + * This test only makes sense when we actually restart */ + if( min_restart > 0 ) + { + ret = mbedtls_ecdsa_read_signature_restartable( &ctx, + hash->x, hash->len, sig->x, sig->len, &rs_ctx ); + TEST_ASSERT( ret == MBEDTLS_ERR_ECP_IN_PROGRESS ); + } + +exit: + mbedtls_ecdsa_free( &ctx ); + mbedtls_ecdsa_restart_free( &rs_ctx ); +} + +void test_ecdsa_read_restart_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + + test_ecdsa_read_restart( *( (int *) params[0] ), &data1, &data3, &data5, *( (int *) params[7] ), *( (int *) params[8] ), *( (int *) params[9] ) ); +} +#endif /* MBEDTLS_ECP_RESTARTABLE */ +#if defined(MBEDTLS_ECP_RESTARTABLE) +#if defined(MBEDTLS_ECDSA_DETERMINISTIC) +void test_ecdsa_write_restart( int id, char *d_str, int md_alg, + char *msg, data_t *sig_check, + int max_ops, int min_restart, int max_restart ) +{ + int ret, cnt_restart; + mbedtls_ecdsa_restart_ctx rs_ctx; + mbedtls_ecdsa_context ctx; + unsigned char hash[MBEDTLS_MD_MAX_SIZE]; + unsigned char sig[MBEDTLS_ECDSA_MAX_LEN]; + size_t hlen, slen; + const mbedtls_md_info_t *md_info; + + mbedtls_ecdsa_restart_init( &rs_ctx ); + mbedtls_ecdsa_init( &ctx ); + memset( hash, 0, sizeof( hash ) ); + memset( sig, 0, sizeof( sig ) ); + + TEST_ASSERT( mbedtls_ecp_group_load( &ctx.grp, id ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &ctx.d, 16, d_str ) == 0 ); + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + hlen = mbedtls_md_get_size( md_info ); + TEST_ASSERT( mbedtls_md( md_info, + (const unsigned char *) msg, strlen( msg ), + hash ) == 0 ); + + mbedtls_ecp_set_max_ops( max_ops ); + + slen = sizeof( sig ); + cnt_restart = 0; + do { + ret = mbedtls_ecdsa_write_signature_restartable( &ctx, + md_alg, hash, hlen, sig, &slen, NULL, NULL, &rs_ctx ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restart ); + + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( slen == sig_check->len ); + TEST_ASSERT( memcmp( sig, sig_check->x, slen ) == 0 ); + + TEST_ASSERT( cnt_restart >= min_restart ); + TEST_ASSERT( cnt_restart <= max_restart ); + + /* Do we leak memory when aborting an operation? + * This test only makes sense when we actually restart */ + if( min_restart > 0 ) + { + ret = mbedtls_ecdsa_write_signature_restartable( &ctx, + md_alg, hash, hlen, sig, &slen, NULL, NULL, &rs_ctx ); + TEST_ASSERT( ret == MBEDTLS_ERR_ECP_IN_PROGRESS ); + } + +exit: + mbedtls_ecdsa_restart_free( &rs_ctx ); + mbedtls_ecdsa_free( &ctx ); +} + +void test_ecdsa_write_restart_wrapper( void ** params ) +{ + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_ecdsa_write_restart( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], &data4, *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_ECDSA_DETERMINISTIC */ +#endif /* MBEDTLS_ECP_RESTARTABLE */ +#endif /* MBEDTLS_ECDSA_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_ECDSA_C) + + case 0: + { + *out_value = MBEDTLS_ECP_DP_SECP192R1; + } + break; + case 1: + { + *out_value = MBEDTLS_ECP_DP_SECP224R1; + } + break; + case 2: + { + *out_value = MBEDTLS_ECP_DP_SECP256R1; + } + break; + case 3: + { + *out_value = MBEDTLS_ECP_DP_SECP384R1; + } + break; + case 4: + { + *out_value = MBEDTLS_ECP_DP_SECP521R1; + } + break; + case 5: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 6: + { + *out_value = MBEDTLS_MD_SHA224; + } + break; + case 7: + { + *out_value = MBEDTLS_MD_SHA256; + } + break; + case 8: + { + *out_value = MBEDTLS_MD_SHA384; + } + break; + case 9: + { + *out_value = MBEDTLS_MD_SHA512; + } + break; + case 10: + { + *out_value = MBEDTLS_ERR_ECP_INVALID_KEY; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_ECDSA_C) + + case 0: + { +#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 5: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 6: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 7: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 8: + { +#if !defined(MBEDTLS_SHA512_NO_SHA384) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_ecdsa_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_ECDSA_C) + test_ecdsa_prim_random_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_ECDSA_C) + test_ecdsa_prim_test_vectors_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECDSA_DETERMINISTIC) + test_ecdsa_det_test_vectors_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_SHA256_C) + test_ecdsa_write_read_random_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) + test_ecdsa_read_restart_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) && defined(MBEDTLS_ECDSA_DETERMINISTIC) + test_ecdsa_write_restart_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_ecdsa.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_ecdsa.datax b/third_party/mbedtls/test/test_suite_ecdsa.datax new file mode 100644 index 000000000..41c6c082c --- /dev/null +++ b/third_party/mbedtls/test/test_suite_ecdsa.datax @@ -0,0 +1,327 @@ +ECDSA Parameter validation +0 + +ECDSA primitive random #1 +depends_on:0 +1:exp:0 + +ECDSA primitive random #2 +depends_on:1 +1:exp:1 + +ECDSA primitive random #3 +depends_on:2 +1:exp:2 + +ECDSA primitive random #4 +depends_on:3 +1:exp:3 + +ECDSA primitive random #5 +depends_on:4 +1:exp:4 + +ECDSA primitive rfc 4754 p256 +depends_on:2 +2:exp:2:char*:"DC51D3866A15BACDE33D96F992FCA99DA7E6EF0934E7097559C27F1614C88A7F":char*:"2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085E0822CB04235E970":char*:"6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945CDDFE7D509BBFD7D":hex:"9E56F509196784D963D1C0A401510EE7ADA3DCC5DEE04B154BF61AF1D5A6DECE":hex:"BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD":char*:"CB28E0999B9C7715FD0A80D8E47A77079716CBBF917DD72E97566EA1C066957C":char*:"86FA3BB4E26CAD5BF90B7F81899256CE7594BB1EA0C89212748BFF3B3D5B0315":int:0 + +ECDSA primitive rfc 4754 p384 +depends_on:3 +2:exp:3:char*:"0BEB646634BA87735D77AE4809A0EBEA865535DE4C1E1DCB692E84708E81A5AF62E528C38B2A81B35309668D73524D9F":char*:"96281BF8DD5E0525CA049C048D345D3082968D10FEDF5C5ACA0C64E6465A97EA5CE10C9DFEC21797415710721F437922":char*:"447688BA94708EB6E2E4D59F6AB6D7EDFF9301D249FE49C33096655F5D502FAD3D383B91C5E7EDAA2B714CC99D5743CA":hex:"B4B74E44D71A13D568003D7489908D564C7761E229C58CBFA18950096EB7463B854D7FA992F934D927376285E63414FA":hex:"CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1631A8B605A43FF5BED8086072BA1E7CC2358BAECA134C825A7":char*:"FB017B914E29149432D8BAC29A514640B46F53DDAB2C69948084E2930F1C8F7E08E07C9C63F2D21A07DCB56A6AF56EB3":char*:"B263A1305E057F984D38726A1B46874109F417BCA112674C528262A40A629AF1CBB9F516CE0FA7D2FF630863A00E8B9F":int:0 + +ECDSA primitive rfc 4754 p521 +depends_on:4 +2:exp:4:char*:"0065FDA3409451DCAB0A0EAD45495112A3D813C17BFD34BDF8C1209D7DF5849120597779060A7FF9D704ADF78B570FFAD6F062E95C7E0C5D5481C5B153B48B375FA1":char*:"0151518F1AF0F563517EDD5485190DF95A4BF57B5CBA4CF2A9A3F6474725A35F7AFE0A6DDEB8BEDBCD6A197E592D40188901CECD650699C9B5E456AEA5ADD19052A8":char*:"006F3B142EA1BFFF7E2837AD44C9E4FF6D2D34C73184BBAD90026DD5E6E85317D9DF45CAD7803C6C20035B2F3FF63AFF4E1BA64D1C077577DA3F4286C58F0AEAE643":hex:"00C1C2B305419F5A41344D7E4359933D734096F556197A9B244342B8B62F46F9373778F9DE6B6497B1EF825FF24F42F9B4A4BD7382CFC3378A540B1B7F0C1B956C2F":hex:"DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F":char*:"0154FD3836AF92D0DCA57DD5341D3053988534FDE8318FC6AAAAB68E2E6F4339B19F2F281A7E0B22C269D93CF8794A9278880ED7DBB8D9362CAEACEE544320552251":char*:"017705A7030290D1CEB605A9A1BB03FF9CDD521E87A696EC926C8C10C8362DF4975367101F67D1CF9BCCBF2F3D239534FA509E70AAC851AE01AAC68D62F866472660":int:0 + +ECDSA write-read random #1 +depends_on:0 +4:exp:0 + +ECDSA write-read random #2 +depends_on:1 +4:exp:1 + +ECDSA write-read random #3 +depends_on:2 +4:exp:2 + +ECDSA write-read random #4 +depends_on:3 +4:exp:3 + +ECDSA write-read random #5 +depends_on:4 +4:exp:4 + +ECDSA deterministic test vector rfc 6979 p192 sha1 [#1] +depends_on:0:5 +3:exp:0:char*:"6FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4":exp:5:char*:"sample":char*:"98C6BD12B23EAF5E2A2045132086BE3EB8EBD62ABF6698FF":char*:"57A22B07DEA9530F8DE9471B1DC6624472E8E2844BC25B64" + +ECDSA deterministic test vector rfc 6979 p192 sha224 [#1] +depends_on:0:6 +3:exp:0:char*:"6FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4":exp:6:char*:"sample":char*:"A1F00DAD97AEEC91C95585F36200C65F3C01812AA60378F5":char*:"E07EC1304C7C6C9DEBBE980B9692668F81D4DE7922A0F97A" + +ECDSA deterministic test vector rfc 6979 p192 sha256 [#1] +depends_on:0:6 +3:exp:0:char*:"6FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4":exp:7:char*:"sample":char*:"4B0B8CE98A92866A2820E20AA6B75B56382E0F9BFD5ECB55":char*:"CCDB006926EA9565CBADC840829D8C384E06DE1F1E381B85" + +ECDSA deterministic test vector rfc 6979 p192 sha384 [#1] +depends_on:0:7:8 +3:exp:0:char*:"6FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4":exp:8:char*:"sample":char*:"DA63BF0B9ABCF948FBB1E9167F136145F7A20426DCC287D5":char*:"C3AA2C960972BD7A2003A57E1C4C77F0578F8AE95E31EC5E" + +ECDSA deterministic test vector rfc 6979 p192 sha512 [#1] +depends_on:0:7 +3:exp:0:char*:"6FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4":exp:9:char*:"sample":char*:"4D60C5AB1996BD848343B31C00850205E2EA6922DAC2E4B8":char*:"3F6E837448F027A1BF4B34E796E32A811CBB4050908D8F67" + +ECDSA deterministic test vector rfc 6979 p192 sha1 [#2] +depends_on:0:5 +3:exp:0:char*:"6FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4":exp:5:char*:"test":char*:"0F2141A0EBBC44D2E1AF90A50EBCFCE5E197B3B7D4DE036D":char*:"EB18BC9E1F3D7387500CB99CF5F7C157070A8961E38700B7" + +ECDSA deterministic test vector rfc 6979 p192 sha224 [#2] +depends_on:0:6 +3:exp:0:char*:"6FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4":exp:6:char*:"test":char*:"6945A1C1D1B2206B8145548F633BB61CEF04891BAF26ED34":char*:"B7FB7FDFC339C0B9BD61A9F5A8EAF9BE58FC5CBA2CB15293" + +ECDSA deterministic test vector rfc 6979 p192 sha256 [#2] +depends_on:0:6 +3:exp:0:char*:"6FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4":exp:7:char*:"test":char*:"3A718BD8B4926C3B52EE6BBE67EF79B18CB6EB62B1AD97AE":char*:"5662E6848A4A19B1F1AE2F72ACD4B8BBE50F1EAC65D9124F" + +ECDSA deterministic test vector rfc 6979 p192 sha384 [#2] +depends_on:0:7:8 +3:exp:0:char*:"6FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4":exp:8:char*:"test":char*:"B234B60B4DB75A733E19280A7A6034BD6B1EE88AF5332367":char*:"7994090B2D59BB782BE57E74A44C9A1C700413F8ABEFE77A" + +ECDSA deterministic test vector rfc 6979 p192 sha512 [#2] +depends_on:0:7 +3:exp:0:char*:"6FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4":exp:9:char*:"test":char*:"FE4F4AE86A58B6507946715934FE2D8FF9D95B6B098FE739":char*:"74CF5605C98FBA0E1EF34D4B5A1577A7DCF59457CAE52290" + +ECDSA deterministic test vector rfc 6979 p224 sha1 [#1] +depends_on:1:5 +3:exp:1:char*:"F220266E1105BFE3083E03EC7A3A654651F45E37167E88600BF257C1":exp:5:char*:"sample":char*:"22226F9D40A96E19C4A301CE5B74B115303C0F3A4FD30FC257FB57AC":char*:"66D1CDD83E3AF75605DD6E2FEFF196D30AA7ED7A2EDF7AF475403D69" + +ECDSA deterministic test vector rfc 6979 p224 sha224 [#1] +depends_on:1:6 +3:exp:1:char*:"F220266E1105BFE3083E03EC7A3A654651F45E37167E88600BF257C1":exp:6:char*:"sample":char*:"1CDFE6662DDE1E4A1EC4CDEDF6A1F5A2FB7FBD9145C12113E6ABFD3E":char*:"A6694FD7718A21053F225D3F46197CA699D45006C06F871808F43EBC" + +ECDSA deterministic test vector rfc 6979 p224 sha256 [#1] +depends_on:1:6 +3:exp:1:char*:"F220266E1105BFE3083E03EC7A3A654651F45E37167E88600BF257C1":exp:7:char*:"sample":char*:"61AA3DA010E8E8406C656BC477A7A7189895E7E840CDFE8FF42307BA":char*:"BC814050DAB5D23770879494F9E0A680DC1AF7161991BDE692B10101" + +ECDSA deterministic test vector rfc 6979 p224 sha384 [#1] +depends_on:1:7:8 +3:exp:1:char*:"F220266E1105BFE3083E03EC7A3A654651F45E37167E88600BF257C1":exp:8:char*:"sample":char*:"0B115E5E36F0F9EC81F1325A5952878D745E19D7BB3EABFABA77E953":char*:"830F34CCDFE826CCFDC81EB4129772E20E122348A2BBD889A1B1AF1D" + +ECDSA deterministic test vector rfc 6979 p224 sha512 [#1] +depends_on:1:7 +3:exp:1:char*:"F220266E1105BFE3083E03EC7A3A654651F45E37167E88600BF257C1":exp:9:char*:"sample":char*:"074BD1D979D5F32BF958DDC61E4FB4872ADCAFEB2256497CDAC30397":char*:"A4CECA196C3D5A1FF31027B33185DC8EE43F288B21AB342E5D8EB084" + +ECDSA deterministic test vector rfc 6979 p224 sha1 [#2] +depends_on:1:5 +3:exp:1:char*:"F220266E1105BFE3083E03EC7A3A654651F45E37167E88600BF257C1":exp:5:char*:"test":char*:"DEAA646EC2AF2EA8AD53ED66B2E2DDAA49A12EFD8356561451F3E21C":char*:"95987796F6CF2062AB8135271DE56AE55366C045F6D9593F53787BD2" + +ECDSA deterministic test vector rfc 6979 p224 sha224 [#2] +depends_on:1:6 +3:exp:1:char*:"F220266E1105BFE3083E03EC7A3A654651F45E37167E88600BF257C1":exp:6:char*:"test":char*:"C441CE8E261DED634E4CF84910E4C5D1D22C5CF3B732BB204DBEF019":char*:"902F42847A63BDC5F6046ADA114953120F99442D76510150F372A3F4" + +ECDSA deterministic test vector rfc 6979 p224 sha256 [#2] +depends_on:1:6 +3:exp:1:char*:"F220266E1105BFE3083E03EC7A3A654651F45E37167E88600BF257C1":exp:7:char*:"test":char*:"AD04DDE87B84747A243A631EA47A1BA6D1FAA059149AD2440DE6FBA6":char*:"178D49B1AE90E3D8B629BE3DB5683915F4E8C99FDF6E666CF37ADCFD" + +ECDSA deterministic test vector rfc 6979 p224 sha384 [#2] +depends_on:1:7:8 +3:exp:1:char*:"F220266E1105BFE3083E03EC7A3A654651F45E37167E88600BF257C1":exp:8:char*:"test":char*:"389B92682E399B26518A95506B52C03BC9379A9DADF3391A21FB0EA4":char*:"414A718ED3249FF6DBC5B50C27F71F01F070944DA22AB1F78F559AAB" + +ECDSA deterministic test vector rfc 6979 p224 sha512 [#2] +depends_on:1:7 +3:exp:1:char*:"F220266E1105BFE3083E03EC7A3A654651F45E37167E88600BF257C1":exp:9:char*:"test":char*:"049F050477C5ADD858CAC56208394B5A55BAEBBE887FDF765047C17C":char*:"077EB13E7005929CEFA3CD0403C7CDCC077ADF4E44F3C41B2F60ECFF" + +ECDSA deterministic test vector rfc 6979 p256 sha1 [#1] +depends_on:2:5 +3:exp:2:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":exp:5:char*:"sample":char*:"61340C88C3AAEBEB4F6D667F672CA9759A6CCAA9FA8811313039EE4A35471D32":char*:"6D7F147DAC089441BB2E2FE8F7A3FA264B9C475098FDCF6E00D7C996E1B8B7EB" + +ECDSA deterministic test vector rfc 6979 p256 sha224 [#1] +depends_on:2:6 +3:exp:2:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":exp:6:char*:"sample":char*:"53B2FFF5D1752B2C689DF257C04C40A587FABABB3F6FC2702F1343AF7CA9AA3F":char*:"B9AFB64FDC03DC1A131C7D2386D11E349F070AA432A4ACC918BEA988BF75C74C" + +ECDSA deterministic test vector rfc 6979 p256 sha256 [#1] +depends_on:2:6 +3:exp:2:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":exp:7:char*:"sample":char*:"EFD48B2AACB6A8FD1140DD9CD45E81D69D2C877B56AAF991C34D0EA84EAF3716":char*:"F7CB1C942D657C41D436C7A1B6E29F65F3E900DBB9AFF4064DC4AB2F843ACDA8" + +ECDSA deterministic test vector rfc 6979 p256 sha384 [#1] +depends_on:2:7:8 +3:exp:2:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":exp:8:char*:"sample":char*:"0EAFEA039B20E9B42309FB1D89E213057CBF973DC0CFC8F129EDDDC800EF7719":char*:"4861F0491E6998B9455193E34E7B0D284DDD7149A74B95B9261F13ABDE940954" + +ECDSA deterministic test vector rfc 6979 p256 sha512 [#1] +depends_on:2:7 +3:exp:2:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":exp:9:char*:"sample":char*:"8496A60B5E9B47C825488827E0495B0E3FA109EC4568FD3F8D1097678EB97F00":char*:"2362AB1ADBE2B8ADF9CB9EDAB740EA6049C028114F2460F96554F61FAE3302FE" + +ECDSA deterministic test vector rfc 6979 p256 sha1 [#2] +depends_on:2:5 +3:exp:2:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":exp:5:char*:"test":char*:"0CBCC86FD6ABD1D99E703E1EC50069EE5C0B4BA4B9AC60E409E8EC5910D81A89":char*:"01B9D7B73DFAA60D5651EC4591A0136F87653E0FD780C3B1BC872FFDEAE479B1" + +ECDSA deterministic test vector rfc 6979 p256 sha224 [#2] +depends_on:2:6 +3:exp:2:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":exp:6:char*:"test":char*:"C37EDB6F0AE79D47C3C27E962FA269BB4F441770357E114EE511F662EC34A692":char*:"C820053A05791E521FCAAD6042D40AEA1D6B1A540138558F47D0719800E18F2D" + +ECDSA deterministic test vector rfc 6979 p256 sha256 [#2] +depends_on:2:6 +3:exp:2:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":exp:7:char*:"test":char*:"F1ABB023518351CD71D881567B1EA663ED3EFCF6C5132B354F28D3B0B7D38367":char*:"019F4113742A2B14BD25926B49C649155F267E60D3814B4C0CC84250E46F0083" + +ECDSA deterministic test vector rfc 6979 p256 sha384 [#2] +depends_on:2:7:8 +3:exp:2:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":exp:8:char*:"test":char*:"83910E8B48BB0C74244EBDF7F07A1C5413D61472BD941EF3920E623FBCCEBEB6":char*:"8DDBEC54CF8CD5874883841D712142A56A8D0F218F5003CB0296B6B509619F2C" + +ECDSA deterministic test vector rfc 6979 p256 sha512 [#2] +depends_on:2:7 +3:exp:2:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":exp:9:char*:"test":char*:"461D93F31B6540894788FD206C07CFA0CC35F46FA3C91816FFF1040AD1581A04":char*:"39AF9F15DE0DB8D97E72719C74820D304CE5226E32DEDAE67519E840D1194E55" + +ECDSA deterministic test vector rfc 6979 p384 sha1 [#1] +depends_on:3:5 +3:exp:3:char*:"6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5":exp:5:char*:"sample":char*:"EC748D839243D6FBEF4FC5C4859A7DFFD7F3ABDDF72014540C16D73309834FA37B9BA002899F6FDA3A4A9386790D4EB2":char*:"A3BCFA947BEEF4732BF247AC17F71676CB31A847B9FF0CBC9C9ED4C1A5B3FACF26F49CA031D4857570CCB5CA4424A443" + +ECDSA deterministic test vector rfc 6979 p384 sha224 [#1] +depends_on:3:6 +3:exp:3:char*:"6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5":exp:6:char*:"sample":char*:"42356E76B55A6D9B4631C865445DBE54E056D3B3431766D0509244793C3F9366450F76EE3DE43F5A125333A6BE060122":char*:"9DA0C81787064021E78DF658F2FBB0B042BF304665DB721F077A4298B095E4834C082C03D83028EFBF93A3C23940CA8D" + +ECDSA deterministic test vector rfc 6979 p384 sha256 [#1] +depends_on:3:6 +3:exp:3:char*:"6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5":exp:7:char*:"sample":char*:"21B13D1E013C7FA1392D03C5F99AF8B30C570C6F98D4EA8E354B63A21D3DAA33BDE1E888E63355D92FA2B3C36D8FB2CD":char*:"F3AA443FB107745BF4BD77CB3891674632068A10CA67E3D45DB2266FA7D1FEEBEFDC63ECCD1AC42EC0CB8668A4FA0AB0" + +ECDSA deterministic test vector rfc 6979 p384 sha384 [#1] +depends_on:3:7:8 +3:exp:3:char*:"6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5":exp:8:char*:"sample":char*:"94EDBB92A5ECB8AAD4736E56C691916B3F88140666CE9FA73D64C4EA95AD133C81A648152E44ACF96E36DD1E80FABE46":char*:"99EF4AEB15F178CEA1FE40DB2603138F130E740A19624526203B6351D0A3A94FA329C145786E679E7B82C71A38628AC8" + +ECDSA deterministic test vector rfc 6979 p384 sha512 [#1] +depends_on:3:7 +3:exp:3:char*:"6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5":exp:9:char*:"sample":char*:"ED0959D5880AB2D869AE7F6C2915C6D60F96507F9CB3E047C0046861DA4A799CFE30F35CC900056D7C99CD7882433709":char*:"512C8CCEEE3890A84058CE1E22DBC2198F42323CE8ACA9135329F03C068E5112DC7CC3EF3446DEFCEB01A45C2667FDD5" + +ECDSA deterministic test vector rfc 6979 p384 sha1 [#2] +depends_on:3:5 +3:exp:3:char*:"6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5":exp:5:char*:"test":char*:"4BC35D3A50EF4E30576F58CD96CE6BF638025EE624004A1F7789A8B8E43D0678ACD9D29876DAF46638645F7F404B11C7":char*:"D5A6326C494ED3FF614703878961C0FDE7B2C278F9A65FD8C4B7186201A2991695BA1C84541327E966FA7B50F7382282" + +ECDSA deterministic test vector rfc 6979 p384 sha224 [#2] +depends_on:3:6 +3:exp:3:char*:"6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5":exp:6:char*:"test":char*:"E8C9D0B6EA72A0E7837FEA1D14A1A9557F29FAA45D3E7EE888FC5BF954B5E62464A9A817C47FF78B8C11066B24080E72":char*:"07041D4A7A0379AC7232FF72E6F77B6DDB8F09B16CCE0EC3286B2BD43FA8C6141C53EA5ABEF0D8231077A04540A96B66" + +ECDSA deterministic test vector rfc 6979 p384 sha256 [#2] +depends_on:3:6 +3:exp:3:char*:"6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5":exp:7:char*:"test":char*:"6D6DEFAC9AB64DABAFE36C6BF510352A4CC27001263638E5B16D9BB51D451559F918EEDAF2293BE5B475CC8F0188636B":char*:"2D46F3BECBCC523D5F1A1256BF0C9B024D879BA9E838144C8BA6BAEB4B53B47D51AB373F9845C0514EEFB14024787265" + +ECDSA deterministic test vector rfc 6979 p384 sha384 [#2] +depends_on:3:7:8 +3:exp:3:char*:"6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5":exp:8:char*:"test":char*:"8203B63D3C853E8D77227FB377BCF7B7B772E97892A80F36AB775D509D7A5FEB0542A7F0812998DA8F1DD3CA3CF023DB":char*:"DDD0760448D42D8A43AF45AF836FCE4DE8BE06B485E9B61B827C2F13173923E06A739F040649A667BF3B828246BAA5A5" + +ECDSA deterministic test vector rfc 6979 p384 sha512 [#2] +depends_on:3:7 +3:exp:3:char*:"6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5":exp:9:char*:"test":char*:"A0D5D090C9980FAF3C2CE57B7AE951D31977DD11C775D314AF55F76C676447D06FB6495CD21B4B6E340FC236584FB277":char*:"976984E59B4C77B0E8E4460DCA3D9F20E07B9BB1F63BEEFAF576F6B2E8B224634A2092CD3792E0159AD9CEE37659C736" + +ECDSA deterministic test vector rfc 6979 p521 sha1 [#1] +depends_on:4:5 +3:exp:4:char*:"0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538":exp:5:char*:"sample":char*:"0343B6EC45728975EA5CBA6659BBB6062A5FF89EEA58BE3C80B619F322C87910FE092F7D45BB0F8EEE01ED3F20BABEC079D202AE677B243AB40B5431D497C55D75D":char*:"0E7B0E675A9B24413D448B8CC119D2BF7B2D2DF032741C096634D6D65D0DBE3D5694625FB9E8104D3B842C1B0E2D0B98BEA19341E8676AEF66AE4EBA3D5475D5D16" + +ECDSA deterministic test vector rfc 6979 p521 sha224 [#1] +depends_on:4:6 +3:exp:4:char*:"0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538":exp:6:char*:"sample":char*:"1776331CFCDF927D666E032E00CF776187BC9FDD8E69D0DABB4109FFE1B5E2A30715F4CC923A4A5E94D2503E9ACFED92857B7F31D7152E0F8C00C15FF3D87E2ED2E":char*:"050CB5265417FE2320BBB5A122B8E1A32BD699089851128E360E620A30C7E17BA41A666AF126CE100E5799B153B60528D5300D08489CA9178FB610A2006C254B41F" + +ECDSA deterministic test vector rfc 6979 p521 sha256 [#1] +depends_on:4:6 +3:exp:4:char*:"0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538":exp:7:char*:"sample":char*:"1511BB4D675114FE266FC4372B87682BAECC01D3CC62CF2303C92B3526012659D16876E25C7C1E57648F23B73564D67F61C6F14D527D54972810421E7D87589E1A7":char*:"04A171143A83163D6DF460AAF61522695F207A58B95C0644D87E52AA1A347916E4F7A72930B1BC06DBE22CE3F58264AFD23704CBB63B29B931F7DE6C9D949A7ECFC" + +ECDSA deterministic test vector rfc 6979 p521 sha384 [#1] +depends_on:4:7:8 +3:exp:4:char*:"0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538":exp:8:char*:"sample":char*:"1EA842A0E17D2DE4F92C15315C63DDF72685C18195C2BB95E572B9C5136CA4B4B576AD712A52BE9730627D16054BA40CC0B8D3FF035B12AE75168397F5D50C67451":char*:"1F21A3CEE066E1961025FB048BD5FE2B7924D0CD797BABE0A83B66F1E35EEAF5FDE143FA85DC394A7DEE766523393784484BDF3E00114A1C857CDE1AA203DB65D61" + +ECDSA deterministic test vector rfc 6979 p521 sha512 [#1] +depends_on:4:7 +3:exp:4:char*:"0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538":exp:9:char*:"sample":char*:"0C328FAFCBD79DD77850370C46325D987CB525569FB63C5D3BC53950E6D4C5F174E25A1EE9017B5D450606ADD152B534931D7D4E8455CC91F9B15BF05EC36E377FA":char*:"0617CCE7CF5064806C467F678D3B4080D6F1CC50AF26CA209417308281B68AF282623EAA63E5B5C0723D8B8C37FF0777B1A20F8CCB1DCCC43997F1EE0E44DA4A67A" + +ECDSA deterministic test vector rfc 6979 p521 sha1 [#2] +depends_on:4:5 +3:exp:4:char*:"0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538":exp:5:char*:"test":char*:"13BAD9F29ABE20DE37EBEB823C252CA0F63361284015A3BF430A46AAA80B87B0693F0694BD88AFE4E661FC33B094CD3B7963BED5A727ED8BD6A3A202ABE009D0367":char*:"1E9BB81FF7944CA409AD138DBBEE228E1AFCC0C890FC78EC8604639CB0DBDC90F717A99EAD9D272855D00162EE9527567DD6A92CBD629805C0445282BBC916797FF" + +ECDSA deterministic test vector rfc 6979 p521 sha224 [#2] +depends_on:4:6 +3:exp:4:char*:"0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538":exp:6:char*:"test":char*:"1C7ED902E123E6815546065A2C4AF977B22AA8EADDB68B2C1110E7EA44D42086BFE4A34B67DDC0E17E96536E358219B23A706C6A6E16BA77B65E1C595D43CAE17FB":char*:"177336676304FCB343CE028B38E7B4FBA76C1C1B277DA18CAD2A8478B2A9A9F5BEC0F3BA04F35DB3E4263569EC6AADE8C92746E4C82F8299AE1B8F1739F8FD519A4" + +ECDSA deterministic test vector rfc 6979 p521 sha256 [#2] +depends_on:4:6 +3:exp:4:char*:"0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538":exp:7:char*:"test":char*:"00E871C4A14F993C6C7369501900C4BC1E9C7B0B4BA44E04868B30B41D8071042EB28C4C250411D0CE08CD197E4188EA4876F279F90B3D8D74A3C76E6F1E4656AA8":char*:"0CD52DBAA33B063C3A6CD8058A1FB0A46A4754B034FCC644766CA14DA8CA5CA9FDE00E88C1AD60CCBA759025299079D7A427EC3CC5B619BFBC828E7769BCD694E86" + +ECDSA deterministic test vector rfc 6979 p521 sha384 [#2] +depends_on:4:7:8 +3:exp:4:char*:"0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538":exp:8:char*:"test":char*:"14BEE21A18B6D8B3C93FAB08D43E739707953244FDBE924FA926D76669E7AC8C89DF62ED8975C2D8397A65A49DCC09F6B0AC62272741924D479354D74FF6075578C":char*:"133330865C067A0EAF72362A65E2D7BC4E461E8C8995C3B6226A21BD1AA78F0ED94FE536A0DCA35534F0CD1510C41525D163FE9D74D134881E35141ED5E8E95B979" + +ECDSA deterministic test vector rfc 6979 p521 sha512 [#2] +depends_on:4:7 +3:exp:4:char*:"0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538":exp:9:char*:"test":char*:"13E99020ABF5CEE7525D16B69B229652AB6BDF2AFFCAEF38773B4B7D08725F10CDB93482FDCC54EDCEE91ECA4166B2A7C6265EF0CE2BD7051B7CEF945BABD47EE6D":char*:"1FBD0013C674AA79CB39849527916CE301C66EA7CE8B80682786AD60F98F7E78A19CA69EFF5C57400E3B3A0AD66CE0978214D13BAF4E9AC60752F7B155E2DE4DCE3" + +ECDSA restartable read-verify: max_ops=0 (disabled) +depends_on:2 +5:exp:2:hex:"04e8f573412a810c5f81ecd2d251bb94387e72f28af70dced90ebe75725c97a6428231069c2b1ef78509a22c59044319f6ed3cb750dfe64c2a282b35967a458ad6":hex:"dee9d4d8b0e40a034602d6e638197998060f6e9f353ae1d10c94cd56476d3c92":hex:"304502210098a5a1392abe29e4b0a4da3fefe9af0f8c32e5b839ab52ba6a05da9c3b7edd0f0220596f0e195ae1e58c1e53e9e7f0f030b274348a8c11232101778d89c4943f5ad2":int:0:int:0:int:0 + +ECDSA restartable read-verify: max_ops=1 +depends_on:2 +5:exp:2:hex:"04e8f573412a810c5f81ecd2d251bb94387e72f28af70dced90ebe75725c97a6428231069c2b1ef78509a22c59044319f6ed3cb750dfe64c2a282b35967a458ad6":hex:"dee9d4d8b0e40a034602d6e638197998060f6e9f353ae1d10c94cd56476d3c92":hex:"304502210098a5a1392abe29e4b0a4da3fefe9af0f8c32e5b839ab52ba6a05da9c3b7edd0f0220596f0e195ae1e58c1e53e9e7f0f030b274348a8c11232101778d89c4943f5ad2":int:1:int:42:int:10000 + +ECDSA restartable read-verify: max_ops=10000 +depends_on:2 +5:exp:2:hex:"04e8f573412a810c5f81ecd2d251bb94387e72f28af70dced90ebe75725c97a6428231069c2b1ef78509a22c59044319f6ed3cb750dfe64c2a282b35967a458ad6":hex:"dee9d4d8b0e40a034602d6e638197998060f6e9f353ae1d10c94cd56476d3c92":hex:"304502210098a5a1392abe29e4b0a4da3fefe9af0f8c32e5b839ab52ba6a05da9c3b7edd0f0220596f0e195ae1e58c1e53e9e7f0f030b274348a8c11232101778d89c4943f5ad2":int:10000:int:0:int:0 + +ECDSA restartable read-verify: max_ops=250 +depends_on:2 +5:exp:2:hex:"04e8f573412a810c5f81ecd2d251bb94387e72f28af70dced90ebe75725c97a6428231069c2b1ef78509a22c59044319f6ed3cb750dfe64c2a282b35967a458ad6":hex:"dee9d4d8b0e40a034602d6e638197998060f6e9f353ae1d10c94cd56476d3c92":hex:"304502210098a5a1392abe29e4b0a4da3fefe9af0f8c32e5b839ab52ba6a05da9c3b7edd0f0220596f0e195ae1e58c1e53e9e7f0f030b274348a8c11232101778d89c4943f5ad2":int:250:int:4:int:64 + +ECDSA restartable sign-write: secp256r1 max_ops=0 (disabled) +depends_on:2:6 +6:exp:2:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":exp:7:char*:"test":hex:"3045022100f1abb023518351cd71d881567b1ea663ed3efcf6c5132b354f28d3b0b7d383670220019f4113742a2b14bd25926b49c649155f267e60d3814b4c0cc84250e46f0083":int:0:int:0:int:0 + +ECDSA restartable sign-write: secp256r1 restart max_ops=1 +depends_on:2:6 +6:exp:2:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":exp:7:char*:"test":hex:"3045022100f1abb023518351cd71d881567b1ea663ed3efcf6c5132b354f28d3b0b7d383670220019f4113742a2b14bd25926b49c649155f267e60d3814b4c0cc84250e46f0083":int:1:int:1:int:10000 + +ECDSA restartable sign-write: secp256r1 restart max_ops=10000 +depends_on:2:6 +6:exp:2:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":exp:7:char*:"test":hex:"3045022100f1abb023518351cd71d881567b1ea663ed3efcf6c5132b354f28d3b0b7d383670220019f4113742a2b14bd25926b49c649155f267e60d3814b4c0cc84250e46f0083":int:10000:int:0:int:0 + +ECDSA restartable sign-write: secp256r1 restart max_ops=250 +depends_on:2:6 +6:exp:2:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":exp:7:char*:"test":hex:"3045022100f1abb023518351cd71d881567b1ea663ed3efcf6c5132b354f28d3b0b7d383670220019f4113742a2b14bd25926b49c649155f267e60d3814b4c0cc84250e46f0083":int:250:int:2:int:32 + +ECDSA zero private parameter p192 +depends_on:0 +2:exp:0:char*:"0":char*:"2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085":char*:"6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945":hex:"9E56F509196784D963D1C0A401510EE7ADA3DCC5DEE04B15":hex:"BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9C":char*:"98C6BD12B23EAF5E2A2045132086BE3EB8EBD62ABF6698FF":char*:"57A22B07DEA9530F8DE9471B1DC6624472E8E2844BC25B64":exp:10 + +ECDSA private parameter greater than n p192 +depends_on:0 +2:exp:0:char*:"6FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD41":char*:"2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085":char*:"6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945":hex:"9E56F509196784D963D1C0A401510EE7ADA3DCC5DEE04B15":hex:"BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61":char*:"98C6BD12B23EAF5E2A2045132086BE3EB8EBD62ABF6698FF":char*:"57A22B07DEA9530F8DE9471B1DC6624472E8E2844BC25B64":exp:10 + +ECDSA zero private parameter p224 +depends_on:1 +2:exp:1:char*:"0":char*:"2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085E0822CB04235E970":char*:"6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945CDDFE7D5":hex:"9E56F509196784D963D1C0A401510EE7ADA3DCC5DEE04B154BF61AF1":hex:"BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61":char*:"22226F9D40A96E19C4A301CE5B74B115303C0F3A4FD30FC257FB57AC":char*:"66D1CDD83E3AF75605DD6E2FEFF196D30AA7ED7A2EDF7AF475403D69":exp:10 + +ECDSA private parameter greater than n p224 +depends_on:1 +2:exp:1:char*:"F220266E1105BFE3083E03EC7A3A654651F45E37167E88600BF257C11":char*:"2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085E0822CB04235E970":char*:"6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945CDDFE7D5":hex:"9E56F509196784D963D1C0A401510EE7ADA3DCC5DEE04B154BF61AF1":hex:"BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD":char*:"22226F9D40A96E19C4A301CE5B74B115303C0F3A4FD30FC257FB57AC":char*:"66D1CDD83E3AF75605DD6E2FEFF196D30AA7ED7A2EDF7AF475403D69":exp:10 + +ECDSA zero private parameter p256 +depends_on:2 +2:exp:2:char*:"0":char*:"2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085E0822CB04235E970":char*:"6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945CDDFE7D509BBFD7D":hex:"9E56F509196784D963D1C0A401510EE7ADA3DCC5DEE04B154BF61AF1D5A6DECE":hex:"BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD":char*:"CB28E0999B9C7715FD0A80D8E47A77079716CBBF917DD72E97566EA1C066957C":char*:"86FA3BB4E26CAD5BF90B7F81899256CE7594BB1EA0C89212748BFF3B3D5B0315":exp:10 + +ECDSA private parameter greater than n p256 +depends_on:2 +2:exp:2:char*:"DC51D3866A15BACDE33D96F992FCA99DA7E6EF0934E7097559C27F1614C88A7F1":char*:"2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085E0822CB04235E970":char*:"6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945CDDFE7D509BBFD7D":hex:"9E56F509196784D963D1C0A401510EE7ADA3DCC5DEE04B154BF61AF1D5A6DECE":hex:"BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD":char*:"CB28E0999B9C7715FD0A80D8E47A77079716CBBF917DD72E97566EA1C066957C":char*:"86FA3BB4E26CAD5BF90B7F81899256CE7594BB1EA0C89212748BFF3B3D5B0315":exp:10 + +ECDSA zero private parameter p384 +depends_on:3 +2:exp:3:char*:"0":char*:"96281BF8DD5E0525CA049C048D345D3082968D10FEDF5C5ACA0C64E6465A97EA5CE10C9DFEC21797415710721F437922":char*:"447688BA94708EB6E2E4D59F6AB6D7EDFF9301D249FE49C33096655F5D502FAD3D383B91C5E7EDAA2B714CC99D5743CA":hex:"B4B74E44D71A13D568003D7489908D564C7761E229C58CBFA18950096EB7463B854D7FA992F934D927376285E63414FA":hex:"CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1631A8B605A43FF5BED8086072BA1E7CC2358BAECA134C825A7":char*:"FB017B914E29149432D8BAC29A514640B46F53DDAB2C69948084E2930F1C8F7E08E07C9C63F2D21A07DCB56A6AF56EB3":char*:"B263A1305E057F984D38726A1B46874109F417BCA112674C528262A40A629AF1CBB9F516CE0FA7D2FF630863A00E8B9F":exp:10 + +ECDSA private parameter greater than n p384 +depends_on:3 +2:exp:3:char*:"10BEB646634BA87735D77AE4809A0EBEA865535DE4C1E1DCB692E84708E81A5AF62E528C38B2A81B35309668D73524D9F":char*:"96281BF8DD5E0525CA049C048D345D3082968D10FEDF5C5ACA0C64E6465A97EA5CE10C9DFEC21797415710721F437922":char*:"447688BA94708EB6E2E4D59F6AB6D7EDFF9301D249FE49C33096655F5D502FAD3D383B91C5E7EDAA2B714CC99D5743CA":hex:"B4B74E44D71A13D568003D7489908D564C7761E229C58CBFA18950096EB7463B854D7FA992F934D927376285E63414FA":hex:"CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1631A8B605A43FF5BED8086072BA1E7CC2358BAECA134C825A7":char*:"FB017B914E29149432D8BAC29A514640B46F53DDAB2C69948084E2930F1C8F7E08E07C9C63F2D21A07DCB56A6AF56EB3":char*:"B263A1305E057F984D38726A1B46874109F417BCA112674C528262A40A629AF1CBB9F516CE0FA7D2FF630863A00E8B9F":exp:10 + +ECDSA zero private parameter p521 +depends_on:4 +2:exp:4:char*:"0":char*:"0151518F1AF0F563517EDD5485190DF95A4BF57B5CBA4CF2A9A3F6474725A35F7AFE0A6DDEB8BEDBCD6A197E592D40188901CECD650699C9B5E456AEA5ADD19052A8":char*:"006F3B142EA1BFFF7E2837AD44C9E4FF6D2D34C73184BBAD90026DD5E6E85317D9DF45CAD7803C6C20035B2F3FF63AFF4E1BA64D1C077577DA3F4286C58F0AEAE643":hex:"00C1C2B305419F5A41344D7E4359933D734096F556197A9B244342B8B62F46F9373778F9DE6B6497B1EF825FF24F42F9B4A4BD7382CFC3378A540B1B7F0C1B956C2F":hex:"DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F":char*:"0154FD3836AF92D0DCA57DD5341D3053988534FDE8318FC6AAAAB68E2E6F4339B19F2F281A7E0B22C269D93CF8794A9278880ED7DBB8D9362CAEACEE544320552251":char*:"017705A7030290D1CEB605A9A1BB03FF9CDD521E87A696EC926C8C10C8362DF4975367101F67D1CF9BCCBF2F3D239534FA509E70AAC851AE01AAC68D62F866472660":exp:10 + +ECDSA private parameter greater than n p521 +depends_on:4 +2:exp:4:char*:"0065FDA3409451DCAB0A0EAD45495112A3D813C17BFD34BDF8C1209D7DF5849120597779060A7FF9D704ADF78B570FFAD6F062E95C7E0C5D5481C5B153B48B375FA11":char*:"0151518F1AF0F563517EDD5485190DF95A4BF57B5CBA4CF2A9A3F6474725A35F7AFE0A6DDEB8BEDBCD6A197E592D40188901CECD650699C9B5E456AEA5ADD19052A8":char*:"006F3B142EA1BFFF7E2837AD44C9E4FF6D2D34C73184BBAD90026DD5E6E85317D9DF45CAD7803C6C20035B2F3FF63AFF4E1BA64D1C077577DA3F4286C58F0AEAE643":hex:"00C1C2B305419F5A41344D7E4359933D734096F556197A9B244342B8B62F46F9373778F9DE6B6497B1EF825FF24F42F9B4A4BD7382CFC3378A540B1B7F0C1B956C2F":hex:"DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F":char*:"0154FD3836AF92D0DCA57DD5341D3053988534FDE8318FC6AAAAB68E2E6F4339B19F2F281A7E0B22C269D93CF8794A9278880ED7DBB8D9362CAEACEE544320552251":char*:"017705A7030290D1CEB605A9A1BB03FF9CDD521E87A696EC926C8C10C8362DF4975367101F67D1CF9BCCBF2F3D239534FA509E70AAC851AE01AAC68D62F866472660":exp:10 + diff --git a/third_party/mbedtls/test/test_suite_ecjpake.c b/third_party/mbedtls/test/test_suite_ecjpake.c new file mode 100644 index 000000000..7a79599fc --- /dev/null +++ b/third_party/mbedtls/test/test_suite_ecjpake.c @@ -0,0 +1,662 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_ecjpake.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_ecjpake.function + * Test suite data : suites/test_suite_ecjpake.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_ECJPAKE_C) + +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) && defined(MBEDTLS_SHA256_C) +static const unsigned char ecjpake_test_x1[] = { + 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, 0x21 +}; + +static const unsigned char ecjpake_test_x2[] = { + 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, + 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, + 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x81 +}; + +static const unsigned char ecjpake_test_x3[] = { + 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, + 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, + 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x81 +}; + +static const unsigned char ecjpake_test_x4[] = { + 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, + 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, + 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe1 +}; + +static const unsigned char ecjpake_test_X1[] = { + 0x04, 0xac, 0xcf, 0x01, 0x06, 0xef, 0x85, 0x8f, 0xa2, 0xd9, 0x19, 0x33, + 0x13, 0x46, 0x80, 0x5a, 0x78, 0xb5, 0x8b, 0xba, 0xd0, 0xb8, 0x44, 0xe5, + 0xc7, 0x89, 0x28, 0x79, 0x14, 0x61, 0x87, 0xdd, 0x26, 0x66, 0xad, 0xa7, + 0x81, 0xbb, 0x7f, 0x11, 0x13, 0x72, 0x25, 0x1a, 0x89, 0x10, 0x62, 0x1f, + 0x63, 0x4d, 0xf1, 0x28, 0xac, 0x48, 0xe3, 0x81, 0xfd, 0x6e, 0xf9, 0x06, + 0x07, 0x31, 0xf6, 0x94, 0xa4 +}; + +static const unsigned char ecjpake_test_X2[] = { + 0x04, 0x7e, 0xa6, 0xe3, 0xa4, 0x48, 0x70, 0x37, 0xa9, 0xe0, 0xdb, 0xd7, + 0x92, 0x62, 0xb2, 0xcc, 0x27, 0x3e, 0x77, 0x99, 0x30, 0xfc, 0x18, 0x40, + 0x9a, 0xc5, 0x36, 0x1c, 0x5f, 0xe6, 0x69, 0xd7, 0x02, 0xe1, 0x47, 0x79, + 0x0a, 0xeb, 0x4c, 0xe7, 0xfd, 0x65, 0x75, 0xab, 0x0f, 0x6c, 0x7f, 0xd1, + 0xc3, 0x35, 0x93, 0x9a, 0xa8, 0x63, 0xba, 0x37, 0xec, 0x91, 0xb7, 0xe3, + 0x2b, 0xb0, 0x13, 0xbb, 0x2b +}; + +static const unsigned char ecjpake_test_X3[] = { + 0x04, 0x7e, 0xa6, 0xe3, 0xa4, 0x48, 0x70, 0x37, 0xa9, 0xe0, 0xdb, 0xd7, + 0x92, 0x62, 0xb2, 0xcc, 0x27, 0x3e, 0x77, 0x99, 0x30, 0xfc, 0x18, 0x40, + 0x9a, 0xc5, 0x36, 0x1c, 0x5f, 0xe6, 0x69, 0xd7, 0x02, 0xe1, 0x47, 0x79, + 0x0a, 0xeb, 0x4c, 0xe7, 0xfd, 0x65, 0x75, 0xab, 0x0f, 0x6c, 0x7f, 0xd1, + 0xc3, 0x35, 0x93, 0x9a, 0xa8, 0x63, 0xba, 0x37, 0xec, 0x91, 0xb7, 0xe3, + 0x2b, 0xb0, 0x13, 0xbb, 0x2b +}; + +static const unsigned char ecjpake_test_X4[] = { + 0x04, 0x19, 0x0a, 0x07, 0x70, 0x0f, 0xfa, 0x4b, 0xe6, 0xae, 0x1d, 0x79, + 0xee, 0x0f, 0x06, 0xae, 0xb5, 0x44, 0xcd, 0x5a, 0xdd, 0xaa, 0xbe, 0xdf, + 0x70, 0xf8, 0x62, 0x33, 0x21, 0x33, 0x2c, 0x54, 0xf3, 0x55, 0xf0, 0xfb, + 0xfe, 0xc7, 0x83, 0xed, 0x35, 0x9e, 0x5d, 0x0b, 0xf7, 0x37, 0x7a, 0x0f, + 0xc4, 0xea, 0x7a, 0xce, 0x47, 0x3c, 0x9c, 0x11, 0x2b, 0x41, 0xcc, 0xd4, + 0x1a, 0xc5, 0x6a, 0x56, 0x12 +}; + +/* Load my private and public keys, and peer's public keys */ +static int ecjpake_test_load( mbedtls_ecjpake_context *ctx, + const unsigned char *xm1, size_t len_xm1, + const unsigned char *xm2, size_t len_xm2, + const unsigned char *Xm1, size_t len_Xm1, + const unsigned char *Xm2, size_t len_Xm2, + const unsigned char *Xp1, size_t len_Xp1, + const unsigned char *Xp2, size_t len_Xp2 ) +{ + int ret; + + MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &ctx->xm1, xm1, len_xm1 ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &ctx->xm2, xm2, len_xm2 ) ); + + MBEDTLS_MPI_CHK( mbedtls_ecp_point_read_binary( &ctx->grp, + &ctx->Xm1, Xm1, len_Xm1 ) ); + MBEDTLS_MPI_CHK( mbedtls_ecp_point_read_binary( &ctx->grp, + &ctx->Xm2, Xm2, len_Xm2 ) ); + MBEDTLS_MPI_CHK( mbedtls_ecp_point_read_binary( &ctx->grp, + &ctx->Xp1, Xp1, len_Xp1 ) ); + MBEDTLS_MPI_CHK( mbedtls_ecp_point_read_binary( &ctx->grp, + &ctx->Xp2, Xp2, len_Xp2 ) ); + +cleanup: + return( ret ); +} + +#define ADD_SIZE( x ) x, sizeof( x ) +#endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED && MBEDTLS_SHA256_C */ +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_ecjpake_invalid_param( ) +{ + mbedtls_ecjpake_context ctx; + unsigned char buf[42] = { 0 }; + size_t olen; + size_t const len = sizeof( buf ); + mbedtls_ecjpake_role valid_role = MBEDTLS_ECJPAKE_SERVER; + mbedtls_ecjpake_role invalid_role = (mbedtls_ecjpake_role) 42; + mbedtls_md_type_t valid_md = MBEDTLS_MD_SHA256; + mbedtls_ecp_group_id valid_group = MBEDTLS_ECP_DP_SECP256R1; + + TEST_INVALID_PARAM( mbedtls_ecjpake_init( NULL ) ); + TEST_VALID_PARAM( mbedtls_ecjpake_free( NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_setup( NULL, + valid_role, + valid_md, + valid_group, + buf, len ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_setup( &ctx, + invalid_role, + valid_md, + valid_group, + buf, len ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_setup( &ctx, + valid_role, + valid_md, + valid_group, + NULL, len ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_check( NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_write_round_one( NULL, buf, len, &olen, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_write_round_one( &ctx, NULL, len, &olen, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_write_round_one( &ctx, buf, len, NULL, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_write_round_one( &ctx, buf, len, &olen, NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_write_round_two( NULL, buf, len, &olen, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_write_round_two( &ctx, NULL, len, &olen, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_write_round_two( &ctx, buf, len, NULL, + mbedtls_test_rnd_std_rand, NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_write_round_two( &ctx, buf, len, &olen, NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_read_round_one( NULL, + buf, len ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_read_round_one( &ctx, + NULL, len ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_read_round_two( NULL, + buf, len ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_read_round_two( &ctx, + NULL, len ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_derive_secret( NULL, buf, len, &olen, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_derive_secret( &ctx, NULL, len, &olen, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_derive_secret( &ctx, buf, len, NULL, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecjpake_derive_secret( &ctx, buf, len, &olen, NULL, NULL ) ); + +exit: + return; +} + +void test_ecjpake_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_ecjpake_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#if defined(MBEDTLS_SELF_TEST) +void test_ecjpake_selftest( ) +{ + TEST_ASSERT( mbedtls_ecjpake_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_ecjpake_selftest_wrapper( void ** params ) +{ + (void)params; + + test_ecjpake_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) +#if defined(MBEDTLS_SHA256_C) +void test_read_bad_md( data_t *msg ) +{ + mbedtls_ecjpake_context corrupt_ctx; + const unsigned char * pw = NULL; + const size_t pw_len = 0; + int any_role = MBEDTLS_ECJPAKE_CLIENT; + + mbedtls_ecjpake_init( &corrupt_ctx ); + TEST_ASSERT( mbedtls_ecjpake_setup( &corrupt_ctx, any_role, + MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, pw, pw_len ) == 0 ); + corrupt_ctx.md_info = NULL; + + TEST_ASSERT( mbedtls_ecjpake_read_round_one( &corrupt_ctx, msg->x, + msg->len ) == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + +exit: + mbedtls_ecjpake_free( &corrupt_ctx ); +} + +void test_read_bad_md_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_read_bad_md( &data0 ); +} +#endif /* MBEDTLS_SHA256_C */ +#endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */ +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) +#if defined(MBEDTLS_SHA256_C) +void test_read_round_one( int role, data_t * msg, int ref_ret ) +{ + mbedtls_ecjpake_context ctx; + const unsigned char * pw = NULL; + const size_t pw_len = 0; + + mbedtls_ecjpake_init( &ctx ); + + TEST_ASSERT( mbedtls_ecjpake_setup( &ctx, role, + MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, pw, pw_len ) == 0 ); + + TEST_ASSERT( mbedtls_ecjpake_read_round_one( &ctx, msg->x, msg->len ) == ref_ret ); + +exit: + mbedtls_ecjpake_free( &ctx ); +} + +void test_read_round_one_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_read_round_one( *( (int *) params[0] ), &data1, *( (int *) params[3] ) ); +} +#endif /* MBEDTLS_SHA256_C */ +#endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */ +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) +#if defined(MBEDTLS_SHA256_C) +void test_read_round_two_cli( data_t * msg, int ref_ret ) +{ + mbedtls_ecjpake_context ctx; + const unsigned char * pw = NULL; + const size_t pw_len = 0; + + mbedtls_ecjpake_init( &ctx ); + + TEST_ASSERT( mbedtls_ecjpake_setup( &ctx, MBEDTLS_ECJPAKE_CLIENT, + MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, pw, pw_len ) == 0 ); + + TEST_ASSERT( ecjpake_test_load( &ctx, + ADD_SIZE( ecjpake_test_x1 ), ADD_SIZE( ecjpake_test_x2 ), + ADD_SIZE( ecjpake_test_X1 ), ADD_SIZE( ecjpake_test_X2 ), + ADD_SIZE( ecjpake_test_X3 ), ADD_SIZE( ecjpake_test_X4 ) ) + == 0 ); + + TEST_ASSERT( mbedtls_ecjpake_read_round_two( &ctx, msg->x, msg->len ) == ref_ret ); + +exit: + mbedtls_ecjpake_free( &ctx ); +} + +void test_read_round_two_cli_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_read_round_two_cli( &data0, *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_SHA256_C */ +#endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */ +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) +#if defined(MBEDTLS_SHA256_C) +void test_read_round_two_srv( data_t * msg, int ref_ret ) +{ + mbedtls_ecjpake_context ctx; + const unsigned char * pw = NULL; + const size_t pw_len = 0; + + mbedtls_ecjpake_init( &ctx ); + + TEST_ASSERT( mbedtls_ecjpake_setup( &ctx, MBEDTLS_ECJPAKE_SERVER, + MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, pw, pw_len ) == 0 ); + + TEST_ASSERT( ecjpake_test_load( &ctx, + ADD_SIZE( ecjpake_test_x3 ), ADD_SIZE( ecjpake_test_x4 ), + ADD_SIZE( ecjpake_test_X3 ), ADD_SIZE( ecjpake_test_X4 ), + ADD_SIZE( ecjpake_test_X1 ), ADD_SIZE( ecjpake_test_X2 ) ) + == 0 ); + + TEST_ASSERT( mbedtls_ecjpake_read_round_two( &ctx, msg->x, msg->len ) == ref_ret ); + +exit: + mbedtls_ecjpake_free( &ctx ); +} + +void test_read_round_two_srv_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_read_round_two_srv( &data0, *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_SHA256_C */ +#endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */ +#endif /* MBEDTLS_ECJPAKE_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_ECJPAKE_C) + + case 0: + { + *out_value = MBEDTLS_ECJPAKE_CLIENT; + } + break; + case 1: + { + *out_value = MBEDTLS_ECJPAKE_SERVER; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_ECP_VERIFY_FAILED; + } + break; + case 3: + { + *out_value = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; + } + break; + case 4: + { + *out_value = MBEDTLS_ERR_ECP_INVALID_KEY; + } + break; + case 5: + { + *out_value = MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_ECJPAKE_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_ECJPAKE_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_ecjpake_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_ECJPAKE_C) && defined(MBEDTLS_SELF_TEST) + test_ecjpake_selftest_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_ECJPAKE_C) && defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) && defined(MBEDTLS_SHA256_C) + test_read_bad_md_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_ECJPAKE_C) && defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) && defined(MBEDTLS_SHA256_C) + test_read_round_one_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_ECJPAKE_C) && defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) && defined(MBEDTLS_SHA256_C) + test_read_round_two_cli_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_ECJPAKE_C) && defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) && defined(MBEDTLS_SHA256_C) + test_read_round_two_srv_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_ecjpake.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_ecjpake.datax b/third_party/mbedtls/test/test_suite_ecjpake.datax new file mode 100644 index 000000000..38045cf11 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_ecjpake.datax @@ -0,0 +1,237 @@ +ECJPAKE parameter validation +0 + +ECJPAKE selftest +1 + +ECJPAKE fail read corrupt MD +2:hex:"41047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b410409f85b3d20ebd7885ce464c08d056d6428fe4dd9287aa365f131f4360ff386d846898bc4b41583c2a5197f65d78742746c12a5ec0a4ffe2f270a750a1d8fb51620934d74eb43e54df424fd96306c0117bf131afabf90a9d33d1198d905193735144104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb12" + +ECJPAKE round one: client, valid +3:exp:0:hex:"41047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b410409f85b3d20ebd7885ce464c08d056d6428fe4dd9287aa365f131f4360ff386d846898bc4b41583c2a5197f65d78742746c12a5ec0a4ffe2f270a750a1d8fb51620934d74eb43e54df424fd96306c0117bf131afabf90a9d33d1198d905193735144104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb12":int:0 + +ECJPAKE round one: server, valid +3:exp:1:hex:"4104accf0106ef858fa2d919331346805a78b58bbad0b844e5c7892879146187dd2666ada781bb7f111372251a8910621f634df128ac48e381fd6ef9060731f694a441041dd0bd5d4566c9bed9ce7de701b5e82e08e84b730466018ab903c79eb982172236c0c1728ae4bf73610d34de44246ef3d9c05a2236fb66a6583d7449308babce2072fe16662992e9235c25002f11b15087b82738e03c945bf7a2995dda1e98345841047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b4104a49558d32ed1ebfc1816af4ff09b55fcb4ca47b2a02d1e7caf1179ea3fe1395b22b861964016fabaf72c975695d93d4df0e5197fe9f040634ed59764937787be20bc4deebbf9b8d60a335f046ca3aa941e45864c7cadef9cf75b3d8b010e443ef0":int:0 + +ECJPAKE round one: role mismatch +3:exp:0:hex:"4104accf0106ef858fa2d919331346805a78b58bbad0b844e5c7892879146187dd2666ada781bb7f111372251a8910621f634df128ac48e381fd6ef9060731f694a441041dd0bd5d4566c9bed9ce7de701b5e82e08e84b730466018ab903c79eb982172236c0c1728ae4bf73610d34de44246ef3d9c05a2236fb66a6583d7449308babce2072fe16662992e9235c25002f11b15087b82738e03c945bf7a2995dda1e98345841047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b4104a49558d32ed1ebfc1816af4ff09b55fcb4ca47b2a02d1e7caf1179ea3fe1395b22b861964016fabaf72c975695d93d4df0e5197fe9f040634ed59764937787be20bc4deebbf9b8d60a335f046ca3aa941e45864c7cadef9cf75b3d8b010e443ef0":exp:2 + +ECJPAKE round one: trailing byte +3:exp:0:hex:"41047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b410409f85b3d20ebd7885ce464c08d056d6428fe4dd9287aa365f131f4360ff386d846898bc4b41583c2a5197f65d78742746c12a5ec0a4ffe2f270a750a1d8fb51620934d74eb43e54df424fd96306c0117bf131afabf90a9d33d1198d905193735144104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb1200":exp:3 + +ECJPAKE round one: KKP1: no data +3:exp:0:hex:"":exp:3 + +ECJPAKE round one: KKP1: length of first point too small +3:exp:0:hex:"00":exp:3 + +ECJPAKE round one: KKP1: length of first point too big +3:exp:0:hex:"01":exp:3 + +ECJPAKE round one: KKP1: no point data +3:exp:0:hex:"0104":exp:3 + +ECJPAKE round one: KKP1: first point is zero +3:exp:0:hex:"0100":exp:4 + +ECJPAKE round one: KKP1: unknown first point format +3:exp:0:hex:"41057ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b":exp:5 + +ECJPAKE round one: KKP1: nothing after first point +3:exp:0:hex:"41047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b":exp:3 + +ECJPAKE round one: KKP1: length of second point too small +3:exp:0:hex:"41047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b00":exp:3 + +ECJPAKE round one: KKP1: length of second point too big +3:exp:0:hex:"41047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b01":exp:3 + +ECJPAKE round one: KKP1: no second point data +3:exp:0:hex:"41047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b0104":exp:3 + +ECJPAKE round one: KKP1: unknow second point format +3:exp:0:hex:"41047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b410509f85b3d20ebd7885ce464c08d056d6428fe4dd9287aa365f131f4360ff386d846898bc4b41583c2a5197f65d78742746c12a5ec0a4ffe2f270a750a1d8fb516":exp:5 + +ECJPAKE round one: KKP1: nothing after second point +3:exp:0:hex:"41047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b410409f85b3d20ebd7885ce464c08d056d6428fe4dd9287aa365f131f4360ff386d846898bc4b41583c2a5197f65d78742746c12a5ec0a4ffe2f270a750a1d8fb516":exp:3 + +ECJPAKE round one: KKP1: zero-length r +3:exp:0:hex:"41047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b410409f85b3d20ebd7885ce464c08d056d6428fe4dd9287aa365f131f4360ff386d846898bc4b41583c2a5197f65d78742746c12a5ec0a4ffe2f270a750a1d8fb51600":exp:4 + +ECJPAKE round one: KKP1: no data for r +3:exp:0:hex:"41047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b410409f85b3d20ebd7885ce464c08d056d6428fe4dd9287aa365f131f4360ff386d846898bc4b41583c2a5197f65d78742746c12a5ec0a4ffe2f270a750a1d8fb51601":exp:3 + +ECJPAKE round one: KKP1: corrupted r +3:exp:0:hex:"41047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b410409f85b3d20ebd7885ce464c08d056d6428fe4dd9287aa365f131f4360ff386d846898bc4b41583c2a5197f65d78742746c12a5ec0a4ffe2f270a750a1d8fb51620934d74eb43e54df424fd96306c0117bf131afabf90a9d33d1198d90519373515":exp:2 + +ECJPAKE round one: KKP1: X not on the curve +3:exp:0:hex:"41047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2a410409f85b3d20ebd7885ce464c08d056d6428fe4dd9287aa365f131f4360ff386d846898bc4b41583c2a5197f65d78742746c12a5ec0a4ffe2f270a750a1d8fb51620934d74eb43e54df424fd96306c0117bf131afabf90a9d33d1198d90519373514":exp:4 + +ECJPAKE round one: KKP2: no data +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb12":exp:3 + +ECJPAKE round one: KKP2: length of first point too small +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb1200":exp:3 + +ECJPAKE round one: KKP2: length of first point too big +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb1201":exp:3 + +ECJPAKE round one: KKP2: no point data +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb120104":exp:3 + +ECJPAKE round one: KKP2: first point is zero +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb120100":exp:4 + +ECJPAKE round one: KKP2: unknown first point format +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb1241057ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b":exp:5 + +ECJPAKE round one: KKP2: nothing after first point +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb1241047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b":exp:3 + +ECJPAKE round one: KKP2: length of second point too small +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb1241047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b00":exp:3 + +ECJPAKE round one: KKP2: length of second point too big +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb1241047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b01":exp:3 + +ECJPAKE round one: KKP2: no second point data +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb1241047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b0104":exp:3 + +ECJPAKE round one: KKP2: unknow second point format +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb1241047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b410509f85b3d20ebd7885ce464c08d056d6428fe4dd9287aa365f131f4360ff386d846898bc4b41583c2a5197f65d78742746c12a5ec0a4ffe2f270a750a1d8fb516":exp:5 + +ECJPAKE round one: KKP2: nothing after second point +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb1241047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b410409f85b3d20ebd7885ce464c08d056d6428fe4dd9287aa365f131f4360ff386d846898bc4b41583c2a5197f65d78742746c12a5ec0a4ffe2f270a750a1d8fb516":exp:3 + +ECJPAKE round one: KKP2: zero-length r +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb1241047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b410409f85b3d20ebd7885ce464c08d056d6428fe4dd9287aa365f131f4360ff386d846898bc4b41583c2a5197f65d78742746c12a5ec0a4ffe2f270a750a1d8fb51600":exp:4 + +ECJPAKE round one: KKP2: no data for r +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb1241047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b410409f85b3d20ebd7885ce464c08d056d6428fe4dd9287aa365f131f4360ff386d846898bc4b41583c2a5197f65d78742746c12a5ec0a4ffe2f270a750a1d8fb51601":exp:3 + +ECJPAKE round one: KKP2: corrupted r +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb1241047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2b410409f85b3d20ebd7885ce464c08d056d6428fe4dd9287aa365f131f4360ff386d846898bc4b41583c2a5197f65d78742746c12a5ec0a4ffe2f270a750a1d8fb51620934d74eb43e54df424fd96306c0117bf131afabf90a9d33d1198d90519373515":exp:2 + +ECJPAKE round one: KKP2: X not on the curve +3:exp:0:hex:"4104190a07700ffa4be6ae1d79ee0f06aeb544cd5addaabedf70f8623321332c54f355f0fbfec783ed359e5d0bf7377a0fc4ea7ace473c9c112b41ccd41ac56a56124104360a1cea33fce641156458e0a4eac219e96831e6aebc88b3f3752f93a0281d1bf1fb106051db9694a8d6e862a5ef1324a3d9e27894f1ee4f7c59199965a8dd4a2091847d2d22df3ee55faa2a3fb33fd2d1e055a07a7c61ecfb8d80ec00c2c9eb1241047ea6e3a4487037a9e0dbd79262b2cc273e779930fc18409ac5361c5fe669d702e147790aeb4ce7fd6575ab0f6c7fd1c335939aa863ba37ec91b7e32bb013bb2a410409f85b3d20ebd7885ce464c08d056d6428fe4dd9287aa365f131f4360ff386d846898bc4b41583c2a5197f65d78742746c12a5ec0a4ffe2f270a750a1d8fb51620934d74eb43e54df424fd96306c0117bf131afabf90a9d33d1198d90519373514":exp:4 + +ECJPAKE round two client: valid +4:hex:"03001741040fb22b1d5d1123e0ef9feb9d8a2e590a1f4d7ced2c2b06586e8f2a16d4eb2fda4328a20b07d8fd667654ca18c54e32a333a0845451e926ee8804fd7af0aaa7a641045516ea3e54a0d5d8b2ce786b38d383370029a5dbe4459c9dd601b408a24ae6465c8ac905b9eb03b5d3691c139ef83f1cd4200f6c9cd4ec392218a59ed243d3c820ff724a9a70b88cb86f20b434c6865aa1cd7906dd7c9bce3525f508276f26836c":int:0 + +ECJPAKE round two client: trailing byte +4:hex:"03001741040fb22b1d5d1123e0ef9feb9d8a2e590a1f4d7ced2c2b06586e8f2a16d4eb2fda4328a20b07d8fd667654ca18c54e32a333a0845451e926ee8804fd7af0aaa7a641045516ea3e54a0d5d8b2ce786b38d383370029a5dbe4459c9dd601b408a24ae6465c8ac905b9eb03b5d3691c139ef83f1cd4200f6c9cd4ec392218a59ed243d3c820ff724a9a70b88cb86f20b434c6865aa1cd7906dd7c9bce3525f508276f26836c00":exp:3 + +ECJPAKE round two client: no data +4:hex:"":exp:3 + +ECJPAKE round two client: ECParams too short +4:hex:"0300":exp:3 + +ECJPAKE round two client: ECParams not named curve +4:hex:"010017":exp:3 + +ECJPAKE round two client: ECParams wrong curve +4:hex:"030016":exp:5 + +ECJPAKE round two client: no data after ECParams +4:hex:"030017":exp:3 + +ECJPAKE round two client: length of first point too small +4:hex:"03001700":exp:3 + +ECJPAKE round two client: length of first point too big +4:hex:"03001701":exp:3 + +ECJPAKE round two client: no first point data +4:hex:"0300170104":exp:3 + +ECJPAKE round two client: first point is zero +4:hex:"0300170100":exp:4 + +ECJPAKE round two client: unknown first point format +4:hex:"03001741050fb22b1d5d1123e0ef9feb9d8a2e590a1f4d7ced2c2b06586e8f2a16d4eb2fda4328a20b07d8fd667654ca18c54e32a333a0845451e926ee8804fd7af0aaa7a6":exp:5 + +ECJPAKE round two client: nothing after first point +4:hex:"03001741040fb22b1d5d1123e0ef9feb9d8a2e590a1f4d7ced2c2b06586e8f2a16d4eb2fda4328a20b07d8fd667654ca18c54e32a333a0845451e926ee8804fd7af0aaa7a6":exp:3 + +ECJPAKE round two client: length of second point too small +4:hex:"03001741040fb22b1d5d1123e0ef9feb9d8a2e590a1f4d7ced2c2b06586e8f2a16d4eb2fda4328a20b07d8fd667654ca18c54e32a333a0845451e926ee8804fd7af0aaa7a600":exp:3 + +ECJPAKE round two client: length of second point too big +4:hex:"03001741040fb22b1d5d1123e0ef9feb9d8a2e590a1f4d7ced2c2b06586e8f2a16d4eb2fda4328a20b07d8fd667654ca18c54e32a333a0845451e926ee8804fd7af0aaa7a601":exp:3 + +ECJPAKE round two client: no second point data +4:hex:"03001741040fb22b1d5d1123e0ef9feb9d8a2e590a1f4d7ced2c2b06586e8f2a16d4eb2fda4328a20b07d8fd667654ca18c54e32a333a0845451e926ee8804fd7af0aaa7a60104":exp:3 + +ECJPAKE round two client: unknown second point format +4:hex:"03001741040fb22b1d5d1123e0ef9feb9d8a2e590a1f4d7ced2c2b06586e8f2a16d4eb2fda4328a20b07d8fd667654ca18c54e32a333a0845451e926ee8804fd7af0aaa7a641055516ea3e54a0d5d8b2ce786b38d383370029a5dbe4459c9dd601b408a24ae6465c8ac905b9eb03b5d3691c139ef83f1cd4200f6c9cd4ec392218a59ed243d3c8":exp:5 + +ECJPAKE round two client: nothing after second point +4:hex:"03001741040fb22b1d5d1123e0ef9feb9d8a2e590a1f4d7ced2c2b06586e8f2a16d4eb2fda4328a20b07d8fd667654ca18c54e32a333a0845451e926ee8804fd7af0aaa7a641045516ea3e54a0d5d8b2ce786b38d383370029a5dbe4459c9dd601b408a24ae6465c8ac905b9eb03b5d3691c139ef83f1cd4200f6c9cd4ec392218a59ed243d3c8":exp:3 + +ECJPAKE round two client: zero-length r +4:hex:"03001741040fb22b1d5d1123e0ef9feb9d8a2e590a1f4d7ced2c2b06586e8f2a16d4eb2fda4328a20b07d8fd667654ca18c54e32a333a0845451e926ee8804fd7af0aaa7a641045516ea3e54a0d5d8b2ce786b38d383370029a5dbe4459c9dd601b408a24ae6465c8ac905b9eb03b5d3691c139ef83f1cd4200f6c9cd4ec392218a59ed243d3c800":exp:4 + +ECJPAKE round two client: no data for r +4:hex:"03001741040fb22b1d5d1123e0ef9feb9d8a2e590a1f4d7ced2c2b06586e8f2a16d4eb2fda4328a20b07d8fd667654ca18c54e32a333a0845451e926ee8804fd7af0aaa7a641045516ea3e54a0d5d8b2ce786b38d383370029a5dbe4459c9dd601b408a24ae6465c8ac905b9eb03b5d3691c139ef83f1cd4200f6c9cd4ec392218a59ed243d3c801":exp:3 + +ECJPAKE round two client: corrupted r +4:hex:"03001741040fb22b1d5d1123e0ef9feb9d8a2e590a1f4d7ced2c2b06586e8f2a16d4eb2fda4328a20b07d8fd667654ca18c54e32a333a0845451e926ee8804fd7af0aaa7a641045516ea3e54a0d5d8b2ce786b38d383370029a5dbe4459c9dd601b408a24ae6465c8ac905b9eb03b5d3691c139ef83f1cd4200f6c9cd4ec392218a59ed243d3c820ff724a9a70b88cb86f20b434c6865aa1cd7906dd7c9bce3525f508276f26836d":exp:2 + +ECJPAKE round two client: X not on the curve +4:hex:"03001741040fb22b1d5d1123e0ef9feb9d8a2e590a1f4d7ced2c2b06586e8f2a16d4eb2fda4328a20b07d8fd667654ca18c54e32a333a0845451e926ee8804fd7af0aaa7a741045516ea3e54a0d5d8b2ce786b38d383370029a5dbe4459c9dd601b408a24ae6465c8ac905b9eb03b5d3691c139ef83f1cd4200f6c9cd4ec392218a59ed243d3c820ff724a9a70b88cb86f20b434c6865aa1cd7906dd7c9bce3525f508276f26836c":exp:4 + +ECJPAKE round two server: valid +5:hex:"410469d54ee85e90ce3f1246742de507e939e81d1dc1c5cb988b58c310c9fdd9524d93720b45541c83ee8841191da7ced86e3312d43623c1d63e74989aba4affd1ee4104077e8c31e20e6bedb760c13593e69f15be85c27d68cd09ccb8c4183608917c5c3d409fac39fefee82f7292d36f0d23e055913f45a52b85dd8a2052e9e129bb4d200f011f19483535a6e89a580c9b0003baf21462ece91a82cc38dbdcae60d9c54c":int:0 + +ECJPAKE round two server: trailing byte +5:hex:"410469d54ee85e90ce3f1246742de507e939e81d1dc1c5cb988b58c310c9fdd9524d93720b45541c83ee8841191da7ced86e3312d43623c1d63e74989aba4affd1ee4104077e8c31e20e6bedb760c13593e69f15be85c27d68cd09ccb8c4183608917c5c3d409fac39fefee82f7292d36f0d23e055913f45a52b85dd8a2052e9e129bb4d200f011f19483535a6e89a580c9b0003baf21462ece91a82cc38dbdcae60d9c54c00":exp:3 + +ECJPAKE round two server: no data +5:hex:"":exp:3 + +ECJPAKE round two server: length of forst point too small +5:hex:"00":exp:3 + +ECJPAKE round two server: length of first point too big +5:hex:"01":exp:3 + +ECJPAKE round two server: no first point data +5:hex:"0104":exp:3 + +ECJPAKE round two server: first point is zero +5:hex:"0100":exp:4 + +ECJPAKE round two server: unknown first point format +5:hex:"410569d54ee85e90ce3f1246742de507e939e81d1dc1c5cb988b58c310c9fdd9524d93720b45541c83ee8841191da7ced86e3312d43623c1d63e74989aba4affd1ee":exp:5 + +ECJPAKE round two server: nothing after first point +5:hex:"410469d54ee85e90ce3f1246742de507e939e81d1dc1c5cb988b58c310c9fdd9524d93720b45541c83ee8841191da7ced86e3312d43623c1d63e74989aba4affd1ee":exp:3 + +ECJPAKE round two server: length of second point too small +5:hex:"410469d54ee85e90ce3f1246742de507e939e81d1dc1c5cb988b58c310c9fdd9524d93720b45541c83ee8841191da7ced86e3312d43623c1d63e74989aba4affd1ee00":exp:3 + +ECJPAKE round two server: length of second point too big +5:hex:"410469d54ee85e90ce3f1246742de507e939e81d1dc1c5cb988b58c310c9fdd9524d93720b45541c83ee8841191da7ced86e3312d43623c1d63e74989aba4affd1ee01":exp:3 + +ECJPAKE round two server: no second point data +5:hex:"410469d54ee85e90ce3f1246742de507e939e81d1dc1c5cb988b58c310c9fdd9524d93720b45541c83ee8841191da7ced86e3312d43623c1d63e74989aba4affd1ee0104":exp:3 + +ECJPAKE round two server: unknown second point format +5:hex:"410569d54ee85e90ce3f1246742de507e939e81d1dc1c5cb988b58c310c9fdd9524d93720b45541c83ee8841191da7ced86e3312d43623c1d63e74989aba4affd1ee4104077e8c31e20e6bedb760c13593e69f15be85c27d68cd09ccb8c4183608917c5c3d409fac39fefee82f7292d36f0d23e055913f45a52b85dd8a2052e9e129bb4d":exp:5 + +ECJPAKE round two server: nothing after second point +5:hex:"410469d54ee85e90ce3f1246742de507e939e81d1dc1c5cb988b58c310c9fdd9524d93720b45541c83ee8841191da7ced86e3312d43623c1d63e74989aba4affd1ee4104077e8c31e20e6bedb760c13593e69f15be85c27d68cd09ccb8c4183608917c5c3d409fac39fefee82f7292d36f0d23e055913f45a52b85dd8a2052e9e129bb4d":exp:3 + +ECJPAKE round two server: zero-length r +5:hex:"410469d54ee85e90ce3f1246742de507e939e81d1dc1c5cb988b58c310c9fdd9524d93720b45541c83ee8841191da7ced86e3312d43623c1d63e74989aba4affd1ee4104077e8c31e20e6bedb760c13593e69f15be85c27d68cd09ccb8c4183608917c5c3d409fac39fefee82f7292d36f0d23e055913f45a52b85dd8a2052e9e129bb4d00":exp:4 + +ECJPAKE round two server: no data for r +5:hex:"410469d54ee85e90ce3f1246742de507e939e81d1dc1c5cb988b58c310c9fdd9524d93720b45541c83ee8841191da7ced86e3312d43623c1d63e74989aba4affd1ee4104077e8c31e20e6bedb760c13593e69f15be85c27d68cd09ccb8c4183608917c5c3d409fac39fefee82f7292d36f0d23e055913f45a52b85dd8a2052e9e129bb4d20":exp:3 + +ECJPAKE round two server: corrupted r +5:hex:"410469d54ee85e90ce3f1246742de507e939e81d1dc1c5cb988b58c310c9fdd9524d93720b45541c83ee8841191da7ced86e3312d43623c1d63e74989aba4affd1ee4104077e8c31e20e6bedb760c13593e69f15be85c27d68cd09ccb8c4183608917c5c3d409fac39fefee82f7292d36f0d23e055913f45a52b85dd8a2052e9e129bb4d200f011f19483535a6e89a580c9b0003baf21462ece91a82cc38dbdcae60d9c54d":exp:2 + +ECJPAKE round two server: X not on curve +5:hex:"410469d54ee85e90ce3f1246742de507e939e81d1dc1c5cb988b58c310c9fdd9524d93720b45541c83ee8841191da7ced86e3312d43623c1d63e74989aba4affd1ef4104077e8c31e20e6bedb760c13593e69f15be85c27d68cd09ccb8c4183608917c5c3d409fac39fefee82f7292d36f0d23e055913f45a52b85dd8a2052e9e129bb4d200f011f19483535a6e89a580c9b0003baf21462ece91a82cc38dbdcae60d9c54c":exp:4 + diff --git a/third_party/mbedtls/test/test_suite_ecp.c b/third_party/mbedtls/test/test_suite_ecp.c new file mode 100644 index 000000000..79b8a6530 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_ecp.c @@ -0,0 +1,1903 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_ecp.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_ecp.function + * Test suite data : suites/test_suite_ecp.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_ECP_C) +#include "third_party/mbedtls/ecp.h" + +#define ECP_PF_UNKNOWN -1 + +#define ECP_PT_RESET( x ) \ + mbedtls_ecp_point_free( x ); \ + mbedtls_ecp_point_init( x ); +void test_ecp_valid_param( ) +{ + TEST_VALID_PARAM( mbedtls_ecp_group_free( NULL ) ); + TEST_VALID_PARAM( mbedtls_ecp_keypair_free( NULL ) ); + TEST_VALID_PARAM( mbedtls_ecp_point_free( NULL ) ); + +#if defined(MBEDTLS_ECP_RESTARTABLE) + TEST_VALID_PARAM( mbedtls_ecp_restart_free( NULL ) ); +#endif /* MBEDTLS_ECP_RESTARTABLE */ + +exit: + return; +} + +void test_ecp_valid_param_wrapper( void ** params ) +{ + (void)params; + + test_ecp_valid_param( ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_ecp_invalid_param( ) +{ + mbedtls_ecp_group grp; + mbedtls_ecp_keypair kp; + mbedtls_ecp_point P; + mbedtls_mpi m; + const char *x = "deadbeef"; + int valid_fmt = MBEDTLS_ECP_PF_UNCOMPRESSED; + int invalid_fmt = 42; + size_t olen; + unsigned char buf[42] = { 0 }; + const unsigned char *null_buf = NULL; + mbedtls_ecp_group_id valid_group = MBEDTLS_ECP_DP_SECP192R1; +#if defined(MBEDTLS_ECP_RESTARTABLE) + mbedtls_ecp_restart_ctx restart_ctx; +#endif /* MBEDTLS_ECP_RESTARTABLE */ + + TEST_INVALID_PARAM( mbedtls_ecp_point_init( NULL ) ); + TEST_INVALID_PARAM( mbedtls_ecp_keypair_init( NULL ) ); + TEST_INVALID_PARAM( mbedtls_ecp_group_init( NULL ) ); + +#if defined(MBEDTLS_ECP_RESTARTABLE) + TEST_INVALID_PARAM( mbedtls_ecp_restart_init( NULL ) ); + TEST_INVALID_PARAM( mbedtls_ecp_check_budget( NULL, &restart_ctx, 42 ) ); +#endif /* MBEDTLS_ECP_RESTARTABLE */ + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_copy( NULL, &P ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_copy( &P, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_group_copy( NULL, &grp ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_group_copy( &grp, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_gen_privkey( NULL, + &m, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_gen_privkey( &grp, + NULL, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_gen_privkey( &grp, + &m, + NULL, + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_set_zero( NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_is_zero( NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_point_cmp( NULL, &P ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_point_cmp( &P, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_point_read_string( NULL, 2, + x, x ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_point_read_string( &P, 2, + NULL, x ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_point_read_string( &P, 2, + x, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_point_write_binary( NULL, &P, + valid_fmt, + &olen, + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_point_write_binary( &grp, NULL, + valid_fmt, + &olen, + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_point_write_binary( &grp, &P, + invalid_fmt, + &olen, + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_point_write_binary( &grp, &P, + valid_fmt, + NULL, + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_point_write_binary( &grp, &P, + valid_fmt, + &olen, + NULL, sizeof( buf ) ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_point_read_binary( NULL, &P, buf, + sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_point_read_binary( &grp, NULL, buf, + sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_point_read_binary( &grp, &P, NULL, + sizeof( buf ) ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_read_point( NULL, &P, + (const unsigned char **) &buf, + sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_read_point( &grp, NULL, + (const unsigned char **) &buf, + sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_read_point( &grp, &P, &null_buf, + sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_read_point( &grp, &P, NULL, + sizeof( buf ) ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_write_point( NULL, &P, + valid_fmt, + &olen, + buf, + sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_write_point( &grp, NULL, + valid_fmt, + &olen, + buf, + sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_write_point( &grp, &P, + invalid_fmt, + &olen, + buf, + sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_write_point( &grp, &P, + valid_fmt, + NULL, + buf, + sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_write_point( &grp, &P, + valid_fmt, + &olen, + NULL, + sizeof( buf ) ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_group_load( NULL, valid_group ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_read_group( NULL, + (const unsigned char **) &buf, + sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_read_group( &grp, NULL, + sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_read_group( &grp, &null_buf, + sizeof( buf ) ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_read_group_id( NULL, + (const unsigned char **) &buf, + sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_read_group_id( &valid_group, NULL, + sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_read_group_id( &valid_group, + &null_buf, + sizeof( buf ) ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_write_group( NULL, &olen, + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_write_group( &grp, NULL, + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_tls_write_group( &grp, &olen, + NULL, sizeof( buf ) ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_mul( NULL, &P, &m, &P, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_mul( &grp, NULL, &m, &P, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_mul( &grp, &P, NULL, &P, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_mul( &grp, &P, &m, NULL, + mbedtls_test_rnd_std_rand, + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_mul_restartable( NULL, &P, &m, &P, + mbedtls_test_rnd_std_rand, + NULL , NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_mul_restartable( &grp, NULL, &m, &P, + mbedtls_test_rnd_std_rand, + NULL , NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_mul_restartable( &grp, &P, NULL, &P, + mbedtls_test_rnd_std_rand, + NULL , NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_mul_restartable( &grp, &P, &m, NULL, + mbedtls_test_rnd_std_rand, + NULL , NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_muladd( NULL, &P, &m, &P, + &m, &P ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_muladd( &grp, NULL, &m, &P, + &m, &P ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_muladd( &grp, &P, NULL, &P, + &m, &P ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_muladd( &grp, &P, &m, NULL, + &m, &P ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_muladd( &grp, &P, &m, &P, + NULL, &P ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_muladd( &grp, &P, &m, &P, + &m, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_muladd_restartable( NULL, &P, &m, &P, + &m, &P, NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_muladd_restartable( &grp, NULL, &m, &P, + &m, &P, NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_muladd_restartable( &grp, &P, NULL, &P, + &m, &P, NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_muladd_restartable( &grp, &P, &m, NULL, + &m, &P, NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_muladd_restartable( &grp, &P, &m, &P, + NULL, &P, NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_muladd_restartable( &grp, &P, &m, &P, + &m, NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_check_pubkey( NULL, &P ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_check_pubkey( &grp, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_check_pub_priv( NULL, &kp ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_check_pub_priv( &kp, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_check_privkey( NULL, &m ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_check_privkey( &grp, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_gen_keypair_base( NULL, &P, &m, &P, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_gen_keypair_base( &grp, NULL, &m, &P, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_gen_keypair_base( &grp, &P, NULL, &P, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_gen_keypair_base( &grp, &P, &m, NULL, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_gen_keypair_base( &grp, &P, &m, &P, NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_gen_keypair( NULL, + &m, &P, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_gen_keypair( &grp, + NULL, &P, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_gen_keypair( &grp, + &m, NULL, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_gen_keypair( &grp, + &m, &P, + NULL, + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_gen_key( valid_group, NULL, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA, + mbedtls_ecp_gen_key( valid_group, &kp, + NULL, NULL ) ); + +exit: + return; +} + +void test_ecp_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_ecp_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_mbedtls_ecp_curve_info( int id, int tls_id, int size, char * name ) +{ + const mbedtls_ecp_curve_info *by_id, *by_tls, *by_name; + + by_id = mbedtls_ecp_curve_info_from_grp_id( id ); + by_tls = mbedtls_ecp_curve_info_from_tls_id( tls_id ); + by_name = mbedtls_ecp_curve_info_from_name( name ); + TEST_ASSERT( by_id != NULL ); + TEST_ASSERT( by_tls != NULL ); + TEST_ASSERT( by_name != NULL ); + + TEST_ASSERT( by_id == by_tls ); + TEST_ASSERT( by_id == by_name ); + + TEST_ASSERT( by_id->bit_size == size ); +exit: + ; +} + +void test_mbedtls_ecp_curve_info_wrapper( void ** params ) +{ + + test_mbedtls_ecp_curve_info( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), (char *) params[3] ); +} +void test_ecp_check_pub( int grp_id, char * x_hex, char * y_hex, char * z_hex, + int ret ) +{ + mbedtls_ecp_group grp; + mbedtls_ecp_point P; + + mbedtls_ecp_group_init( &grp ); + mbedtls_ecp_point_init( &P ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, grp_id ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_string( &P.X, 16, x_hex ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &P.Y, 16, y_hex ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &P.Z, 16, z_hex ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_check_pubkey( &grp, &P ) == ret ); + +exit: + mbedtls_ecp_group_free( &grp ); + mbedtls_ecp_point_free( &P ); +} + +void test_ecp_check_pub_wrapper( void ** params ) +{ + + test_ecp_check_pub( *( (int *) params[0] ), (char *) params[1], (char *) params[2], (char *) params[3], *( (int *) params[4] ) ); +} +#if defined(MBEDTLS_ECP_RESTARTABLE) +void test_ecp_test_vect_restart( int id, + char *dA_str, char *xA_str, char *yA_str, + char *dB_str, char *xZ_str, char *yZ_str, + int max_ops, int min_restarts, int max_restarts ) +{ + /* + * Test for early restart. Based on test vectors like ecp_test_vect(), + * but for the sake of simplicity only does half of each side. It's + * important to test both base point and random point, though, as memory + * management is different in each case. + * + * Don't try using too precise bounds for restarts as the exact number + * will depend on settings such as MBEDTLS_ECP_FIXED_POINT_OPTIM and + * MBEDTLS_ECP_WINDOW_SIZE, as well as implementation details that may + * change in the future. A factor 2 is a minimum safety margin. + * + * For reference, with mbed TLS 2.4 and default settings, for P-256: + * - Random point mult: ~3250M + * - Cold base point mult: ~3300M + * - Hot base point mult: ~1100M + * With MBEDTLS_ECP_WINDOW_SIZE set to 2 (minimum): + * - Random point mult: ~3850M + */ + mbedtls_ecp_restart_ctx ctx; + mbedtls_ecp_group grp; + mbedtls_ecp_point R, P; + mbedtls_mpi dA, xA, yA, dB, xZ, yZ; + int cnt_restarts; + int ret; + + mbedtls_ecp_restart_init( &ctx ); + mbedtls_ecp_group_init( &grp ); + mbedtls_ecp_point_init( &R ); mbedtls_ecp_point_init( &P ); + mbedtls_mpi_init( &dA ); mbedtls_mpi_init( &xA ); mbedtls_mpi_init( &yA ); + mbedtls_mpi_init( &dB ); mbedtls_mpi_init( &xZ ); mbedtls_mpi_init( &yZ ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_string( &dA, 16, dA_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &xA, 16, xA_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &yA, 16, yA_str ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_string( &dB, 16, dB_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &xZ, 16, xZ_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &yZ, 16, yZ_str ) == 0 ); + + mbedtls_ecp_set_max_ops( (unsigned) max_ops ); + + /* Base point case */ + cnt_restarts = 0; + do { + ECP_PT_RESET( &R ); + ret = mbedtls_ecp_mul_restartable( &grp, &R, &dA, &grp.G, NULL, NULL, &ctx ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restarts ); + + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.X, &xA ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.Y, &yA ) == 0 ); + + TEST_ASSERT( cnt_restarts >= min_restarts ); + TEST_ASSERT( cnt_restarts <= max_restarts ); + + /* Non-base point case */ + mbedtls_ecp_copy( &P, &R ); + cnt_restarts = 0; + do { + ECP_PT_RESET( &R ); + ret = mbedtls_ecp_mul_restartable( &grp, &R, &dB, &P, NULL, NULL, &ctx ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restarts ); + + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.X, &xZ ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.Y, &yZ ) == 0 ); + + TEST_ASSERT( cnt_restarts >= min_restarts ); + TEST_ASSERT( cnt_restarts <= max_restarts ); + + /* Do we leak memory when aborting an operation? + * This test only makes sense when we actually restart */ + if( min_restarts > 0 ) + { + ret = mbedtls_ecp_mul_restartable( &grp, &R, &dB, &P, NULL, NULL, &ctx ); + TEST_ASSERT( ret == MBEDTLS_ERR_ECP_IN_PROGRESS ); + } + +exit: + mbedtls_ecp_restart_free( &ctx ); + mbedtls_ecp_group_free( &grp ); + mbedtls_ecp_point_free( &R ); mbedtls_ecp_point_free( &P ); + mbedtls_mpi_free( &dA ); mbedtls_mpi_free( &xA ); mbedtls_mpi_free( &yA ); + mbedtls_mpi_free( &dB ); mbedtls_mpi_free( &xZ ); mbedtls_mpi_free( &yZ ); +} + +void test_ecp_test_vect_restart_wrapper( void ** params ) +{ + + test_ecp_test_vect_restart( *( (int *) params[0] ), (char *) params[1], (char *) params[2], (char *) params[3], (char *) params[4], (char *) params[5], (char *) params[6], *( (int *) params[7] ), *( (int *) params[8] ), *( (int *) params[9] ) ); +} +#endif /* MBEDTLS_ECP_RESTARTABLE */ +#if defined(MBEDTLS_ECP_RESTARTABLE) +void test_ecp_muladd_restart( int id, char *xR_str, char *yR_str, + char *u1_str, char *u2_str, + char *xQ_str, char *yQ_str, + int max_ops, int min_restarts, int max_restarts ) +{ + /* + * Compute R = u1 * G + u2 * Q + * (test vectors mostly taken from ECDSA intermediate results) + * + * See comments at the top of ecp_test_vect_restart() + */ + mbedtls_ecp_restart_ctx ctx; + mbedtls_ecp_group grp; + mbedtls_ecp_point R, Q; + mbedtls_mpi u1, u2, xR, yR; + int cnt_restarts; + int ret; + + mbedtls_ecp_restart_init( &ctx ); + mbedtls_ecp_group_init( &grp ); + mbedtls_ecp_point_init( &R ); + mbedtls_ecp_point_init( &Q ); + mbedtls_mpi_init( &u1 ); mbedtls_mpi_init( &u2 ); + mbedtls_mpi_init( &xR ); mbedtls_mpi_init( &yR ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_string( &u1, 16, u1_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &u2, 16, u2_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &xR, 16, xR_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &yR, 16, yR_str ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_string( &Q.X, 16, xQ_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Q.Y, 16, yQ_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_lset( &Q.Z, 1 ) == 0 ); + + mbedtls_ecp_set_max_ops( (unsigned) max_ops ); + + cnt_restarts = 0; + do { + ECP_PT_RESET( &R ); + ret = mbedtls_ecp_muladd_restartable( &grp, &R, + &u1, &grp.G, &u2, &Q, &ctx ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restarts ); + + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.X, &xR ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.Y, &yR ) == 0 ); + + TEST_ASSERT( cnt_restarts >= min_restarts ); + TEST_ASSERT( cnt_restarts <= max_restarts ); + + /* Do we leak memory when aborting an operation? + * This test only makes sense when we actually restart */ + if( min_restarts > 0 ) + { + ret = mbedtls_ecp_muladd_restartable( &grp, &R, + &u1, &grp.G, &u2, &Q, &ctx ); + TEST_ASSERT( ret == MBEDTLS_ERR_ECP_IN_PROGRESS ); + } + +exit: + mbedtls_ecp_restart_free( &ctx ); + mbedtls_ecp_group_free( &grp ); + mbedtls_ecp_point_free( &R ); + mbedtls_ecp_point_free( &Q ); + mbedtls_mpi_free( &u1 ); mbedtls_mpi_free( &u2 ); + mbedtls_mpi_free( &xR ); mbedtls_mpi_free( &yR ); +} + +void test_ecp_muladd_restart_wrapper( void ** params ) +{ + + test_ecp_muladd_restart( *( (int *) params[0] ), (char *) params[1], (char *) params[2], (char *) params[3], (char *) params[4], (char *) params[5], (char *) params[6], *( (int *) params[7] ), *( (int *) params[8] ), *( (int *) params[9] ) ); +} +#endif /* MBEDTLS_ECP_RESTARTABLE */ +void test_ecp_test_vect( int id, char * dA_str, char * xA_str, char * yA_str, + char * dB_str, char * xB_str, char * yB_str, + char * xZ_str, char * yZ_str ) +{ + mbedtls_ecp_group grp; + mbedtls_ecp_point R; + mbedtls_mpi dA, xA, yA, dB, xB, yB, xZ, yZ; + mbedtls_test_rnd_pseudo_info rnd_info; + + mbedtls_ecp_group_init( &grp ); mbedtls_ecp_point_init( &R ); + mbedtls_mpi_init( &dA ); mbedtls_mpi_init( &xA ); mbedtls_mpi_init( &yA ); mbedtls_mpi_init( &dB ); + mbedtls_mpi_init( &xB ); mbedtls_mpi_init( &yB ); mbedtls_mpi_init( &xZ ); mbedtls_mpi_init( &yZ ); + memset( &rnd_info, 0x00, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_check_pubkey( &grp, &grp.G ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_string( &dA, 16, dA_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &xA, 16, xA_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &yA, 16, yA_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &dB, 16, dB_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &xB, 16, xB_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &yB, 16, yB_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &xZ, 16, xZ_str ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &yZ, 16, yZ_str ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_mul( &grp, &R, &dA, &grp.G, + &mbedtls_test_rnd_pseudo_rand, &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.X, &xA ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.Y, &yA ) == 0 ); + TEST_ASSERT( mbedtls_ecp_check_pubkey( &grp, &R ) == 0 ); + TEST_ASSERT( mbedtls_ecp_mul( &grp, &R, &dB, &R, NULL, NULL ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.X, &xZ ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.Y, &yZ ) == 0 ); + TEST_ASSERT( mbedtls_ecp_check_pubkey( &grp, &R ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_mul( &grp, &R, &dB, &grp.G, NULL, NULL ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.X, &xB ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.Y, &yB ) == 0 ); + TEST_ASSERT( mbedtls_ecp_check_pubkey( &grp, &R ) == 0 ); + TEST_ASSERT( mbedtls_ecp_mul( &grp, &R, &dA, &R, + &mbedtls_test_rnd_pseudo_rand, &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.X, &xZ ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.Y, &yZ ) == 0 ); + TEST_ASSERT( mbedtls_ecp_check_pubkey( &grp, &R ) == 0 ); + +exit: + mbedtls_ecp_group_free( &grp ); mbedtls_ecp_point_free( &R ); + mbedtls_mpi_free( &dA ); mbedtls_mpi_free( &xA ); mbedtls_mpi_free( &yA ); mbedtls_mpi_free( &dB ); + mbedtls_mpi_free( &xB ); mbedtls_mpi_free( &yB ); mbedtls_mpi_free( &xZ ); mbedtls_mpi_free( &yZ ); +} + +void test_ecp_test_vect_wrapper( void ** params ) +{ + + test_ecp_test_vect( *( (int *) params[0] ), (char *) params[1], (char *) params[2], (char *) params[3], (char *) params[4], (char *) params[5], (char *) params[6], (char *) params[7], (char *) params[8] ); +} +void test_ecp_test_vec_x( int id, char * dA_hex, char * xA_hex, char * dB_hex, + char * xB_hex, char * xS_hex ) +{ + mbedtls_ecp_group grp; + mbedtls_ecp_point R; + mbedtls_mpi dA, xA, dB, xB, xS; + mbedtls_test_rnd_pseudo_info rnd_info; + + mbedtls_ecp_group_init( &grp ); mbedtls_ecp_point_init( &R ); + mbedtls_mpi_init( &dA ); mbedtls_mpi_init( &xA ); + mbedtls_mpi_init( &dB ); mbedtls_mpi_init( &xB ); + mbedtls_mpi_init( &xS ); + memset( &rnd_info, 0x00, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_check_pubkey( &grp, &grp.G ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_string( &dA, 16, dA_hex ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &dB, 16, dB_hex ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &xA, 16, xA_hex ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &xB, 16, xB_hex ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &xS, 16, xS_hex ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_mul( &grp, &R, &dA, &grp.G, + &mbedtls_test_rnd_pseudo_rand, &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_ecp_check_pubkey( &grp, &R ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.X, &xA ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_mul( &grp, &R, &dB, &R, + &mbedtls_test_rnd_pseudo_rand, &rnd_info ) == 0 ); + TEST_ASSERT( mbedtls_ecp_check_pubkey( &grp, &R ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.X, &xS ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_mul( &grp, &R, &dB, &grp.G, NULL, NULL ) == 0 ); + TEST_ASSERT( mbedtls_ecp_check_pubkey( &grp, &R ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.X, &xB ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_mul( &grp, &R, &dA, &R, NULL, NULL ) == 0 ); + TEST_ASSERT( mbedtls_ecp_check_pubkey( &grp, &R ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R.X, &xS ) == 0 ); + +exit: + mbedtls_ecp_group_free( &grp ); mbedtls_ecp_point_free( &R ); + mbedtls_mpi_free( &dA ); mbedtls_mpi_free( &xA ); + mbedtls_mpi_free( &dB ); mbedtls_mpi_free( &xB ); + mbedtls_mpi_free( &xS ); +} + +void test_ecp_test_vec_x_wrapper( void ** params ) +{ + + test_ecp_test_vec_x( *( (int *) params[0] ), (char *) params[1], (char *) params[2], (char *) params[3], (char *) params[4], (char *) params[5] ); +} +void test_ecp_test_mul( int id, data_t * n_hex, + data_t * Px_hex, data_t * Py_hex, data_t * Pz_hex, + data_t * nPx_hex, data_t * nPy_hex, data_t * nPz_hex, + int expected_ret ) +{ + mbedtls_ecp_group grp; + mbedtls_ecp_point P, nP, R; + mbedtls_mpi n; + mbedtls_test_rnd_pseudo_info rnd_info; + + mbedtls_ecp_group_init( &grp ); mbedtls_ecp_point_init( &R ); + mbedtls_ecp_point_init( &P ); mbedtls_ecp_point_init( &nP ); + mbedtls_mpi_init( &n ); + memset( &rnd_info, 0x00, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_check_pubkey( &grp, &grp.G ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_binary( &n, n_hex->x, n_hex->len ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_binary( &P.X, Px_hex->x, Px_hex->len ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_binary( &P.Y, Py_hex->x, Py_hex->len ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_binary( &P.Z, Pz_hex->x, Pz_hex->len ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_binary( &nP.X, nPx_hex->x, nPx_hex->len ) + == 0 ); + TEST_ASSERT( mbedtls_mpi_read_binary( &nP.Y, nPy_hex->x, nPy_hex->len ) + == 0 ); + TEST_ASSERT( mbedtls_mpi_read_binary( &nP.Z, nPz_hex->x, nPz_hex->len ) + == 0 ); + + TEST_ASSERT( mbedtls_ecp_mul( &grp, &R, &n, &P, + &mbedtls_test_rnd_pseudo_rand, &rnd_info ) + == expected_ret ); + + if( expected_ret == 0 ) + { + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &nP.X, &R.X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &nP.Y, &R.Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &nP.Z, &R.Z ) == 0 ); + } + +exit: + mbedtls_ecp_group_free( &grp ); mbedtls_ecp_point_free( &R ); + mbedtls_ecp_point_free( &P ); mbedtls_ecp_point_free( &nP ); + mbedtls_mpi_free( &n ); +} + +void test_ecp_test_mul_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data11 = {(uint8_t *) params[11], *( (uint32_t *) params[12] )}; + data_t data13 = {(uint8_t *) params[13], *( (uint32_t *) params[14] )}; + + test_ecp_test_mul( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, &data11, &data13, *( (int *) params[15] ) ); +} +void test_ecp_test_mul_rng( int id, data_t * d_hex) +{ + mbedtls_ecp_group grp; + mbedtls_mpi d; + mbedtls_ecp_point Q; + + mbedtls_ecp_group_init( &grp ); mbedtls_mpi_init( &d ); + mbedtls_ecp_point_init( &Q ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_check_pubkey( &grp, &grp.G ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_binary( &d, d_hex->x, d_hex->len ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_mul( &grp, &Q, &d, &grp.G, + &mbedtls_test_rnd_zero_rand, NULL ) + == MBEDTLS_ERR_ECP_RANDOM_FAILED ); + +exit: + mbedtls_ecp_group_free( &grp ); mbedtls_mpi_free( &d ); + mbedtls_ecp_point_free( &Q ); +} + +void test_ecp_test_mul_rng_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_ecp_test_mul_rng( *( (int *) params[0] ), &data1 ); +} +void test_ecp_fast_mod( int id, char * N_str ) +{ + mbedtls_ecp_group grp; + mbedtls_mpi N, R; + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &R ); + mbedtls_ecp_group_init( &grp ); + + TEST_ASSERT( mbedtls_mpi_read_string( &N, 16, N_str ) == 0 ); + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + TEST_ASSERT( grp.modp != NULL ); + + /* + * Store correct result before we touch N + */ + TEST_ASSERT( mbedtls_mpi_mod_mpi( &R, &N, &grp.P ) == 0 ); + + TEST_ASSERT( grp.modp( &N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_bitlen( &N ) <= grp.pbits + 3 ); + + /* + * Use mod rather than addition/subtraction in case previous test fails + */ + TEST_ASSERT( mbedtls_mpi_mod_mpi( &N, &N, &grp.P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &N, &R ) == 0 ); + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &R ); + mbedtls_ecp_group_free( &grp ); +} + +void test_ecp_fast_mod_wrapper( void ** params ) +{ + + test_ecp_fast_mod( *( (int *) params[0] ), (char *) params[1] ); +} +void test_ecp_write_binary( int id, char * x, char * y, char * z, int format, + data_t * out, int blen, int ret ) +{ + mbedtls_ecp_group grp; + mbedtls_ecp_point P; + unsigned char buf[256]; + size_t olen; + + memset( buf, 0, sizeof( buf ) ); + + mbedtls_ecp_group_init( &grp ); mbedtls_ecp_point_init( &P ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_string( &P.X, 16, x ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &P.Y, 16, y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &P.Z, 16, z ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_point_write_binary( &grp, &P, format, + &olen, buf, blen ) == ret ); + + if( ret == 0 ) + { + TEST_ASSERT( mbedtls_test_hexcmp( buf, out->x, olen, out->len ) == 0 ); + } + +exit: + mbedtls_ecp_group_free( &grp ); mbedtls_ecp_point_free( &P ); +} + +void test_ecp_write_binary_wrapper( void ** params ) +{ + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + + test_ecp_write_binary( *( (int *) params[0] ), (char *) params[1], (char *) params[2], (char *) params[3], *( (int *) params[4] ), &data5, *( (int *) params[7] ), *( (int *) params[8] ) ); +} +void test_ecp_read_binary( int id, data_t * buf, char * x, char * y, char * z, + int ret ) +{ + mbedtls_ecp_group grp; + mbedtls_ecp_point P; + mbedtls_mpi X, Y, Z; + + + mbedtls_ecp_group_init( &grp ); mbedtls_ecp_point_init( &P ); + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &Z ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, 16, x ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Y, 16, y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Z, 16, z ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_point_read_binary( &grp, &P, buf->x, buf->len ) == ret ); + + if( ret == 0 ) + { + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &P.X, &X ) == 0 ); + if( mbedtls_ecp_get_type( &grp ) == MBEDTLS_ECP_TYPE_MONTGOMERY ) + { + TEST_ASSERT( mbedtls_mpi_cmp_int( &Y, 0 ) == 0 ); + TEST_ASSERT( P.Y.p == NULL ); + TEST_ASSERT( mbedtls_mpi_cmp_int( &Z, 1 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_int( &P.Z, 1 ) == 0 ); + } + else + { + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &P.Y, &Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &P.Z, &Z ) == 0 ); + } + } + +exit: + mbedtls_ecp_group_free( &grp ); mbedtls_ecp_point_free( &P ); + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &Z ); +} + +void test_ecp_read_binary_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_ecp_read_binary( *( (int *) params[0] ), &data1, (char *) params[3], (char *) params[4], (char *) params[5], *( (int *) params[6] ) ); +} +void test_mbedtls_ecp_tls_read_point( int id, data_t * buf, char * x, char * y, + char * z, int ret ) +{ + mbedtls_ecp_group grp; + mbedtls_ecp_point P; + mbedtls_mpi X, Y, Z; + const unsigned char *vbuf = buf->x; + + + mbedtls_ecp_group_init( &grp ); mbedtls_ecp_point_init( &P ); + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &Z ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, 16, x ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Y, 16, y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Z, 16, z ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_tls_read_point( &grp, &P, &vbuf, buf->len ) == ret ); + + if( ret == 0 ) + { + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &P.X, &X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &P.Y, &Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &P.Z, &Z ) == 0 ); + TEST_ASSERT( (uint32_t)( vbuf - buf->x ) == buf->len ); + } + +exit: + mbedtls_ecp_group_free( &grp ); mbedtls_ecp_point_free( &P ); + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &Z ); +} + +void test_mbedtls_ecp_tls_read_point_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_mbedtls_ecp_tls_read_point( *( (int *) params[0] ), &data1, (char *) params[3], (char *) params[4], (char *) params[5], *( (int *) params[6] ) ); +} +void test_ecp_tls_write_read_point( int id ) +{ + mbedtls_ecp_group grp; + mbedtls_ecp_point pt; + unsigned char buf[256]; + const unsigned char *vbuf; + size_t olen; + + mbedtls_ecp_group_init( &grp ); + mbedtls_ecp_point_init( &pt ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + + memset( buf, 0x00, sizeof( buf ) ); vbuf = buf; + TEST_ASSERT( mbedtls_ecp_tls_write_point( &grp, &grp.G, + MBEDTLS_ECP_PF_COMPRESSED, &olen, buf, 256 ) == 0 ); + TEST_ASSERT( mbedtls_ecp_tls_read_point( &grp, &pt, &vbuf, olen ) + == MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); + TEST_ASSERT( vbuf == buf + olen ); + + memset( buf, 0x00, sizeof( buf ) ); vbuf = buf; + TEST_ASSERT( mbedtls_ecp_tls_write_point( &grp, &grp.G, + MBEDTLS_ECP_PF_UNCOMPRESSED, &olen, buf, 256 ) == 0 ); + TEST_ASSERT( mbedtls_ecp_tls_read_point( &grp, &pt, &vbuf, olen ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &grp.G.X, &pt.X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &grp.G.Y, &pt.Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &grp.G.Z, &pt.Z ) == 0 ); + TEST_ASSERT( vbuf == buf + olen ); + + memset( buf, 0x00, sizeof( buf ) ); vbuf = buf; + TEST_ASSERT( mbedtls_ecp_set_zero( &pt ) == 0 ); + TEST_ASSERT( mbedtls_ecp_tls_write_point( &grp, &pt, + MBEDTLS_ECP_PF_COMPRESSED, &olen, buf, 256 ) == 0 ); + TEST_ASSERT( mbedtls_ecp_tls_read_point( &grp, &pt, &vbuf, olen ) == 0 ); + TEST_ASSERT( mbedtls_ecp_is_zero( &pt ) ); + TEST_ASSERT( vbuf == buf + olen ); + + memset( buf, 0x00, sizeof( buf ) ); vbuf = buf; + TEST_ASSERT( mbedtls_ecp_set_zero( &pt ) == 0 ); + TEST_ASSERT( mbedtls_ecp_tls_write_point( &grp, &pt, + MBEDTLS_ECP_PF_UNCOMPRESSED, &olen, buf, 256 ) == 0 ); + TEST_ASSERT( mbedtls_ecp_tls_read_point( &grp, &pt, &vbuf, olen ) == 0 ); + TEST_ASSERT( mbedtls_ecp_is_zero( &pt ) ); + TEST_ASSERT( vbuf == buf + olen ); + +exit: + mbedtls_ecp_group_free( &grp ); + mbedtls_ecp_point_free( &pt ); +} + +void test_ecp_tls_write_read_point_wrapper( void ** params ) +{ + + test_ecp_tls_write_read_point( *( (int *) params[0] ) ); +} +void test_mbedtls_ecp_tls_read_group( data_t * buf, int result, int bits, + int record_len ) +{ + mbedtls_ecp_group grp; + const unsigned char *vbuf = buf->x; + int ret; + + mbedtls_ecp_group_init( &grp ); + + ret = mbedtls_ecp_tls_read_group( &grp, &vbuf, buf->len ); + + TEST_ASSERT( ret == result ); + if( ret == 0) + { + TEST_ASSERT( mbedtls_mpi_bitlen( &grp.P ) == (size_t) bits ); + TEST_ASSERT( vbuf - buf->x == record_len); + } + +exit: + mbedtls_ecp_group_free( &grp ); +} + +void test_mbedtls_ecp_tls_read_group_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_mbedtls_ecp_tls_read_group( &data0, *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_ecp_tls_write_read_group( int id ) +{ + mbedtls_ecp_group grp1, grp2; + unsigned char buf[10]; + const unsigned char *vbuf = buf; + size_t len; + int ret; + + mbedtls_ecp_group_init( &grp1 ); + mbedtls_ecp_group_init( &grp2 ); + memset( buf, 0x00, sizeof( buf ) ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp1, id ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_tls_write_group( &grp1, &len, buf, 10 ) == 0 ); + ret = mbedtls_ecp_tls_read_group( &grp2, &vbuf, len ); + TEST_ASSERT( ret == 0 ); + + if( ret == 0 ) + { + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &grp1.N, &grp2.N ) == 0 ); + TEST_ASSERT( grp1.id == grp2.id ); + } + +exit: + mbedtls_ecp_group_free( &grp1 ); + mbedtls_ecp_group_free( &grp2 ); +} + +void test_ecp_tls_write_read_group_wrapper( void ** params ) +{ + + test_ecp_tls_write_read_group( *( (int *) params[0] ) ); +} +void test_mbedtls_ecp_check_privkey( int id, char * key_hex, int ret ) +{ + mbedtls_ecp_group grp; + mbedtls_mpi d; + + mbedtls_ecp_group_init( &grp ); + mbedtls_mpi_init( &d ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &d, 16, key_hex ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_check_privkey( &grp, &d ) == ret ); + +exit: + mbedtls_ecp_group_free( &grp ); + mbedtls_mpi_free( &d ); +} + +void test_mbedtls_ecp_check_privkey_wrapper( void ** params ) +{ + + test_mbedtls_ecp_check_privkey( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ) ); +} +void test_mbedtls_ecp_check_pub_priv( int id_pub, char * Qx_pub, char * Qy_pub, + int id, char * d, char * Qx, char * Qy, + int ret ) +{ + mbedtls_ecp_keypair pub, prv; + + mbedtls_ecp_keypair_init( &pub ); + mbedtls_ecp_keypair_init( &prv ); + + if( id_pub != MBEDTLS_ECP_DP_NONE ) + TEST_ASSERT( mbedtls_ecp_group_load( &pub.grp, id_pub ) == 0 ); + TEST_ASSERT( mbedtls_ecp_point_read_string( &pub.Q, 16, Qx_pub, Qy_pub ) == 0 ); + + if( id != MBEDTLS_ECP_DP_NONE ) + TEST_ASSERT( mbedtls_ecp_group_load( &prv.grp, id ) == 0 ); + TEST_ASSERT( mbedtls_ecp_point_read_string( &prv.Q, 16, Qx, Qy ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &prv.d, 16, d ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_check_pub_priv( &pub, &prv ) == ret ); + +exit: + mbedtls_ecp_keypair_free( &pub ); + mbedtls_ecp_keypair_free( &prv ); +} + +void test_mbedtls_ecp_check_pub_priv_wrapper( void ** params ) +{ + + test_mbedtls_ecp_check_pub_priv( *( (int *) params[0] ), (char *) params[1], (char *) params[2], *( (int *) params[3] ), (char *) params[4], (char *) params[5], (char *) params[6], *( (int *) params[7] ) ); +} +void test_mbedtls_ecp_gen_keypair( int id ) +{ + mbedtls_ecp_group grp; + mbedtls_ecp_point Q; + mbedtls_mpi d; + mbedtls_test_rnd_pseudo_info rnd_info; + + mbedtls_ecp_group_init( &grp ); + mbedtls_ecp_point_init( &Q ); + mbedtls_mpi_init( &d ); + memset( &rnd_info, 0x00, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_gen_keypair( &grp, &d, &Q, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_check_pubkey( &grp, &Q ) == 0 ); + TEST_ASSERT( mbedtls_ecp_check_privkey( &grp, &d ) == 0 ); + +exit: + mbedtls_ecp_group_free( &grp ); + mbedtls_ecp_point_free( &Q ); + mbedtls_mpi_free( &d ); +} + +void test_mbedtls_ecp_gen_keypair_wrapper( void ** params ) +{ + + test_mbedtls_ecp_gen_keypair( *( (int *) params[0] ) ); +} +void test_mbedtls_ecp_gen_key( int id ) +{ + mbedtls_ecp_keypair key; + mbedtls_test_rnd_pseudo_info rnd_info; + + mbedtls_ecp_keypair_init( &key ); + memset( &rnd_info, 0x00, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + TEST_ASSERT( mbedtls_ecp_gen_key( id, &key, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info ) == 0 ); + + TEST_ASSERT( mbedtls_ecp_check_pubkey( &key.grp, &key.Q ) == 0 ); + TEST_ASSERT( mbedtls_ecp_check_privkey( &key.grp, &key.d ) == 0 ); + +exit: + mbedtls_ecp_keypair_free( &key ); +} + +void test_mbedtls_ecp_gen_key_wrapper( void ** params ) +{ + + test_mbedtls_ecp_gen_key( *( (int *) params[0] ) ); +} +void test_mbedtls_ecp_read_key( int grp_id, data_t* in_key, int expected, int canonical ) +{ + int ret = 0; + mbedtls_ecp_keypair key; + mbedtls_ecp_keypair key2; + + mbedtls_ecp_keypair_init( &key ); + mbedtls_ecp_keypair_init( &key2 ); + + ret = mbedtls_ecp_read_key( grp_id, &key, in_key->x, in_key->len ); + TEST_ASSERT( ret == expected ); + + if( expected == 0 ) + { + ret = mbedtls_ecp_check_privkey( &key.grp, &key.d ); + TEST_ASSERT( ret == 0 ); + + if( canonical ) + { + unsigned char buf[MBEDTLS_ECP_MAX_BYTES]; + + ret = mbedtls_ecp_write_key( &key, buf, in_key->len ); + TEST_ASSERT( ret == 0 ); + + ASSERT_COMPARE( in_key->x, in_key->len, + buf, in_key->len ); + } + else + { + unsigned char export1[MBEDTLS_ECP_MAX_BYTES]; + unsigned char export2[MBEDTLS_ECP_MAX_BYTES]; + + ret = mbedtls_ecp_write_key( &key, export1, in_key->len ); + TEST_ASSERT( ret == 0 ); + + ret = mbedtls_ecp_read_key( grp_id, &key2, export1, in_key->len ); + TEST_ASSERT( ret == expected ); + + ret = mbedtls_ecp_write_key( &key2, export2, in_key->len ); + TEST_ASSERT( ret == 0 ); + + ASSERT_COMPARE( export1, in_key->len, + export2, in_key->len ); + } + } + +exit: + mbedtls_ecp_keypair_free( &key ); + mbedtls_ecp_keypair_free( &key2 ); +} + +void test_mbedtls_ecp_read_key_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_mbedtls_ecp_read_key( *( (int *) params[0] ), &data1, *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_ecp_selftest( ) +{ + TEST_ASSERT( mbedtls_ecp_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_ecp_selftest_wrapper( void ** params ) +{ + (void)params; + + test_ecp_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_ECP_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_ECP_C) + + case 0: + { + *out_value = MBEDTLS_ECP_DP_BP512R1; + } + break; + case 1: + { + *out_value = MBEDTLS_ECP_DP_BP384R1; + } + break; + case 2: + { + *out_value = MBEDTLS_ECP_DP_BP256R1; + } + break; + case 3: + { + *out_value = MBEDTLS_ECP_DP_SECP521R1; + } + break; + case 4: + { + *out_value = MBEDTLS_ECP_DP_SECP384R1; + } + break; + case 5: + { + *out_value = MBEDTLS_ECP_DP_SECP256R1; + } + break; + case 6: + { + *out_value = MBEDTLS_ECP_DP_SECP224R1; + } + break; + case 7: + { + *out_value = MBEDTLS_ECP_DP_SECP192R1; + } + break; + case 8: + { + *out_value = MBEDTLS_ECP_DP_CURVE25519; + } + break; + case 9: + { + *out_value = MBEDTLS_ERR_ECP_INVALID_KEY; + } + break; + case 10: + { + *out_value = MBEDTLS_ECP_DP_SECP224K1; + } + break; + case 11: + { + *out_value = MBEDTLS_ECP_PF_UNCOMPRESSED; + } + break; + case 12: + { + *out_value = MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL; + } + break; + case 13: + { + *out_value = MBEDTLS_ECP_PF_COMPRESSED; + } + break; + case 14: + { + *out_value = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; + } + break; + case 15: + { + *out_value = MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE; + } + break; + case 16: + { + *out_value = MBEDTLS_ECP_DP_NONE; + } + break; + case 17: + { + *out_value = MBEDTLS_ECP_DP_CURVE448; + } + break; + case 18: + { + *out_value = INT_MAX; + } + break; + case 19: + { + *out_value = MBEDTLS_ERR_MPI_NOT_ACCEPTABLE; + } + break; + case 20: + { + *out_value = MBEDTLS_ECP_DP_SECP192K1; + } + break; + case 21: + { + *out_value = MBEDTLS_ECP_DP_SECP256K1; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_ECP_C) + + case 0: + { +#if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 5: + { +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 6: + { +#if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 7: + { +#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 8: + { +#if defined(MBEDTLS_ECP_DP_CURVE25519_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 9: + { +#if defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 10: + { +#if !defined(MBEDTLS_ECP_DP_CURVE25519_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 11: + { +#if defined(MBEDTLS_ECP_DP_CURVE448_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 12: + { +#if defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 13: + { +#if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_ECP_C) + test_ecp_valid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_ECP_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_ecp_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_ECP_C) + test_mbedtls_ecp_curve_info_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_ECP_C) + test_ecp_check_pub_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_ECP_C) && defined(MBEDTLS_ECP_RESTARTABLE) + test_ecp_test_vect_restart_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_ECP_C) && defined(MBEDTLS_ECP_RESTARTABLE) + test_ecp_muladd_restart_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_ECP_C) + test_ecp_test_vect_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_ECP_C) + test_ecp_test_vec_x_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_ECP_C) + test_ecp_test_mul_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_ECP_C) + test_ecp_test_mul_rng_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_ECP_C) + test_ecp_fast_mod_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_ECP_C) + test_ecp_write_binary_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_ECP_C) + test_ecp_read_binary_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_ECP_C) + test_mbedtls_ecp_tls_read_point_wrapper, +#else + NULL, +#endif +/* Function Id: 14 */ + +#if defined(MBEDTLS_ECP_C) + test_ecp_tls_write_read_point_wrapper, +#else + NULL, +#endif +/* Function Id: 15 */ + +#if defined(MBEDTLS_ECP_C) + test_mbedtls_ecp_tls_read_group_wrapper, +#else + NULL, +#endif +/* Function Id: 16 */ + +#if defined(MBEDTLS_ECP_C) + test_ecp_tls_write_read_group_wrapper, +#else + NULL, +#endif +/* Function Id: 17 */ + +#if defined(MBEDTLS_ECP_C) + test_mbedtls_ecp_check_privkey_wrapper, +#else + NULL, +#endif +/* Function Id: 18 */ + +#if defined(MBEDTLS_ECP_C) + test_mbedtls_ecp_check_pub_priv_wrapper, +#else + NULL, +#endif +/* Function Id: 19 */ + +#if defined(MBEDTLS_ECP_C) + test_mbedtls_ecp_gen_keypair_wrapper, +#else + NULL, +#endif +/* Function Id: 20 */ + +#if defined(MBEDTLS_ECP_C) + test_mbedtls_ecp_gen_key_wrapper, +#else + NULL, +#endif +/* Function Id: 21 */ + +#if defined(MBEDTLS_ECP_C) + test_mbedtls_ecp_read_key_wrapper, +#else + NULL, +#endif +/* Function Id: 22 */ + +#if defined(MBEDTLS_ECP_C) && defined(MBEDTLS_SELF_TEST) + test_ecp_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_ecp.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_ecp.datax b/third_party/mbedtls/test/test_suite_ecp.datax new file mode 100644 index 000000000..cb1a2cd0a --- /dev/null +++ b/third_party/mbedtls/test/test_suite_ecp.datax @@ -0,0 +1,511 @@ +ECP valid params +0 + +ECP invalid params +1 + +ECP curve info #1 +depends_on:0 +2:exp:0:int:28:int:512:char*:"brainpoolP512r1" + +ECP curve info #2 +depends_on:1 +2:exp:1:int:27:int:384:char*:"brainpoolP384r1" + +ECP curve info #3 +depends_on:2 +2:exp:2:int:26:int:256:char*:"brainpoolP256r1" + +ECP curve info #4 +depends_on:3 +2:exp:3:int:25:int:521:char*:"secp521r1" + +ECP curve info #5 +depends_on:4 +2:exp:4:int:24:int:384:char*:"secp384r1" + +ECP curve info #6 +depends_on:5 +2:exp:5:int:23:int:256:char*:"secp256r1" + +ECP curve info #7 +depends_on:6 +2:exp:6:int:21:int:224:char*:"secp224r1" + +ECP curve info #8 +depends_on:7 +2:exp:7:int:19:int:192:char*:"secp192r1" + +ECP check pubkey Montgomery #1 (too big) +depends_on:8 +3:exp:8:char*:"010000000000000000000000000000000000000000000000000000000000000000":char*:"0":char*:"1":exp:9 + +ECP check pubkey Montgomery #2 (biggest) +depends_on:8 +3:exp:8:char*:"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF":char*:"0":char*:"1":int:0 + +ECP check pubkey Koblitz #1 (point not on curve) +depends_on:9 +3:exp:10:char*:"E2000000000000BB3A13D43B323337383935321F0603551D":char*:"100101FF040830060101FF02010A30220603551D0E041B04636FC0C0":char*:"1":exp:9 + +ECP check pubkey Koblitz #2 (coordinate not affine) +depends_on:9 +3:exp:10:char*:"E2000000000000BB3A13D43B323337383935321F0603551D":char*:"100101FF040830060101FF02010A30220603551D0E041B04636FC0C0":char*:"101":exp:9 + +ECP write binary #1 (zero, uncompressed, buffer just fits) +depends_on:7 +11:exp:7:char*:"01":char*:"01":char*:"00":exp:11:hex:"00":int:1:int:0 + +ECP write binary #2 (zero, buffer too small) +depends_on:7 +11:exp:7:char*:"01":char*:"01":char*:"00":exp:11:hex:"00":int:0:exp:12 + +ECP write binary #3 (non-zero, uncompressed, buffer just fits) +depends_on:7 +11:exp:7:char*:"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":char*:"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":char*:"01":exp:11:hex:"0448d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc99336ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":int:49:int:0 + +ECP write binary #4 (non-zero, uncompressed, buffer too small) +depends_on:7 +11:exp:7:char*:"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":char*:"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":char*:"01":exp:11:hex:"0448d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc99336ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":int:48:exp:12 + +ECP write binary #5 (zero, compressed, buffer just fits) +depends_on:7 +11:exp:7:char*:"01":char*:"01":char*:"00":exp:13:hex:"00":int:1:int:0 + +ECP write binary #6 (zero, buffer too small) +depends_on:7 +11:exp:7:char*:"01":char*:"01":char*:"00":exp:13:hex:"00":int:0:exp:12 + +ECP write binary #7 (even, compressed, buffer just fits) +depends_on:7 +11:exp:7:char*:"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":char*:"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":char*:"01":exp:13:hex:"0248d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":int:25:int:0 + +ECP write binary #8 (even, compressed, buffer too small) +depends_on:7 +11:exp:7:char*:"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":char*:"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":char*:"01":exp:13:hex:"0248d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":int:24:exp:12 + +ECP write binary #9 (odd, compressed, buffer just fits) +depends_on:7 +11:exp:7:char*:"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":char*:"93112b28345b7d1d7799611e49bea9d8290cb2d7afe1f9f3":char*:"01":exp:13:hex:"0348d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":int:25:int:0 + +ECP write binary #10 (Montgomery, buffer just fits) +depends_on:8 +11:exp:8:char*:"11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff":char*:"0":char*:"1":exp:13:hex:"ffeeddccbbaa00998877665544332211ffeeddccbbaa00998877665544332211":int:32:int:0 + +ECP write binary #11 (Montgomery, buffer too small) +depends_on:8 +11:exp:8:char*:"11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff":char*:"0":char*:"1":exp:13:hex:"ffeeddccbbaa00998877665544332211ffeeddccbbaa00998877665544332211":int:31:exp:12 + +ECP read binary #1 (zero, invalid ilen) +depends_on:7 +12:exp:7:hex:"0000":char*:"01":char*:"01":char*:"00":exp:14 + +ECP read binary #2 (zero, invalid first byte) +depends_on:7 +12:exp:7:hex:"01":char*:"01":char*:"01":char*:"00":exp:15 + +ECP read binary #3 (zero, OK) +depends_on:7 +12:exp:7:hex:"00":char*:"01":char*:"01":char*:"00":int:0 + +ECP read binary #4 (non-zero, invalid ilen) +depends_on:7 +12:exp:7:hex:"04001122":char*:"01":char*:"01":char*:"00":exp:14 + +ECP read binary #5 (non-zero, invalid first byte) +depends_on:7 +12:exp:7:hex:"0548d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc99336ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":char*:"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":char*:"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":char*:"01":exp:15 + +ECP read binary #6 (non-zero, OK) +depends_on:7 +12:exp:7:hex:"0448d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc99336ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":char*:"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":char*:"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":char*:"01":int:0 + +ECP read binary #7 (Curve25519, OK) +depends_on:8 +12:exp:8:hex:"8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a":char*:"6a4e9baa8ea9a4ebf41a38260d3abf0d5af73eb4dc7d8b7454a7308909f02085":char*:"0":char*:"1":int:0 + +ECP read binary #8 (Curve25519, masked first bit) +depends_on:8 +12:exp:8:hex:"8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4efa":char*:"7a4e9baa8ea9a4ebf41a38260d3abf0d5af73eb4dc7d8b7454a7308909f02085":char*:"0":char*:"1":int:0 + +ECP read binary #9 (Curve25519, too short) +depends_on:8 +12:exp:8:hex:"20f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a":char*:"6a4e9baa8ea9a4ebf41a38260d3abf0d5af73eb4dc7d8b7454a7308909f020":char*:"0":char*:"1":exp:14 + +ECP read binary #10 (Curve25519, non-canonical) +depends_on:8 +12:exp:8:hex:"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f":char*:"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff":char*:"0":char*:"1":int:0 + +ECP read binary #11 (Curve25519, masked non-canonical) +depends_on:8 +12:exp:8:hex:"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff":char*:"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff":char*:"0":char*:"1":int:0 + +ECP read binary #12 (Curve25519, too long) +depends_on:8 +12:exp:8:hex:"8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a00":char*:"6a4e9baa8ea9a4ebf41a38260d3abf0d5af73eb4dc7d8b7454a7308909f02085":char*:"0":char*:"1":exp:14 + +ECP tls read point #1 (zero, invalid length byte) +depends_on:7 +13:exp:7:hex:"0200":char*:"01":char*:"01":char*:"00":exp:14 + +ECP tls read point #2 (zero, OK) +depends_on:7 +13:exp:7:hex:"0100":char*:"01":char*:"01":char*:"00":int:0 + +ECP tls read point #3 (non-zero, invalid length byte) +depends_on:7 +13:exp:7:hex:"300448d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc99336ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":char*:"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":char*:"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":char*:"01":exp:14 + +ECP tls read point #4 (non-zero, OK) +depends_on:7 +13:exp:7:hex:"310448d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc99336ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":char*:"48d8082a3a1e3112bc03a8ef2f6d40d0a77a6f8e00cc9933":char*:"6ceed4d7cba482e288669ee1b6415626d6f34d28501e060c":char*:"01":int:0 + +ECP tls write-read point #1 +depends_on:7 +14:exp:7 + +ECP tls write-read point #2 +depends_on:3 +14:exp:3 + +ECP tls read group #1 (record too short) +15:hex:"0313":exp:14:int:0:int:0 + +ECP tls read group #2 (bad curve_type) +15:hex:"010013":exp:14:int:0:int:0 + +ECP tls read group #3 (unknown curve) +15:hex:"030010":exp:15:int:0:int:0 + +ECP tls read group #4 (OK, buffer just fits) +depends_on:5 +15:hex:"030017":int:0:int:256:int:3 + +ECP tls read group #5 (OK, buffer continues) +depends_on:4 +15:hex:"0300180000":int:0:int:384:int:3 + +ECP tls write-read group #1 +depends_on:7 +16:exp:7 + +ECP tls write-read group #2 +depends_on:3 +16:exp:3 + +ECP check privkey #1 (short weierstrass, too small) +depends_on:7 +17:exp:7:char*:"00":exp:9 + +ECP check privkey #2 (short weierstrass, smallest) +depends_on:7 +17:exp:7:char*:"01":int:0 + +ECP check privkey #3 (short weierstrass, biggest) +depends_on:7 +17:exp:7:char*:"FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22830":int:0 + +ECP check privkey #4 (short weierstrass, too big) +depends_on:7 +17:exp:7:char*:"FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831":exp:9 + +ECP check privkey #5 (montgomery, too big) +depends_on:8 +17:exp:8:char*:"C000000000000000000000000000000000000000000000000000000000000000":exp:9 + +ECP check privkey #6 (montgomery, not big enough) +depends_on:8 +17:exp:8:char*:"3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0":exp:9 + +ECP check privkey #7 (montgomery, msb OK) +depends_on:8 +17:exp:8:char*:"4000000000000000000000000000000000000000000000000000000000000000":int:0 + +ECP check privkey #8 (montgomery, bit 0 set) +depends_on:8 +17:exp:8:char*:"4000000000000000000000000000000000000000000000000000000000000001":exp:9 + +ECP check privkey #9 (montgomery, bit 1 set) +depends_on:8 +17:exp:8:char*:"4000000000000000000000000000000000000000000000000000000000000002":exp:9 + +ECP check privkey #10 (montgomery, bit 2 set) +depends_on:8 +17:exp:8:char*:"4000000000000000000000000000000000000000000000000000000000000004":exp:9 + +ECP check privkey #11 (montgomery, OK) +depends_on:8 +17:exp:8:char*:"7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8":int:0 + +ECP check public-private #1 (OK) +depends_on:5 +18:exp:5:char*:"37cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f76822596292":char*:"4ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":exp:5:char*:"00f12a1320760270a83cbffd53f6031ef76a5d86c8a204f2c30ca9ebf51f0f0ea7":char*:"37cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f76822596292":char*:"4ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":int:0 + +ECP check public-private #2 (group none) +18:exp:16:char*:"37cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f76822596292":char*:"4ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":exp:16:char*:"00f12a1320760270a83cbffd53f6031ef76a5d86c8a204f2c30ca9ebf51f0f0ea7":char*:"37cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f76822596292":char*:"4ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":exp:14 + +ECP check public-private #3 (group mismatch) +depends_on:5:4 +18:exp:4:char*:"37cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f76822596292":char*:"4ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":exp:5:char*:"00f12a1320760270a83cbffd53f6031ef76a5d86c8a204f2c30ca9ebf51f0f0ea7":char*:"37cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f76822596292":char*:"4ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":exp:14 + +ECP check public-private #4 (Qx mismatch) +depends_on:5 +18:exp:5:char*:"37cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f76822596293":char*:"4ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":exp:5:char*:"00f12a1320760270a83cbffd53f6031ef76a5d86c8a204f2c30ca9ebf51f0f0ea7":char*:"37cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f76822596292":char*:"4ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":exp:14 + +ECP check public-private #5 (Qy mismatch) +depends_on:5 +18:exp:5:char*:"37cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f76822596292":char*:"4ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edfe":exp:5:char*:"00f12a1320760270a83cbffd53f6031ef76a5d86c8a204f2c30ca9ebf51f0f0ea7":char*:"37cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f76822596292":char*:"4ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":exp:14 + +ECP check public-private #6 (wrong Qx) +depends_on:5 +18:exp:5:char*:"37cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f76822596293":char*:"4ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":exp:5:char*:"00f12a1320760270a83cbffd53f6031ef76a5d86c8a204f2c30ca9ebf51f0f0ea7":char*:"37cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f76822596293":char*:"4ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":exp:14 + +ECP check public-private #7 (wrong Qy) +depends_on:5 +18:exp:5:char*:"37cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f76822596292":char*:"4ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edfe":exp:5:char*:"00f12a1320760270a83cbffd53f6031ef76a5d86c8a204f2c30ca9ebf51f0f0ea7":char*:"37cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f76822596292":char*:"4ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edfe":exp:14 + +ECP gen keypair [#1] +depends_on:7 +19:exp:7 + +ECP gen keypair [#2] +depends_on:8 +19:exp:8 + +ECP gen keypair wrapper +depends_on:7 +20:exp:7 + +ECP read key #1 (short weierstrass, too small) +depends_on:7 +21:exp:7:hex:"00":exp:9:int:0 + +ECP read key #2 (short weierstrass, smallest) +depends_on:7 +21:exp:7:hex:"01":int:0:int:1 + +ECP read key #3 (short weierstrass, biggest) +depends_on:7 +21:exp:7:hex:"FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22830":int:0:int:1 + +ECP read key #4 (short weierstrass, too big) +depends_on:7 +21:exp:7:hex:"FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831":exp:9:int:0 + +ECP read key #5 (Curve25519, most significant bit set) +depends_on:8 +21:exp:8:hex:"00000000000000000000000000000000000000000000000000000000000000C0":int:0:int:0 + +ECP read key #6 (Curve25519, second most significant bit unset) +depends_on:8 +21:exp:8:hex:"F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F":int:0:int:0 + +ECP read key #7 (Curve25519, msb OK) +depends_on:8 +21:exp:8:hex:"0000000000000000000000000000000000000000000000000000000000000040":int:0:int:1 + +ECP read key #8 (Curve25519, bit 0 set) +depends_on:8 +21:exp:8:hex:"0100000000000000000000000000000000000000000000000000000000000040":int:0:int:0 + +ECP read key #9 (Curve25519, bit 1 set) +depends_on:8 +21:exp:8:hex:"0200000000000000000000000000000000000000000000000000000000000040":int:0:int:0 + +ECP read key #10 (Curve25519, bit 2 set) +depends_on:8 +21:exp:8:hex:"0400000000000000000000000000000000000000000000000000000000000040":int:0:int:0 + +ECP read key #11 (Curve25519, OK) +depends_on:8 +21:exp:8:hex:"F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F":int:0:int:1 + +ECP read key #12 (Curve25519, too long) +depends_on:8 +21:exp:8:hex:"00000000000000000000000000000000000000000000000000000000000000000C":exp:9:int:0 + +ECP read key #13 (Curve25519, not long enough) +depends_on:8 +21:exp:8:hex:"F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F":exp:9:int:0 + +ECP read key #14 (Curve448, not supported) +21:exp:17:hex:"FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF":exp:15:int:0 + +ECP read key #15 (Curve25519, not supported) +depends_on:10 +21:exp:8:hex:"F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F":exp:15:int:0 + +ECP read key #15 (invalid curve) +21:exp:18:hex:"F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F":exp:15:int:0 + +ECP read key #16 (Curve25519 RFC, OK) +depends_on:8 +21:exp:8:hex:"70076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c6a":int:0:int:1 + +ECP mod p192 small (more than 192 bits, less limbs than 2 * 192 bits) +depends_on:7 +10:exp:7:char*:"0100000000000103010000000000010201000000000001010100000000000100" + +ECP mod p192 readable +depends_on:7 +10:exp:7:char*:"010000000000010501000000000001040100000000000103010000000000010201000000000001010100000000000100" + +ECP mod p192 readable with carry +depends_on:7 +10:exp:7:char*:"FF00000000010500FF00000000010400FF00000000010300FF00000000010200FF00000000010100FF00000000010000" + +ECP mod p192 random +depends_on:7 +10:exp:7:char*:"36CF96B45D706A0954D89E52CE5F38517A2270E0175849B6F3740151D238CCABEF921437E475881D83BB69E4AA258EBD" + +ECP mod p192 (from a past failure case) +depends_on:7 +10:exp:7:char*:"1AC2D6F96A2A425E9DD1776DD8368D4BBC86BF4964E79FEA713583BF948BBEFF0939F96FB19EC48C585BDA6A2D35C750" + +ECP mod p224 readable without carry +depends_on:6 +10:exp:6:char*:"0000000D0000000C0000000B0000000A0000000900000008000000070000FF060000FF050000FF040000FF03000FF0020000FF010000FF00" + +ECP mod p224 readable with negative carry +depends_on:6 +10:exp:6:char*:"0000000D0000000C0000000B0000000A00000009000000080000000700000006000000050000000400000003000000020000000100000000" + +ECP mod p224 readable with positive carry +depends_on:6 +10:exp:6:char*:"0000000D0000000C0000000BFFFFFF0AFFFFFF09FFFFFF08FFFFFF070000FF060000FF050000FF040000FF03000FF0020000FF010000FF00" + +ECP mod p224 readable with final negative carry +depends_on:6 +10:exp:6:char*:"FF00000D0000000C0000000B0000000A00000009000000080000000700000006000000050000000400000003000000020000000100000000" + +ECP mod p521 very small +depends_on:3 +10:exp:3:char*:"01" + +ECP mod p521 small (522 bits) +depends_on:3 +10:exp:3:char*:"030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + +ECP mod p521 readable +depends_on:3 +10:exp:3:char*:"03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + +ECP mod p521 readable with carry +depends_on:3 +10:exp:3:char*:"03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" + +ECP test vectors secp192r1 rfc 5114 +depends_on:7 +6:exp:7:char*:"323FA3169D8E9C6593F59476BC142000AB5BE0E249C43426":char*:"CD46489ECFD6C105E7B3D32566E2B122E249ABAADD870612":char*:"68887B4877DF51DD4DC3D6FD11F0A26F8FD3844317916E9A":char*:"631F95BB4A67632C9C476EEE9AB695AB240A0499307FCF62":char*:"519A121680E0045466BA21DF2EEE47F5973B500577EF13D5":char*:"FF613AB4D64CEE3A20875BDB10F953F6B30CA072C60AA57F":char*:"AD420182633F8526BFE954ACDA376F05E5FF4F837F54FEBE":char*:"4371545ED772A59741D0EDA32C671112B7FDDD51461FCF32" + +ECP test vectors secp224r1 rfc 5114 +depends_on:6 +6:exp:6:char*:"B558EB6C288DA707BBB4F8FBAE2AB9E9CB62E3BC5C7573E22E26D37F":char*:"49DFEF309F81488C304CFF5AB3EE5A2154367DC7833150E0A51F3EEB":char*:"4F2B5EE45762C4F654C1A0C67F54CF88B016B51BCE3D7C228D57ADB4":char*:"AC3B1ADD3D9770E6F6A708EE9F3B8E0AB3B480E9F27F85C88B5E6D18":char*:"6B3AC96A8D0CDE6A5599BE8032EDF10C162D0A8AD219506DCD42A207":char*:"D491BE99C213A7D1CA3706DEBFE305F361AFCBB33E2609C8B1618AD5":char*:"52272F50F46F4EDC9151569092F46DF2D96ECC3B6DC1714A4EA949FA":char*:"5F30C6AA36DDC403C0ACB712BB88F1763C3046F6D919BD9C524322BF" + +ECP test vectors secp256r1 rfc 5114 +depends_on:5 +6:exp:5:char*:"814264145F2F56F2E96A8E337A1284993FAF432A5ABCE59E867B7291D507A3AF":char*:"2AF502F3BE8952F2C9B5A8D4160D09E97165BE50BC42AE4A5E8D3B4BA83AEB15":char*:"EB0FAF4CA986C4D38681A0F9872D79D56795BD4BFF6E6DE3C0F5015ECE5EFD85":char*:"2CE1788EC197E096DB95A200CC0AB26A19CE6BCCAD562B8EEE1B593761CF7F41":char*:"B120DE4AA36492795346E8DE6C2C8646AE06AAEA279FA775B3AB0715F6CE51B0":char*:"9F1B7EECE20D7B5ED8EC685FA3F071D83727027092A8411385C34DDE5708B2B6":char*:"DD0F5396219D1EA393310412D19A08F1F5811E9DC8EC8EEA7F80D21C820C2788":char*:"0357DCCD4C804D0D8D33AA42B848834AA5605F9AB0D37239A115BBB647936F50" + +ECP test vectors secp384r1 rfc 5114 +depends_on:4 +6:exp:4:char*:"D27335EA71664AF244DD14E9FD1260715DFD8A7965571C48D709EE7A7962A156D706A90CBCB5DF2986F05FEADB9376F1":char*:"793148F1787634D5DA4C6D9074417D05E057AB62F82054D10EE6B0403D6279547E6A8EA9D1FD77427D016FE27A8B8C66":char*:"C6C41294331D23E6F480F4FB4CD40504C947392E94F4C3F06B8F398BB29E42368F7A685923DE3B67BACED214A1A1D128":char*:"52D1791FDB4B70F89C0F00D456C2F7023B6125262C36A7DF1F80231121CCE3D39BE52E00C194A4132C4A6C768BCD94D2":char*:"5CD42AB9C41B5347F74B8D4EFB708B3D5B36DB65915359B44ABC17647B6B9999789D72A84865AE2F223F12B5A1ABC120":char*:"E171458FEAA939AAA3A8BFAC46B404BD8F6D5B348C0FA4D80CECA16356CA933240BDE8723415A8ECE035B0EDF36755DE":char*:"5EA1FC4AF7256D2055981B110575E0A8CAE53160137D904C59D926EB1B8456E427AA8A4540884C37DE159A58028ABC0E":char*:"0CC59E4B046414A81C8A3BDFDCA92526C48769DD8D3127CAA99B3632D1913942DE362EAFAA962379374D9F3F066841CA" + +ECP test vectors secp521r1 rfc 5114 +depends_on:3 +6:exp:3:char*:"0113F82DA825735E3D97276683B2B74277BAD27335EA71664AF2430CC4F33459B9669EE78B3FFB9B8683015D344DCBFEF6FB9AF4C6C470BE254516CD3C1A1FB47362":char*:"01EBB34DD75721ABF8ADC9DBED17889CBB9765D90A7C60F2CEF007BB0F2B26E14881FD4442E689D61CB2DD046EE30E3FFD20F9A45BBDF6413D583A2DBF59924FD35C":char*:"00F6B632D194C0388E22D8437E558C552AE195ADFD153F92D74908351B2F8C4EDA94EDB0916D1B53C020B5EECAED1A5FC38A233E4830587BB2EE3489B3B42A5A86A4":char*:"00CEE3480D8645A17D249F2776D28BAE616952D1791FDB4B70F7C3378732AA1B22928448BCD1DC2496D435B01048066EBE4F72903C361B1A9DC1193DC2C9D0891B96":char*:"010EBFAFC6E85E08D24BFFFCC1A4511DB0E634BEEB1B6DEC8C5939AE44766201AF6200430BA97C8AC6A0E9F08B33CE7E9FEEB5BA4EE5E0D81510C24295B8A08D0235":char*:"00A4A6EC300DF9E257B0372B5E7ABFEF093436719A77887EBB0B18CF8099B9F4212B6E30A1419C18E029D36863CC9D448F4DBA4D2A0E60711BE572915FBD4FEF2695":char*:"00CDEA89621CFA46B132F9E4CFE2261CDE2D4368EB5656634C7CC98C7A00CDE54ED1866A0DD3E6126C9D2F845DAFF82CEB1DA08F5D87521BB0EBECA77911169C20CC":char*:"00F9A71641029B7FC1A808AD07CD4861E868614B865AFBECAB1F2BD4D8B55EBCB5E3A53143CEB2C511B1AE0AF5AC827F60F2FD872565AC5CA0A164038FE980A7E4BD" + +ECP test vectors brainpoolP256r1 rfc 7027 +depends_on:2 +6:exp:2:char*:"81DB1EE100150FF2EA338D708271BE38300CB54241D79950F77B063039804F1D":char*:"44106E913F92BC02A1705D9953A8414DB95E1AAA49E81D9E85F929A8E3100BE5":char*:"8AB4846F11CACCB73CE49CBDD120F5A900A69FD32C272223F789EF10EB089BDC":char*:"55E40BC41E37E3E2AD25C3C6654511FFA8474A91A0032087593852D3E7D76BD3":char*:"8D2D688C6CF93E1160AD04CC4429117DC2C41825E1E9FCA0ADDD34E6F1B39F7B":char*:"990C57520812BE512641E47034832106BC7D3E8DD0E4C7F1136D7006547CEC6A":char*:"89AFC39D41D3B327814B80940B042590F96556EC91E6AE7939BCE31F3A18BF2B":char*:"49C27868F4ECA2179BFD7D59B1E3BF34C1DBDE61AE12931648F43E59632504DE" + +ECP test vectors brainpoolP384r1 rfc 7027 +depends_on:1 +6:exp:1:char*:"1E20F5E048A5886F1F157C74E91BDE2B98C8B52D58E5003D57053FC4B0BD65D6F15EB5D1EE1610DF870795143627D042":char*:"68B665DD91C195800650CDD363C625F4E742E8134667B767B1B476793588F885AB698C852D4A6E77A252D6380FCAF068":char*:"55BC91A39C9EC01DEE36017B7D673A931236D2F1F5C83942D049E3FA20607493E0D038FF2FD30C2AB67D15C85F7FAA59":char*:"032640BC6003C59260F7250C3DB58CE647F98E1260ACCE4ACDA3DD869F74E01F8BA5E0324309DB6A9831497ABAC96670":char*:"4D44326F269A597A5B58BBA565DA5556ED7FD9A8A9EB76C25F46DB69D19DC8CE6AD18E404B15738B2086DF37E71D1EB4":char*:"62D692136DE56CBE93BF5FA3188EF58BC8A3A0EC6C1E151A21038A42E9185329B5B275903D192F8D4E1F32FE9CC78C48":char*:"0BD9D3A7EA0B3D519D09D8E48D0785FB744A6B355E6304BC51C229FBBCE239BBADF6403715C35D4FB2A5444F575D4F42":char*:"0DF213417EBE4D8E40A5F76F66C56470C489A3478D146DECF6DF0D94BAE9E598157290F8756066975F1DB34B2324B7BD" + +ECP test vectors brainpoolP512r1 rfc 7027 +depends_on:0 +6:exp:0:char*:"16302FF0DBBB5A8D733DAB7141C1B45ACBC8715939677F6A56850A38BD87BD59B09E80279609FF333EB9D4C061231FB26F92EEB04982A5F1D1764CAD57665422":char*:"0A420517E406AAC0ACDCE90FCD71487718D3B953EFD7FBEC5F7F27E28C6149999397E91E029E06457DB2D3E640668B392C2A7E737A7F0BF04436D11640FD09FD":char*:"72E6882E8DB28AAD36237CD25D580DB23783961C8DC52DFA2EC138AD472A0FCEF3887CF62B623B2A87DE5C588301EA3E5FC269B373B60724F5E82A6AD147FDE7":char*:"230E18E1BCC88A362FA54E4EA3902009292F7F8033624FD471B5D8ACE49D12CFABBC19963DAB8E2F1EBA00BFFB29E4D72D13F2224562F405CB80503666B25429":char*:"9D45F66DE5D67E2E6DB6E93A59CE0BB48106097FF78A081DE781CDB31FCE8CCBAAEA8DD4320C4119F1E9CD437A2EAB3731FA9668AB268D871DEDA55A5473199F":char*:"2FDC313095BCDD5FB3A91636F07A959C8E86B5636A1E930E8396049CB481961D365CC11453A06C719835475B12CB52FC3C383BCE35E27EF194512B71876285FA":char*:"A7927098655F1F9976FA50A9D566865DC530331846381C87256BAF3226244B76D36403C024D7BBF0AA0803EAFF405D3D24F11A9B5C0BEF679FE1454B21C4CD1F":char*:"7DB71C3DEF63212841C463E881BDCF055523BD368240E6C3143BD8DEF8B3B3223B95E0F53082FF5E412F4222537A43DF1C6D25729DDB51620A832BE6A26680A2" + +ECP test vectors Curve25519 +depends_on:8 +7:exp:8:char*:"5AC99F33632E5A768DE7E81BF854C27C46E3FBF2ABBACD29EC4AFF517369C660":char*:"057E23EA9F1CBE8A27168F6E696A791DE61DD3AF7ACD4EEACC6E7BA514FDA863":char*:"47DC3D214174820E1154B49BC6CDB2ABD45EE95817055D255AA35831B70D3260":char*:"6EB89DA91989AE37C7EAC7618D9E5C4951DBA1D73C285AE1CD26A855020EEF04":char*:"61450CD98E36016B58776A897A9F0AEF738B99F09468B8D6B8511184D53494AB" + +ECP point multiplication Curve25519 (normalized) #1 +depends_on:8 +8:exp:8:hex:"5AC99F33632E5A768DE7E81BF854C27C46E3FBF2ABBACD29EC4AFF517369C660":hex:"09":hex:"00":hex:"01":hex:"057E23EA9F1CBE8A27168F6E696A791DE61DD3AF7ACD4EEACC6E7BA514FDA863":hex:"00":hex:"01":int:0 + +ECP point multiplication Curve25519 (not normalized) #2 +depends_on:8 +8:exp:8:hex:"5AC99F33632E5A768DE7E81BF854C27C46E3FBF2ABBACD29EC4AFF517369C660":hex:"1B":hex:"00":hex:"03":hex:"057E23EA9F1CBE8A27168F6E696A791DE61DD3AF7ACD4EEACC6E7BA514FDA863":hex:"00":hex:"01":exp:9 + +ECP point multiplication Curve25519 (element of order 2: origin) #3 +depends_on:8 +8:exp:8:hex:"5AC99F33632E5A768DE7E81BF854C27C46E3FBF2ABBACD29EC4AFF517369C660":hex:"00":hex:"00":hex:"01":hex:"00":hex:"01":hex:"00":exp:19 + +ECP point multiplication Curve25519 (element of order 4: 1) #4 +depends_on:8 +8:exp:8:hex:"5AC99F33632E5A768DE7E81BF854C27C46E3FBF2ABBACD29EC4AFF517369C660":hex:"01":hex:"00":hex:"01":hex:"00":hex:"01":hex:"00":exp:19 + +ECP point multiplication Curve25519 (element of order 8) #5 +depends_on:8 +8:exp:8:hex:"5AC99F33632E5A768DE7E81BF854C27C46E3FBF2ABBACD29EC4AFF517369C660":hex:"B8495F16056286FDB1329CEB8D09DA6AC49FF1FAE35616AEB8413B7C7AEBE0":hex:"00":hex:"01":hex:"00":hex:"01":hex:"00":exp:19 + +ECP point multiplication rng fail secp256r1 +depends_on:5 +9:exp:5:hex:"814264145F2F56F2E96A8E337A1284993FAF432A5ABCE59E867B7291D507A3AF" + +ECP point multiplication rng fail Curve25519 +depends_on:8 +9:exp:8:hex:"5AC99F33632E5A768DE7E81BF854C27C46E3FBF2ABBACD29EC4AFF517369C660" + +ECP test vectors Curve448 (RFC 7748 6.2, after decodeUCoordinate) +depends_on:11 +7:exp:17:char*:"eb7298a5c0d8c29a1dab27f1a6826300917389449741a974f5bac9d98dc298d46555bce8bae89eeed400584bb046cf75579f51d125498f98":char*:"a01fc432e5807f17530d1288da125b0cd453d941726436c8bbd9c5222c3da7fa639ce03db8d23b274a0721a1aed5227de6e3b731ccf7089b":char*:"ad997351b6106f36b0d1091b929c4c37213e0d2b97e85ebb20c127691d0dad8f1d8175b0723745e639a3cb7044290b99e0e2a0c27a6a301c":char*:"0936f37bc6c1bd07ae3dec7ab5dc06a73ca13242fb343efc72b9d82730b445f3d4b0bd077162a46dcfec6f9b590bfcbcf520cdb029a8b73e":char*:"9d874a5137509a449ad5853040241c5236395435c36424fd560b0cb62b281d285275a740ce32a22dd1740f4aa9161cec95ccc61a18f4ff07" + +ECP test vectors secp192k1 +depends_on:12 +6:exp:20:char*:"D1E13A359F6E0F0698791938E6D60246030AE4B0D8D4E9DE":char*:"281BCA982F187ED30AD5E088461EBE0A5FADBB682546DF79":char*:"3F68A8E9441FB93A4DD48CB70B504FCC9AA01902EF5BE0F3":char*:"BE97C5D2A1A94D081E3FACE53E65A27108B7467BDF58DE43":char*:"5EB35E922CD693F7947124F5920022C4891C04F6A8B8DCB2":char*:"60ECF73D0FC43E0C42E8E155FFE39F9F0B531F87B34B6C3C":char*:"372F5C5D0E18313C82AEF940EC3AFEE26087A46F1EBAE923":char*:"D5A9F9182EC09CEAEA5F57EA10225EC77FA44174511985FD" + +ECP test vectors secp224k1 +depends_on:9 +6:exp:10:char*:"8EAD9B2819A3C2746B3EDC1E0D30F23271CDAC048C0615C961B1A9D3":char*:"DEE0A75EF26CF8F501DB80807A3A0908E5CF01852709C1D35B31428B":char*:"276D2B817918F7CD1DA5CCA081EC4B62CD255E0ACDC9F85FA8C52CAC":char*:"AB7E70AEDA68A174ECC1F3800561B2D4FABE97C5D2A1A94D081E3FAC":char*:"D2E94B00FD30201C40EDF73B137427916687AEA1935B277A5960DD1C":char*:"DE728A614B17D91EB3CB2C17DA195562B6281585986332B3E12DA0ED":char*:"B66B673D29038A3487A2D9C10CDCE67646F7C39C984EBE9E8795AD3C":char*:"928C6147AF5EE4B54FA6ECF77B70CA3FEE5F4182DB057878F129DF" + +ECP test vectors secp256k1 +depends_on:13 +6:exp:21:char*:"923C6D4756CD940CD1E13A359F6E0F0698791938E6D60246030AE4B0D8D4E9DE":char*:"20A865B295E93C5B090F324B84D7AC7526AA1CFE86DD80E792CECCD16B657D55":char*:"38AC87141A4854A8DFD87333E107B61692323721FE2EAD6E52206FE471A4771B":char*:"4F5036A8ED5809AB7E70AEDA68A174ECC1F3800561B2D4FABE97C5D2A1A94D08":char*:"029F5D2CC5A2C7E538FBA321439B4EC8DD79B7FEB9C0A8A5114EEA39856E22E8":char*:"165171AFC3411A427F24FDDE1192A551C90983EB421BC982AB4CF4E21F18F04B":char*:"E4B5B537D3ACEA7624F2E9C185BFFD80BC7035E515F33E0D4CFAE747FD20038E":char*:"2BC685B7DCDBC694F5E036C4EAE9BFB489D7BF8940C4681F734B71D68501514C" + +ECP selftest +22 + +ECP restartable mul secp256r1 max_ops=0 (disabled) +depends_on:5 +4:exp:5:char*:"814264145F2F56F2E96A8E337A1284993FAF432A5ABCE59E867B7291D507A3AF":char*:"2AF502F3BE8952F2C9B5A8D4160D09E97165BE50BC42AE4A5E8D3B4BA83AEB15":char*:"EB0FAF4CA986C4D38681A0F9872D79D56795BD4BFF6E6DE3C0F5015ECE5EFD85":char*:"2CE1788EC197E096DB95A200CC0AB26A19CE6BCCAD562B8EEE1B593761CF7F41":char*:"DD0F5396219D1EA393310412D19A08F1F5811E9DC8EC8EEA7F80D21C820C2788":char*:"0357DCCD4C804D0D8D33AA42B848834AA5605F9AB0D37239A115BBB647936F50":int:0:int:0:int:0 + +ECP restartable mul secp256r1 max_ops=1 +depends_on:5 +4:exp:5:char*:"814264145F2F56F2E96A8E337A1284993FAF432A5ABCE59E867B7291D507A3AF":char*:"2AF502F3BE8952F2C9B5A8D4160D09E97165BE50BC42AE4A5E8D3B4BA83AEB15":char*:"EB0FAF4CA986C4D38681A0F9872D79D56795BD4BFF6E6DE3C0F5015ECE5EFD85":char*:"2CE1788EC197E096DB95A200CC0AB26A19CE6BCCAD562B8EEE1B593761CF7F41":char*:"DD0F5396219D1EA393310412D19A08F1F5811E9DC8EC8EEA7F80D21C820C2788":char*:"0357DCCD4C804D0D8D33AA42B848834AA5605F9AB0D37239A115BBB647936F50":int:1:int:1:int:5000 + +ECP restartable mul secp256r1 max_ops=10000 +depends_on:5 +4:exp:5:char*:"814264145F2F56F2E96A8E337A1284993FAF432A5ABCE59E867B7291D507A3AF":char*:"2AF502F3BE8952F2C9B5A8D4160D09E97165BE50BC42AE4A5E8D3B4BA83AEB15":char*:"EB0FAF4CA986C4D38681A0F9872D79D56795BD4BFF6E6DE3C0F5015ECE5EFD85":char*:"2CE1788EC197E096DB95A200CC0AB26A19CE6BCCAD562B8EEE1B593761CF7F41":char*:"DD0F5396219D1EA393310412D19A08F1F5811E9DC8EC8EEA7F80D21C820C2788":char*:"0357DCCD4C804D0D8D33AA42B848834AA5605F9AB0D37239A115BBB647936F50":int:10000:int:0:int:0 + +ECP restartable mul secp256r1 max_ops=250 +depends_on:5 +4:exp:5:char*:"814264145F2F56F2E96A8E337A1284993FAF432A5ABCE59E867B7291D507A3AF":char*:"2AF502F3BE8952F2C9B5A8D4160D09E97165BE50BC42AE4A5E8D3B4BA83AEB15":char*:"EB0FAF4CA986C4D38681A0F9872D79D56795BD4BFF6E6DE3C0F5015ECE5EFD85":char*:"2CE1788EC197E096DB95A200CC0AB26A19CE6BCCAD562B8EEE1B593761CF7F41":char*:"DD0F5396219D1EA393310412D19A08F1F5811E9DC8EC8EEA7F80D21C820C2788":char*:"0357DCCD4C804D0D8D33AA42B848834AA5605F9AB0D37239A115BBB647936F50":int:250:int:2:int:32 + +ECP restartable muladd secp256r1 max_ops=0 (disabled) +depends_on:5 +5:exp:5:char*:"CB28E0999B9C7715FD0A80D8E47A77079716CBBF917DD72E97566EA1C066957C":char*:"2B57C0235FB7489768D058FF4911C20FDBE71E3699D91339AFBB903EE17255DC":char*:"C3875E57C85038A0D60370A87505200DC8317C8C534948BEA6559C7C18E6D4CE":char*:"3B4E49C4FDBFC006FF993C81A50EAE221149076D6EC09DDD9FB3B787F85B6483":char*:"2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085E0822CB04235E970":char*:"6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945CDDFE7D509BBFD7D":int:0:int:0:int:0 + +ECP restartable muladd secp256r1 max_ops=1 +depends_on:5 +5:exp:5:char*:"CB28E0999B9C7715FD0A80D8E47A77079716CBBF917DD72E97566EA1C066957C":char*:"2B57C0235FB7489768D058FF4911C20FDBE71E3699D91339AFBB903EE17255DC":char*:"C3875E57C85038A0D60370A87505200DC8317C8C534948BEA6559C7C18E6D4CE":char*:"3B4E49C4FDBFC006FF993C81A50EAE221149076D6EC09DDD9FB3B787F85B6483":char*:"2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085E0822CB04235E970":char*:"6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945CDDFE7D509BBFD7D":int:1:int:1:int:10000 + +ECP restartable muladd secp256r1 max_ops=10000 +depends_on:5 +5:exp:5:char*:"CB28E0999B9C7715FD0A80D8E47A77079716CBBF917DD72E97566EA1C066957C":char*:"2B57C0235FB7489768D058FF4911C20FDBE71E3699D91339AFBB903EE17255DC":char*:"C3875E57C85038A0D60370A87505200DC8317C8C534948BEA6559C7C18E6D4CE":char*:"3B4E49C4FDBFC006FF993C81A50EAE221149076D6EC09DDD9FB3B787F85B6483":char*:"2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085E0822CB04235E970":char*:"6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945CDDFE7D509BBFD7D":int:10000:int:0:int:0 + +ECP restartable muladd secp256r1 max_ops=250 +depends_on:5 +5:exp:5:char*:"CB28E0999B9C7715FD0A80D8E47A77079716CBBF917DD72E97566EA1C066957C":char*:"2B57C0235FB7489768D058FF4911C20FDBE71E3699D91339AFBB903EE17255DC":char*:"C3875E57C85038A0D60370A87505200DC8317C8C534948BEA6559C7C18E6D4CE":char*:"3B4E49C4FDBFC006FF993C81A50EAE221149076D6EC09DDD9FB3B787F85B6483":char*:"2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085E0822CB04235E970":char*:"6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945CDDFE7D509BBFD7D":int:250:int:4:int:64 + diff --git a/third_party/mbedtls/test/test_suite_entropy.c b/third_party/mbedtls/test/test_suite_entropy.c new file mode 100644 index 000000000..3cc9507ef --- /dev/null +++ b/third_party/mbedtls/test/test_suite_entropy.c @@ -0,0 +1,975 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_entropy.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_entropy.function + * Test suite data : suites/test_suite_entropy.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_ENTROPY_C) +#include "third_party/mbedtls/entropy.h" +#include "third_party/mbedtls/entropy_poll.h" +#include "third_party/mbedtls/md.h" + +typedef enum +{ + DUMMY_CONSTANT_LENGTH, /* Output context->length bytes */ + DUMMY_REQUESTED_LENGTH, /* Output whatever length was requested */ + DUMMY_FAIL, /* Return an error code */ +} entropy_dummy_instruction; + +typedef struct +{ + entropy_dummy_instruction instruction; + size_t length; /* Length to return for DUMMY_CONSTANT_LENGTH */ + size_t calls; /* Incremented at each call */ +} entropy_dummy_context; + +/* + * Dummy entropy source + * + * If data is NULL, write exactly the requested length. + * Otherwise, write the length indicated by data or error if negative + */ +static int entropy_dummy_source( void *arg, unsigned char *output, + size_t len, size_t *olen ) +{ + entropy_dummy_context *context = arg; + ++context->calls; + + switch( context->instruction ) + { + case DUMMY_CONSTANT_LENGTH: + *olen = context->length; + break; + case DUMMY_REQUESTED_LENGTH: + *olen = len; + break; + case DUMMY_FAIL: + return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + } + + memset( output, 0x2a, *olen ); + return( 0 ); +} + +/* + * Ability to clear entropy sources to allow testing with just predefined + * entropy sources. This function or tests depending on it might break if there + * are internal changes to how entropy sources are registered. + * + * To be called immediately after mbedtls_entropy_init(). + * + * Just resetting the counter. New sources will overwrite existing ones. + * This might break memory checks in the future if sources need 'free-ing' then + * as well. + */ +static void entropy_clear_sources( mbedtls_entropy_context *ctx ) +{ + ctx->source_count = 0; +} + +#if defined(MBEDTLS_ENTROPY_NV_SEED) +/* + * NV seed read/write functions that use a buffer instead of a file + */ +static unsigned char buffer_seed[MBEDTLS_ENTROPY_BLOCK_SIZE]; + +int buffer_nv_seed_read( unsigned char *buf, size_t buf_len ) +{ + if( buf_len != MBEDTLS_ENTROPY_BLOCK_SIZE ) + return( -1 ); + + memcpy( buf, buffer_seed, MBEDTLS_ENTROPY_BLOCK_SIZE ); + return( 0 ); +} + +int buffer_nv_seed_write( unsigned char *buf, size_t buf_len ) +{ + if( buf_len != MBEDTLS_ENTROPY_BLOCK_SIZE ) + return( -1 ); + + memcpy( buffer_seed, buf, MBEDTLS_ENTROPY_BLOCK_SIZE ); + return( 0 ); +} + +/* + * NV seed read/write helpers that fill the base seedfile + */ +static int write_nv_seed( unsigned char *buf, size_t buf_len ) +{ + FILE *f; + + if( buf_len != MBEDTLS_ENTROPY_BLOCK_SIZE ) + return( -1 ); + + if( ( f = fopen( MBEDTLS_PLATFORM_STD_NV_SEED_FILE, "w" ) ) == NULL ) + return( -1 ); + + if( fwrite( buf, 1, MBEDTLS_ENTROPY_BLOCK_SIZE, f ) != + MBEDTLS_ENTROPY_BLOCK_SIZE ) + return( -1 ); + + fclose( f ); + + return( 0 ); +} + +int read_nv_seed( unsigned char *buf, size_t buf_len ) +{ + FILE *f; + + if( buf_len != MBEDTLS_ENTROPY_BLOCK_SIZE ) + return( -1 ); + + if( ( f = fopen( MBEDTLS_PLATFORM_STD_NV_SEED_FILE, "rb" ) ) == NULL ) + return( -1 ); + + if( fread( buf, 1, MBEDTLS_ENTROPY_BLOCK_SIZE, f ) != + MBEDTLS_ENTROPY_BLOCK_SIZE ) + return( -1 ); + + fclose( f ); + + return( 0 ); +} +#endif /* MBEDTLS_ENTROPY_NV_SEED */ +void test_entropy_init_free( int reinit ) +{ + mbedtls_entropy_context ctx; + + /* Double free is not explicitly documented to work, but it is convenient + * to call mbedtls_entropy_free() unconditionally on an error path without + * checking whether it has already been called in the success path. */ + + mbedtls_entropy_init( &ctx ); + mbedtls_entropy_free( &ctx ); + + if( reinit ) + mbedtls_entropy_init( &ctx ); + mbedtls_entropy_free( &ctx ); + + /* This test case always succeeds, functionally speaking. A plausible + * bug might trigger an invalid pointer dereference or a memory leak. */ + goto exit; +exit: + ; +} + +void test_entropy_init_free_wrapper( void ** params ) +{ + test_entropy_init_free( *( (int *) params[0] ) ); +} + +#if defined(MBEDTLS_ENTROPY_NV_SEED) +#if defined(MBEDTLS_FS_IO) +void test_entropy_seed_file( char * path, int ret ) +{ + mbedtls_entropy_context ctx; + mbedtls_entropy_init( &ctx ); + TEST_ASSERT( mbedtls_entropy_write_seed_file( &ctx, path ) == ret ); + TEST_ASSERT( mbedtls_entropy_update_seed_file( &ctx, path ) == ret ); +exit: + mbedtls_entropy_free( &ctx ); +} + +void test_entropy_seed_file_wrapper( void ** params ) +{ + + test_entropy_seed_file( (char *) params[0], *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_FS_IO */ +#endif /* MBEDTLS_ENTROPY_NV_SEED */ +void test_entropy_no_sources( ) +{ + mbedtls_entropy_context ctx; + unsigned char buf[MBEDTLS_ENTROPY_BLOCK_SIZE]; + + mbedtls_entropy_init( &ctx ); + entropy_clear_sources( &ctx ); + TEST_EQUAL( mbedtls_entropy_func( &ctx, buf, sizeof( buf ) ), + MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED ); + +exit: + mbedtls_entropy_free( &ctx ); +} + +void test_entropy_no_sources_wrapper( void ** params ) +{ + (void)params; + + test_entropy_no_sources( ); +} +void test_entropy_too_many_sources( ) +{ + mbedtls_entropy_context ctx; + size_t i; + entropy_dummy_context dummy = {DUMMY_REQUESTED_LENGTH, 0, 0}; + + mbedtls_entropy_init( &ctx ); + + /* + * It's hard to tell precisely when the error will occur, + * since we don't know how many sources were automatically added. + */ + for( i = 0; i < MBEDTLS_ENTROPY_MAX_SOURCES; i++ ) + (void) mbedtls_entropy_add_source( &ctx, entropy_dummy_source, &dummy, + 16, MBEDTLS_ENTROPY_SOURCE_WEAK ); + + TEST_ASSERT( mbedtls_entropy_add_source( &ctx, entropy_dummy_source, &dummy, + 16, MBEDTLS_ENTROPY_SOURCE_WEAK ) + == MBEDTLS_ERR_ENTROPY_MAX_SOURCES ); + +exit: + mbedtls_entropy_free( &ctx ); +} + +void test_entropy_too_many_sources_wrapper( void ** params ) +{ + (void)params; + + test_entropy_too_many_sources( ); +} +#if defined(ENTROPY_HAVE_STRONG) +void test_entropy_func_len( int len, int ret ) +{ + mbedtls_entropy_context ctx; + unsigned char buf[MBEDTLS_ENTROPY_BLOCK_SIZE + 10] = { 0 }; + unsigned char acc[MBEDTLS_ENTROPY_BLOCK_SIZE + 10] = { 0 }; + size_t i, j; + + mbedtls_entropy_init( &ctx ); + + /* + * See comments in mbedtls_entropy_self_test() + */ + for( i = 0; i < 8; i++ ) + { + TEST_ASSERT( mbedtls_entropy_func( &ctx, buf, len ) == ret ); + for( j = 0; j < sizeof( buf ); j++ ) + acc[j] |= buf[j]; + } + + if( ret == 0 ) + for( j = 0; j < (size_t) len; j++ ) + TEST_ASSERT( acc[j] != 0 ); + + for( j = len; j < sizeof( buf ); j++ ) + TEST_ASSERT( acc[j] == 0 ); + +exit: + mbedtls_entropy_free( &ctx ); +} + +void test_entropy_func_len_wrapper( void ** params ) +{ + + test_entropy_func_len( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +#endif /* ENTROPY_HAVE_STRONG */ +void test_entropy_source_fail( char * path ) +{ + mbedtls_entropy_context ctx; + unsigned char buf[16]; + entropy_dummy_context dummy = {DUMMY_FAIL, 0, 0}; + + mbedtls_entropy_init( &ctx ); + + TEST_ASSERT( mbedtls_entropy_add_source( &ctx, entropy_dummy_source, + &dummy, 16, + MBEDTLS_ENTROPY_SOURCE_WEAK ) + == 0 ); + + TEST_ASSERT( mbedtls_entropy_func( &ctx, buf, sizeof( buf ) ) + == MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + TEST_ASSERT( mbedtls_entropy_gather( &ctx ) + == MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); +#if defined(MBEDTLS_FS_IO) && defined(MBEDTLS_ENTROPY_NV_SEED) + TEST_ASSERT( mbedtls_entropy_write_seed_file( &ctx, path ) + == MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + TEST_ASSERT( mbedtls_entropy_update_seed_file( &ctx, path ) + == MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); +#else + ((void) path); +#endif + +exit: + mbedtls_entropy_free( &ctx ); +} + +void test_entropy_source_fail_wrapper( void ** params ) +{ + + test_entropy_source_fail( (char *) params[0] ); +} +void test_entropy_threshold( int threshold, int chunk_size, int result ) +{ + mbedtls_entropy_context ctx; + entropy_dummy_context strong = + {DUMMY_CONSTANT_LENGTH, MBEDTLS_ENTROPY_BLOCK_SIZE, 0}; + entropy_dummy_context weak = {DUMMY_CONSTANT_LENGTH, chunk_size, 0}; + unsigned char buf[MBEDTLS_ENTROPY_BLOCK_SIZE] = { 0 }; + int ret; + + mbedtls_entropy_init( &ctx ); + entropy_clear_sources( &ctx ); + + /* Set strong source that reaches its threshold immediately and + * a weak source whose threshold is a test parameter. */ + TEST_ASSERT( mbedtls_entropy_add_source( &ctx, entropy_dummy_source, + &strong, 1, + MBEDTLS_ENTROPY_SOURCE_STRONG ) == 0 ); + TEST_ASSERT( mbedtls_entropy_add_source( &ctx, entropy_dummy_source, + &weak, threshold, + MBEDTLS_ENTROPY_SOURCE_WEAK ) == 0 ); + + ret = mbedtls_entropy_func( &ctx, buf, sizeof( buf ) ); + + if( result >= 0 ) + { + TEST_ASSERT( ret == 0 ); +#if defined(MBEDTLS_ENTROPY_NV_SEED) + /* If the NV seed functionality is enabled, there are two entropy + * updates: before and after updating the NV seed. */ + result *= 2; +#endif + TEST_ASSERT( weak.calls == (size_t) result ); + } + else + { + TEST_ASSERT( ret == result ); + } + +exit: + mbedtls_entropy_free( &ctx ); +} + +void test_entropy_threshold_wrapper( void ** params ) +{ + + test_entropy_threshold( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +void test_entropy_calls( int strength1, int strength2, + int threshold, int chunk_size, + int result ) +{ + /* + * if result >= 0: result = expected number of calls to source 1 + * if result < 0: result = expected return code from mbedtls_entropy_func() + */ + + mbedtls_entropy_context ctx; + entropy_dummy_context dummy1 = {DUMMY_CONSTANT_LENGTH, chunk_size, 0}; + entropy_dummy_context dummy2 = {DUMMY_CONSTANT_LENGTH, chunk_size, 0}; + unsigned char buf[MBEDTLS_ENTROPY_BLOCK_SIZE] = { 0 }; + int ret; + + mbedtls_entropy_init( &ctx ); + entropy_clear_sources( &ctx ); + + TEST_ASSERT( mbedtls_entropy_add_source( &ctx, entropy_dummy_source, + &dummy1, threshold, + strength1 ) == 0 ); + TEST_ASSERT( mbedtls_entropy_add_source( &ctx, entropy_dummy_source, + &dummy2, threshold, + strength2 ) == 0 ); + + ret = mbedtls_entropy_func( &ctx, buf, sizeof( buf ) ); + + if( result >= 0 ) + { + TEST_ASSERT( ret == 0 ); +#if defined(MBEDTLS_ENTROPY_NV_SEED) + /* If the NV seed functionality is enabled, there are two entropy + * updates: before and after updating the NV seed. */ + result *= 2; +#endif + TEST_ASSERT( dummy1.calls == (size_t) result ); + } + else + { + TEST_ASSERT( ret == result ); + } + +exit: + mbedtls_entropy_free( &ctx ); +} + +void test_entropy_calls_wrapper( void ** params ) +{ + + test_entropy_calls( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#if defined(MBEDTLS_ENTROPY_NV_SEED) +#if defined(MBEDTLS_FS_IO) +void test_nv_seed_file_create( ) +{ + unsigned char buf[MBEDTLS_ENTROPY_BLOCK_SIZE]; + + memset( buf, 0, MBEDTLS_ENTROPY_BLOCK_SIZE ); + + TEST_ASSERT( write_nv_seed( buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) == 0 ); +exit: + ; +} + +void test_nv_seed_file_create_wrapper( void ** params ) +{ + (void)params; + + test_nv_seed_file_create( ); +} +#endif /* MBEDTLS_FS_IO */ +#endif /* MBEDTLS_ENTROPY_NV_SEED */ +#if defined(MBEDTLS_ENTROPY_NV_SEED) +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_PLATFORM_NV_SEED_ALT) +void test_entropy_nv_seed_std_io( ) +{ + unsigned char io_seed[MBEDTLS_ENTROPY_BLOCK_SIZE]; + unsigned char check_seed[MBEDTLS_ENTROPY_BLOCK_SIZE]; + + memset( io_seed, 1, MBEDTLS_ENTROPY_BLOCK_SIZE ); + memset( check_seed, 0, MBEDTLS_ENTROPY_BLOCK_SIZE ); + + mbedtls_platform_set_nv_seed( mbedtls_platform_std_nv_seed_read, + mbedtls_platform_std_nv_seed_write ); + + /* Check if platform NV read and write manipulate the same data */ + TEST_ASSERT( write_nv_seed( io_seed, MBEDTLS_ENTROPY_BLOCK_SIZE ) == 0 ); + TEST_ASSERT( mbedtls_nv_seed_read( check_seed, MBEDTLS_ENTROPY_BLOCK_SIZE ) == + MBEDTLS_ENTROPY_BLOCK_SIZE ); + + TEST_ASSERT( memcmp( io_seed, check_seed, MBEDTLS_ENTROPY_BLOCK_SIZE ) == 0 ); + + memset( check_seed, 0, MBEDTLS_ENTROPY_BLOCK_SIZE ); + + /* Check if platform NV write and raw read manipulate the same data */ + TEST_ASSERT( mbedtls_nv_seed_write( io_seed, MBEDTLS_ENTROPY_BLOCK_SIZE ) == + MBEDTLS_ENTROPY_BLOCK_SIZE ); + TEST_ASSERT( read_nv_seed( check_seed, MBEDTLS_ENTROPY_BLOCK_SIZE ) == 0 ); + + TEST_ASSERT( memcmp( io_seed, check_seed, MBEDTLS_ENTROPY_BLOCK_SIZE ) == 0 ); +exit: + ; +} + +void test_entropy_nv_seed_std_io_wrapper( void ** params ) +{ + (void)params; + + test_entropy_nv_seed_std_io( ); +} +#endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */ +#endif /* MBEDTLS_FS_IO */ +#endif /* MBEDTLS_ENTROPY_NV_SEED */ +#if defined(MBEDTLS_MD_C) +#if defined(MBEDTLS_ENTROPY_NV_SEED) +#if defined(MBEDTLS_PLATFORM_NV_SEED_ALT) +void test_entropy_nv_seed( data_t * read_seed ) +{ +#if defined(MBEDTLS_ENTROPY_SHA512_ACCUMULATOR) + const mbedtls_md_info_t *md_info = + mbedtls_md_info_from_type( MBEDTLS_MD_SHA512 ); +#elif defined(MBEDTLS_ENTROPY_SHA256_ACCUMULATOR) + const mbedtls_md_info_t *md_info = + mbedtls_md_info_from_type( MBEDTLS_MD_SHA256 ); +#else +#error "Unsupported entropy accumulator" +#endif + mbedtls_md_context_t accumulator; + mbedtls_entropy_context ctx; + int (*original_mbedtls_nv_seed_read)( unsigned char *buf, size_t buf_len ) = + mbedtls_nv_seed_read; + int (*original_mbedtls_nv_seed_write)( unsigned char *buf, size_t buf_len ) = + mbedtls_nv_seed_write; + + unsigned char header[2]; + unsigned char entropy[MBEDTLS_ENTROPY_BLOCK_SIZE]; + unsigned char buf[MBEDTLS_ENTROPY_BLOCK_SIZE]; + unsigned char empty[MBEDTLS_ENTROPY_BLOCK_SIZE]; + unsigned char check_seed[MBEDTLS_ENTROPY_BLOCK_SIZE]; + unsigned char check_entropy[MBEDTLS_ENTROPY_BLOCK_SIZE]; + + memset( entropy, 0, MBEDTLS_ENTROPY_BLOCK_SIZE ); + memset( buf, 0, MBEDTLS_ENTROPY_BLOCK_SIZE ); + memset( empty, 0, MBEDTLS_ENTROPY_BLOCK_SIZE ); + memset( check_seed, 2, MBEDTLS_ENTROPY_BLOCK_SIZE ); + memset( check_entropy, 3, MBEDTLS_ENTROPY_BLOCK_SIZE ); + + // Make sure we read/write NV seed from our buffers + mbedtls_platform_set_nv_seed( buffer_nv_seed_read, buffer_nv_seed_write ); + + mbedtls_md_init( &accumulator ); + mbedtls_entropy_init( &ctx ); + entropy_clear_sources( &ctx ); + + TEST_ASSERT( mbedtls_entropy_add_source( &ctx, mbedtls_nv_seed_poll, NULL, + MBEDTLS_ENTROPY_BLOCK_SIZE, + MBEDTLS_ENTROPY_SOURCE_STRONG ) == 0 ); + + // Set the initial NV seed to read + TEST_ASSERT( read_seed->len >= MBEDTLS_ENTROPY_BLOCK_SIZE ); + memcpy( buffer_seed, read_seed->x, MBEDTLS_ENTROPY_BLOCK_SIZE ); + + // Do an entropy run + TEST_ASSERT( mbedtls_entropy_func( &ctx, entropy, sizeof( entropy ) ) == 0 ); + // Determine what should have happened with manual entropy internal logic + + // Init accumulator + header[1] = MBEDTLS_ENTROPY_BLOCK_SIZE; + TEST_ASSERT( mbedtls_md_setup( &accumulator, md_info, 0 ) == 0 ); + + // First run for updating write_seed + header[0] = 0; + TEST_ASSERT( mbedtls_md_starts( &accumulator ) == 0 ); + TEST_ASSERT( mbedtls_md_update( &accumulator, header, 2 ) == 0 ); + TEST_ASSERT( mbedtls_md_update( &accumulator, + read_seed->x, MBEDTLS_ENTROPY_BLOCK_SIZE ) == 0 ); + TEST_ASSERT( mbedtls_md_finish( &accumulator, buf ) == 0 ); + + TEST_ASSERT( mbedtls_md_starts( &accumulator ) == 0 ); + TEST_ASSERT( mbedtls_md_update( &accumulator, + buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) == 0 ); + + TEST_ASSERT( mbedtls_md( md_info, buf, MBEDTLS_ENTROPY_BLOCK_SIZE, + check_seed ) == 0 ); + + // Second run for actual entropy (triggers mbedtls_entropy_update_nv_seed) + header[0] = MBEDTLS_ENTROPY_SOURCE_MANUAL; + TEST_ASSERT( mbedtls_md_update( &accumulator, header, 2 ) == 0 ); + TEST_ASSERT( mbedtls_md_update( &accumulator, + empty, MBEDTLS_ENTROPY_BLOCK_SIZE ) == 0 ); + + header[0] = 0; + TEST_ASSERT( mbedtls_md_update( &accumulator, header, 2 ) == 0 ); + TEST_ASSERT( mbedtls_md_update( &accumulator, + check_seed, MBEDTLS_ENTROPY_BLOCK_SIZE ) == 0 ); + TEST_ASSERT( mbedtls_md_finish( &accumulator, buf ) == 0 ); + + TEST_ASSERT( mbedtls_md( md_info, buf, MBEDTLS_ENTROPY_BLOCK_SIZE, + check_entropy ) == 0 ); + + // Check result of both NV file and entropy received with the manual calculations + TEST_ASSERT( memcmp( check_seed, buffer_seed, MBEDTLS_ENTROPY_BLOCK_SIZE ) == 0 ); + TEST_ASSERT( memcmp( check_entropy, entropy, MBEDTLS_ENTROPY_BLOCK_SIZE ) == 0 ); + +exit: + mbedtls_md_free( &accumulator ); + mbedtls_entropy_free( &ctx ); + mbedtls_nv_seed_read = original_mbedtls_nv_seed_read; + mbedtls_nv_seed_write = original_mbedtls_nv_seed_write; +} + +void test_entropy_nv_seed_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_entropy_nv_seed( &data0 ); +} +#endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */ +#endif /* MBEDTLS_ENTROPY_NV_SEED */ +#endif /* MBEDTLS_MD_C */ +#if defined(ENTROPY_HAVE_STRONG) +#if defined(MBEDTLS_SELF_TEST) +void test_entropy_selftest( int result ) +{ + TEST_ASSERT( mbedtls_entropy_self_test( 1 ) == result ); +exit: + ; +} + +void test_entropy_selftest_wrapper( void ** params ) +{ + + test_entropy_selftest( *( (int *) params[0] ) ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* ENTROPY_HAVE_STRONG */ +#endif /* MBEDTLS_ENTROPY_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_ENTROPY_C) + + case 0: + { + *out_value = MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR; + } + break; + case 1: + { + *out_value = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; + } + break; + case 2: + { + *out_value = MBEDTLS_ENTROPY_SOURCE_WEAK; + } + break; + case 3: + { + *out_value = MBEDTLS_ENTROPY_BLOCK_SIZE; + } + break; + case 4: + { + *out_value = MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE; + } + break; + case 5: + { + *out_value = MBEDTLS_ENTROPY_SOURCE_STRONG; + } + break; + case 6: + { + *out_value = (MBEDTLS_ENTROPY_BLOCK_SIZE+1)/2; + } + break; + case 7: + { + *out_value = MBEDTLS_ENTROPY_BLOCK_SIZE+1; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_ENTROPY_C) + + case 0: + { +#if !defined(MBEDTLS_TEST_NULL_ENTROPY) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_TEST_NULL_ENTROPY) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_ENTROPY_C) + test_entropy_init_free_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_ENTROPY_NV_SEED) && defined(MBEDTLS_FS_IO) + test_entropy_seed_file_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_ENTROPY_C) + test_entropy_no_sources_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_ENTROPY_C) + test_entropy_too_many_sources_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_ENTROPY_C) && defined(ENTROPY_HAVE_STRONG) + test_entropy_func_len_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_ENTROPY_C) + test_entropy_source_fail_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_ENTROPY_C) + test_entropy_threshold_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_ENTROPY_C) + test_entropy_calls_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_ENTROPY_NV_SEED) && defined(MBEDTLS_FS_IO) + test_nv_seed_file_create_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_ENTROPY_NV_SEED) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_PLATFORM_NV_SEED_ALT) + test_entropy_nv_seed_std_io_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_MD_C) && defined(MBEDTLS_ENTROPY_NV_SEED) && defined(MBEDTLS_PLATFORM_NV_SEED_ALT) + test_entropy_nv_seed_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_ENTROPY_C) && defined(ENTROPY_HAVE_STRONG) && defined(MBEDTLS_SELF_TEST) + test_entropy_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_entropy.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_entropy.datax b/third_party/mbedtls/test/test_suite_entropy.datax new file mode 100644 index 000000000..3219d8680 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_entropy.datax @@ -0,0 +1,89 @@ +Entropy init-free-free +0:int:0 + +Entropy init-free-init-free +0:int:1 + +Create NV seed_file +8 + +Entropy write/update seed file: good +1:char*:"/tmp/mbedtls_test_suite_entropy_seed":int:0 + +Entropy write/update seed file: nonexistent +1:char*:"/tmp/no_such_dir/file":exp:0 + +Entropy no sources +2 + +Entropy too many sources +3 + +Entropy output length: 0 +4:int:0:int:0 + +Entropy output length: 1 +4:int:1:int:0 + +Entropy output length: 2 +4:int:2:int:0 + +Entropy output length: 31 +4:int:31:int:0 + +Entropy output length: 65 > BLOCK_SIZE +4:int:65:exp:1 + +Entropy failing source +5:char*:"zip:third_party/mbedtls/test/data/entropy_seed" + +Entropy threshold: 16=2*8 +6:int:16:int:2:int:8 + +Entropy threshold: 32=1*32 +6:int:32:int:1:int:32 + +Entropy threshold: 0* never reaches the threshold +6:int:16:int:0:exp:1 + +Entropy threshold: 1024 never reached +6:int:1024:int:1:exp:1 + +Entropy calls: no strong +7:exp:2:exp:2:int:1:exp:3:exp:4 + +Entropy calls: 1 strong, 1*BLOCK_SIZE +7:exp:5:exp:2:int:1:exp:3:int:1 + +Entropy calls: 1 strong, 2*(BLOCK_SIZE/2) +7:exp:5:exp:2:int:1:exp:6:int:2 + +Entropy calls: 1 strong, BLOCK_SIZE*1 +7:exp:5:exp:2:int:1:int:1:exp:3 + +Entropy calls: 1 strong, 2*BLOCK_SIZE to reach threshold +7:exp:5:exp:2:exp:7:exp:3:int:2 + +Entropy calls: 2 strong, BLOCK_SIZE/2 each +7:exp:5:exp:2:exp:6:exp:6:int:2 + +Check NV seed standard IO +9 + +Check NV seed manually #1 +10:hex:"00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF" + +Check NV seed manually #2 +10:hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + +Check NV seed manually #3 +10:hex:"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + +Entropy self test +depends_on:0 +11:int:0 + +Entropy self test (MBEDTLS_TEST_NULL_ENTROPY) +depends_on:1 +11:int:1 + diff --git a/third_party/mbedtls/test/test_suite_error.c b/third_party/mbedtls/test/test_suite_error.c new file mode 100644 index 000000000..25970328f --- /dev/null +++ b/third_party/mbedtls/test/test_suite_error.c @@ -0,0 +1,328 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_error.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_error.function + * Test suite data : suites/test_suite_error.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_ERROR_C) +#include "third_party/mbedtls/error.h" +void test_error_strerror( int code, char * result_str ) +{ + char buf[500]; + + memset( buf, 0, sizeof( buf ) ); + + mbedtls_strerror( code, buf, 500 ); + + TEST_ASSERT( strcmp( buf, result_str ) == 0 ); +exit: + ; +} + +void test_error_strerror_wrapper( void ** params ) +{ + + test_error_strerror( *( (int *) params[0] ), (char *) params[1] ); +} +#endif /* MBEDTLS_ERROR_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_ERROR_C) + + case 0: + { + *out_value = -0x0020; + } + break; + case 1: + { + *out_value = -0x4080; + } + break; + case 2: + { + *out_value = -0x40A0; + } + break; + case 3: + { + *out_value = -0x8880; + } + break; + case 4: + { + *out_value = -0x007F; + } + break; + case 5: + { + *out_value = -0x88FF; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_ERROR_C) + + case 0: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_RSA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_ERROR_C) + test_error_strerror_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_error.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_error.datax b/third_party/mbedtls/test/test_suite_error.datax new file mode 100644 index 000000000..2efed2929 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_error.datax @@ -0,0 +1,21 @@ +Single low error +depends_on:0 +0:exp:0:char*:"AES - Invalid key length" + +Single high error +depends_on:1 +0:exp:1:char*:"RSA - Bad input parameters to function" + +Low and high error +depends_on:0:1 +0:exp:2:char*:"RSA - Bad input parameters to function \: AES - Invalid key length" + +Non existing high error +0:exp:3:char*:"UNKNOWN ERROR CODE (8880)" + +Non existing low error +0:exp:4:char*:"UNKNOWN ERROR CODE (007F)" + +Non existing low and high error +0:exp:5:char*:"UNKNOWN ERROR CODE (8880) \: UNKNOWN ERROR CODE (007F)" + diff --git a/third_party/mbedtls/test/test_suite_gcm.aes128_de.c b/third_party/mbedtls/test/test_suite_gcm.aes128_de.c new file mode 100644 index 000000000..78f923c09 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_gcm.aes128_de.c @@ -0,0 +1,642 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_gcm.aes128_de.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_gcm.function + * Test suite data : suites/test_suite_gcm.aes128_de.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +void test_gcm_bad_parameters( int cipher_id, int direction, + data_t *key_str, data_t *src_str, + data_t *iv_str, data_t *add_str, + int tag_len_bits, int gcm_result ) +{ + unsigned char output[128]; + unsigned char tag_output[16]; + mbedtls_gcm_context ctx; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + memset( tag_output, 0x00, sizeof( tag_output ) ); + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_gcm_crypt_and_tag( &ctx, direction, src_str->len, iv_str->x, iv_str->len, + add_str->x, add_str->len, src_str->x, output, tag_len, tag_output ) == gcm_result ); + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_bad_parameters_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_gcm_bad_parameters( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +void test_gcm_encrypt_and_tag( int cipher_id, data_t * key_str, + data_t * src_str, data_t * iv_str, + data_t * add_str, data_t * dst, + int tag_len_bits, data_t * tag, + int init_result ) +{ + unsigned char output[128]; + unsigned char tag_output[16]; + mbedtls_gcm_context ctx; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset(output, 0x00, 128); + memset(tag_output, 0x00, 16); + + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == init_result ); + if( init_result == 0 ) + { + TEST_ASSERT( mbedtls_gcm_crypt_and_tag( &ctx, MBEDTLS_GCM_ENCRYPT, src_str->len, iv_str->x, iv_str->len, add_str->x, add_str->len, src_str->x, output, tag_len, tag_output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + TEST_ASSERT( mbedtls_test_hexcmp( tag_output, tag->x, + tag_len, tag->len ) == 0 ); + } + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_encrypt_and_tag_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_gcm_encrypt_and_tag( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, *( (int *) params[11] ), &data12, *( (int *) params[14] ) ); +} +void test_gcm_decrypt_and_verify( int cipher_id, data_t * key_str, + data_t * src_str, data_t * iv_str, + data_t * add_str, int tag_len_bits, + data_t * tag_str, char * result, + data_t * pt_result, int init_result ) +{ + unsigned char output[128]; + mbedtls_gcm_context ctx; + int ret; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset(output, 0x00, 128); + + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == init_result ); + if( init_result == 0 ) + { + ret = mbedtls_gcm_auth_decrypt( &ctx, src_str->len, iv_str->x, iv_str->len, add_str->x, add_str->len, tag_str->x, tag_len, src_str->x, output ); + + if( strcmp( "FAIL", result ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_GCM_AUTH_FAILED ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, pt_result->x, + src_str->len, + pt_result->len ) == 0 ); + } + } + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_decrypt_and_verify_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data13 = {(uint8_t *) params[13], *( (uint32_t *) params[14] )}; + + test_gcm_decrypt_and_verify( *( (int *) params[0] ), &data1, &data3, &data5, &data7, *( (int *) params[9] ), &data10, (char *) params[12], &data13, *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_gcm_invalid_param( ) +{ + mbedtls_gcm_context ctx; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + mbedtls_cipher_id_t valid_cipher = MBEDTLS_CIPHER_ID_AES; + int valid_mode = MBEDTLS_GCM_ENCRYPT; + int valid_len = sizeof(valid_buffer); + int valid_bitlen = 128, invalid_bitlen = 1; + + mbedtls_gcm_init( &ctx ); + + /* mbedtls_gcm_init() */ + TEST_INVALID_PARAM( mbedtls_gcm_init( NULL ) ); + + /* mbedtls_gcm_setkey */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( NULL, valid_cipher, valid_buffer, valid_bitlen ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( &ctx, valid_cipher, NULL, valid_bitlen ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( &ctx, valid_cipher, valid_buffer, invalid_bitlen ) ); + + /* mbedtls_gcm_crypt_and_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( NULL, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, NULL ) ); + + /* mbedtls_gcm_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL) ); + + /* mbedtls_gcm_starts() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( NULL, valid_mode, + valid_buffer, valid_len, + valid_buffer, valid_len ) ); + + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( &ctx, valid_mode, + NULL, valid_len, + valid_buffer, valid_len ) ); + + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( &ctx, valid_mode, + valid_buffer, valid_len, + NULL, valid_len ) ); + + /* mbedtls_gcm_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( NULL, valid_len, + valid_buffer, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( &ctx, valid_len, + NULL, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( &ctx, valid_len, + valid_buffer, NULL ) ); + + /* mbedtls_gcm_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_finish( NULL, valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_finish( &ctx, NULL, valid_len ) ); + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_gcm_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_gcm_valid_param( ) +{ + TEST_VALID_PARAM( mbedtls_gcm_free( NULL ) ); +exit: + return; +} + +void test_gcm_valid_param_wrapper( void ** params ) +{ + (void)params; + + test_gcm_valid_param( ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_gcm_selftest( ) +{ + TEST_ASSERT( mbedtls_gcm_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_gcm_selftest_wrapper( void ** params ) +{ + (void)params; + + test_gcm_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_GCM_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_GCM_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_ID_AES; + } + break; + case 1: + { + *out_value = MBEDTLS_GCM_DECRYPT; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_GCM_BAD_INPUT; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_GCM_C) + + case 0: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_bad_parameters_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_encrypt_and_tag_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_decrypt_and_verify_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_gcm_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_valid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_SELF_TEST) + test_gcm_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_gcm.aes128_de.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_gcm.aes128_de.datax b/third_party/mbedtls/test/test_suite_gcm.aes128_de.datax new file mode 100644 index 000000000..5c6d976da --- /dev/null +++ b/third_party/mbedtls/test/test_suite_gcm.aes128_de.datax @@ -0,0 +1,680 @@ +AES-GCM NIST Validation (AES-128,128,0,0,128) #0 [#1] +depends_on:0 +2:exp:0:hex:"d785dafea3e966731ef6fc6202262584":hex:"":hex:"d91a46205ee94058b3b8403997592dd2":hex:"":int:128:hex:"3b92a17c1b9c3578a68cffea5a5b6245":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #1 [#1] +depends_on:0 +2:exp:0:hex:"aec963833b9098de1ababc853ab74d96":hex:"":hex:"4e0ffd93beffd732c6f7d6ad606a2d24":hex:"":int:128:hex:"e9fcedc176dfe587dc61b2011010cdf1":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #2 [#1] +depends_on:0 +2:exp:0:hex:"c4fb9e3393681da9cec5ec96f87c5c31":hex:"":hex:"845e910bc055d895879f62101d08b4c7":hex:"":int:128:hex:"99fb783c497416e4b6e2a5de7c782057":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #0 [#1] +depends_on:0 +2:exp:0:hex:"2a930f2e09beceacd9919cb76f2ac8d3":hex:"":hex:"340d9af44f6370eff534c653033a785a":hex:"":int:120:hex:"0c1e5e9c8fe5edfd11f114f3503d63":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #1 [#1] +depends_on:0 +2:exp:0:hex:"fe71177e02073b1c407b5724e2263a5e":hex:"":hex:"83c23d20d2a9d4b8f92da96587c96b18":hex:"":int:120:hex:"43b2ca795420f35f6cb39f5dfa47a2":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #2 [#1] +depends_on:0 +2:exp:0:hex:"b02392fd7f228888c281e59d1eaa15fb":hex:"":hex:"2726344ba8912c737e195424e1e6679e":hex:"":int:120:hex:"a10b601ca8053536a2af2cc255d2b6":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #0 [#1] +depends_on:0 +2:exp:0:hex:"21895cbafc16b7b8bf5867e88e0853d4":hex:"":hex:"f987ce1005d9bbd31d2452fb80957753":hex:"":int:112:hex:"952a7e265830d58a6778d68b9450":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #1 [#1] +depends_on:0 +2:exp:0:hex:"9bb9742bf47f68caf64963d7c10a97b0":hex:"":hex:"34a85669de64e1cd44731905fddbcbc5":hex:"":int:112:hex:"e9b6be928aa77b2de28b480ae74c":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #2 [#1] +depends_on:0 +2:exp:0:hex:"4e9708e4b37e2e1b5feaf4f5ab54e2a6":hex:"":hex:"1c53a9fdd23919b036d99560619a9939":hex:"":int:112:hex:"6611b50d6fbca83047f9f5fe1768":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #0 [#1] +depends_on:0 +2:exp:0:hex:"82fede79db25f00be96eb050a22cea87":hex:"":hex:"e9c50b517ab26c89b83c1f0cac50162c":hex:"":int:104:hex:"d0c0ce9db60b77b0e31d05e048":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #1 [#1] +depends_on:0 +2:exp:0:hex:"1d98566fca5201abb12914311a8bd532":hex:"":hex:"590aef4b46a9023405d075edab7e6849":hex:"":int:104:hex:"a1cfd1a27b341f49eda2ca8305":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #2 [#1] +depends_on:0 +2:exp:0:hex:"3038771820c2e1319f02a74b8a7a0c08":hex:"":hex:"e556d9f07fb69d7e9a644261c80fac92":hex:"":int:104:hex:"4d2f005d662b6a8787f231c5e1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #0 [#1] +depends_on:0 +2:exp:0:hex:"0fb7eef50de598d7d8b508d019a30d5a":hex:"":hex:"a2a2617040116c2c7e4236d2d8278213":hex:"":int:96:hex:"68413c58df7bb5f067197ca0":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #1 [#1] +depends_on:0 +2:exp:0:hex:"8cc58b609204215c8ab4908286e56e5c":hex:"":hex:"fb83ea637279332677b5f68081173e99":hex:"":int:96:hex:"a2a9160d82739a55d8cd419f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #2 [#1] +depends_on:0 +2:exp:0:hex:"81a5fd184742a478432963f6477e8f92":hex:"":hex:"da297cbb53b11d7c379e0566299b4d5a":hex:"":int:96:hex:"200bee49466fdda2f21f0062":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #0 [#1] +depends_on:0 +2:exp:0:hex:"f604ac66d626959e595cbb7b4128e096":hex:"":hex:"269d2a49d533c6bb38008711f38e0b39":hex:"":int:64:hex:"468200fa4683e8be":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #1 [#1] +depends_on:0 +2:exp:0:hex:"2e308ba7903e925f768c1d00ff3eb623":hex:"":hex:"335acd2aa48a47a37cfe21e491f1b141":hex:"":int:64:hex:"4872bfd5e2ff55f6":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #2 [#1] +depends_on:0 +2:exp:0:hex:"1304e2a5a3520454a5109df61a67da7a":hex:"":hex:"dbe8b452acf4fa1444c3668e9ee72d26":hex:"":int:64:hex:"83a0d3440200ca95":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #0 [#1] +depends_on:0 +2:exp:0:hex:"ecf1ec2c9a8f2e9cc799f9b9fddb3232":hex:"":hex:"ddf0b695aef5df2b594fcaae72b7e41c":hex:"":int:32:hex:"2819aedf":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #1 [#1] +depends_on:0 +2:exp:0:hex:"9ab5c8ca905b5fe50461f4a68941144b":hex:"":hex:"96dd3927a96e16123f2e9d6b367d303f":hex:"":int:32:hex:"6e0c53ef":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #2 [#1] +depends_on:0 +2:exp:0:hex:"b5fc7af605721a9cfe61c1ee6a4b3e22":hex:"":hex:"6b757d4055823d1035d01077666037d6":hex:"":int:32:hex:"e8c09ddd":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #0 [#1] +depends_on:0 +2:exp:0:hex:"03c0b4a6e508a8490db0d086a82c9db7":hex:"":hex:"ac52f6c1a05030321fa39f87e89fdb5e":hex:"33316ca79d10a79f4fd038593e8eef09625089dc4e0ffe4bc1f2871554fa6666ab3e7fe7885edef694b410456f3ec0e513bb25f1b48d95e4820c5972c1aabb25c84c08566002dadc36df334c1ce86847964a122016d389ac873bca8c335a7a99bcef91e1b985ae5d488a2d7f78b4bf14e0c2dc715e814f4e24276057cf668172":int:128:hex:"756292d8b4653887edef51679b161812":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #1 [#1] +depends_on:0 +2:exp:0:hex:"b228d3d15219ea9ad5651fce02c8374d":hex:"":hex:"5c7eafaead029c3fe3cf3835fe758d0e":hex:"8c35dd805c08686b9b4d460f81b4dcb8c46c6d57842dc3e72ba90952e2bebf17fe7184445b02f801800a944486d662a127d01d3b7f42679052cdc73ce533129af8d13957415c5495142157d6ce8a68aa977e56f562fed98e468e42522767656ce50369471060381bb752dd5e77c79677a4cadffa39e518e30a789e793b07ea21":int:128:hex:"a4dde1ab93c84937c3bbc3ad5237818d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #2 [#1] +depends_on:0 +2:exp:0:hex:"776afcbabedd5577fe660a60f920b536":hex:"":hex:"5bbb7f1b14084e520408dd87b97705e9":hex:"44631fc9d4a07416b0dfb4e2b42071e3e2be45502c9ddf72b3e61810eeda31a7d685ebb2ee43a2c06af374569f439ee1668c550067de2dece9ec46ee72b260858d6033f814e85275c5ae669b60803a8c516de32804fa34d3a213ccfaf6689046e25eeb30b9e1608e689f4d31cc664b83a468a51165f5625f12f098a6bf7ddab2":int:128:hex:"a5347d41d93b587240651bcd5230264f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #0 [#1] +depends_on:0 +2:exp:0:hex:"20abeafa25fc4ea7d0592cb3e9b4d5fe":hex:"":hex:"3aba79a58c5aa664856b41d552c7a8d3":hex:"98cfecaae9eb9a7c3b17e6bc5f80d8a4bf7a9f4fa5e01b74cae15ee6af14633205aafe3b28fb7b7918e12322ea27352056a603746d728a61361134a561619400ff2bf679045bac2e0fbc2c1d41f8faba4b27c7827bceda4e9bf505df4185515dd3a5e26f7639c8ad5a38bc5906a44be062f02cc53862678ae36fa3de3c02c982":int:120:hex:"2a67ad1471a520fe09a304f0975f31":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #1 [#1] +depends_on:0 +2:exp:0:hex:"2bc73fba942ff105823b5dccf6befb1c":hex:"":hex:"902c3e3b69b1ef8395d7281ff74cce38":hex:"4adec0b4ac00325a860044d9f9519daa4f7c163229a75819b0fd7d8e23319f030e61dfa8eadabff42ea27bc36bdb6cad249e801ca631b656836448b7172c11126bad2781e6a1aa4f62c4eda53409408b008c057e0b81215cc13ddabbb8f1915f4bbab854f8b00763a530ad5055d265778cd3080d0bd35b76a329bdd5b5a2d268":int:120:hex:"ebdd7c8e87fe733138a433543542d1":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #2 [#1] +depends_on:0 +2:exp:0:hex:"356a4c245868243d61756cabe86da887":hex:"":hex:"b442f2ec6d45a17144c258fd59fe5b3b":hex:"12cccc3c60474b0a1579c5006c2134850724fa6c9da3a7022d4f65fd238b052bdf34ea34aa7dbadad64996065acee588ab6bd29726d07ed24ffae2d33aadf3e66ebb87f57e689fd85128be1c9e3d8362fad1f8096ee391f75b576fb213d394cef6f091fc5488d9aa152be69475b9167abd6dd4fd93bbbc7b8ca316c952eb19c6":int:120:hex:"ed26080dcb670590613d97d7c47cf4":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #0 [#1] +depends_on:0 +2:exp:0:hex:"dfa7e93aff73600fc552324253066e2c":hex:"":hex:"c20001e93f1cd05253c277a9445d61e4":hex:"a64d1e20058a1f7e698622a02f7ff8dc11886717ede17bbdc3c4645a66a71d8b04346fb389a251ffb0a7f445a25faf642bb7e4697d2cacf925e78c4be98457996afb25b0516b50f179441d1923312364947f8f1e0f5715b43bd537727bf943d7b4679b0b0b28b94e56e7bbf554d9cf79fcee4387f32bb6f91efdd23620035be6":int:112:hex:"6ba5e4dace9a54b50b901d9b73ad":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #1 [#1] +depends_on:0 +2:exp:0:hex:"2ecea80b48d2ecd194a7699aa7d8ccfc":hex:"":hex:"8b4db08bafc23b65ae50a2d20661d270":hex:"efc2ca1a3b41b90f8ddf74291d68f072a6e025d0c91c3ce2b133525943c73ebadc71f150be20afeb097442fa51be31a641df65d90ebd81dcbaf32711ed31f5e0271421377ffe14ddafea3ca60a600588d484856a98de73f56a766ae60bae384a4ae01a1a06821cf0c7a6b4ee4c8f413748457b3777283d3310218fb55c107293":int:112:hex:"246a9d37553088b6411ebb62aa16":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #2 [#1] +depends_on:0 +2:exp:0:hex:"d38fee3fd3d6d08224c3c83529a25d08":hex:"":hex:"a942ccb11cf9468186fabfc18c899801":hex:"1c92a4ce0a1dae27e720d6f9b1e460276538de437f3812ab1177cf0273b05908f296f33ba0f4c790abe2ce958b1d92b930a0d81243e6ad09ef86ee8e3270243095096537cb1054fcfcf537d828b65af9b6cf7c50f5b8470f7908f314d0859107eed772ee1732c78e8a2e35b2493f3e8c1e601b08aeab8d9729e0294dca168c62":int:112:hex:"803a08700ec86fdeb88f7a388921":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #0 [#1] +depends_on:0 +2:exp:0:hex:"1899b0cbae41d705c6eed3226afb5bc0":hex:"":hex:"82d0910aa53e300a487d880d018d0dea":hex:"6bf5583cc1007d74f3529db63b8d4e085400ccf3725eab8e19cb145f3910c61465a21486740a26f74691866a9f632af9fae81f5f0bffedf0c28a6ce0fd520bb4db04a3cd1a7d29d8801e05e4b9c9374fd89bcb539489c2f7f1f801c253a1cc737408669bcd133b62da357f7399a52179125aa59fae6707d340846886d730a835":int:104:hex:"c5d58870fee9ce157f5ec1fa8f":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #1 [#1] +depends_on:0 +2:exp:0:hex:"8b95323d86d02754f4c2874b42ec6eb0":hex:"":hex:"4f76084acbdef9999c71dcc794238d7c":hex:"ebc75788377c0b264818a6f97c19cf92c29f1c7cdeb6b5f0a92d238fa4614bc35d0cfe4ec9d045cd628ff6262c460679ac15b0c6366d9289bbd217e5012279e0af0fb2cfcbdf51fe16935968cbb727f725fe5bcd4428905849746c8493600ce8b2cfc1b61b04c8b752b915fed611d6b54ef73ec4e3950d6db1807b1ce7ed1dcc":int:104:hex:"c4724ff1d2c57295eb733e9cad":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #2 [#1] +depends_on:0 +2:exp:0:hex:"30da555559eb11cf7e0eff9d99e9607d":hex:"":hex:"7799275bf12335f281ec94a870f90a0b":hex:"e735d556e15aec78d9736016c8c99db753ed14d4e4adaaa1dd7eaad702ea5dc337433f8c2b45afdf2f385fdf6c55574425571e079ca759b6235f877ed11618ff212bafd865a22b80b76b3b5cf1acfd24d92fd41607bbb7382f26cd703757088d497b16b32de80e1256c734a9b83356b6fced207177de75458481eaef59a431d7":int:104:hex:"3c82272130e17c4a0a007a908e":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #0 [#1] +depends_on:0 +2:exp:0:hex:"ed2ac74af896c5190c271cfa6af02fd2":hex:"":hex:"e0226e2d8da47badad1fb78b9a797f27":hex:"8f11353ae476ff923013e6e736ffc9d23101a1c471ccc07ad372a8430d6559c376075efce2e318cdf4c9443dbf132e7e6da5524045028c97e904633b44c4d189a4b64237ac7692dd03c0e751ce9f04d0fdbd8a96074cd7dfa2fd441a52328b4ac3974b4902db45663f7b6f24947dba618f8b9769e927faf84c9f49ad8239b9fb":int:96:hex:"db8af7a0d548fc54d9457c73":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #1 [#1] +depends_on:0 +2:exp:0:hex:"0225b73fe5fbbe52f838d873173959d8":hex:"":hex:"02a048764f48d9aed1147ee922395bbf":hex:"9b46a57b06e156c877e94c089814493ead879397dab3dfcab2db349ef387efcd0cc339a7e79131a2c580188fc7429044a465b8329d74cd8f47272a4ed32582b1c5c7e3d32341ae902ea4923dc33df8062bc24bb51a11d2ecc82f464f615041387f9c82bd2135d4e240fe56fa8a68e6a9a417e6702430a434b14d70cf02db3181":int:96:hex:"e2c2ce4022c49a95c9ac9026":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #2 [#1] +depends_on:0 +2:exp:0:hex:"89ca3771a0ef3287568b4ac036120198":hex:"":hex:"7e83d2ffa8af8c554cfd71a0db56ef5b":hex:"1bd7a9d6262882bd12c62bd50942965b3cdcadf5e0fab2dc4d0daf0ee4b16e92c6e2464c0caa423cdce88e4d843490609716ec5e44c41672c656ac0e444d3622557ea8420c94deae3ad190ddaf859f6f8c23e4e2e32a46d28df23de4f99bd6c34f69e06eddfdfa5f263dbe8baf9d4296b2c543e4c4847271e7590374edf46234":int:96:hex:"06b2bf62591dc7ec1b814705":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #0 [#1] +depends_on:0 +2:exp:0:hex:"a41a297bd96e224942998fe2192934a1":hex:"":hex:"6827f2c5a0b7ecd6bbc696abb0adf556":hex:"f32041abd8543415cbac423d945dda5378a16a7e94d9ab5dbd2d32eb1c5048cc7c8e4df3ca84ec725f18c34cfdeaa7595392aabfd66d9e2f37c1165369cd806cd9d2110def6f5fad4345e5a6e2326c9300199438fcc078cd9fcf4d76872cac77fc9a0a8ac7e4d63995078a9addecf798460ff5910861b76c71bccfb6b629d722":int:64:hex:"49a4917eef61f78e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #1 [#1] +depends_on:0 +2:exp:0:hex:"a9372c058f42e0a1d019bdb528313919":hex:"":hex:"8d03f423230c8f00a5b6b712d426a2af":hex:"cfef4e70fcc1821eeccf7c7b5eb3c0c3b5f72dc762426e0bd26242f8aa68c5b716ab97eded5e5720caccc1965da603d556d8214d5828f2cf276d95bf552d47313876796221f62ccb818a6d801088755d58cfb751bfed0d5a19718d4e0f94b850e0279b3a69295d1837cba958a6cc56e7594080b9e5b954a199fdc9e54ddc8583":int:64:hex:"b82cd11cd3575c8d":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #2 [#1] +depends_on:0 +2:exp:0:hex:"6302b7338f8fa84195ad9abbacd89b4e":hex:"":hex:"e1bed5c53547cbc85f3411fbb43bb08b":hex:"bcd329c076e8da2797d50dcdcf271cecf3ce12f3c136ed746edc722f907be6133276ee099038fdc5d73eec812739c7489d4bcc275f95451b44890416e3ffe5a1b6fa3986b84eee3adad774c6feaecb1f785053eeda2cfc18953b8547866d98918dbe0a6abc168ac7d77467a367f11c284924d9d186ef64ef0fd54eacd75156d2":int:64:hex:"5222d092e9e8bd6c":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #0 [#1] +depends_on:0 +2:exp:0:hex:"78b5c28d62e4b2097873a1180bd5a3a5":hex:"":hex:"c93902c2819ee494f0fc4b259ee65dd8":hex:"e6b1192674a02083a6cf36d4ba93ba40a5331fadf63fd1eb2efa2ee9c0d8818472aaaf2b4705746011753f30f447c8f58dd34d29606daf57eadc172529837058cb78a378b19da8d63c321f550dfa256b5fd9f30e93d8f377443bfcd125f86a079a1765d2010be73d060f24eebae8d05e644688b2149bc39e18bd527bc066f2ba":int:32:hex:"eae48137":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #1 [#1] +depends_on:0 +2:exp:0:hex:"3d84130578070e036c9e3df5b5509473":hex:"":hex:"3b9b4950523a19c6866fd2b0cde541fd":hex:"a764931e1b21a140c54a8619aacdb4358834987fb6e263cec525f888f9e9764c165aaa7db74f2c42273f912daeae6d72b232a872ac2c652d7cd3af3a5753f58331c11b6c866475697876dbc4c6ca0e52a00ba015ee3c3b7fb444c6e50a4b4b9bbe135fc0632d32a3f79f333d8f487771ed12522e664b9cf90e66da267f47a74d":int:32:hex:"79987692":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #2 [#1] +depends_on:0 +2:exp:0:hex:"08428605ab4742a3e8a55354d4764620":hex:"":hex:"128f5f4a817e4af04113847a223adeb0":hex:"464b484ed79d93a48e0f804e04df69d7ca10ad04ba7188d69e6549ab50503baaec67e0acba5537d1163c868fd3e350e9d0ae9123046bc76815c201a947aa4a7e4ed239ce889d4ff9c8d043877de06df5fc27cf67442b729b02e9c30287c0821ef9fa15d4cccbc53a95fa9ec3ed432ca960ebbf5a169ccada95a5bf4c7c968830":int:32:hex:"3eb3e3a2":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #0 [#1] +depends_on:0 +2:exp:0:hex:"0dd358bc3f992f26e81e3a2f3aa2d517":hex:"87cc4fd75788c9d5cc83bae5d764dd249d178ab23224049795d4288b5ed9ea3f317068a39a7574b300c8544226e87b08e008fbe241d094545c211d56ac44437d41491a438272738968c8d371aa7787b5f606c8549a9d868d8a71380e9657d3c0337979feb01de5991fc1470dfc59eb02511efbbff3fcb479a862ba3844a25aaa":hex:"d8c750bb443ee1a169dfe97cfe4d855b":hex:"":int:128:hex:"a81d13973baa22a751833d7d3f94b3b1":char*:"":hex:"77949b29f085bb3abb71a5386003811233056d3296eb093370f7777dadd306d93d59dcb9754d3857cf2758091ba661f845ef0582f6ae0e134328106f0d5d16b541cd74fdc756dc7b53f4f8a194daeea9369ebb1630c01ccb307b848e9527da20a39898d748fd59206f0b79d0ed946a8958033a45bd9ae673518b32606748eb65":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #1 [#1] +depends_on:0 +2:exp:0:hex:"43b5f18227e5c74288dbeff03801acd6":hex:"f58d630f10cfca61d4644d4f6505bab629e8e8faf1673e64417f9b79e622966a7011cfb3ff74db5cebf09ad3f41643d4437d213204a6c8397e7d59b8a5b1970aed2b6bb5ea1933c72c351f6ba96c0b0b98188f6e373f5db6c5ebece911ec7a1848abd3ae335515c774e0027dab7d1c07d047d3b8825ff94222dbaf6f9ab597ee":hex:"08ee12246cf7edb81da3d610f3ebd167":hex:"":int:128:hex:"82d83b2f7da218d1d1441a5b37bcb065":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #2 [#1] +depends_on:0 +2:exp:0:hex:"9a433c612d7e1bdff881e4d63ba8b141":hex:"ce10758332f423228b5e4ae31efda7677586934a1d8f05d9b7a0dc4e2010ec3eaacb71a527a5fff8e787d75ebd24ad163394c891b33477ed9e2a2d853c364cb1c5d0bc317fcaf4010817dbe5f1fd1037c701b291b3a66b164bc818bf5c00a4c210a1671faa574d74c7f3543f6c09aaf117e12e2eb3dae55edb1cc5b4086b617d":hex:"8b670cf31f470f79a6c0b79e73863ca1":hex:"":int:128:hex:"8526fd25daf890e79946a205b698f287":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #0 [#1] +depends_on:0 +2:exp:0:hex:"8e9d75c781d63b29f1816859f7a0e0a0":hex:"a9f1883f58e4ef78377992101ab86da0dafcefa827904dd94dff6f6704b1e45517165a34c5555a55b04c6992fb6d0840a71bd262fe59815e5c7b80fe803b47d5ba44982a3f72cb42f591d8b62df38c9f56a5868af8f68242e3a15f97be8ef2399dbace1273f509623b6f9e4d27a97436aebf2d044e75f1c62694db77ceac05de":hex:"748a3b486b62a164cedcf1bab9325add":hex:"":int:120:hex:"131e0e4ce46d768674a7bcacdcef9c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #1 [#1] +depends_on:0 +2:exp:0:hex:"fe6b8553002c69396d9976bb48d30779":hex:"786f4801b16de7a4931ab143b269c7acc68f1ed9b17a95e8929ccec7d53413059fd4267bedbf079d9d69e90314c1345bc9cb9132f1af69323157ddf7533ced42b4b7bd39004f14d326f5b03bc19084d231d93bcab328312d99b426c1e86e8e049d380bb492e2e32ad690af4cf86838d89a0dfdcbc30e8c9e9039e423a234e113":hex:"595b17d0d76b83780235f5e0c92bd21f":hex:"":int:120:hex:"8879de07815a88877b0623de9be411":char*:"":hex:"b15dc7cd44adcb0783f30f592e5e03ccd47851725af9fe45bfc5b01ae35779b9a8b3f26fec468b188ec3cad40785c608d6bfd867b0ccf07a836ec20d2d9b8451636df153a32b637e7dcdbd606603d9e53f6e4c4cc8396286ce64b0ea638c10e5a567c0bc8e808080b71be51381e051336e60bf1663f6d2d7640a575e0752553b":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #2 [#1] +depends_on:0 +2:exp:0:hex:"14898c56009b459172fef9c17993b54f":hex:"e7ba6ef722273238b975d551f95d3e77e9b75b24c547b86eafb457d409803bdf6e1443839d8604ee497020e1a3dbd687a819b17fdde0fcf240ce2129792792a58bfcd825773001ee959bf9ec8d228e27ce1cd93d7fb86769a3793361b6f82bf7daf284afc1ece657a1ee6346ea9294880755b9b623563ad2657ba2286488a2ef":hex:"0862f8f87289988711a877d3231d44eb":hex:"":int:120:hex:"36938974301ae733760f83439437c4":char*:"":hex:"3fd56897a62743e0ab4a465bcc9777d5fd21ad2c9a59d7e4e1a60feccdc722b9820ec65cb47e1d1160d12ff2ea93abe11bc101b82514ead7d542007fee7b4e2dd6822849cd3e82d761ff7cf5ce4f40ad9fec54050a632a401451b426812cf03c2b16a8667a88bb3f7497e3308a91de6fd646d6a3562c92c24272411229a90802":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #0 [#1] +depends_on:0 +2:exp:0:hex:"fe5253d4b071793b081ebc122cc2a5f8":hex:"b57a0bd7714ae95e77fa9452e11a7ed4a2bec60f81ad6ddb956d4b1cb5dfc277dcb4034d501801b26733b5e08c710c3cfdccc1b208dc7a92cd7ebe166320582bcaff64cc943c36fbe7008f004e5db70c40de05fa68b0c9d4c16c8f976130f20702b99674cd2f4c93aeaeb3abca4b1114dbc3a4b33e1226ad801aa0e21f7cc49b":hex:"49e82d86804e196421ec19ddc8541066":hex:"":int:112:hex:"e8b8ae34f842277fe92729e891e3":char*:"":hex:"c4a31c7ec820469f895d57579f987733337ec6547d78d17c44a18fab91f0322cfe05f23f9afaf019cf9531dec2d420f3591d334f40d78643fd957b91ab588a7e392447bd702652017ede7fb0d61d444a3b3cc4136e1d4df13d9532eb71bcf3ff0ae65e847e1c572a2f90632362bc424da2249b36a84be2c2bb216ae7708f745c":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #1 [#1] +depends_on:0 +2:exp:0:hex:"b3502d6f0d172246e16503cdf5793296":hex:"09268b8046f1558794e35cdc4945b94227a176dd8cb77f92f883542b1c4be698c379541fd1d557c2a07c7206afdd49506d6a1559123de1783c7a60006df06d87f9119fb105e9b278eb93f81fd316b6fdc38ef702a2b9feaa878a0d1ea999db4c593438f32e0f849f3adabf277a161afb5c1c3460039156eec78944d5666c2563":hex:"6ce994689ff72f9df62f386a187c1a13":hex:"":int:112:hex:"21cdf44ff4993eb54b55d58e5a8f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #2 [#1] +depends_on:0 +2:exp:0:hex:"5fb33dd73db309b9dfd3aee605cd94bf":hex:"f4e011f8c99038c46854b427475f23488077ebf051c4b705a1adfdd493a0a10af7a7e9453965b94f52f61ae62ce9243a82a2dbf9c5a285db3fe34ed34ed08b5926f34c48171195f7062d02a6e6e795322a0475017371cb8f645cdcac94afc66dc43e7583bdf1c25790f4235076a53de6c64f3bc5004e5a9ce4783fbf639fad97":hex:"3f6486f9e9e645292e0e425bac232268":hex:"":int:112:hex:"7ee5e0e2082b18d09abf141f902e":char*:"":hex:"0503cb531f1c967dae24f16dd651d544988a732020134896a0f109222e8639bf29ff69877c6ef4ac3df1b260842f909384e3d4409b99a47112681c4b17430041ca447a903a6c1b138f0efbb3b850d8290fceac9723a32edbf8e2d6e8143b1cbc7bf2d28d1b6c7f341a69918758cc82bbab5d898fa0f572d4ceaa11234cb511ec":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #0 [#1] +depends_on:0 +2:exp:0:hex:"a958fe3b520081b638d9e4c7d5da7ac7":hex:"dfa9487378c7d8af9c8dbd9e533cd81503d9e4e7dab43133bad11fd3050a53a833df9cc3208af1a86110567d311d5fc54b0d627de433c381b10e113898203ac5225140f951cdb64c6494592b6453f9b6f952ec5ece732fb46c09a324f26b27cdad63588006bb5c6c00b9aa10d5d3b2f9eaab69beeddd6f93966654f964260018":hex:"c396109e96afde6f685d3c38aa3c2fae":hex:"":int:104:hex:"06ca91004be43cf46ed4599e23":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #1 [#1] +depends_on:0 +2:exp:0:hex:"ec319fb143eac8215b51541daec268f2":hex:"d298d988e74927736237eb8ab09d7a86b854fa2fd1f7f3be83b417ac10aa9291f4af5b3fbaf75a296ac32369ad57ded3984b84711953e477de3035ba430a30ffb84c941936e6c8d2cae8d80159876f87dd682747f2dccc36d7c32ab227032b8ac70b313fa4202ea236e3ec4d9e4d8b48cf3b90b378edc5b1dbeec929549344f8":hex:"8a4684f42a1775b03806574f401cff78":hex:"":int:104:hex:"e91acb1bfda191630b560debc9":char*:"":hex:"27ce4a622959930f4059f247d29d1438257093cc973bf1bae4e0515da88b9a7e21ec59c7e4d062035cdf88b91254d856b11c8c1944865fa12922227ded3eecccaa36341ecf5405c708e9ea173f1e6cdf090499d3bb079910771080814607a1efe62ec6835dc0333d19dd39dd9ea9f31cd3632128536149a122050bb9365b521d":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #2 [#1] +depends_on:0 +2:exp:0:hex:"14a3e69f351ac39b4297749a90c1365c":hex:"051224f7b208549dcfda5f9d56ce5f0a072ef1f23f3810c693516c92622be6ed4d7a9e0f9450980ba490b2e9e3468ea7eef10bc9ebd673d91f32b748c1bf2c50cc4ebb59fc409c6d780bba00700d563ce1dc9927a6c860095a42ed053f3d640debfbfa7a4e6d5de234af19755000d95e7f414f1f78285ee165410c020038286b":hex:"eb1c6c04437aa5a32bcc208bb3c01724":hex:"":int:104:hex:"e418815960559aefee8e0c3831":char*:"":hex:"797310a6ed9ce47cdc25f7f88f5dbbf6f8f4837701704d7afced250585922744598d6f95ba2eecf86e030cc5ee71b328fc1c4f2d4df945d1b91a2803d6ae8eba6881be5fe0f298dd0c0279e12720ede60b9e857ccca5abe9b4d7ee7f25108beebbfe33f05c0d9903bf613c2e7ed6a87b71b5e386d81b3ae53efd01055bbcccc2":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #0 [#1] +depends_on:0 +2:exp:0:hex:"c34827771fc3918d1cee09ba9401b832":hex:"ce79701b661066e53191c9acdaf677ad41622314898d7216e3f113e2e6e215d26d8bd139827f06ab3ea5c4105694e87db1dd6cec10e1f86a8744d4c541f08e40319e22ab42fc1a6c89edfd486b6f142c6bbbf84a73912e0b2e55b79db306ccabf839855afdd889e52ae981520c89e7dc29bb2adb1906cca8c93fcb21290a095b":hex:"2379bbd39a1c22bc93b9b9cc45f3840b":hex:"":int:96:hex:"26e1f6cf0d9e0f36dfd669eb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #1 [#1] +depends_on:0 +2:exp:0:hex:"b1f9bd2006ec550b7b9913d383200b5d":hex:"6d9fc8f586d50d6e0128172ae147844e80136905d3a297497a9566ca7c7445029028f14c9950acee92a5c12a9150f5e024e01c7505dd83937542b0b1288de9c292ae8ad918a09b2edf8493540b74c73d2794f2eb6eed18eba520ddea9567462c83330f33d7892fcde0b10c73a4e26ab1bef037cec7e0190b95188e9a752fee6f":hex:"ca28fa6b64bb3b32ef7d211f1c8be759":hex:"":int:96:hex:"c87aac7ad0e85dbb103c0733":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #2 [#1] +depends_on:0 +2:exp:0:hex:"8b2cef1a92aa0af2b00fb2a99855d5bc":hex:"fd09525ef3c65ab5823e1b6c36b4a9449a3975c5d3a9e7e33c61fb32edcbb8e8c915b6202e3fbce87d73cc3b66d83d9ea7e1e353cc7468f08626932cf0235563e2a28953ee5a0afadb1c3cb513b1f1fc9a8a6cf326174b877448672f7731dd6430a51619da1a169ab302da5af5b38802f8bbf5890b5d9b45deda799679501dc4":hex:"08d87b7acee87d884667f6b1e32e34d0":hex:"":int:96:hex:"3bd7685318010b0c5fe3308b":char*:"":hex:"583e64631c218549923e8ad33b728d07f23b0f19d2aff1ad7e20d564c591db0e117caa8f21e3f3345e3d84f0ccbb27274cddf9274410fc342cb2a5d4aea4e925d0dd5350389ee0dea23a842ff3f5c1198374a96f41e055f999cfbc2f47ceaa883da8eb6ff729f583eff1f91bd3f3254d4e81e60d9993b3455e67f405708e4422":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #0 [#1] +depends_on:0 +2:exp:0:hex:"175c306f8644b0c4b894ae3d0971505e":hex:"fbe7ced7048f83e3a075661c4924eb77da1b4d6019d504afb942d728b31fd3b17557bd101c08453540a5e28d3505aeb8801a448afac2d9f68d20c0a31c7ef22bd95438851789eef1bebe8d96ac29607025b7e1366fecd3690ba90c315528dc435d9a786d36a16808d4b3e2c7c5175a1279792f1daccf51b2f91ac839465bb89a":hex:"9860268ca2e10974f3726a0e5b9b310f":hex:"":int:64:hex:"f809105e5fc5b13c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #1 [#1] +depends_on:0 +2:exp:0:hex:"08c0edcfe342a676ccdc04bdf854b4b0":hex:"1fc8ef8480c32d908b4bcbfa7074a38e915c20ed7a1c608422087e89442d7c5af6fe9c9a716c55793248062d8e6c6e8e904e2804da3a43701e4c78ecdb67e0b25308afc6d9b463356439cd095cff1bdf0fd91ab301c79fd257046cba79a5d5cd99f2502ad968420e4d499110106072dc687f434db0955c756a174a9024373c48":hex:"4a7b70753930fe659f8cc38e5833f0c7":hex:"":int:64:hex:"9ab1e2f3c4606376":char*:"":hex:"983458c3f198bc685d98cea2b23cf71f0eb126e90937cab3492a46d9dc85d76bbb8035c6e209c34b2a7187df007faabe9f3064dc63f1cb15bf5a10655e39b94732e0c6583d56327e9701344e048887a81b256181cdfa9ec42ebc990875e4852240ddcb3cbc4ea4e6307075fd314f7190f3553267bd68b19e954e310ec3f8dbab":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #2 [#1] +depends_on:0 +2:exp:0:hex:"241067a0301edf0f825d793e03383ea1":hex:"6984bb9830843529fad7f5e7760db89c778d62c764fcd2136ffb35d7d869f62f61d7fef64f65b7136398c1b5a792844528a18a13fba40b186ae08d1153b538007fc460684e2add8a9ed8dd82acbb8d357240daaa0c4deb979e54715545db03fe22e6d3906e89bdc81d535dae53075a58f65099434bfeed943dbc6024a92aa06a":hex:"a30994261f48a66bb6c1fc3d69659228":hex:"":int:64:hex:"36c3b4a732ba75ae":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #0 [#1] +depends_on:0 +2:exp:0:hex:"03cccb5357bd2848332d1696f2ff90cb":hex:"5e2f18cbc1e773df9f28be08abb3d0b64d545c870c5778ac8bb396bef857d2ac1342ae1afb3bf5d64e667bf837458415d48396204fe560e3b635eb10e560e437f2d0396952998fd36e116cd047c1d7f6fc9901094454d24165c557a8816e0d0a8e0ce41e040ba6f26ca567c74fc47d9738b8cd8dae5dfc831c65bc1ba9603a07":hex:"e0754022dfb1f813ccaf321558790806":hex:"":int:32:hex:"c75f0246":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #1 [#1] +depends_on:0 +2:exp:0:hex:"4e5e53c84a05d5a5348bac7b2611cf62":hex:"489c00c05dec06f282924c680f621ab99ac87f7d33ebbb4ca0eee187ec177d30d2b4afb4ee9f0dc019cf1a4da16d84b7f5f5c7fce72a32461db115b5a5a433024fd5ed3d47161836bb057a0189ed768f95e45fa967d0cc512fc91b555808c4033c945e8f2f7d36428dcb61f697e791b74e5c79b2bcb9cb81bec70d8119cd8d76":hex:"47e40543b7d16bc9122c40b106d31d43":hex:"":int:32:hex:"81eec75d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #2 [#1] +depends_on:0 +2:exp:0:hex:"2c94008bf377f90b7a1c0d2ea38f730c":hex:"7b3d619d115de9970b2df4e1f25194940b3f3da04c653231e8e6946de9dc08ae5ba37e2a93c232e1f9445f31c01333045f22bd832e3b5f9833f37070fafb0ef1c44cc5637058ab64d9e07bb81b32852d4cf749a3ddbfdb494f8de8bb4e31f46033f8a16bc22e2595d023845505ea5db74dd69ab4ca940078b09efb4ff19bdb66":hex:"abfe92931a8411a39986b74560a38211":hex:"":int:32:hex:"47d42e78":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #0 [#1] +depends_on:0 +2:exp:0:hex:"69eedf3777e594c30e94e9c5e2bce467":hex:"5114e9983c96fecec3f7304ca42f52aa16cb7c6aadfb62ad537c93a3188835ca0703dad34c73cf96435b668b68a7a1d056931959316e8d3ab956bf64c4e07479c7767f9d488b0c0c351333ccf400b7e0be19a0fd173e3f2a1ae313f27e516952260fd2da9ab9daca478ebb93cd07d0b7503b32364d8e308d904d966c58f226bb":hex:"a3330638a809ba358d6c098e4342b81e":hex:"df4e3f2b47cf0e8590228fcf9913fb8a5eb9751bba318fd2d57be68c7e788e04fabf303699b99f26313d1c4956105cd2817aad21b91c28f3b9251e9c0b354490fa5abfcea0065aa3cc9b96772eb8af06a1a9054bf12d3ae698dfb01a13f989f8b8a4bb61686cf3adf58f05873a24d403a62a092290c2481e4159588fea6b9a09":int:128:hex:"5de3068e1e20eed469265000077b1db9":char*:"":hex:"208e6321238bf5c6e2ef55a4b8f531cbbfb0d77374fe32df6dd663486cf79beeed39bb6910c3c78dd0cc30707a0a12b226b2d06024db25dcd8a4e620f009cafa5242121e864c7f3f4360aaf1e9d4e548d99615156f156008418c1c41ff2bbc007cecf8f209c73203e6df89b32871de637b3d6af2e277d146ae03f3404d387b77":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #1 [#1] +depends_on:0 +2:exp:0:hex:"45cc35311eedf0ba093bf901931a7036":hex:"5dc8d7525eaad035c19714ae1b1e538cb66a4089027245351e0ad9297410fb3a0c1155407c10a8bb95a9ca624a9c9925dac003ee78926c6e90ff4ccdba10e8a78bda1c4478162a0e302de5ff05fb0f94c89c3c7429fb94828bdcd97d21333c2ee72963ee6f056ce272b8bab007e653a42b01d1d2041ba627f169c8c0d32e6dae":hex:"fed5084de3c348f5a0adf4c2fd4e848a":hex:"6e210914e4aed188d576f5ad7fc7e4cf7dd8d82f34ea3bcbdb7267cfd9045f806978dbff3460c4e8ff8c4edb6ad2edba405a8d915729d89aab2116b36a70b54f5920a97f5a571977e0329eda6c696749be940eabfc6d8b0bbd6fbdb87657b3a7695da9f5d3a7384257f20e0becd8512d3705cc246ee6ca1e610921cf92603d79":int:128:hex:"266a895fc21da5176b44b446d7d1921d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #2 [#1] +depends_on:0 +2:exp:0:hex:"9edb5231ca4a136b4df4ae22b8588f9f":hex:"493df801c57f8bb591955712d92d3fc34518f0599fec8533b2b4473364e1df4f560c12444cf50eeb584676b7e955c742189de6b50b8e012dfa6642f3679fb02bc6d8e08d1db88c8ae955a7946263e06494e17f8df246b672942661e5563302252208f2e00a0d77068a020e26082c291a75a06f63c41e2830292a418b2b5fd9dd":hex:"c342e9bdabe7be922b2695f5894e032c":hex:"a45c7f8032ac5144deef8d5380f033aea2786b0592720a867f4831eaccc6b85d3fd568aedc6e472e017455b0b5b30cf7a08ea43ca587f35e1646ecd9b4dc774d11e350c82c65692be1e9541cbd72a283bdcf93dc7115545f373747b4f8d5915ed0c42fbeefd3e9bd86003d65efc2361fde5b874ddabcf8265e6b884615102eff":int:128:hex:"5ed3ea75c8172fa0e8755fef7b4c90f1":char*:"":hex:"56696e501fac1e8d5b83ef911ed11337d5d51ff5342a82993dd5340bb9632e6606eef68ec5fe8cec6b34ebbc596c279e6cbc9221c4cde933f6d93ae014e3c4ca49593f35eaa638606d059519bac3a3373519e6184e7227d2aa62170c36479fe239cb698bfca863925a4c9fb1338685a55a6dfd3bd9c52d8ae12be8551fce6e1a":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #0 [#1] +depends_on:0 +2:exp:0:hex:"d5fdcb8f5225090e63fae9b68f92c7cb":hex:"d39b9cba95e3a3aab9bc1d03ff475c04faeb5b7f0510777f39e5a05756606eb7ddd154aac035d9ddaf3535629821dd8f014dedd52cd184f52fc706e3c89a3a271398c9125d9a624dafb297a56022ca2ea331ea7359ab5e65f8e14814788e64e0a886a9b1a0144bf268fdcf9d94c3d10a0452f40111da9df108252e9039eacea3":hex:"581c818282a0905df5ffff652e5604e9":hex:"f1ae6cd7b07f261105f555cf812a1d5bf8dd9aac07666318acffa11abb77d0238156663acbf7543825b45c6e9cddb481a40995ecd78bb5f4cba5df7c7efb00fc19c7f45e94d37697aca8ef368b99165393b6107f900194c797cd3289cb097eb5915f2abfd6aa52dd1effffdde448e30075a1c053246db54b0ec16eadca1c0071":int:120:hex:"827e66b5b70dce56215cfb86c9a642":char*:"":hex:"cec11a12e47fd443f878e8e9fe23c65f29dd2d53cec59b799bcb0928de8e2f92fe85c27cec5c842ef30967b919accafe0c0d731b57f0bb5685d90a3061cb473e50e8aeca1346d1f47f7db06941f83f21ba5976d97c28cab547d8c1f38387a04b8a0b212da55b75fbaf9562eeeabd78eadcbab66457f0cd4e0d28133a64cb063f":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #1 [#1] +depends_on:0 +2:exp:0:hex:"036198cd3a3ab9319684d0f811cf2992":hex:"6b95b9e82a695fb7b466ce3adb536f525d8314f95eada39efb49baf121093ce7d5439f0d8223e03530b85accd388a70650ca9f7e63eb32afecb7b1916ed9b762128cc641caf3e08e027c3d88481d653b6b15172e977dfb9b3f88465911aee162501cbf8501ce2b66ee151bbfdc23225f638f18750c239d62471663e5ee2a5856":hex:"47dffc6b3b80ffef4b943bde87b9cf3c":hex:"ec4de476cd337f564a3facb544d0ff31cd89af4c3d9a28543e45156189f8eff8f804494dda83a1fb2c30ce858884a01ec63db59268452b1eea0f0d48280bb7340eaacc84509469dd94d303774d053d7ab4fb5f6c26581efeb19165f8cb09d58ec314d09ab8356731e87fd081f661e7b2d1a7c3aa4af5448a12b742e7b210b0b0":int:120:hex:"6cf68a374bea08a977ec8a04b92e8b":char*:"":hex:"5c2f7c408167be3d266ff634e1993fe291aef7efae245fa0b6b5bde886a810c866ae6a078286684d1b66116e636e285f03646e09f3c4ed7b184e7c171ba84f3bfd9500c6f35964a404892b4cdcdd3f697fc5b01934a86019810987a9fea7efca016049873f1072f62df3c17f57ea1d88ccd8757f7e3c5d96e8a18d5366a39ea9":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #2 [#1] +depends_on:0 +2:exp:0:hex:"c9fbbff8f25f951ba874dfc5ff38584e":hex:"ca401071396da00376add467490abc6e6a7d8a85852026979f7013a09cf689113c8d833560cd6c5b8fdaa8fdd818e773ac13954839a0a2c91efeaf4e0e14de43308419a8b86fa2ae600a88a6bd39dfaabc16a3c7c1b77a5c2aab7f7caceb2f8595324125efbb7c96ba16c47d0bd10568b24bf445d72d683268466e68e46df500":hex:"1c1fc752673be6d4ff4cc749fc11e0fe":hex:"abfde0b60acfe265b62ed68ebebc1f5f725f155c4b8a8aeec8d704701c51ff7817060c1b0ce6b80d6efc9836c9ea2bc022ec67db4cd34e945e3a1b153fd2e0f7ac84bb4b07e04cbb529ee24014b16067f9f082b940c9d5e54024d3e5e910310457478560721587da7b5343d89eec5a8fce389c01185db15e7faa9a3fa32e8ab9":int:120:hex:"ff0b2c384e03b50e7e829c7a9f95aa":char*:"":hex:"239637fac6e180e71b2c9fa63ce8805f453d81499623ec2deba9b033350250662897867bffaf0c314244baf9e1fe3e1bb7c626d616bfbf3e0ac09a32aaf718b432337c9dc57c2d6fc4a0a09bdc05b9184d1b90c7193b7869f91e2caa8b3b35c10c6621ffae4c609bdf4e4e3f06e930541c381451ef58f4f30a559d2b79b0e6b6":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #0 [#1] +depends_on:0 +2:exp:0:hex:"3a314ec178da96311e42334a616fb38b":hex:"518b3f5384ab54f80497d55be7a5d6902bc7718386212c2ec7537db331514b3838f104bf9054e03039a4cfb73f41e5d0a9648e569ed738cea8d33917430dff6afa8f07a75e324b9262fa196a4439dcd66b0535ee5bea0d292600227c2a79ed03be0671740e5cb7b306d855612bd3abcbf02cf7e7cecbb6cdbb33d57b4e3234a2":hex:"d7ea27c819e3eb2666611bb1c7fc068d":hex:"db8dcc31a5681f13d56abd51bd2dcb0d2b171628186e215a68bf16167b4acd00c3441973c3fa62fa2698ee5c6749fc20e542364d63c40756d8bcff780269e5201bafdced3cdc97931d8203873431882c84522c151b775285d0a3c5d7667254c74724ff0ea9d417aa6c62835865dfded34edd331c0c235a089427672c5a9211c9":int:112:hex:"1e774647b1ca406e0ed7141a8e1e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #1 [#1] +depends_on:0 +2:exp:0:hex:"e818372a63b7e2c23b524e29ba752bdb":hex:"c1bf1b702a95ceaa6b48a1cdd888ae51f58a9fc3232bd6c784529a83301c6d0cdda6e605ad9a2563f54a8d59f624ae7c589e48b85041a010dcb6fb8739d43e79a456fc0e8574af086df78680460c3cdc4e00dc3b9d4e76b0de26e9aec546705249fa7e7466c01001c2667eaf2813be1f0f116916f34843a06b201d653aa1b27e":hex:"36e617e787cb25e154f73af1da68cb06":hex:"71801d69796c2ce36b043c157aec9fd2e06fd1ec596126d10c26b6d44e3dc36c4fa30a030d65c382b6ddfd958e71fe9c16732e595137a3d6764c15480fc3358e9a113ba492b31274663f5842df5d1cc6bad70e83b34675a4411e2e70755aede0ff5035601be130562e27a20283d6f144ff1bdb5276dec05fad80d51b28d50688":int:112:hex:"3744262bc76f283964c1c15dc069":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #2 [#1] +depends_on:0 +2:exp:0:hex:"9a04f16882ff45816739d1b6697ce8b7":hex:"6a4f3dbb3371f64258fd1f831349e745a4e19a33aad794b1de3788729618beed619586092120e9e5dc3ac6e0d52f991f7be61afbfaa4399ac716ad79a2734827254b1627791dc92a128a6f43426b8085dee94242e83176a3d762658f18ecc1e37e3e1531648c9caed212ea2cf3b3843cb92cb07730f30fe2dca3925470fadd06":hex:"66f504d9a9128ad7fb7f1430d37c4784":hex:"f641c53c83c4fb1ff8044bfa97cdf63fe75d8159d65b3e5ad585b89c083a53cf4a2f7a58eaeaf45fa71f2c07bc5725a6b03307d7f32884a133a4c803700bf1e12564b98b71f63b434ddf13ad2c467dda25ffa6effcafa72452b20c34cfae71e47096f8745b487e9f1945f5bec83f7ec2709a13b504d92315b1b727a78902be84":int:112:hex:"fbb37084396394fecd9581741f3c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #0 [#1] +depends_on:0 +2:exp:0:hex:"38cf029a4b20607030586cd2d82146e6":hex:"f4c9f4476561c9ebdac71b282ae6e2f9f03547da98e66d4d857720db2fcc9ed1f363858db34c9dcaca0109d7c81db24150493115f2bb6985efa8686e3d2ab719d33b230aa4c5c70696bf42f225fb3c6704711c054a882d89b320884a78cb59cd2100496edf4010487597fb9135d8ca79693a43843e9626fd6c64a8722b3a27dc":hex:"6330084319e2bf32cd5240f4826944bc":hex:"80746cfb0127c592f8164d751b0e14a5b379056a884cece7ee4e9b80538d7ff6be56a3b19c135786722aaf315123b47672b0251e87ea45f0fd3601cf93f9efa6cbd9ad537f54d57f1e187f821faac24096ecec19d137c9f4cf145c278af4cd8de01c7758784fda06f1cc62d92ae1977786f3d0645714ab4ab6f48c8794b12f73":int:104:hex:"7b021de5cda915ba58f90ceef4":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #1 [#1] +depends_on:0 +2:exp:0:hex:"cf4d81fc5997c744a572bed71f4ae609":hex:"f3d65d70326e641fbe7fd945fe9cf66c74f17d0d1020ae8ac488f39b7285c99d8632bc2201960f3d77daccfecc04428abe0853aa8d82b90a93127c72b2d2af53f7f1bd0afb99d50f0b3b24e934ec98eddb278b2c65866442cebf10208c7ce1b7ecf764858480b2a269b106fa6d2428d5ad17612e53e62ccc7ad1184663aeb9a7":hex:"bc4e20c56931c967ce8e3b8f5f1c392f":hex:"b6b8294abf7da5703f864721f7904d3821f5568bf4b269e44edef4f1c95ddc172d83a06c0ad9f7f1fd2e292c17a876392bc5bb705d370b2f16ff721bef7648f423346fd3a4d762676e6fcf2d690553a47224af29afed0f452d263be90eb8150a13d720f1db6f1abc1c2ec18cfbf93b8ed3c5aa7cfc1dcb514d69f90409687a4d":int:104:hex:"0a86142a0af81c8df64ba689f4":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #2 [#1] +depends_on:0 +2:exp:0:hex:"d88ad40b42ead744f1b7a36685658be1":hex:"e99d2566fe6bcb2a04d167605db7c0f1e5567ff2d8d3292c15bbccc5d1e872bcb15a30b3bb8b1eb45e02fba15946e6bca310583a6740845a0f74f4ebfd5c59ced46875823e369e0447cc3e5d03dae530adf3c9846362c94e7f9d17207bf92d4d59981d8fd904eb8b96a0a23eb0f8d7e7a87e8e8892a2451524da6841ce575c27":hex:"52c3158f5bd65a0a7ce1c5b57b9b295e":hex:"dde2663335c40e5550ae192b843fa9fb4ef357b5c09d9f39dafda3296a4d14031817ee4dc1a201d677597d81e37050cd3dc86c25adbd551e947a080b6c47ec7be8a927ef7920bd1bb81f2c59801a2b9d745d33344cbe4838bcf2eb8dce53ab82c75c9bbab8e406597f6908aaa81fbbdef25aa69116c8f7a8cdc9958435aa32ac":int:104:hex:"7643b3534eb5cb38331ed2e572":char*:"":hex:"6f87f6be2f4e7421aa26fe321045d1e23066a02158634bef35890581c92367d0bc232940de30974c70a66c60137a9f3924d12db1e5bc1b0e7131ea3620a25eb805b7d670263b82c8bbfcd6839305025390fc17d42d82daebe1b24f73ff9aa4617e3866785dded88f8b55ef89b2798ea2641a592a46428d9020f9bf853c194576":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #0 [#1] +depends_on:0 +2:exp:0:hex:"c3ce86a212a30e724b4c624057db4e79":hex:"3582ef7a9565c9a8e4496750ee5ca3e3a80df6238f7b7608e3394ec56d1360777921da039ede34abcedd01081babd496ba4de74a7de501181d6bb2022a6cc7f79d89a4c6a97676fb0f2b42f70e2d0bc1eaac364c3646df4f611c1d6b09737451b81b5a4da73c05fb58391c74e44498b80b26f1c29562d23c39b5d3f086b280cb":hex:"9e03f0dd4cb2b3d830a6925e4400ed89":hex:"92c48a39d93ea3308f55f6650d33fdf17a902076d582a94a82ac99496de9f62312292b844bbca5a683ef0f0710bbc1c7f89cbcca8f9c0299f154590d32059bd99fca5d78c450ede0d11d55075947caf2151218ce7a06c1e81985a7781a3444054170b457fd7ba816026310112abb47c8eddfd3ab7f679a0f60efc6c6dd3b759e":int:96:hex:"3230fe94b6ccd63e605f87d0":char*:"":hex:"052347a4273cddba65b2a0b961477f07edee440a9117ab204359d2dd45ad2a6dad3b60ead891e7da6d79f3017ac90f95725a0089f04d25ce537bf53b7ea8e1ea58692d34c221db141e2a9fd7211adcee03ef8b5bf3c5d36311d20bb3d81f70f7e7272d0e2b6d12293b1a2c31b70f140a8f08d98c6231a3c429c3d0a10b2e1c1c":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #1 [#1] +depends_on:0 +2:exp:0:hex:"a0155360b84420b5bf4fb410ea02f31e":hex:"ecdb51522fc440f7471ea6a31f7c1ef1ec2153e5bcf6303297dbf8ddb3830b45ed9866157375ce4bdeb5e32fcbc6607984fccd7e6552628736608ab13072856d432ceccd3e90d1bb52ca9ada9cee90eb89ac10e887a1978fd0fb3d7bb20caaf35539e150be8044b725b8427c4c4a910f79980865d36344a8784bcc3d58460acb":hex:"46f0386be7363887e7e357376305eab5":hex:"611bc290f91798ad84f0a5ecb5a7cb8fa35e9ab6a5a51c9869a68a076e96f92c9c117595f92cbac5d33343fa2accd2541473907cbc54792c5e215ae857424c921b04ca4b81376bbedbfcc0e565c118f2aced08f247698eed5e2d202c48245161cabeac9fa195219f9799fa253e339561e13012167f1d02b4012b7791b7c863ba":int:96:hex:"ac5addcc10cae6c1345520f1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #2 [#1] +depends_on:0 +2:exp:0:hex:"694f621f594d96b16c32254ff06f3f9c":hex:"e61476b8b7f101ca6005f25af2b9bee795d62720bbbf59357057ca7cd473e00f0d465255fce8d6164657603323549fb4e3d33fa51054b1a70cc7e492916dea85453e9107fe781bfeb4a622c5b2306a8dddef99386dc50745003aa7220cd7f32fb0a060fa7682576769a48f9169c7d11fe0a8a61b95f5d6dfcf216f7d0c652a84":hex:"542db4e107485a3cd24c7ad337a4f1b5":hex:"27b7bfa5eb34ba376e515e58ab8b6556c396820d0074a1fe3b984945dcf5251ca450456ccb4bb66ec739b03fdc5f72d24553e843255adc012d1f1c95aa3cdac5d12926465354217203052cbd4869a8b5be2e01d0fe66b5a6a8da0a2ce351557e2991ce77baa812b9c67b8e1c5a1fc348710e1a73a0fd49acfd538b7db6bef8b3":int:96:hex:"0bdef4d771a1740381e7db97":char*:"":hex:"8b27a338fd2153d304f04655e09bd9bdf4468890ecce1e3b51de2c9a25a8d9336a9acd753ce270b1fe8d50196feac68145e0fd59c9cb3aa7c1e8af03494bc4279c6e287c849f3c775ada584ae173100946ae6921ef7c96bbc6f216093548702cf1867bb1bf1f4c9e90a34230a2b2aeb584622dd615023a43a406e64428bd9170":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #0 [#1] +depends_on:0 +2:exp:0:hex:"78826a5215a1d5e1b39cad5a06861f8f":hex:"0fe2c798d7015d3e2f8725648d95729c45d357dc0c89fc63b9df5a68d3e65419540f663e9190793a29c58c495d5c6a731782acf119e2df8a96fb180ad772c301d098dbc5e3560ac45b6631a01cef7eed6db51f223775d601d2e11b9baa55e2f0651344777e5a03f6738a2013626a891b5f134f07b16598b8cbe3aeaefa1c2a26":hex:"feb9d740fd1e221e328b5ef5ed19eff5":hex:"ca9411b368d8295210d7a04da05a351d287f2f67d978ef1bb936de9f8065473f6fa11495da2eab13a1002231c86411d5409bbc718e2042ee99e013b1df1ef786e9fc1f2d43293c854128184efb9317c4ef82a002eac8b28fcd91d8a714a3aa25fc3c0ae4af9f4bcf5ad19a30cd8ec4b1785df70aa92074da419abe433dd4c435":int:64:hex:"a724bbb295a02883":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #1 [#1] +depends_on:0 +2:exp:0:hex:"d450f5253251121606e56687952bf2f1":hex:"479b4f421bd8ac7f615c4a507da187cb5d4b1f1e2c6113d1f9678c1ba92dc5e17c5b525d7f3208733223eb82af0820b8476e9b08ca714ce044417b24d2238720cb8ffdc69db558cbaff52e3651b400e16c9d5ac8ed8949a19c35516f80394a04bd1cfdced7b204f779d792086e00b2ebca2f55a1140e85f5ee9ac7cfc5a31747":hex:"fe7ff90b020fc77d7fcd90bc583850ac":hex:"a3bca9ff25a60006eb18f993dcdc99681e414e27605264dfd25652195d7fe1489550afd07fc7346b88d93b59eb6642913646e93bf50ee1db5dd30106cf181124d8ad01c72ed99038c9798620abdf5c78c419b08c97f982b34d9e9105d9aa4538afcd37f62e2412f14f7a248fcd60abaf2b66cd4554767f99030f1a495d56a5ae":int:64:hex:"6446398aff73ed23":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #2 [#1] +depends_on:0 +2:exp:0:hex:"90a59f6b0abf932311f0b65623c17740":hex:"be5a948a771a8df12adaf74d702f064a75f6483c03203365fbde7d184844fe6dee0b84cf344be05b1d163817ba1516fcb87b9167ed81f884ada73b0058e2b38cba515bbbe462f4c21f8de1d41bca2cf4340aa659f9f07886c2bb620d9c3295318c07fa3c17fe8242409359c08bcb337e5cf268880839b6a20f4ee4b3f04e7024":hex:"20778bea82a6717038e7064f48a31981":hex:"4022d04f1454a72d2efe57533bd32757595220b20f3a37d166cec0412fb1eb2588f939ecd906c805f4827338669888e9f730905001eb1b136b95e306edf70d9ba1e5cd0aa13a25a1f28ab55cff36f9cd7036c735e3b285d26002ad2ed1074b566e252ea3ec8a9ce10882375dc3f1d9676e301dcb179eaae991120b796cc35648":int:64:hex:"dc77c1d7e0902d48":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #0 [#1] +depends_on:0 +2:exp:0:hex:"6be4ef629f0b38194c74f7b66418922d":hex:"b67ea20a320f4ec0e4185c62a4ad79a3c97a8189a5e4d1deff9d3edff0f9a9323532853c1a2a2c1e62e4d1afebfcdf1d8461921ea601750380e63b912d8b7389198f976851d88a19f1aa32c97143668ad00838d98da1c4f2be0e6e2dc964d170d7f7ad2e2997982e5ca110e744b6e10c24ca18eadff6b129b1f290c8a7e0a593":hex:"fb77a4b9b246271abfc656433f87628c":hex:"e5d5227725a19a3050fbf2a97a6e854bc1218b94a4a3403b721ace3447daff68fff5553a26edd41219e68fb61fb9e964d0a3c29796251ae4eb942187cdc55d13a09dfb487e93d9e2072d7271456a77c6ccb81154443eea176314d6e3a08619b52cd880f1c28ae5214ac0090a3855dbd74f87389fe8afebd464330fb683dff81a":int:32:hex:"3d8fc6fb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #1 [#1] +depends_on:0 +2:exp:0:hex:"c50e37244931e8debc12b3d561c83ba2":hex:"b9abf0796f2d2f774735546cf809030f65ed0c7f6bd469ef2fe0ef32aa0225b57fbce07c36017bbc1806a81ff1a429278160a07643f864485b4e0e35d57553dc1a131e32aa10f1f91d663b10f0a418f472ed7b4bca54fd7ffdbb22c4d7764d94a7ffd04730614459431eb64335b9b65363de292c04275d40a7b968c0f5c486e9":hex:"6c0b1fd7ab424a6883c36457d1b5521f":hex:"516dc25f6452ae169ce293c5cee440de47353ca5ba770dca0f04175950e87a2d4c3f84fbc6eeacaac436853492929680066f959e74de4b736ab924d8367b90aaa6e9492561ad4b5aa78b6737d562e960edc3b983e2e01a186e9f22896f48d8dfcfb6a42cfe2c6006c687a27772820a1e8875bdf09e8104248ce4db883376bc04":int:32:hex:"7d4393f0":char*:"":hex:"962509e494f10269b70ebad02b0cd799d1d41191a734863ef502aff3d3ba48dc2acf9da9a3fc3f40be4d210dc5e128bc00499aec57aa0a4669863165428687b88d46fad41e36af8ea6605586eaa5c0736d0d53b9d523e0cb5a0b285048e060a73cbf4b587d2cd787debdb2b4c8cda731a61a15b19fe8b561fbdd3a7373853ae1":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #2 [#1] +depends_on:0 +2:exp:0:hex:"8531ddb03977383405baf2ee9ca7d64b":hex:"d90c9e26509bdba9b1dea8d2b94f2b1881d22c2bd756ad23cd61944710a1c1f2807170ed47a6870ae654e44757fcb3822ef28b37946cafc07284f8a0c22ae3552954f0d87b8d8c825bd546935b494cacb4262d9e2a88f254f200ad31367d8b3715afbabea5f34214ffedb14d7c84806022aba2dc8f88a314ffbb24017d1a9b9f":hex:"baf623867d6a25fd85d1f08e599c0566":hex:"18f92cdd37dcd7f99b06838f3f68748aba367baabaebd0da9ee787d70e752fa07dea553a43b643b8d8f460175c0746675205e20a7a98acfcac864d7c4cf5ab4c41c031738c76882acda003c5af47b1c4df8894a827a317935d970d4afaee17715c9cfd1883e8c345f19d1f89e229b8edba6b4f53b86d8da1c0f159afb83b6b33":int:32:hex:"2fc9de46":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #0 [#2] +depends_on:0 +2:exp:0:hex:"862dd5b362cfa556ca37e73cff7f4a0e":hex:"":hex:"81530a243655a60d22d9ab40d2520447":hex:"":int:128:hex:"3b9b2af54e610ed0b3dda96961dd8783":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #1 [#2] +depends_on:0 +2:exp:0:hex:"3452b7bc100c334292e08343f139b9d0":hex:"":hex:"8f92739a30fe4ba24079f5d42753d6ac":hex:"":int:128:hex:"0eeca69f8b95e1a902cc3ab1aaa8e2af":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #2 [#2] +depends_on:0 +2:exp:0:hex:"31a0cbaf21b943f8badc939e94eac7eb":hex:"":hex:"d5bb2c4eaec47088230972ae34fcda9c":hex:"":int:128:hex:"580e728512c8e44fbb3fe2c498e05323":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #0 [#2] +depends_on:0 +2:exp:0:hex:"9e8fca537746e7cbff97f1dcd40a3392":hex:"":hex:"43e9f2bf186b2af8cc022e7c7412d641":hex:"":int:120:hex:"4465a3f9d9751789bcef5c7c58cbc5":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #1 [#2] +depends_on:0 +2:exp:0:hex:"35b5854ca83792ad691dbda1a66790fb":hex:"":hex:"cff61cf9b32ea30cf7e3692aa6e74bed":hex:"":int:120:hex:"726793199df533dd9055b0ac7c939d":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #2 [#2] +depends_on:0 +2:exp:0:hex:"07259267c1c6a015437a5d8cfa92f9e6":hex:"":hex:"18b9cf2ad7ace6ec1c8366b72878cf20":hex:"":int:120:hex:"4340f6263f0ba2d82c2eb79cb0cc7e":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #0 [#2] +depends_on:0 +2:exp:0:hex:"fa1df8955aa3ef191900b06e7c1b7d46":hex:"":hex:"6928c138c98a4350c318fbdccd3f44ba":hex:"":int:112:hex:"7c89d9e77515d271b6ed54c9c4e3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #1 [#2] +depends_on:0 +2:exp:0:hex:"c04200ce41ce77d772babb206315ec7d":hex:"":hex:"a885d58f0f38f9ff26d906fa1bfb12f4":hex:"":int:112:hex:"9ee0d025421f2bf18caf563953fb":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #2 [#2] +depends_on:0 +2:exp:0:hex:"650df049461be341c3099bd1613dcead":hex:"":hex:"8a4ff6327b49d297248ce2d5bd38afa8":hex:"":int:112:hex:"13f067ef0d7b448d56e70d282fed":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #0 [#2] +depends_on:0 +2:exp:0:hex:"ee61b5bf5060fcc637dc833926898508":hex:"":hex:"b2dcf21f9ffa4a883044d29f087f9b85":hex:"":int:104:hex:"9ab1d66666d4dea3cbb5982238":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #1 [#2] +depends_on:0 +2:exp:0:hex:"01cc56ca7e64db7fbef66236a5c49493":hex:"":hex:"8ea5b63004189792cc040ef18b37e550":hex:"":int:104:hex:"d685aeb54aa129a21bed17766e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #2 [#2] +depends_on:0 +2:exp:0:hex:"134dd72ac8e28ab46720c2f42284a303":hex:"":hex:"c6368e4c0ba0ec90fa7488af9997a4c7":hex:"":int:104:hex:"4ad9cdf19ff7d7fd7e273efced":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #0 [#2] +depends_on:0 +2:exp:0:hex:"180c04b2bde6901edcda66085f73ecd9":hex:"":hex:"9193b206beade4cb036f01a9db187cb8":hex:"":int:96:hex:"530f5e9ed0879ccef3a7b360":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #1 [#2] +depends_on:0 +2:exp:0:hex:"aaac85742a55ffa07e98106d6d6b1004":hex:"":hex:"630cd8ab849253c4da95ac80324ecc28":hex:"":int:96:hex:"37911820c810e3700c3a9321":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #2 [#2] +depends_on:0 +2:exp:0:hex:"ab663c4f8f2fdc7d5eabf6ef26169b4e":hex:"":hex:"86e6100669929e329a1d258cd3552dc9":hex:"":int:96:hex:"958d6141f7fb2b2dc7d851a6":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #0 [#2] +depends_on:0 +2:exp:0:hex:"0dd756d49fd25380c4026ea03cafc2da":hex:"":hex:"6a6f7e39b0d730ea1670e13d16c12c28":hex:"":int:64:hex:"872ef05a28da5ea1":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #1 [#2] +depends_on:0 +2:exp:0:hex:"bd8a834b288bdc7578b6c6ab36f5d068":hex:"":hex:"aa77de0af5fa4dd1ed2ada5cb94813a0":hex:"":int:64:hex:"c5c094e83755f2b6":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #2 [#2] +depends_on:0 +2:exp:0:hex:"020d280dbd06939bbb5e6edc6f6d39c6":hex:"":hex:"09aea6f0e57598452719d6f63b6fe5a0":hex:"":int:64:hex:"05d6c56ba601e85b":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #0 [#2] +depends_on:0 +2:exp:0:hex:"e47f41a27a2722df293c1431badc0f90":hex:"":hex:"227c036fca03171a890806b9fa0c250d":hex:"":int:32:hex:"86c22189":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #1 [#2] +depends_on:0 +2:exp:0:hex:"9d3e112114b94e26e93d3855d4be26bd":hex:"":hex:"99b98525160c4bb2029da5553ff82b59":hex:"":int:32:hex:"33bee715":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #2 [#2] +depends_on:0 +2:exp:0:hex:"5b4b7688588125349fbb66004a30d5d4":hex:"":hex:"b4ae363edb529d8b927c051cf21a2d9d":hex:"":int:32:hex:"6a920617":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #0 [#2] +depends_on:0 +2:exp:0:hex:"c4b6c5b8e21c32f36b0ae4ef3b75d5cd":hex:"":hex:"3d1036bf0000e6f1b77a799f2ef32dec":hex:"1cf2b6cbe86a87b4b5bb3cc50024aeb27c48143658d47b41f2f20b87ed67bd6fc3b85a3a803f66d3576608f5d6ce6cad11e02fe12de5390722dccb8242e1dd140051bef51aa9716c860d45d45bca6effbb1a4797e6e7406a04db5d823766c0f011ebc28e9a8cd4446ec8a75ea8bdc1b2fdbb5cc364fa9877886e30404593df34":int:128:hex:"a49725014c214ef7cc2d28b9b2b53da7":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #1 [#2] +depends_on:0 +2:exp:0:hex:"63c3f81500746eaf383fe3975d84f849":hex:"":hex:"0799d4152fd73c1604b4610cf7171fe1":hex:"cb8248e5f904cc9ccccf6f273fe621eee1b4d7ed98480f9e806a48b84e2d6a733772ecf8fb7fe91805715cddab2b462b89f6e6c7cf873f65031f13c357d5f57b00b7c391c39e78ad1ed94be236ca0ae316bce11bc33c5d701fdfc58abbe918b9c42f7b3d6e89d46f9784b388a6e6daf47730b9fa665d755a17e89932fa669c44":int:128:hex:"c53d01e53ee4a6ea106ea4a66538265e":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #2 [#2] +depends_on:0 +2:exp:0:hex:"b0c88b191ce6e8e4a3941f7960b7eae5":hex:"":hex:"e2a899961c332c815685c553351fa519":hex:"308bf10570af48d632911f3641dea60d78046211c01a63bb8e4e5cbddfff8841d2f2b11e18ccb2170805ef4cacf7804d64e0feef40731a1704907f33b77788c18ccf35b224ec3046a67664ac9a3481d2385b6ddeec6da4f32423f94ea9663a5c51cc388cef33744a8159b4fb654dfdb5092718bf926c824be31197f07f276b5f":int:128:hex:"92604d37407aff33f8b677326cbb94fc":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #0 [#2] +depends_on:0 +2:exp:0:hex:"c818dfa0885a09f65ef78712f5ce6609":hex:"":hex:"ca279284723530fdd68ae880e0ce775c":hex:"2a562abdbb483ca5f355f9cc1c5e607bdd624a078a76b717ce0f8f35d0d4c54b629f372f15d20c848d01420c6af5a7040d42063704a17b46259dcc53723caf2d4bf556143ff9117c752fa4f22c9c155c99b7bf5949d089cdafd562165b9cbf53ff51cec21f49128c8a599718bbcdb4a5d705d20509c44c8945e2a133164b9942":int:120:hex:"20e9a3a98d71d460743e1efaab13c6":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #1 [#2] +depends_on:0 +2:exp:0:hex:"2354c6b6afaa883e7ce91faca4981f8b":hex:"":hex:"604f2730c756c8c39a0527093bc2feb5":hex:"959b4b0b9ce2e9120b327d2d090117553999ee10bdd384a546fc6de0957ef4b447daf07b3d07ef7dbc811f36b0fc09a175d26e4d1263cb5e21eda5ecab85d763807bb20b3cb6ac3f31d548dff00aae058d434ebcf6f7e3a37f11324134f453dd0ea7f51094863486426ff1706129a5a93c53d8c5ccb56cafa5881981fe233cb0":int:120:hex:"3588c9aa769897dfa328549fbbd10a":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #2 [#2] +depends_on:0 +2:exp:0:hex:"b0af48e6aebbb6ff5b7c92bd140b085f":hex:"":hex:"d210d6502a5221ac1274a9c7f5a81725":hex:"d725311ca10eb4b4aa24e6dd19c5e72dc34fc1ff53feb25d924a9b7d8d72205790ca4b1275bd93ad60c27a5587a45659bca07c111e9748fb683a03465153ffd735b7d134b479674ab8596f0596496fe2090f623fd1e4dd730c5283d8b172db8a25df42d9b34f388ed32676a56b8ba03347e47379702654508ccd0a21ff03516e":int:120:hex:"e6222f068a1e18f09ba6c771eabd86":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #0 [#2] +depends_on:0 +2:exp:0:hex:"a05fe482fe164b2eca7f6c3e377b39d8":hex:"":hex:"145327bcc10335fccb93afbf4b17e6e7":hex:"ea6f2e93b5e1bf127d40440b8d6397405246b1b48eebe16964f18928f6b4b8ee2c36322d7126905c1a5b816996e340404b586edc2d77afac11a6c1266511f9eff1a320b035442d4078f8e42ca63cf26d12a971a7adf4645d1bd9a8e4d0a20722f7c2d529beaecc4033f7738075e1cdc6d8a929da5582540678935b82e7b7ba68":int:112:hex:"3900bde9fa9ae2cbeee54d04f224":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #1 [#2] +depends_on:0 +2:exp:0:hex:"dacbadf819eb16a63f6f091d13ed04d4":hex:"":hex:"b9ebce724b0dcb0989ac2d8e7ff8aaec":hex:"7dc6e2189d8a96f3507e352e05e8fd1b4bab988c2f1c706115887119f63b78084f015d85f6b460901a02880103e4d36e8f6527dfd74e4a3acd3f578c0cc726b528875f701ff8b66e5c11b4689c346a098e123bebfa253362cb86829be73c2b85a6881fa976aa730fabb76775027feec7fd920a6c8965a4a509ea812d7c413a95":int:112:hex:"8988fca83c8cfb1f8feefac46f04":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #2 [#2] +depends_on:0 +2:exp:0:hex:"969244c7444f3f3bf193b28f8e8e96dc":hex:"":hex:"49b2845a1a1c87fa66eb8f78c05ac029":hex:"1414a07e86d8b61d1eff43e1ff4ab42c1c95e159058b74c731e3007d21a5eb78bc17b7e920363a3974aeb8608813dc9a4655199b6703ed337450702d8ab16a89776831b2c7c811fec3acc23598a0aa01680a7bf42a4e258145beb08c9f0eacf2bb5f56d26bea3ad11e1a956a630b80f3d22bf35592b4704f7c464b08b06dd7f8":int:112:hex:"a291c7527385f037f62e60fd8a96":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #0 [#2] +depends_on:0 +2:exp:0:hex:"525abe490c8434802b69439c590a5290":hex:"":hex:"141f79f0501316e66451c41c7af0f0cd":hex:"be440db66d3f81be467605a7b2805ec1df5e71e1b1b04bd7a4d05e912f5aa1912ba08de72df18613b32b7edf78963c48c80c25178b3b19262b85bb829f5377e0b368b500d6d3b442f54172d4ca4500eb5b4d478b602e5dc11d090539455087ce1e5b9ea74355fc06e9b60cbf25a9804d3f8c623fff130abc48bc2d8d116b8366":int:104:hex:"038c7e95f790e6ca5ce73f9551":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #1 [#2] +depends_on:0 +2:exp:0:hex:"51644e025659de983f5c8156516b812e":hex:"":hex:"614837c743d0974e9cca497f13038c02":hex:"60c5d062ade2c5c2dec68b734dd3e58ec474a586d1c4797fdfa2337800510134cb27a10d501927632af3c1febc275010c0d2e5abee630cd2bc792963fa82a42286ab047b934a261927311b40f5f953bfd661427921147cac7613d95ee86e16326ef67c1ed097e8fb87a78753d785de34e03a182232786079cb6be00182e41c9e":int:104:hex:"77e3deba2c7f9386f85bc4a801":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #2 [#2] +depends_on:0 +2:exp:0:hex:"08566ca7310302dfb84d76ea0525ba20":hex:"":hex:"5f20ec9c35c08aa7f1c0e8a20fdbd2b3":hex:"5d84e32768b8d1e7e3c426b3118d48e35491bf1bb454b359c8429220216efd8826be94fe1919409a128ccd8125a594f1691c9421fc3dbbb3f757bf2355bb0d074ceec165eb70e26eb53fa2cb5d84dfae06babb557805ef7b8c61c1bc76137571bcc5e84bf5987dc49013831d78bd497ccc49cde7dca2cb75e7ab967da8c6ce81":int:104:hex:"873f037fc05252a44dc76f8155":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #0 [#2] +depends_on:0 +2:exp:0:hex:"dfb54db96383fa911bf5b4fa1218ef9a":hex:"":hex:"7e849e24983f63f1194b396bbd2d55e0":hex:"d3fb689c5818810dd104693f3306a10b27178444af26798a194f7c2ab31ff3a172904b951942b1a26c8ae5b5b1ee2d86dc78bb72a335fde350766d7d9aef6f549871dd46b04b2cc319fcdd47be437d431ad18cab82d51ca9fa57f4108a8de622a92f87d28c0349fab27757fd773413f559a8c00d30e258c1f6cd96f9759bd957":int:96:hex:"dada7fc7fed58db462854ef6":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #1 [#2] +depends_on:0 +2:exp:0:hex:"389cf888474e9403e5f4d0e22ffec439":hex:"":hex:"ef57794cf6fac9f9cea3e8499b53b1d6":hex:"7ea7f7f4763ad208eb6199285b6b2819756c4e3caf2d0ac6f5076ae6785fecdcc4b138a51860ff8b87aaac3a18c2df778a4818308d458dba28f5017513e1454f60be20dae68736ea6d48b1f9deadb517df63140acbd329fbfbc9b82f3ca1862c9e998f0faff1d3ae60b005bf66829f5cf0c5fa03efbdd92d39351e3954be0257":int:96:hex:"92726d90ad26130e65f2beb4":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #2 [#2] +depends_on:0 +2:exp:0:hex:"e55abb2ca36c822bf2a030ac703cb8b4":hex:"":hex:"d86f7177e8ec90f9e9edf10175d5012d":hex:"777a9d93091de56324c10712243f5541722e0b27e1f303fef6faa387a8666161ab354dbea6c43c82a24e8623bfec39aab13164add6be0dfd55d23204c0975b4ba6fbda51363befde482a9ccc1eb9f151e6ad59c77a1e24dd268389e4686f198a936dd603044a3fb653d63cff80597f5a2913c8a2ec1b7d9dce5728dd56c78c2c":int:96:hex:"65025250343ed8c09b3fceed":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #0 [#2] +depends_on:0 +2:exp:0:hex:"586114f3b1dc087e1b2739b28c592dfe":hex:"":hex:"ae5a38ddd455505284434a4bcfe81ef2":hex:"531ff8c285e532d961f49bd210a5523cd9b19a697a3a3fb26db940a496f253862405b1e825daeda7eb0445c98022b8342c8f8ea20301618483f8ab04b6ebccd7e7fc57878fb544a5bf78fa896f50ac30126ff8afca8a86388666b64c643d16812729bfd7e5c03ba52f7e6ea4c6a685404f7bcbd956964417fa0ea9a6d7290c41":int:64:hex:"467a815610faeb82":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #1 [#2] +depends_on:0 +2:exp:0:hex:"cbfe806bddb7f06b3826b097550c68f5":hex:"":hex:"04c1b6c9fd2ab76fc2adfe15d3421bbb":hex:"cfa86d02599652cb4ffff027b9c6ef2336dc9fe946f64fa5ce83f624e144563d4738381bc5371c3cb55cf41ceda07e62cb635ff37246bfa428785229c6e869d5df69d7949a8577889a29e3d05b788ddd43608d9c14e3f1b51ce2085b9a976fe843e3396a74922babe6797d5f01c37ead623b5b582505bcd29edf8a6ea36b0fc7":int:64:hex:"0697ac372a9acafd":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #2 [#2] +depends_on:0 +2:exp:0:hex:"96ce3a095a91effdd91d616f1f02ddcd":hex:"":hex:"579d6633ec6687afa24ef874899b58e0":hex:"3ff3c0038148ed391b6a10aad623a82fe9209c5ba74482f11506d597b5fc7af977235d8ee9e28cf2160346ddd0e33a5bd1fb67b87dad7167fdd4b2b4000d8460ef7b3e1b59b9d61d06cfbe7945379ed6b650de86f396a38cc70d47b8a349f067d00144c903c276b323be6a929a7d7dd8ae7d254d640cdc1176f98e01a1d8c82f":int:64:hex:"55a0f61032e048f3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #0 [#2] +depends_on:0 +2:exp:0:hex:"24ece168c2971cf2b404ea206dc9e29d":hex:"":hex:"e9db62a42491664a6c46cbb0b2bafc92":hex:"3579f6c0cb3d2a5d0c4548855c7c052d36b6a8dfc60f4ca1b4bbe28ed87306119e71982dd84c4205ceba918d675472753df1b5192d3693dbf6a061c6056e312135ffc5ff426895a7e30f7f675d2cb21de06eea5e3761b94deef7537b985d324864c9ff6ab6e230a1006720f98c958912b604a6d03e3979887c07be3ceaafc78f":int:32:hex:"d2b15a23":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #1 [#2] +depends_on:0 +2:exp:0:hex:"d3c3cf993f6740a019e61ce13c29955c":hex:"":hex:"af900ac348082ff32d2e0ab886079516":hex:"2ddd0e8c99661f0757f04aa79a1ffa24ad48fbe5da68b9e71f7a0cf1b4f2ca9b757695900b7549d48847ae49950dc9b270b1569d29dcbef412216737bd83509c17ae41c34ccda318939cb37a0a380762993a7568c0b07794e78746173dd5c0d921cd50de4b548c1589e142c3dadbad42161aaeda2310f3c6d5c722d9ac69e96d":int:32:hex:"f2d3a6ff":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #2 [#2] +depends_on:0 +2:exp:0:hex:"5f1e5bd45ee8bb207ebbd730510ff218":hex:"":hex:"8846424a194f5de858556e6be5b65d7f":hex:"e968947fc0e49136e730b97f6b16e393d5e4fdf3e4803a23af79211ef59f29167c60ead72fd489da32d2ffa43b2bca2074f9d1b4f5396ca65004b0806cb7c6dfa751fb6afbee3e443f3c9b0e3df6722e0d1320441400c5ca508afb657c2b7f1669b0de21761dccab9a40fc513768bd1f552692626ce35078a2e0e12f5d930647":int:32:hex:"0d6c15da":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #0 [#2] +depends_on:0 +2:exp:0:hex:"3997050377cfbb802cc438d973661688":hex:"b02f0dd373e42c65e8e1db2dd76a432e0b2bf6e630c8aaf0d48af51b3709b175de9a19b3245ae75818274c771c06fae225c4f8b002236712336e805ab006449eb29cc5e29abd82b06c32d4c36ee99acb9a6d7d9eae6ec6ec263c002a22c4a898c74f6abd6d92112367ca7ffe82787c5b39e7012ba22825d3612af3d41e8008a8":hex:"c95c84c263bdfd5f1de66e7e616cf3fb":hex:"":int:128:hex:"b35b3cf6ed59ccb69dbc9b47a3f284ae":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #1 [#2] +depends_on:0 +2:exp:0:hex:"c58583f6479d9bc9f1bffddefee66e59":hex:"564a9f700cbc1f895e4f4fa6426f73b4956896a15e6127e7560d74e3fd0b980d2ee45b7a6a3884fa613d91d13921e3f90967d7132bdafcd146dd8ff7147ed1964c2bdb3e12f4133d3dbbc3bf030ff37b1d2147c493ce885068d9ba5bebae24903aaac004aa0ab73fe789e4150e75ddc2bde2700db02e6398d53e88ac652964ac":hex:"cee448b48d3506ff3ecc227a87987846":hex:"":int:128:hex:"361fc2896d7ee986ecef7cbe665bc60c":char*:"":hex:"9cce7db3fc087d8cb384f6b1a81f03b3fafa2e3281e9f0fcf08a8283929f32439bb0d302516f0ab65b79181fc223a42345bad6e46ff8bcb55add90207f74481227f71a6230a3e13739ef2d015f5003638234b01e58537b7cfab5a8edac19721f41d46948987d1bb1b1d9485a672647bb3b5cb246a1d753a0d107bff036ac7d95":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #2 [#2] +depends_on:0 +2:exp:0:hex:"0bc2bde877e881aea512068105694968":hex:"1a6369a45e8ef2846c42d54f92d0d140a94f9633432782dcbf094f1444a1d006acd07ef6076cd0faee226f9ff14adc1fb23e3c63ed818c9a743efbe16624981663e5a64f03f411dcd326e0c259bcadca3b3dd7660ed985c1b77f13a3b232a5934f8b54e46f8368c6e6eb75f933196fa973e7413e4b1442b9dee5e265b44255ed":hex:"05f0c34ab2e8e8026b0a23719344b71f":hex:"":int:128:hex:"46bab9fc2dbe87b8f6ca0ed4d73e5368":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #0 [#2] +depends_on:0 +2:exp:0:hex:"e14f45ba5d1eb52e0412240da5d7b5f9":hex:"9a85fda19ce923f093a0c25b0c52f5d9534828af7c7687d22307004ae2d10c4592242c0f2704070307ab55b137780d1e2013a19396ab43ff6a295b63fdcf323456d149758f9a2bb37f1418d62ea6368b24d5067b9c63d2968e06d6586c7e3275faffa005f7c7bfef51303e4c2b2ed4564acd17d50efac9f5e3e7f16ce589c39b":hex:"d7f8ef12f66f8b7c60aea02ef6ff688f":hex:"":int:120:hex:"beede05e4928c808bc660f3de95634":char*:"":hex:"4ad5b9ace0c0c7c07df2900faf37a902899471e7aa4a0a1ad5387f8f56d73f78f619be79a4e253f95b15d52895a05bae9ecffa916d35efacd8baf1c704d2aa4a38c234efc4dcfb191ec0fa0b522328fa5b5dff55e8c443fee660ebe3d8ad85de157a889aefc823720030a4cd6ba94a6309dd61806f0abb27772432018bc61701":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #1 [#2] +depends_on:0 +2:exp:0:hex:"9a64579f3601b0022d357b601cd876ab":hex:"88be1f4bc8c81b8a9d7abc073cb2751e209ab6b912c15dc094002f95a57a660b9f08b1b34f5947223205b579e704d70a9ecb54520ce3491e52965be643f729516f5cb018beeedc68a7d66c0d40a3f392ec7729c566ce1e9f964c4c0bd61b291ccb96e3d1fac18a401a302f3775697c71edb8ff5a8275a815eba9dd3b912e3759":hex:"515efc6d036f95db7df56b1bbec0aff2":hex:"":int:120:hex:"13ea92ba35fced366d1e47c97ca5c9":char*:"":hex:"7fc8565760c168d640f24896c69758355b17310dbc359f38b73fc7b57fe3f4b6ecad3f298be931c96a639df3c5744f7e932b32d222f5534efb8eb5d5b98d218dce3efef5c8c7ce65738bf63412d0a8ed209071218a6fa2f7be79b38d0b2f5b571ec73f1a91721bd409b1722b313683e97d53df19ded95fd471124fa5f294a4bb":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #2 [#2] +depends_on:0 +2:exp:0:hex:"1bda4acfd10ab635f357935bb0ab7020":hex:"c9ac8d4ef7d83848fdc03664957c28b9b76710797d5db1c21e713e85eb0898892223e52be1644fc7362c95026ebb9c9ca74d7d3739eff10cab1eda00c36628dae0b98d119a14635800e37cd340faa6fbba9c3d41d52722cc3969612b1a8c5ca9a68773f5ee654506cb88ea65fb1eddf5ab6312d0170dc03324e483342448b854":hex:"48b77c587616ffaa449533a91230b449":hex:"":int:120:hex:"8325e4394c91719691145e68e56439":char*:"":hex:"1287ad3719508a9be70c19e3b134a2eaa4415d736c55922e9abcfd7f621ea07ffb9b78d8a9668c74bbd548b5e6519ea12609d2d6197c8bd3da9c13c46628f218e7ff81884ff7eb34664ab00f86e09cd623bec248d8898ef054fce8f718a0e0978e8b5d037709c524114ec37809ac3fd1604e223e08f594e7aa12097f7dc1850b":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #0 [#2] +depends_on:0 +2:exp:0:hex:"d21cf24bc5bd176b4b0fd4c8477bb70d":hex:"2e7108fd25c88b799263791940594ec80b26ccd53455c837b2e6cf4e27fcf9707af3f0fe311355e1b03ac3b5ee0af09fb6fb9f0311f8545d40a658119e6a87ba8ba72cc5fdb1386bc455c8fec51a7c0fec957bed4d6441180741197962d51b17c393b57553e53602f2a343a0871ea2dc4b1506663b2768ce271b89c4ed99eec6":hex:"208cb9dced20b18edddb91596e902124":hex:"":int:112:hex:"7edfb9daf8ca2babcc02537463e9":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #1 [#2] +depends_on:0 +2:exp:0:hex:"3d02e2b02170986944487cba8448f998":hex:"bc1d7553f4a28754cf59ed6f7a901901f04ce62a449db2b45ad60329d0341bb9ba421c783c28a9200b41da8ab6328d826293134a7d0c9a5775dd2735e7767efda4ad183566e0847d6d978abd1a8ab13b16b8323acef05ced3b571631e1e24ad44d65e6ffa64e03c9970e94bacb9f721aba06cda6a08806a3be63dddd8029301d":hex:"6336077bb83eff1c9ea715de99b372cd":hex:"":int:112:hex:"0466bb2957281f64b59eafed3509":char*:"":hex:"5f395958f2f7acafb1bca6d3a6ec48b717f2ceeac1b77e1b0edc09a09e4a299d2ec722cc7daf34c8f4121a93c80b2adb20a2fc95afd09320f91085c93c8b082dd703814c9777501d23bf9b328f07f04652592dc5a3f4321626a695b8db8e65c8617c809eb2978d8c9a882ffa82a4bb707c1a8f9a965bdacce5c041bafc94a1c6":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #2 [#2] +depends_on:0 +2:exp:0:hex:"cd1ad1de0521d41645d13c97a18f4a20":hex:"588c2617517329f3e1e7ba6206a183dc9232e6a4fa8c8b89532d46235af1e542acaa7eae4d034f139b00449076ba2ef9a692cae422998878dabdac60993dce9880d280bec1419803ba937366e5285c4a7f31a5f232f8d3ef73efe7267b3ef82a02f97d320ebc9db6219fbdf1c7f611e8e5164e9ecf25b32f9c07dfa12aa705af":hex:"413873a0b063ad039da5513896233286":hex:"":int:112:hex:"d4dbe9cae116553b0cbe1984d176":char*:"":hex:"bd519b7e6921e6026784cd7b836c89bc1fa98e4013b41d2bf091ef0d602e44a70df89816c068d37f0c6377af46c8bfa73ec0d5bc0b61966f23e55a15a83cea49f37cc02213b4996f9353ee2b73a798b626e524b9c15937ecf98a4eded83fb62e6deea1de31e0a7f1d210f6d964bc3e69b269da834720fd33487874489b8932a8":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #0 [#2] +depends_on:0 +2:exp:0:hex:"1cb120e9cd718b5119b4a58af0644eff":hex:"4c8e8fb8c87ff6b994ae71bfbf0fa4529f03bad86edf9d27cf899ea93a32972640697e00546136c1dbc7e63662200951b6479c58ae26b1bd8c3b4f507c0d945d615183196868ec4f4865d1d00bb919a00184e9663f6cb9a7a0ddfc73ee2901f7a56ef2074d554f48cef254be558fca35651be405f91c39e0367762b4715d05fa":hex:"5a7087989bfe2f6eddcb56fde4d72529":hex:"":int:104:hex:"95d8bd12af8a5ab677309df0fb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #1 [#2] +depends_on:0 +2:exp:0:hex:"315b206778c28ed0bfdd6e66088a5c39":hex:"6186f57a85b65f54efbf9974a193012b1396fc0ca887227e1865f1c915ac2af9bbd55969f7de57ce9fb87604cf11c7bc822b542f745be8a101877a810ed72bf4544d0acb91f0f9d3c30b6a18c48b82557433d0db930e03bcecc6fb53530bfd99ee89f9e154aa1a3e2a2c2a7a9e08c9aed1deab7fae8ea5a31158b50bca2f5e79":hex:"7ec6f47ec56dda5b52bbdaa6ad2eb6da":hex:"":int:104:hex:"930750c53effc7b84aa10b2276":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #2 [#2] +depends_on:0 +2:exp:0:hex:"e886de1c907c97e7db8ec80a79df90f8":hex:"c64cc9596d7c738746ab800f688eec190a4c802c55b2528931d74d294496892b81f53d3073d48f9bef1d58ce3be26547474cdda2868abeab71aff566fff613b4e5bfed1be1d2fff35d8ffa33302d3da1c82e421aa3a23848f31e26d90c0cb2ac2ae136ada73404ed3e0e1d3e7cb355a11cd2a4f9393b4d5eac988104fe1cf959":hex:"612cacbf33266353d0a29a24532f3c0c":hex:"":int:104:hex:"76634e58d8f3a48f15875ac1d6":char*:"":hex:"7001d7395efb432e2804cc65c0ba5d4719ce84177ce46292c4fd62a5596bd2bab1d5c44217ac43235bd94489c43d01618a11f047d2e247062c3b88d6e59adaa1f46514fb33b7843483920bee60a41f3cb312322c305d25251b4704fb66da58637c95a9d539731434f60ef44fe3cd6d37e2c8e7089880a563938dcc98b43f08fd":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #0 [#2] +depends_on:0 +2:exp:0:hex:"3b936e09a6477f3bd52030a29df5001d":hex:"65cf11d1afad19b34f282f98f140315992392f5d4eed4265085b29e1e5553f4783fec681ba2d368486ba6a54c00e71c82c08ca3d097904f021ce4b0acba2d2a7005e28e5f8750ea3d18a4f78363c37583e85104234498942c639a0564b0d80055c21cb7735dd44348298291ab602f345b1d74d624750c0177fbd5cca6f99223b":hex:"f93105be83fa5e315d73acfdcf578de7":hex:"":int:96:hex:"91b55bb5e3f3f1abcf335db5":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #1 [#2] +depends_on:0 +2:exp:0:hex:"dc9e2095de7b1b48481b56bf6a3604cd":hex:"ed61ff94a3f84c72147faefa615e2df00324fb01790cf9764c72c1b8ba47f17866a1fd64ee5c2f53865d1bc24ec93165a6774466a59603199ee476c1f2da7d932c8943d126aa172d532d8475a484d42bb45fcf92766feafd7f3e2e3d42d22f6f84a90e7e688232f799d80cd2cc152ddd21ecfb137701ecafcb2b65abe2e4e6f4":hex:"9e5268db19a1b51c0496a160ca76f8f7":hex:"":int:96:hex:"0fa9588536fca71bb44260f7":char*:"":hex:"ef562e301fcf923ff1a1acd3aff9b1c963058228655fe8a66cab01396547dbd2aa1f79a22eefc62944b86d1a31ebe2d17130175b8c003d6755b0eb8b79895b0f7f8046c5ae888a067ba17bc8e11a8f6e5023a9cd42f6461966c28e505b371c0f72a2606bff430a58016e99713d25ce11f10391fb4a922e27989422c6a64f9107":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #2 [#2] +depends_on:0 +2:exp:0:hex:"3f93901fd7cc88db3ba76a158d658c7b":hex:"16402fded879fcbfe9405902aa63ca2a520889e0045f687455469b7bb867829a01208b8dc5dcc852d8ee478993c30e6d9ec6408773b367821310a0ae171d38d71e06981ff6e845acffbc794142b87c748e12484c0636419d79be3d798cde59e9dae0a4a4a4346596427e6b235ad52e6a1b02d6f4df0c7de35fc390cae36aef14":hex:"7e98de461e6d96c0ce6c8d8b3854cf49":hex:"":int:96:hex:"86c9a70e4bab304ae46e6542":char*:"":hex:"1b4c09569b42c469b3ab6b39312c214502ec09f5fe2fed1d1933d13cdc6a7b77a5d135123fa69d9207d6844b0357b26b7a2f53b33a5cd218dacda87b78b09cf259e48e74076812c432e2d0833fb269721f9347c96e158500f9b2283342a35c8de0a022edce711118d72d8fbaa354bfb0ffee465844ef2d37e24ec2cea8556648":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #0 [#2] +depends_on:0 +2:exp:0:hex:"42289f3d3cd5838e250ef54b128e60d1":hex:"3edae1d554b67d2036f5fdbdb2945cc112f100adc1b47009c2e23f6a2eaee78d1f39ce8a98f715853cc29fc793fb6981ec3036834188dea7d668185ccc8642071b15de1332f6a59c8a9b4399733eb4b3d8f224af57ba6b4a8e64494bb6630b9d28e7ec3349064350febcef6a3ad1d6cca1b1da74f3d2921c2b28a2dd399c3416":hex:"e557389a216ad724aafdab0180e1892e":hex:"":int:64:hex:"6f78bc809f31393e":char*:"":hex:"25c476659cc7b343a69088baf868a811ba37daca85c4093105bf98235a90aeca015ab034da008af0982f9b2e80df804c186a9b2e97f74cffd70ebb7771d874fcaf12f6d01c44a8b0ec2898cf4493cf09a16a88a65cd77909bbf0430c9603869bd5f20d56cb51d8a3f0a032fc30d925c96599d296b1ec41c2912bda426adea4fb":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #1 [#2] +depends_on:0 +2:exp:0:hex:"3d772eabb7f19475665ca2a7e693bcfc":hex:"e9fc4d86f5b857fa6057b73f967351e06f87288c40a95b9e378c84f1a4c0f4b80ed0a0b44ff90a8973be4199c0c4006fc4f5ea19d5f1fe8b9c8c01f4675ab85afab0592bb3daba36bb4fc7ed9eea867e9d8cc50c19fb62a5a57956e9efacebac5e9f849649d35a329bd68de97bb6e5ff7bef477a86765c2c9ec15e24cbba5c6e":hex:"0747cbb486a013453fde1ca6abb11dbe":hex:"":int:64:hex:"8e761ffaea68f967":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #2 [#2] +depends_on:0 +2:exp:0:hex:"fb7fd753ee6eaaf283a42a121dab4e43":hex:"fd5cecb2c0287cb8229e97d9cc4b9885f428710528884ce663ed1728cd44cb2df93e56ef17ace0678d1e341366c652f4ba7ee45797d39be4a05c1151e5cde499e13e5d45549b5d95a174d03616d06ef96e9d7b2b6bb0d79a726b253dd64223a5f09611671b234ccf9b383952f8888814b2c167e774cfbf54e9c6b99a753f4fa9":hex:"8164929fb54485377ecccc9b9621af5e":hex:"":int:64:hex:"40a2fa7f4370afb2":char*:"":hex:"6208d068be60f7b04b80fc611062e6caaef9a5cf59f850d174b7446c78c039ea9aefe4885e19c2b33911d32ce1fe3c48ddffa4b03e450fd35da03f40c4e7c5bb3b1c3f3049dbfad3ac81ca1b79cafbaa172f4900e3829d38edea3b64000f93924a801259bc4b2523445c64bc23bfee190b952468507fa4baf6dc2bec66fcf0d8":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #0 [#2] +depends_on:0 +2:exp:0:hex:"30d757fd73a0fd5fa49159ad0653296d":hex:"17d485b258f80d8924e35291118cfdcffd86c47851b65f0b06a7c1f5202de82f3f460fc61b1aa38fdba7c8ded375c92cf005afe63e59d362c0960044af39241b81ca24e85c5faa43903229355b7313fee21b992ef3931d9d2407b32b3cf72dd7acbc7948395eb513cb2fd428b215ba2bd1e29c62f45d0ce231884f62480c6d8f":hex:"b35b8df0aebd0608517f2830e0e70cd0":hex:"":int:32:hex:"954c0e99":char*:"":hex:"022618d2598f79104e918a09c937a82b3db59243b5e13de731fcb912e4366105797ce47f6dce7f08073f2f41e5c15fd6b1ec4b5861469a4880c3b0bd769b78c696ff29c28c9349d5a46a6e5ad9211bd4b708a8c0b6928ebbb0dac1c0a5f5ce6b05de6a50073128566a23f09cc1b826aa5803f9f750aa4debf59f24ae9f98c9b5":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #1 [#2] +depends_on:0 +2:exp:0:hex:"d9d3cfd5900de5d5e2109e7721cfeef6":hex:"e4243cc37cc32dfcedf9bb76890e706af6ab1e06b290b8ccfe2a55e5dabe68cb390f7636dc9676b431d4dc8ad3f6d989e510194294ab7ab0556789046743cf374d8b6462f5f95a17f3f44337d6c69ee47b0e1ad7e5ce6f9b224c54099a104e70d2d06af869b921ea47febe08f90c591ed49c1f12003afceabd2c7bba458a0111":hex:"b4b9dfb013de6f7c44779e5a9daaf5e5":hex:"":int:32:hex:"2b81e8ce":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #2 [#2] +depends_on:0 +2:exp:0:hex:"68dc138f19354d73eaa1cf0e79231d74":hex:"ce345567a76bc30d8b4fd2239788221cfa75e1a310aeeeb8c355f8eea57d80967f3047fbd4e6173fac5caeb22151fa607065953c4c35e0537b9e3788cc80de9eedf2a340698bde99a6a1bdc81265319da3e52f7a53883b7f21749237fcfd3cd4f149bb2be7a4ddd9ef0544cfe0789040d1dc951b6447304942f03ab0beae8866":hex:"e7147749560f491420a2d893c075bb76":hex:"":int:32:hex:"70a83f6f":char*:"":hex:"64b021612c78b3e192e8349d48b77d02927e7fd70c7160d37cb8ef472f6bcd9df9d93431627c1c80875e208724ae05f94fdd2e005e9707b78a1bf3bbca7beec4b03ddd4d9de6235ffd6d84a8b9a1842e104c1e22df4566f6c4d3d4e3d96a56b9b8a5cdce9da70aa236109b289266036f285564060b204dfd7ac915eea0dd0b1e":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #0 [#2] +depends_on:0 +2:exp:0:hex:"7362c86344e0aefb0cf0d04768f9c05d":hex:"8baffc7836004deb87c0111d47c182512bf861874021ddfcd559acf2c4a51cf5bc4bfdee2d039b9c005b6af95a2607643dcf4d9cd9d62412f709334556db22fc91d7b40438505d6806ccb2f2c21ae731bc1f1c825d28a71ab27095a39985e96ccd07cfb2e75243ccafd474494a2338c324ef533ca5f17d2ac1b1883140342ced":hex:"7e8d12c2f0dcf4f792247134234ac94b":hex:"86d2b5debc3b10495da353d6821f6cad380776d805bd8660b08dcdb1acd87026e4f344b547a4db47b5f44cded314bec4ce9a417ce40a2acd5a21460c42dfcd27483abf3f38dd8cc5fa523b6768a26513df5896435baa97781cff1966e2e3d6ec6d0a9cdc013de5a50e4d46831667055bad04f784024a82f9cd087ae4cd37dd64":int:128:hex:"9594da428fd8c1b13ecb23afa2c1af2e":char*:"":hex:"e2c424f42aedd56f0e17a39d43ad19c8e2731efc7a25f077aef51d55280b10e667e338bd981b82a975ef62bf53bc52496b6995d33c90c7ae14767c126826e3f32bd23f444ddcfd7a0dd323b0ae2c22defad04ce63892b45c176bd0b86f5fa057a3dc371359744cb80bbfb4a195755136a0ea90b4044a45bc1b069f3cb3695c04":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #1 [#2] +depends_on:0 +2:exp:0:hex:"58748bb204ccb7bdafdbf739b6c19a3e":hex:"b72902c9ebb72a86be539b19a52fd9af00aa4de081d90c0d8ad580ebb5900177a036f40a1e9b43e3a07d715466526d6d7544e5a5551805b62463f956cd519fc99182c2d54bd62fc7ffc6e5ebf1503859b706da11a1b6c707a67a70789dbfc10ef726bd360f9f2347326e068e757c8443ddc9308a171e682359ae1bfe87194ab5":hex:"93ac298c73c88e127a4d9dd81bf24e3d":hex:"8f168fc4d1da13bdbefae3f9d6ac1d8cb19fcec1f43f727951af0a466d8826649a46c3cb50c045ea83849fce0eedbc042a1a435e6d9d59017997a2d5459b940078b8a7f3b6b0ff279ff8c560248296a17240ff1b0643d1f436b6e3f2079363fc49fb45f410debbdde083b92057916368cb807d603cb82e2c0dc01658bff7f1ab":int:128:hex:"efba4589d4a03555766bbc3b421dd60f":char*:"":hex:"d5c97a659f016904ff76286f810e8e92da6f8db2c63d8a42e617760780637e32105503440cdf04d1fe67813312f1479fda8d746c8b0b080591eba83850382f600e9d8680516c6579669f0b3d0a30323510f9de1c92512790b8347751994d022156cae64da0808a649d163a0e99e869fdf224b7c1a6a8fbc613d5917eca8ee08c":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #2 [#2] +depends_on:0 +2:exp:0:hex:"6cc13cbd62428bb8658dd3954fe9181f":hex:"2c9ec982d1cfb644ddbc53c0759b10493206d5186affc6882fbb2ba3aa430f9bae1209db2d78dcc125f3c909a54dd84fdff96c71e678216a58390ef4308bdd90f94f7109c4edefa76a74fda64b201b7a435bbabc27298f3eaa4c2d1393bd584f811fff52638f6ad2f6d86a8c3c9c030d9d4264c8c079592a36178d25991cff09":hex:"86740da7ce4efbed70af55e1d6c10fdf":hex:"be561ac15e3cfda624b422af97c26719c140bb50e4a993d636efe9c7f1963fb9047a0762169b571a698ff310bc417e34d4039b7562a95af710ccc1b197964a376c986fd2ed8ac4b0c7b4e843c37a41366f2f483c821a1823f317416c7e4f32eed9b9dc2ae1a2f3ed32c4b3187358a2329aa42191b7c2fe87b6e27ff20303cb29":int:128:hex:"76b990a1e010e5f088f6ae90bec40b32":char*:"":hex:"0b9a5f5d2e6852b75b9cf26c1b310b2200e56dafcf3c941478862cdf9737ac8e2cb9b38d41bd4a1872ea1b4cfd51a1a0b9b743aca439eefa10de8459a0a7a221c5429b3dee393f17031ca6c399df8e05657c3db55be9c9dd29e690042a4ed8db732efce7c58d6b20a2a0f7c79e42e5ada43b87ab00f481c20cac1b35514dcdc9":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #0 [#2] +depends_on:0 +2:exp:0:hex:"286d3f5080cfe88538571188fbeb2dd5":hex:"55135928997711360622eda1820c815aa22115204b1e9bb567e231ac6ea2594b4d652627b6816bdc6c40a4411fd6b12fab9a1f169d81c476dbf77151bff13f98ca0d1dc0a68ea681652be089fadbc66c604284eebfc8ce4cf10f4ca6bda0e0f6634023db6e3f0f1de626c3249a28a642ecc9ec5ff401e941fa8a3c691566c0ae":hex:"da6140bd4dc6456ddab19069e86efb35":hex:"5d350a04562a605e9082ebd8faec6c27e561425849e7f0f05f5049859c2c1bd2c4682ebf9773fab6177d2601fd5a086cefc3adef5a2f8f6b5dc9e649e98dd0a3d1a2524419f01305bd0fcfff52d84a20d1b14dea2138dcc54eea2bf263c6fe27c3e7255f1f359d0d00fb1b350d7a04965af30027632520197e85eb41de6bb286":int:120:hex:"d90d34094d740214dd3de685010ce3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #1 [#2] +depends_on:0 +2:exp:0:hex:"726ae113a096769b657f973ea6d2d5dd":hex:"90636012ba8c51d16f8f6df3d3bcabc3f09aeffbe2a762f62e677913188045b861b2e7d9a7bd93dcee46e9e4832e497a6f79db52b4e45c8dab20fa568ff9c4ace55be3216f514a3284768a25d86b1c7da5377622f3e90ed4c7bd4571715af4d0a2ab5181d0475f699202e4406bb9cfdbd4fa7f22d0dd744d36b3223134658496":hex:"2f9900226c97585d200dd20a279c154a":hex:"761663c3fcbf1db12bc25546b2425b8229b3153e75f79fa63958819caee3febff74603d99264b5a82ef5980439bef89301ae3206a1d01a3bbd7a6c99d27d1e934cc725daeb483f826c2c9d788fd1f67a627864cf8b5f94df777bb59ef90cb6781a2000e6f0baa4f1ea4754b47bb7cbd2699f83634e4d8ab16b325b2c49f13499":int:120:hex:"d095bfb8990d4fd64752ee24f3de1e":char*:"":hex:"9f7759c6d24fd9aa0df02a7c0cc5f17e61622c63195f85dfafa5d820d3ad218c7288ec017821100f1fade10f9bb447a4a01e3698b045548c7619a08f2304e2818a9bf55e70b40f8b994b7dcf0cb243848cf3f6fdfec3ebbb147d01df84a3ec62cd8fa5d78ad9f2f28cd288a35eb49a5172339e9872e8e7e3350b0d69f59acd07":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #2 [#2] +depends_on:0 +2:exp:0:hex:"73a9eeda721c6f292e6b399e2647f8a6":hex:"215fc7e52abe4c751ca2f7f9a5cbde9ab8b44b8d4054bb62dcea6df5b936145ca6ec83a2b78b070638fd6e5ea3bad5d0caf1b8f755f391c3e0962a92337e3eba575585eb83680075fc818860388c587746af78d5fc75ccd0a63f1612abb1ba0f04a2228ca27fbddba4878f9b2683683f516b6d6fe4f6622e603bd3c5ad45e332":hex:"c1e80eb723960049cc4448b66433f1cf":hex:"fb2a0b1f817404e74aee0a6ec8f2cd86f0c9114ed367b2690c44ad80f9d3377d7fd5066beaf1daa739d27ed3fba98379188016b1fe901204a174f9ffca370c181aece5e5d40939a0d460913b40b895e78a3b80ddf3d613c05e4e27bfd161ea2ef42271a2679f2cdca5b728ffb2319781c946a4f3ecacf486b754b30bb04ea60b":int:120:hex:"e08161262234d0d5be22f09e5646bf":char*:"":hex:"b5e286183f16dd9403bec6786bd4836cc6add47947ef111fb1d5503c18c333c8fe60959502f58390d0e0f69fbe5fee13c72aed65fe6e32f6ea45877fe44f8a556aa5157b112e572197c1c350b7943c6cf2e9146018599524d27599f09c86027f2c5927e4a20c63833870e8369baa36ecc07cdb3ced520b5ae46869ff357ca089":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #0 [#2] +depends_on:0 +2:exp:0:hex:"90dbda7397d8fc46215a1218a6ffd0d8":hex:"4f82a1eca6c9184240f50f7e0cfec07ec772cad5276d93043c462d8364addd9a652eed385ccc6b0faa6ca679ab3a4c3d0be6a759425fd38316ee6a1b1b0c52c1bb3b57a9bd7c8a3be95c82f37800c2e3b42dde031851937398811f8f8dc2a15bfd2d6be99a572d56f536e62bc5b041d3944da666081cd755ec347f464214bf33":hex:"7be477d14df5dc15877ae537b62e1a56":hex:"7358ddf1310a58871a2f76705f1cf64223c015c4d1574104d2e38783bb866205042f05c86e76c47a2516ce284911f1d2cbee079982dd77167e328b8324eec47c9244cc5668cf908c679bb586d4dd32c6c99ed99a6b571cf18b00689463e7a88cea6ea32d288301a10a9139ed6092ffe298e25b8cfb6b4be8217f16076dcd0a90":int:112:hex:"776d871944159c51b2f5ec1980a6":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #1 [#2] +depends_on:0 +2:exp:0:hex:"0c85174d428fc1c7c89ca5d1b8aaba25":hex:"3735cbfb8000260021d1938d2a18e7737f378ecddb11a46ce387bf04e20bbfcc902457637fd152ab87017185601f32a7f906057123b6c2da31a1069c93e3cacc59a359aebd3e31b302e1a1f7d5d8f1b2917a8fe79181fa633b925ce03a1198dac48f4c959076b55bc6b3d50188af2c6aa33d83698aa8db22649f39825ba54775":hex:"b3c9dfa4c55388a128fbf62aa5927361":hex:"3f552d45b61cf05ae2aa92668e89f3338a15ec7c5b7113b6571cfcd9e4c4a962043ccd9323f828dd645e8a91b007ce2112b7f978ad22ee9821698a4f2559d987ae4421452ad2e8d180953297156426d4540aff2104d8637b56b034a3a1823cf962bffbc465fe6148097975a8821ca7487e6e6c7ff4ee4de899fe67345676bb1c":int:112:hex:"1e7dec83830183d56f443a16471d":char*:"":hex:"3d98cabca4afb7c1f6b8eeed521f4666ae252ac12d17ebf4a710b9a22d839b69458387ba4bbec2f6400e0cff80fbe4682c24efcd3b8c594d9b515ca7842c9d5988c42b59b6526c29a99256451e2927f5b956ef262f97c733dfa8bff73644473b9a8562bdfca748f4733ddce94a60024dfbfcde62fb3cbd7c3d955012d5338b91":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #2 [#2] +depends_on:0 +2:exp:0:hex:"d89f06eb07744d43d44734faf9751d07":hex:"36cc3b2f563305208a03378f7dc036119f7de3fee77cefac06515853d36609a622382ed026c59783fbc0d9910767874c516e10c7bf3e3d104f73b3463c8d93a63418c76cb0d05e62e9c8642cb4f32caced2620912cb6c79e5110a27d5fba1ef3b4d0578077858526c5e4254365f2b2ab47a45df4af08980b3b7a9b66dff5b38c":hex:"185f8d033713ee629e93561cf8d5acb8":hex:"743bcb671d0aa1c547b5448d64d7c6b290777625ba28f25ca0fbf1fc66495a2fde0648a8db51039b0e7340d993aef8afb48269e660cb599837d1e46f72727762d887ee84c073d6136d1b0bc7d4c78f5673a4a6b73375937e8d54a47304845f38ca6b4f51cf14136a0826016535dc5ed003e38c3ac362b9d58ba8b555a05a1412":int:112:hex:"fcad48076eb03ebe85c6d64f6357":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #0 [#2] +depends_on:0 +2:exp:0:hex:"6150f14dc53f391e815acfabed9f9e20":hex:"fd8f337017e1b60d6618e6e4ad37c1f230cdeb78891579c2c63d4e6a4f7d2cb7252e99de333c73db45958808c08e91359c885a7385ab6f9ed98a27927a5b83c3a456ce2e01869712675e527155ba1e339ac14a3ccd7a4b87360902f2b8381308fe5a4eac5c90d0b84da4bf5b907de6ff3139cffd23b49a78750006100183032a":hex:"7e92dd558bd2662c3a539dfe21a352cf":hex:"9b4624e9118e6aa5dc65b69856638f77fd3f9f562046f50ba92a64e988258637932af7979f000505b84a71ff5dd7b60bad62586b1a8837a61c15a1a1ba7f06668272c28169915d7f06297b6c2a96c8c44203a422bfd25500c82e11274ffe07706365bfd3da34af4c4dd8ad7b620de7284a5af729bea9c4ed2631bdcba2ebdb7d":int:104:hex:"922a7b48ad5bf61e6d70751cfe":char*:"":hex:"f272a3ee9b981f97785cc6fad350e516d72d402dae0d8a531c064ec64598b2a5760f9b279c10aa1ff71bec07300ab0373187138e7a103fc4130105afa6b6346f3d368b40d6f542375de97878ad4d976d64c5c4968a17be2b1757a17c03100231c34721250cd37cc596678764083ade89ae3b1a2151ff9151edcd7ba0eb8a4649":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #1 [#2] +depends_on:0 +2:exp:0:hex:"3e8216072ed6fcde0fe0f636b27ed718":hex:"3b50f2a8dca9f70178503d861d9e37f5edfafc80ee023bfed390a477372986e4794175ec22ac038c3461aba50c9b2379cab48512946efdfe2cb9c12a858b373a5309324f410e6a05e88ba892759dbee6e486dc9665f66cb5950ea7e71317fa94abbebd67a3948746a998173fbbb4f14f9effbdf66d3b6e346053496a4b1934ce":hex:"23a122cf363c3117b8c663388c760ee4":hex:"28ce0b4a44fa83323e060f3ff6436b8829d4f842090296bdc952b6d4a6b1b1a66be06168c63c4643e6ac186f7ffd8d144f603b2d4bc0d65be48121676f9fa1f359029c512bebfd75075ff357bc55f20fc76d9f2477c9930f16408f9f09c5ae86efa2529d2f1449ceeb635b83ca13662860ef9ac04a3d8ab4605eccd2d9ae5a71":int:104:hex:"531a65cc5dfeca671cc64078d1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #2 [#2] +depends_on:0 +2:exp:0:hex:"1af434b73a1210b08595ffa686079832":hex:"13f6c1c2d4edcf1438a7b4e85bcd1c84a989831a64d205e7854fce8817ddfceab67d10506ccf6ed9ce50080ef809e28e46cba7b0c96be6a811f59cd09cb3b7b3fe5073ee6763f40aee61e3e65356093f97deef5a8721d995e71db27a51f60a50e34ac3348852c445188cfc64337455f317f87535d465c6f96006f4079396eba3":hex:"ae318f3cb881d1680f6afbf6713a9a2f":hex:"3763c9241be0d9d9a9e46e64b12e107d16cca267ff87844c2325af910cc9a485c7015d95bbe62398864d079fb2b577ba0cfad923c24fa30691ad7d767d651eed4a33d0be8f06fed43f58b2e0bb04959f10b9e8e73bd80d3a6a8c8ce637bfbdb9d02c2b0a3dd8317c4997822031a35d34b3b61819b425c10c64e839b29874ddfb":int:104:hex:"2ae7350dd3d1909a73f8d64255":char*:"":hex:"3cd2a770300ce4c85740666640936a0fe48888788702fc37e7a8296adb40b862ec799f257a16821adaa7315bd31e8dec60e4a8faeb8ba2ee606340f0219a6440e9c1d3168425e58fac02e8a88865f30649913d988353ab81f42a5ad43f960055f0877acda20f493208c2c40754fbf4ccee040975aa358ea3fe62cbd028c1611a":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #0 [#2] +depends_on:0 +2:exp:0:hex:"04036d2f5273c6ff5b8364aa595359c9":hex:"acf79b6099490af938fb5fd8913255b3daa22786b03356cdf3e0ffaf570f9f866047b8e15c9953f893d97e7098265297396868ebc383be8547e8ec9d974b6a65b5dc5147cdadef2e2ad96696e84e44f364c2ba18c8aabe21f99489957b2b5484bf3fb4fecaf5ddaa1d373e910059c978918a3d01b955de2adb475914bf2c2067":hex:"edc433c381140dff929d9df9f62f4cb6":hex:"404acfeeea342aeea8c8b7449af9e20ddf5b85dc7770d2144a4dd05959613d04d0cfece5a21cbb1a9175ddc9443ffacd2085332eb4c337a12a7bb294c95960e7c0bde4b8ab30a91e50267bbd0b8d2a4ed381409ea2e4c84f9a2070a793ce3c90ea8a4b140651b452674f85d5b76d0055df115608bf3a3c60996108023ebabe65":int:96:hex:"71f818f1a2b789fabbda8ec1":char*:"":hex:"4729cb642304de928b9dca32bb3d7b7836dd3973bbccf3f013c8ff4b59eca56f5d34d1b8f030a7b581b2f8fdc1e22b76a4cbc10095559876736d318d6c96c5c64cbd9fbd1d8eb4df38a2d56640d67d490d03acc1cd32d3f377eb1907bbd600f21d740b578080ba9c6ddc7dc6c50cdcee41fec51499cb944713c0961fc64f5a70":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #1 [#2] +depends_on:0 +2:exp:0:hex:"59fe44c6e28d025b2ad05e6e867051ab":hex:"20e66bae1215de9a87a0b878d39015d17e0d4542a1aaba2000cefbd5f892c26a410f55f0d7dc2f6b66690f2997032985e5516e068bfc6ec8a3669f566e280b0cefded519023b735ee3bcbfc5b6ce8203b727933a750f9bd515ec448c1f3a030aa0f40e607727a3239ebbe655d46b38a3d867e481ccf0fadbf0d59b665d2ed6b5":hex:"eb0c30320029433f66d29b3fd5c6563b":hex:"49b7418b87374b462d25309b1c06e3132a3c8f4a4fcf29fed58e0902509426be712639db21c076df7b83dcfcc2c2c8fcc88576f4622a4366eb42f84ebf760e3eb22b14f8b5ff83f06a6f04a924eaab05b912e126e80da22461abf7f1925fd72ebdf2aea335a044726e7c2ebbb2b8aeebab4f7de5e186b50f275b700794d895d8":int:96:hex:"296c4cdaeb94beb2847dc53d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #2 [#2] +depends_on:0 +2:exp:0:hex:"c314264cee0e6db30ebe9b2f6d4991b2":hex:"d436ff9abfb044a332c4e009b591719a67b12a5366da0a66edf19605c34daa37588e15dd3da0d1a097215e469439de79cca74e04cd4904e5b4a6cb4e0ea54e6ba4e624ed6bd48be32d1ef68ffea1639a14e91a5914c2346ea526df95cbd4ad1b8ee842da210b35b6315c3075ecc267d51643c4b39202d0ad793cbb0045ebdc19":hex:"4cd4431bb6dea8eb18ae74e4c35a6698":hex:"0eeafbfd04f9a0ea18e5bdc688c7df27183f346187e9574b61222006f2b3e12e8d9d9bf1f0f15949ee1a7ee8e5c80ee903b8ba2860e15ccb999929f280200b159c2adca481748d0632a7b40601c45055f8cb5126148e6cbab2c76f543537ab54eb276188343cea3c4ab0d7b65b8754e55cfe3f6a5c41b6ea3c08b81fcecc968a":int:96:hex:"fda18d2f795d900f057fe872":char*:"":hex:"cb9e0fb0ac13ca730b79e34745584b362d0716c344e4de90d8352b21117471ba12c97f193150b33774baee5e4a0f11b10428eaf0106c958e16aa46c5f6f3d99eed93d1b9ba3957bed05a8b9cc8c5511cf813a66dc7d773cb735b0523d8d6b0b80639b031ddc375f714c6dd50055320cd7ed44a471c8d5645c938a9005d0b5050":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #0 [#2] +depends_on:0 +2:exp:0:hex:"26072018bd0bda524b5beb66a622c63e":hex:"91c524b359dae3bc49117eebfa610672af1e7754054607317d4c417e7b1a68453f72d355468f825aeb7fde044b20049aed196ec6646cce1eeeccf06cb394286272b573220cdb846613ebc4683442dccc7a19ec86ef1ec971c115726584ae1f4008f94e47d1290d8b6b7a932cfe07165fd2b94e8f96d15f73bf72939c73f4bd11":hex:"c783d6d3b8392160e3b68038b43cf1f4":hex:"8ae7c809a9dc40a6732a7384e3c64abb359c1b09dcb752e5a6b584873e3890230c6fc572b9ad24d849766f849c73f060fc48f664c1af9e6707e223691b77e170966ed164e0cc25ede3fbc3541c480f75b71e7be88fe730d8b361ea2733c6f37e6a59621de6004e020894b51dfb525973d641efe8d5fd9077a0bbc9dc7933a5de":int:64:hex:"edffe55c60235556":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #1 [#2] +depends_on:0 +2:exp:0:hex:"201751d3da98bd39ff4e5990a56cfea7":hex:"2965af0bde3565a00e61cebbfe0b51b5b5ee98dbbfff7b1b5bf61da5ba537e6f4cf5fa07d2b20e518232c4961e6bc3ae247b797429da5d7eee2fc675b07066ac2e670261c6e9a91d920c7076101d86d5ef422b58e74bdc1e0b1d58298d3ee0f510ee3a3f63a3bbc24a55be556e465c20525dd100e33815c2a128ac89574884c1":hex:"6172468634bf4e5dda96f67d433062d7":hex:"ae2d770f40706e1eaa36e087b0093ec11ed58afbde4695794745e7523be0a1e4e54daade393f68ba770956d1cfb267b083431851d713249ffe4b61227f1784769ce8c9127f54271526d54181513aca69dc013b2dfb4a5277f4798b1ff674bca79b3dec4a7a27fcf2905ae0ce03f727c315662cd906e57aa557d1023cce2acd84":int:64:hex:"66c247e5ad4e1d6a":char*:"":hex:"efd064d4b4ef4c37b48ddf2fa6f5facc5e9cc4c3255b23a1e3765fabb5a339fa0eda754a5381b72989fc1323ff9a6bbaecd904eb4835e5a511b922927574673061ed8de23299ea1456054e7ebb62869878c34fb95e48c8385b5ebceecb962654cf1586b3f54e7887ce31850363e9a22be9e6fbc22e694db81aa055490495dbf2":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #2 [#2] +depends_on:0 +2:exp:0:hex:"3bc0dcb5261a641a08e6cb00d23e4deb":hex:"d533ad89a1a578db330c01b4e04d08238b020e36aebe87cf2b0bf0b01f1ce4197be8b0596e475a95946918152e8b334ba89f60486c31f0bd8773ca4ff1319fe92197088b131e728d64405441c4fb5466641f0b8682e6cb371f8a8936140b16677f6def8b3dd9cbf47a73f553f1dca4320ad76f387e92f910f9434543f0df0626":hex:"16fa19f69fceed9e97173207158755a5":hex:"92ddd3b98f08fc8538f6106f6434a1efa0a7441cc7f6fd0841103c2e4dd181ea0c9a4811b3cb1bad1986a44d8addabc02dd6980daf7d60405b38dadc836bb1d0620ceab84e0134aca7c30f9f9490436b27acfd7052f9d7f0379b8e7116571017add46b9976f4b41431d47bae6f5f34dc42410793bc26c84bfe84fb53ae138c85":int:64:hex:"f5289e1204ace3b2":char*:"":hex:"be0c30deeffbe51706247928132002b24d29272eee6b9d618483868e67280236632fa1ae06f3ef793f67bd01b1b01f70a827367c1cd28f778910457c7cbd977dfefff1f84a522247e19b2fd01fa22ce67cef9503d45c80a5084741f04108f2462b7cdd06a8f1f044fea2b05e920bcc061fbc6910175d732f45102a63c76ae48c":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #0 [#2] +depends_on:0 +2:exp:0:hex:"239c15492d6deec979e79236baca4635":hex:"d64886ce5f5b4adb7fe8f95904bc1461749c931655b02819ffdd0ae31bad4175125aa68962f8e36ec834a7d53a191a74c937e81ec93ad9ce0d3b286d3c11ff1733c0b7780130768c120b1833933561cf07399ca49b912370ae34f0e49b9c8cb9920eddc6816ab2ae261c6d7f70058a9b83a494026f249e58c4c613eefafe6974":hex:"916b8b5417578fa83d2e9e9b8e2e7f6b":hex:"b39eb732bc296c555cc9f00cf4caaf37d012329f344a6b74a873baf0d8dde9631f5e57b45b957d6aec0f7978e573dd78b43d459b77756037cd64d10d49966eb3a2a08d0f4d5e4f5dcb8713f4e4756acdf9925c5fc6120c477f6dffc59b0b47a3d5efd32b8c9052b321bb9b5129e5c6a095d8de563601b34608456f58d7221f2d":int:32:hex:"fc08cbbe":char*:"":hex:"95c169721ea007c3f292e4ec7562a426d9baa7d374fd82e1e48d1eaca93d891d5ffa9acf5e3bd82e713ac627141e26a8b654920baffab948401cc3c390d6eea9d7b78c4fcb080b0aa9222e4d51bf201ccfd9328995831435e065d92ad37ee41c7c4366cc1efe15c07fc0470608866aeea96997772ecf926934c5d02efe05f250":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #1 [#2] +depends_on:0 +2:exp:0:hex:"db68a96e216b0dd9945f14b878487e03":hex:"5634196a32d4cbfa7a2f874a1e0f86287d2942090e0cc6a82bd5caf40136a27ddf524a17713ce4af04ca6cb640a7205cce4ac9cb2d0ab380d533e1e968089ea5740c0fcbfa51f2424008e0b89dc7b3396b224cfaed53b3ac0604879983d3e6e6d36053de4866f52976890f72b8f4b9505e4ebdd04c0497048c3ce19336133ea4":hex:"8a1a72e7bb740ec37ea4619c3007f8ae":hex:"1b4f37190a59a4fff41d348798d1829031204fd7ac2a1be7b5ea385567e95e2ace25bf9e324488dd3ab8ce7f29d4c9a4f4b1a8a97f774871ee825e2c17700128d3c55908d3b684a1f550fdb8b38149ff759c21debdd54e49d64d3e8aac803dfd81600464ed484749bb993f89d4224b3d7d55c756b454466ff9fd609019ed5e83":int:32:hex:"9251d3e3":char*:"":hex:"0c6bb3ee5de5cbb4b39d85d509bcacb3dda63fa50897936531339882962e8dc54c285c8944768d12096d4a3c2b42ffa92603cee2da9b435ec52908fca6d38ed74f898fe0ffa761f96038ff7dfeccc65bb841c3457b8de1e97d9bee82e2911602ee2dc555b33a227424dea86d610d37c447776295b412b412903ad2cede5170b6":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #2 [#2] +depends_on:0 +2:exp:0:hex:"659b9e729d12f68b73fdc2f7260ab114":hex:"fd0732a38224c3f16f58de3a7f333da2ecdb6eec92b469544a891966dd4f8fb64a711a793f1ef6a90e49765eacaccdd8cc438c2b57c51902d27a82ee4f24925a864a9513a74e734ddbf77204a99a3c0060fcfbaccae48fe509bc95c3d6e1b1592889c489801265715e6e4355a45357ce467c1caa2f1c3071bd3a9168a7d223e3":hex:"459df18e2dfbd66d6ad04978432a6d97":hex:"ee0b0b52a729c45b899cc924f46eb1908e55aaaeeaa0c4cdaacf57948a7993a6debd7b6cd7aa426dc3b3b6f56522ba3d5700a820b1697b8170bad9ca7caf1050f13d54fb1ddeb111086cb650e1c5f4a14b6a927205a83bf49f357576fd0f884a83b068154352076a6e36a5369436d2c8351f3e6bfec65b4816e3eb3f144ed7f9":int:32:hex:"8e5a6a79":char*:"FAIL":hex:"":int:0 + +AES-GCM Bad IV (AES-128,128,0,0,32) #0 +depends_on:0 +0:exp:0:exp:1:hex:"d0194b6ee68f0ed8adc4b22ed15dbf14":hex:"":hex:"":hex:"":int:32:exp:2 + +AES-GCM Selftest +depends_on:0 +5 + diff --git a/third_party/mbedtls/test/test_suite_gcm.aes128_en.c b/third_party/mbedtls/test/test_suite_gcm.aes128_en.c new file mode 100644 index 000000000..ad69b0a47 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_gcm.aes128_en.c @@ -0,0 +1,642 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_gcm.aes128_en.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_gcm.function + * Test suite data : suites/test_suite_gcm.aes128_en.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +void test_gcm_bad_parameters( int cipher_id, int direction, + data_t *key_str, data_t *src_str, + data_t *iv_str, data_t *add_str, + int tag_len_bits, int gcm_result ) +{ + unsigned char output[128]; + unsigned char tag_output[16]; + mbedtls_gcm_context ctx; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + memset( tag_output, 0x00, sizeof( tag_output ) ); + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_gcm_crypt_and_tag( &ctx, direction, src_str->len, iv_str->x, iv_str->len, + add_str->x, add_str->len, src_str->x, output, tag_len, tag_output ) == gcm_result ); + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_bad_parameters_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_gcm_bad_parameters( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +void test_gcm_encrypt_and_tag( int cipher_id, data_t * key_str, + data_t * src_str, data_t * iv_str, + data_t * add_str, data_t * dst, + int tag_len_bits, data_t * tag, + int init_result ) +{ + unsigned char output[128]; + unsigned char tag_output[16]; + mbedtls_gcm_context ctx; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset(output, 0x00, 128); + memset(tag_output, 0x00, 16); + + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == init_result ); + if( init_result == 0 ) + { + TEST_ASSERT( mbedtls_gcm_crypt_and_tag( &ctx, MBEDTLS_GCM_ENCRYPT, src_str->len, iv_str->x, iv_str->len, add_str->x, add_str->len, src_str->x, output, tag_len, tag_output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + TEST_ASSERT( mbedtls_test_hexcmp( tag_output, tag->x, + tag_len, tag->len ) == 0 ); + } + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_encrypt_and_tag_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_gcm_encrypt_and_tag( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, *( (int *) params[11] ), &data12, *( (int *) params[14] ) ); +} +void test_gcm_decrypt_and_verify( int cipher_id, data_t * key_str, + data_t * src_str, data_t * iv_str, + data_t * add_str, int tag_len_bits, + data_t * tag_str, char * result, + data_t * pt_result, int init_result ) +{ + unsigned char output[128]; + mbedtls_gcm_context ctx; + int ret; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset(output, 0x00, 128); + + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == init_result ); + if( init_result == 0 ) + { + ret = mbedtls_gcm_auth_decrypt( &ctx, src_str->len, iv_str->x, iv_str->len, add_str->x, add_str->len, tag_str->x, tag_len, src_str->x, output ); + + if( strcmp( "FAIL", result ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_GCM_AUTH_FAILED ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, pt_result->x, + src_str->len, + pt_result->len ) == 0 ); + } + } + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_decrypt_and_verify_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data13 = {(uint8_t *) params[13], *( (uint32_t *) params[14] )}; + + test_gcm_decrypt_and_verify( *( (int *) params[0] ), &data1, &data3, &data5, &data7, *( (int *) params[9] ), &data10, (char *) params[12], &data13, *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_gcm_invalid_param( ) +{ + mbedtls_gcm_context ctx; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + mbedtls_cipher_id_t valid_cipher = MBEDTLS_CIPHER_ID_AES; + int valid_mode = MBEDTLS_GCM_ENCRYPT; + int valid_len = sizeof(valid_buffer); + int valid_bitlen = 128, invalid_bitlen = 1; + + mbedtls_gcm_init( &ctx ); + + /* mbedtls_gcm_init() */ + TEST_INVALID_PARAM( mbedtls_gcm_init( NULL ) ); + + /* mbedtls_gcm_setkey */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( NULL, valid_cipher, valid_buffer, valid_bitlen ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( &ctx, valid_cipher, NULL, valid_bitlen ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( &ctx, valid_cipher, valid_buffer, invalid_bitlen ) ); + + /* mbedtls_gcm_crypt_and_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( NULL, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, NULL ) ); + + /* mbedtls_gcm_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL) ); + + /* mbedtls_gcm_starts() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( NULL, valid_mode, + valid_buffer, valid_len, + valid_buffer, valid_len ) ); + + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( &ctx, valid_mode, + NULL, valid_len, + valid_buffer, valid_len ) ); + + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( &ctx, valid_mode, + valid_buffer, valid_len, + NULL, valid_len ) ); + + /* mbedtls_gcm_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( NULL, valid_len, + valid_buffer, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( &ctx, valid_len, + NULL, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( &ctx, valid_len, + valid_buffer, NULL ) ); + + /* mbedtls_gcm_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_finish( NULL, valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_finish( &ctx, NULL, valid_len ) ); + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_gcm_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_gcm_valid_param( ) +{ + TEST_VALID_PARAM( mbedtls_gcm_free( NULL ) ); +exit: + return; +} + +void test_gcm_valid_param_wrapper( void ** params ) +{ + (void)params; + + test_gcm_valid_param( ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_gcm_selftest( ) +{ + TEST_ASSERT( mbedtls_gcm_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_gcm_selftest_wrapper( void ** params ) +{ + (void)params; + + test_gcm_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_GCM_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_GCM_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_ID_AES; + } + break; + case 1: + { + *out_value = MBEDTLS_GCM_ENCRYPT; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_GCM_BAD_INPUT; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_GCM_C) + + case 0: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_bad_parameters_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_encrypt_and_tag_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_decrypt_and_verify_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_gcm_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_valid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_SELF_TEST) + test_gcm_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_gcm.aes128_en.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_gcm.aes128_en.datax b/third_party/mbedtls/test/test_suite_gcm.aes128_en.datax new file mode 100644 index 000000000..ab3a708c3 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_gcm.aes128_en.datax @@ -0,0 +1,680 @@ +AES-GCM NIST Validation (AES-128,128,0,0,128) #0 [#1] +depends_on:0 +1:exp:0:hex:"1014f74310d1718d1cc8f65f033aaf83":hex:"":hex:"6bb54c9fd83c12f5ba76cc83f7650d2c":hex:"":hex:"":int:128:hex:"0b6b57db309eff920c8133b8691e0cac":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #1 [#1] +depends_on:0 +1:exp:0:hex:"d874a25f2269e352ccdd83cc2d4e45b7":hex:"":hex:"9717abb9ed114f2760a067279c3821e3":hex:"":hex:"":int:128:hex:"0e09e53e5fe8d818c5397c51173eda97":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #2 [#1] +depends_on:0 +1:exp:0:hex:"7dab77e23b901c926454f29677eb62d4":hex:"":hex:"8aaec11c4a0f053d7f40badd31a63e27":hex:"":hex:"":int:128:hex:"cec2e3230d8b762acee527e184e4c0db":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #0 [#1] +depends_on:0 +1:exp:0:hex:"2397f163a0cb50b0e8c85f909b96adc1":hex:"":hex:"97a631f5f6fc928ffce32ee2c92f5e50":hex:"":hex:"":int:120:hex:"3b74cca7bcdc07c8f8d4818de714f2":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #1 [#1] +depends_on:0 +1:exp:0:hex:"a7adc0d3aacef42397bbca79dd65dbdf":hex:"":hex:"c6d3114c1429e37314683081d484c87c":hex:"":hex:"":int:120:hex:"d88141d27fe1748919845cfa5934bc":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #2 [#1] +depends_on:0 +1:exp:0:hex:"10171805d7f7a6d87b64bda57474d7fc":hex:"":hex:"fad65b50c1007c4b0c83c7a6720cacb8":hex:"":hex:"":int:120:hex:"c3d3f240d3f3da317eae42a238bcc1":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #0 [#1] +depends_on:0 +1:exp:0:hex:"8aaa0c85d214c6c9e9e260e62f695827":hex:"":hex:"84e25c916f38dd6fdb732c0d6d8f86bb":hex:"":hex:"":int:112:hex:"a774815a2a8432ca891ef4003125":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #1 [#1] +depends_on:0 +1:exp:0:hex:"def8b6a58b8e582e57700bab4f2a4109":hex:"":hex:"3615439e9fb777439eb814256c894fb2":hex:"":hex:"":int:112:hex:"537be9c88d3a46845e6cf5f91e11":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #2 [#1] +depends_on:0 +1:exp:0:hex:"5894231d743f79638687c070b60beee1":hex:"":hex:"e34cd13b897d1c9b8011a0e63950c099":hex:"":hex:"":int:112:hex:"d582c4bc083a8cf1af4d5c2c9b11":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #0 [#1] +depends_on:0 +1:exp:0:hex:"6b25f9cbdc3bcd27fd245a1c411594bc":hex:"":hex:"a6526f8c803b69dd5f59feca1cff78e2":hex:"":hex:"":int:104:hex:"c7e19e08a09a9c1fa698202890":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #1 [#1] +depends_on:0 +1:exp:0:hex:"b3235422897b6459798a97ddd709db3d":hex:"":hex:"96679e9362f919217d5e64068969d958":hex:"":hex:"":int:104:hex:"44ed41bda0eb0958d407b7b787":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #2 [#1] +depends_on:0 +1:exp:0:hex:"f65bc795434efba3c5399ed3c99ff045":hex:"":hex:"2e727c19a89cba6f9c04d990245fceed":hex:"":hex:"":int:104:hex:"64830ed7f772e898800fc9ae2a":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #0 [#1] +depends_on:0 +1:exp:0:hex:"c6c66d50f2f76c4e911b3b17fcdcba1d":hex:"":hex:"77b42158a4ef5dc33039d33631bb0161":hex:"":hex:"":int:96:hex:"1bce3ba33f73e750ab284d78":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #1 [#1] +depends_on:0 +1:exp:0:hex:"13558db9b7441c585d381ffc16b32517":hex:"":hex:"addf5dbe0975c5ad321e14dd4bdc2ad2":hex:"":hex:"":int:96:hex:"f413c3bf125ce5317cd1c6bd":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #2 [#1] +depends_on:0 +1:exp:0:hex:"74638628b1361c2954ce0ac5456a1155":hex:"":hex:"c5861507c879e6864d7cb1f77cc55cc6":hex:"":hex:"":int:96:hex:"8a514fdc7835711e4f458199":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #0 [#1] +depends_on:0 +1:exp:0:hex:"7815d22c5c081df9ac2114aaa2c0cbf9":hex:"":hex:"822f83cd9f249dfc204b5957f0b0deab":hex:"":hex:"":int:64:hex:"aa1f69f5d3bb79e5":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #1 [#1] +depends_on:0 +1:exp:0:hex:"1a847a47823cb9c298e4107c6aaff95c":hex:"":hex:"39348f80c6bc489f9315be7a6fcbb96f":hex:"":hex:"":int:64:hex:"c3b3f31e56cf4895":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #2 [#1] +depends_on:0 +1:exp:0:hex:"16e67ea248ea6db08af1d810cb10574e":hex:"":hex:"50386e2075eb15ca3f3e6db6bff01969":hex:"":hex:"":int:64:hex:"3d4f3b8526a376ae":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #0 [#1] +depends_on:0 +1:exp:0:hex:"26a8301636ba93e7f56309143f184241":hex:"":hex:"c7e32b1d312971bdc344aefaf45461bc":hex:"":hex:"":int:32:hex:"25f1b41c":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #1 [#1] +depends_on:0 +1:exp:0:hex:"130a07c467067148da2790f90d73ff32":hex:"":hex:"800b81c9d2ff3a8e15690ffb4117e211":hex:"":hex:"":int:32:hex:"abcc8d71":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #2 [#1] +depends_on:0 +1:exp:0:hex:"ccfaae59c3196b8c403716424ea601f5":hex:"":hex:"f9b059de0efa4e3f364763d63d098410":hex:"":hex:"":int:32:hex:"8933444f":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #0 [#1] +depends_on:0 +1:exp:0:hex:"b5beefbdd23360f2dd1e6e3c1ddbfebf":hex:"":hex:"81a8494f85be635d71e5663789162494":hex:"f9ebf242b616a42e2057ede3b56b4c27349fed148817a710654de75d1cfc5f6304709b46ef1e2ccb42f877c50f484f8a8c6b0a25cff61d9537c3fd0c69bbc6ef21cbec8986cbc9b6e87963b8d9db91b7134afe69d3d9dec3a76b6c645f9c5528968f27396cc9e989d589369c90bbfefb249e3fa416451bc3d6592cc5feefbd76":hex:"":int:128:hex:"159a642185e0756d46f1db57af975fa3":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #1 [#1] +depends_on:0 +1:exp:0:hex:"c465aa8fe5d534c912e654f5aaed5857":hex:"":hex:"5c155f7194b0d0a17b9a0c234d609443":hex:"a3f8d705b233b574399f72350b256cb4893e130688913ce3def8e44687688c0352ff987aea35dc53bc95cdb9cdcc6e6eb280265d9a1af38d526392ab63c9b043c1b1b43e18321e84eb7e08884f2463c32b55eb5859fb10918595a724a61cfdf935e4f96d0721612720d46a946487b525779f6ce0abf04fc5608351119b7427d2":hex:"":int:128:hex:"9595a6d879cd7a949fa08e95d2b76c69":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #2 [#1] +depends_on:0 +1:exp:0:hex:"744b9e1692d8974d7dec349ebd7fe1e8":hex:"":hex:"62ad4b09fd554e0d6b3937839e693e5b":hex:"6f9978f7078f0030c45caf49128ff72943a208a2398d08d132239f3ab5c184708e4222ec9ccde69dc86d1700c2fe0af939454bbb3962327158557860b6fa492ab8201df262a6209705c7e3129419bce8b827320893c1579ca05b32c81b3963b849428f71fe7528e710557a272117199163a35ebfbaba78f7676f7e566b16311a":hex:"":int:128:hex:"634f6fe9625be8b1af9f46bcc0fa3162":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #0 [#1] +depends_on:0 +1:exp:0:hex:"097c059535037c6b358dbb5a68b5f2b1":hex:"":hex:"00caedfa078c27e3d9551e3fb8d98d77":hex:"6c4bde11129a959fcd6a482cb19f5f1c582c042b314f7997b0450242f9e669dc1cbb0a3b7a185bf8b035267e6f03206268008e2b97864d44d6a9c6b1b4b067d623c4b4e9c608042ea9120aed3bee80886352683891496d8980e40b8480c98c2fe08f945aa1ef6007c65220319dd8678184ab54e81083b746ec6441e87a568e0c":hex:"":int:120:hex:"5075ef45c6326726264703f72badde":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #1 [#1] +depends_on:0 +1:exp:0:hex:"d25db5eca46c16490294423ca0c35660":hex:"":hex:"6f37f15d6c7ea816278ab977c29fa45e":hex:"bd76fd431cea72a288e5d7289c651c93b5f429a54f85249021d6b595eb9ce26e18914a381a6b0299acc3725431b352670f206b731be718a598ec123dce0a2c5ac0aa4641b092e704da9f967b909ca55c2722298365a50dcb5b5ec03a1d0cbb67b8de1e8b06e724af91137e0d98e7dc1e8253887da453cdcbd2eca03deacaabb8":hex:"":int:120:hex:"00510851e9682213d4124d5517ebaf":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #2 [#1] +depends_on:0 +1:exp:0:hex:"b3c6258a726aff94a7bcc41646c68157":hex:"":hex:"7f5b3315afe5167a7e9061ab8b005588":hex:"0ef3384862c7e00c2912e7fde91345dc3134b5448e6838f41135ba9199c03a7f208887e467563b39a6c1316540c1401e8ff148386c50fcf15724a65d3210b17832d63cdce76bd2b458348332b0b542122a57e381475a59440f280db6e1f4b8d0babfd47e3db11a9ef89cba5f334f0e8e72be30afb2b1ef2df8eb7f8d3da033c4":hex:"":int:120:hex:"180489039ccf4a86c5f6349fc2235b":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #0 [#1] +depends_on:0 +1:exp:0:hex:"73cd0a1e2b6e12fbaa7cbace77d5119c":hex:"":hex:"d897681764bcc3b62c26b4aaf407cefa":hex:"8c773e14a906c7deae362d1bf3d7e54c6be4c74c691b7f2d248693b2619219fba6eb5bc45f77af1cf7c05d3dd463158f884fe82290d145135889fd851b86ee282aa20bbdf6af78c7f9db6128b8b99e7f9b270fd222efa18f7aca6932a1024efb72113e812b3f9d2d4ccc7c85f5898ddacccbf1b441cd74097740dd922b57bade":hex:"":int:112:hex:"d8811a8990191f1e5bd15be84995":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #1 [#1] +depends_on:0 +1:exp:0:hex:"c1dfddafe076d0ceebb0f37bb25bc0b1":hex:"":hex:"29c56db10cea802c19fb6230227ab2bf":hex:"287b73cdc62ce058cdceff8e9af7afc321716f69da9eef60c2de93630ba7d0ed0a9d303cd15521a2647159b8478593f3dd3f5b7c52081e5154e55ccbff371d7e5dfc2d05e14d666a01ec2cc6028aacadfd78dfc73bf639fc4dfa0a0c46415902bbda2443620fa5e0ce4fccf1b8591e3a548f95755102a8438300753ea5f61b9f":hex:"":int:112:hex:"309fedad1f3b81e51d69e4162e6f":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #2 [#1] +depends_on:0 +1:exp:0:hex:"2c4087ccd28ceda147d2fcfc18579b1e":hex:"":hex:"9cbdd67c79ab46bcbcfa96fa2c3d7e87":hex:"35088d18dff0a9d3929ce087668aae1d364b37a97102f3f43e11950e6ec8296d0c99b00cd1c5dff53d3a38475e7da7b9ee4ce0c6388a95d3f8b036414e4b79cd02b5468cbb277f930e7c92432a609db1effe65f60f1174b58f713e199491f9e0c29ba1f2e43306775d18c1136274af61488a2f932e95eceadfe3fe4b854fe899":hex:"":int:112:hex:"b7e83207eb313b3ceb2360bc8d4f":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #0 [#1] +depends_on:0 +1:exp:0:hex:"bb66584c8b18f44c11f3bd7180b9b11d":hex:"":hex:"39c82aee03ce0862ff99f8812cdbdcf0":hex:"45ec858e0a5c6d81144ba893e0002818a70e9a19002a5471993077241b3fcfb4fd984f2450803293882d1c7ecb654e611578fe7d258f9a2ca3b5f0c0f0d0ec4828bdeb9299914ff2ac4cc997cf54fa908afdb3eae9f91d67c4637e1f9eb1eae2b3f482ddd5467668bc368b96bbbfc33b9ae2658e4ca43fcf4b66ba2a079d65f1":hex:"":int:104:hex:"24332fd35a83b1dfb75969819b":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #1 [#1] +depends_on:0 +1:exp:0:hex:"7b2a230c8978d4e38fa5096ddc19d6f5":hex:"":hex:"cd25e744a78af858e825e1fd070324ee":hex:"628baac336862573cee158cd3935c34df3055dadc9c1695e9ea18724f6457f0d1833aab30b85a99e0793e56000de5d6d5cb2327a4cc8bec40cd198459e7b93617713e63bbd15381a066bc44a69c9ad3dfb1984f8b33a9429eda3068d3ac5fbbaaee2b952a486e58d674ffca641d9ec1d102600af11641fd5fff725204e6c34a8":hex:"":int:104:hex:"68d49d495ff092ca8e5a2c16cb":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #2 [#1] +depends_on:0 +1:exp:0:hex:"73aa576e1dfad2c993afcc088bd8d62b":hex:"":hex:"712e665a0a83e8ecad97e92afeb35706":hex:"314e5fee776e9d5d2a1fb64ceb78e2c9a560a34724e30da860b5588fe63d50838cb480ff8ac61d7958b470b1bfd4c84799af6cb74c4a331b198204a251e731f7d785b966da595b745d01769623492c18b9dd8bd3c75249effd2032658c715906a71dbbed847027ea75d647f9803296a41906e0915250854597a163035a8d3f45":hex:"":int:104:hex:"a41f5c9c7de2694c75856460d4":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #0 [#1] +depends_on:0 +1:exp:0:hex:"83f7631c4d4c466c9246cbc48e2dde6f":hex:"":hex:"f5d6c8c252cb687a931c38f58f74943c":hex:"1f35e94a35d0f424bf690a15038126a41502593612efe6333cf94ea0565ca6acdefae8d74dae62df95e9261c6596c3397220e044c5b08cf39cccb27315d9b795da321204910274a93436bc0573fdba04ae6bb14c6ca955cf8b9e193a12e05796d7f4b397507614dabc457f1cd3ce19e439b6e62703f2189372938b29b7a542b9":hex:"":int:96:hex:"bb85dbd858ab7b752da7e53c":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #1 [#1] +depends_on:0 +1:exp:0:hex:"784e023b2d4c978151d05ee71533c56c":hex:"":hex:"f16d041b9f0f454db9985c8558ef8a61":hex:"91f6e108c294640c7bc65d102d3d25a7bfbbe114acec9b495636689afd65fff794837946602ef04de7d4304a81809e0f7ddc45c476c29fd5286fcf4dd1ba76ed3ce88abdb51cd21e7aaeecb13238ac031da87ab96b2a13157278bf669d0efae28852ec3585d520d54502881322f7977d03954e17e7c0c0d8f762e34f59ca141e":hex:"":int:96:hex:"59699c639d67be6a6d7c9789":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #2 [#1] +depends_on:0 +1:exp:0:hex:"d3a2ec66e4a72cb3540e87f4e67c7e58":hex:"":hex:"07a9cf9f44b07e3067d60e276322e9fb":hex:"d7e722b82e8607a64fbfeefc7887009298f06a637fe937277e3a76e8addaeeb460ba0743912c07b500b4b51e9fec2b7eddf691d155baf689f75968160c19a8330e254220142ae843bf0687aabeb74ab607227b0a7539ec3cfea72a5c35f236623af78beffaee6e7b1adc2895732ffedb3f8520710f04eb9c2ce9b2cae215ed5c":hex:"":int:96:hex:"f29aec72368bfcfa9ae815fd":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #0 [#1] +depends_on:0 +1:exp:0:hex:"83f382a90146544ef4871bde891aed22":hex:"":hex:"c6f664f5ccfd1aaefb60f7fa3b642302":hex:"656a2f221a1339d8f5c26393a08fa31859f626eec9a68afb6ee30e5b6859d1cbb5ed7dea6cbc4a5d537d70227d0608185df71a0252fa313be4d804567c162b743814f8b8306155931fdecf13822a524868b99a27fd2ff8f98c16edccd64520e2dce1ad645fd5255c7c436d9b876f592ef468397b00857ba948edf21215d63d99":hex:"":int:64:hex:"09df79dd8b476f69":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #1 [#1] +depends_on:0 +1:exp:0:hex:"64334f10a62c26fef79d9024d4ba7c5f":hex:"":hex:"7b85251554d4f0ff89980cf3568c5caa":hex:"dab2892262a1832a473cd3481acbd3d1820f14361c275514ec693b40f2170ea5ff82c4f7e95a7c783ea52c43a0a399c37b31319a122fd1a722e6631efa33f8bfb6dc193986580f0344d28842a3a4a5ca6880552557f3915a65501f6ee0c1b68a4c9040f0fac381cbccb6a6e9bca23b99f2ef1abbca71c69aa27af2db176bf37d":hex:"":int:64:hex:"3e8406900a4c28bc":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #2 [#1] +depends_on:0 +1:exp:0:hex:"1c98ca4971c3a6333c18b88addf13368":hex:"":hex:"7f617f08e826a3c61882c3e00c203d4b":hex:"ab1531fce0f279d21091c3334bd20afa55c7155bfc275330ed45f91cfc953771cbde2582f4be279918ac8b9ae07cb3b2efd14292e094891d4841be329678ad58d714fc8ce4bffe51f539f4240c14ba883b95cdc32cf4a9fd6ba4ffeafa0d6718989c46483c96cfca3fe91000f9f923d7f96725e966de068b5da65546fe38f70e":hex:"":int:64:hex:"58cc756d3bf9b6f9":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #0 [#1] +depends_on:0 +1:exp:0:hex:"247d3abeb807bde959e68b40a3750045":hex:"":hex:"3f5390cd7921fcb42c59f0db05a8a62f":hex:"81abf375da7157a1a56068d0918037fecb7296d9b1771c54ae6030abda4b9d76feff818de81747980b2c1b005e36b3be36afbf1092edef6fd875d2903d73612addf206a6ae65886421059c70990a6ee33197f92bed649901fed62fdd20c30d81baf6090f50d9f59290528e58a0b7412ace0a293369f2b4c8d72c2fb0e1c432f5":hex:"":int:32:hex:"37bb4857":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #1 [#1] +depends_on:0 +1:exp:0:hex:"622be8cd3c757de00fbb7ab4563ce14f":hex:"":hex:"16c53a843b1549716d7c06b141861862":hex:"a15d101580d549f2401bf0f36be0f83724875205c9109d2d69d2609cbf67504b918f0859303192b4075f952454f3e7152f898f997b36afc0356712fc08db3343054b20e88ad1274e019bf8fcc3c921d3bc8f9c1d1d24adc61f6033a83ef46a84762304f1903553748b13b1647c96eb8702ebb41ccea4d9cfebcb177c453277f2":hex:"":int:32:hex:"35778596":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #2 [#1] +depends_on:0 +1:exp:0:hex:"8a660aa0191f9816261387d5aeb262f6":hex:"":hex:"c720cb31e841480da5ba656e9b93f066":hex:"d979affe395bd048db26d26908a1c2a435905299086cc55bb65ef782f5aed99c41743c3ae252ea087f5453bdc605abd784b337b60960946358da2218b076826659a1fafa59124a00a3424fce0d00c38eea85cfb3d1e01bcb09d9870d5b3fe728f394e0e512f5aa849d0550d45a7cc384f1e4c6b2e138efbc8f586b5b5ed09212":hex:"":int:32:hex:"cf7944b1":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #0 [#1] +depends_on:0 +1:exp:0:hex:"ce0f8cfe9d64c4f4c045d11b97c2d918":hex:"dfff250d380f363880963b42d6913c1ba11e8edf7c4ab8b76d79ccbaac628f548ee542f48728a9a2620a0d69339c8291e8d398440d740e310908cdee7c273cc91275ce7271ba12f69237998b07b789b3993aaac8dc4ec1914432a30f5172f79ea0539bd1f70b36d437e5170bc63039a5280816c05e1e41760b58e35696cebd55":hex:"ad4c3627a494fc628316dc03faf81db8":hex:"":hex:"0de73d9702d9357c9e8619b7944e40732ac2f4dd3f1b42d8d7f36acb1f1497990d0ec3d626082cdb1384ec72a4c1d98955ba2a3aae6d81b24e9ce533eb5ede7210ae4a06d43f750138b8914d754d43bce416fee799cc4dd03949acedc34def7d6bde6ba41a4cf03d209689a3ad181f1b6dcf76ca25c87eb1c7459cc9f95ddc57":int:128:hex:"5f6a3620e59fe8977286f502d0da7517":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #1 [#1] +depends_on:0 +1:exp:0:hex:"81371acd5553fdadc6af96fdeee4c64d":hex:"940806fd5ddcab9937b4ba875e46bb4b7e9688d616d17fd24646f1ef1457819f55887f53bd70039bb83b4d346aabe805288ab7a5756874bdc2b3d4894217d3a036da5e9e162fa2d9819ceb561ecf817efc9493b9a60796f6dc5e717ac99bc4ba298eee4f3cd56bbc07dde970d4f07bbfa1f5fe18c29a3927abe11369091df28f":hex:"3262501ed230bc4f5a190ab050e1bcee":hex:"":hex:"ffeb1907bdbfea877890a6e972a533ae661a903a257b3b912c7c768cc988e05afd71a9e6117d90d1e1b54f55de9b10cbce7a109452567483cc8d6a68b9e56da10802630591fdd8d55f9e172f0f58a7e0c56a73a1ae3c3062f0997b364eb0885d48e039b2ba1bd14dbb9c74a41cbd4b52564e470d1a8038d15207a7650bd3f1d6":int:128:hex:"227d422f8797b58aa6a189658b770da9":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #2 [#1] +depends_on:0 +1:exp:0:hex:"ef5295e9ae74729e222df6dab251158d":hex:"59372848432f86f5740500391d2e5d5fbe1f80ea876a0ecb9a5b298d9ea7cdc28620aeb2fda015345ae476f265351b2c6b6fcd66bc8aae4dc8a95c1350cda204da3d2d2fc5e6e142dc448296d5df0cc349d1eba2fa98d2f468662616274a147fbe07927440afa3967ac09a03a8de0b03f3036bde5e272e3c4c5ff169dd730238":hex:"194d08fcc3c08ab96fa724c381274d3f":hex:"":hex:"fdceeffdc8390bde6b910544db61db2f345eba0664f78f65d94b90e3e2a5251be374b3c5d881460cfff3549a01f84eb9d54087306a20f5156cd555e46bd2173386c90ea47983320fcbf24e09a05f2ec4b2577287d05e050b55b3002b753de49abef895ee97015810c06d09212b0c09e4910c64ac3981795a1e360197740360fd":int:128:hex:"e94603dbd8af99ab1e14c602a38a0328":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #0 [#1] +depends_on:0 +1:exp:0:hex:"26db035f2ddd9f5672c6f6af156838d7":hex:"92c315936847649756b0b1bb4a3453e6e6da866f8088d96da44412d9f47a22dda0cd817287ba42163be59a69f73963059139fb3ba44bc5ebfd95b6742546dfb4fe95608dca71911d1347be68179d99c9ebf7ee1d56b17195f8794f3a658d7cad2317ed1d4bc246cd4530e17147e9ecdf41091a411a98bb6047eee8b4f1e4a9ef":hex:"3686d49bb8c7bd15546d453fdf30e1f3":hex:"":hex:"1ac98e9ccfe63a2f12a011e514f446c4c0e22dd93613b1b9b8f56d148be8a24e3682dfc1cde2b69e72d200b516a99e7466dae8cc678c6117dc14b2364cd2b952aed59722056d7dae4cfdb7d9c4f716aef2aa91a4f161d01c98d92d974247bb972de0557e175177ce34361be40c30ab9ac46240016e5ad350c3b7232c5920e051":int:120:hex:"b744316880b0df3d4f90c3ffa44144":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #1 [#1] +depends_on:0 +1:exp:0:hex:"d5c63757197a132cbb33351fd2d81a46":hex:"e970b62ce5f06b15f8448aa2a095c2b3c8adf535e110e7f374411ed51fa19f9c4926045f796b7cd8a942b6a19811b7aae59fce37e50d6ca5a4a57bfb041a5b51c1ee82b54d03be22d9dc2bb9a2e708503b85e2479b0425a033ae825b4f232ca373e280e3cc97cf0d79397a81fb30d3b41cdaa3e788470cde86734e10a58b1e3a":hex:"a669a4d2f841f9a0b9ede1fb61fee911":hex:"":hex:"522ba7220d0d4bea7ab9ca74ad8fa96ba337f7aa749cd26186499081ba325df6d6b90a81bd1c7adda0cd1ca065894f14a074ec13eff117b2a00042038aea55850056a63adf04f58fcd7269085f5ad1ef17ce7b6c40804127f14747a2ad93ec31fada83663af025a3b90c20a4ae415b1c960094e5fd57db0d93a81edcce64f72d":int:120:hex:"7bfce3c8e513a89a5ee1480db9441f":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #2 [#1] +depends_on:0 +1:exp:0:hex:"f380d3bf0d55a1cd56b7e78359eb6c66":hex:"c0e977e91c1c50ee78d4a56c527b2d31a1a14f261aa77e52d910f8f230de4908b5cc6943e28b8c6e7ac61eebe270dcfde48d140ec13792371932e545b6ef4b52d1dfdf54c60ff892b74095a3f4a2b9000acd2cac04666a2305343b8c09f89dcc0c25bbe2a39b14624118df025962edec3dfc58d36fcac531b291ec45b5159e22":hex:"ba3300f3a01e07dde1708343f01304d4":hex:"":hex:"752f09b518616a91a802cf181532c7ec65b54c59c1bab3860f0ad19971a9e5bc8843524c5ffac827067b462ebb328e2eff4dd931728de882055129997204e78717becd66e1f6c9e8a273c4251896343604ac289eb1880207a8ea012626e18e69ad7573ef73071b8e2fb22c75c7fc7bf22382d55a5d709c15e4e8ff14e2bf81e4":int:120:hex:"fbf8818aee5c71ebfd19b0bcd96a7a":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #0 [#1] +depends_on:0 +1:exp:0:hex:"47c807cd1cf181040a4e3b1d94659db8":hex:"c4a52c1f1f0d32c21fb85fba21d1b358b332efa066c7893c566b2e859efdde99fc67bb6167cdb0485a8ed53dd1068d90bc990f360b044039791be6048ba0ee4ce1090c9fce602af59d69069f5bff8b6219aaaed5a9b1bfc8c5b7250c5a6cfe86586fa8064124d551da38d429a17696eb1a7a0341c363f010eafd26683eecdf82":hex:"9963a3fb156beacd6dd88c15e83929df":hex:"":hex:"e784ab006de8a52de1d04bc2c680d847c5decdd777cb2475ad4ab1dc529882d9e51cff5451b14ea5ff9a9bab5c5474e8a331d79564acdb2ac8159e0f46e9019bf80650c481fdaf1680cadcb8c5de9f924760b376ce5736cc4970cb8715b5999f577436283a4c21469306840af36d1e069616157d1b9ce75de3adb13d201cdf1b":int:112:hex:"51e8ce23f415a39be5991a7a925b":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #1 [#1] +depends_on:0 +1:exp:0:hex:"a0b033d14fe902aa0892b0e87f966c41":hex:"1cc751d890cd102486d81c618c23fa335067ac324ef11f7eddc937853db6e16d0f73727725a5a5bd580705416ecd97e368464ed0aea923ffb71c23c37f9cf9c8bd81cdbdc3d0ac34a875db3167ec1d519004d4fa4bba041af67af1ed3d4e09c32b3e8e10abd91f46836cec74b1f9c5b06c05f3b18caa78e7ff185db212b52ce0":hex:"ad4dee18e6c19433ad52021164f8afb7":hex:"":hex:"a30044582dacf57332b04402e993831df0a4c1364a83c9bce7353979fb444cd1b3fe747e2c933457ff21f39e943a38a85457bfe99dc09af886734d6e4218fc65138055ad8eb5d3044f4eed658e312b6165199e682ffa226558dc4b516f8d519f149bb5a40d2bb7d59ece9e5fd05358c89e635792ad20c73c174719f9b28c7358":int:112:hex:"6a18a4f880ce9e6796e1086ed05b":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #2 [#1] +depends_on:0 +1:exp:0:hex:"c4030ca84f132bfabaf660e036f56377":hex:"a8fe98e2b4880d12c99c9d5193b3537b3fbc5165cc1327395174d989be5741f867332271cdc52ddb295ddbeba33698073054c6d2416fafaeb0a76aad870a6fb6097a29fba99f858d49418572c8e4dc0d074ca8af7727c773c8617495b1195d6b2687a2e37fad116dd721b60bcb5471d548c6dafe3ecdcf0c962e4659a61f4df3":hex:"975df9c932a46d54d677af8a6c9c9cc3":hex:"":hex:"86b20fecebc4cf88a6a382d693117cd2a3c9eab747bf5df5f1d35e341d204d8fea6694b92552e347da676bc8d3353984e96472a509f5208ce100a2a9232478417947f85f10993c9d6939c8138bd6151aef8e2038536e8ba1ba84442e27586c1b642f9505455c738e9fd2c1b2527d1ecd3a2f6ed6e3869000ef68417ec99ff7a2":int:112:hex:"3516909124c0c1f9c30453c90052":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #0 [#1] +depends_on:0 +1:exp:0:hex:"6e210de363f170a7ccb1b9cec8d34737":hex:"89853fa002985a45651f2a7db2b45b7e7a7d33ce6c438ec4533c7fa257e1a384130369a68184a807fd0d92a70d91d7ddc56e5c5172c872257230d7aeb9293d785b1b8835dcde753798caff4abcd8bbc5378cd505dcf904aa69902e4f38699be972099adffc8778bd844a9a03e6b58a721a73324d956f20f2ffd00d3491f72f42":hex:"39fe20b051ba21319a745349d908c4bf":hex:"":hex:"ac9d74f8f405fd482287a4a7fa359caca095c0f1b46744f19c3c11e13b0c605b9857c8cc5a1754b95bcc658416f463bf8764f373205941885948259916eaabd964f2d6c2d784f928dc5eefe331f6c04b4862d4c8e966530de6bf533a10818de852de3af7f521b167cb4eb7141ba8ae8a17be1eb714fd26a474bbbbe870a659dc":int:104:hex:"7a2dfc88ad34d889f5e344ee0e":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #1 [#1] +depends_on:0 +1:exp:0:hex:"6bbfeda23ea644fb37666b05dc47f590":hex:"a85ec4c2c160deda7e3de0ae449eea6ed1d24e2c8f3d5151f2ac0fd869f5a763981733b68f46c5197d76c26cce7ddc8afc6cdf4536d771cf3e9cef0098e270c5e1ff72cb0ad7f84abf44b726e0eae052d0c1553afc67c7289a43851a4d04c2856cc46b4039380436465a3b19deb56e41b859aecaf22b90578a23288d5f7d9b0e":hex:"9d154f3cc2c5b0bdd77e86e351220960":hex:"":hex:"dbe575ea04b58429e68c733d99d7fb3a57e5604d6fc3baf17e0c6f981d78c070144702861316f892023515f20b697a8f3a40d821162dc9255d4775e7578285acf2cca67e902c060f80eaae29b9c011b6c110371409d914782e1e4115dc59439a2823507330852f10436b121538f22a3b619075610f1da87b6035138d78c75a79":int:104:hex:"8698763c121bf3c2262ba87a40":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #2 [#1] +depends_on:0 +1:exp:0:hex:"ce1407f666f2aa142ed4ef50eb2a4f64":hex:"585fc1e86809247826f87424741f6ce2ce7c7228fb960803be643acd28332b2036715e2b639fe3f8de7e43e88bd8e65a6e2259391360aaf534ae7566cbd2b3961c874d08636fca117d4123b3063931d7a161d00220014339ae9f447f31b8a2d7d5466fb1ff2508397b5fa71f9b4cd278c541442a052ae4367889deaed4095127":hex:"1225a2662d6652e3d4e9c5556bc54af4":hex:"":hex:"8bc13cc1cb52fbd15390cb5663ce3111c3fb943f8ed3c4f07b7aeb723649fccb90895999ec5dbdb69712d8e34ae3f325fefa49ecc7c074de8bb2ea01fa0554d7adbf49498f2f6e78aa0cd24620bab0f11bf9b2c73ad0eff780eb6c03ee9c4538952af754c566aba7c717d1ee6ac2f5ffe21dab9afd649cd65313ee686596fef0":int:104:hex:"9a1f1137f9ed217815551657bf":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #0 [#1] +depends_on:0 +1:exp:0:hex:"5ecea1da76d6df90fd0d4077ef631b17":hex:"d87e9a0c6a9796d60ed78924f7a8c408d5b9fab03fc76790e74029f13358fcae0035bd971a400845f508c2c2cdc3949be498193afcca6d75f8d21521ac673bd41a936a133fb5ed61098f3cb89df5234c5ca5ad3dbbe488243d282412844df0d816c430de3280ab0680a2a5629dce53f94e8eb60b790f438a70fafb8a3ed78a1b":hex:"7d7ae2ed1cfc972f60122dec79ff06fc":hex:"":hex:"1eb19da71857854420c0b171f1f0714972fe7090db125d509aff6d92e5192353187f0906e3e8187f73709d1a60e074af01e83d1306d582a82edbdbebc797a733d72e2d4208675ef98ea4eaaddae2292e336fcd3fa85cdc577f4b8d3f324f0c5cf3919701208d6978f83466a02ae6cc368f57e18b9ee16e04cf6024b0c7fbad33":int:96:hex:"f74b3635ec3d755dc6defbd2":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #1 [#1] +depends_on:0 +1:exp:0:hex:"6d6de51c30692d7863482cbbaa5ccbc3":hex:"9f242c230ae44ad91cb0f4fe259684883968f3ca4f57a3e0cc4b03ab063a4eacdf63f9e7900a98073e345d1b497b985887e1ffb5fe7d88cefa57dd41076f2da55ce7ab0899bdc5799b23773f8f7a4dfbf1861cf4de377281fae9763dd4ea8dc7c0d632b874c86ac8e4c90339ec3f14cc51bf9241660ab828605cc602984a0f10":hex:"c6c0fa3da95255af5f15706274fa54ee":hex:"":hex:"55e75daa3df3b13a33f784d5adacb2ff6861cacb297d5eaa61693985b6a0f82e9e0b3a28d10648191c6e62d6260d8a8bb471e6b37aca00dafdb2fb17454660f90c2849a9ad1733d7bc227d962b3cd86ab32d5b031eb2e717e4551cb23d448e06bac7b2a4cadb0886fde472d45de39eca2df474ba79eb58504318207325c81813":int:96:hex:"8eb9086a53c41c6a67bad490":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #2 [#1] +depends_on:0 +1:exp:0:hex:"76b7f2307e9cf9221c8f3ff7105327f9":hex:"bc076bfd1ff7a9fb043a371e5af7112bb0c9c442be44ca648567937bcc091c127f02ab70b81ce51b2f7a38954dca3d94b3716c6114f0ba349d6f87f5efd84506ed289dfe8a1277a5d1821c56f9f297cb647cdf36d308e6ad41c55d68a5baaa520d11d18f5ddea061c4b1b1ec162b2d5bcf7c7716235dd31eda3dc3094cb15b26":hex:"3cdaf7932a953999a6ce5c3cbd0df7e8":hex:"":hex:"88c70d3cf5817f9fa669aadf731c0eb03c3d8e552f2dc763001ac94837353ab75b0c6553bb8ba2f83ef0556f73dae78f76bc22de9a9167d7be8e31da6e68b0f0bdf5566059901726b6f2890ac8745ed14f8898a937e7d3e4454246185124f65cebd278f8c11fb0de22da7248f33ef6bb82cb1c08259970714de39ea4114f85af":int:96:hex:"6006fe48f74f30bc467c7c50":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #0 [#1] +depends_on:0 +1:exp:0:hex:"bac83044f9d8fefcd24766644317c533":hex:"a72daba9de96bc03b5cd7449c2e97c858385475127b9614e37c197225d5789535b69f9123993c89a4815c1b4393bfe23754ddc6c01fc44cd2009b5f886988dc70a8cebb12664fa4a692db89acb91de6a9eda48542b04459149f59537e703e3e89f6d683ebb797fce3874c819d08676d926bf2da2f83a22449b89e204b5ece58a":hex:"1307cd0e6f9ba5570e9781fca9a4f577":hex:"":hex:"479cdb5f65b9baff52a96c75790e3b7e239125f94525068cd1d73a1b8475080f33451ec83789d7189f5ad6a9130e7aa4df10d71ecabb5ccd980d84d0fbfb342506edcf7298ccb310c0e297dd443ded77cf1d96fc49055534439f1af583217a5de36e4df036a3b640d0212658399b629193080d38aff0d4e8aecd6c8d8f48b44f":int:64:hex:"ca192f8153aa5fb7":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #1 [#1] +depends_on:0 +1:exp:0:hex:"627776b20ce9bb070a88f1a13d484550":hex:"1da4a24fb12538a724f62b277410d50e918bd6224d4a61df6fb7734300643198debea71686e018bcd8455c2041265d11f7f5dcec08c31fc94784404423bcf1dc8e615227d2b0840be123a1efb8201aaa15254a14a2d76a6ddf536701cb3379d3c6b1b0d689e5896186c88d4a2c53a70bb422ecc8e0a5c3b9f3d89ce40676e4f9":hex:"57f3f9388ea1e2c1c73f60b7d711f6ea":hex:"":hex:"f8a06eea528dad12b11ead51763aa68ca062f9f6c1c1f740fb910974f7ad9d2ac87c16fb74d07c3bd3b45f2e26af417e00416bdfee7ed0b69274ead70a52201c1fc05937438855f5564ec3e824daa0c59da1aa6f6cb8a44ab5f73d661b219766b80656cd3ff1e2d6909c6ce91fb14931af8580e859e9d7642678c1c35d9435d4":int:64:hex:"05b432826dd9b044":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #2 [#1] +depends_on:0 +1:exp:0:hex:"8954e2c0a7ea80fe3c8e75246f75bdbd":hex:"d77e11a837eff95c77dd56e9cd97f0ffcee0adcca4a2203d23ce74c804a75cef1bdd69b16228472a2395118dfce636b8916372d6a24106f9a168055c6d4b44264674ce3905b3b30f5108ebf939f3fa8f55c12e001b457b73669acd23c1dcabea05aaba34e2d0f66a4d1c9162764228ebc4d3974fdb38b1a61a207788c5deb878":hex:"2b5f9420b3c583403d92d76a2dd681c3":hex:"":hex:"35b8a04d6557426def9915eb798312a7572e040a65990ce15a8a6e5acd6b419c3fa26828b6efd2f1f50f91f672fed0feaa09a6ca6b4844fac5d3db571db8bbce250086b8c89aa6fa07bdca8dd0e1fe76e0f5a821145bafa11f3a9b0b003ad09de73ad71849ac58f7fd50851aa0fbbed17d222a0a5607f9f75dd3b0d3fa45a135":int:64:hex:"96511adc097838e6":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #0 [#1] +depends_on:0 +1:exp:0:hex:"7d0f9109dd846c47527a429b98d53301":hex:"506efc29c0f02910cc9f5b2e677bb811e366b9e4910c00b36e48e5d5b42718f3b6d1a08a2de9c6d4ce44fce00fb7e10cf89396a88bdb38dcb0dba69449195e19b72ff989666b366f03166dd47cf4c7bf72dba3048fa34329ba86bbbf32934a0992d72c463fffee94653379d23b8bb4dff03fd86cfc971a2f7cdb90589bbbcb28":hex:"f58a5bb77f4488ee60dd85ca66fad59a":hex:"":hex:"2e2760c649f17c1b4ba92b1fc9b78d149a9fc831f0d0fe4125cbfc70d52047f32a7f25c716533d199af77ed05e259cc31d551187dbc2e7d9e853d5f65ab8a48840f22391072cbe29e8529cd11740f27d11513c68ad41f4acc6fb363428930fe3d7c0e698387594156e6cc789d432817c788480f3b31326fa5f034e51d2af8c44":int:32:hex:"6ced7aac":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #1 [#1] +depends_on:0 +1:exp:0:hex:"034c805b5e83b59ad9d6a65ade3940a9":hex:"efbec09f8189404f3dbe569d3bab9b8bfabde419fc80abb3b21a07a5fe42326d23d022406981abd558e94f4debf38f2c34c3c315cb1ae1d5f2d48eae1335b50af9dd05b60aee724edb7d4e12703d5ec8873c55e3a3d6d8d5e4daddd5240fa3ec2d1f32442ce32cde66dfac77ed213207dc4838ca9782beb9a98d6dc52838831b":hex:"b0c19448b9f2a818fd21ba6489c34fb0":hex:"":hex:"a45ba5836011fc65882ba8b1d6bf7b08b17f26b9cd971eece86fbb6aac5cdfd42790a7c7390099b10dee98cb8e4bd8b3ccb3ca5d0b9d02f759431de640ad7f5dffb919a8aaa74695f94df8eff4c7cb242d643c55d6f9c8323006f3be595aa8cdbfb0d9260ad2473b244ca65a5df53d2edd69f47df608e22a68b05623150b5665":int:32:hex:"43e20e94":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #2 [#1] +depends_on:0 +1:exp:0:hex:"f3bad89e79691ae72f53964b928a09f3":hex:"01913e4ef10226d80c5026ba9243fa41edaf5f5c232d17c034db4c0c8369f48d89a1d58b3b2dda496506c30457365bdd76710173a97022d647276a4a8ac73f0e9e211cfd7d64849409ef61cce618675eaffe88b3f14496e5eb013c0f8a122dbf16f2c675edf7f813abe9c56101e570e208e651fd956e710dc09f13ebd22b81ab":hex:"aabf77116a75046e7ecc51a468aa21fe":hex:"":hex:"f7453670604ff6287ebdaa35705cf7553410452fdb1129a7fcae92565a4217b0d2927da21f3d1b2bd5ae9b7d4dcc1698fb97fc8b6622ddc04299fdebaba7f7090917776b86b2af4031fe04fa1b62987fa9ec78fbbc2badc3a31449be3a858ac7f277d331b77c0e9b12240bd98488a131dbd275b6a0ce9830ff7301d51921ba85":int:32:hex:"15852690":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #0 [#1] +depends_on:0 +1:exp:0:hex:"839664bb6c352e64714254e4d590fb28":hex:"752c7e877663d10f90e5c96cce2686f4aa846a12272a0aba399e860f2838827c7c718365e704084fbe1e68adb27ad18e993c800da2e05bcaf44b651944bde766e7b3ac22f068b525dd0b80b490b3498d7b7199f60faf69fee338087f7a752fb52147034de8922a3ed73b512d9c741f7bac1206e9b0871a970271f50688038ab7":hex:"5482db71d85039076a541aaba287e7f7":hex:"4d75a10ff29414c74d945da046ed45dc02783da28c1ee58b59cbc6f953dd09788b6d513f7366be523e6c2d877c36795942690ce9543050f7ab6f6f647d262360994f7f892e9f59941a8d440619fda8aa20350be14c13d7924c0451c1489da9a0cafd759c3798776245170ad88dbceb3cacde6ba122b656601ccb726e99d54115":hex:"c7ee1c32f8bc0181b53ce57f116e863481db6f21666ba3fa19bd99ce83eee2d573388a0459dfede92e701982a9cc93d697f313062dbea9866526f1d720a128ab97452a35f458637116f7d9294ffc76079539061dfeff9642a049db53d89f2480a6d74a05ff25d46d7048cc16d43f7888b5aff9957b5dc828973afccff63bd42a":int:128:hex:"63c8aa731a60076725cd5f9973eeadb5":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #1 [#1] +depends_on:0 +1:exp:0:hex:"5f2af1b14ca9598c341785189ac6e085":hex:"790bc975865f44e3a1534e978e90b064530321a2280a9172dc7f3451773b01d4a56c1857ad0474350b945e4f34cd677c22ca89445a564b47a8526d31d18160c35d2be1e89428c3593b53877cea0d88d85b2a7ed0552e39a0e96e35ae0384a5d7868243045dcbfc245a3eb3ff99f4dd86c0a314f68d1971e773caf9c168b0aa0b":hex:"bbf23307ad2718398b2791c16f69cc45":hex:"26b160695de2ba40afca6bd93f1c2895f92ca9108847a8ab71ad35cac9f9c9f537ef196c5d41b10e3777c9a02ad3c73cd299a85f60e5d02794c3be2643c3e63f105b94d32cb4e3eb131d3f487fa5d1de1a4ad80cad742704ed5c19a7cf4e55531fa0f4e40a4e3808fb4875b4b5feaf576c46a03013625f04331806149e0f6057":hex:"52c373a15e1bf86edfb4242049f186029b458e156da500ce7a8fc7a5fd8a526191ac33e6b4b79b36fda160570e2b67d0402a09b03f46c9b17317a04a4b9fbe2ddcfc128bd0e01b0be3fe23e51b69c28bcf8725b8e4208aefb1cf34fe91a2bb6d5bef7b936bec624a8f38c9cd4ac51a0187635138d55da1fb1791adfbf8459d3f":int:128:hex:"db3bbdf556c9c1be9b750a208fe55c37":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #2 [#1] +depends_on:0 +1:exp:0:hex:"02980dff205bfa5b18037486618e1fbd":hex:"f037ae281e45c50c9fa875f0ec9eb43251d3ae1b6acde27cb5edda7a4e384f50301a68bb6f4caf426adb31457c5eeaa789edc84fd902cb82e00dccbebe272d90cf690ca82ee748885f02daf377970e985d55994fa668fc5e3e06763e6829059fe0c3eb67033b3f5223cd4bb654484c57370d2b856d7117e32ead3d179064315b":hex:"27354e68a004b255a380d8480dc9b19e":hex:"37eed8620136842938ee3c3c08311d1298d3fd3f0456c056e0851a75d844fe6c61aeb2191c024ffce38686c09ab456f0ec26bd76f935d747002af9b47648502713301d5632c2e0d599b95d5543ac1206170ee6c7b365729c4d04ea042f04363857f9b8ea34e54df89e98fef0df3e67eaf241ed7ebbc7d02931934c14bb7a71ad":hex:"f8090d0a96fc99acb8f82bbbe58343fe227d3f43fceece5492036b51ac2fa6db4bf8c98bf28b40132b1ab46517d488b147e12ceb5e6b269bb476a648d8a1133d5e97d4f4fbdfa3866a04948851cfb664f3432de223f3333248a1affa671096708ce6e2c9b4f8e79d44c504ff3cd74e8dffd4ddff490bcba3abffbade0a4e209d":int:128:hex:"b5762b41241cbee4557f4be6d14d55d4":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #0 [#1] +depends_on:0 +1:exp:0:hex:"1fc9bcc5aee350f1ef160346b642cc20":hex:"e0fb08cf7dc901bf698385a38e1a81acd4118f083e52aa52e1ded16ab1e840cc49fa1ead3292ce21096cc75c89dc3701102b0982fd3a6bfa55a7799e579aa7336edf365574a904bad924ec080b093a604994db4dcd8323d7d39c3c35750b0741b170481539d22551871d6a0e2ea17e4bebe8ce19ec3bc3bf4f6edae9cd7ab123":hex:"910a81a5211ce0f542f1183c08ba96a7":hex:"2dcf7492c4539d6abc3d259ba5970033ebc2e7ddfa1af8be11f81b459d7477f310be2171290bec2f2ae2cc51266f46e98c878dd2444afefdbdb73a417518f5fd4c116547bf442fa9a8cb2300c5ff563117b2641dcd65018081e62a7ce5c4d822563824e5eafea90cbceee788ed44e6c4f23fe8926603a15adfdb556f11a0be9a":hex:"514d27f8413d7ed59d96c14e7e74b9f3d4518486876c469b369f8c5734145f4aa52506c8f832d4811e5f981caadedcf09875033c5b28a00f35605d773c7f9e1af7f0c795e3df1fa9b5a524f1f753836c1e2dc9edf1602d37ac120f3d8a5c093a5285dbe93957643a65f22995a2782bb455d23318f01bd18ae0d0813b01d233e5":int:120:hex:"feb7a25a68b5f68000cf6245056a1f":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #1 [#1] +depends_on:0 +1:exp:0:hex:"9cf329dc10bcebb484424c77eb785aa2":hex:"92728a696b07704fb1deb648c5036a1c8602b4006fb2fd2d401c4b6692e252c7f66918078542cc0b1a97486964276d6e6c77bbb88a9fff0285aef70783d9f2be3b7b22f8a8c02771492150122fe022722bf64263f5d2406884108d8d608273bc02a9127fe4dbcb321ac44a7d2090cff7017d59d73ecf927b8b05968675a63ca0":hex:"a430b979168f5df5ba21962d1bd6dd15":hex:"4d94b7650297c66b43210c84e6e7b09385117ed8fb91adf643b2339f39a5d8dd0b0d75a793e2a669e42c5ddb0873714e01cb65da9eb73fd976a49ae9a4762bcbc06be5052f750d110a407764280b510da5fd0fdce969f86ea6bf52ad4fd9e2d81ec5cb84af0a1d406504a34c51c751daebb4421fe1994bf6db642e64bd471d9a":hex:"c13dbfc60b34d75f8a84db1f6aa946dbfc19479d63900450389756cd1ada8f6d2d0776607f7053db6bfa6752c4b8456f0ace314ff3fd4890d6093a4a5d47dd8fbf902e3e3000f5e02ba93a00985f29ad651cb697cc061d8f3cc74e6d8d0743a1988947c9dc2305e2b7c5a78b29400d736acc238131700af38e72d8c98ba007eb":int:120:hex:"82f1dd58425eb9821fcf67a6b35206":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #2 [#1] +depends_on:0 +1:exp:0:hex:"cf43ff6a1ef35c37862ae3b87171a173":hex:"a1e670b3fd62039cf29edb61b26555bcd0f9184be4593bf6b20ceab263bdc76cdef34992fe0ce4d43bd93bd979b78bb252c120fbaafe4947fc0ec05cce4358a5089a841c7476b0ebfca6476e690cb9ee0b73c6700aa82aa8f4050f2c98500052a2d3274b30b0be67549d756efd163c4369b6df0236d608bfbecd784467db2488":hex:"6c56540b3a9595f3c43f5595ace926bc":hex:"5c0bc6e44362299642f3756acf09878bb05549eb6cd6c4942d39fe586ceac228d2aa9c92f8393e5017e73ee41002e60aa8b993c48a7638ce2ae0ae0eaa536bd749b07a8672fc620a5110af61232b6a3d527b36c86637cc1fa92c84008465fd861920884d8a784e194ec52fcbb767a68ca6fabb64ab0a0d680963140d5cfd9421":hex:"8ad36522e4ad47d4a54c5eae0a8b9ff4911aa5b9b13b88b00488a7b678f63cf85945b8d4998d1007e27529b56f50b9e3b373bb6fd861a990514743b9707d535b40d1bdbc3f58a63b8ca30dd7934ee98ec3325d80afaa37e38b4e82d8851166589027d91347727b314e02ed08a7846e29fcd0c764834d12429d9f568b312081f3":int:120:hex:"f5bf21d5eadeebdef3104d39362b85":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #0 [#1] +depends_on:0 +1:exp:0:hex:"a0ec7b0052541d9e9c091fb7fc481409":hex:"5431d93278c35cfcd7ffa9ce2de5c6b922edffd5055a9eaa5b54cae088db007cf2d28efaf9edd1569341889073e87c0a88462d77016744be62132fd14a243ed6e30e12cd2f7d08a8daeec161691f3b27d4996df8745d74402ee208e4055615a8cb069d495cf5146226490ac615d7b17ab39fb4fdd098e4e7ee294d34c1312826":hex:"00e440846db73a490573deaf3728c94f":hex:"a3cfcb832e935eb5bc3812583b3a1b2e82920c07fda3668a35d939d8f11379bb606d39e6416b2ef336fffb15aec3f47a71e191f4ff6c56ff15913562619765b26ae094713d60bab6ab82bfc36edaaf8c7ce2cf5906554dcc5933acdb9cb42c1d24718efdc4a09256020b024b224cfe602772bd688c6c8f1041a46f7ec7d51208":hex:"3b6de52f6e582d317f904ee768895bd4d0790912efcf27b58651d0eb7eb0b2f07222c6ffe9f7e127d98ccb132025b098a67dc0ec0083235e9f83af1ae1297df4319547cbcb745cebed36abc1f32a059a05ede6c00e0da097521ead901ad6a73be20018bda4c323faa135169e21581e5106ac20853642e9d6b17f1dd925c87281":int:112:hex:"4365847fe0b7b7fbed325953df34":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #1 [#1] +depends_on:0 +1:exp:0:hex:"f9ba053776afb01d15915e7f82a04f21":hex:"fb59858421ffbf43d09415a77320cc9250df861e4414817e7b78cab918fa890ea0400d4237f7ebf522d97318ea79f9979a73970296827a1a9690a039e6c605a0a3efc0077156e1b15f14d88685833e09f6cd6f783d0f50579de7a30907b9d8efc4c650ec57dbf7b425ffaf9a900ec91087d470409da4d67cae7328c15a5db1fb":hex:"df26b109244f5a808f3ea7137f2f49fa":hex:"b21c8101ac96c41bad2925b9b6c863f54888f36e4995820ebd51f53e323e46f528d91f4318183be0282312ccde8da075fc2e82041cb41a79e9933012a4cb6e9f89717444bc734da3b7e40e903e58dd0f38bcb115684227ec533c09a93c89c2c2584bbac83a4648f82b4c9207f43b61e5ec470602076ed4731756c87d4e0e24af":hex:"2c306fc60bff58308f2b9f08d52369e87119d7f6de2279fcdea0c46c901c8dc5b4f83578b17a00786014a17d3e380e1af4b9f32fa58b9ac763bdf86ff0c6084afe413a5dcb7617f94d76e59e370eae4829e69bcb70f10545b04ed5fd137e1159f3961b2c01089ebbe2f16a91c782d4f383fbd4d61b66138319b63d79ce9fdec3":int:112:hex:"d6db5aa539a6e2e70885508d637d":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #2 [#1] +depends_on:0 +1:exp:0:hex:"fbbc406a669b94374c7970f2ac10c91c":hex:"a9f334d1ae7d2960f39da4f1df85830d27c0f13fa0bd23d607ace4cf58b359584120e7c90d3062b1b23b1a9e85a740c9063ff80423b5846257e4426c174e8cd77a3dbcfe12970ebddaaa00a8ffb554b2a80decc81f9917f5a1369e8bf7288ed868457993f480d8aff0b92b3db2fda233e32fabec1a4514715364d4f70f98d62c":hex:"46152f5a68c03dbe2f28e69f5b52e2fc":hex:"1052f8b2d3e11da53ba9efe02ce985098d171dff9b98cbc2f6755fd88214ddb8660225a63a1c8bcaf43ff3930e239824ae8e122068b89d7fe73c658ce030cb51dae9836aafb68fad77b1cb5bff8d7d9c920ec449181e10ea643cc73abb9620dbdfa32e06c29cfbd8c7cb8b1103763616ae6f9b19c4a6e1eed88c3971c4778c2b":hex:"7b16424c508da3fed14bb53462d1805f0f9d09f803d4e166fdadbac76f9fc566665554317431642f6e527123ea6c1c0ddcf45005213b0f2747321fa112d7b893cdcf4c1a59e8bd1c48b7d77881c6d79de3d850bce449969305797196d187196d0d81dc3423295f552d3c27d6d70e42c9a1a744a039181e733450c9985c94ae94":int:112:hex:"b51dca8e00988af0987860a663ad":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #0 [#1] +depends_on:0 +1:exp:0:hex:"fe96eab10ff48c7942025422583d0377":hex:"194c8bbbfae4a671386b8cd38f390f46f9df6b8661b470c310921a1c858a938045834bb10380037fbf5f5e00688554537be0fcafe8270b9b59068fa056ab1268fc166c2d729243a06650a171c929c7845c85330c04568d62977eedf3b1ba9dca13bdb8f9522817c8cb99e635e37465ec1c9f6f148d51437aa9f994a62e1bd013":hex:"97ce3f848276783599c6875de324361e":hex:"127628b6dcbce6fc8a8ef60798eb67b2088415635119697d20bb878c24d9c6f9c29e148521cb5e0feff892c7855d4f1c0bfb32ad33420976714dce87a0bbc18e4378bd1ef35197d0ca73051148f1199010f63caf122df5f71ad8d9c71df3eb2fbe3b2529d0ba657570358d3776f687bdb9c96d5e0e9e00c4b42d5d7a268d6a08":hex:"12495120056ca3cac70d583603a476821bac6c57c9733b81cfb83538dc9e850f8bdf46065069591c23ebcbc6d1e2523375fb7efc80c09507fa25477ed07cee54fc4eb90168b3ef988f651fc40652474a644b1b311decf899660aef2347bb081af48950f06ebf799911e37120de94c55c20e5f0a77119be06e2b6e557f872fa0f":int:104:hex:"6bac793bdc2190a195122c9854":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #1 [#1] +depends_on:0 +1:exp:0:hex:"f2956384a65f9627dccf5126141c7bca":hex:"89dfd185bc33adbea0c69b55d37087de3fa7fd69a9fa76aa1568ac363c5f212ae92d202b9338ef397266dd8bd1ef36cab6d1368feafec69a4e3e11e1bf1beba35d96e040d91e9d3a838966bae62a15b18d621f33efd9ec511de4bd287c722cd39b4ba43e7a6f8c8ab672d69eac6b21a8d3544ab1d64f9de31956b93b1104431e":hex:"2f61f76bcf074a3d02f51816c0411052":hex:"bde1508823be7984d5921db4cab1ed3017c0d73cb9bff9874f39a6f5bc449719c1c43d8fb4e76f6813b0985d4b124517f9e4e2d3c552b2f75876563c93a44c18fb6523ee732ea5b6d13417db45120653df3820a32ebdb42d544768461b1d0b55b46b09f688e47240880930fca7097ddfae35f854891e21891dbad13f661a2534":hex:"023a9c3ab3ed0181ec8926e4bfbc0fa63e38ec8980eabd2ed75e29b681b3ec04cc8b27fad3a7ce6dc1efd680479a78f02de7ba92f45dc03de02852a2e67b35bb1dd154568df7acf59081dfc05aca02c0aa9f3f7b4fd4dbdb671b1b973a48af0c325a23467ba5cb59183540f6edf4c00376be39a3a672feb9e795d1bda96f0017":int:104:hex:"613eeca3decbe09e977e0beeda":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #2 [#1] +depends_on:0 +1:exp:0:hex:"2e9bb30ea25f50b3e7711fac05f9d44a":hex:"17a52f4faa608dc9853d4511feb3dd9d2fb92d7a3deb3f8a7a6df3fa2a909b7db30babef12d9da71aadfad16bfd2bcb5706ef2addc58eeb8d8d13f31326f7ab1d0aabfe5525014f05cd8fb80e1ecb0654e62078440157df66f618f078cdf2b322b0f8878bcd924609c33e42059aa69fe0ddca659aea42ab907b483aa55aacc63":hex:"9668e8b1ce9623ad52468431dfbed632":hex:"f776c6e892e373ec86ccf706704d47cd89fa45c2abdeb0f9f6f32cde88c22f001150cc66f0fd83e9b75b97bceb98913cf143cd8a68bf06e1125031e3e7f09dfefbcaef4f04d7bf28aca1992a7e4228fd4017a5b32fc48101c8f5a609eaee9489d02200e8a13efeda60b57df53ccf2fe26309a1c1e1d40db6eb8431dbfe8d43ea":hex:"407171db1dfb7ff20d5c97407375574220534ef75ba18dc616400e5e967e72db23783a6eb9506b611d0c67a83f5c423380ceae66d5dcdffc31e31239357b91794018e9c4c36c286f7b17ee911136d9cacf564baf5f9b9831779375e63aaade8734a91bd4000e53e5e412b3f92f8b68e0b7ad3bf6f274744e2c5a635894bf918e":int:104:hex:"2741ebc33a4d4c156c21385a23":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #0 [#1] +depends_on:0 +1:exp:0:hex:"aa705ee70297e9212f70585d92f42aa4":hex:"5e4b47d986d55f49708cb3e4d27072a7e850936b27b24723856acec7b2e03caccd98c2a002a2dd1d3f4dad8827a5910b42986cb00be7bff47eb401be5f324cd2cd3ea2fa41f4ef61f9771a4c0184d85d6023f37f3f54bb9d7cd621fe36ce11a82678a0754a33049106be597c53f287692ac5a42e59f09a2a117fad6c034a91b9":hex:"89822c9db69229d1e4880afd19965908":hex:"fdd655584a92e29a14a368f28a73f9dc608e5c2ffd308d4aeff7326bbef5ea58f84620c9ad43c0b598c271527ae60dae6db4ffd3f590e503ae7057d8c48e9b1bd8f8a8832629bbfc1391b954a4fcee77d40096eb5dcec5e0439375ed455378d716ee8f8b04ccde3291e580068dd7dbef4ba3685b51940471f24859f8e93b659b":hex:"0f34bb4e2a4016ba41eb23e7688edd455f2d46a5097236d9a124ae0bd47349876319976aa4c3aa41680a63cea85f433e3a1b4376f79d004710d486a3fb5afbb7db2c41aca400e04f75ba91660bb68354029defeaae1853447f8fa0d470b25371da73c9e8ee841ba95fc273f88c2e4604ff29a131a7d73e60a00340e886df5359":int:96:hex:"a247e88acbd4e354d7c8a80d":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #1 [#1] +depends_on:0 +1:exp:0:hex:"ddeec78a0c23e8c5c32d3d4f9830f927":hex:"134fd6be1a934053a539398aeaf5d3aceda3ef722a6b3568af6958a4b1207f7e9b9e835cfd46a7f3d4faed829ad23554fc7c0d1a9b32bad9477d9dd397a259cfb0bea30268aba7b8cf4a35dbf99a6b2ca968649847f717749bc5f41374e1574ad6c357f7b60b0cffcb822bd3924208d0472a973ae97550b921338792ca88fde6":hex:"ae428ebb974ccfbbdbcf6203105724f1":hex:"e3d5ce768c688e881e72f036341b2d91947e02b7327eb53240c85b0b93a40eb0f3346817e2c9e126209b31b57633c4384f7af46846d9bbe6fd0d6babc57b84d0f5be2a8a7b146b38914a4cea70273d5461126cfd7527ab397510176e790300a06066655907d499bded79f5bb39f6fdb03f85a415c2cc2ad1f25078f0da7df215":hex:"865d6148c9820b67c08c17c9214de612ada6e24ed67933d13c3b3ec43637fa305673d8d52d15a195b27a6b2563682a9f98912908668e3335192b1daabf26e1e73d7d34764af006b0c14a0ffad3b6a0def59964b11eb52e829ad790069997931d09be88b8d60aef90e39dfcb0df4fd54b71597b8ac64670e703e7cb83efa3f2cb":int:96:hex:"64b2458a6eaa6f12937a8643":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #2 [#1] +depends_on:0 +1:exp:0:hex:"829008339e983918b8d142091f84ee28":hex:"6f30604d8c2fae216b1ed3d67485631eaada68fe89a7020d6e29f42b937e7640fc1f23c00ba48bf239740f6468289ed211ba81e809cda55fe067bdfa198bf0461daf86d4a7969de9a629513809b358630ce7eb50a783b8c98ec1bd5e56cb47032ee8fc64a939dfc4a870ea9419b16178109f1966ab964da34debcf00cc49f57e":hex:"dc62cf12b6d0439578b457e516d8205e":hex:"e700cd917923b16c968712b2fdbf08be1b5c3b5d9e42cc45465549898daa07c44b4cd321ba16a38aeb6720e217a58428e3a4cc125920cb3fc92f039b66716543bab71b64ebedbb1e5e3e8fbbecff3385ab0ab16b7f6554b7fbb3b4c92307c654361f984d5a6cb69b8708684d90bb1fdfabc0cb59f42c2b3707b3755a8c7abf34":hex:"adf60c4affb2ac76cce20cf9f302b909bfda1bedc60be21b53f65d0b81bff08f7e90ecaaf12ee1f9d921926b75e244b7e8357c1cfc26013a6d1c874ed2e5cd0cce012bbfff0dff85b372d92c18dce887c1651b6467f173a67ac8cea194a6c41e77842675f60cacfbc9c81597a08959d19af632d3c191bf69505620e4290bb040":int:96:hex:"6209c09dd1b7ea85d02eb9fb":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #0 [#1] +depends_on:0 +1:exp:0:hex:"4aec55c7e4bb36c32cb543b57cfba3fc":hex:"4cf1443a5448fd09e09e91b7cc5f8e00f53f0b75a6b17db5ab9a721167de5f7bc5de1fb711accdafb7f3f1bf6b98393e5f09e9091e26d1340122edc91f7e60f62caa218f1927c8f0032be0752520aa650f6f1ddf40412c96d49dcc2287ee17834504f1dda3f4a723e2fce064f0b8dae0789ec455922a14488623e3ac10b6e312":hex:"6669c3022e0820634a95efa2b5578e93":hex:"f6ae9b1aaba18acb741c9fc64cfba3841f5127b1cda5cbcd48af5987428daa5782d2676bc3e2ef23936ec29a80d6b5310282b39b77181dc680799ac9c8125fc48afd185cba2ca8900bd9a0039787b4f3a6846f3edf5f7b921dec2608fd3df67600ae0aba9378da0015bd57d66d2999bf751806d1b89214332bac50f721ca9474":hex:"720c32b0d454f086af36a32cc7274e2f2fe08db9cf1cefecc14b42b3e5c573aefa7e9e1ee0042eee21104dc3e4d19b012099280c5a53e40a0bf662d8295dde743143a28be7305729767a37cbdf08fb3c87667939a8ffe44c96ad272e30b75aafada2963bb9636f189c37d976ed1c458295fe85ed19662c463d7c8155e9f04115":int:64:hex:"4b3343b627095f60":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #1 [#1] +depends_on:0 +1:exp:0:hex:"8629e8064b3ba2b95bc20dd075f8e931":hex:"85896de4b6454acf8568ccf95ab68a632330ce71ca8b4e7bfe26ad8d7e2e6b63f2032e2cd365999ffd24ece0df16904d749d06e829a291f3d07fccee27d9c6f3ff3a139d9e33f0660803de8fe79dc6ad291fad47c93543522a1c38e40697426a9855255e3e0abcb84d474ead15341c6b235ccd755e58fe6e87898d216d65abac":hex:"dc4bcefe284cfc606f39b057b7df411b":hex:"abfd0cb6fee8588aa68606b7e487bb9c0d2bd11205611a6f30a78d9ccf28e827cef4e966fa245e4b7b39533a4bd00176ce3c97858b0c8abdff4c548c835bf1962a6115c4ce7c05b1ce5aa29b412e816abc925b8cb998eb4b69c43a7dda1b3cf0d728072d42cb5a489db521698c5daffc3013537bbf622ef76a2e96089b7d4b96":hex:"b295ca0d7707892fb08537f42d28a844f5877177f136b4620f69b05c83f43bf2e61323e80076c88660f5385060228bdb91d866686e691cc7e96fdaff41f2ca5f5b5d93ecec7bba82515a6e0bd604c99ef93d3ea013d899464558bc822bd765eb1ca2b8b8a7d961a6a316bf135c22d2ee552e62d8bbc5b60ca31bb53cde82fb5f":int:64:hex:"d26cba11f68a5e1a":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #2 [#1] +depends_on:0 +1:exp:0:hex:"4d901e59a491c86bf538f7b38247bb21":hex:"4c370a9f316d25702195409d8e73bbfa40aa15c2b0ea55db9257a9ae4e8dccad14589718741a78e5a74c26a801857e388c9f141ef7df08bc01384b2b2338c38abce51d547056f4bbaf7484f9edc96df122e71f132b7bcb6484228c3ae2f741a2c8b9b208b6f49b07081334b93c501938808cdbd2e40cf95ae4f27a29e1121480":hex:"39e2788c9697e82cae0e222a9e413d8f":hex:"48d7d20e424df3c3efced29e860771647ae01312a96e68d33f982c540e74160a7fbdb623d4b19abb1871d74c6dadc56038954b154389b752bebc40cf4ee1505ec8d844e1a04dcae430befdb081cc84252e0840f5f5146ffe5b9594f856afc2edb33b3c6f9041c9631c5e3d812959c5504938635f72c6fe29a25bbf66a4ecd211":hex:"262718671dd0e2c9a40b9d7297c7f6a26cd5fe4f301999a32059812719896d3a2f5350f6ec20d999fc80b8d7af5a421545b325de9180f14505f0c72250658a5014768fed63ab553de0fb01ab1368356043f6d1a6c9950c80e3d9d4637bbeea44c9d58a4148bb10974d507c62b67cc4e37eaebd7eb8e67077856cc5d1702f8e2d":int:64:hex:"bd814b4584941681":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #0 [#1] +depends_on:0 +1:exp:0:hex:"2f54229167862034ef6c5ff4a1246697":hex:"af2c89d3600329779abfbcf5be8bb83c357d4d2435fc8f4c413b956b898d22a8a889db9e2ff5e7229d7495576989695a0b52d796f9a23e9570b7caec6b46059749c29a293d31a6224baaf73711bc0e4a587abe9d0379adec6de04ce444676dfd8672e6660cfc79d7ee2e7625ce57dd4681bad66aa29bea2baf936122c3db17e7":hex:"8168ef8ef278c832fc0ec846bc9f62e9":hex:"abb9ed24137915265bddbd4b63f1d02efa2a99c8c373f19077c7e1c389feae36a7af42c661b0adc5dc8e4b5520d334e8e0e112d42c2977fa23485c0a85aef83f1e52d6749bd29cbebe14aea6ee1c1098aa96c6360b0192894bb2001c7c0fed7f00bb84953c23bfdda00818d1568fb94c1bd971982d6c01c12a35ef7af34f947f":hex:"cd6dede25433fd3da6137001219b57aa54bdf6039a5a8d66138171b006194fe3e13d484e5cf57a1acdaa8e76f001df7bf41cbed2c5561a37a32113fa116d0918167c29dd9e7d46f7c18d9db33d7f1bc33ac21d159ddec57a2e158f0c0993c16dbf50582371100a8d7c55cd47c03473c5770ad562240f754c99d95ec593dca284":int:32:hex:"4ab63349":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #1 [#1] +depends_on:0 +1:exp:0:hex:"b7b52fe74c5c3266edf731578d28a72e":hex:"01a4b7da57c0f7d9aea51283004b23f899669dccd6dbaec9cd6e747c7adb52432c7c29d1411ec1df4e5e33311ad84218075dabe17f73c95511ce7950f08b618feff56bd452b33455a1a03caa8371dc7fb9aebedb3cb652d94e06bd00a98bb06d30b506d41cb516c759f6d7f793472e6d6dc9ae50cf3dc8b1ad3d0517c4f555a3":hex:"a005750e9f8c68ae238668f0a8f015ba":hex:"805cf3635f9d84c7608c242ee23a4837dd3f260de9afd6166b08164a0256200be9b52e5259a4a54186ec067ddfad90f5c4f92afd1c7e4f2d8443312ba3c4818b664439a02644e55467045071aa2cc7939a940e89cc52c8a53623bc6473bf843a4e0f00149b2ce1543a6540aa0d9c2c5b68ba2bd5791078deed1de3b5f48257c5":hex:"d6124da0896d99fc7f2c3688fbca164f8fecd75b6260162c4dc2d2773ce75cf41a8c7a57998e0a7e49cc71e5ad6a04c7415f8d4fd11f1035d3a02ed744345d74ebc9c4f202f65bfa88d55c747fe777225e218f2149da22b53e6584823dbda42cc2dda56fc72b753f3923c443eb5c656515dd824d8c08cc78152226ed8c1808db":int:32:hex:"60d86287":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #2 [#1] +depends_on:0 +1:exp:0:hex:"7a3501d9fbb86ab80f5faeaf8876b7c1":hex:"4f0dfbd2aeab70c80814a1f261a1fe442eacff5d267fd0c0f93757919810f6610113f1b442270afcc47f2fa01ab01797683ec9267691a0dec45033c57f5cbdfcafdf154fc99e6140176eea92503b3f6fee5dfa5aad05f802e08a08f10e49a8b32a50c028f2bc7aa451be3747d10b96b3a1105c67c5167eccdc18b4a9b0612d03":hex:"6d59be1833e75ce7f54ddc91ad6f5187":hex:"3e556b1b33c42f1ad6cca67dabc6ff79d6cb667527335858e26cb4f6a3d8503ec415968ba97d2d79a3f80c1a10d75174eb5294cce8b89224eba7dfb258fb17cb5c5db7a914ace06e94cd2f2cafe3febc8adc4c2264afa2db2c6356e4c3e8667393a77a0afc36be678d5c0a4b63ae82d9922bbbc60559f331ece9947b67469469":hex:"615ea4535f1e579d7aa45c011018f272c2e234c3ea9e2d102cfaa4a437c41e64bdef7a211ea4d858bdb656215e600911435ef9c8da68e8239e4782ced7e7add063f33f5bc62b85d9ae44ed1b139580118c5fc054ead08257b0a97632e8c503c6219294af423f0deb36758e05857ebb05c6835972488306ebfedd2ca4ce3b2c48":int:32:hex:"74c6bf0e":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #0 [#2] +depends_on:0 +1:exp:0:hex:"195ddad2b0da195ea54a9dad0f86c161":hex:"":hex:"265ab1995fac4fca7c2b26c84e4a2dbc":hex:"":hex:"":int:128:hex:"930f719034b76c232619ef2792fe6e65":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #1 [#2] +depends_on:0 +1:exp:0:hex:"12be48e90c849063637b1c2ab0f2b467":hex:"":hex:"0020c3dff2f6f3acaaae982ce38f63c3":hex:"":hex:"":int:128:hex:"c8891f32b8015024ca42536d633b1863":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,128) #2 [#2] +depends_on:0 +1:exp:0:hex:"8e792fc91675d5efd4d80d5a06378d24":hex:"":hex:"15ad63b969f8e313eac3c717ff9a994d":hex:"":hex:"":int:128:hex:"de9a04b030954b0141dd78ffc67323d6":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #0 [#2] +depends_on:0 +1:exp:0:hex:"a668cfd45b6ef8b766a4bb187d0824d1":hex:"":hex:"a111e94a6426ad9b4362132052eadf4a":hex:"":hex:"":int:120:hex:"3a3331e6a41cada2cca8e856135549":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #1 [#2] +depends_on:0 +1:exp:0:hex:"f36e07f2689832b914e0b817010c528c":hex:"":hex:"654104f9d16348231e6ba6fd30c1f02c":hex:"":hex:"":int:120:hex:"be897583bae073f42138d64e622c35":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,120) #2 [#2] +depends_on:0 +1:exp:0:hex:"25d839a709d98ef9c0c9e78ece961eba":hex:"":hex:"b64537609040790ff648d51406710b9a":hex:"":hex:"":int:120:hex:"4d5854c69cc973be8de41d5584407c":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #0 [#2] +depends_on:0 +1:exp:0:hex:"957dd619f9f19445c374ceda9e9ac082":hex:"":hex:"34887be03b4d4ca8ea2261b600ab0b0e":hex:"":hex:"":int:112:hex:"60e2d50adff707d8b279bdedb277":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #1 [#2] +depends_on:0 +1:exp:0:hex:"a5c9a2dcaf576e67828e806082d8e780":hex:"":hex:"f93732aac9448c4a427e634089d7edcc":hex:"":hex:"":int:112:hex:"f67ed1c98bd2c5f3a738e75f15ac":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,112) #2 [#2] +depends_on:0 +1:exp:0:hex:"0a30a816e8d4d85d40c8e4d7c93b777e":hex:"":hex:"bf1f332aa19682d05cf95f2b03d26af9":hex:"":hex:"":int:112:hex:"acfb2f7884bc496f3089e50dbf42":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #0 [#2] +depends_on:0 +1:exp:0:hex:"b45a16bba5fba362704149dc56ba8a13":hex:"":hex:"64cca850412091bf4e120ccd612df353":hex:"":hex:"":int:104:hex:"7b1adc23af9be185e5ae0b0f0e":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #1 [#2] +depends_on:0 +1:exp:0:hex:"0cbcbc1c72aa90e3ea7e2fe328d79723":hex:"":hex:"2fc5fd964b45082546636ae1e208a937":hex:"":hex:"":int:104:hex:"fe091a768c731e54e2237bfdc4":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,104) #2 [#2] +depends_on:0 +1:exp:0:hex:"94297a1ad3f0c333cd9b087b1efd43c0":hex:"":hex:"52ec9dc82131d7b1c69c01fed6aada10":hex:"":hex:"":int:104:hex:"5c927dda855b76ab8fc077203b":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #0 [#2] +depends_on:0 +1:exp:0:hex:"1e8cf32008bdf867f0ff76e7d7ec21bd":hex:"":hex:"3854b7412de72fefcc4b0c2155f6910e":hex:"":hex:"":int:96:hex:"cc8e7eccc056b06cffc307e0":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #1 [#2] +depends_on:0 +1:exp:0:hex:"2ce1a9bd93fdde2adfd8c2c16a395b95":hex:"":hex:"64072313ed36eef8209f079fa622d7f0":hex:"":hex:"":int:96:hex:"cd9e8ffc1423270015bf8e8b":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,96) #2 [#2] +depends_on:0 +1:exp:0:hex:"b15354ad3d874fe472719ebccd45f123":hex:"":hex:"1b2013153290edef60a6a438bd7517de":hex:"":hex:"":int:96:hex:"f65a841ed510becf52b1eae7":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #0 [#2] +depends_on:0 +1:exp:0:hex:"14ef129784776647eb3fb8897915ab9e":hex:"":hex:"f7bbe9f699156549935f2b92c1dda163":hex:"":hex:"":int:64:hex:"dd10fa64fd51231d":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #1 [#2] +depends_on:0 +1:exp:0:hex:"5d4470053c46a577bba7000075e9bf2c":hex:"":hex:"854b768fdd7492c21618ca716bc8790d":hex:"":hex:"":int:64:hex:"1f3c73722006023a":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,64) #2 [#2] +depends_on:0 +1:exp:0:hex:"ea87d675a0d406c57f78a2531bfc0c9a":hex:"":hex:"0907503fcb06ee384526f7206180a080":hex:"":hex:"":int:64:hex:"65d5466392b63bf6":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #0 [#2] +depends_on:0 +1:exp:0:hex:"d3e8e27568e6e17ff807cc207e5d4eea":hex:"":hex:"18e51cdfb4a3a5ebc7b0d7b17727aa95":hex:"":hex:"":int:32:hex:"a7e3f637":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #1 [#2] +depends_on:0 +1:exp:0:hex:"596a602164b1a0bb50ef91bce3a98796":hex:"":hex:"2025e72bd6a511980a8ddce34565d16a":hex:"":hex:"":int:32:hex:"f84f92de":int:0 + +AES-GCM NIST Validation (AES-128,128,0,0,32) #2 [#2] +depends_on:0 +1:exp:0:hex:"d0194b6ee68f0ed8adc4b22ed15dbf14":hex:"":hex:"32ea8970a8cb70d6ffb3972a146c6984":hex:"":hex:"":int:32:hex:"eef4b97a":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #0 [#2] +depends_on:0 +1:exp:0:hex:"869ce65e5e5e12c620076365f149784f":hex:"":hex:"317bf07e83c2e9717880b7d080957fe1":hex:"ee185d738260de67f1792a7d548ea73267fbbb6543bc081fac43e00e6cca92d7d646f27054894664ffdcbe635e34cfa800912b59fdaa624b36c44c9ff4f193d3be2f97a7820a6d4ceabe967091ef672098baf82dd3b671cac4fd4f4b14e4ee388fbdaafb4dab2385df4fca23a78d31f11bca15eedd7cac778484258778106a07":hex:"":int:128:hex:"add6c89153c4c0eead03df44487742a0":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #1 [#2] +depends_on:0 +1:exp:0:hex:"0a05baee927bf23dd2f4b57b90fb6434":hex:"":hex:"8147e99dc9e462efea9c1d7f30bdf45c":hex:"6424ca7fbf24c6c3b0b5eb9d769b26a9792c96a8585dc596208ae6cfc0b265bd8d26af31027f278bb92a9e3b365beae8d964ec7a4096513f84fa73f8739fa7e11d54d678bed19546d2b71b3d0166b25b47ad7cfa69d74057d889258a796a65f2bf8d3bb151f4e721d398e74594a186e6182c16fe4c8813dfec67215b3c4a94c0":hex:"":int:128:hex:"05fac5520a99ad7fb407c48995a2c331":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,128) #2 [#2] +depends_on:0 +1:exp:0:hex:"e28c435211743a7872e4a0bd7602336a":hex:"":hex:"2ddbee94fcbfacea080ded468f67180c":hex:"63190ef542656cc2b69a9b0daf8dbd2d38cd75f17b92d6d891c17b0337ad4fe4539d9154722fa430782a1d79620e974661918166e39c453c5a98759a13d2766138c7750e6cbdc7b6d7cbe44f3f4de7bb562d9bce6e6e2e815444842b89ba8b73454218c483e574ca886a84e8c9aa6f56dd1541a7e35a4a5b8f6a05ad5bb013e9":hex:"":int:128:hex:"2ce6d74cda466354a736636bf18acfc0":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #0 [#2] +depends_on:0 +1:exp:0:hex:"2b2bec16c7d326a35a8e4c0b8c2e3674":hex:"":hex:"4573eb54491ed91bfa2185b762115bc8":hex:"7a4a6b3114dabc50b201472c5cb13a79430f78eedb2ba8492c01ce10a74d08565b9bf9874bb8fb72f694a23babdd08684cb68d7e09e65813728aaa5c41f9c2b10d921f8271e200e0c519c7c46f572bc9fe3f27e13d1e6d7bda4bd66c1c4b0fec8c68a1b0ed7b0659009dc894ad55e0712ddd0837315734f2bc3b757241af35ba":hex:"":int:120:hex:"5f5d4695795b8580b0bc414a81b002":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #1 [#2] +depends_on:0 +1:exp:0:hex:"886fb12554b075dd9663efd076acbe56":hex:"":hex:"7e7a73542868fc27a01865c3aa635ad5":hex:"cb25c2f029c7a877a0aa565c7f7347b317ad534821edeeea838996dfc42b13787e5bb237525ac926ca8a6c5078210f4a27863e8114c728d09653fa93ae990e99f0c856bc8097c2cd33cdca1a407897e2f495d2e75356aabd891702f25ff20e6b6c8a785d74b78a734e311fd236f9e970202674004ee4151879d59340b20aa23b":hex:"":int:120:hex:"8255116ee1e3cf936633017c4dec3a":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,120) #2 [#2] +depends_on:0 +1:exp:0:hex:"920fdf4b39c63947d57a07eabbf3f2f5":hex:"":hex:"77431ebaad53e42ca7eead0d45e5bd18":hex:"11f82f9ef7c2161ba73cf7da82c5397da5e8278da180a976f43222402e983b057171f793641a8343d6366d6cc9260dfe8becb8396b5bcfa0f46908bd809bdab61126cbb8d63f601965fb9e4b3afd66c594dfd394d4cf06f79f361771a85dcead6f45dc7df10fa434736eb109a76fe6cda32c5773d4db6449494f2a3f6c884bfe":hex:"":int:120:hex:"1291cbea1a9f8b166c7306ff9eb281":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #0 [#2] +depends_on:0 +1:exp:0:hex:"114060534f526895f30dfb4007356ea7":hex:"":hex:"5ed7fb59618ec3d081e60d8259a3f184":hex:"a56566a98d9d4fdcebc932adc405e0b8190d537f931983168283d0431e7589333d42f2a3d6e41f268e7b566cf48694cdcfe01fbb9198804ad39e7d387039575c5de787610a23ec265505a448c3a64ddac1b0d8c567eefe5c3c2dc1bb15af45b4bd8fc2e1506ddeb2e39e04f72fd24a64cbbbc929800e0687b53eb89b3049f271":hex:"":int:112:hex:"62f770b3985388ac37e14e8d4696":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #1 [#2] +depends_on:0 +1:exp:0:hex:"697ca4e9de580b525d7149e8b69e8093":hex:"":hex:"e844153734eaebd86983aa3bf50068df":hex:"cedcd5ffeb7988837c38a0be4234ab1b03f14367a1a3854b6dc9f33eb9a87c411326e5cb7d12dc730cb6f363da2ba68affdfb651fe497942e0dd59668f56c23dae80b7bbf905d36b501ff037fcdffa472efa4bcc1c975b67e5d7f348db73e0ce648b44ecc5b5bbbdf3101bf32ea99e3c8e8991c94fa609c93d4b375a4389023b":hex:"":int:112:hex:"95becb04cd39c868c9dbd1d4e59b":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,112) #2 [#2] +depends_on:0 +1:exp:0:hex:"2fa92cc97ef469efeb2c25838193435a":hex:"":hex:"07e6492f2377c04a85045d24940fbe8f":hex:"0f021fb787c6de2be054bdb2741aef82ce35d951de2986c86c3dac77ee0804dfbd010d33a5dcc109769d4b8ff1471eb98fe917c7b0b374e80539f2f4432f92aa55d8398a71510c2acf85c54975fb09ff5638b936283efa3c1d3b054865f97685d6bfa0dfcffde3a20525b5324573b69dde230ea87c685e4f6b5c3c4c55828a86":hex:"":int:112:hex:"397b2b0dad7f1926bfc25a3ba0ca":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #0 [#2] +depends_on:0 +1:exp:0:hex:"a61f8a5777ec3da0c3e257d421286696":hex:"":hex:"14894cc4ff71e249f0053bbc1680331f":hex:"9df46dde257054160854248e70625183bf957ecec36fa4f5a79a1650e04b500f7f2fab4bb873f0e813f0d6b17610bde0de95427a8e2d1293dcdde053f5b1a5a81af25d553289e89e77e4ad7d0a1190151724730149050bd021ec61a08ce2271390161c752df8b5f61c33ee39366de4c1db41d085ab9dd88e170e8c41c571e2cf":hex:"":int:104:hex:"e062ab7984221ed226be353731":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #1 [#2] +depends_on:0 +1:exp:0:hex:"aa2d04f4f5258c6363b1210c91aff7d1":hex:"":hex:"6b24c03273dcfd508cead2df0c65ef2d":hex:"81a1b326f8f22bfecdf1f386bf8fe678a427e3886801b823a37860b9a832356724b1d352d6250cf8e8f89d0bf2314fd11464c3b4871478f0bc290ee1096c8f6cb5484176d70762289b44309d6a88e4750185abf30901bcf8d952da9abaaf9807c0c0ee8be2b247dbbfd182b83f9bfa67ca3bf448c3f5a3de3c31b058c3f944a9":hex:"":int:104:hex:"80dee09fed5183d6405beeb268":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,104) #2 [#2] +depends_on:0 +1:exp:0:hex:"cf221e6cade9f6cf509afa6979cc1fb9":hex:"":hex:"d35433be41a259dfaf58aac1d82af462":hex:"b31c477490e5624c4aac8e590725bfa8b3efca618e2369e9b980d6a463a014d55aa8317a9e70ce6de7c574cd15242cf4eb3eb078cd2f49fd82d1a56c6c4241342e62a2e9d94f0aaa024055cb441d650f0a6ecabfe9ef563d6bd87d4cb1bed348aee42487c13b73e52fb70f0ca6ed81924fd519806e04babfd08df1a00191caa1":hex:"":int:104:hex:"f1776b1ee7a3c49f99f34f582d":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #0 [#2] +depends_on:0 +1:exp:0:hex:"c98eb634c7caf52d3f3d9f344e141988":hex:"":hex:"a0e58176826910a69c2d68ae1c6a05c0":hex:"6e559278bc469cc670c4d9105c3c2f8fa308e11b4a60f75664a9bfaff4f0176175ddd3c6c17ff91a208dbbc7c49efff099fa873f60849ffaa3a3003419cadaa06b92a678b80bf6c952bbbe596dd0a2eed35507c55c48a9e6131bcbda0621cff87e02be5d082944f2c8e27211527717272839601b0e26cb5aa2301afd05ae1b35":hex:"":int:96:hex:"3d8617b2db536ba7d367013c":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #1 [#2] +depends_on:0 +1:exp:0:hex:"c5018f4a8e2a850979b006d0498dd0fe":hex:"":hex:"75e4bebdd170159cff59f895ebdeb118":hex:"25ed2831fef205690381c73e925ef7ba20d5f2e3a4b5d7beabd749fafa08a6941acb1385aed977ea824322d378649f646a812e6c87ded6ae437c68ffdd4fae937a8498ae825d7523746730af84d56380be8f575c60e7f836a862343916e98cc2aa5a27cd63cd92df63b8bb47c81fa6a53740a125bb9cbb247c916363e60f5f65":hex:"":int:96:hex:"0aa5aced93e0237bea9a0015":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,96) #2 [#2] +depends_on:0 +1:exp:0:hex:"cefd40aeac28fbea6e3343a125fe1c9a":hex:"":hex:"324b9722166edc3831bd19c1db5bfbf2":hex:"72b7a4289bf7f5a752665839adde8f79644424839db059ce40de326414c09691d5c7071e43722104a94e430e263bc974b98f167c50b97490bcd4286b502f607ddcec5387695463154bd9598ce8ffb6104d1f7010bc196ea2dcbfbf452d6257b1da00271fe1e6fb56c43656d5570b965e0369502443536cc46d4c05b1e863ed8f":hex:"":int:96:hex:"0c6b28de22e02fe6a4595d5f":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #0 [#2] +depends_on:0 +1:exp:0:hex:"58cb7cb58518ff3fecea4b44ad9fdef1":hex:"":hex:"fe619efb1c9502c03cb8a70792f9e046":hex:"1a7c444a84267f52c36f3c09f8c4a88b6ffe3309b8edaad93a08d3961af28b7c2baba5165f0a9efe13fa6a0ac595da156741dc7f728c11edbd8ab02f03e45716be504778a75374ee882af488bfbc6cdd58fd81d3ac5f369f85ba42c6fd7f9df4b25fdd2fd32607ea800047e06058388c4f71a5eb4d825e8578106041c84c25a1":hex:"":int:64:hex:"8243f32002d33cdd":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #1 [#2] +depends_on:0 +1:exp:0:hex:"15cc4cb979a343f4adfb821d6f6e9c66":hex:"":hex:"68464e7eb64360c7c0a8540ac3473513":hex:"d69f4a9595a48a50ec33ac1848df3d994eff838b28ea7c8b2c42876dadd60a3f9769bd4f61d8007c9dd4fde55edcec8f5ac3bf23b1a958fa714dd88cd5261edb69b7b086ef0f442179943f0871a6253aae99d31fdca448bc3efef353b5cc55cfc576e4a7fb73a5ab6b5af58dbd381bf7f9d69a5c2bfc902901fd485967b23bd9":hex:"":int:64:hex:"c0f4302d8276c3d3":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,64) #2 [#2] +depends_on:0 +1:exp:0:hex:"6398de910ff8f3acdc2217811a1da2a1":hex:"":hex:"fc69b21ec18195901ffa62260fa20454":hex:"021f225240cc9a68c4886824d373f3a70fa32b3a926c78164642450287d269d39dbd49c8c71ce7b914f83e8b53bc61c6773f98318557b45f0cc2ef2539939df7a1e6765117f75631dc5640291d20e6402d22cd2e231f9c2c67cb24ab5d8a69933c49b89c9fb2ea57136a6bf1bffe8e04d8d6c813040215f051c654d93224edfc":hex:"":int:64:hex:"314d1a332d3c590b":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #0 [#2] +depends_on:0 +1:exp:0:hex:"382d86868ccd08d417d94f3b73729e09":hex:"":hex:"069069c377958235171437b34e0fce76":hex:"049af372e34ef7a92d0d49cf2dd03052dabacf2982eae6a817e6146ad799971be239ef5810ec3f6cc6990e9641a7b696392ad3faee38bb50746c1e93913c02dbbcbc6bf54f0d062f176779b7c0dd5d7ec7752601c9812fa80508a78bbd26922bed4f64b1ff2a8340ce1c01e317e3526cd8218ac24af87b07f8792849f6479b8e":hex:"":int:32:hex:"ffa59fa2":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #1 [#2] +depends_on:0 +1:exp:0:hex:"21052b2fc7bc7a662aa9dc4b6a04f25d":hex:"":hex:"d7e5432def6a24d486a608e5c5c919a8":hex:"1970ed40003bccabf7f3c57bbe5ba27e4254c1511413ed421cef3a6ffb9f0192987de83ae965478c3e9979637f8b3fa5d10d69b916f03fdc92ace7736f171660156d880114aefdcc164adb6f8c03940d9b43ce8881441b41cafee3351a56fcb632aa4b09ea81adea26fb0d8c6e1ae380df922a429ae1f5b82b38d9bda4323c51":hex:"":int:32:hex:"ff342f4b":int:0 + +AES-GCM NIST Validation (AES-128,128,0,1024,32) #2 [#2] +depends_on:0 +1:exp:0:hex:"b6c53aa91a115db64653016375bd747e":hex:"":hex:"8163a4fd9c2c7010bc85c86177b194ab":hex:"93cddd318b999262c7cde2838cb5c4d78f3eb1e78d305e5f808fa5613526d724e84a0188ff42a2c34bdf3b5fff70e82b3c30346e179fb3faf378bc4e207e335a44da53a5ae33770104b95397fb5acb746e6418d0dfc7368b035af53b470fc66bd0c210b68ce1b276820b621e919f044e5cff5ced7e07dbb8825bca6b4ddd8ee2":hex:"":int:32:hex:"50b8acce":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #0 [#2] +depends_on:0 +1:exp:0:hex:"2251815f5bdfe1111c7f9ca246662f93":hex:"2247e781763edb1349db2cda53e5853b726c697b34497761373c3b6a1c44939207e570e14ea94bd5f9bf9b79de9cafedeabc9241e9147453648071f2240e10488c6e3d7077750a6f7ede235d44c5a96392778ec51f8aeb1a17fabe9b6c95fbc479fff954a676813ad3d2f71c76b9d096a0527f2e1b151aa8972147582c0fd2bf":hex:"58973280c2a7122ddfcb25eb33e7270c":hex:"":hex:"b202eb243338849600e2feba7f25a05fe98323bd7cb721ac49d5a8136422564391462439fd92caad95fc8cdcaa9a797e1df3ef6ba7af6c761ceaf8922436dd5c8b1b257f801c40914c1331deb274c58eed102fd5fa63161c697e63dc9dfe60bd83cea885d241983a7e5f0d6a8fd02762084d52bf88ec35f156934e53dffc0395":int:128:hex:"c3701ce3284d08145ad8c6d48e4ced8c":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #1 [#2] +depends_on:0 +1:exp:0:hex:"3199b70e7115c74e3aa3745c18fce8d1":hex:"4fa0b090652d5a8dcd9b5f2ceaaa2dc87a40b30e2d59bdff09e1f204d1b90371de70935c385cf5b4d7e0c4e88661f418705370b901b97bf199b366e669bc727882d4aedf8171a8c39431f11af830358cd0d9e110da1a0cc6ef70efb255efdac1dc61e722a2d8b7fb4cd752c6350d558ae1ccd1c89f8ba44ab697df96681ee301":hex:"808a019f7fb761e9701c0c4f1a1690e4":hex:"":hex:"8d5ed4146fb491db9456e92f753aa4f688a9bc276e6aebb782a0cdf7fe578d74ca3946fa7b7893eff6345e64251cb1b146442acb64041324e2847481fd4388b17f83206948e67c1e66b894d5d40ecac0bbe4db0c6f58b65a1f19f29429a9e76f78ef5dba0c94d88dfc06e6222a506f004d24cdb3fe26d6eb6e08e4fdf6289651":int:128:hex:"908806d668451d849ba0268523eb0e4a":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,128) #2 [#2] +depends_on:0 +1:exp:0:hex:"63805cef84ca7fcf281b226c3ae37230":hex:"543fd64d1454ef6c007ee96b3ff5d2e4b7f5d15c23e7548dfd1dfad4da7774b8795e817fab3be7fbf8e4d0d351a743ea793d9d01385a552f78ede054be079aebd1511013de2096456e9fc1b83457fa1240cd39c17440d4b55c4e390119a759055ac851a02ea481eb83e294922d35f687a56d801eed638d289350e141116ffba8":hex:"1aa9e75d7854509a85d995ee482b8eca":hex:"":hex:"98db9e8e3ff23f09e585e5326f525e4f8350a1f233a0aebd60d5951583eaf5220f1690ee3607ba98cf8cc99a90efb7197835957f2bda918a32e528f55d548e3c83d65910b956634224cd5415ff0332c165d1241f7a93976649ebed2cc7e62addb76231bb738ee8a291b62365965392aeb72acc5f0fbd2f88f5613fcf44a1b074":int:128:hex:"9b1baa0b318e1f6e953a9f90b21cd914":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #0 [#2] +depends_on:0 +1:exp:0:hex:"2ec9245e8f567e1cc8795bbf72f2999b":hex:"f266d0060d290339def5f6d8dbf7d120a4c645aa90470e168b4f35342a00b8c7b7230003657d377d8568d252765df142e97a9dbfb9711d9ccf396f3d51bd91673f129d58efd80ab83a0678303e29a0dbeb1fa9fdb7fbde586a17ace65e894374ec8da1ccd3e21851ab998534de46cb43b38e241edc04b5c571dfc0aa0074d4fa":hex:"413628d9ff3e4067d840b0abc2cda0eb":hex:"":hex:"145d83092a269c8afea604e9192b8bb550b9bea85f842fcc4997c2b00c6f3ca46100e814e82389f27a69a12d29340c5827e607657a00fc72c4de30079e23760769e800ee4ce46957f82d61935d07d1c70dca836c19969dfd0fe0ea740a52e2d09b1c9aa137b5e8527756fb2c2298f8400949ba24a8351c1093626723a68a79f5":int:120:hex:"ad174d1edc713c187a5859a390fff8":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #1 [#2] +depends_on:0 +1:exp:0:hex:"b08df4acd253f9dd4abc52c4be488015":hex:"82f665910d853fd2b775bf66a1707935443574c90483fc33ba02d6479fafd99c5f816bc58a1393a44fb32711fbeb0d6936efeb3580f147c3019e9f2e2ef48b202bdd369c277791bce524f3b22ceb74c664143c4b1da819b229a5b480aa954be110ca006615d9cff5a158342a47cb6d04fbb817ae4ddff6d4f86b74205799c9c0":hex:"e1c27d35520ea527f9a2cd9b0f717841":hex:"":hex:"f5b0fcd812061be999901595b3547e70f7144cc9e0b0098262be4c440e8637af782f536f571534a658ad1fb44360d9c454d1000d6957f261401e09c0f19f5146ee5433e378423f9c94a90af2185d38cbe2940a459d8409d987d04a1f3e686c2b91d4fae1f3e3bdc5a30569838201b7d30c7320d7cbd787bfd6cd40e7e2d071a1":int:120:hex:"fa31e58fa32d1208dd8a67fed44033":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,120) #2 [#2] +depends_on:0 +1:exp:0:hex:"9c08d6efb167beb035f71554f64c12cd":hex:"704f59d5202108b949170532ac1e78edb0e06fa323c1c69202d7d22dea4d7342199cebe949e980a21ff0fac282b868cc31ff4f6674c393c0f2cae2374664314afaf7791974b6bd6af26ade7fc266a6cd2de4f3c1f479f895ff597998cc8b929c1f05db13d9b9a4d98c9bc606eee32915bbdaeec6576e1fa6e8b22e0bb1098074":hex:"608d56f6dea2fdf175eae189d42a85fb":hex:"":hex:"2c7d2618808adcf8edf5a54119471b930e07488d5fac3dcb53f4ade43674d162881bee1f27dea6d158b254d4b432e17f211515bf595a9874d89f8cf748ddaf2324078029c6463312ad32eb0aa5ebefc31c7fbfd04b37ba6b766375952c211d160b943e9d3c5e144b581157bff9071d31cfc082b55c4a0fced386ef2fc75e1a7b":int:120:hex:"7a1ae03e2838294e286dca4fbbd9f1":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #0 [#2] +depends_on:0 +1:exp:0:hex:"192dbfdf86e48bf18710e706dc90e356":hex:"1d7c45c8ef6f9f073c7f186e4c876c2b8fbf22feeecdc111a19071f276e838ab0572c9a68e9ad464fa88ba8d8a162e9f5ee1c4983395a890990357673467988c057eb8a0342c41867baab41456edc3932531d1c4aa0b42ce2b388d2be579dfe332f40a9b864c5e33e2b3cfd73b68d65c4db9ec46d3ba1587a56cb7887dcb3c5e":hex:"1a511f85e0e138f4241882c20689f881":hex:"":hex:"3e50e821fbf83433155de7b4eb3c9a2c148b08d9d3998a3486f517fb5d0a1338faabbf95e85fa9186385bcb9e26aaa5e473d3cc7af869872e4fb36ad16c5468d994e9c71a09dd2868977f3f9064664f6ffcbac1bd313a7803c304273d69ad20369bad36adeb38480563bc6db9aa0d11a0e03d09731171c1229a756037b2c285c":int:112:hex:"9393edf0934796eb97a8c513bbfc":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #1 [#2] +depends_on:0 +1:exp:0:hex:"daf9455bad8bee905c6cd464677b803f":hex:"af04226cc6eb84f8167a68c2cfde33a1521dcbe781e7b97a3fae732bcd8c0616a588200328902faa5a65a27e769a720d7ea23333cc1c66c4d4e4c53facca5d6af06aea7fb49b12b04cd6ae38fe28d71cd66f769d640beeb07f508a0e3f856902cbfde6919077de378cf0486cf177f897cd0a56b69db3a31b448ebbf8fdf63736":hex:"6cfe8490e892f5ddba8bbd1cd522ba0b":hex:"":hex:"e5622ca7360272a33e30f7fbeaa00956e8af0d871c433c070c8854d818eab9717293e845106770ec07da372c75266239a225ad74465e255520218c6736e51070477d70976aa7d449c32a5c85bbd6931c76e9e4355f9697bad2ea3bcc0be005da15c62db219b074b71fe4a5512157143df2c1f70bb17c6d3740d8d20eef88535f":int:112:hex:"25fe6c9b2303b40ed31d1beea39a":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,112) #2 [#2] +depends_on:0 +1:exp:0:hex:"82d166dddcbf4f7f66aa5ac6b12516bc":hex:"7883f4f96c0ef7f6d9fd7c2eaad25995943078559eb24a3e6650126ddaa32301b04f737dc27b648d6115ce08feac862cb888073b22aa648c752934bb7f9c566209a97499236f782758d6f6f9a012a2fb6885ca91858f9779cc93950baa731f1874629351e6186935475a20593f66cddefff89be0fc0f9b57695b147d9acd8157":hex:"540c2a07689bf314bc8ede71df3f4358":hex:"":hex:"44806e76a40bbbc2de860cd36e93d64c9f4c11994f754db6a279d6eaecfdf19966512de5223d8332a407381114d50fadb03e33e347a5f4d87c3fbf35f2d5967ba295003a2c6c12fba8394aa5b7a31365791c630734a6b2ef84eed0738cb4bc229e93c4e8529aaeadecff7ab93887b9fad5f05a88a5ba9fb449053ce4c6375d1f":int:112:hex:"756d65c1b8a04485c3944e2a3cbc":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #0 [#2] +depends_on:0 +1:exp:0:hex:"81c1fca371968513a68ac09a7459042d":hex:"182cb89c94171b685016bad76c445cc4561aff8e3170dd251f62efbd44910ddf8eba8a67dd1a237f2f7336f436edcfbdf9928e94c3488189110d672488c6c4e0dc4a1fb6e67dee9a1bfc3f49d2f934f305f139e98f0ba9c1ab56b5ce9ddce4ab54b6970bf6499e5e825abbb23f9e320ee05aaf0d712c09b0134839c5609e178a":hex:"7c962a92b8daa294b4962cc3020dcd0b":hex:"":hex:"f91e36c79db6789a3acec9e82ec777efc1958e7e5634d30a60239eb7cae1b48f40557965e8a6f6993db3f4ae443ba167753c89f52f610ab69159ff60233310c1bb2baccb936433270f8839758bc85c53604e771e3ab0df6d6bb02e860d0eb27f425c7d30fb7566aff982d289228da5ce5a45842e10ffbe9016c9e926d7f69863":int:104:hex:"0114c2de8f733fc18f203150a0":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #1 [#2] +depends_on:0 +1:exp:0:hex:"09ce73e733e880c6d7be92be3144db40":hex:"a283e20adb6efedc5530f4efd71840d5fe61c902a7511cdaa939f5030880f3675959ee96e39abe082a66eba2a5a93214b22c249d7167b7a0fda360d02df855d508c7ebae7016137e54290904909b2d41a59942abec76612b17ea76ffd1ee715aa2b05b1314c0ab28631f3934d0e9efe2aef0c711e75a5c62701b3358a414958d":hex:"f72a2fc910fdeeefe8743f57290e80af":hex:"":hex:"fe9a7f59abc3720706c33fa40e106663d26c0f8da0d25deb90ada8130b6f95aaec07f4a7db342b678d102b2c81464e4ca9458732783cdc3a9d504232f44e2878b0aaeec0f88efa5d7e5fb146911dcdb4569de7f114e1854ad7a95894561bd0fc4d9a5b58b5164872833283ed88fdb4900b2a596db4e8379eed4e3a5c08d5fadf":int:104:hex:"9de97bfec1325936bd171c996a":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,104) #2 [#2] +depends_on:0 +1:exp:0:hex:"e61d415db78d9f2695344350e0a8291e":hex:"730c3fa9e07eea73a734b17fcbc5a969dc2c04f448f44c7f6276e32ae3504e9b15fb664908f530e83a74e25a4525f74d315ab85d7b85005401370dc50fdb86e97baf3e7acb403e476193527a1a5d642ffad6cf2555d16d28cf4c4127189056389368b76aea806906b0a38b808cb02378eea48edc005cf2c21e6547502e31d2cb":hex:"e09dee93466a3f35605b647d16b48452":hex:"":hex:"ae87e754c1af1175b474b0718e3560240f55194d946d101e7c0bc7af18d90a50fa41d68516e45dc2a4dba48d457ebff18a657a873e15620ed7cf6ed3a26195b9d354ea279b24ec7802e4e95d3f3765188a64d7b8d4b7c215e7d67385efc6288724a33a1a7994f21e0dc2970076af7cf31e9ad1098537543052a2b0f62e4e8a87":int:104:hex:"5de3c5716735d7d1b859debb6e":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #0 [#2] +depends_on:0 +1:exp:0:hex:"19bf00b228ddb6e8f1fa4ba85f866475":hex:"10742aeda590024bac2696af8402580d2ec6ba3f51cc6f79b6cfbb3057634ced6033fa43dbaec9af8ce7e9706ca699ede88d89caed89ea023d14761bec49da724538b4f9672163a5bb5dbf92f5278fc0014eafce402cb408a1eaad6bc17ec0e835d6b80f4701f946661757b9b2d54d1b137841519dd38d72835893ea6d52a27f":hex:"760c5b929ac3d33bee4dae0088a894f9":hex:"":hex:"b03d27bc7f4c9d48d555a38091347f371d0522ad4c347b4a23194c234c7877cd3621ce5a7c2fc26b38c7e6f1c2bf228ccec491f5bc352556c08e4e19ddc4e4b2c036f45a42aa425a5ff9a2e9c9e5580b538ee56fa804a86d9b1b59b6fb0d00216a96936755462979dc14990935919026fb51cdfef05b8dad03320a8112b7ada5":int:96:hex:"2f1cc79408c85a9867214061":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #1 [#2] +depends_on:0 +1:exp:0:hex:"65bd9e7d9009dd6110dca657ccfe603e":hex:"c1b539324a001901c2461b9747f605a2f4043b9b0f54d1357049fd1819de06df6e29880d62ef7d91f9cdd1108f3cce323f6c32cec16f7bd434e539fd00ada476ef41efe7c6907ad1cb726717ab56d6e2d32042ee2df3f90d15e1515f0a15a5f06703e06e14229d18328116148b3cc39683918e42927f62aec49ee9bcc19be38d":hex:"3fddf7e943326e431be540c49bb917c6":hex:"":hex:"2813d6eef070cbdee9d5d71caa8a88c631f0b71c41813c6219a765e4fb3e6eff9afe8f8f4394fbd5646fe80bab78806eddf7549d6ca3d0d16d47ef63db93cb5620e3814efd86be151b338ee6e2c681bd37be4039b2ea4a190feccd7d65cbd56ebda81f4b66ce12cc3e2cece731c37d4237a9dd0a2c1a7697bae42176a673d62a":int:96:hex:"96200bd3e64d5eea746693ba":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,96) #2 [#2] +depends_on:0 +1:exp:0:hex:"b9b8ac9215289aa003cecd53a90e0407":hex:"8a6fbd067144b6d50ea73a2a7abba3ee9677bbf00312c70d808fd124541ab936229d59842c8846569a063fecb8bd1945882abd987a936991d5cdbec087937f91c4f5513feffa1984a6b8d04a7b69eb4e93e90b6825778cd2ce9a0ce54d4a468c93884619f851d2294be0bbbeef5fc0c05d2384126289283d5ddaaccd89711d73":hex:"27d367f3f0c60acf921f8d8b228a0b2f":hex:"":hex:"42d98ecfb4f707ec233c7f990b0cad8f39546b861b11d8cb9d939b29ff5ab315229d946ff55927dbde82c03aa73fd7857b2ad38fa55a827dda54d2726bcee66347ce42c9cfd13ba1507d209ff2388c0ea2474e17e31d8056593b722d3c2a302a716a288592b0a36547c7fd47f7595fee9d30f5bc09a9555d7f3169e26a924db1":int:96:hex:"d66974c95917ae1bf79b6685":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #0 [#2] +depends_on:0 +1:exp:0:hex:"ccbcc39512425bc32350587f0fc3e8fd":hex:"57d6ccda317b7ea150b18d9558b39fd78d9cb52509aa5c095c5b46da89b79918c85d469ffac7226caddd670ac8f5add47fc382df1f32b4de9cc1b2ca7c2acfbdcaa08429b97e77eedea55c8ddc7814fe4c3cc1e21f95d94301ab77b4df7572d0b8778cb2befc0f4c4a5e93429ad52d6c2a75481f38d92edb1dac563154bf90b2":hex:"0862ebfeb40ff24bfc65d3cc600f2897":hex:"":hex:"e6a77e90750cf0e4c276c50c3880b3f6fa357179cbd84e22f5b43cd10abcbe04b43f191ed3fabf83eaca886f4a7f48490fb1fd92ebdacb68c5158e9f81243f7cadc7a8ba39721df68dbf2406fcb5dab823202ceea7112e5d25952de1b922beda271e7677421fde25f8cde450c40667387e5abf8da42dfe891c52bdd9f5060dba":int:64:hex:"927d13cb90ee5f44":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #1 [#2] +depends_on:0 +1:exp:0:hex:"396b53a694b28b717c104111c4752074":hex:"bbc3b818f4ff10b6822ea41f63ca53c27578a8126f5163a5014c60e1bc8c1a9bba67a3808c8aeee09ba9e584a3584e9b86895a3f0db2e64e71bb18b843b12f4ebbfaa1dff3734196f70c5a6d970277ab5337e8b940ae7c957646f8e96c6b5d84e9e97b620a926e655850d09bc2d94678704aa45d1788e7c23ecf37e2904a0786":hex:"0981a151c6f6867d3830c1f9ef99c433":hex:"":hex:"72a5587076a1050b2b514f047ccdf7176c118db9236c0f72091513da39d7416734ac50e0a35b2905420214be8426a36e86863c9957693292bfc5bfc2e93d234a09e80f517edb7cf8e5d21d5ae6c2362b779a9b62b4c66202894d369d219ef0e4b52a342b71f248c18ffc345dc7eb0b47b3bc83ffdef921eb42b6d51abd889ef4":int:64:hex:"af99f8797495dd16":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,64) #2 [#2] +depends_on:0 +1:exp:0:hex:"af090618cb454324a82a75a91944dd6f":hex:"3ebca6ff138c527b851b27b9e3917bb9a07282197868351dd599b74b332610bd634422911393171305caa4fe3f6e89ab6c033ca759e118c2d8684b903966999125c748e04312ecd2c1ac3135c3be2df9c8c67be4d8303ac7aa6c21ca7b7c20b1108f5622d8e6079f41e4be4abda99f782ad35a085b7db83482dc71b8e5d8e71c":hex:"3380a6f20875b7d561c4a137519cccd3":hex:"":hex:"6be8eebe7af78c062812513785e9803f302c771e8215e4c606fc5eddc3efd8b12c96e029b4287da55d8626583e58ce0e50c4ac5a39a1b0f309d5803386738397376c0ae155087f36fd86fdda4b5c8dd079011fa9a134ca8a76de570ef165b20d7d803544cd2f3a0ffede9b35ca1c982978bf95ac100af755553fdac38d988fe9":int:64:hex:"3e869dcac087aa6c":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #0 [#2] +depends_on:0 +1:exp:0:hex:"041cae51d9e631ef70115be58f8818ef":hex:"f6748f4a261d876e37fe44a419cfe965888aa5ee195ae12237322f6e7ac4bfaaf16e8e29be507e2978339a1855ab918485011fd52f834bf0876ba8d89dfc01927e0930d03c0ac7dc7ba1554a879a2051011bcb34a5e4c7cea4d4fb5ed53b41ec8d17bd52b2e1b9dd417a84ac5913ce3f9fb04daf4d14be65f49d0767b9431b47":hex:"c32f227659e0566faa09eb72d99f89c2":hex:"":hex:"f30fe6c8765c8c0af579c95bc2d182ccc346e587a57aa226eafb692675377a85e9ee08339a047b9cb674dabf5a25301d2c8c264bc06573e36e55ceaee39239e367b8f1a3d781a2020e548001f9f98850994c3aa79b13dfc93c1d7291befd91e044b2f5d2583d1a9f868fab4afecd46fec7d315b0cbf8a7331ef8f588d75f97e2":int:32:hex:"5629e1a4":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #1 [#2] +depends_on:0 +1:exp:0:hex:"f0577d9a7dbf7b4ada5b9758eec4c847":hex:"5b559738634825921b5cb620b5b9f637f8b7ce33998cce1ed1a23ff01f84e58255d852a02e59e4394752405ecc15248f7616a33e64936f726de6fc6d10c3fce9ac0b3fcffbd755f16bff8462b3be24f7cf342c8d0bf1ca79b1cb4ea88d690644998a8ac3cafc8c18c8cb737e38a681026d46966b89c7d6c7a4ce7a1e1faecdd5":hex:"b432473ae67205bc7a99f5ab2a2721e6":hex:"":hex:"ddfe664e28c5face3761deda1ab2dac6e36cfed538e3faf9d79c54e3c85b4baea9eedcef7f8f28c2feedec72ab2cc6aaae101b99512ef18e759b7828364e4daf9a572f8c6ad88eb82f7304989345aa4985e498dfebc58cbc45aa31c18c0dda5b1991fd998901c65807c8cff6058b1d5dfd583297da8451cef13f246547ad11df":int:32:hex:"ce55ac00":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,0,32) #2 [#2] +depends_on:0 +1:exp:0:hex:"6ca1d6ae9b5ddd6e3d68656c508df318":hex:"d160740aed955e30c1f946088b5bc5bbaf5c84f282c32f65d099509993628ba5a51b411c6ebf57d58e9176b490ab90fa8db8a3cdc67a5f8322d06d719d91f00ca07aa2a3977dd0838487f2e9d4dd285067a1f72bb8a6c9dfca107acf1f404995bb68ed9d7e12423efe570f144e0533fa34b8d0b7156112b85c94a8fa33d7a6d9":hex:"68a494c9002dadf4f0303dd0ebd600c0":hex:"":hex:"276e362cb73b405b10a98731333f6accf0d19cb96c21419d6d56b30dcf73f7208906b0e3eb103b721cdbb7eb1d4ff29ec3b7e9d433205bd9ec48c59d0075a1507ddf09275426c0ce9a58b973e06d6fceee7054ba92b1df771011ac73e39e451d9ac3375c595631090a2296d423e3ef806ac20770abf78ad04114f65661804fae":int:32:hex:"8ff9a26e":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #0 [#2] +depends_on:0 +1:exp:0:hex:"5a3e577743b4581519b84b7538fb32e7":hex:"172a0a14820448e5ffd017c18ee02219906f721c915c4f0ff13b7b7889812c0edb89f28be0c22deff76bc975d1ef8ef3fc40b10cce0d78933aa22e6adf2d4b7ee4ed6ef487eaddb666afd8671427f7525eb99af54a55d98159fc5d651266c65ccd915cbba60fb6e2c408ef177d682253c0b5410d77d08be1d8f175ca360becd0":hex:"1e155ada52e250cee145d69b4a307bc0":hex:"b9be2145b842d2f5c3d15ac032010400bffe31856441cb484d5c93e6710194b13e14077e132cfe03985d4b936bda9383c22c392968c748f7265213a8eac584aaa11eea35589e3536e39b3e4418248927fa9fcc027c5516e402445068ef793d349eb778b77fb0b37f51bfcc3c21df9999ca9985cc5bec6502445b068c2d061f41":hex:"b5bd224140d6b826062e55754299a43a87cbe861360334897e82b7a6023ab0041736479c9aaca7c73f27e239a63e7433e048a8d2c2d26f0b18476aca7ac20837affacdffb57c618ce5982ba61fe1792c8a3a856970c095b0c4695dce961a354135075e0a786192d5875d16793a3ad0e3572a81efa24099f5ed9c92df55c15dd1":int:128:hex:"74df58fd4a2a68657ce35a3ef11a9c0b":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #1 [#2] +depends_on:0 +1:exp:0:hex:"deb0ab6e8b0f392af6b89d253e923f1a":hex:"14a86c431bde5c0861e6bd2cb748a13b9bfb2a4a67a0bcf067960b3a9c7a75fc7ea321863c83693c70076462ec3179f4d82ed4a1155a4b5004842fb47482bd6a83804a05af2504f6f535eb9bdc95a9a2eb80c7dcd7dff54e3c00437e4da9c433c88f6d248e4754656acdf8ea7d68106b04ebb2f1cdb247fddb0bca1f8e9ed6a5":hex:"c1bc587c3440f1f5dea5b0a4b5ee8dfd":hex:"602cfb09e8bf250c3a2c248c4e91234629a4fe9a18c5f8b59df215e97dd873a7c1204bd0695796908daa28b77353e0e5b37877a7441d35633119c0aee9aa82c3c18a7f577d09293fafce1895dafea42f97222a33b001907b978f11471cc0adc46243e8f7fce94803d4d0595bc9fccb9b9396b52deb943280eac2c4eda54841bc":hex:"a72d27136d0b4efc0aa2126a246ae4946e2c62cf5055f7bde263e7516ace2b7e12179980f8dcff18dc4fcd662f38d3b9dc7f8a057827ebf27e5dab85264d9325e0eea3b12f8e9e39ad686263df75b0758cc8af0be89882bb159c95b8de392b3e295c039a520d2e56b50a6370afa57adc967f7e4ff670dab471a57fb6c81401eb":int:128:hex:"eb26cdf879e0cb1320d786a642c4dfc0":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,128) #2 [#2] +depends_on:0 +1:exp:0:hex:"adf6006fb1cfea0f9641a4c35b864101":hex:"d21777e1fab632bffd82a58cb732794f112cd88bdda5a7a8d19c68ace343fd786e5e512013887105c21299f2d6ae23cae4f03047c68f019d98e76d2aa1b3a204f13f4cba13f5a8957b9aa3ebb44b8024b26cb6139a3bca3ada0520a68b8571ae89501b212a1f8ede5753d557ad2f38d9465dbb09b555300b13194bf7817321f7":hex:"a349d97fc677d8ba6f72e8cc7191ab78":hex:"5717bee8b31640f3999efda463d4b604c1cef62fc0dcc856efb4c50a8c6b902019c663279e1bf66fb52d82f8570b9a314647f4b1ed86eb89f4be8981225f94d4285f5ca9167434a1569b520b071ee4448d08cb8623b4cda6d1f7ad28e51a2df980b5a999025e9ba646707075a6cb2464c2a0d5fc804c98a79946fae0b4fa61fd":hex:"345af0d804490586c9ffbada0404176f4cb1331fc77705175619f27d107512d3e6068323b276743284feb938c5718a5b013305fb42282a89e270d24585236fa18265dc7e8ddd2b3efe93a2ea05ab359323c75211f2133aa97022c9a937a467af37c92a795c682a30f2ba1c4ab2dc45e63c56cd3b29b0efac2caa3150e6a72aa3":int:128:hex:"ae7d2827c4f1422b728a9fd31d8d1918":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #0 [#2] +depends_on:0 +1:exp:0:hex:"97c83d4628b65d94341984bbc266dc7a":hex:"e998cc0b7677fa2e504994e99cf7bbd84ba7e356d7da178f8ff40dddc046c70554ddec1d28aa23f9c4e6fcb9effeb8e28a883ad05bd0a6041b8a24d0fceff200a4e33996e279cbf029b11d58185adeb5e5e797a74d0d8b17adcf06dfbe3ee11d8e6bc3b6a8434de6e0ddfa0fd08c913f9fb911cefca72bc3f616b4ac9821f53c":hex:"671dcc5001c2146bf8a4e522ad702bd8":hex:"9eb12a42d2ca06a7da37fbc23d213f5e3f5e15580f01b0ea80eb4b6bd283e307dec965745ea3b3509d3269cf25808fc6a923e97d87d0c1a30b447a5a27a06d0c88a96cd90d990bf208f1abc4934f6a0ae34a694750a74ffb27f4bb66bc799d43570b01897b98b00e6a01b95b356b11d33e852b2010da5785a691246d0be2bcfb":hex:"5a6d8930e473e292e67425748e8618569b7a478f1e183ba4e4a64385ac4b75d3d42b1afc34cc6daff341f10c1ad8f03d77179f52a7239ab3261f5fcd5a0b4282d26fa4d08bf0c8a5c96782c073ad63ad233dfe3aa0290a03d73de14d445b9ce4ea0e3b10a4aef71c5919969b7086353c942c479a1c052a749afde2325ef46f7f":int:120:hex:"b81cb7bfd0aaf22b7233bcfe363b95":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #1 [#2] +depends_on:0 +1:exp:0:hex:"2dcd5c974c5d78cde0d3a677d0b1acdc":hex:"21b61035ca3c149d66608d77edd9770411e0ef73a97d4be9dcde95ed7997ba97117ae6c1979195a5d916ff7a1d43ddced5287004fb60a2c81c82b5f7c8a336a603c3eb7cb160bbf21b454f810681450d65deb64e7cd229333fc5e85dc29040d7da48511b6b2524f02eaeab422b5ca817796c47b9f2d7d498abc619b2ce2912bf":hex:"7455fea1bbbfe9479830d403e33c9d1c":hex:"d684d38f2b12111197ca512c54c8e29ef1c3b9b089a6923cdb327c763f0ac8c2ec0900c716e211e7cba1d7c13a60fe87f5d78e5d5215d92e57a0645d9b2eab4b11870b5f7bfa9f2c9e4b9fcf7596e7719b7d0c0e6cc16efe71d8bc92e16a83d4782f08e9b97dc85a18c435b51c940189a3c2608379a21a8c46633020b9b6cd10":hex:"eb039d8cf0bf217e3f2aa529ba872c385f2770ede6ca4ed32fd22cd3fcbfddfb92d681f00df6fbf170a5dad71c9988d556cd74bc99e18a68683e0ea7b6ef90b21ff42cef8c4627e4051bff0da00054390e10036f430dbe217e5bd939295d9c9f64c2614d42ba62efe78763cc427027edbd0b7f72eceaa8b4776ba633f2c3d500":int:120:hex:"18e7b50fcec11c98fe5438a40a4164":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,120) #2 [#2] +depends_on:0 +1:exp:0:hex:"e5b132bb7aca3e01105848f9b37ff516":hex:"3b6d1a432b7fdb4022fc35d6b79ea03b6aa14d4ddf60a160e976909ca069242fb2e7d414d4e34ffdf9416823c4b3f4e018ac8ca689446647eda6a12029f886bcc9d18be150b451d78fa72b9c4dc13314077a5b04cffeb167005c7e8379940e6b998316bef9bf8b5a742e337663c0ed91d88d09d0c3ebec37aecaeb8277b13661":hex:"24c1ba77d37f99253576f4963779fd59":hex:"dedf78f05957bde906639bd35eacd8fba8582d288c9f14a25eb851a0a34c82fd91f2b78614ff46ca17fe7781d155cc30f3a62764b0614d57c89fddfdd46af4fa5fc540b9ee9076805d4d121aa0dad2449d228f1fc3c07d466c051c06db6846b9012e8d268c6e1e336121d272ca70d965389a5382fbfec0a439e979f16fab0283":hex:"9976d2f3e16485b6b3699a541b6df386562b5ea4f6f9ff41d265b16e2d7d3c5f131bb5874cdffa87e704ae3cc24f1dccb62bababdcdedf8bac277a7277ca53a4d38fd31f9fc83f86a105663f045b70dabd553137b6d6222abb334b7be7689a4afa28103619f11b8b61aa92a63136ad5639f11bae64b25f09f1e2db701938fa5e":int:120:hex:"29d1b8a68472f2da27aa84be714108":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #0 [#2] +depends_on:0 +1:exp:0:hex:"63628519a0f010620cbae37f8ad34570":hex:"6db2919208b09a8abe5e95dcfe0f957dce1ae0e5b29f06bf321dc815ceca094f38c5c812f591aedbc9fc28cc0317bd1d89d4a3ba14f7b3e5fb2e03778990a6006e0ec2ceb47c923f3b17473f99521491a4cb2f9bd435e3133dc90e129ded9d15d78e75bfb3492458ce0964d5614508ef2a38ea02ec8664ba901891a7cc86a62b":hex:"ce0ad75b94ab2d3918abf255c854ecf6":hex:"c29384bd7cd013fa02487867595d739d99886a3bbed7fd5acd689f3a74f240f14c8fffd0bdea1f83bfef7b58ce512849e3a986f37afa54ddc11719169a49bd7e7138a745053417ff80cab1a32ae9be476ccb61ae055b319fdee5dcab629bb237aeb7d998ce36dd9c6908451c3bca9d3582f7fd60e69f6298d43a3b958341b611":hex:"6205d37d720cbb628dbd5069f38ded8e566030eadb7fbdf2ed827d5f5a0117a21c75ade89782b3dc4e7307d9a7ae406ead0145aea1b6cce286103a55ce195999214b84bc25281bd7fe511868a69944d483e05ea6b39b11558ab46a33d227734eb3a386e30d58c3029ef0cb4046c0856078d57a6df194aa8c0e10f9b6ed8fb40b":int:112:hex:"423fd542498825cc54501cb42b2c":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #1 [#2] +depends_on:0 +1:exp:0:hex:"7c0e1c6bde79315f79f22ebc77107228":hex:"9cd56b16aa4e130c3dbf30e701e8784ff39f866031e778e9ab72b858c3e333e9589b4b6cd89d6546e52a478d92bd59d0e4756d6b5037ab1873d88242ef31be643745d26395385b71034f6f0c0c84816f0c6755965fc8a7718f891d618f226684bcc77f87fe168e178b330d4b4c0eb4791028017fe6c42e68b0e195654a5d65e5":hex:"9011dee57c3b8e112efa4d2b816cf189":hex:"57bfcccc6f00c0abbc5f30589dbb47597838fdd50dd622eeedee33824e63ba78753c05d2543687f60dde501757b6fb74c17fe34b3e9c455eb38cf078c8c77eff68d3e3b8c244cde70ddf61703664d34159a11785cc6626eb1cad70ab94405616fff52c0f781ee6b43ef2a449924a76b762035ff479cd6006c21a62a56a14650f":hex:"2c1ef998747163104e5a7d2a440a1a1cc2c20446a9d0cf5f138f85c1f5afd90fdc3fa4932845c150518f40bfd56569a5479126c49061ef350b4fae895170b4eb94dad7b456890a822e1bcb57f9bde5bea747d17be3d18ea201cd99bc46fee21132c6918ffb0117744f6ba3f25bc8a50f9719854314b934c3a3230f4757a49113":int:112:hex:"4ef9aebb721dabe2d09101037a63":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,112) #2 [#2] +depends_on:0 +1:exp:0:hex:"93f3fa85dbdb2784fb078a34b1116eb1":hex:"e7a0fafda0b90cada671f5e2adfd2e2a5f14e4613ea76aad57e79e2cb532f655210614e2036d7ac005ed5e516814d8667ed71e0f29b9c7b470f4722327407cd6ce6dbd298cee37bff33c35e34cdfebbbf33934673469d6b98becd6d26868977e69e06deee99c118fd4da3530d367d20d15107c03efe0d7e7b38710231e0dcdf0":hex:"f5a7b0b26d1e86f4fc69f81c9eeff2cd":hex:"3d2a1dadccc597b5e7b6ce48760150dee01c8550b525c587abcce8c2c7fb6291683a58c2e42e7b7ba6a3c2a117ddb7e67ea058a78989d67946fd9551e30fcb52618dcb9fae079ca56b74572d7b6a7b6a5c60e906e9639eac5ee1a5a2db864721119da2c4c5110c2b8d487e792cf6929600f1587cb2d48efe6864019afc32af6e":hex:"60da3f4b3a263bc0178379646bce391bf552f60d2833261962375d2960c629dedac681d86f7915ea3cffdad0f37e409668f923d7c860525b994b325396531994a2fbb2d4e909d0b1dce322e078b4b8cd99820a39ffd7b468bd3e73b418b9a2cd5757b7d45f0363574c925bc22d66645abd95a6b29ea6366d8c2252d1c5710d45":int:112:hex:"833d2c55f5ee493060540d6b5349":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #0 [#2] +depends_on:0 +1:exp:0:hex:"163c05f69cdc4e518ff6445911d1ede0":hex:"84d8a1855423293de37ebfd9715a9b46b175bc6d44e94ac8a3e7d409e8a227a57a6b85144a8ee23564fadc28742b69e89c0d4aadf0a786f9a5d5f9198923643ffc0bfd0f96e43b08f1435d4afc0e49c0e2241d938780975bc7a31cdf38f30380753bdd66be72b4dff260a35dc10b9ba35059ba61b0beab16e35068721bd950e3":hex:"4b16188249096682b88aa5e4a13f62c1":hex:"a238d1111efb7811f6838c3cb6f3bf3e0ecee6d8efb26845391f8adb51e497e840ea40318bf8e3cf0681c3b69951c4f03d5a4b5edf7119a150eafe6dc16b68f3d2b91e1454637135148f4fec132bfd96ca088169a35961d4c663535b9852f12a00ec4c08082553a09ea046379ce747c717036154d063d876a2b95cd7bdb42daa":hex:"3bf751cf63bc1b433be6075303986ac1d0592dee400774d0bb7a9e72224417639e1e83e69f34226b873365f41fdac925628f32ed4b572b374310edfd892c5e0c3197e59efbc22ee11f0d4a66bd73a6f5b0de7c1cbb0612a63a262af51d418577a9bae0a8577e547382878f13047a92f51a867f8b7d283d2099c34c236918f718":int:104:hex:"0d778299c4dc0415ca789dd5b2":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #1 [#2] +depends_on:0 +1:exp:0:hex:"a2ff7cb9fe33b04a087d9ee6db58ec0e":hex:"ed7c22218009ceb5b322045fecc1fd748f27655397a09c2c29813eba9a5cbeebe88d4a35dfd741ef0ac1d11c4adbc6bfae824af88e3ce09f68d8ca7671de91ec9e2bd5f790d1cb1748e34b3560c9b10726ea4b85b127731d8a7fdfd0ddbed11aaf181799f71a68e542b43ed9889237d2fffe370f41064b810c2e14d1ab661517":hex:"6c58eb8f1f561b180f07ede0d3ae3358":hex:"00cb63fa0cf526c6db37e33cf092f3f421fd258d28446c9a7c687b941c7eb5e1c5be267db992d0d93ede0b09030f979d451ecbdbbbb386cf1d74b23d55b74f5f4d520c000c9a41922f54567ca7dfcd84c68883a23c7acc3db3cd8d340217ee7c5ea39b41cf2c0e58c270a19ee9e146d2dbfdaf8ba3e24fda7f2c5e4ba6563ef4":hex:"f0f119bddf5ddf147fe06da9d4510d97369d8e345519df2188b8d2dbaf8b7d3e01f3c26475141aae224e5ce1b131c8096f0e2a17c4c2df62f76f009cfc8aa20ddcd75a6a4281cfa2225485ca22aabcb60ff11265acb92a19ed66797fc2b418ae4b8c70fbecf0fd63f6c22ad62bfd6f40d8d0e2abeb620b7b4f5d8b3e041a53e6":int:104:hex:"7885ca22c4afd7dc6cb440ea35":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,104) #2 [#2] +depends_on:0 +1:exp:0:hex:"2e739a485b6293b43535379e3b309fe8":hex:"699b9a5668042c48c63ffb323c0fab18446546417b2f33a69addce6178f9d5b7dfa891ff2004eb57a98ca012c2668e0614276d89b21b7bfa436b2aa1582daaa81a6a7722186e99dd16a5786fd0e8b09b194746232fd413984484524793a379112e297d733dce063408fe59367f5929c5086bc2191a8fdd60a346052c0d109d57":hex:"c4deca3eeea80352624c93523f35e0ae":hex:"704aa36a82d02c56f4992469bb7e8a3f7dda1326068bf6017e4a0c810352b476aea129c1ba1d4974bc0d0503dcf816b89c0dc8e6d066774ce97cea65b5fb5c7b5a7f93e5e2c7126dd3b241b958e47d8150b422bb91c4afc47d53cfc2d20176c2ea0c85b376dc46a86bbaa53c584aa561f6662d11de4e39e50f1a095b8555137b":hex:"30b8fa2e52577a7e5cdc12a7c619615b134ad4b41893ba9120651cd35c6f2d48ec6b8b9fa99366c4d60e643a8ccb2cbb3568f7647f4ad1a12d14deb8aac00dc4ef780133ee8df8f494675deb7f678fed54e70d6bf43476854eb0286a49cd322cc18daa238d4580ee665fbc759295a3e12567beff3e823811093cf0f02d00820b":int:104:hex:"ff89ee52fa4eaeb748c8676490":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #0 [#2] +depends_on:0 +1:exp:0:hex:"6bbb12361c95953a8d757bcbb92568eb":hex:"c3fccc5693abe53a13e5209f80611fad1e81e7ce19a4612666d954b4b6d2062bee764181716d5fe0fe1de485bb739d6e8625d5b6cedcaaf6e4e5ec350bc2168c24d7764e75b0cf079d7ad1b5fc24dbed14c5ae4714734f424b3611de0f70a0a8d752fb143e1b7e51ebc965a06021de3718af30b067dde270d804fb5b87ffb29f":hex:"48ca821e5e43fd58668380491d58cdfb":hex:"e97280fd78eb8bd695227fc79420971081de8f24bc95d9a1794ed2bebf5b68d8b43ae8288eb5ce72db0740334ff9bc9b4e660418d3cff8c344e50c7962c367c26247806d0b5c2ae0420a724203dcf4fdefd6513f8263d995afa4780a9c4e92c25496106fec370d0450d907225190ecccfae634f11f8f74f6422a652b2b9af9e5":hex:"61cfc5a6ab6847bf0127b35ce0712cbfa9cd28dfb3f0b4cac2624c52cf55f311e55e9abff2d4514c6feff801ea8739f874ded2efce4a440f2acd95eba6c75e09bcd91b898c98563a26b3df415658c4d04a6aaf547a90b03d1789bdf7ab8f09f6d9f222f567461380372a976240b7b180c3fa7b4507e53815af3f6b4a46973806":int:96:hex:"f86d5374d1ad269cc3f36756":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #1 [#2] +depends_on:0 +1:exp:0:hex:"1a0a9b2dd1ae31b3e47b6df979dd2fbf":hex:"353786f96620ae7dfa7aee163c7bb30384bb324b516cad13872f48e7251f6f4c5906748bf2a2f6167bc14453b2b2f513804308ba92d69639beac2f25274bd5477744281b7ef7d0661b3672cd45abd5bd30d98deac4ad0a565308c0224dff59e3190c86df6a5c52055f8e0f73fa024f99162219837c999a9c0a12c806f01227af":hex:"b39c8615fa062412fd9b6ac3a7e626f6":hex:"dea75b17cd13dd33b5016de549c44fa9c88baf424ac80c4835e868acb58082ffc4255c655878a1c627a44160d5e5054a0a04f65fdfb542cd342be2aa2e000117bf8cd67b02f3a3700755508f9af8379c226aded404117a5ca3fa70968495eab287064ee584b4ce596612f2c465d997518c6995518e3bb881967ab6b99d7f62d7":hex:"8430b8735f0b002e098d513eec7b3a8431a3fdac2b7faf256a7bcf08f3dcd6fa549f029240acae4dbd4ad54752ba358c14893aaa67a003261c252020d14b521906b23c37dd80af703c2964ce13773dd72fa56c389768c6efbd485953900b56f6bbaa837f1668f478677621a297d4b5a2c1a86f689d8644caec51435b0dd66c77":int:96:hex:"f000f2d398df18534428f382":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,96) #2 [#2] +depends_on:0 +1:exp:0:hex:"4da736fba2b7202ea2ba60793da3344d":hex:"4f004852edd5dcde13507252ed8c2b20a093ac9081ce2a8133c48d2807e5f968c04a20dd52c070d6c43c704b8650da7f94e5450e0d34cfc2b2d2ba7cb5343e6b4281633c6c065dae27fab18ca71bea018eba94d20e78c5e3223c70f50cb77399c1a89436f1e7213673ae825d4fc5523645031696df10f9b5238c03f733b4dfcf":hex:"8572af442c9af9652a192d893c18b8c3":hex:"429915c3309fba2a42b8e89f42a9376a2f329805a4d6daae11e9a20c2f982671ef8a7539a9657777d03cbf755ef93be0d8e426ed00899a59e8b963fd44269d64692ed07b231cde93e85397cf125a75032ca3726ea1ff1b05d79f2040c1135012b90597186c1db2e16cd128d45a7b9d934ec01341d9030e9721c62f62003059b8":hex:"ff4e46c4236304b8d52ba2d6db269f95d2cd5fe4318ce930d407051469c7e36e44bbcc909c4966276f5a2ec70021982fecbeae34df235a3e9e0370afa5a269ca8847a84b8477f7ddd6055d0f800ff4d413f63db517c96d15dbe78655748edd820f2ee79df5eca31711870022f1f5394b84f05bfef97f99cbd6205f8e522b3d5e":int:96:hex:"624b0b5b6374c5153835b8e5":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #0 [#2] +depends_on:0 +1:exp:0:hex:"5bcc874114b9d78c3eb748a783d1448c":hex:"7d57418bcea007247f5e18c17a2e4601c3eb8c89f61ed365d5aebee7593cdd63871d964a25fc9d723f291d39e0c4f75012471faf8e06db60c4ad8a26cf434bd82a29a8b653fdda1b86a7e4800c1d70cb5d8b8a1d1af52894082bb282ffdde8f0128a4abb68aedcfcb59160f6b5aaf452812f4d00472d2862a8b22480e71231b3":hex:"5f4fde440faa9537d62e62994ab20fb5":hex:"b5dfe0d971f2920ba4c029d4c346a49788b499faacdb18b8f905f1457a8b9fa48709893516a7b48bc601710bfd73c12da094c29df5776d491c9978f8ab237f605785b0304488f1c20bf5a767ba6d5e1e2961957aa107bdba2358b81ef1e06576db985b3ef8194725b75d49de1de3a57f161dede508e37ad3356134fa0a1aa48e":hex:"6bc0dec98bece6c4e245fe978f6db113deca75e1b475bc31f1da0c7457a85ee7aac8be5f2121c0610b99a2c64519fc2514b643c379b4f53c5432b9729aea9fcecb88a2e2d0a6e74be04859a66f55fb2af1598bcb039108ef7fcfd99d94e79287ec1f62bd1bf5ff9dd51ab12fae4f6e21b95ca50032f9a65bd85f9a1aa0524950":int:64:hex:"354fb8bcd38f2a26":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #1 [#2] +depends_on:0 +1:exp:0:hex:"427c89146eb7d76578dc173bd9e15cda":hex:"1d39249130404d60ed40241cf3354458e06f1474b3723569d88235f03098053fc99010f39435620acc710a4e386b2ecbf9b327a8dcfbeddc084353fff029d24787ce81e74a5e1ac1ef096e0a2ae882a669ca168275806bb7f462e66c941fffc6ed44b9628450e03a5032676c1ee4aedfcb1767150d56c7d73a8a47f6d19854fa":hex:"0092e76cd8882e5f77f4c8514491705d":hex:"0ac4631358bb9375e07756692bde59d27012e921f054fdfea0ddb242c43421f4c7241cb210cb5c172d053de2763efd565f1138fbe7f9cd998d825ab800df900843474ebf857b3371c555b89670e86354fe430f715ebbd0ecad974fea34e3bbae43d3ca3ca178f3361f0a11fd75f60e9140f44364b02a073dcce8339fa28cb5ad":hex:"2b385e9df4ed41cdca53a4ac8cb3e0af75eddd518b6727380712950d96c34bc6a0a6ac02184c1987548932b116ec9ae7abf01157a50e422b3e6aa62deb0cb2d81bf7fe0c25041a355ccaaeb049abb0393acfe90d869e9edfdfb646971bbb1ba9e5983cd0e2739158fab31be26cfdf9286d347b58b00f75d9f48ece1353308a91":int:64:hex:"905cdf228a68bebb":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,64) #2 [#2] +depends_on:0 +1:exp:0:hex:"2e09660909a9aa0a50958016c3e07895":hex:"d7b2ceb182d4a8ed57572c4237ba99bbdd589093db0f71732f9e67559d3054fa1af195aa4864fde413549d27468ffe7c5c23e242cab4ae4bb9e2657422dc3fc78fbdcde892ed202be1e47f095b09cfc53cfe86cb16e2e95444492ad5d0eef053178d6b0485731be7a5193563bf56f63cc0687fc01679254d74e9ed788645004c":hex:"c4f865be8b5062e488b1725749a87945":hex:"26f50acdefde4d585fc6de6c6234c9ead40684349a2bfd022df93d9774c9f5b8f50474032a417bdcc21a74da72c0297437a0cef8f527c9205797f77b4227c272e08ad0b120a2a31ef13e372cad2387ccc1bcefc88dd58899821d68f3be6a4b2cd08697d1897efcd6ed3a0d7849f6cbb50e46800627cfd26964e2cfe9f36624d9":hex:"321f6d79a6658c7c2b67fe3c932237593a6ec7e6fd8198abc6b0b6ba5d4dac9e0695f0c64dde1c94c0383839ee37f8bbfcc516f24871fd79a9b9135ceef841e4c8ddf6b57962c0e8ad7aaf210e97a43489097270756404fddde637de461b8644fef244142820e1af12b90f16748b0915a6b773dfbbdf6b16f1beaccb4cd5edba":int:64:hex:"b294db7ed69912dc":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #0 [#2] +depends_on:0 +1:exp:0:hex:"5e45d57981f65a6b170efa758cf4553d":hex:"bc8d4c418442743f2fdbaf95b8f87b7c15a3176085e34addf4cf0fb3c2df15587526691b07e6407ba16999b72382635a2aebb62d05c1547a7d074c857a23107c7577864e7f7bcdb5b6d1fb50136391f89c42d3f02754b0e4ed0fcb0c03576b986af5c12cf9bf5e0c585d6aaf49d0c6fb2ec30eae97b2b850a35474bfb9a2c069":hex:"b43403b627fe9e0135192d1a048c6faa":hex:"7a27ea26c7607e4e7e627f3161bdf15f21f3d62dc33df14951971712f960d3b2082d75395c5008e5ea00d282d350f86dac8c61f5c0f90e7797a5b61ee96f7e332ec5de51cb1377e47c641f326d1e58817c8c95feb5b2923758e33b279191d0a9ffd09b7619b0318a70775e36abf5f7ab59422ff68914e7b478c448a7b141c4bf":hex:"90d8a6218da063c38e0f06d548a3d5685fd3e0fbaf609c77bdd573bb9c63f30590eaf8b181a2feb81c8b3f5f34a94dc94b905036a6c69b97263302b8674d9e09325065588e97c0b5b33116981f1f362a7c5bb1e996c126c31fbd63791772f4d594632f408fdf011b3f2cc750b060452c181e8e09697c8662c00c8d4f29d875a7":int:32:hex:"611abef7":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #1 [#2] +depends_on:0 +1:exp:0:hex:"00d4bf20509a61bc76430ffa5f013589":hex:"036a191a388cf3c57c9e6f0e2f5c8bc3d5c25ee8e2fedfadb7b7433155c7e79304f0905ab2a17e1f04f2f2dacd4a41521d6ce213961df9dc9101d41df4e44246488fbedb75a01256fbc7784769eb8f99d44d5eabf93cf667ebae2437ccedc79efa58c075183d46a5c20bf4c81e0f9754ad35af65f7c8aafe7daa3460c6892b1a":hex:"25b1026a009470a5ca8caeeb67200792":hex:"fd75acfd5aa25fb8bccb53672e5d6a8080081506cf03df2bab0746a353510996e0237d6354ee0210a41f20f88ec6569f2b200b28c6a31464a0533a6bc45afef3ae381425a3606de2866dba694124d96da9d0a2b061b787524ee6e5d3b1ef5c4bcf168810aa177660b7e1379ac8a480ce43d73dfcc696873cea2df419f372651e":hex:"cab80615b666c47fcabf0d9805842ab2805150abad4de0ae8b12306bed504d4a7f91f52379df65cb9587577e59dafcd4203d2ed2743d35472285e9522db0ce3dd027a01c79ac64caee29ef3752a077254b0dca269f6f206f6cc575e8fedb0ba525dcf6252fa6f7b688556933f1dee84b2ad36a266695ce8672229cedd82f20a1":int:32:hex:"3287478c":int:0 + +AES-GCM NIST Validation (AES-128,128,1024,1024,32) #2 [#2] +depends_on:0 +1:exp:0:hex:"fe481476fce76efcfc78ed144b0756f1":hex:"246e1f2babab8da98b17cc928bd49504d7d87ea2cc174f9ffb7dbafe5969ff824a0bcb52f35441d22f3edcd10fab0ec04c0bde5abd3624ca25cbb4541b5d62a3deb52c00b75d68aaf0504d51f95b8dcbebdd8433f4966c584ac7f8c19407ca927a79fa4ead2688c4a7baafb4c31ef83c05e8848ec2b4f657aab84c109c91c277":hex:"1a2c18c6bf13b3b2785610c71ccd98ca":hex:"b0ab3cb5256575774b8242b89badfbe0dfdfd04f5dd75a8e5f218b28d3f6bc085a013defa5f5b15dfb46132db58ed7a9ddb812d28ee2f962796ad988561a381c02d1cf37dca5fd33e081d61cc7b3ab0b477947524a4ca4cb48c36f48b302c440be6f5777518a60585a8a16cea510dbfc5580b0daac49a2b1242ff55e91a8eae8":hex:"5587620bbb77f70afdf3cdb7ae390edd0473286d86d3f862ad70902d90ff1d315947c959f016257a8fe1f52cc22a54f21de8cb60b74808ac7b22ea7a15945371e18b77c9571aad631aa080c60c1e472019fa85625fc80ed32a51d05e397a8987c8fece197a566689d24d05361b6f3a75616c89db6123bf5902960b21a18bc03a":int:32:hex:"bd4265a8":int:0 + +AES-GCM Bad IV (AES-128,128,0,0,32) #0 +depends_on:0 +0:exp:0:exp:1:hex:"d0194b6ee68f0ed8adc4b22ed15dbf14":hex:"":hex:"":hex:"":int:32:exp:2 + +AES-GCM Selftest +depends_on:0 +5 + diff --git a/third_party/mbedtls/test/test_suite_gcm.aes192_de.c b/third_party/mbedtls/test/test_suite_gcm.aes192_de.c new file mode 100644 index 000000000..30fb62c3c --- /dev/null +++ b/third_party/mbedtls/test/test_suite_gcm.aes192_de.c @@ -0,0 +1,642 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_gcm.aes192_de.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_gcm.function + * Test suite data : suites/test_suite_gcm.aes192_de.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +void test_gcm_bad_parameters( int cipher_id, int direction, + data_t *key_str, data_t *src_str, + data_t *iv_str, data_t *add_str, + int tag_len_bits, int gcm_result ) +{ + unsigned char output[128]; + unsigned char tag_output[16]; + mbedtls_gcm_context ctx; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + memset( tag_output, 0x00, sizeof( tag_output ) ); + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_gcm_crypt_and_tag( &ctx, direction, src_str->len, iv_str->x, iv_str->len, + add_str->x, add_str->len, src_str->x, output, tag_len, tag_output ) == gcm_result ); + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_bad_parameters_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_gcm_bad_parameters( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +void test_gcm_encrypt_and_tag( int cipher_id, data_t * key_str, + data_t * src_str, data_t * iv_str, + data_t * add_str, data_t * dst, + int tag_len_bits, data_t * tag, + int init_result ) +{ + unsigned char output[128]; + unsigned char tag_output[16]; + mbedtls_gcm_context ctx; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset(output, 0x00, 128); + memset(tag_output, 0x00, 16); + + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == init_result ); + if( init_result == 0 ) + { + TEST_ASSERT( mbedtls_gcm_crypt_and_tag( &ctx, MBEDTLS_GCM_ENCRYPT, src_str->len, iv_str->x, iv_str->len, add_str->x, add_str->len, src_str->x, output, tag_len, tag_output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + TEST_ASSERT( mbedtls_test_hexcmp( tag_output, tag->x, + tag_len, tag->len ) == 0 ); + } + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_encrypt_and_tag_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_gcm_encrypt_and_tag( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, *( (int *) params[11] ), &data12, *( (int *) params[14] ) ); +} +void test_gcm_decrypt_and_verify( int cipher_id, data_t * key_str, + data_t * src_str, data_t * iv_str, + data_t * add_str, int tag_len_bits, + data_t * tag_str, char * result, + data_t * pt_result, int init_result ) +{ + unsigned char output[128]; + mbedtls_gcm_context ctx; + int ret; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset(output, 0x00, 128); + + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == init_result ); + if( init_result == 0 ) + { + ret = mbedtls_gcm_auth_decrypt( &ctx, src_str->len, iv_str->x, iv_str->len, add_str->x, add_str->len, tag_str->x, tag_len, src_str->x, output ); + + if( strcmp( "FAIL", result ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_GCM_AUTH_FAILED ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, pt_result->x, + src_str->len, + pt_result->len ) == 0 ); + } + } + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_decrypt_and_verify_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data13 = {(uint8_t *) params[13], *( (uint32_t *) params[14] )}; + + test_gcm_decrypt_and_verify( *( (int *) params[0] ), &data1, &data3, &data5, &data7, *( (int *) params[9] ), &data10, (char *) params[12], &data13, *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_gcm_invalid_param( ) +{ + mbedtls_gcm_context ctx; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + mbedtls_cipher_id_t valid_cipher = MBEDTLS_CIPHER_ID_AES; + int valid_mode = MBEDTLS_GCM_ENCRYPT; + int valid_len = sizeof(valid_buffer); + int valid_bitlen = 128, invalid_bitlen = 1; + + mbedtls_gcm_init( &ctx ); + + /* mbedtls_gcm_init() */ + TEST_INVALID_PARAM( mbedtls_gcm_init( NULL ) ); + + /* mbedtls_gcm_setkey */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( NULL, valid_cipher, valid_buffer, valid_bitlen ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( &ctx, valid_cipher, NULL, valid_bitlen ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( &ctx, valid_cipher, valid_buffer, invalid_bitlen ) ); + + /* mbedtls_gcm_crypt_and_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( NULL, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, NULL ) ); + + /* mbedtls_gcm_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL) ); + + /* mbedtls_gcm_starts() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( NULL, valid_mode, + valid_buffer, valid_len, + valid_buffer, valid_len ) ); + + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( &ctx, valid_mode, + NULL, valid_len, + valid_buffer, valid_len ) ); + + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( &ctx, valid_mode, + valid_buffer, valid_len, + NULL, valid_len ) ); + + /* mbedtls_gcm_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( NULL, valid_len, + valid_buffer, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( &ctx, valid_len, + NULL, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( &ctx, valid_len, + valid_buffer, NULL ) ); + + /* mbedtls_gcm_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_finish( NULL, valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_finish( &ctx, NULL, valid_len ) ); + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_gcm_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_gcm_valid_param( ) +{ + TEST_VALID_PARAM( mbedtls_gcm_free( NULL ) ); +exit: + return; +} + +void test_gcm_valid_param_wrapper( void ** params ) +{ + (void)params; + + test_gcm_valid_param( ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_gcm_selftest( ) +{ + TEST_ASSERT( mbedtls_gcm_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_gcm_selftest_wrapper( void ** params ) +{ + (void)params; + + test_gcm_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_GCM_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_GCM_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_ID_AES; + } + break; + case 1: + { + *out_value = MBEDTLS_GCM_DECRYPT; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_GCM_BAD_INPUT; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_GCM_C) + + case 0: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_bad_parameters_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_encrypt_and_tag_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_decrypt_and_verify_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_gcm_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_valid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_SELF_TEST) + test_gcm_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_gcm.aes192_de.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_gcm.aes192_de.datax b/third_party/mbedtls/test/test_suite_gcm.aes192_de.datax new file mode 100644 index 000000000..ef0fe6be1 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_gcm.aes192_de.datax @@ -0,0 +1,680 @@ +AES-GCM NIST Validation (AES-192,128,0,0,128) #0 [#1] +depends_on:0 +2:exp:0:hex:"806766a4d2b6507cc4113bc0e46eebe120eacd948c24dc7f":hex:"":hex:"4f801c772395c4519ec830980c8ca5a4":hex:"":int:128:hex:"8fa16452b132bebc6aa521e92cb3b0ea":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #1 [#1] +depends_on:0 +2:exp:0:hex:"0c2abdcd2e4ae4137509761a38e6ca436b99c21b141f28f5":hex:"":hex:"335ca01a07081fea4e605eb5f23a778e":hex:"":int:128:hex:"d7f475dfcb92a75bc8521c12bb2e8b86":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #2 [#1] +depends_on:0 +2:exp:0:hex:"eef490a0c2ecb32472e1654184340cc7433c34da981c062d":hex:"":hex:"d9172c3344d37ff93d2dcb2170ea5d01":hex:"":int:128:hex:"017fef05260a496654896d4703db3888":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #0 [#1] +depends_on:0 +2:exp:0:hex:"fe0c3490f1f0dba23cf5c64e6e1740d06f85e0afec6772f3":hex:"":hex:"f47e915163fa3df7f6c15b9d69f53907":hex:"":int:120:hex:"14e1a057a2e7ffbd2208e9c25dbba1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #1 [#1] +depends_on:0 +2:exp:0:hex:"4356b3b1f308df3573509945afe5268984f9d953f01096de":hex:"":hex:"a35b397b34a14a8e24d05a37be4d1822":hex:"":int:120:hex:"e045ecba220d22c80826b77a21b013":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #2 [#1] +depends_on:0 +2:exp:0:hex:"e2898937cc575c8bb7444413884deafe8eaf326be8849e42":hex:"":hex:"169a449ccb3eb29805b15304d603b132":hex:"":int:120:hex:"3a807251f3d6242849a69972b14f6d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #0 [#1] +depends_on:0 +2:exp:0:hex:"75683c7df0442e10b5368fcd6bb481f0bff8d95aae90487e":hex:"":hex:"538641f7d1cc5c68715971cee607da73":hex:"":int:112:hex:"07d68fffe417adc3397706d73b95":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #1 [#1] +depends_on:0 +2:exp:0:hex:"0724ee1f317997ce77bb659446fcb5a557490f40597341c7":hex:"":hex:"0d8eb78032d83c676820b2ef5ccc2cc8":hex:"":int:112:hex:"7da181563b26c7aefeb29e71cc69":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #2 [#1] +depends_on:0 +2:exp:0:hex:"be2f0f4ae4ab851b258ec5602628df261b6a69e309ff9043":hex:"":hex:"646a91d83ae72b9b9e9fce64135cbf73":hex:"":int:112:hex:"169e717e2bae42e3eb61d0a1a29b":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #0 [#1] +depends_on:0 +2:exp:0:hex:"583c328daecd18c2ac5c83a0c263de194a4c73aa4700fe76":hex:"":hex:"55e10d5e9b438b02505d30f211b16fea":hex:"":int:104:hex:"95c0a4ea9e80f91a4acce500f7":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #1 [#1] +depends_on:0 +2:exp:0:hex:"b40857e7e6f26050f1e9a6cbe05e15a0ba07c2055634ad47":hex:"":hex:"e25ef162a4295d7d24de75a673172346":hex:"":int:104:hex:"89ea4d1f34edb716b322ea7f6f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #2 [#1] +depends_on:0 +2:exp:0:hex:"627008956e31fea497fb120b438a2a043c23b1b38dc6bc10":hex:"":hex:"08ea464baac54469b0498419d83820e6":hex:"":int:104:hex:"ab064a8d380fe2cda38e61f9e1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #0 [#1] +depends_on:0 +2:exp:0:hex:"8c386d67d7c2bfd46b8571d8685b35741e87a3ed4a46c9db":hex:"":hex:"766996fb67ace9e6a22d7f802455d4ef":hex:"":int:96:hex:"9a641be173dc3557ea015372":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #1 [#1] +depends_on:0 +2:exp:0:hex:"711bc5aa6b94fa3287fad0167ac1a9ef5e8e01c16a79e95a":hex:"":hex:"75cdb8b83017f3dc5ac8733016ab47c7":hex:"":int:96:hex:"81e3a5580234d8e0b2204bc3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #2 [#1] +depends_on:0 +2:exp:0:hex:"c74620828402e0bdf3f7a5353668505dc1550a31debce59a":hex:"":hex:"cfbefe265583ab3a2285e8080141ba48":hex:"":int:96:hex:"355a43bcebbe7f72b6cd27ea":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #0 [#1] +depends_on:0 +2:exp:0:hex:"1eb53aa548b41bfdc85c657ebdebdae0c7e525a6432bc012":hex:"":hex:"37ffc64d4b2d9c82dd17d1ad3076d82b":hex:"":int:64:hex:"34b8e037084b3f2d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #1 [#1] +depends_on:0 +2:exp:0:hex:"50d077575f6db91024a8e564db83324539e9b7add7bb98e4":hex:"":hex:"118d0283294d4084127cce4b0cd5b5fa":hex:"":int:64:hex:"507a361d8ac59882":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #2 [#1] +depends_on:0 +2:exp:0:hex:"d9ddca0807305025d61919ed7893d7d5c5a3c9f012f4842f":hex:"":hex:"b78d518b6c41a9e031a00b10fb178327":hex:"":int:64:hex:"f401d546c8b739ff":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #0 [#1] +depends_on:0 +2:exp:0:hex:"6ed8d8afde4dc3872cbc274d7c47b719205518496dd7951d":hex:"":hex:"14eb280288740d464e3b8f296c642daa":hex:"":int:32:hex:"39e64d7a":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #1 [#1] +depends_on:0 +2:exp:0:hex:"80aace5ab74f261bc09ac6f66898f69e7f348f805d52404d":hex:"":hex:"f54bf4aac8fb631c8b6ff5e96465fae6":hex:"":int:32:hex:"1ec1c1a1":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #2 [#1] +depends_on:0 +2:exp:0:hex:"23b76efd0dbc8d501885ab7d43a7dacde91edd9cde1e1048":hex:"":hex:"75532d15e582e6c477b411e727d4171e":hex:"":int:32:hex:"76a0e017":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #0 [#1] +depends_on:0 +2:exp:0:hex:"94c50453dd3ef7f7ea763ae13fa34debb9c1198abbf32326":hex:"":hex:"1afe962bc46e36099165552ddb329ac6":hex:"b2920dd9b0325a87e8edda8db560bfe287e44df79cf61edba3b2c95e34629638ecb86584f05a303603065e63323523f6ccc5b605679d1722cde5561f89d268d5f8db8e6bdffda4839c4a04982e8314da78e89f8f8ad9c0fee86332906bf78d2f20afcaabdc282008c6d09df2bfe9be2c9027bb49268b8be8936be39fa8b1ae03":int:128:hex:"51e1f19a7dea5cfe9b9ca9d09096c3e7":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #1 [#1] +depends_on:0 +2:exp:0:hex:"c6a98102af3d875bcdebe594661d3a6b376970c02b11d019":hex:"":hex:"bea8cd85a28a2c05bf7406b8eef1efcc":hex:"f2f80e2c042092cc7240b598ab30fad055bce85408aa0f8cefaf8a7204f0e2acb87c78f46a5867b1f1c19461cbf5ed5d2ca21c96a63fb1f42f10f394952e63520795c56df77d6a04cb5ad006ee865a47dc2349a814a630b3d4c4e0fd149f51e8fa846656ea569fd29a1ebafc061446eb80ec182f833f1f6d9083545abf52fa4c":int:128:hex:"04b80f25ae9d07f5fd8220263ac3f2f7":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #2 [#1] +depends_on:0 +2:exp:0:hex:"ec3cc45a22fdc7cc79ed658d9e9dbc138dcc7d6e795cba1a":hex:"":hex:"b10d9c70205e142704f9d1f74caee0f6":hex:"714994017c169c574aaff2f8bad15f8fa6a385117f5405f74846eca873ca4a8f4876adf704f2fcaff2dfa75c17afefd08a4707292debc6d9fafda6244ca509bc52b0c6b70f09b14c0d7c667583c091d4064e241ba1f82dd43dc3ea4b8922be65faf5583f6b21ff5b22d3632eb4a426675648250e4b3e37c688d6129b954ef6a8":int:128:hex:"d22407fd3ae1921d1b380461d2e60210":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #0 [#1] +depends_on:0 +2:exp:0:hex:"5a32ebc7a2338038ced36d2b85cbc6c45cca9845a7c5aa99":hex:"":hex:"9afe0882e418c9af205eeb90e131d212":hex:"61ff8a8bc22803f17e8e9f01aff865bc7d3083ff413ce392a989e46ebed5114894de906f7d36439024d8f2e69cc815ac043fff2f75169f6c9aa9761ff32d10a1353213ac756cb84bd3613f8261ef390e1d00c3a8fb82764b0cda4e0049219e87d2e92c38f78ffac242391f838a248f608bb2b56b31bbb453d1098e99d079ea1b":int:120:hex:"fcbb932ddb0128df78a71971c52838":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #1 [#1] +depends_on:0 +2:exp:0:hex:"9bf22885e7f13bcc63bb0a2ca90c20e5c86001f05edf85d8":hex:"":hex:"99dec21f4781284722b5074ea567c171":hex:"9f4176dacf26e27aa0e669cd4d44bca41f83468c70b54c745a601408a214bf876941ae2ae4d26929113f5de2e7d15a7bb656541292137bf2129fdc31f06f070e3cfaf0a7b30d93d8d3c76a981d75cd0ffa0bcacb34597d5be1a055c35eefeddc07ee098603e48ad88eb7a2ec19c1aefc5c7be9a237797397aa27590d5261f67a":int:120:hex:"18fd1feec5e3bbf0985312dd6100d1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #2 [#1] +depends_on:0 +2:exp:0:hex:"cfd75a9d3788d965895553ab5fb7a8ff0aa383b7594850a6":hex:"":hex:"a6df69e5f77f4d99d5318c45c87451b2":hex:"041aeb2fa0f7df027cd7709a992e041179d499f5dbccd389035bf7e514a38b5f8368379d2d7b5015d4fa6fadfd7c75abd2d855f5ea4220315fad2c2d435d910253bf76f252a21c57fe74f7247dac32f4276d793d30d48dd61d0e14a4b7f07a56c94d3799d04324dfb2b27a22a5077e280422d4f014f253d138e74c9ac3428a7b":int:120:hex:"fd78b9956e4e4522605db410f97e84":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #0 [#1] +depends_on:0 +2:exp:0:hex:"b0b21ae138485591c6bef7b3d5a0aa0e9762c30a50e4bba2":hex:"":hex:"56dc980e1cba1bc2e3b4a0733d7897ca":hex:"a38458e5cc71f22f6f5880dc018c5777c0e6c8a1301e7d0300c02c976423c2b65f522db4a90401035346d855c892cbf27092c81b969e99cb2b6198e450a95c547bb0145652c9720aaf72a975e4cb5124b483a42f84b5cd022367802c5f167a7dfc885c1f983bb4525a88c8257df3067b6d36d2dbf6323df80c3eaeffc2d176a5":int:112:hex:"b11f5c0e8cb6fea1a170c9342437":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #1 [#1] +depends_on:0 +2:exp:0:hex:"8775665aba345b1c3e626128b5afa3d0da8f4d36b8cf1ca6":hex:"":hex:"cd17f761670e1f104f8ea4fb0cec7166":hex:"2ee08a51ceaca1dbbb3ee09b72f57427fd34bd95da5b4c0933cbb0fc2f7270cffd3476aa05deeb892a7e6a8a3407e61f8631d1a00e47d46efb918393ee5099df7d65c12ab8c9640bfcb3a6cce00c3243d0b3f316f0822cfeae05ee67b419393cc81846b60c42aeb5c53f0ede1280dc36aa8ef59addd10668dd61557ce760c544":int:112:hex:"6cdf60e62c91a6a944fa80da1854":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #2 [#1] +depends_on:0 +2:exp:0:hex:"cc9922299b47725952f06272168b728218d2443028d81597":hex:"":hex:"9b2f1a40717afcdbb6a95d6e335c9e4d":hex:"bcfca8420bc7b9df0290d8c1bcf4e3e66d3a4be1c947af82dd541336e44e2c4fa7c6b456980b174948de30b694232b03f8eb990f849b5f57762886b449671e4f0b5e7a173f12910393bdf5c162163584c774ad3bba39794767a4cc45f4a582d307503960454631cdf551e528a863f2e014b1fca4955a78bd545dec831e4d71c7":int:112:hex:"dd515e5a8b41ecc441443a749b31":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #0 [#1] +depends_on:0 +2:exp:0:hex:"5a27d718f21c5cbdc52a745b931bc77bd1afa8b1231f8815":hex:"":hex:"59661051912fba45023aef4e6f9380a5":hex:"2b7ce5cea81300ed23501493310f1316581ef8a50e37eaadd4bb5f527add6deb09e7dcc67652e44ac889b48726d8c0ae80e2b3a89dd34232eb1da32f7f4fcd5bf8e920d286db8604f23ab06eab3e6f99beb55fe3725107e9d67a491cdada1580717bbf64c28799c9ab67922da9194747f32fd84197070a86838d1c9ebae379b7":int:104:hex:"f33e8f42b58f45a0456f83a13e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #1 [#1] +depends_on:0 +2:exp:0:hex:"b83e933cf54ac58f8c7e5ed18e4ed2213059158ed9cb2c30":hex:"":hex:"8710af55dd79da45a4b24f6e972bc60a":hex:"b7a428bc68696cee06f2f8b43f63b47914e29f04a4a40c0eec6193a9a24bbe012d68bea5573382dd579beeb0565b0e0334cce6724997138b198fce8325f07069d6890ac4c052e127aa6e70a6248e6536d1d3c6ac60d8cd14d9a45200f6540305f882df5fca2cac48278f94fe502b5abe2992fa2719b0ce98b7ef1b5582e0151c":int:104:hex:"380128ad7f35be87a17c9590fa":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #2 [#1] +depends_on:0 +2:exp:0:hex:"d2f85f92092385f15da43a086cff64c7448b4ee5a83ed72e":hex:"":hex:"9026dfd09e4553cd51c4c13ce70830de":hex:"3c8de64c14df73c1b470a9d8aa693af96e487d548d03a92ce59c0baec8576129945c722586a66f03deb5029cbda029fb22d355952c3dadfdede20b63f4221f27c8e5d710e2b335c2d9a9b7ca899597a03c41ee6508e40a6d74814441ac3acb64a20f48a61e8a18f4bbcbd3e7e59bb3cd2be405afd6ac80d47ce6496c4b9b294c":int:104:hex:"e9e5beea7d39c9250347a2a33d":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #0 [#1] +depends_on:0 +2:exp:0:hex:"de7df44ce007c99f7baad6a6955195f14e60999ed9818707":hex:"":hex:"4d209e414965fe99636c1c6493bba3a3":hex:"da3bc6bdd414a1e07e00981cf9199371192a1fb2eaae20f7091e5fe5368e26d61b981f7f1d29f1a9085ad2789d101155a980de98d961c093941502268adb70537ad9783e6c7d5157c939f59b8ad474c3d7fc1fcc91165cdf8dd9d6ec70d6400086d564b68ebead0d03ebd3aa66ded555692b8de0baf43bc0ddef42e3a9eb34ab":int:96:hex:"24483a57c20826a709b7d10a":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #1 [#1] +depends_on:0 +2:exp:0:hex:"1dfa5ff20046c775b5e768c2bd9775066ae766345b7befc3":hex:"":hex:"2d49409b869b8b9fc5b67767979ca8cd":hex:"e35d34478b228bc903ea2423697e603cc077967d7cfb062e95bc11d89fbe0a1f1d4569f89b2a7047300c1f5131d91564ec9bce014d18ba605a1c1e4e15e3e5c18413b8b59cbb25ab8f088885225de1235c16c7d9a8d06a23cb0b38fd1d5c6c19617fe08fd6bf01c965ed593149a1c6295435e98463e4f03a511d1a7e82c11f01":int:96:hex:"23012503febbf26dc2d872dc":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #2 [#1] +depends_on:0 +2:exp:0:hex:"2df3ee3a6484c48fdd0d37bab443228c7d873c984529dfb4":hex:"":hex:"dc6aeb41415c115d66443fbd7acdfc8f":hex:"eafc6007fafb461d3b151bdff459e56dd09b7b48b93ea730c85e5424f762b4a9080de44497a7c56dd7855628ffc61c7b4faeb7d6f413d464fe5ec6401f3028427ae3e62db3ff39cd0f5333a664d3505ff42caa8899b96a92ec01934d4b59556feb9055e8dfb81f55e60135345bfce3e4199bfcdb3ce42523e7d24be2a04cdb67":int:96:hex:"e8e80bf6e5c4a55e7964f455":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #0 [#1] +depends_on:0 +2:exp:0:hex:"ce0787f65e6c24a1c444c35dcd38195197530aa20f1f6f3b":hex:"":hex:"55300431b1eaac0375681d7821e1eb7a":hex:"84a699a34a1e597061ef95e8ec3c21b592e9236ddb98c68d7e05f1e709937b48ec34a4b88d99708d133a2cc33f5cf6819d5e7b82888e49faa5d54147d36c9e486630aa68fef88d55537119db1d57df0402f56e219f7ece7b4bb5f996dbe1c664a75174c880a00b0f2a56e35d17b69c550921961505afabf4bfd66cf04dc596d1":int:64:hex:"74264163131d16ac":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #1 [#1] +depends_on:0 +2:exp:0:hex:"3a15541b5857a668dc9899b2e198d2416e83bac13282ca46":hex:"":hex:"89bf8ab0cea6f59616eeb9b314d7c333":hex:"4d2843f34f9ea13a1ac521479457005178bcf8b2ebeaeb09097ea4471da9f6cc60a532bcda1c18cab822af541de3b87de606999e994ace3951f58a02de0d6620c9ae04549326da449a3e90364a17b90b6b17debc0f454bb0e7e98aef56a1caccf8c91614d1616db30fc8223dbcd8e77bf55d8253efe034fd66f7191e0303c52f":int:64:hex:"8f4877806daff10e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #2 [#1] +depends_on:0 +2:exp:0:hex:"b61cdfd19c136ee2acbe09b7993a4683a713427518f8e559":hex:"":hex:"4066118061c904ed1e866d4f31d11234":hex:"153c075ecdd184fd8a0fca25cae8f720201361ef84f3c638b148ca32c51d091a0e394236d0b51c1d2ee601914120c56dfea1289af470dbc9ef462ec5f974e455e6a83e215a2c8e27c0c5b5b45b662b7f58635a29866e8f76ab41ee628c12a24ab4d5f7954665c3e4a3a346739f20393fc5700ec79d2e3c2722c3fb3c77305337":int:64:hex:"4eff7227b42f9a7d":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #0 [#1] +depends_on:0 +2:exp:0:hex:"ce175a7df7e429fcc233540e6b8524323e91f40f592ba144":hex:"":hex:"c34484b4857b93e309df8e1a0e1ec9a3":hex:"ce8d8775f047b543a6cc0d9ef9bc0db5ac5d610dc3ff6e12e0ad7cd3a399ebb762331e3c1101a189b3433a7ff4cd880a0639d2581b71e398dd982f55a11bf0f4e6ee95bacd897e8ec34649e1c256ee6ccecb33e36c76927cc5124bc2962713ad44cbd435ae3c1143796d3037fa1d659e5dad7ebf3c8cbdb5b619113d7ce8c483":int:32:hex:"ff355f10":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #1 [#1] +depends_on:0 +2:exp:0:hex:"5f659ed236ba60494e9bf1ee2cb40edcf3f25a2bac2e5bc5":hex:"":hex:"ad49f12f202320255406c2f40e55b034":hex:"6da62892f436dfe9790e72d26f4858ca156d1d655c9cc4336fcf282b0f3f0b201e47f799c3019109af89ef5fd48a4811980930e82cd95f86b1995d977c847bbb06ecdcc98b1aae100b23c9c2f0dcf317a1fb36f14e90e396e6c0c594bcc0dc5f3ebf86ce7ecd4b06d1c43202734d53f55751a6e6bbda982104102af240def4eb":int:32:hex:"cb4d8c1d":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #2 [#1] +depends_on:0 +2:exp:0:hex:"a73f318b1e298ba4ac0ab2aed74f73543b1017cccbd1b240":hex:"":hex:"abe33b7e8d88bd30deb96d1e90c4e951":hex:"6de616b000047b14b6759015183dd753c61499c0e665d06a89e4fb0cd0dd3064ff8651582e901ef5d0cdf3344c29c70c3aabc2aaf83cb3f284c6fe4104906d389b027e7d9ca60d010f06ef8cd9e55db2483d06552ddbe3fc43b24c55085cd998eae3edec36673445bf626e933c15b6af08ea21cbace4720b0b68fe1a374877d5":int:32:hex:"4a28ec97":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #0 [#1] +depends_on:0 +2:exp:0:hex:"73d5be74615bc5b627eedfb95746fb5f17cbf25b500a597f":hex:"fc40993eb8559e6b127315c03103ce31b70fc0e07a766d9eecf2e4e8d973faa4afd3053c9ebef0282c9e3d2289d21b6c339748273fa1edf6d6ef5c8f1e1e9301b250297092d9ac4f4843125ea7299d5370f7f49c258eac2a58cc9df14c162604ba0801728994dc82cb625981130c3ca8cdb3391658d4e034691e62ece0a6e407":hex:"eb16ed8de81efde2915a901f557fba95":hex:"":int:128:hex:"804056dca9f102c4a13a930c81d77eca":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #1 [#1] +depends_on:0 +2:exp:0:hex:"a249135c9f2f5a8b1af66442a4d4e101771a918ef8acee05":hex:"c62b39b937edbdc9b644321d5d284e62eaa4154010c7a3208c1ef4706fba90223da04b2f686a28b975eff17386598ba77e212855692f384782c1f3c00be011e466e145f6f8b65c458e41409e01a019b290773992e19334ffaca544e28fc9044a5e86bcd2fa5ad2e76f2be3f014d8c387456a8fcfded3ae4d1194d0e3e53a2031":hex:"80b6e48fe4a3b08d40c1636b25dfd2c4":hex:"":int:128:hex:"951c1c89b6d95661630d739dd9120a73":char*:"":hex:"b865f8dd64a6f51a500bcfc8cadbc9e9f5d54d2d27d815ecfe3d5731e1b230c587b46958c6187e41b52ff187a14d26aa41c5f9909a3b77859429232e5bd6c6dc22cf5590402476d033a32682e8ab8dc7ed0b089c5ab20ab9a8c5d6a3be9ea7aa56c9d3ab08de4a4a019abb447db448062f16a533d416951a8ff6f13ed5608f77":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #2 [#1] +depends_on:0 +2:exp:0:hex:"fa832a4b37dcb3c0879a771bb8ae734f0d88b9be497797a8":hex:"0f1105f9ec24121232b60b6ef3c3e8ca9eec1a3d7625004b857d1d77f292b6ec065d92f5bb97e0dc2fdfdf823a5db275109a9472690caea04730e4bd732c33548718e9f7658bbf3e30b8d07790cd540c5754486ed8e4d6920cefaeb1c182c4d67ebed0d205ba0bd9441a599d55e45094b380f3478bcfca9646a0d7aa18d08e52":hex:"70835abab9f945c84ef4e97cdcf2a694":hex:"":int:128:hex:"a459be0b349f6e8392c2a86edd8a9da5":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #0 [#1] +depends_on:0 +2:exp:0:hex:"dda216287910d1f5c0a312f63c243612388bc510cb76c5ba":hex:"d6617d583344d4fe472099d2a688297857215a3e31b47d1bf355ccfe9cf2398a3eba362c670c88f8c7162903275dfd4761d095900bd97eba72200d4045d72bd239bda156829c36b38b1ff5e4230125e5695f623e129829721e889da235bb7d4b9da07cce8c3ceb96964fd2f9dd1ff0997e1a3e253a688ceb1bfec76a7c567266":hex:"7f770140df5b8678bc9c4b962b8c9034":hex:"":int:120:hex:"9823e3242b3f890c6a456f1837e039":char*:"":hex:"b4910277224025f58a5d0f37385b03fcd488dfef7580eb5c270c10bd7a6f6d9c7ddc2d1368d68d4e04f90e3df029ed028432a09f710be1610b2a75bd05f31bae83920573929573affd0eb03c63e0cec7a027deab792f43ee6307fd3c5078d43d5b1407ac023824d41c9437d66eeec172488f28d700aa4b54931aad7cd458456f":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #1 [#1] +depends_on:0 +2:exp:0:hex:"c5afa1e61d4594b1c2fa637f64f18dd557e4df3255b47f24":hex:"5c772cdf19571cd51d71fc166d33a0b892fbca4eae36ab0ac94e6164d51acb2d4e60d4f3a19c3757a93960e7fd90b9a6cdf98bdf259b370ed6c7ef8cb96dba7e3a875e6e7fe6abc76aabad30c8743b3e47c8de5d604c748eeb16806c2e75180a96af7741904eca61769d39e943eb4c4c25f2afd68e9472043de2bb03e9edae20":hex:"151fd3ba32f5bde72adce6291bcf63ea":hex:"":int:120:hex:"f0626cc07f2ed1a7570386a4110fc1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #2 [#1] +depends_on:0 +2:exp:0:hex:"febd4ff0fedd9f16bccb62380d59cd41b8eff1834347d8fa":hex:"dc971c8f65ece2ea4130afd4db38fc657c085ea19c76fef50f5bd0f8dd364cc22471c2fa36be8cde78529f58a78888e9de10961760a01af005e42fc5b03e6f64962e6b18eaedea979d33d1b06e2038b1aad8993e5b20cae6cc93f3f7cf2ad658fbba633d74f21a2003dded5f5dda3b46ed7424845c11bab439fbb987f0be09f8":hex:"743699d3759781e82a3d21c7cd7991c8":hex:"":int:120:hex:"1da347f9b6341049e63140395ad445":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #0 [#1] +depends_on:0 +2:exp:0:hex:"d280d079110c1c826cc77f490d807dd8d508eb579a160c49":hex:"a286d19610a990d64f3accd329fc005d468465a98cfa2f3606c6d0fbeb9732879bad3ca8094322a334a43155baed02d8e13a2fbf259d80066c6f418a1a74b23e0f6238f505b2b3dc906ffcb4910ce6c878b595bb4e5f8f3e2ede912b38dbafdf4659a93b056a1a67cb0ec1dbf00d93223f3b20b3f64a157105c5445b61628abf":hex:"85b241d516b94759c9ef975f557bccea":hex:"":int:112:hex:"bbf289df539f78c3a912b141da3a":char*:"":hex:"b9286ab91645c20de040a805020fed53c612d493a8ce9c71649ae16bd50eab6fb7f3a9180e1651d5413aa542608d7ecbf9fc7378c0bef4d439bc35434b6cf803976b8783aecc83a91e95cea72c2a26a883b710252e0c2a6baa115739a0692c85f6d34ff06234fbdc79b8c4a8ea0a7056fb48c18f73aaf5084868abb0dfaa287d":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #1 [#1] +depends_on:0 +2:exp:0:hex:"5e80f87fa2156c62df7be2ad16c4890de5ee5868a684fcf9":hex:"c829073efd5c5150d2b7e2cdaeff979830d1aa983c747724ade6472c647a6e8e5033046e0359ea62fc26b4c95bccb3ac416fdf54e95815c35bf86d3fdd7856abbb618fe8fcd35a9295114926a0c9df92317d44ba1885a0c67c10b9ba24b8b2f3a464308c5578932247bf9c79d939aa3576376d2d6b4f14a378ab775531fe8abf":hex:"9769f71c76b5b6c60462a845d2c123ad":hex:"":int:112:hex:"394b6c631a69be3ed8c90770f3d4":char*:"":hex:"f886bd92ca9d73a52e626b0c63a3daa138faaacf7809086d04f5c0c899362aa22e25d8659653b59c3103668461d9785bb425c6c1026ad9c924271cec9f27a9b341f708ca86f1d82a77aae88b25da9061b78b97276f3216720352629bd1a27ebf890da6f42d8c63d68342a93c382442d49dd4b62219504785cee89dffdc36f868":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #2 [#1] +depends_on:0 +2:exp:0:hex:"d8a7b99e53f5e5b197364d4516cace4b928de50e571315e3":hex:"d0db0ac5e14bf03729125f3137d4854b4d8ce2d264f8646da17402bdad7034c0d84d7a80f107eb202aeadbfdf063904ae9793c6ae91ee8bcc0fc0674d8111f6aea6607633f92e4be3cfbb64418101db8b0a9225c83e60ffcf7a7f71f77149a13f8c5227cd92855241e11ee363062a893a76ac282fb47b523b306cd8235cd81c2":hex:"4b12c6701534098e23e1b4659f684d6f":hex:"":int:112:hex:"729b31c65d8699c93d741caac8e3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #0 [#1] +depends_on:0 +2:exp:0:hex:"c874b427b7181b0c90b887147c36f242827149324fd5c945":hex:"bdd90190d587a564af022f06c8bd1a68735b6f18f04113fdcec24c6027aaf0271b183336fb713d247a173d9e095dae6e9badb0ab069712302875406f14320151fd43b90a3d6f35cc856636b1a6f98afc797cb5259567e2e9b7ce62d7b3370b5ee852722faf740edf815b3af460cdd7de90ca6ab6cd173844216c064b16ea3696":hex:"4b8dda046a5b7c46abeeca2f2f9bcaf8":hex:"":int:104:hex:"fe1e427bcb15ce026413a0da87":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #1 [#1] +depends_on:0 +2:exp:0:hex:"56543cd6e2ebb1e3dc136a826bfc37eddb12f7a26430a1b4":hex:"d541dd3acec2da042e6ea26fb90ff9a3861191926423b6dc99c5110b3bf150b362017159d0b85ffea397106a0d8299ec22791cb06103cd44036eed0d6d9f953724fb003068b3c3d97da129c28d97f09e6300cbea06ba66f410ca61c3311ce334c55f077c37acb3b7129c481748f79c958bc3bbeb2d3ff445ad361ed4bbc79f0a":hex:"927ce8a596ed28c85d9cb8e688a829e6":hex:"":int:104:hex:"3a98f471112a8a646460e8efd0":char*:"":hex:"a602d61e7a35cbe0e463119bb66fd4bb6c75d1fe0b211b9d6a0a6e9e84b0794282318f0d33ec053f2cfba1623e865681affeaf29f3da3113995e87d51a5ab4872bb05b5be8ef2b14dfc3df5a48cbc9b10853a708ee4886a7390e8e4d286740a0dd41c025c8d72eda3f73f3cec5c33d5e50b643afd7691213cccccc2c41b9bd7a":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #2 [#1] +depends_on:0 +2:exp:0:hex:"caaf81cd380f3af7885ef0d6196a1688c9372c5850dc5b0b":hex:"6f269929b92c6281e00672eaec183f187b2ddecc11c9045319521d245b595ab154dd50f045a660c4d53ae07d1b7a7fd6b21da10976eb5ffcddda08c1e9075a3b4d785faa003b4dd243f379e0654740b466704d9173bc43292ae0e279a903a955ce33b299bf2842b3461f7c9a2bd311f3e87254b5413d372ec543d6efa237b95a":hex:"508c55f1726896f5b9f0a7024fe2fad0":hex:"":int:104:hex:"3b8026268caf599ee677ecfd70":char*:"":hex:"c4a96fb08d7c2eebd17046172b98569bc2441929fc0d6876aa1f389b80c05e2ede74dc6f8c3896a2ccf518e1b375ee75e4967f7cca21fa81ee176f8fb8753381ce03b2df873897131adc62a0cbebf718c8e0bb8eeed3104535f17a9c706d178d95a1b232e9dac31f2d1bdb3a1b098f3056f0e3d18be36bd746675779c0f80a10":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #0 [#1] +depends_on:0 +2:exp:0:hex:"2fc9d9ac8469cfc718add2b03a4d8c8dcc2eeca08e5ff7bc":hex:"bc84d8a962a9cfd179d242788473d980d177abd0af9edccb14c6dc41535439a1768978158eeed99466574ea820dbedea68c819ffd9f9915ca8392c2e03049d7198baeca1d3491fe2345e64c1012aff03985b86c831ad516d4f5eb538109fff25383c7b0fa6b940ae19b0987d8c3e4a37ccbbd2034633c1eb0df1e9ddf3a8239e":hex:"b2a7c0d52fc60bacc3d1a94f33087095":hex:"":int:96:hex:"0a7a36ec128d0deb60869893":char*:"":hex:"fc3cd6486dfe944f7cb035787573a554f4fe010c15bd08d6b09f73066f6f272ff84474f3845337b6e429c947d419c511c2945ffb181492c5465940cef85077e8a6a272a07e310a2f3808f11be03d96162913c613d9c3f25c3893c2bd2a58a619a9757fd16cc20c1308f2140557330379f07dbfd8979b26b075977805f1885acc":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #1 [#1] +depends_on:0 +2:exp:0:hex:"81ff729efa4a9aa2eccc37c5f846235b53d3b93c79c709c8":hex:"3992ad29eeb97d17bd5c0f04d8589903ee23ccb2b1adc2992a48a2eb62c2644c0df53b4afe4ace60dc5ec249c0c083473ebac3323539a575c14fa74c8381d1ac90cb501240f96d1779b287f7d8ba8775281d453aae37c803185f2711d21f5c00eb45cad37587ed196d1633f1eb0b33abef337447d03ec09c0e3f7fd32e8c69f0":hex:"1bd17f04d1dc2e447b41665952ad9031":hex:"":int:96:hex:"01b0a815dc6da3e32851e1fb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #2 [#1] +depends_on:0 +2:exp:0:hex:"068500e8d4f8d4af9035cdaa8e005a648352e8f28bdafc8a":hex:"98e32428d9d21c4b60e690a2ce1cf70bee90df31302d1819b7d27fd577dd990f7ffe6ba5ef117caac718cc1880b4ca98f72db281c9609e189307302dc2866f20be3a545a565521368a6881e2642cba63b3cf4c8b5e5a8eabeb3e8b004618b8f77667c111e5402c5d7c66afd297c575ce5092e898d5831031d225cee668c186a1":hex:"5ea9198b860679759357befdbb106b62":hex:"":int:96:hex:"d58752f66b2cb9bb2bc388eb":char*:"":hex:"2ef3a17fcdb154f60d5e80263b7301a8526d2de451ea49adb441aa2541986b868dab24027178f48759dbe874ae7aa7b27fb19461c6678a0ba84bbcd8567ba2412a55179e15e7c1a1392730ac392b59c51d48f8366d45b933880095800e1f36ff1ac00753f6363b0e854f494552f1f2efe028d969e6b1a8080149dd853aa6751e":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #0 [#1] +depends_on:0 +2:exp:0:hex:"7474d9b07739001b25baf6867254994e06e54c578508232f":hex:"1cbab2b6e4274caa80987072914f667b887198f7aaf4574608b91b5274f5afc3eb05a457554ff5d346d460f92c068bc626fd301d0bb15cb3726504b3d88ecd46a15077728ddc2b698a2e8c5ea5885fc534ac227b8f103d193f1977badf4f853a0931398da01f8019a9b1ff271b3a783ff0fae6f54db425af6e3a345ba7512cbf":hex:"3ade6c92fe2dc575c136e3fbbba5c484":hex:"":int:64:hex:"67c25240b8e39b63":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #1 [#1] +depends_on:0 +2:exp:0:hex:"d50d4c7d442d8a92d0489a96e897d50dda6fbe47ca7713ee":hex:"b36b4caf1d47b0d10652824bd57b603ec1c16f4720ce7d43edde8af1b9737f61b68b882566e04da50136f27d9af4c4c57fff4c8465c8a85f0aeadc17e02709cc9ba818d9a272709e5fb65dd5612a5c5d700da399b3668a00041a51c23de616ea3f72093d85ecbfd9dd0b5d02b541fb605dcffe81e9f45a5c0c191cc0b92ac56d":hex:"41b37c04ab8a80f5a8d9d82a3a444772":hex:"":int:64:hex:"4ee54d280829e6ef":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #2 [#1] +depends_on:0 +2:exp:0:hex:"38f3ec3ec775dac76ae484d5b6ca61c695c7beafba4606ca":hex:"49726b8cefc842a02f2d7bef099871f38257cc8ea096c9ac50baced6d940acb4e8baf932bec379a973a2c3a3bc49f60f7e9eef45eafdd15bda1dd1557f068e81226af503934eb96564d14c03f0f351974c8a54fb104fb07417fe79272e4b0c0072b9f89b770326562e4e1b14cad784a2cd1b4ae1dc43623ec451a1cae55f6f84":hex:"9af53cf6891a749ab286f5c34238088a":hex:"":int:64:hex:"6f6f344dd43b0d20":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #0 [#1] +depends_on:0 +2:exp:0:hex:"6db4ef061513ef6690d57aef50d8011e0dd7eb4432d82374":hex:"b7f9206995bc97311855ee832e2b40c41ab2d1a40d9263683c95b14dcc51c74d2de7b6198f9d4766c659e7619fe2693a5b188fac464ccbd5e632c5fd248cedba4028a92de12ed91415077e94cfe7a60f117052dea8916dfe0a51d92c1c03927e93012dbacd29bbbc50ce537a8173348ca904ac86df55940e9394c2895a9fe563":hex:"623df5a0922d1e8c883debb2e0e5e0b1":hex:"":int:32:hex:"14f690d7":char*:"":hex:"a6414daa9be693e7ebb32480a783c54292e57feef4abbb3636bebbc3074bfc608ad55896fe9bd5ab875e52a43f715b98f52c07fc9fa6194ea0cd8ed78404f251639069c5a313ccfc6b94fb1657153ff48f16f6e22b3c4a0b7f88e188c90176447fe27fa7ddc2bac3d2b7edecad5f7605093ac4280b38ae6a4c040d2d4d491b42":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #1 [#1] +depends_on:0 +2:exp:0:hex:"8901bec4d3c64071d8c30c720c093221e05efed71da280bf":hex:"7c447e700db7367260dffa42050e612eff062eb0c8a6b4fe34858800bcb8ec2f622cb5213767b5771433783e9b0fa617c9ffb7fde09845dafc16dfc0df61215c0ca1191eabf43293db6603d5285859de7ef3329f5e71201586fb0188f0840ed5b877043ca06039768c77ff8687c5cfc2fd013a0b8da48344c568fce6b39e2b19":hex:"9265abe966cb83838d7fd9302938f49d":hex:"":int:32:hex:"6f6c38bc":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #2 [#1] +depends_on:0 +2:exp:0:hex:"2c57eb763f886154d3846cc333fc8ae8b3c7c9c3705f9872":hex:"9fe7d210221773ba4a163850bab290ba9b7bf5e825760ac940c290a1b40cd6dd5b9fb6385ae1a79d35ee7b355b34275857d5b847bef4ac7a58f6f0e9de68687807009f5dc26244935d7bcafc7aed18316ce6c375192d2a7bf0bee8a632fe4f412440292e39339b94b28281622842f88048be4640486f2b21a119658c294ce32e":hex:"9b3781165e7ff113ecd1d83d1df2366d":hex:"":int:32:hex:"62f32d4e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #0 [#1] +depends_on:0 +2:exp:0:hex:"307d31a594e54f673bea2f977835670aca4f3d45c9c376cc":hex:"d7385a7bd0cb76e1e242fa547c474370bcc7cc7cf3e3fa37b00fe08a56383ca31d023d8c493f6d42e482b0f32e4f244dd100ea08eee6535e5bb8d27f76dbb7eead6ba8e031ccd0eaeb649edee92aeaf0f027d59efd4e39b1f34b15ceb8b592ee0f171b1773b308c0e747790b0e6ace90fc661caa5f942bdc197067f28fbe87d1":hex:"0bdaa353c4904d32432926f27534c73c":hex:"aa39f04559ccc2cae3d563dda831fb238b2582cb2c2bb28cff20cc20200724c8771b9805ef7464b8fc06c7b8060c6920fd2779fbc807c2292c8c1f88f8088755609a1732ff8c0b06606452b970c79997b985889404fd907c4668a0bcc11ba617175f4525523494a244da60b238468c863055f04db20ea489adf545d56c0a71d8":int:128:hex:"2ddda790aae2ca427f5fb032c29673e6":char*:"":hex:"0b92262759897f4bd5624a891187eba6040d79322a2a5a60fb75c6c6a5badd117abe40c6d963931bbc72dca1a1bf1f5388030fe323b3b24bd408334b95908177fb59af57c5cc6b31825bc7097eec7fec19f9cdb41c0264fd22f71893bcf881c1510feb8057e64880f1ea2df8dc60bb300fd06b0a582f7be534e522caadc4a2c7":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #1 [#1] +depends_on:0 +2:exp:0:hex:"23c201968def551817f20e49b09dbb5aae0033305bef68a0":hex:"77bc8af42d1b64ee39012df5fc33c554af32bfef6d9182804dcfe370dfc4b9d059bdbc55f6ba4eacb8e3a491d96a65360d790864ba60acf1a605f6b28a6591513ea3cfd768ff47aee242a8e9bdfac399b452231bfd59d81c9b91f8dc589ad751d8f9fdad01dd00631f0cb51cb0248332f24194b577e5571ceb5c037a6d0bcfe8":hex:"bd2952d215aed5e915d863e7f7696b3e":hex:"23f35fac583897519b94998084ad6d77666e13595109e874625bc6ccc6d0c7816a62d64b02e670fa664e3bb52c276b1bafbeb44e5f9cc3ae028daf1d787344482f31fce5d2800020732b381a8b11c6837f428204b7ed2f4c4810067f2d4da99987b66e6525fc6b9217a8f6933f1681b7cfa857e102f616a7c84adc2f676e3a8f":int:128:hex:"bb9ba3a9ac7d63e67bd78d71dc3133b3":char*:"":hex:"17d93c921009c6b0b3ecf243d08b701422983f2dcaec9c8d7604a2d5565ed96ce5cddcb183cd5882f8d61d3202c9015d207fed16a4c1195ba712428c727601135315fc504e80c253c3a2e4a5593fc6c4a206edce1fd7104e8a888385bbb396d3cdf1eb2b2aa4d0c9e45451e99550d9cfa05aafe6e7b5319c73c33fd6f98db3c5":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #2 [#1] +depends_on:0 +2:exp:0:hex:"6baec0669add30acb8f678ce477a2b171f89d1f41935c491":hex:"5712b84c4c97d75f84edd50561bc1d3f1ba451cc3b358b2403b5e528290954348cf7a235b4dc11a72ddbc503191204e98a9744d85419508c8ca76438c13305f716f1e239a6d9f6423c27217a0057aa75f6d7e2fb356e7194f271459ab5482589ea311b33e3d3845952ff4067dd2b9bcc2e8f83630b0a219e904040abd643d839":hex:"b1472f92f552ca0d62496b8fa622c569":hex:"5ae64edf11b4dbc7294d3d01bc9faf310dc08a92b28e664e0a7525f938d32ef033033f1de8931f39a58df0eabc8784423f0a6355efcff008cae62c1d8e5b7baefd360a5a2aa1b7068522faf8e437e6419be305ada05715bf21d73bd227531fea4bc31a6ce1662aec49f1961ee28e33ae00eb20013fd84b51cfe0d5adbdaff592":int:128:hex:"29a2d607b2d2d9c96d093000b401a94f":char*:"":hex:"beb687f062ae7f5159d07609dd58d7b81c478d180bc0b4c07ae799626ff1da2be2e0d78b2a2a1f563257f161491a5ac500cd719da6379e30d0f6d0a7a33203381e058f487fc60989923afbee76e703c03abc73bb01bd262ff6f0ac931f771e9b4f2980e7d8c0a9e939fa6e1094796894f2c78f453e4abe64cb285016435ef0e8":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #0 [#1] +depends_on:0 +2:exp:0:hex:"7b882a2df81fdb9275fb05d120f32417e8ffedd07457e938":hex:"0aae7213da279b34d6dcf2a691b2d0333112ea22de0c3c68d47cf9f9f4ed8ad4e03d4a60ec18c3a04ac9c2abb73e1023051029b5e8705bb69c4c50afc84deb0379db5077be1f663652f8bd8958271af2c1ac4a87e08cb526bab8a030652f2a29af8055d0f31e35475caee27f84c156ef8642e5bfef89192f5bde3c54279ffe06":hex:"5c064d3418b89388fb21c61d8c74d2c5":hex:"5bfa7113d34e00f34713cf07c386d055e889bb42d7f6c8631ffce5668e98cb19bed8820b90ecb2b35df7134f975700347e5514287cfef7ffa2b0ff48b1de0769b03dca6610995d67cb80052cb2e5914eb4ed43ef5861f4b9364314fde6ad2b82fbba7fd849dfa6e46ecc12edc8cabfff28d9bd23c2bcc8ab3661c9ba4d5fee06":int:120:hex:"0943abb85adee47741540900cc833f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #1 [#1] +depends_on:0 +2:exp:0:hex:"51d94d21482c00bb5bc7e7e03aa017ba58f5a23494b72c2a":hex:"3a9c69c1ed2340bfde1495658dbf4f54731a19b3922a1d535df8d0b2582f5e803b5891e8ad1aa256c923956dcda2430d0c0696bce63295fb61183e040566e459338f908d23ae51f64020c1ef3d192428f23312b285fc4111d50d1add58f4a49008a22c90d3365230e9158cd56f9d84f079bdd673555d4dc76c74b02fa9920e7d":hex:"fb21cd763e6f25540f8ad455deaccdf0":hex:"019d1db5569eeff83306f65d653b01064854c1be8446cd2516336667c6557e7844fc349adea64a12dc19ac7e8e40b0520a48fac64571a93d669045607085ac9fa78fed99bbf644908d7763fe5f7f503947a9fe8661b7c6aef8da101acca0aed758ca1580eeb2f26ae3bf2de06ce8827a91a694179991a993cdf814efbcc61ca5":int:120:hex:"a93bd682b57e1d1bf4af97e93b8927":char*:"":hex:"7093f44703f2cbb3d12d9872b07a8cd44deb62dae48bc573b11a1ee1c9f3105223423fac3181c312a8a61757a432d92719f486c21e311b840aa63cf530710c873df27fecda0956075923f1ecc39bffb862706f48bde2de15612930fc8630d2036e9e4cfc1c69779171bd23d9e1d5de50a9e0a0de4bd82ed3efc45299980bb4cc":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #2 [#1] +depends_on:0 +2:exp:0:hex:"e6756470937f5d9af76f2abe6df2d0bc15ff8e39b5154071":hex:"afae92bd56c426c095d76633701aa9bea5ce05490482c6c64ac24468c3e1af6e6030a6bb6649745b011c6729bde985b9242e22105322fbb8853dcabbd00165d0b07d7b499e0238b6513bf6351eb40635a798f7e6e2d31125dda45ffe8964596fdbff55df22d4e9025bd4f39e7c9b90e74b3ee58d6901f113900ee47a4df5afd7":hex:"4500193711a5d817a9f48deafda39772":hex:"92fa22dba0eee6b1de1ddd24713b1be44c7105df90e6e7a54dcbf19025e560eb4986ee080cf613898a1a69d5ab460a3b8aa2723a95ac4a4af48224b011b55fb7582ae18f6746591eab2bd33d82a8dbbae3f7877e28afef9857a623530b31d8198b2df43f903d6e48ddae0848741f9eaae7b5504c67ad13791818f3c55c9b3d1e":int:120:hex:"7d9f97c97c3424c79966f5b45af090":char*:"":hex:"62258d60f0138c0405df4b2ec1e308b374603a9eace45932fdc2999e9e2261de8b1099473d1fc741c46c334023aa5d9359f7ef966240aaf7e310d874b5956fd180fb1124cbeb91cf86020c78a1a0335f5f029bd34677dd2d5076482f3b3e85808f54998f4bac8b8fa968febceec3458fb882fc0530271f144fb3e2ab8c1a6289":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #0 [#1] +depends_on:0 +2:exp:0:hex:"30db73d46b518669c45b81bc67b93bed3d0864f7e9e8e789":hex:"750bc1d2f91d786bb1e621192a376f552538ba8c07d50d9e10b9345f31b3e5f9d8ad7c719c03d8548a3b184b741cd06c49d7fb6fe80258d60c01c2987c337c823211cee7c1cf82077266889bc7767475e0eeabb2ef6b5a1de2089aaef77565d40a1c2c470a880c911e77a186eacca173b25970574f05c0bdcd5428b39b52af7f":hex:"5069e2d2f82b36de8c2eb171f301135d":hex:"ef781dce556b84188adee2b6e1d64dac2751dd8592abc6c72af7b998dfae40cbe692a4cae0b4aa2c95910e270600550fca1e83640c64efb1eb0e0a90a6fc475ae1db863a64ce9cc272f00abac8a63d48dd9f1c0a5f4586224befed05be4afae5bd92249833d565cc6b65fd8955cb8a7d7bd9f4b6a229e3881212871a52c15d1c":int:112:hex:"a5100c5e9a16aedf0e1bd8604335":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #1 [#1] +depends_on:0 +2:exp:0:hex:"209f0478f1a62cb54c551181cbd4d24b796e95f3a06b6cb9":hex:"66db7cc97b4a8266c0a2228e8028e38d8986e79fcbcc3caff3050fdd2de87b7ff7a6895b988b0bdb7fcc4d6e2d538dcfaad43ce2f98b6d32500f5a6e6183d84cb19157a699cdde1266d6d75a251ee1a2eb97bfe6405d50be2b17a58ba6eafaee0a023a28d568fd1c914f06041a49c79b9df9efe63d56883cbbbeaba809273d2e":hex:"7be1768f6ffb31599eb6def7d1daa41c":hex:"9cb49357536ebe087e1475a5387907a9e51ad1550697f13c6cc04384ec8a67dea13376bdd5e26b815c84a78f921b506b9e2086de50f849185f05ba7c3041e49e42c0673df856da109a78b8e0ce918c25836f7e781e6b16168e4e5976d27ebc83f20b7bf4beadecb9b4f17a7a0d3a3db27fc65288a754b5031a2f5a1394801e6e":int:112:hex:"4d2ac05bfd4b59b15a6f70ea7cd0":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #2 [#1] +depends_on:0 +2:exp:0:hex:"1bfa30b315e7b908263330140fa2d66ed57104784a43cc70":hex:"8eeee9865e23fa51dbbf197fa41776b7edbdb9381a22c935299cd959a46190788ae82f4e645b0362df89bfc00241964784bc7ef70f6f97e81687d52e552a33af20ae34a3005e0a7b85d094368d707c3c4cd3ef31c0daf3ccaa1676609ed199327f4139d0c120977e6babceed28896d2cb3129630f3ee135572dc39433057e26a":hex:"b7081a3010b524218390ba6dd460a1ec":hex:"8c1f42b5931d69ae351fcde7d2b4136d4898a4fa8ba62d55cef721dadf19beaabf9d1900bdf2e58ee568b808684eecbf7aa3c890f65c54b967b94484be082193b2d8393007389abaa9debbb49d727a2ac16b4dab2c8f276840e9c65a47974d9b04f2e63adf38b6aad763f0d7cdb2c3d58691adde6e51e0a85093a4c4944f5bf2":int:112:hex:"4da85b8ec861dd8be54787bb83f1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #0 [#1] +depends_on:0 +2:exp:0:hex:"fc47156a693e59a1dea0618c41441fe669fc65dcfb7d0726":hex:"3e4f0a586bad532a08c8863ebba01fd25014baa907e6032ee43d4a7dfc7c3171916dcdf9faee0531f27527872ae4e127b6b9aaee93f5e74d0ab23f3874aa0e291564bc97f17085dd7d5eb9a85d9f44574e5952929eda08863b64c85dd395c91b01fe5bef66e3fa8f9ee5bf62c25d80dc84fbe002ecfd218430b26f3549f734a1":hex:"ea1935ed014883cc427983d7962d9992":hex:"0d85b8513becfe8c91d0f6ffb65ec31f2cf406c51c0da88893c43d1327fd8ad1f4bab2d7b5e27438d643397034a72f8666bf641b6781bc90f764db387eae6720b5723d510194570ccd773e1b3bebfc333cc099d078583e8dac60d174d332925a24a45110c8d2abe8924ea677ac74db66ea789e2838efc96c78bceaa6236c0a67":int:104:hex:"8781b045a509c4239b9f44624e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #1 [#1] +depends_on:0 +2:exp:0:hex:"b5fcd780a03ba80341081ef96b440c0e4348afde4d60c1d5":hex:"6316f3beb32f6f3bf8f2ff6a2c160b432bafd3036d3eefa1e4ec204f24892e37dc4d75c7ce9a24b5c49fb4df901f35ef9d5955f7dc289c56cb74753f4d6b2982267d5269d12237e21202a65061849c65e90e6702dda03a35ace3a3a098d16b4bfbb85b7232404baee37776a9b51af6b3059a5f170f4ebe4ecf11061ca3c1f1f3":hex:"ad20cce056e74ec5d0a76d6280998f15":hex:"28f8fcf23b9c1ba40c19ffc1092632e35f234c1e8b82bcd5309d37bf849a2ce401413d1f242cf255ed597f9a93a1d6e50676997f95aa612e580d88234a86ddc404292746f0b2f5cf15abebcea6659f998ec6a1cb5a9914fee5aa1aa5d04b3c20914e45095e4141ce9c173653dd91c3ebe4ed4a9a28f3915d7b2edba34c2a58d8":int:104:hex:"2ad4520ddc3b907414d934cc1d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #2 [#1] +depends_on:0 +2:exp:0:hex:"4382507dddccf1385fc831da8924147563416d0656e168ec":hex:"e5c5430b960aa35dc8540215c2772d66811270859e33dd4477904759e7e5eb2986a52a4ccc9f592e614147b5ea2ead6636a15c6426336b2995d9a31ab36d76578c3540bc6693842a4bc0491c7963ee9cda2317951cf93244bd30bcdfec69a4767004636fe7d1be7300c35e80627bab9236a075a803e9e1080b9159060c643a78":hex:"a37687c9cd4bdc1ead4e6b8f78bee7f5":hex:"fa9ae30509cbb6fe104c21480ae7b8ec9f12f1afb17320d77b77cdf32ce8c5a3f7f927e501118c7ccd6975b79225059cef530a4fcb0a9719f5e2d3bebe7bb6ec0855e495a31e5075eb50aa6c1227e48b03e3fdf780084ac4912eb3a5674cca9dd6ac037366b230ae631a8580d2d117942dee5d5ddbbb2233afeca53289cc4f68":int:104:hex:"4221818d4be45306e205813789":char*:"":hex:"b5b36719bc4d13a5fbf37188ea814cdf3c97a430784330540325c899570e15482300bc82c5b8163074e0544c5132e3ce93bba68bd7a8d2db81d1431b424b697c1158c4d70625666d5ff99145ca34856815c905b5a0fd95806df56b9cd5b384bda3e394b409048eb1037144cc071539c02397e931da28a43cc354d584643afd4f":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #0 [#1] +depends_on:0 +2:exp:0:hex:"7a66db3450dac9a1e63d2639f34c5c6a3fbfb3c8e8230199":hex:"6463a7eb2496379bc8a5635541525926a6f9fa718e338221952118ae4cf03a85f2074b4ebaf108b9c725809be1e6309c3a444b66f12286f6ea9d80c3413706b234b26372e8f00783819314a994c9e3ecf6abdd255cbfe01b3865e1390a35dcd2853a3d99ed992e82ec67ba245f088cb090adade74bdbc8a1bad0f06cbea766a6":hex:"21f8341529b210ade7f2c6055e13007a":hex:"1699bc8c198ab03e22d9bc4f3682aad335c6e35f3f616bb69769a9d5a202511797e770ae0d8d8528ef7b2bb25b4294d47427b43f0580fa71d93fdef667f4f4196f84e41c0b1978796d0de74a94420fb8571bff39137fa231c572b31be9ae72338288bef5f8c992121dc918538551f346e279a9047df14ec9fc0fd399cd3bd8d8":int:96:hex:"4af02b81b26104d1d31e295a":char*:"":hex:"53fe6a34d280f2c96d1ae2b2e8baf6abd67cedf7d214312f75dd4a1bec28a641dda3e71aa398726b2b0b1f515e1f4259ee97acaf17f122db9ec7814c2de6a88d36c3ac106396ad03d337c2cd2d2b9b4b7170e23a5848ca7ea129838f967dfdfe83b45ff2a9be699bfb2346115465d59f074f09e24d8fcbd9ece0018c92776c43":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #1 [#1] +depends_on:0 +2:exp:0:hex:"1f5c818f24d201f9fb23fcca211b0545eee5c5c9b440810d":hex:"9a7566817a06f792e96a6a2ba8e0a01f8837e2de06796e68b0782cc54ed0b04fc5e24a1ad37d5ffb035548b882d88150e89915b89f57cde2bf3c43ab9dae356927daef6bd61cc9edd5e1b7a4abea2f71313677f1b2fdf3d8d4a7e9814ea820fbc3e5c83947db961839a985a57ced7f5e4a1efffcfd17a2c806d4cdc1e79162da":hex:"3a163067bdd90fce0406d1c198a88771":hex:"a5e94e233d04fe0c4b6c4684b386902fe05096702237dfbe76f73befa69b6f30394cf9fe3358997942df65842748fb4f075a3dc06e147bd8d67fc4371113a4d75c70219257c650a6f38a136659e20a1cf3a119397835c304e0fb2a33aa3c3019175c86463043d5edc6992874f61e81cd0d26af8b62cf8c8626901d4f16d84236":int:96:hex:"b124eea927e2a62a875494a1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #2 [#1] +depends_on:0 +2:exp:0:hex:"9a301f7edf83da63bcf37216a3a33d7613331c3210281dd7":hex:"e09cc8543db7804870004706a26e94b457c125bd648b581a196f962f2ae8fa55d9bc66530ba5020e22d282080b4720dc9a2096a11c0fcc3d9a67cd1cf95cd7cd2417ba308c761e64be24347a14c9423447094a5c72a0043c288b35e753ba0aa748f208381249fb1c8d195a472192404b6c8172663ee4b4d4ecfa426e1fb003f2":hex:"d73a546b0fa307633ac89506fa86138b":hex:"f57fe548cf4a551a216ffb24a1dcf1b79c95f9abf06443fd58af042d287c2165db373c82a94172db517840f22e45e966e3ead91ce1ddad132bcb844e406e84b76a0b5b0ee23064b66a229f32a2d3b9c71103f020c4ba57fc0f0608b7114914cf2ada0c5a9bc4afbfa9ce5da320f34beb2211d569a142f53bfd262f6d149c4350":int:96:hex:"f536a3b8c333b1aa520d6440":char*:"":hex:"124a327a8c22b7652886dac2c84b8997ca8a6f61c9ba9c094b5aea41eaa050a6df6cbf280259e5466071bcfa53b4ebc76c3cc4afc8c0385189a5382933aa57c89aab78dca84331e0fe8f0aab3a7857d3e13f08dcd90ec5f0684f82088ef8eb7fd67e75de43b67afc3a0beb458f5ebd61b2c779e6c539d795c667bb7dcc2b762e":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #0 [#1] +depends_on:0 +2:exp:0:hex:"fd40e8226fd13cb95ba50b7cdf0f07f7ab7037cf8705ca50":hex:"75aa7df5c3c443d48ee998064b6fd112c20d2d90c98e00d025ef08d1ad3595385be99de47fa627549b827c48bc79eb1dcaf2f1be95a45f7e55755b952aee5ae0748e68bee1b014a628f3f7dc88e0ebac1d1d00e268355f5101838ce125c57003aebc02a1c9d6ae2cd6e2592f52c0be38cef21a680ae35c909cab99dce9837aef":hex:"3406e70cbe16b047fedaa537eb892279":hex:"390b18d22d5ecc0b5a524ae9afac6fd948ac72d1360775a88b385aa862cce8a27f3e4b420e539bec6e8958f8c1b5416c313fa0a16f921149a2bfeae29ad2348949b29a73970e5be925ec0c35218b82a020cf21bb68c6931f86b29e01b85500a73f3ee7eb78da60078f42550da83b2e301d151d69b273a050f89e57dfc4787cbf":int:64:hex:"69e06c72ead69501":char*:"":hex:"6e8d661cd320b1b39f8494836fcf738b0ab82873d3903c9ee34d74f618aea36099926b54c1589225ec9a9d48ca53657f10d9289c31f199c37c48fb9cbe1cda1e790aaeedf73871f66a3761625cca3c4f642bc4f254868f6b903e80ceeeb015569ace23376567d3712ad16d1289dc504f15d9b2751b23e7722b9e6d8e0827859f":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #1 [#1] +depends_on:0 +2:exp:0:hex:"a85ab87563b809b01725764d64ba4cc6a143e2e0362f0c52":hex:"ef43629721b50bd3656b7ae31b6e4b4ba1cf2c72ed0460ee7d9fb416631ddc597e5f9aebbcf4442b95cc46e28476a464dd87caf9c1c1d6c99d3e3e059dc23f8d2fe155ff5e59c50d640bc052c62adee3aa1295b38732e3458f379e98a8dbdfed04c22a5761792e87fa67ecbcbf3b90eb1bcd1d3f49e60132452f28afece83e90":hex:"9f991ff16a3e3eb164a4f819c9f1821a":hex:"df289511f78d8fa2505afc4c71ab1d7c31a8d15d1e5fcbb29d70f0e56f89c4d7b30f1b3b4745b5d2cc7af34fb4c95461372bf516ec192b400dc8fdb0ca9fe1f30f5320d0fadf20155cfcddcf09233c6f591c1c89917e38a003f56b94a1e2429d1f2b6297db790d7dce84d9fa13d2d86a0e4d100e154050b07178bee4cdf18126":int:64:hex:"dc4c97fe8cc53350":char*:"":hex:"ff0e531c7344f0425d62d5fbedf4bc8d3d5cc80647e67b852c1a58ad1516d376d954cb8dda739f6a4df3cf1507e59696610bcb6b34340d6313028e00d7197845d392e73331aaf168b474a67364d8f9dab740509fabf92af75045f0afabc1b5829264d138820952bbc484d1100d058a4de32b4ece82746b2b4a85fb2993d4add8":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #2 [#1] +depends_on:0 +2:exp:0:hex:"f4f1e03abb927ffd0b081b9dce83a56a6dd419a6313ac34f":hex:"0e70421499bc4bcb3851afa34cdf5be374722815abdd9bcee5f332dbe890bdc1c0210ab10667e5bb924bf3c1120e25a0c074da620076f143940989e222086d1b34a1200d09aea1f810ef6de7d8520c65eef9539fde5a6422606c588fce6264e5f91f934ede6397c4b307d2d7e07a518fce577a427fa92923cbba637ae495afad":hex:"d1e29bb51a3c4e871d15bb0cd86257e2":hex:"ae2911cdaaad1194c5d7868b6d8f30287105df132eb0cecca14b6e23ec7ac39cc01da1c567a0219cca7b902cc2e825e30f9524a473eb6e1d4d1beff5ab4f29103b2c7522a33dd33182fa955c4f09a75196b1072a6f0340fc55a802d29c7067f05219c21857ebff89ada11f648c1f28dfbfdaab56028f05509de17e2381457ebc":int:64:hex:"44f760787f7bc3c0":char*:"":hex:"2199fa5051461b67581429ab19de2ccb50b8b02e12c0e1d81a8a14929f84e09d9715b7d198e77e632de4af1c08c5041276204a7ed76646385e288e96e1a4b0b0f2b1a9df7f0892beaea3cb58d9632720158f6daa4cbbfc0ebdc56ff6a5175768ff2abd24cb7669bc3fe40f8aba7869d2dd7dac86b6ebc4e4ce261edbec88db17":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #0 [#1] +depends_on:0 +2:exp:0:hex:"33efe20433c6a1ad261a1fed494961749e5bf9d35809b59d":hex:"cfbeb61be50def25f513346498f75984bfe797a8ad56be34f2461e2d673f6ce14e7479a59777267b75dadc6b9522599ebe5d7b079495a58ca187ec47796f6ee8c322278ad7451b038c938928adcff6105a8ea3780aedc45b6a3323d3ae6fbce5da4fb59ca5ec0a16a70494c3c4859672348532505e44f915e0b9b8a296ef5225":hex:"dc94673b0c49c6d3b4611e278212c748":hex:"919f7397a6d03836423b7cac53177fcfbe457d4aa4348646f646aae1bc5a15568cdb8c96fabef278ace248aca531110a4f4f9e8ab0c32525ad816ae3facf03175232dc84addcd6065f9cc1f513966b63fd27e91a09f1921b95d6bd8f08f1dbce073bcf827847f774514b478b9d7fb5426847dd4dee6f39b5768c1fb729b32d03":int:32:hex:"c5098340":char*:"":hex:"c5e47d8c60b04df1974b68a14095d9bc8429a413d21960b15bae4fd7356bf7872e0da0a1a385ca2982d3aa3182e63ea4bb8ca01410cd4e71ddad34aa1f12c1387902b3d56634f89c619a2e6756648ab3bf90e9bc945afc9140eb935b633bae96bb067e9ee421697bcf80b14b1b88dbf13e010b472a7ca5411db36848b9c7a37f":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #1 [#1] +depends_on:0 +2:exp:0:hex:"3ed5dadefa0f6d14fedd1a3cdbab109f6660896a952ac5ab":hex:"aef617f69724e020309ec39d9587520efda68a8e303686c3a41ef700cba05b7c6e43e95aadb1a566f61650c87845835e789eb2366941e3bfef6d9846af0e0dbc43249117ad6f299bbc40669ac383cdf79289ada6ccd8ccfe329a0dc6a38eea1a99550457102d10f641cda50c21f533b1f981663f74a0a7c657c04d9fc6696ff4":hex:"553a14f1e1619f9d7bd07cd823961f25":hex:"eb8ea81d3e328a1113942cd5efd0f2b5e7f088791c8fc05690a34584101c4d493628ee7d0099a2865ac194b9124c3fb924de0c4428d0a1c26ea3ad9a0bc89187a16673e3b6f7e370dfb2dc26e8a56a9cf91f9c2088c020a766efe0d0c91689743a603f2cd1e300a6a84828b3b515a4b9a06e6bb20457bf124cd6ce4ac8b83d51":int:32:hex:"dc413c4c":char*:"":hex:"bc1f34991a48aabb0fea513f790f0d223e9feac4c99fa1e8427f01ab8b4b2827cfaf239342de36051a846af0306a3f82e7aed98dd0416fb078bc7f3b617b00ceb2cea4ddafc22dd022efa8303e9804510e0e888065d8427345156d823f796f74130c06db9f9934435552b4fefd051953e20ecba3a4514ac121d7d2097d597439":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #2 [#1] +depends_on:0 +2:exp:0:hex:"6d97e8bff3923a778504fb917dbc1428a1328587047697d9":hex:"dc1a81efd51e967767f5bdd7e2e425732c1d28451f2bf5bdf3f5a6492279330594d360dd8a193e5dbde1be49bf143a35c38bcd059f762ada65c5119e097f0976891347f4d829b087bd72daa3494b344cbd3370c4459ca243bd57aeda4cb86cdd0bf274f07830cdbf5e5be4eb9b742ddffef8aa35626d2b9ea0a29d3c3d058b28":hex:"0c28dc4cd53725091c2fb68a476c2e40":hex:"f3932f5e82d75a1e3eba1591c17769e1a45819ccf057c31e76fa810b93678766d25905e859775c244e96bcafbc75c4a2d95e7d02868ccb2f65e49276f0b645ac8cf6e3758402304a3c25ce2de0a49f401b1acadaff8b57589b45cc79130ddc8387f41cc383e33ef38eec019152051c756198d6f782ccf56297b9fe944269a65a":int:32:hex:"e6d6df7a":char*:"":hex:"39327836e9d8cfb59397adcf045a85644c52c3563290795811f26350c8bce8f55ca779cbcd15479efd8144b8a39ef611153955c70bf3a7da9d4d944c2407a0d735784fcb68de1083eebf6940ebc9cf92f9f139c01404b503ff64e61126a94e881351473507884357040fd32714b872c254349071069644e2bd642905521b944e":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #0 [#2] +depends_on:0 +2:exp:0:hex:"2c78e29971e90a01bb65973f81260b9344fa835751f5f142":hex:"":hex:"f1a23ce6e2bc9088a62c887abecd30ae":hex:"":int:128:hex:"d4d5c22f993c8c610145fcbe4e021687":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #1 [#2] +depends_on:0 +2:exp:0:hex:"8c582d5b6a40ef0e4048ec20f0263572d7cc82704e380851":hex:"":hex:"ef221a1c66fda17906190b7c99ab60b8":hex:"":int:128:hex:"6327dcb46ffb3d0fd8fbf3d2848a8f01":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #2 [#2] +depends_on:0 +2:exp:0:hex:"3a58abadd29e946e23ca9eb09af059913d5394971bda6a4f":hex:"":hex:"7c29b3196d44df78fa514a1967fcd3a6":hex:"":int:128:hex:"fc123944bbea6c5075a5f987aed9cf99":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #0 [#2] +depends_on:0 +2:exp:0:hex:"04bdde4c35c385783715d8a883640851b860ce0e8436ec19":hex:"":hex:"783f9a3c36b6d0c9fd57c15105316535":hex:"":int:120:hex:"23e21a803cac5237777014686564f2":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #1 [#2] +depends_on:0 +2:exp:0:hex:"4ba5fba0c22fbe10c2d1690c5d99938522de9c5186721bac":hex:"":hex:"2acc2073089a34d4651eee39a262e8ae":hex:"":int:120:hex:"7ac742c859a02a543b50464c66dcf5":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #2 [#2] +depends_on:0 +2:exp:0:hex:"f12890b0a8819faa5a8e0e487f7f064af42fa6d5519d009f":hex:"":hex:"c937615675738f4b3227c799833d1e61":hex:"":int:120:hex:"88300bd65b12dcb341f1f6d8a15584":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #0 [#2] +depends_on:0 +2:exp:0:hex:"51878f3630298a81297f4a21514fea637faa3815d4f26fae":hex:"":hex:"1f939226feab012dabfc2193637d15b1":hex:"":int:112:hex:"eed5fcb7607c038b354746d91c5b":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #1 [#2] +depends_on:0 +2:exp:0:hex:"ae596e74840a600556a06f97b13b89e38f67c152f1a1b930":hex:"":hex:"e2076e1050070d468659885ea77e88d0":hex:"":int:112:hex:"b4586bdbd4b6b899648f2333eee0":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #2 [#2] +depends_on:0 +2:exp:0:hex:"fd33b7a0efae34339ca987b5eb8075385fd1276e63cc8530":hex:"":hex:"2d07bb8616fc0bbb71755a1bd256e7fb":hex:"":int:112:hex:"6b60d645220cfde42d88296ac193":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #0 [#2] +depends_on:0 +2:exp:0:hex:"5685b12a6617d554c36b62af5b8ff2239cb3ffb1d2c40e14":hex:"":hex:"6c31194df99d08881fa5b1dd33b45a92":hex:"":int:104:hex:"69431593c376c9f8052bf10747":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #1 [#2] +depends_on:0 +2:exp:0:hex:"036ae037410dae9f0741608516d03b855c9c1851df8c54a4":hex:"":hex:"73599275f8237f14c4a52b283c07275d":hex:"":int:104:hex:"6f7249d25c9f273434c4720275":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #2 [#2] +depends_on:0 +2:exp:0:hex:"ac144f39ebd6124bad85c9c7fb4f75bff389ece2e8085d83":hex:"":hex:"d0871bfc3693245be478e6a257c79efb":hex:"":int:104:hex:"5a99d59631d0e12f58b7b95ccd":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #0 [#2] +depends_on:0 +2:exp:0:hex:"a8a541ff11a1b8548e832d9e015edeccc94b87dadc156065":hex:"":hex:"c72bb300b624c27cded863eba56e7587":hex:"":int:96:hex:"ea2528e7439be2ed0a0d6b2a":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #1 [#2] +depends_on:0 +2:exp:0:hex:"30dd8f400335e9c688e13cc0b1007bd21736a6d395d152e2":hex:"":hex:"28899601fa95f532b030f11bbeb87011":hex:"":int:96:hex:"35625638589bb7f6ccdb0222":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #2 [#2] +depends_on:0 +2:exp:0:hex:"cb8f672b04d706d7d4125d6830fff5d2ec069569bea050ce":hex:"":hex:"375d4134e8649367f4db9bdb07aa8594":hex:"":int:96:hex:"70610bf329683e15ecf8c79f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #0 [#2] +depends_on:0 +2:exp:0:hex:"bf71e5b1cd6eb363ecd89a4958675a1166c10749e1ff1f44":hex:"":hex:"9f502fb5ac90ff5f5616dd1fa837387d":hex:"":int:64:hex:"a4b5138122e1209d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #1 [#2] +depends_on:0 +2:exp:0:hex:"5b9d1dfb2303b66848e363793bdca0e5ada8599cb2c09e24":hex:"":hex:"2ee96384dd29f8a4c4a6102549a026ab":hex:"":int:64:hex:"3b33a10189338c3b":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #2 [#2] +depends_on:0 +2:exp:0:hex:"a35ae271f70ebacb28173b37b921f5abcad1712a1cf5d5db":hex:"":hex:"8d97f354564d8185b57f7727626850a0":hex:"":int:64:hex:"813d2f98a760130c":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #0 [#2] +depends_on:0 +2:exp:0:hex:"9bdd0cb826d5d28c2ab9777d5a0c1558e7c8227c53ed4c4f":hex:"":hex:"daf13501a47ee73c0197d8b774eec399":hex:"":int:32:hex:"a6d108c0":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #1 [#2] +depends_on:0 +2:exp:0:hex:"81b4d5ee4e1cbee1d8966fb3946409e6e64319a4b83231f5":hex:"":hex:"bc2f9320d6b62eea29ebc9cf7fc9f04a":hex:"":int:32:hex:"a47cdadd":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #2 [#2] +depends_on:0 +2:exp:0:hex:"5813627d26d568dfe5a0f8184cf561fe455eb98b98841fe0":hex:"":hex:"817199254a912880405c9729d75ed391":hex:"":int:32:hex:"d81d9b41":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #0 [#2] +depends_on:0 +2:exp:0:hex:"94f160e2325da2330fbe4e15910d33c2014f01ace58e5b24":hex:"":hex:"80a1b99750980bf2be84a17032fc2721":hex:"066fdd980cf043a732403ee5f65c82ca81e3fc858ad3cfa343014a8426fd3806770f127e2041efb42e31506ce83390ac5d76de2fe1806df24ce6e4bb894972a107ef99e51e4acfb0e325ab053f9824514b5941ab1ec598fbb57a5d18ed34d72992a19215d914e34ad1a22326e493d1ff2da7bc271c96ad3ab66d0c32bd711293":int:128:hex:"dd153cfd7aa946280660c445f586fa28":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #1 [#2] +depends_on:0 +2:exp:0:hex:"4785846f7c0524e78f3eb137fd433e1808af64549af69183":hex:"":hex:"5334476a5fa3fa50dcc4b12f8ac00b51":hex:"e70f82d1e3361ac5a5c9a087e47984d5533ba296f9b7e4a192a4ab28a833cdbbd5cece3415cf6fbb2f8055560b5c31c98d83d139954e1c03a464739f1eb5ad982c4371cf20b8984bbd97d5f40b336f5e96df3d272b95f7547be15c3bc05b3caac7d08c5eb5de8bdd246e74f6caa6bff76ea0417730ce72b911867f88fdcf73a0":int:128:hex:"c59231ddaae98e0e8db6b3fe8f4d3427":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #2 [#2] +depends_on:0 +2:exp:0:hex:"49b085fe1a8e1ae769ed09fc585d29eb24d589689992e6c5":hex:"":hex:"899878b0684fb865d30190821817b88c":hex:"f789eafe3d02826b619ca4fbca7bb1919e5c6f7c33824a2f7f815dc50e329979705f7ef61e9adf7899d34f1b8840384ff62ef6d29eea38c45d12be9249aca69a02222cd744d81958c6816304ff0d81d6714a2023b3dd9d940db5c50afd89c52774d28d6afde2b6c68425b6acbe34682531a2e57e2b9a7729b3e8d96a729b15cc":int:128:hex:"2c84bf7a8947ab93b10ae408243b4993":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #0 [#2] +depends_on:0 +2:exp:0:hex:"75847588760ecb6ca548747b743914c89fea367a5ccb81b6":hex:"":hex:"7d8a9fd254e2061c01e39eb574951924":hex:"b03c57dfd49152401a225357f1d6e533f3a423e5cfce07b8ae7ca9daf68645e5bd67b3ca2421eac447530b27c6dc6bd9c7f1b22441b8cc8c4ac26cec2c9c0d665a35b66d779a3772d714f802d6b6272984808d0740344b6abdb63e626ef4e1ab0469da521c7908b2c95a0fd07437c0e9d4d2451ae189ad61ff19f4efb405127c":int:120:hex:"e8aac14b53cdbc2028d330fc8d92a7":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #1 [#2] +depends_on:0 +2:exp:0:hex:"e3a18a96d2e45d2f60780dc39cee7160e28cb810bf09858c":hex:"":hex:"26a4d659665ded39b7a1583de756d0ad":hex:"83f8d9c58169b4c68032321197077ff5c8ee4ebb732b040748e1b55dcf53375ae86fb9646a672b5c5bc805a92c475cbb6d0ed689a58abdf2230250a7d3fbd8cfab07835fa85e738a7f74bc3e93616d844b1ec61b79f23dfea62e1815f295d43f61d7b5956103b31ca88afb0b3d37eb42cf77232dbf2258065232971c397dcbcb":int:120:hex:"dc034564d4be7de243ff059b5f9160":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #2 [#2] +depends_on:0 +2:exp:0:hex:"7be3909170ea7a2ff76f9f28241d8cc48ddeafa8517c6f8c":hex:"":hex:"8dee7e29350c60c5bcfec89da6617d2e":hex:"f6e9e7a7f9716760eb43060d5c80236a0f118b0f750ebd5df01fd2dba95c556ecd2e54a3f337767321abf569c8137a8e48c5b44037ba62951e9f9f709e6e4540a36d769f3945d01a20a2ed1891c415a16d95cab7ddf9bcebf18842c830067509a2a5d49a9684324c433d53824d2f8fd326b149af17f40e5bf5e49185738fba60":int:120:hex:"942b52277e9dc0a30d737d00f5e597":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #0 [#2] +depends_on:0 +2:exp:0:hex:"1fe413bafc4753e1511b580c830449bee56e0e5b9acb852c":hex:"":hex:"e30829f64f3eda13bfb2ac572aceb3de":hex:"6c772d08b4d7507e35804572fa697c646c77301954cc5c160941e49e230697ed8c23338b9f30c3ead69b1c1a2329ff025dcd3c0d0a9cc83fee4979448aa71ddb9d569bedc8c497a2a4ac3b60d087d7872f0a110bf90493ae7da03b0953734223156cd2d6c562e4a978a6dd5cdb229dd58dd4d0f50ac015f2f5e89dac4aa29a19":int:112:hex:"87737873b82586bb29b406946cae":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #1 [#2] +depends_on:0 +2:exp:0:hex:"b4bc4378d423931f9b320bb57df584c641406c1daa7448ad":hex:"":hex:"eca70e10c0358838a3f4a45c4b016ccd":hex:"68d1c045c1604e3c3dd4f7c7543240aca8dbc5266dc18c5a8071e8b09e3700b7cf819044b2722d8db92021f42a0afb295d7b16ecf4e4704a50a527a2e72d7f53617c358e3b7be3d7fecda612ce6842fcfaa68f2d1b8a59d8b8391779f2fab99f820862c94029f444abe62367c5de0a4becc359660e4a5366f7d482bdc362b866":int:112:hex:"06f95ca69c222a8985887925b15e":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #2 [#2] +depends_on:0 +2:exp:0:hex:"1cd4414ffd24e830e2dc49727efa592e430a6a75391cf111":hex:"":hex:"a08e32ad7d63f975de314ad2c0fa13fc":hex:"20a271f1f4c6bea8f1584ab39a7179ec448650e2ff67a7338d1bc9fab7f73b2ce5222cd07ded947d135d9d0670dc368f0a4b50ece85cbf641877f9fe0ac6a7e6afb32fdb1b3cd35360bb80cfffc34cfb94dbcbee9ca5be98a0ca846394a135860fba57c6f0125dcb9fb8b61be681ada31a997638ee172525c03dd13171534a91":int:112:hex:"c68842cafc50070799f7c8acd62a":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #0 [#2] +depends_on:0 +2:exp:0:hex:"9e0ef9ed5e6f00a721a9893e1f0d9079c5aa667a4cdd2a52":hex:"":hex:"5f015fd556e87ff0d0df586fb452306d":hex:"b82986135e49e03f6f8f3ce4048ded2e63ee0c31ddc84929e022ee8561159179b3bb4403ebdafdf6beae51ac5bf4abed4dbc251433417ece3228b260eca5134e5390cba49a0b6fcbbbabb085378374e4e671d9ba265298e9864bfce256884247c36f9bddceb79b6a3e700cb3dd40088ba7bb6ab6aa11b6be261a7e5348f4a7d1":int:104:hex:"ec9a79a88a164e1a6253d8312e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #1 [#2] +depends_on:0 +2:exp:0:hex:"9bc8f15d98e089d60d4db00808700053f78b33c31652c3e4":hex:"":hex:"5cc0ff9bb7d5b9b2aa06f6ecf669d5bb":hex:"24ac95a6ed2f78853f9ab20f53de47e7f662f72aea454141e2131aace7ed2daeb395bbccdbf004e23ce04ad85909f30151b6526c1ce7934726f99997bbab27055b379e5e43b80ad546e2d1655d1adad4cbe51282643bb4df086deb1b48c1bd3ac3b53c4a406be2687174028ecf7e7976e5c7a11c9a3827813ade32baef9f15ec":int:104:hex:"9779b7c3ece6c23d5813e243ec":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #2 [#2] +depends_on:0 +2:exp:0:hex:"19afc43a4481f796d77561f80b5b2e1514c96c5d1d86e64c":hex:"":hex:"d4c06595fefd4a81bbbd4b40c2e1989d":hex:"98fcca51352998d0126b5539e3fb9a238ac31c05954fc206d381909aee70983b6ab99d3f3efe8530a1c3cfe3b62756321b1d0771a5940055eba1e71fa64f29291aa5e5b0af0fcc8e6f5a02688d9e93417225eded791a35217822ffb346d3fa2809b65abe729448316be30cf661137d3c0e49846cb0df598d90eda545afb64a5e":int:104:hex:"ca82448429106009094c21d70b":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #0 [#2] +depends_on:0 +2:exp:0:hex:"b4fc31dcfef6203fdb296cc928c13b7df56bfe6f32583057":hex:"":hex:"6308a78dc8f3c90442dc52196649c38e":hex:"2567d80c253b080c0158102558551445d8ce4d5ddee2014a2be5cbad62e1717a0fd4d2059447c3151192951eb11a4a7b19a952f6ba261c87f10f4c9032028de3cc5a2a573a4e993a690fc8954daa3ec92743e7343e75b646c4fa9cbc3fceb4f5d59bb439c23754c4d9666fbc16c90c0cac91679b6ad1bfe5dcf6bd1a8a67c6b5":int:96:hex:"9d1603799e2485a03e7b05a0":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #1 [#2] +depends_on:0 +2:exp:0:hex:"1c2d9412486c381440213e1588b6bb58b0da53300b9d3089":hex:"":hex:"727ed8846daab874d5a9918b47d016f4":hex:"656430f0c1423018b5e2efbb1e32a5385c1a9a1779c4dbd585dea91edc39ea8752ebfc2d8064251a8a5ae71e1845f24a7e42c6371c2ecb31e2229d5f4923bffc21d4804575a84836f3cf90ec6047bb360b558a41a975ece111b5284dfa2441705a6df54fc66ca6cc1af9163ecc46902fac337d5f67f563fde8e8e7e64b8588b7":int:96:hex:"05ee6ce13711535864674a5b":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #2 [#2] +depends_on:0 +2:exp:0:hex:"abf7a97569427225a4bd5143c716a22e62f84c145bb51511":hex:"":hex:"e255088cdfe8ae5c9fea86d74d2f1b7d":hex:"b850993300f54d078f83ceb9aef7345bbf758f92365b6625c210f61dad4f2a2319f51d883a383a706392d3dfca1706eba585a6fac8bd4294c0bb2cb3f6b454d5c97819e8e5c926754840261b07ec4ef1f87cf281d75c187839689944230306e1903047915e086043990745864819ad713d34a244aa4e9d755fdb137105d7eed8":int:96:hex:"0c9c17388d0610f99d0a093f":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #0 [#2] +depends_on:0 +2:exp:0:hex:"45a6df655e88bc880acff41520aafd0cc8aa8aeb8952fd06":hex:"":hex:"1125e1de94970c9e7be70e58e7626ef4":hex:"fe9838a445b8edef19b3e9f33c8c0c265b3a12c97b8ec57ceb94f65ae5227177de38f1e338dccb2b24e5bd0f0eb8127f83eba0f1ddfa55198789df0cdd1d977fcb985ad9c7d51b96e749d2cf3cc7a1ec4dfcbc641a1a022d55def328e081af890a7e699f2dbafdf506389e045aa1219239d5868ba675a3925602b6fb6f6e6d37":int:64:hex:"1c3bd1e0d4918e36":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #1 [#2] +depends_on:0 +2:exp:0:hex:"279f4f2ab4b70778fdb9ca7800cd20e323601d7aa2c75366":hex:"":hex:"0f7b402560735cf03d5da58de5b6c685":hex:"7dd9a8c848bbcf5127161c8a419a436a0dad559f7c1613cdf41594e177016acb1ccf44be852185c42e7120902a42efe83855995ab52cf5c190d499fcfd698c671fd72949dc3ea7ddb874e586a3aa455a021cec7b5f8608462ca66f926aba76e60a5846d4eb204155cd3c1328da51ba35c3007b8bb394f34e3a8b81ddd2ea1115":int:64:hex:"dab612351f75e2cb":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #2 [#2] +depends_on:0 +2:exp:0:hex:"6716ab937755684af7403e6fba5452c1b11568a9047bb50f":hex:"":hex:"2fd5a446dd564619ef75b6e00905ffe0":hex:"20d261d3192996c21da69e979c26f5f937e6ea4cb7b05c6ef556ce4d86ca0fe85ec2425d274c43b5212fe9d27bb48b04e887461a9f45f524059b87eaea2e287a8d4537f338b0212012a9d4b6610e8c97dd554e0b3c3133e05c14d0ddab3524c93fd527e223b1996b4cff0a4a7438f1d54890bf573cd803941b69e5fc6212c5d2":int:64:hex:"f1d743b7e1b73af5":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #0 [#2] +depends_on:0 +2:exp:0:hex:"7dc94b5bbd6315ad8d2b67f0c683d10cf456f822a3ebb024":hex:"":hex:"6f3eedeb57dcf12bfb3cd80849893c90":hex:"ee1ff367f4b23c156e3dccff84ae4bf2b8ecec1fb5ffd25ccaa93b6c6834389bd79655bd4bac75238eb0f65d3603ecc57c8774798309e85b6677e78ed2077b712cf28795d0dc8fee994f97373a82338ef67c62378136a79a990ecbcd6367445e805efa98f9168826e57cb8dd7e7b1d5c89ad98358646fa56dd2a71c40e0275a1":int:32:hex:"4dc74971":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #1 [#2] +depends_on:0 +2:exp:0:hex:"3bbe223e253bf272599e28af6861013ecd0c88710947ed41":hex:"":hex:"4fbf09ffaffb600f0de38fb12315cab5":hex:"5388146f6479f7b3b280f45655a95b847ee27c734fb2fd91f6c009b1ab1810c772c7435d3221069f9490d251b76e740147906ac1db1c209c175b21aa10881c44fb307d4d2900aa3b1d56fb0edb9f2a58505653a17fee350e12755b9656bc65c78c1593d5cb7178e29f82209caf53e60fddf725f6957cc9718bf410c4a0229ed4":int:32:hex:"fb845ab7":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #2 [#2] +depends_on:0 +2:exp:0:hex:"461877813acfe6e9979eab729b52e3d192b3236758bb6563":hex:"":hex:"6985cf77b75a47a3978dd6412d59200b":hex:"385551854a89ab37063ba0ed911501b3d632153c5c2992e154c0a334bc36620476f11495437b842409e0954f7352cbf288d158bdbbaf72621ea2ce75b708bc276f796c5aa7fd0071e522c5f175a9e7787deef79f6362101aa3607b4588f2e1df7127f617c6073593a1c792b959e201e4a7a43ea8b1c3af026376439ef629266c":int:32:hex:"c840d994":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #0 [#2] +depends_on:0 +2:exp:0:hex:"09770f9114120a2c1c3cc416fe0eb8699e07141158a5bdff":hex:"875e2e5b5c02e0a33e71b678aa29c15ce18ec259cf4b41874893ed3112daa56ff2a7475681b8b3d9028ef184d30658e881c908f3588f69899962074db4ddfc0597f8debb66c8388a1bccf0ffe2cf9f078dc1c93f8191f920754442ad4a325985c62de1a57a25de4e9ed5c2fd0f2c8af33f3b140bac12bf60fdb33e0ec557955b":hex:"cff291d2364fc06a3a89e867b0e67e56":hex:"":int:128:hex:"81f1eb568d0af29680518df7378ba3e8":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #1 [#2] +depends_on:0 +2:exp:0:hex:"4fbf1c785c087ad06b43d4163cf9b9396deffd3712856379":hex:"96a690e5319c94d94923988025307e543f16fd970aec24524cf9808dc62b093359287251503f4231bf52cd1a16a80bfa82d8f585d96855dc1932f4919a92da2618d6448fc18a234f9acb386ab4ab4a9e38ea341e7c54faceff38c162d74e7fabbca13aadb71e9c8ae6072e7bef4073cf08aa7faaa6d639f98d15bad4ed183ced":hex:"1c8f41424acaf009996ceaa815b24ad4":hex:"":int:128:hex:"9f3c0349c5a4a740a82d6d63bf00fb17":char*:"":hex:"6100b091e52366fb422251d9b68974b6c666a62a8bb77a1ffd7c7d1ae586a6ee763b84dc11aace02a25af91d194b70b3265ec46872fded54275b7ddb26ee1f20c857328f46a694fb1dce68bcaecbd587ece5b505d658d57d50333e30b639eea1f6537b37c175f62497c6c84e3cfddae214285d2d68d90dd5cd8ce2273d25c8ca":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #2 [#2] +depends_on:0 +2:exp:0:hex:"3e0ce4fb4fe4bb2fdf97b23084ff5671b9b899624184acef":hex:"df89974b1534f0ba262bbea5efe39d8b72820cc8a720cc99520fedbf667515c3f6d8c3e25c72c48c1cff042171df58421741aacb2a49f23167257be7d7004d56b14901b2075eaca85946e9fbf1bbf4ae98227efc62bf255a25dd0402d37c67ba553531c699dd89ff797e7a5b5b9a9aa51e73ca2dacfda0f814152aa8ed8c79f9":hex:"a950ab0dd84115e3829ab0ad3bbb1193":hex:"":int:128:hex:"25cfde73e7a29115828dfe1617f8b53e":char*:"":hex:"847b54e176ccc83081cb966efc4b4a3bf7809ce0b4885009f620f61fafcaa78feee91a835ae6c1a942571811108b1e81b4c4ddac46aaff599c14988c9a1fb9f387ab7f1357b581568b7b34e167ac2c8c2b2b8a4df3fd7ad8947a363c1c0cb782ec54b1901e928821cf319669dd77eb37b15c67f13ad787ff74312812731ca3e6":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #0 [#2] +depends_on:0 +2:exp:0:hex:"6be3c66b20e5e66ababbfba1b38e5a716eafce23a1767b69":hex:"de1cd978354a499415176f260021abe0a8c5bc34d166f53d20e02e413e1377ce4ef5d7f58337c62251a3b4ddea0dea23c40e5de037fd5dd8a558eb53bffa4e8ce94899afa8284afab503c1a485999a154d23777f9d8a031b7ad5c6d23d6abbe3b775c77876ad50f6bed14ac0b2b88fb19c438e4b7eb03f7d4d3fcca90dd01260":hex:"3a2acf69bba19f5d1d1947af2cfda781":hex:"":int:120:hex:"f826d212f7c1212fb8a8bf23996826":char*:"":hex:"fd1f7b56e5664cf4c91e58f7c50f6c5e98e42ca2e4adcc00348cee6f662b382ad4022da54a47d8faeb9b76a24dfc4f493c27fc0bc421a4648fad7b14b0df95d8752013feb033b1fd971daa2c9a5df898bece6a3b8fa078dd130071df20a68cd0f394be25dcbb3e85bdfa0df4797fa6f01f5f0da7a6e86320207ddb5b3be53ae0":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #1 [#2] +depends_on:0 +2:exp:0:hex:"d16abb9f5b38d7f5abba9dc36995ce6ce928ed822a07b7c4":hex:"e72f29b1fc1dbfc2d93a0f3b79ea4b9806ce9b2c4d490ac5c0c3c793df9dc7df5471e834b84d18afa5a7516f9a6a813a9b65ae2f083a854730547e28a1f60fe97d8dba1d2d433e11847b9bffd8873ec634e64365530c905dd6f274e45c9795ac127a6f356f63cc6c116c5dd8c628e7e17e1fadc58f8452bf21f53c4133198118":hex:"3cd95429c6de1d327b9eb3c45424a87c":hex:"":int:120:hex:"13521236f190f78e75c0897c5fb237":char*:"":hex:"cd8bb97c28df092b6783ef653fd26f2bdc27c442bab0a4c7bee2789f389dcd1b280c0231672721bfbbc939a0449557678ec61ba0afb2e5817e6f7d94387f84ecafbfa1216d65e7f5025f47b0d2905cff7c99adf8306a3d9850c5908be05f87cb1d36a4837dba428aac97d7fbc18e3778f8d81a319259504c87fc94bd0766ed93":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #2 [#2] +depends_on:0 +2:exp:0:hex:"0bc344b1a4078807e5f53a6e7e1e36fa83108473ae2fb4c2":hex:"8bd73f94c71e3765bc7d17fdc90a9ba6aff9648b46300e4048985fbbd7c60c39c3766f7c524780bfc2296dc11e1132134921760a373104edc376eab6e91e9a60a5c4a5972935df12eadae074722bdc0147c3caf6a62fd449ef37d76b65f6d210283c94ac524cf13186e444d80a70b01e4373cc0462546f1caee6b49e738a742c":hex:"bd505fcba464e6e2c58fdf29f5695fb9":hex:"":int:120:hex:"8510fff71bb879f56ea2fe43f6ff50":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #0 [#2] +depends_on:0 +2:exp:0:hex:"c8097398fc21f93eea6a95aa93a3231096817b65520bc549":hex:"80b0abbaebbd537a0810ed75cd172d29d50f5982e4d01f8664ddb2dfda8f57fa0ed87e64a779a1d7f5e568b6acfdc739572a7176752307b430fb1fa1c3c2c346477cebe7d01b16745ca6c8929a7f446c03ad9a9e8a5a935de78ca6c701e8c1c5e6d2550c42949cf5342fb5ef4c6ab9bb02ace8388b16edf72a1237e5d1d0e820":hex:"776248381941e16908f52d19207881f5":hex:"":int:112:hex:"7fc4388b2f8eab0f0c2d6a08527e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #1 [#2] +depends_on:0 +2:exp:0:hex:"76d4bb5694faaf344db83bc6d6c47d56bb6ab52700826f2d":hex:"9e31fda6a171f0d4a5f2af2c4f827b1312d9dda5d78fa329b8f1b6373b9b29be358601e5bb0d0c615aef4b9e441c811219f1f2ff2d0ab23e0cd829a88b5b615ee72e5e3ea604fa26cc6438ec4c30e90f7348e9116adf8e8efb7498320d2da16679fa546b1aa9afc7720b074c4e48e06862d41428c9e71a4772c2e195a6f36978":hex:"603977845d82faccb401817ecce6e2fe":hex:"":int:112:hex:"c955a3bc316841be07e406d289c8":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #2 [#2] +depends_on:0 +2:exp:0:hex:"a3e5020695587984074d78d9c98b8e1a5719e5f88372740e":hex:"c0bfe3b2dc4dad17ec5a7662d86847fb67e582cc0baf469bc9baa7a075d48a8b97521a1072c2798bfbdae5ca3752eda1cb96fe5cf24af989eb77a2948aae3d8b70d83d93f84c49347f788480f34051621c358c03cf8159a70fc72cb8bc02876234ffe76b181da8b22b8796c87b0904da1af46de519c20d8d1b1dc7cc24e39ba5":hex:"4cd56de54e5140a587be7dfd02d3a39e":hex:"":int:112:hex:"1a29527a41330259f918d99d7509":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #0 [#2] +depends_on:0 +2:exp:0:hex:"afe986ead799727063958e2ce13ca846f76c51605439f839":hex:"7c1b354a5bb214bd95147e32d81e658705089c38035d0ea423eb1a5c82f97443c6903d2cf1ba7a007eec7c8ff98b8f82b073d9636a79bd47c7f2f639a8eb4e92076f9ed615766f43ac3a4f1687301ed7d507766605e0e332880ae740ab72e861a2cb6dce1df1ff8be1873d25845ee7c665e712c5bbe029a1788634bce122836c":hex:"f85a95ed10b69623162ab68d1098de94":hex:"":int:104:hex:"3cf1cdb4a4fdc48da78a8b4e81":char*:"":hex:"a7f252ad7983e7083260598051bffd83f40f4d4a8b580cc2388d720a0979dde71549ddcb86b0a62c4964fca591d0982f3a203f2f8884ff4991f17e20f759ea7125ba2bb4d993722f23938994eb2709c850f33ed9889e5a3966f9d7b76add46aedf230e8f417425f9db79ccd46b5660361de7c5d87f71a9d82c491c0c3daaf56c":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #1 [#2] +depends_on:0 +2:exp:0:hex:"2cfaa215841826a977ae6adfdd993346210c49dd04d5d493":hex:"e8eb3b6edd0ca4201b49a6a83036445aba1a1db040f3e74511363bce769760a9914e05a067f555ca15a57c6e02e66fbe4e04dd8c8db8d6d14ebc01cc7d84a20ff0aacb69bb3679d6b7d9d2e07deda7c2d4fe4c584fe1166e78d21dc56b9cdad93709c03b9145b887f87b4f605f24f989d5e0534fc71a58e8a8619ee99f69e5f5":hex:"537a4ee307af3072e745570aaaadce34":hex:"":int:104:hex:"df01cffbd3978850e07328e6b8":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #2 [#2] +depends_on:0 +2:exp:0:hex:"128ddc83d2170c403a517615056dceec0d19d6fd7632e738":hex:"cfe9f7797ee37bfc4f564419bf2268c964479efa7435970874154432930f3b2736438da4dc9c76200009651340e23044bc9d200a32acfd4df2e1b98b0bae3e9ff9d6e8181d926d2d03f89768edc35b963d341931ac57d2739b270ce254f042b64ceac4b75223b233602c9a4bdc925967b051440c28805d816abe76fc9d593f5a":hex:"5124b410c43d875eca6ce298c45994a7":hex:"":int:104:hex:"56ad9c1653f11a41fd649cccd8":char*:"":hex:"cf91f087fd7faf362caacf4a68cff51ec57b3075563e4ad0955df20b366e92bd75c3762cf4a6f0eb859872667a5c55aa5d94f5ac9479b1b9c9345b50f82379d551506a2ab02b0441b14b28b78a12b38500d703a8c19888fe612d4710eec7cd18c16d6a4b55d3c69760e2bed99efc8b551dbe2ac9b9b64715f87180b8e14d1795":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #0 [#2] +depends_on:0 +2:exp:0:hex:"98581c28983c4da321ce0c419cc0d476d539e77da513c894":hex:"bdef5b65b5111b29e781a6b71a0160179c52b5bccb1ac5c0377b26cf3f61432f3ccd67633a836357c24b5099db0510a7f8110f59e8227cacd11f17ea1798b5d4d68902ca6c6eccd319fef14545edd135078b38d43b61c9af269fc72f7a209ba7897e4c6dbd21bb71d7e93d2d2426ffa1557cae28e74059d3baf06ba419a47b39":hex:"ff10234524433b871202c2cca6acb194":hex:"":int:96:hex:"984943355a7aef15c4fb8033":char*:"":hex:"808e28bfd441cb8890416a757d252c986daa8d607ac9cadd2f4fd29eddbcf3b859ba298e14a4ccefe2c2752b123f87b98d6708fde48faca4bc7dd818a7ea76cfa4357932e59cb6be0e9283bdfb49454b86b9fd04aa8cdef503c65d13fcff42e9cd8f142f8c06cf7daa6d8ef8b9c9d69c39e8afd980048fecf731fd674b2a814b":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #1 [#2] +depends_on:0 +2:exp:0:hex:"167b8b6df8014c8f3de912b77f5a0c113580aa42d785298f":hex:"4f787de12ba907a589edf74c8e7a6cdaaabebddd465a86e170e1efc289240298b516fddc43c7fd9bb1c51720a4455db4dd630b59aebaa82bd578eb3cb19f8b23ee6897c1fefaef820430efa6eb7d6ff04de4d8b079605fb520b0d33e96c28f0cd71983c4ce76c0ea62fd7209d21ec7b416881d545824a73d1f9f8d3323fdb90c":hex:"49da91e926091a448d57d521cc90f3c0":hex:"":int:96:hex:"99198f55f9fa763651bba58e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #2 [#2] +depends_on:0 +2:exp:0:hex:"71f5f8505fba62f08fa0557dd5407fc83a852c6007ccecc8":hex:"3e19ec02365e450e946123a3362f9859352eb52902a6bcb8a782285dfac9d2b282f56302b60d6e9f53fddd16bbf04976cf4eb84ef3b6583e9dc2f805276a7b7340dec7abde4916fb94b0ed9c9af6d4917b27e44d25f3952d0444cd32a4a574e165a23fa8c93229ceb48345171a4f20d610b5be7d9e40dcf7209128f029fed6bf":hex:"b5efb9feae3de41b5ce9aa75583b8d21":hex:"":int:96:hex:"9604d031fa43dcd0853e641c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #0 [#2] +depends_on:0 +2:exp:0:hex:"4cdb38f8185a4186fc983e58a776a6454b92ecf0bffefe98":hex:"1ca72c50a093076e9a9dfa09888b9c89eb36a942072fc536a81713f05a2669b39fdb2871b82ca47dcaf18393ca81dcb499aafcc4ed57ea79f8d4f9bd63540610215b2c65481b294638cec41264a7fdca4230df5fe1e7e3d8d26dcd0c435fec8e9bf778f9e6f13482157a9722761601e08425f6160d3bb626ae39ee1117b0353c":hex:"aef257dd44d14d0bc75f9311ef24e85a":hex:"":int:64:hex:"d951becb0d55f9fb":char*:"":hex:"2eaa7e922dbd8963e2078aae216636276f3f7cb5d7f35fa759e91bddb6e247a93c388241ba1d0d37040c0b9e447c67d35b4991c1acce97914f3bc22ee50171bc5922299983ee70af79303265bc1ae1e7334202460618b4a8891d1a7eaaac5cac1e4dce024ce662d14849993f89e771fb873644b552120fd346250df39aaaa403":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #1 [#2] +depends_on:0 +2:exp:0:hex:"ee8d3aced3aa3cb2166aa66c4a252c12dc0978830d0bc75b":hex:"ee69b2421d43a9f383d99f9802ba4d6cf1c537b42041c86cce681049bb475e5098d4181f1902b0a49c202bf34ef70ea7b787fa685ab8f824fcc27282146d8158925bfef47ccba89aa81c0565eacb087b46b8706c9f886b7edf863701003051d6fb57e45e61d33412591ec818d016eec7dee4254636615a43dacb4f1e6ec35702":hex:"c15c9c0b0b70c7321df044bfde2b15fb":hex:"":int:64:hex:"c5c9851a6bf686d0":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #2 [#2] +depends_on:0 +2:exp:0:hex:"4a8538d609444e3197ab740cd33b66db1cf53600096b94e0":hex:"8c2b8fb775d1b21c41a3dcf48ad6d68ab05be3879f9b94b305a6ce4d799e3a992c1c3a65a3e4eab563edb57424927c90c76e49386e29dd5e7de2800fcc0eefbc8b4f977f71be3754c006ee93dc09b1cfa59c424b6b3987aeb56feefc21004c63e8284b6845e395bc8843cca0917267fb4a8f2db1f7daafe7a9da95083a44de70":hex:"0bd64d222532dae8ab63dc299355bf2a":hex:"":int:64:hex:"3477cad1fd4098b2":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #0 [#2] +depends_on:0 +2:exp:0:hex:"447f0f065771b6129952e52206a64fe0844658ed685e39cd":hex:"fea5d227869e527882c63a68a6623f4a699df82b3dc715c7260a5554336df8376744c05ae89ec27d40da02d9f1c5e9e29405579fd4132143cb21cdbe3edfaaab62128ecc28018725c8dd309d2376223d2e2edfea9765699b2630ff5d9fe9bec416c0ca6418b938d195d31a08e4034c49d79e3a249edd65f985230b33c444dd02":hex:"37e3a300542d9caf3975c6429cb8a2e8":hex:"":int:32:hex:"06bfca29":char*:"":hex:"e1bdd1c212b159b87e41a5f64dcba6b27aa0f5c8871fabfb588df0e06bd7730ec1beb0e3388f96c992a573ff69b34870f83c53fb65b420c1c6f92e2aa6f03917e8203d77c7f5ee08baf9fab12f9d38fc0ffb83807ba781c3dd7b62edca2121f68ef230b42b8adbd4cea072209d02713789ed559b83739a54cfde69e68bdc4128":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #1 [#2] +depends_on:0 +2:exp:0:hex:"f465e95f6fc19fe6968b98319b547104d0c01c17105f8fc0":hex:"2426f108368a00d2a49670a3b64b4f0569c6da9660163e7b209ec3f8d058ee11f7818a8c5030c5f4ce6e1e5a93faa3e5ae3d0bd5d712fbc891cfeb20845707edcf5e29719a5246a3b024fb12d37bd1b81df3812fd50b1dfb3e948ce546dd165cc77f903c07fe32bc7da7fbc25036679017317ce94cd8a00c1bce7379774f1714":hex:"6cba4efc8d4840aa044a92d03d6b4d69":hex:"":int:32:hex:"92750ac9":char*:"":hex:"2e59b104c1a6f6d651000396adbfa009bf4cf8cbf714da8e4d3b4a62bd7f522d614decf090c7552a4b9e8d7ee457ba642d5100c0c81c14cbba8c8ff49b12827f6ebd41504ccb6dfc97cdf8532d1f7f7e603c609efa72d2ae0dce036ec4ab36849a0c06f8737d9710075a1daaed3867ca0a7e22111c0e7afae91f553b6fd66c6e":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #2 [#2] +depends_on:0 +2:exp:0:hex:"f08e3e9f7b3a20ccdc4d98b56f2b567399a28a6b3908deab":hex:"a986e816f1eafb532c716a555cca1839a1b0523410134ea0426ab309520b339fc1fdeb40478ae76823cee4e03b8d3450e6be92d5ff17b2f78400f0176e6d6a3930bd076a7a3c87c3397dcc0520c6b7b4ff9059ea21e71c91912a74aac2ca70eec422b507cc5c60860bb8baca01eec2a3003970ba84011efe576804b2820e306c":hex:"4f4636d1b283bfa72c82809eb4f12519":hex:"":int:32:hex:"16c80a62":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #0 [#2] +depends_on:0 +2:exp:0:hex:"87b5372571fb244648053c99405999130f87a7c178052297":hex:"ae078d1554fc6a14447a28c3dd753e790f7ef9b53e35c3e0fe63a7b1b326bc56034847f8a31c2d6358049aae990bfe7575b439db370aa515e225e0ec730488c700a7b0a96a7b8e4e8e4c6afec20decd16fe3c0f3f8d7a6cf7a8711d170829d14c706cceb00e133b8c65c8e08cd984b884662eddd2258ce629abf6b9dd28688c9":hex:"a1cc81b87bd36affe3af50546e361c9e":hex:"684ce23f59632308d7db14f7f6eddaf4d83271fb0c27401b09518a775b36252540f14305f0dae13ff6c0dc565c9e570759e070c8ac73dfb97abd3285689a7cdcfc941f6271be3b418740b42ba4a114421065a785be3dfa944c86af56da8209779e8736e62529c418b507c6d8ae002cbc0431747722afd64521734f99273de455":int:128:hex:"98177b3428e64bc98631375905c0100f":char*:"":hex:"8be7df33a86b1162464af738de582a357d0ce8e213bba1b7913c0d13ad759d62c3bf4366f5130b3af2b255b7ad530b4977627f9e76b07e360c079d0f763dabbd22e976b98cd5495c6182f95bc963aad4b719446f49d3a448d11cac5bfcba4b675b8e4d88a389e2580e8f383f95bf85c72e698680d2a2bc993c9ee1ce0d1f1ac3":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #1 [#2] +depends_on:0 +2:exp:0:hex:"a2d069b826455d5e79e65db4f1d2b6a29ae9f401bc623917":hex:"acd6225dc5b9109d56ea565ab38dd4db432a7ec08f0db04f1c6b691c96d2eaaa6be62da7cc7fd75f931716c7f39705ea7cf828f1a5a325955e9b2c77e7fb2d562be6a89b3351b1b3d1355b43b73ed425049430314c16bf0836ed580e9390a3b8e2a652fddbfa939ca4c3c99765b09db7f30bf2ef88e1aa030e68958722cb0da3":hex:"6d40a0c7813bc0410ff73f19bb5d89c9":hex:"9960376b1898618d98c327c1761959d045488cc6198238bbe72662f276d47b41e8aebc06dbce63da5adcb302a61ade140c72b9cf9f6dfad6ecedd7401c9509fae349d3c7debe35117776227ba167f2b75921d7321d79f4ebca13d20af1638a1567043365f179f4162795fe4fd80b5d832e4ca70e7bf9830bc272b82182f70d2e":int:128:hex:"010195091d4e1684029e58439039d91e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #2 [#2] +depends_on:0 +2:exp:0:hex:"f3252351fe8e7c628c418c1a49709bf1f8e20add82539948":hex:"7e8d2816d280c91d232bad43b6610e2d0532a9f670f221a3a975fb16472c2e83b168115e87a487bcd14b37f075e1faa59c42515c353cdefc728ac617b7d273fa96778e3fb5f7a1132f8e2add4a57015b15d1984338b7862356243d1c5aa628406f4a507498eda12d2f652c55e8e58113ed828783b82505790654f036b610f89a":hex:"eacd2b1c3cf01bf4ea7582d8ee2675d5":hex:"141cb39a2fb8e735e0c97207f1b618a4b98f6b9bf8c44a1c8e9ea575a7759cc2a02301274553e7744408b2c577b4c8c2a00e18f8717fd8a6d2f46a44eeb05d685fbef7edeb4229e7ea9b8e419ffcb504d33583b3ae421c84caeca9f9789047dd7b1810318d3765307233567bc40e003401c9f4e1b07a2a7162889e1a092aedc1":int:128:hex:"63a310b4f43b421a863fb00fafd7eac4":char*:"":hex:"699c146927ae29025e5b20088b20af27bc75449e4725ee6b7d5dc60b44ba8a06f7d265330c16060fbd6def244630d056c82676be2dc85d891c63d005804085c93ce88f3f57c2d2c0371c31027d0a4a0031e3f473cb373db63d4ff8f65be9ebe74045de813a4e6c688110d000f6b12406881c08085c9348e1f0315038907e33f7":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #0 [#2] +depends_on:0 +2:exp:0:hex:"e462957f2c500bf2d6bfa9af97938fdd8930e360ea4175e7":hex:"82a7a6dd82a5ea3d9a8e9541d854978487eda298b483df02b45c76b8b38bac98ffd969dd160a2765595b19d4ea3e64351ce95764a903f595dd673d13facf5a5594e01be1d60a0c6d28b866a1f93a63a74fecb6d73ac6fb26b20c008b93db53e9dc1d3e3902359fd47734fe22a5c6958f97e9001cc4e8b6484d9542dbbdfcfcdc":hex:"b380584a3f4e0e59add4753c282f2cf7":hex:"682b0af6592eef173e559407e7f56574c069251b92092570cbb7f5a2f05e88bed0af48dcda45b2930b1ee7d5da78dc43ec3598a38593df7c548058eda3c9275c1304489aff95f33a6cd79e724e8d12ca0ae92b20273eb3736efcd50dc49e803ad631dcbf64376a45a687eb4e417aef08a3f5f8230d3f0b266ea732c21ed2eed7":int:120:hex:"28a43253d8b37795433140641e9ffd":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #1 [#2] +depends_on:0 +2:exp:0:hex:"4a62ddd87f41c6df756e8da0985dcd8c91e73ba395b3d79b":hex:"37a83ee6dbdece212446739ea353cb957b9aa409c88bee042bbc3a6e5199aeb28f2b4b00ff433c0c68d6db5a197566019db8a4c7a792e2839a19a302ee02bee046adce04c1fbbd5b0c457d7cbe277992ce2c153d132269e2d1f12b084cf3026a202b4664bc9d11832e9b99c7cc5035dcfde5991dd41aeb4fbf8bec5126a9f524":hex:"1d1843e2118772d76a0244a2c33c60bd":hex:"028b92727b75b14cb8dfeb7a86a7fec50cd5de46aa4a34645754918b8606819d4bf8a2e7531a05ae5505492ca6cbc8c0e6d6ab2dea23bff1fdf581bb780b4a3312aa39639383fd10bcf92489801954733f16b021c2e84809345216f8f28a99773341e40c4a64305a2098eaa39f26a93bd556c97f02090e1a6c181a4e13e17d3a":int:120:hex:"ab738073228bdf1e8fd4430b5c7d79":char*:"":hex:"e702f1bb9a1f395c74fca0ce9cdf29e7332c14acaca45200cd432a5767be38929ef8de43d0e1a5e7300c1eb669ac1ab997b31cb1403af8451e77e63505920af0f8c3abf5a9450ea47371039ba1cf2d65a14fa5f013b7ce1d175859404dcf6461a36e8bc260e7abf739d8951ddf1a3754e2d65e0aa31320a5ffca822023bc0906":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #2 [#2] +depends_on:0 +2:exp:0:hex:"fc46976d38a581a7042a94ea4b5bfe3587ddc65d1162d71e":hex:"4b9e858fc8f01903e426112192d4ae4686b1ae4d683b75afb2b8c63590275943d0d6d6a23b6d35796a2f101203acba107474ca6f4ff6dd87d6b77785ad1d160ef2755d84092dc70c86db5e639b689943b15efa646aff44b3f51f5d3f4cf6c8f7fc5adfe7bf2d72f75b93b8ee94ef3fa69ea0fc0bb77b3983901fdcd30bcd36f5":hex:"b5e92563dd0339df00b7ffa2239d21bc":hex:"7b6f6e104acbcd7188161477d8e425ff99add22df4d22de7f28d0a0075ca4ef848f68d07ed22d3165c08e40890ce04d1bd05b1a6ccb2fec8193d5f7dffc93d97a0c036b3748f708b011b68247a0249b9e1a60b652164e5c2fd7210377de804ac010c8aa08a11f40af97e8370a59f936cd14c22ea7a236d904145adc04a241fc0":int:120:hex:"d4356cb417953b01f7b1110c8aa3eb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #0 [#2] +depends_on:0 +2:exp:0:hex:"403e49feadd4db763652ed5c4b1e12680cfe0abc30f4696d":hex:"221c61d769febce3913bfead9a201a805f11005ddcac185cbae00ce749de9c4362889b1b0d9546e91598e0ddedb88b673a90acca65d7e71a85636be052f361839a646dc8b834c02f3e2261d370e6bac9636b7536225b5ea77881200c8a3450d21bfd1e11afb3a470e178ecfe944a25a7cd0254e04a42b67723aac8afffd56fee":hex:"1a60258a56e15f92814b4d372255a80d":hex:"a4ffa9e3c612103224c86515dad4343cbca7a7daf277f5828670834f4d9af67b9a935c71b2130dfbc929c4409bffb7974ffa87523b58890770439c33342880b33319c626bf776c1c0aeb9c2a348a7681572f4ff711d94c192f3450e8b1275f9d02c742a2c9f1da316e9918bf787f22699172986cb9b10fc56d5f6b8392ff92b8":int:112:hex:"62646fc8bfe38b3ba6d62f9011e3":char*:"":hex:"5c76c90dea7d659804ad873960906259fbdda3614277ec575d9eec730e747a2e7b9df6716b4c38d3451e319eeecee74d1f4918266fc9239de87080f1ad437b47c6904ed2d5514161ad25e3e237655e00e53fe18d452576580e89b2f1f0f6aa7e40a337fd8c48d690fe013a67264a80e9b5dfd009a9152d559aa02a68f401a09b":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #1 [#2] +depends_on:0 +2:exp:0:hex:"c3471259512d1f03ce44c1ddac186e9a56c1434a6ac567c6":hex:"dd5b98b3b3cf03fb92be579068a885afd984630692eb5f155fa6b49f2b1690b803d34b90e8de3cc39c2e61650ffffb51e7ef36d35ad17dc4d91f336363b0734996b162b509c9954cab3dd959bde7e437e9100d84c44104c61e29dbe12492a0272ce6eea2906d390de7808d337e8c650b3301af04a9ed52ab9ea208f3c7439d6c":hex:"50164c63d466148ab371376d5c2b6b72":hex:"11d1f523888bea1fbc680d34bc9b66957d651efa59e788db3d3f6f50e72184b9d14e9ff9bc05fb687520cf423d681812e007025eedf0e78e7e8191e6b62404e8eb400cf837d762a31aa248553367263d6de091fcf7abedc3e69fc118b7efb0594c89b96c387b7c28ed9a7b75db60b6b5133949b891ff81eca5790a265f12a58c":int:112:hex:"6c5f38232e8a43871ab72a3419ad":char*:"":hex:"50438ee712720abf2089331e4c058b30c30c3d17834c507c0010ac3f974a256d01b14a45e9ce5193c5cede41330cf31e1a07a1f5e3ceca515cc971bfda0fbe0b823450efc30563e8ed941b0350f146ec75cd31a2c7e1e469c2dd860c0fd5b286219018d4fbacda164a40d2980aa3a27aa95f8b8e2cd8e2f5f20d79a22c3ff028":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #2 [#2] +depends_on:0 +2:exp:0:hex:"ec326a1e0fe6a99421398df4fc7d8fea67b67e5f5fcd50ad":hex:"6d5016c434a0f4b4a5d9e0b6b8e2d848a94f132f055d2d847e54601a4c9cfc5966a654d696f8a3529a48a90b491ea0d31c08eae8ef364f71f8ec7ae7f7e39bb9c331137b2578362ff165628099944ba8deb0d99ac660d5ed2215b9a7626ff1fa6173cd8dd676c988d16c9cf750a0d793f584c3c8f5fd5d167bc278f4d77a629c":hex:"c94aa4baa840a044dbd5942787a0c951":hex:"f8401c578f20d9c250ea86eb945184e007a0190462c7abddf238ce1ceddcc230756aa222386d8ba66ebbba13de008ced140896ac55bc47c231cc81370ca9feadc225e017d59890e6291cc4cca27db3078c0cd6cbb51afb62210226a76837c5454728cb5ce3afe7352e7fe75421f94986e6b7b26321bbca15c75ac7c13dc15f50":int:112:hex:"3269922affb9d767f5abe041cc8e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #0 [#2] +depends_on:0 +2:exp:0:hex:"a7ef81652f604e88a72416924c53979dc73cadd3575eda1c":hex:"9ecd19a8eba9fba843486e1bbfb8d9053c5e04b24e30174d4aa89d8307439d653f8630edddafd51719c744bcb4bce3e444847567bd2cdde2995870d0634cc0ba2bde4b6bc2bc583062fb83874a1c25b50aeb945bd109a151772c077438c4d1caaeb5b0c56390ac23c6d117f3a00fd616306fc2ffc4c1e76f934b30fbbc52eec2":hex:"0cc9ae54c9a85f3e9325c5f3658ab3b2":hex:"d0195b744351aa25a57a99df9573dfa3cebe9850139149b64f7e4af37756a430dda8af98e4ed480e913aa82821c01c1f75b187e105a8f39621757d522c083a8d81d7d8bfe6cf15c439d0692b6affd655a11bcd2457046fae996a1075c66029867b88cd23c503ae04037dd41f27bafd5000d1f516002f9fcc0f2500e8c1b27de0":int:104:hex:"22c2efeddfd5d9cb528861c4eb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #1 [#2] +depends_on:0 +2:exp:0:hex:"605271a41e263c92dc14fe9df5203e79d58cc2d1289dc361":hex:"2bda3448a283ecba31e0299c0a9e44628cb2b41fa7b1a41107e107cabc381083bdbe048f2804568fdd5fe016f4d607f694042a459ba03a2deda4cccc8cbe4612d8ed0d4575e48bc9f59843369dbe2af6d048e65ff4250e1eef61d7b1b378fe2f3305b133ddc7e37d95ca6de89a971730fc80da943a767ff137707a8d8a24329c":hex:"7f128092a777fc503adc7f6b85eb2006":hex:"aef9f984fb645e08d5f0aa07a31c114d2f8e9eca047e4a8d5471378cfc2ced1159dc093d174788e58447a854be58942ed9a3fd45f3f4a1af7351e087369a267797c525f134e79709097e733b9003b9be0c569fc70ee3462b815b6410e19954ce2efac121300c06fd9e00542a9c6a5a682fe1010c145acbbb8b82333bdb5ddfd9":int:104:hex:"673afea592b2ce16bd058469f1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #2 [#2] +depends_on:0 +2:exp:0:hex:"fa076f36cb678e2275561e9553ebdf397360e5a5e44791c4":hex:"513305e86c0cb046c5d3720b25a406392766bd1fb7de2758de370ff2e68281e211922890c61f3659460f22c45a57895b424441262a3ba0606df4e2701f38281fd3436a4d0e0f8efecd231808a9ea063dfb725015a91f27cadfe7909a0ee109eac391ac807afed1767ae0515b9c1b51ae9a48b38fe7fec7fe0ddee562c945e5ae":hex:"1ecd53d94fe287047ff184e8b9b71a26":hex:"5ff25f7bac5f76f533f9edffdfd2b2991d7fc4cd5a0452a1031da6094cd498297fb2a05ae8db71cb3451e4ac33a01172619035a9621d2d54f812ef5343e14b9dedc93838e4cf30e223d215b4d2476ea961a17ac7295069f25b2a12d6e2efe76d91f45632c6d4e61ff19a95d5ae36af960d95050ce98b5791df0b7e322411c884":int:104:hex:"079e8db9c3e6eddb0335b1cf64":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #0 [#2] +depends_on:0 +2:exp:0:hex:"ce9dafa0e7e53a8766fc0bc38fba807d04e14e5ed61bc234":hex:"b585b8bf634757dac015f2f69f2ae674372a664f2115ad2d03bd3e0c335306b02d0947d3cda5991f5c0c25f12ead2c3cc2d65d575fd67091c70bc93ddb4b1e21f7b0fc6e6ae652dea93a6564ff13489f927942e64dd94bf8f821c7ffdef16df58bd8306a957821ac256da6f19c9d96e48eee87f88acb83bae05d693b70b9337b":hex:"fd0751af49814ee98b2b0cdf730adaa6":hex:"1cba488a0fc8a012f9a336cc7b01cbcc504178eeb08237dbedbc6c7ac68fdf3a6742751a207e43d43068abf6ef4e12a5e3c17e5a2f9398fc04ced67377cbb858fd6020fad675a880adb249e4aba94b96efa515d1cdf5c0c3071a27a3245968867ea94b2bfc2028a67be34c84c3f475944497aa8ca1ab009f8e4b11c8308c1996":int:96:hex:"e5dc92f4ad4000e9b62fb637":char*:"":hex:"95f4324b0656bef19eca5570548fc6a7a9923f4e2a7e42066891bc132fd73bc1c9089755d996756de0072824e69c43f2db8ba2bf6f90d3c4eafc0721ceaccce1af896f9fb15fb19c4746979b6d945f593fad61d550f81d12b5945ed728c02931d7f8d917285c22a3af748d75a6bf163fddd84b941d8564c1a63192c816ad6d6d":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #1 [#2] +depends_on:0 +2:exp:0:hex:"8a328554fed68dc4838fbc89fd162c99ec105b36651abbc9":hex:"75986f56972c045c850ed68aeb229f203b228fdfc36cad6b16d9bd12037c48700d20d8062a983ffeca76b8d36a67ef51bc8853706e83a34e4e23ff4f4a4eb943f19dbe85e454043d7906be6587a85079f9ccd27962d2905117d2dbeaf725d6ffe87bef52b2138da153ef29b18065b3342b3f9d07837d57b8bc5f2597de06c54f":hex:"e4f7c69a1d026eeebfc45e77bd7b3538":hex:"e349dcedb0bfcc771c820f0d510b80cef32ae3326484e25aa183015941e7844bc46f617d5e61fd64fa71759e90fcb72ae220bcd507f0fb389b689dd3fa29b3b937eded85f26ada9e0f3f5109f82fef47c7eba7313049750ad17969e7550c0d4093ed18ee27843d082bcee8bf3fc7833d569b7723998595a5a1d871089fd238da":int:96:hex:"8e8320912fff628f47e92430":char*:"":hex:"a1ed65cfc7e1aeccd0531bce1dc749c7aa84451ec0f29856f12f22c4105888c7d62e2e2fc8ad7a62748610b16e57490f061ad063c88800037d7244ee59e109d445205280473390336d7b6089f3a78218447b1b2398c4d0b3aac8b57a35891ad60dc1b69ad75e2e86248ceac7bb4cf3caade4a896e5ee8c76893ef990f6f65266":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #2 [#2] +depends_on:0 +2:exp:0:hex:"6e7f6feb4022312de5c804ed1d7a37580d74499107f8cc8b":hex:"4f5bbdf575ab8f778549f749f2265e17dc7225713e73ee6d7be163ff7071557dcc2240b0705c079008605f81396414ac64f06b1b637876e04c3fca8d0fa576cef4dd3dc553fd6808eaf120f837f9bb1d9dbbd5cf67ed497167fc7db89d3a84151b81aeab0e921057f121583df5ed7f976b206ece17a913f23485385f64c462a8":hex:"6ce13485ffbc80567b02dd542344d7ef":hex:"c6804a2bd8c34de14fe485c8b7caa2564adaf9fcbb754bd2cc1d88ba9183f13d110c762a3c5d2afc0fbc80aedcb91e45efe43d9320075420ee85ab22505f20e77fa4624b0387346c1bd944e9cd54055b5135c7fc92e85390ecf45a7091136b47e3d68d9076594cfad36c36047538e652178c375a2fe59a246a79784577860189":int:96:hex:"974bd0c4a8cac1563a0e0ce0":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #0 [#2] +depends_on:0 +2:exp:0:hex:"46d6e982feff0e7d04a84384c56739b69626dde500e4b7fb":hex:"a5160fb2d397b55a7eba02df33a042404188f02f4492d46f4edc03fc67723d64f5f7fed3a60728438703c60454a30f473ac918ffc8f98be5c5e9779ee984415e415ce3c71f9acc3f808d215be58535d3144cebe7982b9b527edbe41446161094d6fc74dec2e0a1c644bbc2cf5779a22bd4117a7edb11d13e35e95feeb418d3f0":hex:"71a6d1e022a6bdff6460c674fb0cf048":hex:"67a8455c7d3fbfdba3c5ec5f40e0be935fbb9417e805771832ffad06ba38a61b8377997af1f586dc0fa1e3da0b39facd520db1f0ec2bdf1904a3a897f0b507c901fab30a85de51effa9f7d4703ceeb2ca72abe0bd146ba0bd3ffdee11628310db7d65ea1343b018084ea2414995f86fefb45ba91a9dc2236d92078b4305671b5":int:64:hex:"84f1efd34ff84e83":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #1 [#2] +depends_on:0 +2:exp:0:hex:"991dcaa2e8fdad2b4e6e462a3c06c96067ef5e9fb133496a":hex:"9cd0c27f0c2011c1ab947400d28516c7f46d22a409a18fd35c1babf693b8030dfd7822d9ba03bb8fd56a00f9c7149c056640dde690889d2f23978eeeb28ccc26e2fc251220a3682c963f5580c654c1a6736cccb1b8ed104ec7390021d244bd9f92abde89e39a4b83eff8211c8a6259bd6ac2af1da7dfb8cf1355238056c60381":hex:"978913d2c822ba7cc758041d5ee46759":hex:"5a94dc81af011a8af263318b60215b9752292b194b89f6fc013b0fe8e29133de631d981862f2c131ee34905bd93caffc3b8f91aeb0264b27a509e5c6a41ae781209f8c5895d0d35b3c5e1ae34a1a92a2b979e0e62132051394940ea4d9bfffb8d89ba1e8331b15bdf05c41db83a57745a4a651a757cc8648acdcf850a2f25367":int:64:hex:"15d456da7645abf2":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #2 [#2] +depends_on:0 +2:exp:0:hex:"f29cff00781f5916930f125489c87d21f6593324d1506f65":hex:"a3e8595747b7147d471ac4fe38014bf4a409931e3f419ff88ae249ba7a7f51bd0ede371bf153bab4b28020b7a82a8ca30b75f1e3bcfee3c13db813cbc85138ef05874dedb14a6e5b6d06d7589a83bd5e052dc64433a8e24c1188b9470ddb2536d13b4b7bff0c5afcfaa9aa0157c3aae3b1774df2df14f965d6dee4332edba67e":hex:"50db7ee25a9f815c784236f908bfd7f2":hex:"ec1482e18692bcd6894a364c4a6abb9c3b9818bb17e5e1fc9ec0b41702c423f3a60907e94c888fad8e78f51e1f724b39969ba7b11d31b503504b304d5c4b4cbd42634f4ec5080a9fe51c82e121ae191270dd2c307af84c82d892d982413a50ccce33698054f761a3fa93da9a1fca321296b378a50d458ba78e57a70da4676150":int:64:hex:"a1e19ef2f0d4b9f1":char*:"":hex:"eea18261a4de31d8619e77005ebbb3998c5dcfac2bc120ae465e29d6b4c46de7e6c044c8b148ffe4eda7629c243df8af4e7ceb512d5751a3ee58defb0690b6f26b51086dedfde38748f6f0bbe6b495f4304373188e5d2dc93461bd51bf720149a7d3aa543623b122b9af0123b2cdc9020136b041a49498ec4aa696c2d3c46d06":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #0 [#2] +depends_on:0 +2:exp:0:hex:"2087e14092dad6df8996715cb1cfca90094f030328080ffd":hex:"6d039513061980fb195bdf2f7c7079ca4b7e0fdd50d948cbfab5ba10b99e3aea27f08abd000c428851de82cacb0d64c146cd9567e9d55b89819876d6a635bd68bcaf47ffa41e02d9ee97f5a2363bfe6131ae7a21ea5130ae953a64d57d6cbfd45260c5f1946388d445ce97d23ab7ba31a5069a4896bc940a71de32bde02bc18d":hex:"d30504afb6f8b6ac444b4a76115d79d1":hex:"d95845d268c8d8f9135d310c39e30f55f83ef7ffee69e6ba1f80d08e92ed473b5ac12cc8f7a872bfc8b325e6b8e374609c90beaf52d975f71caeef5ee4c13de08dce80d358ee1cd091faea209a24e3392adcfe01aeb2b2e1738bc75d4a9b7cd31df7f878141cf278d150f6faa83fb3a2fd1225542a39c900606c602f15c06a4f":int:32:hex:"5412f25c":char*:"":hex:"1e81a4c10a3440d0002ddc1bfa42ebb08e504fcc8f0497915c51b6f5f75fee3f0cd3e9c5a81ff6528e0fecd68a36192114f17fa1a4cfe21918dac46e3ba1383c2678c7a6889a980024ee2a21bcf737f7723b5735e1ebe78996f7c7eace2802ebb8284216867d73b53a370a57d5b587d070a96db34b5b4f5afe7f39830498c112":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #1 [#2] +depends_on:0 +2:exp:0:hex:"3fc76d627c775de2f789279dc7b67979a9f1cc23c8dcabc9":hex:"92a60d38fc687b92d44635aafee416a142d11a025680e5aa42e9ba5aa010462991ad3dd7328ca4a693673410f9bba37f05a551b949ab0d43fc61ef3b8996dd3fc1b325e66eec6cc61ea667500f82a83e699756a139d14be6ca9747ed38cd9b1d9da032ece311331bdcd698666ddc970b8be2b746ec55fe60e65d7ae47c6f853c":hex:"8f6fd53eb97e12dcd4d40f2843e25365":hex:"e56995df73e52606a11de9df6c7bfb0ef93b86bf6766e319aea59372060294b0e1b13c6288c2310a4bef725a2dddb174f3e1228649861757903c4497a0eec9c141454fc75f101439a2150e368857c4f0f6e5161c42c77f632bf1c229a52595cbf16e9018de9a8f6a1e6b8b18bd244f93f001eb2eb315405d223c0d27ece9d4d9":int:32:hex:"613ba486":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #2 [#2] +depends_on:0 +2:exp:0:hex:"b10979797fb8f418a126120d45106e1779b4538751a19bf6":hex:"e3dc64e3c02731fe6e6ec0e899183018da347bf8bd476aa7746d7a7729d83a95f64bb732ba987468d0cede154e28169f7bafa36559200795037ee38279e0e4ca40f9cfa85aa0c8035df9649345c8fdffd1c31528b485dfe443c1923180cc8fae5196d16f822be4ad07e3f1234e1d218e7c8fb37a0e4480dc6717c9c09ff5c45f":hex:"ca362e615024a1fe11286668646cc1de":hex:"237d95d86a5ad46035870f576a1757eded636c7234d5ed0f8039f6f59f1333cc31cb893170d1baa98bd4e79576de920120ead0fdecfb343edbc2fcc556540a91607388a05d43bdb8b55f1327552feed3b620614dfcccb2b342083896cbc81dc9670b761add998913ca813163708a45974e6d7b56dfd0511a72eb879f239d6a6d":int:32:hex:"28d730ea":char*:"":hex:"dafde27aa8b3076bfa16ab1d89207d339c4997f8a756cc3eb62c0b023976de808ab640ba4467f2b2ea83d238861229c73387594cd43770386512ea595a70888b4c38863472279e06b923e7cf32438199b3e054ac4bc21baa8df39ddaa207ebb17fa4cad6e83ea58c3a92ec74e6e01b0a8979af145dd31d5df29750bb91b42d45":int:0 + +AES-GCM Bad IV (AES-192,128,0,0,32) #0 +depends_on:0 +0:exp:0:exp:1:hex:"b10979797fb8f418a126120d45106e1779b4538751a19bf6":hex:"":hex:"":hex:"":int:32:exp:2 + +AES-GCM Selftest +depends_on:0 +5 + diff --git a/third_party/mbedtls/test/test_suite_gcm.aes192_en.c b/third_party/mbedtls/test/test_suite_gcm.aes192_en.c new file mode 100644 index 000000000..aa6ebe73a --- /dev/null +++ b/third_party/mbedtls/test/test_suite_gcm.aes192_en.c @@ -0,0 +1,642 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_gcm.aes192_en.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_gcm.function + * Test suite data : suites/test_suite_gcm.aes192_en.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +void test_gcm_bad_parameters( int cipher_id, int direction, + data_t *key_str, data_t *src_str, + data_t *iv_str, data_t *add_str, + int tag_len_bits, int gcm_result ) +{ + unsigned char output[128]; + unsigned char tag_output[16]; + mbedtls_gcm_context ctx; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + memset( tag_output, 0x00, sizeof( tag_output ) ); + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_gcm_crypt_and_tag( &ctx, direction, src_str->len, iv_str->x, iv_str->len, + add_str->x, add_str->len, src_str->x, output, tag_len, tag_output ) == gcm_result ); + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_bad_parameters_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_gcm_bad_parameters( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +void test_gcm_encrypt_and_tag( int cipher_id, data_t * key_str, + data_t * src_str, data_t * iv_str, + data_t * add_str, data_t * dst, + int tag_len_bits, data_t * tag, + int init_result ) +{ + unsigned char output[128]; + unsigned char tag_output[16]; + mbedtls_gcm_context ctx; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset(output, 0x00, 128); + memset(tag_output, 0x00, 16); + + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == init_result ); + if( init_result == 0 ) + { + TEST_ASSERT( mbedtls_gcm_crypt_and_tag( &ctx, MBEDTLS_GCM_ENCRYPT, src_str->len, iv_str->x, iv_str->len, add_str->x, add_str->len, src_str->x, output, tag_len, tag_output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + TEST_ASSERT( mbedtls_test_hexcmp( tag_output, tag->x, + tag_len, tag->len ) == 0 ); + } + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_encrypt_and_tag_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_gcm_encrypt_and_tag( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, *( (int *) params[11] ), &data12, *( (int *) params[14] ) ); +} +void test_gcm_decrypt_and_verify( int cipher_id, data_t * key_str, + data_t * src_str, data_t * iv_str, + data_t * add_str, int tag_len_bits, + data_t * tag_str, char * result, + data_t * pt_result, int init_result ) +{ + unsigned char output[128]; + mbedtls_gcm_context ctx; + int ret; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset(output, 0x00, 128); + + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == init_result ); + if( init_result == 0 ) + { + ret = mbedtls_gcm_auth_decrypt( &ctx, src_str->len, iv_str->x, iv_str->len, add_str->x, add_str->len, tag_str->x, tag_len, src_str->x, output ); + + if( strcmp( "FAIL", result ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_GCM_AUTH_FAILED ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, pt_result->x, + src_str->len, + pt_result->len ) == 0 ); + } + } + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_decrypt_and_verify_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data13 = {(uint8_t *) params[13], *( (uint32_t *) params[14] )}; + + test_gcm_decrypt_and_verify( *( (int *) params[0] ), &data1, &data3, &data5, &data7, *( (int *) params[9] ), &data10, (char *) params[12], &data13, *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_gcm_invalid_param( ) +{ + mbedtls_gcm_context ctx; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + mbedtls_cipher_id_t valid_cipher = MBEDTLS_CIPHER_ID_AES; + int valid_mode = MBEDTLS_GCM_ENCRYPT; + int valid_len = sizeof(valid_buffer); + int valid_bitlen = 128, invalid_bitlen = 1; + + mbedtls_gcm_init( &ctx ); + + /* mbedtls_gcm_init() */ + TEST_INVALID_PARAM( mbedtls_gcm_init( NULL ) ); + + /* mbedtls_gcm_setkey */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( NULL, valid_cipher, valid_buffer, valid_bitlen ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( &ctx, valid_cipher, NULL, valid_bitlen ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( &ctx, valid_cipher, valid_buffer, invalid_bitlen ) ); + + /* mbedtls_gcm_crypt_and_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( NULL, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, NULL ) ); + + /* mbedtls_gcm_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL) ); + + /* mbedtls_gcm_starts() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( NULL, valid_mode, + valid_buffer, valid_len, + valid_buffer, valid_len ) ); + + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( &ctx, valid_mode, + NULL, valid_len, + valid_buffer, valid_len ) ); + + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( &ctx, valid_mode, + valid_buffer, valid_len, + NULL, valid_len ) ); + + /* mbedtls_gcm_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( NULL, valid_len, + valid_buffer, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( &ctx, valid_len, + NULL, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( &ctx, valid_len, + valid_buffer, NULL ) ); + + /* mbedtls_gcm_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_finish( NULL, valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_finish( &ctx, NULL, valid_len ) ); + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_gcm_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_gcm_valid_param( ) +{ + TEST_VALID_PARAM( mbedtls_gcm_free( NULL ) ); +exit: + return; +} + +void test_gcm_valid_param_wrapper( void ** params ) +{ + (void)params; + + test_gcm_valid_param( ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_gcm_selftest( ) +{ + TEST_ASSERT( mbedtls_gcm_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_gcm_selftest_wrapper( void ** params ) +{ + (void)params; + + test_gcm_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_GCM_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_GCM_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_ID_AES; + } + break; + case 1: + { + *out_value = MBEDTLS_GCM_ENCRYPT; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_GCM_BAD_INPUT; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_GCM_C) + + case 0: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_bad_parameters_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_encrypt_and_tag_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_decrypt_and_verify_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_gcm_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_valid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_SELF_TEST) + test_gcm_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_gcm.aes192_en.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_gcm.aes192_en.datax b/third_party/mbedtls/test/test_suite_gcm.aes192_en.datax new file mode 100644 index 000000000..856c57f83 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_gcm.aes192_en.datax @@ -0,0 +1,680 @@ +AES-GCM NIST Validation (AES-192,128,0,0,128) #0 [#1] +depends_on:0 +1:exp:0:hex:"f8022b8988383d5cfd7d9e0e208146e7868d3d714fe85744":hex:"":hex:"5fccd8cb551cfc9c20998da4cb981d49":hex:"":hex:"":int:128:hex:"1b5c6c9a28f5edfa4cf99176b0f14077":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #1 [#1] +depends_on:0 +1:exp:0:hex:"a7d4456b8e16b82283b677bd8c4b1f56dc7f153b5cfa746f":hex:"":hex:"081de4a3f71f5d6fdf7801ff6c667f7d":hex:"":hex:"":int:128:hex:"90c2729c5ba04f8f5c73726c910640aa":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #2 [#1] +depends_on:0 +1:exp:0:hex:"5779b60b536b096c9348cd8dafb3451280791e319b7198c2":hex:"":hex:"62f8e195bc79957ca8ce99a88ded1a02":hex:"":hex:"":int:128:hex:"699d71bb63c668b533c357662f861513":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #0 [#1] +depends_on:0 +1:exp:0:hex:"966cfb078f695c8ad84ede2fb96fb89488fa271dd3b50346":hex:"":hex:"4a7b709d45745d94c5433b01fc9d57fb":hex:"":hex:"":int:120:hex:"4a9bd213420629a5f6e471650060e0":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #1 [#1] +depends_on:0 +1:exp:0:hex:"cc69ed684af2c2bd2b3e2d2f9faf98acf8071a686c31e8e3":hex:"":hex:"0bd4197e5ab294ab7ab1e6ec75db2ac0":hex:"":hex:"":int:120:hex:"6632b618b4cab963dd671fd53d2075":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #2 [#1] +depends_on:0 +1:exp:0:hex:"99deafc5ec6155043b53a86d466c2b652d59b7274bb844ef":hex:"":hex:"09d18e85e5ed38f51e04a724faf33a0e":hex:"":hex:"":int:120:hex:"90bfade2f07f38b2192e24689b61cb":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #0 [#1] +depends_on:0 +1:exp:0:hex:"5c0c706a1fd48005e0fd0ed91b4d9f0028c500dccb28ca73":hex:"":hex:"595716e15498454577d3581e94f5c77e":hex:"":hex:"":int:112:hex:"8b10eacb1f127f4c58cbb8c3516c":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #1 [#1] +depends_on:0 +1:exp:0:hex:"ae8e125507ea16d5282fe8bac42d3cb4908b717f345e6a38":hex:"":hex:"0a7f64edb8cd8052fcd5b92e20c0bc2d":hex:"":hex:"":int:112:hex:"467a2c0ba1d24c414f758200b8a4":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #2 [#1] +depends_on:0 +1:exp:0:hex:"02176a5a5d8cb8f5ccee3f66a22181765ce730751c135198":hex:"":hex:"c19ed1f52f5ebbcf89ab1907b9ebc7f7":hex:"":hex:"":int:112:hex:"6525beb5856d6f29105777e31457":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #0 [#1] +depends_on:0 +1:exp:0:hex:"4434d6bce3a33551733d7afe8cd477a79be8eeac19bc0a05":hex:"":hex:"b0eafdf326886eaacb750dcf2c104abe":hex:"":hex:"":int:104:hex:"ab9f7923a3b9228cb9ecd7f907":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #1 [#1] +depends_on:0 +1:exp:0:hex:"39994c2520a6196cc3f3e8c6e4833286ce37399e0379563b":hex:"":hex:"dbf9c40266d95191d70739e932cd8572":hex:"":hex:"":int:104:hex:"b29acaf5addd6b379315535375":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #2 [#1] +depends_on:0 +1:exp:0:hex:"1f27d054114a264b37ee1821a077773750cc79d28594f506":hex:"":hex:"6739d43092620f44b57e65035ce14565":hex:"":hex:"":int:104:hex:"25e0434a3660704eee4bb82962":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #0 [#1] +depends_on:0 +1:exp:0:hex:"0e97d15f4992a6354e43944fd346da65ac1f0f1229189442":hex:"":hex:"32a64e826b500d7e85f4c42a784f7c19":hex:"":hex:"":int:96:hex:"da8f3e0a6f156ec260aa34fd":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #1 [#1] +depends_on:0 +1:exp:0:hex:"27504fc47a9e9a85eaded3782cb5b088359ea1c0abbf2730":hex:"":hex:"c55c8dc3d6d2970c81659f2f87bf849d":hex:"":hex:"":int:96:hex:"113e637538de291e2463abcf":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #2 [#1] +depends_on:0 +1:exp:0:hex:"d5fc67f73de736768e5c64c37459c5eec3d27f7e337c346c":hex:"":hex:"2691432d3935d4ea8cb8f7c17bef3558":hex:"":hex:"":int:96:hex:"c0af76d6f62430106ca54928":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #0 [#1] +depends_on:0 +1:exp:0:hex:"f28292ee2c54119511a67db0d2317433abaeccabfdd5d1f1":hex:"":hex:"cf9331a1bb3851b2fc3aeed2d1a33eb8":hex:"":hex:"":int:64:hex:"8e14b869a95eb12e":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #1 [#1] +depends_on:0 +1:exp:0:hex:"2042f9244079736291ba7fe1f030cba99672a97ce361dc14":hex:"":hex:"aadfa619bafb21b5c738b65d632bb8b2":hex:"":hex:"":int:64:hex:"ad6f52f25aea1c55":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #2 [#1] +depends_on:0 +1:exp:0:hex:"d9b4eb00ac03fabb5304ac38414f7782cb0186436a4b9036":hex:"":hex:"809939260117b759d8dac1a69c27c12a":hex:"":hex:"":int:64:hex:"1f7d0b3104aae50b":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #0 [#1] +depends_on:0 +1:exp:0:hex:"b5128f4cf91d53b3a50e9b76b0b27da33cbd4b9349d89413":hex:"":hex:"644909f5fbcd61d850e43fbef1fb454f":hex:"":hex:"":int:32:hex:"2ddbf709":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #1 [#1] +depends_on:0 +1:exp:0:hex:"3ac7ab2ade7a8e397d66be6dc7671f19cd39ad65490f1712":hex:"":hex:"d152359d765f41dd9cabf5c8f37cfd8a":hex:"":hex:"":int:32:hex:"a6e4e30d":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #2 [#1] +depends_on:0 +1:exp:0:hex:"f9c2de7e3c74b7e318413a32892d4fd070de9882158bbc82":hex:"":hex:"63410c83fa363a63fa78303b9994b6c6":hex:"":hex:"":int:32:hex:"49c514ac":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #0 [#1] +depends_on:0 +1:exp:0:hex:"66ebdc2332276784a69b6bb137161210bac9f1d6a36d6a4c":hex:"":hex:"647f41b60c6a579086ba8854d043495c":hex:"da26eebd04c27bbe7fa7b54b87d3b7227f056dd9c085fabfcb59ec665a257c6de68fd2c1c51aad5e6188e02a56f70aac49ba489802247ca327de57ea3cfa87e72cae7dd82b50341a2133b03cd0027216fcd94cf43ec8a48e1c04145b597924b37f7977db3ff23b8edc913357037d0fe02afe2bba6b91e27554edbfb77f51cc41":hex:"":int:128:hex:"420b320c2d616a0b11a7605a84f88e26":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #1 [#1] +depends_on:0 +1:exp:0:hex:"26b04d8427582b04318fefebac2a2298ec3ce61146f39a35":hex:"":hex:"99f3449c8538414e7ab595b92a7e6e10":hex:"edfc2aa8ed91cfc0e117fc9e2d1bfe843c7cf365a2b6cabd4259686cd7aede9c7453623967a30ffbd52b30fc205208bb346ffc70584478f5f39a79d4971ed71cc3dd0200a89aef6aecda0a1f3a4bf2929b7b9e141be0ddd3671f727e5e793ef085f52ecb77a266b9a02a2c700b63d8c43da0b569510285e98b530abcdbf7739d":hex:"":int:128:hex:"091cfc38b248460eafb181ab58634a39":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #2 [#1] +depends_on:0 +1:exp:0:hex:"82c8197e6641d0832639e2b1d7691fbac79618b2f5db45bf":hex:"":hex:"69e1a3e5eed54bedc941646e3ad25a6c":hex:"d0fcb4f4d764efc0fb52c8108e61b67a1386f1a13c1761941cc9a28c6ad15e78474cd2a65ae9475d70d9c845f14bf4d2bd2bc46c29e507a347391829e0f24495b026f681c387b3e6aec8acfa5ecaf4c3cfe796c22469478ee6744cf04a22e6aec82489f53109551f58cc6602933d1780b8b45b933f76a94ef652a8ce8bac2cc6":hex:"":int:128:hex:"8e74343ae8cf1cdda4969c1a94aab5cc":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #0 [#1] +depends_on:0 +1:exp:0:hex:"1a349ba960b2c8f49b7e5314911ba8de358f2e74ceddf126":hex:"":hex:"f5998a62ec507c5fe5b280f9c57ac626":hex:"78445eceecf2e6d2ecf2589fd24e854bed3aecc63aef934aec9aea93dca95d58629002a4ba91e9bf6d12e13f0a844977b3c2700645281db5de381adbccd34a84346a99f34889bd46c75b1956e21aa9f87684af55d7fd0de6da07e856d9b791c0a45e9e37881092f6040a9ae9d87757142d3c9c7fc6f25db0e5b5d377865ec4da":hex:"":int:120:hex:"4d7eab0a3719fa53e552b9e5a85bdd":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #1 [#1] +depends_on:0 +1:exp:0:hex:"019af03d23342f7916e329b6843161e566aa859402cb07ff":hex:"":hex:"c5fd96765fcf6d51e23ac6d206744af0":hex:"f9808af3403051a52b6652df03b6b37d90a471bc242c436cab6ba699139eaad16847665093798731b9969709287199233c5e77351c5e42b15453b4171237a6d16aee63773c8c0d736b3a8bf38ccf922e561c456682fbc2c7161da3b89526d9de222351bbd04ecd4e8680f26d70fe57d577ea287b199be1bbb8b76328ddee3d33":hex:"":int:120:hex:"fd36fafe4f5571fafb6ece59b77381":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #2 [#1] +depends_on:0 +1:exp:0:hex:"fab39ad2946b2a343d76b1ccc1939cce7ae3cd7b6ea187bc":hex:"":hex:"247bc71446489dd3495c4dee8a071c76":hex:"cb2c06fa5aa54ad079741afc56dbed79061a02045b6c099d0ae2d7883b78c5fe09636cc8a5dbba0c0c76ebfdb81217526afbbe04fa4b2b78f3357025930b0f9488369bf3aa088a2107bfb6c4ba714f1c26d0380d647ada5852d2c539300a4779295412b202c3cb977a7b94c24c4dd2a891a2035f388257b84e5b31bdc895f062":hex:"":int:120:hex:"65e1aad214f49881a067d8b372ab6d":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #0 [#1] +depends_on:0 +1:exp:0:hex:"57b52697f72ae2df6354410a69dc3c5f28b31e6617bd78c1":hex:"":hex:"0d96720526491d196eca66457e3c9e71":hex:"cbdfdb3cc73aed4297ff9aba76dd8ca4d8efe11b0f521fd7170f07461c7885252874b2ff8fd05a3943ecdc824ffcef0396980ebbddc0a53c6c99086c14fc806d90d35347d45e556e9a55ecc3a9fd74c8e5dbd19ed8b452eaeb673818ddc0695f56ddf3b139a3df378fcfe5b6ccfa358f5a5bcd1550f1d9d5f325f15f9dcd007f":hex:"":int:112:hex:"f0c49960e60fb63edbb50bfebd98":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #1 [#1] +depends_on:0 +1:exp:0:hex:"7bf69ed06271107e11fdf016edc4aafb0e2d2ac05bdbc46f":hex:"":hex:"50e65aa338cfe856c80cbe1331b46abd":hex:"a7cab4e1e56f4b9fccca08d3791560e4b6c7ceb40a10adec0536861c5c46fc3fd06c0a8eb32c9f18c40463b0f06cd0053e615dfd7caeb2b353b08ad6da1f8a23ebddf16524d2eaed70d4d7e565412dcc9598df7e107beb464b103cd8de9301cafe8b0420f0c156025d72b73d6e015ed2312535d35899aed73aa54374674d7f02":hex:"":int:112:hex:"d7fb9d78fede77981948eb013ea1":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #2 [#1] +depends_on:0 +1:exp:0:hex:"caa781bbed41d7a1c56d47673f74d4310a3bf8b1275031d6":hex:"":hex:"7795dc04261d9433367f51c3b87bf18d":hex:"f44d77bd541e02a737c693ff3ea0adc091fff1966a593524e68954a2d7d66a48199366a5a600331cf392965b5ebedbf949203975fa9db53b72586615975e8a7b84e0633c6cf69caf482dd72b26b0a5687ec71667e7f6e5abea89c3d69d2dc42a242ef959e4039ba5b2d22a3e48424a431a77e816604769d13b7f892e2b33fcd2":hex:"":int:112:hex:"386930ced9a46097c0d1f6e65c62":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #0 [#1] +depends_on:0 +1:exp:0:hex:"1b268de4ff644cfa4361f8014656d5d4decbcf9cede8605c":hex:"":hex:"4009bb00afad026cbad117c6047f4ed8":hex:"140c5a93293598fab85b3948b53e0ba15438a0b948e91041a13104f0ad263c8a10613e20e87ef261999a54d469ba6f1abe56ec3979623df8520a0476801987c15410ec24f5a9be72acfca71e8c5904e2ea5f8b22b8cf404b9fd533aa37e33b3d4cf91599cbb3b85ecda4aebaa27ac0365df8312c399ba1767c47fe0923f2c53e":hex:"":int:104:hex:"af36bcee7561cd7d0861085d55":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #1 [#1] +depends_on:0 +1:exp:0:hex:"c2843bd689ccbba60ce961b7dd50619a59234dad97567e39":hex:"":hex:"55a68cbaa5755d8c67bf26f03c5863c6":hex:"d7980ab86ceb9b66ab265b68e078deddf7ba084b8967c3227839e8f31cdcfbbffa004953f3582ea9274dcf46e3ad7e7744a576dec37e0cb36fced2b2c2fcf4328f506302f5741e696ce25c49492e33c6a0c8aed5af03cdc1a266352623c6a52a555ce906f684bfd597b5e37f60b5175a981088b9d8b8b5493e4fc1bfeca64f95":hex:"":int:104:hex:"66cccb7d28d3fa70bce2900a84":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #2 [#1] +depends_on:0 +1:exp:0:hex:"f451c5edf9849a390486dfecad437cb809c33d31f6898ba0":hex:"":hex:"9e2dd52c04651ceea88caf4adfb2e8ee":hex:"87b804d4a81dc203d67a92b4fdeab959c2056dcedb28d29f216f9172817bcfb3d2256bc1c8aac23feb22b71f1fd02ea28cdf91785931750ba4865d672345b5001b1aade4f6acc7edb03758d2540e6472aff50ab3ea61a0b9ff37ff7a87b91013b14867c3e43cb097a923e6d8ddb1f52e4bd940b60d500a4e35bfa91935065f26":hex:"":int:104:hex:"e192a49f5f2b22fa39dcfa54c8":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #0 [#1] +depends_on:0 +1:exp:0:hex:"bd02ff8cb540ba572af3431597bdf3f23e61665f96a19b4f":hex:"":hex:"7198af3f594a4f0597f45fb592edef50":hex:"ef06de48bd34f362fdb425c6e35e37d0dfa1ea874df7d201b6a1c25b736c96e3cc8ed0915807fb7ed759482ca701d28c08cbf955be244bf887df37394d1ca4d2e7eace0dc61c807b714f3161f9d7f554c9f87ad674849c136108cfd8f777997656489d3e993aad4a51b68616083876832b3085a5f8f154b83ea44702c70f2980":hex:"":int:96:hex:"43298281cd27a36e5cbac4b9":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #1 [#1] +depends_on:0 +1:exp:0:hex:"9ecab4a4a9dda43477c993d6388387443c66ac253071c504":hex:"":hex:"9523b2722b927dc3afcc5f7dab2bf033":hex:"fb84e38a84225c8ebb307df88325d020a5853bb05ac7a75ee38552c40c302d263181081b05918775cf9cd6905b9982b2ae9ef7993f28fd8714e878c9a4a8101c08e9f13581dcf4f16dabfcb9d3c471c0056805f51e67e9b75572639c3d6ce62d2f8abd64e1e66ffb292360c20155e4d528374a5a22d845340d6f1ac68d33040e":hex:"":int:96:hex:"696bb674e43cdc7d69346555":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #2 [#1] +depends_on:0 +1:exp:0:hex:"733df8c42cc2e70ac195615d4911ffbecbe2712230c5c292":hex:"":hex:"f76135eab5d42e82aedff3090a1ba606":hex:"0c8aea747cacf2f0fdfaf368cf32b12dc49f5da9a29bee380d2d64035b73efb56fef13aa20c0b612d9615cefb94f26978fa0b371a47dd20051a1605b9f5e133b52dc514577c53319c9e2bd4ac7cdf37d56a9e715e27860a09d86cc21d0b9f0f302f6acf06f2ff00cc6c878dacb8bde51082f701314de7efd36a246f80f8a8fb6":hex:"":int:96:hex:"82e6d0c076c7d8ac0839fe18":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #0 [#1] +depends_on:0 +1:exp:0:hex:"ba33c24c41bf9836607b6dd05e66a3d16298c897dd1d70ae":hex:"":hex:"4b30423df6de76dd684274afbea089d8":hex:"71f5f6ee7bbd774fa691a3d7e0f694a6c8dfe8aaf9cd720e163ef6d5cd949c798f9e9c993adb6d64e7220aa0f17331bfa9a43b659be101726a80e5529e827c3e4b05cfb4d78db9952e58eebe64dfbc0d1baf20e7e48902215277a49ee953108526a70ee150eda85e6a0e49955f8c6323766ae10e13ecfdbe4815f4bb4ba43786":hex:"":int:64:hex:"73e80018235ded70":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #1 [#1] +depends_on:0 +1:exp:0:hex:"1711553980e3fc5c14c98611ddbdf426463f82c66df83a70":hex:"":hex:"3396bd96b83ba611ed22e12e8a5ec911":hex:"9506f34c90611acd6ecea385a782a5739f88b4fd13b77570c4d7e0617283e7b21568e32c42ada1cf6aca1a2e2ba184d4101306ff21c9d03e0ffda4854773c26a88a5173d52960286c18753df17361bb7046d2884ee600f58775304f49cf4e782ac70cb00b3d9c345cfcb38e3880743034640bbcae83112543cd1622ebaedb221":hex:"":int:64:hex:"5d51a0868a2161a5":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #2 [#1] +depends_on:0 +1:exp:0:hex:"5d69dbec7ebe80f2b5b8f61fdff1f4413f5f6624010fb795":hex:"":hex:"a2eb3ba50dd93fa375cf682db7b2bc7b":hex:"a0f9c0de86b54d3c176ece3305463237e1f70be3c52e2ab1c773a9d27d6fc5dadf61ce7a3d10dba8730d12c306fca8952403983bf242fc1b6efaaa153ca446a07d16a70af4cb1aa4d4c0c93d646dc3a5630f5a610aa9e6eeb873f9a06d3234642bc86b03c596235ec03019e762458abe17d37409a18ca5b7e0e0088391dd3acb":hex:"":int:64:hex:"1a827855ee98d679":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #0 [#1] +depends_on:0 +1:exp:0:hex:"7aa732879f290aa442217212156920c69457b8ec41eab153":hex:"":hex:"cb593221c59846dc82fc0d0cd04af3f0":hex:"15d7ebf94985c34b72b6675d7346f0b05bdb8fd3a278555939d2999028e4179e69352d398a5dd0e5b370bdd9cbd24d576b89709c98b6142f71f5b1ba224222afb67599fc58fe043d1a91d7ea95b56dbd086db8e3a061b1bfc6e82dc9ac728174fd3669d65db62a06380a5f72c3d091b7a1b6998041d5501e9fba8bf91a7d278c":hex:"":int:32:hex:"55b86d22":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #1 [#1] +depends_on:0 +1:exp:0:hex:"961a3e78f6a75944455f9d9d0345e08f4669972f3d5c202c":hex:"":hex:"ce43a19ac648e62ddc49d243fb34e29f":hex:"393736558133078a0367b8248bc18c8352f92a9212e90318a5b63ad3c422ccda7c181c565629acf4fc73b2de85bc9cf38310fe703a877b3e7d3b2d416aeb962f1027077232cfa39c5e5284a1b323264175546ddfb250ce693e2dc78a0479bd89a7ab44b63e504866d2ec6b5153cfd51f29a91cd4fa2b8e09878747ae53981875":hex:"":int:32:hex:"ac701373":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #2 [#1] +depends_on:0 +1:exp:0:hex:"c4d492904becde4e46c2557ac833265c715bb57f18cd040d":hex:"":hex:"df41b22b92d43a96a7504514b92e644f":hex:"c4dd46ce3e486d89903482de247c1e7df05809a247302db3ca8457b93d6886c0a3d1be40a90f6502ec58d0ddd715896cee37322d48ec3f0c3ad716f1bb679afdcc0e4c79e5e2e346702d349ec7b391ef7eafde618bbadce5d14d22123de611c065780a4d05e928e87d12b749888d6004224c3e457aca0190bf1a7fba2453680b":hex:"":int:32:hex:"7a259bda":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #0 [#1] +depends_on:0 +1:exp:0:hex:"316660f013ced78a16701b35479ffb1f7c8c4e964c1b52b8":hex:"d262c15d08aea46f614c7f8f6a54631289e54ca97d698777388e137f431bb783601e7999e7af98775d7b87ce061d9ba56570ed8c58b6bbac5f12f751fc376ab0f14b36b40b2b5533727be3bbc9a51183405d5fd0121201ff592817d06613b504a3440b0e1a57e9ed1771766a9a5b789054f7032d20b23c5c37d77f293c677fd8":hex:"919ceb172d2cb460bdb3b3e58debe889":hex:"":hex:"5f5128f7f948f0cc9fb248a24b07c54247e40080a992acddb2615d90ef9328a17bd5e9a698b00103855738aea55c4944cde4a9148bfa8db12233231861c455e52c9889119ca402eabc8f41b27000156dd29b901024336cb2b7088eb5fd534ba58f23caf140a8b2549486074e4edbfc262ed9c7c7ccaae24be8de873ad43cd13e":int:128:hex:"ae22ec4c19e7616a5b877f168febd202":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #1 [#1] +depends_on:0 +1:exp:0:hex:"1bdb707c328304809bf0608874c9db373df3c7104a5a7049":hex:"ca243caa145124997f5e2e6bb25d021a38d58d0ab1bbf06d086c2416c08e3512aa887cc215fdb34d0f2d78f6a45885767f15fc00b68a4df1130587de777efb9cfd59cafa077477e97edabf2bf04c9a6ce029c230385ca5f9928bca7fe5503b18774849199d2a39a378a2d3144aef4416c1718319ff1bed8021dd77a07f61eaa6":hex:"b7e7fc0d5adaed1632c5f7d1f56458f1":hex:"":hex:"91c7954bdd6a49360fdce11c1bc710512bf5a57bcef241fb63e5ceabcdc9699d0c0ddb025c75195ec25e631507f13e18799e6be9798e5639ad8401f6244c5b0ace3905ae0de08e2d0fcd19d193de83943fe449af4b503a454c248e677d2f51100fd9b8b7e5388d5091089369a7c2ff38bd353e9757ef873a87f15f30232bafb4":int:128:hex:"72337bdb2bfdd1f1ebe0dba6f9b7b649":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #2 [#1] +depends_on:0 +1:exp:0:hex:"a6dd0d7e9d6ad1ad7c7394d53e9e081c436d34c8158bbc95":hex:"2d95d64ed3be857a5c79c7af20aee00f142557e10d780383fef2d45f16c7e2823ffee495b220c87971610e5650f7c3e8d296b3f03fc883c00351df48d97717427101aa0c08a23c408b24511621b640c210b316cf17e3dfd714f0c9aa9ddd974692d1c2ae27b9bb0fbb428e7a9da3b3cf9bd869e730ccaa3aa4bd08f01f84039a":hex:"60b4b9c77d01232c5d3d4af81becb0dc":hex:"":hex:"4494460ee73d3513814e1f779bfe3a229b49348d7641e9ed4dd959b582960097ef08b91292bb9db87b4e728d01b92683f4cdc81151a69bed2096bf6fb2e45d0148404420ea16b631b421e6f4c6665fe33c2d11e7b22b6aa82b610b83214ae4d17e681972e3a1f77306d3c54d96c47d8be1fb2c8cae8300ac9db99013f25a65a1":int:128:hex:"d40a246c18518ea9f8d733b42181123c":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #0 [#1] +depends_on:0 +1:exp:0:hex:"e9ed78cb5c10df05ad00c6f1fb35b4d28e6ddfcc16456807":hex:"e465e57cbac0dcd1e8ccda22042abecd9d89c4ac91b0e82a41fd51107a792099e63f7cf23a889d8c04edae2c2b3a9e51dbee6c3b71ace3de08ab354a295888bb99ae0fe428dd69bc013d49a70511ef60524282347787a542fe9501b6452b5faad2f129a9795c2c4cc0881ec4af8f0e0d2d4a7a628cb051055fe831b51e250608":hex:"3a8ad989c621ae1e82b8d255a3c95028":hex:"":hex:"6855e4702f1ea593bfe30ee65b3fab832778d6b11a0ad902dd37361b8d85ab76d1f2ccf7927d695eb3129286c26737b9573e26bf64b31de26f97525f84345f73bda2888a1f53c9b405ad627bbe5dea123c9fb0a4b7f193cd8fbc8fa4a5e5f64e9c083f5c048d61fd1d347b49afdc69e0ca6a82e3b064c49d5bffa2800b5cfcdf":int:120:hex:"9661f5c3b0d99d4f762bdcabd48df2":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #1 [#1] +depends_on:0 +1:exp:0:hex:"76a5bc9a8d7c6e2822456156cea7d493702d61e7d504e3c3":hex:"0a7fbca875fd620c3d8de788e5c27534160f68d60d70fa4167adf0c18ea25fa1f2cc551fdf447aa16678d3f82193cf421a6fa953532a3765bcb54183bf0e96527ae5e695ed3bba5d9911f36c1aa73132cd43b2698996eb43ff84420e315a06d7db02aee815461892c7ab9026953c4bc25f47153d5cb7b966b71b24dad69fa565":hex:"09b681de6683751300c2ada84a214d02":hex:"":hex:"dd66e08fc500426feb497c39c5853b26376272dfabb82ab5978167faa91adb025a6ca0e8fe3d04a0d97062eee8ca6530c3788bebe4436ecdd3d9eab96d38a0cf9b8cc6a584a0facaea33ec2f4a6e61f780c3dad524df902f421e3204cec7c9a4bb3f0860e017eddeb939cdfbe6f924e1eebfbbf8ec63c55b62137d9f8845f38f":int:120:hex:"4acc40a4882d7733d8f526365f2560":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #2 [#1] +depends_on:0 +1:exp:0:hex:"f5cb564cdd6974219e87f93a030fdcad35313d4adf9d7a97":hex:"210a799d480b4933e16fcbed632579beb6b00aec74c205dbaf64e2cb152c12f9b6969122f296efcfe328f54202446514066594848f42a3031425020b56d065d6eaf2caf507d5f51df493c11514400b889f33d0b996e721eb613569396df0528aa14eaed117dbb7c01d9c3ac39507e42a158413dab80aa687772475105eabcbbf":hex:"90f91da5239640a70eec60d849d9ae70":hex:"":hex:"69a3dcf5b94a507a53fa5e62cfca269453623ccd3a537d971130a21bee884cf271b9833dec19862ab0dfe7052e7dc07b20f34aac42bc39bf1d495360c1d701ea53a9bba64b02962b4ef64fb1c90a1a2f3a6f81a6ba781d5f28b786efc365ec6a35c826544aab94b53b96613fddb65660dd336acc34a217960f6c22b9fe60dde1":int:120:hex:"b67495a863fffcc773021dc7865304":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #0 [#1] +depends_on:0 +1:exp:0:hex:"dc2c5a020d3ea731362c29d559cb14aa4f8e3f6a554a5fee":hex:"8cf098cb6ad79e0f0eb4ca888da004dfe6431b5982bf1490c5f2d1486c288b5d50ea0a5a63cf9d097a71348632391b4bf962bf464419c2c971e76c03eedd09d069a070c86837e16a2c39a2cb8de3e2d3f274e03998a874fa98de0933b0856e076e7f575f351d7ecd024753781f51ef600405b304e37f326846b84692448d3f2f":hex:"bd4d45d970085e0b2bfc9477f5cd0244":hex:"":hex:"d44a4fd303e657670632da8dddb6a117f3e35d8afce245e7e6576711c663f36806b813ba6421ef9788681d9717a36d3eff4ae1789c242f686d8cf4ae81165191220e338bf204744c9fc70560683ec07c212846d257d924d5fc43a3d4297ac54428a32c8bb9d5137e0f4aaa42df8dec37793f3965ca658f22c866e259c80bcc59":int:112:hex:"9c1d6c70e1457a8d67f81cb3dc8e":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #1 [#1] +depends_on:0 +1:exp:0:hex:"167cb184ab6ad15be36536f505ea5447fd996b1d9a092ef3":hex:"0b6ec08685b5a9d32346a5fa25d208136433204f3b86182bd1d9578f0634dcbb5b59937fb87df0679334d7f41eb8bec60ae1b87994ed2cfddcb56e95a6fb4e3ab7845b0294e4afa5ad46eb5a431cbd7ad0eb0473c42c06f3f62de03d10ddda449d41137c8010af5c7c0eac7a5fde5a39b5437a2382639fe3388ce029a7d4465c":hex:"b5cc89a1c10329bb417e6b519091cee4":hex:"":hex:"7ebe4a9547fb115b39b09880d6f36f8cd402bb798c6d9db036b1ebd8b87a8e9d56fc23b7ae4e8cac3500bf2f73952c37a068f1e472369b62319a8b1bc085a51fbe47e1c321dd1ba2a40692ecd68762a63467d5ecad66a3d720a8a81e02dac0ebe8df867e2f7afa367aa2688ca73565e55cf2b0072fa3681750d61e8e60275aad":int:112:hex:"30454dae78f14b9616b57fdc81ba":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #2 [#1] +depends_on:0 +1:exp:0:hex:"9bc7aad4f4bd73acf756311ff1b72b41631344b9b57cf447":hex:"7cdf07e17f667227edc986827d55bb803c6e51f93e72d98a1cbd161b58155a1c14ca54d52254e5f88f2a08614df68cc37f6e9fac88895b53090f69544b18aee4cc03763d35e7dd94ed82d1435316e7e02367b1c43506b3ccd31e248dce81fe62fdaea3a0bfba03477d5c151b0f76f09799048d8b23699d000a9da11281efffc1":hex:"ffa8e719f29139d12f741f0228e11dfe":hex:"":hex:"6ab304cb9d1ed675383ff95f7f61ffc2aa73ab1b9a691bb84777b14c7014e986ffb91da6847d3abc0349a7aa09ed1d86f2dabc09e0e25a05800bd5d616c1a665bdb119ef71bae065ed019aed20ad3b13262a902f24ccb4819dc71419994a8b4774a3b9f4f672d31aaec997cfe340d2abdc3958c41373d0315076d22189eb5065":int:112:hex:"260cce7d5ed6a8666c9feaad7058":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #0 [#1] +depends_on:0 +1:exp:0:hex:"5bd47bea08eab8694defc2b66e60da1be40fc1e398224f9b":hex:"083ad3fe9273b8063e144a03f88fb179b18327aba37259d7f8532303306ac9d18cfcb746cab3f9385b5bb685fbc4a252dda268044642f5dbe33ea6e1634445311e440c5507fa6beaed343c83aeb0ffc4f1cba21b39f0ff6edfff961aed3ae1796f8bfeebcd3392d92e26dd26a19a7b7c2e5910f22557fad600f8cca8aba988d4":hex:"e45a52c5e5ecc87b4320864b38683777":hex:"":hex:"8fa3cd91fb93a346e1f9595088c5503a840c7d7c33aa1be147e484e2aef2a8bda77275348ca59810abef6e179888f6781862990ba8e6d96af70febd2f671a3a8d6dce9be46c1cc6dbfaae35c35a7073205411cc8ab4ddd266b31b64edab4ffea076b29803149850cca41c857b05c10148182f8e7252e67069e7517da5fc08ee1":int:104:hex:"9fa3372199a2484f82c330093f":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #1 [#1] +depends_on:0 +1:exp:0:hex:"850a811ca18044dee4487729e619cca71f05a5b164dd1250":hex:"6ee76712d0b1fc00e43c2312743a881ed95a0b06276c5a4d93e3d56732af6b12c7c0d1aa6ffaec562229b6443e576caecffeadd9a65b91efa1bfe48ab1ecc63c381d00fe8dc7f11365f2b28945e844e7c6ca60972f733a96f29cc12e259c7cf29e2c7bbf8f572e158782a46093c5754656d0f2e1e1ea2a0b315b5fa02dadf408":hex:"6f79e0f62236790c89156c14bd9540a9":hex:"":hex:"eb1ebd78d7ac88e6f927e09fecf7feb1aa64d7435aae76cc917edd9e0624a96e945df67648c187e397954da7b0888005f7a0d05d09de424c1a0648b56707b90da4021d5a36175500337e7341d1a474fbaa94e56d7ea52155829eb6bb9d95457c138875f0738034924d59681e7c2dfffb7dc0959697468ea2b65a884c897208ab":int:104:hex:"91c74a30e5bff5b2585ac7699e":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #2 [#1] +depends_on:0 +1:exp:0:hex:"91469828dafd30de415067236d5f49ea14e813637f1ee0c3":hex:"e3aac00bd05ce3c9b87720db82104364c8ef6ef25d6f3c8bcf5f73f1a26f8619e831bf7bb28c4dcbac7013dc6282d07cc225bd969c582a26accd7cfffe878a3159a5ad3cb6c8b89131aada61e2960cc5431f4ef94394634e4c8b2938409bcd2e7668986c7c5cd2ed5f2c525fa0212996960ab842a43869ed430d3291799a2a1e":hex:"cb5409aad9d227a3cf0e2c5f1031873e":hex:"":hex:"4aa82b1c81a911cbe84231ce7afb95188f2177b539fb77de68f3d4801a2bd09f5ee2f7e59b5d9e79be5f7a23f0612ae39d59259dabc8b1bf7dbd4adc0db520bf7e71b988fa96d6b4dfc76afdc22ea31f64c64388dd93b27518b3263b0a19007405fc08645350a69e863a97dd952c8d886b5e0f444a6e77a9ef7c7de54f405a04":int:104:hex:"2a6b14c78bcb6e2718d8a28e42":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #0 [#1] +depends_on:0 +1:exp:0:hex:"7b6907853b7d4c4a19468111d96c5de048200b5441b9411d":hex:"3622ba252c067ce7d6cae1d1f5068e457a0cf93be01fdce6dc8652a53135d5ed445388679e3f388ee6a81220b19356b275878fbcc2a6751bee7e2a50adb7c430e4c8cae03e88465f97bcaeb151d4f0007bee6bb9864b33020717adc42d6f8a283a20f6b62ec79fb8060e3e5ecc1e91a2eaef57e9dabd3b3634236f12d4bff475":hex:"a66ee64c15094be079084c89cb1739c1":hex:"":hex:"2b8c1490e13881ab3bac875cbdb86baabe7fa30445bcb39315d057171e80d02aa8471355e80ba891b26d80b375508ba2756162cc688578be313a50096d7cd6253a8094970898fb99cd2967e78a57d12b8b3e3c10502634bead5bfe2c9dad332fcbda0c1bca16fd5cac78ebcbc7f15aad8b28abf3ed74a245a8e7a85cfaa712ab":int:96:hex:"e52af33988855d1a31158c78":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #1 [#1] +depends_on:0 +1:exp:0:hex:"fe63e247e8de838a197a9e937e34c0f5a0b282533d445015":hex:"17c5d748b8596901e97df660ca94fc970f7ebb769aff88f60acc425f50ebfb6744c6d8778c226c5d63653d9388d3fa0d4d630f94d668f3478c89e2708501edb12307a9b2189576cbc79388d291354cb9a5d1eace4ca1d9f734fc78e55ecbf86338a31ebe583cace752e8bafd0a820384136963eb2d2f4eea7b2f69597737a1ca":hex:"8e018305675c287f802f28fe56ae5c4b":hex:"":hex:"c3d34e2cf1c3ad629490d70a0fec1a63c88d025ffed46ff8f5d8c0879c166ad716b702682cd0a437bdaa03a9b2e69a32fb7259b0fa930ca7a344aea37886cc9850e44de0aa049b8bc300caee82e26b2a1e5ab45c4c7cc6a15f5f595199999a0cacaa59da1b2be2a204fe13005b92ce722a000228545ae8a61b2c667a386f431b":int:96:hex:"d7a6a917a286d8edf1289183":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #2 [#1] +depends_on:0 +1:exp:0:hex:"c739dae83a5e64bd98ffaf68b5bcbcd0155d8109e9ff2518":hex:"56dafc06b354e84ce3ce31b7f88193124ca7e7049272beb93fbedcb3ede8e017bdb9ee5d314ec5168443fe01258d9abc4c4c27580f6299b20082b4ca87eb2589bedc459f132dfaefafffdd13f82e153a2165dcab9a9b6c10f1d0d13b127312a6f5f3d65a73b8fd057f1d88038c5137254111f7aedf21af07a35e34cf4d2166d9":hex:"d80ac4dacb0f1441839e2068013dde3f":hex:"":hex:"9ae5107f4394c9050f8ca8ae6d1eb66099ccd0166f38e45c1cbc17b30e218fcf6015ac92dd7ab48bbb095a0523904c72710a86e50518d6aade269c82bc5ecdfa729802441e09aeb939abb43f5960542ad87961e2141f967d12f7190b07de99811b264dc62cb8f067872f84d21b661558ceeae4922900ffd76084e450650de79b":int:96:hex:"6a180ed4f3a9d5739e559d00":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #0 [#1] +depends_on:0 +1:exp:0:hex:"4c23ed64375d42c3a402fdadd143336d2f6babf4d4ebc176":hex:"5541a219108ce3ce593cca8c6aa6504c84983a98851bf8610d71f79a38bdc21d5219266ad56e10ccba4898ea969815ed0d6df75312d657631e1e22e46f727a499696399a0955d94942a641383cadebc5328da2ac75bf0db709000ba3277581e1318cb5825ba112df3ea9c453ad04d03eb29d1715412cc03dbce6c8e380b36167":hex:"daa6f68b3ce298310bcc2a7e0b2f9fec":hex:"":hex:"2a4e04101d4c822eba024dcea27d67eca7ba7f0ea6d5290ced9376049ae085ccae3ecb624c03eb5b2808982c88f0a5c4363a7271610b674317bbdf1538776f1fa2454c249a1b0d6c3e64bd4a356ac2aa2fd601a83d4fa76291f3ef1a9bfc858cc0aea10cff34ab9eb55411efec2a82a90af3fc80f3d8e2b56181630230890acc":int:64:hex:"d408209fabf82a35":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #1 [#1] +depends_on:0 +1:exp:0:hex:"695dfde34f0af192faa50244ab95a6059e2e637e237eb60d":hex:"33ca2c61a04467ad2bbd2ba8144573f0c2504a4e9945fbae250385406ed1757adb70534bd6ed854f227d93eee57c73a314f5955208e1ba5af8cc1e8b5bb07cb63030e3ae5f0ad287536f49b576418bb1d2dec40562f6bdda59c373d6668aaa9b791285716325fccbda2180e33955c8be19d05e389820ed69258c9b93e3c82e96":hex:"a6a57792b5a738286fb575b84eea2aaa":hex:"":hex:"b2ce449fc806dfb93cd7c97c018c2ba7d702216ae29a530a8f22d07279c7570c6288fc01fa9915b42a6be7a7d9569f71b8fc2411dd9747b5c9c7b5c0a592bcd7e8f4530ebaee37e9c7d48d7a56be7e2df1d91cecfd11bec09bbca7ce7106942989594e791e00e23557c843acf5164f3863d90f606ad8328696f4ca51fd29346c":int:64:hex:"050bd720de1b1350":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #2 [#1] +depends_on:0 +1:exp:0:hex:"1a89a516204837bc780ad9b26717e51ccf42591bf58c75c1":hex:"c72a1b8707522442b992cb21a7526dfd341e27a11e761f594abbfacc2ac26ea48523d0113e38adbfc06d4af8809cb606454467fd253ca442241e8921b906d6c007dd09e139e568194666d5da0b33c7ca67876856cf504e8dfab4a5b0a77cfb1883d532ef7c70b35b0838882f144991c25a2331863eaaaa2059401f61378750e5":hex:"a9b1ef7744075cd6cc024f8c7b3b0b6e":hex:"":hex:"0ec50150590bb419df0d6c410edfc2f8805a602ff247e3b50881ad3efb598ed053d8dd1deff86460db0081c0eb3effe9ea94564f74000166f08db24da6cfcba91a9ee1e98b8671db99edbe8fde11d0e898bb130e1b27358fc42be03fb3348af7de9376af495c0ec71aed56d680632195539b2d1d5bf804328d0928a44c9731ce":int:64:hex:"6c9f55e67533828c":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #0 [#1] +depends_on:0 +1:exp:0:hex:"4107d51f7d6e24aa605959d5d46b4c7e1743b7d5e3ae07b6":hex:"e5074ffbaf5e771e12f9e7cc8e7701b970aa7897928681383ea0f91bce8200ec6782dc9618e065e142c4ef2f7019791e74edfe2040b08bdf328d7d9658e7473beab65359d35ed168a2bb39f3c3f59890353405a82f48e16d388eb8f2145ed9bff016e725791cabca913813e7485f387223711c1ad098ffa0f72f74a048ec17ea":hex:"94a88f6872995b26da39efb5e3f93334":hex:"":hex:"bf32a717c945e1e2fe91fd38f3c7084210a7966cb83235d28f701ebcae6b2042226e932e4601eb3ed4728ca32bf7065fcdc98017dabcac23f0f80c65e92518db6c78bf4cd91f817b69f3c3a8891786d433f6c3c1a025c1d37bd1c587ba6004085571245591d615906f5c18994f09a03f3eef180d7af34f00ecfe153d5ab73933":int:32:hex:"8d43426d":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #1 [#1] +depends_on:0 +1:exp:0:hex:"0fa6270a44c8d14937cc3ff4cc2d2c997254a42ca8a09eaf":hex:"2252d1c4706cc46ad3e4f8c49a92cdc7d1af24deaf7b08ab7304ef804cfe261acc3a202bec0d8df42cc36a5a3ace9ed7a9465cdec3513d31de9ae7821f9444226439c8f98a9a7d99b36b91b1b00eac71080d7eb550209af5fb7b3f28d09f5060070da73a40456d60c0470773af95d16c0b33d0b5327d44188619b950590ea862":hex:"b5f3fde841156bc408ec3de9ef3438fc":hex:"":hex:"4fcfc56fa722af32e804dee0f4b67f5fea542b381bc47c41451844c82e5427f6cd90c37e088dbaff722d8700a11d5dfb4282e565f32e055324e5069931c86b62feb2cdf82ca1f62aee02a70e4e274b2b957650a5cc772be86c1b1cfc41b01d20d9be8b05b9e3ff65413520789ca0f198fe00d83483a1d85aeb13094c9a827e7d":int:32:hex:"1ae8f9c3":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #2 [#1] +depends_on:0 +1:exp:0:hex:"104c18bd2a0641fd46c2d7590d60d6d8eea74a2758ed0f4d":hex:"4434cf5d12d07614227cfc12716a8adfc651ffe5c6476cf4489afaa698d9d19947016bdbcb5b625773252745dfeaf9b10021a5b38f742ea8a0fc5f926c80cef6568ab8639cddcf8fee9678d45ad4937d6e6b054b65512f929e897ed5f965cd14cad939732c53a847bb2758d818d5d131977649db5b59a0c5ebac37db961f9d69":hex:"2902faec60f754f0fbb1981aeba277ff":hex:"":hex:"1789524845a1e36322c44dd1e938ee5d0fe6df244b751f3023d5d64d40a72598d352d9d2faba68be4e035c258b68782273925a94527fcdb977a41c1e0a96f53119b5909b23b0327c820e8f6da049a5d144a98019c4953aafd481190117573869109c265012a42f76bb4c3353f6613ccbc40a4af2f9e148bf0a0324bb43337fb7":int:32:hex:"d36d2d06":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #0 [#1] +depends_on:0 +1:exp:0:hex:"263451f187b6dcab9d8dc4364217a483dd80c1d75f24fcea":hex:"5e236c282eb4646fbd16a95eff2b27873f625a7e919237d75989a8a112ea80ce8db0b4aeaf5da59c3b22649dabb584284ab9673ba7edef59043eb8e99763643941a4788e7cf11bad63e13c9ef08644044b76beef68928dac22975481da4afc723b3ab3b498189542cbdffbc3f467d190cd02e9b36b6981122aa80cfa3aa3561f":hex:"6c4552b3a03152aa464e88fd5b14356d":hex:"435453a304fcd3c4bd6ab90d6ed8c54e6d21f75b9e56c9d48030499b04f6754cff628c4c9216f7d8a0abed5b8b7ca128c099a7deab74ecfe2c4a494b30d74833f837d254aa00d75aa963ce9c041f1916eb63d673a4af3f88817c65d4c86f5a3c28a67de2aaf75f08d1b628af333e518a7e99d980571db608407d3f447563f2df":hex:"12dea5ea9b54957c689c7c9c6a711e2880645109a4057fafe3b32727a60ee1e24f8450310d6b8402c26b307bb0bf3cb7c6407270d95590efb938e6d77359666b11a7a3833a7122697e959645d8e9d835e0bd39bdc30397115b4c348ea825c850c1e54a60a2522a6321e4b99fa2ad9215205628c595b07c6ffed939c779d23ab2":int:128:hex:"585677e0f37ae13d886c38202c3860b7":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #1 [#1] +depends_on:0 +1:exp:0:hex:"dbcf735d7c8701f537090d3dcf914c741ed783c24bd8265b":hex:"18eb70dff73341298ce33ff4049fa631f2c72c158fcdea55d1231c46c95ba4013012b713bc95ba25a2114d0380c297acd05c323696db466874083e18bf544dabffbc70be4649cfe7e8bf449aeb9789d6fa412a1adf57ce732702ab962561f9e1fa850733c97b8a4158786e8ccf32af0fc2b04907124e731ffaf3fa7eacaa64b2":hex:"09ecced8460af635e46bc82450352be5":hex:"cc5b8f82fce3797009fbd38dfad7055a5e2ac241363f6773191d0e534e2b4592a6805c191daad377245c414df8edc4d3d9ecd191a50cf9747dde65187484802e15797d7c7e1db49ea4e423e94d9ad3b99aea6bf2928ce6addfc00848550b4d2e466e85a282cc022c7c4469d2cb16151e81bf63df378e0c676036197d9470f42a":hex:"8298f796428faffa6085e458f149675d6c6e2cdfbc7994ee6f19af40fe8926c28904fd5ac0b9bdbd2de3f1614500a3eab1f980f82ac23cae80f3e6ba71539d1723e9f3412df345536f7517d847aae79a83ee9ad5fe38d60c6618d870cb1f203a3e1847d14d8de5295209c0e05aa196fec0eab8389e4eb66bdf3dd49d0800ffad":int:128:hex:"e53ca266dd93def5bee5daf70c953dd2":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #2 [#1] +depends_on:0 +1:exp:0:hex:"5f8d84908a8b7f5e118482bb867102a244bcbf48b7229115":hex:"9cd2a4e2acbeea6a73b5bffc1191d8045f63f3a14aa762eb776f35518f72bde4f9c8decd61a9319e3dfca82e682910a43de2719451e1a32839b29b27c3eb1c8f6118512d6a19cf189e2d04cf4e22459397936d60f7551244387294a7994320546f070e54f166cd7c243d13f3017b786f7df6a7fa4ece05a2fe49fc39e2225b92":hex:"5ba986f5115d40c2cfe404007a1e2403":hex:"06f98d4807efecfc863309f3bc64b0f04e4c16c32675ff97a3295d5657d4443f6c8b0a394d3f942705bdc19c22b8ff58e9b7c209b528b745fa0424d5898ef0e42e0909aa5ad0b01f8549e3674102ddaf4784f0ff8908cf9f9a25e7e4dd9af4da7bd13ae0cd87b6aaa6b132dc518f4a95af403e612edce63e1424dacf8e349372":hex:"2f168fd1c819b159739a7cc783ecdb0ef9639b7965918e343e2a55f196daf584f7f14bb6e42d37b504bfc2cc08c218c5b841b2d2abce05bbf15315f471e56f04f7d54d6f1dc7b7a68b8bc7026a1441105015bcee2c39d83be35d25f0d514bd1ffe75411b32867ebf2d532a766f9bfce9e55ea3e0240d2a3713ddc2ba790bad21":int:128:hex:"7f121ea36b36449e1db85e8a91ab16f3":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #0 [#1] +depends_on:0 +1:exp:0:hex:"f6c3037a59e98a9a81094d65ca52752ad92f93bcfa671821":hex:"26647f8f4092f80fc19f81f029c354c582b582516e8e27e97d50866e8ff755f50a8ae6422f4e996f0cf50826a68c007a5b16fd59002d368ed3285bbd04f8f9a5a524243cb8d5b3ffa184ba7384771bfc508f2e93abd2a1e7170d694d35cc0ff7f247e84ca8889efc820c3f6d9cd40afd56c5799972d7556c91cde50ac808652c":hex:"43b4f15bbe525913a31a9adf23d1971e":hex:"60826c97f0a99b88e7aeab774a3f2278f9d35b6c1a5fce49d9389a421543c99f68797224535dca4d7040313340da73982220040a063b045843a14f5d38763f95bdd26ef818f6e5171c8d5b47f183589afd6acd36e59b9946c1edf038ae285f500171e9850603cda36043c29860e75bfe03c21e0ef11a9aecc5d5c51bb2201d29":hex:"e58df99cce5b2548cf39684df6a26b8f9b7969168ff21c410bc40b763842ab3b30cbb3c82e0b420c8100da61c9037a9f112db9563a3d069cdf2997e7f4dbb0b5d79b56f0e985cd8cb70355366f7afd211bd9909c48b142c6556326062d27f7f82d76b83c433f00f1716ebc95038cb57c550b5810b77788c8bf1e686a8a14b610":int:120:hex:"ba6aa6d68a560642c266bf4469eaac":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #1 [#1] +depends_on:0 +1:exp:0:hex:"8fd9b08232a1d3fbe319d0897c74098f75b3e801d10e183a":hex:"a677a13ae26b7a05cecfd153aaaea02ccb50db601221a3df545164bb5fe638f6ed276d4bd172b9e740a82a690aec4f18f4f3a0afb80c9a32188958e1cb3651064f55ca1211647903f63013e46b46c7f4f95589012eb4ccd2451d8e8dacc3cd066281f1f0c71f69f1c49f3f94136a522fff0d02427e4bccab056e615ff6fde1d6":hex:"304c759800b8e275dfcfd3e5e3c61a7e":hex:"5d2dffb00a25788548ff1b2c94745e5bfcc05eeb11e63501007335d4bd06bfb3223d4682e7e83eca0e163d1a8f2a76096ab2839ad14b45eb59ea9b29feb76f40b0d8dac55247c65e5dbe6bb2d5155ddcf2b2f924c48e1c16c990b69ac48ef2350873c1ed524ce1b8ef6c92a11c8e461303f7c32b5d65b57154197e45f1c6b792":hex:"0779e5050dd17837d40fe3427322e717f074312f160c1951e5560797c13e4fbe47f320dc8053a39d2def4d3cc20e215978647d917ddf93fdf9eee5e54a974060dbac2a478afe5f5acbf65af4dccbd3942d130dddfd90cfc969da0c7f4b4050e34ce2e049c3bb004782abf4744c9a3ca2713ebfc5dfa16d011bc0b33d0368c108":int:120:hex:"54c8a1dddfaa1cafbcc1883587b4cd":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #2 [#1] +depends_on:0 +1:exp:0:hex:"19d38467c1024611433a0b2780980538d88f3e8907a86e42":hex:"2623cd0eb46a7366877149ce0204d7dc08a5e64a1adb3b6759178c4eab26ca1806fc25fc0fc99dfc77d1811e61ac1e04ee82eb69ef7527962df1707734e4aca970b8a499eb70c2b0386942906945abcd9234b92e7bec33009e70786c39bd241da3905d961473e50367cb7726df8da2662fb32101d13b75032838f01ad7946670":hex:"8d56a9e4bed67a7eb0f7b8c5e6bbf04e":hex:"1c7d2744a56f5185b9cdf14eb9776ffd315214540daffc69c217dd64c7d0fb4a9f7b1ccc4c1e325fc046eec4feb8df35d32f492a28d35858ad1e9bfaf95211f111473c2ff799a124b308fba996b08f185103607605922bad319c6b7fd211f97c861565bea34948bfd751e4ce2591ae777ab1df8dc9e820cdad13066ed74303c6":hex:"edfdfa35b41c5642e5b4dd1769b635811a48ecf21915cbef3c9e2f8230953f2ed4fda8903ec7634f10d55aa58c975a6c6133a173c2aeb83d6d7fc6534ea1781dfc62408e7a17d255a983bd1c33d2f423c364893db8128a599cd037b2db318f86f1fbd895a64a9fb209490b7e9a30db8cdf42e348cfcfa7984e15c17db810ec19":int:120:hex:"17dff78f61d21de4c0744e57174f70":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #0 [#1] +depends_on:0 +1:exp:0:hex:"d69bdc9d35589e33ea9c2b956780cd9618e0df79d1083e69":hex:"d8a75de22fd3e2d50127c6fdeabc09fab1178875998319e1ea83c9745a1d5833c6ba9df08177c349dfa412e13e1927bbd4cdfb54a21c86c149be1feb4d9de99ffd590850875a3d9c8d9306971a9802ad4ca48f73d0517322525ac8463e3d59ae9895c9b363b6f0728d7585de78cbb49757bd1919ba2f2d6ba042d0781e7a79d7":hex:"abd4b94362501b8f307fca076fccc60d":hex:"1ad9aa99a4c8158ec08d21ebfb62604a043fc0c248fe08daa15a89f4a7855916af8aeb681ac6600c0268ade231f918fe508f48c9cfa998effc350fa117e2772f04839f8fa1a53bca00693ecd28db27c6507750404bd89af07451d66fb7dfa47065e9d3fe24a910eb27911591e4f4e4746b35359afada4356676b3c7331c610ab":hex:"52e88b54b410dbfb4d88092df52688ba9502b906752b4802aca5428437d795de0d3539945bebdf2bab070df4a7e630469b92fe2dde0998d44094cae7f21f84ea7806637fa5c73b138e87d04005ef1206ddf30a21f46c0aa718665e809ffc0b42b5250143604b20225ec460defaf554a8bfb5f69ef4244e02e9563c374a44f0a9":int:112:hex:"1024f8e9997f5fa4684930d17431":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #1 [#1] +depends_on:0 +1:exp:0:hex:"6960be8fe82061e9cd783cd1c03f63a00d60ce9fc47ea496":hex:"e0f574ddbb04831b5a86f40182f5f10d8667fe13c7065b471df157f67230c41b8c069c0218ceab93d63964be8ee853c567add2c3eab1670b03a51f9175e8e763be778ec43833cd716e1c8fe5cfb1d663149b21e06df772a3973fe1297d65188201cdb0c3533f5e9d40bb0664a97db60fc99d7e48eedebf264024006ca36361ac":hex:"672f4378862c82738055273c72555b39":hex:"e3a4dbce87edac519ce86349eed2dba0d371cef0d8f20b4dda3e1cd9f5799c9fd0b7494daec5bc995a6936c501212eb957ccc9ddd4c9b8a205cac122ba87b5c5a0eeba6b2af2cbc2326d953d61d089b6334ce03257203072f8e06b8c6f37692748a13e681082900fd32f0df6a3072f3a8b9bbeb3ea558e97a43d6656093d7c75":hex:"2a3c4b79bbcfa4af04baa8413f6f1d18c9c579060ecd0cc359fcdcfc0566697ff834f7dffec84b2292e8583ecb59c9e5e5d87913a6ccaacebf371f1fff67f0be749d4ea5f5c6f4c959e9d932414a54a8e25bf2f485ecce9e70990bbc4e621ce2c8fcc3caa66b0730c6639de1bfa0124afe351912279bc3ca363f4e6013496cf1":int:112:hex:"dbdd6af194f2578a0d0832d0cba1":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #2 [#1] +depends_on:0 +1:exp:0:hex:"2b7d0115612c56a1f28c6b3cb3d51c2b4bbd4cd36ccf3dda":hex:"3a88efa524a90b31873cba177a7e6e050dc59f42c934923db1e75fec924908370ad0c9c3b0b3c05adf12c6ef2627d8d16f832071c055aef5f581a39a8e7d9bed2629e26d5e3ecaed24048d744fba08d8d12132def62059f1a549044c1db121f47f10b3dc4a02849150aef53bd259d6814162761cbc9e1a8731d82101696e32d4":hex:"317a60c3c29440b8ba04daf980994c46":hex:"80d816bf4008ae51b9dd9a25c30cd7482f2289f5616c41d99881aa8f78b5efff84efe307a822174f3a5c08b381bc99b169b92057627f21dddc367723eaca2545ce3a4fba2b4633fd99459fb03e85d6d11ed041b63185f3b94f6004bdce556e2a0aaf811faf0153b3974d0bae3eabadccfc95474c940ecad5b4d5ea88f88b8c4a":hex:"f193303bb781164e42b3d4d25569a446c86646bc0fbc93059603c0b46ec737ddfcd55df8c90e6d806bd9fef90f2b122a1758bef5c75fcdff95ce44217d9b6b0e75e77656cc7f8a8cc47729c74faf43cbf08202e9ad16c7ef8c832ce5f97f51153e178ccc3c168928f3c328cd5b4c341bb0482f6a292cfa2fa85e03d95bcd4cb1":int:112:hex:"42308ffc76cb6ab3c770e06f78ba":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #0 [#1] +depends_on:0 +1:exp:0:hex:"75737e01a95c2ad9c860e72a57da646e01c2286a14dfec75":hex:"fa749799afcf2242a6000c4fe1e0628db53933dde99d672e3c7b24b0cd6533b8002bb7aa8633322f4ee2e343db3a0067ad44edaa398cd90ebdb50c732e8bf95aceb4aaa4dfd1eaca617c30c30c1a18761a6d24c2de0790f54f73e0802eb82ffc0124517ddafe8336f4ec6197219346deef4ce930e8ae20117e6ebe49a2582346":hex:"1060d78543be384e7a9dc32a06bcd524":hex:"528a6c34c3cb3aba402b856dd7c9677d0d88821686edd86287e7484b72248f949bbdfb640df27e3d1d6b6dc1293ea6c84be72c85e5ff497f5da74d796a21f2513385a177f29f2154b2362d5ac83c3897f368d06513333f2995b701fb3e5aabac559f6018fffd02cd6b65eba9cdc629067f15d1ae431d6a22811508cd913009f8":hex:"7e8774cb73468ad9647f6946aea30e9468fac3850b5ff173c7b346891ecda32a78b58df8d835328615f36a12c18370f3abcf021ed723830b08627767272f769a2105e4786451db0512027ce0e3f770fbb0ee0e1850a5fc479df4ad5ceff4fa3b2b9124c330c2e79d770e6f5e89acdc8d0ca9c758980dfefaaac41aaf6d472f8a":int:104:hex:"6bc6632bb5b3296ede9e1c5fcd":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #1 [#1] +depends_on:0 +1:exp:0:hex:"a326226b24222b3389d793b61b723e9ac7059495a1b597f5":hex:"1cc26e453a54c94c1cf902fe12307cce2fba4d5f0fc3bb63cdbac0dd0b5ba31d08dae2b4f054c86f3a3ee920d8b9f7ad8ae8b4eca090c8783cf35db5de3b95889a84f09ff3f70263c61681f00a454b0813813f0fe3ec38a6d30cc3c6a93c91a422743e7a72340cb012718b8a4a3b66a75f13e0165aa51ee4b00046cba12e966d":hex:"327972d0c2ebc20ed5bdedc8a3a7aee5":hex:"2edb1455bf4573a54ab921d31b7fc9e534bce0870eb6e973afccc3b1f93dd2c1a476dd88e705919caeb5d4f4a8516a718cff8858eb443ca7785579036cc7273570e7bf2489ce71a52ad623bf7223ce31232d8c9b18e52a2dd4519bb08d87301f3ae69dcc36c6dcb3b03d8fc39b6621f6b4471092e941ef090c9821a05df8575a":hex:"5a219a0d997e879ffeb548d43de8e4f32a9ad196dc425c83f766134735ad2c9ff5d9665bd54ac3efdc50bb4a7a04ba59825f31a0f3e530aef45bba00cd6479efaa19c85edb4734f91fdad6686e50f9cc531fcabce9e8397381b4d691da4a27b7c487e93de3e3a9e769e831c69b07697e4bab470ebff628e710efa17e4c184e0f":int:104:hex:"2b9ac273c059865fab46f05ae3":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #2 [#1] +depends_on:0 +1:exp:0:hex:"cf5f2d843042ab94fc4519d57d9229ea7e8172acf515fab7":hex:"0e20f5a2afffa4a5f9219320716c8a26e35a19c525dddd528e5f5f06f0da082f43272361f07cfdf57423f67ad3cfdda9cf1747c602a93747cc571adfabcc9d1ec1a8128908df45fe0ede0e14ff40169dd1ecbff7f4062ee7be0a1afb370c9d5103132c1fbee9262309cb05ea150fa862d6303af71677d2de9cafdb4ecdab8d5b":hex:"95b06c3ce1a3de73cf51e781b941097a":hex:"765c3fae74b6fa4b6ed4ca7ab9b829d76a7759c50874a38d2ecfddaca2365f7a143c9584e255608be829950393e5f94131caf4caa04aeeeb9d595e39ef3f9830246d6066995b2d40438f7eb0944bd452ab493b422e93a3e0dc3c0fc2a4b83711ac6693f07f035fd9d031242b6ea45beb259dc0203f497a77106392e4da93c285":hex:"f43628a227dc852e0ad931e23548fedfd57020a26638ceb95dc5601827a0691c44209d14113da56e6a1e44c72845e42ebbc7ffbbc1cf18c1d33ca459bf94b1393a4725682f911f933e3fb21f2f8cd1ac48bc5afb6cb853a09e109dadcb740a98e5e7ec875cea90be16bcdfec5f7de176eeeb07a3768b84b091c661f65e2b905e":int:104:hex:"77964b5ce53209ee5307065d49":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #0 [#1] +depends_on:0 +1:exp:0:hex:"11cf18bbbc1d8778faf40391c30ca417739ff8e2a521926c":hex:"a2e11ac093ab648118759183cd52ca7d5728ca87fe2f31eca28cfb13325e3e6e95974456857866dda78359023e2c998d2c93c6dfe8f72c6d4ac39ca0585a53fc074bf1124c3ada92e78462a445da23e650bf52e26b782ff50312ee2beb7410e93c8435f7b88dfb0ed63d9a3823992d796bf3ab147c33593c5e6193ef32f7a620":hex:"bdd9a2b70e4ee0cc501feca2a5209c3b":hex:"051c68fe0cd81b52fede137d0105e69c74771b770ea9b573ad92ecae86f420953f459755597f68c29f6fca39a27239faa940ce6c949ccd44c9f12a0160cf74a575753310f52ec5c5bb9c4474b85266494e63b6810ddf7a6abd1cf8244cebbf69d3198c4a09e8dccbc9429f81791f5c02628e9477b988e2bd10f9bd5d6731ad01":hex:"ca899a00654730d68219ca2ed9b23058a5f40150c237143b24245de1e440329e513690f00c0c52bbd0de8074fe5d7a50fe420470249227f967340efeeb64c424881c7f3a20c405d58ea81f2309c7f74ae572b30313e2d4b419fbf5f2cf90c6706a1ae1a800a883e8b00fbbc9dc28bf5aa4a329246bbe94df5c2d4524f57370d9":int:96:hex:"dd45503cc20493ec61f54f01":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #1 [#1] +depends_on:0 +1:exp:0:hex:"812481f8982b42b2fb86297c4b7c739652908dc498171c69":hex:"32b27127582ceac21f968f5418e24ec8b84617f4daab0eb007f02d45812e81d486dc50909d79221c438def535b8a55946f50297963139a6b21e139e810d19bc1566b374d080a387a646bb582dc738c44156eb6c8dad613586662418edcbb18fe688d271108318de71734cb571d442e4d9537b0fcb2f5c763b3fbcac010f5c4e1":hex:"0dad658c73c9c88dd927a502d7b14e8b":hex:"af44f747d77a83ef0944f3bac8e835d752bb55772a7fbd3c6af27ca0eaadd122c9af1e2a9f37c2ba42779ed8cde2199125378fc88c7d6d58edc01c65491c5efc6bee58e7e8bf72f1a69d3dba47b38a50077130cbd71accd3dd4f193a53c6f2d1df694476767f79f8b71fd42745ee5bd41e90a7dd50a1597445251b32de303169":hex:"003ae4798f6a0b97990d41373623e528618f9299cebdb0d23e3799f62bb063e5530eef7fc40c06af16965ff6895f675ffb81c004d826cbd36b5eec9bd3d90d785af03b64d12d311b6f90bcd75a40497d0fad5e54f829a097b25f7a9604f6fad475c9239a0f8d5589b8a76c6f7bc852a3b820734b426f59ee845ec3f09dd7d3d1":int:96:hex:"b80bbc002cbebfb4ec5d48c0":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #2 [#1] +depends_on:0 +1:exp:0:hex:"a6657a7a9ddc6b4595df94d7c6bee9d13ad231cdc46ae5b4":hex:"36857eccb5b3c220265a40980e8949135e840ef270602940d3394f3f679aed55217c1de175f6b48a16f7b394ad7d288bc425762f971b752d1372b369fb1c3a64970c8d18ad6de2e1a9a561a749e3cf9a8524e239f3121e8643bebee471e55fb5d54a3453c51b1747defac98ead8b25854ed1cae7ac44fd28cf4b1ed8988875c1":hex:"68621ea7c6aaf1e86a3b841df9c43aa8":hex:"bc25c38d3a200fc17f620444e404f3b3999f51ed5b860c04186750f55cc53c6423c44d0eee02a83af27d16b9652a7cb3d34a5cb19694e5399a272dacd56c4b17872fd23fdca129a4299b9c87baf209dd1cd1f355088e3f938e6d5053a847b5913f0b9135d6f290e365508bed73c61160a11a2c23aaed7551b32882c79a807230":hex:"de8bb8e69f9ff1322f0a6c30cba5a6fccd7d17a2173a86cff5478ac8ea4ad6f4e99ddd4149e6a9b24865cc8fd6394066e24a556f3f6d48c599592c56f06a946c6b3414e2fb47e14d1f128ef26b385912367f35082099c1f3d4ea86687f19f059c56dac21923e9a151567299416eb311f5bbf9a28968b080b0b200044668f0919":int:96:hex:"065f6c2b86891c719ea76984":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #0 [#1] +depends_on:0 +1:exp:0:hex:"20cf8c2c47cd583286157b45b575d4d69c793b4250274fe4":hex:"a64c2131c94fa827c3a510b23b20fb6d04579bc292d2ec33efc9eb31459115da143f73fba9bd8b03b67e591497d108f900a7279542b480bd3a13ea588a29efe66688b52c3fd58598c66d8595888e87b27734e6c5b2796cc60ab2aa3dd06a29c577de5bdbf0b6c69c7034f0181050f286b9300d214f549165a0b5b56ba8e40641":hex:"ab58d2e18eb83c20df94cd6b569c65fe":hex:"93ff6057eaaa9559d87e3276d4d900888cb1f56434ce2677ee1486a0aa8f4e8d02c47d06e6841f3fbe5bd72dd37fa9d81bbef807dca6961910844eb9611419936310d717e1843e7b278f48ae44a57c1f227a75fa8cbc7fd57c8cc3b101e036c8ef3043642c81f381561b61da7c9d79b6da9ec46f7cf093c29c1930b27c14f991":hex:"a3f621261af17ec4756245414280017fd36133f2f9ff89eb8979d4417b8f93892bbf7b08bab785341bf0c7b5e3643f0e33f036633e5ebeae7a750ffdfcfbab690291731e92238ba6b45859b309629224fa7efc72298d3cf1ae3b6a9e94797552afc4e3a46205f9bab7eb64e4a41aee0e45289704a97221b7118d209e0b267a68":int:64:hex:"ae53564271d5de5d":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #1 [#1] +depends_on:0 +1:exp:0:hex:"8a311bf356cb1d1f58eab411b45b8d78b88052f3c8ab821d":hex:"3e915e92f186fde05ad55a2597ceab81495abbaa0be107dbf6a375525d1157a322b1f65460dce0c3aa2bc08fa89f777dac4d2fc3e5f7f20a0d5e33373c7f1c3551369737124c702928726bd9db96a33bacb56f1d645fa02ca1d88629c547c0eaf9585ee23b530ea971bf439c67e3b752af882668ebe0c739b26c837887b9d2be":hex:"0569d05f3825d16aaa89e86812f80628":hex:"28494a12026eb89b46b6139573dcda0836a617e00e25e2daa92f9372d86c3c162cfec34d634ea48294c784825615f41e06e555cf916983931e3d6a7ccbb4448670139616e3bbf7109387a852703b0b9d12c1fbd966f72bf49a7e1461ca714872ccdc59dc775c24a85e9864461123710fd8dcc26815894ee8cf2ca48a4ec73b3b":hex:"9ba776653e8d9d240d9c1ec355027a18731c500928925e7c50ef83c6f36957073a8386ecbfaf430634cd557b1da1bf122f37456fea3e9b58a6e99413d9d16a2f1b40dff843fe16a2fa0219ad5dd8ae4611de53d7aabbef7a87ce402e62276addc7f44e09ae9e62c5cce4ddce5695db987084385ae9a98884ec97e67b549ad440":int:64:hex:"c669ca821b6ef584":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #2 [#1] +depends_on:0 +1:exp:0:hex:"82fc47638cfb361ecf7924c03925d6006cb99459ef5691e8":hex:"d14a550d419b8e03762429a7abda3b17ad7a1305e5fc639e71538285cd70d78fa30e0c048e2c32d2a7fd7f82c874d63ae922db5a77111b46caefbfe4feef4df19786e5fec6a4df84f76df412b1f06bea149f1996b41b117d00d422bba5566d3af5289ca9377f325ca1e72f7d6a32df6607bde194cf4ac52c28e8aa1e8f1c9a67":hex:"2a8e1cadd2f264f2ad7be9e7bdfa24a2":hex:"8088358d7c3ca8951d7e8cd6cae15844edabccc8d0fcf8f169a48cf434d4814f1d7d9ae410e5581d414f952f52b852eb10fcf0f2a67bea826ea2e28331f0597152e624e148462d5952f10fa363666d57ebfe036695e1e68f79161b991e20c8ae6095232e63fde073c79603135849c62f8d98a1d80608fc081171114db41883f6":hex:"e54cc95e845f4d1b28885e9b90d1d9d3cc51fd9d8fec9bce57de8781a28b4e5b7ab446074e84471d7a9a23748b689c354e402be77f9890a9c52a2eb9022a6a415e01285db1c6eb66d5e15f4216a4f3f45782677b6ccbf20ac7b35bd153f52a599712d09712ef1454ccf72ee48cca967f4917f1aeaeaa6eaaf8493ec7ff2dc1d4":int:64:hex:"093343e49b70c938":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #0 [#1] +depends_on:0 +1:exp:0:hex:"d3180703e1ec93b20d1ac4d64e85d5461d75f783bcd2f4fa":hex:"b7b350db6fc0796e9fd0cb239f561bf7e27b2aa26b8e3e76d8b737caa1c1c5ad624a32f5709e4b751f8c21172d4d0f4ba38ca4d1d0e2570c084cabdd0e8880b35140c84f775c3c301a9b260825e1fd75f9835777d6c0e23d359af1a5f7caef934b91bee521531582b639be2cca87c2991f5525f4a2f64c30a1453013d73c16cf":hex:"916d72d515d3247ba48828d4113bda3b":hex:"1002513035cb1d7e8b2710ff8c93cec55e2e2c2b56000d4c1182b5286736acd2d6f2fc9b82f71156dba6f77463805627e4bc38c96e091ecd945df7e996e7fc3bbfdae3d85ef1337fbce960fd1d60d06962a1669e9e8d20be151f6323cb38ef68ab5e838f02a0f379567f518f15d81b192cb25a42356807c1b9c02bef8309ff44":hex:"d590f2afcd64c574ece12c675f509efdffc01e1404cbafbc923c4b44390eff66dd839e6d800df67bc06f49f76911df3cec36a3a1521762d6d4a8ee602ebefde0178863443f918668fcde8a531f3b5ee0e4c379ecf3e75e7c59f753e41f4e39811bd3e7dd3d6bbaa1e81fdbf8bd976384a6c4505f7e4270321c7329bba7f15506":int:32:hex:"22e50ed0":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #1 [#1] +depends_on:0 +1:exp:0:hex:"02bc0a8ab5468123009b2c69aaffd0a20a1fb082b55a7ecb":hex:"8bf32af1632a7903f00e801ee6e5c690147c021be6886cf2462b2172786ab296e0feb96648e4a602ae6dc45e2aa60e6610356cde26b1dde3aa114c5449216a467fcde18332a6d482d24a1ee952379340d036a48b63efa092db4c30a95f402d57b9c837183e900b47805f170cfe9e69baea2b939799e983f7470bb1297f937bbf":hex:"bcfc15308e891f32506a50c4ed41bff6":hex:"01bff5e606a536e951213b23672db9074fa8bbf947e815d32cbfe30adc1e736517f86139840a4aa0a671b4e9bbd6a59d292db34cc87742c0dfd2d658ef157734c5fdebb3e5772d4990ad1b2675c23ddf1472e892dafe7bf140d614c50cf937923491662299ab957606f4ca5eed2facdc5c657784bac871fab04d6cd3ccb18332":hex:"b8dff03141832970c925e7ff0038394a0df7f35add3046cc56f73e3eff59e18932aac697456107b6da7da3249049c3be5c098dd730cd4bf68cdf798c3a932b2c51f18d29e4386cbf1b7998a81b603372337784307b0beb59235eba4d3e4810899f6d71a994ba9742aea1875878ccef1bf674ee655a0720bd37e44b33cafe5742":int:32:hex:"bd0be868":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #2 [#1] +depends_on:0 +1:exp:0:hex:"7c07d5ccaadb9e3ba5b5ddf380a7a2a175522b98e31e1d34":hex:"04d3e6bcd5ebf696fe84a702ffd5f76dcbe9679c909b36d41ce6362f229304aeb19896c6376cb3c25081f709af57d36f39f421ecdb70bed9f829558bec6e78823275fc11f9a2d5f773d27136d903ff08e5926338dfdcbc182825794e5f739efc1f0ecda8e53751edbe0d08963471fb5099f2ff31f76b479677bd6d186a409525":hex:"e4db5c6403a03daa703516763052bce0":hex:"b747d97f263d0ff6119df1b5332640d2e4568813adc12ed76175fdfffafd087456748abb267195688d2db41caef301117979dfd2db9714b352398594005bebb449ea20415fcfb2671253f69bf6467ce7f5bce350a834c4586eb03e766c1930e7e6ccf01283ea31b8c73d7967cde0f2a53cc46b1b50c48649044d6f753f1d54b5":hex:"f5faf7bdd99c62ec87f93da2ca3ce31e694df0a0fd04d61914f9a7a4235de20e0a406e297ba1099fff8c14e8fd37a9d6cbe2c5c572c988cb1ff87ffe7825e1947ea3da73b8b3633721fb4e08deb3f8fcae2407d73bd4c07f32b4f9ad0b1364003b11f84037a28239e96c3996874ba8e4ec7270bf0441d648f52f3730d30e3536":int:32:hex:"e0820c4d":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #0 [#2] +depends_on:0 +1:exp:0:hex:"dd01d48789ef7f07f80a7385e4d1b1734903bc6ec768c9f2":hex:"":hex:"944ed7743be9ce370cba7b7c9b7dece2":hex:"":hex:"":int:128:hex:"dfa0ab389c3a780f598af80200c84da8":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #1 [#2] +depends_on:0 +1:exp:0:hex:"0383849ed0db3e52743aa82fe8cd9173b457755be8bbd46c":hex:"":hex:"c6b8518346ec52c001697b7bd38dc795":hex:"":hex:"":int:128:hex:"48a1992549b627c8621e8fbaadacb16c":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,128) #2 [#2] +depends_on:0 +1:exp:0:hex:"936388053ee0116b3f783ae34f000d5fe2c5d712842d46f9":hex:"":hex:"c5426b20c014e472c7b85be2ed0f64c8":hex:"":hex:"":int:128:hex:"4cf0f6a45f3544e3d391375c8fe176b1":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #0 [#2] +depends_on:0 +1:exp:0:hex:"40dfcb3151a8dab1cb79a6a1e6a24fb55024d0e256bd4b07":hex:"":hex:"b8495cc54653e7ad74206153ea64c3cb":hex:"":hex:"":int:120:hex:"1d3786412e0ceb383de3898ef2cffe":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #1 [#2] +depends_on:0 +1:exp:0:hex:"83ca41d8b33c6134a14d8b30b0c36d5b799574dd925f3b8b":hex:"":hex:"fb9aca5b4932035c65b571d170fdf524":hex:"":hex:"":int:120:hex:"9787f7d68d2648963cb49fd7459121":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,120) #2 [#2] +depends_on:0 +1:exp:0:hex:"886e646688d573c2dcc8ca229a11b394b3400408dd801503":hex:"":hex:"c0744685722cb87717c76fd09a721dac":hex:"":hex:"":int:120:hex:"794fe4df0084c21ffeaf959e5b0382":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #0 [#2] +depends_on:0 +1:exp:0:hex:"0b845dc2c4e9e5a94bd3e8969300b16b45d3ad5eadb2e80a":hex:"":hex:"0900b3fa3cc9833d702655d285f904ed":hex:"":hex:"":int:112:hex:"dc670518e150d326921bd5f43e80":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #1 [#2] +depends_on:0 +1:exp:0:hex:"ac9fac2e32ab44a0774949d53a62c1cda04b132a3b07a211":hex:"":hex:"8cf6a81bfa21633ad95ffc690c737511":hex:"":hex:"":int:112:hex:"4cd7a6e4f3ec3d41d086e6abf14c":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,112) #2 [#2] +depends_on:0 +1:exp:0:hex:"9f9721ef784980d03140490f760313cc8a56424affb01672":hex:"":hex:"c104bd8482e3fe7359c85e0e94fd4070":hex:"":hex:"":int:112:hex:"3f682fc71989804ba74bdad04a97":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #0 [#2] +depends_on:0 +1:exp:0:hex:"f7c935f56970678ab89f6d97315a33efae76148263e95f1e":hex:"":hex:"1a91965c5458f4a1fde309cd42a3f277":hex:"":hex:"":int:104:hex:"ce266c6f0447623a3ef1f6f57c":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #1 [#2] +depends_on:0 +1:exp:0:hex:"30ecea6cac70a9de4f4f7f441d6b9b5608cca39d07c0ded5":hex:"":hex:"361e5cd21c670de39b5f0b2b89437f99":hex:"":hex:"":int:104:hex:"48a9621522a98bc6c0acf03429":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,104) #2 [#2] +depends_on:0 +1:exp:0:hex:"4fb80c4fd026c3f68ab8fcb8e28e144fdb3ba00d70295ebf":hex:"":hex:"ee552fb94a527d18d285d6c195ca7b2f":hex:"":hex:"":int:104:hex:"5ec97630ce593e9d560136774c":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #0 [#2] +depends_on:0 +1:exp:0:hex:"c0261023ee9f682789ce9ae970fb7601f07551259ef91945":hex:"":hex:"bffe4af76db75bc4a3d42b57c73c51b6":hex:"":hex:"":int:96:hex:"bf827b4526da77ab2e21908c":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #1 [#2] +depends_on:0 +1:exp:0:hex:"4fb4ab2071bff4ec239ac05c04800806df2c256a4845b13a":hex:"":hex:"3ee0e2e72eea437e46a873bd659b1c4a":hex:"":hex:"":int:96:hex:"572d3ec2650ad57eec84fe00":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,96) #2 [#2] +depends_on:0 +1:exp:0:hex:"193d5ebeb466d3fe68754bba413c65112ae29c5ca5e450c4":hex:"":hex:"04e9d31b3b1205cae37c435d5a5579df":hex:"":hex:"":int:96:hex:"71004356f266688374437aef":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #0 [#2] +depends_on:0 +1:exp:0:hex:"9a455ea1d9a78425a41d43e293e88de40dd6ad9ab2a63ef0":hex:"":hex:"c108c56a1b3261042adc89046ad1ecf8":hex:"":hex:"":int:64:hex:"213d77ed0534cc20":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #1 [#2] +depends_on:0 +1:exp:0:hex:"d6fff8797db2f1884b7d71e3ef3e5983234a837dbd0c2cd6":hex:"":hex:"6be4417d7c00fe9c731e0932a7037a71":hex:"":hex:"":int:64:hex:"68b6c28786a017e7":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,64) #2 [#2] +depends_on:0 +1:exp:0:hex:"86e6c451ea0ecaec9e365bc4831e7a6c092b65ee9bcf1b86":hex:"":hex:"6258168da407ce43cc18d6931497c1f3":hex:"":hex:"":int:64:hex:"cbf20172e75a6316":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #0 [#2] +depends_on:0 +1:exp:0:hex:"9295cc6458d907da5e7c356a7de51eb8e8d3031f72a05fb7":hex:"":hex:"c7eaad3389fc24a4ef96a711ffbfff9e":hex:"":hex:"":int:32:hex:"12508e37":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #1 [#2] +depends_on:0 +1:exp:0:hex:"308b6ee958f81a7fbf3bc386e167459206df9c1cb999d904":hex:"":hex:"2c61b991ce478d9aac818d7aa75ada36":hex:"":hex:"":int:32:hex:"32ead170":int:0 + +AES-GCM NIST Validation (AES-192,128,0,0,32) #2 [#2] +depends_on:0 +1:exp:0:hex:"873d033773218387690c2871448578d8440ef36553583928":hex:"":hex:"02072ec745c856c6e86873a0523d603a":hex:"":hex:"":int:32:hex:"e6a5726b":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #0 [#2] +depends_on:0 +1:exp:0:hex:"cfd9c1375dfd19e64b5e4b75022fabaa049627d5238cba3a":hex:"":hex:"0a745c6910b23c78b1b44c02f1ce11b2":hex:"0cc6724b9f3675619fbc70117bfcfb5871e903b0f01382e404793c1dfaff5a5b4131a7fc3041014941dc2c53871bee3ff18c08e9abbb13a8ea220cb89cf65bea1581eb8ac43d148203532dad8854616210ed7f1f9467e6b22071ccc8bb7e3bd89a0ed02a7058401aa4f2b5d0ce050092b650591282e66ee789bbf032dc105503":hex:"":int:128:hex:"8ec41e9c76e96c031c18621b00c33a13":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #1 [#2] +depends_on:0 +1:exp:0:hex:"6c9f16c5dff4bd8d1855995dcad1c4253759b6e2a833995b":hex:"":hex:"3f25e3210d6d9caa8725eb55c6813cef":hex:"7c6a66d930c95ce1028310cfa3670b77ffeb5e9b627a667859665c1dee8e69930c287fb1f1a3706ed1a0d35eb6d1becb236352a226a5b686bc27e1e1dce4ac6d5974d88b9812b39ba289b2490821319b5fd677da23fab3adbae4fb3630e2571ac887ed951a49051b0cc551e7ebe924c0cbb1c516f71db60e24773430dc34f47b":hex:"":int:128:hex:"5e000478b55ecb080c1b685f24f255a9":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,128) #2 [#2] +depends_on:0 +1:exp:0:hex:"a8e393e00714cd94de0347351b924ebd555003f3a297493f":hex:"":hex:"9c7eaf730fa8074acd372fdc53b726c0":hex:"ce4cb46e67d85c5e68afe61ddecb1a36da4de42774d45250d0d52b328834385ce1ceba96f703daab81d7a981cd80c469855e14d834df41e4c0c98873f3dbb777fc0562f284c466b701a530f27fc4e6838cecbd162db34b8e8a23131d60d1f9dac6c14d32a2141173f59f057f38af51a89a9c783afd3410de3f2bbd07b90a4eb2":hex:"":int:128:hex:"66bb46adf7b981f7c7e39cfffc53390f":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #0 [#2] +depends_on:0 +1:exp:0:hex:"bd356a8acd12b06de9f63825e93664cab1beae7f4112cc70":hex:"":hex:"72eaf459b8af0f787e91d117931e3cdd":hex:"9295b227be3e1faf4e969be6c7f20d507431cf5da9e2a577c9b31538058472683bd52f0ad3f2fa9f68159c1df88e7dde40d6612f8abb0f11a0078419b34b558d9144ea6596a09e5d5548b275620e5a3096dceb2768d2f77a0b79e0b963387d3016ecc2f155d9182e3209d97c76329b830bb62df195cb2be11223565f496e751a":hex:"":int:120:hex:"2ff4aecc90e2de9a7d3d15eb314cc8":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #1 [#2] +depends_on:0 +1:exp:0:hex:"80ecc9587bc2cec1ba87ab431c7ed03926169c01eba19729":hex:"":hex:"5a65f279f453572e169db33807d9b52d":hex:"29520d9020efa1ecf514e39a286f398c7225b945608d4b57ec873ae8bfbdd40e4cbd75b9b535c9f171cd7913ed4b21e09d6bb030eaa27ca58b08131817113c852b6cbdf550d94dddfde8595e689470cf92f9c20960b936ac0692171158e54041155482f29e4acae41565d87f5641d1aac96b8cb763b7f1267ccdbce234d067d4":hex:"":int:120:hex:"83dec0fb36463b86270656681455a0":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,120) #2 [#2] +depends_on:0 +1:exp:0:hex:"94345293fb7733fea9c8b94be2f4fc26f8c3655f583e2b0e":hex:"":hex:"8bad4f3f289b9f4063ba39622ba2b7ee":hex:"7e2b6520d7a554e612d01f462606c0e6d0181bafece1daf54f4316d707483a5dcd4275a08caecc1c20f3e32872fe3e57fa62d598949f5e49ef0efd53e918617e0a140338c007025493f2e0f8dbe5fca4a57d1db6333551bbca79243a73ae8a68dafb3089998359159df916ee6ba4f928a6a173390f15f2ee6045d578dd757bb1":hex:"":int:120:hex:"da305181a12517420c6f0d71fd3ee1":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #0 [#2] +depends_on:0 +1:exp:0:hex:"a3915523031c3caa58ce02c2b1e6ee2eb42cdaf31332432c":hex:"":hex:"d5416986beb3131afd6b7967836d243b":hex:"ba4e883147c8f07afc08735e6e439798bec60e00ed3f5982f66d6b82a9af7580934112a9858f83abbd71193190298f0683453d3f8388c475fbbc8f9b6a3d2c77046b73986a54cc4559c57cbb86330267e04bcf5fd583c6d2968a7971da64c99d98623676154b0ee413ba531ebf12fce5e06b4ee0617e43bdaeb408b54d1b4445":hex:"":int:112:hex:"f273fe664e5190a506da28ea8307":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #1 [#2] +depends_on:0 +1:exp:0:hex:"799d3ff266644128f330ceb8c028297991b2a5593e4afa3b":hex:"":hex:"9d27061dd9d50817b3086f453f1f401a":hex:"d3b5c420ac597daaac7503cd17f580e94ad779fae0d4199ada2c7da7c4a611228752375647a03241f29f810d3a6a74a140ef9651e4a6099259f7d41ec4e51a02917e8cc35edf7f60ffc473805f56f0ad51fcc767670157c050c3214d36f831a54bfeb7ab2039cb10f7919b89b0f623a572aaed313983b105fdff495d979b8a84":hex:"":int:112:hex:"e690c9afdecea2494b6cf5a576bd":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,112) #2 [#2] +depends_on:0 +1:exp:0:hex:"7480905cee8be7f42b9490936041a19b060331712882da55":hex:"":hex:"27500a09506e0133c88f65e77721b547":hex:"52832d4118fddf182b21513db25d54a19220335f8676ea35c0941d2a38a3aa536b8c9cbf093de83c6b24da3372baba2826289bb3cac415795b9bd3ea62bb9b48450978e79b936cd70cd551e580a6de3418a2be0f4c1f062954aed6adc94d805e59ff703d239fc2318b80cee45c57f916977b319a9ce884d7e02726fdb71c3287":hex:"":int:112:hex:"52a5721e98ba1a553d8e550f137c":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #0 [#2] +depends_on:0 +1:exp:0:hex:"042db3f8af95ad68966bce9ca0297ed41b608683a37457f5":hex:"":hex:"32d3e97edd3f393da5abc3827cae1e67":hex:"4d7c2ee6e024e95a6e684ded9898f5c7fae7da8658bdb40560dac6495e46a691e97c047e66046b55e8cf9b02d31d3caeebe3a9f8aeed756d6b0da1ac5d4ba2c5e7b54add22f681ab1d5a2ac1463e8447e08592e0c2f32605bd02f2f03c925a2159e5bdd880323f4ce18a826a00962ce418dbbd5c276e3ff30f1cbaa4795d1ce5":hex:"":int:104:hex:"e2afbb95a4944353ed21851f10":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #1 [#2] +depends_on:0 +1:exp:0:hex:"7f5ea90f99fc76594f0f06448321bd4bb5e494a5e351e41b":hex:"":hex:"002a5da3c543ca56dd7e5b013b094f70":hex:"b8150b50e36de85158a96d2096678f31f179c8765ae6ba5723ca655e890528eae96d438f9d9365575dadea3cebb4d7df3a9d5323f93696c40781a6661dd4849531e672f5cee7cdfc529416c9c3faa889d0f66ee4049c949c3c8459680f490bbb0a25e50af54de57d9e3241e0dff72604af55827b9c4d61b7d1a89f551cea2956":hex:"":int:104:hex:"db9fd90a0be35a29f805989410":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,104) #2 [#2] +depends_on:0 +1:exp:0:hex:"da287d34379d56f542edb02ea673bac097150f87648a57b9":hex:"":hex:"6696034b1b362927b89ae1b7ab5297d7":hex:"45818b7b69b05a121fe5c573c9903cb11477873b24a544ba919baec78d1565f4ad0766da58bfabfaa17ac3c628238a4d38b5c0b14b52e397bcac991408dd7b322ff614bd697ce2b5b94ca155a4442ddd9e502c4a5f81210c32dff33481f4211897db38f619b308f3708d554bdb6c7b8a4d2a80ccdfd5f70501c83502a312ca8a":hex:"":int:104:hex:"8e65d86edc071446454a1bef34":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #0 [#2] +depends_on:0 +1:exp:0:hex:"1782ac334cbffc92769a170c3cd43915f735b4423ebb4dc3":hex:"":hex:"736f2f24cd04e26d38e69c55b38cca7a":hex:"5827d391efec2f8f102e5f053ac496e2910248a0eb72e8a0b3bf377c6349df02ab0410a3d28bc27abc7cbe582a03000db57843565e4fb06c4078de75c3f1a21130d55befb7ecb919ad789a4de2816c3a42d4e9b32e38d980c06045987d03739cbe7710d839c42f04f5088072c1a1044c3b89809b780e74e54ec135fbe4129ee0":hex:"":int:96:hex:"c6dc3c4ae52f3948503d84a4":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #1 [#2] +depends_on:0 +1:exp:0:hex:"20529c374f21c97b0a8f96f7bd5bdeb3fcd2b12db30b3ee4":hex:"":hex:"e6e45b7c28f7fbcae658acb533614e48":hex:"b41290031906709ec8048f450a940eff0422a6ebc7b44666c05f17aec9debc1bfecce62d896d5df4618517fb57ce7b04ef1579ebb2636da0eead063bc74ec184b0a69ca3eba675fc7107bb52a49f93783608677565205ada7bf5a731441e44cede781120a026cc93cfe06a06fb3104a521c6987f1070823e5a880cbb3a8ecc88":hex:"":int:96:hex:"e9ec5ad57892ce18babfde73":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,96) #2 [#2] +depends_on:0 +1:exp:0:hex:"5634789b29e373760ecb9952f4b94ca76f40dda57ba363dd":hex:"":hex:"7cd1d2d6beef44a6d6155181dfca3dc6":hex:"0130a67935e2df082a95d0bc6dab17093fb08746a809cc82da7893c97c5efc0065388bb85c9c2986a481cc4bbdeb6e0f62d6cd22b7785a1662c70ca92a796341e90a538fe6e072976d41f2f59787d5a23c24d95a4ca73ce92a1048f0b1c79e454fb446d16587737f7cc335124b0a8fb32205e66b93bc135ad310b35eea0f670e":hex:"":int:96:hex:"4006685e2d317a1c74ef5024":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #0 [#2] +depends_on:0 +1:exp:0:hex:"f0072110572321ad9804efb5bcbc2ae7b271b1cbb0f4897b":hex:"":hex:"604ed8056666b17fd27b111afd419375":hex:"97f68c00513b2247bc88a331a3ffa1208038736d6761b3b080884a8dd46e0596f2c00c1a93bceeeee814210e57d7f1cbdb4e0c2ea6a0834baf716945af9aa98e2826ae0eb5717b241ede2b9e873f94c1db9eb5e1b25f75827c25849a2c7b92098b54845ed81f52871a2b0d12d317846cec34defaaafc3bd3cc53a6ab812bd250":hex:"":int:64:hex:"64881eaf78aeaa7d":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #1 [#2] +depends_on:0 +1:exp:0:hex:"e91e8c2d6928bbaf870e141ee34d3a56d00dacc8c7e50514":hex:"":hex:"6f3d661a3e321844d1fc12d5ec2becf6":hex:"fc8e5b45ad1647f9dbdbb6b437abecf0a8ac66065d0e250aa2ae75525455ee13adce8c59d643b96de9002d780db64f1eb9d823c6b9a4238171db26bf5d05153d1e3c839b93495084363b845fed75671ace0c009800454596674217b19832751252f051f3995776a89209c1636b4f4b28a364bccdedb78ad36876745c1a438406":hex:"":int:64:hex:"1f4f495adfed6c1e":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,64) #2 [#2] +depends_on:0 +1:exp:0:hex:"138ff9c8c556ffe7637f7602cae428d7e20dff882d44ddc3":hex:"":hex:"38d7005fadee55b5a0434d924d971491":hex:"3facceb047e486998c945839ee5eddd67054bbb28308365b2909dabaed29fd5b7b34644043fa443165e07b20214710cd652fecd816d9273c700d6828d216db8f3ceaa9eed0e251585f4ee5ba4beb3c0582b8128a3ecc01f4b29cab099ba2a8931e56120802fdf6004a6c02e6dd00257a83adc95b3acb270e8000fd2126b8eb83":hex:"":int:64:hex:"fa8aed1987868388":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #0 [#2] +depends_on:0 +1:exp:0:hex:"1187a34ccb75fc06dafeca0235186c64ba929adac6cf6e49":hex:"":hex:"9dd515d3481f21efbe43198f623b34f7":hex:"8a1b00ea5d1f4e451cea71b3d2fc9bb03b9790a8ae8ae262b3e97ebf34911f9d865c8810b9fe779fff701c72f3639654e60898d1f57eb93381749f0e2cecb4ee342f5f34473215d5c46818338ff688637217fdfa8b7ee552db01973fdb6084c3c20b530863eeb1ce798046890994f5625df2a56042d62742097cc10d512a543a":hex:"":int:32:hex:"83f45529":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #1 [#2] +depends_on:0 +1:exp:0:hex:"4c1052610d05fb77543b6b517eb64b487ed902f9969a420f":hex:"":hex:"90f4c93301371158271a8f46df1c86c9":hex:"83d009a1238f8aa40e36cbddf08a5f3d96403a03f7d079359cd6d3d0c719bf79c908654882919dbc6c27db34007b6732cb344a0f4babd26b1209ce6b134a8d2318f9a38af034b265562097b63794d7efee306e97c6ac0a991b3764ecd936c87000fa58e6689e302f12c2851b1ffc950dad7a553c8c67e01a2270e1e5e9caf30a":hex:"":int:32:hex:"30b3fd85":int:0 + +AES-GCM NIST Validation (AES-192,128,0,1024,32) #2 [#2] +depends_on:0 +1:exp:0:hex:"3dc62e54957bdd1968be71b7d205fedaa291349d69f2854f":hex:"":hex:"b8bce0f9263688ca41c4cefb26e79453":hex:"22b6d92d8908bbdbcd0ff35299eddaf0cfb039befa2d2d83c896f373b92091d145f1771c58d60f94d3548d0cbbeabeb796d7632b5da3c66ef75cb41a35e7d1b032ccfbddbb9423e0ee054bd56b6288bdf1b616492c85393e4134ff9c066b23f3f626eac63a5fe191ce61810379c698de62922d3bdbe30697a3e3e78190756c3d":hex:"":int:32:hex:"67887aeb":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #0 [#2] +depends_on:0 +1:exp:0:hex:"f170a6a761090355592968d67fb3514b8bfdb41cbf121341":hex:"a050f858c87d56dfcba3ac1ccf5ba60628b3ab1b89845682a95b7f291c80f6eb1cbced4fa21e3584e21528746231e7311ec319a0fcecc329e1a7aaed0a8548e613e51db78c86c8d0cefa15e30b745b952809f87d8a4a7bbefc76a8eb824827d4334201bda7743dc497ef5fffa2812e67f2a04e5c10bf464179c6178db932ecd3":hex:"e02ef73aee414041b137dd3cae8f2765":hex:"":hex:"c08c9bccf298c8a352cd72e9174f57dc9bf64d65191a9e97b43ce70afacfe76feb5b2695d72ea4635fa94144de02a54333a77c7d4adcde17c166b303f1d664e6edb081a85433a7496f91ce640f113935cdd4e7ad14c95247506ddc6620913b5c67422f599ca00b95d62a9371e44c5af5295bf96743d0f1228c96e95af3b4d366":int:128:hex:"d64d9ac91548dc1bad618509633e0c25":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #1 [#2] +depends_on:0 +1:exp:0:hex:"2ce5a40618b8bb2d9fc1d87a3333a9cd4945cfa838c8e0c6":hex:"4ad4d103da3fb2ef8adcd1e0e823f4a857f1d6fa6273bb66574033c18ba2f760951ee0fdbe06c5cd3a0a30bd11142450f2d7e71af2fa7b9556b663fc30766508aa24e1fb2219f30ec23a6cd48b58944541d1f3e3fbf596e2ef263bddf789e7a666a68638081f0ec1a6cb3cb7feb0fddbe323b307675324ebceb25cba6d9002d4":hex:"0c4b6c940d091efee98bf27fad79b04e":hex:"":hex:"ad611dd6ebaeb5a634d4bfba9f965948ea79d16294b976b7c8bb57240c5d13e10a9fe7a5b5d39143000b4f24fc331cc4988685c8d6401593a420c12e6cbd7cded06504d6a1034f70153f7b5019084a66ce818761841cab52d5bcb2a579a4acd9df50caf582bc6da2b94d4b3b78922850993ccec560795417016e55cfab651473":int:128:hex:"317596eefdc011081f1dda6dae748a53":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,128) #2 [#2] +depends_on:0 +1:exp:0:hex:"f71d789a63213bbe17aa14f2956e9da2496a1efd1a63f6a5":hex:"f5bf20dc6a11ce5142ff34d6c4771dbee4e74790c4ccd3cb5af408a5c7bd706bac550d7ed56805f550efc7648ab501fbbc63a1070402626c5788f076ae40e6bef2b9aab9a4bd8550fe38f7cdb0fcca2657ca26f1f729074326f45ae932182905d849b1534d3effe20dbfc3fc26dc6453d6544d481e58891405dbf876d0f254e8":hex:"17327996f18c7096fc5b8e375ed86f47":hex:"":hex:"fed961a497502b2e49043ff29b9426a1e864a7fe0a88281a1572fbe62203f071710ea1d77873906369b195919a7bd5b44cbabab6eee23c3692cb8b9e4db7ee595b8d4b063d209b11d64150c45545b7eda984144e1d336a3bd3f187834bbc6950b3e7cd84895a3a5e27f8394a9aa9b657fba77181c9040b741c12fc40e849ba4b":int:128:hex:"9dba8faf9d12905970ba0e29bc7e9dc4":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #0 [#2] +depends_on:0 +1:exp:0:hex:"83182ba753ac16554e873281599113b7620bdb042704bce8":hex:"6915d46189fcb0f9ab9b838da2124ce06398d638fec9c1c53f07a43fa0ea09feb2bf868fd1dd521f301f9f38e2e76716038f34cc0d18ab9bf27ac282dc349002427ca774e211027baacb9f6bfad6fd7885a665e508f654bb018f0323215153cd3a5b3e7b83482c08cf07ee5ef91d64a671b3ef22801ff21cfae95d6843ccdc16":hex:"805c6b736d62f69a4c2cd4aa3745a615":hex:"":hex:"76dcefca6305ded697be4488513cc3fd3d9f08f06a7c1a9133b9b3fb0f44badf5c7544881b5babcb873cab912cc8a00337fc36100e6a5ad998eac5d8568795b41166377c5114757044b9b73206d19fc34b6378a06d55b5d5e9498c7693e818dd962af9b9da2345f4ebf152f33fe85f3398a65ad7dec823a1b1155c38cf67df84":int:120:hex:"746c9972aa8481253d0d54db77398a":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #1 [#2] +depends_on:0 +1:exp:0:hex:"b176e7a68da4c74aeb91760448c0257b1e17101299e1405c":hex:"691c436811f82e747468571f80fa8502ef5f25936fca58a8fb6b619a7a95f4938da558a3b26a2f09c8fc1f5bd347c7724d9fa377d0a52094bfaac88f3fa9b3dacc2f56d880e825809533da5980a63e01d6199fbea07f3d070e29c5d50e1013224f0ea86e7c008e3a2e63df394ef6ad93ea97d73fd4429feee495b144ef3a0d6c":hex:"42e2e70b0096ebd489bfcf4d6ac0f2a4":hex:"":hex:"81f9c34c5b0668fd58ec8822c6ba75bd7eb0d1741260fad6ad5e637903aa29d5f5facaccb4b885f62e10b7371f9b6b43e3aeb69bc5093bcccd49f3ee744e49f87cd2a2c36c808c47e4687194cbfd4faec4da66b99e3d4ced9cb8ac6ffb94d7fef3ae2b92b9f613f2bda3ca6c8efa9c6df8bec998e455f6eb48519e8f8ce4e526":int:120:hex:"26d0921dbb7987ef4eb428c04a583d":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,120) #2 [#2] +depends_on:0 +1:exp:0:hex:"8bab5bf1cd8f259129ce358cc56ace2bbbbaefa79727f66e":hex:"57385955b9909a0856bf54ad25d00779cd7d3dea78e1ae8965c4b7a568934d15ba1a7b2ab899f69fb1b864bd4d529319b51bf85a9b63de9cd51997ee4b2f015307cc42be9257e1b0a84e1c9e55a370476bff0a5325b21850f5b686a3bd4f1599f36d0772c406047b8ef29245c42ade862cb9d25b1e108db4f33a42dccf45c985":hex:"ca5beea7dac2d9d24d548463977d5956":hex:"":hex:"67deff1accc4f279ec2eb4c2a515c17886371bc4847bdaff4aa70e170775b64855a6fb0d347baf39bb53d7239b7a63ce451effc69e8d8c3e544b77c75170a68cbc45dc96ad238aabeb5ebec159f38089b08dfbbe94e1d3934a95bd70f0b799fd84a8f563d629a5bfbb4eb3d4886b04e7dba5137d9255268dac36cbb5b5c8d35a":int:120:hex:"f212eaad0e2616a02c1ec475c039e0":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #0 [#2] +depends_on:0 +1:exp:0:hex:"bd0e0d0c7907bdb4b4e60510f73d8ab2a30700349206ce22":hex:"e6835a650047033a4940f72029857fae6fff2773f2aa0e4f7cb0a4abe86b6e8cb0c3e468637057f7eb20d1d30723e3c3107d0f579e31a4c3e6fa8133e1b1b51fd21a8aa80ec657c4f674c032bc4a2d3e1389cb877883317c4451ab90692337bd8aa6e9312388a0acddb508fa477cc30eb33a886e8fbced97492c9d3733cf3fc2":hex:"1f183eea676c7ed2ead9a31928f4df5c":hex:"":hex:"9f1a3017d16024dbfea4ba9df5154a6a2c794f00da070043c17f0204f06f637c8fffc760424187dce4fef044faccadefa1b1bd818522915e389d307caa481af0f1f767c38216fa048f621d46880afca5c8fc582853dec95d19d19cc943e9a1861597c99041c59e8bf8e7245f9e30b1f6607843a978d0ae7a4e0f716dabc9d9f6":int:112:hex:"4ceea20bf9616eb73cac15fe7e2f":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #1 [#2] +depends_on:0 +1:exp:0:hex:"d59c476dcef60a45be253d5cfbb24742de9e3879bdfe6949":hex:"144696d85126c682f8446fcc2724fabe4b8840d46f3de6ae2ceacb2f06a1a80fed430e3a0242f4f7c308611c802c8b8e9c992b78a5cf401fe7a4671bf081f97520919f02b66e8bffd4fe3f4a69cf3d16667e7724890cc4b66c6ae487d2d987bfacec424fdc9865af4474b04cce03fffc828b2df66d99087e63f35eca52abe864":hex:"9bca808f02295477f2aa7f6ac1a7bfe5":hex:"":hex:"9d23989edd8dd9911a3f5a80de051ec7812c6ce018e683751380ff990a079f3502ec0fabfcdacf6c1fb2503094124c39ec531b5d29ee8e4e46c324fc10dbe0f31e9aa56522bcc7085ccf768425227cbab6db4127671a4cab7bc65dc1d3d9d81469493329e29a9a1cb7e5e088e84eb243493cdf1a49b16fc8d4ea2f142aa9ad23":int:112:hex:"d8b20d72d95a44dfb899bc6aea25":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,112) #2 [#2] +depends_on:0 +1:exp:0:hex:"2f1594e840375405a682dbc1836344be8c6b3f3199ee7fd6":hex:"9bc6b715c65347a383f77000b3efb33b16019d01605159e09c116ded52d20721bcdde3796b6f4dc33cb29ce1c48438e95d4db6102465440cecaa50ca33ebce470d8986663652e069079f9d92ff167b3f7ae568218fc62ff5a7be50b3b987dab4fc7979e5967bb0574de4bc51e774ba05f9780a49ac7b3ea46fdf35804e740812":hex:"7f1f4a80210bcc243877fccd3e7cd42e":hex:"":hex:"773d6901ea64d6840ded9a05a7351c0c74737ad27e7c3dbd38dedcdede94722ae67e88851ee471aefc1f80b29a7312fa2a6f178ef2c9dde729717977e85783e2e49a1fa2e847d830fac181e95fe30077b338b9ac5d2cfa22ff9348a0771054322bc717343b9a686dafda02d6354cf9b53c932da1712b9bb352b2380de3208530":int:112:hex:"fc3e0ca7de8fb79eb6851b7bca16":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #0 [#2] +depends_on:0 +1:exp:0:hex:"88a6d441c1b7472aecf92c294f56f3c1da1702d174eff431":hex:"eecc12fbd00c636a7ff897c244593239d2dbca9d1f370660c9bf9759cc41dc6e95075516f8d7fc06fa91ff68701777725171c2dc0767a1953fac13008d77065cce8ee329283d3f64adb8a298aa100c42e75d62e47fbf5134a21b826fcc89ebb18707c0f4d54f6e93220484706a23a737341c601b56f6a28cc8659da56b6b51b1":hex:"058a37eaee052daf7d1cd0e618f69a6c":hex:"":hex:"0f5e889deff370810ed2911f349481dfb34e8a9623abd657a9a2dc14df43dc8917451ddeee5f967af832296b148d6a5d267be4443e54cef2e21c06da74f9a614cf29ead3ca4f267068716a9fd208aefa6a9f4a8a40deee8c9fa7da76a70fcb4e6db8abc566ccdf97688aaad1a889ac505792b5ede95c57422dfec785c5e471b0":int:104:hex:"5fa75148886e255a4833850d7f":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #1 [#2] +depends_on:0 +1:exp:0:hex:"abb4c4f8d3c44f07d5a57acba6ccf7852030daa84d09e13a":hex:"24d82903e5074beb9a769f24a99b18c7b53c160a3c3ae4065335bec1c4170aa4c656bd7c87a8a13c0ffc6653c045445bf8a135d25a13b2d44a32c219adc6ea2695fb9e8c65f3c454dc0e2772f4a4ce51ff62ad34064b31b0f664f635de0c46530c966b54e8a081042309afb8cf1f337625fa27c0cc9e628c4ae402cbf57b813a":hex:"c9489a51152eec2f8f1699f733dc98f5":hex:"":hex:"3e5528ab16aed5be8d016fe07f2ff7ac4d393439c4fe0d55437a68967d685815e359fdb8f77d68241940ce7b1947c5a98f515216254ac29977cc2a591fc8e580241442d08facbdbee9a9ff7cfbde7004346772b4607dafb91c8f66f712abee557d3da675bb3130e978a1e692fa75236676b9205341ead5277cc306f05e4eaea0":int:104:hex:"fecca951ba45f5a7829be8421e":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,104) #2 [#2] +depends_on:0 +1:exp:0:hex:"cbce5e6d0fdcd3ab08ccd86115149b5569584dfadf40256d":hex:"3974339a1b90b19fd3857d812a0e59dcf43f9b0f360839940b99834ddedead79785396ab8fd0fc0e523c06f0555371fd5bc857a95c3ead26536e6deb1faabdc776ac7cfec4b60d9c24b0856ecf381efd98f941d5b2a38108922d9cf1113d1e484354b55f9c0f09d95a77fd30ec9cc04d19199931e187c56fd231f96fce5e1eb4":hex:"ae3a25be73876b6e9dc88573d617653a":hex:"":hex:"4f57be0de00ca2c7c52c54b931c235fecb4ee1e5a30e29bf68f57248bafad87e484cc68465d9f64bbf502cefd2c84e5596c3c8e58a9fb51a8c8b132579a94bc32e92f7c7247dc5f69fda98727c423de5430f01b37d77e3ae6bcd06eaf5625e5c7c9c228b9dca5aad8f571369fe0964731bf1f143f2f709c7ed51641ecfc88ebc":int:104:hex:"33375e21fd8df9f0196198b4b1":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #0 [#2] +depends_on:0 +1:exp:0:hex:"96779eaa8699469e2a3bfae8a03fd4bff7abc62d427ff985":hex:"a343fd32fc513e0e9772acbf99feafe9de4b54e404807999b02e921e0914b2d64d0d402ef06f31e1db852899fb6db231ad4465af015b0c16407fa3666ef5c2a6d52d5b4f60b0f7fbcb13574b2aa5183393f3a91b455a85b3ed99d619bc9c5c2dbcc4f0a61a7b03e5ab98a99cee086be408ce394203f02d6d23a1e75df44a4a20":hex:"cd7dca2969872581d51b24af40f22c6f":hex:"":hex:"74422abbde6e4ab674025735874d95d9fe3015620a8f748dbed63ef0e2271063b6c0d65e00d41bcf4ea86ac8b922b4d475f904c0724f0adebc2eef4a3abd0f9efd75408cc054cbd400436e0545e09e6b0bc83a9c7d1c1717589d180c7b1d4fe4ca18bde4d9b6bc98481b7971c7eb81c391ac4dd79cdefeabb5bbc210d914d30c":int:96:hex:"b0e425435fd2c8a911808ba5":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #1 [#2] +depends_on:0 +1:exp:0:hex:"39bfb4cf533d71c02932e1cd7b800dca9ce9bca843886962":hex:"de76f63ecf9c8d4643599f4dc3f9ed837924915ce4216759013cdb46daa0a508e06bcdb77437b0a58c40a0bd30a05ca41433218c6869f1ecd26318aff27999a2ebbb651de8e03061b8ffe3e14060720eb35a8e4dfd8c870aa4562291e3758cc1ea6c4b0fafcf210e10b31f8521bb0f6b29e8450b0cd6f8c8196ca2f7acb807a3":hex:"d2b937bb5d2ea7d54d2b96826433f297":hex:"":hex:"0b0b4c92f06b17103ed581fb32d46e874fea2a2171d32aac331daa4d6c863f844fbbad72e455cd5a3ef941d8cf667fed5855da6df0ccd0c61d99b2e40a0d697368138be510a2bf2e08a7648850d2410e4a179a6d0193e49a135524092ab1f842ed4057611daaeb93e7aa46e5618b354a1091a9e77fb92a8c3c0e8e017f72deb3":int:96:hex:"a188107e506c91484e632229":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,96) #2 [#2] +depends_on:0 +1:exp:0:hex:"41b7d80ae487ac35aa498e5939a0f27baeedf48a494c8e91":hex:"c26d4b918a0c967141fb5712a28698d16640d200b2934187b81ec58486b706ea1caaeb654e5fbbc0d078215aceed7d66939e0fb54d6131d8948cf58ec9571646ca75a051c2b5c98fe16f7733d42e5897b0263272015042f3134143ea3b08bc65292d8d31f30f2ed9830ccbfca2d33d290c28f4dad07c7137a4ca05f432a457c2":hex:"626e1d936b38cf9c4c3a44ee669936ed":hex:"":hex:"8998e799985890d0f7e8b0fc12a8a9c63171e456ef5cb211f836a2dc7c9e3f4d1cd6280f9b0c469b703c55876b57cd1d8cef70dc745e3af8438d878cb2fe9fb1c5b2d9a2d90edf3bc5702ef3630d316574c07b5629f0db1510460af8e537dcf28d9c5b5cec6996eaa3dcde3354e39f60d5d896d8bb92718a758adb5cb9cc17d5":int:96:hex:"69901cbafe637de5963e7331":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #0 [#2] +depends_on:0 +1:exp:0:hex:"2ecce8fb50a28a085af744b44bc0ea59d6bc2c8ff1f2ff8e":hex:"54300bfd55b227b4758cf64d8a3f56cb49b436adb4b927afa8c4b70d2584a6cba425af4fbc3840dd6f2e313f793cbc7aca8219f171c809cf1eb9b4ae8a9d0cf1a7aa203d38d67cf7719ce2248d751e8605548118e5bb9ce364349944a2205e1b77137270b83555d5d804edba2f74400f26d2d0d28eb29d7beb91e80ad66b60be":hex:"b7e43d859697efe6681e8d0c66096d50":hex:"":hex:"45dac078c05e6a2c480543d406c23f3dda63f2b616007d08fbfb075a90eefab8dfbc26d334266f5d72fbc52800cf457f2bbc8062a895f75e86df7b8d87112386c9bad85573431ccfcef6a5e96d717fc37b08673bf4a5eecedf1a8215a8538e1ddb11d31a24cb1497c7b5ba380576acb9d641d71412a675f29d7abd750d84dfd1":int:64:hex:"2dfe162c577dc410":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #1 [#2] +depends_on:0 +1:exp:0:hex:"6773e627f6c49a1687a3a75d2ee6754ebfc2628bdfceba28":hex:"eb0a64ad510968c68a816550d9fe2eccab3bd8409ab5a685a8638f81b4b50a9a96318bff4e86f7f6e9076960be8eef60e72cee4ea81f3ba269d8ab4c9581a54638421520a6411a83e9dc83b6981a9dcdd9e4a367d57f156d131cf385c01a736b327218e6b6468d317ff78a01f1588c359a3a9b188bbe5d3ffad6b57483a976d0":hex:"ad85becb03a05caa4533b88940ca141a":hex:"":hex:"959658fdff5fd802fca5c5a79d59536ba8ef1359ac7bfff81264c7827bd31b8f02ecb54f309b442a54a5a57c588ace4b49463f030b325880e7e334b43ab6a2fce469907055e548caffa2fe4679edbe291377c16c7096a48aef5659ad37702aed774188cb4426c3b727878755d683ed8c163a98a05f069a0a3c22085600759170":int:64:hex:"4c0f4621b04b5667":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,64) #2 [#2] +depends_on:0 +1:exp:0:hex:"1c086f7404c14160f33d6efde231eda610f92fa55ac147b4":hex:"fc8e5cd81755e489de7e3ddd2b587149ee013bffa2ce198c514641b0e1659261edd60bdbfd873e30e399869748bfe56ba543ceb9bf5fd0e7ba2b4dc175c52f28a8a02b4816f2056648e90faf654368c64f54fd50b41ea7ca199d766728980e2ebd11246c28cfc9a0a1e11cf0df7765819af23c70f920c3efb5e2663949aaa301":hex:"71f154f1dc19bae34b58f3d160bb432a":hex:"":hex:"6d60da2fd060d2aec35faf989d8df33f2413ba14842b0406e38a6a847e191eac9f4570cea647c3988faaa5505ea20f99132df2a8799cf0543e204962da1fd4f60523d7149e0dee77c16590d7e114ac5d8f88fa371dcdd254eccaa8316ee922ba23a0a07b289739413ddffc2c709c391afee9289252ddf3ddb62a4532a5515e35":int:64:hex:"f47bae6488f038fe":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #0 [#2] +depends_on:0 +1:exp:0:hex:"bae1b3eef91ba79032117c60fb847d46f18175565d0ed10c":hex:"9b71eeccdc91cb5f7a567a9189774f4c30d96477b88ac553df66b78a56e5c9e0986a17d80c811116d31985acfbf9d7a9bed291aa2fb6329457a836b3f8f11c16416f0a3b86dd9c717c8a050c6ceb5c27d8e2ee0dbe63f3e1e4f0aff4809e1f6f6ed64d31d494b7399cfa0dd9446321bd4256a49d0793a10a670e3f086408428e":hex:"cec8b66a657e4bdf693f48ac52e60770":hex:"":hex:"015a318acb6198189ce908ab1af28578a37a48beeed772c6ed4dceb0a3bcb092df85f653234c56a25c075c8e028d4a8d90d974fb0477834ae2de8d5df53d0d03a979450b6e7a66fdc9b11f879ea9072699837f2de7192156f8e5d9411fd83d97d31fe63ece4e4326ff50a24fc75004a5ba2bd4845b29e0794696943dff1e5d6e":int:32:hex:"9cf6f90a":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #1 [#2] +depends_on:0 +1:exp:0:hex:"7c1582240ad301f831902c66334546dd681c12308add0870":hex:"d4b716b49858a23aad478581cbb6dfd015ae550d76497229b5b1776e83f2ded8542675c63ca6a007a204b497ed2ef71ca125d91f386be9b4213cd352a797a5d78a1373f00916bb993de14e1a0af67524acfcc9fd71daa32e5def9a3f2dab5b3bba4d2f9f2cfc5f52768b41157fe79d95229d0611944e8308ec76425a966b21ec":hex:"b6f4f3959914df413b849d559dd43055":hex:"":hex:"79964f8775c78009bca1b218c03056b659e5382e25e43759c8adfa78aec48d70b32ffd56b230fc1ce8c21636a80a8c150e5dbb2bd3f51607d97ed097617963dc6e7653126fe40cb36a7f71051d77e4f3b768a85ee707c45d33cc67473f94c31da3e8b4c21859002331b5f7350e3e8f9806209255ceac7089176e9d6b70abd484":int:32:hex:"79e5a00b":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,0,32) #2 [#2] +depends_on:0 +1:exp:0:hex:"fd55a356943824d20630b1539627ad1a9dcd8ee2cb4dbf49":hex:"b8d8d6dd0631f9183ca858033a31dd583d3ee3b9510fcc69d8cd412016bf854b9edcf65c2831e63d72f4cb61a99f6f4e6dab0c2ce9c5a8cdbc179ae93aaca2c8a5b848a15309be9b34e5226aa9a5908f543fdda983fec02e4073edcc3985da5222b53f8c84b9c54c78dd8b2712b59209463595c7552e28f2a45f51cb882c0354":hex:"aa89a122c68e997d0326984fa5bef805":hex:"":hex:"107a9ed561e6c45c375d31dea321c7b4a4b7641024d2c9eef6a103a750ba15e1acacbcae121510b4f56f19d29e6fb3e6fc06950b1daa521528f42284130a40e5a6c1b58b3b28003673511abcf59a4b9df1548a00f769d8681978b632f75e5da2cf21b499a24fbdd4f7efe053d4a1b20b240856d3ae27948e35098aa617def5bd":int:32:hex:"7f9c886a":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #0 [#2] +depends_on:0 +1:exp:0:hex:"4cddc8f525640fc0a0875c65b788ea75c673f84f4aacaed4":hex:"55e3ccb855c1fd6d33e28d308485fd85abbd8ade1299936996851d44dde063ddc37962f9f67e95df02eaf3d877516240771c469be2abf2ef6c8dcbb79eb1976f825b109f752079957a7c981faa2fcea599cc52e262b84f4c2031821619f0be6fa3c38d660e9eb3e0d5de2da6b83de9866eb3efbc6a2dff27e52587c6f79e1c26":hex:"1b883a89413f62dd6d507cd70c048855":hex:"eeaf21bc317660b0e2afb9cd5bd450ff0bfa6cfa7e49edad600f71b971347e93b9712a6e895540c665a1d8338f61b51da9e0a4a9122409824287ba4bc06bdbba10290a40b31b5eae9dfeb6471f4a0a0c15c52a2c677c4d472630d4078ecf36dc6008faa0235a688ebbe2662e46a49b1dd58cbee82f285f3cdebda1dc54673195":hex:"18d11513661296035f6f42d264e0b4cc7ec47f43b758c6dac95e5e3b3834362eb64447d923e107a60cd66ac359cf3a203f9070eab9fe61ae64a86606c9b50a97a19e12f731de28719fe178c9713edbb4525b221f656a340c867405c41bed3bbcb9c6da5cc6a4d37acd7a55f251a50fa15ea8f9b8955606eaa645c759ef2481e8":int:128:hex:"dec3edc19fd39f29e67c9e78211c71ce":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #1 [#2] +depends_on:0 +1:exp:0:hex:"3b8c31830b1139a60425f6a34387f5ca2be6f5a5074adf13":hex:"95f4ea90729de0f0b890fdf697948053f656bddf57e3d461e7ee1770161904bb2cbc8c2f801481bb54145af760e91c8b30cb22faa87efcc6f01e3f798af0bd460475754726514d53f419af2f2c373c76f05bf57d3fc1b763f72ba0fd2682d9d1d76f6ce8d55b56fc7ba883fad94f59d502244804bb87bd06f1217a4a6c5055b5":hex:"ab5bf317ad1d6bec9cac8bc520a37b1d":hex:"5a47d7474be6c48fa4bdbb090f4b6da494f153a4c9c8561cae4fe883000b81769b46cd65f4ce34abc3e5c6880a21d12c186974b0c933a16ba33d511e79b5f994c38e383b93eea1259d38f9fb955480792206461dd29d6d3b8ff239ea6788c8e09c15be99f094d2d5980c6c1a8efe0f97f58f7725a972111daeb87d862a90a7d0":hex:"1d0211d7d7bc891e4fba1ba7d47ac5a4f3b7ba49df69fcfde64bf8689b0eab379d2f5567fcff691836601b96c0a3b0ec14c03bc00e9682ef0043071507988cf1453603d2aa3dc9fa490cdb0dd263b12733adb4d68a098e1ccd27c92fe1bb82fa4a94f8a1cc045a975ac368e3224ba8f57800455cc4047901bba6bf67d6e41f94":int:128:hex:"23681228c722295c480397fc04c848a1":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,128) #2 [#2] +depends_on:0 +1:exp:0:hex:"9c2386b948f59ce651888451021772287f14a92d807d88a8":hex:"44f00c8a7c84e8207ec15a7be0b79c88fa347e2c3d5e8d07234536d86513bc39bebfff02efb9ff27280eb37f7e8a60a426538bc1e3830bca0e76faa33b30719fab51578d15df77893bce8740f50c491b8b9f1739a695c78406b5ee4d56f80d8d564b586b0f22ffa86eca46a9d8134a9507c5b9ad82757ec51b18741abc61f23b":hex:"7a1f7d0be4c7f8869432cb8b13527670":hex:"f76ea9d6e976616689709700a9638204e616f4c1c3a54a27fb0dc852990d81dfd6787aa5a83b9be5087d3f7dfcd522044911fa4186511de1957b80338025c6c4aa72058aa3160047cf42166aa0089e2ec1ac8ea6d9f5f2c057f9f838a72319dbd7bb4948da3bc87fc2036a0e7b5e8cee7f045463152ff80a1711ef1096e75463":hex:"666c4d6d3f1bec49ba936eea90d864e8ecbe0ccc7b23872a4ad7596afaec628a8165a70397289a10c67d62942e1c158f1489a9de44443ac4181e74ebf2562995c9182b57bc960f4b5d3e33fb7cf7a0c32a59c716de23639de9bc430712524d74a087647e27ff1af87a2aa0cf0b58978ad8ed616b566225d3aef2ef460be7393d":int:128:hex:"53d926af7bbf7fba9798f895d182b09e":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #0 [#2] +depends_on:0 +1:exp:0:hex:"5852b4bbfa623e5e2f83b888f5eb6cbe06b57299e29a518c":hex:"8cc85e520b45a85c69cd80072642ef1500b1e0a409c435d685544a6b96d3224cc40e5fe8a21c4959b2891d4a53bbff03db9939c655e6e92222c6b44c95204827bd800c74666db64907894bc4e3043fab318aa55a011ab9397592ced73f07a06282c22d9a57dd7a37eadb02f59b879b030d0a5005226c461281ce3061bf26de56":hex:"b96f4bda25857c28fdfa42bfe598f11a":hex:"0bfdc1b16eeae85d550a97a20211216a66b496c8c19030a263f896958e4d1decc310b955523e314647edcbe3f69970cda8e07f8b81f9074434fd86b8ec5b3fa8b155377ad28050b50523d3d185e5869bc9651d97c56ec6b8047c20d671f6dc657f4cdf73fd7d3caf4b872f3fb6376eda11b80d99cf0e85c4957607a767642da6":hex:"b148312074ecfc8f118e3800dbd17226d55fc2c91bcbceeae2a7ca3b376f6d568dd7fcb5c0d09ce424868f1544097a0f966d354455e129096ec803a9435bbbf8f16432d30991384b88d14bcad1191b82273157d646f7a98507dc0c95c33d22e0b721c046f1c13545f4ed2df631fd2b8fc4940e10e3e66c0a4af089941a8ad94a":int:120:hex:"e3f548e24a189dbbfd6ae6b9ee44c2":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #1 [#2] +depends_on:0 +1:exp:0:hex:"2bd897e969ccee405ba9becf24787a1e1be17a571442c6da":hex:"50b8ade5e6547c350c3f43a35a3cb641459c5ef902afc706ce2fb980b275fda62e8974d1577ef65ce9fd854d88caa10295d1045ed7563e9391d60700b5d2a4a7ba5f3de7a7d1541780b95a08eb3f0996d96aac7ee838b67ee869447617684c08566647a4991e31829907ebe4b32cfa46c0433a64f864b8b9316cb0ec2578ccee":hex:"fef6a08d92b5b9bdae4c368fcd0cf9e8":hex:"fb3144ec6d93704d625aa9e95be96351c6e25bccf1eaaaf9a1d405e679efe0f2da07510ab07533295a52cdc1f5a15ef5bec9e72b199625730e1baf5c1482f362f485d74233fbf764d0b6363075cebd676920a0b315d680e899733d6da05d78765db159c4f942a31d115d53f1d89cd948bc99c03adad1eee8adcef7543f9dea39":hex:"e65ed5b6d0f51f8876f483f3d8ab8fed78ab6c2e1cf50693c8511e1cc9823e1030740ac33f05a5aa0d88205bb3071a087655f28eee7d0a07945d25e3dc00221a1dade4170cab9084c47b82376d5d439bed99150811843b176543f7944b1dd9684fa9a52117c2335dda750d9de0d9b3ef718123b6534cb012080f6ef8eda8d4d6":int:120:hex:"468546d4199b9d923a607a78fa4b40":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,120) #2 [#2] +depends_on:0 +1:exp:0:hex:"12141d5834b8ca48b57e0892b6027c997669dac12fe60411":hex:"cf475b50672fd8cc4ba84d17ab1b733fee2073a584d5427155f144ddd945d4901d5a9d76e3d6ae55ab3f9514861c83bca7d53868f35bdc8606a167ac83591be30ddb954ee173ee172e8d7742a71c0fee04ccd16fb5d54a45820640405209e20f8494f08d791a2a15f5cb848df689296a04e4b01e2c19bd8d9ca8b4525853549a":hex:"b6dcb39939a31df176dcec87eb8db90f":hex:"daf4e0cd0b29343defb65562594b2b6fd3f005e6255500330f77a0550c1cfbade5f5973e836ce7046bc2b2ab8bb7983830ce6ce148d0998116183d1aed320d28adef9ffab48e0f6d6451c98eb83fafc75fb054991d123965dbddcf74a2c01c746bbbc8276b77f6732cf364d8a4a5dbf5aedbbe16793e8c406ba609c90f0e7669":hex:"4c2d979b9c2dc9cbbd6d4ed04094285a44df92e7ebcdee7feccf04c66c45137a7df12110b8af805f5cae9b4a225c3f8dcfd8f401e05c6ce937cbfc5620acdf3a4917c5b857bff76f3d728cf6a82a5b356fb95d144125d53e568b313cef11c11585d310ca0f7f1234090b1b62536885e9e39b969060ad3893e476e88941fe2cdd":int:120:hex:"99cec94a68d3e2d21e30cb25d03cd2":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #0 [#2] +depends_on:0 +1:exp:0:hex:"14b9197b7980d95b71ce1a1de6577ce769d6af4cb45f7c8f":hex:"03b37942f12435f1c19dbcff496738207dc92edf1ab6935b564e693da1865da67fb51e8a838559ae1640da441f22ee79787f1e909cf3c32187b41a48fbc595df1c097fb37881b329fd7b30dd1e05d6052fe81edf2e10786acc8aeeb4fac636aac9432c3be3dafb55c76ec85cc13881735609773350b95eedbdb695b2de071a03":hex:"cad0cfa7924e1e5cff90d749cfadf9f8":hex:"283c8a38c7fc9dce071d4ff9ed79002a6862f9718678b435534e43657a94178353b9ec7e5bb877db5e4f62a2ca6bd557562989363c6fdedbd7f0f3eeec5445c41a2a8bc98117a1443ad4d5dd63a07806622cca8ea6f9f6019bd511634db28651b916e2399bbd84b03f8ec696ed5846f30320adef22ae6d164aed09edcfa25027":hex:"83940097301e9867623c107d4447b250bf6db7d06f9e07b8d8bc6b72b079b725ea1f4b5f79bb80c518bc69a2bd73cf3aa7b88162773ac5b27a2dcccecce66e158ec0875937910e0b6f396cc7d7cac5d53b0fddf3cd70b570a647245a5264927be1b2d9c46fbc6a630b21fead46c4f35af1d163268e49a16083590893e6df4671":int:112:hex:"3e3f677e68208208e5315b681b73":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #1 [#2] +depends_on:0 +1:exp:0:hex:"80e2eaa70362203b7561b135db581cf32e9cd816464f0b2e":hex:"62cc2db32584a8d90f348be32224bfdcefd1fd25c5cb05c7e74becb4b40ea09d6495f73adc1fd23d148c11849bd825efdf15e144587f785770d2aef2788b748c338373a0ea43882141bc9f7c693a291c512cdcdea6d5defb2efa2324736df7fc4b434d7f4d423fb1b8853ec3fdf2c1c2881610a8d81da5de5e761f814ed38e35":hex:"3d7e99ddea0baa45e2f9f2289d2182a3":hex:"71663fab717ec4d9da34d4851437f4504dbd71b65b0d04eccc513282c351925c23892958b4c9dc023c5a34944ef507e0b40857d8b508ab7104d13c2fbfce2d086d466291aaa449ad36977837216a496ff375959afe4dd50dc2620a062c926b939ffdb144a656bc04bcca8d1d4fa0a9cb0a5d713721accef2d2c9688a77bb42bc":hex:"1c56b492f50fc362c5bf70622f817e1814ae0b69db7e3055fc9e690d2adb940f9a78cfd7e08044671913baec663d9f9af6dede42fe16d200e8421d22066009535704b05b3775ac41359d7c2697e2f4bec40df69b242392eb30e2d8a664d84cf95ec21797f1ccddb72926cfdff22848d14e373f5e6c3dd349196464c98dc38365":int:112:hex:"e0c1b140cd7bc4ded916aab8780e":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,112) #2 [#2] +depends_on:0 +1:exp:0:hex:"4b7aa649cb1488a658b4387451bf59852e845ec7d2273c69":hex:"245251595d10d719d8d00610d391735fad377b60d7430c7db488488c1ec25c12ee0dee3aac3d7dc19aa602924a1f27a2cfa8f6354315db93b5e4d2b6e8402c4254921e683ca681dfb3c7f433a97f119e01f2acb20988dced8494e086395351f2af356b11832472cbcb109c13ff92f10a4c8fe69bd264c8933cded19a980bdbd2":hex:"07b50b1aacdadeb03e7488458db03aaf":hex:"2a7970ee97d612b63d2a0c29e5045ddfc6621c237bc270b3147fc0191de199b6923947e3bd3750de5155e1df29caf96ac702f948c38619e218138945595156cc5f1dcfde0d1d6a5aec48ff37c9ff2b2209a904c59593779820ea68ad95898c7ca0d0d81583c44feb0fec30665cc56620a8c9408e4275e60f5284ed7c0e58285d":hex:"6bd53e4415765f387239c6664f837371b39f6d7ff22453211e91de5dd14272784fffb4f6b2c0bb8c6b7d1cafc55133aa0d54d410ae383008fdd87645655062322fbaa06df0a2d7ccf4cc170d1f98ec6a7ad524a3e5b07761f8ae53c9c8297faa5b5621c3854643e0085410daf5bf6c7e1f92bbbfc3691eeff1c5241d2307bbc2":int:112:hex:"78d37215234f9a32571d0d8b1e51":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #0 [#2] +depends_on:0 +1:exp:0:hex:"512bbb490d062fe5ecc8e5ad95920a9e9b78bec6a7694dc2":hex:"862f2724ad82a53e0574c0a2a0515bd86c5ed0b5ae92278a78ea1a90c03059d08a91d1a46678aef862b56d0320e970b7f941b784841b4d8a38d056f2bd352d48c0028086a36426bbc1436da9e021dcac705b6e03649b426cebd7a235f6d060ab6302d777fc9316db4a85e8c1387648a8f5ce2398a247413cb9374124449e498d":hex:"2d14fb3e058f97b7c9e9edd1d97cac7e":hex:"290078e63c81abfe99010b8344ff1a03dac095e2473d7a31888102e838768892e8216439dc3355aedd073892f4449d9d4d3ea6c25a9152c329d24cc73eaa0004832691740e60f17581201c8f7f4023d8e55faa3942ad725d21dade4c03c790b5370d4cad3923527c20ca925a2ce534a652ed7e032cb1c7906aebbdc24e6b39a4":hex:"44e78cf3a2ce4a5e498315cb8d5e841f926408921f3665d533caebe0a7fa6c164b3d2c0b21ff3a608a7194e3194fda165ada8d5fc2e924316aa4ce201531b857877c5519f875eb49e5908d8d81b69472d03d08c785ee374c5fe91b16aee173761af7ff244571fd40aadabb360f38d301463e9da8cf8dc44d20848688ab3be47b":int:104:hex:"6037cb18f8478630bc9d8090e2":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #1 [#2] +depends_on:0 +1:exp:0:hex:"d3964ee03ec5e500f2f8c05313b78615420183fe2950be32":hex:"b9424e4a79a08a7937da1da15061c1eb9a873748691ec9c1fc76aaa164bd34873d07437d203c92c0e89c0c5befedfbb17f721f576473253617547206fb2b340945536cd7a049864d099419cf3f7a9154c0ac8d676b0e9ec02947caa4057560af347ddb46002703f3531f27b2197790ba135e3d3c0709c86f4781890deb50f3ba":hex:"d3d4e5fdf6e36ac75b4d51c47ce5b8f9":hex:"6146a97a2a1c709458bef5049088fdf339e4fe29cbdf519c93d525b71c9fb501c4b58bef49d43cc7699b18fc89cee1a4a45834f517214a77fb3b91d741977308e1585c474245802118d0e2c7003057c4a19752a143195ec2a57102cb2a127d2dbefe1168492e072e74c5f6ee102a0c371b1fe2ddfd8ecbc04c6f42befecd7d46":hex:"a2ae334bac969072e754c0e37765ca6253744941a35587bb4feda54233a7a59f037e971d254c67948b16e4c35f306c0984f00465399405ce701ba554419a736cdff5a1b4ae5ab05e625c91651f74aa64c96ab628243d31021ad56f535eae33a885b45730268f900b6df0aff18a433e2823ddb0628a7026b86b3835160e5121b0":int:104:hex:"817be7dcf7adef064161b6c42d":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,104) #2 [#2] +depends_on:0 +1:exp:0:hex:"7a8049f521fe9a00f7bf566369e540a48ab59d83305e2829":hex:"67243a336a10b82a0a8638b35dc147c14ac63b20977922a13de459ae2cfbdb262a79004c3a656dfbc073ec8878595e24998dc44b9435439af117c9635c479676f6edb8f522cf01571be5aa5b5bc7d1cc3264436566f8d3c684973d1e88d46282b53836a1ab5a698560e5bf7629ec12cb141867f684b369546a1d8bf48315b6c7":hex:"e4d81f71e1de8cf4689bfe66a4647f15":hex:"4cf6733482c218af832e99970d0717ac942ebace0fed4ce4dfa1f710b9e131a21cc03dd3ced25b78bccd1991a30bb53b463c1440b6543b19af91e31c18866c2acebb78c2a340b930518e61a63ff8d6a6e8e7960523de40a178614dad4ce5ab253e1090a097f8ec00dfeecb46aa0e8f772f01c4e706de7e824386a13944600542":hex:"cfa8ba247ada9e6b3e5ab7dd0a7108574cc811c2986cad951168559ff697b77684880ec266f0b7d87a2ff559e368a85846becee312bb2991692d928a7c191cfdb7f1468f8b84be4bb592ea640743443bd4941a8b856c57be21eb22fcb3f6c0a80728ddc9dc5fab1c77dfceb91699009054c5a4eb0714a10b74cf0e09fa630299":int:104:hex:"1dcee251cda10b2ea8f2bfe6a0":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #0 [#2] +depends_on:0 +1:exp:0:hex:"657567a56e585c84e4033268f08f712aa280015b77cd657f":hex:"96d889651c4f3f5120bee233f6395fa0bbba1f6548b109be568ff96f11d24e34d67beb6c20268feba89240674b0b4552d0a6455d43e8edf943da3d8d785a5221df8ddb3a98d2fc611ac7362aef71f8f004eb455a16d1dcac488ee83d4f11c4a00c29d9990c5a2a97b897d67e51faa40999b1e510ac62fa4859123cdb37d202ae":hex:"94dc757b6bdbfe925b762923cd0a08ed":hex:"a2c54e8da7dca49c73550bd1f5e68449295f062d5dfe5aa4201bdf353a2a1ac9c3c61f2b5482184cef481fa378a1ea990ce203c2c7d76993c62b415ece06b9b7caacec0c4147c0cbf292e528d97c1a176fcb1ca6147cfa4bcce92cbdfe617738a92273282c7a65fcb997bceb867ce01ec74541582d3961dddf3a2af21cad3ce6":hex:"55a5d07a77fc37090c4206f19483aa3cc03815194ded71c2b2806ad9563edfebfcf962806ba829373947e3e93f4f39794514ad7b6dbc626e29fbc35f90f573da33ab6afb5c94383fd0fdd1ee074d650d192f6d08fbd1e24a6966a81a2ffd83fab644ee914952de77e9427262314ac47c11a44bf7d2890f9b9980499bb6a1f692":int:96:hex:"41c72043f6116ee6f7c11986":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #1 [#2] +depends_on:0 +1:exp:0:hex:"61159242d48c2ca0c30377ec2ad701135adb62d113c9f9ba":hex:"8ae40603f6cdae4b63ac7b18b4bcbb83c65867c2ae270102efb6f00aa8af5d0400dc95085910a50a16cbcf71f06c3f3eab71345d59c6054aaac02971111c7146add8c072158e0b374d481bb540036a136ccb91523f96f24ea237940ab011ad38f2a3095c0785df91604be1fe7734cc4119b27aa784875d0a251c678900334a0b":hex:"4fda7236bd6ebe0b316feeea31cb5ebc":hex:"ed28e9954634ec2c9e2df493062abf3ea3e199299053a15ce8d6fe051d1076287e4e7c0b2bab0a599b763a29d0aab680626f280c4f5ad94b7792d9af532681f6e4eb2672781f2342304daff902d03b396853eaf585af4d3bf5078d064e9eea6e94e667722f15c004f4cf52253a5c65b75319b07ba539558d8a2b552390a21577":hex:"dba251e35422f60f902f594bb58dce37131e8ae06b5f40ad23c4a70a5e25fe24c76982c9bc11a7f4e3cc62d8c1326170432633eba1634972a9bcd093b08e1c63ece07c4be79cadc888b0408e40c09636e1cf1e5e9a6f2ea44eea5409a2ffe9c3ac9a18ad7aa9041f08eb109c01ed90732a8afe0694319ef98a0269685b4d16b1":int:96:hex:"b0feebfc8324fd1e9e40f7f0":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,96) #2 [#2] +depends_on:0 +1:exp:0:hex:"5b4c37150f8bf0e14e0bfd37ac14e606dd273577007f24b4":hex:"48c6486b2691b86f5f107e8fe0122a821248206d2dd3ce898a2bb3772202ffe97292852bc61513529ad95faf6383b5f6c5a7c16c4cbe33cb02e5e50f32db95ee2962aae1c9c0f5470b3baa216cc19be5ab86b53316beef14397effb8afba5b5159074e26bf5dd3b700f4ea5abd43e93ca18494e1779b8c48fcd51f46664dd262":hex:"664f553a14dcd4dcba42f06e10b186aa":hex:"4386e28ebd16d8276c6e84e1d7a3d9f1283e12cb177478ab46acb256b71df5a2da868134ed72ef43f73e8226df1f34e350b7f936bd43caff84a317b1e5b2e9a2b92ccab1e3e817f93222dd1e2cf870d45a8458e57948a649360c6e2439bbcc682383b50bcd3d8b000592c3ca599e598a03b9953af485f1ecc22501dcacb7110e":hex:"05fdbb5ad403d64011e15d27cd6f5a2247e018e479e58ad3fee1e0e8ddd9e114c0e82f2c947ff9af525ce752f4aea959463899542b85c9b413d065ea175103c3b3c35f56eea52af2c54ec08a1d5b7cd5ee4f59de8be86512b770e42ab176b6b70ccbcd264d6d5cfdd2e52e618dc24251ac339ea38cdc446c778d2db3c7c3e93d":int:96:hex:"77f32401db21adb775e7f1d0":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #0 [#2] +depends_on:0 +1:exp:0:hex:"531a380b109098eafd997bd25bfde4868d2a1ca781795e9a":hex:"466237db78d4c770a658b9693420a2e087c978fcc434c9ac82f3e2447b2fa08be32d2ce6da25846555ffe5764234b07b35dd1d1bcb710e8a49f918f2c873681f32765b092a836e9418faba61dc59a254c923159be16f585e526616fedd3acfe2748ce19ee03868ea9836bee2c6acb1b821e231eb2d30d300387c93390d51e3a5":hex:"ad079d0b958f09732aaa2158f6215573":hex:"09e002c2c48beaf1122411e8624522a9e90cc3f2a040c52ffcb91136519277c39fd6a79292b8835e0fbcaef2279218106aaf75036590f8a46f6b6912053a3b391849f7e204f096288d6141d5f80c7f91dd2f2b6ebc1ced6af8216e0a594814b56bd592df800299b29e26ed7461ba3f6f3cf151b9c10ad634a01d9c5e578aa372":hex:"d1f49f94e6fbef7e21abad23e16c06fcdfa75a8c342be67baea8e0e57dbcd2971276e993faa124ac81e6be18f68af303518efd926513cee9dbcc5ef6cf5e9c068a1210e53fdd56776148d51597e359dbaa0570b4fe15476ccc9aa79f7c765755b6f694af4269b9e18fc62a0d47708bca67dcf080e200718c22bac256f641e7a2":int:64:hex:"01ec395c99a17db6":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #1 [#2] +depends_on:0 +1:exp:0:hex:"fbd7a92120ff973ec69b6a8189c6ea827ca20743a8781518":hex:"1583c1578a8c8d272a970f05d875f199e497c55f03f10f7bc934fee21c30379dad3c580b3f99304a5747b61fd43428506439ede2c57f5229e13da9cb7cd6174cccbb397e98fb90455ccf3ea3b1304f432a070a2eb5205ed863326b3b86d4eb7f54ee2ffcd50ed6ef01b3ee216c53f4f2659a88fb6343396b2ded0b389c6266c5":hex:"57658c71b2c45f6ae2d1b6775a9731cf":hex:"45ca8a168ecca7a42847b779ef152766b902192db621d2770b56c7d592207afaf52d19a6059feb76e96b90628995bd6517af3f114e97af8d602a493b77405e93095fee6761877dc292fab696a4303102dece60951cca20cacb171abdcfd0ef6da6c90b44edba63b9b6087d876b3fff24dea909899ebd0d0371c424f51a9a84b8":hex:"58a290cf0e774293d1b55f5ef8a305f68605c0c81668b8a1ba95fceeaa65229404e18fa54dd811a6af085c98b8854d0f956adc2aaad742cafa9ed53d7cb445451ee7a4dc1e8399ec7e5b4d004ecd22496565bf444b2e3d82ddf6a6d5e6256c5095a699d7ff3f8cf2addec73e21013ee6f3dfc0a3abf316ea5ee1d6943bc394e1":int:64:hex:"af737ec3512da2b4":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,64) #2 [#2] +depends_on:0 +1:exp:0:hex:"54bfc8379e0a8180b931c5188c95ab3ed3461d6e9004d182":hex:"93327664eb576bbb64e4ff061874346b4e80a779cdeb1fbe630bf5e4307d4f2c5d5ecc94aa8bdea755c1af165fc8925bfcdf128c1ee6571e9f8344b22dfc90ed893316031661a9438b305396f3a80452c9b11924163b7fc4422b00dc58ee0e674710239975a2cf3253bf2601cd155e09547a5f3be1adda84a4b29631a8e13161":hex:"9d15df8de4150f44d342f2031de3611c":hex:"63331936d2972abd44c1c9f62e42bfa932dff8cc75d9f555f5a7847d08558e76f5393e08909760edbef8d2922a7ca8e1c0c505ca627c02af73253791bb35ff080b4db7dddf4c8b304999ff645227cd79f13ac87f9c963b93a79a0e946e5781cdbf1b4b1967a75314f19c7219e3b69dc2c24ba09fbbdf7184278f82818bdd0958":hex:"18ff87dccbc24c396190c7b37c4a77f86e609db7fb2b326802714d0f196b00b84af887f1b3bd30ee0b0b192d0801ac4e59ac40e5c652b3da32aa024da3acf648da0253674c391d260c0674853c7821861059772c9a7f2775a7ef77d1d31a6ec1c51c5f3089bb516f8cf52d5a15724281086abd92a74d255b7cc84b5051be4e5b":int:64:hex:"bf0f7f8084e79da5":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #0 [#2] +depends_on:0 +1:exp:0:hex:"21b775ef8c40a5387d6c8eda4e90d0a00c795681a2887dfc":hex:"6346f84301d6d83e1c5bad44fa7e0821f35723713ee8d4a9e2bf15abf953425b09bd77b2360f4e62e82bf9e14e2b56be51d032aa8a96e894f19f3e84630f9eae831b329f7638b09de7210cd29778059ef1d0bc039c1e10405f3ae5e4ca33216adcfc21869d9f825344d62b50bab03f7aa7b92fdb94951a68acd01f1dee75e428":hex:"9763e6187d4b96b1801d1f6efe7e80a5":hex:"3bd523c16a0022b780ae8318a28f001502120bb26e2f65f4fe94019686f9d1df330e70cef1b2ba4b6ce1f7ef37750f47e602843cbc5f13ff2ceadc5091eb3601604b70bd4acad3d61950b9dd2cbfd83a391223c8e09fddd4020c0f8a8a7057139fd92f3bbe034f03cc48afdde064c8b13ea942ec0d621db959ec9d5fa95afe45":hex:"f25408848bc27ab087b3ea053762837a534c3702dd8be01d79f075f61d76ac1d6557d392e1fab475cc7d13a5f6be6f0718bad71c3c85b5996bd3c0159e264930988e3ed506bcc94fabecfb58caaf56e2e4315bb50817cba765636d1faa91147b3880815eeb90d0934180e49132833abfa6279247d9dd4048dff851e9a551ee1c":int:32:hex:"d1fb9aed":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #1 [#2] +depends_on:0 +1:exp:0:hex:"8a7d8197d9ceebd8e3f6b3bfb74877ccf649ac91d7057af5":hex:"37b01df357561f5aa43b5b4b0081148213f7b74babc80f4b3c6dd78ad17687f11443cd4a57f8d7a74ca3080e2a229f78d8e6db276c1142d5f4ee764eaf09cfd70c596d7a2cad5360c2de20d5e17ec6e06a9b049bb10f8742a30a94270cc6d7709b2f09f3cb8347e41117b7ddb99e4a939f3094c016330a8f170ccccb9d3651fb":hex:"db5144951a9f1721397b7321713a723e":hex:"ad72fa5a05adc40fb38245da019cbf50958ccfe26abf67dfdd49f4c4af6bda8bfc99d557913b2634c5c65d33ca909360adf598b703db1dbcc29481b17ca42fce3315ea1454693b5843e751fafd78158fc040c1cbe607063ba9c0ac02ae4b88989e3cc63adda8427032c70560349e1a8ec847906a9a7b0422a694a1f9eb2b3b72":hex:"6985ec525cfe869e1709751eb6f1ff0aabcb39ae3aa708adc452ce1a8cad8ab4f1739f660b2841566f1f5c9e15e846de7f86ca1dc085188fcaa4a3f839ab2a5f0cfd36e36965ae519fe14f98899ccb07a3ca15ec705e3160df6dbc37ab89c882012eefe51e4da8d6d6b84b3144ca87a90864ff5390abfb92992e44c46807b3c8":int:32:hex:"c51604f5":int:0 + +AES-GCM NIST Validation (AES-192,128,1024,1024,32) #2 [#2] +depends_on:0 +1:exp:0:hex:"713358e746dd84ab27b8adb3b17ea59cd75fa6cb0c13d1a8":hex:"35b8b655efdf2d09f5ed0233c9eeb0b6f85e513834848cd594dba3c6e64f78e7af4a7a6d53bba7b43764334d6373360ae3b73b1e765978dffa7dbd805fda7825b8e317e8d3f1314aa97f877be815439c5da845028d1686283735aefac79cdb9e02ec3590091cb507089b9174cd9a6111f446feead91f19b80fd222fc6299fd1c":hex:"26ed909f5851961dd57fa950b437e17c":hex:"c9469ad408764cb7d417f800d3d84f03080cee9bbd53f652763accde5fba13a53a12d990094d587345da2cdc99357b9afd63945ca07b760a2c2d4948dbadb1312670ccde87655a6a68edb5982d2fcf733bb4101d38cdb1a4942a5d410f4c45f5ddf00889bc1fe5ec69b40ae8aaee60ee97bea096eeef0ea71736efdb0d8a5ec9":hex:"cc3f9983e1d673ec2c86ae4c1e1b04e30f9f395f67c36838e15ce825b05d37e9cd40041470224da345aa2da5dfb3e0c561dd05ba7984a1332541d58e8f9160e7e8457e717bab203de3161a72b7aedfa53616b16ca77fd28d566fbf7431be559caa1a129b2f29b9c5bbf3eaba594d6650c62907eb28e176f27c3be7a3aa24cef6":int:32:hex:"5be7611b":int:0 + +AES-GCM Bad IV (AES-192,128,0,0,32) #0 +depends_on:0 +0:exp:0:exp:1:hex:"b10979797fb8f418a126120d45106e1779b4538751a19bf6":hex:"":hex:"":hex:"":int:32:exp:2 + +AES-GCM Selftest +depends_on:0 +5 + diff --git a/third_party/mbedtls/test/test_suite_gcm.aes256_de.c b/third_party/mbedtls/test/test_suite_gcm.aes256_de.c new file mode 100644 index 000000000..1ef983490 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_gcm.aes256_de.c @@ -0,0 +1,642 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_gcm.aes256_de.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_gcm.function + * Test suite data : suites/test_suite_gcm.aes256_de.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +void test_gcm_bad_parameters( int cipher_id, int direction, + data_t *key_str, data_t *src_str, + data_t *iv_str, data_t *add_str, + int tag_len_bits, int gcm_result ) +{ + unsigned char output[128]; + unsigned char tag_output[16]; + mbedtls_gcm_context ctx; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + memset( tag_output, 0x00, sizeof( tag_output ) ); + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_gcm_crypt_and_tag( &ctx, direction, src_str->len, iv_str->x, iv_str->len, + add_str->x, add_str->len, src_str->x, output, tag_len, tag_output ) == gcm_result ); + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_bad_parameters_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_gcm_bad_parameters( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +void test_gcm_encrypt_and_tag( int cipher_id, data_t * key_str, + data_t * src_str, data_t * iv_str, + data_t * add_str, data_t * dst, + int tag_len_bits, data_t * tag, + int init_result ) +{ + unsigned char output[128]; + unsigned char tag_output[16]; + mbedtls_gcm_context ctx; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset(output, 0x00, 128); + memset(tag_output, 0x00, 16); + + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == init_result ); + if( init_result == 0 ) + { + TEST_ASSERT( mbedtls_gcm_crypt_and_tag( &ctx, MBEDTLS_GCM_ENCRYPT, src_str->len, iv_str->x, iv_str->len, add_str->x, add_str->len, src_str->x, output, tag_len, tag_output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + TEST_ASSERT( mbedtls_test_hexcmp( tag_output, tag->x, + tag_len, tag->len ) == 0 ); + } + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_encrypt_and_tag_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_gcm_encrypt_and_tag( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, *( (int *) params[11] ), &data12, *( (int *) params[14] ) ); +} +void test_gcm_decrypt_and_verify( int cipher_id, data_t * key_str, + data_t * src_str, data_t * iv_str, + data_t * add_str, int tag_len_bits, + data_t * tag_str, char * result, + data_t * pt_result, int init_result ) +{ + unsigned char output[128]; + mbedtls_gcm_context ctx; + int ret; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset(output, 0x00, 128); + + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == init_result ); + if( init_result == 0 ) + { + ret = mbedtls_gcm_auth_decrypt( &ctx, src_str->len, iv_str->x, iv_str->len, add_str->x, add_str->len, tag_str->x, tag_len, src_str->x, output ); + + if( strcmp( "FAIL", result ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_GCM_AUTH_FAILED ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, pt_result->x, + src_str->len, + pt_result->len ) == 0 ); + } + } + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_decrypt_and_verify_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data13 = {(uint8_t *) params[13], *( (uint32_t *) params[14] )}; + + test_gcm_decrypt_and_verify( *( (int *) params[0] ), &data1, &data3, &data5, &data7, *( (int *) params[9] ), &data10, (char *) params[12], &data13, *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_gcm_invalid_param( ) +{ + mbedtls_gcm_context ctx; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + mbedtls_cipher_id_t valid_cipher = MBEDTLS_CIPHER_ID_AES; + int valid_mode = MBEDTLS_GCM_ENCRYPT; + int valid_len = sizeof(valid_buffer); + int valid_bitlen = 128, invalid_bitlen = 1; + + mbedtls_gcm_init( &ctx ); + + /* mbedtls_gcm_init() */ + TEST_INVALID_PARAM( mbedtls_gcm_init( NULL ) ); + + /* mbedtls_gcm_setkey */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( NULL, valid_cipher, valid_buffer, valid_bitlen ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( &ctx, valid_cipher, NULL, valid_bitlen ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( &ctx, valid_cipher, valid_buffer, invalid_bitlen ) ); + + /* mbedtls_gcm_crypt_and_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( NULL, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, NULL ) ); + + /* mbedtls_gcm_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL) ); + + /* mbedtls_gcm_starts() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( NULL, valid_mode, + valid_buffer, valid_len, + valid_buffer, valid_len ) ); + + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( &ctx, valid_mode, + NULL, valid_len, + valid_buffer, valid_len ) ); + + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( &ctx, valid_mode, + valid_buffer, valid_len, + NULL, valid_len ) ); + + /* mbedtls_gcm_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( NULL, valid_len, + valid_buffer, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( &ctx, valid_len, + NULL, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( &ctx, valid_len, + valid_buffer, NULL ) ); + + /* mbedtls_gcm_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_finish( NULL, valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_finish( &ctx, NULL, valid_len ) ); + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_gcm_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_gcm_valid_param( ) +{ + TEST_VALID_PARAM( mbedtls_gcm_free( NULL ) ); +exit: + return; +} + +void test_gcm_valid_param_wrapper( void ** params ) +{ + (void)params; + + test_gcm_valid_param( ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_gcm_selftest( ) +{ + TEST_ASSERT( mbedtls_gcm_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_gcm_selftest_wrapper( void ** params ) +{ + (void)params; + + test_gcm_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_GCM_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_GCM_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_ID_AES; + } + break; + case 1: + { + *out_value = MBEDTLS_GCM_DECRYPT; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_GCM_BAD_INPUT; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_GCM_C) + + case 0: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_bad_parameters_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_encrypt_and_tag_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_decrypt_and_verify_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_gcm_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_valid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_SELF_TEST) + test_gcm_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_gcm.aes256_de.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_gcm.aes256_de.datax b/third_party/mbedtls/test/test_suite_gcm.aes256_de.datax new file mode 100644 index 000000000..7fe410a46 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_gcm.aes256_de.datax @@ -0,0 +1,680 @@ +AES-GCM NIST Validation (AES-256,128,0,0,128) #0 [#1] +depends_on:0 +2:exp:0:hex:"2c186654406b2b92c9639a7189d4ab5ab0b9bb87c43005027f3fa832fd3507b1":hex:"":hex:"3a0324d63a70400490c92e7604a3ba97":hex:"":int:128:hex:"4c61cd2e28a13d78a4e87ea7374dd01a":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #1 [#1] +depends_on:0 +2:exp:0:hex:"747d01d82d7382b4263e7cbf25bd198a8a92faabf8d7367584c7e2fa506e9c5f":hex:"":hex:"7156358b203a44ef173706fdc81900f8":hex:"":int:128:hex:"9687fb231c4742a74d6bf78c62b8ac53":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #2 [#1] +depends_on:0 +2:exp:0:hex:"1cbe30216136b7eaf223e6a7b46c06625176d9a08182fa806a63d8b143aa768b":hex:"":hex:"4fe6ace582c4e26ce71ee7f756fb7a88":hex:"":int:128:hex:"d5bdf8ec2896acafb7022708d74646c7":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #0 [#1] +depends_on:0 +2:exp:0:hex:"f31194c83bb8da979a1eabb3337ceb3d38a663790da74380d8f94142ab8b8797":hex:"":hex:"404efd26b665c97ea75437892cf676b6":hex:"":int:120:hex:"e491075851eec28c723159cc1b2c76":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #1 [#1] +depends_on:0 +2:exp:0:hex:"daeed52ae4bf5cbe1ad58ae4ccb3da81fb9c0b6f7619ca21979313ad9d3e83c1":hex:"":hex:"4037eadb11249884b6b38b5525ba2df4":hex:"":int:120:hex:"360c6ef41cbd9cd4a4e649712d2930":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #2 [#1] +depends_on:0 +2:exp:0:hex:"3ad81c34389406a965c60edb3214663ac4a6bd5cfd154ae8d9dc86dae93def64":hex:"":hex:"cebbce06a88852d3bb2978dbe2b5995a":hex:"":int:120:hex:"bd7ca9f6bd1099cde87c0f0d7cc887":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #0 [#1] +depends_on:0 +2:exp:0:hex:"4c152ba30aefa5b2a08b0b4d9bf3f16fc208bb0bc4c4eca9411dc262d9276bad":hex:"":hex:"008d040fbd7342464209f330cf56722c":hex:"":int:112:hex:"c87107585751e666bedae2b1b7e8":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #1 [#1] +depends_on:0 +2:exp:0:hex:"9aed4ae6b1d857fdcbe5aec6db38440613dcc49f24aa31fba1f300b2585723f1":hex:"":hex:"947c5f0432723f2d7b560eca90842df1":hex:"":int:112:hex:"7d331fedcea0fd1e9e6a84385467":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #2 [#1] +depends_on:0 +2:exp:0:hex:"cc80bc031676eff5f34dd076388a5130e985f9e06df4b4bf8490ff9ff20aae73":hex:"":hex:"51f639467083377795111d44f7d16592":hex:"":int:112:hex:"02d31f29e15f60ae3bee1ad7ea65":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #0 [#1] +depends_on:0 +2:exp:0:hex:"db7a40213b5b4b07e9900dc28f599403b0579cbce13fcd44dff090062f952686":hex:"":hex:"aea6f8690f865bca9f77a5ff843d2365":hex:"":int:104:hex:"7f2280776d6cd6802b3c85083c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #1 [#1] +depends_on:0 +2:exp:0:hex:"299b874eaa8b7baf769f81f4988a41e2708ae928e69a5ba7b893e8e6b2db5c3b":hex:"":hex:"2aa04d85d2c0dc6f5294cb71c0d89ac1":hex:"":int:104:hex:"ea01723a22838ed65ceb80b1cf":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #2 [#1] +depends_on:0 +2:exp:0:hex:"a6c7b4c8175db4cf23d0593ed8ea949043880fc02e2725f0ab90ae638f9dcfce":hex:"":hex:"ae07f8c7ac82c4f4c086e04a20db12bc":hex:"":int:104:hex:"1132e4fff06db51ff135ed9ced":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #0 [#1] +depends_on:0 +2:exp:0:hex:"b98e1bf76828b65a81005449971fdc8b11be546d31de6616cd73c5813050c326":hex:"":hex:"929b006eb30d69b49a7f52392d7d3f11":hex:"":int:96:hex:"33940d330f7c019a57b74f2d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #1 [#1] +depends_on:0 +2:exp:0:hex:"09ccef64ae761a70fe16772cba462b058a69477c91595de26a5f1bd637c3816f":hex:"":hex:"e34b19381f05693f7606ce043626664d":hex:"":int:96:hex:"2adc2c45947bfa7faa5c464a":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #2 [#1] +depends_on:0 +2:exp:0:hex:"654cf46598e5ad3e243472a459bcd80f1e026a65429352dbd56e73fcc5895d1c":hex:"":hex:"a56f27709e670b85e5917d5c1d5b0cc2":hex:"":int:96:hex:"177b9a5e6d9731419dd33c5c":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #0 [#1] +depends_on:0 +2:exp:0:hex:"84bca1b2768b9202bf194f2d5e5a0a5f51fd8bb725f2bab8a3fccbdb64a4ea70":hex:"":hex:"c45b2708c5bdf65ec6cc66b6dfb3623b":hex:"":int:64:hex:"fe82300adffd8c17":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #1 [#1] +depends_on:0 +2:exp:0:hex:"c8ae011795c9a60ad7660a31fe354fa6f7e9c2724d7a126436291680cd95c007":hex:"":hex:"1bd9ea6186450f9cd253ccfed2812b1c":hex:"":int:64:hex:"35214bbc510430e3":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #2 [#1] +depends_on:0 +2:exp:0:hex:"df2f0a8a3849f497d12bda44e12ce30a6957f3febcd5ec9bc134171326ca66d3":hex:"":hex:"728cb9608b67a489a382aa677b1f4f5b":hex:"":int:64:hex:"e2ef5d9cc5791c01":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #0 [#1] +depends_on:0 +2:exp:0:hex:"78e8a8ad1ecd17446cf9cd9c56facfd4e10faf5762da0fd0da177f6a9b9c3a71":hex:"":hex:"f169ce6f3ccc58f6434ae2b8ad1a63a1":hex:"":int:32:hex:"0fe57572":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #1 [#1] +depends_on:0 +2:exp:0:hex:"02ca6d8a862e25db9d68e4404abc107e700135df4157cfb135ce98eaa33151c9":hex:"":hex:"7b722fdd43cff20832812f9baf2d6791":hex:"":int:32:hex:"72dea6cc":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #2 [#1] +depends_on:0 +2:exp:0:hex:"9a2b709dbcc3a4fb15b3ad541fb008c381b7e985b57df52f07ca7cd26ab1ecc4":hex:"":hex:"729baa4c0ef75ed8aae746376b39fe3c":hex:"":int:32:hex:"2a0d607c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #0 [#1] +depends_on:0 +2:exp:0:hex:"449d39f863e4909984b37f2e5c09ea4d4b3e9fac67bd57c299e4e1d1f084aaa3":hex:"":hex:"d8e9118f331bb5a359f0aa8882861b72":hex:"4ddcae0bc24d622e12bdeaac73e8d1ab7957af051d27dfaafce53aeed4cdd3f989ea25989a2f41cfb3c38dbd841c5560b0b5ab1861b1fbcd236865d13da55b50219462e021f8a21848a64a85326031fcec8fe47a6ef4a435dd2b2fff637644ffcf3914ef2dfa5dd556421bfd297be150b31db039f0f2cc422b282e659e70cceb":int:128:hex:"c595b9d99414891228c9fa5edb5fcce3":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #1 [#1] +depends_on:0 +2:exp:0:hex:"3e70e66813fc48f984dcda4d1c9c24f1d5d1b71ecfc8bb9581782e7cca5a5cc6":hex:"":hex:"d804f1051e72c9b7117002b862eb45ff":hex:"0b1ab2b7a87cebac668c7a532fa8fa56a22cabf0c41fc1e6744ffe07c857c6865d623f508351f98f3f0c577d1eb94300a30a445472218c8ac626b0bee7d4c122d33f8130436a89add341e8ef7e00694afb4ad80d314d87ad3f921c7105eed05431b8151df7cff2c8e3790efd4acd3f60332dc7f34fdd90beef70f9093361d65b":int:128:hex:"c09c2e3fdfefa222f7345ae4efb978fc":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #2 [#1] +depends_on:0 +2:exp:0:hex:"8e534041090b45b80f287dc5fa20ebda017ad81b0530e680f62c6280fd8881af":hex:"":hex:"ead675b019ef5c6bbf4985f2a382d6c1":hex:"b1db220052c4bebcef27eed6db0dc91be481179d71160c5a2ddb2fe497a05484840b04cce48980057d770fbbd0d5f3d5c633b55470617ad2cab5767188283310337825c4b0eafe13b5b11293dec230dad43b220885105767938c7ec4600fe063f98aa14bc6afb886fc874c10546749da295f571e696305bd9165486e29f43f52":int:128:hex:"9aa0cdad5686ca515cd58aed94938ef4":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #0 [#1] +depends_on:0 +2:exp:0:hex:"2de18874470c09db683cf45cd752bdfa8bf33e7967220b1a69f41f2a02da1d80":hex:"":hex:"af30eb2d0a0c2a50ea413f3285aa88d4":hex:"22889b868d8ccc9f488406813caed199b23091ddd796c8632f564e7cf5a39dfb725266a931fec958659b6fc5b6b9343b8217edb0acb010afc9416601155262b57bd398d62f555953f0e15958e19ae004fbc9cb25e0269a9eaa38a4635a27bfa719fb249fa49337796bcf5f416bba87fbf3b19f0d8c11290c25ca50bbdc822f01":int:120:hex:"646bbc9b14681af65b0d1c4c9f1d0d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #1 [#1] +depends_on:0 +2:exp:0:hex:"1a1bb9122e762ecd7ff861a1d65e52607d98e7ae5bd1c3a944e443710f3b0599":hex:"":hex:"32f99ea4cbf52c2701c2252e5e6c863d":hex:"91b7a70c3a06c1f7f2ea584acb5dd76177ba07323c94f2e8f7cbe93fc0bb7c389c3c88e16aa53174f0fc373bc778a6ccf91bf61b6e92c2969d3441eb17a0a835d30dcf882472a6d3cb036533b04d79f05ebfaadf221ae1c14af3f02fa41867acfdfa35f81e8a9d11d42b9a63288c759063c0c3040c3e6ee69cf7c75f9c33fea1":int:120:hex:"a8e29e08623a3efdbbe8b111de30a4":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #2 [#1] +depends_on:0 +2:exp:0:hex:"3bfad1e8f9850577f9ba3f290e9a5e91b494c2d99534220362e171a7543177ac":hex:"":hex:"8410886b70c57d7ded8596443bd1b157":hex:"ca801c83596795515ea931edba00e06e332bf84246b7036e10b317e2d09a51b2981fcb664ee3bf4180bb0b12ed1cda221abc6790b27c26914f5ef9cea9536e2453cd5b247cb054e295c2687b725a97cbc484b8eb86c6ceee03bd07a54a9301a3ac0ddb23aecb825a238252e7575329058b40e75575a7f16439edf5be163ce5f5":int:120:hex:"e3645db0c600dba52044efcecfc331":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #0 [#1] +depends_on:0 +2:exp:0:hex:"65debdf2f2191a6cd8de8ad4d5d4d0d8f731f67744e2545df6b2a7cba89c1ee0":hex:"":hex:"fdab2ee547dd8b6f5a4ea2dd19697b3e":hex:"d2b0a0438ee0f145aec9a7ca452b788ecb473152b78fb75f6ace721afc7b0ae1942049b790f3a5b6221a8760295659756d35347cc04029be03459f3e23a71209b4e0bbe13a253a888c83db23376d3a6d9a539f7c9fa4a12dc64297e7c93dfa0ab53ef76b6e1d95bf6f3d5e6ee8f08662fc03ec9d40eff0a43f23ac313671bfd9":int:112:hex:"c25fc157c3f2474885e2eea48aea":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #1 [#1] +depends_on:0 +2:exp:0:hex:"496ae810380460d40cd2fdae8c0739f16b87205cc7f57db0a71a473eb361d570":hex:"":hex:"77233de96f5e1744337778212b411bd5":hex:"85f5b54b4c4af5c808120bd28d98e44e96f4126623e57684957e9fc4fd1a2d0583940b8fc8314a249325476e8d05247831b04709580ae714e8187cd38f9559419e14c9fc4f8c454ec191b8ef2a3610988fe3339d0dc6b72f5978f9eff9d596dfabf27056e3a908c6497267461386e860f6b9d65526294bcb92908b5661b06b5a":int:112:hex:"4ed91af6340e70b0c2b94ab6f82e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #2 [#1] +depends_on:0 +2:exp:0:hex:"aca188183b46139cc7cffc82a6aaaeb2fd73cecad14e75c663bd62daf1ec711d":hex:"":hex:"7bbf7fb55eb70cce94cc6a2b67de55ba":hex:"015cfba90f069545fed60f31992ff3d3c3592eb91e7a53df5978ded64291954cb99a57de82d5398ce782b68d14ac04a8b425395bd076ead59eb445721bdb2f45e19fa089117800cbbac7b8313fb165ccb1122acb654e1242dc7fe6885ea1cbb7281b1270cfa1549cdfe9b47caf47b4ac3807e562e48c066566f5e606b5023b47":int:112:hex:"3bcb5c2a4261d75bfa106fb25ee1":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #0 [#1] +depends_on:0 +2:exp:0:hex:"8cd6815f6ec15f03b7a53f159e877a5981e0ab7f6e6c261ddde4b47cbb2f2366":hex:"":hex:"c431c07d9adf5f61204a017259cddd75":hex:"4e1a835402bde4f5227e64b46a1f8d0f23a9434e189377fcdf1b9621ba1987eb86a7f3b97ed0babfd674e74c5604a03dd016d71000a72bbbd00a7f7fe56ad0fcb36a3e24dd0fdb63bd66d4db415f35012416ed599796ca3f678df7eb5a1b17f75abb348ddd3b366369a7b362c9488aedab836b61f9a158f0b129c8ca0a53a81e":int:104:hex:"0e463806ff34e206f703dd96b3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #1 [#1] +depends_on:0 +2:exp:0:hex:"8f0a72abcda104aa7fae501f9a3b686d00d3f6fe984731db8a2865bfec587073":hex:"":hex:"ab8acd063775d1b1314f14e90fddd1be":hex:"02c6d426e7f20b725d8cde0a6382e49b029b52126889013ef45251f27b2fadb95ca4a9a3b16ad06999eeca4a473e813045db4942e9b9ff2e5a5e429d9bac298372344d1b781d5facabf6d779643f31ada6124eb50aad599044b54279ec9b25714ac8a3b9ad2487cec7f4b1ee245d7be3d496d6af1d4cbee1c8201312541f3064":int:104:hex:"3f0ccc134091e0c0425887b1b9":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #2 [#1] +depends_on:0 +2:exp:0:hex:"417135cad74280e6f8597dc791431c95cb8fa63bbf7197e3ab37c4b1d6d9438a":hex:"":hex:"0fe22d9ba1d0e32656e3a9f07a517a27":hex:"a0b2712e81d329d5b076a4be2ad6823cee6dbd17d9a592d065bdebb92b1ff37a56bf2f5e5341f39c574246ccda19e5f35fede49c9ba958f3920cc5440fb404fab7846884ca0c2a3af5b51f4fe97a1395571319cc5b40f8aac986d77de280db82343983982638326ef003e0c013af19c34672975dc99ccc0853a1acf7c617d965":int:104:hex:"888b836c9111073924a9b43069":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #0 [#1] +depends_on:0 +2:exp:0:hex:"304824914e32ea0efd61be6972586093349bd2cc2cf0cff44be943682b2dbff5":hex:"":hex:"b6d927a71929029f6766be42746f7cb1":hex:"7281c81c7514f4b17cb125c4649006ef8959a400a1e4d609d277e363e433725fa32346a10bcbd826b6afc8222158920d0a2db1e6fc915e81231c34c3941ecf3c6f94ffe2136190cae3dc39a4277acbc247f36291b5614a8433b1a0780434a6c50521b72ec25145bbd3b192647155d5dd9df9e66762d39592602ea99bf9bfff49":int:96:hex:"b6044c4d7f59491f68b2c61e":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #1 [#1] +depends_on:0 +2:exp:0:hex:"8a10e9abe9389738e12a4bb6f553ae81e8bd320e0dfbc05fbae2128c1fde7a23":hex:"":hex:"6da44354e198e3beb54792718becbcc1":hex:"199d754630135b669bf2ec581d3027a569412ab39a78dd9d482e87b778ec65c6473656260c27827e00e566f1e3728fd7bc1853a39d00e43752c6f62c6f9b542a302eea4fd314473674f6926a878ec1e4b475d889126ce6317115aea7660b86ab7f7595695787f6954903f72361c917523615a86d6ce724bd4a20c9257984c0c6":int:96:hex:"5c5683e587baf2bd32de3df5":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #2 [#1] +depends_on:0 +2:exp:0:hex:"d164ffde5dd684becaf73e9667e3e6acb316682c41aea247899e104a54dd7a7f":hex:"":hex:"1d388e19e9d7a9750e2fc1187d4b075a":hex:"f166a5b6f91261cda56f1a537f42ffb8aed10af5e0248f8910034b92dbc58d25953f1497f571d31fbf5ec30d92234b440161703851f0e43530418147ce6270fbcb5db33ab819ba8973051908704b6bea8aaca0718947e6aa82498a6e26a813981783ed9bf9d02eb1ea60927530c4700ff21f00179002b27903dd4103bbc5c645":int:96:hex:"52e10495105799ead991547b":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #0 [#1] +depends_on:0 +2:exp:0:hex:"2854188c28b15af4b8e528ab25c0950fc1384976f242716c91bddeec06f2fdea":hex:"":hex:"075af9c31f5252b8920092cbd999e7a0":hex:"e9452f71093843a025bb5f655eb6a4e8316ab5946484b11818f22b62f4df75d5891fa3397537093a261dc9a7648b7477ea1f5fc761716e302763364bcab7992595edd0fc1c7f7ac719c879e6616e2007948eb8530065a6cccf73d0fe4a0598819b471b0856e6d90ea0fc0e5d36a30ee925b6b8e5dbf40e77f01efe782c0bb4f7":int:64:hex:"6ff8fd87e5a31eb6":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #1 [#1] +depends_on:0 +2:exp:0:hex:"2bfc445ac0365ae6c3c3815fd18bbd0c60ea224f6620d9b6ac442a500221f104":hex:"":hex:"43c5f3367a9955aaee1a0c4d4a330059":hex:"db0bae8ce7c66a8ba2fedec22f236212e9a7ad72b371de285c7dc6d2f6c22df0ce4920e0f03f91eb1653c4490050b9f18a2a047115796f0adc41707d1ffcbf148aed5c82013f557e6c28f49434fc4eb20112f43566f212c48cec9894ac40772fcd9b611ee9444df7b73e35b8a38428ccb064c9c50491d2535e0b539f424db83e":int:64:hex:"49aaa806cb2eeadd":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #2 [#1] +depends_on:0 +2:exp:0:hex:"7b828f99aaf751bf22d993ed682e488595617a607ed74aaacbb6b60457453080":hex:"":hex:"d48dac1d8d77e245420feb2598812418":hex:"f50f785f4e7c848a55a616ecf4b6b1e1ca85e16de7100c7e4273d411bd95c1380ee157ba501ba9616980195f34e39f43e335f33253342feb8ed64443483c721b85241a0320b3cac83104de2db47188c61a373fba592ea16feeefdee1f2bb43927396f58151418672ebb74afff5c029503a0d0be81430e81ed443e08b74c03183":int:64:hex:"a5b71ecf845b25d0":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #0 [#1] +depends_on:0 +2:exp:0:hex:"7b6da11d69fca3e4c907628d3eb63d95c7e502fc901372fd097e064e70831432":hex:"":hex:"6fe2148f250ea178d4c8ca8423ead87d":hex:"a8097bb74ded776f578eb7588f5ef8915db9bfa7262af700c8e76ee114e07557b6786dd5a60a66b2703e7c9de5d6b42aca92568aec5d1ecc298dbd0edb150b8cc13c9a78698f7674caa94da6cacd1f3ef4ca4238c59830ea725ab3a6284e28966c8c32d9bccfb0cfd6583a5ca309debe86549a6f317d15c5f928cbc7f473310c":int:32:hex:"e9cdbc52":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #1 [#1] +depends_on:0 +2:exp:0:hex:"c5ae9328be49e761064080fc213e53e373fd86359a09d0355e2d438d9b8e68f1":hex:"":hex:"a7e3f8660ff925d5c88c5aceffbd7026":hex:"2ddddba7a56cc808aec4602f09ae9bd78887827bf0315d8dbe16821606ef9d117746dd138bf1f23565d1ab8f4cee36d53fe3730632c5df9f12109b16edbeae285bb49dfdd155f5dc97b319a85362d53cc86817b7c1c31e5e87c9f37422f133d00dd0776bd92ab05ce6860573cd911645cfe3fbe515e85f744899a447fe443653":int:32:hex:"e35dbac8":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #2 [#1] +depends_on:0 +2:exp:0:hex:"e4f8ca13ba86c658cc7f42d4f029422209efbd101bc10a1df81a42cfb3a0f79f":hex:"":hex:"1a362fa0e4054ba11e4b06d59c8bc9cf":hex:"e7ad5c75aa13659f8ce4b1650c46382645ec67418199b84ea445b8ceef619ef3fbde59ed3d313c459e36fcf87d26ef2b453409b32f1086934c3072c1ef0aac83762d28b1193b9afff2c083ce4300b768b0ae23ff9d3dcf65bc1693f1350da65180620aab205aceacfc683c8be53a332e2d0337a7518d2a5204f9c8d7325a4799":int:32:hex:"e7a37f15":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #0 [#1] +depends_on:0 +2:exp:0:hex:"00050a21ca1e72cd0924be31b943c60854be6744577de3dd9d1f4fada4a19ea6":hex:"693ffd3d92294857a99c702a0799eeca28ab066dd90917b9ea5ef8f6547f1d90b106cbec8ef2c22af9f8efa6c652f2f97c2baf33af14fe9def230d49524bd65909c3df1490f637f99e788dcc042b40e00bd524c91e2427ef991bf77e7b2f770cda6e90076c5dac4cac7ee3958b53ff8ce846c3a96281f53c2c52f5f3e523536f":hex:"2fc1afc1395d8409919248709f468496":hex:"":int:128:hex:"e39b6a7fd5ac67a2a1cc24d5eb9d9c74":char*:"":hex:"cfcd6b9ff7641829cbadeaa2e56f1f150a099eccf3e378fa4da59794dcc4490aa4f9c5db0ab245bec36a7d4557a572008e42f03bc1baff3c946f23f54a4dc9828f106cf4264e4ab40165839d1085e7795b1ae0950f0ee4a08e46ada501b6b51dee0e518129c9426e5bd44c66674a9f99cfe676f002cfd344c5bbd22d3d91e600":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #1 [#1] +depends_on:0 +2:exp:0:hex:"f10965a66255f0c3515af497ccbb257a09f22ec2d57c5edae322a3e6d2d188ef":hex:"91598690edf2de8b27f9bc7461a84e80811cee544f0542923898328cf157590251f0342cb81d359b5dccc5391a12320d1444c26f24178977dd6705c2b365dc1ece0152c42e2f0ee3162cf886ef5529f4f16a77f3bdd2aeccd405b59addf098521d0d38cc25f1991e11be7ecf24caedb48a2a286d2e560a38fa9001c5a228c4d1":hex:"c571ce0e911de5d883dc4a0787483235":hex:"":int:128:hex:"6d9d3a5dbc8dce385f092fff14bfffda":char*:"":hex:"2867996e389e09ec0da94d42e77b1e436b50065b09ca4adf1cd03240444ee699dbb7b3fc081a1869ca607d77d5ff9754fc3c997ff0a4ee17543a2ba77886b88a7128bcc51d3450df58ff3a26671b02c1d213df6adb6f7e853080eb46b504517cbaea162710a9bbc2da8b552eb6b0e0cb98e44fcab0a157312be67974678d143e":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #2 [#1] +depends_on:0 +2:exp:0:hex:"4437ee7d16d8c3ca1aa01e20b66749efa901614d4bb4bee786ad5a5f1bfde2e6":hex:"ff80727a3485cdbc7fab4ee9fadfdc621c538e2055706629046078f1aa3fb687fc728d3a7ffa52ae457b7b5649613eab7bafa464bb435314c49e5900750f7ad39ca9b75df6b2eaa755439e101f67b7ae4cd80dc4a9dea0027048253f2d0a6014056ca69b8c85605b00cf75fa7634a0ddf464270a8c79ce1a1324c4a4c513b24b":hex:"275393276745bc43bae4af1e5d43a31e":hex:"":int:128:hex:"a82ff1e87d26e4d6e417b60fb2d3ce23":char*:"":hex:"88f994d276ed20be3932d16f551c4b7e2ed80411f2e72ce098fa0b70c22157a59edab30649fec447dd63f0c87dceca7238ef0d9561b58489ba7bd86f2892743099f40af63c432f78ac0ad0b5c2be47b9e3045e7237b096ee400f430af63a6f309de785caf190f3f4aabbe79f727a741590de542bd343df68d13db55a5f8bab41":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #0 [#1] +depends_on:0 +2:exp:0:hex:"fe4ec037ce563dadee435cfcb2bf090f1f7ccc7d1b5b4fab2f1b738348f8ed2f":hex:"64eb8a4bda9804c09b04cfcd89094928c21480908b81ee19d6c29c2a3631b1a5bdc8e7f8ea56f7b8b8e14a5208296026785cac3a6afa54be8af4d5faedcd12b6621bde0f8ec5a2635fe72a89468ca7704c73aa40cd2ba97aef08886b27a694d339b00e7d12a31308672f87c06a7388a1432f869eb4cc1da864140b1b33931925":hex:"47f5264f7a5b65b671892a05fa556f63":hex:"":int:120:hex:"660462b4088f6628a630f2e4170b21":char*:"":hex:"4a310e035361f98b8c54fb4cef70b1a9c910552ece056ca8fdab54c52308ec0ad7fe9dd1dae92badab5010577de522088768fa6466fbccce22e14c51ca7986c4063d0f06bf578dab16a91856713198a7138395c49c78b6314b57ab72fd079028c8dc351952d90b04a7cd2b245df0c0522447cdb7d3329fd9425fe5cb40a8e7c9":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #1 [#1] +depends_on:0 +2:exp:0:hex:"e6e1ada628ca76eb9832cc6b5efc5c9d2686bb587366a6de2d734233fa95279e":hex:"a0ac738e0fb35246b84a6fbe319f827039515df25d0c0fc6de7c048253ae63d3c561e44a12672ffeae1cb925610b482aa422bbee0e1784fc69baac3a97d69f51e6d2a17957b44b318624ea7ec680a559f4d3f2761d09bee66efb3a312ae6b3ecb673e756b2a0f654671e82500e7ace91f2be2a74bc3bc1ec1a4b6877a53c27c8":hex:"5a100b451e3a63a3e6d4b8a9e59c6bce":hex:"":int:120:hex:"88df9a1ea54e5bd2ef24da6880b79d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #2 [#1] +depends_on:0 +2:exp:0:hex:"cd5c1e90d78213155c51767c52c290b3d657db8414ee0a7604a2ec7b48105667":hex:"8e987693da0fb77b6d1282eebd3a03e05d9955ff81929b1a2c721574862a067ddee392c7ece52ca1451f3e6e321d7208882d97b4149af6d78d65c054e1bfcdfa62bd2202de32dea8363f8d7f041891ce281840f3cd906ab46ca748e5b3b11890b4014bf0271c9427c874097782d1c13dbb40e78fc8276fc134f3c29923a43a01":hex:"4e022d8d86efbd347e8cbab7e979771f":hex:"":int:120:hex:"e7df79af0aef011299c3b882e3a45b":char*:"":hex:"3b20473d9b5018d089e7f74d3fef22ec2805948a9e07689831973c704a6d8db4d090af88d696ab8c3aae9740a2bbd7f03e0b18b2b591e59c335c1043a2578a89b1a9f20fd0dd53f12e00e9bfdb27de8caac772bbfc4de9e4a255a5d1b04e59625a87b8279babe613def58d890d5502abf2f709aab625dcc20c58772832c7bbab":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #0 [#1] +depends_on:0 +2:exp:0:hex:"6e3dfc07003bb6a2d82bd5263b2832f47db4e73279266c7a9ea21f4f18eddf83":hex:"a960da222af9d4da5797e6957d59b00f6d3893599c70e95c0984b56eb3329b191703c2532f3288b15ebf655b9b5ee4617484e5ac9c39bb06731d03ebe4fef9495d003b0ed694cf540b4dc759d32629e55512680badd81234bd71ffd55fcb5e6a85031c1dc31ee1ed198939582d8336c905717cc87101dcfcf9d833fac815c8ea":hex:"7c0f49fb54f5e68c84e81add009284e6":hex:"":int:112:hex:"b2ec0f3da02a9eb3132fb4ebe3b8":char*:"":hex:"a40b6f70f0572fe0bc70d83368e7c154f7dbd501f52501630a2e523d18e216e07368521f6040d806299397722b99bcf7f85d36b8bed934b49aa1fa76d38783e6a2e392d6d0786d467f7bc894a739ecf94f0fe884a9c391154f8326bf31ea5242a18aa263d04da4b63b11de23b42d3e10a2d5460cb32700cdf50a0d89165ba22a":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #1 [#1] +depends_on:0 +2:exp:0:hex:"4103b1ddff87a508a219c808a04ad4750668688f4c2ee75b92d28d70b98a2c94":hex:"a00a196193ff07006b7df524824bd0971d63f447a3a7bb1b75c1e2d11789482c115cff677b54948d36dc4de34200bce97be0101d88cee39b177857dd5da3cb0d2f9d6e1150f72a3bd655e0bace1d25a657ba9a7f8dff082b4460432075afb20173da22b49beeb6a030d72ba07869ff4389fc1c28d87018d7c1a9829c21932197":hex:"5cea906737518c2cb901016e30206276":hex:"":int:112:hex:"3a3a771dd5f31c977e154ef5c73a":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #2 [#1] +depends_on:0 +2:exp:0:hex:"cd8c2f0c330d5db316dae7a16b57d681ca058864f7bd60f3d0de174442283f77":hex:"e2a5ad295d35031535bf13c2993bd0b292e8a9465b9dab738e59ba03670248a1ecc92b38a55bae34729162271cc1572c35fcccb27417b48dfcbff852a7a8845cc829a4461061b558ac8b5930a5c6491ffba04a9d0dff220b3cd5e4fc2e0f3db3b2ddd90328f2cad819573a7856299620b02f5ee0267f3b56981afbf1b7d9e3e1":hex:"387ee8c1e7f047e94d06d0322eec02fc":hex:"":int:112:hex:"62356850d12b54e39872357cfa03":char*:"":hex:"17b7f6bdfc1993c56dd9bd674cc276a55a46fdd9fd5fe435b9e4b7ebc7052a9dc76a99e4e43aba7d486603189c90d10a21ad3722c86bf5bc856a0f930ff5bca65be708b76bb8a29105da67f31eebcec81f28aaf526d2f8f0feac393a24959dcd612e2b93b4463f61957d2b3046bcdf855e346601e4c7760c0ca618ee7bf55381":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #0 [#1] +depends_on:0 +2:exp:0:hex:"7e19e400872eed721d560202cd757d3eb99729496b6e3a6d38dd8afe1066045a":hex:"3fb9abc7aba654dfb174e8899c17db222ffbb387b7260fc6f015b54f1cd74284c516e21aae3b72338e5e8dc643cfafca0678f5bda3a7539f1612dddb04366031b5a3eda55f3232c1b176cc9be7cc07e0ebca674a272224929c401a2530efc6d4eed0087b544b12d172a01bc8340d9c2a2ebcb5af8b07d96073a879fda140c196":hex:"d2b277f78e98f1fa16f977ce72ee22a7":hex:"":int:104:hex:"4c81c044101f458fdfac9ca3b9":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #1 [#1] +depends_on:0 +2:exp:0:hex:"d0653934a16fd36c27d54488a1829302b931bed6e26ca26047242b85b50bfb61":hex:"c02347e1add9178d830d8baaad9aeee37e958bedf2cc846e2561fe8c83481d0a8a85911e7f1f6e444b28f30bd96c13c390e80f616feb6844ee6fa486543a2e3f38c138f45b4405e3fb331b64648219aaf1d574be948ccfca6afc18d12488db19c35b05601e47c0af5d49a93a5dd4420f38585c1eb033e173376fa390d3f948df":hex:"94886a1845aebba5ed6b86f580be47f9":hex:"":int:104:hex:"4be34ff42085ef4443c8b6042d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #2 [#1] +depends_on:0 +2:exp:0:hex:"d0f0ccb88c7cec9496f26a59ddc67dc59ebe49ae3dd89ef3be008598727e214c":hex:"7845e155f4f28021291e7c814a1ace8f42b239990831aa82758fc1e376cace0b6f668f7f2f224dede1ef5b1df7ae74b2c01483701044acbbb72a9216eec6b7ef0190f114b3c73c6985c4653f11601c774d10b7f9df1f1e1f3ff4fafa20d6525edb37d9e5acfafe6d3468ee068d407fdb56dc718c98425926831253978d727854":hex:"e5ca84b907ac761a5e68a9080da0a88a":hex:"":int:104:hex:"c8f78e4139dd3eaf2baef8aafb":char*:"":hex:"0cc3ede50b0d3fb9ada11300a3239a383c98f968ad65266d57a195bb18d3e568fe6cabba258da4bee9e923c7c838e06dc887a6c49cc1453ea6a227c6a83e651a8742e0316cad5efc93739393e3603446b5c920a206db1434adbb8ebde4d1a7a8699c7f6c61b2d57c9709b564338423b4f526d6c157647a6c45da9dd521061f05":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #0 [#1] +depends_on:0 +2:exp:0:hex:"e35dcea17cbf391491ae5ba6056d0dd13b348183474dd4b614742751bdebfc32":hex:"5213542beb044910d7fdeec8bb89de93f350760e493286eaef1140485380d429f74a4279c1842a5c64f3ca3381cb5dbb0621de48821bded650cb59703e0ca88f4e9c3d15875f9dc87d85ba7e4bae9986ef8c203fce6f0ce52c28e3a93befb4cc4ba3d963d2283cd30f9bf6ab99d92f2f4f3aff0b022f1751b89d43ea10bbb28a":hex:"fa549b33b5a43d85f012929a4816297a":hex:"":int:96:hex:"afa61e843cee615c97de42a7":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #1 [#1] +depends_on:0 +2:exp:0:hex:"844c50ddc0ac1d9364b21003287d6ae6360d12bbb17a85351362420ee4ca588e":hex:"3a3bf4ccaf05f7c02f5e158dd2c5cb08c6aed4b1ba404a6d8ef9a0737fe2f350b3e22188fc330ea63e35df82f996e3cf94d331c4246cdb25bb2c409762e05ddc21f337edee51b64f1766ad18f520b3f34735b24278d9d647c533a743e0c1e9c81e9dee975cdc47e8582113fd250ef59353605b64acb7c025a97854c1a5c03237":hex:"2f8512bb7e214db774a217a4615139e1":hex:"":int:96:hex:"f1da1cebe00d80eb4e025feb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #2 [#1] +depends_on:0 +2:exp:0:hex:"2aae1aa047a20ed2d6d8336d923864cee9404f924031ae327fbfe2d293e1d93c":hex:"8e5b6b9e4e7d01de9a919dd33c0c1eb94dcfebf28847c754c62c1c00642d9e96f15b5d28ad103ff6969be750aadfd02fc146935562c83ec459a932a2fd5fda32eb851e6cff33335abd5c2434ae4f5524d6bc74a38094ced360f4606a1a17096ff06604952c8ca94a9a6dc4a251e13b0e0c54bd8a6dff5f397a1eb1cf186fa518":hex:"3da9af3567d70553ca3a9636f0b26470":hex:"":int:96:hex:"e1026b3d15d261b2fb47632e":char*:"":hex:"58c52ea9f3b162511160eed1a68b6f52b3c4f5834af728de97a3d9e4ba337b29aad12636003cf5be9ffbeae0f383f7cf32f645a8f6fc5cdc1cde91c625c69a92bc434ed671e52a0044a48f3fce55cae49a7d065c2a72603a7efe58b5a7b18ac500d1a51420e820357e7a439b1c02198ebe3d4e62d5573a3aa5f40900a21e3b41":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #0 [#1] +depends_on:0 +2:exp:0:hex:"f3d69208cb0d27474e9a231cd46eac7c1574fff950c48bbd1ba03fad16f563df":hex:"0d1f06eef5e8f2c81d1a73bb1dca93c22cfb6e40e9948bc75b0d84830fb9216330424f580b89050c3fb3f620eca8f9fd09fb86d2e8b3a0869c6022d8a705fc280d66fd16d3aba7395d6be4bed44145d51d42d56285f3675726d62d94c081364a6d440511de83a613c598b03078e2ec7648c6302defbbea66aafd33e1a4b1686c":hex:"b957f05921d21f2192f587768dc12b4f":hex:"":int:64:hex:"322374fbb192abbc":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #1 [#1] +depends_on:0 +2:exp:0:hex:"cb2cdeb17fa6bcb006c7fc60858a12a411804464458db351957e8caf42f1ee6c":hex:"296504131354b2c1928982f12d408ba2377f2d4bbe87e4c69f92a15bf6003910a43bda6c8929df66b3ab1d202a5258cad199f32f36cc30d2dc06199c2a52f7ccadad1fce50123c5f8434dec57cc60cc780263d7aace8f59cc8a6c54bddbaded3adb12ae2ee0bacf6a8da635ff85b51a4e8a1b3dc404863b90059de4ad0f158dd":hex:"31bd7c971a6d330b566567ab19590545":hex:"":int:64:hex:"efc5a1acf433aaa3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #2 [#1] +depends_on:0 +2:exp:0:hex:"f94170790fadab3240df568197f9d6f6855afaed8d07eceeaa2380121872529f":hex:"ed231b78db082f652bc6310c396993b52de804a82464fa3fac602a1286535f59c67fc2b1b420c7321eb42b971edde24cd4cb9e75c843f2ac6fb8ecdad612d2e5049cf39327aa7a8d43ec821161c385f3fdc92284a764a5d1cbae886f07f93017f83a105bb7c3cc4fc51e2781516a2471b65c940ddae6b550ad37b35f53d7cc64":hex:"2f9c0647a4af7f61ced45f28d45c43f1":hex:"":int:64:hex:"ab74877a0b223e1c":char*:"":hex:"1cb5ed0c10cee98ff8ecfa5a1b6592391bbd9f9b1dc1ff351e0af23920d546b5e27d62b94daabd32f7f96a2632dc9fd7c19bf55f3b9b7cd492e76f4d6b0f5b437c155c14a75e65bfc4120bef186da05e06a2fd3696f210292ee422ddbce6e63d99ee766b68363139438733c5e567177f72e52ef2df6a7dd33fc0376d12ec3005":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #0 [#1] +depends_on:0 +2:exp:0:hex:"797c0091ff8787fe7cd0427c02922620e7f6fb71c52ddcc03a9f25c89ba33490":hex:"2d3efc8900315c3691a8e3c9de3319d4deaf538fcf41aa0e295b861d0ac85baf56d149a6437747dd6976f44016e012b88de542fb8e5b9e4ad10c19deec4b7c0b69bc1b2e33d44a981ded66127dea354b072010b8dc24b85ed2ffeea3b9c0e931619dbbf22677691f0d54fc03eaa162e0ab0d760ad41021f67057c0d6ac19ca8f":hex:"69d81c73008a6827a692fa636fbab8bb":hex:"":int:32:hex:"be2dda5c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #1 [#1] +depends_on:0 +2:exp:0:hex:"90ce1afb5500489b9edbad987f4009509c847b3e55cdf0c764ef2fb085e3d033":hex:"98482b54edce2bac1cd64d44917dcf117ebfbfe26ad17a9b263447028304f1cf5a69559c05b5d833420f4fddb6e308277d01eb4b3235f1c4b47d33d3899325b55e7be19d43187a5b1b1354ce02a529b3df1c13b4883902ae9fc565079dee825e705f3e580371e4fd86c3b0d31bae98adb529901f346ca07127314152b4370edd":hex:"e119e166471ecf44bc3a070639619931":hex:"":int:32:hex:"b2f54b3a":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #2 [#1] +depends_on:0 +2:exp:0:hex:"29264a90f114a800c0fc3247b3bda00981a12a8f85cf3a19ea4c7ffdd005f4bb":hex:"587c8e53ab5ae8c31e16160b4a41d88798e27f4ad61c573c023c62d4dbb3952eef5026ad7b453fa9e0694347ab8fe50a6cf20da566202b81e325cee9c07ab2d4d53ed45b3ec2d2135936515f8a24f2a8116807dce9df3c44edf64c32647145152ff241d9e018e4101e400af070192dc3b498b5a213d265b4cfc8c8d4d7deccb5":hex:"cf296aa43cb7b328e09c8975e067404e":hex:"":int:32:hex:"56015c1e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #0 [#1] +depends_on:0 +2:exp:0:hex:"84ff9a8772815b929d55f6052c0354cf3e02bcc8336fcfe5794952b4c45d5d96":hex:"a87de56d49725a1625baf12fd15931fe1a6783dce5d1e744eba108f45e0c105d8141dc027d0e33ad7efb6752b43729715e2f3e2c42ebdab4d5f72f886bd821c4372244699ddded99a63dbe7763a5a3bc21cbfc253cdc2514eba2a4f54e24dca7c207cb3f6ae80153d77fe0641f357d5a073dcd425c38deb77c45f27427345516":hex:"5c044a66e488b853baf479f7dee2aadb":hex:"00304e3d40cbc6d2bee0778462884f4ec047a8c74bb3dd7e100f2b9d0e529fd24730063986117b56ca876b208a3691425ac63afc3d504ccb499c76622eade09717023fcb7d956b01ce24a3e53cb5da472be3fcf5b278b5d9e377de22fab75bc74afa9670f5fe9691aa0ed77e43f6abc67a61ec409ec39fd66ac0307bf195f36f":int:128:hex:"72ddd9966ede9b684bc981cbb2113313":char*:"":hex:"aadb8537309940422f67ca393aa6182d67fe7c52092538a15e98a4254f0a9087c7f10903d5e78078c2e55de914dec8b6b35cb720e3e55963c0ac9901e44b83a0e7c5b2d3f002aec0a4a08354febe47b2abb955f2a21107626ef0b8e1e099650812a6fecf36908fce2d078c2735cf7c2b970a309e5c6d6ff29c26a05720c57105":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #1 [#1] +depends_on:0 +2:exp:0:hex:"b5ca3991d0160b1729ae1a622dcf4b03b1f4ba86150bd66bf35cbbee9258af10":hex:"62aad5854a238f096bdde0711ac6f5763e7fea29db068ea8c911f17ba91e6d7807883e6fc5ba7db17af33da2b00973008a3425e65cc786ce1b97360019ee2cef74563d54752be436b905705b507c3d62689df4edf0356d26b693eb43d8a2a927a9f3866b7e0e19e84a90447bd6f47e31070fa7c2a71e3f78229ee19fa47e848f":hex:"f8402184d1cc36df07b68ecb1ab42047":hex:"d378cfd29758bcbd21e26a324239c42c992941b3ad68d9f2b3d2def3a051fd172ee882562970ef59798ff8d9eb5f724ff17626156f4cf5d93e41ffef6e525919af6194ea9bbb58c67563d3ffd90e5a6e2a3a33bd1fa3d55eff5dba7cd439d571f7e08014c4780e3d10904ef22b660897e78258da20b2600e88d71c35ecb6329a":int:128:hex:"9e8b59b4971130557aa84ec3ac7e4133":char*:"":hex:"556dd32edc0af3c64186fe8c000ddad1516cd14721c93c228e379d4f87e32c79e734539cec930322048f34a2b34931c585d44f09966caf187ec4b9244c991a8a5f263e9da1d08d6086e52535afdb36c7662307521cbceb9ecb470a76970243723fbc1613b6ebbcae261ac2f1936e66ce29ec7350b2e6b2f73a910ade645154f7":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #2 [#1] +depends_on:0 +2:exp:0:hex:"df867d1dd8a287821a54479cab6f88636d2aca30e1bf01a5dffc735e17590356":hex:"6517272cac85d7f38902bcb4b96a0c59c4bdc46bfefa6ebacd7f2fb1629b87ca91de2ffefc42ce3cfd34dcbf01b3f7cadcea3f99e6addf35d36c51f2ceb1f85c1f56a04ec9c9fff60cd7fc238674992183ea3de72ef778561b906202b7b83fe6562a0bca9c1e0a18638e8685b998b4192f5120435809ad6e93a0422d00725262":hex:"35019826c51dd1ef07ff915d9ac4ea96":hex:"0375ed93f287eefe414ab2968844bd10148860c528dbf571a77aa74f98cc669a7fc317adc9f7cf2d80dda29b19db635b30a044399f3665b6176ed669146d28f5ada03b3d32d53fe46575a8afcd37f20386d9e36f7e090b4fefadfab7f008e02f1b5022c0eeb81d03443a276eae48c038ed173631687d2450b913b02c97243edb":int:128:hex:"e49beb083a9b008ae97a17e3825692f0":char*:"":hex:"723be39bc13adbc48c861b07753f64fac1ae28fc8933acba888b6538721df0a8b91c040a26522fe0dbb7335d8f63d209e89f7cde23afa9ca3c584b336d63a91e07fdd8808b14c3214c96a202e665bbaaa34248ff30348f3d79c9f16e66ad6c5903305acd887a89b6244eb7c2d96e18b13a686de935bf3821444ee20f48678be5":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #0 [#1] +depends_on:0 +2:exp:0:hex:"0e8e9ce6294b7fbc534a96bdd060120976a6e08315d2ea73ac61d085cd462a44":hex:"9855f186b51358f0e2111c06bfaaeaec9bf95c55e246375c614fad9883d86c82a20c86538dc5f42a0ea69677d59a20c5112d15d2a8396f12096242ad5d7b838d16ee0679fc4017af75bc15e8ad2f77b0e802c864031cbfb0bacd95c828d1db4b7bab0713619e9e5e8fe6902aac7a9e6c42eb05f5b156f7e663ee43e6fdb62480":hex:"4edc6be20f904b4789e5bee0a80a3fc8":hex:"db28ce076b360816cd1e04b7729f8ab080e0a07f35204350f3bd056945aab8638c0e8311ab056f3e5debdbfbb03fae700770264faf73e0f3a05a5812aee84ab613c82f4a76da276250675f6a663f85e2c26d4f4a8666a7f4cedaffc1a7218dec11ca4e72b8b5d5b620d1efbd3d3b94a5ae0d118b9860dfd543b04c78d13a94c3":int:120:hex:"03cfe6c36c3f54b3188a6ef3866b84":char*:"":hex:"e10142f852a0d680c983aad2b4609ccbd35ff61bb3eb66442aee6e01d4cc1cd70f45210acbd506395d6ca0cfebc195a196c94b94fc2afb9ffa3b1714653e07e048804746955e2070e1e96bff58f9bc56f3862aaa5fe23a6a57b5e764666ddec9e3e5a6af063f2c150889268619d0128b3b5562d27070e58e41aadd471d92d07e":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #1 [#1] +depends_on:0 +2:exp:0:hex:"886c77b80f5f3a21c01932685a540b23629f6d41d5574fc527227ed0bdf2e21b":hex:"53a17d7b69f607f08676d6f6dd4e8db08e01333a8355d8c87616e84cdf10ef5b041fc6ddc3f6a245c0f534c2b167064af82f45e4702a5e8dede59579fdecf6713353392433950c9b97c38d9ee515ac97d0970ccf03981954540088567a30941bb2cca08cbed680500f8342faa7aebbc6c143e2ea57ba6b4ac1fd975dcc5d0871":hex:"5ec506edb1890a5a63b464490450d419":hex:"05b8d820c9f439d7aeae5c7da0ee25fb0dad47cc3e6f3a47e8b984e856201546975f8214531fc3c2e504d2ac10fa49cb948596b9a8fab01b95c49d6f04d1589f93b77b899e803dd20e1f00a51c0b5953e85be639109b14b100e35ca26d84ea629964b0db8260dfa5a150a66261bf37e79de2ec49e9f1b082a7c58ecd3d39b6c9":int:120:hex:"ffdf56e1c1a7252b88422787536484":char*:"":hex:"79ee27adfa9698a97d217c5010ec807806feda37db811e398c3b82abf698aece08561fffc6c601d2691738e279eeb57e5804e1405a9913830e3ba0d7b979213ef40d733a19497d4bb1b8b2c609a8f904e29771fa230c39a48ebb8c3376f07c8013fff6e34f10fe53988a6ec87a9296c0a7cfba769adefe599ec6671012965973":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #2 [#1] +depends_on:0 +2:exp:0:hex:"5231ca6d772edd9ea2d251e22d7d455928c22474b4b44130dad57e6511fed6ee":hex:"2767c808410ee132291585ea74a48ad3102f883f07d060c91c5f10abd37fe0996d2210dc490260238ae15f5d74c7be2a1e15d80db09079c520047f88488a7802857a3fc3b81d85a96949997430a880177880a31d4d0c9c9045247804f057a4f2756d6e40375a4a3187c4376d6bf573ce334cda1ed88d8a50db499e7cdb89d8db":hex:"048698a4a0feabc1f336112e2794795a":hex:"3a81b6b0b722899ff931cb73c39222d555b83ae3f8880b982593cbc1ab8be90d1ee32fd7dfe697cf24c95b7309d82c3fed3aa6b3d5740cc86a28174ac8f17d860ebb251ac0d71751c2ff47b48bfb0b3beb4f51494464cda34feaecddb1dbbe5fa36c681ada0787d6ed728afc4008b95929a1905787917adc95f1034fedcd817a":int:120:hex:"ba61edeb7b8966188854fc7926aad2":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #0 [#1] +depends_on:0 +2:exp:0:hex:"5a3f516a7898e04e5da4efd6c7c5989b77552d195464620c2b35b9a4fda29cce":hex:"5cc28b61ae97557774bdcd7ff653f4aa349df68d53c7e5a65263883ef1fe224ad40e86bffc2d38f28a2ed9ae1fc08563e2a1e46246106546eb8e6064c06baa0046fa137421734b7f0f94656a4f459d9d981717557d843700d116b6e5e2dd3af5f67c34edf31b40b71fd3c6f2475f9310feb70bcb973be52d41e86792c49d54c0":hex:"9310af6974890c0a0364231f9cc8103d":hex:"2103af8356bcb9dfc2a4f1d4ed09cbcd8e1990d23865605e19f87feb50bf8d10d0257740e5557a9297f0499c01e29a1a513ca18e6f43f7406c865cbe3951a7771128f3110c8da3bd696368901944549552842a1f6fd96cc681b45da098f3c1acb3d237d2363285f520d0b6714b698790b7660c52ac84a42c9721ac7e9d38a2ef":int:112:hex:"993fc8e7176557ee9eb8dd944691":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #1 [#1] +depends_on:0 +2:exp:0:hex:"59c9258554363d8a885fc0f5d112fee08eadfc7ce52a0e7e73e3d0d41d9a0290":hex:"79c491411402ea7878e480519fd984dde44bce6459303bb76d4eaf97d4e345d1aafaa68ceb0590b41cfed0f411b675d9344c7e888cccfc9eb6fe6b229d198f94ba516ee850ee7f078a4f5f32a23f92f72264e3a76a31ebd042564315ac4f2ec0bb49ba6d08cfd2d3a6308688e39f28e3ecd669c588368cee8210edf5dbefb925":hex:"77e51e89dc47bbcac79cca21e81a61de":hex:"25a6f8800a9b914c0ebf9a45d72355c03ee72a138eb81b2980f332645ce1d7aa4659805821866aee2b276e2c032776b4eaf36f93b5f9a72b791be24e31eff105ca6d0700e3069ee327983dd7fe1c7465d6c6d77837aff69055149988e7199847fad98605c377d997dbd40f3e2ff1a4f978a493684e401249e69540fbde96323c":int:112:hex:"ee6d85d3f3703b45adb4f9b2f155":char*:"":hex:"44ca68deed5478074adfddc97f06f44c08bf7bca4dee8707d621fc7396fe2efcdad0a167d1708a9ff59ce4cddb86920bf1dbdf41b2109a1815ffc4e596787319114cad8adab46cf7f080c9ef20bcf67a8441ba55eac449f979280319524c74cf247818a8c5478ea6f6770996026a43781285dd89c36212050afc88faa56135fb":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #2 [#1] +depends_on:0 +2:exp:0:hex:"5e9eae594cb54c8089330e4404ff79abb1c0841b0be5347a14633ad1e1ff44fa":hex:"32abc1eb6077555a85a0a6fd1c78cccca6c8b375842e2eb8eee45ee6c38dc0837443d16c647252e8124639dd01c808ac5e857a25d927c2a75e2fa8955cad5beb5c206fc050cd933fc4621f5718936f01f39dd700ae1aee7537cc595df8789c5d1a6e1e87b1c7a60e3ce5d57c80dd65dee3801798e1481b1963bcc78cc69f8c50":hex:"0917b486da754f48bb43ecc8766a7ce3":hex:"2aa1ef2f91aeba5da10b48a882dbd4574df4e9157a18abf8cecd03e4176712ba171b6ecb0e745841ff84e35063e47b08101afc44cfd9cededb913a82f00b9d4bac922f23a22f200642270399896405d00fa5271718eefb4cd5fe7e5f32097766ebff36ff1898a1c8a1a01cc18e6121e470805c37ff298fc65ef2fb1b336d09fd":int:112:hex:"92282b022e393924ab9c65b258c2":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #0 [#1] +depends_on:0 +2:exp:0:hex:"aaf03c3055a35362212b9b059931e7a24fc71e32bc9a533428c9dc31077f2ebc":hex:"c0e12cdd8233878505e025d52427536be7b6bf1887d2dd20eac7092db80b22417a3a4ca83cdf5bc5e36161be1ff9b73f7ceb297c6d07c9cb2a75035a5dc079e48283daea60596f4b356ca28c243e628cbe459f069709fe193394c9b1a31d8ccc5a3a4eba30056c415e68571a2c34bb5c32efff12e9aa483c4a68be5e76aba4cd":hex:"7dfccd077b29e6ed5720244bb76bde9f":hex:"21edd1c6056f51fd5f314e5c26728182edcd9df92877f30498949098dcde8089eed84e76d774ef8874d77125669a302d268b99dcd66b349d0271dde6f8cc94dc4f2df3787887b1173cad94d067e346846befb108005387102854d9387d2c0fbc9636cdf73a10d145f4b612c201b46e1ff4465f6a7654ce3da5792daf9a27fb35":int:104:hex:"6154c6799ad7cdc2d89801943a":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #1 [#1] +depends_on:0 +2:exp:0:hex:"60c775971a9eac7950ed2bdd85bd60fe948ba04c419f6743fb67f37557e46c6e":hex:"8abb2e66a4d08074916056bb8e925551372f737f0e1b597c5d08ee102989743a273b29d7281013f8b3aee2934399cb427370d70370ee86eb41584b653660c633506a53cae747826bb7d93909f069d5aacf058b7f2bbdc58ea08653db857bda83a979fc22a4f126dfef7aac45177f4cdb802fab0c812fb35d12a8176ec21336d7":hex:"9b92ad7079b0de09c94091386577338b":hex:"1f6a84b0df75bd99a2a64849e9686957c6a60932ebe898d033128be9b757e9890225925d856bfdc33ff514c63145f357730bb0435c65342bc5e025267b410af6fd388a5eca01b7efc87fd3b1b791df791bd47dfab736350d7b7f368b4100e04c939d5af957bab95ed502dac904e969876674602a0f0790da2d7351b686e46590":int:104:hex:"1d6cd4ab3914e109f22668867f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #2 [#1] +depends_on:0 +2:exp:0:hex:"3b426e449337a14bc0663246ab61b671b523c9a3130c21ed59c93fa6a5aa5ae3":hex:"291bd5a00d71eb7d547b7c94e7030ba4a947418eaeb378a3bacd304b08c6f92f6958eaba968ac6aa23e0512a2a8ad7c1ca2f8fcf623bfc1281f5b7b598c08d2aebcd447668b23238c5e338b4c2ac7f8fd381714c596ea3e0c17aca4317a08563e58f0f52a8af08e078dc242ae54ee0fe3869f8c9687b004a4ded0aa27d8f4c5d":hex:"e6efc96acd105fe4a48d1ac931eea096":hex:"0902cf7a0685444126369712ac47962bc2f7a3a5837f1b6190d9ab1adb4cd35e7f0892eee628b8e07fcf2b598cebe1ec07d8c4823172ae66a135bb51cc71590707b691a66b56af1ffe38772911d11685da355728eaddd83752d21c119d7b59f4c17c2403629fa55cd70cd331aed7b0de673c85f25c2e9e0267f53f0b7480c8ca":int:104:hex:"ca4bfeedcd19d301d3f08cb729":char*:"":hex:"bcef3f2fd101b828d36cb38530cf9a0a7a285ac1c55ee1069cc78466327e85887534c98a8891d579effd832c0f7d6e7e822fb1eea85a39317a547591def4aeed6660872859fc9d1df9725d3c40e9ccaa900e0f1426a55d20ac4f2e8e07bd3bbc687f8e059ab93e7604c97e75ac94be1c8c24f4c4da0080a4d77953fb090cbb62":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #0 [#1] +depends_on:0 +2:exp:0:hex:"ceaf204ff504ea8e7fade1a2097f2b527a44766860447322fa5ad346cd810217":hex:"1c8e4cf6018211518494d46c2e0607fa42e236abc28d58f8175c530f84b1f030572f5f6a74cb5517e1fb999a637d352afcbeadea9121e695675859b66b499a3a351ecba5226e58ebbb59fe12e359e4c89cd51c8703d4643c49921ae495801c73627df404b91e828e1d0e03ae09a39defb5aa5f2c8106953772ba0713d3261329":hex:"cfdb8183251f4b61c64e73243594fdc6":hex:"a60f3969fd1b14793dd1425aa0b1f742a4861e0b50eaffd1525cd209ba6d1252176763bb5bee59aaa55f92341cdc0705899aba44cf0ec05cbf80274ebef65cd9507fd4224b25cac19610968d6a37e2daf9ddf046ef158ef512401f8fd0e4f95662eebdee09dd4a7894cc8c409be086d41280bd78d6bc04c35a4e8cd3a2e83be3":int:96:hex:"9e45029f4f13a4767ee05cec":char*:"":hex:"5cdc66b587ed5eebb04f42b83a6ab7017093514881c598cce332d74fa3fab927493ac15bff26835296e080b5b45ef907c0529fc2f4ed2fc09db179ef598e5d193ea60c301d3f8d823404814e3e74de0e1d2417c963e9246c353201c7a42659d447376e7d05c579dd4c3ae51c2436407b8eff16ec31f592f04b8013efcfd0f367":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #1 [#1] +depends_on:0 +2:exp:0:hex:"15652abe38cd09777bba21d0db04637f5737d3cb3922181b9f2d07bfdafd327a":hex:"1d6c153dec3b4738a09c9fbdfe31a093eb7ea79b8fa49f83e5e1f46893590f074fb171fb66e30ef887767014e3a10a3aa05da2bd50dd7b7936e1d7f6f31af9030e31e76bdf147f4396464db0f6a72511c4885c6c2305d339906e3c761a3249d7ebea3bf463e8b79c3706e684575550e964b8047979f7aed6ea05056c4b5840b1":hex:"3a5e0d223ae981efb405566264e3e776":hex:"cd755437cb61b539908e0cfaaa36c0123f8f17d1e6539783cb61d4b56cac3bc1e971c1ea558b12669b025cb6b9ad55991c6e2f8ee8b0b7901790193e226a0fbbfff7ff0bee6a554660b9f32e061b6c04bf048484ff9ebd492f7e50e744edd72d02c8fd32f87f9421bf18a5a20ebb4d9dbe39a13c34b7296232470e8be587ba09":int:96:hex:"01a573d8e99c884563310954":char*:"":hex:"162430c23f7adcf98575a2d9249b4b5cec42efae33776360ebfa6a19c8eee4bd6b07cbd274deadc3292b7cdbb7803e99d9f67ccc5077f3ad5808f339a05b3213dbfd11377673d4f9b486a67a72a9ac8ea9ba699861dce0de7e2fd83d3ba2a2ec7fabf18b95a2bbe2184ff7bddd63111b560b3afe7f2c76807614ba36c1b011fb":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #2 [#1] +depends_on:0 +2:exp:0:hex:"a43f6d07042a15cd49f6f52a2a3a67c6c2ff420d95bb94b9fe03b287c3abcaf8":hex:"b67e58c8b608724fd20aa097ee483bc4c804490cc79de635170944af75c87ae0ad8261365c1dc80d852553bcba18da9fbc3fbe61d27550a03003ef0c60202054626655509a9e1ab54677e537a4e761df011d6c6dd041c795446b384161ae9eab441afd24d19b58eb4fe5116cd7b11b751ebbd0a2adba7afc380d9d775177099a":hex:"3b6fad21f0034bba8b1f7a344edf7a3c":hex:"2e01c0523c8293fc51388281dccdb8d0a2d215d729289deb327b8142d716c2bb849e9476545b82f3882ba7961b70c5da2a925ba18b6b121e9215d52ac479c9129c9cd28f81584ff84509d5f9dcb7eaae66911b303cc388efa5020ac26a9cd9ea953f61992a306eb4b35bcd8447eea63cef37bb0c95c1e37811115cf26c53e8c5":int:96:hex:"43470bc3d7c573cb3a5230f5":char*:"":hex:"e1720d451fa7ab9db4988567187244b15b6fe795dd4fef579fb72e41b21aaa436d2e5d8735a4abd232a3fb9188c75c247f6034cdebb07fd7f260f8e54efefa4f2981cafa510dd5c482a27753a7c015b3cae1c18c7c99a6d6daa4781b80f18bbe6620bfc1518a32531017a1a52aadb96a7794887c11ad6bdd68187ba14f72a4b5":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #0 [#1] +depends_on:0 +2:exp:0:hex:"1f0f0191e18db07c0501dbab4ed952c5603a4cd249d2d8d17e62e10b96ae713f":hex:"aad40e7866c26e486b6f6e8eb14a130d5f88891bf0d09aa8fe32f447ab8dea7bee5d3eda4499c0103a010483f2b64fdf1155499d31decf528c77dd7627884f9995c213cf7402143dbb7561d69c86886734260ac94ffac7eb33598d25714228ef43f744ec1af2a87e789f1e5d6fff0fbd5082dcc49328f194e8f8a14a5bfc962d":hex:"ab8be16b4db809c81be4684b726c05ab":hex:"a5a6e828352a44bd438ad58de80011be0408d410f6e762e3145f8b264a70c593476b41bb87875746c97de7d5fab120bd2f716b37c343608ee48d197a46c7546fafcdbe3e7688b7e9d2f5b6319c91d3881d804546b5f3dbe480996968dd046f406c11f0dc671be0421cbc8b4ea6811dd504281518bb96148dddf9f0dc4e2e2436":int:64:hex:"d8bd7d8773893519":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #1 [#1] +depends_on:0 +2:exp:0:hex:"a6cf7d83137f57f2310ee6bf31e8883952bb07ccdc12f516233ed533ea967e5d":hex:"83ab20698fd7573fd121976a72b45a7f03aad84702fc8ac73d6926eabd8a546895aeffe4ba81d117507e2cd37d58eeff71cc3afa8a4449be85f228ea52f6dc6395bb43c1c9f795343720841682d9b2f00602eafa4d4cbe297bfc62467e526b9d823cc8eeecd9e5f8dbc2f65610663c6f37b3d896651b254bd60215629ade3b2a":hex:"f17e37e73a28c682366bfe619cc673bb":hex:"0f4dd201b18e20230b6233e0d7add6f96537dd4e82d3d0704c047fab41af5faf6bd52bd14fa9a072f81d92a2ce04352f0b66f088c67102d2d127a9850b09ff6087f194a6e8ccaba24091feb303eebb65f1203b2d22af44e7be4de71f03e6f6cbadf28e15af58f58eb62e5bddfae06df773cc3f0942520de20078dda752e3270f":int:64:hex:"74110471ccd75912":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #2 [#1] +depends_on:0 +2:exp:0:hex:"b0c85ac6b3887639838ddca94c5c69f38115aa00122322c8114642d12ea1b8fe":hex:"0210fce418e7e2199cb8f899c81b9be74a630d00269755f882fc4db27632e99685cc12c426a7503473646df1288d0ede28408be9add5713628700f8e2b2e27d7522520ed00ac47239084651eb99e7d03e1520aae137b768f3144232c16b72158fd5da4a26a2525b9b27791bf06d1eb2e671c54daf64fddc1420bc2a30a324ba5":hex:"14f68e533ecf02bceb9a504d452e78c7":hex:"796a46236fd0ff6572b1d6257c874038f870aa71cbb06b39046d0fb6489d6ae8622b5154292ae5c4e1d5ff706daedb2e812533ae3a635d339a7fbe53780e3e8204924a5deb4b6856618f4c7465d125a3edffe1ab8f88b31d49537791c0f3171f08dbb5ed1d9ed863dafbae4ecb46824a4922862fe0954ee2caa09ab0e77ed8fc":int:64:hex:"6fb0b5c83b5212bf":char*:"":hex:"5e6c362f7587936bcb306673713a6f1fb080783a20e9bbb906456973e529cfa0298206184509c30e1d3793eaaa5d564edd4488f04311821eb652e0a1f4adaf6971505ca014788c8ce085ceb3523d70284ed2bb0aebeba7af83d484df69c87f55a93b3d87baa43bd301c4e55eb8c45dcf3e4612535ea1bd5fdb4c3b9056d0cae9":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #0 [#1] +depends_on:0 +2:exp:0:hex:"e61b1a6b40e2ab1245ff65dcfb9948318ac4fe55e9ed600cec301dae32ae0e93":hex:"8d67fa9fcf078e421cb63abeb25dba739ab0e09a091dd06b0c616e1e888f350edb2d73a42f57f115266ea20c7f8fc143ac746649612df06a5e29b4a15934dc049be1ab49d018ab86c4f37d8c3d9c714f038029e74d8ee3dbe61d81adc63712ea413b37f7604da12107aa1695d9b0981e5a92cdfaa5fbda0e31b22c6fd6f3b499":hex:"c356244b3034d288e4d4fe901b8e27c1":hex:"bdcfeb09d5b97bab05a7acd9849e7de2c5beb7a4dc573c7e1c1d0c0409245a6584023114fdcc6413c800ca16847bde750b27c4d590248e2ce457c19b0f614f6aff4d78d4a19b3251531e5e852fbb05d09412cc1ff8988d1955ca6f5fe2d820f20a7642e3ae69e8122b06ba0918e806400b9b615e1abe6fdd4f56a7d02d649083":int:32:hex:"86acc02f":char*:"":hex:"7c73182eca97d9617abb478a6ce62e3491a7e9951981c89c3071b161a4c80440614c3f24d0155073e28dcccee96bc8303dab4901ef77318df522d16d9da47770ef022395d6104cd623d93d67090a27507fc8ca04157e7939e639c62cd0e7d8a472314833c0eaa9ba2fd54a25b02854e3bff25cccd638885c082374ae520ed392":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #1 [#1] +depends_on:0 +2:exp:0:hex:"4f5a02e9843d28c8c226ed70d44b8fced8fb757ab6ece4d4f06e3c3cec79e44f":hex:"3ec13950d329f24074714c583bdc35686b811f775b76b0a8fcfa66fc56426c9d022f8ab0af38f8d2f71a068548330cdbe891670181ed7491bf40c739ef4dd93689fd35929b225089d2b151f83d9b3cd767300611144586767354c0491112c205409f3168092d27f9b9f433afb79820a2811984d48e70c1fb2a13bbb3ddbc53fb":hex:"099e5d9aae89fb6391a18adf844a758e":hex:"ad93e8662c3196e48cfdb5aa3bc923cd204151aa980cbec78f0d592b701f779c1c49f9e8686d7e2385a4146b21a643a59c18c8b82214f42560bcd686fad7c7c8e8c1944ce6b20ec9537dd14b6cf2592740ca112f4cd582250d69f240d3e957040e1f7e19c60b3c8f2bd00cb666604c38946eb9b2f17336d281b4794f71e538a2":int:32:hex:"30298885":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #2 [#1] +depends_on:0 +2:exp:0:hex:"1cdb218e0bd0e02156e5b48182990f778889793ef6018a8928e61164ac047c8e":hex:"4d039618a0eb640329f90fe97de18bc928fc3fc7a0db42c97774bec2e882e872fc1097c8319f7837a16516bf387b1bae321c565e8fc1cb8480f051158e4685f0adba310d2c6253bc1300403cbd3f7ddcb2796a69f8bf9e73d47aada9a02673c1a3d5ecdac838abf22b385906236529a1b7dd5b8af2611a04cf4f83b15ba41cfc":hex:"d2ffbb176f86bee958e08e5c7c6357c7":hex:"bc580c4223f34e4f867d97febf9b03629d1c00c73df94436852cafd1408c945c5474c554cb0faf2bae35d3160c823d339a64ebd607cf765fa91f416fc6db042bc2bd7445c129b4a0e04b6f92a7b7b669eb70be9f9b2569e774db7cb7ae83943e3a12d29221356e08e5bf1b09e65f193d00d9fe89f82b84b3b8b062e649163dc8":int:32:hex:"1997daa9":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #0 [#2] +depends_on:0 +2:exp:0:hex:"dc1a145c18bdbca760f35eea0d4a5992de04a0615964ec8b419c8288ab1470f0":hex:"":hex:"7f8368254955e1b6d55b5c64458f3e66":hex:"":int:128:hex:"8ddaa2c3ed09d53731834fa932d9d3af":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #1 [#2] +depends_on:0 +2:exp:0:hex:"7b4766d3a6615ee58b390daa228ae7a541c46ce80a1efe227cc43cb777df3232":hex:"":hex:"274367f31ec16601fe87a8e35b7a22dd":hex:"":int:128:hex:"5f3a757b596e06e9b246ed9bac9397f9":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #2 [#2] +depends_on:0 +2:exp:0:hex:"d19b04055bf6e7ff82e89daef66c9d8319ab25f9197e559444c5729b92c4f338":hex:"":hex:"796efaff4f172bef78453d36a237cd36":hex:"":int:128:hex:"3b445f38bf4db94f1a9ec771173a29e8":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #0 [#2] +depends_on:0 +2:exp:0:hex:"7ca68e300534a90a7a87ca9906e4ac614a6aa51f769b6e6129753a4f83d10317":hex:"":hex:"45e6b23f8b3feefd4b0ea06880b2c324":hex:"":int:120:hex:"6c0a1c9c2cf5a40407bfa1d5958612":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #1 [#2] +depends_on:0 +2:exp:0:hex:"a2b7cd693239bbc93599d3d12c9876e7303b227b8ae718e2c62e689e1fd62903":hex:"":hex:"548c9c8fcc16416a9d2b35c29f0dacb3":hex:"":int:120:hex:"3aa21f221266e7773eeba4440d1d01":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #2 [#2] +depends_on:0 +2:exp:0:hex:"156b854beb0c276a5e724f5da72f0d1ca4ae7cbd5f93a2257d95c2e5bfd78ad4":hex:"":hex:"a5129e2530f47bcad42fc5774ee09fe7":hex:"":int:120:hex:"6bb09ed183527c5d5ed46f568af35f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #0 [#2] +depends_on:0 +2:exp:0:hex:"d824330c60141264e1f709d63227a9a731bcc42b4adec1d8f0161b10b4fdb2ab":hex:"":hex:"c5afaa45312c64ab3c3cf9d6c4e0cc47":hex:"":int:112:hex:"55952a01eee29d8a1734bbdf3f8f":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #1 [#2] +depends_on:0 +2:exp:0:hex:"b5517589948d8aea778df6fd66c17a170d327f69e504f0a4bd504c4286a9f578":hex:"":hex:"6404b111c6289eefa0d88ed6117bb730":hex:"":int:112:hex:"637f82e592831531a8e877adfc2c":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #2 [#2] +depends_on:0 +2:exp:0:hex:"f6137b2bcbd327fbcc7f313efa10f6ffaed30e4782e222e1225c87103fcae905":hex:"":hex:"3b87b08337a82272b192bd067e3245ec":hex:"":int:112:hex:"1f2dda372f20ffddd9dd4810e05f":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #0 [#2] +depends_on:0 +2:exp:0:hex:"b5e70d1b78e931abf44bba3f937dbc344858516a8a8afe605818dc67d0c3e4c4":hex:"":hex:"58e70095c6f3a0cda2cdc7775e2f383d":hex:"":int:104:hex:"1763573f7dab8b46bc177e6147":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #1 [#2] +depends_on:0 +2:exp:0:hex:"90de0c047d1dd01d521f2dedec7eb81bc0ace7a5a693a7869eaafbb6e725ad7b":hex:"":hex:"d565c9cdfb5d0a25c4083b51729626bd":hex:"":int:104:hex:"78738d3e9f5e00b49635ac9a2d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #2 [#2] +depends_on:0 +2:exp:0:hex:"c43e8dbeafb079692483a9fcbab964b76fccca6ca99e1388a1aa9bf78dfd2f02":hex:"":hex:"f2bd4fe0d30c0e8d429cac90c8a7b1c8":hex:"":int:104:hex:"ea7b52490943380ccc902ca5ae":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #0 [#2] +depends_on:0 +2:exp:0:hex:"13540919fdb95559e37b535a427efeee334309e34c4608459e204d931b8087e7":hex:"":hex:"c993c1802df0f075ce92963eb9bff9bd":hex:"":int:96:hex:"edfab013213591beb53e6419":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #1 [#2] +depends_on:0 +2:exp:0:hex:"2a7b2e07c148ff0f627ae28c241a395876bbed0c20f3fd637330e986db025714":hex:"":hex:"8f7e1621c2227839da4ea60548290ffa":hex:"":int:96:hex:"f9da62f59c080160ec30b43d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #2 [#2] +depends_on:0 +2:exp:0:hex:"b3e7837a75b38ae6d4299a1ae4af3c2460dfca558708de0874d6b1a5689b8360":hex:"":hex:"05d363b2452beff4b47afb052ac3c973":hex:"":int:96:hex:"6b4a16d1ea1c21b22bdcb235":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #0 [#2] +depends_on:0 +2:exp:0:hex:"9df3ccd95f7570f6ecf5e5329dcb79bcd46cbcf083fe03aa8f5bd0f645c6a607":hex:"":hex:"774f4e70a7577b5101c0c3d019655d3e":hex:"":int:64:hex:"98ff89a8e28c03fd":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #1 [#2] +depends_on:0 +2:exp:0:hex:"1c7123e2e8d3774c8f1bdbb2272f19129e04f29b4351ae19c3b9d24e6ea1fe87":hex:"":hex:"99f25cebd6cfa7f41390b42df6a65f48":hex:"":int:64:hex:"8e14a0a4853a156a":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #2 [#2] +depends_on:0 +2:exp:0:hex:"490090323e9257517e2453469caa3414045cacb4d05d5cebc6b9c06fa6d19291":hex:"":hex:"c1beff1ff6cdd62339aa21149c4da1e6":hex:"":int:64:hex:"f998d7c08d609b3a":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #0 [#2] +depends_on:0 +2:exp:0:hex:"360e48dd38d9e7f5bf29a2994ab5b3c9c70247102d94049ae791850807a4c845":hex:"":hex:"88126c350dfc079c569210ee44a0e31a":hex:"":int:32:hex:"f2ebe5e4":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #1 [#2] +depends_on:0 +2:exp:0:hex:"1562b32e4dd843edaf4474b62cadd8f46d50461f5b22c9f1a8eae7367d35d71b":hex:"":hex:"af29fdb96f726c76f76c473c873b9e08":hex:"":int:32:hex:"13fd6dfd":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #2 [#2] +depends_on:0 +2:exp:0:hex:"d5160d0c98ffcb1c26aad755f67589000e2bb25fa940e6b1d81d780f421353d9":hex:"":hex:"1552604763453b48a57cea1aed8113f4":hex:"":int:32:hex:"660c5175":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #0 [#2] +depends_on:0 +2:exp:0:hex:"c3a3ea3a097c0c2b3a4cb78462d87fd5a8f348687c4150e9d3354b388ab13d17":hex:"":hex:"f77945979241fb3a454d8e3da193e169":hex:"a69bac31241a2c07d3f7e331b77f662b1e67ccb81c07f52578b01f5785de9437f02eb7627ca7b9af09c1cb428fe93d6deb31f4d6dd2f0729f87480bdeb92d985de1aaad4bcebc6fbad83bede9a5dd1ca6a15bf5d8a96d4edb5bee1f7d195e9b2e5fb2221a596d69f257c18a143eda870e22d3f2ed20c9b3b0d8c8a229c462fff":int:128:hex:"6b4b1a84f49befe3897d59ce85598a9f":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #1 [#2] +depends_on:0 +2:exp:0:hex:"e1626327d987342cba5c8c63b75b4ed65463a2b9c831f4f9f80325fa867d1d73":hex:"":hex:"4e25800deab7ecec2a2311f8fb44eb7d":hex:"ebaffd558f24dae03117c69ac4b2b4aaeaffe7e0e7599eaba678bfce23a9914dc9f80b69f4a1c837a5544cba08064a8f924064cba4d783623600d8b61837a08b4e0d4eb9218c29bc3edb8dd0e78c1534ab52331f949b09b25fbf73bece7054179817bc15b4e869c5df1af569c2b19cb6d060855be9a15f2cf497c168c4e683f2":int:128:hex:"8faa0ffb91311a1a2827b86fec01788d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #2 [#2] +depends_on:0 +2:exp:0:hex:"938da64b837275b0c80c442bdf2301aa75e387fe65a775d10a8ec840f62ff429":hex:"":hex:"dec6adeb60216cbb8a6c3afba49fa201":hex:"4ac144bd95f405649444f01ab67ef3e4c0a54fdbd933b6ba00518c79db45c22c90030c45aadcfdb53ec8199be0cbb22dbb9ab938a871f4b3b0c98ed32590a051abb946c42726b3e9701f183b2092985e3457943a6350fbcaece2e6b111b179ea3fd10ac080a577a1481785111d5f294bc28519c470ff94392a51a2c40a42d8b5":int:128:hex:"2211ca91a809adb8cf55f001745c0563":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #0 [#2] +depends_on:0 +2:exp:0:hex:"e2436484ea1f454d6451ad8dbd1574b208d7a3ab4fa34869299b85c24348b43d":hex:"":hex:"97040d2ec094fe1c64fa35b35b7451a7":hex:"bc198677513ce0e66697dfe52b22315fa5d8f92042f34cc9f373a01f94607df1a599132f60af010ed9b5e52162dd7b162912b68b11700e08f5fdafd84d10f760fc05ec97c05b83e55155194f399594015b90a19c04fb992e228940fe1b54ba59c4bb8318b33cc0df1cb1d71c389473dfb3eefabfe269ca95db59a7bc0201c253":int:120:hex:"2e080ba16011e22a779da1922345c2":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #1 [#2] +depends_on:0 +2:exp:0:hex:"7fb3fc72eb8a3aa5b102f90039f852cc3fd64f46915f5e49f1d9e02fe9cc13b1":hex:"":hex:"f6120fea313362524917c53d90bafb4f":hex:"60c2be7fbd15faf895fd19a9ce775fe2b183b45cffafe4fcbf50d421bea97347e41a9418cfa129b2dda63b889a70063010215dbe38c37feae18bc31b34f31b726f22177f2b4b9d648dd4aa80edfd12dafaee10baa83224354432d1cb62ccabe38bb8448d162cd0d30e988d2e1a2458ffdafaacbdff928756390f66dc60d7ea45":int:120:hex:"83de3f521fcfdaff902386f359e683":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #2 [#2] +depends_on:0 +2:exp:0:hex:"697c96d80d0a3fa9af35b86f31fb71a17aed30ce841c79896bbc8863b3b3ee04":hex:"":hex:"3a5163ec7e007061838d755ac219855e":hex:"de50c12da63232768d5eb9920d49683b5b7114cb77448fa10b9d63552ec5d9c2eac94b375d11f944959f903bb20c696639b6e7f108ec1e873870098c631ddacb2c25268cfc26d2a4cacfb7dda7383374c5456bcf4daa887a887f4293f8caa14419472a8bf7ffd214dfb2743091238b6d1142b116c2b9f4360c6fe0015cd7de81":int:120:hex:"cd4542b26094a1c8e058648874f06f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #0 [#2] +depends_on:0 +2:exp:0:hex:"66c1d9ce3feb0e966c33e3fd542ec11cc32f18c2514b953103d32abcdc72633a":hex:"":hex:"46fdb88fdde9b7d74e893802a0303256":hex:"55d2f263d2e3cf0b390fce1dd1ebd5f666086f26e1ce2f08002bedbb810ada3922c6bfcf6a6adaa556e9e326c9766f02b3eb6e278da2fa3baa7dbdb6373be3c6ecfbe646b1a39e27c5a449db9b559e7ea3496366b8cdbca00ee7a3dea7fdfbea1665bbf58bd69bb961c33a0fd7d37b580b6a82804f394f9d5d4366772cee3115":int:112:hex:"96ca402b16b0f2cd0cdff77935d3":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #1 [#2] +depends_on:0 +2:exp:0:hex:"d7c949420dc9497232cd5810f316d11f9e85d36c430b5943ba79836d88c1eb92":hex:"":hex:"7ef9788ff09cbeedd9569d49083a4097":hex:"ca1de5cc3fcde2638eb72210e551e9c0e0a3f5570d5be83a9a4406b545d854bf17e75b9cd0f4c45722fbd71319a317b72a8798485e9316a1c8102432b83bc95af42f6d50700ba68f6f2e19b6af609b73ad643dfa43da94be32cc09b024e087c120e4d2c20f96f8e9ddfe7eae186a540a22131cedfe556d1ebd9306684e345fd1":int:112:hex:"8233588fca3ad1698d07b25fa3c4":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #2 [#2] +depends_on:0 +2:exp:0:hex:"6fe7c70815aa12326cdcbb2d2d3e088bbaaef98b730f87fe8510b33d30e12afe":hex:"":hex:"e0253bd1f19e99a7f8848206fb8ac4a4":hex:"397897eca4856f90d14c3cdfe1ad3cba47e23174ae2dab7d2a6320898584e03bffa3ffd526f416d7b3c579b0f3628744e36eebb5df519240c81d8bbbf5c5966519c5da083ab30a7aa42deae6180e517cdd764b7f77d19cc1a84141817758887a8d7265e7e62279b9d33cd2f1ba10fd54c6c96d4b8a5dbe2318fef629c8e2af0f":int:112:hex:"477b0a884d788d1905646bd66084":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #0 [#2] +depends_on:0 +2:exp:0:hex:"cbeefb3817cb02d617f385cf2371d52c8bcbc29e5e7a55cd2da131ca184c6e89":hex:"":hex:"f74156d6400ae46b612531848bffe18f":hex:"1abe2ab05ceccf2391273126fe4a4426b94d2c3b97a7f1cd2ee6bb952bf4a546e972b5a1701d5ddb0e5bb7a248fcb47107a9fc77e4b9806b68a11850119aa239fa8be1370e3a2e1a8b168f7323afdfc4b8917d92570167848a56132d68876abc386c258a9233dc8a9eb73443b052e842c3d63e8b5369acdd038404e4e9a4b038":int:104:hex:"0cb67cec1820339fa0552702dd":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #1 [#2] +depends_on:0 +2:exp:0:hex:"e6f5f65ce2fc8ec3f602f5df90eb7d506dd771337913680ac16bdcd15c56583d":hex:"":hex:"9212a548c597677d1747e98ce6fb18a4":hex:"55ca486c0183d0134925880d2e21dde0af51c4c77c6038a5a9c0497884e0aa4715bdb5b4bb864acc708ac00b511a24fa08496df6a0ca83259110e97a011b876e748a1d0eae2951ce7c22661a3e2ecf50633c50e3d26fa33c2319c139b288825b7aa5efbd133a5ce7483feecb11167099565e3131d5f0cb360f2174f46cb6b37c":int:104:hex:"08d7cc52d1637db2a43c399310":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #2 [#2] +depends_on:0 +2:exp:0:hex:"0e9a0391435acb57eae2e6217e0941c79a3ff938ec6a19b8a7db2ea972e49f54":hex:"":hex:"27cd1d7af7e491e30c8110cc01392529":hex:"79140d32bb32dace0779e2d37a0f744d6d973e99a279962b43a6c0af63772e8a0a21d5d9dd3c33d4b218cb2f6f24dd8d93bb4e1e6a788cb93135321ecfed455e747fa919b85b63b9e98b4980a8ccb3b19d50d735742cb5853720c2ad37fa5b0e655149583585830f8d799c0d2e67c0dc24fc9273d9730f3bb367c487a5f89a25":int:104:hex:"fbb477dd4b9898a9abc5a45c63":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #0 [#2] +depends_on:0 +2:exp:0:hex:"55a12eeca637654252e3e40b371667e3f308b00f2fd2af696223e4cd89e3fd4e":hex:"":hex:"8a3793b6441258360f7f4801b03d0b26":hex:"f5810dc5f25e49bd6d94bc63c2494aa7a579a4056a25f1dd9b2734d0b8731ee52523edd54ff475651d45c213e1bf254327fb0e2c41a7d85345b02bcc9d27b08915d332e1659671991a4bb74055967bebbba6ecceb182f57977130623d5a7b2175fa5a84b334868661c1f450b95562928b4791759796a177d59ed18bbf141e2ad":int:96:hex:"99230019630647aedebbb24b":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #1 [#2] +depends_on:0 +2:exp:0:hex:"3d353f870a9c088de5674efd97646b9c5420b2bcdfcffefcadd81682847e5331":hex:"":hex:"f267fa982af5c85359b6447f9b7715ea":hex:"7cf55630867af5dff747c8dd25bcc531d94a7730a20b6c03d46059ea93fcaa00d07ee17dad0e0dff814b02dfef0cbe00b37fd2f5f95ead7c72be60016f2934d7683fc1e47185c7211c49cb03e209b088edb14e533dbcb792ab7033728904f7ff12381a236dba97894ec1fafcf853ab15fff343f9265d0283acef10168ffd1271":int:96:hex:"9553b583d4f9a1a8946fe053":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #2 [#2] +depends_on:0 +2:exp:0:hex:"d227c9ff5d17a984983056fb96f3991932ae8132377529c29238cf7db94a359d":hex:"":hex:"b8f6536f376a7efe0e684acf350bae70":hex:"1cc25da31f90de7fa47ebce92754d3faa99f88d4e25ccab45645c1acdf850d55d7f02f61a0bfdc3125f29259d7da8abef532fe0966c63d3486753c8a2cb63a39349a0641b2f2b9526a03b97d58ca60fbb054c6c164ff2836688b0cad54df2b165bc082eeae660e768dde5130e30f8edc863446661c74da69b9e56de8ae388da0":int:96:hex:"44b95a37fab232c2efb11231":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #0 [#2] +depends_on:0 +2:exp:0:hex:"b2a57ef85ffcf0548c3d087012b336c46f6574cf1d97ca087bfad042ee83eec2":hex:"":hex:"3d580402d2a8dc4d7466e5dcb456be7a":hex:"c2b9e95c16e55028794a63ef82d11fb83a2a75dc34a81f238e472c33264534bdd54cd07d02a0ecf9019ad1a6d6c779f339dd479e37940486950f183bade24fca2f24f06d4037b3555b09fc80279ea311769473eb0630b694a29823324cdf780d7d1a50d89f7a23b05f7a8c3ad04b7949aa9e6a55978ba48d8078b5a2fd3c1bbb":int:64:hex:"072d4118e70cd5ab":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #1 [#2] +depends_on:0 +2:exp:0:hex:"63889ed5bf2c27d518a696b71c0f85592e3337aae95b5bf07289e4c5dfdc088d":hex:"":hex:"1ad534280a0fac7dce31f2ae4fb73f5a":hex:"be1b9dabea33bb9443e27f674b27931c0fba699a33dc86fab29e50b76a9441030444b465317bbf2949faf908bc1b501d11a5ea2042e4b460a85f3be5836729e523d99b56ef39231d5c6d8ae2c2ab36ef44e2aa02a1f2c559c6e333216c7f9ed5f9b880a88e920219204c99a3ae8f90afd1396563bc59a691a93e0070b0b5fd90":int:64:hex:"1bcea0ac2c1a0c73":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #2 [#2] +depends_on:0 +2:exp:0:hex:"94e3e2c17cfb6f52d4fdba3ba6d18bba891b6662e85df14d7e61f04adb69e0e5":hex:"":hex:"8a80efb3bfe220526997543409fddb4d":hex:"05da1b0f7ac6eef488d3f087ecae7f35abe3ef36d339709dc3fcb5b471979268ee894c3b6c7f984300d70bc5ea5fba923bfb41d88652bdaecc710964c51f3e2ae2c280b7d6c8e3b9a8a8991d19d92d46c8a158123187f19397ad1ad9080b4ffd04b82b5d68d89dacd3e76439013728c1395263e722b28e45dabf1ef46b8e70b5":int:64:hex:"faa5c13d899f17ea":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #0 [#2] +depends_on:0 +2:exp:0:hex:"fe5e479ad0d79dbf717a1f51f5250d467819e444b79cb3def1e0033c80ddadd8":hex:"":hex:"47ce838083fd070d8544c0ad5337cdc6":hex:"98476bf05a18c4ff1b6024dd779c1ac06d838705a0a83fe42bee5fc6ebf3b2a1a5049b67f4aabc8239cd6ff56504bcbad1e2498c159bbec2a6635933945f6ea49e5bc763dcf94f4b3643d3888f16105abb0965e24f51cb4949406124145e9ae31cc76535b4178492f38b311099df2751f674363ae7a58f6f93019653b7e6a6f0":int:32:hex:"a3958500":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #1 [#2] +depends_on:0 +2:exp:0:hex:"27d4dedb71a8f68ca5ce2b9e56da772bf5a09b7981d41cd29f485bd2d1adb8d4":hex:"":hex:"7e6f0343c54539717a97b6c8b9f7dec4":hex:"d386db78043f719b7e137cbf79a7f53dda2fe3baccbebb57d499f6eb168e5151f10081d76b72ae0f30165efbdda469e826f9246e59dbcad5c0b27691c00d6c192c24073e99c19cf8c142087c0b83c4ce2fc7ba1e696394e5620ab2d117d5dcd2ac2298997407fd5de07d008de8f9941a4a5f8074736a59404118afac0700be6c":int:32:hex:"50fd1798":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #2 [#2] +depends_on:0 +2:exp:0:hex:"5a7aa836a469d28542d0d24d3232fad266da8fc889c6b6038b726d3da25f7b20":hex:"":hex:"9faf7cd805803e143ec8f3f13475efd2":hex:"1006c707f608728b2bf64734062b12a5625062bcdcb80a3ce2058352a2922d5e6fbe19681b4f0d79ad3c837f81e72f2fbf8df669894e802a39072b26c286f4b05188c708f7c6edd5f5bb90b87ffa95b86d84d6c1c4591b11d22c772a8ad7f2fe6bd8b46be0e93672df2e8bff8ba80629e1846cfd4603e75f2d98874665c1a089":int:32:hex:"07764143":char*:"":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #0 [#2] +depends_on:0 +2:exp:0:hex:"a9444fd176acbe061d0221fde3ddfcc4ff74e995d981a831297c4cbda51c22a1":hex:"c146ff5a988496cad7eced7a2ea471e0117d5d6bd2562c23ce9db4bf36d83ba3fc22e90486ec288a627d208e0b2fd3b65f8301cf7fc41d97959981a95cd1cf37effc46db99b94b21c941c3613c26a10b1a6b7793f467d58ff5134612230f1c49d7e1fcf664fe52fc6eca46273982f6fe729b009d90eb8d8e4a0b0dbe907b76da":hex:"5714732145470da1c42452e10cd274b5":hex:"":int:128:hex:"db85b830a03357f408587410ebafd10d":char*:"":hex:"a3cad9a57fa28e6f6aaa37150a803bf8b77e765f0702e492c4e5ebb31ae6b12d791149153e469a92bb625784a699fd7ca517500ee3f2851840ba67063b28b481e24ba441314e8b7128f5aaccaf4c4e2c92258eb27310bf031422b7fc2f220f621d4c64837c9377222aced2411628018a409a744902c9e95c14b77d5bb7f5846b":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #1 [#2] +depends_on:0 +2:exp:0:hex:"686d3bd071e3f46f180611bc4ec8d7726fe72b6c617e7d42b3339f53918c9e36":hex:"21983ad66449c557263aef299da6eef8f31d576fc17ed2dac3e836f7c2ceaff3094b2695452680e188df10c174810efd1fbaa6c832baedce0b92e4c7121447f6461ac909b4302cdf658095b1de532b536faa4fb38cfdf4192eb5c3fe090d979a343492f841b1edc6eb24b24bdcb90bbbe36d5f8409ce7d27194a7bb995ecc387":hex:"a714e51e43aecfe2fda8f824ea1dc4b7":hex:"":int:128:hex:"cd30c3618c10d57e9a4477b4a44c5c36":char*:"":hex:"9610908a0eb2ee885981c9e512e1a55075a212d311073bbb2fb9248cce07af16ee4c58bdc8dbe806d28480f9065838146f3e1eb3ae97012cfe53863a13d487f061a49a6c78ca22a321fa25157dbe68c47d78f2359540cc9031ee42d78855ed90e6b8ea3d67725bfffcb6db3d438c982b5f88d9b660f7d82cb300c1fa1edebb6b":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #2 [#2] +depends_on:0 +2:exp:0:hex:"6fe81f15a02e2ecf46e61199c057102d160e6b5d447d4a275972323fff908c3e":hex:"0b4ee0385e6665da8fd2ae47f2d0cf1c5bd395a3bb447047ab5a3ae0b95355bf83d0381119a8d4c01acbe60cd7885da650502f73498a682fdc94f7b14f4c753226064fa15e3a90a6083e053f52f404b0d22394e243b187f913ee2c6bb16c3033f79d794852071970523a67467ce63c35390c163775de2be68b505a63f60245e8":hex:"91d55cfdcdcd7d735d48100ff82227c3":hex:"":int:128:hex:"cd7da82e890b6d7480c7186b2ea7e6f1":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #0 [#2] +depends_on:0 +2:exp:0:hex:"4c2095e1379389dc3810e8819314f5a2f87d1494213c5b1de1a402f7f4f746c4":hex:"26ec8ebac0560538a948afbc18fb730e9a91f21392bde24b88b200f96114b229a5b57fa9d02cf10e6592d4dfb28bf0f00740c61157ce28784e9066ea3afd44ecf3a494723610cb593c0feffc6897e3435c6f448697ad3e241685c4e133eff53bdd0fe44dd8a033cfb1e1ea37a493934eb5303ae6ef47ce6478f767ef9e3301ab":hex:"19788b2e0bd757947596676436e22df1":hex:"":int:120:hex:"f26a20bea561004267a0bfbf01674e":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #1 [#2] +depends_on:0 +2:exp:0:hex:"be5351efc0277afc9759ec2464a22cb4401f7a17efd1a205e7af023c7ed30ee1":hex:"1eca91406f338fc09c2988b1d7dc8c409d719300c03840a497d7b680cdd5e09b144903477f7116a934e1d931cf368af1fc2a0a0e7caa95475a3cd7bf585a16fda31eb3f8201db0216b37a1635c1c030836b3dd05ca5b0194388fa198e717822131d5d4318690ef82d35ac80b27fff19aec8f020dc6c6ce28f0813bbbf8230ad9":hex:"c6b26117d9dbd80c1c242ad41abe2acc":hex:"":int:120:hex:"61051d6c0801b4a6b6ca0124c019f3":char*:"":hex:"95447aded336d6c20d483a6f062d533efed0261ad321d37bf8b7321b98f55c0f0082ce7f3d341b18fea29a72fc909d30cd8c84a1640227227287674a9b2f16a81b191ecf3b6232d656c32d7b38bea82a1b27d5897694a2be56d7e39aa1e725f326b91bad20455f58a94a545170cb43d13d4b91e1cee82abb6a6e0d95d4de0567":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #2 [#2] +depends_on:0 +2:exp:0:hex:"814c2cdfdeecf39d43bb141fbfc62dac44f7552c5e5dac2d4913303fc860119b":hex:"0d3013a1d7132f685d001420daa6c7b643bc36b887511acc4588237d3b412c79e4ebba29c08248ad46c7239e8daa232b7483c9c4e3d1c0bbebc696401efe21f7fd6fc0525a4ab81bd9a893d5f7ab23b70ed07c00f33649b8a996a006de6c94f7793f72848793f4d5b31311c68aae1e715b37409fbe506dac038a0950f05fe82b":hex:"0db3ade15cb0dea98a47d1377e034d63":hex:"":int:120:hex:"e62f910b6046ba4e934d3cfc6e024c":char*:"":hex:"374d03cfe4dacf668df5e703902cc784f011f418b43887702972dcc3f021bcb9bdd61ed5425f2975b6da7052c4859501eb2f295eb95d10ba6b2d74e7decc1acacebf8568e93a70a7f40be41ac38db6f751518c2f44a69c01c44745c51ad9a333eda9c89d001aa644f1e4063a8eb2a3592e21c6abc515b5aacaec8c32bcf1d3c4":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #0 [#2] +depends_on:0 +2:exp:0:hex:"1ae4541110f2bc4f83cd720b5c40c8315413d896e034b75007f172baa13d29ec":hex:"5ea811e7fbfc0e00bf2a6abfac50cad9efd90041c5f7fb8f046a0fecbd193b70a2de8a774d01dd3cd54f848cb3e9f5152ee1b052ba698bebfba1fbbdae44a260447d6e6482640ae4d01c9cac3d37d4ffe9a0de0b6001de504a33ef7620efe3ce48ecd6f5b1b3a89185c86d4d662a843ff730e040e3668d6170be4cced8a18a1c":hex:"83f98eec51ee4cae4cb7fe28b64d1355":hex:"":int:112:hex:"df47eef69ba2faab887aa8f48e4b":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #1 [#2] +depends_on:0 +2:exp:0:hex:"20c9b662ec4bd13bf58d64cb0a7159b0e7fee4703af66292bf75c8bd6e42e8dc":hex:"45b64f2ed5ac707890c0c1726adf338770ce6a728fe86bb372c4c49409a32705f881bc4d31a27c455c7c7df9dd2c541743523e7d32f88930d988857847f011be5f5f31a31e8812745147cbff5c1294d0fd4a7285db4833f22bf1975250da99c4d0dd2c9688d7f8001bb6ef2bc898ce4d42c5b78e74645b56ce992338f49d4183":hex:"2bc0847d46f3d1064bbf8fe8567f54a2":hex:"":int:112:hex:"5a1bf25aa8d5c3fe5cf1be8e54a1":char*:"":hex:"9079d6275db076625e8474c2914fe483d413d5339202f98f06c3b0ef063d8f3d31029deaf7f9349bfec57e5cf11f46f02d5a6520c7992efc951adbbea6d08e53faeb10dfe8b67ee4685da9ea4fe932551a65821147d06d4c462338e6ddda52017c2bc187fd6d02b7d5193f77da809d4e59a9061efad2f9cadbc4cd9b29728d32":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #2 [#2] +depends_on:0 +2:exp:0:hex:"0a1554db37f2e275732a77e521cbd8170729d8677a85db73feacf3c66a89d689":hex:"5421d93b7e6e0091978c673df4f3a406aef5f13eb5e6f95da19b0783308cbe26d4fd6c669cc4a9f069d7e62e4c6fad14b80e918fe91556a9a941a28b3dbf776a68ac7c42df7059b5ed713e78120aec84e7b68e96226c2b5e11a994864ed61b122e7e42ef6cfdae278fadbae1b3ea3362f4e6dc68eef6a70477b8a3ffcfba0df9":hex:"b9194a4d42b139f04c29178467955f1d":hex:"":int:112:hex:"05949d591793ca52e679bfdf64f3":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #0 [#2] +depends_on:0 +2:exp:0:hex:"3ab1d9bb571c4bdc9f3ef340914bddcfe0c8e7718d4a2530334372cec86e5fcb":hex:"80bcea307e009745724d5f15d21f3b61a5d5a8401530346b34a2adfa13e3e8c9c9327d6fad914b081e554fbe6c1c6fe070b566620e559555c702c0ab5becf61ea1d9de64351ce43b2276ef4e20b5af7ce43db6d21286af4e740ef00c6d790705afcf0ee4850fffc12c662f2bd8212feb21db31065ab8f717a7509c213352b869":hex:"6a5335901284dd3b64dc4a7f810bab96":hex:"":int:104:hex:"04b8e5423aee8c06539f435edd":char*:"":hex:"36b9602eee20b8f18dce0783cd1e01a799f81ae0a1ce6d293a26c62f47e7dad85c8446697cc09c81d3d9ead6f9e55c4147211660c8aea9536cc5516e9883c7d6854be580af8cd47ba38fa8451f0dad9c904e0e7f9997eff7e29bf880cd7cedd79493a0e299efe644046e4a46bf6645dfb2397b3a482a346b215deb778c9b7636":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #1 [#2] +depends_on:0 +2:exp:0:hex:"7dddbd5657e22750bfe6baa70a1f4ac46c1ef8bee573a57cfcef50b66f85e593":hex:"2bf5aba83a8161b9d21ff29251fb0efa697b1ea9c1b3de8481d5fd4d6b57afda0b098decdc8278cc855f25da4116ed558fc4e665a49a8fff3aef11115757a99c10b5a73b1f794f9502186c13dc79442f9226bbf4df19a6440281f76184933aeae438a25f85dbd0781e020a9f7e29fb8e517f597719e639cbd6061ea3b4b67fb0":hex:"fcb962c39e4850efc8ffd43d9cd960a6":hex:"":int:104:hex:"1d8cdadcf1872fb2b697e82ef6":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #2 [#2] +depends_on:0 +2:exp:0:hex:"6916b93b2712421f1f4582de7ec4237c4e42e2b32c7dced2f8bb5bd2e0598312":hex:"3739cca20279a36ddb857ac22beae901a49529b3182463ab81a7c46e437eb0b0571e8c16f7b626ecd9f2ca0cd83debe3f83e5d58ed3738899f4b616755eb57fb965208f261736bdf7648b1f8595c6b6a779768115e3077dfee7a42d44b555a51675fb1ce9961d0e21b2b9b477c0541184350e70decf7c14a4c24b8a6cd5fed8e":hex:"b4d9248bb500e40de99ca2a13e743f1c":hex:"":int:104:hex:"090d03446d65adcc0a42387e8e":char*:"":hex:"0255be7ac7ac6feb3a21f572f6a593cc8a97f17af7064c80e478f4a6c469cf94d604bc014b003bf284d216161a9c8a493af43c6a0d8caf813a9e6f83c7ed56dd57543876b11f76aa2be80dcd79d19ac61f00fa423ac2f52fae7a8327cd91494ca4116feb735980ad0a4b1445cb7f38cc712b8aee72179e65b97fca38694e3670":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #0 [#2] +depends_on:0 +2:exp:0:hex:"b751c8b724165009a8bd97a9d2a0e22cae5a95c4743c55eeeef0a6fe7d946bec":hex:"e8546a5af1e38114822e60e75563a9399c88796f303c99c69d1f3c50379da81e1cd5b5a4a721e23c59da58ea4361b7ff58408e506a27fea24f9a235c6af7f7a5bd93fa31e90edfc322821c08d6324134830b7fe160b4a3e6d27866a10e6e60762a31618ef92f5c67ccb1deb1f1b188f0e687165e7c366c7418920df4f4fcdcae":hex:"160c50c0621c03fd1572df6ba49f0d1e":hex:"":int:96:hex:"9fef9becf21901496772996f":char*:"":hex:"175fa6b7cd781ec057ff78ba410f2897a920739b5fc4f04bc9b998fbc7cc18e327ad44d59b167e4627256aaecd97dc3e4a7c9baaf51d177787a7f4a0a2d207a855753c4754d41348982d9418b6b24b590632d5115dc186b0ba3bec16b41fa47c0077c5d091ec705e554475024814c5167121dd224c544686398df3f33c210e82":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #1 [#2] +depends_on:0 +2:exp:0:hex:"0faf32c22c2a4ee38fe4b5ce08f98fdf6f83b5038dcba5ec8332b3eeb5c710c7":hex:"8a556cc30075753c6e94c2f669bca2058ff6abcbffffc82da7cfca0a45af82dfb4cf487ceb4ede72be87ee4c8b72db1e96459de1dc96721464c544c001d785f2188b9fccaec4b1a37970d38b326f30163d2fdfdf8a2ce74aec55abcd823772b54f8081d086a2e7b17b4086d6c4a5ea67828ef0b593ea1387b2c61f5dfe8f2bb0":hex:"04885a5846f5f75a760193de7f07853c":hex:"":int:96:hex:"0c13506ed9f082dd08434342":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #2 [#2] +depends_on:0 +2:exp:0:hex:"0dddc3d2f82bdcdbc37648a6b9b416af28753740f8e998cd1a52a0b665369f1c":hex:"07bf84b15b21951fd22049be6991a672503ae243b8d285fb1e515e1d2c36bfd5b0d0bcce85791f2cea8f616aed68a7d9cf4eaf76418e8b1ec27751de67cbfd9d9f7905b2667904f10d598503f04c04ea00a681ff89a9c446d5763898430bd7a9dfebfe544e3ed3e639b362683a651e087626ffa63c0c2b3e0dd088b81b07f75e":hex:"0a93b883cbd42998ae2e39aab342cb28":hex:"":int:96:hex:"5c37918edb7aa65b246fd5a6":char*:"":hex:"ff7b7b2f88b8c6f9f9bad7152874e995eea0ff1ce1ecd9b8d563642a37a31499f14d70f0dd835b7adf80928497f845fd8c2786cd53af25f8c9fe1bba24e3c3860162635bbed58f06cf6c9966bb9b570987a48329279bb84afb9e464bb4ad19ae6600175086e28929569027c5285d2ed97615e5a7dada40ba03c440861f524475":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #0 [#2] +depends_on:0 +2:exp:0:hex:"a0b1a62e46e7712277fc711e19d0c0c865ee77b42ac964b7202dbcaf428086c2":hex:"7dd7c0787fdbea4aacf929341659dcf4b75cbca8f92001e8b62a4d7b40272c5755fa9c445857db05328dc11ce5221f044f4b3dafbf0e2d72a1ad0d3e4c804148db578218690ccc620d8b97b4450ff83400a6caaa959617611446a6627138a4067be9ea410d4b0581022ab621928205b4a4480560fc4c2c3b39a2805684006f35":hex:"e20957a49a27e247d00379850f934d6c":hex:"":int:64:hex:"c99751516620bf89":char*:"":hex:"9307620479f076c39f53965c87d20c2aff11c736c040dba74cd690d275591a5defc57a02f6806de82eb7051548589484364f6c9b91f233a87258ede1ee276cb2c93b4fc76f4d7e60cbd29ba2c54cb479c178fa462c1c2fb6eeb3f1df0edfb894c9222b994c4931dedf7c6e8ddecbde385ddf4481807f52322a47bf5ff7272991":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #1 [#2] +depends_on:0 +2:exp:0:hex:"ffcc1c88fba1723b3ab57b458d9bffb98b878c967fb43b9db2ae0753d32a3bb1":hex:"19b6dec86d93c466307de3a36c0791ed1010b1b9cf8d30347ae46e0f9283c9fda43da8cb491dd17cc4298b1f0b876d6a0f4bcbc9667fe34564bc08f8f7b67045057d19f4bf027bc839e590822fa09a5cef1af18e64a0116aa2a01a3f246c2b5272c18c9aa23efe674ba53d533ae8f0695cb78c1155cdc7a9d7fae2c4567dc07c":hex:"d533c2170c5dc203512c81c34eff4077":hex:"":int:64:hex:"167ec8675e7f9e12":char*:"":hex:"0539287ac546fe5342e4c3c0ec07127dcd22899abfe8cdd6e89d08f1374d76e877bec4844d06e0a9f32d181c8d945ba16a54ce3725fae21d8245c070a4da0c646203d6b91325b665ab98c30295851c59265b4ab567b968b6e98536b7850738d92e9627b4c9c6f5d9ae2520944783d8f788a1aa11f3f5245660d41f388e26e0a1":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #2 [#2] +depends_on:0 +2:exp:0:hex:"55e94b339c3bafe068ef9cc30787cc6705850114976843777c92b4b331801650":hex:"147cc7bc4008dadf1956520b5998d961499bdf3d8b168591adbfd99411ad7b34eb4b2a5c1bb0522b810fec12dd7c775784d7ecdc741e6dec8191361e6abf473b219221801951b4d5ffe955ab50eef9cffdfee65ba29ddfa943fb52d722825338c307870a48a35f51db340aa946c71904d03174b1e4a498238b9d631a6982c68d":hex:"2e2b31214d61276a54daf2ccb98baa36":hex:"":int:64:hex:"5266e9c67c252164":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #0 [#2] +depends_on:0 +2:exp:0:hex:"13c9572bdef62510d84f2d415cc481cd1e71b9c1132b43e63b21ba4e16de9b39":hex:"7c78e634dec811173ff3c4a9a48ae3ae794fbd2aefd4b31701777ff6fcb670744c592a1d298d319717870dca364b2a3562a4ffa422bf7173c4f7ea9b0edf675e948f8370ffd0fd0d5703a9d33e8f9f375b8b641a1b1eecd1692ad1d461a68d97f91f9087f213aff23db1246ee16f403969c238f99eed894658277da23ced11ee":hex:"a8339ba505a14786ad05edfe8cebb8d0":hex:"":int:32:hex:"df3cab08":char*:"":hex:"91f9780daefd2c1010c458054ac6e35baa885cdd2c95e28e13f84451064e31e0739f27bf259cb376ab951e1c7048e1252f0849ccb5453fc97b319666ebbfbc7ef3055212a61582d1b69158f3b1629950a41bc756bded20498492ebc49a1535d1bd915e59c49b87ffebea2f4ad4516ecdd63fa5afda9cce9dc730d6ab2757384a":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #1 [#2] +depends_on:0 +2:exp:0:hex:"30a14ca53913acbb215b4e4159083106db3fff83cbedd1e5425f65af1e94f5dd":hex:"8c5f73ee1544553b712ad7a14f31379c8d54a4e432fb6c5112436988d83c4e94954b0249b470538fb977b756fbee70b811d4dc047a869e207bb0b495f1e271d0034e912000e97594033e0dedde0591b297f8a84bafcc93a46268a5bba117b558f1c73513e971c80a7083e1718fc12d0cc0d996a8e09603d564f0b8e81eea28bc":hex:"4f23f04904de76d6decd4bd380ff56b1":hex:"":int:32:hex:"18e92b96":char*:"":hex:"bb4b3f8061edd6fa418dd71fe22eb0528547050b3bfbaa1c74e82148470d557499ce856de3e988384c0a73671bf370e560d8fda96dabe4728b5f72a6f9efd5023b07a96a631cafdf2c878b2567104c466f82b89f429915cf3331845febcff008558f836b4c12d53e94d363eae43a50fc6cb36f4ca183be92ca5f299704e2c8cf":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #2 [#2] +depends_on:0 +2:exp:0:hex:"e69f419140289ac25fb0e2ef9cc4f7e06777ac20f7d631918d1af0c8883b7d6a":hex:"ff8dfa4e70490ea9c84cb894dc5d7e1b935ebcdea80a39c4161d4db42cbb269cc86abd381af15ec9a4a42ed18c1eed540decec19722df46f22aa06883297cb393fb23e4bb31a817e88357aa923c7ecbcf24c28a09f622dd21fa70c0a02193024fdcefeaa96cc1b50f81a65dfa9e1bb5126f0c9766a861eed096ec15fb07b0f81":hex:"531248afdaaf1b86cf34d2394900afd9":hex:"":int:32:hex:"c6885cdd":char*:"":hex:"f75299e0ead3834fc7ebd4b2051541b598ad57cc908fdcd4324cf4ccf7dcf7b3f0737ad6c026399a8b1b6d3d50011b3c48ea2c89833b4b44c437677f230b75d36848781d4af14546894eecd873a2b1c3d2fcdd676b10bd55112038c0fdaa7b5598fe4db273a1b6744cba47189b7e2a973651bfc2aaa9e9abea4494047b957a80":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #0 [#2] +depends_on:0 +2:exp:0:hex:"404a5d1ac9e32f9caabffbfa485ce9c27edc9e5cde0f2aab4f32ce3121449b88":hex:"b63ec4d28854b7fe2d4d13973f5bcb16f78494ce25cc2820de9d0dc1d8d91db1f19bc9e01cee8418c9e88a69b2f30cdbb0dbdbb50be71e1e666c111c126f2b7197c02f69a1b2ec5e1bf4062b2d0b22fb0fa1585b4e6286b29f6ac98d1b1319dd99851fa6921607077d2947140fdeeea145b56ea7b6af276c9f65393bc43ede33":hex:"b6e6c078e6869df156faa9ac32f057c3":hex:"6ebc75fc9304f2b139abc7d3f68b253228009c503a08b7be77852da9e1afbe72c9ab374740b0dc391fa4d7e17de6a0aa08c69e6f5c5f05411e71e70c69dfbcf693df84c30f7a8e6c7949ea1e734297c0ea3df9b7e905faa6bbdcaf1ff2625a39363308331d74892cf531cb3f6d7db31bbe9a039fca87100367747024f68c5b77":int:128:hex:"94c1b9b70f9c48e7efd40ecab320c2d3":char*:"":hex:"56a0ac94f3ec7be2608154f779c434ee96db5ed4f5a6e1acfb32361ce04e16e1337be5978df06d7c4f6012385fb9d45bb397dc00f165883714b4a5b2f72f69c018ffa6d4420ad1b772e94575f035ad203be3d34b5b789a99389f295b43f004de3daaef7fa918712d3a23ca44329595e08da190e3678bc6ad9b500b9f885abe23":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #1 [#2] +depends_on:0 +2:exp:0:hex:"b56f0c980acf7875cf7f27d53ad4a276adc126d0b93a5774ac4277eecad4309e":hex:"2c94299e36b7c4a825ecbc5a7809061e0a6761764a5a655ffdb0c20e5c3fcb10f4e93c68aa0a38c2acc5d06f2b7c4ff4fcf814b551bfefa248dbe06a09a0f153213538a31fa7cf7d646b5b53908d8978f514c9c4d6d66f2b3738024b5f9c3fd86b6da0c818203183f4205f186ea44a54edb911b1a17c424c95852c8d271b2e93":hex:"b004c049decfb43d6f3ec13c56f839ef":hex:"b2045b97fbb52a5fc6ff03d74e59dd696f3f442c0b555add8e6d111f835df420f45e970c4b32a84f0c45ba3710b5cd574001862b073efa5c9c4bd50127b2ce72d2c736c5e2723956da5a0acb82041a609386d07b50551c1d1fa4678886bac54b0bd080cc5ef607dca2a0d6a1e71f0e3833678bf8560bc059dae370ec94d43af6":int:128:hex:"fce7234f7f76b5d502fd2b96fc9b1ce7":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #2 [#2] +depends_on:0 +2:exp:0:hex:"1c5027c36e6caa1b3e5e45fead32b5e3126ac41f106c491b0b3a7c16502f4fe6":hex:"58f0ceaa31c0025d2e6bb58720cce4b64f5f6c657c847ae42936eb1e343fea397c8a8cf2f5ef02ffaec25f431900dcb0910cf32cea9eca3b78aed1c451c7af51066489f87b2a5f8cf28d6fdb6ce49d898b6167b590a3907be7618be11fb0922a3cfd18e73efef19e5cdc250fa33f61e3940c6482ae35f339e8c0a85a17379a4e":hex:"3ee660f03858669e557e3effdd7df6bd":hex:"93e803c79de6ad652def62cf3cd34f9addc9dd1774967a0f69e1d28361eb2cacc177c63c07657389ce23bbe65d73e0460946d31be495424655c7724eac044cafafe1540fcbd4218921367054e43e3d21e0fa6a0da9f8b20c5cdbd019c944a2d2ee6aa6760ee1131e58fec9da30790f5a873e792098a82ddf18c3813611d9242a":int:128:hex:"ac33f5ffca9df4efc09271ff7a4f58e2":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #0 [#2] +depends_on:0 +2:exp:0:hex:"34c3019810d72b5e584f0758f2f5888a42729a33610aafa9824badade4136bbd":hex:"22deef66cbb7db240c399b6c83407f090d6999ba25e560b2087fed0467904bb5c40cbaa05b8bf0ff5a77c53fa229478d8e0736414daf9c420417c391c9a523fd85954533f1304d81359bdcc2c4ac90d9f5f8a67a517d7f05ba0409b718159baf11cd9154e815d5745179beb59954a45a8676a375d5af7fae4d0da05c4ea91a13":hex:"f315ea36c17fc57dab3a2737d687cd4f":hex:"f33c5a3a9e546ad5b35e4febf2ae557ca767b55d93bb3c1cf62d862d112dbd26f8fe2a3f54d347c1bc30029e55118bab2662b99b984b8b8e2d76831f94e48587de2709e32f16c26695f07e654b703eba6428f30070e23ed40b61d04dd1430e33c629117d945d9c0e4d36c79a8b8ab555d85083a898e7e7fbeb64a45cc3511d99":int:120:hex:"0bae9403888efb4d8ec97df604cd5d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #1 [#2] +depends_on:0 +2:exp:0:hex:"29397d98fc5a7f04b5c8b6aa3a1dd975b6e4678457ae7f0691eee40b5397503a":hex:"0bbf1079cb5569c32257bc7e52371db46f3961b457402b816588243b4523543430d5ca56b52de6632724c51e6c3af310b28822c749a12bdd58dee58bbc3266631562a998ec3acdc8a2567a9f07f7f9759c3f50b1d1dcdd529256b80c0d227fc1fe8b58c62d1c643f1ac2996809fd061afcf4a9af184c14db9e63ec885c49de61":hex:"885543a45fd1163e34ef9276145b0f8c":hex:"d88beaa0664bcef178cbdbfab17ff526b5c0f8ad9543c6a312d93c336707fbf87c0448b07a550580953279f552f368225cc6971f1eecc718d6aad1729c8d8873081357752bd09d77075fa680cb2dc4139171e4a0aaa50b28c262c14fd10b8d799ca1c6641bb7dfdfdf3dea69aa2b9e4e4726dc18b0784afa4228e5ccb1eb2422":int:120:hex:"7b334d7af54b916821f6136e977a1f":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #2 [#2] +depends_on:0 +2:exp:0:hex:"7555dfcf354da07fd70f951d94ec1d86a635edfdb7929460207b2a39cc0cf4a3":hex:"a1351cfffd1b0cbf80c3318cc432d3238cb647e996b7b53c527783594683f535950cd08788687c77226b2d3f095955884adc2e475ca1e1eab04e37d5e901ae8934a9d3a0cb37b80612ca25d989856dfa7607b03039b64d7dcd468204f03e0f2c55cb41c5367c56ca6c561425992b40e2d4f380b3d8419f681e88ebe2d4bdad36":hex:"e1b30b6a47e8c21228e41a21b1a004f0":hex:"bf986d3842378440f8924bb7f117d1a86888a666915a93ba65d486d14c580501e736d3418cebee572439318b21b6e4e504a7b075b8c2300c014e87e04fa842b6a2a3ebd9e6134b9ddd78e0a696223b1dc775f3288a6a9569c64b4d8fc5e04f2047c70115f692d2c2cefe7488de42ff862d7c0f542e58d69f0f8c9bf67ef48aea":int:120:hex:"d8ef5438b7cf5dc11209a635ce1095":char*:"":hex:"95e8db7c8ecab8a60ceb49726153a7c5553cf571bc40515944d833485e19bf33cb954e2555943778040165a6cfffecef79eb7d82fef5a2f136f004bb5e7c35ae827fac3da292a185b5b8fc262012c05caeda5453ede3303cfeb0c890db1facadaa2895bdbb33265ada0bb46030607b6cf94f86961178e2e2deeb53c63900f1ec":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #0 [#2] +depends_on:0 +2:exp:0:hex:"bbeafe86c72ab0354b733b69b09e4d3462feb1658fe404004d81503f3a6e132f":hex:"a033c2051e425d01d97d563572e42c5113860e5dedcd24c76e3e357559ba3250f1fc5d4a931a9d0900ac025400f0158621f0b1215b2907467bfc874bcabbb28e28de81fe1ee5b79985261c512afec2327c8c5957df90c9eb77950de4a4860b57a9e6e145ea15eb52da63f217f94a5c8e5fcb5d361b86e0e67637a450cdbcb06f":hex:"ee1caba93cb549054ca29715a536393e":hex:"e44b0e0d275ae7c38a7dc2f768e899c1c11a4c4cb5b5bd25cd2132e3ecbaa5a63654312603e1c5b393c0ce6253c55986ee45bb1daac78a26749d88928f9b9908690fc148a656b78e3595319432763efbcf6957c9b2150ccabfd4833d0dcee01758c5efb47321a948b379a2ec0abcd6b6cbf41a8883f0f5d5bf7b240cb35f0777":int:112:hex:"a4809e072f93deb7b77c52427095":char*:"":hex:"e62adf9bbd92dd03cc5250251691f724c6ece1cb89d8c4daf31cc732a5420f6bedab71aab0238ba23bd7165ed1f692561ef457fd1d47413949405b6fc8e17922b17026d89d5830b383546ea516a56f3a1c45ec1251583ae880fa8985bd3dcc1d6a57b746971937bf370e76482238cc08c2c3b13258151e0a6475cc017f8a3d0e":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #1 [#2] +depends_on:0 +2:exp:0:hex:"6ad06c88dd4f3becf35eed95bb859be2406a1803a66e4332a74c5f75c09b9a01":hex:"2219c11672884b93d0290b6a7140feafe416461f1cdaf0b3aa64693d7db2eb10feae46aac7af549fa1b0abc78c11f8df7ee803ef70310fc3e67769f8b4bc64f81143a6ebf8bee9d386a8ede5d2cc0ed17985a3b7bb95191ef55e684690ccdc5ca504bc6eb28442b353861a034a43532c025f666e80be967a6b05b9dd3a91ff58":hex:"07d8b4a6e77aef9018828b61e0fdf2a4":hex:"cca1fd0278045dda80b847f0975b6cbf31e1910d2c99b4eb78c360d89133a1c52e66c5c3801824afc1f079d2b2b1c827199e83f680e59b9a7de9b15fa7b6848b5bf4e16a12ac1af4cf2b4d7bb45673c5e1241e9996440860a9204fc27cae46a991607bc5e7120d6c115ddcbdd02c022b262602139081e61eee4aba7193f13992":int:112:hex:"e3ede170386e76321a575c095966":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #2 [#2] +depends_on:0 +2:exp:0:hex:"87bbf7c15689e8c99a5a32a8ba0dfebcfe1989159807428cdd1f382c3ea95178":hex:"b77d3bf3b30b3e6e5c86cbfb7e5455f6480f423cc76834b4663d28d9f1eb5c40212634e3347668427f7848352ab789886f96682a568260bdaeb7de0aae2af36f5ae04f06c332b158d923706c1c6255c673feeadb6d30bfc901e60b92acd9ddd83ef98686c4d492f4a60e97af2541d470a6a6b21903441020ea7619cf28a06986":hex:"2f19aa1f3a82a7398706953f01739da7":hex:"590dbd230854aa2b5ac19fc3dc9453e5bb9637e47d97b92486a599bdafdfb27c3852e3d06a91429bb820eb12a5318ed8861ffe87d659c462ef167be22604facfa3afb601b2167989b9e3b2e5b59e7d07fda27ffccd450869d528410b0aff468f70cc10ef6723a74af6eebc1572c123a9b5a9aab748a31fa764716d3293ff5de7":int:112:hex:"5c43fc4dc959fabeebb188dbf3a5":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #0 [#2] +depends_on:0 +2:exp:0:hex:"24095a66b6eb0320ca75e2ab78e8496a45f4b000fc43436904c3e386fb852ed2":hex:"4690edc843e23d9d9b9a4dab8fa8193f8bf03897d3d29759e9dc9e0f8a970c0f5d4399b9f60461fe5cf439f9b0d54bbc075695e4d76b76298cc2b75bb3e0b516ee9ada93f77c4c002ba9fd163a1e4b377befb76c1e5ab8b3901f214c0a4c48bd2aa2f33560d46e2721a060d4671dc97633ff9bcd703bb0fbed9a4a2c259b53f3":hex:"0955c1f0e271edca279e016074886f60":hex:"f5160c75c449e6bb971e73b7d04ab9b9a85879f6eb2d67354af94a4f0ca339c0a03a5b9ede87a4ff6823b698113a38ae5327e6878c3ccc0e36d74fe07aa51c027c3b334812862bc660178f5d0f3e764c0b828a5e3f2e7d7a1185b7e79828304a7ad3ddcd724305484177e66f4f81e66afdc5bbee0ec174bff5eb3719482bd2d8":int:104:hex:"75a31347598f09fceeea6736fe":char*:"":hex:"0dd2dca260325967267667ff3ccdc6d6b35648821a42090abba46282869bac4bdc20a8bee024bea18a07396c38dbb45d9481fedcc423a3928cfa78a2f0ae8eedb062add810bdbee77ddc26c29e4f9fda1ab336d04ef42947b05fbdb9bc4df79e37af951d19d6bf5e5cb34eef898f23642a9c4a9111ed0b7a08abeeefbbd45c23":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #1 [#2] +depends_on:0 +2:exp:0:hex:"086b77b5731f971f0bf5b8227361b216746daf8b08c583ad38f114a64aa7877b":hex:"629317212ff8bd8a7676e4c00b81a9577de6397c832f99ac974fa2bbbccb6e3b8aa776db6922eed0b014bf3923799da7d9d0854c8817470e1e2f7fc7a572f9d0316ee60cde7ef025d59b897d29a6fee721aeb2f7bb44f9afb471e8a7b0b43a39b5497a3b4d6beb4b511f0cefa12ce5e6d843609d3e06999acfbee50a22ca1eee":hex:"164058e5e425f9da40d22c9098a16204":hex:"6633eae08a1df85f2d36e162f2d7ddd92b0c56b7477f3c6cdb9919d0e4b1e54ea7635c202dcf52d1c688afbbb15552adda32b4cd30aa462b367f02ded02e0d64eeee2a6b95462b191784143c25607fd08a23a2fbc75cf6bee294daf2042587fdd8fe3d22c3a242c624cf0a51a7c14db4f0f766ec437de4c83b64f23706a24437":int:104:hex:"2eb6eb6d516ed4cf1778b4e378":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #2 [#2] +depends_on:0 +2:exp:0:hex:"0f9e806b0d937268561c0eafbbdd14ec715b7e9cef4118d6eb28abbb91266745":hex:"2ae4baef22ace26f464a9b0c75802303f2d7c0f9a1ed1d0180135189765bdd347fea0cc2b73ee7fbbf95ea1fda22597b8aad826f63e744069a9c349488b2cc1cf9372f423cc650302082125724730ae5a4d878e07385ddc99034c6b6b46748f02c80b179fe6406b1d33581950cb9bcd1d1ea1ec7b5becfd6c1f5b279412c433a":hex:"8657996634e74d4689f292645f103a2e":hex:"2ca253355e893e58cb1a900fbb62d61595de5c4186dc8a9129da3657a92b4a631bbdc3d5f86395385a9aa8557b67f886e3bb807620e558c93aea8e65826eadeb21544418ee40f5420c2d2b8270491be6fc2dcbfd12847fa350910dd615e9a1881bc2ced3b0ac3bde445b735e43c0c84f9d120ca5edd655779fc13c6f88b484f7":int:104:hex:"83155ebb1a42112dd1c474f37b":char*:"":hex:"87d69fc3cbc757b2b57b180c6ba34db4e20dde19976bfb3d274d32e7cea13f0c7d9e840d59ce857718c985763b7639e448516ddbbda559457cd8cb364fa99addd5ba44ef45c11060d9be82b4ebe1f0711ac95433074649b6c08eeab539fdfc99c77498b420427e4d70e316111845793de1f67fb0d04e3389a8862f46f4582dc8":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #0 [#2] +depends_on:0 +2:exp:0:hex:"c24c17911f6db4b3e37c46bcc6fa35efc1a55f7754f0bb99f2eea93398116447":hex:"0bd92cb106867e25ad427ff6e5f384d2d0f432fc389852187fcc7b0bf9f6d11a102a872b99ed1ad9a05dab0f79fa634745535efed804ff42b0af8dad20ba44709391fb263f245e5a2c52d9ce904179633282f57a1229b0a9c4557a5c0aeda29bbc5a7a871fa8b62d58100c3722c21e51e3b3e913185235526e7a5a91c559717d":hex:"5098cc52a69ee044197e2c000c2d4ab8":hex:"9ad4dee311d854925fc7f10eca4f5dd4e6990cb2d4325da2ef25a9a23690f5c5590be285d33aaeba76506c59edec64b8c3ff8e62716d1c385fbce2a42bc7bd5d8e8584de1944543ab6f340c20911f8b7b3be1a1db18a4bb94119333339de95815cae09365b016edc184e11f3c5b851f1fa92b1b63cfa3872a127109c1294b677":int:96:hex:"f7930e3fab74a91cb6543e72":char*:"":hex:"6124ede608d416baa5e653a898ca76e9f47f08403c1984feec112e670ded2226e0073f8881ab2161cfda541dccae19691285f7391a729f07aba18f340bb452c1da39cbe83cf476cfc105b64187e0d2227dd283dcba8b6a350f9956b18861fa131d3f00c034443e8f60e0fdfcfaabbed93381ae374a8bf66523d33646183e1379":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #1 [#2] +depends_on:0 +2:exp:0:hex:"d267a8379260036ff3d1ec07a7b086ff75706bad12d37d9656f04776f3d8b85c":hex:"80c68a330ef50e3e516681f1e535868b03466e7edbb86cb385d01db487da3dd3edad940fdc98d918b7db9b59f8d61369eee2928c88557306c4a13e366af0708d94cb90a15f1c3bc45544bdb05ff964da5e06c5ae965f20adb504620aed7bce2e82f4e408d00219c15ef85fae1ff13fea53deb78afa5f2a50edbd622446e4a894":hex:"674dc34e8c74c51fa42aacd625a1bd5b":hex:"6a9a8af732ae96d0b5a9730ad792e296150d59770a20a3fdbbc2a3a035a88ac445d64f37d684e22003c214b771c1995719da72f3ed24a96618284dd414f0cac364640b23c680dc80492a435c8ec10add53b0d9e3374f1cf5bfc663e3528fa2f6209846421ea6f481b7ecf57714f7bc2527edc4e0466b13e750dd4d4c0cc0cdfc":int:96:hex:"bea660e963b08fc657741bc8":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #2 [#2] +depends_on:0 +2:exp:0:hex:"c86cb637753010f639fa3aa3bff7c28b74f012ad6090f2a31b0801d086f183ad":hex:"6b7858557e0fd0f957842fb30e8d54dedbc127eb4bbf9de319f731fa28a606df2c046a0bce8ecda4e75d3596e4e988efd6bc279aa005bc52fad92ba07f5b1dfda4cc417029f9778c88d6fe5341a0fd48893dcb7c68d0df310a060f2a5235aee422d380f7209bc0909b2aa7e876044056f0b915dab0bc13cbea5a3b86d40ca802":hex:"87ff6e0bb313502fedf3d2696bff99b5":hex:"2816f1132724f42e40deabab25e325b282f8c615a79e0c98c00d488ee56237537240234966565e46bfb0c50f2b10366d1589620e6e78bd90ade24d38a272f3fff53c09466aa2d3ef793d7f814a064b713821850a6e6a058f5139a1088347a9fa0f54e38abd51ddfc7ef040bf41d188f3f86c973551ced019812c1fc668649621":int:96:hex:"7859f047f32b51833333accf":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #0 [#2] +depends_on:0 +2:exp:0:hex:"2c31ca0cac3efe467168198f06beacf39565a6f57f82e1048a5c06a231315882":hex:"65261d6e29b2369b1828a7cef2df9873d6e6057c499301afedd6cb65b5036ddb95f9e353fbf38e54c4f46f88164325b33620ce183beb2e411fbb89a0e0002e542fc161cad32a61ee6f1e1717e0b4dcd0340b116f795bc1009dbbc65bc31c9b549bf03c40bc204cd0d02ec884be907777ebeed8b527ec3af7cbb508193c0745de":hex:"95cae6e85f33f3043182460589be3639":hex:"67523751a9b1b643d00de4511b55e4268cb2d18e79e01a55fc7b677d529bd6400940fb25ea6ae135c1a816e61b69e90b966981aeda685934b107066e1467db78973492ad791e20aef430db3a047447141def8be6e6a9a15089607c3af9368cdb11b7b5fbf90691505d0c33664766945d387904e7089b915a3c28886ba1763bb5":int:64:hex:"21309d0351cac45e":char*:"":hex:"1d5f2cb921f54aeb552b4304142facd49497837deb1f00d26fbeddbab922fd80b00dba782961f8fce84f1f7973e81eed6ee168b1760c575c891f40a1dae0fa1a08738025d13ef6e0b30be4f054d874f1b8a2427a19ebb071d98365c32316a88a68c2b40daf1ea831a64519ac3679acb4e04986ecc614ec673c498c6fee459e40":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #1 [#2] +depends_on:0 +2:exp:0:hex:"ca9fa36ca2159dff9723f6cfdb13280446eb6bc3688043c7e2e2504184791596":hex:"ac04c4293554cd832aa400c811cb202d815d6178aa1343b4628592b7f3ae45dc5f12ea47be4b43e1865f40b06ab67b3a9fb3644248a9b3efe131a8addb7447978bb51ccf749e75574fea60e8781677200af023b2f8c415f4e6d8c575a9e374916d9ec3a612b16e37beb589444b588e0b770d9f8e818ad83f83aa4ecf386d17a7":hex:"d13ca73365e57114fc698ee60ba0ad84":hex:"2aa510b7f1620bfce90080e0e25f5468dbc5314b50914e793b5278369c51ac017eace9fd15127fca5a726ad9e67bdee5af298988d9a57ec4bbc43d4eb849535eb10521ac7cd7ed647479a42876af2ebc9e2108b539febdaa9127c49bda1bda800f6034050b8576e944311dfbca59d64d259571b6d2ed5b2fc07127239b03f4b7":int:64:hex:"2111d55d96a4d84d":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #2 [#2] +depends_on:0 +2:exp:0:hex:"2f802e838250064c15fdee28d7bd4872850355870847701ad9742b2d6eb4b0c0":hex:"e2ca8c8d172ff90232879f510d1225af91bc323bdf636363c2903fcd1790692c8bcb03a1cccb18814678852c6b3a441552e541b843ee5e4f86a152fa73d05aea659fe08aa6428bb257eaa2a7b579fdc4022c1dec359a854253c1aefc983c5ede8c97517ea69fc4606e25f13ffb0f5f49160691454fbb74e704326738353525f7":hex:"2dd550cfd97f8e1d8d31ba5537ae4710":hex:"72b9630dda40306e785b961934c56e20948f8eac0e981f49787eb3dbd6e4607f7d08d10ca643746bf1efa7e5066993683d527a90f2d45ec9cf73113f1f17bb67958be669acd4e2927f1dacfde902cd3048056d7f6dfdd8630ff054efce4526db7c9321d6d2be2236f4d60e27b89d8ec94f65a06dc0953c8c4533a51b6a29bd2c":int:64:hex:"bd6c8823c9005c85":char*:"":hex:"f6dd0b5f3d1a393a1837112962dba175a13c2d1e525ef95734caf34949d8b2d63b4fe5603226b5f632f2d7f927361ba639dc0e3c63414f45462342695916d5792133b4a24c7c4cbe2b97c712bf27ab62d3d68b3875d58ffe4b7c30a8171bff1a9e2f3995768faacda2ea9213ff35798b9e4513f6a87bd3f5a9d93e847e768359":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #0 [#2] +depends_on:0 +2:exp:0:hex:"84dd53ce0146cb71c32776033bb243098d78a22ac17f52a62a122f5653fb4e33":hex:"68222bffa782dcfe4f328fc20eb520e75a9a5fedbe13ec7fcf0e82fba08bb87a8a8e02902638e32fe0e2294344b380797f8028426ffcc0531c739c884892394c48ff0779c5f5edf0a36a3fb8aa91213347774ec4bf0fe1049bd53746b13beef3c637169826c367056cb1aa0a3868e23f886a9c7b8015c26af9e40794662f6b21":hex:"f0c90a1bca52f30fab3670df0d3beab0":hex:"a3ea8032f36a5ca3d7a1088fd08ac50ae6bdc06ad3a534b773ac3e3d4a3d524499e56274a0062c58c3b0685cc850f4725e5c221af8f51c6df2bbd5fbcff4a93ba4c1054f7f9c67fd9285511a08d328d76a642f067227d378f95a1e67587b90251f9103ed3cacdb6bf69e0794e366d8b92d8de37b4e028de0778841f356ac044d":int:32:hex:"b1ece9fb":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #1 [#2] +depends_on:0 +2:exp:0:hex:"9bb36fe25e966a075ae2c3bb43b5877679ebc379d5123c8eda3fa0e30b95cae0":hex:"fb3a4be643c10343251c6f0745aaa54349463f622ca04a792e9b4780866844b30aeef3269fc60cac0ea031c5f3780b535e15154f7c76eb4a371b8ae368550f3fa2ce693c34511ec96b839cac567f1b0de0e7e3116d729b45d1b16e453703a43db73f5d0c3e430f16b142420b5f0d26d72ac3dba543d7d813603b0bfdca3dd63e":hex:"59869df4ef5754b406478a2fb608ee99":hex:"ecd125682e8a8e26757c888b0c8b95dec5e7ed7ac991768f93e8af5bcf6f21ed4d4d38699ee7984ed13635fff72f938150157c9a27fcda121ffced7b492d2b18dad299cb6495ed5f68441aefc8219d2cf717d15d5cd2dbce4606fcf90fe45f3601127cf6acee210bd7df97309f773974a35bef1d33df984101c2fc9d4b55259e":int:32:hex:"cb3f5338":char*:"FAIL":hex:"":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #2 [#2] +depends_on:0 +2:exp:0:hex:"ca264e7caecad56ee31c8bf8dde9592f753a6299e76c60ac1e93cff3b3de8ce9":hex:"8d03cf6fac31182ad3e6f32e4c823e3b421aef786d5651afafbf70ef14c00524ab814bc421b1d4181b4d3d82d6ae4e8032e43a6c4e0691184425b37320798f865c88b9b306466311d79e3e42076837474c37c9f6336ed777f05f70b0c7d72bd4348a4cd754d0f0c3e4587f9a18313ea2d2bace502a24ea417d3041b709a0471f":hex:"4763a4e37b806a5f4510f69fd8c63571":hex:"07daeba37a66ebe15f3d6451d1176f3a7107a302da6966680c425377e621fd71610d1fc9c95122da5bf85f83b24c4b783b1dcd6b508d41e22c09b5c43693d072869601fc7e3f5a51dbd3bc6508e8d095b9130fb6a7f2a043f3a432e7ce68b7de06c1379e6bab5a1a48823b76762051b4e707ddc3201eb36456e3862425cb011a":int:32:hex:"3105dddb":char*:"FAIL":hex:"":int:0 + +AES-GCM Bad IV (AES-256,128,0,0,32) #0 +depends_on:0 +0:exp:0:exp:1:hex:"ca264e7caecad56ee31c8bf8dde9592f753a6299e76c60ac1e93cff3b3de8ce9":hex:"":hex:"":hex:"":int:32:exp:2 + +AES-GCM Selftest +depends_on:0 +5 + diff --git a/third_party/mbedtls/test/test_suite_gcm.aes256_en.c b/third_party/mbedtls/test/test_suite_gcm.aes256_en.c new file mode 100644 index 000000000..e4c4e2683 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_gcm.aes256_en.c @@ -0,0 +1,642 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_gcm.aes256_en.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_gcm.function + * Test suite data : suites/test_suite_gcm.aes256_en.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +void test_gcm_bad_parameters( int cipher_id, int direction, + data_t *key_str, data_t *src_str, + data_t *iv_str, data_t *add_str, + int tag_len_bits, int gcm_result ) +{ + unsigned char output[128]; + unsigned char tag_output[16]; + mbedtls_gcm_context ctx; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + memset( tag_output, 0x00, sizeof( tag_output ) ); + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_gcm_crypt_and_tag( &ctx, direction, src_str->len, iv_str->x, iv_str->len, + add_str->x, add_str->len, src_str->x, output, tag_len, tag_output ) == gcm_result ); + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_bad_parameters_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_gcm_bad_parameters( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +void test_gcm_encrypt_and_tag( int cipher_id, data_t * key_str, + data_t * src_str, data_t * iv_str, + data_t * add_str, data_t * dst, + int tag_len_bits, data_t * tag, + int init_result ) +{ + unsigned char output[128]; + unsigned char tag_output[16]; + mbedtls_gcm_context ctx; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset(output, 0x00, 128); + memset(tag_output, 0x00, 16); + + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == init_result ); + if( init_result == 0 ) + { + TEST_ASSERT( mbedtls_gcm_crypt_and_tag( &ctx, MBEDTLS_GCM_ENCRYPT, src_str->len, iv_str->x, iv_str->len, add_str->x, add_str->len, src_str->x, output, tag_len, tag_output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + TEST_ASSERT( mbedtls_test_hexcmp( tag_output, tag->x, + tag_len, tag->len ) == 0 ); + } + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_encrypt_and_tag_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_gcm_encrypt_and_tag( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, *( (int *) params[11] ), &data12, *( (int *) params[14] ) ); +} +void test_gcm_decrypt_and_verify( int cipher_id, data_t * key_str, + data_t * src_str, data_t * iv_str, + data_t * add_str, int tag_len_bits, + data_t * tag_str, char * result, + data_t * pt_result, int init_result ) +{ + unsigned char output[128]; + mbedtls_gcm_context ctx; + int ret; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset(output, 0x00, 128); + + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == init_result ); + if( init_result == 0 ) + { + ret = mbedtls_gcm_auth_decrypt( &ctx, src_str->len, iv_str->x, iv_str->len, add_str->x, add_str->len, tag_str->x, tag_len, src_str->x, output ); + + if( strcmp( "FAIL", result ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_GCM_AUTH_FAILED ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, pt_result->x, + src_str->len, + pt_result->len ) == 0 ); + } + } + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_decrypt_and_verify_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data13 = {(uint8_t *) params[13], *( (uint32_t *) params[14] )}; + + test_gcm_decrypt_and_verify( *( (int *) params[0] ), &data1, &data3, &data5, &data7, *( (int *) params[9] ), &data10, (char *) params[12], &data13, *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_gcm_invalid_param( ) +{ + mbedtls_gcm_context ctx; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + mbedtls_cipher_id_t valid_cipher = MBEDTLS_CIPHER_ID_AES; + int valid_mode = MBEDTLS_GCM_ENCRYPT; + int valid_len = sizeof(valid_buffer); + int valid_bitlen = 128, invalid_bitlen = 1; + + mbedtls_gcm_init( &ctx ); + + /* mbedtls_gcm_init() */ + TEST_INVALID_PARAM( mbedtls_gcm_init( NULL ) ); + + /* mbedtls_gcm_setkey */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( NULL, valid_cipher, valid_buffer, valid_bitlen ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( &ctx, valid_cipher, NULL, valid_bitlen ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( &ctx, valid_cipher, valid_buffer, invalid_bitlen ) ); + + /* mbedtls_gcm_crypt_and_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( NULL, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, NULL ) ); + + /* mbedtls_gcm_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL) ); + + /* mbedtls_gcm_starts() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( NULL, valid_mode, + valid_buffer, valid_len, + valid_buffer, valid_len ) ); + + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( &ctx, valid_mode, + NULL, valid_len, + valid_buffer, valid_len ) ); + + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( &ctx, valid_mode, + valid_buffer, valid_len, + NULL, valid_len ) ); + + /* mbedtls_gcm_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( NULL, valid_len, + valid_buffer, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( &ctx, valid_len, + NULL, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( &ctx, valid_len, + valid_buffer, NULL ) ); + + /* mbedtls_gcm_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_finish( NULL, valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_finish( &ctx, NULL, valid_len ) ); + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_gcm_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_gcm_valid_param( ) +{ + TEST_VALID_PARAM( mbedtls_gcm_free( NULL ) ); +exit: + return; +} + +void test_gcm_valid_param_wrapper( void ** params ) +{ + (void)params; + + test_gcm_valid_param( ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_gcm_selftest( ) +{ + TEST_ASSERT( mbedtls_gcm_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_gcm_selftest_wrapper( void ** params ) +{ + (void)params; + + test_gcm_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_GCM_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_GCM_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_ID_AES; + } + break; + case 1: + { + *out_value = MBEDTLS_GCM_DECRYPT; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_GCM_BAD_INPUT; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_GCM_C) + + case 0: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_bad_parameters_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_encrypt_and_tag_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_decrypt_and_verify_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_gcm_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_valid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_SELF_TEST) + test_gcm_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_gcm.aes256_en.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_gcm.aes256_en.datax b/third_party/mbedtls/test/test_suite_gcm.aes256_en.datax new file mode 100644 index 000000000..90a9916c5 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_gcm.aes256_en.datax @@ -0,0 +1,680 @@ +AES-GCM NIST Validation (AES-256,128,0,0,128) #0 [#1] +depends_on:0 +1:exp:0:hex:"fb8094dd2eddb3d8004bb79134023ca2be4de9b668a9e4608abdf2130e8becb8":hex:"":hex:"491a14e13b591cf2f39da96b6882b5e5":hex:"":hex:"":int:128:hex:"80883f2c925434a5edfcefd5b123d520":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #1 [#1] +depends_on:0 +1:exp:0:hex:"725313f4cb3f6a0d29cefc174b7e4f43cef11b761ef75e1995cb64c1306795f1":hex:"":hex:"27d1ed08aba23d79fc49ad8d92a2a0ea":hex:"":hex:"":int:128:hex:"d5d6637ba35ef2ad88e9725f938d3d2d":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #2 [#1] +depends_on:0 +1:exp:0:hex:"4e766584ce0e885e1bba1327e5335796de0831a40f74a5cec178081dd15bfd10":hex:"":hex:"cece0dea024ff47851af0500d146cbfe":hex:"":hex:"":int:128:hex:"1abe16eeab56bd0fb1ab909b8d528771":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #0 [#1] +depends_on:0 +1:exp:0:hex:"ce7f2207f83a952451e714ba3807ddb3ed67c2739a628980411aa68366b1f2f5":hex:"":hex:"652fd951ace288db397020687135a5d1":hex:"":hex:"":int:120:hex:"985227b14de16722987a3d34976442":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #1 [#1] +depends_on:0 +1:exp:0:hex:"855f8fa4ec6a1206173509d504d0b29dfbfbfa9aa528254b189cd72e6ebc1c1f":hex:"":hex:"1ad1507e6463e4e2e1a63155ac0e638f":hex:"":hex:"":int:120:hex:"693146a8b833f324c1d4cbeeb8c146":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #2 [#1] +depends_on:0 +1:exp:0:hex:"ef8dd1294a85dd39e366f65e1076d53e046188c06c96b2c9e84ebc81f5c9f550":hex:"":hex:"9698a07447552d1a4ecd2b4c47858f06":hex:"":hex:"":int:120:hex:"b00590cac6e398eeb3dcb98abe1912":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #0 [#1] +depends_on:0 +1:exp:0:hex:"25896e587570ff1823639e1e51e9c89192d551b573dd747e7c0c1c10916ece4c":hex:"":hex:"f0516457c09c372c358064eb6b470146":hex:"":hex:"":int:112:hex:"5a7cadec600a180e696d946425b0":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #1 [#1] +depends_on:0 +1:exp:0:hex:"02fc9cfffbe72e7954182993088e09d24ea8cad91a8ca9a336d9f1fe4156486d":hex:"":hex:"0e189e162e097eb2060b30c46d9afa70":hex:"":hex:"":int:112:hex:"7d3d5cc55e6182ec5413ef622d4f":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #2 [#1] +depends_on:0 +1:exp:0:hex:"f24e3d631d8961d3d4b9912d4fa7a317db837a7b81cd52f90c703a4835c632e2":hex:"":hex:"510740bfa2562ce99ca3839229145a46":hex:"":hex:"":int:112:hex:"1402ddc1854e5adb33664be85ad1":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #0 [#1] +depends_on:0 +1:exp:0:hex:"720ab5aceb80ff1f864379add9b0d63607227f7c3f58425dd6ec3d4cea3fe2ea":hex:"":hex:"58f2317afb64d894243c192ef5191300":hex:"":hex:"":int:104:hex:"e8e772402cc6bfd96a140b24c1":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #1 [#1] +depends_on:0 +1:exp:0:hex:"f57dd16fa92a8f8c09d8f13cb5b6633a43b8762e90c670232f55949cdfdf700c":hex:"":hex:"3b7c14ee357b3c6b0dc09e3209ab69f2":hex:"":hex:"":int:104:hex:"43e609664e48ad1f5478087f24":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #2 [#1] +depends_on:0 +1:exp:0:hex:"87c17ab919a4bc0d50343c0bb282a969283c2ada25f9a96d2858c7f89bc5139a":hex:"":hex:"02813d3faf30d3e186d119e89fe36574":hex:"":hex:"":int:104:hex:"d1a1f82a8462c783b15c92b57e":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #0 [#1] +depends_on:0 +1:exp:0:hex:"dd8d5b6c5c938c905c17eab9f5ab7cd68d27f3f09d75177119010d070b91e646":hex:"":hex:"1df1c3ad363c973bffe29975574ffdf6":hex:"":hex:"":int:96:hex:"749ac7ffda825fc973475b83":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #1 [#1] +depends_on:0 +1:exp:0:hex:"4d60a14cb789099c77b8991e7b0b40f787d3458f448501e8108e4d76110f94ef":hex:"":hex:"ca6b3485eb5dcd9dbfa7cffcdb22daa5":hex:"":hex:"":int:96:hex:"3f868b6510d64098adc1d640":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #2 [#1] +depends_on:0 +1:exp:0:hex:"405b690717de993ad945d80159c2800848060de0b7d2b277efd0350a99ba609a":hex:"":hex:"63730acb957869f0c091f22d964cc6a3":hex:"":hex:"":int:96:hex:"739688362337d61dab2591f0":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #0 [#1] +depends_on:0 +1:exp:0:hex:"ab5563a387e72d7d10468c99df590e1de25ec10363aa90d1448a9ffcd1de6867":hex:"":hex:"c511406701bad20a2fa29b1e76924d2f":hex:"":hex:"":int:64:hex:"390291ed142ba760":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #1 [#1] +depends_on:0 +1:exp:0:hex:"abef7c24daaa21f308a5af03df936ba3f70aa525190af0d959d6e50d836f4624":hex:"":hex:"e9f15950130b9524e2b09f77be39109a":hex:"":hex:"":int:64:hex:"db2fb2b004bc8dc4":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #2 [#1] +depends_on:0 +1:exp:0:hex:"6ca630b0b6779a8de7a19e5279eac94bf29f76f8b0cf8ecf8f11c4f8eb04aa0d":hex:"":hex:"7373befc2c8007f42eef47be1086842f":hex:"":hex:"":int:64:hex:"e2b8620bcc7472a8":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #0 [#1] +depends_on:0 +1:exp:0:hex:"acea7818a71df2c9840aef1c10ecbe2bac7e92216388416a2f36119a0745d883":hex:"":hex:"6d46aa39fb5a6117e9adf7ee72bc50ff":hex:"":hex:"":int:32:hex:"fd5ff17b":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #1 [#1] +depends_on:0 +1:exp:0:hex:"b301036d4b2b28b8a4502925986861eba2b67c24cb0c79c63fd62195d9b67506":hex:"":hex:"bb6f398e5aed51590e3df02f5419e44d":hex:"":hex:"":int:32:hex:"47f3a906":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #2 [#1] +depends_on:0 +1:exp:0:hex:"89576d2aac554c8982c7df0053be9ab19f4bd80ba9f3dd433c1c054d68e68795":hex:"":hex:"aedbd482a401a7c12d4755077c8dd26e":hex:"":hex:"":int:32:hex:"506fa18d":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #0 [#1] +depends_on:0 +1:exp:0:hex:"43c9e209da3c1971d986a45b92f2fa0d2d155183730d21d71ed8e2284ec308e3":hex:"":hex:"78bef655dfd8990b04d2a25678d7086d":hex:"9d8c6734546797c581b9b1d0d4f05b27fe0539bd01655d2d1a8a1489cdf804228753d77272bf6ded19d47a6abd6281ea9591d4bcc1be222305fdf689c5faa4c11331cffbf42215469b81f61b40415d81cc37161e5c0258a67642b9b8ac627d6e39f43e485e1ff522ac742a07defa3569aeb59990cb44c4f3d952f8119ff1111d":hex:"":int:128:hex:"f15ddf938bbf52c2977adabaf4120de8":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #1 [#1] +depends_on:0 +1:exp:0:hex:"fbe2d52b7f50bf23a16ff8cd864215034fdfbf4d1506ca3c1ffb015653efe33a":hex:"":hex:"b155f8ab1a8c0327789cfb8310051f19":hex:"ed8d14adf1c362bbaf0d569c8083278e8225f883d75d237a4abcd775a49780603e50c00a1b5b5946c085e57a749b4946f6aca96eda04ac9944a7d3d47adc88326ed30a34d879dd02fb88182f9e2deefaeee1c306b897539fa9075bda03ba07b4ffff71ce732ef3c4befac0f18c85a0652d34524ccb1a4747ab8f72ed1c24d8fc":hex:"":int:128:hex:"c5fe27ca90e5c8b321cc391ee7f1f796":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #2 [#1] +depends_on:0 +1:exp:0:hex:"8e888721514fd01fb67513cb56bfd29af67a9ce525e3e697af47450f02053161":hex:"":hex:"9f6bd4a93e4f3f2f5f4a7c2c5b4790bf":hex:"867d50923967535ce6f00395930083523c22f373cfb6c8817764f5623cd60b555572404e54f2fe7083ef32b9a4593a1f70a736d6e8fe61b77def51f3b1d8f679d3a8d50d0aad49e51ec1eb4d4a25f13d14f3e5253555c73eac759e484c6131cc868b46c18b26acd040c3e1cb27afecba7b7fc3f5ff4883f4eafc26c7f3084751":hex:"":int:128:hex:"ea269094330b6926627889fcdb06aab4":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #0 [#1] +depends_on:0 +1:exp:0:hex:"d8f82b07e7319ca607c9aa0352070ca883dd7b32af370a774f63b0270f44835a":hex:"":hex:"e89e4484497cb728f86585d8918b7fae":hex:"42340d96e1852de3ed5e30eb4a05e1fb222480b450e2bf4e2cf0fb2a525eb6602ef43a896adc5c52ea5381c642b2175691c014e7a6dae91fa6ff5b95c18a2dd2e8838d3abd46ace0b305f3f22d30a0bd82a81bbf6753362b54b0624c76c0d753e30eb636365f0df7e1bf8bf130cf36062ec23f58a3f7ed0ae7bfbbd68460cd76":hex:"":int:120:hex:"b234b28917372374e7f304f1462b49":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #1 [#1] +depends_on:0 +1:exp:0:hex:"b49b04a54a08d28b077ea54c18bfa53e916723e91453b47f88e399046b9b4dcc":hex:"":hex:"6276c577c530f91b434ce5719e1c59de":hex:"6b73f996c49e368fc4d21816153aefb081509f9dc0916dbe4fdf77f39867a2bd617b8a75f39f515b1bc1454009d5247efcd90ba0d4a6743c6f12a929b666584f3b55254c32e2bab2321f94fa843dc5124c341dd509788a158191ee141eb0bc4e1b96f6987bafe664a0f9ac6d85c59cee9564a27bcc37dffae80c57fbf7e748ce":hex:"":int:120:hex:"69dd5bdeb15fdbc3a70c44b150f70e":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #2 [#1] +depends_on:0 +1:exp:0:hex:"398bb37bb991898c7dad7bf5930dbad20d121f68d5ec6c56ffe66f23c0c37f8e":hex:"":hex:"0c3bd55b54c1221b0cf25d88ea4dfe24":hex:"4c48b929f31180e697ea6199cd96c47cecc95c9ed4c442d6a23ca3a23d4b4833601ac4bbcdbc333cd1b3a0cd90338e1c88ef8561fed7ad0f4f54120b76281958995c95e4c9daabff75d71e2d5770420211c341c6b062b6c8b31b8fe8990588fbad1e651a49b0badd9a8d8042206337a1f2aa980b3ba3b5ee8e3396a2b9150a34":hex:"":int:120:hex:"8528950bd5371681a78176ae1ea5dc":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #0 [#1] +depends_on:0 +1:exp:0:hex:"8e8f7c317b22dea8eabe7eaa87413a98ff56570720985b6743a5f9af56387cca":hex:"":hex:"3a9a5a839045723afdfb2d5df968bfcb":hex:"a87d95f8f47e45a1c7c5c58d16055b52b3256c52713fd092bcd6cbc44e2c84669f23ca2a19e34163ee297f592f6054dbc88863a896c2217e93a660d55a6cd9588a7275d05649940d96815c7ddfa5fc4394c75349f05f1bcaff804095783726c0eceb79833a48cefd346b223f4e5401789684e5caeda187a323962a1f32f63f02":hex:"":int:112:hex:"faad6a9731430e148ace27214e68":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #1 [#1] +depends_on:0 +1:exp:0:hex:"67c95e57197f0e0bbaaa866d337fcc37f3a10dc55a059f5ea498de204d2fff61":hex:"":hex:"5f171d203c653a316cac43df99f4033a":hex:"84f281b388ca18bc97323657a723a56260731234720b02b6dde00ea134bd84a1893bec38af80214c4da01b93958ab00f3b648c975371e565d5b6bf2a8f63c0f3cfcd557c9f63574390b6ae533085aca51fa9d46cd2478b7648b6dcbbac7e61197a425778debe351ac2110ba510a17e2c351ba75d5a755ef547cf9acc54650222":hex:"":int:112:hex:"9ea9c716e06a274d15a3595a0c41":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #2 [#1] +depends_on:0 +1:exp:0:hex:"9143f00e31c72bd9fced31585d047f67f1004e6244c3d9c10c8ae005feeabc84":hex:"":hex:"e49cd6af9a2f0da2a7198317da92ab2f":hex:"ab9193a155140d265aabfe2dd5efca7d3fa6129498532bccd77f09fa1a480702620b3ab53df91b01262122f1a6fc387b5fc55dadfcdb99ada83d4a5b0666c8526de309f41eb54d69b52595c43550a6bf7b4b8f0e0c48311b521762eaa567744c4c4704dd977f84068b59db98a67e33cc65302ba59360d600a22138c5ad3317f3":hex:"":int:112:hex:"8293e361fe0308a067f89aea393f":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #0 [#1] +depends_on:0 +1:exp:0:hex:"d0ba180075c373116bb037907b512add00ba9a4693a8ecc14ca0d79adada90e3":hex:"":hex:"5c1501b19cce5404dccc9217ac8253b7":hex:"3a161605ec0055c479dd48cdaeed5981b8b60fb7b7781cc4e580218c7014c3060a9f706e6e16cf4021e4d38deb512534b484ff23b701975bdf901146ccaece9c3ffbbeeb172cfb64a915ae0dbe7a082b9077776a387b58559a881b9b79b90aa28ad1ac0f2bece314169a2f79ea4c08389f7f7dd10ee2d9a844fee79e7bf38bcf":hex:"":int:104:hex:"0541262fddfd5d01ff0f3c2fb4":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #1 [#1] +depends_on:0 +1:exp:0:hex:"c975c7e59133c231d1b84c696761c413ba20aff7fb7d854c6947e65db3cc57b4":hex:"":hex:"d8fedda4cccaf6b0818edcfa7b1f03fa":hex:"cb4cc9171367d6422abfaf2b4452da267eb9ccf1c4c97d21a0a125de486997832d16c7e412cb109eb9ac90c81dfe1a1dd9f79af7a14e91669b47f94e07d4e9bd645d9daa703b493179ca05ddd45433def98cf499ff11849cc88b58befbdd388728632469d8b28df4451fc671f4a3d69526a80c2e53e4fdee6300d27d97baf5f4":hex:"":int:104:hex:"77ac205d959ec10ae8cee13eed":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #2 [#1] +depends_on:0 +1:exp:0:hex:"a86ec688222c50c07274ed2d2c8ae6f883e25f8f95d404a7538fd83224199327":hex:"":hex:"99c73fdb8f97f225f7a17cf79c011112":hex:"cf5f707de0357262c0997fa3ebfe6e07192df8db5f029e418989e85e6b71e186b00c612ecedbfe3c847e58081847f39697337ae7c815d2cd0263986d06bf3a5d2db4e986dbe69071fd4b80a580f5a2cf734fc56c6d70202ea3494f67539797252d87cd7646296932959c99797a0446532f264d3089dd5f4bcceaaa7289a54380":hex:"":int:104:hex:"c2093ad4705e613b09eee74057":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #0 [#1] +depends_on:0 +1:exp:0:hex:"d3981f0aa1ed8cb369d9b0d7b0e529ec6089ff2d226c542885b1bff55276e891":hex:"":hex:"7331f91bd1a67c21c9dd336a2a922839":hex:"406d9cf45fc8618d564154241dc9c006ecdcd847406e5a6e7127ac96e7bb93f4c339ff612c514b6f66df95a0845035d7535212a2aaeeb0ee512d1f4375c9a527e4e499389c2d7f7f7439c913ea91580e7303767b989c4d619df7888baf789efd489b08eda223f27da5e177cd704c638f5fc8bf1fecfcd1cab4f4adfbc9d1d8ba":hex:"":int:96:hex:"dbb7ec852c692c9a0e1a5acd":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #1 [#1] +depends_on:0 +1:exp:0:hex:"8436967f97c59ca73b760b73c6e088d1da4e76b712188ab4781d8d849505ae47":hex:"":hex:"9401dd0998914645668d06d518bfe7d7":hex:"a5f40906177417097c19a0a21dbb457a694e173141837f695b09c8eb58ac2ce28aace4e59275b6266da9369a9905b389e968aefc64d78c7e1d2f034ef413d3458edcb955f5cd7971c28cd67dc9901ef3a2abc6121704bb5ecd87a6568d0506abbc87a2f10205dc8eb0cd1b5109158d0e743c2c3a342d60b8d55bbcb8d8507ed1":hex:"":int:96:hex:"dd6d988d352decc4e70375d8":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #2 [#1] +depends_on:0 +1:exp:0:hex:"ce6b846bcedc6ae747e66e72cd9f7664e6cad9627ba5f1f1923f3d3a6ed590d1":hex:"":hex:"ac865ff8a6255e501b347a6650510d05":hex:"1658b9f8469af1dfa60458cf8107db1edd1e4bba70a0bd23e13e1bba0d397abf51af8348f983fcdfcc8315ef1ffc9a26371377c62ddba08363bd2bf0ff7d0c3b603fad10be24ecee97b36d2255a8b2efc63f037123cef4bb4fe384aa0c58548b2f317c36ef3ef204b24769de6ba3e9d89e159e2bf1f9d79aeb3eb80c42eb255e":hex:"":int:96:hex:"7ee87acd138c558455fff063":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #0 [#1] +depends_on:0 +1:exp:0:hex:"0038ecf1407bbf0d73afa5e010769b71e8649c4249345dcf923ef9da0254c6af":hex:"":hex:"74c6b98fc6ced3a59bd9c42d31d71095":hex:"467f483c71c3404fe7f09d6f6b6b64c3b7613a0dd32470cf24bc590d3994a48f3e8cd5dc19ea8ca7d5366ad7c5ad31cc9612dafedaea109dde2aedfe5fc2a0db2c903dd1dc1a13949720a10babf37fba5a0ed7cb5f3dc9eb5a4d8331f218e98763e7794b3e63705d414ef332160b0b1799f1ff5cbe129a75e5c4e0a4ed35e382":hex:"":int:64:hex:"62fe088d9129450b":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #1 [#1] +depends_on:0 +1:exp:0:hex:"19fc4c22151ee8515036c38bc5926c0e0bbd93db5d0fc522b2a6bf6298fed391":hex:"":hex:"9547f056c6fb9ef72b908f527cb500c1":hex:"511b15c25b2a324159e71c3b8e47f52d3e71e5bc35e774c39067250f4494c9c4eb184ecbe8638de9418672d9ae2c6a0e7f54c017879ffb2a371de1639693d654a43cb86e94a7350508490191790d1265b99e7b3253838b302aae33590949a8761a3bb2aeb1ba798cddeb00a53daad05a33389d4a19269d65116a84f12dba5830":hex:"":int:64:hex:"04623912bb70810e":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #2 [#1] +depends_on:0 +1:exp:0:hex:"3b5d3b1920b5a105b148153ae1f1027c6d48bc99640ea853f5955fed4eb3d625":hex:"":hex:"9a4091c2eb7e88759bd9169fee303485":hex:"aa680d07143ba49a9099d555105fc3cfcb898cec11ade96776dc9778cc50fe972e1e83c52c837b71e27f81d1577f9bd09afe2260dfd9a5d9dfbd3b8b09a346a2ab48647f5dd2ff43700aecce7fa6f4aeea6ea01b2463c4e82ec116e4d92b309c5879fb4e2ca820d0183a2057ae4ad96f38a7d50643a835511aedd0442b290be3":hex:"":int:64:hex:"033bfee6b228d59b":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #0 [#1] +depends_on:0 +1:exp:0:hex:"f6c4ad8e27764157789252f4bc4a04145cb9721955330a2f6a2a3b65cacf22bc":hex:"":hex:"3de136cbd75061c888226efab136849d":hex:"0f6951c127d6bc8970e2ad2799e26c7fb9ca31d223155f88374984b5660626c83276ffa6c160f75e0e1bcfa96616188f3945b15fc1b82a4e0ee44000a684b3c3840465aebe051208379ef3afe9f569ee94973d15f0a40c6f564fa4ba11d6e33cf8ae17854a9e12360a2b8495e2cceec463f5e3705c74069ba37ba6d725f458c0":hex:"":int:32:hex:"f658c689":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #1 [#1] +depends_on:0 +1:exp:0:hex:"30cd99fed9706c409e366d47fefc191f79bcc47a28be78f9890fd90d4864eb85":hex:"":hex:"8c7ce34691503bf14c776f8809f24e61":hex:"4b6b10c2e2905ab356769b6453dd160a08e8623b0878fcc1c1d64822f0aea1f4f5b4698ded5d23ebafa11bc1e4ce9e5cd7d7c7b13de02d11a945ba8361b102ba49cdcfd6a416e3db774cd7bda024fccd1ad3087560dc15bbfe9b1a5c6c71fae17a329f104f6c2cba7eb6a7459535ca328146d0ccc0a9bd28a3d1c961947a3876":hex:"":int:32:hex:"7777c224":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #2 [#1] +depends_on:0 +1:exp:0:hex:"9472f2452933dcfac4bb22831ce83c6a1ddf25ef8d2d3ba59d72b0d173a986e8":hex:"":hex:"18fb2c34b0955d712960009617d300ef":hex:"d283dd75cd4689c266c8e0b4b6586278aa2583c7c41bf12bd1cfdef21d349acbbabc0a2204dc4130f922949206c4fbdce3786ab8614e32908838a13b6990453abf14b84f5812e6093644accdd35f7ad611ea15aefae28b3cf1fc5da410bcea4f0a50d377fdcceffe488805bc5a71fab019b12fa8725d6e7c91e6faf12fbaf493":hex:"":int:32:hex:"c53b16a1":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #0 [#1] +depends_on:0 +1:exp:0:hex:"e06d5319210f4107ea7267fa2e8183fcbf74fd3b0579b856577177d9cb307d42":hex:"2b9179d21cb884581b0e4f462455167f1f7899717245d4aed3d8db5983daccccebfc2130a20c284563bea5997cc0438c83d8fa7bb9e3588efed285a0fcc31456dc9a3122b97bb22f7edc36973475925828c323565e417ec95190db63b21881016b5332f2e400bb4724c86a8ee0247149370ee5412f743dc6bf7ca5bcc31afa0f":hex:"f2b0564705430bc672964b049115e122":hex:"":hex:"3fa342a76cb5d501e6a6fade14aab54a76620e4ea2287147d4ca2b9d62d2a643591e5df570ef474ee88ad22401c1059e3130a904e9bf359c4a6151ff2f3e4f78ef27a67d527da8e448b0ef5cdcfec85f3525e35f8d024540387e4cdcb1018c281a1af7d4a3688a0fec4d9f473c816f7d4c4c369f70d7dfe8f1b7fa4f581098a1":int:128:hex:"18f186ed1ee1f4f8b29db495587d0ab0":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #1 [#1] +depends_on:0 +1:exp:0:hex:"0dfa834e98b6c51ee925dd9edc9be72c209ddcd9099ded57b533f2236895a229":hex:"7f4e4f11091bf51976c0fc71ecbcd0985cdad2135549c818c09567801d8a9a42c719aab7dc2cb58a10b5067d14c52cabe6bb9b939e7b9cd395eaf10ba6a53fd2e6446e1e501440134e04e662ef7ebb1c9c78bbd3fd7cb9de8b985418be1b43ebb5d7902ccb4c299c325c8a7cc1de9174f544bc60828c1eebad49287caa4108a0":hex:"a101b13b238cfac6964fd6a43daea5a7":hex:"":hex:"bc60d2047fd8712144e95cb8de1ffd9f13de7fda995f845b1a4246a4403f61ca896bd635a1570d2eb5b8740d365225c3310bf8cea3f5597826c65876b0cbcfa0e2181575be8e4dd222d236d8a8064a10a56262056906c1ac3c4e7100a92f3f00dab5a9ba139c72519b136d387da71fefe2564d9f1aa85b206a205267b4cfa538":int:128:hex:"c4cc1dbd1b7ff2e36f9f9f64e2385b9e":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #2 [#1] +depends_on:0 +1:exp:0:hex:"ce59144b114ac5587a7a8079dc0e26f1b203338bb3e4b1d1d987bddc24150a82":hex:"bc7aa1b735a5f465cffeccd8dd4b0a33a571e9f006dc63b2a6f4df272a673bb2cc00e603248ab6be5627eebc10934fe4d1dc5cd120a475936eefa2c7bddea9f36c6c794d2c6bd2594094e56cac12d8f03e38f222a7ee4fc6c2adffe71c9c13003e301c31ff3a0405dde89bb213044d41782c4bb4eb3c262595d1c0e00522047c":hex:"fdc5a40677110737febae4465b1a76cc":hex:"":hex:"084c31c8aef8c089867f6e0ce6e0aadafa3016c33c00ca520f28d45aac8f4d02a519b8ebafd13b9606ab9db4f2572f396091bc5a1d9910119ca662d476c2d875a4ab62d31ff5f875678f25a4775fa7fc85b1a3d442fb2c5047a3d349d56d85f85f172965e6477439045849a0b58014d9d442e2cae74709ed8594f0ec119d1d39":int:128:hex:"4c39e0d17030a5f06ecd5f4c26e79b31":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #0 [#1] +depends_on:0 +1:exp:0:hex:"e7a6b459a5370ceec4d429bba9472a49db07697dc66dbc2f294d3e62ffc8aac1":hex:"cb959e5611a636317feb5265d33b315c2f5af64159029f0032e338babbdb0a525ba6b92cb3be7db9f0077561e6cffe1247bad32dea8918f562dc3cd83225cdbcaed652b87c62fea8eff153638a3a14ef9f9a88bcc8c9a6b65fa9dcc53f63d1b14fb9bb0baf17e7bfb95690c25cca2c3097497e41f7e2299a8518d5d1c5f6264e":hex:"92468d42ad377affa7e808d95d8c673a":hex:"":hex:"599dbc47e2f2e3b06b641c510b238417b01869f0e7d08619752f6d9f4b08585731deaeb439ff26e02d7e51b45ca5e3d4a779fe4cfc9572d1d6407f98de69a8fca60bf01d1a769130bb38a67933a2be3aa3ea1470d8f32a34dc863dc800feb7ef71588edd9489bd59a23685ff5358f9b562fc0bbad9e11db7a6fedbd79225539d":int:120:hex:"e853262ed43e4d40fea6f3835d4381":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #1 [#1] +depends_on:0 +1:exp:0:hex:"9818904a99e3d80c95dc71a16483ade1b9b8e7df638ce6a4c1d709a24416cbe9":hex:"2c073cdc11a8d58fb55e1dadbbc0372dde86c387fa99c9249bd04cb2f2d239de01bec8c8771a9fb33664ee06ea81c37a824525664054173b63a2894d8d7ffc60b9e93052802478a189be5835d979a28ce7025b219add0622f97c9bcf3ecf629b56408ed002a141061320400409345e94a7a7e3906611305f96f2abc9d62cc435":hex:"96a301ab6bc0309be9735bd21cc9e10d":hex:"":hex:"4876e449b0cac09a37bb7e4b8da238f4c699af9714ec4fcf21a07c5aee8783311a13149d837a949c594a472dda01e8b6c064755b6328e3ef8d6063f8d8f19cfda3147b563b0f5fb8556ace49cb0f872822a63b06f261b6970f7c18be19372a852beadf02288c0b4079587c0f8eab1858eeec11c6ba8d64448282068fddd8a63d":int:120:hex:"e1e8b62ce427e5192348b1f09183c9":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #2 [#1] +depends_on:0 +1:exp:0:hex:"9b34f137e3f37addad8a6573b8b6dac9a29e97db53c0a7610f37c72a0efaebfa":hex:"c1e09c432c68a2c119aeb3b19c21180e3c8e428e12033f416a92862036f5e8a39a8893b10fe5476e388d079143ee0b79b183a3400db779cfbf1467d69887306b124a8578c173cd5308d4448eefcf1d57f117eb12bc28bd1d0ff5c3702139655197d7305bda70181c85376e1a90fb2c5b036d9ea5d318d3219132ea6c5edf7b7d":hex:"50dddb2ebe4f8763509a63d07322277e":hex:"":hex:"793e1b06e1593b8c0ba13a38ff23afaa6007482262bc2d0de9fb910f349eff88d3dd05d56eb9a089eed801eae851676b7a401991b72bf45ac005c89e906a37ed7231df4aeeeb1fcf206ca1311117e7e7348faf1d58acc69c5702f802287083d3ed9e16cf87adcdfa1bb0c21c40c2102fd0def91985f92285e6ea1cdd550e7f50":int:120:hex:"b3c6ae17274faaca657dcb172dc1fb":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #0 [#1] +depends_on:0 +1:exp:0:hex:"66b40e2e671bdf244b45644d1a5adc63011b32156ba9f5e03dffacc1a9165061":hex:"985546ee12ba89d95988ad8a4153c4f9d3c91c0e3633a95b4f9b588bba0032006c93210514357c91d574b436da13dc9f68194a981e7b65eb79e56be9cf1dabfdf531407727c034a3c7743bb22aa02b26f159c2eff3c7ed52027de2e8b8b2fefb72c04fbf20a1ffe10d6dda790a9812cdbe9f2ed6706d7a2639e851a42870efb8":hex:"4e090871e889b4be36db5e1df1ea283d":hex:"":hex:"f93eebffeddfd16b4618b893d57b459b704b894b38a5eaf6cce54026c80090be8328e12261e1b10e81c73ac8261c2982bb25603c12f5ffff5c70b2199515c17200db2d950a3f2064d7b362607adbf3686f27420ec15e18467e86faa1efa946a73c8888b8fdc825742b8fbec6e48cdabbb45f3cd2b6b6e536b6fbf3429aebe934":int:112:hex:"ed88c856c41cac49f4767909ac79":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #1 [#1] +depends_on:0 +1:exp:0:hex:"18c5105a9651144ce965b4270398b982120b885850114571ef8e2cbc5d2f5e04":hex:"00c5ea3d91248bfe30c5a6d26dbdf0609f977afcfa842b603c1061b2a473c9a79b421b2509550309e4be9c5015c51c6def9ee68c242f6e206b3027ce8e58b7ab96aaa50ced1d78c2dfcbc2589575bec2ce3b6a5066276fe7dca4f1118808d1e5cac062667053c15350289da03cd073377c2d66c01e3098ed01b75788c7e1f9e7":hex:"a3a5f82748acc887e33328fd7f4ce1fd":hex:"":hex:"d91ed6886a269dc1eb0745dc4b97fc54cbea5e6857d10a303a3caf828b4e0e20bb742bca17021b7852d09a6d7d3a56ad82298c15a2082fed0e0e326bb16dd677ee262ead93a24147de3c07eb8a95b108abf17357155f1de79171689407b6545c9fdf8ab4486576490430c0e043e21e7c40ce88e752cb006cb3c59479a7e56cf7":int:112:hex:"add4e086d612a119c6aae46ba9e5":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #2 [#1] +depends_on:0 +1:exp:0:hex:"4667cabeb3a644e371cbbe9195413daab025cc6efc12298bfaea0dd9bc028f9f":hex:"9772ec47f3cd26f091bf117e085f2394db258c2c460dc3b1402edcb60a8f70517f82aa669607b78c2ad79c662c3b376cee1b9f34c4ec5d15319c33de78a440e7f2a4108c3c9da51604adde2025ff1dc336c49279c13a7153931df675df0e78f17a4d72973311af74fe755c85c7869baf3896bb738925942dc67f1b6e690c9d48":hex:"7e8927c69951d901494539ab95ac5906":hex:"":hex:"5d62fa69cfbfdec30193408dad15cf983ad707ee921068b817676eca9f70f9ca4623a8c113df5fba86131415f4ec546c7f1a94ff9d02cb8ddcf421c7cc85ed87ce712fcd8d5f45460749ced0d900fe0368c59b1c082bd5811c1a648a51768d5e4bfbc23cada3791f289d8b61fd494398be1ad9ee9ff471abb547000ac2c1a5d1":int:112:hex:"0ae6bd5e8c25d1585e4d4c266048":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #0 [#1] +depends_on:0 +1:exp:0:hex:"3d58cd514de36ca7848aad1bf4d314b3b3415cae1ce9a169021ae84a67d4ab69":hex:"e1c2e79e3f64c5c64f853ac9ba1a853fbf1bfd3001d48f7e73e0e97aa1b8ed1f1a7066178e75df688c5edb1c42e270ea38ab0e246c6a47fde4c3141436fe4b34beb9033ba7eebfc53cf1f6c8ae1794e9bb536152d196e1b96803316a05f1dcb9016c8b35bf4da06cd18da6243acc3a3dc641d3a1332b1915932ca89937cb0327":hex:"4a1c2e7a3f9788c3c2fdd0dcc0cfe84b":hex:"":hex:"50d63c660a2b4f8e87276c5f58556cdf15d0fbb2c8ea5e3266d28c515643109aa7fc950d6d48f504dad52457e16576b581d37574574cd8b7ac12b7d59b819992c941a27e23ef9f257ed0c4ea4eda6c1f3b28b44decb63a92fae84c3556dcb9d6458e729dad6a7db9f7411690fce971b3b240f8f9979ed992f87d76e227fd7384":int:104:hex:"ac842579bdd1ac77c84dffac2d":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #1 [#1] +depends_on:0 +1:exp:0:hex:"b7e4cd80f03a7ed092c776b243dfad7776d9caf3e679939038e33ac94d8931de":hex:"102e2d2c0d01dbc69733d2451d1ac1817d60418685d4ae8aa44e1ede1c1e08d2f71f0aef41a72bd9f052ea4a9a057330c95d964f8c3679b80fc9c0952b46f38e2ef055cb33703d686757400210fa5a39bc7e3bb9b8b9cc20c95d5607e2f10bb5501507680ef3aaad96553333b1d27bf2f7ac102c983eede2262a5c6237c1d754":hex:"af160a983d674b7d19294f89c3c9307d":hex:"":hex:"6bdfae299d796ef36850327b091ba7bb02e29b643ca4c8bc199eb91ecbaf88426412cfd5570e0042cab735cc46ec648b0877955b3f9a5707d56c478aa77ae5510749beb1e44dbbb37791f18477123436a985e5e9f79fda0a057504847e4ecae841f24e1b53076d3efc6bdea2ebb336ee0e4b5e6ea973e3e50a27b5c2e6fee3e2":int:104:hex:"fdf21e2ac356e507745a07fc96":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #2 [#1] +depends_on:0 +1:exp:0:hex:"3a0c46eacfe85cbc0c5f527b87cd075bdeb386d0ca6de816a87cfddcb8a87ae8":hex:"6d1203dc8395e35a35e234203625ea9d37d1c009db2ac8b1d5b29021997b5421f1d172f4c9a7eb7dbb67f0002720fc412f5b1550c739a2d7ba4387a1f978bd548fe6169d9473893782b10fab99198cb8b4553dfe27583c017136fd8c95070d8d7f9a602d15248d38d728157a0b26404e662f9a5554d3e1582bc0e12f0054792f":hex:"b1cde63ad2ad4b8a7bfb36ab78385c3d":hex:"":hex:"9de3a45c976d32ed2af5074ef13b1f86f35b1689b1c698b2e427d5dd62556eb14439f77cd8fcbe686a9a08a922e3f54a78e86fd284de493a740586360b63da09bc1d001777582969c679db54a0ddb8d7dfdb46750edc882804a1c00e417912b72b4cad54dffa1897eba6188b3e61ebf0c3dfab292c2686dcb9db3012e0788c7f":int:104:hex:"641896daab917ea3c82524c194":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #0 [#1] +depends_on:0 +1:exp:0:hex:"4d540e0ba27103667eb4511ce9d243592bccb8515ab59896c9922cb5f1b47a02":hex:"d79f9b1c74e3141f188704c8d5bdaaf6083642be50d00f20c97b56646863895250d131e00db0ecf4f035d42f08cfe20f401c2d3062a38daa0b9e7c19fa7c5d344680aff48d506daa181451f6b34ed9099b9a5b39c0166e93ac4463c9ad51f48e3063b1c16793615336f55d516d079f6c510c2891b97aaa95e5f621e3b5202620":hex:"a2ed37daa797522a39b01dd206d06514":hex:"":hex:"6a891bd289ec05990424a2775287f4725aecefe1ab21fa0ca643f37829cae9fcbbf805b883f807102ff12f1a85964df818057daedd41c7349ef32b24642186c45d2858c3260d5b90594969e26b691963ac7fbd2eb4eef466ae690ca274d9194dfc4df1c3baec02abc38fbfc0e2c7c4fcafed227d4f6607329f57ee439435c714":int:96:hex:"9074ecf66bbd582318495158":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #1 [#1] +depends_on:0 +1:exp:0:hex:"151d7e4db9e21c87bef65c2ac6aab5b6b045b7dadaf6424644a91e04ba810585":hex:"0984c5d3f68beba1db4e6ade429cb8954cccaba9fcf4d852897ef69f8483428932c8f18a891f54b68f7d49a03c57f7144d802eb996d233cec930d5eb19f43d0faf9c94a2d7aaca40c8066a2882481f521bb5f6ba15b213810da373817eab3d52b5dd143a1521239482fbf4a07fe68c3d35c90c6ce27b55e40abcf432a261dc58":hex:"49e0e0d089e3574fa5a33c963b403ccd":hex:"":hex:"6938d8a7625d1291f249ef1e086bb030ccdc844a9271fee16db60e7acfe4aedd720de76345109d5e6849fd1576c0fe0c34e73dca4011f8565cffccef427198c927f19f63b821f43844d008ceee0566f0d8062d7860e92ebdf21dcde80039a04504cd8ee94874b2eeb038962a74ac9902d9d7ce09afdac7aa706bf3892de19531":int:96:hex:"48d3a8116213f92bfbe86bfe":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #2 [#1] +depends_on:0 +1:exp:0:hex:"3e9615515ca45109316cc02bbf3a23406eeeab2092dc6614db76e4e047a3b023":hex:"46c4c6bad0f21172094ae07a47fd76477b69ca75cc08970e8dbf7b8644d4bcdce96f9d15dd3fba5fba3f851af145652ad004ee525d180d2f3e03bc0ec1c0e8ffebc1474c342732b7247f657ba87ffcef9333857123f29c4976b048c89c24107529dc5dd69004fd176eb0ca6ddae1df7be7d28b3b9da976413588f20c1fff488a":hex:"c1facf73da64e16e4acee3fdc3cc6b10":hex:"":hex:"4415dc96d3daf703d392ba1318254143a58870e691570ca6b1be6074dd9c1feae12c72f9314fc3d19b6affb59b642ade6c4e64b7c99f850bff781de193cc0a321a29356addcb0918a282e53801541b5b01383fa7624c36d1f67423f02d2b54f58deca582b7031d192a4d32bc154ae1149cb3c5b48538c803a8d01fa7cfc1683f":int:96:hex:"322d8d1b475a7fd3d0c45609":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #0 [#1] +depends_on:0 +1:exp:0:hex:"52c1a14b4ed57cbfa317fe0db87528f4c5551deb9ffc88932589e3255b1d3477":hex:"eb9081e19b63c94b5f3a696c5fc2c0b7f434e1574394d0b41dd67dfac28a73d4ba26c86b3728b2802fb9d0930c89586b09602900d33eddc5a00a4e98881b5acd5597aae9b80b1569ede74042948f2cd66c3eeae227ae10241df001c85dfe8a5fda0aa21142ecade76290dfdd4a27b6ff3a932dacc0b5f461501239ae8d6d5f41":hex:"36d02604b5b24f49b08bb01053a23425":hex:"":hex:"12fbea9e2830ba28551b681c3c0b04ac242dbbde318f79e1cb52dba6bdde58f28f75f2fb378b89f53cef2534a72870a1f526b41619c4b9f811333e8ee639be1250a5c7e47ecbee215b6927ecffaf7d714327b2c4e8b362b1a4f018ff96f67557ca25799adfac04dd980e8e33f993051f975f14e05be8b7342578d0c9d45b237a":int:64:hex:"01e6af272386cf1a":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #1 [#1] +depends_on:0 +1:exp:0:hex:"4d08a07b3e94025523a4a6415029c8f9e11fbbfd72564964c53b8f56f865af0d":hex:"4ac7c27b07a4aebe5caf1de0538d13a56e8c11bc73713bf78c7abbad3b9f6d690e00487267da108e2f2ae67c24b4657e77bb83e2d5e4b244cf34e924cf7bdb443f87ac8cdb374147449f8d06eb517a25dc86f03a389f34190aed5a7faace03ebf646fec2b173b2c15fd5cbe7c5affb6c3ee6d1cace8b00dd8f668a2336da5bfc":hex:"98b745c7f231ba3515eddf68f7dc80f4":hex:"":hex:"337693c5c746d8fcdf7cd44d8f76a4db899402b891176e85b4c549c366ad709322874e986d6b939a350d2a0e3b77924d6d15454d882d1d3c94469d749a20d8f0116504cb31888a1e81d3abf25dbb7a7f9e7def26b9151ee649c059da1955f1716423c734dcd26a548844abb6b64c44383ec698e59361b6582c6883b77c338342":int:64:hex:"7a9266c4e5ae48f1":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #2 [#1] +depends_on:0 +1:exp:0:hex:"b9d9fc42b58deafe9bc9734f4129dcad34a2e55ee5ad8abcc3f7bc42dd2c0e05":hex:"11dbcd6cd53d2af766a1b6e4af2bc8bac2811ef818da2d1f81c140ab6e0298e958fef033736bc6e0dccd660b9a3e4222bdf3f89a95b206785d22852201e6dd00b44232ef3c03393893813dccf1960410b50cf50602ead8bd246fad88e66c88b50821578004779b6c45c13d8211df1cfc0fb2d7a342f58e4f2f3623fd31b12c30":hex:"67931493096f4550633c322622bc1376":hex:"":hex:"66ab6e7a547705d8ae8ac3cb9bc5fbbc18cd220f89aec7dfbf4f72e7bc59b483c50c9471523c3772efc5deee3a9c34c96b098842cc42f9b7d7c0d2530f45900eeb9502e4dd15363b0543c91765121fd82fcc9db88fe6a531b718c1fe94b96a27856d07707fced3021cca9cf4740833d47091797cc87f57f5388b48e2296ff352":int:64:hex:"0de60d4126733404":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #0 [#1] +depends_on:0 +1:exp:0:hex:"97e736a63870546ec9c2325a8e367c8ea17a7ffa71f6cadd6909a5bb9eb12814":hex:"608280a9dcbd6dd66100a9fdd00e6dac2183e32c945b2b4d255c048243bfea15aad1a10ff3eec0ba79c531239b489a5dc155dc2775519f8d3d2ed82fa7ac653fb7c77e0dfad1c175b6c69963f5c12ff9840f18e0202502e9d1e3b170965cd86ae411af20e6d69a608c99ca8dae3cb3bcce666841132a99429bcde490d9f0b6b5":hex:"d35192b4d233507b70c6d32f8e224577":hex:"":hex:"568a0d584fc66c876b7beb9ef8709954a2c426fb8c1936b9024181ca2cd3a7684c412715c11eab80a181be0238e32a2b689e9db36a2ac87db651058080531e7b1110938dcb09615e385d7b224b11222469145f6fb5f4c0e87b08bb3006bc5b6d2ce0a15be7fc29b27c10c645afd9d8253c094fc0f775086bdf2adac265b474d7":int:32:hex:"af18c065":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #1 [#1] +depends_on:0 +1:exp:0:hex:"6d05193cc0885f7b74057ead3a0738b74eb3118b1a7e74c5c941ce0011197122":hex:"c58f51bad815a43a5705c311de4a846ea2a70cbdd2c30d709a2ae0ddf82b7c889dc599fb6e0328fad21555a99530be6deeeb5b1beb333322c2b747288e52fad008513f8040a4735cab3c8cf32c4e18bd57339c85cf5dd71e382067bee7e9ccaf68e767d77fb005a3b73a51acf942fc3b2c5c9eec6189d01a26c6ffb070165874":hex:"5160b65bf7a2ccf77fa2e3e0b3866f26":hex:"":hex:"64dc5834a63be414c3714f1b34feddbacd568c6466cbd06f665aa269187a160db79306a53b629fedc1247bd892998fe3208b3105f6273676bbdbff6e254de332d02bc8842ef98d6b79994792eeb5be3a807452b14ae5b5027db81421cc22936ccaa7ae1b77a145462634e424ccf2dfaf001ed4477b804e204120a1416b449b8c":int:32:hex:"364ef0b5":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #2 [#1] +depends_on:0 +1:exp:0:hex:"6e8006983712ddfedfebf95e6cc3b0aadc23077055e500ae49fae7705787f2e3":hex:"e3ba14c4e39ebad925997649872b8331f1700c8f98f80e58d92c85a84f2a427094d9d771b276a0d35b17c0c030734399070a57345d4dcf082b96c7eb580618f7af8bdf036296e20379e74e29f905b52a0c46fe7d46201a075e7de7e1a523a0492c1f228102fdb89f019bcd4571e041c5d37159dc487ec139fa37d33142fc8082":hex:"e36e39d787394f1401fc4b173e247db0":hex:"":hex:"4d5db4b65a1ca31f3d980cc30037b5d79d28280a31cc5d0274be77dad70dcd37f652f2ca999c9aecf08fd2a02d382457a277002a1a286ab66f9e437adee00c3bab04f831dd52147005a989606171b6017d28970c8986899fb58900e23d1bc6a9ac0bd4d8b5d6e3fcaebc9903923e68adae7d61cf929388e0e357c7223523d1ff":int:32:hex:"d21637c0":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #0 [#1] +depends_on:0 +1:exp:0:hex:"cd8ec237009eab590dbd9b31e76513dfa3501701b1a706982944441d996e1839":hex:"9eef7c9a0fa3e9a7fcc4b2f9d210a97d6653ded7913f2fb2de825a0dfd78ae1cca68c040f2328009fffe62937d630ee9d6e0e67bc12c38c0b3d035697d4c2311371aacf41cce0d523016ee436a47d93af0df77011131856d072c718c310f0995b71530d70a3da881481f46f21dda62e3e4c898bb9f819b22f816b7c4e2fb6729":hex:"a3cae7aa59edb5f91ee21231002db8e2":hex:"45fa52a0e8321d82caea95bd9506f7331923e2aa95e9238908f3ff30e17a96389dfea75e225e34e1605354eaaf999a950f469c6e2e8722da5ad9daded6722baca00e5d1b8e63266ad1b42cae161b9c089f4ffdfbbaa2f1fb0245d1a4c306d46e215e8c6c6ae37652a8f6016f92adb7695d40bde8c202ab9c2d70a96220b4b01b":hex:"833d58f0bbd735c6164ecaa295e95ad1143c564d24817d5f6dded5d2d9b2bed2dc05da4a8a16e20fdf90f839370832f9ddc94e4e564db3ae647068537669b168cc418ea7d0e55b2bb8fd861f9f893a3fdba6aace498bc6afe400fea6b2a8c58924c71ce5db98cfce835161a5cf6187870aa32f522d406c52f91c30543ea6aa16":int:128:hex:"c1df4ee60b10f79173032e9baaf04d3f":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #1 [#1] +depends_on:0 +1:exp:0:hex:"5f0b24f054f7455f5821fdc6e9ca728d680e8004fe59b131bb9c7cddb0effa51":hex:"d406138587fbcb498e8ec37f0f3d7f6b2faa02e6880424e74cdba67ae3468b6823d37fd917a7fede6b34a2f0fc47c520e4088766ba82a989f0d8051a3a80cc8b1e3e1e2b1c6620b90e99b27e65951aeb3936263fc2f76c1c8effa742f53987f8a38c731a411fa53b9f6c81340e0d7ce395c4190b364d9188dc5923f3126546c3":hex:"f52f7a2051047f45ec6183b7c66e8b98":hex:"756cf485b6a8e672d90d930a653c69fdbf260d3ea18cd3d0c02175d3966a88b70ab8235d998b745a0eb6a5c92899f41e8c0b7aa4ec132c8cbb1bac97a45766a03923c9b93c2a055abd0127a83f81e6df603a375ca8cc1a2ee0a8b7fd226226b0b19bd2e81f73c34dfafa4fcea08dd93dd4ab7e4b437408af91bff566068a5f34":hex:"e58a03f664003d0ef5bdb28931afd16e7747cff62dcc85bf4eed6e573ea973cf615e4ebee40f35d44e18e391b391e98dca5669a5b0abbfa67834836b122d1909b53acd50e053d5ca836894414bb865b1fb811d8af68b88b4a302fdedf27fdd27456e9aaf34a8d53c9c8587e75843e09776392dbb0501ef41359c01e8980e5221":int:128:hex:"258492b9f549d1b90555eafbe5292806":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #2 [#1] +depends_on:0 +1:exp:0:hex:"6f50efb3946f6a6dfe63f12780f764bb6ebcf2127d3804610e11f0bd9b68ce0f":hex:"bfc89d5049a5b4015c9eb64fdaf9fe9f4be7229e67c713a7b368f0550b3a5e12ba3a4399c64f60b7157e1b289b154a494deadecff0d0686ab44fae2a34ae4cb120a7f00268ab551f41c16a05f8999157be1103464127a8a9bccf736c32db045124178c90472e664d8e67a2ade0efe9a3b048c453d2fb5292dd8d29e62d52c5b5":hex:"63c1192ab7fc75c17e7812fd960f296e":hex:"335cc5c8fb5920b09e0263133eb481fd97f8d9f29db8689fb63034bc40959a176ccdca6725e1f94f822e4d871138fc39776fbe062f07bf80e5c8891c2e1007efeb77c158ced8d6c002b04442ed35c40a2187a59c02339c05762942208e3be964736a431017f472dfd5fdaf8fb8c645cdb684f9632057b9eb755253b4b75e3688":hex:"ca974942ae0f4955ca0736218e4e356145c1ef42135b1142b55ccb3fc5caeec630eb50e69b5a6f97c11d4b604189b27496623bb0365ae69f4150e201e72bad8e7b883185588d0a31c44273bae87194b1610114a83ec47ba68a02e29891de43204977fcd0d551778335fc77fcfdf3fd63e9e5e0c02930a0321ffb093c521cd0ed":int:128:hex:"2f11a01cb0ef8dcefad9233bec44d6f0":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #0 [#1] +depends_on:0 +1:exp:0:hex:"ec566324ad9d4cd015821e2cd4ed4d3d507bdb3c65bd50acc85f690ef06740fa":hex:"348d35768d7192415cbb92c5625f10edd79f24c56d4b821aaf80d7dc83e901ede6be94d1efe11a3acd16ac00aea8d0d4875c47522332fed11cdf0816b26978de431c89d2fe6d122b2d4980f1d53a97edc15e490a44e73cba9394ca4bbb871675c729c39de80d6678c71b1bd220e4647bfd20a7ddbefe2b7eec7276b87c92ba77":hex:"95c8a544c4b94e9fbfd76e66f40bb975":hex:"fa6f38f8e562a54bb2281dc9a7cbe0b981292fb00dc0053185550a300661852179d0f2beb4e7759b81316fbfead5c858e6fce73f3cd2c2462925dbb199a4e6c121d051b1b5ebf60e16d1e30f6973b19cf31830da30588fdfff6115a4a1f6d977a72583379a56055724581be5232b0d1b0ae88bab5d4a031b058bc8d03078dcd5":hex:"8b4da79f3ae1ea35a80af2f52fc640055e6a3b92617ddfa79fe5d8a49f28ddf36a82a17ca0b3cdf1726700f7ffc09ae5b412d064fd52a90a76bacc74a0b89e38dc474e880a2b768ffa91fef34c47759a7b8fd7faa32a4fcb258349495e4438c7b2055a8f462729fa4e7223aa9b47087695e3aabf43afb32e272d536b257b748a":int:120:hex:"b1faec277697add8f756391dd9c7f4":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #1 [#1] +depends_on:0 +1:exp:0:hex:"dd6aa4ff63efad53772e07e0fa7d6eda5e73be167620fd7c9f3997cf46cd25a9":hex:"592b3a6f09841483770b767bed73498c286896d2ad3d8bd91f83f92f489b1e83b0456a54e067a79e1bf59eefc1d3bd35cecfba940811d06a06e9b8f774bfeff557bd7e3f0864cb6bd3f867efbe3f040d2384ae8e1a0e20ed38caa668159d3e33c4669478d00963a1152305aa2037a5e06cac52d84021234a7f5d46ab060bd03a":hex:"6386e03bcb6ac98140ee0706b54c8492":hex:"0ccdaa4f54cfea1026a4d26338b1e6d50a70b00c46147fe906c95f0a2fb5d92456ca3aa28a257c079eceb852b819e46646997df87b873bc567f69a2fae471df03b0e5b94511189eaeedd238a991b326963c46d53080f420ec9fd1a74145a0b155cbcc0b5e47fa69450c7eb447080e34868d640f923923b91a9e13a05c73550ca":hex:"c1be540448f1e3f432a10b3cc1a913cc4046595f5a57bf57c9d856cdf381832e914088d3388199018ff26327e3001678ab363da9457ba2084f5aa81320f1a0343491e0b44424018765861c5db917ce14e91a77f7e805d7a97a17a288ee66567c5c01ee61dc46a9aa8b281438ed377b792e9539e311676f81c567339cf92b8e1e":int:120:hex:"ce7e361713630ecaff81866c20fce6":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #2 [#1] +depends_on:0 +1:exp:0:hex:"ad3990cd57ce4e95342cdca4f07d7e35d575eb19f224a7c821b1f5a8c54d4bc3":hex:"732809c29b5eeda974039b122b875aec2823e082ef637294658cc54f9bca88eb7eea87a366234f89919975d0e7dd2f8ea83198d5a6e349149a016a4b177ba43df2f3ca28e27b8566591d225ac25dfd9ea431cf1fb3ea530d65dac93aad47764a6aef8ec6903b6d145ea9a2663034d2a320690b92afd8032084b754be97604382":hex:"fd4ed75d861da2cc14fd1054976c8566":hex:"ab44689839fdf47e887b70fc1b0422dbbe5c1b50f4e704f9a435967ba8b70cf1e144a025d37292f628f9f7dd9d05557b65340090503201e8cf2cea2d6a73ea4850bd0931b90fd4a4306ba84b8aec99fed47ca1b16daee6c95c97e4ba0dd1fb130cd13f5ef77c5af96f61fa05305a3aca3775e927f72f08fc34bc994e69abaad8":hex:"f48721b08101b35cde1c4ce08a8ba0049185b9dd48b66ab9971fd67dee24f89b456e9ca19ac8a9b5b3b088cbd53898a8c2ac1129752fb7fc55a0c3e2e7266ff40f7a9d63ebc4ab65f47422fc17cbe07fcfda582fd1b8f50e840ae89837e84add8be17d4cac3d2be26bef4aa8438daec9d2b139e442f99c32f2789378c8029ad9":int:120:hex:"da6da2af0fc14b591a86359b552e20":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #0 [#1] +depends_on:0 +1:exp:0:hex:"30823396ac90db573b6587676564d09fa680906bd6eaa6b8597e2e7549c9d848":hex:"c55be5a0b8559e02de4667ba5656f7e46f5627af13fd34d327f6fbfc4f3a9273036fce2fb21232f8e2ed115b39b0ecb9a119c8fc17070bbe4e34d3544d7117ffda5e1ef05e063b5a8fceb23158d7824d6a1eb4d90a1d0360c6bd78fb24fdd4cfa35924beb4e090891d06f53fc52cdcaa6b8bba6772d549eb95b64ebf3756ae45":hex:"496ac734afadcd54f1a4372ceb5645fc":hex:"2d582131f7071e80cde1b11106b7d79bb208743de759d40b897efdab018f4eff1f91d2fe67e27af25a13f201bbe4446f20ac6b942ff7b32cf10ad1cea36945b67ac08b114fc616175a87437ee05f3a8b6566e9edfbc1beec0ed8696b5d5c41a25ac43bf3ce2920dd262233ab3405d46f523894dcbfb6c90b6e911ceb93bb7fa6":hex:"c9da3df66111dcbabf731c6891eb698ac3283780f526e81383e201244efe4eca7a1c84a3bfa9ba5616afb15c1f1af0f3af2e071df6c1d34a343c3e3440f1a3e1b6620243d9e7d9a4dbda5981c3e876fd07f392d44bf3e0a4edbd884462ec2f71d36bde4a1b5792629da09a1fb01bfdbd532fbac71887a05a7077fc119a4638d4":int:112:hex:"cec973a27c42e31b779a6a91aa34":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #1 [#1] +depends_on:0 +1:exp:0:hex:"815f2b2f0b1621aa198eef2761380f10ac9872a5adbdf6286bdf3386e56aae4e":hex:"d16930c570414bb620e0eaa2e9b5d96e4424127e16461aaa5885c616a02ae974fb2890e73bade9ffa5066eb88a46ac7fcf258d55733d315951b1b71c5e3c13d78d60344ce921966297a0f6361cfeab03b346a7fa4f83a7a0eaf37576fa33a496102446f9f31b06ed91b51672c879cb18d4e38fa86e156d5b1dbff27925922470":hex:"0843984bbaa565ca24f148e57a7d9c57":hex:"1514b99c0ad3493c36fe1216d1a887a69ea0340101aebb03f60d7ed26893119e81e8b8c3f0bb4af5e10a3bf4edcf257473be9dcebb44a9d912f04d97a556ecf020c0bed7ccef2bfd5580f1fc74b706fea45f8c63d8de6f8deccc47a02dc86d3f0624e52f6f1dcd09de8000f2d98a4cc0896da6a564b92263673adf390ed909fa":hex:"7506175acd64224b39f890e498ee5013bb46fc571dc2b125ed5891b8ce8bcf42342f015fd2df5f4b9cc220aab52386bf2247d4163951e86467633f96c28bdda166d778855a7f60465dd2983232c9e53d5f89432407807b0402a10f155f80055c339451a106ac54438ae4a945e60d5320eab0adad9a1e66d59b9d3cc53887811d":int:112:hex:"28d9d780052b36dbe80a25d41d5b":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #2 [#1] +depends_on:0 +1:exp:0:hex:"d1325ecedb8fc0fe449de558fbc11ddebef660e47aabb84edfe69837a6a9066c":hex:"f9a4f7029feae5cf5bdb8385d6ad7d7da6a243c5026818e5a794c6cffb8dad3227964501c5a049b5a94a7ea2e24434e086800094118444c5a971bbe575324fb6b51c5939f81e78bb11d85d324742b462ce8d13584b3882617d0c94776f328a554f9d532b6515ade9fbbd2de1c12ab53671b7f7edaa7e20223f4c371c1f229568":hex:"8aff702c40a8c974cf24bf3c645169a5":hex:"9ec2e851dee3834d4843aafa740f3aac4cfb1e4d3a7e3e77349113f5200768c3e9dc37481d6292ebeebd2372db02ef8ac7180830c7187995c815d1d1520c3e2f8cf2a94993b18c828b53485073c8a845066772615b26d7a3d7d3e7d81ad1725797153f7ba5e313bdec582c5482adf76b31c871cd42a313018f40d7e23f1a7f33":hex:"3a93663aab93c6cd236cba4db2c03942d9ebc669633936370c2834357e76f6555c34d40dfaab1e78a105da9092acdba8be89e2dbf72e89518d55e09eb2fa1ea7da505484ad4531dba3eb853d1ae1a477355ea9448067b0adbc782d64ec342c7cb781d9dd8dc2b14dc1c9ab5542b679782b8bb9b45ff6a4e36c513df169c8eddc":int:112:hex:"7e682b0ddbe6c55091838616c352":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #0 [#1] +depends_on:0 +1:exp:0:hex:"4b92242268e598ddcf3a5a0de26d74356693c4dbca354e44be401f3d6804ea1e":hex:"72dc75bc4c8f5bbbd9c639fbdb34afbb84706404c9e67eaee1959aa4b51eac0db4f975cb3ed8d8ca27f72f61c8562ec953a7b8745826121a7016e60e877dcdb046f236af3826c1ddf5b929c5bd9a92b0d5c23cf8983bf2459ced6595882b3dd0cd25da7eba981bba122623dae22dbdce05cf4e5d82d2cc54eb4f68e9e8eff02b":hex:"3c292bbcc16c94b0a263f4d22f328915":hex:"167dfab08aac8350574693b31210138f6b99cfb61ba7ade2e2abffe2255837a913c9afe332e8fc4b2463310df46492e7d982dcb70fdda2a8b03911e6be9a5c5621d0ae8ecd1cb390910b6702aad33394c25d1160b86687e25bb6cdc4811e3158bb85ba75548329dacc19287d9c004a0473029b77ca290fc47c1f96d9583bcd67":hex:"c2dd42ab9bf3fda78032f73cbf7d28dd8e32c582a3b7ee79795551f133234d62ea6571a466b8e1af0b3d354b71a6582c9c8013d5f8a2c34eb3e848360adac1d5005cede58eae7784f32a31c40eec5a3f03cc1e7263d8515b36225b3515ebcf8dca2a77172c797d347ed3921ca0bc73e8ae56347134a6a2a06ae084f1ebb7b0fe":int:104:hex:"02fb002d8e4a1d11bb0f0b64d7":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #1 [#1] +depends_on:0 +1:exp:0:hex:"c5c50059a61692a8f1ffae1c616158c67d276dcd4a029ce197ed48567e5ff889":hex:"ab7e13923e66d0f600accd2462af74192c3de6c718a27052ef7c1302239c7fb2413df7c662657ca18228575ed138bc54f31663df548618e98d64402feab529d5bf6a678431c714df1fe24ea80017f455a8312bb5b710df8dd3571970404a806ec493dcb1f3f1ac980663f0b9c9823e0d0304ed90689f70d4a24da7d8504c5b0b":hex:"920d82c6b97a7bea121f64f83b75dc65":hex:"a9bd57db2bbe83177287e5f614dab977071abfe0b538067f7d0c5acd59bfba95dfb725b8e1af4573ff10ce135148a3bab044552348378d5ff0c4f8be1aef7ed60bb9a374a6c7b8097d7c1804fdf078f212e63e9f11d7404ad0d1a9cb28d5ba199aec3a6c41b9e523b541ad38cea763159836ede6371357ab1aeaedaaf4481c29":hex:"8f7e87e3ff4f7ccd1cedc1df125199cfb588339119a5ea5f9bdb918f89ca35f9dc16c6465fb25ea250eaaa8e7f00aca2199f92a2c244642bd15cbc9b62caa58115ef01d0b4a9e02527e035744b20892f79b07aa47b6c6db1332f82434764c43124b27148f2f611766781df8e4cc0b5ba99b858c13c233646dcb2b8749a194f08":int:104:hex:"65da88676d2ab3f9c6d590eb80":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #2 [#1] +depends_on:0 +1:exp:0:hex:"4c7cc3588436ad9e877de72578d30026d32746817ca7a8fb7df9870650aa48d8":hex:"00c2845fc495b89f870bce714f8604a7e7a96ede92c4b9bdcf044c9a176f66a28761089c083d5e2d613c746711238477c0efdf475e18af99e88cf76d04d4e40495ea16c462801443cd7f69c5d36ac9f337e828c308f1d1938b1fac732274459827cf9806c1661a247167948a93eb6e998a4cea76bb825baa27e4180e52633bb3":hex:"5e82285a3b332c693e427f9410564489":hex:"9971b8e234fc3e1e9644545e383eb065e1866e2faa6513278d3972add5ec0e71b1558329fe1ee038a27919e43bfdac8cf08141ab540528f74f9d5bc8c400bb6ee7867e4dbc2aa081d9126ac374dc62b10004d0e233dc93376b93c0da415e7d3e09851f2084a99feeb25939e21893056870cefe7cdfaf49f728a91ea0eef605af":hex:"ab7bac4ddede796576e1fc265c3c598055827be74dc7ed8ef172d00a648da56727767d68fcbe6c44e7272dc8cb15f03a26dc439178849b0e9ad6c7410dd4cca3f9ef40ec7c280042bbc199155c7341e88d35e5e8d0b42856e618c6c30e43d49506ccc3518585c951a3898409315e8b3b4d0adccdb561ddcf1b9d3b2cf3de9750":int:104:hex:"2474c830c6ebe9c6dcb393a32d":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #0 [#1] +depends_on:0 +1:exp:0:hex:"9d73aec506e022c0692892f6dbc3b4d41e86b97fb377c1956ee27b9c9ab3b32a":hex:"f02bf60f10ed876a803a96e75f3fe17b4e355246135a0cd5497baad2a40a523c27e27bf848f0cb5d0c6428d08bec9590b17fca5e697990d2a6f7d21080ab614f378a07461e7a6207229e0a087e285841ef2f119cac7d8a2d3abbb1e7272a0d7dd493c8c4f797e160c36e086227ceae4923658365b2d3a3fbea11aa2fab3499cb":hex:"bbacc081a6107364dcdac83abceddbfb":hex:"77e1da090e4d3a892baf1afbc12a56201a4362d8f09cda5e9bdb23411e6908915301d66403acb3524898c1c51d6970a71878accd0048cb6cfbd4bf941c174ee05eca2c4a29f1c24e936d3a63cb6cfa710617af1bbb41d755b2f79e135db914a7dd00c590cf741078eb72c3ab559787213202dcc0a4734bdd612b917e372f0e61":hex:"d78fa4024b8d073899ac09b8151c29b10a37793b76f04921bdc7dd3d2ef530a831e53cf6a7ddeec0e033ceeabb525bf5ef57bf9b3661ffb57d3bd4024252fa11dd569102c787c2d8489a1ad1290dca2e8edf82fbe6b5f83bcc0e888045b895e20c8556ee80430cc8640fc070491d2bb81a1209428938cd8e7a27e0e858029421":int:96:hex:"2235d00a47d57cfbd383b69d":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #1 [#1] +depends_on:0 +1:exp:0:hex:"73198dfd92d26283637e451af6e26ff56e3b7d355ed7ab8b2059c1022e0ea904":hex:"2471b3c4cc1d6884d333d1c998c7c441808ca884cb88173a225569e1689ef39e266e9ad381926adeafc2daccbdd3c9457ea1bdc3bb05168ef1eead1504d1d44dde34f96e1a7f2a5d3fb33cf5292d52fa9412800419570db0eb24fb74d55de202f5df74073c5a2eb9eb726393996eaeb32072bebb00593de41b97ecbab2554186":hex:"e36403ce1acc63bf50b47387250ef533":hex:"cad023cfb73d08e5b082c3061f3a6502a1c1d53038cfb19074d0ec26c9b272db93094147ef0ab2bdce440a2b3233bb0429add47601f011df679698264c0f81444aba14576a1a565e5c169f967c7571bfb32a2a4d7fcae897863d78964c5b1a040cc845494c0ad8ff4353317b28ca3798e6252d5015b58e99354ce6dfbe8b7a95":hex:"32afd6d6fdab2019ce40771b5298aaadf753d1c4cb221f01e4dfc8b1968f898188fa4d448d8364510a7e68c7393168efb4b4ead1db1c254c5cea568a84a997a76dbc925a6c19a9092002629f1d9c52737005232e5c7620b95ed64741598a65a9ec95f2c97b6b78bd85380811c11386074b1e1e63b9a7e99d1cb2807bfaa17f0e":int:96:hex:"e22deb1276a73e05feb1c6a0":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #2 [#1] +depends_on:0 +1:exp:0:hex:"1dcbd278480434135fb838ffcdc8e7716e95ea99a1cc36d544096dff9e9aeba0":hex:"da3b8c9e4aa8443535b321c3e9bde3c6742cd9f228c971257430b27293ebeb635917d6cba976c81934c3077902911169e8c6197b2d56a046b7ff03b482c38172accac98aacc90076370df28bc8a2044c393c7541b7b69b0fb852746dcf3140ace4e76861975814d2b5966f7714fb6cfe3e4299d79182fc63a345067a0aa54d8b":hex:"b737bcdee4ef83aa83f124cf7208a671":hex:"49a544aae76b04e62211428a2cc3719e4451f3dbf9a23b6ac824fc472e95e38386d267415c1472a8b0707b0573b9eb2a39a5d5a13464947cc3a7a7dd3b7196f11e87ab5233944f7cea3f4d62b088febf8b82a44d4ca6148be1ba24905432b7ac2bb4ebaf22d3bce97ac2bd34158b6011fbac77ee1fa96ca0c9c9e0207044fbbd":hex:"061b491b73f9250798a0fb1fdcd72a70eddc9cb48c1f10119387d45c50d5fbb8b85592a7977487e45342fddeb8d481eef3b99463972f66acb38fe04953c223c5f3e02611c8f33cb9ad7466860895fae585d40bc78ec14d1cf17b4c5b75e4d8c6341f1eaf80da4a78aaaa30d3bc8bff15f234aacbee4067a947e42275b12e0bdb":int:96:hex:"b897da3061c77aab5eb54622":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #0 [#1] +depends_on:0 +1:exp:0:hex:"2e00467f18536ea6b4d582b2480ebee883e4f56bd91af3ad7a47ceea3ece9acc":hex:"d5334398318ade59e6bda5cfce8e11b25c9ccefa2f651eb16f66c03d84dcc900dc7c85e6d2b778b155ae4591af0698df7f3b8b9f64d4442ecc82035f7d8e71a5f61c515a963f2fba077f3cb8276e91b31b3f8aa193988a16a86ccaec4a688ad68b5146925ec21d55ded407709d34d140f37e1f87d955619453c3704e83918088":hex:"aa6716e6b7107876a3321d807a810e11":hex:"5606a0b77cc9020955c7efda33b7080e9c0e9fd374c4201b4324b3e6523b0407171141e8246d01292a34dc69331f7177d6b7238e16e0303e85741f9cea5698e42fc79217d9e141474068d6c192713c04b1ba3573e93480f69e4cbf72090d46d62d5b52e4a7613af8fcf0010d0024ea11c19cb04571c6d7045a1157cf81df18d1":hex:"249119ace4e292ffdfebb433d5b57fa1518af3389eb832146c3adc2dc62fcc9121d7f6461a53ee107ce7edf362b365d8bc18e50cf9c328cb7c7aa7b4e8bfa07c34dc81c38fe0982bbc3b543485ea4b0ce5a76c988cdfcd241911cd66f5a5f9e0c97332bb0f3926117c0437470717c63957aeba1c55d96b1ff0f4d6045f908cd4":int:64:hex:"70e986fced03ae67":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #1 [#1] +depends_on:0 +1:exp:0:hex:"a18240f6135e7b6eac071546ee58bb52394bc34ad4e91ee678b72e4514fddcf7":hex:"02f288eea5588e7a011f4d91eca232af70f60ae3d9302cae5a8a58798c1b4e973e3b1d07695934ae871201682554ef6a5b94976c6a1aa73d354f1d65e3f025bb2a3f1e93009e822a87590dbfd1965904223049c5ac0da8596955199ff767b92df10d1f9c05c40bd8204846c719c5594000cabd87342f0447e4e466c3788723f8":hex:"149da8186ca73941582532ede16edf3d":hex:"4d46e1e87322ca84d5bb92d58670f644083db06bdffd99fab0055a62b64a30b5a5673a108f0b9f114d379d3fe63a1f63407881c5b5cb03142109c158af42a00eb24d3b1873edd2284a94a06b79d672bc8f13358f324af2622e9aa0da2b11e33567927e81aea24f3605168e602b532fa2cf9bde5f8cc0b51329e0930cf22e3752":hex:"36cddac99e2673588ba783d3c085b9935626687a2dbac9ad10deb4867c577d6f80453266b2400afd773e4edeb743c32562e85f7f8f43dfd87b10a2dd79eddf6e580aeb4cea92ac21cf49ca97398cc23c02b0ca59257643fb2bc6462b9cf04658352d53c2ee50d87cc5ca2ecb722d950f0daecfa0b7c33aaa2c91dd8b093916cb":int:64:hex:"73cbe40df3927e80":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #2 [#1] +depends_on:0 +1:exp:0:hex:"4b64bded6c658090a85b5d889679c6a00579498aa82be1e3a628a1cd001e52a6":hex:"182cd59dc1934199d2d2a2712157438c347e286f66b5a2b8b5149aa41ff7ba82adc3751be379741124dfcf05c531416a64f25f0d28abb6f7bf98c80762f0fa363da679437621dcf61bce43ef4d63178779d1a3ebffb82044d427ef522cbd2643cf1f5617a0f23103cd2a164a59f182b151f47b303c4eb7387ee5cb97cabdf985":hex:"99aa6f359534da409a18540d82fb3026":hex:"f55fd6255d8a188ce9a4a2727699ce16c8bc5c6adba88d94106038b74deb79c9d43bfaa47375148d843a5ce248d70193c8017196941b2d9e2dfd4375a3390c19d2f833b0b265dab30f26adee07ab0aeeb930dc3a9fbcf719a707fac724deb28dee2a6788b17fa3505290c2797c6dbf930b41eca1f6d54d75b820e62ec7023e93":hex:"5a1211218174e60690334856483a3066e2e8d996fe8ab86d0f8fef09aba9ef0acff9d3e1e5cc27efb5464bc23bea9c778fc74206ae3a16e5fdbf99694ab7096f23c4b395d7a7b8d6675e56b5505ff62f52bf183bcc4433298296e41662d6519d9c1f0a5fb3140376c8890547eae72afe75c338ba97fad9f0184dd311bbdaf3cc":int:64:hex:"8dbdc0746074b486":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #0 [#1] +depends_on:0 +1:exp:0:hex:"cadef353122cec1fdbc236c0ab195fc4d732655cef444c00b6cba5c61e01c614":hex:"a3d5e55fa3110a268cf1414a483adab6d58ec8762a6e6be81269c0369e8840333503bc3688c7be001cdb84d163fa1dfb05f3b01ffff31151f1af780c796822e3d564f785964a546bcc2a320d81a2bc61058652a8594ae9b9b0917400e08d4a99fa161376ac53cba54c92889fd3497e233aff4e12cd85d57375c7c89e92cdf5f5":hex:"d765b5954e5b486885dc78ce6801516e":hex:"ba0405745971eaec5d337fd22e0ad287551e7084f1c9c38231d675719e3980356e183a99a3c760ecf7a8ede5e0dac8d2bc13e135570ff6e91a854ea3b457263b0e77896fdf7bdf0b53c8276cfd1ea3e8e22450ff2665eacd24e5fb2be89373349fc9e2967763d43cbd7adc9a376b1b4ab956ddf8b1a56d9385fb7e861bc34df7":hex:"9b99f984ae26f9cad5b3c8058757a0a5caef0fb86b8ecef0c1bca6b99bc72b0d5345a00ae75e37d4e651008bb733105d2172edaaf5bda4ad950a49de55a514e882a470dca7c7bbfddde40d38fef4e1f3864fd7e212bbc0383d0bc29ab2303c8935d49c35d7d73df2fba0daeb5f37f9ab0d541766da71b33da1018a3f287ba312":int:32:hex:"c374cd77":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #1 [#1] +depends_on:0 +1:exp:0:hex:"0cfc42773fe2d16a59da52234af5015271332344448c214a2b4a0bb53b07a0a0":hex:"dfbf9eaa46c368b28ef50227db97f29b5d9ed599760bb83f5d52f92ef5522815d6952ebb0d9b4efe8844216d37510746caf8c775d2c862bad8d67effe109a0cbcdd14ba8e31fa420a475e55ac6b02908346ad1b064d5b6b869503e08d057ae65e9dc2a2a26345917b18d1b715a2372e8e114a071eced0c29cc9966d7205ae010":hex:"45afb3ba2db9287f06cf48405764a955":hex:"16d3ad553cc0fde3f32112bdb478450c65c854927b198914649a2820a9e3d01131b693765d40bd2bb74a50eb4cd7bc8dd8dbac9c6a61acaf5e4cf81570814b30a6a11877a8f9c5df342f70008cbf0576bd27a50bfaf6e22a40bd77435da16b666a06d172aa981bdcae0d25b8ab002c6c1994a356d3c3b7e4dd7b99892b0784f6":hex:"e29db2c4bccef2dda828ce652791d424a86cd5790e6ece67bc029ba9520bd8f35a214a73d8b86564df0eccdb60eafee4170da2694eb563e5a854b25d7ba0a4c53465fdc15c6e267be2e54263f97aa3edbe2358f3d9b8d28997388a57aa427a239a74534393593196253de1c2946b7a437a00480ecb2eb08dbe55ca2b3641c36f":int:32:hex:"39e01fa0":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #2 [#1] +depends_on:0 +1:exp:0:hex:"2a840df4be22c70786c873058d2a6e16dd9895cbfb55b9c9e98f958cfe62e65d":hex:"313eddc53f3986927a261f498283b6dc4a39d26f98c7428127237d79a11c5e626e2e9cdb68f72aa3168ab23dfa2f5e03bc65a68d781f23fb9e295909cd9f0f3e5648cf82f3f6b3b509b0a333cb7d9f2b6e444c351a318f8f200a921ccb409def21b87bc55ec211a76a518350e6ee21d7379edd004b3bfd1ce9086b9c66d80ec1":hex:"ebf155f7cf55e6aabdc1171c95c45293":hex:"8abb8843de1766cfb8d6474496acda2f7a14e78a5e4c787ac89e6bc06cfd42173c35b3a75ddff644f4a58aa7502fedada38a7156457365b4c3c07bc12a8f9061331139b9a2b8d840829b876beb84f27d5a64093c270fe6c310ca3afe987bbc5ec4dc06358d5bf77c7b4e4fe4078c6d3ec28e9a281318da88949c478094c0065b":hex:"769869a55754eb5d6d42e22a2b5271b38533fc0c79642e250347d34566eeca732e0565f80672054bd10cbd3067730dbc567039c730d8bc32a2bdaad09885651533a4f03174d4e6510547c1e1dd51be6070ab0ca0cceeaccf64a46d0ef87c0311bd09973f3b588a4dfb39c85086ea5d67dc531c287b83c161dcb25e07b671343f":int:32:hex:"c364c089":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #0 [#2] +depends_on:0 +1:exp:0:hex:"461566cac74f9220df97c1ab2f8bb74189a634bc752f7f04526923d30506949c":hex:"":hex:"546d821e437371061cf3207f3d866c15":hex:"":hex:"":int:128:hex:"44193072791c435d6e8ea7756a0bd7bf":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #1 [#2] +depends_on:0 +1:exp:0:hex:"7736dbb38f1fe351a7fa101d91da62124c22ac02ee06b9413f56691067572f73":hex:"":hex:"5f01779e5e4471cd95a591f08445eb5b":hex:"":hex:"":int:128:hex:"1a1f08c8f40b93e7b5a63008dff54777":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,128) #2 [#2] +depends_on:0 +1:exp:0:hex:"eedcae924105c86190032650e2d66cf6927dd314de96a339db48e2081d19ad4a":hex:"":hex:"a39d400ee763a22d2a97c1983a8a06a6":hex:"":hex:"":int:128:hex:"3b4294d34352743c4b48c40794047bea":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #0 [#2] +depends_on:0 +1:exp:0:hex:"714df4b69dc00067c4ab550f37ff72358b0a905dea2c01f00be28cec130313c2":hex:"":hex:"c46d63d6fead2cee03bd033fbc2e6478":hex:"":hex:"":int:120:hex:"2a0271b0666889d2d0b34e82bf17d8":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #1 [#2] +depends_on:0 +1:exp:0:hex:"454021ece9a87a9543a1626820d39edd1eff3dca38a287d8fb68bd315a7a2677":hex:"":hex:"51de54b633a7c9f3b7b2c1e4b47d26a4":hex:"":hex:"":int:120:hex:"114708102a434e3a30088b5944c272":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,120) #2 [#2] +depends_on:0 +1:exp:0:hex:"d7e90b539c99e8c2187ed72823258c1149890a69a9c0081ff8c66e1cdea9f2f6":hex:"":hex:"6dba3273560f30f118a2e0251f7b7d76":hex:"":hex:"":int:120:hex:"5f45e00181cd2d7feb4723e0cdca24":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #0 [#2] +depends_on:0 +1:exp:0:hex:"2948233eec9bf8adf7250b20d62df9219d30e314c5932383203805ff9f3dc5cf":hex:"":hex:"d6b8e723272e26922b78756d66e03432":hex:"":hex:"":int:112:hex:"14c9a9a217a33d4c0b8e627641fe":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #1 [#2] +depends_on:0 +1:exp:0:hex:"c73fb5e732ebc1dc7c91ac25de0d01d427de12baf05ff251c04d3290d77c34d1":hex:"":hex:"c31220835b11d61920ae2c91e335907e":hex:"":hex:"":int:112:hex:"9eb18097d3e6b6b7d5e161ae4e96":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,112) #2 [#2] +depends_on:0 +1:exp:0:hex:"a46aff2121825814c603b258f71d47bd9c9d3db4c6fe0f900e0e99d36c8f8d66":hex:"":hex:"7cb5550a20d958490739be8a5c72440f":hex:"":hex:"":int:112:hex:"8c76eebda0f1fd57f05a62c5f93d":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #0 [#2] +depends_on:0 +1:exp:0:hex:"61a612c76de551f794a146962d913f60fbd4431365b711217aaa4beaa115f726":hex:"":hex:"2d25462c90ad9a21073729e5efc99957":hex:"":hex:"":int:104:hex:"e4d3b277dc9a107c0392ca1e5b":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #1 [#2] +depends_on:0 +1:exp:0:hex:"4b233480239fabd2035a7c9207a8e1ab2da45a90a472b30848fe4b4757c628db":hex:"":hex:"50d45096afd0571e171e1ab1ffb3720f":hex:"":hex:"":int:104:hex:"5393bc06b8c5ecef1264fd6084":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,104) #2 [#2] +depends_on:0 +1:exp:0:hex:"dc051ac63e6b051594158399291ed101a3efbb1701b98819c4835a4863734371":hex:"":hex:"1f304d4d7f84ab560366215649b0a064":hex:"":hex:"":int:104:hex:"1081dda9e0a793916dc82f7848":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #0 [#2] +depends_on:0 +1:exp:0:hex:"75f76df772af8e3019a4c1588a7d59925f80ce0d5647030f29548374e7bcc9e8":hex:"":hex:"d407264e09fbc853b131c8a9f808f1de":hex:"":hex:"":int:96:hex:"d515522db52bb872a4d3f9d1":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #1 [#2] +depends_on:0 +1:exp:0:hex:"608d7592c094322b31d4583a430986bdf6aa639cc4b4a0b3903e588b45c38d38":hex:"":hex:"6a631952e4990ae6bdd51052eb407168":hex:"":hex:"":int:96:hex:"eb8851cfdd4fc841173c4985":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,96) #2 [#2] +depends_on:0 +1:exp:0:hex:"86a90631e5341e67dfa55e68b07522507b437fbab7f3e2e26cfc6e89ef9d2410":hex:"":hex:"67763ee1890e4bb430ac3c0dbc2af997":hex:"":hex:"":int:96:hex:"c6d11901b53cf6b13ac03cc5":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #0 [#2] +depends_on:0 +1:exp:0:hex:"b8d12783ba2548b499ea56e77491d2794057e05fd7af7da597241d91d832b33a":hex:"":hex:"0365436099fe57b4c027c7e58182e0b9":hex:"":hex:"":int:64:hex:"41fc42d8c9999d8c":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #1 [#2] +depends_on:0 +1:exp:0:hex:"eb17c1bbcd356070ca58fc3899bb3751eea5b9f3663c8e51d32c1fc3060b7ac2":hex:"":hex:"aca76b23575d4ec1a52a3d7214a4da2f":hex:"":hex:"":int:64:hex:"fbcfd13a2126b2af":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,64) #2 [#2] +depends_on:0 +1:exp:0:hex:"916aea7c3283aadb60908ec747bcf82364c1827ec29bedcbadacbb9b935221c1":hex:"":hex:"e4aefe6f81872729ff5a3acf164922aa":hex:"":hex:"":int:64:hex:"2035a7ce818b1eb4":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #0 [#2] +depends_on:0 +1:exp:0:hex:"47b4b7feb91582a2f6121d12fd465967352e58d9f3d1bf27478da39514510055":hex:"":hex:"137bc31639a8a5d6b3c410151078c662":hex:"":hex:"":int:32:hex:"822955ba":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #1 [#2] +depends_on:0 +1:exp:0:hex:"8955cddce65978bd64ef5228308317a1ba6a9fbb5a80cf5905f3aed03058b797":hex:"":hex:"1370e72b56d97b9b9531ec02e2a5a937":hex:"":hex:"":int:32:hex:"b2f779e8":int:0 + +AES-GCM NIST Validation (AES-256,128,0,0,32) #2 [#2] +depends_on:0 +1:exp:0:hex:"7795d631f7e988bf53020d2b4607c04d1fab338a58b09484fe6659c500fd846b":hex:"":hex:"f3f5cc7c1ec0b7b113442269e478ed81":hex:"":hex:"":int:32:hex:"e4e6dfcc":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #0 [#2] +depends_on:0 +1:exp:0:hex:"f9aab5d2ea01b9dc35c728ae24e07c54e6d1452e49d9644776f65878199bc5e4":hex:"":hex:"96ec2252e51ebfb731b680729be73297":hex:"983a102a67359f4eecac465b0d65908a487c98c593be89494a39b721728edc991726e1fba49607eed1f8ba75ae9ab82a1a95b65ebdf48d7ee3c4a2b56832f21a483d48c8400dea71537f4c459d1cfcf9d2cc97b32eb7c5146cbf44d7e5ac779e9be0ae758eafff2138d4c5370b8cb62d70ebb713dfd2fd7772fa250590609844":hex:"":int:128:hex:"766b6dcf491a5836ef90f47ac6ab91ec":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #1 [#2] +depends_on:0 +1:exp:0:hex:"d713b33af57762f933d6abfecbac7fb0dc1e545dd7c01638b0e1510af719769a":hex:"":hex:"5da52833b6fc73c0e4b1403e1c3c10a2":hex:"374dd4ebdfe74450abe26d9e53556092abe36f47bbb574e8184b4e0f64d16d99eaf0666fa3d9b0723c868cf6f77e641c47ac60f0ee13dd0c1046ef202e652b652f4b5de611989223b0acf1ead9b3537bba17ccf865a4a0fda1a20b00e3c828b9726bbd0b0e92fa8ed970eed50c885e6d69604278375af7b9ae47fbce4fed7d03":hex:"":int:128:hex:"6151956162348eb397e2b1077b61ee25":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,128) #2 [#2] +depends_on:0 +1:exp:0:hex:"77a1e4ddfbe77a0ca3513fc654e7c41609cb974a306234add2fc77770a4a9e16":hex:"":hex:"30d6ec88433a6bdd7786dc4d3693bde8":hex:"69beef4dbdcdf4e8eeb9bf8ae6caff8433949afc2ffef777e2b71a99fde974797dfed2254b959430ecc48db72cee16c7ef41fa4165ce4a0636ad4e40875d193a3c6c56a6bca5a55bce3a057a2d3ac223eba76e30e7415f00e6a7643fda9a1bf4d4b96ce597ffe30c3f780dd767cb5681bb7a3fd11668380e272bdd70e66f18b6":hex:"":int:128:hex:"d4a3c91e02a94fd183cb0c9de241c7d1":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #0 [#2] +depends_on:0 +1:exp:0:hex:"303930b8ba50f65a50c33eccd879990d5d87b569e46f1a59db54371fcbda7fd6":hex:"":hex:"2b2b28d8a5c94b6f7ee50e130268a078":hex:"c2ff20441d96bae4d2d760dcbae636ca7e01d263c28db5faed201bdb39bcacc82ebdc943968aa0accd920d258709c270df65d46d3f09910d2ea701c018ec9a68af7fb3d76a9b360de266b2ac05e95c538417fec59cec1f07d47c03511751978baebd2e0e4f7483f7351b5e61c2a60138c97b751f6a8c8323970f6be05357aeb2":hex:"":int:120:hex:"b597491dfe599eaa414b71c54063ed":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #1 [#2] +depends_on:0 +1:exp:0:hex:"1e3b94f5883239c45ed4df6930c453c9ffd70b1c6cee845bbcfe6f29a762713b":hex:"":hex:"61155f27c629dcb6cf49b192b0b505d6":hex:"5b7482e9b638cb23dba327cc08309bdb40d38100a407c36091457971bad3ab263efa8f36d8d04fdc4dea38369efe7ae5e8b9c190dad2688bda857e48dfd400748a359cfe1b2a3f3d5be7ae0f64a3f44738a7c7cf840a2e6b90ec43f8c9322c60dd91e4f27fa12197fab7ed092990879e964ce014f6be2a1ef70bfefe880a75d5":hex:"":int:120:hex:"7003f04d6b6d9dc794be27b9c5d5e5":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,120) #2 [#2] +depends_on:0 +1:exp:0:hex:"9080effb27994ef831689da10600e7a219db93d690647457702c217b08057eb3":hex:"":hex:"f45514696ff5ee1e6e5797f7bcff05c0":hex:"5251f800f7c7106c008c0122971f0070d6325b7343a82fc35f3853d25c878215e7a929bf63cc8996f0ffb817174a351b71d691f23021f58777f962fd1d45ff849e4612e3304ae3303ace7b8ca1a43f54e662071c183a1695873f5567397587283433d1e76cec1103ee76f8e0472814424b8981caea1f624131fb7353afcd2cd2":hex:"":int:120:hex:"cfb6d9bccf0378fabae08fd230edc1":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #0 [#2] +depends_on:0 +1:exp:0:hex:"8c291f0ad78908377039f59591d0e305bdc915a3e5bfb0b4364e1af9946339c0":hex:"":hex:"a9830d5663418add5f3c0b1140967b06":hex:"e43c04e1f7304c1d83235120e24429af8dc29dc94399474d06047fd09d61ddc682684776c81ef08d97f06db6e4cfb02daea728ec6ac637e1ecfdb5d48f0440d8d8ffee43146f58a396e5151701b0d61d5f713b2816d3f56d6ee19f038ccc36493d9ad1809a49aa5798e181679d82cba22b0b4e064f56af5ec05c012b132bda87":hex:"":int:112:hex:"275480889efe55c4b9a08cef720b":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #1 [#2] +depends_on:0 +1:exp:0:hex:"96c77c11a3336a41b61ffdc1724a80735bbe91dd4c741fdbcc36e21c53335852":hex:"":hex:"655502d70119326405d8cc0a2c7a572c":hex:"c01034fc6b7708128fbf4d6ffa4b4b280a1493b9e1dd07079f509479b365f55ae9290689f1c4bdfa439344e3abb17f3fd3d5e2f8b317517747714a82f0a9ace04938591d3ade6d6095491a440322d347e8634008cc4fd8add7c1c4764afdb2b098b3f5604e449e8049a46b6192647d19cf88fa5ed1abab7f313b4285560cba44":hex:"":int:112:hex:"b4d581464c4bb23433699c418ddc":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,112) #2 [#2] +depends_on:0 +1:exp:0:hex:"e2a3957393669278f052ff2df4e658e17f2fe32811e32b3f62a31a3938930764":hex:"":hex:"a6f5a1f1f1ac77a1cb010d2dd4325cbe":hex:"ce9c268429ca9c35c958ca3e81935ec60166aea0be15975baf69103251efafd54cbcc0bed76a8b44a5b947199cd3c2dee6878dd14a5a491a4a3d45788405d0129354e59c047b5367f1158bcf4e066a276951d2586bafc3c11f8a982ca7c3ba4677a938498bd51171552ea032fe1bd85cfeaeb87e87168f7a28e979b08358f841":hex:"":int:112:hex:"cd5986df8e9761d52cb578e96b1b":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #0 [#2] +depends_on:0 +1:exp:0:hex:"2b17652f7f04073afe9d9eb8b2615c7550968b9776b139fcc4f9b0300912cbdb":hex:"":hex:"9a8ac23ea74b292b7386138666a0fb60":hex:"2732107241e6136f1dd28d233373079d75d6ac13828ae7afc751b6f9c57e77268c52ae91f4ab3016af2764597994573cd6b41f72e21b60ffbb3aafc9487ac19d0ffe8db2ae2c7505ae5963b032d1ee1bffb4c5bd88bb0c9a350ba26ee3eb8dc0a157955333e4f28c5ec7349c39229dff9f440da72909f2870aea873a76545ee8":hex:"":int:104:hex:"f7b94229439088142619a1a6bc":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #1 [#2] +depends_on:0 +1:exp:0:hex:"16fe502e20d6473ed9a27569b63a768ecd428738904cf0b337df510775804619":hex:"":hex:"431a8d78b91414737e7c6188328a6d37":hex:"934bcacbac10ea4ff6ee94b17bd7379b88489fbf123bf496c78c9b6b02ee97dd62eedd05b8f44f4912764920129e711701628991a0009ebc7017a1a19b177ec9bc3b0f280eeefadfa310708dfe214428a184147b4523e66f2d62630d4a12fd3e366d27c3b7d1566553c9b434ed193db083160da1f241de190bcbd36f435e30f4":hex:"":int:104:hex:"1dd3e6d610f359cc4e98d36244":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,104) #2 [#2] +depends_on:0 +1:exp:0:hex:"ccc545fd330cf17e27d75582db28807ec972b897f812d6ed4726d2a18daac76a":hex:"":hex:"caf2f56584a59c42a51fdbfe4ad78f3c":hex:"e85ae6b27778893f36f130694af0b40f62a05aa386b30fc415e292761cab36fdc39bf5687a513e25ed149414f059e706d8a719b7165044fcbd48c773eae546380b8e667b56824e23685173ad9015a9449bc1cd0b767981efe09da43a07bf1aeee08ba05d387b8a00199e18c874fb3a91f77ba448c3bff971593f94747fce9cbd":hex:"":int:104:hex:"5cf5c7ca6fbfee63854f3bcd15":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #0 [#2] +depends_on:0 +1:exp:0:hex:"8340d604770c778ee83d0fdd5703b1fb304c3bffeb6f4c65e2dd0e12c19bddcc":hex:"":hex:"c0a580465b1b2e8344f795a6578a5151":hex:"799f228962ef87865dfcfa0addde7366de2e4aa78029dbc8d57d7e50fa7c74343458df3465103556a3bfc5ce217fbbb5b2835c9f76b70240b40fd605bcfa6b790d5985a8ba54354e0625263c628e8746c451504fc58a179f90f77f2b293d8dbf5582b031082025c806e60143da9ebb6133ac8367376d0572b32569ee799540ae":hex:"":int:96:hex:"318f56bd0f3832d043ef700a":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #1 [#2] +depends_on:0 +1:exp:0:hex:"74de45262fe09e12c9ee7100030352112a6532d1874cc6792b4da6950677eb2a":hex:"":hex:"9f7fc7367f9afdb67fd1afffac058e2a":hex:"289ac6f5beecbbcbde5cb3b0fdf4a27ba237fca33719f774ed33a5fd35d7e49f76d3e88c53fd35561655c35469f3eefb5b2f776ff2799aab346522d3f003154e53f4ef075f016aaa500c76870e6659a5f9af197c9a8f5b9e0416ed894e868463cc4386a7442bb0c089a9ab84981313c01fec4fc0ba35829b3cf49c6447f56a4b":hex:"":int:96:hex:"bc1b8b94ff478d9e197551cd":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,96) #2 [#2] +depends_on:0 +1:exp:0:hex:"441ec8afce630805d0ce98b200e59f5656a5ce19e5ef58241e6ef16cac7646b9":hex:"":hex:"a1cbeffaf55708c375dcfeb496b21f4e":hex:"5a6ba5d3f5a7a4b317c6c716564c648f0e6bc6b0f9a4c27affca6d5af04b7b13d989b7a2cb42ce8eedd710be70c04c0e40977ca1c2f536aa70677038e737064fb0e23d3dd48bc00ebdd7f988f57141e164e3c18db81e9565a62e28c73770666ff3bfd725eebd98946fed02f31d500b0b7ab4dafeb14e8cc85731a87f50d95fae":hex:"":int:96:hex:"aa4bb3d555dabaaeb4d81fcd":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #0 [#2] +depends_on:0 +1:exp:0:hex:"d643111c973ffb7f56bfbf394eedac54be2c556963b181cf661ba144f7893a62":hex:"":hex:"4575b00b9af2195a0cc75855d396e4e8":hex:"b2c53efe59c84c651979bcc1bc76b0bbf5e52b5c3115849abdbc469a063e2b1699bd292e5fcb3476e849c9edbe6ea14c2ab948ed7d21a21f69406621d3d412b043eaf813be722d92739a33a361ed8081c0eb00400c3c7d4e329f5ba4f7b75d534500f42f178048cf2e95b768ffed79c350f2ff72cb355abdb30af0a1363c0b4a":hex:"":int:64:hex:"9d1d182630d7aeee":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #1 [#2] +depends_on:0 +1:exp:0:hex:"91301ee0ca694ae6971ee705f53c7ec467f4c88257d6466f6f8159a8970384b9":hex:"":hex:"345fb57e88124a414828730a85f57871":hex:"c13623824a204385f352388098f5e2db23426f00a73c60c1bf1047ce2c7cdf7f7cc8475781fe7075d1226ad18871e12f0156f35e6ce7032efe3bade1c807f9eedc720fff7a27a2f4690f904be9c99b54a65509eab60e97c4283596eeefa2b2517e95de7620382e3f780efa1dbf5d3908373adfe784a4faf298681e171bade4b3":hex:"":int:64:hex:"325d08c5b96068c1":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,64) #2 [#2] +depends_on:0 +1:exp:0:hex:"b6ba5c11daed7f868da9bfd7754d555a147a1ffd98c940c1cd5d136680e05c10":hex:"":hex:"b0c92b79d78547496d770678e1ce1552":hex:"5b1ac8ff687f6fd2429dc90a8913f5826d143a16a372cca787845cea86d9b4778708bc0aa538f98e1031850f7c1d97fb64fe29adce6e1d51ca7f5203fc0358fe0bc54347e777dddfe04e3d7a66a1d1e2bdb8b8929e2100daf073845db5dc0b243819754c4c08f4fc3631d1cbd79ac7604746d677ff035930fcd6bd652e7864db":hex:"":int:64:hex:"b1819b6f2d788616":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #0 [#2] +depends_on:0 +1:exp:0:hex:"5fcae1759209e784dae5a8278b267c414a03ce7c803df1db7815b2910d10ce19":hex:"":hex:"24c5c349b3effebfd076c88a591b8301":hex:"ca2778e39fffce7fbe8f912e69d55931848dd5ab0d1bd32e7b94af453251a47f5408ebacd7b50ddd1103fab1c72acc0a02f404c5661d8450746d781e2c0861b6974ade9ee2515da88b470f16d5f06007f35ce97cfc17fd015e438af39ca6127db240babe9c42ed5717715f14e72f0ef6ff4ce512de95a179e60d6393e73f216a":hex:"":int:32:hex:"8e59f30b":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #1 [#2] +depends_on:0 +1:exp:0:hex:"8d71a70fd58125b0da8dddf8d23ddbe0bc44743753bdf259448d58aae54775a6":hex:"":hex:"d15b02572dec98398ba9e68e1a463738":hex:"81313be1eda9f27e01b30877ca90e825f55ef60b15548c45c786c44b024e7198f333be7ddd2c3f593a9b77b68e6a7ac4cfc015aeec66f4823d9be7152f02a533f375554309a4db0fea8e76255144458e488fd19106d9a9614e828ae306fe82af89e7981369b2259c49bae77f8ec2b1f169ef0449ad083d11907234b72ed2e464":hex:"":int:32:hex:"99df1b8d":int:0 + +AES-GCM NIST Validation (AES-256,128,0,1024,32) #2 [#2] +depends_on:0 +1:exp:0:hex:"b52398c7c75e1b146cc9998eb203159925cf6fc0b1c993ba46528e2f8e8087f0":hex:"":hex:"afc9a60ab8448b77fb05e8410d0a26e8":hex:"770b3782f0e3a19d7d6bb98fa3eb0b916928a2970701c0f4a372a0ecd63499444ae02fd269ddb7d92e11a9e11d0e0b8bc60096a4be79a1e063174b710c5d739d8d05ab5c8ba119ff40843cf8c5dc4e1bd6fcad8389de3b606284c902422108d85eb3589524776641b175946c9ade1465e0d1064c5ae073be90e3261878a9af98":hex:"":int:32:hex:"32d6b756":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #0 [#2] +depends_on:0 +1:exp:0:hex:"6793869513ac886ed66e5897bcfa263877d8465fc762b1ed929ba3d08615fdd5":hex:"cda45e29f487f21b820e1af2c8e6d34a8bdf3f72d564a4625a6e06f9bae1c2eac3bbd5c5958fd75cf389a1a31391211745029dcd4cb2575f40ab04710a909b88c2d430cdee279f54cf7c0ff6638d1e0e631f526ee198cfd6e5cdf73d1a11b69de01d640f385fd829616cd2c0e78f09b5f64012e42dee9eb0245b72aba1404e0c":hex:"a43de15dae25c606da1e7a4152f0df71":hex:"":hex:"385834c853772af70675b6be2d5087df84f88b6a303ea594a170e6dd0398ae270fcec61661ca373f4653d8dcc9e71767568c0fb03023b163bdc9ae8a08ea858cbb03b8182b4674147cb35ffda14a2f50ed9eb48d5351f00eb2fa433fdfed6f94833bcf656a7e350eb978a0aaf7a91674145f28f64693197a116b21328e273dca":int:128:hex:"159ffdb05615941e11f0db46ac8f23de":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #1 [#2] +depends_on:0 +1:exp:0:hex:"9f77c141b234907b38fb45f1b3602f3c29de1ed839bb7ba51f6192aa8baaa287":hex:"96dcb74a78e99676a71673e3c9f94c34b34dad2748a6e42cc70ea50e41ef8b86b5992295d2cbc8d621fefce09e8948de7e696b9788377d598796afd002a82b628d9890db78359e1edc075cbc0d3f11d544bfdf5c8a838390cb856735942dff260189c00accfabf720e5fef1d9b7131a6b2b769f67374602d1a7ed9b899b2c398":hex:"1b49005788148665cef20d8dcde41889":hex:"":hex:"b4ca59caaa94749317789b92257f2ef1dd3d9b1f4ee9540927a6ae7bf5bb0b348fcf25ba8ddda79a89d3174ac1713421291910c8926cfbb4ec1e59be7dd50e816ff586f165c605371ee6077ba4ac0ce10499f9a2a44866ce6319fce22652226164cc0a813c3147c4461dd0410e3701d4647d5a003090082e367cb9249cf1be47":int:128:hex:"8048ae0c35a656fcaa2f4c1b6be250e2":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,128) #2 [#2] +depends_on:0 +1:exp:0:hex:"2419fd9dbe58655122ac1022956a023446b7f4756163769fc1b99eaf8fba1474":hex:"93bc33dc647c7321152b12303f38937bd191ab3ce3b3a43a29f6853b33e415667d97192fcab2d1baa017042b301d03bae2f657505cc58e3aa4bd849d1ce85ede0e192a373a3894c41c54edbae29a209e16c87c81445d43968595297b50b55659f8b92d7282a2b3ca85e4b5d4ac4ff5062635103f2c7806fcc7378d5c2013be72":hex:"94ef13dbfe9f362da35209f6d62b38a4":hex:"":hex:"3db23c161cf352ba267dab6a55f611eb5fff78a75288779a167cd0e4db6e75d21f11f4ff2928abcb1b46d82c2a0b1f647c60da61f9a72565f629b06a7b3fe96e4141a6886436859f610724bbe43fb99fac9b78b1e0138e2d57ce5fcfac1599bdba5701cb424535fad9ac482ab381eadca074e7376101b4b436f9c43ed760a0a6":int:128:hex:"ecd4a7370096dc781c3eb3f7e5985ef1":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #0 [#2] +depends_on:0 +1:exp:0:hex:"08e11a8b4b24e63060c5002713725bb5b4a412f1d76eac13989738ce94e19642":hex:"d5598f4e37274f3b617aa4f9cf6b8547b4eb1e0eac79f6eedd6cd5364f8891f66b8d0cb09f54777d461bbf92d6fd74b3fac412b77f2c48e1024cf09b83c1e71bb86f0a20f82d296883ffee62a4a192b184bc6d7ba0448c1519310c83b18c00e71153137afad14f096b43d454f205ba6b6c2ec162aa992cebf50735dd9bb37c7c":hex:"c6f1e6a39cabda1089048b536e39cf67":hex:"":hex:"1fdaf0156456b6b2a68d66091bf2260792748acf3e7bbb7906af8e0df3b569a7c03ee3a48bdfdff7ccd52433d0bbe8c5fe30d93633bb9d591dfad7d81bf8efd4d4a3c5c0bf2ac9832f0a8687f16be640fcf9b19169c251f46b97167d95115acdee3d4443df416275f5597a52c17a4b8c4b723d4b35a7fd0b380fdebd44df8bd5":int:120:hex:"cb9f4d4610c67acfe612af5508bb8c":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #1 [#2] +depends_on:0 +1:exp:0:hex:"da2dae0107c284ec2aaf6e7306959df1e92d3932b88954f119ab677c6b9dcdb5":hex:"277675044caf1713109d4d3abf50c6fb67dc67f7fa584fb1a41c833feead03177cf4b42edac139807ede16eb1d9bed27db741f9542d437781405608de18418c9f7269ab3fd88f6a922a31eab5a3b8b2aa75ee4315fcea80c4954ea6613b1360b1c7c6b6da815e3f6e50f72b7e69c3b6cb3d154855e3f83cbd1947eb54018155a":hex:"2005f79d55b12e6dfbab7fedecc50e2d":hex:"":hex:"c2aaab524d1738b5244af642bbd16b32ba954e69ae51acc804a6b0f89f6cb77ba2db2b0e109cda6036786f9cec5587b01e306ee8b3d588748c61ad7fce1266165729d0153ee189746b107ce15ced667279a484294725e120dc1803d2c751784436ab8ff1d5a537628ee35742d1917dc51f8cb46c2d6b983bdec502e99b85e5b5":int:120:hex:"52b4d7f2cc44f0725ee903551f681d":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,120) #2 [#2] +depends_on:0 +1:exp:0:hex:"637807b3e472e2287b09d5a3ee62f791a416419ba35e11c49b24dbadc209f0ba":hex:"e91a0a7320329dabb0d0fd7f099a4d313724aeeebcffe6fcea5b00af27d258cf9774845d29aaf5dad634c6f087c3311b1c92775fda8df8820c91186da30dc79747be6ec6230f2c261063143f4fc89d94c7efc145e68bfdbd58fb14e856578ed57ee5b3cba2cc67dd6497f05d1570efa496b46f5bcbf82ff9c6a414f76fcf3f5c":hex:"46909d8dba6c82b86c7a2aca3c9e71e0":hex:"":hex:"13b4ad9c51063a7f697f3fc68030144aee0aeef0b5a52c9d4920a7185b0452159cf13e64ca216ff16637d0946a75fb5da283fcd263dd7ef2c8f14cf75537742d1f0e48846fcdbf03bc343203f7c31cf61b36374033462a7b813f4dbe9386e57874591fde606fbc150d4916c339f1950b09b1911b1b9119c3ff4053e05910ffb2":int:120:hex:"6a5c83f807401d1a9a3a2688289f61":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #0 [#2] +depends_on:0 +1:exp:0:hex:"33613dc6e029df0f3ab9ca66fa96cdeaa84c1261dd586723b1ce873545565f7a":hex:"775862b39c2a509afd3470a56891fbb79bdb7dacfdb9ac72ba4730cb936d364e1aed3c92c01a018cfcd7953f751003934c15bdfdf2826e9947ea8e521f55fd2a04c75156e4910f38932c9732eb3e60423e849d34c55e3fd00b48d83028e3b4f35686016126ff16c942ec859d3c3aa2ee6d322a92dc9fa9b0247423416f5a4b47":hex:"59484fbc27cdbd917bb55f815f9faab6":hex:"":hex:"069f80826dbee03e6a3437e7c6d16eb6022bd14827b8e45bd440d9b1a8ddae09999388ba0b1be0a6bafdb96f26dad523a3592fa610d5091f68380f4c1c3fa9ef7a0796ab183e8a82c2bf1f76300f98ce983eab7a93ddb18f1c10534fdb61ace83cae37e225930ab870a46285e733788e907255ca391945d409d2e53dd8a28390":int:112:hex:"9f31f8f8459eb03dc3654caba5c2":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #1 [#2] +depends_on:0 +1:exp:0:hex:"75d8132f70ef3f2d8946d296c83014683eb2a4a58b555c0f48e4bfa5774d6672":hex:"a5be88fd43dc761838f3a9c7d62923c38414fa61b3678313cbc8fa9c2e5effb6cad7d5be5f39a71a28ff327b68a69f7e6a6bcb90eccacaf3a8659aeb905dd3e38efe57f2bd0d19daacae238baa01a7051084da6598fc5a3783a18decefc8efc8d46c7b1887f87d6d70c909df49340bcc680832faac3dd23cab5bcd80553dd485":hex:"5ff41f3e75c25cedda1b08a41b89c4b4":hex:"":hex:"959396b86913337f2b1fb19767b787c18f00661c5d601bc65e884e15ac8043081459e889453e906ee267cb5d04fbaf250144a56c820eca34469967c73daf50796184ecf74f3c054bfa63bdd0c32425a8e10546ac342bb8e38a186e42a403cb80110aefd5f2d0bcdd353daa4430b8e7ec2134925c454745e2f708cd0b90d9d672":int:112:hex:"ca0889a0eb12995079cf9ba77019":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,112) #2 [#2] +depends_on:0 +1:exp:0:hex:"8d44344d2ff9a02b1c75785bc84f16e4d23614bf43b2b9a87798b418e905c532":hex:"e5689cef9f8258a748a615070fcbf40ed0b24c077e2f9a362cb536737ffbc5383bcafed278d4c5e0f3c83fdd5cde79483c2c178f6fef05ab50f2b8db680027a175bc6d702d249efcd6cbc425b736f1905307c9303a4bd8aca620b57e3bb4b68f2a515259b06cf5365b675edff3457e2e915d7da1e0802f7300b3d56c4644f4ad":hex:"256a983cd6d6eb4e80b5c1d1cd2a9f21":hex:"":hex:"13eeadbecc4c9991e2aa0b1ca819572ef28517528320db970739a16994f82cd8b5bb53d889f298f65c63dcc07089dbf7e9d00612d2cc8220b5630ca0262a698836d906256896eea446f6de4506e558b4f20950528c8c397b6b5b04890204b77a163e46c80c96b3e268fd2754e0380e7330782d606c771d6085b34200a80335f0":int:112:hex:"b33ab1e4029998e2566583dd550d":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #0 [#2] +depends_on:0 +1:exp:0:hex:"3999a6a394943be3d6e5732af5faf26caf483a3fd42c13b7f4f02132e93a990d":hex:"8907e8832553264d7e92afa1595842ac661ddfec3f4294567faa0af61b3d0fdf76a922a2f3affb36b3b3b97f18d5172aec0b8f6f01239bb750c0fdd5da1e1244473cdfade83797037ca46d83123e6105c5c54071971f190da0c59821b0bf87242502bd19d19c7f463145bab0e687a18ffb2216c4a2ad2caf9488801c33c78c03":hex:"76e2a5141d094b3a77765ba328f33576":hex:"":hex:"995189a396486b451db0167cf6990557287074def46eef872e6cfe1a297e256bdff2b71668ff0184eedf00ff1a3ec91358874718f0af88acf2bdb191e97332dc544d940412363840d4c03c7b2231852393c62d625093011ef314e4f755b1d0ee37690b4dfb55194a1465714cc3cbcdf93af39e666be0407508b8764f7ee95d3c":int:104:hex:"87c8f61f459fd4a09d9ee8b331":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #1 [#2] +depends_on:0 +1:exp:0:hex:"4359a62d54c43770c3a0d51da25cc32fd985d9b41c282887299d2e348aa25a36":hex:"f020c9cafba399009bd920c3ffc165d4db47a9ee15ca8c1f51c65e306ccccd3f1d694071a3c765b5255eba6ef6a280f6095f8c195ebdfbee6968b57366e62e16d05b1768825ab7fe66300941270aa121b4fc02ab970ca6e32170cdbccb46fc548620fa1777049343b1600bfb1bdecec6682f0aa7244a0852adbc7aacedfba446":hex:"5fefa85c958417b6bc8a61b5496fea93":hex:"":hex:"3b8f829aa1cc1532a434bfbbd25f42480311657215946b9216846704fd5da5e886ca9d130df466c3b58f5259102ea6b9ad756e9f484a38dd0ed289fea083ab99fefbc2747100071744f10e362351d4ffac6c7c1f5a49ef3c78e2dc667f6b3bfd0fec454c4e3139443da71e514540d7a228db193a4c35d639ec13c1198ee7f81e":int:104:hex:"591db861b9060869edb228a324":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,104) #2 [#2] +depends_on:0 +1:exp:0:hex:"0d798a357de5a686d06c329e451d7384bfbd462063fb8ea7d77a13dfa1f2aac2":hex:"d920785bd7d7b1a2c9c20139380a6ac5f27a11b614ae110da14203146c2615d81e97649e95edb0eda71a0fa1589244ed42fd9449962a92942e38001ac64b212c7e06c113129712a01556577ae02325a26eb92581c0a690a894225e83ff1e36776f22b600508d6d96a0d1c55316b518df8d09769df5e8340cbeabaa0bf7752870":hex:"50a003c0cb50ae8a3183cd640ea4c6f6":hex:"":hex:"9af6a5341cde4b7e1b88346ec481024b40ad95a51533cdd8e09e4809a20684f18eaf243e1df56f02ace9667264cc1c6af6b0914f154b332234f6468cc471ecb2078a9f81c17f4ade83d326b670795458d110e4c4b4cd7fe7f9f5f4d4fb23a038969e4ff4f74839b1edc270fc81fcdc8a0b15b9c2f0561567c471b783b4322ebf":int:104:hex:"6c2f01264f9dbf29962122daff":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #0 [#2] +depends_on:0 +1:exp:0:hex:"29b01b6d15f6e68fc2e7079429dde5363888a6410191d603941bed272daef7ed":hex:"123b6da306978f745d1dd86d7df32d9421523a7f329dd29ad98d2c309145844010295ef443a18d37ffe093080682fb96ba9c2c92105d35d77897b589e2abc7269aba8752c2a48c843bebad2c0fa281015ba85f5f709f6aee9b1d49236d5695f7f7d01554b193c89adcd1a91749138952cb3f0ec8b5f046328b3113aaa0715ef4":hex:"cb4ac8373bcbf1b14cf2a6a6a16a422a":hex:"":hex:"caf71e09395d596d5a7b091c9e87ba6d522e974451e41f33f3e7ded554f24daa9da719e87793424eca9a3eb3972983354041091ba4b16c5c8c14913e1f6cbda09779188e9b5512917a0adf4b4344f119736ba6328897726a317989cddc66f16bab64707564bb0064fe6ab7b2b5cce143e94d4b6d739f58c47b6d4850697f8101":int:96:hex:"f635ff3d8bfbfb49694e05ec":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #1 [#2] +depends_on:0 +1:exp:0:hex:"f96d8cdcc21884e050f762c049930d78360b56cef5b99ae232c9a8c6e8fa89f7":hex:"9cf05e5065531d2539d92ae76a43da1fa3614ffa4b1c73ddc2358f8d71345c01260060239edf629efc3650e0d13174af4294b6da0f39cc7fbecfa324afff89dd7d203416bd144c5e03df60a287fd4a8d54ef9b4b44b3d6de1d9de07418b8a34ec5c28cec3c5b2fb861583178a68ea0af89f2dfbfbd86f7cf1e572e1c8d4b0675":hex:"5a7eb964b6bc9e75450b721b4d1f8f92":hex:"":hex:"566abaa23b8d464d6f107699453740e9e189254145c5132fe46989a6654de297398913daacb4083b29f7b31832079616e9a43c9c2878df1df451e49f1e629c8b9de2fb0e4ae9df48e3e8880f3f1ff5ace8842d2695e702dd1b7bfa7c25b0539b8c80d31ac91856796beced082c213e8be56efd646dae932f5bf503af46f491d8":int:96:hex:"c049cce29c401d3d198773b6":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,96) #2 [#2] +depends_on:0 +1:exp:0:hex:"253234c3dc9cb3d50a80598c5cde0e37b6b13bf834f3595a9458dee698a6d19b":hex:"686ad2740bdad507ebe97aa5bdbef25b8b030c4cdcaccb0d3b675ca91279db3ea75aa222c0ae98f86c24b10038cbb4fe9f897e1145b2f58cd3e9120f9a5620f38aa1e1f63906f557ff4a4c3223f5bb13dca34f8a1c6419e24ea57d114c62fec6fb9eee58a16b9e6a6bd930aa6fedcfc591311250e7167d43cca5916d5beead27":hex:"9d156414acb63d11cb34870b937c837d":hex:"":hex:"96abd56d2f8aefe6c687f035df46c3f952a9933b8a51698e47d973b7d47c65ca3ba2474cb419c84a4c3cefb49e78cee1443a8fbbdaaecf73e9059ef34ac5a0df3fc152ecde2286da8840ad4617fd6ebc1e126314204bdc0a17b958430eb9f727498ff1db17aabbdaf43acca0945342d2ba9346da5373b2372b3081605e895c99":int:96:hex:"3d998e5be9df433da001a686":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #0 [#2] +depends_on:0 +1:exp:0:hex:"1054d48d52693d2797c80d3f10509d1c808f36a4d65e8fd968e5d56239f856bc":hex:"a708e9d2d27ed4228e5b23d358561a77d684d855db9827be2bc102f2278f1961d3f056fb76f76204b2c96b916eb5e407f98e58edfed06de2388521832d97211d851d3e29658df738e3a15593b9db016d9e46fe9df98ce972d59f7058d484886ffaec7b9fd973c55644831241c1ce85bb478e83ccefd26b9718bfe910ac311ecc":hex:"87611b936873b63abeaea990d6637a22":hex:"":hex:"94473e84659bc18eddcebe3112f55426f48ca4d670291fdedd42cc15a7415aa6795fb75b39434884eb266677e1fa7f530c6f3aaa733c0d9c06291bd7dff4c4e5857b2ee9e9f1f61a85571ad32dc9a3259017abe9eb5111e56df2913535669f3b2d722bd35fcdbd6541918885d9677cccaa902b9d3599cd4f0df1f35f4d11b8cf":int:64:hex:"9bd7cfe1023448ac":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #1 [#2] +depends_on:0 +1:exp:0:hex:"a95dc5127b9cb1c82d558d5b24ae049e24447fd676a49350089951afe01dc797":hex:"45f81fa4780a256c40a0efec9547310406904d8991bcf964aa35ec9af457e2a642c1343827839f1f4b42f2b226da351731f416a4b4151f07927c278b371404f027bb2058e1765b367f5433a43fa4153883351041db3f066ef284a3eabd584d1d0b1d594b4ce7b5bca1708fbc661d95a9ac0d77dc29547f022eedc582fc7158c3":hex:"0b177d01993ec726fff082ec88c64a31":hex:"":hex:"16c77b7f541d2dc4e8d31da23e04f18f4254aa283e8cee5b776f3d9a27584f459d0747955efff8945f807209ddaa6421846647d4198534b244498fe13a9073d372171d1b2fc38af66204f3de04000c093ebe659173b8d78dcfb8ca9003d2cd44ed168e6aaf55a06f29e83ceb32b98bafb59f109599f88b5c0f0557bd2b28f03f":int:64:hex:"19eb5f808d65989d":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,64) #2 [#2] +depends_on:0 +1:exp:0:hex:"53d6393dd7ecc40f2d52460ecdb0607133ad843ef53f380cd3a2755bfa567abe":hex:"72199c54dd5efb28c104e3b7210855506f6577d15c4eccdaa6a621a572e15f5845d648cf71b9fafef3411f6c1a664c7974fe71126a5cbab907e2caa342d8d7a05bc68a72c824896ec40e520e90b704dea441d22c5918f98803a88293384f64f92f11650c2cf4d3b062d30e14d149160742f59a473faf8fe00f4bdab9128c3281":hex:"db7e93da21f0c9840c54c56e9c6ceba3":hex:"":hex:"5e83f559fa54926b731334f815783914530bbcc472d4bbd5e65908fb1c421442cb4c57329f2e4ba3d146a6499f34d8f1ec6d43e0cf98bdba923f404b914700edb235b08b0330097ea4162fd0baa1b7177ef0b29d5a6689bc56b8f975d6b6067ade4b8baf1d47a2eeb5b2ed28ebeded381d55d280cb2fb65ce4d82b69cce0594d":int:64:hex:"4e65dde857a0f5c7":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #0 [#2] +depends_on:0 +1:exp:0:hex:"aa4a53c7764a254b06e1d8003810300b70f5729306effba9fb6210f97648a499":hex:"19f3a8c298478d6868bf3b31785eb62e844c37200672e6ef1ecc05c616d981e02c333dbc3f86dbb7ab9ba40e9e57e133e6d1d595fcc6d8e9886a84517212669d5d7ce0f1383cb58681b92dc180c06caa1a7ac1ec974dcd7f2bca7ad2ab2789c9a3a487d64c484319bffa56d854a6d40c62b02d0c7898f641f106ff50d22a12e7":hex:"c32288f97af9b6e31aa7e40d9ef8d016":hex:"":hex:"1fa6aec7a28767c8961363dc4264e6ab97014264f6fe1dda7e9db8646ce9a5463f69e91aad2fce696f9b641d75635bfb0f97ed2d7beaca944cf8bd9dbfffe77b5ae9fd032575e5333c7ce27538c609922843de87b960ebca7c2a2ef9702dd0c32f787b4d7df248fdf526d594a90bad0d6a8dffe212246c36db71e2d348326624":int:32:hex:"1699444e":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #1 [#2] +depends_on:0 +1:exp:0:hex:"f420b6ef96d9bfe46dcf18246ee230790a6fc854e730f1dd2d1ffd0e8b5c4776":hex:"658a954d6c61d0d6f0e81a3c1cc65684483fdc95f280b6d4c964358596c25ca41c389932d74a1a3a17d041e89b7110ea315fadb3128c2c469c350bf9b4723aa9c8abd9065ebbd12c317bfb7090f09633f8c1184f0c4fbe10f5486dbfb847536c886f7d144ed07272a7e62fb523a04111e5ea9e1ab415fd17e72143006db14e9e":hex:"4982f502a37eea8bcf316ced466c9fb1":hex:"":hex:"8630aa78aabe35d9360a44bb2094209b6f70d46d71e3949803cf54e33dafd54c6e49eda9e26dc5c0c1e34908f5281c8cb2a1aeee81186cf45d3eb22f486320c7ee0fb7bf3c211b232a8426e7e82f3e05881bf7d9454cddec7f28e5358cd0e9ea2e9cff938be044c1b21911d50b2ae23ab1aef377511ea657adcb560c34209f8b":int:32:hex:"3aa91b73":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,0,32) #2 [#2] +depends_on:0 +1:exp:0:hex:"50f3b822dfc70382d8695811e6b0a2896ea2bcd4d5268778cd484053c8a19288":hex:"15bfb3a562ced63c92561a78374af40c88a08ce02392419e03d7543365c5b6525951ef2dec5927474a0ef85f519e5ef795881db3eafa765ec38e6be7b565a878c13d90c02889dc50cbe87081d9225a515504c7be15bf97f5d72a4d81f218a148a46fbd42983ab002fce0a54719bfe301bb761753cb330dc25be517b87d0428d9":hex:"980810c11abd3aff43408ec9a69abcb3":hex:"":hex:"12632296f27eb2439009f6032a3f648370303dcebaac311b684de2496f399b271347b19e045c1060802f3f742b6c780d20b9d589cc082d7d0d580dfb7231171cfb612227fcdee7feae4f8defd34c89fb0d68570e782192a7bdd9a5464f35dc6a4282cf9cc3fdfac988d129eddf8e0795ccc24a113f872ada88834c974df8bc69":int:32:hex:"32c1c4c5":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #0 [#2] +depends_on:0 +1:exp:0:hex:"29072ab5bad2c1425ca8dd0ae56f27e93f8d26b320b08f77b8bd3fa9d03edc6c":hex:"3c7afc5cfc5a1e141587e93fef8427d4f21d892b983b7c9b6e9de3ee168837a1533847c8a2e2ab0706ac1474e9aa54ab57e7860bca9ebb83bd6d3ae26ca5387abdb9a60c4a9928484742a91294b13ab8f51eb4f599a30e9cb1894aca32a62a4c2793ee6793df473f43234c9eafb44d585a7d92a50aebef80c73c86ef67f5b5a4":hex:"0201edf80475d2f969a90848f639528c":hex:"4c8ff3edeaa68e47bbc8724b37822216d42e2669ca127da14b7b488fde31a49c7d357fb9aecc1991b3c6f63a4ce43959a22de70545e6aee8674d812ecaaef93ad03b5d4c99bdef6d52f21fc7fdbeb1c5629a76df59620aaefda81a8e73cebe4c646beffd7f4a98a5283cc7bc5e78b2a70f43e0cab0b7772e03a5f048ec75081a":hex:"f3755aae6813e4e4b84a089ca1496564676655ba3c94e59c5f682adbbfed21e76aed0db78390258cf5fbf15f06c6b6468414cb6493c8b9b953b4954ecaf07ecaf8586ae001710d4069da6d21810bcdcbb831f7041cdbb984b7c55878598a6658883178dcc0fa03394519b8b9c3bed0e5c073429f5dd071a9184b015cbbbc62e1":int:128:hex:"0549dd9f2a123bd6d58e5cd16c0624a1":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #1 [#2] +depends_on:0 +1:exp:0:hex:"aa9999af53720d0c1288fd3fe307a471160635287eebf41dd77c82d1f9cc9d61":hex:"6ce6f2dc202750219e15a24e1ff0678ffdde55b27cdcab6da188bd5235a3bdc677f72f106579d02c2970d4542e4e2372886e1a6d74c596ce735f51f2ee6aff4d62bd24112ec7cd1adc7c660561f163170cdf047c241c53b8a5b2e03fde48c249a319bb90c2693c468c9dd136e94e05f067cd1d68244ce50be318ae0464b79acd":hex:"6299d651a032bdf3a7e6b25ace660e30":hex:"afab0a3d1960ac973ee2f4461dacd10d189412b37e572cad7888bb4d2453f1eefbd6725aadd5f982393dfa59c3cf1ee342dd91e1fbfab10a802e3a0eda226fde2686e7db1015405a3d33c921e5aa857bfda53ca3aed3ff0e18c289406740a7c5d9f86ce43db40c9032e98ab126c7c0364e2efc008312b7641d36503d183fa5a5":hex:"a8059fe6ff711616afb591b5e5de497b3b7813f9de658c7b47cc3e7b07d0805c1ba05856d98341869b8394f3b5df2876ae19837edb3931eebeb0f26eb6c4a2ea78003d82a98111305208ccaceaf77e5d71996cca4f9a5eb712dd916b71455f741ec2dde51f56828667b7a2da015e1886fba71e496a542d94a38efbcb5353fb89":int:128:hex:"2ff4d8d00400ad63a6ae7842eefb16eb":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,128) #2 [#2] +depends_on:0 +1:exp:0:hex:"31721e5e3a748a7f7369f3dffc1cbb570ceac868ef9d1f29b944b7e86a26d273":hex:"6afc1d22233a60c3e6851447de89152a0dbadcd87e35fc947ca4bc886f1f87549ea106b097e2655136833d06dfb879a85732298860c149c5e5ff03bb2a95d9cd3deeb8ffdf951ea5f97e32c1ed75271d2ea58d158ae6d568bf197d69130977e330ebfef33f222bfd5b56bc6b0382dc99c4f0e42b0aa7a117b43f96d43f6e02dd":hex:"523247d56cc67c752b20eab7a28f85fe":hex:"11eb41aeae3611f0de77bfa1221ef5b7d254faf893dbdaead926a61605f8a86f20f1fb84e0c5acd195143bc5a4f297bf729129f898a2013175b3db7004115a6120134d8e354afe36699a6c6618d739c805b5b91739df67de7667729f1d6eae1a0609897999d474be4d8b826df901c6f39d522570d38d2d1aa828382932a177b1":hex:"39e7f32bb3e8436d97a1d86a22750768001fe3a805516d3f800352323afd221991105d12da69ce7430402fa7923958ad5ed85506b968c4dd89516d6e3d02e722db3954ce098ec3299ef4f2ed4a89f383408dceca9dabc6f8eefe5a1f80093961c29a94b222d1a04d2c1e453d2e02977f3dd77a4659e2bde2fdbba8e2829db4f1":int:128:hex:"506883db674fa0417e0832efc040227c":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #0 [#2] +depends_on:0 +1:exp:0:hex:"100bd2bf9c8b24cc2e8d57697cd131c846b55ad6ff0b214c0de14104b465b58b":hex:"81c3370da989f774c1962f60c57299747481bea0e6b91df846e6ef93cada977bc742ee33ce085ae33eb9f7393a0943b647205a7e1ffb2a6a803a1ce7a88902456d66612362962b97c7152b57f1d54de94a39f07c1a8098da4ea5e498d426b7036c642fbeebefda50b8c421a7a33b1a8499dc35011d80a51d34285824d6f01722":hex:"363e8af6f38307ec126e466e7056cc45":hex:"471f7e9a0b505b12996747ec9e32731f11911ee95d70795bbd1bba34cf782d4100ce30a85b23f9f817f30e8f314e1a23e101201c920ce12ce732cc3fe01c74a9ee8d3e1599aa22f2398c3265d4dbda626a8ff4262889009e087fbef6babe33d7300e5cfc4c0056f3562a913d2594fee8e44959cf728599a9d3e7ee4a9ecd6694":hex:"9494d01966ac887b8295bde61f0e7d006ea7b5c984a29cf5d849194f35d7b0f6ddb3bbd9646d7b9b961c515179901d2b04cb7cf7b6c8736d1d472ae8bb9a6dc9194b03b3f5373551a5ae0c0f023967669c873f0acfb02c0ae3a384e70f7a7ca05861f257f36a2ad5fbb591473dfc3ae1264dca0e889e0ddbf93dadf75db2059b":int:120:hex:"5c78d914cac78c514e275a244d0ea4":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #1 [#2] +depends_on:0 +1:exp:0:hex:"614dd1762deb5c726eadf0e6587f9f38fa63d16bca1926955404f1b9f83e241a":hex:"1ae828a1693d3c24651ab8ba59fb1185d08e6cc4a964f30dac59cd81ff4bdfce8023ab1b6dffb594a4250d25f611763efb4152cd35b937ca11373d237f1f8b3c0e21b942beb1f4ffe5014198c9ff59896ddfbb55e69963e3ef6b03d3fa134977870cd6f3ac10bbf59bdcc9f103cc2d58f294ef5f007a9f903c7bada08cb454e6":hex:"10d079a86894b0c17bfcc8ffc4ecf7bc":hex:"c4035f80b6d2ea288afd4ddaec1eb232b78be5a86583fa85f791d546102c97ace9716c2702483d762c8e4eda12f3dd10a9a49a2d72cd4694fa794477b54b4367be6b548675aee4c351e3f66c7e113aecfbcc57b8bbab4a039f28488237c75313e62612847b915ef9b582e146b2bfabbfce576a984f5ce4be0e6bff5480584fc3":hex:"bf5fb0445aab46aba504801d5356455f28c98f300670a731bdd0c901a1d5564aa31f5d467e5f80dadbfeca61d2bf72b570f3935ba04c45a2ff7994bac6cabf84db2a42cd5db2a4f160c97c76817cc5cb62d4006d895fcdb218c1464b5caaadbd1f61779938e9a84440615eae050cd6f1713cfbd695d78818b2af78157339e9d9":int:120:hex:"6d815ee12813875ce74e3aed3c7b73":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,120) #2 [#2] +depends_on:0 +1:exp:0:hex:"12e97fafff7d397ea34efc0a8528afcd51c1b2ccda680ae9049edc8359b78ec0":hex:"9fbf0141cd50bd1b3ccaf137b808b698570642ab20c32120901622b34173d7ad119abca3c61bbf1e6dd5cb182a079f3e01b0e5263d984c6186f01792125dd6c47c30033008ca2e0377f990285094f652c55a348242dfaa59f76989fcf86033c8d9c0b2a526bf46cca207e055e1dbc7cf3d0b7a840c8fb5f85784c9e4563f71de":hex:"8eb11abfe350c0d5a6b02477b44867e9":hex:"0a830029d450e20aaef484d4abee9dadeabbd6feaf800b3a693b4746db059efb7d110405b45e45a9e5acf90957c154674dfb2c1cd787af371e01bafc4e8475d0268b969d25756a1121a519afa61f3d6ecded4e0640f0ddd471f5b8e82029fd2887df4e65af9580390b6924022e39acfede7530e5f0e54f0285ba565ff49af542":hex:"067cd6ff8461ac80217ef70a91dcf6edb2fbdd31856815cf356fffa63ba3f5cb293d7f1ed32ae40248693617f27839a34e871fdde635c04d1e66743f730a06e2be25cafe1d67d804879fe38e009268ec50a0294da445c795742ff1e924170e4c2e0e9ef3bdc26c251f5537218d295d93d57baccc4dee6185c235d7ec5c9926a6":int:120:hex:"931f44f10993c836e534a59c1aeb98":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #0 [#2] +depends_on:0 +1:exp:0:hex:"c732da000262de558bd3ea65e66e20e11605170c90b67708bda43f40abed74fe":hex:"7d6c981c30ef87a46f53aecb4c97124fb94b45057635d5bf1d4f3a3bdb534e9ab62b4a425de9dc52537575ed9ff406cfbf75403d3d9cdbd9fcd520d62065f81483427fa27964642cc1a07822da0f6234a689eb30e8425d7709abfd18666c76c963eecef20503ee77c96802c120abea1428cc64a08fc20860527854fecc571a6c":hex:"523dd34ea263c31c2215053986626d02":hex:"f170556ac5d38f0661bae33e0826356c8488218903eba1bfa49b16882537ef78283fd9351f37f44a7687049a608c3ddcc82817d4ba96a40d05807a38ee3f2d5cb8b1121db61318fe22bfd3afb319e84c4e2f94570a92433db29bd2193485449c719a2c6030696f53ac729df90678eb018783b25740d806d1ef6980e10d396595":hex:"3470d4544f7bfa3ac0627a56e66c56fa062188440834b9238bd20e89dfc701fe6cfe0bf4ea2387014bd83c63ab7c912e1c0dce7c2d92eaea155f886b574bc94a8f4f275dffe2d84173a05b99d8029c36dd3c35c12709d33f55c3bcd96e9a815f77a4fe8e50639d8f195a526486f1209d7bf7e86ac3dfc4a1d2cbddb6d330e5db":int:112:hex:"5924f3ceff0207fc8ba8179a9925":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #1 [#2] +depends_on:0 +1:exp:0:hex:"2684bccf2b845314a0c4b8b5a780f91aa7ed1177539122dc8717c14bb50e2dff":hex:"1a4174d4e18ae0b6434f35dcd9c86cf158c42ce00ceb12f4356ec118d659820518c326a1b2ab92279d949f74c45219c660cb84fb6b10b14d56a501173fd3b129ac89db0de22874d92bec724e94751f91a817a42a28e8e15672172c0b0db4ead46b14d4bc21ad8f5ba1f9e7e0fcc867700681349b8102a208d76ae4ef7df5b56e":hex:"8433b59b41fe0cdc5b30e4e87c5028ec":hex:"280026eeebf05e26e84955e4a36352d4f97f3193dce0795d526d05645bf5d2eec4b92ee8dce54d78fd3fc3e36bc79d5bf9ee3b2699310a75dbc5007bdacb4dc88d06515995f8f5b1aa90cb8fc036b763a5e819db70c091802fb7f24b9c2a68ff194032fffc4ef798936aabccbb43f22a2bbd7e1ab9d0434d443dac4929b84193":hex:"cc155e04472c0872d5ccf8910d34496f380954da7653a1e1d3c460fbbc791c9b82e35176e938b7e21eb4690ed9fca74ba45a03dac4abc4f625ffdfad02e1acccf18b5a1878f911fb6f6e09ce0d4c6a0bb87226e914879a1b3085c30e8328aa6e0d1c49c21b760b82e469981b40ea102f3998c81dd9799f484ab89b19396ab7e1":int:112:hex:"5a80008e6da40c71b316b84ae284":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,112) #2 [#2] +depends_on:0 +1:exp:0:hex:"484a33ba0b97c2887a86a1476f274e236eb37a72e05f9e74348248877ea99e98":hex:"4d81cec14b398257a31ad1e3581c00d05e12b37b71260bdd95bc0b6981b614598ffbbb3ec4bb7deb5673a1020139877122f88504c9c53265706fe76623a9b488a3dfdd4cbc1b7b46c7fce9d7378e164964c0a377337a5c172e5e4de6206375164cd7beb0305d7a90f5c73e12f445326e1bc9ac5acd1bd4bcbe4662524891a2e9":hex:"c3a5cc19aef6d64b656d66fad697b829":hex:"30f276f96a50e17b452dcb5e1b4ab666dc7c4c72d0d9ab2abaf77eae2e3bab7dbe5ac005d7eac5480e1bae13646b59155528abdc148b3b71f06d017c4b12d64aa3990cc96941eaac14b60eb347e0be873de2b6fe2b86e2c2fc063b29511b70144ecd315b9491001b122701b9c8cc1d85427b6c60663ccd9d1fa84e1c2f609f36":hex:"579fd8fb50d795b5b208c2d5b0a8b1804f754a30a1003025301655aebcda2d2ff30d29a16d0fb17a28401127750fc87c9e3aa08540817228b049c387253ea2359035b8063ab4bf54504ca5ad93b54b8ac5bd0c1ef3c6769fb1ed239bb76f3e0bc51d356aa91b494d22749c8e4cdb1629e93f7c6e46ff9145916c1275669ae5ba":int:112:hex:"1c39aac1d5ffe7916a08ab2ce279":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #0 [#2] +depends_on:0 +1:exp:0:hex:"4a5f5321b515cfcde493148ee4c44c693b1979b3a3ba522a2a80e5d27c93fd1b":hex:"962b8504feb57ae73e93c2e8962c9562f409c908e51f9904df1623eaa0c6b998db6ee8919d805b6ffcc37da51300c1ae16bca21f8f6f63af989a813ae8fe28c3fb012f003dab7e71b08d757799208806062d62b4ac937712409f9fafff3e3579a4d92d4437a6f0b263e1da7e4651e0a521be5f6f49ff5a0778f07bd5d3dac696":hex:"c2cb0166046bad0cf0a107af83921d7a":hex:"e48abfb657ab33f58eeda8c58a20e7e299bc3e7481f704c326529408580f9a5130cf6f7368502d20b03ba6c3b8f6f28c076a3ef7b8e987750dc972be953e712483e6f328da57e4b5c501fa7c720593eb89ff9644fbdc45478f80ee89f096694dcb44a9b3a6aca0904d4aa4e475b4b24771df9fd6ef9557f4f5c842ac241b212f":hex:"11bd55d969603ff3d46355cb19c69557b99825a4c23eeafc8eed8422dab537c0fa9753191c49a6fd9e0d6760ed816a49e7f5704b5936a498544e2bbba7875c513c031f11527ca1b9b579960be6964fba9119dcece8205c174be07ebffada83375678de76fc012b0ee179787b4aa9fb6e2b459575260eb01f23786dc24d1d45ef":int:104:hex:"36853a029b5163ca76c72d4fec":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #1 [#2] +depends_on:0 +1:exp:0:hex:"c8f7b7e6295fc8e33740bf2807caeaf4b90817cc3ef3d9f38f704d9f6164e41d":hex:"4c26e489069b487ce9dc0e295d5e89760401185374041b0efca5bbf758e7d010ccbfe5999e2a817776aa8f49c1e5d43bcdade2989fe5be635dab54cb0e390a21b832b30f688857b9e09c346bcc5397e51cf71acbe1bfcaa1ecd7e87fe5dfde180d951922e60dd8203ff210c995eb54bb981f7e931f0b1f52dce0cf1b2eba503f":hex:"903b2eeb9d0b3794acb7439d341cfe0d":hex:"83e99497bfbe9393b065b0b18c13f99b67f1fdd724fd5d70cdccd2b8dd658499cb9f57e1a1fe39634ab0869182de085722a79eaabf057aac7b3f3230f51a2f9b48b49d592f02246dacbe915ff9d9a53f7e5332f7a9d89649050b075c07e5e74f281ca1a0dbe632c0aecf3b1911cd6ec4f8facc2777d0d14784bf5951a1c62c33":hex:"63e2941bf4a13374627be66bdd4e57119149f81f4c1a8a321d27a4a79e7d61e2dcec9d7b13fcccf12f5b059cc209f8414ae81966462a266e92b4b3c25198ee240e0bc6f6197df1e24e8d4379fcae89e6240a7f9c7bab886e79990b846e98e4bacb8b3b17422249943e9973de42da5e38e4eb52830b1facce766b3389a5312476":int:104:hex:"6e31c5db3146ae45ef5d50485e":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,104) #2 [#2] +depends_on:0 +1:exp:0:hex:"dec062efc1bd2556b87a81143d025abbaa532c586d5ebb065859a2071f8f07e4":hex:"02191bcb060e61827dbddac6c2961dbab8812cdc2ac77bf0275628e8e36bae18ad4deb77b2682ade0aef76afd4592173ba29dae4d0735963c803856eaa6f60a6c21785358e87f3c4a91e321c59e04c150297de873679194ba5ca857f7d91ffc358e73810d555ebd4dbd1fe4fbc4ffa4ff38e4b41db9af0a84fe9828708631469":hex:"19abd0361443c3ac2a46f2606eeb1a69":hex:"c3785e7c0095726fd1f3ca842057b0ea2baf9c3fe1119c2147609158a2039f26cedf8a44e046955ba7e7cad9f48cb49274fc53b109d7897e080af252e7dc64807c276bcf668d2cd505c9ce8e584609d293ebd2a4515bfbaf78c413d6e29dc90974db38b564ffe9a40d3955dba9f19b6f39bf942669cf80e4676d6c10df566ca1":hex:"91a16c7fe029e3fddacf0809dde7d041c438977b89192e6fed7605d0133f3d9e810355d186432f6529bd2c4cb9dadb4fedf5128cb45e25a3a46bf74ed93f31349f64a69dbe86592d76e437947f1c1d7270d1cffe80afe10ae8523541961eacee1838c168a2ab76703ea4674a68a96b8a298a672ffc140e98e452d501fd57f000":int:104:hex:"5b4071a4be0543aaa59b56de35":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #0 [#2] +depends_on:0 +1:exp:0:hex:"9b7b700d978e33ae9311b206347f488e2832fad5ce7e6026ad5e24fb47104fcb":hex:"37aef6e4200c6abc3d161daaf9dd6ede002ce8c63d9ed54e8ac56bdc8d36906bea663d2857d8d543166ba150827735ec78e37f92e682275e268d377b1880970df232162e55c9311882f889e7d183e5cf4972691c85f81c47e1224b9c97ee3963d75c6a032270ad6d713c999913f0b58a2d4f42b85a3b0b40541a31398cdfb4b0":hex:"d0bbc284af767af9a31b863d66cb6138":hex:"dfb87a65ab2d99d7d753042aa47448ad830e546d298d6ad52b85207bbb0cbe8cf3cdb12b3544f1fc228fdae04a241abf9e71de8ae14f2de2c261469c383c682e13582e07cddb1ed9bff1fd2aa0be7978096a914676dfbe7bec6edd927362f656ce1de86229bc511cfec4cda77a1e761e7ab8664e4df08cb820ebdb604c2cdbb0":hex:"dcd5575d94fffc647d4c081e3ce03928651419a32ada2af02de2f58d68fa98eb1fd5ef671875719a9c65b9ecc69513408a79a0a5d57cabd04f8e651f5b8fc1ff42ce58d8a212ac2bcb83c5c53c542c282553a62b4e3d7d4f049ab13172739a0f46e0a2fd9aec54eb0c84141c6b341783754372df69d39e48cc24eb3d9ddb21a9":int:96:hex:"4a7ac79db94b27469b92343a":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #1 [#2] +depends_on:0 +1:exp:0:hex:"ce15e61edd9320ceacbf3984d87c707159caa738e7e76285be00b5a95954b523":hex:"8af4a7d92441ce931815fa4e24d69f66256fec7e62f79a029b684b5db304a46b2a3d3a7ee8d6b7ae38caa7de526d5c0f28dc65a0913a383b7ee1640cbe24997ba95b9b12fa1e9ce9f9100d883c16b6286dce17e381af15113f56197c97fe6b45be00a3df05045f476829d7b303211ac97cf989a18c16e27fbf23570d9d18f04b":hex:"b1269c8495ea1469ff41d8154ae6765e":hex:"0ad26a08a5cc2ec825347d7ffd5aac795eb68aa7e22970d991c863fa6d1fa720137aa5cde4e382625a0038e6ed72da3b5003c1b2a953c2b2138e0cf870cca4afb595c0451aa793fb0a2bc43834a0aca1e760590cca765ad672ead975993f82ae6765c5afbddc6062d7c4babebf650ab097db1a1d9a2a99e8fd2e0eb8a7b916f6":hex:"ad0ab4e77257866e4a57cf44fa4049428e56a6e8b8fd47b4cd00bfce84fa8f5a43f1df2061b0a37311b4a1436bad0d61d52ced5e262ed41a7eb125d61cec2e3fbaa95e533b43f318048096ebc8466f0cd609bb5e7c3fc6e5701aace546618a170f88c0b7ed76b63759ca4e4b931a86ac379dd12ad2cba7d47a19a3ae7c242fb0":int:96:hex:"fb1e988f9c97358a17e35e6f":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,96) #2 [#2] +depends_on:0 +1:exp:0:hex:"aef24b8205d4085d978505f04724293c2819ef9f3f03a6c758078690fc4bf7c8":hex:"db26453170db2f984312e0cf961d1a7df1154f0525c31f166be5c9f516736501f9f2dd8096a69b6441888ce27aaceacb0b365a38e4e01e2e34027c023206e814f22d46fd2fa69f87509ddced4b8852a76b2532b92f069b8c922ac13b2b7f19cb7c524657a4ee6e989cf2598bef674aa31576776853fb7f9a2704d6b3ee7fbcbb":hex:"81456baa337c3dfd162d9c5f72a2e216":hex:"484a5f4772643cf74ccdced0e5d80862f9300f26ae3139968649d3d7bb761b313f2ba63798b2040d397c3d1569285fee8498fd9254851c15b98af5bd351fa72e7d574c62ede0d728e1279e8b4e4784fd63ea7851e99d1d2356bcbf868528f8d0a90fc3b884ece631648d916ec97abadca1b0dd7670e6ad42245021570582ec7c":hex:"da95c61cd2bb88fea78c059c254d2b949d4fc291c73ac178ace44c1e6a339f64931c857d3a7cb276a04993620adb6918dfd3f9083edad384a8e6c1d4799d526a1c969d8deb0e2667d6d06f559baf914b49fc463244528aa6522d19699065438d939521d7d7bb149835298f2054bcaae6d786f6dde133b640697a3d37c697579a":int:96:hex:"bc1c1cbcad2e1a66ace079a2":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #0 [#2] +depends_on:0 +1:exp:0:hex:"9685aea9aaebbd691e679779034729306d5887bee4c1f90f6ee3a397a0ff3ece":hex:"ae3b2fa1e209f72c167eb16bc15b7669b87d4ab516e428157810b87a83e90d56e267bd4996522b5b22c2a349d3765ca27ea27057dd71f7c18ddd053033bd780b6cb689f48c383e9c717b9b265cb9e32c70c4a7d8fb933e986d996b5ad914cd645b74c47ac3a0de952ee3fc73ada83d896da7ca0b2a0b10e4f701fa13cba9ec50":hex:"b1bc140531ae8c69e2ffc784e0988038":hex:"294ff858fa6efc82ca3be4d05332bbb951a71a7ddfa4b78472e1582b445312eec11793d8d6e1e858d9cb078b5fc9083ac8a3e3bd82964cb07c08450567922299f68fd47663c7a77c29f2b5347f229301433d5a75263158a0d80095859e7e45476b99b23412046bfbe4eafff9f7820ba49919d2c987cf00c286c784e7669d8fe8":hex:"6575128b576e68f7b3709e325b3d616783b42ff7f7631eb62b90cb0c8a86bd324756f43af53c33cbdaf9cf64ea94cf1b7fab5003f00c1d07f3fc8eb1931d759f9c43477ba22311a111488092c42b7786facf42b861a824cd1bcdc603a77d11253f15206a929a3e16e8737d080b8e5f0da8896226989a9964d72e491187250472":int:64:hex:"f78c4dd37c06b197":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #1 [#2] +depends_on:0 +1:exp:0:hex:"3adf0da24394a98c7beae01d28f261a9cbd887aeeecc0c29e84540264d5a6bad":hex:"8cf023d717b0f82f2b81750b53fb665c1c90f4740af4a3534b36b847df33ba5eec19eb24ead70a4b613a82572878216181d59b0c4c4df99be08d021cf182724d8ff5ec4e85884d0f69c16238fbbdbc5529ffcc4e418405e4e95139f79d3115a1ac56820cd39fc413ab72f7d447f947cb0541fc2be261f1246c0a786199013b22":hex:"ad41288817577316df2d881ac93fcdef":hex:"ad33ce922372fbe3531c0dece69f85f18eb1bbfb09a178403832308de0e54b1010db2636c4b7d9caa478138f61db5149c9fd7f3b45b7a1876729fe67622a37f0b322ef9cf6043b301a5d4c81e6f347d22bd3e40722059d3be945845c6b0629fbcfcaf885c7f393aa81f242c48c61a439574761ef6b671972cac664403250750e":hex:"9d465e9c4228323946b1261892243d8455edb9eb8633d026d4033fa3965d20730979ba6952c0f6f2c5768f03c19256b64bc759d2e7b92424bbc668308504ba34384c2bb37baaf91a3a4f0952a050a3d69853141b49e86eda3bf0c4db4ebcd1c41e7f13eca20bf574a47ec45b8c98def17c0741805bf8f37923ba2b5221428578":int:64:hex:"507618cec6d03964":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,64) #2 [#2] +depends_on:0 +1:exp:0:hex:"9ef64b4132db54668568e2ae66ab61f62a820c7002a67a7e42006280a373feba":hex:"4b96dce753273188c4cca3386a7415d5d9263757376e1f32797df47992e92e1bc0ab0833363b3acffde22602d4e47307bc8f252944414a15e1398693fd3b8bf4d8101cdcf70ce2c9de8cb7f5bb17cd83f09b1bc78ba07c34b9214e250c5940e9794199cb392309027d5ab4f32b51c533db6732024bd412f2cb0c5178d5296aa5":hex:"07a86dbe2cce040eccdad79b3d211ecc":hex:"af7a75748ee293015b600ca82ccc7718f4ecc20c3a2357ee02fb726330a0d79ca8bb97979bc0c89f4c60d7154f8bd29ba6ec5f2f4be286ea8a258cf6bd39b4f42d6db8e70c99ec3af26bb4d8003dc6fd0fdfbbc620d511d4d5f09ddf975a1663ac2979ae0978b0bc1e7bfcd660ae4ac7f1a8f6d8ee35752ed59a604f07dfda53":hex:"e3e862146b6fb48b01ababc462dd560298eea7bfe5f3248e28a908d1de08c7e91fcf63922c394e7a51b64f4382225093e78598c050e588ff4ad38f3e83dc07b77ce569c6ab8f8a9cb0056b3155aa1503cebeb64c86d6d9cdbb178ea9a01a8ba33a1c48beb92ee4cf60e7dedf986019e19089cd186c98c229b0ff42c9e1aca571":int:64:hex:"8614c216055c0660":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #0 [#2] +depends_on:0 +1:exp:0:hex:"f14ac79f35bc5a685433eea5bb7fd69fc959aabda24cbd8b7795fb2e41f90ab0":hex:"8a20da14819079960b77ed5e548d0aa0bdcffb752817c1abe4195e612cfbb58c8e5a8af69f75bad10ee8afdf0b0d5c46c4dc11c32bff16d5e7e82e77fd80e475c6a5a0be36718af232697ab22314306b8ee32484b3461da657710c06170e80a6a8844f898c2be29366c8430f2392d100ffd419603cbce406dc7315577e6e9ee2":hex:"353e1d08edce44c966430513cb7a0383":hex:"cb1dde4ff5a6867038c170192fc2d292f5bb349d5b9a903cf3d88c09ce78fb1f4a776ff7588a25abb5e5f6a44791d7296afef3f32ed31db1def37dd25be0570a204955121f9c65b79a3ea88fc452dbcb82719243c11bc27e3408adf802b6e8b4e701ee4e9dfd140cb3277bf605bd5fb757d2325f7805fc6f0d1ea5a6207fac5f":hex:"49b5e4ea0421034c074cde67dd39a0310c3f31e8138672ba2ecc0777be542f1c6529836d5206b79dac83d96aab56787a35c584b31228f007f11630328c3f40a57be37487689ee5babb576e7d14ff0f1f1ba6e4be11637352a4336327681058b99df2e44f9772de4e0e456d2e34dec5eeb335b238e862841d166e0612cc0f18f3":int:32:hex:"88aed643":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #1 [#2] +depends_on:0 +1:exp:0:hex:"b55ac909e73989e310ae37d13c54bbd5a126f419a3b01a2ad8961d89bd247f81":hex:"8a663e8b21a027c4a9545d145d42d9c67b4fcd5d0e39aa68822aedbd609e2c681f60e6315035321de739858b2b082bc05551fe9b8456c2e89c6151282c6068b915eae5762e4d6d765d667de58a315e061b3d60035ada50f59258eb6e2a1cd6b52eea7eb9d404fd96e71f19feff65b74a4b4f07061adf7c1b0e54e2ece7a2cd49":hex:"9328abab0d3f63c75ddafd8559d96b4f":hex:"cbae20aa1996abb62471aac91cd78080953fbe3b165d4c9435832ef1106e7e3424db8850f44a431c289ab4f2bbbea9e5c0c7aaf2e8de69c0ced176283662cadd280d8fda0c859551f0f90893ca57695c95803a1546826922ac78703d7ccae285b7ccd4bbab551756cccc6869dcf34b6af8d8b80c25c6fb1d2caa7f28161fb854":hex:"457e13ff4eeaaae75d14bbf1bff91706c3168b9b146aed29dbe31b12ad90c1c158833be95701229ac6e4a13997e0a2d961d4a0021c4d8920ec54a9a935e5ea73b17e8fa60559df76bd07d966dfa7d86d1a77a313228b2ae7f66b5b696726c02af2c808bf75e0b9591a220e762f57c680ca68f20b2b5413b07731bbd49de039bf":int:32:hex:"5de0434a":int:0 + +AES-GCM NIST Validation (AES-256,128,1024,1024,32) #2 [#2] +depends_on:0 +1:exp:0:hex:"1477e189fb3546efac5cc144f25e132ffd0081be76e912e25cbce7ad63f1c2c4":hex:"7bd3ea956f4b938ebe83ef9a75ddbda16717e924dd4e45202560bf5f0cffbffcdd23be3ae08ff30503d698ed08568ff6b3f6b9fdc9ea79c8e53a838cc8566a8b52ce7c21b2b067e778925a066c970a6c37b8a6cfc53145f24bf698c352078a7f0409b53196e00c619237454c190b970842bb6629c0def7f166d19565127cbce0":hex:"c109f35893aff139db8ed51c85fee237":hex:"8f7f9f71a4b2bb0aaf55fced4eb43c57415526162070919b5f8c08904942181820d5847dfd54d9ba707c5e893a888d5a38d0130f7f52c1f638b0119cf7bc5f2b68f51ff5168802e561dff2cf9c5310011c809eba002b2fa348718e8a5cb732056273cc7d01cce5f5837ab0b09b6c4c5321a7f30a3a3cd21f29da79fce3f3728b":hex:"7841e3d78746f07e5614233df7175931e3c257e09ebd7b78545fae484d835ffe3db3825d3aa1e5cc1541fe6cac90769dc5aaeded0c148b5b4f397990eb34b39ee7881804e5a66ccc8d4afe907948780c4e646cc26479e1da874394cb3537a8f303e0aa13bd3cc36f6cc40438bcd41ef8b6a1cdee425175dcd17ee62611d09b02":int:32:hex:"cb13ce59":int:0 + +AES-GCM Bad IV (AES-256,128,0,0,32) #0 +depends_on:0 +0:exp:0:exp:1:hex:"ca264e7caecad56ee31c8bf8dde9592f753a6299e76c60ac1e93cff3b3de8ce9":hex:"":hex:"":hex:"":int:32:exp:2 + +AES-GCM Selftest +depends_on:0 +5 + diff --git a/third_party/mbedtls/test/test_suite_gcm.misc.c b/third_party/mbedtls/test/test_suite_gcm.misc.c new file mode 100644 index 000000000..03289cef7 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_gcm.misc.c @@ -0,0 +1,618 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_gcm.misc.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_gcm.function + * Test suite data : suites/test_suite_gcm.misc.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_GCM_C) +#include "third_party/mbedtls/gcm.h" +void test_gcm_bad_parameters( int cipher_id, int direction, + data_t *key_str, data_t *src_str, + data_t *iv_str, data_t *add_str, + int tag_len_bits, int gcm_result ) +{ + unsigned char output[128]; + unsigned char tag_output[16]; + mbedtls_gcm_context ctx; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset( output, 0x00, sizeof( output ) ); + memset( tag_output, 0x00, sizeof( tag_output ) ); + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == 0 ); + TEST_ASSERT( mbedtls_gcm_crypt_and_tag( &ctx, direction, src_str->len, iv_str->x, iv_str->len, + add_str->x, add_str->len, src_str->x, output, tag_len, tag_output ) == gcm_result ); + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_bad_parameters_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_gcm_bad_parameters( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +void test_gcm_encrypt_and_tag( int cipher_id, data_t * key_str, + data_t * src_str, data_t * iv_str, + data_t * add_str, data_t * dst, + int tag_len_bits, data_t * tag, + int init_result ) +{ + unsigned char output[128]; + unsigned char tag_output[16]; + mbedtls_gcm_context ctx; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset(output, 0x00, 128); + memset(tag_output, 0x00, 16); + + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == init_result ); + if( init_result == 0 ) + { + TEST_ASSERT( mbedtls_gcm_crypt_and_tag( &ctx, MBEDTLS_GCM_ENCRYPT, src_str->len, iv_str->x, iv_str->len, add_str->x, add_str->len, src_str->x, output, tag_len, tag_output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, dst->x, + src_str->len, dst->len ) == 0 ); + TEST_ASSERT( mbedtls_test_hexcmp( tag_output, tag->x, + tag_len, tag->len ) == 0 ); + } + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_encrypt_and_tag_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_gcm_encrypt_and_tag( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, *( (int *) params[11] ), &data12, *( (int *) params[14] ) ); +} +void test_gcm_decrypt_and_verify( int cipher_id, data_t * key_str, + data_t * src_str, data_t * iv_str, + data_t * add_str, int tag_len_bits, + data_t * tag_str, char * result, + data_t * pt_result, int init_result ) +{ + unsigned char output[128]; + mbedtls_gcm_context ctx; + int ret; + size_t tag_len = tag_len_bits / 8; + + mbedtls_gcm_init( &ctx ); + + memset(output, 0x00, 128); + + + TEST_ASSERT( mbedtls_gcm_setkey( &ctx, cipher_id, key_str->x, key_str->len * 8 ) == init_result ); + if( init_result == 0 ) + { + ret = mbedtls_gcm_auth_decrypt( &ctx, src_str->len, iv_str->x, iv_str->len, add_str->x, add_str->len, tag_str->x, tag_len, src_str->x, output ); + + if( strcmp( "FAIL", result ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_GCM_AUTH_FAILED ); + } + else + { + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, pt_result->x, + src_str->len, + pt_result->len ) == 0 ); + } + } + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_decrypt_and_verify_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data13 = {(uint8_t *) params[13], *( (uint32_t *) params[14] )}; + + test_gcm_decrypt_and_verify( *( (int *) params[0] ), &data1, &data3, &data5, &data7, *( (int *) params[9] ), &data10, (char *) params[12], &data13, *( (int *) params[15] ) ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_gcm_invalid_param( ) +{ + mbedtls_gcm_context ctx; + unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + mbedtls_cipher_id_t valid_cipher = MBEDTLS_CIPHER_ID_AES; + int valid_mode = MBEDTLS_GCM_ENCRYPT; + int valid_len = sizeof(valid_buffer); + int valid_bitlen = 128, invalid_bitlen = 1; + + mbedtls_gcm_init( &ctx ); + + /* mbedtls_gcm_init() */ + TEST_INVALID_PARAM( mbedtls_gcm_init( NULL ) ); + + /* mbedtls_gcm_setkey */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( NULL, valid_cipher, valid_buffer, valid_bitlen ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( &ctx, valid_cipher, NULL, valid_bitlen ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_setkey( &ctx, valid_cipher, valid_buffer, invalid_bitlen ) ); + + /* mbedtls_gcm_crypt_and_tag() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( NULL, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL, + valid_len, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer, + valid_len, NULL ) ); + + /* mbedtls_gcm_auth_decrypt() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_len, + valid_buffer, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + NULL, valid_buffer) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_auth_decrypt( &ctx, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, valid_len, + valid_buffer, NULL) ); + + /* mbedtls_gcm_starts() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( NULL, valid_mode, + valid_buffer, valid_len, + valid_buffer, valid_len ) ); + + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( &ctx, valid_mode, + NULL, valid_len, + valid_buffer, valid_len ) ); + + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_starts( &ctx, valid_mode, + valid_buffer, valid_len, + NULL, valid_len ) ); + + /* mbedtls_gcm_update() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( NULL, valid_len, + valid_buffer, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( &ctx, valid_len, + NULL, valid_buffer ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_update( &ctx, valid_len, + valid_buffer, NULL ) ); + + /* mbedtls_gcm_finish() */ + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_finish( NULL, valid_buffer, valid_len ) ); + TEST_INVALID_PARAM_RET( + MBEDTLS_ERR_GCM_BAD_INPUT, + mbedtls_gcm_finish( &ctx, NULL, valid_len ) ); + +exit: + mbedtls_gcm_free( &ctx ); +} + +void test_gcm_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_gcm_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_gcm_valid_param( ) +{ + TEST_VALID_PARAM( mbedtls_gcm_free( NULL ) ); +exit: + return; +} + +void test_gcm_valid_param_wrapper( void ** params ) +{ + (void)params; + + test_gcm_valid_param( ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_gcm_selftest( ) +{ + TEST_ASSERT( mbedtls_gcm_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_gcm_selftest_wrapper( void ** params ) +{ + (void)params; + + test_gcm_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_GCM_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_GCM_C) + +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_GCM_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_bad_parameters_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_encrypt_and_tag_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_decrypt_and_verify_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_gcm_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_GCM_C) + test_gcm_valid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_GCM_C) && defined(MBEDTLS_SELF_TEST) + test_gcm_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_gcm.misc.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_gcm.misc.datax b/third_party/mbedtls/test/test_suite_gcm.misc.datax new file mode 100644 index 000000000..6059d258a --- /dev/null +++ b/third_party/mbedtls/test/test_suite_gcm.misc.datax @@ -0,0 +1,6 @@ +GCM - Invalid parameters +3 + +GCM - Valid parameters +4 + diff --git a/third_party/mbedtls/test/test_suite_hkdf.c b/third_party/mbedtls/test/test_suite_hkdf.c new file mode 100644 index 000000000..ed0450554 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_hkdf.c @@ -0,0 +1,485 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_hkdf.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_hkdf.function + * Test suite data : suites/test_suite_hkdf.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_HKDF_C) +#include "third_party/mbedtls/hkdf.h" +#include "third_party/mbedtls/md_internal.h" +void test_test_hkdf( int md_alg, data_t *ikm, data_t *salt, data_t *info, + data_t *expected_okm ) +{ + int ret; + unsigned char okm[128] = { '\0' }; + + const mbedtls_md_info_t *md = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md != NULL ); + + TEST_ASSERT( expected_okm->len <= sizeof( okm ) ); + + ret = mbedtls_hkdf( md, salt->x, salt->len, ikm->x, ikm->len, + info->x, info->len, okm, expected_okm->len ); + TEST_ASSERT( ret == 0 ); + + ASSERT_COMPARE( okm , expected_okm->len, + expected_okm->x, expected_okm->len ); +exit: + ; +} + +void test_test_hkdf_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + + test_test_hkdf( *( (int *) params[0] ), &data1, &data3, &data5, &data7 ); +} +void test_test_hkdf_extract( int md_alg, char *hex_ikm_string, + char *hex_salt_string, char *hex_prk_string ) +{ + int ret; + unsigned char *ikm = NULL; + unsigned char *salt = NULL; + unsigned char *prk = NULL; + unsigned char *output_prk = NULL; + size_t ikm_len, salt_len, prk_len, output_prk_len; + + const mbedtls_md_info_t *md = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md != NULL ); + + output_prk_len = mbedtls_md_get_size( md ); + output_prk = mbedtls_calloc( 1, output_prk_len ); + + ikm = mbedtls_test_unhexify_alloc( hex_ikm_string, &ikm_len ); + salt = mbedtls_test_unhexify_alloc( hex_salt_string, &salt_len ); + prk = mbedtls_test_unhexify_alloc( hex_prk_string, &prk_len ); + + ret = mbedtls_hkdf_extract( md, salt, salt_len, ikm, ikm_len, output_prk ); + TEST_ASSERT( ret == 0 ); + + ASSERT_COMPARE( output_prk, output_prk_len, prk, prk_len ); + +exit: + mbedtls_free(ikm); + mbedtls_free(salt); + mbedtls_free(prk); + mbedtls_free(output_prk); +} + +void test_test_hkdf_extract_wrapper( void ** params ) +{ + + test_test_hkdf_extract( *( (int *) params[0] ), (char *) params[1], (char *) params[2], (char *) params[3] ); +} +void test_test_hkdf_expand( int md_alg, char *hex_info_string, + char *hex_prk_string, char *hex_okm_string ) +{ + enum { OKM_LEN = 1024 }; + int ret; + unsigned char *info = NULL; + unsigned char *prk = NULL; + unsigned char *okm = NULL; + unsigned char *output_okm = NULL; + size_t info_len, prk_len, okm_len; + + const mbedtls_md_info_t *md = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md != NULL ); + + output_okm = mbedtls_calloc( OKM_LEN, 1 ); + + prk = mbedtls_test_unhexify_alloc( hex_prk_string, &prk_len ); + info = mbedtls_test_unhexify_alloc( hex_info_string, &info_len ); + okm = mbedtls_test_unhexify_alloc( hex_okm_string, &okm_len ); + TEST_ASSERT( prk_len == mbedtls_md_get_size( md ) ); + TEST_ASSERT( okm_len < OKM_LEN ); + + ret = mbedtls_hkdf_expand( md, prk, prk_len, info, info_len, + output_okm, OKM_LEN ); + TEST_ASSERT( ret == 0 ); + ASSERT_COMPARE( output_okm, okm_len, okm, okm_len ); + +exit: + mbedtls_free(info); + mbedtls_free(prk); + mbedtls_free(okm); + mbedtls_free(output_okm); +} + +void test_test_hkdf_expand_wrapper( void ** params ) +{ + + test_test_hkdf_expand( *( (int *) params[0] ), (char *) params[1], (char *) params[2], (char *) params[3] ); +} +void test_test_hkdf_extract_ret( int hash_len, int ret ) +{ + int output_ret; + unsigned char *salt = NULL; + unsigned char *ikm = NULL; + unsigned char *prk = NULL; + size_t salt_len, ikm_len; + struct mbedtls_md_info_t fake_md_info; + + memset( &fake_md_info, 0, sizeof( fake_md_info ) ); + fake_md_info.type = MBEDTLS_MD_NONE; + fake_md_info.size = hash_len; + + prk = mbedtls_calloc( MBEDTLS_MD_MAX_SIZE, 1 ); + salt_len = 0; + ikm_len = 0; + + output_ret = mbedtls_hkdf_extract( &fake_md_info, salt, salt_len, + ikm, ikm_len, prk ); + TEST_ASSERT( output_ret == ret ); + +exit: + mbedtls_free(prk); +} + +void test_test_hkdf_extract_ret_wrapper( void ** params ) +{ + + test_test_hkdf_extract_ret( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +void test_test_hkdf_expand_ret( int hash_len, int prk_len, int okm_len, int ret ) +{ + int output_ret; + unsigned char *info = NULL; + unsigned char *prk = NULL; + unsigned char *okm = NULL; + size_t info_len; + struct mbedtls_md_info_t fake_md_info; + + memset( &fake_md_info, 0, sizeof( fake_md_info ) ); + fake_md_info.type = MBEDTLS_MD_NONE; + fake_md_info.size = hash_len; + + info_len = 0; + + if (prk_len > 0) + prk = mbedtls_calloc( prk_len, 1 ); + + if (okm_len > 0) + okm = mbedtls_calloc( okm_len, 1 ); + + output_ret = mbedtls_hkdf_expand( &fake_md_info, prk, prk_len, + info, info_len, okm, okm_len ); + TEST_ASSERT( output_ret == ret ); + +exit: + mbedtls_free(prk); + mbedtls_free(okm); +} + +void test_test_hkdf_expand_ret_wrapper( void ** params ) +{ + + test_test_hkdf_expand_ret( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ) ); +} +#endif /* MBEDTLS_HKDF_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_HKDF_C) + + case 0: + { + *out_value = MBEDTLS_ERR_HKDF_BAD_INPUT_DATA; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_HKDF_C) + + case 0: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_HKDF_C) + test_test_hkdf_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_HKDF_C) + test_test_hkdf_extract_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_HKDF_C) + test_test_hkdf_expand_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_HKDF_C) + test_test_hkdf_extract_ret_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_HKDF_C) + test_test_hkdf_expand_ret_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_hkdf.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_hkdf.datax b/third_party/mbedtls/test/test_suite_hkdf.datax new file mode 100644 index 000000000..8e9cf79ae --- /dev/null +++ b/third_party/mbedtls/test/test_suite_hkdf.datax @@ -0,0 +1,99 @@ +HKDF extract fails with hash_len of 0 +3:int:0:exp:0 + +HKDF expand fails with NULL okm +4:int:32:int:32:int:0:exp:0 + +HKDF expand fails with hash_len of 0 +4:int:0:int:32:int:32:exp:0 + +HKDF expand fails with prk_len < hash_len +4:int:32:int:16:int:32:exp:0 + +HKDF expand fails with okm_len / hash_len > 255 +4:int:32:int:32:int:8192:exp:0 + +HKDF RFC5869 Test Vector #1 +depends_on:0 +0:int:6:hex:"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b":hex:"000102030405060708090a0b0c":hex:"f0f1f2f3f4f5f6f7f8f9":hex:"3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865" + +HKDF RFC5869 Test Vector #2 +depends_on:0 +0:int:6:hex:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f":hex:"606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf":hex:"b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":hex:"b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87" + +HKDF RFC5869 Test Vector #3 +depends_on:0 +0:int:6:hex:"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b":hex:"":hex:"":hex:"8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8" + +HKDF RFC5869 Test Vector #4 +depends_on:1 +0:int:4:hex:"0b0b0b0b0b0b0b0b0b0b0b":hex:"000102030405060708090a0b0c":hex:"f0f1f2f3f4f5f6f7f8f9":hex:"085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896" + +HKDF RFC5869 Test Vector #5 +depends_on:1 +0:int:4:hex:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f":hex:"606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf":hex:"b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":hex:"0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4" + +HKDF RFC5869 Test Vector #6 +depends_on:1 +0:int:4:hex:"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b":hex:"":hex:"":hex:"0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918" + +HKDF RFC5869 Test Vector #7 +depends_on:1 +0:int:4:hex:"0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c":hex:"":hex:"":hex:"2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48" + +HKDF RFC5869 Test Vector #1 Extract +depends_on:0 +1:int:6:char*:"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b":char*:"000102030405060708090a0b0c":char*:"077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5" + +HKDF RFC5869 Test Vector #2 Extract +depends_on:0 +1:int:6:char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f":char*:"606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf":char*:"06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244" + +HKDF RFC5869 Test Vector #3 Extract +depends_on:0 +1:int:6:char*:"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b":char*:"":char*:"19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04" + +HKDF RFC5869 Test Vector #4 Extract +depends_on:1 +1:int:4:char*:"0b0b0b0b0b0b0b0b0b0b0b":char*:"000102030405060708090a0b0c":char*:"9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243" + +HKDF RFC5869 Test Vector #5 Extract +depends_on:1 +1:int:4:char*:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f":char*:"606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf":char*:"8adae09a2a307059478d309b26c4115a224cfaf6" + +HKDF RFC5869 Test Vector #6 Extract +depends_on:1 +1:int:4:char*:"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b":char*:"":char*:"da8c8a73c7fa77288ec6f5e7c297786aa0d32d01" + +HKDF RFC5869 Test Vector #7 Extract +depends_on:1 +1:int:4:char*:"0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c":char*:"":char*:"2adccada18779e7c2077ad2eb19d3f3e731385dd" + +HKDF RFC5869 Test Vector #1 Expand +depends_on:0 +2:int:6:char*:"f0f1f2f3f4f5f6f7f8f9":char*:"077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5":char*:"3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865" + +HKDF RFC5869 Test Vector #2 Expand +depends_on:0 +2:int:6:char*:"b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244":char*:"b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87" + +HKDF RFC5869 Test Vector #3 Expand +depends_on:0 +2:int:6:char*:"":char*:"19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04":char*:"8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8" + +HKDF RFC5869 Test Vector #4 Expand +depends_on:1 +2:int:4:char*:"f0f1f2f3f4f5f6f7f8f9":char*:"9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243":char*:"085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896" + +HKDF RFC5869 Test Vector #5 Expand +depends_on:1 +2:int:4:char*:"b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff":char*:"8adae09a2a307059478d309b26c4115a224cfaf6":char*:"0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4" + +HKDF RFC5869 Test Vector #6 Expand +depends_on:1 +2:int:4:char*:"":char*:"da8c8a73c7fa77288ec6f5e7c297786aa0d32d01":char*:"0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918" + +HKDF RFC5869 Test Vector #7 Expand +depends_on:1 +2:int:4:char*:"":char*:"2adccada18779e7c2077ad2eb19d3f3e731385dd":char*:"2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48" + diff --git a/third_party/mbedtls/test/test_suite_hmac_drbg.misc.c b/third_party/mbedtls/test/test_suite_hmac_drbg.misc.c new file mode 100644 index 000000000..337df4e51 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_hmac_drbg.misc.c @@ -0,0 +1,700 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_hmac_drbg.misc.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_hmac_drbg.function + * Test suite data : suites/test_suite_hmac_drbg.misc.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_HMAC_DRBG_C) +#include "third_party/mbedtls/hmac_drbg.h" + +typedef struct +{ + unsigned char *p; + size_t len; +} entropy_ctx; + +static int mbedtls_test_entropy_func( void *data, unsigned char *buf, size_t len ) +{ + entropy_ctx *ctx = (entropy_ctx *) data; + + if( len > ctx->len ) + return( -1 ); + + memcpy( buf, ctx->p, len ); + + ctx->p += len; + ctx->len -= len; + + return( 0 ); +} +void test_hmac_drbg_entropy_usage( int md_alg ) +{ + unsigned char out[16]; + unsigned char buf[1024]; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + entropy_ctx entropy; + size_t i, reps = 10; + size_t default_entropy_len; + size_t expected_consumed_entropy = 0; + + mbedtls_hmac_drbg_init( &ctx ); + memset( buf, 0, sizeof( buf ) ); + memset( out, 0, sizeof( out ) ); + + entropy.len = sizeof( buf ); + entropy.p = buf; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + if( mbedtls_md_get_size( md_info ) <= 20 ) + default_entropy_len = 16; + else if( mbedtls_md_get_size( md_info ) <= 28 ) + default_entropy_len = 24; + else + default_entropy_len = 32; + + /* Set reseed interval before seed */ + mbedtls_hmac_drbg_set_reseed_interval( &ctx, 2 * reps ); + + /* Init must use entropy */ + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &entropy, + NULL, 0 ) == 0 ); + /* default_entropy_len of entropy, plus half as much for the nonce */ + expected_consumed_entropy += default_entropy_len * 3 / 2; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* By default, PR is off, and reseed interval was set to + * 2 * reps so the next few calls should not use entropy */ + for( i = 0; i < reps; i++ ) + { + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) - 4 ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, out, sizeof( out ) - 4, + buf, 16 ) == 0 ); + } + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* While at it, make sure we didn't write past the requested length */ + TEST_ASSERT( out[sizeof( out ) - 4] == 0 ); + TEST_ASSERT( out[sizeof( out ) - 3] == 0 ); + TEST_ASSERT( out[sizeof( out ) - 2] == 0 ); + TEST_ASSERT( out[sizeof( out ) - 1] == 0 ); + + /* There have been 2 * reps calls to random. The next call should reseed */ + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += default_entropy_len; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* Set reseed interval after seed */ + mbedtls_hmac_drbg_set_reseed_interval( &ctx, 4 * reps + 1); + + /* The new few calls should not reseed */ + for( i = 0; i < (2 * reps); i++ ) + { + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, out, sizeof( out ) , + buf, 16 ) == 0 ); + } + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* Now enable PR, so the next few calls should all reseed */ + mbedtls_hmac_drbg_set_prediction_resistance( &ctx, MBEDTLS_HMAC_DRBG_PR_ON ); + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += default_entropy_len; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* Finally, check setting entropy_len */ + mbedtls_hmac_drbg_set_entropy_len( &ctx, 42 ); + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += 42; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + mbedtls_hmac_drbg_set_entropy_len( &ctx, 13 ); + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += 13; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_entropy_usage_wrapper( void ** params ) +{ + + test_hmac_drbg_entropy_usage( *( (int *) params[0] ) ); +} +#if defined(MBEDTLS_FS_IO) +void test_hmac_drbg_seed_file( int md_alg, char * path, int ret ) +{ + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, + mbedtls_test_rnd_std_rand, NULL, + NULL, 0 ) == 0 ); + + TEST_ASSERT( mbedtls_hmac_drbg_write_seed_file( &ctx, path ) == ret ); + TEST_ASSERT( mbedtls_hmac_drbg_update_seed_file( &ctx, path ) == ret ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_seed_file_wrapper( void ** params ) +{ + + test_hmac_drbg_seed_file( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_FS_IO */ +void test_hmac_drbg_buf( int md_alg ) +{ + unsigned char out[16]; + unsigned char buf[100]; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + size_t i; + + mbedtls_hmac_drbg_init( &ctx ); + memset( buf, 0, sizeof( buf ) ); + memset( out, 0, sizeof( out ) ); + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + TEST_ASSERT( mbedtls_hmac_drbg_seed_buf( &ctx, md_info, buf, sizeof( buf ) ) == 0 ); + + /* Make sure it never tries to reseed (would segfault otherwise) */ + mbedtls_hmac_drbg_set_reseed_interval( &ctx, 3 ); + mbedtls_hmac_drbg_set_prediction_resistance( &ctx, MBEDTLS_HMAC_DRBG_PR_ON ); + + for( i = 0; i < 30; i++ ) + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_buf_wrapper( void ** params ) +{ + + test_hmac_drbg_buf( *( (int *) params[0] ) ); +} +void test_hmac_drbg_no_reseed( int md_alg, data_t * entropy, + data_t * custom, data_t * add1, + data_t * add2, data_t * output ) +{ + unsigned char data[1024]; + unsigned char my_output[512]; + entropy_ctx p_entropy; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + p_entropy.p = entropy->x; + p_entropy.len = entropy->len; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + /* Test the simplified buffer-based variant */ + memcpy( data, entropy->x, p_entropy.len ); + memcpy( data + p_entropy.len, custom->x, custom->len ); + TEST_ASSERT( mbedtls_hmac_drbg_seed_buf( &ctx, md_info, + data, p_entropy.len + custom->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + + /* Reset context for second run */ + mbedtls_hmac_drbg_free( &ctx ); + + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + + /* And now the normal entropy-based variant */ + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &p_entropy, + custom->x, custom->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_no_reseed_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + + test_hmac_drbg_no_reseed( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9 ); +} +void test_hmac_drbg_nopr( int md_alg, data_t * entropy, data_t * custom, + data_t * add1, data_t * add2, data_t * add3, + data_t * output ) +{ + unsigned char my_output[512]; + entropy_ctx p_entropy; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + p_entropy.p = entropy->x; + p_entropy.len = entropy->len; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &p_entropy, + custom->x, custom->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_reseed( &ctx, add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add3->x, add3->len ) == 0 ); + + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_nopr_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data11 = {(uint8_t *) params[11], *( (uint32_t *) params[12] )}; + + test_hmac_drbg_nopr( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, &data11 ); +} +void test_hmac_drbg_pr( int md_alg, data_t * entropy, data_t * custom, + data_t * add1, data_t * add2, data_t * output ) +{ + unsigned char my_output[512]; + entropy_ctx p_entropy; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + p_entropy.p = entropy->x; + p_entropy.len = entropy->len; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &p_entropy, + custom->x, custom->len ) == 0 ); + mbedtls_hmac_drbg_set_prediction_resistance( &ctx, MBEDTLS_HMAC_DRBG_PR_ON ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_pr_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + + test_hmac_drbg_pr( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9 ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_hmac_drbg_selftest( ) +{ + TEST_ASSERT( mbedtls_hmac_drbg_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_hmac_drbg_selftest_wrapper( void ** params ) +{ + (void)params; + + test_hmac_drbg_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_HMAC_DRBG_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_HMAC_DRBG_C) + + case 0: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 1: + { + *out_value = MBEDTLS_MD_SHA224; + } + break; + case 2: + { + *out_value = MBEDTLS_MD_SHA256; + } + break; + case 3: + { + *out_value = MBEDTLS_MD_SHA384; + } + break; + case 4: + { + *out_value = MBEDTLS_MD_SHA512; + } + break; + case 5: + { + *out_value = MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_HMAC_DRBG_C) + + case 0: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if !defined(MBEDTLS_SHA512_NO_SHA384) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_entropy_usage_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) && defined(MBEDTLS_FS_IO) + test_hmac_drbg_seed_file_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_no_reseed_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_nopr_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_pr_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) && defined(MBEDTLS_SELF_TEST) + test_hmac_drbg_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_hmac_drbg.misc.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_hmac_drbg.misc.datax b/third_party/mbedtls/test/test_suite_hmac_drbg.misc.datax new file mode 100644 index 000000000..952f5f461 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_hmac_drbg.misc.datax @@ -0,0 +1,83 @@ +HMAC_DRBG entropy usage SHA-1 +depends_on:0 +0:exp:0 + +HMAC_DRBG entropy usage SHA-224 +depends_on:1 +0:exp:1 + +HMAC_DRBG entropy usage SHA-256 +depends_on:1 +0:exp:2 + +HMAC_DRBG entropy usage SHA-384 +depends_on:2:3 +0:exp:3 + +HMAC_DRBG entropy usage SHA-512 +depends_on:2 +0:exp:4 + +HMAC_DRBG write/update seed file SHA-1 [#1] +depends_on:0 +1:exp:0:char*:"/tmp/test_suite_hmac_drbg_seed":int:0 + +HMAC_DRBG write/update seed file SHA-1 [#2] +depends_on:0 +1:exp:0:char*:"no_such_dir/file":exp:5 + +HMAC_DRBG write/update seed file SHA-224 [#1] +depends_on:1 +1:exp:1:char*:"/tmp/test_suite_hmac_drbg_seed":int:0 + +HMAC_DRBG write/update seed file SHA-224 [#2] +depends_on:1 +1:exp:1:char*:"no_such_dir/file":exp:5 + +HMAC_DRBG write/update seed file SHA-256 [#1] +depends_on:1 +1:exp:2:char*:"/tmp/test_suite_hmac_drbg_seed":int:0 + +HMAC_DRBG write/update seed file SHA-256 [#2] +depends_on:1 +1:exp:2:char*:"no_such_dir/file":exp:5 + +HMAC_DRBG write/update seed file SHA-384 [#1] +depends_on:2:3 +1:exp:3:char*:"/tmp/test_suite_hmac_drbg_seed":int:0 + +HMAC_DRBG write/update seed file SHA-384 [#2] +depends_on:2:3 +1:exp:3:char*:"no_such_dir/file":exp:5 + +HMAC_DRBG write/update seed file SHA-512 [#1] +depends_on:2 +1:exp:4:char*:"/tmp/test_suite_hmac_drbg_seed":int:0 + +HMAC_DRBG write/update seed file SHA-512 [#2] +depends_on:2 +1:exp:4:char*:"/tmp/test_suite_hmac_drbg_no_such_dir/file":exp:5 + +HMAC_DRBG from buffer SHA-1 +depends_on:0 +2:exp:0 + +HMAC_DRBG from buffer SHA-224 +depends_on:1 +2:exp:1 + +HMAC_DRBG from buffer SHA-256 +depends_on:1 +2:exp:2 + +HMAC_DRBG from buffer SHA-384 +depends_on:2:3 +2:exp:3 + +HMAC_DRBG from buffer SHA-512 +depends_on:2 +2:exp:4 + +HMAC_DRBG self test +6 + diff --git a/third_party/mbedtls/test/test_suite_hmac_drbg.no_reseed.c b/third_party/mbedtls/test/test_suite_hmac_drbg.no_reseed.c new file mode 100644 index 000000000..689e0ce3f --- /dev/null +++ b/third_party/mbedtls/test/test_suite_hmac_drbg.no_reseed.c @@ -0,0 +1,695 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_hmac_drbg.no_reseed.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_hmac_drbg.function + * Test suite data : suites/test_suite_hmac_drbg.no_reseed.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_HMAC_DRBG_C) +#include "third_party/mbedtls/hmac_drbg.h" + +typedef struct +{ + unsigned char *p; + size_t len; +} entropy_ctx; + +static int mbedtls_test_entropy_func( void *data, unsigned char *buf, size_t len ) +{ + entropy_ctx *ctx = (entropy_ctx *) data; + + if( len > ctx->len ) + return( -1 ); + + memcpy( buf, ctx->p, len ); + + ctx->p += len; + ctx->len -= len; + + return( 0 ); +} +void test_hmac_drbg_entropy_usage( int md_alg ) +{ + unsigned char out[16]; + unsigned char buf[1024]; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + entropy_ctx entropy; + size_t i, reps = 10; + size_t default_entropy_len; + size_t expected_consumed_entropy = 0; + + mbedtls_hmac_drbg_init( &ctx ); + memset( buf, 0, sizeof( buf ) ); + memset( out, 0, sizeof( out ) ); + + entropy.len = sizeof( buf ); + entropy.p = buf; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + if( mbedtls_md_get_size( md_info ) <= 20 ) + default_entropy_len = 16; + else if( mbedtls_md_get_size( md_info ) <= 28 ) + default_entropy_len = 24; + else + default_entropy_len = 32; + + /* Set reseed interval before seed */ + mbedtls_hmac_drbg_set_reseed_interval( &ctx, 2 * reps ); + + /* Init must use entropy */ + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &entropy, + NULL, 0 ) == 0 ); + /* default_entropy_len of entropy, plus half as much for the nonce */ + expected_consumed_entropy += default_entropy_len * 3 / 2; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* By default, PR is off, and reseed interval was set to + * 2 * reps so the next few calls should not use entropy */ + for( i = 0; i < reps; i++ ) + { + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) - 4 ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, out, sizeof( out ) - 4, + buf, 16 ) == 0 ); + } + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* While at it, make sure we didn't write past the requested length */ + TEST_ASSERT( out[sizeof( out ) - 4] == 0 ); + TEST_ASSERT( out[sizeof( out ) - 3] == 0 ); + TEST_ASSERT( out[sizeof( out ) - 2] == 0 ); + TEST_ASSERT( out[sizeof( out ) - 1] == 0 ); + + /* There have been 2 * reps calls to random. The next call should reseed */ + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += default_entropy_len; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* Set reseed interval after seed */ + mbedtls_hmac_drbg_set_reseed_interval( &ctx, 4 * reps + 1); + + /* The new few calls should not reseed */ + for( i = 0; i < (2 * reps); i++ ) + { + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, out, sizeof( out ) , + buf, 16 ) == 0 ); + } + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* Now enable PR, so the next few calls should all reseed */ + mbedtls_hmac_drbg_set_prediction_resistance( &ctx, MBEDTLS_HMAC_DRBG_PR_ON ); + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += default_entropy_len; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* Finally, check setting entropy_len */ + mbedtls_hmac_drbg_set_entropy_len( &ctx, 42 ); + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += 42; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + mbedtls_hmac_drbg_set_entropy_len( &ctx, 13 ); + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += 13; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_entropy_usage_wrapper( void ** params ) +{ + + test_hmac_drbg_entropy_usage( *( (int *) params[0] ) ); +} +#if defined(MBEDTLS_FS_IO) +void test_hmac_drbg_seed_file( int md_alg, char * path, int ret ) +{ + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, + mbedtls_test_rnd_std_rand, NULL, + NULL, 0 ) == 0 ); + + TEST_ASSERT( mbedtls_hmac_drbg_write_seed_file( &ctx, path ) == ret ); + TEST_ASSERT( mbedtls_hmac_drbg_update_seed_file( &ctx, path ) == ret ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_seed_file_wrapper( void ** params ) +{ + + test_hmac_drbg_seed_file( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_FS_IO */ +void test_hmac_drbg_buf( int md_alg ) +{ + unsigned char out[16]; + unsigned char buf[100]; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + size_t i; + + mbedtls_hmac_drbg_init( &ctx ); + memset( buf, 0, sizeof( buf ) ); + memset( out, 0, sizeof( out ) ); + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + TEST_ASSERT( mbedtls_hmac_drbg_seed_buf( &ctx, md_info, buf, sizeof( buf ) ) == 0 ); + + /* Make sure it never tries to reseed (would segfault otherwise) */ + mbedtls_hmac_drbg_set_reseed_interval( &ctx, 3 ); + mbedtls_hmac_drbg_set_prediction_resistance( &ctx, MBEDTLS_HMAC_DRBG_PR_ON ); + + for( i = 0; i < 30; i++ ) + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_buf_wrapper( void ** params ) +{ + + test_hmac_drbg_buf( *( (int *) params[0] ) ); +} +void test_hmac_drbg_no_reseed( int md_alg, data_t * entropy, + data_t * custom, data_t * add1, + data_t * add2, data_t * output ) +{ + unsigned char data[1024]; + unsigned char my_output[512]; + entropy_ctx p_entropy; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + p_entropy.p = entropy->x; + p_entropy.len = entropy->len; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + /* Test the simplified buffer-based variant */ + memcpy( data, entropy->x, p_entropy.len ); + memcpy( data + p_entropy.len, custom->x, custom->len ); + TEST_ASSERT( mbedtls_hmac_drbg_seed_buf( &ctx, md_info, + data, p_entropy.len + custom->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + + /* Reset context for second run */ + mbedtls_hmac_drbg_free( &ctx ); + + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + + /* And now the normal entropy-based variant */ + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &p_entropy, + custom->x, custom->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_no_reseed_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + + test_hmac_drbg_no_reseed( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9 ); +} +void test_hmac_drbg_nopr( int md_alg, data_t * entropy, data_t * custom, + data_t * add1, data_t * add2, data_t * add3, + data_t * output ) +{ + unsigned char my_output[512]; + entropy_ctx p_entropy; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + p_entropy.p = entropy->x; + p_entropy.len = entropy->len; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &p_entropy, + custom->x, custom->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_reseed( &ctx, add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add3->x, add3->len ) == 0 ); + + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_nopr_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data11 = {(uint8_t *) params[11], *( (uint32_t *) params[12] )}; + + test_hmac_drbg_nopr( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, &data11 ); +} +void test_hmac_drbg_pr( int md_alg, data_t * entropy, data_t * custom, + data_t * add1, data_t * add2, data_t * output ) +{ + unsigned char my_output[512]; + entropy_ctx p_entropy; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + p_entropy.p = entropy->x; + p_entropy.len = entropy->len; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &p_entropy, + custom->x, custom->len ) == 0 ); + mbedtls_hmac_drbg_set_prediction_resistance( &ctx, MBEDTLS_HMAC_DRBG_PR_ON ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_pr_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + + test_hmac_drbg_pr( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9 ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_hmac_drbg_selftest( ) +{ + TEST_ASSERT( mbedtls_hmac_drbg_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_hmac_drbg_selftest_wrapper( void ** params ) +{ + (void)params; + + test_hmac_drbg_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_HMAC_DRBG_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_HMAC_DRBG_C) + + case 0: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 1: + { + *out_value = MBEDTLS_MD_SHA224; + } + break; + case 2: + { + *out_value = MBEDTLS_MD_SHA256; + } + break; + case 3: + { + *out_value = MBEDTLS_MD_SHA384; + } + break; + case 4: + { + *out_value = MBEDTLS_MD_SHA512; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_HMAC_DRBG_C) + + case 0: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if !defined(MBEDTLS_SHA512_NO_SHA384) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_entropy_usage_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) && defined(MBEDTLS_FS_IO) + test_hmac_drbg_seed_file_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_no_reseed_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_nopr_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_pr_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) && defined(MBEDTLS_SELF_TEST) + test_hmac_drbg_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_hmac_drbg.no_reseed.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_hmac_drbg.no_reseed.datax b/third_party/mbedtls/test/test_suite_hmac_drbg.no_reseed.datax new file mode 100644 index 000000000..97bc657a9 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_hmac_drbg.no_reseed.datax @@ -0,0 +1,1200 @@ +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,0) #0 +depends_on:0 +3:exp:0:hex:"e91b63309e93d1d08e30e8d556906875f59747c468b0d0da":hex:"":hex:"":hex:"":hex:"b7928f9503a417110788f9d0c2585f8aee6fb73b220a626b3ab9825b7a9facc79723d7e1ba9255e40e65c249b6082a7bc5e3f129d3d8f69b04ed1183419d6c4f2a13b304d2c5743f41c8b0ee73225347" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,0) #1 +depends_on:0 +3:exp:0:hex:"d0c57f7dc0308115b1ea30e2ea2f770289cebdda617d132c":hex:"":hex:"":hex:"":hex:"b797615a78d1afe74ebedb9d8948d82cf2bb586ed80146b96d41a709f689178b772dd342d29af5449694bf8eaf33a664a24c0ad29a12529eeaba478a799917ab4666de1b6eb2c7332017d67eea6fabd8" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,0) #2 +depends_on:0 +3:exp:0:hex:"286e9d9e39e4024dea0c885fd6f7f107586b6a1a8ac3ac0e":hex:"":hex:"":hex:"":hex:"ca25aa9ef286a3cd52d101db01cdf0ce14c7add124f1b6a9a8b3a48c74989baf01f6ff704da7c5d5785b6e9c21914892102313e7a15cb2f9977a513ada0d3f242819aef2c1699b72cbd358c59435101f" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,0) #3 +depends_on:0 +3:exp:0:hex:"6b20dda65a96f564fc0253d38dbc290b813e538d040d8dd9":hex:"":hex:"":hex:"":hex:"66b6ef57a3282838dea05d122ccdfa842dda19333ded2015d381394da38c8309a6e9703ec065335b116efb97daaac9c53ceb7a218ed0db61c3ba969dc629b95f5418eadfa43c58714fb02176bc0b17ec" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,0) #4 +depends_on:0 +3:exp:0:hex:"32339fc82b655051042e3038e3161c4fb252e495ff396be2":hex:"":hex:"":hex:"":hex:"e95e4551a37e338faae4419e3a70e4c1e3d516be7e554cabb00007c591ba7cb6c3247889a9b08e46c6619f166d996e4e34bbf6cd8a354de9964de906041f73f2ade2eb82c6e82627d3257738c2821fcb" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,0) #5 +depends_on:0 +3:exp:0:hex:"deaa9d0c2ca7a05cba12eeb7db24277e1605e1d030d76ddc":hex:"":hex:"":hex:"":hex:"bab5be6001da5951c1e7873f4e2be318e879370eae8a51ed8424ed6f12b2d294b45d006b1c2cd8c1ce047fd16f2fbbc09954a8b464cc986f23e86e1d9398d20780190aa5be0505cdfc826c7a01dcab99" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,0) #6 +depends_on:0 +3:exp:0:hex:"589766be3c03b0a351a81b1203f944e2928e95f8a3bc7452":hex:"":hex:"":hex:"":hex:"5bee2482667220462ac6d3c234f7333703c5abced2ff2ad91d52193e86a61cfa43be0b4f7e831e1e563e260178f23976b2f3e132356ab54567b37580bf9d751223fad7793f0ac11fc450817536116b1f" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,0) #7 +depends_on:0 +3:exp:0:hex:"07cc4d22b010335045cca142d91494bf4d5e842af4155d17":hex:"":hex:"":hex:"":hex:"8e13a574d17dc8b44382d3b263e857f50816755917603a07ca4987fd40340042a1e6a82a227647130304d73d8704fd9ad4db3ae42daaa55b1f93948e70c451a12724fed870e02a1a8ec4eeab716c6854" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,0) #8 +depends_on:0 +3:exp:0:hex:"6425624a98ab3018eb4ef827f5a4fbbac1022d70155ef375":hex:"":hex:"":hex:"":hex:"16fd6abb10dba1659ed56d4296b65fe3f2449996bdb8eee5c94b249f04808cdd9563569a4152bd99a32592d35d6a4cc806c228284487fc1e088b178d4c8ecb6b0e3cfaacd7d39d754d8bd4e6662f44a4" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,0) #9 +depends_on:0 +3:exp:0:hex:"01d11d2b631be240de2f41d10bdce47c89fa32427410cc61":hex:"":hex:"":hex:"":hex:"4640a063e65ef0c0de97f98a39297219e2a1eceed7e6426199719911edbb3d06fbde6fbab83878e9ba9fa8e1d044f7a40f3627d7cfc49d17f101ee64f6b8c6e6154a01b4d39fb9ba6b33ca2c27f9fd52" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,0) #10 +depends_on:0 +3:exp:0:hex:"5e0a89b3aba1cf5ed94756083726de8db5d79162f73a5031":hex:"":hex:"":hex:"":hex:"cae7b2c25dce1c12e2c4f61b3e53155b9177e92bfb8faefc425d1cbb507713921378ed880986709bfbd7cda66d18dbe0732137a86d47b7e8223e345af0cd9a0219ba290040bc6ff44c1de5b16f32b933" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,0) #11 +depends_on:0 +3:exp:0:hex:"3b76d32d5982daf6e2164340941a1707441bbb99a2668ba4":hex:"":hex:"":hex:"":hex:"63640e406e16b3b82723a6cb3830657b756fe61cf2ada96f667e0f2df0c9d33c6f164ee78d4976281a84d3024ff67074acecd65391a84aafaec9d6b088bc33616543b61a4c603e5a21bd39e2a72401c8" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,0) #12 +depends_on:0 +3:exp:0:hex:"45fcafba2278bf8e6d437396f60f0e84654de44e0bd6cb8a":hex:"":hex:"":hex:"":hex:"7e2325cb2ced372b640c2496a3970cb7771fd494e40ae17239bfffd9ea2ab0ee74c2d3c369328a3b465e67bcbea86f50a32f9ff820505df5adbc032d3adb83581443877f85c60b3b701f59b1fc38c063" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,0) #13 +depends_on:0 +3:exp:0:hex:"4201db977ef90d08f017c8e38204c2995bbb47efe9fa4cad":hex:"":hex:"":hex:"":hex:"101c7318e26693bc11d64b780e9b32d4d958c7475ab99fdd6fe86554dcef54ccdc2ca9f4ec355eb25d7b3f570ff95ec7abc2e9e2fb879bb045debf6c8a98ff46668c0de21bd8d4d18fb9e11550878e32" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,0) #14 +depends_on:0 +3:exp:0:hex:"5d80883ce24feb3911fdeb8e730f95886a63c01478ecd62b":hex:"":hex:"":hex:"":hex:"9e351b853091add2047e9ea2da07d41fa4ace03db3d4a43217e802352f1c97382ed7afee5cb2cf5848a93ce0a25a28cdc8e96ccdf14875cb9f845790800d542bac81d0be53376385baa5e7cbe2c3b469" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,128) #0 +depends_on:0 +3:exp:0:hex:"32c1ca125223de8de569697f92a37c6772d4cc4f0544d409":hex:"":hex:"9e98cc8e0f8eb84d1911c1775a5703bb":hex:"593aa3a300e5c907a011dd5a3dcd77e2":hex:"942909a9d380aa5d4e3af69093a8fa513ee545b9bf9e1b81c5f30966db3e5cb52f8b1b6fe440d592e5fe4a972c36aa498035e2442f82910c5cd095c7f4b4c7e7555c4669cca481cdfbfda167b5d6f8d5" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,128) #1 +depends_on:0 +3:exp:0:hex:"172a2d24ef128dadc93e0b74f277e7c3692f86e6ca5e1117":hex:"":hex:"93b4a1fdbf9dd30996298804dd86c0f7":hex:"69d792dc9b6fe1601f31a68e4d007187":hex:"13f30b4698d6e973556c3f92dff6241bbfbde300ed58d07fd5f64efdcd0c1b62ca3de6358d505dcf972fdce20f7b891c4cab493721d80cb108fcee915835b02dea33041b38e28252c30a71fad85878e6" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,128) #2 +depends_on:0 +3:exp:0:hex:"4a17b8069ae3a74d77c9c94514ba90cd2abfac0002d2c5da":hex:"":hex:"cc39d1a2a425f00e220d721fbfd5b6e5":hex:"1ccee25f5868e863a05b72d744e64aeb":hex:"d787b355629779ff2916397d6094f44dec06337571ccb0abf5a17b6cfabe00557894e9ddab8caafef467faa4514582b5073e7d1d9fdd6fa34c565d1aca23742ed4e87133253a9664ec085bc6c76965f4" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,128) #3 +depends_on:0 +3:exp:0:hex:"d60c4860d9ba3ebb64e2095231e07792ba6b5e9e22e14043":hex:"":hex:"776273bb22f5e62a793692127bcbd785":hex:"8795e45f82160cb1096a509fd3572f92":hex:"3122c1d3a6de8b25fd180b159731f975f78601360155e43f694b289822a25948d2c20a673f181be06b59c566960339f25015d2acbf5c7d3f68a2bade779e00faa24623c1313da888dc8cee901fa05573" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,128) #4 +depends_on:0 +3:exp:0:hex:"494983c04581b811e0b2b846c54bd31824bd70fd182558f1":hex:"":hex:"935200a7edf1e2903581fedb7c04533d":hex:"49c0133cca2457fa7cbbd4c68cc5e78f":hex:"0fd2ec47fa2e31326ee9b894fdd6224818190168640d91a2a0c247b1e27ccfa343e9370d182d95b2b5bd74b4b09c44d04094364a6fd02ba70ee2c55e04d65ad9c6da65b9c0742f9fb5ca95daafa48df1" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,128) #5 +depends_on:0 +3:exp:0:hex:"77ea86ce59f2466e55ce2057e7855035c09295c02f1c51cb":hex:"":hex:"f36d65f22b5afd3f51e13ea38dcff555":hex:"6b613b56e470b5c2c30c30aab9a772e1":hex:"41cd8ef82609012d33b4e5b51a39ec17eda4317962627796f7845045920becd7caef56d4a2c3a8e849e299babe92367ef34a8910bebd498248ccc2b3f5f63920b31cfe856973e15e48b060871a9cf9a7" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,128) #6 +depends_on:0 +3:exp:0:hex:"2dffb03703023f65b757b7ee87899a14a9c8ce788fb2bddc":hex:"":hex:"da42b213071252adb755a6cb24094c17":hex:"c83fc2beb60a7ee9b374f3fb7bfc8900":hex:"8f54271e3578e60e8989e49f5b426e1a0296afbfcc7da0ffbdd5dea71ec6b339b6d866bd3756ba745e42c8cddf997cac5fed72b33ac81e5f4d6f2d15f030a41c684552fc94d48c0d97323ef7eb656857" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,128) #7 +depends_on:0 +3:exp:0:hex:"890e7323502313bc7d617805360d5968b6c68c0280cef5ed":hex:"":hex:"257f1f60cf2d36924c3e7b6e4cc35135":hex:"89235cc472c6e2e1e92c70324459a9d3":hex:"55283453e82662c8d92f54cb4a5d784e83b1b3527bc5e71a53f04508172eb5156ba2a9ba92116cdaceed17118c7637af4b574d364187a52cf0c20d768da518021c3d95cb5ce6bc108b1bef19bad66677" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,128) #8 +depends_on:0 +3:exp:0:hex:"167ce6bad165eb640eebfece7ca6690ec5c6b5f8c7fa9304":hex:"":hex:"c0e7ef13138ec4a7d52baf8592484ca0":hex:"472a47e3fc098c7cb92fb953a26e25c6":hex:"e2aa2650c84be79ec410ff9bac93e5caff8a46a8c39495856ff64c8c5399e81654ba90c8a8b26cdca2810ce68e4ab646e50a1f6fa7a829cfd72c9a61e1a0b415c031067dcd417baac9553cf7d84a7742" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,128) #9 +depends_on:0 +3:exp:0:hex:"6b8aeaf70460e83a124899d705dc0900acd811698669fcee":hex:"":hex:"94a53808df5ebaa7693934d7fda92b95":hex:"4d4e7d88f44fe556c5ccdc56f8b2f098":hex:"165aae6bcdd799fe325ddafce3b645900eabc87552c0bb47ee2eb6ad51462a8a4f4498c4bd24fcfc46de5d12351143d5a838060f617258c218035a4f29fb34a54673205b2e1b362991693d7b99972954" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,128) #10 +depends_on:0 +3:exp:0:hex:"00f30f92bd44a9b2b04a6cae67533ed85b4ae1335b98109a":hex:"":hex:"77ec4274fe5f8f22dbb4a1ed6050811e":hex:"ef041b6516825d51bf76d2f651a55576":hex:"8c664357b01425668ea5daf07a2b5b8c50dbbd71d9f48c50f275a02b6cfc4717eb7db286fa49f17d05d44230f7d82c251a6f0fe0a2add5d2cc9a92a527f63a9bd3c8ec93e9a404e0829629c5eeb997b0" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,128) #11 +depends_on:0 +3:exp:0:hex:"2eafeebb58a2fb54474280112c5668d61be2aa4df98598af":hex:"":hex:"389a36ecd687080a5d2cace8a326f03a":hex:"495965bdbbb1bb01ba61191e9dd4b038":hex:"f17db045b0af4913d79f99e018c1f726f4fe02f08477cccc0d6a068a808bfc6ccb797e6022dc3b99ea18086a56428884110c49128a51e10c15f6ecbfe0a5a1e97e72a578fefea6c66c436c91a2b6395b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,128) #12 +depends_on:0 +3:exp:0:hex:"b6497197b783d1f493a6430748b45932895ea2a9d8204f5d":hex:"":hex:"ac26665e796d1b00951c725da88d992f":hex:"5f08c7951106dfec5096d90097449cc2":hex:"170b58ac3342a968c96aa29f1ce820debe7934d9db46216c03ae3afd304188cd38b6208e1cad5fce5c26179a30a8771015a99d2902d51899ab0c42e0b400d18f1e89411248db96f9d62b466f828de150" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,128) #13 +depends_on:0 +3:exp:0:hex:"4ffafd1f20dd38699bfca029c0558483fbeed3cb29aa0eb8":hex:"":hex:"96abfcee883d8dcad967c071c12dde19":hex:"9fd7cc292cd55d8364862f5fd675c08b":hex:"5e8612c6ce8f5b6838a1e4fb9e14370fb2d66bc885f6fe8a3ff232f16340c2af58eb2734494e0ce920f36046b7a807f4b55caf3a45bdcaefa4bb23f352601c0769749f0257428918b931606c7b395135" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,0,128) #14 +depends_on:0 +3:exp:0:hex:"89a6f070afad5ccf4d117c4e44baa2c7b28941fa7e828c04":hex:"":hex:"7206a271499fb2ef9087fb8843b1ed64":hex:"f14b17febd813294b3c4b22b7bae71b0":hex:"49c35814f44b54bf13f0db52bd8a7651d060ddae0b6dde8edbeb003dbc30a7ffea1ea5b08ebe1d50b52410b972bec51fd174190671eecae201568b73deb0454194ef5c7b57b13320a0ac4dd60c04ae3b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,0) #0 +depends_on:0 +3:exp:0:hex:"49058e6773ed2b7ab309c0949fdf9c9ea457cb8ec0e7fd01":hex:"dc477641d89c7fc4a30f1430197dd159":hex:"":hex:"":hex:"4e891f4e281100453b70788929ec743a3c5edd9b81dc798bc93771368c39b612037b6f42f60c5d8924b646848151b0c295be491d4a28d1927deed523fd04d3d2dda95ed42166312e5c3392d22893b0dc" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,0) #1 +depends_on:0 +3:exp:0:hex:"4ccc7d83009a28db14e839176774d45d9345358f336a1622":hex:"e6db32976d9262b1d3dc487f22e1f5b3":hex:"":hex:"":hex:"5a171e9f0065ece37ba53df81ac3d88054d53d0cb695a901e1a1ca91352420b508c461ac91095ccea81621b800ddcff905020f96dad2a50377d3945047420c3b902e8e361f4525c1d4bfa8af164925d2" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,0) #2 +depends_on:0 +3:exp:0:hex:"fc7d0c3ef1c404ada968dae35581b6cd31e0a46c39ce49dc":hex:"14158a65fc9b3bc1ac04c7854493852d":hex:"":hex:"":hex:"918494f47dadda22667dc1d066f44f3ccbb61d3f84b2eeab7d26f4e999aab94e79d282287ab76d4e3eeeef2ef79c2ad571382abdea55d5d8642f604f8f27f3f73a5bc1413dc87bfdf91da1c6045ec223" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,0) #3 +depends_on:0 +3:exp:0:hex:"1f0df7933dc99eaf7b284b02ee773ec46461fd762c595408":hex:"abd1d8af4ae46d7e5f1f4e0b71b54edc":hex:"":hex:"":hex:"f1eba7596c6c20118f86017ff86514d745ce7ea02c49719094e5c2a96d3dfa1dd5079b8eff8078ba9793900dba145a260e672837422c351c3f231c201dfaa21e48d3f7ee28bcd08dac680e80bf87ec20" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,0) #4 +depends_on:0 +3:exp:0:hex:"09988a36abad74c3cf377db9c9200baf6c27be4e21932166":hex:"17b7a40f4c37894bc948456e37ad482a":hex:"":hex:"":hex:"091e5fb9c6c218f2460c514fa215061460ca90cfb35c1a9f5ea125fc49aa0b2beb42dcb0fed865f8510c3141cd51d1b33216e2e72cebcabd3e1bc0eab201d8e72a0d1de1c2b7915a0cf242708092f211" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,0) #5 +depends_on:0 +3:exp:0:hex:"ce1934b6561ebaaa851accf8ceae5b0dc587922ff68836aa":hex:"602e9086f44d03ce61039c2e81fed620":hex:"":hex:"":hex:"441da7552b2d45533fc924ea985fd4b0b95942fc7997a37128d3e96d4c2792b241dbe921d61f3898852d4f93740cc3649cb5279a7f0f09be3990e9ee599fb0717c308e7a939a441b5c3ba0cb8aa19647" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,0) #6 +depends_on:0 +3:exp:0:hex:"58f1a9eb935fd08a4c3c894a06ad00ca0576589700a4d50c":hex:"b14f2a74cbe3881069f30507919c6870":hex:"":hex:"":hex:"ae9c6b40d951aab9c2d9cb920a05f3e154898c83e392dfbd7ffcbe2283eb2b75842fa5e7bd9626ad12e814874f1966fea1eb817793d2eb0a9cb9270cc9aa4267118fba0c7b6fcf487a97ebcbadc67496" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,0) #7 +depends_on:0 +3:exp:0:hex:"0abf2f845295bb1dd283daa24e75fa08c9e9202793c479b3":hex:"f8742f44932bae2d65a032ada2b76382":hex:"":hex:"":hex:"8847696e8edd2c7b751b780a6fc69d8434a3144593936943217465362b3c3f7b25b75149f7c69d10ecd169f00ed98b53e0e498af6d9f600441ee2c01a9e74ed845d24cdab4543dff7d1f7800a278671d" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,0) #8 +depends_on:0 +3:exp:0:hex:"0f9bc6935e7baf17d560931ec3e75d9fda7b19214e0ffb9c":hex:"c13bb26e9349a56866f821c10a2ae28c":hex:"":hex:"":hex:"12a849651f310fbae04c4da4680a21a50a9889806194be470b8b111a32ea741794cbe725d98ae9d40c0d60c04c8b7b32917f9dc18c27dfb8c64579a176a2c4b23cc32e5237fa5f904ab1249aafa7cd88" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,0) #9 +depends_on:0 +3:exp:0:hex:"79d96ff5ec92af9fee0af7effdc15ce56b9cbdfbbbe5b49a":hex:"23d1288ae41e65e56e7b783f85ae8b47":hex:"":hex:"":hex:"206c2564950995ac6ca6d2ad51e9cacd7540f254a335d6d7eed7ef17956949cb5d7d3f4e197e82aa4442d08d1d0f933e641f703be1be4a9ca5747e524687a7a034761493dcf2e1101789f135de5d3f49" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,0) #10 +depends_on:0 +3:exp:0:hex:"94e852ffbff4f20078181221b5fbb8048f3e95de313a52c1":hex:"1841dcabae24c156a17a1d0eda6f8bb2":hex:"":hex:"":hex:"15319b06c05d47deeaeab540e649cc6e2989843de07dcaa966d799a36902f72943585e2773912040185ac1efa060c6edecef800e3116c66ccfeeec9fe7ee70f3dae2ac1c0210310ea164f4c4402d2f77" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,0) #11 +depends_on:0 +3:exp:0:hex:"473c743205bb375fad15f537dfeb402d879754b2b4987cbd":hex:"4f88f4db50a6806d6899f71981beec49":hex:"":hex:"":hex:"46b0694bc8afc6d86dcb8b80cf8815104007ebedb06050ae625b890060c4dad3d9e2661042d26a3cfded0383829ddcf616ec84d3f32d307480caf0f87ba9b00e88812f5cb2a4e94e354092d0c50b9bc7" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,0) #12 +depends_on:0 +3:exp:0:hex:"20208c9ac4830512786fce7ebde344a82cee0d7d7a5607d6":hex:"2602c5f52c7ee2620486ce56366cc8eb":hex:"":hex:"":hex:"b0bd2c0739ed1608848dd0e9c1db9f547c64268754af09716da40b2682fbc45f56de954cbce0d8a3f53eb2c3afac9e3afeab4038fe042c897786fd3da70f2d6b62b12981630bf30d76dd879e2926ab40" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,0) #13 +depends_on:0 +3:exp:0:hex:"3011c31a44ccfd1260ae9e431da41e883b1a6ac9060f2fa4":hex:"6b36a1fcb2a2173fc7e0c120c2627a6f":hex:"":hex:"":hex:"a781d9970c7272e98d941438d311cf7e80d2d56b29eb0b4b1c76d00908401ec5b4bb1c5f159dbf42ab30100933b1628faa92d2e25bd37ead4c3354c823013cd9e331bdf5e2c5c7d11d5bd9f50fd110fc" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,0) #14 +depends_on:0 +3:exp:0:hex:"ee6d57635e5ab4b3d73a2652c1443b32296bfe331b6578e6":hex:"4fccbf2d3c73a8e1e92273a33e648eaa":hex:"":hex:"":hex:"90dc6e1532022a9fe2161604fc79536b4afd9af06ab8adbb77f7490b355d0db3368d102d723a0d0f70d10475f9e99771fb774f7ad0ba7b5fe22a50bfda89e0215a014dc1f1605939590aa783360eb52e" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,128) #0 +depends_on:0 +3:exp:0:hex:"c27f80b1d085dd15cb163f0336d077457ecb3f32a90242f7":hex:"4deb622a31b4c530348b5f08008fb7ee":hex:"5a84f94804e2d04ead773d2a324b34d6":hex:"226d9f4d720f580c2be44d4eaf2ec8db":hex:"6db76a0a003a64dec6801dd3271fae8a43aa8ce2e0d205e3830e267072abe28d2a6f707494d15638559fa4282843760daa90eec5d2865ea11e836e60345160d5112445ab1754b578b55471a1d9caf275" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,128) #1 +depends_on:0 +3:exp:0:hex:"517dadbd6e20fd83aeaced197732b1d5ce221a60f8210685":hex:"bd9911bc192da45c00c47d5ee079473d":hex:"33254154ffeb4983d27ac08980ec4943":hex:"349db52f09422883536d11ac4aaaf7ba":hex:"dd7be811d3a9fdd194e8f8f18b35e1d9f1788844c371d811cb898ebc561d000cc285afc8f486dabe37d6c85e614d3d196c544ca560ac6e0337b0700e1ded8fb28903e66329afdd589308d56c50d73803" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,128) #2 +depends_on:0 +3:exp:0:hex:"c763149ba95e7d054da52e4d3d06287253bc2f43ae7c9da0":hex:"305d6aa3c6148a0eb2e91b9385de5903":hex:"a36918edaf5add6f0f81d3f991ee30a1":hex:"5c65b09e744317db86d78aaefa66af44":hex:"5560d27fc55b885a29a449a1f8835966549c4956ebb0393ba9fe748e74a5a303f1478bb3e507a9daa1159dd8dd6d171bff2e3830581d7f6fdbccd91a8748d20c1d981cf909c31db6eedf5587722ac257" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,128) #3 +depends_on:0 +3:exp:0:hex:"b479a14d125fe4601053989439f85200e198df756aff7543":hex:"8f590670f88d8c2c713d63643f93ba55":hex:"cda7c7ee77e667b96ef0ba330c9ca6ac":hex:"a60fd147f6cdfb408d160e388c20d8d8":hex:"5f088bcebd816551c4b22c3024aeab2f75c906dc8fd0ab0c80055e0445c1dc151a06df81bd39b8535261a7a5dcedc7f9b17c062ee6f120f2099f2ab5aa93f27a08d7b5cf1027e26adf54a520916c2cb4" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,128) #4 +depends_on:0 +3:exp:0:hex:"bd46fc253e9334d4aa8bdff5e21c12e261515159b01a4516":hex:"1735486e5ea8be74fa158b2fea8e5cad":hex:"c3517d58cdbd0262655174cc1d1eb324":hex:"404f7b8eb461d077368e2ff06ddb4189":hex:"7f1cf172b67ec7c566c9e24c071b79b5a4a135a369ded5e78b8cd2467749e30c401bf176d88cc0e05a587bb2b8ed09206bb314df59009e88a01ef007e61eba2e40093aa003dada48314869c0f3b99d50" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,128) #5 +depends_on:0 +3:exp:0:hex:"600a31b8f55c85ce27ece4705e6fe8cd17a01e7827ec2383":hex:"6deef06a079ad2062e77dba21fef6441":hex:"ca5512ab329ee941b22f327fe0dad499":hex:"c1ffc97289d8d363729daa1628a2c735":hex:"a81cf5563940ffbbee9dbdcaf7db1e7e53b427fd3a0e795c35a1b8eb6f6316e43b804690a44897e0f42fbdfa8c9f1777024d2a530eda994ed038de60b90602545cef99b69f371f79619babda9360c665" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,128) #6 +depends_on:0 +3:exp:0:hex:"f38b0cd16e9434da916b63e8b7ce1a91883ec208c3baf76d":hex:"534799e3fe51bc370af6568072e2e579":hex:"9520ad24a61d29716342d2b7bd35dd45":hex:"c4e92d6da37a9f6236a396f352c53c86":hex:"5dc0b3bebde5bac6d4d24ec08f1510dc88e1e06c97c3031dc9519f3392e83a09e1a7db99b2148d992a928bb5c1f68265086f7a84e697a7a0aeda4b41590606ed139063def46fa2a625657b17f18845cb" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,128) #7 +depends_on:0 +3:exp:0:hex:"06a5e76d0ee90ed0206a07a914dc20796a8a2fb2c0ebbf14":hex:"2a49312af91926a37b5f7c009e8047ef":hex:"0cda72090ebb007ab27156957e64e7bf":hex:"24695b221f42a5be6d4399c6444c4aa3":hex:"2b0aeca45ed44ca34a2fc741c5e4e2091e115a4148e71bd8fa90588e32253ffcf360df213b48a19f6f45186b67dcef6327729ac8f3c08d658de89e71539783fb66ae834455407e7827114317299835bb" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,128) #8 +depends_on:0 +3:exp:0:hex:"6c12df5d2ba1f6a6e1e733baae42daafeb47cc188d1b0be0":hex:"f510139561b292a7a1a0292b7de4b162":hex:"f57a0c1dc69eae7473394ad1b950dc61":hex:"9dded4779fab0c8843fa693146837689":hex:"2be15d2ea87099a8c0430ba8e9451208a898379da075169568196f656eadbab59637c1f949b4506a851ae0394e135542137bd0daf1c188decfce92f6ef2396aa5bb125cf3187230ac81c3864632d9234" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,128) #9 +depends_on:0 +3:exp:0:hex:"0e6a7843e29e5f16d2bbb4021d6389ae692298b9f62ad22d":hex:"f0434f112699d116cfa7eddad486c544":hex:"146eb042377cdf6a0831558ac17ad971":hex:"b29c26d483fde8489263accafc10d698":hex:"ecf0812aebee7a452339071d9906709fe00fccbb0d94cc101b507646f554ebf3602459a4f20b82325b0e083ca189f59d68c5753dbe942643f07c7afcde99f9d0cc2883923cb80456fcedc535bfa7d647" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,128) #10 +depends_on:0 +3:exp:0:hex:"b6bc57d663b671868265fdb756e142fe6da9c07dd0821c6e":hex:"f43c5223bfe726a3164afdcabe931eb7":hex:"ddf419d8e074a4ff2daf06a1adad4bed":hex:"e0862e71c4ac52194cd320d196e446a2":hex:"4f9b9e9aab493571160c732881dc358f73a08450a152124775e559889a9298d034ce1882dd2116f4863f1524393e1a3f1aceadcd9c4163dab7c543cd375c3f4b61ed72475d1812017ac83bf22846d14c" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,128) #11 +depends_on:0 +3:exp:0:hex:"f5649fc184f33c63cf8484011fa27578c1651fcd1a0780c6":hex:"153f7b2c9bc9494a20ed0bf16b97ffdc":hex:"6106fd4fe0e1d894837ba8624cebbe2f":hex:"fdc2988e6b358929645d27594fa98df8":hex:"49130a750b4758e7e8dec8d82bf66ae771d51181c33cbba9d84093ee4f83f6e3aadd3f40fbcc441fcf90ed83b83c9d9671b9092907a36231ec3e2c56775c5699fce16abad104b291dd13f67ad4e1ff4d" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,128) #12 +depends_on:0 +3:exp:0:hex:"fc3dfb2f29b649391437aff6920760671e470ebf09e8fd68":hex:"4e7d48fe49ecefebed749979b965d8f6":hex:"ae7405de4957947dc09fb1be2227c763":hex:"3fa22158d9bb1948c64102f3ac00bfed":hex:"ffb49be8c714b502595da9248248fb009eace24ff77d298dfe8b05efe6441352213bd236bdf4b3de34fee35b051747f4e549f69bbad8c729f3b5cf2db29a0ab6aeb590857e0f48babff3a9ea3e4079b6" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,128) #13 +depends_on:0 +3:exp:0:hex:"32018afb07a6141e9a6badda9b647f650090ba3475d0149b":hex:"fa92f66bb7a06a1652d4084c15d2f778":hex:"13c32c456c799cf0808e00c6de7efce0":hex:"693728213798dde84176dabfb50434d5":hex:"12c9d6683e6ebb5136253db60b39b3203f52607e44d13ae80709cdf2fa61ff5befb0838f544e39e135830b573ac5a31b7535c0a2502370400906658e6b1e9a0f5755f360d9bff68fa55ad628b49a8937" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-1,128+64,128,128) #14 +depends_on:0 +3:exp:0:hex:"3e325daab3301856044f416f250b6161e447e63d85ca084f":hex:"a9d2a53dbd7ef4b9150dd0ed4d002e56":hex:"4de6c923346d7adc16bbe89b9a184a79":hex:"9e9e3412635aec6fcfb9d00da0c49fb3":hex:"48ac8646b334e7434e5f73d60a8f6741e472baabe525257b78151c20872f331c169abe25faf800991f3d0a45c65e71261be0c8e14a1a8a6df9c6a80834a4f2237e23abd750f845ccbb4a46250ab1bb63" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,0) #0 +depends_on:1 +3:exp:1:hex:"a76e77a969ab92645181f0157802523746c34bf321867641051ed6ba39368033adc93d4e":hex:"":hex:"":hex:"":hex:"8925987db5566e60520f09bdddab488292bed92cd385e5b6fc223e1919640b4e34e34575033e56c0a8f608be21d3d221c67d39abec98d81312f3a2653d55ffbf44c337c82bed314c211be23ec394399ba351c4687dce649e7c2a1ba7b0b5dab125671b1bcf9008da65cad612d95ddc92" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,0) #1 +depends_on:1 +3:exp:1:hex:"65cdaa5ab147d0c79fdd02b24fc94d0e427f59ef9a31f447458c6befe0c2cde5a58c6b7d":hex:"":hex:"":hex:"":hex:"0d164682b5bb552a53a2a942373639d98576450ca632faebc15060691a4219467c5aa106034cd19a214a0a4f31d402e68c4c565f49b33b680d522ef25f541e8202be779730376fdcf5b7b58fd6ac959204a88f91008651d2c02ada82505f914d4d9b9aea7967784e5320e185e1248270" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,0) #2 +depends_on:1 +3:exp:1:hex:"650996f1477112af7604386be5ace78232904315d99d87d72a06709d331a6f930b447cf5":hex:"":hex:"":hex:"":hex:"d3341d7767cfd95640a107b3abaed7b4e1855b348e3ae5bcc53a0b0d49d4b4976837ec8f376f38327135578eca7ee583215bd5c79ebf499816f79afcc402ff1e9ffc4ad0f896761c9cff75050bf84baa194c355763b16b5d2648d480a2b48f22662685de39c7cee90aa0b6edf8062e42" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,0) #3 +depends_on:1 +3:exp:1:hex:"898640ce467201a53e7731bdfb572977f7eb3e49050bc1e367ca74bf0a27376d339d09f4":hex:"":hex:"":hex:"":hex:"4f5eea927023b4abab5d4d9944e84ca001ee081cbc21d4080e1534ee6d1d8a6f60361029ffa983bcc79b5d65d4aaaaaf98983de13ddde39a739f9d95878fb31f57f96184e5f2f3adf654a468c616237fcbc6b2c194e247178cb90294f631c449a01f1fe09c02587c460305be9fc71b5a" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,0) #4 +depends_on:1 +3:exp:1:hex:"fe405dd73956bf6ec875515eebd8c5ecd60553643da750914c83dfc93611d57390af7324":hex:"":hex:"":hex:"":hex:"d8ae0eb81913a190c439f8ffa56c06155a73f84b20608b2b2e9eab3061202cebad18ab8b3eba81672152c1c02ef573cd6e8623c392facb6a857425c6795cd7999c1e7f56f3fa9accca018076e0bfc106d075df98f5fb66f28933215e9276777dfc479e71a8d506a66197918d9b0f7a8f" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,0) #5 +depends_on:1 +3:exp:1:hex:"b06892f6f455afddc8eb60aae35b35a64f63b2aa85a2dae4ef489266f7bc354f72d68b71":hex:"":hex:"":hex:"":hex:"fc10c03fc37d3bd5fba6591a97f6354a9ed8ba2b6806744432851f43a3ce6418e39ccb417b8539e349acea588e2abe5da06147c9825c6e50a31f8589a57ca3bfb10f0da9c8e89fe2e372b5af1cf96e0fbeec5d99228770c41a76e587da7d8764d5f235f5d1d6188d84ae61c52c2164fb" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,0) #6 +depends_on:1 +3:exp:1:hex:"9174e174e9e031f62b2e19ae5c0bef22eed7d5598e6e73504759a2c15b05c2473a721d26":hex:"":hex:"":hex:"":hex:"1962f2d473b31a2576dbd78022f4eeb974641fa2e9cb582f03ab741929f51f0f4663129e68ddc242e1c2ceafacec3dccb97e09527aff46b948f0abcea1451699dc3ae4d3fb5e04c84337e17b504af2fb5f1aa6ec0033ddf138a188ee162c497526563a67da8015275d89f0e1e902b2ef" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,0) #7 +depends_on:1 +3:exp:1:hex:"eb1d45ba0d8951b7b1d7ce922b7d1f6e94da8b821940126c9da5b0b4382425930743a051":hex:"":hex:"":hex:"":hex:"306b1f733e6f69b6f26b7baa5441af4967a5cad8faad18029440aa989aef6024dbf3ba02dfc2c694dad6496ff760d72ae6914a4dcd5e3a443f4bcb14bf2b64986f35c32449f15e3084d46fadfa2ae213da6b26f787cef89b6a23084a929608a9f6acd8315808c29f8ae435a40202a012" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,0) #8 +depends_on:1 +3:exp:1:hex:"78cdc1567caf2ff529ef8e3475c0fbb09a48b687a544f7399f503948621f29686fb15216":hex:"":hex:"":hex:"":hex:"2367067d8ec189b0819eda34602768a0698b4b545c7d5214fad58c9787b89809b97f3af5f9349907d2954f8c0dccbdbe63cc019bde3a6fae10497ae57f33e91ed55b6fc4a83fe8a2463552796d5120da8066f7285a8388958817b1218e006d7fc617f453ad0f9217966a0731ba99f093" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,0) #9 +depends_on:1 +3:exp:1:hex:"25f9ee24ee25ad3d29a974f8f552b178cb292b847a6be80694213a6c0b33e25e29fd3ecc":hex:"":hex:"":hex:"":hex:"32fe251a619d164c217365b12a313a942b6a9c3df007751a5fa9f356412d1142c785c292e3dc9d0b1d77e080892e5d39b91c58fd142458c71182061920a0721db453a32fe7ffc8b2c20bf11894fa37d8f0e9463edd43a97f65362295119be03d5e06f617fdff6accaab8c4da72ac8f81" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,0) #10 +depends_on:1 +3:exp:1:hex:"0b644221788c266aae00a3b63a87f32ca96a6c32b116cd37caa4f75ff5d7e56be3b4e20f":hex:"":hex:"":hex:"":hex:"dc9245da77502cadd1a8ac4d1cf6a199c8e529deda10c87ab6c69ceea6fdef36d45f4d036021b93fe5b342c52fe1e71d81e617bebc58804af3109bab93dbb2e5c546e108bd0891710128b5e8e4a4f01df2003d038fec8cef426fad7f72dd5e091b4850e9bf4932d60deacb6e9ea3c5e6" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,0) #11 +depends_on:1 +3:exp:1:hex:"a6677badff70966a3cd2febaad7de7aa5849ba763789b20d0a39b6c569261b826cdb15e8":hex:"":hex:"":hex:"":hex:"e04838c970f5d7208a2a7310da893d65391666a5dc62d9ede71fc30816cfc3e8064ac59cc9aaf30283356078c812676ca20beb044a6d78db6c5ef9718a88559607f225002452c01459944433013cfffea84d6fe404fbbbc2d66bb50a2fa01d8a5d6e4ea9b402dc5256752461bf6fcb7f" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,0) #12 +depends_on:1 +3:exp:1:hex:"2301d8c053312db04882f4284cf8b47966c1c9b8c49de847d0c11f14c5f70ce19346562b":hex:"":hex:"":hex:"":hex:"b46246526b28f3ad7f6d8732ca3bfc40f005d97a519640a4ce728486d8bf830d661be5a97b11113e89096d9bf15cbef73ec28ac13e3fbeadc9bca500918bbe92ea23e131cc622dbffe2272db16ec5d4ca30e9bd986d1709ae22d10180514bcd11bd6218ea1fbaba101444945a17a4c4b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,0) #13 +depends_on:1 +3:exp:1:hex:"78644ea1b0c4c55c4addeb476fc34471ea2c4393697aa4f170726010c443b8e1c4a6b3ea":hex:"":hex:"":hex:"":hex:"ef1b41bd03ee8460d55759db65a4c97758f48e3a09127be04c7ed08bbee5fa5cf119929df42c187e2a347a8df99c502b693a7ae41946f4918d84686880ae29d6d8fbbc4fccc9e295876a249cfa59effd331994e84717b4c76637df36beb960761880daab3d43376341439af2ce8e33cc" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,0) #14 +depends_on:1 +3:exp:1:hex:"71acb71235e88e3aa6d8bbf27ccef8ef28043ebe8663f7bcf49cb642b3d915cf03b90e65":hex:"":hex:"":hex:"":hex:"144aeb56a11cb648b5ec7d40c2816e368426690db55b559f5633f856b79efe5f784944144756825b8fd7bf98beb758efe2ac1f650d54fc436a4bcd7dfaf3a66c192a7629eea8a357eef24b117a6e7d578797980eaefcf9a961452c4c1315119ca960ad08764fe76e2462ae1a191baeca" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,0) #0 +depends_on:1 +3:exp:1:hex:"c5c89c26ac4ca8b1106ba90a8ef4d6d687dfd88743caa5fbafa4745d9c1f8371120b10c8":hex:"":hex:"d3483ae5f9ed97efd3f852e4a6f20f25c947a03f39a4b75c":hex:"2cd523c5958cdf403caa61abe5c4739cdb9d40152f0e769a":hex:"1fef4e6abc2778d1c3e3ce00fdb5eae1ebebdd5cff0a7087644c8565d1e8b876b2c05264ca81498468851fc7b9e5a2163a06f377d2ed754c095adc59dc015a77edd69e4eecbe48d9dc127eedfff5cc73ae38127ae3a518fe7fa5abd1a9c53eeaf144420873341e2efa3d81493c69b04e" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,0) #1 +depends_on:1 +3:exp:1:hex:"6860e44bf582db9818ffbe4c699d4218965c29f463d7a02fe1f36c8442b0a5d103def7a2":hex:"":hex:"e9f598357109e2a532dc980388b8a5991256166d67c3bc01":hex:"58ebbf7402be041724701e5c0132abe604c11a62a9de1d2f":hex:"52fad34b27113c146595a6740f505bc2d3edf6618975cb9c4a5155788eaf08b96d232610d9b4ee06264fd92f319df5a52b8f9e31b016a6c21d27d31d9d42bbb7588a7142f26ece3ddf211c8cf4530947adee302aa71c0d7fe9060c1b25f1c1f2e053598a7fb72c4db55fb1b02352d60a" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,0) #2 +depends_on:1 +3:exp:1:hex:"27b9f78ae07821f2b5625c8fc3a03ceec4fc8062be860c2db20403dd88a8751dcad56158":hex:"":hex:"1b6c848fce706abd73612dd3fd421c1c7ce9f4c2d0ecc670":hex:"14a43645c1b6ae394f795af6ca2e9084e7e707f3f2cedd7a":hex:"33c592017af545b3a9cf3419ce1c604e9c7c687ebf6418fbef47ec96e61f1951068eec9b60005d24574313f04ffc16c30872ec83e41e248e3d5c6951930d6a88b8931d5502d1142ce50676b3adf48453d1a008189658db8511d19a06ac97b4d5cfac19b54e8e6b899d501715f401ef85" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,0) #3 +depends_on:1 +3:exp:1:hex:"8d7cf5c2e360ef755c1e9f5b7a44a1e29f09cee7ca44e15925ffe9a47b2d55fd7750b356":hex:"":hex:"0e691c9a435939c615f0686eae88e090ba5c4b3f5e6e00c0":hex:"1e3a452295617e5a9e6f78256d2781feeb3812753b4aad9a":hex:"a307569d8adf3f7e6ee4567a5b2bd338badb9234e7b27c92429ffa75e4c56c0529fdc6c15df5d47c46e3d2eeadcf1b9e93a5dd6cde99a82f04b0d97f7a3bfd05c0e1d8370987222310ab18c980ce48b2679361c3d9011dd355a9b06337c054ee37913d5f4dd30d1fc942cd733a0fa5f8" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,0) #4 +depends_on:1 +3:exp:1:hex:"1a0d2c734918c539c1b306a464eb6b54f92e958e8636032aec23ba8ae817bec48384461f":hex:"":hex:"b8ad9e613a891fd0db89571fddda77827382e406cd3cdf7e":hex:"1e172a708aa4ffa3618ff0d7b1f9ba341f4811507851dfb4":hex:"674df1f3095d6c87bc54dd9b2aaa2c786bd50e4ddc02493745d820dad8552131fb3e389e99b0709478b65d4268f2a3b468a8447dc572a6ee024be6be9be9d428c12cc92894d15dd1c959d6222dc9ec30478c7a0b57f5bd8bd53868b98d7674738b54cf74100ae215693babb6db3b3890" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,0) #5 +depends_on:1 +3:exp:1:hex:"95a30a0ca779a4038ea920cccfa4cdd814ca17d560d53a75cf170f4712994f9bcb2efb74":hex:"":hex:"1da6c8726bbfa3c8bee6dcff6f76f2d55d60527c4f0db26b":hex:"595ebd903a596a1f12175080185bd94c2336eb8dd29a387d":hex:"317c19cf4a45b8cf3f645da084ada54d1b1f81379152424fddad22a6dc9bd22841e0c4c5a36bfb7879eafbd1a939121905a938ae034c7fc01afb56607e35f895f46f13e91ce4e8e75b6a87a1e5544e18eb194fd6754b06885ac05e332a05ed436e889965e405e0f2069b04b40ea0f635" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,0) #6 +depends_on:1 +3:exp:1:hex:"8af8930562510231a592a72587fa6ad7c234e133046965907642fbc785c0b86cba844f0f":hex:"":hex:"9ee7b221064966582dc836437b82386f5204a302a4179079":hex:"473d917f5b66f0f6e3fb4670ba08c2cbd2ea765b46b10838":hex:"5c2fc9cc7148dbe40a692b3636778eb80188949d198bba3e8355386b78b54bfb963f5f2d9202988da20ccbf336a7c737a66c90149b9e8e306477151c4d912f7c61e872de0d0e47701cbe765864de536d599946b8bd65e4d89d4e61deb53de9974fbbe634501800feea100fea573e2e50" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,0) #7 +depends_on:1 +3:exp:1:hex:"2b9554ecf94c7d647a4e117f43326cab54466eba56a09a52741b2445057c491935c067d2":hex:"":hex:"0144be6978dba85aa645d793c1881dc2deb1bd210811ec9e":hex:"1cd265f3812568274b643954c70923a76dfcc9f123360111":hex:"f7459b0c23966dc1a53e0c6406c9e78ebe728e3484224cd88b6b2ea554522e75eb4a1c8a3fdc66561426464f50b8d0ff95b266677d91776b344a820eb4fd7d554678300558011a7cd85d22e92dc8ec2c2fa15c6330ba157c3e71728304447c1ad4d64f3da4fbf26d92e1e7c58a1b289c" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,0) #8 +depends_on:1 +3:exp:1:hex:"335ede8603fcde78ea9869da2dbcab4a6e72f1b53439f3085d06b856e627411a9ce1c297":hex:"":hex:"ededc73fe268935c10832c463549f8204a29cf0fe00a4d87":hex:"ef1b8a80dd49d2c263999ddc0d5a1d9205c1b1c66239fd80":hex:"05bfe97c398b1e33ee1c547c0edb5b654b7060b76604195440d06dd2f614a398c6c43f1803893c4c8888bedecdf998367cf992301a25f24c263f5d36bbfc6fe8b839cad293b3617c1d2c60a814bda0359e3f717fa80fc7324af8827d438c88642754b39b10d18cf5bf42f11177a0bc6b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,0) #9 +depends_on:1 +3:exp:1:hex:"9b0275d861117553ecd3c4d7cfe762f88df22c4c4190dac8e0be5872818e2dd765261d58":hex:"":hex:"cfc0b07082d514425b17ce3cb334ec62bc1b3be0be58ca4b":hex:"d3c70ab5ff7a364a9e6dc75132ac67e0d373fa2df301afb5":hex:"09fb41bcceb016e754795e1cce582f0cae91d7bb50245975eb75274819e1e4dcdfbc5e2f13fd26b9a9f9e945cd807ffec4e275681ea7bd33eae13efd8a01edbe02562e77b44b6312f416c3dd0be64f2bae0ba4b9bb36fc3a44841d21d8b3571c0ef644d88cf3cc3c851b256a15f4d716" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,0) #10 +depends_on:1 +3:exp:1:hex:"1981c3f9ca58fd10e8377a8d0eb3cf02102aab6f7a033af3135533d9fd850e29ecb8dc9b":hex:"":hex:"f9978ba41df22894ad5f3849c1bdf21f7bbc0128c782e79b":hex:"b4d57de5e18d393273ee9f3ef9736599c6d639f437239219":hex:"fee23db2fcc71624fb39f573e33a1490efc7230c27e9278188251634f9c045bcb26e79ece6a173491475ae44a957c4269570f5469234ca8b6873cc973c8d97178c58cec658a352bad0d4c6001cae5664258db59ad76eb6304d166267eafb46f4dd536a914fa6d1ac58317e7c557d4653" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,0) #11 +depends_on:1 +3:exp:1:hex:"c10d4e521350f7cd1853576d03c4bece3e58c8c740859e4e16979499ec1365fc073736a3":hex:"":hex:"78b245520153baacc66846e7a83a2a925f892d4c2ee63c0f":hex:"c8ca7a33de5991d44d7ef7da2d3368cc2cdb93895c394d41":hex:"f92c15f5833800b28dba2d134d4dcfc41abf72f5a700469551e8ccb83bdb0772d14d6b26ba6978169e3ddbe5f214d57930dfcad719bf10d306749246d2624bedd4a18d327b8ae6bee67cf0bfb5f649824bbd0440f042146b95a83e5845ced69a55ba055d5dfc7183c3bb28d61312d274" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,0) #12 +depends_on:1 +3:exp:1:hex:"7608b5617785995a1f7144ee5229e4f9c138e418bcc3b5e061a422e8cf875f58650e996d":hex:"":hex:"961c2d33039e60a2871e1f5b82097f6b1cb03836dba5f440":hex:"b18cb52d3858ac5bf59f216a28c0ad49f3dc88c67b5870e0":hex:"4b0313ae873ce5ebf08aec160416492e4c4c797a5017061ea42aefa0685ab19b74a7af11f019b9fb63072b797f7ea3354efd32c4abd1e866405a319ed2fa13fc81019d61326e70e503141b9c77b4879a45e9f36f101dbfff4359147282ef814888fee81640def25f551cee41d12609aa" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,0) #13 +depends_on:1 +3:exp:1:hex:"fef7a43fea2ff1a0f624086985e535778d7a73dbc47bc23e9da92edd5d2f273cdbbc0251":hex:"":hex:"836731a57497a69e31f8db4f729774ad65f31d968dbc55a8":hex:"bcca96d808ba98bb50e90afe58fc88e95dc14c3e90c56004":hex:"4f2c64ecd146689064fbf4fcffce2a2ab3910e72ec4faec277f7b9e9ed510381312b01f21650e175ebe9c45c11e977276f13be015243a0cd16a191abbac6462ba96e4e4a1120b28083da933419e8c8f03099906eb1ee012ae291104c6530f51b5e32e6631cab8ef5aad68c0045255ba9" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,0) #14 +depends_on:1 +3:exp:1:hex:"00197c70b2f0d3e98e4b387ec42a65c4106a1689ab5de61101ee76f4b5e530e7efeaf964":hex:"":hex:"03015311cddd0961ec7a74cb84d835c058a69b964f18a1c1":hex:"5e0d99e0e7c57769a43ea771c467fb5e2df6d06dae035fd6":hex:"72e8ca7666e440ac6a84ab6f7be7e00a536d77315b119b49e5544bf3ead564bd06740f09f6e20564542e0d597ac15a43b5fb5a0239a3362bc3a9efe1ce358ddd9d4f30b72e12ed9d78340c66b194beb4b12e973213931b9cfd0ccbdf540d2c36ce074e2beac7a4ddac59e06e4c7178d3" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,192) #0 +depends_on:1 +3:exp:1:hex:"c5c89c26ac4ca8b1106ba90a8ef4d6d687dfd88743caa5fbafa4745d9c1f8371120b10c8":hex:"":hex:"d3483ae5f9ed97efd3f852e4a6f20f25c947a03f39a4b75c":hex:"2cd523c5958cdf403caa61abe5c4739cdb9d40152f0e769a":hex:"1fef4e6abc2778d1c3e3ce00fdb5eae1ebebdd5cff0a7087644c8565d1e8b876b2c05264ca81498468851fc7b9e5a2163a06f377d2ed754c095adc59dc015a77edd69e4eecbe48d9dc127eedfff5cc73ae38127ae3a518fe7fa5abd1a9c53eeaf144420873341e2efa3d81493c69b04e" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,192) #1 +depends_on:1 +3:exp:1:hex:"6860e44bf582db9818ffbe4c699d4218965c29f463d7a02fe1f36c8442b0a5d103def7a2":hex:"":hex:"e9f598357109e2a532dc980388b8a5991256166d67c3bc01":hex:"58ebbf7402be041724701e5c0132abe604c11a62a9de1d2f":hex:"52fad34b27113c146595a6740f505bc2d3edf6618975cb9c4a5155788eaf08b96d232610d9b4ee06264fd92f319df5a52b8f9e31b016a6c21d27d31d9d42bbb7588a7142f26ece3ddf211c8cf4530947adee302aa71c0d7fe9060c1b25f1c1f2e053598a7fb72c4db55fb1b02352d60a" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,192) #2 +depends_on:1 +3:exp:1:hex:"27b9f78ae07821f2b5625c8fc3a03ceec4fc8062be860c2db20403dd88a8751dcad56158":hex:"":hex:"1b6c848fce706abd73612dd3fd421c1c7ce9f4c2d0ecc670":hex:"14a43645c1b6ae394f795af6ca2e9084e7e707f3f2cedd7a":hex:"33c592017af545b3a9cf3419ce1c604e9c7c687ebf6418fbef47ec96e61f1951068eec9b60005d24574313f04ffc16c30872ec83e41e248e3d5c6951930d6a88b8931d5502d1142ce50676b3adf48453d1a008189658db8511d19a06ac97b4d5cfac19b54e8e6b899d501715f401ef85" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,192) #3 +depends_on:1 +3:exp:1:hex:"8d7cf5c2e360ef755c1e9f5b7a44a1e29f09cee7ca44e15925ffe9a47b2d55fd7750b356":hex:"":hex:"0e691c9a435939c615f0686eae88e090ba5c4b3f5e6e00c0":hex:"1e3a452295617e5a9e6f78256d2781feeb3812753b4aad9a":hex:"a307569d8adf3f7e6ee4567a5b2bd338badb9234e7b27c92429ffa75e4c56c0529fdc6c15df5d47c46e3d2eeadcf1b9e93a5dd6cde99a82f04b0d97f7a3bfd05c0e1d8370987222310ab18c980ce48b2679361c3d9011dd355a9b06337c054ee37913d5f4dd30d1fc942cd733a0fa5f8" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,192) #4 +depends_on:1 +3:exp:1:hex:"1a0d2c734918c539c1b306a464eb6b54f92e958e8636032aec23ba8ae817bec48384461f":hex:"":hex:"b8ad9e613a891fd0db89571fddda77827382e406cd3cdf7e":hex:"1e172a708aa4ffa3618ff0d7b1f9ba341f4811507851dfb4":hex:"674df1f3095d6c87bc54dd9b2aaa2c786bd50e4ddc02493745d820dad8552131fb3e389e99b0709478b65d4268f2a3b468a8447dc572a6ee024be6be9be9d428c12cc92894d15dd1c959d6222dc9ec30478c7a0b57f5bd8bd53868b98d7674738b54cf74100ae215693babb6db3b3890" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,192) #5 +depends_on:1 +3:exp:1:hex:"95a30a0ca779a4038ea920cccfa4cdd814ca17d560d53a75cf170f4712994f9bcb2efb74":hex:"":hex:"1da6c8726bbfa3c8bee6dcff6f76f2d55d60527c4f0db26b":hex:"595ebd903a596a1f12175080185bd94c2336eb8dd29a387d":hex:"317c19cf4a45b8cf3f645da084ada54d1b1f81379152424fddad22a6dc9bd22841e0c4c5a36bfb7879eafbd1a939121905a938ae034c7fc01afb56607e35f895f46f13e91ce4e8e75b6a87a1e5544e18eb194fd6754b06885ac05e332a05ed436e889965e405e0f2069b04b40ea0f635" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,192) #6 +depends_on:1 +3:exp:1:hex:"8af8930562510231a592a72587fa6ad7c234e133046965907642fbc785c0b86cba844f0f":hex:"":hex:"9ee7b221064966582dc836437b82386f5204a302a4179079":hex:"473d917f5b66f0f6e3fb4670ba08c2cbd2ea765b46b10838":hex:"5c2fc9cc7148dbe40a692b3636778eb80188949d198bba3e8355386b78b54bfb963f5f2d9202988da20ccbf336a7c737a66c90149b9e8e306477151c4d912f7c61e872de0d0e47701cbe765864de536d599946b8bd65e4d89d4e61deb53de9974fbbe634501800feea100fea573e2e50" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,192) #7 +depends_on:1 +3:exp:1:hex:"2b9554ecf94c7d647a4e117f43326cab54466eba56a09a52741b2445057c491935c067d2":hex:"":hex:"0144be6978dba85aa645d793c1881dc2deb1bd210811ec9e":hex:"1cd265f3812568274b643954c70923a76dfcc9f123360111":hex:"f7459b0c23966dc1a53e0c6406c9e78ebe728e3484224cd88b6b2ea554522e75eb4a1c8a3fdc66561426464f50b8d0ff95b266677d91776b344a820eb4fd7d554678300558011a7cd85d22e92dc8ec2c2fa15c6330ba157c3e71728304447c1ad4d64f3da4fbf26d92e1e7c58a1b289c" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,192) #8 +depends_on:1 +3:exp:1:hex:"335ede8603fcde78ea9869da2dbcab4a6e72f1b53439f3085d06b856e627411a9ce1c297":hex:"":hex:"ededc73fe268935c10832c463549f8204a29cf0fe00a4d87":hex:"ef1b8a80dd49d2c263999ddc0d5a1d9205c1b1c66239fd80":hex:"05bfe97c398b1e33ee1c547c0edb5b654b7060b76604195440d06dd2f614a398c6c43f1803893c4c8888bedecdf998367cf992301a25f24c263f5d36bbfc6fe8b839cad293b3617c1d2c60a814bda0359e3f717fa80fc7324af8827d438c88642754b39b10d18cf5bf42f11177a0bc6b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,192) #9 +depends_on:1 +3:exp:1:hex:"9b0275d861117553ecd3c4d7cfe762f88df22c4c4190dac8e0be5872818e2dd765261d58":hex:"":hex:"cfc0b07082d514425b17ce3cb334ec62bc1b3be0be58ca4b":hex:"d3c70ab5ff7a364a9e6dc75132ac67e0d373fa2df301afb5":hex:"09fb41bcceb016e754795e1cce582f0cae91d7bb50245975eb75274819e1e4dcdfbc5e2f13fd26b9a9f9e945cd807ffec4e275681ea7bd33eae13efd8a01edbe02562e77b44b6312f416c3dd0be64f2bae0ba4b9bb36fc3a44841d21d8b3571c0ef644d88cf3cc3c851b256a15f4d716" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,192) #10 +depends_on:1 +3:exp:1:hex:"1981c3f9ca58fd10e8377a8d0eb3cf02102aab6f7a033af3135533d9fd850e29ecb8dc9b":hex:"":hex:"f9978ba41df22894ad5f3849c1bdf21f7bbc0128c782e79b":hex:"b4d57de5e18d393273ee9f3ef9736599c6d639f437239219":hex:"fee23db2fcc71624fb39f573e33a1490efc7230c27e9278188251634f9c045bcb26e79ece6a173491475ae44a957c4269570f5469234ca8b6873cc973c8d97178c58cec658a352bad0d4c6001cae5664258db59ad76eb6304d166267eafb46f4dd536a914fa6d1ac58317e7c557d4653" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,192) #11 +depends_on:1 +3:exp:1:hex:"c10d4e521350f7cd1853576d03c4bece3e58c8c740859e4e16979499ec1365fc073736a3":hex:"":hex:"78b245520153baacc66846e7a83a2a925f892d4c2ee63c0f":hex:"c8ca7a33de5991d44d7ef7da2d3368cc2cdb93895c394d41":hex:"f92c15f5833800b28dba2d134d4dcfc41abf72f5a700469551e8ccb83bdb0772d14d6b26ba6978169e3ddbe5f214d57930dfcad719bf10d306749246d2624bedd4a18d327b8ae6bee67cf0bfb5f649824bbd0440f042146b95a83e5845ced69a55ba055d5dfc7183c3bb28d61312d274" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,192) #12 +depends_on:1 +3:exp:1:hex:"7608b5617785995a1f7144ee5229e4f9c138e418bcc3b5e061a422e8cf875f58650e996d":hex:"":hex:"961c2d33039e60a2871e1f5b82097f6b1cb03836dba5f440":hex:"b18cb52d3858ac5bf59f216a28c0ad49f3dc88c67b5870e0":hex:"4b0313ae873ce5ebf08aec160416492e4c4c797a5017061ea42aefa0685ab19b74a7af11f019b9fb63072b797f7ea3354efd32c4abd1e866405a319ed2fa13fc81019d61326e70e503141b9c77b4879a45e9f36f101dbfff4359147282ef814888fee81640def25f551cee41d12609aa" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,192) #13 +depends_on:1 +3:exp:1:hex:"fef7a43fea2ff1a0f624086985e535778d7a73dbc47bc23e9da92edd5d2f273cdbbc0251":hex:"":hex:"836731a57497a69e31f8db4f729774ad65f31d968dbc55a8":hex:"bcca96d808ba98bb50e90afe58fc88e95dc14c3e90c56004":hex:"4f2c64ecd146689064fbf4fcffce2a2ab3910e72ec4faec277f7b9e9ed510381312b01f21650e175ebe9c45c11e977276f13be015243a0cd16a191abbac6462ba96e4e4a1120b28083da933419e8c8f03099906eb1ee012ae291104c6530f51b5e32e6631cab8ef5aad68c0045255ba9" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,0,192) #14 +depends_on:1 +3:exp:1:hex:"00197c70b2f0d3e98e4b387ec42a65c4106a1689ab5de61101ee76f4b5e530e7efeaf964":hex:"":hex:"03015311cddd0961ec7a74cb84d835c058a69b964f18a1c1":hex:"5e0d99e0e7c57769a43ea771c467fb5e2df6d06dae035fd6":hex:"72e8ca7666e440ac6a84ab6f7be7e00a536d77315b119b49e5544bf3ead564bd06740f09f6e20564542e0d597ac15a43b5fb5a0239a3362bc3a9efe1ce358ddd9d4f30b72e12ed9d78340c66b194beb4b12e973213931b9cfd0ccbdf540d2c36ce074e2beac7a4ddac59e06e4c7178d3" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,192) #0 +depends_on:1 +3:exp:1:hex:"e4547261c9dda6bafe9fddf435a80ebc96354c7c2c8847c5d26c6e73a967bfc4ebaf8613":hex:"42849dc8eec611eaa49252067fa60d7d7267d711dc35b576":hex:"815f50fc233f157f96ad0627c355bce407b269dca91af661":hex:"775a1c9da6f58d4eb95b27935ecc01dde31ff17ce2e4e65d":hex:"25adb777523a80a6dbb6ac1fd08e02bfc4b4686cec5efe3ae9aa2d4469eae8c9c3693fdc8e0fc107720b7789ef7331e23fe3799412ec86857ffbba515a5af4d91013b2f17669421c822005b4747942790a11a24c4974f27d54de69727b0ed507b6a48a9d6c53f93e2f3d33df73dd643f" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,192) #1 +depends_on:1 +3:exp:1:hex:"06d677001d9b3c97fda4d09778aee3de131b4123696b109f81bb6b0d7fbcab3c5842bb83":hex:"f99638d2d4365b662cd83ab4e6a7bbb624e6c72b7b38e81b":hex:"20b7d56f6222bafeeeee59dbca1933d8086218891f3a9bfe":hex:"9de4f2847fe239cb1a3df4b8ff64c25d7b0870f3c9ebe3a3":hex:"e18ff19837ce21e68944659321311b8584dd515ed8a6a1f2b0ac06e69009c3d0cf0489af876201efad962cfd1ba54f540b94131d788d3fea797c4bc079593bc7932baa70abb145a355741a98c584f0fa3298b8310b01e1a6debf5359d7d02b1a6c663100acb56975450bec20e91b736b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,192) #2 +depends_on:1 +3:exp:1:hex:"abd38c0465cdfe018f36ffbb7a0ee51d67675ab4f0f1d1e93418bb4cdf6499a371af4d3a":hex:"9a07d5571d841e3c1a9eb3fb48cde3b3e080e1c2e0db6a6d":hex:"a392f79022aebbec0c82b981293627d139dfb5232eb490b4":hex:"f5ce1f6b1e6715c49bea42ff439fdecd9b3b7f2e578133cc":hex:"885c54ad25992fc38260498d6f4d8c73d6159af5f7efef06174da03afcd8384cb28690fd9ded1d26e2dff74aee4dd0c47a0d99c6fc1ec8d8faccbdcf6fdb12a528564ad0d8131bcf5222d7e6c69c52da1acba01b721c98ac5a33725111f12f6d8100009d7cc9efb7ad8d7d95ea4e620d" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,192) #3 +depends_on:1 +3:exp:1:hex:"b52620e58e0b52b8eed0d6a6c5f4ff6c1483c61fc41dacf72bf475b37d068d061d1edcea":hex:"ef0d233de00d24622b7d4ff4215aa720787fe80aaeb65d7a":hex:"81b735acd3dcb13e65231c2d980fb40ca850370581f230d2":hex:"b2302d024d92cdaed4b12f79b0aeb20c98b2321710fefab2":hex:"ae94204670196baf740768f97b3a095134b384afea667fd90a77a16c8ae390a732ff49a3073a27db0f7a2c8ad5d7cb527d334a37abf0472f292a20f2a28e667d7c9e9f7b8fbdd177f36bf92d66223aee3f712b6c9b064e07ab96f6a77613ea55008fb4f8fbcb2f1ccbb0da75316c1faa" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,192) #4 +depends_on:1 +3:exp:1:hex:"2592a5ed86ff64b9b4c1fbb81222d1bfbc53f3a639571ecc356084058b8855237da15c50":hex:"a626c51ec99e72431485d2ba027ed9cabcae7b86116abe4f":hex:"c430876552d28776570923c6b74e42c3210f01104006bf11":hex:"fe2ebc239690a4eb18a0b5e75d08831cc2eb07c982c63973":hex:"005045ade7cc15467b5ea784649d9804540a842ffba4db8d44df4f44c69480bd4fe965b645aed09d62190daeb2693a2192aec3d71453a8218e4700201ab922ac35d241d95150b47cc7a051897be4d958f2da5c2ebbfceb1c550cb67b32ff83ce4fd845fd826a0d2469b506f5158765fa" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,192) #5 +depends_on:1 +3:exp:1:hex:"376785f5ff8a82ceb0aaeb010533cc1089059ec583c302b14bc47e2cb8c2711839ce7f68":hex:"6d345e248339e893f75696c039ac47e5678696fd489a393c":hex:"b0f3fa1131c3fdd5c7fd2de93931e45a66fa030422ac65db":hex:"c66341e3f9fb82e3ba85f229fcb7d34457e4a6ba8396b548":hex:"b92d17e1be94b0385a8cc3e16189811fef7b284a1b0b6b2520fde79af7826c745e746486a70cd8dd9930b163da75f7eea7c216e758d9ed6c745dcd7bde19bb9382c1f7c37cd15b703b884d7d452c255b25048a836844c5ff28aaacf733a52c28904b36e1b51729d7aed81d601c0872dd" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,192) #6 +depends_on:1 +3:exp:1:hex:"2cc2557582c5a90cd2ad0c4a5578eb0bbc9bde41b126e46d8e9c3563341ba238414eb628":hex:"9d2fbb9153e3ffefae0770c79de10db069a5ff9f50e31787":hex:"2e54e32539e27ef76ac1eeae2e30c2385647652e20903b39":hex:"1f4e01255908c3c8049521f8972c01ede7dc76c425c59640":hex:"7d6ccdfab33f322898c470be02d8257e0e952dd10f407b3a8eaeeba47c541d968d79eca29e15541c1505fe4f19a41797c9ca2280c06261fe9d0c58bab65d16f5794b57566b8795c38c7b43d4761c8fd107beb95147a0fe61ae8dc31e25eb2957e44c0463ca7c1b589ea587f0cae1428c" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,192) #7 +depends_on:1 +3:exp:1:hex:"e670f896326b76034e43cd85f6f6f11fe6582d3471a8eb88d37a2302de010aac0e556860":hex:"5e218091abee1960ef81f4d5a80415e388bd0cc79bed70cf":hex:"7cf84b9ff30dbd0f608fb21646d7c5b542fba50adb38d5df":hex:"c1c4aabe7616a4c97a4dbdadb08a9b63c6e10cef8d463fd8":hex:"d8fbd557fccf31829b5ee11b05d0353e725bff15fdaac94d21ce95d40eff55edd852b264b515ec6384e2d28d014e47a2df0d4f56a4ec79309b06affc62915e231d62d02bfc60220c72b7ca7ba5671f882839b791ef534e707a04e5274c1011f7941fe1075a5d06a47af9fb2f65c1f211" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,192) #8 +depends_on:1 +3:exp:1:hex:"0576bb2d4c663b781193509251e2f76b0a8bb792e79449600c2c154feb70cf33ca942508":hex:"ad15e4fce9f4dea43c12ff9f9d50c963b335a01332541154":hex:"3c8a4d6ab96cebf9d02b5663dcb0e0db23699623455cd4b5":hex:"43d2d3a8d023fa1785ce4781a15eb20ad787685a47da08f0":hex:"a68e648cb07da2eb795a8c898c8631e565f33c2fe9c35e686d6f85fef145446cb79bb6d17bdc8224bfe437468a9630ed03c517caf1226c278ae510c869d67d50b6bf1cb378a34035041f290d8dbc123650ab4fbe5cf6074ed0ba90e45d9a8ae08566ea3d3a00ee3741c8ec8f56dcc78c" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,192) #9 +depends_on:1 +3:exp:1:hex:"f597ce05b9a5b1cf3847bbd4171e5085384cc256f77ac61573b435726cbd538b93de9f55":hex:"573cf859f8fea05f16c6d03cb4e524b91e917f39eeeb1d68":hex:"2a842454870c3f7936f8036b453d219557ca341f261d2519":hex:"7afd8cc269899acd88f5c55af29fb0c4ce678a0d8ebf924f":hex:"8162c16c1ce3d5c6b7c96f0281f4220569a882277935752b86e7d3f54646b276cb77ed96da73799911fca3d19d34c1f0b21068a472afcb77410412eff2abd03c753a009ce02b0e995477546366020294eff0ef0da66f31a413313e2774ca04f09a4d5076e0e85ca97d5bb6faac4c0c27" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,192) #10 +depends_on:1 +3:exp:1:hex:"d5b5374fe143035c4fea41667bc8bc7d46000998cc82ab32a0040c705e01f9b354e8f16e":hex:"ed8bb219e67515874c5b9e3f6ae6e4dfa9c42d1e69204e8b":hex:"70f03fe6e78cc34ec1678b2708fcd8ae3300183ea15ccfc7":hex:"9c641d7e73d1a2b819e113747d74a979b74c444ed36b7391":hex:"d50df8e3e17c0f5e19673ba2097d1d0c4cf7a9def7465a5b91ac8d49ae1b6a821fe9efde841ec9064555c0e2d6cdfa41f1089f22a5c27090c5a136660d1af586a1e131a853f19bc3c8f4c79aa09e39c2f22b4456c667ec907e2a4124218665e7cce50399ae1e19ba9c2399f470444839" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,192) #11 +depends_on:1 +3:exp:1:hex:"74d7c8c9b170e59e4f128c8df1955838df5c8071a5e85439d71e785c68b37e10efb39c9a":hex:"be3d54203a1078d051519137774d5d851e81be026155eb78":hex:"23f7b6758d79de580ed3eb995fc173da74939837aa8d9eb4":hex:"6f0d5a333ddea0d38362df0dc3ebaa2be2fe5825ddb0ce84":hex:"4462fc32110b25b3797c5cafaad830e8a4346d9270fed98b30f1345a7a8dde19bf5365d6f3788e7f715feb2762af263839c8c8188908c61120743d977d71c51f6324d887bbda380fc07eff09a31c2332e7b1aa1692c59c3379db95fc21cf711c004c4d385fe14f48f2f2a31bcce6aaec" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,192) #12 +depends_on:1 +3:exp:1:hex:"eaf27c3f69279fd523c0c3a1da5fc4f01ed64c27ffcfe3c1c596482f5baae1434e8c687c":hex:"b038829fc95dcba8645ce40a306491c893f48139ae30a071":hex:"fbbf7abb8cc2612eeea6d9463efd55c47245e01713332bd6":hex:"ccd7e81f529de1ff4e65fc63d34c262ffde7ee49e6707197":hex:"96dfb7445057633b2f0deb69135d10d0a2dc53faa9cded55ddfb8edc63f5424f8fec7627597a30328177dde7963f76f9e5412b5b440256c6a3f0c7c7fa02ca49e19ea176abac013696e9d529f65e51d4a7348e42dd254bbf19d9632d6c875b8ecd7a4139f1bf020a159d2a30af8d645f" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,192) #13 +depends_on:1 +3:exp:1:hex:"319cbf2b11b37c831c654b6cec2570dc6d7abeeab185272a518eaef30faa5acf5c8b254d":hex:"9effa141f7466b659eaa50c32c8e683c2640f54027ab6aa5":hex:"63b3acc237588cdf41c0d4bef16c4890cf3d458fcf1de8ea":hex:"573d6a7960aeccc3280a8aee4d72e587e9d196b7b270e329":hex:"8a568086fdd9f01206a5aaee34d253bbc9339112d3170699b9a1392e97062d5d0f16240114dc1789269217c5b4b2974895b20903890f7dacfef46fa4a4d02891c70425ab3b42f53d72f852faf3713ac7b8207dc453279f4df345091b8bfeb54983095c2d190358293ba507bdfdc39b24" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-224,192+96,192,192) #14 +depends_on:1 +3:exp:1:hex:"56f3f5b08da10ead0c986dd2ae5553e4b2eeeb47ad5d22197b12b89b4a871c51c0d85554":hex:"96c8630a1f4187fb0794601cf51e7e333e71756a0421ff43":hex:"875e5bc9548917a82b6dc95200d92bf4218dba7ab316a5fe":hex:"4d3f5678b00d47bb9d0936486de60407eaf1282fda99f595":hex:"90969961ef9283b9e600aead7985455e692db817165189665f498f219b1e5f277e586b237851305d5205548b565faeb02bb7b5f477c80ba94b0563e24d9309d2957a675848140f5601f698459db5899b20dda68f000ccb18dcd39dfae49955b8478fd50bb59d772045beb338622efa5a" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,0) #0 +depends_on:1 +3:exp:2:hex:"ca851911349384bffe89de1cbdc46e6831e44d34a4fb935ee285dd14b71a7488659ba96c601dc69fc902940805ec0ca8":hex:"":hex:"":hex:"":hex:"e528e9abf2dece54d47c7e75e5fe302149f817ea9fb4bee6f4199697d04d5b89d54fbb978a15b5c443c9ec21036d2460b6f73ebad0dc2aba6e624abf07745bc107694bb7547bb0995f70de25d6b29e2d3011bb19d27676c07162c8b5ccde0668961df86803482cb37ed6d5c0bb8d50cf1f50d476aa0458bdaba806f48be9dcb8" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,0) #1 +depends_on:1 +3:exp:2:hex:"79737479ba4e7642a221fcfd1b820b134e9e3540a35bb48ffae29c20f5418ea33593259c092bef4129bc2c6c9e19f343":hex:"":hex:"":hex:"":hex:"cf5ad5984f9e43917aa9087380dac46e410ddc8a7731859c84e9d0f31bd43655b924159413e2293b17610f211e09f770f172b8fb693a35b85d3b9e5e63b1dc252ac0e115002e9bedfb4b5b6fd43f33b8e0eafb2d072e1a6fee1f159df9b51e6c8da737e60d5032dd30544ec51558c6f080bdbdab1de8a939e961e06b5f1aca37" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,0) #2 +depends_on:1 +3:exp:2:hex:"b340907445b97a8b589264de4a17c0bea11bb53ad72f9f33297f05d2879d898d65cb27735d83c0708f72684ea58f7ee5":hex:"":hex:"":hex:"":hex:"75183aaaf3574bc68003352ad655d0e9ce9dd17552723b47fab0e84ef903694a32987eeddbdc48efd24195dbdac8a46ba2d972f5808f23a869e71343140361f58b243e62722088fe10a98e43372d252b144e00c89c215a76a121734bdc485486f65c0b16b8963524a3a70e6f38f169c12f6cbdd169dd48fe4421a235847a23ff" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,0) #3 +depends_on:1 +3:exp:2:hex:"8e159f60060a7d6a7e6fe7c9f769c30b98acb1240b25e7ee33f1da834c0858e7c39d35052201bdcce4e127a04f04d644":hex:"":hex:"":hex:"":hex:"62910a77213967ea93d6457e255af51fc79d49629af2fccd81840cdfbb4910991f50a477cbd29edd8a47c4fec9d141f50dfde7c4d8fcab473eff3cc2ee9e7cc90871f180777a97841597b0dd7e779eff9784b9cc33689fd7d48c0dcd341515ac8fecf5c55a6327aea8d58f97220b7462373e84e3b7417a57e80ce946d6120db5" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,0) #4 +depends_on:1 +3:exp:2:hex:"74755f196305f7fb6689b2fe6835dc1d81484fc481a6b8087f649a1952f4df6ac36387a544a5f2b78007651a7b74b749":hex:"":hex:"":hex:"":hex:"b2896f3af4375dab67e8062d82c1a005ef4ed119d13a9f18371b1b873774418684805fd659bfd69964f83a5cfe08667ddad672cafd16befffa9faed49865214f703951b443e6dca22edb636f3308380144b9333de4bcb0735710e4d9266786342fc53babe7bdbe3c01a3addb7f23c63ce2834729fabbd419b47beceb4a460236" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,0) #5 +depends_on:1 +3:exp:2:hex:"4b222718f56a3260b3c2625a4cf80950b7d6c1250f170bd5c28b118abdf23b2f7aed52d0016fcaef0b6492bc40bbe0e9":hex:"":hex:"":hex:"":hex:"a6da029b3665cd39fd50a54c553f99fed3626f4902ffe322dc51f0670dfe8742ed48415cf04bbad5ed3b23b18b7892d170a7dcf3ef8052d5717cb0c1a8b3010d9a9ea5de70ae5356249c0e098946030c46d9d3d209864539444374d8fbcae068e1d6548fa59e6562e6b2d1acbda8da0318c23752ebc9be0c1c1c5b3cf66dd967" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,0) #6 +depends_on:1 +3:exp:2:hex:"b512633f27fb182a076917e39888ba3ff35d23c3742eb8f3c635a044163768e0e2c39b84629a3de5c301db5643af1c21":hex:"":hex:"":hex:"":hex:"fb931d0d0194a97b48d5d4c231fdad5c61aedf1c3a55ac24983ecbf38487b1c93396c6b86ff3920cfa8c77e0146de835ea5809676e702dee6a78100da9aa43d8ec0bf5720befa71f82193205ac2ea403e8d7e0e6270b366dc4200be26afd9f63b7e79286a35c688c57cbff55ac747d4c28bb80a2b2097b3b62ea439950d75dff" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,0) #7 +depends_on:1 +3:exp:2:hex:"aae3ffc8605a975befefcea0a7a286642bc3b95fb37bd0eb0585a4cabf8b3d1e9504c3c0c4310c1c0746a036c91d9034":hex:"":hex:"":hex:"":hex:"2819bd3b0d216dad59ddd6c354c4518153a2b04374b07c49e64a8e4d055575dfbc9a8fcde68bd257ff1ba5c6000564b46d6dd7ecd9c5d684fd757df62d85211575d3562d7814008ab5c8bc00e7b5a649eae2318665b55d762de36eba00c2906c0e0ec8706edb493e51ca5eb4b9f015dc932f262f52a86b11c41e9a6d5b3bd431" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,0) #8 +depends_on:1 +3:exp:2:hex:"b9475210b79b87180e746df704b3cbc7bf8424750e416a7fbb5ce3ef25a82cc624baf03599c10df6ef44065d715a93f7":hex:"":hex:"":hex:"":hex:"ae12d784f796183c50db5a1a283aa35ed9a2b685dacea97c596ff8c294906d1b1305ba1f80254eb062b874a8dfffa3378c809ab2869aa51a4e6a489692284a25038908a347342175c38401193b8afc498077e10522bec5c70882b7f760ea5946870bd9fc72961eedbe8bff4fd58c7cc1589bb4f369ed0d3bf26c5bbc62e0b2b2" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,0) #9 +depends_on:1 +3:exp:2:hex:"27838eb44ceccb4e36210703ebf38f659bc39dd3277cd76b7a9bcd6bc964b62839cfe0210db2e7b0eb52a387476e7ea1":hex:"":hex:"":hex:"":hex:"e5e72a53605d2aaa67832f97536445ab774dd9bff7f13a0d11fd27bf6593bfb52309f2d4f09d147192199ea584503181de87002f4ee085c7dc18bf32ce5315647a3708e6f404d6588c92b2dda599c131aa350d18c747b33dc8eda15cf40e95263d1231e1b4b68f8d829f86054d49cfdb1b8d96ab0465110569c8583a424a099a" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,0) #10 +depends_on:1 +3:exp:2:hex:"d7129e4f47008ad60c9b5d081ff4ca8eb821a6e4deb91608bf4e2647835373a5a72882773f78c2fc4878295840a53012":hex:"":hex:"":hex:"":hex:"0cbf48585c5de9183b7ff76557f8fc9ebcfdfde07e588a8641156f61b7952725bbee954f87e9b937513b16bba0f2e523d095114658e00f0f3772175acfcb3240a01de631c19c5a834c94cc58d04a6837f0d2782fa53d2f9f65178ee9c837222494c799e64c60406069bd319549b889fa00a0032dd7ba5b1cc9edbf58de82bfcd" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,0) #11 +depends_on:1 +3:exp:2:hex:"67fe5e300c513371976c80de4b20d4473889c9f1214bce718bc32d1da3ab7532e256d88497738a33923aa003a8d7845c":hex:"":hex:"":hex:"":hex:"b44660d64ef7bcebc7a1ab71f8407a02285c7592d755ae6766059e894f694373ed9c776c0cfc8594413eefb400ed427e158d687e28da3ecc205e0f7370fb089676bbb0fa591ec8d916c3d5f18a3eb4a417120705f3e2198154cd60648dbfcfc901242e15711cacd501b2c2826abe870ba32da785ed6f1fdc68f203d1ab43a64f" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,0) #12 +depends_on:1 +3:exp:2:hex:"de8142541255c46d66efc6173b0fe3ffaf5936c897a3ce2e9d5835616aafa2cbd01f9002c407127bc3297a561d89b81d":hex:"":hex:"":hex:"":hex:"64d1020929d74716446d8a4e17205d0756b5264867811aa24d0d0da8644db25d5cde474143c57d12482f6bf0f31d10af9d1da4eb6d701bdd605a8db74fb4e77f79aaa9e450afda50b18d19fae68f03db1d7b5f1738d2fdce9ad3ee9461b58ee242daf7a1d72c45c9213eca34e14810a9fca5208d5c56d8066bab1586f1513de7" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,0) #13 +depends_on:1 +3:exp:2:hex:"4a8e0bd90bdb12f7748ad5f147b115d7385bb1b06aee7d8b76136a25d779bcb77f3cce4af8c8ce3c45bdf23c6b181a00":hex:"":hex:"":hex:"":hex:"320c7ca4bbeb7af977bc054f604b5086a3f237aa5501658112f3e7a33d2231f5536d2c85c1dad9d9b0bf7f619c81be4854661626839c8c10ae7fdc0c0b571be34b58d66da553676167b00e7d8e49f416aacb2926c6eb2c66ec98bffae20864cf92496db15e3b09e530b7b9648be8d3916b3c20a3a779bec7d66da63396849aaf" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,0) #14 +depends_on:1 +3:exp:2:hex:"451ed024bc4b95f1025b14ec3616f5e42e80824541dc795a2f07500f92adc6652f28e6ee8de5879db1eccd58c994e5f0":hex:"":hex:"":hex:"":hex:"3fb637085ab75f4e95655faae95885166a5fbb423bb03dbf0543be063bcd48799c4f05d4e522634d9275fe02e1edd920e26d9accd43709cb0d8f6e50aa54a5f3bdd618be23cf73ef736ed0ef7524b0d14d5bef8c8aec1cf1ed3e1c38a808b35e61a44078127c7cb3a8fd7addfa50fcf3ff3bc6d6bc355d5436fe9b71eb44f7fd" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,256) #0 +depends_on:1 +3:exp:2:hex:"d3cc4d1acf3dde0c4bd2290d262337042dc632948223d3a2eaab87da44295fbd0109b0e729f457328aa18569a9224921":hex:"":hex:"3c311848183c9a212a26f27f8c6647e40375e466a0857cc39c4e47575d53f1f6":hex:"fcb9abd19ccfbccef88c9c39bfb3dd7b1c12266c9808992e305bc3cff566e4e4":hex:"9c7b758b212cd0fcecd5daa489821712e3cdea4467b560ef5ddc24ab47749a1f1ffdbbb118f4e62fcfca3371b8fbfc5b0646b83e06bfbbab5fac30ea09ea2bc76f1ea568c9be0444b2cc90517b20ca825f2d0eccd88e7175538b85d90ab390183ca6395535d34473af6b5a5b88f5a59ee7561573337ea819da0dcc3573a22974" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,256) #1 +depends_on:1 +3:exp:2:hex:"f97a3cfd91faa046b9e61b9493d436c4931f604b22f1081521b3419151e8ff0611f3a7d43595357d58120bd1e2dd8aed":hex:"":hex:"517289afe444a0fe5ed1a41dbbb5eb17150079bdd31e29cf2ff30034d8268e3b":hex:"88028d29ef80b4e6f0fe12f91d7449fe75062682e89c571440c0c9b52c42a6e0":hex:"c6871cff0824fe55ea7689a52229886730450e5d362da5bf590dcf9acd67fed4cb32107df5d03969a66b1f6494fdf5d63d5b4d0d34ea7399a07d0116126d0d518c7c55ba46e12f62efc8fe28a51c9d428e6d371d7397ab319fc73ded4722e5b4f30004032a6128df5e7497ecf82ca7b0a50e867ef6728a4f509a8c859087039c" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,256) #2 +depends_on:1 +3:exp:2:hex:"0f2f23d64f481cabec7abb01db3aabf125c3173a044b9bf26844300b69dcac8b9a5ae13232b43aa19cfe8d7958b4b590":hex:"":hex:"ec4c7a62acab73385f567da10e892ff395a0929f959231a5628188ce0c26e818":hex:"6b97b8c6b6bb8935e676c410c17caa8042aa3145f856d0a32b641e4ae5298648":hex:"7480a361058bd9afa3db82c9d7586e42269102013f6ec5c269b6d05f17987847748684766b44918fd4b65e1648622fc0e0954178b0279dfc9fa99b66c6f53e51c4860131e9e0644287a4afe4ca8e480417e070db68008a97c3397e4b320b5d1a1d7e1d18a95cfedd7d1e74997052bf649d132deb9ec53aae7dafdab55e6dae93" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,256) #3 +depends_on:1 +3:exp:2:hex:"53c56660c78481be9c63284e005fcc14fbc7fb27732c9bf1366d01a426765a31dc7a14d0eb5b0b3534e717a0b3c64614":hex:"":hex:"3aa848706ecb877f5bedf4ffc332d57c22e08747a47e75cff6f0fd1316861c95":hex:"9a401afa739b8f752fddacd291e0b854f5eff4a55b515e20cb319852189d3722":hex:"5c0eb420e0bf41ce9323e815310e4e8303cd677a8a8b023f31f0d79f0ca15aeb636099a369fd074d69889865eac1b72ab3cbfebdb8cf460b00072802e2ec648b1349a5303be4ccaadd729f1a9ea17482fd026aaeb93f1602bc1404b9853adde40d6c34b844cf148bc088941ecfc1642c8c0b9778e45f3b07e06e21ee2c9e0300" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,256) #4 +depends_on:1 +3:exp:2:hex:"f63c804404902db334c54bb298fc271a21d7acd9f770278e089775710bf4fdd73e45009ea9cb2a36ba1aa4bf39178200":hex:"":hex:"d165a13dc8cc43f3f0952c3f5d3de4136954d983683d4a3e6d2dc4c89bf23423":hex:"75106bc86d0336df85097f6af8e80e2da59046a03fa65b06706b8bbc7ffc6785":hex:"6363139bba32c22a0f5cd23ca6d437b5669b7d432f786b8af445471bee0b2d24c9d5f2f93717cbe00d1f010cc3b9c515fc9f7336d53d4d26ba5c0d76a90186663c8582eb739c7b6578a3328bf68dc2cec2cd89b3a90201f6993adcc854df0f5c6974d0f5570765a15fe03dbce28942dd2fd16ba2027e68abac83926969349af8" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,256) #5 +depends_on:1 +3:exp:2:hex:"2aaca9147da66c176615726b69e3e851cc3537f5f279fe7344233d8e44cfc99d4e171f080af9a6081bee9f183ac9e340":hex:"":hex:"d75a2a6eb66c3833e50f5ec3d2e434cf791448d618026d0c360806d120ded669":hex:"b643b74c15b37612e6577ed7ca2a4c67a78d560af9eb50a4108fca742e87b8d6":hex:"501dcdc977f4ba856f24eaa4968b374bebb3166b280334cb510232c31ebffde10fa47b7840ef3fe3b77725c2272d3a1d4219baf23e0290c622271edcced58838cf428f0517425d2e19e0d8c89377eecfc378245f283236fafa466c914b99672ceafab369e8889a0c866d8bd639db9fb797254262c6fd44cfa9045ad6340a60ef" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,256) #6 +depends_on:1 +3:exp:2:hex:"a2e4cd48a5cf918d6f55942d95fcb4e8465cdc4f77b7c52b6fae5b16a25ca306bef036716440db6e6d333d9d760b7ca8":hex:"":hex:"bfa591c7287f3f931168f95e38869441d1f9a11035ad8ea625bb61b9ea17591c":hex:"c00c735463bca215adc372cb892b05e939bf669583341c06d4e31d0e5b363a37":hex:"e7d136af69926a5421d4266ee0420fd729f2a4f7c295d3c966bdfa05268180b508b8a2852d1b3a06fd2ab3e13c54005123ef319f42d0c6d3a575e6e7e1496cb28aacadbcf83740fba8f35fcee04bb2ed8a51db3d3362b01094a62fb57e33c99a432f29fce6676cffbbcc05107e794e75e44a02d5e6d9d748c5fbff00a0178d65" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,256) #7 +depends_on:1 +3:exp:2:hex:"95a67771cba69011a79776e713145d309edae56fad5fd6d41d83eaff89df6e5ebe5b5164e31ecc51ba6f7c3c5199eb33":hex:"":hex:"065f693b229a7c4fd373cd15b3807552dd9bf98c5485cef361949d4e7d774b53":hex:"9afb62406f0e812c4f156d58b19a656c904813c1b4a45a0029ae7f50731f8014":hex:"f61b61a6e79a41183e8ed6647899d2dc85cdaf5c3abf5c7f3bf37685946dc28f4923dc842f2d4326bd6ce0d50a84cb3ba869d72a36e246910eba6512ba36cd7ed3a5437c9245b00a344308c792b668b458d3c3e16dee2fbec41867da31084d46d8ec168de2148ef64fc5b72069abf5a6ada1ead2b7146bb793ff1c9c3690fa56" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,256) #8 +depends_on:1 +3:exp:2:hex:"a459e1815cbca4514ec8094d5ab2414a557ba6fe10e613c345338d0521e4bf9062221392e2552e76cd0d36df6e6068eb":hex:"":hex:"0a3642b02b23b3ef62c701a63401124022f5b896de86dab6e6c7451497aa1dcc":hex:"c80514865901371c45ba92d9f95d50bb7c9dd1768cb3dfbc45b968da94965c6e":hex:"464e6977b8adaef307c9623e41c357013249c9ffd77f405f3925cebb69f151ce8fbb6a277164002aee7858fc224f6499042aa1e6322deee9a5d133c31d640e12a7487c731ba03ad866a24675badb1d79220c40be689f79c2a0be93cb4dada3e0eac4ab140cb91998b6f11953e68f2319b050c40f71c34de9905ae41b2de1c2f6" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,256) #9 +depends_on:1 +3:exp:2:hex:"252c2cad613e002478162861880979ee4e323025eebb6fb2e0aa9f200e28e0a1d001bc9a8f2c8c242e4369df0c191989":hex:"":hex:"9bcfc61cb2bc000034bb3db980eb47c76fb5ecdd40553eff113368d639b947fd":hex:"8b0565c767c2610ee0014582e9fbecb96e173005b60e9581503a6dca5637a26e":hex:"e96c15fe8a60692b0a7d67171e0195ff6e1c87aab844221e71700d1bbee75feea695f6a740c9760bbe0e812ecf4061d8f0955bc0195e18c4fd1516ebca50ba6a6db86881737dbab8321707675479b87611db6af2c97ea361a5484555ead454defb1a64335de964fc803d40f3a6f057893d2afc25725754f4f00abc51920743dc" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,256) #10 +depends_on:1 +3:exp:2:hex:"8be0ca6adc8b3870c9d69d6021bc1f1d8eb9e649073d35ee6c5aa0b7e56ad8a59d1265f7d51fdb65377f1e6edd6ae0e4":hex:"":hex:"da86167ac997c406bb7979f423986a84ec6614d6caa7afc10aff0699a9b2cf7f":hex:"e4baa3c555950b53e2bfdba480cb4c94b59381bac1e33947e0c22e838a9534cf":hex:"64384ecc4ea6b458efc227ca697eac5510092265520c0a0d8a0ccf9ed3ca9d58074671188c6a7ad16d0b050cdc072c125d7298d3a31d9f044a9ee40da0089a84fea28cc7f05f1716db952fad29a0e779635cb7a912a959be67be2f0a4170aace2981802e2ff6467e5b46f0ffbff3b42ba5935fd553c82482ac266acf1cd247d7" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,256) #11 +depends_on:1 +3:exp:2:hex:"d43a75b6adf26d60322284cb12ac38327792442aa8f040f60a2f331b33ac4a8f0682f8b091f811afacaacaec9b04d279":hex:"":hex:"7fd3b8f512940da7de5d80199d9a7b42670c04a945775a3dba869546cbb9bc65":hex:"2575db20bc7aafc2a90a5dabab760db851d754777bc9f05616af1858b24ff3da":hex:"0da7a8dc73c163014bf0841913d3067806456bbca6d5de92b85534c6545467313648d71ef17c923d090dc92cff8d4d1a9a2bb63e001dc2e8ab1a597999be3d6cf70ff63fee9985801395fbd4f4990430c4259fcae4fa1fcd73dc3187ccc102d04af7c07532885e5a226fc42809c48f22eecf4f6ab996ae4fcb144786957d9f41" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,256) #12 +depends_on:1 +3:exp:2:hex:"64352f236af5d32067a529a8fd05ba00a338c9de306371a0b00c36e610a48d18df99ed2c7608c870624b962a5dc68acd":hex:"":hex:"da416335e7aaf60cf3d06fb438735ce796aad09034f8969c8f8c3f81e32fef24":hex:"a28c07c21a2297311adf172c19e83ca0a87731bdffb80548978d2d1cd82cf8a3":hex:"132b9f25868729e3853d3c51f99a3b5fae6d4204bea70890daf62e042b776a526c8fb831b80a6d5d3f153237df1fd39b6fd9137963f5516d9cdd4e3f9195c46e9972c15d3edc6606e3368bde1594977fb88d0ca6e6f5f3d057ccadc7d7dab77dfc42658a1e972aa446b20d418286386a52dfc1c714d2ac548713268b0b709729" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,256) #13 +depends_on:1 +3:exp:2:hex:"282f4d2e05a2cd30e9087f5633089389449f04bac11df718c90bb351cd3653a590a7daf3c0de9ea286081efc4a684dfb":hex:"":hex:"2630b4ccc7271cc379cb580b0aaede3d3aa8c1c7ba002cf791f0752c3d739007":hex:"c31d69de499f1017be44e3d4fa77ecebc6a9b9934749fcf136f267b29115d2cc":hex:"c899094520e0197c37b91dd50778e20a5b950decfb308d39f1db709447ae48f6101d9abe63a783fbb830eec1d359a5f61a2013728966d349213ee96382614aa4135058a967627183810c6622a2158cababe3b8ab99169c89e362108bf5955b4ffc47440f87e4bad0d36bc738e737e072e64d8842e7619f1be0af1141f05afe2d" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,0,256) #14 +depends_on:1 +3:exp:2:hex:"13c752b9e745ce77bbc7c0dbda982313d3fe66f903e83ebd8dbe4ff0c11380e9f1a533095d6174164bd7c82532464ae7":hex:"":hex:"4f53db89b9ba7fc00767bc751fb8f3c103fe0f76acd6d5c7891ab15b2b7cf67c":hex:"582c2a7d34679088cca6bd28723c99aac07db46c332dc0153d1673256903b446":hex:"6311f4c0c4cd1f86bd48349abb9eb930d4f63df5e5f7217d1d1b91a71d8a6938b0ad2b3e897bd7e3d8703db125fab30e03464fad41e5ddf5bf9aeeb5161b244468cfb26a9d956931a5412c97d64188b0da1bd907819c686f39af82e91cfeef0cbffb5d1e229e383bed26d06412988640706815a6e820796876f416653e464961" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,0) #0 +depends_on:1 +3:exp:2:hex:"5cacc68165a2e2ee20812f35ec73a79dbf30fd475476ac0c44fc6174cdac2b556f885496c1e63af620becd9e71ecb824":hex:"e72dd8590d4ed5295515c35ed6199e9d211b8f069b3058caa6670b96ef1208d0":hex:"":hex:"":hex:"f1012cf543f94533df27fedfbf58e5b79a3dc517a9c402bdbfc9a0c0f721f9d53faf4aafdc4b8f7a1b580fcaa52338d4bd95f58966a243cdcd3f446ed4bc546d9f607b190dd69954450d16cd0e2d6437067d8b44d19a6af7a7cfa8794e5fbd728e8fb2f2e8db5dd4ff1aa275f35886098e80ff844886060da8b1e7137846b23b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,0) #1 +depends_on:1 +3:exp:2:hex:"8df013b4d103523073917ddf6a869793059e9943fc8654549e7ab22f7c29f122da2625af2ddd4abcce3cf4fa4659d84e":hex:"b571e66d7c338bc07b76ad3757bb2f9452bf7e07437ae8581ce7bc7c3ac651a9":hex:"":hex:"":hex:"b91cba4cc84fa25df8610b81b641402768a2097234932e37d590b1154cbd23f97452e310e291c45146147f0da2d81761fe90fba64f94419c0f662b28c1ed94da487bb7e73eec798fbcf981b791d1be4f177a8907aa3c401643a5b62b87b89d66b3a60e40d4a8e4e9d82af6d2700e6f535cdb51f75c321729103741030ccc3a56" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,0) #2 +depends_on:1 +3:exp:2:hex:"565b2b77937ba46536b0f693b3d5e4a8a24563f9ef1f676e8b5b2ef17823832f4ef3064ec29f5b7f9686d75a23d170e3":hex:"3b722433226c9dba745087270ab3af2c909425ba6d39f5ce46f07256068319d9":hex:"":hex:"":hex:"d144ee7f8363d128872f82c15663fe658413cd42651098e0a7c51a970de75287ec943f9061e902280a5a9e183a7817a44222d198fbfab184881431b4adf35d3d1019da5a90b3696b2349c8fba15a56d0f9d010a88e3f9eeedb67a69bcaa71281b41afa11af576b765e66858f0eb2e4ec4081609ec81da81df0a0eb06787340ea" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,0) #3 +depends_on:1 +3:exp:2:hex:"fc3832a91b1dcdcaa944f2d93cbceb85c267c491b7b59d017cde4add79a836b6d5e76ce9eabafed06e33a913e395c5e0":hex:"ffc5f6eefd51da64a0f67b5f0cf60d7ab43fc7836bca650022a0cee57a43c148":hex:"":hex:"":hex:"0e713c6cc9a4dbd4249201d12b7bf5c69c3e18eb504bf3252db2f43675e17d99b6a908400cea304011c2e54166dae1f20260008efe4e06a87e0ce525ca482bca223a902a14adcf2374a739a5dfeaf14cadd72efa4d55d15154c974d9521535bcb70658c5b6c944020afb04a87b223b4b8e5d89821704a9985bb010405ba8f3d4" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,0) #4 +depends_on:1 +3:exp:2:hex:"8009eb2cb49fdf16403bcdfd4a9f952191062acb9cc111eca019f957fb9f4451355598866952394b1eddd85d59f81c9d":hex:"09ff1d4b97d83b223d002e05f754be480d13ba968e5aac306d71cc9fc49cc2dd":hex:"":hex:"":hex:"9550903c2f02cf77c8f9c9a37041d0040ee1e3ef65ba1a1fbbcf44fb7a2172bd6b3aaabe850281c3a1778277bacd09614dfefececac64338ae24a1bf150cbf9d9541173a82ecba08aa19b75abb779eb10efa4257d5252e8afcac414bc3bb5d3006b6f36fb9daea4c8c359ef6cdbeff27c1068571dd3c89dc87eda9190086888d" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,0) #5 +depends_on:1 +3:exp:2:hex:"a6e4c9a8bd6da23b9c2b10a7748fd08c4f782fadbac7ea501c17efdc6f6087bdacdc47edf1d3b21d0aec7631abb6d7d5":hex:"c16ee0908a5886dccf332fbc61de9ec7b7972d2c4c83c477409ce8a15c623294":hex:"":hex:"":hex:"a52f93ccb363e2bdf0903622c3caedb7cffd04b726052b8d455744c71b76dee1b71db9880dc3c21850489cb29e412d7d80849cfa9151a151dcbf32a32b4a54cac01d3200200ed66a3a5e5c131a49655ffbf1a8824ff7f265690dffb4054df46a707b9213924c631c5bce379944c856c4f7846e281ac89c64fad3a49909dfb92b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,0) #6 +depends_on:1 +3:exp:2:hex:"59d6307460a9bdd392dfc0904973991d585696010a71e52d590a5039b4849fa434a0aafb95917cbf8c38fc5548373c05":hex:"0407b7c57bc11361747c3d67526c36e228028a5d0b145d66ab9a2fe4b07507a0":hex:"":hex:"":hex:"299aba0661315211b09d2861855d0b4b125ab24649461341af6abd903ed6f025223b3299f2126fcad44c675166d800619cf49540946b12138989417904324b0ddad121327211a297f11259c9c34ce4c70c322a653675f78d385e4e2443f8058d141195e17e0bd1b9d44bf3e48c376e6eb44ef020b11cf03eb141c46ecb43cf3d" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,0) #7 +depends_on:1 +3:exp:2:hex:"9ae3506aadbc8358696ba1ba17e876e1157b7048235921503d36d9211b4303429abf7d66afee5d2b811cba358bbc527d":hex:"0d645f6238e9ceb038e4af9772426ca110c5be052f8673b8b5a65c4e53d2f519":hex:"":hex:"":hex:"5f032c7fec6320fe423b6f38085cbad59d826085afe915247b3d546c4c6b174554dd4877c0d671de9554b505393a44e71f209b70f991ac8aa6e08f983fff2a4c817b0cd26c12b2c929378506489a75b2025b358cb5d0400821e7e252ac6376cd94a40c911a7ed8b6087e3de5fa39fa6b314c3ba1c593b864ce4ff281a97c325b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,0) #8 +depends_on:1 +3:exp:2:hex:"96ae3b8775b36da2a29b889ad878941f43c7d51295d47440cd0e3c49991931091fe022a6fc0237b055d4d6a7036b18d5":hex:"1e40e97362d0a823d3964c26b81ab53825c56446c5261689011886f19b08e5c2":hex:"":hex:"":hex:"e707cd14b06ce1e6dbcceaedbf08d88891b03f44ad6a797bd12fdeb557d0151df9346a028dec004844ca46adec3051dafb345895fa9f4604d8a13c8ff66ae093fa63c4d9c0816d55a0066d31e8404c841e87b6b2c7b5ae9d7afb6840c2f7b441bf2d3d8bd3f40349c1c014347c1979213c76103e0bece26ad7720601eff42275" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,0) #9 +depends_on:1 +3:exp:2:hex:"33f5120396336e51ee3b0b619b5f873db05ca57cda86aeae2964f51480d149926f1f6e9807ba5393edcf3cb4e4bb6113":hex:"3709605af44d90196867c927512aa8ba31837063337b4879408d91a05c8efa9f":hex:"":hex:"":hex:"8b8291126ded9acef12516025c99ccce225d844308b584b872c903c7bc6467599a1cead003dc4c70f6d519f5b51ce0da57f53da90dbe8f666a1a1dde297727fee2d44cebd1301fc1ca75956a3fcae0d374e0df6009b668fd21638d2b733e6902d22d5bfb4af1b455975e08eef0ebe4dc87705801e7776583c8de11672729f723" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,0) #10 +depends_on:1 +3:exp:2:hex:"ad300b799005f290fee7f930eebce158b98fb6cb449987fe433f955456b3530006aa2514e4bd114edf7ac105cfef2772":hex:"87ada711465e4169da2a74c931afb9b5a5b190d07b7af342aa99570401c3ee8a":hex:"":hex:"":hex:"80d7c606ff49415a3a92ba1f2943235c01339c8f9cd0b0511fbfdf3ef23c42ffff008524193faaa4b7f2f2eb0cfa221d9df89bd373fe4e158ec06fad3ecf1eb48b8239b0bb826ee69d773883a3e8edac66254610ff70b6609836860e39ea1f3bfa04596fee1f2baca6cebb244774c6c3eb4af1f02899eba8f4188f91776de16f" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,0) #11 +depends_on:1 +3:exp:2:hex:"130b044e2c15ab89375e54b72e7baae6d4cad734b013a090f4df057e634f6ff065fd6ac602cd44107d705dbc066e52b6":hex:"f374aba16f34d54aae5e494505b67d3818ef1c08ea24967a76876d4361379aec":hex:"":hex:"":hex:"5d179534fb0dba3526993ed8e27ec9f915183d967336bb24352c67f4ab5d7935d3168e57008da851515efbaecb69904b6d899d3bfa6e9805659aef2942c4903875b8fcbc0d1d24d1c075f0ff667c1fc240d8b410dff582fa71fa30878955ce2ed786ef32ef852706e62439b69921f26e84e0f54f62b938f04905f05fcd7c2204" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,0) #12 +depends_on:1 +3:exp:2:hex:"716430e999964b35459c17921fe5f60e09bd9ab234cb8f4ba4932bec4a60a1d59533b711e061b07d505da707cafbca03":hex:"372ae616d1a1fc45c5aecad0939c49b9e01c93bfb40c835eebd837af747f079d":hex:"":hex:"":hex:"a80d6a1b2d0ce01fe0d26e70fb73da20d45841cf01bfbd50b90d2751a46114c0e758cb787d281a0a9cf62f5c8ce2ee7ca74fefff330efe74926acca6d6f0646e4e3c1a1e52fce1d57b88beda4a5815896f25f38a652cc240deb582921c8b1d03a1da966dd04c2e7eee274df2cd1837096b9f7a0d89a82434076bc30173229a60" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,0) #13 +depends_on:1 +3:exp:2:hex:"7679f154296e6d580854826539003a82d1c54e2e062c619d00da6c6ac820789b55d12941b0896462e7d888e5322a99a3":hex:"ba4d1ed696f58ef64596c76cee87cc1ca83069a79e7982b9a06f9d62f4209faf":hex:"":hex:"":hex:"10dc7cd2bb68c2c28f76d1b04ae2aa287071e04c3b688e1986b05cc1209f691daa55868ebb05b633c75a40a32b49663185fe5bb8f906008347ef51590530948b87613920014802e5864e0758f012e1eae31f0c4c031ef823aecfb2f8a73aaa946fc507037f9050b277bdeaa023123f9d22da1606e82cb7e56de34bf009eccb46" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,0) #14 +depends_on:1 +3:exp:2:hex:"8ca4a964e1ff68753db86753d09222e09b888b500be46f2a3830afa9172a1d6da59394e0af764e2f21cf751f623ffa6c":hex:"eb8164b3bf6c1750a8de8528af16cffdf400856d82260acd5958894a98afeed5":hex:"":hex:"":hex:"fc5701b508f0264f4fdb88414768e1afb0a5b445400dcfdeddd0eba67b4fea8c056d79a69fd050759fb3d626b29adb8438326fd583f1ba0475ce7707bd294ab01743d077605866425b1cbd0f6c7bba972b30fbe9fce0a719b044fcc1394354895a9f8304a2b5101909808ddfdf66df6237142b6566588e4e1e8949b90c27fc1f" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,256) #0 +depends_on:1 +3:exp:2:hex:"5d3286bc53a258a53ba781e2c4dcd79a790e43bbe0e89fb3eed39086be34174bc5422294b7318952ace7055ab7570abf":hex:"2dba094d008e150d51c4135bb2f03dcde9cbf3468a12908a1b025c120c985b9d":hex:"793a7ef8f6f0482beac542bb785c10f8b7b406a4de92667ab168ecc2cf7573c6":hex:"2238cdb4e23d629fe0c2a83dd8d5144ce1a6229ef41dabe2a99ff722e510b530":hex:"d04678198ae7e1aeb435b45291458ffde0891560748b43330eaf866b5a6385e74c6fa5a5a44bdb284d436e98d244018d6acedcdfa2e9f499d8089e4db86ae89a6ab2d19cb705e2f048f97fb597f04106a1fa6a1416ad3d859118e079a0c319eb95686f4cbcce3b5101c7a0b010ef029c4ef6d06cdfac97efb9773891688c37cf" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,256) #1 +depends_on:1 +3:exp:2:hex:"c2a566a9a1817b15c5c3b778177ac87c24e797be0a845f11c2fe399dd37732f2cb1894eb2b97b3c56e628329516f86ec":hex:"13ce4d8dd2db9796f94156c8e8f0769b0aa1c82c1323b61536603bca37c9ee29":hex:"413dd83fe56835abd478cb9693d67635901c40239a266462d3133b83e49c820b":hex:"d5c4a71f9d6d95a1bedf0bd2247c277d1f84a4e57a4a8825b82a2d097de63ef1":hex:"b3a3698d777699a0dd9fa3f0a9fa57832d3cefac5df24437c6d73a0fe41040f1729038aef1e926352ea59de120bfb7b073183a34106efed6278ff8ad844ba0448115dfddf3319a82de6bb11d80bd871a9acd35c73645e1270fb9fe4fa88ec0e465409ea0cba809fe2f45e04943a2e396bbb7dd2f4e0795303524cc9cc5ea54a1" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,256) #2 +depends_on:1 +3:exp:2:hex:"a33288a96f41dd54b945e060c8bd0c094f1e28267cc1dcbba52063c1a9d54c4d36918c977e1a7276a2bb475591c367b7":hex:"6aa528c940962638dc2201738850fd1fe6f5d0eb9f687ff1af39d9c7b36830d9":hex:"37ee633a635e43af59abdb1762c7ea45bfe060ec1d9077ecd2a43a658673f3c7":hex:"2eb96f2e28fa9f674bb03ade703b8f791ee5356e2ee85c7ed5bda96325256c61":hex:"db2f91932767eb846961ce5321c7003431870508e8c6f8d432ca1f9cee5cdc1aed6e0f133d317eb6990c4b3b0a360cdfb5b43a6e712bd46bca04c414868fab22c6a49c4b89c812697c3a7fbfc8ddf10c8aa5ebf13a09fd114eb2a02a07f69786f3ce7fd30231f22779bc8db103b13fa546dbc45a89a86275281172761683d384" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,256) #3 +depends_on:1 +3:exp:2:hex:"5f37b6e47e1776e735adc03d4b999879477ff4a206231924033d94c0114f911b7d12d62c79c9f6234ae0314156947459":hex:"92d4d9fab5f8bf5119f2663a9df7334f50dcde74fb9d7732f7eba56501e60d54":hex:"c9aef0d7a9ba7345d08b6d5b5ce5645c7495b8685e6b93846ffcf470f5abd40d":hex:"50d9d1f5074f7d9f1a24a9c63aa47b94da5ba78db1b0f18e4d4fe45c6875813c":hex:"20d942bbd7d98700faa37e94d53bf74f2d6bd1d8c95c0b88d842c4857797d59e7c8788aeeac29740122f208f703bf35dc32b0035db0648384feb6aa17a3274bc09b2d2b746c5a06fd82f4469fb86131a49482cb7be7d9b4b95042394cfb18b13f333ec0fe5c227bf1d8f33ecb2e42e358b6c3e034cb585331bd1d27f638029b9" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,256) #4 +depends_on:1 +3:exp:2:hex:"2311c5afd64c584484b2729e84db80c0b4063fe9ca7edc83350488d7e67264a06a6dfd975a0dc7b72df1f107c4b3b3a6":hex:"2abd870ec5fe26ed14dfa57a3309f920131b70580c3639af2645cd1af93db1b1":hex:"c6e532a3b25653b6002aed5269cc2118749306e736bde039d4d569d4f967773f":hex:"5e7d26c4da769c373092b2b4f72b109fe34bdb7d169ea38f78ebae5df4a15759":hex:"cacaeb1b4ac2305d8714eb50cbe1c67c5a2c0bbc7938fdfdcafef7c85fc40becbf777a4cfb6f14c6eee320943a493d2b0a744a6eb3c256ee9a3763037437df9adce3e2260f0c35e958af0edb5a81debd8bdaf2b8bb2b98b9186e5a222a21609ff58df4cbe1d4898d10d6e7c46f31f5cb1041bfd83a5fb27d5c56c961e91403fc" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,256) #5 +depends_on:1 +3:exp:2:hex:"362ece9d330e1172a8f9e50258476d0c79c3ee50346524ba12d970ee3a6ef8c5cf11bcb4d9d51311ceacfca8705e833f":hex:"abb5a8edde02e526449284ecc31bc713383df3ed085f752e3b6a32f305861eed":hex:"746302ab1f4a86b17546bea762e929360f2e95c7788a63545a264ef997c8c65e":hex:"b907c5b2a8833a48e56e819228ce9a050b41b3309f5ca37bed720311d92b33af":hex:"73c7131a558350590053580873ef956ff952f2aa6ff1bea452e013d1bc2afddea2311756dbe756e63ba6258480c48f3f6c1319b5f572f67ca530af09e39413d1d432bea8f89206619618cb0e7c88e9f2033639d0eb0efc20616b64f940da99b88231984c3fb23f19e890576f555fde394dbd4351f17a7ffd5c369379001bda03" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,256) #6 +depends_on:1 +3:exp:2:hex:"cf614bc29946bc0095f415e8bdeda10aab05392f9cc9187a86ea6ec95ee422e177fb5ec22dc0432cc13f4693e2e3bd9a":hex:"e4ce77914ffbc5fddf1fb51edfafdc196109139b84c741354135ec8d314c7c43":hex:"e1e83ee1205acaf6164dc287aec08e5b32789e5be818078db39e53cad589db51":hex:"4e20c0226d5e1e7e805679f03f72452b5bea2d0ba41e0c12329bf60eb3016dd1":hex:"838fdf1418a746aa52ae4005d90c3fd301f648c5770ffef2a9f3912e37a93850cc4b8bfcce910aead0cb75958823b1a62e283901c5e4a3980e4ea36257458e2e4953555819b8852a26489b1d74821f80c9908469b43f124ff7ea62497c36159a47353098a1b9ec32e54800d6704371cc37f357ad74aacc203e9b6db97f94d0c4" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,256) #7 +depends_on:1 +3:exp:2:hex:"a8da1d3e233f393fd44d204c200202f7d01896e72c5ac652940cfd15b5d4b0bd0a112b4cb0890af0a495e0f49fcf6874":hex:"d2e32799bc822b8d033299bdf63dc35774f7649e935d25be5b10512c430d1bda":hex:"920a82d76fcd2cd106ada64bba232b7b2344f3afe6b1d1d20ee8795144571009":hex:"eeaac5878275372025f8231febed64db6a11273c3c00d625fc80a95f18ad7d3f":hex:"5f6dae489b53d89027b2cc333c700f090152d77b3eaf01d47f56ce6eca9893ef877b4cb560fab0fbdb34e3d1c6cd8480b33c053d2661a10aa531df4961b97d659c7492584236582b3fe701055efa59c328194cd1e07fcffd910d9ee01b7b9e8c8fda7f7ac01a8e203b8b26eb8078a9b9a5021562c44af24089e3ef84c1d5a6bd" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,256) #8 +depends_on:1 +3:exp:2:hex:"a77b1ed4ecaa650374e1052c405f1d88881c25c87d13dbe1334d8c1a847fa76b05c143e2f145db216fe7be9ed23635d0":hex:"b5c750968ff09ed251d4a1c05342ac843db5246b19045728a634fa4f6e752e54":hex:"ff5937bcd01a363696bf8e40adc8e4ab3e56dbf7e7d09451c99e538785fe6697":hex:"4acb34eea8266badcf8f6557a0eecf3eb4d7a295c876d6175598cb66a388efb8":hex:"ec13eadfcc84e77d2a2efa1a2cd8b1355587cb27feb3d19d75b37f0446333ddb8236e751c63b7a6e595ec24a25051a696dbe8c062dd8896d1446db228a2f10e8094ee07e7ee648ed6bebb2f5ec5aae24c9c640665c28355cc11c116795ecc070790f7fdfc4398900311b6695d5da0175091ed1828d2731085bfb4a20bd86cce0" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,256) #9 +depends_on:1 +3:exp:2:hex:"491686c781e83eb4e21d9989e8d718100b0d21a2c56295888baef1a65f219651499085296d21065feabf3106101c8d6f":hex:"d208a72f9ae34f0817669fb04f49239dd31700f3dc9a93db8d75fb79f9b686c1":hex:"9ffc61893a293a864008fdd56d3292600d9e2ec8a1ea8f34ac5931e968905a23":hex:"4ff3a397dfdae0912032a302a5e7a07dceca8d9013a21545689319b7c024cd07":hex:"3c258ebf2203fca3b322ad1b016e21c7f5c148425f81e4fb0a0e462dce9dfa569c37a006527768297a5b68461b08912642a341b88c85597e30e7561206886098c4e2d861f11513f0ffdbbc78d3a2dd60c105abbb33c5e05ae27081b690fb8b3610917aa9bf1a4ad74481b5ff8334f14e5ad6a6a1eb2259476078076fb7e3a992" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,256) #10 +depends_on:1 +3:exp:2:hex:"36a5267eeeb5a1a7d46de0f8f9281f73cd9611f01198fdaa78c5315205e5a177b66b5337970df36219321badacc624eb":hex:"c2a7b164949da102bece44a423197682ff97627d1fe9654266b8527f64e5b386":hex:"a977e2d8637b019c74063d163bb25387dc56f4eb40e502cefc5ae6ad26a6abdc":hex:"c5c9819557b1e7d8a86fa8c60be42993edc3ef539c13d9a51fb64b0de06e145e":hex:"b471711a4fc7ab7247e65d2c2fe49a50169187187b7978cd2fdb0f8318be3ec55fc68ed4577ad9b42cbb57100b5d35ac86c244c4c93a5b28c1a11c2dfe905d608ec7804dec5bb15cf8d79695534d5e13a6a7e18a887ec9cf184da0cbbc6267f3a952a769403bafcdbb559401be0d8b3300ea7258b4026fc892175efd55ba1a67" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,256) #11 +depends_on:1 +3:exp:2:hex:"a76b0366df89e4073a6b6b9c04da1d6817ce26f1c4825cad4097bdf4d7b9445e773d3cc3290176773847869be528d1a4":hex:"1bfd3bcfb9287a5ad055d1b2b8615fa81c94ac24bc1c219a0f8de58789e0404a":hex:"edd879fa56f21d93029da875b683ce50f6fdc4c0da41da051d000eed2afefefa":hex:"f528ffd29160039260133ed9654589ce60e39e7f667c34f82cda65ddcf5fff14":hex:"39d1ff8848e74dd2cdc6b818ad69823878062116fdf1679942f892c7e191be1c4b6ea268ecdff001b22af0d510f30c2c25b90fc34927f46e3f45d36b0e1848b3a5d54c36c7c65ee7287d325dfbb51b56a438feb6650ce13df88bf06b87ac4a35d2a199ea888629fb0d83f82f0ea160dc79ed220d8ef195b9e80c542f60c2d320" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,256) #12 +depends_on:1 +3:exp:2:hex:"46571e1df43e5e141235e2a9ec85bb0faf1dc0566031e14d41a2fbd0315653ecb60ef6a3347967519aabeaf748e4e991":hex:"759fd8593e3688b23c4a003b655311770d670789878570eb3b155a8e6c2d8c45":hex:"033128460b449e1accb0e9c54508759ddc2538bc64b51e6277553f0c60a02723":hex:"a5e4a717240bdeac18a0c0e231a11dc04a47d7550f342fa9a7a5ff334eb9327d":hex:"9d222df1d530ea7f8f2297a0c79d637da570b48042ecddded75956bba0f0e70b271ffa3c9a53bada6ee1b8a4203c22bfde82a5e2eb1b150f54c6483458569422c1a34a8997d42cc09750167a78bf52a0bd158397af9f83caabe689185c099bf0a9a4853dd3cf8b8e89efebb6a27dba873e65e9927741b22968f2875789b44e01" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,256) #13 +depends_on:1 +3:exp:2:hex:"d63980e63bbe4ac08d2ac5646bf085b82c75995e3fdfc23bb9cc734cd85ca7d2d33ed1dcae13fb634ba08272d6697590":hex:"acd0da070072a5340c4f5f4395568e1a36374e074196ae87f3692ee40487e1df":hex:"f567677b5e12e26f3544be3da9314c88fc475bf84804a89a51f12b191392c02b":hex:"c01cc7873e93c86e2bfb8fc984cfc2eab5cc58eeef018fedb5cba5aedd386156":hex:"b133446f633bcb40724bbf9fa187c39a44b9c094a0a0d40e98977e5466dc2c9adf62a5f4551eeb6406a14658de8a0ed7487c3bf6277e811101284a941745ce16176acc875f1435e14161772fa84609e8123c53dd03cbb868030835c0d11d8d6aa04a1b6f908248b028997737f54735ec4ed7a81fc868199ffb61a779d9340334" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-256,256+128,256,256) #14 +depends_on:1 +3:exp:2:hex:"3d99f9b7ac3a2fbe9cf15d960bf41f5588fc4db1e0d2a5c9c0fe9059f03593fb411f504bb63a9b3afa7ffa1357bb48be":hex:"0bb5ebd55981a25ba69164da49fa92f2871fd3fc65eb30d0f0d0b8d798a4f8f2":hex:"288e948a551284eb3cb23e26299955c2fb8f063c132a92683c1615ecaed80f30":hex:"d975b22f79e34acf5db25a2a167ef60a10682dd9964e15533d75f7fa9efc5dcb":hex:"ee8d707eea9bc7080d58768c8c64a991606bb808600cafab834db8bc884f866941b4a7eb8d0334d876c0f1151bccc7ce8970593dad0c1809075ce6dbca54c4d4667227331eeac97f83ccb76901762f153c5e8562a8ccf12c8a1f2f480ec6f1975ac097a49770219107d4edea54fb5ee23a8403874929d073d7ef0526a647011a" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,0) #0 +depends_on:2:3 +3:exp:3:hex:"a1dc2dfeda4f3a1124e0e75ebfbe5f98cac11018221dda3fdcf8f9125d68447abae5ea27166540515268a493a96b5187":hex:"":hex:"":hex:"":hex:"228293e59b1e4545a4ff9f232616fc5108a1128debd0f7c20ace837ca105cbf24c0dac1f9847dafd0d0500721ffad3c684a992d110a549a264d14a8911c50be8cd6a7e8fac783ad95b24f64fd8cc4c8b649eac2b15b363e30df79541a6b8a1caac238949b46643694c85e1d5fcbcd9aaae6260acee660b8a79bea48e079ceb6a5eaf4993a82c3f1b758d7c53e3094eeac63dc255be6dcdcc2b51e5ca45d2b20684a5a8fa5806b96f8461ebf51bc515a7dd8c5475c0e70f2fd0faf7869a99ab6c" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,0) #1 +depends_on:2:3 +3:exp:3:hex:"067fa0e25d71ea392671c24f38ef782ab3587a7b3c77ea756f7bd496b445b7a3ce6acc722768ca0e03784b2217bc60e4":hex:"":hex:"":hex:"":hex:"16eaa49510ffad8cc21ec32858640a0d6f34cb03e8649022aa5c3f566b44e8ace7c3b056cf2a44b242de09ae21dba4275418933611875841b4f0944a8272848c5dc1aad685935e12511d5ee27e9162d4bb968afab53c4b338269c1c77da9d78617911ed4390cb20e88bf30b74fda66fe05df5537a759061d3ffd9231d811e8b34213f22ab0b0ddafff7749a40243a901c310776e09d2e529806d4d6f0655178953c16707519c3c19b9aaa0d09fb676a9d23525c8bc388053bfccfbc368e3eb04" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,0) #2 +depends_on:2:3 +3:exp:3:hex:"9f76503e84727297bc7056c7af917a1c98baa725295457db4fcf54ed09af7f15f39c46142b85a67b4b323594b7e97bde":hex:"":hex:"":hex:"":hex:"7d6a8bc5a7f057ceed6109bfac2486f80f81373b6b31d062aa1fad6d9eda5874867b9ef007ba5a92ba8f3fca624bfd9f7ee5770bbeb0391394fef783c16a7f003c06e5469bab03445bb28a2111def415d162e40472d3e5ae628c5c63170bb19f741c79a5331c883c12bca429f518bf71b14683a071b6c6e1e55d8c7a0f3942bc12a103556c49ca173e498b3b4a15027145cdaeb195bc8a7e1aa82ebdf6ecd516481a4d21f400d0d71b5894545888fee8beed80d3251647947f5abc4735b47fd0" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,0) #3 +depends_on:2:3 +3:exp:3:hex:"e242e5b3b49d87289fe02840dc742a2a6cd9490fe2cce581833dddb1edc0d103f987f5de5c68cd345c81b032ea55f36d":hex:"":hex:"":hex:"":hex:"3a858345dfaf00defdf6c83114b760ef53b131fbf14bcc4052cd948820eee78a11cbbd8f4baa308e1d187fced74cbf019c1080d9efffd93fda07df051433876d9900c1f9ad36ea1cb04989bb0c55fd6d01e46923f3bc8887ac00ebd4710212114165355361e240b04232df55a81add3fb363f0d4c9c5e3d313bc7caac7d49dca8517cedacf571fde9686ae93d901fb9b17097a638bb9899cfab0ebc9d1f8a43c2eed7c9f326a711d0f5b9cfc5166c9b561824cbd7775ec601ca712b3ddaaa05b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,0) #4 +depends_on:2:3 +3:exp:3:hex:"42cc17365f5ea5fd22bdc4ade715e293064d6794d82bed5b77c4c107a73de1f76d759e4b191ba01e0ed5dea788ab018d":hex:"":hex:"":hex:"":hex:"de06dee8c8fe453aa03ac2546c39f5cda12412864d52ed5cbd0d4905dd226746d50d1af9fd3e1d90de0f16295cb7f6f4d3271ef00564709df4b05eb9f8adc0f8e8522b05b9f32c37d8526813898b9f71db57fc8328e3b79144482e8aa55c83934d6e097e43ec6d0bc32edaf8c0e6ca449b2e8388b32b286e2d4f85266b0605fb99d1a647565c95ff7857bcab73662b7218719189d792514edca2b1d0cdcd9b6347e132ef4c323da24ad5afd5ed6f96d27b0f879288e962fa0baca3d5b72b5c70" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,0) #5 +depends_on:2:3 +3:exp:3:hex:"d57024a230b825b241c206f7b55e2114461ecc9b75353f12ac1d9ad7e7871481fe401c320f74afdb07f566ea500b0628":hex:"":hex:"":hex:"":hex:"e8930bd55a0a5a6d83a9b3b2cde7085c2ae467ea4a2e65ca303697d492ca878bcb801769eb1b7ec564586ec8b36d350e192c4fbf03a98be0ddecf56d465914ba353ed7734d19a680fc4593d9234c4ac8c23b7dfa1e26b013f590cca43b9fef126121b4842496b11dea3ef5e981cb357341f03f92a546a62609236ded6f7d814456acc0596d555cbdc02cbd47dae2caa1897831ea464225922c6600a8bb92e711653067f83b21e1df054309858948c11a1399736fc8391c5b0fc35629abfa5650" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,0) #6 +depends_on:2:3 +3:exp:3:hex:"059ded79125b2d56d9d52bcc950bf608d1a2373515dafcc81efb6588005a5722d8f5f4181f9f2a316c93fdfbadf50e75":hex:"":hex:"":hex:"":hex:"db65d2000632c3d7009c227e99c210e5897f4d7edae608a242b5a4f17708613f8c19a4dd65d6bc3ca57737c9bfdcca068288eea49440af768d1fc977c32b065bb71aa3d8c4d77c9e8e8a6166f332a247978a6c41ed253a1b68ad934a3416b40344a681de28638f00b0a0ffb75514c3f62253372f809906043de35e4805b8e962e5eb957f04212835f802b2c0b3e76c7cf239c89adf31909cd6224d542d929f9b20a10ab99a7c631e4e6188fe2ba8f552c9c88fdadb528679fe950431641b8f37" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,0) #7 +depends_on:2:3 +3:exp:3:hex:"4630406b475b1263b6078e93e5d4282205958d94eb97d1e66b429fb69ec9fccd0dd9982c338df935e929c42fab66adaf":hex:"":hex:"":hex:"":hex:"5d80ec072f550981bcaac6787c0488cc470406249ec80f4bf11050630227f8b5ac6b3b369db237d7c24a0980dffe8d3abd9b64fd4efa492349bd4eb6902edb94553546110227d7de5a864ddae8b9fed8de9f0df9c596e39de903fda323ee6f788831452eb9e49c5eef3e058b5bf84f61f735a93e042bb9e458df6b25f42a6eb8fb03d437cfab757fab4990c721a757eaa5e9048208abbcce6e52f177b20dcf52f1fa551a92b68bcdb01680855b8f79131266378cd1f0c2a4141c9675f01d1e48" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,0) #8 +depends_on:2:3 +3:exp:3:hex:"6ea9c6f784f12a9707ceac8a7162ee5381dc893ee139f8f4b4d93db266829db4ae92bc52ff860d8ecdc9fc16bd070130":hex:"":hex:"":hex:"":hex:"234366f1591cfe244956f9496cdf446e0d390ba64beaa066945b1b4c5337dded2619dd2bd0133a5d612bab7c251ab79e3951cb134894c422553fc8cc7b3ccb29c20adbf52dda35af779142d7efc735342db2ee067649fda25f3e8a74f8e4f6620cf5a17cb943602609cafb85bdf482873efa4c74928cc0d69444b72aa6bc72694a3a21c6a721aa4e0fccab0a98aef375a37a3e8a15dccad13b6d70b3483581004642d879804aa00cba207b51affca43490bb98f67953265574366ec3829e67aa" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,0) #9 +depends_on:2:3 +3:exp:3:hex:"5c13056be92a7f71236fcfef460298acc8595dd474310727f5ccb9a7acb2254ac7226f86349e20e2aca737068ab0f2ce":hex:"":hex:"":hex:"":hex:"16d415eddefa4dc295a64adcbbcb8c6fe8c8f123c6b09dc08a56d723cff5978cc120fd0a68a2f4c202c220db372d3128ef52385d5786c12dfc6e60ecfc3461a09fa80453e2b1b6365eaeb4df602d192aacb25ab6b4a59689d4bf8d1c4c42a32779f62b06baca6461f154cf40901f5787c1aa2bf67cbfe7546ef5b2bdff20790d8c72d077d48c59c92d1af90a90ccfcdf643dd9d6cee0b1faf5f2f35cfd01d2077ced5e2d013ec1e09336dfab9d9e51ba9a3a2837306213bca2d79abf8dc3282c" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,0) #10 +depends_on:2:3 +3:exp:3:hex:"38f08a099fc2d405c32d1e0f867e5450d5ee0d53783c31de9ddeae46d962999da01f13a43320c715612cedb920cf12eb":hex:"":hex:"":hex:"":hex:"079ce7a5b540cae96c2883e95acde3039048a6c45a2d259cc648639e7205392d91fa3ee080e615f1e0741a0e536c9e05844651b93461bfc547fb452fec61f853e1bd6e08eabd0cf1c5f84f85eca9d42b53d1e5bae51be5fd35189e4f1c02b843c6361fccf4ca6648bf30a23ccb8ebc16fcf158746eb39cd96f19d46707c001e11c4e0e8ccbc89fec66c69fc92843b6bb2ee1cc7595b65ba89ccaccd6130a8417faf705e8e203e90ee64ae970c409389b5cd0ca80a4e40b642689741691b20621" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,0) #11 +depends_on:2:3 +3:exp:3:hex:"0863c868c32442a1a64095a71ab6ae2f9e61c119b58dfa4f34efd26593bbbf68bc407904c43300452dd4e61df47fa98f":hex:"":hex:"":hex:"":hex:"585334828cf531828fc7127fee0c926f85b8e71e8522ea921296dc62b83a09a00397cd45e0664d0f26fa24edd3e3d8ecef8fdd77ab22431d4066f0efaf3882c97f179a7060efe9e8cba5d8145bebd502c0e09ee791231d539983c08860d7783edb58440d193ed82bc77c27723381a0da45bb1fc2a609f8b73b90446e39869a5af5038aff603b44db9771113927a5297fdc3450eaa228e313afe43c31b0a95b476c5ca312b4f589f809749481722cea9990c02b647976aa6c6f02ce1e5e6ea6df" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,0) #12 +depends_on:2:3 +3:exp:3:hex:"a41ad223e41e2bb9c131ec945ca310600ab00c51f6e4fcddd803bd9ab9be8af5483373838894d32745a81ba9d6967751":hex:"":hex:"":hex:"":hex:"95ca31a7eeebdd2348cf1d43411d2c35faffdbcaed4052d50cf92f0e9d2e757686b72d631a56ca98b68215e7014cfed943abc1e13441c1d660f13adf2188d0975154e1b42a592a62a43b57f82cc21a428873a92fda83abe420efb5233140e4d6c7852cf81e85961fa5c606c5f33e06077f414b0f814cbbe50cc606bffbd474364e608825fdaaf5e74d862795539be8697e2ce05d71446881e3f65bb54ed95e941586988f6e0c34e1beef426696e9dbd9a214013d826a8c99a2a686d8402c583f" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,0) #13 +depends_on:2:3 +3:exp:3:hex:"62a26c1327c0ebf8b40691fb4c8f812e81f5474b0c7db70aa9424110fee3a05e41c0cf2e87210e34d0c6bffc269bf2ba":hex:"":hex:"":hex:"":hex:"6e20a00df1af37e6cc55e580ba21335111eb375395343618df7d630b9dc234496e3964cd45c5de34bda46a28964f6148704c30925feeaecae0574038434cd33c1dd943207a8dbdcd72dc9ecb76a25728b3c2a8ac13c1de3a126d7d43a46e12e0d0ca8991469e582b78ef6aa691b5a0e3e85cba7d7aea3c1e8e031674e85f5af36546eb2a0a28d4ffbaa316a9a6c944fce291cc0c235e8499882eb62b22b548ae07cf9430329e009f4443cb94f7a14e8661166b0d681dcec867205abed48145e9" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,0) #14 +depends_on:2:3 +3:exp:3:hex:"fd54cf77ed35022a3fd0dec88e58a207c8c069250066481388f12841d38ad98591f9c02a1d205cdbcdf4d93054fde5f5":hex:"":hex:"":hex:"":hex:"f6d5bf594f44a1c7c9954ae498fe993f67f4e67ef4e349509719b7fd597311f2c123889203d90f147a242cfa863c691dc74cfe7027de25860c67d8ecd06bcd22dfec34f6b6c838e5aab34d89624378fb5598b9f30add2e10bdc439dcb1535878cec90a7cf7251675ccfb9ee37932b1a07cd9b523c07eff45a5e14d888be830c5ab06dcd5032278bf9627ff20dbec322e84038bac3b46229425e954283c4e061383ffe9b0558c59b1ece2a167a4ee27dd59afeeb16b38fbdb3c415f34b1c83a75" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,256) #0 +depends_on:2:3 +3:exp:3:hex:"5e919d353357671566d2c6ab6e1acd46f47d0c878fe36114d7fea9fecb88a3a27efca9e3d1e1b09d7f16832f3af75141":hex:"":hex:"442f17cb3cb1482a19729bfd58f46f6ef16285554892c01b0718968d6e011082":hex:"f9557c93eb841bfd7b5d4b71da928efcbe3f55e1870493ef90d16eb238380d65":hex:"36902134f1989cfe7eb518a56c06aada98997d9bacd04aee21f879a57b515ca3b5e0c2d5fed05ca1a8b054e8c46b389d9d9186feb0abe8e2e60b3a267281cc5b4b7341116ced35a0e07bc2b0330bbfd8b07f07248fa6d8fc5c9df13445324162bdfa22a91ba71453ab123c92f91c70b8bd540b3b180b11ab45ae2c59e57c7c43dab7576594959a96eb502d182267c86576b1846ccee1a694cabdfb42e0c8214192efb502926fa3c27eed020b7cc8866a5af9d838a57e78bf7acd230e1f4d8361" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,256) #1 +depends_on:2:3 +3:exp:3:hex:"7a5d1efc9b7043060cabd67de7fe22740bcd6a8ceb355d69f118829a2b3c92006a5633e613f8769c1114b1822ffb5408":hex:"":hex:"f2ad962d992434468681c644587639901ff74e2bbdd8761961ec34edc4a0c36d":hex:"75aae0d1bca9484c89fc4de3d1b34275ef0656775f3f8c96f2bbc50401aaa718":hex:"5ca21af4b399db38f8b74a406aace69f994691f2765bb9c47b240000152739e059b163cd007de5f28bba17e485fcf9ff6f41f76e93998510e302282cbdbde09fe8b1a96187e57c9a3df94e2e748f20026476ca682dfa890b478f7a21f4927f74f99aedd9ae782ba10fcda1dc34c31b4f784722e01cc4679737276f56df23c5bd8c6985797b83c0ccde2b4c7a65c652745de7fc8a235ad7ed0f456f1e7568b2dad475f0bc46f02a7f35c05cfef9d0e2c773ff895e291a2cfc2424b106096d8864" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,256) #2 +depends_on:2:3 +3:exp:3:hex:"611586ee40cb3ca4a9238ce112a237449bba5422ac9b18ea53480875334d8fa026da9d96c4e87f94b2f9a7c261be3edb":hex:"":hex:"2f835c336a3aa0019b0bf940c24643bc8fca58c9cfa6509aa9241de9e0e1a046":hex:"1911a59c5f2568860ae71e803688889dc44d14ffb0d93e324c39f32d95c1c3ea":hex:"27bf42f50476d8a2cc23f455e9ef477cb8e9c90f2e97c8a483093ebf55b2aee02e0356cff919e2ec9811b42c73498a6c2b96aa5b761ef7e715cbf66ad2e3ff8a6c92419dbf2e653ce70a87b51e26d9f607eb25b45b91f947d0026a38977143c8bbd94076e663b9cee35505b48e453e7cca83e540975ae8a53f26390aa63aaf1e2669410cc83427eea09428776a2d520eebd170602c52dd491c98042018a0372a0b39cb565cbe5e474f927f91515a6a7444fdbe1d89d8ae2c2482a0deb8ff236d" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,256) #3 +depends_on:2:3 +3:exp:3:hex:"85b1e5da599efd4a20ffcefd4737fa3ea1d2b14be33861c2a4ac3ac2a49d3947b14cf18f4ff426cb6345f1a7653e9630":hex:"":hex:"cf5bbf98d8577077b0b84475dee0f0e9aa95eedd1d916507b5233b688bcc856c":hex:"b333ec111e1e7d78c9ac916e420704832539d2db46aca3bdc4732e8ce72b5e80":hex:"4773d32a9fba37acc6900f3ac70f6978ff1e40039d6e3286c264fb7fc59f1bfe0188c7979380c8922bdd0e363c8e09a49faef59ea85a9f0e400b94c74a8a50687e4e51e25266eabb86276f22628d0d2e19c5696cd221a9b80f94045d001ca4c20dc916ca0ff22c93a41fc822912dd7e247927fd45982e94d3d1fde77cbe78beecba830b753079326ae33274f13fb7cd875e85fb5e9e703e61cbd41bc4ad47d7b4d14afc873a39dd810ad8eed95adff8dce3adb7659b7c1d4e3f62403767940b4" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,256) #4 +depends_on:2:3 +3:exp:3:hex:"50f986f6efb413fba3e8e0beb84d4948c2db0661ab8e064d9fee8b3c2f0a910fc35d37512f88bdfcfde797a21a006e01":hex:"":hex:"37c7b08222ba63f2136bb28f5ec09b9a899b56371615be41bef49a0b640590e4":hex:"4a1e34a5d60ca08e3e6c0f1b86547ba2d12fa293275e7d75f83a0b846daa48df":hex:"e27738c6fae66125fcaf4e725a0881d5a450fb5b02a55057d6cb7babd91d502c4f4a8431a83352f47ea8e5fd7e815f5080d144318a1dcbc755e0b935785cd5397955da22e3ff633b34a64ac72b2e6b7c51e78ff553731e6e8da911d147a6e05b36b74898cac6d3171bc8650e445ffd19ede2aa8218be17671321c186465d852dd80d73290546b88ef7a978b41c4c549e9c7fc6ef86e47084778fb5aed5d41e794ee0e700b77c0314a307b10df69daba605f3fdbe2dec708ba0b20d6b650befbd" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,256) #5 +depends_on:2:3 +3:exp:3:hex:"641dbcbf99b61437c2bf65a13dc3e0324eb940335da123870d9429636dfc82979d0cc913c73e8a6321fc3eb9e973c0aa":hex:"":hex:"72580c11a87ce6b4207908aaf5bcaaa1bd217fce3e8bc0726568c64639b70767":hex:"cf9f4527e074b72be735558dcaa1fc82f26ae286bf944b49649f769bf6faf49f":hex:"345395723d048c2270c0eac990498689bcb862a4996e82995b4e7169e671eb03bb2242c4669c874c1aeaffec58aa653c7d7431abd1650f0cbce8cf5db8316693f3ed501fd9b48c1a44b34f7878aa386d65afc31f94f908a322b03d06c2a1074a03bd2b579cafb0f7cee6d6934588ae1ce9e4ed37b03737c553ca19af4b46b5e43767cee2e459ab91407df6cfd13a6f186abdb148b85a5f49bf92ac6674fb055c7fe123e9355a0d33de281c03a56f91891dd496dabfd6eaa6fff6c9cfb4e67c44" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,256) #6 +depends_on:2:3 +3:exp:3:hex:"b9c305ada943a64a2b00494e869f9a640173eb1c2518dd9be93abc3c93c7e6b5bd0627a199d15f77b188824df00d5997":hex:"":hex:"ffc6760f9af02d35666275c074eda03f53dbcb5690580bb25768a6566b328dfb":hex:"f26f436a820ef71597b75134b8d9dca6e9a6afd9b429222a4c9c878f3b92716e":hex:"e5413a234859511cd837312bb31aac4d31962c5f7f27aec47417f367ca99b8400a4287e60412fc356cb40d96ddf5cb801285ebca42b2f6fe4a711451c1574174c58dccb2cd3342b7092a196ac7d2881a08e7f5de939ccc8f4eedc8f867c81aa88655d96ae50f618279d5009ba2ac4b1df4e63030cc0ec3541b6a94bd9a2ae5d1fcf4d847114a783c997a7c6b9d549010bf7b649abef692cdea3aa8ada14574e0f78b7fcbe17b587ac14980e40264d6de030e429586593d5ce3ae571f95454dcf" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,256) #7 +depends_on:2:3 +3:exp:3:hex:"9875dbf59b760eab9998bf3341847910526d10071dc179f96081dd793a6001936881e7f39075cd382293a1aaa8c845d2":hex:"":hex:"1196583a99afe1d377b344585c8252a0690704b8f7a2b7582387ec91a60fd7e4":hex:"20147a88e0f9f1e8caa8cb14488c9b5c38e5520a36ae913b4703d15af27218dd":hex:"c808f6f296683d26208359a766fe61bc70ee8b6ed9ffb94ce269578fb5568fe2358d603638324b63b29bb36ae71a542e38ee69a2b93ad7e4a887a27a2852cdcd541a5fa6d0c8b087aa1185bd5788256e7d95c2aa2d5c11407b7bf762f416b01d8e747c45298f875200a2e67679d6d5ff7a7c0e50a010690b1920df1baf0afcfaee7ab0862004e23b5aa1ff47b8273d503bd74a54e7b39ac7e6d6fb0a594d30531cab8a67b22783470a65f24faba1c231b3ba45efae9f0be04e2338529cfec008" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,256) #8 +depends_on:2:3 +3:exp:3:hex:"ac92a6c791aba0406d6ea8255c3c0901eb711a424501c2c2c847076d78bdcfc3266b7c3bc578c7501daac6dda8366d4f":hex:"":hex:"13379a77d84a0c4cec95e62ac4c8a98ceede0d89b8bd317352a95300963415ed":hex:"04d47ec89a3e1b7f22580167331225a00ff258da72446241a6c09c517ee4d48c":hex:"c2e6528584c6dbec436ffec4075fd3aebe953fdc0b46b4b225a3c2886e60d21879e6ccce3746d881f6d80e33876afad439ab9f68fcc458492de12811fbd57ac49d868754da19279b4c0a38979201a588884def5677392dec97cafc94bccf8914d9f78575711bb6f2adf4116db91c8b54e36e9ac2f5e01caebd300acd7bd45eada69d20f1b4139013a8a614069315a1c99137a6f23e38f91c210e0c156c6fb498056e823dc41a05348ab43c2f6f4ce188d4e05a13d38f8025731ac1670949a040" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,256) #9 +depends_on:2:3 +3:exp:3:hex:"63954ac7a0f989a458d2b4a6b7013dd66683624584b545060bd03a57b92822ef422764bbbc35fa5d40d34145afe44bec":hex:"":hex:"7b25d875dfb03333cc27b9d4286d00a85ea5921f4b8a4717b957349eb3509053":hex:"8b70d28c5c80086c0cbbd01337ad45297af271d4bafc764b0fc5705700cd419d":hex:"297752e61c4ebc4e1c68391335e2cdb49b0f19dafe359e451f8158fb7958d32a98455a852002d8f05169f438816ae6fccba1eae4d1fdd7a1176b04831d7ce892f711ec825062ea1c6b12144bbd3a0aca7f92520ebb87ac6045d2ac3a4a74fa559926f0daceb59d44fdb39f5fc3b877f34241531e863c153286f3f1b2ba2db4e2c8e2344be40c2a7a8cd01daf168696ce19f83ddb64d50e2313e78c5dfcf077f25e5b4d6f687279119ce856d4131a63ad133cedd020881939bf70f82eabfe46db" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,256) #10 +depends_on:2:3 +3:exp:3:hex:"d0944e0a3f3604a588271c8eb65913ad9b07ee2b29620f8106ca70ec10aeb896bc9b2b519c77fec5fc419e953ceb0be5":hex:"":hex:"d58593f2488f0a292ab552dac006c94b20ff500dd57af32be808921a5ee251c1":hex:"ea9e579c9dca67f07ffd67d2483ec1fac3d2ec22fefff73c7ac9f125888d7a4b":hex:"ae736da6632a7d8bdcc9e279cb7d3f9101a8f7dddeff253277d1d99b45c76a1a5c193334e912c3dfdff1bc389b209c3b29359a4ca53765a1e40cb900c6055d8a285cf63ebec79b46019efe95d5199f215f11961f3319d225bf3d60734fbfbf3593ab105cec2a17e308af469b3220ef7f055675396d289e6f4f8009881c8a2b4e9de88d53ad13e8bed8b38be6d8988f615b4590fde3d91caf50a86eac3fbf29924743145803978d261132b5975a9f108499250314e098e57c56e2f9327307cff8" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,256) #11 +depends_on:2:3 +3:exp:3:hex:"1ef53464bc7a441227a27ea7b5c558dbb3f509aaf880213cdef7e8f6a1d287c173cd5b3148d46c48c83c5cad3ccc1f50":hex:"":hex:"b052a66992fd8a8cb02c593edfe4766fcbcd3505af29d698e1f4db398acf717d":hex:"37333448311c2c6edee19aadb8f1036cb60cff2a945c1a0ea087713bff31e915":hex:"4ea7054659cae1cc178ef431aebb64c2c8dda3a965ea940a84c00d9790e2e3a33521395cc4d49038994aa4c7dcaf0b52b44375d93b625ac2281991a85a5acebf3de552355e17b3528faf39d392fed981400f28540f5ca64a4d2eeb952c88856c8f7388a49611810941b46b1000ee4a8aaaadcd39944c4abca9110fd6580093f9303f86a6e129d56b5aeff5422c2261af33523cc6a174e0782e13a026c003c17430b8371bbfc3d51c3e06fbdc30769a278b109238bbe383cd5523053fe589b72e" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,256) #12 +depends_on:2:3 +3:exp:3:hex:"14148d69d583d4c1758c307e0eb0b762511165823fc54096f9da5513e87df53b96a7be8d31b8a38f24a82d846b0e13ef":hex:"":hex:"e05f81f6402c52dff5c221a2f191155bb56abe160ce7dc8a6bedfa029195a612":hex:"214777e3faee7d953b5c796675e106d50cdc12836b3114d14447ae91cea3c1db":hex:"eb0497b32af8a91ed3959c31b079b8cc5c39db3100913332fffbb6b1d5ebbcdc97d6e67c934f3336197c9b730d80995a7d7445e36cf3047cab22895f244cac803eabd001eb1ff5d5645a803c41ea6dde6c972b47de0372ce901667d03e2e02aa0a5aea809e0bdc7430440365908418ce6066c24191ace05d6a797ef9b94409989cacbb9d9ec31f3cf0112b72e1420b47e0c184a8aacc214d55a0d5e0869d09303e4014de0430c07380006ea75984e6c32b06067d7d7b931e2b74666b4b569f71" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,256) #13 +depends_on:2:3 +3:exp:3:hex:"27d47020acc3a80a55149fa0ef43f684843ba89fda4bff1c29d20baa2b21956780569b7fa0c4078d9ff71a3790f1be3f":hex:"":hex:"c03ea0b88e2f9b53f902b22746bf4dde09439c190a7a638e3cb990d86739dbed":hex:"3ef05e71487cdbc209b5ab6e808e55f0a93bcc02df766b01c1c1ae5875b1023e":hex:"3ee49e2a58d800d922cfb66284da84bbb5944c85f194d95f1156b673392132a430e47ae74f1ed7c1d0e632d8cb604c88777437d8f37e7d0428b834555a96800540bf5bce6f430328fd328baf4b22b7f8e663c1d8583bc0119248588840510e11203cf47dfc4f6cdf8344170a341fbb7d93999ba86be3fb94d9c03922fd3d75e3fd5b42365aa62606e352676b2a0c51fb030d8d5605e8ac6bac2b4f8417d8e060148e3d4ba67b31e5e704d866bc87741ba877d12b10e8a9b37f3feca908fe1fc4" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,0,256) #14 +depends_on:2:3 +3:exp:3:hex:"88b6550d49182ca7321d8015f780121223a93343dabaf21978ee2818e7bce6591d32b48eb4642069adcaa5986224e6d3":hex:"":hex:"809639f48ebf6756a530e1b6aad2036082b07b13ed3c13e80dc2b6ea56e70a04":hex:"3395902e0004e584123bb6926f89954a5d03cc13c3c3e3b70fd0cbe975c339a7":hex:"4a5a29bf725c8240ae6558641a6b8f2e584db031ef158124c4d1041fe56988fdaee91ca13925fee6d5e5748b26cc0275d45ef35abb56ad12e65aa6fe1d28a198f5aa7938fca4794c1a35f9a60a37c7360baf860efd20398c72a36b3c4805c67a185e2f099f034b80d04008c54d6a6e7ec727b1cace12e0119c171a02515ab18ea3d0a3463622dd88027b40567be96e5c301469b47d83f5a2056d1dc9341e0de101d6d5f1b78c61cc4a6bfd6f9184ebde7a97ccf53d393f26fd2afcae5ebedb7e" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,0) #0 +depends_on:2:3 +3:exp:3:hex:"2cd968bacda2bc314d2fb41fe43354fb761134eb19eec60431e2f36755b85126e3dedf2af9382a1e652143e952212d39":hex:"59fa8235108821accbd3c14eaf76856d6a07f43383db4cc6038040b18810d53c":hex:"":hex:"":hex:"06051ce6b2f1c34378e08caf8fe836201ff7ec2db8fc5a2519add2524d90470194b247af3a34a673298e57070b256f59fd098632768e2d55137d6c17b1a53fe45d6ed0e31d49e64820db145014e2f038b69b7220e042a8efc98985706ab9635451230a128aee801d4e3718ff59511c3f3ff1b20f109774a8ddc1fadf41afcc13d40096d997948857a894d0ef8b3235c3213ba85c50c2f3d61b0d104eccfcf36c35fe5e49e7602cb1533de12f0bec613a0ed9633821957e5b7cb32f60b7c02fa4" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,0) #1 +depends_on:2:3 +3:exp:3:hex:"023f5673dac29f62245510d0a866629c43c64bf35a0bad30f1270050876cfb1ce80b615a5a47ecb51217a46079e11fd3":hex:"a6f797b155d6da01f5d155cb7291442e1b82d4190e93e279fe5b4aaa7d04ecc0":hex:"":hex:"":hex:"507b824443af5db28f746229e03ab00c73cc3ee4956aa14b33eda00dd2b9b645c132dab7dcdbc659c8ba0e1a3575fe7dbc7cf9691f9b714acb1b33bef96943003c992f661e04fe9e8b9f648f4af9a58a45b08b8fa7fa3704e6bdc289abbe14a8c7e1747a52ac916c31ed079de0b900672e658a201279824d0d75ae35dbdd43aeab915653765d83e46f347fcb4fe3321fc28abd2d0d26a662661582ce21b6dc4ea6d1b236e9692a83c8ba0fb299157b80623ad4f448d25d57f537b10e5e30f80b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,0) #2 +depends_on:2:3 +3:exp:3:hex:"96b5bc16ce0d101b90d54da6c4b3d85a70ee19d54cf4cde3d048afb5f758a6b52ea2c10c16feb71cedfab9bfa9e462f8":hex:"2ff415e2432d2e6c4279910a5e56c0f5354a5af0099132d891943b4a8901ca6c":hex:"":hex:"":hex:"ecebe717afe6dc08dbff3ed626bb06de0f9784283b70e378dec19d4fbb50e61b7be48ceb69851b2bb94641aec5027d53d314a96500a9bbb38a87c9aa42ebeb96a23cf29a0fbd5e48b399daa1b24dbdc85223f24b7d77332bb1a137ec709d27c008c709696cbe44bb2fc19fb10a2fad4ffd8a9d89492a939f2268d1557f44b6a64e2a57887830fd8bca1b6306aaedbd7f3f476b827995a1ed121388497edc7e639c87d092f6591a45b5647c6c091c15ed39f594b7fc4ae92331f96dd8e17be970" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,0) #3 +depends_on:2:3 +3:exp:3:hex:"364a833a283a3e0b8a5b681daa50df96d806d4b54828f2b016de5d88597e6287d98cba8fda464d21aa1cfb7b26b9b226":hex:"35b0e7534014dc2d7eb0f20ff78a69d5548d0a64122d4936a6ed177fb3ec66a6":hex:"":hex:"":hex:"df4c799cae37173a81c545d019ffa336ef2c039a5865af425e5b60bc3d7202f4bc1aac5a84022bf4088061abd5c39d0fb047ba80163eb5dc8b9dd515948f16915832c6f76b45acc25b9c01e7f70955c0eb51bf50f00b24bb8e7ff53bd7c051b53d8b1a837a17a00355d7eb21e43b2b5b249dadced37d06e7047c2fd12012705a59d051afd26245ce3a59acb4b996b718c7dc1ae964bf12b1db02fd6c06ac2fec6ee5deb02c2c830110e9bbbd3c778a136b646ce2a0738563555a89409c56b81e" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,0) #4 +depends_on:2:3 +3:exp:3:hex:"bb4d38c775acdeed663256abb747ec25182bc16efd0de02cb4b05e4ad4749c92be6f1e856e423a8f3bfb0c0f27ad8210":hex:"21591e796b7e68e7913fefbef4872af9c062f21c8023c0dbf47e040c3aed3733":hex:"":hex:"":hex:"12575776e1b9f54b0fbc39e85a77b6912160bace4f1e9f049e3a1c5bcb452cf9be42ea10c028c3cc249401ac236dd3baa53ff327735435f4869d3289bc9465ccf15f826e4e4fff099986bdde0d09bd12e3caddcf452eed6ca1206ae4561b84770a9cc6e962567304ef79d8d3608529a3b5e4067fa83c8c35a06f1855da5f5ea7eb106e4c60181d12ba00cfbf7eac60bda00571d95c45c9d75c43b42e27a238aa5e0f02bbd96cde59a2e572934a99d05c399ffdf15c65f173748734c51999a29e" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,0) #5 +depends_on:2:3 +3:exp:3:hex:"f9d041d24158f480600c3747cbfd868c3f7e9ac7f74b3760eae5320839e4f5130f8477d88b1d914c0d8b375d089a4c83":hex:"b148049f4093f0032c7f105dae219aa9e3f70487ce3a6b6ecd99429f66be5406":hex:"":hex:"":hex:"84c58bf473061da92fa8d56aab3a75598428f18dca504191a51746eb5fcad8f784eafac5ea81d636d579e330baf7db95c8d706432e9f585e84da090c0eb40dcd819bf10e0d5b8600150d186f732af50b431c596c920eca742e6555129fdf5df96b44005083d7a33087b150d63529bee4b6e1ed4189ae2d93cee8dc671d47c0e74ba04218dfe273484a4bb59a57743ea56843d516ff2c72ef9841996d31b0d6c5beef367a6b44cc84cf4d403a06b40406e4c9f47da401e3cf31412694e6164dcb" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,0) #6 +depends_on:2:3 +3:exp:3:hex:"c18f511ffc3479a59357c17c2fb3d1e0e6f0edda4c8b567f2413323c2037f2fd140fb0cf33eb59526d8c0dbd216939b5":hex:"7387aa3b0b3d92afb29761d3d5ea16e32a68297b9ea6751e1d54c8612f6351c1":hex:"":hex:"":hex:"949bf03868563c7d1498c69c327686682656374b2efdef6342e69a388229c580ca2217a9332d3ae77c2d1223f5dedf4b34ec50b79d5baa7283168ed7cbe71c6c3c9193bbe01b76e011c39d2d462017c2c74b7e698fa2140e16886a9ec0fc6c36decbae37537638ccf17777f1cfa49d2c2c7ba3aadd0a1565d61942de94aa6fa16ecafc2dafabc9082f23e75a0e2f8f79d1c0a15ce57fef7655f1a4fc6fc4d4a694bf6ca9e333959f35ad354524f614905c6a52ef8f524cdf01c5fadadf207772" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,0) #7 +depends_on:2:3 +3:exp:3:hex:"6b09295110384eb56726f61474bdc532fdace31ceadb5fc23d587356cfac74338ab6f9d89394b907edb646650865a3fc":hex:"7cafcb4db31ab411c396015b8bbbc990607e08bd1cef3337dfa0e295ae024f9e":hex:"":hex:"":hex:"e51bc5b3a6bb2a2667f5d62c2ff9902dd07b566870b4c14242627da7581449ec985739cdc2bb5ef036033fa798112ce20df06d46d61aad7121b8282fe7556bdd363cdabbf47184e55edd85ee0b7b0be17b9a7f822f4d8906465b525c16385d0899b6c27728ff2a600870aef65f58f9d3777e8987d86e59fdb69cd232e7289fc75cf2174304137f988a17b60c57af84cd8e556aaad458f511fc0b3009516435c0c60098f35fb6a4a90d90bc6071d38000703ef57cbc19d6b78a0f797f3ba044c9" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,0) #8 +depends_on:2:3 +3:exp:3:hex:"ec6d0f68240f5c47e822d9088364c6cd03ca53808162b4f06f5956da65290946f4d26653d079e50604f836c1d798243d":hex:"b40b5737cc76c5f6d1df0f13bfbac7e26f92aa933125705b6197d9bedb11f2e1":hex:"":hex:"":hex:"207833cf65599e1406ddaf3452f060c872099cbf7483f1f7f14033490f7258ca5fd7f5339f914498b6e61fa426cb872c880a9fda9b8ba590cd8006b990af7ad412f60c8b2ad969c2f9cb0e9d005943d4dd2dd7af9699046ce89d6405597716d43b9ad54641c2278b04b2bcc5b8ecbcd5e2044e4e6ec5a628605fcbd67249e813bb769d7df01b60404d030e69e9672b4fdeddf82a22042b83ca036578b69f9a0ad9702bcf95fe846705b49b0a0795dfbc4f671e0158ded6242bd8f8fbc2410c46" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,0) #9 +depends_on:2:3 +3:exp:3:hex:"df59ac224e4ba1b6dff348f17bcf9c5a94a3235a54f2799a6cae29d8654b79d18b09b444a28a7d537e1a2bc89e95abd8":hex:"14a0a91e0cfd63ef5fcbe2e8c7a44bcf5769c9f95b6c50bbe9d3b48b82a09053":hex:"":hex:"":hex:"656438e7738d441b9ac116361e9f26adc0e303da7889cf559841b3e44127318edd356051bd0b3ecea78feb2b928227921a0c183c9f56bfd11ef31b28da6c78f3891d8ae1804bc158fa56e8b7a1a46be4954de493ef65a7f9beb46949a323a04e944034db30b19cebd8b70bfc155882ddfaca1bd5acb981c2c1b3e0862c6234d13093ddbcdff15129d586fc24ea2fd20946fe45b467bbbc77a6b6973eb6ea02994607c657eec29e4c4b3915cb730db056babf1779127047b401e25f97f606063b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,0) #10 +depends_on:2:3 +3:exp:3:hex:"8da1ad6810c1d6b7ead210e48f51c370d4520547a330a4d591e61a9847aa043463f69d1b237999fda9b5697f1e7aaa07":hex:"291c536dac72409e31e71cafb1b5f55c14421b2c7a44d792cfdc663dc8f62692":hex:"":hex:"":hex:"c2bff571554c26bbd4442fbb3b0f8eb4db09840337658a7425613e0fd4f96e60da39b250c3a77379a53325a56ec02248c4d67fb9154e3b0eb8972a3109aed531eccc027705b267d2b9c037da79860d76e5e980b5b30b7ea588fa221d24d973f6d4c625de65123e91613a1528cdee59993aa827f319a759412f20aad6c50fa79a3debeb346ad92809470daf228cf344e09f03c839a28d580a2b3d7050685ef51e95649aba7228a2f0c82a2dfd89cae6ce549e8b27fd46f02feb473645765018ef" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,0) #11 +depends_on:2:3 +3:exp:3:hex:"5e8d6571f514519de6c4c0a7cc5b85df616735b8dd09c3bed2377499aaabb296a9b2c94642da10e8fa737cdfb3129334":hex:"6ae29c71b76fc48f14a3d731a0f6f276f73e7672eff631dbb1d22b06463bb236":hex:"":hex:"":hex:"5cadc1264314fb4bc7ed7fa74bfa16aefa624bf2fd60c992d0cba10429c56e0028ebb430b1a1c6662a9b3c7f6de244ca000ae63db9570f1aa3e7ffb1e97a9d848021d8e632fedc037712a29abec4063b9d57c60738f0af0b1aab3844b03f7aacc65d38bec91a11b7c3bf8d970f01e00fed9dbbe9e2e499a21c72a7c5a22864125133ecb073a4c9f6d9fd46024f5c1ee7fa447209afa6ccef1f97ae77ca67fca5959dde209d2597f87af6e154408579cec42c69fa9b7cc075ee3e37ee3d91ad9f" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,0) #12 +depends_on:2:3 +3:exp:3:hex:"5c9481b2642855fac8931eccd1bd6c5a05b560a55f96d37e865f057a95812d81fe65c84c96a990eb7a302b58de723cb4":hex:"b6a61b9a31207363d62c0b88f1632290f4f18feb41a6dedb85b7450ff9157016":hex:"":hex:"":hex:"9cc77b68e1ac23fdd2e2a6ff697053f816bb48b39b1162f7aa3fdd2dd1867f68b13980c9e5989d4631b7983248501731326bd7bf6e967b3dee7d2d5625d3cc2e198623af9f77f86103491ebb4aefda5c333b51557b8f643e6d6c593fd7e27e4bccca13140f6129cbd024de076e4688567fd7e41dc7b2bd0bd9b3e966d5d3c461502221b52b001a4d2102894da04172efb900171a0eabab1fd134217580cfc33a0a94edc0bc132af91d048c6f5ea4e34ebc9686a99f81d19118ba4da63ae3df7a" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,0) #13 +depends_on:2:3 +3:exp:3:hex:"c43f883d0adc2b56984d4a497a8ad76813a01df5a0ba22b53144763b65c7bf3f6f722e4ceac59966a6e44ed898e6109b":hex:"769bace2c263edb87101743673724ef67a935e1ae9cace87202b6015d20fd9ca":hex:"":hex:"":hex:"ce61480953190453247d091838dd80117f7f85a7e9a1237c92edf10cfa26b423735788b1e89f33625480d9faae57112ee62c8e4840475a6a738018ad3fd4a77efdd8f15ffb621c429419b6adb20431fd35f9d62fb33d500b87beac4856aa4971eb89710576b609ecfe758f3682dd316e7ee9d6560b444c2446656c8941dca7d6eaa70fdf8a70f18386ee5d4c86738bc261c0e8e5f509dabffd0425a86858ea3c71de5be98570dabd80a37b4f7f954002727c0b712e58693603c23130a45e98df" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,0) #14 +depends_on:2:3 +3:exp:3:hex:"d083f7f8c65374627ddb51582b3a39e2bf074508d5f28ecce25787f386058de8afafaf2ad7e6449308e176be01edbc59":hex:"ddb4ced192f52bdfa17aa82391f57142ac50e77f428fa191e298c23899611aad":hex:"":hex:"":hex:"b978826b890ce8a264bf1ad1c486aaf5a80aa407428c0201dd047fa1b26e9ea9ff25a9149215b04c2f32b65e007e0059a8efe11481926925061c748678835c0066f596352123f0b883e0c6ab027da2486244da5e6033953af9e41eec02f15bebdb4e1215d964905e67c9e3945ec8177b8c4869efc70a165719b8e1f153c41744d44d3c56a15822d522e69bd277c0c0435fa93e5e1bc49bc9d02aee058a01a04580a6cad821e9f85cf764fc70dfae494cbfa924eab0eff7842e3541bc29156f6b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,256) #0 +depends_on:2:3 +3:exp:3:hex:"c2feb900032f2cca98d3f60536f563d8ac9af5fb2e90dba36c371c0a1c58cf5e4a60f2be0fa13b8266b715be8aad128c":hex:"8e6f9be0c692648072d19c750804b10e2ec313c8013abd363de7a467787859f2":hex:"72f54ba3f8e71ad69a040bb8493283acfc8815f17dbcea220ecd68372a2dffae":hex:"adce8157ef60482841dd2ac5ac512bf7649120c1dba81ea75f2a70b7512bb6f3":hex:"e76e4326ac69ddbc6b2408c529b05a96425c65cc65671601191238e9434d2a0147f3a25ce9b6818774f5263c92459bca421d2b492f9a9c2971359baaa1426d6e2c36d8924f39d02ee2fb5502c4e0b206dbe9aeeacd508abe6c055d547b5f9f35de4fdc9c05a2c63ad699a3a7e265598b8f40a8a295d7376b88c49af9edc790b8a5ee221e19877616678e2a5135d7b3756109200439d9ec8bfe0cc5f3c334ca9c022ab9192d5d554dc7ae76af1dc06d814427f46a7cfa2dcc62f4777d07ebde7d" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,256) #1 +depends_on:2:3 +3:exp:3:hex:"ad500edbe28b9a4338b55451b81c652797eb48fba753c186ce0aa9ad02a84ea2c995b7ade6de0fb4ec97bcbd61b711d5":hex:"5770c41832a4cdc4039a8c332a4b45e7a7b2dabb678ccd2e56452aabeab14925":hex:"d8d5516d158b41cb9d66566b88064900af78183f765f2f72a19548fb797377b2":hex:"60a3a01a72e6b3f33a0c236db08237e7d656bdf4bab1db57ae23b7305569dea5":hex:"c5ac3df66bc664e8bf84c758c7926992f0e8a03cd3f3f5fb8277c85b4da526601e8131f9d205f35594e101a86fb83ccf4c1e98c8e609062256701ff2132e337cb7287f0ee2e8fe3ef11ae703d7efe52e63cf89119ced05950c55aae6c822b6b0a8e1b91b537e5bb2de165a4b5b43a1c41fbfd65fff9bc5329d303caca84f5d1fc6acacee622623ed5dde36aeda0816749557c924d6ed26cd80e456fd0ae2146477ccb63a203fe16ac1d0eb2d12b6a2cabb21d412422e95f2df8ccdc23b4ef0dc" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,256) #2 +depends_on:2:3 +3:exp:3:hex:"51a29bac53961792077e88ed3603d33bd1f51b3fdb2b5cd1ea131c6f643af65de81eb2e260396d2a69b4184c4eb98a15":hex:"72e5285b92c4ea4458e8a2159687cd46e7df9c1f4513d8b72cc88be41c2e1522":hex:"16a69f7aee34c567595f3d362ccbdbb7b9e9372c4b1729fbb80d9a089eee31a4":hex:"825197262a43f6523182f0a91005d70b17d81c2bb692edfd02ab988130c7d5b9":hex:"f63f531c242a295d7796c3b4844fc74821af5a53e0e7ae822cd8a7f9de91e6164164f3448fd7d18feafb97c9500e0625d501dcb3927e6fb39ef65dd9586d157076436452bd3066cb30d1f47dc0a3ffa5f2e9ab4e183018b40a82b39b0d170aa21b05600eefea906838b95456e04cf046808030a56951d2502c5eb6271228905ed08549bb171d6c0408d88250785f42e349ce1d9e74a6cd0360a008ec804e7ecdcb4d1fe24aa5a18cbb65f4de1619a29c6062b409a386ea6f43e60adb9ea3dd28" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,256) #3 +depends_on:2:3 +3:exp:3:hex:"b30ff9c6e5b6bd258f1cea0fd5ef9adb81fbec233ff2fab01e79b7422878b2e950604e10ab80ddceb9d2b968d0d37ba9":hex:"e8acd4b380aace0b27572057eaa947e10e6b49516140139c74a1d4f472221dac":hex:"1d2ded0003521e2ba6a4a3e732e0949c1d858fdf0925fedd9cfd7f603e0e692a":hex:"688ac5e7b4400d962c106fd2ce712a1cda6a0b8ac5196ad727f9b882329a3d5a":hex:"c5208fec1d67517311a42bec07782ceb247e9c818e4f5f3bd160c9e53d462b61884feb278cdc8f64e22f59d27dfa98d3a90da8c7c5ba28ca40bd0d18934595a376553d1a8a19de07a83e2e9db42748c982cbcbf4a975c20084ea9cc6c6a41b571faf66b364e4b7e4d32efc80c30b219da1c02a1ea02f6922adbc31a057f999605a2d827f10907835c2bdde4157d7bf2906a0ad27bb72f113c6ec4f23631a2b8517bbce91b560d90d73fbf0699bab21da23e27cfec513bb5e375f50108197d664" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,256) #4 +depends_on:2:3 +3:exp:3:hex:"56715dcbaa4f5bdbd157bdd950d1c1b46c1f4f8d7818ab321d72c0ff3c0a928064b0439f7bf021dcdc7febf2126e5432":hex:"cd5547991b525f7795e075a59af1701375175bd760db99d316b91463f87f7f3c":hex:"b2e4f02f1c14866f538eddab402356ff3b405abbb9154e88b98483a83be70f7c":hex:"b8db321ab30285eee7f9e377ad62def6caada447d00a4ec882081daafe2ec009":hex:"7ed8c2be58e3553eb65508377d63d7f24518d1a7235dd4c740bd987dd8bc1c1e3ca97a69a37dc9a270ad88989e4868e6cf8e4cf01703c0b1eb6aed8c3f8af431d819e68b6947ae134d360d87e33668cdef0e45e11f5cd79329ff95ed00e4a6952750f1574f489394b5fde3c6f07311a1e5d9c4e070a0943ef9d4a130a9e4b0a80c256e96ca5042961766874898ea0f772b78d1a33e866351a4eb425b822b5ad596cf249bce8ccd6dafb334b71a503fce2c8fa3fbac9943910ce5ff02ebbedde8" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,256) #5 +depends_on:2:3 +3:exp:3:hex:"1c60a31760019e6a571e2987e57e19adbc1accf3edd44e501061cbec331b197eb68d0fa8fa5e3071d6f8b7c9c0a3c35d":hex:"d4d84dc7311096791dd9c9d7f2cd291071f877afd86b9644427482d09ac9df64":hex:"6473f4430398d7e5a2d218bd05e6aedac1e317269df3e4705d56c22d6e7abb0f":hex:"379649b56a46399b9ab5f3880e1a73993a58cf52821d3cac87890aa0e6322a94":hex:"d34152fa12fa341d0326a525aa838558630013857747f02634d24e9deec2da12f52fb405e7f1b973dc2d982d26eb2ddb4b49c35a9308b06809171dc990a4248e6da0c329a259f495247b9fa8c73af06604db7b629168e34081696a043977dd29a3c0362d5895f9aac24bcba58dd74078ef6f8d33eac864f2e6cdc479da3d224bad8099d011e914b6ccc3631a7369586e18c71a4087de0d47a7c29a09c12438c7de2d4b47768f47685b742c25b860e716c31e2afe4ce6d92bc2fb9f34400602f9" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,256) #6 +depends_on:2:3 +3:exp:3:hex:"eeccce7f7edc52f0e2559250be36526cd1839151a77c59d527f66fa24ea4d86b3fb298c8d72b6a0a8e191b60259d1fc1":hex:"26d35895723ba3d431991a0e6fb2154ae5bff7e58609c926ee3269afc5cd631f":hex:"227b9a71a6c17ecbf627161fc627f8f6f1a28ce39772b7a3d36064e2cc6dc4d5":hex:"eb59f780c5a955e1355dfe15cc4a4e90a6ec75584e63bd0de734399f47b95070":hex:"78ac77657dc56b23e617a9b38168da945c1cf52b6062c2b10f1d7a3814d9b9efa5545da050b0db5a65a2d2d2e02fa12e97eb970fa8e83c524bc809d675e0db35c9762323f327f1edb9b534ce16d02519750b41ebe51f747e9da43fd1afc60e46c7aba72e15cc7a22fad19ed55189f287a14737483eb6b32d966c3e3969d8198f01f2ed841f20d7d2e156d6285a29e07f6d7fff42bd575806c4092522b03e0d1b8df0cc88f5b82d24a7fd0feff6ada03a60ef2541a4ab041a49aa973c7163bf94" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,256) #7 +depends_on:2:3 +3:exp:3:hex:"86f8104a081c9565dea5652f20145a068dadff125debf818262d8931cec6ba937fd5b51affcebee952fb67f29f197267":hex:"c7ba5ff828855e6e78fa1732d63aac1f49701ff7ac1f3506e97941f998b4e9d2":hex:"6917bca15db53a5359e5c4d30ab4d37fc6a1bc660faaf2e74864cb4aa52e0e02":hex:"eea8db0cfc04f8de14d6053442b5b4f8733f822df4be5966a0de8b0f7d2036f6":hex:"562b8b2fa3bb15cfc3f7e57f309e31b13c790c928ad6b32a005f5431c28576c5706c4ac0dc2c7a4435bebfa06571278f485932bd94382efcf727b300b230da9b9e9f377d2659ac75dd8247351d5ed8185effa0f255a2a2136e63717e0265d561a34c75ecee1c774c25e33fd938696825686acf9a419c1da3fa1ce8f695e231087aa0927dde6ab487dc61291ad4700c5c608fab1a418f6b30ff97b8b8f01ef8164287849a77b21be5d11d82d0c19056e07d59a30f6c576705c6cedcb9f22d3a8f" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,256) #8 +depends_on:2:3 +3:exp:3:hex:"0db6f73ab6d31ddf8f78d76961310d68f081c9e6d5985e1883978c2dec48d9f58875ab658b3a8b795bf464af9470a90c":hex:"d886936ad36549a10b5dc5d6e21203abd75ad63f826794b4adaad45a70424c5f":hex:"76993d3bcc32546430efa30e3b30acc34c7672b6e18c7e2e9a1f1cc26f7f7a22":hex:"54c72cf3457e6f5f6b35dc14167fee9383c44c867f233ec9d81f187bce438c0f":hex:"c3523894d273c85d605d39f5b89e3388afad8c20787897b903d8db7e3de7590340174be3abd7598daba7806ab934e0feca02bbe66282d469ec01476bad5ccba59fc14cd9549bf4af49641f4326b1052b179c89194d21bec0501c97ef2c24aaf045fd348b765910fe92c0039612e37baad2445b57d9db6c1e550adf6688a79b117f6b7a37e0209d89f194a1bfe1ff2e3b28f0454b383af8872f32322bd5313a3c9ca48d33eab7c3807bb98f8f402c43b99b2176f0b33be08c7e84c86b26e971ab" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,256) #9 +depends_on:2:3 +3:exp:3:hex:"3b1ffbfae6ec54a175a80a33c8768fb60f2af9ee2b8620c4e800a17fb9241ae47f77da414f67b5d7b24dd100355d2afb":hex:"0d50cf61e2020a909ba6e36ba4d0a394579d3e4377cd4bf0068967e8d0fe7a78":hex:"5d4efb3f6e6503c5d85a1c43398d0441ce8aefafaabe2f6d86988a24e033f502":hex:"cfb6156a1b139abf21c73001240997ee1a8cad91a4bd777c0372c1e8fcfd3fac":hex:"d3ef776c8d77fcc5e947bf53e0be11777e69c7dce138f24c1a3212d1b6b932580371479b7619fc82f029d92969628f810b54a8fdab8eba799e750945f3545f6a96226bc760ad736101516efff5d8581f5864b38c29885d39843a4adca17046e1e388c890542988797b576da64804eb4101638328d3f8bfa398ffaf83cb7290a2cfd39ead13290ae773a8958b33914ca02c8ff6a069aa25ac8b36f6f0f1dcd8f1c5fc838083a64ae7ae11b85be3a9fa80ed83949b622002e91776273fa32d6cfd" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,256) #10 +depends_on:2:3 +3:exp:3:hex:"19767ce1f18aea366539642fad400a03a675b2f3c0b1cfd49925e535b2c2779043c5a1c57ef550acae733729516aa62e":hex:"6bfa882c1e895eeffbb85578182653c022a4703091529780c075cd482809b990":hex:"11236df1dca3de6e3e3a57d2741d1b77f15f45b05beb47cc500100b31188a42d":hex:"98708a88fafae56c4f6fa780c6c0e33ca8f2592983b5ae607146cd6e92204416":hex:"b6514a3779dcef2c9ea0ed7ddfa808d045c5907314c358302ca32b2055987a38ef601637cdcf77b1b8f7eac479f8f18972013c2e1a6dfe612e8a586dc529ece486505534c0ff3dc0b2049a0e46d7ac504a1fdfaa9b08d9fa017c5803415fa391ba7eeb576fd6ddba4404feb46e7cde56e090dd280be5edba7d6df9c5ba7d3454bcbd4d443b08fb51a117c1d5916f225dcd6c1c3fe2b2880f4d42962befe3ab76bdc086e29381dd985206e3e00ce722c9c040af5ff4cd4a8183b446d91b310845" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,256) #11 +depends_on:2:3 +3:exp:3:hex:"f63292bab50668eb14b83975422a0c853fe55714a9edf9d8a817ba0b2f26ec40063a86ee3c79c694273342a02f68ecd0":hex:"3c525956838e26b77b8cfc37f024ec398ed825076dbb749cf49a7d868c201e6d":hex:"d9a41b47c3bf8743099dc8fd228f77dff01ae304761eaf57d751e11cf094bef1":hex:"b790c37dbda20fbeafe9d1339a1151144253bdfbffe17ba87240eae49c606bf3":hex:"3586b63315020b3ba1121314a0fa6c66d57de0ec44abeef7b7325e960832b7944cb0a81a747ee5c5d3163001536d3e5ad2ec869b0e5ceb14aee2e6915073619528c1421b59b80254dfc3cab0584898b0bca72c76ae25f52b7405b9dad38cb2b841e1d6a34fc5b277129db49928b2f6c0dd22900ee786ec128164ed12eb324b502499f1c5c89be2101901476b39c56034cc293e320e63a3e019186d4eaf9a098136e8c0ce7f6326f84ec95992dde2585ad3945a9534aa2954b8c15a48e3324d76" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,256) #12 +depends_on:2:3 +3:exp:3:hex:"3df74683f298ba48648714e384989145c1b84246736dc275636809d64c75ff603056e703c435eacf21c0bb152d9fc2a0":hex:"371217ca2337db03c4d06714624fa11f90d5dc575bdbe12a457c610be066dc2b":hex:"f26b9cac8df57a33e4b5868c36f2b9322994a98269dcbd7956b93d147dd0aa27":hex:"0a6db86c3abdc39878045b8fc2d5f0f77a8e298efdacb4cb9f74762fc23b96fc":hex:"ff5252b7a39460a73094b9d668b53d1932243caa885c0ecd850612fdbe7e46cb275d079bb75a6b050191282ccb11ef255d52cb763618c4b624560d79bb9a5bc99319783de43c152e7aa7c4cd879a75869285320a9b749c897bf07220cc1bef1edc494bffa6ab93dcf839dc15f6f2e508b9e216e2a1786b75abfb01bb7bdeda722b47af895f551670f9562d9f9b78e98ee7ea5c5ca4f836af5bf153925b2aec055eee8164edf3f7b72e24b1203cfae1834705f74cac8c6043a3c2abf6bdf28fc9" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,256) #13 +depends_on:2:3 +3:exp:3:hex:"53d70692f0f4dbda23d78660f0f08c7e70ca94441f1440348f76108874d13ea14652725abd1a94d315364416c90e662a":hex:"6deee916ad660811cf05b5652f32df4e97f544ebb57762617359159cc9a425c2":hex:"acda427eea1c8c6791be6e4d2b60be30302abc84d5c5a13be7d510004b8710c9":hex:"d27d7f598a14205c45788665cd062135b6b65547d3188959e38ab675401d2b62":hex:"f77f9de60e95da3f1d0d67b5dde29b31df59ce980ebdbad7b5e0a0051fee39e1d6fc4311f21efa016039bb05f3b009b223be6f2c007b468388a8a19bb468c7b82cc93dab3e160b2b72fda1240fcceea01c2638e9c8bd2d1ed9ff9b55bf69fba4b6ae8e694c150896ac6233b75567993f9a9adf25ca0f0835b9991ff4b8d3f4f1a3e4c5f9866d98b7a75196804f996492a61dbab5bf72f87658e2300a1b0777ef7f43ffe8962f6b6708d2d91dcdf6b430cfaacb3289f74cb0f67370bcc9af249c" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-384,256+128,256,256) #14 +depends_on:2:3 +3:exp:3:hex:"85186650694f742c3f5f228f943788f05602d4827518908fd09a1fb445d8333db2d65f376d48c66eb9e0498999e1ff49":hex:"499928c41841324749143be9cc769899c38d6f6e6933e56898896fabcd802931":hex:"9574ca51f21865c2fb0efc75cc9d90ec5e9c43104979cd64d00ea5544ea01c96":hex:"c0df840a18d7584b62c70b2f057bf824168edb673cb517cd9dac89a0fc80c9b4":hex:"b31e50202f883a8563cf129a0d5f8a33abad79d8ec8a97167ed7fca778e5892480617cdf50b5e51547f7ec1bede35020a311572c61e33e9c82968e8f69586daea3dc19063bea56503f8ca482918d229949acd6f1c52cccdc5f7f4cd43602a72a5375f3aabfd2834ee0494823beada2daeccbed8d46984d1756fe2207ca92186b506115f6de7d840c0b3b658e4d422dbf07210f620c71545f74cdf39ff82de2b0b6b53fbfa0cf58014038184d34fc9617b71ccd22031b27a8fc5c7b338eeaf0fc" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,0) #0 +depends_on:2 +3:exp:4:hex:"35049f389a33c0ecb1293238fd951f8ffd517dfde06041d32945b3e26914ba15f7328760be6168e6aa9fb54784989a11":hex:"":hex:"":hex:"":hex:"e76491b0260aacfded01ad39fbf1a66a88284caa5123368a2ad9330ee48335e3c9c9ba90e6cbc9429962d60c1a6661edcfaa31d972b8264b9d4562cf18494128a092c17a8da6f3113e8a7edfcd4427082bd390675e9662408144971717303d8dc352c9e8b95e7f35fa2ac9f549b292bc7c4bc7f01ee0a577859ef6e82d79ef23892d167c140d22aac32b64ccdfeee2730528a38763b24227f91ac3ffe47fb11538e435307e77481802b0f613f370ffb0dbeab774fe1efbb1a80d01154a9459e73ad361108bbc86b0914f095136cbe634555ce0bb263618dc5c367291ce0825518987154fe9ecb052b3f0a256fcc30cc14572531c9628973639beda456f2bddf6" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,0) #1 +depends_on:2 +3:exp:4:hex:"4cc8214cd7e85a76bfa735bbbfce926c0323fc348de6c05ed1800c2c8f58c6b1001eb1f6b29b35242a3f8fa2e90003f4":hex:"":hex:"":hex:"":hex:"1efa15d644e1bdf34eade3ff2f5e9ca45203ccaa1e534ac9b4287a846b71292b03102286d99f2be64b898fe909238f540ebc25f49522f60ef723a4c428ead530a97c62405cd5d9ecc54ac5baa47ac4f6195d637833f462d21a659b4903d9cfa6c9fd4512445f9abb5782899a6bb64592f3c2b3c745b18645301fdb09a6a331e9fb6d9654fc79c14ed83ac1684c755b9cb209885f86ff290a71f08a848b960152f05b1aa8566bd382ddd45521062831d7a0fb3a8bd8e112a91b5960690cd8585c1aa104514e3b9cbf52f6384e84c27bda2802fe9fb952cbf2bd607f869d0aeaa6b136c6a5f6e9b0522b6019b7ba6af6cff99fda612e024867decd8c0c6fde2034" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,0) #2 +depends_on:2 +3:exp:4:hex:"d046270e6b7997cd5f4e9ed1193e55382191f78547a660854cf60bb03d039a3950cd147a3445f6d32d14cbfb9da0c327":hex:"":hex:"":hex:"":hex:"cdfa9441aa5eb11fe3ba50528ed731c9ff9e70b78da075d00c52d0e281e3a868f66a53a2a6a272d7e0b1a32b6339f8afd108bb9e66b04c3d6bc069b7e01b69844322df7deac66e605a9e2f43665b7932c67c418a77a4c9a302782d0e735795755613a1c5e90089f759d780fb3a984dee4e06ba3dc5a8c652549587d975e586a98ac6aba6563e2767f1a379261b9dd37992ea9681881ea7933b5c64093234c849142ced85bbe5956f527d46ef091e4d18df2a6102621a91bca51bf7aa4b242414dc16e74ae59dfe560c19dbe315e7f98b11086bc26e336dcefcb91c4828682da90d3921336a45fcd36ea4d1213a13213a132bf20aa1a3991b60b65de7ab9cc656" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,0) #3 +depends_on:2 +3:exp:4:hex:"8c7c80b169160c78104c205e4492a9477e6f7ba1c3bb4daa86d222deb6241bfd2d2dcd5c40b46fa553ca6a2f6be96991":hex:"":hex:"":hex:"":hex:"1658a7552e4cc98c228072801f9ba230123e7f1f7dca7ba839f440e5f7570fd29c38b86a2aaca04cc87a56205b41d19e38998b47d0ffbfbd9bb56a6eb31bbfdce8d01e8991b82315c39f60c222298160e8d9f14b1a6038d8eaf15eb7310b180a8e2e8d05ef028782b55d4782d4774160a39896d1a896823f8b92a99abb546ef02cf189200a1a7a2fbb7019e4d8a935224c20d11a18e0d8890549666f6599c261532b036051cf7a65dd33bc0aeab8fa2ac9ed520f6dd893b9dc3cd3b87d02a0543eca0bb52c58b7ac4ab3f00171e21dfd3363229ed362f960d8a5fd06af5caa86018f9dce81ade6234a6992bfb9e2660d08a103dadd7d9ade4c45d691aa3799c1" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,0) #4 +depends_on:2 +3:exp:4:hex:"cd394508d86c384c0c998b58cf7017b7124269428e4cf39519b5815cc2d88734fd2cbc87c79063db588d90b9cb1569f3":hex:"":hex:"":hex:"":hex:"7c4de5fa97362e63e52e790fb66d4b067e8cc1742975ba6f9186295832d31c4e0c97b7dffa262b93b109621044a4bc89c9fc82211f5cb763974eb3a816fa7d7853577bee1c36c2c36aabe28559d5bd85691c3e3bd610e61e4c3b76e167526d1331459d8bf09ceb403062cc97e1229eb3a70af6049d291aadb002786e7d21b81c87fa68a51a1b9a89394788bab70783a88c883ca17eceaba455f357c611fb279e38f67e3c27c5ade5f95721fa79fc2da1bd44ca7f304161359da4e45d7b847672bc185ba502123a802535dbd167b2c93bf901626e23fcaba03c4f89625a930caaaa30400645680e5931e094aac6f6467b90b13c2be9c98744f89d113151cd2ffb" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,0) #5 +depends_on:2 +3:exp:4:hex:"a14be417001030f6a9c543f829715b075d0efd8fa35acc7eed02a1401c6f59dfc87b8b9255e62fcda6a35e52fa4a6f9d":hex:"":hex:"":hex:"":hex:"ed29a49be56e081f5b6abcd2ca1a16dc096071989de72a39b8bd544d2a2a2db5c886c0c29ce454cf60addb56cb4f28f959ccb7163280ef81e48dd2a02024c34a120301d359f03844d1af01f485afbe7c9b17288cf345172290fdc44e124670c5ca9e8590df6f9f63d60849c62d3921003532dbe3e3e6bdd75d28211365f6c489598a99e605ca671ff91552b5916ea9e12259723c0e1a633be34932d0c816c30b519c79656a70368b28fadaf5eb32eb6e47e00b04f152ace2eafc9a3ebd3b1b3795ad85e0897e46ab57c361fef2908041d365f73180b505ae2426603decd0b7dd33e2f7ac885aced4194999602d4d62a984233d0696fff86f7fa7a6cf993fb7e5" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,0) #6 +depends_on:2 +3:exp:4:hex:"b8ceee088f3b13dbd1e7cf230449f246a456f504d63fd4288838a50ab76576a3f400502913cf57cb2341c5e6a63fe9fa":hex:"":hex:"":hex:"":hex:"b4fe3f6caedf4ac7b93fb1c2f316bafa58487f28a37b8400fd1f32c963b04cb3c7eb601d0dd8a7e4538b14030fb0e97794c617366ca827e3afdb0f714983a6a72b261db8bf98d5fc48fb55158661f987d08e952913212717cf204a3e8cf1177f63e2a46d920ffcec4b580a1361253a689bf765200f4e90dc6b34a56e10cfdbf932fbc3b75da1d55cba0c5287f552d883763b83acdfc7fc9d762f79774701f7ace701f0b26c67217e022bf6b6e0602e0d68cb1377b5ebccb9a8e41188dd1dea662663e8aa093787d6490a4e887a34a27309c64c40e4ab2f0acfec4a1b8d419d99fb578aaa82da9166a7d7873e27226db20d313e868bcfa4fe3854d6fb34def7d6" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,0) #7 +depends_on:2 +3:exp:4:hex:"3c1e8a0199786fc268ee0ca0c0446d7363bd781069cf3a3faef2592cba06ce1e70c7c691af73d6d59addbd6e3f646d64":hex:"":hex:"":hex:"":hex:"06f44bebc2c1736b5cee283e530bb877b28651d70983c272a10efa80e3794ee428644048d67245dd3ca8b769b6bb192c9468a9fcf2b71c417283713d39e800225ba659c3273022f5177fd7867173f457f3bb66ff2c2e7bb2574dfee54438e35c98506c178d35259b04e7c541016f5c2d980074b4ea865203ae2e8935d745a02ab5cce04d233cbc18719b1900f2e7e98229b851d19fac02fa6e5ac1bc973b20a17509739bd989d4ef5a66fd9e19e3ceef2415b498843e93631b2b168167bdbb8db313eef4c9668d5001cb34767ee41db872163987c3bdc144637b52dcb767ffc19bf44fbad487b1eeae7957b497fd59a95f0988315eba73ab7206542f31c49267" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,0) #8 +depends_on:2 +3:exp:4:hex:"e8a0925bfce66dee7e6a54fe0311d259bd7f7a22b8576d64840cc51c731212cb1763365deab3ab82de9996e5c8570eb9":hex:"":hex:"":hex:"":hex:"63ddfd70508cfa247408ec231d56df7905f65b62e5e5a8309fff5239620faa0f055d7b8fdbc648ded78fd567c3141e1723d197296c92d43fdc18af0c4a54fcd52613286c78ba7bdfd0fcacc7b11b374739088323ba95f30872d77b6aad21228253133d76d29d0d742ba349956fe71e8bbf3fc7186a3f85f144a9040ceb0529a713583c1fcdee756d0130b38df0964bfc3b669fabb6ec6874d17d9ecda9fa567890e42540185eeb3497ba8db80b803f63803442aec14735e9eda177484ad61bf0c76c2862b7691b4cc74efbe35203f8cf4f24aaaa1d831030f28eef8b49e85b249e6fe835964d53aa74de6a31424ec3c833f4b8b39559934bf5f23d4b1d450bc3" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,0) #9 +depends_on:2 +3:exp:4:hex:"c493ad96bb20b2480bd3122b4b1ea51379f5fa2bfd8bc0fed4080995b162c609b6d6197f432c8597163feb9c5439525d":hex:"":hex:"":hex:"":hex:"764d3e4459504b490eb1db7b5ab8e6413601e449750534f4c4f70025026f87217010eb14705eae6e513796c7f20ecace32a063238824b3fd6956810066930bf425a1c585221c8f61ac64aeccfe8a3e33d164d02d5434e9e594b7ff451601874d268a2fd8de9922c36e67d8146fe553889a15f624d499a22f5109896758f30bb98f70eac11da1ad48e99bb4422acc5b97295094324eecf530525c1ba150886d053c84004c265693a4419602e5e59bf120de6ff054d0c7c96bc14e9b5fe1290c08ebebcda21744c04a2e78964cb2b52f8e6a70930fd1ded1f0edbda4deff91a3310019e967df3fdbfa228bec9897412a748201649328b7d784851fcb5ac1251f8b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,0) #10 +depends_on:2 +3:exp:4:hex:"1e868c5fe4b59e6d4249854226bf1120a74386ea590e9c35c58d7ccdfad56d71dbf557da684289e96cbdd66cbd9cb879":hex:"":hex:"":hex:"":hex:"2032963be29c0d24c2631b1cd895124b9801a4d5c14c28fb34cbfb1c2467134f499153e2a3ec817cc4b2e4e06068ae78f5696dcee99334b0b51e9f29e56a3d3fd5c65c4cc70e10f9e0cea2572c28ec4afe0896d7689322d3afd931ff836be485f78aa179100d43d910564dd1adfedcd32e3e7e53b06c0a46a90b1173e4a5152cd8aa38f2a7e329d01c0b81e62be6c9fc8d1ff3db08f8c31c1e77c5d7fae619555c0e02c658486e35f27a7d58ce63b9b152b9ff528ab6a6cd9b59240f5a7b6b52dc3f6e47f9daa2cb8cb525d6760cf409ebe2c7641c3c32e330545bcd73da9eda20b7590d84831d4bec807a56994259bcd2fe28105f2d7fcdb3eec523fdef7044" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,0) #11 +depends_on:2 +3:exp:4:hex:"55bc1c7358dc334b26412ab472dcf4210740cfa0ea688812d8b1a7fb257b979edbab14240cf59fcc8a7007553ac480eb":hex:"":hex:"":hex:"":hex:"6a9d30d4ca97dbfc2d2852bef044bbfb95ac253b27e588c67fe179f6adb81147cc1cb6eba6a2c4afd6f8b3f1c8d45b51af1435ebf1ba8596830314353c9b4d8aff9620dba0099fe0a1ea417b97fa4c28491fe6d2a619172127f18155840f90456bfbf1e7ff587fbe566d6b8eadd6ce594bfcbabedda37858a7610c8230f594861984dbf1e3ddc9eccc8b9d2ec3cba1306d178f7677ed399b10b995b3ea55586519e5730e52ee8880ef0e63c476f2a80d77c6ba802c47e9174297b27520fb027d134e17cfa6f99d59cc5f53737cdc2e663e1ac59bf74a87ab1064e9acd4811c0406ec5a29a081bd0efd1e557d6b6c9c7fe6131c5c00fae82339a1fb90d3be2b6b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,0) #12 +depends_on:2 +3:exp:4:hex:"d894820d9cb243859447cd3a3f6cdd125a9c4faece6ad756d288a15c5d24c39d776c5ea9838c4c34f39f12c1a9df6700":hex:"":hex:"":hex:"":hex:"ba23f7aa0b7f6a93bc0df32e68e78786fffb5acd7fbc2864468568753e3ddf31fc2187b20c229d0d0b261510f6442816d2226024b57306b474079c92c66a00be482fc104cdbccef0450b3f2ce94f6bb6a5125e0774a28a2a083f802d3c45e9d4253295f80ca4bc439f539a7f82eec6fd450bd196ab468ec6902752dced44ab557fcd3f6a72c47c0f18cec6545ac669cf432e2db308d70a7394ec772a34f14f26d7bf7d0bd7e4437248618efa2c08adc7de9231ddcc976ef8bcbd11be54dd17ca9fa515fee6827bf5efb602fe8f1cf5d67078b17601803c5be05c24edccad2837d0be191f918d6dc62742241728a8690db5836c2045ec9f8bfa87b768f4febf2f" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,0) #13 +depends_on:2 +3:exp:4:hex:"17facdf2fca2e1134674ea8e8daa609b4477f415c6a13a5c157f3fb7727dda6d3c1dd89ad63e781588e4b3f8cb1f2f6e":hex:"":hex:"":hex:"":hex:"f472b4c20bf07c170b3c8eb682469e88680d1fa5561d72b864c5c438c95c4c8a3e61f89fc30d5fb4e843e5ed1230778b48c467fa46ebfb7b56220a610483827f3f7f8ac307f8aa57a68922a06c8fa5de732a0d05835cd48690a2b3f734e4b7e74799ad774579a9eb296112f3e2bb68551af0e9e0e5e0bbb219ccb6c78459dc68a3663987156a50e72aebb219a1e43b5603dbd8055bf1e76a4468caee86489ac9a1a9a66ee7b193484ff3bea84341b62dab124a43e38945cfc99f2c4c15590fe180bb3e6eac544483aef710278213a83da85a38b6d140f33654c9d4f6b8ab3eacef1c57fd2237dbe8adf23b3aef6ab30327ca119b9e1e95ecd068aafae0d07a08" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,0) #14 +depends_on:2 +3:exp:4:hex:"2c13e44674e89aa105fc11b05e8526769a53ab0b4688f3d0d9cf23af4c8469bb700ac6a616c1d1bb7bd8ff7e96a4d250":hex:"":hex:"":hex:"":hex:"f778161306fc5f1d9e649b2a26983f31266a84bc79dd1b0016c8de53706f9812c4cebdbde78a3592bc7752303154acd7f4d27c2d5751fc7b1fee62677a71fc90e259dfb4b6a9c372515fac6efe01958d199888c360504ffa4c7cf4517918c430f5640fedc738e0cc1fcec33945a34a62ca61a71a9067298d34ac4a93751ddcd9a0f142748a1f0a81a948c6c6a16179e70b6f13633fd03b838da20f81450b4fdc1752e98e71296f1941ca58e71b73ea93e99a98f58d0892fa16de6a16c602036ac857dd75f9ac2c9185932103db5430e80cde9131e814a0bf3f3e7a2200a7152424472fd27f791a854f29aecc448f8d3fca3f93290266df3193d9e13e08907ab2" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,256) #0 +depends_on:2 +3:exp:4:hex:"a3da06bc88e2f2ea5181292c194a10b3db38a11d02ac2f9c65951d0c71f63e36c74e5e3d7ba0193bcd6839e9ae93d70d":hex:"":hex:"dbb7270760d8d262557807ce746ff314fd06598143611ab69bfc7e10ca5784b3":hex:"8cdea882f894e5fdc5f0a0b16b7d9ac8cde35ed17bcaf2665564d4ee74059e29":hex:"cb706b90e88380e5c1864458454027821b571dfeba0da83f712efb107b8752099514ef87b4488fbfa3508a00954bb03090766d2bbd399e71c86c7967a4e8ded57095a29d4cfa01f8d28c97e81a4cd4fc5be7fb32a0d6c230cb8760e656b74fa7e18e2063ebee5787958b272fc5de93f0d6837e55f0c360dc593c88fff30a428cae37ded52f825646e04133a19790c304e4b1f040e10439c5edf454e6f71b23eeb43cdbe7b0634b8e283a97806073f7f28a43de2d0d969b3eda380c185b785b9101dc905025c9cdb499e594de0f0d3eb41922c20994fe2c403dd5bf01e4b2c3ee6654d6ab9cca7d4d5ae59525a796119547eae6a3cbf8ad0e9b1de3c4d5a804e4" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,256) #1 +depends_on:2 +3:exp:4:hex:"462cb274b7def1ac0f9db135c8fa2e48599cfe2badf2ae9f6d06886b25dfb0cc250461f0dadd9e23cc6c08ddf4ae12b9":hex:"":hex:"b087ff5e230284aef4c90b5f9c48fec91b486f3d936d422475a2b12ff47a05b0":hex:"150a4ca383c3863d9ae3212de9ab9da7442fcd5367af157714d74c149f69eb9d":hex:"12d4740dd0c5356fa76cc441f9088e361d3e636dc7b1ee27a26e28218eff470e28f51b76540939d624cacf2e3facf0967e7396a42017f68789e53f4b1d216fbae675801b8869b06d173d42126bf88fbbfef60aea6c4ba15538b2d64f8f22f389ee35e01e4ea88fd7c9e4d10c145a5f6e4dd33a55f2cafbd5f56856ea945b3b596b4900cf78936732bda49a52bc5a648c6561f48b820699533d48ff04eccd81aaa5bd25fa277ef314026effe2e65a9c38d45832cbb89579535782bf6299327339591a3e66d82aef6fcfa0a21b6b50a398b737a83a6a9b34dd46f3d15162dfa488fcadd18dd06f856f6d6c4cac2677eca641bd4e044ef4cddf6c95f1725fd8c606" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,256) #2 +depends_on:2 +3:exp:4:hex:"727337765db704e7b9d23dd139e63b5ac97adea990b7d04881b6b2de045c974a0265210aa4e336ac32f4b0a428ff272a":hex:"":hex:"48b452cbaeb990b6ca4ba64ae8f2a91d792ab83ad499093d9c4566ed8c7cee9b":hex:"e7e32096873180e03c9f7bb33c5af4edc3fb9a36113275839302d40f0890dbad":hex:"21c7d4c258778dce67f1a134670b8595dbbb0e036ae78484d7953f280f1faa5fb3bd213a54132a089a9d6f1376ca8b7064402409187acbd5de7e4d7146c1f02f73087a6c62ca6a7e736900a9e4464af0351bcb71b2e1f1cc07440cd74f50a61757f0b3bbb91fde9c898e62a9cec3dcaca0c94d5d0a8edac0f82b3c99b65d736884ffdd23fff1d9d6e8199254e784514fe3c34db51a86eeb06ef7dffcfba9f195c52cc4b2db53e0a6b1bdbed68d85822c6c03571482fdb6535eee1b6e26ce7d33433d3a1271c5b93ce9a31c9d7c805e3635e79682fa5f8e7894d8d16ead32e3fe8c625174a12a7b8623c0000a75c506cd367bdbc4e3da3b462938875050ff2271" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,256) #3 +depends_on:2 +3:exp:4:hex:"8ce3f77c4ba4f40d4eb3e80d03f9b138bea725d44f7a47f4a1f7ee3afb45c2a0e8fa75683ba03964a8e3312ccc6e1b66":hex:"":hex:"83260430843b586cfa50ab51120ea5675d63402074d45b0bf80dfbbec74fdc63":hex:"0640b6427bdd6ead525962b228392b3c28abe131719feb0c0f738288ee87acbb":hex:"d0a402dac648f7a53b5ffbebb1f5e6a12998c999809007f357dc568d7c653bd3b4da793d6d7ef802338eb36c7e4745655001f700c4ca68cda07d726dd088ed9948b2d49d8b50a72530dc9daa3387cd69ce32ca49dfa6cfca98f8a8b641c929f84c5f4045579dbfd3fdcd997068bb0f905f9a4a00accf06a483282e2eb99b94d78be46e07dc87903208bac0fa75323920997d9c4f9c0fa4cca5e6b1d69fdbfae8dbb52d659028387472c1a54283d074954094ae11bd3aa97360073ee033d7008e63b89e0efa4788eefa96ab726af4c2422b7472fa1efb7d95bec93fccb7351768625de30d9f5377610026b6f7f9568a9659644c7e68483672ca9ac8d0994efd68" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,256) #4 +depends_on:2 +3:exp:4:hex:"96b0d3b13a65ae1010bf40e6e2dc6e6585db8fdb8fbd2b272611e51c62e1111ae93babde207a42980c9ac9018ab01153":hex:"":hex:"b67c2ecbc4d4c46c3573883b61311a2655cdff0e01a12a20ea0cfa4e91034c2b":hex:"9ca69103d5af577da056d4d5e95f53be87aae4689918bdf0d011789f2ccba9b5":hex:"63f05a9815c2671298e9caa06b0746767fdcc00884eb1b30e53b16593508bb75dcaff9932230913f9b62cd0361af168993ce7b6b967114e2612c8f9c376104633ad4eae2e968e455b96d1d5ed6928eee9acb21bb8fdee7bf525f143dcc624a66ad42f1bdbafc19b165284f2c771edc57dc9092ffae6ef8acb9f8fdba496607c54b07f3ff4d1721f45db43f8ed5c695716b405b57034cf4f87ab487a01057ed449bd918093c532fe85015f0c5856cbd7a440c33c7968dd25330f78b66248873959967e307f9c9697803e8b0939fae51870ec533ef7d17e227dcb68ccf270299e65ed8483b9077831e010e9dda3a50ef7b008a0762c8ac5ef42b7e2ecba450d7d6" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,256) #5 +depends_on:2 +3:exp:4:hex:"49913e04b653d82abc54cbddcdf898c409819dbdda4af93bc97b434dd1e319706504b1c76f34ca6d9dfb181c7057ed8c":hex:"":hex:"68b8f6f749ad588ff2c7477fd7c55be648134d57be6846674f2659d75785c39f":hex:"cd7b2d7b24070e501843f0caa20666fbf963760893f4e277d944991ec965fbe3":hex:"67ba01fe694d8f9621d47be0dd9119b8654d028e4c095347629afd02e96fbe6e4535d1666ee0331a6da79e703571ea0983a0d02051bd95dd130c7733012424b79a0bdfbcf72c9cb0c6d6ee408e2f0de45cb084d8182d1b8b4d389b78d0e3fbb7f3c8891ef522f077851b2463bdf1399d178dae3299a43b00f48cd1068e17f42615bd506878eef5fcd5951c24641b58f7a563240abbab5779db1e44bc2c66dd48ea7e746660042bf92b727d622bafebc05de309c24824ddd1d9ae86034a8694ae5962f61ab6e76b435c9dc8b370d708adc4d6fbbfc44644da3f4d4f24d3c95d958de143531c84b188445b6840775726c87b1b058dd8c14e4648973d5a91a152ba" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,256) #6 +depends_on:2 +3:exp:4:hex:"4687135763568418f6f30af400d37d794f712b10a42087fd832d840b9e8b1f818dadd1aba09e78a1925ecd9ee0d106f2":hex:"":hex:"ac00dc729c5526698fb80f685ffe93e9c25bf93b22424c15c20043e1fcafbc7d":hex:"948555d8a6e0473a769b7019e6909a8565e386a624a47a1f9c96ff5e6609a894":hex:"4f09384ba8a34f819a0d4473c3387f74299753fd16e386be51a5ee70d1b164be6fa53a3face06379da2d961bfd6ba21eb437bc77b527960352790bbc978217549006e7409b86ee97d6a042957d27a02fa5f04de94791bcd7d02cc6798bc66d3b6cd887f2a984224b3c279382558ff64459703d93b40fcdbaa7abe1bcdf0b95f4c6ec6583a86a41f837c6cbdefee3de4767e330cb2f4a0d8915f192f02c1ebfc78345f80d5e0f21185c647376d588991486ca9a8fe5c68d0b71a5f81b08bb112c56f69c89412f0282eb1bed0d05c959608d1eb6b1eb4a76a76ae927cfd8d651a651fe83668f24bc0d19e5de86813b16bfe8c771dc9f16a7d6d0441b3278de136c" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,256) #7 +depends_on:2 +3:exp:4:hex:"4ccc3c6cd73101efb7833ce1195b28b3aa3e5628db02be166f2a7f6bf7e8efdad5ff3f1c375ef981336af28252756647":hex:"":hex:"8396edacbe629826be44543bece17ede600f7f877d1138af5e83c3ec44b8b0de":hex:"98545ad6268e604fedeacaa10b727ced0b0e284a00c29081a41c0d2e3675bacf":hex:"c37ef92675ad963cf41ee5c14d882698082e8dda5a0ce9d50b8409c9f0d30d3294c7c625ef29c33f395de140405a6f9cd9d737a29d892b67e90427af24e200bc9cc7b5d920aa8a93d8ddd0b6f69cc98e303ca3a512b3d883ec542403d58bab1b4232c31696e72a764f2dc7b278bba02efdbd5413a08563833ef7a283aa6e5ab221d1ce5c7dd14363ecbeee879d157b6aefc8bfd2acc004d19eda7cb4b382e54bb725705b3f52ca5be08df445d8f6eb46353ef26217bd3c1b508f049e810fabacc0a75d717b2bea9f63cd8d2fdffc27322eafc98e7de18a911ff44cd0e5864e0897f0550e3c48674d11dbecc9d6d4c42f7592fba440608ad479ed296a6ea6b1b0" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,256) #8 +depends_on:2 +3:exp:4:hex:"85ef33038e0bee3e40ce8eefd3648e89c521ad537b0c8003617824b08a154b75c89f036845a6f24fb9a15513ed28eda2":hex:"":hex:"2c675110a2bbcee5c6096cfd8f363441e3473664cf09577a95996928519a9292":hex:"f1db097abed76cdbb1fe6aaba94bb51c2af8f43c5cdd2eafdf6b40a234d3897d":hex:"beda7162fb3e07d96a5796f091388995894f69a59f06a0c7c8eb704b5dfcb82f7171d34628b116e1ceb0b180e6052d01fcb13510edd4050e15d6a8bb27a5bbac46d8847972f2638967d53d5b7752452bbf0bebb953a4e40212ab587b8e74a9599021c93071ac55a08feab70ee040c3cf32246857167f13473d20a38c8d6d364da4d1f043e24a65b2dc58ae2a56215a34081fe91bd554edf86a7d582b227316662dac6a71693806545760060fc1a204df40f1b5df92c7b0561507ecd95609fa5317bc43b1e9a40880a230fb4deb79cf4a7a2b97beeb9cd4c8c841d4ef2668d870eaa11f2fbfa0fb899a424f1600bd46778136dedd147f124dde4d64693233462b" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,256) #9 +depends_on:2 +3:exp:4:hex:"77a48fcd8cbea1be145a65c9e20cbc4e660dd439c7ec7e2dabc6f0430c5ba716182f05e834e84e89565714fe8ccf0de6":hex:"":hex:"1b838d460961b8f1623667fb316772cf50aa462ceeb58c36e2a6482ce7aa9f9f":hex:"ccd4048bae7f8166c35e932cf3a09feb2f97dbb31af61a3fe5e4edb881ba6930":hex:"af5afbb8d60d77c36c20a8f4c20b68ccd7fddb703d1ae83b5981605c4483e4f092329bd75aaeeb6fb4e6552540bd772edba5e5a96dd227acef73241257fe8774f757c673dc3370423de5a85b9118b5aa98682db6a89f520174a25e8e4b71f83ef432a91ddd8f69c1431c40d282d7e789427f18d9c5673131d5d3797d1335ffda64319d642f5ea5c1641092893a4008f076b649170916a03e06f0854848607c6c44a9f27bd3b17b293a914a86139e9a1b11c8652eae3757162f9f7161a2ee6f412a40002781e8fc8b80242331528225e70b9b23c6b2c970db12eab61bc290fec9b4c6c13d6454d7336f439d9b4b1df59248ab84e3a79d7f37df07e88c20f9ed92" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,256) #10 +depends_on:2 +3:exp:4:hex:"71cea1ba7a7dc792ca33288ccfb67570d9b1eab34e35296209db20c6676f174df4e062d1f660522881aeb11a651581f3":hex:"":hex:"c9667d28614fa05f112ec31487cdb3d925f2cb312202f7d85695a8f7336573b9":hex:"6363dc485ddb9bdd61db33fb1beae9bfe2d0e7788a86b50774f8658bac094214":hex:"e62486e1dc854f90b803635c1718f075cecf7fd44d1d304d0127979b83bee5e4abdae9076fc5ef89f6435e4b72cee056372c603f16beed39a2adf6ddc2577b32b29396db81e9ce57fb67c2525c2a59dea259ace4a7b6560ee20ca8e3f476786c34466ff5f6b45ccc916477f6fe96e7e4be23867a9ff9fa07609d9d8a5db7f5e1a068ba9b9c82bf72e76d17f73518affd5c58368232bcafe65096962c561617f489c8d978cb28676d8932a3c3489eb0f2f48a193826ee785dc850e41b0ced359ecd2636d96e83fdf8996617e6a39e141c124ad1e2e5fdad27144e60b56ed70d91543f3046acc831a6d56926ab1635de7e04a149958c9365a53c144903d7ea392c" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,256) #11 +depends_on:2 +3:exp:4:hex:"3a23653a34334db7d3abbf747d9d47d6b18589ab3516b0600bc93517d206a1a9c74a51766beec0563db655273d5dbcf9":hex:"":hex:"89922f45e6637e7fcae0a98d7ccdcf36650bbf7fe3253b7716014047a0983e98":hex:"5d7519b3f442e1246185e1e7a56fd37473f18824f3c9d21656f54f1fa8d2947f":hex:"fa40b69397e13d5f1ceaf294fb1d3a15db8b345286e5359bbffe5cd743ebab412845a9f5e4ed8481cea178d7b647019a7729c264220991c3ae276f82d6c33402f061aabd2e28cfed64565cc2d7f1774e26281d0808b2857d1c144d5aa36944a38358181b28b9110470601204076c02ed44ef411cd6a75fecf55225eeb3ef4f1717d3f5cdaec83f5defe835d2a236eb1a8f00167a727329163eed34b3b34bade7896e2d0de1db1b15c7c2b173ee8d4f0bf77f8e8a973be61e107daf240b9b7edbc599469b5f40e98c0d2d40b048ce4462cdead7e8f85d175a1f39f8bac61ec00f4cb4c8081201ca6319984264adca745b1d0feb471b5d8fa35bded03357fcd7e0" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,256) #12 +depends_on:2 +3:exp:4:hex:"24cd11e75f2b0ab60c5b7a35020d716cea2e4f5b7748327c0cf355b11805189334889dc3198f13c36cf7beb42b2a1a6f":hex:"":hex:"cf9571fecac5d79d65617a885815703de3459cf739db097f8ff2ee557d0b0745":hex:"2282cbdba64ac2a4053c070efd1dd0638fc31dff97dfa15f76bc077bf173a821":hex:"1b0466ae577c0b9e943616437c24b9d32ceeaec15bc83841843585c6255534a4a71ac96698f628d907255894f6199f6d7bf405afb0e46359ae0dec788ca52111950f8adf88d324f5b9a76d79e67c3581b0cf0318901332883794398e6aea0f7da1f55f30ca34b11127e885e86d787f8f8b3a1342d71f3738c8445707e0dea687baf759b261eceb4d661ec9bb006e9f08aeb1cc0357cd8df526943d71a6d73c9ae80ca69fcc3004b91dfdb2b6b8d0424c1cad81677d510ac7a51c1ce6f02b9ab41466e37ae0c2adfc63b31fc2e4693e467d3384fe359e9f0fd0f4d08f4a9037f3fd5495d895b6ed4121cca037c6aa87a5ccc5b856ee6151a900459ff0ea77550e" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,256) #13 +depends_on:2 +3:exp:4:hex:"4931d76a7ceb2238c1f0ed76be24d2fe1a925d1084a392fc8c43d93535da0e9351e52abb58a9bc34c46f254b8313d387":hex:"":hex:"92a8eb05034555680bc937d0d958e820b09785009e5e05739f29d9af17a63976":hex:"d37465a30f837fe05f04f6b7ad4bb1c83bbae83f9c78f027b4831f5e2ad2dd78":hex:"a61894d3c30081c7836dee8506cb97bf7bb4e56a8a94c72d9c8b6900b69ea68b30c41ad33dd21554361c171cb959c555bb668436293e3f1c103bb72509e43f2baa19742ed8c2d3eb9d0790c845097a7f0b2715b3d127a7f043c4b265b4d6fb4b9af9edd12427e1b5c8b680a135a315761aa4a9ed598a7620f335fd595c40c933696cf95b7eca55e8520e9154f69e3446ea4fc3b69f36fa1ae7eb456b350c93a1ebde342bd4578142d8338268af1c240c94457888d045d73196347318f89e281865b826837ca79da5a6dbc81569c42da475d97ab5501a1b13e99058c40840958331bb73c78e5ec90aa0464b9f603f11bc4baddc28b71c42282176654458d2fcaf" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,0,256) #14 +depends_on:2 +3:exp:4:hex:"ffa596ed725daea92273519c279d0a26be7f77cee1fc4fca44dc99b97ad8125a3172e5a36ebc671df1fcaaa54bd7218a":hex:"":hex:"6cfccdd8253cc5b284701ef8d16f8888f79100373a7df50f43a122591bbddafc":hex:"5795ae5be47a7f793423820352505e3890bac3805c102020e48226deab70140a":hex:"4a398c114f2e0ac330893d103b585cadcf9cd3b2ac7e46cde15b2f32cc4b9a7c7172b1a73f86d6d12d02973e561fa7f615e30195f7715022df75157f41dc7f9a50029350e308e3345c9ab2029bdc0f1b72c195db098c26c1ab1864224504c72f48a64d722e41b00707c7f2f6cdfe8634d06abe838c85b419c02bf419b88cde35324b1bfdaddff8b7e95f6af0e55b5ff3f5475feb354f2a7a490597b36080322265b213541682572616f3d3276c713a978259d607c6d69eec26d524ba38163a329103e39e3b0a8ec989eca74f287d6d39c7ceda4df8558faeb9d25149963430f33b108dc136a4f9bfa416b3ceaa6632cd5505fe14fb0d78cf15f2acfa03b9c307" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,0) #0 +depends_on:2 +3:exp:4:hex:"e97a4631d0a08d549cde8af9a1aae058e3e9585575a726c76a27bc62bed18a4b227221d5fe5a5db9810f9afe56a3ee78":hex:"94084b11d55e0f9c2ef577741753af66ad7a25b28524b50ea970105c3545e97d":hex:"24c81d4773938371b906cf4801957ac22f87432b9c8a84bc5ac04ad5b1cc3f57":hex:"c8c878451e2b76577c36393ca253888c1038885bbfdacd8539615a611e2ac00b":hex:"761422dea283262998c0ffffefc77de2d395c818b9cf1ac2bcd1153235e0d8b63199c51e195135a75f1f87b454484ecc560c532c7ba5923c9490a423c177453459d81efc38ce2939226043cb733062eae303a009b48ee0cf3c7e40abe2b57a70a6062c669a9fbff20b4c94b4ecbc5f744a80d7be8134359581d441da921737b1329470b214f3e679fb7ad48baf046bac59a36b5770806cdef28cc4a8fd0e049b924c3c9216e00ba63c2ff771d66b7520dd33a85382a84b622717e594e447c919926a5b2e94d490ee626da9df587fed674067917963fd51d383e55730c17a124555e2e46e1395c9920d07dae4d67ffee5c759b6a326eec6d7b3ba6dee012e4807" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,0) #1 +depends_on:2 +3:exp:4:hex:"5c96609e9de807efed31d3c2d63e284be5c44c1b5ab84672664de8d8d8e2f8181b95a5290fdafeb05dc902a9a7bd639b":hex:"135aafb3bbc89ef1e00a2a35ef32f122b7511cc55d86e7822a34859b630b4d29":hex:"115774904a953af07936e3efdcf6054b4c534dc8654f563bb10610444d30625f":hex:"4705ec7525e63919f7483fe76cdf7397b19f22d2a9d54b6cf0ff9abcf0a7c46d":hex:"ae2cfbb29fde23e8c22d77d7a50ba66798da93be4e49ef78b38c9be2411e2d8a9954eb29fbad0a967c51b26d8d746801539aceb32e2459d07baa994869d3b6db2c88fb9d7250fac00de8f79990d501ad985590031f7c45a00cd9b6d1b5531b238f3a31d33237c40a3da31356171cafd52cbb7929e32b38fe523d8212de801f554348a3cc468daca70e05affc9af97f172aba00b2acc50d7dcb5f0ecbce741c71a65c657e9d0f250c44f73865962b1a0d19738e9ffe9f17c3e03363bedf5312c444375529fa8df9dd72b7c09f20c2ef37abb93e6fa57cadbcd7b23036bb9924fcfb9bf83b09ea360fd3988639151b1ab22939e9ea1cdc413f7a2cf04cf2778345" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,0) #2 +depends_on:2 +3:exp:4:hex:"4cbbd0538535994cf00354ff8609ddfd04e80dc4174b9542cdab52385dd968ddbef8157a6e3f26f040229a450f8e564f":hex:"ed81729d1aef522f7bf9c127207d8a680ce4432964ed4025b5bbb12964374f3e":hex:"1259073b57358935b7149fa4349793c5ff28d3ce98b483ec48986aa285451abc":hex:"b350a4e931bb5db50a866aa3c01ead7d48d5859bb97b675e77ebb844ac832eb9":hex:"215cca589f737df48d60360c4806ed548d44938c2bf5b1707310df987edda51e5092a7d9ca4955303ac59bfa980ba6e1819ed1141978c3d7df1125f5c4abec5b15bb8f5fd0edb1f26bcebea5aa7c8d5d32e8a5b608f609d9dfd765074b23cc524596a91226b726d899e42bdee0321eeb2dbaf63d33cced6890c19b466636df05072f007ae60a2364dde7f82315e3e30e63258b8abd12f18b6ab3d384cc9349e56dff00c3f53a86a301aa7205394199d32382096f6cd9db9646a92e73c3fd1e53c28a91683031c1ac72bb85af50be669d0e1d7b05a3bf1fc9720025c1e39e1f09d18d2e9247f726ac691a1c2321a667e6bacd7d77a57ce46397db1a91e7908ad5" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,0) #3 +depends_on:2 +3:exp:4:hex:"9b2bb0f34e6f0a31eff00e6604e6ca77643f69895877f77197a06e2b42bf047b3c1ee55a2a28fb3579324a54458310b2":hex:"895e7060956784e5ea113ca785214bcf608e2a53c175e6edf5b78f1ad90e67c6":hex:"c0b1980d57fb797c4907aad1fb5662bcc8d6ee30f6bed951e77c11d1893346e9":hex:"af3357fd21fc04d1d1bd162b94bf129c45d41fee90366a180d98d41325336b5c":hex:"50941cc105c694dd26d5bc73c08399168a270428ef594a6968fde834e889cfbbf0a80d7dad65d2fca21ba8019f1011313fe86983a555fb3ccb643bb771724e04114f3266d72c2e1a75363aebda9871c3bafcee3f389ff4c6f1f1bb5e6da5389e04f2822da800cb058da9cd698c65d54b16e7562c83506b632e4b5c7a78d6e36ec307e48cfec4fbc3ca3dd67ca95f9bd7f1d609e0a6d8b5bd3feef00e0c4165e77da84f989210c78daf633aef657855fca26b832994000f980c21d355db10f71f9cbb8079c48aeb673c5ba097a325d9a89e05bbf960fed4f8eb097cf37f61900db8171685107d53f85bbd8c1a4a1c7045c8b6e3a8a2c4114542292555585a090d" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,0) #4 +depends_on:2 +3:exp:4:hex:"9c8306c6941098408c56518a44d3075c22e02f19a6041d2e9c4e296fda435db917c99d538ab65f6f1bfab0d479a1833a":hex:"3a80e9f5b71b242ae07ce7b617057dabae189c5468da2cf049b5b529abc877d5":hex:"3c151e92dd3121a8d2d11604632df00cf90706d3e843737445de0f2fde1ea924":hex:"f53cb5fe673201f5eaf4115382d48ba45be405b37a31a56e41d1d76202038b06":hex:"9bf31156e54d7142490e620afec2217931fb2389215a3609b384b0551bb3c9d90c3b3053054046a324db9b34633e41b66114bfa7ee86bbd22d08d53e349a4dc875265b32151d3e475df348a22d5226478184f372b0ba3be92ec1b284fc66dfa3609463214b6b468b29478acb0c55e1d4674882cb75e3eaa3a66ea0f4d7b1a571206a761d636bd3519afb6f05a0f1b6bb38c00bd68530a6c9b445b6b4a9c7457a055627b606f4508ed676fb5ba0d27589b7f464271c3e561215905c50ec48f5ddd1b8549e8d163453083db96c7ec8eeedaf6804369e76760b08abcca937c497900be385db8804b443e8a1489b8f3e3e4cf367dac3e15cb8e95cdabad04f08856c" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,0) #5 +depends_on:2 +3:exp:4:hex:"87a8fce521df0a2e26f1b1f9c7ec9e98968474915a085a95cbdca7d8c669e08a69b8c3c3df07f9ada368be448938bf92":hex:"b1bfaead04743bdcfdb193d32260918ff803abbcc0d5ddc50439bd01f6e42a3c":hex:"12a07384e9c74fb3f33df1a089dddb7d416151a0270d0c0216e085f1ec4c249b":hex:"9b42567093112cb5889703b77b4b372276b5bbccadf86eeb9ef6d3cd395b2acd":hex:"5ba662260aa0f743a33a9b552ce41d93335a855a55df11b870efacb7f75e39c978e730acce3664c814ac10fa10989fb00a39b584bb14cad2c02c309703c8ea8768d479d9b4e17402ee38cb82c5f4d80125f3e674ac1adb919cc8a988f79f531b08253fbad0a1b27fb1997a4e2c7bd5ff3abf66281e8b60987587327a9101b76cd13771e23ee2f02dc339589b9aac4f5af740afdaf494021c3504fdda8f93f77cdd8262df7d4c48f85b6eb03a7e5279db4d18f645a63eb6f53f9fb123c53a78686f0113a209b6eeef3b10cd4489875a07af863c467f25b69cd13b8e72847465fba025e25fe7bcb41745369f255df0eeffc3e5f066815ef7715680b104e20a7e9e" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,0) #6 +depends_on:2 +3:exp:4:hex:"69d667bde79e41cb78742426ca5ebd48086cf1ded5cad7293fcf910e5ab23cc8cad75bd989c3ffd05817d1aaa5493c05":hex:"5f72346eb50ea82cb111d5b3c91dc9b7c61c92fa1a062177d513fb616b1226d5":hex:"0465b8aa89d9cbbe8e1cfa2e64e64b8d1f5dbec7f710a6d37fce898e3f81e57b":hex:"173135f31c2320cccf513e88a21f2d207e00cbe4330d2f550e0be77405eef47a":hex:"34a08d7a564515a918bce93cae084f27a558f6f214c4bc9169dbf507c3f11d02ec97bdfd777960f6b4c4543c1e14456d0079215320ab607e04b7519090ebaf3a5fbb0d7a3fda1af6cd8c5d785524bdba75abbe50e3d58e5f05f8f6b2c2570f1178acd2f4c11a7b1b8b4ebe4ddb71a85bf19bb2fb25241374530cbc6c0605066e1129a2d398356cf2ec2f7a286c5b869c702aced63f4e12f39b7ce250547a922872c36268a3a4649f6641987bb7c6baf1a3e82cdf04d11160ba11c5a002cfbcf4a8698286ff318ec01fc2c5f6664e50561991a533ad183a21e7b97e0052b0350d213738b0c6e5421a524845a861f539930540cc40c6ed78c46be9c122e7974d35" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,0) #7 +depends_on:2 +3:exp:4:hex:"f1f6e5a55fb2180de436d48115aa1aa38a6242eeb0959de3690f259c1d8395a5862d1ac4843404d25215c83bca90f44e":hex:"f467ef083c745a1bfc9be44f1d468b2518e3ff1c0cee6819fdde354d4071b17e":hex:"fdda9f0888c4439cded15a768300d163c1e326ee5571c22ab95ab3e44b1676d2":hex:"6b8d60c565604c8fa8d7adaf0b07ed268a491fb79794d2770356e191daa1cb50":hex:"55d0788614b770f4b8c3d3ac0bbf628f294ba2fd16612b65d0f469ded665e3c8b82c95db80cc6b410b5a6e624151fc50bf02f279ffabc19dd094cffb17ba44b11209b923df326db14eee35a8bf1eca3807afae918206e844e517eb32c207342008a0da742e734433867fd86fd89d27ec6e51a9db3ad1adea645fdc57179c4b71de8b455ae00efc09328a0bffd8c61e3880c007915997daeed4adba61b44040f6f9b6c6427e1c23357c8f7e18b5c974b3c34a2fd5cb5e70f48df2d10c1deabd987f8390bb33858d9a5133a7bd798b1c7741729b8562fecb3d4831e9ce101de192d64bb5d757cbb21090d669afc5566c1d6e25586678b5f2fc7d6c6113ac4eb54f" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,0) #8 +depends_on:2 +3:exp:4:hex:"0db9d437153149e101d5818b263b975735994dfc33d8b3f158a05760867757ab438a5024e1d43006226018c378af55d3":hex:"275bdc5fc78b0d8afb5c8aa5f7854c319a81bb8cc9300210a9990fb7933a352e":hex:"809da54d1830545672f180fa3e0441a0d3fe472e7cd7a6d707fee5af7e9b21c2":hex:"ebe66cee6efbf583c881a25e346ca7d99741dacfce0d8785c659e92774e26ff2":hex:"878a3d109d814ff4a4935689ca96b3d444bfcee9edfcd9031255ad2538871027273bad5225864e84f3c2afaa22a40e7f6793abbc49c8b0ddc7b30d9dc7b408888e6b98f4bc79e08775b599661ea4b50669132c21272f8d17fec9d1e5310335b0e6480d7075c830a44ea528900f99de61191b5a006ca4340356dbf20c62e8ffd0577d623146b12937e84a6e17c0ae08efd339c9aa979c7e21e9c56e019f7e4f375bb601b1a83c21f27a554ec05191794befe514dfbff5a3c9a0a9c80bfe9b6adc7deffd31c70ba13fcf170abd6bf3d384381e0a31fa9c81b1bd207ea2e0b4153b6a1252a9f73f19f6f099fda0f87baba99b9711a00b5f50ad88d3bc1c4e806467" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,0) #9 +depends_on:2 +3:exp:4:hex:"4106f6ba6a291fa54e4ecfd9fa61b961554e4e8e03e19d9bfd82bd35c3471e8bc5bdcd2f810079c1bbfe906929e88d27":hex:"5a7e61b86ca70939e64af613a667695c7c915e667c79998e76e55eb33fef6d86":hex:"86c7d5883aee568aa74d25782019fbd6f5acf4196752ff3d1dd96ec1e7436424":hex:"3a5d80e739f5a30e6bb507d82b60ff987d5bd9cbbff4b47daff278a3252db3ef":hex:"fb146146f828e880c6ec7ab5a65fc8ec4e4d7d975c6d7c0a9bc7ce041f49799b11e235d7ac5a4ec4eea721c3323448e686ae96579233ad698a9d6fe3f5b37d87ccfce640192dcdb51c7bf35404c90b705bd97482d95d1c3e3a40152c86ab923588842ab02f4d922318a7fb84453b072c749a7f54e8ad005c29c48af6f01ecdd8fac13295e42b2077c70c7bf54e214317f98003e4cde07755e95c91f1953b29b3eecd49dc753e74aaf2b1c83feae87428be6a5aaa3261f0f65491e04c1fcdfd5481eadab68f057df3c83694c7451fded86a18470b06f1779c38efcac54b576e99eced3b5581eb5c9f7b3340ad5667d1f0d3fead8b9484a032d5f74d900fd64d10" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,0) #10 +depends_on:2 +3:exp:4:hex:"5d1fcdabb70dad1428c8be291720c92b8565f331ee3438d79bcddc968efedcdb9319f5ee91124b93b965d504211fef04":hex:"6c8c8a066c6208dbc18a40a30b9f689048877e038bf76d65acbdde7ae4c566f8":hex:"bfa2e9ebe0d70d3b62cdbd78c775a62e0e22fa75f168123a336b66b9a2b68c06":hex:"e48b5245ea241baeb7f665a9daaad662d7b2422c3e3711cfbed81d73691864ee":hex:"1586e0761c4a39013dcb552a0e363e709f4303c0e575653c9b240be7449ea26e4bb1dc93f06ec958b6c06217757fc550b356c135063c00fce9d856aec0edd20735b46b7c9a8e7df780db3072fc2b314fa5cda653ba3690132f10d30ee94c8458846be75659ef3868086bcf54ff55a8db1ea65c3e747a8ddab3f2304738e0c75adfc10c23ba651ccf0de64a39cab3beef667f466391a61a87a981afe883f09c4edbd3eae98d51cd3e7b31ee179f8a4e10feac96ea210a4b8415c9f2cfeb2bc8bf51f13801dc542ba1badda1c30141d72abb1bbb35c9bb481d91db5691c44bf3526a02d0bf776304a951858aa2fcf3f45bc656abcaeea94cbdc851a914b4b3a3ea" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,0) #11 +depends_on:2 +3:exp:4:hex:"9fc58d0785adbf033ce6642dcc9a861df44a35e89d06b346b165074a048b500994b4c0b3e27306b8c805c97b0ea14bb5":hex:"e02f7a856266195fb5f4810232cd5c71a4465e1d95625c01e8e7eb69c63f6796":hex:"7cd18b8d035b57bd01464280abe891b7faf55f9ed9910d9a148b030340c67cdb":hex:"918c4d43fecf993227f7c120d239a30d3c315602800d6d58b9e9e0715964cfa3":hex:"b8a3581eb4a208d1ab8f0e84e9ff3d2e0ba57703a7b5be2e4f3a3ede2e2519f5e6068c28c41171446cfbc40b48a97bc7a9a1e4d3b02f48fbf55b1d63da7cbc5b7a95f354afda273dbf5bf099961db4a4c5f296286dc0a51091a522398973d5527b2e55e0523c21fffdd0dd38527bc45959d5a711d541634e3139577312d678421eb37553c127beec64422316e48542a906cd7efe0d96eae3c4f2db7666083d9365a76cee4a207d712ddb04bf775be29ed9f030eade4537961737e3939a19e0769a3a8b96d055120c49925fe1ebc4a2ad54468421dd5465e8761b3e2e384373a971e408dd3a54907538a7d887986677eb192761959a4293523f81647a657aaeea" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,0) #12 +depends_on:2 +3:exp:4:hex:"d43927d1e633fc3433536cd03617a97a3a10a7ecad3f0c781602829f8ec7feb2dd5922f2a2dee51db93bcf35100a8364":hex:"3335a02aba1ea28d2e56973e21109e0adfb5068613c447e625fd83a8d0e34494":hex:"bfde33c52407d3137123812c4818ca1e4b61878b8f9dbaec47935e3948a88d0d":hex:"42597cf03bbee0e003d8677159918f5318402f7329f08e1d93c850e2a2a2f1bb":hex:"e53c7d0b376a94809f472961acff314079014958935cd67acc476abdd919a43cd3f7d1462d0d6e628ef5d0c8e04a6d243838c61ea36b015e84d7ad59e49b45c9b04f6ec78687ba47156e429b2fb6dc2c0da4f5677d1f689cd28612cfa6d95628c26b5b3e01186153a1c25c02f5ce5fc287623358687d2034347b2433ffc1445a2d93cb0103ccdaf0c585f7f4e7d41aef310be127208b3da90523aceac5fa13ffe77eaa4d1fd058957c8dd2f355cae7f9e3d8f29ec7099599ba6c755689d53d6ccd84e33407a066506d97decd7e306d22ca6e0faa7b94f91f4eb004422ddf9dd6b1f49b6400ea55d40e25c67103ab50bcc92d100e89ba569b6d51aacddf02daf1" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,0) #13 +depends_on:2 +3:exp:4:hex:"0bd69ce9a0a66dffefba83ae563e8df0fc6c7d7bdf491bf52cbf3f3777025cdf92b32217f550a1fe735b8519b44b040d":hex:"820da3187bc879cd1f40476fd9677f3b67e02b35b6632ab68891e25f10555b69":hex:"903b882de013695b4683316ffbd7c7809288d54c72e369f70cf172bff85e5629":hex:"cfb5f494e76486ceef12dfe1bafd6ccf9b0754d8d2306fb0c41c0f4e921317ef":hex:"ebad5e5a358ceab806ae5590d80bc0ba5d4061f49f4cb79a8a9da4fd1e8cb8f41cd8edc657c5180d18e62da2b53a50085b7e18b957eaf4edc975ca9d43e380434f51542dcfa947c322c708f3d3593c520717230df17f9341f02a5596b2058a27ba23f72a862b391be884570b22e20c80dd20d0a935f068465d554c8291fcd88eff608e92200f90cccdc82cb5697f0406654d9582e8db54225aaa28697bf2c4f47eba086a575298b991098c212c9e8d95bfa48f7e500c7223d9cbffd1df6f725909ab6e9aa837ff9e69158af434d18e5a7f99d1aaf10931f380d88344ad841064130cae50edf8687615743735f80457a228475bab7559015c4f45f91bdfa31d87" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,0) #14 +depends_on:2 +3:exp:4:hex:"45784684d6004731689e33e45b344d7b68dc4fa841133cb2dd65c4b326dffa901109dfac2e48bf17f2fea33b412dc653":hex:"7c6f4675f7a0b8c424d5be9e809efa305493874d9a950cb343afdfb64e77ecb5":hex:"2b2dbe3834d8be93f1396b19be83bd96823dd82740da71c5eeb7b21865021884":hex:"49c322fc1bec86d3e20628d9bdc1644e6f5e0237c7c694746bfee32a00145696":hex:"9110cec7d07e6e32724bf043e73021b3ca0e4516b619d036ac9a00914e12f01ece71989f55c1caccd542c60a9cccffb91e203fd39dca2d92c8eb03ee7ee88abf21dc6891de326c3190f25ee9ab44ca72d178db0f846969465b25a07dcc83777e6b63a7f9f1a8246dd31ce50cd9eb70e6e383c9ad4dae19f7cec8bfe079b36d309c28b10161c28b8d66c357c7ee01f07403a596366725fd5bd3a5de3cb40dcf60aac10635615b866ae633fbdb7ece41695d533757d9d16c6d44fd170fae77c15b7426ed6ec8c9d6e9245cd5e19e8dc3c8c7e671007ce8454413bd07407e8a2248bee95a7669db6ee47377b4490a6251abb60cd4e2e404ab88aa4948e71ecec50c" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,256) #0 +depends_on:2 +3:exp:4:hex:"e97a4631d0a08d549cde8af9a1aae058e3e9585575a726c76a27bc62bed18a4b227221d5fe5a5db9810f9afe56a3ee78":hex:"94084b11d55e0f9c2ef577741753af66ad7a25b28524b50ea970105c3545e97d":hex:"24c81d4773938371b906cf4801957ac22f87432b9c8a84bc5ac04ad5b1cc3f57":hex:"c8c878451e2b76577c36393ca253888c1038885bbfdacd8539615a611e2ac00b":hex:"761422dea283262998c0ffffefc77de2d395c818b9cf1ac2bcd1153235e0d8b63199c51e195135a75f1f87b454484ecc560c532c7ba5923c9490a423c177453459d81efc38ce2939226043cb733062eae303a009b48ee0cf3c7e40abe2b57a70a6062c669a9fbff20b4c94b4ecbc5f744a80d7be8134359581d441da921737b1329470b214f3e679fb7ad48baf046bac59a36b5770806cdef28cc4a8fd0e049b924c3c9216e00ba63c2ff771d66b7520dd33a85382a84b622717e594e447c919926a5b2e94d490ee626da9df587fed674067917963fd51d383e55730c17a124555e2e46e1395c9920d07dae4d67ffee5c759b6a326eec6d7b3ba6dee012e4807" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,256) #1 +depends_on:2 +3:exp:4:hex:"5c96609e9de807efed31d3c2d63e284be5c44c1b5ab84672664de8d8d8e2f8181b95a5290fdafeb05dc902a9a7bd639b":hex:"135aafb3bbc89ef1e00a2a35ef32f122b7511cc55d86e7822a34859b630b4d29":hex:"115774904a953af07936e3efdcf6054b4c534dc8654f563bb10610444d30625f":hex:"4705ec7525e63919f7483fe76cdf7397b19f22d2a9d54b6cf0ff9abcf0a7c46d":hex:"ae2cfbb29fde23e8c22d77d7a50ba66798da93be4e49ef78b38c9be2411e2d8a9954eb29fbad0a967c51b26d8d746801539aceb32e2459d07baa994869d3b6db2c88fb9d7250fac00de8f79990d501ad985590031f7c45a00cd9b6d1b5531b238f3a31d33237c40a3da31356171cafd52cbb7929e32b38fe523d8212de801f554348a3cc468daca70e05affc9af97f172aba00b2acc50d7dcb5f0ecbce741c71a65c657e9d0f250c44f73865962b1a0d19738e9ffe9f17c3e03363bedf5312c444375529fa8df9dd72b7c09f20c2ef37abb93e6fa57cadbcd7b23036bb9924fcfb9bf83b09ea360fd3988639151b1ab22939e9ea1cdc413f7a2cf04cf2778345" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,256) #2 +depends_on:2 +3:exp:4:hex:"4cbbd0538535994cf00354ff8609ddfd04e80dc4174b9542cdab52385dd968ddbef8157a6e3f26f040229a450f8e564f":hex:"ed81729d1aef522f7bf9c127207d8a680ce4432964ed4025b5bbb12964374f3e":hex:"1259073b57358935b7149fa4349793c5ff28d3ce98b483ec48986aa285451abc":hex:"b350a4e931bb5db50a866aa3c01ead7d48d5859bb97b675e77ebb844ac832eb9":hex:"215cca589f737df48d60360c4806ed548d44938c2bf5b1707310df987edda51e5092a7d9ca4955303ac59bfa980ba6e1819ed1141978c3d7df1125f5c4abec5b15bb8f5fd0edb1f26bcebea5aa7c8d5d32e8a5b608f609d9dfd765074b23cc524596a91226b726d899e42bdee0321eeb2dbaf63d33cced6890c19b466636df05072f007ae60a2364dde7f82315e3e30e63258b8abd12f18b6ab3d384cc9349e56dff00c3f53a86a301aa7205394199d32382096f6cd9db9646a92e73c3fd1e53c28a91683031c1ac72bb85af50be669d0e1d7b05a3bf1fc9720025c1e39e1f09d18d2e9247f726ac691a1c2321a667e6bacd7d77a57ce46397db1a91e7908ad5" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,256) #3 +depends_on:2 +3:exp:4:hex:"9b2bb0f34e6f0a31eff00e6604e6ca77643f69895877f77197a06e2b42bf047b3c1ee55a2a28fb3579324a54458310b2":hex:"895e7060956784e5ea113ca785214bcf608e2a53c175e6edf5b78f1ad90e67c6":hex:"c0b1980d57fb797c4907aad1fb5662bcc8d6ee30f6bed951e77c11d1893346e9":hex:"af3357fd21fc04d1d1bd162b94bf129c45d41fee90366a180d98d41325336b5c":hex:"50941cc105c694dd26d5bc73c08399168a270428ef594a6968fde834e889cfbbf0a80d7dad65d2fca21ba8019f1011313fe86983a555fb3ccb643bb771724e04114f3266d72c2e1a75363aebda9871c3bafcee3f389ff4c6f1f1bb5e6da5389e04f2822da800cb058da9cd698c65d54b16e7562c83506b632e4b5c7a78d6e36ec307e48cfec4fbc3ca3dd67ca95f9bd7f1d609e0a6d8b5bd3feef00e0c4165e77da84f989210c78daf633aef657855fca26b832994000f980c21d355db10f71f9cbb8079c48aeb673c5ba097a325d9a89e05bbf960fed4f8eb097cf37f61900db8171685107d53f85bbd8c1a4a1c7045c8b6e3a8a2c4114542292555585a090d" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,256) #4 +depends_on:2 +3:exp:4:hex:"9c8306c6941098408c56518a44d3075c22e02f19a6041d2e9c4e296fda435db917c99d538ab65f6f1bfab0d479a1833a":hex:"3a80e9f5b71b242ae07ce7b617057dabae189c5468da2cf049b5b529abc877d5":hex:"3c151e92dd3121a8d2d11604632df00cf90706d3e843737445de0f2fde1ea924":hex:"f53cb5fe673201f5eaf4115382d48ba45be405b37a31a56e41d1d76202038b06":hex:"9bf31156e54d7142490e620afec2217931fb2389215a3609b384b0551bb3c9d90c3b3053054046a324db9b34633e41b66114bfa7ee86bbd22d08d53e349a4dc875265b32151d3e475df348a22d5226478184f372b0ba3be92ec1b284fc66dfa3609463214b6b468b29478acb0c55e1d4674882cb75e3eaa3a66ea0f4d7b1a571206a761d636bd3519afb6f05a0f1b6bb38c00bd68530a6c9b445b6b4a9c7457a055627b606f4508ed676fb5ba0d27589b7f464271c3e561215905c50ec48f5ddd1b8549e8d163453083db96c7ec8eeedaf6804369e76760b08abcca937c497900be385db8804b443e8a1489b8f3e3e4cf367dac3e15cb8e95cdabad04f08856c" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,256) #5 +depends_on:2 +3:exp:4:hex:"87a8fce521df0a2e26f1b1f9c7ec9e98968474915a085a95cbdca7d8c669e08a69b8c3c3df07f9ada368be448938bf92":hex:"b1bfaead04743bdcfdb193d32260918ff803abbcc0d5ddc50439bd01f6e42a3c":hex:"12a07384e9c74fb3f33df1a089dddb7d416151a0270d0c0216e085f1ec4c249b":hex:"9b42567093112cb5889703b77b4b372276b5bbccadf86eeb9ef6d3cd395b2acd":hex:"5ba662260aa0f743a33a9b552ce41d93335a855a55df11b870efacb7f75e39c978e730acce3664c814ac10fa10989fb00a39b584bb14cad2c02c309703c8ea8768d479d9b4e17402ee38cb82c5f4d80125f3e674ac1adb919cc8a988f79f531b08253fbad0a1b27fb1997a4e2c7bd5ff3abf66281e8b60987587327a9101b76cd13771e23ee2f02dc339589b9aac4f5af740afdaf494021c3504fdda8f93f77cdd8262df7d4c48f85b6eb03a7e5279db4d18f645a63eb6f53f9fb123c53a78686f0113a209b6eeef3b10cd4489875a07af863c467f25b69cd13b8e72847465fba025e25fe7bcb41745369f255df0eeffc3e5f066815ef7715680b104e20a7e9e" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,256) #6 +depends_on:2 +3:exp:4:hex:"69d667bde79e41cb78742426ca5ebd48086cf1ded5cad7293fcf910e5ab23cc8cad75bd989c3ffd05817d1aaa5493c05":hex:"5f72346eb50ea82cb111d5b3c91dc9b7c61c92fa1a062177d513fb616b1226d5":hex:"0465b8aa89d9cbbe8e1cfa2e64e64b8d1f5dbec7f710a6d37fce898e3f81e57b":hex:"173135f31c2320cccf513e88a21f2d207e00cbe4330d2f550e0be77405eef47a":hex:"34a08d7a564515a918bce93cae084f27a558f6f214c4bc9169dbf507c3f11d02ec97bdfd777960f6b4c4543c1e14456d0079215320ab607e04b7519090ebaf3a5fbb0d7a3fda1af6cd8c5d785524bdba75abbe50e3d58e5f05f8f6b2c2570f1178acd2f4c11a7b1b8b4ebe4ddb71a85bf19bb2fb25241374530cbc6c0605066e1129a2d398356cf2ec2f7a286c5b869c702aced63f4e12f39b7ce250547a922872c36268a3a4649f6641987bb7c6baf1a3e82cdf04d11160ba11c5a002cfbcf4a8698286ff318ec01fc2c5f6664e50561991a533ad183a21e7b97e0052b0350d213738b0c6e5421a524845a861f539930540cc40c6ed78c46be9c122e7974d35" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,256) #7 +depends_on:2 +3:exp:4:hex:"f1f6e5a55fb2180de436d48115aa1aa38a6242eeb0959de3690f259c1d8395a5862d1ac4843404d25215c83bca90f44e":hex:"f467ef083c745a1bfc9be44f1d468b2518e3ff1c0cee6819fdde354d4071b17e":hex:"fdda9f0888c4439cded15a768300d163c1e326ee5571c22ab95ab3e44b1676d2":hex:"6b8d60c565604c8fa8d7adaf0b07ed268a491fb79794d2770356e191daa1cb50":hex:"55d0788614b770f4b8c3d3ac0bbf628f294ba2fd16612b65d0f469ded665e3c8b82c95db80cc6b410b5a6e624151fc50bf02f279ffabc19dd094cffb17ba44b11209b923df326db14eee35a8bf1eca3807afae918206e844e517eb32c207342008a0da742e734433867fd86fd89d27ec6e51a9db3ad1adea645fdc57179c4b71de8b455ae00efc09328a0bffd8c61e3880c007915997daeed4adba61b44040f6f9b6c6427e1c23357c8f7e18b5c974b3c34a2fd5cb5e70f48df2d10c1deabd987f8390bb33858d9a5133a7bd798b1c7741729b8562fecb3d4831e9ce101de192d64bb5d757cbb21090d669afc5566c1d6e25586678b5f2fc7d6c6113ac4eb54f" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,256) #8 +depends_on:2 +3:exp:4:hex:"0db9d437153149e101d5818b263b975735994dfc33d8b3f158a05760867757ab438a5024e1d43006226018c378af55d3":hex:"275bdc5fc78b0d8afb5c8aa5f7854c319a81bb8cc9300210a9990fb7933a352e":hex:"809da54d1830545672f180fa3e0441a0d3fe472e7cd7a6d707fee5af7e9b21c2":hex:"ebe66cee6efbf583c881a25e346ca7d99741dacfce0d8785c659e92774e26ff2":hex:"878a3d109d814ff4a4935689ca96b3d444bfcee9edfcd9031255ad2538871027273bad5225864e84f3c2afaa22a40e7f6793abbc49c8b0ddc7b30d9dc7b408888e6b98f4bc79e08775b599661ea4b50669132c21272f8d17fec9d1e5310335b0e6480d7075c830a44ea528900f99de61191b5a006ca4340356dbf20c62e8ffd0577d623146b12937e84a6e17c0ae08efd339c9aa979c7e21e9c56e019f7e4f375bb601b1a83c21f27a554ec05191794befe514dfbff5a3c9a0a9c80bfe9b6adc7deffd31c70ba13fcf170abd6bf3d384381e0a31fa9c81b1bd207ea2e0b4153b6a1252a9f73f19f6f099fda0f87baba99b9711a00b5f50ad88d3bc1c4e806467" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,256) #9 +depends_on:2 +3:exp:4:hex:"4106f6ba6a291fa54e4ecfd9fa61b961554e4e8e03e19d9bfd82bd35c3471e8bc5bdcd2f810079c1bbfe906929e88d27":hex:"5a7e61b86ca70939e64af613a667695c7c915e667c79998e76e55eb33fef6d86":hex:"86c7d5883aee568aa74d25782019fbd6f5acf4196752ff3d1dd96ec1e7436424":hex:"3a5d80e739f5a30e6bb507d82b60ff987d5bd9cbbff4b47daff278a3252db3ef":hex:"fb146146f828e880c6ec7ab5a65fc8ec4e4d7d975c6d7c0a9bc7ce041f49799b11e235d7ac5a4ec4eea721c3323448e686ae96579233ad698a9d6fe3f5b37d87ccfce640192dcdb51c7bf35404c90b705bd97482d95d1c3e3a40152c86ab923588842ab02f4d922318a7fb84453b072c749a7f54e8ad005c29c48af6f01ecdd8fac13295e42b2077c70c7bf54e214317f98003e4cde07755e95c91f1953b29b3eecd49dc753e74aaf2b1c83feae87428be6a5aaa3261f0f65491e04c1fcdfd5481eadab68f057df3c83694c7451fded86a18470b06f1779c38efcac54b576e99eced3b5581eb5c9f7b3340ad5667d1f0d3fead8b9484a032d5f74d900fd64d10" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,256) #10 +depends_on:2 +3:exp:4:hex:"5d1fcdabb70dad1428c8be291720c92b8565f331ee3438d79bcddc968efedcdb9319f5ee91124b93b965d504211fef04":hex:"6c8c8a066c6208dbc18a40a30b9f689048877e038bf76d65acbdde7ae4c566f8":hex:"bfa2e9ebe0d70d3b62cdbd78c775a62e0e22fa75f168123a336b66b9a2b68c06":hex:"e48b5245ea241baeb7f665a9daaad662d7b2422c3e3711cfbed81d73691864ee":hex:"1586e0761c4a39013dcb552a0e363e709f4303c0e575653c9b240be7449ea26e4bb1dc93f06ec958b6c06217757fc550b356c135063c00fce9d856aec0edd20735b46b7c9a8e7df780db3072fc2b314fa5cda653ba3690132f10d30ee94c8458846be75659ef3868086bcf54ff55a8db1ea65c3e747a8ddab3f2304738e0c75adfc10c23ba651ccf0de64a39cab3beef667f466391a61a87a981afe883f09c4edbd3eae98d51cd3e7b31ee179f8a4e10feac96ea210a4b8415c9f2cfeb2bc8bf51f13801dc542ba1badda1c30141d72abb1bbb35c9bb481d91db5691c44bf3526a02d0bf776304a951858aa2fcf3f45bc656abcaeea94cbdc851a914b4b3a3ea" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,256) #11 +depends_on:2 +3:exp:4:hex:"9fc58d0785adbf033ce6642dcc9a861df44a35e89d06b346b165074a048b500994b4c0b3e27306b8c805c97b0ea14bb5":hex:"e02f7a856266195fb5f4810232cd5c71a4465e1d95625c01e8e7eb69c63f6796":hex:"7cd18b8d035b57bd01464280abe891b7faf55f9ed9910d9a148b030340c67cdb":hex:"918c4d43fecf993227f7c120d239a30d3c315602800d6d58b9e9e0715964cfa3":hex:"b8a3581eb4a208d1ab8f0e84e9ff3d2e0ba57703a7b5be2e4f3a3ede2e2519f5e6068c28c41171446cfbc40b48a97bc7a9a1e4d3b02f48fbf55b1d63da7cbc5b7a95f354afda273dbf5bf099961db4a4c5f296286dc0a51091a522398973d5527b2e55e0523c21fffdd0dd38527bc45959d5a711d541634e3139577312d678421eb37553c127beec64422316e48542a906cd7efe0d96eae3c4f2db7666083d9365a76cee4a207d712ddb04bf775be29ed9f030eade4537961737e3939a19e0769a3a8b96d055120c49925fe1ebc4a2ad54468421dd5465e8761b3e2e384373a971e408dd3a54907538a7d887986677eb192761959a4293523f81647a657aaeea" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,256) #12 +depends_on:2 +3:exp:4:hex:"d43927d1e633fc3433536cd03617a97a3a10a7ecad3f0c781602829f8ec7feb2dd5922f2a2dee51db93bcf35100a8364":hex:"3335a02aba1ea28d2e56973e21109e0adfb5068613c447e625fd83a8d0e34494":hex:"bfde33c52407d3137123812c4818ca1e4b61878b8f9dbaec47935e3948a88d0d":hex:"42597cf03bbee0e003d8677159918f5318402f7329f08e1d93c850e2a2a2f1bb":hex:"e53c7d0b376a94809f472961acff314079014958935cd67acc476abdd919a43cd3f7d1462d0d6e628ef5d0c8e04a6d243838c61ea36b015e84d7ad59e49b45c9b04f6ec78687ba47156e429b2fb6dc2c0da4f5677d1f689cd28612cfa6d95628c26b5b3e01186153a1c25c02f5ce5fc287623358687d2034347b2433ffc1445a2d93cb0103ccdaf0c585f7f4e7d41aef310be127208b3da90523aceac5fa13ffe77eaa4d1fd058957c8dd2f355cae7f9e3d8f29ec7099599ba6c755689d53d6ccd84e33407a066506d97decd7e306d22ca6e0faa7b94f91f4eb004422ddf9dd6b1f49b6400ea55d40e25c67103ab50bcc92d100e89ba569b6d51aacddf02daf1" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,256) #13 +depends_on:2 +3:exp:4:hex:"0bd69ce9a0a66dffefba83ae563e8df0fc6c7d7bdf491bf52cbf3f3777025cdf92b32217f550a1fe735b8519b44b040d":hex:"820da3187bc879cd1f40476fd9677f3b67e02b35b6632ab68891e25f10555b69":hex:"903b882de013695b4683316ffbd7c7809288d54c72e369f70cf172bff85e5629":hex:"cfb5f494e76486ceef12dfe1bafd6ccf9b0754d8d2306fb0c41c0f4e921317ef":hex:"ebad5e5a358ceab806ae5590d80bc0ba5d4061f49f4cb79a8a9da4fd1e8cb8f41cd8edc657c5180d18e62da2b53a50085b7e18b957eaf4edc975ca9d43e380434f51542dcfa947c322c708f3d3593c520717230df17f9341f02a5596b2058a27ba23f72a862b391be884570b22e20c80dd20d0a935f068465d554c8291fcd88eff608e92200f90cccdc82cb5697f0406654d9582e8db54225aaa28697bf2c4f47eba086a575298b991098c212c9e8d95bfa48f7e500c7223d9cbffd1df6f725909ab6e9aa837ff9e69158af434d18e5a7f99d1aaf10931f380d88344ad841064130cae50edf8687615743735f80457a228475bab7559015c4f45f91bdfa31d87" + +HMAC_DRBG NIST CAVS 14.3 No Reseed (SHA-512,256+128,256,256) #14 +depends_on:2 +3:exp:4:hex:"45784684d6004731689e33e45b344d7b68dc4fa841133cb2dd65c4b326dffa901109dfac2e48bf17f2fea33b412dc653":hex:"7c6f4675f7a0b8c424d5be9e809efa305493874d9a950cb343afdfb64e77ecb5":hex:"2b2dbe3834d8be93f1396b19be83bd96823dd82740da71c5eeb7b21865021884":hex:"49c322fc1bec86d3e20628d9bdc1644e6f5e0237c7c694746bfee32a00145696":hex:"9110cec7d07e6e32724bf043e73021b3ca0e4516b619d036ac9a00914e12f01ece71989f55c1caccd542c60a9cccffb91e203fd39dca2d92c8eb03ee7ee88abf21dc6891de326c3190f25ee9ab44ca72d178db0f846969465b25a07dcc83777e6b63a7f9f1a8246dd31ce50cd9eb70e6e383c9ad4dae19f7cec8bfe079b36d309c28b10161c28b8d66c357c7ee01f07403a596366725fd5bd3a5de3cb40dcf60aac10635615b866ae633fbdb7ece41695d533757d9d16c6d44fd170fae77c15b7426ed6ec8c9d6e9245cd5e19e8dc3c8c7e671007ce8454413bd07407e8a2248bee95a7669db6ee47377b4490a6251abb60cd4e2e404ab88aa4948e71ecec50c" + diff --git a/third_party/mbedtls/test/test_suite_hmac_drbg.nopr.c b/third_party/mbedtls/test/test_suite_hmac_drbg.nopr.c new file mode 100644 index 000000000..10346ca59 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_hmac_drbg.nopr.c @@ -0,0 +1,695 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_hmac_drbg.nopr.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_hmac_drbg.function + * Test suite data : suites/test_suite_hmac_drbg.nopr.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_HMAC_DRBG_C) +#include "third_party/mbedtls/hmac_drbg.h" + +typedef struct +{ + unsigned char *p; + size_t len; +} entropy_ctx; + +static int mbedtls_test_entropy_func( void *data, unsigned char *buf, size_t len ) +{ + entropy_ctx *ctx = (entropy_ctx *) data; + + if( len > ctx->len ) + return( -1 ); + + memcpy( buf, ctx->p, len ); + + ctx->p += len; + ctx->len -= len; + + return( 0 ); +} +void test_hmac_drbg_entropy_usage( int md_alg ) +{ + unsigned char out[16]; + unsigned char buf[1024]; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + entropy_ctx entropy; + size_t i, reps = 10; + size_t default_entropy_len; + size_t expected_consumed_entropy = 0; + + mbedtls_hmac_drbg_init( &ctx ); + memset( buf, 0, sizeof( buf ) ); + memset( out, 0, sizeof( out ) ); + + entropy.len = sizeof( buf ); + entropy.p = buf; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + if( mbedtls_md_get_size( md_info ) <= 20 ) + default_entropy_len = 16; + else if( mbedtls_md_get_size( md_info ) <= 28 ) + default_entropy_len = 24; + else + default_entropy_len = 32; + + /* Set reseed interval before seed */ + mbedtls_hmac_drbg_set_reseed_interval( &ctx, 2 * reps ); + + /* Init must use entropy */ + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &entropy, + NULL, 0 ) == 0 ); + /* default_entropy_len of entropy, plus half as much for the nonce */ + expected_consumed_entropy += default_entropy_len * 3 / 2; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* By default, PR is off, and reseed interval was set to + * 2 * reps so the next few calls should not use entropy */ + for( i = 0; i < reps; i++ ) + { + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) - 4 ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, out, sizeof( out ) - 4, + buf, 16 ) == 0 ); + } + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* While at it, make sure we didn't write past the requested length */ + TEST_ASSERT( out[sizeof( out ) - 4] == 0 ); + TEST_ASSERT( out[sizeof( out ) - 3] == 0 ); + TEST_ASSERT( out[sizeof( out ) - 2] == 0 ); + TEST_ASSERT( out[sizeof( out ) - 1] == 0 ); + + /* There have been 2 * reps calls to random. The next call should reseed */ + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += default_entropy_len; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* Set reseed interval after seed */ + mbedtls_hmac_drbg_set_reseed_interval( &ctx, 4 * reps + 1); + + /* The new few calls should not reseed */ + for( i = 0; i < (2 * reps); i++ ) + { + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, out, sizeof( out ) , + buf, 16 ) == 0 ); + } + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* Now enable PR, so the next few calls should all reseed */ + mbedtls_hmac_drbg_set_prediction_resistance( &ctx, MBEDTLS_HMAC_DRBG_PR_ON ); + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += default_entropy_len; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* Finally, check setting entropy_len */ + mbedtls_hmac_drbg_set_entropy_len( &ctx, 42 ); + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += 42; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + mbedtls_hmac_drbg_set_entropy_len( &ctx, 13 ); + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += 13; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_entropy_usage_wrapper( void ** params ) +{ + + test_hmac_drbg_entropy_usage( *( (int *) params[0] ) ); +} +#if defined(MBEDTLS_FS_IO) +void test_hmac_drbg_seed_file( int md_alg, char * path, int ret ) +{ + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, + mbedtls_test_rnd_std_rand, NULL, + NULL, 0 ) == 0 ); + + TEST_ASSERT( mbedtls_hmac_drbg_write_seed_file( &ctx, path ) == ret ); + TEST_ASSERT( mbedtls_hmac_drbg_update_seed_file( &ctx, path ) == ret ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_seed_file_wrapper( void ** params ) +{ + + test_hmac_drbg_seed_file( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_FS_IO */ +void test_hmac_drbg_buf( int md_alg ) +{ + unsigned char out[16]; + unsigned char buf[100]; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + size_t i; + + mbedtls_hmac_drbg_init( &ctx ); + memset( buf, 0, sizeof( buf ) ); + memset( out, 0, sizeof( out ) ); + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + TEST_ASSERT( mbedtls_hmac_drbg_seed_buf( &ctx, md_info, buf, sizeof( buf ) ) == 0 ); + + /* Make sure it never tries to reseed (would segfault otherwise) */ + mbedtls_hmac_drbg_set_reseed_interval( &ctx, 3 ); + mbedtls_hmac_drbg_set_prediction_resistance( &ctx, MBEDTLS_HMAC_DRBG_PR_ON ); + + for( i = 0; i < 30; i++ ) + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_buf_wrapper( void ** params ) +{ + + test_hmac_drbg_buf( *( (int *) params[0] ) ); +} +void test_hmac_drbg_no_reseed( int md_alg, data_t * entropy, + data_t * custom, data_t * add1, + data_t * add2, data_t * output ) +{ + unsigned char data[1024]; + unsigned char my_output[512]; + entropy_ctx p_entropy; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + p_entropy.p = entropy->x; + p_entropy.len = entropy->len; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + /* Test the simplified buffer-based variant */ + memcpy( data, entropy->x, p_entropy.len ); + memcpy( data + p_entropy.len, custom->x, custom->len ); + TEST_ASSERT( mbedtls_hmac_drbg_seed_buf( &ctx, md_info, + data, p_entropy.len + custom->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + + /* Reset context for second run */ + mbedtls_hmac_drbg_free( &ctx ); + + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + + /* And now the normal entropy-based variant */ + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &p_entropy, + custom->x, custom->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_no_reseed_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + + test_hmac_drbg_no_reseed( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9 ); +} +void test_hmac_drbg_nopr( int md_alg, data_t * entropy, data_t * custom, + data_t * add1, data_t * add2, data_t * add3, + data_t * output ) +{ + unsigned char my_output[512]; + entropy_ctx p_entropy; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + p_entropy.p = entropy->x; + p_entropy.len = entropy->len; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &p_entropy, + custom->x, custom->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_reseed( &ctx, add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add3->x, add3->len ) == 0 ); + + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_nopr_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data11 = {(uint8_t *) params[11], *( (uint32_t *) params[12] )}; + + test_hmac_drbg_nopr( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, &data11 ); +} +void test_hmac_drbg_pr( int md_alg, data_t * entropy, data_t * custom, + data_t * add1, data_t * add2, data_t * output ) +{ + unsigned char my_output[512]; + entropy_ctx p_entropy; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + p_entropy.p = entropy->x; + p_entropy.len = entropy->len; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &p_entropy, + custom->x, custom->len ) == 0 ); + mbedtls_hmac_drbg_set_prediction_resistance( &ctx, MBEDTLS_HMAC_DRBG_PR_ON ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_pr_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + + test_hmac_drbg_pr( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9 ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_hmac_drbg_selftest( ) +{ + TEST_ASSERT( mbedtls_hmac_drbg_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_hmac_drbg_selftest_wrapper( void ** params ) +{ + (void)params; + + test_hmac_drbg_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_HMAC_DRBG_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_HMAC_DRBG_C) + + case 0: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 1: + { + *out_value = MBEDTLS_MD_SHA224; + } + break; + case 2: + { + *out_value = MBEDTLS_MD_SHA256; + } + break; + case 3: + { + *out_value = MBEDTLS_MD_SHA384; + } + break; + case 4: + { + *out_value = MBEDTLS_MD_SHA512; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_HMAC_DRBG_C) + + case 0: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if !defined(MBEDTLS_SHA512_NO_SHA384) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_entropy_usage_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) && defined(MBEDTLS_FS_IO) + test_hmac_drbg_seed_file_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_no_reseed_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_nopr_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_pr_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) && defined(MBEDTLS_SELF_TEST) + test_hmac_drbg_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_hmac_drbg.nopr.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_hmac_drbg.nopr.datax b/third_party/mbedtls/test/test_suite_hmac_drbg.nopr.datax new file mode 100644 index 000000000..7336620d0 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_hmac_drbg.nopr.datax @@ -0,0 +1,1200 @@ +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 0) #0 +depends_on:0 +4:exp:0:hex:"79349bbf7cdda5799557866621c913831146733abf8c35c8c7215b5b96c48e9b338c74e3e99dfedf":hex:"":hex:"":hex:"":hex:"":hex:"c6a16ab8d420706f0f34ab7fec5adca9d8ca3a133e159ca6ac43c6f8a2be22834a4c0a0affb10d7194f1c1a5cf7322ec1ae0964ed4bf122746e087fdb5b3e91b3493d5bb98faed49e85f130fc8a459b7" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 0) #1 +depends_on:0 +4:exp:0:hex:"ee57fc23600fb9029a9ec6c82e7b51e43e9721e4393ef9ad841d276ca9519061d92d7ddfa6628ca3":hex:"":hex:"":hex:"":hex:"":hex:"ee26a5c8ef08a1ca8f14154d67c88f5e7ed8219d931b9842ac0039f2145539f2142b44117a998c22f590f6c9b38b465b783ecff13a7750201f7ecf1b8ab393604c73b2389336609af3440cde43298b84" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 0) #2 +depends_on:0 +4:exp:0:hex:"ebfdad13c8f941d279dbb4de8d7706ddfdaa279f5e4428d6f785c5b2f833b69b09b71a57cf5701d4":hex:"":hex:"":hex:"":hex:"":hex:"66e35f9b8e05a861a0b3d01c66c416d5e8b77d4d21328c625cff9163ffc92e753015aa9d7f36ae3a961681d39f271d0b627787868cec3dedc520ecb303f96a43cec67369117af268a19f5284880cb3be" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 0) #3 +depends_on:0 +4:exp:0:hex:"4fc0ec777ec5a5f3b9ea06831a36acbb9e9add057dbb73a83367ba7c163f7b99a56ab64274ee64cd":hex:"":hex:"":hex:"":hex:"":hex:"7910a801b68a20570ab0e593bd565021c8a543ba3942bd726021a7198f1d84c8806a6f9cc12d196e1cbfebf325d0e1971746921b4d55483fc366d2ca837c4fc9751fadea7b04c0a47d1e37649f7beb6b" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 0) #4 +depends_on:0 +4:exp:0:hex:"85a41bafaa923240dcf613a53e28d8535474e05fb59ba1eaccb5e28b1f2493675cc4f63475a69b0d":hex:"":hex:"":hex:"":hex:"":hex:"2735fb69bfcac5b2f7f64e747c27d9957fc6a3cd0b3eee984641b2677655606e6b0ad6c875c7bf1333ab1f9b15ab1d522968059f78eaa05a70437c6974ec8e29c8ca5a0eae5464b32e9474e4fa5d4236" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 0) #5 +depends_on:0 +4:exp:0:hex:"b64416ea406772f955fbd7da30c67f6a42e0b9a889d55454e03a88205eaafdd584dd54a40ea5c7df":hex:"":hex:"":hex:"":hex:"":hex:"44bc26482a49da5249e8785a4e44d91ccdc6103fd666b480350ea3a09d8a8cf9e30c103f53559cbf55e13078b7c6949e4e90e1ef79ddd234166981f715b8649834c27b17bdf0f0689ed18eb850b43e85" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 0) #6 +depends_on:0 +4:exp:0:hex:"b3d4041201f4345e0a818de136c6aa7e6b0612e1ac6b3f2f26f6ec328ac7f8966dca90e162c297ef":hex:"":hex:"":hex:"":hex:"":hex:"d9245a4a0ab0ca97e747c0d29098979e8248e53f0ec6b91678972f3b5691e7995ad2eb99640d3e9a8364891d0ff179732d633f762d6592a4d49c4e667c699b2678929c81d9bdfc74d6575f5b727f4d65" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 0) #7 +depends_on:0 +4:exp:0:hex:"06dbf57699df40ff67287ec11573b75b47e40e643c47f4db89bb41a3cb66446449b503b38a1e21fe":hex:"":hex:"":hex:"":hex:"":hex:"0d06c663f9105198a34229b0e3fcffd0de9a445f4fc5d5bb58b55e43cacaf0c27c07e5a9c3734e8a8e0885dd78cd1bde0777e3330d2fb3b04203f6c2749a45cb96bafba3bf9d1875dcbc46b6af558228" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 0) #8 +depends_on:0 +4:exp:0:hex:"cc1ca95eadbd1bdb2459f44c6653c441f225685240438aff26a3447e8f504be4c42beeeffd884455":hex:"":hex:"":hex:"":hex:"":hex:"e8f3cbe8e1f8738b4fef6ae67662524c99cefdf7b416eafc15750054ffd7c288af1c13ee9a61d19f7163aa21f92207b66348228b56d64438ad7eec55670860fda3da9bb0773f5647c2bd03378d795c71" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 0) #9 +depends_on:0 +4:exp:0:hex:"e68bbe5c6bb3a37207e6742ddb79c0b1640fcd3512909acd16aea846c8db1d76ede51d5562f20639":hex:"":hex:"":hex:"":hex:"":hex:"5cfad20546a1cc19922f0be7b7d04ba7d8335684354541b1ec8ce0adf3607446c8742d7737a566c92fcf3b2fde205197e9aa95c739d677631e28403eafed1cf45f22fe29d3979126eaaa46a4040a4c55" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 0) #10 +depends_on:0 +4:exp:0:hex:"ac79be87bfbab344797fa6da775516be0923da6ca517407e790d1e3cb052983146f9a757fa910ce7":hex:"":hex:"":hex:"":hex:"":hex:"5b4444cb58df47502374fd6bda064cf1d70d253b994f1a6e5d4e62741846472d9f1cf14a2468aafd4ca7875b31987b8ba0de9144648a82602c19e293f2668c9519be3eb8a12f15543395348aa51697b2" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 0) #11 +depends_on:0 +4:exp:0:hex:"cddc43355e651255dedf171c9aa1334452e3e830cc4c21605e927085657e7422b68bffab74d8f78e":hex:"":hex:"":hex:"":hex:"":hex:"e57f32e6a8a847f033802a92e6282c967eb18f3c9837b8bbe5f5e8d9d6fbc4d571412b873944d20bb8a354f787c3004d0b5dd5a92bdbab600f55d1ccc52275715df239a1e2a79040862680f34f5cd4f1" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 0) #12 +depends_on:0 +4:exp:0:hex:"eb1a31c96683124985c9b412d16dd899d5da8c43273b3173417ca1a9392265b273221bbe87831466":hex:"":hex:"":hex:"":hex:"":hex:"59e4d915349514f4aace3d9eebfd30b58e8246c7dce23bd4c4e47bb9ac8c2696441d5b5bb2fbb2a1b585373ec5ee55071f2ea868b2df342b5f2df48cd026ddac9114f9142db999fbcde7a0c23403fb37" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 0) #13 +depends_on:0 +4:exp:0:hex:"6a086e671327087dde91396dd73d5400d59a4fc5b26c0558b7d5321e4f22584409b7e6e014e7d062":hex:"":hex:"":hex:"":hex:"":hex:"70e17ca71ad75e40ed31629cae3fa9c23374f78e020c56e551907f2252706bd4cd4c47d099dbc072429ae53e34ed208fdae5e6ec13e5cd9b435c1b25dcbd099132570491e7c3544cf8ff2fba553c197d" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 0) #14 +depends_on:0 +4:exp:0:hex:"8b7086efac1e3c3c87c3798471d4afd028b8bab0217d403fb61206715d219a93505b62cd619be51b":hex:"":hex:"":hex:"":hex:"":hex:"0dcd502c6e884a366b50f208a1b8c59ffb85dbcd72a6e2d75aea94c9692a55a45fa7c2900a277dcd38b79cf463ac8961fe54df47bcfe5a60555ee4ea2be76faefedae3ce65db4b3f04301cf5c43ada43" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 128) #0 +depends_on:0 +4:exp:0:hex:"7d7052a776fd2fb3d7191f733304ee8bbe4a0ceedca8020749047e879d610955eed916e4060e00c9":hex:"":hex:"fd8bb33aab2f6cdfbc541811861d518d":hex:"99afe347540461ddf6abeb491e0715b4":hex:"02f773482dd7ae66f76e381598a64ef0":hex:"a736343844fc92511391db0addd9064dbee24c8976aa259a9e3b6368aa6de4c9bf3a0effcda9cb0e9dc33652ab58ecb7650ed80467f76a849fb1cfc1ed0a09f7155086064db324b1e124f3fc9e614fcb" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 128) #1 +depends_on:0 +4:exp:0:hex:"29c62afa3c52208a3fdecb43fa613f156c9eb59ac3c2d48bbd87be99d184165412314140d4027141":hex:"":hex:"433ddaf259d14bcf897630ccaa27338c":hex:"141146d404f284c2d02b6a10156e3382":hex:"edc343dbffe71ab4114ac3639d445b65":hex:"8c730f0526694d5a9a45dbab057a1975357d65afd3eff303320bd14061f9ad38759102b6c60116f6db7a6e8e7ab94c05500b4d1e357df8e957ac8937b05fb3d080a0f90674d44de1bd6f94d295c4519d" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 128) #2 +depends_on:0 +4:exp:0:hex:"0c0d1c0328a384e697678ac87303dd62c8780b4ac33f18674ea4dce5b190d4e381eb7a5b5e12b4f1":hex:"":hex:"0557bc052aa8eabab0baa42ca38fbbe9":hex:"985865c180e0bfb7cdbed11b58b5e509":hex:"f40452f8c5b8f4cbc1675f70bb803740":hex:"4a1f442eae6c861b622014b079dfd47543176b82bc60826cfa02d3923ef0563f8deba8362c8d1950a70e80d67189fb4d904b855ed0ac39942aa8673e0951b4876354b849a6c1c51d0c35a3f4ed4e2f22" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 128) #3 +depends_on:0 +4:exp:0:hex:"7cad65e5cc2888ae4e960f5d143c1425fc0785db471cc55e66451d29cf65d899a281905ff9b29e87":hex:"":hex:"800d583b2560d2a2300132ee2d13f19f":hex:"42eae705c2225d212fa0554ac6ac564b":hex:"72081e7e70200f1982c3ad9cb1d3ddbe":hex:"953e92258be7ff61b97077252ab9835231e366dfa5b635fb889c337562a2641d3aa9e46feeb2a4ea03cb73f1f801594c3cc71d2945c11a52bb0e93419df5d0854ad5f2e36d223c119e145cad507495a7" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 128) #4 +depends_on:0 +4:exp:0:hex:"3084c8811564168bf7834d9a6c9d0ad0821b13a0b66dddc5ec2c90278236c08b6f657611a16636d7":hex:"":hex:"9a7665b3883bed37a48b07f98efa4b8b":hex:"28bfe9605ba856073ee69145ccdda4e0":hex:"c26d7c962574aa587b3eb7a8c29b2e08":hex:"36908adee4c1e7ea4e2f266b65aa7d7b5113e4b4377adadf4406bc573e04374a7e8b9b9b36eb0384e9336a9e7b4f308b463bd7aa9476154ab13181da5c2da9675a376b9c82ace5391e378fdd0cd4ef28" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 128) #5 +depends_on:0 +4:exp:0:hex:"a0410a32703720abf2e28e252b5b9176cb96935082bc9ef4ca7bcab78fce7da97b0158379041bd6c":hex:"":hex:"b70982af7b5e337cfe989703bffc09e9":hex:"8df8b08f648518f7526c24bb95df1e44":hex:"6775865f451ee055ed2242076debe237":hex:"548f66f0acd9ed887ceb7f95d1c9a0c29e2f6007b92c581e615139256bea63d0fcd7a9b950e3e89419d2142c5d8f5bbcc2ba5b0dd67689b7ade01d984e303a529165dbdd140edd69c3ec6a4ddd63e091" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 128) #6 +depends_on:0 +4:exp:0:hex:"c2e9a6e2e29f47dee0e808660c446a4faff465073a97862c2ab6787095e944c5276d29bbbbd7a777":hex:"":hex:"358ffeab6a24f932abd4c9577f84cb13":hex:"37578c2d9b68d43d6c83164a4c43ce37":hex:"02a7c9575d9527a33df9fb566373db3a":hex:"fcd318c83563f72e5a21d4a93a84254e0c3bb6d3ded55c3d5939dbd5d1525062fd587a422012437aeb88589e669e5a5d57f7ebb16e30590f6debd0eced84f8e57d47a3d123a52361145a8fab258ed19b" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 128) #7 +depends_on:0 +4:exp:0:hex:"c93859e7fed1163b070bbefcf5ffb0a66a6f5b986116adbd959d37ea3b79a197449169bb01e0143d":hex:"":hex:"c62840816ae06eb725be9dd3e2954cd5":hex:"5dc60578a6a309fae33ebf162c22fab4":hex:"00d0fac12a9b66b7ea936411f1645d4b":hex:"ca2eb212b29d5a38cf72409cd8cb4bc401eacbc6e59c84551cdfa12c1c8fb39c29c9d49905b25953f727ac24453ccf1c6f20a4c3fa7c33b052e4e82c7fcbab70ade865d249b6a27e0b5eddccf0567d6d" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 128) #8 +depends_on:0 +4:exp:0:hex:"237a566e4a46994fb13af5b2d4321a03fdf5cc54f461daf30949f86b7b223fc341ddbe525c533339":hex:"":hex:"bc252901f8f5c9357722a424b0af1bb1":hex:"6020d93df16b10c31d8802f6bb9ddfac":hex:"f9104117190d905a30c65c0a76148c7a":hex:"70e0611f1cf70ba93e3cc53da83fc3d6064b293e90c117ec12cc79c5e4edf845b6a5e2c4ce75ffce5d18a75e24bf51300bae6443f04a71047a8f522edb370689ef1b2cc13769865b69dc232963d90419" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 128) #9 +depends_on:0 +4:exp:0:hex:"80c2b6fbd576cd57c38d1d1197b9e7ad43216111a1ec8b5f31dfc1a4e05c15ed96288386d0768951":hex:"":hex:"1af215d9b991e4f7ddc2a89fe23388a1":hex:"d889e43410eeb2a83cb6982f38077756":hex:"c77e7bb93115c10a56db1245e610e8b6":hex:"af9f8c34654f44f42914070dcf1e971884902b428c7332913ddf2e342e776e01dc2fc73cd803b3a492edb15e7cc755babc23d8a5007bb0bebd7f02bd168d055948e6a5b66a3016951697617eaad371a8" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 128) #10 +depends_on:0 +4:exp:0:hex:"d8041e31215f7c843effaec3ab722e1d271753acf2ec9ace8b5730e21c0c30f9daa98580695c4572":hex:"":hex:"347fc86229e2e6f6af2ead186248c2f9":hex:"a09c1b813fd11102df392d116f127de1":hex:"0ab6c5c7f689bda8a3a7f406bf6df33d":hex:"e09414c8f5ff2d8d6b6523729556dc1b4bba6e4cfc7a929e4561cfd32e5484918c7f21e0b533c3e3827bb8e115cc6a2aa5def3d946001564eda8cb36fa5aa771651e4837ae60beba32e01f5d59c0be0c" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 128) #11 +depends_on:0 +4:exp:0:hex:"b0f69a20531c5b186bf8c16b25fa1de8d6817ba362a9a00ea3aa59b018b7ce8648b7f84ab925050f":hex:"":hex:"2905e4b0803d221ccfba43bb4f1e3338":hex:"0460c4ba1738dd7c662e0f4337a454c5":hex:"b5a7870dc99f5c2ead93dae773ab55c6":hex:"a542a3ba51f4024d3876a32fd6fdaa136c024ff36b9662ed82cf580bb1d33b531b124c0e28fd0b8ec06e50dcc11132062a55bdb961a908688ddccda12be8f1242f8a5ada53939e32d8c0381250134686" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 128) #12 +depends_on:0 +4:exp:0:hex:"188ae42fbe0f4e9e17c7b0432712aaefb1667157132f8d6240fd9d19ba9f5f56f58bd08e9842e2a1":hex:"":hex:"88560712277f73d457f62b3769189381":hex:"892957bfbacc684af6d31c8befca8e4d":hex:"a9e8986ff89479fa506780b07b09c2c9":hex:"e77187930ac661bd1a422e29cae4c67370d9e8ab0e44ea9dd86b11b2a1c5271162513587ed02df4c91b0e04158406763e72a443a196b6a2e22af72ef2732e3916cabf518fa58ab89fea5528153818a6c" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 128) #13 +depends_on:0 +4:exp:0:hex:"ad490819bbb9e937e0d0a749eb83465470fe146ad9f3ae0b104810bbb28773e538b466319bef5d6a":hex:"":hex:"e01882c8b9bc52d584274912d93367e8":hex:"20a03700499444028da4c8fc5ba42d8f":hex:"6574be269d5ccb5d10ad5fd6add77e2d":hex:"5662845711b5a6c04715dcb3293f091709d87703f1a449858f074858958260ccd833d9699fcd0bcba7956f9036808984828a3a9db2041556c77b1644a7566bd8892ed53e418cb74bca1a8d65f545c3e1" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 0, 128) #14 +depends_on:0 +4:exp:0:hex:"aa4ea001160441917ac60f6231468f7da993e136dcce82083cc6c81b69e67ead392721ea79b63e97":hex:"":hex:"50f89606e793786a14ed11b3026313ce":hex:"2445d7b670fd77bb62e0c1db75671863":hex:"32b79488b44093ee7fdb4441bc302b70":hex:"1b803314c8ed124bf6550bc63babf09f189e59df3d8d4103567c442b6783c32b236a107d4accd7ab3e465d29f6216349baa298ebeafd3c5cc198f0880868b8c9b67d94fd53626651200f5dfc939d4128" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 0) #0 +depends_on:0 +4:exp:0:hex:"11c0a7e1472cec70fa8c1ca15759ac5bb1c73c22db39cd7bc6ab59ff708a5c1f598e75df060e1981":hex:"b24e392cb1f3c18af2cb50feac733e32":hex:"":hex:"":hex:"":hex:"070e603cd48d56430a5ab461a751ec2a4a6aa6fb6ee52efe9a41e4611eafdfc957184b47bbb017e484ac34c7de56cd7813feb301b5befce573ad0a254e6cfe35b77c30be6b7cb5e7efa72813c7546ba5" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 0) #1 +depends_on:0 +4:exp:0:hex:"e05141adb678c297eebd8136885b67345b9c0c54a0ff74d826e26c9323a3da3af6e5a5a1f351cb54":hex:"4814ea71a8e11845716b22085cc65f2b":hex:"":hex:"":hex:"":hex:"5ef29a2e7e821d529d1928e6bab16fb80d6491a98dd53695473dadead4e5142c146f1e29b101c6b1a57d8315ce34db17040c02572c6455d902303dcfcb2ad3052166de790ce0c94af78a51864efd4b12" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 0) #2 +depends_on:0 +4:exp:0:hex:"9747f5a2a27c65b0bd9202f0743afbfd247b3b05fce7d31cd3e34742cffe1c6d55f8f98dfc57953c":hex:"c3fc8430972dfa880e2bfa66862bffde":hex:"":hex:"":hex:"":hex:"92137ebf7518354bd65d87235a81c79e13cb53e46b47fa091cfe342f0253e5ee4634e8fe5fcb967bfcdbdfaa60614bf96826875608c0f1b55967619db6df24efedc86498cad733e29ee9d9e3d6277273" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 0) #3 +depends_on:0 +4:exp:0:hex:"a9a8a0a7b8a58c239e083fa1cd2a8c968cfc5f074bbc31473cb71f26b82cdae4223fa32702f57ee3":hex:"3fb4c2f37714039a1a2e6c68e4818eee":hex:"":hex:"":hex:"":hex:"1b5986ccdbac7da7fe7e792ddd445ca894b6ec08424a17fed5385ff8bd03ba782b42bc5a9676acd5be8061d535930a487902923148710ff17908fcb03db7ddc0e4b10be16c0a0365db387529a2398552" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 0) #4 +depends_on:0 +4:exp:0:hex:"99d1822bc16f2e7bbeb6556c5215489ea6039f54a175ae86aaf4cef7d80ffedc37e3c68c7de03ddd":hex:"e80fa03bd7c8f5acdda5754ef00cdb5c":hex:"":hex:"":hex:"":hex:"2236568252a384a7e75cefba04a94381941035b28de764d5b2518a98ba4e8f1d50e8230953df40db602b8959ee8f1b8831b29516f937aaf561679bac0ffb11207030ef33b26da28af93ba552c08bff97" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 0) #5 +depends_on:0 +4:exp:0:hex:"305a4478bb85b0cdcb99618d8753494beee617d70aec26501eef2f751cad0b1cde509806d4064422":hex:"c3fa490a01511e8410577021a307c31b":hex:"":hex:"":hex:"":hex:"f23ceadb881b945029b78366a173c20af93e43fd8c3be0588f811af31a7ddd653610cdfc3cd875a0f114fc1b887e4fe5042eb0dc0c36746961b1b7126950aff4c01245c215156715c7efd14c76539a0d" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 0) #6 +depends_on:0 +4:exp:0:hex:"15c178375c839866ab31b38b900ba889325baf19b84c8fadf2f78da359af10da64c42130f79f3054":hex:"a4d50496711dcabde8e0ff21d3da7535":hex:"":hex:"":hex:"":hex:"3f38257370353677dee9127862305158b1c5b607741d62906cebf8babee4fc6cf1dee3f821d1d750c69f3ff5683d266df0a669d291f6816d86cd222b56a351c240afbb443e886ca194994b4deddc54bb" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 0) #7 +depends_on:0 +4:exp:0:hex:"7efb63ed1e07cf853fce80468049dd5ed5e55a8b58bbdd32341f137867c451d8d4e327733de89c94":hex:"d89028d21cee2b223d634a9927ec036b":hex:"":hex:"":hex:"":hex:"477a1612c19b1c2fee232385ccdb5b2f32c845c07fa216ee410cca20245239d3220ac48770017c4d52f99a267d53e0acdf69e8f4bd1d76d463e9bdddc16bef7faf9d9baa9b9de3d397d740d685c158a0" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 0) #8 +depends_on:0 +4:exp:0:hex:"c7209755b92bff93a059db79883b2866b51bae337aeec9e58c87e68de33545fa20870e5e70a190f6":hex:"34aee961eccf0b92b833f2448720bdc9":hex:"":hex:"":hex:"":hex:"285692468053547638e65dfb7c8b69aac43e16be5a4ce9898ae0d0c8f567dc27945ef6e21f36d456ca248577829b90f96a887f96e9c2a6ff2616e21c7ec93093d68f60d2cb99f2c7632f856e33ea8ff4" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 0) #9 +depends_on:0 +4:exp:0:hex:"1ceecebbc42f9ea1faf7494076f7937ba827b4666d0433ecc028ee75d4f55de2b223e92625e399ad":hex:"b431a36c996ccdb5e936da7ebd216c20":hex:"":hex:"":hex:"":hex:"64d4bacdf185dd8f6eba35dc8f79fa2cab155113e020d1f12b32bbc4bfb9c85881692a5d8933a40d9fe8f6629f74bba8a99e8db0228a13c8d7776459f73dba8e59e9820ae72f8c425ac3044079c1ebfc" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 0) #10 +depends_on:0 +4:exp:0:hex:"d5b264cec1c7acd78b902dc14a457d30b79acd3e06a12f57cf0c3e1b8fb1befb5abb9af1f58cc9ee":hex:"12e4101d6d4505cd43710b05d52a9194":hex:"":hex:"":hex:"":hex:"b53d3bbf4a9561904ad9e100b2601db2660f415fc5caebbb1a628b7095e6de4a3895ac5da6f2c1e1c6655d76fa5b8f75f52de41564d79b09c9d2c76c1c486f462a7164ecd76f0dfa7b5f53c0c25b7730" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 0) #11 +depends_on:0 +4:exp:0:hex:"f440671bcbbb1bdafb22c06482ff670374cdbd69535d07980f43cfaf10aad2453d884ce5852dbb32":hex:"8a69144ebeca59c330c9a4e0e644a7ab":hex:"":hex:"":hex:"":hex:"a5b42447f4d02504536df9e0ca8d98642a21b64a6b84bde4b2bc186c28b0f740ebdf2d60c664d4d89a867207bb8d4c62f1745cb3c971b4b2622423a4291e1cc97fce7128e3ecb3ec13ce08987f59b77c" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 0) #12 +depends_on:0 +4:exp:0:hex:"bef3995f0d2b1051554cf7b3235809fcd2989cafbad081630c538a7ba0695ffd95f3abeabf2a867d":hex:"e807cfc52494119188f86bfea878f2cd":hex:"":hex:"":hex:"":hex:"527bca6b945db8f2cda7f795763eb5767cfa1a4195a9d9ae70dd8129158138e687a056b64f00d29e11c37a9740d19fbd16429ce4dae79029018b984a22c1a2b2b988558b133651234b35f21ff42edcb2" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 0) #13 +depends_on:0 +4:exp:0:hex:"5fc1cea988adf1f7c090b14370ce169300a008a687475c464eab4611cbf3ea5583a967ef0c0ee2e7":hex:"7fed039d998bbfa3ad62aab86c176d6a":hex:"":hex:"":hex:"":hex:"f096f7f631882f5e5a6e708d71534c19eea20a57fc210155d49fe9b872b18cc04a73cb652a03ecfa0c6dfbc174811efd0897f4bd92c916a5c835bdfb5e126048f7c17daf00a845ff024641499047097d" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 0) #14 +depends_on:0 +4:exp:0:hex:"9c88099af48f9053abec455b7bbb015364fd593a0f40175d9d7b6301d86b259606fbca7de73ce63a":hex:"79e501b77f967a676fe398eb7c81cdde":hex:"":hex:"":hex:"":hex:"e8d53bd119d23cc57245a8b9b2d111811dc661555e389180e367e41f8c815ab4e7aaf5a238479117402ba17ea41c1104f475e11bb97cdc414409ac516b3b28b62f284c7d4093975279d3c31320c61061" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 128) #0 +depends_on:0 +4:exp:0:hex:"03e7b41c95818eb0b667bfa8a175a82466a1e417a9b6b92fd17e98c2e50ee0db00d25c3364451e95":hex:"126dded5eb0bc81be37c10bcd9d5f793":hex:"dc596d188e2343802240bc7f5cc60516":hex:"14c8ec10f5bdde6b9e75898d7f9f03d0":hex:"31aa842afcc1daa94098241a87d6ddfc":hex:"4739b1bcf87404a2290829bd7a61f0b391a794c71c055c7cc513b28dcb5fdc88645bc9cb490f41fab134c6b33ce9336571762754343961de671b02a47960b4b4e23c5bfb87dcc19b260b3bcb921ae325" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 128) #1 +depends_on:0 +4:exp:0:hex:"5810043ca63ef5e573e118abd09d5e9caa873d3a2a2a1c7eb574167bab56e4d1ab5c1725421be3aa":hex:"0ef00fe3e9126bc53dd61b8d2cb9a2a4":hex:"4e19f01001d1f550ce0dd0bd4cd3e216":hex:"684183426fb6d102f8e2ce55c599b740":hex:"1a80710e25c78cafb81cc119adb0a2f9":hex:"eb4c7059612d0ab63c0f28ceb7b8f89760c3d2b508f98441412bbe0ac133cafa7e2981ac2750272ebe503622b477c67e86930c9198fe21f7288394b2e11a5302e3db03b59780c49907ef720199ea1362" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 128) #2 +depends_on:0 +4:exp:0:hex:"c27d1abc5afd30a3025d42bf9efeb8a6f2608470db9a90f8ec4ad2a126b799402ec8a1f210d708d1":hex:"804004607012ed7b40ff0ad8f5ca085c":hex:"eb2393df0be0ff471d354343c43bf2ea":hex:"92618320cace6c075dcd69a634e76666":hex:"da54736df5d2e0daef664e905864cc1b":hex:"eeff317050aa3bda57bdfef2d46408b3fb2e64d34d4696254c9d8a09fa1b325bb3e3a973efe7918eb03489865f5e13e9a28a0bbb43822b9ca3b209ccaa1cd5bfa5139fe59e16248e1f468f944a0228cd" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 128) #3 +depends_on:0 +4:exp:0:hex:"3f34680939ba128c07c5dc5aa161a8703a45440ca68c8d5c2b706e7af101ae4a669b46dfa262ada2":hex:"e423dd11cf92c537509499eb891ef5f3":hex:"cd32c88c56858cc5f6d39199abaf4543":hex:"2b24bc6db1ece7a32cfe57df3f6ff74c":hex:"3c6dc6fb353ce7e131f8d09635465d2b":hex:"9dce0b5b3c8201c98f54501afce1595eaaa6e3e6b89abb6f6112b5bd5d1fcf549bd13e51fee87f0aab345571cfe7d7b61069660bd8cb8ea33406b6026ba28d02457e2bd3ecbe836829a4d91481fc0f75" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 128) #4 +depends_on:0 +4:exp:0:hex:"94b31b718bc40b28cc5a67ea5e891c14e1683d0e243c4868db7a613beadf1433550003dcedbd227c":hex:"5dd27ab3ea94ac5c04f4f8c13c767354":hex:"fe1fbaabe7a2bdf4ffdcfac0e7e214e4":hex:"d71d9f2a6887681bef91f5c1aaca50b8":hex:"06cfc99087437ab7754c5d626ba07083":hex:"4186f2a9518371d123473a4c96d23a44c89af9bafe17eb2ea702902b5a955a42b05188b8daf7ec7baee352b365f46a3b880810af5c9678df5503b5e2cf9d02897be81e409145c0cdbfb83949ef327f4f" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 128) #5 +depends_on:0 +4:exp:0:hex:"6b90e0e1496de9735239ab6ec28766669c65e1a4bc0f5c04e446388a90d86a1f060ad436666204fa":hex:"99455a5df2b13410dcb912f37c266093":hex:"a47f245fa6f0d928c17ed8956d1535a6":hex:"a88cdbf82362f1a2ea78ef5bbcbec7f2":hex:"eb8da8a49c4917d71df7facd8e9399c4":hex:"99b09a0bf4d00539f7c1f3c28b60cd86b47a33961da7a649e810a97c1388bbd712c6eb0f7df4b68cccc01b25defbec42b67f4a341c0460e7b20ab67abb34cc2a3ce5b5d7d06a186f48d95a7607ba0510" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 128) #6 +depends_on:0 +4:exp:0:hex:"05474cf1bfa15e12bbea7cfa9852d152ea29f8442291c64a8c9dda22ca653f755d5a5f128972d4a5":hex:"70d00e37a88b30c450580eaed5d4d60b":hex:"651f8ad6d3ed2bf04262dc79ecf164a3":hex:"3e693ddf993d63cd4c9d464f2c84c8a1":hex:"53db0c0c12363bab7b1ed57d420998ac":hex:"590e747956e6d01eadd1c9b7b1387bfb5c20693dac84f70e2c2931459b3ca9534325d84eeef1b245d17b8cd059e05a3bf998ffb517feba0b047553633dad642e8cce5c4b7110bf57aa6416edd204f780" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 128) #7 +depends_on:0 +4:exp:0:hex:"7e9a4732f5841617395ee04ade213b80785d2e4fef267d51fe13973b675bfac30716d753cf2f6232":hex:"0e725f5e2e3f5b9cb5ec36c4a4f99e0a":hex:"02592ab8e4e2096733e6b300eac278ca":hex:"2f3f8e2504bfe008aa1fee1150b47f05":hex:"2491177e84e06c3c6b48235b29c316c4":hex:"ca50da0839de54bd9fec1a4b1d6edba1e68b47970adc36fbf88e7757af6962d9b8ead266f8aad696f920a1bfc702d8ca43c4504cfa42d7a603a55fa524c62fe49e698f21eda7025c9b840ec1b9795066" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 128) #8 +depends_on:0 +4:exp:0:hex:"fc16d69df6254a9b7743ca43a64e9d1f5986d771b6cb069a65484fb4311a80479a4d00a42ce16cd6":hex:"82fdba5fb4c04bd550eb5a8e2e4b0a31":hex:"998b27a8e314b99b4ca06593bf9d4a17":hex:"b97706d6068cbf8df35b28a2bcba3b55":hex:"c24e22cf478a61f1adf5beece947e16a":hex:"29573d54e80e43625024d149e6ea55cce5728bb456e86b75175d38ad95aeb4ae5c47270ae774374ca44e2230c5d1861ff954f9fd432a5e8367abe49a88ed8eda504b991747ea9c4cf448ba504cb7de14" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 128) #9 +depends_on:0 +4:exp:0:hex:"e917537e534f9433e40f8271a799f859524ce9bb84a53caaf9eea9984d8ebff701eb7c5f627074bf":hex:"682088f3ce89ee635f5c8ec25ea8c8c8":hex:"085a9d20a2d017c4d3e57d20cba52714":hex:"b07122c8eeb299295858a2fd1d3b6098":hex:"1637261b4b3e7761b5923048a46d1eb0":hex:"be40786139aa3966fcb85198d861f5239cbf8886ae8e814571217dd4454c8646c4c8428558ee3d80c5297add64d6d1a991c4fdcd72cf42f82d73a89b8bd2364cd119821b1bf54f69acd01a7586c53925" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 128) #10 +depends_on:0 +4:exp:0:hex:"85ed8611ac58af2d6b878ebca74256d3f2f20a7a4f174822de6ea8d0cd0bdf18d395785f0797d371":hex:"f2612085c5d8338c9b77b9b1eb8092af":hex:"f414629fe7ae0a21b211e09fb66512b9":hex:"b943191d1882a390032339bdefd19351":hex:"4adac9816998cb105d1c4f7cd3d53764":hex:"dd79426f61e81d86561a98853b7e187eff7db3e8958944cc10a74e7b12db3b08bb4436bf64694c5b8bf1857e791ae7194554aef6b48d2b33ad6854bd2e9771bbea3e08c2c083a82cb07d7242ce22db2d" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 128) #11 +depends_on:0 +4:exp:0:hex:"6652b1c0403ef16416db88e49456119115d3901cd7dce343c718324222094c25d85c33857daf5b28":hex:"a580613da8ff7b06580db9a42bc0cdbb":hex:"923014039cd117f924900cd330607d0d":hex:"8b42f93d2ccdfea272f7a03bf37b831d":hex:"28ce97668d6cc92da8ee25077cb25de9":hex:"d31dd59237b3c8b2885838840261727ac116bae673b554fe9c8b0c64b1573a25bc4a14c1942d80563fb4165c57e1aef5c94c1f6b1f88ec6bb2bbc10ccd8149d175e4965d07341aba06a9426df0d0fee3" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 128) #12 +depends_on:0 +4:exp:0:hex:"f297186aab4f63f6fb85c4f29d659d6e48fab200424d67dd52fcacfe725ad65c0a47de25690c0ac5":hex:"9414f702fd050f7edb9a648cd833f8c9":hex:"91d5eb7962ec1051004041f5d23ffc34":hex:"94afc7023650c2edcd8c957e320b04f0":hex:"b6b79df82780297261e00ef05389b693":hex:"ebbdde904350c6d803fe258a3aa7a63622f2e9540f03b1cf687e20ef35fc5ba6b616254710cd4515eaf69abfba0ba778b87e4ce1f9f1fef34402c6e8d23efbdeb7da53a3db733e69527d36f24000251c" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 128) #13 +depends_on:0 +4:exp:0:hex:"90899d2da97759cc609f956f5f391a0edbb422f45afa0c7274a2ef5da636fec70c6d926b2670b88d":hex:"23261c0e7226d749a0d7d0166e92dae9":hex:"8ea2e411827c5d8b54b24da8ab41a841":hex:"b9ee1c9923240523e7e4745ef93581bb":hex:"bb0f785972cf68222a5eff4c7dd3e28e":hex:"2af35b1fba0c62aae991c12d50c86ce2cc633224b158b157459c41a5444072e918b4c777bfc84f8000aa238a46c5d5258057866f2484971d2708c33497191a2686f8ee9e3657616e00dfca61e0ffb8ff" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-1, 128, 128) #14 +depends_on:0 +4:exp:0:hex:"4e8227e8422d674cdb79e52cc30b7b84f81cc05b03339704dba3e731fc81949e679a4257c5fd68a7":hex:"2d6e4af02acaf230bf746157ec624ba7":hex:"deebb368a79c1788528b589056b1194b":hex:"1dbbc7a131e98344fd748edc6fec11a0":hex:"0266e8a066dcabaf6991c7a91e1c6e56":hex:"e51fc833a60b099e56996a66820368f5332822c8f9dffe8459c80d2512d451e1669ecf6e562a1c295fa6981fa651fdd3d8d936c18f88d5844393a2a371aaac8f485cfe92926f1a54980500edc43a0a6c" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 0) #0 +depends_on:1 +4:exp:1:hex:"09effa3906a5e93d05530edc71e62b39c5e4da020537176c23823da52dbdbae8307656cdaf8f861471dba14533c880505874098917e338f20ef8d8a1":hex:"":hex:"":hex:"":hex:"":hex:"d5de8a3388b11e45085f6d9a009462947631c4e74523080ccd03a0196aa56b63a93a2939f490e9456e9fce3e9000e58190991b9aed6d145ac18f65cf2b1c17eb021acc5256eb6a7e9023f62aed87d15ea4e4b328f265cc34adbc062d54524365cc9c5073a8371f35dc2f459e1d027515" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 0) #1 +depends_on:1 +4:exp:1:hex:"29a7071e686936e60c392061f71b68500dd6f11c563732fca9dec3b2f859e06a857fd94e3ca1817872d94c2b7c2f283a0d2d12a6443e95f7e700a910":hex:"":hex:"":hex:"":hex:"":hex:"72c0f3cb7792bfebbc1ee6f65d40d118a6a1c4e04e589c8f70273b4c7b718c9df383658572b894838a311fc0aa2aa6258758b33783e192b0c3c1d322809375dc925a05605fed8c7e8fb878fb63c84ce639fd277d9955f91602a9f4777b7c3b15404c4e761ec8d466674e32136c7b8bdb" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 0) #2 +depends_on:1 +4:exp:1:hex:"abd3dafc85b23025792bcdaf9f410829d3201c1e8ca450e217e13ec2e3b744e8c54107174a6e69ad05f643ee5cec49cd47ea88c80b96a0944154b458":hex:"":hex:"":hex:"":hex:"":hex:"152333e16b04283dfb8c43dbb3be43b5db2ec49a399facb65cebdf7ca3ed267792ba308cdb0649b0c19cb1126b144d5766b5afeca98036a1f85cd2cfe3b8071011b69b2aec382f8562d9dd4331a554f3a3ee632cff308488b30a7416be8bbdee7e250cd12f371d069a097e9eac43031a" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 0) #3 +depends_on:1 +4:exp:1:hex:"caa286c160d22af10922ee6088c269d0c963034e5fd2a85d2fc171d0c4ba0833b630a64ab09965f132a744656631bf2dd27430c7c2d1e59cdcf43a97":hex:"":hex:"":hex:"":hex:"":hex:"4d6132b9ce70470dd36f551584ada639e74b85fb9bd3c3e350011d99f2dc0371f874e6b9d92eba3fceafe34e574c1441d0d476c475b704755a28733e31637962cae67e849bed18d77501383cdbc27ab6f60d5d8d26634ef39e2c60fcbb04a9bdda8bcfb9b2d3aeec12a21279ed553343" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 0) #4 +depends_on:1 +4:exp:1:hex:"f79156a2321ba930e15109501ead80a3b26c1747b7a9aeb922d1a9d474df64a1fc3483f10e88a7fcdde91dc06940c58bf4d747b5a9cd8cad2c2e9870":hex:"":hex:"":hex:"":hex:"":hex:"1b3aeaff973b2e20cee947ff283277991842a22f45cce9d22c1705daa51a56ab43aaae1b51bad7a7363edc7b548a0cec6b376b925a6e35bc7dc3b4a33a7f3b57d66b1b35256908bd2d8f0495caf2539ba4475d766c21c2c2e4acff87fefb07c662eb344d9c99ed407165f8a09a22816a" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 0) #5 +depends_on:1 +4:exp:1:hex:"2dfeb70fc433426e23378d048b836f899cbff52d4a92c6d7d218e3aa54c06793339a752f86f03b7fcf89bef725339f16ab1cd28ec85c20594bbdf3be":hex:"":hex:"":hex:"":hex:"":hex:"d403dd8a6f3a914933253db9cd043421e54243a34043f5ee11a3b6a627e25d944434eac22a00172caa607ebf7de55b4c4305c2b93428d5fb4cf0a649451ec7fc5da65c4894cf4d2f3d52e90993544237e5c58745441c9cb2e047513ff81d9cf980d8b12769c21cc8c06f6d583b8be3dd" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 0) #6 +depends_on:1 +4:exp:1:hex:"2c6ba987bb61c4131138bb8acd877763c2c7e1f86289a81b6b54d1d8b399b5a5ac7171c0c9c0b5943bd7f54bf72b20307834e971bb637b351a756823":hex:"":hex:"":hex:"":hex:"":hex:"7ff01def84626825fc22a62cfe28f5f95403bb2618eff22529b6531aaf1032100944d5f9703496d165c5756c0aac55b1812a72940aa5317fb6a2944d124e7f65766f231b6bda06100c5ad0d1b37c488e0e9f11a6d8f7e4cf7337e04d094ea9de2db1bbecf40e0cc8d1fc1cf5a01cd081" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 0) #7 +depends_on:1 +4:exp:1:hex:"ba08acc3a00b9b40d2bad8cca4909d3bbec5471f78d0bf89a805d839b8b29fb753c9e5d3674365a7055a187a238ea1cd04f482d24d856b67eb54d71a":hex:"":hex:"":hex:"":hex:"":hex:"9ec6ad840270051313c5825295a6f7527a8b1b9b3e7c867e5642a984b11911be60614e5737d3a0d109eea4223f0d2ee63cb19be702291a771b2e2c277f2d4559176fc5adccea52492e3d3ba7d17bad5b5f487d783639467997d7668ce2173ef777f9e31dbecb6ee716b5cedc8bc5098a" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 0) #8 +depends_on:1 +4:exp:1:hex:"95413345228eadb85b67674b9981af34bd6a4ae04866229921be928c06e6a6a6fde8d31a6a88f24d6a1114ccbe08ded9d7c50c3360bcb8908a615381":hex:"":hex:"":hex:"":hex:"":hex:"d4dc08e36f94e88f8bfb1919c13186139591edc681affb61c421d32dfda69e507d59495bcadd39b73c4036ef440dc598e339473caba60e0770ac4729264b1dbfdaf32ca6d136ef6810a6660fa5cbac91940a28053c0fa405c7b6ca5e3f147b5e0096f36b67da9fce64247cfdaad70fc0" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 0) #9 +depends_on:1 +4:exp:1:hex:"9b6bb9589f41e8ed6969dbf1a3b3d242dd5e133711f72549334c74190e4efb1d0452016ed4fffca9561aaf219e6793bfb6fd3dd9500bd61e6a62db66":hex:"":hex:"":hex:"":hex:"":hex:"cee02e4fe0980afe6ccbb1b0d80041ba9841461397494f0fae5188228fbe9822e3ffc5397b7caa29950d95536e7000e1249e5bb93a593e659a49689add16d2f5e02ff251c76716dc426010c2961a176bd63c29397f6e36cd4de2f2b11e1260b9f9a00bd49b4b6617fb056b82c92c471d" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 0) #10 +depends_on:1 +4:exp:1:hex:"f276ba0da08274a082f3b8ad989a713908873b742f96bbbf8c81b4e1a7e4857bc99aeceabe534c45105306b14860883cd56f2438a7812b43f0d911f7":hex:"":hex:"":hex:"":hex:"":hex:"24dd3eea9a8e1f9929ebbbc2a68379caec77fb42531a97f7f3a75d16ad053799ffc25cace4f4553c271ae360eca1f5131ef87bf0390b26785880db0d92bb351e6e22409d600f6dab5cbb2278b8784e67a40be4d8ea6d994115c67b7224d721d1b3c7fc5b24e15f97eb3bbe33798d1bb8" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 0) #11 +depends_on:1 +4:exp:1:hex:"fa5ed9189f21d7e94764bddeff23050112868cfe35220b863e8112f691c57e6d6c4a91c752c5f0b37b97d5f3e383480054877f319a568b064e6562a4":hex:"":hex:"":hex:"":hex:"":hex:"55eb5ef1248b5a34c741f2076ea5d568da630ce4720b7e2c86a9dd535b48faece2229866a36024fd4114249be4730e554b772d557ce3f8b9d4d86d91202582213a676a076b87f941351c7606a452816db5d0f8194825d402d2fe7ebb2815532091b3830a9616918bb0e3298faf037bf6" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 0) #12 +depends_on:1 +4:exp:1:hex:"d0c5003a6168163f707b25191b51211dc1ae361df1e069d0f284f66967aca4199809dc89368164213ae17285674e5574851582372fcae8cd2733bf4a":hex:"":hex:"":hex:"":hex:"":hex:"24910e1a9304471d053af458bc3fdef527e8796e33133f5af005106b203e8fdefb274f1c0e8ff44e92c63bef3082c6e5607a7981a6076f1a1d15368f4330c7012509d5f61b4349224a87960bce9873725145f187aa931394c449f502d12b60655a0ab2a221134a51786c3683f9ffa2b2" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 0) #13 +depends_on:1 +4:exp:1:hex:"bf5b5d1c891f7a6f2dd3f4d486d693fbf67f49584b7f053aa96ddacd9fc0cdea0fab8209d8f4335820ce68bfa04899b63cda15242e9cd3f7acb1f103":hex:"":hex:"":hex:"":hex:"":hex:"710c8b33ab034b50a29de657b93f3c71df4727a5219a474350c88b4e3974ffd0d3452e8c4d26f579e348f39cfe0d20045a70a866c5e16a0c22aa0d69b739f74cbe8b046bc14cf82b86498460bfb26af0771371c2750f7c59320c6f6fe1d04cfb40c048686b6c1b69dc641b8957c2c341" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 0) #14 +depends_on:1 +4:exp:1:hex:"525615164dce0dac5397b357546aad049dbe5982da2c215a233557553460f8505a3e7c8224af561190099ee21a06d62f9f00e282b32b486e8d0e338f":hex:"":hex:"":hex:"":hex:"":hex:"3fe96c9b10c4c8e43cf3cd76ced4ad85ae576f32ea6671ef284f7c97491b72152a18a1060145e4f5e7c0c373c396cb4c8c0b6d625c1f0d2ae95b0691cb1c80a3dd5eaa21632a82aaa28e09a2bbdeff7fd8812fae46deae14bbb16da24d06878fc417b3554fb47b0ef9fe18d1b9d4f4ca" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 192) #0 +depends_on:1 +4:exp:1:hex:"ca81953d50430bfb09537a318a1a7b90a9200077abb721e55d9ac28946fbf75d9cebc81f11cf6d4db712a3b91d479e00ba30d736a763cbfe40b91448":hex:"":hex:"e50aa8bec96339cf2608bb82cf038d5fd6bf93e65271cb72":hex:"5c5eed0d98c7fc7eb30acddfee002d5b99c965949d4e2095":hex:"a1a7cbc79bfaf4571cd8020da094118d241b3f018ec823ba":hex:"c8b7d9c15624ae018a8612edf6444354c45c6a788272281c16526c689a3dac36679e44d89c4acd7eb58ff40a577c3d1a9f4d0175feef9ac5674c115d5e4cd17f2369e0135e33b018bdc99e4099713ace986a145ef55e868f74846feb3592d44ca3ebba6044a928e9284b5ea75063ae81" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 192) #1 +depends_on:1 +4:exp:1:hex:"b96ca1202fa959ef55a683a9021068e14c75376e15d1f0394b1c091a8b6dd6b98b6f63747dae58c29186179b4155b868f5a81ca206a5086a5759b025":hex:"":hex:"a35096086c1fdeb1fb60dd84fa730eccedd53e5b127eecf9":hex:"a3269fa749e55850d4aa9e466bced0beab2edf86b926c2ae":hex:"29f6799f7c78fdfa2d0dbdde8381aec5af249556903f6313":hex:"c63ea73e1ddc9d55bd64a63cf73f730136ab4f6d688a9cd56b945f9875ef4ff48cdbdd8b78b898486a685d8af8cccbc2a834a9804e566ee7138c7dbf488d263fbd387041f835ea46ad27cbd66721428ed5795f6ed044cdb17c8e7e3ecbf61dd68239e8fd644ae85776050afbaa06caf7" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 192) #2 +depends_on:1 +4:exp:1:hex:"59af1213cfcaeea29e31400ab6b30f108d4a9a77d3b370972d29032cdc612b7c360c41f16b0c9d794219300fe0551e0e66d634a4eec396c50ec9604c":hex:"":hex:"66ed9352bed73224d35508754aab68fcea10aac06d60e888":hex:"198a3526a67a0ce31ad0348bbdfecede4f82d4203d1d5ca1":hex:"03faa2f4c34577cd8b2ed53e10c68c83c1ebc8d877379178":hex:"5e24f1a9083f13274ed1020ab6935222cca644d0920839c2b142e2780983204453d2e6c58518cb351188bc3e5e3b64015882130d745511f004cfb6b64831139e01ae5bba64b74f1a1ede7e220a6d29b1067d7c68ba3543f4dda2fc97a3dd23590c2c18b85662618462ba2c05231534b6" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 192) #3 +depends_on:1 +4:exp:1:hex:"e6cc94c72f37999f28b5fe350bff622b433ae19111786c747d954adaecba47abacfea8cdf5eab05e2f750c0a679cfb9c2c2c071461178a054af40967":hex:"":hex:"3032528703dd66e42c7b6b5881483eca41e9eea503852eda":hex:"ce8c03b0a05982ceadb516b1fe513da2403a9e6dcd7a39f0":hex:"3f7ccb55376f23dfac1dc13be617894931f9c13d15fd3dcb":hex:"558656cad7da2ad87a7a29ec5e612addcca96d72ac7b224cde80ce386c6efda12113fe9aa8e511714a42edab53ea0289c75d34b42f2313ac366f51f5dd3f6968bbd4c09ebf840dfd03852dedc1e3b6209d932889cb04062c644482106cf8b7a237d2937840f0c4d752d52725b5590d15" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 192) #4 +depends_on:1 +4:exp:1:hex:"cd4dcc8fb50672611f19e0cc8adcf9285f9d76e7e28bcac34e931163f8057b9f86424e5d514a13c0a25bbb49ee485501ec5e21061e006ad1569d2610":hex:"":hex:"24480094a44067b86ef47db38ec3e62914351196358bd9d7":hex:"c6ac3b879adb6c150a8ee44428c333574ed9b0d6806848d8":hex:"92bdc1514d87daaa321655d56c6302878c2bde37700163e8":hex:"21c51a1568aafb56af1fd424f6fa146113d14d6d63e1a24e3168130ebc10dd84925bc4077c41897aa8b3c73aeb5bcf392d496dedcb6487379bfb3e12bc07fcf5c196d59fcc1fa730e55c00edaa2bca7b1e32a40ba06500ed3dd7fcab361995319979a0fa9cdc406a4d20650814e8bfac" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 192) #5 +depends_on:1 +4:exp:1:hex:"fdca0039e8485a06e6a9afbde5b07a1bbe49e13659a2164034289639d23dcf3f9874b8fb1a1af8495b6b2129b88475cc529c96271bc1bbb5c7c2ea03":hex:"":hex:"841f765ed5f00be838a270730ce5926659cd7cd9d5b93ca5":hex:"825fa13ed554973768aab55917cc880183c3ebb33a532305":hex:"736e9de931198dd1c5f18a7da3887f685fbfa22b1d6ab638":hex:"dd8596a62847a77da81818dbbeaf0393bd5e135069ba169f8987f01dc756689342cba61d87a79d4bce2311790069d10709c3a53df974c7d6793ae1298253f13ecdbb5680928579b73d73afdcd24a703dc9b391f303d8835ba1129c3d46237ede5e44732a74f8f23b60a3a45ce42f042a" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 192) #6 +depends_on:1 +4:exp:1:hex:"e246e3f95d89c166768aac69fc95fb49eec49aa633adb938ce1705b68987aeb0fae7f57b7e99e4f3e3e1b1db2d1fedf443bd2618e95193cefd905e1d":hex:"":hex:"130701f88cc1e7545980e6c6f6cc76b0336f089bb66cc347":hex:"95533f4cc247c887d6a7cc0ca753009bf034ba95b7b1d3b2":hex:"464fd16f011eb2986d9982879d79349a3ce4f5905bbfe832":hex:"0d4e6b03af7a648337abec2efa585908af40e88d1f104b3e8c352aa29ac79fe8e448f36b0dfd701a1fc0f1d86dcab7e8a8ecada6ba218d9aaea1c40aa442ca51f3116ced3c9b8ba7546688ed4f3a1378f76b8a29ec763784fc82906dc0f688c5e60d59e6d5284fcd96f361bc5b285465" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 192) #7 +depends_on:1 +4:exp:1:hex:"cb0405e58270cecb34a9951adeb694c5513c499cf310f6a99985d4fb3973463e907705740e01aed4ca221d4b03ef30e69fd8dbfb4ea919a913800a1a":hex:"":hex:"0b57e688472e9a05baa3920417a2e8f9a9c12555fd0abc00":hex:"cac05f79d9837c97bb39f751792624983c397fd288dd1d95":hex:"344d2aa2b3bad1485429b66606bf215acb0a65bf2a318f6d":hex:"b2a13d75ad389514149763199d711092a9b0e4f1e50809355cfefc1884a94f4d4a50ac5c5da0b4e9bd7537e413bb451fdd2fa77f1f894444cb5c81e4c43978ebfd96900a2c8986c885d0faf89a2ad5c6ef922dfba1b5219b0f3c4ac2095340c3b8bf0db037171b6545741c76217b2aa5" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 192) #8 +depends_on:1 +4:exp:1:hex:"e38ea7584fea31e48ab085c44f46b4cf68ff24b4a6b0b25867463e4a46ddc9a4de23f7272af1e9c4e0391aa9491ce7cdb5f96292e0d65cb9a9a4a3cc":hex:"":hex:"afe267e1491de3934054b8419b88b16731217eb4ee74c854":hex:"bd0f3c43229a0ffc9e143e16738111e16d6a06ebf3eaa5b0":hex:"23bd14ef8cf797cff7ff787df8ed8b87684fe7a9a33bf695":hex:"c27a6ee5bab8f8e93783840e72894f3b024c7d3206a4a1869ce6fa8b5674bcbd24d4aab30f9866d797d850423c57684b7697913b9ef7bc0be933d0e21535bd50fea0feeb293985261fb9d4eb1ef97ab5ec6b691a08db4c8171e63745d14fb4c3a03c41f906daaa2877b7622b254f0449" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 192) #9 +depends_on:1 +4:exp:1:hex:"71dc625242dcb94e6ba2bd013beb2112cfca576774e102830503b7aeda24c2c9d862f5212975ccc019ad2ea0442595f74d1d37dbcba0719d8ea32ba1":hex:"":hex:"0fef9f0934bb4485bfab2431f8811d963ec7fa7953ffc213":hex:"a6a7501c4a5a93c396ef8cc969ebd93cac1c30b4783a0617":hex:"c58ea233f35a22fd9b01592c6026aa17922070b3604c7118":hex:"a1452d85799b54370cff65fd6dd74b575199606cc8fa64880b26972c913c372010b4c3f4ce9b7b565a8f5305072404c7b9d70f7aef6e2709c1694eefae66ffa80f16eb4b91f8041f4487427e69daa437e183e83d3b9718ba6a23fb90365884899e0d2f0bef56b27249f65e1c00c5411a" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 192) #10 +depends_on:1 +4:exp:1:hex:"36c1e048d16f9d6035c6b62515afb929633f356fed6a654282663e2284fd4132116d21eef66d29629bc712965d960f18cf3f7dcbf8a3ccd61b5b5fb5":hex:"":hex:"93bb372b7ae1035de6f13b2a36c3ae5682b9a3ea8f444383":hex:"9715b72e4755993762e11a93857f1d50a051e70d094339a5":hex:"2f1e73945863b237f49d6d20d0999a0203f295b9a046dca2":hex:"ca135891b47f27c26ac891df49c80d085f90c13d236a60f1372eefd81eafc5819f4ae5aee5b32d46681be01629b078ae965f67b81a5268ef0b303d09e048f4449f5aaa11af51f80151b4697b13700930167cdcb3b6e8260eeb8bec7f6a67a2050a6ea569c825d61d4858a1cd15f70fb3" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 192) #11 +depends_on:1 +4:exp:1:hex:"582425e13356e7a840cae9fa435b220af6a96fb53ac91e7ee22023cf6a0eef3923907883ae540be816e0631c894520b86e8c6adb8152e55cb6aed5ad":hex:"":hex:"227762e137f9eec6d2b3c63476b404dc5b0c68613a93034a":hex:"fba72c01a9e51c93ac00c1232c717d32fd4d4c791556e716":hex:"f5258bf318457769a93ef5b3ba95fa2753ad1c5c1b81a785":hex:"c753a84ba7f41af2ab757ac1e4c9c450d2112767ff55a9af8f58edc05c2adcaef7b5bf696e5c64f71d5685593f254a87625065ee0df51ab4f7bba38faf5799c567d783fa047957f3f965571a7b4cb477566d1c434d6b2e22ae16fdf473a6c03057d934a7e25f0ea3537be97238d74bc4" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 192) #12 +depends_on:1 +4:exp:1:hex:"836f5d7521f26d884dc34af2ca56ab4a752ea18b909085a87cb6d07dba32b654390a25b68ea7ba8fb790271c712f387145052ca46cb40534355c1666":hex:"":hex:"99d9aec334666d7c399e453455ef6ae884c2173e12e31cf2":hex:"d74d20dc22c55c35f0b66a464dfbe8f349616916fc726298":hex:"407b0951404079fb3b54559c0286143d9cb18957bed7fb1d":hex:"809f372d1af60ff972049193fe9f173684a2fc9828b60b32164c1b6738e1ba6aa12cf739287a74c6ad528a3ec00095b590b44705b4975236a0b7ea02c1213f0e830f275f53bb79efd98679c4766cad27738e6fb777e98cdd606b971fa60745289d5ef72a99e1919686a53a241fe36cf0" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 192) #13 +depends_on:1 +4:exp:1:hex:"e555ed6c7ab344fea68d73c6432e4e6da2e67d8b33ab79e5719a2def258a852d17d93212840583fe23900949c301a29fc92095f4716018144e64583b":hex:"":hex:"5262cccd138256fa8424801435d118f39b9aa1db4d11ca9f":hex:"9b55d76b743bd7fc5700fde8ffca956c0ed6091df1a22aed":hex:"f8c99af8029110c41a6a01fd2d3d12b7103aa39cbeea90c8":hex:"d1ec06e38af7c6e0a70b73ac62bc3556183f99a47bfea0f0c4a59e7ba4b0718df5438e369ba14be84db40d5ffe8a1a5952edfb83f61ee4d984e3d2fa67f557aacc58291cc688fa29be530e66c228e68607e25c013473b4ffbcfeda721ee35f5dfc8809528eaddad8969ce719a411216f" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 0, 192) #14 +depends_on:1 +4:exp:1:hex:"12f2cabd3b6f640daaf27ed6cf6bd7d06e2ac372733c6971739e36afe2ba1ebf4e7e5e9f5591480e3fae752fa59bb99a1949bdeccf0c100f6afe886d":hex:"":hex:"7766c36e6583cc8e3c26a8058fa0923bfeb3ee22033f46c0":hex:"63e60d1bba9aa29adc3f3b8a5db53f3b703c7ae69bcbc2f7":hex:"f416f36717ba5f0a78125ca52ccd004b2f4f2dcdd401f595":hex:"6196b2b4adff14a26d64f440b6c160210266d7f5b77d5e292e94b8c67bd9cc774274741e7c0c9a7ab21c31f1194ef4218ddcbbe94059042d22ef44ecfecef214a73db64505d46d5493d7475d0684fc0e431c5265c12b35310d4404b3c4db6029facbaec88b0c0ae9799e5af0aa49e842" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 0) #0 +depends_on:1 +4:exp:1:hex:"2c50da90a1f7987d5216950ea22689584b237647d96c1239f9251942f4d13d16f418b0cf7265b91c4ad97a7acbbda065a48bc1bc5c7a9ee1523c50e3":hex:"a74c108fe870b91a2defa971fa1efcb7a209f293d29bb5ea":hex:"":hex:"":hex:"":hex:"8853eb47c4ada94a3d58a1b517784bccc8f831d02dd5239c740fd7caa3869c5ff7bbf522a78be2d510c49c496a6657a09f0ede00daee9fd77061b0f04e7342518dc6ec1f4a7ff99dd7c783882b58f5e8bc467516c6b85985fab65c6761d4fe756ffc27fd62cfb92778391a258d3b0b0e" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 0) #1 +depends_on:1 +4:exp:1:hex:"4606e3e19a8a53e8aba05d9d1fda1ddf15e7709aa2bae8b54efc4a14e734b45a5cbbad00a749d2bde540258de74ff8fe886d05570300af2086d0b9a2":hex:"23ef5fbde4b270c084a745e0e299a5eba228a37074fd4f07":hex:"":hex:"":hex:"":hex:"8caf86df25de5cbc3749fee4b64fe041cf4ef2859e20704bb01abe126a90ead8cffc427c2f98aac400aab97184846125a2a66888dea9c8aa108e96e03b05bbd30e566fb90c661dc1990ebfe75f73f5b0de7be419c225bfcba3713805455dffbe5d6fcc98141743b59c2cbd70e78f5977" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 0) #2 +depends_on:1 +4:exp:1:hex:"08e2e2175fb34e4111179fc2580c05afa16d224440cc7eff24082beb16133a992fc4f4e2762634fbf68177dc3f11c4d057b71661ade56e7768ab9e6b":hex:"0a4af33e2501ba409b132459ba97603888e727aca0a0cee0":hex:"":hex:"":hex:"":hex:"39c60b6d9f85cb69b2128bde86aca2b055e21ffd7716d789f834ecacc69a043893b09459991793571d3d8070f03382a11bd1c1bf38e86fae13a932c6dc82c540fab8c8eff478e598d3295663ab75ee8a56376c0d607fe43b74ac39479b8f694a3a13826b1b96344ec67b9eb0a5858eec" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 0) #3 +depends_on:1 +4:exp:1:hex:"b436ebeda1119de3fb2b2e532f7ebf59fac632a4d784d904f844bb73f2cade5a88d4790c8c1d5973fc73f6b7f929303b62d30b6818a25ddf705bdb9e":hex:"07de5589726c49dc5a764de9b41bce74675e4ca3c71769a6":hex:"":hex:"":hex:"":hex:"2099fc754ecd19a19de8afd21d2ae2ce456c32d6ce7772a98e37ed47f54001f44fad8e9b591a70d3bb28f19bca22940321ba17c33193613b7b5be1ec54efa470b70cbd6be2931193c35cc73d80c139bb4e670e1a2cb74d3bedd3610e9d0f9d154372a70b608fef824c346fb16241b301" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 0) #4 +depends_on:1 +4:exp:1:hex:"4d3e993c296c66983b9c751d2c0aa2d519f801a764ac9f1fd8d86b57eb226bdd9f69efd9ad29bf16af483e7dc170f8af65c16426c2ab7c0fa9df0175":hex:"52ae4cfe985348408d3678d60259a78369aac02953911e74":hex:"":hex:"":hex:"":hex:"bead2cfc29315133e6f5ba2e85bd7778dcf9908081032ee634f90b0124ed9371c9009419b9e2a409fe4abd6295cad57cddcb6042986cc98f2fafdff99f7cc1185f3ba0d5f1e5f5452ee5f9df03c0e8a4f8426ca246afafe81079c2f0d165b87056e7c8528e8cccac5f49d0bb5ccfbefc" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 0) #5 +depends_on:1 +4:exp:1:hex:"c7c4e18c56e9191ba43c967cebe48e55bf9aff4d6449c3e6a1f9846bfd7f92d535bb7386c0155cdc5aa2beec888de0d432f695ec79b1c78841ad941e":hex:"c36a381b1b36e6ab00ea80557b5e7451ec9771101dc22580":hex:"":hex:"":hex:"":hex:"da74b23d309fc7cf7670d7feb6cb6ff4da1b763ae2e8616edeec12c71511f5a24b9c466532283f4151a902ffa5ae211d7c1efa84477b93fc393ac95522f3673f97aa9e379e48d198d5929684875150633fcf8a0918d2050551d8daa91887f3d2685737b6456d0c61c0a117413f193346" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 0) #6 +depends_on:1 +4:exp:1:hex:"78426f865483ffbcc6330db2ccd65bf8f247706cedf68d4cbcc289bacb1ef32e5caf05f28a21146a9b18e77b3a7ed0d24a0803c9af7264fe4e23d692":hex:"e5026090f9806ff6f158c4a834588f6a39e9b4a44ef2dfa6":hex:"":hex:"":hex:"":hex:"111cd64a9950cc6f20a1b38811fce4a08929ca2654bed66c0cdebab0b81552826c06ef12ce463fc9c91c81a35d2ca0553905922b9a4975fa8fee2c7f9ffa9f2ed8cb2609f4b7d32a44927c7b5baa8f43dda137aba9b49a2b0394f7f67d37b7f71a5e4f4c151db6b96e8e4dd9cd0bd84d" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 0) #7 +depends_on:1 +4:exp:1:hex:"43ca11d53ad0198e4db5e136de8136bc461851a30ce59521f931ad0596d13365bd8297a68dd42b7dab7f40808b3ce6c12f14d4de741ce451b6637a10":hex:"532b05891fe406ce72421013aceb434581be8a3a13549dfa":hex:"":hex:"":hex:"":hex:"4c42f791dc8322d779f9a1ed9a28b0cf352601a4ef6d74e4e822ee5d9eef06e700314acb7a47dcbb62805babdcfdd236e3022374defd44bbf747764f72fbfccae10893b54b29966aba448435987c22ace4c931d01dc945091860cae7744365bd9b619059b8b646b229878966049cf83f" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 0) #8 +depends_on:1 +4:exp:1:hex:"ddcb3024b681e30e16e05026d8e23977497fd0b2c0ac24017de2744edcb097d3a104d4e3c6b8adcb554746f9a43671f0692c01a8f89fa98ec3a54ac7":hex:"bd9e41974f6627ac5bbb21ec690eece459e1dcedefb327f9":hex:"":hex:"":hex:"":hex:"741b2a8e82aa3ca9f3a609d05a6e2d570be463ef957f235344cdf9e0f89b3610951aa1ef0b9406785b75e59c2de8349d435e4db82fc2a4a8b94e366f4eb13c432fcf8fac08f0c7fdbe67a44e81706b53b460f78befb8cb6dd2a0ffd13c87df84f8a5197ed47158cee171e5323593df4e" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 0) #9 +depends_on:1 +4:exp:1:hex:"f81c4ba8605dc14072e2bda2d2ef64e71ad856061056b8d8374fff5a6fd9a54a814fd725bda8944037197492c52c62b97ea02df33325b35b91726839":hex:"217137084f4519d046ec896144cf2c301baf911e1440852e":hex:"":hex:"":hex:"":hex:"14efd71fa13dfbd498bbe13ffa24e646d04ee0ef32c99c11004c3e9d8f748ac2f956f9899a72c8d97ae988d06275855f77a92bc30f1b957dbcfc93fffec3852715c239c5313e765affbed257d302b6d1b74977b8012522b69902adb86efc1ad768d99d657a5375dff720b4cad886877a" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 0) #10 +depends_on:1 +4:exp:1:hex:"8181fd2cc5f7ae2d4ed2c96b9511aeeef33e50ecf164afc4eddebaf76a96d97bfb40377959e1edc44d24df041749ec6239ff226e40d5a5feccdbeda6":hex:"7d6ca5ab652a37cd79367d84299f1ff2c5a3c2331c77b98e":hex:"":hex:"":hex:"":hex:"5a2cac8110a24e1d8c5f8bff3e82857ec8cfcd469c316fa18b0f65a0d30866e49fed2a228121f50901dbbba561732c4fe82a98f341bbc0a397fd257a5f8a4a9122c991648b1a6507c82f866d26f9b22e0ee7c9a51c4d8e5104f0b4570043c9257bb9dd6f3730f1daf94f80baf8907acb" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 0) #11 +depends_on:1 +4:exp:1:hex:"a0ad012a978bed2268d05086b823f5d0dc9bb98ee03980d755bce968f9ac81db886a2a05b59df40d8346334a0276b73f528db03a118545acb7f2d70e":hex:"1a8aca3c118f2bc0c2196df81ef22c267d20ed7c607cdae0":hex:"":hex:"":hex:"":hex:"b9dc0eb1e4aeb482dea1b4a5e6f6ef9636366face696811db2d912e9430b303f23ac95d65682694ef9513ac5b3e56a053b2e1a2ffbcb901c375cd122cab47d31fca5a0606daf8cc2e5e6e99b90fc8ab4fa67794caad91985cc92b2187dd2965be0980240d9be2fb1c4bf06e60f58f547" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 0) #12 +depends_on:1 +4:exp:1:hex:"f28b143468ab87794230cef4361d047236444180d0cfda58cbb9494cd1ad21be96297ff799011042013789a928f18831ffb0169126dd046c774a4fce":hex:"ea7fc50e1eea3d84bffcbf83b240e921348b532e7b33f094":hex:"":hex:"":hex:"":hex:"5c22e92f25acaf98f55ff06e1bd80d382da754d1d33cffb6fca933583ba758200357551640c439770f77f843e9ce1e9a054f69588d76acb9cb92b7a2fa2903bc51391bd7001ccc1da67a4cce9e5dd08c2d489295c36de2c148ce27311d0789310de1cab2641e92f859b036383a8058a4" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 0) #13 +depends_on:1 +4:exp:1:hex:"b628cb448e477cb439a2de687861a992e738db6b2b25cc6c27aadfc3a0a640b3411de49c920407303e80abd7a1d4f45c4749980fe1550bff69518210":hex:"d5f4f8266da9b7f17ac97734201544104a5c0acb53c6bf22":hex:"":hex:"":hex:"":hex:"34a834dbb7da0b6a2e2353bd9795bef369cdde4d172b3feae7b1d9fdfb0446454cfb1adeff423d0a143c33c0e0d8e7905bd1720889e8b1121f1ef82cf15443c2f9c8999c5573e7df60b52ef395ca1d1b60e7eb721c012c344d06b336d519fa2b7b6dfbed8383456504bd0b4893bf2ba2" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 0) #14 +depends_on:1 +4:exp:1:hex:"5c7c9690a1926a4580c691c2e5327e736d5c3aec0ce8f5d32d4946bc4b607f712a8759428b010ba1b268b0de64fc5eb32d3f7fa9b8d4f20fab45c72d":hex:"0310b2d8b5655cbb0fc2041ad15a248a7b1f2ac78845e29b":hex:"":hex:"":hex:"":hex:"6f8b6df55d9d8acf87dc2af20b7f4512f9425987495f512975de8059135e7ebb8698cb0301a8816e7299e76053cb66051c8b35bd2b00b4695cff4847f168d2d60697495cd9007ab7dd74ee7f61ee90b7827543f624b7c1412bba3d6df1242e6ffd90534ed393341429fc00bd97d9bcb7" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 192) #0 +depends_on:1 +4:exp:1:hex:"96ae702af50c50c7c38818a5133938bd7ce51197fc78e21815b6c5a7ff9c0395d764159f707d5813e5bf47c1b8232b44a007bf7decfef499d758ed53":hex:"e96554644097e9932585b7f4bb14d101f24c8b0376f38c05":hex:"3f698a5f6f4fe67ef2ddf23bd5a67c1a2df4f3b19425fb85":hex:"fe1f6a90fc0ed396bca21c0d40a1bb583eb63df78c98adac":hex:"5942b56148f27dd5388f00caa47ffd4925e854237fe14454":hex:"150b9260ce9aa419fe1860332ae7c9f42d9ada1649679b53f46bc9d20de3431186a54afb5df7b6269cdc05540a93fdd50a2cd3a862372d862841768df02846b057993dd6aa32f874b7220a5a1fd9cb573d720a54af5715cedfc16f0d9a467735e253b2b1a6e97421fcee1f2d670dec1a" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 192) #1 +depends_on:1 +4:exp:1:hex:"4834717f669d9b599f0ee526129057b5a7c5680724ae0459ceb0e0d4eda21e5fe92e63fd23f08f8a0b094a85f3f377fdf1018ada0c461b5a05c334e8":hex:"870b7857dae97cd361a005c3005013e4dd55ca76e46b62bd":hex:"522534ba1a09cf9abf29bde66ce1dacd0e273e8954eccafb":hex:"45f54169665f59d92211f266892009958ee515f14d09581a":hex:"4633819c2ae83c71059ec8ae41ed2c68cadf9b2085a5b8bb":hex:"7afd6cfafd9a7bad155b59a8bb2094f76b915b93764e92858821d5c32ff4a29493788d3dc1627ffe7980950394349eba88b9c2f6869ac5086296366b6f4ee37e8529d291c9d962e30662423faf375b7820e0b650db03e3c99791d8042da790cce1a1997ea21441dba4b936bd8b393300" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 192) #2 +depends_on:1 +4:exp:1:hex:"f5d1d27eb344b63e907d82a2e57494b25dabcae440ac88738512d9602ac8bca243018f2495599e618dde0261e43ea38d45e7c09ccdc4bf3dd8e5c100":hex:"12ff844e5c5bb3fd871feb37ab796002846ffaca5a741c54":hex:"f642c19602754584afa3083f567d80fdcd1e5c29202ac3ad":hex:"cb6dbad8ce1a5677b4825cca934336b936ccf841ff98d894":hex:"c11fcc157c643a943e54274f1d942d998fd1ea0333e21588":hex:"6f25ae8bf8c26d5f0b9d2a81acaf221790a09241b6e83c9e527c7784881d1f7398c2d7771174f92aab45134b4633ad96430df30b130ae34af52de90b425405959ba24a41685a04d2411e2f0e8564bf5bf3280cb6d75d0b910d06c73a625cd56646eebff14fcff81411c055921cdfb4c0" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 192) #3 +depends_on:1 +4:exp:1:hex:"49a10569d87a790d34bcc3c8fd77d075a1cef9eff337e8929b51bdb8d6c5df3ad31045684fd1dabb1fe6f052fc9886384fe43c0a7abc7adca043d35e":hex:"34d6ad434a436a690e7644f0dc2207131148192ceb2e91b6":hex:"8707328fc5a1721e4d72b23c2b8ca3c30ddd95664ac478aa":hex:"82c8d83a9f5d5639a6a1ce26d244bd30dceb1cc978627e19":hex:"2a53b0b80b29c7d071983b65ba835e4eda66bcfe7b3d90b5":hex:"08e24ccaae3b44b7248b2d735af985dcadb84f74d202bca726de1cd663bb5ea1bb67c669126ac97218a9ca45491df90beb387615474249bba1afd4534be7a74c61fef308f13661ddfcce40f24b410cffb1cc3cbba2c6d20a5e4c4814d44bef07bb697cfcf1e9932e43349376dc04865d" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 192) #4 +depends_on:1 +4:exp:1:hex:"9a4232a59cc579867f8330c288a9218251030c00ebe50c9cd97d6cff6e49ad079df509644ec2ebe3ad4e515654af383da265d7b348dd4b89ddd49cbd":hex:"b4498a32f664d4b489c2b47e67845d2d2bed5096e88f86de":hex:"b8471ee87531817d81ee32578d27fa3a190df33561da7a2d":hex:"2e74194aa62ef911599b37a51fa742817e3a4e6c254ec179":hex:"afc7f13ae55e738cceb976ebdd01698de4d103db797f799b":hex:"340c28cb7cf4c3e143dac3e133de864b1f458c76e3d47f3cbb6845f940be174b8819fc539f42005f4485fddc657f064c34873094e25a9bf7ec341a98cb97014a1d694b1694170ca5a8976e86f6e4e41232f526ec8536facd02394f492fbcc7c298ef0eddb3c5a148399ded7677366cf3" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 192) #5 +depends_on:1 +4:exp:1:hex:"b89744009793d2c118365b1d2f343d6b6c59374b41dbd805e793f27882467c5342015cf968b080a88a15fd6a7be3757b05313528525ab1e2cbd08ffd":hex:"f3c02be0a880e194013c21b09b6703a61a7ccf7a73e8a541":hex:"bca27f10060bb8d16d499b3f6ca05ed8462b51b0b43a1fd7":hex:"eb6fcf75884be9112219d359013f45fcb1959ea971bd0bc8":hex:"50a03bc3652f50cb9ed1167ea70ec1e74f896f81a8090216":hex:"d2a529722365e7ff3e660964eeb27040a0e92a4d19bbe94592cfebad71047414676ca6ca72234f5127f313cb7f5be613b44d989fe141c9a0ec1f0b4d83c36e744cfb1c72c32a02b68c21d28832da008c57664046255ef18488ed750ec5e73b18eead939f932d2809f12939670c3c1033" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 192) #6 +depends_on:1 +4:exp:1:hex:"6d2918c15be7871cad99dc9e06f73253ef905d9705c4e4ec38664043b04f9a150fe5953bfa7aebd926be162b7edd72fdc14ff97e67dae6257ad654f4":hex:"489243eaac215f76a573b92f0709d116bd3c817eb95c2c39":hex:"0a84cad7a1cd21a5afe6557d7d2875d9c62183cbbf49a123":hex:"0c14578ac9504902cb9aa654086246d113039f926a87b325":hex:"1aaab1e3a29e144cec825d29c3f42dc945cf2772ed30cb5b":hex:"33438ba4edd0c38db99f2b6a50b35dd89aecb3491990ec4e60460bb32eb0186ff9fdc973b1b0df23ae65da31b8af5a37a69f81ab3e577a4c2c31e51cfcc4e844b044fb597e937524f59a0019ad5120c460329c982fc93e8e7a4b4e1de5619103b23a7a579633fc925d147d8fb856a277" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 192) #7 +depends_on:1 +4:exp:1:hex:"1330c4aef54ff84387e0372f7c8d273cecf0af2ceb32ef6edb6a4f1ace802f3b95fa69cf578e2cda1d6060ec2554eb3152507387f325d8e26009bd80":hex:"89d7bf8f5754cedc2e1a249f693e29276170f62c29c5edae":hex:"a6b58f33d57570f4df05bbfb792a00087d331e17417e09ef":hex:"f57fc701e4f8f5cc2181b5357824f932f6e07679ec0d3cc7":hex:"586c4e8c5769156cbb54c025fb01aad0b61aa6238c231656":hex:"0bcb6ad4f2acefb549c46271d5a4ed41d7decc095137e2044b60273388c6c6d79cb89016abcad1d6a138621720b71fc11ef82fae04026e08926e94042694a0c008f99281e03da580fbb6543aca2b4596d39699b97f1fe65ec60a70b88770eb825b716a10ce41383f31db596079a9d54e" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 192) #8 +depends_on:1 +4:exp:1:hex:"3f0564b9ceee32c8944c8f2bc4b4d2179b38acc880bdb91eed466b881e2cc21df77bc3901ab5ce5ecf029a066784503f80d1857979b09c4563944433":hex:"5d54fc715556c20f5b2d01d6b0992f1c596e5ad77f81da75":hex:"35cb6d07862fbab4f50038097cb463aadf14e519c8834651":hex:"abb21e501e85ad1edc66108e3b88380fddf810b10b883317":hex:"3c690cdd997dfa9c5677bee976fa93cac21f5bbf382f7f53":hex:"bae872c9d221b1531f85c15f466b7a3af3fa9c9c6b72bb8f5dad77f3d12df52d10347ba5d6504cd0a285c3be578bb67f0a9f0137463dc01cdcb847e7853c5db4cbb6a115ebff7b80db0406baccb0e3e68a4a4a95364c2da29466e160fece7b8ddb65dfab000c66cc8109380a601d5ed9" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 192) #9 +depends_on:1 +4:exp:1:hex:"115c973d6df41ead464e22572dbe0761dcdb9aad930b2e55a5558075fb7c51c94efc5f8fe5dfe24d30175a89f1bbcf146037a07b324f572d0d4c27e4":hex:"d3079ee3a3c9b2d69ee0fd316a6448bc7d8e3b730948c46d":hex:"2348ee87bd5a3bb45d51a7b6a109043a9b6ee3db011dda28":hex:"937fe1a7a790754bff99ad51782e8ef5b4928d0057b0c380":hex:"3e89899f4aad241a9189ffa127c87c15b5e3bcfd80bc316d":hex:"0ffc883aa19b3cbdeb39039fd3760160a93cd663b8b358e9fbb6300df164689303ee5f2489ab4ab2d522f6a33c93350eab553a2499b15f8ca198303ff45e946a06d8a40959f33a759c5381b3a59da22e68032abf3da3da6aadb410cb41f54b3146ce57f9bb5d28bc823e3e03c0294794" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 192) #10 +depends_on:1 +4:exp:1:hex:"c28541425a7cf33e29adaa91f326f216de89976031977f104f44fcbcdcf4579337434613801fe4661642392db29f15f0924566e72b596b23ff7b18d5":hex:"44650a29972aa8521d6fb9dffeb15c00903a283f20ea9914":hex:"43cf4de0276483be1382f3cecc6a803551a40602584cd84b":hex:"03eaa10612895db8f66d50a2210d73d1f563c3ca929d9f54":hex:"8d2b20abc4e8890c772bcaa05cb7b3eb5025ac4cacb5f7ce":hex:"aed27ff8eb54a7d2787e73ed2a51877c1250c0d4eaf10aaddb30409624289a9b7742cdebba54218c7c448b57f209182e214014cd180916a8c125ad438af2e5f5ca5b00f9cf063f0c307560ed4378382b4572b97088f8d24e0bdf0fc3489f64074f1155fbb1163b54c93098b841257c30" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 192) #11 +depends_on:1 +4:exp:1:hex:"dfa52082afb4dd137cb5209f6771f04eda25794280983ba1d8cd2f3d7f9dee556ac26d8a5a368d29096ed643089b65e9ab17b5f58ec816570499fbff":hex:"16ccfd20408082829aaf8a818885164581c9a1bd09e9fc12":hex:"abe13d12a9f0133bdebe14785dfef5f08a133a6cb5c26a92":hex:"485dad7804de594356cf3c571d5f22263c0b7cbd4dca1f1b":hex:"5961f8177b6015ae0119d22e0a45a4aa1bcdc580f7e7f975":hex:"ee48e57f1b5bd72c99c911d3353952c2c143689c3cd9b474a46e4ada83811efc67f2557d323723526809825aa338a80e833c95297d6b16490db633ac1f1648071c3ad4cdcea056c41b4eb157ffc83c3454b0cf001f1e01c31e48a61587381e293e6cff97270c1f157b069df3e591c2f9" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 192) #12 +depends_on:1 +4:exp:1:hex:"95f3a1aeacd07218a2ccee44c807f790e568e0032a42fdc7c8dc9a71f76bd725aa909ddbdf5457f1dc4e69746426a9c56fbec603867633ee36a7fe62":hex:"658b7326cf6adbf7208d37cd69547805bc3f58fdd874e143":hex:"d44350c7a668e64873ff97c31d79cb23b0f1620aed7c9d23":hex:"dfefff80f10c3143b82de3392c395ab94ac8a2f4c0a30048":hex:"a6d21a762aaaddcdbae9b9ecefbcb3149d514c94fe83eb21":hex:"4f5e544491b72b84a0d0532d7f9ce01ec2de6a05ab5056fc75d8f73bbcac5ffc38e20745d0e8aa1eacdefea6dcbb92475b5cf9ce0a617e5603b7b9fe34f4f4cb04ade2db35cce1fd315140e3e4ab8472216c7cfdaf004181351f210b397c3147dcd279f6fc2ebd96050e996f77ad6ba1" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 192) #13 +depends_on:1 +4:exp:1:hex:"29a1897d6ea5de66e551f8c106f601e421ddd940812530df00f634682f249aebdaf86938c895c11f9fcb0bd1fcdb183b4f8cf86b3429a5372caafe1d":hex:"d655a179edaf4b8381a9f6a332ed5b754dbf34f650d19867":hex:"31c87be686b6f90f3d1b0ea90c541e16f3430292a5c4755f":hex:"ed49403700cebec30d1057503be7baacbeb45bcdfd9a43a2":hex:"952763380af3243c6c327f23cb74f8368919e0b6b9c25934":hex:"fb29067bdb23c0f0153932523edf32d0e3c18e46616e07f39a4b78091eca90349f636ffcf26b68a4cd0902431f2ada91bcc86dc223db4aa7a42e7cb57a852095704a27f9f07962880a50d2ce16c125be1e8d4f54a0cc5eaf63150c32408db6f39b22fc93b853caaba9e49581f13a8815" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-224, 192, 192) #14 +depends_on:1 +4:exp:1:hex:"387e31bcfffa51323a92d90713b438a1f4ded69707be3aa517e1e72d448abbdf0a17989b3de7c43c621e904f52db52ad823daabff9c10b3fca93acfa":hex:"e08fff320a493d70ea4cc85a4cc604664a0deec8f6c7666d":hex:"969cafc33e99964833c4d0f88f906f5429b5daa552f53bf0":hex:"8d6e6f05301ef5cefba752f3d0ef58a25775d6b69f6c15a4":hex:"72292aaa69fbef6f010fa4d5bb63d6d7a595395d79a8c110":hex:"77ead908484044482da529f9a6f4ca6e6d8d49954d2e2d5c7dc455e03bebf484021673727bbc40adc8812600201b8c2de8e658191422b80d23502329c84c0ca061b212952fdb2ecf3106dd20e6455f1f231e1dad1cfbf2fa019dfe9c162a670ae20b252ae2e5a4ca0eaae1c679a7fd3b" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 0) #0 +depends_on:1 +4:exp:2:hex:"06032cd5eed33f39265f49ecb142c511da9aff2af71203bffaf34a9ca5bd9c0d0e66f71edc43e42a45ad3c6fc6cdc4df01920a4e669ed3a85ae8a33b35a74ad7fb2a6bb4cf395ce00334a9c9a5a5d552":hex:"":hex:"":hex:"":hex:"":hex:"76fc79fe9b50beccc991a11b5635783a83536add03c157fb30645e611c2898bb2b1bc215000209208cd506cb28da2a51bdb03826aaf2bd2335d576d519160842e7158ad0949d1a9ec3e66ea1b1a064b005de914eac2e9d4f2d72a8616a80225422918250ff66a41bd2f864a6a38cc5b6499dc43f7f2bd09e1e0f8f5885935124" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 0) #1 +depends_on:1 +4:exp:2:hex:"aadcf337788bb8ac01976640726bc51635d417777fe6939eded9ccc8a378c76a9ccc9d80c89ac55a8cfe0f99942f5a4d03a57792547e0c98ea1776e4ba80c007346296a56a270a35fd9ea2845c7e81e2":hex:"":hex:"":hex:"":hex:"":hex:"17d09f40a43771f4a2f0db327df637dea972bfff30c98ebc8842dc7a9e3d681c61902f71bffaf5093607fbfba9674a70d048e562ee88f027f630a78522ec6f706bb44ae130e05c8d7eac668bf6980d99b4c0242946452399cb032cc6f9fd96284709bd2fa565b9eb9f2004be6c9ea9ff9128c3f93b60dc30c5fc8587a10de68c" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 0) #2 +depends_on:1 +4:exp:2:hex:"62cda441dd802c7652c00b99cac3652a64fc75388dc9adcf763530ac31df92145fdc897a0c1c482204ef07e0805c014bbd9bbf717467bf4b5db2aa344dd0d90997c8201b2265f4451270128f5ac05a1a":hex:"":hex:"":hex:"":hex:"":hex:"7e41f9647a5e6750eb8acf13a02f23f3be77611e51992cedb6602c314531aff2a6e4c557da0777d4e85faefcb143f1a92e0dbac8de8b885ced62a124f0b10620f1409ae87e228994b830eca638ccdceedd3fcd07d024b646704f44d5d9c4c3a7b705f37104b45b9cfc2d933ae43c12f53e3e6f798c51be5f640115d45cf919a4" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 0) #3 +depends_on:1 +4:exp:2:hex:"6bdc6ca8eef0e3533abd02580ebbc8a92f382c5b1c8e3eaa12566ecfb90389a38f8481cc7735827477e0e4acb7f4a0fa72eca6f1560720e6bd1ff0152c12eeff1f959462fd62c72b7dde96abcb7f79fb":hex:"":hex:"":hex:"":hex:"":hex:"d5a2e2f254b5ae65590d4fd1ff5c758e425be4bacdeede7989669f0a22d34274fdfc2bf87135e30abdae2691629c2f6f425bd4e119904d4785ecd9328f15259563e5a71f915ec0c02b66655471067b01016fdf934a47b017e07c21332641400bbe5719050dba22c020b9b2d2cdb933dbc70f76fec4b1d83980fd1a13c4565836" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 0) #4 +depends_on:1 +4:exp:2:hex:"096ef37294d369face1add3eb8b425895e921626495705c5a03ee566b34158ec6e2e0825534d2989715cc85956e0148d1b4f7125f472c253837fa787d5acf0382a3b89c3f41c211d263052402dcc62c5":hex:"":hex:"":hex:"":hex:"":hex:"4541f24f759b5f2ac2b57b51125077cc740b3859a719a9bab1196e6c0ca2bd057af9d3892386a1813fc8875d8d364f15e7fd69d1cc6659470415278164df656295ba9cfcee79f6cbe26ee136e6b45ec224ad379c6079b10a2e0cb5f7f785ef0ab7a7c3fcd9cb6506054d20e2f3ec610cbba9b045a248af56e4f6d3f0c8d96a23" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 0) #5 +depends_on:1 +4:exp:2:hex:"a7dccdd431ae5726b83585b54eae4108f7b7a25c70187c0acbb94c96cc277aa894c8f4b8e195a47356a89a50d1389ab551733eee2e922f4055e53939e222e71fae730eb037443db2c7679708abb86a65":hex:"":hex:"":hex:"":hex:"":hex:"99ba2691a622afecc9472418e6a8f9f1cdc1e3583c3bc7a2a650a1ab79dcbccbd656636c573179276e782569420c97438c06be898867f628b1c01eb570263d2c0f09c7aab536f6fba7df6aad19e05c236b645674667c03d1b6a04d7fc11177fe78933b309679f5bf26a4632b9a13e314c4bf4532428d3d95c689002b6dc1fbb1" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 0) #6 +depends_on:1 +4:exp:2:hex:"c286425ecf543a49bcc9196b0db1a80bc54e4948adba6f41712a350a02891fa6957a659a4ec2e0b7ad185483c220fd6108c2129813eea0776fba72788fdf2718759cc3c4207fa20a5fe23ac6e32cc28e":hex:"":hex:"":hex:"":hex:"":hex:"8e1020a4fd84c99e0fc7e3f7ce48de5ed9ec9a5c2ccd624dbe6f30e2f688a31dc55957630357a5d48ca2a456241a28bfb16d8bb000877697a7ce24d9ad4d22b0c15117996f1f270b94f46d7a9bdfa7608fa1dd849177a9b8049e51b6b7a2742623854a1fddb5efc447eed1ea1aed6f02b4b2754ecf71ea0509da2e54f524a7e7" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 0) #7 +depends_on:1 +4:exp:2:hex:"02818bd7c1ec456ace55beeba99f646a6d3aa0ea78356ea726b763ff0dd2d656c482687d508c9b5c2a75f7ce390014e8cf319bfa63980e3cb997fd28771bb5614e3acb1149ba45c133ffbbab17433193":hex:"":hex:"":hex:"":hex:"":hex:"19a231ff26c1865ce75d7a7185c30dd0b333126433d0c8cbf1be0d2b384d4eb3a8aff03540fbfa5f5496521a4e4a64071b44c78bd0b7e68fac9e5695c5c13fd3b9dbe7f7739781a4c8f0b980f1b17d99bce17ceb52b56866ae02456ffef83399c8cf7826f3c45c8a19315890919d20f40fc4e18d07e9c8ccd16c3327b5988f71" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 0) #8 +depends_on:1 +4:exp:2:hex:"77a5c86d99be7bc2502870f4025f9f7563e9174ec67c5f481f21fcf2b41cae4bed044ad72ee822506a6d0b1211502967778100749f01a4d35c3b4a958aafe296877e0acafd089f50bc7797a42a33ab71":hex:"":hex:"":hex:"":hex:"":hex:"831a4da566f46289904893ef1cc1cd4ad19ee48f3857e2b69e936d10afbdc29822e85d02663d346ef3e09a848b1d9cc04f4c4c6e3b3b0e56a034e2334d34ca08f8097be307ba41d020bc94f8c1937fe85644eeb5592c2b5a2138f7ded9a5b44b200c8b5beb27597c790f94d660eb61e8248391edc3ae2d77656cbe8354275b13" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 0) #9 +depends_on:1 +4:exp:2:hex:"0ea458cff8bfd1dd8b1addcba9c01317d53039e533104e32f96e7d342e6c7b9b935a4b66fc74c2a48757a99c399e64e36c5f3708e7b714c4ed139b4fa9e8c763af01773484005109a85e33653bb0ce98":hex:"":hex:"":hex:"":hex:"":hex:"373a37af84fddec13645a9768d6a785ae5a2589d64cd9b37980dde2541499210c4f408335de1d585349064f3f53a2b4c5ec6dc2a09591f99ad9fad528ac83474164b45497bf167f81e66fa08463ffea917f6891e48f149fafc20622bb1172f34886feb45c26fd446a4a4e2891b4bc594186896141aaaeeb301b49e7c1a26fec7" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 0) #10 +depends_on:1 +4:exp:2:hex:"bfb68be4ce1756d25bdfad5e0c2f8bec29360901cc4da51d423d1591cc57e1ba98afe4bd194c143e099680c504cceaabb97caf210e82498c3408790d41c320dd4a72007778389b44b7bc3c1c4b8c53f8":hex:"":hex:"":hex:"":hex:"":hex:"409e0aa949fb3b38231bf8732e7959e943a338ea399026b744df15cbfeff8d71b3da023dcce059a88cf0d4b7475f628e4764c8bef13c70cfbbbb6da2a18aabcad919db09d04fc59765edb165147c88dd473a0f3c5ee19237ca955697e001ba654c5ee0bd26761b49333154426bc63286298a8be634fe0d72cfdeef0f3fc48eca" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 0) #11 +depends_on:1 +4:exp:2:hex:"4f6880a64610004463031d67d7924fa446c39138d4d41007e8df3d65691a93676b33b2c13600f4b1df6ca3d1960e8dd457b87b8c8f48312b5333d43b367730c0a5ad4725a16778fcb53fe136d136cbfd":hex:"":hex:"":hex:"":hex:"":hex:"73d0f324ed186e2ad06bd1800e262bdbda79ba54e626761bd60f74f43e3bb62958ec1e2f1d940af163e1cadc124e7ebaba2f72e67efd746c7f6d0cad53ef03d859d93cff778a32ee5be172fe7fdbdc232ded360d704a6fa0f70bebe942e56478345492f49dc5c6fc346b88a58947ad250e688e8c626fe1efe7624620e571976e" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 0) #12 +depends_on:1 +4:exp:2:hex:"aae352e111843219cae8f70e7b8f6eb9bb53d246cbec1e4f07d42757143295b4b84485dccd1bf93210e322eafcbebcd9f9237f00d744d8fbff21b9d0043c258e8731817e6a5fb7b4bf5011680e5bc642":hex:"":hex:"":hex:"":hex:"":hex:"cfb28b93522c7d61d8d3ce3f080e435e4c83c7e13a9dab788db8fef0407267a14fbc9324e090e24df5491fedfa81116869983938d4d4d7324a310c3af33a6f7938f602c5e4e63f1771cdaabdab0782b5affb54eb53047c109a9606739dd0065bd21eca33132986554878354f5f9f852e674dd690163b0ff74c7a25e6bae8ce39" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 0) #13 +depends_on:1 +4:exp:2:hex:"589e79e339b7d2a1b879f0b0e1a7d1ad2474eaa8025b070f1ffa877b7124d4ff0961ed64dbd62065d96e75de6d2ff9d6e928388d3af48c2968527a4d2f9c2626fbc3f3f5a5d84e0583ab6f78e7f8b081":hex:"":hex:"":hex:"":hex:"":hex:"fce6ced1ecf474d181ab331f79c3d2cc8a768ec2818de5b3fc7cf418322716d6a6853733561a497c0c25cb288d2c9fcfbca891bafd5a834c85f3603f402acf1a7b1ea92db847ed5c252a862ad4ab5e259715f1fc81da67f5230bf8be50ee8069758095f7d0e559e03f2c6072290e61794458437609e473eb66580cddaad19b71" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 0) #14 +depends_on:1 +4:exp:2:hex:"714277d408ad87fde317f0a94732fce62f1352bdc90936673b4f1daa0925aa26d16582a99f23010b4248b88d86485419bd9fc7cb2fd5063b2c3c0c4f346ad2e3879371a9c805e59b9f2cd2cc2a40894f":hex:"":hex:"":hex:"":hex:"":hex:"62ef7a431288252e0d736c1d4e36cc9ac37107dcd0d0e971a22444a4adae73a41eff0b11c8625e118dbc9226142fd0a6aa10ac9b190919bda44e7248d6c88874612abd77fb3716ea515a2d563237c446e2a282e7c3b0a3aef27d3427cc7d0a7d38714659c3401dbc91d3595159318ebca01ae7d7fd1c89f6ad6b604173b0c744" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 256) #0 +depends_on:1 +4:exp:2:hex:"05ac9fc4c62a02e3f90840da5616218c6de5743d66b8e0fbf833759c5928b53d2b89a17904922ed8f017a630448485452791126b8b52ee1fd9392a0a13e0083bed4186dc649b739607ac70ec8dcecf9b":hex:"":hex:"43bac13bae715092cf7eb280a2e10a962faf7233c41412f69bc74a35a584e54c":hex:"3f2fed4b68d506ecefa21f3f5bb907beb0f17dbc30f6ffbba5e5861408c53a1e":hex:"529030df50f410985fde068df82b935ec23d839cb4b269414c0ede6cffea5b68":hex:"02ddff5173da2fcffa10215b030d660d61179e61ecc22609b1151a75f1cbcbb4363c3a89299b4b63aca5e581e73c860491010aa35de3337cc6c09ebec8c91a6287586f3a74d9694b462d2720ea2e11bbd02af33adefb4a16e6b370fa0effd57d607547bdcfbb7831f54de7073ad2a7da987a0016a82fa958779a168674b56524" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 256) #1 +depends_on:1 +4:exp:2:hex:"1bea3296f24e9242b96ed00648ac6255007c91f7c1a5088b2482c28c834942bf71073136a5cc1eb5b5fa09e1790a0bedd714329f3fbea1df9d0b0b0d88dfe3774beb63d011935923d048e521b710dc6f":hex:"":hex:"4ef872fd211a426ea1085ab39eb220cc698fdfeabe49b8835d620ab7885de7a4":hex:"d74d1669e89875852d9ccbf11c20fe3c13a621ebcb3f7edeea39a2b3379fdcf5":hex:"0c8aa67ca310bd8e58c16aba35880f747266dbf624e88ec8f9ee9be5d08fdeb1":hex:"ce95b98f13adcdf7a32aa34709d6e02f658ae498d2ab01ce920f69e7e42c4be1d005acf0ca6b17891dfafc620dd4cd3894f8492a5c846089b9b452483eb0b91f3649ec0b6f98d1aaabc2e42cd39c2b25081b85ab50cb723007a0fd83550f32c210b7c4150b5a6bb3b0c9e3c971a09d43acb48e410a77f824b957092aa8ef98bc" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 256) #2 +depends_on:1 +4:exp:2:hex:"a7ea449b49db48601fc3a3d5d77081fab092b8d420ed1b266f704f94352dd726d11a159b60af8d20a0e37d27e6c74aa350916ab47e8cb5dc843f9fba80639103711f86be8e3aa94f8a64a3fe0e6e5b35":hex:"":hex:"e2bb6768120555e7b9e0d573537a82f8f32f54560e1050b6abb1588fb3441e66":hex:"a50cec9d1ecddb2c163d24019e81c31a2b350ccd3ad8181fd31bb8d1f64fa50e":hex:"591dbbd48b51abced67f9c6269cf0133cd3dcbb5cfafcb6ef758569c555a5773":hex:"0a464abcc8685158372d544635b953fcb1d3821c30aaa93982f9b788935f00f88115aad61d5cee003b3d1cb50f3e961a501e2dd0fc7e1724778b184a4bdf9f64e110dda7446e5544a30bd49a400ea1a5411800e1edfeea349323618afc5dc5782dc4b71d2da4d6a4785f8dd346feb9c8740ffd26bf644e3e4323ff24c30b9f10" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 256) #3 +depends_on:1 +4:exp:2:hex:"14683ec508a29d7812e0f04a3e9d87897000dc07b4fbcfda58eb7cdabc492e58b2243e744eb980b3ece25ce76383fd4618590e0ef4ee2bdae462f76d9324b3002559f74c370cfccf96a571d6955703a7":hex:"":hex:"9ea3ccca1e8d791d22fcda621fc4d51b882df32d94ea8f20ee449313e6909b78":hex:"16366a578b5ea4d0cb547790ef5b4fd45d7cd845bc8a7c45e99419c8737debb4":hex:"a68caa29a53f1ba857e484d095805dc319fe6963e4c4daaf355f722eba746b92":hex:"c4e7532ee816789c2d3da9ff9f4b37139a8515dbf8f9e1d0bf00c12addd79ebbd76236f75f2aa705a09f7955038ebff0d566911c5ea13214e2c2eeb46d23ad86a33b60f7b9448d63eec3e1d59f48b39552857447dc5d7944667a230e3dbfa30ca322f6eacaf7536a286706a627c5083c32de0658b9073857c30fb1d86eb8ad1b" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 256) #4 +depends_on:1 +4:exp:2:hex:"fa261fb230e2822458532ca2d5c39758750e6819a6fcebef10579ba995096959564e1c9fbcb12878df2bd49202cbf821bf7de29e99e7f0e1b9f96f3b1902fb4049c8c6234d20de8316ebe66d97725457":hex:"":hex:"8b7326621f6afbd44a726de48d03bcc5331f7306026c229ea9523497fbeaa88d":hex:"33b00b31623d6160c4c6740363a96481be14b19bc47be95641227284c366922a":hex:"2d812c8203575790ad6b6f2ed91a49d57460de779a3e881bef3be12e8766dc91":hex:"5574e0b4efc17e8ce136e592beabfe32551072bddd740929e698467b40b3991f028a22c760f7034853cc53007e3793e3c4a600d9e9d94528f8dc09aeba86146cdde2b7f71255ae0efc529b49be2205979dba6525bfe155e8819e8e2aeeaa285704242da90b4c4535101cc47d94b0e388a1b2e63ad0cbe158b9e1bbae9cc0007c" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 256) #5 +depends_on:1 +4:exp:2:hex:"61f1471ced56aa04c57e1b512307d4cb92497d9592d7e9e35356e99d585cab1b84714e960c403a4fac06b2828cc564d97bf97db3c102edc81596d4757045fe6bdc008f35792fc6290b77d889c09c33a8":hex:"":hex:"5b8bdc41f76d98cfa71ed976ea3994706375c8841adb8b6b3b6418e3132e8832":hex:"94c8a8fdf38a6ccb8571c89420d899adab169214bb0dfcd43a04622e289935b2":hex:"8a4b46e0a7a55907365f82d4ab9376509bd44728cab8cbafb0da901012ad8dcd":hex:"933eb159a6af7455b60e40586c064f05f1970f564281b1ebc4662701ac1f299e4eb908c4afcb2e065191281ab576f684aefedd6904bad04d96bd93c0516c62a496c3073a0cda0676a11cc08866b0cc74f62cb9d3db48673b2c3fbeada69f922b4b795ccba22df12ef7125909381f7d681f6b9caba02fb913c5437b98c040c576" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 256) #6 +depends_on:1 +4:exp:2:hex:"a1d5bb7d70621dee6b668b28c56d5610c2f8ced30284cc3e0e48de331af0506288a49e3e54c5ea54c98b95de81bcc807b4e2426e98f6eed97a6cdf690a89ee109e84c3dca16c883c26fa4ac671638d8d":hex:"":hex:"5bd1e086ed228cfd8b55c1731fea40c3a63d022599ca2da4bb23118f4821ba62":hex:"b754b53ac226e8ebe47a3d31496ec822de06fca2e7ef5bf1dec6c83d05368ec3":hex:"fa7e76b2805d90b3d89fff545010d84f67aa3a2c9eb2ba232e75f4d53267dac3":hex:"df6b2460688fa537df3ddfe5575fca5eb8abad56cbc4e5a618a2b4a7daf6e215c3a497974c502f9d0ec35de3fc2ea5d4f10de9b2aee66dcc7e7ae6357983095959b817f0383e3030771bd2ed97406acf78a1a4a5f30fa0992289c9202e69e3eb1eabe227c11409ff430f6dfca1a923a8b17bc4b87e908007f5e9759c41482b01" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 256) #7 +depends_on:1 +4:exp:2:hex:"68f21d14525d56233c7e263482d344c388a840103a77fb20ac60ce463cabdc7959fa80ae570f3e0c60ac7e2578cec3cb7584b4166530442f06e241dd904f562167e2fdae3247ab853a4a9d4884a5fa46":hex:"":hex:"f6a5482f139045c5389c9246d772c782c4ebf79c3a84b5cf779f458a69a52914":hex:"9d37b1ce99f8079993ddf0bd54bab218016685b22655a678ce4300105f3a45b7":hex:"4c97c67026ff43c2ee730e7b2ce8cce4794fd0588deb16185fa6792ddd0d46de":hex:"e5f8874be0a8345aabf2f829a7c06bb40e60869508c2bdef071d73692c0265f6a5bf9ca6cf47d75cbd9df88b9cb236cdfce37d2fd4913f177dbd41887dae116edfbdad4fd6e4c1a51aad9f9d6afe7fcafced45a4913d742a7ec00fd6170d63a68f986d8c2357765e4d38835d3fea301afab43a50bd9edd2dec6a979732b25292" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 256) #8 +depends_on:1 +4:exp:2:hex:"7988146cbf9598d74cf88dc314af6b25c3f7de96ae9892fb0756318cea01987e280bc1ae9bfdf8a73c2df07b82a32c9c2bbc607085232e5e12ccf7c0c19a5dc80e45eb4b3d4a147fe941fa6c13333474":hex:"":hex:"f3f5c1bb5da59252861753c4980c23f72be1732f899fdea7183b5c024c858a12":hex:"44d0cfc4f56ab38fa465a659151b3461b65b2462d1ad6b3463b5cf96ad9dc577":hex:"34fb9a3cdacc834ff6241474c4f6e73ed6f5d9ea0337ab2b7468f01ad8a26e93":hex:"4caec9e760c4d468e47613fe50de4a366ae20ba76793744a4e14433ea4de79dc188601eb86c803b094641ab2337b99d459d37decc7d27473057be45ba848868ee0fb5f1cf303d2fcd0b3e0c36f65a65f81b3fee8778a1f22302e25dfe34e6d587fa8864e621121880f7cd55f350531c4ce0530099eec2d0059706dcd657708d9" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 256) #9 +depends_on:1 +4:exp:2:hex:"1c974c953fa2a057c9fc9409a6843f6f839aa544bca4fa11e48afd77931d4656ed7c08285464af7a5dbdc10b944a127078146ad135acb836360d36afc50653dcc36c21662da2a6f6ae05222e75f34000":hex:"":hex:"263c4984c238ded333c86472866353817379502157172cfa51371d82b1efd7b5":hex:"79b591529f9a26a0d7c8f8fd64e354b0c134ef1f757e43f9463b3dbb7a3da1ab":hex:"7d8f7204b0b5401ddce9e88dcf5facb9a44660a9f5f1c862748e7269c29f7964":hex:"72e2ca257b9edaf59b50e05a144f56fb517832fb9ad3489b1e664e3d5412cbf6b2883e891703b2e73aff9ab56da1009fcdef010ab4cdab996795c8f7c47fb1192bb160353997ad39d7d5fd0e2efc9103a7c3f158246afd53fe53ca6782f809698ef5f1f0d85536780a3fd6a8bafa475891c09213088bd1a3dc169257c34a517a" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 256) #10 +depends_on:1 +4:exp:2:hex:"56216d71984a77154569122c777ce57e1d101a6025b28163a25971d39c1c5d0f5cd148ba7e54f4975ac8e3e0f9b5d06a3580f8ca974626c77259c6e37383cb8150b4d0ab0b30e377bed0dc9d1ff1a1bf":hex:"":hex:"15633e3a62b21594d49d3d26c4c3509f96011d4dbb9d48bbbea1b61c453f6abe":hex:"6068eaca85c14165b101bb3e8c387c41d3f298918c7f3da2a28786ab0738a6fc":hex:"e34f92d2b6aeeeea4ff49bfe7e4b1f462eabb853f0e86fbae0e8b3d51409ce49":hex:"587fdb856abc19ede9078797ecb44099e07aadcd83acdcb2b090601d653f4a14c68ab2ebdda63578c5633a825bae4c0c818f89aac58d30fd7b0b5d459a0f3d86fcad78f4bb14dfff08ad81e4ea9f487cb426e91d6e80dfed436ba38fce8d6f21ca2151c92dd5c323b077d6139c66395558f0537026c4a028affa271ef4e7ea23" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 256) #11 +depends_on:1 +4:exp:2:hex:"83eb48bedc1e9294866ab8e5322ef83f6f271f8188e8fdabe5817788bd31570dd6ed90bc692237f132441ede857a6629a4e5e127f992bd5ca79ee56bb8a9bccf74c21814bfaf97ffd052211e802e12e4":hex:"":hex:"84136e403d9ed7f4515c188213abcfaca35715fa55de6d734aec63c4606a68f1":hex:"fe9d8ef26e2d2e94b99943148392b2b33a581b4b97a8d7a0ecd41660a61dd10b":hex:"594dad642183ce2cdc9494d6bcb358e0e7b767c5a0fa33e456971b8754a9abd5":hex:"86715d43ba95fbbca9b7193ea977a820f4b61ba1b7e3b8d161b6c51b09dfd5040d94c04338b14d97ed25af577186b36ae7251a486c8a2d24a35e84a95c89d669d49e307b4a368b72164135ac54d020a970a180dfbed135d2c86f01270846d5301bd73db2c431a8aa10a0a3d03d146e5fafb9a2aa0b4efc80edab06ff3b532236" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 256) #12 +depends_on:1 +4:exp:2:hex:"ba2c94203dab2e6499d8c50dca7b5c34a6b4764834f9816631aa21b9f9c3736167db133bdefb25e395085bceee5a0afcfa8984d16d35302cda35a3a355ab9242ec96fec0652d39282d4a0abf0a80df87":hex:"":hex:"b6fed10255a3fea6772ae1ae6d9f6cbb9bfaa34804e58a5b786f9bc60b348ccd":hex:"445e072244edc716d3528f0e0a20ff0cd8f819c0d031736c8da122748f24d6c6":hex:"1f856e403c4fa035bac9aa81a20e347c7d8b213aab699d69d9d6186a06ac45c1":hex:"79f33fc36b3b47d9ac805bdbbe699909a8d0beb689a8b2723c291bd5bf7f3ce61343d4722a14e4add36312dbb0594910c8828aff1abc159915d498106f9ffb31147478d8c9ef75d1536ba5036506b313f6e85033f8f6fea2a4de817c867a59378c53c70a2f108275daedd415c05b61c4fd5d48c54be9adb9dea6c40a2ec99ee0" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 256) #13 +depends_on:1 +4:exp:2:hex:"0db4c51492db4fe973b4bb1c52a1e873b58fc6bb37a3a4bfc252b03b994495d1a2a3900f169bba3f78a42526c700de6229d5aab356876447e3a20d81c7e3fc6975e2b984180a91493044442999e1ca3a":hex:"":hex:"40b34183b4e72cdff5952b317b3d45943d0fdcfa0527f3563055f7c73ae8f892":hex:"dc94220c99ffb595c7c4d6de8de5a6bb4b38847169e24a557ef6d879ad84149d":hex:"b2376626fd2f5218b3ed4a5609b43aa24d371cd2176ea017c2b99cf868060021":hex:"f0bd6bc4c506d9427a09352d9c1970b146360732841a6323f4cb602c87dedfb5ff7e6964b9144933af3c5c83017ccd6a94bdca467a504564aaa7b452591a16ff6a1e7e94ddc98f9a58016cdcb8caaed6c80671ba48cc81a832d341093dda1d4e5001ec6bf66348b21e3692a13df92538ad572bb2023822072fc95f9590293ffc" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 0, 256) #14 +depends_on:1 +4:exp:2:hex:"593845f0adfeffa7c169f8a610147ae8a08c0072fc0c14c3977d3de0d00b55af9e0eb2507342ee01c02beadee7d077bdaefe591697eab678c52e20013aa424b95cfd217b259757fbe17335563f5b5706":hex:"":hex:"cbb5be0ef9bf0555ee58955c4d971fb9baa6d6070c3f7244a4eb88b48f0793bf":hex:"6dd878394abdc0402146ba07005327c55f4d821bfebca08d04e66824e3760ab4":hex:"ba86a691d6cbf452b1e2fd1dfb5d31ef9ea5b8be92c4988dc5f560733b371f69":hex:"00735cbfafac5df82e5cb28fc619b01e2ba9571dc0023d26f09c37fb37d0e809066165a97e532bf86fa7d148078e865fe1a09e27a6889be1533b459cd9cd229494b5cf4d2abf28c38180278d47281f13820276ec85effb8d45284eb9eef5d179ab4880023ab2bd08ee3f766f990286bf32430c042f5521bbfd0c7ee09e2254d7" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 0) #0 +depends_on:1 +4:exp:2:hex:"fa0ee1fe39c7c390aa94159d0de97564342b591777f3e5f6a4ba2aea342ec840dd0820655cb2ffdb0da9e9310a67c9e5e0629b6d7975ddfa96a399648740e60f1f9557dc58b3d7415f9ba9d4dbb501f6":hex:"f2e58fe60a3afc59dad37595415ffd318ccf69d67780f6fa0797dc9aa43e144c":hex:"":hex:"":hex:"":hex:"f92d4cf99a535b20222a52a68db04c5af6f5ffc7b66a473a37a256bd8d298f9b4aa4af7e8d181e02367903f93bdb744c6c2f3f3472626b40ce9bd6a70e7b8f93992a16a76fab6b5f162568e08ee6c3e804aefd952ddd3acb791c50f2ad69e9a04028a06a9c01d3a62aca2aaf6efe69ed97a016213a2dd642b4886764072d9cbe" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 0) #1 +depends_on:1 +4:exp:2:hex:"cff72f345115376a57f4db8a5c9f64053e7379171a5a1e81e82aad3448d17d44d1e971ec795d098b3dae14ffcbeecfd945ec80f0c00cad0ff0b7616d2a930af3f5cf23cd61be7fbf7c65be0031e93e38":hex:"6ec0c798c240f22740cad7e27b41f5e42dccaf66def3b7f341c4d827294f83c9":hex:"":hex:"":hex:"":hex:"17a7901e2550de088f472518d377cc4cc6979f4a64f4975c74344215e4807a1234eefef99f64cb8abc3fb86209f6fc7ddd03e94f83746c5abe5360cdde4f2525ccf7167e6f0befae05b38fd6089a2ab83719874ce8f670480d5f3ed9bf40538a15aaad112db1618a58b10687b68875f00f139a72bdf043f736e4a320c06efd2c" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 0) #2 +depends_on:1 +4:exp:2:hex:"b7099b06fc7a8a74c58219729db6b0f780d7b4fa307bc3d3f9f22bfb763596a3b8772059a135a6b61da72f375411de269aec4f56ec5e96fbd96048b9a63ac8d047aedbbeea7712e241133b1a357ecfc4":hex:"2ac1bfb24e0b8c6ac2803e89261822b7f72a0320df2b199171b79bcbdb40b719":hex:"":hex:"":hex:"":hex:"0e1f2bfef778f5e5be671ecb4971624ec784ed2732abc4fbb98a8b482fb68737df91fd15acfad2951403ac77c5ca3edffc1e03398ae6cf6ac24a91678db5c7290abc3fa001aa02d50399326f85d2b8942199a1575f6746364740a5910552c639804d7530c0d41339345a58ff0080eccf1711895192a3817a8dc3f00f28cc10cc" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 0) #3 +depends_on:1 +4:exp:2:hex:"7ba02a734c8744b15ef8b4074fe639b32e4431762ab5b7cd4d5df675ea90672b8a424f32108607c8f1f45d97f500ee12d8f02b59b6a3dd276bc69cba68efcf11ab83ead1397afd9841786bd1bb5da97a":hex:"3ad627433f465187c48141e30c2678106091e7a680229a534b851b8d46feb957":hex:"":hex:"":hex:"":hex:"1fb91186ba4b4459d994b4b9f4ca252c7be6294d6cdb5fe56f8ff784d4b190a1c6456e0a41223bbbdf83ed8e7cfbfa765d9d8bc7ea5f4d79ea7eccb4928081a21de4cca36620d6267f55d9a352b76fc0a57375884112c31f65ff28e76d315698c29e6c4c05cb58b0a07ae66143b4abc78b9d25c78b4121e1e45bef1a6c1793e2" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 0) #4 +depends_on:1 +4:exp:2:hex:"9a8865dfe053ae77cb6a9365b88f34eec17ea5cbfb0b1f04d1459e7fa9c4f3cb180c0a74da3ec464df11fac172d1c63275b95108eff1fabe83613e1c4de575e72a5cdc4bb9311dd006f971a052386692":hex:"336372ec82d0d68befad83691966ef6ffc65105388eb2d6eed826c2285037c77":hex:"":hex:"":hex:"":hex:"3c683f6d4f8f5a4018d01633dfee74266aaa68ed6fc649e81b64dfdf5f75e75d5c058d66cf5fd01a4f143a6ff695517a4a43bd3adfd1fb2c28ba9a41063140bedbffdb4d21b1ace1550d59209ec61f1e2dbacb2a9116a79cb1410bf2deca5218080aacd9c68e1d6557721a8913e23f617e30f2e594f61267d5ed81464ee730b2" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 0) #5 +depends_on:1 +4:exp:2:hex:"22c1af2f2a4c885f06988567da9fc90f34f80f6dd5101c281beef497a6a1b2f83fafdecf79a4174801f133131629037bf95a0e4bd24f0e2e9e444f511b7632868ead0d5bb3846771264e03f8ab8ed074":hex:"80327dac486111b8a8b2c8e8381fb2d713a67695c2e660b2b0d4af696cc3e1de":hex:"":hex:"":hex:"":hex:"77a7fea2f35a188f6d1bfdd49b569d8c45e2dd431d35a18c6f432c724f1e33ae92cb89a9cf91519e50705a53199f5b572dc85c1aef8f28fb52dc7986228f66954d54eda84a86962cf25cf765bd9949876349291b1aae5f88fcf4b376912d205add4f53b2770c657946c0d824281f441509153f48356d9d43f8a927e0693db8fc" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 0) #6 +depends_on:1 +4:exp:2:hex:"d0840e3a8d629d5b883d33e053a341b21c674e67e1999f068c497ecfaabfd6f6071de7244ecb2fdf7ab27f2d84aa7b7a1dd1a8b59856c49a388f594c5f42cc2e4a56b3ccb8a65e7066e44c12f4344d50":hex:"90d609527fad96ffe64ab153860346f3d237c8940555ae17b47842d82d3b0943":hex:"":hex:"":hex:"":hex:"7ab28a9b2d3ae999195553e6550cced4c2daccbe7ec9dcbb0d467fabba185b727fbfd9830242cd098f4db3cf4a85e8bf8e8d5974b62b28550922b32ed5bfc1a522b6605cf93bf8d90bdec1c5b9e59c6fc37a817d437068a87254be1f7c4618ada46fbc3a2efb02e44524e21d91be7534cf05fbfd858304b706d6a91ea1cc6ad5" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 0) #7 +depends_on:1 +4:exp:2:hex:"2e2dd56869104492767a59778652831919e1c8b970f84e824ae4116597a0ab7f01c42a7e983641de46c82fd09b4f2f767306507cd3ca7eec667e640d270cfbb033063d97520b6b7e38ff3cea0e79d12b":hex:"bcd9e1508fcc22820a8be07180fea5045367333b569e111b011cd57dc1858765":hex:"":hex:"":hex:"":hex:"b915726c7b8c5dc3975f1a334684b973abf6a9495d930088cf5d071548e4fd29a67b55cc561ed6949ad28150a9fb4307c1fa5f783a7ea872e8d7c7e67ff0c2906081ee915737d813c25be5c30b952a36f393e6baa56ab01adc2b4776ad7b5d036a53659877c7a4e5220a897d6c0799af37beeed91173fbe9c613c3b6b9bb28e5" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 0) #8 +depends_on:1 +4:exp:2:hex:"d1aab0f16bd47a5ccd67c22e094daa3735eae21aa57f0bcd9e053d9d0d545cb8199310dfe1b01265b8c0d2b46d6c7c9ff50cabae4e060f3971096b78e550cda2837a26a693d905db2d992d589b268f44":hex:"625b4b8f4de72ea9cb6f70556322dc2a19d6b2b32de623f557e419a084ba60fd":hex:"":hex:"":hex:"":hex:"987e1fdfe004c619cf1e9034576707eccd849400e19c87a1fef5b0179ec51c42a2f8c45d7942d0023a023c89f188b2634362703985695369863322f58619c50a7385a2dc91fc78f94b59f0131dc2b56a0d7c699d427285da1c104b0ad1739da10d8071c23993787045dc21f0070e1e9aa1658fc8e3add73dac7262e80e0aa2ee" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 0) #9 +depends_on:1 +4:exp:2:hex:"449480eaa100aff6f48dc6286a5a81b9728b084864f78a9da98f606a00a6a41fe53c6c5ac3da9f4726389a03f97bb64073a6d64e1966ae324388dc12c14544e9dc5ae4fcb331e99d350c456ff16f9aa0":hex:"6b8fedc084d8e28d333aef6db3702b6351f0d24e30908cccb63794282655886b":hex:"":hex:"":hex:"":hex:"a06912d362da7eb25598857f6d65344c3e23ec3deb80c6e43158845b95eaeca241c0bbbd67ac385e24693444455cc1c2c08c1134d956b8bc93b28be9c2d3322b3e09252979dfb8d39d04c94f81bebda5c73110605a237b561216bda9ee9bdee1cc0c7728bcc8304682334ca944e467a27a85313fa5395a9c790e35defd2edb12" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 0) #10 +depends_on:1 +4:exp:2:hex:"9a6174166e97aa4981ddf580bc01c96754b9f0ba042750aabfda1cffe56e8581d7512ff6b7db7ce141b2bb01dcd0425e6888b9277e57dc57663d402eba8d03cf56a070dc868e6a128b18040002baf690":hex:"ed75288f23275f9422444da5d3b53ccb3c4ac8acfb659a1e9b7655c2db52f879":hex:"":hex:"":hex:"":hex:"03519dfb2ff88cc2b53eecc48ae2a18ddcf91a5d69d5aefcdda8444e6df790a5240e67b2a4de75b4bb8a31f0f8aeb5e785ffb7a1341bb52fe00a05ee66fa2d44ea9956e055f9ffa6647c3bfe851ab364ade71a0d356de710ddafb7622b1da1bc53fd4d3210407289c68d8aeb346bf15806dbe787e781b94f63da3e1f61b5ac60" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 0) #11 +depends_on:1 +4:exp:2:hex:"9c6ae1002ee1b0add0be563ce50f899da936e13efa620d08c2688c192514763afde7db5160c73044be73e9d4c1b22d86bcc28fd58e397f53f494ad8132df82c5d8c4c22ea0b7139bd81eeba65667bb69":hex:"8fdaaeffd64e53f7b4374d902d441209964e12b65d29afec258e65db6de167ca":hex:"":hex:"":hex:"":hex:"021d938c9b4db780c7d8134aeff1053e5b8843370b8ae9a6749fca7199d809810f1bc8dfa49426470c30c3616f903e35fbacb23420a32f1bee567cc32300f704246ddc0217f236ef52c3ec9e2433ca66f05c25721f7661c43f22c1a125ed5db531bd0836eb435c27eefc7424ce9d845e1d4cc4c503097b4ffca788e674a5cb53" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 0) #12 +depends_on:1 +4:exp:2:hex:"fe96a85b69d46b540918927bb609dc57642eeaefd46bb5da2163a0bc60294b5822195a410d24db45589448dfe979d3fd09cb870879d3f734214f6a4bd2e08c62a2a954bebe559416d8c3551aafe71d6a":hex:"20f698833a4472fd7b78fb9b0c4eb68604f166a2694c4af48dac2b2376790e1e":hex:"":hex:"":hex:"":hex:"d3e96dbe29e1fcb8ed83b19dbfb240e6f41679fbe83853aa71446617e63e5af78cf98b331d15bccb8c673c4e5d5dcec467a1fe26a6cd1696d0c9bc49f78139d051287df7f3ae0dbb4bbf581cb8211931063c3f4612ced53f59d1b4ebb875729139f5d2a7d60642e8f2835eed888b7e3e49c0dffd012cd746abfa3e1c5c2308c6" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 0) #13 +depends_on:1 +4:exp:2:hex:"a4fd693ff0a8af24bcec352d3196549fd0da5ee5d99ca58416ca03ce4c50f38e8cd67f2bf71d4366ce61396642531ff583d2be9a0d74e6a42159ae630acebf4e15271ef7f14f3de14752be0e0e822b11":hex:"368969c15a4849d7593be8b162113b9298a535c148ff668a9e8b147fb3af4eba":hex:"":hex:"":hex:"":hex:"e9188fc0eaec74b2608e21e3a40be94aaf4ae08eb684de8f8bba2d5fd3b073aa5531c938c0fc628da65725c54b5c68bb91d7d326565e96685e0a4e7b220c50e0caf1628edba5bd755b31894f8cb90afa76e88c5eb9e61b4932444c1397dee3e32241a3fb70a3929e49f6da02eea54812abb3d6b5cee18f03af1e0b4958430ab3" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 0) #14 +depends_on:1 +4:exp:2:hex:"254ff5687a6dad3f1d237dc762f58d24ef2e2c084d0a48d26a3dc81e5490cda3f2ec392acca491e03ce47b95963a49fcb8494b1c1f1752fb6f80d732a89b08115857f7cc96e7dff05ebb822706889917":hex:"f806b9b4a56682c61b55cb6a334caf87ffe135adfea6d0c3fc22b39898fbd078":hex:"":hex:"":hex:"":hex:"0e527e00494d55564f9d9b28e7110f9a61ce36c883b5be2dcb055444164cdddd1a9f2731716f22d6ff476ce413c77abfc0e946871d5481345c2e97b4bfdd12ac03df606fc56bdb99ac7b71a69b5b9160373bbec3e9dde477180af454e7acc6bc58dc0afb4281c0de4354c1bf599054e3800c6d60d892858865b5361f50bfca9b" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 256) #0 +depends_on:1 +4:exp:2:hex:"cdb0d9117cc6dbc9ef9dcb06a97579841d72dc18b2d46a1cb61e314012bdf416d0c0d01d156016d0eb6b7e9c7c3c8da88ec6f7d5a8e2e88f43986f70b86e050d07c84b931bcf18e601c5a3eee3064c82":hex:"6f0fb9eab3f9ea7ab0a719bfa879bf0aaed683307fda0c6d73ce018b6e34faaa":hex:"1ab4ca9014fa98a55938316de8ba5a68c629b0741bdd058c4d70c91cda5099b3":hex:"16e2d0721b58d839a122852abd3bf2c942a31c84d82fca74211871880d7162ff":hex:"53686f042a7b087d5d2eca0d2a96de131f275ed7151189f7ca52deaa78b79fb2":hex:"dda04a2ca7b8147af1548f5d086591ca4fd951a345ce52b3cd49d47e84aa31a183e31fbc42a1ff1d95afec7143c8008c97bc2a9c091df0a763848391f68cb4a366ad89857ac725a53b303ddea767be8dc5f605b1b95f6d24c9f06be65a973a089320b3cc42569dcfd4b92b62a993785b0301b3fc452445656fce22664827b88f" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 256) #1 +depends_on:1 +4:exp:2:hex:"3e42348bf76c0559cce9a44704308c85d9c205b676af0ac6ba377a5da12d32449af783973c632a490f03dbb4b4852b1e45718ac567fd2660b91c8f5f1f8f186c58c6284b6968eadc9810b7beeca148a1":hex:"2e51c7a8ac70adc37fc7e40d59a8e5bf8dfd8f7b027c77e6ec648bd0c41a78de":hex:"63a107246a2070739aa4bed6746439d8c2ce678a54fc887c5aba29c502da7ba9":hex:"e4576291b1cde51c5044fdc5375624cebf63333c58c7457ca7490da037a9556e":hex:"b5a3fbd57784b15fd875e0b0c5e59ec5f089829fac51620aa998fff003534d6f":hex:"c624d26087ffb8f39836c067ba37217f1977c47172d5dcb7d40193a1cfe20158b774558cbee8eb6f9c62d629e1bcf70a1439e46c5709ba4c94a006ba94994796e10660d6cb1e150a243f7ba5d35c8572fd96f43c08490131797e86d3ed8467b692f92f668631b1d32862c3dc43bfba686fe72fdd947db2792463e920522eb4bc" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 256) #2 +depends_on:1 +4:exp:2:hex:"b63fdd83c674699ba473faab9c358434771c5fa0348ca0faf7ebd7cf5891826b5fd204e2598d9626edab4158a8cfd95fadea5ba92f8010bb1a6a4b6fae2caa0b384165adf721253afd635d6021f764af":hex:"2a5dfad8494306d9d4648a805c4602216a746ae3493492693a50a86d1ba05c64":hex:"07c69d8d2b8aa1454c5c48083dd41477fda6bfcf0385638379933a60ed2e0a77":hex:"a14e902247a3d6493d3fbc8519518b71a660e5502cf7ecfc796cfaa5b4ee4baa":hex:"60e690e4a1eba14aec5187112a383e9991347fab7bac7cb2a40a52579a0d2718":hex:"792b47b6ed221623bb187d63e3f039c6983d94efd5771dc9b4c40bee65924513485a6332baeda6a96f9bb431f592d73462b61d9d914a72b56fa9d87597426fb246424ebcd7abd51b2eefec8f5b839c0b3c34015342ace296b5f2218fa194b50aea1c89663460292c92c45f112ddbf6b9406f6e7ccee9c47ed2d90a27be5dd73e" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 256) #3 +depends_on:1 +4:exp:2:hex:"dab85f98eaf0cfba013b97de4d9c264ca6fe120366cb83e8b3113c68b34e39d5d05108e1028ae67b4ea63bdc6d75eb881794885a64470744198b7d0bc24472ffe8daf3c7eb219df6ddf180e484fe0aa5":hex:"09fed3822f6f5e5b9e575d31dc215de1607b0dfc927412618c2d8f79166dbaba":hex:"8d74d01b582f70b92f53b43468084e1586d9b36465d333d5faaf6911e62fe40e":hex:"ef7f6b6eb479ab05b3f9ab6dd72eac8b1e86d887f1bcae363cae386d0275a06f":hex:"7442b2a792a6a29559bb8a515d56916ee18200580aa02e1237dd358619382d8f":hex:"49d2cbfa0897b7d961c293c1e572fb26f28e7b956e746f6eda90454c1370a29e25303ceadc7837514dc638553b487ef9487c977c10625409178ad6506d103c487a66655d08659d92a4d5994d1c8ddb28fe60f2e49577d6e80cae1478068c98268f45e6293c9326c7f726ec89601351c0a26fd3a6549f8a41c6f58692c86594c0" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 256) #4 +depends_on:1 +4:exp:2:hex:"0f0aa84ef12e10ae2b279e799c683441862457b9bc25581c2cd3d5b58a5b3246f74f4230c2427a52f01f39e825d250ac5222b26e79f7c3b7066d581185b1a1f6376796f3d67f59d025dd2a7b1886d258":hex:"d02b2f53da48b923c2921e0f75bd7e6139d7030aead5aeebe46c20b9ca47a38a":hex:"d11512457bf3b92d1b1c0923989911f58f74e136b1436f00bad440dd1d6f1209":hex:"54d9ea7d40b7255ef3d0ab16ea9fdf29b9a281920962b5c72d97b0e371b9d816":hex:"601cef261da8864f1e30196c827143e4c363d3fa865b808e9450b13e251d47fa":hex:"e9847cefea3b88062ea63f92dc9e96767ce9202a6e049c98dc1dcbc6d707687bd0e98ed2cc215780c454936292e44a7c6856d664581220b8c8ca1d413a2b81120380bfd0da5ff2bf737b602727709523745c2ced8daef6f47d1e93ef9bc141a135674cba23045e1f99aa78f8cead12eeffff20de2008878b1f806a2652db565a" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 256) #5 +depends_on:1 +4:exp:2:hex:"6a868ce39a3adcd189bd704348ba732936628f083de8208640dbd42731447d4eefdde4e22b376e5e7385e790243506990174f7f456ac06c1d789facc071701f8b60e9accebced73a634a6ad0e1a697d4":hex:"f7285cd5647ff0e2c71a9b54b57f04392641a4bde4a4024fa11c859fecaad713":hex:"5463bb2241d10c970b68c3abc356c0fe5ef87439fc6457c5ee94be0a3fb89834":hex:"3ab62cdbc638c1b2b50533d28f31b1758c3b8435fe24bb6d4740005a73e54ce6":hex:"2dbf4c9123e97177969139f5d06466c272f60d067fefadf326ccc47971115469":hex:"8afce49dccc4ff64c65a83d8c0638bd8e3b7c13c52c3c59d110a8198753e96da512c7e03aeed30918706f3ad3b819e6571cfa87369c179fb9c9bbc88110baa490032a9d41f9931434e80c40ae0051400b7498810d769fb42dddbc7aa19bdf79603172efe9c0f5d1a65372b463a31178cbae581fa287f39c4fbf8434051b7419f" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 256) #6 +depends_on:1 +4:exp:2:hex:"bb6b339eae26072487084ec9e4b53f2f1d4267d205042e74c77fb9ca0591ba50c0e7bf6eb07feccbc494af4098e59d30f47fc60afbeb807236f7974d837335bc0b22288ef09ddfcb684e16b4c36a050b":hex:"34aeec7ed0cae83701b6477709c8654a1114212401dc91cbe7de39d71f0c06e1":hex:"e8071ccd84ac4527e5c6e85b0709ed867776f25ae0e04180dcb7105ecd3e3490":hex:"fbac45b5952200ad7c4232500f2417a1c14723bdd1cc078821bc2fe138b86597":hex:"c4292d7dbef3ba7c18bf46bcf26776add22ab8ee206d6c722665dec6576b1bc0":hex:"228aa2a314fcbfe63089ce953ac457093deaa39dd9ce2a4ece56a6028a476a98129be516d6979eff5587c032cdf4739d7ac712970f600fa781a8e542e399661183e34e4b90c59ec5dc5cad86f91083529d41c77b8f36c5a8e28ba1a548223a02eaed8426f6fe9f349ebec11bc743e767482e3472ec2799c1f530ebdc6c03bc4b" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 256) #7 +depends_on:1 +4:exp:2:hex:"be658e56f80436039e2a9c0a62952dd7d70842244b5ab10f3b8a87d36104e62933c9627455dfde91865aee93e5071147bef24dc9a5aa23003d3825f9b2b00e7dab571ea6ad86415dbd30c0bbdce7b972":hex:"d3a6eb29b180b791984deb056d72c0608a2c9044237aecf100ccb03700064c5e":hex:"047c29e4d1584fa70cb66e2aa148a2aa29837c5eee64dcac60fdba356cdf90bb":hex:"41c4792161b1b00d410cb79cd56bd311a714fb78dc3471c25bdd7479f2e9a952":hex:"cd4936d7bc3ea0e7201bcbefbc908215a97680ca6ce8672360aea600b6564308":hex:"2c25557f6db07db057f56ad5b6dc0427d1a0e825c48c19a526f9a65087c6d1ead7c78363a61616c84f1022653af65173a3f9ec3275f2b0a0d0bc750194673c0eaa6c623cd88abb0c8979baee4cd85bfce2e4a20bfebf2c3be61676563767dfe229e0b7be67ad6fcd116dd0b460708b1b0e5c3d60f3dd8138030404d197375d75" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 256) #8 +depends_on:1 +4:exp:2:hex:"ae537f31a28ca14500e759716bc207983bfeab60b25079fa30b77b8d41244cb9fca9e27d8ab84cf9b9ce491ec5d8cb671eb52777be480f05115ae6370f30159a94d50ffcc64454678ab1d1ac6f166fa7":hex:"8c9cb2b19aa3abe83c8fe7da96e9c11648252653a29dcd5bf0ac334ac587f032":hex:"9cdf6f1a2bc07acd4b0f43b5f2b892a1153e2669f237d257923636094fb40b54":hex:"692d512722de6ba720fd23c8994ac63179b5f7e611addf9cfacd60e06e144a6a":hex:"bbeea7b2bea821f339f494947c0b4bae8056119db69a3cbef21914953729cdef":hex:"c0c4fb7080c0fbe425c1b756fb3a090cb0d08c7027d1bb82ed3b07613e2a757f83a78d42f9d8653954b489f800a5e058ebc4f5a1747526541d8448cb72e2232db20569dc96342c36672c4be625b363b4587f44557e58cedb4597cb57d006fda27e027818ae89e15b4c6382b9e7a4453290ea43163b4f9cae38b1023de6a47f7b" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 256) #9 +depends_on:1 +4:exp:2:hex:"2f8994c949e08862db0204008f55d3561f3e0362df13b9d9a70fda39938f2d331bf3e94ea858160b832fe85d301256f55ecdb1e8fe12260b9bfe12d6e6f161474fa2311e12e39b0beb0fcd92a6737b73":hex:"b46671cf7fa142e7012ed261e1fe86714711c246c7d1c0330fa692141e86d5d1":hex:"3ce9a29f0207d079e6dc81fb830356e555f96a23ea71424972ea9308965786d3":hex:"db950000c0776cc0e049929ce021020adc42d29cd9b5d8f7117fbe6bde3e594f":hex:"fc18ee6dd3dac2306774f0ac36cd789e33462d72a8c75df9057123db33e5f7bc":hex:"8546362cc8af9b78dd6e8eb2c37db96e70708852bfd9380abedc7f324575a167bea18f632f3e19d099cfbf310773f9719eec036d2e09f393a023add8ebdc4fb87af43b2fe6c7eaa4d39f8022ce247aa45fdc84d1b92cacce6eae8252a03ec2ec5330c01f56d113fd2ec3d0240af0afcf13ddde205bb5e7c2d912dcb4aee5dcf3" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 256) #10 +depends_on:1 +4:exp:2:hex:"0c85e31487de1d7ba4a7b998ac56dc42c6dc0eae7bf5c8aaf1e4e78875f5fb47de878f728f73f83dc2a2f550b96c8b972d5ca8af1a70cfdccd015ee3bf0665dd1941fc6a7317b9d0d06658f5744cfbd9":hex:"9aac37bce1a6a81dc7934e23747991e3cf48c55ffe5a57781c41768a35220a01":hex:"db881e6d0dc3b62793d7da5fe5a18e33be9b93f4a63a00a878dfbecf0d383bd2":hex:"f743ce1b72f3de4c901369eed581c626ed3081ca707e6634fdaff46721ce0878":hex:"cd52da3ec8a839c537dacdea8506a3eeee879de388ff5e513322d6d1bb3ff694":hex:"a5bdd57cb8fde6298e7c5e563afcca60dd472eca484bd8c3cc17f3307be09b601744dd3ab9e8a44107c5868824575f850c0f399b280cf198006f83ede8c0b537e9be227fa140b65995ad9dfa1f2303d560c3b7f59bedd93c1282ea263924469411c2653f87fd814c74cb91c148430481d64bad0fec3cbb3dd1f39aa55c36f81b" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 256) #11 +depends_on:1 +4:exp:2:hex:"93161b2dc08cb0fd50171141c865a841ca935cfdd2b5907d6ff8ab0348c4ceb05cb9f6e5912b90c3349a50ab881b35a1d8e9be44b5f293482548d4787762ebfb03c73c40e45385e8b98907cd66f493dd":hex:"0dceb4a36326c4df1685df43fddeecb5d0c76f00eb44826694f27e610290f6e1":hex:"105a8f85d6959f3e043ef508cfea21d52123f03b7aea8034c4eec761eaba1fee":hex:"bf781f7e489d9b4b5aa5ee6d1796468af672a8d25f311edf3c4b4dbf433d703f":hex:"c81d6bcf1e5bf37e39dda1735c6f193df115b1a854a12e7cafe060afe4589335":hex:"4306628124d0100fade7eaaf5edf227d50771f9e5f2e1e983800eef9a39fde0b0c280e63c8728d836b5b93ea794a32c1c04cfc54bd5300e3febb5fe2e1023eded8d7cd180279a598f76823e8d5a7dffcc93a09deec5d1f80838e938fba4de9f47e94b99382ae55f116df9c3b3ddf7e50516e203645852a415796f03a86418107" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 256) #12 +depends_on:1 +4:exp:2:hex:"1ae12a5e4e9a4a5bfa79da30a9e6c62ffc639572ef1254194d129a16eb53c7165399b3481fdf24d373222267790a0fec681554ff702658122e91ba017450cfdfc8e3f4911153f7bcc428403e9c7b9d68":hex:"8280cfdcd7a575816e0199e115da0ea77cae9d30b49c891a6c225e9037ba67e2":hex:"226732b7a457cf0ac0ef09fd4f81296573b49a68de5e7ac3070e148c95e8e323":hex:"45942b5e9a1a128e85e12c34596374ddc85fd7502e5633c7390fc6e6f1e5ef56":hex:"6fc59929b41e77072886aff45f737b449b105ed7eacbd74c7cbfedf533dbeaa1":hex:"b7547332e1509663fcfea2128f7f3a3df484cd8df034b00199157d35d61e35f1a9d481c7d2e81305616d70fc371ee459b0b2267d627e928590edcac3231898b24ef378aa9c3d381619f665379be76c7c1bd535505c563db3725f034786e35bdd90429305fd71d7bf680e8cdd6d4c348d97078f5cf5e89dee2dc410fad4f2a30f" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 256) #13 +depends_on:1 +4:exp:2:hex:"29e20d724dfa459960df21c6ec76b1e6cabd23a9e9456d6c591d7e4529da0ef895df1f837eba47a1687aa5c4ddcf8aaf2a2a312626ca3e20034fc4f28033c7d573f66ef61ab2ea0c7bf0411a9d247264":hex:"3713b601e164b1a51dda1ca9242ff477514648e90d311a06e10ce5aa15da5d7f":hex:"ec68be33ac8ff3dd127e051604898c0f9a501271859376653a0516336180993d":hex:"9935499661d699a00c622a875441b4df5204958fe95892c8ce67f7dfb2be3e4a":hex:"256a4ba9e8f439d5487fa5eb45efcf1bc1120491724db3abe328d951f2739fc9":hex:"73114cb3624d687d4cd49a6e769dfc7a3f8901dc41f6ad1df4ce480536fa82e52ae958d0528640d92b8bb981b755058e32c4733682e5c4c0df41f3505a1643a0dd49cfdeaf7a18adffca88256c6d2cceb838af6c92a64bc21cb7a760a0391291bfe3575e014fc156323f8eb5e86518c669dad8d29ad5fd4ef6e296f4a0764c26" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-256, 256, 256) #14 +depends_on:1 +4:exp:2:hex:"1353f3543eb1134980e061fc4382394975dbc74f1f1ea5ecc02780a813ac5ee6cf584db2447afbe2c8fa0c15575ee391ba60219332a67b95d90ec9de6b8453d4c8af991ae9277461ff3af1b92fc985d3":hex:"345b0cc016f2765a8c33fc24f1dcfa182cbe29d7eacbcdc9bcda988521458fc2":hex:"6964b9b9842aec9c7ec2aad926d701f30eec76fe699265ae2a7765d716958069":hex:"6a03c28a9365c558c33d3fdc7e5ebf0b4d32caac70df71403fd70ced09757528":hex:"a58546c72a0b4d47c9bd6c19e7cf4ab73b2d7ba36c6c6dc08606f608795ebd29":hex:"5b029ef68b6799868b04dc28dbea26bc2fa9fcc8c2b2795aafeed0127b7297fa19a4ef2ba60c42ff8259d5a759f92bd90fdfb27145e82d798bb3ab7fd60bfaefb7aefb116ca2a4fa8b01d96a03c47c8d987fdd33c460e560b138891278313bb619d0c3c6f9d7c5a37e88fce83e94943705c6ff68e00484e74ad4097b0c9e5f10" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 0) #0 +depends_on:2:3 +4:exp:3:hex:"096349506f3a7653d54db7ec1d09e93413edd175b6ddbeb00e56752a520ac8fffc7983b918acadaa71a67e1624f1b5024260a0495fdaba58aae41df82505012d480c8e4f751fd7ebc39f9becd694b2a3":hex:"":hex:"":hex:"":hex:"":hex:"f4c7bec0c26cf3892d214549ac6f3d82f34c6966d4295099ee56166e879a70ecae130251facda351e903d877b6c5eab5153ce87ba6c7cf8bcc61cbd14cfbe34cf1ed43678aee69cd87b60e6bcb6ff48ebd44ce9e31982d8fe20aec34fa51d625f845f61056575969bf785c2ffab4dcc754f13de63423e94bad8d5e166d96a62a602d3ee4045df162028b89cac45e6207d9097f2b3ac0ab17729251985f276f1287f5c56cc9ba1a79fbdbb291f3a945fbfdbd63cf13b82ec91f7b1085b33279e3" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 0) #1 +depends_on:2:3 +4:exp:3:hex:"aece2087b713992ff49d3bf404dcda18403e015632ac03735fed29102cfea6ec1b574952687c9bad0e9aedcfc1da568be632162a83c802ab94f32bbd87f6cf4af1f2703f4a02af7d60e22383a770b9ac":hex:"":hex:"":hex:"":hex:"":hex:"c0344807d5e3ea29fef73afb2b83dfe0aae186047fab6b603d8608df49476be18bf1f0f4707198fefa18804404887ea3c598d887e938440e1fbb8ed0a1a330cff84d952cc6405b12e7bf51b0c67d5e4896006dedb44637e393a97925890fd5176252f69d43920043844a91d0840844d89b8715052cec31e257c121d3fc0ee807b84afabee59624a00703f464b0079f12884a6e888ae4959c5423604f8ae2e6b57f4428e10b680cb74cf20417380dd5378449a24ef95d9438b0fee386badee962" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 0) #2 +depends_on:2:3 +4:exp:3:hex:"c39e77d579755aacd454ab7ca6528596c397f28bcd5467cc7e0fb47f398e875da83892a840381c1bc03b7a223e92904a714dff45759124fa33464a97d7f0d7fd2d1c6c21663d31fe80abdad59458c228":hex:"":hex:"":hex:"":hex:"":hex:"10f8ec63a550c31ecdaf2fb1b373f71f18d146ea033dd65cec2ec0b73b55bb6f3fbb7136dd045e09c4073247f093493cf26b6683bc9ebc98025f75fa405fb8deecbffeb0236a33f0ed6c7600d992ce5a268c86085adadf68047178ed89d93d739351f892723d8d6e4f428946e4e6dad1d640a9c11de23ce9b793324e31dfacfd367d86855a28cc544f88b8a91506753fa061cefcb9d77bccc15a23a84dba644089ee03db8374fee91dc23af6672159b0d2db219ffd07390b69879910b5c336a5" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 0) #3 +depends_on:2:3 +4:exp:3:hex:"d2e8a25249ac850fd3b01f62cd1eae3dd94d38e724f8e2644b7bb510c37f203890242b11be773beb202e9ee93899b60a00ebf08db1648c8750b14d7b784cdf0a6d4e7cdc816469cbdc3a08d6d32503b7":hex:"":hex:"":hex:"":hex:"":hex:"019f74eeef674ef100ba4a1835bddeb925fe6fffa97113dc00d7d8c0ed486a73e831561ae44c5bd90e189fbe2bb1bfb84f3e82ec8809699ee8c2fad80b464b6b344999c364868300c1edb065ae86109dc29516f2bdfe2a046ebc8725044c382d93990f1cba185f61f71fd22fbd076d727de32a6c1d2f430bed491c9d09eb6ee669a1dc4f8048c7be199c7cbb5aa4f14d1423c8a54763869f5dee947f776ef2543ebb88d3004739089efd86b7b22327ae952747068b35d4b3d86cac1debce3e41" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 0) #4 +depends_on:2:3 +4:exp:3:hex:"cffc6c44279e641856c39f14ed35440ea2f149c77459106f960caf910af21c109067c0f9445320adfc0aaf0c86120a38584747b4049588e5d93569fcecd358c51507bed59f96145bb8db6bfb4ade3a2e":hex:"":hex:"":hex:"":hex:"":hex:"928d6d9f9128b0af64028d5d2e94414af9f8dddd353e4155f42a5d08f3e530930e01ec0dddf25d65de7f49de702791372c71fcaf5f20bdb24eb999752bfdfca28525b16308d46cefb0bc3b260490115778161db2faebbd687b940ba098e3d5be640565b81ed9d434b6861fbb4cf034ba77380562119aa3164dc53653d4e82ec84cf351c35b1b668343faf17f172eb4c0cc3999d7d24aaba58dedf11225336b5bd747825d2ae9100cf6da3276f26cec198e52edf9194162483aa4a45fa348d0cb" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 0) #5 +depends_on:2:3 +4:exp:3:hex:"3a1f0474c279548c086de9e12ed754c49a0322e6631f7f441c8024fea654bb6ce245c357b13ae94064d1b41c23e5e0496199e8ac9d535f8d95fcf85fdbd31eb33c20793f35075c412ba7213194a873fb":hex:"":hex:"":hex:"":hex:"":hex:"954b58042d028abd00f7ce3d39fdb61e0cff6c40391ef8629e87101915771b8d0c7e24292751aab1219645743c6f54306866775e28b54818c759a6bf807c4982eddd4be5e22fe35a303cd503d122cc3fc5cffe50b03117457e2efc1fd91a9768964552116811b0e65856e8f8256681c722ea2652deaa2498025e84262a3fdd78bd33bc36c057e198327a33232ecd36501a0acf997d0149b4a833153b710b90c8722b232a574d22e7026a89a4d9cc3506cc9942705a162b34db9f49301a087dfe" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 0) #6 +depends_on:2:3 +4:exp:3:hex:"e5f4fa500982bdf8b023788f9a5532482b29b12e8ae776111adaa617a958ce8977873caee6e82c5098ae77287bde1d8295b8aa125923dd7f8e05df78adc29898836be76df7c5aafba6493b211cbf8b94":hex:"":hex:"":hex:"":hex:"":hex:"5b3fc1a7ea418debe79994bc0a8c86f487ed2f320c34293db950a1a026c239b8da6226d1dea509a0fe76f5a811c9391a622343324c293a0090587c10193a2961e358d1e71c269827e0d44e93d87984f47acf5b4751c8c066156da1c44662af4826cdfb5f7cf98b1f0200d3a0d7b99fea7f1b17dee7acfa5baee8f95ae4e0bc050bee2eeea7c09baa729e6e02ed19476ba3f8f5a8c1660de0353df8723efcd98f5fcaa56f6eda77f2d15c76d26989aa998c4afdc53ffcde47dafba8fe5818e8ee" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 0) #7 +depends_on:2:3 +4:exp:3:hex:"b9444339a8738df6cfe95b6dc28980d02799b2ec5c8dba9ca98fa8075621a04172b0c9e414ea33c8bc4b3beeb536161cdb9a2a516f3e87bcc9f92ebbf4ac1a900559756903b72c4c1b5f9082d8b341f5":hex:"":hex:"":hex:"":hex:"":hex:"09465004f009ed378f440c10fb122a265f464d373e7f1a1719c713f6bf38d28fb5447c269c127a0c10081533a847c0e19f4b640be0b1edf84d95025d56679e5880922f29c942e7284296a9309b4fab1b5bd9957d470db28d3d36a3585fd37573e8e3355d03690241d6f7211d8c6b054a813ba25f9cda76202d3270bf12f66d2e5ba5a946c7d28dd22d55d34a30a040aa9782d1e494603143d436cbb0212fa0df6d1bbf4f19818b99a68d9cb062aaee8fa05636fc60a072ec6e5ef24566c6b96a" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 0) #8 +depends_on:2:3 +4:exp:3:hex:"2aa822efa22d4cd65359107c46309033984b8e9c3ecb1b77078a09ad9ec746ef4f64b287bcc3064867b678f81ab209db3ee132a11f8c9246ce0a3d6deb3345f9b15e4cd048289991c64a21afc46ac98e":hex:"":hex:"":hex:"":hex:"":hex:"7b79baf0126782bebf1794fb48633dc69ba88d63504d27a206d974854d446737da4ca1fc5bbc54368966b583dc441b105bb30b3be19f2778ed31564acf333b7c4cb1727480aa985afd80396866e10f6da31287cce07358d6308e56e3bbce8613bbf472aeaecb27e66305e34af593c8631508cf7d2c512df7c9b3ab04a4ede436b9d2e6919c03a525dceba10afbf6e8a641591d09e8a90543f1905b08537b8868337c774c20ed47df32d115a7f3306d808bb82d06bcbdc81042d0a16a3fc8d0b6" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 0) #9 +depends_on:2:3 +4:exp:3:hex:"a32ac0aaaee05d57cb3a626fd26854ef08a3ad42a3c688ec6a9f9b67bbff02f86df150db0de2e3612cf106d9f158fb570901e1efb12252666e7a680513cf22bc0172c4f8c0d8b2eecfa1d471c10c9ef8":hex:"":hex:"":hex:"":hex:"":hex:"8271bd7aaa795b58d8f741bc207332335a68feb66ac9c3bfd5dac72f20807029f555c3bcac629d228c3a77d596d99c5d545a8dcdd0a2fb2a5eed5c3492618dab4f763ecd7c6580817c6a7acca42d81831bfc13f38ed56ed42055877c7f31dfad35a73eb2052f6f9183dfc89b5926680dc2aa85995d42a0c073c881f1ed332794a784553493bfd842225030e0056d76e52810236b17f6f067d1272372395ffe9c2df3145cc65ed2c6f2f121dfc6c1eb8fa6132b44ee0373c7c027af80383d4a7f" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 0) #10 +depends_on:2:3 +4:exp:3:hex:"c586e0f5999f107281dd5c7ca1ff88d4617b4fd1bb61313895dd4bede875c27b5b0e6c5ba15e8725eba8fa009406aa3d8b8b66f13e07c8918c0f3f55262debfbedfc641329e1fcd6442c245626cfd206":hex:"":hex:"":hex:"":hex:"":hex:"9d4f4f688406d8e57d96369553ee39267a9df9020d7fa78b39e1f246675b70a8080cac5aa6967e78c55071241e20a9446a82507a215a6c5faa3a2ea3c05c12905558d98a8eef90c8abffe6cf8b874c5ef057e365fdf179438de6a78b4dcc075b41aace875a5dd35a44f2d2b17d6ef6aa91f79354931c4d487142f7ac2120fd78caa6c7ff5298729de16c0e8285d73a3c6a95ada99f329dc9aa0924b0059a6585853296789b7e1129432baef4bbd2240a8ef7b19046fba104a85d43aee0ebf021" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 0) #11 +depends_on:2:3 +4:exp:3:hex:"bcac6c2160455e7db38a9c94ebd329c1ac043b6ff607a9c76a86156974d30251b4f4b14e6cf01d407cb426ad61608d1599a6b7ba9402756bea2709cf3b162cbf040d0f5f38fc4584cb9cf4e6a7bb3984":hex:"":hex:"":hex:"":hex:"":hex:"37d76ebbab0d4c8354086a5c5edd5aa6314a4770749d468b9e5d3454f2dbc9b25432f2d5d9f4b88bea7f9835edb22f8a7b09bd604703870abee1160369d0575bdd3847ee5fa93a9fe9aaaac0d436022f94d1b96655ab00feba1f40202425e51b084e372249fbc37f49410fc9d4d16173a9bc29181b62e342a8835f818d2647c45b6ce6c5b6f29add13d57e80513f767339575671bccdccdc9d093dbd72c91ba07d81c58ab5256b6744a94f0e75482e3848de891dabf384322d1419814cfe1590" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 0) #12 +depends_on:2:3 +4:exp:3:hex:"4b667d35a481779ad919956ca06e07366a974738c09a5685fa23b3fcc1a54260cd39d725a7f2661ea86a2d57cfcd2a91e08419476bdc5534df58c6c3b077d3acd27ace0472f91854c164de7f76a9b1ac":hex:"":hex:"":hex:"":hex:"":hex:"c82e5e2fb08171c233670e9e5403b07c600be4e91ff5b57ae284c4d733139b56ece720e82d3f9ac185e37d0f44d5281224cb5f9d230dbdfcaf1756389fe752575a2764f6ae775d0a82f2eb1d901ab04b59b54b5fadb2acc9b9af3e829ef19571dc416752b1bb0935ea2f3ad69dc452285c2f08412b11794134ba3bda0a10425576e88ea7b069b74b436aca93fe9dd1dafc78da1227b13d70157f60c9bee644451f8765e4c8badddad6c779d6b42d4e8b5ba65269186b04c38db348ab5f7a4146" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 0) #13 +depends_on:2:3 +4:exp:3:hex:"c0db9453f84c2aa74bf93ef21b9e7802bb8995f6fa5e634cd4064ca2a0075319a969bad1345bb5432df63412807a646d2008394d83989cb4a506990f59f8da80e6b3a1df3fb8d726639d59cbaed1562f":hex:"":hex:"":hex:"":hex:"":hex:"120bc268ca0d3f55d5aff5b360ca4d29a4b8ec5cb624f9674ef0a67b90bb70c238b94b2bf804fe74ca18f8364ff8b1e50b2315f8aa0c3fea663e93c80544284136de1d162e9078e9a074a50b493bcc7e0c83a0047199164a2d32133db57abb05b751a357abd3ad5298773be21c534f98645e94f0935afa53729462acbe55993b7d801bd6b0cbc8eeb5a1c5f0c0d690702f8de0a1a78dcca8862538201fafbefee55cd5be62afa8e5111c89f1f68d0f1760cecc86bf6675cb09b20e097bace037" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 0) #14 +depends_on:2:3 +4:exp:3:hex:"31836d292cb46aad594171e76237a3422844f62fb14d0cdf63ba587e73501051c7cbb280d4b46412e10927c9523bed1beeb5163737db7f910e444e5d5221c5469655fda4ab7218e63e1451f461b4fc70":hex:"":hex:"":hex:"":hex:"":hex:"1cf3b49f28b791e7c81706fb1a870f1af134a0fb0d2aacfcd6e446caf0a91c04dc160f080ebd5503fb7c16ad9229bf0a7bffcaad07329d5bde4576870758a4bffebb6b5c309114688db8e59a55413b4b37689df38d72bc5358291bbcc0b05af487a33934ce626efde918d0ed5f2deb75a17bd8912a31dccd783354477fa850520c3b97b56c6d2b9e4a05d49bc36e6683271f2322c9a546fca88c502187a5f4a2035bf5c527aa312f16c357c37162d722510b52ff8357490a096692572cfd8b0f" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 256) #0 +depends_on:2:3 +4:exp:3:hex:"a0c341ddf73d9404177a5fde32cbe21319c318f35cc9afca9ad41a3b06e13491e843cc6afdf2bcd00ce77ff06ce3d8a54772c46baf142e569ecd9131d6185af3575bb62a41cb646bdcae8a7a9fe60cc5":hex:"":hex:"b83491ec1bd89f3fc84acf1aad6fbeb8ef6ab949f41adc6d0dedc53722c171fe":hex:"b76cec3d6300ecc4a02e810296c7e70bd9b4e7121fc5e971cbb94337980fddbd":hex:"2a25cb0ecf913749ad46b585c76097739a14ca7b59f1f3ce4f79bc8a4afd1378":hex:"98c01d4527fd131cc327e9632104d9eee10407cd73ab607228d37b9b72ca2c987aa794804d505d072561ccd5016bd4189ac9e3db9187822877dd533347b5d2071818bb7683312e1e8806e9b73b021777f7f878bb7d304ec58ce92e5e36d3d05a7383dc77f3fe6eb84b615f3f290bf8a43c34ef5478a30a6ad616157c9d7dd046aa66b522bcef61c9d19382c32425d38ed3fc049e73035af1e8b97388de22c4dcba0bdc09fd36ab7eb3f67659cbd92b8d7f6d74b56fc8daf17068c65fb016e29f" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 256) #1 +depends_on:2:3 +4:exp:3:hex:"7817fe880c0a4224eaed0da5f3962727e4b3be567021d37d3b6d4cd779274378f1cdab91c4e7c1433dcdcd0afbe4b43c32a2b5ffc520ac3721bfd5352fed023d04439c176288521319b5e315b6e5e85a":hex:"":hex:"c7708c25003e6587fc8c8116c500d37299f5d5ffcad3405349351d4fed623874":hex:"45f88f2df43c4b9c3d829b7cfe61904ddf658c16043271f01c5f06ad3ec7bc32":hex:"883cfd717ad8466035e6d3f3c04813e21657ad62eeaca449785aeb0836ac94f8":hex:"6e0633c532099ebf0b10d4ad35d78a48b82fbce37913e655484ae40e29772a25630a7ab37f1d0ecdce27773a2ce88521b171432c07c02269df1822d2b6cde0d9f768375d9c60e688f497fb7ae262cdd5f7e8b84b84411d619c36529b41576ac456a240ed94d750fa722db874098ef7200c74c3234a3e5f21fcbc2cb5d50c4297d1e70901b8936964ccd242098002f4c8ed7dbf49de8c2a924c737f248d46ac1469f676377ca52cba12f28d9b534504d6e8423b5404b7e14de954b4225bb53551" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 256) #2 +depends_on:2:3 +4:exp:3:hex:"f2bb6edec000982bfdb301d1d88a23ce840e496a4f595a662e4127571264f1d7e9e283c567f11e7e266459fa781c6fd95339015836ebd69aa42857010f44e8a72b81f501c96931fb491dc1192f6f6a27":hex:"":hex:"ecd5ea33146cb74a707eedb8df881eddb1797cbb7b16c16f8d741d23795774fc":hex:"d410d6e2e848f2241ee45c9870064ac0217d97f59a8e80f6b5107ff0e4240bd0":hex:"8a8c58fde3b8c9711757cb17e46587d0c5187f758d64478e9968604af0367136":hex:"990b1f68152b3607f3011f8d04ea33a3e8fc479c8a6eaeb589133569048fe1284ab44d51bdcf4f0cd4c8d64f4c6337cdbe5f4f497ea90ee4204845bebca2ffde7831cf49892829322644c4e20a45a9885ff619bdf5e79ee53c26f47072e20a46d2b108d180d6ba5859a696f472bfaa80b2fcc7eda374a3f91ac0b06c9f13afac1af244a389cab4489d0ee04a0598f9c5168f39b40e7127dad9f20d69ede6cae7683b25ded1cf9d903541fb4b0a804d7c163ab068d22949f28a8f4e853e691e51" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 256) #3 +depends_on:2:3 +4:exp:3:hex:"6968f5b87019b4cdafcc9f3a89321f25ef5d8d70fd0781c9e3bb01b3ada18c8b61d9142b639aa75f5f9d798ca538475d09b121048e8a0cc4b2286efa12fa8b4b959938261a1ec8e607526b7a27931191":hex:"":hex:"fbe6b8af6685422eeeafc32327a99104b45ca5602513aed0a5c6235328e8a7a5":hex:"04f137391e27caffecd4413c775117feda27cad839aa900ff2af47c700034b08":hex:"f185925cc180e556a0703a5956ab6d846121f9d9cff97f65bbed3bc44904cb5f":hex:"c8bbe16192bda74ef89d9859b248ac658896bd40b5491c90e923cab6815ec3d2126c62410370f5f44e01fbf1d1653064aed835604d5fd0633c8b71cdde6c831cd91d69e420db83e6d5d82c26c47a11f2ede616a2885a884835cf2142a6ae4cabe989700125df12902374bcce04f3fd78f034e50398d9bcf463dde6796627820c75a7efee82fe4e16375af57ad3154973042e0a92110ef745f468377f6cbec5fa1a1470eac80408f8e96d37248b100ef8476c2a85cccdfca5696ffefeeecda9e0" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 256) #4 +depends_on:2:3 +4:exp:3:hex:"e8e99ffcf08aad8e50386f5d079d79d3db783a74165c6126b42b3140f744a7c723541930c8c772adb62981dbef8d054ecdcf1c30228904bd7ba31798bfbbd64757aa251ac9a1ae8c20a050670feac59b":hex:"":hex:"546e04247d6cb5212a57b62f99e1cca767a5768cf79296f45f0db24732ba6368":hex:"fd45f66c8dede41387373c38674605f3e075c9b7cfc66123a5478b8f8e3ab276":hex:"39911a79c6edbbc805a50d2aa018742094177a8e216d647c64428c00169ab2d6":hex:"871577ddf34b29e5caf132aa82e1d2f1586b76e39aab62acd02f6d4440908a772ac5f6fd48c5f55f1ebe0e76221ac46b834a8a4f5dd9958721ee053ba3aef1574ebd980a5da6a94693662717ee548af0f921421d1afb814e4d1799d351889d2a1bdd57570a913e428e6613b16e158c1cfed038f6578920d60db73dc10a40da9bc363a0206b4e7e49670eccea866efd9a05bc237042cf052f2a4140f9377e3c6792b88ea06323fcebb99c643fc1c3653758d6866cdb148837fb0fdf77de1564cf" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 256) #5 +depends_on:2:3 +4:exp:3:hex:"c7774e199b5a8c0b306ca236163249044ec2153dc89bd1c1459cfd40cc6069fd1921837aaa80f4dff34a97b4dd7e94c0143efa24f34924fa52abb4275a63cae7048a7fbb8b76300fa8d109f9561f1699":hex:"":hex:"1f437f758512071bd23d091c2b1ad8d51b99acc663e1d037fc5421092cbb1a45":hex:"c622ac1071b50e4f899e4760cfed476adc013b6ff95c9b7be671f79cd2487ba5":hex:"f973f45f75fb0d68e0bc5a723a72e722e6c8f3fea08d785141c78786da5101c6":hex:"9475c697af430e94ed396c707bb7d5ee5bff18405131a0e898ed38065abc28ebdc1dc33d767c4dab69c846e3350bb414ef2d43798710958a6ff3e6b55de93c2ac31793a1dd4b07379e364ce72553323b9bcaa8839cbbbd347b4a82010b78967219b84c6fe9f9285ff741a0036aba6bfa7dd0d5a4ffc1936341b0e2a31082123b6d2af6740cb3ff43bb4a87ee74ef7eb06030745453d2ec225c8f31d214f1dead0f29af01ebfe90d2f8a8bf5e031242ebfcbd136b3e3db1f63a46f69a26d6159f" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 256) #6 +depends_on:2:3 +4:exp:3:hex:"898963d0237c58e4b7b6e894ab271555407d3ae8c1c4599f5f5490ad5701984a6e5ddd58d311b547f6fd2d4d67addb4ca6b86839b83978baef72b8cfbdd0cf180518af0e32e52ad4a73db460af05e187":hex:"":hex:"cbe5f14445cd310aecc97113232a0121ed2082f2c4152b4be68448f36c91b1f4":hex:"efe0ef028e4179ae10b378bcda3d96056ff21d94404bfe022b563cb6690ad563":hex:"98cf6a771c05f904b53ff9b12709d20bc3f1821385cf27ace7a4a584e73866c2":hex:"5682b6bd667b45dcf16527a817852b52a7f5d0fa8c962f3dd3af63e7e71990da92b75e9fcf5de59b1565f525a734e978ba74dd80fe89a2e527960ce4207b9ca514d933676ad93e6dff5d57314a45889637a623eb7832854c3897faa511ed6dd246d2b8280e7d0524647d4bf7715b5546e0a9a1dec246b1680adea2eecdc354fb3122654102cd0bf94ac9333caef3fdc369e7649653352739783d048e08e8d231b332fa1558745e2ce89dd76d1dc442a71dc3d5eb7d3481558941e261f989b097" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 256) #7 +depends_on:2:3 +4:exp:3:hex:"426bfdd4ead656611ce49bfd9f213843c194bb6863534ebc258415148f457e6e685fcf539922aade348a2af678038610af676246632dd70920d661518d4dc5221381b2fbf1c2f3bfed01cbb930398095":hex:"":hex:"971785b18e244d03e25b9a80c2c2204f5bab6dcbcaec986342450eb9b376bb5e":hex:"5de582cba43a610866578604c9f2a542831f41c277d50b324f4edf1e2e5d498b":hex:"46e4c325d2c45e00a3c17ab35115b5370abbae61337eb2da4e6aa91f951f55e9":hex:"f2e8be2e994b74a4945fedabb167778523865ed27826f9c26ca2b49bf32af1626ae62bfeaab13e9bc52a081f365062a5cdbed0872f6479cfec5a5e79171d97ea898e8d10ed71203882d1d7b7d28c5d59b8872985abc628e73622f616c4c0904ecb1e4518be8b4398662dff8806c3f43750cc9be95aaac2a4730f40323d63af157d13555d043c4d0d7cb53f202df282fdfc5544a234f71121e893814f4bfa926351c5e9427e90f1117a3bce7a16f0e08cd06c3d7c458f9d07ca3269e015733aa1" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 256) #8 +depends_on:2:3 +4:exp:3:hex:"ddfb3d1d93e977aecd08efbd71dd48168e67658d93596b742670ed7c8804bd3e730d34a80ca1fb4ad2471ee22461bbda670337d675a17721ac63c3793153830a26b1871b316a3e10e49c555f44719577":hex:"":hex:"390c53a5ec1db52996eb042f9a76e45f0bca76ef6ea31b4642f00658342e601d":hex:"b5436e880c15f03c3bb846d90f3ee5fc5bf5393865a112a4317d724738f5dd25":hex:"d193f932af858698ab086bda36d04dfdbfaf487fae4298b38fef97bccdf63f38":hex:"bdf9e1ba1fbafdb8f4628098aefae4810ee7fd565d0d285ddc3840f8e24a9985c2de57edf5a511079ba6c952c95c626e296fd62f3579ad03db536238fe69158317c9c26d373816343505c60a48e07a00edff8fbfef0ce69ed176e5484d056af02a270bb6fce7bae0b223bfd98ad359d53b159f3295be3fd630a568d2363121c7021ec23b14693be48f5b55e06be3d729c2a80948194b1266da96317bc592362809409a7666d5c168125b99de26da741f17ca52d63685ee8d8260d45764fc78ea" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 256) #9 +depends_on:2:3 +4:exp:3:hex:"457e49a71da81a2a08bb19b97ba8e62ae4b5ad4ae64daf758a83a75506f9251149b2bd7180f69b9217346f8165b7cd8f100e0b1066e2877f5e5da21b037c2bbf178611dae627d9beaee64a9d0186462a":hex:"":hex:"c3181f694695c21405588f600ac33871b519e2b8e3b876424b32753da483d6ec":hex:"68e717410f99ae13712175e402b51058b7625b7da27224414b472f9622d163d5":hex:"f2cf13d05e853a13ed47c5d0eeb9c0416688050342f0d345ac1bb21d5ae675fe":hex:"fc23aad02870885394ca831b72201d76cf736f08f6132b12178e8e3b016fef8d3bbb849e5d935ab732054ca701154e7d3e87d1b51b7392ccfaa19c4ad28638c67bd149ff67a93c09ee1fa5c2ef7bf9d40844baae79169e52e9990c93f099e036b63b000fb8ea67a13167b045c8f9163045beabe0575fef00b89fd90390b0124961698f4ad8884a1e1faf576de7a179c03221402279b31c93136b9436f9a07b5a67b1c199e7c6cbd0b5f53ee5bd0ef845243077c6eda0e021ac9219f6db5ad503" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 256) #10 +depends_on:2:3 +4:exp:3:hex:"79e96cc8e77d8fe72cd6c66becb52753cea28bf71680fa541f345b83be79973db4081201bf23c94d1828e9ca1e825ac18aedc5ceb87a4c1b0c333c88d97e0f12d61b338e5ace5e15f71283d31a1ea90f":hex:"":hex:"4304ccb2666b227c92e2b00659ce0b34dbb53451591e32914a60d6e6cbbbfdd6":hex:"d6e74777c02252b0613357b9a582f4d8cd7e436daf1674a663561b62d8ee7143":hex:"0de123897d5f090b52db88e4c0f9fe736ccf27c134b0f5eac61b200d15e07986":hex:"55a369d136e2d903c179472eebfc45ae236994669c46cd318401bc662f38a1f714f78ac9f15c819d2bd876a7af51e6caecff3c650a3e661e5d137a354cb16aed5b1554545bde08c10baaa5bce22284083b43a6dd9941a37f1a18929ced61181c137e9e38c79d107465a5a12f2a2f37788c8e398ac48b2be944d6dd3562c05922c25569c26a1203fdd244920e6c268028dbcf6807c05bbf1559969981467a479d7117a91f210118c1159749a1dbce4d8a0d5f2f8232c5152cbaa6441865ac3a88" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 256) #11 +depends_on:2:3 +4:exp:3:hex:"b37180874dd4a7e08b1256966ed5845001b0773b5136956dca7194cd12a9d9e1f1dd35534f579307de11c1e64875e9377081de3095d83ced0ea3df2ee8d5be4daee545b431dc908bc10efc04db16ab4e":hex:"":hex:"d3c8aa88cc8d5b59af3685177cf3826cd675854deddcb9b501c40c4288cd9cdf":hex:"6783f5bd86fe178e6a4d303342374ed32853925f143a5ad083c04a9c298feb99":hex:"4774e5d062eda04b680d717f652d87bf5cf635f597287b76fc35e2d5ce593d08":hex:"e478d45fd3eb6f4c398a0ec84f93ea6861f00666753c143506c5e417100077e2c4c9ece450d98c9372d68aeffe9e57ef9176d4084f9c6d02479b516942dd4792a90ffe1e4e49a8156bdd872f1f05facc06e71e581f919cd94fb97208515ba284fcd255ea6f1d1ebb7d351e1ceea1cdee631072d3fc3f4ef9d5fc57a9ca98c88b81003d858cb5be0a3520c34e52d3beeadf91388ec9a495b1fc7ff7a6799ab0af211abf52c15467274c04bd104df14033df000d8624acd253a6c954c0d89b7238" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 256) #12 +depends_on:2:3 +4:exp:3:hex:"2779f20c02d086d30d53dbd6e7396a35e677214650e39f2ae83077fad70c068005faef347e7f73efb53a92f0629e012c7e1246d07b4e1bea7008dd8ecc7546e3f0a6e0e950e083373fde3fd994e114a4":hex:"":hex:"55edb840b85b391d4f1940be52a3e3824119349c780811c570d2c88dbefcea16":hex:"e83ef56f09f82af4dd91a0b887d3f182dccd973435b74b7b3c432b39a61fe720":hex:"eb9f30f2886d0486c5240f43104e426b36aae0006c4b9c64dab1bb713bcef7e3":hex:"68c3feda06172a191184e0bb77a8f3c9096048bf71ed95b20cba1b1726660900d7d9f97b7ac648c76b50b921c28eee3d401ba81c8a46fabf82301fda8ffe9d76bd93cb275638f7c2088cfde88620661eb844cf953cc141b31e946338a0203c8ae67c2af1330a53251818aebef893010f16a519fcf22060a9aa9c597f3409465cf3c9ccf753db8c0bd3b465b028adfc447e37b5129c17ae9e8bd01f762662c466491fe57384825c163ab8a26d67efdda01b053c19d3bc6545c3661f2ad1df1e33" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 256) #13 +depends_on:2:3 +4:exp:3:hex:"71c9fb2eb8cca98860f955a8bb3669c70b6f5374256da23fcbc4ffc2e90bc0a043b8ecbf1cb0c7b65a2cb7a47211541f2675512138964d0db8074727158bfb4f0d3c093f1e2c2bf697a48c2ebd27153b":hex:"":hex:"13b1d552e2c8c84f66961ac8c919166a248bc62fb896cff0b8b001cd7e147bd7":hex:"27d626121ef579d9969809762c77068e4573af44b6e947a2892337a11404c133":hex:"456ea206c38662750af39aed5fe0a39760f4dac85b83d7ccbc335f53a160a0c9":hex:"464aee8af42ae68ee776780113805cade246b83a698c34bf4c92e5d81f28829ecdb808884bc7d784397f2b2f8c76a2e3517b53bcdc7257f44ec9357d014af4e8ddb44df98da72775567356f363fb85885f8f22505e5b5a80c824b4a0bc48029e3419d3d2f161b1469cead730cb123ca8387a2c8276635a91d0dcb2220797ae2702468587ac3a70b927625f3a6e2980d6fae6fddf4b380ca0d91eb4aee37b98644bdeac345f49523a241ca392972da02d70364f9401c21fcf39eeaf414a09fdfe" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 0, 256) #14 +depends_on:2:3 +4:exp:3:hex:"c9e54bcebbbdf44051e80b91cd10c87dc24267923350b6770406551a5069ea2255201f3f15bc3a2e4caaf0b45510f19db299a41db8d56ce993ade44323c455fb1a3f504124c35a9e907d9765e810c939":hex:"":hex:"2819b3ee279d57145ea1020ebc77c46031d69524a843158192e081f2ac91512b":hex:"269ac853ccd332fef61330af7e80a33791ec44b6cbb83006e5ca0670597b35b1":hex:"fdf031b1e0a8016bdf6a6ebb533dddaae1a3a5b14b9cf52a1a8028cc720b10c4":hex:"a1c4c1d6e72dae5e4714bddf4a1cb8d01cff8a3973b12022011270c0de7ceb85ffb6a6aedfa54d0521ff33d748fdef8f29c52c7c414e692a30dfd0013776b58f58421605369c83d4d891a19c782a2d036f9638aba9e24b0eacdee87d4a8011699b638c287f0a12f11ede86a946be9c00d21a31584a2a0da536dcbf86e2df63be9a7b771999c9c7a6b748de713b7da757de2d731a8d980b75136b0fdc75ca7aef47cd36bb9370c5ca0ef81b9a04fdc78698720f68e5d54e1a777e557a1dfb4c22" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 0) #0 +depends_on:2:3 +4:exp:3:hex:"4d95f31b9606a5f6d04dff1d89b50becfd0882e6cf51c1c5d24ad843bc12d977eba4582c39d793a63eadb63f292568c7fc4270e6c9aec83186a20819a7d35e7f1155ea108794302d593c53ce9d25422b":hex:"43bf6f32b3b5f580b54179e4102d063536e7c47681d6de3cfe88fd8ec66e4873":hex:"":hex:"":hex:"":hex:"e991d000b24ebdf838ba11f9849591b0029feff33604bc4d71acd94301f8d045eeb1f81f3a101a297403a35859113c099939638680d481c86067f54762892f82146f61cce7bc2c85d395348f3ea2aba6bb3e59dbcf8e41a81918b6cab304d44ea1e32573cd6936f38cdc11d3c2f96290cc27b0dfa3bbbafa9394acdf2f4435170b428563427c4b02ed25924226edf8d5a5eca4eec4aecf98ef2e6f75caa70bdd84877df2e637b7fad621c6170ca5bd86e21d0bb01cc90fe2e76353a9d5687bea" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 0) #1 +depends_on:2:3 +4:exp:3:hex:"1378443dfec3c03d36b16bacc480edfcb1a4a509c17cf4b35787dae3bc91ade6c113a1e0df927a4449ff9e2f4f1cd9a27b07f57ccd6777f6d6bbfc9655f0676d7b4f91712efd43315be7c7f30e51da89":hex:"f67cd35afbc96756499c68a5ea19991cd1ad4880fdc13afaa817608a141e9646":hex:"":hex:"":hex:"":hex:"b32d9838b3f45e3c4b3ede1181bf0aadab96d22790d8536f5913fe95c3ec0179dd1c7ae69430bc8c68f4f30105199b785a11adf7abec007d18abcee2e65df5a211adfda35fed8b9389a61d2fad33fe020119e72c782a316f17f8a588239567315bda461f5f4518a1aece4d0ae028c153d67a8d4ce620e571faa0403c56bcaa864822e4d8ae6d14feafefccbe879ce4baeca70d436218e0eb3a62bf15c018fd4cf66a50e3d9d7cc9e4744e29e9c945eabf03a6a2c4ca57e582b60914417da57f6" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 0) #2 +depends_on:2:3 +4:exp:3:hex:"69e9396c58ed867eb52fcd046504922e2e9a9b059234cdd3f0a09eee9fdfd45dedf5d3860b25115f8a3d0e2f3f543890a23a5aa278f836577956944a098d18f05900d1b076d30ea745be745b9efc0dcc":hex:"1b6e1bb613d199a5e6f1b5c2ed041cf6f6633e2ef4d50ecad89b28102bf70554":hex:"":hex:"":hex:"":hex:"ee09f7b24cdc6b51a8212ca00613633c1a5f044fa921bec31baf679f5ba66bfd723721a03e0f260a44ad5cc4c580080667a781427a34c3d2fdfaceb4b040ee675491c4dd0c0d13abbe81336384806e37f2729e7fd080fd57011b54b664d58534c831c90d182d4d955676938d484087b0086d2bf2737a912afb66101575ca2bc5acf845f4970bb1ce4441eb667d5096319d6282714a8a9708ef9964cadf596ac3e7b1ba18fdec7e2e22f5e6352e825e965a494cb880aae78477aa3bcba9428107" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 0) #3 +depends_on:2:3 +4:exp:3:hex:"d2f390fde0b50ea4afe6baf29a75e698fb0275c04c481df03910d238f4e72c6f63a6231df89123c2dbecfe0cb0313db34288f4143694ce2df2484d20884dbca097e35c3fd8ddee5273b53c1149bf5070":hex:"2bc38d852d1ddee2e89b7174032d96c0b97f955e16bc61716c5c64248eb6232f":hex:"":hex:"":hex:"":hex:"e62346c72ef393a2904e982158992df4ccab03142c41d8d29c1454794926c48570eef34bd021d44cc9106401e9cbce6ddbb6c92257e89a787499d7f7a2dd527833307e02f44645ddbcb1303f1da95382c89805c76a2f12eb13d2b0205b7ec0ef21f596c98af608a2f2a2c5e3534e01a23ba25bd5fcba0481482e1ec8138fb1c86840060919d7620cb7b879d1096f64aecae1ea085a793a9f4dd665449ce73cb3036dd5f2a49138ce88c461a0a9e2f0c1fb8338f5eea53ab0a0ca8a8df9c315c4" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 0) #4 +depends_on:2:3 +4:exp:3:hex:"0cf86ffa1456c453b53305353ce43ad3ba44ebf4c6943cde8613cdc417ee9f6e759c0bf4676f1ebd05c519eb84dfcd3e379ce61016e48cccde24753878f7d8fd5da72518253b2f836f32e5b594d54ad6":hex:"088c917f84679641f491aaf105eea0f02d0a8ae0b7add69645d1ef304c74b417":hex:"":hex:"":hex:"":hex:"79e71d9a974cb88d9022d35997032bb5fbf8f0daff411467217837a836aa44c493f868a333d1ebf66689895b53c9e01d58019dd1da2354fb966c88d2d6adbe66ac0b8901595a24dddba609478ec36e497f6fb6b4bcaa88b1e9a9c87088f66611446e8c2873e89ee1006b6d92d2eac54714fc6481e7782b38ed4b18d5f9714ae6a544110cb6063c8a9964c52a7026f52af448783c3427092e0339efd7d1a8522848a2faa8aa19c21363a537766c05505cb979269c73ee90679feaef8df13b6506" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 0) #5 +depends_on:2:3 +4:exp:3:hex:"7179c434bffa377d9b6821da9571667c8b962196f7d8aad062e75b6091a34a454e8f4d14a60fb5253ae373cf50edca93b8d2eb2075076ec8c7a42b7adbe7723a6ba8b51a55fadb16fc3a6fe9da020482":hex:"bc1c39e646afc1bb62685b746007148494209a419b733e938c1a5d02e2350860":hex:"":hex:"":hex:"":hex:"3093a2e1f502d44d8be4f35b386774162f0e10870f9cd34e3b9d4e77c7ec7cd10cdfa0bf8228be96cb5741f069440a6b6f9ec155d88ba66b7fa84959c53d3574bf1cf9f1561006c776223b881dd396e9e9830af2c1b5f7457fc45e823b411c5c2ba3b11219aefe5508f75cbdb5e40edf6b1f61453541ac98dad9ed502bf1a8afa79604261c7a89e78cf2941d520e0c10bed18820da6c23a5ed1c0dffbb04cdcc9c3284d400644e9365c995d8c99eebf444f2cb051bb62f231301d31ea815c338" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 0) #6 +depends_on:2:3 +4:exp:3:hex:"b063333128a6ab4f433f151ae8aec4283ab6d1cbf4a69447850fa1a25930ec0f4204da52752a9bdc788c5cee6d8b92e1b8530dbe0c81b1d34037ee53f20758d5750d9863ed60c762ae2a8b4c973acc22":hex:"067708b24df7a34811993d5c65d5348eea73e6c6680293afab5804b4328e7a96":hex:"":hex:"":hex:"":hex:"5f74a1d199f30fa22f2020baf036fc61b1cc2acaa80b48ddff1cf85fe5dd200a9afbd8bc51dd1829636fa335660f36d5d2a516e4c38e8ef0c3cad979e79e7e226b820634ef1d76ae81bc3e3807913eb0731b2e959c43afa83feb1d8da31dcdcb3dc3a4cf8f454c4ec41bbc822e58023f0d797c844bd8f20034b31d99579bff142cf53d2651d7a31b212d2b9d5705b048860d6c4e3f45ef1bf2d5e46433fec593b9f68be8b1e928ea04ddc4ce2fcecb737bb8f9d054c2ba5060fae5e5fc21a650" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 0) #7 +depends_on:2:3 +4:exp:3:hex:"e23fa0c86c8a7b99ba0d3ec3ca47349a57798c07587b666cc4ae1c9eff83b8cbffb49d1910bf05db3c7d0db7e27285ae9f6b4411d84364b27a66398f5b0a897ee2085526d3ac4f65e70800067d57a51e":hex:"7ffdef21683a75484f6ac304801c213dc8cb7e3cf0f94c358a2e1ccc9969e834":hex:"":hex:"":hex:"":hex:"f952956cb8c528efe2c831c67b69e8aa7e79c013161497b9c55415fd40c7fae778a6fa82109a40dd72fb2f4d92e1cbc47f52d055485c99d893fbea1cf28dab35be1f162494cb79ea45c44a63a1685217cd3733dcfa88bb6de65c68f2390e479c0fcc6b398dc5498ac93002e7e7f360535d082c8e46386611075665060845c4f8bdee38c23d2f90d2b1d78217e865ecfb6df02498db837fe581c43382cd1d3a508b6dc052ef7c4d20349679db8d8bf8dedd763da8e5df775d133970be062a9ced" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 0) #8 +depends_on:2:3 +4:exp:3:hex:"4889013333cd1e2b3b8c4365bde690b66e06bcccbea25f04132a0962f13a7d458e823f5ec0ea091a07065593ca44fe49611602d165a35aacb352206844acdf41dc2c88b63b36912ae81875bfd3e098e3":hex:"b4761d82a93e17d8a0a461ec8205932edf218157459a25a7f26ceddb59992192":hex:"":hex:"":hex:"":hex:"72aa3601986e6c970b8c2253118b8381264577e391e48bddff0cceeb5101975391a2c731f5611316b255c2a6c0554ed6cbf8acbbcd8609e3f99c3cec38aa060eedb863563442b7beb78f35221736c608a933aeb0d4a7cc050fbcca351cf780d42c5380284a6163520a80896ee7f71d2961d7629d673791f8fac10bd01d32d95e8efbd65381424c378bbf54b532a70c285d98bdbb559c9f37d6eae889b82d5006fba2892ae16acab103aff1b247711ef92dbc6e516c92e388fda4243808f95170" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 0) #9 +depends_on:2:3 +4:exp:3:hex:"cc32ef3ea3b0db89c69312cad56b1ddea73ba4c302b85ff3c6605d1899a96f49909c6a54d98baf096ea5bd46abc2535309676d9d6bb9917271bf8c86c8852e29bf3ff5b2fe56ac094fa35dcc51547f62":hex:"cb80942bfbcd8f112ed601cb12a5ca52cc0f280522db11da92ac6c76be3932fd":hex:"":hex:"":hex:"":hex:"2c972cfe1537bae42ecc46b1b41a691350f6e63c202245347e91602b93a4cbd5c8829e5a4f63f7ee0e29adb69386e8b659dca2e6000aa03beab132db6dada8dc35ab68433671cf621fe4593018b1eafd3a2191507fe015e2a5694fdfe2c3182fada71d18c5fdeed065089862249c5508f055ebeceb9fcfe5d16e4479dc17e2b59b5a0aa31cf21fc6b5925569b0ca63d1a5cd268a4d409f1039d902556236fb06e61c1c054ed3798cbe4d8c2a7b2d18206212591174cec9da519fb876c583a20f" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 0) #10 +depends_on:2:3 +4:exp:3:hex:"142bff9332c48103221359040cda6632baa92cfbd1ae7f8b3d0e33d6a8193939d9d20d17fdf6edd1b3ca9ff600fe965746b0ba1b61e9aa5141edb77ade0f191b87f0b33c0f3620801a755dca02698883":hex:"8dbbcf0c190783122aa6da6e05ec9d82ee29f8e74e59f8fe6eb9492fe410df6a":hex:"":hex:"":hex:"":hex:"2537a8638d5759201cbc225e844208c1d08443b055fafe23329aed5eb2d814703b0fdbd0a89c2d62f8f4ea7746905b9bd90706b734060c96e4e406675576bae84317bf36d8523babab72236b71fc6087dfcfcbe765de13cd1ed316f495e3bd08d780cd6a58849c929ef24b41e9561868158046ffe8d2a89d169ba31331611f0872c6d075b9938e5170a3b8612f9ecff4743c0db5ae365fdc2678ec262eed3b7c337e65dd1ff24a867574ee460bec7c374fc6b3fe9b0eb7bd9f5507ec5988d313" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 0) #11 +depends_on:2:3 +4:exp:3:hex:"821ed44bd793a4af223aebf52413ba5e0e231b2029b3d71475ac028d8c10f86d2382eb9c62bab540be847e22344704d339b798248d0bf2990c0621316e3c98ec07f05bba8887783adaebe8fcecc48fed":hex:"8d2c8cdb2ddd6934271941f071ea47dfab869a5671dff9d424b916c1ccabb02d":hex:"":hex:"":hex:"":hex:"a5fcf13e4a6b9829ac30171920478a7878aeda658803f2e314f9ef8cf42c9c1933cbd8dfe5053abd30df644ca062070662f4b7e7851d28ff801cc4b878523b4610891abb29c095a70665de1199182fa193439665cb19cbdb00aaf3fd0fefaa2278194e79ebf652713a28c36f2cdb83f96c8eb1e85c9969381b52bc3444e8ad5d82c94964544b3e6649ae3f532d25a2e370e9fc8c77753239f130091c43720ffcd2bbcdb70a75223cfd9346091e8c056227f66648941552efaa5a0a369291e9ee" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 0) #12 +depends_on:2:3 +4:exp:3:hex:"977bad4c5d1d16a2439863af8bb6fdbc206ad0bf20c4036c044645962c36e2e853f0d702a54b70421a509c25de124f27e330eba581fc82efca522e43956187c9ee4f58f971e4b91ed51cc8aeea26fdc3":hex:"51cb91cb7ff1b39e18aacc0baad20443522bf869f26d9d7182005b5cb1d018de":hex:"":hex:"":hex:"":hex:"df4acafbe4f28ee47acc5134ef665a50deb68de9b3c7e075b26d5731049f13ffd00cda05f612f20fd901ff127277f269c069607442ed9f7b41892711a72b83ac592048bfb28ab2c64c6b9f5eb4427450f4475b1c04dd4665998b638d06fe8f463e2f07ff46073003132b66a5d4d19a65bd08230d1db0234fbd09a98864f8ca824e7a0ca9f1d1662027a60c7e95382122674d88224fb192cfc129952ed6515912aded9c72a49a39a00f9f9a16abbd361b20a12b5f3c4de54012aeb1b42f6fa3bc" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 0) #13 +depends_on:2:3 +4:exp:3:hex:"3116ef07685eafff1c77f185fa840bb5627fb9a5d79f72f8007cdcdfbfefc56bb1769991d78e9e48fca4c97b01d720d1d3ea6fa6ffbe2569da94b6bb36cd34d72c37d0218b3d02c391e0653e286b24b8":hex:"f138ca3ec867cb7ed7d5fdb0868d7470de5f802fdb941dc400ad524d9032e23a":hex:"":hex:"":hex:"":hex:"59f01ec06c97a49cc5de469cc2b39c28db7612029e0e24e3c2b24f92c0af2383bfb9a0dccbeefdaec4bbd2607dc582ee7eaae6a4ffab251404e3c59c95e5460ccc8d8dea4db73e924ccd7528708e1b6a9d62d485c93764686f93df6fb8a9ae86bbda1e038697b5485e27e0bac9a18126bff1e7b104401306cc424e783f55ebe9940176d7123ef58c9460e5fb8311f745fdccd39ce552547adccdcd853bfba87aeb87dfe8ae72080fb7b3e5c4718e743c9f576d7752e3db1fdb29f160bde115f3" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 0) #14 +depends_on:2:3 +4:exp:3:hex:"f5ba27c487a40dfe342fe18e7f9c72bebc1ea229c7634cce87defd7aa11448e3f584d1769f3e76a017430e6e9bae6bb6c79170925e1156275311d86d4a03cfe3dfbf85f80bbd70ea98af76220833a0be":hex:"34fd124aad5a10b852b2fe8481cd0ec46dc2d02ed9583f6e282a4c908e319024":hex:"":hex:"":hex:"":hex:"977fa5b70f4ca3c04b6f495de3bfdb4b8aef93bd14c82653e30a00a4678c602aa889766ab7caa434d9c15bd68bd14e66cdc609289a691dbcb391611be66c2056f8e675de5db9b2e2f15e5a330d00a8886eb8b8eed4076306d443ca292d783fb056186aa86e1dc9f18a113e015e535dffea954319cd26e5572f4173766207ed7d9b8b2c42a741340c1850a07139c0b358cab942bec51b159e50f5aa9d8fbe7ca9d1d2127a98fbf0f8c3094bea4e3039f7f7ab083fc9d050e29e7d4cc2d3d44caf" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 256) #0 +depends_on:2:3 +4:exp:3:hex:"c4868db5c46fde0a10008838b5be62c349209fded42fab461b01e11723c8242a618faba54acba1e0afd4b27cbd731ed9d30016b5827dc2bfe4034c6654d69775fe98432b19e3da373213d939d391f54a":hex:"135132cf2b8a57554bdc13c68e90dc434353e4f65a4d5ca07c3e0a13c62e7265":hex:"a0bbd02f6aa71a06d1642ca2cc7cdc5e8857e431b176bcf1ecd20f041467bd2d":hex:"93ee30a9e7a0e244aa91da62f2215c7233bdfc415740d2770780cbbad61b9ba2":hex:"36d922cacca00ae89db8f0c1cae5a47d2de8e61ae09357ca431c28a07907fce1":hex:"2aac4cebed080c68ef0dcff348506eca568180f7370c020deda1a4c9050ce94d4db90fd827165846d6dd6cb2031eec1634b0e7f3e0e89504e34d248e23a8fb31cd32ff39a486946b2940f54c968f96cfc508cd871c84e68458ca7dccabc6dcfb1e9fbef9a47caae14c5239c28686e0fc0942b0c847c9d8d987970c1c5f5f06eaa8385575dacb1e925c0ed85e13edbb9922083f9bbbb79405411ff5dfe70615685df1f1e49867d0b6ed69afe8ac5e76ffab6ff3d71b4dae998faf8c7d5bc6ae4d" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 256) #1 +depends_on:2:3 +4:exp:3:hex:"46c82cb81de474ae02cccfac1555d06e5dc44b6ef526e0e28356ffc8bc6c0fd0628d4d942834b94fc977609c8ec0a6392c0693130c6215d55e37da43d67def719051e99871db68128e245217d2aa3230":hex:"5de51e3f49951bab36460724a63f046e75f6f610be7405f55016c93a59f1890a":hex:"5dbb13f5b4eb275cb757513e6b8af6fefd7c9c9e0f5304fdd9b4c0968458f22b":hex:"3ebceff3232e75c6beb79d97c78e93244a257f0772f82e234518c50e322630eb":hex:"dc64e5a1fc7b32f0294db138dc131946e5602266f4cdf00037ffe513a44ff83c":hex:"e3480544036a3684a88e23ff41a4bbd810f827021ca45e800aaaa36ed0b9bffcbbcc99a1ef1f1528b4bfe39514c7a390ba132d1681138c4b1b9f1a0fa1758837dde35d0f6c38683ba47a904937dc5ee3d3b75f909e5fb6311c6cda5e1121edc774e66092aa1dbde83e4680ff95c0bbc2946aa4d46770f247caa7b71bdefac9641ee99700fbd1e560f9f7fbd462ede64e009ced90c44c6ff03b890e16c79c7b8c959a27defa6f062168891977c637ec22ecfe20601d499443f1fb0ecc7d9505b7" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 256) #2 +depends_on:2:3 +4:exp:3:hex:"df8053def0260ae71f67e197ae8b547a228e9b67ba7909fc1cb3adca51058b15f6d5951f0b60c972d139b75dc44a3680127a84799fd7672e429f20876c175d135e5f894edc7a4da334eb8b73a334be61":hex:"26890036a9b17d8e805c38568630e1c196091faad546ba8eb976f3aa031a8905":hex:"40ea6bebb0cb94b7e527787e17ef9f7d3efb889fc1e47e49893ac5c4bba988c2":hex:"090271c307b43b951c20ad3f081d2838df0936a4bbdc5eb6f2e16b1db482b1ac":hex:"c203cc1a3af668e45653bab6b1aa39ba0669491a06d00cd39c97b777a8bfd4d7":hex:"0d68d903c85c0172419dc9f782c5d67a0b3367d13cb2f734fed95c7fc082291edbf4fa83354c6588227e40bbff082be2dd276c264823a8f31ba18b00955d7a1fd612a2f37d824bc82cdec972d3f8384dfc78b51dca61e815766c877ef3d2113704c805a250aee7b55b849af048feb3536fe73ec4f0bee97006881d5eed8ea38ba1b8d16a3bcd91fda749b77d688997bff09f104a2d8cd8e133ea4aa764b237787358dadae1c25092cfe09f79efeb8eb6e20c39cafdceed90e602f221fe6b1d69" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 256) #3 +depends_on:2:3 +4:exp:3:hex:"b1a1b468e1d59716a23fb028e295588f17be6a79e589027237681fe9ce354860b1cc33918a64c8be171e595ee6a3b1ef46c2ef21df2815528482ab4c7a32449b97ac75a51dfa1c7e67a763f17e97bcd6":hex:"77e5a3eb6ab38419f84b57997627c6bea79703c95bc1cd24ea73eba2edbed540":hex:"52aa0be951816d21a2ede89f53913f6d5d70cc580a1cda8a49f8e49a6befa909":hex:"5bd8e4ac61bdfe752b5a66cf2e048e812a8aeae8e20c3c8c43f31180e4b18303":hex:"af5eab21e4dd9443b1b16f40413faebdb0e086991dd3c53c8a51bc434348311b":hex:"d477404bcaf0ed53788354705f0fa9f46c4e2bef2cd94932b614b3c34e0b0c7c28d7483075c9745bfbd4e31e587fb1db77d557fcdfd3fea47da3f01e42635ed3fd87cf6c98a2f20aa833a1bb74a15b158e47841cebe53e4d5d8c85cae78ade156e025a7737aa9197b122e73a29ce0a881c7adc8ec228f4c14e56c722acb0165b1595f010266151801812c031efcee4a7739876777816af8baf4d29496912a012f1f33c07107b2db5ebd681722dfd76f3a58e9d7426e7fa75e326eaa416c5d820" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 256) #4 +depends_on:2:3 +4:exp:3:hex:"098b8c107fbf943bcdd2199dfd15f130a20d518e95dc81988748e1f0ecc5c45f74622ca2940807df86fb05f0aab4727525f19d1d3bda1f70825f3e1fcb18d29e8e410616c105fda9324f4617af39f021":hex:"220bbf23394c3cef156f683d05739b76f37538a0d360600bd52f0076425b5f5f":hex:"af88f076ab39db1dd0e7002bae187965cd144382a3d1ca7b1ecd65d346f7c090":hex:"bab9d09dce5073d11fcdf9539501dc998b6fffa8a0716edcf583a7d7385ff41c":hex:"caf8d4e10513e5ceacad6f9f145a6f79e5c245aed4965ae85e2e7c5914f97510":hex:"f556494b3849d78b06ae75571f0b9c8c108885fcb041dbd7892bf639d8ff6c82e19e8ce2d5aeb58e8b964ce4f75976a0a9c7f3ec8373b83150b88d6c58ff9b810124d4ac62d955aa64d194afef2f77de6994642ec86cee40aa7a5591e99a63edbd8bbdb22fc3c2506beee6d507fe34fdb4d4f525dcbe30b5747ff920a13f9e230899ffffbc5615e994ee96a1bfd8890cf607379be1a39d173662d0967c9dfea33b14d78cc8818c2a1956197f85e92bc11133ac4f7657f2db20eceecae8ca636a" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 256) #5 +depends_on:2:3 +4:exp:3:hex:"f54e9df92752d30eec01c3756d569bdb39abcdedab80b0aacac76ab406723f480bb359a5fc6c7aeebb6719ab44114a75afd340af202be3ca30e4de794b826237105202dcff5d1291cdaf266673275825":hex:"b69f77d5a08850a13f8e6d06847c4bec181ac0f6b720be3c06c0b67d44843c6e":hex:"40f14c3340e7092b898758ea3c36750943acac7fbb6a83f0df3392f7936749cb":hex:"5bcfb0786c447675032d2a32b304f25737de59cd07c84d3875c45475b15797d4":hex:"656ab204e2c1834f346d89c37a30164db414827d83ca732c71ec71efa8182c28":hex:"6eb8f276a8ff516f789d94d997f33c2e40b227776fae0681c83fde659462b72d37cd48c95899530ca072bf2470986ef29dfb193be7ee9ab3f8cde2317c9bf02a5f901ccb62bb665bc3a109eab7e3910888a522c765eb49b11d1ad0fbcc45abe3841e9bb4fc0e73188497cffba54f3ff82260767d0f70ea1668f45192e6719102e75aa5cc43084c50bdbd1ba491bb61ee9e5175092c1f50d56bfb68977a567e41c1e05d2d1523c198ded737079131fb12dcf847219d71fbedb5659411d7aff2bc" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 256) #6 +depends_on:2:3 +4:exp:3:hex:"2cc330b34c976c859936c21e2ad88bb60ff153e41131567f58ad34bff5c9cb418939fed56356af7fe215986a5d0ed8e9a078dcb1d3fcee6b99714eea3bfcefb37a344a69d414965539ddce9df239be2f":hex:"bf531083f35066ebfaeabd67b82d392ef6b121e7d9603a5407c5bc74cd596023":hex:"51f223dc461ac2df1c4877f65ca876d635d50939fa9dd586c176d8ab73c6d605":hex:"ff9d6807d71ded1305d9e2cdc811dac2d73746b001b53ec8a5509c4ce0a07efa":hex:"f5222c8966659974dd8a7244d2cee588b6c9a2700f338683fff9ccc45b6d3807":hex:"981abda0e405c976435ec7f938570d911e5bbb32add52a8b94e528486e9dafae139eb15cc2b56fedfb9e4b2d10dbcaa5e6ab985be16c62b9b75a037684986843a7a0e3baabc34859253df2a053dcb0352a0554fd2d4530de0251b1b852d1d3b6e08548e215902ec8dc46ee89f3fc262c7a35aef8216b3def65bd56f0482a18a329f96863afd951307740fd8653d333f932940e2a87523afbc162c5c1d2bbe16f33a4b0ee0ec75bcfa6aee6d8348265938738be638f78506ab731d3e9ab345551" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 256) #7 +depends_on:2:3 +4:exp:3:hex:"b4e5aad9bf4fb03ded64e4bf40ecc6fe2214049bd5889a5aeea0bf47be8670d329e6ed04538dd6d207767c367406d482ba7ad29231fd944f00b8d9b762935b93819ec62e0ccfd48f619ac40c9c208304":hex:"67826d2bf9651404d5df4db84ea64dcab10697ecb90c68041f421452109af3c3":hex:"67d6983465facf33369eebe0be12dc65fe736969e8f41478e44ec25d461e4435":hex:"65f97c99140c8c9ba2ce37710b06f822cc0eaa03589157a3b575bc9c423afc3f":hex:"19c37886d613d24b0592ea0b3a465ec8f8a9229abde3fb5e0122032e1ac8dfc5":hex:"05777487bc152260a852e1b31a091f8e929ed22d8a652a77e4391abce7efcf0570df3d466d56dc51ef14bbc55309c6831655ba97c6050e563083fd1f2fe65b43d0cf8762ef6598d967b473b68c4143287f70d096a6ea120e3c07f2a95b80b393ffeafac2d0309d349bff017a49b9ea547a5776b5c38b9e981ed0a4825853cafcdf0f17269b9df6189fabc30388a383e3c28949625ef3d59a2c371ef416ace8658adc0e0b0104f1acd4b349b91b660d64412168d3c9e29680a5e324e4d0ab9258" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 256) #8 +depends_on:2:3 +4:exp:3:hex:"27ae2120824f3d416bbea1f987440c507a4f01fed08a1be27e6ec16390c92c4f8dab04203543caa3981373fb991d855340c29baf439f23bfb599a5eeb95ec2059af24dd86c0825957ea8392ce3d980f1":hex:"cd646b0d1971f249f4c4d1eaa17e60c311d813057e0b71819a503aa41e5c6b21":hex:"90ee2d0bf06cb94190e6505a75d12dd77c266497dc99c5f89bde60be6789099e":hex:"7d82b50cdfaab9b5d23fb6618b59dd28cf1a83c77ff2993d9f1edb87ed7bc388":hex:"f7f728d8ef6af8c5e77cef1e837030a6aa5c12bc81423b0ecb07a2db95a32a28":hex:"4b25aaf436eb600a103d3fae8e301d2755132b3de3c8b4c442129a88ebb3ab20c4d3a54078ecc4197994ff04bf0e460919978d47e45c7d10d76a1e63ae34624e2f64125ae1bef304efb1af688f20d8e212f6df4e11243a49177e4b6456010d784d0e4a94e75371a75c4050b27e48359549f8268dd2a2290ebde22282d96b2f38e3f06103dafae5f54f0019bfb013df39a76482ec7f878d26ef0e34c9c21e67fbcc3412aa0739e875da0e9ea1340592144eb232385fc7e605ecd10fee45524718" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 256) #9 +depends_on:2:3 +4:exp:3:hex:"dbd5f508e8226acb957bbc4914ab13810b9b5b2b51a1b55cd4ac60f6b6d4c370963448fd323968c27d97e005b1a079c9e3ba151887006c56593eca7809b23cb768f5b3701b456bdc85fb5672a81db2d9":hex:"0cda5d501072cf482d3c56c49a3c929b423f6e15a3e835888b3a9873647ffddc":hex:"d3f38ca5c0bbcef46976c6a5965a8493f714aa2c8a2c817576cbc0bd6652beb0":hex:"20014421f9af259892f017dd5392cc973f103d4736f3866e66329e5e7704e0f8":hex:"686aba6c9c6c221b2b4a7de766963e4d9880676e7e6ac8e644dd273fcee519bc":hex:"b720c7c56e10c9e436036fa8e1f1d1c0c0b7246c28bd36e5f3e88f988684b95a01127bc64cbcf12b9689f718baa52042b0837fea791391ee2ae42e54acc571239e5b654486a025ac25f46f10280ecdc65ed098e65e07dc3870b17af8bfd58edba026dc12b4ff04830ef132d07dcd7c62f67172caf2620a204869a81e39809db7befa25c5ed8a74b6d306c21cfd3778180d444bd99314a430ff4ef6b7061832df9b82603d6a0f646b398e7dcd8bb33a7926bdfa085a450d3de68c1e8cb2ee4524" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 256) #10 +depends_on:2:3 +4:exp:3:hex:"7093224d6bcf0915eb75360ab4bb789c15834a371baa24deeceb33f86e8bfb46f4e34325ddcbee671f9e45f7887c1481238993ec4a309e10d3f8e3952c840d564644062534f985a6b4e38688d2c800a3":hex:"e7cf1f32ba369cf5545ee672cd6746ea9a336de7039ecbb25419259eabdfa44c":hex:"bb186a460387baae27c11aa8c65d6ee003577eac47b259254a933f82ac683250":hex:"d823535ed974b7ff9f19dc38b9494aa99f88143e3383b5a183ec00c925bdfedf":hex:"56548af797f4a07ec42273f895822d877a311bf1f8dd5c96fd8449732a13a921":hex:"159c6923fb71f9670db4eef12dadd143ee701bec9b0f76b56e9b1b8c473eecc3e38cf06c8f3b0c3d49580e49caeac0fd48da5f53d0d3e9c829c253fac4e4f09730177a63e0e759f043169e91459c9cf959d2230c7b94be168cf4fa02588d78aefbc855d55e444d671a69d274c66ad1851c56c0d880416bcbad08523cefa2fb384dd0f9f188e8a601ce0a92d42faaed0a299d6a9c86958854712427b35e73a0817193b50f3557e66d64ad80fa9ff87427b7de5b7e6312d1d9988ba77be90d4cca" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 256) #11 +depends_on:2:3 +4:exp:3:hex:"ea96f8787458e505f5858e31bb85b6e335206f6d6d04bd9d333029193bd2a04e5f85ad152675ecc090119aff7720739bdbe34551ebbef10e822cd29e9ade1488c21fd9e798369d585d6f58168d509d94":hex:"ba45df1a14e23361201a467d2cfb7a3dce3128069a8a59a9a388b8e31c48efb4":hex:"d551272e5a60aa1232fcb4765e853de2ccec08941acc75188eca37120fa49aac":hex:"c1b34347691ae9f1bf6be396e8b49aaedb38307526627399fc10c48748c3a7bc":hex:"722c0efa445262f5800abf75e43d9daa44e3dcee7a7528f7313ee52fca9f1803":hex:"e2f873758c4e71704d8545dd1eab51206ac11dfdb00dfd1ec9e53bdc7f6b57f5209727049d4d781059b0bc4b6091c9bdee947127b8c8f03f1ee5f3665720a4f6c6777682ef1937719052254aeb97e3a17b6b552bcbc9154551a7ed41d837a27b6c37b426508409b75236cc156dad89d896f25c54467fd45f9698a11c7ce01bfb1fe171e4d33faf73a30c8992c51a838e9c0537354371bf79146a79a6d42d4e987b9773377fbf384979690b2c04c332f22567fb0921c3e33088d3b011921fca6a" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 256) #12 +depends_on:2:3 +4:exp:3:hex:"92ac19b133398b7d8ddfba3c6046421b3618923241097b8f68b6c7430b6d232ae9ad8f864f358afa7cac72bbc4fd90f16ebc9c15913c11094bf7aaa510e6241face016a99ca08de6525a570bd1741dc7":hex:"0517ea7410bde64edcc70df48f3c87f578b38b8c7087def16031e52760037df0":hex:"439c97f62d6b7aadac64057c0003a41a44ee549f60afa92797ee7c9aebfc8164":hex:"669d42f9901e029bce7584bbd22a13a74e6f6ba50441a2633773bf5ac745122a":hex:"8bf3c1a08b2d8459df96d6abfa90725f1a735809da78bf99f7fded0230771804":hex:"3b832a7f1df591bba571bf7662914b0e5a3b34d38228e377e4e7dcb4b9cb396ac268d71fbfd2e1a5cff4429feba36f55c7e45cdac49a5fc8a787292011c61f4f102bb9a5d9c8fe1cf047956f21c74987d80968d2e4cfa29bd92a35cb96dd372d9baaed8d31ba3462b42084dc1841a4042311abfe4b3358f56c9e0c69e233638d3be56d0d269cf110d5200759eceb63fdf3b0ad25937857d129b68f038fc73a842046cc7c45292d6ec3766aafbc22f1491774624751f2c50fee830e24a34a27b5" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 256) #13 +depends_on:2:3 +4:exp:3:hex:"7a346bd6d853803d07844ca348f3c4837fce3e3a727f712223da248cd82db6ed4a9710cd8b9f2e7b593cca42da7b1a1285a78d0c764b24c3e4b21d25919c5400b4adaf0684c787326c19010728bc6f94":hex:"3e8de39ab206ed166b203c97103059e6a9317d47f7a76bf4511829cc2e27a4cc":hex:"327976aef239b20833d36b7f352e8e6570f8f325b568975a661b54b8ada49128":hex:"9419cdf1c59abc03013d7d443c734aff57a6d97c870a03762c50b459d38f5e09":hex:"f2c9c49c76bd683d42dd9de9d45a97b78710f39f2ee482e877e3b0844647f9e1":hex:"24a83991f9455a0410213cc138696cf4eece7b2caca0a627c6ce023b7f912c115768ab8aad0fb10e35591d370e0372fe020823365b5bbe713417bc2f050cbf86fd626caf91323271eeebd5f2aae36fd0aced63779565604ef2653a0770fe4e42649eceb6089bb7662ca3d744fe178f5ac5bc20ce7a90325497f55ffd9b25c59a6b82f07553c080f0c45fed23ce47d972605a2f603b72d09d608548a04031dd2bbae9ff898201e4460479548d70b176e917ff3e3683e49f3330cfa77a25cc48fe" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-384, 256, 256) #14 +depends_on:2:3 +4:exp:3:hex:"2d8fb8796d8a1764f8c824c55b880c53d2205559afbdf1cecda3dc2d05bf001e6252076dac013c7094ae72ca80cafce2cab30a160ce49dbd646710bc429c163231d73fe0e121f8cef8c02f70598fa853":hex:"feea8ae0b299d5f79315383d938bcf9b536d11e036b28056bcbbc7fcede21cfc":hex:"1a0fc47fa95cdafd2036eb5314e0f56266e58abb0f03b5e679638945b1fbcd58":hex:"30707f376333df203eafba7fc52b40d8f1d97521a71d579c8b8457ac1328cacc":hex:"f179c19e45c4a4f3cad8b545d116ca29e45f322580b7fc9715313be53f047658":hex:"eaf7523b910b653a305f9122363d96e17fd22ccb9b6158cc42aceea40c34eac73e496827dd5fe4312f102ba6aa7aee934d1f41609bf3e14c29aa3aca210e3cabe70744a09f4c180f3d1ddf8be0b530403c5238761226f2c2c7ae29b24439afd65d6d5a0aa8daa11abce36df02ce61d352ab08965122e16708731d72a9fb5de071c20c6cb039273498ff1588c901d997151edbbd41870031ee337b38233edfd78aab389fae2bd280e4bc85d1bd6655269c3359753b17fdac502c3a2e871149fbf" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 0) #0 +depends_on:2 +4:exp:4:hex:"48c121b18733af15c27e1dd9ba66a9a81a5579cdba0f5b657ec53c2b9e90bbf6bbb7c777428068fad9970891f879b1afe0ffefdadb9ccf990504d568bdb4d862cbe17ccce6e22dfcab8b4804fd21421a":hex:"":hex:"":hex:"":hex:"":hex:"05da6aac7d980da038f65f392841476d37fe70fbd3e369d1f80196e66e54b8fadb1d60e1a0f3d4dc173769d75fc3410549d7a843270a54a068b4fe767d7d9a59604510a875ad1e9731c8afd0fd50b825e2c50d062576175106a9981be37e02ec7c5cd0a69aa0ca65bddaee1b0de532e10cfa1f5bf6a026e47379736a099d6750ab121dbe3622b841baf8bdcbe875c85ba4b586b8b5b57b0fecbec08c12ff2a9453c47c6e32a52103d972c62ab9affb8e728a31fcefbbccc556c0f0a35f4b10ace2d96b906e36cbb72233201e536d3e13b045187b417d2449cad1edd192e061f12d22147b0a176ea8d9c4c35404395b6502ef333a813b6586037479e0fa3c6a23" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 0) #1 +depends_on:2 +4:exp:4:hex:"8802d43f70294f532d2af0be0852b7a9ef6584e8b1631845306b583ab059111c0a88cc670b8a827e5057b902563840b6ba6f6919295f2206bc8738eee2b4e7b4d3d492b945150c76edf466cdfede4868":hex:"":hex:"":hex:"":hex:"":hex:"caa3a5f9822f497fc3335c3a4262294846cd4a6842cdb290a011a94b6c3c27a83622dfc7e5c9954e91feae5ca8034083e2fcb493e210e5caf31ceb63a7f3d59dcfc3a859dac5c250981f7b663e4ef7222eded353c7f42923c6c6db006e927b4b5f44b73e986ddc4176ac03a5ec619b3ebc923d4a6d9430e5b9adf75a5298e76a110d0a2a4e2f7841f900c4067cf7ee68c356c4f5d13be8885801d1e578ca4d2cc32d48b5e6303a0bc417afac033758f3e812693c49128e0db1bc9ea2fa2f2c45cb35792123af63f42dda3abc7cf8bf5dac17987178cc0a64b0fde5c9ff2012bcf57e93103f08db1e3a9f727e1cf753ea44d62ead2aa5410b9e37812c43d60eb1" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 0) #2 +depends_on:2 +4:exp:4:hex:"a53adcd8c8ea16ba80a57d9a55955197ce0d957bc92d8a0b548bedca149d78ffa9dddb64710d5dee89f1edd37d8b55dc2f50bd67e4a6ad0f3a01947e3673b10688178710ba2e7bb5f3dbd826c792c9d8":hex:"":hex:"":hex:"":hex:"":hex:"7f89db3d0d6cf7c5557b4599d7f4c8b5235c00c9cc393f734ad7ba98cb8e767ceaa529892dc30d2885f161f47b9c81dc2811baf12f120bb9458096c183ae35e198e1a50fb91f863c5d82b27ed10864dd6fd601f4a1fcb07bc839bda185a9b18ce45d800049bd2f41fd909a12eb2fe8ab3e1d2f0f1187109d61e2af6df0c5cb9fb801ceb319d0aa9fea918ae9991720e4d9d79ced8285774382a4d89001fcfb899a7c3fb864f1ad2debf5f5c39ab04496ffe383e9efda0eaba48325514b09a253640f386fe12fd1b25da3b2373ee14ee9f2ff06fe063f771624f538c0e5620029b9490f33e5e4ff1a9bcaba76005c829e0117d345b73f986d7c8276cb54fd87e4" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 0) #3 +depends_on:2 +4:exp:4:hex:"edcddc13604e036f16687e36bb576cecd71b20dc78f070033d8b6f1f8125ba2d2d3efdd9f01a93910ec29fc4718420a21385f8798218e1aebb810379a0871b534e067b04d6ec9d523f7cdc8d45bed4d2":hex:"":hex:"":hex:"":hex:"":hex:"df02ec9bccc25feb7aa4787f5f63a92ec05b2cc13fb92c20924aba9e1723436469c87673b8987ef19be99ebafde91d293ca6ec7c1fa4cc8902a57417338538fbf897772cb96085768e893c5a09327354006074992cd6a517d6c57c7af5495a3d645798eb1962c0b56ff0c8c98e18c0963e5a581230909981b301797d779703f31b264f90d6483eabd8a41fec8ea69a57befe1f53d470fc82bc35029a4d089eec7ca3986485a51ad1e56cdf2dea5fc3d39aa997a53a9924777eb6f3bf1056a578fd32aca125a74c8d24acb7b99c37f34081850712edf1b6851f0a5e640ae7193d3f49f3654aad3cd106e41e78f1e93a8a2d01acde0e6ceb3f19e0ab49f4bcbe40" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 0) #4 +depends_on:2 +4:exp:4:hex:"7ee0378eb594bd2ef129f35c9c1d87727c71ae472363a596467a2d71871863d8476b636e2ffdc0db70be5f7792ae8a8cd40d3f03347700d3ca515880cfd7962f8ce1dcdfc5ff134daf552f8c2a911758":hex:"":hex:"":hex:"":hex:"":hex:"cc14c0e72f186392e461f65a0c0711e32e4b33a407953215941fc5d06279d08770b3d165d568b2fddb94299de2e7a6df0820a64e8779893390ac173801ef85170a52b9c0334b4fde55fe08e90b79cff1366bc43c0fa8f5f8206cc468987a38123bbe0d27e7ea2d21e6a1f02619b8c270a5e416ed50ff7e42d9faa2f8d383eda55899d85302590622ada9ccf5d144313e5df95688fd1a9c48ddcaf7af03068e11729aadd626761f3be1cd36188c89d08e3d8a090e7ecd7394077bbbd2c7e1766662ec882901941e09be9943a72a34817141611ef84c0f1848efdbcf245215f290427a6247174cf3a08e4110d3eea05bb85484f75e156e2fe5ea0c6723d3f8f047" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 0) #5 +depends_on:2 +4:exp:4:hex:"fb35f3ad6b7618735ddd273d95b442a362b6822502a217e893be3e36fd7be4553cfde0edf5d9b5f15be9288ff78fd0c09ebac49e71484169170f343f4b21e244d1391f963112dc061075d9b7d26cd171":hex:"":hex:"":hex:"":hex:"":hex:"6f6814f55c7e226adb7687d73eb4e9b909d47f4b57693ce2c543436318faea92371e951d5d338c06bd95f0e7debd915e2179beeca9878faf3dbeafeabe3c9bc8d6445f863649c66e9c3609b8a3d54080b68ce145b2fd4ecb3c93801c307c554513a210e49dee13828b20dff092de2f312fd60b2aa0af4ed7e564f06adea6b3dfa74636e7ad16deb19e95df71d2860aeee7532aa9ff2a08c768f1086abefb60d860657c8bd7972ec7be3740293b6471cc55262cc120f97c0c08de78b705068dcbb2d0c656ccb8e2c6e3fed199efc888492ec641d4a54152366dee96008a80794cb3b4f5a36a34d832446d03991e4374315c67c336aad317920b99f9c35a493582" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 0) #6 +depends_on:2 +4:exp:4:hex:"a8db61234723da2f0883224563a1bc04c7b4d040a7de3b659dea0086bab7f454c73d1f918ff29e2f98cee562e05f5ad6f2781f5786228cf0cbb50d2c8d94a1307383d41229a90c0dcf142b94b704c56a":hex:"":hex:"":hex:"":hex:"":hex:"0fa5fc008c56ca47024692ff55f500e312423818d1eeb77b1a3442058718885479b405767b879943e73fb16956ee2293b23dcb93cfda420a4f37ca5eba1aafcb8700cf6f38f2acac88698f1c0abea975270dd4436292c8ca60576690dfd9137080db2b3a42107ecea5a631ac413384a9329d60a358d2c58647eedcac164df50820e879374bc2e08d971bf5dc65afa33ecd472e5fe9677635a79ad58b489933fe9c1f992429e5d16dc954d2de059b70b8f170decd1f22c36b034e5f175138846901f6fd7fcea1491846984ced8b595c411a9f6d21f3f15fa5a073efb5f829f3b34d601aa91ed8cc433458692f44ec1930f3ac5781ea001a3b79df7c3e82ae5365" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 0) #7 +depends_on:2 +4:exp:4:hex:"95d7851bcd43fc71cd9656737a0b05b5f83e55451c4672061230b9b34bff71c025bd51ccc3f4c2a14407d5d569d250b840e24828c319c1b7fe093e5551f8acd20167b2839c8d5ce9710532d69812b8a6":hex:"":hex:"":hex:"":hex:"":hex:"358b36b4b7f119fafcbfdd619adbf9593048ed7364377752def3419b85eabd444e87d1e952c45f7c9bea3d29f845f297dbb48c2336cf44216fdd2e5c164c81ac688feebcf460910ecb8b8f6c3b0150195b2c7f1fb9988eb60c0564f0e089e4c269cd19414f6718120ad3742f96730233dadd3fb7d9e898ce38b5b8244b0af62ddb1e2689e9aaf27017ea28699d08b933f9219676a98f817421c363a526798833f9e763dd19341f56599cb594f274051151b87bf219d4b87b72eee5bf4bc78053a59aa5040ad334e08283e060b7b528a9089f24b287334070853c180021b50595e0fbbde18422127b0ef7efe92b98788d6e85683d97b679861154863fb0d4f9a1" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 0) #8 +depends_on:2 +4:exp:4:hex:"ee7a62efc8403a0f988711436efacc44b5098f9a3526dac49ad9343c80c98eec51f064968eb37d1a8bc8604e3324e5a64a99315401a2df8d8935e94fea3fc5990107bae19af886415edd6eccc95ee942":hex:"":hex:"":hex:"":hex:"":hex:"7e3a0a32d6954bad579d54f136594add6cd30628bdd53dcb09baa98884547bcf3c8e84e4c01b0660d62dd8b44ae6ce830447c5480f30942e742bde5009fa769ea8662a8bd26135bb45e5a380439d5b1b0114969f42bafe4d1d7b7c9a7b765573538a7f5917af85bfa1fc57710e10eb4a00062c176b93f4b02255606a110840bfbb9131aa290635fac52b260190e9172cfef947f152113ff3cb3de73e22eedfc44f143b9c23c1670a057cdedaec28b145ac2e699f366d5d695d1cbd258b59d4c88bd8d1062ea578c758d5823c43a85b5fe1aaa8f3e4b68092d4107d6b11eeb613ed058747259ff0eb685bdd42b9dee54c1be9b613a4ef672c4d31ff84a73f553b" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 0) #9 +depends_on:2 +4:exp:4:hex:"bf02755e4c3db98cd26c0abededb5ce360495c1a2ecf194e922d87decef4173584a3788dad5b308c50e7c0a0a10c7a42f3c7b2a52df2230cb8dc7bd71c35d448fc5b1eb4f903ec6342cde118ac284c2f":hex:"":hex:"":hex:"":hex:"":hex:"ce2806594da7a6f27385593b14669b5c63b6a5b0240d150abf0ea4daf32574604fcdf10c4965a9220c285885ae2d2cc1de8a86796357741645964f102e65150d1106cb5b8c5bebf5fdcd5e64dced9e489c188b619c2ecf96e7f96861dadcf0e7381b4d628165da0ec5b7c90d369afb705c39986e4884adbe05fb7b74a9ba3b354e858697a1db531ae32ae8184658688012aaeaa4f69b85b802f5adae64f049857d1314c7532bd40043e61af47cdc7ec8e85fe61827de39c2f1825fb0253ee73ca2423544bb64f8d2afe84db5cc8ad7694e177468dcb29092b4c85d069ad7b1c41e139642076b8075ab0228f542fcd2a7a6340917f82b7e356e5652eca24b3031" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 0) #10 +depends_on:2 +4:exp:4:hex:"a188065c9ee936384c5572b0910360ecd984cd0ea926c86b269f38f1040d41679bf9a91bd4e986f500036cfafc583edfff1170cea9f22a3140e7f4d198630fa353626518062340fd2f5b0f6b4fe7e217":hex:"":hex:"":hex:"":hex:"":hex:"ea19cc91d80d37b8f16388fa62fe8e1f114f32f2a6108140b60c1994432b18445cdc131b21c884c74d155aea2aa7f62c7ffdf128886cdeebb395e5b8819dddc8c7834475d19162cd6a9c037995e3f9381cd582eada424ea6b67ad734c216f8380bfc8f5dc0e7a1d93c406870bd64a190a670a8ca94dfc0c02b61365a1d908a6b980627af6bce02a42dd9dee90dba722cf6bd7ab86cc4200af93ed226cdae14f28e242c6f96db866631b258be010d47c2eb95f01fcba4fd71646e6db54947a0d4dff86a107e226b1e4343d8a1d233369f8b560f78c865426d341f5f0713748b3ac4031d3d84bb057cded60b11de44cb221869e42bb054127388740e52535a11ac" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 0) #11 +depends_on:2 +4:exp:4:hex:"58ebcec4539f4af1b32a854181dd0f512b8c704fa47537096a769eff28c59165a18226cfc779efc9550f7be02006d83c230cd6e6909e301d1e99ecd1fff2b2cd00a56c7a684c8907bbb13ce3e9a0cbce":hex:"":hex:"":hex:"":hex:"":hex:"6f4e86f309f69144603961c5366e4f9b16d10c10593ea689a8e7435a327d2524f4468813ea7f3248d8d4bbe17b175cfc40617149983928b267dc0c4db46d2c17fe8bc0764386758af1a824e12eb897feafc1c7ef66f80ffcd993aa016e139991cde8435ee6bb0de45a7fb61eb1a6beb76e012b848ea003f687537e4bd00ced37efdda66333b53a8dd5220c281fbf68bfd9e72285e78197881efc540da4c1ba80a226013a2d7098d34af4112e7b8c865af15409f6901b952fee4a474e4027051e1dce879ddf5e84f3947dc9b94119d67e6b48ed6fd6b1f813c13d3ff30e121efce7918533925f50c8e381e87ea685f993619bacc9efc0aebc884b450646eeaa5e" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 0) #12 +depends_on:2 +4:exp:4:hex:"acad606154f6ae06738d67f517cef4c8dd8dbb2ea333bac9e69bc0a4cb98877bfca3d906739d442608bfe66ca48c3d7d01f7d410f46764bf2ba4268713ba76bf7026203e35313ee75add608509de867c":hex:"":hex:"":hex:"":hex:"":hex:"f6621bb82d8830707fdcc6f58a7cecc7501a56f44c6ba783f6f8187b21f5f3eafd1f38ae780584ba4aca59466f6f5fdee1e82b28b5f8db4c4dcaa28f030437de407b5fac632c96e43a12d13b54901fb7c112daee2699d8256c6ee26d60bb267dfda2c6d6b61c9c67cd5a5b055a283fa02d06cbb8b9b1c3131d7decce4db61243738af4f6652bf2be23d4b49a1a7bfc711092cdf655527ee785a85e90b58fe478a462b65fd9868f821ffba56080064d74724d8c2f98cebd9eb8fc5bf13399b04cf1586334913e8e9232e13ba10f9f2c365e50154ee91a00d981d4fd7a4d49c3a2cc0988d4d712074918f11c378c40e762b610c9f4df3ef58d728a23dff3e035dd" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 0) #13 +depends_on:2 +4:exp:4:hex:"d2715947b420ca136a4cd5c921b8fae20900679d87ffde5bdadc7b0fb532f35e100d8d0b59810bf3222b07fac3a3c334e4ffd96983e51ad04c2c5bb7fea15e8a03e36b92f487b314a191b5ae4862cfe9":hex:"":hex:"":hex:"":hex:"":hex:"75751dd3463cc20d3f27e3ec085ab6fcc37285030fabb2a6e43c0d438c7d213346d218d34e3fdbabb3411be233707257290599bbc69512ad971cec2431518f38022816b9f794e2328b39a8cf6afeafc4d1f408f6e05863b654369dac0867feee0c17034d6d07ef22dd217f5ad0f1ef25ac82fce018573d0a2b0d5a924aebc5fd9c3eb9cbe38ae3d60e0e92ff800c9b108fbd85b2cde1b651e080e6625ecaeec9be684f1f7d98caeec9aa5e1445e5c3de6afb590fb3be3058b403df6c556963e98cdb30460a3c688485bfae28703b38a5c42454d91935fc7519e1e3b311ba117b1bcfd480c015cf8e535af66521cb35833621bf1026139164052aff6aa4e51fdc" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 0) #14 +depends_on:2 +4:exp:4:hex:"e1d2d72e7907e7214cb266f1ef641395e54b39e8365304661b0bee371f3246528417ffd58420e48ec063de5df4462e39e6cae1b5f3a3a12faaaf39b98ee592c8d4f56b9d4534add5104b357d788c23ab":hex:"":hex:"":hex:"":hex:"":hex:"626a0863321ac75e0b6240ea6a619458634a978245c1533819c97114e63914009c9cab732f1310f60f64f033b00729424228671f33425099820ab108412d460f32c0015b73987e937b9bbdd29e5bfb8dbb6c95d2b69fccbc26b060cf0a5dc0992fb0e76b38bcd64fd7a726714e8c8542d44b2f9c5d2f2f8cb370b95e086b07e88f492f51fe6c288d78b76d0c3a6146c9dfce53e76cdbbd158d2944dd10197247004954d92f6b1df4badeb4bb1c98d7d3da2054e3300f6d8dda8863422e6a042c2d84b2bbed6be88f0704763410771b3786d2f6d968b6c224e0cf535e8d02c178b2e0b90e8a7fca0c431b7f3cf41b0a7c17778fe8c2eeb442c910ba88c7c364cd" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 256) #0 +depends_on:2 +4:exp:4:hex:"4686a959e17dfb96c294b09c0f7a60efb386416cfb4c8972bcc55e44a151607a5226543b4c89321bbfb0f11f18ee34625ef50daaf29929047870235c17762f5df5d9ab1af656e0e215fcc6fd9fc0d85d":hex:"":hex:"d2383c3e528492269e6c3b3aaa2b54fbf48731f5aa52150ce7fc644679a5e7c6":hex:"c841e7a2d9d13bdb8644cd7f5d91d241a369e12dc6c9c2be50d1ed29484bff98":hex:"9054cf9216af66a788d3bf6757b8987e42d4e49b325e728dc645d5e107048245":hex:"b60d8803531b2b8583d17bdf3ac7c01f3c65cf9b069862b2d39b9024b34c172b712db0704acb078a1ab1aec0390dbaee2dec9be7b234e63da481fd469a92c77bc7bb2cfca586855520e0f9e9d47dcb9bdf2a2fdfa9f2b4342ef0ea582616b55477717cfd516d46d6383257743656f7cf8b38402ba795a8c9d35a4aa88bec623313dad6ead689d152b54074f183b2fee556f554db343626cea853718f18d386bc8bebb0c07b3c5e96ceb391ffceece88864dbd3be83a613562c5c417a24807d5f9332974f045e79a9ade36994af6cf9bbeeb71d0025fcb4ad50f121cbc2df7cd12ff5a50cddfd9a4bbc6d942d743c8b8fbebe00eeccea3d14e07ff8454fa715da" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 256) #1 +depends_on:2 +4:exp:4:hex:"0bfd73a55c96ecbb6104fc1f91d8601e7b57cdf85d6e6b5360920b4e7d1cd02629bb1c55e637fae1608f389d179f4fd2650251a37ad27c2b5264b1605ed5a51df949086c10ece31255701733ee1c8539":hex:"":hex:"15b3816392285fc665572c48a168068a10994cbe4ceaa1955f07075039c73b4a":hex:"374241cf3073e2f82956c76897944ae9c43907fd6781202b10e953c3aab1cfb1":hex:"4d434031e2a2b1e1ac5ec98081be46d05de1b4d25e3b4dbc8f040b627f8a6f7f":hex:"f4283abc7c0f40478bbf0234e2f7656b7c6d1d356c12a3e1f76666baa19e8a05fc1537bdd2fe855adbec4ed4d287fbf571615f415867a2e188ab60b3390053b27bd8bf4745887c93e68d0dfd01608d6b306af273b66db6400daeae962882c4c6a19b363f24d4bd543a8bcc7935f078602cee1cf3c7b30343ae2ae0d5ab111764d719205fc30325b2f938b4ec4d0f1fee2f431e70cb1aa1e7d826d54b7b4fc50560453349d2c52f09d6f5eaac72b5b9ca9b00142d45abc550eff26f1dfb8229bfd1eb21e4567145d7ca47c84001abd7f5f5e7101b9941302929a37f2150620b899907f7216f3e2bb1fd028b196031692bdbc0d2769c448b024880a131ed98612f" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 256) #2 +depends_on:2 +4:exp:4:hex:"da5589e7fee0a023e01a50aa54987c5b6d70503b78403762cdb53c9ae7ec65f853df14cd7e30ba0eb703b912387469bf7f000e5dd78dd80722e194a4616aa373be2e093d23f2a4e7224b841ef550772d":hex:"":hex:"4c74a4655dcbebd1331b86bc224be30e6c3386ba844716d1a6938447ca7a317d":hex:"6397e8fe13b3ebb08c0b7ce460b5a149b23433e110b881a9c095cf24d236cee9":hex:"6aba359faab473d0d51f21bbe7b2ffef3a03b64364777a48f80698643d9b2504":hex:"49c7ea8e2740fedafd8d31571a240f175ab5eb83b2104f738f3bdce41c160c19edf7b2e2c0603d9e7f4f26f132f6b8bd8c61fb0eb391a5b4b6d23e3db20584e08be87648984d0b9f3b05c763665b110d58fba8d3b7c635a78ed8f56ce05414b8bf4e0985e1ff0b4f55eda8cd516836099ded2b6092c9a1d532bba363e0811cf507a22189cd3d20ac6e66380fc8dde32dca54ec76130cbdc0aa70b5bf3b582ce1405c69dc0e26f65d91644c557d1b55ef9cd893355e7836efcf53dac2d468c4909e1538ec1555c94c04b62448092f44e81be7c0984bec13a53a953efdc16d3497b1ef5fca39231feff486c84fa7756419bc909c8782559951d971157441047b80" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 256) #3 +depends_on:2 +4:exp:4:hex:"8a36af663dfcbbece9653be51c8dedd7ceb125d59dbd143ab4c37f21d8cca464920dd161245835ed81ff1ef1d09e367ed43118910c2b62d4bb980d0e4305b07e8b321c5a04b46d4a7dd4611aa328543b":hex:"":hex:"59c96d6ec4e49b8185f275057047153ef626456085dd77a01cb89cda060bcf3a":hex:"1492daff48d8c7c9e9e8f38130b8ab2de6e02c6cdccc25fbcd92d8aff1fdc66b":hex:"d2f40e7dbdface320825d0b766d0317f47c74fb55a5a325d66a5834db70d5eca":hex:"435ed803caf3e5c94bcf6ab61969bcc4e83f1cf7e73e481494d494faa9e33cdd890f112c89bd235d6d1dacbbcb73fb1c9a54a4b282032cc01787bfa9bf855edd91180432c27d98a2f7983933140f63688ca595e7a9fbe38d12280023d383891f0fb8ba3fb07d835a0d48f3f90860040718d341fe5dcc101b51243081563589b00a3e7c2095118c13b8784b387c1d63767c3c655025021b0eaac886d21eb5faae0e35fd073cfef4354c7b7e4ea1386d855e71bce01b30151629a7009b851fbc404731841bd24fac155a912d7b7f7a601bf6559e438367fdd898379b2864c548bc8e2c088348624e33c82990c74f994056d22add18e611665f1b45913a62f90845" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 256) #4 +depends_on:2 +4:exp:4:hex:"dda69dd5af052570a7cbc2fd378eeae936cd301b197d23dcf21ce06161f411320566cf1f231111c1ef883a88f356d94f2ba7e42d84574f39ba1946450fe7394e5f3b9a21005d797dd03f27e0477ba74a":hex:"":hex:"0cc796ceee78dfd667c309499dc4ca1003b2d923026c65826f280946e9f3f1f0":hex:"2483640ad6b242e5c6576df18db137a3cf0e4a3eb44bfdeadb9bb650ec816200":hex:"ed978c3f50c3ebbf4b70a75771a940f03eaf7c468e9c4e9af5f8bf9f947a9352":hex:"9bf785c4a1006da21f66ae308e6f23de2d1b01521c40404da9b605e1ff1577ca1d1300f0e47e922d02331c79b7c0b1e060926564979e0ebf77ee3e1f54907770baa80ea8dedb7aed1948df550b6ee95f2f71a28ec2eb5baa76eeaf0062e757500ec255369a9db75c242924d64a391af1536c3a9a6951aa991f02b7415a2ca77582e8d25bbdd023e4d0a0537c0074f5abe3ad34d24f5b98aac29a62c1c2648eb124af18c619dcda701e7a277ff1e00a8a267392419dfc1fdde4ee865c9f3744d92fb86b8aaa872b0142762bfcb7f9a45dcdf5bee93bd631b73e3acf9edfde744e7492b77fe38adbe631e7ffb2d1708f213136483ce6845398409b8550e7467b6c" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 256) #5 +depends_on:2 +4:exp:4:hex:"346e27bad2b0c0029148c5db5419a124583d2021fb74677b37b13e8643ee7aa9e9bc52f5c2689ae2bacdb7c8c8d22f5a4bbd2f0ad3479decf2dfe2e9312dbd682d96e199e07f5fd4d22deedd83c77673":hex:"":hex:"65262e1bda7014866794713ce6bc1ae4f0dce523c82ce43e6e0cf9a64983964f":hex:"c68c54bf2cad027cda08a3380f3bd525e354c4288a7beda1a7ed8d62931aac8a":hex:"cbd0049d6546baf0a8df2de5f15b29b77ad07f59b4dfe6a872f0bc1cad71771c":hex:"b8c344a8004072f76582e494f70ad0f7d21fdd13cccc387622ef04ca03a0a14faddbcecf8869e0f23b6f13fe58d9d769f3ac96ab9b9967150fb81cb5d773ca44960e9267e858ec9df23228fe2dc239caaff0f948d189248f5c075c3250270af7031dc0aebb327b004d84d0de699f5b02da1af448df0d13ae19f77586db22ede3f6d3d032d10ef2d7e2efdde2ce66a8bdc07126cd49241faff097d1467d862efc2a2e198e74b2e3293d4a99bac75e328a1dea3477f3f4c95edacdee48b14d26b054b5a268e242a2908449135825faa7b4fc0c9c877ffe7bb90faa7c3f136b2b4c78fad9f44c829bbf7eb8f747d501e150bedcdf4cdd6fcc86fc409a21e6e90e86" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 256) #6 +depends_on:2 +4:exp:4:hex:"09587ae0ccf5c580b44e390e68e6a0a6daf45e7162ea0418135828599918ecef9abdecba73d8c6d56bdfe005485be3b1ff284a85b127b00185f2f935356c3f87d076599f6b0fb7f93abf45f0d0bffb3f":hex:"":hex:"4e703f5f59cecd926fc0d94100d1c54fc8b19d165bfef16437d7be92802b38d5":hex:"59ccdafc72e5727e303d2284b80e9224c95ce5ed0edcd816c18a55aef681b203":hex:"36d72751e4d6a7c6cb2ead12eef191254df53622f6c0fd1f33187f09e87880e9":hex:"c1fa1565591a1225e0a61e1caf0fb6e4c17740c1b1088f47b90d91a0f99978068c162f14cf82a1ca936ec3312ecdec2f4b7944129722657ae20055a0c293bb678771b457940df23fedaa69eb1c1d487af7c7790b4359bfc84fc83e9f64b81b78b5617d8074d8c7fbb443d3bc671f8d2bb600c3fff2231e0d363b41f3f558ecec02b0f1d59a63b39f5b82b59bf88a0fc9a838a802875e7bbc06ecd0029bd62796e2047df49139bd5c34ef67dc930b1811428c4b547a6f67404012a5b97f93b2895dc2c2389070220a078d2fcd8244a241caaa98a9c0c7aef60fc856c61a3b8aab46ffd3f0cfd768d6b41e9714969587cf363b3ebd60c8c331435e9cd79430767f" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 256) #7 +depends_on:2 +4:exp:4:hex:"1ad037daea8ae2b9131f4490ccb453b670596978e097c7b2342c5ad8bda53de10f696e07bf91bb091c21898a1f728bf5873089840b5f022441b355f8e5cee75917400c5ca597d6fdb8f52874cba1ffae":hex:"":hex:"27b4177957fbb40bccb4832fd95be75ed8df2307be3cdd692e8878bad14ca8cb":hex:"c7dd83bc2e99c2428bb243c35e2544b10857620fcdf8964b65b62c58b5069a16":hex:"ba57de1455a25c66dfed3f8d2e3e198fc6ebfd7927f590c702d3a5ae81e80ac9":hex:"76957b10f67a690c33d9a5652514eff7b3b5ddd35acf424d0706725d331411f6cabcc35817e3dd1b51053de30ccb0210bf428caf0fd6e9e798870e2cac024643f5e15f6c5591e921e7531e60c402bec732e79f55f354eeb5ced5fb74513ac8a48cd6dd92a8f72ce26d87de25ffefd511974d629d17048f10a6315d1e06103f58f8d3a04391239d8b1e58cbac3eb7d8ee4fe9daa194cddfaf891a209f7e3f703a4c18fe4734d532d9b648d55d92d6ccf7b1cd5daad9ee400a52bc464ec300e4dcaeeed6ed9d741be4c548e45a6b9c7f73fe4b394ff285b629fcaf031a9ab3593d5358428db60850de0a2fdbc51d5c63f956d6b6625207e2a0e401891a92ef953a" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 256) #8 +depends_on:2 +4:exp:4:hex:"fd2d1b1f4150cbbf6ee3d8667e7f508b341b3c251c8b0abf3178d2fa5a80ed170a15bf55a6570f979080ead216effa5802b2e7404ad93c5cc41e17eb78168859388738fa935d1cd6b06422867a30b552":hex:"":hex:"8937c389fc1b905660861a4062c4e6542cc2c587284a279cbc86c432edf541f9":hex:"c1f79f883f51e1de95afdea8392e121a9591674063411ba79b098e0869dbce33":hex:"0ef847924d2fffbbdea4f12acd441e52ad39ff291e80c7a24802c4f03f09c8e9":hex:"26a17b546d2dc3b1528efb53b0b0f87e917116f03658ff6e6fc165fb891f483af8ede7fef8ae44ab9ad07961b4a22f50fbdf1714720704de4d80edd1b1fbab4443e961a441ce4e7959bae558e333263f79daff8d8f9e3ab0d73eda9f4d3e31d535c67edba3d788ea7250584694628eeb55df97b01f5c70b051356b5d089b0a368d98bbac36c690e188e58eefc9b5e2b59fdcad05b71bc111b786512d13fc0ad4b9f799287f03198a53b8be4a2183e7096a0b9fde728dc409414753077e436fe1af94a93241021de8778d65a4708102a49875416170b30a6fea290d6882c41ed8c838388cbb7fe881a4775cb323de353032c6e29aa057bf81619e1670823a0ae4" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 256) #9 +depends_on:2 +4:exp:4:hex:"d4f64d9c63708f9294fe1b1de82e160274dc7ea857f8ab6f4ed629cc5c4fed94bd2ca16570134810e71a3a7a38fdee4e4aaf3aa82871142efe6b7d7a4888b4f0c745bdf649f6c84fe5a6519ace6336c3":hex:"":hex:"a8acefe33c7d7933ca6fc3c8495bb315bd4edd94668084de3a4f742ac5ca1fa1":hex:"095006f15ac6f8f649ab217dfadd426a60ddab70c114cf7d52f5e6762a47e679":hex:"9f095084b18d6eec18bb6ba7ff6a876344f0d6d7916c10bd510e2e0d546c4a3e":hex:"3d3e2d085a23f3b08c0cf1e49252858855f28afdbfad3a58983b1d815b2643a968de890af8f3d804969d716dbaaf206985d413e2534ec6f2c9e144be0cf097590e3de9d63d5c530669d1b287f99d769e7fb6e2c71973c1ea02caf49d3e400bd31d578313d5c73bb52535a86b28f4252c8f6bbc9770554e294d0181904881d5224cd30bb95d85a952913f63e2bcb2c9e24e9a999a6c7431c5e6e2d76e4ea64480819ef95f40b72dba0f841cffc67bde3c9732aac9bc4dfde6e9789487ab9e2fa87103155411eab4c2e9b640c5ff417307467ab7d9b6036c8e81a51670525f1ca234fa4ec23abe6dddeac0c029a4b58d2fc8c24c3f57e2c2081137c92fdc373d23" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 256) #10 +depends_on:2 +4:exp:4:hex:"f30723bc93a3fac546286c2ec8faf54498eea6f8d723c32c7b648265dc75d8dc14634281f7a7d1870208bac4896e22fc72bec353ce3bbe4fe2672c0b9f6266408008d0d1fff6c9c797e93ccdbc72dd95":hex:"":hex:"ebc2b572f365a726531b3ddf7344590cc5f779771134ef7bd7aec4af95bfb532":hex:"0941303cfaba20f7c7c4ee745ec65be3c4f6d217f8e6c9a1f5e6db94949645a5":hex:"6039cc999268f1fdd5ee2979e76b584b85069f144507723e2a47e3af1d8c2355":hex:"eb7797a46743e552e682c0c7ff02e1a06d5aaccbd1a54075cb1a9332e76570d6aa5dd7423dab5f12b1bbfcba8b6396f2bbc5a1bc4c7f1fc306b32037b503a1a26b509e7c736b035108f90e4b3ae880bcb1eada72644119f9ae9a73eada21f9de1d2b1356a90f83c6ff97978bdce08aa6412535b401dda98c4ce72534f6ed75383d51922e0a4763c5903baaf75e5baaa355b3448e101ca3229f5eecd346f450c2f2b11503bbf23bf5d8f79392cf1425ae1cbcdd5bce53ca7ee0b59647a0a4b8cbabde28a7368fd46965ec0f55c8cff034ab3b733d19ceedf2b8f38e541da2bbb51e04cc5506d1ef8ab0ec3b43c34dca722e830d745ce631652976dd6fd9a6aadb" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 256) #11 +depends_on:2 +4:exp:4:hex:"070a6da7f4f59da9ecbba2daf690ee9ad0c9cad330600b7ce7b95d5c1336c96b47bcbbf8eb4d8918cebe861e959d68d7e5fa7ce34adaa38de3e36f425832e6bb0a23fe21d10c78800506d9054766ce52":hex:"":hex:"3b4d05963c2fb8315371c2f35f375b6e39ffec667303cd96642fdf6ff5f99102":hex:"4189cc93c021bc2f958daa737a17f78c03ca09a1a4a73faa8a74f3f109bf2800":hex:"5da2d3a69f10cf9a2f5276d3d54bbba4ec02826f6ee0440608ff4fd6b1ec962c":hex:"f8d6d5d7aee571a9d75923c6a2ed73f3e77901cb025d3e609c7cbf83b6478899b410756f66546bbf38ac3309f02fc870e056772e56abe76a99a147d12f1fc60ef50cf87baad21f5ccdb43ba43ef0ed777be5de30ca312f814ff05ebb93bd523716b8f8ad0411aa732d2116040d46cffd9bc2e463664433ef1f7fc56105b393915106d8ae860aeaafa934975d446ef95d697e1761017bf102e9e175c7d6d3a3aee0ce877f1ce7709d08c2c84a34d85d17f77e06a5f72269c9f18f94a9d9e635ba1a1b62ca5499e717423ae4bab477eba48143028ea7818d64563bdea3fde587daefd59fe7059f4f6db16a61837876946eebcd846fb5acf07507c38410e2ac3f22" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 256) #12 +depends_on:2 +4:exp:4:hex:"09b75284b738d600dcd3322b91d380db45d3efdf2dc8e9fec64cf07d7a606531ab41f05d85e3eed5f62d55c5132c75f151437d4f93dcb41145b2f95125d1daa7dd1f75dad6dc32e9e42a21dfaf35726b":hex:"":hex:"7ebffa04f7f0c939e1bfb4c8686ebe4ffd7a1ec3fb4aa114946a6650f2b449ea":hex:"8d9ccf3526b655cb923ae3e1416e84af5e458a2ae4bd55aa98e900353f8bce65":hex:"d78edf2f7211f49b70db778b0fb0eaa217860f9197ad1242cda264c3ffa3e2db":hex:"1f802d0a9526017a56c43ebeb782c19143571f979b141b644612f0364cb5531f8fcd527578cef89263c6fc5ab26baf136418fe203dfe3113124363c768812d3e60a66b14fe13c43891e0756fdab6f8dd2a28cf9a6341b7b39d996353cf435726b2a02560e0b5f8035c2a50b10de41ffe389f0b0e478d783fe8da8d729f1a7b41e09d3e3cc5f93ce24ad76b5650ae61701035d2abfc05bded61afb36dfd910be47c8788af1f74cd101746207722ee2761e54742d8f21884794fa9b0712645fdd962ca5cf2d3070f4a2c1db6f4c1aadbcd415486735ea1bf6894146e09c6cbdab36d282e20ce0e840871a0b435c3e800bad673754cae50ab4e7855e268d9bccbca" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 256) #13 +depends_on:2 +4:exp:4:hex:"773a12318265c2de4d6a80ce936d4c8a13d81b646fb197d7ade8d8dca38988e6bf4fe25d32c137ff50f5e20e987ca8c5c7ca4c2bfc9f68c1a79e8a0f9bf2a1dce0c09dee4134b39f1e51f0bc10359fca":hex:"":hex:"4d995d9addb816122b70226a068c457ed4635e7ac9ce41f1594ff84160c1c06d":hex:"f068497d26966dfdd57d5a8ea1a05c1db2ac2d72248dd59d17bca9c6fff28817":hex:"641d5482fad78093210f7e542f45a8d17fdc856be5860c45465b0775bc45ed7a":hex:"4d47fa06ae54f60102bd242309d5366a953e72a2622d025f9babf6f6343429e4158691bbe3629e701f07a48ed239e734a78a400463139cbfeb45d6515bb690f1211ee03e908cc446abcfed29b955b92e7f9c3aae149195e174d34f10e30333fce99cf362c5a42a79ec907d90fb5806c1d09c9690d4aef060f0fd1b0b1877ccfc377dd675778adae40e87588e5080d3cf3eb1f710f019611267b2249007a01b3e6999a3bab294766c933b09537e99ef7251c588728ee1bf8c64ffc64de6a70a521eb745b4ca6307bd24ce5661def1d7374afb1c44a964f14edeb1fe457465c0b45d62a33c5c5bd1628d528b20154d73a946c44363aaaf20dd41244fbc81dd0475" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 0, 256) #14 +depends_on:2 +4:exp:4:hex:"eadb3322979308075d4bafb69cafc6dff5d55b97c4a73dd9943a0a9e4ac01b78ced5ab91508b9718f6de9da47fd7bd54797cd5a5f6365c28b1a56cd5d74721afc4424a7ca53ed8e97a2c15a727a682e6":hex:"":hex:"8ced860d74040dceedc0fd0f3bd36ecaf36f91e4c56372ed1a54d25d65180d42":hex:"a19980a1c86e9ee4db41f6467144b0dff4c0692141916d46bdb7c2ab79992116":hex:"1cdee366e7c3e7e853caabc4320ca2b63616ae86343fc5ec2a21b6c24c04ec39":hex:"84432c3f00ad23bf1ba4b464ceeed8da0760319141c214d6c31344fead11011ca1b10f19de5a3514c8df0b69fb85e8706db272d0e1e6bfd512cadcb4df7fe745aaaaa8fdd6e194c38b063c030de3da53ae6596834b99a46ad205690511e3aa69cf5bfd9ed78d6d33e357524dcc94278b127e89e189e52db00b426499a388241e9455deefddbcd3974236c67c6207a6f9c4c5d1403c02c828488e705fa4f85fa2771a1f3df7b2d5d4b1bd25788b8e29c679044e557ae4cc5dfa86559b6ec3b5a314d4de8affd2d576c3cb260413403e3ea439ed4df3501acb85dba98306cd7055027c7bc339878998e23f70680a855479060186335217dbcb229cfc54b66130c3" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 0) #0 +depends_on:2 +4:exp:4:hex:"97aef935ea33717e8e8644bb8c4789f375c48a945ded08771149e828a22dc86682580f51070ba1e991d9803f51fd9a6f63cd91c1ebb2caa15f2837df8f35cbb6fe96df2674a136990a5976cbbab63bc1":hex:"212300f93899ff7cb144f20426028b976380a348253bcc3ff42b528cd1972549":hex:"":hex:"":hex:"":hex:"0e8533f64b60c23a2655827037db218c2fe9ce430fa4ed6ed9be349c4bdc6f40018b42f486fa04288b3b0c62a12812e76e08c76062a510cc60841f165869efaceef90805bdde2fd66c36c38a2ac9c3cb86bfd30406569e0afd245102f2ea2d49e4ee5f69187227a3f0edfbc1259cb6564a2d4e829b3fc3b6996e37546f1d8a16fcd8201d1ad28661bbb0012daad55d5403e833d8a0068d216c879bcebc054df0c9cba14dad4863ee1f75b78bc488662cb0c91ca4fdfce7df5916b4e62580902c601be706dcc7903858e6b9920735bdaa635add5c06080d82265345b49037a32fcf0a7c9ea6069e3369f9b4aa45493efd7318da2ae9b4fc300498248afaad8d49" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 0) #1 +depends_on:2 +4:exp:4:hex:"549ada8de63982fcbec1d27162a51764dbd770f1da46d87759b2ced52d0ab2e8d1e8b2883fdeb221380e17ea387b3a065cd6dbb671f1caeb7b5a4bab5b901088f081afcdde5ecea10acd810735b95532":hex:"0e7f0664ee95e3de9ef4f9d8faada0851bd1de3a3a767f85a74ba26f7fe8201d":hex:"":hex:"":hex:"":hex:"c876001855484b73dc46babd570013993413215f6617ce71be7c77a418494f77adc56f5c26b393de340a514b40bf9a0a9e2629b768ed329ca083dd4af5ecd6f45f878a55d5b02fb9bf3fe043ee9e7058acb83d3aaf39ead7e11d82725bdff8272d7a22cdd6efcfbdd60458235e523ba0ec1b490994fc394123fdf65d72ada39215ea6c7f8bd6c8aa4ce947988442c66cf53f196db401e275098d9260e2162f5726f0c73b201b61fe9f7b586057780a87861d31ca5b21ba62eeca6f5387c5f42147d55a61e1c7d39398a82ebbcbf4f153962f6a6bb5461d58476b4811051ccabb00cd9a78debed345c7e854fa064f990a6d0dc827c39c38237bdc5e9b1b44b6a3" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 0) #2 +depends_on:2 +4:exp:4:hex:"d3f2af83ed1071e6895b1d57d0969ec7fba3d6316df5031e452c26daababdabb58107846a2a6921ce3502614ae6cc94b9d246a8ceeece6a9cead94cd297838ca96b74a88dcbe24000f8eb719f939a3bc":hex:"0d4223285e53c9e7d743dfafd08fa75c81582d0c507c38cdaa6fa1b398e342e8":hex:"":hex:"":hex:"":hex:"9b83018fb5a4b2d2b76cf5e8258e7d3f6943a494a9cf7dfe16f9c51beb6d9b849cddabfd597fba42d6fca4096e458c8c0e353da4fd6af9297583e97a910bcbf1258a83da465d34ad13eeacc0e57f145a8cbe09ad9129302e64a4d6cc9166e3576d256b7b3c64540100ea4b0c6f7f92ff13af732f6fce6516f2ffeccaaa0af906d4efb8b7625cc91c5358e5fd292de159dbac1cc9f0afba62ba7d5733491538d14467f9f242fa66e79b444f38ca9a6e7472e41cbe8a63967b2e9ad0d8fab4dc173a3bb45e3654ad49d8d8d5345146b33fc55c52e201fd404f7ba64c331d92c3109dd8fdb70116d0e84304772217ad8fe65bb0215eca5c842cb10d591c9b887f0f" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 0) #3 +depends_on:2 +4:exp:4:hex:"43de428b90ddf2dda3280fc3628c289ea7e623b63a0ad5f568c459eb7d62f739c106327c0f3a8f59e5bed661224e433594f78b3604b10fa048e04181eed885db9665c4eb92d0cb82969a1e5dbdf11fbf":hex:"e9cf65c1c1d8d1fb07a0a66821b810fe8893339949b50909fb9b72883a530ffd":hex:"":hex:"":hex:"":hex:"2698a29124c6ac40f2416778a54ea080014a3258211d2136cc82e83e199243e7b6483f363ffb637e3a498ecda6926e91cfc19e61f66f33d3c830f2ce9a9379f3ab5eab90001a06b7713a5ab5c5ed461d1c99824e1a506482fc04b6ff0129847fe84b0e36ec7284dc028f2ae326f39e7b2b17b6cbc21a29f1f0c8ea069be5a2defa5794880fb37ed129849cb4e7bc998a80e6bdbf6ee7d7bd78edd6a7ad415e571da42481f00a857c57308cb7e24efaf3993587d3991ae41aba97439f5e0feb5250013d84619fada910ecbc186e976026b1451b602d20e60679e78c8940b3c8946454cb0409a83c2aa7e2d1f92f548fca8d089e15c47a2c803e7e1e78429fd01d" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 0) #4 +depends_on:2 +4:exp:4:hex:"af0abf3d221f4af4a4571eae06287c994beeffcd8f5df5da72eab03cf108d67f71b91ff2d70698a8578d058c181bfe715d244f5321660dcec025897d9e9b037bdb406bd97fa9c3ce5e6d01d0840cfbfd":hex:"7ee295c84488c3f5d3b2798777f92afcfcfac175a937cb50444831ca60a58650":hex:"":hex:"":hex:"":hex:"e570a328f4aa705f4060f9a6ff38e16007e59533e1d94d039c274d105d7bc8c2ff77920748579de5c33c1465d4441332ba51d30bd8eefa90ae8a421ca662551957e1875d6515adba50a0d297640248e0a83c032b515520220ed880701650c97727d6b5e5f9980f0eafa4d709bcbca76d31c291750f52b75a165023ae40ddf4ad66f395d4cfb1f5a5873743031d2ea2a093b2da4ea175bae45cdabe00687524a3814f153c514e1c3d50abaa96159516bde73878a021b2e9b889c130cb3d016560aa9ac1ef2e4fedb67abbd2edcab3d2d74de3f8e9fb1120473687902fabb46eb183d74f22e5b3bfcb9dc1d1edd95360ebc1310651efbacd0e603b37845f2a9068" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 0) #5 +depends_on:2 +4:exp:4:hex:"54c0128113a4f3e76311736c83581e6c3fa45659c20bc622132ce4f9dcc348e76575da4b0142beddbdcf51904d1febb248a116378bc69acf6d1b4b25d94e9d76145fea73f8bee448964486c39e88034c":hex:"b147253bc1d28e988f99a53a73f5b86868b43c6ca73ec7d559f40f572f2bb74e":hex:"":hex:"":hex:"":hex:"2963b2932e86680bf0eb6907777e88f6cb51c38b36794a0254e984431ec1295aaa26f91d5bbd3874c7733466e04fa4180fdb922b10604280a1e34ba50b4f5867a9fd069028303364566ffa6f7410ae2194ee51bc951b19d7be1cce358e002a4b94085ca34f845bc7598ed5036c23a1a1097809c7421fe0b6bd10e90d1f8ffd1cdcfaf3755bdfdde695b032173861ff3baef7a194b5e46c3b0a3888f4e4696ee5dd2414a10c16eb372f67a7538782d61be0f7574646c7c05f6f3d81eae13b2f5327b8ab94d2c2172ea168a0f2c6b79494b497da375606c7d04bc2d8d41618d925140b835b90ee224ffce041697af669b0a944d342524fb133e193a54f4b528fbb" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 0) #6 +depends_on:2 +4:exp:4:hex:"20f4687b717a31f5e818c872952385cd9ac2137abd2e49b9849f01cc2551dcd7f53dddb2449c1a9e793fb8a0447b303dd6da6110768f5d32766e3e3f171305fc68c4948dc6762d3c4d27c66fdf962cef":hex:"0516d63709deee72cc6751191ea05d6aae7ef016dee1ad62159af167a785b353":hex:"":hex:"":hex:"":hex:"82ef3110200f4f322764f91fe5b119492b8627ece211e79e2ed69044e612f60553e5e50abdb1a1144e4a7afe05276c80b7d1e3992b609c4966f61beb02ff8ec889ff94889b69e4e6544be9ec760b260ede7e4b5e96b333fc460392efb1833a6467b175aa7d6602abe175ba16d94151fefa0fd1396960aa8c72a6b778f3f0674c86cbedff250b5a609d30e0b40ebeab2a524ceee7aa861b274bc55541dcbce77361acb8dd39fdfcaa02820950932245bd37986d5c1407098e13b5793666d079969b054589e70712d50be04bba484cb651c07971be722e13b82600358dec86c7f04c0c4e256ba12542f80ae7de745f50bfb07aa28e3857bcb1f371f01d93b12a2a" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 0) #7 +depends_on:2 +4:exp:4:hex:"ef41067a7ca9b6946155247ce8dbb619795f028d678ccf8f5f5b40e33e8cd15634db8c9141bc2cb0590a545ccd02cef6e1e96fea14fb8a55411d9ebf03633dae0ad449a2121d1c78fbc0e9cd8a78a34b":hex:"7b90a2baa4c139e29c48db6c5b51ccf088fda54e4187611dab44409ce1c36f4b":hex:"":hex:"":hex:"":hex:"2a13126e8947278cfce11cb02ec31acccee5319d478a4937e8fb5e6483f5874fb20a17e9d4599d256b4d87318fff393f999e7f3d8612fc1b6063175a5d070805d53f7506632f03d37aa43b4e77e323ac0d5c241d9581d7e110fad21dec83d1dc9d119d1a0686636acd0846f58b42bc12a4e7e9d5ddbdc051515e8636fd3470a3b4c2efaf9774d78f3d32991f9ca50585f939d21a15c5cae6defb1702f9b606ebfd7308e55e6690310e35dadc48f9aa873f142397f36de90fcfc1dd0b8747496548b4688899df4d9d13857274741290a39c86d5b92d375b79efceb7f6cf2ac0c8c41e6d3c05f7e980628f330b5aad1328fb4b0621278b190758fafc93da359a3b" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 0) #8 +depends_on:2 +4:exp:4:hex:"4d1a72a7a7efab609c6ea16e4a1150a8c1f8bcf19ec3225ad2eb10c761268d6d2c9b09f982710768aaff9d5e3337b028596f31842fd23e75a668063bdb03cf1d7e1ff419252d44335712f16720aff52b":hex:"e5c9712ec583b2dbbfe76d5eea90b9e3b6815c2e38782192983c6a02efd91afa":hex:"":hex:"":hex:"":hex:"f4d994662acb2644e389b41c71122053b2a9bc68303f4c77870e426ac38c1b20d12cbd8adaffb611e3a3365defad82cc8c2a27d40f57e8035e16476442ce4c4beee9d8212d230f796fd92b02d7975790120bbf7a6af8115c06457d767c5543a6c1742ff745999f8e815f5caefc92b9540a6fd19ae973c52b321e7d4d7d9b6ab4900d13b7f633a7b8f1abe3e1a0540b5803b89d71b3c4d3a5dc7c4c0751e088f27b748440df9df14fe25096fdcafa1c3e16d49235defba82ed6ddd1fc8a5fe9f5d360bd72e0d19b21cbece29737037832b9ef18b96580ba50c344695d93d07b105f39c17cd91ebc291618c8862cd47459946f735fa7fc778b4489b574d6e77ee0" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 0) #9 +depends_on:2 +4:exp:4:hex:"5c9f5de1e3bbb5193bbdabc6211e797dd89eac092995a5539ede5ee3f769c4c3e221e65efd6daebaf2b68e4353c23d08bbfe26b69abd8dbda8e41f4f9057ad7148541cca28ab0c3ea512aadcc65eef28":hex:"17f703c54499fe53e688c6d48b4a0604ed9f6c71b1cb4fb9cde37eb8fd2a2ee0":hex:"":hex:"":hex:"":hex:"11c40f20930a9ae087d5ae4cd93c6d8defc073888f4f8e153b163e7ded25a3313a55b341d40315d78527ae87c932c9071ad6416823d266fe23000e1e33463d2f67c73c6883aa301e5f12820640ffb50b680c3aded1f6b93d21c3c1a9ea01ecc9642f1e653551d6e8fa8af6a8ef626def69c65571f4a26a7d8b7bad126d945961797c8147c3ecad4637f915f8a3a73b3ff235aa3c71273f0cc0e023fa26b8a567db56a456d58536807817d5f9b04fbbb99dca16164652526b4e84781f08f1501364a1e3b709894f010693523facd0ec9c61c41ad9847a9ae47f3b5ee57cdd63aa179caf1cc4957b59461aff01f08180a53334ed436697688c55608a12fddf7239" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 0) #10 +depends_on:2 +4:exp:4:hex:"c5de35ca4848615697693d839616a4272900db5c894bb13fa3a43afb9e2a714c47a61871bed42c6c2a9d190b946f7201b671991c43e5da4325666b140bf96f0548a7220edf2dbd9bf0bde719061c11e6":hex:"0678789f954ea314dabfce48d090bf93acaa2f89f7e1a92e6ee0f7afb19788fd":hex:"":hex:"":hex:"":hex:"7d4f29fe94ba8748d534f3fbfdd6dd8ca00f362eed4a84b2ea4c0ea83267246343271bc9d48d6e5c0265da7c11ea0a40ba8cef9ea76c649426d9089f0fd81b69a328ec511cf96e7ca79e7cf51b9fce4a62a8fdc568a4ff19604541ba2ea428eb28ae49645dc0451708fd53ee7e6e6cb8ef7607777f959a1efdc172c10e290f2f7f3b2cee2ce5e9a83c3928c55cee180bfa18359dfd9cfad1377cc0fed321ec9d13e4babc23e4efc89754648e9c6ebe7d7f69acda85a56501b8aa8887f9b809b29c7d3b02a8afc8c1ea9bdf26179b4547b480100c9e6f7d05edd620599d3ba85c96549a20dec8084dae4c98dca554a2cff094afed966a1b3109dbbd8ac5c52304" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 0) #11 +depends_on:2 +4:exp:4:hex:"cf72dc871545003348cb2e458c6f4fd6df5220ce389a792f854498cabff1b5c88e3732f6aa95eaca2b318a4d29d2d33f3a289ceb1bd858e3c86c7404825c0c0a812064a05325e09d34553a691a601866":hex:"d8df317e505af016e86297f02fba94059b4cd31529d8c1ee1b33107df753d89d":hex:"":hex:"":hex:"":hex:"181851eb38a67d9552c87902d25c67afd377aee587da12386a46148c4cab44ed5b61777c2247d0d39e0991fa6462475da9763d30f1adc9a1d2f90ee3733cf335648706bc7ba06c862ec9969a0ae38b7b1e14817e0d1dd06bba77a7371f60e0867fd7744b0b4b7e36cc1e280236fcb5193c73a2d00cd0c256b44eb6497ecd69d1669ad3eec8a4e4c8b730d85e12d1d9c40070e645020d7ae2360cd0d39d559713b4f010a318dfa91e44549fd85e5ae87bff1547305be5b788b5750ebaf11a60b0ce6d26dd69d219aef1a9a038ddaee0e8135a4428062837af5e0aa1be821af0246c6076ba9ada4e0aa7f74202e10802879142cd109cd27a292d04e6c53e33db0d" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 0) #12 +depends_on:2 +4:exp:4:hex:"c89dc15467ae09d5c514a0941f3945b1f4a1670a4df9910d14c68aa6d3c36e8f5bae0abaefd8fe5300b56a7bc38083b55602025c221e1f0d1671f2ae92bb0c86fde571ccfe8b8b5be8a94f3f1d027ee2":hex:"8109ddb29d8395e938aa210852da6bf1f1a3d00be9df74b372e081d538983174":hex:"":hex:"":hex:"":hex:"e1c5d2b4ef29b2bfa498541be087f21075b0b7449ac7fd234d8e6af45680920bbe1dae35850cf27469209162d4175ec42c3d5cd6b7965f95948d9c49eea2db9dca83d1bd8bb49093ea0af12497bddd8cada20bdc94a453792800cc66d01cdf5e0afdfbdef3cead291e5b88b116fb47b82b4b18d6fb363d733718496ea20ca2614caed61d823ca9923fcd2f570a9c03827187b0cfed19bcd2c2e87f58508da8e1096eb9eb4c2ba223cded5064a6a9b5eed8cef6fabe3aaacb88b58fab570a56e80cade1be8c82f3b6918a7e574c91dc4fddac497f1cf26a801d6cf24ce49ed5e8bafbee09eceb39e1f81821ef5477fa0394992c848fd2cedd8f86c4c4a396eb3e" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 0) #13 +depends_on:2 +4:exp:4:hex:"1a100ec0da9544326286b38705523ac970b896ef6e6306b2124e283a8851e46d3a4b2bc6a8152ec9b0f88d0e2bd1528b13ea307a3384c10d1fead60b90bf25c305a91558c1537e2a7ac74a85240208f4":hex:"005612d87b6df0204c3d879b5ca30bfc49df4e189285307e2926b367ebac30ff":hex:"":hex:"":hex:"":hex:"01f56c3a325a39a2bc85e6e077b7a2864921a4b223c7fe998ae255d724a759a66971084047b44fc1b8ad013e976ab8b255930337eda87612364d605f241095200f8a8513a612bd847aea116b73078349b7cf60cd2588a8f7431671c3b3c6ab2e4dba9796b1ddeb2e1edd4cb3c4dd67cf722679cf64c5b20c64e28be1ac87f8cd9f17b59ed696f61a4a472fdf37aa90a2f16edd3d54c5abe7dcb0e964bbfbc113e66b1887e0daa2151635b803c0340ba55e3e5817cde2662ad45133c277502400b78272786c7aa40c54219a06b5a32e088baf0613fc535dbef66241befa09722f3730bc85c0434c733ab17dcc7c473d8b9f31651921407d85369b6f6fb609d53f" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 0) #14 +depends_on:2 +4:exp:4:hex:"47c42df62b4dd570efd3c2722ad39a2df5f969a13f645fd27b5290877ba70916c591934d4f66000ebf8c508fafc44f75d16a2c72c63580b9bcf156862214533a47b1686c871a0165604fdd00a412a484":hex:"94822903cb5c2003c31c6d072ab0dda435add0de7d8f9d5f08b5cba410d888fd":hex:"":hex:"":hex:"":hex:"f78e61b443b5a97b7e493a8ce35a43545290dd33d15ba4bf0ff78f34a25c46c4ff4cd485964cc96e90fe847d9fc9e42d96e4f5aaccf976a84e3e12100c28b0f7addb1c76f89663e11890f09e4beefe928a1e0b304f1d9dd0414cd115a01b641fd69c7071f2ca7c7f2e53560f4e91010ba11948195bc5deb556686feb0bb92fe61b3171e639ef47418f02be37796efdb6920952f3a8c766b52fccfa757e923e38028a84f9be1b802c1fbbbb4aef825f4c5e4fc1bf6e96f33ab90ea486710718c9e4f3247b2a55ccef5a5d342cac757f0b9f90bcdcc8c2ec3a43149bbd3924c85f0b5b7ae42151f4ded826ee6d47849ef4e8af64adf6863982503c23c4a0514ce0" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 256) #0 +depends_on:2 +4:exp:4:hex:"da740cbc36057a8e282ae717fe7dfbb245e9e5d49908a0119c5dbcf0a1f2d5ab46561ff612217ba3ff91baa06d4b54401d61d4d8a41c3254b92104fd555adae0569d1835bb52657ec7fbba0fe03579c5":hex:"fc227293523ecb5b1e28c87863626627d958acc558a672b148ce19e2abd2dde4":hex:"b9ed8e35ad018a375b61189c8d365b00507cb1b4510d21cac212356b5bbaa8b2":hex:"b7998998eaf9e5d34e64ff7f03de765b31f407899d20535573e670c1b402c26a":hex:"2089d49d63e0c4df58879d0cb1ba998e5b3d1a7786b785e7cf13ca5ea5e33cfd":hex:"5b70f3e4da95264233efbab155b828d4e231b67cc92757feca407cc9615a660871cb07ad1a2e9a99412feda8ee34dc9c57fa08d3f8225b30d29887d20907d12330fffd14d1697ba0756d37491b0a8814106e46c8677d49d9157109c402ad0c247a2f50cd5d99e538c850b906937a05dbb8888d984bc77f6ca00b0e3bc97b16d6d25814a54aa12143afddd8b2263690565d545f4137e593bb3ca88a37b0aadf79726b95c61906257e6dc47acd5b6b7e4b534243b13c16ad5a0a1163c0099fce43f428cd27c3e6463cf5e9a9621f4b3d0b3d4654316f4707675df39278d5783823049477dcce8c57fdbd576711c91301e9bd6bb0d3e72dc46d480ed8f61fd63811" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 256) #1 +depends_on:2 +4:exp:4:hex:"c2ff911b4c93846d07e0d00eeead3423845c7215c8b5fe315aa638745e63ca26f1062321318087bf045903cd4f5cc9e61a318c2861c6a93948d779ab45f14d451bcef2d43a5ac752995bc0b365bc3fbc":hex:"b62f8ed28a72c28d80b41e016f559bbda0a2a447f8e146eb93a509b302e03c42":hex:"77aa1ff77bf037ae26e60d412f3341715afcc1fcd3bf971a481a15d45c794331":hex:"55ca83dff075f4de57588dcec9bcf0fd1fa267bc280d3c48f1f1f749e1997cc2":hex:"e42e4aeca6716181c71ebd462082309868f6faafb5d9c82357c785283f6d5285":hex:"384383c41b4df205d19fe68e563dbfcd2f6edbd176574248f3d1ee44143b70aa5dea695b87bb6c82378953a714084ebb5619aca7d63e0dfbffc253a336edf80acbd584cd3f916d6126968d564c1dabf7b3479a62e7dfce560b80a5104389bcd771e20138dad4c59f290a4525b00f6798fb2a3c8f44605a247653d24c772d207f0ccdc19a07037429c7e79771c6a6b4ca219a1f8ed9bbad9c4cb27415d18b7278552e50ec6e25617cefa7324ad786aaeca811c3aaa35ae00d2f2152fb6d98dca82ebe579bedbb50a40e62af9e229dbf9b9b2bc6532b5d78e6333cfeb1ad01e192491193c9459b78d4e9c6e8efe69cf0c702298e325f129027145af92170b843a5" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 256) #2 +depends_on:2 +4:exp:4:hex:"e1a333ffe4bce7b9f6bbc8dad8787a82ad66ca9b25a64f04b166face945c249b5f45cdd318c0588c7cbcd14846523943a59119683628020e901a0a7fefc21625864ecb1d76ec119a10821b49a3431348":hex:"ce1466063de221c4fa1cc308442db476acfd8ff34b2a0dbbbe0eceeaff210293":hex:"d481e022a80f3e60687bf153524a33bd6fe42c54c39a377a9fc27e047df53f14":hex:"26a88acf67d5ed00184baad664c6b2d4a91d437a121c3cad9eabf3d7e676b0d0":hex:"524e4896a22bedc62820c500ed7da2bbbb4c1ef9f07b5f374d0fb4ae9bbe50e1":hex:"3c3cfdebca060f534a952e4933c2c00f9ee0fcb825a58abb6aebc952e160668f711068881ba8a6817500bba1c28867cf21a12a50e46792abeb9f41bc02322bce1e77d236b7a45a7807fe22b8ea9e2859d2b0164783d364f6ad84f4b9341c576cd6ab2ab249246bd76910e0abf115e4c59e37074de5f4defd03fa61ce1733e33c98849ec28ca61b845035218afa7ee2867b32ba1efc50907d76ccca5a7ba69e9700875b200cec5d1fadaac77a0960c4eb899c06134cd9cb663c62b69446a460bc9e3df7eaf2a34df00fcd838e882f5af1aa701d35dacec0cafbe74cf6dde7893b880071d3f1c9e53b205bdfde9807999e73468264d6172c952a7f5f88a836b1c3" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 256) #3 +depends_on:2 +4:exp:4:hex:"73cc8caea7f1f2129bd035b77bba2309ca3bec73e9f993fbcce7e3f148670bca656e3f17e5a8ce9bfe3665f4b6ca8ac8111fe051ee0e760b295b73470da27081ff17bfcd6ff9085c5e064ab844927f84":hex:"eef338ebdf4d9399441655090136becbcaf277e5ac73426f79552b3f27819ab6":hex:"2114d320b65a5906d04c5166ee82e727cc53f0ba33ed54a3229ad9592995695d":hex:"e3fce46cd5c90936f20252e0065dee1940c7902198ae105017a8f50d143a50f6":hex:"7ad27ea94de6ec7ad7cc1895381c735f007f6087d688a070b4cdfaecdd2a3345":hex:"858108fe1adf90fb3238363ce3532362675a462563e5c12df97d054267df0b205ed3960d86893c93d2b1997d95abd9179512289297b00cacd1a51202923c4224561e9986d0242f50ea4667fd6402e29d18c184028cc6c85836b1455e2d2e9b389e0d65bcd2c78d5e42ad9e47707c9dd4617e6ef2d64590d0e0be5e4465eb611d91b1a45bca1af04632fc8dd045a5f5ba3ec1fc09e3aaa1d03719181e11c80dcd1c4d1aac3ca69d89b9d2c6ff7575d78843fc4695c1954fc663732418bddba4b20439da03d0428fa047f99a378447f9e563fe405fd8f9c32d580aa6dc1560b9df1530fcc7b337072cb60007b4e2762dc61a08e6511e7c93b91303aa3d46c14483" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 256) #4 +depends_on:2 +4:exp:4:hex:"5eedd039764e7af96c3ef7d9e094e861dc0839c2a2642c4082afd09f2761c392a4eb8fb607ca7c5d7d4eb8e871aa995037a297af07ba36a59572e3975138fcfea667e06d9a4bfd2e9c570e61fbc09006":hex:"92a258c0ca5a9c030dd469ca5d8883ae5f3fdaf7d8e0fb23867d150f3d24a0a9":hex:"954a9431a4f9b34f6c28fc41be05fefa3449c8ce0265a19b8a422935690b50c7":hex:"1765c701b279cde38b469bf0948f500b5afea8f7eaac3f100ae5f0b147005ea2":hex:"1f6d382b8a8967efb9feffb8557f1cf40f4f65b5fa7d9846cab0601f5150430b":hex:"bba8f496d47ec97d90533650275243fe76844b606d714c8bdf37db1e3f8045de44482d65a99b6d60ee4aecdaf0d262d96c058dbd704ee96e4ae52bd3ea56e9062b93e2b044124b7e9304dfa237e623d7e7bcedf59bfffee1c581c7e41a401832443ae80c6f4b7643591bd78254996235d011233b18d993b950ccf09bf29b2ae10b85e4cc4feba5503f8e81b0d0e7b50e7eb1a358726369e4af07ef64aa83813e61350068026161a3ccba808a99d11e7de5afdd91137fec9b77de8b59ded6286e590ffab21fde191362af132bac1e8170f36f95d53593e73d1775609a0ef04d9a75a4bab26f97d253b8e00ca430841cb5bba4439124abd37fb43f3510bd5690bc" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 256) #5 +depends_on:2 +4:exp:4:hex:"95e33e3e1e5d24dcfbc5a534ad0e6ab6ab15dd6b094b7642e2187aba9a303137b5b7dc3d70253c3a8b446b591fab6950c4f6a33de5257fdc474a46ebbd367465127e6a9eaa97e17851f9a4d55fe4e954":hex:"7080c7d4ddd8e32fda42ea23adddf7a4d3893be2cb87d6c7293bff521c252189":hex:"611ec30b87ddd1096396d539ec973dcb7c408a62e6c37bfbe563dbb60d9f4932":hex:"8a4a0f9eee67c54e3dfd846ea92981cd769a8c7ff4f2646c85e80a03fc556bc3":hex:"05dc36b5d354f4c3b950053f925616c27e2317f886d2af09ec1eb7ac5397977a":hex:"90fe978fec5cb14ad180e1ca8d3e266658efd9b0fc95353d4edd06c4682572a46e918d1bf4269d38f5b005691f4b5a8ded08983d307a0d7de64e681a302ea6d0ff8ddb87bcb5ab0871779b10744d8188f7bf2d6498a4ee998da93d1a2fdf3d3da635c52cc26977b25dfe17a5f5dcc80fd72d066db7cdbeda557ba52554e1ef5a075d7a40ceca83cd83477d99591228f4ae33163d73045d35bdf892cd21083b8d70a3297212edeea57ebfb66baf7af38833e72113001c2489ea4beae57995169a1354131a7f607a1551643d27f56ce8e96143a78b2a19f9fd72cae9054533fdf16825d852c990dbcf347d32529952445cacc55c79a79c55ebdda76f226bab80d6" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 256) #6 +depends_on:2 +4:exp:4:hex:"b43301c1af024ba6cd7eadf985cb1c6c303479ec3ab47797392d4220788f4daec2b1f5ac6138bcb83e938be66b3232f7f022f4e548b93e7a8aa4d853fc1b4c42ed9b182ae582f6876beb268ba23c4105":hex:"ad7fcba1f90b243689b85a4ea1dc150bbeca4093dd8b9a0a491a678011ad807d":hex:"0410527589e72024491d4b5328b5659a330d9b167a1a27251363e262f393eb57":hex:"5de8fac62063a676904aa9628046fe71f080ce285ef964acdcd11260734f2d90":hex:"2f14a327bdbb9be4d9a813dd73445c8a8c911a874daf08a551e867f54983de2f":hex:"41d553adcd069c7d2b265798f8891329b1dbcabe2e7c03502542b322d13ea71cd8272eeec65d31520782351a33915deccfb8e10cb64d5f9cd88eb30608f7b136486b5972a68b981e0b9b7298bb670ace568b98c88d35b4a40c25bedec94eff992c0083e539adccc37ca5a4093ac96aa13c83a59c080bbe02e37a81303500224daa4f380d2b88cb84ebaac342bfe5789658585d2892cef2bc9ab6f1ad51fb292e531bc33186e39b93fb67d4ac633a2f4f8c681c7f82a81a47b74905613bf10ebd3c57fd6c8624bc7e55b38e2ad063aea90faa038d671f86c6b17d4341032e11e13c526c4818dfc42cda496ecc060d9a1ac45ae0e72a6e05bc3a8aa851af5214b3" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 256) #7 +depends_on:2 +4:exp:4:hex:"837e9048e5564df02e25f7b7585ac5600ce4cd6a6de8311c6b3c6084356ad0f9fcddad47e7bb6ad7ac9f33145de135605866611c2b083fd1f9e5cea98f2725cdcfb0d2ff6f0adb74d6fb61f8a6ca02b0":hex:"1d194d69897c5a7e8c36cc4cd97784312c9b6599274e3b20d022b1349ac45c58":hex:"b6a8880d415cc4b2aadaad6d7d2dc73484b70909345bd209520c05fe7f5cdc80":hex:"31bd3fc264c252bd3f8102529763d5ad3e45a4e068677423e698160db284bf11":hex:"0b845cf842d1ccc15c2fa7224ad121b9b5f8acd1e07b16c143c931da56620906":hex:"7a6dab28ae7231e2dbbd826c4eedd8ce062df31fffbb0c0ec045b0cd0a4e3457ff978bf39425e48cbea4884fc59e95665068361a8ee9175a48ef094806fc146ccfc3c403a770abd0c6bc8439bf68a89f13b0725a79dbaf976dba95725a4399c58d15c4758a515346cd0d6208fb0bccc06568642eb3e0c3a9a1df9567eeaa86924157ccfe5b2f8e8ec946871dad33f40f65847088c9e500faf8e25439be8a1e77df12a2b21b9f73244b82176e4bea4ed33d2671eacfa5c4b591cd0bd93dab7dc62f7231840909ca319278185f873d00820fbc239c3092d1dc1a3cd9c692ed6d37192bc587f8b3ee21c14fb20c520fa7899bcd2a1a53288a42cf70c6fefe7ef7b9" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 256) #8 +depends_on:2 +4:exp:4:hex:"f840c75ce0cdb200a3bd980d6cedf1c7321e5f303cd0446c7afd2d2d66657447b215333b15d55326bc9bebae6ae36efea3a337c6fbeb6a979a4783f2b7f0f0dd6d3a9d3747de639a9047248a04a19f5b":hex:"6d5ca4b1edf6c0afbdce02ecb30923b2f4f2b33121e21b2ffee964cc7de1abe8":hex:"f56d2b1584ba2f129c77b29590c4e1dfdab5527b1791e3e445750ca6d4ae3542":hex:"05bd799249411b37b80590d49f3348631b06a2408a61635c70687003a8485302":hex:"12d26ac3b87924cda5d78a3e3c0bd81280e340723643ed1b2ebf2dfd52f5dc43":hex:"b48c13af7a9b6fa6385a7ee5d2ab97dcebf71a715dc465f413cb0962292df84c9c83c4093309f749359b0a0ddcc13162cb4ab8ff7b3a6336351ed79ebf47730f97accb6a960a9c5c25e0920a06cccc3b3f62b616c15ca18d7e0b5c2e7d8ad2518d1ef0bef515af866893e9378b56deec32825fe0a2c5a9729f658915b99ab22a03b7187e83d2d0f41b9467c8326f7bc87189dd8ade18b3a7edf0c0ea462dc22109ec91294cf8ce69c8cd0c129b423edadda8fbd25f4983a70d75001576a26405188bb0284975203694c318f3aa7fe47ec041bc4c11c9bceb1b131f74adcd72fc4d2813564de6d4711017800377be9e4c579e88464d67ea6e457a30f8f652375a" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 256) #9 +depends_on:2 +4:exp:4:hex:"c91db86e3984dbaa25ae5d851ef341eb647bd1df0517e171fb86069cf6183c19a386746ccd0a7e81f3557038711db7259926089317ab7142d6ab6050b1f7dfc21080910d43a702cce93cb1d3b155d22e":hex:"a4585c13c83f962df72b58230ea123846df652b2810766bb671f675b96125a4d":hex:"fb31319b4e622dedaa88b64aed93bb108362234c3d3ecefc78f796aeadd9c8e8":hex:"877bafbab3bf9c20b1a85a5f4b3dd11a5c486042b807c39d59fde1eaed89cced":hex:"89a5af332718418758129b8212643750542bf957bf35c64d6b0a276238c808f3":hex:"931e43b1607f43260ca4fec3205bafd90ccf9916d721d9edc384250f9346525c7656cc7b5aed8acf92b8d843108855ac13f4f0903e51aa4ab7846a839ce70b7de88e0d52590ede14437b5493b6c2d9458d221b771107ec166f66ed993739604c487fb4ce94bd795e9cff60b4f8365c758c27fd767135b90b3372570a8e0e3b3a23da37e69382afbb76168ace3ca78852bf99a0d3a7e2bf192d8d929dff5b07730e00a8c5fa5ae243c89e71fd52907eec0b4c49fb86b81394e38a6b0523a89c0fc866c2c3cf76f336e9438d4f773cd5ceea4dd47b3716a9986153f718177d2c8ebcfcb90b986330f817334d29aeb9c93e9da5db30b483f8f434f2807bddec6851" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 256) #10 +depends_on:2 +4:exp:4:hex:"3e4c40b9b33063edbfd21bc4e34c5bc1f454d7ed176e4f6edc3ab056a3b0d1a79170479fd91d6e30caf99166842e0175b2941a7186d8c3f54e6f5f9884e47dd22a161a3fc5e00c1c9ca5a744c6a7f7b2":hex:"7a3d7511b93842159162176b7016106e61573aa42c57aca7bbfc97b3388c28b3":hex:"d88781b3afe2e1500b6881aa9cc23dd150054da57be0ca127e101a9fbc4decce":hex:"6231b0f5cf182c6f108491c5b7ebed9b2a015e9698e860623e9a12e691a38899":hex:"bda666c5ac006d6efc2aa0da52e74eded88955f8f064bfaa52d9f2524a195f59":hex:"2d7d62310bfc4a3347122e23655a10dfc54fac51349f0c8d586aad39236a20368f4d96623e58987f7c1184148d586022a4b96976f72636eb1aa92ad221c5866b6c6803cbf6c982e1de12bc89618aeb3f844b2a518a578714e2380075acb828685a57683179753fd1ebd2d8aa1672940446756829d6ac1cafbb21858465789adc024b8fa544bea09cd4f1f3ed35f298d4619a5f92a6e4f712a0032307ed781166d7a6af2a352694be7fd3bc8a151ea848f8b14da8150eb22e264d76e655fdb3638bf250546eb29ff27850d2b5697932c6a876743561e0894a01ce8435cef74800f11e4bf44fa5149a6fa4f4ca43267a47d3841722ae7efd09676f341a54ff1bc7" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 256) #11 +depends_on:2 +4:exp:4:hex:"fe4f5247dc405c12133e9cf7fe00483649d0e7b70fdb1b39f8e8ed0a4789a0c9ab78417816b54d47cf98c0aa4246ab0d68028d1e7441ab77c5eaaf9aba0f2ac6e1be2af480026d44d5eec0e46fdd31b1":hex:"5c5a5e517b3acb6d6d75742bc293e4d091d7b0bf37559f75df98d6306bcc2d22":hex:"5f56dc4800297a3fa8e2b38483c29505485628866ff175b19d4abaf4526bad92":hex:"d9bc081026ea5e35a52b9d1868688e03aed785af201e355cf51e6e8cec917c34":hex:"bcec655ee8c482e725c5b915b4085a9d678ea26b71c1ce0a85f741f9fb3c3607":hex:"411edcadb791507f40bfd00f3c764a2c758729f3bea116ba0c820efe09ed379095f7877cdd6c694c436572f4dd1b905301ed6e5fa1360ac8112860307958c7b64372eae8f4122d84ff2d4b690419e3043b8a6183afde8f084fa110c38403adbc878b9b139f6df5cf47adbec2d1f03cbcfeccc412942346fc42f0af77d52cf9127dfb02beae47375aac101baac38d0b47d8f04f83a7eff482ead93723827530869390630379767df1f40b73932789583da327e2f363ba421a253d35d205b00945d9f5521580350f631cb24c7bcdf7cdda7cf28baf625fd9d61134ec7a6d1cf4c80d05441722d081d4aea1074712f37884fe15ddb3cebdadb20e71cf3ab41676fe" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 256) #12 +depends_on:2 +4:exp:4:hex:"9d129142ba466c27f348d5949fafb79675e334fc3a1948e5d008ee265076467bfa435596b661c527a82e5a064fd56cb6f17f549c77a0a6a998712ef0e1f41ba4eeb354f77565f7a7627eaeab83ea48fe":hex:"ac23c42315f2bbe54eba535a7299113cfc88216727ede9f154d7bddd88041259":hex:"7f029d2430d49de4909a758a2bda4f219d37eff01c96de7ca2a4071d128a1c9d":hex:"4b6a443312f10348f6aba088d1f81206c696508a75836e98951604e93fa6db51":hex:"bc128051ddc96eef9fbc3a23ff458240d11a229d1a75888d622ceb7519e1db6a":hex:"03bbf9e2c0c1abc1ad71506fe91d483481fc583a73ed2eb4c8834a87118088b20474b78e06366b2f32a5f50e6425be841e1885a72aa106d5a001e3909b1ac2a29940ded83f0724514800aa0dbbb18da6d573aa97c7de470e115e9332179cf8b321fdc83265b4d58ed39c28d09783590704ab9adf007ee44d4d74af437851734d470085d45252588d75448abc608be03630152582e0344e1a7522a87c3daebeefbc79497757835f079dd99260ed7d7e3e00bdf046f4dab3ca84b203f8c93cde99755c2f5b16c00d00f370715f188e80f3f353f2d218350fe1a9f68673ea8e9301333fe5ca7c703d21aa2d0df020db28d8340b5e2c07ce5bfbcde7194399b6f752" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 256) #13 +depends_on:2 +4:exp:4:hex:"2fba8ed5b2be9af95fb02183ca8ae0dcca90b209be73511a5dab31ec81e939117e529fca4f95a483bd307838ef0d779dbbfe77df481d807b309da929f319b39287d3ae0994f77ff616f0a763f35d44a3":hex:"2de698d32010618c25ed86cccad2ea4d9fb9adf7b3dc400a2b1b4c975651d103":hex:"f9ffcfd5bc9a08f6f9059f4bb7f49e093f404aa7fe736bbf4018734071c26334":hex:"a309fb1f43a520a22946a6418500929e19d2b3316fb1a8c1aa5d047ddfdb8d49":hex:"c1dbfdb9bdd4a3321074b57e11e5ec6dfc374248a918242fb3e22cc6612b3239":hex:"3eee1bdb63433c55971297e15ac1691cbdfed576b1d2ada27cab33e660a3c8575fe989ef73e13058c9a3777c35bff1dab25e1991b78cc446738ccce723eb02136fcb24a0dd2597c3fd0a75774c4a21409689e9309e962be1e8b096c2dde59ad9dc6750051058ff6a18d57a19ec2775882ea0af65b172ed718678d841fb51437aa3133b2b328df0f4ac916a01d88c740981bf71c4664789ca4e9d3f7fdbe7379231b64683fc891c5222f8b396a446f3b50dde823f95177b7284663402fe5452fe7bdee304abe34d71172170ff3a911782b72b2556f2337d1d23d9d632bf6831d3c173fea3ca8eb5d7993a58a4b9f8f64d5c89319acbc847576b383fae0178a097" + +HMAC_DRBG NIST CAVS 14.3 PR False (SHA-512, 256, 256) #14 +depends_on:2 +4:exp:4:hex:"a9fd18764900768b7909db87dd4c7b87baa2cae6b0f62a8c2ee3e4c550041ca7435c7b35ecc6ef373dde3d989420b92c2bb32f9fc8c766ab840f5d0c73558dcac87e2102c28193e7ffd3381bc30e1d31":hex:"8bfc5a65fa21396081d92c3d7206f92637389c60cd7a14f11811c91535c0083e":hex:"404236bfe24b471ac7df938be6a96b8ebf8bc758787714d226ce727e9d2b4bd6":hex:"8151ae3237ca06ca5b0373039681a9d3cf799e98c3fa2efb576822f1fe0aaa06":hex:"11f0f8a2c16b1bc15fc93ff4793894f22d7494d11c94dde5ead2f0fb09bae6cb":hex:"9c636c3228432fb70d521eaed3ba8e436507e29163de0f5b7e0aa9a5177aa1a3930b95f72fb0561353db7213cde9ebdbd9485a5df93ff416966e09c1e61d8f805e6a082d6372d58301660a9a0181e2ef906a5a8a999c88002eb4b4132b34efd21618871ce28be5e66a65a1782de11e8e11c57a2debc85b0068ab553400b26a0a0f948ccb4e8bbc1173dcdab388c20ef6e2c9ac796d8816572ebc134396d38d71ba8e986eeb063a7baf5ccdcf583a723ba56bec38d4cd3e7bea563b4132f19b730189f559300091e9171a61469460ca82d39b5148e4d288037f6926e96f384eaaa0efdacf2ad93f0da4fdca0bc5ec0f0d7c0e8dadffae4e46ae96a6511735a80e" + diff --git a/third_party/mbedtls/test/test_suite_hmac_drbg.pr.c b/third_party/mbedtls/test/test_suite_hmac_drbg.pr.c new file mode 100644 index 000000000..887d70d46 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_hmac_drbg.pr.c @@ -0,0 +1,695 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_hmac_drbg.pr.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_hmac_drbg.function + * Test suite data : suites/test_suite_hmac_drbg.pr.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_HMAC_DRBG_C) +#include "third_party/mbedtls/hmac_drbg.h" + +typedef struct +{ + unsigned char *p; + size_t len; +} entropy_ctx; + +static int mbedtls_test_entropy_func( void *data, unsigned char *buf, size_t len ) +{ + entropy_ctx *ctx = (entropy_ctx *) data; + + if( len > ctx->len ) + return( -1 ); + + memcpy( buf, ctx->p, len ); + + ctx->p += len; + ctx->len -= len; + + return( 0 ); +} +void test_hmac_drbg_entropy_usage( int md_alg ) +{ + unsigned char out[16]; + unsigned char buf[1024]; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + entropy_ctx entropy; + size_t i, reps = 10; + size_t default_entropy_len; + size_t expected_consumed_entropy = 0; + + mbedtls_hmac_drbg_init( &ctx ); + memset( buf, 0, sizeof( buf ) ); + memset( out, 0, sizeof( out ) ); + + entropy.len = sizeof( buf ); + entropy.p = buf; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + if( mbedtls_md_get_size( md_info ) <= 20 ) + default_entropy_len = 16; + else if( mbedtls_md_get_size( md_info ) <= 28 ) + default_entropy_len = 24; + else + default_entropy_len = 32; + + /* Set reseed interval before seed */ + mbedtls_hmac_drbg_set_reseed_interval( &ctx, 2 * reps ); + + /* Init must use entropy */ + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &entropy, + NULL, 0 ) == 0 ); + /* default_entropy_len of entropy, plus half as much for the nonce */ + expected_consumed_entropy += default_entropy_len * 3 / 2; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* By default, PR is off, and reseed interval was set to + * 2 * reps so the next few calls should not use entropy */ + for( i = 0; i < reps; i++ ) + { + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) - 4 ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, out, sizeof( out ) - 4, + buf, 16 ) == 0 ); + } + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* While at it, make sure we didn't write past the requested length */ + TEST_ASSERT( out[sizeof( out ) - 4] == 0 ); + TEST_ASSERT( out[sizeof( out ) - 3] == 0 ); + TEST_ASSERT( out[sizeof( out ) - 2] == 0 ); + TEST_ASSERT( out[sizeof( out ) - 1] == 0 ); + + /* There have been 2 * reps calls to random. The next call should reseed */ + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += default_entropy_len; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* Set reseed interval after seed */ + mbedtls_hmac_drbg_set_reseed_interval( &ctx, 4 * reps + 1); + + /* The new few calls should not reseed */ + for( i = 0; i < (2 * reps); i++ ) + { + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, out, sizeof( out ) , + buf, 16 ) == 0 ); + } + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* Now enable PR, so the next few calls should all reseed */ + mbedtls_hmac_drbg_set_prediction_resistance( &ctx, MBEDTLS_HMAC_DRBG_PR_ON ); + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += default_entropy_len; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + /* Finally, check setting entropy_len */ + mbedtls_hmac_drbg_set_entropy_len( &ctx, 42 ); + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += 42; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + + mbedtls_hmac_drbg_set_entropy_len( &ctx, 13 ); + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + expected_consumed_entropy += 13; + TEST_EQUAL( sizeof( buf ) - entropy.len, expected_consumed_entropy ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_entropy_usage_wrapper( void ** params ) +{ + + test_hmac_drbg_entropy_usage( *( (int *) params[0] ) ); +} +#if defined(MBEDTLS_FS_IO) +void test_hmac_drbg_seed_file( int md_alg, char * path, int ret ) +{ + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, + mbedtls_test_rnd_std_rand, NULL, + NULL, 0 ) == 0 ); + + TEST_ASSERT( mbedtls_hmac_drbg_write_seed_file( &ctx, path ) == ret ); + TEST_ASSERT( mbedtls_hmac_drbg_update_seed_file( &ctx, path ) == ret ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_seed_file_wrapper( void ** params ) +{ + + test_hmac_drbg_seed_file( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_FS_IO */ +void test_hmac_drbg_buf( int md_alg ) +{ + unsigned char out[16]; + unsigned char buf[100]; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + size_t i; + + mbedtls_hmac_drbg_init( &ctx ); + memset( buf, 0, sizeof( buf ) ); + memset( out, 0, sizeof( out ) ); + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + TEST_ASSERT( mbedtls_hmac_drbg_seed_buf( &ctx, md_info, buf, sizeof( buf ) ) == 0 ); + + /* Make sure it never tries to reseed (would segfault otherwise) */ + mbedtls_hmac_drbg_set_reseed_interval( &ctx, 3 ); + mbedtls_hmac_drbg_set_prediction_resistance( &ctx, MBEDTLS_HMAC_DRBG_PR_ON ); + + for( i = 0; i < 30; i++ ) + TEST_ASSERT( mbedtls_hmac_drbg_random( &ctx, out, sizeof( out ) ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_buf_wrapper( void ** params ) +{ + + test_hmac_drbg_buf( *( (int *) params[0] ) ); +} +void test_hmac_drbg_no_reseed( int md_alg, data_t * entropy, + data_t * custom, data_t * add1, + data_t * add2, data_t * output ) +{ + unsigned char data[1024]; + unsigned char my_output[512]; + entropy_ctx p_entropy; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + p_entropy.p = entropy->x; + p_entropy.len = entropy->len; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + /* Test the simplified buffer-based variant */ + memcpy( data, entropy->x, p_entropy.len ); + memcpy( data + p_entropy.len, custom->x, custom->len ); + TEST_ASSERT( mbedtls_hmac_drbg_seed_buf( &ctx, md_info, + data, p_entropy.len + custom->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + + /* Reset context for second run */ + mbedtls_hmac_drbg_free( &ctx ); + + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + + /* And now the normal entropy-based variant */ + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &p_entropy, + custom->x, custom->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_no_reseed_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + + test_hmac_drbg_no_reseed( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9 ); +} +void test_hmac_drbg_nopr( int md_alg, data_t * entropy, data_t * custom, + data_t * add1, data_t * add2, data_t * add3, + data_t * output ) +{ + unsigned char my_output[512]; + entropy_ctx p_entropy; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + p_entropy.p = entropy->x; + p_entropy.len = entropy->len; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &p_entropy, + custom->x, custom->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_reseed( &ctx, add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add3->x, add3->len ) == 0 ); + + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_nopr_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data11 = {(uint8_t *) params[11], *( (uint32_t *) params[12] )}; + + test_hmac_drbg_nopr( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9, &data11 ); +} +void test_hmac_drbg_pr( int md_alg, data_t * entropy, data_t * custom, + data_t * add1, data_t * add2, data_t * output ) +{ + unsigned char my_output[512]; + entropy_ctx p_entropy; + const mbedtls_md_info_t *md_info; + mbedtls_hmac_drbg_context ctx; + + mbedtls_hmac_drbg_init( &ctx ); + + p_entropy.p = entropy->x; + p_entropy.len = entropy->len; + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + TEST_ASSERT( mbedtls_hmac_drbg_seed( &ctx, md_info, mbedtls_test_entropy_func, &p_entropy, + custom->x, custom->len ) == 0 ); + mbedtls_hmac_drbg_set_prediction_resistance( &ctx, MBEDTLS_HMAC_DRBG_PR_ON ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add1->x, add1->len ) == 0 ); + TEST_ASSERT( mbedtls_hmac_drbg_random_with_add( &ctx, my_output, output->len, + add2->x, add2->len ) == 0 ); + + TEST_ASSERT( memcmp( my_output, output->x, output->len ) == 0 ); + +exit: + mbedtls_hmac_drbg_free( &ctx ); +} + +void test_hmac_drbg_pr_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + + test_hmac_drbg_pr( *( (int *) params[0] ), &data1, &data3, &data5, &data7, &data9 ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_hmac_drbg_selftest( ) +{ + TEST_ASSERT( mbedtls_hmac_drbg_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_hmac_drbg_selftest_wrapper( void ** params ) +{ + (void)params; + + test_hmac_drbg_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_HMAC_DRBG_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_HMAC_DRBG_C) + + case 0: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 1: + { + *out_value = MBEDTLS_MD_SHA224; + } + break; + case 2: + { + *out_value = MBEDTLS_MD_SHA256; + } + break; + case 3: + { + *out_value = MBEDTLS_MD_SHA384; + } + break; + case 4: + { + *out_value = MBEDTLS_MD_SHA512; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_HMAC_DRBG_C) + + case 0: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if !defined(MBEDTLS_SHA512_NO_SHA384) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_entropy_usage_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) && defined(MBEDTLS_FS_IO) + test_hmac_drbg_seed_file_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_buf_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_no_reseed_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_nopr_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) + test_hmac_drbg_pr_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_HMAC_DRBG_C) && defined(MBEDTLS_SELF_TEST) + test_hmac_drbg_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_hmac_drbg.pr.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_hmac_drbg.pr.datax b/third_party/mbedtls/test/test_suite_hmac_drbg.pr.datax new file mode 100644 index 000000000..9a89aa8ab --- /dev/null +++ b/third_party/mbedtls/test/test_suite_hmac_drbg.pr.datax @@ -0,0 +1,1200 @@ +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 0) #0 +depends_on:0 +5:exp:0:hex:"a0c9ab58f1e2e5a4de3ebd4ff73e9c5b64efd8ca028cf81148a584fe69ab5aee42aa4d42176099d45e1397dc404d86a37bf55954756951e4":hex:"":hex:"":hex:"":hex:"9a00a2d00ed59bfe31ecb1399b608148d1969d250d3c1e94101098129325cab8fccc2d54731970c0107aa4892519955e4bc6001d7f4e6a2bf8a301ab46055c09a67188f1a740eef3e15c029b44af0344" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 0) #1 +depends_on:0 +5:exp:0:hex:"07bddab06cf3d7f094cc2302abd700a9d67421aeb711f4bbe66f59e28a46794213bf3d0c3a2cbbb09205b90e0ef212c7679b37526a806789":hex:"":hex:"":hex:"":hex:"f76fd2a49d9574c3f90864f35f32253b83098ee04a4c8dba464a8035f665ca165c8a038be5e1b100d56752adcf59bea167e15b1d01c419948d2d0a85be66d19bb40e5e0a66cfd76ba7547eba6276ea49" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 0) #2 +depends_on:0 +5:exp:0:hex:"6d283e7705a2aa4b1abfc1ff8559c9e7962df9229000b8e432ac40bad34797345f1ed6d7a0fdea8ec01e7a20dc436aa1d62153813d59d44a":hex:"":hex:"":hex:"":hex:"60ddce57be4563b87bb59e848496f42fcef9ed79799040e0eee68fd89b330109cd3b3f761348fc7036c0cf5d69aefecf91e89a7ae0429590569a88922aeff249ea783f00f795aadca729f96996eef76d" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 0) #3 +depends_on:0 +5:exp:0:hex:"108a1fa539fc471e0a26a8d39633c88d1e84c26a62894e7dec15fcbeda9dcd1e40619dc03c7d3dd2db39bc8f4964949b1737b9cd69a8ff97":hex:"":hex:"":hex:"":hex:"b0fbe3f6b6667b88e2a48f3679f21ad83f28107675d43d2a5186dd6a0256afc6acaf995b3f07691325543b37ddd5bfb4934f46ff9783597b69c727c9cae1c6b83601a39227c53c99181ec18d5be60d5b" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 0) #4 +depends_on:0 +5:exp:0:hex:"1db6fe209a51124f9eba3ae7a5690a31c9383b0d62abe0237fa6ce2b34b320b68d24927d9245a10f7216ded701c39f4d10dd6eb4ae912b78":hex:"":hex:"":hex:"":hex:"10e9661bbe14a0c768f09840979233865296fa801ee8ba97106043c067d3b01a5d3a866eb9b21f730c3ec1f11f022820a2a2db4cd07061acb85b0987e33892064b56626c962d1febe1eb97af6b99ac22" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 0) #5 +depends_on:0 +5:exp:0:hex:"dac7cb5d659646246a2c3cd6cbb8b7bb9ede30c88355725c16576ca7567f52b51ea3f7e5d456b0e8b7a33faf21150e5b39999ee53fd05b2f":hex:"":hex:"":hex:"":hex:"7117fe0c0a9afa75c078b1641ba637ed2a4501e70bf38465914ea185da5a62048910040e70f279ca9f2fd5e478ffd76484f52afa62a29ca9d649f252f27a8eeca1ec95d7898f705421c92b60493e5c77" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 0) #6 +depends_on:0 +5:exp:0:hex:"a422e11d41ed91e458b1dff7844e7a06eb807b042fec7c42da9a7d64aea6ec843cbb5dacf8517c3f7214d02d432fc64766f6bd40f54290c5":hex:"":hex:"":hex:"":hex:"e6e1b59d47aa47ebd862fa2336d50a920f77aff6d42942a293947c24b044756c9777231aa0ce8a67d2916136cf4477dde78b6fa789b4a570460538a3da199c2c64155692bc1aef3fa94ce8ba4a43bcaf" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 0) #7 +depends_on:0 +5:exp:0:hex:"8020ccd23e6733f7638a6d68b4954b701dd2e3b33176d5d1a14b6cd8aead4e152e0726dd16b4d76dd9cae60e69023d0fd82b0b69b7cbaf75":hex:"":hex:"":hex:"":hex:"c2b22410ddba0466b6635ab98f7690572d7159d66b4f037fa75869276950ea4ab4a92e3011d7c3d50f921a3988906486590706c8e0eeeb487ac85ca924d8b3a4445e2af49365c10c6e99eb17d93286c3" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 0) #8 +depends_on:0 +5:exp:0:hex:"d66ef5d12c778d8b78134704e345b08c6839471eb903bd0480169d4069d73a669a17dff2e1d6fc23f0688fdf7867f72a024ae445969458fb":hex:"":hex:"":hex:"":hex:"91ef2bacbffacbedc11da58d275448692ae26bb9920c0b14d86a42a65a9a79422ed77c3a8f941b428552caf6d15e057c2dd8b5cdee670ee151f674b4a82ff9754cb067c1a1a27302bef2d395379d6009" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 0) #9 +depends_on:0 +5:exp:0:hex:"cb4ca0d6e07b341ea0d105e5128bcd6b6fc317bec49394a83c485ce4f8205361374484ac0173ef3f08fd65d0a11af2b3f90ee8bd3fcdc08b":hex:"":hex:"":hex:"":hex:"1727a7f580a267492646fc2c18e3539a131b52fa3d82ac8cb36227ebb94a396b139c0a709301b4f00b49ec63d7f48125e469443b57b16bdab66bdaf0684da425e63a596182de4674416ade17f0cef49d" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 0) #10 +depends_on:0 +5:exp:0:hex:"7cec0120261bbeddd34eb776464c9b80667da732cc82c365a492b4def218ba2cad59f7b4bc1afaef00861c9b62b581444f79b8977e9fbf8f":hex:"":hex:"":hex:"":hex:"3ad128a75af8144cdf5cace68166dabca9db5d5cac6eeaa0c3d608d99d5da4a2ca90fc080d832e5f97060ab2247dc5dc20bc10be47e6ab03efeb662fc9d52c89d8db340cc4903be59dfd086f6d018468" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 0) #11 +depends_on:0 +5:exp:0:hex:"29dc07553bb77cad6f321bcdd5c5c758b6a77588ee43d0afb15c0d981e368cb2482663aea93ded95d82a1a2a22cdbdf8de93695862cd9429":hex:"":hex:"":hex:"":hex:"5e1d53d8db89511fa996ccf513baacee2612da201c21d51e2927dcb99caf3132f6d2ccc3376dbf95520018515b0784e98b4226671cb3f1c7915757d2e59f1c4e843ea9c98004108118b4eb53bef2baaf" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 0) #12 +depends_on:0 +5:exp:0:hex:"748777316160fc175eafff578481402ccd5a38508e4ac0603f86281576c970d3316ee58a36f809a8df9ef241861c04093a284d116384d204":hex:"":hex:"":hex:"":hex:"05f179c71691c0c2c64eda58b63a27772210f0c2c6973708a5f84e6b49f547169a839f2e97ce18ac94696337a9d1c1d450bf27b7fdaf1761ee8da9b55d59031a8516eeaebb1bd48a1e3bd070c5fb4eda" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 0) #13 +depends_on:0 +5:exp:0:hex:"11e2e3934d23239aa6bf1abb07aadaf8df05892d126cd4be13f2965bdcfcc8396dcb16d8742eed1b276b562702915fbb59c01cafb7044022":hex:"":hex:"":hex:"":hex:"6ec1caa762b5b87ce92ef7d254536f94d41ed5a98696da5c14fa2d29aa95182927b3e2a5ee9e2012c911ecc5e244af1a8200de37cbff2b26d0c2271659bce074d5b3c06743f08d6495286068a1e5435e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 0) #14 +depends_on:0 +5:exp:0:hex:"ec11e1929e7430b914b385285801e27df4aa6783fa1e3405ae706e740dda50209b20acf90dfa8cecb4d4b4bc7cba4daa285ff88ce9e8d451":hex:"":hex:"":hex:"":hex:"74acba48f0216087f18042ff14101707c27d281e5ddbc19c722bec3f77bf17ca31239382f4fc1d4dd0f44c296bc2f10f74864951f7da19a23e3e598ac43fb8bbdd1fca8047b98689ef1c05bc81102bb5" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 128) #0 +depends_on:0 +5:exp:0:hex:"d92b39ff610db66427613c111c002b75329734372847a88f53c1d289b30d3584d34efb884ce6d1d7174a3c20508ca0171ed9610622d454fd":hex:"":hex:"9980d97c65cc8b3c61b390e48abc6523":hex:"76213356e359e94984cfa7db15220518":hex:"e0b298f7cd1112527a506201e38f7e60d762f591603db72aca3a2cd1b9d115c3ddbc7dcb7643f2f40f53e96e6ca1590ca27abb77a6234754ff1edef86f75fd5f298872ad1544fb88a62936e238f22aef" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 128) #1 +depends_on:0 +5:exp:0:hex:"3c56bd6733e9cf9d765f3d5906c60807bd1c9c11f4a1293bb4abaefe6a65c978d9c75a704239e500319d9b4b8f9f121caef7fe3c49f9ab37":hex:"":hex:"365f1612ecb78ad7b1140dc66082ab30":hex:"0e5d2013782191581e4a76e0a2b5bec4":hex:"0e509b7b436d085c1080c3d9e6ee3cc563944bba0fad352d13182c87c8c3a0f0ba71e86676729da0d2f4acc2b57e430b8791c4f30d232a0fe48bf91d5824242fb8e36333837173d702e6738291b57efd" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 128) #2 +depends_on:0 +5:exp:0:hex:"91a44f3e412d031bd47ec8907e32f0434a20d784db3f6ffd78b013ca0b00553698a113d75d8ebbe856554c71aa4b0d48af74bbebc97afab4":hex:"":hex:"9f4b3b3f1e2d849753d2cedc8d8c5d17":hex:"64a1f4d2b10cf97a268cae7034ca4d8c":hex:"232ade326de23ec970f66e6a540f306d962769d1b24b0675109ca7514dbc52003d154687f525f4a2220501d6dc92551df9111c8dd398356c560ce44f1959301dedbb197c0161fcad0299a9eef3e799e2" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 128) #3 +depends_on:0 +5:exp:0:hex:"fbaa5e65ce5580d774739340e025eac46550b5d3865829eaef9b59ea37d094692b9fd15ca25468fcf7e38f7dcecd5fd85c686057e1ab9bab":hex:"":hex:"f0e722190994c66f64ff725e8a9b3be0":hex:"548ed3bbccc8f9f79c70b2e85ee0e626":hex:"2c07d2994fbf0bbefbbaf60e0dbc712f12f8ddc3aa6d94ea9e9d3083209ec35c4cf3e62bceb9ab042e60050520e0469961dbdaee0787fda6f1c49755855752753b1e87031a6821c04cda887cdedecc55" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 128) #4 +depends_on:0 +5:exp:0:hex:"13747421a19855709f3c468a5b1f77c19eb589a0b18c06da3aae0078b85ee10c79d1925f5ab2045eac1f2ffdd850e7602cda7debeb042bea":hex:"":hex:"3c95ff221ccf82f4041fcf4e8a56de29":hex:"3471a7ab4234fc6e8678d3613ee10835":hex:"c346efd443cec6f21eca26eb5289e0bec5eb3f7c3785842e7690d5d35eddc87d79041aa0a9d5e4ee9ec69a4b67b26ccb70eecb59df582316b8f1b945a25c64b861a6decb59adc1447cea219947f6aa72" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 128) #5 +depends_on:0 +5:exp:0:hex:"4f72d884628c90261fdfa9b87bdbbce93daaf175d0290ae7f725e8a9f9b8c98807b57a591d4e8b2a5b692a6e310c4851bc4a6d986eba9cef":hex:"":hex:"8b3a7401800ee1bf5fdc76243b313244":hex:"cc199f4f43036b0af63fe3f8ef4ab3d2":hex:"6950a89759b52b6c8416600f9e0d56d19fab12b423d746af9d00a6657f3b8f3a3681c0910343569544b8b537294aa610e89b977c4db21a324317587be8b9232b38d354eb3e4032cacd561dfe42e72d23" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 128) #6 +depends_on:0 +5:exp:0:hex:"59c23b4073e7c9d2871d5d882953a33b17eb2a8b0b9b068870c070deb9f1324b8fc29fdb612c52dd300889913ab120536cf9a389485859bb":hex:"":hex:"a6483a9e5113a45a84f6630869291461":hex:"b93bbb79da7750f44e4561081ac4f29e":hex:"6a298856c9b25b20de0159890135beddc415802307b87507d62b2ad32b1883e4ba036308a6669a06246d4afc43a29e183ca141f156f7b1975095bf14cceaf71cd2831fac8870d90fe0e1067434783a5e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 128) #7 +depends_on:0 +5:exp:0:hex:"a4b620abe19aff576cddb8f6d1e83b59c26d4ba79fb8346974ca841db33e280d59e28e110cfeafc4f033c6a45f443f528a326ed4c2de5cd9":hex:"":hex:"be26760cfc23c0cad1ad0978c3ec8f09":hex:"e767cc6694242b003d6d3795415389b8":hex:"89d79211db69679c2269dfb2e599740ff646eb9ebd5f28a68b76665e6087d15fb888bbf899e3d16d711c3db63e3dbf9cd9bcaad6984be04afe5b41c2270431948ddf4486272f136f1c5bdf37cd2a70e8" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 128) #8 +depends_on:0 +5:exp:0:hex:"994e455c4815ffd4a9ee168d1fccd3b661da827c4e81b102db0b28977c81bc4dd58d06819e2939883983f9ebf1356b0d01e6dc02735596ca":hex:"":hex:"029caa66544f6ae8f6cc5bd3791f86f0":hex:"7f14c05c5d88acafab220aa467e3e3ca":hex:"fde93e19f71fa97fc368f5f4454df8a39b3fce42bd4a801726b296838c3dcc6678bb387687e2c943edab86902e377a619950d36fe78cd7ba3c67aaecafdd9f7faa2076d71fa79646933387bd6bee147a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 128) #9 +depends_on:0 +5:exp:0:hex:"2713eb063d3876dd6c3a5903a1ef5774a180c4123eeeea8a4aa472cf07c278ac367a9a490c7ddef058d6bf34ec9db314abb119a1a017a17e":hex:"":hex:"4452362eed6b9c30a01f784a9a06dc5d":hex:"e59780f291461d2665924f3af8bcb6e0":hex:"743f529bee048d0be6f10da0101c63c746fbeed37c6cd0c0ae97854893a00c82b65acc9e6e6ec04357e5e4b3159a4ef3e5e57a38da2e00f0eb3c1538a26ee1a518f71169d59b0d9e8a021f3d623b8fc5" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 128) #10 +depends_on:0 +5:exp:0:hex:"ff2cb4930d26b0ee75bd9edfb77e09f50c80049f75ba95a5137ea862d086d6523bdfde203bb8c2a9bb588ef2428a173453136bdedec37eb3":hex:"":hex:"a52775c066b6e9f7508b30ca22944296":hex:"5e4ad554e65a49685e8527f923cbc0cc":hex:"4e9134db809bd07a46f40bc1a1f6d830808121eed25d17d7ce3eb81bb88ec660b7dd945ebe9fef8bdccda92139f4770ab8a467e0118f24680c6f6e5b9ad6ee94a086118b6cf69aceb8cd809d91429aa6" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 128) #11 +depends_on:0 +5:exp:0:hex:"72971d13d6356e68fa61d94ae1d76a91b69d8b39499393fe9eb2889d14d91a7488207bd8ee536d481b37237b0995a218fb56dd1740335992":hex:"":hex:"0e59b74d4ac5ab8bb51c7f4b99ff859e":hex:"232dec60628a43216b75839ac820fe4d":hex:"1f1adb85b8d7d1e022d5a6594ce074242683993ee4d3c5166a2aaf40c239830587b1112af2a4313e363ea4a980b06f20c5ee3207de026aaea9197c95d0e771f4f16a2cab41c0684c15e6462cb7a5a71a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 128) #12 +depends_on:0 +5:exp:0:hex:"975c10933f7351262a4296aa6175471fa34e7c9b3437b5c7013e22d2a9002e9e42d27202e0518b53da23016d1f5b7b63c46c1391886934d5":hex:"":hex:"b7063d6ba3740d5c258303d5393f8f3b":hex:"9161780ba6bef05da7290a77416767ba":hex:"b68b4ebb6856af7337745e0a50caa1d34abe27594d56d846794c15bc03973d67d548bbd2680dc749c5171372e27af16900d6bf729a84e6d7626563ef0b4c90c275d9112567b8ca6e0093b34a0966f27d" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 128) #13 +depends_on:0 +5:exp:0:hex:"e1dfa7999006aee12a2349ae1d580f5ca2a437dc0bc294f449f2670afc55e8fa8152c787a014880f670c585cfca574ea2d13f28e6a0ea677":hex:"":hex:"d77a830f650a3331a72f0a4b1471dab6":hex:"37aef81e729ed0b91bf054ce98df4a76":hex:"c009a692d7e566b58cc54a45f7d6987a48d96c3664f6034ae3ac0dae9ed5c220c46ef0c638c75353ac790124d88ca54fe43797f1a70422604507a2ab458fed576ccf6d25cf521da8d0c3b7bfa16ee6f6" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 0, 128) #14 +depends_on:0 +5:exp:0:hex:"310d8d08687545e48493db179e6e92a176cba53ff17cd783ba5d38da5f2e51468b0a9489c88b8db0be4a2c87c875be0e1be01aadf2efeef6":hex:"":hex:"a1824b07e0d2ada0fadec29beb53a9f7":hex:"ccdb3f7d7f6a4d169f5f2e24ec481fcb":hex:"bfcc8f2ece23d22545ec2176aabd083855923ca9a673b54b66a3e2562212aad3cc74c4c8976de259cc95a2f09a85b7acd1f18c343eff0368a80e73a547efdcd954816b38df1c19556d714897e317d69f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 0) #0 +depends_on:0 +5:exp:0:hex:"db8128c27eaf3a39d5019785aa35b20c3977437fd75e8032ed340ddbe1b29eb9bedb3048a3fdd06aa957c5cff00eb87549c307400d4059d0":hex:"4f8060506daf40819c7c58630151edc7":hex:"":hex:"":hex:"4ac933b7de803c266461493a19dbb00e9db25ee768165781fc9a70c67c4e8a92db36471e3cb1714fbb65e17d74770061b0abae52be34a604d87e56a4ae1e90c6533cc764aa7419b5439e3efa193934bb" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 0) #1 +depends_on:0 +5:exp:0:hex:"87c80a5e334e02a36f59324befb4fae19e5b73aef691d45e8973f58a487b457d73c4312ff890b053472d95de538f1512f6432233b7d9c058":hex:"6cc5553434148499d65f8e4ab7334938":hex:"":hex:"":hex:"5ccdcb3d022eb4d72c211594c916dd2d883d2ecc190f6e78ed76f438562059e6f8800ce6d11b3b8603243f4a56f38d41672935ace8d6fab825cb6978a2d0827aa65c70523c48f7b9a8f6fe43cc2ba927" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 0) #2 +depends_on:0 +5:exp:0:hex:"83c113dabd43229d4a7333147c7d84f48fc29ea3d813c0f1d45c5184906a02ea4c6f11b149db7f98812904be3ee96de25ac9a78ccdfddeb3":hex:"77dc45d37d6d401e45c982f2c4960fd6":hex:"":hex:"":hex:"e4f08087eaae11fca94bd7df816980e6608e208032f944f1efc50ac8d47834b9f10c00958837633e61f3ed2351c6885446b72d2634bf6b69f9d7b7a36f3fb8e98294f1e9d92a4a725462e60325dc41ca" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 0) #3 +depends_on:0 +5:exp:0:hex:"aec809c1b7eef916569cca247cd9e7b072df669458c8af4d29fecba0c46130ba920fc8bf7d29cfaeda476607f3325566ef52fb69a3defc54":hex:"824b11ac7e13f654ff4238e0f28a2f60":hex:"":hex:"":hex:"514f1adaeb99dd2833f714a53804aca43a99fce45caf5db166b15acb0460f5e7e23c696fdaa8ecd138a937367483dc7bb7a6af51a611aa7b0671559aed14109133738e06bf2190bb85abef3a674e488a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 0) #4 +depends_on:0 +5:exp:0:hex:"b2f5cacdf871e742c262c7671b59a74c6a41242b2225f252cba7db3bf77d6619af46532eb9c01b72cde2978ec39e4fe5247ac5f0fea559d8":hex:"2cbfb9bc6c318219df86e08ab11419e2":hex:"":hex:"":hex:"67d393c84d05983f5acfb8883ed44e24406f216efa3d6650807fabd3028fb1f762d6c67ffb0aabe8143fd3ddfda8ca2c7ef13546dcffc4dcf95b610a28f7cc2a25ac4e7ec0944d655c56c110fa931ff7" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 0) #5 +depends_on:0 +5:exp:0:hex:"54ef54d0425f8cebd127fed0f395884613dc19463664d19d02af6baf06de126b55fbb3d7f114728bb4650839f1335f8c2c3be18ea3beea75":hex:"f0cef260a2f74a425d062bb25c68c539":hex:"":hex:"":hex:"dd8b96a5f3fbd0f5f69477c5b7e71099b2113888fcfa6acce713a13f040b0b5fd55100a3d0d3a344706a31e796d6999f63cc6357f5ba386f38d46bca9c42a25c4a39afdc7db8d843a032ef35bf4b15ef" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 0) #6 +depends_on:0 +5:exp:0:hex:"4a1781c483eae07e0a9ddd91b908fb00a21a4f5e1c6e9da58f380f407dbcc982cd0761e5f0fd6d339a646bdc6132addb7ac0cdefb1b91f7d":hex:"c4b7084d73d399c128e0a119217c793f":hex:"":hex:"":hex:"e465cbc1502709493de1d3347a07f855b2dd6435a4ebaaf00e7756c1439219546e5fc67093f0eac1055d221fde51297cdc9ff41121d582514c75e9906870f99d58806f1873f0183277510cf1f067a840" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 0) #7 +depends_on:0 +5:exp:0:hex:"36974a7c276e18ed2704eedef6b627f8e57e755d554b80efd0f065c236f78964cfd3b661405b98640631fda19fefa8b5b003e8b752ef060b":hex:"626a8bc0d1fab08c8c6afcdc3dc6ac33":hex:"":hex:"":hex:"6b9ae340e5e75e1dcf6f181589a1fdba3951417c30467be4b41e9ff4ce03073ef1ba0a19d160abc8e5e23ed433bcc421ff1f428780454defb66511fc94794f3ec1c48c014d783bb173db102275b64b1f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 0) #8 +depends_on:0 +5:exp:0:hex:"05f934d668e9630a131ac51e2560e45a78ceb8ef6fad7190045cd995039bfb3db624f4687302445fad08829815e7407fc962afe2779589f5":hex:"8536223ee0184eb43e84a07cf71d445d":hex:"":hex:"":hex:"97142414252556f5d5efafd39852d7a84e70316a0aff7985ed6761798eec57621271977bb950187a290dd4dd514b7a801c98103d4fd4012afdfe0f264bfe3f6e584768503831ea0211fe0415a0f59324" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 0) #9 +depends_on:0 +5:exp:0:hex:"e2ee5b3970ac4cb83061e5692b349df8643b6100aac55ab296fcaf7a2ef7e3a1aa54c3fb1963dfd93781ca34a95d6fc3250762bd1d31b0b4":hex:"71a4316ea88341dcf3c9280a5cb54b7f":hex:"":hex:"":hex:"bf767ed7e5f11abf1a6aa5c453fa124401297e32f23270c8d78423a98f5e6783f3e8e835aa734b36c2f11be30acf0b598c7a23ac40ce894689a24fd8de3e0812e9a5cc1791091c981bfa9ec2168daf90" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 0) #10 +depends_on:0 +5:exp:0:hex:"32bd60df5e2b435c922a9e434f5f99be9c5437ff159c7e5e67b81b82f7b5ecdf6e60ec4789820d37a1071d7b91cf1e3d14f10ef7f34922cd":hex:"c759e4ab6c8fe8a11a1f8472b06eee0f":hex:"":hex:"":hex:"329cc81105343bd74f24c0a59b972892e789ea20e46ead1a74e7af036a836d46c70461c52df5038282e53e2db44143590d6015809db56754b778a2a7278d5050eeec9332fd732c9c714a676563c8c3ef" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 0) #11 +depends_on:0 +5:exp:0:hex:"ac524ec09761670b96563803218a7d3589bd8e682b2a5cef64d96b968ec98839a97a4704a7a5b2b859f3ed6c370031f1027def8fa0672a26":hex:"1531a17d3d89c1d0775f3a630ba730b8":hex:"":hex:"":hex:"47e3bfaa2cbe4b085603991aa739363a639b064dd9120e0149cb5ba2ba0539c4147897a34d98538935fe25ab36cf50f6a1c3aa2892e2c06591e4c2bccfa990f6317732d5581944c8d2ef96d0329ac574" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 0) #12 +depends_on:0 +5:exp:0:hex:"2c9a43ef1496352ea62ced1c345de4090a9cea6898b8a53abb2f01a435ec6d2050a692b44fa152bfc42ce4ea30ef761297c1ef132839d411":hex:"00bfb2ff2600fe1dc6a2d85642e9eced":hex:"":hex:"":hex:"193d08bfb22121deb22e8079895703e2a518b79bfc3104038c2a220f6babeb8f28f5652d5d1b3a8b468d8a4ed0cb32c69c5519ded85ddc0fea62d77ec5158b6a55caec3bbdf1f6b93e449d6f15cce26a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 0) #13 +depends_on:0 +5:exp:0:hex:"0f15ec0c8d3c184d9b2a47bf9ffa20982685161bec91fad2c55808ccafd46ecd18081738cf835e1347e7df7e3f879f3fbb759c2051e34217":hex:"eaef27215467d7878106ba9dae990bef":hex:"":hex:"":hex:"bcf79ad50201f3498cf18288dc30c32dfbf2739490c74862d5e9c66b16195590075cfe094956e2bcba2009b64a5f8b62d144158180835a7f51b706a12884e309ab4ec198f5bd07efffd591d5cc8569e1" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 0) #14 +depends_on:0 +5:exp:0:hex:"56a0b6194153e0d2737f49f4e5cb77ba4d8fbf9914405833f324c09f96434ceea7e756fc2f55a0b3f043b6e11fc2f671ec00f4d478b791c6":hex:"81a85cb2b6afa99a1f609f83c3b15105":hex:"":hex:"":hex:"40e87b822b1000441884a38b8776baa69fbea99962571e8a20d8af012d50c8c211860ad579869ec880320ea8057d5cb0de9496ec57d8b594ca8be5b94219eaa800af7205f8a83b66c87e0fee9aa9732f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 128) #0 +depends_on:0 +5:exp:0:hex:"680face90d7bca21d4a0edb7799ee5d8b7be9eeddd0e3b4b7cafe231630aa95a742c4e5f5f22c6a41c0d7792898827948a589f822d1af7a6":hex:"f58c40ae70f7a55648a931a0a9313dd7":hex:"dc3663f062789cd15cbb20c3c18cd9d7":hex:"fe85b0ab14c696e69c24e7b5a137120c":hex:"68004b3a28f7f01cf9e9b5712079ef80871b08b9a91bcd2b9f094da48480b34cafd5596b0c0a48e148dabc6f77b8ffaf187028e104137a4feb1c72b0c44fe8b1afaba5bcfd8667f2f55b4606632e3cbc" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 128) #1 +depends_on:0 +5:exp:0:hex:"b481041a75b03cdaa07784e372b376897fa9e792e1fa5e078d4c7234fb9dc3f9804b4e48a32a5db74990333c4951d02823765f90a0aa8850":hex:"f8f0f1ed3f0bda164e596ebe123b7f75":hex:"3120e329f1d55a8c07e7472ac77e1720":hex:"2b9ff310e63c67b5e0aeb47ff7a102fa":hex:"7d6b3ab84bb6c014dd44eb1266fb3954f1e8ff6c48a4d91514f685f0642497cb1936a0afc40c8ddd1545204e128fd06d4d18bba05d1294e64d57a0593b803a311b37cc2d631487ab03a00fe288e5e745" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 128) #2 +depends_on:0 +5:exp:0:hex:"aef9d310cfced29873b7e2b7be37572b76ed84b043364cca611917f9b12053f919cdf60ac9c0b364909f096204f21b58b0bbdcf38a3be7e9":hex:"67e5aa83fa572ca27acfcd27d4f5e49b":hex:"7ae90f7dc220bf5b387ed44c2425af29":hex:"9d750dc13c19acf3cdba10155d3ca5a7":hex:"892776bfb009fe0b1793c0ebb2ba549cbcc4a29d0374070683990c3f2c622ee08977fe9361c59838f068f6758d7f3f76c383d9f59ded8501f25eff9be4a1e2de3ee484a2e8069c51e886a75a229ae15f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 128) #3 +depends_on:0 +5:exp:0:hex:"b68686b8cf817da9c93cfcd7aae410c02d3a8eaff57c6ecf990f20f70c587166292b5f56cef1ccc5018c38a602f811c7cdc16ed59faaf405":hex:"03cd598585a3a80f9a81e2780c699269":hex:"dc761246e0a74339adb76c729ec1414b":hex:"b2936022922202757eae4e5d59eb29e3":hex:"6e9735b82a9da2074f93b54580aeb76bc75265e525f1b50a8ee0d6851317beb64f477f3b3457ca9c120cd8eab6d37400ae62332bc91cab803b0c44e070666f9389a9d0fbe8baab9cc5c0cd54a397c8e1" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 128) #4 +depends_on:0 +5:exp:0:hex:"cb68eb95bb00beb896048d5d323d737942b1a4795806fc6bbcf67d195862172f49bb319e609965feda2937165b8dffa6560e1fd434a5ea0f":hex:"700dc7725321a0a21a70ff6aebe30d82":hex:"d57c3dfbcb18e280cef81c7118a520f2":hex:"6e569776b8a26d8e7d3c87f99f932aac":hex:"b017eb98c5d782469658d47569453b8322a8db7a2abe75b4e68637a395f7c67bee75a42b39def3aacb0b1a03677a0bb4d31257964f467b7b3962d912daf6d8441e5952aaa427c246a1f1a623a8498a53" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 128) #5 +depends_on:0 +5:exp:0:hex:"81e7eccf46acd145d435b80f2a6e72eb1b236d02f12554270c26e8ba13e9306856d6219ad04a8f1be3fa436bf280f579c22b64c91ac700b2":hex:"33a186afbc44f3adec590d7e36bd9905":hex:"bcfd99d6931ea9df679d196d8412c9ad":hex:"6dd61af0f5077df531c151f2dbe2bad2":hex:"41e6ced34a97afee72166239455d82fe020f5464ccbc8e875e06a05875ca844d8b7fa3ec360d31ae57f53245e7c4bed501ebb6f9b4af350ff9cd86a571360804d3a34b9dc11eb4be6427f521bd14f893" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 128) #6 +depends_on:0 +5:exp:0:hex:"1b76bb8a0dc7067afa193bf5dae1cd7c03dcc37b5788d22fe0f4adda99dc6d776fa545aabfb767255001063ddd99c7ef656a16e7604c5102":hex:"b06bb683dc5018f0678c14b97547944e":hex:"87ea4f713562b129079b49956eb88abb":hex:"5650ef281323b6acec34c51795c67160":hex:"afeae028a358702743b14dd64414d3350eb1de78702677e30f7ff9e71d6f9b368c53e79b0a353a43ec06e9020c7234232a07d504c163d7a8a63496bdaf670efcf2597b66bd0dea2b827e0a4ce513425e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 128) #7 +depends_on:0 +5:exp:0:hex:"117ad3f68248555a2b9941cf0a56726ca162bf9b531f26e3416be004bcc6fc35be8362c6dbd9771d42bd6e187868d598f6e2647b536c9728":hex:"16168c2a54d8dd7150cd7f122482a723":hex:"4e4cb0001c5288c1538dccb80be01e41":hex:"8177c1d4def6bde093f27a9894d345ee":hex:"1e407dd8c1dd1436064f2015eab9c5fb9b88b6dd017e1196ce70fd9ec878a8cb02e2d221f4096e7998dbffbf0b392e7f4d97e0d1cdf81755507c04b5a6254086b40d153b10faf0011980bc0911275145" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 128) #8 +depends_on:0 +5:exp:0:hex:"54bada0b89d9f5bbea78aa8c409dccd039acfd7b1645a0ef193b60cac97196e4cf9795fede9d898d082a9731a8ce2168a10420c5d6bd9a0c":hex:"1c8feb149d98faf15b73622167064088":hex:"a71ee8a522d67194bd1756c2e2898115":hex:"669ef07679f336f529058672f861b0f3":hex:"d72d43ff8704248a0d59a111b64128fa6bff265c52bdae38507ce5f302158be902d8380fe247abc0275dbbb502867f7ad1cddde0e404fd9d64ec494daac5d088401b4da696f47a31b4435abbea71c387" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 128) #9 +depends_on:0 +5:exp:0:hex:"8cd407fc7a36315f1cfef1489a2ecdec433b2cbc1fda4ae1d967e192ea8942aecaa169deca4c268246edb421a0092a12091497a5fa159327":hex:"114a4f3446eb3c98aa9c182d329b2856":hex:"f29994a39804004e7ac50642f99c403b":hex:"40782cf3d002aa603026e26d3bbc6dd1":hex:"cf381392567f9e0d1f55c642bc64075699254df6b4b375fff8f869f7a10188046276dcf41076c55990b6b997db182fcc88cbacc4782347b9f4ce39351b77e378931d5cd026d997ab104b8b7787b2f92b" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 128) #10 +depends_on:0 +5:exp:0:hex:"dc8d705180e22f8be91aa4bd57a02caa30fe8340a53c64ad2d460e409c3a2db9fdfde9034a4c8f306195fa6653dc29d84d26af5118fb60af":hex:"4b51ded198d1b16f80ba9e536a2a046d":hex:"ceacb5b37ca76de240a9f4dea89a0389":hex:"73c614b8e273ea9203683d1b0cb2d7a6":hex:"6a136d4218255c70913b73af480af86cd8ccb6f319937e075365ef014187c312f9069f1fd05c6e0c44a1b7ba9dd25e948ac155461e425d864cc83b63bd84289b768058f7647a8921e23bfa7c73b4476a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 128) #11 +depends_on:0 +5:exp:0:hex:"1796646b48a2b982fcf7a4f49fee7e3d6be673106a4a29371eb8d3598888d53f59572c63c0e4bb183b17e0f67d81a11cc878ef600d1bb810":hex:"5297aedbca866d1754c4b6af443ab24c":hex:"771688574b52154837bdff6ddcf24d52":hex:"f6c627bc84b2c01a9c055d4632ec955c":hex:"9d1c796a2343ee855859e04ed702fa233da2f73ac9ad632fd17c8c5afe15c5600c6ab2495018f808b1cebc54b14ae2b1f929347be4aed9836e0b45dd2352b23cb28d753045f1ae6aff7598a9a1c350a7" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 128) #12 +depends_on:0 +5:exp:0:hex:"c5aa3b0e9d8f916f18e73daa0cb88a447f7510af40f9dd540f8ae4d62be2c5754f6eb10410c121388233201ff9c8121a36ae77e042a98211":hex:"06c35c446e28f21fb1cdf2d40af53dc6":hex:"41015c3ef3adb96edbfaea6eb8e0dea6":hex:"e6b60016bb99415640506851c0fe3fb7":hex:"027ff1ab4c406c048da6a8c24f04d12a5a35a5191b62b496459b750b10066cfbac502b1ac612b58527744f6ac5005d22d3f86c1adeb1c1bf1a26902474d08bf886ed5bb26e6d1b529df0143128b397f4" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 128) #13 +depends_on:0 +5:exp:0:hex:"57c7e29e0305e6a803a568f47acaed60d13e192c1e16bd9bc50ef5ebb52c5493bcc4d7a0e5be64d064b735deabbf67e94395544497e4816c":hex:"89199bb960ac741082c5fe5ea34ea2f3":hex:"53b5b2783d8191ad4eae3ed87bc059ed":hex:"fce4d7f5f0cb2115d4c4be2294deca56":hex:"b98839a962db8de7a17d35c35bda06c4139db3933c4ee60bf1779b16d804d7c600a62f9c57cef93a79ff281989d90481db863d23cd24c4b566d74e1de6596b7cceefcef1f161e5a51d115128e0b23c5b" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-1, 128, 128) #14 +depends_on:0 +5:exp:0:hex:"567d3f4c0de396ed67569c070d87f2b535ec874e881418983ec42ceb295b7d312e715e46b96f9da5998f9cde45b1dc22db6d2d7bfd4f3930":hex:"43c16ab49ca5174f907d7899ebd242e9":hex:"6c0b479d9e847dfbeae230bd4601d0db":hex:"0d5a2183c9f9ca6941f6a617892f5e47":hex:"934fe82b0951b97dafc5ba16e87b0459691156b42ff2dbbbd8f6ed9b04be952af267c6a17fbfc86de91f9f07eed482a5362b176216a8963af485503ba93b2e82c03a3ee6225077d90cd961e24f6026f6" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 0) #0 +depends_on:1 +5:exp:1:hex:"f3a709bb47a36838cb998fb6986ff074c57932a669670570ff6cd1b202ee1da014a011f43fc02c51ffcb4048cc060763f2c58de2edd494275da14118c9cb7fd50475c66cc7e792406213a7d00cf7623d931a5947":hex:"":hex:"":hex:"":hex:"bbe3daefa61fe302bdaa6d4d379680acfd0d456b5d35f137c145b72626f2fcf39fdf7f3708d9e88c1710408a3d7ece3b0261ff538846fd5452149960215c0c22beafe6cd24a7c392d5845774b87528912c322119a2adf4d35a0ba61dd36ffc8a7e7475afec58ad4a8cf343afb677f087" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 0) #1 +depends_on:1 +5:exp:1:hex:"0f508c6330b9673e94861ae2057e200ae8f2b330b74634d79fe8a4c698211080db07e58b762a2387379f0c0e2d01b2ca40ef82fec35eb81a5493ccef709dbaa0b0e4494e460530062c8db7446bc6af2d852fd875":hex:"":hex:"":hex:"":hex:"583367bde003eb2061cdb6f51db9c6827cbcefbff0497ba823e112edbf7f2066fcffa3e92d1e8c531007783554e6aa8a633bc925690ca6d579fbedbf9cc4d6cb08133d0cf8d4c25fcd3b6fed95f00b1bb17477cf67b97a557e7da933bdc121481755f628fdf0f0b1189a097c7147169e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 0) #2 +depends_on:1 +5:exp:1:hex:"9082871e73b098bbc58f324f12f6a83c321360c9f5b400d00a9bb865ef5265083d9309657c40ac94b579995902df0e2084eb4a6410cac605e482ea4abe5c8eb73bc63f68baaeaa56d47f7d74974d940555fd3861":hex:"":hex:"":hex:"":hex:"67c2fd4397af79297782af9baad2a26b993efa48c689a74531417ae102d4ea1d6a82cb0321aee3dc2572ad27299e81a7a77f1cf837119e746988f2ec60bb01eb2ac3d110a948c1c33e86833757e2670cc3947658f3b2d32ac59242f152e889d03d03056f0a265ee759d3a4488b55c63a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 0) #3 +depends_on:1 +5:exp:1:hex:"4701f34326930cf93deaeb3a9c196e307a890c8ccf44a55f84593b3388a196238fdd97d201998ec734821998e7d6bef7b31fa2a81343918056c01d65f519c8576e4120a3d6b9ce28ccf57eeabd012d2c14e47045":hex:"":hex:"":hex:"":hex:"b499b86b0a25a0fc84a9a1b902972e2bb5aaf9b84f13804d6180491285b9316218cde0e73eacf722b5c664f4e618625ed35c5facbfca153cc184309754ecaad9c3678ce51ade96dfe3290e125d661e2afbdadfa73240c24939bc31d171712c7c987bfb434f1db6ed44b321bcd237f149" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 0) #4 +depends_on:1 +5:exp:1:hex:"a912b6755cd2d677d63268a5203739b0785d7d956738a596e269128a583921aacbba1adb7c6d1714c164143c8f44e76711965514651680235068476ab137d5962e5e5872f3b899d0e9ca5ae8fe71bdcfaef1d241":hex:"":hex:"":hex:"":hex:"0f410304b6d88e52c8d6039ca674a06c49a5fa1094cf341c4034e39990236d9e5bb8ebb6e59849e7df82e2d02981d8df21e4ba3381e606b99c16de62860a470109c0123c69ebaf970603f451f9e6acf83e1c5951c3cb87170ef319d9a791110aea0c0dae5623c287d4c454ec93227654" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 0) #5 +depends_on:1 +5:exp:1:hex:"54fb376707de02a1c385a3da78523485111a0a099066206f210ad848f29d3c270d2fd2f668cdd3a57cabed71f9d784c209259d1e4a3eee2046846a55a46965e495eb29725a86bd630dc43cd60ddb4fc93c59980d":hex:"":hex:"":hex:"":hex:"a2e3ab5390b5b79786ec7b434de48e45f590b85513106008479d8a3b7b236c884b0f871d8dee539c712509bd70de351f3881cd87c9cf77c1a9d8879986ff0f6678549c5c6acd15aeb6bbe653a9bc76829df2f194c5f6e8c7dd3058971ce15273a2d559c1ac60a0014e5e32352d6be2a1" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 0) #6 +depends_on:1 +5:exp:1:hex:"3a0c24b5a6106d28c02957538e76e96b3ececfa80ba4c7d01fe642a88fc822884cc36ac2703e8952ee635948715f78c542e6e3270f2757f1652474df4706490b18e649ffd95dc518a8b4259da193600af5d5bde1":hex:"":hex:"":hex:"":hex:"55dc24206aa59d34ea990ac6b31250f15ac056c8ecd52e159f3464c38e1f28840eec4c6423b0fd9971d11c5ab99225eda5d173c08f9439bb56eb1cc487fdaea934fa816f9c9e0d628f111cbe60a647e03892084f80775248d41cb587617671d99b508644476b66c1c96979e5061e025a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 0) #7 +depends_on:1 +5:exp:1:hex:"ae7ff70bb69c964f05c99c0e7868210d567bcb5eb02db7708de162e6bbfd91fa17f30656420dad1ca69d356cbab80456cef922a9206f07d32c3f198c1a68e673c5583674bb1df1f2a69c554fdd3411c81a90c83f":hex:"":hex:"":hex:"":hex:"f1f3f79b1d7f988d4caf7308416f3d02371cc029a28eb4f0247c8625c4680a2dcbe9f3d56d92de6ee4d4031a254bda8a657bc147fb90c2f7783a8e3749b60633e5a921d015b846b3cb38830bc7554308af08ee8219e5acd1b699f1ac538930d257da4ef567ca570a7951bfb236d4d36b" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 0) #8 +depends_on:1 +5:exp:1:hex:"86704ad0286f88dbc60baebc2ed0571de7b5ab64bc8554ba8645557fa10159ec03cc9f6f299c1c3011c73b2563e571fc24f5b5b50b4bee514d7c808873ca804b147201ba7ed43430d89b066c04b00b0a17694523":hex:"":hex:"":hex:"":hex:"6b1a26d7d21308d217bc8988067ef3e21f5bc10d34e89937f2a89f8da256acef50b6ea7d9ea877bc1d15002b1766e9bc7fea3d681b147e42359ce29d6d4f8c73e7c29b9ec14277fce2f6a0c518d24aeada44990f7f92b0d1184ff96b20c76d506f6f9d963391abec5bc247a2ac6b24c7" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 0) #9 +depends_on:1 +5:exp:1:hex:"d0b30341b4fd48281f76a83d7de5769d05d5cb9e565b213c8e2bc8d4adcbae90107fc12fc1ed2a19f20beb563de8f05bc5c437637148154a12b1606bff071dbb366458b74a07a1c14114fab487772d436d4ce159":hex:"":hex:"":hex:"":hex:"fe2a7ced1965f013d475724eaa7d31b62740be411d899afa79f9fa6e73f18ebe0907f2f21388b6498cd365798f27f882a2c5c2744a9b25e8d351e77b9fa4471ceb1dd6c72fdef75977e4e4a246e24f56a615189e1b2a8d6782e8c5062b744a65ebe1f7c5fbcab333fdc155bfee300503" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 0) #10 +depends_on:1 +5:exp:1:hex:"4a1a697e41537f28b381e05f11ebc905bd66c2c1d905d8c0b78c10c26cdf547a1b6f85ff58f48298a11bba41e3ec015d41a24d9e335e6e13b06b84b9f56b3e803bac569dae2d74c444bb58b3a6344bfbb9eee765":hex:"":hex:"":hex:"":hex:"15060b2bc827dbeefa2170ade633b0f0075a4b9b03fc24f73522174be4e4b08b93b421fa98c7c5a445c3aafed47a2eeeed63f19ef4f67e7726d8ff84bd94daa3338e397d52abea4c7d1191e30f3e8a11864f10ff56b2dbefd860655d34cf63ea22bbb54dfd0c5f64284c303a2ba2f49e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 0) #11 +depends_on:1 +5:exp:1:hex:"e80b8c8896557d596e192c3226347c336dae455b50bf32a78c61b9a98c949096be51538e293d338a464eae0eb18f1ab21f9903d07a8b98ea2ad7f41fe7ffdc4b4bd0fd06138a84dc5217cc8fe39b92f9558aa619":hex:"":hex:"":hex:"":hex:"55574491d07db3aff94dcb71f519cffe2f96ef57219262860c3c03f9a5b8a1eb88869e69587f8bc0693c9919bb277dc84fa55187c0dbb20101f0c4e301dcd2fe21664e5a2f0dda3eb4f11df3878c5becddbfc3ca032a17f740d424b99be0a9bedfd99907229ecccbf459f5495533560e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 0) #12 +depends_on:1 +5:exp:1:hex:"5c25f02bef1f1319cb6868d836c9cbc182fd8d86ecd87bc5cba41c163710074e80d1a30ddfd0f5d88c6682292cd50c68966d15e6ff95e117d342d974ff074ee872719d15745da624f8503a6141b0ac4b887ead5f":hex:"":hex:"":hex:"":hex:"9c5204d5471c25203f1d9786d38f71081a872f1c56604dc7570caa5439f17cddb7feff01cadaac8e0f35e7a5433cbbcd2dd4f11cc7dd14f6af629fd72a3145db6924d2bdefc262662367b7258cff36172263460f4dd52dd08faed3460bbffe18eb10ff5b3c6a97faddf65b3e21ecc98c" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 0) #13 +depends_on:1 +5:exp:1:hex:"68b4e1ddfd16a1c1ecb0f4221306e77ad02b07993457eace086f66566afc5f12489633c605d11d53916eee96ed778d6d6518c5681f0fa9b0160da1c71740a94ab33310bc20a18710015af25d3d667c40dc619f34":hex:"":hex:"":hex:"":hex:"5c4c9b3276d546d3b6277a3a2089d4969146d833e0ace3e1ddbd9f79fa2158531f8bb26a28b08dc64bb1e610f13eb14c9fb23559dc2f38326e145ab509b9f69259a0d1a32f471d5abf154a2585288063845f99306f9bb875ccb0d32e9d49b42900257ebaa532e8ec223aea60abc9714d" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 0) #14 +depends_on:1 +5:exp:1:hex:"d5ee5e2e629ea17487e593914012575daa8baf2d0e9671e1b8aad16524dbdf7d04c11130cdc10e50c630ccb235579a72b6eb4502fe146aabdab62a085c820ea46bb9091054d75a892a83c3850da0a31c15e0d021":hex:"":hex:"":hex:"":hex:"e32c0798b2040620fbc5d2a44ec7fa8038444c1910fd4a24312c8c8eadb57a78606449cf05ac51a3bc4d58ce78742c1be3a0fab6e3f5ebc92b82b5d5d64ce29e8c2787ace0f4e718a7f6cb669a0a43ba1aee0d9aef55cb7c6f5dff57c8acfe883ffd8a496d44afe06803e4c9ff62df04" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 192) #0 +depends_on:1 +5:exp:1:hex:"6e531842b9b7fe2c0ee66899a1255135f784a2d5259c93ab3d63a5cb708e2e6cba955897d9b66c7fab274aa388a5db69713c86faa4a19709e9aab04638c670ffaa83806abf79a43e613e62cccafc637e1a1c0c14":hex:"":hex:"e628db057250fbc6fc5aba01b6c8b47062ec5632a8566730":hex:"bd12e61e3d5218efb0c103dc49402800cfb863ec8925e76a":hex:"037650ddf66ed42ea38cf44aaa94884effc5f831c593fb35886b5d601a58f74f868d89f2dba450b9c160e28f69fd24e30fb7a44189810e29afd0d11762d3ef07b4527f4134d6c53bdc9b024cebb6b40fbacd68b6acd4bb4d011d6705ce22f90d910ac4017d2426db7a48db3242161aa8" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 192) #1 +depends_on:1 +5:exp:1:hex:"3fadabd2d8879bd2298f53c54b573db2584655e08a83289cb58a4ff5170fdc30d71bb24efbb5a50def315dc69146111462e204289a64ce72767499f299c74c934f0007ddb34bf5183bc1e5afd8c15eebdebba882":hex:"":hex:"742f7022892c2123e62379e9367787302fd18dc3835de0bd":hex:"b60325136fde7c858054983a977262b6390a48419725febe":hex:"3bfa419f9bad259b871703681284c5396fa94a323d646ddbf5339398c4d8314a999c230894ac60bf231762acada672f58154a86f80a8c4e3bbc67132e22ef50c0377193cb0d13c7e2c97cb24ce5bb69c73be2e5cd3a07ca2b000b2d7eea940053156bf55d846181e3748a91c342e191f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 192) #2 +depends_on:1 +5:exp:1:hex:"0784a499424dd1c2c13f765e9ed88d752fefa83cec61154f82b3fd645f642ff103db9c8d1c10b5979c56a22d58324669d4ace3994927222fa87fd049558a48adcbd6ad5a2380d2d927be57fffaae037bf8a34384":hex:"":hex:"9f853db57c3da0421914d2f71f9317817580c1de4ca43d50":hex:"27071ad475b8541c1a80234bb2d110637fcf4b4e20e06a7a":hex:"2c879a03bd719595211b526101fe85702161711c67a81184cc42c1f9da5761e853ff4b8d19deb95a2f3323d1cd58a2e066c66e7a30059732eba43a4bf3b22fffa5bea5161fd775160dc53d7cbb4c892bc122e4e0139f8f550219cf6fbccf55d16d8a4d8d7776aa143c00d9e7bd1c847a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 192) #3 +depends_on:1 +5:exp:1:hex:"addb36bc9ad134c7b8fa54881db1b18e040de4f253be28efbd36b12bfcf4721b08c5833eb0a97c668c7adbc7f04a9e0299549126172e25b9e624282c8e63eccf358c0ef1a71f8fd0a8fc49451db7757eae344e48":hex:"":hex:"e32540418ef68c3dcca1e7a0546e5dc7d4c5e92019b8cb0f":hex:"327e31a0619305c93e9b5eef87102d447d21e21e2d8c1cc2":hex:"178bee4059af0282854c833e11e7bba923a1e2f1126fe8cd7e1694602c180802d67b845a88ff786147f22a74e6ffb0f8b86d352cec2714ff8f308b1f9705603faf5b04bea3c75c87c91d5e6cf7583b5c45eb5f5a74d2bac490c8415d2fe07726bc334c88e3fb7284058b006f82e89ae7" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 192) #4 +depends_on:1 +5:exp:1:hex:"412431badcf06f87551ec63c3860baf4b59667cb4753363d0f82fe7c968ea6f8bc5d015418adeae206005725dd9693af6f7060a2d5ba53f66dd49dc148de581737b67acd4bb70ff2f4cf20abc001ae1eb50cb75f":hex:"":hex:"d67f94a953e7e4e4bc0cbd517f963e599d68851cc333644a":hex:"385281961ecf2d8175c0a718347d2132f059964c55f39f57":hex:"357876e78a69cd4bc4e06b2c52ad28434520d54a4a310ee0eb026b87993514ba1442e25eb1ae22a3ce98529625d8db9b0e5b680d7e027523b0ba0184d3f2e4b9cdee027960ac1612295bcdbf570912ed05108541b97e3bb30ae0a122d74cb536e5db34b7d5ee5a042897d5d29fa3c126" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 192) #5 +depends_on:1 +5:exp:1:hex:"ae914c3d74acb6e2d9b8487927db7992b838ede73dc918b60bcc94f0f456f454a6d100c90e119342154bc3ddb059f48db3a8d7b7288eb42d0ceb07532a2a357d20506ead28d9bd4a127d437a657a61f5d30b04cf":hex:"":hex:"2afb537c13fee9c4103cc6abb11225046d94df2e9838f73f":hex:"6a9f670cb49cd9ad98a17cc19d00d4766344108f0c86804b":hex:"2ed0c4140420c6e3798a13f917cd998b2ce6f98bac27f0fdb09e2538f573caff16904edb371f98f50964b7de552e997007fcd267b36abed12cd95d9a08852a4ca862872edd32c707e7a60e11fe0a7db4c0d34f4c70ff16e5c75e6f5d7ffaec3be383b8790ef0ff3a0d9f79850c9749c0" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 192) #6 +depends_on:1 +5:exp:1:hex:"38a93c3ede148c91eb7f0cd327cbe8b27ff0e569bc5262aaf30b86d31be35f83b4ff50b84b5dfd649908d0c55cd5be7ad36d4f5f7f22cce066d3b589adef804bfaf52253a0e4c6bb03e000d649541e523ae52f1d":hex:"":hex:"e12c05f2bf463d24da9abe89301d2acefb7957dc1bab9ef8":hex:"d70065fa713e2d691bf554a00d063222755e7204a3e53968":hex:"3e5ad7e96c8cee899889640d8268cbea296aee96fca7bb60308bcdc08eed36bdc8a5b3126ed8be900577e60ec0f8b3d3014deec41ac650480e08dd3a425843b37fa5d1d621b5053ba4b2fc1804d407849a84e9eb5bfcf94f27c2a535e2756b8202ede1f18e81f65e3f7f51a064b401a4" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 192) #7 +depends_on:1 +5:exp:1:hex:"384d6f43e7d77a381bc6bfbfbfe1a17aa35525bef01be8aaf6c488c46517d9b94380c73d3fb45a4f1b4d70375021c7df78eadb61df5d9efc6e08fe2d81ffa65df33667c23e3cc5c89893988f04be1d3634ced443":hex:"":hex:"a0271fd2552e037568cc857a60a550db050680fc03904fce":hex:"ec095cc9e3bc301071a901d0289b54aefc796bffad6fda8e":hex:"aca2571a9cf6bcd10429e146e6e94d1ae43a00db28bee2b60eb6a1bc1cde3d452dd6e04617aae7a3f813feaddc0f8fd25890004607f45ec995df970e1a3abb17b416bdbf62b6ba5625a80cb100e2b87260a73ffe15d9e6f24abfe9e6f9ba66bdfbfe71380d832418e2a4b460dd7415f4" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 192) #8 +depends_on:1 +5:exp:1:hex:"98c8df867d234553e504fcdf807fb8bba51d23ac65dd8b160943bd45181764cf6df0049cad23e6aca490db57d12dc6c631604c943f153927d6d04af042e1da1b225eb8bdf4ee99dd405e3586acf8e44bb0184d68":hex:"":hex:"3338baea79c06f0d48ec2d47004e61c1c1e5056bf8bbecd3":hex:"79007bfce109a682b746df074e87c845eebd665532867fa2":hex:"ba7040193e38c4495971827fb1ddb747ea80cd0bb1fd6aaabf85ec1959c29eba8f818ef55aadadc8c34b6a7c00f210a899092b9704f2e03abf3e5e8fe6d127cac0436441d0a6f1b02a00e5fe948539c66a8c78e70f35cfeb600e1cc68c06553f47ca053b64a0534a028a73d0890034fe" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 192) #9 +depends_on:1 +5:exp:1:hex:"6150b7280b3105b86b66c2a39a1f0461cfbce17e746791afb241b298741454e174650ab1e7f08500bd7eb096e40d8114e5a60668636b6ff66d2622154b7d239eaefc9ab2aa3351eda2af4fe51de36e22e70235fb":hex:"":hex:"6ece8aa447d2cf51d8497e303c1a202e39e06bd723c847b7":hex:"21d890666d2c8ce4440bb453f4284c3928650f8cf38576d7":hex:"7554b8cc8e79330ae55575f9157cd10d8eeb58af30eeebe9daa021f4b55ce365fbdf3629be7547a89c78bb9df79d35179e5d2924aa032e60d5a00281f19ee2255c17a69345ed86bf36ecfd694be0405c8b6c077b43a8c8bbea603ddc632a1aea6771a6bc117dbdc365e2714bdaa8b377" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 192) #10 +depends_on:1 +5:exp:1:hex:"cb25eef7230ac2da249fe30ea94d3a3332147022bb2207aab4a50822b1564c24a047ebb46d57f45f6680f909629b43129876c75381e3b7c6d06887f68083fc423f06ecba159a90edd394cc0ca9473e9cd0f23c89":hex:"":hex:"2f30b005ea5d5965439bf15220b1c010e6c79306e700e6fe":hex:"9937bf3edb3603cbbe190f3616b021fad652011854e6f6d0":hex:"040a30b82981f71e4607c20c1f2d6e6854824c90b127517f65b6c7da99fd33dee32dc52bd0dbe902509c50492a88e5963b2b6e27d046334b356e5909f85763af2de70e93a89d6a00e2ef81ddd74f4a33d3f8406d05b383fda569a5a574fb5e3c0c86a5096e94174b79b2a4eadebccc2c" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 192) #11 +depends_on:1 +5:exp:1:hex:"1d7dbe4e83913bad3fa918262ab0f45cdb9e4e61667694f361ddecace06bf352b18dfab4c32bff9a013d3b92a2da8ed698168155ddc492f8ad5d65cda8eed212793cd9aec8acde7e00f952bb5d00c53c5c181e89":hex:"":hex:"f9c51ff8f264cae722734502f6799e4fc5bee773d31e3e31":hex:"6a171a0a8801017a1d924f80fc5d9d6592b8b28a342f30de":hex:"425024bd1d1a66d4527a3e8a8307b3206923bc1d693f5b7f9017f0d5527cd6591016758794ac89e2f682cb2d66f8d28f9a2f5ae2974a75f4d0de17dcd02e93bf29c69175fceba262378bafbe3eb7e3dabe974889306d0a2ebd0ad9d934c37b1ad89ac1fc28493e6b1f6f24620e40eaf7" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 192) #12 +depends_on:1 +5:exp:1:hex:"a6887fe41ed5a615eb030b31b86315d32d13dd5ad506566ea23ea3b162b8dd621129736c8dde31708a7fa4a4c606dc212b3440617111e94a5c6722c3a729d84d2e5858c23ba8bb249456a11d63dba9d4260a7213":hex:"":hex:"a52036daa8172111e89c8991ca818bdd711095a1602f2f15":hex:"cba427a2b7bb64002e1da3159d643e002516bed279e0d442":hex:"cf0f5881032606c21a8ea20adba6a72e176e968f10b08ab6d08f997b24fc2a24f2c5d44d1b99deb7db4f388dc8ac268f966a34c857cc5f43efc601674bc548ffeaee1c13415df6d0240835832cb75840b60711cb636f509dd9b87b698615959688e9afeffa50671ada05faa564c87ad5" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 192) #13 +depends_on:1 +5:exp:1:hex:"a563459889ca29b711086adfbf18f284fdd18601ff69916af1ce47510d33f205d4dcd0080f9dfedb2bc1e2e60fa0b9cae094102bc7a705cc223279e0fc3b0020b4facafc2b31b9bca92382f3810d5a4e3ef626a9":hex:"":hex:"5fc83f1f6dc0ad454bbacf2df366c803cc1d2fd46bf78d32":hex:"1a9654667cfd6ad0aad9383be04ec1480a494262b3fee823":hex:"cb45ce96a973728bdade51f91004ac09e155173769063b3fb4712493d8877f088127a3492588e99fef648a101cf1c238fdefd798dd4928b5bb3a851eed693f37d67360a28a2b27c4406e9ddefdffba662529b91a980bbe4eb381cf9734b336e2b64e7482e0328c2e2bf81e39edc30d97" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 0, 192) #14 +depends_on:1 +5:exp:1:hex:"886d098731abf3140d512e0d348a384d25372667fe7e4f0ce713b1d2eca7b2ad939b25af03f78edad75bf0ab95b4110710d0e12e714e03f7df35db59fc4ef2906cf36c6c8897b802200a83e60d16f7fb064abd2a":hex:"":hex:"a4f42d83a492db3fc053d1275c6f264706fa932955c3da62":hex:"4505c0664e59bb4388020470838bb098c4ae1338c268adf2":hex:"4f9c3c60ee32042735cc539b9a23d04c2bc6bcd68db04a58240305f165bccebbb98e0f4796b283a0d78bdaccfcc8daf19f21a72945be07996bbb0b606643c7753f76ee6371292d3e681468b714e16bc32db14ad6d777677137ebd3731186ea72b840b8c4ae79ecb2c61352ea056d2d6a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 0) #0 +depends_on:1 +5:exp:1:hex:"a26af93571ba84b58e14e921a6bada73083ec17f21580a152703e1741392fc9ce6046f77d6eda5000f3225ef28425e30cec138a16b0ebd885fef074c6da2a7b126fcd1f056e3a5fd5627368c63681cc10fbf750b":hex:"0627d10b1e5b4f0fff96d0c7e684deb9fb6a4e48959dbc29":hex:"":hex:"":hex:"98d6bc7ec7cd72da4c750d9173518a9a17120fe9af10cd1a7d872fac505d9276c551b821a868cb8b4d8b10eb3b05845827717d2975814b5080a2f4aa50c5b112bd01b8652f2d1b56a88c6c891db5f3f40d1d1f0648d84e6ce2138c2c879884eb4847856198579eac759a065a5d384c46" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 0) #1 +depends_on:1 +5:exp:1:hex:"5fd08930ba404d13a7275227660869e7eff10e103548e6ea15f0816ea93b649f6aba408ac710c49eaddea0b4d1e219577e6f6ba4f193386228f6fdf9cdcc50d5bdcf6d1f249e9cae0a097bb341e2ba3581a3f2ca":hex:"7a463958302109d5fb9fef1a232b5aea13ba58a60b70911c":hex:"":hex:"":hex:"a1a5c9d90f9340c807efa2068c6a0b872a4ad51a7cf90e14b4797dd894361712fc9507bd61d8ba984ecf1345fa3cbcf3031e2bc4302354cdf3f615c3a1bf43f60a464698e250726c37a7a9a23e1ff7e8d96df03957e3a0b5e6c4c4fdbdcff487e467b12dbc21e07eb8a7c4cd7f779912" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 0) #2 +depends_on:1 +5:exp:1:hex:"625d6a509ec43c55bbec45b4244fa0bce24c74cc270851f2d32e4bb4f1961476af40088b5ea81f7a86efba78abdfb50be09e1a68851899e0e9acd95f77f16e8b0aea5a9bf29bc1a18d32158cf69c794f3f47fe61":hex:"bcfa259c919f6e56c77914a272959cda6d2cafeaff87d91b":hex:"":hex:"":hex:"b5bc1f03099547ce1a359bede1f9f3b76b38e8b9cc781fb3909899144f4d0a4ba93272552bfb0ddcda51165d0ca3eae47d10961a62692bd9edf2a9339c8ad14469f1834eee3c3fc1074cb1493054f84273e4adc73e5eec6cba284c5b7fd8005f10cb67b0fe16ae0b4ff30d50ca245c5d" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 0) #3 +depends_on:1 +5:exp:1:hex:"bc0c83de31217ff6b22c719de8c6653fcbd8aff7925f04624c76f586ed3bab324b64fa8a1ec14efa8d8d0b41eb6735d517f6c647ef8bedf3036a6ca90fa1d2c528722de33f76f7375711b6b4127b86fe096e72cd":hex:"d7ef6b5dd09c08437313871078ac730c2f85a5abae6d6e24":hex:"":hex:"":hex:"6d415afc0151c3cb426eb3b90c209feb726c01e28785678bb0b8d9143d4b7f31ae07e384816072e2df31350b133a8f4e3ee18f04b154d194513d9b072a695e52bf03eeb4c9a1df85dd6ef98d2453dc39390bc3a17f3ce499d9b182c89d0591dc3dbdb7aecb626b07f0ad2737bf8200b2" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 0) #4 +depends_on:1 +5:exp:1:hex:"caca2b8631502fbd8bec33e89066e77b97a57b09d21a92dcc7b65897e50d7a312f287932c529f6a6fd8be6fad5c467f6c15f9bc0f39653a6e4963c0d4c4baa9d6ad39f4ad2a1d6587377ec3898e63e02cc0c454f":hex:"33691da7461d3355659c4ca927b4d3e3bbfd8e775b535538":hex:"":hex:"":hex:"89abe8e656667299705c4c8b208f0fc400897397d15aa3574cf86c0a6415dd30ac5d7d8bc629d8ba52e6e5af63818475874266e98a43ab5d3085d2856950e8d487ea22e01f9ab7fe1862be1fdb9a97cc24eb9ad05beebb202716607e8b164cf63cacb92504e80e68e641af71ad6ee47d" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 0) #5 +depends_on:1 +5:exp:1:hex:"5d97de97d6f81a858ad6ae0262e58169b27c25adfc2bff506854e6bfd37f3a4d8c4b46cd78d0a76b0dc67e0d3f90fb04c2131bc31239defc8eabe9be0fc589a554a4b77fa79c64c03bbf87a32031530d99bbe397":hex:"a0d8be30a0972002f21ce2d7cf3c8e84907c638e0093354d":hex:"":hex:"":hex:"67536d7352a49a1a49110a1dc1b77dd1924be34123e027aea0ba6064ae0aa051d4470ccbf923e0c96c86f2d440f17f45b67c4c7785a6f5006bf0cadc13269540b2c59bb75f642e9668feb601fc60c18b94d65ebea0dfe5fb284e003a58837f9e9e120481ec2ba972c755c6a9134af683" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 0) #6 +depends_on:1 +5:exp:1:hex:"9ca7149b0c5ccb7a0f7ec5399c644dba98c418373460c59978d91db57ff714897ee71caf459c1dc164655140810992fa6cbbb708ba2e61053d5866ba6a1bbdbc639fd21be4383beb4a4d370e86d0e9739ef849ae":hex:"2ade2ffc19de7fc94767193223aa1fb3461cb29d970c8f05":hex:"":hex:"":hex:"b39d6db529fbb3c6a90d6b7057759c26a9fa26024d2b65e3bf459881ff0f88a5b93b87e0779635022cea81db313329b61613742cc82b52fff1a2e6e24ae0eebc0917d5e4573466e4aee3f0ee0053445566eaa080c3e701bc35d40ce5105b4b6572baa7b4c84a16e4aab501e6ef670164" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 0) #7 +depends_on:1 +5:exp:1:hex:"cc751171d828dba023f430b3f5a7134f733f4cc1ec76495e98a6dc2a627d97924716d7e6b043cf15c62ce8da1dda2a930c88d6d4d12ca992a501f773dff5d38e42f150f1c55ee358aba1e73cbebf465baf9fd0a6":hex:"4ba50a75424970526022c7351831c58ee75f1e3aa0c47749":hex:"":hex:"":hex:"8b387e55b9c10d0cc336f5445755c0b6dbe971bf69a04682b21c9303a66e093b7dccf33fc685765c6d2bcfa3020892ed09ce6ea3e3355b3bc16741f34d40b5c96bb085c1574801d14b4f71c97cf64e75dcc330fafa1d1e626822609a9af62c894dbdd56307ccf1ebbb7ec09d500096aa" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 0) #8 +depends_on:1 +5:exp:1:hex:"1f2ccd29bc38e8364a4beb0e89984b88d61dcd31d48e310ae691c0e146f495b9d8cf443ed12f3ad2da7c59c2a2f6b8df4e0202414791e106c1f879879b7a46ac207f45b5fed69c38309adf15dfd0dd75742c0df0":hex:"e0c49aee71c4c060aac1bab1f438f9e2b0c96d710ebfef77":hex:"":hex:"":hex:"593677f65ca4339c0dd8b1ae9278cc49adaef1cf889760b4631a379d82bc25123dfd2e1436d0b6b890d4155e3236fc1e2cef67d8bc0454099051e220d6925b37c47408fdacdfd54cab7be70f8b3b3dfc5a86f181dd559ff7182f225f7de87dd8bd69143be270ce76d2562c6e01ba4c4e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 0) #9 +depends_on:1 +5:exp:1:hex:"f1bee9caecfd0397a6cd76f356ecacf1053981c64d315db4a51a244fe3b22ef997392f65dc13cf30f5b8f5edb7f8f55863a30156722536d02440e5f06e503795d2401775a560685f2ad3c98aaaa22726cd6ec45a":hex:"9d42670ea4113ae02302cdcc660b497f3ffb19b9aca8babf":hex:"":hex:"":hex:"78f31a24cda43acfbc4db7f17c57805a4b53353d668596247358b47e8f8deeaca312a7f9ce78832bc1da2d6b3727fcb847ca4feb1695a2edfd2ab24c486da125be1c1af4f78b749afdb57f97b4a8b892fd87228f116ba10fa739059581256de4fb865d1115c58284cb9850a24e5b7615" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 0) #10 +depends_on:1 +5:exp:1:hex:"17b3146ea3ac1afdca446275f3b7539a517766b90e2da2c4c85db4802943efcd8009a9ffdd054440da16edb641a050fce3f3cab3d5f03d550111daeaa8841a9c814def76eec9c4e910788c710562428a39cd0987":hex:"f3831c1bc859fad452a76ce513575a23e8b790c90de4575c":hex:"":hex:"":hex:"c6c85936cd52b5271a6e70410e0b9d960d76f3236b548cfd4fea26504ca8a78e58ee914c6cf248f30d7ee3547eedd3a4d9869b15e326c911aaecb7f0c221f8eb9208a9b355e4b1cc7926380d25bb776f3e89904943b3fdf306012fc95d06b3b7c44ef55c9eee675150b332e2181f2a32" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 0) #11 +depends_on:1 +5:exp:1:hex:"fabe526177dcd476be9950233ec56f9122a9b083e589c9264add302d4768c06020cf53e7708bc728582360cbf06a18de38e3da2642dd6751aa686dbf11734bd75a422571c9f2420915d7d79d9efea870e72d262d":hex:"ba5858340e6a82b2ecfe1190215bd8da995ee8ef572eed8b":hex:"":hex:"":hex:"10260dfc2f2322f530192e96a2396694dead62f9b206137108666cd199939184503da75598f54a89dff885a9856140b56687347c2c066a1593bfe02b8bd2cd93e939c424b33683a13678ba5f34df3f2f5f50b2a708d1d5a04683db00a607e2f80e5feb20086e3d64294e9732b0776c51" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 0) #12 +depends_on:1 +5:exp:1:hex:"b7c9a1d221fe10552bb0b799e18d12cffd1f76d6a1e6dc79a36584ac7e13c355b9323d0ef2f97fc2d8a26e6c37209a485963788aeab084e923a3794c63713c2ee288ba3a99f2d407adfc1b87ba64fcc5a7f98e4e":hex:"e563f8c8318862c7117af8946823e8570ebc64b3de1b293e":hex:"":hex:"":hex:"100c460c12e5ab12a72bd4351f7b608f5578060b262f21d735fe79d13c942035a76f001adfd39fe93caa22b6274bec282e640469d3f454d108991a1b73d8acb3d392732fc24cafb15fbe248441462bb2c1278883610ba28486ef82ec2ff3d20eb9601866c7dc4eaf44cdd73e5b5ac14f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 0) #13 +depends_on:1 +5:exp:1:hex:"78e5d4818964d748282fa8dd386ea9c920c4fc5ddb9d2204a3f6285082b8065dd3944ce193722e973f8300783e37991e6c4a6286a1a0fe3703dd78ae951c88a0ce47b1a23d91e0926358221713670a78732d5470":hex:"fa058586d35f0d74d2c473e005e7f8ddc33a1f6d5bc79d75":hex:"":hex:"":hex:"6b603b098ca74b7fcf3c8f9b42dde5b3b51e84cab4f67f4d87bc6575ad4fa3f1e0ee27085f88e2a5ecf4f57f9ba92638e52941535806d2cd1b5aeb5b7c81b3d44d41cf5b8073b646a9cc1b0a9f7e183b082e9f2270acd928623e8a46b46257e1b827e8b88b55c88a3a3a067cfcb9b2b0" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 0) #14 +depends_on:1 +5:exp:1:hex:"50241739e3f08c910baea7f9ba481511b6ee5d69bb1a2dd34f3987a231cc25f39a1a966390e391a33dc21281372589e2a667cdbbe4267710d5244fd342c959b7272b39e5cdf67701d47665b61782541e94aa224f":hex:"6a7d2f2dcfcae8a284802c97d77917e87c6cf8417c2b16bd":hex:"":hex:"":hex:"4402afee12048c1c6a44624d2df026798930ec732884899ffd20d17f1c8d7c221cf5edac8679a21ee11b177ecfd61927d4ccbb175ee6b49cc6f371450904c2666aaf2e6cb36cd55cae3af772beb80955cf67b4e8be1fce11250a39693ecb7f8ac05aa23b949ac74bc9a67060cd60cc77" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 192) #0 +depends_on:1 +5:exp:1:hex:"c3005cdc5c5b7b25ed78c9684f3faf6278f9a9c5a9fb202014a29882e50b21e56ec8b7947fe871daec2626f32372123f44a8721ff4339e0a20f978ea27609eb495c2342e9ba719bbd2b44ff503db2322ada1c982":hex:"c4506109937e0f9352fc881b0396b0a103626a15addfe525":hex:"6ee49c76d138eaa3fc10cf411e0b8ad5488d77f74faacf13":hex:"8825122b506dd6f3a58811fe6c9a7e9271a6e68dcdd590e2":hex:"e818887ca1c84717e277baf00913d65ed58a8f90b8728080a03043bb2ab53f55fa605ba0cfab29b4cb694f6aae6594dedcbe6f74e1f7573c2944f3703b89a52789b0170077ea8e66d8299ba5cc139943ab96254065a27abca2098a85162fb01d294d8671b00206b7f784319384e01b3d" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 192) #1 +depends_on:1 +5:exp:1:hex:"9bf2ab19aa7e9ffc3461522f3cf85b3292b54bd3e1099a42dd6f5349d169d59a152b2dce675874b665fcff802260ea84b358f6fcf8011b511834e8447a73c1f675b7598d836dc9fbf40f1dd0f481f47f95f3ef4d":hex:"38d7a2109c6fad9205abc22b9ff705b7f671c4bde5b662d4":hex:"b46e928cb59eac0cbed65645767e96fd824fa95cb96a1cd7":hex:"532c8d3748205cfaa826fba7f240e9926cd3811da8fd1a5a":hex:"bc367839d1510316ac3ba17fb7bf633a6eb4b61dc0b03cf1cca564db8248ced0b47ccb36e730c0237b0812af30361b5dce662636b23f87d6ace82cd3e34d45a1133b35ff9b8bde8fb29fe82298820c0c87f0e30887ddb15c9644bfb12578f0878a710771ad22fe16935c66681378f5f8" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 192) #2 +depends_on:1 +5:exp:1:hex:"a3bfbed559c396b807ffa80409fc4e2c23ba952f64a41c07d3af5e5b78d8ef88171bd5022d3e02efefa644f4fddbe207e59397605a0408b0201f6a882def64d973c0714555d2c7e0a6fddf49558fd1328074ca79":hex:"4c63bef79f71fa82168928619cd09b003aeb2ba2b04150d2":hex:"c85bb368a82d57c70cd5ad6327187c8550f7c10380b2f030":hex:"5d467e9c06ee058ca066dadd6f6ec6b0da59ecbaa4ddd12e":hex:"1ce311c919c67e151b51ce3060384ca95c071a295f01e54349abaa2da8ef497ea1364454133d20f57da28985bfc6d1d2f58f84d144c85dbe3c9fd5e8958ce06f2f5ad5af7e16bf90ddb4a1e2947f78008467fcc38b5a082eb1612d68e36e3c0abfbfb3a321eef3754ac16c41f96bd635" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 192) #3 +depends_on:1 +5:exp:1:hex:"1b2c2419e85386716135b3c142d749f1f5bc23edbf8c0a1c53b72f474484c545761b21aeff05cdd35621d104ee393e791737c48c5a6e6b25b58c5c5be28ecf17c410c9c9c3c3aa2b6385f66759f31b61f9fe0286":hex:"b69011f446e50880a15bb0dd00229f765bf77b2a40040109":hex:"67eb63a168aad8712a0e7e0f162af7ac7893e902f1aa72cd":hex:"23bb752e6232144630e3d3a6daaa1e58a5ca315f21fe1d8b":hex:"cd8e6c6b8a1f7f98f5d796023fdd4f1da2d72eedb96a8e85cac661da24dd0a7810fa04be0491c69db7617712582b43ec4bf112d9e2932288f25b64fb7a2a09ac8747b8f71ce75e3c80b854336a0457b8013ec6dc1268b4c7e8f7d3422a4a5d432f8d9705d6a273a09b9f9273f4928c4f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 192) #4 +depends_on:1 +5:exp:1:hex:"62d059e3ecb695167e93b3cfd77f96e681985ab5d68f15473a89f9cbc4012e1c090a5a9e65f738be938f44fd6cb157fd9b737d9389e4e56b6903d4d015f9d80d96336730fdf57787296d447ea91de7e686c7a81e":hex:"d8f121b2bbdb8530c6315c63e0a52e383c163c033d3b0854":hex:"830e2cab11331b761aed55db61681fffad3a61a1a06adfec":hex:"c7783d7357ff30e88cfdbc90569daf03d3fec8caf89619ff":hex:"e44c9b35d3b847a928748094ba6754d1c5de3cbe3d90d4e2bd0c0f19dc5aed7228c541044b2b14d7e67dcc148ab04abff7c22a8f1fdbec4d68ad24a7c4b0f0e507bd7f2b4845593363da484b481906fb7207844597238b9d40c14237004e275572aac6a6d84d151fa58abc0987e54e18" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 192) #5 +depends_on:1 +5:exp:1:hex:"fcf3887b4505f7a1273ad5b32e064ff51682bca23ed974ca981871a5b7f63e5ceee58131f9a01fa7c37ab14150c9323a03f694e463496c4159eb8e5d3ebc62f41264beb93098a42a3dd406b983e1fb040d108f93":hex:"9b3e97eed077155cf181829233868d27eb773c398575dfb2":hex:"75a75a15c622e69eba698a064b0b41c8bc80ef803df0f29e":hex:"7b6a20a222a81dfa6fd164def816c2b6708bd4c761b2bb8f":hex:"0b3d501f728d2f1d8b0d7dffda0160157b30d0d97932315f77022d1a6fb30d9a0ee4383f2f63377ac6e57b16b0c7480a6f5dd12ed3ec0bc6f104a26c86592daa3f68a499570703306e2c2448e784b67cd6efdb4ae64a2e8ffa5929e74c95b663c9b7fe891633f07d7b50f5f16e9fe567" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 192) #6 +depends_on:1 +5:exp:1:hex:"7a6a0774f2cb5ddce6b5242782fd3d7b5c7c7e31cb5fe95367c06f29a5488fa37feb34d689c646cdb162e258ad636a030ff74f6a7ff876417fb08f5c5decdcc98692538bebf9958c627ad8287633f98c587cdaec":hex:"fb16aea72967c43b8803bcdd3e794911f6d53f2cb7946cee":hex:"67d89947396322ca243e2c591a3adc8fd9f1ef448414fca8":hex:"a0d568f4fce862e5e1b22acca29e60d7bc6cdcf6cc277794":hex:"758b4685b0db1093eebde07ba11085a9dcab64c8d5adacda070fd2b292bec49240f25e158fc96cb1d0ecc9ebcccc360b981d140e3cdba54fc697313014450a9af29d9d55dcbc5bb9a38e4f10c6a3e41874d5c6688f22d0c5714301083cbbd0014880af0f7d088dabeb4e84a64f26d2b9" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 192) #7 +depends_on:1 +5:exp:1:hex:"19bbbbfcb755cd9dc000abfc03343ef64193141c3d3f43120f55674616e3d96b6086adf47c906981923c98ef7dd0fbb2f7af0ecbbd2de848f2b25cba8651b7e3aeaa0c59b605e6d4710a01406565ea30d0c4f68d":hex:"e77cce9d26d283bb5d6e8300ad0f69df723324d23928c6f7":hex:"0586c76051462d0483071213804385d01a07bcb27db05e06":hex:"1c9363d0b3e9f42b6c722b8d62f9c633066587577fe766e3":hex:"6d458079264d5f3940d098aae092690b7d04cd46d6d5dde753063b7194118ab67d3848459156b8f0216d85b5c583a1bfc000e68111be459743175fd114253cc24db72ecc978ff8620301ecbf18f42fc4697d91150649a8254a9850d5c28f9c4e187e409e496e2a659b2e79c06074c5c9" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 192) #8 +depends_on:1 +5:exp:1:hex:"c2b577bfd802b8f599ca14bdd5fe5003ee28ae69ca5c246df4f62d9e21a7793281c48f73ffea15f3c3d444ba48367fde04cdf6d62498b8afb24966a8662461015135cb55034a63571a032d3cd2c1e6cf4a6855ef":hex:"f0de29d4530b4af75b8defe9b3b24dcb7ce0add4aed6f72d":hex:"90ac05703a8e0c6057dd2d8b1a6f16f0059e7c70679919df":hex:"16935f700de9fe529a2bbe811dccad430e27dbc60549c3e5":hex:"56988f9328a91314e4b3ae027bc6f43a01fe471615f3a319afd9bb63f55b13e681ac0ae830d4d3057882fe247ca4decbb26af811282f59ee89ea38642e4ffad9bdfae44bcdbc3a289bf431e0bfc68148c12ced1853e698e74f74e24aa434937390fd41cb4e78f823a262900f2f44c1fa" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 192) #9 +depends_on:1 +5:exp:1:hex:"b5c4acc63ae5c68ca404bded2d36a391e8b2e9ef3b32eb598aa94fd6b5ede6c3d9c33ec77a195abb6f8cbcafb6c492a1d78f04439bdc442168d1eccc783d53a92e16b90ccbdb0284b383cb96af04e81728d1cda0":hex:"b3e6df5e9ae10c63da4269de170550b92dde7c6e33af228e":hex:"c9787b641b5c881dae53a69e2b3514ce2ea81e5879765bd1":hex:"e4abedcfc4cc69da45467bf2bfb03d823abc19a746e3c582":hex:"e14f46dcab0ba39965f170f01a07308090b051127685ada6601112aa236093f7a760530f856617d9e027c8279ef33d9fbc4b624ae26a277b9e6077ac71e2d2f101b84ebed007ddeddb4286aa4729cb3b28798387b757d8e99a7b6d2631601fe7ab4caad7983dede59b94f4c920ef1b29" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 192) #10 +depends_on:1 +5:exp:1:hex:"7302ea40e214308136b8427e601ad61132d195f870f2a861c7b8ce1f686bf325a155d0aae1211401bb844893dba2909060c76cf9cda757d9e2cb24f5602fedf6a7412f49497c82866a8c9b56e2bbaf912f760255":hex:"58efaa77c9bf446ce8d3f3ce73b7d1f014bdeffea2a2fdde":hex:"68f9eab1893186d7e5cf3a8c37bf1c229344abdceecd9de5":hex:"a0d3bf1de632fb19ca5326d936f79aafe59a0e809b13f10c":hex:"f2c6a717ab10a9cc89f6d3a07bf6077fa33c2e5d67475ebcdd1b895fd0067941ed3fd8f251352403c2680df2319a882f39a91f8ccb7df2c06a13037f057962e23b8ea0654ef9bfc19b6ec982e539ea6afcd1145cee582d27b708691354b4c397a51d004c61687c1c9c948576009002ee" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 192) #11 +depends_on:1 +5:exp:1:hex:"48ce334fcdeae603c54fc228461e7173681a8e8387e0c048c2acfdd6a78c955deb7dc25bea4e9924c4a2ae22d9fb6b227452addd0b6eda7769f9ceaaf2ca34568b3c198ebdcf5f6ed11f863097bd56f42d648862":hex:"6bf4c173d264dce03e475fb3bde9fca2474877627bfb0c5d":hex:"2a728f461ce1067dd38896002724b4967c1a9cfececd3437":hex:"2b862cd7a94c1776b26022c27c0e4f2d199ccb782caae6dd":hex:"07f80326ea781bd95efe729867d6c39465213bb698b5e486e6c5f27d3fac4fda3cfb7c831fe6291062d4db2aff59781efb4f4cf428236aad6a55111b969885a6b851d5462278d0863909a07796e5e0e8448fc0d674a4408cd9e91e98e3adcec2064ad37dcc566faa80149519f5ea261c" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 192) #12 +depends_on:1 +5:exp:1:hex:"b23c748a9c9d206ed4ce6b8bacb6f7e17cacf5649ea8d1e1144a96e977a4cb22c0f37139c3eedbcc8b9024c6f21412f1600fcde1488f95744446df7b6e21a858224b9294a75829a014697cc4b363c3ad0e152ca6":hex:"325bdbd8c14b766d4a7ff0e14128585b21af76de7ca30ff1":hex:"2e002a406bb8090eae6c950944a4d6768c89d43cc0d8bd17":hex:"4828622ff56d0867bbad03bac51b8c939a5dfa33a362b129":hex:"58cebdf4676a21ded5eba4dd19452f5dec909c589751879ea4249a4c9fef834d85dcfc95ada82f7fba1476451774036246d7a496d4d427f37647ebc10fc2e1125b0b71da1fa5f1479c5681e9d7acc9b88b527390734d943bff6a76c4b22bb4f6ac331f7710b95f6806fa35a29a2fa35f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 192) #13 +depends_on:1 +5:exp:1:hex:"606f388e8ae35faf979434656144370991e89b7457ca5b55d5bf2b48fe8cb64f549f48a812edbbb4cff895efb21c90eb26c1db239ed72da43504a1e09c56fe144f2d09242f2670dbe2561456d938352125b19131":hex:"5e039f38d6f9a9c4ecc67158f40d3c8de61808fd7476fbf7":hex:"21c7d976da71bcde51a3b4bc1b9a79cc6c4ca51ec992e479":hex:"bac1c5904816c3040eb532622f127ac3e28cd78ba68404a9":hex:"5f951dd774bc1a0818b249ffc51348bf1f36aa4b9d6a3348d36df84b5d3e824adcdf8b87ffecfec13fe36ca354625ae8db8a69722254c3f6e7027b866c529f9bed25360e0cee7ce41f996d50d224a08e965e0e5dd67a77142e2a3de0d559b9dae8919ad0387ba5fdef699e42016d7291" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-224, 192, 192) #14 +depends_on:1 +5:exp:1:hex:"be16ca52551a6a0656c40539e3155eebbc416cbfe212101f8edc2f7118472907ae9b2b9574abe81257533115472610ab401d1ce1f8998884af43fa5776a59ae38c88631a066fa85d24dfc9b2547caae598cd0fa7":hex:"ed000ad2e479513861014e8ff45a481a494af312d2dd5563":hex:"feb295c74975f1e1c738988fc70b9d2603c7da93832154a1":hex:"764705681b7781573af811fa7751dbc27d667af7a1e59dce":hex:"ba4a0583d8d6c5b4216a0875cfad594485858dc7f9ef265d4ed0c0f0fbfcaaf5ae318df2d7fc530301813d9f49826030625f7ea02d0630b3573c486b1fa0ef4269cbfb6fb86675c11fb7c0570cf7ff4fc7affdb00625ac453c23c229a4ea5f540c66f031ab3462f7d12659eec990501f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 0) #0 +depends_on:1 +5:exp:2:hex:"9969e54b4703ff31785b879a7e5c0eae0d3e309559e9fe96b0676d49d591ea4d07d20d46d064757d3023cac2376127abc60f2999100f738c10f74792676a3fc4a262d13721798046e29a295181569f54c11d4524c9071bd3096015fcf7bc24a607f22fa065c937658a2a77a8699089f4":hex:"":hex:"":hex:"":hex:"abc015856094803a938dffd20da94843870ef935b82cfec17706b8f551b8385044235dd44b599f94b39be78dd476e0cf11309c995a7334e0a78b37bc9586235086fa3b637ba91cf8fb65efa22a589c137531aa7b2d4e2607aac27292b01c698e6e01ae679eb87c01a89c7422d4372d6d754ababb4bf896fcb1cd09d692d0283f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 0) #1 +depends_on:1 +5:exp:2:hex:"371d2d3a50d8fef465b02d57f0f102e820c624b0e11703bb81badf8b0ca1841594b0bd16c1fc0e5e1235dfd414081164c54ffd056c9cdf688284f615cfb4814cf28ac6dac05756e07e6bc9f56033666ae35819ae359d53aad14adc9199ea154e45ee2b064955a8f334b9f62cea23d0b0":hex:"":hex:"":hex:"":hex:"b474ddc66e4cac2fdba195cb9c5ee521f4a3ebc24e3722df281774b7c9acfa87bd5b85c1e4e559e2859f2382ecc3a820d76cacdf10ad559691b7059b4e7f3d9a4453ffa241627a3a258b3439ab7f592e95751c826b6f89c92d1f85fc855d231045c405941b9a8b5101f76e6afed9c2032712eb5c60c16a7ecfc26ba0d47adf04" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 0) #2 +depends_on:1 +5:exp:2:hex:"60e5cc3b260a0fdb9e994bb7c7b7fc32ef0117813a33b4f6af13ed81a61edc3c7209beb9336855fe207fcfb77356894b4fba0b7c3a93cf6cdfdafdb4b56cf0938f2cc18ed54a02a3551247ee10e606b0aaa8d30cbe0bdd3781a1b238e19cbd86a2dbdcaa9f94c3d39f9deb8c4a6801e7":hex:"":hex:"":hex:"":hex:"628ad20bad88e5b0ee30107640248a81f7c1ef77f757a40e53927d3b10adc5b734d379d71a28b3fbc0787d6054cfa926a5a74b464b818f8d185430773e7ab055f9647eec01a71dcf680abf7589329e1248ad9df205d10ceccd1bdfe4c9b3f6d7b804c5114c1406db83c921c828df36f5755e989520274669f7f06f5550c97d4f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 0) #3 +depends_on:1 +5:exp:2:hex:"5b9320748b1c4c44624b26504e9e9765a136f965c5a8d787585391782c7432e33e5d97a4c05394d570402b908f54b80cafe9be7eba6c4c4424ff53adca50b522a0ec1b51efea35bf474fc6a0d6aa67d44582c01f287f8a8a9caeb571e26f86100990e5633139b56f4c733cd5ad08c4df":hex:"":hex:"":hex:"":hex:"70883300ef578f796d8f85a30cd8b9e4e2c29f84b7b127836450571408c92b5a1b5bb040f83bced508f26d7066ee0b6e6364eeb1c639a5292050f755fc78e828c08054b14e3a9993c2685791e2eb1dbf258cb762ecde1aa2ed41fc004ac989e0fc26e245ec87a96004c5b28c45d8d9e0829bdb696137f9c944f538c28be34b05" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 0) #4 +depends_on:1 +5:exp:2:hex:"35a17d1251628f82da8b4b35b979783f50e76b2cd77e03ab2f64d29d26b22d82a7b89cc8ba85c70e10d42adc80da014a11cbac5342d46634dcbb33baea277a67afec23b3f50875e4b965b3565de66e36025e0db252b1b31e45683a9676b55f462abbf6887fcd770599b123f109e5c9fd":hex:"":hex:"":hex:"":hex:"86e2bb0f5ddd938978692ef93d19d34865a04484cf82aaacf4546378e2198a2d8050ddf53ab618fb98f9bc59a614e3d60be06a54eccc7e3e54bce7afaf979a6ff4d7fa19a9d7669656fa21fbefa9a70b134c01844c0b85a86b9f98a14255158ae8f5822ee506f88e81f09760810b19f4129d6b47a10d8837d633671558ec3771" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 0) #5 +depends_on:1 +5:exp:2:hex:"3d6c40cceeaca0633c2dc71b7135be9d64d07aa80e6f3a86f43775855f14d3a4f5b702ec622e0c84eb3fd4662ae150ec364d343fd8068b87a8b29e9da7f181b91aa002639980da5489720068816df144ce1c01ea38915b6207374cae626f7199a42d47c9232094d16a04c368f0c11d30":hex:"":hex:"":hex:"":hex:"75eb7a740b6284358f1b2f7c8c1875c027eeb05e0350179f7bfdba23dc823285cbc33cfa6ca22c8e70bba00e903d3f71ca66a1d7081f742574613c2e8854a0d0e59cbac17356b1abb65b533bf563d8169700e196d7d1e25be8e4ed4502298b21dba8ef822c565443c46a8ec08bf3cbe11ac51eb765e53d2b035a8afa29ed1147" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 0) #6 +depends_on:1 +5:exp:2:hex:"6174ea125101e34850e11dcbb0e48dfed7834efd45dc9d196a42e9bbebc9f00853467570badf39ac3366084682491479ec5e80af6d5e73e0cea43d1ce15c277ccf5bee254c2d4e57623a17653d48bd82d801b0cab2df27f804e23e4dc1dae0b7eb6160264c8ca4712d775970a8756a0e":hex:"":hex:"":hex:"":hex:"a9d269c3771e1fd3cf2a5f4470c7e6560c4db008cce0f4c0d1ed939157567cbfcc2353c19e5c1b535c02d5601b45ea2a1d8045b42df6508b7389fdf350c107dae05da4e6e1c078a26aec3d0ee5225a680c15c563e3727d352bc257d3a4defda48e6dfdd5c7001439cc587ff033c5afd3b1fb7c618b2113736a362058adf12968" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 0) #7 +depends_on:1 +5:exp:2:hex:"6a7df1ea8b6d92fb4f1b66b6014c97466a9b9edfc68de647a8a4c36dcb0f4d776bb353bbd5c18ddc5aa274ff29abecc946eeae7eb7e931673c1ba88ec99d3105059dd1f9a7ba8145e0bc86459e525028dce62564a7bbb5479320d75cafe40b4c7a0daaa2bed5a48a0eaeaaa8d6c76d1b":hex:"":hex:"":hex:"":hex:"32e66872ffbc6d93da7f923f82574e3273c81a289257246d3e69b94365115e2b91ddcb077034914f0bf3b5871b62ab773decd00121c87439ad5318adeac31ac024b46e7b49cee5fe0f1dae93a4b93d4245c016ae6a7ba7e9e9857a38b4c220c3a30903eabaa3210d93a08f703626ead078d59b28a42d76081e9b67d7ab68b366" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 0) #8 +depends_on:1 +5:exp:2:hex:"0a9056319735191d4eab3b70f533e59b0a5a70aeeb5c00cdeaa5dd26ba7af09f2e259bd4e04cc9f5ba8b5c8dedf7b155a1ad8112d6b1daead36cdd337266fab65c85824f878219e611d48c4f73ac7c0b96e40762c87d1a78e63e3b266f5fd7b9ce86252b9bf46b0855238602c098204e":hex:"":hex:"":hex:"":hex:"0ea1662f0b95b6c1cbeb82f7b7523eba3f569544b0841f78b1c05809fdffb776eaa6d1c77a8b60ddc680c18eaf9096013d2f4bbd41617e3c482d29aca8d84822c07b55825e46a26abe7c39fe17d2228e399cb88e36e435438ca919b37a0f868fb5243afdc2cccea3b06fd313aba67dc688203878d2be0f4f8864d831622b6f4d" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 0) #9 +depends_on:1 +5:exp:2:hex:"9ee3fca776f4e7336f5336e426d8208848c854c7b0b271d6ec84dd3e86a86fab42c0825cf2be769f7e31924b34a3a760c94d0db714b2a09ccbe26b2acc8071f083332c3ef50802b2aee1eef195b74e9eba52fa49901d67585a766a9465d3db843d3f0a4a3a9d535dd976dd98aedd9df8":hex:"":hex:"":hex:"":hex:"1c1151e976bdb947bdf7bed108c742428aab2e6f5ac7cbcca6fcf2459d2410bf6ad89636b02337a453a21bf1aa72f393deadc925f9a4dc7ff978ba837c58ea30267cfe61dbca4a366b9ab9904ca6223f76d2d33d8d3deb959c6c57baba368e9e67f2d9d4d3758d072df868d2aebebedfca3bfcc018cdb19ba37b593a0ae80c6e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 0) #10 +depends_on:1 +5:exp:2:hex:"1006e3b161fdd1f30442346fc91b3371a29531bc9964f84d3fefd0ea3a340efc06096974bbd600cb644db66b738ffcec05696a981e50c7f6864a8279e83985ddd42a9c74affdfdc8452ac25575def3af3250da95f0182331dcc7d2d50ff71dcde00f92b6874ee902e613779de0789dde":hex:"":hex:"":hex:"":hex:"3bee9fe6d08899fc7eb6e1f0978c68f5dc9dcc76fbfaea7a652d0ad22632396d6e065fef14aafac7d3afb066ea743f0cfba804cc9686405ac966ba7a291f5dbd54dde5d6a330383b2355319e3ef4056b856386cf8378a5e11d9d36b0207e2cd414f9ade2af057c53c8c31e72fe765f0582da5a685eb42a0fd969dbde2642c4f5" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 0) #11 +depends_on:1 +5:exp:2:hex:"83d0546d20fe18184c5ee79bea6f5818881d158dcc7780c0350baad7662d3b0578bfe5590b9923c3500ccf96a797d9fb246f31e6b2454c6a443233ce0264fcc0ffd41f0a3bdccdd9417d1614aee596880571ea5f2e62fd6c6e555613024262a26a169f17380a19f2e5020ad3359e4842":hex:"":hex:"":hex:"":hex:"0e453a3e0a4d58f418018f09c1b7ee5e3df81d309e54b77567b180437c258b870069c0257bb8db332e9d790ed325633260967e898e7933d38832fe7a677c9484992918421c75d7072b9c04162b202872200e28db3c03d157c8adb077c4c8a661c534ff5c1bdcce80ef047eb197b0bf3939daa8be31d6156e9d573cca4b11008d" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 0) #12 +depends_on:1 +5:exp:2:hex:"fb09b02011b54f9fa2a30783141a520e11fe3e2dd55b25799c19be9fa7bf3c20e8fbb8fe9e43014516d25c6930865c2727827cc01406aaa1827bf2d9272ebe18a44ca74d63b3b78fd67e61d5d96db509a77c857ae04e06bdcebb7aa491d1b9a99a0ecb8c7dc3d7bc69775721b75289aa":hex:"":hex:"":hex:"":hex:"ef8783f00156c497796d787c018c9c01cfef9357cff2ba8f047109a0d17f719ac46952a7147e7fe8d60fdebe2c744e50522e09aa0d18de258459840ae320d48cb71ba11432169ddcdd15ce081f3ee9719cae4ba601bda1cbbaf9ebe82559b69107111c96e468d23e0268e53c9430cebe7cb02b547d6913b76e4c1643b2a2045a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 0) #13 +depends_on:1 +5:exp:2:hex:"07de9e5e57368e7833177066c804575d984bbf9ca4bf03ea3118dce063027b2a1da1e930b356722ea0c0f02e09db6e92f407fd606fbddbcb3e574f0ef548c12b97460e2079a004c1b5f4612ced9f5034d8ed92d5e98eb176db2eba898915f31af7cd0763e7da1e64ba132a08deb82864":hex:"":hex:"":hex:"":hex:"e780aa6744f592da3fef690e78fe8c4fd40c364cf5f1a8be34f23f7324ab387b09aa3b5c126bbb5fb25fdd26d4e536f2eaca8f0ea8c93ac863c1c5d80314480fd9e2382ee1d9b17828b7f3716ee669b9f369655091f0ee23163996c7c815c3f5e705c9e48c25fec05a485eb39f3814065283dd1d0c37cdb7713acf24e3484afa" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 0) #14 +depends_on:1 +5:exp:2:hex:"5957069eb143c1526826c15358e0e949096108fc6e09537cf3d6426e155b4178bff8a8b7c57c3cbf8f9c78b52d76509c1ec089e083b29c0adbd7d703b3e0beeb2118a052548fb1e30455b080c111cbda6b4930e8fb7daf431060778445bad7d9c3f78dbf811e6c9c58493844d90e73c7":hex:"":hex:"":hex:"":hex:"2f5b7e172c5e291f68d9f59f0d14ec516e7e80c2eee36d1aa0734e3f819a976c74a565ad03334fbf1c60dacb1a6d150ce1316b5c256ca85c80fcee6ce0c7004a0a0ca8be5dce19a3b68f92f3f6b7f8e9c4a3177b93529b32b78a2d0ca18b27fe80b42546d1211587acee2bd5a63f3ae66b5e5d66a52154b52bea2b71cb05b9ec" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 256) #0 +depends_on:1 +5:exp:2:hex:"2cad88b2b6a06e703de46185ccb2ddcf5e0ee030995ebdf95cc4fbc38441f17f32310770e04172c0cf91f6590cce44a4448bfbc5ce9e3b9da3e9642daecd994dfe373e75253e8eb585141224eca7ad7bafb57f69799c0b892b3015990e133698d543aa87829ace868e4a5e9525d62357":hex:"":hex:"ef6da5e6530e0d621749ab192e06327e995c3ac0c3963ab8c8cd2df2839ab5df":hex:"44278b31ed853f0a510bd14650ac4b4971d8b426799a43511d016be68dedbb8d":hex:"4c7dfbe509dc5a3ac26998723c6a44cad20b197fc86117c778d1568ab828923862885e97198f77a1cb45113f5d78726a0f120aec94afc45f57c8dcc1cb092b343480012858ef5bc559f57023442209326ec4a54d91ca3a77dfdf9e75f117cef50e6fd2dc9af6ddce8e6515b4a97357a97b6cd274f68a042fa41bbd7b7261b034" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 256) #1 +depends_on:1 +5:exp:2:hex:"b91fe9efdd9b7d20b6ece02fdb7624ce41c83a4a127f3e2fae0599eab506710d0c4cb40526c6bdf57f2a3df2b5497bdaef67509ca77ddfb72d8101a462816a695bb33745a7348e2646d926a219d4944397755353bab4a6b291607179d16b4a249a3466cc33ab0798517872b279fd2cff":hex:"":hex:"17c156cbcc50d6037d4576a37576c14a661b2edfb02e7d566d993bc658da03f6":hex:"7c7b4a4b325e6f6734f5214cf996f9bf1c8c81d39b606a44c603a2fb132019b7":hex:"9cdc638a192322660cc5b9d7fb2ab031e38a36a85aa814da1ea9ccfeb82644839ff6ffaac898b830353b3d36d249d440620a65107655efc0959ca7da3fcfb77bc6e12852fc0ce2370d83a7514b31473ce13cae7001c8a3d3c2ac779cd168779b58273ba50fc27a8b046562d5e8d6fe2aafd3d3febd18fbcdcd66b5016966a03c" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 256) #2 +depends_on:1 +5:exp:2:hex:"a46367f0ca034a86604003faed2ba524b6c0bba8418fb158ba13a8f730d91ec49b3a7e35c619f0e1abda6d140b08af85e3cfe402b62a2e893fe0244e88b9a489a1035d287947139af7873e5f7d0485e87238bb11d4f631090c34365222eb95baf7b865be5f6410ea0aa0484e3de55483":hex:"":hex:"aa020a1aa92f8a426c5d0d44191c6b46f68c1abbd5dcbcff0df2c8e024a3288c":hex:"38965ad5f163f663b3d90d4f5b67ed2f4db22c90e5878bddcd4f230dc77f4b0a":hex:"6c7edf375281b751383211a3e09e46c61a9c425fe326041063f0f03e1cfc01e8a830f9c4bf77377c4a9946c61a8b7cc664b22973c556437c9f5557b1a1222c45789eb700e1184d5d6e52f597ba5b1deae3dd3cb2d8325ed5b3929946e3fcf9e4f199115eafba9abc87558fcecc63723cd8cdc8dfba48a3c64e8a70995b0c7ece" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 256) #3 +depends_on:1 +5:exp:2:hex:"08b9db82f179055872383f58203aab4b9b701c6d7a1cd428bc1860cc70e4111dd5cff962725b20d8121fb4f484a846c8fcae938683cc1602b692ad88b2edb5ec1c8dd408f4c10ee77a460bbc40c8e365d5b0bab8b6c8fb3d6ae8f65dc91750600592d1f0f9ff661d39436329263b9213":hex:"":hex:"88ebaa296598dd71d22ad5cdbd16603e1982d3b00391e0e83862d765148173da":hex:"4fe9752a5a88ec1eba5e7d85b193910f1717d166ed16e12676cf9dd417d96f2b":hex:"b4b02be55fad8dae22716f95038cce34f654c3dceac59a39ee85c55c6a10864e19dfa5710231138efdfcfa73652e99fa3febde8b06ad06af23ded42d78bd7e05ffed6b403df2320de419a08065dd254e5c676c16aec3b82774f014811cb6f32f96bb240bca91fb9f05b57c776d4474d309cb08a730c269627b63858821657e8b" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 256) #4 +depends_on:1 +5:exp:2:hex:"76b0ba5992daab1aa40ebe377ca2e0f6407eb1729961151d216a9989b49733c2f7892eeee64338d8ff151db27b20e66684015bb1b433a01fd7570e2434bf39d924d19096199e367dcda87af7ac8b9f2a064e8a7bc291a904fc5a40cffb306020d718de11d3cdc5442724f4538d835f76":hex:"":hex:"f8b63da99a35cd63334c7f0f101a80b101990f7646d31eb58bd4cac251f434c2":hex:"46a417f4938d88406d3ac65dffffff7e3c410b0999e9c6dc7787ac46a0b1be77":hex:"d557b0064c6d8feadb23f9752cdaf5e443a295ba97e5fe3db8bdc3a502b12394951e69497638a758e7315323c4d9443ec8f144f9dff421b0feab8d541fdc3b5993dae6db4a732d573d27f4383f825783b8d0b93951719b95ddef703f36c1d95034b4c0b12615aed9314067c35a55a091fdbc3a459a22a75b6d1616e79d551b2a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 256) #5 +depends_on:1 +5:exp:2:hex:"e82960489c01468263e8fe59ac341af1cedc5595ef1677c00190f87f10679295b0d64271e860e5e1bc2b7c24c2127c9457ab6db2495d422d24f3560a909513626cc0e0e8d74171ca51d3d1d31777fcd1b771f5b186516d45a270a7c5c96f098c5051cd79ffb04c7981cda36a68eef347":hex:"":hex:"9d544530ee12e9cb06172d79ae291932e17b240f9cd92698b6a2ec061fc132cf":hex:"dd1ad16a1f9decc0cb875ce35c7ad1a3105818679a12b22149b5a7dd0a1b7d87":hex:"9a08d941e9a1bfd9c3e059dd06caf008c636ca08bb2e136d0bdf162c433218045224bfd8d75b8241025f93c4a8203c6ea1fce63c37bb20444c5d4a68b13ee663b262c685630d2a6c40ec224027d75bfd3dc73e1d538400789f2221ffe0ff1bff8f514c0229e684422d77b2b0298c0ba8a2ab02610e880232bf516f8ab507c461" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 256) #6 +depends_on:1 +5:exp:2:hex:"a1982c8ea6aa75e5c0486bb26ab8c9dcf3d13034372207bcf103adca982bd902b1388afd3745a00be19abbdeb12225db35ab41471d93c02aaa2414354626246b3ea3d932dd522e5ff0fa81c9bb7bb1f372d851b57043789abc1837d33d52779b638aa2bd1693caa52ec7b0824adb8470":hex:"":hex:"2d0113c4f225e47b5910cbda7d27d98fe2bcc23d7bc293da1028e20848804353":hex:"f6d92fe0603e2548fc13a560f4b1009a2cf63ff91c74b17cb4f256611173ef17":hex:"d26b469920ec26d6891d5243d3c131f129832695a130386511f02a66e92d538bd165d9bcb70ba5e8df479576b4342a27f3ce113584e0262f8eec814f0c97d48988c39ba548e4da78601103abf9c6a47ff3705fcfb7d1a150535d4af2fa219509e94bd8e74f3a90fd0ffa63159b4b62eb533193f9df3c86864f9b5f05249175a1" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 256) #7 +depends_on:1 +5:exp:2:hex:"feecfb3ecb1b1322b34d90f25fffa2ff0c2af010a942a0467c04e9338832c3c0e5c5876ddf0e3dbdc2d63416fd77daf6170d67fd6b7ff621b1e844914711817ece93e5edf428a6e6325193d42bd676598ef4672cf1e4de4b54df68d0fa8d268868813162fa712d294491d338b65f27f8":hex:"":hex:"d1e3da59674d0ce33cc3e6e56292ef47fc1b3f495871f5a74a8c3f61edeb593e":hex:"74d491697d72689a19c58982621e68a336ba9f7143c199dacc3f37508ef5f3a7":hex:"78de8963019611fde15ee0c8c7b8a35c16a5ea1e86fdb435c422184cf0f7bbce3d6dd7aae11b6397ca213c0aca63188d3982c2451401845d02fa0822ad2f9190022f6c099d137c5a44d9d74a77c75bba2350f1269b6bf90507736d8576b53dfa14ccf7c685ea0acc8484d6a5d310b15bf3941666178414aae3d76d6d5f4aea9a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 256) #8 +depends_on:1 +5:exp:2:hex:"1d6bdef15811731f6e30d66c79104224c5ed9d455bf9fa2d3442e8d61395d53ca6e3d5b3862fd0d0b2ecf3577e2ddd124f7e33bf11a7ecebcd2b26a117c3805bc93b98ee0e70b8ed51b929cf76f2fa72b433757da47b1ec92c11fd91921b171ff51a41a996866e8c287ea130f06cd95f":hex:"":hex:"f25347f88fb41d65602b99a370be7c8ce1dd6a29a0a7401b4a3279b3e563cf4b":hex:"4e5c80bd7ffc931fb57632935faff2f28c4f75336fd28f14f7fc27a12c7cb41b":hex:"54a280962af1a839b470b42456a4381eb8cc26f16303bb97b6f709f91a914ed72a8b85d16ad4d26a900c8fec4148cc42f9416dd19f31fd1afd527f5fb266b6aff100f890b57c8a3f9228462d4dd92dbd5af2f9daf05e5ee2843e56f0e180eba8a2cabab36f739a7fd3c04228ec007ef43ebbc25841b7373f2c06fdfbc66f8322" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 256) #9 +depends_on:1 +5:exp:2:hex:"294c6459958425d309d4df6617410f34e96efbc1e609178f4105071171d271cbb698b79c7f83851ab0a4e29a756b058584cd5d446a25f77749e4154628c3d6963c369585a7768baeca0fe21cc40b00a87144cbdaeba812bb1dd8a18e4d7e50e810885ac520e44c398d1b3c41fcaf6c36":hex:"":hex:"0e433b8a3920ebe0053e388d0f2588123c6ce644280dba77632bea8de1b6fd9d":hex:"411a39921ad892db7d38f51c51148296cbf510a59fcf4fd2785c2acf310fae6f":hex:"04c64a3c4ef8cd3aa322596cfe08e34b435bb55943c6ba7abf72b549d4a057e3bfeb53fa4e2adbee63c88684bbd5b84c4c1358c9c0ff0ffeb1c8fc972c4e79641c9a4ea0901d9c85fb9ac5eeb5d5dbdd324649c0db542e0946d96cec8a990147be80f46685cf8278b8cf89c9255baa566740c4fd12e6bc163be6e52ab7799c2a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 256) #10 +depends_on:1 +5:exp:2:hex:"1940c31637da2a1a4a3ad66826e074a0d5ce69dde50b75a55b5e09daf23c097bb31a4e9d363f3c716cd9e899cd98bbdaf67e6f909077c7051b067d9f2a6ecace36e5053b2e6329ffd364e589403a0be1af2b27d258c90e1cb2d8261bcc7bd5f910f15851a87442cafe87aa42031befd5":hex:"":hex:"0e21b2eae0d946c1da14153d9a3945894f43ae5331ab95a07a727b05bffe9f35":hex:"69646ac749185da00638654c813d45e0dcc842202845cbb0a8158b2609733146":hex:"f5dc9a88bcb19f74101fb46304bfd66fe0e245357b656e751a9ed535bed3a5b47f4f84c01068763a3fead22c29d7def5d18e32453f806424177082d1d65dbe3ee5d9765fd5364a1cf55dc64ee9f3f313697c2625327373298807a60bb4536c3040e76c9995cfc6eef225a122c98849980d40ea0f86a122756d4390096b4d8fac" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 256) #11 +depends_on:1 +5:exp:2:hex:"83a44c38f699a883a91ecbbd9db952a62b65cbf75e72a1a2497810a73ea743c4d15ffcba06cd7a3338b3294afb50462b1eb4df21dbe7107a8b4c6a41b41977f38c33b1ada829517d0902a3bc0836bf899c257234f7f63219acdcdcdfa510d284e7380348296eaab4074ccfa9037e6b68":hex:"":hex:"3f6f8f77f3051c945afad9969af764fcf4ba5b567c0a096bec36f712f0405539":hex:"210ab7859b1354f53e143e8b06afe84b12fc1b16aa4e3e818dc56292656eb3f3":hex:"adc004394a5bf98be1ac40123ab1e430bf93046df87d20b04c235d16543c9a2b80f99f841a946e91a4c6f10149f7a703967de651e3af208d600ebc2c6e2c1fbc895760de537a4da2870e128fb10d8fa1f06870d758b9804c49c2ab81f90118042f78a89809b92c2abce87b230587739acbffd082aaba422c88e7ce199691dd87" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 256) #12 +depends_on:1 +5:exp:2:hex:"7a45d07a2bec078c06031b79e94ba6b34ea1522504f62df3c7543d6a902a352faea5251586a8bdc562aebfd9f7175a025406525dab022350d8452cf3e187e30cb54320fe9f13a351e003727278fdd12c2ac1bf56556317ad5bffb3c2f89069c7c742be442f64972304a3a97ad40481cb":hex:"":hex:"16384f8c9eb749fb49fed4a667339f2284634a5f791369739d0401a84d435373":hex:"1b81f0d21a3da462ec2f81d0bfda1fc0143673b80bc7ecdbe524ceba9ae96ddf":hex:"a34623e01a14b87c400f681a6fb4ae66b97afbfe040758b99dc807fbac73d22a5cadad262f23ea5d27f726993c8220921125cc78d17a990145bf6845c7719bcbdd195348c40da96fcd60a54cee25af89c3b1312d88635223ea8c27564e918289fd0120b437c42d99a35f198de3e9c092c493a971c8ace8c48ab625a5a92d6fd0" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 256) #13 +depends_on:1 +5:exp:2:hex:"646d1c1e7c363c4cbae7e6a4f606c95812a7e0f2fb86e33f178f5b502c6457d3b57644b3bc1ab6ceb09589870c7d54ca19fe763b481308a64667913cfe25103fe738fc0a800920f0afec70ef86cb8a0ea2d9dfd3895cbf921c87e64905f81ef61dc231b6cd7a0135003726451cab95f2":hex:"":hex:"78566b2ffd3252772e3bba71f3445497a2150afd48bc130251baeb4332da8a27":hex:"888b33c6abdcd475586e00eef185a69726eb9b024be447e9298b953fd8021906":hex:"e659d60d17da14043cb919709bbb5b3cc5a203517353c8badc0634ef2f2ea2dab6fb2b327e296ed6341dc4bf431c0c14ec041de50395d25a4a4cd64a6420153a50af886f48a2973523a4ec5baff43526556959a37f3b2452d5753f4d2a3c050b2e8f9f6ac2577959f346ab37404d029ca51a789a5521ee660845f913d2452033" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 0, 256) #14 +depends_on:1 +5:exp:2:hex:"bde2de2b8d3c4b5c4af2998d70da9a21340b98c7630d687d685a71eafccec446e0194d245d2811a54ef522dcfd96abca2ecea6d7892dddaa4dcacf7e5ef3fb345c33b23a3de687ab578aac8e6757547a1b3c127a633e58903e8367a805840020d2ce3f6f0372991d7c7f234c3b31118b":hex:"":hex:"d903a2271f1ce24f20222120f8fee3b8709ce4fc7ba85b77d6ff049e81d7a37f":hex:"03bffe38ef883397cfe53edf6c79e68493b7a637d1ceeed9d569ac6195b8e4db":hex:"cc317f81c3a6cab42933d1733cfc4504dc0b232dc00502d29b8e6fe78ae11d1d1ae4a1c5c6a7f99543a844ec5413b6dc3c22e3bf0cbf12e7b57a48018c75f6ab25fe78b786d2d035de7adaa3a3b7cf1ca564f342fff4f9e6b3c9d2af384cb70f5abcd28c99a5d10f176dd2f702575bfb81a984db2507434b4a3c8c286e3dfc68" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 0) #0 +depends_on:1 +5:exp:2:hex:"f7b90c797a4a376cdd9f5c435f5985e77f36ec1df1145a12072cbb2a0da378fcd95202986d45896e9f4a65f2f353fa35130ab64f41a5d49d6a241e0260b4bb8a46a16c6ac9e234c84b5b26cdb518d459f7670e817ac061ac60439be60982492000dc5da8bc6636bdac8b1cab03198dfd":hex:"61535c5c045e784267fd0d85f2861778fa53c8e8586af67cf5c9f21a28ebb656":hex:"":hex:"":hex:"8df4e349f9ea43cc509ecb2b1124358cda2de1f5cc9315edca63610a413478d68b8bb49c2814c82ce571f6e0a6780fa21c4b570610ee0c04d3edb92124f580f962d741330200c19885ca716502223247b728d66fbbeb7c6cc25cfe9866b1450b346227c7663074c8b15d189f1c6edba172a53c733d67c1c69bd7aca7e62013cd" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 0) #1 +depends_on:1 +5:exp:2:hex:"135496fc1b7d28f318c9a789b6b3c872ac00d459362505afa5db96cb3c584687a5aabf203bfe230ed1c7410f3fc9b367e2bdb7480806f3e1933cac79a72b11dae32ee191a50219572028adf260d7cd458bd469fcff599595c651de71685ffcf94aabec5acbbed3661ffa74d3aca67460":hex:"64b6fc60bc6176236d3f4a0fe1b4d5209e70dd03536dbfcecd5680bcb815c8aa":hex:"":hex:"":hex:"1f9eafe4d246b747414c659901e93bbb830c0ab0c13ae2b3314eeb9373ee0b26c263a5754599d45c9fa1d445876b206140ea78a532df9e6617afb1889e2e23ddc1da139788a5b65e90144eef13ab5cd92c979e7cd7f8ceea81f5cd71154944ce83b605fb7d30b5572c314ffcfe80b6c0130c5b9b2e8f3dfcc2a30c111b805ff3" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 0) #2 +depends_on:1 +5:exp:2:hex:"d78eab5329fe38a26ce2e54efcf8f0c15cd7462a5878537a1e3615d098b186974f48003172c7204fe6dd77c89fa92fbad4e81412c8d167bde3857b9e045bcb5c666d64aa990a7d92e46ca533b93de544238b79b6a9551ea7dc52bfa1557fd973bf6e594ad4bc0e63b651d5955da37f6a":hex:"e934bec18cf8e9b9293029d9ed60ecde1d46621439c322203f7c22c6b2d77544":hex:"":hex:"":hex:"285df697361c284753c94865081c3c25ffcbc77709fc51f37a09624bba67149156a087efa92ae709eff1bd50bed464f4f31c4b66c1cdb71a506779b50645c165a099718d599fc9a166f345abaf8b0b2f9e700c253a454cea49262a334d79a01c208caad5073644b257b2b1577dd973862c6fc7fcc3320e24e1e31063fe6e94ba" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 0) #3 +depends_on:1 +5:exp:2:hex:"fad6a0fcddeefb263c27432ecc6470e44f26aeff2840e8db682ca14ab45c31cc89402a698ffd36ca8ffce986568f728afc08bc0077c95ce4cf08bccf50cdafc19004abc3c5ced1cc3e7ce2cfc938c1600a93fd50fef1245e7b9cae2834e7104335f8aeac080d4a4fd3e0c0ef0d67b690":hex:"352270c867c34b3fb297cb2e5d3a807b087c720026576aa44fad577ec82015a9":hex:"":hex:"":hex:"3622977f8aa0a0ca5f8e1235d03b76f92b2f26eb172b88323558e8f3c756c539ce1061de127247ca7553402c3d5c9439b4c9afbb4c419867baee06eafd856af9847a69247ddf6640a09a360c93577bfc353cdec7312e549bc7873f77796e062ad058ec7f3e52dd1ddafb4bb1186b05b5360200e6ea784be27b8f205de80ba145" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 0) #4 +depends_on:1 +5:exp:2:hex:"be90a07ae616574d36f8366d39d6bf1408626466d40982d97380e44331f9e1885a27cab08c6a8595894de22a909dc2479cf15973a0f0b71c0ba911951f9b444050825a976c391e621c58fd4b59a7a22a7dd66d8f59a60c0010fa8aaacce99bc2aa1f365653dc0cd57b489edc2349177b":hex:"99b88ac1958d5d62aa39eca8b8f8e598a55c08b49e895737d74b8792ca343a36":hex:"":hex:"":hex:"ee76c5a6b6b4eaf9ce8dc4ac0ee91cad143f0369a2bfdf40b70fcf14e3eb28855e3c59a01ddee684bf9ce4152be5c70d290b8b780784eadb44854b03cd0a32d0aa8b8f0db1bd47502d2aa61a54e3de7fd7bdb5c74c715ae2aadfe328b4d1128bb19ce7d8166c4c1719c98b6bfeb1ce313054d8f1b6a4c5af842cf3cbea17c710" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 0) #5 +depends_on:1 +5:exp:2:hex:"31c7b8f0aafa70b4b670f056e24bf141f0bd6683453d17e9b09add3d231cee1cafe818dfd7d7343f8eb1b4100d80c4d9c8e7e4d5afcd3ab82964f121847d4466471df38b849c59630900171580948f53c41425045dc4db04935aa5264891af031b08cd48670b2b1720692cc6bed3e7b1":hex:"769f2b3e30408856f46fc3a3fcfe05295d876415555906ecf853d59badd48eef":hex:"":hex:"":hex:"9b3dc767e1bd9dd67003ec99c334b94dd97c48cccbdbfb2eed4dd5bde96b1e0ea4c24cb0edadcc5386f7bec54ac5ef149374f6225aa7e78466c34b1ea0b286499e4e2a294381e6e065abeab67553c4a2cd0fbda19c59415fee5cc1249692768aebc80ec35c8331f68f1b7245602b3ebff1eaca2fed5898213fbec09acdb60cd1" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 0) #6 +depends_on:1 +5:exp:2:hex:"3848bad2b0631411f9168bf818a2c3cac10b6d83a82d58011367688c8d30d3fa77fe460dd459c7da7d69a3ba5576b2bc8dc15a0de18f52f79b9120b03a5bd9bb4b45547b94b301cf3ce2442ae5083c5c08b455e06fc3f80be972e2868ea019376fdf04721478289440491744df5cc1f0":hex:"e5a3ebc7d533c214f4cd66d37f1dd4ff718891daef55959915938a177dd97088":hex:"":hex:"":hex:"959bf36092622923e96ef5c038ca318048f9447003626a9f5f0c5082f65daf5c5ebdc7328e090fd68ee5d3c161506b86590e2229a479de7bbc3920852647db2a35272c305e9a309c04da1b8e58ee185183681cca89f1b9534c0e15c188f69cbed87326a83caffcabb800e2672691b7642700659ebccff375f284eae1729edcc9" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 0) #7 +depends_on:1 +5:exp:2:hex:"dcd74d5dda3adffcbb54be0e7c48682174b1b460622b52ad4f32bdb2b164032bc32776da1ad3913626d9e61f5b9f9877c8bdbc62d984753560f2c292ec0ece8cf0e369b64e14ecb910997b7fd81a8eec62e9ef78b1d0de6642d8404cc4cb7bd544fc5a3b3588a16c4e342dc5003d6608":hex:"e7aa07cf4a3f90167b486c1c4ffdd5ae45aa59200e4a94caded0b85aaae8fef2":hex:"":hex:"":hex:"f931b0dae43703f7ec20bb6c5667191380e7e263efbf30bf4bd4cf6e3cd5976095eb48ddcfe9f72c299dc05ab2d8846e2259600fe3723744f4ee19c75835c07bfb207e70ceaafa355bb6c6b0a4236d0e0830759cc6673af2b4dee9a3efe496e7020556b4f8ed0c08cbd4cac61831bab2f5a81a8121b240a9c6d374172e5a87e1" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 0) #8 +depends_on:1 +5:exp:2:hex:"b72d5604401b15477b659a373caae53a8fe983e2199187546756e039e72efb7f2ad472ee90447f616b7ad5bb1dc692fd1b9e1000ee6c8ba65f39a837f27a4e5cde8cbdea58ecf1145d53c219369fa86402ac05e3fe3d52fd54343179f237ae2055277d76d9276bbf83f97901232ba6c4":hex:"c9038b0d468153e8529089c3db418fbbe42afae5613a8eea7c8e3c2a307c4159":hex:"":hex:"":hex:"9c2a9dc2504e2d943d85e1c068f7e578350dfed661cb5d82cd26ce22d083f6e158a39161f303370ee844b4f75723ffb45131223bee8efc32726bbdbb9ba2a0d8177e90e4e1c8f1d3a22e9a9eaef8b7ca4cbaf142aa1da1886d2ef9c1dc3692bb15784cfc906e12b484609403515550cc44e3b0edd42ae9c3f267ae9dd737ef28" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 0) #9 +depends_on:1 +5:exp:2:hex:"c5f5e519283f7d3216f2ed7765ae2c0dd1e22596d7762c1f0707ac99ad3f6ba6b920e6d0ec15852186b77c3e9318904b252aa0e2dafc2901a5177449032a7727e523d33d6f4b5f350545e5bf21a2ab6cea23f43c73c2cc0982541c298e05e4b2dcc6fc5d1d507232d735b01ed2536317":hex:"9835ac84c8f8cc00464ce75891074e20f050b162f73c9e91435aad5929b473c0":hex:"":hex:"":hex:"85a747731638e09ec0254e7aa38e08439457e6504de94d00405d417326f3ad47f156b5e211204a83634369beffc128f3614e89e2e288d2de11f7b90bcc2b8d29f149e13a3cbc8d711d24765f480bd6596c8ef605cd72fa64ed8ab1f9a18b2d0b81c0de08a167d537b3d1c51c2a0c9ea9124c6e41613b383f13f1d20e1eaf2288" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 0) #10 +depends_on:1 +5:exp:2:hex:"fb912fcad27bbb2538164f75a79a3d7651c42aba547dad64037b492a87e301809e154f0b8b099a2f584643e4e40ab34fa1466679fd0a8a1f82772ae0c8e9de2a461d820cf37b2e9bd77a609dc367b449ebaecfd0aff59cabaf224d5610069c888762f92a16553d82c917553a9e723177":hex:"e3c8eab35fbf90cad2a69cc74a68ac0bd0fc51585231fb9c3eecb49a064043bc":hex:"":hex:"":hex:"09b4a47519d4acfda506d64c0b5536fb9e72cb1b6b408da82b4b80ff794f45beb2070b05de67759b8317f40e798bf37d392cb59cbbfecc3056259c9426415df526bf3cb62f4636542689537629c0e91a9bec2a600ede3dcae82079ceaa3522524fc002e82c280724c4179e00dfdd374effa05a71fc856ceb21542be0bdb62bf7" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 0) #11 +depends_on:1 +5:exp:2:hex:"ead7fa32dafaec063474693e98230bfdd61ed5ee88c7a93718fdf17db771673f2c3d12d63a08b9acc2ef21531412dcdac37c5828d4ab26c1e365c043aad21c52ef9c144305e917dee8a15dd6cd751c2c45a2d6e146935458fd2ceba68b49b74bceca4329ac5d30c7a67f614d3b93a6fd":hex:"fd3da5bb01ea75d7e32c023eec230f3bacbc163768c1c24216028e82660e1bf2":hex:"":hex:"":hex:"8fc78a425f9e846ec2c757e98f0e1f67085bde0184f9ba9e8697811f6c50928de7ec9767a4fbec8bb099f534cabae4bcde69f2632fe4d1c582cb918e3370cabb2153a1d168fce23fafde95660e6987d2e8fcefbdfeb21398a5074ee76f7315cd7c517d3a4df8af26f1857b0d3e5704b7a3e5c15adc5f3c6745c063d45a2bf1ef" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 0) #12 +depends_on:1 +5:exp:2:hex:"5d79c6ccee050b3c2ed52edcc16fc26ea7b6f3fd2b9199fd65c7dc2345d6566e9a0c6e01710e4c71b2820f7aa9203da23515eab85a5812c66756634804e3f5817d32f51dab3ae00443c694c59b72d526f840a166e566b7f633c7d246192ef82419e3cd733a02684d6a4ca091178ccc76":hex:"ee4c3cfa5c79b1ff1dec4b9f9ff4ea45c916e46889130cffd7f137e6579af52d":hex:"":hex:"":hex:"4f53f72462d7e9247e7ad113827d3ea741c35690fa0be027b86660e937c119e7237bbc674e826f42dd6dfa5f54d90542ed2bad21683af4b1f8741ecb75b464345111cc3d383c8b7d088718a353c2d4af93ff59057745a808203d08eba2452a1a9ade75cadd0f49fcd27ac3c024c04c0936c0237fc29dcd061b62fbb73adaa8ea" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 0) #13 +depends_on:1 +5:exp:2:hex:"35f9c3b0e5947a74d90609e6ab660b4b46177a12886cc77a19aa9eaee86500a9eaec5de5672c5ee56771d778f5aa963713ffd39fae8e05ec90843505d5832ec8d999f271812d41db4f223a5d8467944f08083a81c29d9a559a960f8349fb0174a8dbcfa171be39a8c36bcb7743c5c5b9":hex:"b4b5fafff369997074a82e064298859ad2775eb5c5979f81d2118da96e840930":hex:"":hex:"":hex:"87afd3147e61c49d2029b88482eacdace56f27ccda2927799a7dd01ff63d6873804e7b5635645ff3f65b00e1bd65254933e7e57b56177db81548fbac37305d3dcb70a5f76a222999d6ba9c73670ae931b49ccc97b4f25203ee95cd68fa79e2824e2ead8bd4755a5bb4658e02788b9ced166ea9ec5373954ad8da88791e8f1047" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 0) #14 +depends_on:1 +5:exp:2:hex:"cd08363e60e17bbc12d57954ef92ea38af1095ffec417a7f305b7c10d44f1e6500649786d5141793f7ee33a913b08f60457cdf6316357035abf57c2e2b19bae6973d01e9e93dac249198188be2f6849e5a9636d6b6bf7d1c01c16c03669ab7b5aea828017989c870cac6857bf327b748":hex:"b5611807d3070200fc6257cc2b13a84f842ad45ce116fc91eda79ff14f3f25f3":hex:"":hex:"":hex:"281e9ceb5a46578dfa2917d9883f1819bbbdc9901d44f3ab48ccfcb807eb596e20fc05060d6a77d92a6f630bd2a012b41232dce411ea046794ab0096b86491d3ca2a59d4405e2831b1f9f69e55542aec89417ee7ecd7a050eb28fd4d7d2739aef7aa6f30fa17c5b2bc1c69ebb10163426b8c6033ec7733cc9ffcae2f23986e63" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 256) #0 +depends_on:1 +5:exp:2:hex:"4294671d493dc085b5184607d7de2ff2b6aceb734a1b026f6cfee7c5a90f03dad071544e599235d5eb38b64b551d2a6edb9b4790b62336fbb9a684b82947065393eeef8f57bd2477141ad17e776dac344a9abe80f6f522f29878bedf8245b27940a76471006fb4a4110beb4decb6c341":hex:"63bc769ae1d95a98bde870e4db7776297041d37c8a5c688d4e024b78d83f4d78":hex:"28848becd3f47696f124f4b14853a456156f69be583a7d4682cff8d44b39e1d3":hex:"8bfce0b7132661c3cd78175d83926f643e36f7608eec2c5dac3ddcbacc8c2182":hex:"e580dc969194b2b18a97478aef9d1a72390aff14562747bf080d741527a6655ce7fc135325b457483a9f9c70f91165a811cf4524b50d51199a0df3bd60d12abac27d0bf6618e6b114e05420352e23f3603dfe8a225dc19b3d1fff1dc245dc6b1df24c741744bec3f9437dbbf222df84881a457a589e7815ef132f686b760f012" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 256) #1 +depends_on:1 +5:exp:2:hex:"c7ccbc677e21661e272b63dd3a78dcdf666d3f24aecf3701a90d898aa7dc8158aeb210157e18446d13eadf3785fe81fb7ba1915b3c04c41b1d192f1a1881603c6c6291b7e9f5cb96bb816accb5ae55b6992cc7787e3b8812efbed3d27d2aa586da8d58734a0ab22ebb4c7ee39ab681c1":hex:"bc55ab3cf652b0113d7b90b824c9264e5a1e770d3d584adad181e9f8eb308f6f":hex:"18e817ffef39c7415c730303f63de85fc8abe4ab0fade8d686885528c169dd76":hex:"ac07fcbe870ed3ea1f7eb8e79dece8e7bcf3182577354aaa00992add0a005082":hex:"956f95fc3bb7fe3ed04e1a146c347f7b1d0d635e489c69e64607d287f386523d98275ed754e775504ffb4dfdac2f4b77cf9e8ecc16a224cd53de3ec5555dd5263f89dfca8b4e1eb68878635ca263984e6f2559b15f2b23b04ba5185dc2157440594cb41ecf9a36fd43e203b8599130892ac85a43237c7372da3fad2bba006bd1" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 256) #2 +depends_on:1 +5:exp:2:hex:"20f69bc4a308d1fa40146bfb8a3171e81a66ebf4c83fd46b2c8a3b34df499a6c92f4bc9699bf6d19d5c3f45245bb0fb08310eb7a9ce51883b0c36271b5ff0a1c00219a04a6b571362c7a18cabc48f2fab0cdf3434c9f72cf5ef6a61feeedc94c72e28fb5a99345dbc7939a3b8e277c5e":hex:"882bf0edbb66ebb288ce741997ffcd3380049f5007b30e740ece190a01612dea":hex:"ca1da31810bfa6c02b5863f87d39668d796105430c445db157c41a0152a0d200":hex:"c344b0bfe801da37e2320d36b9e6452235e6f6f4cf3190d414e859f4ee90e5de":hex:"8ecac7a65cbfb7a849604505d403acaec41c6ffda3009f6080bda79e26d1de3bdfd88fc9bb9ca1dd1cd8d49e3d0cfb0f0a2e70ae1834e8f7d7f79382591e8bea0a0386ad40c98d097122dde0dc2f4fd3258d40dcdd804fdcb72d62ef9041518c34fd8a37684bcabe2f59594382767c2633bf255121ac735852fecf14440cb623" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 256) #3 +depends_on:1 +5:exp:2:hex:"0a13da2edd9ed097631860dc29cb2d7eff3519910808e7eb0c6ff1485cdf758d9793ca69779117a63a47e386433f18b882ea8c8d3179dcc1b263fb263bdbf2ab818775a881964a5690a6e9af592db594a39a960e343bd4edb7747d75866e1ca7125797d2bf6a644aed6e3c8443f94274":hex:"48445b1b6807b261d10569ab4b5d8ab5d97ebd3d9e8194088b10463abf11a2df":hex:"6b742d07c45a031795a7771eace89fab782eff6a74555fc2eabba00d1d7b7c15":hex:"cd0493aa84c941c1b7fce37d2e38c199fb8c86ea0c5b6a536118ae423ca7ab50":hex:"fa005c9119a898f2fea35b805a2bd8be88c48cbdaa8582337f1f407ce3e49dee8011bb1e4ae33317ca6d5cb645687a62aed86d5803583a012d96b82e7bbfbebf59fdfc1db0a92586a843f6e57056f49726e89bf98b641ea60a3c91815edbaf415b2c4eb7bb8c56ca5d84a3587c64a945a6e3d625b6763084c2a0917de6bd6746" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 256) #4 +depends_on:1 +5:exp:2:hex:"fffcaaa7ae7787e12e96521a3e29a7c40ae08a7cdea9974cfcb894352955e65a27c8b01490c9fa7593734ec27ae242a20d0371c3c664bdec7f368bf53a930cfb0933de5d50865cd757b63fa350341375f132dd2bf9bf8c6d9d2ca5354e284bbac677c269298e1a5bef536091081446bb":hex:"5b1c1a19b28b09d08bf9cde87b4a6881d38a7961bd7ba6888de06d0c78fbef13":hex:"5ebc76ae5779fe563362c6f99bba35b4b50eacaf7192c68b82a376fb7f2b61de":hex:"95831949170105e9c022a7711803f9f7d617a8a137145b4c2f6ddda7ebcf3c5a":hex:"633cb6696b97f2d4119fe242486e8affdf1b3e25a94e434592caf0270563b210df6a9f9405c2c33cbbb750c0218f718116b67232db874621832ba78b040523b2ebf715082fd23fe7e32599402af95156ebeda98eff2a8f2a4e295b9afb7fadce956cabfc1183f20e4e059d91604fa5d77065c4a006b3fb2c15750206ec936e97" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 256) #5 +depends_on:1 +5:exp:2:hex:"ae8a6a25b266051cd41fd5ecc682b844aa3a09327216eb6ac63390250620113124145033b99896c21f8dcf60271ba681156406ff2691886972f53c2e4b449dc94fb09a2960a3423d2f4ac66f973b4a89f80c00af6fbe4b0bbd430b12a714d40e172e99f909916a27221020fc72259cb1":hex:"0acbae3c085d2e5e760b0631c6ad97d935e96b0a90ed4a9867f626951596ded2":hex:"2d74d07e82a033c0bf65643a6478856c92f33ee55a2682c17e7c42857e8e6fa7":hex:"a1b397cd826af3fb1b949453e96878e59f0697352929b15cd678142453479e55":hex:"c309567edb3d40fd8d828551117964e20041b031e8eb41a8c6e95e25e0f43372585854202c5d5796ca4fd38b7b789b44410ba3e3ab7016cb6793625be27c6c8d39499c402e4d52bf2c0bce21a5f4f16d80d5449d5222aea19b64de25f8f5eb81bea7c491a329ca079a99c9ea00cbf3354b5fef435e8d4cbcbfea7486d379a2a2" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 256) #6 +depends_on:1 +5:exp:2:hex:"e603b02ccd1b3e2cf27a2a5cbbb6e8fd205ed3531ab08ce912f915328ea1c73ba7a075a9dfd9805101ba2f0f6e42ebff7202687e99e1cc914036146e187c16b83999df442f0ff87b9d82fc7831714d820c247f1a2c3eca9d32ef0039c4a2ebb9962d844e0032a58c604d630f12884742":hex:"27e863c2f9f91e9540f0201dba0fc63c3c623ac89d63368093dec2f17b6868bc":hex:"93e967f73929f2be339448735c74b571a8b80c10bda2ea7fbea824b188a7db93":hex:"1ff3a43966a8f64c42dee8889ce2626bb370afef4c0222b926abe1be719427fc":hex:"7ca6867ef568c8c323d216db96b642576de1f5e82d08b84e6a2752000c5175cf49d6096dff7b714a45a72a69e467ee378f4eabb142eddca926a3d01120960cd7aaef1e377f447b0bcf8ee733d961d0c36be901c7f406a1dc81cb2ae2e9f6886f5ba1e481e7c1396d2c89aa456b2fb34f02a91d0eda8784c26ad5a6892ba5ffa3" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 256) #7 +depends_on:1 +5:exp:2:hex:"222dcb4b31c7bc37d8813be78d95e9d8c0f021363862c6bee5b01e6c9dbdba8c2ae81c52b90d4cfeb80697fcf05caa08bf81702a92a6bc90b531b363db5a5fe4f50412621ba390c1cd211a9683c47ec7ed6d15513bd49d10449f0c450183f5a7b16466a37df5fc79a4ddd3ec6bd0c56f":hex:"bcc19eb476ac96567da10da8fb714c2f9fbdff28b7c74a5cbac80ca480e61de6":hex:"46fe8bd4c4789c373707050d0e700e50d692ba10ff2fcba20045c9efff7373f5":hex:"68c956a95f6a2c9cdd06e461805d5270b0df3c9fcdebbeffb30dad1a852fb35a":hex:"8a54fa9818602032762a45c9f67f668860ed605e371a6382082509249330fc24d13c4acf27782a7d2be42721bbb9c80c6338acb57a715ed17c008928166f9a090331db4fe62a11ab47c966bc3c24a8be942e350a2dee7c7e9f620386d89a1e0bd5298d00f94f9a931e50834a2a85c0175308bc74a34ac37ab21305c511866263" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 256) #8 +depends_on:1 +5:exp:2:hex:"787c1fe1498bacca291f020f80d6b556e4f0d4fa5adcf21531c447f28e14266e4f2e9de3e12557756348d8b0c73a1301f43ce41038cbb7dac60d8269495b62ca7452a9c4edcb54e7d477f0c6c6b7af61b3a3784c775a5884cc536f60132e66386dbb911577aef75fc0a68508432e255a":hex:"91f18dd75859c2938edb0d81f9d6095a2bc7565b67403a8777cd059f2631c958":hex:"92d2d8091cc4fe9f5cdf2ded2e358fa05a7d8e4525333b4c00697ab18dd1f995":hex:"2263cbb6e29bb9bdbd803c7224aa039077ba43d1643d4754745f89d8bb6f888d":hex:"620851d2a4c8b6558e18aa5e2d454cec83856d25e619e69928b578ea4d4e41c662a4cd0ae64ee756b184742154d9e7a6283d78bb8b6ce53e2fd2ce93cc12ad78749cab530a7f996c83117df6d217170927d75a0c983194816d2e21f92840791292710178b3f7d9fe1003041d2d9e7c59943b14409abd7956bd5c31190a54ba0b" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 256) #9 +depends_on:1 +5:exp:2:hex:"1537f9380d97e98f6e02f4b10182b835f224cca2278f37a8cb1411a1c6cb89eabcf37a8b159cdee3a55329b3816f8c656c7f63835f860b4a5e3c450a2afb5b892b4da708d39614921a82d36cf23518618c9bb0f5332492c1740fb385e969d77d5d7e0aa0a4066cb6bbba4e4c7fa8ae73":hex:"6d89190aebd160b155d5dff8cc4393f095988a1551bb154fae621739a4378430":hex:"04a511f1d8e1994879e2372163b5a45289966df680350bbaf9baea52333e652b":hex:"dfd8c8e467628de6c121c403816a65bdca01dcedd05778b925283f92d3cb5251":hex:"61edfb457546493a43fe1391b8f86da01c1242b3297f3c4ee02e04e37161725f4182b144609335f0183b477744ce3370ff64ae861c728e7526148eac3fb07403a27c3f82fba5ce505233a4e38b8d40c3f44cfe3cc65c6a89127f803b11a3f24397a20409b594e193e443190155da50ff1134c8b1adc5006c7ad201887e6c1ad3" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 256) #10 +depends_on:1 +5:exp:2:hex:"842daa3d64b3c25210cb0ecbb251333c2ee4e090a992138a5d6f9c455a8a5f0d28be9fb51ad223ed196d5c245eeea940f822952bbcf1e2ba7d3dbf526ae44ad7e60e9d99a833b3f372f77adc440850f3fdeecf48941dbcecf6f710d99ae54939f9bf35c3ef2b7b6136d7778b95846af5":hex:"bb9376b79ce2cede150036c0626ddaf8bbd960ec04ade2694be6aea6ce8946e3":hex:"41431b7537968a2ffedd6d7942ee21565f34a5155de6e096646fc7d41302ed96":hex:"946b190e855aa2d4fa7544e9858ec70ca9ac19ad510bd7d625f14d16a80896bb":hex:"b0d45631a104c246a1af31c8bcf7f7bea92cde3c259fc029072c51e662a33c040cfb1d262c705320b7020bd1365288c1ba9b3bde9d0a9df8b9e7275e8637ce9a1896877e34323abe8ca3dd0262d3d75ee3a5af505235e354aab491dcfce11287b7c73dfc4c97c47f0373cb93baaf3def2186a53095fe8b050c94b1cef109c07c" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 256) #11 +depends_on:1 +5:exp:2:hex:"aaba29c12aaa011619c07efca75a186714d97eac18d75fdc8b5b36a9ef247bef0f152b758cdbd69256bd8697fce53d2b59ae1210a350319834d6721e9da6b2cc1c0e559a26804d47953e0bd5df66ea2a0c449fc0a8dcc16b9b0a82f5e6f85a218cdddaef40c254c1030a9bfa33214ae8":hex:"02470d6898bcd119cab49242c95fa97b56a495f6d1c5b26d1e877b70b954e3b3":hex:"e4e4293148c31ca6bbd73706e2dd2f36a22d3af3f862ddae40ad35d51dd6781e":hex:"34c6505eebf018676a039f201507fa38338594cd015fb4d962d1577befc63ec6":hex:"e1556a8bca38d5c2087b5c61156ab91566a5da784647e220bf4ea0374e187d4a4bc373ec891472daa31aa0dccdb56a8b42fb2805e74251976ffe5e02b446af8ac6a9f0d6f36d857fe6d3772d9fae7ab08b360e8de2529dec80dd31a5a5468034aa53b10b6a73068fd9e046b70e2f03fded8bd85f7df4322d4fa5338c9cde0471" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 256) #12 +depends_on:1 +5:exp:2:hex:"742fbf9f39f9d8c4279143f88a6d30307492681ccd58e8422277259a0bf87aca24c5d6dc4f650f39c3403fe1eac1ecb079e7b9f363eb44559177701f93da93aa30dc5f4b933209073c825ab2b39b52ec23caf049f760aa385f58983d9af300ec5f831f2449d2508bb5824abb622e00dd":hex:"c2c42e63d43a765c2a49d2b35c8ba98a7a67765a0c453d2352d9f224aeb06176":hex:"794083185e79cf918faa846bd12287e8ff1e620770e0e08b33e8e1da8d23cfda":hex:"ed7b902eb55b7bdb2b8bf70711c1f7a4bc00c4dade92c9d2459db060551336af":hex:"c83af90a8c7879e98b255e9c6b1852bd759ccf8f9c5be4ea5e9a356df4c43efca41303d5a322a7e42ed12b8b0b715e1d23257aaa366bb261e39f19834c38a7a883bf2f01c47a782edb7905cc61742b8166974f5990330a08168e25d4aab6740b96493ff87a424ac6ed447ad655afcfde1d2ec6ab2ba811351385ea0f8b66e318" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 256) #13 +depends_on:1 +5:exp:2:hex:"1437958fbc93c701cdd09fe81a90af55f022195388264ef03758fc08bfd0dd80f63c7bc06945eedd58893df2b5f5f62b222ee423dbcc5491d1a57155891406c79e8ef51fe7575db8074c4e40f50024daf177548eb130a8c248c2b7df99b6626ee062cd5e82048019b32cd6c7319eecdd":hex:"c443f891534c30d8d2b1e2072cb5b824e6d3ddfdd1e6c7757e54372d4420b5ed":hex:"39f7abd306f127baaf8cb832b67c2564287efa433df8ecabc40b9744637e6bfa":hex:"eda6950002c866c61d2e2dfcd9d69e8c5154b45f762efd688e26044adc3957c2":hex:"8fb758b498feb1c0e961a8f86b821bddde387dac221a8191f71b6a64caa2bcc4a475460823996f8261b8e22125dfeac5c9dbda25525dab249cbe469c5e224478964793bf822446721bf5bc85e5da6ef34ddcb7c94f109193c475904099b06e2a7f53ba6dd94480dd5bc9fff90150286c4d3ccea975925cc8ed4ef9830389b9bc" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-256, 256, 256) #14 +depends_on:1 +5:exp:2:hex:"ef9292f4a7a67ac4d4eba48936391bb45f8810c2ab02ba424cc8e4add53d1c514611e3233cd8cc8f6d69494dc336cbe1cbc67c17520af442933a235c6aa6b8f98128c66fcdd77843ae32e06b7a31689c9a6a3c540a19081bcbe850278d50adfac3638ec8cf85148a0547d28d0a7025db":hex:"f4a8721a2a873f8fe94e4b3e137e866c79212f9c14f89be156c47a5fbb9aaecb":hex:"b38a6628647a02c0de5b7acb939d0d1896c9c730106c8667d810bd4866ebaee4":hex:"366370899b2a0d6f049e7d820061599a675cba5d3bc82ad747fa731bead8efb3":hex:"1947d468ae4fa4da7f45cfaf32d62a4369796e532f1b03b1495587e6bb95d8330f5b7c962a9b0a2b715d9def79194741870e5c47d15a7308843e10616b891fc9e5cab7db901e0f1efbe1217dd627c71b54c98cec0fe1b25a84caa56f0bde247a9d9183587742a38825234b6b6cc808afde36ef5e17bcdb2c72c7645949289369" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 0) #0 +depends_on:2:3 +5:exp:3:hex:"51ec4987ddacbcf6348e4a891fa571c6e3aec02879eb0181a121a4846344a687cdff9798761875320256e5a59bc94663faab8864cc0bb1e64343c0b978fcc0d6e84d0d17c1c1f4093fac3b4c01837c6b37d189d7608f0c335eb38fe1f43573e0c525093f60ef618bab297b8a4d9d8c16":hex:"":hex:"":hex:"":hex:"ade04730059471b1829bec8dfbb0ec708be7b4e77d688ce7cfba9ddde059a52f969407291440aa79492f827fe1a2f6568989fd36b4fd84e6699152536bff15388af319fb306f07de4309eb92ba3da5f7007948335993698d398bac42029912bec6ba39226c2bf238733b5081aa0a2ca392a719385184be619d9ca56771d8e3716a46cfb339f93ff48abe406ef788db2ada45ab5fcb7f689bd801a5ccad855b52cd4bf1d6e338f2c3eac94ce9fdd0dd06632d01ded3753e87957e8569a67eccad" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 0) #1 +depends_on:2:3 +5:exp:3:hex:"f8dfa70524d46f3545db3c687fe85a8ea35e32eda470b4e14b8b12f4e9c6bbf6c08efa9ae1df90ae6f14b895c342ae07b5e8d563199a141c34e709c6e743260b573f88186f40f800c4c0ec9f9fbeba49f103bfa2d62d7ed8fc9ff88cb1ddc5d4ca4d074e0053c069393d70a5b3f1df3e":hex:"":hex:"":hex:"":hex:"05f4e609b085d28958f5702eb7b99f2e0c7a80f095907abd5b7329628aa6dce2e2f8bdb7a2992261ea414e6434dc98162d02c51936542218a31c6072ed55c9ed83c79698de7ffd3835d5e4d0f3a0c2a70bef2b6c602d1e0cc814c71b2fb1a001fb83a0e2befdec7e4749629693629ea2397b299cdf491415dda446817dd7d28da431f95162de83d917f9e9325774e2f7ef02fe8067cf4bac47e2f61ba235b532af3aa95a6517e9f1286e065ccf9b3eefa6cab4c940c83ee9a11da55ee21c8d06" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 0) #2 +depends_on:2:3 +5:exp:3:hex:"7ab7da47ff7a95ebf2367de0a25c7885d80931447d2f5cc73ae7f66844910e481e05f53ca993b0266b7cde89960d681a3d3c568d9a6e35347cf52d2e0ff7ad1142983fd7d2c848674315ed3e009adb7154fde1f2d90019cac210dbfc06279d48fc7c2e900652b5cb638c1260acd896ea":hex:"":hex:"":hex:"":hex:"f00714df243103f54b4c0c516a7a631431dbefdecc30c09e8e834f09882100c1d0276273568cc6352c3028c156371389078236afe57d00edaa226262f1a7f6e0011ba48d4b8f089cd257b6b7cfe80ca2bbeee99635c277254546d4adbf046935791be21c48a7882ef6cb81f7bccdfcf9bc430d21cef1d788d4f4df6bd6ef5bcbf48e35f116d482d880f597bcbcfbbf68bc77f591bd7346d7a1085fbc1c2707c17bb288ce6bfb0a78a54731421762f18142975b8b3b79dec0d852dca80f1638b3" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 0) #3 +depends_on:2:3 +5:exp:3:hex:"40e83cb1fbbefb44426350916b0995fb6a1c5394f2fd625774459548cfab27f2f92e2e889d3deeb33dfd6c40f610b71b70387af8d70768c52b36bb2a59f3ad9a16be98c726c2d65af457b2f7d81c75fae82523c977cbdf6138b1cbe5a9b3ad402ba197a3009dba459d3f534ea143e5dc":hex:"":hex:"":hex:"":hex:"52cfd4a4741b6575578a1b7aab91a366341cfd483799ca08b851bb0dc2f2bf640e90c1406fd09fbf9166bd55d46aaaef38e0449b7187d019e68a3b98a7dd9cdac63ae9c966db4d901d37cc147835d017915902621216bc1835d70dc2101ae50e0541f796bd6bca2e53260ba3353e6aa4eee56f80aa329173e347d83d050ddeb465d8e1aa5450e6e7eb515a92fbcdfd8530f04fae3d1a41b13151a4827f0634d6e80424c1e934ce0e2077f5f31fd177e9a42acfcaa67d4043fd31a8ec72a39e6b" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 0) #4 +depends_on:2:3 +5:exp:3:hex:"39927d4fd0c3eba2044002e65b60d3994c3aad0c705bce2e9e41aca30a7c2f03e7b4968d8e729e868f5fd57b49a4b862b0bd169a4e2d77bd59745e778ca6fd762901ae3c0fcc48a0d6ee22bc8520ec450630055b3b66bdd2dde9f5215d241fa266d24342b50d42e2db5436a478c7ebaf":hex:"":hex:"":hex:"":hex:"96194dd1b6ac5efb3d4787bd1fb4c9cc32c29b67ee34369a7aad9a56f64f53526e9207c1d4c541c6e0df4960c54e10168284891841fe554adaa5012f325b3aea79fa4db8c36e67a0f914d9ab361d8ba0b3d6ca4904103f14a30a90dd6fd7c3f679c272dee7f01110f7229f4f5b6ed152a0149dc5a7185bf637d10899bca417cba8f919a2800d8a72d5575f0c174f98f77a1afad850334204e66156eff4572a6703aab50b850a8df498d1d96b1e2bc1ac34aa4399f3b13e97b4989539ca78e97a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 0) #5 +depends_on:2:3 +5:exp:3:hex:"ad10dbbedf980a0c33576f7606e14785b2a903788b9b7cb4c29cf74a8bbec877999ca28c36c835b60680bab9005d8e4f341b97213fdb6a52e783d19850906cb643bcf48c291cd186ebcbf0a287e459d1795e29ffb0c7c84b0f6dfbe219b4f85d9fb893c0cf9134263a9e6a36c76d02a9":hex:"":hex:"":hex:"":hex:"5db269714c4ab774c2eb14eb95e9b60c6ccaa6e90f9f879e295cc007069dd231894cd8fe0c09bf748e26940160cd0cad75dd2e305ed1f2527ba857c42c3d0662d25cbbcfe342910498ced309cda1894a1186ab935fb614646d299ca56f86defdd0a0f52baee1b9b9be05df85a05c225475a7ce1cc58ebc488a4f57fd1f983881754dcfe3bd78cac529e9945c89383e331f0177e721644b3a8d82deef548d161e085cff59645a345cf7af3f3582bed5b81c7de7a6a216403bb88804f7d16ceec9" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 0) #6 +depends_on:2:3 +5:exp:3:hex:"e9506dd05bac4750f5d5b43e0663ecba6444455ab6f662802897a493ca11ff05f76045b621004f4a88fc6b1ba859ae795e4846f17c3b1c127a8ef16d32381e27eeca77ec062a8a8f811f5dd7f90737147f5fca2b7cc89009b0350292b88d1de5de94e1e82bd5f7bf2e06882a925977ce":hex:"":hex:"":hex:"":hex:"abc3d68bb9b0d29655ee2057a60e59fb84afbaf9c75ac5d146a9856384022e4873a6abb963d8795ded5ce33f8df9275f8ae4c3da0037973487348645415ed51458529bd7c4996128c943ddfa21484521fc645723802318ffd5191e957ec453a8e922d48b1e83681c1463a03c34175a5d610f8f3709b3044f45084f901704547e301f9807a7d92036e08a3eef791f67659816fcb28922b9b52e2a4a2e81cb848f9ae579cba346b0507e91f26b70d199acb6da5d3544b8caea762f6f30178636d8" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 0) #7 +depends_on:2:3 +5:exp:3:hex:"f1f00ebb7cb4bbb3b0a083a290d4d3cc4db53aa9eb3f2feb1d428cf6d8104bdc56b2a30e75782693d7565c5d1ad6edd6cc22967eeb5f159989c2ed7fdb62103c055456f5e1a3163bfa034c502ccbd9aa75385d4777d03a82606a890c89a207494d082becc22efad8fe69c367fa9e3350":hex:"":hex:"":hex:"":hex:"6b75aa14c129d011191b9016b089af15b806a494e8e763a7fe902479155704e1a92eab48ce29fd0f1e9d5a2014757c3cda6e021defdb91c796cbad709658edad6c8f7ab6aebe978d507459198e0719eec49b1926a7c4e33e34e8e366966e0e4e7f3ce0aed6e51d7804d803aab57257ff1250ae8b76bfc48a505d4600bccdd992d564b39c3519db0c7dd26f5dbabdf3c098735688aad1af8525e8a6a343835bed094708b78faa300c08600e638e6f24f4b2b78df0d747ffbb9521cc6786b9c89d" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 0) #8 +depends_on:2:3 +5:exp:3:hex:"1f3bade86f64dc0770dafd6a4900f61baf003c6dccec496856b7b08cb99db8f371f1c9606602ad397e0c757f56ec6176c04e832302fd6fbac3519af6d2cb9da5a85ee70efc19c7350145e904a7fa9d3199e1f6213999ee3bbdbcd1200b4dd4e7a8f112f3a37865e494bf8549349e9e78":hex:"":hex:"":hex:"":hex:"1a420c51052534d5d77347ed5751e44817824ed75467791c9717875dadcbceff2ffe024952958d4718b2b4028af83ecf363d57349a36476c0203fcdf4952794aa66b3692e7b0810ce060601817ad0794574b1ce12d6a7b6ec1d0b1e0acb2a6c453be81bf2d17e1fca7dc1c9ac5fe4a64069285a8cb9408051ba5ae4dc0c8897b4a216109b22ec56aace995a453f28dd7d2c38c7d44739b9f09ca0e52d62f204e7f4a09c3e231c8cdaf54f941e8d5565b25155be21cb316417a4c005f7e834d0e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 0) #9 +depends_on:2:3 +5:exp:3:hex:"1b288c94a8aa7499850d7bf82177024f20e8ccd502b7b0f529c47185aad4eb82ca1efc0104f93cc35885e9894671b9d74fa8237f5d740fec09e90b88bc75124e564f1f198081d51c950dbef6a6ebb2b5e1aec008d8a5a4c692f6467c740f5026807bafc0710dc8e9197aee4372b429cf":hex:"":hex:"":hex:"":hex:"3daf72d94056e6c7138787004f40a4a0c81a244c8aa14c332675e977330b63315916d8fe6ba8f0aea5a22def342d4136d1d6c787b3a6c6c05a44ee1cf9b2d8911974974cbf7a14ed5b83fceb8dd8d3ed59194d3fb6cce579a97244091731a4c1ca1d6e4c9d2623a41de665ee3c8236e0da8710208cee948f248329781f40f6f4b4010508c219755b6df752b9523ed0c9644b17250bbc88b4338c688e97e952a924da894fc986f7e807fca4477be94dec993cd6910709d8032fd3a5b97612cd65" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 0) #10 +depends_on:2:3 +5:exp:3:hex:"1e1837b46486b6e65713327240bfac6c618e817787c277b995c92dbe03b9b01de8e100b303ce5bf5048dccfce4d240878ffd5ddcb6754292291d1a79ee1e62b6da6b23d7a83d0fe9e84757dcfa51d05709d54142b42dc876506876b136b6df34b485c0c129581972bcbc674b893ad61b":hex:"":hex:"":hex:"":hex:"23c258b93d4e9943783e88b244a52cde6747d8d7ff28b77e2ddfaa2edcbb29eaf41dc75cdc2c5b581b3a59fe20e705223bdd90e786f6c6498330ec9bd7ca7303e53c0b21abef1497210f8222850ca7f01e0af4fefd36d82e711fb17f581b951e949876a5ef0a212fb73af4d32f6bf9fe8c9e60849fd2311f3b5cb8a4abe856b3dd629fbac41e6dfb502d1894088fc52832cefff807555457c03ba7b7daaf02830d9ff8c9e8ed09ddbb68d6530af0cc5ae9383acd34c89ec189f5a97abbf3ed5d" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 0) #11 +depends_on:2:3 +5:exp:3:hex:"67b2a6e09bf31ecee8fe9c719491baf3c6efc0e27519155f99c94667d727420265254ee6d34c6b9c03414452d68929812f1d23aca44adfaf6b02f519dfc3f034bc32c1b763a129a97c7258e5e77ba69d6eb459be2cc96fd6150b6040babcc406143bdc2c1862c7bf6607b4be95f3151f":hex:"":hex:"":hex:"":hex:"d0f71e56e975e443bd7364eaffa9dbfb60a82bd0ea6405de0b1301911449ae6ac0dc8792acd2b0ca3e68c2abb982362eb2a7a8f95d2960579f9932070c9cd7abd57a36759b2c6f12e20dbda8a16a17c29b70f5bb8db0efa9451d9a349b9917b7bc39af6c6be8217e0a6fb52e6a4c46dfe41e6a9cfba84335d0254cad07557fd7aa3fea185c8c88a921ea665e410067395791785ebdf1793038ceef6c590e64af00ac4ce69ac3d0b497feb93b4fee7d55cf0fa40dd49ea748b33f038b5097578c" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 0) #12 +depends_on:2:3 +5:exp:3:hex:"379d0a38c8897a6524d6a59df4f09ba975c146be7a398c3cbde8c222fcf998102e98223b81dfca7fb5bc92b164afbaf50f58b8df04889dbd69acd59f7d5ac08f81984910ee20a4d58c51512a3ed893d7b736da894a0b52f75c5208d14f858dfd42290f4181b7aa249097b93fb2bceab8":hex:"":hex:"":hex:"":hex:"166f643609dcb8951161ca15b3660759b69da616b45761b8cfec01a8a7f51a0bb1cf256c9fabe69b29552f8e861cbb3160b905d24845d368a17ebf911a839384c3b3aa6c8dedf1fde12384ec9535ab9d008728978ca58ad88780cdc3d272d1dcf2059b9bdc0d2311812fb1b559e31f8e5a89efcb2b33c705555ee0efb23d2c4d312fe02b998eb78af85e3839963afd98c1c644ed4493c3f1af0cb210e660748cadcfc9ef85fa3b5fafe345756ca34e7b7f88d3aff8783e92da00dbead5d51f89" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 0) #13 +depends_on:2:3 +5:exp:3:hex:"96041c211e97d480d149e75c876886a78fee171e0f395a952a0e873af4dc22b46cdb68a60dd1d5753027e544643c5764cd65e202eb821804300ea618e8ff9785f3bf2fbf1b1048cd4450399e2f642af38bce41df8fde3208055e34d356b1aa1b0180673e8507af2035f75e9fe629f979":hex:"":hex:"":hex:"":hex:"51475ffba32991781b17e38ea58b08bde40f03b64824187b9506153f41c233f34dbdc52b63cfc71b120b4fe6c2866d11e9aaf44f82deddaf998caa56a4dd58a6ea2e8f5e3c4ec7fef73e5620cb6a77313a4bc0b135c57d18085010a4a026059c2abd4b6d2048393c5400341928f5ee6c5a063d679e185eb9be2834a1009d03d298b9abb09f993a8ede54bdc4d9a95c2af5552aed9fb02cf598a18b5cfe6c811d1ca4ed764d0756fdfcb5d03aac1ed80fc86595539c105da6b66a00a91caf44fd" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 0) #14 +depends_on:2:3 +5:exp:3:hex:"423cf6fb44605cf03e3063bceb92c156e38c5badfaac35593139df46d325242c84908baef2f824bf3ea66e74bb4127a0c5650c33f68b5d33502b1f55e06fe2c1169fb34688a09291d1e12e5390a73da125be4cf15692e3e6ad0ab6ffb22cf3f77b00333517ecb2239c9b81e59a72d087":hex:"":hex:"":hex:"":hex:"41f335cf727ffec9ebfe7cb348d11cdb4e5e49a9a047d8342a6656e5d235219a5d80715166698cc1f16e34f743811b820e6ea55c2bdd0db1b97ea2269fbf60c739feed818282f447bfe2bd0b9a7c479144f0016703aff450abbd87a50e5e5af0d2d9469175542737bd116de2a73acbb74d9f0077a227704f271fe0696f071914dcb9c0f0191fee35eb66248eb17991b538649457d5d5f9d4bb9cd81c33a14d2becce003c143c9cfe39ccac51048ef169f6a22143eca721d04f6e147749a44a75" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 256) #0 +depends_on:2:3 +5:exp:3:hex:"0b2307c32f34d3f3c3d6887fb17ff68b01f158ef07438a41cde27d2d6725277f33f60888aa32b9b7406f78f47bd877a1795496f759d693f3f8bbd65cb5b2562c4a8d4a717b6bb8eeabc4d8f56118a97d3787d3065f1e20e6d71a1dee563fdb2d56561128fa83d8602fe0da3e89b019e1":hex:"":hex:"16815bf5482abc969179152f79aa34a04c28d483e6ac81aae14f7e0e051a5662":hex:"938c363df2740ba9ccd39168f9bbcd7d421566955f141e13ed039c4d86195392":hex:"959517e0b27d461d678ba2dd528bfb7e844f7bf14a15fb176efabb3a5200ff2b373c7c0683f095798951dc7ffd62b172ed814954c44087fc7a6695a5a275bc8aecd3a2ca8ed631a9ebf5e1d1c515542c67f31e16fd3ebc7e2333c7dffcf385f0d6ebe16b9ed42994be9f83d0cc1e2b3b5773cd2963639ac74ce64a311ac0726014bcd213818cecf5d562cd1c5e97be4028f64400cff31fcd587a004cf60f03c6f3222e4dabae5c4bdef8819670f77f9227eaf55eba5238f90c4bea4f03588b66" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 256) #1 +depends_on:2:3 +5:exp:3:hex:"062f2aa7b48c983c1c6d00d06aa523a67d4e86e5bd266451bb286dcc5888f0f4940c3b022cc76d68e1706d62fea84d052a019b921335f69ed5dcd902632116759b68e09b531de276c9238faf3a9802806750454a5260bd808b796cb12116354b9a7ab9ce33f8dbd40ae7e74a07cfca02":hex:"":hex:"4a217bf136c3894ff7a3ca07eafafa286fafc8a827328b105b3a8aff28e49d14":hex:"e433460e9414b21fc3d5e2705c08a21a36acde4458e24b78dcc51199b97c7a9a":hex:"5c980247a1fa16ea086d54084281c5fd114777ed21478beee9edb175be7c4066b197065da5f4c15750783039eb4b5e2cd4ccdc2a45c49ce535f03a36657f218fc616b3e8ef0c84b78b0cd1c57477242bbddbbde098be573e20d6ddc76649d706e7f6c7ca3f44c845c2c9c9d316ac8b7389f7264c6f8cd6c56ca5503e5b37f52d19e8d47cc85a04a0196b9387433bca3c18dc30b47030fd297705101826840991eaf5b856a5ab75d2bbb70cb13e0dd1876802fc2bd776a518b9dcb9484c499644" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 256) #2 +depends_on:2:3 +5:exp:3:hex:"0fc79576bdba77a815108bc9cd2d168ee30f9ab76db70600ac95fc40c1f6b724068c12b99cb4928247e64b2ea8e75c728ccb3de18adfebe24ef99e14ad54bc1b3a486891b00b1c55172d16adb00ae58c9d8ae0fa9809245a56c9118048199767d35c026e6664773562af011c2ca7025d":hex:"":hex:"b0c200b6f8548643529fd414c693054d4fe04d8f76c3fb8ccc6992ffc25e6b19":hex:"b91bf188cbaf4b01350d726585c6f3601a26b3654db2e2690a14f1989f83ad85":hex:"7c64e503eea5b3df44dc0eb986188c312a0f5fe1f113239984608a69ccadce8a7c7f3136169e075b0c61812b1e74dfe6ab2e7d6f247f73859da5a1068c92ef8e6aedd94c3904b973ab887ca3c38de70b8b312e32a702710829ddf962f0e08779ed9770975536557e3f912ef0d5c4969202af50252117eca8182c30389c9b84fda95118f8c748f0b1752c1e58b8e0af530376aa34cd874cf49628bebbd7353ab4a5f64bbc8e3537762fd5556c680290b2c523153432a2e0df1658f2a5507a30a6" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 256) #3 +depends_on:2:3 +5:exp:3:hex:"ffde7e2726e89cce816ab3e22572fe31434f3181d0578d51161cc77305e2562b755008c7e4ccc8ec62806bdfbcd8508ae418fcb0b57a4d1007469ee3d959a07e949094b0a3e5af69aea3a90a222630978af9139027a656151225a2183b92e980fff9ba9876824bafcf18d63c916fe7ae":hex:"":hex:"bda1741b0b39d9248dd062870334e33cecde5c5f63a07a3030f98b021c6849fa":hex:"1b5336fcbb0ed183e0f80cd31ede4f324997ffb842a83957f41d291612c55e8a":hex:"61d542e4794e9bd4acefef4b325d954c8ec6a29138476ab1bb037507cf52c17edbd511579be5c232a67269ef42364cfb4e2aaefb31d9e8e260a04e51d95c2ed6c5e0f095efd92fbd36edcae4393659af6bb98b0b71b281e91e1df37c353987a6a9e259f2735fd16b8c1277df651b26ac3d9f292c9252be7fe09ab7851f515325a078cd69a7573a4810ab460c4c9e7604e54242ab956fe471e90f86613ece7372f1aa934a50dbd0457033843b887c279f14ad6b4960f401b7fb777253ca5e295f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 256) #4 +depends_on:2:3 +5:exp:3:hex:"7946fe7ada4b545090d7647c99f71594fa094593115c23888146b27a7ccbfd77ce305c1ae4fddbb75a65dba4f0ea18897bb7e9aff3138ba030005a7d1c5802838ebb20848f8e81e7e8018cd0d0dd921243c094aa710f6b0b2ea004bd684799e3caed8c3c8944d5da995b88fa071d7526":hex:"":hex:"b29a506c7bc8b2282570223230664193216dd47f7d20ccdd35943a88c58c0503":hex:"3a4c00cd2f278f0e82498d33fb6ae9e020f4d3793e832afc9864c0b7b6cda43c":hex:"8c0667d913b13866c7eab98471109d966901fdc66fa4dff8996ce81ec5185ce374b118da34e07bd82833f20fa4e44ef159f9b0c47c046307a484b3f52822a596bcfb49b555ec8d481fb30e13dc9898f093d34cbb4d696d70161315c48def73bb1c8b4947c8ddab101d4918f5cc00b890b7450e4e10c17c46ea7f5e0a1df65a1fe74ad2577e592e7bddeadb246fa62cfa5bb8620220b18fff296a19a5a3ae6b833321ca779b7cb5b55658931610d8b7776087c41ee4d077400753681c7da5c5aa" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 256) #5 +depends_on:2:3 +5:exp:3:hex:"5459500d5a709b88bf067b4c390837eef5ae2e5f109c110a84cf32f561d26ddc567c5f4cf0f418cbc2a56d4325b2727f875cb1ceed3167136f0d93940417f616a3843b686ab4f5dd3d808801054c510fca5ea8fa0465f9d1afd8e0c68affa10f5af61e594e66b2bdb2372caa0712bff1":hex:"":hex:"eaec7b75ee03cdf0508c0ca171b005077954e2cec7230b0aedfe32a15cb1c855":hex:"cdafe409b871625ab1b06a93c4d5a1f8196777370df18643f97050d7756adecd":hex:"486aa4063b3840f0417034c65676d20da22c510d281bbf407855cb58a87ac9b33511d692315d88d27bd5d1ad5c35ec8b99018b5ca64897aff48544a5e578124ddc00f785deb60b0a60dc4873fa9a148da4dfa1557baa3aafa22680a40f650e4992d21e35fab3be5458dae13eb2caeddd8704d662b221bda01ac6329e2c451e865af9701a7ccb69c0ed0baeb226e6fbd2b871b99420949570bf5fc61c673aacb58feabdb304f870939d705426aae55cb3a2f3206c33abd453e077c4565c603a18" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 256) #6 +depends_on:2:3 +5:exp:3:hex:"7e74b0a5413ee2ad8de814ea1f556ca5c54c6f11159f1fbc78faa86a74c4871a11658e917fed348e779aae510d383290bc6c4f13391709f8aa9bd79f38f310e2ffbe7fb1be3e6e3aac9d879f1e5fb3eb1fe81675cbdd098cd287f66fb9b28d50e12a64b9e08f28a40ed446fc3a12585c":hex:"":hex:"d152b0aa1946cf177aafc7d47322f8c756831550ec79adb40f34681fd6b3840f":hex:"152229388caf5dc50454c2514d9ff1a4b70e3d1d9b8b29a228d59ce67e8bc586":hex:"a1e2046729e849482bd693e21779e18370a542e2fc7baedbed054476f35447e069bfda33fa2723ad425717c027e8b30d57dd2fca8cf268849358354478cd8bb42e8f9a737c2e3d5490991e4902a52e86d1bafc1751f5908a36afca2b6b4663ccc9f1aa46e857e2ee61e4dc19d154029da48d59519dde64410b1d7daeb5b7b93213cba1bb059637023f928f16e5944e0ed2ca07be3674fed6e0da72313b3cb80b7a2d6533fc8785587366ca1b6769db803d6d840c5d1b6c4589272a3fe9371b0f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 256) #7 +depends_on:2:3 +5:exp:3:hex:"70b5cab63391c5777e4e60516b7095dea3cf26d72b27c19f5a08de6634306d992de4c3f70bf2849a4c3dbeafb163f5d50dcbbcc8e6f4bd973636da95d71d39d6ffc9e67332088bf906921b9c48a7e3de158740a9c0f29a7b69d5545e390030965e305ac1653958360d01607bcbc39fb9":hex:"":hex:"ab042d23accf9a9473b43e82683e30f436fa492ba4a8911e4ed2622d481e0cd1":hex:"b707e2d5a5020d37656009713bb100c55819a98e220fbdfd921c6c0724ba7238":hex:"f3f82b7aa0639bcabecefc7b07b3eecc9962884250fad11b9351226f138e06e3e953e052792d0127618a28aaaa1bf5374a06393c18a326f8d3471010f9840dd16ec997f53fb981aa2b689bf1cdbf265b4ab698f9e8e9c054255147e04654b8fb1d0fd3a0b64d3880ee6e9fa87e0184f6ba307f4d3fea651556e0baeeb75f308fa32925f8c55ae0f355f8db8495ec6c46003763ad4ef36590ec40239b5e8530aadaac931feefc8e392c550ad4d89f5b314a53a0633c7a93bc05b588273e6d1d56" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 256) #8 +depends_on:2:3 +5:exp:3:hex:"c17914dd6b73d65e5af112536f52b046d4963f9c9098c77d9dfe35ca7ee6366d4c0fed576ba4cd14caa3d0c406fffad2f0748362166975f5bcb9a395d568b8dbde3383c5654bd24f26890b21ee1f1cb10f3c93cf2df64cd764187c840590a54babc9c281de88ad1a1dbc2677fa8687f9":hex:"":hex:"4a61ee9349d53f8b3c1af36fe0a9303ef89705fd87e06e5f34b61e1350111279":hex:"a9ad1cad4ca7a5af4bfb83680d4b914c23a6cd551e8b002c50f30be0d8693edf":hex:"9ab30e3729dd8b2af987dcb793d7a3e1fc4ebcfe0a4ac976d91bd3897777effb210c8076e9fd135991e54abb4bb8c7b183a80ef37077692e519d38df4a04304fd83fe1d67d32147fe0a249a6c8bc603d99878039b873588c3781a193437f098094fd8c12945ef99036442c80cd1f544725040df980c548f0a675afaf62a1b7c225c9cdf0703e613c7a5d72c8b00d8ba199b8ecb48b6e0b0d103a3b0f57ff1a4b9189a20dedeac6eb26b1f66ea0c34ddded10af2b0133f4b5b95ac2239dd94919" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 256) #9 +depends_on:2:3 +5:exp:3:hex:"2aa5423270d0859a6e3aa3069a88f3ac4c30eda7f6e52aa891e4f995244a80d73d73f789561b00ceddf721ea59a7eda3157090ec192c578fc53d232c36453c5e8bc3c9c22f3aedb6a93f7aa63975d9bd3369cd518e570f6af0ab162e4c938d17dcd4f3ae46d7cd502ef73b2d40f50e2a":hex:"":hex:"32cae3ff757b79f2305a8b5f5fff5a77afb581faf5a3796c5ed7054d7c048017":hex:"632eb6f1c827cf299f3403bf80af721fe5ff8245331f1ccfbb8f4e61ef5edadf":hex:"1a85c36131a8c271d6c805233098bb29f9104e6254e0680c6e264a76f79ec17c7ac65c8a97610a0a7e5304b37d1ebdbe02cf9daa9e45b81d75d8c613afb974eb38dc49041eafa7462b4c272fdd3d7fd4b05b1e6142305ffd6fa634ddde90e273b51b02c0b68b823c77ddf3e93a2ab9436d0f4801f08a113eefeefefb9592683981423f83235f8e563ecdb4e44daa9afa5e1728204dde1bd254c7985e6d56897c570b0c6307fd49ae4dce18ea55eae846af2a5acaae17a71f8369b64f47b0e54d" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 256) #10 +depends_on:2:3 +5:exp:3:hex:"c69c61689d1f7763d43b22b6bc2262c377c62db60835114442fd5bd65c665705b5563b3b6e9e793d0f4128696eefc5ac603b3edb35b705ae39845cefdf8fde23f5479ae4f033442aa958e979c89bc41dde68d92f05b28c3644133d19788624bc970019a10f6b3c6c5b8dd22b0cee3e26":hex:"":hex:"15cd6984fab6ae7db72a4c099a064cdfbd141dce361fab0021872c91b1bb65ff":hex:"86c295fcc7f9c2ec9fad377e0e4d0119334080f59fa68c21c19d7a1212dce03b":hex:"97b971ec13db049ccd72bc597ebc2e33fe4da647d0f74855f242884d35dcf92d0349fdb3527c87c5431c10fa85569285096d3369bd1917c8c7c8650024acb88e5b17c42b50a75419e29757a9e1ae09053cf0b51dac437883cf3f5b1abb40a71f40d279bc9d596d0f59f4c70f81087b4446c402279f4486198ee3294d0a5f72eba7ba52cd552906371aeeedb47122bffb0d5ed27c3cbb86a6fc2d83ab4db7b6e1ee467dd1ec20dc15bcee168f2e200179714cfc04eac651a495a718e1ed985bfb" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 256) #11 +depends_on:2:3 +5:exp:3:hex:"4dcc7427dff46b7db7e2d3273e0605ce85c460cfd4269fce9ca3b10399b99e178b12f28786b9e3df457ac0015004844d6f6bef29ea562856ee82246d24982393f770d0b65d0ffc660d9d8359f10904fd8cbb76e648df60ec43237ff7dc46bc34920bba637a2c1643a53e8a88bb7bb97b":hex:"":hex:"4c0ab67b952186f2f85a0dbd4b2c1b0dd009dd794260ee7f321b2d2b3d994e09":hex:"f5be66009b79f51f6aa0cd1a5a24a72c6a6c4263263cbcf80e8e0d514a2bbb1e":hex:"211ca57a321cae2c6d1ad755ac924c92dd09bb1c6334ecc543ba78a18608479457bebda63f707fc28190b2d56e4cfd96d8c49fd146ace867236c57761ea28326e3d241d1dc35d7ca971df9d292f2563d33c5f32abe86367cf5f2f06628376752b353f72b501ffa94a50f146b8174cb7946ab8c8be382237334f37594418850a233c536d72763f10b06f728e3e60d3b4f0377d51b0de11d110a28b6fcb7c42b77e5f6b771c8e5d713a0f6c4d82ab2311cadf16b7cb441a417b2f595f32ea822ea" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 256) #12 +depends_on:2:3 +5:exp:3:hex:"b72f34bf8209a28168ae7692e4c7d6f19feab9346971b85fb9f377f6e4a77dfb370a10addae744ac03f2f277c85423945f486830cd410f26e22c23a136d41800850113339242e1a0550bef81a239a289a8d020c14298854f0b17abb0bc461ed6d39ab2d9cfb03b835916c2a8e93710a0":hex:"":hex:"e919d983beae4b687bb393d90ad4104146e86564845800ecf82085d5b269f1dc":hex:"abc8b519db05c1de8794248c5741627cc00ee35a972ecdec045a0cc557a2d967":hex:"9777504473adadade14eefc0279f8347bb178a36dbb5fb028f0315b4309fad4ef554bf34b04146ba4bc260a89cf78195ad1c23c6e473a14385c66ba2a1c005cdfe336999245f00ffeaa41dfa3d9e68294e5d676f01f213c6d2d8a69b43e36f2a568999c0a8c07e96d7daf90f3e2e668eb9fc8e5c812a49a39507d193eb7c95b947aafe658a1065efe9370cf81014e4ffd54efffe5f863e6e4b7d875565617d8b72854ecf09263c55d1c3f1a4f4862214fafe7f03da5572095a7befcfd8e6ee63" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 256) #13 +depends_on:2:3 +5:exp:3:hex:"35d5a6cae5aefdbc62f1efb638c15dda387a8f651810bf068a8d92601fd37e0efffd95196c09c668ddb05eef3de339222a0bd0d3b721a27e2f29be84a846c3964eb9a84cf69b214f612df3b414729df499da4d3ad8bf3613bdad3a70c73cae80556c16f8ab83adf0f2bc9391094bfd98":hex:"":hex:"cd603812a8444925993f2c1a0691bb4459faedd872f43852f9970675f579a1eb":hex:"1441b6d4876b050fa4d969f1845d3f119cf5d8720c35da9c489000e6b7165db4":hex:"259828d05b8e735fad69527cd2322f94e8e7ac2791607ccf2a74d070bf7d5574ffd8d6e447cb4e02bb15a87aa88d8f1667edc0905455b116ef7f08ce727d8f266965242e0042810f946e52acca6348d70e012d998322a18a2f3b4c4c6d6b66cfe65385312344e3eed14c6e7277eac9a4d09ddc5dcf8fcce6f79a23d34c80cb78aaaf1347ecce8c13efd450d59506513e62f527179b95b9b5d9df821c32538f8e1ccb17e911826e944ec44943ad8e726d54fa98ebc4d012d34a23771ba497ca2e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 0, 256) #14 +depends_on:2:3 +5:exp:3:hex:"66abf17d907a134232faaff93bfe361223b5b773980cc261fd19caaca022fd0a081c11efee01fb1f7abd0145b32a51b3237d6ace877ca6392bcae2fd2aa5b865aabfb1d1d1da33f42319a088c8dbed1124a71d39e627d5efaa1e8f3e5f70114bb03b71ce54e4f8d34e838106b2467cca":hex:"":hex:"1e51f2b67538f84440912c6fa20fbf009100fc3008b5b8e1308d95e7ca53b460":hex:"301f91c659f73b618cb46a4343772f1eee9fb4949ec6328109823749bd8b0b11":hex:"34c532082926e6d530b3a58282eb4666ac7374e8befaa4999dfc9f409e40ff966652295d2940db97061800583bc7d47b053553ad29c89ee61803c1089d30592270d2927031353592d4aa71f59a4bf3f2147cb406322367544c38fa5a3c8ccb534bd884355b06145db62161260162091c795874a2e99e01292a2e39e107738818a211750f858edbe0c2ea4734ad14f1c45bcc9f733f027616926558587f7332be55044dfd6fcdb628ff7d7d581820a217bc64aa092e450722686e0cb291eca45b" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 0) #0 +depends_on:2:3 +5:exp:3:hex:"37dc21c72dc7c82d5e13c51ecaf5a8ae06402500d92caf96c0555a95069f4f0144a961ead5d6d9bc317afc8206202bddd57fc02a2a500df1fb5c4d9d8837b52a5220fdf068fe2b8b4bcc63fbc9bfc94c8e21d987e8b6cb0f4cd37b144c668f18b7a36ed4e9758ee7b96029aa0ab2196a":hex:"41e3b89347bd035bde510ab8ff83d5fdcc9d5f2de648bdb468a714f2c1083c52":hex:"":hex:"":hex:"a929ee23c5832e5ab93ccaa40bf775593d7d04a1a8411dfa07b4c8a2da2dc91b1bcb9c27a0ba5a7152ce5ded5f76cf6b83c04c0f8a4f6b43383ae3e7d497280c0f944be91b0bca6a56df2d00641bfc1ec549b538898e559407b076164278c0eb7afb6d6f4495a50d4da178c04b259d21bb745692d3bd186edf5bb3da6f66b4418fc3d9b085b0a6c1a5e54696272c305c4b8887595b391dd6ed8da03dc9fdb2728d8c40a2defd8af05ef1c443a72323f2e0b0d268109fb7e7ee70192fa06bc6c2" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 0) #1 +depends_on:2:3 +5:exp:3:hex:"0dcbeb660cff703e059913eebff4f639a24b611a078bae8f01320ea4af5e8e0ed93b8dc4e84d224036b5da645c147359c6123c54cc2367262a7594bc9a7dc69f76549ab803af66de8f253d338d48ab827b2b1918d636d6ec92bfd9123f1f5fb59b6c37eadca0ca7792e2b7932e1ddc33":hex:"1debeed9ba5790437a6c56dd3c9e2f6df0912aa0ce2e57fa8eec9652e2eccfc1":hex:"":hex:"":hex:"5bd815b3c3bb73a45dba72c68457ccc17212af905607d827e8b5ddbffa34a058ec360abbeb6c8ba16c770ae4826135ac7e4faf208da8b5fe3b26c16fa7c7ef4000c3dfe1b8b707dde64b415c671c4615d56e2648908e047ac978a389e346cebe9228daa7bcdf5e341f72c3c7ff74672edd60c7c6341726450ffbf9e3e7a16580e7e602f9ddd3f3556129052de05991907d81a87467ff5842c6e5dcff4543e24ee48149f16e9107a9aa40cbce367d4b76042d77ef1790b0a7701b2f04873d245f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 0) #2 +depends_on:2:3 +5:exp:3:hex:"d9bd99128fe2771918afc6db6b2514eea0b617d9bd4599a238d9d99a7ce18995e8d85542f3f9dd89920b0f79b94d7f551fef4a330e9de24eb197bc75677bc13d8361104997af99ea2c6da03f4e71c89e03191bc5e320f057afee98e98facb99d15142c61ddd71666cdc38146fbc3ea4d":hex:"eb701a9d119cc6dc0d735254067dfe161b1052ba3f93ab0d6bcc19cc0387027a":hex:"":hex:"":hex:"67b86213a84778a9a38eb9913b9db8508b53ac0a81ff85dc78c966d638255f8f7c63ce06d4a66f5d9213ec2b32f7e63ce5dcf01b59d3b30433f0cf4c06c171d839953de913093ec845670b38ecacd81162dd73501b2e4c2d9dc69b97d49bd6d9f6250070ef6b360305fcc5ff392d1adad98d6bfda67d10b725c7cc8ef6b4fc206fde1871712b96dcbc2df4f08d79f1adf7fbb01bfd8f20e76956ed4b9dd1d7e5fb4f922ad2a529bd871490e741843d839e876c4b475e2fa140f28ac8d347a07b" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 0) #3 +depends_on:2:3 +5:exp:3:hex:"0de3fed3b363d20ec5018d4aeafb25c8e0e6aa42ee8b56843043f8d9c40b9bdc8ed427d29c469d8976a5b785d050f3d2e5eb287a064c54311bab32dcd5f240682babef59c6ffa602669f3ce4590b054e2550444f249b56666b7b2fbec29b33d1b29ee653e388f9fb54b00635ff526dd9":hex:"82b6a44b0f35f946fa0fd4628738e61a0bdd421a8de73f3d2efa25216c789080":hex:"":hex:"":hex:"1f7b951d147ddbf21fef9d4849044c44b757309da8f0244f71e4d8301e1fd50c5e46407f5bcbed83eaefdf8983c330dd0a67568e866b20b48c2bc97dc63a7c0d3eb60f2488b1eefdfaa7b8dd43132511b4a2ca80bc9e82851584ec4ae463444aadd3c8e6db2d4469ad9750e18a31337613975b3fa0629b9a22bccb235d20157a4427acd619324e881e68f5615c65e59a566a73e4ce9d484fc5b0b29137c4f339be84781cad67d17de03099b1d03ac45106c1f2eb5b380ec84392b7ba5c91df4c" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 0) #4 +depends_on:2:3 +5:exp:3:hex:"abdc2ac24ba7d92ed9f518d9576510969f8d22074bed9b7639299d2137532c50faa49b5e843f417693a2eebd0ffd3f27c0ad2d8bbfdb912ed4d1ec85165d4ae577a92b1affab63070e25dca8bb1b035c8bbc5d3a07b4fe094690e4a45b99f9e5bb6b0bfe823f3c2a148732fd43db5e5d":hex:"8c7b18ce389664fb72e777e70b533ced4c04b0c290fdd45b86b6b95708d74187":hex:"":hex:"":hex:"c3d1420055f71a43264ab8da92829fa1b8937346375349d2e256705d933a21352ddb4eeceb36cdeab38cae58da81bcbe6deafeca5d7f018a0514bbc285f436b574ffac2547d26a3f9aef21b66c1e70b45d372e4dc2281182ae94667e442f39e1b9b2fc2aee06ab306095a904614613b513cf1af5a9df12b996cbe88cc3b25401790034ad0622df43af4cdbf9cb681538c79189a8260cf9c35378955f2ea859faa78773854883cd94bde4c0f50d4c998c278e47787e3f74f3dbb98f710366d315" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 0) #5 +depends_on:2:3 +5:exp:3:hex:"d20353e175f4ebd0ef5fe77f7f6fbf5340ba07934828dd296c041a63de841002db0d21ecbfd5eda2bce80bed6f73c23d3f18900bcc02791ba9cae668fc33fc60ba84c6eb40afbbfff18be5c4960ce57ad67dfc8c1eabe61a299881c0f326f7093c1a232c80467772e707dbe75b5558d4":hex:"f38f23461c471181a4179323aed247299df11ce145fbab9834b85b3cb42a10f5":hex:"":hex:"":hex:"76a4994edba3d0d9ffee9ccb7e12a75e79c5ec1213f45ca4c50ad629ac533e5e6dbf58f8fac193755e74f9e7a75eedf89472e91d394e32eaed86efa4fb2f9e7fe4bec1d9c7a30fe9bd17c2cda73d136e752a9b818cee6f1262028031bc09cb81b89156138b571f03afa69dd388a807a8cbe9c4de66cad764114f9a4a6419ea70ccbbbff9dd774aea8a2d6b1d20d0a577c59953661f0a87b4d795c2626a025d733f43bb5cd1df37f5cf542c7c8b6bda061cf4693e0384060e63090415d7470cb0" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 0) #6 +depends_on:2:3 +5:exp:3:hex:"a58ca5154659ba58fc1b468c909c667e1b5087884c01ab15f86fb5a431e982c1c041be0aa014fb310019fff65f40ff13d4469b123223ae44f4f4ac0fb6877a7890f969d39047e39ab23882cd7838e16e64bc361fe18136471dea2e71a86ef2d9f8f7e1d24643d7df292409ff8cba0f13":hex:"dc05980e40f07a02fdb150af580a7d195ba26f4fa72a1fe513ccc2cf6e4f699f":hex:"":hex:"":hex:"6ad4543c218cb6aafe65e6a50c4f9ee9d5c7a3b9a0112bce262f49f5b0d20dab7225fd0acffa25165729d8fbba038eb65f7e72f136e5bb82e8d94698dd9b763c38f3041ccece3b04189aaabed79e4d4213e24218c5fccf5f9a0c3902875564431f4d670e6e60e1dbabcc4642c3ef895c115e28702927cb98d509f9341ac7ae2c6ef6c2dc4537e909c81a9804057b6e24fa63ec5edce835e624969a969e2c47c6dcb7e9bcb2bb8f344d2b9855a43e26c0606466887b28b67ffd7f99d374812d11" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 0) #7 +depends_on:2:3 +5:exp:3:hex:"9d6e99a11d63cab5aabb1462abef66bef31a2886cd172651bbf30f65b16fb8f3b93b5042a908510d8518330538a06253959da557d2b390c6fe0b7ac6b18591e5791d275c7e3d558690719d5967d026a80604a389946e2a55486b5c49c2984990a2e14824aa2922e6a59892c5e6d969fb":hex:"af631e7990394889b84d851920ce8877934e706b780908a07211d45b247584a6":hex:"":hex:"":hex:"9f33ba9083c7f4088c9505622cd5b4937b7189b0cbcdcf352c54ef72057594b8568cd4b13a4bfeb61261d27f5febbf2cbbf902a8d55f6bdf669238ae84b8abc58826841f7f62a0c5bd9f74125cecbf8e3b4c1ec88663114e7c248c41cce92e73b05eb3f826100c1b2683cbba985d2ab694b5de1ed8624628917ec9bb97733f337298c0459f198c7a138f1670dfac0d58f287b8244f0605f97406ef528099aa2ef290db202baa7fb221a8523344ad836c9a2bb25e1ff3fb4dc20f69ebc9f0fdd9" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 0) #8 +depends_on:2:3 +5:exp:3:hex:"df7c57519ae3914c75174b3107b7ddab95df936c5cd7c296b1cb1ea06249915cda22bac19ccf2d522137989d5a42549809277ba155d04b3353520f4b5c2f18120bb4b8442130db58e9d46a1a41f5627c40a6b65a4f9075460b7053202a6e5b12b9e07ae6ee9b4945d4235d0b736e88f2":hex:"10a198b05830cff2fb4f5b0317c258129396edb943769292753095b58bc8fece":hex:"":hex:"":hex:"17b9fc6419c17534ee16aacf32550cbf58ea1f073b8e72fb9ae6e94094e797f216703da428394a1da8236f725b191cbec11531a1f87946c70fb1440a55be7d7d18c9b5085d626dd0cd9b3bd63a9014e5d14eef636beb694dfa7f781e83f3c1b4fe5519ab1a505d1be5b812514f3a39814601db104afe5726086f6bacb61c00ab8210239b2891938e97fc53de069f18a6469999727a904403bc53c6c73c7b3a5f9f37f380563f1281cdaa1b4bb4a636f849717c307848748172ae0191997abda8" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 0) #9 +depends_on:2:3 +5:exp:3:hex:"2e403c307a03d766b61001842f85caf91a5eec97a49934547b2ce63411916495f3e102d333269e04381bbf140a28a2d61fa6a5f2286079619f4f4fafeb5c520c602d0ac3190fd500a3402e7c0647ac76c901e7c58e012cd6b9e83d2a969f0d0ae4e08ed5cb601fc72596a72b4854f246":hex:"ff1d9eed8cf59f5708e41924cf13fd5d30ccb7dedce3062dfbb2c4bb4d36b65b":hex:"":hex:"":hex:"e5e20f2cb063c1587583a381536aecbf0b0cb4400c99a74bbb6aa15f338b3e67187316865cf90e691d99466e34bd6612985575122c6c79848d4e2f26801d98e49c002f4063019394f4b3eee908f2d6b56749c260e56ece4e0431650a8bd9735879ee6c9bfaa5d44c07e7ff6978883c36597c31126386dafbbe035579819068bb060348629f74420bd411f2dc858d46dff0bb4f79946af96046da2c2cb32e0aaded4eb1ebc8748f277317f9ffb9aadac1bf5e6654ae7131d5ee0c765ff3d49d9e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 0) #10 +depends_on:2:3 +5:exp:3:hex:"4b1240cedb84ee3f395317e177efcf03b0fb57be1e01e3c206170877a06ec2cc077e9751b4eec964a4422d010ef1487456fc16b3e6e7ccb8a06230144535274215f00afe175d394cb04518b630ba7255ada0c6676885801a8f503c55c38850de6f7904b40cf03fa195cd16ea2999347c":hex:"9043ef3c775f32dce1902b9efdc481f61f29220eca53bb904155f2aacc3b3706":hex:"":hex:"":hex:"4facd2fff1828b9f4a63f639503cf6533a4d242f316ef7168fba44b52b876056bb0fd040d5e331d2746169cdc88ccef74dcf6c642c1d1a0db4130f8be9ff88555de4c2a7a5824f005cccdfa6074df3385672eca57a45679d69dfec232cc8b1bca87f6f9c6cac2f630498d52449a5d1b328a6d2ac1a9054a0658be589bc277b7750ab5d647a73a15a059d72608f9d299d11f9fb417a37ddc1b52c8b8859c2949e5ebae650b9cf8b4fd771288e582dee38178b154e681eaf74d4d3f35daf00a309" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 0) #11 +depends_on:2:3 +5:exp:3:hex:"c2027d8c084e2c6fc5d535726312bc6362372872cd37bf07cc1c3870f3b59a970c62b84a10d1498b2e02027d854fd84dd615e29e7c204579968569386b6f08393322c4fb36da4398ec4881ca9c17905b7b2fa28722c98d404e93fbaadb165411d41256a0dfc806a19df0f526571c80f0":hex:"8c5c93583dbba016531aecc1da7b010b9559785b2e8cf660ce17022f8d86be78":hex:"":hex:"":hex:"54074cf184040f57716e9eef80ed0e006cd029b99ca568fd7639c4c1b0f7431933516830f5f87b157fdbbb2af7ab57f6faa26323f096c8e86136e49d833665a6cb3a22f7d5d38290c2e9a23c62dea6c51b958460b263566c5c0e4be9adcb1c123b55879f405f11b3c34c24852d33c64d6563ee46cad14ce08d5919ddbffdfaad0bef8d8ed9974f1d95917e2b108d9519b13c4f6929429d2dc44ecace7799839ffcae035904b576e71e92b0a89f39e3b3444b75ee0705419c3b3533c793605eb6" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 0) #12 +depends_on:2:3 +5:exp:3:hex:"02ef640b9f087fa48457918d7bd6e910d7379bdd89e1549118ec67880dc3c4be3ad95397b8fc88bfced5aa76941716bf4c26696e9540d759c8c6b8603d5c40df267056c79bd8a3497b77052e498953493eb853b56c41f3286c09f1ec88637f95a1cb7e6e0efd3acb8a8fa4de63d10727":hex:"38e664b930fb072112e6d47bfc5538b0d48672a12769f3eb860243bbc1c5db75":hex:"":hex:"":hex:"c399e8c39ab174fa8cabb7e73845d8d434dcebc21062edc69d02928b0de4471517496365bbd59062a43408215f5b0f35971f4c48077623860206e0e6af8de751e6fe45eb6648a66e8ac5e603043c5365be3015af858fa2709c6c7b1cd22701dbbf4ef27fa45e6d7f9df4e8a558517a38e26bdd82960db9a92a0deee98657ab514913f134cb9362756a78ae4afed3a6c89e86341a8fb20b5cdfcd56933363f83e8c55c69adbf8e8d7199bc4f93b72ae1c4d0939b564d98e7f052c66e1e0988ca5" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 0) #13 +depends_on:2:3 +5:exp:3:hex:"2f280ffe3306764839899faa89213139a40462039f4d9c55feaef6728c24cc636819357f6ea65badc8e493b99d5af1d995d14d81e39802711977d0a1c5783bfe3c290bc469bb9af520b0faa06f230fe6c4ba3804e39e3226f0731f09579e105d726b089d1c37c72e3faeb33768d3f20e":hex:"e3d99860e8b1e9297c60b17904be8525be831d71dbd3f454f085d1758ebe7160":hex:"":hex:"":hex:"45400ec700a4cf8309fbea94aa4fcbdd22c859e0f7defa746085a2f4ddb9db16efbb0c2fff798c99ff4e9e11986f4c330f3658e34a146f8d9071467228e3b0ea486cfbc81da3e739a301fe51b620d7d27fe9da0e4b875efe3c2bd0fde31f608015ad71cac9c95bce33e516c62fc45a9fc85a78c142416d7fbff3a83602dcce3add6301ca6b9be565e3cf06ad6f22855d57d9c184ed7214adc1bb014a1b6dafb86989283fa3a4be10c410442d761c98d2d3f94bb0d97ba1d5c8966eb47b0fe6ec" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 0) #14 +depends_on:2:3 +5:exp:3:hex:"8f3ddc4230f8320bd18cf078c04c62e248fcc326980301174617a9e54351c667ba4c31a4c0e7dbd7336c27c0b8a034f6fd947b0a21e580e6c2dbfbd44d01f5fb4a51dcd2199df9f1803f24c5e774f048815302e016aad33254d308c5457f368965c15b6204e191c2a252e4fe88dfb978":hex:"9bfe9bc055b3215560cd285553372c47cca422fca574c0d22d7ce5f2dd40b084":hex:"":hex:"":hex:"34f550231d31c1b3a3db331d341ada3b987120d94e431831eea67e8d208f9cf1800549d445fc7befbdcc2488cc7f4340560d574fcd2396e9ecc9a232f1015cfb26db451623fe47ec8bacee1756573e74e519adc62b23ce86fc191ea5e13da9c7a14496426c6c53dfa7c7ccdb67d6164dbe88cbbe7f48d4971993003ab24f3eff18bd52c2661992e8f8da93bfdd28f01fc32edb439ad130352463084041e9871c431ba26c676ecd7812991833113cbbe687651e93aeb22a6a44cffc7a3fb214b2" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 256) #0 +depends_on:2:3 +5:exp:3:hex:"8b285ce6b4da70c83fd72aab1b4be62101bf9b29e168726ea2f670aab0deaefc5da3404c494c6019ea33679e37cec308dab13e0cb060f66c1c83fc6fba46477d1a3c802edd7594db0b297dedb9ccbc800c817f05658fb9b4c99938ae2140160c4a16d548634a353bc285cb38d0e93243":hex:"723c0f287db4af285c195cebb1104a106f22e8b243fdcd0566228ab5f227a9e3":hex:"881a1874c800db068b5913d195058d0726458de3782ff530af1a761f9628547f":hex:"0c27cf271bd7931d187ec6f56038519674468fa2e7e6f994904c9f1afa346939":hex:"51e042dd56a193908c9018c25f1c1a8b5e2734b055c3b7fde6a8ba9ec2b959349df29295abb0a24b4715f98d31de0a369e6262c2b2cd49c5462b7ae284e921f5ad2ec013edc1611343c228683f4170f34a75854b1b656d226e294172d488c10a415f09dee70984b9c49e8d36863192301d1762145e0d9e94e99bd30ce8490438ed050f418cf4ba0b07fe90a82d1ccf38578d99edf0518c4a758a199db4d3533c4dbc55b1da19840b8f365a574aa01647819032dc0ad641388c2093ebd4ab5d99" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 256) #1 +depends_on:2:3 +5:exp:3:hex:"5b5c670d3e0e97a21cfd5bc3d038f0c3d2578cf3147f5545e5118a04c4eac727b50734939e2fd0aba704932ccaac42af316525e3fc5f1dd224131d65f8d44ff8420891c0af7c78f9cf766097fbf0f8bfdd131db1801275c28081e6063c0c4d6242f96e40fc513608289f378bc4f18518":hex:"4cb0e590a1d575b6a2df9cb0243895263c894a990b6798424bea9ef199761d08":hex:"feabcecf0648665b08a7c690add6ff75744de3916d5573145c35517808605beb":hex:"fe81cf8978798311ee6d1c5d6145b3832d9ad1a1266fdac0f4fa230c631e9ba0":hex:"62aa5e9b8a07bed2a5d3eef0c73bbc841bb8cbf544d32a2889806ba501c6768aca98c19b83fd4fb2cabf120c05716b9eac9b77d561ffdd69682308f80fcf1c78409f3b21749bf71abdb209660716a39c2562e8ae1b3478828bf35ec9d3f9712d95f49a36b9eaddaf1b249f023c36d09ff1b6f3df6d10e4e336763edef9501827d5171c507eec405bae52d56fd62f90f5c58a2f1a7310530df15ca6b7841a2871a37cae583e6b388978c118b9600840f5540af529bce0a24da8f906f601fc270f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 256) #2 +depends_on:2:3 +5:exp:3:hex:"64cf47e52f758df802c2b37a4841c73a3228738d14b439a7d02b13fa3024715c744721e49f25a0e73e821f69786fe2d91ec1cce1d1cbf2dcbe5bdd2371c0a5df050841b6f07b1a2c0d064bc5e06ecf2ff9904928febe0bfaf3626df5bfb79fee1474cc8dfc3ae268570df2811bc3ba3b":hex:"c3f0b0471d5273f40e74ccd71712071fa411b72b0f5a98c9eea9a5f7f176967e":hex:"4df90039bbb54d8753b19ccb6250ffceb7279c05f6d69b5c47801c6fdeb1ddf8":hex:"181d12bb126ea840bbf9e6ff5e68f8ef53f69071d223bff593a63e4e0c65ee1b":hex:"8cec490ebe0b4837f040663de29e2c6dc801d7953cb2416d245ef66173e5d7baafbb77fd2c5ce69b4b8995bfe51f5f33cfffd9e9b1284fb8657bb7a3c26f5aac500cc7d3737fc81418c94d3db1a63f4922ca49803c04fdbc9488e21d9c4bc381c48bd9f7e5cd1ed6c6fa9e889e463dfc3a313812245a66be220266707a5358e25807ccb11f24780e5ef82c84a8803f72dbd21f55d96362d7cd8abbfd9d21f4e3dfac33326a4e538476508afd87e030d92328a91c91ffb16b054740dc3d0a2130" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 256) #3 +depends_on:2:3 +5:exp:3:hex:"690a8be904c75e41342c8e2548abde2e465612a632710179ccb9c1dab76c4615bdaeda1587772638a61747738b96cfc94879325d2cf1cc0269d877eab8aa233ba8d7f1ff44e9118a128bcd8cc687eef58940343d27ba1d800aed9e2e911a8c83b8460f9d72c7b92852cc178d3d0baf6a":hex:"5dd031fb2df56c510b3cc3c02fdcf6cf3ffa4a881e7475a8631073b3ed5e3c62":hex:"a0a861238b2b9ea03582eb4703bc33921b5376c27004710d416ff921d6e6fc60":hex:"3cef66f75aa682ad5430bdf0f01dd1f2c3492fcacc6f80ab351cfacc1c6b6ce0":hex:"92b337a3364059acfcaef789ac1ae09c9ed05fdf69f5d5da7a1c9b6962d3a3c71a4041dc234f7be58fdbb728f8f5fb10404558f21d9b4c818fcadf5d6bac8bcb044e5b2fbd26ee08398dc8904c271e8d3d184bbf61f77c62fd3c8f1cc1ee2f8c4620c513f3abf5e312b431e8608b29cdf528d892ff03bc0a9cbd202b9da1d052ae2bc2dd8723198a1b3017ade2803c3dc8733ac33ddbdcef7a9948d64f72da0716b32dc6eea224bd49a7349a1c32e8e325ac11e5fad8353cf85d9eb4b72b1954" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 256) #4 +depends_on:2:3 +5:exp:3:hex:"0eba7b06309f0dc4e2bfabea57e1d01a5a3e711398320925647008abf19cae194efbff93968c0a7d1c7623ee1e3987cd95c3dbd1b2ba94d0b2d416fe2f2f6faeab46646a378e931bb5daac049333129ce7e20e53117a0f68baf4c86a3ee5e787b02b53b1e0140430e77ca86f242d7f90":hex:"69adc69e03cd113c34ae6b89c7c2fcfbe987e426da865f7c8e052da4bade343a":hex:"729489cc7ba4f3f96f77ff365fd5380cd83cc7b17b150d327c5b7632f1cb0460":hex:"59892fcf99ce719819774539ed4f10edb7cd35cd66969137a88ebe6336da90f9":hex:"565e3e392a9f364df0b575d9444aac262f58ce12312d5ac9832ae6351b6aae0398e0bedd3074f57bd4e9f0e89a50d627ecfe11fe9aea09fce563eb34efd27610a3255f81f953bb3f222b15c019b9d812150f7a1f19126994c505d9ce5c948882a1f6c5cdbc7050461ccdbbb7aae597dab53a12ea6bfaa4d4710188d690fb0a0a34df7fb6bba949fd6a8565fded8e4832ff7f6b08a653a72b8b88782b8d77c1f217e8487163fdbddcc88a83d8bdad479ca75fdbcaf02250db39528456942119f1" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 256) #5 +depends_on:2:3 +5:exp:3:hex:"9dea5f271193aef61bd72c76a581d65eadc8002b258a4d548c7ad1cb587a5f681e9709eab5e146833b01a79a34c352aa642a7a376595347c0203a8a0456af4e9859aea62c887166b3483e0c7acdd5b99a1b1a466dc0709cc6ba133abe29ecf3f3150d664d04baef8854fd86a5d8cab19":hex:"895e5039eeb3ea1d197614a683c84d7780ac8724192bd6c35fe81137bc23e4bd":hex:"9e8669a67bf80c695889a7e875a9ad1954b91e4bddd0848313b4efb4b00b14fc":hex:"2e93a8b96ae1966e2a052db0d5c2d5b76cd7cd23494bb1170a33a9ddf39b21ce":hex:"71a0ea8b9884e979f4ed546cee3688ebc399b41be38578f15b99d9621de0da3e671182f6da612334edb8d3a6d5e34c2872e277942854350526c3e000834bbe18cd5f2f336bcfabb42c4aaeb19b8cefa3f7066a89593960fabba244812d15c5fa7a7281067c789745127ee2b63b14237136c54864bf86ab7c377414a7933b829fc3052e8c26c698459a83b1990c093305372aa608c967bfda719e98c4c177764b72d184586f7b63a8e75f78c9e5e1dc045c3eb5b30c7147c69100c2cf910d4f3a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 256) #6 +depends_on:2:3 +5:exp:3:hex:"2b4c85aac528f5cf44e9018795a1e8f810220ce318aa174bed9db372602c00f68ac33625739f299241d1a8381372537bac392411a1d6849aa6610a177743afdf45cc524838fadf1b5feaaa9983ca79a4508b5e4a275514ef4c04c233c3dbbca32a00d0a1628323b91dacbe499c1ba928":hex:"799a4b3c9f62c2f6aa9e91604e742dd06ff9f77b15d3799684e1dfcf029d807b":hex:"1d15f59cb3e102d5ff47ad4c0aae13631ec4d300de4247137aec5b43e5aa4f79":hex:"f43801851946f97208909f1ad0f79d6577eeda70067886b270f55d626d966fbe":hex:"f05e50192528ba1185cb964324141c1d195f6e26c42164052a7b7244797c3084d48bc5e6e1a27e64562cf2fa36b4de30132a082de2f927059731d084e2042eb7720932ae8e1741f05f4c75079586924cc43a6cf3f5525e037b089674121c2741f836372f219a33bfcd910884abb166eeeed1840672663e0455b18bc7c9fcf20967b25dd77eb37e00d8fc40b0788c08280b0bd8878c504d982db4d3d2476f5fe6785b1959d1bfa2762c00efe436cd217b6d01adbf7da08d23254f1be1991d200a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 256) #7 +depends_on:2:3 +5:exp:3:hex:"a716af9e058eedbe937ef79ee21cbaf4ac1ed0e2f4863eef4ca1e3e972f33326eb6ecfa7bc9bacd3d90215a3db843b24343edf7ada9e440a206df7f38f8cbd1d38159b8511f2a93d1f0b5ace8a89c0d823fe001656c3dde659874df88dd60056ced293cc49d64a71ee6b23199c9b20e6":hex:"648aa30cb2687d857d309f702f6dae1f30edc824493d6e83a9e26d94f28948a2":hex:"39c5a6514f3d399ac41b2640fd619312332fe053abf1b2a19472a58c28345347":hex:"c912a1bb84f7aeeef79d73347097e09f6b8fb7ec593176cebbbb56af866bc309":hex:"5387674cec52da2a9743b2556fa9874c0866e579079954cb357f17fc069c2e345c1ca80081040d620fba150c22eb1b8b2c7df082f637855c396ad6417fd383f8e93b7bd91693408e951b7572269c0ae65be8bcc9844f9fd8401e68f6fafdce195162154b34fdd5db8559dc11cfd3cbd3d391a45065761372f60c5182fe4cc162304061f86e666326c3332010fd388626cfa9ce1252982cae7b6eb1b8208c79b7b689aae9084fd180d00962fa4eea79f612ab7ec5fb51394f6f498528ad5860e7" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 256) #8 +depends_on:2:3 +5:exp:3:hex:"af405b42f8a67c349bc10d4d0b97f56cce433e1d34cebcc75c2850010d20cf74f61b23e1d2f964ad6c9a8d65c9f87749da279902d5c30fb67207d72be55451337f34aaa8e598b9ef55fd36224ebee4b5524a93f1513fc21fa984f0a76c2bcc98ddf39823d0a87d501b3515e3ee9fd4d6":hex:"1cbd963d49b2553a9711687bc50743d820588049cf097c100739f857b3928fc0":hex:"e0d336ea552a6dbc132f194ac9ab80a34a54f4d331a55a070dde6601d6d9084e":hex:"91e882daaa304874fb0c063718984ac53e1f0716ca8c9210bdcdddc142c84082":hex:"0acb19f2a65bf0e1d9f9561d8731fe0f0c178443f00faf427973ad45f2df4f4d21a4fdecdf96c34be28e389d8caed96b515ecb215ca915b38c715015e1b07949263fb65517ea4bcae361d76c418cd2c58d29010ea79b9420d1cedf937d3aaae7e29c2170ba88c8328664d884ace90e88c66200033d19ffd52f668b00b0df088b7942377c1aec37b3c304521c394ec749efbb252669e0c0415b8b04b995fc224903b0843fbaf0be1ce804c9f14a5e97afa70d0fca9cb708ad20388730aa9de020" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 256) #9 +depends_on:2:3 +5:exp:3:hex:"e9ecd00efafeba4fa9cbab22b1b5288c98a36ff1d6856592a288325968c31d7d88fd2be5c82d79413b33c1dbe972859822ca2c8a92e7812479c14fa292a627a8909c3a953a2758d42f22a18682ffa219aa9908e06f521be8fb59ad58e5651aa9d6b95983e23e54cd57dfc82b2077bf96":hex:"adf1f50a295d88f68e8c07a180897d8e7b49f7cc6cb78a3b25ee10b0583a0f0b":hex:"82de6a73568ade5e5b0d8ae37c40ff25e858a7055346020c5e47feddfef75680":hex:"cd0e15d764d2355ac9f1cbd5ea519ed1756a3bfaa55e3783b738c03bdb42e371":hex:"1e592e5003fc0f3f81a7aef2272527980cc5a9ac7286a621513b9c7ce2ea94fbfa255ef2654d673bb8cd13f3a033a7701304acbbe8d19b82a61d2e77e7251f98b0e28e1a694f9cba2c86c7c8cb20d9c2986e52052f701596e3c837af95b166cd227f2fc00edd3ea62b57f60262712b2f71479569c119cbce9d771f8a2cfdf832aa8d70e0a912978fb2bb33b27a185fb3a4caa3a18913aeab095ac088d14381802117af0cc1d97c06fe9730bebbff0adf2ffac5995d299e4defb0722bd93f0799" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 256) #10 +depends_on:2:3 +5:exp:3:hex:"898a6c47a5cff500ea0f5b18b5f0b4bcf7e75d6d7c92025f9920c666dbc1c5ffc48972e1d519428f8d61dfb5e300b48f2660ff53e1ffaa3950cffc50e17a874182236fbb555d35ced33302ef87b84c0ad31e87441ae365350452a39470567bc009871a3c9785bda4569af33d03d46f08":hex:"9e16568a225b80e9011571f3b55102cf6362e26b8a60fd33680d4e6625738e5f":hex:"b1c65d6e51ba043f63b4251ed58e9a8eebfc289f6285705f8ef44c202c9b4a22":hex:"245ee741a2041eda22ce7053f8576c0a43eae868fd95ad7d58bb921c155b1b53":hex:"b076210688b06ab6b57edf68126dcdfce82b6f9285ddec102ed60730aa7530863076186a3f7affbdd4ef081b7f5a32fb461bc5755ab4f860012631b74ae357fbc3cbd64f0eef8789c6c9dca894a41a005d272b4a57e761f91d221636d0ec7a49f10bb1b4264938604ff4dc7bc97eb799cea9e3e1d7a9b4bd66d88d244e22120bb311f502e66e60c5c9e42731ad320b23d6b06ae92a132b093ad924a1a7e08b5dccdc50e257bfdb63bf5705350588f61e93e4fc5042a2cad1bd6d9fbc82e875cf" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 256) #11 +depends_on:2:3 +5:exp:3:hex:"8e92836dc5e4bbf9598803efb0d3871e5418cf18f379479bbcbd9262558af6cb6d97e73decb8781c30f69b61c1f5c91a5ea1f10fb1eef74b480e583710d9a6a2e57f8cfc9d0215fa73d1ce9c1562f3cc34be187940cd317b69139ab9aa58d064b6bca59ee6460c3db4e8b57fab0186f1":hex:"6d9afc769985218745235e5af280eb45cec81a2e920c284ed5c77105489e8f4b":hex:"711672f2ca12e7d8f32445a87163bc00f5d0f52c2f6799ba513b68c07c350de5":hex:"426aeab2cfa56cd3146c0eb9facfbc048a504eec3273256b5e4db3d66c89560f":hex:"56325373099fc1dd194555c3a1e69358fc7f80fe6610412cb31c14cdc70c73a74d040746c6cf388fb9718e7446888c6162de73ac097c32f8b4b00dd7f115fed1821d3786baaa1f64885cb93c75531e99171f98d3c3576337c1c41c5bfe83f94cef2adebc88c0790398d4c071488699edd599797c1f8f394b3e00e66bc4b68a7cacd209695961713c3bf2c9a5c8589d935e171f775f366217e2634ddf0db5f01ab31760ebd9ed9724292bec89db06d0145fb824a76292a35f39b01a06c43510a6" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 256) #12 +depends_on:2:3 +5:exp:3:hex:"a4f1fd83e53a406163862260fb9e2ec64d4af74f5fa41ff56c07c791b6bb6abbdb203670b1849afbf0931206ad6393798ff06fba8dca3318c29d9161c0ec18ec5d7d66847b1a618bb0e4f69fa1331fd1db5d5fffdeec5a2e045c588dc95a5d5eac6d35502ebe2e6a57318f15af53e001":hex:"39dd79397f91a97432e5124e7b9b85928f62c598ecd19626070a81a5a8ed564a":hex:"985724541d44c8b865672759c8d36ded75c2189c2281731888a741b305eb4161":hex:"e2dae75950e417c18f1c3e5fbd66b1cc9fa617aa695c9d03d8768b9e197fea80":hex:"703ab1f6a5332f01fa788cf73922a9f6cf856319772eeab07b4795702562cde350a8cf9395976fd227b08134feb469ca34f675c9b6f176ad684a5b0d02b4c135a7174bf0604a1546e7d8d978ecfd8cb6ae5efce3b228dc95cb413b010732c3e7f9ef8e547a93540e5e4aaaa3b0e5a8f45b83bb11209a03883c54f41e494fcbc66c2d57c01002137567ea2f99f7a1ed6c4c6080bdaa299d18f57bb3b386278a78b2ef23a03043e850bd9fd742527c45308e5b910fc586f9f21de7022d02b1493b" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 256) #13 +depends_on:2:3 +5:exp:3:hex:"f331ebcdbc0d2dfbf54758680dd49dd0bd666d0505ef6ba1c4bbfb7dee62edc34ea9063632c8e6719bbe140c3c840aabd66e7702c384700921dc1838c6c5a832c650a474e74270c378abff021d60d1a1884939bbdc51c547c72c929c0c73ca7f78668d33fba197642be8ac2d41cefde4":hex:"ec299e456cd1985a3f1022d5c05f0ef9040cc8b8297ba5e404d92a6d36c3578f":hex:"954f464877f7258f99acbfb9adfe4eedc89da71ca82e3581fb5bad127b2069e7":hex:"515f9e746c7407196610bbae963b9bc15b1658972a30e62be6f78caee1287e88":hex:"5aa30a796d46e789c498352ade179f0cd3336418fbeafae0d10fbf7798917672288b3b2a12267fc0435d88b4e99809c1e3067f0d65c910b12a330334b6a23d6d30910d301438c2c999353e1f78019ba7b20eaf68b499ff1e88db0431312a66f35305c4f3c3a2750c95bbc07ccbdf1e4d123eec378b9be8894b597bcc029c664e59e2b3c23fd72841af0ddc9374ecef21885a0b54d13186dc0a66ed3c3caca9e41753813ae61015a952142bd4d7ebbaa3193598be1267be937745fb0de09aa70d" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-384, 256, 256) #14 +depends_on:2:3 +5:exp:3:hex:"d99ddbd82ce9937cda083e30b3da47a6e6ca08b8f59f2fc934bb3f78e748bb28cfabddb375efc5f2025a53fd073a89b0fbec391290863ad862aa56fe6d945044e879ca05c3c019313f810dd559fa0e682d6b77ff7e612c7c40cd5231eece4018c5b3c0d8181ab44703f7a04c0a1c7c5e":hex:"ebc2193d4a97b97d298f1305b2f7a54dab466f7c4e444831651cac29a6c5bd88":hex:"6826aad41f8ac29e272884cb6d21300c7b0b3ca37205e1720afaf9f716f337ec":hex:"5a7434648de82a3552e12aff800093776ca3e86565b29c0b3ad6c0bc3180623f":hex:"cfc79a89a0a55dc9c6c6eccdfab5a9935335e806b73bab7f5eff5f9fea6aa3f47bf31f06d987a94e2bc2a4a6144ebe94d6f5aa8fcaabbf86a37c8d412207864322d3057b89fef358740c5962cf9e7c37072847fcaa6db693a5238ef270e8414e2b29448bbcc37dceaa75479c2ac5fee2d6fe9ed68516f6dbd90135ddcae8a12d1c1595e0edc34ea2bf00bee7ae773c240c2bc1ed828b7ff91a676891173eec1dabeecb2184df9186c3bd833e349351481655bda91bc0f4e419fb78e426de6b39" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 0) #0 +depends_on:2 +5:exp:4:hex:"64a8afb71975256b6196f3f93038ba8b7a4d7089f7f268134cb3f5926868e4d104c60b44fbf3bc198f4bc58bf1260d123a5aaf8749136a86c4e5aba81692d587133d29d3b7a63fa6204ed84e93be6aebf50472d313ef5797d1a290a7cae086052b57e8d5a20ed22ec7702dd424d935ea":hex:"":hex:"":hex:"":hex:"4f61f6b5d46ea351dc6f8ff55bcb915d998c8e871b5e122dd95196da241c49a1170b1fc16ffa31a6dc4f0c4068ecc6e5cc0fa6966aedf72bcb19e666b191979f22580b6505c09a784e76f58d30af3abcbe840497ad88621a893ffe13af6aef0f8276f9540068943bb6bc51498a465129880df4c517f7fe70ec239c055102a78b8b0f26d36bc2634a0e61a1431850980c258326197cc80d07c3cafc49a20316a0fa2703f850b66ce274e839d6dddba4d3e744306d768b7437ec9c54ed864c7bca4ea8d0987d815e64f685e0726eb4223aa5eac1a0979fb335248ee59819c36c7c94dadf14474c7e2f10678da59f255474ea50c3ed5ccf86a399ba7f54ae96bff0" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 0) #1 +depends_on:2 +5:exp:4:hex:"e5b8dbea654b559f025c008c1f3b2eff92fe98932b0271228e3f4efa3303cd4f112660f48057fc56ed0eebacf559cdd14f523a3e948e8037427e65dd25c1eb41560f2f78dee139b3d721ba1c278c3855aeec3fd3a44a5331c8f54396ec3b9ba73c22da8ae1adc9748178d7d21341f7c9":hex:"":hex:"":hex:"":hex:"9bc5a8c111d4586131faef63689d0a7342bf601f04926f18cca7aeeb8edb129e33cae10e9e08fd44065db2aed4480b75878c6d1400d38fa2c9e836e4a6bc1d66df571ffa1dd0a073b89580005a09d1ce81492131771ec4ff987cf8a3260c9f90fb3ec07b82ab1db526b97ae856282ff7c62efeb2cedaacb75fda0b74df5e0e766a3573a829c32f53ef3b16ffb9d4cc1cfefc84e08aa1864f5d0fbe593abb26b488c90e351816e2d1073bcbb599b65b196b33dab9095bb28983172f3a61c992d44345f2947e1acd2df96ccaea3f6bc4c024a4e36868e358e5bfb9047ff11daeb34571051f0823265a15be9e4e4d64f7073bd5dc3b43ad0a4b39a5fb6bf4b154eb" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 0) #2 +depends_on:2 +5:exp:4:hex:"abe7121c768208f174ee9e545250014d031ebc647497a60e18e3462517027fea1c0e3854cfe5429bc105916e63a0d5a7585cfba737f887852f23a41039cca6e33de94901cc1aae91ac42db0ca34724b07368b1a3ab733dad24aee03bab50eaaf2acf15c2c700e5e070097132a92ae7bd":hex:"":hex:"":hex:"":hex:"7e082cce6774a3d21ff39db1ef9ed0251a6434462afd29fb8e05458b9ca7bd181a9e362ab4986c19fa1aa9bb1d00f1c3479b2b4be1512b2b5eb94b9ec0493266b6efce73d02d6acc653db9e4c194c7d169781aa78de7839e010adc7fd58efc988a5eec2feb89f2d0dc45ac6a7d4bedf11bc1294b4f312c723acbd664f28f85f676f3feb7d2d2db14b0acca2ac6d83d2877319cedbf816378365dc51368e1686f2e3cb0bd670c125cf484cca7d28cba04a25479dcfc3f80910422a583c35553ac7dd6d5a43c6cec465dd6c7ec33712c9f2289206b0f1e620ed23a335a95a1392d143fceffbc2f43a18c3426de0f2f1716f7234bdc880f61e3a1c1c2c57fe29336" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 0) #3 +depends_on:2 +5:exp:4:hex:"07e570fa7cf079e066c5c30b6d24fd37906ab7aa07b1551be605b31f86dbc3cb3e95a0723e9344922d14185824c483bc5dc8341f10d698629736838fad6a190825a24482413b388265fb20b2a8e7c078b91090c97db01e6c6a72d1c067bedd73da1d7b1575b05870b8eee4343bc42213":hex:"":hex:"":hex:"":hex:"3cf6099489d2eaa6bc427cae2bbb4a1b121041bce2a4f8e747a3b4217910905156189420fa8b9698a8a316c537229a42509be9e75f7dbd5241de932475114fc9232c3325ee8d921aaa680078493856c2d0b14e6593bc3f36e0615143fc336054442e196dd152f53634a2fa3e74417aa2dfecf4367cbc1584cafcf583cbddf1283b73b35f9d1f1ecdb7104b80b838f2c1464ede50bca05e960efc6b62f5546a0d02e3420cb857050b49cb1e3b4ff8a936ae4aa7b1d774089c641d96a732164ee5b0cf77f2f729303c53de66e9d1b6f5eabde7fdd55bb7030671a274e3f7a41047d84f307dc1996d6efb671df8a01ca6ffef81950beab98a3e480cdda5241b6d69" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 0) #4 +depends_on:2 +5:exp:4:hex:"99fa882ea5aa55ec9682719721a8e79d6afeec5cbb3577f1df7fe97e4edc479040efa1e51f8893210c302f2a2a3abbac2ddb3fa31758c8473a6f7c50d98e423ccf360a2f6a5d94f7ec6af04f656ad06d20e2be7e09f728b64f81d736ac3fb8263b0f7808abd5d7b0bbae1d4b3f445957":hex:"":hex:"":hex:"":hex:"5807f478399eb17159b096f7be7788769cf56beea8cf4604400f77b1035ce0b3c5d9afc256850445397d5c75d087de12f10889649d4e749ca891f30bc397b58a9b3c6321a08b89845e186e9a697377aebe36486886f74ac3bc353f033d458ba5d94634b162086b4b74563860f1f079be32789f8bfdd561e486839996db8e1de25583e2e64be914329bdbb0a42a13d668e47e4ff635d01a1daaaa29ae8459752d04b7c8ff5340fc8c97293f2b7b91c2c8e3f0519878c82a61a32687f693a64c3c1a222b664b83570ebedd96e8722ba6125f04a8ebb079597394de9de36ca42d828f90c7a5fc74d1ab03be73f7c5ffd332b90517aa6ef8c19aefed182de688cf5f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 0) #5 +depends_on:2 +5:exp:4:hex:"75336fb0006f7aad995ae01b3f3ec24cef46d3f7ad07798e52f609ec34b266f1cb51865817281103b3be2c2bece85487e979f3a31ba75d6e6e4b357811b4aaf5fc958406721693eeec21e8c9808ceefbd17a0a6d5664162e7b988c19dbc911b6e3b68e90a1e6a3c9c5a4662d954ef5c5":hex:"":hex:"":hex:"":hex:"7e13788c362ebb6e6ae794ec50d39c2cf2bd25d8769ee91df5d210b3bae5021801e0d59ee503ea177dc01b3c606daf67a2fc8afa9f06b2d03759e2191d6dd0e916b5d21125322bbe9802259366a43d64f94c5408e62709d806970a83dffc4d78ff86dbcc7540f34dbf026dd308ee28971ee5e88681b342d15dbbbaff92a51e4b40e4c50e0b1e48d153d5d6e950de8a37326ddaf504382e20ffa85bcc91fb3f7f56130ad67250c7a9f1ee5f76cb265d567d448c50eec4f35c222331bf2dba2b00cc660e7015fc1e6a7161a01ccce02b5800cc1516c330e76f33789fb47ee8e13870ed588d145c016c3f73c6b64892b4faa7dea4fe536c5349fdd171019442680c" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 0) #6 +depends_on:2 +5:exp:4:hex:"f6d7401663547661563e5b2da208f1f8a4a0c17b97ddf0d4a4c1a17c23ee8c7d00d037839f2d95dde6a96886cd67c9a92fb7fbf77ca088d1e46f2dc386e16fb6f1d178f7c1a3dfe202f05d52ca20fe29b8084a9d597fd6b0e53f41a13fcefbb8aa5d539c7b09d8e7b8f687b3df92c606":hex:"":hex:"":hex:"":hex:"4fe6aabcc40e158316e49160ac523c41d4df8cb041e11549dec0a40cc854fe4b160fe38a1cc22b779789ef07012735f457fcd2a5594b344783cf6661d83b046cc403b1feb96cf81b05038dfdb40d2a027ea4ba93caf77f53fdcabc361ce48abba784fd9feb722c477cb9d9651d9db6d088e097a93e1dbaa2c3db1503d65680bd4b47352b04387f9c15a1c3a434e93ecc39647dad810ed96997f107e5131101ce20d4be82cc67d05309373792e15e2974aaa9aa9bc9e681815e07111f1f980fc8ca882478c32fcc3765b8e422a5369dbf36f72390ac8d3b728b8e5deb3d48e9ea85a31a0432b813471e6b02e4a12ed1aee0ab9dbb3c3e66217c45a174f9b4ed3e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 0) #7 +depends_on:2 +5:exp:4:hex:"98bd225cfaa81e2111f83b4b3b2dfdf3507fe18aa97100062bcb5a1f665c091002fba3d84e3886048f67bc7f06750a19a65503d83a48045cd9b128c56c3e474b7d658fc590348bd9c14013fd20d2df32dbe9f9b73d47e43e58a6ecb5f85f93b3546817134746016f6886f6b63be830e1":hex:"":hex:"":hex:"":hex:"05cddb6391c5c2de3db999426f31238b5d3e14a35623272d6a72c73947b3521017cef377415dcdf09ededc0d34d9880b9c44f28099f270844e58f9a97f7388df83717ad48972036968e63f281fc0abe53135867cace0e427ccab04e0dfa8108d87a0b7cf7be14ab50e59e4aec8d367f54805c534a9ffa2f3686712caaead514caa30b1ca06c668b5f271ad8fd84909ef122d2fabde7b524d42b925a068d0bb265cbd7c6505a4c2c0bff7d47068b76f350fc85c745d099c78bc73f9ea0796381903e0d3512283b7fad05850e1bdf63b9cd52eebfed270f1622f057f102d6ab19c63ed59cf2cc1e5876257ab03e20e62f3a77761da32a5e1c2f8c95bcc7534ee00" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 0) #8 +depends_on:2 +5:exp:4:hex:"7a324a646b53f28808f7c44303221ab36324d1c97660f7c333b3baa7537d1e1ea038b8ca6c159d91d02f3b206eb927570aac85674b59f419af2660cca8eb0ef996bac65dc33c08a946fb2abb9348dd7ebce4c71cb9de11b8d59aceaee2c9a29b154633df643f3787c2672ea7e789a2b6":hex:"":hex:"":hex:"":hex:"3c09f50bdc35e0ee8bc033da716f68fb71a68a339e26711e63f564723a70a0b9b4b01ae5422c8ce7cea7be0b35f6bbcbea110afc9c448d85e7a87d43c54ce117dba86d4b95a754c77a4c8ef5fbc11c2525173aef82f11f482611c426887643da6daf51bb3bc462bd5efc68b4b5e7e07c7cd991a2fd8672a8a5d8490a451d8df92057df0bbb8a6063489b84bbb0a75813ffcd498b146f11c5f16580dffd38812e305caf60d133679c2b8c9564aba044ae0192a9a5789c99cf5ec40a3c775d5976391d6adf9e4c77ecb0a8f3169bb3cb7e5f2112e18c44fb7505e7d5c4e6c0f425e8e552f75a340923a3186e49d7df1a3dca3df907115c075d39844548dcbc7655" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 0) #9 +depends_on:2 +5:exp:4:hex:"59b84cf5a29b45a3f8e0ac384bed20d970f2b6d89661bbe2af90ef073eb061cbf323a13d0643dcdba902df168ded7b6094e18381181d91d3734cfb4e44cd4462de81aae064a9ae9d156bbb14079b78e2f612c2e0965d15b2563d888e2034d06e55f939ac2345c2638443f83b59152696":hex:"":hex:"":hex:"":hex:"88ceb600d0c319c5f22e4e91c5a1319fbc752ae314868f1fbc6a4d1c0aa4b5c7054d64924f841d06392294866ce399d9fa2475a4f53f42853b68f9851db002655dc96cc799fd6ee1d4498f005e25f76efb4c0478957de4b26deb3102c602fa08179c8ef26ee29e9c9e896c122e02650dcaf622fff729825aa87026ed8dfa96e9fb1510d9be44123dca5b9521ef9500f6e3832a7897a5e513e971f18726d32848a6452ff7347d5d8df6d401eca2b83c71a1d806a5374bf6e6a98013beecdeeba9b637f23808ebd39fc726061ad3ce44b02f73b2e6e7c558b74bd4a085c445100c627f2b71c54e5a43b7d36c131274c04a0941fd8cb584dff445037f622f4d69c5" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 0) #10 +depends_on:2 +5:exp:4:hex:"64688640a1d3f610528eabe2948e2eab2b453a8cbbccf58bb02a72b1bb466b8277f2c2f829fec66872cc8d6c03280b5074136e7f3e123d6fb72786fc29d1b55782b7283285cb53c4185801d2d7333b8ce76c1c661c1ef65864b8dddce781f5db520c666fe07fcbe4bd5ccacc115fbbdb":hex:"":hex:"":hex:"":hex:"a7dea45bfca9c6fe4ce5650369eee402b747034ce93272ffc44eb715e49e6fff83ce884956ed4eac3c76b5e664403040cce0d5343916a93bbc16933fb451432f14891473c93be2e17813f8119f579bf7207348020b2aeb7cf725a186db21fa9c16c27d63ae28b5d5299f163ce8d28739a1d583579a1c462f0f73ab2b6b0eba5b493c2dbc7d9d6e0819d80868a6b001971e8c205cc3b472ab62cbed1e3a1a0c0a6f95c5694f513654d7a240bb6672eabb745bc60024cdfcd8179fd3d5300b878ec93df4da38e00fd66809bcd8f9be8384cb16aead77de833e90c034ce24b18b096a84bf0281e0462e9e3a43497514b8eb283edde2108d425839aadc9e68ea4728" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 0) #11 +depends_on:2 +5:exp:4:hex:"d77985d85e130fa02ee13b55cc7372c23565a56f588c70154b7d81dbfb8ef66ee861c781fa258019ef91d101367726ca46a60c705e0e3a305ab6a7c5179e6a14c6e7de93e5c95956660ba7357003f08a25a42e9bfc38fc882a063586285eebead74a78296c7c3e8112062d7fe1adb232":hex:"":hex:"":hex:"":hex:"94307b991cc83f919caee64c25db23bd3f456585b6edbd6c8256cbd9d12b8430d0f3be857d42f1437228be13ad5013e4539bef591a818c5efc7644da270857f61373008c614a06a6fd5fb5895f08d5ac4c84b5060498af63459629ad038d2f436cb5efbf258f9d2f1e491ec6d0bc0450c092939b56a489a89649c1ea700fadfcd9c36b8854320013de6c569234f8ca0ab171b25ae93048fe77e72a0730f6b3edc2fe103c82b78698c497db534000db2410c7945cb36da5a451834abd5035b0d4a6938116eb46014368aab7582352e2788691ade1dd337d7610cbc327f3664415c870a022f75d290c83d917c212ae517339d596c3a1cc4a1cc83cc7a1bd94d6b7" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 0) #12 +depends_on:2 +5:exp:4:hex:"ad321095c835f2c49f3abdd0f9117cf8ea30b237dc3f1eff7728fa9b08d4c0fc073c82bfae1b5771728917ae78d5e22f4989019b13c5f04a420f134d1cfcf1be81408a143e1372a468c1303292f717daf4f18ccdcb81d8c7ac6562deb4e07a9e146900123f39ef49a91e30e22cdca22c":hex:"":hex:"":hex:"":hex:"be680715dc989f5f1c459695603b2b97644dfe17f305beadf7cd3ff23a523aa61f3074f5c533cf8e88ce74888f95cc5e463de4ccec3aea10498efc0c335692fa648a1d7eb774037b993f7622a43f9fc4c75ef3d1a473c18216746dc7341dc9d78e7431291467af9a8c95d86ff407335226601541da1fc1220b5385d18833f792ee13f11641e2efb56237ae9b7ab9c1a87aa03a442f06cd7a18d8518a029e36e85369c2b52e351d3b435579938a05fee87c44496c4ff044f267f31e6d80f149d54cbbef4cfe5f249a6724c53f0a2082865eec01cb78ddb07667b40ec7391ca77fb48247b31b6dbc15fdefabaa6cc97d0bf8ebd34ef75cc48d5ac47899c89800e1" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 0) #13 +depends_on:2 +5:exp:4:hex:"67569721ff02c3862cefa68283ecb5b9afbfeb8395ae944c55e5da1b21b6c2270f0100b2cf014cef7a2e85dbf2738e97f8ee97eca692130d6541fa900eeef6b9858497faa2cd47c6874590190da6d5fbd36d2a1e124a94311c8508b9f70f34b97c32df3947aa4a0bf197b1ab35172233":hex:"":hex:"":hex:"":hex:"8543aa086777415188ef995fd4bf5ce52776c6574b7b769aa61d1e83a4c3ac4483bf90b492341443d6c92e14fe7114558d1855826e41772eefd54352a38da94293e317e0a05345a567e30e2299aeddc4980b3e797b7c980b822ff625db3ffed1f0acc314c11e2b62972750b0f448cbeeb08b7dcff21761b17fb63fd1655efadbdd6793e27c47588638c03348ad0fbc8b7772b7f7882b66b9cf4947c93443f793de5c2a4131dcbfe982ed2787a5cb0d99ae001707d12cadf5059eb4f373e7b5e4a99a28ff18841f9edaed7558ac0d062589cb3ccecaad4d9d6dc1a7dbcb35aef7a1738c6c66ba04e08f693d28f7499f57bd8b02d97eb3fb36d8bd767eeee07096" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 0) #14 +depends_on:2 +5:exp:4:hex:"b19d6916dd39eab11165ff2066fea53f72488a78eba473a0e141de1d5b13fecd79e678b4b108c65f9c38fb2a2e5c29c4ea9dd450593b6b3c7be76ed2cf8baa1b44794ebef1c1105a445b79aafe471d9f9881be7e81282bec46431b505ca8bc5049da52cd4cb075cc818bb79697b739e0":hex:"":hex:"":hex:"":hex:"abf29caa9bcae107ac382204baa2f46ca2742090a3c895e41b345a6cda8660e44000984173f57e79cc7ab869d8d9f7f2d855b171c3007ff9c82f2a5291d509b6584f04346361de9aa373f587b6ce8cc43d589d876c95e813890c26ceae61bbe0b88072cacd0b857d6b33ad9e562c8e1aa1592ff16cf683e81142caf493896fdb325eef5ab6ef3238cc3eb3baea05825e57533ad8cb707b373d2d0a2c048a07bb40a5a68d14d21a796fa97db06331b480bdc39701bf2298fd3405a42f5f6b76b9f40dc8671db632c588ba89210767bc165ce88accc78424216e357cef52a31e7601d3f1cce1b5b5d71c3d622c9f68092f66787b32d241716996b2392376c48909" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 256) #0 +depends_on:2 +5:exp:4:hex:"73afadfdf46ac9c528059ec5e4f940f120c19beda8d5b12ae692c1d3b12526754ce532c291c8ce823aeaf923b3be8c438d8b2a82162bce020237440d3445d4ef91793b983202b0f8532be2d78c34469d2c67fea05495feec67b76615967efa6f6bcde5bcf18285dd3d8f9b97b3463813":hex:"":hex:"7172619bf78c088c4f0d5b358f63cbcc019620c6ea9ffa31e040ec0d51665989":hex:"a0670a6df2033cb19b082a3c83fd2eecddd9b9caebf3aed0b781ae9d4ac8bbe2":hex:"38ebc242f240569f792379afe393a76698fd07dc05d5c86d00791c1b9d1d79f180c4360fc8f2e5332a961198d7486750671e14d39a2b4852aede2ae9745484ca05d7421191571d334cd714b9433ba026a058cab5619208f2e54f2d48286e49bd0b528d05785beb4ff8953fe875cd2c92277494f2e315ab2790a1cd58f02224387470bd7edb3181d2b587e5c319a262c7806f8b75e59f2857871d8a182ba0366cd3a968023c22582ec7bad2a204de0eba3d24566f213c1d88ca2b2ca8cafd8149193949da885bd744323f31b39956fdea7bccb1d64d3f14afd03e1755962d9df1f2507098455584358e951f7ff8619f1aab96e1481ede5289224053f603a98ae6" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 256) #1 +depends_on:2 +5:exp:4:hex:"cd453c328ae68152e074e18b660f03668cf264eaa4109afb941816f7bf1f73cd4043d4692942472482f44e7d6ba5486dbeea1cf1de6ba6ea1606cac41a92e34839fb26b5a9bee5f4f475558a5d8f673d838247ab81aaeeb2a72be405c3d24a625df7476b1133b56f6e7aeb184f73eafb":hex:"":hex:"c6c23cddded140a30079f35cf9e2dda6bb2b277d8a212d2fca1a83b507808e79":hex:"edb8c8657883a17093ffd355e8145e26f65ce7071ba38c89fc031040996a9705":hex:"635a7dbb7ff1dc4a90ce91ba13d79e09819ec7387c277c91946b59fad4bf5d606fa75cf03b6904c60f9a70697e662aeeebc7ba2e6e94632c4c5f3e1686e6e9497945c8889243719ad066847dc11efac141e58ac29d6d2779f702cd1d5fd0d82d232a004dfdc13c09147a77d71774761ab4e760a9d2714e9ffc52402633c8c3020b7b9822b177976f21b7e98cccea4a7eebe1cf9a604bdfa36f19e44cf4308172258576c3615cc26418e86a7269e0f88af7f15a114c5b8c6f96b8be098572aec4129fac371736b2fa0a88f1b5480c7c8657dd515417edbcd902b3d3e9f7e10df45160a37284933dac5fb105da145ff13f677d99c494e279b0b1990234fb8ed9d3" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 256) #2 +depends_on:2 +5:exp:4:hex:"3c4fed3a265818f6a323b9d52c04a92698223f3136c77428b29e1cd6fddc7e4da48d9115c5ad18a4182df480eddd529f35e2bd1908dfd05964cc3fefe53c38615f04ca5e12c06872a695971f9144f6b97bd32c620083a379d4f56e820105c5f5b0f98539936d05d57f6afdc191cce7f4":hex:"":hex:"7271afbed1b1f2be5643c5bdf0b6218247a6128bfbe2ff4d745a926a3f35d0fe":hex:"00022d8acec09266a84673d056e7b235f0608d15989ddfd7059647522cf3c3e4":hex:"610901399f45ef5a1b747c57b73706509f569e3a2dc84c6603f403cd49e99e288c9ab77d00e974eea625435dd126e9e783566a71396b1bf6364b36305d1986157eb59fd231b6aae35190347e1560f91bb388823504e563cd69f84535559a446ef83ae625cbd1c5a4d114ff394d407f19c8f9f906290dcd03a7b47091ad07f3b190b83de5787dff47cc54a3d53dd31f756eb5de9f7c965d70176a8ee71fe869e960ad33cc492e9568e5748f9ca869ff143252f4c9ec8a0bf937f138f7ad268abeed27e1d80bed0cb7b74411989b313043b1c65c8847cc3dd6d48509852d33903253ceb074dbc3d124749d8a8e41d27f96f7fbc9908d4ecbf04f60187f1a42c33c" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 256) #3 +depends_on:2 +5:exp:4:hex:"229b3318cb25189e12ce9ef25acd08bf56c631c6058daae6f377d58f7574576a4c0b7c634e11da5ccc02be824e6effb8ebc0d5403d79bb30572be47a5ef88fe35a0421dcf9547437cd3a563b6be7a158a7f601f75347509a12dba8d7f2abc7afdf89c43fc5538318654fbc90c3f51c5a":hex:"":hex:"f8f98c65ba1f619d376d41d1dd480d4a0446de56e0b3dd007ef7e1cc2bb98def":hex:"b3bed7c4c2e1a762209b1fd2ce9ddda8fe47eb70225e60d5c5887a61bdef0009":hex:"2467978b293afe33a96a7291286eeae2b1c8b5753ed4d45b3d5be906cf30a6051095cbca79d2871334e049b729068924a036ea914a5244fc71005385ed6ad7c7cdaabc267a8ef0074b14189763b5de2115d30da70eb815262aa511e9859b9d1cf2810c910bce18d179a0308fed6f6f911cde79031ead39f499ef85f7525140f1c497fabd879ae130f73fbbfe8c3fa749df48e484cc2fc313d234b5d0b49690988421611206059b42f6d72b0e5fde6bc11291b8533a9aa2c521e54749bc1929b71ff05dfc8f1716c9fb13cdad16b35d194a48ae377625300df479d3facd20c3b8fdf18b88b57753065e542f147248064278611e99ab92b33c68aabc4da08a49bf" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 256) #4 +depends_on:2 +5:exp:4:hex:"4cfbfda3fe8ae7ffdd8450a52c78388a6c9d93c6e3ab537c91dffe23b5693158b7919e875d9ed6827a33d5ec5bdcf061c311aee36953d13c16f0e50f455705a9ab7a436b039551187a0f42e5f90b40cbd44e98cd5295550cc46e33be6f073a9e6c02ace6b0f896f9ec56ab7e8be7a07b":hex:"":hex:"9d155d6754ddcebaa3dd28ba27946ce3e22de29dc1db8359378390295e5aa287":hex:"ec634fc86bfb45f49a1197a70875d7addeb257f1245375aa1f01b3bc359ed73b":hex:"46f5a6402ea9e8a008925c8f5540c4366c599166baae8ac762da101550352f35ed9d34f82e7e2ce042cd3569be557e02aa87163d1e453904c5fcc998fa64c8e18fde61a8e54c21ad4da060943aa79de14317276414e71a8c132053c4dd35da0da1fbf7f0cffd264d887c8ae4f358afe7e8a1bec60fe7b4696a6b1c00fbb46012937b715ba8eb173e09c1316cc361819b24f7284f983b6824c39eddf3d0ba58e82a2c603d854cadc41d5b12af0a67b367f411c5c91820e414e30b3d2cfde6876a3d144a900eb2dcfcb750bdcf09c0a01db79aabf53e7f045b9c824c8662283bd4376c7179096c5c9c784d6c3b998c4d11b7ebc01a4a562852b9b82bd313fae0aa" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 256) #5 +depends_on:2 +5:exp:4:hex:"3351a083c1f6033be5cc879eaf34e25542ebabb2671b65f726e76ed711ae073e9bd7ef6d7888d6fc31e51dc7f60e8b07cc6fe94ea0f22cea1ad54ffad09700596f6320d980488ad48527f4e00937b6f736ebf1b9166e20c5b812c8b85a2a29d91ebb021b19d2374ed4e2895d1518e6cf":hex:"":hex:"9497a1c85796846de8d8b70d66d369ef59bd91203660d6df2935000e8bfcfe71":hex:"8a681d6cbe1cda5e0f9eeaed12fdac75b7bb33d28d6855d498b6c61cd7ebca57":hex:"5148fcd7c01eed1da1d8f68a706268b5028e4f3435ac5bcef9231cc81c6b6823156ff7432e51651d0d02d92e22297dfd12a9d507dd3137ca8ef216f969ab67f54c8d5fd5c22c9154b6caba4a147ce4aa20647e2bcdacb727cb0810e4106494db0e25e7e6f939d29129b0c5cf47adb35629006e6f5c7c1946c1e647d9aecac7fcc488a1c868378e014fc68afb684e1e043f53fda4431ff031107cc23833975bdac060783f9cdbe96ca164ed75c3280ff355e25e165eb36cdd4d651cdbec053a38b6406c26ab6f16cd0ffe1e8e5a017e25c5c93fc7ba11385164337d54123ba03e65c261e8379f2ab24aa0d27f57b9d7e0fa825f06986a4fb9b9973adb87914cc6" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 256) #6 +depends_on:2 +5:exp:4:hex:"3439b57a2d19db8b7e10ff9a34ac1d29b8d789b05f4cd2bcb0376c6e184cfdc695c6e26a0b15b11a685438f48dbd7433d63119fffb5e317d97a5b3e23fa6228221caadd163b66e36e41d1df89473ad3a114d25c8093128e2219a7f2206621b99ebe673bbcaa9a369aad3339927773b57":hex:"":hex:"dd1602f833057b77a8c763ec5aa302326920bc2dda46b4b83b3600673c1f4627":hex:"e2328a109a4546f4311bbe3decb53b3a1028984ae73ef8849bf682ec29c9b5af":hex:"e02326b477271366128cff2c88b703814c52547936ba90e776e383620eaa6f2a0aae1cbc6bf9fe8c395c088edf27ed3a3ee6f242dd6a6c3deeb19fbd7ab3e7d26b8c6f42f86803b885c733aafbd1c59e77e43277e244c0e9afb0629af510d03f6eb547bb0d455163d14beca53afb4e756b82ab5610502c1d74406222142f1cc1a41b4188d7994397a7ee7195482f22cfd997a611816e331cc62387c8d28177ea6727fc773c16278194b419f7e99fff2593bb0e6644ad653b63de83b244fcf531eb6db5716e60dc260510920754504146e4c727aa29b5659aa97a3ec63d07f9387277d487e4b855a6ec053289af6e17284a6deaefbd526dc3a379e5ef4434c698" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 256) #7 +depends_on:2 +5:exp:4:hex:"f7c4995379079e036b9b10db6f163db23bce7399fa8b6268099fa5f2795b67ef06ec674197c73fe47eaf0c4986dd3566055eb14934bc8d5272baa751267c1dab1d52da6204ace6c869bef56eac006abe8eed565693e1854619266d400cd3f70222b6c671120173fe918d229d5e566886":hex:"":hex:"23ec7d6ba9a666ab49df45eeac006ad1f4f0e2aa4da2061d0429b510ea43d93d":hex:"299253ffb0481d2a1dc2ccfa666123a3bda652666a77b52a32e4cf92a65f0d61":hex:"4e4573833f4ee5dcfc4fb057e3ff8a7cd621b1c7a51fa4db8d02e6b62462ea9ab62414cfc3262569192a5960f8c3ab164ef2974ee03815281159ee50272730881d997a28ea2f9bbb2d7f2eea719416b80c73598e524f5fd9b41d17f386a30c194e2788278a61fe3f5633395e28a8f142e897d3b6cf34c00fc84a4407e0816518b218eb08a9d161981c84bfd3e47f3ba36f54587d62060e0fca65324a332a9aba7cc1d0e842bdbcc8b1bc57432f9d70e6475959da2fff2590438bd7b4faf19ebbaab175655189050781b7c7a27e9867073e1efe45b47ba3f86414229f5d2cc08a1d801f731c3099b747c68c1e6ca863a82265d3b2819cb0d2d4e80078ee7584e5" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 256) #8 +depends_on:2 +5:exp:4:hex:"376829aa929aa4fcad37b41f3a23bec28386329ca689317c49bdc2beccd5066b92e763dbe8a80fa1a1d21c38130fd999df05446bbf128bf23834d8c7cf89ceb5ee6b21124eb6d4966f0f5cdfa59ef58592dd2deda2f611b6c1ac8ea1b1dfb3a51dc5760c3a7e82fee6f09cc2b7a74d7a":hex:"":hex:"f14c07e0ca886373c563ca544c3ed069de697c538afaf009bbfbd935995955f6":hex:"4d71578fb5a3211d3bdda82396507fe5193d21a2f70e6c2b03828fff53f5f6a4":hex:"f6df98f9c4f7dc64208aa5804be843ae9a989bab73f6a36b603d1549ba0a58cb6511bf5776a786141e48305856b1db6f641975d0cb5102b51b539496438cf4cb905738c919e1b06092f1af89382fcab4e365688adddf02fc7ff640e111d5f3bb2c06da91a77242e1055c0b56f17abe0807b18f6a93f613899d37762bab607c05467dc89e58b21ac50bc01fa52d1e649bf74841b9643adb4699ec6ec0bb4d297c138fcec1f4249b9f9ab60c2743ab18ea5e202114260edff93f4148ca772f94572398bb387b78ccf50d6200f7369bdec44ba6403ae363f3b710d464b6f9389359030b61b2b6261addf488483e0c5e4cf854d9b601a1b1aada803af8feeca913df" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 256) #9 +depends_on:2 +5:exp:4:hex:"981da820fa53e7184a1a214a114a943953eedb39e5bf2c3aa7028aafe57e482bf4c0dbdf862d55afbd0f0a97f6c61204711b46a8f5d1a69089add789f39cc3d6dc7fd19af6a630f03b1496d84aa83f1eb24c0d354407fa9664ee5f4c8de4ea75f05a17621aa9dc58ef38cdb9184d24b1":hex:"":hex:"2f4d6b4724cb715b0d553ae1ca6f3055d7c398c1c031a3a69946f099116d13f6":hex:"76c1d679786f1752bcde1108b9977311f4af9e3d5f5fb9eb52565d0eff90b4f0":hex:"a5b531a51e8118f33b20edc76adcc36fb0ba8e7f752518b84ce712479ce749ea893fd31368b10dd6832f9f2bdbae488dd9668a80c8091dde61e58336a8160fd7a167aae7a1d0f0af077f600b5ea21e64847901ba658fe40f20083907b25b30cad314cbd3f194f8be407359b94be74b34e2b4e2ce7371c12c28c7c7bf0032c03371a6247b60a113d56cf938d1e4eef85785fea90ed45a1b50fa40228fb23f154175fb0d436ad726306659e2e9b6a816e9f0716781a774b2c3386812e872fea9192fd9fe148bfd7a987f74d1c7e7b60a00bde3e4ab53d3fba5df0e2cb7a3cc6bd462e43b93871b3e238634174322a88078cf386fb210aa4df2c69ced8a4f72b2d1" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 256) #10 +depends_on:2 +5:exp:4:hex:"909f30f7186bfbae0615a701e3fc362fc6e8ce42162cd16fed11ecff70760d7d0679e0b79fec33f83bd722f2bca339e791e5db7af16fa629c84d1f4778d1b1dc24c9813711507349c26319e18084755cc392c9c2f2241406ebef3985a4ccb46b2d7c5f8b79321163bdfc3b5e21eadc89":hex:"":hex:"1fcffb9b047f2e904899eb6aa815b2eb51ed696db2478118c4225b7b308ce069":hex:"becf0c41d3930f152260e0e6f06355bd0c1701b81e699fff7d8e5a750d57b980":hex:"405cb18185e295e35bb8f758b0392d8e323555529b84e1dd0823586dc35f25e27c5a26da87ca57b1544d04b94cca967df7d7d89e00d3c919960e486e6f4cec6eac1951064efb3311e4be348558bb693438753460c65ace14479fcc44915dc6b223900fc84add04c48c57b2e9aa13c69a2cf2b0bdd2b2cc70c49a32e5fa0606fb1523b1da894dd7f6973050471a726fab3ba99de3033ea5a0c21e687a5ec9d66ca8460d74e5b1b99143ddfd4af6d95f6683b103133caae77649f00652f1e78295134ee42cf35bceb7d52f6cacb41effbb2ed661d8f89bab51a90c70862ee5fd5d3c6060ba0b5a5897f796f4107efb08e5d82501692401732abf5237e0585c9483" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 256) #11 +depends_on:2 +5:exp:4:hex:"9586ebe27de089218433143fadc74eec6ef7c8d077536f7ecb62d412ef0e163437f6d84e8bc6e97ec02097815a99c338c8f3434b286ef26b1c234ebf1bb1d216b14b4c3b3df48ac3283b3ec9e50c9124a717eb398941ec0801f95ba6108bd9f89d9fbd72d6248ae50961354280d92df3":hex:"":hex:"65d08da7a1fc390f2400efb57520e16da932bbd328a236163c40a540de585488":hex:"a1ffc217e71d1f1047a9657d61ffad559da3ebb75d5af74f3a1ca9fc5b964f76":hex:"0e2958169b413044917124f867d8fd4b865587505d4a18040012319dbd472688bd90a28706c56bd1549271b1237a5cbff1844b8e1947ab97d0b1d33bec5ea32ba3bbb5b0986d95b8aebfeaa80b0a132ccefe9013cee4fe84597cd2c3deec46e5c4419ce2060433cfb696e34c6f3d6298f501a56dfd85ab8a9ae8163e5d09c707cd69a3db0a1ef4a1cbd9a75396f7face5eae9d63875898107e3043cdff7f6a7fed48362792b7a43771f06d97085525f5f38aaf38d5b668dbf84276c258029cea7435aa107334e69ecd50ddddfc8cf592373fdd7cc28eb73e9fd2d2d541d0d88f9fa1bb62ede17667f4c32cc9ae2038fb7763b922c34d70d5805d3896bf8319cd" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 256) #12 +depends_on:2 +5:exp:4:hex:"90b824b7aa16b4954d99c3fded669a83d67460ca2fa861468f0ff6e8ef61aac7eff878ac34c2bc59a14dac9659cb558b11989f8e34d1f27c68ccd71f45f7a848c94ced0b18c175c7e1eb50fe0204cf630e39ba3deddeae5de4f2c3d254d6d9a747f486e20106f5a6d7b05a67fe474e57":hex:"":hex:"a76ba2ac232a282b3829d9442587fcff4693350232e976439b5b9dcbc1b704c9":hex:"06eada44600f5d5eeac046e16cf576d59c1bbe6c608d7684453f353a644cd031":hex:"c6d51f9aa217655be89a7b85241dac0cf4f59d983303c3c5e7c279cedf298072fa1cd70a2180c3b3a58f553d6d7dfdd01f995401993ed6f2cc3778f780262f93755c9f8d54d94e702dd6df82a737d57cb5784f035e7b2983e6253d0b2c26e4dc7182d5d06628bf7ff8be110f28b274bf2b9cdbc14d16fa1c9f2fa020b0470bb7744d04332c23bb198d2d7f98f15fdab1ae8bf310dc3b90d132d722ab183f806cdb324c503898f91d9ce12f8dd1942867b1a169089cf24f1508079db6184ab4fbc80292c439f7fc2230c22bcf022aa8ef29f23fd3cb8eff8fd9f033b5620d5845d4ec5d0c8f5d4f7d02dcd2e9feb143fa62885bf140aacc7a3160508ebae8183b" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 256) #13 +depends_on:2 +5:exp:4:hex:"0ad0edb50bccfc0fb68b5e7b5edf8ca338e5457cfe44af3fb5d683db120c6a09b9907dccf135c5cd0a97200abe245e144fa70365cdb06dddd7b59a557831ec9c3ac14b3de791421cbaacc609bb7659c4e178a7158d7651369655f9c570674fee2c5aed961f3c6baa0a092363b388add5":hex:"":hex:"f9880c0023486c8c8dcac2b40100a6e2bd78b9289e20a72f4cbf46fc156619f6":hex:"f5bf191309d298ce4a39daa668d8c99935df9ae31f5bd1fbe77a3682858d5c0c":hex:"febefa9a23eb4f236d1321d9abedbe0bda5de6fb8ae4259512dbe3f4df7e006e571d8b55db6a438de63917a2e476435ede5af77630241e7a213005f205d3857348b8282e790972e4a5983009e052cbc6bfd00c08306d346c351f32a7c01e5142cc65d5e951fd9186a098f6f22a5e4d5abd80982d1da86c39b1529e36d2341e18859518a425cbc198e9dba895591a1ae395b148f033e1375903fdcb478e8438e0622544d6cd990e5a4633698dee50a623a2b7d8596ccd647db9be1c2e6f383e5316081f2c076dcc98483279e87594ddca5ec4ef4f9f52439571f671087bba02708af107b771cf59bdd38f4f5b6c36aae8112f85a9b2828e048988bcec68098660" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 0, 256) #14 +depends_on:2 +5:exp:4:hex:"0425754d1610c14f6be928608ea3ce731ae818b200c54341aeb178f69e145fc6bd38473928da0d3638b0625d06f6b94fa009d920238b591c97ef48bdac9021fd85f19ce809a9627183e3b621036fd7e3bfe1dcf51b07ad45ea924e2d933f15c1172432b359ad72149e51e86e56ba7768":hex:"":hex:"f746e854338d81d89e81ba3655eac565866b56b2faccdc50a36156fe2faa661b":hex:"06e81c2ff61b7c7e51f5238babc38887bc10d5fecd86b7a6d7c48baf4aa5adcf":hex:"cf9bdaaa8be06039de98833ca92947aee84ab5a43b71a90855b2bcde9b6e69255a5a5e24c1bc8ade2b6338babac8fc0b90674bb700080951425ce67c51636f35025171f584f62ca49933f11883c9fec666305d88ad2d359ac2e0f2472e368332da2f5a15f857c8e8bc7b4897f7e12187ad9395a47a9f271541537ae1bb217f88f9b689933e5c6fcbbc2c39f5924862a4a68e068d06a485f2d80583eb6606f177f9ca7618e0ec018596e0b98376c95fc159fd68aff1a0ef3514529d4a717b8efb7b4764d11c0619ffb0b20106a5a541cfd4e68c002b99bae85f0e99627c91b3dc7f27c2415f7ceed21c542af170bb1398338041c181da40dc95bb0deec6decb48" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 0) #0 +depends_on:2 +5:exp:4:hex:"d7d2a9a0b97f4564e05de6db7bf170d2a726e0f5eb2970839c4a0c686ef372faaa5d8afc07d7e9a44904fe9f7359d8b6205c7ce06021f5dd60656247503694960c78aa5e3b3f5008d48c6a264bb94e1c2950f734611e3e10291cdc0199ab9000a9c2eb74081b3c2cb4461ad6406a38e7":hex:"db994880895242ced06eb29157756b25052257bd49ca08c7208d51e7b0ddeeb7":hex:"":hex:"":hex:"6a45639360130d0a679f9addcbf6f46b9945b3b1e5a72eb175144e62786dbcbc8073cc2be8cac421b9576ec496452ecc1a611b1e5ac41500c4213404a2311247c5e828738a8cb55f67b97f39d05e36eb29871e3d709f3bc7c72567e776ae736b63c06f5b57c1127e305387b115f117e302727d042c2c0979b70e2a0674ace2922bcc2839c1a75044f740790b62b078bc3cb056a34a9ad7271e02a1fa86ec85226ecbb9b126c4a9b3b0b0f4ac6915c641af28b34d7b7da6bbf4ce280671c52eb919100e198a3feed6b4fd48c01d836c363904d640e475e0d0e6c6ce5f25d0b174c561ecbbae201bac53d8499706d83da43c268bc2c57e2405ed016d6198964c60" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 0) #1 +depends_on:2 +5:exp:4:hex:"82037584f80266988ef6d15fa6003478c20d33265530c1767e3c23f0a0a95d61c9262c26dbd37083066bacce5f93dc86e2cb95521fa6dcc9e4d01c469c4a3fee33579c21058975dd91f9043d5ddb154f5390c4ca2c813938a8270b954a7c7197ec382f02c50dd19598017d2abd1e45ec":hex:"52a6cc9fe891945e5039e95271ccc44ba9ab57f62086837ee64409d0fcaf1973":hex:"":hex:"":hex:"c60f3bca5d6b1130c6fba93e3da9b81dd763828caa5ce81fa528e1326b675585bcec1b4284d9ecd46343000c1e2d6ea06f2d95f483ffea1902fa3935bea0e9adc40e85dfd1b59a597f2c498068af0ef4c15b51d535e4ed1de28b1b1250963dc00a70e199b48d8d7921bf6cbaf268e801eb241bf659dd38643f39de8b9e0710c22eb45780036ed3a86fd4b9c745d26e2d3a5b7e87ef6ac54d8d4f9d7d01412d940299fa1979716de0ebd7b26bb6d8ba4217dc4a660ee24a683440a12b00ac310b1acc6481d42656ad0b08eebe4883db71a6c64603e07f402829c2677663ec68fe1e7620b6fed23b7cf2da0f09773b85db63221fbc6550a7182d7b9d8b72ef1ad1" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 0) #2 +depends_on:2 +5:exp:4:hex:"5aebe22736577e69c5027cbd1dcc95146f8dccadf961020cae23562d70e9f0155bfced0ce2053114972614a45932eed8a6b4f4e746d8d9e8b25cc9d9fa67ee0b15cc5b3e3a2e4371a448c9f6bcffacb8a0a8f2c05e8a3a0abfd5d803a77a80fba75ff12cc0649af9bcb94fa5ae2edd2a":hex:"3422191ee68de00c779434aba239e3cd7ad535c13d118bb226e1e013ea6e9511":hex:"":hex:"":hex:"6bbaefdc1aa307ad401b6040da2036d6beb5c53bab45d72f4c679bc88c911fd2754a09f2f4b4ff37e7fe3cbd9cd788ea89436bf78817fcb3a6472198b675c837624de8525dedb7a3b7901faf8dd09db1216f55205e3719d31103379abac3a0806fcad0474b9bddd81e3fec33488893ead828e08291b0fbb37a12b74347d35131f1bd51aa4e4873096b1a35ee3db7b027fc5654e5a0352c22ee35d70f65b39a5b8f4a206970143d55f0e538fe28114fe3963cff7331e59dd25c1676bcea40c7074073a95b9cb044e114456079594d5c570da4e948bc35be44a524d79bf4c8155720418b8e7ad60990bebf67ec5fc083dff0fadd3e94ba110de23e8ba699c81548" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 0) #3 +depends_on:2 +5:exp:4:hex:"f5340f1fea08877edb309b9b43228f11dfca26f340fa433f0b18eb9e6e07ccbe96f7a1d745a9b2910e21bc9522a989dbb2db642c5e4b2d59ffeed6c9e667b378588849338b385625f03a226389081858e86a222876f18a0d7ff69d0fede620a83caf254eb9376dac8ef99837dc491dd4":hex:"98f5b7af38c1fbac43fa9cb358bec11923d103720a73591de2c6ed245e86e028":hex:"":hex:"":hex:"5293ce6891b5641a33199c0a52c2b5ac46b261ed311d15a6eaa8df6478b217aeec221d488af74a347ac9a14d51e07a239c2a52d2db6d75dcd901452fa3b3403a15c449c2f1f9770501fe10884ddc3ef6db2d89ead176dd9d240446b5eaef3737666750f56dcc4370720419136b0e6268efa538c7468f6b21699d68fbca51a3c941df46fe9564d395c54d829a681864837fb2b6eeecc994478210317d5908886f6056293d53501a726cf4e786c6294381fc4af6e1109186759ec90999d8a21ab09053938fb545692ac03c776803868134c3e4f7ed87c9284cf16a7651458d7e68b625272687944e2e6c7ccb4fe8e003abbae93f98f694a8385a295c336b5a404f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 0) #4 +depends_on:2 +5:exp:4:hex:"82738d1234a9393fab94ab99b841371f7046c6852bcdfce1b2d56825f5c58786e599005a8a79a30d89a4251d3a797cab8b3f30950b9a15d686f1259a11a516d399551928cd3cb5734c7839847bd584c364b95b8feb390567cb2ec23746543ace1371a089ed97f9968e83e75636203574":hex:"3fa319b90a1038b544916123534aa5cb10f4da16cb12c3e00bc1306423742bad":hex:"":hex:"":hex:"9bba6c3cef2838d115f1030925a01db7881df7e7b5d461a5f8dfa2a40795322df746a25ebbeff272d064aca9ae284b50b6f93fa566ea519e712c82f5ceb481f2ff873e73043352c7647238fe339336cd7aa3765882429a09293267613e29bcce17535efd1cbdbe5e40bb21bdde402e6ba7d554b30635d05f581dd1bfef0565c3f5dedc8210b5a01a10b58130442e3f8eb11b9a40e599ec8d5e1089ef1f5e6587b4120d1fc39576282c80c825e6e9507a0ceb3d0460832ffa079fb8492a3518f27f09c0bbf06f6ec00d80e145b5e848b688418419cec8ae52cda766da84a856f94a4bfbec26a97e2810fb1dec3b48f285fa4b0e2794fcd28455bb178b3d55340e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 0) #5 +depends_on:2 +5:exp:4:hex:"e554287587131cc3297b05c8adab4610cc3d1634eab65119d8c546d13e9961594f9e6cc618ea0d782547d54aae466fa243c2265aae6d575f8fe22edcf71b3e77fd9f9ebb11c9e2e81c70abfb193239adb73e4fd14c93bd84bf79c328a86a433427b305a6425dd5711d83006dd2db95d6":hex:"2a5741cd93041be381636c081f44a9410647961ce5265211ba69e09beb6e5cd3":hex:"":hex:"":hex:"ab0f85e64e334bbc741b064a31aa9cda9049dee0d6ea68d1483a60e0f48999527042b7994d7a7131423bbd5a6cabb35b9c78628034fe31e5cc2b8ea2b94c91a488fd34fd344bdc862db00e234677fd0fb5155ac892c304361e0f5453cd2598115cff6a3341200ad7469fc5ea1eddbd85511cf20b842c997dbdf95e4841aaf0d365080a24faa003fba9226bbbf609086a6a378e5a5c2682ffd93234dafa69c2594cb53e77d04ba80367ee5dc92cc606fdf102d265d52a83511e2cc1d166f3b84586b2fb01f8c7ed39a344a40ff884e6a3f97f9474977b74318d88a6c70b8cb7d2489e655189fc97cf1384cf3927f608a1f451c77060f4309ff913f89d21398917" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 0) #6 +depends_on:2 +5:exp:4:hex:"ee071e3f09552a53b8bd98d9e4b4b460577bae8629ca6e8461111a1ec08d5188654042148dfedabc409caeb5a03b26e422113d79729e75ccbe2466ae8197cf8ed14dd2a9382596da6daee3314b12ba42cd9ed90aafb911598d1863c9a72625d0ba9d711d1fd3dc462516a6b6286644dc":hex:"fdbdc11a4f71667bd1561e87ee34d925b13d1e79967fcecee8b2656f04d6d379":hex:"":hex:"":hex:"acf342f6537c1c3a8f050359730c185e2beaaba5686d2ffc0101e3eb2b153cc80ed5e8404bc849e330e980c0c2ee5df6e630b0d2e28ea50f9f8c06acc0c880304e321ed7205e673e4bb44ccf12ee27bc6f168b636d4297d53462db1c4816ac5ad684e532f35a21ccc6226dc6481d649158e75a6eb012eb95ff4b460b41f8ee1335fcc43f0cb9b5ee76a471283ffe0880e5cfa2ac200b18149712aa10b76fe3850dec22ef4639beeed69f01a4c25ce6110a2eb0a69c479c97a6ff2be4adf3c725511f932f86419ffffd0306bcba149390e1d30679c4d70d15637665419d17e508c0509bc4a1e73448c29df6944c00ce8e32ca8964418739734e8ba0aa4de20585" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 0) #7 +depends_on:2 +5:exp:4:hex:"e0bc8c0b53acd8cf5e4c87ad24455bc34d456367bd2e71674d5ac59d0901a07abb52c4f264b0607bb8f1ac0efa4f974947bad42b482868d84208f064fa27f465865b910d8e536f011097bc0cfea07a934ae5023ac7098985c4e1e2d173bc835f7f6fca3200e38482a36c871386ff9b0d":hex:"bc98fdca1133a21a2b4435105b1f96be16333f5ecc6618c54d28aab599b79549":hex:"":hex:"":hex:"ec616993a60d7971858ab2ecbf86f613ad0d9edfaed88645565159ded90cbdcaeca3dec081f55857df77a3724f34e797729493e995594de81bd1d14f55fc76ff1c99e86f4bab5b01cc849180bc0721bcd7a1c694a523baaed436949882daefdb9f555ba163bc01780831c06fdaff5bcd58c61c08b39d051da943a1a3f831808ae982e3bddf40cdd47d580d3be6603c7818614eb0cbf303c6e6f7b52183e03e42b57153e9e0644c5ccd1018e242fb384d8327475b6c51c32b3dca5f32069539631747757301051a0eb4c2e4bfe6576ace08efc5b4ad888a4b8137797cc74625b847a5b6fe515ce186fbfe7a68ee1dd5796e7aa94e78a85c5bd46953d8c4fc0ea7" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 0) #8 +depends_on:2 +5:exp:4:hex:"9c61a730a0ab38830f36a44181988afa24fa5de5f298db058fb4a3443d3b71412ebe35851a12f942b7fc379ca1e14c6319cb485e125dde2482c5632976a2a9c11221a9fb6e65bad990a5b77b55b2b8623a5509cd919819e7f8adb23a99b27c2d05fb6a3fb3936d5fbfd44cf2b24a7a87":hex:"a60b8962b18d686ea141e0f4f01572a25b69acf19740bde9588ea63a11e904ba":hex:"":hex:"":hex:"bcad32168d8bec01482534ef7dcf27ea111d6b2a11311572e09bc2cdb376f30157ed19b90baf8e4e3c61e6f8dcc05839fb1b3f1a723c3ba9dd1c7cd49463278a6b2190dde8ee03242d1be9a40b570dd4c30437f0b15798874ac940dda5bed2c93323f1e79d54ae9bc86d82601987f048976a557c6173f9d3eb16649bf0044947206f3958af2cda743fc40416e645b9596b1ef4e7060c690d75efb4acad24976869627c20993d89359d39cb3a97799f9c9d37dd79d212c690cb148d2b3006cab6d43e798aae2a35e8094a21d632bb05a89ab1b6853f27b7e064041f140870a6bd9513bae4c18e791e2d8f1b3c7bcfbf82d28c9d6cd8ae224034c306e51d362e9e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 0) #9 +depends_on:2 +5:exp:4:hex:"e3d186a9a4d9530906c58f9d1f3b415d1b60e2f12ca34a428d16fde09c700dc5ea9d104a92831936136691232ef64c887b71383be1523478c67387441c67fd7761e9f75fa0636e5a3caa845219f3582bddbd0017b9b95984cea6a3ddbeb0820f4f55ff15e22c00e8db7dd8fbea8f6526":hex:"c33655a0e2973ba13785fe4edfb75749d84d818752f7658014448b7719982726":hex:"":hex:"":hex:"e002203e9dcb191c5c0c3ca2e143e689ca9925337ae04c29547a56d4144b2657f826742c2af60a2ef56b4f76e68ecd423ca04eb79e92473c2b2096072918a2390b5e1ef596ed6a4302c181b03257f9defacd58796e10b5601ba9a1be767440ac0aadd4f647bbd81a084bbd8bed5a0091892bafba61259a46cea95f7be6ac76492a52957eb62e0c96f5dc74dc3d949e74310be664cc21b9c76d39101b76b7130f2cdf444e07bdfca000819dfefc2eedf897b1de0ab92e3d04f6dbe9438c71115e5d14fb663d712027be4c1348cc3c5c30bf8dc0f7f5a2456159a542e58aed5d10affdfed5b6eae77f3af607354ddfc4f1d7afed90463486f60dd9fbf10b32f6bb" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 0) #10 +depends_on:2 +5:exp:4:hex:"38eccee965505ba5136a8ab868ed1e741d343ad713075233bfebe196fcef6f4057a21d8b2d6c68abdf52633d54d9609e87542efa8f4b46f40a4e60a2dbcf3338138d46c1e14d6f752954a8fb992fb0260ca8890300556ca7092a7661b65fbbbf0c56e2d49875528aed1ebb0133f13c55":hex:"7bf2914afa8ff9c3b384cb495d0a08bf7d8f0b7198df96db7371dfe987b2b73e":hex:"":hex:"":hex:"830a9f61e8af4f322a46f3e75d475f9f6d076713ab98b2b9d1196e8fea098bb7a840ca4d7f32a850cbd7417297211fc37b47b068aba349d26a47b2d6d41e5883f656c287804fbc854521989c5de99b61c58d5144440ccffea4a0d9c455a40d4718cc1e9dbdc9c77c4848f466257f99ab6073dee83cf862511b68c2bba8bc907b88822fb1ba310b3901d7aee1eb3eeeb0ae5e8da38276886cd8a218d26a8d899afdc233944c97baf7b27444e27f9f3600b6d908fb179e504c5091e2febb7478b34bcf881c55fd9fc74e9eae1203e097ca67fcd62f03a1579d898d890c57445d9f6ee1b65b2e1542f490501384a8b98cc598dc8eacfe2260db6d65c54ef915f2db" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 0) #11 +depends_on:2 +5:exp:4:hex:"19222f7886766642da4a80b97b9ab8b157b58ed63dcea2512f088644791475a5c6a33a2cce394d45da2f84b02a0abcaaeca4698d50d5bda435778b808397315654878e866ba0136f9c4e206f7749b60ded4198d69d1d077564a894375291991eb125d394547d226c2da17e8cd98853e1":hex:"af34763c141bc212271d52a260c6d6d40e9f40a8a4cc3fb7ce6359bc71941f89":hex:"":hex:"":hex:"5914df97ca36accfe40009f033bc6cd2195d0b1d354960d152157f2b868db4cbb736cdd0f077f230442ba0101789c5cc2ac727b0704a10b41c87d79c8aef748567a2eb6e61a7c499a6a1cd6a9d958cac18585b2e697dae4ff92bf913480968f3b2b8ca2e0cd85f1d9303e3a1a3830a30d6ef0a1e02c682958fd186e1be8ffb2a4a69d34bcbe617c3ecca0a77d460e3782cf10143df34adeaa7cf74d1d86fb1ed35da217f00cdf27f1637d2a188c3ce7ce6cfafda3adef4463a0e7e668eb1268ada8465ce909f368a0b12a439eb4d43a87cbf98f83a4f8c422ac90851ed081d74f212c854522437b2655959c081fdc8ca2945271821182691f6ee5fa0c13dcca8" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 0) #12 +depends_on:2 +5:exp:4:hex:"f314eba7451a0b721622be298659a3d253ea5925f5912196c62ed149daa11e26cd94e8e647da38bcbbeeef1da21ad92e0b9a5f1ad72826bf55097621314f9859f8f8d4d62cc9a00b3e9d95e996509d77413449aac8f9d8b311577a083f80364ad1d489262058aa11ce9fd3dcc6b1e4cc":hex:"f8b1e97ec680f637a4792a0d50fff9a0edb028619a9dac05b8ba6d57e55a1a4a":hex:"":hex:"":hex:"93db5a7ed48a819e9a237ad4eaa33946880ae85266418a264ec17b41a8c97c16c446f91c6d901871e70b6d9c10aaa07077c1d40242cb7c5cb89a137094aa81628278b9e453d7f0f034724110acf8a08fa244da256bf3e41960013e70974dc8c228218cd88ac4d7448bd13a4343866b656b16aaf42ff678dfb960523cb95776bfadde24e16ab0070305e084cd970093fcd08431b815f85fdc4f6a43fcad105965b6fb1661c7709a166ae6f3d1fb463689f752811fe7d6665689a06c60aae8a051abfbada40fc602fea2ced51aa910c09b78d97a4e85242c3d206cf31ccfee11c5dc141ebb5278b55de7e7aa9a08048d5cad072da32c449bd0dad2f7d6188a5b9a" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 0) #13 +depends_on:2 +5:exp:4:hex:"841cd7bfc5d87a0fa624f474af6d8ae9f2b5a1426cf1b752ddf11f792169f2f2c0b60427bf62df1b373302d91fa8dd891fd7542bf6425a7308f64e96b0c3e372d4addc747898731517a418210813f6f14d56651b2599bb2899b109b9c21367126ed5bf099f455ab5b67f47a1a3abc3f6":hex:"c35726206d18f9fd3b8423fa9ee2fc5a896a013a95d052ff495b9cc6759d58f7":hex:"":hex:"":hex:"b3eb113c19f33eeee3dd53fe58acbef68b652121f39e9b88472e9162f3429c8d98790405afe1368619366c88a487518e1ba7896eee2b4625a987d138569892b8f977798d6931b5d2fda6b8cdf314063e45a22c957a1b96a249c431bfcc2864fc00157fe6c2ced99a1cea466944f675e52cb8fa0027ce78f4e3ed72d19f125045aa824b57526ed20d527d371475f389c66a15e35c2ad1bb8a79842217a422e4b73a3ab5bc8cdac32eb4b12045202b1ff1323a6816c29ad0d65c9dfc8e9bb841ae0c813c0bced097877bf220961c0447162262a96b95dd93ee707393fa5eba4aba292982c216b05a8c2cf165b54e1bb50a9ec20151b229df3d32f54ea62648b340" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 0) #14 +depends_on:2 +5:exp:4:hex:"dd62ed0d54d930fed1cd7582e376ab47da3138f77daadeda32fab95bf881fe90d9ab4dc5b1cf0641ad966ba1761aaedebad9ebc3f3b24688e16251c409267bec9b02cca6b8ea7969a5991ef647fdbe28d3126c505bc0d9f8241fdc49e8674ffd6bbdcc5f99c6e20d4271b4215e224156":hex:"366c8ff666c2b42d735dcca5c0b12e352afa483d48d57c908b5263ad3d2affbe":hex:"":hex:"":hex:"a774564295c318615e4d66e0d857dd6290ae074cb38b6322d8867f2c7bfb7b3bfc50c715c090794d794aae12b6aa1a91ce503b549d79435fd1f407fdbe286e4d607c624b44b5f0b91e65aa59a880c695a0fc2c9d53dfe0662944ad458ee6c364e56e6537ccb62deabf1321e8443cdb58e8833b708807e53ad86eca98e7cedb9bcabcd998f975b9b8722125da2d7f8e611b48e7df63ccd44439c615fc3bf237561345d85378a34c46b65bf5cada2e1c591f5a5ae4cae06bd2314bb5e5ba067eb65205aa2e4f625be97321a91d964c4be9896ecaf20aa78338627ea90578cc900d2abff4b50aca44b24088747e7e27ba9605bbd6f30c99d6697be460da653a1f37" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 256) #0 +depends_on:2 +5:exp:4:hex:"3aca6b55561521007c9ece085e9a6635e346fa804335d6ad42ebd6814c017fa8aa7fd3c3dd5d03d9b8efc7f70574581f4cc19fae5a456f8a53a656d23a0b665d6ddf7f43020a5febbb552714e447565d637386b3ab33f78fd9751c7b7e67e1e15f6e50ddc548a1eb5813f6d0d48381bf":hex:"4bc9a485ec840d377ae4504aa1df41e444c4231687f3d7851c26c275bc687463":hex:"b39c43539fdc24343085cbb65b8d36c54732476d781104c355c391a951313a30":hex:"b6850edd4622675ef5a507eab911e249d63fcf62f330cc8a16bb2ccc5858de5d":hex:"546664042bef33064da28a5718f2c2e5f72d7725e3fbe87ad2ee90fbfe6c114ed36440fbbccf29698b4360bc4ad74650de13825838106adc53002bc389ee900691649b972f3187b84d05cecc8fd034497dd99c6c997d1914b4ef838d84abf23fae7f3ac9efdcdc04c003ac642c5126b00f9f24bf1431a4f19ef0b5f3d230aab3fdf091ba31b7ddcacdf2566f2cfab30f55b3123e733829b697b7c8b248420ab98ba6f11b017175256368e8d8361102c9e6d57386becbeabda092dd57aec65bc20ebee78eea7294571e168c454066d256b81bb8b7bb469207a18ebedbb4348fbe97a4d86d2bd095c41f6de59aa0800e131e98181886a2633cdcc550914d83b327" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 256) #1 +depends_on:2 +5:exp:4:hex:"2531c41a234821eec46f8aa7dae8e3ae12d167d289bfbfdca928643b343eb951015c066e2d278ea39d2a459e6434e234e55fa1145583ede74e632ee8bef2a2ff76ca3b8c9c977a5813c4041f3f9328be6c67f1689d878e8ad61bfe6a39f5b034b75c40c9b305c1eeb92a3f4169ae1720":hex:"d1952b7d0c4c94185adc025e67a29fda50f577770115c0931bfb03e8101d1d3e":hex:"0be3f61ece380d63c68ff0d4bde36f58233358ce62c7bc588728cf1babbd4342":hex:"01e76a0c9addb4dc2001bec231b72e2098a6e9e8d39ada13ff0c493aec8ba65a":hex:"12336758fbec11ee264b06969bb37ff1d37034b66f8b823690758da074d4e09d84ffb493d0610b5c32f68b1a144ca654ab4f0e89c89c6ee6b872b6be4ed06a77b9809e68329addf4ebccb986dd48cf33469362af9d8f7b24aa1cc65bdb814c2e04b79860f2d53b3895b5f92502befe31729e40ceaeeecef456dbd723f485082ad475e46f6023dab6bab0eef61394823122c262baf562d55c687c3c3408c837e6383e11535e950e604df59cc0af1177283fedb5fe30966460dcf6b1625b39b590d455b9182097cfc143290556d68158fe20211effab9303115ebc5b699dc1613c195956dc61348bbb525e571c5407326a6e1628515c9275a6a5e35650c953d68f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 256) #2 +depends_on:2 +5:exp:4:hex:"4d65ff2fd260eb6290b02b1fd71cffec840cc01807e984f07da64e6ad80ad37fb5810ed012d2ceec3a0418003a03343502219bd422c08e0321bbb86d923bbd04082f939ded421657f929b37e21604a2668b57d5606ac36456da916df82a8753d224b4f7c829d285254e9e851937b54af":hex:"d75616aa0190a56af573e43605157c0e0d5275bca959f2c75d0e777943b200e2":hex:"954fdc652d0bd8eea37342f5547241afb67f8d4c587bc2402c435a260144acd1":hex:"ed07fea3a07e8846b4c3aae8cec0bf6df7c8ba7817e3e9699943e2d2e778c4ac":hex:"20c1c41c0809e694b5ddcb8089946d74571144473dcd68af68cea5881859ac803c0192304966a3a6f4c24de0451451128663bafc20c9842bcf72f3d6294dc59b850dde77ec9b7b37d8e5a99ef1719ac29bd54027278db159476849d22d2b46ddc008cf76878eac8c709066aab5f1043ea588815aa48456d89d2657d2905422857f6b741218d22fb7a2a67e7efe5c2c56c9224170a75db10b9d7b93509a6b1c5e9b6d5faf354f79394151eaea71c83c8fa53446eedf70582c4976a4c16311f92cf7d1758c1d1f48e6d58b588b3cec5f2a7f8552dcd7a72cfa8f109c3f734a708304bdcdd6b25acc00899717a05fe98433f104b6fd268379051af36b111ba179f4" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 256) #3 +depends_on:2 +5:exp:4:hex:"313680a6ef5cc85924575195608f3b9cd852004343ab708e89d61c24696246166b0dbcdf61c59b0041fd2c55a829c99cf8468552aabddd993687c2b4a6017024c41100510ee10034ba4f66563db4d3388a7f6d475e080faa23ed43c674254bf9ed25f73109630647fa3c85575727d2e1":hex:"cda08cd76f3bac2c30bda2069a1a7a461f2462ad2b2ab6a727da6836896a4d2f":hex:"431c4fdeddd3da1de6fcf19a25d74af811f72fc2367a7f33cfcdf17cf38fcb6e":hex:"4750344c23e4686b2bfe2dbd9301705d06969fedbc77841bf6591540aebfebd7":hex:"40deadcd87a8e07ea73bb1f29157c7ae8a35e02ee60f9f62ebe3ec4bb325c81c2a17bcf6b863cad6ae29356c0e7f3d82052802fd7a14dc73954c78efd49b2d32f072b137af16a05bc97034b2102c25d6ae68df7141b101f468d79078033015763326dc3ce8bb2e960e7fed09905044ba2164deceafefd545e67a5715fe7e5a1fe51cc356096344245d431dc19eff99b402981b8531a8702f2ff1bf268716793367db8d0f6f454db57b6ae9164596850811fa2bf01dfdf91799b1b54c9773ddaa23164484fddc2cc781c1ff31393ea203420ab2cdfefe514d3089df1b20eba32c003576da5a9712c5c0ad744fa03df197f2ca8463df44d16135f05e1eab014073" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 256) #4 +depends_on:2 +5:exp:4:hex:"95b698a454070603efe15cb4c359ae946da756d124939f916d67d77aaa0608d8e577b5f5567ba3c075128b528a6ecbcc2ff6d8d15ddd68039173c4b70df3651f4cb5ac62957781ac91563324a56b47409b02699662f68022be2d93eac367a21026ae95ff0cba67a630e4bd8e53469215":hex:"de401ad1d2c339934a47822421eba0fb79c89863d1df0ef5d47e6be5bb3a8c48":hex:"a002954ae5f7676a3230533dbdf59252ef051acc76574bd519ad56882bbf46e6":hex:"5e3de2b53936a7890db7248802bb95e9093d9d7a15a9378d8f4ba42c52e679dd":hex:"772a05c279c7fd85750793ee81bfc32719573ec519f5b64b0386e6414b73b153163fdd1dab6d22c637397a30adf86594de90c32f6482d50539eae8775799b89e4c6471493df4f90ce0b694fe1a81fb5b93bfd2719ee69cc576e632cc886824deb7622d487af450e95bd55a609ac30e95adde47b83ac654474c18f615dbfda68267cec8bcf70d094df6301e858d3076db2a85b2b4b3d94de82a6e0720d535d36d6e952811cc371b1e828b86fe00870aa5c55e575a6903303f9e2dbca40e5b66326192f1728bb89fa7d77e6d32cbf5f18b3306206c39697b71c404e38d496c52639f98eef9203baff52837a872f7688b53318c870d3b8cb024c865c81c3ad8b71e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 256) #5 +depends_on:2 +5:exp:4:hex:"d7d3e83dd979bcfb524074f12a90f78873e983c2aa90e0241f00d2c691a4702bb452dbcc69a7793cc2081b984033295c4435495713c20295aa97bf42babb66edb4856370b9701020a8a79df7381650fd7a3aa5ace4bf54b3331a8d4092c19fde08cd51a06146cdfab9e3a32e5cd02b35":hex:"5612ed7d790419dceab4befdce6e4e687d335a3aa972d8809db6291e3001f825":hex:"915028d0610160a2516e926f06ed34b18ad1064b6efd56566494a92a3fa0eea5":hex:"86cf5bdf061711d2361ab6d79c731c2fcf9aa47ae5bb5f6294486a14081b1862":hex:"cf1b0dbfc3f6f3ab526299b7f7d8ce1a945bdeb0c0f6305cdd6876d40d5649ace9e78fbe2e1df6511145635f5acae90b6b9a38393db4bdabcb2fc5e93d252a2098fc082917b1485d387ac5e2efdb5fce0e82bf200ce0d1f6c7b5d22fba062574d9234fc9185f096848d10141ad39571035b3769a521165f7b63a0050a22485d8a47870028d3f3b6437938c3cb51781db9fda64019c049dbb7335dcf7c9c71f1ccf27cff4d379a274fea0d026f5de1dc8866f1dcf883e2e0fdb6316059d5172a6c1faa3203969969defcd8f367ce859aebf998349ba979afa5e63d94588ff02e3a428e93b98464997829cdd4b605a44393057fa27a2fb780b7daff4b64ad73b91" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 256) #6 +depends_on:2 +5:exp:4:hex:"c1e64b99394e1241b31ffb7b482cfaaacf5f2fbc251f954e7e3dc0866aa81856a16ce83d9ce70b71479ae9ccd6c59ea4e99986d1e09ab16eb1f48b99cb9bc9d63701f6a9a1af0b1d8057339d5d7ffeacc8e5729134ef2148663227e348dc31b9d56626c0d43478d5d53bfe998fb85b1f":hex:"42be743f8a9c0187d2d54b596caf64dfa630d60bd8c6de0b126d6a151d823cdc":hex:"e925684793bf51a8a4a46c2ac5b91ed40843efd0878336f983f1001722231f1d":hex:"df019e78efc5d3a85fbd9056ad05f97de81be05c069b32e68792ba8f5a775fb3":hex:"cc3df6f1cbb0e1bd937e64b2d8be12c07cb256369040d834037226b96e4b8e7232c2abfcbbdc0bc2c432414845c5ebbc35fa4e903d5df19aef62dc702b20d0346daf20caebd8819df9210a721be34d9df72603a4370c0c6a653979d19282505d64ae09e0922149759ca0f5324f665eb83ceaf6dd46771c520b96885a8503b6be333ef6aa8d83d370edf100edb13b86724234442a15cc23f89359f629a2a15b645c2510099c0263d25e310567d822bf03aebbd4bac392b999414bd013fdb00b4fba8e30afb17f50145d11302d71dddad30ce6678fbede83e567a97f4deb3b1759e191319697efd9486f2b502a94e01c00a9b5b76230036665fc5d87f8c9e2fb4e" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 256) #7 +depends_on:2 +5:exp:4:hex:"071b46d52085a658309f2c35bdab443e1509aca159c1fb9c222951affaf1a243d0bdcfbcaa247fcb8da53fed8e5f8b3eed2fd022c96bdd6e86bff89beaa99f2bc34963d3ef118df9a5525a910c9540aeac5166f65f5d05c6277260081aa9b71ac58cbb5f1ba5000d4d8078c5a30d282c":hex:"7ca33e3345bb333a5b1f412a6d57f8ebad65b427ccbbd7fe3ac837691da39219":hex:"60efb3c75aeb2f4fb208659f20e79eb41d8d9b422066c235a14b9420bdf6f172":hex:"4e2675c8009b5bde9882ce940d42daefe402fb11379e07db9a4c0c763e97f319":hex:"80b56a4bbea08b2bb09fda9cb04b1ee7bda0164c2f12271d8857ee3af102ab25c56836354052e3d85bb02cf13607d746a62b24eafc989b35d4ba25449823bc1e7b14937523f96713c9098ef2ac3f9765070076f28d76c7e3c2a0fe7b6afd0ac2167ae070a7ff19c5bbce52948abbe94f0d55a5d1beb31a665e97f56f3b92314cad9ba764cc2e3d0c00064ca1b4f3efda14e7e0aca431b427dfef2443d9e3b8a6567c26eb0ddb166f9dd247371407676c6a46fcaa0f9f67f49276676369b725da29aa9ebb7c3e186de460452cc81c02266bb6e79a119c54f4bed8bc3de709bf6a62593273f4680136e95d6d121727d9fad55c4a110a08be1e0a06cdef98aa04eb" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 256) #8 +depends_on:2 +5:exp:4:hex:"06c7a8a74b6fe9e14fa2475ef8b8a1ff9610bfc1b4b93cf53a8c844d7dbac08ff743ea1bfc6c10d7707b5172a29af054491b573dc2cde1a3e74262f4fd2e9ec819ecae830db4f0c7021028737ffc5bc025a216f658065e27314c30c04925051c0d7caf6ef440cae263f49148c0398007":hex:"1a33793d255386d47952bfc1f63ec15caff3603d5c28b2acdd799673affab589":hex:"7eade98e717aaa32f74b033163ad76489a7d682783d2db67b9696ecc7b9be57a":hex:"58369a241166bcc87e713b28b4ae216a8e61f8cba83969d42b91e55283286af6":hex:"7bc84544b68eadac9cf1ca907d9166e094844b396e5d54672ec88dac573418125d50befe1097e2f3438aaaf3f13182ccf4593bddd52d6a41a5e58f267c6f0817d8d1ce3327a611f9fc591ae64c7c18d61958a598e0ec4383e25b46dfd34db10f609cf53ed76c86116018fc8e9027aa2f0b0fb3f22d6b86b11311daa5e78d1f4105ae4ac67f63707400b0f054b6f3d71f26ca5d463192952fb39ae00326db9cb1dc028525c31aa9beb7c3d299070cc3ed8279b8ca32940b21273afe8016d8069a577acdba6bf6d2fe327b2f6dc9c5c7875da6c3f584516db0365d16670db6d90cc1e5bb5309ce9fc8234326ddd68706e1d76830202cdba770bd40046b751f3c15" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 256) #9 +depends_on:2 +5:exp:4:hex:"d5552efbb7f33481a574589c4bb56dbe43000ffe9ea67fd0c8d5638092c8469944a150b0dc1315ab0484976b128ccc961734d226d66c77dab3c22558ff2225e32191aa2dcec8e47a56f757f71c081acaf5df357c07952cf6de2e3564813ded982f72069ed1bcff6b48ba4b4625ba247b":hex:"345b4acb2b0cac82139fd516ec3d39292438a916d2d2c8e97ef265a1192a65a9":hex:"732451ce7bf5acc84a05de3474b622d07bd3d01eb6e3724538e454c4d669a994":hex:"7c7ef660cebee96b425485296a8e88c37c66e385eb1cf7389a95c46fa68a34f6":hex:"d82473db3bd554cdcb2aadbaaa9c919087d9b7bc8d883f99bc95a19fcf96f25698fca8a134ce441414852166998a6ee2f6a18f9f667907f8f8bcd0d2ade7dfcc03cbd6ecbcf3dec46558154dab59717f386bb33c9df9456b258feea593ae1d9bfe70799fce4b25cd6ffd0815e849cf93b496d6ef36cce4e14fc3de1506dbf34f7111b48027ce2aded4140bea8311d5de9df5290e80fb65462fc5433e00c344a3657f47f6a7b992c6ae362afd462280e7830d317192bd8dd26dfefe779dfd69ebfca34038b078c01644857c60c1f6db9da9877cbd2721d0b26a67c4eee1bc43f6d632110759e1e31e7c3d6105e3da30d297b69eb04e880d1f2bff2a54ea798178" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 256) #10 +depends_on:2 +5:exp:4:hex:"bee5dd72828806929757afa02a92c5c54d86c5015047379b717c6608a71239b15255de5a2bd27e9c6ef23046c8a8217bd89744552137b24d93e5ed41250ecbcf6ec77734fed7a40680e801ea277e8c6eae57b4328acb1e1dfa04d0b5f799ce1e2f111c3fe8c9f954fdad6aceac7d27cd":hex:"4c3c54284845fb2a494d1e452b2ba1eb0d3456cfa9560ca7c60878e8458eb7f3":hex:"a8a333527a2158a087879a6f950d2af8d093c4f67945a140549a5e93e405b886":hex:"bfa0025ac9774ac767a4d3810c27a3c8e3e48780cd0597a5a401f6c9b0067e7e":hex:"ef4c169fe5fdb37142c71734b5b5c855a3b7693a0d78f48d76199aafa3d399b057ea78b2f1187bbd3215bca52e3bcdfbb74d1d0c1fbf91e7a81f7c3f6d8ff5276ca906704d2d3556ec8ec1d6d7ba9e7dd73738a7e90b1398d800617f3a5487179439e25d0a9d4ec4e38699b3703020a99c533a6282000544296e63b6ffe12dcaf3864a8502a68482f90fa7fe9aba6ca9e9a74c6e3f89541d18f2a909737280ac8e772fcce6a117411f36c9e82f2d77fc7a03e2f13f97da5bfd6bf69f1d46a64c519046e6d0d379964723bab2b89be9ec91a3e5a33c53a73304c1e89620188aa2e0b8e4112c5699e6a99d66b395cfbd2502e567a0a9e35ede140681b2ffd95fe4" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 256) #11 +depends_on:2 +5:exp:4:hex:"754e542dbb453f10f41e1361164f5e1ffda67a024ba26701cc86066caf2f9477a074690faa069cfec6fa38d8b2506aca34fd27d66708876f28d8ac08d28eeefcb728fb6226559d5a0646a8e183807a8e08469cc5535712a4426ddc5a340b6c71607ee1e2df489528a266b141d7c977ca":hex:"3a9193fbb67a0fdd732a788d3ae5783de84968794b8c4c0b5ad4de067a5d1fe5":hex:"034db3c40c2c181cb4d635aaf08f05e724f418ecf7b3d2ba6863e9ede616857f":hex:"50058bcdd53c9d257dab7846fedca4ef99ed069604002cf58ab27014ca7100c0":hex:"1d30904d8cd4e37357b1b9b4ad060fac12d1cf1d05e2b5b2fcc48bff12643b60f5e40a3f3e542e46804ddb904581cbd576f0dbb4b83b49af83c48b6c68051d7c7f4bbf09d3a4f999db4776089cbed57dd2a75be826ee34e13dd802d7dfa4442a0a0fe154ec9efe6684d6a400d04fa404123ba54d6b89b7dfeca4d4547e3197218dc36be5c0137c94b889c1aa22b7567887551eab168d365d11a5fbd0eb15116e929468e8eb445608d91388a9b3b05c95b9733bb3ff08d96c0899b50b47c570d75323c4d24062820b0a9afc7bb2771fe163ddceb411470f33554822e30dfceeefd0798ac9e4a48b8d30c8f725a4df6568d15a750131998e252dbf9199135f817f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 256) #12 +depends_on:2 +5:exp:4:hex:"42824bd8944f49479f07cf6af8f02aeebda3ac074ab72a9eca8850c99b909d081f2382d4ecc9e923bf1a588f8db10bdce61c6f452c8e15c0f003d2231ce5cb69292ae1a37c602aa889f0d56df049717bd99005ff353c08eb29ebb8cee3aafeb52b3867a61a76335d86c2d7808ac94bba":hex:"2b573345c4fbdb8382bbdac1d3e2c38fbafbcb599c67412296fb6912e1a640ac":hex:"a5f43abb4634bedf1b199dcf6394bd3504ffa0cdc151b4e53cd0772d86a43f60":hex:"a2f1ac52ec46d93b3b944055b7205da8fee95c9a3241418cfbdfb0e9ece9143a":hex:"c751240283ec2480f6c7720c31e1f9f70c23907b38602ff74f707a14ac10989e29d1ec2e81d4cf85a9bd3440f445fdb9ef7955bdd2beecb5f3c69475b71abfb4ebd5134144b24b011e2fa6026d84f8fb511c7a44f2ad7cd212acf089dea4bf2db5be9a24cded5be8ad0b8ed17bbf0c5668fd644daa863616f68278b5f6dd95ab238451966bb5ae6679d1e99bad610befd419ac6bdab3440b7001139af8a2fca35c74ae65d05f490a480caafa1e3487b78450a5ba59fc0a59220395e14685d02f6b4180c72977f095e33c5cb5048b63bcca2767061c97c616f494c775c5d37a67c5ce996e94bb8ffde4a8dd3de97b74493c9b2d985a2492e1f97fba947d2940c5" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 256) #13 +depends_on:2 +5:exp:4:hex:"9d899a56a0660f18b98c921b0d409550fc225ffcfb975e9ec6b2315bc9a1eb3f68fc77abc3452380e30ac761a20a91565f5ce875a82ee08a46a1fc5d4aaa8918fb23970428c863dd1b24606b0118476b150f7a47f3962dfdd8ddec93fc8f82df7cda58cb3bb5623610eec69bdd0722a0":hex:"67bf61b3eca94013fc165b110eafcb9126917a0ce7e2d9bdf7ef1b38bab6ca4b":hex:"db144f531cee5efadc505f4d37a6e5413f638d46d419fbac76f81ecb63ea2809":hex:"d737b2ba62c1ec1c766f30a5dea7363b5c570c1e7a33fb65c3fb89eab41f748e":hex:"de518ac3034859a43cf6701722555be929a5ab2658de326696068b970ff2f77c75083fee45a6660b82fd1e960b472a50d96535559f60b3e3131a2e051af118063c1cc8b1356014538e6ed0e2da05c90baa041085f8f1575fc3103293a0303751077438a081fa3bc5c64aeeea5c4b34fb6957e91db47bc3f73710087db9843efa1a62e9f615843f69f3f450d6c58b33b1a4d55509df2f34b8a14407cd1a87dc9581dbe180e2d839417a4f6ca6a731aae3f08b515df8200890baae9b79db798c8e530b6a03ad13c3c08baa4cff0b055f35dbbc6cd08fbcac7c0fb78f8754921e000e622ce3042e740c64bc935aca85d7132723de8453c543d5cd5a40748e286b8f" + +HMAC_DRBG NIST CAVS 14.3 PR True (SHA-512, 256, 256) #14 +depends_on:2 +5:exp:4:hex:"ae767959378e9f031c8f68d778cfc0dce1f9b4cc176c5f9f9f4c9c3aed9435f482585a0711812c3c79bda619b942c6eb8f5abbe8540aaeeedeaaeb52c156d07d8669179fc6967884db69c17186cb8fc96f2de9b0ac5922ab53c595df1e3513bb3f2642b458d96e3782dbb975a8b4faed":hex:"830f178cf5f544140d2d8c0737790b97bc6f150784865548d73f1f37a5a39a65":hex:"cb12a2b9a02aaaeae4c7c76cad9e006186d978bc046c1ea81532bc51601ede00":hex:"2d3dde3b3581b863e1590bdc638c33bfd170555445e225f3a450d9e9762abec1":hex:"fddf7f1b906861d49da9660e7716b5ef987163e7e2f51f4fef2cb3e8d01b736067765aaea11a7d193266b2e0071e4d4c8cc776399464563adb9deae22bd721ed03b148516100b9f340a00d2632c80c5b3e1f93825ffeb112fb90e658d638740e62d8031fabfe40f79c20532e667aeacc6be635f64a0580236d7d978c5db017c76a6767dc419ba2f89102a88e53254f41205866e875225380ae04943bcc8f152c9fd79a680557d1f2a0a8ac7b27900bba33db63e26e0d7363034af1430b6546a3ce2c01c8cfe0e152f106baa5b2fae1fe00cef10154b735fdfae354ececc7da44c914b054cd97d99866a9d5df42765cd62eaf1b8adc885fa2263911c837b4643f" + diff --git a/third_party/mbedtls/test/test_suite_md.c b/third_party/mbedtls/test/test_suite_md.c new file mode 100644 index 000000000..cc4a004f7 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_md.c @@ -0,0 +1,875 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_md.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_md.function + * Test suite data : suites/test_suite_md.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_MD_C) +#include "third_party/mbedtls/md.h" +void test_mbedtls_md_process( ) +{ + const uint8_t *md_type_ptr; + const mbedtls_md_info_t *info; + mbedtls_md_context_t ctx; + unsigned char buf[150]; + + mbedtls_md_init( &ctx ); + + /* + * Very minimal testing of mbedtls_md_process, just make sure the various + * xxx_process_wrap() function pointers are valid. (Testing that they + * indeed do the right thing whould require messing with the internal + * state of the underlying mbedtls_md/sha context.) + * + * Also tests that mbedtls_md_list() only returns valid MDs. + */ + for( md_type_ptr = mbedtls_md_list(); *md_type_ptr != 0; md_type_ptr++ ) + { + info = mbedtls_md_info_from_type( *md_type_ptr ); + TEST_ASSERT( info != NULL ); + TEST_ASSERT( mbedtls_md_setup( &ctx, info, 0 ) == 0 ); + TEST_ASSERT( mbedtls_md_process( &ctx, buf ) == 0 ); + mbedtls_md_free( &ctx ); + } + +exit: + mbedtls_md_free( &ctx ); +} + +void test_mbedtls_md_process_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_md_process( ); +} +void test_md_null_args( ) +{ + mbedtls_md_context_t ctx; + const mbedtls_md_info_t *info = mbedtls_md_info_from_type( *( mbedtls_md_list() ) ); + unsigned char buf[1] = { 0 }; + + mbedtls_md_init( &ctx ); + + TEST_ASSERT( mbedtls_md_get_size( NULL ) == 0 ); + TEST_ASSERT( mbedtls_md_get_type( NULL ) == MBEDTLS_MD_NONE ); + TEST_ASSERT( mbedtls_md_get_name( NULL ) == NULL ); + + TEST_ASSERT( mbedtls_md_info_from_string( NULL ) == NULL ); + + TEST_ASSERT( mbedtls_md_setup( &ctx, NULL, 0 ) == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + TEST_ASSERT( mbedtls_md_setup( NULL, info, 0 ) == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_md_starts( NULL ) == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + TEST_ASSERT( mbedtls_md_starts( &ctx ) == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_md_update( NULL, buf, 1 ) == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + TEST_ASSERT( mbedtls_md_update( &ctx, buf, 1 ) == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_md_finish( NULL, buf ) == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + TEST_ASSERT( mbedtls_md_finish( &ctx, buf ) == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_md( NULL, buf, 1, buf ) == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_FS_IO) + TEST_ASSERT( mbedtls_md_file( NULL, "", buf ) == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); +#endif + + TEST_ASSERT( mbedtls_md_hmac_starts( NULL, buf, 1 ) + == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + TEST_ASSERT( mbedtls_md_hmac_starts( &ctx, buf, 1 ) + == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_md_hmac_update( NULL, buf, 1 ) + == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + TEST_ASSERT( mbedtls_md_hmac_update( &ctx, buf, 1 ) + == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_md_hmac_finish( NULL, buf ) + == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + TEST_ASSERT( mbedtls_md_hmac_finish( &ctx, buf ) + == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_md_hmac_reset( NULL ) == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + TEST_ASSERT( mbedtls_md_hmac_reset( &ctx ) == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_md_hmac( NULL, buf, 1, buf, 1, buf ) + == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_md_process( NULL, buf ) == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + TEST_ASSERT( mbedtls_md_process( &ctx, buf ) == MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + + /* Ok, this is not NULL arg but NULL return... */ + TEST_ASSERT( mbedtls_md_info_from_type( MBEDTLS_MD_NONE ) == NULL ); + TEST_ASSERT( mbedtls_md_info_from_string( "no such md" ) == NULL ); +exit: + ; +} + +void test_md_null_args_wrapper( void ** params ) +{ + (void)params; + + test_md_null_args( ); +} +void test_md_info( int md_type, char * md_name, int md_size ) +{ + const mbedtls_md_info_t *md_info; + const uint8_t *md_type_ptr; + int found; + + md_info = mbedtls_md_info_from_type( md_type ); + TEST_ASSERT( md_info != NULL ); + TEST_ASSERT( md_info == mbedtls_md_info_from_string( md_name ) ); + + TEST_ASSERT( mbedtls_md_get_type( md_info ) == (mbedtls_md_type_t) md_type ); + TEST_ASSERT( mbedtls_md_get_size( md_info ) == (unsigned char) md_size ); + TEST_ASSERT( strcmp( mbedtls_md_get_name( md_info ), md_name ) == 0 ); + + found = 0; + for( md_type_ptr = mbedtls_md_list(); *md_type_ptr != 0; md_type_ptr++ ) + if( *md_type_ptr == md_type ) + found = 1; + TEST_ASSERT( found == 1 ); +exit: + ; +} + +void test_md_info_wrapper( void ** params ) +{ + + test_md_info( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ) ); +} +void test_md_text( char * text_md_name, char * text_src_string, + data_t * hash ) +{ + char md_name[100]; + unsigned char src_str[1000]; + unsigned char output[100]; + const mbedtls_md_info_t *md_info = NULL; + + memset( md_name, 0x00, 100 ); + memset( src_str, 0x00, 1000 ); + memset( output, 0x00, 100 ); + + strncpy( (char *) src_str, text_src_string, sizeof( src_str ) - 1 ); + strncpy( (char *) md_name, text_md_name, sizeof( md_name ) - 1 ); + md_info = mbedtls_md_info_from_string(md_name); + TEST_ASSERT( md_info != NULL ); + + TEST_ASSERT ( 0 == mbedtls_md( md_info, src_str, strlen( (char *) src_str ), output ) ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, + mbedtls_md_get_size( md_info ), + hash->len ) == 0 ); +exit: + ; +} + +void test_md_text_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_md_text( (char *) params[0], (char *) params[1], &data2 ); +} +void test_md_hex( char * text_md_name, data_t * src_str, data_t * hash ) +{ + char md_name[100]; + unsigned char output[100]; + const mbedtls_md_info_t *md_info = NULL; + + memset( md_name, 0x00, 100 ); + memset( output, 0x00, 100 ); + + strncpy( (char *) md_name, text_md_name, sizeof( md_name ) - 1 ); + md_info = mbedtls_md_info_from_string( md_name ); + TEST_ASSERT( md_info != NULL ); + + TEST_ASSERT ( 0 == mbedtls_md( md_info, src_str->x, src_str->len, output ) ); + + + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, + mbedtls_md_get_size( md_info ), + hash->len ) == 0 ); +exit: + ; +} + +void test_md_hex_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + + test_md_hex( (char *) params[0], &data1, &data3 ); +} +void test_md_text_multi( char * text_md_name, char * text_src_string, + data_t * hash ) +{ + char md_name[100]; + unsigned char src_str[1000]; + unsigned char output[100]; + int halfway, len; + + const mbedtls_md_info_t *md_info = NULL; + mbedtls_md_context_t ctx, ctx_copy; + + mbedtls_md_init( &ctx ); + mbedtls_md_init( &ctx_copy ); + + memset( md_name, 0x00, 100 ); + memset( src_str, 0x00, 1000 ); + memset( output, 0x00, 100 ); + + strncpy( (char *) src_str, text_src_string, sizeof(src_str) - 1 ); + strncpy( (char *) md_name, text_md_name, sizeof(md_name) - 1 ); + len = strlen( (char *) src_str ); + halfway = len / 2; + + md_info = mbedtls_md_info_from_string(md_name); + TEST_ASSERT( md_info != NULL ); + TEST_ASSERT ( 0 == mbedtls_md_setup( &ctx, md_info, 0 ) ); + TEST_ASSERT ( 0 == mbedtls_md_setup( &ctx_copy, md_info, 0 ) ); + + TEST_ASSERT ( 0 == mbedtls_md_starts( &ctx ) ); + TEST_ASSERT ( ctx.md_ctx != NULL ); + TEST_ASSERT ( 0 == mbedtls_md_update( &ctx, src_str, halfway ) ); + TEST_ASSERT ( 0 == mbedtls_md_clone( &ctx_copy, &ctx ) ); + + TEST_ASSERT ( 0 == mbedtls_md_update( &ctx, src_str + halfway, len - halfway ) ); + TEST_ASSERT ( 0 == mbedtls_md_finish( &ctx, output ) ); + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, + mbedtls_md_get_size( md_info ), + hash->len) == 0 ); + + /* Test clone */ + memset( output, 0x00, 100 ); + + TEST_ASSERT ( 0 == mbedtls_md_update( &ctx_copy, src_str + halfway, len - halfway ) ); + TEST_ASSERT ( 0 == mbedtls_md_finish( &ctx_copy, output ) ); + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, + mbedtls_md_get_size( md_info ), + hash->len ) == 0 ); + +exit: + mbedtls_md_free( &ctx ); + mbedtls_md_free( &ctx_copy ); +} + +void test_md_text_multi_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_md_text_multi( (char *) params[0], (char *) params[1], &data2 ); +} +void test_md_hex_multi( char * text_md_name, data_t * src_str, data_t * hash ) +{ + char md_name[100]; + unsigned char output[100]; + const mbedtls_md_info_t *md_info = NULL; + mbedtls_md_context_t ctx, ctx_copy; + int halfway; + + mbedtls_md_init( &ctx ); + mbedtls_md_init( &ctx_copy ); + + memset( md_name, 0x00, 100 ); + memset( output, 0x00, 100 ); + + strncpy( (char *) md_name, text_md_name, sizeof( md_name ) - 1 ); + md_info = mbedtls_md_info_from_string(md_name); + TEST_ASSERT( md_info != NULL ); + TEST_ASSERT ( 0 == mbedtls_md_setup( &ctx, md_info, 0 ) ); + TEST_ASSERT ( 0 == mbedtls_md_setup( &ctx_copy, md_info, 0 ) ); + + halfway = src_str->len / 2; + + TEST_ASSERT ( 0 == mbedtls_md_starts( &ctx ) ); + TEST_ASSERT ( ctx.md_ctx != NULL ); + TEST_ASSERT ( 0 == mbedtls_md_update( &ctx, src_str->x, halfway ) ); + TEST_ASSERT ( 0 == mbedtls_md_clone( &ctx_copy, &ctx ) ); + + TEST_ASSERT ( 0 == mbedtls_md_update( &ctx, src_str->x + halfway, src_str->len - halfway) ); + TEST_ASSERT ( 0 == mbedtls_md_finish( &ctx, output ) ); + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, + mbedtls_md_get_size( md_info ), + hash->len ) == 0 ); + + /* Test clone */ + memset( output, 0x00, 100 ); + + TEST_ASSERT ( 0 == mbedtls_md_update( &ctx_copy, src_str->x + halfway, src_str->len - halfway ) ); + TEST_ASSERT ( 0 == mbedtls_md_finish( &ctx_copy, output ) ); + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, + mbedtls_md_get_size( md_info ), + hash->len ) == 0 ); + +exit: + mbedtls_md_free( &ctx ); + mbedtls_md_free( &ctx_copy ); +} + +void test_md_hex_multi_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + + test_md_hex_multi( (char *) params[0], &data1, &data3 ); +} +void test_mbedtls_md_hmac( char * text_md_name, int trunc_size, + data_t * key_str, data_t * src_str, + data_t * hash ) +{ + char md_name[100]; + unsigned char output[100]; + const mbedtls_md_info_t *md_info = NULL; + + memset( md_name, 0x00, 100 ); + memset( output, 0x00, 100 ); + + strncpy( (char *) md_name, text_md_name, sizeof( md_name ) - 1 ); + md_info = mbedtls_md_info_from_string( md_name ); + TEST_ASSERT( md_info != NULL ); + + + TEST_ASSERT ( mbedtls_md_hmac( md_info, key_str->x, key_str->len, src_str->x, src_str->len, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, + trunc_size, hash->len ) == 0 ); +exit: + ; +} + +void test_mbedtls_md_hmac_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_mbedtls_md_hmac( (char *) params[0], *( (int *) params[1] ), &data2, &data4, &data6 ); +} +void test_md_hmac_multi( char * text_md_name, int trunc_size, data_t * key_str, + data_t * src_str, data_t * hash ) +{ + char md_name[100]; + unsigned char output[100]; + const mbedtls_md_info_t *md_info = NULL; + mbedtls_md_context_t ctx; + int halfway; + + mbedtls_md_init( &ctx ); + + memset( md_name, 0x00, 100 ); + memset( output, 0x00, 100 ); + + strncpy( (char *) md_name, text_md_name, sizeof( md_name ) - 1 ); + md_info = mbedtls_md_info_from_string( md_name ); + TEST_ASSERT( md_info != NULL ); + TEST_ASSERT ( 0 == mbedtls_md_setup( &ctx, md_info, 1 ) ); + + halfway = src_str->len / 2; + + TEST_ASSERT ( 0 == mbedtls_md_hmac_starts( &ctx, key_str->x, key_str->len ) ); + TEST_ASSERT ( ctx.md_ctx != NULL ); + TEST_ASSERT ( 0 == mbedtls_md_hmac_update( &ctx, src_str->x, halfway ) ); + TEST_ASSERT ( 0 == mbedtls_md_hmac_update( &ctx, src_str->x + halfway, src_str->len - halfway ) ); + TEST_ASSERT ( 0 == mbedtls_md_hmac_finish( &ctx, output ) ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, + trunc_size, hash->len ) == 0 ); + + /* Test again, for reset() */ + memset( output, 0x00, 100 ); + + TEST_ASSERT ( 0 == mbedtls_md_hmac_reset( &ctx ) ); + TEST_ASSERT ( 0 == mbedtls_md_hmac_update( &ctx, src_str->x, halfway ) ); + TEST_ASSERT ( 0 == mbedtls_md_hmac_update( &ctx, src_str->x + halfway, src_str->len - halfway ) ); + TEST_ASSERT ( 0 == mbedtls_md_hmac_finish( &ctx, output ) ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, + trunc_size, hash->len ) == 0 ); + +exit: + mbedtls_md_free( &ctx ); +} + +void test_md_hmac_multi_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_md_hmac_multi( (char *) params[0], *( (int *) params[1] ), &data2, &data4, &data6 ); +} +#if defined(MBEDTLS_FS_IO) +void test_mbedtls_md_file( char * text_md_name, char * filename, + data_t * hash ) +{ + char md_name[100]; + unsigned char output[100]; + const mbedtls_md_info_t *md_info = NULL; + + memset( md_name, 0x00, 100 ); + memset( output, 0x00, 100 ); + + strncpy( (char *) md_name, text_md_name, sizeof( md_name ) - 1 ); + md_info = mbedtls_md_info_from_string( md_name ); + TEST_ASSERT( md_info != NULL ); + + TEST_ASSERT( mbedtls_md_file( md_info, filename, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, + mbedtls_md_get_size( md_info ), + hash->len ) == 0 ); +exit: + ; +} + +void test_mbedtls_md_file_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_mbedtls_md_file( (char *) params[0], (char *) params[1], &data2 ); +} +#endif /* MBEDTLS_FS_IO */ +#endif /* MBEDTLS_MD_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_MD_C) + + case 0: + { + *out_value = MBEDTLS_MD_MD2; + } + break; + case 1: + { + *out_value = MBEDTLS_MD_MD4; + } + break; + case 2: + { + *out_value = MBEDTLS_MD_MD5; + } + break; + case 3: + { + *out_value = MBEDTLS_MD_RIPEMD160; + } + break; + case 4: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 5: + { + *out_value = MBEDTLS_MD_SHA224; + } + break; + case 6: + { + *out_value = MBEDTLS_MD_SHA256; + } + break; + case 7: + { + *out_value = MBEDTLS_MD_SHA384; + } + break; + case 8: + { + *out_value = MBEDTLS_MD_SHA512; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_MD_C) + + case 0: + { +#if defined(MBEDTLS_MD2_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_MD4_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_MD5_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_RIPEMD160_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 5: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 6: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 7: + { +#if !defined(MBEDTLS_SHA512_NO_SHA384) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 8: + { +#if defined(MBEDTLS_MD_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_MD_C) + test_mbedtls_md_process_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_MD_C) + test_md_null_args_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_MD_C) + test_md_info_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_MD_C) + test_md_text_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_MD_C) + test_md_hex_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_MD_C) + test_md_text_multi_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_MD_C) + test_md_hex_multi_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_MD_C) + test_mbedtls_md_hmac_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_MD_C) + test_md_hmac_multi_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_MD_C) && defined(MBEDTLS_FS_IO) + test_mbedtls_md_file_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_md.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_md.datax b/third_party/mbedtls/test/test_suite_md.datax new file mode 100644 index 000000000..c7e63081c --- /dev/null +++ b/third_party/mbedtls/test/test_suite_md.datax @@ -0,0 +1,1226 @@ +MD process +0 + +MD NULL/uninitialised arguments +1 + +Information on MD2 +depends_on:0 +2:exp:0:char*:"MD2":int:16 + +Information on MD4 +depends_on:1 +2:exp:1:char*:"MD4":int:16 + +Information on MD5 +depends_on:2 +2:exp:2:char*:"MD5":int:16 + +Information on RIPEMD160 +depends_on:3 +2:exp:3:char*:"RIPEMD160":int:20 + +Information on SHA1 +depends_on:4 +2:exp:4:char*:"SHA1":int:20 + +Information on SHA224 +depends_on:5 +2:exp:5:char*:"SHA224":int:28 + +Information on SHA256 +depends_on:5 +2:exp:6:char*:"SHA256":int:32 + +Information on SHA384 +depends_on:6:7 +2:exp:7:char*:"SHA384":int:48 + +Information on SHA512 +depends_on:6 +2:exp:8:char*:"SHA512":int:64 + +generic mbedtls_md2 Test vector RFC1319 #1 +depends_on:0 +3:char*:"MD2":char*:"":hex:"8350e5a3e24c153df2275c9f80692773" + +generic mbedtls_md2 Test vector RFC1319 #2 +depends_on:0 +3:char*:"MD2":char*:"a":hex:"32ec01ec4a6dac72c0ab96fb34c0b5d1" + +generic mbedtls_md2 Test vector RFC1319 #3 +depends_on:0 +3:char*:"MD2":char*:"abc":hex:"da853b0d3f88d99b30283a69e6ded6bb" + +generic mbedtls_md2 Test vector RFC1319 #4 +depends_on:0 +3:char*:"MD2":char*:"message digest":hex:"ab4f496bfb2a530b219ff33031fe06b0" + +generic mbedtls_md2 Test vector RFC1319 #5 +depends_on:0 +3:char*:"MD2":char*:"abcdefghijklmnopqrstuvwxyz":hex:"4e8ddff3650292ab5a4108c3aa47940b" + +generic mbedtls_md2 Test vector RFC1319 #6 +depends_on:0 +3:char*:"MD2":char*:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789":hex:"da33def2a42df13975352846c30338cd" + +generic mbedtls_md2 Test vector RFC1319 #7 +depends_on:0 +3:char*:"MD2":char*:"12345678901234567890123456789012345678901234567890123456789012345678901234567890":hex:"d5976f79d83d3a0dc9806c3c66f3efd8" + +generic mbedtls_md4 Test vector RFC1320 #1 +depends_on:1 +3:char*:"MD4":char*:"":hex:"31d6cfe0d16ae931b73c59d7e0c089c0" + +generic mbedtls_md4 Test vector RFC1320 #2 +depends_on:1 +3:char*:"MD4":char*:"a":hex:"bde52cb31de33e46245e05fbdbd6fb24" + +generic mbedtls_md4 Test vector RFC1320 #3 +depends_on:1 +3:char*:"MD4":char*:"abc":hex:"a448017aaf21d8525fc10ae87aa6729d" + +generic mbedtls_md4 Test vector RFC1320 #4 +depends_on:1 +3:char*:"MD4":char*:"message digest":hex:"d9130a8164549fe818874806e1c7014b" + +generic mbedtls_md4 Test vector RFC1320 #5 +depends_on:1 +3:char*:"MD4":char*:"abcdefghijklmnopqrstuvwxyz":hex:"d79e1c308aa5bbcdeea8ed63df412da9" + +generic mbedtls_md4 Test vector RFC1320 #6 +depends_on:1 +3:char*:"MD4":char*:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789":hex:"043f8582f241db351ce627e153e7f0e4" + +generic mbedtls_md4 Test vector RFC1320 #7 +depends_on:1 +3:char*:"MD4":char*:"12345678901234567890123456789012345678901234567890123456789012345678901234567890":hex:"e33b4ddc9c38f2199c3e7b164fcc0536" + +generic mbedtls_md5 Test vector RFC1321 #1 +depends_on:2 +3:char*:"MD5":char*:"":hex:"d41d8cd98f00b204e9800998ecf8427e" + +generic mbedtls_md5 Test vector RFC1321 #2 +depends_on:2 +3:char*:"MD5":char*:"a":hex:"0cc175b9c0f1b6a831c399e269772661" + +generic mbedtls_md5 Test vector RFC1321 #3 +depends_on:2 +3:char*:"MD5":char*:"abc":hex:"900150983cd24fb0d6963f7d28e17f72" + +generic mbedtls_md5 Test vector RFC1321 #4 +depends_on:2 +3:char*:"MD5":char*:"message digest":hex:"f96b697d7cb7938d525a2f31aaf161d0" + +generic mbedtls_md5 Test vector RFC1321 #5 +depends_on:2 +3:char*:"MD5":char*:"abcdefghijklmnopqrstuvwxyz":hex:"c3fcd3d76192e4007dfb496cca67e13b" + +generic mbedtls_md5 Test vector RFC1321 #6 +depends_on:2 +3:char*:"MD5":char*:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789":hex:"d174ab98d277d9f5a5611c2c9f419d9f" + +generic mbedtls_md5 Test vector RFC1321 #7 +depends_on:2 +3:char*:"MD5":char*:"12345678901234567890123456789012345678901234567890123456789012345678901234567890":hex:"57edf4a22be3c955ac49da2e2107b67a" + +generic mbedtls_ripemd160 Test vector from paper #1 +depends_on:3 +3:char*:"RIPEMD160":char*:"":hex:"9c1185a5c5e9fc54612808977ee8f548b2258d31" + +generic mbedtls_ripemd160 Test vector from paper #2 +depends_on:3 +3:char*:"RIPEMD160":char*:"a":hex:"0bdc9d2d256b3ee9daae347be6f4dc835a467ffe" + +generic mbedtls_ripemd160 Test vector from paper #3 +depends_on:3 +3:char*:"RIPEMD160":char*:"abc":hex:"8eb208f7e05d987a9b044a8e98c6b087f15a0bfc" + +generic mbedtls_ripemd160 Test vector from paper #4 +depends_on:3 +3:char*:"RIPEMD160":char*:"message digest":hex:"5d0689ef49d2fae572b881b123a85ffa21595f36" + +generic mbedtls_ripemd160 Test vector from paper #5 +depends_on:3 +3:char*:"RIPEMD160":char*:"abcdefghijklmnopqrstuvwxyz":hex:"f71c27109c692c1b56bbdceb5b9d2865b3708dbc" + +generic mbedtls_ripemd160 Test vector from paper #6 +depends_on:3 +3:char*:"RIPEMD160":char*:"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq":hex:"12a053384a9c0c88e405a06c27dcf49ada62eb2b" + +generic mbedtls_ripemd160 Test vector from paper #7 +depends_on:3 +3:char*:"RIPEMD160":char*:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789":hex:"b0e20b6e3116640286ed3a87a5713079b21f5189" + +generic mbedtls_ripemd160 Test vector from paper #8 +depends_on:3 +3:char*:"RIPEMD160":char*:"12345678901234567890123456789012345678901234567890123456789012345678901234567890":hex:"9b752e45573d4b39f4dbd3323cab82bf63326bfb" + +generic HMAC-MD2 Hash File OpenSSL test #1 +depends_on:0 +7:char*:"MD2":int:16:hex:"61616161616161616161616161616161":hex:"b91ce5ac77d33c234e61002ed6":hex:"d5732582f494f5ddf35efd166c85af9c" + +generic HMAC-MD2 Hash File OpenSSL test #2 +depends_on:0 +7:char*:"MD2":int:16:hex:"61616161616161616161616161616161":hex:"270fcf11f27c27448457d7049a7edb084a3e554e0b2acf5806982213f0ad516402e4c869c4ff2171e18e3489baa3125d2c3056ebb616296f9b6aa97ef68eeabcdc0b6dde47775004096a241efcf0a90d19b34e898cc7340cdc940f8bdd46e23e352f34bca131d4d67a7c2ddb8d0d68b67f06152a128168e1c341c37e0a66c5018999b7059bcc300beed2c19dd1152d2fe062853293b8f3c8b5":hex:"54ab68503f7d1b5c7741340dff2722a9" + +generic HMAC-MD2 Hash File OpenSSL test #3 +depends_on:0 +7:char*:"MD2":int:16:hex:"61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161":hex:"b91ce5ac77d33c234e61002ed6":hex:"d850e5f554558cf0fe79a0612e1d0365" + +generic HMAC-MD4 Hash File OpenSSL test #1 +depends_on:1 +7:char*:"MD4":int:16:hex:"61616161616161616161616161616161":hex:"b91ce5ac77d33c234e61002ed6":hex:"eabd0fbefb82fb0063a25a6d7b8bdc0f" + +generic HMAC-MD4 Hash File OpenSSL test #2 +depends_on:1 +7:char*:"MD4":int:16:hex:"61616161616161616161616161616161":hex:"270fcf11f27c27448457d7049a7edb084a3e554e0b2acf5806982213f0ad516402e4c869c4ff2171e18e3489baa3125d2c3056ebb616296f9b6aa97ef68eeabcdc0b6dde47775004096a241efcf0a90d19b34e898cc7340cdc940f8bdd46e23e352f34bca131d4d67a7c2ddb8d0d68b67f06152a128168e1c341c37e0a66c5018999b7059bcc300beed2c19dd1152d2fe062853293b8f3c8b5":hex:"cec3c5e421a7b783aa89cacf78daf6dc" + +generic HMAC-MD4 Hash File OpenSSL test #3 +depends_on:1 +7:char*:"MD4":int:16:hex:"61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161":hex:"b91ce5ac77d33c234e61002ed6":hex:"ad5f0a04116109b397b57f9cc9b6df4b" + +generic HMAC-MD5 Hash File OpenSSL test #1 +depends_on:2 +7:char*:"MD5":int:16:hex:"61616161616161616161616161616161":hex:"b91ce5ac77d33c234e61002ed6":hex:"42552882f00bd4633ea81135a184b284" + +generic HMAC-MD5 Hash File OpenSSL test #2 +depends_on:2 +7:char*:"MD5":int:16:hex:"61616161616161616161616161616161":hex:"270fcf11f27c27448457d7049a7edb084a3e554e0b2acf5806982213f0ad516402e4c869c4ff2171e18e3489baa3125d2c3056ebb616296f9b6aa97ef68eeabcdc0b6dde47775004096a241efcf0a90d19b34e898cc7340cdc940f8bdd46e23e352f34bca131d4d67a7c2ddb8d0d68b67f06152a128168e1c341c37e0a66c5018999b7059bcc300beed2c19dd1152d2fe062853293b8f3c8b5":hex:"a16a842891786d01fe50ba7731db7464" + +generic HMAC-MD5 Hash File OpenSSL test #3 +depends_on:2 +7:char*:"MD5":int:16:hex:"61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161":hex:"b91ce5ac77d33c234e61002ed6":hex:"e97f623936f98a7f741c4bd0612fecc2" + +HMAC-MD2 Bouncy Castle test #1 +depends_on:0 +7:char*:"MD2":int:16:hex:"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b":hex:"4869205468657265":hex:"dc1923ef5f161d35bef839ca8c807808" + +HMAC-MD4 Bouncy Castle test #1 +depends_on:1 +7:char*:"MD4":int:16:hex:"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b":hex:"4869205468657265":hex:"5570ce964ba8c11756cdc3970278ff5a" + +HMAC-MD5 Bouncy Castle test #1 +depends_on:2 +7:char*:"MD5":int:16:hex:"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b":hex:"4869205468657265":hex:"5ccec34ea9656392457fa1ac27f08fbc" + +generic HMAC-MD5 Test Vector RFC2202 #1 +depends_on:2 +7:char*:"MD5":int:16:hex:"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b":hex:"4869205468657265":hex:"9294727a3638bb1c13f48ef8158bfc9d" + +generic HMAC-MD5 Test Vector RFC2202 #2 +depends_on:2 +7:char*:"MD5":int:16:hex:"4a656665":hex:"7768617420646f2079612077616e7420666f72206e6f7468696e673f":hex:"750c783e6ab0b503eaa86e310a5db738" + +generic HMAC-MD5 Test Vector RFC2202 #3 +depends_on:2 +7:char*:"MD5":int:16:hex:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":hex:"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd":hex:"56be34521d144c88dbb8c733f0e8b3f6" + +generic HMAC-MD5 Test Vector RFC2202 #4 +depends_on:2 +7:char*:"MD5":int:16:hex:"0102030405060708090a0b0c0d0e0f10111213141516171819":hex:"cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd":hex:"697eaf0aca3a3aea3a75164746ffaa79" + +generic HMAC-MD5 Test Vector RFC2202 #5 +depends_on:2 +7:char*:"MD5":int:12:hex:"0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c":hex:"546573742057697468205472756e636174696f6e":hex:"56461ef2342edc00f9bab995" + +generic HMAC-MD5 Test Vector RFC2202 #6 +depends_on:2 +7:char*:"MD5":int:16:hex:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":hex:"54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b6579202d2048617368204b6579204669727374":hex:"6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd" + +generic HMAC-MD5 Test Vector RFC2202 #7 +depends_on:2 +7:char*:"MD5":int:16:hex:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":hex:"54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b657920616e64204c6172676572205468616e204f6e6520426c6f636b2d53697a652044617461":hex:"6f630fad67cda0ee1fb1f562db3aa53e" + +generic HMAC-RIPEMD160 Test vector RFC 2286 #1 +depends_on:3 +7:char*:"RIPEMD160":int:20:hex:"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b":hex:"4869205468657265":hex:"24cb4bd67d20fc1a5d2ed7732dcc39377f0a5668" + +generic HMAC-RIPEMD160 Test vector RFC 2286 #2 +depends_on:3 +7:char*:"RIPEMD160":int:20:hex:"4a656665":hex:"7768617420646f2079612077616e7420666f72206e6f7468696e673f":hex:"dda6c0213a485a9e24f4742064a7f033b43c4069" + +generic HMAC-RIPEMD160 Test vector RFC 2286 #3 +depends_on:3 +7:char*:"RIPEMD160":int:20:hex:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":hex:"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd":hex:"b0b105360de759960ab4f35298e116e295d8e7c1" + +generic HMAC-RIPEMD160 Test vector RFC 2286 #4 +depends_on:3 +7:char*:"RIPEMD160":int:20:hex:"0102030405060708090a0b0c0d0e0f10111213141516171819":hex:"cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd":hex:"d5ca862f4d21d5e610e18b4cf1beb97a4365ecf4" + +generic HMAC-RIPEMD160 Test vector RFC 2286 #5 +depends_on:3 +7:char*:"RIPEMD160":int:20:hex:"0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c":hex:"546573742057697468205472756e636174696f6e":hex:"7619693978f91d90539ae786500ff3d8e0518e39" + +generic HMAC-RIPEMD160 Test vector RFC 2286 #6 +depends_on:3 +7:char*:"RIPEMD160":int:20:hex:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":hex:"54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b6579202d2048617368204b6579204669727374":hex:"6466ca07ac5eac29e1bd523e5ada7605b791fd8b" + +generic HMAC-RIPEMD160 Test vector RFC 2286 #7 +depends_on:3 +7:char*:"RIPEMD160":int:20:hex:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":hex:"54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b657920616e64204c6172676572205468616e204f6e6520426c6f636b2d53697a652044617461":hex:"69ea60798d71616cce5fd0871e23754cd75d5a0a" + +generic multi step mbedtls_md2 Test vector RFC1319 #1 +depends_on:8:0 +5:char*:"MD2":char*:"":hex:"8350e5a3e24c153df2275c9f80692773" + +generic multi step mbedtls_md2 Test vector RFC1319 #2 +depends_on:0 +5:char*:"MD2":char*:"a":hex:"32ec01ec4a6dac72c0ab96fb34c0b5d1" + +generic multi step mbedtls_md2 Test vector RFC1319 #3 +depends_on:0 +5:char*:"MD2":char*:"abc":hex:"da853b0d3f88d99b30283a69e6ded6bb" + +generic multi step mbedtls_md2 Test vector RFC1319 #4 +depends_on:0 +5:char*:"MD2":char*:"message digest":hex:"ab4f496bfb2a530b219ff33031fe06b0" + +generic multi step mbedtls_md2 Test vector RFC1319 #5 +depends_on:0 +5:char*:"MD2":char*:"abcdefghijklmnopqrstuvwxyz":hex:"4e8ddff3650292ab5a4108c3aa47940b" + +generic multi step mbedtls_md2 Test vector RFC1319 #6 +depends_on:0 +5:char*:"MD2":char*:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789":hex:"da33def2a42df13975352846c30338cd" + +generic multi step mbedtls_md2 Test vector RFC1319 #7 +depends_on:0 +5:char*:"MD2":char*:"12345678901234567890123456789012345678901234567890123456789012345678901234567890":hex:"d5976f79d83d3a0dc9806c3c66f3efd8" + +generic multi step mbedtls_md4 Test vector RFC1320 #1 +depends_on:1 +5:char*:"MD4":char*:"":hex:"31d6cfe0d16ae931b73c59d7e0c089c0" + +generic multi step mbedtls_md4 Test vector RFC1320 #2 +depends_on:1 +5:char*:"MD4":char*:"a":hex:"bde52cb31de33e46245e05fbdbd6fb24" + +generic multi step mbedtls_md4 Test vector RFC1320 #3 +depends_on:1 +5:char*:"MD4":char*:"abc":hex:"a448017aaf21d8525fc10ae87aa6729d" + +generic multi step mbedtls_md4 Test vector RFC1320 #4 +depends_on:1 +5:char*:"MD4":char*:"message digest":hex:"d9130a8164549fe818874806e1c7014b" + +generic multi step mbedtls_md4 Test vector RFC1320 #5 +depends_on:1 +5:char*:"MD4":char*:"abcdefghijklmnopqrstuvwxyz":hex:"d79e1c308aa5bbcdeea8ed63df412da9" + +generic multi step mbedtls_md4 Test vector RFC1320 #6 +depends_on:1 +5:char*:"MD4":char*:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789":hex:"043f8582f241db351ce627e153e7f0e4" + +generic multi step mbedtls_md4 Test vector RFC1320 #7 +depends_on:1 +5:char*:"MD4":char*:"12345678901234567890123456789012345678901234567890123456789012345678901234567890":hex:"e33b4ddc9c38f2199c3e7b164fcc0536" + +generic multi step mbedtls_md5 Test vector RFC1321 #1 +depends_on:2 +5:char*:"MD5":char*:"":hex:"d41d8cd98f00b204e9800998ecf8427e" + +generic multi step mbedtls_md5 Test vector RFC1321 #2 +depends_on:2 +5:char*:"MD5":char*:"a":hex:"0cc175b9c0f1b6a831c399e269772661" + +generic multi step mbedtls_md5 Test vector RFC1321 #3 +depends_on:2 +5:char*:"MD5":char*:"abc":hex:"900150983cd24fb0d6963f7d28e17f72" + +generic multi step mbedtls_md5 Test vector RFC1321 #4 +depends_on:2 +5:char*:"MD5":char*:"message digest":hex:"f96b697d7cb7938d525a2f31aaf161d0" + +generic multi step mbedtls_md5 Test vector RFC1321 #5 +depends_on:2 +5:char*:"MD5":char*:"abcdefghijklmnopqrstuvwxyz":hex:"c3fcd3d76192e4007dfb496cca67e13b" + +generic multi step mbedtls_md5 Test vector RFC1321 #6 +depends_on:2 +5:char*:"MD5":char*:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789":hex:"d174ab98d277d9f5a5611c2c9f419d9f" + +generic multi step mbedtls_md5 Test vector RFC1321 #7 +depends_on:2 +5:char*:"MD5":char*:"12345678901234567890123456789012345678901234567890123456789012345678901234567890":hex:"57edf4a22be3c955ac49da2e2107b67a" + +generic multi step mbedtls_ripemd160 Test vector from paper #1 +depends_on:3 +5:char*:"RIPEMD160":char*:"":hex:"9c1185a5c5e9fc54612808977ee8f548b2258d31" + +generic multi step mbedtls_ripemd160 Test vector from paper #2 +depends_on:3 +5:char*:"RIPEMD160":char*:"a":hex:"0bdc9d2d256b3ee9daae347be6f4dc835a467ffe" + +generic multi step mbedtls_ripemd160 Test vector from paper #3 +depends_on:3 +5:char*:"RIPEMD160":char*:"abc":hex:"8eb208f7e05d987a9b044a8e98c6b087f15a0bfc" + +generic multi step mbedtls_ripemd160 Test vector from paper #4 +depends_on:3 +5:char*:"RIPEMD160":char*:"message digest":hex:"5d0689ef49d2fae572b881b123a85ffa21595f36" + +generic multi step mbedtls_ripemd160 Test vector from paper #5 +depends_on:3 +5:char*:"RIPEMD160":char*:"abcdefghijklmnopqrstuvwxyz":hex:"f71c27109c692c1b56bbdceb5b9d2865b3708dbc" + +generic multi step mbedtls_ripemd160 Test vector from paper #6 +depends_on:3 +5:char*:"RIPEMD160":char*:"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq":hex:"12a053384a9c0c88e405a06c27dcf49ada62eb2b" + +generic multi step mbedtls_ripemd160 Test vector from paper #7 +depends_on:3 +5:char*:"RIPEMD160":char*:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789":hex:"b0e20b6e3116640286ed3a87a5713079b21f5189" + +generic multi step mbedtls_ripemd160 Test vector from paper #8 +depends_on:3 +5:char*:"RIPEMD160":char*:"12345678901234567890123456789012345678901234567890123456789012345678901234567890":hex:"9b752e45573d4b39f4dbd3323cab82bf63326bfb" + +generic multi step HMAC-MD2 Hash File OpenSSL test #1 +depends_on:0 +8:char*:"MD2":int:16:hex:"61616161616161616161616161616161":hex:"b91ce5ac77d33c234e61002ed6":hex:"d5732582f494f5ddf35efd166c85af9c" + +generic multi step HMAC-MD2 Hash File OpenSSL test #2 +depends_on:0 +8:char*:"MD2":int:16:hex:"61616161616161616161616161616161":hex:"270fcf11f27c27448457d7049a7edb084a3e554e0b2acf5806982213f0ad516402e4c869c4ff2171e18e3489baa3125d2c3056ebb616296f9b6aa97ef68eeabcdc0b6dde47775004096a241efcf0a90d19b34e898cc7340cdc940f8bdd46e23e352f34bca131d4d67a7c2ddb8d0d68b67f06152a128168e1c341c37e0a66c5018999b7059bcc300beed2c19dd1152d2fe062853293b8f3c8b5":hex:"54ab68503f7d1b5c7741340dff2722a9" + +generic multi step HMAC-MD2 Hash File OpenSSL test #3 +depends_on:0 +8:char*:"MD2":int:16:hex:"61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161":hex:"b91ce5ac77d33c234e61002ed6":hex:"d850e5f554558cf0fe79a0612e1d0365" + +generic multi step HMAC-MD4 Hash File OpenSSL test #1 +depends_on:1 +8:char*:"MD4":int:16:hex:"61616161616161616161616161616161":hex:"b91ce5ac77d33c234e61002ed6":hex:"eabd0fbefb82fb0063a25a6d7b8bdc0f" + +generic multi step HMAC-MD4 Hash File OpenSSL test #2 +depends_on:1 +8:char*:"MD4":int:16:hex:"61616161616161616161616161616161":hex:"270fcf11f27c27448457d7049a7edb084a3e554e0b2acf5806982213f0ad516402e4c869c4ff2171e18e3489baa3125d2c3056ebb616296f9b6aa97ef68eeabcdc0b6dde47775004096a241efcf0a90d19b34e898cc7340cdc940f8bdd46e23e352f34bca131d4d67a7c2ddb8d0d68b67f06152a128168e1c341c37e0a66c5018999b7059bcc300beed2c19dd1152d2fe062853293b8f3c8b5":hex:"cec3c5e421a7b783aa89cacf78daf6dc" + +generic multi step HMAC-MD4 Hash File OpenSSL test #3 +depends_on:1 +8:char*:"MD4":int:16:hex:"61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161":hex:"b91ce5ac77d33c234e61002ed6":hex:"ad5f0a04116109b397b57f9cc9b6df4b" + +generic multi step HMAC-MD5 Hash File OpenSSL test #1 +depends_on:2 +8:char*:"MD5":int:16:hex:"61616161616161616161616161616161":hex:"b91ce5ac77d33c234e61002ed6":hex:"42552882f00bd4633ea81135a184b284" + +generic multi step HMAC-MD5 Hash File OpenSSL test #2 +depends_on:2 +8:char*:"MD5":int:16:hex:"61616161616161616161616161616161":hex:"270fcf11f27c27448457d7049a7edb084a3e554e0b2acf5806982213f0ad516402e4c869c4ff2171e18e3489baa3125d2c3056ebb616296f9b6aa97ef68eeabcdc0b6dde47775004096a241efcf0a90d19b34e898cc7340cdc940f8bdd46e23e352f34bca131d4d67a7c2ddb8d0d68b67f06152a128168e1c341c37e0a66c5018999b7059bcc300beed2c19dd1152d2fe062853293b8f3c8b5":hex:"a16a842891786d01fe50ba7731db7464" + +generic multi step HMAC-MD5 Hash File OpenSSL test #3 +depends_on:2 +8:char*:"MD5":int:16:hex:"61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161":hex:"b91ce5ac77d33c234e61002ed6":hex:"e97f623936f98a7f741c4bd0612fecc2" + +generic multi step HMAC-MD5 Test Vector RFC2202 #1 +depends_on:2 +8:char*:"MD5":int:16:hex:"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b":hex:"4869205468657265":hex:"9294727a3638bb1c13f48ef8158bfc9d" + +generic multi step HMAC-MD5 Test Vector RFC2202 #2 +depends_on:2 +8:char*:"MD5":int:16:hex:"4a656665":hex:"7768617420646f2079612077616e7420666f72206e6f7468696e673f":hex:"750c783e6ab0b503eaa86e310a5db738" + +generic multi step HMAC-MD5 Test Vector RFC2202 #3 +depends_on:2 +8:char*:"MD5":int:16:hex:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":hex:"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd":hex:"56be34521d144c88dbb8c733f0e8b3f6" + +generic multi step HMAC-MD5 Test Vector RFC2202 #4 +depends_on:2 +8:char*:"MD5":int:16:hex:"0102030405060708090a0b0c0d0e0f10111213141516171819":hex:"cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd":hex:"697eaf0aca3a3aea3a75164746ffaa79" + +generic multi step HMAC-MD5 Test Vector RFC2202 #5 +depends_on:2 +8:char*:"MD5":int:12:hex:"0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c":hex:"546573742057697468205472756e636174696f6e":hex:"56461ef2342edc00f9bab995" + +generic multi step HMAC-MD5 Test Vector RFC2202 #6 +depends_on:2 +8:char*:"MD5":int:16:hex:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":hex:"54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b6579202d2048617368204b6579204669727374":hex:"6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd" + +generic multi step HMAC-MD5 Test Vector RFC2202 #7 +depends_on:2 +8:char*:"MD5":int:16:hex:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":hex:"54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b657920616e64204c6172676572205468616e204f6e6520426c6f636b2d53697a652044617461":hex:"6f630fad67cda0ee1fb1f562db3aa53e" + +generic multi step HMAC-RIPEMD160 Test vector RFC 2286 #1 +depends_on:3 +8:char*:"RIPEMD160":int:20:hex:"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b":hex:"4869205468657265":hex:"24cb4bd67d20fc1a5d2ed7732dcc39377f0a5668" + +generic multi step HMAC-RIPEMD160 Test vector RFC 2286 #2 +depends_on:3 +8:char*:"RIPEMD160":int:20:hex:"4a656665":hex:"7768617420646f2079612077616e7420666f72206e6f7468696e673f":hex:"dda6c0213a485a9e24f4742064a7f033b43c4069" + +generic multi step HMAC-RIPEMD160 Test vector RFC 2286 #3 +depends_on:3 +8:char*:"RIPEMD160":int:20:hex:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":hex:"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd":hex:"b0b105360de759960ab4f35298e116e295d8e7c1" + +generic multi step HMAC-RIPEMD160 Test vector RFC 2286 #4 +depends_on:3 +8:char*:"RIPEMD160":int:20:hex:"0102030405060708090a0b0c0d0e0f10111213141516171819":hex:"cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd":hex:"d5ca862f4d21d5e610e18b4cf1beb97a4365ecf4" + +generic multi step HMAC-RIPEMD160 Test vector RFC 2286 #5 +depends_on:3 +8:char*:"RIPEMD160":int:20:hex:"0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c":hex:"546573742057697468205472756e636174696f6e":hex:"7619693978f91d90539ae786500ff3d8e0518e39" + +generic multi step HMAC-RIPEMD160 Test vector RFC 2286 #6 +depends_on:3 +8:char*:"RIPEMD160":int:20:hex:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":hex:"54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b6579202d2048617368204b6579204669727374":hex:"6466ca07ac5eac29e1bd523e5ada7605b791fd8b" + +generic multi step HMAC-RIPEMD160 Test vector RFC 2286 #7 +depends_on:3 +8:char*:"RIPEMD160":int:20:hex:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa":hex:"54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b657920616e64204c6172676572205468616e204f6e6520426c6f636b2d53697a652044617461":hex:"69ea60798d71616cce5fd0871e23754cd75d5a0a" + +generic MD2 Hash file #1 +depends_on:0 +9:char*:"MD2":char*:"zip:third_party/mbedtls/test/data/hash_file_1":hex:"b593c098712d2e21628c8986695451a8" + +generic MD2 Hash file #2 +depends_on:0 +9:char*:"MD2":char*:"zip:third_party/mbedtls/test/data/hash_file_2":hex:"3c027b7409909a4c4b26bbab69ad9f4f" + +generic MD2 Hash file #3 +depends_on:0 +9:char*:"MD2":char*:"zip:third_party/mbedtls/test/data/hash_file_3":hex:"6bb43eb285e81f414083a94cdbe2989d" + +generic MD2 Hash file #4 +depends_on:0 +9:char*:"MD2":char*:"zip:third_party/mbedtls/test/data/hash_file_4":hex:"8350e5a3e24c153df2275c9f80692773" + +generic MD4 Hash file #1 +depends_on:1 +9:char*:"MD4":char*:"zip:third_party/mbedtls/test/data/hash_file_1":hex:"8d19772c176bd27153b9486715e2c0b9" + +generic MD4 Hash file #2 +depends_on:1 +9:char*:"MD4":char*:"zip:third_party/mbedtls/test/data/hash_file_2":hex:"f2ac53b8542882a5a0007c6f84b4d9fd" + +generic MD4 Hash file #3 +depends_on:1 +9:char*:"MD4":char*:"zip:third_party/mbedtls/test/data/hash_file_3":hex:"195c15158e2d07881d9a654095ce4a42" + +generic MD4 Hash file #4 +depends_on:1 +9:char*:"MD4":char*:"zip:third_party/mbedtls/test/data/hash_file_4":hex:"31d6cfe0d16ae931b73c59d7e0c089c0" + +generic MD5 Hash file #1 +depends_on:2 +9:char*:"MD5":char*:"zip:third_party/mbedtls/test/data/hash_file_1":hex:"52bcdc983c9ed64fc148a759b3c7a415" + +generic MD5 Hash file #2 +depends_on:2 +9:char*:"MD5":char*:"zip:third_party/mbedtls/test/data/hash_file_2":hex:"d17d466f15891df10542207ae78277f0" + +generic MD5 Hash file #3 +depends_on:2 +9:char*:"MD5":char*:"zip:third_party/mbedtls/test/data/hash_file_3":hex:"d945bcc6200ea95d061a2a818167d920" + +generic MD5 Hash file #4 +depends_on:2 +9:char*:"MD5":char*:"zip:third_party/mbedtls/test/data/hash_file_4":hex:"d41d8cd98f00b204e9800998ecf8427e" + +generic RIPEMD160 Hash file #0 (from paper) +depends_on:3 +9:char*:"RIPEMD160":char*:"zip:third_party/mbedtls/test/data/hash_file_5":hex:"52783243c1697bdbe16d37f97f68f08325dc1528" + +generic RIPEMD160 Hash file #1 +depends_on:3 +9:char*:"RIPEMD160":char*:"zip:third_party/mbedtls/test/data/hash_file_1":hex:"82f1d072f0ec0c2b353703a7b575a04c113af1a6" + +generic RIPEMD160 Hash file #2 +depends_on:3 +9:char*:"RIPEMD160":char*:"zip:third_party/mbedtls/test/data/hash_file_2":hex:"996fbc8b79206ba7393ebcd246584069b1c08f0f" + +generic RIPEMD160 Hash file #3 +depends_on:3 +9:char*:"RIPEMD160":char*:"zip:third_party/mbedtls/test/data/hash_file_3":hex:"8653b46d65998fa8c8846efa17937e742533ae48" + +generic RIPEMD160 Hash file #4 +depends_on:3 +9:char*:"RIPEMD160":char*:"zip:third_party/mbedtls/test/data/hash_file_4":hex:"9c1185a5c5e9fc54612808977ee8f548b2258d31" + +generic HMAC-SHA-1 Test Vector FIPS-198a #1 +depends_on:4 +7:char*:"SHA1":int:20:hex:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f":hex:"53616d706c65202331":hex:"4f4ca3d5d68ba7cc0a1208c9c61e9c5da0403c0a" + +generic HMAC-SHA-1 Test Vector FIPS-198a #2 +depends_on:4 +7:char*:"SHA1":int:20:hex:"303132333435363738393a3b3c3d3e3f40414243":hex:"53616d706c65202332":hex:"0922d3405faa3d194f82a45830737d5cc6c75d24" + +generic HMAC-SHA-1 Test Vector FIPS-198a #3 +depends_on:4 +7:char*:"SHA1":int:20:hex:"505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3":hex:"53616d706c65202333":hex:"bcf41eab8bb2d802f3d05caf7cb092ecf8d1a3aa" + +generic HMAC-SHA-1 Test Vector FIPS-198a #4 +depends_on:4 +7:char*:"SHA1":int:12:hex:"707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0":hex:"53616d706c65202334":hex:"9ea886efe268dbecce420c75" + +generic HMAC-SHA-1 Test Vector NIST CAVS #1 +depends_on:4 +7:char*:"SHA1":int:10:hex:"7b10f4124b15c82e":hex:"27dcb5b1daf60cfd3e2f73d4d64ca9c684f8bf71fc682a46793b1790afa4feb100ca7aaff26f58f0e1d0ed42f1cdad1f474afa2e79d53a0c42892c4d7b327cbe46b295ed8da3b6ecab3d4851687a6f812b79df2f6b20f11f6706f5301790ca99625aad7391d84f78043d2a0a239b1477984c157bbc9276064e7a1a406b0612ca":hex:"4ead12c2fe3d6ea43acb" + +generic HMAC-SHA-1 Test Vector NIST CAVS #2 +depends_on:4 +7:char*:"SHA1":int:10:hex:"4fe9fb902172a21b":hex:"4ceb3a7c13659c22fe51134f03dce4c239d181b63c6b0b59d367157fd05cab98384f92dfa482d2d5e78e72eef1b1838af4696026c54233d484ecbbe87f904df5546419f8567eafd232e6c2fcd3ee2b7682c63000524b078dbb2096f585007deae752562df1fe3b01278089e16f3be46e2d0f7cabac2d8e6cc02a2d0ca953425f":hex:"564428a67be1924b5793" + +generic HMAC-SHA-1 Test Vector NIST CAVS #3 +depends_on:4 +7:char*:"SHA1":int:10:hex:"d1f01455f78c4fb4":hex:"00d40f67b57914bec456a3e3201ef1464be319a8d188c02e157af4b54f9b5a66d67f898a9bdbb19ff63a80aba6f246d013575721d52eb1b47a65def884011c49b257bcc2817fc853f106e8138ce386d7a5ac3103de0a3fa0ed6bb7af9ff66ebd1cc46fb86e4da0013d20a3c2dcd8fb828a4b70f7f104b41bf3f44682a66497ea":hex:"56a665a7cdfe610f9fc5" + +generic HMAC-SHA-1 Test Vector NIST CAVS #4 +depends_on:4 +7:char*:"SHA1":int:10:hex:"4e5ef77fdf033a5b":hex:"e59326464e3201d195e29f2a3446ec1b1c9ff31154e2a4d0e40ed466f1bc855d29f76835624fa0127d29c9b1915939a046f385af7e5d47a23ba91f28bd22f811ea258dbbf3332bcd3543b8285d5df41bd064ffd64a341c22c4edb44f9c8d9e6df0c59dbf4a052a6c83da7478e179a6f3839c6870ff8ca8b9497f9ac1d725fdda":hex:"981c0a7a8423b63a8fa6" + +generic HMAC-SHA-1 Test Vector NIST CAVS #5 +depends_on:4 +7:char*:"SHA1":int:10:hex:"bcd9ff8aa60be2be":hex:"51be4d0eb37bab714f92e19e9d70390655b363e8cd346a748245e731f437759cb8206412c8dab2ef1d4f36f880f41ff69d949da4594fdecb65e23cac1329b59e69e29bf875b38c31df6fa546c595f35cc2192aa750679a8a51a65e00e839d73a8d8c598a610d237fbe78955213589d80efcb73b95b8586f96d17b6f51a71c3b8":hex:"84633f9f5040c8971478" + +generic HMAC-SHA-1 Test Vector NIST CAVS #6 +depends_on:4 +7:char*:"SHA1":int:10:hex:"4a661bce6ed86d21":hex:"5ff6c744f1aab1bc29697d71f67541b8b3cec3c7079183b10a83fb98a9ee251d4bac3e1cb581ca972aaed8efd7c2875a6fb4c991132f67c9742d45e53bc7e8eaa94b35b37a907be61086b426cd11088ac118934e85d968c9667fd69fc6f6ea38c0fe34710b7ece91211b9b7ea00acd31f022aa6726368f9928a1352f122233f1":hex:"739df59353ac6694e55e" + +generic HMAC-SHA-1 Test Vector NIST CAVS #7 +depends_on:4 +7:char*:"SHA1":int:10:hex:"1287e1565a57b547":hex:"390ffdccc6171c11568d85b8f913e019bf4cd982ca9cd21ea730d41bdf3fcc0bc88ff48ba13a8f23deb2d96ec1033e7b2a58ca72b0c1e17bf03330db25d1e360fa6918009c4294bd1215b5ccd159a8f58bc3dc3d490eb7c3b9f887e8c98dbbb274a75373dcb695a59abd0219529d88518a96f92abc0bbcbda985c388f1fbbcc9":hex:"d78ddf08077c7d9e2ba6" + +generic HMAC-SHA-224 Test Vector NIST CAVS #1 +depends_on:5 +7:char*:"SHA224":int:14:hex:"e055eb756697ee573fd3214811a9f7fa":hex:"3875847012ee42fe54a0027bdf38cca7021b83a2ed0503af69ef6c37c637bc1114fba40096c5947d736e19b7af3c68d95a4e3b8b073adbbb80f47e9db8f2d4f0018ddd847fabfdf9dd9b52c93e40458977725f6b7ba15f0816bb895cdf50401268f5d702b7e6a5f9faef57b8768c8a3fc14f9a4b3182b41d940e337d219b29ff":hex:"40a453133361cc48da11baf616ee" + +generic HMAC-SHA-224 Test Vector NIST CAVS #2 +depends_on:5 +7:char*:"SHA224":int:14:hex:"88e5258b55b1623385eb9632fa7c57d6":hex:"ada76bb604be14326551701cf30e48a65eee80b44f0b9d4a07b1844543b7844a621097fdc99de57387458ae9354899b620d0617eabcaefa9eef3d413a33628054335ce656c26fa2986e0f111a6351096b283101ec7868871d770b370973c7405983f9756b3005a3eab492cfd0e7eb42e5c2e15fa6be8718c0a50acc4e5717230":hex:"81c783af538015cef3c60095df53" + +generic HMAC-SHA-224 Test Vector NIST CAVS #3 +depends_on:5 +7:char*:"SHA224":int:14:hex:"85d402d822114d31abf75526e2538705":hex:"8020d8d98cc2e2298b32879c51c751e1dd5558fe2eabb8f158604297d6d072ce2261a1d6830b7cfe2617b57c7126f99c9476211d6161acd75d266da217ec8174b80484c9dc6f0448a0a036a3fc82e8bf54bdb71549368258d5d41f57978a4c266b92e8783ef66350215573d99be4089144b383ad8f3222bae8f3bf80ffb1bb2b":hex:"2aa0340ac9deafe3be38129daca0" + +generic HMAC-SHA-224 Test Vector NIST CAVS #4 +depends_on:5 +7:char*:"SHA224":int:14:hex:"545c6eecc5ee46fa17c59f91a94f81ae":hex:"8fb7f3565593170152ddb2021874784e951977cfdd22f8b72a72a61320a8f2a35697b5e913f717805559b1af1861ee3ed42fb788481e4fd276b17bdbefcae7b4501dc5d20de5b7626dd5efdcd65294db4bdf682c33d9a9255c6435383fa5f1c886326a3acbc6bd50a33ab5b2dbb034ce0112d4e226bbcd57e3731a519aa1d784":hex:"3eb566eac54c4a3a9ef092469f24" + +generic HMAC-SHA-224 Test Vector NIST CAVS #5 +depends_on:5 +7:char*:"SHA224":int:14:hex:"4466ab4dc438841a9750c7f173dff02e":hex:"2534c11c78c99cffaec8f722f04adc7045c7324d58ce98e37cfa94b6ed21ed7f58ce55379ef24b72d6d640ee9154f96c614734be9c408e225d7ba4cecc1179cc9f6e1808e1067aa8f244a99bd0c3267594c1887a40d167f8b7cf78db0d19f97b01fc50b8c86def490dfa7a5135002c33e71d77a8cce8ea0f93e0580439a33733":hex:"59f44a9bbed4875b892d22d6b5ab" + +generic HMAC-SHA-224 Test Vector NIST CAVS #6 +depends_on:5 +7:char*:"SHA224":int:28:hex:"0e3dd9bb5e4cf0f09a4c11600af56d8d":hex:"f4589fa76c328ea25cf8bae582026ba40a59d45a546ff31cf80eb826088f69bb954c452c74586836416dee90a5255bc5d56d3b405b3705a5197045688b32fa984c3a3dfbdc9c2460a0b5e6312a624048bb6f170306535e9b371a3ab134a2642a230ad03d2c688cca80baeaee9a20e1d4c548b1cede29c6a45bf4df2c8c476f1a":hex:"12175b93e3da4c58217145e4dc0a1cf142fab9319bb501e037b350ba" + +generic HMAC-SHA-224 Test Vector NIST CAVS #7 +depends_on:5 +7:char*:"SHA224":int:28:hex:"cda5187b0c5dcb0f8e5a8beed2306584":hex:"9011ae29b44c49b347487ce972965f16ade3c15be0856ce9c853a9739dba07e4f20d594ddc1dfe21560a65a4e458cfa17745575b915a30c7a9412ff8d1d689db9680dd2428c27588bb0dc92d2cd9445fe8f44b840a197c52c3c4333fff45533945134398df6436513cfab06c924046b8c795a5bd92e8d5f2de85bf306f2eed67":hex:"4aaba92b40e2a600feab176eb9b292d814864195c03342aad6f67f08" + +generic HMAC-SHA-256 Test Vector NIST CAVS #1 +depends_on:5 +7:char*:"SHA256":int:16:hex:"cdffd34e6b16fdc0":hex:"d83e78b99ab61709608972b36e76a575603db742269cc5dd4e7d5ca7816e26b65151c92632550cb4c5253c885d5fce53bc47459a1dbd5652786c4aac0145a532f12c05138af04cbb558101a7af5df478834c2146594dd73690d01a4fe72545894335f427ac70204798068cb86c5a600b40b414ede23590b41e1192373df84fe3":hex:"c6f0dde266cb4a26d41e8259d33499cc" + +generic HMAC-SHA-256 Test Vector NIST CAVS #2 +depends_on:5 +7:char*:"SHA256":int:16:hex:"6d97bb5892245be2":hex:"13c2b391d59c0252ca5d2302beaaf88c4bcd779bb505ad9a122003dfae4cc123ad2bd036f225c4f040021a6b9fb8bd6f0281cf2e2631a732bdc71693cc42ef6d52b6c6912a9ef77b3274eb85ad7f965ae6ed44ac1721962a884ec7acfb4534b1488b1c0c45afa4dae8da1eb7b0a88a3240365d7e4e7d826abbde9f9203fd99d7":hex:"31588e241b015319a5ab8c4527296498" + +generic HMAC-SHA-256 Test Vector NIST CAVS #3 +depends_on:5 +7:char*:"SHA256":int:16:hex:"3c7fc8a70b49007a":hex:"60024e428a39c8b8bb2e9591bad9dc2115dfbfd716b6eb7af30a6eb34560caccbbfa47b710fa8d523aca71e9e5ba10fc1feb1a43556d71f07ea4f33496f093044e8caf1d02b79e46eb1288d5964a7a7494f6b92574c35784eece054c6151281d80822f7d47b8231c35d07f5cb5cf4310ddc844845a01c6bfab514c048eccaf9f":hex:"1c98c94a32bec9f253c21070f82f8438" + +generic HMAC-SHA-256 Test Vector NIST CAVS #4 +depends_on:5 +7:char*:"SHA256":int:24:hex:"369f33f85b927a07":hex:"ae8e2a94ca386d448cbacdb0e9040ae3cb297c296363052cc157455da29a0c95897315fc11e3f12b81e2418da1ec280bccbc00e847584ce9d14deeba7b3c9b8dba958b04bba37551f6c9ba9c060be1a4b8cf43aa62e5078b76c6512c5619b71a6a7cf5727180e1ff14f5a1a3c1691bf8b6ebad365c151e58d749d57adb3a4986":hex:"60b90383286533d309de46593e6ce39fc51fb00a8d88278c" + +generic HMAC-SHA-256 Test Vector NIST CAVS #5 +depends_on:5 +7:char*:"SHA256":int:24:hex:"e5179687582b4dc4":hex:"ce103bdacdf32f614f6727bcb31ca1c2824a850d00f5585b016fb234fe1ef2cd687f302d3c6b738ed89a24060d65c36675d0d96307c72ef3e8a83bfa8402e226de9d5d1724ba75c4879bf41a4a465ce61887d9f49a34757849b48bae81c27ebed76faae2ad669bca04747d409148d40812776e0ae2c395b3cb9c89981ce72d5c":hex:"509581f6816df4b8cc9f2cf42b7cc6e6a5a1e375a16f2412" + +generic HMAC-SHA-256 Test Vector NIST CAVS #6 +depends_on:5 +7:char*:"SHA256":int:24:hex:"63cec6246aeb1b61":hex:"c178db908a405fa88aa255b8cad22b4057016585f139ee930388b083d86062fa0b3ea1f23f8a43bd11bee8464bcbd19b5ab9f6a8038d5245516f8274d20c8ee3033a07b908da528fa00343bb595deed500cab9745c4cb6391c23300f0d3584b090b3326c4cfa342620b78f9f5b4f27f7307ed770643ec1764aeae3dcf1a3ec69":hex:"64f3dd861b7c7d29fce9ae0ce9ed954b5d7141806ee9eec7" + +generic HMAC-SHA-384 Test Vector NIST CAVS #1 +depends_on:6:7 +7:char*:"SHA384":int:32:hex:"91a7401817386948ca952f9a20ee55dc":hex:"2fea5b91035d6d501f3a834fa178bff4e64b99a8450432dafd32e4466b0e1e7781166f8a73f7e036b3b0870920f559f47bd1400a1a906e85e0dcf00a6c26862e9148b23806680f285f1fe4f93cdaf924c181a965465739c14f2268c8be8b471847c74b222577a1310bcdc1a85ef1468aa1a3fd4031213c97324b7509c9050a3d":hex:"6d7be9490058cf413cc09fd043c224c2ec4fa7859b13783000a9a593c9f75838" + +generic HMAC-SHA-384 Test Vector NIST CAVS #2 +depends_on:6:7 +7:char*:"SHA384":int:32:hex:"d6cac19657061aa90a6da11cd2e9ea47":hex:"9f482e4655173135dfaa22a11bbbe6af263db48716406c5aec162ba3c4b41cad4f5a91558377521191c7343118beee65982929802913d67b6de5c4bdc3d27299bd722219d5ad2efa5bdb9ff7b229fc4bbc3f60719320cf2e7a51cad1133d21bad2d80919b1836ef825308b7c51c6b7677ac782e2bc30007afba065681cbdd215":hex:"f3d5f3c008175321aa7b2ea379eaa4f8b9dcc60f895ec8940b8162f80a7dfe9f" + +generic HMAC-SHA-384 Test Vector NIST CAVS #3 +depends_on:6:7 +7:char*:"SHA384":int:32:hex:"e06366ad149b8442cd4c1abdddd0afde":hex:"2d140a194c02a5598f69174834679b8371234a0d505491f1bd03e128dd91a8bca2fb812e9d5da71613b5b00952ea78bf450d5b7547dea79135925085c7d3e6f52009c51ca3d88c6c09e9d074b0ee110736e0ec9b478b93efb34d7bf1c41b54decec43eab077a3aa4998ede53f67b4ea36c266745f9643d5360bdc8337c70dabf":hex:"c19c67eda6fe29f3667bee1c897c333ce7683094ae77e84b4c16378d290895a1" + +generic HMAC-SHA-384 Test Vector NIST CAVS #4 +depends_on:6:7 +7:char*:"SHA384":int:48:hex:"01ac59f42f8bb91d1bd10fe6990d7a87":hex:"3caf18c476edd5615f343ac7b7d3a9da9efade755672d5ba4b8ae8a7505539ea2c124ff755ec0457fbe49e43480b3c71e7f4742ec3693aad115d039f90222b030fdc9440313691716d5302005808c07627483b916fdf61983063c2eb1268f2deeef42fc790334456bc6bad256e31fc9066de7cc7e43d1321b1866db45e905622":hex:"1985fa2163a5943fc5d92f1fe8831215e7e91f0bff5332bc713a072bdb3a8f9e5c5157463a3bfeb36231416e65973e64" + +generic HMAC-SHA-384 Test Vector NIST CAVS #5 [#1] +depends_on:6:7 +7:char*:"SHA384":int:48:hex:"fd74b9d9e102a3a80df1baf0cb35bace":hex:"1a068917584813d1689ccbd0370c2114d537cdc8cc52bf6db16d5535f8f7d1ad0c850a9fa0cf62373ffbf7642b1f1e8164010d350721d798d9f99e9724830399c2fce26377e83d38845675457865c03d4a07d741a505ef028343eb29fd46d0f761f3792886998c1e5c32ac3bc7e6f08faed194b34f06eff4d5d4a5b42c481e0e":hex:"a981eaf5de3d78b20ebd4414a4edd0657e3667cd808a0dbc430cf7252f73a5b24efa136039207bd59806897457d74e0c" + +generic HMAC-SHA-384 Test Vector NIST CAVS #5 [#2] +depends_on:6:7 +7:char*:"SHA384":int:48:hex:"9fe794f0e26b669fa5f6883149377c6c":hex:"6010c9745e8f1d44cfdc99e7e0fd79bc4271944c2d1d84dba589073dfc4ca5eb98c59356f60cd87bef28aeb83a832bde339b2087daf942aa1f67876c5d5ed33924bed4143bc12a2be532ccaf64daa7e2bc3c8872b9823b0533b6f5159135effe8c61545536975d7c3a61ba7365ec35f165bc92b4d19eb9156ade17dfa1bb4161":hex:"915ae61f8754698c2b6ef9629e93441f8541bd4258a5e05372d19136cfaefc0473b48d96119291b38eb1a3cb1982a986" + +generic HMAC-SHA-512 Test Vector NIST CAVS #1 +depends_on:6 +7:char*:"SHA512":int:32:hex:"c95a17c09940a691ed2d621571b0eb844ede55a9":hex:"99cd28262e81f34878cdcebf4128e05e2098a7009278a66f4c785784d0e5678f3f2b22f86e982d273b6273a222ec61750b4556d766f1550a7aedfe83faedbc4bdae83fa560d62df17eb914d05fdaa48940551bac81d700f5fca7147295e386e8120d66742ec65c6ee8d89a92217a0f6266d0ddc60bb20ef679ae8299c8502c2f":hex:"6bc1379d156559ddee2ed420ea5d5c5ff3e454a1059b7ba72c350e77b6e9333c" + +generic HMAC-SHA-512 Test Vector NIST CAVS #2 +depends_on:6 +7:char*:"SHA512":int:32:hex:"3b10b8fa718840d1dea8e9fc317476bcf55875fd":hex:"f04f5b7073d7d0274e8354433b390306c5607632f5f589c12edb62d55673aff2366d2e6b24de731adf92e654baa30b1cfd4a069788f65ec1b99b015d904d8832110dbd74eae35a81562d14ce4136d820ad0a55ff5489ba678fbbc1c27663ec1349d70e740f0e0ec27cfbe8971819f4789e486b50a2d7271d77e2aaea50de62fd":hex:"fc3c38c7a17e3ce06db033f1c172866f01a00045db55f2e234f71c82264f2ba2" + +generic HMAC-SHA-512 Test Vector NIST CAVS #3 +depends_on:6 +7:char*:"SHA512":int:32:hex:"4803d311394600dc1e0d8fc8cedeb8bde3fe7c42":hex:"a10c125dd702a97153ad923ba5e9889cfac1ba169de370debe51f233735aa6effcc9785c4b5c7e48c477dc5c411ae6a959118584e26adc94b42c2b29b046f3cf01c65b24a24bd2e620bdf650a23bb4a72655b1100d7ce9a4dab697c6379754b4396c825de4b9eb73f2e6a6c0d0353bbdeaf706612800e137b858fdb30f3311c6":hex:"7cd8236c55102e6385f52279506df6fcc388ab75092da21395ce14a82b202ffa" + +generic HMAC-SHA-512 Test Vector NIST CAVS #4 +depends_on:6 +7:char*:"SHA512":int:48:hex:"aeb2f3b977fa6c8e71e07c5a5c74ff58166de092":hex:"22457355dc76095abd46846b41cfe49a06ce42ac8857b4702fc771508dfb3626e0bfe851df897a07b36811ec433766e4b4166c26301b3493e7440d4554b0ef6ac20f1a530e58fac8aeba4e9ff2d4898d8a28783b49cd269c2965fd7f8e4f2d60cf1e5284f2495145b72382aad90e153a90ecae125ad75336fb128825c23fb8b0":hex:"fa39bd8fcc3bfa218f9dea5d3b2ce10a7619e31678a56d8a9d927b1fe703b125af445debe9a89a07db6194d27b44d85a" + +generic HMAC-SHA-512 Test Vector NIST CAVS #5 +depends_on:6 +7:char*:"SHA512":int:48:hex:"4285d3d7744da52775bb44ca436a3154f7980309":hex:"208f0b6f2de2e5aa5df11927ddc6df485edc1193181c484d0f0a434a95418803101d4de9fdb798f93516a6916fa38a8207de1666fe50fe3441c03b112eaaae6954ed063f7ac4e3c1e3f73b20d153fe9e4857f5e91430f0a70ee820529adac2467469fd18adf10e2af0fea27c0abc83c5a9af77c364a466cffce8bab4e2b70bc1":hex:"fe7603f205b2774fe0f14ecfa3e338e90608a806d11ca459dff5ce36b1b264ecd3af5f0492a7521d8da3102ba20927a5" + +generic HMAC-SHA-512 Test Vector NIST CAVS #6 +depends_on:6 +7:char*:"SHA512":int:48:hex:"8ab783d5acf32efa0d9c0a21abce955e96630d89":hex:"17371e013dce839963d54418e97be4bd9fa3cb2a368a5220f5aa1b8aaddfa3bdefc91afe7c717244fd2fb640f5cb9d9bf3e25f7f0c8bc758883b89dcdce6d749d9672fed222277ece3e84b3ec01b96f70c125fcb3cbee6d19b8ef0873f915f173bdb05d81629ba187cc8ac1934b2f75952fb7616ae6bd812946df694bd2763af":hex:"9ac7ca8d1aefc166b046e4cf7602ebe181a0e5055474bff5b342106731da0d7e48e4d87bc0a6f05871574289a1b099f8" + +generic multi step HMAC-SHA-1 Test Vector FIPS-198a #1 +depends_on:4 +8:char*:"SHA1":int:20:hex:"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f":hex:"53616d706c65202331":hex:"4f4ca3d5d68ba7cc0a1208c9c61e9c5da0403c0a" + +generic multi step HMAC-SHA-1 Test Vector FIPS-198a #2 +depends_on:4 +8:char*:"SHA1":int:20:hex:"303132333435363738393a3b3c3d3e3f40414243":hex:"53616d706c65202332":hex:"0922d3405faa3d194f82a45830737d5cc6c75d24" + +generic multi step HMAC-SHA-1 Test Vector FIPS-198a #3 +depends_on:4 +8:char*:"SHA1":int:20:hex:"505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3":hex:"53616d706c65202333":hex:"bcf41eab8bb2d802f3d05caf7cb092ecf8d1a3aa" + +generic multi step HMAC-SHA-1 Test Vector FIPS-198a #4 +depends_on:4 +8:char*:"SHA1":int:12:hex:"707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0":hex:"53616d706c65202334":hex:"9ea886efe268dbecce420c75" + +generic multi step HMAC-SHA-1 Test Vector NIST CAVS #1 +depends_on:4 +8:char*:"SHA1":int:10:hex:"7b10f4124b15c82e":hex:"27dcb5b1daf60cfd3e2f73d4d64ca9c684f8bf71fc682a46793b1790afa4feb100ca7aaff26f58f0e1d0ed42f1cdad1f474afa2e79d53a0c42892c4d7b327cbe46b295ed8da3b6ecab3d4851687a6f812b79df2f6b20f11f6706f5301790ca99625aad7391d84f78043d2a0a239b1477984c157bbc9276064e7a1a406b0612ca":hex:"4ead12c2fe3d6ea43acb" + +generic multi step HMAC-SHA-1 Test Vector NIST CAVS #2 +depends_on:4 +8:char*:"SHA1":int:10:hex:"4fe9fb902172a21b":hex:"4ceb3a7c13659c22fe51134f03dce4c239d181b63c6b0b59d367157fd05cab98384f92dfa482d2d5e78e72eef1b1838af4696026c54233d484ecbbe87f904df5546419f8567eafd232e6c2fcd3ee2b7682c63000524b078dbb2096f585007deae752562df1fe3b01278089e16f3be46e2d0f7cabac2d8e6cc02a2d0ca953425f":hex:"564428a67be1924b5793" + +generic multi step HMAC-SHA-1 Test Vector NIST CAVS #3 +depends_on:4 +8:char*:"SHA1":int:10:hex:"d1f01455f78c4fb4":hex:"00d40f67b57914bec456a3e3201ef1464be319a8d188c02e157af4b54f9b5a66d67f898a9bdbb19ff63a80aba6f246d013575721d52eb1b47a65def884011c49b257bcc2817fc853f106e8138ce386d7a5ac3103de0a3fa0ed6bb7af9ff66ebd1cc46fb86e4da0013d20a3c2dcd8fb828a4b70f7f104b41bf3f44682a66497ea":hex:"56a665a7cdfe610f9fc5" + +generic multi step HMAC-SHA-1 Test Vector NIST CAVS #4 +depends_on:4 +8:char*:"SHA1":int:10:hex:"4e5ef77fdf033a5b":hex:"e59326464e3201d195e29f2a3446ec1b1c9ff31154e2a4d0e40ed466f1bc855d29f76835624fa0127d29c9b1915939a046f385af7e5d47a23ba91f28bd22f811ea258dbbf3332bcd3543b8285d5df41bd064ffd64a341c22c4edb44f9c8d9e6df0c59dbf4a052a6c83da7478e179a6f3839c6870ff8ca8b9497f9ac1d725fdda":hex:"981c0a7a8423b63a8fa6" + +generic multi step HMAC-SHA-1 Test Vector NIST CAVS #5 +depends_on:4 +8:char*:"SHA1":int:10:hex:"bcd9ff8aa60be2be":hex:"51be4d0eb37bab714f92e19e9d70390655b363e8cd346a748245e731f437759cb8206412c8dab2ef1d4f36f880f41ff69d949da4594fdecb65e23cac1329b59e69e29bf875b38c31df6fa546c595f35cc2192aa750679a8a51a65e00e839d73a8d8c598a610d237fbe78955213589d80efcb73b95b8586f96d17b6f51a71c3b8":hex:"84633f9f5040c8971478" + +generic multi step HMAC-SHA-1 Test Vector NIST CAVS #6 +depends_on:4 +8:char*:"SHA1":int:10:hex:"4a661bce6ed86d21":hex:"5ff6c744f1aab1bc29697d71f67541b8b3cec3c7079183b10a83fb98a9ee251d4bac3e1cb581ca972aaed8efd7c2875a6fb4c991132f67c9742d45e53bc7e8eaa94b35b37a907be61086b426cd11088ac118934e85d968c9667fd69fc6f6ea38c0fe34710b7ece91211b9b7ea00acd31f022aa6726368f9928a1352f122233f1":hex:"739df59353ac6694e55e" + +generic multi step HMAC-SHA-1 Test Vector NIST CAVS #7 +depends_on:4 +8:char*:"SHA1":int:10:hex:"1287e1565a57b547":hex:"390ffdccc6171c11568d85b8f913e019bf4cd982ca9cd21ea730d41bdf3fcc0bc88ff48ba13a8f23deb2d96ec1033e7b2a58ca72b0c1e17bf03330db25d1e360fa6918009c4294bd1215b5ccd159a8f58bc3dc3d490eb7c3b9f887e8c98dbbb274a75373dcb695a59abd0219529d88518a96f92abc0bbcbda985c388f1fbbcc9":hex:"d78ddf08077c7d9e2ba6" + +generic multi step HMAC-SHA-224 Test Vector NIST CAVS #1 +depends_on:5 +8:char*:"SHA224":int:14:hex:"e055eb756697ee573fd3214811a9f7fa":hex:"3875847012ee42fe54a0027bdf38cca7021b83a2ed0503af69ef6c37c637bc1114fba40096c5947d736e19b7af3c68d95a4e3b8b073adbbb80f47e9db8f2d4f0018ddd847fabfdf9dd9b52c93e40458977725f6b7ba15f0816bb895cdf50401268f5d702b7e6a5f9faef57b8768c8a3fc14f9a4b3182b41d940e337d219b29ff":hex:"40a453133361cc48da11baf616ee" + +generic multi step HMAC-SHA-224 Test Vector NIST CAVS #2 +depends_on:5 +8:char*:"SHA224":int:14:hex:"88e5258b55b1623385eb9632fa7c57d6":hex:"ada76bb604be14326551701cf30e48a65eee80b44f0b9d4a07b1844543b7844a621097fdc99de57387458ae9354899b620d0617eabcaefa9eef3d413a33628054335ce656c26fa2986e0f111a6351096b283101ec7868871d770b370973c7405983f9756b3005a3eab492cfd0e7eb42e5c2e15fa6be8718c0a50acc4e5717230":hex:"81c783af538015cef3c60095df53" + +generic multi step HMAC-SHA-224 Test Vector NIST CAVS #3 +depends_on:5 +8:char*:"SHA224":int:14:hex:"85d402d822114d31abf75526e2538705":hex:"8020d8d98cc2e2298b32879c51c751e1dd5558fe2eabb8f158604297d6d072ce2261a1d6830b7cfe2617b57c7126f99c9476211d6161acd75d266da217ec8174b80484c9dc6f0448a0a036a3fc82e8bf54bdb71549368258d5d41f57978a4c266b92e8783ef66350215573d99be4089144b383ad8f3222bae8f3bf80ffb1bb2b":hex:"2aa0340ac9deafe3be38129daca0" + +generic multi step HMAC-SHA-224 Test Vector NIST CAVS #4 +depends_on:5 +8:char*:"SHA224":int:14:hex:"545c6eecc5ee46fa17c59f91a94f81ae":hex:"8fb7f3565593170152ddb2021874784e951977cfdd22f8b72a72a61320a8f2a35697b5e913f717805559b1af1861ee3ed42fb788481e4fd276b17bdbefcae7b4501dc5d20de5b7626dd5efdcd65294db4bdf682c33d9a9255c6435383fa5f1c886326a3acbc6bd50a33ab5b2dbb034ce0112d4e226bbcd57e3731a519aa1d784":hex:"3eb566eac54c4a3a9ef092469f24" + +generic multi step HMAC-SHA-224 Test Vector NIST CAVS #5 +depends_on:5 +8:char*:"SHA224":int:14:hex:"4466ab4dc438841a9750c7f173dff02e":hex:"2534c11c78c99cffaec8f722f04adc7045c7324d58ce98e37cfa94b6ed21ed7f58ce55379ef24b72d6d640ee9154f96c614734be9c408e225d7ba4cecc1179cc9f6e1808e1067aa8f244a99bd0c3267594c1887a40d167f8b7cf78db0d19f97b01fc50b8c86def490dfa7a5135002c33e71d77a8cce8ea0f93e0580439a33733":hex:"59f44a9bbed4875b892d22d6b5ab" + +generic multi step HMAC-SHA-224 Test Vector NIST CAVS #6 +depends_on:5 +8:char*:"SHA224":int:28:hex:"0e3dd9bb5e4cf0f09a4c11600af56d8d":hex:"f4589fa76c328ea25cf8bae582026ba40a59d45a546ff31cf80eb826088f69bb954c452c74586836416dee90a5255bc5d56d3b405b3705a5197045688b32fa984c3a3dfbdc9c2460a0b5e6312a624048bb6f170306535e9b371a3ab134a2642a230ad03d2c688cca80baeaee9a20e1d4c548b1cede29c6a45bf4df2c8c476f1a":hex:"12175b93e3da4c58217145e4dc0a1cf142fab9319bb501e037b350ba" + +generic multi step HMAC-SHA-224 Test Vector NIST CAVS #7 +depends_on:5 +8:char*:"SHA224":int:28:hex:"cda5187b0c5dcb0f8e5a8beed2306584":hex:"9011ae29b44c49b347487ce972965f16ade3c15be0856ce9c853a9739dba07e4f20d594ddc1dfe21560a65a4e458cfa17745575b915a30c7a9412ff8d1d689db9680dd2428c27588bb0dc92d2cd9445fe8f44b840a197c52c3c4333fff45533945134398df6436513cfab06c924046b8c795a5bd92e8d5f2de85bf306f2eed67":hex:"4aaba92b40e2a600feab176eb9b292d814864195c03342aad6f67f08" + +generic multi step HMAC-SHA-256 Test Vector NIST CAVS #1 +depends_on:5 +8:char*:"SHA256":int:16:hex:"cdffd34e6b16fdc0":hex:"d83e78b99ab61709608972b36e76a575603db742269cc5dd4e7d5ca7816e26b65151c92632550cb4c5253c885d5fce53bc47459a1dbd5652786c4aac0145a532f12c05138af04cbb558101a7af5df478834c2146594dd73690d01a4fe72545894335f427ac70204798068cb86c5a600b40b414ede23590b41e1192373df84fe3":hex:"c6f0dde266cb4a26d41e8259d33499cc" + +generic multi step HMAC-SHA-256 Test Vector NIST CAVS #2 +depends_on:5 +8:char*:"SHA256":int:16:hex:"6d97bb5892245be2":hex:"13c2b391d59c0252ca5d2302beaaf88c4bcd779bb505ad9a122003dfae4cc123ad2bd036f225c4f040021a6b9fb8bd6f0281cf2e2631a732bdc71693cc42ef6d52b6c6912a9ef77b3274eb85ad7f965ae6ed44ac1721962a884ec7acfb4534b1488b1c0c45afa4dae8da1eb7b0a88a3240365d7e4e7d826abbde9f9203fd99d7":hex:"31588e241b015319a5ab8c4527296498" + +generic multi step HMAC-SHA-256 Test Vector NIST CAVS #3 +depends_on:5 +8:char*:"SHA256":int:16:hex:"3c7fc8a70b49007a":hex:"60024e428a39c8b8bb2e9591bad9dc2115dfbfd716b6eb7af30a6eb34560caccbbfa47b710fa8d523aca71e9e5ba10fc1feb1a43556d71f07ea4f33496f093044e8caf1d02b79e46eb1288d5964a7a7494f6b92574c35784eece054c6151281d80822f7d47b8231c35d07f5cb5cf4310ddc844845a01c6bfab514c048eccaf9f":hex:"1c98c94a32bec9f253c21070f82f8438" + +generic multi step HMAC-SHA-256 Test Vector NIST CAVS #4 +depends_on:5 +8:char*:"SHA256":int:24:hex:"369f33f85b927a07":hex:"ae8e2a94ca386d448cbacdb0e9040ae3cb297c296363052cc157455da29a0c95897315fc11e3f12b81e2418da1ec280bccbc00e847584ce9d14deeba7b3c9b8dba958b04bba37551f6c9ba9c060be1a4b8cf43aa62e5078b76c6512c5619b71a6a7cf5727180e1ff14f5a1a3c1691bf8b6ebad365c151e58d749d57adb3a4986":hex:"60b90383286533d309de46593e6ce39fc51fb00a8d88278c" + +generic multi step HMAC-SHA-256 Test Vector NIST CAVS #5 +depends_on:5 +8:char*:"SHA256":int:24:hex:"e5179687582b4dc4":hex:"ce103bdacdf32f614f6727bcb31ca1c2824a850d00f5585b016fb234fe1ef2cd687f302d3c6b738ed89a24060d65c36675d0d96307c72ef3e8a83bfa8402e226de9d5d1724ba75c4879bf41a4a465ce61887d9f49a34757849b48bae81c27ebed76faae2ad669bca04747d409148d40812776e0ae2c395b3cb9c89981ce72d5c":hex:"509581f6816df4b8cc9f2cf42b7cc6e6a5a1e375a16f2412" + +generic multi step HMAC-SHA-256 Test Vector NIST CAVS #6 +depends_on:5 +8:char*:"SHA256":int:24:hex:"63cec6246aeb1b61":hex:"c178db908a405fa88aa255b8cad22b4057016585f139ee930388b083d86062fa0b3ea1f23f8a43bd11bee8464bcbd19b5ab9f6a8038d5245516f8274d20c8ee3033a07b908da528fa00343bb595deed500cab9745c4cb6391c23300f0d3584b090b3326c4cfa342620b78f9f5b4f27f7307ed770643ec1764aeae3dcf1a3ec69":hex:"64f3dd861b7c7d29fce9ae0ce9ed954b5d7141806ee9eec7" + +generic multi step HMAC-SHA-384 Test Vector NIST CAVS #1 +depends_on:6:7 +8:char*:"SHA384":int:32:hex:"91a7401817386948ca952f9a20ee55dc":hex:"2fea5b91035d6d501f3a834fa178bff4e64b99a8450432dafd32e4466b0e1e7781166f8a73f7e036b3b0870920f559f47bd1400a1a906e85e0dcf00a6c26862e9148b23806680f285f1fe4f93cdaf924c181a965465739c14f2268c8be8b471847c74b222577a1310bcdc1a85ef1468aa1a3fd4031213c97324b7509c9050a3d":hex:"6d7be9490058cf413cc09fd043c224c2ec4fa7859b13783000a9a593c9f75838" + +generic multi step HMAC-SHA-384 Test Vector NIST CAVS #2 +depends_on:6:7 +8:char*:"SHA384":int:32:hex:"d6cac19657061aa90a6da11cd2e9ea47":hex:"9f482e4655173135dfaa22a11bbbe6af263db48716406c5aec162ba3c4b41cad4f5a91558377521191c7343118beee65982929802913d67b6de5c4bdc3d27299bd722219d5ad2efa5bdb9ff7b229fc4bbc3f60719320cf2e7a51cad1133d21bad2d80919b1836ef825308b7c51c6b7677ac782e2bc30007afba065681cbdd215":hex:"f3d5f3c008175321aa7b2ea379eaa4f8b9dcc60f895ec8940b8162f80a7dfe9f" + +generic multi step HMAC-SHA-384 Test Vector NIST CAVS #3 +depends_on:6:7 +8:char*:"SHA384":int:32:hex:"e06366ad149b8442cd4c1abdddd0afde":hex:"2d140a194c02a5598f69174834679b8371234a0d505491f1bd03e128dd91a8bca2fb812e9d5da71613b5b00952ea78bf450d5b7547dea79135925085c7d3e6f52009c51ca3d88c6c09e9d074b0ee110736e0ec9b478b93efb34d7bf1c41b54decec43eab077a3aa4998ede53f67b4ea36c266745f9643d5360bdc8337c70dabf":hex:"c19c67eda6fe29f3667bee1c897c333ce7683094ae77e84b4c16378d290895a1" + +generic multi step HMAC-SHA-384 Test Vector NIST CAVS #4 +depends_on:6:7 +8:char*:"SHA384":int:48:hex:"01ac59f42f8bb91d1bd10fe6990d7a87":hex:"3caf18c476edd5615f343ac7b7d3a9da9efade755672d5ba4b8ae8a7505539ea2c124ff755ec0457fbe49e43480b3c71e7f4742ec3693aad115d039f90222b030fdc9440313691716d5302005808c07627483b916fdf61983063c2eb1268f2deeef42fc790334456bc6bad256e31fc9066de7cc7e43d1321b1866db45e905622":hex:"1985fa2163a5943fc5d92f1fe8831215e7e91f0bff5332bc713a072bdb3a8f9e5c5157463a3bfeb36231416e65973e64" + +generic multi step HMAC-SHA-384 Test Vector NIST CAVS #5 [#1] +depends_on:6:7 +8:char*:"SHA384":int:48:hex:"fd74b9d9e102a3a80df1baf0cb35bace":hex:"1a068917584813d1689ccbd0370c2114d537cdc8cc52bf6db16d5535f8f7d1ad0c850a9fa0cf62373ffbf7642b1f1e8164010d350721d798d9f99e9724830399c2fce26377e83d38845675457865c03d4a07d741a505ef028343eb29fd46d0f761f3792886998c1e5c32ac3bc7e6f08faed194b34f06eff4d5d4a5b42c481e0e":hex:"a981eaf5de3d78b20ebd4414a4edd0657e3667cd808a0dbc430cf7252f73a5b24efa136039207bd59806897457d74e0c" + +generic multi step HMAC-SHA-384 Test Vector NIST CAVS #5 [#2] +depends_on:6:7 +8:char*:"SHA384":int:48:hex:"9fe794f0e26b669fa5f6883149377c6c":hex:"6010c9745e8f1d44cfdc99e7e0fd79bc4271944c2d1d84dba589073dfc4ca5eb98c59356f60cd87bef28aeb83a832bde339b2087daf942aa1f67876c5d5ed33924bed4143bc12a2be532ccaf64daa7e2bc3c8872b9823b0533b6f5159135effe8c61545536975d7c3a61ba7365ec35f165bc92b4d19eb9156ade17dfa1bb4161":hex:"915ae61f8754698c2b6ef9629e93441f8541bd4258a5e05372d19136cfaefc0473b48d96119291b38eb1a3cb1982a986" + +generic multi step HMAC-SHA-512 Test Vector NIST CAVS #1 +depends_on:6 +8:char*:"SHA512":int:32:hex:"c95a17c09940a691ed2d621571b0eb844ede55a9":hex:"99cd28262e81f34878cdcebf4128e05e2098a7009278a66f4c785784d0e5678f3f2b22f86e982d273b6273a222ec61750b4556d766f1550a7aedfe83faedbc4bdae83fa560d62df17eb914d05fdaa48940551bac81d700f5fca7147295e386e8120d66742ec65c6ee8d89a92217a0f6266d0ddc60bb20ef679ae8299c8502c2f":hex:"6bc1379d156559ddee2ed420ea5d5c5ff3e454a1059b7ba72c350e77b6e9333c" + +generic multi step HMAC-SHA-512 Test Vector NIST CAVS #2 +depends_on:6 +8:char*:"SHA512":int:32:hex:"3b10b8fa718840d1dea8e9fc317476bcf55875fd":hex:"f04f5b7073d7d0274e8354433b390306c5607632f5f589c12edb62d55673aff2366d2e6b24de731adf92e654baa30b1cfd4a069788f65ec1b99b015d904d8832110dbd74eae35a81562d14ce4136d820ad0a55ff5489ba678fbbc1c27663ec1349d70e740f0e0ec27cfbe8971819f4789e486b50a2d7271d77e2aaea50de62fd":hex:"fc3c38c7a17e3ce06db033f1c172866f01a00045db55f2e234f71c82264f2ba2" + +generic multi step HMAC-SHA-512 Test Vector NIST CAVS #3 +depends_on:6 +8:char*:"SHA512":int:32:hex:"4803d311394600dc1e0d8fc8cedeb8bde3fe7c42":hex:"a10c125dd702a97153ad923ba5e9889cfac1ba169de370debe51f233735aa6effcc9785c4b5c7e48c477dc5c411ae6a959118584e26adc94b42c2b29b046f3cf01c65b24a24bd2e620bdf650a23bb4a72655b1100d7ce9a4dab697c6379754b4396c825de4b9eb73f2e6a6c0d0353bbdeaf706612800e137b858fdb30f3311c6":hex:"7cd8236c55102e6385f52279506df6fcc388ab75092da21395ce14a82b202ffa" + +generic multi step HMAC-SHA-512 Test Vector NIST CAVS #4 +depends_on:6 +8:char*:"SHA512":int:48:hex:"aeb2f3b977fa6c8e71e07c5a5c74ff58166de092":hex:"22457355dc76095abd46846b41cfe49a06ce42ac8857b4702fc771508dfb3626e0bfe851df897a07b36811ec433766e4b4166c26301b3493e7440d4554b0ef6ac20f1a530e58fac8aeba4e9ff2d4898d8a28783b49cd269c2965fd7f8e4f2d60cf1e5284f2495145b72382aad90e153a90ecae125ad75336fb128825c23fb8b0":hex:"fa39bd8fcc3bfa218f9dea5d3b2ce10a7619e31678a56d8a9d927b1fe703b125af445debe9a89a07db6194d27b44d85a" + +generic multi step HMAC-SHA-512 Test Vector NIST CAVS #5 +depends_on:6 +8:char*:"SHA512":int:48:hex:"4285d3d7744da52775bb44ca436a3154f7980309":hex:"208f0b6f2de2e5aa5df11927ddc6df485edc1193181c484d0f0a434a95418803101d4de9fdb798f93516a6916fa38a8207de1666fe50fe3441c03b112eaaae6954ed063f7ac4e3c1e3f73b20d153fe9e4857f5e91430f0a70ee820529adac2467469fd18adf10e2af0fea27c0abc83c5a9af77c364a466cffce8bab4e2b70bc1":hex:"fe7603f205b2774fe0f14ecfa3e338e90608a806d11ca459dff5ce36b1b264ecd3af5f0492a7521d8da3102ba20927a5" + +generic multi step HMAC-SHA-512 Test Vector NIST CAVS #6 +depends_on:6 +8:char*:"SHA512":int:48:hex:"8ab783d5acf32efa0d9c0a21abce955e96630d89":hex:"17371e013dce839963d54418e97be4bd9fa3cb2a368a5220f5aa1b8aaddfa3bdefc91afe7c717244fd2fb640f5cb9d9bf3e25f7f0c8bc758883b89dcdce6d749d9672fed222277ece3e84b3ec01b96f70c125fcb3cbee6d19b8ef0873f915f173bdb05d81629ba187cc8ac1934b2f75952fb7616ae6bd812946df694bd2763af":hex:"9ac7ca8d1aefc166b046e4cf7602ebe181a0e5055474bff5b342106731da0d7e48e4d87bc0a6f05871574289a1b099f8" + +generic SHA-1 Test Vector NIST CAVS #1 +depends_on:4 +4:char*:"SHA1":hex:"":hex:"da39a3ee5e6b4b0d3255bfef95601890afd80709" + +generic SHA-1 Test Vector NIST CAVS #2 +depends_on:4 +4:char*:"SHA1":hex:"a8":hex:"99f2aa95e36f95c2acb0eaf23998f030638f3f15" + +generic SHA-1 Test Vector NIST CAVS #3 +depends_on:4 +4:char*:"SHA1":hex:"3000":hex:"f944dcd635f9801f7ac90a407fbc479964dec024" + +generic SHA-1 Test Vector NIST CAVS #4 +depends_on:4 +4:char*:"SHA1":hex:"42749e":hex:"a444319e9b6cc1e8464c511ec0969c37d6bb2619" + +generic SHA-1 Test Vector NIST CAVS #5 +depends_on:4 +4:char*:"SHA1":hex:"9fc3fe08":hex:"16a0ff84fcc156fd5d3ca3a744f20a232d172253" + +generic SHA-1 Test Vector NIST CAVS #6 +depends_on:4 +4:char*:"SHA1":hex:"b5c1c6f1af":hex:"fec9deebfcdedaf66dda525e1be43597a73a1f93" + +generic SHA-1 Test Vector NIST CAVS #7 +depends_on:4 +4:char*:"SHA1":hex:"ec29561244ede706b6eb30a1c371d74450a105c3f9735f7fa9fe38cf67f304a5736a106e92e17139a6813b1c81a4f3d3fb9546ab4296fa9f722826c066869edacd73b2548035185813e22634a9da44000d95a281ff9f264ecce0a931222162d021cca28db5f3c2aa24945ab1e31cb413ae29810fd794cad5dfaf29ec43cb38d198fe4ae1da2359780221405bd6712a5305da4b1b737fce7cd21c0eb7728d08235a9011":hex:"970111c4e77bcc88cc20459c02b69b4aa8f58217" + +generic SHA-1 Test Vector NIST CAVS #8 +depends_on:4 +4:char*:"SHA1":hex:"5fc2c3f6a7e79dc94be526e5166a238899d54927ce470018fbfd668fd9dd97cbf64e2c91584d01da63be3cc9fdff8adfefc3ac728e1e335b9cdc87f069172e323d094b47fa1e652afe4d6aa147a9f46fda33cacb65f3aa12234746b9007a8c85fe982afed7815221e43dba553d8fe8a022cdac1b99eeeea359e5a9d2e72e382dffa6d19f359f4f27dc3434cd27daeeda8e38594873398678065fbb23665aba9309d946135da0e4a4afdadff14db18e85e71dd93c3bf9faf7f25c8194c4269b1ee3d9934097ab990025d9c3aaf63d5109f52335dd3959d38ae485050e4bbb6235574fc0102be8f7a306d6e8de6ba6becf80f37415b57f9898a5824e77414197422be3d36a6080":hex:"0423dc76a8791107d14e13f5265b343f24cc0f19" + +generic SHA-1 Test Vector NIST CAVS #9 +depends_on:4 +4:char*:"SHA1":hex:"0f865f46a8f3aed2da18482aa09a8f390dc9da07d51d1bd10fe0bf5f3928d5927d08733d32075535a6d1c8ac1b2dc6ba0f2f633dc1af68e3f0fa3d85e6c60cb7b56c239dc1519a007ea536a07b518ecca02a6c31b46b76f021620ef3fc6976804018380e5ab9c558ebfc5cb1c9ed2d974722bf8ab6398f1f2b82fa5083f85c16a5767a3a07271d67743f00850ce8ec428c7f22f1cf01f99895c0c844845b06a06cecb0c6cf83eb55a1d4ebc44c2c13f6f7aa5e0e08abfd84e7864279057abc471ee4a45dbbb5774afa24e51791a0eada11093b88681fe30baa3b2e94113dc63342c51ca5d1a6096d0897b626e42cb91761058008f746f35465465540ad8c6b8b60f7e1461b3ce9e6529625984cb8c7d46f07f735be067588a0117f23e34ff57800e2bbe9a1605fde6087fb15d22c5d3ac47566b8c448b0cee40373e5ba6eaa21abee71366afbb27dbbd300477d70c371e7b8963812f5ed4fb784fb2f3bd1d3afe883cdd47ef32beaea":hex:"6692a71d73e00f27df976bc56df4970650d90e45" + +generic SHA-1 Test Vector NIST CAVS #10 +depends_on:4 +4:char*:"SHA1":hex:"8236153781bd2f1b81ffe0def1beb46f5a70191142926651503f1b3bb1016acdb9e7f7acced8dd168226f118ff664a01a8800116fd023587bfba52a2558393476f5fc69ce9c65001f23e70476d2cc81c97ea19caeb194e224339bcb23f77a83feac5096f9b3090c51a6ee6d204b735aa71d7e996d380b80822e4dfd43683af9c7442498cacbea64842dfda238cb099927c6efae07fdf7b23a4e4456e0152b24853fe0d5de4179974b2b9d4a1cdbefcbc01d8d311b5dda059136176ea698ab82acf20dd490be47130b1235cb48f8a6710473cfc923e222d94b582f9ae36d4ca2a32d141b8e8cc36638845fbc499bce17698c3fecae2572dbbd470552430d7ef30c238c2124478f1f780483839b4fb73d63a9460206824a5b6b65315b21e3c2f24c97ee7c0e78faad3df549c7ca8ef241876d9aafe9a309f6da352bec2caaa92ee8dca392899ba67dfed90aef33d41fc2494b765cb3e2422c8e595dabbfaca217757453fb322a13203f425f6073a9903e2dc5818ee1da737afc345f0057744e3a56e1681c949eb12273a3bfc20699e423b96e44bd1ff62e50a848a890809bfe1611c6787d3d741103308f849a790f9c015098286dbacfc34c1718b2c2b77e32194a75dda37954a320fa68764027852855a7e5b5274eb1e2cbcd27161d98b59ad245822015f48af82a45c0ed59be94f9af03d9736048570d6e3ef63b1770bc98dfb77de84b1bb1708d872b625d9ab9b06c18e5dbbf34399391f0f8aa26ec0dac7ff4cb8ec97b52bcb942fa6db2385dcd1b3b9d567aaeb425d567b0ebe267235651a1ed9bf78fd93d3c1dd077fe340bb04b00529c58f45124b717c168d07e9826e33376988bc5cf62845c2009980a4dfa69fbc7e5a0b1bb20a5958ca967aec68eb31dd8fccca9afcd30a26bab26279f1bf6724ff":hex:"11863b483809ef88413ca9b0084ac4a5390640af" + +generic SHA-224 Test Vector NIST CAVS #1 +depends_on:5 +4:char*:"SHA224":hex:"":hex:"d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f" + +generic SHA-224 Test Vector NIST CAVS #2 +depends_on:5 +4:char*:"SHA224":hex:"ff":hex:"e33f9d75e6ae1369dbabf81b96b4591ae46bba30b591a6b6c62542b5" + +generic SHA-224 Test Vector NIST CAVS #3 +depends_on:5 +4:char*:"SHA224":hex:"984c":hex:"2fa9df9157d9e027cfbc4c6a9df32e1adc0cbe2328ec2a63c5ae934e" + +generic SHA-224 Test Vector NIST CAVS #4 +depends_on:5 +4:char*:"SHA224":hex:"50efd0":hex:"b5a9820413c2bf8211fbbf5df1337043b32fa4eafaf61a0c8e9ccede" + +generic SHA-224 Test Vector NIST CAVS #5 +depends_on:5 +4:char*:"SHA224":hex:"e5e09924":hex:"fd19e74690d291467ce59f077df311638f1c3a46e510d0e49a67062d" + +generic SHA-224 Test Vector NIST CAVS #6 +depends_on:5 +4:char*:"SHA224":hex:"21ebecb914":hex:"78f4a71c21c694499ce1c7866611b14ace70d905012c356323c7c713" + +generic SHA-224 Test Vector NIST CAVS #7 +depends_on:5 +4:char*:"SHA224":hex:"fc488947c1a7a589726b15436b4f3d9556262f98fc6422fc5cdf20f0fad7fe427a3491c86d101ffe6b7514f06268f65b2d269b0f69ad9a97847eff1c16a2438775eb7be6847ccf11cb8b2e8dcd6640b095b49c0693fe3cf4a66e2d9b7ad68bff14f3ad69abf49d0aba36cbe0535202deb6599a47225ef05beb351335cd7bc0f480d691198c7e71305ffd53b39d33242bb79cfd98bfd69e137b5d18b2b89ac9ace01c8dbdcf2533cce3682ecc52118de0c1062ec2126c2e657d6ea3d9e2398e705d4b0b1f1ceecb266dffc4f31bf42744fb1e938dc22a889919ee1e73f463f7871fed720519e32186264b7ef2a0e5d9a18e6c95c0781894f77967f048951dec3b4d892a38710b1e3436d3c29088eb8b3da1789c25db3d3bc6c26081206e7155d210a89b80ca6ea877c41ff9947c0f25625dcb118294a163501f6239c326661a958fd12da4cd15a899f8b88cc723589056eaec5aa04a4cf5dbb6f480f9660423ccf38c486e210707e0fb25e1f126ceb2616f63e147a647dab0af9ebe89d65458bf636154a46e4cab95f5ee62da2c7974cd14b90d3e4f99f81733e85b3c1d5da2b508d9b90f5eed7eff0d9c7649de62bee00375454fee4a39576a5bbfdae428e7f8097bdf7797f167686cb68407e49079e4611ff3402b6384ba7b7e522bd2bb11ce8fd02ea4c1604d163ac4f6dde50b8b1f593f7edaadeac0868ed97df690200680c25f0f5d85431a529e4f339089dcdeda105e4ee51dead704cdf5a605c55fb055c9b0e86b8ba1b564c0dea3eb790a595cb103cb292268b07c5e59371e1a7ef597cd4b22977a820694c9f9aeb55d9de3ef62b75d6e656e3336698d960a3787bf8cf5b926a7faeef52ae128bcb5dc9e66d94b016c7b8e034879171a2d91c381f57e6a815b63b5ee6a6d2ff435b49f14c963966960194430d78f8f87627a67757fb3532b289550894da6dce4817a4e07f4d56877a1102ffcc8befa5c9f8fca6a4574d93ff70376c8861e0f8108cf907fce77ecb49728f86f034f80224b9695682e0824462f76cdb1fd1af151337b0d85419047a7aa284791718a4860cd586f7824b95bc837b6fd4f9be5aade68456e20356aa4d943dac36bf8b67b9e8f9d01a00fcda74b798bafa746c661b010f75b59904b29d0c8041504811c4065f82cf2ead58d2f595cbd8bc3e7043f4d94577b373b7cfe16a36fe564f505c03b70cfeb5e5f411c79481338aa67e86b3f5a2e77c21e454c333ae3da943ab723ab5f4c940395319534a5575f64acba0d0ecc43f60221ed3badf7289c9b3a7b903a2d6c94e15fa4c310dc4fa7faa0c24f405160a1002dbef20e4105d481db982f7243f79400a6e4cd9753c4b9732a47575f504b20c328fe9add7f432a4f075829da07b53b695037dc51737d3cd731934df333cd1a53fcf65aa31baa450ca501a6fae26e322347e618c5a444d92e9fec5a8261ae38b98fee5be77c02cec09ddccd5b3de92036":hex:"1302149d1e197c41813b054c942329d420e366530f5517b470e964fe" + +generic SHA-256 Test Vector NIST CAVS #1 +depends_on:5 +4:char*:"SHA256":hex:"":hex:"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + +generic SHA-256 Test Vector NIST CAVS #2 +depends_on:5 +4:char*:"SHA256":hex:"bd":hex:"68325720aabd7c82f30f554b313d0570c95accbb7dc4b5aae11204c08ffe732b" + +generic SHA-256 Test Vector NIST CAVS #3 +depends_on:5 +4:char*:"SHA256":hex:"5fd4":hex:"7c4fbf484498d21b487b9d61de8914b2eadaf2698712936d47c3ada2558f6788" + +generic SHA-256 Test Vector NIST CAVS #4 +depends_on:5 +4:char*:"SHA256":hex:"b0bd69":hex:"4096804221093ddccfbf46831490ea63e9e99414858f8d75ff7f642c7ca61803" + +generic SHA-256 Test Vector NIST CAVS #5 +depends_on:5 +4:char*:"SHA256":hex:"c98c8e55":hex:"7abc22c0ae5af26ce93dbb94433a0e0b2e119d014f8e7f65bd56c61ccccd9504" + +generic SHA-256 Test Vector NIST CAVS #6 +depends_on:5 +4:char*:"SHA256":hex:"81a723d966":hex:"7516fb8bb11350df2bf386bc3c33bd0f52cb4c67c6e4745e0488e62c2aea2605" + +generic SHA-256 Test Vector NIST CAVS #7 +depends_on:5 +4:char*:"SHA256":hex:"8390cf0be07661cc7669aac54ce09a37733a629d45f5d983ef201f9b2d13800e555d9b1097fec3b783d7a50dcb5e2b644b96a1e9463f177cf34906bf388f366db5c2deee04a30e283f764a97c3b377a034fefc22c259214faa99babaff160ab0aaa7e2ccb0ce09c6b32fe08cbc474694375aba703fadbfa31cf685b30a11c57f3cf4edd321e57d3ae6ebb1133c8260e75b9224fa47a2bb205249add2e2e62f817491482ae152322be0900355cdcc8d42a98f82e961a0dc6f537b7b410eff105f59673bfb787bf042aa071f7af68d944d27371c64160fe9382772372516c230c1f45c0d6b6cca7f274b394da9402d3eafdf733994ec58ab22d71829a98399574d4b5908a447a5a681cb0dd50a31145311d92c22a16de1ead66a5499f2dceb4cae694772ce90762ef8336afec653aa9b1a1c4820b221136dfce80dce2ba920d88a530c9410d0a4e0358a3a11052e58dd73b0b179ef8f56fe3b5a2d117a73a0c38a1392b6938e9782e0d86456ee4884e3c39d4d75813f13633bc79baa07c0d2d555afbf207f52b7dca126d015aa2b9873b3eb065e90b9b065a5373fe1fb1b20d594327d19fba56cb81e7b6696605ffa56eba3c27a438697cc21b201fd7e09f18deea1b3ea2f0d1edc02df0e20396a145412cd6b13c32d2e605641c948b714aec30c0649dc44143511f35ab0fd5dd64c34d06fe86f3836dfe9edeb7f08cfc3bd40956826356242191f99f53473f32b0cc0cf9321d6c92a112e8db90b86ee9e87cc32d0343db01e32ce9eb782cb24efbbbeb440fe929e8f2bf8dfb1550a3a2e742e8b455a3e5730e9e6a7a9824d17acc0f72a7f67eae0f0970f8bde46dcdefaed3047cf807e7f00a42e5fd11d40f5e98533d7574425b7d2bc3b3845c443008b58980e768e464e17cc6f6b3939eee52f713963d07d8c4abf02448ef0b889c9671e2f8a436ddeeffcca7176e9bf9d1005ecd377f2fa67c23ed1f137e60bf46018a8bd613d038e883704fc26e798969df35ec7bbc6a4fe46d8910bd82fa3cded265d0a3b6d399e4251e4d8233daa21b5812fded6536198ff13aa5a1cd46a5b9a17a4ddc1d9f85544d1d1cc16f3df858038c8e071a11a7e157a85a6a8dc47e88d75e7009a8b26fdb73f33a2a70f1e0c259f8f9533b9b8f9af9288b7274f21baeec78d396f8bacdcc22471207d9b4efccd3fedc5c5a2214ff5e51c553f35e21ae696fe51e8df733a8e06f50f419e599e9f9e4b37ce643fc810faaa47989771509d69a110ac916261427026369a21263ac4460fb4f708f8ae28599856db7cb6a43ac8e03d64a9609807e76c5f312b9d1863bfa304e8953647648b4f4ab0ed995e":hex:"4109cdbec3240ad74cc6c37f39300f70fede16e21efc77f7865998714aad0b5e" + +generic SHA-384 Test Vector NIST CAVS #1 +depends_on:6:7 +4:char*:"SHA384":hex:"":hex:"38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b" + +generic SHA-384 Test Vector NIST CAVS #2 +depends_on:6:7 +4:char*:"SHA384":hex:"ab":hex:"fb94d5be118865f6fcbc978b825da82cff188faec2f66cb84b2537d74b4938469854b0ca89e66fa2e182834736629f3d" + +generic SHA-384 Test Vector NIST CAVS #3 +depends_on:6:7 +4:char*:"SHA384":hex:"7c27":hex:"3d80be467df86d63abb9ea1d3f9cb39cd19890e7f2c53a6200bedc5006842b35e820dc4e0ca90ca9b97ab23ef07080fc" + +generic SHA-384 Test Vector NIST CAVS #4 +depends_on:6:7 +4:char*:"SHA384":hex:"31f5ca":hex:"78d54b943421fdf7ba90a7fb9637c2073aa480454bd841d39ff72f4511fc21fb67797b652c0c823229342873d3bef955" + +generic SHA-384 Test Vector NIST CAVS #5 +depends_on:6:7 +4:char*:"SHA384":hex:"7bdee3f8":hex:"8bdafba0777ee446c3431c2d7b1fbb631089f71d2ca417abc1d230e1aba64ec2f1c187474a6f4077d372c14ad407f99a" + +generic SHA-384 Test Vector NIST CAVS #6 +depends_on:6:7 +4:char*:"SHA384":hex:"8f05604915":hex:"504e414bf1db1060f14c8c799e25b1e0c4dcf1504ebbd129998f0ae283e6de86e0d3c7e879c73ec3b1836c3ee89c2649" + +generic SHA-384 Test Vector NIST CAVS #7 +depends_on:6:7 +4:char*:"SHA384":hex:"665da6eda214":hex:"4c022f112010908848312f8b8f1072625fd5c105399d562ea1d56130619a7eac8dfc3748fd05ee37e4b690be9daa9980" + +generic SHA-384 Test Vector NIST CAVS #8 +depends_on:6:7 +4:char*:"SHA384":hex:"7f46ce506d593c4ed53c82edeb602037e0485befbee03f7f930fe532d18ff2a3f5fd6076672c8145a1bf40dd94f7abab47c9ae71c234213d2ad1069c2dac0b0ba15257ae672b8245960ae55bd50315c0097daa3a318745788d70d14706910809ca6e396237fe4934fa46f9ce782d66606d8bd6b2d283b1160513ce9c24e9f084b97891f99d4cdefc169a029e431ca772ba1bba426fce6f01d8e286014e5acc66b799e4db62bd4783322f8a32ff78e0de3957df50ce10871f4e0680df4e8ca3960af9bc6f4efa8eb3962d18f474eb178c3265cc46b8f2ff5ab1a7449fea297dfcfabfa01f28abbb7289bb354b691b5664ec6d098af51be19947ec5ba7ebd66380d1141953ba78d4aa5401679fa7b0a44db1981f864d3535c45afe4c61183d5b0ad51fae71ca07e34240283959f7530a32c70d95a088e501c230059f333b0670825009e7e22103ef22935830df1fac8ef877f5f3426dd54f7d1128dd871ad9a7d088f94c0e8712013295b8d69ae7623b880978c2d3c6ad26dc478f8dc47f5c0adcc618665dc3dc205a9071b2f2191e16cac5bd89bb59148fc719633752303aa08e518dbc389f0a5482caaa4c507b8729a6f3edd061efb39026cecc6399f51971cf7381d605e144a5928c8c2d1ad7467b05da2f202f4f3234e1aff19a0198a28685721c3d2d52311c721e3fdcbaf30214cdc3acff8c433880e104fb63f2df7ce69a97857819ba7ac00ac8eae1969764fde8f68cf8e0916d7e0c151147d4944f99f42ae50f30e1c79a42d2b6c5188d133d3cbbf69094027b354b295ccd0f7dc5a87d73638bd98ebfb00383ca0fa69cb8dcb35a12510e5e07ad8789047d0b63841a1bb928737e8b0a0c33254f47aa8bfbe3341a09c2b76dbcefa67e30df300d34f7b8465c4f869e51b6bcfe6cf68b238359a645036bf7f63f02924e087ce7457e483b6025a859903cb484574aa3b12cf946f32127d537c33bee3141b5db96d10a148c50ae045f287210757710d6846e04b202f79e87dd9a56bc6da15f84a77a7f63935e1dee00309cd276a8e7176cb04da6bb0e9009534438732cb42d008008853d38d19beba46e61006e30f7efd1bc7c2906b024e4ff898a1b58c448d68b43c6ab63f34f85b3ac6aa4475867e51b583844cb23829f4b30f4bdd817d88e2ef3e7b4fc0a624395b05ec5e8686082b24d29fef2b0d3c29e031d5f94f504b1d3df9361eb5ffbadb242e66c39a8094cfe62f85f639f3fd65fc8ae0c74a8f4c6e1d070b9183a434c722caaa0225f8bcd68614d6f0738ed62f8484ec96077d155c08e26c46be262a73e3551698bd70d8d5610cf37c4c306eed04ba6a040a9c3e6d7e15e8acda17f477c2484cf5c56b813313927be8387b1024f995e98fc87f1029091c01424bdc2b296c2eadb7d25b3e762a2fd0c2dcd1727ddf91db97c5984305265f3695a7f5472f2d72c94d68c27914f14f82aa8dd5fe4e2348b0ca967a3f98626a091552f5d0ffa2bf10350d23c996256c01fdeffb2c2c612519869f877e4929c6e95ff15040f1485e22ed14119880232fef3b57b3848f15b1766a5552879df8f06":hex:"cba9e3eb12a6f83db11e8a6ff40d1049854ee094416bc527fea931d8585428a8ed6242ce81f6769b36e2123a5c23483e" + +generic SHA-512 Test Vector NIST CAVS #1 +depends_on:6 +4:char*:"SHA512":hex:"":hex:"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" + +generic SHA-512 Test Vector NIST CAVS #2 +depends_on:6 +4:char*:"SHA512":hex:"8f":hex:"e4cd2d19931b5aad9c920f45f56f6ce34e3d38c6d319a6e11d0588ab8b838576d6ce6d68eea7c830de66e2bd96458bfa7aafbcbec981d4ed040498c3dd95f22a" + +generic SHA-512 Test Vector NIST CAVS #3 +depends_on:6 +4:char*:"SHA512":hex:"e724":hex:"7dbb520221a70287b23dbcf62bfc1b73136d858e86266732a7fffa875ecaa2c1b8f673b5c065d360c563a7b9539349f5f59bef8c0c593f9587e3cd50bb26a231" + +generic SHA-512 Test Vector NIST CAVS #4 +depends_on:6 +4:char*:"SHA512":hex:"de4c90":hex:"33ce98281045a5c4c9df0363d8196f1d7dfcd5ee46ac89776fd8a4344c12f123a66788af5bd41ceff1941aa5637654b4064c88c14e00465ab79a2fc6c97e1014" + +generic SHA-512 Test Vector NIST CAVS #5 +depends_on:6 +4:char*:"SHA512":hex:"a801e94b":hex:"dadb1b5a27f9fece8d86adb2a51879beb1787ff28f4e8ce162cad7fee0f942efcabbf738bc6f797fc7cc79a3a75048cd4c82ca0757a324695bfb19a557e56e2f" + +generic SHA-512 Test Vector NIST CAVS #6 +depends_on:6 +4:char*:"SHA512":hex:"94390d3502":hex:"b6175c4c4cccf69e0ce5f0312010886ea6b34d43673f942ae42483f9cbb7da817de4e11b5d58e25a3d9bd721a22cdffe1c40411cc45df1911fa5506129b69297" + +generic SHA-512 Test Vector NIST CAVS #7 +depends_on:6 +4:char*:"SHA512":hex:"49297dd63e5f":hex:"1fcc1e6f6870859d11649f5e5336a9cd16329c029baf04d5a6edf257889a2e9522b497dd656bb402da461307c4ee382e2e89380c8e6e6e7697f1e439f650fa94" + +generic SHA-512 Test Vector NIST CAVS #8 +depends_on:6 +4:char*:"SHA512":hex:"990d1ae71a62d7bda9bfdaa1762a68d296eee72a4cd946f287a898fbabc002ea941fd8d4d991030b4d27a637cce501a834bb95eab1b7889a3e784c7968e67cbf552006b206b68f76d9191327524fcc251aeb56af483d10b4e0c6c5e599ee8c0fe4faeca8293844a8547c6a9a90d093f2526873a19ad4a5e776794c68c742fb834793d2dfcb7fea46c63af4b70fd11cb6e41834e72ee40edb067b292a794990c288d5007e73f349fb383af6a756b8301ad6e5e0aa8cd614399bb3a452376b1575afa6bdaeaafc286cb064bb91edef97c632b6c1113d107fa93a0905098a105043c2f05397f702514439a08a9e5ddc196100721d45c8fc17d2ed659376f8a00bd5cb9a0860e26d8a29d8d6aaf52de97e9346033d6db501a35dbbaf97c20b830cd2d18c2532f3a59cc497ee64c0e57d8d060e5069b28d86edf1adcf59144b221ce3ddaef134b3124fbc7dd000240eff0f5f5f41e83cd7f5bb37c9ae21953fe302b0f6e8b68fa91c6ab99265c64b2fd9cd4942be04321bb5d6d71932376c6f2f88e02422ba6a5e2cb765df93fd5dd0728c6abdaf03bce22e0678a544e2c3636f741b6f4447ee58a8fc656b43ef817932176adbfc2e04b2c812c273cd6cbfa4098f0be036a34221fa02643f5ee2e0b38135f2a18ecd2f16ebc45f8eb31b8ab967a1567ee016904188910861ca1fa205c7adaa194b286893ffe2f4fbe0384c2aef72a4522aeafd3ebc71f9db71eeeef86c48394a1c86d5b36c352cc33a0a2c800bc99e62fd65b3a2fd69e0b53996ec13d8ce483ce9319efd9a85acefabdb5342226febb83fd1daf4b24265f50c61c6de74077ef89b6fecf9f29a1f871af1e9f89b2d345cda7499bd45c42fa5d195a1e1a6ba84851889e730da3b2b916e96152ae0c92154b49719841db7e7cc707ba8a5d7b101eb4ac7b629bb327817910fff61580b59aab78182d1a2e33473d05b00b170b29e331870826cfe45af206aa7d0246bbd8566ca7cfb2d3c10bfa1db7dd48dd786036469ce7282093d78b5e1a5b0fc81a54c8ed4ceac1e5305305e78284ac276f5d7862727aff246e17addde50c670028d572cbfc0be2e4f8b2eb28fa68ad7b4c6c2a239c460441bfb5ea049f23b08563b4e47729a59e5986a61a6093dbd54f8c36ebe87edae01f251cb060ad1364ce677d7e8d5a4a4ca966a7241cc360bc2acb280e5f9e9c1b032ad6a180a35e0c5180b9d16d026c865b252098cc1d99ba7375ca31c7702c0d943d5e3dd2f6861fa55bd46d94b67ed3e52eccd8dd06d968e01897d6de97ed3058d91dd":hex:"8e4bc6f8b8c60fe4d68c61d9b159c8693c3151c46749af58da228442d927f23359bd6ccd6c2ec8fa3f00a86cecbfa728e1ad60b821ed22fcd309ba91a4138bc9" + +generic multi step SHA-1 Test Vector NIST CAVS #1 +depends_on:4 +6:char*:"SHA1":hex:"":hex:"da39a3ee5e6b4b0d3255bfef95601890afd80709" + +generic multi step SHA-1 Test Vector NIST CAVS #2 +depends_on:4 +6:char*:"SHA1":hex:"a8":hex:"99f2aa95e36f95c2acb0eaf23998f030638f3f15" + +generic multi step SHA-1 Test Vector NIST CAVS #3 +depends_on:4 +6:char*:"SHA1":hex:"3000":hex:"f944dcd635f9801f7ac90a407fbc479964dec024" + +generic multi step SHA-1 Test Vector NIST CAVS #4 +depends_on:4 +6:char*:"SHA1":hex:"42749e":hex:"a444319e9b6cc1e8464c511ec0969c37d6bb2619" + +generic multi step SHA-1 Test Vector NIST CAVS #5 +depends_on:4 +6:char*:"SHA1":hex:"9fc3fe08":hex:"16a0ff84fcc156fd5d3ca3a744f20a232d172253" + +generic multi step SHA-1 Test Vector NIST CAVS #6 +depends_on:4 +6:char*:"SHA1":hex:"b5c1c6f1af":hex:"fec9deebfcdedaf66dda525e1be43597a73a1f93" + +generic multi step SHA-1 Test Vector NIST CAVS #7 +depends_on:4 +6:char*:"SHA1":hex:"ec29561244ede706b6eb30a1c371d74450a105c3f9735f7fa9fe38cf67f304a5736a106e92e17139a6813b1c81a4f3d3fb9546ab4296fa9f722826c066869edacd73b2548035185813e22634a9da44000d95a281ff9f264ecce0a931222162d021cca28db5f3c2aa24945ab1e31cb413ae29810fd794cad5dfaf29ec43cb38d198fe4ae1da2359780221405bd6712a5305da4b1b737fce7cd21c0eb7728d08235a9011":hex:"970111c4e77bcc88cc20459c02b69b4aa8f58217" + +generic multi step SHA-1 Test Vector NIST CAVS #8 +depends_on:4 +6:char*:"SHA1":hex:"5fc2c3f6a7e79dc94be526e5166a238899d54927ce470018fbfd668fd9dd97cbf64e2c91584d01da63be3cc9fdff8adfefc3ac728e1e335b9cdc87f069172e323d094b47fa1e652afe4d6aa147a9f46fda33cacb65f3aa12234746b9007a8c85fe982afed7815221e43dba553d8fe8a022cdac1b99eeeea359e5a9d2e72e382dffa6d19f359f4f27dc3434cd27daeeda8e38594873398678065fbb23665aba9309d946135da0e4a4afdadff14db18e85e71dd93c3bf9faf7f25c8194c4269b1ee3d9934097ab990025d9c3aaf63d5109f52335dd3959d38ae485050e4bbb6235574fc0102be8f7a306d6e8de6ba6becf80f37415b57f9898a5824e77414197422be3d36a6080":hex:"0423dc76a8791107d14e13f5265b343f24cc0f19" + +generic multi step SHA-1 Test Vector NIST CAVS #9 +depends_on:4 +6:char*:"SHA1":hex:"0f865f46a8f3aed2da18482aa09a8f390dc9da07d51d1bd10fe0bf5f3928d5927d08733d32075535a6d1c8ac1b2dc6ba0f2f633dc1af68e3f0fa3d85e6c60cb7b56c239dc1519a007ea536a07b518ecca02a6c31b46b76f021620ef3fc6976804018380e5ab9c558ebfc5cb1c9ed2d974722bf8ab6398f1f2b82fa5083f85c16a5767a3a07271d67743f00850ce8ec428c7f22f1cf01f99895c0c844845b06a06cecb0c6cf83eb55a1d4ebc44c2c13f6f7aa5e0e08abfd84e7864279057abc471ee4a45dbbb5774afa24e51791a0eada11093b88681fe30baa3b2e94113dc63342c51ca5d1a6096d0897b626e42cb91761058008f746f35465465540ad8c6b8b60f7e1461b3ce9e6529625984cb8c7d46f07f735be067588a0117f23e34ff57800e2bbe9a1605fde6087fb15d22c5d3ac47566b8c448b0cee40373e5ba6eaa21abee71366afbb27dbbd300477d70c371e7b8963812f5ed4fb784fb2f3bd1d3afe883cdd47ef32beaea":hex:"6692a71d73e00f27df976bc56df4970650d90e45" + +generic multi step SHA-1 Test Vector NIST CAVS #10 +depends_on:4 +6:char*:"SHA1":hex:"8236153781bd2f1b81ffe0def1beb46f5a70191142926651503f1b3bb1016acdb9e7f7acced8dd168226f118ff664a01a8800116fd023587bfba52a2558393476f5fc69ce9c65001f23e70476d2cc81c97ea19caeb194e224339bcb23f77a83feac5096f9b3090c51a6ee6d204b735aa71d7e996d380b80822e4dfd43683af9c7442498cacbea64842dfda238cb099927c6efae07fdf7b23a4e4456e0152b24853fe0d5de4179974b2b9d4a1cdbefcbc01d8d311b5dda059136176ea698ab82acf20dd490be47130b1235cb48f8a6710473cfc923e222d94b582f9ae36d4ca2a32d141b8e8cc36638845fbc499bce17698c3fecae2572dbbd470552430d7ef30c238c2124478f1f780483839b4fb73d63a9460206824a5b6b65315b21e3c2f24c97ee7c0e78faad3df549c7ca8ef241876d9aafe9a309f6da352bec2caaa92ee8dca392899ba67dfed90aef33d41fc2494b765cb3e2422c8e595dabbfaca217757453fb322a13203f425f6073a9903e2dc5818ee1da737afc345f0057744e3a56e1681c949eb12273a3bfc20699e423b96e44bd1ff62e50a848a890809bfe1611c6787d3d741103308f849a790f9c015098286dbacfc34c1718b2c2b77e32194a75dda37954a320fa68764027852855a7e5b5274eb1e2cbcd27161d98b59ad245822015f48af82a45c0ed59be94f9af03d9736048570d6e3ef63b1770bc98dfb77de84b1bb1708d872b625d9ab9b06c18e5dbbf34399391f0f8aa26ec0dac7ff4cb8ec97b52bcb942fa6db2385dcd1b3b9d567aaeb425d567b0ebe267235651a1ed9bf78fd93d3c1dd077fe340bb04b00529c58f45124b717c168d07e9826e33376988bc5cf62845c2009980a4dfa69fbc7e5a0b1bb20a5958ca967aec68eb31dd8fccca9afcd30a26bab26279f1bf6724ff":hex:"11863b483809ef88413ca9b0084ac4a5390640af" + +generic multi step SHA-224 Test Vector NIST CAVS #1 +depends_on:5 +6:char*:"SHA224":hex:"":hex:"d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f" + +generic multi step SHA-224 Test Vector NIST CAVS #2 +depends_on:5 +6:char*:"SHA224":hex:"ff":hex:"e33f9d75e6ae1369dbabf81b96b4591ae46bba30b591a6b6c62542b5" + +generic multi step SHA-224 Test Vector NIST CAVS #3 +depends_on:5 +6:char*:"SHA224":hex:"984c":hex:"2fa9df9157d9e027cfbc4c6a9df32e1adc0cbe2328ec2a63c5ae934e" + +generic multi step SHA-224 Test Vector NIST CAVS #4 +depends_on:5 +6:char*:"SHA224":hex:"50efd0":hex:"b5a9820413c2bf8211fbbf5df1337043b32fa4eafaf61a0c8e9ccede" + +generic multi step SHA-224 Test Vector NIST CAVS #5 +depends_on:5 +6:char*:"SHA224":hex:"e5e09924":hex:"fd19e74690d291467ce59f077df311638f1c3a46e510d0e49a67062d" + +generic multi step SHA-224 Test Vector NIST CAVS #6 +depends_on:5 +6:char*:"SHA224":hex:"21ebecb914":hex:"78f4a71c21c694499ce1c7866611b14ace70d905012c356323c7c713" + +generic multi step SHA-224 Test Vector NIST CAVS #7 +depends_on:5 +6:char*:"SHA224":hex:"fc488947c1a7a589726b15436b4f3d9556262f98fc6422fc5cdf20f0fad7fe427a3491c86d101ffe6b7514f06268f65b2d269b0f69ad9a97847eff1c16a2438775eb7be6847ccf11cb8b2e8dcd6640b095b49c0693fe3cf4a66e2d9b7ad68bff14f3ad69abf49d0aba36cbe0535202deb6599a47225ef05beb351335cd7bc0f480d691198c7e71305ffd53b39d33242bb79cfd98bfd69e137b5d18b2b89ac9ace01c8dbdcf2533cce3682ecc52118de0c1062ec2126c2e657d6ea3d9e2398e705d4b0b1f1ceecb266dffc4f31bf42744fb1e938dc22a889919ee1e73f463f7871fed720519e32186264b7ef2a0e5d9a18e6c95c0781894f77967f048951dec3b4d892a38710b1e3436d3c29088eb8b3da1789c25db3d3bc6c26081206e7155d210a89b80ca6ea877c41ff9947c0f25625dcb118294a163501f6239c326661a958fd12da4cd15a899f8b88cc723589056eaec5aa04a4cf5dbb6f480f9660423ccf38c486e210707e0fb25e1f126ceb2616f63e147a647dab0af9ebe89d65458bf636154a46e4cab95f5ee62da2c7974cd14b90d3e4f99f81733e85b3c1d5da2b508d9b90f5eed7eff0d9c7649de62bee00375454fee4a39576a5bbfdae428e7f8097bdf7797f167686cb68407e49079e4611ff3402b6384ba7b7e522bd2bb11ce8fd02ea4c1604d163ac4f6dde50b8b1f593f7edaadeac0868ed97df690200680c25f0f5d85431a529e4f339089dcdeda105e4ee51dead704cdf5a605c55fb055c9b0e86b8ba1b564c0dea3eb790a595cb103cb292268b07c5e59371e1a7ef597cd4b22977a820694c9f9aeb55d9de3ef62b75d6e656e3336698d960a3787bf8cf5b926a7faeef52ae128bcb5dc9e66d94b016c7b8e034879171a2d91c381f57e6a815b63b5ee6a6d2ff435b49f14c963966960194430d78f8f87627a67757fb3532b289550894da6dce4817a4e07f4d56877a1102ffcc8befa5c9f8fca6a4574d93ff70376c8861e0f8108cf907fce77ecb49728f86f034f80224b9695682e0824462f76cdb1fd1af151337b0d85419047a7aa284791718a4860cd586f7824b95bc837b6fd4f9be5aade68456e20356aa4d943dac36bf8b67b9e8f9d01a00fcda74b798bafa746c661b010f75b59904b29d0c8041504811c4065f82cf2ead58d2f595cbd8bc3e7043f4d94577b373b7cfe16a36fe564f505c03b70cfeb5e5f411c79481338aa67e86b3f5a2e77c21e454c333ae3da943ab723ab5f4c940395319534a5575f64acba0d0ecc43f60221ed3badf7289c9b3a7b903a2d6c94e15fa4c310dc4fa7faa0c24f405160a1002dbef20e4105d481db982f7243f79400a6e4cd9753c4b9732a47575f504b20c328fe9add7f432a4f075829da07b53b695037dc51737d3cd731934df333cd1a53fcf65aa31baa450ca501a6fae26e322347e618c5a444d92e9fec5a8261ae38b98fee5be77c02cec09ddccd5b3de92036":hex:"1302149d1e197c41813b054c942329d420e366530f5517b470e964fe" + +generic multi step SHA-256 Test Vector NIST CAVS #1 +depends_on:5 +6:char*:"SHA256":hex:"":hex:"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + +generic multi step SHA-256 Test Vector NIST CAVS #2 +depends_on:5 +6:char*:"SHA256":hex:"bd":hex:"68325720aabd7c82f30f554b313d0570c95accbb7dc4b5aae11204c08ffe732b" + +generic multi step SHA-256 Test Vector NIST CAVS #3 +depends_on:5 +6:char*:"SHA256":hex:"5fd4":hex:"7c4fbf484498d21b487b9d61de8914b2eadaf2698712936d47c3ada2558f6788" + +generic multi step SHA-256 Test Vector NIST CAVS #4 +depends_on:5 +6:char*:"SHA256":hex:"b0bd69":hex:"4096804221093ddccfbf46831490ea63e9e99414858f8d75ff7f642c7ca61803" + +generic multi step SHA-256 Test Vector NIST CAVS #5 +depends_on:5 +6:char*:"SHA256":hex:"c98c8e55":hex:"7abc22c0ae5af26ce93dbb94433a0e0b2e119d014f8e7f65bd56c61ccccd9504" + +generic multi step SHA-256 Test Vector NIST CAVS #6 +depends_on:5 +6:char*:"SHA256":hex:"81a723d966":hex:"7516fb8bb11350df2bf386bc3c33bd0f52cb4c67c6e4745e0488e62c2aea2605" + +generic multi step SHA-256 Test Vector NIST CAVS #7 +depends_on:5 +6:char*:"SHA256":hex:"8390cf0be07661cc7669aac54ce09a37733a629d45f5d983ef201f9b2d13800e555d9b1097fec3b783d7a50dcb5e2b644b96a1e9463f177cf34906bf388f366db5c2deee04a30e283f764a97c3b377a034fefc22c259214faa99babaff160ab0aaa7e2ccb0ce09c6b32fe08cbc474694375aba703fadbfa31cf685b30a11c57f3cf4edd321e57d3ae6ebb1133c8260e75b9224fa47a2bb205249add2e2e62f817491482ae152322be0900355cdcc8d42a98f82e961a0dc6f537b7b410eff105f59673bfb787bf042aa071f7af68d944d27371c64160fe9382772372516c230c1f45c0d6b6cca7f274b394da9402d3eafdf733994ec58ab22d71829a98399574d4b5908a447a5a681cb0dd50a31145311d92c22a16de1ead66a5499f2dceb4cae694772ce90762ef8336afec653aa9b1a1c4820b221136dfce80dce2ba920d88a530c9410d0a4e0358a3a11052e58dd73b0b179ef8f56fe3b5a2d117a73a0c38a1392b6938e9782e0d86456ee4884e3c39d4d75813f13633bc79baa07c0d2d555afbf207f52b7dca126d015aa2b9873b3eb065e90b9b065a5373fe1fb1b20d594327d19fba56cb81e7b6696605ffa56eba3c27a438697cc21b201fd7e09f18deea1b3ea2f0d1edc02df0e20396a145412cd6b13c32d2e605641c948b714aec30c0649dc44143511f35ab0fd5dd64c34d06fe86f3836dfe9edeb7f08cfc3bd40956826356242191f99f53473f32b0cc0cf9321d6c92a112e8db90b86ee9e87cc32d0343db01e32ce9eb782cb24efbbbeb440fe929e8f2bf8dfb1550a3a2e742e8b455a3e5730e9e6a7a9824d17acc0f72a7f67eae0f0970f8bde46dcdefaed3047cf807e7f00a42e5fd11d40f5e98533d7574425b7d2bc3b3845c443008b58980e768e464e17cc6f6b3939eee52f713963d07d8c4abf02448ef0b889c9671e2f8a436ddeeffcca7176e9bf9d1005ecd377f2fa67c23ed1f137e60bf46018a8bd613d038e883704fc26e798969df35ec7bbc6a4fe46d8910bd82fa3cded265d0a3b6d399e4251e4d8233daa21b5812fded6536198ff13aa5a1cd46a5b9a17a4ddc1d9f85544d1d1cc16f3df858038c8e071a11a7e157a85a6a8dc47e88d75e7009a8b26fdb73f33a2a70f1e0c259f8f9533b9b8f9af9288b7274f21baeec78d396f8bacdcc22471207d9b4efccd3fedc5c5a2214ff5e51c553f35e21ae696fe51e8df733a8e06f50f419e599e9f9e4b37ce643fc810faaa47989771509d69a110ac916261427026369a21263ac4460fb4f708f8ae28599856db7cb6a43ac8e03d64a9609807e76c5f312b9d1863bfa304e8953647648b4f4ab0ed995e":hex:"4109cdbec3240ad74cc6c37f39300f70fede16e21efc77f7865998714aad0b5e" + +generic multi step SHA-384 Test Vector NIST CAVS #1 +depends_on:6:7 +6:char*:"SHA384":hex:"":hex:"38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b" + +generic multi step SHA-384 Test Vector NIST CAVS #2 +depends_on:6:7 +6:char*:"SHA384":hex:"ab":hex:"fb94d5be118865f6fcbc978b825da82cff188faec2f66cb84b2537d74b4938469854b0ca89e66fa2e182834736629f3d" + +generic multi step SHA-384 Test Vector NIST CAVS #3 +depends_on:6:7 +6:char*:"SHA384":hex:"7c27":hex:"3d80be467df86d63abb9ea1d3f9cb39cd19890e7f2c53a6200bedc5006842b35e820dc4e0ca90ca9b97ab23ef07080fc" + +generic multi step SHA-384 Test Vector NIST CAVS #4 +depends_on:6:7 +6:char*:"SHA384":hex:"31f5ca":hex:"78d54b943421fdf7ba90a7fb9637c2073aa480454bd841d39ff72f4511fc21fb67797b652c0c823229342873d3bef955" + +generic multi step SHA-384 Test Vector NIST CAVS #5 +depends_on:6:7 +6:char*:"SHA384":hex:"7bdee3f8":hex:"8bdafba0777ee446c3431c2d7b1fbb631089f71d2ca417abc1d230e1aba64ec2f1c187474a6f4077d372c14ad407f99a" + +generic multi step SHA-384 Test Vector NIST CAVS #6 +depends_on:6:7 +6:char*:"SHA384":hex:"8f05604915":hex:"504e414bf1db1060f14c8c799e25b1e0c4dcf1504ebbd129998f0ae283e6de86e0d3c7e879c73ec3b1836c3ee89c2649" + +generic multi step SHA-384 Test Vector NIST CAVS #7 +depends_on:6:7 +6:char*:"SHA384":hex:"665da6eda214":hex:"4c022f112010908848312f8b8f1072625fd5c105399d562ea1d56130619a7eac8dfc3748fd05ee37e4b690be9daa9980" + +generic multi step SHA-384 Test Vector NIST CAVS #8 +depends_on:6:7 +6:char*:"SHA384":hex:"7f46ce506d593c4ed53c82edeb602037e0485befbee03f7f930fe532d18ff2a3f5fd6076672c8145a1bf40dd94f7abab47c9ae71c234213d2ad1069c2dac0b0ba15257ae672b8245960ae55bd50315c0097daa3a318745788d70d14706910809ca6e396237fe4934fa46f9ce782d66606d8bd6b2d283b1160513ce9c24e9f084b97891f99d4cdefc169a029e431ca772ba1bba426fce6f01d8e286014e5acc66b799e4db62bd4783322f8a32ff78e0de3957df50ce10871f4e0680df4e8ca3960af9bc6f4efa8eb3962d18f474eb178c3265cc46b8f2ff5ab1a7449fea297dfcfabfa01f28abbb7289bb354b691b5664ec6d098af51be19947ec5ba7ebd66380d1141953ba78d4aa5401679fa7b0a44db1981f864d3535c45afe4c61183d5b0ad51fae71ca07e34240283959f7530a32c70d95a088e501c230059f333b0670825009e7e22103ef22935830df1fac8ef877f5f3426dd54f7d1128dd871ad9a7d088f94c0e8712013295b8d69ae7623b880978c2d3c6ad26dc478f8dc47f5c0adcc618665dc3dc205a9071b2f2191e16cac5bd89bb59148fc719633752303aa08e518dbc389f0a5482caaa4c507b8729a6f3edd061efb39026cecc6399f51971cf7381d605e144a5928c8c2d1ad7467b05da2f202f4f3234e1aff19a0198a28685721c3d2d52311c721e3fdcbaf30214cdc3acff8c433880e104fb63f2df7ce69a97857819ba7ac00ac8eae1969764fde8f68cf8e0916d7e0c151147d4944f99f42ae50f30e1c79a42d2b6c5188d133d3cbbf69094027b354b295ccd0f7dc5a87d73638bd98ebfb00383ca0fa69cb8dcb35a12510e5e07ad8789047d0b63841a1bb928737e8b0a0c33254f47aa8bfbe3341a09c2b76dbcefa67e30df300d34f7b8465c4f869e51b6bcfe6cf68b238359a645036bf7f63f02924e087ce7457e483b6025a859903cb484574aa3b12cf946f32127d537c33bee3141b5db96d10a148c50ae045f287210757710d6846e04b202f79e87dd9a56bc6da15f84a77a7f63935e1dee00309cd276a8e7176cb04da6bb0e9009534438732cb42d008008853d38d19beba46e61006e30f7efd1bc7c2906b024e4ff898a1b58c448d68b43c6ab63f34f85b3ac6aa4475867e51b583844cb23829f4b30f4bdd817d88e2ef3e7b4fc0a624395b05ec5e8686082b24d29fef2b0d3c29e031d5f94f504b1d3df9361eb5ffbadb242e66c39a8094cfe62f85f639f3fd65fc8ae0c74a8f4c6e1d070b9183a434c722caaa0225f8bcd68614d6f0738ed62f8484ec96077d155c08e26c46be262a73e3551698bd70d8d5610cf37c4c306eed04ba6a040a9c3e6d7e15e8acda17f477c2484cf5c56b813313927be8387b1024f995e98fc87f1029091c01424bdc2b296c2eadb7d25b3e762a2fd0c2dcd1727ddf91db97c5984305265f3695a7f5472f2d72c94d68c27914f14f82aa8dd5fe4e2348b0ca967a3f98626a091552f5d0ffa2bf10350d23c996256c01fdeffb2c2c612519869f877e4929c6e95ff15040f1485e22ed14119880232fef3b57b3848f15b1766a5552879df8f06":hex:"cba9e3eb12a6f83db11e8a6ff40d1049854ee094416bc527fea931d8585428a8ed6242ce81f6769b36e2123a5c23483e" + +generic multi step SHA-512 Test Vector NIST CAVS #1 +depends_on:6 +6:char*:"SHA512":hex:"":hex:"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" + +generic multi step SHA-512 Test Vector NIST CAVS #2 +depends_on:6 +6:char*:"SHA512":hex:"8f":hex:"e4cd2d19931b5aad9c920f45f56f6ce34e3d38c6d319a6e11d0588ab8b838576d6ce6d68eea7c830de66e2bd96458bfa7aafbcbec981d4ed040498c3dd95f22a" + +generic multi step SHA-512 Test Vector NIST CAVS #3 +depends_on:6 +6:char*:"SHA512":hex:"e724":hex:"7dbb520221a70287b23dbcf62bfc1b73136d858e86266732a7fffa875ecaa2c1b8f673b5c065d360c563a7b9539349f5f59bef8c0c593f9587e3cd50bb26a231" + +generic multi step SHA-512 Test Vector NIST CAVS #4 +depends_on:6 +6:char*:"SHA512":hex:"de4c90":hex:"33ce98281045a5c4c9df0363d8196f1d7dfcd5ee46ac89776fd8a4344c12f123a66788af5bd41ceff1941aa5637654b4064c88c14e00465ab79a2fc6c97e1014" + +generic multi step SHA-512 Test Vector NIST CAVS #5 +depends_on:6 +6:char*:"SHA512":hex:"a801e94b":hex:"dadb1b5a27f9fece8d86adb2a51879beb1787ff28f4e8ce162cad7fee0f942efcabbf738bc6f797fc7cc79a3a75048cd4c82ca0757a324695bfb19a557e56e2f" + +generic multi step SHA-512 Test Vector NIST CAVS #6 +depends_on:6 +6:char*:"SHA512":hex:"94390d3502":hex:"b6175c4c4cccf69e0ce5f0312010886ea6b34d43673f942ae42483f9cbb7da817de4e11b5d58e25a3d9bd721a22cdffe1c40411cc45df1911fa5506129b69297" + +generic multi step SHA-512 Test Vector NIST CAVS #7 +depends_on:6 +6:char*:"SHA512":hex:"49297dd63e5f":hex:"1fcc1e6f6870859d11649f5e5336a9cd16329c029baf04d5a6edf257889a2e9522b497dd656bb402da461307c4ee382e2e89380c8e6e6e7697f1e439f650fa94" + +generic multi step SHA-512 Test Vector NIST CAVS #8 +depends_on:6 +6:char*:"SHA512":hex:"990d1ae71a62d7bda9bfdaa1762a68d296eee72a4cd946f287a898fbabc002ea941fd8d4d991030b4d27a637cce501a834bb95eab1b7889a3e784c7968e67cbf552006b206b68f76d9191327524fcc251aeb56af483d10b4e0c6c5e599ee8c0fe4faeca8293844a8547c6a9a90d093f2526873a19ad4a5e776794c68c742fb834793d2dfcb7fea46c63af4b70fd11cb6e41834e72ee40edb067b292a794990c288d5007e73f349fb383af6a756b8301ad6e5e0aa8cd614399bb3a452376b1575afa6bdaeaafc286cb064bb91edef97c632b6c1113d107fa93a0905098a105043c2f05397f702514439a08a9e5ddc196100721d45c8fc17d2ed659376f8a00bd5cb9a0860e26d8a29d8d6aaf52de97e9346033d6db501a35dbbaf97c20b830cd2d18c2532f3a59cc497ee64c0e57d8d060e5069b28d86edf1adcf59144b221ce3ddaef134b3124fbc7dd000240eff0f5f5f41e83cd7f5bb37c9ae21953fe302b0f6e8b68fa91c6ab99265c64b2fd9cd4942be04321bb5d6d71932376c6f2f88e02422ba6a5e2cb765df93fd5dd0728c6abdaf03bce22e0678a544e2c3636f741b6f4447ee58a8fc656b43ef817932176adbfc2e04b2c812c273cd6cbfa4098f0be036a34221fa02643f5ee2e0b38135f2a18ecd2f16ebc45f8eb31b8ab967a1567ee016904188910861ca1fa205c7adaa194b286893ffe2f4fbe0384c2aef72a4522aeafd3ebc71f9db71eeeef86c48394a1c86d5b36c352cc33a0a2c800bc99e62fd65b3a2fd69e0b53996ec13d8ce483ce9319efd9a85acefabdb5342226febb83fd1daf4b24265f50c61c6de74077ef89b6fecf9f29a1f871af1e9f89b2d345cda7499bd45c42fa5d195a1e1a6ba84851889e730da3b2b916e96152ae0c92154b49719841db7e7cc707ba8a5d7b101eb4ac7b629bb327817910fff61580b59aab78182d1a2e33473d05b00b170b29e331870826cfe45af206aa7d0246bbd8566ca7cfb2d3c10bfa1db7dd48dd786036469ce7282093d78b5e1a5b0fc81a54c8ed4ceac1e5305305e78284ac276f5d7862727aff246e17addde50c670028d572cbfc0be2e4f8b2eb28fa68ad7b4c6c2a239c460441bfb5ea049f23b08563b4e47729a59e5986a61a6093dbd54f8c36ebe87edae01f251cb060ad1364ce677d7e8d5a4a4ca966a7241cc360bc2acb280e5f9e9c1b032ad6a180a35e0c5180b9d16d026c865b252098cc1d99ba7375ca31c7702c0d943d5e3dd2f6861fa55bd46d94b67ed3e52eccd8dd06d968e01897d6de97ed3058d91dd":hex:"8e4bc6f8b8c60fe4d68c61d9b159c8693c3151c46749af58da228442d927f23359bd6ccd6c2ec8fa3f00a86cecbfa728e1ad60b821ed22fcd309ba91a4138bc9" + +generic SHA1 Hash file #1 +depends_on:4 +9:char*:"SHA1":char*:"zip:third_party/mbedtls/test/data/hash_file_1":hex:"d21c965b1e768bd7a6aa6869f5f821901d255f9f" + +generic SHA1 Hash file #2 +depends_on:4 +9:char*:"SHA1":char*:"zip:third_party/mbedtls/test/data/hash_file_2":hex:"353f34271f2aef49d23a8913d4a6bd82b2cecdc6" + +generic SHA1 Hash file #3 +depends_on:4 +9:char*:"SHA1":char*:"zip:third_party/mbedtls/test/data/hash_file_3":hex:"93640ed592076328096270c756db2fba9c486b35" + +generic SHA1 Hash file #4 +depends_on:4 +9:char*:"SHA1":char*:"zip:third_party/mbedtls/test/data/hash_file_4":hex:"da39a3ee5e6b4b0d3255bfef95601890afd80709" + +generic SHA-224 Hash file #1 +depends_on:5 +9:char*:"SHA224":char*:"zip:third_party/mbedtls/test/data/hash_file_1":hex:"8606da018870f0c16834a21bc3385704cb1683b9dbab04c5ddb90a48" + +generic SHA-224 Hash file #2 +depends_on:5 +9:char*:"SHA224":char*:"zip:third_party/mbedtls/test/data/hash_file_2":hex:"733b2ab97b6f63f2e29b9a2089756d81e14c93fe4cc9615c0d5e8a03" + +generic SHA-224 Hash file #3 +depends_on:5 +9:char*:"SHA224":char*:"zip:third_party/mbedtls/test/data/hash_file_3":hex:"e1df95867580e2cc2100e9565bf9c2e42c24fe5250c19efe33d1c4fe" + +generic SHA-224 Hash file #4 +depends_on:5 +9:char*:"SHA224":char*:"zip:third_party/mbedtls/test/data/hash_file_4":hex:"d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f" + +generic SHA-256 Hash file #1 +depends_on:5 +9:char*:"SHA256":char*:"zip:third_party/mbedtls/test/data/hash_file_1":hex:"975d0c620d3936886f8a3665e585a3e84aa0501f4225bf53029710242823e391" + +generic SHA-256 Hash file #2 +depends_on:5 +9:char*:"SHA256":char*:"zip:third_party/mbedtls/test/data/hash_file_2":hex:"11fcbf1baa36ca45745f10cc5467aee86f066f80ba2c46806d876bf783022ad2" + +generic SHA-256 Hash file #3 +depends_on:5 +9:char*:"SHA256":char*:"zip:third_party/mbedtls/test/data/hash_file_3":hex:"9ae4b369f9f4f03b86505b46a5469542e00aaff7cf7417a71af6d6d0aba3b70c" + +generic SHA-256 Hash file #4 +depends_on:5 +9:char*:"SHA256":char*:"zip:third_party/mbedtls/test/data/hash_file_4":hex:"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + +generic SHA-384 Hash file #1 +depends_on:6:7 +9:char*:"SHA384":char*:"zip:third_party/mbedtls/test/data/hash_file_1":hex:"e0a3e6259d6378001b54ef82f5dd087009c5fad86d8db226a9fe1d14ecbe33a6fc916e3a4b16f5f286424de15d5a8e0e" + +generic SHA-384 Hash file #2 +depends_on:6:7 +9:char*:"SHA384":char*:"zip:third_party/mbedtls/test/data/hash_file_2":hex:"eff727afc8495c92e2f370f97a317f93c3350324b0646b0f0e264708b3c97d3d332d3c5390e1e47130f5c92f1ef4b9cf" + +generic SHA-384 Hash file #3 +depends_on:6:7 +9:char*:"SHA384":char*:"zip:third_party/mbedtls/test/data/hash_file_3":hex:"6fc10ebda96a1ccf61777cac72f6034f92533d42052a4bf9f9d929c672973c71e5aeb1213268043c21527ac0f7f349c4" + +generic SHA-384 Hash file #4 +depends_on:6:7 +9:char*:"SHA384":char*:"zip:third_party/mbedtls/test/data/hash_file_4":hex:"38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b" + +generic SHA-512 Hash file #1 +depends_on:6 +9:char*:"SHA512":char*:"zip:third_party/mbedtls/test/data/hash_file_1":hex:"d8207a2e1ff2b424f2c4163fe1b723c9bd42e464061eb411e8df730bcd24a7ab3956a6f3ff044a52eb2d262f9e4ca6b524092b544ab78f14d6f9c4cc8ddf335a" + +generic SHA-512 Hash file #2 +depends_on:6 +9:char*:"SHA512":char*:"zip:third_party/mbedtls/test/data/hash_file_2":hex:"ecbb7f0ed8a702b49f16ad3088bcc06ea93451912a7187db15f64d93517b09630b039293aed418d4a00695777b758b1f381548c2fd7b92ce5ed996b32c8734e7" + +generic SHA-512 Hash file #3 +depends_on:6 +9:char*:"SHA512":char*:"zip:third_party/mbedtls/test/data/hash_file_3":hex:"7ccc9b2da71ffde9966c3ce44d7f20945fccf33b1fade4da152b021f1afcc7293382944aa6c09eac67af25f22026758e2bf6bed86ae2a43592677ee50f8eea41" + +generic SHA-512 Hash file #4 +depends_on:6 +9:char*:"SHA512":char*:"zip:third_party/mbedtls/test/data/hash_file_4":hex:"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" + diff --git a/third_party/mbedtls/test/test_suite_mdx.c b/third_party/mbedtls/test/test_suite_mdx.c new file mode 100644 index 000000000..0bf07ee04 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_mdx.c @@ -0,0 +1,481 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_mdx.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_mdx.function + * Test suite data : suites/test_suite_mdx.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#include "third_party/mbedtls/md5.h" +#if defined(MBEDTLS_MD2_C) +void test_md2_text( char * text_src_string, data_t * hash ) +{ + int ret; + unsigned char src_str[100]; + unsigned char output[16]; + + memset( src_str, 0x00, sizeof src_str ); + memset( output, 0x00, sizeof output ); + + strncpy( (char *) src_str, text_src_string, sizeof(src_str) - 1 ); + + ret = mbedtls_md2_ret( src_str, strlen( (char *) src_str ), output ); + TEST_ASSERT( ret == 0 ) ; + + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, + sizeof output, hash->len ) == 0 ); +exit: + ; +} + +void test_md2_text_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_md2_text( (char *) params[0], &data1 ); +} +#endif /* MBEDTLS_MD2_C */ +#if defined(MBEDTLS_MD4_C) +void test_md4_text( char * text_src_string, data_t * hash ) +{ + int ret; + unsigned char src_str[100]; + unsigned char output[16]; + + memset( src_str, 0x00, sizeof src_str ); + memset( output, 0x00, sizeof output ); + + strncpy( (char *) src_str, text_src_string, sizeof(src_str) - 1 ); + + ret = mbedtls_md4_ret( src_str, strlen( (char *) src_str ), output ); + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, + sizeof output, hash->len ) == 0 ); +exit: + ; +} + +void test_md4_text_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_md4_text( (char *) params[0], &data1 ); +} +#endif /* MBEDTLS_MD4_C */ +#if defined(MBEDTLS_MD5_C) +void test_md5_text( char * text_src_string, data_t * hash ) +{ + int ret; + unsigned char src_str[100]; + unsigned char output[16]; + + memset( src_str, 0x00, sizeof src_str ); + memset( output, 0x00, sizeof output ); + + strncpy( (char *) src_str, text_src_string, sizeof(src_str) - 1 ); + + ret = mbedtls_md5_ret( src_str, strlen( (char *) src_str ), output ); + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, + sizeof output, hash->len ) == 0 ); +exit: + ; +} + +void test_md5_text_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_md5_text( (char *) params[0], &data1 ); +} +#endif /* MBEDTLS_MD5_C */ +#if defined(MBEDTLS_RIPEMD160_C) +void test_ripemd160_text( char * text_src_string, data_t * hash ) +{ + int ret; + unsigned char src_str[100]; + unsigned char output[20]; + + memset(src_str, 0x00, sizeof src_str); + memset(output, 0x00, sizeof output); + + strncpy( (char *) src_str, text_src_string, sizeof(src_str) - 1 ); + + ret = mbedtls_ripemd160_ret( src_str, strlen( (char *) src_str ), output ); + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, + sizeof output, hash->len ) == 0 ); +exit: + ; +} + +void test_ripemd160_text_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_ripemd160_text( (char *) params[0], &data1 ); +} +#endif /* MBEDTLS_RIPEMD160_C */ +#if defined(MBEDTLS_MD2_C) +#if defined(MBEDTLS_SELF_TEST) +void test_md2_selftest( ) +{ + TEST_ASSERT( mbedtls_md2_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_md2_selftest_wrapper( void ** params ) +{ + (void)params; + + test_md2_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_MD2_C */ +#if defined(MBEDTLS_MD4_C) +#if defined(MBEDTLS_SELF_TEST) +void test_md4_selftest( ) +{ + TEST_ASSERT( mbedtls_md4_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_md4_selftest_wrapper( void ** params ) +{ + (void)params; + + test_md4_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_MD4_C */ +#if defined(MBEDTLS_MD5_C) +#if defined(MBEDTLS_SELF_TEST) +void test_md5_selftest( ) +{ + TEST_ASSERT( mbedtls_md5_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_md5_selftest_wrapper( void ** params ) +{ + (void)params; + + test_md5_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_MD5_C */ +#if defined(MBEDTLS_RIPEMD160_C) +#if defined(MBEDTLS_SELF_TEST) +void test_ripemd160_selftest( ) +{ + TEST_ASSERT( mbedtls_ripemd160_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_ripemd160_selftest_wrapper( void ** params ) +{ + (void)params; + + test_ripemd160_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_RIPEMD160_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_MD2_C) + test_md2_text_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_MD4_C) + test_md4_text_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_MD5_C) + test_md5_text_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_RIPEMD160_C) + test_ripemd160_text_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_MD2_C) && defined(MBEDTLS_SELF_TEST) + test_md2_selftest_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_MD4_C) && defined(MBEDTLS_SELF_TEST) + test_md4_selftest_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_MD5_C) && defined(MBEDTLS_SELF_TEST) + test_md5_selftest_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_RIPEMD160_C) && defined(MBEDTLS_SELF_TEST) + test_ripemd160_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_mdx.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_mdx.datax b/third_party/mbedtls/test/test_suite_mdx.datax new file mode 100644 index 000000000..593289889 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_mdx.datax @@ -0,0 +1,99 @@ +mbedtls_md2 Test vector RFC1319 #1 +0:char*:"":hex:"8350e5a3e24c153df2275c9f80692773" + +mbedtls_md2 Test vector RFC1319 #2 +0:char*:"a":hex:"32ec01ec4a6dac72c0ab96fb34c0b5d1" + +mbedtls_md2 Test vector RFC1319 #3 +0:char*:"abc":hex:"da853b0d3f88d99b30283a69e6ded6bb" + +mbedtls_md2 Test vector RFC1319 #4 +0:char*:"message digest":hex:"ab4f496bfb2a530b219ff33031fe06b0" + +mbedtls_md2 Test vector RFC1319 #5 +0:char*:"abcdefghijklmnopqrstuvwxyz":hex:"4e8ddff3650292ab5a4108c3aa47940b" + +mbedtls_md2 Test vector RFC1319 #6 +0:char*:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789":hex:"da33def2a42df13975352846c30338cd" + +mbedtls_md2 Test vector RFC1319 #7 +0:char*:"12345678901234567890123456789012345678901234567890123456789012345678901234567890":hex:"d5976f79d83d3a0dc9806c3c66f3efd8" + +mbedtls_md4 Test vector RFC1320 #1 +1:char*:"":hex:"31d6cfe0d16ae931b73c59d7e0c089c0" + +mbedtls_md4 Test vector RFC1320 #2 +1:char*:"a":hex:"bde52cb31de33e46245e05fbdbd6fb24" + +mbedtls_md4 Test vector RFC1320 #3 +1:char*:"abc":hex:"a448017aaf21d8525fc10ae87aa6729d" + +mbedtls_md4 Test vector RFC1320 #4 +1:char*:"message digest":hex:"d9130a8164549fe818874806e1c7014b" + +mbedtls_md4 Test vector RFC1320 #5 +1:char*:"abcdefghijklmnopqrstuvwxyz":hex:"d79e1c308aa5bbcdeea8ed63df412da9" + +mbedtls_md4 Test vector RFC1320 #6 +1:char*:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789":hex:"043f8582f241db351ce627e153e7f0e4" + +mbedtls_md4 Test vector RFC1320 #7 +1:char*:"12345678901234567890123456789012345678901234567890123456789012345678901234567890":hex:"e33b4ddc9c38f2199c3e7b164fcc0536" + +mbedtls_md5 Test vector RFC1321 #1 +2:char*:"":hex:"d41d8cd98f00b204e9800998ecf8427e" + +mbedtls_md5 Test vector RFC1321 #2 +2:char*:"a":hex:"0cc175b9c0f1b6a831c399e269772661" + +mbedtls_md5 Test vector RFC1321 #3 +2:char*:"abc":hex:"900150983cd24fb0d6963f7d28e17f72" + +mbedtls_md5 Test vector RFC1321 #4 +2:char*:"message digest":hex:"f96b697d7cb7938d525a2f31aaf161d0" + +mbedtls_md5 Test vector RFC1321 #5 +2:char*:"abcdefghijklmnopqrstuvwxyz":hex:"c3fcd3d76192e4007dfb496cca67e13b" + +mbedtls_md5 Test vector RFC1321 #6 +2:char*:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789":hex:"d174ab98d277d9f5a5611c2c9f419d9f" + +mbedtls_md5 Test vector RFC1321 #7 +2:char*:"12345678901234567890123456789012345678901234567890123456789012345678901234567890":hex:"57edf4a22be3c955ac49da2e2107b67a" + +mbedtls_ripemd160 Test vector from paper #1 +3:char*:"":hex:"9c1185a5c5e9fc54612808977ee8f548b2258d31" + +mbedtls_ripemd160 Test vector from paper #2 +3:char*:"a":hex:"0bdc9d2d256b3ee9daae347be6f4dc835a467ffe" + +mbedtls_ripemd160 Test vector from paper #3 +3:char*:"abc":hex:"8eb208f7e05d987a9b044a8e98c6b087f15a0bfc" + +mbedtls_ripemd160 Test vector from paper #4 +3:char*:"message digest":hex:"5d0689ef49d2fae572b881b123a85ffa21595f36" + +mbedtls_ripemd160 Test vector from paper #5 +3:char*:"abcdefghijklmnopqrstuvwxyz":hex:"f71c27109c692c1b56bbdceb5b9d2865b3708dbc" + +mbedtls_ripemd160 Test vector from paper #6 +3:char*:"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq":hex:"12a053384a9c0c88e405a06c27dcf49ada62eb2b" + +mbedtls_ripemd160 Test vector from paper #7 +3:char*:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789":hex:"b0e20b6e3116640286ed3a87a5713079b21f5189" + +mbedtls_ripemd160 Test vector from paper #8 +3:char*:"12345678901234567890123456789012345678901234567890123456789012345678901234567890":hex:"9b752e45573d4b39f4dbd3323cab82bf63326bfb" + +MD2 Selftest +4 + +MD4 Selftest +5 + +MD5 Selftest +6 + +RIPEMD160 Selftest +7 + diff --git a/third_party/mbedtls/test/test_suite_memory_buffer_alloc.c b/third_party/mbedtls/test/test_suite_memory_buffer_alloc.c new file mode 100644 index 000000000..10bd02e42 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_memory_buffer_alloc.c @@ -0,0 +1,583 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_memory_buffer_alloc.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_memory_buffer_alloc.function + * Test suite data : suites/test_suite_memory_buffer_alloc.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) +#include "third_party/mbedtls/memory_buffer_alloc.h" +#define TEST_SUITE_MEMORY_BUFFER_ALLOC + +static int check_pointer( void *p ) +{ + if( p == NULL ) + return( -1 ); + + if( (size_t) p % MBEDTLS_MEMORY_ALIGN_MULTIPLE != 0 ) + return( -1 ); + + return( 0 ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_mbedtls_memory_buffer_alloc_self_test( ) +{ + TEST_ASSERT( mbedtls_memory_buffer_alloc_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_mbedtls_memory_buffer_alloc_self_test_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_memory_buffer_alloc_self_test( ); +} +#endif /* MBEDTLS_SELF_TEST */ +void test_memory_buffer_alloc_free_alloc( int a_bytes, int b_bytes, int c_bytes, + int d_bytes, int free_a, int free_b, + int free_c, int free_d, int e_bytes, + int f_bytes ) +{ + unsigned char buf[1024]; + unsigned char *ptr_a = NULL, *ptr_b = NULL, *ptr_c = NULL, *ptr_d = NULL, + *ptr_e = NULL, *ptr_f = NULL; + +#if defined(MBEDTLS_MEMORY_DEBUG) + size_t reported_blocks; + size_t reported_bytes; +#endif + size_t allocated_bytes = 0; + + mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) ); + + mbedtls_memory_buffer_set_verify( MBEDTLS_MEMORY_VERIFY_ALWAYS ); + + if( a_bytes > 0 ) + { + ptr_a = mbedtls_calloc( a_bytes, sizeof(char) ); + TEST_ASSERT( check_pointer( ptr_a ) == 0 ); + + allocated_bytes += a_bytes * sizeof(char); + } + + if( b_bytes > 0 ) + { + ptr_b = mbedtls_calloc( b_bytes, sizeof(char) ); + TEST_ASSERT( check_pointer( ptr_b ) == 0 ); + + allocated_bytes += b_bytes * sizeof(char); + } + + if( c_bytes > 0 ) + { + ptr_c = mbedtls_calloc( c_bytes, sizeof(char) ); + TEST_ASSERT( check_pointer( ptr_c ) == 0 ); + + allocated_bytes += c_bytes * sizeof(char); + } + + if( d_bytes > 0 ) + { + ptr_d = mbedtls_calloc( d_bytes, sizeof(char) ); + TEST_ASSERT( check_pointer( ptr_d ) == 0 ); + + allocated_bytes += d_bytes * sizeof(char); + } + +#if defined(MBEDTLS_MEMORY_DEBUG) + mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks ); + TEST_ASSERT( reported_bytes == allocated_bytes ); +#endif + + if( free_a ) + { + mbedtls_free( ptr_a ); + ptr_a = NULL; + TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); + + allocated_bytes -= a_bytes * sizeof(char); + } + + if( free_b ) + { + mbedtls_free( ptr_b ); + ptr_b = NULL; + TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); + + allocated_bytes -= b_bytes * sizeof(char); + } + + if( free_c ) + { + mbedtls_free( ptr_c ); + ptr_c = NULL; + TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); + + allocated_bytes -= c_bytes * sizeof(char); + } + + if( free_d ) + { + mbedtls_free( ptr_d ); + ptr_d = NULL; + TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); + + allocated_bytes -= d_bytes * sizeof(char); + } + +#if defined(MBEDTLS_MEMORY_DEBUG) + mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks ); + TEST_ASSERT( reported_bytes == allocated_bytes ); +#endif + + if( e_bytes > 0 ) + { + ptr_e = mbedtls_calloc( e_bytes, sizeof(char) ); + TEST_ASSERT( check_pointer( ptr_e ) == 0 ); + } + + if( f_bytes > 0 ) + { + ptr_f = mbedtls_calloc( f_bytes, sizeof(char) ); + TEST_ASSERT( check_pointer( ptr_f ) == 0 ); + } + + /* Once blocks are reallocated, the block allocated to the memory request + * may be bigger than the request itself, which is indicated by the reported + * bytes, and makes it hard to know what the reported size will be, so + * we don't check the size after blocks have been reallocated. */ + + if( ptr_a != NULL ) + { + mbedtls_free( ptr_a ); + ptr_a = NULL; + TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); + } + + if( ptr_b != NULL ) + { + mbedtls_free( ptr_b ); + ptr_b = NULL; + TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); + } + + if( ptr_c != NULL ) + { + mbedtls_free( ptr_c ); + ptr_c = NULL; + TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); + } + + if( ptr_d != NULL ) + { + mbedtls_free( ptr_d ); + ptr_d = NULL; + TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); + } + + if( ptr_e != NULL ) + { + mbedtls_free( ptr_e ); + ptr_e = NULL; + TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); + } + + if( ptr_f != NULL ) + { + mbedtls_free( ptr_f ); + ptr_f = NULL; + } + +#if defined(MBEDTLS_MEMORY_DEBUG) + mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks ); + TEST_ASSERT( reported_bytes == 0 ); +#endif + + TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); + +exit: + mbedtls_memory_buffer_alloc_free( ); +} + +void test_memory_buffer_alloc_free_alloc_wrapper( void ** params ) +{ + + test_memory_buffer_alloc_free_alloc( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ), *( (int *) params[9] ) ); +} +void test_memory_buffer_alloc_oom_test( ) +{ + unsigned char buf[1024]; + unsigned char *ptr_a = NULL, *ptr_b = NULL, *ptr_c = NULL; +#if defined(MBEDTLS_MEMORY_DEBUG) + size_t reported_blocks, reported_bytes; +#endif + + (void)ptr_c; + + mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) ); + + mbedtls_memory_buffer_set_verify( MBEDTLS_MEMORY_VERIFY_ALWAYS ); + + ptr_a = mbedtls_calloc( 432, sizeof(char) ); + TEST_ASSERT( check_pointer( ptr_a ) == 0 ); + + ptr_b = mbedtls_calloc( 432, sizeof(char) ); + TEST_ASSERT( check_pointer( ptr_b ) == 0 ); + + ptr_c = mbedtls_calloc( 431, sizeof(char) ); + TEST_ASSERT( ptr_c == NULL ); + +#if defined(MBEDTLS_MEMORY_DEBUG) + mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks ); + TEST_ASSERT( reported_bytes >= 864 && reported_bytes <= sizeof(buf) ); +#endif + + mbedtls_free( ptr_a ); + ptr_a = NULL; + TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); + + mbedtls_free( ptr_b ); + ptr_b = NULL; + TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); + +#if defined(MBEDTLS_MEMORY_DEBUG) + mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks ); + TEST_ASSERT( reported_bytes == 0 ); +#endif + + TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); + +exit: + mbedtls_memory_buffer_alloc_free( ); +} + +void test_memory_buffer_alloc_oom_test_wrapper( void ** params ) +{ + (void)params; + + test_memory_buffer_alloc_oom_test( ); +} +void test_memory_buffer_heap_too_small( ) +{ + unsigned char buf[1]; + + mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) ); + /* With MBEDTLS_MEMORY_DEBUG enabled, this prints a message + * "FATAL: verification of first header failed". + */ + TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() != 0 ); +exit: + ; +} + +void test_memory_buffer_heap_too_small_wrapper( void ** params ) +{ + (void)params; + + test_memory_buffer_heap_too_small( ); +} +void test_memory_buffer_underalloc( ) +{ + unsigned char buf[100]; + size_t i; + + mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) ); + for( i = 1; i < MBEDTLS_MEMORY_ALIGN_MULTIPLE; i++ ) + { + TEST_ASSERT( mbedtls_calloc( 1, + (size_t)-( MBEDTLS_MEMORY_ALIGN_MULTIPLE - i ) ) == NULL ); + TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); + } + +exit: + mbedtls_memory_buffer_alloc_free(); +} + +void test_memory_buffer_underalloc_wrapper( void ** params ) +{ + (void)params; + + test_memory_buffer_underalloc( ); +} +#endif /* MBEDTLS_MEMORY_BUFFER_ALLOC_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) + +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) && defined(MBEDTLS_SELF_TEST) + test_mbedtls_memory_buffer_alloc_self_test_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) + test_memory_buffer_alloc_free_alloc_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) + test_memory_buffer_alloc_oom_test_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) + test_memory_buffer_heap_too_small_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) + test_memory_buffer_underalloc_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_memory_buffer_alloc.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_memory_buffer_alloc.datax b/third_party/mbedtls/test/test_suite_memory_buffer_alloc.datax new file mode 100644 index 000000000..25932196a --- /dev/null +++ b/third_party/mbedtls/test/test_suite_memory_buffer_alloc.datax @@ -0,0 +1,24 @@ +Memory buffer alloc self test +0 + +Memory buffer alloc - free in middle, alloc at end +1:int:100:int:100:int:100:int:0:int:0:int:1:int:0:int:0:int:200:int:0 + +Memory buffer alloc - free in middle, realloc +1:int:100:int:100:int:100:int:0:int:0:int:1:int:0:int:0:int:100:int:0 + +Memory buffer alloc - free in middle, merge, realloc +1:int:100:int:100:int:100:int:100:int:0:int:1:int:1:int:0:int:201:int:0 + +Memory buffer alloc - free at end, merge, realloc +1:int:100:int:64:int:100:int:100:int:0:int:0:int:0:int:1:int:200:int:0 + +Memory buffer alloc - Out of Memory test +2 + +Memory buffer: heap too small (header verification should fail) +3 + +Memory buffer: attempt to allocate SIZE_MAX +4 + diff --git a/third_party/mbedtls/test/test_suite_mpi.c b/third_party/mbedtls/test/test_suite_mpi.c new file mode 100644 index 000000000..66dbe9ca5 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_mpi.c @@ -0,0 +1,2343 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_mpi.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_mpi.function + * Test suite data : suites/test_suite_mpi.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_BIGNUM_C) +#include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/entropy.h" + +#if MBEDTLS_MPI_MAX_BITS > 792 +#define MPI_MAX_BITS_LARGER_THAN_792 +#endif + +typedef struct mbedtls_test_mpi_random +{ + data_t *data; + size_t pos; + size_t chunk_len; +} mbedtls_test_mpi_random; + +/* + * This function is called by the Miller-Rabin primality test each time it + * chooses a random witness. The witnesses (or non-witnesses as provided by the + * test) are stored in the data member of the state structure. Each number is in + * the format that mbedtls_mpi_read_string understands and is chunk_len long. + */ +int mbedtls_test_mpi_miller_rabin_determinizer( void* state, + unsigned char* buf, + size_t len ) +{ + mbedtls_test_mpi_random *random = (mbedtls_test_mpi_random*) state; + + if( random == NULL || random->data->x == NULL || buf == NULL ) + return( -1 ); + + if( random->pos + random->chunk_len > random->data->len + || random->chunk_len > len ) + { + return( -1 ); + } + + memset( buf, 0, len ); + + /* The witness is written to the end of the buffer, since the buffer is + * used as big endian, unsigned binary data in mbedtls_mpi_read_binary. + * Writing the witness to the start of the buffer would result in the + * buffer being 'witness 000...000', which would be treated as + * witness * 2^n for some n. */ + memcpy( buf + len - random->chunk_len, &random->data->x[random->pos], + random->chunk_len ); + + random->pos += random->chunk_len; + + return( 0 ); +} + +/* Random generator that is told how many bytes to return. */ +static int f_rng_bytes_left( void *state, unsigned char *buf, size_t len ) +{ + size_t *bytes_left = state; + size_t i; + for( i = 0; i < len; i++ ) + { + if( *bytes_left == 0 ) + return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + buf[i] = *bytes_left & 0xff; + --( *bytes_left ); + } + return( 0 ); +} + +void test_mpi_valid_param( ) +{ + TEST_VALID_PARAM( mbedtls_mpi_free( NULL ) ); +exit: + ; +} + +void test_mpi_valid_param_wrapper( void ** params ) +{ + (void)params; + + test_mpi_valid_param( ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_mpi_invalid_param( ) +{ + mbedtls_mpi X; + const char *s_in = "00101000101010"; + char s_out[16] = { 0 }; + unsigned char u_out[16] = { 0 }; + unsigned char u_in[16] = { 0 }; + size_t olen; + mbedtls_mpi_uint mpi_uint; + + TEST_INVALID_PARAM( mbedtls_mpi_init( NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_grow( NULL, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_copy( NULL, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_copy( &X, NULL ) ); + + TEST_INVALID_PARAM( mbedtls_mpi_swap( NULL, &X ) ); + TEST_INVALID_PARAM( mbedtls_mpi_swap( &X, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_safe_cond_assign( NULL, &X, 0 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_safe_cond_assign( &X, NULL, 0 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_safe_cond_swap( NULL, &X, 0 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_safe_cond_swap( &X, NULL, 0 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_lset( NULL, 42 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_get_bit( NULL, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_set_bit( NULL, 42, 0 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_read_string( NULL, 2, s_in ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_read_string( &X, 2, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_write_string( NULL, 2, + s_out, sizeof( s_out ), + &olen ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_write_string( &X, 2, + NULL, sizeof( s_out ), + &olen ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_write_string( &X, 2, + s_out, sizeof( s_out ), + NULL ) ); + +#if defined(MBEDTLS_FS_IO) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_read_file( NULL, 2, stdin ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_read_file( &X, 2, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_write_file( "", NULL, 2, NULL ) ); +#endif /* MBEDTLS_FS_IO */ + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_read_binary( NULL, u_in, + sizeof( u_in ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_read_binary( &X, NULL, + sizeof( u_in ) ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_write_binary( NULL, u_out, + sizeof( u_out ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_write_binary( &X, NULL, + sizeof( u_out ) ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_shift_l( NULL, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_shift_r( NULL, 42 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_cmp_abs( NULL, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_cmp_abs( &X, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_cmp_mpi( NULL, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_cmp_mpi( &X, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_cmp_int( NULL, 42 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_add_abs( NULL, &X, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_add_abs( &X, NULL, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_add_abs( &X, &X, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_sub_abs( NULL, &X, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_sub_abs( &X, NULL, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_sub_abs( &X, &X, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_add_mpi( NULL, &X, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_add_mpi( &X, NULL, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_add_mpi( &X, &X, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_sub_mpi( NULL, &X, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_sub_mpi( &X, NULL, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_sub_mpi( &X, &X, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_add_int( NULL, &X, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_add_int( &X, NULL, 42 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_sub_int( NULL, &X, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_sub_int( &X, NULL, 42 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_mul_mpi( NULL, &X, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_mul_mpi( &X, NULL, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_mul_mpi( &X, &X, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_mul_int( NULL, &X, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_mul_int( &X, NULL, 42 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_div_mpi( &X, &X, NULL, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_div_mpi( &X, &X, &X, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_div_int( &X, &X, NULL, 42 ) ); + + TEST_INVALID_PARAM_RET( 0, mbedtls_mpi_lsb( NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_mod_mpi( NULL, &X, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_mod_mpi( &X, NULL, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_mod_mpi( &X, &X, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_mod_int( NULL, &X, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_mod_int( &mpi_uint, NULL, 42 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_exp_mod( NULL, &X, &X, &X, NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_exp_mod( &X, NULL, &X, &X, NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_exp_mod( &X, &X, NULL, &X, NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_exp_mod( &X, &X, &X, NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_fill_random( NULL, 42, + mbedtls_test_rnd_std_rand, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_fill_random( &X, 42, NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_gcd( NULL, &X, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_gcd( &X, NULL, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_gcd( &X, &X, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_inv_mod( NULL, &X, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_inv_mod( &X, NULL, &X ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA, + mbedtls_mpi_inv_mod( &X, &X, NULL ) ); + +exit: + return; +} + +void test_mpi_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_mpi_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_mpi_null( ) +{ + mbedtls_mpi X, Y, Z; + + mbedtls_mpi_init( &X ); + mbedtls_mpi_init( &Y ); + mbedtls_mpi_init( &Z ); + + TEST_ASSERT( mbedtls_mpi_get_bit( &X, 42 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_lsb( &X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_bitlen( &X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_size( &X ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mpi_null_wrapper( void ** params ) +{ + (void)params; + + test_mpi_null( ); +} +void test_mpi_read_write_string( int radix_X, char * input_X, int radix_A, + char * input_A, int output_size, int result_read, + int result_write ) +{ + mbedtls_mpi X; + char str[1000]; + size_t len; + + mbedtls_mpi_init( &X ); + + memset( str, '!', sizeof( str ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == result_read ); + if( result_read == 0 ) + { + TEST_ASSERT( mbedtls_mpi_write_string( &X, radix_A, str, output_size, &len ) == result_write ); + if( result_write == 0 ) + { + TEST_ASSERT( strcasecmp( str, input_A ) == 0 ); + TEST_ASSERT( str[len] == '!' ); + } + } + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mpi_read_write_string_wrapper( void ** params ) +{ + + test_mpi_read_write_string( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ) ); +} +void test_mbedtls_mpi_read_binary( data_t * buf, int radix_A, char * input_A ) +{ + mbedtls_mpi X; + char str[1000]; + size_t len; + + mbedtls_mpi_init( &X ); + + + TEST_ASSERT( mbedtls_mpi_read_binary( &X, buf->x, buf->len ) == 0 ); + TEST_ASSERT( mbedtls_mpi_write_string( &X, radix_A, str, sizeof( str ), &len ) == 0 ); + TEST_ASSERT( strcmp( (char *) str, input_A ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mbedtls_mpi_read_binary_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_mbedtls_mpi_read_binary( &data0, *( (int *) params[2] ), (char *) params[3] ); +} +void test_mbedtls_mpi_read_binary_le( data_t * buf, int radix_A, char * input_A ) +{ + mbedtls_mpi X; + char str[1000]; + size_t len; + + mbedtls_mpi_init( &X ); + + + TEST_ASSERT( mbedtls_mpi_read_binary_le( &X, buf->x, buf->len ) == 0 ); + TEST_ASSERT( mbedtls_mpi_write_string( &X, radix_A, str, sizeof( str ), &len ) == 0 ); + TEST_ASSERT( strcmp( (char *) str, input_A ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mbedtls_mpi_read_binary_le_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_mbedtls_mpi_read_binary_le( &data0, *( (int *) params[2] ), (char *) params[3] ); +} +void test_mbedtls_mpi_write_binary( int radix_X, char * input_X, + data_t * input_A, int output_size, + int result ) +{ + mbedtls_mpi X; + unsigned char buf[1000]; + size_t buflen; + + memset( buf, 0x00, 1000 ); + + mbedtls_mpi_init( &X ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + + buflen = mbedtls_mpi_size( &X ); + if( buflen > (size_t) output_size ) + buflen = (size_t) output_size; + + TEST_ASSERT( mbedtls_mpi_write_binary( &X, buf, buflen ) == result ); + if( result == 0) + { + + TEST_ASSERT( mbedtls_test_hexcmp( buf, input_A->x, + buflen, input_A->len ) == 0 ); + } + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mbedtls_mpi_write_binary_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_mbedtls_mpi_write_binary( *( (int *) params[0] ), (char *) params[1], &data2, *( (int *) params[4] ), *( (int *) params[5] ) ); +} +void test_mbedtls_mpi_write_binary_le( int radix_X, char * input_X, + data_t * input_A, int output_size, + int result ) +{ + mbedtls_mpi X; + unsigned char buf[1000]; + size_t buflen; + + memset( buf, 0x00, 1000 ); + + mbedtls_mpi_init( &X ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + + buflen = mbedtls_mpi_size( &X ); + if( buflen > (size_t) output_size ) + buflen = (size_t) output_size; + + TEST_ASSERT( mbedtls_mpi_write_binary_le( &X, buf, buflen ) == result ); + if( result == 0) + { + + TEST_ASSERT( mbedtls_test_hexcmp( buf, input_A->x, + buflen, input_A->len ) == 0 ); + } + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mbedtls_mpi_write_binary_le_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_mbedtls_mpi_write_binary_le( *( (int *) params[0] ), (char *) params[1], &data2, *( (int *) params[4] ), *( (int *) params[5] ) ); +} +#if defined(MBEDTLS_FS_IO) +void test_mbedtls_mpi_read_file( int radix_X, char * input_file, + data_t * input_A, int result ) +{ + mbedtls_mpi X; + unsigned char buf[1000]; + size_t buflen; + FILE *file; + int ret; + + memset( buf, 0x00, 1000 ); + + mbedtls_mpi_init( &X ); + + file = fopen( input_file, "r" ); + TEST_ASSERT( file != NULL ); + ret = mbedtls_mpi_read_file( &X, radix_X, file ); + fclose(file); + TEST_ASSERT( ret == result ); + + if( result == 0 ) + { + buflen = mbedtls_mpi_size( &X ); + TEST_ASSERT( mbedtls_mpi_write_binary( &X, buf, buflen ) == 0 ); + + + TEST_ASSERT( mbedtls_test_hexcmp( buf, input_A->x, + buflen, input_A->len ) == 0 ); + } + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mbedtls_mpi_read_file_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_mbedtls_mpi_read_file( *( (int *) params[0] ), (char *) params[1], &data2, *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_FS_IO) +void test_mbedtls_mpi_write_file( int radix_X, char * input_X, int output_radix, + char * output_file ) +{ + mbedtls_mpi X, Y; + FILE *file_out, *file_in; + int ret; + + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + + file_out = fopen( output_file, "w" ); + TEST_ASSERT( file_out != NULL ); + ret = mbedtls_mpi_write_file( NULL, &X, output_radix, file_out ); + fclose(file_out); + TEST_ASSERT( ret == 0 ); + + file_in = fopen( output_file, "r" ); + TEST_ASSERT( file_in != NULL ); + ret = mbedtls_mpi_read_file( &Y, output_radix, file_in ); + fclose(file_in); + TEST_ASSERT( ret == 0 ); + + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &Y ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); +} + +void test_mbedtls_mpi_write_file_wrapper( void ** params ) +{ + + test_mbedtls_mpi_write_file( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3] ); +} +#endif /* MBEDTLS_FS_IO */ +void test_mbedtls_mpi_get_bit( int radix_X, char * input_X, int pos, int val ) +{ + mbedtls_mpi X; + mbedtls_mpi_init( &X ); + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_get_bit( &X, pos ) == val ); + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mbedtls_mpi_get_bit_wrapper( void ** params ) +{ + + test_mbedtls_mpi_get_bit( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ) ); +} +void test_mbedtls_mpi_set_bit( int radix_X, char * input_X, int pos, int val, + int radix_Y, char * output_Y, int result ) +{ + mbedtls_mpi X, Y; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Y, radix_Y, output_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_set_bit( &X, pos, val ) == result ); + + if( result == 0 ) + { + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &Y ) == 0 ); + } + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); +} + +void test_mbedtls_mpi_set_bit_wrapper( void ** params ) +{ + + test_mbedtls_mpi_set_bit( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ) ); +} +void test_mbedtls_mpi_lsb( int radix_X, char * input_X, int nr_bits ) +{ + mbedtls_mpi X; + mbedtls_mpi_init( &X ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_lsb( &X ) == (size_t) nr_bits ); + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mbedtls_mpi_lsb_wrapper( void ** params ) +{ + + test_mbedtls_mpi_lsb( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ) ); +} +void test_mbedtls_mpi_bitlen( int radix_X, char * input_X, int nr_bits ) +{ + mbedtls_mpi X; + mbedtls_mpi_init( &X ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_bitlen( &X ) == (size_t) nr_bits ); + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mbedtls_mpi_bitlen_wrapper( void ** params ) +{ + + test_mbedtls_mpi_bitlen( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ) ); +} +void test_mbedtls_mpi_gcd( int radix_X, char * input_X, int radix_Y, + char * input_Y, int radix_A, char * input_A ) +{ + mbedtls_mpi A, X, Y, Z; + mbedtls_mpi_init( &A ); mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &Z ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Y, radix_Y, input_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_gcd( &Z, &X, &Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Z, &A ) == 0 ); + +exit: + mbedtls_mpi_free( &A ); mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &Z ); +} + +void test_mbedtls_mpi_gcd_wrapper( void ** params ) +{ + + test_mbedtls_mpi_gcd( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), (char *) params[5] ); +} +void test_mbedtls_mpi_cmp_int( int input_X, int input_A, int result_CMP ) +{ + mbedtls_mpi X; + mbedtls_mpi_init( &X ); + + TEST_ASSERT( mbedtls_mpi_lset( &X, input_X ) == 0); + TEST_ASSERT( mbedtls_mpi_cmp_int( &X, input_A ) == result_CMP); + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mbedtls_mpi_cmp_int_wrapper( void ** params ) +{ + + test_mbedtls_mpi_cmp_int( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +void test_mbedtls_mpi_cmp_mpi( int radix_X, char * input_X, int radix_Y, + char * input_Y, int input_A ) +{ + mbedtls_mpi X, Y; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Y, radix_Y, input_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &Y ) == input_A ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); +} + +void test_mbedtls_mpi_cmp_mpi_wrapper( void ** params ) +{ + + test_mbedtls_mpi_cmp_mpi( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ) ); +} +void test_mbedtls_mpi_lt_mpi_ct( int size_X, char * input_X, + int size_Y, char * input_Y, + int input_ret, int input_err ) +{ + unsigned ret = -1; + unsigned input_uret = input_ret; + mbedtls_mpi X, Y; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, 16, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Y, 16, input_Y ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_grow( &X, size_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_grow( &Y, size_Y ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_lt_mpi_ct( &X, &Y, &ret ) == input_err ); + if( input_err == 0 ) + TEST_ASSERT( ret == input_uret ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); +} + +void test_mbedtls_mpi_lt_mpi_ct_wrapper( void ** params ) +{ + + test_mbedtls_mpi_lt_mpi_ct( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), *( (int *) params[5] ) ); +} +void test_mbedtls_mpi_cmp_abs( int radix_X, char * input_X, int radix_Y, + char * input_Y, int input_A ) +{ + mbedtls_mpi X, Y; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Y, radix_Y, input_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_abs( &X, &Y ) == input_A ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); +} + +void test_mbedtls_mpi_cmp_abs_wrapper( void ** params ) +{ + + test_mbedtls_mpi_cmp_abs( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ) ); +} +void test_mbedtls_mpi_copy_sint( int input_X, int input_Y ) +{ + mbedtls_mpi X, Y; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); + + TEST_ASSERT( mbedtls_mpi_lset( &X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_lset( &Y, input_Y ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_copy( &Y, &X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_int( &X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_int( &Y, input_X ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); +} + +void test_mbedtls_mpi_copy_sint_wrapper( void ** params ) +{ + + test_mbedtls_mpi_copy_sint( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +void test_mbedtls_mpi_copy_binary( data_t *input_X, data_t *input_Y ) +{ + mbedtls_mpi X, Y, X0; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &X0 ); + + TEST_ASSERT( mbedtls_mpi_read_binary( &X, input_X->x, input_X->len ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_binary( &Y, input_Y->x, input_Y->len ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_binary( &X0, input_X->x, input_X->len ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &X0 ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_copy( &Y, &X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &X0 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Y, &X0 ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &X0 ); +} + +void test_mbedtls_mpi_copy_binary_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_mbedtls_mpi_copy_binary( &data0, &data2 ); +} +void test_mpi_copy_self( int input_X ) +{ + mbedtls_mpi X; + mbedtls_mpi_init( &X ); + + TEST_ASSERT( mbedtls_mpi_lset( &X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_copy( &X, &X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_int( &X, input_X ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mpi_copy_self_wrapper( void ** params ) +{ + + test_mpi_copy_self( *( (int *) params[0] ) ); +} +void test_mbedtls_mpi_shrink( int before, int used, int min, int after ) +{ + mbedtls_mpi X; + mbedtls_mpi_init( &X ); + + TEST_ASSERT( mbedtls_mpi_grow( &X, before ) == 0 ); + TEST_ASSERT( used <= before ); + memset( X.p, 0x2a, used * sizeof( mbedtls_mpi_uint ) ); + TEST_ASSERT( mbedtls_mpi_shrink( &X, min ) == 0 ); + TEST_ASSERT( X.n == (size_t) after ); + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mbedtls_mpi_shrink_wrapper( void ** params ) +{ + + test_mbedtls_mpi_shrink( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ) ); +} +void test_mbedtls_mpi_safe_cond_assign( int x_sign, char * x_str, int y_sign, + char * y_str ) +{ + mbedtls_mpi X, Y, XX; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &XX ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, 16, x_str ) == 0 ); + X.s = x_sign; + TEST_ASSERT( mbedtls_mpi_read_string( &Y, 16, y_str ) == 0 ); + Y.s = y_sign; + TEST_ASSERT( mbedtls_mpi_copy( &XX, &X ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_safe_cond_assign( &X, &Y, 0 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &XX ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_safe_cond_assign( &X, &Y, 1 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &Y ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &XX ); +} + +void test_mbedtls_mpi_safe_cond_assign_wrapper( void ** params ) +{ + + test_mbedtls_mpi_safe_cond_assign( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3] ); +} +void test_mbedtls_mpi_safe_cond_swap( int x_sign, char * x_str, int y_sign, + char * y_str ) +{ + mbedtls_mpi X, Y, XX, YY; + + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); + mbedtls_mpi_init( &XX ); mbedtls_mpi_init( &YY ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, 16, x_str ) == 0 ); + X.s = x_sign; + TEST_ASSERT( mbedtls_mpi_read_string( &Y, 16, y_str ) == 0 ); + Y.s = y_sign; + + TEST_ASSERT( mbedtls_mpi_copy( &XX, &X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_copy( &YY, &Y ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_safe_cond_swap( &X, &Y, 0 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &XX ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Y, &YY ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_safe_cond_swap( &X, &Y, 1 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Y, &XX ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &YY ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); + mbedtls_mpi_free( &XX ); mbedtls_mpi_free( &YY ); +} + +void test_mbedtls_mpi_safe_cond_swap_wrapper( void ** params ) +{ + + test_mbedtls_mpi_safe_cond_swap( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3] ); +} +void test_mbedtls_mpi_swap_sint( int input_X, int input_Y ) +{ + mbedtls_mpi X, Y; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); + + TEST_ASSERT( mbedtls_mpi_lset( &X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_lset( &Y, input_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_int( &X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_int( &Y, input_Y ) == 0 ); + + mbedtls_mpi_swap( &X, &Y ); + TEST_ASSERT( mbedtls_mpi_cmp_int( &X, input_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_int( &Y, input_X ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); +} + +void test_mbedtls_mpi_swap_sint_wrapper( void ** params ) +{ + + test_mbedtls_mpi_swap_sint( *( (int *) params[0] ), *( (int *) params[1] ) ); +} +void test_mbedtls_mpi_swap_binary( data_t *input_X, data_t *input_Y ) +{ + mbedtls_mpi X, Y, X0, Y0; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); + mbedtls_mpi_init( &X0 ); mbedtls_mpi_init( &Y0 ); + + TEST_ASSERT( mbedtls_mpi_read_binary( &X, input_X->x, input_X->len ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_binary( &Y, input_Y->x, input_Y->len ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_binary( &X0, input_X->x, input_X->len ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_binary( &Y0, input_Y->x, input_Y->len ) == 0 ); + + mbedtls_mpi_swap( &X, &Y ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &Y0 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Y, &X0 ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); + mbedtls_mpi_free( &X0 ); mbedtls_mpi_free( &Y0 ); +} + +void test_mbedtls_mpi_swap_binary_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_mbedtls_mpi_swap_binary( &data0, &data2 ); +} +void test_mpi_swap_self( data_t *input_X ) +{ + mbedtls_mpi X, X0; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &X0 ); + + TEST_ASSERT( mbedtls_mpi_read_binary( &X, input_X->x, input_X->len ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_binary( &X0, input_X->x, input_X->len ) == 0 ); + + mbedtls_mpi_swap( &X, &X ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &X0 ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &X0 ); +} + +void test_mpi_swap_self_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_mpi_swap_self( &data0 ); +} +void test_mbedtls_mpi_add_mpi( int radix_X, char * input_X, int radix_Y, + char * input_Y, int radix_A, char * input_A ) +{ + mbedtls_mpi X, Y, Z, A; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &Z ); mbedtls_mpi_init( &A ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Y, radix_Y, input_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_add_mpi( &Z, &X, &Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Z, &A ) == 0 ); + + /* result == first operand */ + TEST_ASSERT( mbedtls_mpi_add_mpi( &X, &X, &Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + + /* result == second operand */ + TEST_ASSERT( mbedtls_mpi_add_mpi( &Y, &X, &Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Y, &A ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &Z ); mbedtls_mpi_free( &A ); +} + +void test_mbedtls_mpi_add_mpi_wrapper( void ** params ) +{ + + test_mbedtls_mpi_add_mpi( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), (char *) params[5] ); +} +void test_mbedtls_mpi_add_mpi_inplace( int radix_X, char * input_X, int radix_A, + char * input_A ) +{ + mbedtls_mpi X, A; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &A ); + + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_sub_abs( &X, &X, &X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_int( &X, 0 ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_add_abs( &X, &X, &X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &A ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_add_mpi( &X, &X, &X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &A ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &A ); +} + +void test_mbedtls_mpi_add_mpi_inplace_wrapper( void ** params ) +{ + + test_mbedtls_mpi_add_mpi_inplace( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3] ); +} +void test_mbedtls_mpi_add_abs( int radix_X, char * input_X, int radix_Y, + char * input_Y, int radix_A, char * input_A ) +{ + mbedtls_mpi X, Y, Z, A; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &Z ); mbedtls_mpi_init( &A ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Y, radix_Y, input_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_add_abs( &Z, &X, &Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Z, &A ) == 0 ); + + /* result == first operand */ + TEST_ASSERT( mbedtls_mpi_add_abs( &X, &X, &Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + + /* result == second operand */ + TEST_ASSERT( mbedtls_mpi_add_abs( &Y, &X, &Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Y, &A ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &Z ); mbedtls_mpi_free( &A ); +} + +void test_mbedtls_mpi_add_abs_wrapper( void ** params ) +{ + + test_mbedtls_mpi_add_abs( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), (char *) params[5] ); +} +void test_mbedtls_mpi_add_int( int radix_X, char * input_X, int input_Y, + int radix_A, char * input_A ) +{ + mbedtls_mpi X, Z, A; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Z ); mbedtls_mpi_init( &A ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_add_int( &Z, &X, input_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Z, &A ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Z ); mbedtls_mpi_free( &A ); +} + +void test_mbedtls_mpi_add_int_wrapper( void ** params ) +{ + + test_mbedtls_mpi_add_int( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), (char *) params[4] ); +} +void test_mbedtls_mpi_sub_mpi( int radix_X, char * input_X, int radix_Y, + char * input_Y, int radix_A, char * input_A ) +{ + mbedtls_mpi X, Y, Z, A; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &Z ); mbedtls_mpi_init( &A ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Y, radix_Y, input_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_sub_mpi( &Z, &X, &Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Z, &A ) == 0 ); + + /* result == first operand */ + TEST_ASSERT( mbedtls_mpi_sub_mpi( &X, &X, &Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + + /* result == second operand */ + TEST_ASSERT( mbedtls_mpi_sub_mpi( &Y, &X, &Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Y, &A ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &Z ); mbedtls_mpi_free( &A ); +} + +void test_mbedtls_mpi_sub_mpi_wrapper( void ** params ) +{ + + test_mbedtls_mpi_sub_mpi( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), (char *) params[5] ); +} +void test_mbedtls_mpi_sub_abs( int radix_X, char * input_X, int radix_Y, + char * input_Y, int radix_A, char * input_A, + int sub_result ) +{ + mbedtls_mpi X, Y, Z, A; + int res; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &Z ); mbedtls_mpi_init( &A ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Y, radix_Y, input_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + + res = mbedtls_mpi_sub_abs( &Z, &X, &Y ); + TEST_ASSERT( res == sub_result ); + if( res == 0 ) + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Z, &A ) == 0 ); + + /* result == first operand */ + TEST_ASSERT( mbedtls_mpi_sub_abs( &X, &X, &Y ) == sub_result ); + if( sub_result == 0 ) + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + + /* result == second operand */ + TEST_ASSERT( mbedtls_mpi_sub_abs( &Y, &X, &Y ) == sub_result ); + if( sub_result == 0 ) + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Y, &A ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &Z ); mbedtls_mpi_free( &A ); +} + +void test_mbedtls_mpi_sub_abs_wrapper( void ** params ) +{ + + test_mbedtls_mpi_sub_abs( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ) ); +} +void test_mbedtls_mpi_sub_int( int radix_X, char * input_X, int input_Y, + int radix_A, char * input_A ) +{ + mbedtls_mpi X, Z, A; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Z ); mbedtls_mpi_init( &A ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_sub_int( &Z, &X, input_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Z, &A ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Z ); mbedtls_mpi_free( &A ); +} + +void test_mbedtls_mpi_sub_int_wrapper( void ** params ) +{ + + test_mbedtls_mpi_sub_int( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), (char *) params[4] ); +} +void test_mbedtls_mpi_mul_mpi( int radix_X, char * input_X, int radix_Y, + char * input_Y, int radix_A, char * input_A ) +{ + mbedtls_mpi X, Y, Z, A; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &Z ); mbedtls_mpi_init( &A ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Y, radix_Y, input_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_mul_mpi( &Z, &X, &Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Z, &A ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &Z ); mbedtls_mpi_free( &A ); +} + +void test_mbedtls_mpi_mul_mpi_wrapper( void ** params ) +{ + + test_mbedtls_mpi_mul_mpi( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), (char *) params[5] ); +} +void test_mbedtls_mpi_mul_int( int radix_X, char * input_X, int input_Y, + int radix_A, char * input_A, + char * result_comparison ) +{ + mbedtls_mpi X, Z, A; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Z ); mbedtls_mpi_init( &A ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_mul_int( &Z, &X, input_Y ) == 0 ); + if( strcmp( result_comparison, "==" ) == 0 ) + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Z, &A ) == 0 ); + else if( strcmp( result_comparison, "!=" ) == 0 ) + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Z, &A ) != 0 ); + else + TEST_ASSERT( "unknown operator" == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Z ); mbedtls_mpi_free( &A ); +} + +void test_mbedtls_mpi_mul_int_wrapper( void ** params ) +{ + + test_mbedtls_mpi_mul_int( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), (char *) params[4], (char *) params[5] ); +} +void test_mbedtls_mpi_div_mpi( int radix_X, char * input_X, int radix_Y, + char * input_Y, int radix_A, char * input_A, + int radix_B, char * input_B, int div_result ) +{ + mbedtls_mpi X, Y, Q, R, A, B; + int res; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &R ); + mbedtls_mpi_init( &A ); mbedtls_mpi_init( &B ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Y, radix_Y, input_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &B, radix_B, input_B ) == 0 ); + res = mbedtls_mpi_div_mpi( &Q, &R, &X, &Y ); + TEST_ASSERT( res == div_result ); + if( res == 0 ) + { + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Q, &A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R, &B ) == 0 ); + } + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &R ); + mbedtls_mpi_free( &A ); mbedtls_mpi_free( &B ); +} + +void test_mbedtls_mpi_div_mpi_wrapper( void ** params ) +{ + + test_mbedtls_mpi_div_mpi( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ), (char *) params[7], *( (int *) params[8] ) ); +} +void test_mbedtls_mpi_div_int( int radix_X, char * input_X, int input_Y, + int radix_A, char * input_A, int radix_B, + char * input_B, int div_result ) +{ + mbedtls_mpi X, Q, R, A, B; + int res; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &R ); mbedtls_mpi_init( &A ); + mbedtls_mpi_init( &B ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &B, radix_B, input_B ) == 0 ); + res = mbedtls_mpi_div_int( &Q, &R, &X, input_Y ); + TEST_ASSERT( res == div_result ); + if( res == 0 ) + { + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Q, &A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R, &B ) == 0 ); + } + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &R ); mbedtls_mpi_free( &A ); + mbedtls_mpi_free( &B ); +} + +void test_mbedtls_mpi_div_int_wrapper( void ** params ) +{ + + test_mbedtls_mpi_div_int( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), (char *) params[6], *( (int *) params[7] ) ); +} +void test_mbedtls_mpi_mod_mpi( int radix_X, char * input_X, int radix_Y, + char * input_Y, int radix_A, char * input_A, + int div_result ) +{ + mbedtls_mpi X, Y, A; + int res; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &A ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Y, radix_Y, input_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + res = mbedtls_mpi_mod_mpi( &X, &X, &Y ); + TEST_ASSERT( res == div_result ); + if( res == 0 ) + { + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &A ) == 0 ); + } + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &A ); +} + +void test_mbedtls_mpi_mod_mpi_wrapper( void ** params ) +{ + + test_mbedtls_mpi_mod_mpi( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ) ); +} +void test_mbedtls_mpi_mod_int( int radix_X, char * input_X, int input_Y, + int input_A, int div_result ) +{ + mbedtls_mpi X; + int res; + mbedtls_mpi_uint r; + mbedtls_mpi_init( &X ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + res = mbedtls_mpi_mod_int( &r, &X, input_Y ); + TEST_ASSERT( res == div_result ); + if( res == 0 ) + { + TEST_ASSERT( r == (mbedtls_mpi_uint) input_A ); + } + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mbedtls_mpi_mod_int_wrapper( void ** params ) +{ + + test_mbedtls_mpi_mod_int( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +void test_mbedtls_mpi_exp_mod( int radix_A, char * input_A, int radix_E, + char * input_E, int radix_N, char * input_N, + int radix_RR, char * input_RR, int radix_X, + char * input_X, int div_result ) +{ + mbedtls_mpi A, E, N, RR, Z, X; + int res; + mbedtls_mpi_init( &A ); mbedtls_mpi_init( &E ); mbedtls_mpi_init( &N ); + mbedtls_mpi_init( &RR ); mbedtls_mpi_init( &Z ); mbedtls_mpi_init( &X ); + + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + + if( strlen( input_RR ) ) + TEST_ASSERT( mbedtls_mpi_read_string( &RR, radix_RR, input_RR ) == 0 ); + + res = mbedtls_mpi_exp_mod( &Z, &A, &E, &N, &RR ); + TEST_ASSERT( res == div_result ); + if( res == 0 ) + { + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Z, &X ) == 0 ); + } + +exit: + mbedtls_mpi_free( &A ); mbedtls_mpi_free( &E ); mbedtls_mpi_free( &N ); + mbedtls_mpi_free( &RR ); mbedtls_mpi_free( &Z ); mbedtls_mpi_free( &X ); +} + +void test_mbedtls_mpi_exp_mod_wrapper( void ** params ) +{ + + test_mbedtls_mpi_exp_mod( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ), (char *) params[7], *( (int *) params[8] ), (char *) params[9], *( (int *) params[10] ) ); +} +void test_mbedtls_mpi_exp_mod_size( int A_bytes, int E_bytes, int N_bytes, + int radix_RR, char * input_RR, int exp_result ) +{ + mbedtls_mpi A, E, N, RR, Z; + mbedtls_mpi_init( &A ); mbedtls_mpi_init( &E ); mbedtls_mpi_init( &N ); + mbedtls_mpi_init( &RR ); mbedtls_mpi_init( &Z ); + + /* Set A to 2^(A_bytes - 1) + 1 */ + TEST_ASSERT( mbedtls_mpi_lset( &A, 1 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_shift_l( &A, ( A_bytes * 8 ) - 1 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_set_bit( &A, 0, 1 ) == 0 ); + + /* Set E to 2^(E_bytes - 1) + 1 */ + TEST_ASSERT( mbedtls_mpi_lset( &E, 1 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_shift_l( &E, ( E_bytes * 8 ) - 1 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_set_bit( &E, 0, 1 ) == 0 ); + + /* Set N to 2^(N_bytes - 1) + 1 */ + TEST_ASSERT( mbedtls_mpi_lset( &N, 1 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_shift_l( &N, ( N_bytes * 8 ) - 1 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_set_bit( &N, 0, 1 ) == 0 ); + + if( strlen( input_RR ) ) + TEST_ASSERT( mbedtls_mpi_read_string( &RR, radix_RR, input_RR ) == 0 ); + + TEST_ASSERT( mbedtls_mpi_exp_mod( &Z, &A, &E, &N, &RR ) == exp_result ); + +exit: + mbedtls_mpi_free( &A ); mbedtls_mpi_free( &E ); mbedtls_mpi_free( &N ); + mbedtls_mpi_free( &RR ); mbedtls_mpi_free( &Z ); +} + +void test_mbedtls_mpi_exp_mod_size_wrapper( void ** params ) +{ + + test_mbedtls_mpi_exp_mod_size( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ) ); +} +void test_mbedtls_mpi_inv_mod( int radix_X, char * input_X, int radix_Y, + char * input_Y, int radix_A, char * input_A, + int div_result ) +{ + mbedtls_mpi X, Y, Z, A; + int res; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &Z ); mbedtls_mpi_init( &A ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Y, radix_Y, input_Y ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + res = mbedtls_mpi_inv_mod( &Z, &X, &Y ); + TEST_ASSERT( res == div_result ); + if( res == 0 ) + { + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Z, &A ) == 0 ); + } + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &Z ); mbedtls_mpi_free( &A ); +} + +void test_mbedtls_mpi_inv_mod_wrapper( void ** params ) +{ + + test_mbedtls_mpi_inv_mod( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ) ); +} +#if defined(MBEDTLS_GENPRIME) +void test_mbedtls_mpi_is_prime( int radix_X, char * input_X, int div_result ) +{ + mbedtls_mpi X; + int res; + mbedtls_mpi_init( &X ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + res = mbedtls_mpi_is_prime_ext( &X, 40, mbedtls_test_rnd_std_rand, NULL ); + TEST_ASSERT( res == div_result ); + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mbedtls_mpi_is_prime_wrapper( void ** params ) +{ + + test_mbedtls_mpi_is_prime( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_GENPRIME */ +#if defined(MBEDTLS_GENPRIME) +void test_mbedtls_mpi_is_prime_det( data_t * input_X, data_t * witnesses, + int chunk_len, int rounds ) +{ + mbedtls_mpi X; + int res; + mbedtls_test_mpi_random rand; + + mbedtls_mpi_init( &X ); + rand.data = witnesses; + rand.pos = 0; + rand.chunk_len = chunk_len; + + TEST_ASSERT( mbedtls_mpi_read_binary( &X, input_X->x, input_X->len ) == 0 ); + res = mbedtls_mpi_is_prime_ext( &X, rounds - 1, + mbedtls_test_mpi_miller_rabin_determinizer, + &rand ); + TEST_ASSERT( res == 0 ); + + rand.data = witnesses; + rand.pos = 0; + rand.chunk_len = chunk_len; + + res = mbedtls_mpi_is_prime_ext( &X, rounds, + mbedtls_test_mpi_miller_rabin_determinizer, + &rand ); + TEST_ASSERT( res == MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mbedtls_mpi_is_prime_det_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_mbedtls_mpi_is_prime_det( &data0, &data2, *( (int *) params[4] ), *( (int *) params[5] ) ); +} +#endif /* MBEDTLS_GENPRIME */ +#if defined(MBEDTLS_GENPRIME) +void test_mbedtls_mpi_gen_prime( int bits, int flags, int ref_ret ) +{ + mbedtls_mpi X; + int my_ret; + + mbedtls_mpi_init( &X ); + + my_ret = mbedtls_mpi_gen_prime( &X, bits, flags, + mbedtls_test_rnd_std_rand, NULL ); + TEST_ASSERT( my_ret == ref_ret ); + + if( ref_ret == 0 ) + { + size_t actual_bits = mbedtls_mpi_bitlen( &X ); + + TEST_ASSERT( actual_bits >= (size_t) bits ); + TEST_ASSERT( actual_bits <= (size_t) bits + 1 ); + + TEST_ASSERT( mbedtls_mpi_is_prime_ext( &X, 40, + mbedtls_test_rnd_std_rand, + NULL ) == 0 ); + if( flags & MBEDTLS_MPI_GEN_PRIME_FLAG_DH ) + { + /* X = ( X - 1 ) / 2 */ + TEST_ASSERT( mbedtls_mpi_shift_r( &X, 1 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_is_prime_ext( &X, 40, + mbedtls_test_rnd_std_rand, + NULL ) == 0 ); + } + } + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mbedtls_mpi_gen_prime_wrapper( void ** params ) +{ + + test_mbedtls_mpi_gen_prime( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_GENPRIME */ +void test_mbedtls_mpi_shift_l( int radix_X, char * input_X, int shift_X, + int radix_A, char * input_A ) +{ + mbedtls_mpi X, A; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &A ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_shift_l( &X, shift_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &A ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &A ); +} + +void test_mbedtls_mpi_shift_l_wrapper( void ** params ) +{ + + test_mbedtls_mpi_shift_l( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), (char *) params[4] ); +} +void test_mbedtls_mpi_shift_r( int radix_X, char * input_X, int shift_X, + int radix_A, char * input_A ) +{ + mbedtls_mpi X, A; + mbedtls_mpi_init( &X ); mbedtls_mpi_init( &A ); + + TEST_ASSERT( mbedtls_mpi_read_string( &X, radix_X, input_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &A, radix_A, input_A ) == 0 ); + TEST_ASSERT( mbedtls_mpi_shift_r( &X, shift_X ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &X, &A ) == 0 ); + +exit: + mbedtls_mpi_free( &X ); mbedtls_mpi_free( &A ); +} + +void test_mbedtls_mpi_shift_r_wrapper( void ** params ) +{ + + test_mbedtls_mpi_shift_r( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), (char *) params[4] ); +} +void test_mpi_fill_random( int wanted_bytes, int rng_bytes, int expected_ret ) +{ + mbedtls_mpi X; + int ret; + size_t bytes_left = rng_bytes; + mbedtls_mpi_init( &X ); + + ret = mbedtls_mpi_fill_random( &X, wanted_bytes, + f_rng_bytes_left, &bytes_left ); + TEST_ASSERT( ret == expected_ret ); + + if( expected_ret == 0 ) + { + /* mbedtls_mpi_fill_random is documented to use bytes from the RNG + * as a big-endian representation of the number. We know when + * our RNG function returns null bytes, so we know how many + * leading zero bytes the number has. */ + size_t leading_zeros = 0; + if( wanted_bytes > 0 && rng_bytes % 256 == 0 ) + leading_zeros = 1; + TEST_ASSERT( mbedtls_mpi_size( &X ) + leading_zeros == + (size_t) wanted_bytes ); + TEST_ASSERT( (int) bytes_left == rng_bytes - wanted_bytes ); + } + +exit: + mbedtls_mpi_free( &X ); +} + +void test_mpi_fill_random_wrapper( void ** params ) +{ + + test_mpi_fill_random( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#if defined(MBEDTLS_SELF_TEST) +void test_mpi_selftest( ) +{ + TEST_ASSERT( mbedtls_mpi_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_mpi_selftest_wrapper( void ** params ) +{ + (void)params; + + test_mpi_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_BIGNUM_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_BIGNUM_C) + + case 0: + { + *out_value = MBEDTLS_ERR_MPI_INVALID_CHARACTER; + } + break; + case 1: + { + *out_value = MBEDTLS_ERR_MPI_BAD_INPUT_DATA; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL; + } + break; + case 3: + { + *out_value = MBEDTLS_ERR_MPI_FILE_IO_ERROR; + } + break; + case 4: + { + *out_value = -1; + } + break; + case 5: + { + *out_value = -2; + } + break; + case 6: + { + *out_value = -3; + } + break; + case 7: + { + *out_value = -1500; + } + break; + case 8: + { + *out_value = -42; + } + break; + case 9: + { + *out_value = +1; + } + break; + case 10: + { + *out_value = -9871232; + } + break; + case 11: + { + *out_value = MBEDTLS_ERR_MPI_NEGATIVE_VALUE; + } + break; + case 12: + { + *out_value = MBEDTLS_ERR_MPI_DIVISION_BY_ZERO; + } + break; + case 13: + { + *out_value = -13; + } + break; + case 14: + { + *out_value = -34; + } + break; + case 15: + { + *out_value = MBEDTLS_MPI_MAX_SIZE; + } + break; + case 16: + { + *out_value = MBEDTLS_MPI_MAX_SIZE + 1; + } + break; + case 17: + { + *out_value = MBEDTLS_ERR_MPI_NOT_ACCEPTABLE; + } + break; + case 18: + { + *out_value = MBEDTLS_MPI_GEN_PRIME_FLAG_DH; + } + break; + case 19: + { + *out_value = MBEDTLS_MPI_GEN_PRIME_FLAG_DH | MBEDTLS_MPI_GEN_PRIME_FLAG_LOW_ERR; + } + break; + case 20: + { + *out_value = MBEDTLS_MPI_GEN_PRIME_FLAG_LOW_ERR; + } + break; + case 21: + { + *out_value = MBEDTLS_MPI_MAX_SIZE - 7; + } + break; + case 22: + { + *out_value = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; + } + break; + case 23: + { + *out_value = MBEDTLS_MPI_MAX_SIZE-1; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_BIGNUM_C) + + case 0: + { +#if defined(MPI_MAX_BITS_LARGER_THAN_792) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_GENPRIME) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_SELF_TEST) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mpi_valid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_mpi_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mpi_null_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mpi_read_write_string_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_read_binary_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_read_binary_le_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_write_binary_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_write_binary_le_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) + test_mbedtls_mpi_read_file_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) + test_mbedtls_mpi_write_file_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_get_bit_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_set_bit_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_lsb_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_bitlen_wrapper, +#else + NULL, +#endif +/* Function Id: 14 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_gcd_wrapper, +#else + NULL, +#endif +/* Function Id: 15 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_cmp_int_wrapper, +#else + NULL, +#endif +/* Function Id: 16 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_cmp_mpi_wrapper, +#else + NULL, +#endif +/* Function Id: 17 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_lt_mpi_ct_wrapper, +#else + NULL, +#endif +/* Function Id: 18 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_cmp_abs_wrapper, +#else + NULL, +#endif +/* Function Id: 19 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_copy_sint_wrapper, +#else + NULL, +#endif +/* Function Id: 20 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_copy_binary_wrapper, +#else + NULL, +#endif +/* Function Id: 21 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mpi_copy_self_wrapper, +#else + NULL, +#endif +/* Function Id: 22 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_shrink_wrapper, +#else + NULL, +#endif +/* Function Id: 23 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_safe_cond_assign_wrapper, +#else + NULL, +#endif +/* Function Id: 24 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_safe_cond_swap_wrapper, +#else + NULL, +#endif +/* Function Id: 25 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_swap_sint_wrapper, +#else + NULL, +#endif +/* Function Id: 26 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_swap_binary_wrapper, +#else + NULL, +#endif +/* Function Id: 27 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mpi_swap_self_wrapper, +#else + NULL, +#endif +/* Function Id: 28 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_add_mpi_wrapper, +#else + NULL, +#endif +/* Function Id: 29 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_add_mpi_inplace_wrapper, +#else + NULL, +#endif +/* Function Id: 30 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_add_abs_wrapper, +#else + NULL, +#endif +/* Function Id: 31 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_add_int_wrapper, +#else + NULL, +#endif +/* Function Id: 32 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_sub_mpi_wrapper, +#else + NULL, +#endif +/* Function Id: 33 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_sub_abs_wrapper, +#else + NULL, +#endif +/* Function Id: 34 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_sub_int_wrapper, +#else + NULL, +#endif +/* Function Id: 35 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_mul_mpi_wrapper, +#else + NULL, +#endif +/* Function Id: 36 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_mul_int_wrapper, +#else + NULL, +#endif +/* Function Id: 37 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_div_mpi_wrapper, +#else + NULL, +#endif +/* Function Id: 38 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_div_int_wrapper, +#else + NULL, +#endif +/* Function Id: 39 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_mod_mpi_wrapper, +#else + NULL, +#endif +/* Function Id: 40 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_mod_int_wrapper, +#else + NULL, +#endif +/* Function Id: 41 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_exp_mod_wrapper, +#else + NULL, +#endif +/* Function Id: 42 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_exp_mod_size_wrapper, +#else + NULL, +#endif +/* Function Id: 43 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_inv_mod_wrapper, +#else + NULL, +#endif +/* Function Id: 44 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_mbedtls_mpi_is_prime_wrapper, +#else + NULL, +#endif +/* Function Id: 45 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_mbedtls_mpi_is_prime_det_wrapper, +#else + NULL, +#endif +/* Function Id: 46 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_mbedtls_mpi_gen_prime_wrapper, +#else + NULL, +#endif +/* Function Id: 47 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_shift_l_wrapper, +#else + NULL, +#endif +/* Function Id: 48 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mbedtls_mpi_shift_r_wrapper, +#else + NULL, +#endif +/* Function Id: 49 */ + +#if defined(MBEDTLS_BIGNUM_C) + test_mpi_fill_random_wrapper, +#else + NULL, +#endif +/* Function Id: 50 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_SELF_TEST) + test_mpi_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_mpi.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_mpi.datax b/third_party/mbedtls/test/test_suite_mpi.datax new file mode 100644 index 000000000..f42d8f656 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_mpi.datax @@ -0,0 +1,1015 @@ +MPI - Valid parameters +0 + +MPI - Invalid parameters +1 + +Arguments with no value +2 + +Base test mpi_read_write_string #1 +3:int:10:char*:"128":int:10:char*:"128":int:100:int:0:int:0 + +Base test mpi_read_write_string #2 +3:int:10:char*:"128":int:16:char*:"80":int:100:int:0:int:0 + +Base test mpi_read_write_string #3 (Read zero) +3:int:10:char*:"0":int:10:char*:"0":int:100:int:0:int:0 + +Base test mpi_read_write_string #3 (Negative decimal) [#1] +3:int:10:char*:"-23":int:10:char*:"-23":int:100:int:0:int:0 + +Base test mpi_read_write_string #3 (Negative hex) +3:int:16:char*:"-20":int:10:char*:"-32":int:100:int:0:int:0 + +Base test mpi_read_write_string #3 (Negative decimal) [#2] +3:int:16:char*:"-23":int:16:char*:"-23":int:100:int:0:int:0 + +Base test mpi_read_write_string #4 (Buffer just fits) +3:int:16:char*:"-4":int:4:char*:"-10":int:4:int:0:int:0 + +Test mpi_read_write_string #1 (Invalid character) +3:int:10:char*:"a28":int:0:char*:"":int:100:exp:0:int:0 + +Test mpi_read_write_string #2 (Illegal input radix) +3:int:19:char*:"a28":int:0:char*:"":int:100:exp:1:int:0 + +Test mpi_read_write_string #3 (Buffer just fits) +3:int:16:char*:"-23":int:16:char*:"-23":int:4:int:0:int:0 + +Test mpi_read_write_string #4 (Buffer too small) +3:int:16:char*:"-23":int:16:char*:"-23":int:3:int:0:exp:2 + +Test mpi_read_write_string #5 (Illegal output radix) +3:int:16:char*:"-23":int:17:char*:"-23":int:4:int:0:exp:1 + +Test mpi_read_write_string #6 (Output radix of 15) +3:int:10:char*:"29":int:15:char*:"1e":int:100:int:0:int:0 + +Test mpi_read_write_string #7 +3:int:10:char*:"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924":int:16:char*:"0941379d00fed1491fe15df284dfde4a142f68aa8d412023195cee66883e6290ffe703f4ea5963bf212713cee46b107c09182b5edcd955adac418bf4918e2889af48e1099d513830cec85c26ac1e158b52620e33ba8692f893efbb2f958b4424":int:200:int:0:int:0 + +Test mpi_read_write_string #8 (Empty MPI -> hex) +3:int:16:char*:"":int:16:char*:"00":int:4:int:0:int:0 + +Test mpi_read_write_string #9 (Empty MPI -> dec) +3:int:16:char*:"":int:10:char*:"0":int:4:int:0:int:0 + +Test mpi_write_string #10 (Negative hex with odd number of digits) +3:int:16:char*:"-1":int:16:char*:"":int:3:int:0:exp:2 + +Base test mbedtls_mpi_read_binary #1 +4:hex:"0941379d00fed1491fe15df284dfde4a142f68aa8d412023195cee66883e6290ffe703f4ea5963bf212713cee46b107c09182b5edcd955adac418bf4918e2889af48e1099d513830cec85c26ac1e158b52620e33ba8692f893efbb2f958b4424":int:10:char*:"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" + +Base test mbedtls_mpi_read_binary_le #1 +5:hex:"0941379d00fed1491fe15df284dfde4a142f68aa8d412023195cee66883e6290ffe703f4ea5963bf212713cee46b107c09182b5edcd955adac418bf4918e2889af48e1099d513830cec85c26ac1e158b52620e33ba8692f893efbb2f958b4424":int:10:char*:"219946662473865722255717126709915431768051735954189829340600976826409773245337023925691629251672268961177825243440202069039100741562168093042339401187848509859789949044607421190014088260008793380554914226244485299326152319899746569" + +Base test mbedtls_mpi_write_binary #1 +6:int:10:char*:"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924":hex:"0941379d00fed1491fe15df284dfde4a142f68aa8d412023195cee66883e6290ffe703f4ea5963bf212713cee46b107c09182b5edcd955adac418bf4918e2889af48e1099d513830cec85c26ac1e158b52620e33ba8692f893efbb2f958b4424":int:200:int:0 + +Test mbedtls_mpi_write_binary #1 (Buffer just fits) +6:int:16:char*:"123123123123123123123123123":hex:"0123123123123123123123123123":int:14:int:0 + +Test mbedtls_mpi_write_binary #2 (Buffer too small) +6:int:16:char*:"123123123123123123123123123":hex:"23123123123123123123123123":int:13:exp:2 + +Base test mbedtls_mpi_write_binary_le #1 +7:int:10:char*:"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924":hex:"24448b952fbbef93f89286ba330e62528b151eac265cc8ce3038519d09e148af89288e91f48b41acad55d9dc5e2b18097c106be4ce132721bf6359eaf403e7ff90623e8866ee5c192320418daa682f144adedf84f25de11f49d1fe009d374109":int:200:int:0 + +Test mbedtls_mpi_write_binary_le #1 (Buffer just fits) +7:int:16:char*:"123123123123123123123123123":hex:"2331122331122331122331122301":int:14:int:0 + +Test mbedtls_mpi_write_binary_le #2 (Buffer too small) +7:int:16:char*:"123123123123123123123123123":hex:"23311223311223311223311223":int:13:exp:2 + +Base test mbedtls_mpi_read_file #1 +8:int:10:char*:"zip:third_party/mbedtls/test/data/mpi_10":hex:"01f55332c3a48b910f9942f6c914e58bef37a47ee45cb164a5b6b8d1006bf59a059c21449939ebebfdf517d2e1dbac88010d7b1f141e997bd6801ddaec9d05910f4f2de2b2c4d714e2c14a72fc7f17aa428d59c531627f09":int:0 + +Test mbedtls_mpi_read_file #1 (Empty file) +8:int:10:char*:"zip:third_party/mbedtls/test/data/hash_file_4":hex:"":exp:3 + +Test mbedtls_mpi_read_file #2 (Illegal input) +8:int:10:char*:"zip:third_party/mbedtls/test/data/hash_file_3":hex:"":int:0 + +Test mbedtls_mpi_read_file #3 (Input too big) +8:int:10:char*:"zip:third_party/mbedtls/test/data/mpi_too_big":hex:"":exp:2 + +Base test mbedtls_mpi_write_file #1 +9:int:10:char*:"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924":int:16:char*:"/tmp/test_suite_mpi_write" + +Base test mbedtls_mpi_lsb #1 +12:int:10:char*:"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924":int:2 + +Base test mbedtls_mpi_lsb #2 +12:int:10:char*:"24":int:3 + +Base test mbedtls_mpi_lsb #3 +12:int:16:char*:"24":int:2 + +Base test mbedtls_mpi_lsb #4 +12:int:16:char*:"2000":int:13 + +Base test mbedtls_mpi_bitlen #1 +13:int:10:char*:"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924":int:764 + +Base test mbedtls_mpi_bitlen #2 +13:int:10:char*:"24":int:5 + +Base test mbedtls_mpi_bitlen #3 +13:int:10:char*:"1":int:1 + +Base test mbedtls_mpi_bitlen #4 +13:int:10:char*:"15":int:4 + +Base test mbedtls_mpi_bitlen #5 +13:int:10:char*:"16":int:5 + +Base test mbedtls_mpi_bitlen #6 +13:int:10:char*:"10":int:4 + +Base test mbedtls_mpi_bitlen #7 +13:int:10:char*:"0":int:0 + +Base test mbedtls_mpi_cmp_int #1 +15:int:693:int:693:int:0 + +Base test mbedtls_mpi_cmp_int #2 +15:int:693:int:692:int:1 + +Base test mbedtls_mpi_cmp_int #3 +15:int:693:int:694:exp:4 + +Base test mbedtls_mpi_cmp_int (Negative values) #1 +15:exp:5:exp:5:int:0 + +Base test mbedtls_mpi_cmp_int (Negative values) #2 +15:exp:5:exp:6:int:1 + +Base test mbedtls_mpi_cmp_int (Negative values) #3 +15:exp:5:exp:4:exp:4 + +Base test mbedtls_mpi_cmp_mpi #1 +16:int:10:char*:"693":int:10:char*:"693":int:0 + +Base test mbedtls_mpi_cmp_mpi #2 +16:int:10:char*:"693":int:10:char*:"692":int:1 + +Base test mbedtls_mpi_cmp_mpi #3 +16:int:10:char*:"693":int:10:char*:"694":exp:4 + +Base test mbedtls_mpi_cmp_mpi (Negative values) #1 +16:int:10:char*:"-2":int:10:char*:"-2":int:0 + +Base test mbedtls_mpi_cmp_mpi (Negative values) #2 +16:int:10:char*:"-2":int:10:char*:"-3":int:1 + +Base test mbedtls_mpi_cmp_mpi (Negative values) #3 +16:int:10:char*:"-2":int:10:char*:"-1":exp:4 + +Base test mbedtls_mpi_cmp_mpi (Mixed values) #4 +16:int:10:char*:"-3":int:10:char*:"2":exp:4 + +Base test mbedtls_mpi_cmp_mpi (Mixed values) #5 +16:int:10:char*:"2":int:10:char*:"-3":int:1 + +Base test mbedtls_mpi_cmp_mpi (Mixed values) #6 +16:int:10:char*:"-2":int:10:char*:"31231231289798":exp:4 + +Base test mbedtls_mpi_lt_mpi_ct #1 +17:int:1:char*:"2B5":int:1:char*:"2B5":int:0:int:0 + +Base test mbedtls_mpi_lt_mpi_ct #2 +17:int:1:char*:"2B5":int:1:char*:"2B4":int:0:int:0 + +Base test mbedtls_mpi_lt_mpi_ct #3 +17:int:1:char*:"2B5":int:1:char*:"2B6":int:1:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (Negative values) #1 +17:int:1:char*:"-2":int:1:char*:"-2":int:0:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (Negative values) #2 +17:int:1:char*:"-2":int:1:char*:"-3":int:0:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (Negative values) #3 +17:int:1:char*:"-2":int:1:char*:"-1":int:1:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (Mixed values) #1 +17:int:1:char*:"-3":int:1:char*:"2":int:1:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (Mixed values) #2 +17:int:1:char*:"2":int:1:char*:"-3":int:0:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (Mixed values) #3 +17:int:2:char*:"-2":int:2:char*:"1C67967269C6":int:1:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (X is longer in storage) +17:int:3:char*:"2B5":int:2:char*:"2B5":int:0:exp:1 + +Base test mbedtls_mpi_lt_mpi_ct (Y is longer in storage) +17:int:3:char*:"2B5":int:4:char*:"2B5":int:0:exp:1 + +Base test mbedtls_mpi_lt_mpi_ct (corner case - 64 bit) #1 +17:int:2:char*:"7FFFFFFFFFFFFFFF":int:2:char*:"FF":int:0:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (corner case - 64 bit) #2 +17:int:2:char*:"8000000000000000":int:2:char*:"7FFFFFFFFFFFFFFF":int:0:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (corner case - 64 bit) #3 +17:int:2:char*:"8000000000000000":int:2:char*:"1":int:0:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (corner case - 64 bit) #4 +17:int:2:char*:"8000000000000000":int:2:char*:"0":int:0:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (corner case - 64 bit) #5 +17:int:2:char*:"FFFFFFFFFFFFFFFF":int:2:char*:"FF":int:0:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (corner case - 32 bit) #1 +17:int:1:char*:"7FFFFFFF":int:1:char*:"FF":int:0:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (corner case - 32 bit) #2 +17:int:1:char*:"80000000":int:1:char*:"7FFFFFFF":int:0:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (corner case - 32 bit) #3 +17:int:1:char*:"80000000":int:1:char*:"1":int:0:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (corner case - 32 bit) #4 +17:int:1:char*:"80000000":int:1:char*:"0":int:0:int:0 + +Base test mbedtls_mpi_lt_mpi_ct (corner case - 32 bit) #5 +17:int:1:char*:"FFFFFFFF":int:1:char*:"FF":int:0:int:0 + +Multi-limb mbedtls_mpi_lt_mpi_ct (XY, equal MS limbs) +17:int:2:char*:"-EEFFFFFFFFFFFFFFF1":int:2:char*:"-EEFFFFFFFFFFFFFFFF":int:0:int:0 + +Multi-limb mbedtls_mpi_lt_mpi_ct (X=Y) +17:int:2:char*:"EEFFFFFFFFFFFFFFFF":int:2:char*:"EEFFFFFFFFFFFFFFFF":int:0:int:0 + +Multi-limb mbedtls_mpi_lt_mpi_ct (X=-Y) +17:int:2:char*:"-EEFFFFFFFFFFFFFFFF":int:2:char*:"EEFFFFFFFFFFFFFFFF":int:1:int:0 + +Multi-limb mbedtls_mpi_lt_mpi_ct (Alternating limbs) #1 +17:int:2:char*:"11FFFFFFFFFFFFFFFF":int:2:char*:"FF1111111111111111":int:1:int:0 + +Multi-limb mbedtls_mpi_lt_mpi_ct (Alternating limbs) #2 +17:int:2:char*:"FF1111111111111111":int:2:char*:"11FFFFFFFFFFFFFFFF":int:0:int:0 + +Multi-limb mbedtls_mpi_lt_mpi_ct (Alternating limbs) #3 +17:int:2:char*:"-11FFFFFFFFFFFFFFFF":int:2:char*:"-FF1111111111111111":int:0:int:0 + +Multi-limb mbedtls_mpi_lt_mpi_ct (Alternating limbs) #4 +17:int:2:char*:"-FF1111111111111111":int:2:char*:"-11FFFFFFFFFFFFFFFF":int:1:int:0 + +Base test mbedtls_mpi_cmp_abs #1 +18:int:10:char*:"693":int:10:char*:"693":int:0 + +Base test mbedtls_mpi_cmp_abs #2 +18:int:10:char*:"693":int:10:char*:"692":int:1 + +Base test mbedtls_mpi_cmp_abs #3 +18:int:10:char*:"693":int:10:char*:"694":exp:4 + +Base test mbedtls_mpi_cmp_abs (Negative values) #1 +18:int:10:char*:"-2":int:10:char*:"-2":int:0 + +Base test mbedtls_mpi_cmp_abs (Negative values) #2 +18:int:10:char*:"-2":int:10:char*:"-3":exp:4 + +Base test mbedtls_mpi_cmp_abs (Negative values) #3 +18:int:10:char*:"-2":int:10:char*:"-1":int:1 + +Base test mbedtls_mpi_cmp_abs (Zero and Zero) #4 +18:int:10:char*:"0":int:10:char*:"0":int:0 + +Base test mbedtls_mpi_cmp_abs (Mix values) #1 +18:int:10:char*:"-2":int:10:char*:"2":int:0 + +Base test mbedtls_mpi_cmp_abs (Mix values) #2 +18:int:10:char*:"2":int:10:char*:"-3":exp:4 + +Base test mbedtls_mpi_cmp_abs (Mix values) #3 +18:int:10:char*:"-2":int:10:char*:"1":int:1 + +Copy zero (1 limb) to positive (1 limb) +19:int:0:int:1500 + +Copy zero (1 limb) to negative (1 limb) +19:int:0:exp:7 + +Copy positive (1 limb) to zero (1 limb) +19:int:1500:int:0 + +Copy negative (1 limb) to zero (1 limb) +19:exp:7:int:0 + +Copy positive (1 limb) to negative (1 limb) +19:int:1500:exp:8 + +Copy negative (1 limb) to positive (1 limb) +19:exp:8:int:1500 + +Copy zero (null) to zero (null) +20:hex:"":hex:"" + +Copy zero (null) to positive (1 limb) +20:hex:"":hex:"1234" + +Copy positive (1 limb) to zero (null) +20:hex:"1234":hex:"" + +Copy positive to larger +20:hex:"bead":hex:"ca5cadedb01dfaceacc01ade" + +Copy positive to smaller +20:hex:"ca5cadedb01dfaceacc01ade":hex:"bead" + +Copy self: positive (1 limb) +21:int:14 + +Copy self: zero (1 limb) +21:int:0 + +Swap zero (1 limb) with positive (1 limb) +25:int:0:int:1500 + +Swap zero (1 limb) with negative (1 limb) +25:int:0:exp:7 + +Swap positive (1 limb) with zero (1 limb) +25:int:1500:int:0 + +Swap negative (1 limb) with zero (1 limb) +25:exp:7:int:0 + +Swap positive (1 limb) with negative (1 limb) +25:int:1500:exp:8 + +Swap negative (1 limb) with positive (1 limb) +25:exp:8:int:1500 + +Swap zero (null) with zero (null) +26:hex:"":hex:"" + +Swap zero (null) with positive (1 limb) +26:hex:"":hex:"1234" + +Swap positive (1 limb) with zero (null) +26:hex:"1234":hex:"" + +Swap positive with larger +26:hex:"bead":hex:"ca5cadedb01dfaceacc01ade" + +Swap positive with smaller +26:hex:"ca5cadedb01dfaceacc01ade":hex:"bead" + +Swap self: 1 limb +27:hex:"face" + +Swap self: null +27:hex:"" + +Shrink 2 limbs in a buffer of size 2 to 4 +22:int:2:int:2:int:4:int:4 + +Shrink 2 limbs in a buffer of size 4 to 4 +22:int:4:int:2:int:4:int:4 + +Shrink 2 limbs in a buffer of size 8 to 4 +22:int:8:int:2:int:4:int:4 + +Shrink 4 limbs in a buffer of size 8 to 4 +22:int:8:int:4:int:4:int:4 + +Shrink 6 limbs in a buffer of size 8 to 4 yielding 6 +22:int:8:int:6:int:4:int:6 + +Shrink 2 limbs in a buffer of size 4 to 0 yielding 2 +22:int:4:int:2:int:0:int:2 + +Shrink 1 limbs in a buffer of size 4 to 0 yielding 1 +22:int:4:int:1:int:0:int:1 + +Shrink 0 limbs in a buffer of size 4 to 0 yielding 1 +22:int:4:int:0:int:0:int:1 + +Test mbedtls_mpi_safe_cond_assign #1 +23:exp:9:char*:"01":exp:9:char*:"02" + +Test mbedtls_mpi_safe_cond_assign #2 +23:exp:9:char*:"FF000000000000000001":exp:9:char*:"02" + +Test mbedtls_mpi_safe_cond_assign #3 +23:exp:9:char*:"01":exp:9:char*:"FF000000000000000002" + +Test mbedtls_mpi_safe_cond_assign #4 +23:exp:9:char*:"01":exp:4:char*:"02" + +Test mbedtls_mpi_safe_cond_assign #5 +23:exp:4:char*:"01":exp:9:char*:"02" + +Test mbedtls_mpi_safe_cond_assign #6 +23:exp:4:char*:"01":exp:4:char*:"02" + +Test mbedtls_mpi_safe_cond_swap #1 +24:exp:9:char*:"01":exp:9:char*:"02" + +Test mbedtls_mpi_safe_cond_swap #2 +24:exp:9:char*:"FF000000000000000001":exp:9:char*:"02" + +Test mbedtls_mpi_safe_cond_swap #3 +24:exp:9:char*:"01":exp:9:char*:"FF000000000000000002" + +Test mbedtls_mpi_safe_cond_swap #4 +24:exp:9:char*:"01":exp:4:char*:"02" + +Test mbedtls_mpi_safe_cond_swap #5 +24:exp:4:char*:"01":exp:9:char*:"02" + +Test mbedtls_mpi_safe_cond_swap #6 +24:exp:4:char*:"01":exp:4:char*:"02" + +Base test mbedtls_mpi_add_abs #1 +30:int:10:char*:"12345678":int:10:char*:"642531":int:10:char*:"12988209" + +Base test mbedtls_mpi_add_abs #2 +30:int:10:char*:"-12345678":int:10:char*:"642531":int:10:char*:"12988209" + +Base test mbedtls_mpi_add_abs #3 +30:int:10:char*:"12345678":int:10:char*:"-642531":int:10:char*:"12988209" + +Base test mbedtls_mpi_add_abs #4 +30:int:10:char*:"-12345678":int:10:char*:"-642531":int:10:char*:"12988209" + +Test mbedtls_mpi_add_abs #1 +30:int:10:char*:"-643808006803554439230129854961492699151386107534013432918073439524138264842370630061369715394739134090922937332590384720397133335969549256322620979036686633213903952966175107096769180017646161851573147596390153":int:10:char*:"56125680981752282333498088313568935051383833838594899821664631784577337171193624243181360054669678410455329112434552942717084003541384594864129940145043086760031292483340068923506115878221189886491132772739661669044958531131327771":int:10:char*:"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" + +Regression mbedtls_mpi_add_abs (add small to very large MPI with carry rollover) [#1] +30:int:16:char*:"FFFFFFFFFFFFFFFFFFFFFFFFFFFFF8":int:16:char*:"08":int:16:char*:"1000000000000000000000000000000" + +Regression mbedtls_mpi_add_abs (add small to very large MPI with carry rollover) [#2] +30:int:16:char*:"08":int:16:char*:"FFFFFFFFFFFFFFFFFFFFFFFFFFFFF8":int:16:char*:"1000000000000000000000000000000" + +Base test mbedtls_mpi_add_mpi #1 +28:int:10:char*:"12345678":int:10:char*:"642531":int:10:char*:"12988209" + +Base test mbedtls_mpi_add_mpi #2 +28:int:10:char*:"-12345678":int:10:char*:"642531":int:10:char*:"-11703147" + +Base test mbedtls_mpi_add_mpi #3 +28:int:10:char*:"12345678":int:10:char*:"-642531":int:10:char*:"11703147" + +Base test mbedtls_mpi_add_mpi #4 +28:int:10:char*:"-12345678":int:10:char*:"-642531":int:10:char*:"-12988209" + +Test mbedtls_mpi_add_mpi #1 +28:int:10:char*:"203956878356401977405765866929034577280193993314348263094772646453283062722701277632936616063144088173312372882677123879538709400158306567338328279154499698366071906766440037074217117805690872792848149112022286332144876183376326512083574821647933992961249917319836219304274280243803104015000563790123":int:10:char*:"531872289054204184185084734375133399408303613982130856645299464930952178606045848877129147820387996428175564228204785846141207532462936339834139412401975338705794646595487324365194792822189473092273993580587964571659678084484152603881094176995594813302284232006001752128168901293560051833646881436219":int:10:char*:"735829167410606161590850601304167976688497607296479119740072111384235241328747126510065763883532084601487937110881909725679916932621242907172467691556475037071866553361927361439411910627880345885122142692610250903804554267860479115964668998643528806263534149325837971432443181537363155848647445226342" + +Test mbedtls_mpi_add_mpi #2 +28:int:10:char*:"643808006803554439230129854961492699151386107534013432918073439524138264842370630061369715394739134090922937332590384720397133335969549256322620979036686633213903952966175107096769180017646161851573147596390153":int:10:char*:"56125680981752282333498088313568935051383833838594899821664631784577337171193624243181360054669678410455329112434552942717084003541384594864129940145043086760031292483340068923506115878221189886491132772739661669044958531131327771":int:10:char*:"56125680981752282334141896320372489490613963693556392520816017892111350604111697682705498319512049040516698827829292076808006940873974979584527073481012636016353913462376755556720019831187364993587901952757307830896531678727717924" + +Base test mbedtls_mpi_add_mpi inplace #1 +29:int:10:char*:"12345678":int:10:char*:"24691356" + +Test mbedtls_mpi_add_mpi inplace #2 +29:int:10:char*:"643808006803554439230129854961492699151386107534013432918073439524138264842370630061369715394739134090922937332590384720397133335969549256322620979036686633213903952966175107096769180017646161851573147596390153":int:10:char*:"1287616013607108878460259709922985398302772215068026865836146879048276529684741260122739430789478268181845874665180769440794266671939098512645241958073373266427807905932350214193538360035292323703146295192780306" + +Test mbedtls_mpi_add_mpi inplace #3 +29:int:16:char*:"ffffffffffffffffffffffffffffffff":int:16:char*:"01fffffffffffffffffffffffffffffffe" + +Test mbedtls_mpi_add_int #1 +31:int:10:char*:"2039568783564019774057658669290345772801939933143482630947726464532830627227012776329":int:9871232:int:10:char*:"2039568783564019774057658669290345772801939933143482630947726464532830627227022647561" + +Test mbedtls_mpi_add_int #2 +31:int:10:char*:"2039568783564019774057658669290345772801939933143482630947726464532830627227012776329":exp:10:int:10:char*:"2039568783564019774057658669290345772801939933143482630947726464532830627227002905097" + +Base test mbedtls_mpi_sub_abs #1 (|B| > |A|) +33:int:10:char*:"5":int:10:char*:"7":int:10:char*:"0":exp:11 + +Base test mbedtls_mpi_sub_abs #2 (|B| > |A|) +33:int:10:char*:"-5":int:10:char*:"-7":int:10:char*:"0":exp:11 + +Base test mbedtls_mpi_sub_abs #3 (|B| > |A|) +33:int:10:char*:"-5":int:10:char*:"7":int:10:char*:"0":exp:11 + +Base test mbedtls_mpi_sub_abs #4 (|B| > |A|) +33:int:10:char*:"5":int:10:char*:"-7":int:10:char*:"0":exp:11 + +Base test mbedtls_mpi_sub_abs #1 (|B| >> |A| with more limbs) +33:int:10:char*:"5":int:16:char*:"123456789abcdef01":int:10:char*:"0":exp:11 + +Base test mbedtls_mpi_sub_abs #2 (|B| >> |A| with more limbs) +33:int:10:char*:"-5":int:16:char*:"-123456789abcdef01":int:10:char*:"0":exp:11 + +Base test mbedtls_mpi_sub_abs #3 (|B| >> |A| with more limbs) +33:int:10:char*:"-5":int:16:char*:"123456789abcdef01":int:10:char*:"0":exp:11 + +Base test mbedtls_mpi_sub_abs #4 (|B| >> |A| with more limbs) +33:int:10:char*:"5":int:16:char*:"-123456789abcdef01":int:10:char*:"0":exp:11 + +Base test mbedtls_mpi_sub_abs #1 +33:int:10:char*:"7":int:10:char*:"5":int:10:char*:"2":int:0 + +Base test mbedtls_mpi_sub_abs #2 +33:int:10:char*:"-7":int:10:char*:"-5":int:10:char*:"2":int:0 + +Base test mbedtls_mpi_sub_abs #3 +33:int:10:char*:"-7":int:10:char*:"5":int:10:char*:"2":int:0 + +Base test mbedtls_mpi_sub_abs #4 +33:int:10:char*:"7":int:10:char*:"-5":int:10:char*:"2":int:0 + +Test mbedtls_mpi_sub_abs #1 +33:int:16:char*:"FFFFFFFFFF":int:16:char*:"01":int:16:char*:"FFFFFFFFFE":int:0 + +Test mbedtls_mpi_sub_abs #2 +33:int:16:char*:"FFFFFFFFF0":int:16:char*:"01":int:16:char*:"FFFFFFFFEF":int:0 + +Test mbedtls_mpi_sub_abs #3 +33:int:16:char*:"FF00000000":int:16:char*:"0F00000000":int:16:char*:"F000000000":int:0 + +Test mbedtls_mpi_sub_abs #4 +33:int:16:char*:"FF00000000":int:16:char*:"0F00000001":int:16:char*:"EFFFFFFFFF":int:0 + +Base test mbedtls_mpi_sub_mpi #1 (Test with negative result) +32:int:10:char*:"5":int:10:char*:"7":int:10:char*:"-2" + +Base test mbedtls_mpi_sub_mpi #2 (Test with negative inputs) +32:int:10:char*:"-5":int:10:char*:"-7":int:10:char*:"2" + +Base test mbedtls_mpi_sub_mpi #3 (Test with negative base) +32:int:10:char*:"-5":int:10:char*:"7":int:10:char*:"-12" + +Base test mbedtls_mpi_sub_mpi #4 (Test with negative subtraction) +32:int:10:char*:"5":int:10:char*:"-7":int:10:char*:"12" + +Test mbedtls_mpi_sub_mpi #1 +32:int:10:char*:"531872289054204184185084734375133399408303613982130856645299464930952178606045848877129147820387996428175564228204785846141207532462936339834139412401975338705794646595487324365194792822189473092273993580587964571659678084484152603881094176995594813302284232006001752128168901293560051833646881436219":int:10:char*:"203956878356401977405765866929034577280193993314348263094772646453283062722701277632936616063144088173312372882677123879538709400158306567338328279154499698366071906766440037074217117805690872792848149112022286332144876183376326512083574821647933992961249917319836219304274280243803104015000563790123":int:10:char*:"327915410697802206779318867446098822128109620667782593550526818477669115883344571244192531757243908254863191345527661966602498132304629772495811133247475640339722739829047287290977675016498600299425844468565678239514801901107826091797519355347660820341034314686165532823894621049756947818646317646096" + +Test mbedtls_mpi_sub_mpi #2 (Test for negative result) +32:int:10:char*:"643808006803554439230129854961492699151386107534013432918073439524138264842370630061369715394739134090922937332590384720397133335969549256322620979036686633213903952966175107096769180017646161851573147596390153":int:10:char*:"56125680981752282333498088313568935051383833838594899821664631784577337171193624243181360054669678410455329112434552942717084003541384594864129940145043086760031292483340068923506115878221189886491132772739661669044958531131327771":int:10:char*:"-56125680981752282332854280306765380612153703983633407122513245677043323738275550803657221789827307780393959397039813808626161066208794210143732806809073537503708671504303382290292211925255014779394363592722015507193385383534937618" + +Test mbedtls_mpi_sub_int #1 +34:int:10:char*:"2039568783564019774057658669290345772801939933143482630947726464532830627227012776329":exp:10:int:10:char*:"2039568783564019774057658669290345772801939933143482630947726464532830627227022647561" + +Test mbedtls_mpi_sub_int #2 +34:int:10:char*:"2039568783564019774057658669290345772801939933143482630947726464532830627227012776329":int:9871232:int:10:char*:"2039568783564019774057658669290345772801939933143482630947726464532830627227002905097" + +Test mbedtls_mpi_shift_l #1 +47:int:10:char*:"64":int:1:int:10:char*:"128" + +Test mbedtls_mpi_shift_l #2 +47:int:10:char*:"658385546911733550164516088405238961461880256029834598831972039469421755117818013653494814438931957316403111689187691446941406788869098983929874080332195117465344344350008880118042764943201875870917468833709791733282363323948005998269792207":int:37:int:10:char*:"90487820548639020691922304619723076305400961610119884872723190678642804168382367856686134531865643066983017249846286450251272364365605022750900439437595355052945035915579216557330505438734955340526145476988250171181404966718289259743378883640981192704" + +Test mbedtls_mpi_shift_r #1 +48:int:10:char*:"128":int:1:int:10:char*:"64" + +Test mbedtls_mpi_shift_r #2 +48:int:10:char*:"120815570979701484704906977000760567182871429114712069861589084706550626575967516787438008593490722779337547394120718248995900363209947025063336882559539208430319216688889117222633155838468458047056355241515415159736436403445579777425189969":int:45:int:10:char*:"3433785053053426415343295076376096153094051405637175942660777670498379921354157795219578264137985649407981651226029903483433269093721578004287291678324982297860947730012217028349628999378309630601971640587504883789518896817457" + +Test mbedtls_mpi_shift_r #4 [#1] +48:int:16:char*:"FFFFFFFFFFFFFFFF":int:63:int:16:char*:"01" + +Test mbedtls_mpi_shift_r #4 [#2] +48:int:16:char*:"FFFFFFFFFFFFFFFF":int:64:int:16:char*:"00" + +Test mbedtls_mpi_shift_r #6 +48:int:16:char*:"FFFFFFFFFFFFFFFF":int:65:int:16:char*:"00" + +Test mbedtls_mpi_shift_r #7 +48:int:16:char*:"FFFFFFFFFFFFFFFF":int:128:int:16:char*:"00" + +Base test mbedtls_mpi_mul_mpi #1 +35:int:10:char*:"5":int:10:char*:"7":int:10:char*:"35" + +Base test mbedtls_mpi_mul_mpi #2 +35:int:10:char*:"-5":int:10:char*:"7":int:10:char*:"-35" + +Base test mbedtls_mpi_mul_mpi #3 +35:int:10:char*:"5":int:10:char*:"-7":int:10:char*:"-35" + +Base test mbedtls_mpi_mul_mpi #4 +35:int:10:char*:"-5":int:10:char*:"-7":int:10:char*:"35" + +Test mbedtls_mpi_mul_mpi #1 +35:int:10:char*:"28911710017320205966167820725313234361535259163045867986277478145081076845846493521348693253530011243988160148063424837895971948244167867236923919506962312185829914482993478947657472351461336729641485069323635424692930278888923450060546465883490944265147851036817433970984747733020522259537":int:10:char*:"16471581891701794764704009719057349996270239948993452268812975037240586099924712715366967486587417803753916334331355573776945238871512026832810626226164346328807407669366029926221415383560814338828449642265377822759768011406757061063524768140567867350208554439342320410551341675119078050953":int:10:char*:"476221599179424887669515829231223263939342135681791605842540429321038144633323941248706405375723482912535192363845116154236465184147599697841273424891410002781967962186252583311115708128167171262206919514587899883547279647025952837516324649656913580411611297312678955801899536937577476819667861053063432906071315727948826276092545739432005962781562403795455162483159362585281248265005441715080197800335757871588045959754547836825977169125866324128449699877076762316768127816074587766799018626179199776188490087103869164122906791440101822594139648973454716256383294690817576188761" + +Test mbedtls_mpi_mul_int #1 +36:int:10:char*:"2039568783564019774057658669290345772801939933143482630947726464532830627227012776329":int:9871232:int:10:char*:"20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328":char*:"==" + +Test mbedtls_mpi_mul_int #2 (Unsigned, thus failure) +36:int:10:char*:"2039568783564019774057658669290345772801939933143482630947726464532830627227012776329":exp:10:int:10:char*:"-20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328":char*:"!=" + +Test mbedtls_mpi_mul_int #3 +36:int:10:char*:"-2039568783564019774057658669290345772801939933143482630947726464532830627227012776329":int:9871232:int:10:char*:"-20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328":char*:"==" + +Test mbedtls_mpi_mul_int #4 (Unsigned, thus failure) +36:int:10:char*:"-2039568783564019774057658669290345772801939933143482630947726464532830627227012776329":exp:10:int:10:char*:"20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328":char*:"!=" + +Base test mbedtls_mpi_div_mpi #1 +37:int:10:char*:"1000":int:10:char*:"13":int:10:char*:"76":int:10:char*:"12":int:0 + +Base test mbedtls_mpi_div_mpi #2 (Divide by zero) +37:int:10:char*:"1000":int:10:char*:"0":int:10:char*:"1":int:10:char*:"1":exp:12 + +Base test mbedtls_mpi_div_mpi #3 +37:int:10:char*:"1000":int:10:char*:"-13":int:10:char*:"-76":int:10:char*:"12":int:0 + +Test mbedtls_mpi_div_mpi #1 +37:int:10:char*:"20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328":int:10:char*:"34":int:10:char*:"592148724779947824773845002981655249516095268533053127589864347174804198178334111238460803":int:10:char*:"26":int:0 + +Test mbedtls_mpi_div_mpi #2 +37:int:10:char*:"476221599179424887669515829231223263939342135681791605842540429321038144633323941248706405375723482912535192363845116154236465184147599697841273424891410002781967962186252583311115708128167171262206919514587899883547279647025952837516324649656913580411611297312678955801899536937577476819667861053063432906071315727948826276092545739432005962781562403795455162483159362585281248265005441715080197800335757871588045959754547836825977169125866324128449699877076762316768127816074587766799018626179199776188490087103869164122906791440101822594139648973454716256383294690817576188762":int:10:char*:"28911710017320205966167820725313234361535259163045867986277478145081076845846493521348693253530011243988160148063424837895971948244167867236923919506962312185829914482993478947657472351461336729641485069323635424692930278888923450060546465883490944265147851036817433970984747733020522259537":int:10:char*:"16471581891701794764704009719057349996270239948993452268812975037240586099924712715366967486587417803753916334331355573776945238871512026832810626226164346328807407669366029926221415383560814338828449642265377822759768011406757061063524768140567867350208554439342320410551341675119078050953":int:10:char*:"1":int:0 + +Test mbedtls_mpi_div_mpi #3 +37:int:10:char*:"1000":int:10:char*:"7":int:10:char*:"142":int:10:char*:"6":int:0 + +Test mbedtls_mpi_div_mpi #4 +37:int:10:char*:"777":int:10:char*:"7":int:10:char*:"111":int:10:char*:"0":int:0 + +Base test mbedtls_mpi_div_int #1 +38:int:10:char*:"1000":int:13:int:10:char*:"76":int:10:char*:"12":int:0 + +Base test mbedtls_mpi_div_int #2 (Divide by zero) +38:int:10:char*:"1000":int:0:int:10:char*:"1":int:10:char*:"1":exp:12 + +Base test mbedtls_mpi_div_int #3 +38:int:10:char*:"1000":exp:13:int:10:char*:"-76":int:10:char*:"12":int:0 + +Test mbedtls_mpi_div_int #1 +38:int:10:char*:"20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328":int:34:int:10:char*:"592148724779947824773845002981655249516095268533053127589864347174804198178334111238460803":int:10:char*:"26":int:0 + +Test mbedtls_mpi_div_int #2 +38:int:10:char*:"20133056642518226042310730101376278483547239130123806338055387803943342738063359782107667328":exp:14:int:10:char*:"-592148724779947824773845002981655249516095268533053127589864347174804198178334111238460803":int:10:char*:"26":int:0 + +Base test mbedtls_mpi_mod_mpi #1 +39:int:10:char*:"1000":int:10:char*:"13":int:10:char*:"12":int:0 + +Base test mbedtls_mpi_mod_mpi #2 (Divide by zero) +39:int:10:char*:"1000":int:10:char*:"0":int:10:char*:"0":exp:12 + +Base test mbedtls_mpi_mod_mpi #3 +39:int:10:char*:"-1000":int:10:char*:"13":int:10:char*:"1":int:0 + +Base test mbedtls_mpi_mod_mpi #4 (Negative modulo) +39:int:10:char*:"1000":int:10:char*:"-13":int:10:char*:"-1":exp:11 + +Base test mbedtls_mpi_mod_mpi #5 (Negative modulo) +39:int:10:char*:"-1000":int:10:char*:"-13":int:10:char*:"-12":exp:11 + +Base test mbedtls_mpi_mod_int #1 +40:int:10:char*:"1000":int:13:int:12:int:0 + +Base test mbedtls_mpi_mod_int #2 (Divide by zero) +40:int:10:char*:"1000":int:0:int:0:exp:12 + +Base test mbedtls_mpi_mod_int #3 +40:int:10:char*:"-1000":int:13:int:1:int:0 + +Base test mbedtls_mpi_mod_int #4 (Negative modulo) +40:int:10:char*:"1000":exp:13:int:0:exp:11 + +Base test mbedtls_mpi_mod_int #5 (Negative modulo) +40:int:10:char*:"-1000":exp:13:int:0:exp:11 + +Base test mbedtls_mpi_mod_int #6 (By 1) +40:int:10:char*:"1000":int:1:int:0:int:0 + +Base test mbedtls_mpi_mod_int #7 (By 2) +40:int:10:char*:"1001":int:2:int:1:int:0 + +Base test mbedtls_mpi_mod_int #8 (By 2) +40:int:10:char*:"1000":int:2:int:0:int:0 + +Base test mbedtls_mpi_exp_mod #1 +41:int:10:char*:"23":int:10:char*:"13":int:10:char*:"29":int:10:char*:"":int:10:char*:"24":int:0 + +Base test mbedtls_mpi_exp_mod #2 (Even N) +41:int:10:char*:"23":int:10:char*:"13":int:10:char*:"30":int:10:char*:"":int:10:char*:"0":exp:1 + +Base test mbedtls_mpi_exp_mod #3 (Negative N) +41:int:10:char*:"23":int:10:char*:"13":int:10:char*:"-29":int:10:char*:"":int:10:char*:"0":exp:1 + +Base test mbedtls_mpi_exp_mod #4 (Negative base) +41:int:10:char*:"-23":int:10:char*:"13":int:10:char*:"29":int:10:char*:"":int:10:char*:"5":int:0 + +Base test mbedtls_mpi_exp_mod #5 (Negative exponent) +41:int:10:char*:"23":int:10:char*:"-13":int:10:char*:"29":int:10:char*:"":int:10:char*:"0":exp:1 + +Base test mbedtls_mpi_exp_mod #6 (Negative base + exponent) +41:int:10:char*:"-23":int:10:char*:"-13":int:10:char*:"29":int:10:char*:"":int:10:char*:"0":exp:1 + +Test mbedtls_mpi_exp_mod: MAX_SIZE exponent +42:int:2:exp:15:int:10:int:10:char*:"":int:0 + +Test mbedtls_mpi_exp_mod: MAX_SIZE + 1 exponent +42:int:2:exp:16:int:10:int:10:char*:"":exp:1 + +Test mbedtls_mpi_exp_mod: MAX_SIZE modulus +42:int:2:int:2:exp:15:int:10:char*:"":int:0 + +Test mbedtls_mpi_exp_mod: MAX_SIZE + 1 modulus +42:int:2:int:2:exp:16:int:10:char*:"":exp:1 + +Test mbedtls_mpi_exp_mod: MAX_SIZE exponent and modulus +42:int:2:exp:15:exp:15:int:10:char*:"":int:0 + +Test mbedtls_mpi_exp_mod: MAX_SIZE + 1 exponent and modulus +42:int:2:exp:16:exp:16:int:10:char*:"":exp:1 + +Test mbedtls_mpi_exp_mod #1 +depends_on:0 +41:int:10:char*:"433019240910377478217373572959560109819648647016096560523769010881172869083338285573756574557395862965095016483867813043663981946477698466501451832407592327356331263124555137732393938242285782144928753919588632679050799198937132922145084847":int:10:char*:"5781538327977828897150909166778407659250458379645823062042492461576758526757490910073628008613977550546382774775570888130029763571528699574717583228939535960234464230882573615930384979100379102915657483866755371559811718767760594919456971354184113721":int:10:char*:"583137007797276923956891216216022144052044091311388601652961409557516421612874571554415606746479105795833145583959622117418531166391184939066520869800857530421873250114773204354963864729386957427276448683092491947566992077136553066273207777134303397724679138833126700957":int:10:char*:"":int:10:char*:"114597449276684355144920670007147953232659436380163461553186940113929777196018164149703566472936578890991049344459204199888254907113495794730452699842273939581048142004834330369483813876618772578869083248061616444392091693787039636316845512292127097865026290173004860736":int:0 + +Test mbedtls_mpi_exp_mod (Negative base) [#1] +41:int:10:char*:"-10000000000":int:10:char*:"10000000000":int:10:char*:"99999":int:10:char*:"":int:10:char*:"1":int:0 + +Test mbedtls_mpi_exp_mod (Negative base) [#2] +depends_on:0 +41:int:16:char*:"-9f13012cd92aa72fb86ac8879d2fde4f7fd661aaae43a00971f081cc60ca277059d5c37e89652e2af2585d281d66ef6a9d38a117e9608e9e7574cd142dc55278838a2161dd56db9470d4c1da2d5df15a908ee2eb886aaa890f23be16de59386663a12f1afbb325431a3e835e3fd89b98b96a6f77382f458ef9a37e1f84a03045c8676ab55291a94c2228ea15448ee96b626b998":int:16:char*:"40a54d1b9e86789f06d9607fb158672d64867665c73ee9abb545fc7a785634b354c7bae5b962ce8040cf45f2c1f3d3659b2ee5ede17534c8fc2ec85c815e8df1fe7048d12c90ee31b88a68a081f17f0d8ce5f4030521e9400083bcea73a429031d4ca7949c2000d597088e0c39a6014d8bf962b73bb2e8083bd0390a4e00b9b3":int:16:char*:"eeaf0ab9adb38dd69c33f80afa8fc5e86072618775ff3c0b9ea2314c9c256576d674df7496ea81d3383b4813d692c6e0e0d5d8e250b98be48e495c1d6089dad15dc7d7b46154d6b6ce8ef4ad69b15d4982559b297bcf1885c529f566660e57ec68edbc3c05726cc02fd4cbf4976eaa9afd5138fe8376435b9fc61d2fc0eb06e3":int:16:char*:"":int:16:char*:"21acc7199e1b90f9b4844ffe12c19f00ec548c5d32b21c647d48b6015d8eb9ec9db05b4f3d44db4227a2b5659c1a7cceb9d5fa8fa60376047953ce7397d90aaeb7465e14e820734f84aa52ad0fc66701bcbb991d57715806a11531268e1e83dd48288c72b424a6287e9ce4e5cc4db0dd67614aecc23b0124a5776d36e5c89483":int:0 + +Base test GCD #1 +14:int:10:char*:"693":int:10:char*:"609":int:10:char*:"21" + +Base test GCD #2 +14:int:10:char*:"1764":int:10:char*:"868":int:10:char*:"28" + +Base test GCD #3 +14:int:10:char*:"768454923":int:10:char*:"542167814":int:10:char*:"1" + +Test GCD #1 +14:int:10:char*:"433019240910377478217373572959560109819648647016096560523769010881172869083338285573756574557395862965095016483867813043663981946477698466501451832407592327356331263124555137732393938242285782144928753919588632679050799198937132922145084847":int:10:char*:"5781538327977828897150909166778407659250458379645823062042492461576758526757490910073628008613977550546382774775570888130029763571528699574717583228939535960234464230882573615930384979100379102915657483866755371559811718767760594919456971354184113721":int:10:char*:"1" + +Base test mbedtls_mpi_inv_mod #1 +43:int:10:char*:"3":int:10:char*:"11":int:10:char*:"4":int:0 + +Base test mbedtls_mpi_inv_mod #2 +43:int:10:char*:"3":int:10:char*:"0":int:10:char*:"0":exp:1 + +Base test mbedtls_mpi_inv_mod #3 +43:int:10:char*:"3":int:10:char*:"-11":int:10:char*:"4":exp:1 + +Base test mbedtls_mpi_inv_mod #4 +43:int:10:char*:"2":int:10:char*:"4":int:10:char*:"0":exp:17 + +Base test mbedtls_mpi_inv_mod #5 +43:int:10:char*:"3":int:10:char*:"1":int:10:char*:"0":exp:1 + +Test mbedtls_mpi_inv_mod #1 +43:int:16:char*:"aa4df5cb14b4c31237f98bd1faf527c283c2d0f3eec89718664ba33f9762907c":int:16:char*:"fffbbd660b94412ae61ead9c2906a344116e316a256fd387874c6c675b1d587d":int:16:char*:"8d6a5c1d7adeae3e94b9bcd2c47e0d46e778bc8804a2cc25c02d775dc3d05b0c":int:0 + +Base test mbedtls_mpi_is_prime #1 +depends_on:1 +44:int:10:char*:"0":exp:17 + +Base test mbedtls_mpi_is_prime #2 +depends_on:1 +44:int:10:char*:"1":exp:17 + +Base test mbedtls_mpi_is_prime #3 +depends_on:1 +44:int:10:char*:"2":int:0 + +Base test mbedtls_mpi_is_prime #4 +depends_on:1 +44:int:10:char*:"3":int:0 + +Base test mbedtls_mpi_is_prime #5 +depends_on:1 +44:int:10:char*:"4":exp:17 + +Base test mbedtls_mpi_is_prime #6 +depends_on:1 +44:int:10:char*:"5":int:0 + +Base test mbedtls_mpi_is_prime #7 +depends_on:1 +44:int:10:char*:"27":exp:17 + +Base test mbedtls_mpi_is_prime #8 +depends_on:1 +44:int:10:char*:"47":int:0 + +Test mbedtls_mpi_is_prime #1a +depends_on:1 +44:int:10:char*:"83726728883146151979668243326097049289208482987685965276439157162337476477581":exp:17 + +Test mbedtls_mpi_is_prime #1b +depends_on:1 +44:int:10:char*:"81248637410584921454869308488899267096530643632730258201256092582281263244641":exp:17 + +Test mbedtls_mpi_is_prime #2a +depends_on:1 +44:int:10:char*:"827131507221654563937832686696200995595835694437983658840870036586124168186967796809117749047430768825822857042432722828096779098498192459819306321073968735177531164565305635281198148032612029767584644305912099":int:0 + +Test mbedtls_mpi_is_prime #2b +depends_on:1 +44:int:10:char*:"827131507221654563937832686696200995595835694437983658840870036586124168186967796809117749047430768825822857042432722828096779098498192459819306321073968735177531164565305635281198148032612029767584644305912001":exp:17 + +Test mbedtls_mpi_is_prime #3 +depends_on:1 +44:int:10:char*:"2833419889721787128217599":int:0 + +Test mbedtls_mpi_is_prime #4 +depends_on:1 +44:int:10:char*:"195845982777569926302400511":int:0 + +Test mbedtls_mpi_is_prime #5 [#1] +depends_on:1 +44:int:10:char*:"4776913109852041418248056622882488319":int:0 + +Test mbedtls_mpi_is_prime #5 [#2] +depends_on:1 +44:int:10:char*:"768614336404564651":int:0 + +Test mbedtls_mpi_is_prime #6 +depends_on:1 +44:int:10:char*:"201487636602438195784363":int:0 + +Test mbedtls_mpi_is_prime #7 +depends_on:1 +44:int:10:char*:"845100400152152934331135470251":int:0 + +Test mbedtls_mpi_is_prime #8 +depends_on:1 +44:int:10:char*:"56713727820156410577229101238628035243":int:0 + +Test mbedtls_mpi_is_prime #9 +depends_on:1 +44:int:10:char*:"203956878356401977405765866929034577280193993314348263094772646453283062722701277632936616063144088173312372882677123879538709400158306567338328279154499698366071906766440037074217117805690872792848149112022286332144876183376326512083574821647933992961249917319836219304274280243803104015000563790123":int:0 + +Test mbedtls_mpi_is_prime #10 +depends_on:1 +44:int:10:char*:"531872289054204184185084734375133399408303613982130856645299464930952178606045848877129147820387996428175564228204785846141207532462936339834139412401975338705794646595487324365194792822189473092273993580587964571659678084484152603881094176995594813302284232006001752128168901293560051833646881436219":int:0 + +Test mbedtls_mpi_is_prime #11 +depends_on:1 +44:int:10:char*:"319705304701141539155720137200974664666792526059405792539680974929469783512821793995613718943171723765238853752439032835985158829038528214925658918372196742089464683960239919950882355844766055365179937610326127675178857306260955550407044463370239890187189750909036833976197804646589380690779463976173":int:0 + +Test mbedtls_mpi_is_prime #12 +depends_on:1 +44:int:10:char*:"200603822195324642393516294012917598972967449320074999667103434371470616000652036570009912021332527788252300901905236578801044680456930305350440933538867383130165841118050781326291059830545891570648243241795871":int:0 + +Test mbedtls_mpi_is_prime #13 +depends_on:1 +44:int:10:char*:"827131507221654563937832686696200995595835694437983658840870036586124168186967796809117749047430768825822857042432722828096779098498192459819306321073968735177531164565305635281198148032612029767584644305912099":int:0 + +Test mbedtls_mpi_is_prime #14 +depends_on:1 +44:int:10:char*:"964274047248418797145090983157197980855078966882276492572788532954904112655338439361306213898569516593744267391754033306465125919199692703323878557833023573312685002670662846477592597659826113460619815244721311":int:0 + +Test mbedtls_mpi_is_prime #15 +depends_on:1 +44:int:10:char*:"170141183460469231731687303715884105727":int:0 + +Test mbedtls_mpi_is_prime #16 +depends_on:1 +44:int:10:char*:"2147483647":int:0 + +Test mbedtls_mpi_is_prime #17 +depends_on:1 +44:int:10:char*:"961748941":int:0 + +Test mbedtls_mpi_is_prime #18 +depends_on:1 +44:int:10:char*:"179424691":int:0 + +Test mbedtls_mpi_is_prime #19 +depends_on:1 +44:int:10:char*:"32452867":int:0 + +Test mbedtls_mpi_is_prime #20 +depends_on:1 +44:int:10:char*:"49979687":int:0 + +Test mbedtls_mpi_is_prime_det (4 non-witnesses) +depends_on:1 +45:hex:"043BD64BA10B11DA83FBD296B04BCA9E0552FAF6E09CAC74E2D7E735ED0DB09FC47ED76145644203EE0C826013BC602F560BCDAAED557D04683859A65D659FF828A245A2C5B1AC41E01E4669A525A45E23AF":hex:"040EA852F7935ACCECC0E87B845281F047D10DC9AAFEF990AF9D3D66770DA30B0C5B5E03EEA8C0CB79B936FE0BB8EE5389EC1D34EB16C58AA3F2E11AF084160CDF6400BE1CC179867AB074866952D9F34EE7042D27F960E715A97FCB93F3182247D0A6AE51BD21CC2F6B0651F9E572C5FB86F3137053FA85FD7A51816D69B3A53A5A438C17754836D04E98CA240B901F828332F2D72D88C497DA45F533F99A6E53EDEA6B0424EC8951B048FA9A80134B37D0A67014597934E3CFC52C5A4DD4751ADF8D66FC79E84E2A3148C4B15C17E12CB659390FD275F39A331FFC80EC699BC3F6FAB868E30E9B14575FCDAB6FAED01E00112DD28704177E09C335AD43A696FEA761E8DF3B0663277A5C3637F9060CB5E5654F72E9A6B0F369E660AD4CF7ABF4195493545B367BD55271CD4BB7D9C15D3F508FE8F7409C2126FC8E73B43A67CD4EFB21E9F15DBF040A2A8D5F5ED75CEAC12B595C0051F3EC9D5A58ACE82A9506E64F780E9836728260FFE1BFD73E8A9869E3D46A35A856D3028F7FEAB9F4F1A04449AEDC80017EE1014080D87F0B50C8EF255324CD89F7D039":int:82:int:5 + +Test mbedtls_mpi_is_prime_det (39 non-witnesses) +depends_on:1 +45:hex:"155102B67930FBE8858DF6C0642D77D419A7B7968E622CC7500F3E3F2C5168368C50E0083187":hex:"119B3E2C721834D83416239B04447AA18AE0163E61DCAE97054563D79E094A6FA4485BD6A0501445BF57FE9C058926CDB862E04CC1A95D79D61D9AB3466857A53E04F8D7470C9C86649B226A13DDC534E18DFD5C22FAEA317CA4D4960F18457FD6D2FFB5F3273F74C89980DC774590D8D30D1159CA81999ED94A042D67DA68C82616AD46C2C88288A8EBD0B37AC7C152D9522CA4544642AD1210F6B642FEBF43563FA872B0DEFAFC69D0B6570E8FEA9570D0AADCFA9B06CC8BFD62CEDC221541210EEEF9762448C6D49F26AA767A4D66CB168589E0201923015314E6CD4A480E5936E7CF145F73A564C5B782635B3AFC3028E2632C5D3458224A7C9E8BA1876E8F690463C878292D3DC011E9640331E7F7621F2B5E0F6713DD8C9D6767521C4BA880DA8D11C67753C8493D2C4C4F1443147550D0B25B7FAD04EAFA9F8AA60974C1365C8A794CFEECEB4279B1150909A97E5A7A10B5D91186CA5B25A612036631FE73529C8CFAE51E76FB704A772DE5320EFC1212E7A399B1FEBF57D014AF9129DFF5D2C5DFBBEEAC55F360CF6D22FA90B8E2E9AD0C71AB6495A9452A58D653B8CC26128C66B43EFBA6E39AEC5717A1A3C2AE1449FCABAFE1180B159DA55190CD81A3D9E8D798647E11B827F0A057D6DA5AAD78AB5112EE65E10E8B8B369BA24E1B8AD2CD8548C497016C07A143DE1232F8059BE303572456FA92E76A0F23D1340629228B7D27C02D3833A72745B91A3DBEB5E081117A9F19597F00E4277B414FAEA8C8CEB895C37F956A5A22F8D7A10ADA50B22BAB312504904511AA0EFDD4D3BF20ECB17E8A684564FFB5BBD5E22C429F9A75A4FB4AE468FE7612ED53C7A11212E7EF3435CC9CA6E7DB167B8CCE2BECF35F89013F8F876223C77FA81570970858663C6E32B91080AA47F9C90177F51E6FD7747B910C9489C7B6ACB070996198AD9A40A69711274159210A9A12DBAAA4FB4632446066AB70D735DC95F7C2BCE517E88C064D728DE82B1B043DF4AEE0EFF5131120A4E5B9B4180EB6F6B8A0D1491ABDA069058A9966B1A517D8E7B4997DC52A1E698FD79E271153DF1913FE6787A5D99DE69F39C3F22D26DC731CFBB33FF5C267D85D7A3DAE8E1C87E1DB2F1236212EF1942EA756967FB3D07D629E59EA4034D9A9B5E270DD4A31C8A3DFDA99C1094B5537132C196DA2AEAF5253A019B9AF25B5DCB0D4DD75C7C9C353DA9DAABFB23959A5455312E7E1C21268C1BC14E83DCFDF50C27FD3E8B4EDC04C5F3CB5FCFFF2B57151E1B1EE1A6456DC006BC43E1158674AA4CF7D146DE4A57103BE43ED130C8007294ED2418C7A2B769A7D20EBB5A8367A77B313F81BB119B9954305FF160FF83EED7F808EE6D340A5CCC000CF81AA497D315D350CCE4E86A31456B8AA85B677491FC662933DFA55EB5BFF64B8D85430D676A85D1CAFAFF383E68C4E6C22A51063739EC03FC58C36C07C44E54828BE2152B2E9AFB0F179B157D09B64C147B524BB5424BB1914419424D9100D06EDCFC718F4DF3D562E9E16C446663F35273CA7BC5426B868A80C8D415C9A12A1619CDB7CDB5BEBC70313150BDF8C3AB26B809FE62D28E798EF1EF98C410A2DA0A9071F82154AC569078B0E647E2C085D1D907E634453442803D0492D3D0C78CACB762020C0E589C8B0981321EA2771305FD0413F3B2963FCE9A232F6641DB7E12ADC009A032063C41756E5E19E5711DE12711F07AFE7545B4D83F3EFD7BFD0435297C89DF3D4AF96EBE2CE8D64B93E36EA5D7E5A0492151D0CAEE7449A7D35E1A3C83E22C3B35162C073CC3B1CF76FBDEE84270721FC042EAAEB7325110181415E2031CFB7462F15111291CDAC0560FF9F4C7341F2FA261B97CEF348D074AA2EB4DB153FE6B1410519DA4213B611999868F3B867A2B6D758D333C4989DE80782683CA26ECDE373C71524F01B76349CE8A07A5EBECBB42259CF970DDA756EC996B189FEA045FEE45F23D476960913106ECA2510B8517AA75D56FA4152B2BDDC212014E5D07FD964D6EE532F0616DF74E104659955132331FABF2D2AD265E71C93C648A956FA0A3DB21FF103D516527F2DA0E870340B61EE8A8ED913B60605EB5A67B834D0FC90564386012585609870FEF6530B3E3C037B55506F0B5694F6B0FC":int:38:int:40 + +Test mbedtls_mpi_gen_prime (Too small) +depends_on:1 +46:int:2:int:0:exp:1 + +Test mbedtls_mpi_gen_prime (OK, minimum size) +depends_on:1 +46:int:3:int:0:int:0 + +Test mbedtls_mpi_gen_prime (corner case limb size -1 bits) +depends_on:1 +46:int:63:int:0:int:0 + +Test mbedtls_mpi_gen_prime (corner case limb size) +depends_on:1 +46:int:64:int:0:int:0 + +Test mbedtls_mpi_gen_prime (corner case limb size +1 bits) +depends_on:1 +46:int:65:int:0:int:0 + +Test mbedtls_mpi_gen_prime (Larger) +depends_on:1 +46:int:128:int:0:int:0 + +Test mbedtls_mpi_gen_prime (Safe) +depends_on:1 +46:int:128:exp:18:int:0 + +Test mbedtls_mpi_gen_prime (Safe with lower error rate) +depends_on:1 +46:int:128:exp:19:int:0 + +Test mbedtls_mpi_gen_prime standard RSA #1 (lower error rate) +depends_on:1 +46:int:1024:exp:20:int:0 + +Test mbedtls_mpi_gen_prime standard RSA #2 (lower error rate) +depends_on:1 +46:int:1536:exp:20:int:0 + +Test bit getting (Value bit 25) +10:int:10:char*:"49979687":int:25:int:1 + +Test bit getting (Larger but same limb) +10:int:10:char*:"49979687":int:26:int:0 + +Test bit getting (Larger and non-existing limb) +10:int:10:char*:"49979687":int:500:int:0 + +Test bit getting (Value bit 24) +10:int:10:char*:"49979687":int:24:int:0 + +Test bit getting (Value bit 23) +10:int:10:char*:"49979687":int:23:int:1 + +Test bit set (Change existing value with a 1) +11:int:10:char*:"49979687":int:24:int:1:int:10:char*:"66756903":int:0 + +Test bit set (Change existing value with a 0) +11:int:10:char*:"49979687":int:25:int:0:int:10:char*:"16425255":int:0 + +Test bit set (Add above existing limbs with a 0) +11:int:10:char*:"49979687":int:80:int:0:int:10:char*:"49979687":int:0 + +Test bit set (Add above existing limbs with a 1) +11:int:10:char*:"49979687":int:80:int:1:int:10:char*:"1208925819614629224685863":int:0 + +Test bit set (Bit index larger than 31 with a 0) +11:int:16:char*:"FFFFFFFFFFFFFFFF":int:32:int:0:int:16:char*:"FFFFFFFEFFFFFFFF":int:0 + +Test bit set (Bit index larger than 31 with a 1) +11:int:16:char*:"00":int:32:int:1:int:16:char*:"0100000000":int:0 + +Test bit set (Invalid bit value) +11:int:16:char*:"00":int:5:int:2:int:16:char*:"00":exp:1 + +Fill random: 0 bytes +49:int:0:int:0:int:0 + +Fill random: 1 byte, good +49:int:1:int:1:int:0 + +Fill random: 2 bytes, good, no leading zero +49:int:2:int:2:int:0 + +Fill random: 2 bytes, good, 1 leading zero +49:int:2:int:256:int:0 + +Fill random: MAX_SIZE - 7, good +49:exp:21:exp:21:int:0 + +Fill random: MAX_SIZE, good +49:exp:15:exp:15:int:0 + +Fill random: 1 byte, RNG failure +49:int:1:int:0:exp:22 + +Fill random: 2 bytes, RNG failure after 1 byte +49:int:2:int:1:exp:22 + +Fill random: 4 bytes, RNG failure after 3 bytes +49:int:4:int:3:exp:22 + +Fill random: 8 bytes, RNG failure after 7 bytes +49:int:8:int:7:exp:22 + +Fill random: 16 bytes, RNG failure after 1 bytes +49:int:16:int:1:exp:22 + +Fill random: 16 bytes, RNG failure after 8 bytes +49:int:16:int:8:exp:22 + +Fill random: 16 bytes, RNG failure after 15 bytes +49:int:16:int:15:exp:22 + +Fill random: MAX_SIZE bytes, RNG failure after MAX_SIZE-1 bytes +49:exp:15:exp:23:exp:22 + +MPI Selftest +depends_on:2 +50 + diff --git a/third_party/mbedtls/test/test_suite_net.c b/third_party/mbedtls/test/test_suite_net.c new file mode 100644 index 000000000..47016e6a0 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_net.c @@ -0,0 +1,402 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_net.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_net.function + * Test suite data : suites/test_suite_net.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_NET_C) + + +#if defined(unix) || defined(__unix__) || defined(__unix) || \ + defined(__APPLE__) || defined(__QNXNTO__) || \ + defined(__HAIKU__) || defined(__midipix__) +#define MBEDTLS_PLATFORM_IS_UNIXLIKE +#endif + +#if defined(MBEDTLS_PLATFORM_IS_UNIXLIKE) +#endif + + +#if defined(MBEDTLS_PLATFORM_IS_UNIXLIKE) +/** Open a file on the given file descriptor. + * + * This is disruptive if there is already something open on that descriptor. + * Caller beware. + * + * \param ctx An initialized, but unopened socket context. + * On success, it refers to the opened file (\p wanted_fd). + * \param wanted_fd The desired file descriptor. + * + * \return \c 0 on succes, a negative error code on error. + */ +static int open_file_on_fd( mbedtls_net_context *ctx, int wanted_fd ) +{ + int got_fd = open( "/dev/null", O_RDONLY ); + TEST_ASSERT( got_fd >= 0 ); + if( got_fd != wanted_fd ) + { + TEST_ASSERT( dup2( got_fd, wanted_fd ) >= 0 ); + TEST_ASSERT( close( got_fd ) >= 0 ); + } + ctx->fd = wanted_fd; + return( 0 ); +exit: + return( -1 ); +} +#endif /* MBEDTLS_PLATFORM_IS_UNIXLIKE */ + +void test_context_init_free( int reinit ) +{ + mbedtls_net_context ctx; + + mbedtls_net_init( &ctx ); + mbedtls_net_free( &ctx ); + + if( reinit ) + mbedtls_net_init( &ctx ); + mbedtls_net_free( &ctx ); + + /* This test case always succeeds, functionally speaking. A plausible + * bug might trigger an invalid pointer dereference or a memory leak. */ + goto exit; +exit: + ; +} + +void test_context_init_free_wrapper( void ** params ) +{ + + test_context_init_free( *( (int *) params[0] ) ); +} +#if defined(MBEDTLS_PLATFORM_IS_UNIXLIKE) +void test_poll_beyond_fd_setsize( ) +{ + /* Test that mbedtls_net_poll does not misbehave when given a file + * descriptor greater or equal to FD_SETSIZE. This code is specific to + * platforms with a Unix-like select() function, which is where + * FD_SETSIZE is a concern. */ + + struct rlimit rlim_nofile; + int restore_rlim_nofile = 0; + int ret; + mbedtls_net_context ctx; + uint8_t buf[1]; + + mbedtls_net_init( &ctx ); + + /* On many systems, by default, the maximum permitted file descriptor + * number is less than FD_SETSIZE. If so, raise the limit if + * possible. + * + * If the limit can't be raised, a file descriptor opened by the + * net_sockets module will be less than FD_SETSIZE, so the test + * is not necessary and we mark it as skipped. + * A file descriptor could still be higher than FD_SETSIZE if it was + * opened before the limit was lowered (which is something an application + * might do); but we don't do such things in our test code, so the unit + * test will run if it can. + */ + TEST_ASSERT( getrlimit( RLIMIT_NOFILE, &rlim_nofile ) == 0 ); + if( rlim_nofile.rlim_cur < FD_SETSIZE + 1 ) + { + rlim_t old_rlim_cur = rlim_nofile.rlim_cur; + rlim_nofile.rlim_cur = FD_SETSIZE + 1; + TEST_ASSUME( setrlimit( RLIMIT_NOFILE, &rlim_nofile ) == 0 ); + rlim_nofile.rlim_cur = old_rlim_cur; + restore_rlim_nofile = 1; + } + + TEST_ASSERT( open_file_on_fd( &ctx, FD_SETSIZE ) == 0 ); + + /* In principle, mbedtls_net_poll() with valid arguments should succeed. + * However, we know that on Unix-like platforms (and others), this function + * is implemented on top of select() and fd_set, which do not support + * file descriptors greater or equal to FD_SETSIZE. So we expect to hit + * this platform limitation. + * + * If mbedtls_net_poll() does not proprely check that ctx.fd is in range, + * it may still happen to return the expected failure code, but if this + * is problematic on the particular platform where the code is running, + * a memory sanitizer such as UBSan should catch it. + */ + ret = mbedtls_net_poll( &ctx, MBEDTLS_NET_POLL_READ, 0 ); + TEST_EQUAL( ret, MBEDTLS_ERR_NET_POLL_FAILED ); + + /* mbedtls_net_recv_timeout() uses select() and fd_set in the same way. */ + ret = mbedtls_net_recv_timeout( &ctx, buf, sizeof( buf ), 0 ); + TEST_EQUAL( ret, MBEDTLS_ERR_NET_POLL_FAILED ); + +exit: + mbedtls_net_free( &ctx ); + if( restore_rlim_nofile ) + setrlimit( RLIMIT_NOFILE, &rlim_nofile ); +} + +void test_poll_beyond_fd_setsize_wrapper( void ** params ) +{ + (void)params; + + test_poll_beyond_fd_setsize( ); +} +#endif /* MBEDTLS_PLATFORM_IS_UNIXLIKE */ +#endif /* MBEDTLS_NET_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_NET_C) + +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_NET_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_NET_C) + test_context_init_free_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_NET_C) && defined(MBEDTLS_PLATFORM_IS_UNIXLIKE) + test_poll_beyond_fd_setsize_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_net.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_net.datax b/third_party/mbedtls/test/test_suite_net.datax new file mode 100644 index 000000000..b2a650df8 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_net.datax @@ -0,0 +1,9 @@ +Context init-free-free +0:int:0 + +Context init-free-init-free +0:int:1 + +net_poll beyond FD_SETSIZE +1 + diff --git a/third_party/mbedtls/test/test_suite_nist_kw.c b/third_party/mbedtls/test/test_suite_nist_kw.c new file mode 100644 index 000000000..9fba55fc3 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_nist_kw.c @@ -0,0 +1,720 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_nist_kw.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_nist_kw.function + * Test suite data : suites/test_suite_nist_kw.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_NIST_KW_C) +#include "third_party/mbedtls/nist_kw.h" +#if defined(MBEDTLS_SELF_TEST) +#if defined(MBEDTLS_AES_C) +void test_mbedtls_nist_kw_self_test( ) +{ + TEST_ASSERT( mbedtls_nist_kw_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_mbedtls_nist_kw_self_test_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_nist_kw_self_test( ); +} +#endif /* MBEDTLS_AES_C */ +#endif /* MBEDTLS_SELF_TEST */ +#if defined(MBEDTLS_AES_C) +void test_mbedtls_nist_kw_mix_contexts( ) +{ + mbedtls_nist_kw_context ctx1, ctx2; + unsigned char key[16]; + unsigned char plaintext[32]; + unsigned char ciphertext1[40]; + unsigned char ciphertext2[40]; + size_t output_len, i; + + memset( plaintext, 0, sizeof( plaintext ) ); + memset( ciphertext1, 0, sizeof( ciphertext1 ) ); + memset( ciphertext2, 0, sizeof( ciphertext2 ) ); + memset( key, 0, sizeof( key ) ); + + /* + * 1. Check wrap and unwrap with two separate contexts + */ + mbedtls_nist_kw_init( &ctx1 ); + mbedtls_nist_kw_init( &ctx2 ); + + TEST_ASSERT( mbedtls_nist_kw_setkey( &ctx1, + MBEDTLS_CIPHER_ID_AES, + key, sizeof( key ) * 8, + 1 ) == 0 ); + + TEST_ASSERT( mbedtls_nist_kw_wrap( &ctx1, MBEDTLS_KW_MODE_KW, + plaintext, sizeof( plaintext ), + ciphertext1, &output_len, + sizeof( ciphertext1 ) ) == 0 ); + TEST_ASSERT( output_len == sizeof( ciphertext1 ) ); + + TEST_ASSERT( mbedtls_nist_kw_setkey( &ctx2, + MBEDTLS_CIPHER_ID_AES, + key, sizeof( key ) * 8, + 0 ) == 0 ); + + TEST_ASSERT( mbedtls_nist_kw_unwrap( &ctx2, MBEDTLS_KW_MODE_KW, + ciphertext1, output_len, + plaintext, &output_len, + sizeof( plaintext ) ) == 0 ); + + TEST_ASSERT( output_len == sizeof( plaintext ) ); + for( i = 0; i < sizeof( plaintext ); i++ ) + { + TEST_ASSERT( plaintext[i] == 0 ); + } + mbedtls_nist_kw_free( &ctx1 ); + mbedtls_nist_kw_free( &ctx2 ); + + /* + * 2. Check wrapping with two modes, on same context + */ + mbedtls_nist_kw_init( &ctx1 ); + mbedtls_nist_kw_init( &ctx2 ); + output_len = sizeof( ciphertext1 ); + + TEST_ASSERT( mbedtls_nist_kw_setkey( &ctx1, + MBEDTLS_CIPHER_ID_AES, + key, sizeof( key ) * 8, + 1 ) == 0 ); + + TEST_ASSERT( mbedtls_nist_kw_wrap( &ctx1, MBEDTLS_KW_MODE_KW, + plaintext, sizeof( plaintext ), + ciphertext1, &output_len, + sizeof( ciphertext1 ) ) == 0 ); + TEST_ASSERT( output_len == sizeof( ciphertext1 ) ); + + TEST_ASSERT( mbedtls_nist_kw_wrap( &ctx1, MBEDTLS_KW_MODE_KWP, + plaintext, sizeof( plaintext ), + ciphertext2, &output_len, + sizeof( ciphertext2 ) ) == 0 ); + + TEST_ASSERT( output_len == sizeof( ciphertext2 ) ); + + TEST_ASSERT( mbedtls_nist_kw_setkey( &ctx2, + MBEDTLS_CIPHER_ID_AES, + key, sizeof( key ) * 8, + 0 ) == 0 ); + + TEST_ASSERT( mbedtls_nist_kw_unwrap( &ctx2, MBEDTLS_KW_MODE_KW, + ciphertext1, sizeof( ciphertext1 ), + plaintext, &output_len, + sizeof( plaintext ) ) == 0 ); + + TEST_ASSERT( output_len == sizeof( plaintext ) ); + + for( i = 0; i < sizeof( plaintext ); i++ ) + { + TEST_ASSERT( plaintext[i] == 0 ); + } + + TEST_ASSERT( mbedtls_nist_kw_unwrap( &ctx2, MBEDTLS_KW_MODE_KWP, + ciphertext2, sizeof( ciphertext2 ), + plaintext, &output_len, + sizeof( plaintext ) ) == 0 ); + + TEST_ASSERT( output_len == sizeof( plaintext ) ); + + for( i = 0; i < sizeof( plaintext ); i++ ) + { + TEST_ASSERT( plaintext[i] == 0 ); + } + +exit: + mbedtls_nist_kw_free( &ctx1 ); + mbedtls_nist_kw_free( &ctx2 ); +} + +void test_mbedtls_nist_kw_mix_contexts_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_nist_kw_mix_contexts( ); +} +#endif /* MBEDTLS_AES_C */ +void test_mbedtls_nist_kw_setkey( int cipher_id, int key_size, + int is_wrap, int result ) +{ + mbedtls_nist_kw_context ctx; + unsigned char key[32]; + int ret; + + mbedtls_nist_kw_init( &ctx ); + + memset( key, 0x2A, sizeof( key ) ); + TEST_ASSERT( (unsigned) key_size <= 8 * sizeof( key ) ); + + ret = mbedtls_nist_kw_setkey( &ctx, cipher_id, key, key_size, is_wrap ); + TEST_ASSERT( ret == result ); + +exit: + mbedtls_nist_kw_free( &ctx ); +} + +void test_mbedtls_nist_kw_setkey_wrapper( void ** params ) +{ + + test_mbedtls_nist_kw_setkey( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ) ); +} +#if defined(MBEDTLS_AES_C) +void test_nist_kw_plaintext_lengths( int in_len, int out_len, int mode, int res ) +{ + mbedtls_nist_kw_context ctx; + unsigned char key[16]; + unsigned char *plaintext = NULL; + unsigned char *ciphertext = NULL; + size_t output_len = out_len; + + mbedtls_nist_kw_init( &ctx ); + + memset( key, 0, sizeof( key ) ); + + if( in_len != 0 ) + { + plaintext = mbedtls_calloc( 1, in_len ); + TEST_ASSERT( plaintext != NULL ); + } + + if( out_len != 0 ) + { + ciphertext = mbedtls_calloc( 1, output_len ); + TEST_ASSERT( ciphertext != NULL ); + } + + TEST_ASSERT( mbedtls_nist_kw_setkey( &ctx, MBEDTLS_CIPHER_ID_AES, + key, 8 * sizeof( key ), 1 ) == 0 ); + + TEST_ASSERT( mbedtls_nist_kw_wrap( &ctx, mode, plaintext, in_len, + ciphertext, &output_len, + output_len ) == res ); + if( res == 0 ) + { + if( mode == MBEDTLS_KW_MODE_KWP ) + TEST_ASSERT( output_len == (size_t) in_len + 8 - + ( in_len % 8 ) + 8 ); + else + TEST_ASSERT( output_len == (size_t) in_len + 8 ); + } + else + { + TEST_ASSERT( output_len == 0 ); + } + +exit: + mbedtls_free( ciphertext ); + mbedtls_free( plaintext ); + mbedtls_nist_kw_free( &ctx ); +} + +void test_nist_kw_plaintext_lengths_wrapper( void ** params ) +{ + + test_nist_kw_plaintext_lengths( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ) ); +} +#endif /* MBEDTLS_AES_C */ +#if defined(MBEDTLS_AES_C) +void test_nist_kw_ciphertext_lengths( int in_len, int out_len, int mode, int res ) +{ + mbedtls_nist_kw_context ctx; + unsigned char key[16]; + unsigned char *plaintext = NULL; + unsigned char *ciphertext = NULL; + int unwrap_ret; + size_t output_len = out_len; + + mbedtls_nist_kw_init( &ctx ); + + memset( key, 0, sizeof( key ) ); + + if( out_len != 0 ) + { + plaintext = mbedtls_calloc( 1, output_len ); + TEST_ASSERT( plaintext != NULL ); + } + if( in_len != 0 ) + { + ciphertext = mbedtls_calloc( 1, in_len ); + TEST_ASSERT( ciphertext != NULL ); + } + + TEST_ASSERT( mbedtls_nist_kw_setkey( &ctx, MBEDTLS_CIPHER_ID_AES, + key, 8 * sizeof( key ), 0 ) == 0 ); + unwrap_ret = mbedtls_nist_kw_unwrap( &ctx, mode, ciphertext, in_len, + plaintext, &output_len, + output_len ); + + if( res == 0 ) + TEST_ASSERT( unwrap_ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + else + TEST_ASSERT( unwrap_ret == res ); + + TEST_ASSERT( output_len == 0 ); + +exit: + mbedtls_free( ciphertext ); + mbedtls_free( plaintext ); + mbedtls_nist_kw_free( &ctx ); +} + +void test_nist_kw_ciphertext_lengths_wrapper( void ** params ) +{ + + test_nist_kw_ciphertext_lengths( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ) ); +} +#endif /* MBEDTLS_AES_C */ +void test_mbedtls_nist_kw_wrap( int cipher_id, int mode, data_t *key, data_t *msg, + data_t *expected_result ) +{ + unsigned char result[528]; + mbedtls_nist_kw_context ctx; + size_t result_len, i, padlen; + + mbedtls_nist_kw_init( &ctx ); + + memset( result, '+', sizeof( result ) ); + + TEST_ASSERT( mbedtls_nist_kw_setkey( &ctx, cipher_id, + key->x, key->len * 8, 1 ) == 0 ); + + /* Test with input == output */ + TEST_ASSERT( mbedtls_nist_kw_wrap( &ctx, mode, msg->x, msg->len, + result, &result_len, sizeof( result ) ) == 0 ); + + TEST_ASSERT( result_len == expected_result->len ); + + TEST_ASSERT( memcmp( expected_result->x, result, result_len ) == 0 ); + + padlen = ( msg->len % 8 != 0 ) ? 8 - (msg->len % 8 ) : 0; + /* Check that the function didn't write beyond the end of the buffer. */ + for( i = msg->len + 8 + padlen; i < sizeof( result ); i++ ) + { + TEST_ASSERT( result[i] == '+' ); + } + +exit: + mbedtls_nist_kw_free( &ctx ); +} + +void test_mbedtls_nist_kw_wrap_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_mbedtls_nist_kw_wrap( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6 ); +} +void test_mbedtls_nist_kw_unwrap( int cipher_id, int mode, data_t *key, data_t *msg, + data_t *expected_result, int expected_ret ) +{ + unsigned char result[528]; + mbedtls_nist_kw_context ctx; + size_t result_len, i; + + mbedtls_nist_kw_init( &ctx ); + + memset( result, '+', sizeof( result ) ); + + TEST_ASSERT( mbedtls_nist_kw_setkey( &ctx, cipher_id, + key->x, key->len * 8, 0 ) == 0 ); + + /* Test with input == output */ + TEST_ASSERT( mbedtls_nist_kw_unwrap( &ctx, mode, msg->x, msg->len, + result, &result_len, sizeof( result ) ) == expected_ret ); + if( expected_ret == 0 ) + { + TEST_ASSERT( result_len == expected_result->len ); + TEST_ASSERT( memcmp( expected_result->x, result, result_len ) == 0 ); + } + else + { + TEST_ASSERT( result_len == 0 ); + } + + /* Check that the function didn't write beyond the end of the buffer. */ + for( i = msg->len - 8; i < sizeof( result ); i++ ) + { + TEST_ASSERT( result[i] == '+' ); + } + +exit: + mbedtls_nist_kw_free( &ctx ); +} + +void test_mbedtls_nist_kw_unwrap_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_mbedtls_nist_kw_unwrap( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_NIST_KW_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_NIST_KW_C) + + case 0: + { + *out_value = MBEDTLS_CIPHER_ID_AES; + } + break; + case 1: + { + *out_value = MBEDTLS_CIPHER_ID_CAMELLIA; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; + } + break; + case 3: + { + *out_value = MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA; + } + break; + case 4: + { + *out_value = MBEDTLS_CIPHER_ID_BLOWFISH; + } + break; + case 5: + { + *out_value = MBEDTLS_KW_MODE_KW; + } + break; + case 6: + { + *out_value = MBEDTLS_KW_MODE_KWP; + } + break; + case 7: + { + *out_value = MBEDTLS_ERR_CIPHER_AUTH_FAILED; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_NIST_KW_C) + + case 0: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_CAMELLIA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_BLOWFISH_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_NIST_KW_C) && defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_AES_C) + test_mbedtls_nist_kw_self_test_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_NIST_KW_C) && defined(MBEDTLS_AES_C) + test_mbedtls_nist_kw_mix_contexts_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_NIST_KW_C) + test_mbedtls_nist_kw_setkey_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_NIST_KW_C) && defined(MBEDTLS_AES_C) + test_nist_kw_plaintext_lengths_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_NIST_KW_C) && defined(MBEDTLS_AES_C) + test_nist_kw_ciphertext_lengths_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_NIST_KW_C) + test_mbedtls_nist_kw_wrap_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_NIST_KW_C) + test_mbedtls_nist_kw_unwrap_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_nist_kw.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_nist_kw.datax b/third_party/mbedtls/test/test_suite_nist_kw.datax new file mode 100644 index 000000000..32936263a --- /dev/null +++ b/third_party/mbedtls/test/test_suite_nist_kw.datax @@ -0,0 +1,484 @@ +NIST KW self test +0 + +NIST KW mix contexts and modes +1 + +NIST KW init #1 wrapping AES-128: OK +depends_on:0 +2:exp:0:int:128:int:1:int:0 + +NIST KW init #2 unwrapping AES-128: OK +depends_on:0 +2:exp:0:int:128:int:1:int:0 + +NIST KW init #3 CAMELLIA-256: unsupported cipher +depends_on:1 +2:exp:1:int:256:int:0:exp:2 + +NIST KW init #4 AES-224: bad key size +depends_on:0 +2:exp:0:int:224:int:1:exp:3 + +NIST KW init #5 BLOWFISH-128: bad cipher +depends_on:2 +2:exp:4:int:128:int:0:exp:3 + +NIST KW lengths #1 KW plaintext OK (2 to 2^54 - 1 semiblocks) +3:int:16:int:24:exp:5:int:0 + +NIST KW lengths #2 KWP plaintext OK (1 to 2^32 - 1 octets) +3:int:5:int:16:exp:6:int:0 + +NIST KW lengths #3 KW ciphertext OK (3 to 2^54 semiblocks) +4:int:32:int:24:exp:5:int:0 + +NIST KW lengths #4 KWP ciphertext OK (2 to 2^29 semiblocks) +4:int:24:int:16:exp:6:int:0 + +NIST KW lengths #5 KW plaintext too short (2 to 2^54 - 1 semiblocks) +3:int:5:int:13:exp:5:exp:3 + +NIST KW lengths #6 KWP plaintext too short (1 to 2^32 - 1 octets) +3:int:0:int:8:exp:6:exp:3 + +NIST KW lengths #8 KW ciphertext too short (3 to 2^54 semiblocks) +4:int:16:int:8:exp:5:exp:3 + +NIST KW lengths #9 KWP ciphertext too short (2 to 2^29 semiblocks) +4:int:8:int:8:exp:6:exp:3 + +NIST KW lengths #10 KW plaintext not a multiple of semiblocks. +3:int:21:int:29:exp:5:exp:3 + +NIST KW lengths #11 KW ciphertext not a multiple of semiblocks. +4:int:34:int:26:exp:5:exp:3 + +NIST KW lengths #12 KWP ciphertext not a multiple of semiblocks. +4:int:30:int:22:exp:6:exp:3 + +NIST KW lengths #13 KW wrapping output buffer too short +3:int:16:int:16:exp:5:exp:3 + +NIST KW lengths #14 KWP wrapping output buffer too short +3:int:5:int:10:exp:6:exp:3 + +NIST KW lengths #15 KW unwrapping output buffer too short +4:int:32:int:16:exp:5:exp:3 + +NIST KW lengths #16 KWP unwrapping output buffer too short +4:int:24:int:12:exp:6:exp:3 + +NIST KW lengths #17 KW plaintext NULL (2 to 2^54 - 1 semiblocks) +3:int:0:int:8:exp:5:exp:3 + +NIST KW lengths #18 KW wrapping output NULL +3:int:8:int:0:exp:5:exp:3 + +NIST KW lengths #19 KWP wrapping output NULL +3:int:8:int:0:exp:6:exp:3 + +NIST KW lengths #20 KW ciphertext NULL +4:int:0:int:8:exp:5:exp:3 + +NIST KW lengths #21 KWP ciphertext NULL +4:int:0:int:8:exp:6:exp:3 + +NIST KW lengths #15 KW unwrapping output NULL +4:int:32:int:0:exp:5:exp:3 + +NIST KW lengths #16 KWP unwrapping output NULL +4:int:24:int:0:exp:6:exp:3 + +NIST KW wrap AES-128 CAVS 17.4 PLAINTEXT LENGTH = 128 count 7 +depends_on:0 +5:exp:0:exp:5:hex:"095e293f31e317ba6861114b95c90792":hex:"64349d506ae85ecd84459c7a5c423f55":hex:"97de4425572274bd7fb2d6688d5afd4454d992348d42a643" + +NIST KW wrap AES-128 CAVS 17.4 PLAINTEXT LENGTH = 256 count 11 +depends_on:0 +5:exp:0:exp:5:hex:"ca8f6c56a9c9300549e9eae75a4604b8":hex:"1542b8662136245162c64d45af1a982302f69f1d01a1a6bc29ef8facafbeaea0":hex:"4d340c10bbbddf5b2014ded264bffce49901bd22adaee074b0f25a2d19c134eb3c7f38c5d0444766" + +NIST KW wrap AES-128 CAVS 17.4 PLAINTEXT LENGTH = 192 count 8 +depends_on:0 +5:exp:0:exp:5:hex:"b4902b13ea73f17829b4e334fb359ec4":hex:"2073399c7794c8b73dd782dc250dab31c80a8cba33477ab2":hex:"37eda4eec3096135f5193c37bdeaf498b71e3a205c5638682fe746f236566b11" + +NIST KW wrap AES-128 CAVS 17.4 PLAINTEXT LENGTH = 320 count 14 +depends_on:0 +5:exp:0:exp:5:hex:"579448a3d638f093742ae6b24d729849":hex:"464d3162469899955d8bc8bfc0a22555bce609b2415bedf17a942abfe96ad4e124d4a832fbcff49f":hex:"dadd1440a06946eabddf18e784b7719d36caa33cb626aa03aca057585584ea07a8714ecb90ceb232d6b0760845105fbb" + +NIST KW wrap AES-128 CAVS 17.4 PLAINTEXT LENGTH = 4096 count 0 +depends_on:0 +5:exp:0:exp:5:hex:"98311985c4661d7e811ee56070e6fecf":hex:"18840c96813864ef3093b48cdde6ac5d78248b96d4a2cd1f15f0b56f98213dbf87e1ccad04e0d4f1954c233ea3e48fdad8f2b1156e54e19e3b5f4a66d2e9149032b876c51249165fe8c28e112a685b2d228a8ac308017574274af36a4ea3877bcc9850bafe8fc0e0a712faca0dea98396f9143bc5819fe4933a806e9b965133e3c695a45f0fbd6961798c400d7477287df64798b651e0d3009c13f7a2246c28f983509b9e5339919f2cdffcdfc550693cba9491c00334c4a62d878c4d0ca57b1104bc0174968ea8e3730b9e68db49678b23cd508ebe3e12e94b0ad3791023a8ef95473f0b32f906738f34e94e45a4480ad768072e1853adb63996b9ac27a1dade70804b82290a2274c6dcc3ccd40a8b38a56a5eb03f59075de015e8f9096f53549f6374e02da947fb849287a447f757cc340b6bded71d480988b6d2fcd984fba841470519830304667fef0a577b4cf84f76aef9deb84dde36abfbd76673c17113dbea7a3e24bf9b57a8fd17173a1ef91497b732b3fa8889bed58a503a0d3e20bc27ec4dbf5d13a93cbad05495e3df15e1fe34a3a6d6f648ea4aa60b2f114f30944ae593675dac2db188f90a3c483fb82cec0f0d295544d798b62cdcb51c6c036af1a341d78babf87b92609c1d866e311a46abccc8ba8c6a41420359bb061d7e752c0ed25990eef57c9f9e190572203f8c473edf8cfc8c26d34e37240f45ded97":hex:"625aea9122b7b57b9f36446f9053acc42c6435a7f69d91b41547026f833291d488e477c7ccba698c143633a304f463d6af4a3e72c189234fcfc360013e65b07b7f7a36c529d3fdbbdbd6224bf100c14bc5354893b44790f54c739a2b1f5bda82d70fb600ed9b0606dbddea52e508b492b72d8779856274aaaaddc0a3edb6cfc788b603101bedfcc3f44baa62336bd950c2e349d5daf04f2e23ec2628893d214e277569c565e5e6aa8b72ffa14118a3b57f814b4deb179980b5eeefa4fd93f1751850466e929be537801babc2120f3ff1ffe5fea813ec7788eaf43f5ef657e5af48395c3ad11aaf741549090b58670695f7c95c68e00576ca18ef0313f2b4b757219fc8db3dc2db28721d6f912547ebfebcd96935c3100aa4e4df9955acae1b4e2c10df1166d46c4285ab631c6d2ce58ad3ae99c07c019dcd15958694055281ccd6f803af290431f188cc4c429e84a4c30fd9c63968dfd0951c417efb71921c207de172a9546bdd3e2bb35b45e140892c649f88c31a438f864e801a69f8010aa3d77a26601a7a89067c81b0f7e70d8e82f21f88c7d0bb0c8ca0db875d6c3f8c6f6d709bbb31c7da2e31f3571daa2c5ab13bfc16624cf35abd526e84269fb45bbd2fcd8c383d6fbb700bc4b5205b3ef8c4323dc0d9e0370e56a3d1e5e76aa4de082e4c2a0afd092845bd5dab52a45943181461b76e3984b95f48bea80a94944241d04b5634c86274e7" + +NIST KW wrap AES-192 CAVS 17.4 PLAINTEXT LENGTH = 128 count 7 +depends_on:0 +5:exp:0:exp:5:hex:"13df8fa68a6e096b9b5bbaebb64ace2e6a05485b5cb7e43f":hex:"3ee9367f631fb375ba47241966ad4ab8":hex:"d0309b1291a06c595fcaa6dcf97817dbd7b7ad2cf48ddec2" + +NIST KW wrap AES-192 CAVS 17.4 PLAINTEXT LENGTH = 256 count 11 +depends_on:0 +5:exp:0:exp:5:hex:"17c25023ac76a8af777a6f71c0c0f97931554b0a15a79222":hex:"15227ef52412346e83a18c54a75374f69a24de6a07cfba9082596eeb5d758bb0":hex:"0f8e2fe4f3a28c1fcebf20fef2bfd3489deb284e03d057337496285f4ffe62f074bafa0a0a6e44e4" + +NIST KW wrap AES-192 CAVS 17.4 PLAINTEXT LENGTH = 192 count 8 +depends_on:0 +5:exp:0:exp:5:hex:"49d1c4ec51f2695ad7e47554efd24170ab03f628eba7d5fb":hex:"8bf961097a6fa75694cf0ea47cfda23928fc433d5fc762e6":hex:"dc72c58faca0dd662e5fefd05cd714987cc2470219db77baf779fca865f31529" + +NIST KW wrap AES-192 CAVS 17.4 PLAINTEXT LENGTH = 320 count 14 +depends_on:0 +5:exp:0:exp:5:hex:"e06ebf0145b178ea45687abe366fdec559877dbc9300a653":hex:"f0104e9546628d801c4f7e875f1ca4f385e915b0c7bd52ed158b6b42d7301f1df6dd5bfc80d0318a":hex:"5b4b1d4ef349fcf5eb7d720d84b2e79fbabf3db18277ada0752b9883c21f0e24281854420e6751af8fbcc4b98be0c1d7" + +NIST KW wrap AES-192 CAVS 17.4 PLAINTEXT LENGTH = 4096 count 0 +depends_on:0 +5:exp:0:exp:5:hex:"932ed6ee1db1c4cf7fd81efce5609641cb5f3409563089dc":hex:"da8dd9c1dc8cbf95b0fa280747c1007ecb086b7c944b0db4dfa3bdf6ed0c9725901cb838c2e30131250188c22bd92b068aa0871ce58a0c22307671612fc4884a655329851d54afd48a9d3a7f97976850d6fd842034548aee67df1272b06f155eb21966858731c3c35d4bb94a1ea351ef5a8c4779c077d648ec1c4f27cfaa48f47541a8f36831e35a961b076307bea928e1856e448d7695a0f7fbcd8c82800d12f530c2086f3b67bc5081d384010b47d327120def5c92f815aaae31d32893cdd18a71ba4e208445ff3a2f68a0a46689458b0f2d6d9cd3726284e56b4c020b97a82d4463f74098cfd7bd7a5f12157a0bc812266b8f2c215933cb67518f900602f0825538e05765318b6d31150007e410b92d5d957e119c5d94aadba193cf6da230387b1c5e6448515f9789a8867571ea82ad34dc5b912d6cd243bd4fc2f19d132bd8f1f5cef00a141e30ec4d3f7a546a215d5b0c7e70c3b0ec4fc34b66c4170bf403ef910dd3897caef33405827a55f943904c4e1b1aee4cc3ffd0ad27e316c164e2b5bbcf73df60d8859201b6602be01ba638aff468f3136120c117ca848ae161ecafade668e2d04b227437d4b91c6fc40ebd9490f211bcd21fd7005d200ef584f37aa2c4c769174551cec0d7f2936ae78f6c389382212703d0e7c82aef1a736056ed9c45e71439731537a2edb8a63741825c678a11c42e5b2281b43e203b0523":hex:"76b6772984932bb6314d1eab8f625e044920f9494789e9a0ac2affd9a209cabb72ee83331a30472934e02ef28697d541a071eff9eb5c7dd49862f11384d46e8f4c2ddb084e76ef382117a285993e4a9f89e1e0ba6612f63b3c8a54784f940d7e6baf12cb67d27038e91d1ad4feceb5bc44daf7444f76fd140ec7a94869b4f99b9fcf6dd68e78c6a0a4794d55a1c91756ceb9d28b43d9c72b26fafc25c71e63dc175b29282d4a70813b833c35354983f29796909a9ba515cc5c37c58e95aa6f35b850500ea933b27a5922188c2da64680362602d71d169f853af0564b53bc613c15772ed82f89c2f8625670179a83536972332509e7ae4e0726271c5381501d3d88a3cc34a56d80e3e553b9b595e358615e92f361d695837734cdaddd7068c441b310aa511407b53806f1fed984a73862ea2ded1ee67d14feb5d8661ed94a62f5768829d6feea30db392bf24f0ea103fd2a60acf1fcd4bb2465641712113375bc2c8d73650795689f9061608b65e0e608f9948f5efcc0fba62c50b8cd97f67df2b0eec4f5a0cd354e982ae6a62070f4127b6556714bb2267d558112638f10c78be201ba165e57ac9cab6f3e35a762b7fe83b3c7c050b77174a4bf14eb2cac4d6d58a94f0c02727ad020a6a05d9ed145151d4f1ed41d5a6d06c50c0e1d5c24d09100d4f06c50d06a332a95845f4192ef577dc484e7acb91f0b2a57c1f8bef97c23294c59099eea13b3" + +NIST KW wrap AES-256 CAVS 17.4 PLAINTEXT LENGTH = 128 count 7 +depends_on:0 +5:exp:0:exp:5:hex:"e823c6ef53b110eeb3f178871cf436887cca9df061d1f26409ec3b410033d967":hex:"f90c279e9e6423804a6505e8effd924c":hex:"0abb50b222af66058646156d106df7c85c28b708395eb9dd" + +NIST KW wrap AES-256 CAVS 17.4 PLAINTEXT LENGTH = 256 count 11 +depends_on:0 +5:exp:0:exp:5:hex:"e5cca71056548467bc9c2849aba67cfe0fd74c44d514535d2314022a3f3e6ec8":hex:"326b6da4dce95c94226b63c2d38c4e005c566191b00028b59cc788e0af5261cc":hex:"2a4f331f451589fd103d9a9cbbeae5d5f5be7acf15aa6e21c45e09362263cf34b0ccab7c8a28dfed" + +NIST KW wrap AES-256 CAVS 17.4 PLAINTEXT LENGTH = 192 count 8 +depends_on:0 +5:exp:0:exp:5:hex:"6a077f95496aba1bb80831280e7563f3a187e6d014342028349f766b791108ce":hex:"a77b3ddac0e78c9176b7445f9ec349b2d85aa2f57e6cb362":hex:"7c065be0a2173e0f14a3418779e7f3eb6eb7fbb7a3c20fd6c08b37d408bd9423" + +NIST KW wrap AES-256 CAVS 17.4 PLAINTEXT LENGTH = 320 count 14 +depends_on:0 +5:exp:0:exp:5:hex:"752b21422647f1006de116360e88e2f6601eeb5aafd27cba56c20193fc1b941a":hex:"a5948c20bc611187d688cb03caa04fb17774aa4f99ae3da5d821bcccfae950d72ca74b3a870008aa":hex:"d71109224edc4233db8819aaca4db9c61ab5aad2806d0e985f1830acd8adde23ce75046b2057e0a23dec7a053bac6c4c" + +NIST KW wrap AES-256 CAVS 17.4 PLAINTEXT LENGTH = 4096 count 0 +depends_on:0 +5:exp:0:exp:5:hex:"931bf2c55eac657ae56fc0a9505a6ea7cc9af5162d844ccf01f19debfad09cbe":hex:"aa8074a195abd88930825b947cbf3cca9810eb829d2e7a09f9e9cb1f8271986d00c5be478150fbbe990de8c61af879495274a60d83f98cfecb2473a35d86fba6ce839d259ede318a362e7abc1f8a18168606d5e680f456f1ca19942e67e5aee382536df7c28204b7842b99023336b735a861cf28363e7773d7b0bcf32b5fab14cb524249863fd7ce49a7a7882b53728f7ecd020393852494df09d9a69189ea713e730e002252af18864b948a642d7c0fb17b0cd5671f14ae340fb0e83b4bda920445927b8de8a82ac93158edbbd57fddcc1d908688770a07c27d2bdb7151d986e85cdf1606b0c1c959542e75090d8fdce9c2a9c162e6fd988746c9bc916ff3f20f054690173d143212b74c5a8961cd46663958744ca1334f6c1dfc13fa83c0a9cc229a1030c6c84d01751ffef54d0f9edb2a4851a187d02f097a5c716f8fbae29eae76738239516ed08c14f24f9378451e9e696742a4bcdd9e0ecba49fd05eb93698afaa1b0d5558521c7b4e77b15ca2612619bbd78f670a1562a9a0a0215fe64211115e60476525444b351a4f8ff5551dd198655423f3fcfb5967c4f77e25d3911504de1d034176d3ccecaeb31bd29677c7569c858ea24d7017ce0b31f1911f4fa14b2afa429c06115bc285ea8b90bbedbcc63f5f0829dddcb17e8f9d21bd71501679e514147e1957ccf986e7e96a0e63ded70a9d017162658a901f55b1001d":hex:"6b75fa8070291ef7c89f5cc2060c56270f5077a6df65a8095cc76b717167e67af70dcce96de4aa32293c17d0812f666e1f42e7e662cef7a3148486d2be7f314631ed6606f326e9781c3ed6be1735bef8cd5d3ac7d2b45c4419ea61462baccc0ff87b83b9b6cc85278c0b20bc15e6baa0a15eedd9e99df82c8e61476529c98aebbc9d40d417f9af26e6da5d115acdd6007d83206c616a39fbe21c6331cc45af11c578532a7cac50aaba21f3cf317534564c2ee093ef127484aea62c7a90327fe9bbe8e45627974306d8cc7452e96033f0c8c30ba2d7fb644796a49c9b502d3db7d4995f920fe21962fd2b634c15be0d82e9cf0ae3fd2b6d45524e1003ab9788ee56cff3e2e62c5784061a5ff586b5907098b8ab54bb70fbc6cb066b071fedce10e013014d82162e3cc6f9be3b4067555907a4df55012a9b1001888c55dd94b4f8528bb29e7985ecb8a7958fc8559831db05002479b1f39e5de3659f3a6e8289d9b8ff4eaa3f864b1ea101d84b4c6138aa6ffb95dea4f825d23f5d368727ca0a8cacb74f7bfd70fccbc951db99f2f4a580425c31a8552fa27397cf8b7f420f13fdcddca553a5f31d8645615b98a88795fb4472bc7cd6e8e54707d7be1f3dd7d4871725f6bc0e65762f1e42e22c411fee6dfd8139068798c7ae9781c8e5bcf4732a83f9142edce36e1ee6e20142adf46c5abaea0ca78f61e16b6875927d4141f6b215da1f48748bd33c" + +NIST KWP wrap AES-128 CAVS 21.4 PLAINTEXT LENGTH = 8 count 3 +depends_on:0 +5:exp:0:exp:6:hex:"d060e5faa705b6c600ecfcd5252bbfba":hex:"3d":hex:"28ccc6da03cd79b78c7207946fcee402" + +NIST KWP wrap AES-128 CAVS 21.4 PLAINTEXT LENGTH = 64 count 5 +depends_on:0 +5:exp:0:exp:6:hex:"663ee3d40628059fe01a9766d5c1c31f":hex:"1c6ccd67438f20de":hex:"c2717ed6e51bb4314388cd26464f4d18" + +NIST KWP wrap AES-128 CAVS 21.4 PLAINTEXT LENGTH = 72 count 0 +depends_on:0 +5:exp:0:exp:6:hex:"7865e20f3c21659ab4690b629cdf3cc4":hex:"bd6843d420378dc896":hex:"41eca956d4aa047eb5cf4efe659661e74db6f8c564e23500" + +NIST KWP wrap AES-128 CAVS 21.4 PLAINTEXT LENGTH = 248 count 2 +depends_on:0 +5:exp:0:exp:6:hex:"02a92285d0baa874ac94f6648988d44f":hex:"6ac78aff505805e3145fac44eaeb6ac92945ca12d9bc0b6fee8b1e5b983f37":hex:"18b251cf54d2a51ac903af2fd008f6aa2b1bf491fa2e0458dba272866821e98ad037eae4af654811" + +NIST KWP wrap AES-128 CAVS 21.4 PLAINTEXT LENGTH = 4096 count 1 +depends_on:0 +5:exp:0:exp:6:hex:"6b8ba9cc9b31068ba175abfcc60c1338":hex:"8af887c58dfbc38ee0423eefcc0e032dcc79dd116638ca65ad75dca2a2459f13934dbe61a62cb26d8bbddbabf9bf52bbe137ef1d3e30eacf0fe456ec808d6798dc29fe54fa1f784aa3c11cf39405009581d3f1d596843813a6685e503fac8535e0c06ecca8561b6a1f22c578eefb691912be2e1667946101ae8c3501e6c66eb17e14f2608c9ce6fbab4a1597ed49ccb3930b1060f98c97d8dc4ce81e35279c4d30d1bf86c9b919a3ce4f0109e77929e58c4c3aeb5de1ec5e0afa38ae896df9121c72c255141f2f5c9a51be5072547cf8a3b067404e62f9615a02479cf8c202e7feb2e258314e0ebe62878a5c4ecd4e9df7dab2e1fa9a7b532c2169acedb7998d5cd8a7118848ce7ee9fb2f68e28c2b279ddc064db70ad73c6dbe10c5e1c56a709c1407f93a727cce1075103a4009ae2f7731b7d71756eee119b828ef4ed61eff164935532a94fa8fe62dc2e22cf20f168ae65f4b6785286c253f365f29453a479dc2824b8bdabd962da3b76ae9c8a720155e158fe389c8cc7fa6ad522c951b5c236bf964b5b1bfb098a39835759b95404b72b17f7dbcda936177ae059269f41ecdac81a49f5bbfd2e801392a043ef06873550a67fcbc039f0b5d30ce490baa979dbbaf9e53d45d7e2dff26b2f7e6628ded694217a39f454b288e7906b79faf4a407a7d207646f93096a157f0d1dca05a7f92e318fc1ff62ce2de7f129b187053":hex:"aea19443d7f8ad7d4501c1ecadc6b5e3f1c23c29eca608905f9cabdd46e34a55e1f7ac8308e75c903675982bda99173a2ba57d2ccf2e01a02589f89dfd4b3c7fd229ec91c9d0c46ea5dee3c048cd4611bfeadc9bf26daa1e02cb72e222cf3dab120dd1e8c2dd9bd58bbefa5d14526abd1e8d2170a6ba8283c243ec2fd5ef07030b1ef5f69f9620e4b17a3639341005887b9ffc793533594703e5dcae67bd0ce7a3c98ca65815a4d067f27e6e66d6636cebb789732566a52ac3970e14c37310dc2fcee0e739a16291029fd2b4d534e30445474b26711a8b3e1ee3cc88b09e8b1745b6cc0f067624ecb232db750b01fe5457fdea77b251b10fe95d3eeedb083bdf109c41dba26cc9654f787bf95735ff07070b175cea8b62302e6087b91a0415474605691099f1a9e2b626c4b3bb7aeb8ead9922bc3617cb427c669b88be5f98aea7edb8b0063bec80af4c081f89778d7c7242ddae88e8d3aff1f80e575e1aab4a5d115bc27636fd14d19bc59433f697635ecd870d17e7f5b004dee4001cddc34ab6e377eeb3fb08e9476970765105d93e4558fe3d4fc6fe053aab9c6cf032f1116e70c2d65f7c8cdeb6ad63ac4291f93d467ebbb29ead265c05ac684d20a6bef09b71830f717e08bcb4f9d3773bec928f66eeb64dc451e958e357ebbfef5a342df28707ac4b8e3e8c854e8d691cb92e87c0d57558e44cd754424865c229c9e1abb28e003b6819400b" + +NIST KWP wrap AES-192 CAVS 21.4 PLAINTEXT LENGTH = 8 count 3 +depends_on:0 +5:exp:0:exp:6:hex:"959b4595778d7b860e08fcb5e24b11f118fd5d67089f2ea4":hex:"65":hex:"1cf986a0fb2208977c37a4c3830eba72" + +NIST KWP wrap AES-192 CAVS 21.4 PLAINTEXT LENGTH = 64 count 5 +depends_on:0 +5:exp:0:exp:6:hex:"02dfb6662e0c1b95d34aaba7eb6c1fdd41c52b89213d5b18":hex:"27361c34c2601fe6":hex:"089f835f3210734aa1a2282c6ff30ef9" + +NIST KWP wrap AES-192 CAVS 21.4 PLAINTEXT LENGTH = 72 count 0 +depends_on:0 +5:exp:0:exp:6:hex:"9464f1af6aabad076661328bcfd15777da16a288a2660009":hex:"431527c3a644c106bb":hex:"d9b257b400d808a0b0386af3be9154fc7f2fb2d7edc06201" + +NIST KWP wrap AES-192 CAVS 21.4 PLAINTEXT LENGTH = 248 count 2 +depends_on:0 +5:exp:0:exp:6:hex:"df419ca84650ef28a1c5d1cb47917e4480a3aca4bd29dd5e":hex:"3d84df372bc0b854c058441e952738ec79474b673c94e32dc78d23745fb5e7":hex:"497e966414475938204c3b3d606d5160461c54dfdfe903b6624208d7cfc90bb403f384bfd54d1ed2" + +NIST KWP wrap AES-192 CAVS 21.4 PLAINTEXT LENGTH = 4096 count 1 +depends_on:0 +5:exp:0:exp:6:hex:"a85b4359ebd240012ec749459bc928eaa52c84e887ababb9":hex:"9db71e2a2d40f6fcc1b8311167ae13fb101bdf7b5c4e078373c0c3cb3f3a3ca39a91a6985d3fdd48d93f2b5a09b2a69350da2846ce6a37d018dda95ddac93a92fda7b7c3bb6518dd78f367f70e34e0bf19dbba46fd13d3f3e0a1776350f27138c64b177aa39c54dc06184b320016b6305c2dea19fa6da634cd613d5a4f71bc045f555a1ccee39b8f1ab90840b5bae555932e08719bf38f72bc1057875e8c077a70629f46be91281b977ed6f2a71171a7cbaf8e0566e55da6220a85a7655758de3b372144ef76d0337d3133004c0db096b2c41f524f95706247a331d08a6ff72b425395fee8e1ad308ccfe5b0525c40803e529db72063731fe1644891bdc0d5961397006e1f5d6521ad4e5aee3544da101fd3cf6bcf879220a612b7016e5eefe7369f136086e8f5109ae83e8687519f2008406d20992b64ba1d27b436ea5db1fd734340f3b2279e026a96e3f9c5c7b99553e35ada9e1d7d708a73774718f9b7073c0889a298f212d47ff5960e04743070338f99b11687396da2120b8f132535c0911b04505c0e6c32590c82bf59486fadfbdc0f16a224b2f52082eb66201f041d64b34809e5e91cda89d80d78fe1e15862bcf84f65a301ae68d097c9be09f3411c11cf83225733dbc9306ad2630eb7994a0d112ba83dc542966414137fd008fbb7995f649edf844fe5ee86b94acade1a04f42dae21928b9b0cdde8cc66095772d":hex:"72880f9f173f0ef4d99e3ae71f6f3b94f66a08aaa22be1d206faf431718c1a29bd0a574b1a28b69f0e64d56d3e43617dc73506a939b7de9005ef0ee3f02b9265e91a32aaec58b7ab990f39774f6769c9be9ced3339f6bf0159055abe237c4c755613a6c03271abea3bc89527f284a3e1557ae26b3910b779a77a128e773d11d7d641479d02f4888c989cbb8d928da0136b965531730a3c0c32404351f4c2390d996dff58985ed1d4f4021a5d6ccedf4555066a826a04055cdf8c9c44bdae26619390b3e22b064f86b28382094a3e299d55ab335ade601699e85f19d6f6f12407caf84ad47f03d75198691f1a9b2aa9ed95e508d8551b19601418922f3289fc1efc3abb1ebc2f4886dfe325cddfe25dd908e5aef8ad197ce2703e692b9c46a12201fa71ebc2e323ff8926ecc059ffeeacc0446d3f28496f17f1b4ad6504e4e24188862e25f3dfc36adc7f79920d88e6c53269cc4e5dbbebbba1a2347154683c840d178476ae11d6ce574c26b8b895957b8623807e8831b87b5639aeb415adf1bbef394046deb3bbe91a5c17f2f67131ae5f696352a488e3bed40df025e0a0846e0037847350fe8ae3cf73141d0ec550d82b89c05bbff7337bfe846411d3f0bd012e4de2fe5b83c7210214c0404b40e08abdd3f4bc441f9b6e1efdaa4ac13b85d139f670a6060a1ba8d2528bcd19f241d9ee5077d20c120f2b484c67c9c598b1b209824c3b8aec2b7b" + +NIST KWP wrap AES-256 CAVS 21.4 PLAINTEXT LENGTH = 8 count 3 +depends_on:0 +5:exp:0:exp:6:hex:"0070492ff3aaa190496c72bb0affdb6fac7fa9cb32e6e91a46ea34863422f807":hex:"39":hex:"643a9706af6bd06410b70ee38f546bc2" + +NIST KWP wrap AES-256 CAVS 21.4 PLAINTEXT LENGTH = 64 count 5 +depends_on:0 +5:exp:0:exp:6:hex:"c6e882f5b8e361e43bb3e54d5a7b8c690f485bcbec2dd2183c7e623f6b02c5fc":hex:"99ae80eec64630ed":hex:"de0680b34f7374539ad9b75f08f4d8e6" + +NIST KWP wrap AES-256 CAVS 21.4 PLAINTEXT LENGTH = 72 count 0 +depends_on:0 +5:exp:0:exp:6:hex:"70da43aac823c6dd37d1109f5b18feb4503c973288989745e2cc1cc21d9570c6":hex:"edf17d966ed896aee3":hex:"d67b5b2ad15c645450e23b5e7b6d682f8ae20e716d470db7" + +NIST KWP wrap AES-256 CAVS 21.4 PLAINTEXT LENGTH = 248 count 2 +depends_on:0 +5:exp:0:exp:6:hex:"e941febe4b683c02dce56194a86b72d4c569e1fc84bc7a6f24c3ae2b39bf5440":hex:"c168cf12acb6679c24d424baa62ed56559caee163a4efa946478ad43d7dbd6":hex:"4ad9979caa72fddff0876c0295a57fcf74e5980fec2cf622191ec6b5aebb75e0adebb12d0862ffae" + +NIST KWP wrap AES-256 CAVS 21.4 PLAINTEXT LENGTH = 4096 count 1 +depends_on:0 +5:exp:0:exp:6:hex:"20f31cded60b8ed8d9d3fd1e1fa6244e76c7cb7628bfd28a5d63ce8aa2c9494d":hex:"f07225202842c8dede42215301e44b9bb7e625d3812f74f9b6ddbcd024ebd1f33e2cbf280b9004941f3cbf86c880a2357f88f92a6dcf8dad9da7dddcd00f3635efdff0af4382024e93c2af66b991e565eacca6b886f07178c9b4adad6f0d6ada5ff6aa7cd0712519a947a8089cea5e1e3e40ffe1806010b0149f9ffc7c4dd3c31b3d08d5ae1997c52369393d58611dff9bec501c1ab35e6ed3e7f9445a34e211010a8236686f154e0a5ae3433d6a844eb3884961aa6592216d93952b46bb58a4195aa80966ad0ccd4a7e23823912556a90d5ee9c3bb952ecbb9d895dabd3b11ab4f2e3a6c2582de50403289230ef4dc46e7c0d870a3f0cba9d643a0349503c1b162ddb6350e699589eb47bd563999f55a1adb6b78b52f006901b0427ea7d3394bb0adae4637b4f1ad5d5425e2c8ff3083506d7ad7ba4c7405a778b0a3a11760c96900a5256956cc9710091d073a19f46a985d004651fe2b6448ed761bf9bc81619cf273a6783d868d090753bf01318be21afd88d9f3a961a69f93e9d9fb822c80acc7b48cf14a08b5b7ef15c66975721b7cde9761a145b679155472a44dea8fedc0f86ae7ebf6283ecfde5f2444b51569e6723a7a19e28cdf8dec6791ccc14af95abad018f741575b343cb1a20a2a9adf4248f99728069a1e2e78ad8966c41c9918fb7019ef56c153a183a6247d22d9956564bb03075cbfd1b43d96818b28484":hex:"a5b63618fc0c4512960f00a1f226d9837a90480baea75265453b9553b12a58c72153080842d7f8710f317f88fbbbf97caf879ab4bf416ba767ee9aeb34357f4a2d0e8b9571054d98e28804a70bc4d74807f2bfd95ee955bfdbb6f4d6969a0c3c3b541a514647d5cd8c9740ac3496095c3f145c50c97ec98b935158fbdf89705d5330015e48ece89188b8c1bcb2ad6825d865b375a9b9056b743dac720feeac033c9f757f6fe73dd7c4a747661b64cf490a0dd43b547cd791a5d78dac97efcd355f7ebac248fa2a33e4fad640dc34e0d40b0d36588aa32f0864c9446739a6b44ff84666d723bd7d646c5172cda932fec34ddaaba342b02a9604087ef042a2be4774194b5d32cb3fb112438fbf2801050b5424635fa2d3d3fb10332965c73e6669e65195310a3a30602640e9809179cdfc50de585aa1c0072423c626815d281a06eac3b6ffa137716318e288e3f9970e415ef0451bdc557968febf9eb6772c1f77cb8e95701246d9c567048142bb25e340351b87d7391822d9ee7fe51378bc0d08135f9f39cf44b348b87937939dc61f430dfe308cada632722e23aed5a0699e039cf0563ab8025163744b136a13ce3c62c748c89f5e17540f105e7c6ec9ba13515b504342f9e6dc7d65b9a633d8c0b5c9fa858dbb9b3a594406d478a81bb9abfa289730408c1e303c663a61d5caca00f615065312580042862397b9aa8c80ca812887664c439c8c68" + +NIST KW unwrap AES-128 CAVS 17.4 PLAINTEXT LENGTH = 128 count 3 +depends_on:0 +6:exp:0:exp:5:hex:"e63c2cb1a2c1282d473b66753494a591":hex:"084532f86949dfb7be2cdf09d2b7505418e7bca5185661e1":hex:"a26e8ee007ab90f599a1bc31cdabd5fe":int:0 + +NIST KW unwrap AES-128 CAVS 17.4 PLAINTEXT LENGTH = 256 count 0 +depends_on:0 +6:exp:0:exp:5:hex:"83da6e02404d5abfd47d15da591840e2":hex:"3f4cbf3a98029243da87a756b3c52553f91366f4ff4b103b2c73e68aa8ca81f01ebda35d718741ac":hex:"67dfd627346ebd217849a5ba5bca6e9ce07a7747bed1ba119ec01503202a075a":int:0 + +NIST KW unwrap AES-128 CAVS 17.4 PLAINTEXT LENGTH = 192 count 7 +depends_on:0 +6:exp:0:exp:5:hex:"e5c2fc20f9263da4f15b817874dd987d":hex:"0538fdca42f1fd72afadbe689fa8a396996d734e4f082c8c4ef41ef11dc6246e":hex:"35a261169f240dffe4701ce41f6dff986764afa6e84f63c9":int:0 + +NIST KW unwrap AES-128 CAVS 17.4 PLAINTEXT LENGTH = 320 count 8 +depends_on:0 +6:exp:0:exp:5:hex:"3f5501341f617cae30dd0afbfa247c09":hex:"72fcc9e5942344d11c3b23503b170e39cd635da3a83aa9ffb196cfb1d6eeae6dc5f5683238da6e9b49edbf95819bbbdf":hex:"e2a34da9ea2ad66e130251f8a7798b87d7bd7601abc5ae8f7305b024ddb4b3e00351484165e16d25":int:0 + +NIST KW unwrap AES-128 CAVS 17.4 PLAINTEXT LENGTH = 4096 count 0 +depends_on:0 +6:exp:0:exp:5:hex:"adf44a10a05e64f2df87db52f3ae18d3":hex:"a940cfea67b90c81b4ccd793f186dd7c6a3c0ff5a6feb5bbef99eaae2b14a979f1acee92b5e4cd750f40571804d380f470e1f5201a389476f97bf29f6699053f468bf102975895f4c1a679a46cf627b22c8d956679ce53775702899afa223c87621f859dccb876d317f2a486d0a4d4ad6ab7e2d9ebf7a956c394ffcff423377e21b274f8ca3a379273dc8de738c97bfd318871330abfe2539a49d4f03d0eef65856c01ebd426f2e76fab90466acbed8c4c9dc09898929d80244eed4fd51e7eff567c2b340e928f298ec00cc8839e1ce9ccdff40a7edd04e01440f2288c384c673de8a758ba50f6f910b8002e0786d2eb633da0ef7eff025f37b45f7c9b918863a56e2da1f3fcd12b990f959051289a1113054c38c135336f19672c86a51200763678cc4ef50ed290d96fec4afaa53af165aa7ebc11d787ab1c535a0abd00b477b914855759477df2afd516a85a66f8b91fb5f5e98232e601e249b3faa856bc6b26f1945f48542601bb4ff1c0dc46f44ae023c0a33ec9faa7467b1cdf1c08df7d00b800ef28e2f77f1e6941db9ce8e71fcf82a14cc8983614e2ce3cb4b3e976a8dec76e4309492ca68486d119cd566b9692d1a513ff30675737d1777a3a1a95b6588685b5a64d890cb8f79578fae8f1d22b83747bf876da582e56e5267ee8e734e0fa9271f5455c40fd599082c0acb442927643aeefffa5bca0a88c38671db14899adbb4819dd1e2d":hex:"a2b43c25c5f530a6a29c5314319bee95e0ad5a630aa8dd614b3751205118e35117c31de7d1ac41f9d782ae8456ef0387cff49eecfbcedf2d9c0b18182f5e043e3202c527be77e6f0404a9746ea1b18978a916cd47d40093813a3b0ba1cb22280fd7f00a7fb4f8def6a0cc1ef848a45106fc389e0ea00652151b1e61dff2cf2be83fccfbccd4fdce86f19859ac927a3dd08645cf072c3525624b3845a532e5a37d99db5cc943a0a9d42be4bc81134f314fd9e22ebd386e7a896bc2d56c933326edb18120c072579989c5bbb1991993a698f2a19387612b25a303e699d12003072fbea6e45569444107ff9a17675f5454440a6c3cc02c1ba513e26502b74a0cb6d397ff6d7d11877100fbfb5370fd882892ba09635fa3fa78d5344fa00008f488395f04a7185ec7819dbf3b165ee52b35bb4ebd10354f2d85514b2fdc1f825a4a2968ba44b3ff2812d1acc13c24ac49c22343b6080f2a7e7efafe86c6435195cb742c35d8178fe20ede0ca08278db49faeca90f95b9b17fc1ffb9d7b1d064f2266d32bbb6f3e28f3b17deeb9faa64f7c127c90241579399294eaf1dac93346943a3cadfd84d7cae1aec66877e892cfa31b5ae35eaf7c35faa6f4cd9212ef7cb2cf9df5748ed8194c380c3298734e1ccb87d0feaf49be1d275142f8421727b5a6c3415fb30ca44ab598597d136bd6d12435ae6ec3db72f6b85462878d833dfe5e6f":int:0 + +NIST KW unwrap AES-128 CAVS 17.4 PLAINTEXT LENGTH = 128 count 1 +depends_on:0 +6:exp:0:exp:5:hex:"5d4899ee66beff1bda1fc717a1ad4c50":hex:"bb7fd0bce778bd775e4e88d904d26a7134364c53a6c493a0":hex:"":exp:7 + +NIST KW unwrap AES-128 CAVS 17.4 PLAINTEXT LENGTH = 256 count 1 +depends_on:0 +6:exp:0:exp:5:hex:"84bc6ce7ee4fd9db512536669d0686da":hex:"c383db930ffd02c0073ac2cc79ec289e6866bdcc6a135a3b776aa42f14ee04f9cca06ed6c0b22901":hex:"":exp:7 + +NIST KW unwrap AES-128 CAVS 17.4 PLAINTEXT LENGTH = 192 count 3 +depends_on:0 +6:exp:0:exp:5:hex:"266b009e911bb55f9aa0661539a6fdd5":hex:"db9c94e7236ec56982d7ddeb9427c24580bc1fb96db98ab19340e03670045b7a":hex:"":exp:7 + +NIST KW unwrap AES-128 CAVS 17.4 PLAINTEXT LENGTH = 320 count 1 +depends_on:0 +6:exp:0:exp:5:hex:"51c2e3d090a74bfa10db090b63ae53aa":hex:"598a16c226e6c848a78ca30fa514edc9467f704b529c02c5522d1890b4dc21588ed6c3b070ed952adc733d865eb9d468":hex:"":exp:7 + +NIST KW unwrap AES-128 CAVS 17.4 PLAINTEXT LENGTH = 4096 count 4 +depends_on:0 +6:exp:0:exp:5:hex:"6a7814a80acae9d03eda69cad200ffe5":hex:"e1ebfaad7f6d46cd03c50ce4e9543ff01150e9a9a69c4bc8198fc08601ed71203e39375d600f69fd762b196bf50a7dee2be55574196005c8ad53234d789a9fa6f2f0eb7d7b53c7e39a7c70e9ef93c58bcd45c0f592fbcda19b5ea9a118bc2a0d49c8cf367d4c90823eafab86165db3aaa22eee9323de7d23b7729f7f088be9db421fc8256c20e5874bd0c8348c4a6e50436fc94136e568d0aa4c29d7b65136bb378ef010db091085c9c0802466d565eace2c0bd91648fa82f8045c57cc25c46bd8c9e4060ceb00e092f7beeaece1d4f8a2a01b5b1dc9de3c7d2ada7a44d4600085b7e76929198b9823b5ae0f74c652fb8793cae7c16cf062f39136789b213d1d500d560bda89bfc0df0e6bcb07fb4a48914e1af9058b73751aa4d98ef0363e48f9d1ed42230eca1b7b24631cbad80b2d4bfbc00ad1ab797c1c459214be8f64470b4d267ab576fc1d3c86a42610b8282437dc071336c325e606c2d36de1b24595f4888cfb2ddffb46557c964a4ac53ccc1d214d44ac84b8322c93db03bdf2a04b303de4f8482b8e7ee25030aa5ad8a8bfc5dd683726a0286486356f5a965599313a2c39034774ebf646fa7ccbda35316c54d443c6da466d9c95d716016326603c3989bd7545e3506333ab3e2ad7b45b225bc43ecb37e4c301b389e06b95f09b1a10beb5fd5320234fd6d488d5691ae2e078630f9f57dd0870cd617c30bd67ac8dbf4b3a8cf61067f7":hex:"":exp:7 + +NIST KW unwrap AES-192 CAVS 17.4 PLAINTEXT LENGTH = 128 count 0 +depends_on:0 +6:exp:0:exp:5:hex:"26045402548ee6196fc0a60208ffde21137ddb1c6c5d2ba0":hex:"fcd55c2c60ff6de19ec3e6b13490c2821f0c565abf10be2d":hex:"94b8276743184d086962ce6c4e63bd53":int:0 + +NIST KW unwrap AES-192 CAVS 17.4 PLAINTEXT LENGTH = 256 count 0 +depends_on:0 +6:exp:0:exp:5:hex:"b3a0aa60fb14b658e1eb1c1a5a8e1f60307c9b9faa2f1587":hex:"fdeda2a10e51da1817af2ba4c9f200414aec67545f5e71c608e85d14da8c5567bf51dec4ff2d8c05":hex:"65986b3a6a3658a66cb5beb302540bb032b36c76d040b24fe278a1473ad4c32f":int:0 + +NIST KW unwrap AES-192 CAVS 17.4 PLAINTEXT LENGTH = 192 count 6 +depends_on:0 +6:exp:0:exp:5:hex:"f0ee8ab6f804a2629e163b58c1a9e9039b53ac60493df11d":hex:"3593dda0daead2dcf850f8670b7d0692332f57068213a772a8244d058e5634d7":hex:"401df0c06aa4c58a71b9438e11a11a239f577b6037adf350":int:0 + +NIST KW unwrap AES-192 CAVS 17.4 PLAINTEXT LENGTH = 320 count 8 +depends_on:0 +6:exp:0:exp:5:hex:"579e58b2bf9c34c31e8c644faef6b698131624063fb2d795":hex:"b39acd09d9bf9daaa89304f76402065cc3d863e12df8a966f037146db9619e7be5ccbf50206773c5eca35e36492ef4b7":hex:"9c1f66267c2083a42f3da4e754a073c1ff151681e2bc070e6e4682065fd109088a096e72024fdcb0":int:0 + +NIST KW unwrap AES-192 CAVS 17.4 PLAINTEXT LENGTH = 4096 count 0 +depends_on:0 +6:exp:0:exp:5:hex:"366af2c7a1d7a1ee5a7c239fd526024472f674ab039bba25":hex:"36fb77bd3890aa0a4a4d6f65d671156683c48214a327e5b2b0916c0031f9f4f2c643ca721aa22e84853096bcedd7ef57ab2ae05628099bdbb55111358a06c1e99233b94a568a3f59b06d8a64332acf888cb5bd1fe8ed344937137eff629bee3ad57c73344df80b303994889bbfcd0ec08b13b687ec909cc847f383d3ba91d108c84254af4ab4c22df19897fef44b62d88b0c1b269163de9a2db56a26c4dbd0481026d27e5003153eec761f21c02f4d04898dd3ed961ab158e572aaf3b828a30eedf62a8a7b0911eff27db48ce1b7bb79b14ba43d7ecc1f87c82664c99ea857746c99a993db5807f0fb06114c00428b85ddeb9cfb698d282b1d70eb7c17d4d12575e58103ef1ed37c558d7c312f0fb1d72cbadb84561a41e4745492c8b1eea557efb9f1e9664ee995aa82e7f2a1c86dabed0b2fecd9e938c796dbf2f9b4dc269545ece94e354ca3436e4c6936b51cea7abcd2e49fa263f79757c4b5a8d18c2c6a26435fbbaf3fc759bb323ffb962bdd445dc7e5c84f9d98812e7eae254d19a06ea378b1b262daf22b634dc30aaf9d911cfff0905e5e2cfdd7dde4dbca75729bf33ef6d27d5993f19c9a3e60fccf5fa201963cea0e7caec99d79f83435d11e3a90905103c302851c8d33cef77b39c104ad4d8f45abdb111780c46784e6fd6a78e57862350a671ecbf01dd936b8dae4ce4a91d86efad8b04724d7c17a89b1d43d8abd650f88e17f5df1":hex:"40bc409ed0ba1966e733be4b2ff9d23691e6a9f44b0abebe971a47b4ebd51bb13bcf70bc1359f6b5e670be2e6b008ce9d219abd61ad20edd97aff7458b81e6114ea6d9c85a03400477b1a32f09ac5cd1a963731246011ef4908bacdbfae5e5921cba143b9395d17386e924db6ce40361740c6ae5acfdc979d45c8af70b443878adbb04bad439c9937a30bbecfc50b7005782bd01e3a87538220ca149286855129bd189f9bdb55ed1f7ab786f99c289032123c814e683db2f10970db79d2ef87f5a8a2cbbf7b9e2c447cb22d2a9d0f8c2b093a4d8aee57f0b05c2ac4f4ef780bad406b847d3c9d175f659105795236b072e96738043cbb8499292ad45acf7e576d8decdb635aeda6611da6c00a1badc11962dfa0643a83b865099de79416c86448280aad32f6797ef2fd879ba46abf36c9da45da4d0c936f6e25240cf30ffc79647720bf10ee18743f1ee3397dc0ed967445bb7b0df8eff0887d3f84abf20f0b2036837dd0308ed4a01f9d6447a9eccc9c471e75bd32f7d760216c326901ecd8590afcc2e697311e29f9d704dbeec409cc8c7fecc12fcf70cf9f718c12579fd17cef1e6bb44f89ad418005c2629a96275965f08c54a53e31cabcd4fb17021889bdcd4851ad33bb0d5438e55ba3b759dbf3c50fe20e6f3b8f1989f560818db1f2079b91b1e2d8bb22a7523c3137e9a30ab970f6019eca225e4b42bbe061f3b7b43":int:0 + +NIST KW unwrap AES-192 CAVS 17.4 PLAINTEXT LENGTH = 128 count 3 +depends_on:0 +6:exp:0:exp:5:hex:"9200a0f688d86c0b6bfd9abeff66341684a373fe3f9a3057":hex:"5c685c8596e374710fe327bafc45cd09190215fdcc03d010":hex:"":exp:7 + +NIST KW unwrap AES-192 CAVS 17.4 PLAINTEXT LENGTH = 256 count 1 +depends_on:0 +6:exp:0:exp:5:hex:"95c9e644559919cace6f93f545dbfe48b130808ed66d0964":hex:"7b8d1307e992221f6ffdcc7909d972d5f02e92187139cfd77f79345cb998bbdbabedb3ac00a6cdc4":hex:"":exp:7 + +NIST KW unwrap AES-192 CAVS 17.4 PLAINTEXT LENGTH = 192 count 7 +depends_on:0 +6:exp:0:exp:5:hex:"ffdbcbd0abc94c7f15e5b6e8a7190f1ed4f01be11f4f7ccb":hex:"e9ad95c8e9185a001509c50ae0098d45f7032575c7b8fd90a561716d2e5804fb":hex:"":exp:7 + +NIST KW unwrap AES-192 CAVS 17.4 PLAINTEXT LENGTH = 320 count 9 +depends_on:0 +6:exp:0:exp:5:hex:"253a5cbe79a291c0af1a3d7460e7f284bd672cd026753fc4":hex:"f71014ba711602df5cff2b93e86253775ea308bf83fde65fbc9a9a7852f87357330450072aaa3d6ef8dffbee20d2de7c":hex:"":exp:7 + +NIST KW unwrap AES-192 CAVS 17.4 PLAINTEXT LENGTH = 4096 count 1 +depends_on:0 +6:exp:0:exp:5:hex:"ff8666e4e538a6cf0a2a002b63716b06ec5f187785c2fc1b":hex:"f5bfda19b535cf39e240d5b42db06f385fb002be273e46d9e5ceed6be4b5f636031bd0622ea0b3abd0087a7280844ce7260594201214e601ada0f686da6e9b45fedbe36c7d13db025746fa6bba2e540a417a29cdde32f9a7ff56325233bf60929bfd49f80e21acc23f3abf572d81e96b556f6f4f20a7e00c1cacd6fad07df30d40de593c99f73dbd61bf9d9d5269a56006ae85d588324f7e140d9775403af631e695f7856b1bcaa377aa7f4f12c68096a974ef703435102d7110f4eeaca787744c942be1186d132bff2b39f160157617bcead75ae59288880fc0e7db9877d854f553e90e1c917a99b8f357082c50bf3b71cd30d016f164ccb85bff50212bab13cca8dcfff0be984daead905ab13054eb12908a73f37ed42c5638a5a410ba182a2bee2caa84e76af2a715ddd24e837988ec475e506faa130f0241e08d92567a69c9645fc2be3945d65a77387cfa307562c9b6c7055f98956c547ccc109da9277292f47cf43e3cbc0d2e91c916e4fbd70df4a980e9430f5c1c8cfbd6c83f0f756c436bc07e86d5c75aec7e4c039349f71fbb959db709427a33869c523c3486be0095c1fd61ac912cafb9065b94916afd9166d73678ffbcc396a037ebe75e44cd824b2196903950b528f537c8baa70530251bfd8a6f37b202453993534c06aada0d1dbf760879d0898026997f1baf63e343e94ae076da7d41ea325dd23ff2a9cbee74baca05a538543d":hex:"":exp:7 + +NIST KW unwrap AES-256 CAVS 17.4 PLAINTEXT LENGTH = 128 count 3 +depends_on:0 +6:exp:0:exp:5:hex:"e594f0067cedb74e883e7746d29ba725c884c25375323f367cf49d17ad0f567b":hex:"3b51ae2b0e3ddeed94efd7bfdc22630187e1f7624d15ed78":hex:"587e3f6c75644bb5c3db9c74714f5556":int:0 + +NIST KW unwrap AES-256 CAVS 17.4 PLAINTEXT LENGTH = 256 count 0 +depends_on:0 +6:exp:0:exp:5:hex:"049c7bcba03e04395c2a22e6a9215cdae0f762b077b1244b443147f5695799fa":hex:"776b1e91e935d1f80a537902186d6b00dfc6afc12000f1bde913df5d67407061db8227fcd08953d4":hex:"e617831c7db8038fda4c59403775c3d435136a566f3509c273e1da1ef9f50aea":int:0 + +NIST KW unwrap AES-256 CAVS 17.4 PLAINTEXT LENGTH = 192 count 7 +depends_on:0 +6:exp:0:exp:5:hex:"e86b9c1f74cc87ab8ca6a2fa1723fef173077e684345b90dacd3d485f587d320":hex:"c97e8c25d498430300982cdcef592e34176e33e45cd59b19f7605f52e3c7b997":hex:"261313cbea4b246e53affe1f84bd4c900c9b1d1842d79337":int:0 + +NIST KW unwrap AES-256 CAVS 17.4 PLAINTEXT LENGTH = 320 count 8 +depends_on:0 +6:exp:0:exp:5:hex:"5b7f48b8ce77007481667e9900f3077a0c9407a70082b0de29bbfbd716a07149":hex:"3ed16c7e4fed98d76092936e94fa5696c787ab63cb764e930fd37f917be4e7e60c90f327f0865d279e6c449b96301ed7":hex:"4e0e6c45137efbf858ce896c815268a10d9869ef5668a90739b7eff99617691fe63b911afa53feca":int:0 + +NIST KW unwrap AES-256 CAVS 17.4 PLAINTEXT LENGTH = 4096 count 0 +depends_on:0 +6:exp:0:exp:5:hex:"9e92fc974e09541e6cdf1415575511436ac04a56db186bc0e60f0fac9bd58c6a":hex:"201010a2a33fac1d20230bf5254204801de29e66cc44eb391b8e77284b3dbcfa3fabbdd4d9423d96af64ee0dde35786d79b7433021da27d6be753f91d2c1d63b40e9dc265b4a27cb2a61018a60ba5e29813c012b6acbf7d7d101ce227e45b5bc8a16c604c83a99ef35aaaa44fcd2033cddb6122db2dfb944d4b5c16dce911c5f4a1d8db46785534e7a090e31fd2192be64fe5b72efaa8b7965552bab4a20c8eac9a9e7b35e77df0277a90b0b1167e14a8be8d0bc37757354eff920ef93ad65c5a49b04bd553883efe9376811986002d4270d25c5749ee1454270a191084fdca53ae693f5a31b13929fbfd68b331a4fdd2259031f812ecf50d042a55fab302375057cb5b36735bcd2d75f745fd4a92580ecfd0fec44313ba9ca8cb1893f7a329638c17608c170de0ef68123c2233fea878fb1b49ec7478d9cf70591101bfd2d6b0328a27f7c497061b79289b6db4e46199c5db8121e9e1adcc8d64c85c27e329883775073d5f61b0bc470169ce8837b61fc23bbbe7e07d265b32cda5a94acea4bb2e52af17e13818a7ea424ca7fae7677caf405f04e37c2cad0c77eadfb4ead593f79ecbd8292e47b7838d775af9d9e252c6ceb147ccc2aadb01f8541871e5080109f9d94afc9103579bc9dbfcff8791d5eaa68521806590eeea74f411731b920a91c4f4542a60e6ffccb1285dd30e74292d5f37f33d4cb74742ac98c7a0475e069828dcd7d8301fc":hex:"4b6f2257197b0692e6026d531bbe2f222a6764fe1cf277b0320a6bdf9efea0a3f304e94fd22372712f751aa377264b1600f3c1e7e0ada846082ab4885a5c9a51b1b25a593a269a7ca1b62a28f1a11b80fde57f0b9c0fc0e38e8edea8a294e18b4b1e0e24a5ae0e9d9fa0d8cf02378e592b322ff04c5a487332b5f58ad3fe9a0c20a205f6872c9e2d0c52c5b29c5c2f008444a3e8400b4822d39f646f9ed390c352615c4cca8cc0099ac1ec23ad7ef581ed33f9fd4a8a58eb240fc79bfc2df7c1606cc52fb97493fa59a0dc8dc01fdd9fc9fb51a2f1e9fd6a89cba67f001d105c456d99c3b1fd68dc9d01b1b8e0e4c2ed4eed63c0110ea6ee96b54eebcd56c5446dda210a9e143366014e72d5e4bf78bacc230641789ae7caa0e37682190d8007aad0a0983e7c970a6feb1112ee5920f628ba03493cc3b340aa9452e6698f818e6e409cd0a7f660094df05646ea0e6c6aa94e933f4fa4feae6207eb473f9d80e335d6020138f1fcd085a336bdea158823cd47079a89ac18bc8541918ccb6bbbe1aab5ba7d9c6b5fc9ba17cae707a556c2bf7d1f991f9a8ebe0f9aa6e395defecbb508cbbf68db8da443ce8fc40149c3c84314986615ca5685e5e2162ebc617929a7e402a6262a28e646d7f503253c30ff2e37ed6580676a9978aa2f5b4fe82e1c2fb83754fa855ee54a61e64a16b64a680732b14671ff55b3f2a6415233206188":int:0 + +NIST KW unwrap AES-256 CAVS 17.4 PLAINTEXT LENGTH = 128 count 4 +depends_on:0 +6:exp:0:exp:5:hex:"08c936b25b567a0aa679c29f201bf8b190327df0c2563e39cee061f149f4d91b":hex:"e227eb8ae9d239ccd8928adec39c28810ca9b3dc1f366444":hex:"":exp:7 + +NIST KW unwrap AES-256 CAVS 17.4 PLAINTEXT LENGTH = 256 count 3 +depends_on:0 +6:exp:0:exp:5:hex:"605b22935f1eee56ba884bc7a869febc159ac306b66fb9767a7cc6ab7068dffa":hex:"6607f5a64c8f9fd96dc6f9f735b06a193762cdbacfc367e410926c1bfe6dd715490adbad5b9697a6":hex:"":exp:7 + +NIST KW unwrap AES-256 CAVS 17.4 PLAINTEXT LENGTH = 192 count 3 +depends_on:0 +6:exp:0:exp:5:hex:"81c93da5baa5157bf700fd38d7d67662670778b690cfbca9fe11e06268b35605":hex:"875e1ca385586f83d1e23e44ca201006df04e1854e41b933fd607a7383ae1a39":hex:"":exp:7 + +NIST KW unwrap AES-256 CAVS 17.4 PLAINTEXT LENGTH = 320 count 4 +depends_on:0 +6:exp:0:exp:5:hex:"c42c53da9bd5393e63818ecc1336ec6dfcf1d633e51ebb51c68fb0997c979e7a":hex:"52f7b481f72bc2d41edade5388d38c2ff75765939576e49bab400040a14ff488848bef57d1502c06a3faad471f5c3178":hex:"":exp:7 + +NIST KW unwrap AES-256 CAVS 17.4 PLAINTEXT LENGTH = 4096 count 1 +depends_on:0 +6:exp:0:exp:5:hex:"7b51259246dd7252f6a7215fb11fbeabfabafb0f8856afae525af8feb81d3490":hex:"c625853da9fdb8665264c30539a258ba61da8bbd214f3f493e292f686dce73c003aea5c4070ea94b19e486019b18a2f3f1d836b85414bab14eb99baa283cafffabc8498cf1151489a6a6a0d01e7041633c94f9cc6cc3dfcd661c9c4a0bf77d9be168eec29cb0efef33c74d2dad18ae2ac2b5efb519f4c1f12eaa7a7d7959e7a6dec681e4d1878b20054b7925d2da0b2f8730604445ff3fca3a06285a4a2d86648f10a2bc3cd422646f70224ec9025e7ce701c8b521c0392fd7d2ac883f2a37bb7e4d53a92a620e65e090b91dbcdd616a13b3948eb1b5a6b1bde80f03dad61aba3223fd91ca3df68b0749fd049813a7ab0268445793b16677bc1af00f877097cb14798777ac817d0df82507aec246f755ddf95b19bb56ef9f2e730bcf2863648d8b164656df37977d54eaf05063b0ee8ba61c2a2ba7dda8fae337d5f6ba965d9e643b4534ed9f4eea7b2b26680fff50260e245fa0d63139b40e2f152da3a976589e957be22cb0885cd582aa9468b08f08a22b486767a6b99c1778ecbd763ebfe2bd83c6191f4e8a84972e4920452b2b2dd28be5d7bda05dc3422419793ca8c26defd3b42b2cc99bbad98e7461f034abf137d7b3166c94e20bdba091653c6a17ccc4faf86a7ba6d2abc0ecada9103e73d9ee4659b6e991a1a209d2ebd96c24759c69ad13a03431ddc05abc20dc8581b1e526f4d98f6352ca4c77f5479db234125fa585ba275fbcbdbf":hex:"":exp:7 + +NIST KWP unwrap AES-128 CAVS 21.4 PLAINTEXT LENGTH = 8 count 2 +depends_on:0 +6:exp:0:exp:6:hex:"20501013aa1578ab32704a4287029098":hex:"382179a39d75756f57763486d038b50f":hex:"14":int:0 + +NIST KWP unwrap AES-128 CAVS 21.4 PLAINTEXT LENGTH = 64 count 5 +depends_on:0 +6:exp:0:exp:6:hex:"a099fff482dbaeb53aad84f81b916da0":hex:"b831c7137facaed059cbf268767e230f":hex:"0d24299443bcc444":int:0 + +NIST KWP unwrap AES-128 CAVS 21.4 PLAINTEXT LENGTH = 72 count 0 +depends_on:0 +6:exp:0:exp:6:hex:"4d49e260348172c38a79eb925b189b12":hex:"54755a93ff5173aec60d1eaa8fd7d4090f00f638c2831aa9":hex:"2bbe64479da7c45976":int:0 + +NIST KWP unwrap AES-128 CAVS 21.4 PLAINTEXT LENGTH = 248 count 3 +depends_on:0 +6:exp:0:exp:6:hex:"6a5a5ac4ccedf055d7562ac58ee7819c":hex:"46904a5583e8a22f4b2f5aa8d071f5cbfc938130f1b33f2e6401aee7cccdef2159a89c9b682cfaf4":hex:"33ac6837955300e569b29958985cdbd434c18208779a949d20b110b0b719e1":int:0 + +NIST KWP unwrap AES-128 CAVS 21.4 PLAINTEXT LENGTH = 4096 count 0 +depends_on:0 +6:exp:0:exp:6:hex:"1dd51f0d3a0a784174ba81b2c9f89005":hex:"e1bde6d2df3b8e48ca127f97b56b5dc2672b3736cc3157c7b80a0316ef1efbdbbce19fea23da831836ccd2e002b2c1dfad206b5cec358446b8434d7f4c39e65b0e0b50897642ffc34bfb3cb3e233aa9c1058ff0d4fd48e98bc8cc3d214c06d514dd97db2278093a308f91f4ae92626d85771fb1447b36a3467fff02ac7e81ddbd0fdbcd02d1acd4f053c989ef3dcc2c01e23bc2f6090f3e8c0ba5f0082341200b1c37b99daa9cb6fec78bce3429aec5badb9fd28fdbdbdc5d53570675a9e39535b4594095658ef950ecd79a162223b60d2eb91765e022dc6e1bbdd86f1bcc280ed9df350da08a801fa16a1bf2701947acfb08f19fdfcaa1d76f466a5de2458a78fb82f6af3e1be68f405a4289f25896f4c9830005c9e895c86e67eceab0ad544856071b8d9585835b5e85a07ab01515f7ab54f98dffb4ca49a15068eefc6a01f7f52fd1adbe3631c59f6f43f79d2b4f2a691e2b30bb1d43a848dc3ee39c7f2e50f0c9deb7ab51e33bf40903ac255bb1510fd61676a6c13c3c776b8aacc6cefb95e24973ebb11192e2692dd0c6a085b58f86e11cc28ee2194988c123e3666da7339c0a4ac6afbacc83f1f100fbb39efff7cc605c9213828224a17c476395aeb9bb0a3150fb8889a8c2a494c8c526203f261642bfa69a94b86de9e6d3d932fe20fffe4bd76d502c0d437a3e1d0d8727b7a8dc0e361967109e93566326b6c517663731c4c9bdd0295d8":hex:"1a4eed4bf5b8d2e2a58f1f1277f164cc32cdadaed848f76fe634034082ff9aa1711870bf3936d01a2aa48de30de5143b9148cf56f4490f9d480dda0b672e8e17a012cd26cec3c68837bd5b2f9beb13e0110f21c6c36343e09e027f39557d1596d4ca406e3e7aa113e9bb8623106bae25f0ea23d46bc29970ba2596f83fe4f73a6f978a4d949fa7c271570a2ae5d2b50792d5ab5c43d455f359fb83c35ca3da37cd73cd66b6adce94d78ecdeabf667daa47ea70799af299e1d898ccf3fca6c42c6fff8cf2ec992f596fed4a0cdb502a00f9b5689302931d15cba691e2f8079a0411332438b714ace5234b91e4aebee8f8dda0e1968c2016fed350430a65d8d206c9436f40b79ce03083b8dc207d6960be1ce97007ed22a388ebb7b3d8f7d2b7d9f8f49731fbcb21e21db0cdd15674c795d5af2b2cd727f83e634e8c47157ed0c6873a5c9419e683f16f4a7827b444967812f9d1adb9201b89a0e66bbcf0591465f5d7036a21cdda0e10099feb819dfc37fdd3105120044dab716882d3971f312e3f4459006fd5a1eab08ff63edf6718f47ddaa37f7f40c9c372995f3aec97bc45e287b64fc8cf5559ab04a4d4d3ed482f5d61d3abd99cc87ee406da3ab9c9cd22ba3b8d191b26754aa94a2412f39e332d77fe72210adb0cbb5c96adebdbde036f1f1aaafad74a7ac2594f81efa734054e2e16dc931d49b970b81756862705fcd4":int:0 + +NIST KWP unwrap AES-128 CAVS 21.4 PLAINTEXT LENGTH = 8 count 1 +depends_on:0 +6:exp:0:exp:6:hex:"30be7ff51227f0eef786cb7be2482510":hex:"7f61a0a8b2fe7803f2947d233ec3a255":hex:"":exp:7 + +NIST KWP unwrap AES-128 CAVS 21.4 PLAINTEXT LENGTH = 64 count 7 +depends_on:0 +6:exp:0:exp:6:hex:"9ad15907cd05d77b844816b1dd806c92":hex:"7aa0e5d322363afbdd71b531e50d4935":hex:"":exp:7 + +NIST KWP unwrap AES-128 CAVS 21.4 PLAINTEXT LENGTH = 72 count 5 +depends_on:0 +6:exp:0:exp:6:hex:"2005cbe9cc66a35cafdff1af119ae6ce":hex:"60f9c736ec3619efdcc7cccc6b90ae5cdb8bb9eceea5dd96":hex:"":exp:7 + +NIST KWP unwrap AES-128 CAVS 21.4 PLAINTEXT LENGTH = 248 count 5 +depends_on:0 +6:exp:0:exp:6:hex:"2c3b49efbf60ed01a3ef27ee24ac90b0":hex:"5fa5a87bec09a3e05864656f8966cd38e1c4af48a06b1dab4ec9cca35dd0f92b54015fe5332bdef9":hex:"":exp:7 + +NIST KWP unwrap AES-128 CAVS 21.4 PLAINTEXT LENGTH = 4096 count 2 +depends_on:0 +6:exp:0:exp:6:hex:"4b4c43c9de4fb4a2a7a7adafeabe2dbd":hex:"6e4d08b8124f7d3e23303fac1a842014f95e3d71c438f8f1990307842796dc5e404ad81802e35c183fe000390a12c81ee684c5cf26c1d90e414cfffe6931b0f352936fcf0b31429eb5c7612cc359a15371390e518cf5c6a6bff1bb0348d14e2c39b98c9f30672ed2af1d96296df8b5567db25b9510a2083461810e119735490058ed1b46b7fdfa885041d8749f90a072b43ba49f2f51fbcda0dbf3cf99fca1d8f46330e5f6fe079d6679cfa26214c8831b782aaa023a2e0ea91050d277dab876aa6865f2bb3fc1a4a77db52f6179d5e5325993280948b6b7002b572829641d35ed3d735d8423e5b24673c4570ca25064fc2c2ad4840632536bcfaf2a7a814f3eaed92b4d501bc51c1719a0d8d8f420b66db845682bb41c88038cfedf13417143a3a701b521a9bf0bb639875a728c3b5ce6ca7e7a45bc75285c193902e6b5e7a4c6e720493d3937bf485e587bff894f70fd6165a1d0129cc673a992e0a4f5489d228a066b1df60002ec0521924f8d672cd1452fec927e58e75807b2a390256f920743fa4d0fc8f59f2469a595ef65095ca0c80adfc843e9e69b6d4a3f824af47b2bfbf2a7a6c1b650378f096f6f0bfabc752c8f279d4f45d56d09dce97962c119de3a64d83b93ea55066f24d4238a229ae86e6a7857af1d8aba823370a72fe358046049a84a70213ef31d9e77a722def8e21480e79b71299438070946bd459a7251707446c911e381":hex:"":exp:7 + +NIST KWP unwrap AES-192 CAVS 21.4 PLAINTEXT LENGTH = 8 count 2 +depends_on:0 +6:exp:0:exp:6:hex:"716da5cce5877d8f305b5478d671f6c73eb1bff4de15df07":hex:"dbd5247ad2445575cafb00ee7707c218":hex:"bf":int:0 + +NIST KWP unwrap AES-192 CAVS 21.4 PLAINTEXT LENGTH = 64 count 5 +depends_on:0 +6:exp:0:exp:6:hex:"b94bc10b85a8c2f74a66fa723a25ea1b398a4f627efe1ce0":hex:"18eef64a022b2c7db27648cbb5f1d5e6":hex:"19c0f2f78606fae7":int:0 + +NIST KWP unwrap AES-192 CAVS 21.4 PLAINTEXT LENGTH = 72 count 0 +depends_on:0 +6:exp:0:exp:6:hex:"f61cde8e515d59a8ca95efb1a98ed4216c4a9649151babf2":hex:"83fce85e9bfc6ed784b052472e5780fee662f17a91faf1a9":hex:"1c6883862ede37b31b":int:0 + +NIST KWP unwrap AES-192 CAVS 21.4 PLAINTEXT LENGTH = 248 count 3 +depends_on:0 +6:exp:0:exp:6:hex:"1c883af75147bae6f34205cd656ad30ec97e617456591ce6":hex:"f24f6747711cf72fab0422026c6d548ccdba786d77ab900ac3fb8f39f116d38e92c82d5fd9a045dd":hex:"bdd793f086d8733f69055bd79bbc448be857286e918fd4c54be4acf4eca5e4":int:0 + +NIST KWP unwrap AES-192 CAVS 21.4 PLAINTEXT LENGTH = 4096 count 0 +depends_on:0 +6:exp:0:exp:6:hex:"1b38d4b366f844e71a8db6be2b77a05a9e81720d2d3f31ee":hex:"62ddc158ecb048250bde439dc7aad34dbe7667d330a349026266c24cee9742953b623d1e247e501641b45b60cfbab665e68040ce06ebce478d9d77f5f344943a1edb14f0d9f165ecfe407031707961fedcd016559228bff5761cd6542944a5d86f9acf4e0a4114682c2312b8d4e8285d3efe1a7c1526642c73c332a9e484377a1c86714e3cb687781928c8a5fe28b4aa74e79f53ecd00793e00041b39b172e5fedef3d4164dcc6b2d2e47994e73f2ab048a4adb8cd94fcd7767314ae40f8cdbef2b26d25f74277a2f88f1de56342a0ec97fde4df2d052e6ebc62622f65725d845f670a647808666c7325725a3428e26fefe725c2badb8a8b8f04e30456bd1fd39fd0f7c782b7a2bc9d8c53922a54c5f103551271af6d7243133b96cd1c108811e4beb9a56472c1f9823a1e88832c5505e07cb93b9041f4b8d69cd27403680a18bb3848c269babbc52aaf568ee8245f4f72e177257103dd4bdffeee9b48e0660d6c2f4dfdce52462d0ed5cc5114dc0aa5a35601c9a644a1fdd3c57c3153e65a108eb94eea3bc9979a67a2f569eb7398a4bd24547c15faa361bb2950a379a1cad1737f56e7c210652aaea7581f39f07ee09a101fde8c34c3cfc404f2b8f682735fc4c721eceb4bd2295d8a74ee3cb858329509eba9049e7e791e04d8452b50c6e6225b94a8cc10ec1d262588fd2f05eee08113414e770c83caa84d310559286c393799117c177089a2":hex:"b1c88d3e5648218ee085abcfcaf7f362f33e4d6de363cb84182af9f18a31475f0e14ae8eff76ca67455726392a110ca262b90d040abf49beb036db096be053d493787a67e983b63945277044acf648172c75b38d7f81dcd58e3bbcecb963dc95863877784ac04eba83481152c30b1ca9e9b78fe537deee6c95933e1b5fb414cfaf7ca1dbbae8b114f0538f4cbf433ef214b776faec9ce1d29f680f4c88ff7b9ba0e964898dd253f5f82ec9f25663ece9dbff5e284f63b0e0fd07fb13b41aa8359f1ba1666bcb26e65d28b1f899952beb28b8f902f048e31efb6ab4817cafc6d84c7f4676b50936715667a67df7ca965b3ab2a5fc472375b1446c810242eb1cb78b9ac496ed4715e0f89a4e1ae0e2724edd59c954f54196ab55ac1947528fa14e716b7707aeb023bd0a2242da7ac97f3feb7795d9be05cd5b1cc33095599ab4c4d8d583c9e2a4d4ed12b836722370569737fae2d6fa60c8a5b8a80fd71129fe29395746eb746528a8845c5a9d50e7bc4372e7f3f9c6333feec791529a6ae1bc0f620feb604f56969e4ea3445810c72dd0772856feb58f09796f461f7ab1b454c303c810eec7526aeb397520b6114f57a4d906e974e8d4a910afafbb0f030b18887b951052d18578022cb7e33408578cdca34f32012f62d3dd35cb74e9d0fecac52231c5cf5a34d470d3b5413644c4e2af1f1613093a3b0550f8df26d033a35b9b":int:0 + +NIST KWP unwrap AES-192 CAVS 21.4 PLAINTEXT LENGTH = 8 count 5 +depends_on:0 +6:exp:0:exp:6:hex:"df8f5124b1e03228f2b96f0df31924bac1d3b5d094da22e6":hex:"230bb26c1ea9d5c8fcf7c122ea994f41":hex:"":exp:7 + +NIST KWP unwrap AES-192 CAVS 21.4 PLAINTEXT LENGTH = 64 count 7 +depends_on:0 +6:exp:0:exp:6:hex:"94c8dae772a43b5e00468e0947699b239dfe30ab5f90e2f6":hex:"239c6bceee3583fe7825011e02f01cc0":hex:"":exp:7 + +NIST KWP unwrap AES-192 CAVS 21.4 PLAINTEXT LENGTH = 72 count 5 +depends_on:0 +6:exp:0:exp:6:hex:"d81b7162dc6e9e18bea6e258bddb53a1c9f22a4a7177d9dd":hex:"4f3a2b7b229a665776f9cfa42e0c2a615a81f69cc0f0f465":hex:"":exp:7 + +NIST KWP unwrap AES-192 CAVS 21.4 PLAINTEXT LENGTH = 248 count 1 +depends_on:0 +6:exp:0:exp:6:hex:"688833d56cf1a0f492bf1f7e35c2fa6299a2b1b5ca2a2823":hex:"4b7c17d7a7189e7955c03abb0ca95fc0c780953787972097ae596d46fe2a8cd75995e6309780ae5f":hex:"":exp:7 + +NIST KWP unwrap AES-192 CAVS 21.4 PLAINTEXT LENGTH = 4096 count 2 +depends_on:0 +6:exp:0:exp:6:hex:"4b0faa630930b0ff8e624aeb4ddfa018a858cfa653132675":hex:"1640db081e87ef7797a9f17509f5bc67d40beaef096131748f413cac3d2500462b61140b31bc3965958af51351903549e4a71db589a6bc67d72ec33b8605a25a539a2043704389e3e0781152dffa9b64d6ec186ed144847434345e6dccefbe26626eebc4c22e3957b2145c46fa11d7819d4195cb43a9db8d2de507c023607548b56a07628ce4c706939fde1bdef8364b2b8fb7db30fc5c8e99f29876130d9f71a8486d99f2c7fc09f646918d4c60e53c7b9f9a8a1e9a023d70448f6b79c3f35cc6b9ace0535147f7f27be66d918895b9106cc83eda1aacdc2bfb7daa75b2867ae63109ecbf9423526511c64c4261e395d9b5a68dd2503ada57cf1b8a18336b8d63d248ec4dedb6e30662336546c86ef83b53504bc3bedd85a027b6b9f0323bd9380d9ba696b77072d98f96b77f9b3ad9e219715122b2dd033529eaf7ecced8be6d1e6467b8e4a61105be9b7a7ce208b6dd6bd34481f80b3bf534fb87904d45986931a088480a8040047c681dc4e8ec1c625a5449d9ab28709d04989c4b1a4ef0f1e379d37fe6f0641b9e705207e9a0652463cd5da71cd50321116d4ff1cbae08063df336482eadc0d117bf119e01f2577afe182e7fa477ec53b754e347a2c742960b9bd355f969e6ae1df2210e75bb44c598b683dd4c8692f4cd1b92125ac9ed10ec4cef6289d3f815cb894e74dff0bb72d51c43cb420d74a31c681c10ad7f9258d77f1f186c926a":hex:"":exp:7 + +NIST KWP unwrap AES-256 CAVS 21.4 PLAINTEXT LENGTH = 8 count 2 +depends_on:0 +6:exp:0:exp:6:hex:"da862b25a629d328cf9fac7be0d6ead1cb2404e9bab87a2381a46eb1a81187c5":hex:"5e01a2b9b8413f303a3578d2cc255fda":hex:"d4":int:0 + +NIST KWP unwrap AES-256 CAVS 21.4 PLAINTEXT LENGTH = 64 count 5 +depends_on:0 +6:exp:0:exp:6:hex:"362586d516d38e4d58b50a441443e75064cf6d6cdb6420862932ba7b0480b0fd":hex:"ea7ee0f5af3a271a9777838ed13c61af":hex:"f1b92d0db744bfee":int:0 + +NIST KWP unwrap AES-256 CAVS 21.4 PLAINTEXT LENGTH = 72 count 1 +depends_on:0 +6:exp:0:exp:6:hex:"0e6d542f960c7e61ca190d7fd719fda157030a0a013164613a8c522b52ae685d":hex:"b5cae8a82095abb3478ab167dbc0201d2f4dfc5f81bbe44e":hex:"a957eb4ea02e68ba8b":int:0 + +NIST KWP unwrap AES-256 CAVS 21.4 PLAINTEXT LENGTH = 248 count 3 +depends_on:0 +6:exp:0:exp:6:hex:"0445b86d13b7b76c0089a63dec70c32fded9607af63714b7c3cc724f49c1c6e2":hex:"7f63167976e71e43b7b135c8cd12148f826f56e73f6fb6e7f6cefa23c34302ff374d44dd66b6bb01":hex:"7af8c3b32e61f8b5c027383a273927b8fd09b75692bd0b713ec8ecec0bdd2c":int:0 + +NIST KWP unwrap AES-256 CAVS 21.4 PLAINTEXT LENGTH = 4096 count 0 +depends_on:0 +6:exp:0:exp:6:hex:"08f5c088acec18e6cf1f03a8f85d772e327e7fb07f8c2939eb554e84c42ab93d":hex:"dff30fd43647d4be54cf2dfd6187e2ddffb55267313f980fb09c833a9c2bfa558a95861711f0acb2a5c7e731ba22f24a9c4dfdd9e9b0216e9088f817a175b9835b0e17615687a20f68c067205626494cd04fbabc0b3eea7c0a4cd6236bc8b3e52e721dfc357fb8a3722bfcc4c690d8f63dbb864bb6e3a15805aea7270f8eb748deebaa2d066fcda11c2e67221f9a91d2c29a6c79ffae76aa80a2590b4f9e35f623fbf2f8ceb2a205493077556a186e25e5bd52dcff7bcc6909b37a66c1d1431be1b363bb40da25386eaaf5fcabc7be6422a04434a21d1d3105328e7c56770b9f59b03395e4138f5f06fc7e6b80dab87b08caa7bfffc45a095c15263efd3f06c651ded6f58074efc20620d704997fc84721a0a8e9e5b9f5cd330bbb156b31d9d1b1c260e4a24535f30404dc5b2dd6b35d916a1391b25a7d8790be09d85483ed1522074a2785812005bda10dd55acb245b3bd3d9bb777dd23f9b02538ba1a114ba53386d7ca4d9524b2f8a18e0ffb21580b560540bb2146f08f04974b90eb324547d56222df95f44bc6e5f183bef283e4816fb1b2933f9c7c6726a245a495e304d8318d0008c51b0be8090f8f668fbc3f31e073be4b9e97468f4dd8c798e9d682868df493db8a85738b58cfd005190f365849072577772672c6f82555c65046eb34e86fe61103327a063bacbbe33cea7eaa3d1de45471b7269e1b6b38608626e323447a3d5fe0599a6":hex:"8b68f66a3d2f59d419851b94d9a6f2f0e667f8125e11d463a6bc2cea46b12dcc40ce8018b204972c735fdd6d2d05b628f4905c6690f5ac5b1b51e12f3af2dc3ae9b9dab616f0a2a66a1ac197592fd5b15900547f32f54110b58d51a0340aa80e9eeb7b2e0eb97e80aa22ba918f2fe1c678c730ed5c3d8d24774f17d8ab6e01a06243d36e764df1dbb8af1faadbc55281f0242abd7a162c984fd0b05ab8b0bcaedffb2962024f009a8d7c9e71281c09f52ec0707ee3bbeb1ecb918be6ae3e9c1fabbcd3512af928db3ba6c109ff9e9839a616b2a53f092160a48222b84d53cd52490515ef93e1ebb33897263492ab8ec6fad2e633276ae367f76d7f926309478c0205d4f22506a451795dc98f5410d8f5d3e049cbedf381620861e7b4ae08f2d8a71abc1f230248cb636a2d7b4e7717ab2b7b5f2dc6e5b5a18e8043254208b50fd6f8929eaf974c48551233661ad67321b64d69245d536d9a8ca2a6a10966dddb9d2ce36641c9281c460ae524b077867258f638e6ac872cb5f5c6fb216b1ae60a9d0c5ea0dbcd060f255da26111175af4e9935df59ddade6a2a70cddff8cae6a98e4f3843c2dd59d09053b07b648a46f5de0eb21ebb192828279a386ea3eedf2cdc355d73d51111e8c1d522e059752bc56226a4225bcab713bfaaaec78167d7cfd33e913b26fda93ca7524aa8a8b17977c88ff9bc23ea810b4de59eac18d1523b":int:0 + +NIST KWP unwrap AES-256 CAVS 21.4 PLAINTEXT LENGTH = 8 count 5 +depends_on:0 +6:exp:0:exp:6:hex:"5fc3ef43eef256993fb00e6ccc90f60319f10a3bc9fe5ca4ec876c165e2a7720":hex:"f3d922a948969acca293bc3daa027e48":hex:"":exp:7 + +NIST KWP unwrap AES-256 CAVS 21.4 PLAINTEXT LENGTH = 64 count 0 +depends_on:0 +6:exp:0:exp:6:hex:"398444df32841be9e699c64faa92630c834564b8384876dceb471c4056fc8299":hex:"30032c9a3ed00d29512d8c725fa86a4b":hex:"":exp:7 + +NIST KWP unwrap AES-256 CAVS 21.4 PLAINTEXT LENGTH = 72 count 0 +depends_on:0 +6:exp:0:exp:6:hex:"64b69233fe392c0bcda28a931cc3527b1a8f29235c1adf6256556c685cb89b9f":hex:"6b5fd75ad16eda04a8b29f1bc0411ae28befbad9e474f2d8":hex:"":exp:7 + +NIST KWP unwrap AES-256 CAVS 21.4 PLAINTEXT LENGTH = 248 count 2 +depends_on:0 +6:exp:0:exp:6:hex:"8c35fb77766d04f48d5b52275c5c5f31f568078419e5c2335918965fbe53cedd":hex:"bacccb1714dbaa4908c2654aa8dbb1ddbddd8ab819429b026619fb1c0fa75a8247372b2feeab1e1d":hex:"":exp:7 + +NIST KWP unwrap AES-256 CAVS 21.4 PLAINTEXT LENGTH = 4096 count 3 +depends_on:0 +6:exp:0:exp:6:hex:"1726706350c11e6883955f24ea11ab247ce3b2ab54d05e67ad9770b5564483dd":hex:"b006f26a67d0e1e2cbeb5c23b6b300adc1526d1f17bbe964fe8237ae244878158e6b04cb488786b5258ac973c3a2eafd7fcf3a7ca6c825155659fbc53d112bc78b3a770cf059fdd5e68f2b4bfa36de3721231102e5041c947fba3d906bff39592ec3901a398da23035f1190e99b58659330cc2e856ee87ad4197dcc7d16e1f062275bced1ed5cd82163ae3e58da7368dc2aadac855385bd4fa0b8baadef608d0a5c27172d12b88c70b136eeccf37f36364361a990dc50815743cab1636e661bff04ca8345520c30b935a060b450526b1d6ac09170e5b0a327b88f42327b85c9a621d2ca745963c2815a2bfcf509d50b6058ed6e67f369b5608d2aa885238b67d1b8e0d83f9464aa473bf109350fcc02e360c2619236cbfbf895b607895530d8d3d2e41450750dad05b1c37ef15db7fb4707597ac252e8e58d4c1ab2713b427643d198164c908b5d8ff36e9700157284009c7b283633d8b27b378bb65eff8aa59b5fe5e6437a1d53a99c106c2c4d033d3d23950e313a10eb31d68524ae9f8e4f56437acf66db3e8f77407a15bbff4b393e5559908993146d93c673d2aeb7d4cb8fc8d0169de7ed6e2bbe6ce9958a0f5d201419e7acb17e47da827ba380d6b3ad3b5a8c2101c5fb501110c727169065f23297947f538ab3ec165d61edc1f6a9e1735e9b7fc06d4d3406cf8f9c6a68b196cf262324a986705fbc802cdd2e6b4ebcf68e6bb9e793ae644":hex:"":exp:7 + +KW AES-128 wrap rfc 3394 +depends_on:0 +5:exp:0:exp:5:hex:"000102030405060708090A0B0C0D0E0F":hex:"00112233445566778899AABBCCDDEEFF":hex:"1FA68B0A8112B447AEF34BD8FB5A7B829D3E862371D2CFE5" + +KW AES-192 wrap rfc 3394 +depends_on:0 +5:exp:0:exp:5:hex:"000102030405060708090A0B0C0D0E0F1011121314151617":hex:"00112233445566778899AABBCCDDEEFF":hex:"96778B25AE6CA435F92B5B97C050AED2468AB8A17AD84E5D" + +KW AES-256 wrap rfc 3394 +depends_on:0 +5:exp:0:exp:5:hex:"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F":hex:"00112233445566778899AABBCCDDEEFF":hex:"64E8C3F9CE0F5BA263E9777905818A2A93C8191E7D6E8AE7" + +KW AES-128 unwrap rfc 3394 +depends_on:0 +6:exp:0:exp:5:hex:"000102030405060708090A0B0C0D0E0F":hex:"1FA68B0A8112B447AEF34BD8FB5A7B829D3E862371D2CFE5":hex:"00112233445566778899AABBCCDDEEFF":int:0 + +KW AES-192 unwrap rfc 3394 +depends_on:0 +6:exp:0:exp:5:hex:"000102030405060708090A0B0C0D0E0F1011121314151617":hex:"031D33264E15D33268F24EC260743EDCE1C6C7DDEE725A936BA814915C6762D2":hex:"00112233445566778899AABBCCDDEEFF0001020304050607":int:0 + +KW AES-256 unwrap rfc 3394 +depends_on:0 +6:exp:0:exp:5:hex:"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F":hex:"A8F9BC1612C68B3FF6E6F4FBE30E71E4769C8B80A32CB8958CD5D17D6B254DA1":hex:"00112233445566778899AABBCCDDEEFF0001020304050607":int:0 + +KWP AES-192 wrap rfc 5649 [#1] +depends_on:0 +5:exp:0:exp:6:hex:"5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8":hex:"c37b7e6492584340bed12207808941155068f738":hex:"138bdeaa9b8fa7fc61f97742e72248ee5ae6ae5360d1ae6a5f54f373fa543b6a" + +KWP AES-192 wrap rfc 5649 [#2] +depends_on:0 +5:exp:0:exp:6:hex:"5840df6e29b02af1ab493b705bf16ea1ae8338f4dcc176a8":hex:"466f7250617369":hex:"afbeb0f07dfbf5419200f2ccb50bb24f" + diff --git a/third_party/mbedtls/test/test_suite_oid.c b/third_party/mbedtls/test/test_suite_oid.c new file mode 100644 index 000000000..8a6e7b599 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_oid.c @@ -0,0 +1,522 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_oid.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_oid.function + * Test suite data : suites/test_suite_oid.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_OID_C) +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/asn1.h" +#include "third_party/mbedtls/asn1write.h" +void test_oid_get_certificate_policies( data_t *oid, char *result_str ) +{ + mbedtls_asn1_buf asn1_buf = { 0, 0, NULL }; + int ret; + const char *desc; + + asn1_buf.tag = MBEDTLS_ASN1_OID; + asn1_buf.p = oid->x; + asn1_buf.len = oid->len; + + ret = mbedtls_oid_get_certificate_policies( &asn1_buf, &desc ); + if( strlen( result_str ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_OID_NOT_FOUND ); + } + else + { + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( strcmp( ( char* )desc, result_str ) == 0 ); + } +exit: + ; +} + +void test_oid_get_certificate_policies_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_oid_get_certificate_policies( &data0, (char *) params[2] ); +} +void test_oid_get_extended_key_usage( data_t *oid, char *result_str ) +{ + mbedtls_asn1_buf asn1_buf = { 0, 0, NULL }; + int ret; + const char *desc; + + asn1_buf.tag = MBEDTLS_ASN1_OID; + asn1_buf.p = oid->x; + asn1_buf.len = oid->len; + + ret = mbedtls_oid_get_extended_key_usage( &asn1_buf, &desc ); + if( strlen( result_str ) == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_OID_NOT_FOUND ); + } + else + { + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( strcmp( ( char * )desc, result_str ) == 0 ); + } +exit: + ; +} + +void test_oid_get_extended_key_usage_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_oid_get_extended_key_usage( &data0, (char *) params[2] ); +} +void test_oid_get_x509_extension( data_t *oid, int exp_type ) +{ + mbedtls_asn1_buf ext_oid = { 0, 0, NULL }; + int ret; + int ext_type; + + ext_oid.tag = MBEDTLS_ASN1_OID; + ext_oid.p = oid->x; + ext_oid.len = oid->len; + + ret = mbedtls_oid_get_x509_ext_type( &ext_oid, &ext_type ); + if( exp_type == 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_OID_NOT_FOUND ); + } + else + { + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( ext_type == exp_type ); + } +exit: + ; +} + +void test_oid_get_x509_extension_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_oid_get_x509_extension( &data0, *( (int *) params[2] ) ); +} +void test_oid_get_md_alg_id( data_t *oid, int exp_md_id ) +{ + mbedtls_asn1_buf md_oid = { 0, 0, NULL }; + int ret; + mbedtls_md_type_t md_id = 0; + + md_oid.tag = MBEDTLS_ASN1_OID; + md_oid.p = oid->x; + md_oid.len = oid->len; + + ret = mbedtls_oid_get_md_alg( &md_oid, &md_id ); + + if( exp_md_id < 0 ) + { + TEST_ASSERT( ret == MBEDTLS_ERR_OID_NOT_FOUND ); + TEST_ASSERT( md_id == 0); + } + else + { + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( (mbedtls_md_type_t)exp_md_id == md_id ); + } +exit: + ; +} + +void test_oid_get_md_alg_id_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_oid_get_md_alg_id( &data0, *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_OID_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_OID_C) + + case 0: + { + *out_value = MBEDTLS_OID_X509_EXT_BASIC_CONSTRAINTS; + } + break; + case 1: + { + *out_value = MBEDTLS_OID_X509_EXT_KEY_USAGE; + } + break; + case 2: + { + *out_value = MBEDTLS_OID_X509_EXT_EXTENDED_KEY_USAGE; + } + break; + case 3: + { + *out_value = MBEDTLS_OID_X509_EXT_SUBJECT_ALT_NAME; + } + break; + case 4: + { + *out_value = MBEDTLS_OID_X509_EXT_NS_CERT_TYPE; + } + break; + case 5: + { + *out_value = MBEDTLS_OID_X509_EXT_CERTIFICATE_POLICIES; + } + break; + case 6: + { + *out_value = MBEDTLS_MD_MD5; + } + break; + case 7: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 8: + { + *out_value = MBEDTLS_MD_SHA224; + } + break; + case 9: + { + *out_value = MBEDTLS_MD_SHA256; + } + break; + case 10: + { + *out_value = MBEDTLS_MD_SHA384; + } + break; + case 11: + { + *out_value = MBEDTLS_MD_SHA512; + } + break; + case 12: + { + *out_value = MBEDTLS_MD_RIPEMD160; + } + break; + case 13: + { + *out_value = -1; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_OID_C) + + case 0: + { +#if defined(MBEDTLS_MD5_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_RIPEMD160_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_OID_C) + test_oid_get_certificate_policies_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_OID_C) + test_oid_get_extended_key_usage_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_OID_C) + test_oid_get_x509_extension_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_OID_C) + test_oid_get_md_alg_id_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_oid.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_oid.datax b/third_party/mbedtls/test/test_suite_oid.datax new file mode 100644 index 000000000..30bc3acfd --- /dev/null +++ b/third_party/mbedtls/test/test_suite_oid.datax @@ -0,0 +1,91 @@ +OID get Any Policy certificate policy +0:hex:"551D2000":char*:"Any Policy" + +OID get certificate policy invalid oid +0:hex:"5533445566":char*:"" + +OID get certificate policy wrong oid - id-ce-authorityKeyIdentifier +0:hex:"551D23":char*:"" + +OID get Ext Key Usage - id-kp-serverAuth +1:hex:"2B06010505070301":char*:"TLS Web Server Authentication" + +OID get Ext Key Usage - id-kp-clientAuth +1:hex:"2B06010505070302":char*:"TLS Web Client Authentication" + +OID get Ext Key Usage - id-kp-codeSigning +1:hex:"2B06010505070303":char*:"Code Signing" + +OID get Ext Key Usage - id-kp-emailProtection +1:hex:"2B06010505070304":char*:"E-mail Protection" + +OID get Ext Key Usage - id-kp-timeStamping +1:hex:"2B06010505070308":char*:"Time Stamping" + +OID get Ext Key Usage - id-kp-OCSPSigning +1:hex:"2B06010505070309":char*:"OCSP Signing" + +OID get Ext Key Usage - id-kp-wisun-fan-device +1:hex:"2B0601040182E42501":char*:"Wi-SUN Alliance Field Area Network (FAN)" + +OID get Ext Key Usage invalid oid +1:hex:"5533445566":char*:"" + +OID get Ext Key Usage wrong oid - id-ce-authorityKeyIdentifier +1:hex:"551D23":char*:"" + +OID get x509 extension - id-ce-basicConstraints +2:hex:"551D13":exp:0 + +OID get x509 extension - id-ce-keyUsage +2:hex:"551D0F":exp:1 + +OID get x509 extension - id-ce-extKeyUsage +2:hex:"551D25":exp:2 + +OID get x509 extension - id-ce-subjectAltName +2:hex:"551D11":exp:3 + +OID get x509 extension - id-netscape-certtype +2:hex:"6086480186F8420101":exp:4 + +OID get x509 extension - id-ce-certificatePolicies +2:hex:"551D20":exp:5 + +OID get x509 extension - invalid oid +2:hex:"5533445566":int:0 + +OID get x509 extension - wrong oid - id-ce +2:hex:"551D":int:0 + +OID hash id - id-md5 +depends_on:0 +3:hex:"2A864886f70d0205":exp:6 + +OID hash id - id-sha1 +depends_on:1 +3:hex:"2b0e03021a":exp:7 + +OID hash id - id-sha224 +depends_on:2 +3:hex:"608648016503040204":exp:8 + +OID hash id - id-sha256 +depends_on:2 +3:hex:"608648016503040201":exp:9 + +OID hash id - id-sha384 +depends_on:3 +3:hex:"608648016503040202":exp:10 + +OID hash id - id-sha512 +depends_on:3 +3:hex:"608648016503040203":exp:11 + +OID hash id - id-ripemd160 +depends_on:4 +3:hex:"2b24030201":exp:12 + +OID hash id - invalid oid +3:hex:"2B864886f70d0204":exp:13 + diff --git a/third_party/mbedtls/test/test_suite_pem.c b/third_party/mbedtls/test/test_suite_pem.c new file mode 100644 index 000000000..25b8167dd --- /dev/null +++ b/third_party/mbedtls/test/test_suite_pem.c @@ -0,0 +1,375 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_pem.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_pem.function + * Test suite data : suites/test_suite_pem.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#include "third_party/mbedtls/base64.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/des.h" +#include "third_party/mbedtls/aes.h" +#if defined(MBEDTLS_PEM_WRITE_C) +void test_mbedtls_pem_write_buffer( char * start, char * end, data_t * buf, + char * result_str ) +{ + unsigned char *check_buf = NULL; + int ret; + size_t olen = 0, olen2 = 0; + + + ret = mbedtls_pem_write_buffer( start, end, buf->x, buf->len, NULL, 0, &olen ); + TEST_ASSERT( ret == MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); + + check_buf = (unsigned char *) mbedtls_calloc( 1, olen ); + TEST_ASSERT( check_buf != NULL ); + + ret = mbedtls_pem_write_buffer( start, end, buf->x, buf->len, check_buf, olen, &olen2 ); + + TEST_ASSERT( olen2 <= olen ); + TEST_ASSERT( olen > strlen( (char*) result_str ) ); + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( strncmp( (char *) check_buf, (char *) result_str, olen ) == 0 ); + +exit: + mbedtls_free( check_buf ); +} + +void test_mbedtls_pem_write_buffer_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_mbedtls_pem_write_buffer( (char *) params[0], (char *) params[1], &data2, (char *) params[4] ); +} +#endif /* MBEDTLS_PEM_WRITE_C */ +#if defined(MBEDTLS_PEM_PARSE_C) +#if defined(MBEDTLS_AES_C) +#if defined(MBEDTLS_DES_C) +#if defined(MBEDTLS_MD5_C) +#if defined(MBEDTLS_CIPHER_MODE_CBC) +void test_mbedtls_pem_read_buffer( char *header, char *footer, char *data, + char *pwd, int res ) +{ + mbedtls_pem_context ctx; + int ret; + size_t use_len = 0; + size_t pwd_len = strlen( pwd ); + + mbedtls_pem_init( &ctx ); + + ret = mbedtls_pem_read_buffer( &ctx, header, footer, (unsigned char *)data, + (unsigned char *)pwd, pwd_len, &use_len ); + TEST_ASSERT( ret == res ); + +exit: + mbedtls_pem_free( &ctx ); +} + +void test_mbedtls_pem_read_buffer_wrapper( void ** params ) +{ + + test_mbedtls_pem_read_buffer( (char *) params[0], (char *) params[1], (char *) params[2], (char *) params[3], *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#endif /* MBEDTLS_MD5_C */ +#endif /* MBEDTLS_DES_C */ +#endif /* MBEDTLS_AES_C */ +#endif /* MBEDTLS_PEM_PARSE_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + + case 0: + { + *out_value = MBEDTLS_ERR_PEM_INVALID_ENC_IV; + } + break; + case 1: + { + *out_value = MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH; + } + break; + case 3: + { + *out_value = MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH; + } + break; + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + + case 0: + { +#if defined(MBEDTLS_DES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_CIPHER_MODE_CBC) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_PEM_WRITE_C) + test_mbedtls_pem_write_buffer_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_PEM_PARSE_C) && defined(MBEDTLS_AES_C) && defined(MBEDTLS_DES_C) && defined(MBEDTLS_MD5_C) && defined(MBEDTLS_CIPHER_MODE_CBC) + test_mbedtls_pem_read_buffer_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_pem.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_pem.datax b/third_party/mbedtls/test/test_suite_pem.datax new file mode 100644 index 000000000..d10bc546a --- /dev/null +++ b/third_party/mbedtls/test/test_suite_pem.datax @@ -0,0 +1,39 @@ +Standard PEM write +0:char*:"-----START TEST-----\n":char*:"-----END TEST-----\n":hex:"000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F":char*:"-----START TEST-----\nAAECAwQFBgcICQoLDA0ODwABAgMEBQYHCAkKCwwNDg8=\n-----END TEST-----\n" + +PEM write (zero data) +0:char*:"-----START TEST-----\n":char*:"-----END TEST-----\n":hex:"":char*:"-----START TEST-----\n-----END TEST-----\n" + +PEM write (one byte) +0:char*:"-----START TEST-----\n":char*:"-----END TEST-----\n":hex:"00":char*:"-----START TEST-----\nAA==\n-----END TEST-----\n" + +PEM write (more than line size) +0:char*:"-----START TEST-----\n":char*:"-----END TEST-----\n":hex:"000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F":char*:"-----START TEST-----\nAAECAwQFBgcICQoLDA0ODwABAgMEBQYHCAkKCwwNDg8AAQIDBAUGBwgJCgsMDQ4P\nAAECAwQFBgcICQoLDA0ODwABAgMEBQYHCAkKCwwNDg8=\n-----END TEST-----\n" + +PEM write (exactly two lines) +0:char*:"-----START TEST-----\n":char*:"-----END TEST-----\n":hex:"000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F":char*:"-----START TEST-----\nAAECAwQFBgcICQoLDA0ODwABAgMEBQYHCAkKCwwNDg8AAQIDBAUGBwgJCgsMDQ4P\nAAECAwQFBgcICQoLDA0ODwABAgMEBQYHCAkKCwwNDg8AAQIDBAUGBwgJCgsMDQ4P\n-----END TEST-----\n" + +PEM write (exactly two lines + 1) +0:char*:"-----START TEST-----\n":char*:"-----END TEST-----\n":hex:"000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F00":char*:"-----START TEST-----\nAAECAwQFBgcICQoLDA0ODwABAgMEBQYHCAkKCwwNDg8AAQIDBAUGBwgJCgsMDQ4P\nAAECAwQFBgcICQoLDA0ODwABAgMEBQYHCAkKCwwNDg8AAQIDBAUGBwgJCgsMDQ4P\nAA==\n-----END TEST-----\n" + +PEM read (DES-EDE3-CBC + invalid iv) +1:char*:"^":char*:"$":char*:"^\nProc-Type\: 4,ENCRYPTED\nDEK-Info\: DES-EDE3-CBC,00$":char*:"pwd":exp:0 + +PEM read (DES-CBC + invalid iv) +1:char*:"^":char*:"$":char*:"^\nProc-Type\: 4,ENCRYPTED\nDEK-Info\: DES-CBC,00$":char*:"pwd":exp:0 + +PEM read (unknown encryption algorithm) +1:char*:"^":char*:"$":char*:"^\nProc-Type\: 4,ENCRYPTED\nDEK-Info\: AES-,00$":char*:"pwd":exp:1 + +PEM read (malformed PEM DES-CBC) +depends_on:0:1 +1:char*:"-----BEGIN EC PRIVATE KEY-----":char*:"-----END EC PRIVATE KEY-----":char*:"-----BEGIN EC PRIVATE KEY-----\nProc-Type\: 4,ENCRYPTED\nDEK-Info\: DES-CBC,AA94892A169FA426\n\nMAAA\n-----END EC PRIVATE KEY-----":char*:"pwd":exp:2 + +PEM read (malformed PEM DES-EDE3-CBC) +depends_on:0:1 +1:char*:"-----BEGIN EC PRIVATE KEY-----":char*:"-----END EC PRIVATE KEY-----":char*:"-----BEGIN EC PRIVATE KEY-----\nProc-Type\: 4,ENCRYPTED\nDEK-Info\: DES-EDE3-CBC,AA94892A169FA426\n\nMAAA\n-----END EC PRIVATE KEY-----":char*:"pwd":exp:2 + +PEM read (malformed PEM AES-128-CBC) +depends_on:2:1 +1:char*:"-----BEGIN EC PRIVATE KEY-----":char*:"-----END EC PRIVATE KEY-----":char*:"-----BEGIN EC PRIVATE KEY-----\nProc-Type\: 4,ENCRYPTED\nDEK-Info\: AES-128-CBC,AA94892A169FA426AA94892A169FA426\n\nMAAA\n-----END EC PRIVATE KEY-----":char*:"pwd":exp:3 + diff --git a/third_party/mbedtls/test/test_suite_pk.c b/third_party/mbedtls/test/test_suite_pk.c new file mode 100644 index 000000000..d003ae324 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_pk.c @@ -0,0 +1,2113 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_pk.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_pk.function + * Test suite data : suites/test_suite_pk.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_PK_C) +#include "third_party/mbedtls/pk.h" + +/* For error codes */ +#include "third_party/mbedtls/asn1.h" +#include "third_party/mbedtls/base64.h" +#include "third_party/mbedtls/ecp.h" +#include "third_party/mbedtls/rsa.h" + + +/* Needed only for test case data under #if defined(MBEDTLS_USE_PSA_CRYPTO), + * but the test code generator requires test case data to be valid C code + * unconditionally (https://github.com/ARMmbed/mbedtls/issues/2023). */ + +#define RSA_KEY_SIZE 512 +#define RSA_KEY_LEN 64 + +/** Generate a key of the desired type. + * + * \param pk The PK object to fill. It must have been initialized + * with mbedtls_pk_setup(). + * \param parameter - For RSA keys, the key size in bits. + * - For EC keys, the curve (\c MBEDTLS_ECP_DP_xxx). + * + * \return The status from the underlying type-specific key + * generation function. + * \return -1 if the key type is not recognized. + */ +static int pk_genkey( mbedtls_pk_context *pk, int parameter ) +{ + ((void) pk); + (void) parameter; + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_GENPRIME) + if( mbedtls_pk_get_type( pk ) == MBEDTLS_PK_RSA ) + return mbedtls_rsa_gen_key( mbedtls_pk_rsa( *pk ), + mbedtls_test_rnd_std_rand, NULL, + parameter, 3 ); +#endif +#if defined(MBEDTLS_ECP_C) + if( mbedtls_pk_get_type( pk ) == MBEDTLS_PK_ECKEY || + mbedtls_pk_get_type( pk ) == MBEDTLS_PK_ECKEY_DH || + mbedtls_pk_get_type( pk ) == MBEDTLS_PK_ECDSA ) + { + int ret; + if( ( ret = mbedtls_ecp_group_load( &mbedtls_pk_ec( *pk )->grp, + parameter ) ) != 0 ) + return( ret ); + + return mbedtls_ecp_gen_keypair( &mbedtls_pk_ec( *pk )->grp, + &mbedtls_pk_ec( *pk )->d, + &mbedtls_pk_ec( *pk )->Q, + mbedtls_test_rnd_std_rand, NULL ); + } +#endif + return( -1 ); +} + +#if defined(MBEDTLS_RSA_C) +int mbedtls_rsa_decrypt_func( void *ctx, int mode, size_t *olen, + const unsigned char *input, unsigned char *output, + size_t output_max_len ) +{ + return( mbedtls_rsa_pkcs1_decrypt( (mbedtls_rsa_context *) ctx, + mbedtls_test_rnd_std_rand, NULL, mode, + olen, input, output, output_max_len ) ); +} +int mbedtls_rsa_sign_func( void *ctx, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, + int mode, mbedtls_md_type_t md_alg, unsigned int hashlen, + const unsigned char *hash, unsigned char *sig ) +{ + ((void) f_rng); + ((void) p_rng); + return( mbedtls_rsa_pkcs1_sign( (mbedtls_rsa_context *) ctx, + mbedtls_test_rnd_std_rand, NULL, mode, + md_alg, hashlen, hash, sig ) ); +} +size_t mbedtls_rsa_key_len_func( void *ctx ) +{ + return( ((const mbedtls_rsa_context *) ctx)->len ); +} +#endif /* MBEDTLS_RSA_C */ + +#if defined(MBEDTLS_USE_PSA_CRYPTO) + +/* + * Generate a key using PSA and return the key identifier of that key, + * or 0 if the key generation failed. + * The key uses NIST P-256 and is usable for signing with SHA-256. + */ +mbedtls_svc_key_id_t pk_psa_genkey( void ) +{ + mbedtls_svc_key_id_t key; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + const psa_key_type_t type = + PSA_KEY_TYPE_ECC_KEY_PAIR( PSA_ECC_FAMILY_SECP_R1 ); + const size_t bits = 256; + + psa_set_key_usage_flags( &attributes, PSA_KEY_USAGE_SIGN_HASH ); + psa_set_key_algorithm( &attributes, PSA_ALG_ECDSA(PSA_ALG_SHA_256) ); + psa_set_key_type( &attributes, type ); + psa_set_key_bits( &attributes, bits ); + PSA_ASSERT( psa_generate_key( &attributes, &key ) ); + +exit: + return( key ); +} +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +#if defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_ECDSA_C) +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) +void test_pk_psa_utils( ) +{ + mbedtls_pk_context pk, pk2; + mbedtls_svc_key_id_t key; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + + const char * const name = "Opaque"; + const size_t bitlen = 256; /* harcoded in genkey() */ + + mbedtls_md_type_t md_alg = MBEDTLS_MD_NONE; + unsigned char b1[1], b2[1]; + size_t len; + mbedtls_pk_debug_item dbg; + + PSA_ASSERT( psa_crypto_init( ) ); + + mbedtls_pk_init( &pk ); + mbedtls_pk_init( &pk2 ); + + TEST_ASSERT( psa_crypto_init( ) == PSA_SUCCESS ); + + TEST_ASSERT( mbedtls_pk_setup_opaque( &pk, MBEDTLS_SVC_KEY_ID_INIT ) == + MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + + mbedtls_pk_free( &pk ); + mbedtls_pk_init( &pk ); + + key = pk_psa_genkey(); + if( mbedtls_svc_key_id_is_null( key ) ) + goto exit; + + TEST_ASSERT( mbedtls_pk_setup_opaque( &pk, key ) == 0 ); + + TEST_ASSERT( mbedtls_pk_get_type( &pk ) == MBEDTLS_PK_OPAQUE ); + TEST_ASSERT( strcmp( mbedtls_pk_get_name( &pk), name ) == 0 ); + + TEST_ASSERT( mbedtls_pk_get_bitlen( &pk ) == bitlen ); + TEST_ASSERT( mbedtls_pk_get_len( &pk ) == bitlen / 8 ); + + TEST_ASSERT( mbedtls_pk_can_do( &pk, MBEDTLS_PK_ECKEY ) == 1 ); + TEST_ASSERT( mbedtls_pk_can_do( &pk, MBEDTLS_PK_ECDSA ) == 1 ); + TEST_ASSERT( mbedtls_pk_can_do( &pk, MBEDTLS_PK_RSA ) == 0 ); + + /* unsupported operations: verify, decrypt, encrypt */ + TEST_ASSERT( mbedtls_pk_verify( &pk, md_alg, + b1, sizeof( b1), b2, sizeof( b2 ) ) + == MBEDTLS_ERR_PK_TYPE_MISMATCH ); + TEST_ASSERT( mbedtls_pk_decrypt( &pk, b1, sizeof( b1 ), + b2, &len, sizeof( b2 ), + NULL, NULL ) + == MBEDTLS_ERR_PK_TYPE_MISMATCH ); + TEST_ASSERT( mbedtls_pk_encrypt( &pk, b1, sizeof( b1 ), + b2, &len, sizeof( b2 ), + NULL, NULL ) + == MBEDTLS_ERR_PK_TYPE_MISMATCH ); + + /* unsupported functions: check_pair, debug */ + TEST_ASSERT( mbedtls_pk_setup( &pk2, + mbedtls_pk_info_from_type( MBEDTLS_PK_ECKEY ) ) == 0 ); + TEST_ASSERT( mbedtls_pk_check_pair( &pk, &pk2 ) + == MBEDTLS_ERR_PK_TYPE_MISMATCH ); + TEST_ASSERT( mbedtls_pk_debug( &pk, &dbg ) + == MBEDTLS_ERR_PK_TYPE_MISMATCH ); + + /* test that freeing the context does not destroy the key */ + mbedtls_pk_free( &pk ); + TEST_ASSERT( PSA_SUCCESS == psa_get_key_attributes( key, &attributes ) ); + TEST_ASSERT( PSA_SUCCESS == psa_destroy_key( key ) ); + +exit: + /* + * Key attributes may have been returned by psa_get_key_attributes() + * thus reset them as required. + */ + psa_reset_key_attributes( &attributes ); + + mbedtls_pk_free( &pk ); /* redundant except upon error */ + mbedtls_pk_free( &pk2 ); + USE_PSA_DONE( ); +} + +void test_pk_psa_utils_wrapper( void ** params ) +{ + (void)params; + + test_pk_psa_utils( ); +} +#endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */ +#endif /* MBEDTLS_ECDSA_C */ +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +void test_valid_parameters( ) +{ + mbedtls_pk_context pk; + unsigned char buf[1]; + size_t len; + void *options = NULL; + + mbedtls_pk_init( &pk ); + + TEST_VALID_PARAM( mbedtls_pk_free( NULL ) ); + +#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) + TEST_VALID_PARAM( mbedtls_pk_restart_free( NULL ) ); +#endif + + TEST_ASSERT( mbedtls_pk_setup( &pk, NULL ) == + MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + + /* In informational functions, we accept NULL where a context pointer + * is expected because that's what the library has done forever. + * We do not document that NULL is accepted, so we may wish to change + * the behavior in a future version. */ + TEST_ASSERT( mbedtls_pk_get_bitlen( NULL ) == 0 ); + TEST_ASSERT( mbedtls_pk_get_len( NULL ) == 0 ); + TEST_ASSERT( mbedtls_pk_can_do( NULL, MBEDTLS_PK_NONE ) == 0 ); + + TEST_ASSERT( mbedtls_pk_sign_restartable( &pk, + MBEDTLS_MD_NONE, + NULL, 0, + buf, &len, + mbedtls_test_rnd_std_rand, NULL, + NULL ) == + MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_pk_sign_restartable( &pk, + MBEDTLS_MD_NONE, + NULL, 0, + buf, &len, + mbedtls_test_rnd_std_rand, NULL, + NULL ) == + MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_pk_sign( &pk, + MBEDTLS_MD_NONE, + NULL, 0, + buf, &len, + mbedtls_test_rnd_std_rand, NULL ) == + MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_pk_verify_restartable( &pk, + MBEDTLS_MD_NONE, + NULL, 0, + buf, sizeof( buf ), + NULL ) == + MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_pk_verify( &pk, + MBEDTLS_MD_NONE, + NULL, 0, + buf, sizeof( buf ) ) == + MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_pk_verify_ext( MBEDTLS_PK_NONE, options, + &pk, + MBEDTLS_MD_NONE, + NULL, 0, + buf, sizeof( buf ) ) == + MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_pk_encrypt( &pk, + NULL, 0, + NULL, &len, 0, + mbedtls_test_rnd_std_rand, NULL ) == + MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_pk_decrypt( &pk, + NULL, 0, + NULL, &len, 0, + mbedtls_test_rnd_std_rand, NULL ) == + MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + +#if defined(MBEDTLS_PK_PARSE_C) + TEST_ASSERT( mbedtls_pk_parse_key( &pk, NULL, 0, NULL, 1 ) == + MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); + + TEST_ASSERT( mbedtls_pk_parse_public_key( &pk, NULL, 0 ) == + MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); +#endif /* MBEDTLS_PK_PARSE_C */ +exit: + ; +} + +void test_valid_parameters_wrapper( void ** params ) +{ + (void)params; + + test_valid_parameters( ); +} +#if defined(MBEDTLS_PK_WRITE_C) +void test_valid_parameters_pkwrite( data_t *key_data ) +{ + mbedtls_pk_context pk; + + /* For the write tests to be effective, we need a valid key pair. */ + mbedtls_pk_init( &pk ); + TEST_ASSERT( mbedtls_pk_parse_key( &pk, + key_data->x, key_data->len, + NULL, 0 ) == 0 ); + + TEST_ASSERT( mbedtls_pk_write_key_der( &pk, NULL, 0 ) == + MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + + TEST_ASSERT( mbedtls_pk_write_pubkey_der( &pk, NULL, 0 ) == + MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + +#if defined(MBEDTLS_PEM_WRITE_C) + TEST_ASSERT( mbedtls_pk_write_key_pem( &pk, NULL, 0 ) == + MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); + + TEST_ASSERT( mbedtls_pk_write_pubkey_pem( &pk, NULL, 0 ) == + MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); +#endif /* MBEDTLS_PEM_WRITE_C */ + +exit: + mbedtls_pk_free( &pk ); +} + +void test_valid_parameters_pkwrite_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_valid_parameters_pkwrite( &data0 ); +} +#endif /* MBEDTLS_PK_WRITE_C */ +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_invalid_parameters( ) +{ + size_t len; + unsigned char *null_buf = NULL; + unsigned char buf[1]; + unsigned char *p = buf; + char str[1] = {0}; + mbedtls_pk_context pk; + mbedtls_md_type_t valid_md = MBEDTLS_MD_SHA256; + void *options = buf; + + (void) null_buf; + (void) p; + (void) str; + + mbedtls_pk_init( &pk ); + + TEST_INVALID_PARAM( mbedtls_pk_init( NULL ) ); + +#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) + TEST_INVALID_PARAM( mbedtls_pk_restart_init( NULL ) ); +#endif + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_setup( NULL, NULL ) ); + +#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_setup_rsa_alt( NULL, buf, + NULL, NULL, NULL ) ); +#endif + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_verify_restartable( NULL, + MBEDTLS_MD_NONE, + buf, sizeof( buf ), + buf, sizeof( buf ), + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_verify_restartable( &pk, + MBEDTLS_MD_NONE, + NULL, sizeof( buf ), + buf, sizeof( buf ), + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_verify_restartable( &pk, + valid_md, + NULL, 0, + buf, sizeof( buf ), + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_verify_restartable( &pk, + MBEDTLS_MD_NONE, + buf, sizeof( buf ), + NULL, sizeof( buf ), + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_verify( NULL, + MBEDTLS_MD_NONE, + buf, sizeof( buf ), + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_verify( &pk, + MBEDTLS_MD_NONE, + NULL, sizeof( buf ), + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_verify( &pk, + valid_md, + NULL, 0, + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_verify( &pk, + MBEDTLS_MD_NONE, + buf, sizeof( buf ), + NULL, sizeof( buf ) ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_verify_ext( MBEDTLS_PK_NONE, options, + NULL, + MBEDTLS_MD_NONE, + buf, sizeof( buf ), + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_verify_ext( MBEDTLS_PK_NONE, options, + &pk, + MBEDTLS_MD_NONE, + NULL, sizeof( buf ), + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_verify_ext( MBEDTLS_PK_NONE, options, + &pk, + valid_md, + NULL, 0, + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_verify_ext( MBEDTLS_PK_NONE, options, + &pk, + MBEDTLS_MD_NONE, + buf, sizeof( buf ), + NULL, sizeof( buf ) ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_sign_restartable( NULL, MBEDTLS_MD_NONE, buf, sizeof( buf ), + buf, &len, mbedtls_test_rnd_std_rand, + NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_sign_restartable( &pk, MBEDTLS_MD_NONE, NULL, sizeof( buf ), + buf, &len, mbedtls_test_rnd_std_rand, + NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_sign_restartable( &pk, valid_md, NULL, 0, buf, &len, + mbedtls_test_rnd_std_rand, NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_sign_restartable( &pk, MBEDTLS_MD_NONE, buf, sizeof( buf ), + NULL, &len, mbedtls_test_rnd_std_rand, + NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_sign( NULL, MBEDTLS_MD_NONE, buf, sizeof( buf ), + buf, &len, mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_sign( &pk, MBEDTLS_MD_NONE, NULL, sizeof( buf ), + buf, &len, mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_sign( &pk, valid_md, NULL, 0, buf, &len, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_sign( &pk, MBEDTLS_MD_NONE, buf, sizeof( buf ), NULL, &len, + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_decrypt( NULL, buf, sizeof( buf ), buf, &len, sizeof( buf ), + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_decrypt( &pk, NULL, sizeof( buf ), buf, &len, sizeof( buf ), + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_decrypt( &pk, buf, sizeof( buf ), NULL, &len, sizeof( buf ), + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_decrypt( &pk, buf, sizeof( buf ), buf, NULL, sizeof( buf ), + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_encrypt( NULL, buf, sizeof( buf ), buf, &len, sizeof( buf ), + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_encrypt( &pk, NULL, sizeof( buf ), buf, &len, sizeof( buf ), + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_encrypt( &pk, buf, sizeof( buf ), NULL, &len, sizeof( buf ), + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_encrypt( &pk, buf, sizeof( buf ), buf, NULL, sizeof( buf ), + mbedtls_test_rnd_std_rand, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_check_pair( NULL, &pk ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_check_pair( &pk, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_debug( NULL, NULL ) ); + +#if defined(MBEDTLS_PK_PARSE_C) +#if defined(MBEDTLS_FS_IO) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_load_file( NULL, &p, &len ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_load_file( str, NULL, &len ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_load_file( str, &p, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_parse_keyfile( NULL, str, NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_parse_keyfile( &pk, NULL, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_parse_public_keyfile( NULL, str ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_parse_public_keyfile( &pk, NULL ) ); +#endif + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_parse_subpubkey( NULL, buf, &pk ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_parse_subpubkey( &null_buf, buf, &pk ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_parse_subpubkey( &p, NULL, &pk ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_parse_subpubkey( &p, buf, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_parse_key( NULL, + buf, sizeof( buf ), + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_parse_key( &pk, + NULL, sizeof( buf ), + buf, sizeof( buf ) ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_parse_public_key( NULL, + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_parse_public_key( &pk, + NULL, sizeof( buf ) ) ); +#endif /* MBEDTLS_PK_PARSE_C */ + +#if defined(MBEDTLS_PK_WRITE_C) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_write_pubkey( NULL, p, &pk ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_write_pubkey( &null_buf, p, &pk ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_write_pubkey( &p, NULL, &pk ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_write_pubkey( &p, p, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_write_pubkey_der( NULL, + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_write_pubkey_der( &pk, + NULL, sizeof( buf ) ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_write_key_der( NULL, + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_write_key_der( &pk, + NULL, sizeof( buf ) ) ); + +#if defined(MBEDTLS_PEM_WRITE_C) + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_write_pubkey_pem( NULL, + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_write_pubkey_pem( &pk, + NULL, sizeof( buf ) ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_write_key_pem( NULL, + buf, sizeof( buf ) ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA, + mbedtls_pk_write_key_pem( &pk, + NULL, sizeof( buf ) ) ); +#endif /* MBEDTLS_PEM_WRITE_C */ + +#endif /* MBEDTLS_PK_WRITE_C */ +exit: + ; +} + +void test_invalid_parameters_wrapper( void ** params ) +{ + (void)params; + + test_invalid_parameters( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_pk_utils( int type, int parameter, int bitlen, int len, char * name ) +{ + mbedtls_pk_context pk; + + mbedtls_pk_init( &pk ); + + TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( type ) ) == 0 ); + TEST_ASSERT( pk_genkey( &pk, parameter ) == 0 ); + + TEST_ASSERT( (int) mbedtls_pk_get_type( &pk ) == type ); + TEST_ASSERT( mbedtls_pk_can_do( &pk, type ) ); + TEST_ASSERT( mbedtls_pk_get_bitlen( &pk ) == (unsigned) bitlen ); + TEST_ASSERT( mbedtls_pk_get_len( &pk ) == (unsigned) len ); + TEST_ASSERT( strcmp( mbedtls_pk_get_name( &pk), name ) == 0 ); + +exit: + mbedtls_pk_free( &pk ); +} + +void test_pk_utils_wrapper( void ** params ) +{ + + test_pk_utils( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), (char *) params[4] ); +} +#if defined(MBEDTLS_PK_PARSE_C) +#if defined(MBEDTLS_FS_IO) +void test_mbedtls_pk_check_pair( char * pub_file, char * prv_file, int ret ) +{ + mbedtls_pk_context pub, prv, alt; + + mbedtls_pk_init( &pub ); + mbedtls_pk_init( &prv ); + mbedtls_pk_init( &alt ); + + TEST_ASSERT( mbedtls_pk_parse_public_keyfile( &pub, pub_file ) == 0 ); + TEST_ASSERT( mbedtls_pk_parse_keyfile( &prv, prv_file, NULL ) == 0 ); + + TEST_ASSERT( mbedtls_pk_check_pair( &pub, &prv ) == ret ); + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_PK_RSA_ALT_SUPPORT) + if( mbedtls_pk_get_type( &prv ) == MBEDTLS_PK_RSA ) + { + TEST_ASSERT( mbedtls_pk_setup_rsa_alt( &alt, mbedtls_pk_rsa( prv ), + mbedtls_rsa_decrypt_func, mbedtls_rsa_sign_func, + mbedtls_rsa_key_len_func ) == 0 ); + TEST_ASSERT( mbedtls_pk_check_pair( &pub, &alt ) == ret ); + } +#endif + + mbedtls_pk_free( &pub ); + mbedtls_pk_free( &prv ); + mbedtls_pk_free( &alt ); +exit: + ; +} + +void test_mbedtls_pk_check_pair_wrapper( void ** params ) +{ + + test_mbedtls_pk_check_pair( (char *) params[0], (char *) params[1], *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_FS_IO */ +#endif /* MBEDTLS_PK_PARSE_C */ +#if defined(MBEDTLS_RSA_C) +void test_pk_rsa_verify_test_vec( data_t * message_str, int digest, int mod, + int radix_N, char * input_N, int radix_E, + char * input_E, data_t * result_str, + int result ) +{ + unsigned char hash_result[MBEDTLS_MD_MAX_SIZE]; + mbedtls_rsa_context *rsa; + mbedtls_pk_context pk; + mbedtls_pk_restart_ctx *rs_ctx = NULL; +#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) + mbedtls_pk_restart_ctx ctx; + + rs_ctx = &ctx; + mbedtls_pk_restart_init( rs_ctx ); + // this setting would ensure restart would happen if ECC was used + mbedtls_ecp_set_max_ops( 1 ); +#endif + + mbedtls_pk_init( &pk ); + + memset( hash_result, 0x00, MBEDTLS_MD_MAX_SIZE ); + + TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == 0 ); + rsa = mbedtls_pk_rsa( pk ); + + rsa->len = mod / 8; + TEST_ASSERT( mbedtls_mpi_read_string( &rsa->N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &rsa->E, radix_E, input_E ) == 0 ); + + + if( mbedtls_md_info_from_type( digest ) != NULL ) + TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ), message_str->x, message_str->len, hash_result ) == 0 ); + + TEST_ASSERT( mbedtls_pk_verify( &pk, digest, hash_result, 0, + result_str->x, mbedtls_pk_get_len( &pk ) ) == result ); + + TEST_ASSERT( mbedtls_pk_verify_restartable( &pk, digest, hash_result, 0, + result_str->x, mbedtls_pk_get_len( &pk ), rs_ctx ) == result ); + +exit: +#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) + mbedtls_pk_restart_free( rs_ctx ); +#endif + mbedtls_pk_free( &pk ); +} + +void test_pk_rsa_verify_test_vec_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_pk_rsa_verify_test_vec( &data0, *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ), (char *) params[7], &data8, *( (int *) params[10] ) ); +} +#endif /* MBEDTLS_RSA_C */ +#if defined(MBEDTLS_RSA_C) +void test_pk_rsa_verify_ext_test_vec( data_t * message_str, int digest, + int mod, int radix_N, char * input_N, + int radix_E, char * input_E, + data_t * result_str, int pk_type, + int mgf1_hash_id, int salt_len, int result ) +{ + unsigned char hash_result[MBEDTLS_MD_MAX_SIZE]; + mbedtls_rsa_context *rsa; + mbedtls_pk_context pk; + mbedtls_pk_rsassa_pss_options pss_opts; + void *options; + size_t hash_len; + + mbedtls_pk_init( &pk ); + + memset( hash_result, 0x00, sizeof( hash_result ) ); + + TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == 0 ); + rsa = mbedtls_pk_rsa( pk ); + + rsa->len = mod / 8; + TEST_ASSERT( mbedtls_mpi_read_string( &rsa->N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &rsa->E, radix_E, input_E ) == 0 ); + + + if( digest != MBEDTLS_MD_NONE ) + { + TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ), + message_str->x, message_str->len, hash_result ) == 0 ); + hash_len = 0; + } + else + { + memcpy( hash_result, message_str->x, message_str->len ); + hash_len = message_str->len; + } + + if( mgf1_hash_id < 0 ) + { + options = NULL; + } + else + { + options = &pss_opts; + + pss_opts.mgf1_hash_id = mgf1_hash_id; + pss_opts.expected_salt_len = salt_len; + } + + TEST_ASSERT( mbedtls_pk_verify_ext( pk_type, options, &pk, + digest, hash_result, hash_len, + result_str->x, mbedtls_pk_get_len( &pk ) ) == result ); + +exit: + mbedtls_pk_free( &pk ); +} + +void test_pk_rsa_verify_ext_test_vec_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_pk_rsa_verify_ext_test_vec( &data0, *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ), (char *) params[7], &data8, *( (int *) params[10] ), *( (int *) params[11] ), *( (int *) params[12] ), *( (int *) params[13] ) ); +} +#endif /* MBEDTLS_RSA_C */ +#if defined(MBEDTLS_ECDSA_C) +void test_pk_ec_test_vec( int type, int id, data_t * key, data_t * hash, + data_t * sig, int ret ) +{ + mbedtls_pk_context pk; + mbedtls_ecp_keypair *eckey; + + mbedtls_pk_init( &pk ); + USE_PSA_INIT( ); + + TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( type ) ) == 0 ); + + TEST_ASSERT( mbedtls_pk_can_do( &pk, MBEDTLS_PK_ECDSA ) ); + eckey = mbedtls_pk_ec( pk ); + + TEST_ASSERT( mbedtls_ecp_group_load( &eckey->grp, id ) == 0 ); + TEST_ASSERT( mbedtls_ecp_point_read_binary( &eckey->grp, &eckey->Q, + key->x, key->len ) == 0 ); + + // MBEDTLS_MD_NONE is used since it will be ignored. + TEST_ASSERT( mbedtls_pk_verify( &pk, MBEDTLS_MD_NONE, + hash->x, hash->len, sig->x, sig->len ) == ret ); + +exit: + mbedtls_pk_free( &pk ); + USE_PSA_DONE( ); +} + +void test_pk_ec_test_vec_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_pk_ec_test_vec( *( (int *) params[0] ), *( (int *) params[1] ), &data2, &data4, &data6, *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_ECDSA_C */ +#if defined(MBEDTLS_ECP_RESTARTABLE) +#if defined(MBEDTLS_ECDSA_C) +#if defined(MBEDTLS_ECDSA_DETERMINISTIC) +void test_pk_sign_verify_restart( int pk_type, int grp_id, char *d_str, + char *QX_str, char *QY_str, + int md_alg, char *msg, data_t *sig_check, + int max_ops, int min_restart, int max_restart ) +{ + int ret, cnt_restart; + mbedtls_pk_restart_ctx rs_ctx; + mbedtls_pk_context prv, pub; + unsigned char hash[MBEDTLS_MD_MAX_SIZE]; + unsigned char sig[MBEDTLS_ECDSA_MAX_LEN]; + size_t hlen, slen; + const mbedtls_md_info_t *md_info; + + mbedtls_pk_restart_init( &rs_ctx ); + mbedtls_pk_init( &prv ); + mbedtls_pk_init( &pub ); + memset( hash, 0, sizeof( hash ) ); + memset( sig, 0, sizeof( sig ) ); + + TEST_ASSERT( mbedtls_pk_setup( &prv, mbedtls_pk_info_from_type( pk_type ) ) == 0 ); + TEST_ASSERT( mbedtls_ecp_group_load( &mbedtls_pk_ec( prv )->grp, grp_id ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &mbedtls_pk_ec( prv )->d, 16, d_str ) == 0 ); + + TEST_ASSERT( mbedtls_pk_setup( &pub, mbedtls_pk_info_from_type( pk_type ) ) == 0 ); + TEST_ASSERT( mbedtls_ecp_group_load( &mbedtls_pk_ec( pub )->grp, grp_id ) == 0 ); + TEST_ASSERT( mbedtls_ecp_point_read_string( &mbedtls_pk_ec( pub )->Q, 16, QX_str, QY_str ) == 0 ); + + md_info = mbedtls_md_info_from_type( md_alg ); + TEST_ASSERT( md_info != NULL ); + + hlen = mbedtls_md_get_size( md_info ); + TEST_ASSERT( mbedtls_md( md_info, + (const unsigned char *) msg, strlen( msg ), + hash ) == 0 ); + + mbedtls_ecp_set_max_ops( max_ops ); + + slen = sizeof( sig ); + cnt_restart = 0; + do { + ret = mbedtls_pk_sign_restartable( &prv, md_alg, hash, hlen, + sig, &slen, NULL, NULL, &rs_ctx ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restart ); + + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( slen == sig_check->len ); + TEST_ASSERT( memcmp( sig, sig_check->x, slen ) == 0 ); + + TEST_ASSERT( cnt_restart >= min_restart ); + TEST_ASSERT( cnt_restart <= max_restart ); + + cnt_restart = 0; + do { + ret = mbedtls_pk_verify_restartable( &pub, md_alg, + hash, hlen, sig, slen, &rs_ctx ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restart ); + + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( cnt_restart >= min_restart ); + TEST_ASSERT( cnt_restart <= max_restart ); + + hash[0]++; + do { + ret = mbedtls_pk_verify_restartable( &pub, md_alg, + hash, hlen, sig, slen, &rs_ctx ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS ); + TEST_ASSERT( ret != 0 ); + hash[0]--; + + sig[0]++; + do { + ret = mbedtls_pk_verify_restartable( &pub, md_alg, + hash, hlen, sig, slen, &rs_ctx ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS ); + TEST_ASSERT( ret != 0 ); + sig[0]--; + + /* Do we leak memory when aborting? try verify then sign + * This test only makes sense when we actually restart */ + if( min_restart > 0 ) + { + ret = mbedtls_pk_verify_restartable( &pub, md_alg, + hash, hlen, sig, slen, &rs_ctx ); + TEST_ASSERT( ret == MBEDTLS_ERR_ECP_IN_PROGRESS ); + mbedtls_pk_restart_free( &rs_ctx ); + + slen = sizeof( sig ); + ret = mbedtls_pk_sign_restartable( &prv, md_alg, hash, hlen, + sig, &slen, NULL, NULL, &rs_ctx ); + TEST_ASSERT( ret == MBEDTLS_ERR_ECP_IN_PROGRESS ); + } + +exit: + mbedtls_pk_restart_free( &rs_ctx ); + mbedtls_pk_free( &prv ); + mbedtls_pk_free( &pub ); +} + +void test_pk_sign_verify_restart_wrapper( void ** params ) +{ + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + + test_pk_sign_verify_restart( *( (int *) params[0] ), *( (int *) params[1] ), (char *) params[2], (char *) params[3], (char *) params[4], *( (int *) params[5] ), (char *) params[6], &data7, *( (int *) params[9] ), *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#endif /* MBEDTLS_ECDSA_DETERMINISTIC */ +#endif /* MBEDTLS_ECDSA_C */ +#endif /* MBEDTLS_ECP_RESTARTABLE */ +#if defined(MBEDTLS_SHA256_C) +void test_pk_sign_verify( int type, int parameter, int sign_ret, int verify_ret ) +{ + mbedtls_pk_context pk; + size_t sig_len; + unsigned char hash[MBEDTLS_MD_MAX_SIZE]; + unsigned char sig[MBEDTLS_PK_SIGNATURE_MAX_SIZE]; + void *rs_ctx = NULL; +#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) + mbedtls_pk_restart_ctx ctx; + + rs_ctx = &ctx; + mbedtls_pk_restart_init( rs_ctx ); + /* This value is large enough that the operation will complete in one run. + * See comments at the top of ecp_test_vect_restart in + * test_suite_ecp.function for estimates of operation counts. */ + mbedtls_ecp_set_max_ops( 42000 ); +#endif + + mbedtls_pk_init( &pk ); + USE_PSA_INIT( ); + + memset( hash, 0x2a, sizeof hash ); + memset( sig, 0, sizeof sig ); + + TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( type ) ) == 0 ); + TEST_ASSERT( pk_genkey( &pk, parameter ) == 0 ); + + TEST_ASSERT( mbedtls_pk_sign_restartable( &pk, MBEDTLS_MD_SHA256, + hash, sizeof hash, sig, &sig_len, + mbedtls_test_rnd_std_rand, NULL, rs_ctx ) == sign_ret ); + if( sign_ret == 0 ) + TEST_ASSERT( sig_len <= MBEDTLS_PK_SIGNATURE_MAX_SIZE ); + else + sig_len = MBEDTLS_PK_SIGNATURE_MAX_SIZE; + + TEST_ASSERT( mbedtls_pk_verify( &pk, MBEDTLS_MD_SHA256, + hash, sizeof hash, sig, sig_len ) == verify_ret ); + + if( verify_ret == 0 ) + { + hash[0]++; + TEST_ASSERT( mbedtls_pk_verify( &pk, MBEDTLS_MD_SHA256, + hash, sizeof hash, sig, sig_len ) != 0 ); + hash[0]--; + + sig[0]++; + TEST_ASSERT( mbedtls_pk_verify( &pk, MBEDTLS_MD_SHA256, + hash, sizeof hash, sig, sig_len ) != 0 ); + sig[0]--; + } + + TEST_ASSERT( mbedtls_pk_sign( &pk, MBEDTLS_MD_SHA256, hash, sizeof hash, + sig, &sig_len, + mbedtls_test_rnd_std_rand, + NULL ) == sign_ret ); + if( sign_ret == 0 ) + TEST_ASSERT( sig_len <= MBEDTLS_PK_SIGNATURE_MAX_SIZE ); + else + sig_len = MBEDTLS_PK_SIGNATURE_MAX_SIZE; + + TEST_ASSERT( mbedtls_pk_verify_restartable( &pk, MBEDTLS_MD_SHA256, + hash, sizeof hash, sig, sig_len, rs_ctx ) == verify_ret ); + + if( verify_ret == 0 ) + { + hash[0]++; + TEST_ASSERT( mbedtls_pk_verify_restartable( &pk, MBEDTLS_MD_SHA256, + hash, sizeof hash, sig, sig_len, rs_ctx ) != 0 ); + hash[0]--; + + sig[0]++; + TEST_ASSERT( mbedtls_pk_verify_restartable( &pk, MBEDTLS_MD_SHA256, + hash, sizeof hash, sig, sig_len, rs_ctx ) != 0 ); + sig[0]--; + } + +exit: +#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) + mbedtls_pk_restart_free( rs_ctx ); +#endif + mbedtls_pk_free( &pk ); + USE_PSA_DONE( ); +} + +void test_pk_sign_verify_wrapper( void ** params ) +{ + + test_pk_sign_verify( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ) ); +} +#endif /* MBEDTLS_SHA256_C */ +#if defined(MBEDTLS_RSA_C) +void test_pk_rsa_encrypt_test_vec( data_t * message, int mod, int radix_N, + char * input_N, int radix_E, char * input_E, + data_t * result, int ret ) +{ + unsigned char output[300]; + mbedtls_test_rnd_pseudo_info rnd_info; + mbedtls_rsa_context *rsa; + mbedtls_pk_context pk; + size_t olen; + + memset( &rnd_info, 0, sizeof( mbedtls_test_rnd_pseudo_info ) ); + memset( output, 0, sizeof( output ) ); + + + mbedtls_pk_init( &pk ); + TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == 0 ); + rsa = mbedtls_pk_rsa( pk ); + + rsa->len = mod / 8; + TEST_ASSERT( mbedtls_mpi_read_string( &rsa->N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &rsa->E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_pk_encrypt( &pk, message->x, message->len, + output, &olen, sizeof( output ), + mbedtls_test_rnd_pseudo_rand, &rnd_info ) == ret ); + TEST_ASSERT( olen == result->len ); + TEST_ASSERT( memcmp( output, result->x, olen ) == 0 ); + +exit: + mbedtls_pk_free( &pk ); +} + +void test_pk_rsa_encrypt_test_vec_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + + test_pk_rsa_encrypt_test_vec( &data0, *( (int *) params[2] ), *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), (char *) params[6], &data7, *( (int *) params[9] ) ); +} +#endif /* MBEDTLS_RSA_C */ +#if defined(MBEDTLS_RSA_C) +void test_pk_rsa_decrypt_test_vec( data_t * cipher, int mod, int radix_P, + char * input_P, int radix_Q, char * input_Q, + int radix_N, char * input_N, int radix_E, + char * input_E, data_t * clear, int ret ) +{ + unsigned char output[256]; + mbedtls_test_rnd_pseudo_info rnd_info; + mbedtls_mpi N, P, Q, E; + mbedtls_rsa_context *rsa; + mbedtls_pk_context pk; + size_t olen; + + mbedtls_pk_init( &pk ); + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); + mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E ); + + memset( &rnd_info, 0, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + + /* init pk-rsa context */ + TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == 0 ); + rsa = mbedtls_pk_rsa( pk ); + + /* load public key */ + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + /* load private key */ + TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 ); + TEST_ASSERT( mbedtls_rsa_import( rsa, &N, &P, &Q, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( rsa ) == (size_t) ( mod / 8 ) ); + TEST_ASSERT( mbedtls_rsa_complete( rsa ) == 0 ); + + /* decryption test */ + memset( output, 0, sizeof( output ) ); + olen = 0; + TEST_ASSERT( mbedtls_pk_decrypt( &pk, cipher->x, cipher->len, + output, &olen, sizeof( output ), + mbedtls_test_rnd_pseudo_rand, &rnd_info ) == ret ); + if( ret == 0 ) + { + TEST_ASSERT( olen == clear->len ); + TEST_ASSERT( memcmp( output, clear->x, olen ) == 0 ); + } + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P ); + mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E ); + mbedtls_pk_free( &pk ); +} + +void test_pk_rsa_decrypt_test_vec_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data11 = {(uint8_t *) params[11], *( (uint32_t *) params[12] )}; + + test_pk_rsa_decrypt_test_vec( &data0, *( (int *) params[2] ), *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), (char *) params[6], *( (int *) params[7] ), (char *) params[8], *( (int *) params[9] ), (char *) params[10], &data11, *( (int *) params[13] ) ); +} +#endif /* MBEDTLS_RSA_C */ +void test_pk_ec_nocrypt( int type ) +{ + mbedtls_pk_context pk; + unsigned char output[100]; + unsigned char input[100]; + mbedtls_test_rnd_pseudo_info rnd_info; + size_t olen = 0; + int ret = MBEDTLS_ERR_PK_TYPE_MISMATCH; + + mbedtls_pk_init( &pk ); + + memset( &rnd_info, 0, sizeof( mbedtls_test_rnd_pseudo_info ) ); + memset( output, 0, sizeof( output ) ); + memset( input, 0, sizeof( input ) ); + + TEST_ASSERT( mbedtls_pk_setup( &pk, mbedtls_pk_info_from_type( type ) ) == 0 ); + + TEST_ASSERT( mbedtls_pk_encrypt( &pk, input, sizeof( input ), + output, &olen, sizeof( output ), + mbedtls_test_rnd_pseudo_rand, &rnd_info ) == ret ); + + TEST_ASSERT( mbedtls_pk_decrypt( &pk, input, sizeof( input ), + output, &olen, sizeof( output ), + mbedtls_test_rnd_pseudo_rand, &rnd_info ) == ret ); + +exit: + mbedtls_pk_free( &pk ); +} + +void test_pk_ec_nocrypt_wrapper( void ** params ) +{ + + test_pk_ec_nocrypt( *( (int *) params[0] ) ); +} +#if defined(MBEDTLS_RSA_C) +void test_pk_rsa_overflow( ) +{ + mbedtls_pk_context pk; + size_t hash_len = SIZE_MAX, sig_len = SIZE_MAX; + unsigned char hash[50], sig[100]; + + if( SIZE_MAX <= UINT_MAX ) + return; + + memset( hash, 0x2a, sizeof hash ); + memset( sig, 0, sizeof sig ); + + mbedtls_pk_init( &pk ); + + TEST_ASSERT( mbedtls_pk_setup( &pk, + mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == 0 ); + +#if defined(MBEDTLS_PKCS1_V21) + TEST_ASSERT( mbedtls_pk_verify_ext( MBEDTLS_PK_RSASSA_PSS, NULL, &pk, + MBEDTLS_MD_NONE, hash, hash_len, sig, sig_len ) == + MBEDTLS_ERR_PK_BAD_INPUT_DATA ); +#endif /* MBEDTLS_PKCS1_V21 */ + + TEST_ASSERT( mbedtls_pk_verify( &pk, MBEDTLS_MD_NONE, hash, hash_len, + sig, sig_len ) == MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + + TEST_ASSERT( mbedtls_pk_sign( &pk, MBEDTLS_MD_NONE, hash, hash_len, sig, + &sig_len, mbedtls_test_rnd_std_rand, NULL ) + == MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + +exit: + mbedtls_pk_free( &pk ); +} + +void test_pk_rsa_overflow_wrapper( void ** params ) +{ + (void)params; + + test_pk_rsa_overflow( ); +} +#endif /* MBEDTLS_RSA_C */ +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) +void test_pk_rsa_alt( ) +{ + /* + * An rsa_alt context can only do private operations (decrypt, sign). + * Test it against the public operations (encrypt, verify) of a + * corresponding rsa context. + */ + mbedtls_rsa_context raw; + mbedtls_pk_context rsa, alt; + mbedtls_pk_debug_item dbg_items[10]; + unsigned char hash[50], sig[64]; + unsigned char msg[50], ciph[64], test[50]; + size_t sig_len, ciph_len, test_len; + int ret = MBEDTLS_ERR_PK_TYPE_MISMATCH; + + mbedtls_rsa_init( &raw, MBEDTLS_RSA_PKCS_V15, MBEDTLS_MD_NONE ); + mbedtls_pk_init( &rsa ); mbedtls_pk_init( &alt ); + + memset( hash, 0x2a, sizeof hash ); + memset( sig, 0, sizeof sig ); + memset( msg, 0x2a, sizeof msg ); + memset( ciph, 0, sizeof ciph ); + memset( test, 0, sizeof test ); + + /* Initiliaze PK RSA context with random key */ + TEST_ASSERT( mbedtls_pk_setup( &rsa, + mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == 0 ); + TEST_ASSERT( pk_genkey( &rsa, RSA_KEY_SIZE ) == 0 ); + + /* Extract key to the raw rsa context */ + TEST_ASSERT( mbedtls_rsa_copy( &raw, mbedtls_pk_rsa( rsa ) ) == 0 ); + + /* Initialize PK RSA_ALT context */ + TEST_ASSERT( mbedtls_pk_setup_rsa_alt( &alt, (void *) &raw, + mbedtls_rsa_decrypt_func, mbedtls_rsa_sign_func, mbedtls_rsa_key_len_func ) == 0 ); + + /* Test administrative functions */ + TEST_ASSERT( mbedtls_pk_can_do( &alt, MBEDTLS_PK_RSA ) ); + TEST_ASSERT( mbedtls_pk_get_bitlen( &alt ) == RSA_KEY_SIZE ); + TEST_ASSERT( mbedtls_pk_get_len( &alt ) == RSA_KEY_LEN ); + TEST_ASSERT( mbedtls_pk_get_type( &alt ) == MBEDTLS_PK_RSA_ALT ); + TEST_ASSERT( strcmp( mbedtls_pk_get_name( &alt ), "RSA-alt" ) == 0 ); + + /* Test signature */ +#if SIZE_MAX > UINT_MAX + TEST_ASSERT( mbedtls_pk_sign( &alt, MBEDTLS_MD_NONE, hash, SIZE_MAX, sig, + &sig_len, mbedtls_test_rnd_std_rand, NULL ) + == MBEDTLS_ERR_PK_BAD_INPUT_DATA ); +#endif /* SIZE_MAX > UINT_MAX */ + TEST_ASSERT( mbedtls_pk_sign( &alt, MBEDTLS_MD_NONE, hash, sizeof hash, sig, + &sig_len, mbedtls_test_rnd_std_rand, NULL ) + == 0 ); + TEST_ASSERT( sig_len == RSA_KEY_LEN ); + TEST_ASSERT( mbedtls_pk_verify( &rsa, MBEDTLS_MD_NONE, + hash, sizeof hash, sig, sig_len ) == 0 ); + + /* Test decrypt */ + TEST_ASSERT( mbedtls_pk_encrypt( &rsa, msg, sizeof msg, + ciph, &ciph_len, sizeof ciph, + mbedtls_test_rnd_std_rand, NULL ) == 0 ); + TEST_ASSERT( mbedtls_pk_decrypt( &alt, ciph, ciph_len, + test, &test_len, sizeof test, + mbedtls_test_rnd_std_rand, NULL ) == 0 ); + TEST_ASSERT( test_len == sizeof msg ); + TEST_ASSERT( memcmp( test, msg, test_len ) == 0 ); + + /* Test forbidden operations */ + TEST_ASSERT( mbedtls_pk_encrypt( &alt, msg, sizeof msg, + ciph, &ciph_len, sizeof ciph, + mbedtls_test_rnd_std_rand, NULL ) == ret ); + TEST_ASSERT( mbedtls_pk_verify( &alt, MBEDTLS_MD_NONE, + hash, sizeof hash, sig, sig_len ) == ret ); + TEST_ASSERT( mbedtls_pk_debug( &alt, dbg_items ) == ret ); + +exit: + mbedtls_rsa_free( &raw ); + mbedtls_pk_free( &rsa ); mbedtls_pk_free( &alt ); +} + +void test_pk_rsa_alt_wrapper( void ** params ) +{ + (void)params; + + test_pk_rsa_alt( ); +} +#endif /* MBEDTLS_PK_RSA_ALT_SUPPORT */ +#endif /* MBEDTLS_RSA_C */ +#if defined(MBEDTLS_SHA256_C) +#if defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_ECDSA_C) +void test_pk_psa_sign( int grpid_arg, + int psa_curve_arg, int expected_bits_arg ) +{ + mbedtls_ecp_group_id grpid = grpid_arg; + mbedtls_pk_context pk; + unsigned char hash[32]; + unsigned char sig[MBEDTLS_ECDSA_MAX_LEN]; + unsigned char pkey_legacy[200]; + unsigned char pkey_psa[200]; + unsigned char *pkey_legacy_start, *pkey_psa_start; + size_t sig_len, klen_legacy, klen_psa; + int ret; + mbedtls_svc_key_id_t key_id; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_key_type_t expected_type = PSA_KEY_TYPE_ECC_KEY_PAIR( psa_curve_arg ); + size_t expected_bits = expected_bits_arg; + + /* + * This tests making signatures with a wrapped PSA key: + * - generate a fresh ECP legacy PK context + * - wrap it in a PK context and make a signature this way + * - extract the public key + * - parse it to a PK context and verify the signature this way + */ + + PSA_ASSERT( psa_crypto_init( ) ); + + /* Create legacy EC public/private key in PK context. */ + mbedtls_pk_init( &pk ); + TEST_ASSERT( mbedtls_pk_setup( &pk, + mbedtls_pk_info_from_type( MBEDTLS_PK_ECKEY ) ) == 0 ); + TEST_ASSERT( mbedtls_ecp_gen_key( grpid, + (mbedtls_ecp_keypair*) pk.pk_ctx, + mbedtls_test_rnd_std_rand, NULL ) == 0 ); + + /* Export underlying public key for re-importing in a legacy context. */ + ret = mbedtls_pk_write_pubkey_der( &pk, pkey_legacy, + sizeof( pkey_legacy ) ); + TEST_ASSERT( ret >= 0 ); + klen_legacy = (size_t) ret; + /* mbedtls_pk_write_pubkey_der() writes backwards in the data buffer. */ + pkey_legacy_start = pkey_legacy + sizeof( pkey_legacy ) - klen_legacy; + + /* Turn PK context into an opaque one. */ + TEST_ASSERT( mbedtls_pk_wrap_as_opaque( &pk, &key_id, + PSA_ALG_SHA_256 ) == 0 ); + + PSA_ASSERT( psa_get_key_attributes( key_id, &attributes ) ); + TEST_EQUAL( psa_get_key_type( &attributes ), expected_type ); + TEST_EQUAL( psa_get_key_bits( &attributes ), expected_bits ); + TEST_EQUAL( psa_get_key_lifetime( &attributes ), + PSA_KEY_LIFETIME_VOLATILE ); + + memset( hash, 0x2a, sizeof hash ); + memset( sig, 0, sizeof sig ); + + TEST_ASSERT( mbedtls_pk_sign( &pk, MBEDTLS_MD_SHA256, + hash, sizeof hash, sig, &sig_len, + NULL, NULL ) == 0 ); + + /* Export underlying public key for re-importing in a psa context. */ + ret = mbedtls_pk_write_pubkey_der( &pk, pkey_psa, + sizeof( pkey_psa ) ); + TEST_ASSERT( ret >= 0 ); + klen_psa = (size_t) ret; + /* mbedtls_pk_write_pubkey_der() writes backwards in the data buffer. */ + pkey_psa_start = pkey_psa + sizeof( pkey_psa ) - klen_psa; + + TEST_ASSERT( klen_psa == klen_legacy ); + TEST_ASSERT( memcmp( pkey_psa_start, pkey_legacy_start, klen_psa ) == 0 ); + + mbedtls_pk_free( &pk ); + TEST_ASSERT( PSA_SUCCESS == psa_destroy_key( key_id ) ); + + mbedtls_pk_init( &pk ); + TEST_ASSERT( mbedtls_pk_parse_public_key( &pk, pkey_legacy_start, + klen_legacy ) == 0 ); + TEST_ASSERT( mbedtls_pk_verify( &pk, MBEDTLS_MD_SHA256, + hash, sizeof hash, sig, sig_len ) == 0 ); + +exit: + /* + * Key attributes may have been returned by psa_get_key_attributes() + * thus reset them as required. + */ + psa_reset_key_attributes( &attributes ); + + mbedtls_pk_free( &pk ); + USE_PSA_DONE( ); +} + +void test_pk_psa_sign_wrapper( void ** params ) +{ + + test_pk_psa_sign( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_ECDSA_C */ +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_SHA256_C */ +#endif /* MBEDTLS_PK_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_PK_C) + + case 0: + { + *out_value = MBEDTLS_PK_RSA; + } + break; + case 1: + { + *out_value = MBEDTLS_PK_ECKEY; + } + break; + case 2: + { + *out_value = MBEDTLS_ECP_DP_SECP192R1; + } + break; + case 3: + { + *out_value = MBEDTLS_PK_ECKEY_DH; + } + break; + case 4: + { + *out_value = MBEDTLS_ECP_DP_CURVE25519; + } + break; + case 5: + { + *out_value = MBEDTLS_ECP_DP_CURVE448; + } + break; + case 6: + { + *out_value = MBEDTLS_PK_ECDSA; + } + break; + case 7: + { + *out_value = MBEDTLS_ECP_DP_SECP256R1; + } + break; + case 8: + { + *out_value = MBEDTLS_ECP_DP_SECP384R1; + } + break; + case 9: + { + *out_value = MBEDTLS_ECP_DP_SECP521R1; + } + break; + case 10: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 11: + { + *out_value = MBEDTLS_ERR_RSA_VERIFY_FAILED; + } + break; + case 12: + { + *out_value = MBEDTLS_ERR_ECP_VERIFY_FAILED; + } + break; + case 13: + { + *out_value = MBEDTLS_ECP_DP_BP256R1; + } + break; + case 14: + { + *out_value = MBEDTLS_ECP_DP_BP512R1; + } + break; + case 15: + { + *out_value = MBEDTLS_ERR_PK_TYPE_MISMATCH; + } + break; + case 16: + { + *out_value = MBEDTLS_ERR_RSA_INVALID_PADDING; + } + break; + case 17: + { + *out_value = MBEDTLS_MD_SHA256; + } + break; + case 18: + { + *out_value = MBEDTLS_PK_RSASSA_PSS; + } + break; + case 19: + { + *out_value = MBEDTLS_RSA_SALT_LEN_ANY; + } + break; + case 20: + { + *out_value = MBEDTLS_MD_NONE; + } + break; + case 21: + { + *out_value = -1; + } + break; + case 22: + { + *out_value = MBEDTLS_ERR_PK_BAD_INPUT_DATA; + } + break; + case 23: + { + *out_value = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; + } + break; + case 24: + { + *out_value = MBEDTLS_ERR_RSA_KEY_CHECK_FAILED; + } + break; + case 25: + { + *out_value = PSA_ECC_FAMILY_SECP_R1; + } + break; + case 26: + { + *out_value = MBEDTLS_ECP_DP_SECP192K1; + } + break; + case 27: + { + *out_value = PSA_ECC_FAMILY_SECP_K1; + } + break; + case 28: + { + *out_value = MBEDTLS_ECP_DP_SECP256K1; + } + break; + case 29: + { + *out_value = PSA_ECC_FAMILY_BRAINPOOL_P_R1; + } + break; + case 30: + { + *out_value = MBEDTLS_ECP_DP_BP384R1; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_PK_C) + + case 0: + { +#if defined(MBEDTLS_RSA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_GENPRIME) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_ECP_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_ECP_DP_CURVE25519_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 5: + { +#if defined(MBEDTLS_ECP_DP_CURVE448_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 6: + { +#if defined(MBEDTLS_ECDSA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 7: + { +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 8: + { +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 9: + { +#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 10: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 11: + { +#if defined(MBEDTLS_PKCS1_V15) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 12: + { +#if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 13: + { +#if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 14: + { +#if defined(MBEDTLS_PKCS1_V21) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 15: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 16: + { +#if defined(MBEDTLS_HAVE_INT64) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 17: + { +#if defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 18: + { +#if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 19: + { +#if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_PK_C) && defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) + test_pk_psa_utils_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_PK_C) + test_valid_parameters_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_PK_C) && defined(MBEDTLS_PK_WRITE_C) + test_valid_parameters_pkwrite_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_PK_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_invalid_parameters_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_PK_C) + test_pk_utils_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_PK_C) && defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_FS_IO) + test_mbedtls_pk_check_pair_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_PK_C) && defined(MBEDTLS_RSA_C) + test_pk_rsa_verify_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_PK_C) && defined(MBEDTLS_RSA_C) + test_pk_rsa_verify_ext_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_PK_C) && defined(MBEDTLS_ECDSA_C) + test_pk_ec_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_PK_C) && defined(MBEDTLS_ECP_RESTARTABLE) && defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECDSA_DETERMINISTIC) + test_pk_sign_verify_restart_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_PK_C) && defined(MBEDTLS_SHA256_C) + test_pk_sign_verify_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_PK_C) && defined(MBEDTLS_RSA_C) + test_pk_rsa_encrypt_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_PK_C) && defined(MBEDTLS_RSA_C) + test_pk_rsa_decrypt_test_vec_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_PK_C) + test_pk_ec_nocrypt_wrapper, +#else + NULL, +#endif +/* Function Id: 14 */ + +#if defined(MBEDTLS_PK_C) && defined(MBEDTLS_RSA_C) + test_pk_rsa_overflow_wrapper, +#else + NULL, +#endif +/* Function Id: 15 */ + +#if defined(MBEDTLS_PK_C) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_PK_RSA_ALT_SUPPORT) + test_pk_rsa_alt_wrapper, +#else + NULL, +#endif +/* Function Id: 16 */ + +#if defined(MBEDTLS_PK_C) && defined(MBEDTLS_SHA256_C) && defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_ECDSA_C) + test_pk_psa_sign_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_pk.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_pk.datax b/third_party/mbedtls/test/test_suite_pk.datax new file mode 100644 index 000000000..1560ac067 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_pk.datax @@ -0,0 +1,305 @@ +PK invalid parameters +3 + +PK valid parameters +1 + +PK write valid parameters +depends_on:0 +2:hex:"308204a20201000282010100a9021f3d406ad555538bfd36ee82652e15615e89bfb8e84590dbee881652d3f143504796125964876bfd2be046f973beddcf92e1915bed66a06f8929794580d0836ad54143775f397c09044782b0573970eda3ec15191ea8330847c10542a9fd4cc3b4dfdd061f4d1051406773130f40f86d81255f0ab153c6307e1539acf95aee7f929ea6055be7139785b52392d9d42406d50925897507dda61a8f3f0919bead652c64eb959bdcfe415e17a6da6c5b69cc02ba142c16249c4adccdd0f7526773f12da023fd7ef431ca2d70ca890b04db2ea64f706e9ecebd5889e253599e6e5a9265e2883f0c9419a3dde5e89d9513ed29dbab7012dc5aca6b17ab528254b10203010001028201001689f5e89142ae18a6ffb0513715a4b0b4a13b9e5b3729a2bd62d738c6e15cea7bf3a4d85ab2193a0628c9452bb1f0c1af8b132789df1c95e72778bf5330f5b0d915d242d5e0818e85001ed5fa93d1ce13455deb0a15438562e8e3c8d60ec1e4c9ebff9f2b36b9cde9332cc79f0d17a7ae79cc1353cd75409ad9b4b6d7ee3d82af6f3207656cf2ac98947c15c398db0cebf8dc3eef5398269480cdd09411b960273ae3f364da09af849f24aa87346c58618ea91d9d6cd1d3932c80dbfc1f0a4166a9036911999ca27761079f0ce02db02c1c909ff9b4278578d7bb1b54b2b7082fc9e864b6b394e331c0d11a9a68255565b6dd477f4119c5809839520700711102818100d7db987ad86de6a9b0749fb5da80bacde3bebd72dcc83f60a27db74f927ac3661386577bfce5b4a00ad024682401d6aad29713c8e223b53415305ca07559821099b187fdd1bad3dc4dec9da96f5fa6128331e8f7d89f1e1a788698d1a27256dc7cd392f04e531a9e38e7265bf4fd7eec01e7835e9b1a0dd8923e440381be1c2702818100c87025fff7a493c623404966fbc8b32ed164ca620ad1a0ad11ef42fd12118456017856a8b42e5d4ad36104e9dc9f8a2f3003c3957ffddb20e2f4e3fc3cf2cdddae01f57a56de4fd24b91ab6d3e5cc0e8af0473659594a6bbfdaacf958f19c8d508eac12d8977616af6877106288093d37904a139220c1bc278ea56edc086976702818043e708685c7cf5fa9b4f948e1856366d5e1f3a694f9a8e954f884c89f3823ac5798ee12657bfcaba2dac9c47464c6dc2fecc17a531be19da706fee336bb6e47b645dbc71d3eff9856bddeb1ac9b644ffbdd58d7ba9e1240f1faaf797ba8a4d58becbaf85789e1bd979fcfccc209d3db7f0416bc9eef09b3a6d86b8ce8199d4310281804f4b86ccffe49d0d8ace98fb63ea9f708b284ba483d130b6a75cb76cb4e4372d6b41774f20912319420ca4cbfc1b25a8cb5f01d6381f6ebc50ed3ef08010327f5ba2acc1ac7220b3fa6f7399314db2879b0db0b5647abd87abb01295815a5b086491b2c0d81c616ed67ef8a8ce0727f446711d7323d4147b5828a52143c43b4b028180540756beba83c20a0bda11d6dec706a71744ff28090cec079dffb507d82828038fe657f61496a20317f779cb683ce8196c29a6fe28839a282eef4de57773be56808b0c3e2ac7747e2b200b2fbf20b55258cd24622a1ce0099de098ab0855106ae087f08b0c8c346d81619400c1b4838e33ed9ff90f05db8fccf8fb7ab881ca12" + +PK utils: RSA 512-bit +depends_on:0:1 +4:exp:0:int:512:int:512:int:64:char*:"RSA" + +PK utils: ECKEY SECP192R1 +depends_on:2:3 +4:exp:1:exp:2:int:192:int:24:char*:"EC" + +PK utils: ECKEY_DH SECP192R1 +depends_on:2:3 +4:exp:3:exp:2:int:192:int:24:char*:"EC_DH" + +PK utils: ECKEY_DH Curve25519 +depends_on:2:4 +4:exp:3:exp:4:int:255:int:32:char*:"EC_DH" + +PK utils: ECKEY_DH Curve448 +depends_on:2:5 +4:exp:3:exp:5:int:448:int:56:char*:"EC_DH" + +PK utils: ECDSA SECP192R1 +depends_on:6:3 +4:exp:6:exp:2:int:192:int:24:char*:"ECDSA" + +PK utils: ECDSA SECP256R1 +depends_on:6:7 +4:exp:6:exp:7:int:256:int:32:char*:"ECDSA" + +PK utils: ECDSA SECP384R1 +depends_on:6:8 +4:exp:6:exp:8:int:384:int:48:char*:"ECDSA" + +PK utils: ECDSA SECP521R1 +depends_on:6:9 +4:exp:6:exp:9:int:521:int:66:char*:"ECDSA" + +PK PSA utilities: setup/free, info functions, unsupported operations +0 + +RSA verify test vector #1 (good) +depends_on:10:11 +6:hex:"206ef4bf396c6087f8229ef196fd35f37ccb8de5efcdb238f20d556668f114257a11fbe038464a67830378e62ae9791453953dac1dbd7921837ba98e84e856eb80ed9487e656d0b20c28c8ba5e35db1abbed83ed1c7720a97701f709e3547a4bfcabca9c89c57ad15c3996577a0ae36d7c7b699035242f37954646c1cd5c08ac":exp:10:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"3":hex:"5abc01f5de25b70867ff0c24e222c61f53c88daf42586fddcd56f3c4588f074be3c328056c063388688b6385a8167957c6e5355a510e005b8a851d69c96b36ec6036644078210e5d7d326f96365ee0648882921492bc7b753eb9c26cdbab37555f210df2ca6fec1b25b463d38b81c0dcea202022b04af5da58aa03d77be949b7":int:0 + +RSA verify test vector #2 (bad) +depends_on:10:11 +6:hex:"d6248c3e96b1a7e5fea978870fcc4c9786b4e5156e16b7faef4557d667f730b8bc4c784ef00c624df5309513c3a5de8ca94c2152e0459618666d3148092562ebc256ffca45b27fd2d63c68bd5e0a0aefbe496e9e63838a361b1db6fc272464f191490bf9c029643c49d2d9cd08833b8a70b4b3431f56fb1eb55ccd39e77a9c92":exp:10:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"3":hex:"3203b7647fb7e345aa457681e5131777f1adc371f2fba8534928c4e52ef6206a856425d6269352ecbf64db2f6ad82397768cafdd8cd272e512d617ad67992226da6bc291c31404c17fd4b7e2beb20eff284a44f4d7af47fd6629e2c95809fa7f2241a04f70ac70d3271bb13258af1ed5c5988c95df7fa26603515791075feccd":exp:11 + +ECDSA verify test vector #1 (good) +depends_on:3 +8:exp:6:exp:2:hex:"046FDD3028FA94A863CD4F78DBFF8B3AA561FC6D9CCBBCA88E0AE6FA437F5415F957542D0717FF8B84562DAE99872EF841":hex:"546869732073686F756C64206265207468652068617368206F662061206D6573736167652E00":hex:"30350218185B2A7FB5CD9C9A8488B119B68B47D6EC833509CE9FA1FF021900FB7D259A744A2348BD45D241A39DC915B81CC2084100FA24":int:0 + +ECDSA verify test vector #2 (bad) +depends_on:3 +8:exp:6:exp:2:hex:"046FDD3028FA94A863CD4F78DBFF8B3AA561FC6D9CCBBCA88E0AE6FA437F5415F957542D0717FF8B84562DAE99872EF841":hex:"546869732073686F756C64206265207468652068617368206F662061206D6573736167652E00":hex:"30350218185B2A7FB5CD9C9A8488B119B68B47D6EC833509CE9FA1FF021900FB7D259A744A2348BD45D241A39DC915B81CC2084100FA25":exp:12 + +EC(DSA) verify test vector #1 (good) +depends_on:3 +8:exp:1:exp:2:hex:"046FDD3028FA94A863CD4F78DBFF8B3AA561FC6D9CCBBCA88E0AE6FA437F5415F957542D0717FF8B84562DAE99872EF841":hex:"546869732073686F756C64206265207468652068617368206F662061206D6573736167652E00":hex:"30350218185B2A7FB5CD9C9A8488B119B68B47D6EC833509CE9FA1FF021900FB7D259A744A2348BD45D241A39DC915B81CC2084100FA24":int:0 + +EC(DSA) verify test vector #2 (bad) +depends_on:3 +8:exp:1:exp:2:hex:"046FDD3028FA94A863CD4F78DBFF8B3AA561FC6D9CCBBCA88E0AE6FA437F5415F957542D0717FF8B84562DAE99872EF841":hex:"546869732073686F756C64206265207468652068617368206F662061206D6573736167652E00":hex:"30350218185B2A7FB5CD9C9A8488B119B68B47D6EC833509CE9FA1FF021900FB7D259A744A2348BD45D241A39DC915B81CC2084100FA25":exp:12 + +EC(DSA) verify test vector: good, bitlen(r) = 256 +depends_on:7 +8:exp:1:exp:7:hex:"0437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":hex:"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855":hex:"3046022100faecc085c6c5362b91ff1fd6dd77da80bc071bee9ff1ac0ef9509c017f13267c022100a7d0b908c938d3dd6c6a9cdc5b0a4a4ee455c519c1ff6cda959806b7e7461ba0":int:0 + +EC(DSA) verify test vector: good, bitlen(r) = 255 +depends_on:7 +8:exp:1:exp:7:hex:"0437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":hex:"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855":hex:"30450220639f36215b2ff09bb2beb871e122de74c8d5e29ce8a105aa2b95661f42803e72022100becd8f81b2c186f9d5d2c92378d7b9452ce6de231b0c8d17bac2d8537d2331fd":int:0 + +EC(DSA) verify test vector: good, bitlen(r) = 248 +depends_on:7 +8:exp:1:exp:7:hex:"0437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":hex:"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855":hex:"30450220009109f967f9082abc9c46e5ea07936529b82023a1a49b872c046f430983db2602210085f0b1960d61f8d75109b5b7ff991d3171320d2ab547104f864048455a965090":int:0 + +EC(DSA) verify test vector: good, bitlen(r) = 247 +depends_on:7 +8:exp:1:exp:7:hex:"0437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":hex:"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855":hex:"3044021f461786833b50247b07194da6cedbd3caefbcd19c73b6283ccff5097cd0d73b022100d85d20b0b8c3b596eb1cdb0381e681fa0a8bccde4e89c139020af3b0f88e099c":int:0 + +EC(DSA) verify test vector: good, bitlen(s) = 256 +depends_on:7 +8:exp:1:exp:7:hex:"0437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":hex:"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855":hex:"30450220639f36215b2ff09bb2beb871e122de74c8d5e29ce8a105aa2b95661f42803e72022100becd8f81b2c186f9d5d2c92378d7b9452ce6de231b0c8d17bac2d8537d2331fd":int:0 + +EC(DSA) verify test vector: good, bitlen(s) = 255 +depends_on:7 +8:exp:1:exp:7:hex:"0437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":hex:"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855":hex:"304402206ae26950c606d08fe5e1682efdccfb3a7213ca46bd523ffd20c4213fe1400d3402207612106ada7055926167650b257da7f4c42c190b8aa9e3b680f8751fe90c63a5":int:0 + +EC(DSA) verify test vector: good, bitlen(s) = 248 +depends_on:7 +8:exp:1:exp:7:hex:"0437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":hex:"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855":hex:"3045022100fd4d718ab483827492e10b89745fad100d2dd257102b99aff179ee596a569f1f022000a1b777e32a8b4909763b615b805e59194e6196eb05719287a36eb5f17aa485":int:0 + +EC(DSA) verify test vector: good, bitlen(s) = 247 +depends_on:7 +8:exp:1:exp:7:hex:"0437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":hex:"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855":hex:"30430220685a6994daa6a14e4411b5267edc2a00beee907f2dddd956b2a5a1df791c15f8021f675db4538c000c734489ac737fddd5a739c5a23cd6c6eceea70c286ca4fac9":int:0 + +ECDSA sign-verify: SECP192R1 +depends_on:6:3 +10:exp:6:exp:2:int:0:int:0 + +ECDSA sign-verify: SECP256R1 +depends_on:6:7 +10:exp:6:exp:7:int:0:int:0 + +ECDSA sign-verify: SECP384R1 +depends_on:6:8 +10:exp:6:exp:8:int:0:int:0 + +ECDSA sign-verify: SECP521R1 +depends_on:6:9 +10:exp:6:exp:9:int:0:int:0 + +ECDSA sign-verify: BP256R1 +depends_on:6:12 +10:exp:6:exp:13:int:0:int:0 + +ECDSA sign-verify: BP512R1 +depends_on:6:13 +10:exp:6:exp:14:int:0:int:0 + +EC(DSA) sign-verify: SECP192R1 +depends_on:6:3 +10:exp:1:exp:2:int:0:int:0 + +EC_DH (no) sign-verify: SECP192R1 +depends_on:2:3 +10:exp:3:exp:2:exp:15:exp:15 + +RSA sign-verify +depends_on:0:11:1 +10:exp:0:int:512:int:0:int:0 + +RSA encrypt test vector +depends_on:11 +11:hex:"4E636AF98E40F3ADCFCCB698F4E80B9F":int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"b0c0b193ba4a5b4502bfacd1a9c2697da5510f3e3ab7274cf404418afd2c62c89b98d83bbc21c8c1bf1afe6d8bf40425e053e9c03e03a3be0edbe1eda073fade1cc286cc0305a493d98fe795634c3cad7feb513edb742d66d910c87d07f6b0055c3488bb262b5fd1ce8747af64801fb39d2d3a3e57086ffe55ab8d0a2ca86975629a0f85767a4990c532a7c2dab1647997ebb234d0b28a0008bfebfc905e7ba5b30b60566a5e0190417465efdbf549934b8f0c5c9f36b7c5b6373a47ae553ced0608a161b1b70dfa509375cf7a3598223a6d7b7a1d1a06ac74d345a9bb7c0e44c8388858a4f1d8115f2bd769ffa69020385fa286302c80e950f9e2751308666c":int:0 + +RSA decrypt test vector #1 +depends_on:11 +12:hex:"a42eda41e56235e666e7faaa77100197f657288a1bf183e4820f0c37ce2c456b960278d6003e0bbcd4be4a969f8e8fd9231e1f492414f00ed09844994c86ec32db7cde3bec7f0c3dbf6ae55baeb2712fa609f5fc3207a824eb3dace31849cd6a6084318523912bccb84cf42e3c6d6d1685131d69bb545acec827d2b0dfdd5568b7dcc4f5a11d6916583fefa689d367f8c9e1d95dcd2240895a9470b0c1730f97cd6e8546860bd254801769f54be96e16362ddcbf34d56035028890199e0f48db38642cb66a4181e028a6443a404fea284ce02b4614b683367d40874e505611d23142d49f06feea831d52d347b13610b413c4efc43a6de9f0b08d2a951dc503b6":int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"4E636AF98E40F3ADCFCCB698F4E80B9F":int:0 + +RSA decrypt test vector #2 +depends_on:11 +12:hex:"a42eda41e56235e666e7faaa77100197f657288a1bf183e4820f0c37ce2c456b960278d6003e0bbcd4be4a969f8e8fd9231e1f492414f00ed09844994c86ec32db7cde3bec7f0c3dbf6ae55baeb2712fa609f5fc3207a824eb3dace31849cd6a6084318523912bccb84cf42e3c6d6d1685131d69bb545acec827d2b0dfdd5568b7dcc4f5a11d6916583fefa689d367f8c9e1d95dcd2240895a9470b0c1730f97cd6e8546860bd254801769f54be96e16362ddcbf34d56035028890199e0f48db38642cb66a4181e028a6443a404feb284ce02b4614b683367d40874e505611d23142d49f06feea831d52d347b13610b413c4efc43a6de9f0b08d2a951dc503b6":int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"4E636AF98E40F3ADCFCCB698F4E80B9F":exp:16 + +EC nocrypt +depends_on:2 +13:exp:1 + +EC-DH nocrypt +depends_on:2 +13:exp:3 + +ECDSA nocrypt +depends_on:6 +13:exp:6 + +RSA_ALT consistency +depends_on:0:11:1 +15 + +Verify ext RSA #1 (PKCS1 v2.1, salt_len = ANY, OK) +depends_on:14:15 +7:hex:"54657374206d657373616765":exp:17:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":hex:"0d2bdb0456a3d651d5bd48a4204493898f72cf1aaddd71387cc058bc3f4c235ea6be4010fd61b28e1fbb275462b53775c04be9022d38b6a2e0387dddba86a3f8554d2858044a59fddbd594753fc056fe33c8daddb85dc70d164690b1182209ff84824e0be10e35c379f2f378bf176a9f7cb94d95e44d90276a298c8810f741c9":exp:18:exp:17:exp:19:int:0 + +Verify ext RSA #2 (PKCS1 v2.1, salt_len = ANY, wrong message) +depends_on:14:15 +7:hex:"54657374206d657373616766":exp:17:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":hex:"0d2bdb0456a3d651d5bd48a4204493898f72cf1aaddd71387cc058bc3f4c235ea6be4010fd61b28e1fbb275462b53775c04be9022d38b6a2e0387dddba86a3f8554d2858044a59fddbd594753fc056fe33c8daddb85dc70d164690b1182209ff84824e0be10e35c379f2f378bf176a9f7cb94d95e44d90276a298c8810f741c9":exp:18:exp:17:exp:19:exp:11 + +Verify ext RSA #3 (PKCS1 v2.1, salt_len = 0, OK) +depends_on:14:15 +7:hex:"54657374206d657373616765":exp:17:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":hex:"7fc506d26ca3b22922a1ce39faaedd273161b82d9443c56f1a034f131ae4a18cae1474271cb4b66a17d9707ca58b0bdbd3c406b7e65bbcc9bbbce94dc45de807b4989b23b3e4db74ca29298137837eb90cc83d3219249bc7d480fceaf075203a86e54c4ecfa4e312e39f8f69d76534089a36ed9049ca9cfd5ab1db1fa75fe5c8":exp:18:exp:17:int:0:int:0 + +Verify ext RSA #4 (PKCS1 v2.1, salt_len = max, OK) +depends_on:14:15 +7:hex:"54657374206d657373616765":exp:17:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":hex:"0d2bdb0456a3d651d5bd48a4204493898f72cf1aaddd71387cc058bc3f4c235ea6be4010fd61b28e1fbb275462b53775c04be9022d38b6a2e0387dddba86a3f8554d2858044a59fddbd594753fc056fe33c8daddb85dc70d164690b1182209ff84824e0be10e35c379f2f378bf176a9f7cb94d95e44d90276a298c8810f741c9":exp:18:exp:17:int:94:int:0 + +Verify ext RSA #5 (PKCS1 v2.1, wrong salt_len) +depends_on:14:15 +7:hex:"54657374206d657373616765":exp:17:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":hex:"0d2bdb0456a3d651d5bd48a4204493898f72cf1aaddd71387cc058bc3f4c235ea6be4010fd61b28e1fbb275462b53775c04be9022d38b6a2e0387dddba86a3f8554d2858044a59fddbd594753fc056fe33c8daddb85dc70d164690b1182209ff84824e0be10e35c379f2f378bf176a9f7cb94d95e44d90276a298c8810f741c9":exp:18:exp:17:int:32:exp:16 + +Verify ext RSA #6 (PKCS1 v2.1, MGF1 alg != MSG hash alg) +depends_on:14:15 +7:hex:"c0719e9a8d5d838d861dc6f675c899d2b309a3a65bb9fe6b11e5afcbf9a2c0b1":exp:20:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":hex:"0d2bdb0456a3d651d5bd48a4204493898f72cf1aaddd71387cc058bc3f4c235ea6be4010fd61b28e1fbb275462b53775c04be9022d38b6a2e0387dddba86a3f8554d2858044a59fddbd594753fc056fe33c8daddb85dc70d164690b1182209ff84824e0be10e35c379f2f378bf176a9f7cb94d95e44d90276a298c8810f741c9":exp:18:exp:17:exp:19:int:0 + +Verify ext RSA #7 (PKCS1 v2.1, wrong MGF1 alg != MSG hash alg) +depends_on:14:15:10 +7:hex:"c0719e9a8d5d838d861dc6f675c899d2b309a3a65bb9fe6b11e5afcbf9a2c0b1":exp:20:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":hex:"0d2bdb0456a3d651d5bd48a4204493898f72cf1aaddd71387cc058bc3f4c235ea6be4010fd61b28e1fbb275462b53775c04be9022d38b6a2e0387dddba86a3f8554d2858044a59fddbd594753fc056fe33c8daddb85dc70d164690b1182209ff84824e0be10e35c379f2f378bf176a9f7cb94d95e44d90276a298c8810f741c9":exp:18:exp:10:exp:19:exp:16 + +Verify ext RSA #8 (PKCS1 v2.1, RSASSA-PSS without options) +depends_on:14:15 +7:hex:"54657374206d657373616765":exp:17:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":hex:"0d2bdb0456a3d651d5bd48a4204493898f72cf1aaddd71387cc058bc3f4c235ea6be4010fd61b28e1fbb275462b53775c04be9022d38b6a2e0387dddba86a3f8554d2858044a59fddbd594753fc056fe33c8daddb85dc70d164690b1182209ff84824e0be10e35c379f2f378bf176a9f7cb94d95e44d90276a298c8810f741c9":exp:18:exp:21:exp:19:exp:22 + +Verify ext RSA #9 (PKCS1 v1.5, RSA with options) +depends_on:11:15 +7:hex:"54657374206d657373616765":exp:17:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":hex:"0d2bdb0456a3d651d5bd48a4204493898f72cf1aaddd71387cc058bc3f4c235ea6be4010fd61b28e1fbb275462b53775c04be9022d38b6a2e0387dddba86a3f8554d2858044a59fddbd594753fc056fe33c8daddb85dc70d164690b1182209ff84824e0be10e35c379f2f378bf176a9f7cb94d95e44d90276a298c8810f741c9":exp:0:exp:17:exp:19:exp:22 + +Verify ext RSA #10 (PKCS1 v1.5, RSA without options) +depends_on:11:15 +7:hex:"54657374206d657373616765":exp:17:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":hex:"0d2bdb0456a3d651d5bd48a4204493898f72cf1aaddd71387cc058bc3f4c235ea6be4010fd61b28e1fbb275462b53775c04be9022d38b6a2e0387dddba86a3f8554d2858044a59fddbd594753fc056fe33c8daddb85dc70d164690b1182209ff84824e0be10e35c379f2f378bf176a9f7cb94d95e44d90276a298c8810f741c9":exp:0:exp:21:exp:19:exp:11 + +Verify ext RSA #11 (PKCS1 v2.1, asking for ECDSA) +depends_on:6:15 +7:hex:"54657374206d657373616765":exp:17:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":hex:"0d2bdb0456a3d651d5bd48a4204493898f72cf1aaddd71387cc058bc3f4c235ea6be4010fd61b28e1fbb275462b53775c04be9022d38b6a2e0387dddba86a3f8554d2858044a59fddbd594753fc056fe33c8daddb85dc70d164690b1182209ff84824e0be10e35c379f2f378bf176a9f7cb94d95e44d90276a298c8810f741c9":exp:6:exp:21:exp:19:exp:15 + +Verify ext RSA #12 (PKCS1 v1.5, good) +depends_on:10:11 +7:hex:"206ef4bf396c6087f8229ef196fd35f37ccb8de5efcdb238f20d556668f114257a11fbe038464a67830378e62ae9791453953dac1dbd7921837ba98e84e856eb80ed9487e656d0b20c28c8ba5e35db1abbed83ed1c7720a97701f709e3547a4bfcabca9c89c57ad15c3996577a0ae36d7c7b699035242f37954646c1cd5c08ac":exp:10:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"3":hex:"5abc01f5de25b70867ff0c24e222c61f53c88daf42586fddcd56f3c4588f074be3c328056c063388688b6385a8167957c6e5355a510e005b8a851d69c96b36ec6036644078210e5d7d326f96365ee0648882921492bc7b753eb9c26cdbab37555f210df2ca6fec1b25b463d38b81c0dcea202022b04af5da58aa03d77be949b7":exp:0:exp:21:exp:19:int:0 + +Check pair #1 (EC, OK) +depends_on:2:7 +5:char*:"zip:third_party/mbedtls/test/data/ec_256_pub.pem":char*:"zip:third_party/mbedtls/test/data/ec_256_prv.pem":int:0 + +Check pair #2 (EC, bad) +depends_on:2:7 +5:char*:"zip:third_party/mbedtls/test/data/ec_256_pub.pem":char*:"zip:third_party/mbedtls/test/data/server5.key":exp:23 + +Check pair #3 (RSA, OK) +depends_on:0:11 +5:char*:"zip:third_party/mbedtls/test/data/server1.pubkey":char*:"zip:third_party/mbedtls/test/data/server1.key":int:0 + +Check pair #4 (RSA, bad) +depends_on:0:11 +5:char*:"zip:third_party/mbedtls/test/data/server1.pubkey":char*:"zip:third_party/mbedtls/test/data/server2.key":exp:24 + +Check pair #5 (RSA vs EC) +depends_on:2:7:0 +5:char*:"zip:third_party/mbedtls/test/data/ec_256_pub.pem":char*:"zip:third_party/mbedtls/test/data/server1.key":exp:15 + +RSA hash_len overflow (size_t vs unsigned int) +depends_on:0:16 +14 + +ECDSA restartable sign/verify: ECDSA, max_ops=0 (disabled) +depends_on:7:15 +9:exp:6:exp:7:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":char*:"60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6":char*:"7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299":exp:17:char*:"test":hex:"3045022100f1abb023518351cd71d881567b1ea663ed3efcf6c5132b354f28d3b0b7d383670220019f4113742a2b14bd25926b49c649155f267e60d3814b4c0cc84250e46f0083":int:0:int:0:int:0 + +ECDSA restartable sign/verify: ECKEY, max_ops=0 (disabled) +depends_on:7:15 +9:exp:1:exp:7:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":char*:"60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6":char*:"7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299":exp:17:char*:"test":hex:"3045022100f1abb023518351cd71d881567b1ea663ed3efcf6c5132b354f28d3b0b7d383670220019f4113742a2b14bd25926b49c649155f267e60d3814b4c0cc84250e46f0083":int:0:int:0:int:0 + +ECDSA restartable sign/verify: ECDSA, max_ops=1 +depends_on:7:15 +9:exp:6:exp:7:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":char*:"60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6":char*:"7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299":exp:17:char*:"test":hex:"3045022100f1abb023518351cd71d881567b1ea663ed3efcf6c5132b354f28d3b0b7d383670220019f4113742a2b14bd25926b49c649155f267e60d3814b4c0cc84250e46f0083":int:1:int:1:int:10000 + +ECDSA restartable sign/verify: ECKEY, max_ops=1 +depends_on:7:15 +9:exp:1:exp:7:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":char*:"60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6":char*:"7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299":exp:17:char*:"test":hex:"3045022100f1abb023518351cd71d881567b1ea663ed3efcf6c5132b354f28d3b0b7d383670220019f4113742a2b14bd25926b49c649155f267e60d3814b4c0cc84250e46f0083":int:1:int:1:int:10000 + +ECDSA restartable sign/verify: ECDSA, max_ops=10000 +depends_on:7:15 +9:exp:6:exp:7:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":char*:"60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6":char*:"7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299":exp:17:char*:"test":hex:"3045022100f1abb023518351cd71d881567b1ea663ed3efcf6c5132b354f28d3b0b7d383670220019f4113742a2b14bd25926b49c649155f267e60d3814b4c0cc84250e46f0083":int:10000:int:0:int:0 + +ECDSA restartable sign/verify: ECKEY, max_ops=10000 +depends_on:7:15 +9:exp:1:exp:7:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":char*:"60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6":char*:"7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299":exp:17:char*:"test":hex:"3045022100f1abb023518351cd71d881567b1ea663ed3efcf6c5132b354f28d3b0b7d383670220019f4113742a2b14bd25926b49c649155f267e60d3814b4c0cc84250e46f0083":int:10000:int:0:int:0 + +ECDSA restartable sign/verify: ECDSA, max_ops=250 +depends_on:7:15 +9:exp:6:exp:7:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":char*:"60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6":char*:"7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299":exp:17:char*:"test":hex:"3045022100f1abb023518351cd71d881567b1ea663ed3efcf6c5132b354f28d3b0b7d383670220019f4113742a2b14bd25926b49c649155f267e60d3814b4c0cc84250e46f0083":int:250:int:2:int:64 + +ECDSA restartable sign/verify: ECKEY, max_ops=250 +depends_on:7:15 +9:exp:1:exp:7:char*:"C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721":char*:"60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6":char*:"7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299":exp:17:char*:"test":hex:"3045022100f1abb023518351cd71d881567b1ea663ed3efcf6c5132b354f28d3b0b7d383670220019f4113742a2b14bd25926b49c649155f267e60d3814b4c0cc84250e46f0083":int:250:int:2:int:64 + +PSA wrapped sign: SECP256R1 +depends_on:7 +16:exp:7:exp:25:int:256 + +PSA wrapped sign: SECP384R1 +depends_on:8 +16:exp:8:exp:25:int:384 + +PSA wrapped sign: SECP521R1 +depends_on:9 +16:exp:9:exp:25:int:521 + +PSA wrapped sign: SECP192K1 +depends_on:17 +16:exp:26:exp:27:int:192 + +PSA wrapped sign: SECP256K1 +depends_on:18 +16:exp:28:exp:27:int:256 + +PSA wrapped sign: BP256R1 +depends_on:12 +16:exp:13:exp:29:int:256 + +PSA wrapped sign: BP384R1 +depends_on:19 +16:exp:30:exp:29:int:384 + +PSA wrapped sign: BP512R1 +depends_on:13 +16:exp:14:exp:29:int:512 + diff --git a/third_party/mbedtls/test/test_suite_pkcs1_v15.c b/third_party/mbedtls/test/test_suite_pkcs1_v15.c new file mode 100644 index 000000000..1a0126478 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_pkcs1_v15.c @@ -0,0 +1,697 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_pkcs1_v15.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_pkcs1_v15.function + * Test suite data : suites/test_suite_pkcs1_v15.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_SHA1_C) +#include "third_party/mbedtls/rsa.h" +#include "third_party/mbedtls/md.h" +void test_pkcs1_rsaes_v15_encrypt( int mod, int radix_N, char * input_N, + int radix_E, char * input_E, int hash, + data_t * message_str, data_t * rnd_buf, + data_t * result_str, int result ) +{ + unsigned char output[128]; + mbedtls_rsa_context ctx; + mbedtls_test_rnd_buf_info info; + mbedtls_mpi N, E; + + info.buf = rnd_buf->x; + info.length = rnd_buf->len; + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E ); + mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash ); + memset( output, 0x00, sizeof( output ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) ); + TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 ); + + if( message_str->len == 0 ) + message_str->x = NULL; + TEST_ASSERT( mbedtls_rsa_pkcs1_encrypt( &ctx, + &mbedtls_test_rnd_buffer_rand, + &info, MBEDTLS_RSA_PUBLIC, + message_str->len, message_str->x, + output ) == result ); + + if( result == 0 ) + { + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + ctx.len, result_str->len ) == 0 ); + } + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_pkcs1_rsaes_v15_encrypt_wrapper( void ** params ) +{ + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + + test_pkcs1_rsaes_v15_encrypt( *( (int *) params[0] ), *( (int *) params[1] ), (char *) params[2], *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), &data6, &data8, &data10, *( (int *) params[12] ) ); +} +void test_pkcs1_rsaes_v15_decrypt( int mod, int radix_P, char * input_P, + int radix_Q, char * input_Q, int radix_N, + char * input_N, int radix_E, char * input_E, + int hash, data_t * result_str, + char * seed, data_t * message_str, + int result ) +{ + unsigned char output[128]; + mbedtls_rsa_context ctx; + size_t output_len; + mbedtls_test_rnd_pseudo_info rnd_info; + mbedtls_mpi N, P, Q, E; + ((void) seed); + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); + mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E ); + mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash ); + + memset( output, 0x00, sizeof( output ) ); + memset( &rnd_info, 0, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) ); + TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 ); + TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 ); + + if( result_str->len == 0 ) + { + TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info, + MBEDTLS_RSA_PRIVATE, + &output_len, message_str->x, + NULL, 0 ) == result ); + } + else + { + TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info, MBEDTLS_RSA_PRIVATE, + &output_len, message_str->x, + output, 1000 ) == result ); + if( result == 0 ) + { + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + output_len, + result_str->len) == 0 ); + } + } + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P ); + mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_pkcs1_rsaes_v15_decrypt_wrapper( void ** params ) +{ + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data13 = {(uint8_t *) params[13], *( (uint32_t *) params[14] )}; + + test_pkcs1_rsaes_v15_decrypt( *( (int *) params[0] ), *( (int *) params[1] ), (char *) params[2], *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), (char *) params[6], *( (int *) params[7] ), (char *) params[8], *( (int *) params[9] ), &data10, (char *) params[12], &data13, *( (int *) params[15] ) ); +} +void test_pkcs1_v15_decode( int mode, + data_t *input, + int expected_plaintext_length_arg, + int output_size_arg, + int expected_result ) +{ + size_t expected_plaintext_length = expected_plaintext_length_arg; + size_t output_size = output_size_arg; + mbedtls_test_rnd_pseudo_info rnd_info; + mbedtls_mpi Nmpi, Empi, Pmpi, Qmpi; + mbedtls_rsa_context ctx; + static unsigned char N[128] = { + 0xc4, 0x79, 0x4c, 0x6d, 0xb2, 0xe9, 0xdf, 0xc5, + 0xe5, 0xd7, 0x55, 0x4b, 0xfb, 0x6c, 0x2e, 0xec, + 0x84, 0xd0, 0x88, 0x12, 0xaf, 0xbf, 0xb4, 0xf5, + 0x47, 0x3c, 0x7e, 0x92, 0x4c, 0x58, 0xc8, 0x73, + 0xfe, 0x8f, 0x2b, 0x8f, 0x8e, 0xc8, 0x5c, 0xf5, + 0x05, 0xeb, 0xfb, 0x0d, 0x7b, 0x2a, 0x93, 0xde, + 0x15, 0x0d, 0xc8, 0x13, 0xcf, 0xd2, 0x6f, 0x0d, + 0x9d, 0xad, 0x30, 0xe5, 0x70, 0x20, 0x92, 0x9e, + 0xb3, 0x6b, 0xba, 0x5c, 0x50, 0x0f, 0xc3, 0xb2, + 0x7e, 0x64, 0x07, 0x94, 0x7e, 0xc9, 0x4e, 0xc1, + 0x65, 0x04, 0xaf, 0xb3, 0x9f, 0xde, 0xa8, 0x46, + 0xfa, 0x6c, 0xf3, 0x03, 0xaf, 0x1c, 0x1b, 0xec, + 0x75, 0x44, 0x66, 0x77, 0xc9, 0xde, 0x51, 0x33, + 0x64, 0x27, 0xb0, 0xd4, 0x8d, 0x31, 0x6a, 0x11, + 0x27, 0x3c, 0x99, 0xd4, 0x22, 0xc0, 0x9d, 0x12, + 0x01, 0xc7, 0x4a, 0x73, 0xac, 0xbf, 0xc2, 0xbb + }; + static unsigned char E[1] = { 0x03 }; + static unsigned char P[64] = { + 0xe5, 0x53, 0x1f, 0x88, 0x51, 0xee, 0x59, 0xf8, + 0xc1, 0xe4, 0xcc, 0x5b, 0xb3, 0x75, 0x8d, 0xc8, + 0xe8, 0x95, 0x2f, 0xd0, 0xef, 0x37, 0xb4, 0xcd, + 0xd3, 0x9e, 0x48, 0x8b, 0x81, 0x58, 0x60, 0xb9, + 0x27, 0x1d, 0xb6, 0x28, 0x92, 0x64, 0xa3, 0xa5, + 0x64, 0xbd, 0xcc, 0x53, 0x68, 0xdd, 0x3e, 0x55, + 0xea, 0x9d, 0x5e, 0xcd, 0x1f, 0x96, 0x87, 0xf1, + 0x29, 0x75, 0x92, 0x70, 0x8f, 0x28, 0xfb, 0x2b + }; + static unsigned char Q[64] = { + 0xdb, 0x53, 0xef, 0x74, 0x61, 0xb4, 0x20, 0x3b, + 0x3b, 0x87, 0x76, 0x75, 0x81, 0x56, 0x11, 0x03, + 0x59, 0x31, 0xe3, 0x38, 0x4b, 0x8c, 0x7a, 0x9c, + 0x05, 0xd6, 0x7f, 0x1e, 0x5e, 0x60, 0xf0, 0x4e, + 0x0b, 0xdc, 0x34, 0x54, 0x1c, 0x2e, 0x90, 0x83, + 0x14, 0xef, 0xc0, 0x96, 0x5c, 0x30, 0x10, 0xcc, + 0xc1, 0xba, 0xa0, 0x54, 0x3f, 0x96, 0x24, 0xca, + 0xa3, 0xfb, 0x55, 0xbc, 0x71, 0x29, 0x4e, 0xb1 + }; + unsigned char original[128]; + unsigned char intermediate[128]; + static unsigned char default_content[128] = { + /* A randomly generated pattern. */ + 0x4c, 0x27, 0x54, 0xa0, 0xce, 0x0d, 0x09, 0x4a, + 0x1c, 0x38, 0x8e, 0x2d, 0xa3, 0xc4, 0xe0, 0x19, + 0x4c, 0x99, 0xb2, 0xbf, 0xe6, 0x65, 0x7e, 0x58, + 0xd7, 0xb6, 0x8a, 0x05, 0x2f, 0xa5, 0xec, 0xa4, + 0x35, 0xad, 0x10, 0x36, 0xff, 0x0d, 0x08, 0x50, + 0x74, 0x47, 0xc9, 0x9c, 0x4a, 0xe7, 0xfd, 0xfa, + 0x83, 0x5f, 0x14, 0x5a, 0x1e, 0xe7, 0x35, 0x08, + 0xad, 0xf7, 0x0d, 0x86, 0xdf, 0xb8, 0xd4, 0xcf, + 0x32, 0xb9, 0x5c, 0xbe, 0xa3, 0xd2, 0x89, 0x70, + 0x7b, 0xc6, 0x48, 0x7e, 0x58, 0x4d, 0xf3, 0xef, + 0x34, 0xb7, 0x57, 0x54, 0x79, 0xc5, 0x8e, 0x0a, + 0xa3, 0xbf, 0x6d, 0x42, 0x83, 0x25, 0x13, 0xa2, + 0x95, 0xc0, 0x0d, 0x32, 0xec, 0x77, 0x91, 0x2b, + 0x68, 0xb6, 0x8c, 0x79, 0x15, 0xfb, 0x94, 0xde, + 0xb9, 0x2b, 0x94, 0xb3, 0x28, 0x23, 0x86, 0x3d, + 0x37, 0x00, 0xe6, 0xf1, 0x1f, 0x4e, 0xd4, 0x42 + }; + unsigned char final[128]; + size_t output_length = 0x7EA0; + + memset( &rnd_info, 0, sizeof( mbedtls_test_rnd_pseudo_info ) ); + mbedtls_mpi_init( &Nmpi ); mbedtls_mpi_init( &Empi ); + mbedtls_mpi_init( &Pmpi ); mbedtls_mpi_init( &Qmpi ); + mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, 0 ); + + TEST_ASSERT( mbedtls_mpi_read_binary( &Nmpi, N, sizeof( N ) ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_binary( &Empi, E, sizeof( E ) ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_binary( &Pmpi, P, sizeof( P ) ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_binary( &Qmpi, Q, sizeof( Q ) ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &Nmpi, &Pmpi, &Qmpi, + NULL, &Empi ) == 0 ); + TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 ); + + TEST_ASSERT( input->len <= sizeof( N ) ); + memcpy( original, input->x, input->len ); + memset( original + input->len, 'd', sizeof( original ) - input->len ); + if( mode == MBEDTLS_RSA_PRIVATE ) + TEST_ASSERT( mbedtls_rsa_public( &ctx, original, intermediate ) == 0 ); + else + TEST_ASSERT( mbedtls_rsa_private( &ctx, &mbedtls_test_rnd_pseudo_rand, + &rnd_info, original, + intermediate ) == 0 ); + + memcpy( final, default_content, sizeof( final ) ); + TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info, mode, &output_length, + intermediate, final, + output_size ) == expected_result ); + if( expected_result == 0 ) + { + TEST_ASSERT( output_length == expected_plaintext_length ); + TEST_ASSERT( memcmp( original + sizeof( N ) - output_length, + final, + output_length ) == 0 ); + } + else if( expected_result == MBEDTLS_ERR_RSA_INVALID_PADDING || + expected_result == MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ) + { + size_t max_payload_length = + output_size > sizeof( N ) - 11 ? sizeof( N ) - 11 : output_size; + size_t i; + size_t count = 0; + +#if !defined(MBEDTLS_RSA_ALT) + /* Check that the output in invalid cases is what the default + * implementation currently does. Alternative implementations + * may produce different output, so we only perform these precise + * checks when using the default implementation. */ + TEST_ASSERT( output_length == max_payload_length ); + for( i = 0; i < max_payload_length; i++ ) + TEST_ASSERT( final[i] == 0 ); +#endif + /* Even in alternative implementations, the outputs must have + * changed, otherwise it indicates at least a timing vulnerability + * because no write to the outputs is performed in the bad case. */ + TEST_ASSERT( output_length != 0x7EA0 ); + for( i = 0; i < max_payload_length; i++ ) + count += ( final[i] == default_content[i] ); + /* If more than 16 bytes are unchanged in final, that's evidence + * that final wasn't overwritten. */ + TEST_ASSERT( count < 16 ); + } + +exit: + mbedtls_mpi_free( &Nmpi ); mbedtls_mpi_free( &Empi ); + mbedtls_mpi_free( &Pmpi ); mbedtls_mpi_free( &Qmpi ); + mbedtls_rsa_free( &ctx ); +} + +void test_pkcs1_v15_decode_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_pkcs1_v15_decode( *( (int *) params[0] ), &data1, *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ) ); +} +void test_pkcs1_rsassa_v15_sign( int mod, int radix_P, char * input_P, int radix_Q, + char * input_Q, int radix_N, char * input_N, + int radix_E, char * input_E, int digest, int hash, + data_t * message_str, data_t * rnd_buf, + data_t * result_str, int result ) +{ + unsigned char hash_result[MBEDTLS_MD_MAX_SIZE]; + unsigned char output[128]; + mbedtls_rsa_context ctx; + mbedtls_mpi N, P, Q, E; + mbedtls_test_rnd_buf_info info; + + info.buf = rnd_buf->x; + info.length = rnd_buf->len; + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); + mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E ); + mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash ); + + memset( hash_result, 0x00, sizeof( hash_result ) ); + memset( output, 0x00, sizeof( output ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) ); + TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 ); + TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 ); + + + if( mbedtls_md_info_from_type( digest ) != NULL ) + TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ), message_str->x, message_str->len, hash_result ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_pkcs1_sign( &ctx, &mbedtls_test_rnd_buffer_rand, + &info, MBEDTLS_RSA_PRIVATE, digest, + 0, hash_result, output ) == result ); + if( result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + ctx.len, result_str->len ) == 0 ); + } + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P ); + mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_pkcs1_rsassa_v15_sign_wrapper( void ** params ) +{ + data_t data11 = {(uint8_t *) params[11], *( (uint32_t *) params[12] )}; + data_t data13 = {(uint8_t *) params[13], *( (uint32_t *) params[14] )}; + data_t data15 = {(uint8_t *) params[15], *( (uint32_t *) params[16] )}; + + test_pkcs1_rsassa_v15_sign( *( (int *) params[0] ), *( (int *) params[1] ), (char *) params[2], *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), (char *) params[6], *( (int *) params[7] ), (char *) params[8], *( (int *) params[9] ), *( (int *) params[10] ), &data11, &data13, &data15, *( (int *) params[17] ) ); +} +void test_pkcs1_rsassa_v15_verify( int mod, int radix_N, char * input_N, + int radix_E, char * input_E, int digest, + int hash, data_t * message_str, char * salt, + data_t * result_str, int result ) +{ + unsigned char hash_result[MBEDTLS_MD_MAX_SIZE]; + mbedtls_rsa_context ctx; + mbedtls_mpi N, E; + ((void) salt); + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E ); + mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, hash ); + memset( hash_result, 0x00, sizeof( hash_result ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) ); + TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 ); + + + if( mbedtls_md_info_from_type( digest ) != NULL ) + TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ), message_str->x, message_str->len, hash_result ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_pkcs1_verify( &ctx, NULL, NULL, MBEDTLS_RSA_PUBLIC, digest, 0, hash_result, result_str->x ) == result ); + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_pkcs1_rsassa_v15_verify_wrapper( void ** params ) +{ + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + + test_pkcs1_rsassa_v15_verify( *( (int *) params[0] ), *( (int *) params[1] ), (char *) params[2], *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), *( (int *) params[6] ), &data7, (char *) params[9], &data10, *( (int *) params[12] ) ); +} +#endif /* MBEDTLS_SHA1_C */ +#endif /* MBEDTLS_RSA_C */ +#endif /* MBEDTLS_PKCS1_V15 */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_SHA1_C) + + case 0: + { + *out_value = MBEDTLS_MD_NONE; + } + break; + case 1: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_RSA_BAD_INPUT_DATA; + } + break; + case 3: + { + *out_value = MBEDTLS_ERR_RSA_INVALID_PADDING; + } + break; + case 4: + { + *out_value = MBEDTLS_RSA_PRIVATE; + } + break; + case 5: + { + *out_value = MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE; + } + break; + case 6: + { + *out_value = MBEDTLS_RSA_PUBLIC; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_SHA1_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_SHA1_C) + test_pkcs1_rsaes_v15_encrypt_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_SHA1_C) + test_pkcs1_rsaes_v15_decrypt_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_SHA1_C) + test_pkcs1_v15_decode_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_SHA1_C) + test_pkcs1_rsassa_v15_sign_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_SHA1_C) + test_pkcs1_rsassa_v15_verify_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_pkcs1_v15.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_pkcs1_v15.datax b/third_party/mbedtls/test/test_suite_pkcs1_v15.datax new file mode 100644 index 000000000..60a4e35cb --- /dev/null +++ b/third_party/mbedtls/test/test_suite_pkcs1_v15.datax @@ -0,0 +1,132 @@ +RSAES-V15 Encryption input=NULL with length=0 +0:int:1024:int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:0:hex:"":hex:"aafd12f659cae63489b479e5076ddec2f06cb58f67c6697351ff4aec29cdbaabf2fbe3467cc254f81be8e78d765a2e63339fc99a66320db73158a35a255d051758e95ed4abb2cdc69bb454110e827441213ddc8770e93ea141e1fc673e017e97eadc6b968f385c2aecb03bfb3267c6697351ff4aec29cdbaabf2fbe34676cac0":hex:"42c6fce63a3b858ba89fe83004cac3651d1497c15090bf0086b9a4b9ff3bd451502838a413095aefe231832ba10bb467ae3f95c889cd8e9a6e32b4df633b2170d07a2168c086745f0017cf1d9facff2eee55af2fcb03730209173b2a0bbfb2d4c34d7ea93b3b0cb84a8a7b6371670e14482e6dcedbdd9efe66d906e0238586fe":int:0 + +RSAES-V15 Decryption empty output with NULL buffer +1:int:1024:int:16:char*:"eecfae81b1b9b3c908810b10a1b5600199eb9f44aef4fda493b81a9e3d84f632124ef0236e5d1e3b7e28fae7aa040a2d5b252176459d1f397541ba2a58fb6599":int:16:char*:"c97fb1f027f453f6341233eaaad1d9353f6c42d08866b1d05a0f2035028b9d869840b41666b42e92ea0da3b43204b5cfce3352524d0416a5a441e700af461503":int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:0:hex:"":char*:"aafd12f659cae63489b479e5076ddec2f06cb58f":hex:"42c6fce63a3b858ba89fe83004cac3651d1497c15090bf0086b9a4b9ff3bd451502838a413095aefe231832ba10bb467ae3f95c889cd8e9a6e32b4df633b2170d07a2168c086745f0017cf1d9facff2eee55af2fcb03730209173b2a0bbfb2d4c34d7ea93b3b0cb84a8a7b6371670e14482e6dcedbdd9efe66d906e0238586fe":int:0 + +RSAES-V15 Encryption Test Vector Int +0:int:1024:int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:1:hex:"d436e99569fd32a7c8a05bbc90d32c49":hex:"aafd12f659cae63489b479e5076ddec2f06cb58f67c6697351ff4aec29cdbaabf2fbe3467cc254f81be8e78d765a2e63339fc99a66320db73158a35a255d051758e95ed4abb2cdc69bb454110e827441213ddc8770e93ea141e1fc673e017e97eadc6b968f385c2aecb03bfb32":hex:"6c5ebca6116b1e91316613fbb5e93197270a849122d549122d05815e2626f80d20f7f3f038c98295203c0f7f6bb8c3568455c67dec82bca86be86eff43b56b7ba2d15375f9a42454c2a2c709953a6e4a977462e35fd21a9c2fb3c0ad2a370f7655267bf6f04814784982988e663b869fc8588475af860d499e5a6ffdfc2c6bfd":int:0 + +RSAES-V15 Decryption Test Vector Int +1:int:1024:int:16:char*:"eecfae81b1b9b3c908810b10a1b5600199eb9f44aef4fda493b81a9e3d84f632124ef0236e5d1e3b7e28fae7aa040a2d5b252176459d1f397541ba2a58fb6599":int:16:char*:"c97fb1f027f453f6341233eaaad1d9353f6c42d08866b1d05a0f2035028b9d869840b41666b42e92ea0da3b43204b5cfce3352524d0416a5a441e700af461503":int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:1:hex:"d436e99569fd32a7c8a05bbc90d32c49":char*:"aafd12f659cae63489b479e5076ddec2f06cb58f":hex:"28818cb14236ad18f4527e7f1f7633e96cef021bc3234475d7f61e88702b6335b42a352ed3f3267ac7c3e9ba4af17e45096c63eefd8d9a7cb42dfc52fffb2f5b8afb305b46312c2eb50634123b4437a2287ac57b7509d59a583fb741989a49f32625e9267b4641a6607b7303d35c68489db53c8d387b620d0d46a852e72ea43c":int:0 + +RSAES-V15 Encryption Test Vector Data just fits +0:int:1024:int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:1:hex:"4293cecc8095232ae595b84c15ec26f35cf5fde88ae7a9aaa717bcb1ecc4de498da81db97425000770817b5dde5eed01ca3745ff5ab894d0fc0921e5a10b081490129d8ccbaa154ad3dd461397af8ec964ef99402d60a7591ee44b8ce1c16ef88fcb2717076c730d88223893bdd8000b23d87d38ab":hex:"aafd12f659cae63489b479e5076ddec2f06cb58f":hex:"18cdb161f40a18509a3501b7e8ec1c7522e2490319efee8581179b5bcf3750f83a865952d078efd48f58f8060b0d43f9888b43a094fe15209451826ef797195885ff9fa3e26994eee85dbe5dd0404a71565708286027b433c88c85af555b96c34c304dc7c8278233654c022ef340042cfff55e6b15b67cfea8a5a384ef64a6ac":int:0 + +RSAES-V15 Decryption Test Vector Data just fits +1:int:1024:int:16:char*:"eecfae81b1b9b3c908810b10a1b5600199eb9f44aef4fda493b81a9e3d84f632124ef0236e5d1e3b7e28fae7aa040a2d5b252176459d1f397541ba2a58fb6599":int:16:char*:"c97fb1f027f453f6341233eaaad1d9353f6c42d08866b1d05a0f2035028b9d869840b41666b42e92ea0da3b43204b5cfce3352524d0416a5a441e700af461503":int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:1:hex:"4293cecc8095232ae595b84c15ec26f35cf5fde88ae7a9aaa717bcb1ecc4de498da81db97425000770817b5dde5eed01ca3745ff5ab894d0fc0921e5a10b081490129d8ccbaa154ad3dd461397af8ec964ef99402d60a7591ee44b8ce1c16ef88fcb2717076c730d88223893bdd8000b23d87d38ab":char*:"aafd12f659cae63489b479e5076ddec2f06cb58f":hex:"18cdb161f40a18509a3501b7e8ec1c7522e2490319efee8581179b5bcf3750f83a865952d078efd48f58f8060b0d43f9888b43a094fe15209451826ef797195885ff9fa3e26994eee85dbe5dd0404a71565708286027b433c88c85af555b96c34c304dc7c8278233654c022ef340042cfff55e6b15b67cfea8a5a384ef64a6ac":int:0 + +RSAES-V15 Encryption Test Vector Data too long 1 +0:int:1024:int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:1:hex:"b84293cecc8095232ae595b84c15ec26f35cf5fde88ae7a9aaa717bcb1ecc4de498da81db97425000770817b5dde5eed01ca3745ff5ab894d0fc0921e5a10b081490129d8ccbaa154ad3dd461397af8ec964ef99402d60a7591ee44b8ce1c16ef88fcb2717076c730d88223893bdd8000b23d87d38ab":hex:"aafd12f659cae63489b479e5076ddec2f06cb58f":hex:"05abded6751d620a95177abdba915027b58dd6eecf4ebe71f71c400b115e1d9e12465ace4db3cc03eb57fcbbfe017770f438cf84c10bad505919aefebfa0752087f6376b055beabf0e089fbb90e10f99c795d2d5676eea196db7f94a8fd34aedaba39fb230281bb9917cc91793eb37f84dedb2421e9680c39cfda34d4a012134":exp:2 + +RSAES-V15 Decryption Test Vector Padding too short 7 +1:int:1024:int:16:char*:"eecfae81b1b9b3c908810b10a1b5600199eb9f44aef4fda493b81a9e3d84f632124ef0236e5d1e3b7e28fae7aa040a2d5b252176459d1f397541ba2a58fb6599":int:16:char*:"c97fb1f027f453f6341233eaaad1d9353f6c42d08866b1d05a0f2035028b9d869840b41666b42e92ea0da3b43204b5cfce3352524d0416a5a441e700af461503":int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:1:hex:"b84293cecc8095232ae595b84c15ec26f35cf5fde88ae7a9aaa717bcb1ecc4de498da81db97425000770817b5dde5eed01ca3745ff5ab894d0fc0921e5a10b081490129d8ccbaa154ad3dd461397af8ec964ef99402d60a7591ee44b8ce1c16ef88fcb2717076c730d88223893bdd8000b23d87d38ab":char*:"aafd12f659cae63489b479e5076ddec2f06cb58f":hex:"05abded6751d620a95177abdba915027b58dd6eecf4ebe71f71c400b115e1d9e12465ace4db3cc03eb57fcbbfe017770f438cf84c10bad505919aefebfa0752087f6376b055beabf0e089fbb90e10f99c795d2d5676eea196db7f94a8fd34aedaba39fb230281bb9917cc91793eb37f84dedb2421e9680c39cfda34d4a012134":exp:3 + +RSAES-V15 Encryption Test Vector Data too long 3 +0:int:1024:int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:1:hex:"aa1ab84293cecc8095232ae595b84c15ec26f35cf5fde88ae7a9aaa717bcb1ecc4de498da81db97425000770817b5dde5eed01ca3745ff5ab894d0fc0921e5a10b081490129d8ccbaa154ad3dd461397af8ec964ef99402d60a7591ee44b8ce1c16ef88fcb2717076c730d88223893bdd8000b23d87d38ab":hex:"aafd12f659cae63489b479e5076ddec2f06cb58f":hex:"10d60b8040d57d8701bacb55f2f283d54601ec24d465601ac7f7d5a2f75cac380ba78ca4ab6f3c159f3a9fd6839f5adde0333852ebf876c585664c1a58a1e6885231982f2027be6d7f08ff1807d3ceda8e41ad1f02ddf97a7458832fd13a1f431de6a4ab79e3d4b88bb1df2c5c77fcde9e7b5aa1e7bb29112eae58763127752a":exp:2 + +RSAES-V15 Decryption Test Vector Padding too short 5 +1:int:1024:int:16:char*:"eecfae81b1b9b3c908810b10a1b5600199eb9f44aef4fda493b81a9e3d84f632124ef0236e5d1e3b7e28fae7aa040a2d5b252176459d1f397541ba2a58fb6599":int:16:char*:"c97fb1f027f453f6341233eaaad1d9353f6c42d08866b1d05a0f2035028b9d869840b41666b42e92ea0da3b43204b5cfce3352524d0416a5a441e700af461503":int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:1:hex:"aa1ab84293cecc8095232ae595b84c15ec26f35cf5fde88ae7a9aaa717bcb1ecc4de498da81db97425000770817b5dde5eed01ca3745ff5ab894d0fc0921e5a10b081490129d8ccbaa154ad3dd461397af8ec964ef99402d60a7591ee44b8ce1c16ef88fcb2717076c730d88223893bdd8000b23d87d38ab":char*:"aafd12f659cae63489b479e5076ddec2f06cb58f":hex:"10d60b8040d57d8701bacb55f2f283d54601ec24d465601ac7f7d5a2f75cac380ba78ca4ab6f3c159f3a9fd6839f5adde0333852ebf876c585664c1a58a1e6885231982f2027be6d7f08ff1807d3ceda8e41ad1f02ddf97a7458832fd13a1f431de6a4ab79e3d4b88bb1df2c5c77fcde9e7b5aa1e7bb29112eae58763127752a":exp:3 + +RSAES-V15 Encryption Test Vector Data too long 8 +0:int:1024:int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:1:hex:"a5a384ef64a6acb84293cecc8095232ae595b84c15ec26f35cf5fde88ae7a9aaa717bcb1ecc4de498da81db97425000770817b5dde5eed01ca3745ff5ab894d0fc0921e5a10b081490129d8ccbaa154ad3dd461397af8ec964ef99402d60a7591ee44b8ce1c16ef88fcb2717076c730d88223893bdd8000b23d87d38ab":hex:"aafd12f659cae63489b479e5076ddec2f06cb58f":hex:"72f98d12ddc230484179ec3022d11b3719222daaa0dc016fc3dbd6771a3f2c9fdd0560f86d616dd50ef1fa5b8c7e1fc40b5abf7b845d7795b3a6af02457b97f783360575cde7497bdf9c104650d4e9a8f4034406de1af95ace39bef2b9e979b74d9a2c0a741d8a21221d9afc98992776cad52d73151613dbc10da9bd8038751a":exp:2 + +RSAES-V15 Decryption Test Vector Padding too short 0 +1:int:1024:int:16:char*:"eecfae81b1b9b3c908810b10a1b5600199eb9f44aef4fda493b81a9e3d84f632124ef0236e5d1e3b7e28fae7aa040a2d5b252176459d1f397541ba2a58fb6599":int:16:char*:"c97fb1f027f453f6341233eaaad1d9353f6c42d08866b1d05a0f2035028b9d869840b41666b42e92ea0da3b43204b5cfce3352524d0416a5a441e700af461503":int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:1:hex:"a5a384ef64a6acb84293cecc8095232ae595b84c15ec26f35cf5fde88ae7a9aaa717bcb1ecc4de498da81db97425000770817b5dde5eed01ca3745ff5ab894d0fc0921e5a10b081490129d8ccbaa154ad3dd461397af8ec964ef99402d60a7591ee44b8ce1c16ef88fcb2717076c730d88223893bdd8000b23d87d38ab":char*:"aafd12f659cae63489b479e5076ddec2f06cb58f":hex:"72f98d12ddc230484179ec3022d11b3719222daaa0dc016fc3dbd6771a3f2c9fdd0560f86d616dd50ef1fa5b8c7e1fc40b5abf7b845d7795b3a6af02457b97f783360575cde7497bdf9c104650d4e9a8f4034406de1af95ace39bef2b9e979b74d9a2c0a741d8a21221d9afc98992776cad52d73151613dbc10da9bd8038751a":exp:3 + +RSASSA-V15 Signing Test Vector Int +3:int:1024:int:16:char*:"d17f655bf27c8b16d35462c905cc04a26f37e2a67fa9c0ce0dced472394a0df743fe7f929e378efdb368eddff453cf007af6d948e0ade757371f8a711e278f6b":int:16:char*:"c6d92b6fee7414d1358ce1546fb62987530b90bd15e0f14963a5e2635adb69347ec0c01b2ab1763fd8ac1a592fb22757463a982425bb97a3a437c5bf86d03f2f":int:16:char*:"a2ba40ee07e3b2bd2f02ce227f36a195024486e49c19cb41bbbdfbba98b22b0e577c2eeaffa20d883a76e65e394c69d4b3c05a1e8fadda27edb2a42bc000fe888b9b32c22d15add0cd76b3e7936e19955b220dd17d4ea904b1ec102b2e4de7751222aa99151024c7cb41cc5ea21d00eeb41f7c800834d2c6e06bce3bce7ea9a5":int:16:char*:"010001":exp:1:exp:1:hex:"859eef2fd78aca00308bdc471193bf55bf9d78db8f8a672b484634f3c9c26e6478ae10260fe0dd8c082e53a5293af2173cd50c6d5d354febf78b26021c25c02712e78cd4694c9f469777e451e7f8e9e04cd3739c6bbfedae487fb55644e9ca74ff77a53cb729802f6ed4a5ffa8ba159890fc":hex:"e3b5d5d002c1bce50c2b65ef88a188d83bce7e61":hex:"2154f928615e5101fcdeb57bc08fc2f35c3d5996403861ae3efb1d0712f8bb05cc21f7f5f11f62e5b6ea9f0f2b62180e5cbe7ba535032d6ac8068fff7f362f73d2c3bf5eca6062a1723d7cfd5abb6dcf7e405f2dc560ffe6fc37d38bee4dc9e24fe2bece3e3b4a3f032701d3f0947b42930083dd4ad241b3309b514595482d42":int:0 + +RSASSA-V15 Verification Test Vector Int +4:int:1024:int:16:char*:"a2ba40ee07e3b2bd2f02ce227f36a195024486e49c19cb41bbbdfbba98b22b0e577c2eeaffa20d883a76e65e394c69d4b3c05a1e8fadda27edb2a42bc000fe888b9b32c22d15add0cd76b3e7936e19955b220dd17d4ea904b1ec102b2e4de7751222aa99151024c7cb41cc5ea21d00eeb41f7c800834d2c6e06bce3bce7ea9a5":int:16:char*:"010001":exp:1:exp:1:hex:"859eef2fd78aca00308bdc471193bf55bf9d78db8f8a672b484634f3c9c26e6478ae10260fe0dd8c082e53a5293af2173cd50c6d5d354febf78b26021c25c02712e78cd4694c9f469777e451e7f8e9e04cd3739c6bbfedae487fb55644e9ca74ff77a53cb729802f6ed4a5ffa8ba159890fc":char*:"e3b5d5d002c1bce50c2b65ef88a188d83bce7e61":hex:"2154f928615e5101fcdeb57bc08fc2f35c3d5996403861ae3efb1d0712f8bb05cc21f7f5f11f62e5b6ea9f0f2b62180e5cbe7ba535032d6ac8068fff7f362f73d2c3bf5eca6062a1723d7cfd5abb6dcf7e405f2dc560ffe6fc37d38bee4dc9e24fe2bece3e3b4a3f032701d3f0947b42930083dd4ad241b3309b514595482d42":int:0 + +RSAES-V15 decoding: good, payload=max, tight output buffer +2:exp:4:hex:"0002505152535455565700":int:117:int:117:int:0 + +RSAES-V15 decoding: good, payload=max, larger output buffer +2:exp:4:hex:"0002505152535455565700":int:117:int:128:int:0 + +RSAES-V15 decoding: good, payload=max-1, tight output buffer +2:exp:4:hex:"000250515253545556575800":int:116:int:116:int:0 + +RSAES-V15 decoding: good, payload=max-1, larger output buffer +2:exp:4:hex:"000250515253545556575800":int:116:int:117:int:0 + +RSAES-V15 decoding: good, payload=1 +2:exp:4:hex:"00025050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505000":int:1:int:1:int:0 + +RSAES-V15 decoding: good, empty payload +2:exp:4:hex:"0002505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505000":int:0:int:0:int:0 + +RSAES-V15 decoding: payload=max, output too large +2:exp:4:hex:"0002505152535455565700":int:117:int:116:exp:5 + +RSAES-V15 decoding: payload=max-1, output too large +2:exp:4:hex:"000250515253545556575800":int:116:int:115:exp:5 + +RSAES-V15 decoding: bad first byte +2:exp:4:hex:"0102505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050":int:0:int:42:exp:3 + +RSAES-V15 decoding: bad second byte (0 instead of 2) +2:exp:4:hex:"0000505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050":int:0:int:42:exp:3 + +RSAES-V15 decoding: bad second byte (1 instead of 2) +2:exp:4:hex:"0001505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050":int:0:int:42:exp:3 + +RSAES-V15 decoding: padding too short (0) +2:exp:4:hex:"000200":int:0:int:42:exp:3 + +RSAES-V15 decoding: padding too short (7) +2:exp:4:hex:"0002505050505050500000ffffffffffffffffff00":int:0:int:42:exp:3 + +RSAES-V15 decoding: unfinished padding +2:exp:4:hex:"0002505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050":int:0:int:42:exp:3 + +EMSA-V15 decoding: good, payload=max, tight output buffer +2:exp:6:hex:"0001ffffffffffffffff00":int:117:int:117:int:0 + +EMSA-V15 decoding: good, payload=max, larger output buffer +2:exp:6:hex:"0001ffffffffffffffff00":int:117:int:128:int:0 + +EMSA-V15 decoding: good, payload=max-1, tight output buffer +2:exp:6:hex:"0001ffffffffffffffffff00":int:116:int:116:int:0 + +EMSA-V15 decoding: good, payload=max-1, larger output buffer +2:exp:6:hex:"0001ffffffffffffffffff00":int:116:int:117:int:0 + +EMSA-V15 decoding: good, payload=1 +2:exp:6:hex:"0001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00":int:1:int:1:int:0 + +EMSA-V15 decoding: good, empty payload +2:exp:6:hex:"0001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00":int:0:int:0:int:0 + +EMSA-V15 decoding: bad first byte +2:exp:6:hex:"0101ffffffffffffffff00":int:0:int:42:exp:3 + +EMSA-V15 decoding: bad second byte (0 instead of 1) +2:exp:6:hex:"0000ffffffffffffffff00":int:0:int:42:exp:3 + +EMSA-V15 decoding: bad second byte (2 instead of 1) +2:exp:6:hex:"0002ffffffffffffffff00":int:0:int:42:exp:3 + +EMSA-V15 decoding: padding too short (0) +2:exp:6:hex:"000100":int:0:int:42:exp:3 + +EMSA-V15 decoding: padding too short (7) +2:exp:6:hex:"0001ffffffffffffff0000ffffffffffffffff00":int:0:int:42:exp:3 + +EMSA-V15 decoding: invalid padding at first byte +2:exp:6:hex:"0001fffffffffffffffe00":int:0:int:42:exp:3 + +EMSA-V15 decoding: invalid padding at last byte +2:exp:6:hex:"0001feffffffffffffff00":int:0:int:42:exp:3 + +EMSA-V15 decoding: unfinished padding +2:exp:6:hex:"0001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff":int:0:int:42:exp:3 + +EMSA-V15 decoding: unfinished padding with invalid first byte +2:exp:6:hex:"0001feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff":int:0:int:42:exp:3 + +EMSA-V15 decoding: unfinished padding with invalid last byte +2:exp:6:hex:"0001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe":int:0:int:42:exp:3 + diff --git a/third_party/mbedtls/test/test_suite_pkcs1_v21.c b/third_party/mbedtls/test/test_suite_pkcs1_v21.c new file mode 100644 index 000000000..bd35568c9 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_pkcs1_v21.c @@ -0,0 +1,639 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_pkcs1_v21.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_pkcs1_v21.function + * Test suite data : suites/test_suite_pkcs1_v21.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_PKCS1_V21) +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_SHA1_C) +#include "third_party/mbedtls/rsa.h" +#include "third_party/mbedtls/md.h" +void test_pkcs1_rsaes_oaep_encrypt( int mod, int radix_N, char * input_N, + int radix_E, char * input_E, int hash, + data_t * message_str, data_t * rnd_buf, + data_t * result_str, int result ) +{ + unsigned char output[256]; + mbedtls_rsa_context ctx; + mbedtls_test_rnd_buf_info info; + mbedtls_mpi N, E; + + info.buf = rnd_buf->x; + info.length = rnd_buf->len; + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E ); + mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V21, hash ); + memset( output, 0x00, sizeof( output ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) ); + TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 ); + + if( message_str->len == 0 ) + message_str->x = NULL; + TEST_ASSERT( mbedtls_rsa_pkcs1_encrypt( &ctx, + &mbedtls_test_rnd_buffer_rand, + &info, MBEDTLS_RSA_PUBLIC, + message_str->len, message_str->x, + output ) == result ); + if( result == 0 ) + { + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + ctx.len, result_str->len ) == 0 ); + } + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_pkcs1_rsaes_oaep_encrypt_wrapper( void ** params ) +{ + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + + test_pkcs1_rsaes_oaep_encrypt( *( (int *) params[0] ), *( (int *) params[1] ), (char *) params[2], *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), &data6, &data8, &data10, *( (int *) params[12] ) ); +} +void test_pkcs1_rsaes_oaep_decrypt( int mod, int radix_P, char * input_P, + int radix_Q, char * input_Q, int radix_N, + char * input_N, int radix_E, char * input_E, + int hash, data_t * result_str, + char * seed, data_t * message_str, + int result ) +{ + unsigned char output[64]; + mbedtls_rsa_context ctx; + size_t output_len; + mbedtls_test_rnd_pseudo_info rnd_info; + mbedtls_mpi N, P, Q, E; + ((void) seed); + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); + mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E ); + + mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V21, hash ); + + memset( output, 0x00, sizeof( output ) ); + memset( &rnd_info, 0, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) ); + TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 ); + TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 ); + + if( result_str->len == 0 ) + { + TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info, + MBEDTLS_RSA_PRIVATE, + &output_len, message_str->x, + NULL, 0 ) == result ); + } + else + { + TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info, + MBEDTLS_RSA_PRIVATE, + &output_len, message_str->x, + output, + sizeof( output ) ) == result ); + if( result == 0 ) + { + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + output_len, + result_str->len ) == 0 ); + } + } + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P ); + mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_pkcs1_rsaes_oaep_decrypt_wrapper( void ** params ) +{ + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + data_t data13 = {(uint8_t *) params[13], *( (uint32_t *) params[14] )}; + + test_pkcs1_rsaes_oaep_decrypt( *( (int *) params[0] ), *( (int *) params[1] ), (char *) params[2], *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), (char *) params[6], *( (int *) params[7] ), (char *) params[8], *( (int *) params[9] ), &data10, (char *) params[12], &data13, *( (int *) params[15] ) ); +} +void test_pkcs1_rsassa_pss_sign( int mod, int radix_P, char * input_P, int radix_Q, + char * input_Q, int radix_N, char * input_N, + int radix_E, char * input_E, int digest, int hash, + data_t * message_str, data_t * rnd_buf, + data_t * result_str, int result ) +{ + unsigned char hash_result[MBEDTLS_MD_MAX_SIZE]; + unsigned char output[256]; + mbedtls_rsa_context ctx; + mbedtls_test_rnd_buf_info info; + mbedtls_mpi N, P, Q, E; + + info.buf = rnd_buf->x; + info.length = rnd_buf->len; + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); + mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E ); + mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V21, hash ); + + memset( hash_result, 0x00, sizeof( hash_result ) ); + memset( output, 0x00, sizeof( output ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) ); + TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 ); + TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 ); + + + if( mbedtls_md_info_from_type( digest ) != NULL ) + TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ), message_str->x, message_str->len, hash_result ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_pkcs1_sign( &ctx, &mbedtls_test_rnd_buffer_rand, + &info, MBEDTLS_RSA_PRIVATE, digest, 0, + hash_result, output ) == result ); + if( result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + ctx.len, result_str->len ) == 0 ); + } + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P ); + mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_pkcs1_rsassa_pss_sign_wrapper( void ** params ) +{ + data_t data11 = {(uint8_t *) params[11], *( (uint32_t *) params[12] )}; + data_t data13 = {(uint8_t *) params[13], *( (uint32_t *) params[14] )}; + data_t data15 = {(uint8_t *) params[15], *( (uint32_t *) params[16] )}; + + test_pkcs1_rsassa_pss_sign( *( (int *) params[0] ), *( (int *) params[1] ), (char *) params[2], *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), (char *) params[6], *( (int *) params[7] ), (char *) params[8], *( (int *) params[9] ), *( (int *) params[10] ), &data11, &data13, &data15, *( (int *) params[17] ) ); +} +void test_pkcs1_rsassa_pss_verify( int mod, int radix_N, char * input_N, + int radix_E, char * input_E, int digest, + int hash, data_t * message_str, char * salt, + data_t * result_str, int result ) +{ + unsigned char hash_result[MBEDTLS_MD_MAX_SIZE]; + mbedtls_rsa_context ctx; + mbedtls_mpi N, E; + ((void) salt); + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E ); + mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V21, hash ); + memset( hash_result, 0x00, sizeof( hash_result ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) ); + TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 ); + + + if( mbedtls_md_info_from_type( digest ) != NULL ) + TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ), message_str->x, message_str->len, hash_result ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_pkcs1_verify( &ctx, NULL, NULL, MBEDTLS_RSA_PUBLIC, digest, 0, hash_result, result_str->x ) == result ); + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_pkcs1_rsassa_pss_verify_wrapper( void ** params ) +{ + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data10 = {(uint8_t *) params[10], *( (uint32_t *) params[11] )}; + + test_pkcs1_rsassa_pss_verify( *( (int *) params[0] ), *( (int *) params[1] ), (char *) params[2], *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), *( (int *) params[6] ), &data7, (char *) params[9], &data10, *( (int *) params[12] ) ); +} +void test_pkcs1_rsassa_pss_verify_ext( int mod, int radix_N, char * input_N, + int radix_E, char * input_E, + int msg_digest_id, int ctx_hash, + int mgf_hash, int salt_len, + data_t * message_str, + data_t * result_str, int result_simple, + int result_full ) +{ + unsigned char hash_result[MBEDTLS_MD_MAX_SIZE]; + mbedtls_rsa_context ctx; + size_t hash_len; + mbedtls_mpi N, E; + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E ); + mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V21, ctx_hash ); + memset( hash_result, 0x00, sizeof( hash_result ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( ( mod + 7 ) / 8 ) ); + TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 ); + + + if( msg_digest_id != MBEDTLS_MD_NONE ) + { + TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( msg_digest_id ), + message_str->x, message_str->len, hash_result ) == 0 ); + hash_len = 0; + } + else + { + memcpy( hash_result, message_str->x, message_str->len ); + hash_len = message_str->len; + } + + TEST_ASSERT( mbedtls_rsa_pkcs1_verify( &ctx, NULL, NULL, MBEDTLS_RSA_PUBLIC, + msg_digest_id, hash_len, hash_result, + result_str->x ) == result_simple ); + + TEST_ASSERT( mbedtls_rsa_rsassa_pss_verify_ext( &ctx, NULL, NULL, MBEDTLS_RSA_PUBLIC, + msg_digest_id, hash_len, hash_result, + mgf_hash, salt_len, + result_str->x ) == result_full ); + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_pkcs1_rsassa_pss_verify_ext_wrapper( void ** params ) +{ + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data11 = {(uint8_t *) params[11], *( (uint32_t *) params[12] )}; + + test_pkcs1_rsassa_pss_verify_ext( *( (int *) params[0] ), *( (int *) params[1] ), (char *) params[2], *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ), &data9, &data11, *( (int *) params[13] ), *( (int *) params[14] ) ); +} +#endif /* MBEDTLS_SHA1_C */ +#endif /* MBEDTLS_RSA_C */ +#endif /* MBEDTLS_PKCS1_V21 */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_PKCS1_V21) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_SHA1_C) + + case 0: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 1: + { + *out_value = MBEDTLS_ERR_RSA_BAD_INPUT_DATA; + } + break; + case 2: + { + *out_value = MBEDTLS_MD_SHA512; + } + break; + case 3: + { + *out_value = MBEDTLS_MD_NONE; + } + break; + case 4: + { + *out_value = MBEDTLS_MD_SHA256; + } + break; + case 5: + { + *out_value = MBEDTLS_ERR_RSA_INVALID_PADDING; + } + break; + case 6: + { + *out_value = MBEDTLS_ERR_RSA_VERIFY_FAILED; + } + break; + case 7: + { + *out_value = MBEDTLS_RSA_SALT_LEN_ANY; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_PKCS1_V21) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_SHA1_C) + + case 0: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_PKCS1_V21) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_SHA1_C) + test_pkcs1_rsaes_oaep_encrypt_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_PKCS1_V21) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_SHA1_C) + test_pkcs1_rsaes_oaep_decrypt_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_PKCS1_V21) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_SHA1_C) + test_pkcs1_rsassa_pss_sign_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_PKCS1_V21) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_SHA1_C) + test_pkcs1_rsassa_pss_verify_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_PKCS1_V21) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_SHA1_C) + test_pkcs1_rsassa_pss_verify_ext_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_pkcs1_v21.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_pkcs1_v21.datax b/third_party/mbedtls/test/test_suite_pkcs1_v21.datax new file mode 100644 index 000000000..ddd7af699 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_pkcs1_v21.datax @@ -0,0 +1,886 @@ +RSAES-OAEP Encryption Test Vector Int +0:int:1024:int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:0:hex:"d436e99569fd32a7c8a05bbc90d32c49":hex:"aafd12f659cae63489b479e5076ddec2f06cb58f":hex:"1253e04dc0a5397bb44a7ab87e9bf2a039a33d1e996fc82a94ccd30074c95df763722017069e5268da5d1c0b4f872cf653c11df82314a67968dfeae28def04bb6d84b1c31d654a1970e5783bd6eb96a024c2ca2f4a90fe9f2ef5c9c140e5bb48da9536ad8700c84fc9130adea74e558d51a74ddf85d8b50de96838d6063e0955":int:0 + +RSAES-OAEP Encryption Test Vector Data just fits +0:int:1024:int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:0:hex:"d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd":hex:"aafd12f659cae63489b479e5076ddec2f06cb58f":hex:"3082f2288fff275213d53168f0a272573cff81837c249dc1f380a12ac124c8f217b700708a1ce7dce154265f31a126ebdd9ed3ef9145ae29124a25f4e65aa52c5a9ff34f6cf4de9ba937ae406dc7d1f277af4f6fb7ea73bfbab2bd397b6b2c53570e173ffcf3b9f0bb96837623a4f87bd81b41446c59e681a2f3da81239e9bdf":int:0 + +RSAES-OAEP Encryption Test Vector Data too long +0:int:1024:int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:0:hex:"d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd00":hex:"aafd12f659cae63489b479e5076ddec2f06cb58f":hex:"1253e04dc0a5397bb44a7ab87e9bf2a039a33d1e996fc82a94ccd30074c95df763722017069e5268da5d1c0b4f872cf653c11df82314a67968dfeae28def04bb6d84b1c31d654a1970e5783bd6eb96a024c2ca2f4a90fe9f2ef5c9c140e5bb48da9536ad8700c84fc9130adea74e558d51a74ddf85d8b50de96838d6063e0955":exp:1 + +RSAES-OAEP Encryption Test Vector 1_1 +0:int:1024:int:16:char*:"a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb":int:16:char*:"010001":exp:0:hex:"6628194e12073db03ba94cda9ef9532397d50dba79b987004afefe34":hex:"18b776ea21069d69776a33e96bad48e1dda0a5ef":hex:"354fe67b4a126d5d35fe36c777791a3f7ba13def484e2d3908aff722fad468fb21696de95d0be911c2d3174f8afcc201035f7b6d8e69402de5451618c21a535fa9d7bfc5b8dd9fc243f8cf927db31322d6e881eaa91a996170e657a05a266426d98c88003f8477c1227094a0d9fa1e8c4024309ce1ecccb5210035d47ac72e8a":int:0 + +RSAES-OAEP Encryption Test Vector 1_2 +0:int:1024:int:16:char*:"a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb":int:16:char*:"010001":exp:0:hex:"750c4047f547e8e41411856523298ac9bae245efaf1397fbe56f9dd5":hex:"0cc742ce4a9b7f32f951bcb251efd925fe4fe35f":hex:"640db1acc58e0568fe5407e5f9b701dff8c3c91e716c536fc7fcec6cb5b71c1165988d4a279e1577d730fc7a29932e3f00c81515236d8d8e31017a7a09df4352d904cdeb79aa583adcc31ea698a4c05283daba9089be5491f67c1a4ee48dc74bbbe6643aef846679b4cb395a352d5ed115912df696ffe0702932946d71492b44":int:0 + +RSAES-OAEP Encryption Test Vector 1_3 +0:int:1024:int:16:char*:"a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb":int:16:char*:"010001":exp:0:hex:"d94ae0832e6445ce42331cb06d531a82b1db4baad30f746dc916df24d4e3c2451fff59a6423eb0e1d02d4fe646cf699dfd818c6e97b051":hex:"2514df4695755a67b288eaf4905c36eec66fd2fd":hex:"423736ed035f6026af276c35c0b3741b365e5f76ca091b4e8c29e2f0befee603595aa8322d602d2e625e95eb81b2f1c9724e822eca76db8618cf09c5343503a4360835b5903bc637e3879fb05e0ef32685d5aec5067cd7cc96fe4b2670b6eac3066b1fcf5686b68589aafb7d629b02d8f8625ca3833624d4800fb081b1cf94eb":int:0 + +RSAES-OAEP Encryption Test Vector 1_4 +0:int:1024:int:16:char*:"a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb":int:16:char*:"010001":exp:0:hex:"52e650d98e7f2a048b4f86852153b97e01dd316f346a19f67a85":hex:"c4435a3e1a18a68b6820436290a37cefb85db3fb":hex:"45ead4ca551e662c9800f1aca8283b0525e6abae30be4b4aba762fa40fd3d38e22abefc69794f6ebbbc05ddbb11216247d2f412fd0fba87c6e3acd888813646fd0e48e785204f9c3f73d6d8239562722dddd8771fec48b83a31ee6f592c4cfd4bc88174f3b13a112aae3b9f7b80e0fc6f7255ba880dc7d8021e22ad6a85f0755":int:0 + +RSAES-OAEP Encryption Test Vector 1_5 +0:int:1024:int:16:char*:"a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb":int:16:char*:"010001":exp:0:hex:"8da89fd9e5f974a29feffb462b49180f6cf9e802":hex:"b318c42df3be0f83fea823f5a7b47ed5e425a3b5":hex:"36f6e34d94a8d34daacba33a2139d00ad85a9345a86051e73071620056b920e219005855a213a0f23897cdcd731b45257c777fe908202befdd0b58386b1244ea0cf539a05d5d10329da44e13030fd760dcd644cfef2094d1910d3f433e1c7c6dd18bc1f2df7f643d662fb9dd37ead9059190f4fa66ca39e869c4eb449cbdc439":int:0 + +RSAES-OAEP Encryption Test Vector 1_6 +0:int:1024:int:16:char*:"a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb":int:16:char*:"010001":exp:0:hex:"26521050844271":hex:"e4ec0982c2336f3a677f6a356174eb0ce887abc2":hex:"42cee2617b1ecea4db3f4829386fbd61dafbf038e180d837c96366df24c097b4ab0fac6bdf590d821c9f10642e681ad05b8d78b378c0f46ce2fad63f74e0ad3df06b075d7eb5f5636f8d403b9059ca761b5c62bb52aa45002ea70baace08ded243b9d8cbd62a68ade265832b56564e43a6fa42ed199a099769742df1539e8255":int:0 + +RSAES-OAEP Encryption Test Vector 2_1 +0:int:1025:int:16:char*:"01947c7fce90425f47279e70851f25d5e62316fe8a1df19371e3e628e260543e4901ef6081f68c0b8141190d2ae8daba7d1250ec6db636e944ec3722877c7c1d0a67f14b1694c5f0379451a43e49a32dde83670b73da91a1c99bc23b436a60055c610f0baf99c1a079565b95a3f1526632d1d4da60f20eda25e653c4f002766f45":int:16:char*:"010001":exp:0:hex:"8ff00caa605c702830634d9a6c3d42c652b58cf1d92fec570beee7":hex:"8c407b5ec2899e5099c53e8ce793bf94e71b1782":hex:"0181af8922b9fcb4d79d92ebe19815992fc0c1439d8bcd491398a0f4ad3a329a5bd9385560db532683c8b7da04e4b12aed6aacdf471c34c9cda891addcc2df3456653aa6382e9ae59b54455257eb099d562bbe10453f2b6d13c59c02e10f1f8abb5da0d0570932dacf2d0901db729d0fefcc054e70968ea540c81b04bcaefe720e":int:0 + +RSAES-OAEP Encryption Test Vector 2_2 +0:int:1025:int:16:char*:"01947c7fce90425f47279e70851f25d5e62316fe8a1df19371e3e628e260543e4901ef6081f68c0b8141190d2ae8daba7d1250ec6db636e944ec3722877c7c1d0a67f14b1694c5f0379451a43e49a32dde83670b73da91a1c99bc23b436a60055c610f0baf99c1a079565b95a3f1526632d1d4da60f20eda25e653c4f002766f45":int:16:char*:"010001":exp:0:hex:"2d":hex:"b600cf3c2e506d7f16778c910d3a8b003eee61d5":hex:"018759ff1df63b2792410562314416a8aeaf2ac634b46f940ab82d64dbf165eee33011da749d4bab6e2fcd18129c9e49277d8453112b429a222a8471b070993998e758861c4d3f6d749d91c4290d332c7a4ab3f7ea35ff3a07d497c955ff0ffc95006b62c6d296810d9bfab024196c7934012c2df978ef299aba239940cba10245":int:0 + +RSAES-OAEP Encryption Test Vector 2_3 +0:int:1025:int:16:char*:"01947c7fce90425f47279e70851f25d5e62316fe8a1df19371e3e628e260543e4901ef6081f68c0b8141190d2ae8daba7d1250ec6db636e944ec3722877c7c1d0a67f14b1694c5f0379451a43e49a32dde83670b73da91a1c99bc23b436a60055c610f0baf99c1a079565b95a3f1526632d1d4da60f20eda25e653c4f002766f45":int:16:char*:"010001":exp:0:hex:"74fc88c51bc90f77af9d5e9a4a70133d4b4e0b34da3c37c7ef8e":hex:"a73768aeeaa91f9d8c1ed6f9d2b63467f07ccae3":hex:"018802bab04c60325e81c4962311f2be7c2adce93041a00719c88f957575f2c79f1b7bc8ced115c706b311c08a2d986ca3b6a9336b147c29c6f229409ddec651bd1fdd5a0b7f610c9937fdb4a3a762364b8b3206b4ea485fd098d08f63d4aa8bb2697d027b750c32d7f74eaf5180d2e9b66b17cb2fa55523bc280da10d14be2053":int:0 + +RSAES-OAEP Encryption Test Vector 2_4 +0:int:1025:int:16:char*:"01947c7fce90425f47279e70851f25d5e62316fe8a1df19371e3e628e260543e4901ef6081f68c0b8141190d2ae8daba7d1250ec6db636e944ec3722877c7c1d0a67f14b1694c5f0379451a43e49a32dde83670b73da91a1c99bc23b436a60055c610f0baf99c1a079565b95a3f1526632d1d4da60f20eda25e653c4f002766f45":int:16:char*:"010001":exp:0:hex:"a7eb2a5036931d27d4e891326d99692ffadda9bf7efd3e34e622c4adc085f721dfe885072c78a203b151739be540fa8c153a10f00a":hex:"9a7b3b0e708bd96f8190ecab4fb9b2b3805a8156":hex:"00a4578cbc176318a638fba7d01df15746af44d4f6cd96d7e7c495cbf425b09c649d32bf886da48fbaf989a2117187cafb1fb580317690e3ccd446920b7af82b31db5804d87d01514acbfa9156e782f867f6bed9449e0e9a2c09bcecc6aa087636965e34b3ec766f2fe2e43018a2fddeb140616a0e9d82e5331024ee0652fc7641":int:0 + +RSAES-OAEP Encryption Test Vector 2_5 +0:int:1025:int:16:char*:"01947c7fce90425f47279e70851f25d5e62316fe8a1df19371e3e628e260543e4901ef6081f68c0b8141190d2ae8daba7d1250ec6db636e944ec3722877c7c1d0a67f14b1694c5f0379451a43e49a32dde83670b73da91a1c99bc23b436a60055c610f0baf99c1a079565b95a3f1526632d1d4da60f20eda25e653c4f002766f45":int:16:char*:"010001":exp:0:hex:"2ef2b066f854c33f3bdcbb5994a435e73d6c6c":hex:"eb3cebbc4adc16bb48e88c8aec0e34af7f427fd3":hex:"00ebc5f5fda77cfdad3c83641a9025e77d72d8a6fb33a810f5950f8d74c73e8d931e8634d86ab1246256ae07b6005b71b7f2fb98351218331ce69b8ffbdc9da08bbc9c704f876deb9df9fc2ec065cad87f9090b07acc17aa7f997b27aca48806e897f771d95141fe4526d8a5301b678627efab707fd40fbebd6e792a25613e7aec":int:0 + +RSAES-OAEP Encryption Test Vector 2_6 +0:int:1025:int:16:char*:"01947c7fce90425f47279e70851f25d5e62316fe8a1df19371e3e628e260543e4901ef6081f68c0b8141190d2ae8daba7d1250ec6db636e944ec3722877c7c1d0a67f14b1694c5f0379451a43e49a32dde83670b73da91a1c99bc23b436a60055c610f0baf99c1a079565b95a3f1526632d1d4da60f20eda25e653c4f002766f45":int:16:char*:"010001":exp:0:hex:"8a7fb344c8b6cb2cf2ef1f643f9a3218f6e19bba89c0":hex:"4c45cf4d57c98e3d6d2095adc51c489eb50dff84":hex:"010839ec20c27b9052e55befb9b77e6fc26e9075d7a54378c646abdf51e445bd5715de81789f56f1803d9170764a9e93cb78798694023ee7393ce04bc5d8f8c5a52c171d43837e3aca62f609eb0aa5ffb0960ef04198dd754f57f7fbe6abf765cf118b4ca443b23b5aab266f952326ac4581100644325f8b721acd5d04ff14ef3a":int:0 + +RSAES-OAEP Encryption Example 3_1 +0:int:1026:int:16:char*:"02b58fec039a860700a4d7b6462f93e6cdd491161ddd74f4e810b40e3c1652006a5c277b2774c11305a4cbab5a78efa57e17a86df7a3fa36fc4b1d2249f22ec7c2dd6a463232accea906d66ebe80b5704b10729da6f833234abb5efdd4a292cbfad33b4d33fa7a14b8c397b56e3acd21203428b77cdfa33a6da706b3d8b0fc43e9":int:16:char*:"010001":exp:0:hex:"087820b569e8fa8d":hex:"8ced6b196290805790e909074015e6a20b0c4894":hex:"026a0485d96aebd96b4382085099b962e6a2bdec3d90c8db625e14372de85e2d5b7baab65c8faf91bb5504fb495afce5c988b3f6a52e20e1d6cbd3566c5cd1f2b8318bb542cc0ea25c4aab9932afa20760eaddec784396a07ea0ef24d4e6f4d37e5052a7a31e146aa480a111bbe926401307e00f410033842b6d82fe5ce4dfae80":int:0 + +RSAES-OAEP Encryption Example 3_2 +0:int:1026:int:16:char*:"02b58fec039a860700a4d7b6462f93e6cdd491161ddd74f4e810b40e3c1652006a5c277b2774c11305a4cbab5a78efa57e17a86df7a3fa36fc4b1d2249f22ec7c2dd6a463232accea906d66ebe80b5704b10729da6f833234abb5efdd4a292cbfad33b4d33fa7a14b8c397b56e3acd21203428b77cdfa33a6da706b3d8b0fc43e9":int:16:char*:"010001":exp:0:hex:"4653acaf171960b01f52a7be63a3ab21dc368ec43b50d82ec3781e04":hex:"b4291d6567550848cc156967c809baab6ca507f0":hex:"024db89c7802989be0783847863084941bf209d761987e38f97cb5f6f1bc88da72a50b73ebaf11c879c4f95df37b850b8f65d7622e25b1b889e80fe80baca2069d6e0e1d829953fc459069de98ea9798b451e557e99abf8fe3d9ccf9096ebbf3e5255d3b4e1c6d2ecadf067a359eea86405acd47d5e165517ccafd47d6dbee4bf5":int:0 + +RSAES-OAEP Encryption Example 3_3 +0:int:1026:int:16:char*:"02b58fec039a860700a4d7b6462f93e6cdd491161ddd74f4e810b40e3c1652006a5c277b2774c11305a4cbab5a78efa57e17a86df7a3fa36fc4b1d2249f22ec7c2dd6a463232accea906d66ebe80b5704b10729da6f833234abb5efdd4a292cbfad33b4d33fa7a14b8c397b56e3acd21203428b77cdfa33a6da706b3d8b0fc43e9":int:16:char*:"010001":exp:0:hex:"d94cd0e08fa404ed89":hex:"ce8928f6059558254008badd9794fadcd2fd1f65":hex:"0239bce681032441528877d6d1c8bb28aa3bc97f1df584563618995797683844ca86664732f4bed7a0aab083aaabfb7238f582e30958c2024e44e57043b97950fd543da977c90cdde5337d618442f99e60d7783ab59ce6dd9d69c47ad1e962bec22d05895cff8d3f64ed5261d92b2678510393484990ba3f7f06818ae6ffce8a3a":int:0 + +RSAES-OAEP Encryption Example 3_4 +0:int:1026:int:16:char*:"02b58fec039a860700a4d7b6462f93e6cdd491161ddd74f4e810b40e3c1652006a5c277b2774c11305a4cbab5a78efa57e17a86df7a3fa36fc4b1d2249f22ec7c2dd6a463232accea906d66ebe80b5704b10729da6f833234abb5efdd4a292cbfad33b4d33fa7a14b8c397b56e3acd21203428b77cdfa33a6da706b3d8b0fc43e9":int:16:char*:"010001":exp:0:hex:"6cc641b6b61e6f963974dad23a9013284ef1":hex:"6e2979f52d6814a57d83b090054888f119a5b9a3":hex:"02994c62afd76f498ba1fd2cf642857fca81f4373cb08f1cbaee6f025c3b512b42c3e8779113476648039dbe0493f9246292fac28950600e7c0f32edf9c81b9dec45c3bde0cc8d8847590169907b7dc5991ceb29bb0714d613d96df0f12ec5d8d3507c8ee7ae78dd83f216fa61de100363aca48a7e914ae9f42ddfbe943b09d9a0":int:0 + +RSAES-OAEP Encryption Example 3_5 +0:int:1026:int:16:char*:"02b58fec039a860700a4d7b6462f93e6cdd491161ddd74f4e810b40e3c1652006a5c277b2774c11305a4cbab5a78efa57e17a86df7a3fa36fc4b1d2249f22ec7c2dd6a463232accea906d66ebe80b5704b10729da6f833234abb5efdd4a292cbfad33b4d33fa7a14b8c397b56e3acd21203428b77cdfa33a6da706b3d8b0fc43e9":int:16:char*:"010001":exp:0:hex:"df5151832b61f4f25891fb4172f328d2eddf8371ffcfdbe997939295f30eca6918017cfda1153bf7a6af87593223":hex:"2d760bfe38c59de34cdc8b8c78a38e66284a2d27":hex:"0162042ff6969592a6167031811a239834ce638abf54fec8b99478122afe2ee67f8c5b18b0339805bfdbc5a4e6720b37c59cfba942464c597ff532a119821545fd2e59b114e61daf71820529f5029cf524954327c34ec5e6f5ba7efcc4de943ab8ad4ed787b1454329f70db798a3a8f4d92f8274e2b2948ade627ce8ee33e43c60":int:0 + +RSAES-OAEP Encryption Example 3_6 +0:int:1026:int:16:char*:"02b58fec039a860700a4d7b6462f93e6cdd491161ddd74f4e810b40e3c1652006a5c277b2774c11305a4cbab5a78efa57e17a86df7a3fa36fc4b1d2249f22ec7c2dd6a463232accea906d66ebe80b5704b10729da6f833234abb5efdd4a292cbfad33b4d33fa7a14b8c397b56e3acd21203428b77cdfa33a6da706b3d8b0fc43e9":int:16:char*:"010001":exp:0:hex:"3c3bad893c544a6d520ab022319188c8d504b7a788b850903b85972eaa18552e1134a7ad6098826254ff7ab672b3d8eb3158fac6d4cbaef1":hex:"f174779c5fd3cfe007badcb7a36c9b55bfcfbf0e":hex:"00112051e75d064943bc4478075e43482fd59cee0679de6893eec3a943daa490b9691c93dfc0464b6623b9f3dbd3e70083264f034b374f74164e1a00763725e574744ba0b9db83434f31df96f6e2a26f6d8eba348bd4686c2238ac07c37aac3785d1c7eea2f819fd91491798ed8e9cef5e43b781b0e0276e37c43ff9492d005730":int:0 + +RSAES-OAEP Encryption Example 4_1 +0:int:1027:int:16:char*:"051240b6cc0004fa48d0134671c078c7c8dec3b3e2f25bc2564467339db38853d06b85eea5b2de353bff42ac2e46bc97fae6ac9618da9537a5c8f553c1e357625991d6108dcd7885fb3a25413f53efcad948cb35cd9b9ae9c1c67626d113d57dde4c5bea76bb5bb7de96c00d07372e9685a6d75cf9d239fa148d70931b5f3fb039":int:16:char*:"010001":exp:0:hex:"4a86609534ee434a6cbca3f7e962e76d455e3264c19f605f6e5ff6137c65c56d7fb344cd52bc93374f3d166c9f0c6f9c506bad19330972d2":hex:"1cac19ce993def55f98203f6852896c95ccca1f3":hex:"04cce19614845e094152a3fe18e54e3330c44e5efbc64ae16886cb1869014cc5781b1f8f9e045384d0112a135ca0d12e9c88a8e4063416deaae3844f60d6e96fe155145f4525b9a34431ca3766180f70e15a5e5d8e8b1a516ff870609f13f896935ced188279a58ed13d07114277d75c6568607e0ab092fd803a223e4a8ee0b1a8":int:0 + +RSAES-OAEP Encryption Example 4_2 +0:int:1027:int:16:char*:"051240b6cc0004fa48d0134671c078c7c8dec3b3e2f25bc2564467339db38853d06b85eea5b2de353bff42ac2e46bc97fae6ac9618da9537a5c8f553c1e357625991d6108dcd7885fb3a25413f53efcad948cb35cd9b9ae9c1c67626d113d57dde4c5bea76bb5bb7de96c00d07372e9685a6d75cf9d239fa148d70931b5f3fb039":int:16:char*:"010001":exp:0:hex:"b0adc4f3fe11da59ce992773d9059943c03046497ee9d9f9a06df1166db46d98f58d27ec074c02eee6cbe2449c8b9fc5080c5c3f4433092512ec46aa793743c8":hex:"f545d5897585e3db71aa0cb8da76c51d032ae963":hex:"0097b698c6165645b303486fbf5a2a4479c0ee85889b541a6f0b858d6b6597b13b854eb4f839af03399a80d79bda6578c841f90d645715b280d37143992dd186c80b949b775cae97370e4ec97443136c6da484e970ffdb1323a20847821d3b18381de13bb49aaea66530c4a4b8271f3eae172cd366e07e6636f1019d2a28aed15e":int:0 + +RSAES-OAEP Encryption Example 4_3 +0:int:1027:int:16:char*:"051240b6cc0004fa48d0134671c078c7c8dec3b3e2f25bc2564467339db38853d06b85eea5b2de353bff42ac2e46bc97fae6ac9618da9537a5c8f553c1e357625991d6108dcd7885fb3a25413f53efcad948cb35cd9b9ae9c1c67626d113d57dde4c5bea76bb5bb7de96c00d07372e9685a6d75cf9d239fa148d70931b5f3fb039":int:16:char*:"010001":exp:0:hex:"bf6d42e701707b1d0206b0c8b45a1c72641ff12889219a82bdea965b5e79a96b0d0163ed9d578ec9ada20f2fbcf1ea3c4089d83419ba81b0c60f3606da99":hex:"ad997feef730d6ea7be60d0dc52e72eacbfdd275":hex:"0301f935e9c47abcb48acbbe09895d9f5971af14839da4ff95417ee453d1fd77319072bb7297e1b55d7561cd9d1bb24c1a9a37c619864308242804879d86ebd001dce5183975e1506989b70e5a83434154d5cbfd6a24787e60eb0c658d2ac193302d1192c6e622d4a12ad4b53923bca246df31c6395e37702c6a78ae081fb9d065":int:0 + +RSAES-OAEP Encryption Example 4_4 +0:int:1027:int:16:char*:"051240b6cc0004fa48d0134671c078c7c8dec3b3e2f25bc2564467339db38853d06b85eea5b2de353bff42ac2e46bc97fae6ac9618da9537a5c8f553c1e357625991d6108dcd7885fb3a25413f53efcad948cb35cd9b9ae9c1c67626d113d57dde4c5bea76bb5bb7de96c00d07372e9685a6d75cf9d239fa148d70931b5f3fb039":int:16:char*:"010001":exp:0:hex:"fb2ef112f5e766eb94019297934794f7be2f6fc1c58e":hex:"136454df5730f73c807a7e40d8c1a312ac5b9dd3":hex:"02d110ad30afb727beb691dd0cf17d0af1a1e7fa0cc040ec1a4ba26a42c59d0a796a2e22c8f357ccc98b6519aceb682e945e62cb734614a529407cd452bee3e44fece8423cc19e55548b8b994b849c7ecde4933e76037e1d0ce44275b08710c68e430130b929730ed77e09b015642c5593f04e4ffb9410798102a8e96ffdfe11e4":int:0 + +RSAES-OAEP Encryption Example 4_5 +0:int:1027:int:16:char*:"051240b6cc0004fa48d0134671c078c7c8dec3b3e2f25bc2564467339db38853d06b85eea5b2de353bff42ac2e46bc97fae6ac9618da9537a5c8f553c1e357625991d6108dcd7885fb3a25413f53efcad948cb35cd9b9ae9c1c67626d113d57dde4c5bea76bb5bb7de96c00d07372e9685a6d75cf9d239fa148d70931b5f3fb039":int:16:char*:"010001":exp:0:hex:"28ccd447bb9e85166dabb9e5b7d1adadc4b9d39f204e96d5e440ce9ad928bc1c2284":hex:"bca8057f824b2ea257f2861407eef63d33208681":hex:"00dbb8a7439d90efd919a377c54fae8fe11ec58c3b858362e23ad1b8a44310799066b99347aa525691d2adc58d9b06e34f288c170390c5f0e11c0aa3645959f18ee79e8f2be8d7ac5c23d061f18dd74b8c5f2a58fcb5eb0c54f99f01a83247568292536583340948d7a8c97c4acd1e98d1e29dc320e97a260532a8aa7a758a1ec2":int:0 + +RSAES-OAEP Encryption Example 4_6 +0:int:1027:int:16:char*:"051240b6cc0004fa48d0134671c078c7c8dec3b3e2f25bc2564467339db38853d06b85eea5b2de353bff42ac2e46bc97fae6ac9618da9537a5c8f553c1e357625991d6108dcd7885fb3a25413f53efcad948cb35cd9b9ae9c1c67626d113d57dde4c5bea76bb5bb7de96c00d07372e9685a6d75cf9d239fa148d70931b5f3fb039":int:16:char*:"010001":exp:0:hex:"f22242751ec6b1":hex:"2e7e1e17f647b5ddd033e15472f90f6812f3ac4e":hex:"00a5ffa4768c8bbecaee2db77e8f2eec99595933545520835e5ba7db9493d3e17cddefe6a5f567624471908db4e2d83a0fbee60608fc84049503b2234a07dc83b27b22847ad8920ff42f674ef79b76280b00233d2b51b8cb2703a9d42bfbc8250c96ec32c051e57f1b4ba528db89c37e4c54e27e6e64ac69635ae887d9541619a9":int:0 + +RSAES-OAEP Encryption Example 5_1 +0:int:1028:int:16:char*:"0aadf3f9c125e5d891f31ac448e993defe580f802b45f9d7f22ba5021e9c47576b5a1e68031ba9db4e6dabe4d96a1d6f3d267268cff408005f118efcadb99888d1c234467166b2a2b849a05a889c060ac0da0c5fae8b55f309ba62e703742fa0326f2d10b011021489ff497770190d895fd39f52293c39efd73a698bdab9f10ed9":int:16:char*:"010001":exp:0:hex:"af71a901e3a61d3132f0fc1fdb474f9ea6579257ffc24d164170145b3dbde8":hex:"44c92e283f77b9499c603d963660c87d2f939461":hex:"036046a4a47d9ed3ba9a89139c105038eb7492b05a5d68bfd53accff4597f7a68651b47b4a4627d927e485eed7b4566420e8b409879e5d606eae251d22a5df799f7920bfc117b992572a53b1263146bcea03385cc5e853c9a101c8c3e1bda31a519807496c6cb5e5efb408823a352b8fa0661fb664efadd593deb99fff5ed000e5":int:0 + +RSAES-OAEP Encryption Example 5_2 +0:int:1028:int:16:char*:"0aadf3f9c125e5d891f31ac448e993defe580f802b45f9d7f22ba5021e9c47576b5a1e68031ba9db4e6dabe4d96a1d6f3d267268cff408005f118efcadb99888d1c234467166b2a2b849a05a889c060ac0da0c5fae8b55f309ba62e703742fa0326f2d10b011021489ff497770190d895fd39f52293c39efd73a698bdab9f10ed9":int:16:char*:"010001":exp:0:hex:"a3b844a08239a8ac41605af17a6cfda4d350136585903a417a79268760519a4b4ac3303ec73f0f87cfb32399":hex:"cb28f5860659fceee49c3eeafce625a70803bd32":hex:"03d6eb654edce615bc59f455265ed4e5a18223cbb9be4e4069b473804d5de96f54dcaaa603d049c5d94aa1470dfcd2254066b7c7b61ff1f6f6770e3215c51399fd4e34ec5082bc48f089840ad04354ae66dc0f1bd18e461a33cc1258b443a2837a6df26759aa2302334986f87380c9cc9d53be9f99605d2c9a97da7b0915a4a7ad":int:0 + +RSAES-OAEP Encryption Example 5_3 +0:int:1028:int:16:char*:"0aadf3f9c125e5d891f31ac448e993defe580f802b45f9d7f22ba5021e9c47576b5a1e68031ba9db4e6dabe4d96a1d6f3d267268cff408005f118efcadb99888d1c234467166b2a2b849a05a889c060ac0da0c5fae8b55f309ba62e703742fa0326f2d10b011021489ff497770190d895fd39f52293c39efd73a698bdab9f10ed9":int:16:char*:"010001":exp:0:hex:"308b0ecbd2c76cb77fc6f70c5edd233fd2f20929d629f026953bb62a8f4a3a314bde195de85b5f816da2aab074d26cb6acddf323ae3b9c678ac3cf12fbdde7":hex:"2285f40d770482f9a9efa2c72cb3ac55716dc0ca":hex:"0770952181649f9f9f07ff626ff3a22c35c462443d905d456a9fd0bff43cac2ca7a9f554e9478b9acc3ac838b02040ffd3e1847de2e4253929f9dd9ee4044325a9b05cabb808b2ee840d34e15d105a3f1f7b27695a1a07a2d73fe08ecaaa3c9c9d4d5a89ff890d54727d7ae40c0ec1a8dd86165d8ee2c6368141016a48b55b6967":int:0 + +RSAES-OAEP Encryption Example 5_4 +0:int:1028:int:16:char*:"0aadf3f9c125e5d891f31ac448e993defe580f802b45f9d7f22ba5021e9c47576b5a1e68031ba9db4e6dabe4d96a1d6f3d267268cff408005f118efcadb99888d1c234467166b2a2b849a05a889c060ac0da0c5fae8b55f309ba62e703742fa0326f2d10b011021489ff497770190d895fd39f52293c39efd73a698bdab9f10ed9":int:16:char*:"010001":exp:0:hex:"15c5b9ee1185":hex:"49fa45d3a78dd10dfd577399d1eb00af7eed5513":hex:"0812b76768ebcb642d040258e5f4441a018521bd96687e6c5e899fcd6c17588ff59a82cc8ae03a4b45b31299af1788c329f7dcd285f8cf4ced82606b97612671a45bedca133442144d1617d114f802857f0f9d739751c57a3f9ee400912c61e2e6992be031a43dd48fa6ba14eef7c422b5edc4e7afa04fdd38f402d1c8bb719abf":int:0 + +RSAES-OAEP Encryption Example 5_5 +0:int:1028:int:16:char*:"0aadf3f9c125e5d891f31ac448e993defe580f802b45f9d7f22ba5021e9c47576b5a1e68031ba9db4e6dabe4d96a1d6f3d267268cff408005f118efcadb99888d1c234467166b2a2b849a05a889c060ac0da0c5fae8b55f309ba62e703742fa0326f2d10b011021489ff497770190d895fd39f52293c39efd73a698bdab9f10ed9":int:16:char*:"010001":exp:0:hex:"21026e6800c7fa728fcaaba0d196ae28d7a2ac4ffd8abce794f0985f60c8a6737277365d3fea11db8923a2029a":hex:"f0287413234cc5034724a094c4586b87aff133fc":hex:"07b60e14ec954bfd29e60d0047e789f51d57186c63589903306793ced3f68241c743529aba6a6374f92e19e0163efa33697e196f7661dfaaa47aac6bde5e51deb507c72c589a2ca1693d96b1460381249b2cdb9eac44769f2489c5d3d2f99f0ee3c7ee5bf64a5ac79c42bd433f149be8cb59548361640595513c97af7bc2509723":int:0 + +RSAES-OAEP Encryption Example 5_6 +0:int:1028:int:16:char*:"0aadf3f9c125e5d891f31ac448e993defe580f802b45f9d7f22ba5021e9c47576b5a1e68031ba9db4e6dabe4d96a1d6f3d267268cff408005f118efcadb99888d1c234467166b2a2b849a05a889c060ac0da0c5fae8b55f309ba62e703742fa0326f2d10b011021489ff497770190d895fd39f52293c39efd73a698bdab9f10ed9":int:16:char*:"010001":exp:0:hex:"541e37b68b6c8872b84c02":hex:"d9fba45c96f21e6e26d29eb2cdcb6585be9cb341":hex:"08c36d4dda33423b2ed6830d85f6411ba1dcf470a1fae0ebefee7c089f256cef74cb96ea69c38f60f39abee44129bcb4c92de7f797623b20074e3d9c2899701ed9071e1efa0bdd84d4c3e5130302d8f0240baba4b84a71cc032f2235a5ff0fae277c3e8f9112bef44c9ae20d175fc9a4058bfc930ba31b02e2e4f444483710f24a":int:0 + +RSAES-OAEP Encryption Example 6_1 +0:int:1029:int:16:char*:"12b17f6dad2ecd19ff46dc13f7860f09e0e0cfb677b38a52592305ceaf022c166db90d04ac29e33f7dd12d9faf66e0816bb63ead267cc7d46c17c37be214bca2a22d723a64e44407436b6fc965729aefc2554f376cd5dcea68293780a62bf39d0029485a160bbb9e5dc0972d21a504f52e5ee028aa416332f510b2e9cff5f722af":int:16:char*:"010001":exp:0:hex:"4046ca8baa3347ca27f49e0d81f9cc1d71be9ba517d4":hex:"dd0f6cfe415e88e5a469a51fbba6dfd40adb4384":hex:"0630eebcd2856c24f798806e41f9e67345eda9ceda386acc9facaea1eeed06ace583709718d9d169fadf414d5c76f92996833ef305b75b1e4b95f662a20faedc3bae0c4827a8bf8a88edbd57ec203a27a841f02e43a615bab1a8cac0701de34debdef62a088089b55ec36ea7522fd3ec8d06b6a073e6df833153bc0aefd93bd1a3":int:0 + +RSAES-OAEP Encryption Example 6_2 +0:int:1029:int:16:char*:"12b17f6dad2ecd19ff46dc13f7860f09e0e0cfb677b38a52592305ceaf022c166db90d04ac29e33f7dd12d9faf66e0816bb63ead267cc7d46c17c37be214bca2a22d723a64e44407436b6fc965729aefc2554f376cd5dcea68293780a62bf39d0029485a160bbb9e5dc0972d21a504f52e5ee028aa416332f510b2e9cff5f722af":int:16:char*:"010001":exp:0:hex:"5cc72c60231df03b3d40f9b57931bc31109f972527f28b19e7480c7288cb3c92b22512214e4be6c914792ddabdf57faa8aa7":hex:"8d14bd946a1351148f5cae2ed9a0c653e85ebd85":hex:"0ebc37376173a4fd2f89cc55c2ca62b26b11d51c3c7ce49e8845f74e7607317c436bc8d23b9667dfeb9d087234b47bc6837175ae5c0559f6b81d7d22416d3e50f4ac533d8f0812f2db9e791fe9c775ac8b6ad0f535ad9ceb23a4a02014c58ab3f8d3161499a260f39348e714ae2a1d3443208fd8b722ccfdfb393e98011f99e63f":int:0 + +RSAES-OAEP Encryption Example 6_3 +0:int:1029:int:16:char*:"12b17f6dad2ecd19ff46dc13f7860f09e0e0cfb677b38a52592305ceaf022c166db90d04ac29e33f7dd12d9faf66e0816bb63ead267cc7d46c17c37be214bca2a22d723a64e44407436b6fc965729aefc2554f376cd5dcea68293780a62bf39d0029485a160bbb9e5dc0972d21a504f52e5ee028aa416332f510b2e9cff5f722af":int:16:char*:"010001":exp:0:hex:"b20e651303092f4bccb43070c0f86d23049362ed96642fc5632c27db4a52e3d831f2ab068b23b149879c002f6bf3feee97591112562c":hex:"6c075bc45520f165c0bf5ea4c5df191bc9ef0e44":hex:"0a98bf1093619394436cf68d8f38e2f158fde8ea54f3435f239b8d06b8321844202476aeed96009492480ce3a8d705498c4c8c68f01501dc81db608f60087350c8c3b0bd2e9ef6a81458b7c801b89f2e4fe99d4900ba6a4b5e5a96d865dc676c7755928794130d6280a8160a190f2df3ea7cf9aa0271d88e9e6905ecf1c5152d65":int:0 + +RSAES-OAEP Encryption Example 6_4 +0:int:1029:int:16:char*:"12b17f6dad2ecd19ff46dc13f7860f09e0e0cfb677b38a52592305ceaf022c166db90d04ac29e33f7dd12d9faf66e0816bb63ead267cc7d46c17c37be214bca2a22d723a64e44407436b6fc965729aefc2554f376cd5dcea68293780a62bf39d0029485a160bbb9e5dc0972d21a504f52e5ee028aa416332f510b2e9cff5f722af":int:16:char*:"010001":exp:0:hex:"684e3038c5c041f7":hex:"3bbc3bd6637dfe12846901029bf5b0c07103439c":hex:"008e7a67cacfb5c4e24bec7dee149117f19598ce8c45808fef88c608ff9cd6e695263b9a3c0ad4b8ba4c95238e96a8422b8535629c8d5382374479ad13fa39974b242f9a759eeaf9c83ad5a8ca18940a0162ba755876df263f4bd50c6525c56090267c1f0e09ce0899a0cf359e88120abd9bf893445b3cae77d3607359ae9a52f8":int:0 + +RSAES-OAEP Encryption Example 6_5 +0:int:1029:int:16:char*:"12b17f6dad2ecd19ff46dc13f7860f09e0e0cfb677b38a52592305ceaf022c166db90d04ac29e33f7dd12d9faf66e0816bb63ead267cc7d46c17c37be214bca2a22d723a64e44407436b6fc965729aefc2554f376cd5dcea68293780a62bf39d0029485a160bbb9e5dc0972d21a504f52e5ee028aa416332f510b2e9cff5f722af":int:16:char*:"010001":exp:0:hex:"32488cb262d041d6e4dd35f987bf3ca696db1f06ac29a44693":hex:"b46b41893e8bef326f6759383a83071dae7fcabc":hex:"00003474416c7b68bdf961c385737944d7f1f40cb395343c693cc0b4fe63b31fedf1eaeeac9ccc0678b31dc32e0977489514c4f09085f6298a9653f01aea4045ff582ee887be26ae575b73eef7f3774921e375a3d19adda0ca31aa1849887c1f42cac9677f7a2f4e923f6e5a868b38c084ef187594dc9f7f048fea2e02955384ab":int:0 + +RSAES-OAEP Encryption Example 6_6 +0:int:1029:int:16:char*:"12b17f6dad2ecd19ff46dc13f7860f09e0e0cfb677b38a52592305ceaf022c166db90d04ac29e33f7dd12d9faf66e0816bb63ead267cc7d46c17c37be214bca2a22d723a64e44407436b6fc965729aefc2554f376cd5dcea68293780a62bf39d0029485a160bbb9e5dc0972d21a504f52e5ee028aa416332f510b2e9cff5f722af":int:16:char*:"010001":exp:0:hex:"50ba14be8462720279c306ba":hex:"0a2403312a41e3d52f060fbc13a67de5cf7609a7":hex:"0a026dda5fc8785f7bd9bf75327b63e85e2c0fdee5dadb65ebdcac9ae1de95c92c672ab433aa7a8e69ce6a6d8897fac4ac4a54de841ae5e5bbce7687879d79634cea7a30684065c714d52409b928256bbf53eabcd5231eb7259504537399bd29164b726d33a46da701360a4168a091ccab72d44a62fed246c0ffea5b1348ab5470":int:0 + +RSAES-OAEP Encryption Example 7_1 +0:int:1030:int:16:char*:"311179f0bcfc9b9d3ca315d00ef30d7bdd3a2cfae9911bfedcb948b3a4782d0732b6ab44aa4bf03741a644dc01bec3e69b01a033e675d8acd7c4925c6b1aec3119051dfd89762d215d45475ffcb59f908148623f37177156f6ae86dd7a7c5f43dc1e1f908254058a284a5f06c0021793a87f1ac5feff7dcaee69c5e51a3789e373":int:16:char*:"010001":exp:0:hex:"47aae909":hex:"43dd09a07ff4cac71caa4632ee5e1c1daee4cd8f":hex:"1688e4ce7794bba6cb7014169ecd559cede2a30b56a52b68d9fe18cf1973ef97b2a03153951c755f6294aa49adbdb55845ab6875fb3986c93ecf927962840d282f9e54ce8b690f7c0cb8bbd73440d9571d1b16cd9260f9eab4783cc482e5223dc60973871783ec27b0ae0fd47732cbc286a173fc92b00fb4ba6824647cd93c85c1":int:0 + +RSAES-OAEP Encryption Example 7_2 +0:int:1030:int:16:char*:"311179f0bcfc9b9d3ca315d00ef30d7bdd3a2cfae9911bfedcb948b3a4782d0732b6ab44aa4bf03741a644dc01bec3e69b01a033e675d8acd7c4925c6b1aec3119051dfd89762d215d45475ffcb59f908148623f37177156f6ae86dd7a7c5f43dc1e1f908254058a284a5f06c0021793a87f1ac5feff7dcaee69c5e51a3789e373":int:16:char*:"010001":exp:0:hex:"1d9b2e2223d9bc13bfb9f162ce735db48ba7c68f6822a0a1a7b6ae165834e7":hex:"3a9c3cec7b84f9bd3adecbc673ec99d54b22bc9b":hex:"1052ed397b2e01e1d0ee1c50bf24363f95e504f4a03434a08fd822574ed6b9736edbb5f390db10321479a8a139350e2bd4977c3778ef331f3e78ae118b268451f20a2f01d471f5d53c566937171b2dbc2d4bde459a5799f0372d6574239b2323d245d0bb81c286b63c89a361017337e4902f88a467f4c7f244bfd5ab46437ff3b6":int:0 + +RSAES-OAEP Encryption Example 7_3 +0:int:1030:int:16:char*:"311179f0bcfc9b9d3ca315d00ef30d7bdd3a2cfae9911bfedcb948b3a4782d0732b6ab44aa4bf03741a644dc01bec3e69b01a033e675d8acd7c4925c6b1aec3119051dfd89762d215d45475ffcb59f908148623f37177156f6ae86dd7a7c5f43dc1e1f908254058a284a5f06c0021793a87f1ac5feff7dcaee69c5e51a3789e373":int:16:char*:"010001":exp:0:hex:"d976fc":hex:"76a75e5b6157a556cf8884bb2e45c293dd545cf5":hex:"2155cd843ff24a4ee8badb7694260028a490813ba8b369a4cbf106ec148e5298707f5965be7d101c1049ea8584c24cd63455ad9c104d686282d3fb803a4c11c1c2e9b91c7178801d1b6640f003f5728df007b8a4ccc92bce05e41a27278d7c85018c52414313a5077789001d4f01910b72aad05d220aa14a58733a7489bc54556b":int:0 + +RSAES-OAEP Encryption Example 7_4 +0:int:1030:int:16:char*:"311179f0bcfc9b9d3ca315d00ef30d7bdd3a2cfae9911bfedcb948b3a4782d0732b6ab44aa4bf03741a644dc01bec3e69b01a033e675d8acd7c4925c6b1aec3119051dfd89762d215d45475ffcb59f908148623f37177156f6ae86dd7a7c5f43dc1e1f908254058a284a5f06c0021793a87f1ac5feff7dcaee69c5e51a3789e373":int:16:char*:"010001":exp:0:hex:"d4738623df223aa43843df8467534c41d013e0c803c624e263666b239bde40a5f29aeb8de79e3daa61dd0370f49bd4b013834b98212aef6b1c5ee373b3cb":hex:"7866314a6ad6f2b250a35941db28f5864b585859":hex:"0ab14c373aeb7d4328d0aaad8c094d88b9eb098b95f21054a29082522be7c27a312878b637917e3d819e6c3c568db5d843802b06d51d9e98a2be0bf40c031423b00edfbff8320efb9171bd2044653a4cb9c5122f6c65e83cda2ec3c126027a9c1a56ba874d0fea23f380b82cf240b8cf540004758c4c77d934157a74f3fc12bfac":int:0 + +RSAES-OAEP Encryption Example 7_5 +0:int:1030:int:16:char*:"311179f0bcfc9b9d3ca315d00ef30d7bdd3a2cfae9911bfedcb948b3a4782d0732b6ab44aa4bf03741a644dc01bec3e69b01a033e675d8acd7c4925c6b1aec3119051dfd89762d215d45475ffcb59f908148623f37177156f6ae86dd7a7c5f43dc1e1f908254058a284a5f06c0021793a87f1ac5feff7dcaee69c5e51a3789e373":int:16:char*:"010001":exp:0:hex:"bb47231ca5ea1d3ad46c99345d9a8a61":hex:"b2166ed472d58db10cab2c6b000cccf10a7dc509":hex:"028387a318277434798b4d97f460068df5298faba5041ba11761a1cb7316b24184114ec500257e2589ed3b607a1ebbe97a6cc2e02bf1b681f42312a33b7a77d8e7855c4a6de03e3c04643f786b91a264a0d6805e2cea91e68177eb7a64d9255e4f27e713b7ccec00dc200ebd21c2ea2bb890feae4942df941dc3f97890ed347478":int:0 + +RSAES-OAEP Encryption Example 7_6 +0:int:1030:int:16:char*:"311179f0bcfc9b9d3ca315d00ef30d7bdd3a2cfae9911bfedcb948b3a4782d0732b6ab44aa4bf03741a644dc01bec3e69b01a033e675d8acd7c4925c6b1aec3119051dfd89762d215d45475ffcb59f908148623f37177156f6ae86dd7a7c5f43dc1e1f908254058a284a5f06c0021793a87f1ac5feff7dcaee69c5e51a3789e373":int:16:char*:"010001":exp:0:hex:"2184827095d35c3f86f600e8e59754013296":hex:"52673bde2ca166c2aa46131ac1dc808d67d7d3b1":hex:"14c678a94ad60525ef39e959b2f3ba5c097a94ff912b67dbace80535c187abd47d075420b1872152bba08f7fc31f313bbf9273c912fc4c0149a9b0cfb79807e346eb332069611bec0ff9bcd168f1f7c33e77313cea454b94e2549eecf002e2acf7f6f2d2845d4fe0aab2e5a92ddf68c480ae11247935d1f62574842216ae674115":int:0 + +RSAES-OAEP Encryption Example 8_1 +0:int:1031:int:16:char*:"5bdf0e30d321dda5147f882408fa69195480df8f80d3f6e8bf5818504f36427ca9b1f5540b9c65a8f6974cf8447a244d9280201bb49fcbbe6378d1944cd227e230f96e3d10f819dcef276c64a00b2a4b6701e7d01de5fabde3b1e9a0df82f4631359cd22669647fbb1717246134ed7b497cfffbdc42b59c73a96ed90166212dff7":int:16:char*:"010001":exp:0:hex:"050b755e5e6880f7b9e9d692a74c37aae449b31bfea6deff83747a897f6c2c825bb1adbf850a3c96994b5de5b33cbc7d4a17913a7967":hex:"7706ffca1ecfb1ebee2a55e5c6e24cd2797a4125":hex:"09b3683d8a2eb0fb295b62ed1fb9290b714457b7825319f4647872af889b30409472020ad12912bf19b11d4819f49614824ffd84d09c0a17e7d17309d12919790410aa2995699f6a86dbe3242b5acc23af45691080d6b1ae810fb3e3057087f0970092ce00be9562ff4053b6262ce0caa93e13723d2e3a5ba075d45f0d61b54b61":int:0 + +RSAES-OAEP Encryption Example 8_2 +0:int:1031:int:16:char*:"5bdf0e30d321dda5147f882408fa69195480df8f80d3f6e8bf5818504f36427ca9b1f5540b9c65a8f6974cf8447a244d9280201bb49fcbbe6378d1944cd227e230f96e3d10f819dcef276c64a00b2a4b6701e7d01de5fabde3b1e9a0df82f4631359cd22669647fbb1717246134ed7b497cfffbdc42b59c73a96ed90166212dff7":int:16:char*:"010001":exp:0:hex:"4eb68dcd93ca9b19df111bd43608f557026fe4aa1d5cfac227a3eb5ab9548c18a06dded23f81825986b2fcd71109ecef7eff88873f075c2aa0c469f69c92bc":hex:"a3717da143b4dcffbc742665a8fa950585548343":hex:"2ecf15c97c5a15b1476ae986b371b57a24284f4a162a8d0c8182e7905e792256f1812ba5f83f1f7a130e42dcc02232844edc14a31a68ee97ae564a383a3411656424c5f62ddb646093c367be1fcda426cf00a06d8acb7e57776fbbd855ac3df506fc16b1d7c3f2110f3d8068e91e186363831c8409680d8da9ecd8cf1fa20ee39d":int:0 + +RSAES-OAEP Encryption Example 8_3 +0:int:1031:int:16:char*:"5bdf0e30d321dda5147f882408fa69195480df8f80d3f6e8bf5818504f36427ca9b1f5540b9c65a8f6974cf8447a244d9280201bb49fcbbe6378d1944cd227e230f96e3d10f819dcef276c64a00b2a4b6701e7d01de5fabde3b1e9a0df82f4631359cd22669647fbb1717246134ed7b497cfffbdc42b59c73a96ed90166212dff7":int:16:char*:"010001":exp:0:hex:"8604ac56328c1ab5ad917861":hex:"ee06209073cca026bb264e5185bf8c68b7739f86":hex:"4bc89130a5b2dabb7c2fcf90eb5d0eaf9e681b7146a38f3173a3d9cfec52ea9e0a41932e648a9d69344c50da763f51a03c95762131e8052254dcd2248cba40fd31667786ce05a2b7b531ac9dac9ed584a59b677c1a8aed8c5d15d68c05569e2be780bf7db638fd2bfd2a85ab276860f3777338fca989ffd743d13ee08e0ca9893f":int:0 + +RSAES-OAEP Encryption Example 8_4 +0:int:1031:int:16:char*:"5bdf0e30d321dda5147f882408fa69195480df8f80d3f6e8bf5818504f36427ca9b1f5540b9c65a8f6974cf8447a244d9280201bb49fcbbe6378d1944cd227e230f96e3d10f819dcef276c64a00b2a4b6701e7d01de5fabde3b1e9a0df82f4631359cd22669647fbb1717246134ed7b497cfffbdc42b59c73a96ed90166212dff7":int:16:char*:"010001":exp:0:hex:"fdda5fbf6ec361a9d9a4ac68af216a0686f438b1e0e5c36b955f74e107f39c0dddcc":hex:"990ad573dc48a973235b6d82543618f2e955105d":hex:"2e456847d8fc36ff0147d6993594b9397227d577752c79d0f904fcb039d4d812fea605a7b574dd82ca786f93752348438ee9f5b5454985d5f0e1699e3e7ad175a32e15f03deb042ab9fe1dd9db1bb86f8c089ccb45e7ef0c5ee7ca9b7290ca6b15bed47039788a8a93ff83e0e8d6244c71006362deef69b6f416fb3c684383fbd0":int:0 + +RSAES-OAEP Encryption Example 8_5 +0:int:1031:int:16:char*:"5bdf0e30d321dda5147f882408fa69195480df8f80d3f6e8bf5818504f36427ca9b1f5540b9c65a8f6974cf8447a244d9280201bb49fcbbe6378d1944cd227e230f96e3d10f819dcef276c64a00b2a4b6701e7d01de5fabde3b1e9a0df82f4631359cd22669647fbb1717246134ed7b497cfffbdc42b59c73a96ed90166212dff7":int:16:char*:"010001":exp:0:hex:"4a5f4914bee25de3c69341de07":hex:"ecc63b28f0756f22f52ac8e6ec1251a6ec304718":hex:"1fb9356fd5c4b1796db2ebf7d0d393cc810adf6145defc2fce714f79d93800d5e2ac211ea8bbecca4b654b94c3b18b30dd576ce34dc95436ef57a09415645923359a5d7b4171ef22c24670f1b229d3603e91f76671b7df97e7317c97734476d5f3d17d21cf82b5ba9f83df2e588d36984fd1b584468bd23b2e875f32f68953f7b2":int:0 + +RSAES-OAEP Encryption Example 8_6 +0:int:1031:int:16:char*:"5bdf0e30d321dda5147f882408fa69195480df8f80d3f6e8bf5818504f36427ca9b1f5540b9c65a8f6974cf8447a244d9280201bb49fcbbe6378d1944cd227e230f96e3d10f819dcef276c64a00b2a4b6701e7d01de5fabde3b1e9a0df82f4631359cd22669647fbb1717246134ed7b497cfffbdc42b59c73a96ed90166212dff7":int:16:char*:"010001":exp:0:hex:"8e07d66f7b880a72563abcd3f35092bc33409fb7f88f2472be":hex:"3925c71b362d40a0a6de42145579ba1e7dd459fc":hex:"3afd9c6600147b21798d818c655a0f4c9212db26d0b0dfdc2a7594ccb3d22f5bf1d7c3e112cd73fc7d509c7a8bafdd3c274d1399009f9609ec4be6477e453f075aa33db382870c1c3409aef392d7386ae3a696b99a94b4da0589447e955d16c98b17602a59bd736279fcd8fb280c4462d590bfa9bf13fed570eafde97330a2c210":int:0 + +RSAES-OAEP Encryption Example 9_1 +0:int:1536:int:16:char*:"cf2cd41e34ca3a728ea5cb8aff64c36d27bdef5364e336fd68d3123c5a196a8c287013e853d5156d58d151954520fb4f6d7b17abb6817765909c576119659d902b1906ed8a2b10c155c24d124528dab9eeae379beac66e4a411786dcb8fd0062ebc030de1219a04c2a8c1b7dd3131e4d6b6caee2e31a5ed41ac1509b2ef1ee2ab18364be568ca941c25ecc84ff9d643b5ec1aaae102a20d73f479b780fd6da91075212d9eac03a0674d899eba2e431f4c44b615b6ba2232bd4b33baed73d625d":int:16:char*:"010001":exp:0:hex:"f735fd55ba92592c3b52b8f9c4f69aaa1cbef8fe88add095595412467f9cf4ec0b896c59eda16210e7549c8abb10cdbc21a12ec9b6b5b8fd2f10399eb6":hex:"8ec965f134a3ec9931e92a1ca0dc8169d5ea705c":hex:"267bcd118acab1fc8ba81c85d73003cb8610fa55c1d97da8d48a7c7f06896a4db751aa284255b9d36ad65f37653d829f1b37f97b8001942545b2fc2c55a7376ca7a1be4b1760c8e05a33e5aa2526b8d98e317088e7834c755b2a59b12631a182c05d5d43ab1779264f8456f515ce57dfdf512d5493dab7b7338dc4b7d78db9c091ac3baf537a69fc7f549d979f0eff9a94fda4169bd4d1d19a69c99e33c3b55490d501b39b1edae118ff6793a153261584d3a5f39f6e682e3d17c8cd1261fa72":int:0 + +RSAES-OAEP Encryption Example 9_2 +0:int:1536:int:16:char*:"cf2cd41e34ca3a728ea5cb8aff64c36d27bdef5364e336fd68d3123c5a196a8c287013e853d5156d58d151954520fb4f6d7b17abb6817765909c576119659d902b1906ed8a2b10c155c24d124528dab9eeae379beac66e4a411786dcb8fd0062ebc030de1219a04c2a8c1b7dd3131e4d6b6caee2e31a5ed41ac1509b2ef1ee2ab18364be568ca941c25ecc84ff9d643b5ec1aaae102a20d73f479b780fd6da91075212d9eac03a0674d899eba2e431f4c44b615b6ba2232bd4b33baed73d625d":int:16:char*:"010001":exp:0:hex:"81b906605015a63aabe42ddf11e1978912f5404c7474b26dce3ed482bf961ecc818bf420c54659":hex:"ecb1b8b25fa50cdab08e56042867f4af5826d16c":hex:"93ac9f0671ec29acbb444effc1a5741351d60fdb0e393fbf754acf0de49761a14841df7772e9bc82773966a1584c4d72baea00118f83f35cca6e537cbd4d811f5583b29783d8a6d94cd31be70d6f526c10ff09c6fa7ce069795a3fcd0511fd5fcb564bcc80ea9c78f38b80012539d8a4ddf6fe81e9cddb7f50dbbbbcc7e5d86097ccf4ec49189fb8bf318be6d5a0715d516b49af191258cd32dc833ce6eb4673c03a19bbace88cc54895f636cc0c1ec89096d11ce235a265ca1764232a689ae8":int:0 + +RSAES-OAEP Encryption Example 9_3 +0:int:1536:int:16:char*:"cf2cd41e34ca3a728ea5cb8aff64c36d27bdef5364e336fd68d3123c5a196a8c287013e853d5156d58d151954520fb4f6d7b17abb6817765909c576119659d902b1906ed8a2b10c155c24d124528dab9eeae379beac66e4a411786dcb8fd0062ebc030de1219a04c2a8c1b7dd3131e4d6b6caee2e31a5ed41ac1509b2ef1ee2ab18364be568ca941c25ecc84ff9d643b5ec1aaae102a20d73f479b780fd6da91075212d9eac03a0674d899eba2e431f4c44b615b6ba2232bd4b33baed73d625d":int:16:char*:"010001":exp:0:hex:"fd326429df9b890e09b54b18b8f34f1e24":hex:"e89bb032c6ce622cbdb53bc9466014ea77f777c0":hex:"81ebdd95054b0c822ef9ad7693f5a87adfb4b4c4ce70df2df84ed49c04da58ba5fc20a19e1a6e8b7a3900b22796dc4e869ee6b42792d15a8eceb56c09c69914e813cea8f6931e4b8ed6f421af298d595c97f4789c7caa612c7ef360984c21b93edc5401068b5af4c78a8771b984d53b8ea8adf2f6a7d4a0ba76c75e1dd9f658f20ded4a46071d46d7791b56803d8fea7f0b0f8e41ae3f09383a6f9585fe7753eaaffd2bf94563108beecc207bbb535f5fcc705f0dde9f708c62f49a9c90371d3":int:0 + +RSAES-OAEP Encryption Example 9_4 +0:int:1536:int:16:char*:"cf2cd41e34ca3a728ea5cb8aff64c36d27bdef5364e336fd68d3123c5a196a8c287013e853d5156d58d151954520fb4f6d7b17abb6817765909c576119659d902b1906ed8a2b10c155c24d124528dab9eeae379beac66e4a411786dcb8fd0062ebc030de1219a04c2a8c1b7dd3131e4d6b6caee2e31a5ed41ac1509b2ef1ee2ab18364be568ca941c25ecc84ff9d643b5ec1aaae102a20d73f479b780fd6da91075212d9eac03a0674d899eba2e431f4c44b615b6ba2232bd4b33baed73d625d":int:16:char*:"010001":exp:0:hex:"f1459b5f0c92f01a0f723a2e5662484d8f8c0a20fc29dad6acd43bb5f3effdf4e1b63e07fdfe6628d0d74ca19bf2d69e4a0abf86d293925a796772f8088e":hex:"606f3b99c0b9ccd771eaa29ea0e4c884f3189ccc":hex:"bcc35f94cde66cb1136625d625b94432a35b22f3d2fa11a613ff0fca5bd57f87b902ccdc1cd0aebcb0715ee869d1d1fe395f6793003f5eca465059c88660d446ff5f0818552022557e38c08a67ead991262254f10682975ec56397768537f4977af6d5f6aaceb7fb25dec5937230231fd8978af49119a29f29e424ab8272b47562792d5c94f774b8829d0b0d9f1a8c9eddf37574d5fa248eefa9c5271fc5ec2579c81bdd61b410fa61fe36e424221c113addb275664c801d34ca8c6351e4a858":int:0 + +RSAES-OAEP Encryption Example 9_5 +0:int:1536:int:16:char*:"cf2cd41e34ca3a728ea5cb8aff64c36d27bdef5364e336fd68d3123c5a196a8c287013e853d5156d58d151954520fb4f6d7b17abb6817765909c576119659d902b1906ed8a2b10c155c24d124528dab9eeae379beac66e4a411786dcb8fd0062ebc030de1219a04c2a8c1b7dd3131e4d6b6caee2e31a5ed41ac1509b2ef1ee2ab18364be568ca941c25ecc84ff9d643b5ec1aaae102a20d73f479b780fd6da91075212d9eac03a0674d899eba2e431f4c44b615b6ba2232bd4b33baed73d625d":int:16:char*:"010001":exp:0:hex:"53e6e8c729d6f9c319dd317e74b0db8e4ccca25f3c8305746e137ac63a63ef3739e7b595abb96e8d55e54f7bd41ab433378ffb911d":hex:"fcbc421402e9ecabc6082afa40ba5f26522c840e":hex:"232afbc927fa08c2f6a27b87d4a5cb09c07dc26fae73d73a90558839f4fd66d281b87ec734bce237ba166698ed829106a7de6942cd6cdce78fed8d2e4d81428e66490d036264cef92af941d3e35055fe3981e14d29cbb9a4f67473063baec79a1179f5a17c9c1832f2838fd7d5e59bb9659d56dce8a019edef1bb3accc697cc6cc7a778f60a064c7f6f5d529c6210262e003de583e81e3167b89971fb8c0e15d44fffef89b53d8d64dd797d159b56d2b08ea5307ea12c241bd58d4ee278a1f2e":int:0 + +RSAES-OAEP Encryption Example 9_6 +0:int:1536:int:16:char*:"cf2cd41e34ca3a728ea5cb8aff64c36d27bdef5364e336fd68d3123c5a196a8c287013e853d5156d58d151954520fb4f6d7b17abb6817765909c576119659d902b1906ed8a2b10c155c24d124528dab9eeae379beac66e4a411786dcb8fd0062ebc030de1219a04c2a8c1b7dd3131e4d6b6caee2e31a5ed41ac1509b2ef1ee2ab18364be568ca941c25ecc84ff9d643b5ec1aaae102a20d73f479b780fd6da91075212d9eac03a0674d899eba2e431f4c44b615b6ba2232bd4b33baed73d625d":int:16:char*:"010001":exp:0:hex:"b6b28ea2198d0c1008bc64":hex:"23aade0e1e08bb9b9a78d2302a52f9c21b2e1ba2":hex:"438cc7dc08a68da249e42505f8573ba60e2c2773d5b290f4cf9dff718e842081c383e67024a0f29594ea987b9d25e4b738f285970d195abb3a8c8054e3d79d6b9c9a8327ba596f1259e27126674766907d8d582ff3a8476154929adb1e6d1235b2ccb4ec8f663ba9cc670a92bebd853c8dbf69c6436d016f61add836e94732450434207f9fd4c43dec2a12a958efa01efe2669899b5e604c255c55fb7166de5589e369597bb09168c06dd5db177e06a1740eb2d5c82faeca6d92fcee9931ba9f":int:0 + +RSAES-OAEP Encryption Example 10_1 +0:int:2048:int:16:char*:"ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb":int:16:char*:"010001":exp:0:hex:"8bba6bf82a6c0f86d5f1756e97956870b08953b06b4eb205bc1694ee":hex:"47e1ab7119fee56c95ee5eaad86f40d0aa63bd33":hex:"53ea5dc08cd260fb3b858567287fa91552c30b2febfba213f0ae87702d068d19bab07fe574523dfb42139d68c3c5afeee0bfe4cb7969cbf382b804d6e61396144e2d0e60741f8993c3014b58b9b1957a8babcd23af854f4c356fb1662aa72bfcc7e586559dc4280d160c126785a723ebeebeff71f11594440aaef87d10793a8774a239d4a04c87fe1467b9daf85208ec6c7255794a96cc29142f9a8bd418e3c1fd67344b0cd0829df3b2bec60253196293c6b34d3f75d32f213dd45c6273d505adf4cced1057cb758fc26aeefa441255ed4e64c199ee075e7f16646182fdb464739b68ab5daff0e63e9552016824f054bf4d3c8c90a97bb6b6553284eb429fcc":int:0 + +RSAES-OAEP Encryption Example 10_2 +0:int:2048:int:16:char*:"ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb":int:16:char*:"010001":exp:0:hex:"e6ad181f053b58a904f2457510373e57":hex:"6d17f5b4c1ffac351d195bf7b09d09f09a4079cf":hex:"a2b1a430a9d657e2fa1c2bb5ed43ffb25c05a308fe9093c01031795f5874400110828ae58fb9b581ce9dddd3e549ae04a0985459bde6c626594e7b05dc4278b2a1465c1368408823c85e96dc66c3a30983c639664fc4569a37fe21e5a195b5776eed2df8d8d361af686e750229bbd663f161868a50615e0c337bec0ca35fec0bb19c36eb2e0bbcc0582fa1d93aacdb061063f59f2ce1ee43605e5d89eca183d2acdfe9f81011022ad3b43a3dd417dac94b4e11ea81b192966e966b182082e71964607b4f8002f36299844a11f2ae0faeac2eae70f8f4f98088acdcd0ac556e9fccc511521908fad26f04c64201450305778758b0538bf8b5bb144a828e629795":int:0 + +RSAES-OAEP Encryption Example 10_3 +0:int:2048:int:16:char*:"ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb":int:16:char*:"010001":exp:0:hex:"510a2cf60e866fa2340553c94ea39fbc256311e83e94454b4124":hex:"385387514deccc7c740dd8cdf9daee49a1cbfd54":hex:"9886c3e6764a8b9a84e84148ebd8c3b1aa8050381a78f668714c16d9cfd2a6edc56979c535d9dee3b44b85c18be8928992371711472216d95dda98d2ee8347c9b14dffdff84aa48d25ac06f7d7e65398ac967b1ce90925f67dce049b7f812db0742997a74d44fe81dbe0e7a3feaf2e5c40af888d550ddbbe3bc20657a29543f8fc2913b9bd1a61b2ab2256ec409bbd7dc0d17717ea25c43f42ed27df8738bf4afc6766ff7aff0859555ee283920f4c8a63c4a7340cbafddc339ecdb4b0515002f96c932b5b79167af699c0ad3fccfdf0f44e85a70262bf2e18fe34b850589975e867ff969d48eabf212271546cdc05a69ecb526e52870c836f307bd798780ede":int:0 + +RSAES-OAEP Encryption Example 10_4 +0:int:2048:int:16:char*:"ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb":int:16:char*:"010001":exp:0:hex:"bcdd190da3b7d300df9a06e22caae2a75f10c91ff667b7c16bde8b53064a2649a94045c9":hex:"5caca6a0f764161a9684f85d92b6e0ef37ca8b65":hex:"6318e9fb5c0d05e5307e1683436e903293ac4642358aaa223d7163013aba87e2dfda8e60c6860e29a1e92686163ea0b9175f329ca3b131a1edd3a77759a8b97bad6a4f8f4396f28cf6f39ca58112e48160d6e203daa5856f3aca5ffed577af499408e3dfd233e3e604dbe34a9c4c9082de65527cac6331d29dc80e0508a0fa7122e7f329f6cca5cfa34d4d1da417805457e008bec549e478ff9e12a763c477d15bbb78f5b69bd57830fc2c4ed686d79bc72a95d85f88134c6b0afe56a8ccfbc855828bb339bd17909cf1d70de3335ae07039093e606d655365de6550b872cd6de1d440ee031b61945f629ad8a353b0d40939e96a3c450d2a8d5eee9f678093c8":int:0 + +RSAES-OAEP Encryption Example 10_5 +0:int:2048:int:16:char*:"ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb":int:16:char*:"010001":exp:0:hex:"a7dd6c7dc24b46f9dd5f1e91ada4c3b3df947e877232a9":hex:"95bca9e3859894b3dd869fa7ecd5bbc6401bf3e4":hex:"75290872ccfd4a4505660d651f56da6daa09ca1301d890632f6a992f3d565cee464afded40ed3b5be9356714ea5aa7655f4a1366c2f17c728f6f2c5a5d1f8e28429bc4e6f8f2cff8da8dc0e0a9808e45fd09ea2fa40cb2b6ce6ffff5c0e159d11b68d90a85f7b84e103b09e682666480c657505c0929259468a314786d74eab131573cf234bf57db7d9e66cc6748192e002dc0deea930585f0831fdcd9bc33d51f79ed2ffc16bcf4d59812fcebcaa3f9069b0e445686d644c25ccf63b456ee5fa6ffe96f19cdf751fed9eaf35957754dbf4bfea5216aa1844dc507cb2d080e722eba150308c2b5ff1193620f1766ecf4481bafb943bd292877f2136ca494aba0":int:0 + +RSAES-OAEP Encryption Example 10_6 +0:int:2048:int:16:char*:"ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb":int:16:char*:"010001":exp:0:hex:"eaf1a73a1b0c4609537de69cd9228bbcfb9a8ca8c6c3efaf056fe4a7f4634ed00b7c39ec6922d7b8ea2c04ebac":hex:"9f47ddf42e97eea856a9bdbc714eb3ac22f6eb32":hex:"2d207a73432a8fb4c03051b3f73b28a61764098dfa34c47a20995f8115aa6816679b557e82dbee584908c6e69782d7deb34dbd65af063d57fca76a5fd069492fd6068d9984d209350565a62e5c77f23038c12cb10c6634709b547c46f6b4a709bd85ca122d74465ef97762c29763e06dbc7a9e738c78bfca0102dc5e79d65b973f28240caab2e161a78b57d262457ed8195d53e3c7ae9da021883c6db7c24afdd2322eac972ad3c354c5fcef1e146c3a0290fb67adf007066e00428d2cec18ce58f9328698defef4b2eb5ec76918fde1c198cbb38b7afc67626a9aefec4322bfd90d2563481c9a221f78c8272c82d1b62ab914e1c69f6af6ef30ca5260db4a46":int:0 + +RSAES-OAEP Encryption input=NULL with length=0 +depends_on:0 +0:int:2048:int:16:char*:"ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb":int:16:char*:"010001":exp:0:hex:"":hex:"9f47ddf42e97eea856a9bdbc714eb3ac22f6eb32":hex:"32b75304e631e94d4b02819642c7ffa66116af504cb3c4687420cc4b7f069fc6cc3b1a254611995ce2914a9e88152d38bbf87ccedcad9b9890341284e56e802a1b1f8f6bd3d5c991bd92eb8a8ea0a1d8bae141088ff8dceaebdb73515cf06ce33baa37c53093f1d1edc3502818cc70edcfddb41646374beb5b4f67f7f773e43778d4d31012e5a207c474e762ac3251ea6ede9018ad6e8e9ea65a3528a62b694eb9d8becff220a7c6c70d33eaafa52cf67a8090f67b6f9c43c6fe0b0f2375cbb9e611c0fcfef5312feb5e53d4a89d3d7e06c966e0c92ab9e5838239f390bcfd918d94c224df8e8ccb57ee364389908b6a0e550133f7565016804fbd6cb338314a":int:0 + +RSAES-OAEP Decryption Test Vector Int +1:int:1024:int:16:char*:"eecfae81b1b9b3c908810b10a1b5600199eb9f44aef4fda493b81a9e3d84f632124ef0236e5d1e3b7e28fae7aa040a2d5b252176459d1f397541ba2a58fb6599":int:16:char*:"c97fb1f027f453f6341233eaaad1d9353f6c42d08866b1d05a0f2035028b9d869840b41666b42e92ea0da3b43204b5cfce3352524d0416a5a441e700af461503":int:16:char*:"bbf82f090682ce9c2338ac2b9da871f7368d07eed41043a440d6b6f07454f51fb8dfbaaf035c02ab61ea48ceeb6fcd4876ed520d60e1ec4619719d8a5b8b807fafb8e0a3dfc737723ee6b4b7d93a2584ee6a649d060953748834b2454598394ee0aab12d7b61a51f527a9a41f6c1687fe2537298ca2a8f5946f8e5fd091dbdcb":int:16:char*:"11":exp:0:hex:"d436e99569fd32a7c8a05bbc90d32c49":char*:"aafd12f659cae63489b479e5076ddec2f06cb58f":hex:"1253e04dc0a5397bb44a7ab87e9bf2a039a33d1e996fc82a94ccd30074c95df763722017069e5268da5d1c0b4f872cf653c11df82314a67968dfeae28def04bb6d84b1c31d654a1970e5783bd6eb96a024c2ca2f4a90fe9f2ef5c9c140e5bb48da9536ad8700c84fc9130adea74e558d51a74ddf85d8b50de96838d6063e0955":int:0 + +RSAES-OAEP Decryption Test Vector 1_1 +1:int:1024:int:16:char*:"d32737e7267ffe1341b2d5c0d150a81b586fb3132bed2f8d5262864a9cb9f30af38be448598d413a172efb802c21acf1c11c520c2f26a471dcad212eac7ca39d":int:16:char*:"cc8853d1d54da630fac004f471f281c7b8982d8224a490edbeb33d3e3d5cc93c4765703d1dd791642f1f116a0dd852be2419b2af72bfe9a030e860b0288b5d77":int:16:char*:"a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb":int:16:char*:"010001":exp:0:hex:"6628194e12073db03ba94cda9ef9532397d50dba79b987004afefe34":char*:"18b776ea21069d69776a33e96bad48e1dda0a5ef":hex:"354fe67b4a126d5d35fe36c777791a3f7ba13def484e2d3908aff722fad468fb21696de95d0be911c2d3174f8afcc201035f7b6d8e69402de5451618c21a535fa9d7bfc5b8dd9fc243f8cf927db31322d6e881eaa91a996170e657a05a266426d98c88003f8477c1227094a0d9fa1e8c4024309ce1ecccb5210035d47ac72e8a":int:0 + +RSAES-OAEP Decryption Test Vector 1_2 +1:int:1024:int:16:char*:"d32737e7267ffe1341b2d5c0d150a81b586fb3132bed2f8d5262864a9cb9f30af38be448598d413a172efb802c21acf1c11c520c2f26a471dcad212eac7ca39d":int:16:char*:"cc8853d1d54da630fac004f471f281c7b8982d8224a490edbeb33d3e3d5cc93c4765703d1dd791642f1f116a0dd852be2419b2af72bfe9a030e860b0288b5d77":int:16:char*:"a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb":int:16:char*:"010001":exp:0:hex:"750c4047f547e8e41411856523298ac9bae245efaf1397fbe56f9dd5":char*:"0cc742ce4a9b7f32f951bcb251efd925fe4fe35f":hex:"640db1acc58e0568fe5407e5f9b701dff8c3c91e716c536fc7fcec6cb5b71c1165988d4a279e1577d730fc7a29932e3f00c81515236d8d8e31017a7a09df4352d904cdeb79aa583adcc31ea698a4c05283daba9089be5491f67c1a4ee48dc74bbbe6643aef846679b4cb395a352d5ed115912df696ffe0702932946d71492b44":int:0 + +RSAES-OAEP Decryption Test Vector 1_3 +1:int:1024:int:16:char*:"d32737e7267ffe1341b2d5c0d150a81b586fb3132bed2f8d5262864a9cb9f30af38be448598d413a172efb802c21acf1c11c520c2f26a471dcad212eac7ca39d":int:16:char*:"cc8853d1d54da630fac004f471f281c7b8982d8224a490edbeb33d3e3d5cc93c4765703d1dd791642f1f116a0dd852be2419b2af72bfe9a030e860b0288b5d77":int:16:char*:"a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb":int:16:char*:"010001":exp:0:hex:"d94ae0832e6445ce42331cb06d531a82b1db4baad30f746dc916df24d4e3c2451fff59a6423eb0e1d02d4fe646cf699dfd818c6e97b051":char*:"2514df4695755a67b288eaf4905c36eec66fd2fd":hex:"423736ed035f6026af276c35c0b3741b365e5f76ca091b4e8c29e2f0befee603595aa8322d602d2e625e95eb81b2f1c9724e822eca76db8618cf09c5343503a4360835b5903bc637e3879fb05e0ef32685d5aec5067cd7cc96fe4b2670b6eac3066b1fcf5686b68589aafb7d629b02d8f8625ca3833624d4800fb081b1cf94eb":int:0 + +RSAES-OAEP Decryption Test Vector 1_4 +1:int:1024:int:16:char*:"d32737e7267ffe1341b2d5c0d150a81b586fb3132bed2f8d5262864a9cb9f30af38be448598d413a172efb802c21acf1c11c520c2f26a471dcad212eac7ca39d":int:16:char*:"cc8853d1d54da630fac004f471f281c7b8982d8224a490edbeb33d3e3d5cc93c4765703d1dd791642f1f116a0dd852be2419b2af72bfe9a030e860b0288b5d77":int:16:char*:"a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb":int:16:char*:"010001":exp:0:hex:"52e650d98e7f2a048b4f86852153b97e01dd316f346a19f67a85":char*:"c4435a3e1a18a68b6820436290a37cefb85db3fb":hex:"45ead4ca551e662c9800f1aca8283b0525e6abae30be4b4aba762fa40fd3d38e22abefc69794f6ebbbc05ddbb11216247d2f412fd0fba87c6e3acd888813646fd0e48e785204f9c3f73d6d8239562722dddd8771fec48b83a31ee6f592c4cfd4bc88174f3b13a112aae3b9f7b80e0fc6f7255ba880dc7d8021e22ad6a85f0755":int:0 + +RSAES-OAEP Decryption Test Vector 1_5 +1:int:1024:int:16:char*:"d32737e7267ffe1341b2d5c0d150a81b586fb3132bed2f8d5262864a9cb9f30af38be448598d413a172efb802c21acf1c11c520c2f26a471dcad212eac7ca39d":int:16:char*:"cc8853d1d54da630fac004f471f281c7b8982d8224a490edbeb33d3e3d5cc93c4765703d1dd791642f1f116a0dd852be2419b2af72bfe9a030e860b0288b5d77":int:16:char*:"a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb":int:16:char*:"010001":exp:0:hex:"8da89fd9e5f974a29feffb462b49180f6cf9e802":char*:"b318c42df3be0f83fea823f5a7b47ed5e425a3b5":hex:"36f6e34d94a8d34daacba33a2139d00ad85a9345a86051e73071620056b920e219005855a213a0f23897cdcd731b45257c777fe908202befdd0b58386b1244ea0cf539a05d5d10329da44e13030fd760dcd644cfef2094d1910d3f433e1c7c6dd18bc1f2df7f643d662fb9dd37ead9059190f4fa66ca39e869c4eb449cbdc439":int:0 + +RSAES-OAEP Decryption Test Vector 1_6 +1:int:1024:int:16:char*:"d32737e7267ffe1341b2d5c0d150a81b586fb3132bed2f8d5262864a9cb9f30af38be448598d413a172efb802c21acf1c11c520c2f26a471dcad212eac7ca39d":int:16:char*:"cc8853d1d54da630fac004f471f281c7b8982d8224a490edbeb33d3e3d5cc93c4765703d1dd791642f1f116a0dd852be2419b2af72bfe9a030e860b0288b5d77":int:16:char*:"a8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb":int:16:char*:"010001":exp:0:hex:"26521050844271":char*:"e4ec0982c2336f3a677f6a356174eb0ce887abc2":hex:"42cee2617b1ecea4db3f4829386fbd61dafbf038e180d837c96366df24c097b4ab0fac6bdf590d821c9f10642e681ad05b8d78b378c0f46ce2fad63f74e0ad3df06b075d7eb5f5636f8d403b9059ca761b5c62bb52aa45002ea70baace08ded243b9d8cbd62a68ade265832b56564e43a6fa42ed199a099769742df1539e8255":int:0 + +RSAES-OAEP Decryption Test Vector 2_1 +1:int:1025:int:16:char*:"0159dbde04a33ef06fb608b80b190f4d3e22bcc13ac8e4a081033abfa416edb0b338aa08b57309ea5a5240e7dc6e54378c69414c31d97ddb1f406db3769cc41a43":int:16:char*:"012b652f30403b38b40995fd6ff41a1acc8ada70373236b7202d39b2ee30cfb46db09511f6f307cc61cc21606c18a75b8a62f822df031ba0df0dafd5506f568bd7":int:16:char*:"01947c7fce90425f47279e70851f25d5e62316fe8a1df19371e3e628e260543e4901ef6081f68c0b8141190d2ae8daba7d1250ec6db636e944ec3722877c7c1d0a67f14b1694c5f0379451a43e49a32dde83670b73da91a1c99bc23b436a60055c610f0baf99c1a079565b95a3f1526632d1d4da60f20eda25e653c4f002766f45":int:16:char*:"010001":exp:0:hex:"8ff00caa605c702830634d9a6c3d42c652b58cf1d92fec570beee7":char*:"8c407b5ec2899e5099c53e8ce793bf94e71b1782":hex:"0181af8922b9fcb4d79d92ebe19815992fc0c1439d8bcd491398a0f4ad3a329a5bd9385560db532683c8b7da04e4b12aed6aacdf471c34c9cda891addcc2df3456653aa6382e9ae59b54455257eb099d562bbe10453f2b6d13c59c02e10f1f8abb5da0d0570932dacf2d0901db729d0fefcc054e70968ea540c81b04bcaefe720e":int:0 + +RSAES-OAEP Decryption Test Vector 2_2 +1:int:1025:int:16:char*:"0159dbde04a33ef06fb608b80b190f4d3e22bcc13ac8e4a081033abfa416edb0b338aa08b57309ea5a5240e7dc6e54378c69414c31d97ddb1f406db3769cc41a43":int:16:char*:"012b652f30403b38b40995fd6ff41a1acc8ada70373236b7202d39b2ee30cfb46db09511f6f307cc61cc21606c18a75b8a62f822df031ba0df0dafd5506f568bd7":int:16:char*:"01947c7fce90425f47279e70851f25d5e62316fe8a1df19371e3e628e260543e4901ef6081f68c0b8141190d2ae8daba7d1250ec6db636e944ec3722877c7c1d0a67f14b1694c5f0379451a43e49a32dde83670b73da91a1c99bc23b436a60055c610f0baf99c1a079565b95a3f1526632d1d4da60f20eda25e653c4f002766f45":int:16:char*:"010001":exp:0:hex:"2d":char*:"b600cf3c2e506d7f16778c910d3a8b003eee61d5":hex:"018759ff1df63b2792410562314416a8aeaf2ac634b46f940ab82d64dbf165eee33011da749d4bab6e2fcd18129c9e49277d8453112b429a222a8471b070993998e758861c4d3f6d749d91c4290d332c7a4ab3f7ea35ff3a07d497c955ff0ffc95006b62c6d296810d9bfab024196c7934012c2df978ef299aba239940cba10245":int:0 + +RSAES-OAEP Decryption Test Vector 2_3 +1:int:1025:int:16:char*:"0159dbde04a33ef06fb608b80b190f4d3e22bcc13ac8e4a081033abfa416edb0b338aa08b57309ea5a5240e7dc6e54378c69414c31d97ddb1f406db3769cc41a43":int:16:char*:"012b652f30403b38b40995fd6ff41a1acc8ada70373236b7202d39b2ee30cfb46db09511f6f307cc61cc21606c18a75b8a62f822df031ba0df0dafd5506f568bd7":int:16:char*:"01947c7fce90425f47279e70851f25d5e62316fe8a1df19371e3e628e260543e4901ef6081f68c0b8141190d2ae8daba7d1250ec6db636e944ec3722877c7c1d0a67f14b1694c5f0379451a43e49a32dde83670b73da91a1c99bc23b436a60055c610f0baf99c1a079565b95a3f1526632d1d4da60f20eda25e653c4f002766f45":int:16:char*:"010001":exp:0:hex:"74fc88c51bc90f77af9d5e9a4a70133d4b4e0b34da3c37c7ef8e":char*:"a73768aeeaa91f9d8c1ed6f9d2b63467f07ccae3":hex:"018802bab04c60325e81c4962311f2be7c2adce93041a00719c88f957575f2c79f1b7bc8ced115c706b311c08a2d986ca3b6a9336b147c29c6f229409ddec651bd1fdd5a0b7f610c9937fdb4a3a762364b8b3206b4ea485fd098d08f63d4aa8bb2697d027b750c32d7f74eaf5180d2e9b66b17cb2fa55523bc280da10d14be2053":int:0 + +RSAES-OAEP Decryption Test Vector 2_4 +1:int:1025:int:16:char*:"0159dbde04a33ef06fb608b80b190f4d3e22bcc13ac8e4a081033abfa416edb0b338aa08b57309ea5a5240e7dc6e54378c69414c31d97ddb1f406db3769cc41a43":int:16:char*:"012b652f30403b38b40995fd6ff41a1acc8ada70373236b7202d39b2ee30cfb46db09511f6f307cc61cc21606c18a75b8a62f822df031ba0df0dafd5506f568bd7":int:16:char*:"01947c7fce90425f47279e70851f25d5e62316fe8a1df19371e3e628e260543e4901ef6081f68c0b8141190d2ae8daba7d1250ec6db636e944ec3722877c7c1d0a67f14b1694c5f0379451a43e49a32dde83670b73da91a1c99bc23b436a60055c610f0baf99c1a079565b95a3f1526632d1d4da60f20eda25e653c4f002766f45":int:16:char*:"010001":exp:0:hex:"a7eb2a5036931d27d4e891326d99692ffadda9bf7efd3e34e622c4adc085f721dfe885072c78a203b151739be540fa8c153a10f00a":char*:"9a7b3b0e708bd96f8190ecab4fb9b2b3805a8156":hex:"00a4578cbc176318a638fba7d01df15746af44d4f6cd96d7e7c495cbf425b09c649d32bf886da48fbaf989a2117187cafb1fb580317690e3ccd446920b7af82b31db5804d87d01514acbfa9156e782f867f6bed9449e0e9a2c09bcecc6aa087636965e34b3ec766f2fe2e43018a2fddeb140616a0e9d82e5331024ee0652fc7641":int:0 + +RSAES-OAEP Decryption Test Vector 2_5 +1:int:1025:int:16:char*:"0159dbde04a33ef06fb608b80b190f4d3e22bcc13ac8e4a081033abfa416edb0b338aa08b57309ea5a5240e7dc6e54378c69414c31d97ddb1f406db3769cc41a43":int:16:char*:"012b652f30403b38b40995fd6ff41a1acc8ada70373236b7202d39b2ee30cfb46db09511f6f307cc61cc21606c18a75b8a62f822df031ba0df0dafd5506f568bd7":int:16:char*:"01947c7fce90425f47279e70851f25d5e62316fe8a1df19371e3e628e260543e4901ef6081f68c0b8141190d2ae8daba7d1250ec6db636e944ec3722877c7c1d0a67f14b1694c5f0379451a43e49a32dde83670b73da91a1c99bc23b436a60055c610f0baf99c1a079565b95a3f1526632d1d4da60f20eda25e653c4f002766f45":int:16:char*:"010001":exp:0:hex:"2ef2b066f854c33f3bdcbb5994a435e73d6c6c":char*:"eb3cebbc4adc16bb48e88c8aec0e34af7f427fd3":hex:"00ebc5f5fda77cfdad3c83641a9025e77d72d8a6fb33a810f5950f8d74c73e8d931e8634d86ab1246256ae07b6005b71b7f2fb98351218331ce69b8ffbdc9da08bbc9c704f876deb9df9fc2ec065cad87f9090b07acc17aa7f997b27aca48806e897f771d95141fe4526d8a5301b678627efab707fd40fbebd6e792a25613e7aec":int:0 + +RSAES-OAEP Decryption Test Vector 2_6 +1:int:1025:int:16:char*:"0159dbde04a33ef06fb608b80b190f4d3e22bcc13ac8e4a081033abfa416edb0b338aa08b57309ea5a5240e7dc6e54378c69414c31d97ddb1f406db3769cc41a43":int:16:char*:"012b652f30403b38b40995fd6ff41a1acc8ada70373236b7202d39b2ee30cfb46db09511f6f307cc61cc21606c18a75b8a62f822df031ba0df0dafd5506f568bd7":int:16:char*:"01947c7fce90425f47279e70851f25d5e62316fe8a1df19371e3e628e260543e4901ef6081f68c0b8141190d2ae8daba7d1250ec6db636e944ec3722877c7c1d0a67f14b1694c5f0379451a43e49a32dde83670b73da91a1c99bc23b436a60055c610f0baf99c1a079565b95a3f1526632d1d4da60f20eda25e653c4f002766f45":int:16:char*:"010001":exp:0:hex:"8a7fb344c8b6cb2cf2ef1f643f9a3218f6e19bba89c0":char*:"4c45cf4d57c98e3d6d2095adc51c489eb50dff84":hex:"010839ec20c27b9052e55befb9b77e6fc26e9075d7a54378c646abdf51e445bd5715de81789f56f1803d9170764a9e93cb78798694023ee7393ce04bc5d8f8c5a52c171d43837e3aca62f609eb0aa5ffb0960ef04198dd754f57f7fbe6abf765cf118b4ca443b23b5aab266f952326ac4581100644325f8b721acd5d04ff14ef3a":int:0 + +RSAES-OAEP Decryption Example 3_1 +1:int:1026:int:16:char*:"01bf01d216d73595cf0270c2beb78d40a0d8447d31da919a983f7eea781b77d85fe371b3e9373e7b69217d3150a02d8958de7fad9d555160958b4454127e0e7eaf":int:16:char*:"018d3399658166db3829816d7b295416759e9c91987f5b2d8aecd63b04b48bd7b2fcf229bb7f8a6dc88ba13dd2e39ad55b6d1a06160708f9700be80b8fd3744ce7":int:16:char*:"02b58fec039a860700a4d7b6462f93e6cdd491161ddd74f4e810b40e3c1652006a5c277b2774c11305a4cbab5a78efa57e17a86df7a3fa36fc4b1d2249f22ec7c2dd6a463232accea906d66ebe80b5704b10729da6f833234abb5efdd4a292cbfad33b4d33fa7a14b8c397b56e3acd21203428b77cdfa33a6da706b3d8b0fc43e9":int:16:char*:"010001":exp:0:hex:"087820b569e8fa8d":char*:"8ced6b196290805790e909074015e6a20b0c4894":hex:"026a0485d96aebd96b4382085099b962e6a2bdec3d90c8db625e14372de85e2d5b7baab65c8faf91bb5504fb495afce5c988b3f6a52e20e1d6cbd3566c5cd1f2b8318bb542cc0ea25c4aab9932afa20760eaddec784396a07ea0ef24d4e6f4d37e5052a7a31e146aa480a111bbe926401307e00f410033842b6d82fe5ce4dfae80":int:0 + +RSAES-OAEP Decryption Example 3_2 +1:int:1026:int:16:char*:"01bf01d216d73595cf0270c2beb78d40a0d8447d31da919a983f7eea781b77d85fe371b3e9373e7b69217d3150a02d8958de7fad9d555160958b4454127e0e7eaf":int:16:char*:"018d3399658166db3829816d7b295416759e9c91987f5b2d8aecd63b04b48bd7b2fcf229bb7f8a6dc88ba13dd2e39ad55b6d1a06160708f9700be80b8fd3744ce7":int:16:char*:"02b58fec039a860700a4d7b6462f93e6cdd491161ddd74f4e810b40e3c1652006a5c277b2774c11305a4cbab5a78efa57e17a86df7a3fa36fc4b1d2249f22ec7c2dd6a463232accea906d66ebe80b5704b10729da6f833234abb5efdd4a292cbfad33b4d33fa7a14b8c397b56e3acd21203428b77cdfa33a6da706b3d8b0fc43e9":int:16:char*:"010001":exp:0:hex:"4653acaf171960b01f52a7be63a3ab21dc368ec43b50d82ec3781e04":char*:"b4291d6567550848cc156967c809baab6ca507f0":hex:"024db89c7802989be0783847863084941bf209d761987e38f97cb5f6f1bc88da72a50b73ebaf11c879c4f95df37b850b8f65d7622e25b1b889e80fe80baca2069d6e0e1d829953fc459069de98ea9798b451e557e99abf8fe3d9ccf9096ebbf3e5255d3b4e1c6d2ecadf067a359eea86405acd47d5e165517ccafd47d6dbee4bf5":int:0 + +RSAES-OAEP Decryption Example 3_3 +1:int:1026:int:16:char*:"01bf01d216d73595cf0270c2beb78d40a0d8447d31da919a983f7eea781b77d85fe371b3e9373e7b69217d3150a02d8958de7fad9d555160958b4454127e0e7eaf":int:16:char*:"018d3399658166db3829816d7b295416759e9c91987f5b2d8aecd63b04b48bd7b2fcf229bb7f8a6dc88ba13dd2e39ad55b6d1a06160708f9700be80b8fd3744ce7":int:16:char*:"02b58fec039a860700a4d7b6462f93e6cdd491161ddd74f4e810b40e3c1652006a5c277b2774c11305a4cbab5a78efa57e17a86df7a3fa36fc4b1d2249f22ec7c2dd6a463232accea906d66ebe80b5704b10729da6f833234abb5efdd4a292cbfad33b4d33fa7a14b8c397b56e3acd21203428b77cdfa33a6da706b3d8b0fc43e9":int:16:char*:"010001":exp:0:hex:"d94cd0e08fa404ed89":char*:"ce8928f6059558254008badd9794fadcd2fd1f65":hex:"0239bce681032441528877d6d1c8bb28aa3bc97f1df584563618995797683844ca86664732f4bed7a0aab083aaabfb7238f582e30958c2024e44e57043b97950fd543da977c90cdde5337d618442f99e60d7783ab59ce6dd9d69c47ad1e962bec22d05895cff8d3f64ed5261d92b2678510393484990ba3f7f06818ae6ffce8a3a":int:0 + +RSAES-OAEP Decryption Example 3_4 +1:int:1026:int:16:char*:"01bf01d216d73595cf0270c2beb78d40a0d8447d31da919a983f7eea781b77d85fe371b3e9373e7b69217d3150a02d8958de7fad9d555160958b4454127e0e7eaf":int:16:char*:"018d3399658166db3829816d7b295416759e9c91987f5b2d8aecd63b04b48bd7b2fcf229bb7f8a6dc88ba13dd2e39ad55b6d1a06160708f9700be80b8fd3744ce7":int:16:char*:"02b58fec039a860700a4d7b6462f93e6cdd491161ddd74f4e810b40e3c1652006a5c277b2774c11305a4cbab5a78efa57e17a86df7a3fa36fc4b1d2249f22ec7c2dd6a463232accea906d66ebe80b5704b10729da6f833234abb5efdd4a292cbfad33b4d33fa7a14b8c397b56e3acd21203428b77cdfa33a6da706b3d8b0fc43e9":int:16:char*:"010001":exp:0:hex:"6cc641b6b61e6f963974dad23a9013284ef1":char*:"6e2979f52d6814a57d83b090054888f119a5b9a3":hex:"02994c62afd76f498ba1fd2cf642857fca81f4373cb08f1cbaee6f025c3b512b42c3e8779113476648039dbe0493f9246292fac28950600e7c0f32edf9c81b9dec45c3bde0cc8d8847590169907b7dc5991ceb29bb0714d613d96df0f12ec5d8d3507c8ee7ae78dd83f216fa61de100363aca48a7e914ae9f42ddfbe943b09d9a0":int:0 + +RSAES-OAEP Decryption Example 3_5 +1:int:1026:int:16:char*:"01bf01d216d73595cf0270c2beb78d40a0d8447d31da919a983f7eea781b77d85fe371b3e9373e7b69217d3150a02d8958de7fad9d555160958b4454127e0e7eaf":int:16:char*:"018d3399658166db3829816d7b295416759e9c91987f5b2d8aecd63b04b48bd7b2fcf229bb7f8a6dc88ba13dd2e39ad55b6d1a06160708f9700be80b8fd3744ce7":int:16:char*:"02b58fec039a860700a4d7b6462f93e6cdd491161ddd74f4e810b40e3c1652006a5c277b2774c11305a4cbab5a78efa57e17a86df7a3fa36fc4b1d2249f22ec7c2dd6a463232accea906d66ebe80b5704b10729da6f833234abb5efdd4a292cbfad33b4d33fa7a14b8c397b56e3acd21203428b77cdfa33a6da706b3d8b0fc43e9":int:16:char*:"010001":exp:0:hex:"df5151832b61f4f25891fb4172f328d2eddf8371ffcfdbe997939295f30eca6918017cfda1153bf7a6af87593223":char*:"2d760bfe38c59de34cdc8b8c78a38e66284a2d27":hex:"0162042ff6969592a6167031811a239834ce638abf54fec8b99478122afe2ee67f8c5b18b0339805bfdbc5a4e6720b37c59cfba942464c597ff532a119821545fd2e59b114e61daf71820529f5029cf524954327c34ec5e6f5ba7efcc4de943ab8ad4ed787b1454329f70db798a3a8f4d92f8274e2b2948ade627ce8ee33e43c60":int:0 + +RSAES-OAEP Decryption Example 3_6 +1:int:1026:int:16:char*:"01bf01d216d73595cf0270c2beb78d40a0d8447d31da919a983f7eea781b77d85fe371b3e9373e7b69217d3150a02d8958de7fad9d555160958b4454127e0e7eaf":int:16:char*:"018d3399658166db3829816d7b295416759e9c91987f5b2d8aecd63b04b48bd7b2fcf229bb7f8a6dc88ba13dd2e39ad55b6d1a06160708f9700be80b8fd3744ce7":int:16:char*:"02b58fec039a860700a4d7b6462f93e6cdd491161ddd74f4e810b40e3c1652006a5c277b2774c11305a4cbab5a78efa57e17a86df7a3fa36fc4b1d2249f22ec7c2dd6a463232accea906d66ebe80b5704b10729da6f833234abb5efdd4a292cbfad33b4d33fa7a14b8c397b56e3acd21203428b77cdfa33a6da706b3d8b0fc43e9":int:16:char*:"010001":exp:0:hex:"3c3bad893c544a6d520ab022319188c8d504b7a788b850903b85972eaa18552e1134a7ad6098826254ff7ab672b3d8eb3158fac6d4cbaef1":char*:"f174779c5fd3cfe007badcb7a36c9b55bfcfbf0e":hex:"00112051e75d064943bc4478075e43482fd59cee0679de6893eec3a943daa490b9691c93dfc0464b6623b9f3dbd3e70083264f034b374f74164e1a00763725e574744ba0b9db83434f31df96f6e2a26f6d8eba348bd4686c2238ac07c37aac3785d1c7eea2f819fd91491798ed8e9cef5e43b781b0e0276e37c43ff9492d005730":int:0 + +RSAES-OAEP Decryption Example 4_1 +1:int:1027:int:16:char*:"027458c19ec1636919e736c9af25d609a51b8f561d19c6bf6943dd1ee1ab8a4a3f232100bd40b88decc6ba235548b6ef792a11c9de823d0a7922c7095b6eba5701":int:16:char*:"0210ee9b33ab61716e27d251bd465f4b35a1a232e2da00901c294bf22350ce490d099f642b5375612db63ba1f20386492bf04d34b3c22bceb909d13441b53b5139":int:16:char*:"051240b6cc0004fa48d0134671c078c7c8dec3b3e2f25bc2564467339db38853d06b85eea5b2de353bff42ac2e46bc97fae6ac9618da9537a5c8f553c1e357625991d6108dcd7885fb3a25413f53efcad948cb35cd9b9ae9c1c67626d113d57dde4c5bea76bb5bb7de96c00d07372e9685a6d75cf9d239fa148d70931b5f3fb039":int:16:char*:"010001":exp:0:hex:"4a86609534ee434a6cbca3f7e962e76d455e3264c19f605f6e5ff6137c65c56d7fb344cd52bc93374f3d166c9f0c6f9c506bad19330972d2":char*:"1cac19ce993def55f98203f6852896c95ccca1f3":hex:"04cce19614845e094152a3fe18e54e3330c44e5efbc64ae16886cb1869014cc5781b1f8f9e045384d0112a135ca0d12e9c88a8e4063416deaae3844f60d6e96fe155145f4525b9a34431ca3766180f70e15a5e5d8e8b1a516ff870609f13f896935ced188279a58ed13d07114277d75c6568607e0ab092fd803a223e4a8ee0b1a8":int:0 + +RSAES-OAEP Decryption Example 4_2 +1:int:1027:int:16:char*:"027458c19ec1636919e736c9af25d609a51b8f561d19c6bf6943dd1ee1ab8a4a3f232100bd40b88decc6ba235548b6ef792a11c9de823d0a7922c7095b6eba5701":int:16:char*:"0210ee9b33ab61716e27d251bd465f4b35a1a232e2da00901c294bf22350ce490d099f642b5375612db63ba1f20386492bf04d34b3c22bceb909d13441b53b5139":int:16:char*:"051240b6cc0004fa48d0134671c078c7c8dec3b3e2f25bc2564467339db38853d06b85eea5b2de353bff42ac2e46bc97fae6ac9618da9537a5c8f553c1e357625991d6108dcd7885fb3a25413f53efcad948cb35cd9b9ae9c1c67626d113d57dde4c5bea76bb5bb7de96c00d07372e9685a6d75cf9d239fa148d70931b5f3fb039":int:16:char*:"010001":exp:0:hex:"b0adc4f3fe11da59ce992773d9059943c03046497ee9d9f9a06df1166db46d98f58d27ec074c02eee6cbe2449c8b9fc5080c5c3f4433092512ec46aa793743c8":char*:"f545d5897585e3db71aa0cb8da76c51d032ae963":hex:"0097b698c6165645b303486fbf5a2a4479c0ee85889b541a6f0b858d6b6597b13b854eb4f839af03399a80d79bda6578c841f90d645715b280d37143992dd186c80b949b775cae97370e4ec97443136c6da484e970ffdb1323a20847821d3b18381de13bb49aaea66530c4a4b8271f3eae172cd366e07e6636f1019d2a28aed15e":int:0 + +RSAES-OAEP Decryption Example 4_3 +1:int:1027:int:16:char*:"027458c19ec1636919e736c9af25d609a51b8f561d19c6bf6943dd1ee1ab8a4a3f232100bd40b88decc6ba235548b6ef792a11c9de823d0a7922c7095b6eba5701":int:16:char*:"0210ee9b33ab61716e27d251bd465f4b35a1a232e2da00901c294bf22350ce490d099f642b5375612db63ba1f20386492bf04d34b3c22bceb909d13441b53b5139":int:16:char*:"051240b6cc0004fa48d0134671c078c7c8dec3b3e2f25bc2564467339db38853d06b85eea5b2de353bff42ac2e46bc97fae6ac9618da9537a5c8f553c1e357625991d6108dcd7885fb3a25413f53efcad948cb35cd9b9ae9c1c67626d113d57dde4c5bea76bb5bb7de96c00d07372e9685a6d75cf9d239fa148d70931b5f3fb039":int:16:char*:"010001":exp:0:hex:"bf6d42e701707b1d0206b0c8b45a1c72641ff12889219a82bdea965b5e79a96b0d0163ed9d578ec9ada20f2fbcf1ea3c4089d83419ba81b0c60f3606da99":char*:"ad997feef730d6ea7be60d0dc52e72eacbfdd275":hex:"0301f935e9c47abcb48acbbe09895d9f5971af14839da4ff95417ee453d1fd77319072bb7297e1b55d7561cd9d1bb24c1a9a37c619864308242804879d86ebd001dce5183975e1506989b70e5a83434154d5cbfd6a24787e60eb0c658d2ac193302d1192c6e622d4a12ad4b53923bca246df31c6395e37702c6a78ae081fb9d065":int:0 + +RSAES-OAEP Decryption Example 4_4 +1:int:1027:int:16:char*:"027458c19ec1636919e736c9af25d609a51b8f561d19c6bf6943dd1ee1ab8a4a3f232100bd40b88decc6ba235548b6ef792a11c9de823d0a7922c7095b6eba5701":int:16:char*:"0210ee9b33ab61716e27d251bd465f4b35a1a232e2da00901c294bf22350ce490d099f642b5375612db63ba1f20386492bf04d34b3c22bceb909d13441b53b5139":int:16:char*:"051240b6cc0004fa48d0134671c078c7c8dec3b3e2f25bc2564467339db38853d06b85eea5b2de353bff42ac2e46bc97fae6ac9618da9537a5c8f553c1e357625991d6108dcd7885fb3a25413f53efcad948cb35cd9b9ae9c1c67626d113d57dde4c5bea76bb5bb7de96c00d07372e9685a6d75cf9d239fa148d70931b5f3fb039":int:16:char*:"010001":exp:0:hex:"fb2ef112f5e766eb94019297934794f7be2f6fc1c58e":char*:"136454df5730f73c807a7e40d8c1a312ac5b9dd3":hex:"02d110ad30afb727beb691dd0cf17d0af1a1e7fa0cc040ec1a4ba26a42c59d0a796a2e22c8f357ccc98b6519aceb682e945e62cb734614a529407cd452bee3e44fece8423cc19e55548b8b994b849c7ecde4933e76037e1d0ce44275b08710c68e430130b929730ed77e09b015642c5593f04e4ffb9410798102a8e96ffdfe11e4":int:0 + +RSAES-OAEP Decryption Example 4_5 +1:int:1027:int:16:char*:"027458c19ec1636919e736c9af25d609a51b8f561d19c6bf6943dd1ee1ab8a4a3f232100bd40b88decc6ba235548b6ef792a11c9de823d0a7922c7095b6eba5701":int:16:char*:"0210ee9b33ab61716e27d251bd465f4b35a1a232e2da00901c294bf22350ce490d099f642b5375612db63ba1f20386492bf04d34b3c22bceb909d13441b53b5139":int:16:char*:"051240b6cc0004fa48d0134671c078c7c8dec3b3e2f25bc2564467339db38853d06b85eea5b2de353bff42ac2e46bc97fae6ac9618da9537a5c8f553c1e357625991d6108dcd7885fb3a25413f53efcad948cb35cd9b9ae9c1c67626d113d57dde4c5bea76bb5bb7de96c00d07372e9685a6d75cf9d239fa148d70931b5f3fb039":int:16:char*:"010001":exp:0:hex:"28ccd447bb9e85166dabb9e5b7d1adadc4b9d39f204e96d5e440ce9ad928bc1c2284":char*:"bca8057f824b2ea257f2861407eef63d33208681":hex:"00dbb8a7439d90efd919a377c54fae8fe11ec58c3b858362e23ad1b8a44310799066b99347aa525691d2adc58d9b06e34f288c170390c5f0e11c0aa3645959f18ee79e8f2be8d7ac5c23d061f18dd74b8c5f2a58fcb5eb0c54f99f01a83247568292536583340948d7a8c97c4acd1e98d1e29dc320e97a260532a8aa7a758a1ec2":int:0 + +RSAES-OAEP Decryption Example 4_6 +1:int:1027:int:16:char*:"027458c19ec1636919e736c9af25d609a51b8f561d19c6bf6943dd1ee1ab8a4a3f232100bd40b88decc6ba235548b6ef792a11c9de823d0a7922c7095b6eba5701":int:16:char*:"0210ee9b33ab61716e27d251bd465f4b35a1a232e2da00901c294bf22350ce490d099f642b5375612db63ba1f20386492bf04d34b3c22bceb909d13441b53b5139":int:16:char*:"051240b6cc0004fa48d0134671c078c7c8dec3b3e2f25bc2564467339db38853d06b85eea5b2de353bff42ac2e46bc97fae6ac9618da9537a5c8f553c1e357625991d6108dcd7885fb3a25413f53efcad948cb35cd9b9ae9c1c67626d113d57dde4c5bea76bb5bb7de96c00d07372e9685a6d75cf9d239fa148d70931b5f3fb039":int:16:char*:"010001":exp:0:hex:"f22242751ec6b1":char*:"2e7e1e17f647b5ddd033e15472f90f6812f3ac4e":hex:"00a5ffa4768c8bbecaee2db77e8f2eec99595933545520835e5ba7db9493d3e17cddefe6a5f567624471908db4e2d83a0fbee60608fc84049503b2234a07dc83b27b22847ad8920ff42f674ef79b76280b00233d2b51b8cb2703a9d42bfbc8250c96ec32c051e57f1b4ba528db89c37e4c54e27e6e64ac69635ae887d9541619a9":int:0 + +RSAES-OAEP Decryption Example 5_1 +1:int:1028:int:16:char*:"03b0d3962f6d17549cbfca11294348dcf0e7e39f8c2bc6824f2164b606d687860dae1e632393cfedf513228229069e2f60e4acd7e633a436063f82385f48993707":int:16:char*:"02e4c32e2f517269b7072309f00c0e31365f7ce28b236b82912df239abf39572cf0ed604b02982e53564c52d6a05397de5c052a2fddc141ef7189836346aeb331f":int:16:char*:"0aadf3f9c125e5d891f31ac448e993defe580f802b45f9d7f22ba5021e9c47576b5a1e68031ba9db4e6dabe4d96a1d6f3d267268cff408005f118efcadb99888d1c234467166b2a2b849a05a889c060ac0da0c5fae8b55f309ba62e703742fa0326f2d10b011021489ff497770190d895fd39f52293c39efd73a698bdab9f10ed9":int:16:char*:"010001":exp:0:hex:"af71a901e3a61d3132f0fc1fdb474f9ea6579257ffc24d164170145b3dbde8":char*:"44c92e283f77b9499c603d963660c87d2f939461":hex:"036046a4a47d9ed3ba9a89139c105038eb7492b05a5d68bfd53accff4597f7a68651b47b4a4627d927e485eed7b4566420e8b409879e5d606eae251d22a5df799f7920bfc117b992572a53b1263146bcea03385cc5e853c9a101c8c3e1bda31a519807496c6cb5e5efb408823a352b8fa0661fb664efadd593deb99fff5ed000e5":int:0 + +RSAES-OAEP Decryption Example 5_2 +1:int:1028:int:16:char*:"03b0d3962f6d17549cbfca11294348dcf0e7e39f8c2bc6824f2164b606d687860dae1e632393cfedf513228229069e2f60e4acd7e633a436063f82385f48993707":int:16:char*:"02e4c32e2f517269b7072309f00c0e31365f7ce28b236b82912df239abf39572cf0ed604b02982e53564c52d6a05397de5c052a2fddc141ef7189836346aeb331f":int:16:char*:"0aadf3f9c125e5d891f31ac448e993defe580f802b45f9d7f22ba5021e9c47576b5a1e68031ba9db4e6dabe4d96a1d6f3d267268cff408005f118efcadb99888d1c234467166b2a2b849a05a889c060ac0da0c5fae8b55f309ba62e703742fa0326f2d10b011021489ff497770190d895fd39f52293c39efd73a698bdab9f10ed9":int:16:char*:"010001":exp:0:hex:"a3b844a08239a8ac41605af17a6cfda4d350136585903a417a79268760519a4b4ac3303ec73f0f87cfb32399":char*:"cb28f5860659fceee49c3eeafce625a70803bd32":hex:"03d6eb654edce615bc59f455265ed4e5a18223cbb9be4e4069b473804d5de96f54dcaaa603d049c5d94aa1470dfcd2254066b7c7b61ff1f6f6770e3215c51399fd4e34ec5082bc48f089840ad04354ae66dc0f1bd18e461a33cc1258b443a2837a6df26759aa2302334986f87380c9cc9d53be9f99605d2c9a97da7b0915a4a7ad":int:0 + +RSAES-OAEP Decryption Example 5_3 +1:int:1028:int:16:char*:"03b0d3962f6d17549cbfca11294348dcf0e7e39f8c2bc6824f2164b606d687860dae1e632393cfedf513228229069e2f60e4acd7e633a436063f82385f48993707":int:16:char*:"02e4c32e2f517269b7072309f00c0e31365f7ce28b236b82912df239abf39572cf0ed604b02982e53564c52d6a05397de5c052a2fddc141ef7189836346aeb331f":int:16:char*:"0aadf3f9c125e5d891f31ac448e993defe580f802b45f9d7f22ba5021e9c47576b5a1e68031ba9db4e6dabe4d96a1d6f3d267268cff408005f118efcadb99888d1c234467166b2a2b849a05a889c060ac0da0c5fae8b55f309ba62e703742fa0326f2d10b011021489ff497770190d895fd39f52293c39efd73a698bdab9f10ed9":int:16:char*:"010001":exp:0:hex:"308b0ecbd2c76cb77fc6f70c5edd233fd2f20929d629f026953bb62a8f4a3a314bde195de85b5f816da2aab074d26cb6acddf323ae3b9c678ac3cf12fbdde7":char*:"2285f40d770482f9a9efa2c72cb3ac55716dc0ca":hex:"0770952181649f9f9f07ff626ff3a22c35c462443d905d456a9fd0bff43cac2ca7a9f554e9478b9acc3ac838b02040ffd3e1847de2e4253929f9dd9ee4044325a9b05cabb808b2ee840d34e15d105a3f1f7b27695a1a07a2d73fe08ecaaa3c9c9d4d5a89ff890d54727d7ae40c0ec1a8dd86165d8ee2c6368141016a48b55b6967":int:0 + +RSAES-OAEP Decryption Example 5_4 +1:int:1028:int:16:char*:"03b0d3962f6d17549cbfca11294348dcf0e7e39f8c2bc6824f2164b606d687860dae1e632393cfedf513228229069e2f60e4acd7e633a436063f82385f48993707":int:16:char*:"02e4c32e2f517269b7072309f00c0e31365f7ce28b236b82912df239abf39572cf0ed604b02982e53564c52d6a05397de5c052a2fddc141ef7189836346aeb331f":int:16:char*:"0aadf3f9c125e5d891f31ac448e993defe580f802b45f9d7f22ba5021e9c47576b5a1e68031ba9db4e6dabe4d96a1d6f3d267268cff408005f118efcadb99888d1c234467166b2a2b849a05a889c060ac0da0c5fae8b55f309ba62e703742fa0326f2d10b011021489ff497770190d895fd39f52293c39efd73a698bdab9f10ed9":int:16:char*:"010001":exp:0:hex:"15c5b9ee1185":char*:"49fa45d3a78dd10dfd577399d1eb00af7eed5513":hex:"0812b76768ebcb642d040258e5f4441a018521bd96687e6c5e899fcd6c17588ff59a82cc8ae03a4b45b31299af1788c329f7dcd285f8cf4ced82606b97612671a45bedca133442144d1617d114f802857f0f9d739751c57a3f9ee400912c61e2e6992be031a43dd48fa6ba14eef7c422b5edc4e7afa04fdd38f402d1c8bb719abf":int:0 + +RSAES-OAEP Decryption Example 5_5 +1:int:1028:int:16:char*:"03b0d3962f6d17549cbfca11294348dcf0e7e39f8c2bc6824f2164b606d687860dae1e632393cfedf513228229069e2f60e4acd7e633a436063f82385f48993707":int:16:char*:"02e4c32e2f517269b7072309f00c0e31365f7ce28b236b82912df239abf39572cf0ed604b02982e53564c52d6a05397de5c052a2fddc141ef7189836346aeb331f":int:16:char*:"0aadf3f9c125e5d891f31ac448e993defe580f802b45f9d7f22ba5021e9c47576b5a1e68031ba9db4e6dabe4d96a1d6f3d267268cff408005f118efcadb99888d1c234467166b2a2b849a05a889c060ac0da0c5fae8b55f309ba62e703742fa0326f2d10b011021489ff497770190d895fd39f52293c39efd73a698bdab9f10ed9":int:16:char*:"010001":exp:0:hex:"21026e6800c7fa728fcaaba0d196ae28d7a2ac4ffd8abce794f0985f60c8a6737277365d3fea11db8923a2029a":char*:"f0287413234cc5034724a094c4586b87aff133fc":hex:"07b60e14ec954bfd29e60d0047e789f51d57186c63589903306793ced3f68241c743529aba6a6374f92e19e0163efa33697e196f7661dfaaa47aac6bde5e51deb507c72c589a2ca1693d96b1460381249b2cdb9eac44769f2489c5d3d2f99f0ee3c7ee5bf64a5ac79c42bd433f149be8cb59548361640595513c97af7bc2509723":int:0 + +RSAES-OAEP Decryption Example 5_6 +1:int:1028:int:16:char*:"03b0d3962f6d17549cbfca11294348dcf0e7e39f8c2bc6824f2164b606d687860dae1e632393cfedf513228229069e2f60e4acd7e633a436063f82385f48993707":int:16:char*:"02e4c32e2f517269b7072309f00c0e31365f7ce28b236b82912df239abf39572cf0ed604b02982e53564c52d6a05397de5c052a2fddc141ef7189836346aeb331f":int:16:char*:"0aadf3f9c125e5d891f31ac448e993defe580f802b45f9d7f22ba5021e9c47576b5a1e68031ba9db4e6dabe4d96a1d6f3d267268cff408005f118efcadb99888d1c234467166b2a2b849a05a889c060ac0da0c5fae8b55f309ba62e703742fa0326f2d10b011021489ff497770190d895fd39f52293c39efd73a698bdab9f10ed9":int:16:char*:"010001":exp:0:hex:"541e37b68b6c8872b84c02":char*:"d9fba45c96f21e6e26d29eb2cdcb6585be9cb341":hex:"08c36d4dda33423b2ed6830d85f6411ba1dcf470a1fae0ebefee7c089f256cef74cb96ea69c38f60f39abee44129bcb4c92de7f797623b20074e3d9c2899701ed9071e1efa0bdd84d4c3e5130302d8f0240baba4b84a71cc032f2235a5ff0fae277c3e8f9112bef44c9ae20d175fc9a4058bfc930ba31b02e2e4f444483710f24a":int:0 + +RSAES-OAEP Decryption Example 6_1 +1:int:1029:int:16:char*:"04a6ce8b7358dfa69bdcf742617005afb5385f5f3a58a24ef74a22a8c05cb7cc38ebd4cc9d9a9d789a62cd0f60f0cb941d3423c9692efa4fe3adff290c4749a38b":int:16:char*:"0404c9a803371fedb4c5be39f3c00b009e5e08a63be1e40035cdaca5011cc701cf7eebcb99f0ffe17cfd0a4bf7befd2dd536ac946db797fdbc4abe8f29349b91ed":int:16:char*:"12b17f6dad2ecd19ff46dc13f7860f09e0e0cfb677b38a52592305ceaf022c166db90d04ac29e33f7dd12d9faf66e0816bb63ead267cc7d46c17c37be214bca2a22d723a64e44407436b6fc965729aefc2554f376cd5dcea68293780a62bf39d0029485a160bbb9e5dc0972d21a504f52e5ee028aa416332f510b2e9cff5f722af":int:16:char*:"010001":exp:0:hex:"4046ca8baa3347ca27f49e0d81f9cc1d71be9ba517d4":char*:"dd0f6cfe415e88e5a469a51fbba6dfd40adb4384":hex:"0630eebcd2856c24f798806e41f9e67345eda9ceda386acc9facaea1eeed06ace583709718d9d169fadf414d5c76f92996833ef305b75b1e4b95f662a20faedc3bae0c4827a8bf8a88edbd57ec203a27a841f02e43a615bab1a8cac0701de34debdef62a088089b55ec36ea7522fd3ec8d06b6a073e6df833153bc0aefd93bd1a3":int:0 + +RSAES-OAEP Decryption Example 6_2 +1:int:1029:int:16:char*:"04a6ce8b7358dfa69bdcf742617005afb5385f5f3a58a24ef74a22a8c05cb7cc38ebd4cc9d9a9d789a62cd0f60f0cb941d3423c9692efa4fe3adff290c4749a38b":int:16:char*:"0404c9a803371fedb4c5be39f3c00b009e5e08a63be1e40035cdaca5011cc701cf7eebcb99f0ffe17cfd0a4bf7befd2dd536ac946db797fdbc4abe8f29349b91ed":int:16:char*:"12b17f6dad2ecd19ff46dc13f7860f09e0e0cfb677b38a52592305ceaf022c166db90d04ac29e33f7dd12d9faf66e0816bb63ead267cc7d46c17c37be214bca2a22d723a64e44407436b6fc965729aefc2554f376cd5dcea68293780a62bf39d0029485a160bbb9e5dc0972d21a504f52e5ee028aa416332f510b2e9cff5f722af":int:16:char*:"010001":exp:0:hex:"5cc72c60231df03b3d40f9b57931bc31109f972527f28b19e7480c7288cb3c92b22512214e4be6c914792ddabdf57faa8aa7":char*:"8d14bd946a1351148f5cae2ed9a0c653e85ebd85":hex:"0ebc37376173a4fd2f89cc55c2ca62b26b11d51c3c7ce49e8845f74e7607317c436bc8d23b9667dfeb9d087234b47bc6837175ae5c0559f6b81d7d22416d3e50f4ac533d8f0812f2db9e791fe9c775ac8b6ad0f535ad9ceb23a4a02014c58ab3f8d3161499a260f39348e714ae2a1d3443208fd8b722ccfdfb393e98011f99e63f":int:0 + +RSAES-OAEP Decryption Example 6_3 +1:int:1029:int:16:char*:"04a6ce8b7358dfa69bdcf742617005afb5385f5f3a58a24ef74a22a8c05cb7cc38ebd4cc9d9a9d789a62cd0f60f0cb941d3423c9692efa4fe3adff290c4749a38b":int:16:char*:"0404c9a803371fedb4c5be39f3c00b009e5e08a63be1e40035cdaca5011cc701cf7eebcb99f0ffe17cfd0a4bf7befd2dd536ac946db797fdbc4abe8f29349b91ed":int:16:char*:"12b17f6dad2ecd19ff46dc13f7860f09e0e0cfb677b38a52592305ceaf022c166db90d04ac29e33f7dd12d9faf66e0816bb63ead267cc7d46c17c37be214bca2a22d723a64e44407436b6fc965729aefc2554f376cd5dcea68293780a62bf39d0029485a160bbb9e5dc0972d21a504f52e5ee028aa416332f510b2e9cff5f722af":int:16:char*:"010001":exp:0:hex:"b20e651303092f4bccb43070c0f86d23049362ed96642fc5632c27db4a52e3d831f2ab068b23b149879c002f6bf3feee97591112562c":char*:"6c075bc45520f165c0bf5ea4c5df191bc9ef0e44":hex:"0a98bf1093619394436cf68d8f38e2f158fde8ea54f3435f239b8d06b8321844202476aeed96009492480ce3a8d705498c4c8c68f01501dc81db608f60087350c8c3b0bd2e9ef6a81458b7c801b89f2e4fe99d4900ba6a4b5e5a96d865dc676c7755928794130d6280a8160a190f2df3ea7cf9aa0271d88e9e6905ecf1c5152d65":int:0 + +RSAES-OAEP Decryption Example 6_4 +1:int:1029:int:16:char*:"04a6ce8b7358dfa69bdcf742617005afb5385f5f3a58a24ef74a22a8c05cb7cc38ebd4cc9d9a9d789a62cd0f60f0cb941d3423c9692efa4fe3adff290c4749a38b":int:16:char*:"0404c9a803371fedb4c5be39f3c00b009e5e08a63be1e40035cdaca5011cc701cf7eebcb99f0ffe17cfd0a4bf7befd2dd536ac946db797fdbc4abe8f29349b91ed":int:16:char*:"12b17f6dad2ecd19ff46dc13f7860f09e0e0cfb677b38a52592305ceaf022c166db90d04ac29e33f7dd12d9faf66e0816bb63ead267cc7d46c17c37be214bca2a22d723a64e44407436b6fc965729aefc2554f376cd5dcea68293780a62bf39d0029485a160bbb9e5dc0972d21a504f52e5ee028aa416332f510b2e9cff5f722af":int:16:char*:"010001":exp:0:hex:"684e3038c5c041f7":char*:"3bbc3bd6637dfe12846901029bf5b0c07103439c":hex:"008e7a67cacfb5c4e24bec7dee149117f19598ce8c45808fef88c608ff9cd6e695263b9a3c0ad4b8ba4c95238e96a8422b8535629c8d5382374479ad13fa39974b242f9a759eeaf9c83ad5a8ca18940a0162ba755876df263f4bd50c6525c56090267c1f0e09ce0899a0cf359e88120abd9bf893445b3cae77d3607359ae9a52f8":int:0 + +RSAES-OAEP Decryption Example 6_5 +1:int:1029:int:16:char*:"04a6ce8b7358dfa69bdcf742617005afb5385f5f3a58a24ef74a22a8c05cb7cc38ebd4cc9d9a9d789a62cd0f60f0cb941d3423c9692efa4fe3adff290c4749a38b":int:16:char*:"0404c9a803371fedb4c5be39f3c00b009e5e08a63be1e40035cdaca5011cc701cf7eebcb99f0ffe17cfd0a4bf7befd2dd536ac946db797fdbc4abe8f29349b91ed":int:16:char*:"12b17f6dad2ecd19ff46dc13f7860f09e0e0cfb677b38a52592305ceaf022c166db90d04ac29e33f7dd12d9faf66e0816bb63ead267cc7d46c17c37be214bca2a22d723a64e44407436b6fc965729aefc2554f376cd5dcea68293780a62bf39d0029485a160bbb9e5dc0972d21a504f52e5ee028aa416332f510b2e9cff5f722af":int:16:char*:"010001":exp:0:hex:"32488cb262d041d6e4dd35f987bf3ca696db1f06ac29a44693":char*:"b46b41893e8bef326f6759383a83071dae7fcabc":hex:"00003474416c7b68bdf961c385737944d7f1f40cb395343c693cc0b4fe63b31fedf1eaeeac9ccc0678b31dc32e0977489514c4f09085f6298a9653f01aea4045ff582ee887be26ae575b73eef7f3774921e375a3d19adda0ca31aa1849887c1f42cac9677f7a2f4e923f6e5a868b38c084ef187594dc9f7f048fea2e02955384ab":int:0 + +RSAES-OAEP Decryption Example 6_6 +1:int:1029:int:16:char*:"04a6ce8b7358dfa69bdcf742617005afb5385f5f3a58a24ef74a22a8c05cb7cc38ebd4cc9d9a9d789a62cd0f60f0cb941d3423c9692efa4fe3adff290c4749a38b":int:16:char*:"0404c9a803371fedb4c5be39f3c00b009e5e08a63be1e40035cdaca5011cc701cf7eebcb99f0ffe17cfd0a4bf7befd2dd536ac946db797fdbc4abe8f29349b91ed":int:16:char*:"12b17f6dad2ecd19ff46dc13f7860f09e0e0cfb677b38a52592305ceaf022c166db90d04ac29e33f7dd12d9faf66e0816bb63ead267cc7d46c17c37be214bca2a22d723a64e44407436b6fc965729aefc2554f376cd5dcea68293780a62bf39d0029485a160bbb9e5dc0972d21a504f52e5ee028aa416332f510b2e9cff5f722af":int:16:char*:"010001":exp:0:hex:"50ba14be8462720279c306ba":char*:"0a2403312a41e3d52f060fbc13a67de5cf7609a7":hex:"0a026dda5fc8785f7bd9bf75327b63e85e2c0fdee5dadb65ebdcac9ae1de95c92c672ab433aa7a8e69ce6a6d8897fac4ac4a54de841ae5e5bbce7687879d79634cea7a30684065c714d52409b928256bbf53eabcd5231eb7259504537399bd29164b726d33a46da701360a4168a091ccab72d44a62fed246c0ffea5b1348ab5470":int:0 + +RSAES-OAEP Decryption Example 7_1 +1:int:1030:int:16:char*:"0749262c111cd470ec2566e6b3732fc09329469aa19071d3b9c01906514c6f1d26baa14beab0971c8b7e611a4f79009d6fea776928ca25285b0de3643d1a3f8c71":int:16:char*:"06bc1e50e96c02bf636e9eea8b899bbebf7651de77dd474c3e9bc23bad8182b61904c7d97dfbebfb1e00108878b6e67e415391d67942c2b2bf9b4435f88b0cb023":int:16:char*:"311179f0bcfc9b9d3ca315d00ef30d7bdd3a2cfae9911bfedcb948b3a4782d0732b6ab44aa4bf03741a644dc01bec3e69b01a033e675d8acd7c4925c6b1aec3119051dfd89762d215d45475ffcb59f908148623f37177156f6ae86dd7a7c5f43dc1e1f908254058a284a5f06c0021793a87f1ac5feff7dcaee69c5e51a3789e373":int:16:char*:"010001":exp:0:hex:"47aae909":char*:"43dd09a07ff4cac71caa4632ee5e1c1daee4cd8f":hex:"1688e4ce7794bba6cb7014169ecd559cede2a30b56a52b68d9fe18cf1973ef97b2a03153951c755f6294aa49adbdb55845ab6875fb3986c93ecf927962840d282f9e54ce8b690f7c0cb8bbd73440d9571d1b16cd9260f9eab4783cc482e5223dc60973871783ec27b0ae0fd47732cbc286a173fc92b00fb4ba6824647cd93c85c1":int:0 + +RSAES-OAEP Decryption Example 7_2 +1:int:1030:int:16:char*:"0749262c111cd470ec2566e6b3732fc09329469aa19071d3b9c01906514c6f1d26baa14beab0971c8b7e611a4f79009d6fea776928ca25285b0de3643d1a3f8c71":int:16:char*:"06bc1e50e96c02bf636e9eea8b899bbebf7651de77dd474c3e9bc23bad8182b61904c7d97dfbebfb1e00108878b6e67e415391d67942c2b2bf9b4435f88b0cb023":int:16:char*:"311179f0bcfc9b9d3ca315d00ef30d7bdd3a2cfae9911bfedcb948b3a4782d0732b6ab44aa4bf03741a644dc01bec3e69b01a033e675d8acd7c4925c6b1aec3119051dfd89762d215d45475ffcb59f908148623f37177156f6ae86dd7a7c5f43dc1e1f908254058a284a5f06c0021793a87f1ac5feff7dcaee69c5e51a3789e373":int:16:char*:"010001":exp:0:hex:"1d9b2e2223d9bc13bfb9f162ce735db48ba7c68f6822a0a1a7b6ae165834e7":char*:"3a9c3cec7b84f9bd3adecbc673ec99d54b22bc9b":hex:"1052ed397b2e01e1d0ee1c50bf24363f95e504f4a03434a08fd822574ed6b9736edbb5f390db10321479a8a139350e2bd4977c3778ef331f3e78ae118b268451f20a2f01d471f5d53c566937171b2dbc2d4bde459a5799f0372d6574239b2323d245d0bb81c286b63c89a361017337e4902f88a467f4c7f244bfd5ab46437ff3b6":int:0 + +RSAES-OAEP Decryption Example 7_3 +1:int:1030:int:16:char*:"0749262c111cd470ec2566e6b3732fc09329469aa19071d3b9c01906514c6f1d26baa14beab0971c8b7e611a4f79009d6fea776928ca25285b0de3643d1a3f8c71":int:16:char*:"06bc1e50e96c02bf636e9eea8b899bbebf7651de77dd474c3e9bc23bad8182b61904c7d97dfbebfb1e00108878b6e67e415391d67942c2b2bf9b4435f88b0cb023":int:16:char*:"311179f0bcfc9b9d3ca315d00ef30d7bdd3a2cfae9911bfedcb948b3a4782d0732b6ab44aa4bf03741a644dc01bec3e69b01a033e675d8acd7c4925c6b1aec3119051dfd89762d215d45475ffcb59f908148623f37177156f6ae86dd7a7c5f43dc1e1f908254058a284a5f06c0021793a87f1ac5feff7dcaee69c5e51a3789e373":int:16:char*:"010001":exp:0:hex:"d976fc":char*:"76a75e5b6157a556cf8884bb2e45c293dd545cf5":hex:"2155cd843ff24a4ee8badb7694260028a490813ba8b369a4cbf106ec148e5298707f5965be7d101c1049ea8584c24cd63455ad9c104d686282d3fb803a4c11c1c2e9b91c7178801d1b6640f003f5728df007b8a4ccc92bce05e41a27278d7c85018c52414313a5077789001d4f01910b72aad05d220aa14a58733a7489bc54556b":int:0 + +RSAES-OAEP Decryption Example 7_4 +1:int:1030:int:16:char*:"0749262c111cd470ec2566e6b3732fc09329469aa19071d3b9c01906514c6f1d26baa14beab0971c8b7e611a4f79009d6fea776928ca25285b0de3643d1a3f8c71":int:16:char*:"06bc1e50e96c02bf636e9eea8b899bbebf7651de77dd474c3e9bc23bad8182b61904c7d97dfbebfb1e00108878b6e67e415391d67942c2b2bf9b4435f88b0cb023":int:16:char*:"311179f0bcfc9b9d3ca315d00ef30d7bdd3a2cfae9911bfedcb948b3a4782d0732b6ab44aa4bf03741a644dc01bec3e69b01a033e675d8acd7c4925c6b1aec3119051dfd89762d215d45475ffcb59f908148623f37177156f6ae86dd7a7c5f43dc1e1f908254058a284a5f06c0021793a87f1ac5feff7dcaee69c5e51a3789e373":int:16:char*:"010001":exp:0:hex:"d4738623df223aa43843df8467534c41d013e0c803c624e263666b239bde40a5f29aeb8de79e3daa61dd0370f49bd4b013834b98212aef6b1c5ee373b3cb":char*:"7866314a6ad6f2b250a35941db28f5864b585859":hex:"0ab14c373aeb7d4328d0aaad8c094d88b9eb098b95f21054a29082522be7c27a312878b637917e3d819e6c3c568db5d843802b06d51d9e98a2be0bf40c031423b00edfbff8320efb9171bd2044653a4cb9c5122f6c65e83cda2ec3c126027a9c1a56ba874d0fea23f380b82cf240b8cf540004758c4c77d934157a74f3fc12bfac":int:0 + +RSAES-OAEP Decryption Example 7_5 +1:int:1030:int:16:char*:"0749262c111cd470ec2566e6b3732fc09329469aa19071d3b9c01906514c6f1d26baa14beab0971c8b7e611a4f79009d6fea776928ca25285b0de3643d1a3f8c71":int:16:char*:"06bc1e50e96c02bf636e9eea8b899bbebf7651de77dd474c3e9bc23bad8182b61904c7d97dfbebfb1e00108878b6e67e415391d67942c2b2bf9b4435f88b0cb023":int:16:char*:"311179f0bcfc9b9d3ca315d00ef30d7bdd3a2cfae9911bfedcb948b3a4782d0732b6ab44aa4bf03741a644dc01bec3e69b01a033e675d8acd7c4925c6b1aec3119051dfd89762d215d45475ffcb59f908148623f37177156f6ae86dd7a7c5f43dc1e1f908254058a284a5f06c0021793a87f1ac5feff7dcaee69c5e51a3789e373":int:16:char*:"010001":exp:0:hex:"bb47231ca5ea1d3ad46c99345d9a8a61":char*:"b2166ed472d58db10cab2c6b000cccf10a7dc509":hex:"028387a318277434798b4d97f460068df5298faba5041ba11761a1cb7316b24184114ec500257e2589ed3b607a1ebbe97a6cc2e02bf1b681f42312a33b7a77d8e7855c4a6de03e3c04643f786b91a264a0d6805e2cea91e68177eb7a64d9255e4f27e713b7ccec00dc200ebd21c2ea2bb890feae4942df941dc3f97890ed347478":int:0 + +RSAES-OAEP Decryption Example 7_6 +1:int:1030:int:16:char*:"0749262c111cd470ec2566e6b3732fc09329469aa19071d3b9c01906514c6f1d26baa14beab0971c8b7e611a4f79009d6fea776928ca25285b0de3643d1a3f8c71":int:16:char*:"06bc1e50e96c02bf636e9eea8b899bbebf7651de77dd474c3e9bc23bad8182b61904c7d97dfbebfb1e00108878b6e67e415391d67942c2b2bf9b4435f88b0cb023":int:16:char*:"311179f0bcfc9b9d3ca315d00ef30d7bdd3a2cfae9911bfedcb948b3a4782d0732b6ab44aa4bf03741a644dc01bec3e69b01a033e675d8acd7c4925c6b1aec3119051dfd89762d215d45475ffcb59f908148623f37177156f6ae86dd7a7c5f43dc1e1f908254058a284a5f06c0021793a87f1ac5feff7dcaee69c5e51a3789e373":int:16:char*:"010001":exp:0:hex:"2184827095d35c3f86f600e8e59754013296":char*:"52673bde2ca166c2aa46131ac1dc808d67d7d3b1":hex:"14c678a94ad60525ef39e959b2f3ba5c097a94ff912b67dbace80535c187abd47d075420b1872152bba08f7fc31f313bbf9273c912fc4c0149a9b0cfb79807e346eb332069611bec0ff9bcd168f1f7c33e77313cea454b94e2549eecf002e2acf7f6f2d2845d4fe0aab2e5a92ddf68c480ae11247935d1f62574842216ae674115":int:0 + +RSAES-OAEP Decryption Example 8_1 +1:int:1031:int:16:char*:"0a02ef8448d9fad8bbd0d004c8c2aa9751ef9721c1b0d03236a54b0df947cbaed5a255ee9e8e20d491ea1723fe094704a9762e88afd16ebb5994412ca966dc4f9f":int:16:char*:"092d362e7ed3a0bfd9e9fd0e6c0301b6df29159cf50cc83b9b0cf4d6eea71a61e002b46e0ae9f2de62d25b5d7452d498b81c9ac6fc58593d4c3fb4f5d72dfbb0a9":int:16:char*:"5bdf0e30d321dda5147f882408fa69195480df8f80d3f6e8bf5818504f36427ca9b1f5540b9c65a8f6974cf8447a244d9280201bb49fcbbe6378d1944cd227e230f96e3d10f819dcef276c64a00b2a4b6701e7d01de5fabde3b1e9a0df82f4631359cd22669647fbb1717246134ed7b497cfffbdc42b59c73a96ed90166212dff7":int:16:char*:"010001":exp:0:hex:"050b755e5e6880f7b9e9d692a74c37aae449b31bfea6deff83747a897f6c2c825bb1adbf850a3c96994b5de5b33cbc7d4a17913a7967":char*:"7706ffca1ecfb1ebee2a55e5c6e24cd2797a4125":hex:"09b3683d8a2eb0fb295b62ed1fb9290b714457b7825319f4647872af889b30409472020ad12912bf19b11d4819f49614824ffd84d09c0a17e7d17309d12919790410aa2995699f6a86dbe3242b5acc23af45691080d6b1ae810fb3e3057087f0970092ce00be9562ff4053b6262ce0caa93e13723d2e3a5ba075d45f0d61b54b61":int:0 + +RSAES-OAEP Decryption Example 8_2 +1:int:1031:int:16:char*:"0a02ef8448d9fad8bbd0d004c8c2aa9751ef9721c1b0d03236a54b0df947cbaed5a255ee9e8e20d491ea1723fe094704a9762e88afd16ebb5994412ca966dc4f9f":int:16:char*:"092d362e7ed3a0bfd9e9fd0e6c0301b6df29159cf50cc83b9b0cf4d6eea71a61e002b46e0ae9f2de62d25b5d7452d498b81c9ac6fc58593d4c3fb4f5d72dfbb0a9":int:16:char*:"5bdf0e30d321dda5147f882408fa69195480df8f80d3f6e8bf5818504f36427ca9b1f5540b9c65a8f6974cf8447a244d9280201bb49fcbbe6378d1944cd227e230f96e3d10f819dcef276c64a00b2a4b6701e7d01de5fabde3b1e9a0df82f4631359cd22669647fbb1717246134ed7b497cfffbdc42b59c73a96ed90166212dff7":int:16:char*:"010001":exp:0:hex:"4eb68dcd93ca9b19df111bd43608f557026fe4aa1d5cfac227a3eb5ab9548c18a06dded23f81825986b2fcd71109ecef7eff88873f075c2aa0c469f69c92bc":char*:"a3717da143b4dcffbc742665a8fa950585548343":hex:"2ecf15c97c5a15b1476ae986b371b57a24284f4a162a8d0c8182e7905e792256f1812ba5f83f1f7a130e42dcc02232844edc14a31a68ee97ae564a383a3411656424c5f62ddb646093c367be1fcda426cf00a06d8acb7e57776fbbd855ac3df506fc16b1d7c3f2110f3d8068e91e186363831c8409680d8da9ecd8cf1fa20ee39d":int:0 + +RSAES-OAEP Decryption Example 8_3 +1:int:1031:int:16:char*:"0a02ef8448d9fad8bbd0d004c8c2aa9751ef9721c1b0d03236a54b0df947cbaed5a255ee9e8e20d491ea1723fe094704a9762e88afd16ebb5994412ca966dc4f9f":int:16:char*:"092d362e7ed3a0bfd9e9fd0e6c0301b6df29159cf50cc83b9b0cf4d6eea71a61e002b46e0ae9f2de62d25b5d7452d498b81c9ac6fc58593d4c3fb4f5d72dfbb0a9":int:16:char*:"5bdf0e30d321dda5147f882408fa69195480df8f80d3f6e8bf5818504f36427ca9b1f5540b9c65a8f6974cf8447a244d9280201bb49fcbbe6378d1944cd227e230f96e3d10f819dcef276c64a00b2a4b6701e7d01de5fabde3b1e9a0df82f4631359cd22669647fbb1717246134ed7b497cfffbdc42b59c73a96ed90166212dff7":int:16:char*:"010001":exp:0:hex:"8604ac56328c1ab5ad917861":char*:"ee06209073cca026bb264e5185bf8c68b7739f86":hex:"4bc89130a5b2dabb7c2fcf90eb5d0eaf9e681b7146a38f3173a3d9cfec52ea9e0a41932e648a9d69344c50da763f51a03c95762131e8052254dcd2248cba40fd31667786ce05a2b7b531ac9dac9ed584a59b677c1a8aed8c5d15d68c05569e2be780bf7db638fd2bfd2a85ab276860f3777338fca989ffd743d13ee08e0ca9893f":int:0 + +RSAES-OAEP Decryption Example 8_4 +1:int:1031:int:16:char*:"0a02ef8448d9fad8bbd0d004c8c2aa9751ef9721c1b0d03236a54b0df947cbaed5a255ee9e8e20d491ea1723fe094704a9762e88afd16ebb5994412ca966dc4f9f":int:16:char*:"092d362e7ed3a0bfd9e9fd0e6c0301b6df29159cf50cc83b9b0cf4d6eea71a61e002b46e0ae9f2de62d25b5d7452d498b81c9ac6fc58593d4c3fb4f5d72dfbb0a9":int:16:char*:"5bdf0e30d321dda5147f882408fa69195480df8f80d3f6e8bf5818504f36427ca9b1f5540b9c65a8f6974cf8447a244d9280201bb49fcbbe6378d1944cd227e230f96e3d10f819dcef276c64a00b2a4b6701e7d01de5fabde3b1e9a0df82f4631359cd22669647fbb1717246134ed7b497cfffbdc42b59c73a96ed90166212dff7":int:16:char*:"010001":exp:0:hex:"fdda5fbf6ec361a9d9a4ac68af216a0686f438b1e0e5c36b955f74e107f39c0dddcc":char*:"990ad573dc48a973235b6d82543618f2e955105d":hex:"2e456847d8fc36ff0147d6993594b9397227d577752c79d0f904fcb039d4d812fea605a7b574dd82ca786f93752348438ee9f5b5454985d5f0e1699e3e7ad175a32e15f03deb042ab9fe1dd9db1bb86f8c089ccb45e7ef0c5ee7ca9b7290ca6b15bed47039788a8a93ff83e0e8d6244c71006362deef69b6f416fb3c684383fbd0":int:0 + +RSAES-OAEP Decryption Example 8_5 +1:int:1031:int:16:char*:"0a02ef8448d9fad8bbd0d004c8c2aa9751ef9721c1b0d03236a54b0df947cbaed5a255ee9e8e20d491ea1723fe094704a9762e88afd16ebb5994412ca966dc4f9f":int:16:char*:"092d362e7ed3a0bfd9e9fd0e6c0301b6df29159cf50cc83b9b0cf4d6eea71a61e002b46e0ae9f2de62d25b5d7452d498b81c9ac6fc58593d4c3fb4f5d72dfbb0a9":int:16:char*:"5bdf0e30d321dda5147f882408fa69195480df8f80d3f6e8bf5818504f36427ca9b1f5540b9c65a8f6974cf8447a244d9280201bb49fcbbe6378d1944cd227e230f96e3d10f819dcef276c64a00b2a4b6701e7d01de5fabde3b1e9a0df82f4631359cd22669647fbb1717246134ed7b497cfffbdc42b59c73a96ed90166212dff7":int:16:char*:"010001":exp:0:hex:"4a5f4914bee25de3c69341de07":char*:"ecc63b28f0756f22f52ac8e6ec1251a6ec304718":hex:"1fb9356fd5c4b1796db2ebf7d0d393cc810adf6145defc2fce714f79d93800d5e2ac211ea8bbecca4b654b94c3b18b30dd576ce34dc95436ef57a09415645923359a5d7b4171ef22c24670f1b229d3603e91f76671b7df97e7317c97734476d5f3d17d21cf82b5ba9f83df2e588d36984fd1b584468bd23b2e875f32f68953f7b2":int:0 + +RSAES-OAEP Decryption Example 8_6 +1:int:1031:int:16:char*:"0a02ef8448d9fad8bbd0d004c8c2aa9751ef9721c1b0d03236a54b0df947cbaed5a255ee9e8e20d491ea1723fe094704a9762e88afd16ebb5994412ca966dc4f9f":int:16:char*:"092d362e7ed3a0bfd9e9fd0e6c0301b6df29159cf50cc83b9b0cf4d6eea71a61e002b46e0ae9f2de62d25b5d7452d498b81c9ac6fc58593d4c3fb4f5d72dfbb0a9":int:16:char*:"5bdf0e30d321dda5147f882408fa69195480df8f80d3f6e8bf5818504f36427ca9b1f5540b9c65a8f6974cf8447a244d9280201bb49fcbbe6378d1944cd227e230f96e3d10f819dcef276c64a00b2a4b6701e7d01de5fabde3b1e9a0df82f4631359cd22669647fbb1717246134ed7b497cfffbdc42b59c73a96ed90166212dff7":int:16:char*:"010001":exp:0:hex:"8e07d66f7b880a72563abcd3f35092bc33409fb7f88f2472be":char*:"3925c71b362d40a0a6de42145579ba1e7dd459fc":hex:"3afd9c6600147b21798d818c655a0f4c9212db26d0b0dfdc2a7594ccb3d22f5bf1d7c3e112cd73fc7d509c7a8bafdd3c274d1399009f9609ec4be6477e453f075aa33db382870c1c3409aef392d7386ae3a696b99a94b4da0589447e955d16c98b17602a59bd736279fcd8fb280c4462d590bfa9bf13fed570eafde97330a2c210":int:0 + +RSAES-OAEP Decryption Example 9_1 +1:int:1536:int:16:char*:"fc8d6c04bec4eb9a8192ca7900cbe536e2e8b519decf33b2459798c6909df4f176db7d23190fc72b8865a718af895f1bcd9145298027423b605e70a47cf58390a8c3e88fc8c48e8b32e3da210dfbe3e881ea5674b6a348c21e93f9e55ea65efd":int:16:char*:"d200d45e788aacea606a401d0460f87dd5c1027e12dc1a0d7586e8939d9cf789b40f51ac0442961de7d21cc21e05c83155c1f2aa9193387cfdf956cb48d153ba270406f9bbba537d4987d9e2f9942d7a14cbfffea74fecdda928d23e259f5ee1":int:16:char*:"cf2cd41e34ca3a728ea5cb8aff64c36d27bdef5364e336fd68d3123c5a196a8c287013e853d5156d58d151954520fb4f6d7b17abb6817765909c576119659d902b1906ed8a2b10c155c24d124528dab9eeae379beac66e4a411786dcb8fd0062ebc030de1219a04c2a8c1b7dd3131e4d6b6caee2e31a5ed41ac1509b2ef1ee2ab18364be568ca941c25ecc84ff9d643b5ec1aaae102a20d73f479b780fd6da91075212d9eac03a0674d899eba2e431f4c44b615b6ba2232bd4b33baed73d625d":int:16:char*:"010001":exp:0:hex:"f735fd55ba92592c3b52b8f9c4f69aaa1cbef8fe88add095595412467f9cf4ec0b896c59eda16210e7549c8abb10cdbc21a12ec9b6b5b8fd2f10399eb6":char*:"8ec965f134a3ec9931e92a1ca0dc8169d5ea705c":hex:"267bcd118acab1fc8ba81c85d73003cb8610fa55c1d97da8d48a7c7f06896a4db751aa284255b9d36ad65f37653d829f1b37f97b8001942545b2fc2c55a7376ca7a1be4b1760c8e05a33e5aa2526b8d98e317088e7834c755b2a59b12631a182c05d5d43ab1779264f8456f515ce57dfdf512d5493dab7b7338dc4b7d78db9c091ac3baf537a69fc7f549d979f0eff9a94fda4169bd4d1d19a69c99e33c3b55490d501b39b1edae118ff6793a153261584d3a5f39f6e682e3d17c8cd1261fa72":int:0 + +RSAES-OAEP Decryption Example 9_2 +1:int:1536:int:16:char*:"fc8d6c04bec4eb9a8192ca7900cbe536e2e8b519decf33b2459798c6909df4f176db7d23190fc72b8865a718af895f1bcd9145298027423b605e70a47cf58390a8c3e88fc8c48e8b32e3da210dfbe3e881ea5674b6a348c21e93f9e55ea65efd":int:16:char*:"d200d45e788aacea606a401d0460f87dd5c1027e12dc1a0d7586e8939d9cf789b40f51ac0442961de7d21cc21e05c83155c1f2aa9193387cfdf956cb48d153ba270406f9bbba537d4987d9e2f9942d7a14cbfffea74fecdda928d23e259f5ee1":int:16:char*:"cf2cd41e34ca3a728ea5cb8aff64c36d27bdef5364e336fd68d3123c5a196a8c287013e853d5156d58d151954520fb4f6d7b17abb6817765909c576119659d902b1906ed8a2b10c155c24d124528dab9eeae379beac66e4a411786dcb8fd0062ebc030de1219a04c2a8c1b7dd3131e4d6b6caee2e31a5ed41ac1509b2ef1ee2ab18364be568ca941c25ecc84ff9d643b5ec1aaae102a20d73f479b780fd6da91075212d9eac03a0674d899eba2e431f4c44b615b6ba2232bd4b33baed73d625d":int:16:char*:"010001":exp:0:hex:"81b906605015a63aabe42ddf11e1978912f5404c7474b26dce3ed482bf961ecc818bf420c54659":char*:"ecb1b8b25fa50cdab08e56042867f4af5826d16c":hex:"93ac9f0671ec29acbb444effc1a5741351d60fdb0e393fbf754acf0de49761a14841df7772e9bc82773966a1584c4d72baea00118f83f35cca6e537cbd4d811f5583b29783d8a6d94cd31be70d6f526c10ff09c6fa7ce069795a3fcd0511fd5fcb564bcc80ea9c78f38b80012539d8a4ddf6fe81e9cddb7f50dbbbbcc7e5d86097ccf4ec49189fb8bf318be6d5a0715d516b49af191258cd32dc833ce6eb4673c03a19bbace88cc54895f636cc0c1ec89096d11ce235a265ca1764232a689ae8":int:0 + +RSAES-OAEP Decryption Example 9_3 +1:int:1536:int:16:char*:"fc8d6c04bec4eb9a8192ca7900cbe536e2e8b519decf33b2459798c6909df4f176db7d23190fc72b8865a718af895f1bcd9145298027423b605e70a47cf58390a8c3e88fc8c48e8b32e3da210dfbe3e881ea5674b6a348c21e93f9e55ea65efd":int:16:char*:"d200d45e788aacea606a401d0460f87dd5c1027e12dc1a0d7586e8939d9cf789b40f51ac0442961de7d21cc21e05c83155c1f2aa9193387cfdf956cb48d153ba270406f9bbba537d4987d9e2f9942d7a14cbfffea74fecdda928d23e259f5ee1":int:16:char*:"cf2cd41e34ca3a728ea5cb8aff64c36d27bdef5364e336fd68d3123c5a196a8c287013e853d5156d58d151954520fb4f6d7b17abb6817765909c576119659d902b1906ed8a2b10c155c24d124528dab9eeae379beac66e4a411786dcb8fd0062ebc030de1219a04c2a8c1b7dd3131e4d6b6caee2e31a5ed41ac1509b2ef1ee2ab18364be568ca941c25ecc84ff9d643b5ec1aaae102a20d73f479b780fd6da91075212d9eac03a0674d899eba2e431f4c44b615b6ba2232bd4b33baed73d625d":int:16:char*:"010001":exp:0:hex:"fd326429df9b890e09b54b18b8f34f1e24":char*:"e89bb032c6ce622cbdb53bc9466014ea77f777c0":hex:"81ebdd95054b0c822ef9ad7693f5a87adfb4b4c4ce70df2df84ed49c04da58ba5fc20a19e1a6e8b7a3900b22796dc4e869ee6b42792d15a8eceb56c09c69914e813cea8f6931e4b8ed6f421af298d595c97f4789c7caa612c7ef360984c21b93edc5401068b5af4c78a8771b984d53b8ea8adf2f6a7d4a0ba76c75e1dd9f658f20ded4a46071d46d7791b56803d8fea7f0b0f8e41ae3f09383a6f9585fe7753eaaffd2bf94563108beecc207bbb535f5fcc705f0dde9f708c62f49a9c90371d3":int:0 + +RSAES-OAEP Decryption Example 9_4 +1:int:1536:int:16:char*:"fc8d6c04bec4eb9a8192ca7900cbe536e2e8b519decf33b2459798c6909df4f176db7d23190fc72b8865a718af895f1bcd9145298027423b605e70a47cf58390a8c3e88fc8c48e8b32e3da210dfbe3e881ea5674b6a348c21e93f9e55ea65efd":int:16:char*:"d200d45e788aacea606a401d0460f87dd5c1027e12dc1a0d7586e8939d9cf789b40f51ac0442961de7d21cc21e05c83155c1f2aa9193387cfdf956cb48d153ba270406f9bbba537d4987d9e2f9942d7a14cbfffea74fecdda928d23e259f5ee1":int:16:char*:"cf2cd41e34ca3a728ea5cb8aff64c36d27bdef5364e336fd68d3123c5a196a8c287013e853d5156d58d151954520fb4f6d7b17abb6817765909c576119659d902b1906ed8a2b10c155c24d124528dab9eeae379beac66e4a411786dcb8fd0062ebc030de1219a04c2a8c1b7dd3131e4d6b6caee2e31a5ed41ac1509b2ef1ee2ab18364be568ca941c25ecc84ff9d643b5ec1aaae102a20d73f479b780fd6da91075212d9eac03a0674d899eba2e431f4c44b615b6ba2232bd4b33baed73d625d":int:16:char*:"010001":exp:0:hex:"f1459b5f0c92f01a0f723a2e5662484d8f8c0a20fc29dad6acd43bb5f3effdf4e1b63e07fdfe6628d0d74ca19bf2d69e4a0abf86d293925a796772f8088e":char*:"606f3b99c0b9ccd771eaa29ea0e4c884f3189ccc":hex:"bcc35f94cde66cb1136625d625b94432a35b22f3d2fa11a613ff0fca5bd57f87b902ccdc1cd0aebcb0715ee869d1d1fe395f6793003f5eca465059c88660d446ff5f0818552022557e38c08a67ead991262254f10682975ec56397768537f4977af6d5f6aaceb7fb25dec5937230231fd8978af49119a29f29e424ab8272b47562792d5c94f774b8829d0b0d9f1a8c9eddf37574d5fa248eefa9c5271fc5ec2579c81bdd61b410fa61fe36e424221c113addb275664c801d34ca8c6351e4a858":int:0 + +RSAES-OAEP Decryption Example 9_5 +1:int:1536:int:16:char*:"fc8d6c04bec4eb9a8192ca7900cbe536e2e8b519decf33b2459798c6909df4f176db7d23190fc72b8865a718af895f1bcd9145298027423b605e70a47cf58390a8c3e88fc8c48e8b32e3da210dfbe3e881ea5674b6a348c21e93f9e55ea65efd":int:16:char*:"d200d45e788aacea606a401d0460f87dd5c1027e12dc1a0d7586e8939d9cf789b40f51ac0442961de7d21cc21e05c83155c1f2aa9193387cfdf956cb48d153ba270406f9bbba537d4987d9e2f9942d7a14cbfffea74fecdda928d23e259f5ee1":int:16:char*:"cf2cd41e34ca3a728ea5cb8aff64c36d27bdef5364e336fd68d3123c5a196a8c287013e853d5156d58d151954520fb4f6d7b17abb6817765909c576119659d902b1906ed8a2b10c155c24d124528dab9eeae379beac66e4a411786dcb8fd0062ebc030de1219a04c2a8c1b7dd3131e4d6b6caee2e31a5ed41ac1509b2ef1ee2ab18364be568ca941c25ecc84ff9d643b5ec1aaae102a20d73f479b780fd6da91075212d9eac03a0674d899eba2e431f4c44b615b6ba2232bd4b33baed73d625d":int:16:char*:"010001":exp:0:hex:"53e6e8c729d6f9c319dd317e74b0db8e4ccca25f3c8305746e137ac63a63ef3739e7b595abb96e8d55e54f7bd41ab433378ffb911d":char*:"fcbc421402e9ecabc6082afa40ba5f26522c840e":hex:"232afbc927fa08c2f6a27b87d4a5cb09c07dc26fae73d73a90558839f4fd66d281b87ec734bce237ba166698ed829106a7de6942cd6cdce78fed8d2e4d81428e66490d036264cef92af941d3e35055fe3981e14d29cbb9a4f67473063baec79a1179f5a17c9c1832f2838fd7d5e59bb9659d56dce8a019edef1bb3accc697cc6cc7a778f60a064c7f6f5d529c6210262e003de583e81e3167b89971fb8c0e15d44fffef89b53d8d64dd797d159b56d2b08ea5307ea12c241bd58d4ee278a1f2e":int:0 + +RSAES-OAEP Decryption Example 9_6 +1:int:1536:int:16:char*:"fc8d6c04bec4eb9a8192ca7900cbe536e2e8b519decf33b2459798c6909df4f176db7d23190fc72b8865a718af895f1bcd9145298027423b605e70a47cf58390a8c3e88fc8c48e8b32e3da210dfbe3e881ea5674b6a348c21e93f9e55ea65efd":int:16:char*:"d200d45e788aacea606a401d0460f87dd5c1027e12dc1a0d7586e8939d9cf789b40f51ac0442961de7d21cc21e05c83155c1f2aa9193387cfdf956cb48d153ba270406f9bbba537d4987d9e2f9942d7a14cbfffea74fecdda928d23e259f5ee1":int:16:char*:"cf2cd41e34ca3a728ea5cb8aff64c36d27bdef5364e336fd68d3123c5a196a8c287013e853d5156d58d151954520fb4f6d7b17abb6817765909c576119659d902b1906ed8a2b10c155c24d124528dab9eeae379beac66e4a411786dcb8fd0062ebc030de1219a04c2a8c1b7dd3131e4d6b6caee2e31a5ed41ac1509b2ef1ee2ab18364be568ca941c25ecc84ff9d643b5ec1aaae102a20d73f479b780fd6da91075212d9eac03a0674d899eba2e431f4c44b615b6ba2232bd4b33baed73d625d":int:16:char*:"010001":exp:0:hex:"b6b28ea2198d0c1008bc64":char*:"23aade0e1e08bb9b9a78d2302a52f9c21b2e1ba2":hex:"438cc7dc08a68da249e42505f8573ba60e2c2773d5b290f4cf9dff718e842081c383e67024a0f29594ea987b9d25e4b738f285970d195abb3a8c8054e3d79d6b9c9a8327ba596f1259e27126674766907d8d582ff3a8476154929adb1e6d1235b2ccb4ec8f663ba9cc670a92bebd853c8dbf69c6436d016f61add836e94732450434207f9fd4c43dec2a12a958efa01efe2669899b5e604c255c55fb7166de5589e369597bb09168c06dd5db177e06a1740eb2d5c82faeca6d92fcee9931ba9f":int:0 + +RSAES-OAEP Decryption Example 10_1 +1:int:2048:int:16:char*:"ecf5aecd1e5515fffacbd75a2816c6ebf49018cdfb4638e185d66a7396b6f8090f8018c7fd95cc34b857dc17f0cc6516bb1346ab4d582cadad7b4103352387b70338d084047c9d9539b6496204b3dd6ea442499207bec01f964287ff6336c3984658336846f56e46861881c10233d2176bf15a5e96ddc780bc868aa77d3ce769":int:16:char*:"bc46c464fc6ac4ca783b0eb08a3c841b772f7e9b2f28babd588ae885e1a0c61e4858a0fb25ac299990f35be85164c259ba1175cdd7192707135184992b6c29b746dd0d2cabe142835f7d148cc161524b4a09946d48b828473f1ce76b6cb6886c345c03e05f41d51b5c3a90a3f24073c7d74a4fe25d9cf21c75960f3fc3863183":int:16:char*:"ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb":int:16:char*:"010001":exp:0:hex:"8bba6bf82a6c0f86d5f1756e97956870b08953b06b4eb205bc1694ee":char*:"47e1ab7119fee56c95ee5eaad86f40d0aa63bd33":hex:"53ea5dc08cd260fb3b858567287fa91552c30b2febfba213f0ae87702d068d19bab07fe574523dfb42139d68c3c5afeee0bfe4cb7969cbf382b804d6e61396144e2d0e60741f8993c3014b58b9b1957a8babcd23af854f4c356fb1662aa72bfcc7e586559dc4280d160c126785a723ebeebeff71f11594440aaef87d10793a8774a239d4a04c87fe1467b9daf85208ec6c7255794a96cc29142f9a8bd418e3c1fd67344b0cd0829df3b2bec60253196293c6b34d3f75d32f213dd45c6273d505adf4cced1057cb758fc26aeefa441255ed4e64c199ee075e7f16646182fdb464739b68ab5daff0e63e9552016824f054bf4d3c8c90a97bb6b6553284eb429fcc":int:0 + +RSAES-OAEP Decryption Example 10_2 +1:int:2048:int:16:char*:"ecf5aecd1e5515fffacbd75a2816c6ebf49018cdfb4638e185d66a7396b6f8090f8018c7fd95cc34b857dc17f0cc6516bb1346ab4d582cadad7b4103352387b70338d084047c9d9539b6496204b3dd6ea442499207bec01f964287ff6336c3984658336846f56e46861881c10233d2176bf15a5e96ddc780bc868aa77d3ce769":int:16:char*:"bc46c464fc6ac4ca783b0eb08a3c841b772f7e9b2f28babd588ae885e1a0c61e4858a0fb25ac299990f35be85164c259ba1175cdd7192707135184992b6c29b746dd0d2cabe142835f7d148cc161524b4a09946d48b828473f1ce76b6cb6886c345c03e05f41d51b5c3a90a3f24073c7d74a4fe25d9cf21c75960f3fc3863183":int:16:char*:"ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb":int:16:char*:"010001":exp:0:hex:"e6ad181f053b58a904f2457510373e57":char*:"6d17f5b4c1ffac351d195bf7b09d09f09a4079cf":hex:"a2b1a430a9d657e2fa1c2bb5ed43ffb25c05a308fe9093c01031795f5874400110828ae58fb9b581ce9dddd3e549ae04a0985459bde6c626594e7b05dc4278b2a1465c1368408823c85e96dc66c3a30983c639664fc4569a37fe21e5a195b5776eed2df8d8d361af686e750229bbd663f161868a50615e0c337bec0ca35fec0bb19c36eb2e0bbcc0582fa1d93aacdb061063f59f2ce1ee43605e5d89eca183d2acdfe9f81011022ad3b43a3dd417dac94b4e11ea81b192966e966b182082e71964607b4f8002f36299844a11f2ae0faeac2eae70f8f4f98088acdcd0ac556e9fccc511521908fad26f04c64201450305778758b0538bf8b5bb144a828e629795":int:0 + +RSAES-OAEP Decryption Example 10_3 +1:int:2048:int:16:char*:"ecf5aecd1e5515fffacbd75a2816c6ebf49018cdfb4638e185d66a7396b6f8090f8018c7fd95cc34b857dc17f0cc6516bb1346ab4d582cadad7b4103352387b70338d084047c9d9539b6496204b3dd6ea442499207bec01f964287ff6336c3984658336846f56e46861881c10233d2176bf15a5e96ddc780bc868aa77d3ce769":int:16:char*:"bc46c464fc6ac4ca783b0eb08a3c841b772f7e9b2f28babd588ae885e1a0c61e4858a0fb25ac299990f35be85164c259ba1175cdd7192707135184992b6c29b746dd0d2cabe142835f7d148cc161524b4a09946d48b828473f1ce76b6cb6886c345c03e05f41d51b5c3a90a3f24073c7d74a4fe25d9cf21c75960f3fc3863183":int:16:char*:"ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb":int:16:char*:"010001":exp:0:hex:"510a2cf60e866fa2340553c94ea39fbc256311e83e94454b4124":char*:"385387514deccc7c740dd8cdf9daee49a1cbfd54":hex:"9886c3e6764a8b9a84e84148ebd8c3b1aa8050381a78f668714c16d9cfd2a6edc56979c535d9dee3b44b85c18be8928992371711472216d95dda98d2ee8347c9b14dffdff84aa48d25ac06f7d7e65398ac967b1ce90925f67dce049b7f812db0742997a74d44fe81dbe0e7a3feaf2e5c40af888d550ddbbe3bc20657a29543f8fc2913b9bd1a61b2ab2256ec409bbd7dc0d17717ea25c43f42ed27df8738bf4afc6766ff7aff0859555ee283920f4c8a63c4a7340cbafddc339ecdb4b0515002f96c932b5b79167af699c0ad3fccfdf0f44e85a70262bf2e18fe34b850589975e867ff969d48eabf212271546cdc05a69ecb526e52870c836f307bd798780ede":int:0 + +RSAES-OAEP Decryption Example 10_4 +1:int:2048:int:16:char*:"ecf5aecd1e5515fffacbd75a2816c6ebf49018cdfb4638e185d66a7396b6f8090f8018c7fd95cc34b857dc17f0cc6516bb1346ab4d582cadad7b4103352387b70338d084047c9d9539b6496204b3dd6ea442499207bec01f964287ff6336c3984658336846f56e46861881c10233d2176bf15a5e96ddc780bc868aa77d3ce769":int:16:char*:"bc46c464fc6ac4ca783b0eb08a3c841b772f7e9b2f28babd588ae885e1a0c61e4858a0fb25ac299990f35be85164c259ba1175cdd7192707135184992b6c29b746dd0d2cabe142835f7d148cc161524b4a09946d48b828473f1ce76b6cb6886c345c03e05f41d51b5c3a90a3f24073c7d74a4fe25d9cf21c75960f3fc3863183":int:16:char*:"ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb":int:16:char*:"010001":exp:0:hex:"bcdd190da3b7d300df9a06e22caae2a75f10c91ff667b7c16bde8b53064a2649a94045c9":char*:"5caca6a0f764161a9684f85d92b6e0ef37ca8b65":hex:"6318e9fb5c0d05e5307e1683436e903293ac4642358aaa223d7163013aba87e2dfda8e60c6860e29a1e92686163ea0b9175f329ca3b131a1edd3a77759a8b97bad6a4f8f4396f28cf6f39ca58112e48160d6e203daa5856f3aca5ffed577af499408e3dfd233e3e604dbe34a9c4c9082de65527cac6331d29dc80e0508a0fa7122e7f329f6cca5cfa34d4d1da417805457e008bec549e478ff9e12a763c477d15bbb78f5b69bd57830fc2c4ed686d79bc72a95d85f88134c6b0afe56a8ccfbc855828bb339bd17909cf1d70de3335ae07039093e606d655365de6550b872cd6de1d440ee031b61945f629ad8a353b0d40939e96a3c450d2a8d5eee9f678093c8":int:0 + +RSAES-OAEP Decryption Example 10_5 +1:int:2048:int:16:char*:"ecf5aecd1e5515fffacbd75a2816c6ebf49018cdfb4638e185d66a7396b6f8090f8018c7fd95cc34b857dc17f0cc6516bb1346ab4d582cadad7b4103352387b70338d084047c9d9539b6496204b3dd6ea442499207bec01f964287ff6336c3984658336846f56e46861881c10233d2176bf15a5e96ddc780bc868aa77d3ce769":int:16:char*:"bc46c464fc6ac4ca783b0eb08a3c841b772f7e9b2f28babd588ae885e1a0c61e4858a0fb25ac299990f35be85164c259ba1175cdd7192707135184992b6c29b746dd0d2cabe142835f7d148cc161524b4a09946d48b828473f1ce76b6cb6886c345c03e05f41d51b5c3a90a3f24073c7d74a4fe25d9cf21c75960f3fc3863183":int:16:char*:"ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb":int:16:char*:"010001":exp:0:hex:"a7dd6c7dc24b46f9dd5f1e91ada4c3b3df947e877232a9":char*:"95bca9e3859894b3dd869fa7ecd5bbc6401bf3e4":hex:"75290872ccfd4a4505660d651f56da6daa09ca1301d890632f6a992f3d565cee464afded40ed3b5be9356714ea5aa7655f4a1366c2f17c728f6f2c5a5d1f8e28429bc4e6f8f2cff8da8dc0e0a9808e45fd09ea2fa40cb2b6ce6ffff5c0e159d11b68d90a85f7b84e103b09e682666480c657505c0929259468a314786d74eab131573cf234bf57db7d9e66cc6748192e002dc0deea930585f0831fdcd9bc33d51f79ed2ffc16bcf4d59812fcebcaa3f9069b0e445686d644c25ccf63b456ee5fa6ffe96f19cdf751fed9eaf35957754dbf4bfea5216aa1844dc507cb2d080e722eba150308c2b5ff1193620f1766ecf4481bafb943bd292877f2136ca494aba0":int:0 + +RSAES-OAEP Decryption Example 10_6 +1:int:2048:int:16:char*:"ecf5aecd1e5515fffacbd75a2816c6ebf49018cdfb4638e185d66a7396b6f8090f8018c7fd95cc34b857dc17f0cc6516bb1346ab4d582cadad7b4103352387b70338d084047c9d9539b6496204b3dd6ea442499207bec01f964287ff6336c3984658336846f56e46861881c10233d2176bf15a5e96ddc780bc868aa77d3ce769":int:16:char*:"bc46c464fc6ac4ca783b0eb08a3c841b772f7e9b2f28babd588ae885e1a0c61e4858a0fb25ac299990f35be85164c259ba1175cdd7192707135184992b6c29b746dd0d2cabe142835f7d148cc161524b4a09946d48b828473f1ce76b6cb6886c345c03e05f41d51b5c3a90a3f24073c7d74a4fe25d9cf21c75960f3fc3863183":int:16:char*:"ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb":int:16:char*:"010001":exp:0:hex:"eaf1a73a1b0c4609537de69cd9228bbcfb9a8ca8c6c3efaf056fe4a7f4634ed00b7c39ec6922d7b8ea2c04ebac":char*:"9f47ddf42e97eea856a9bdbc714eb3ac22f6eb32":hex:"2d207a73432a8fb4c03051b3f73b28a61764098dfa34c47a20995f8115aa6816679b557e82dbee584908c6e69782d7deb34dbd65af063d57fca76a5fd069492fd6068d9984d209350565a62e5c77f23038c12cb10c6634709b547c46f6b4a709bd85ca122d74465ef97762c29763e06dbc7a9e738c78bfca0102dc5e79d65b973f28240caab2e161a78b57d262457ed8195d53e3c7ae9da021883c6db7c24afdd2322eac972ad3c354c5fcef1e146c3a0290fb67adf007066e00428d2cec18ce58f9328698defef4b2eb5ec76918fde1c198cbb38b7afc67626a9aefec4322bfd90d2563481c9a221f78c8272c82d1b62ab914e1c69f6af6ef30ca5260db4a46":int:0 + +RSAES-OAEP Decryption empty output with NULL buffer +depends_on:0 +1:int:2048:int:16:char*:"ecf5aecd1e5515fffacbd75a2816c6ebf49018cdfb4638e185d66a7396b6f8090f8018c7fd95cc34b857dc17f0cc6516bb1346ab4d582cadad7b4103352387b70338d084047c9d9539b6496204b3dd6ea442499207bec01f964287ff6336c3984658336846f56e46861881c10233d2176bf15a5e96ddc780bc868aa77d3ce769":int:16:char*:"bc46c464fc6ac4ca783b0eb08a3c841b772f7e9b2f28babd588ae885e1a0c61e4858a0fb25ac299990f35be85164c259ba1175cdd7192707135184992b6c29b746dd0d2cabe142835f7d148cc161524b4a09946d48b828473f1ce76b6cb6886c345c03e05f41d51b5c3a90a3f24073c7d74a4fe25d9cf21c75960f3fc3863183":int:16:char*:"ae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb":int:16:char*:"010001":exp:0:hex:"":char*:"9f47ddf42e97eea856a9bdbc714eb3ac22f6eb32":hex:"32b75304e631e94d4b02819642c7ffa66116af504cb3c4687420cc4b7f069fc6cc3b1a254611995ce2914a9e88152d38bbf87ccedcad9b9890341284e56e802a1b1f8f6bd3d5c991bd92eb8a8ea0a1d8bae141088ff8dceaebdb73515cf06ce33baa37c53093f1d1edc3502818cc70edcfddb41646374beb5b4f67f7f773e43778d4d31012e5a207c474e762ac3251ea6ede9018ad6e8e9ea65a3528a62b694eb9d8becff220a7c6c70d33eaafa52cf67a8090f67b6f9c43c6fe0b0f2375cbb9e611c0fcfef5312feb5e53d4a89d3d7e06c966e0c92ab9e5838239f390bcfd918d94c224df8e8ccb57ee364389908b6a0e550133f7565016804fbd6cb338314a":int:0 + +RSASSA-PSS Signing Test Vector Int +2:int:1024:int:16:char*:"d17f655bf27c8b16d35462c905cc04a26f37e2a67fa9c0ce0dced472394a0df743fe7f929e378efdb368eddff453cf007af6d948e0ade757371f8a711e278f6b":int:16:char*:"c6d92b6fee7414d1358ce1546fb62987530b90bd15e0f14963a5e2635adb69347ec0c01b2ab1763fd8ac1a592fb22757463a982425bb97a3a437c5bf86d03f2f":int:16:char*:"a2ba40ee07e3b2bd2f02ce227f36a195024486e49c19cb41bbbdfbba98b22b0e577c2eeaffa20d883a76e65e394c69d4b3c05a1e8fadda27edb2a42bc000fe888b9b32c22d15add0cd76b3e7936e19955b220dd17d4ea904b1ec102b2e4de7751222aa99151024c7cb41cc5ea21d00eeb41f7c800834d2c6e06bce3bce7ea9a5":int:16:char*:"010001":exp:0:exp:0:hex:"859eef2fd78aca00308bdc471193bf55bf9d78db8f8a672b484634f3c9c26e6478ae10260fe0dd8c082e53a5293af2173cd50c6d5d354febf78b26021c25c02712e78cd4694c9f469777e451e7f8e9e04cd3739c6bbfedae487fb55644e9ca74ff77a53cb729802f6ed4a5ffa8ba159890fc":hex:"e3b5d5d002c1bce50c2b65ef88a188d83bce7e61":hex:"8daa627d3de7595d63056c7ec659e54406f10610128baae821c8b2a0f3936d54dc3bdce46689f6b7951bb18e840542769718d5715d210d85efbb596192032c42be4c29972c856275eb6d5a45f05f51876fc6743deddd28caec9bb30ea99e02c3488269604fe497f74ccd7c7fca1671897123cbd30def5d54a2b5536ad90a747e":int:0 + +RSASSA-PSS Verification Test Vector Int +3:int:1024:int:16:char*:"a2ba40ee07e3b2bd2f02ce227f36a195024486e49c19cb41bbbdfbba98b22b0e577c2eeaffa20d883a76e65e394c69d4b3c05a1e8fadda27edb2a42bc000fe888b9b32c22d15add0cd76b3e7936e19955b220dd17d4ea904b1ec102b2e4de7751222aa99151024c7cb41cc5ea21d00eeb41f7c800834d2c6e06bce3bce7ea9a5":int:16:char*:"010001":exp:0:exp:0:hex:"859eef2fd78aca00308bdc471193bf55bf9d78db8f8a672b484634f3c9c26e6478ae10260fe0dd8c082e53a5293af2173cd50c6d5d354febf78b26021c25c02712e78cd4694c9f469777e451e7f8e9e04cd3739c6bbfedae487fb55644e9ca74ff77a53cb729802f6ed4a5ffa8ba159890fc":char*:"e3b5d5d002c1bce50c2b65ef88a188d83bce7e61":hex:"8daa627d3de7595d63056c7ec659e54406f10610128baae821c8b2a0f3936d54dc3bdce46689f6b7951bb18e840542769718d5715d210d85efbb596192032c42be4c29972c856275eb6d5a45f05f51876fc6743deddd28caec9bb30ea99e02c3488269604fe497f74ccd7c7fca1671897123cbd30def5d54a2b5536ad90a747e":int:0 + +RSASSA-PSS Signature RSA-1016, SHA-512: minimum salt size not met +depends_on:1 +2:int:1016:int:16:char*:"0e3cb6845e528229e19cfb24611e6859ac1cea7d35992b6e2e796823c52affa03400e42830f90697f084499c3e3587defc19e749e72433dd7b70c28b0c8280b7":int:16:char*:"0c48f9e45ae38fdb4a5143be37d79a10cd4f1f9782ef26a4848a4449c72cfd712c68350818736385cb4a9ab6db5aef8e96c551039cfcc8915821aee069ed660d":int:16:char*:"00aee7874a4db2f1510044405db29f14df0f37bbcf61fcbcc994a3d31caaf858a74cc8f2a40ac9a9ce7aa9a0680f62cf9d8d4b827114533fdbf86f16fc9dfe5cbf857d86135519a4611ffc59cb7473861619a78e3ec314715e804cff82d6f32e9f57ddf390563629883bd34f40e8db413209b151cee97d817a5d65c7da54734b":int:16:char*:"010001":exp:2:exp:2:hex:"d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd00":hex:"e3b5d5d002c1bce50c2b65ef88a188d83bce7e61":hex:"":exp:1 + +RSASSA-PSS Signature RSA-520, SHA-512: no possible salt size +depends_on:1 +2:int:520:int:16:char*:"0feea5f6220fac291b9508ec2ba8ed281eb39aee4d5dc693254106816ebc700ecf":int:16:char*:"0d68918785c3aafe31eaaa2d8d8156dce645940ff7734a457337a51bd00bc88811":int:16:char*:"00d5a06f86e5b9d87428540165ca966fa8893a62e2a59d0bfd7617780bb039f9165a373a8e119d0766f8de556710f33f67019153bad8223775e797d451d48206f3bf":int:16:char*:"010001":exp:2:exp:2:hex:"d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd00":hex:"e3b5d5d002c1bce50c2b65ef88a188d83bce7e61":hex:"":exp:1 + +RSASSA-PSS Signature RSA-528, SHA-512: zero salt size +depends_on:1 +2:int:528:int:16:char*:"00d272aa28ed2085ac6df3c05c6719eed5deb618afa2e4ca4a6f7330b430ad48672d":int:16:char*:"00c578836bab27145db9dd66f17470b62d4a6100f8ca0dedf457ee3639c3b9596325":int:16:char*:"00a2554eba715bf66e5ecdf3d6d718e3e5d907e8666e7bf5a76b415106e04eb827ec4cb2199cff66491d45419082059aa5b54b0cf5eef4443402f3047c0b0e6f025081":int:16:char*:"010001":exp:2:exp:2:hex:"d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd32a7c8a05bbc90d32c49d436e99569fd00":hex:"e3b5d5d002c1bce50c2b65ef88a188d83bce7e61":hex:"":exp:1 + +RSASSA-PSS Signature Example 1_1 +2:int:1024:int:16:char*:"e7e8942720a877517273a356053ea2a1bc0c94aa72d55c6e86296b2dfc967948c0a72cbccca7eacb35706e09a1df55a1535bd9b3cc34160b3b6dcd3eda8e6443":int:16:char*:"b69dca1cf7d4d7ec81e75b90fcca874abcde123fd2700180aa90479b6e48de8d67ed24f9f19d85ba275874f542cd20dc723e6963364a1f9425452b269a6799fd":int:16:char*:"a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137":int:16:char*:"010001":exp:0:exp:0:hex:"cdc87da223d786df3b45e0bbbc721326d1ee2af806cc315475cc6f0d9c66e1b62371d45ce2392e1ac92844c310102f156a0d8d52c1f4c40ba3aa65095786cb769757a6563ba958fed0bcc984e8b517a3d5f515b23b8a41e74aa867693f90dfb061a6e86dfaaee64472c00e5f20945729cbebe77f06ce78e08f4098fba41f9d6193c0317e8b60d4b6084acb42d29e3808a3bc372d85e331170fcbf7cc72d0b71c296648b3a4d10f416295d0807aa625cab2744fd9ea8fd223c42537029828bd16be02546f130fd2e33b936d2676e08aed1b73318b750a0167d0":hex:"dee959c7e06411361420ff80185ed57f3e6776af":hex:"9074308fb598e9701b2294388e52f971faac2b60a5145af185df5287b5ed2887e57ce7fd44dc8634e407c8e0e4360bc226f3ec227f9d9e54638e8d31f5051215df6ebb9c2f9579aa77598a38f914b5b9c1bd83c4e2f9f382a0d0aa3542ffee65984a601bc69eb28deb27dca12c82c2d4c3f66cd500f1ff2b994d8a4e30cbb33c":int:0 + +RSASSA-PSS Signature Example 1_1 (verify) +3:int:1024:int:16:char*:"a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137":int:16:char*:"010001":exp:0:exp:0:hex:"cdc87da223d786df3b45e0bbbc721326d1ee2af806cc315475cc6f0d9c66e1b62371d45ce2392e1ac92844c310102f156a0d8d52c1f4c40ba3aa65095786cb769757a6563ba958fed0bcc984e8b517a3d5f515b23b8a41e74aa867693f90dfb061a6e86dfaaee64472c00e5f20945729cbebe77f06ce78e08f4098fba41f9d6193c0317e8b60d4b6084acb42d29e3808a3bc372d85e331170fcbf7cc72d0b71c296648b3a4d10f416295d0807aa625cab2744fd9ea8fd223c42537029828bd16be02546f130fd2e33b936d2676e08aed1b73318b750a0167d0":char*:"dee959c7e06411361420ff80185ed57f3e6776af":hex:"9074308fb598e9701b2294388e52f971faac2b60a5145af185df5287b5ed2887e57ce7fd44dc8634e407c8e0e4360bc226f3ec227f9d9e54638e8d31f5051215df6ebb9c2f9579aa77598a38f914b5b9c1bd83c4e2f9f382a0d0aa3542ffee65984a601bc69eb28deb27dca12c82c2d4c3f66cd500f1ff2b994d8a4e30cbb33c":int:0 + +RSASSA-PSS Signature Example 1_2 +2:int:1024:int:16:char*:"e7e8942720a877517273a356053ea2a1bc0c94aa72d55c6e86296b2dfc967948c0a72cbccca7eacb35706e09a1df55a1535bd9b3cc34160b3b6dcd3eda8e6443":int:16:char*:"b69dca1cf7d4d7ec81e75b90fcca874abcde123fd2700180aa90479b6e48de8d67ed24f9f19d85ba275874f542cd20dc723e6963364a1f9425452b269a6799fd":int:16:char*:"a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137":int:16:char*:"010001":exp:0:exp:0:hex:"851384cdfe819c22ed6c4ccb30daeb5cf059bc8e1166b7e3530c4c233e2b5f8f71a1cca582d43ecc72b1bca16dfc7013226b9e":hex:"ef2869fa40c346cb183dab3d7bffc98fd56df42d":hex:"3ef7f46e831bf92b32274142a585ffcefbdca7b32ae90d10fb0f0c729984f04ef29a9df0780775ce43739b97838390db0a5505e63de927028d9d29b219ca2c4517832558a55d694a6d25b9dab66003c4cccd907802193be5170d26147d37b93590241be51c25055f47ef62752cfbe21418fafe98c22c4d4d47724fdb5669e843":int:0 + +RSASSA-PSS Signature Example 1_2 (verify) +3:int:1024:int:16:char*:"a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137":int:16:char*:"010001":exp:0:exp:0:hex:"851384cdfe819c22ed6c4ccb30daeb5cf059bc8e1166b7e3530c4c233e2b5f8f71a1cca582d43ecc72b1bca16dfc7013226b9e":char*:"ef2869fa40c346cb183dab3d7bffc98fd56df42d":hex:"3ef7f46e831bf92b32274142a585ffcefbdca7b32ae90d10fb0f0c729984f04ef29a9df0780775ce43739b97838390db0a5505e63de927028d9d29b219ca2c4517832558a55d694a6d25b9dab66003c4cccd907802193be5170d26147d37b93590241be51c25055f47ef62752cfbe21418fafe98c22c4d4d47724fdb5669e843":int:0 + +RSASSA-PSS Signature Example 1_3 +2:int:1024:int:16:char*:"e7e8942720a877517273a356053ea2a1bc0c94aa72d55c6e86296b2dfc967948c0a72cbccca7eacb35706e09a1df55a1535bd9b3cc34160b3b6dcd3eda8e6443":int:16:char*:"b69dca1cf7d4d7ec81e75b90fcca874abcde123fd2700180aa90479b6e48de8d67ed24f9f19d85ba275874f542cd20dc723e6963364a1f9425452b269a6799fd":int:16:char*:"a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137":int:16:char*:"010001":exp:0:exp:0:hex:"a4b159941761c40c6a82f2b80d1b94f5aa2654fd17e12d588864679b54cd04ef8bd03012be8dc37f4b83af7963faff0dfa225477437c48017ff2be8191cf3955fc07356eab3f322f7f620e21d254e5db4324279fe067e0910e2e81ca2cab31c745e67a54058eb50d993cdb9ed0b4d029c06d21a94ca661c3ce27fae1d6cb20f4564d66ce4767583d0e5f060215b59017be85ea848939127bd8c9c4d47b51056c031cf336f17c9980f3b8f5b9b6878e8b797aa43b882684333e17893fe9caa6aa299f7ed1a18ee2c54864b7b2b99b72618fb02574d139ef50f019c9eef416971338e7d470":hex:"710b9c4747d800d4de87f12afdce6df18107cc77":hex:"666026fba71bd3e7cf13157cc2c51a8e4aa684af9778f91849f34335d141c00154c4197621f9624a675b5abc22ee7d5baaffaae1c9baca2cc373b3f33e78e6143c395a91aa7faca664eb733afd14d8827259d99a7550faca501ef2b04e33c23aa51f4b9e8282efdb728cc0ab09405a91607c6369961bc8270d2d4f39fce612b1":int:0 + +RSASSA-PSS Signature Example 1_3 (verify) +3:int:1024:int:16:char*:"a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137":int:16:char*:"010001":exp:0:exp:0:hex:"a4b159941761c40c6a82f2b80d1b94f5aa2654fd17e12d588864679b54cd04ef8bd03012be8dc37f4b83af7963faff0dfa225477437c48017ff2be8191cf3955fc07356eab3f322f7f620e21d254e5db4324279fe067e0910e2e81ca2cab31c745e67a54058eb50d993cdb9ed0b4d029c06d21a94ca661c3ce27fae1d6cb20f4564d66ce4767583d0e5f060215b59017be85ea848939127bd8c9c4d47b51056c031cf336f17c9980f3b8f5b9b6878e8b797aa43b882684333e17893fe9caa6aa299f7ed1a18ee2c54864b7b2b99b72618fb02574d139ef50f019c9eef416971338e7d470":char*:"710b9c4747d800d4de87f12afdce6df18107cc77":hex:"666026fba71bd3e7cf13157cc2c51a8e4aa684af9778f91849f34335d141c00154c4197621f9624a675b5abc22ee7d5baaffaae1c9baca2cc373b3f33e78e6143c395a91aa7faca664eb733afd14d8827259d99a7550faca501ef2b04e33c23aa51f4b9e8282efdb728cc0ab09405a91607c6369961bc8270d2d4f39fce612b1":int:0 + +RSASSA-PSS Signature Example 1_4 +2:int:1024:int:16:char*:"e7e8942720a877517273a356053ea2a1bc0c94aa72d55c6e86296b2dfc967948c0a72cbccca7eacb35706e09a1df55a1535bd9b3cc34160b3b6dcd3eda8e6443":int:16:char*:"b69dca1cf7d4d7ec81e75b90fcca874abcde123fd2700180aa90479b6e48de8d67ed24f9f19d85ba275874f542cd20dc723e6963364a1f9425452b269a6799fd":int:16:char*:"a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137":int:16:char*:"010001":exp:0:exp:0:hex:"bc656747fa9eafb3f0":hex:"056f00985de14d8ef5cea9e82f8c27bef720335e":hex:"4609793b23e9d09362dc21bb47da0b4f3a7622649a47d464019b9aeafe53359c178c91cd58ba6bcb78be0346a7bc637f4b873d4bab38ee661f199634c547a1ad8442e03da015b136e543f7ab07c0c13e4225b8de8cce25d4f6eb8400f81f7e1833b7ee6e334d370964ca79fdb872b4d75223b5eeb08101591fb532d155a6de87":int:0 + +RSASSA-PSS Signature Example 1_4 (verify) +3:int:1024:int:16:char*:"a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137":int:16:char*:"010001":exp:0:exp:0:hex:"bc656747fa9eafb3f0":char*:"056f00985de14d8ef5cea9e82f8c27bef720335e":hex:"4609793b23e9d09362dc21bb47da0b4f3a7622649a47d464019b9aeafe53359c178c91cd58ba6bcb78be0346a7bc637f4b873d4bab38ee661f199634c547a1ad8442e03da015b136e543f7ab07c0c13e4225b8de8cce25d4f6eb8400f81f7e1833b7ee6e334d370964ca79fdb872b4d75223b5eeb08101591fb532d155a6de87":int:0 + +RSASSA-PSS Signature Example 1_5 +2:int:1024:int:16:char*:"e7e8942720a877517273a356053ea2a1bc0c94aa72d55c6e86296b2dfc967948c0a72cbccca7eacb35706e09a1df55a1535bd9b3cc34160b3b6dcd3eda8e6443":int:16:char*:"b69dca1cf7d4d7ec81e75b90fcca874abcde123fd2700180aa90479b6e48de8d67ed24f9f19d85ba275874f542cd20dc723e6963364a1f9425452b269a6799fd":int:16:char*:"a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137":int:16:char*:"010001":exp:0:exp:0:hex:"b45581547e5427770c768e8b82b75564e0ea4e9c32594d6bff706544de0a8776c7a80b4576550eee1b2acabc7e8b7d3ef7bb5b03e462c11047eadd00629ae575480ac1470fe046f13a2bf5af17921dc4b0aa8b02bee6334911651d7f8525d10f32b51d33be520d3ddf5a709955a3dfe78283b9e0ab54046d150c177f037fdccc5be4ea5f68b5e5a38c9d7edcccc4975f455a6909b4":hex:"80e70ff86a08de3ec60972b39b4fbfdcea67ae8e":hex:"1d2aad221ca4d31ddf13509239019398e3d14b32dc34dc5af4aeaea3c095af73479cf0a45e5629635a53a018377615b16cb9b13b3e09d671eb71e387b8545c5960da5a64776e768e82b2c93583bf104c3fdb23512b7b4e89f633dd0063a530db4524b01c3f384c09310e315a79dcd3d684022a7f31c865a664e316978b759fad":int:0 + +RSASSA-PSS Signature Example 1_5 (verify) +3:int:1024:int:16:char*:"a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137":int:16:char*:"010001":exp:0:exp:0:hex:"b45581547e5427770c768e8b82b75564e0ea4e9c32594d6bff706544de0a8776c7a80b4576550eee1b2acabc7e8b7d3ef7bb5b03e462c11047eadd00629ae575480ac1470fe046f13a2bf5af17921dc4b0aa8b02bee6334911651d7f8525d10f32b51d33be520d3ddf5a709955a3dfe78283b9e0ab54046d150c177f037fdccc5be4ea5f68b5e5a38c9d7edcccc4975f455a6909b4":char*:"80e70ff86a08de3ec60972b39b4fbfdcea67ae8e":hex:"1d2aad221ca4d31ddf13509239019398e3d14b32dc34dc5af4aeaea3c095af73479cf0a45e5629635a53a018377615b16cb9b13b3e09d671eb71e387b8545c5960da5a64776e768e82b2c93583bf104c3fdb23512b7b4e89f633dd0063a530db4524b01c3f384c09310e315a79dcd3d684022a7f31c865a664e316978b759fad":int:0 + +RSASSA-PSS Signature Example 1_6 +2:int:1024:int:16:char*:"e7e8942720a877517273a356053ea2a1bc0c94aa72d55c6e86296b2dfc967948c0a72cbccca7eacb35706e09a1df55a1535bd9b3cc34160b3b6dcd3eda8e6443":int:16:char*:"b69dca1cf7d4d7ec81e75b90fcca874abcde123fd2700180aa90479b6e48de8d67ed24f9f19d85ba275874f542cd20dc723e6963364a1f9425452b269a6799fd":int:16:char*:"a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137":int:16:char*:"010001":exp:0:exp:0:hex:"10aae9a0ab0b595d0841207b700d48d75faedde3b775cd6b4cc88ae06e4694ec74ba18f8520d4f5ea69cbbe7cc2beba43efdc10215ac4eb32dc302a1f53dc6c4352267e7936cfebf7c8d67035784a3909fa859c7b7b59b8e39c5c2349f1886b705a30267d402f7486ab4f58cad5d69adb17ab8cd0ce1caf5025af4ae24b1fb8794c6070cc09a51e2f9911311e3877d0044c71c57a993395008806b723ac38373d395481818528c1e7053739282053529510e935cd0fa77b8fa53cc2d474bd4fb3cc5c672d6ffdc90a00f9848712c4bcfe46c60573659b11e6457e861f0f604b6138d144f8ce4e2da73":hex:"a8ab69dd801f0074c2a1fc60649836c616d99681":hex:"2a34f6125e1f6b0bf971e84fbd41c632be8f2c2ace7de8b6926e31ff93e9af987fbc06e51e9be14f5198f91f3f953bd67da60a9df59764c3dc0fe08e1cbef0b75f868d10ad3fba749fef59fb6dac46a0d6e504369331586f58e4628f39aa278982543bc0eeb537dc61958019b394fb273f215858a0a01ac4d650b955c67f4c58":int:0 + +RSASSA-PSS Signature Example 1_6 (verify) +3:int:1024:int:16:char*:"a56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137":int:16:char*:"010001":exp:0:exp:0:hex:"10aae9a0ab0b595d0841207b700d48d75faedde3b775cd6b4cc88ae06e4694ec74ba18f8520d4f5ea69cbbe7cc2beba43efdc10215ac4eb32dc302a1f53dc6c4352267e7936cfebf7c8d67035784a3909fa859c7b7b59b8e39c5c2349f1886b705a30267d402f7486ab4f58cad5d69adb17ab8cd0ce1caf5025af4ae24b1fb8794c6070cc09a51e2f9911311e3877d0044c71c57a993395008806b723ac38373d395481818528c1e7053739282053529510e935cd0fa77b8fa53cc2d474bd4fb3cc5c672d6ffdc90a00f9848712c4bcfe46c60573659b11e6457e861f0f604b6138d144f8ce4e2da73":char*:"a8ab69dd801f0074c2a1fc60649836c616d99681":hex:"2a34f6125e1f6b0bf971e84fbd41c632be8f2c2ace7de8b6926e31ff93e9af987fbc06e51e9be14f5198f91f3f953bd67da60a9df59764c3dc0fe08e1cbef0b75f868d10ad3fba749fef59fb6dac46a0d6e504369331586f58e4628f39aa278982543bc0eeb537dc61958019b394fb273f215858a0a01ac4d650b955c67f4c58":int:0 + +RSASSA-PSS Signature Example 2_1 +2:int:1025:int:16:char*:"016601e926a0f8c9e26ecab769ea65a5e7c52cc9e080ef519457c644da6891c5a104d3ea7955929a22e7c68a7af9fcad777c3ccc2b9e3d3650bce404399b7e59d1":int:16:char*:"014eafa1d4d0184da7e31f877d1281ddda625664869e8379e67ad3b75eae74a580e9827abd6eb7a002cb5411f5266797768fb8e95ae40e3e8a01f35ff89e56c079":int:16:char*:"01d40c1bcf97a68ae7cdbd8a7bf3e34fa19dcca4ef75a47454375f94514d88fed006fb829f8419ff87d6315da68a1ff3a0938e9abb3464011c303ad99199cf0c7c7a8b477dce829e8844f625b115e5e9c4a59cf8f8113b6834336a2fd2689b472cbb5e5cabe674350c59b6c17e176874fb42f8fc3d176a017edc61fd326c4b33c9":int:16:char*:"010001":exp:0:exp:0:hex:"daba032066263faedb659848115278a52c44faa3a76f37515ed336321072c40a9d9b53bc05014078adf520875146aae70ff060226dcb7b1f1fc27e9360":hex:"57bf160bcb02bb1dc7280cf0458530b7d2832ff7":hex:"014c5ba5338328ccc6e7a90bf1c0ab3fd606ff4796d3c12e4b639ed9136a5fec6c16d8884bdd99cfdc521456b0742b736868cf90de099adb8d5ffd1deff39ba4007ab746cefdb22d7df0e225f54627dc65466131721b90af445363a8358b9f607642f78fab0ab0f43b7168d64bae70d8827848d8ef1e421c5754ddf42c2589b5b3":int:0 + +RSASSA-PSS Signature Example 2_1 (verify) +3:int:1025:int:16:char*:"01d40c1bcf97a68ae7cdbd8a7bf3e34fa19dcca4ef75a47454375f94514d88fed006fb829f8419ff87d6315da68a1ff3a0938e9abb3464011c303ad99199cf0c7c7a8b477dce829e8844f625b115e5e9c4a59cf8f8113b6834336a2fd2689b472cbb5e5cabe674350c59b6c17e176874fb42f8fc3d176a017edc61fd326c4b33c9":int:16:char*:"010001":exp:0:exp:0:hex:"daba032066263faedb659848115278a52c44faa3a76f37515ed336321072c40a9d9b53bc05014078adf520875146aae70ff060226dcb7b1f1fc27e9360":char*:"57bf160bcb02bb1dc7280cf0458530b7d2832ff7":hex:"014c5ba5338328ccc6e7a90bf1c0ab3fd606ff4796d3c12e4b639ed9136a5fec6c16d8884bdd99cfdc521456b0742b736868cf90de099adb8d5ffd1deff39ba4007ab746cefdb22d7df0e225f54627dc65466131721b90af445363a8358b9f607642f78fab0ab0f43b7168d64bae70d8827848d8ef1e421c5754ddf42c2589b5b3":int:0 + +RSASSA-PSS Signature Example 2_2 +2:int:1025:int:16:char*:"016601e926a0f8c9e26ecab769ea65a5e7c52cc9e080ef519457c644da6891c5a104d3ea7955929a22e7c68a7af9fcad777c3ccc2b9e3d3650bce404399b7e59d1":int:16:char*:"014eafa1d4d0184da7e31f877d1281ddda625664869e8379e67ad3b75eae74a580e9827abd6eb7a002cb5411f5266797768fb8e95ae40e3e8a01f35ff89e56c079":int:16:char*:"01d40c1bcf97a68ae7cdbd8a7bf3e34fa19dcca4ef75a47454375f94514d88fed006fb829f8419ff87d6315da68a1ff3a0938e9abb3464011c303ad99199cf0c7c7a8b477dce829e8844f625b115e5e9c4a59cf8f8113b6834336a2fd2689b472cbb5e5cabe674350c59b6c17e176874fb42f8fc3d176a017edc61fd326c4b33c9":int:16:char*:"010001":exp:0:exp:0:hex:"e4f8601a8a6da1be34447c0959c058570c3668cfd51dd5f9ccd6ad4411fe8213486d78a6c49f93efc2ca2288cebc2b9b60bd04b1e220d86e3d4848d709d032d1e8c6a070c6af9a499fcf95354b14ba6127c739de1bb0fd16431e46938aec0cf8ad9eb72e832a7035de9b7807bdc0ed8b68eb0f5ac2216be40ce920c0db0eddd3860ed788efaccaca502d8f2bd6d1a7c1f41ff46f1681c8f1f818e9c4f6d91a0c7803ccc63d76a6544d843e084e363b8acc55aa531733edb5dee5b5196e9f03e8b731b3776428d9e457fe3fbcb3db7274442d785890e9cb0854b6444dace791d7273de1889719338a77fe":hex:"7f6dd359e604e60870e898e47b19bf2e5a7b2a90":hex:"010991656cca182b7f29d2dbc007e7ae0fec158eb6759cb9c45c5ff87c7635dd46d150882f4de1e9ae65e7f7d9018f6836954a47c0a81a8a6b6f83f2944d6081b1aa7c759b254b2c34b691da67cc0226e20b2f18b42212761dcd4b908a62b371b5918c5742af4b537e296917674fb914194761621cc19a41f6fb953fbcbb649dea":int:0 + +RSASSA-PSS Signature Example 2_2 (verify) +3:int:1025:int:16:char*:"01d40c1bcf97a68ae7cdbd8a7bf3e34fa19dcca4ef75a47454375f94514d88fed006fb829f8419ff87d6315da68a1ff3a0938e9abb3464011c303ad99199cf0c7c7a8b477dce829e8844f625b115e5e9c4a59cf8f8113b6834336a2fd2689b472cbb5e5cabe674350c59b6c17e176874fb42f8fc3d176a017edc61fd326c4b33c9":int:16:char*:"010001":exp:0:exp:0:hex:"e4f8601a8a6da1be34447c0959c058570c3668cfd51dd5f9ccd6ad4411fe8213486d78a6c49f93efc2ca2288cebc2b9b60bd04b1e220d86e3d4848d709d032d1e8c6a070c6af9a499fcf95354b14ba6127c739de1bb0fd16431e46938aec0cf8ad9eb72e832a7035de9b7807bdc0ed8b68eb0f5ac2216be40ce920c0db0eddd3860ed788efaccaca502d8f2bd6d1a7c1f41ff46f1681c8f1f818e9c4f6d91a0c7803ccc63d76a6544d843e084e363b8acc55aa531733edb5dee5b5196e9f03e8b731b3776428d9e457fe3fbcb3db7274442d785890e9cb0854b6444dace791d7273de1889719338a77fe":char*:"7f6dd359e604e60870e898e47b19bf2e5a7b2a90":hex:"010991656cca182b7f29d2dbc007e7ae0fec158eb6759cb9c45c5ff87c7635dd46d150882f4de1e9ae65e7f7d9018f6836954a47c0a81a8a6b6f83f2944d6081b1aa7c759b254b2c34b691da67cc0226e20b2f18b42212761dcd4b908a62b371b5918c5742af4b537e296917674fb914194761621cc19a41f6fb953fbcbb649dea":int:0 + +RSASSA-PSS Signature Example 2_3 +2:int:1025:int:16:char*:"016601e926a0f8c9e26ecab769ea65a5e7c52cc9e080ef519457c644da6891c5a104d3ea7955929a22e7c68a7af9fcad777c3ccc2b9e3d3650bce404399b7e59d1":int:16:char*:"014eafa1d4d0184da7e31f877d1281ddda625664869e8379e67ad3b75eae74a580e9827abd6eb7a002cb5411f5266797768fb8e95ae40e3e8a01f35ff89e56c079":int:16:char*:"01d40c1bcf97a68ae7cdbd8a7bf3e34fa19dcca4ef75a47454375f94514d88fed006fb829f8419ff87d6315da68a1ff3a0938e9abb3464011c303ad99199cf0c7c7a8b477dce829e8844f625b115e5e9c4a59cf8f8113b6834336a2fd2689b472cbb5e5cabe674350c59b6c17e176874fb42f8fc3d176a017edc61fd326c4b33c9":int:16:char*:"010001":exp:0:exp:0:hex:"52a1d96c8ac39e41e455809801b927a5b445c10d902a0dcd3850d22a66d2bb0703e67d5867114595aabf5a7aeb5a8f87034bbb30e13cfd4817a9be76230023606d0286a3faf8a4d22b728ec518079f9e64526e3a0cc7941aa338c437997c680ccac67c66bfa1":hex:"fca862068bce2246724b708a0519da17e648688c":hex:"007f0030018f53cdc71f23d03659fde54d4241f758a750b42f185f87578520c30742afd84359b6e6e8d3ed959dc6fe486bedc8e2cf001f63a7abe16256a1b84df0d249fc05d3194ce5f0912742dbbf80dd174f6c51f6bad7f16cf3364eba095a06267dc3793803ac7526aebe0a475d38b8c2247ab51c4898df7047dc6adf52c6c4":int:0 + +RSASSA-PSS Signature Example 2_3 (verify) +3:int:1025:int:16:char*:"01d40c1bcf97a68ae7cdbd8a7bf3e34fa19dcca4ef75a47454375f94514d88fed006fb829f8419ff87d6315da68a1ff3a0938e9abb3464011c303ad99199cf0c7c7a8b477dce829e8844f625b115e5e9c4a59cf8f8113b6834336a2fd2689b472cbb5e5cabe674350c59b6c17e176874fb42f8fc3d176a017edc61fd326c4b33c9":int:16:char*:"010001":exp:0:exp:0:hex:"52a1d96c8ac39e41e455809801b927a5b445c10d902a0dcd3850d22a66d2bb0703e67d5867114595aabf5a7aeb5a8f87034bbb30e13cfd4817a9be76230023606d0286a3faf8a4d22b728ec518079f9e64526e3a0cc7941aa338c437997c680ccac67c66bfa1":char*:"fca862068bce2246724b708a0519da17e648688c":hex:"007f0030018f53cdc71f23d03659fde54d4241f758a750b42f185f87578520c30742afd84359b6e6e8d3ed959dc6fe486bedc8e2cf001f63a7abe16256a1b84df0d249fc05d3194ce5f0912742dbbf80dd174f6c51f6bad7f16cf3364eba095a06267dc3793803ac7526aebe0a475d38b8c2247ab51c4898df7047dc6adf52c6c4":int:0 + +RSASSA-PSS Signature Example 2_4 +2:int:1025:int:16:char*:"016601e926a0f8c9e26ecab769ea65a5e7c52cc9e080ef519457c644da6891c5a104d3ea7955929a22e7c68a7af9fcad777c3ccc2b9e3d3650bce404399b7e59d1":int:16:char*:"014eafa1d4d0184da7e31f877d1281ddda625664869e8379e67ad3b75eae74a580e9827abd6eb7a002cb5411f5266797768fb8e95ae40e3e8a01f35ff89e56c079":int:16:char*:"01d40c1bcf97a68ae7cdbd8a7bf3e34fa19dcca4ef75a47454375f94514d88fed006fb829f8419ff87d6315da68a1ff3a0938e9abb3464011c303ad99199cf0c7c7a8b477dce829e8844f625b115e5e9c4a59cf8f8113b6834336a2fd2689b472cbb5e5cabe674350c59b6c17e176874fb42f8fc3d176a017edc61fd326c4b33c9":int:16:char*:"010001":exp:0:exp:0:hex:"a7182c83ac18be6570a106aa9d5c4e3dbbd4afaeb0c60c4a23e1969d79ff":hex:"8070ef2de945c02387684ba0d33096732235d440":hex:"009cd2f4edbe23e12346ae8c76dd9ad3230a62076141f16c152ba18513a48ef6f010e0e37fd3df10a1ec629a0cb5a3b5d2893007298c30936a95903b6ba85555d9ec3673a06108fd62a2fda56d1ce2e85c4db6b24a81ca3b496c36d4fd06eb7c9166d8e94877c42bea622b3bfe9251fdc21d8d5371badad78a488214796335b40b":int:0 + +RSASSA-PSS Signature Example 2_4 (verify) +3:int:1025:int:16:char*:"01d40c1bcf97a68ae7cdbd8a7bf3e34fa19dcca4ef75a47454375f94514d88fed006fb829f8419ff87d6315da68a1ff3a0938e9abb3464011c303ad99199cf0c7c7a8b477dce829e8844f625b115e5e9c4a59cf8f8113b6834336a2fd2689b472cbb5e5cabe674350c59b6c17e176874fb42f8fc3d176a017edc61fd326c4b33c9":int:16:char*:"010001":exp:0:exp:0:hex:"a7182c83ac18be6570a106aa9d5c4e3dbbd4afaeb0c60c4a23e1969d79ff":char*:"8070ef2de945c02387684ba0d33096732235d440":hex:"009cd2f4edbe23e12346ae8c76dd9ad3230a62076141f16c152ba18513a48ef6f010e0e37fd3df10a1ec629a0cb5a3b5d2893007298c30936a95903b6ba85555d9ec3673a06108fd62a2fda56d1ce2e85c4db6b24a81ca3b496c36d4fd06eb7c9166d8e94877c42bea622b3bfe9251fdc21d8d5371badad78a488214796335b40b":int:0 + +RSASSA-PSS Signature Example 2_5 +2:int:1025:int:16:char*:"016601e926a0f8c9e26ecab769ea65a5e7c52cc9e080ef519457c644da6891c5a104d3ea7955929a22e7c68a7af9fcad777c3ccc2b9e3d3650bce404399b7e59d1":int:16:char*:"014eafa1d4d0184da7e31f877d1281ddda625664869e8379e67ad3b75eae74a580e9827abd6eb7a002cb5411f5266797768fb8e95ae40e3e8a01f35ff89e56c079":int:16:char*:"01d40c1bcf97a68ae7cdbd8a7bf3e34fa19dcca4ef75a47454375f94514d88fed006fb829f8419ff87d6315da68a1ff3a0938e9abb3464011c303ad99199cf0c7c7a8b477dce829e8844f625b115e5e9c4a59cf8f8113b6834336a2fd2689b472cbb5e5cabe674350c59b6c17e176874fb42f8fc3d176a017edc61fd326c4b33c9":int:16:char*:"010001":exp:0:exp:0:hex:"86a83d4a72ee932a4f5630af6579a386b78fe88999e0abd2d49034a4bfc854dd94f1094e2e8cd7a179d19588e4aefc1b1bd25e95e3dd461f":hex:"17639a4e88d722c4fca24d079a8b29c32433b0c9":hex:"00ec430824931ebd3baa43034dae98ba646b8c36013d1671c3cf1cf8260c374b19f8e1cc8d965012405e7e9bf7378612dfcc85fce12cda11f950bd0ba8876740436c1d2595a64a1b32efcfb74a21c873b3cc33aaf4e3dc3953de67f0674c0453b4fd9f604406d441b816098cb106fe3472bc251f815f59db2e4378a3addc181ecf":int:0 + +RSASSA-PSS Signature Example 2_5 (verify) +3:int:1025:int:16:char*:"01d40c1bcf97a68ae7cdbd8a7bf3e34fa19dcca4ef75a47454375f94514d88fed006fb829f8419ff87d6315da68a1ff3a0938e9abb3464011c303ad99199cf0c7c7a8b477dce829e8844f625b115e5e9c4a59cf8f8113b6834336a2fd2689b472cbb5e5cabe674350c59b6c17e176874fb42f8fc3d176a017edc61fd326c4b33c9":int:16:char*:"010001":exp:0:exp:0:hex:"86a83d4a72ee932a4f5630af6579a386b78fe88999e0abd2d49034a4bfc854dd94f1094e2e8cd7a179d19588e4aefc1b1bd25e95e3dd461f":char*:"17639a4e88d722c4fca24d079a8b29c32433b0c9":hex:"00ec430824931ebd3baa43034dae98ba646b8c36013d1671c3cf1cf8260c374b19f8e1cc8d965012405e7e9bf7378612dfcc85fce12cda11f950bd0ba8876740436c1d2595a64a1b32efcfb74a21c873b3cc33aaf4e3dc3953de67f0674c0453b4fd9f604406d441b816098cb106fe3472bc251f815f59db2e4378a3addc181ecf":int:0 + +RSASSA-PSS Signature Example 2_6 +2:int:1025:int:16:char*:"016601e926a0f8c9e26ecab769ea65a5e7c52cc9e080ef519457c644da6891c5a104d3ea7955929a22e7c68a7af9fcad777c3ccc2b9e3d3650bce404399b7e59d1":int:16:char*:"014eafa1d4d0184da7e31f877d1281ddda625664869e8379e67ad3b75eae74a580e9827abd6eb7a002cb5411f5266797768fb8e95ae40e3e8a01f35ff89e56c079":int:16:char*:"01d40c1bcf97a68ae7cdbd8a7bf3e34fa19dcca4ef75a47454375f94514d88fed006fb829f8419ff87d6315da68a1ff3a0938e9abb3464011c303ad99199cf0c7c7a8b477dce829e8844f625b115e5e9c4a59cf8f8113b6834336a2fd2689b472cbb5e5cabe674350c59b6c17e176874fb42f8fc3d176a017edc61fd326c4b33c9":int:16:char*:"010001":exp:0:exp:0:hex:"049f9154d871ac4a7c7ab45325ba7545a1ed08f70525b2667cf1":hex:"37810def1055ed922b063df798de5d0aabf886ee":hex:"00475b1648f814a8dc0abdc37b5527f543b666bb6e39d30e5b49d3b876dccc58eac14e32a2d55c2616014456ad2f246fc8e3d560da3ddf379a1c0bd200f10221df078c219a151bc8d4ec9d2fc2564467811014ef15d8ea01c2ebbff8c2c8efab38096e55fcbe3285c7aa558851254faffa92c1c72b78758663ef4582843139d7a6":int:0 + +RSASSA-PSS Signature Example 2_6 (verify) +3:int:1025:int:16:char*:"01d40c1bcf97a68ae7cdbd8a7bf3e34fa19dcca4ef75a47454375f94514d88fed006fb829f8419ff87d6315da68a1ff3a0938e9abb3464011c303ad99199cf0c7c7a8b477dce829e8844f625b115e5e9c4a59cf8f8113b6834336a2fd2689b472cbb5e5cabe674350c59b6c17e176874fb42f8fc3d176a017edc61fd326c4b33c9":int:16:char*:"010001":exp:0:exp:0:hex:"049f9154d871ac4a7c7ab45325ba7545a1ed08f70525b2667cf1":char*:"37810def1055ed922b063df798de5d0aabf886ee":hex:"00475b1648f814a8dc0abdc37b5527f543b666bb6e39d30e5b49d3b876dccc58eac14e32a2d55c2616014456ad2f246fc8e3d560da3ddf379a1c0bd200f10221df078c219a151bc8d4ec9d2fc2564467811014ef15d8ea01c2ebbff8c2c8efab38096e55fcbe3285c7aa558851254faffa92c1c72b78758663ef4582843139d7a6":int:0 + +RSASSA-PSS Signature Example 3_1 +2:int:1026:int:16:char*:"01bd36e18ece4b0fdb2e9c9d548bd1a7d6e2c21c6fdc35074a1d05b1c6c8b3d558ea2639c9a9a421680169317252558bd148ad215aac550e2dcf12a82d0ebfe853":int:16:char*:"01b1b656ad86d8e19d5dc86292b3a192fdf6e0dd37877bad14822fa00190cab265f90d3f02057b6f54d6ecb14491e5adeacebc48bf0ebd2a2ad26d402e54f61651":int:16:char*:"02f246ef451ed3eebb9a310200cc25859c048e4be798302991112eb68ce6db674e280da21feded1ae74880ca522b18db249385012827c515f0e466a1ffa691d98170574e9d0eadb087586ca48933da3cc953d95bd0ed50de10ddcb6736107d6c831c7f663e833ca4c097e700ce0fb945f88fb85fe8e5a773172565b914a471a443":int:16:char*:"010001":exp:0:exp:0:hex:"594b37333bbb2c84524a87c1a01f75fcec0e3256f108e38dca36d70d0057":hex:"f31ad6c8cf89df78ed77feacbcc2f8b0a8e4cfaa":hex:"0088b135fb1794b6b96c4a3e678197f8cac52b64b2fe907d6f27de761124964a99a01a882740ecfaed6c01a47464bb05182313c01338a8cd097214cd68ca103bd57d3bc9e816213e61d784f182467abf8a01cf253e99a156eaa8e3e1f90e3c6e4e3aa2d83ed0345b89fafc9c26077c14b6ac51454fa26e446e3a2f153b2b16797f":int:0 + +RSASSA-PSS Signature Example 3_1 (verify) +3:int:1026:int:16:char*:"02f246ef451ed3eebb9a310200cc25859c048e4be798302991112eb68ce6db674e280da21feded1ae74880ca522b18db249385012827c515f0e466a1ffa691d98170574e9d0eadb087586ca48933da3cc953d95bd0ed50de10ddcb6736107d6c831c7f663e833ca4c097e700ce0fb945f88fb85fe8e5a773172565b914a471a443":int:16:char*:"010001":exp:0:exp:0:hex:"594b37333bbb2c84524a87c1a01f75fcec0e3256f108e38dca36d70d0057":char*:"f31ad6c8cf89df78ed77feacbcc2f8b0a8e4cfaa":hex:"0088b135fb1794b6b96c4a3e678197f8cac52b64b2fe907d6f27de761124964a99a01a882740ecfaed6c01a47464bb05182313c01338a8cd097214cd68ca103bd57d3bc9e816213e61d784f182467abf8a01cf253e99a156eaa8e3e1f90e3c6e4e3aa2d83ed0345b89fafc9c26077c14b6ac51454fa26e446e3a2f153b2b16797f":int:0 + +RSASSA-PSS Signature Example 3_2 +2:int:1026:int:16:char*:"01bd36e18ece4b0fdb2e9c9d548bd1a7d6e2c21c6fdc35074a1d05b1c6c8b3d558ea2639c9a9a421680169317252558bd148ad215aac550e2dcf12a82d0ebfe853":int:16:char*:"01b1b656ad86d8e19d5dc86292b3a192fdf6e0dd37877bad14822fa00190cab265f90d3f02057b6f54d6ecb14491e5adeacebc48bf0ebd2a2ad26d402e54f61651":int:16:char*:"02f246ef451ed3eebb9a310200cc25859c048e4be798302991112eb68ce6db674e280da21feded1ae74880ca522b18db249385012827c515f0e466a1ffa691d98170574e9d0eadb087586ca48933da3cc953d95bd0ed50de10ddcb6736107d6c831c7f663e833ca4c097e700ce0fb945f88fb85fe8e5a773172565b914a471a443":int:16:char*:"010001":exp:0:exp:0:hex:"8b769528884a0d1ffd090cf102993e796dadcfbddd38e44ff6324ca451":hex:"fcf9f0e1f199a3d1d0da681c5b8606fc642939f7":hex:"02a5f0a858a0864a4f65017a7d69454f3f973a2999839b7bbc48bf78641169179556f595fa41f6ff18e286c2783079bc0910ee9cc34f49ba681124f923dfa88f426141a368a5f5a930c628c2c3c200e18a7644721a0cbec6dd3f6279bde3e8f2be5e2d4ee56f97e7ceaf33054be7042bd91a63bb09f897bd41e81197dee99b11af":int:0 + +RSASSA-PSS Signature Example 3_2 (verify) +3:int:1026:int:16:char*:"02f246ef451ed3eebb9a310200cc25859c048e4be798302991112eb68ce6db674e280da21feded1ae74880ca522b18db249385012827c515f0e466a1ffa691d98170574e9d0eadb087586ca48933da3cc953d95bd0ed50de10ddcb6736107d6c831c7f663e833ca4c097e700ce0fb945f88fb85fe8e5a773172565b914a471a443":int:16:char*:"010001":exp:0:exp:0:hex:"8b769528884a0d1ffd090cf102993e796dadcfbddd38e44ff6324ca451":char*:"fcf9f0e1f199a3d1d0da681c5b8606fc642939f7":hex:"02a5f0a858a0864a4f65017a7d69454f3f973a2999839b7bbc48bf78641169179556f595fa41f6ff18e286c2783079bc0910ee9cc34f49ba681124f923dfa88f426141a368a5f5a930c628c2c3c200e18a7644721a0cbec6dd3f6279bde3e8f2be5e2d4ee56f97e7ceaf33054be7042bd91a63bb09f897bd41e81197dee99b11af":int:0 + +RSASSA-PSS Signature Example 3_3 +2:int:1026:int:16:char*:"01bd36e18ece4b0fdb2e9c9d548bd1a7d6e2c21c6fdc35074a1d05b1c6c8b3d558ea2639c9a9a421680169317252558bd148ad215aac550e2dcf12a82d0ebfe853":int:16:char*:"01b1b656ad86d8e19d5dc86292b3a192fdf6e0dd37877bad14822fa00190cab265f90d3f02057b6f54d6ecb14491e5adeacebc48bf0ebd2a2ad26d402e54f61651":int:16:char*:"02f246ef451ed3eebb9a310200cc25859c048e4be798302991112eb68ce6db674e280da21feded1ae74880ca522b18db249385012827c515f0e466a1ffa691d98170574e9d0eadb087586ca48933da3cc953d95bd0ed50de10ddcb6736107d6c831c7f663e833ca4c097e700ce0fb945f88fb85fe8e5a773172565b914a471a443":int:16:char*:"010001":exp:0:exp:0:hex:"1abdba489c5ada2f995ed16f19d5a94d9e6ec34a8d84f84557d26e5ef9b02b22887e3f9a4b690ad1149209c20c61431f0c017c36c2657b35d7b07d3f5ad8708507a9c1b831df835a56f831071814ea5d3d8d8f6ade40cba38b42db7a2d3d7a29c8f0a79a7838cf58a9757fa2fe4c40df9baa193bfc6f92b123ad57b07ace3e6ac068c9f106afd9eeb03b4f37c25dbfbcfb3071f6f9771766d072f3bb070af6605532973ae25051":hex:"986e7c43dbb671bd41b9a7f4b6afc80e805f2423":hex:"0244bcd1c8c16955736c803be401272e18cb990811b14f72db964124d5fa760649cbb57afb8755dbb62bf51f466cf23a0a1607576e983d778fceffa92df7548aea8ea4ecad2c29dd9f95bc07fe91ecf8bee255bfe8762fd7690aa9bfa4fa0849ef728c2c42c4532364522df2ab7f9f8a03b63f7a499175828668f5ef5a29e3802c":int:0 + +RSASSA-PSS Signature Example 3_3 (verify) +3:int:1026:int:16:char*:"02f246ef451ed3eebb9a310200cc25859c048e4be798302991112eb68ce6db674e280da21feded1ae74880ca522b18db249385012827c515f0e466a1ffa691d98170574e9d0eadb087586ca48933da3cc953d95bd0ed50de10ddcb6736107d6c831c7f663e833ca4c097e700ce0fb945f88fb85fe8e5a773172565b914a471a443":int:16:char*:"010001":exp:0:exp:0:hex:"1abdba489c5ada2f995ed16f19d5a94d9e6ec34a8d84f84557d26e5ef9b02b22887e3f9a4b690ad1149209c20c61431f0c017c36c2657b35d7b07d3f5ad8708507a9c1b831df835a56f831071814ea5d3d8d8f6ade40cba38b42db7a2d3d7a29c8f0a79a7838cf58a9757fa2fe4c40df9baa193bfc6f92b123ad57b07ace3e6ac068c9f106afd9eeb03b4f37c25dbfbcfb3071f6f9771766d072f3bb070af6605532973ae25051":char*:"986e7c43dbb671bd41b9a7f4b6afc80e805f2423":hex:"0244bcd1c8c16955736c803be401272e18cb990811b14f72db964124d5fa760649cbb57afb8755dbb62bf51f466cf23a0a1607576e983d778fceffa92df7548aea8ea4ecad2c29dd9f95bc07fe91ecf8bee255bfe8762fd7690aa9bfa4fa0849ef728c2c42c4532364522df2ab7f9f8a03b63f7a499175828668f5ef5a29e3802c":int:0 + +RSASSA-PSS Signature Example 3_4 +2:int:1026:int:16:char*:"01bd36e18ece4b0fdb2e9c9d548bd1a7d6e2c21c6fdc35074a1d05b1c6c8b3d558ea2639c9a9a421680169317252558bd148ad215aac550e2dcf12a82d0ebfe853":int:16:char*:"01b1b656ad86d8e19d5dc86292b3a192fdf6e0dd37877bad14822fa00190cab265f90d3f02057b6f54d6ecb14491e5adeacebc48bf0ebd2a2ad26d402e54f61651":int:16:char*:"02f246ef451ed3eebb9a310200cc25859c048e4be798302991112eb68ce6db674e280da21feded1ae74880ca522b18db249385012827c515f0e466a1ffa691d98170574e9d0eadb087586ca48933da3cc953d95bd0ed50de10ddcb6736107d6c831c7f663e833ca4c097e700ce0fb945f88fb85fe8e5a773172565b914a471a443":int:16:char*:"010001":exp:0:exp:0:hex:"8fb431f5ee792b6c2ac7db53cc428655aeb32d03f4e889c5c25de683c461b53acf89f9f8d3aabdf6b9f0c2a1de12e15b49edb3919a652fe9491c25a7fce1f722c2543608b69dc375ec":hex:"f8312d9c8eea13ec0a4c7b98120c87509087c478":hex:"0196f12a005b98129c8df13c4cb16f8aa887d3c40d96df3a88e7532ef39cd992f273abc370bc1be6f097cfebbf0118fd9ef4b927155f3df22b904d90702d1f7ba7a52bed8b8942f412cd7bd676c9d18e170391dcd345c06a730964b3f30bcce0bb20ba106f9ab0eeb39cf8a6607f75c0347f0af79f16afa081d2c92d1ee6f836b8":int:0 + +RSASSA-PSS Signature Example 3_4 (verify) +3:int:1026:int:16:char*:"02f246ef451ed3eebb9a310200cc25859c048e4be798302991112eb68ce6db674e280da21feded1ae74880ca522b18db249385012827c515f0e466a1ffa691d98170574e9d0eadb087586ca48933da3cc953d95bd0ed50de10ddcb6736107d6c831c7f663e833ca4c097e700ce0fb945f88fb85fe8e5a773172565b914a471a443":int:16:char*:"010001":exp:0:exp:0:hex:"8fb431f5ee792b6c2ac7db53cc428655aeb32d03f4e889c5c25de683c461b53acf89f9f8d3aabdf6b9f0c2a1de12e15b49edb3919a652fe9491c25a7fce1f722c2543608b69dc375ec":char*:"f8312d9c8eea13ec0a4c7b98120c87509087c478":hex:"0196f12a005b98129c8df13c4cb16f8aa887d3c40d96df3a88e7532ef39cd992f273abc370bc1be6f097cfebbf0118fd9ef4b927155f3df22b904d90702d1f7ba7a52bed8b8942f412cd7bd676c9d18e170391dcd345c06a730964b3f30bcce0bb20ba106f9ab0eeb39cf8a6607f75c0347f0af79f16afa081d2c92d1ee6f836b8":int:0 + +RSASSA-PSS Signature Example 3_5 +2:int:1026:int:16:char*:"01bd36e18ece4b0fdb2e9c9d548bd1a7d6e2c21c6fdc35074a1d05b1c6c8b3d558ea2639c9a9a421680169317252558bd148ad215aac550e2dcf12a82d0ebfe853":int:16:char*:"01b1b656ad86d8e19d5dc86292b3a192fdf6e0dd37877bad14822fa00190cab265f90d3f02057b6f54d6ecb14491e5adeacebc48bf0ebd2a2ad26d402e54f61651":int:16:char*:"02f246ef451ed3eebb9a310200cc25859c048e4be798302991112eb68ce6db674e280da21feded1ae74880ca522b18db249385012827c515f0e466a1ffa691d98170574e9d0eadb087586ca48933da3cc953d95bd0ed50de10ddcb6736107d6c831c7f663e833ca4c097e700ce0fb945f88fb85fe8e5a773172565b914a471a443":int:16:char*:"010001":exp:0:exp:0:hex:"fef4161dfaaf9c5295051dfc1ff3810c8c9ec2e866f7075422c8ec4216a9c4ff49427d483cae10c8534a41b2fd15fee06960ec6fb3f7a7e94a2f8a2e3e43dc4a40576c3097ac953b1de86f0b4ed36d644f23ae14425529622464ca0cbf0b1741347238157fab59e4de5524096d62baec63ac64":hex:"50327efec6292f98019fc67a2a6638563e9b6e2d":hex:"021eca3ab4892264ec22411a752d92221076d4e01c0e6f0dde9afd26ba5acf6d739ef987545d16683e5674c9e70f1de649d7e61d48d0caeb4fb4d8b24fba84a6e3108fee7d0705973266ac524b4ad280f7ae17dc59d96d3351586b5a3bdb895d1e1f7820ac6135d8753480998382ba32b7349559608c38745290a85ef4e9f9bd83":int:0 + +RSASSA-PSS Signature Example 3_5 (verify) +3:int:1026:int:16:char*:"02f246ef451ed3eebb9a310200cc25859c048e4be798302991112eb68ce6db674e280da21feded1ae74880ca522b18db249385012827c515f0e466a1ffa691d98170574e9d0eadb087586ca48933da3cc953d95bd0ed50de10ddcb6736107d6c831c7f663e833ca4c097e700ce0fb945f88fb85fe8e5a773172565b914a471a443":int:16:char*:"010001":exp:0:exp:0:hex:"fef4161dfaaf9c5295051dfc1ff3810c8c9ec2e866f7075422c8ec4216a9c4ff49427d483cae10c8534a41b2fd15fee06960ec6fb3f7a7e94a2f8a2e3e43dc4a40576c3097ac953b1de86f0b4ed36d644f23ae14425529622464ca0cbf0b1741347238157fab59e4de5524096d62baec63ac64":char*:"50327efec6292f98019fc67a2a6638563e9b6e2d":hex:"021eca3ab4892264ec22411a752d92221076d4e01c0e6f0dde9afd26ba5acf6d739ef987545d16683e5674c9e70f1de649d7e61d48d0caeb4fb4d8b24fba84a6e3108fee7d0705973266ac524b4ad280f7ae17dc59d96d3351586b5a3bdb895d1e1f7820ac6135d8753480998382ba32b7349559608c38745290a85ef4e9f9bd83":int:0 + +RSASSA-PSS Signature Example 3_6 +2:int:1026:int:16:char*:"01bd36e18ece4b0fdb2e9c9d548bd1a7d6e2c21c6fdc35074a1d05b1c6c8b3d558ea2639c9a9a421680169317252558bd148ad215aac550e2dcf12a82d0ebfe853":int:16:char*:"01b1b656ad86d8e19d5dc86292b3a192fdf6e0dd37877bad14822fa00190cab265f90d3f02057b6f54d6ecb14491e5adeacebc48bf0ebd2a2ad26d402e54f61651":int:16:char*:"02f246ef451ed3eebb9a310200cc25859c048e4be798302991112eb68ce6db674e280da21feded1ae74880ca522b18db249385012827c515f0e466a1ffa691d98170574e9d0eadb087586ca48933da3cc953d95bd0ed50de10ddcb6736107d6c831c7f663e833ca4c097e700ce0fb945f88fb85fe8e5a773172565b914a471a443":int:16:char*:"010001":exp:0:exp:0:hex:"efd237bb098a443aeeb2bf6c3f8c81b8c01b7fcb3feb":hex:"b0de3fc25b65f5af96b1d5cc3b27d0c6053087b3":hex:"012fafec862f56e9e92f60ab0c77824f4299a0ca734ed26e0644d5d222c7f0bde03964f8e70a5cb65ed44e44d56ae0edf1ff86ca032cc5dd4404dbb76ab854586c44eed8336d08d457ce6c03693b45c0f1efef93624b95b8ec169c616d20e5538ebc0b6737a6f82b4bc0570924fc6b35759a3348426279f8b3d7744e2d222426ce":int:0 + +RSASSA-PSS Signature Example 3_6 (verify) +3:int:1026:int:16:char*:"02f246ef451ed3eebb9a310200cc25859c048e4be798302991112eb68ce6db674e280da21feded1ae74880ca522b18db249385012827c515f0e466a1ffa691d98170574e9d0eadb087586ca48933da3cc953d95bd0ed50de10ddcb6736107d6c831c7f663e833ca4c097e700ce0fb945f88fb85fe8e5a773172565b914a471a443":int:16:char*:"010001":exp:0:exp:0:hex:"efd237bb098a443aeeb2bf6c3f8c81b8c01b7fcb3feb":char*:"b0de3fc25b65f5af96b1d5cc3b27d0c6053087b3":hex:"012fafec862f56e9e92f60ab0c77824f4299a0ca734ed26e0644d5d222c7f0bde03964f8e70a5cb65ed44e44d56ae0edf1ff86ca032cc5dd4404dbb76ab854586c44eed8336d08d457ce6c03693b45c0f1efef93624b95b8ec169c616d20e5538ebc0b6737a6f82b4bc0570924fc6b35759a3348426279f8b3d7744e2d222426ce":int:0 + +RSASSA-PSS Signature Example 4_1 +2:int:1027:int:16:char*:"029232336d2838945dba9dd7723f4e624a05f7375b927a87abe6a893a1658fd49f47f6c7b0fa596c65fa68a23f0ab432962d18d4343bd6fd671a5ea8d148413995":int:16:char*:"020ef5efe7c5394aed2272f7e81a74f4c02d145894cb1b3cab23a9a0710a2afc7e3329acbb743d01f680c4d02afb4c8fde7e20930811bb2b995788b5e872c20bb1":int:16:char*:"054adb7886447efe6f57e0368f06cf52b0a3370760d161cef126b91be7f89c421b62a6ec1da3c311d75ed50e0ab5fff3fd338acc3aa8a4e77ee26369acb81ba900fa83f5300cf9bb6c53ad1dc8a178b815db4235a9a9da0c06de4e615ea1277ce559e9c108de58c14a81aa77f5a6f8d1335494498848c8b95940740be7bf7c3705":int:16:char*:"010001":exp:0:exp:0:hex:"9fb03b827c8217d9":hex:"ed7c98c95f30974fbe4fbddcf0f28d6021c0e91d":hex:"0323d5b7bf20ba4539289ae452ae4297080feff4518423ff4811a817837e7d82f1836cdfab54514ff0887bddeebf40bf99b047abc3ecfa6a37a3ef00f4a0c4a88aae0904b745c846c4107e8797723e8ac810d9e3d95dfa30ff4966f4d75d13768d20857f2b1406f264cfe75e27d7652f4b5ed3575f28a702f8c4ed9cf9b2d44948":int:0 + +RSASSA-PSS Signature Example 4_1 (verify) +3:int:1027:int:16:char*:"054adb7886447efe6f57e0368f06cf52b0a3370760d161cef126b91be7f89c421b62a6ec1da3c311d75ed50e0ab5fff3fd338acc3aa8a4e77ee26369acb81ba900fa83f5300cf9bb6c53ad1dc8a178b815db4235a9a9da0c06de4e615ea1277ce559e9c108de58c14a81aa77f5a6f8d1335494498848c8b95940740be7bf7c3705":int:16:char*:"010001":exp:0:exp:0:hex:"9fb03b827c8217d9":char*:"ed7c98c95f30974fbe4fbddcf0f28d6021c0e91d":hex:"0323d5b7bf20ba4539289ae452ae4297080feff4518423ff4811a817837e7d82f1836cdfab54514ff0887bddeebf40bf99b047abc3ecfa6a37a3ef00f4a0c4a88aae0904b745c846c4107e8797723e8ac810d9e3d95dfa30ff4966f4d75d13768d20857f2b1406f264cfe75e27d7652f4b5ed3575f28a702f8c4ed9cf9b2d44948":int:0 + +RSASSA-PSS Signature Example 4_2 +2:int:1027:int:16:char*:"029232336d2838945dba9dd7723f4e624a05f7375b927a87abe6a893a1658fd49f47f6c7b0fa596c65fa68a23f0ab432962d18d4343bd6fd671a5ea8d148413995":int:16:char*:"020ef5efe7c5394aed2272f7e81a74f4c02d145894cb1b3cab23a9a0710a2afc7e3329acbb743d01f680c4d02afb4c8fde7e20930811bb2b995788b5e872c20bb1":int:16:char*:"054adb7886447efe6f57e0368f06cf52b0a3370760d161cef126b91be7f89c421b62a6ec1da3c311d75ed50e0ab5fff3fd338acc3aa8a4e77ee26369acb81ba900fa83f5300cf9bb6c53ad1dc8a178b815db4235a9a9da0c06de4e615ea1277ce559e9c108de58c14a81aa77f5a6f8d1335494498848c8b95940740be7bf7c3705":int:16:char*:"010001":exp:0:exp:0:hex:"0ca2ad77797ece86de5bf768750ddb5ed6a3116ad99bbd17edf7f782f0db1cd05b0f677468c5ea420dc116b10e80d110de2b0461ea14a38be68620392e7e893cb4ea9393fb886c20ff790642305bf302003892e54df9f667509dc53920df583f50a3dd61abb6fab75d600377e383e6aca6710eeea27156e06752c94ce25ae99fcbf8592dbe2d7e27453cb44de07100ebb1a2a19811a478adbeab270f94e8fe369d90b3ca612f9f":hex:"22d71d54363a4217aa55113f059b3384e3e57e44":hex:"049d0185845a264d28feb1e69edaec090609e8e46d93abb38371ce51f4aa65a599bdaaa81d24fba66a08a116cb644f3f1e653d95c89db8bbd5daac2709c8984000178410a7c6aa8667ddc38c741f710ec8665aa9052be929d4e3b16782c1662114c5414bb0353455c392fc28f3db59054b5f365c49e1d156f876ee10cb4fd70598":int:0 + +RSASSA-PSS Signature Example 4_2 (verify) +3:int:1027:int:16:char*:"054adb7886447efe6f57e0368f06cf52b0a3370760d161cef126b91be7f89c421b62a6ec1da3c311d75ed50e0ab5fff3fd338acc3aa8a4e77ee26369acb81ba900fa83f5300cf9bb6c53ad1dc8a178b815db4235a9a9da0c06de4e615ea1277ce559e9c108de58c14a81aa77f5a6f8d1335494498848c8b95940740be7bf7c3705":int:16:char*:"010001":exp:0:exp:0:hex:"0ca2ad77797ece86de5bf768750ddb5ed6a3116ad99bbd17edf7f782f0db1cd05b0f677468c5ea420dc116b10e80d110de2b0461ea14a38be68620392e7e893cb4ea9393fb886c20ff790642305bf302003892e54df9f667509dc53920df583f50a3dd61abb6fab75d600377e383e6aca6710eeea27156e06752c94ce25ae99fcbf8592dbe2d7e27453cb44de07100ebb1a2a19811a478adbeab270f94e8fe369d90b3ca612f9f":char*:"22d71d54363a4217aa55113f059b3384e3e57e44":hex:"049d0185845a264d28feb1e69edaec090609e8e46d93abb38371ce51f4aa65a599bdaaa81d24fba66a08a116cb644f3f1e653d95c89db8bbd5daac2709c8984000178410a7c6aa8667ddc38c741f710ec8665aa9052be929d4e3b16782c1662114c5414bb0353455c392fc28f3db59054b5f365c49e1d156f876ee10cb4fd70598":int:0 + +RSASSA-PSS Signature Example 4_3 +2:int:1027:int:16:char*:"029232336d2838945dba9dd7723f4e624a05f7375b927a87abe6a893a1658fd49f47f6c7b0fa596c65fa68a23f0ab432962d18d4343bd6fd671a5ea8d148413995":int:16:char*:"020ef5efe7c5394aed2272f7e81a74f4c02d145894cb1b3cab23a9a0710a2afc7e3329acbb743d01f680c4d02afb4c8fde7e20930811bb2b995788b5e872c20bb1":int:16:char*:"054adb7886447efe6f57e0368f06cf52b0a3370760d161cef126b91be7f89c421b62a6ec1da3c311d75ed50e0ab5fff3fd338acc3aa8a4e77ee26369acb81ba900fa83f5300cf9bb6c53ad1dc8a178b815db4235a9a9da0c06de4e615ea1277ce559e9c108de58c14a81aa77f5a6f8d1335494498848c8b95940740be7bf7c3705":int:16:char*:"010001":exp:0:exp:0:hex:"288062afc08fcdb7c5f8650b29837300461dd5676c17a20a3c8fb5148949e3f73d66b3ae82c7240e27c5b3ec4328ee7d6ddf6a6a0c9b5b15bcda196a9d0c76b119d534d85abd123962d583b76ce9d180bce1ca":hex:"4af870fbc6516012ca916c70ba862ac7e8243617":hex:"03fbc410a2ced59500fb99f9e2af2781ada74e13145624602782e2994813eefca0519ecd253b855fb626a90d771eae028b0c47a199cbd9f8e3269734af4163599090713a3fa910fa0960652721432b971036a7181a2bc0cab43b0b598bc6217461d7db305ff7e954c5b5bb231c39e791af6bcfa76b147b081321f72641482a2aad":int:0 + +RSASSA-PSS Signature Example 4_3 (verify) +3:int:1027:int:16:char*:"054adb7886447efe6f57e0368f06cf52b0a3370760d161cef126b91be7f89c421b62a6ec1da3c311d75ed50e0ab5fff3fd338acc3aa8a4e77ee26369acb81ba900fa83f5300cf9bb6c53ad1dc8a178b815db4235a9a9da0c06de4e615ea1277ce559e9c108de58c14a81aa77f5a6f8d1335494498848c8b95940740be7bf7c3705":int:16:char*:"010001":exp:0:exp:0:hex:"288062afc08fcdb7c5f8650b29837300461dd5676c17a20a3c8fb5148949e3f73d66b3ae82c7240e27c5b3ec4328ee7d6ddf6a6a0c9b5b15bcda196a9d0c76b119d534d85abd123962d583b76ce9d180bce1ca":char*:"4af870fbc6516012ca916c70ba862ac7e8243617":hex:"03fbc410a2ced59500fb99f9e2af2781ada74e13145624602782e2994813eefca0519ecd253b855fb626a90d771eae028b0c47a199cbd9f8e3269734af4163599090713a3fa910fa0960652721432b971036a7181a2bc0cab43b0b598bc6217461d7db305ff7e954c5b5bb231c39e791af6bcfa76b147b081321f72641482a2aad":int:0 + +RSASSA-PSS Signature Example 4_4 +2:int:1027:int:16:char*:"029232336d2838945dba9dd7723f4e624a05f7375b927a87abe6a893a1658fd49f47f6c7b0fa596c65fa68a23f0ab432962d18d4343bd6fd671a5ea8d148413995":int:16:char*:"020ef5efe7c5394aed2272f7e81a74f4c02d145894cb1b3cab23a9a0710a2afc7e3329acbb743d01f680c4d02afb4c8fde7e20930811bb2b995788b5e872c20bb1":int:16:char*:"054adb7886447efe6f57e0368f06cf52b0a3370760d161cef126b91be7f89c421b62a6ec1da3c311d75ed50e0ab5fff3fd338acc3aa8a4e77ee26369acb81ba900fa83f5300cf9bb6c53ad1dc8a178b815db4235a9a9da0c06de4e615ea1277ce559e9c108de58c14a81aa77f5a6f8d1335494498848c8b95940740be7bf7c3705":int:16:char*:"010001":exp:0:exp:0:hex:"6f4f9ab9501199cef55c6cf408fe7b36c557c49d420a4763d2463c8ad44b3cfc5be2742c0e7d9b0f6608f08c7f47b693ee":hex:"40d2e180fae1eac439c190b56c2c0e14ddf9a226":hex:"0486644bc66bf75d28335a6179b10851f43f09bded9fac1af33252bb9953ba4298cd6466b27539a70adaa3f89b3db3c74ab635d122f4ee7ce557a61e59b82ffb786630e5f9db53c77d9a0c12fab5958d4c2ce7daa807cd89ba2cc7fcd02ff470ca67b229fcce814c852c73cc93bea35be68459ce478e9d4655d121c8472f371d4f":int:0 + +RSASSA-PSS Signature Example 4_4 (verify) +3:int:1027:int:16:char*:"054adb7886447efe6f57e0368f06cf52b0a3370760d161cef126b91be7f89c421b62a6ec1da3c311d75ed50e0ab5fff3fd338acc3aa8a4e77ee26369acb81ba900fa83f5300cf9bb6c53ad1dc8a178b815db4235a9a9da0c06de4e615ea1277ce559e9c108de58c14a81aa77f5a6f8d1335494498848c8b95940740be7bf7c3705":int:16:char*:"010001":exp:0:exp:0:hex:"6f4f9ab9501199cef55c6cf408fe7b36c557c49d420a4763d2463c8ad44b3cfc5be2742c0e7d9b0f6608f08c7f47b693ee":char*:"40d2e180fae1eac439c190b56c2c0e14ddf9a226":hex:"0486644bc66bf75d28335a6179b10851f43f09bded9fac1af33252bb9953ba4298cd6466b27539a70adaa3f89b3db3c74ab635d122f4ee7ce557a61e59b82ffb786630e5f9db53c77d9a0c12fab5958d4c2ce7daa807cd89ba2cc7fcd02ff470ca67b229fcce814c852c73cc93bea35be68459ce478e9d4655d121c8472f371d4f":int:0 + +RSASSA-PSS Signature Example 4_5 +2:int:1027:int:16:char*:"029232336d2838945dba9dd7723f4e624a05f7375b927a87abe6a893a1658fd49f47f6c7b0fa596c65fa68a23f0ab432962d18d4343bd6fd671a5ea8d148413995":int:16:char*:"020ef5efe7c5394aed2272f7e81a74f4c02d145894cb1b3cab23a9a0710a2afc7e3329acbb743d01f680c4d02afb4c8fde7e20930811bb2b995788b5e872c20bb1":int:16:char*:"054adb7886447efe6f57e0368f06cf52b0a3370760d161cef126b91be7f89c421b62a6ec1da3c311d75ed50e0ab5fff3fd338acc3aa8a4e77ee26369acb81ba900fa83f5300cf9bb6c53ad1dc8a178b815db4235a9a9da0c06de4e615ea1277ce559e9c108de58c14a81aa77f5a6f8d1335494498848c8b95940740be7bf7c3705":int:16:char*:"010001":exp:0:exp:0:hex:"e17d20385d501955823c3f666254c1d3dd36ad5168b8f18d286fdcf67a7dad94097085fab7ed86fe2142a28771717997ef1a7a08884efc39356d76077aaf82459a7fad45848875f2819b098937fe923bcc9dc442d72d754d812025090c9bc03db3080c138dd63b355d0b4b85d6688ac19f4de15084a0ba4e373b93ef4a555096691915dc23c00e954cdeb20a47cd55d16c3d8681d46ed7f2ed5ea42795be17baed25f0f4d113b3636addd585f16a8b5aec0c8fa9c5f03cbf3b9b73":hex:"2497dc2b4615dfae5a663d49ffd56bf7efc11304":hex:"022a80045353904cb30cbb542d7d4990421a6eec16a8029a8422adfd22d6aff8c4cc0294af110a0c067ec86a7d364134459bb1ae8ff836d5a8a2579840996b320b19f13a13fad378d931a65625dae2739f0c53670b35d9d3cbac08e733e4ec2b83af4b9196d63e7c4ff1ddeae2a122791a125bfea8deb0de8ccf1f4ffaf6e6fb0a":int:0 + +RSASSA-PSS Signature Example 4_5 (verify) +3:int:1027:int:16:char*:"054adb7886447efe6f57e0368f06cf52b0a3370760d161cef126b91be7f89c421b62a6ec1da3c311d75ed50e0ab5fff3fd338acc3aa8a4e77ee26369acb81ba900fa83f5300cf9bb6c53ad1dc8a178b815db4235a9a9da0c06de4e615ea1277ce559e9c108de58c14a81aa77f5a6f8d1335494498848c8b95940740be7bf7c3705":int:16:char*:"010001":exp:0:exp:0:hex:"e17d20385d501955823c3f666254c1d3dd36ad5168b8f18d286fdcf67a7dad94097085fab7ed86fe2142a28771717997ef1a7a08884efc39356d76077aaf82459a7fad45848875f2819b098937fe923bcc9dc442d72d754d812025090c9bc03db3080c138dd63b355d0b4b85d6688ac19f4de15084a0ba4e373b93ef4a555096691915dc23c00e954cdeb20a47cd55d16c3d8681d46ed7f2ed5ea42795be17baed25f0f4d113b3636addd585f16a8b5aec0c8fa9c5f03cbf3b9b73":char*:"2497dc2b4615dfae5a663d49ffd56bf7efc11304":hex:"022a80045353904cb30cbb542d7d4990421a6eec16a8029a8422adfd22d6aff8c4cc0294af110a0c067ec86a7d364134459bb1ae8ff836d5a8a2579840996b320b19f13a13fad378d931a65625dae2739f0c53670b35d9d3cbac08e733e4ec2b83af4b9196d63e7c4ff1ddeae2a122791a125bfea8deb0de8ccf1f4ffaf6e6fb0a":int:0 + +RSASSA-PSS Signature Example 4_6 +2:int:1027:int:16:char*:"029232336d2838945dba9dd7723f4e624a05f7375b927a87abe6a893a1658fd49f47f6c7b0fa596c65fa68a23f0ab432962d18d4343bd6fd671a5ea8d148413995":int:16:char*:"020ef5efe7c5394aed2272f7e81a74f4c02d145894cb1b3cab23a9a0710a2afc7e3329acbb743d01f680c4d02afb4c8fde7e20930811bb2b995788b5e872c20bb1":int:16:char*:"054adb7886447efe6f57e0368f06cf52b0a3370760d161cef126b91be7f89c421b62a6ec1da3c311d75ed50e0ab5fff3fd338acc3aa8a4e77ee26369acb81ba900fa83f5300cf9bb6c53ad1dc8a178b815db4235a9a9da0c06de4e615ea1277ce559e9c108de58c14a81aa77f5a6f8d1335494498848c8b95940740be7bf7c3705":int:16:char*:"010001":exp:0:exp:0:hex:"afbc19d479249018fdf4e09f618726440495de11ddeee38872d775fcea74a23896b5343c9c38d46af0dba224d047580cc60a65e9391cf9b59b36a860598d4e8216722f993b91cfae87bc255af89a6a199bca4a391eadbc3a24903c0bd667368f6be78e3feabfb4ffd463122763740ffbbefeab9a25564bc5d1c24c93e422f75073e2ad72bf45b10df00b52a147128e73fee33fa3f0577d77f80fbc2df1bed313290c12777f50":hex:"a334db6faebf11081a04f87c2d621cdec7930b9b":hex:"00938dcb6d583046065f69c78da7a1f1757066a7fa75125a9d2929f0b79a60b627b082f11f5b196f28eb9daa6f21c05e5140f6aef1737d2023075c05ecf04a028c686a2ab3e7d5a0664f295ce12995e890908b6ad21f0839eb65b70393a7b5afd9871de0caa0cedec5b819626756209d13ab1e7bb9546a26ff37e9a51af9fd562e":int:0 + +RSASSA-PSS Signature Example 4_6 (verify) +3:int:1027:int:16:char*:"054adb7886447efe6f57e0368f06cf52b0a3370760d161cef126b91be7f89c421b62a6ec1da3c311d75ed50e0ab5fff3fd338acc3aa8a4e77ee26369acb81ba900fa83f5300cf9bb6c53ad1dc8a178b815db4235a9a9da0c06de4e615ea1277ce559e9c108de58c14a81aa77f5a6f8d1335494498848c8b95940740be7bf7c3705":int:16:char*:"010001":exp:0:exp:0:hex:"afbc19d479249018fdf4e09f618726440495de11ddeee38872d775fcea74a23896b5343c9c38d46af0dba224d047580cc60a65e9391cf9b59b36a860598d4e8216722f993b91cfae87bc255af89a6a199bca4a391eadbc3a24903c0bd667368f6be78e3feabfb4ffd463122763740ffbbefeab9a25564bc5d1c24c93e422f75073e2ad72bf45b10df00b52a147128e73fee33fa3f0577d77f80fbc2df1bed313290c12777f50":char*:"a334db6faebf11081a04f87c2d621cdec7930b9b":hex:"00938dcb6d583046065f69c78da7a1f1757066a7fa75125a9d2929f0b79a60b627b082f11f5b196f28eb9daa6f21c05e5140f6aef1737d2023075c05ecf04a028c686a2ab3e7d5a0664f295ce12995e890908b6ad21f0839eb65b70393a7b5afd9871de0caa0cedec5b819626756209d13ab1e7bb9546a26ff37e9a51af9fd562e":int:0 + +RSASSA-PSS Signature Example 5_1 +2:int:1028:int:16:char*:"03f2f331f4142d4f24b43aa10279a89652d4e7537221a1a7b2a25deb551e5de9ac497411c227a94e45f91c2d1c13cc046cf4ce14e32d058734210d44a87ee1b73f":int:16:char*:"034f090d73b55803030cf0361a5d8081bfb79f851523feac0a2124d08d4013ff08487771a870d0479dc0686c62f7718dfecf024b17c9267678059171339cc00839":int:16:char*:"0d10f661f29940f5ed39aa260966deb47843679d2b6fb25b3de370f3ac7c19916391fd25fb527ebfa6a4b4df45a1759d996c4bb4ebd18828c44fc52d0191871740525f47a4b0cc8da325ed8aa676b0d0f626e0a77f07692170acac8082f42faa7dc7cd123e730e31a87985204cabcbe6670d43a2dd2b2ddef5e05392fc213bc507":int:16:char*:"010001":exp:0:exp:0:hex:"30c7d557458b436decfdc14d06cb7b96b06718c48d7de57482a868ae7f065870a6216506d11b779323dfdf046cf5775129134b4d5689e4d9c0ce1e12d7d4b06cb5fc5820decfa41baf59bf257b32f025b7679b445b9499c92555145885992f1b76f84891ee4d3be0f5150fd5901e3a4c8ed43fd36b61d022e65ad5008dbf33293c22bfbfd07321f0f1d5fa9fdf0014c2fcb0358aad0e354b0d29":hex:"081b233b43567750bd6e78f396a88b9f6a445151":hex:"0ba373f76e0921b70a8fbfe622f0bf77b28a3db98e361051c3d7cb92ad0452915a4de9c01722f6823eeb6adf7e0ca8290f5de3e549890ac2a3c5950ab217ba58590894952de96f8df111b2575215da6c161590c745be612476ee578ed384ab33e3ece97481a252f5c79a98b5532ae00cdd62f2ecc0cd1baefe80d80b962193ec1d":int:0 + +RSASSA-PSS Signature Example 5_1 (verify) +3:int:1028:int:16:char*:"0d10f661f29940f5ed39aa260966deb47843679d2b6fb25b3de370f3ac7c19916391fd25fb527ebfa6a4b4df45a1759d996c4bb4ebd18828c44fc52d0191871740525f47a4b0cc8da325ed8aa676b0d0f626e0a77f07692170acac8082f42faa7dc7cd123e730e31a87985204cabcbe6670d43a2dd2b2ddef5e05392fc213bc507":int:16:char*:"010001":exp:0:exp:0:hex:"30c7d557458b436decfdc14d06cb7b96b06718c48d7de57482a868ae7f065870a6216506d11b779323dfdf046cf5775129134b4d5689e4d9c0ce1e12d7d4b06cb5fc5820decfa41baf59bf257b32f025b7679b445b9499c92555145885992f1b76f84891ee4d3be0f5150fd5901e3a4c8ed43fd36b61d022e65ad5008dbf33293c22bfbfd07321f0f1d5fa9fdf0014c2fcb0358aad0e354b0d29":char*:"081b233b43567750bd6e78f396a88b9f6a445151":hex:"0ba373f76e0921b70a8fbfe622f0bf77b28a3db98e361051c3d7cb92ad0452915a4de9c01722f6823eeb6adf7e0ca8290f5de3e549890ac2a3c5950ab217ba58590894952de96f8df111b2575215da6c161590c745be612476ee578ed384ab33e3ece97481a252f5c79a98b5532ae00cdd62f2ecc0cd1baefe80d80b962193ec1d":int:0 + +RSASSA-PSS Signature Example 5_2 +2:int:1028:int:16:char*:"03f2f331f4142d4f24b43aa10279a89652d4e7537221a1a7b2a25deb551e5de9ac497411c227a94e45f91c2d1c13cc046cf4ce14e32d058734210d44a87ee1b73f":int:16:char*:"034f090d73b55803030cf0361a5d8081bfb79f851523feac0a2124d08d4013ff08487771a870d0479dc0686c62f7718dfecf024b17c9267678059171339cc00839":int:16:char*:"0d10f661f29940f5ed39aa260966deb47843679d2b6fb25b3de370f3ac7c19916391fd25fb527ebfa6a4b4df45a1759d996c4bb4ebd18828c44fc52d0191871740525f47a4b0cc8da325ed8aa676b0d0f626e0a77f07692170acac8082f42faa7dc7cd123e730e31a87985204cabcbe6670d43a2dd2b2ddef5e05392fc213bc507":int:16:char*:"010001":exp:0:exp:0:hex:"e7b32e1556ea1b2795046ac69739d22ac8966bf11c116f614b166740e96b90653e5750945fcf772186c03790a07fda323e1a61916b06ee2157db3dff80d67d5e39a53ae268c8f09ed99a732005b0bc6a04af4e08d57a00e7201b3060efaadb73113bfc087fd837093aa25235b8c149f56215f031c24ad5bde7f29960df7d524070f7449c6f785084be1a0f733047f336f9154738674547db02a9f44dfc6e60301081e1ce99847f3b5b601ff06b4d5776a9740b9aa0d34058fd3b906e4f7859dfb07d7173e5e6f6350adac21f27b2307469":hex:"bd0ce19549d0700120cbe51077dbbbb00a8d8b09":hex:"08180de825e4b8b014a32da8ba761555921204f2f90d5f24b712908ff84f3e220ad17997c0dd6e706630ba3e84add4d5e7ab004e58074b549709565d43ad9e97b5a7a1a29e85b9f90f4aafcdf58321de8c5974ef9abf2d526f33c0f2f82e95d158ea6b81f1736db8d1af3d6ac6a83b32d18bae0ff1b2fe27de4c76ed8c7980a34e":int:0 + +RSASSA-PSS Signature Example 5_2 (verify) +3:int:1028:int:16:char*:"0d10f661f29940f5ed39aa260966deb47843679d2b6fb25b3de370f3ac7c19916391fd25fb527ebfa6a4b4df45a1759d996c4bb4ebd18828c44fc52d0191871740525f47a4b0cc8da325ed8aa676b0d0f626e0a77f07692170acac8082f42faa7dc7cd123e730e31a87985204cabcbe6670d43a2dd2b2ddef5e05392fc213bc507":int:16:char*:"010001":exp:0:exp:0:hex:"e7b32e1556ea1b2795046ac69739d22ac8966bf11c116f614b166740e96b90653e5750945fcf772186c03790a07fda323e1a61916b06ee2157db3dff80d67d5e39a53ae268c8f09ed99a732005b0bc6a04af4e08d57a00e7201b3060efaadb73113bfc087fd837093aa25235b8c149f56215f031c24ad5bde7f29960df7d524070f7449c6f785084be1a0f733047f336f9154738674547db02a9f44dfc6e60301081e1ce99847f3b5b601ff06b4d5776a9740b9aa0d34058fd3b906e4f7859dfb07d7173e5e6f6350adac21f27b2307469":char*:"bd0ce19549d0700120cbe51077dbbbb00a8d8b09":hex:"08180de825e4b8b014a32da8ba761555921204f2f90d5f24b712908ff84f3e220ad17997c0dd6e706630ba3e84add4d5e7ab004e58074b549709565d43ad9e97b5a7a1a29e85b9f90f4aafcdf58321de8c5974ef9abf2d526f33c0f2f82e95d158ea6b81f1736db8d1af3d6ac6a83b32d18bae0ff1b2fe27de4c76ed8c7980a34e":int:0 + +RSASSA-PSS Signature Example 5_3 +2:int:1028:int:16:char*:"03f2f331f4142d4f24b43aa10279a89652d4e7537221a1a7b2a25deb551e5de9ac497411c227a94e45f91c2d1c13cc046cf4ce14e32d058734210d44a87ee1b73f":int:16:char*:"034f090d73b55803030cf0361a5d8081bfb79f851523feac0a2124d08d4013ff08487771a870d0479dc0686c62f7718dfecf024b17c9267678059171339cc00839":int:16:char*:"0d10f661f29940f5ed39aa260966deb47843679d2b6fb25b3de370f3ac7c19916391fd25fb527ebfa6a4b4df45a1759d996c4bb4ebd18828c44fc52d0191871740525f47a4b0cc8da325ed8aa676b0d0f626e0a77f07692170acac8082f42faa7dc7cd123e730e31a87985204cabcbe6670d43a2dd2b2ddef5e05392fc213bc507":int:16:char*:"010001":exp:0:exp:0:hex:"8d8396e36507fe1ef6a19017548e0c716674c2fec233adb2f775665ec41f2bd0ba396b061a9daa7e866f7c23fd3531954300a342f924535ea1498c48f6c879932865fc02000c528723b7ad0335745b51209a0afed932af8f0887c219004d2abd894ea92559ee3198af3a734fe9b9638c263a728ad95a5ae8ce3eb15839f3aa7852bb390706e7760e43a71291a2e3f827237deda851874c517665f545f27238df86557f375d09ccd8bd15d8ccf61f5d78ca5c7f5cde782e6bf5d0057056d4bad98b3d2f9575e824ab7a33ff57b0ac100ab0d6ead7aa0b50f6e4d3e5ec0b966b":hex:"815779a91b3a8bd049bf2aeb920142772222c9ca":hex:"05e0fdbdf6f756ef733185ccfa8ced2eb6d029d9d56e35561b5db8e70257ee6fd019d2f0bbf669fe9b9821e78df6d41e31608d58280f318ee34f559941c8df13287574bac000b7e58dc4f414ba49fb127f9d0f8936638c76e85356c994f79750f7fa3cf4fd482df75e3fb9978cd061f7abb17572e6e63e0bde12cbdcf18c68b979":int:0 + +RSASSA-PSS Signature Example 5_3 (verify) +3:int:1028:int:16:char*:"0d10f661f29940f5ed39aa260966deb47843679d2b6fb25b3de370f3ac7c19916391fd25fb527ebfa6a4b4df45a1759d996c4bb4ebd18828c44fc52d0191871740525f47a4b0cc8da325ed8aa676b0d0f626e0a77f07692170acac8082f42faa7dc7cd123e730e31a87985204cabcbe6670d43a2dd2b2ddef5e05392fc213bc507":int:16:char*:"010001":exp:0:exp:0:hex:"8d8396e36507fe1ef6a19017548e0c716674c2fec233adb2f775665ec41f2bd0ba396b061a9daa7e866f7c23fd3531954300a342f924535ea1498c48f6c879932865fc02000c528723b7ad0335745b51209a0afed932af8f0887c219004d2abd894ea92559ee3198af3a734fe9b9638c263a728ad95a5ae8ce3eb15839f3aa7852bb390706e7760e43a71291a2e3f827237deda851874c517665f545f27238df86557f375d09ccd8bd15d8ccf61f5d78ca5c7f5cde782e6bf5d0057056d4bad98b3d2f9575e824ab7a33ff57b0ac100ab0d6ead7aa0b50f6e4d3e5ec0b966b":char*:"815779a91b3a8bd049bf2aeb920142772222c9ca":hex:"05e0fdbdf6f756ef733185ccfa8ced2eb6d029d9d56e35561b5db8e70257ee6fd019d2f0bbf669fe9b9821e78df6d41e31608d58280f318ee34f559941c8df13287574bac000b7e58dc4f414ba49fb127f9d0f8936638c76e85356c994f79750f7fa3cf4fd482df75e3fb9978cd061f7abb17572e6e63e0bde12cbdcf18c68b979":int:0 + +RSASSA-PSS Signature Example 5_4 +2:int:1028:int:16:char*:"03f2f331f4142d4f24b43aa10279a89652d4e7537221a1a7b2a25deb551e5de9ac497411c227a94e45f91c2d1c13cc046cf4ce14e32d058734210d44a87ee1b73f":int:16:char*:"034f090d73b55803030cf0361a5d8081bfb79f851523feac0a2124d08d4013ff08487771a870d0479dc0686c62f7718dfecf024b17c9267678059171339cc00839":int:16:char*:"0d10f661f29940f5ed39aa260966deb47843679d2b6fb25b3de370f3ac7c19916391fd25fb527ebfa6a4b4df45a1759d996c4bb4ebd18828c44fc52d0191871740525f47a4b0cc8da325ed8aa676b0d0f626e0a77f07692170acac8082f42faa7dc7cd123e730e31a87985204cabcbe6670d43a2dd2b2ddef5e05392fc213bc507":int:16:char*:"010001":exp:0:exp:0:hex:"328c659e0a6437433cceb73c14":hex:"9aec4a7480d5bbc42920d7ca235db674989c9aac":hex:"0bc989853bc2ea86873271ce183a923ab65e8a53100e6df5d87a24c4194eb797813ee2a187c097dd872d591da60c568605dd7e742d5af4e33b11678ccb63903204a3d080b0902c89aba8868f009c0f1c0cb85810bbdd29121abb8471ff2d39e49fd92d56c655c8e037ad18fafbdc92c95863f7f61ea9efa28fea401369d19daea1":int:0 + +RSASSA-PSS Signature Example 5_4 (verify) +3:int:1028:int:16:char*:"0d10f661f29940f5ed39aa260966deb47843679d2b6fb25b3de370f3ac7c19916391fd25fb527ebfa6a4b4df45a1759d996c4bb4ebd18828c44fc52d0191871740525f47a4b0cc8da325ed8aa676b0d0f626e0a77f07692170acac8082f42faa7dc7cd123e730e31a87985204cabcbe6670d43a2dd2b2ddef5e05392fc213bc507":int:16:char*:"010001":exp:0:exp:0:hex:"328c659e0a6437433cceb73c14":char*:"9aec4a7480d5bbc42920d7ca235db674989c9aac":hex:"0bc989853bc2ea86873271ce183a923ab65e8a53100e6df5d87a24c4194eb797813ee2a187c097dd872d591da60c568605dd7e742d5af4e33b11678ccb63903204a3d080b0902c89aba8868f009c0f1c0cb85810bbdd29121abb8471ff2d39e49fd92d56c655c8e037ad18fafbdc92c95863f7f61ea9efa28fea401369d19daea1":int:0 + +RSASSA-PSS Signature Example 5_5 +2:int:1028:int:16:char*:"03f2f331f4142d4f24b43aa10279a89652d4e7537221a1a7b2a25deb551e5de9ac497411c227a94e45f91c2d1c13cc046cf4ce14e32d058734210d44a87ee1b73f":int:16:char*:"034f090d73b55803030cf0361a5d8081bfb79f851523feac0a2124d08d4013ff08487771a870d0479dc0686c62f7718dfecf024b17c9267678059171339cc00839":int:16:char*:"0d10f661f29940f5ed39aa260966deb47843679d2b6fb25b3de370f3ac7c19916391fd25fb527ebfa6a4b4df45a1759d996c4bb4ebd18828c44fc52d0191871740525f47a4b0cc8da325ed8aa676b0d0f626e0a77f07692170acac8082f42faa7dc7cd123e730e31a87985204cabcbe6670d43a2dd2b2ddef5e05392fc213bc507":int:16:char*:"010001":exp:0:exp:0:hex:"f37b962379a47d415a376eec8973150bcb34edd5ab654041b61430560c2144582ba133c867d852d6b8e23321901302ecb45b09ec88b1527178fa043263f3067d9ffe973032a99f4cb08ad2c7e0a2456cdd57a7df56fe6053527a5aeb67d7e552063c1ca97b1beffa7b39e997caf27878ea0f62cbebc8c21df4c889a202851e949088490c249b6e9acf1d8063f5be2343989bf95c4da01a2be78b4ab6b378015bc37957f76948b5e58e440c28453d40d7cfd57e7d690600474ab5e75973b1ea0c5f1e45d14190afe2f4eb6d3bdf71f1d2f8bb156a1c295d04aaeb9d689dce79ed62bc443e":hex:"e20c1e9878512c39970f58375e1549a68b64f31d":hex:"0aefa943b698b9609edf898ad22744ac28dc239497cea369cbbd84f65c95c0ad776b594740164b59a739c6ff7c2f07c7c077a86d95238fe51e1fcf33574a4ae0684b42a3f6bf677d91820ca89874467b2c23add77969c80717430d0efc1d3695892ce855cb7f7011630f4df26def8ddf36fc23905f57fa6243a485c770d5681fcd":int:0 + +RSASSA-PSS Signature Example 5_5 (verify) +3:int:1028:int:16:char*:"0d10f661f29940f5ed39aa260966deb47843679d2b6fb25b3de370f3ac7c19916391fd25fb527ebfa6a4b4df45a1759d996c4bb4ebd18828c44fc52d0191871740525f47a4b0cc8da325ed8aa676b0d0f626e0a77f07692170acac8082f42faa7dc7cd123e730e31a87985204cabcbe6670d43a2dd2b2ddef5e05392fc213bc507":int:16:char*:"010001":exp:0:exp:0:hex:"f37b962379a47d415a376eec8973150bcb34edd5ab654041b61430560c2144582ba133c867d852d6b8e23321901302ecb45b09ec88b1527178fa043263f3067d9ffe973032a99f4cb08ad2c7e0a2456cdd57a7df56fe6053527a5aeb67d7e552063c1ca97b1beffa7b39e997caf27878ea0f62cbebc8c21df4c889a202851e949088490c249b6e9acf1d8063f5be2343989bf95c4da01a2be78b4ab6b378015bc37957f76948b5e58e440c28453d40d7cfd57e7d690600474ab5e75973b1ea0c5f1e45d14190afe2f4eb6d3bdf71f1d2f8bb156a1c295d04aaeb9d689dce79ed62bc443e":char*:"e20c1e9878512c39970f58375e1549a68b64f31d":hex:"0aefa943b698b9609edf898ad22744ac28dc239497cea369cbbd84f65c95c0ad776b594740164b59a739c6ff7c2f07c7c077a86d95238fe51e1fcf33574a4ae0684b42a3f6bf677d91820ca89874467b2c23add77969c80717430d0efc1d3695892ce855cb7f7011630f4df26def8ddf36fc23905f57fa6243a485c770d5681fcd":int:0 + +RSASSA-PSS Signature Example 5_6 +2:int:1028:int:16:char*:"03f2f331f4142d4f24b43aa10279a89652d4e7537221a1a7b2a25deb551e5de9ac497411c227a94e45f91c2d1c13cc046cf4ce14e32d058734210d44a87ee1b73f":int:16:char*:"034f090d73b55803030cf0361a5d8081bfb79f851523feac0a2124d08d4013ff08487771a870d0479dc0686c62f7718dfecf024b17c9267678059171339cc00839":int:16:char*:"0d10f661f29940f5ed39aa260966deb47843679d2b6fb25b3de370f3ac7c19916391fd25fb527ebfa6a4b4df45a1759d996c4bb4ebd18828c44fc52d0191871740525f47a4b0cc8da325ed8aa676b0d0f626e0a77f07692170acac8082f42faa7dc7cd123e730e31a87985204cabcbe6670d43a2dd2b2ddef5e05392fc213bc507":int:16:char*:"010001":exp:0:exp:0:hex:"c6103c330c1ef718c141e47b8fa859be4d5b96259e7d142070ecd485839dba5a8369c17c1114035e532d195c74f44a0476a2d3e8a4da210016caced0e367cb867710a4b5aa2df2b8e5daf5fdc647807d4d5ebb6c56b9763ccdae4dea3308eb0ac2a89501cb209d2639fa5bf87ce790747d3cb2d295e84564f2f637824f0c13028129b0aa4a422d162282":hex:"23291e4a3307e8bbb776623ab34e4a5f4cc8a8db":hex:"02802dccfa8dfaf5279bf0b4a29ba1b157611faeaaf419b8919d15941900c1339e7e92e6fae562c53e6cc8e84104b110bce03ad18525e3c49a0eadad5d3f28f244a8ed89edbafbb686277cfa8ae909714d6b28f4bf8e293aa04c41efe7c0a81266d5c061e2575be032aa464674ff71626219bd74cc45f0e7ed4e3ff96eee758e8f":int:0 + +RSASSA-PSS Signature Example 5_6 (verify) +3:int:1028:int:16:char*:"0d10f661f29940f5ed39aa260966deb47843679d2b6fb25b3de370f3ac7c19916391fd25fb527ebfa6a4b4df45a1759d996c4bb4ebd18828c44fc52d0191871740525f47a4b0cc8da325ed8aa676b0d0f626e0a77f07692170acac8082f42faa7dc7cd123e730e31a87985204cabcbe6670d43a2dd2b2ddef5e05392fc213bc507":int:16:char*:"010001":exp:0:exp:0:hex:"c6103c330c1ef718c141e47b8fa859be4d5b96259e7d142070ecd485839dba5a8369c17c1114035e532d195c74f44a0476a2d3e8a4da210016caced0e367cb867710a4b5aa2df2b8e5daf5fdc647807d4d5ebb6c56b9763ccdae4dea3308eb0ac2a89501cb209d2639fa5bf87ce790747d3cb2d295e84564f2f637824f0c13028129b0aa4a422d162282":char*:"23291e4a3307e8bbb776623ab34e4a5f4cc8a8db":hex:"02802dccfa8dfaf5279bf0b4a29ba1b157611faeaaf419b8919d15941900c1339e7e92e6fae562c53e6cc8e84104b110bce03ad18525e3c49a0eadad5d3f28f244a8ed89edbafbb686277cfa8ae909714d6b28f4bf8e293aa04c41efe7c0a81266d5c061e2575be032aa464674ff71626219bd74cc45f0e7ed4e3ff96eee758e8f":int:0 + +RSASSA-PSS Signature Example 6_1 +2:int:1029:int:16:char*:"04f0548c9626ab1ebf1244934741d99a06220efa2a5856aa0e75730b2ec96adc86be894fa2803b53a5e85d276acbd29ab823f80a7391bb54a5051672fb04eeb543":int:16:char*:"0483e0ae47915587743ff345362b555d3962d98bb6f15f848b4c92b1771ca8ed107d8d3ee65ec44517dd0faa481a387e902f7a2e747c269e7ea44480bc538b8e5b":int:16:char*:"164ca31cff609f3a0e7101b039f2e4fe6dd37519ab98598d179e174996598071f47d3a04559158d7be373cf1aa53f0aa6ef09039e5678c2a4c63900514c8c4f8aaed5de12a5f10b09c311af8c0ffb5b7a297f2efc63b8d6b0510931f0b98e48bf5fc6ec4e7b8db1ffaeb08c38e02adb8f03a48229c99e969431f61cb8c4dc698d1":int:16:char*:"010001":exp:0:exp:0:hex:"0a20b774addc2fa51245ed7cb9da609e50cac6636a52543f97458eed7340f8d53ffc64918f949078ee03ef60d42b5fec246050bd5505cd8cb597bad3c4e713b0ef30644e76adabb0de01a1561efb255158c74fc801e6e919e581b46f0f0ddd08e4f34c7810b5ed8318f91d7c8c":hex:"5b4ea2ef629cc22f3b538e016904b47b1e40bfd5":hex:"04c0cfacec04e5badbece159a5a1103f69b3f32ba593cb4cc4b1b7ab455916a96a27cd2678ea0f46ba37f7fc9c86325f29733b389f1d97f43e7201c0f348fc45fe42892335362eee018b5b161f2f9393031225c713012a576bc88e23052489868d9010cbf033ecc568e8bc152bdc59d560e41291915d28565208e22aeec9ef85d1":int:0 + +RSASSA-PSS Signature Example 6_1 (verify) +3:int:1029:int:16:char*:"164ca31cff609f3a0e7101b039f2e4fe6dd37519ab98598d179e174996598071f47d3a04559158d7be373cf1aa53f0aa6ef09039e5678c2a4c63900514c8c4f8aaed5de12a5f10b09c311af8c0ffb5b7a297f2efc63b8d6b0510931f0b98e48bf5fc6ec4e7b8db1ffaeb08c38e02adb8f03a48229c99e969431f61cb8c4dc698d1":int:16:char*:"010001":exp:0:exp:0:hex:"0a20b774addc2fa51245ed7cb9da609e50cac6636a52543f97458eed7340f8d53ffc64918f949078ee03ef60d42b5fec246050bd5505cd8cb597bad3c4e713b0ef30644e76adabb0de01a1561efb255158c74fc801e6e919e581b46f0f0ddd08e4f34c7810b5ed8318f91d7c8c":char*:"5b4ea2ef629cc22f3b538e016904b47b1e40bfd5":hex:"04c0cfacec04e5badbece159a5a1103f69b3f32ba593cb4cc4b1b7ab455916a96a27cd2678ea0f46ba37f7fc9c86325f29733b389f1d97f43e7201c0f348fc45fe42892335362eee018b5b161f2f9393031225c713012a576bc88e23052489868d9010cbf033ecc568e8bc152bdc59d560e41291915d28565208e22aeec9ef85d1":int:0 + +RSASSA-PSS Signature Example 6_2 +2:int:1029:int:16:char*:"04f0548c9626ab1ebf1244934741d99a06220efa2a5856aa0e75730b2ec96adc86be894fa2803b53a5e85d276acbd29ab823f80a7391bb54a5051672fb04eeb543":int:16:char*:"0483e0ae47915587743ff345362b555d3962d98bb6f15f848b4c92b1771ca8ed107d8d3ee65ec44517dd0faa481a387e902f7a2e747c269e7ea44480bc538b8e5b":int:16:char*:"164ca31cff609f3a0e7101b039f2e4fe6dd37519ab98598d179e174996598071f47d3a04559158d7be373cf1aa53f0aa6ef09039e5678c2a4c63900514c8c4f8aaed5de12a5f10b09c311af8c0ffb5b7a297f2efc63b8d6b0510931f0b98e48bf5fc6ec4e7b8db1ffaeb08c38e02adb8f03a48229c99e969431f61cb8c4dc698d1":int:16:char*:"010001":exp:0:exp:0:hex:"2aaff6631f621ce615760a9ebce94bb333077ad86488c861d4b76d29c1f48746c611ae1e03ced4445d7cfa1fe5f62e1b3f08452bde3b6ef81973bafbb57f97bceef873985395b8260589aa88cb7db50ab469262e551bdcd9a56f275a0ac4fe484700c35f3dbf2b469ede864741b86fa59172a360ba95a02e139be50ddfb7cf0b42faeabbfbbaa86a4497699c4f2dfd5b08406af7e14144427c253ec0efa20eaf9a8be8cd49ce1f1bc4e93e619cf2aa8ed4fb39bc8590d0f7b96488f7317ac9abf7bee4e3a0e715":hex:"83146a9e782722c28b014f98b4267bda2ac9504f":hex:"0a2314250cf52b6e4e908de5b35646bcaa24361da8160fb0f9257590ab3ace42b0dc3e77ad2db7c203a20bd952fbb56b1567046ecfaa933d7b1000c3de9ff05b7d989ba46fd43bc4c2d0a3986b7ffa13471d37eb5b47d64707bd290cfd6a9f393ad08ec1e3bd71bb5792615035cdaf2d8929aed3be098379377e777ce79aaa4773":int:0 + +RSASSA-PSS Signature Example 6_2 (verify) +3:int:1029:int:16:char*:"164ca31cff609f3a0e7101b039f2e4fe6dd37519ab98598d179e174996598071f47d3a04559158d7be373cf1aa53f0aa6ef09039e5678c2a4c63900514c8c4f8aaed5de12a5f10b09c311af8c0ffb5b7a297f2efc63b8d6b0510931f0b98e48bf5fc6ec4e7b8db1ffaeb08c38e02adb8f03a48229c99e969431f61cb8c4dc698d1":int:16:char*:"010001":exp:0:exp:0:hex:"2aaff6631f621ce615760a9ebce94bb333077ad86488c861d4b76d29c1f48746c611ae1e03ced4445d7cfa1fe5f62e1b3f08452bde3b6ef81973bafbb57f97bceef873985395b8260589aa88cb7db50ab469262e551bdcd9a56f275a0ac4fe484700c35f3dbf2b469ede864741b86fa59172a360ba95a02e139be50ddfb7cf0b42faeabbfbbaa86a4497699c4f2dfd5b08406af7e14144427c253ec0efa20eaf9a8be8cd49ce1f1bc4e93e619cf2aa8ed4fb39bc8590d0f7b96488f7317ac9abf7bee4e3a0e715":char*:"83146a9e782722c28b014f98b4267bda2ac9504f":hex:"0a2314250cf52b6e4e908de5b35646bcaa24361da8160fb0f9257590ab3ace42b0dc3e77ad2db7c203a20bd952fbb56b1567046ecfaa933d7b1000c3de9ff05b7d989ba46fd43bc4c2d0a3986b7ffa13471d37eb5b47d64707bd290cfd6a9f393ad08ec1e3bd71bb5792615035cdaf2d8929aed3be098379377e777ce79aaa4773":int:0 + +RSASSA-PSS Signature Example 6_3 +2:int:1029:int:16:char*:"04f0548c9626ab1ebf1244934741d99a06220efa2a5856aa0e75730b2ec96adc86be894fa2803b53a5e85d276acbd29ab823f80a7391bb54a5051672fb04eeb543":int:16:char*:"0483e0ae47915587743ff345362b555d3962d98bb6f15f848b4c92b1771ca8ed107d8d3ee65ec44517dd0faa481a387e902f7a2e747c269e7ea44480bc538b8e5b":int:16:char*:"164ca31cff609f3a0e7101b039f2e4fe6dd37519ab98598d179e174996598071f47d3a04559158d7be373cf1aa53f0aa6ef09039e5678c2a4c63900514c8c4f8aaed5de12a5f10b09c311af8c0ffb5b7a297f2efc63b8d6b0510931f0b98e48bf5fc6ec4e7b8db1ffaeb08c38e02adb8f03a48229c99e969431f61cb8c4dc698d1":int:16:char*:"010001":exp:0:exp:0:hex:"0f6195d04a6e6fc7e2c9600dbf840c39ea8d4d624fd53507016b0e26858a5e0aecd7ada543ae5c0ab3a62599cba0a54e6bf446e262f989978f9ddf5e9a41":hex:"a87b8aed07d7b8e2daf14ddca4ac68c4d0aabff8":hex:"086df6b500098c120f24ff8423f727d9c61a5c9007d3b6a31ce7cf8f3cbec1a26bb20e2bd4a046793299e03e37a21b40194fb045f90b18bf20a47992ccd799cf9c059c299c0526854954aade8a6ad9d97ec91a1145383f42468b231f4d72f23706d9853c3fa43ce8ace8bfe7484987a1ec6a16c8daf81f7c8bf42774707a9df456":int:0 + +RSASSA-PSS Signature Example 6_3 (verify) +3:int:1029:int:16:char*:"164ca31cff609f3a0e7101b039f2e4fe6dd37519ab98598d179e174996598071f47d3a04559158d7be373cf1aa53f0aa6ef09039e5678c2a4c63900514c8c4f8aaed5de12a5f10b09c311af8c0ffb5b7a297f2efc63b8d6b0510931f0b98e48bf5fc6ec4e7b8db1ffaeb08c38e02adb8f03a48229c99e969431f61cb8c4dc698d1":int:16:char*:"010001":exp:0:exp:0:hex:"0f6195d04a6e6fc7e2c9600dbf840c39ea8d4d624fd53507016b0e26858a5e0aecd7ada543ae5c0ab3a62599cba0a54e6bf446e262f989978f9ddf5e9a41":char*:"a87b8aed07d7b8e2daf14ddca4ac68c4d0aabff8":hex:"086df6b500098c120f24ff8423f727d9c61a5c9007d3b6a31ce7cf8f3cbec1a26bb20e2bd4a046793299e03e37a21b40194fb045f90b18bf20a47992ccd799cf9c059c299c0526854954aade8a6ad9d97ec91a1145383f42468b231f4d72f23706d9853c3fa43ce8ace8bfe7484987a1ec6a16c8daf81f7c8bf42774707a9df456":int:0 + +RSASSA-PSS Signature Example 6_4 +2:int:1029:int:16:char*:"04f0548c9626ab1ebf1244934741d99a06220efa2a5856aa0e75730b2ec96adc86be894fa2803b53a5e85d276acbd29ab823f80a7391bb54a5051672fb04eeb543":int:16:char*:"0483e0ae47915587743ff345362b555d3962d98bb6f15f848b4c92b1771ca8ed107d8d3ee65ec44517dd0faa481a387e902f7a2e747c269e7ea44480bc538b8e5b":int:16:char*:"164ca31cff609f3a0e7101b039f2e4fe6dd37519ab98598d179e174996598071f47d3a04559158d7be373cf1aa53f0aa6ef09039e5678c2a4c63900514c8c4f8aaed5de12a5f10b09c311af8c0ffb5b7a297f2efc63b8d6b0510931f0b98e48bf5fc6ec4e7b8db1ffaeb08c38e02adb8f03a48229c99e969431f61cb8c4dc698d1":int:16:char*:"010001":exp:0:exp:0:hex:"337d25fe9810ebca0de4d4658d3ceb8e0fe4c066aba3bcc48b105d3bf7e0257d44fecea6596f4d0c59a08402833678f70620f9138dfeb7ded905e4a6d5f05c473d55936652e2a5df43c0cfda7bacaf3087f4524b06cf42157d01539739f7fddec9d58125df31a32eab06c19b71f1d5bf":hex:"a37932f8a7494a942d6f767438e724d6d0c0ef18":hex:"0b5b11ad549863ffa9c51a14a1106c2a72cc8b646e5c7262509786105a984776534ca9b54c1cc64bf2d5a44fd7e8a69db699d5ea52087a4748fd2abc1afed1e5d6f7c89025530bdaa2213d7e030fa55df6f34bcf1ce46d2edf4e3ae4f3b01891a068c9e3a44bbc43133edad6ecb9f35400c4252a5762d65744b99cb9f4c559329f":int:0 + +RSASSA-PSS Signature Example 6_4 (verify) +3:int:1029:int:16:char*:"164ca31cff609f3a0e7101b039f2e4fe6dd37519ab98598d179e174996598071f47d3a04559158d7be373cf1aa53f0aa6ef09039e5678c2a4c63900514c8c4f8aaed5de12a5f10b09c311af8c0ffb5b7a297f2efc63b8d6b0510931f0b98e48bf5fc6ec4e7b8db1ffaeb08c38e02adb8f03a48229c99e969431f61cb8c4dc698d1":int:16:char*:"010001":exp:0:exp:0:hex:"337d25fe9810ebca0de4d4658d3ceb8e0fe4c066aba3bcc48b105d3bf7e0257d44fecea6596f4d0c59a08402833678f70620f9138dfeb7ded905e4a6d5f05c473d55936652e2a5df43c0cfda7bacaf3087f4524b06cf42157d01539739f7fddec9d58125df31a32eab06c19b71f1d5bf":char*:"a37932f8a7494a942d6f767438e724d6d0c0ef18":hex:"0b5b11ad549863ffa9c51a14a1106c2a72cc8b646e5c7262509786105a984776534ca9b54c1cc64bf2d5a44fd7e8a69db699d5ea52087a4748fd2abc1afed1e5d6f7c89025530bdaa2213d7e030fa55df6f34bcf1ce46d2edf4e3ae4f3b01891a068c9e3a44bbc43133edad6ecb9f35400c4252a5762d65744b99cb9f4c559329f":int:0 + +RSASSA-PSS Signature Example 6_5 +2:int:1029:int:16:char*:"04f0548c9626ab1ebf1244934741d99a06220efa2a5856aa0e75730b2ec96adc86be894fa2803b53a5e85d276acbd29ab823f80a7391bb54a5051672fb04eeb543":int:16:char*:"0483e0ae47915587743ff345362b555d3962d98bb6f15f848b4c92b1771ca8ed107d8d3ee65ec44517dd0faa481a387e902f7a2e747c269e7ea44480bc538b8e5b":int:16:char*:"164ca31cff609f3a0e7101b039f2e4fe6dd37519ab98598d179e174996598071f47d3a04559158d7be373cf1aa53f0aa6ef09039e5678c2a4c63900514c8c4f8aaed5de12a5f10b09c311af8c0ffb5b7a297f2efc63b8d6b0510931f0b98e48bf5fc6ec4e7b8db1ffaeb08c38e02adb8f03a48229c99e969431f61cb8c4dc698d1":int:16:char*:"010001":exp:0:exp:0:hex:"84ec502b072e8287789d8f9235829ea3b187afd4d4c785611bda5f9eb3cb96717efa7007227f1c08cbcb972e667235e0fb7d431a6570326d2ecce35adb373dc753b3be5f829b89175493193fab16badb41371b3aac0ae670076f24bef420c135add7cee8d35fbc944d79fafb9e307a13b0f556cb654a06f973ed22672330197ef5a748bf826a5db2383a25364b686b9372bb2339aeb1ac9e9889327d016f1670776db06201adbdcaf8a5e3b74e108b73":hex:"7b790c1d62f7b84e94df6af28917cf571018110e":hex:"02d71fa9b53e4654fefb7f08385cf6b0ae3a817942ebf66c35ac67f0b069952a3ce9c7e1f1b02e480a9500836de5d64cdb7ecde04542f7a79988787e24c2ba05f5fd482c023ed5c30e04839dc44bed2a3a3a4fee01113c891a47d32eb8025c28cb050b5cdb576c70fe76ef523405c08417faf350b037a43c379339fcb18d3a356b":int:0 + +RSASSA-PSS Signature Example 6_5 (verify) +3:int:1029:int:16:char*:"164ca31cff609f3a0e7101b039f2e4fe6dd37519ab98598d179e174996598071f47d3a04559158d7be373cf1aa53f0aa6ef09039e5678c2a4c63900514c8c4f8aaed5de12a5f10b09c311af8c0ffb5b7a297f2efc63b8d6b0510931f0b98e48bf5fc6ec4e7b8db1ffaeb08c38e02adb8f03a48229c99e969431f61cb8c4dc698d1":int:16:char*:"010001":exp:0:exp:0:hex:"84ec502b072e8287789d8f9235829ea3b187afd4d4c785611bda5f9eb3cb96717efa7007227f1c08cbcb972e667235e0fb7d431a6570326d2ecce35adb373dc753b3be5f829b89175493193fab16badb41371b3aac0ae670076f24bef420c135add7cee8d35fbc944d79fafb9e307a13b0f556cb654a06f973ed22672330197ef5a748bf826a5db2383a25364b686b9372bb2339aeb1ac9e9889327d016f1670776db06201adbdcaf8a5e3b74e108b73":char*:"7b790c1d62f7b84e94df6af28917cf571018110e":hex:"02d71fa9b53e4654fefb7f08385cf6b0ae3a817942ebf66c35ac67f0b069952a3ce9c7e1f1b02e480a9500836de5d64cdb7ecde04542f7a79988787e24c2ba05f5fd482c023ed5c30e04839dc44bed2a3a3a4fee01113c891a47d32eb8025c28cb050b5cdb576c70fe76ef523405c08417faf350b037a43c379339fcb18d3a356b":int:0 + +RSASSA-PSS Signature Example 6_6 +2:int:1029:int:16:char*:"04f0548c9626ab1ebf1244934741d99a06220efa2a5856aa0e75730b2ec96adc86be894fa2803b53a5e85d276acbd29ab823f80a7391bb54a5051672fb04eeb543":int:16:char*:"0483e0ae47915587743ff345362b555d3962d98bb6f15f848b4c92b1771ca8ed107d8d3ee65ec44517dd0faa481a387e902f7a2e747c269e7ea44480bc538b8e5b":int:16:char*:"164ca31cff609f3a0e7101b039f2e4fe6dd37519ab98598d179e174996598071f47d3a04559158d7be373cf1aa53f0aa6ef09039e5678c2a4c63900514c8c4f8aaed5de12a5f10b09c311af8c0ffb5b7a297f2efc63b8d6b0510931f0b98e48bf5fc6ec4e7b8db1ffaeb08c38e02adb8f03a48229c99e969431f61cb8c4dc698d1":int:16:char*:"010001":exp:0:exp:0:hex:"9906d89f97a9fdedd3ccd824db687326f30f00aa25a7fca2afcb3b0f86cd41e73f0e8ff7d2d83f59e28ed31a5a0d551523374de22e4c7e8ff568b386ee3dc41163f10bf67bb006261c9082f9af90bf1d9049a6b9fae71c7f84fbe6e55f02789de774f230f115026a4b4e96c55b04a95da3aacbb2cece8f81764a1f1c99515411087cf7d34aeded0932c183":hex:"fbbe059025b69b89fb14ae2289e7aaafe60c0fcd":hex:"0a40a16e2fe2b38d1df90546167cf9469c9e3c3681a3442b4b2c2f581deb385ce99fc6188bb02a841d56e76d301891e24560550fcc2a26b55f4ccb26d837d350a154bcaca8392d98fa67959e9727b78cad03269f56968fc56b68bd679926d83cc9cb215550645ccda31c760ff35888943d2d8a1d351e81e5d07b86182e751081ef":int:0 + +RSASSA-PSS Signature Example 6_6 (verify) +3:int:1029:int:16:char*:"164ca31cff609f3a0e7101b039f2e4fe6dd37519ab98598d179e174996598071f47d3a04559158d7be373cf1aa53f0aa6ef09039e5678c2a4c63900514c8c4f8aaed5de12a5f10b09c311af8c0ffb5b7a297f2efc63b8d6b0510931f0b98e48bf5fc6ec4e7b8db1ffaeb08c38e02adb8f03a48229c99e969431f61cb8c4dc698d1":int:16:char*:"010001":exp:0:exp:0:hex:"9906d89f97a9fdedd3ccd824db687326f30f00aa25a7fca2afcb3b0f86cd41e73f0e8ff7d2d83f59e28ed31a5a0d551523374de22e4c7e8ff568b386ee3dc41163f10bf67bb006261c9082f9af90bf1d9049a6b9fae71c7f84fbe6e55f02789de774f230f115026a4b4e96c55b04a95da3aacbb2cece8f81764a1f1c99515411087cf7d34aeded0932c183":char*:"fbbe059025b69b89fb14ae2289e7aaafe60c0fcd":hex:"0a40a16e2fe2b38d1df90546167cf9469c9e3c3681a3442b4b2c2f581deb385ce99fc6188bb02a841d56e76d301891e24560550fcc2a26b55f4ccb26d837d350a154bcaca8392d98fa67959e9727b78cad03269f56968fc56b68bd679926d83cc9cb215550645ccda31c760ff35888943d2d8a1d351e81e5d07b86182e751081ef":int:0 + +RSASSA-PSS Signature Example 7_1 +2:int:1030:int:16:char*:"07eefb424b0e3a40e4208ee5afb280b22317308114dde0b4b64f730184ec68da6ce2867a9f48ed7726d5e2614ed04a5410736c8c714ee702474298c6292af07535":int:16:char*:"070830dbf947eac0228de26314b59b66994cc60e8360e75d3876298f8f8a7d141da064e5ca026a973e28f254738cee669c721b034cb5f8e244dadd7cd1e159d547":int:16:char*:"37c9da4a66c8c408b8da27d0c9d79f8ccb1eafc1d2fe48746d940b7c4ef5dee18ad12647cefaa0c4b3188b221c515386759b93f02024b25ab9242f8357d8f3fd49640ee5e643eaf6c64deefa7089727c8ff03993333915c6ef21bf5975b6e50d118b51008ec33e9f01a0a545a10a836a43ddbca9d8b5c5d3548022d7064ea29ab3":int:16:char*:"010001":exp:0:exp:0:hex:"9ead0e01945640674eb41cad435e2374eaefa8ad7197d97913c44957d8d83f40d76ee60e39bf9c0f9eaf3021421a074d1ade962c6e9d3dc3bb174fe4dfe652b09115495b8fd2794174020a0602b5ca51848cfc96ce5eb57fc0a2adc1dda36a7cc452641a14911b37e45bfa11daa5c7ecdb74f6d0100d1d3e39e752800e203397de0233077b9a88855537fae927f924380d780f98e18dcff39c5ea741b17d6fdd1885bc9d581482d771ceb562d78a8bf88f0c75b11363e5e36cd479ceb0545f9da84203e0e6e508375cc9e844b88b7ac7a0a201ea0f1bee9a2c577920ca02c01b9d8320e974a56f4efb5763b96255abbf8037bf1802cf018f56379493e569a9":hex:"b7867a59958cb54328f8775e6546ec06d27eaa50":hex:"187f390723c8902591f0154bae6d4ecbffe067f0e8b795476ea4f4d51ccc810520bb3ca9bca7d0b1f2ea8a17d873fa27570acd642e3808561cb9e975ccfd80b23dc5771cdb3306a5f23159dacbd3aa2db93d46d766e09ed15d900ad897a8d274dc26b47e994a27e97e2268a766533ae4b5e42a2fcaf755c1c4794b294c60555823":int:0 + +RSASSA-PSS Signature Example 7_1 (verify) +3:int:1030:int:16:char*:"37c9da4a66c8c408b8da27d0c9d79f8ccb1eafc1d2fe48746d940b7c4ef5dee18ad12647cefaa0c4b3188b221c515386759b93f02024b25ab9242f8357d8f3fd49640ee5e643eaf6c64deefa7089727c8ff03993333915c6ef21bf5975b6e50d118b51008ec33e9f01a0a545a10a836a43ddbca9d8b5c5d3548022d7064ea29ab3":int:16:char*:"010001":exp:0:exp:0:hex:"9ead0e01945640674eb41cad435e2374eaefa8ad7197d97913c44957d8d83f40d76ee60e39bf9c0f9eaf3021421a074d1ade962c6e9d3dc3bb174fe4dfe652b09115495b8fd2794174020a0602b5ca51848cfc96ce5eb57fc0a2adc1dda36a7cc452641a14911b37e45bfa11daa5c7ecdb74f6d0100d1d3e39e752800e203397de0233077b9a88855537fae927f924380d780f98e18dcff39c5ea741b17d6fdd1885bc9d581482d771ceb562d78a8bf88f0c75b11363e5e36cd479ceb0545f9da84203e0e6e508375cc9e844b88b7ac7a0a201ea0f1bee9a2c577920ca02c01b9d8320e974a56f4efb5763b96255abbf8037bf1802cf018f56379493e569a9":char*:"b7867a59958cb54328f8775e6546ec06d27eaa50":hex:"187f390723c8902591f0154bae6d4ecbffe067f0e8b795476ea4f4d51ccc810520bb3ca9bca7d0b1f2ea8a17d873fa27570acd642e3808561cb9e975ccfd80b23dc5771cdb3306a5f23159dacbd3aa2db93d46d766e09ed15d900ad897a8d274dc26b47e994a27e97e2268a766533ae4b5e42a2fcaf755c1c4794b294c60555823":int:0 + +RSASSA-PSS Signature Example 7_2 +2:int:1030:int:16:char*:"07eefb424b0e3a40e4208ee5afb280b22317308114dde0b4b64f730184ec68da6ce2867a9f48ed7726d5e2614ed04a5410736c8c714ee702474298c6292af07535":int:16:char*:"070830dbf947eac0228de26314b59b66994cc60e8360e75d3876298f8f8a7d141da064e5ca026a973e28f254738cee669c721b034cb5f8e244dadd7cd1e159d547":int:16:char*:"37c9da4a66c8c408b8da27d0c9d79f8ccb1eafc1d2fe48746d940b7c4ef5dee18ad12647cefaa0c4b3188b221c515386759b93f02024b25ab9242f8357d8f3fd49640ee5e643eaf6c64deefa7089727c8ff03993333915c6ef21bf5975b6e50d118b51008ec33e9f01a0a545a10a836a43ddbca9d8b5c5d3548022d7064ea29ab3":int:16:char*:"010001":exp:0:exp:0:hex:"8d80d2d08dbd19c154df3f14673a14bd03735231f24e86bf153d0e69e74cbff7b1836e664de83f680124370fc0f96c9b65c07a366b644c4ab3":hex:"0c09582266df086310821ba7e18df64dfee6de09":hex:"10fd89768a60a67788abb5856a787c8561f3edcf9a83e898f7dc87ab8cce79429b43e56906941a886194f137e591fe7c339555361fbbe1f24feb2d4bcdb80601f3096bc9132deea60ae13082f44f9ad41cd628936a4d51176e42fc59cb76db815ce5ab4db99a104aafea68f5d330329ebf258d4ede16064bd1d00393d5e1570eb8":int:0 + +RSASSA-PSS Signature Example 7_2 (verify) +3:int:1030:int:16:char*:"37c9da4a66c8c408b8da27d0c9d79f8ccb1eafc1d2fe48746d940b7c4ef5dee18ad12647cefaa0c4b3188b221c515386759b93f02024b25ab9242f8357d8f3fd49640ee5e643eaf6c64deefa7089727c8ff03993333915c6ef21bf5975b6e50d118b51008ec33e9f01a0a545a10a836a43ddbca9d8b5c5d3548022d7064ea29ab3":int:16:char*:"010001":exp:0:exp:0:hex:"8d80d2d08dbd19c154df3f14673a14bd03735231f24e86bf153d0e69e74cbff7b1836e664de83f680124370fc0f96c9b65c07a366b644c4ab3":char*:"0c09582266df086310821ba7e18df64dfee6de09":hex:"10fd89768a60a67788abb5856a787c8561f3edcf9a83e898f7dc87ab8cce79429b43e56906941a886194f137e591fe7c339555361fbbe1f24feb2d4bcdb80601f3096bc9132deea60ae13082f44f9ad41cd628936a4d51176e42fc59cb76db815ce5ab4db99a104aafea68f5d330329ebf258d4ede16064bd1d00393d5e1570eb8":int:0 + +RSASSA-PSS Signature Example 7_3 +2:int:1030:int:16:char*:"07eefb424b0e3a40e4208ee5afb280b22317308114dde0b4b64f730184ec68da6ce2867a9f48ed7726d5e2614ed04a5410736c8c714ee702474298c6292af07535":int:16:char*:"070830dbf947eac0228de26314b59b66994cc60e8360e75d3876298f8f8a7d141da064e5ca026a973e28f254738cee669c721b034cb5f8e244dadd7cd1e159d547":int:16:char*:"37c9da4a66c8c408b8da27d0c9d79f8ccb1eafc1d2fe48746d940b7c4ef5dee18ad12647cefaa0c4b3188b221c515386759b93f02024b25ab9242f8357d8f3fd49640ee5e643eaf6c64deefa7089727c8ff03993333915c6ef21bf5975b6e50d118b51008ec33e9f01a0a545a10a836a43ddbca9d8b5c5d3548022d7064ea29ab3":int:16:char*:"010001":exp:0:exp:0:hex:"808405cdfc1a58b9bb0397c720722a81fffb76278f335917ef9c473814b3e016ba2973cd2765f8f3f82d6cc38aa7f8551827fe8d1e3884b7e61c94683b8f82f1843bdae2257eeec9812ad4c2cf283c34e0b0ae0fe3cb990cf88f2ef9":hex:"28039dcfe106d3b8296611258c4a56651c9e92dd":hex:"2b31fde99859b977aa09586d8e274662b25a2a640640b457f594051cb1e7f7a911865455242926cf88fe80dfa3a75ba9689844a11e634a82b075afbd69c12a0df9d25f84ad4945df3dc8fe90c3cefdf26e95f0534304b5bdba20d3e5640a2ebfb898aac35ae40f26fce5563c2f9f24f3042af76f3c7072d687bbfb959a88460af1":int:0 + +RSASSA-PSS Signature Example 7_3 (verify) +3:int:1030:int:16:char*:"37c9da4a66c8c408b8da27d0c9d79f8ccb1eafc1d2fe48746d940b7c4ef5dee18ad12647cefaa0c4b3188b221c515386759b93f02024b25ab9242f8357d8f3fd49640ee5e643eaf6c64deefa7089727c8ff03993333915c6ef21bf5975b6e50d118b51008ec33e9f01a0a545a10a836a43ddbca9d8b5c5d3548022d7064ea29ab3":int:16:char*:"010001":exp:0:exp:0:hex:"808405cdfc1a58b9bb0397c720722a81fffb76278f335917ef9c473814b3e016ba2973cd2765f8f3f82d6cc38aa7f8551827fe8d1e3884b7e61c94683b8f82f1843bdae2257eeec9812ad4c2cf283c34e0b0ae0fe3cb990cf88f2ef9":char*:"28039dcfe106d3b8296611258c4a56651c9e92dd":hex:"2b31fde99859b977aa09586d8e274662b25a2a640640b457f594051cb1e7f7a911865455242926cf88fe80dfa3a75ba9689844a11e634a82b075afbd69c12a0df9d25f84ad4945df3dc8fe90c3cefdf26e95f0534304b5bdba20d3e5640a2ebfb898aac35ae40f26fce5563c2f9f24f3042af76f3c7072d687bbfb959a88460af1":int:0 + +RSASSA-PSS Signature Example 7_4 +2:int:1030:int:16:char*:"07eefb424b0e3a40e4208ee5afb280b22317308114dde0b4b64f730184ec68da6ce2867a9f48ed7726d5e2614ed04a5410736c8c714ee702474298c6292af07535":int:16:char*:"070830dbf947eac0228de26314b59b66994cc60e8360e75d3876298f8f8a7d141da064e5ca026a973e28f254738cee669c721b034cb5f8e244dadd7cd1e159d547":int:16:char*:"37c9da4a66c8c408b8da27d0c9d79f8ccb1eafc1d2fe48746d940b7c4ef5dee18ad12647cefaa0c4b3188b221c515386759b93f02024b25ab9242f8357d8f3fd49640ee5e643eaf6c64deefa7089727c8ff03993333915c6ef21bf5975b6e50d118b51008ec33e9f01a0a545a10a836a43ddbca9d8b5c5d3548022d7064ea29ab3":int:16:char*:"010001":exp:0:exp:0:hex:"f337b9bad937de22a1a052dff11134a8ce26976202981939b91e0715ae5e609649da1adfcef3f4cca59b238360e7d1e496c7bf4b204b5acff9bbd6166a1d87a36ef2247373751039f8a800b8399807b3a85f44893497c0d05fb7017b82228152de6f25e6116dcc7503c786c875c28f3aa607e94ab0f19863ab1b5073770b0cd5f533acde30c6fb953cf3da680264e30fc11bff9a19bffab4779b6223c3fb3fe0f71abade4eb7c09c41e24c22d23fa148e6a173feb63984d1bc6ee3a02d915b752ceaf92a3015eceb38ca586c6801b37c34cefb2cff25ea23c08662dcab26a7a93a285d05d3044c":hex:"a77821ebbbef24628e4e12e1d0ea96de398f7b0f":hex:"32c7ca38ff26949a15000c4ba04b2b13b35a3810e568184d7ecabaa166b7ffabddf2b6cf4ba07124923790f2e5b1a5be040aea36fe132ec130e1f10567982d17ac3e89b8d26c3094034e762d2e031264f01170beecb3d1439e05846f25458367a7d9c02060444672671e64e877864559ca19b2074d588a281b5804d23772fbbe19":int:0 + +RSASSA-PSS Signature Example 7_4 (verify) +3:int:1030:int:16:char*:"37c9da4a66c8c408b8da27d0c9d79f8ccb1eafc1d2fe48746d940b7c4ef5dee18ad12647cefaa0c4b3188b221c515386759b93f02024b25ab9242f8357d8f3fd49640ee5e643eaf6c64deefa7089727c8ff03993333915c6ef21bf5975b6e50d118b51008ec33e9f01a0a545a10a836a43ddbca9d8b5c5d3548022d7064ea29ab3":int:16:char*:"010001":exp:0:exp:0:hex:"f337b9bad937de22a1a052dff11134a8ce26976202981939b91e0715ae5e609649da1adfcef3f4cca59b238360e7d1e496c7bf4b204b5acff9bbd6166a1d87a36ef2247373751039f8a800b8399807b3a85f44893497c0d05fb7017b82228152de6f25e6116dcc7503c786c875c28f3aa607e94ab0f19863ab1b5073770b0cd5f533acde30c6fb953cf3da680264e30fc11bff9a19bffab4779b6223c3fb3fe0f71abade4eb7c09c41e24c22d23fa148e6a173feb63984d1bc6ee3a02d915b752ceaf92a3015eceb38ca586c6801b37c34cefb2cff25ea23c08662dcab26a7a93a285d05d3044c":char*:"a77821ebbbef24628e4e12e1d0ea96de398f7b0f":hex:"32c7ca38ff26949a15000c4ba04b2b13b35a3810e568184d7ecabaa166b7ffabddf2b6cf4ba07124923790f2e5b1a5be040aea36fe132ec130e1f10567982d17ac3e89b8d26c3094034e762d2e031264f01170beecb3d1439e05846f25458367a7d9c02060444672671e64e877864559ca19b2074d588a281b5804d23772fbbe19":int:0 + +RSASSA-PSS Signature Example 7_5 +2:int:1030:int:16:char*:"07eefb424b0e3a40e4208ee5afb280b22317308114dde0b4b64f730184ec68da6ce2867a9f48ed7726d5e2614ed04a5410736c8c714ee702474298c6292af07535":int:16:char*:"070830dbf947eac0228de26314b59b66994cc60e8360e75d3876298f8f8a7d141da064e5ca026a973e28f254738cee669c721b034cb5f8e244dadd7cd1e159d547":int:16:char*:"37c9da4a66c8c408b8da27d0c9d79f8ccb1eafc1d2fe48746d940b7c4ef5dee18ad12647cefaa0c4b3188b221c515386759b93f02024b25ab9242f8357d8f3fd49640ee5e643eaf6c64deefa7089727c8ff03993333915c6ef21bf5975b6e50d118b51008ec33e9f01a0a545a10a836a43ddbca9d8b5c5d3548022d7064ea29ab3":int:16:char*:"010001":exp:0:exp:0:hex:"45013cebafd960b255476a8e2598b9aa32efbe6dc1f34f4a498d8cf5a2b4548d08c55d5f95f7bcc9619163056f2d58b52fa032":hex:"9d5ad8eb452134b65dc3a98b6a73b5f741609cd6":hex:"07eb651d75f1b52bc263b2e198336e99fbebc4f332049a922a10815607ee2d989db3a4495b7dccd38f58a211fb7e193171a3d891132437ebca44f318b280509e52b5fa98fcce8205d9697c8ee4b7ff59d4c59c79038a1970bd2a0d451ecdc5ef11d9979c9d35f8c70a6163717607890d586a7c6dc01c79f86a8f28e85235f8c2f1":int:0 + +RSASSA-PSS Signature Example 7_5 (verify) +3:int:1030:int:16:char*:"37c9da4a66c8c408b8da27d0c9d79f8ccb1eafc1d2fe48746d940b7c4ef5dee18ad12647cefaa0c4b3188b221c515386759b93f02024b25ab9242f8357d8f3fd49640ee5e643eaf6c64deefa7089727c8ff03993333915c6ef21bf5975b6e50d118b51008ec33e9f01a0a545a10a836a43ddbca9d8b5c5d3548022d7064ea29ab3":int:16:char*:"010001":exp:0:exp:0:hex:"45013cebafd960b255476a8e2598b9aa32efbe6dc1f34f4a498d8cf5a2b4548d08c55d5f95f7bcc9619163056f2d58b52fa032":char*:"9d5ad8eb452134b65dc3a98b6a73b5f741609cd6":hex:"07eb651d75f1b52bc263b2e198336e99fbebc4f332049a922a10815607ee2d989db3a4495b7dccd38f58a211fb7e193171a3d891132437ebca44f318b280509e52b5fa98fcce8205d9697c8ee4b7ff59d4c59c79038a1970bd2a0d451ecdc5ef11d9979c9d35f8c70a6163717607890d586a7c6dc01c79f86a8f28e85235f8c2f1":int:0 + +RSASSA-PSS Signature Example 7_6 +2:int:1030:int:16:char*:"07eefb424b0e3a40e4208ee5afb280b22317308114dde0b4b64f730184ec68da6ce2867a9f48ed7726d5e2614ed04a5410736c8c714ee702474298c6292af07535":int:16:char*:"070830dbf947eac0228de26314b59b66994cc60e8360e75d3876298f8f8a7d141da064e5ca026a973e28f254738cee669c721b034cb5f8e244dadd7cd1e159d547":int:16:char*:"37c9da4a66c8c408b8da27d0c9d79f8ccb1eafc1d2fe48746d940b7c4ef5dee18ad12647cefaa0c4b3188b221c515386759b93f02024b25ab9242f8357d8f3fd49640ee5e643eaf6c64deefa7089727c8ff03993333915c6ef21bf5975b6e50d118b51008ec33e9f01a0a545a10a836a43ddbca9d8b5c5d3548022d7064ea29ab3":int:16:char*:"010001":exp:0:exp:0:hex:"2358097086c899323e75d9c90d0c09f12d9d54edfbdf70a9c2eb5a04d8f36b9b2bdf2aabe0a5bda1968937f9d6ebd3b6b257efb3136d4131f9acb59b85e2602c2a3fcdc835494a1f4e5ec18b226c80232b36a75a45fdf09a7ea9e98efbde1450d1194bf12e15a4c5f9eb5c0bce5269e0c3b28cfab655d81a61a20b4be2f54459bb25a0db94c52218be109a7426de83014424789aaa90e5056e632a698115e282c1a56410f26c2072f193481a9dcd880572005e64f4082ecf":hex:"3f2efc595880a7d47fcf3cba04983ea54c4b73fb":hex:"18da3cdcfe79bfb77fd9c32f377ad399146f0a8e810620233271a6e3ed3248903f5cdc92dc79b55d3e11615aa056a795853792a3998c349ca5c457e8ca7d29d796aa24f83491709befcfb1510ea513c92829a3f00b104f655634f320752e130ec0ccf6754ff893db302932bb025eb60e87822598fc619e0e981737a9a4c4152d33":int:0 + +RSASSA-PSS Signature Example 7_6 (verify) +3:int:1030:int:16:char*:"37c9da4a66c8c408b8da27d0c9d79f8ccb1eafc1d2fe48746d940b7c4ef5dee18ad12647cefaa0c4b3188b221c515386759b93f02024b25ab9242f8357d8f3fd49640ee5e643eaf6c64deefa7089727c8ff03993333915c6ef21bf5975b6e50d118b51008ec33e9f01a0a545a10a836a43ddbca9d8b5c5d3548022d7064ea29ab3":int:16:char*:"010001":exp:0:exp:0:hex:"2358097086c899323e75d9c90d0c09f12d9d54edfbdf70a9c2eb5a04d8f36b9b2bdf2aabe0a5bda1968937f9d6ebd3b6b257efb3136d4131f9acb59b85e2602c2a3fcdc835494a1f4e5ec18b226c80232b36a75a45fdf09a7ea9e98efbde1450d1194bf12e15a4c5f9eb5c0bce5269e0c3b28cfab655d81a61a20b4be2f54459bb25a0db94c52218be109a7426de83014424789aaa90e5056e632a698115e282c1a56410f26c2072f193481a9dcd880572005e64f4082ecf":char*:"3f2efc595880a7d47fcf3cba04983ea54c4b73fb":hex:"18da3cdcfe79bfb77fd9c32f377ad399146f0a8e810620233271a6e3ed3248903f5cdc92dc79b55d3e11615aa056a795853792a3998c349ca5c457e8ca7d29d796aa24f83491709befcfb1510ea513c92829a3f00b104f655634f320752e130ec0ccf6754ff893db302932bb025eb60e87822598fc619e0e981737a9a4c4152d33":int:0 + +RSASSA-PSS Signature Example 8_1 +2:int:1031:int:16:char*:"08dad7f11363faa623d5d6d5e8a319328d82190d7127d2846c439b0ab72619b0a43a95320e4ec34fc3a9cea876422305bd76c5ba7be9e2f410c8060645a1d29edb":int:16:char*:"0847e732376fc7900f898ea82eb2b0fc418565fdae62f7d9ec4ce2217b97990dd272db157f99f63c0dcbb9fbacdbd4c4dadb6df67756358ca4174825b48f49706d":int:16:char*:"495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f778a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e582de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a2b8efab0561b0810344739ada0733f":int:16:char*:"010001":exp:0:exp:0:hex:"81332f4be62948415ea1d899792eeacf6c6e1db1da8be13b5cea41db2fed467092e1ff398914c714259775f595f8547f735692a575e6923af78f22c6997ddb90fb6f72d7bb0dd5744a31decd3dc3685849836ed34aec596304ad11843c4f88489f209735f5fb7fdaf7cec8addc5818168f880acbf490d51005b7a8e84e43e54287977571dd99eea4b161eb2df1f5108f12a4142a83322edb05a75487a3435c9a78ce53ed93bc550857d7a9fb":hex:"1d65491d79c864b373009be6f6f2467bac4c78fa":hex:"0262ac254bfa77f3c1aca22c5179f8f040422b3c5bafd40a8f21cf0fa5a667ccd5993d42dbafb409c520e25fce2b1ee1e716577f1efa17f3da28052f40f0419b23106d7845aaf01125b698e7a4dfe92d3967bb00c4d0d35ba3552ab9a8b3eef07c7fecdbc5424ac4db1e20cb37d0b2744769940ea907e17fbbca673b20522380c5":int:0 + +RSASSA-PSS Signature Example 8_1 (verify) +3:int:1031:int:16:char*:"495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f778a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e582de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a2b8efab0561b0810344739ada0733f":int:16:char*:"010001":exp:0:exp:0:hex:"81332f4be62948415ea1d899792eeacf6c6e1db1da8be13b5cea41db2fed467092e1ff398914c714259775f595f8547f735692a575e6923af78f22c6997ddb90fb6f72d7bb0dd5744a31decd3dc3685849836ed34aec596304ad11843c4f88489f209735f5fb7fdaf7cec8addc5818168f880acbf490d51005b7a8e84e43e54287977571dd99eea4b161eb2df1f5108f12a4142a83322edb05a75487a3435c9a78ce53ed93bc550857d7a9fb":char*:"1d65491d79c864b373009be6f6f2467bac4c78fa":hex:"0262ac254bfa77f3c1aca22c5179f8f040422b3c5bafd40a8f21cf0fa5a667ccd5993d42dbafb409c520e25fce2b1ee1e716577f1efa17f3da28052f40f0419b23106d7845aaf01125b698e7a4dfe92d3967bb00c4d0d35ba3552ab9a8b3eef07c7fecdbc5424ac4db1e20cb37d0b2744769940ea907e17fbbca673b20522380c5":int:0 + +RSASSA-PSS Signature Example 8_2 +2:int:1031:int:16:char*:"08dad7f11363faa623d5d6d5e8a319328d82190d7127d2846c439b0ab72619b0a43a95320e4ec34fc3a9cea876422305bd76c5ba7be9e2f410c8060645a1d29edb":int:16:char*:"0847e732376fc7900f898ea82eb2b0fc418565fdae62f7d9ec4ce2217b97990dd272db157f99f63c0dcbb9fbacdbd4c4dadb6df67756358ca4174825b48f49706d":int:16:char*:"495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f778a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e582de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a2b8efab0561b0810344739ada0733f":int:16:char*:"010001":exp:0:exp:0:hex:"e2f96eaf0e05e7ba326ecca0ba7fd2f7c02356f3cede9d0faabf4fcc8e60a973e5595fd9ea08":hex:"435c098aa9909eb2377f1248b091b68987ff1838":hex:"2707b9ad5115c58c94e932e8ec0a280f56339e44a1b58d4ddcff2f312e5f34dcfe39e89c6a94dcee86dbbdae5b79ba4e0819a9e7bfd9d982e7ee6c86ee68396e8b3a14c9c8f34b178eb741f9d3f121109bf5c8172fada2e768f9ea1433032c004a8aa07eb990000a48dc94c8bac8aabe2b09b1aa46c0a2aa0e12f63fbba775ba7e":int:0 + +RSASSA-PSS Signature Example 8_2 (verify) +3:int:1031:int:16:char*:"495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f778a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e582de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a2b8efab0561b0810344739ada0733f":int:16:char*:"010001":exp:0:exp:0:hex:"e2f96eaf0e05e7ba326ecca0ba7fd2f7c02356f3cede9d0faabf4fcc8e60a973e5595fd9ea08":char*:"435c098aa9909eb2377f1248b091b68987ff1838":hex:"2707b9ad5115c58c94e932e8ec0a280f56339e44a1b58d4ddcff2f312e5f34dcfe39e89c6a94dcee86dbbdae5b79ba4e0819a9e7bfd9d982e7ee6c86ee68396e8b3a14c9c8f34b178eb741f9d3f121109bf5c8172fada2e768f9ea1433032c004a8aa07eb990000a48dc94c8bac8aabe2b09b1aa46c0a2aa0e12f63fbba775ba7e":int:0 + +RSASSA-PSS Signature Example 8_3 +2:int:1031:int:16:char*:"08dad7f11363faa623d5d6d5e8a319328d82190d7127d2846c439b0ab72619b0a43a95320e4ec34fc3a9cea876422305bd76c5ba7be9e2f410c8060645a1d29edb":int:16:char*:"0847e732376fc7900f898ea82eb2b0fc418565fdae62f7d9ec4ce2217b97990dd272db157f99f63c0dcbb9fbacdbd4c4dadb6df67756358ca4174825b48f49706d":int:16:char*:"495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f778a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e582de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a2b8efab0561b0810344739ada0733f":int:16:char*:"010001":exp:0:exp:0:hex:"e35c6ed98f64a6d5a648fcab8adb16331db32e5d15c74a40edf94c3dc4a4de792d190889f20f1e24ed12054a6b28798fcb42d1c548769b734c96373142092aed277603f4738df4dc1446586d0ec64da4fb60536db2ae17fc7e3c04bbfbbbd907bf117c08636fa16f95f51a6216934d3e34f85030f17bbbc5ba69144058aff081e0b19cf03c17195c5e888ba58f6fe0a02e5c3bda9719a7":hex:"c6ebbe76df0c4aea32c474175b2f136862d04529":hex:"2ad20509d78cf26d1b6c406146086e4b0c91a91c2bd164c87b966b8faa42aa0ca446022323ba4b1a1b89706d7f4c3be57d7b69702d168ab5955ee290356b8c4a29ed467d547ec23cbadf286ccb5863c6679da467fc9324a151c7ec55aac6db4084f82726825cfe1aa421bc64049fb42f23148f9c25b2dc300437c38d428aa75f96":int:0 + +RSASSA-PSS Signature Example 8_3 (verify) +3:int:1031:int:16:char*:"495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f778a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e582de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a2b8efab0561b0810344739ada0733f":int:16:char*:"010001":exp:0:exp:0:hex:"e35c6ed98f64a6d5a648fcab8adb16331db32e5d15c74a40edf94c3dc4a4de792d190889f20f1e24ed12054a6b28798fcb42d1c548769b734c96373142092aed277603f4738df4dc1446586d0ec64da4fb60536db2ae17fc7e3c04bbfbbbd907bf117c08636fa16f95f51a6216934d3e34f85030f17bbbc5ba69144058aff081e0b19cf03c17195c5e888ba58f6fe0a02e5c3bda9719a7":char*:"c6ebbe76df0c4aea32c474175b2f136862d04529":hex:"2ad20509d78cf26d1b6c406146086e4b0c91a91c2bd164c87b966b8faa42aa0ca446022323ba4b1a1b89706d7f4c3be57d7b69702d168ab5955ee290356b8c4a29ed467d547ec23cbadf286ccb5863c6679da467fc9324a151c7ec55aac6db4084f82726825cfe1aa421bc64049fb42f23148f9c25b2dc300437c38d428aa75f96":int:0 + +RSASSA-PSS Signature Example 8_4 +2:int:1031:int:16:char*:"08dad7f11363faa623d5d6d5e8a319328d82190d7127d2846c439b0ab72619b0a43a95320e4ec34fc3a9cea876422305bd76c5ba7be9e2f410c8060645a1d29edb":int:16:char*:"0847e732376fc7900f898ea82eb2b0fc418565fdae62f7d9ec4ce2217b97990dd272db157f99f63c0dcbb9fbacdbd4c4dadb6df67756358ca4174825b48f49706d":int:16:char*:"495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f778a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e582de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a2b8efab0561b0810344739ada0733f":int:16:char*:"010001":exp:0:exp:0:hex:"dbc5f750a7a14be2b93e838d18d14a8695e52e8add9c0ac733b8f56d2747e529a0cca532dd49b902aefed514447f9e81d16195c2853868cb9b30f7d0d495c69d01b5c5d50b27045db3866c2324a44a110b1717746de457d1c8c45c3cd2a92970c3d59632055d4c98a41d6e99e2a3ddd5f7f9979ab3cd18f37505d25141de2a1bff17b3a7dce9419ecc385cf11d72840f19953fd0509251f6cafde2893d0e75c781ba7a5012ca401a4fa99e04b3c3249f926d5afe82cc87dab22c3c1b105de48e34ace9c9124e59597ac7ebf8":hex:"021fdcc6ebb5e19b1cb16e9c67f27681657fe20a":hex:"1e24e6e58628e5175044a9eb6d837d48af1260b0520e87327de7897ee4d5b9f0df0be3e09ed4dea8c1454ff3423bb08e1793245a9df8bf6ab3968c8eddc3b5328571c77f091cc578576912dfebd164b9de5454fe0be1c1f6385b328360ce67ec7a05f6e30eb45c17c48ac70041d2cab67f0a2ae7aafdcc8d245ea3442a6300ccc7":int:0 + +RSASSA-PSS Signature Example 8_4 (verify) +3:int:1031:int:16:char*:"495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f778a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e582de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a2b8efab0561b0810344739ada0733f":int:16:char*:"010001":exp:0:exp:0:hex:"dbc5f750a7a14be2b93e838d18d14a8695e52e8add9c0ac733b8f56d2747e529a0cca532dd49b902aefed514447f9e81d16195c2853868cb9b30f7d0d495c69d01b5c5d50b27045db3866c2324a44a110b1717746de457d1c8c45c3cd2a92970c3d59632055d4c98a41d6e99e2a3ddd5f7f9979ab3cd18f37505d25141de2a1bff17b3a7dce9419ecc385cf11d72840f19953fd0509251f6cafde2893d0e75c781ba7a5012ca401a4fa99e04b3c3249f926d5afe82cc87dab22c3c1b105de48e34ace9c9124e59597ac7ebf8":char*:"021fdcc6ebb5e19b1cb16e9c67f27681657fe20a":hex:"1e24e6e58628e5175044a9eb6d837d48af1260b0520e87327de7897ee4d5b9f0df0be3e09ed4dea8c1454ff3423bb08e1793245a9df8bf6ab3968c8eddc3b5328571c77f091cc578576912dfebd164b9de5454fe0be1c1f6385b328360ce67ec7a05f6e30eb45c17c48ac70041d2cab67f0a2ae7aafdcc8d245ea3442a6300ccc7":int:0 + +RSASSA-PSS Signature Example 8_5 +2:int:1031:int:16:char*:"08dad7f11363faa623d5d6d5e8a319328d82190d7127d2846c439b0ab72619b0a43a95320e4ec34fc3a9cea876422305bd76c5ba7be9e2f410c8060645a1d29edb":int:16:char*:"0847e732376fc7900f898ea82eb2b0fc418565fdae62f7d9ec4ce2217b97990dd272db157f99f63c0dcbb9fbacdbd4c4dadb6df67756358ca4174825b48f49706d":int:16:char*:"495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f778a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e582de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a2b8efab0561b0810344739ada0733f":int:16:char*:"010001":exp:0:exp:0:hex:"04dc251be72e88e5723485b6383a637e2fefe07660c519a560b8bc18bdedb86eae2364ea53ba9dca6eb3d2e7d6b806af42b3e87f291b4a8881d5bf572cc9a85e19c86acb28f098f9da0383c566d3c0f58cfd8f395dcf602e5cd40e8c7183f714996e2297ef":hex:"c558d7167cbb4508ada042971e71b1377eea4269":hex:"33341ba3576a130a50e2a5cf8679224388d5693f5accc235ac95add68e5eb1eec31666d0ca7a1cda6f70a1aa762c05752a51950cdb8af3c5379f18cfe6b5bc55a4648226a15e912ef19ad77adeea911d67cfefd69ba43fa4119135ff642117ba985a7e0100325e9519f1ca6a9216bda055b5785015291125e90dcd07a2ca9673ee":int:0 + +RSASSA-PSS Signature Example 8_5 (verify) +3:int:1031:int:16:char*:"495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f778a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e582de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a2b8efab0561b0810344739ada0733f":int:16:char*:"010001":exp:0:exp:0:hex:"04dc251be72e88e5723485b6383a637e2fefe07660c519a560b8bc18bdedb86eae2364ea53ba9dca6eb3d2e7d6b806af42b3e87f291b4a8881d5bf572cc9a85e19c86acb28f098f9da0383c566d3c0f58cfd8f395dcf602e5cd40e8c7183f714996e2297ef":char*:"c558d7167cbb4508ada042971e71b1377eea4269":hex:"33341ba3576a130a50e2a5cf8679224388d5693f5accc235ac95add68e5eb1eec31666d0ca7a1cda6f70a1aa762c05752a51950cdb8af3c5379f18cfe6b5bc55a4648226a15e912ef19ad77adeea911d67cfefd69ba43fa4119135ff642117ba985a7e0100325e9519f1ca6a9216bda055b5785015291125e90dcd07a2ca9673ee":int:0 + +RSASSA-PSS Signature Example 8_6 +2:int:1031:int:16:char*:"08dad7f11363faa623d5d6d5e8a319328d82190d7127d2846c439b0ab72619b0a43a95320e4ec34fc3a9cea876422305bd76c5ba7be9e2f410c8060645a1d29edb":int:16:char*:"0847e732376fc7900f898ea82eb2b0fc418565fdae62f7d9ec4ce2217b97990dd272db157f99f63c0dcbb9fbacdbd4c4dadb6df67756358ca4174825b48f49706d":int:16:char*:"495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f778a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e582de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a2b8efab0561b0810344739ada0733f":int:16:char*:"010001":exp:0:exp:0:hex:"0ea37df9a6fea4a8b610373c24cf390c20fa6e2135c400c8a34f5c183a7e8ea4c9ae090ed31759f42dc77719cca400ecdcc517acfc7ac6902675b2ef30c509665f3321482fc69a9fb570d15e01c845d0d8e50d2a24cbf1cf0e714975a5db7b18d9e9e9cb91b5cb16869060ed18b7b56245503f0caf90352b8de81cb5a1d9c6336092f0cd":hex:"76fd4e64fdc98eb927a0403e35a084e76ba9f92a":hex:"1ed1d848fb1edb44129bd9b354795af97a069a7a00d0151048593e0c72c3517ff9ff2a41d0cb5a0ac860d736a199704f7cb6a53986a88bbd8abcc0076a2ce847880031525d449da2ac78356374c536e343faa7cba42a5aaa6506087791c06a8e989335aed19bfab2d5e67e27fb0c2875af896c21b6e8e7309d04e4f6727e69463e":int:0 + +RSASSA-PSS Signature Example 8_6 (verify) +3:int:1031:int:16:char*:"495370a1fb18543c16d3631e3163255df62be6eee890d5f25509e4f778a8ea6fbbbcdf85dff64e0d972003ab3681fbba6dd41fd541829b2e582de9f2a4a4e0a2d0900bef4753db3cee0ee06c7dfae8b1d53b5953218f9cceea695b08668edeaadced9463b1d790d5ebf27e9115b46cad4d9a2b8efab0561b0810344739ada0733f":int:16:char*:"010001":exp:0:exp:0:hex:"0ea37df9a6fea4a8b610373c24cf390c20fa6e2135c400c8a34f5c183a7e8ea4c9ae090ed31759f42dc77719cca400ecdcc517acfc7ac6902675b2ef30c509665f3321482fc69a9fb570d15e01c845d0d8e50d2a24cbf1cf0e714975a5db7b18d9e9e9cb91b5cb16869060ed18b7b56245503f0caf90352b8de81cb5a1d9c6336092f0cd":char*:"76fd4e64fdc98eb927a0403e35a084e76ba9f92a":hex:"1ed1d848fb1edb44129bd9b354795af97a069a7a00d0151048593e0c72c3517ff9ff2a41d0cb5a0ac860d736a199704f7cb6a53986a88bbd8abcc0076a2ce847880031525d449da2ac78356374c536e343faa7cba42a5aaa6506087791c06a8e989335aed19bfab2d5e67e27fb0c2875af896c21b6e8e7309d04e4f6727e69463e":int:0 + +RSASSA-PSS Signature Example 9_1 +2:int:1536:int:16:char*:"f8eb97e98df12664eefdb761596a69ddcd0e76daece6ed4bf5a1b50ac086f7928a4d2f8726a77e515b74da41988f220b1cc87aa1fc810ce99a82f2d1ce821edced794c6941f42c7a1a0b8c4d28c75ec60b652279f6154a762aed165d47dee367":int:16:char*:"ed4d71d0a6e24b93c2e5f6b4bbe05f5fb0afa042d204fe3378d365c2f288b6a8dad7efe45d153eef40cacc7b81ff934002d108994b94a5e4728cd9c963375ae49965bda55cbf0efed8d6553b4027f2d86208a6e6b489c176128092d629e49d3d":int:16:char*:"e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd06c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee315ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddbc2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8de3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6fd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b":int:16:char*:"010001":exp:0:exp:0:hex:"a88e265855e9d7ca36c68795f0b31b591cd6587c71d060a0b3f7f3eaef43795922028bc2b6ad467cfc2d7f659c5385aa70ba3672cdde4cfe4970cc7904601b278872bf51321c4a972f3c95570f3445d4f57980e0f20df54846e6a52c668f1288c03f95006ea32f562d40d52af9feb32f0fa06db65b588a237b34e592d55cf979f903a642ef64d2ed542aa8c77dc1dd762f45a59303ed75e541ca271e2b60ca709e44fa0661131e8d5d4163fd8d398566ce26de8730e72f9cca737641c244159420637028df0a18079d6208ea8b4711a2c750f5":hex:"c0a425313df8d7564bd2434d311523d5257eed80":hex:"586107226c3ce013a7c8f04d1a6a2959bb4b8e205ba43a27b50f124111bc35ef589b039f5932187cb696d7d9a32c0c38300a5cdda4834b62d2eb240af33f79d13dfbf095bf599e0d9686948c1964747b67e89c9aba5cd85016236f566cc5802cb13ead51bc7ca6bef3b94dcbdbb1d570469771df0e00b1a8a06777472d2316279edae86474668d4e1efff95f1de61c6020da32ae92bbf16520fef3cf4d88f61121f24bbd9fe91b59caf1235b2a93ff81fc403addf4ebdea84934a9cdaf8e1a9e":int:0 + +RSASSA-PSS Signature Example 9_1 (verify) +3:int:1536:int:16:char*:"e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd06c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee315ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddbc2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8de3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6fd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b":int:16:char*:"010001":exp:0:exp:0:hex:"a88e265855e9d7ca36c68795f0b31b591cd6587c71d060a0b3f7f3eaef43795922028bc2b6ad467cfc2d7f659c5385aa70ba3672cdde4cfe4970cc7904601b278872bf51321c4a972f3c95570f3445d4f57980e0f20df54846e6a52c668f1288c03f95006ea32f562d40d52af9feb32f0fa06db65b588a237b34e592d55cf979f903a642ef64d2ed542aa8c77dc1dd762f45a59303ed75e541ca271e2b60ca709e44fa0661131e8d5d4163fd8d398566ce26de8730e72f9cca737641c244159420637028df0a18079d6208ea8b4711a2c750f5":char*:"c0a425313df8d7564bd2434d311523d5257eed80":hex:"586107226c3ce013a7c8f04d1a6a2959bb4b8e205ba43a27b50f124111bc35ef589b039f5932187cb696d7d9a32c0c38300a5cdda4834b62d2eb240af33f79d13dfbf095bf599e0d9686948c1964747b67e89c9aba5cd85016236f566cc5802cb13ead51bc7ca6bef3b94dcbdbb1d570469771df0e00b1a8a06777472d2316279edae86474668d4e1efff95f1de61c6020da32ae92bbf16520fef3cf4d88f61121f24bbd9fe91b59caf1235b2a93ff81fc403addf4ebdea84934a9cdaf8e1a9e":int:0 + +RSASSA-PSS Signature Example 9_2 +2:int:1536:int:16:char*:"f8eb97e98df12664eefdb761596a69ddcd0e76daece6ed4bf5a1b50ac086f7928a4d2f8726a77e515b74da41988f220b1cc87aa1fc810ce99a82f2d1ce821edced794c6941f42c7a1a0b8c4d28c75ec60b652279f6154a762aed165d47dee367":int:16:char*:"ed4d71d0a6e24b93c2e5f6b4bbe05f5fb0afa042d204fe3378d365c2f288b6a8dad7efe45d153eef40cacc7b81ff934002d108994b94a5e4728cd9c963375ae49965bda55cbf0efed8d6553b4027f2d86208a6e6b489c176128092d629e49d3d":int:16:char*:"e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd06c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee315ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddbc2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8de3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6fd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b":int:16:char*:"010001":exp:0:exp:0:hex:"c8c9c6af04acda414d227ef23e0820c3732c500dc87275e95b0d095413993c2658bc1d988581ba879c2d201f14cb88ced153a01969a7bf0a7be79c84c1486bc12b3fa6c59871b6827c8ce253ca5fefa8a8c690bf326e8e37cdb96d90a82ebab69f86350e1822e8bd536a2e":hex:"b307c43b4850a8dac2f15f32e37839ef8c5c0e91":hex:"80b6d643255209f0a456763897ac9ed259d459b49c2887e5882ecb4434cfd66dd7e1699375381e51cd7f554f2c271704b399d42b4be2540a0eca61951f55267f7c2878c122842dadb28b01bd5f8c025f7e228418a673c03d6bc0c736d0a29546bd67f786d9d692ccea778d71d98c2063b7a71092187a4d35af108111d83e83eae46c46aa34277e06044589903788f1d5e7cee25fb485e92949118814d6f2c3ee361489016f327fb5bc517eb50470bffa1afa5f4ce9aa0ce5b8ee19bf5501b958":int:0 + +RSASSA-PSS Signature Example 9_2 (verify) +3:int:1536:int:16:char*:"e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd06c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee315ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddbc2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8de3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6fd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b":int:16:char*:"010001":exp:0:exp:0:hex:"c8c9c6af04acda414d227ef23e0820c3732c500dc87275e95b0d095413993c2658bc1d988581ba879c2d201f14cb88ced153a01969a7bf0a7be79c84c1486bc12b3fa6c59871b6827c8ce253ca5fefa8a8c690bf326e8e37cdb96d90a82ebab69f86350e1822e8bd536a2e":char*:"b307c43b4850a8dac2f15f32e37839ef8c5c0e91":hex:"80b6d643255209f0a456763897ac9ed259d459b49c2887e5882ecb4434cfd66dd7e1699375381e51cd7f554f2c271704b399d42b4be2540a0eca61951f55267f7c2878c122842dadb28b01bd5f8c025f7e228418a673c03d6bc0c736d0a29546bd67f786d9d692ccea778d71d98c2063b7a71092187a4d35af108111d83e83eae46c46aa34277e06044589903788f1d5e7cee25fb485e92949118814d6f2c3ee361489016f327fb5bc517eb50470bffa1afa5f4ce9aa0ce5b8ee19bf5501b958":int:0 + +RSASSA-PSS Signature Example 9_3 +2:int:1536:int:16:char*:"f8eb97e98df12664eefdb761596a69ddcd0e76daece6ed4bf5a1b50ac086f7928a4d2f8726a77e515b74da41988f220b1cc87aa1fc810ce99a82f2d1ce821edced794c6941f42c7a1a0b8c4d28c75ec60b652279f6154a762aed165d47dee367":int:16:char*:"ed4d71d0a6e24b93c2e5f6b4bbe05f5fb0afa042d204fe3378d365c2f288b6a8dad7efe45d153eef40cacc7b81ff934002d108994b94a5e4728cd9c963375ae49965bda55cbf0efed8d6553b4027f2d86208a6e6b489c176128092d629e49d3d":int:16:char*:"e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd06c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee315ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddbc2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8de3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6fd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b":int:16:char*:"010001":exp:0:exp:0:hex:"0afad42ccd4fc60654a55002d228f52a4a5fe03b8bbb08ca82daca558b44dbe1266e50c0e745a36d9d2904e3408abcd1fd569994063f4a75cc72f2fee2a0cd893a43af1c5b8b487df0a71610024e4f6ddf9f28ad0813c1aab91bcb3c9064d5ff742deffea657094139369e5ea6f4a96319a5cc8224145b545062758fefd1fe3409ae169259c6cdfd6b5f2958e314faecbe69d2cace58ee55179ab9b3e6d1ecc14a557c5febe988595264fc5da1c571462eca798a18a1a4940cdab4a3e92009ccd42e1e947b1314e32238a2dece7d23a89b5b30c751fd0a4a430d2c548594":hex:"9a2b007e80978bbb192c354eb7da9aedfc74dbf5":hex:"484408f3898cd5f53483f80819efbf2708c34d27a8b2a6fae8b322f9240237f981817aca1846f1084daa6d7c0795f6e5bf1af59c38e1858437ce1f7ec419b98c8736adf6dd9a00b1806d2bd3ad0a73775e05f52dfef3a59ab4b08143f0df05cd1ad9d04bececa6daa4a2129803e200cbc77787caf4c1d0663a6c5987b605952019782caf2ec1426d68fb94ed1d4be816a7ed081b77e6ab330b3ffc073820fecde3727fcbe295ee61a050a343658637c3fd659cfb63736de32d9f90d3c2f63eca":int:0 + +RSASSA-PSS Signature Example 9_3 (verify) +3:int:1536:int:16:char*:"e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd06c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee315ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddbc2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8de3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6fd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b":int:16:char*:"010001":exp:0:exp:0:hex:"0afad42ccd4fc60654a55002d228f52a4a5fe03b8bbb08ca82daca558b44dbe1266e50c0e745a36d9d2904e3408abcd1fd569994063f4a75cc72f2fee2a0cd893a43af1c5b8b487df0a71610024e4f6ddf9f28ad0813c1aab91bcb3c9064d5ff742deffea657094139369e5ea6f4a96319a5cc8224145b545062758fefd1fe3409ae169259c6cdfd6b5f2958e314faecbe69d2cace58ee55179ab9b3e6d1ecc14a557c5febe988595264fc5da1c571462eca798a18a1a4940cdab4a3e92009ccd42e1e947b1314e32238a2dece7d23a89b5b30c751fd0a4a430d2c548594":char*:"9a2b007e80978bbb192c354eb7da9aedfc74dbf5":hex:"484408f3898cd5f53483f80819efbf2708c34d27a8b2a6fae8b322f9240237f981817aca1846f1084daa6d7c0795f6e5bf1af59c38e1858437ce1f7ec419b98c8736adf6dd9a00b1806d2bd3ad0a73775e05f52dfef3a59ab4b08143f0df05cd1ad9d04bececa6daa4a2129803e200cbc77787caf4c1d0663a6c5987b605952019782caf2ec1426d68fb94ed1d4be816a7ed081b77e6ab330b3ffc073820fecde3727fcbe295ee61a050a343658637c3fd659cfb63736de32d9f90d3c2f63eca":int:0 + +RSASSA-PSS Signature Example 9_4 +2:int:1536:int:16:char*:"f8eb97e98df12664eefdb761596a69ddcd0e76daece6ed4bf5a1b50ac086f7928a4d2f8726a77e515b74da41988f220b1cc87aa1fc810ce99a82f2d1ce821edced794c6941f42c7a1a0b8c4d28c75ec60b652279f6154a762aed165d47dee367":int:16:char*:"ed4d71d0a6e24b93c2e5f6b4bbe05f5fb0afa042d204fe3378d365c2f288b6a8dad7efe45d153eef40cacc7b81ff934002d108994b94a5e4728cd9c963375ae49965bda55cbf0efed8d6553b4027f2d86208a6e6b489c176128092d629e49d3d":int:16:char*:"e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd06c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee315ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddbc2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8de3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6fd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b":int:16:char*:"010001":exp:0:exp:0:hex:"1dfd43b46c93db82629bdae2bd0a12b882ea04c3b465f5cf93023f01059626dbbe99f26bb1be949dddd16dc7f3debb19a194627f0b224434df7d8700e9e98b06e360c12fdbe3d19f51c9684eb9089ecbb0a2f0450399d3f59eac7294085d044f5393c6ce737423d8b86c415370d389e30b9f0a3c02d25d0082e8ad6f3f1ef24a45c3cf82b383367063a4d4613e4264f01b2dac2e5aa42043f8fb5f69fa871d14fb273e767a531c40f02f343bc2fb45a0c7e0f6be2561923a77211d66a6e2dbb43c366350beae22da3ac2c1f5077096fcb5c4bf255f7574351ae0b1e1f03632817c0856d4a8ba97afbdc8b85855402bc56926fcec209f9ea8":hex:"70f382bddf4d5d2dd88b3bc7b7308be632b84045":hex:"84ebeb481be59845b46468bafb471c0112e02b235d84b5d911cbd1926ee5074ae0424495cb20e82308b8ebb65f419a03fb40e72b78981d88aad143053685172c97b29c8b7bf0ae73b5b2263c403da0ed2f80ff7450af7828eb8b86f0028bd2a8b176a4d228cccea18394f238b09ff758cc00bc04301152355742f282b54e663a919e709d8da24ade5500a7b9aa50226e0ca52923e6c2d860ec50ff480fa57477e82b0565f4379f79c772d5c2da80af9fbf325ece6fc20b00961614bee89a183e":int:0 + +RSASSA-PSS Signature Example 9_4 (verify) +3:int:1536:int:16:char*:"e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd06c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee315ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddbc2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8de3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6fd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b":int:16:char*:"010001":exp:0:exp:0:hex:"1dfd43b46c93db82629bdae2bd0a12b882ea04c3b465f5cf93023f01059626dbbe99f26bb1be949dddd16dc7f3debb19a194627f0b224434df7d8700e9e98b06e360c12fdbe3d19f51c9684eb9089ecbb0a2f0450399d3f59eac7294085d044f5393c6ce737423d8b86c415370d389e30b9f0a3c02d25d0082e8ad6f3f1ef24a45c3cf82b383367063a4d4613e4264f01b2dac2e5aa42043f8fb5f69fa871d14fb273e767a531c40f02f343bc2fb45a0c7e0f6be2561923a77211d66a6e2dbb43c366350beae22da3ac2c1f5077096fcb5c4bf255f7574351ae0b1e1f03632817c0856d4a8ba97afbdc8b85855402bc56926fcec209f9ea8":char*:"70f382bddf4d5d2dd88b3bc7b7308be632b84045":hex:"84ebeb481be59845b46468bafb471c0112e02b235d84b5d911cbd1926ee5074ae0424495cb20e82308b8ebb65f419a03fb40e72b78981d88aad143053685172c97b29c8b7bf0ae73b5b2263c403da0ed2f80ff7450af7828eb8b86f0028bd2a8b176a4d228cccea18394f238b09ff758cc00bc04301152355742f282b54e663a919e709d8da24ade5500a7b9aa50226e0ca52923e6c2d860ec50ff480fa57477e82b0565f4379f79c772d5c2da80af9fbf325ece6fc20b00961614bee89a183e":int:0 + +RSASSA-PSS Signature Example 9_5 +2:int:1536:int:16:char*:"f8eb97e98df12664eefdb761596a69ddcd0e76daece6ed4bf5a1b50ac086f7928a4d2f8726a77e515b74da41988f220b1cc87aa1fc810ce99a82f2d1ce821edced794c6941f42c7a1a0b8c4d28c75ec60b652279f6154a762aed165d47dee367":int:16:char*:"ed4d71d0a6e24b93c2e5f6b4bbe05f5fb0afa042d204fe3378d365c2f288b6a8dad7efe45d153eef40cacc7b81ff934002d108994b94a5e4728cd9c963375ae49965bda55cbf0efed8d6553b4027f2d86208a6e6b489c176128092d629e49d3d":int:16:char*:"e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd06c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee315ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddbc2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8de3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6fd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b":int:16:char*:"010001":exp:0:exp:0:hex:"1bdc6e7c98fb8cf54e9b097b66a831e9cfe52d9d4888448ee4b0978093ba1d7d73ae78b3a62ba4ad95cd289ccb9e005226bb3d178bccaa821fb044a4e21ee97696c14d0678c94c2dae93b0ad73922218553daa7e44ebe57725a7a45cc72b9b2138a6b17c8db411ce8279ee1241aff0a8bec6f77f87edb0c69cb27236e3435a800b192e4f11e519e3fe30fc30eaccca4fbb41769029bf708e817a9e683805be67fa100984683b74838e3bcffa79366eed1d481c76729118838f31ba8a048a93c1be4424598e8df6328b7a77880a3f9c7e2e8dfca8eb5a26fb86bdc556d42bbe01d9fa6ed80646491c9341":hex:"d689257a86effa68212c5e0c619eca295fb91b67":hex:"82102df8cb91e7179919a04d26d335d64fbc2f872c44833943241de8454810274cdf3db5f42d423db152af7135f701420e39b494a67cbfd19f9119da233a23da5c6439b5ba0d2bc373eee3507001378d4a4073856b7fe2aba0b5ee93b27f4afec7d4d120921c83f606765b02c19e4d6a1a3b95fa4c422951be4f52131077ef17179729cddfbdb56950dbaceefe78cb16640a099ea56d24389eef10f8fecb31ba3ea3b227c0a86698bb89e3e9363905bf22777b2a3aa521b65b4cef76d83bde4c":int:0 + +RSASSA-PSS Signature Example 9_5 (verify) +3:int:1536:int:16:char*:"e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd06c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee315ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddbc2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8de3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6fd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b":int:16:char*:"010001":exp:0:exp:0:hex:"1bdc6e7c98fb8cf54e9b097b66a831e9cfe52d9d4888448ee4b0978093ba1d7d73ae78b3a62ba4ad95cd289ccb9e005226bb3d178bccaa821fb044a4e21ee97696c14d0678c94c2dae93b0ad73922218553daa7e44ebe57725a7a45cc72b9b2138a6b17c8db411ce8279ee1241aff0a8bec6f77f87edb0c69cb27236e3435a800b192e4f11e519e3fe30fc30eaccca4fbb41769029bf708e817a9e683805be67fa100984683b74838e3bcffa79366eed1d481c76729118838f31ba8a048a93c1be4424598e8df6328b7a77880a3f9c7e2e8dfca8eb5a26fb86bdc556d42bbe01d9fa6ed80646491c9341":char*:"d689257a86effa68212c5e0c619eca295fb91b67":hex:"82102df8cb91e7179919a04d26d335d64fbc2f872c44833943241de8454810274cdf3db5f42d423db152af7135f701420e39b494a67cbfd19f9119da233a23da5c6439b5ba0d2bc373eee3507001378d4a4073856b7fe2aba0b5ee93b27f4afec7d4d120921c83f606765b02c19e4d6a1a3b95fa4c422951be4f52131077ef17179729cddfbdb56950dbaceefe78cb16640a099ea56d24389eef10f8fecb31ba3ea3b227c0a86698bb89e3e9363905bf22777b2a3aa521b65b4cef76d83bde4c":int:0 + +RSASSA-PSS Signature Example 9_6 +2:int:1536:int:16:char*:"f8eb97e98df12664eefdb761596a69ddcd0e76daece6ed4bf5a1b50ac086f7928a4d2f8726a77e515b74da41988f220b1cc87aa1fc810ce99a82f2d1ce821edced794c6941f42c7a1a0b8c4d28c75ec60b652279f6154a762aed165d47dee367":int:16:char*:"ed4d71d0a6e24b93c2e5f6b4bbe05f5fb0afa042d204fe3378d365c2f288b6a8dad7efe45d153eef40cacc7b81ff934002d108994b94a5e4728cd9c963375ae49965bda55cbf0efed8d6553b4027f2d86208a6e6b489c176128092d629e49d3d":int:16:char*:"e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd06c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee315ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddbc2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8de3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6fd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b":int:16:char*:"010001":exp:0:exp:0:hex:"88c7a9f1360401d90e53b101b61c5325c3c75db1b411fbeb8e830b75e96b56670ad245404e16793544ee354bc613a90cc9848715a73db5893e7f6d279815c0c1de83ef8e2956e3a56ed26a888d7a9cdcd042f4b16b7fa51ef1a0573662d16a302d0ec5b285d2e03ad96529c87b3d374db372d95b2443d061b6b1a350ba87807ed083afd1eb05c3f52f4eba5ed2227714fdb50b9d9d9dd6814f62f6272fcd5cdbce7a9ef797":hex:"c25f13bf67d081671a0481a1f1820d613bba2276":hex:"a7fdb0d259165ca2c88d00bbf1028a867d337699d061193b17a9648e14ccbbaadeacaacdec815e7571294ebb8a117af205fa078b47b0712c199e3ad05135c504c24b81705115740802487992ffd511d4afc6b854491eb3f0dd523139542ff15c3101ee85543517c6a3c79417c67e2dd9aa741e9a29b06dcb593c2336b3670ae3afbac7c3e76e215473e866e338ca244de00b62624d6b9426822ceae9f8cc460895f41250073fd45c5a1e7b425c204a423a699159f6903e710b37a7bb2bc8049f":int:0 + +RSASSA-PSS Signature Example 9_6 (verify) +3:int:1536:int:16:char*:"e6bd692ac96645790403fdd0f5beb8b9bf92ed10007fc365046419dd06c05c5b5b2f48ecf989e4ce269109979cbb40b4a0ad24d22483d1ee315ad4ccb1534268352691c524f6dd8e6c29d224cf246973aec86c5bf6b1401a850d1b9ad1bb8cbcec47b06f0f8c7f45d3fc8f319299c5433ddbc2b3053b47ded2ecd4a4caefd614833dc8bb622f317ed076b8057fe8de3f84480ad5e83e4a61904a4f248fb397027357e1d30e463139815c6fd4fd5ac5b8172a45230ecb6318a04f1455d84e5a8b":int:16:char*:"010001":exp:0:exp:0:hex:"88c7a9f1360401d90e53b101b61c5325c3c75db1b411fbeb8e830b75e96b56670ad245404e16793544ee354bc613a90cc9848715a73db5893e7f6d279815c0c1de83ef8e2956e3a56ed26a888d7a9cdcd042f4b16b7fa51ef1a0573662d16a302d0ec5b285d2e03ad96529c87b3d374db372d95b2443d061b6b1a350ba87807ed083afd1eb05c3f52f4eba5ed2227714fdb50b9d9d9dd6814f62f6272fcd5cdbce7a9ef797":char*:"c25f13bf67d081671a0481a1f1820d613bba2276":hex:"a7fdb0d259165ca2c88d00bbf1028a867d337699d061193b17a9648e14ccbbaadeacaacdec815e7571294ebb8a117af205fa078b47b0712c199e3ad05135c504c24b81705115740802487992ffd511d4afc6b854491eb3f0dd523139542ff15c3101ee85543517c6a3c79417c67e2dd9aa741e9a29b06dcb593c2336b3670ae3afbac7c3e76e215473e866e338ca244de00b62624d6b9426822ceae9f8cc460895f41250073fd45c5a1e7b425c204a423a699159f6903e710b37a7bb2bc8049f":int:0 + +RSASSA-PSS Signature Example 10_1 +2:int:2048:int:16:char*:"cfd50283feeeb97f6f08d73cbc7b3836f82bbcd499479f5e6f76fdfcb8b38c4f71dc9e88bd6a6f76371afd65d2af1862b32afb34a95f71b8b132043ffebe3a952baf7592448148c03f9c69b1d68e4ce5cf32c86baf46fed301ca1ab403069b32f456b91f71898ab081cd8c4252ef5271915c9794b8f295851da7510f99cb73eb":int:16:char*:"cc4e90d2a1b3a065d3b2d1f5a8fce31b544475664eab561d2971b99fb7bef844e8ec1f360b8c2ac8359692971ea6a38f723fcc211f5dbcb177a0fdac5164a1d4ff7fbb4e829986353cb983659a148cdd420c7d31ba3822ea90a32be46c030e8c17e1fa0ad37859e06b0aa6fa3b216d9cbe6c0e22339769c0a615913e5da719cf":int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:hex:"883177e5126b9be2d9a9680327d5370c6f26861f5820c43da67a3ad609":hex:"04e215ee6ff934b9da70d7730c8734abfcecde89":hex:"82c2b160093b8aa3c0f7522b19f87354066c77847abf2a9fce542d0e84e920c5afb49ffdfdace16560ee94a1369601148ebad7a0e151cf16331791a5727d05f21e74e7eb811440206935d744765a15e79f015cb66c532c87a6a05961c8bfad741a9a6657022894393e7223739796c02a77455d0f555b0ec01ddf259b6207fd0fd57614cef1a5573baaff4ec00069951659b85f24300a25160ca8522dc6e6727e57d019d7e63629b8fe5e89e25cc15beb3a647577559299280b9b28f79b0409000be25bbd96408ba3b43cc486184dd1c8e62553fa1af4040f60663de7f5e49c04388e257f1ce89c95dab48a315d9b66b1b7628233876ff2385230d070d07e1666":int:0 + +RSASSA-PSS Signature Example 10_1 (verify) +3:int:2048:int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:hex:"883177e5126b9be2d9a9680327d5370c6f26861f5820c43da67a3ad609":char*:"04e215ee6ff934b9da70d7730c8734abfcecde89":hex:"82c2b160093b8aa3c0f7522b19f87354066c77847abf2a9fce542d0e84e920c5afb49ffdfdace16560ee94a1369601148ebad7a0e151cf16331791a5727d05f21e74e7eb811440206935d744765a15e79f015cb66c532c87a6a05961c8bfad741a9a6657022894393e7223739796c02a77455d0f555b0ec01ddf259b6207fd0fd57614cef1a5573baaff4ec00069951659b85f24300a25160ca8522dc6e6727e57d019d7e63629b8fe5e89e25cc15beb3a647577559299280b9b28f79b0409000be25bbd96408ba3b43cc486184dd1c8e62553fa1af4040f60663de7f5e49c04388e257f1ce89c95dab48a315d9b66b1b7628233876ff2385230d070d07e1666":int:0 + +RSASSA-PSS Signature Example 10_2 +2:int:2048:int:16:char*:"cfd50283feeeb97f6f08d73cbc7b3836f82bbcd499479f5e6f76fdfcb8b38c4f71dc9e88bd6a6f76371afd65d2af1862b32afb34a95f71b8b132043ffebe3a952baf7592448148c03f9c69b1d68e4ce5cf32c86baf46fed301ca1ab403069b32f456b91f71898ab081cd8c4252ef5271915c9794b8f295851da7510f99cb73eb":int:16:char*:"cc4e90d2a1b3a065d3b2d1f5a8fce31b544475664eab561d2971b99fb7bef844e8ec1f360b8c2ac8359692971ea6a38f723fcc211f5dbcb177a0fdac5164a1d4ff7fbb4e829986353cb983659a148cdd420c7d31ba3822ea90a32be46c030e8c17e1fa0ad37859e06b0aa6fa3b216d9cbe6c0e22339769c0a615913e5da719cf":int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:hex:"dd670a01465868adc93f26131957a50c52fb777cdbaa30892c9e12361164ec13979d43048118e4445db87bee58dd987b3425d02071d8dbae80708b039dbb64dbd1de5657d9fed0c118a54143742e0ff3c87f74e45857647af3f79eb0a14c9d75ea9a1a04b7cf478a897a708fd988f48e801edb0b7039df8c23bb3c56f4e821ac":hex:"8b2bdd4b40faf545c778ddf9bc1a49cb57f9b71b":hex:"14ae35d9dd06ba92f7f3b897978aed7cd4bf5ff0b585a40bd46ce1b42cd2703053bb9044d64e813d8f96db2dd7007d10118f6f8f8496097ad75e1ff692341b2892ad55a633a1c55e7f0a0ad59a0e203a5b8278aec54dd8622e2831d87174f8caff43ee6c46445345d84a59659bfb92ecd4c818668695f34706f66828a89959637f2bf3e3251c24bdba4d4b7649da0022218b119c84e79a6527ec5b8a5f861c159952e23ec05e1e717346faefe8b1686825bd2b262fb2531066c0de09acde2e4231690728b5d85e115a2f6b92b79c25abc9bd9399ff8bcf825a52ea1f56ea76dd26f43baafa18bfa92a504cbd35699e26d1dcc5a2887385f3c63232f06f3244c3":int:0 + +RSASSA-PSS Signature Example 10_2 (verify) +3:int:2048:int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:hex:"dd670a01465868adc93f26131957a50c52fb777cdbaa30892c9e12361164ec13979d43048118e4445db87bee58dd987b3425d02071d8dbae80708b039dbb64dbd1de5657d9fed0c118a54143742e0ff3c87f74e45857647af3f79eb0a14c9d75ea9a1a04b7cf478a897a708fd988f48e801edb0b7039df8c23bb3c56f4e821ac":char*:"8b2bdd4b40faf545c778ddf9bc1a49cb57f9b71b":hex:"14ae35d9dd06ba92f7f3b897978aed7cd4bf5ff0b585a40bd46ce1b42cd2703053bb9044d64e813d8f96db2dd7007d10118f6f8f8496097ad75e1ff692341b2892ad55a633a1c55e7f0a0ad59a0e203a5b8278aec54dd8622e2831d87174f8caff43ee6c46445345d84a59659bfb92ecd4c818668695f34706f66828a89959637f2bf3e3251c24bdba4d4b7649da0022218b119c84e79a6527ec5b8a5f861c159952e23ec05e1e717346faefe8b1686825bd2b262fb2531066c0de09acde2e4231690728b5d85e115a2f6b92b79c25abc9bd9399ff8bcf825a52ea1f56ea76dd26f43baafa18bfa92a504cbd35699e26d1dcc5a2887385f3c63232f06f3244c3":int:0 + +RSASSA-PSS Signature Example 10_3 +2:int:2048:int:16:char*:"cfd50283feeeb97f6f08d73cbc7b3836f82bbcd499479f5e6f76fdfcb8b38c4f71dc9e88bd6a6f76371afd65d2af1862b32afb34a95f71b8b132043ffebe3a952baf7592448148c03f9c69b1d68e4ce5cf32c86baf46fed301ca1ab403069b32f456b91f71898ab081cd8c4252ef5271915c9794b8f295851da7510f99cb73eb":int:16:char*:"cc4e90d2a1b3a065d3b2d1f5a8fce31b544475664eab561d2971b99fb7bef844e8ec1f360b8c2ac8359692971ea6a38f723fcc211f5dbcb177a0fdac5164a1d4ff7fbb4e829986353cb983659a148cdd420c7d31ba3822ea90a32be46c030e8c17e1fa0ad37859e06b0aa6fa3b216d9cbe6c0e22339769c0a615913e5da719cf":int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:hex:"48b2b6a57a63c84cea859d65c668284b08d96bdcaabe252db0e4a96cb1bac6019341db6fbefb8d106b0e90eda6bcc6c6262f37e7ea9c7e5d226bd7df85ec5e71efff2f54c5db577ff729ff91b842491de2741d0c631607df586b905b23b91af13da12304bf83eca8a73e871ff9db":hex:"4e96fc1b398f92b44671010c0dc3efd6e20c2d73":hex:"6e3e4d7b6b15d2fb46013b8900aa5bbb3939cf2c095717987042026ee62c74c54cffd5d7d57efbbf950a0f5c574fa09d3fc1c9f513b05b4ff50dd8df7edfa20102854c35e592180119a70ce5b085182aa02d9ea2aa90d1df03f2daae885ba2f5d05afdac97476f06b93b5bc94a1a80aa9116c4d615f333b098892b25fface266f5db5a5a3bcc10a824ed55aad35b727834fb8c07da28fcf416a5d9b2224f1f8b442b36f91e456fdea2d7cfe3367268de0307a4c74e924159ed33393d5e0655531c77327b89821bdedf880161c78cd4196b5419f7acc3f13e5ebf161b6e7c6724716ca33b85c2e25640192ac2859651d50bde7eb976e51cec828b98b6563b86bb":int:0 + +RSASSA-PSS Signature Example 10_3 (verify) +3:int:2048:int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:hex:"48b2b6a57a63c84cea859d65c668284b08d96bdcaabe252db0e4a96cb1bac6019341db6fbefb8d106b0e90eda6bcc6c6262f37e7ea9c7e5d226bd7df85ec5e71efff2f54c5db577ff729ff91b842491de2741d0c631607df586b905b23b91af13da12304bf83eca8a73e871ff9db":char*:"4e96fc1b398f92b44671010c0dc3efd6e20c2d73":hex:"6e3e4d7b6b15d2fb46013b8900aa5bbb3939cf2c095717987042026ee62c74c54cffd5d7d57efbbf950a0f5c574fa09d3fc1c9f513b05b4ff50dd8df7edfa20102854c35e592180119a70ce5b085182aa02d9ea2aa90d1df03f2daae885ba2f5d05afdac97476f06b93b5bc94a1a80aa9116c4d615f333b098892b25fface266f5db5a5a3bcc10a824ed55aad35b727834fb8c07da28fcf416a5d9b2224f1f8b442b36f91e456fdea2d7cfe3367268de0307a4c74e924159ed33393d5e0655531c77327b89821bdedf880161c78cd4196b5419f7acc3f13e5ebf161b6e7c6724716ca33b85c2e25640192ac2859651d50bde7eb976e51cec828b98b6563b86bb":int:0 + +RSASSA-PSS Signature Example 10_4 +2:int:2048:int:16:char*:"cfd50283feeeb97f6f08d73cbc7b3836f82bbcd499479f5e6f76fdfcb8b38c4f71dc9e88bd6a6f76371afd65d2af1862b32afb34a95f71b8b132043ffebe3a952baf7592448148c03f9c69b1d68e4ce5cf32c86baf46fed301ca1ab403069b32f456b91f71898ab081cd8c4252ef5271915c9794b8f295851da7510f99cb73eb":int:16:char*:"cc4e90d2a1b3a065d3b2d1f5a8fce31b544475664eab561d2971b99fb7bef844e8ec1f360b8c2ac8359692971ea6a38f723fcc211f5dbcb177a0fdac5164a1d4ff7fbb4e829986353cb983659a148cdd420c7d31ba3822ea90a32be46c030e8c17e1fa0ad37859e06b0aa6fa3b216d9cbe6c0e22339769c0a615913e5da719cf":int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:hex:"0b8777c7f839baf0a64bbbdbc5ce79755c57a205b845c174e2d2e90546a089c4e6ec8adffa23a7ea97bae6b65d782b82db5d2b5a56d22a29a05e7c4433e2b82a621abba90add05ce393fc48a840542451a":hex:"c7cd698d84b65128d8835e3a8b1eb0e01cb541ec":hex:"34047ff96c4dc0dc90b2d4ff59a1a361a4754b255d2ee0af7d8bf87c9bc9e7ddeede33934c63ca1c0e3d262cb145ef932a1f2c0a997aa6a34f8eaee7477d82ccf09095a6b8acad38d4eec9fb7eab7ad02da1d11d8e54c1825e55bf58c2a23234b902be124f9e9038a8f68fa45dab72f66e0945bf1d8bacc9044c6f07098c9fcec58a3aab100c805178155f030a124c450e5acbda47d0e4f10b80a23f803e774d023b0015c20b9f9bbe7c91296338d5ecb471cafb032007b67a60be5f69504a9f01abb3cb467b260e2bce860be8d95bf92c0c8e1496ed1e528593a4abb6df462dde8a0968dffe4683116857a232f5ebf6c85be238745ad0f38f767a5fdbf486fb":int:0 + +RSASSA-PSS Signature Example 10_4 (verify) +3:int:2048:int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:hex:"0b8777c7f839baf0a64bbbdbc5ce79755c57a205b845c174e2d2e90546a089c4e6ec8adffa23a7ea97bae6b65d782b82db5d2b5a56d22a29a05e7c4433e2b82a621abba90add05ce393fc48a840542451a":char*:"c7cd698d84b65128d8835e3a8b1eb0e01cb541ec":hex:"34047ff96c4dc0dc90b2d4ff59a1a361a4754b255d2ee0af7d8bf87c9bc9e7ddeede33934c63ca1c0e3d262cb145ef932a1f2c0a997aa6a34f8eaee7477d82ccf09095a6b8acad38d4eec9fb7eab7ad02da1d11d8e54c1825e55bf58c2a23234b902be124f9e9038a8f68fa45dab72f66e0945bf1d8bacc9044c6f07098c9fcec58a3aab100c805178155f030a124c450e5acbda47d0e4f10b80a23f803e774d023b0015c20b9f9bbe7c91296338d5ecb471cafb032007b67a60be5f69504a9f01abb3cb467b260e2bce860be8d95bf92c0c8e1496ed1e528593a4abb6df462dde8a0968dffe4683116857a232f5ebf6c85be238745ad0f38f767a5fdbf486fb":int:0 + +RSASSA-PSS Signature Example 10_5 +2:int:2048:int:16:char*:"cfd50283feeeb97f6f08d73cbc7b3836f82bbcd499479f5e6f76fdfcb8b38c4f71dc9e88bd6a6f76371afd65d2af1862b32afb34a95f71b8b132043ffebe3a952baf7592448148c03f9c69b1d68e4ce5cf32c86baf46fed301ca1ab403069b32f456b91f71898ab081cd8c4252ef5271915c9794b8f295851da7510f99cb73eb":int:16:char*:"cc4e90d2a1b3a065d3b2d1f5a8fce31b544475664eab561d2971b99fb7bef844e8ec1f360b8c2ac8359692971ea6a38f723fcc211f5dbcb177a0fdac5164a1d4ff7fbb4e829986353cb983659a148cdd420c7d31ba3822ea90a32be46c030e8c17e1fa0ad37859e06b0aa6fa3b216d9cbe6c0e22339769c0a615913e5da719cf":int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:hex:"f1036e008e71e964dadc9219ed30e17f06b4b68a955c16b312b1eddf028b74976bed6b3f6a63d4e77859243c9cccdc98016523abb02483b35591c33aad81213bb7c7bb1a470aabc10d44256c4d4559d916":hex:"efa8bff96212b2f4a3f371a10d574152655f5dfb":hex:"7e0935ea18f4d6c1d17ce82eb2b3836c55b384589ce19dfe743363ac9948d1f346b7bfddfe92efd78adb21faefc89ade42b10f374003fe122e67429a1cb8cbd1f8d9014564c44d120116f4990f1a6e38774c194bd1b8213286b077b0499d2e7b3f434ab12289c556684deed78131934bb3dd6537236f7c6f3dcb09d476be07721e37e1ceed9b2f7b406887bd53157305e1c8b4f84d733bc1e186fe06cc59b6edb8f4bd7ffefdf4f7ba9cfb9d570689b5a1a4109a746a690893db3799255a0cb9215d2d1cd490590e952e8c8786aa0011265252470c041dfbc3eec7c3cbf71c24869d115c0cb4a956f56d530b80ab589acfefc690751ddf36e8d383f83cedd2cc":int:0 + +RSASSA-PSS Signature Example 10_5 (verify) +3:int:2048:int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:hex:"f1036e008e71e964dadc9219ed30e17f06b4b68a955c16b312b1eddf028b74976bed6b3f6a63d4e77859243c9cccdc98016523abb02483b35591c33aad81213bb7c7bb1a470aabc10d44256c4d4559d916":char*:"efa8bff96212b2f4a3f371a10d574152655f5dfb":hex:"7e0935ea18f4d6c1d17ce82eb2b3836c55b384589ce19dfe743363ac9948d1f346b7bfddfe92efd78adb21faefc89ade42b10f374003fe122e67429a1cb8cbd1f8d9014564c44d120116f4990f1a6e38774c194bd1b8213286b077b0499d2e7b3f434ab12289c556684deed78131934bb3dd6537236f7c6f3dcb09d476be07721e37e1ceed9b2f7b406887bd53157305e1c8b4f84d733bc1e186fe06cc59b6edb8f4bd7ffefdf4f7ba9cfb9d570689b5a1a4109a746a690893db3799255a0cb9215d2d1cd490590e952e8c8786aa0011265252470c041dfbc3eec7c3cbf71c24869d115c0cb4a956f56d530b80ab589acfefc690751ddf36e8d383f83cedd2cc":int:0 + +RSASSA-PSS Signature Example 10_6 +2:int:2048:int:16:char*:"cfd50283feeeb97f6f08d73cbc7b3836f82bbcd499479f5e6f76fdfcb8b38c4f71dc9e88bd6a6f76371afd65d2af1862b32afb34a95f71b8b132043ffebe3a952baf7592448148c03f9c69b1d68e4ce5cf32c86baf46fed301ca1ab403069b32f456b91f71898ab081cd8c4252ef5271915c9794b8f295851da7510f99cb73eb":int:16:char*:"cc4e90d2a1b3a065d3b2d1f5a8fce31b544475664eab561d2971b99fb7bef844e8ec1f360b8c2ac8359692971ea6a38f723fcc211f5dbcb177a0fdac5164a1d4ff7fbb4e829986353cb983659a148cdd420c7d31ba3822ea90a32be46c030e8c17e1fa0ad37859e06b0aa6fa3b216d9cbe6c0e22339769c0a615913e5da719cf":int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:hex:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":hex:"ad8b1523703646224b660b550885917ca2d1df28":hex:"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":int:0 + +RSASSA-PSS Signature Example 10_6 (verify) +3:int:2048:int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:hex:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":char*:"ad8b1523703646224b660b550885917ca2d1df28":hex:"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":int:0 + +RSASSA-PSS Signature verify options #1 (OK) +4:int:2048:int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:exp:0:int:20:hex:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":hex:"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":int:0:int:0 + +RSASSA-PSS Signature verify options #2 (ctx_hash none) +4:int:2048:int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:3:exp:0:int:20:hex:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":hex:"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":int:0:int:0 + +RSASSA-PSS Signature verify options #3 (ctx_hash diverging) +depends_on:2 +4:int:2048:int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:4:exp:0:int:20:hex:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":hex:"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":exp:5:int:0 + +RSASSA-PSS Signature verify options #4 (mgf1_hash diverging) +depends_on:2 +4:int:2048:int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:exp:4:int:20:hex:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":hex:"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":int:0:exp:5 + +RSASSA-PSS Signature verify options #5 (wrong msg_hash) +depends_on:2 +4:int:2048:int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:4:exp:0:exp:0:int:20:hex:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":hex:"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":exp:6:exp:6 + +RSASSA-PSS Signature verify options #6 (wrong expected_salt_len) +4:int:2048:int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:exp:0:int:21:hex:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":hex:"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":int:0:exp:5 + +RSASSA-PSS Signature verify options #7 (wrong expected_salt_len) +4:int:2048:int:16:char*:"a5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05":int:16:char*:"010001":exp:0:exp:0:exp:0:int:19:hex:"25f10895a87716c137450bb9519dfaa1f207faa942ea88abf71e9c17980085b555aebab76264ae2a3ab93c2d12981191ddac6fb5949eb36aee3c5da940f00752c916d94608fa7d97ba6a2915b688f20323d4e9d96801d89a72ab5892dc2117c07434fcf972e058cf8c41ca4b4ff554f7d5068ad3155fced0f3125bc04f9193378a8f5c4c3b8cb4dd6d1cc69d30ecca6eaa51e36a05730e9e342e855baf099defb8afd7":hex:"6d3b5b87f67ea657af21f75441977d2180f91b2c5f692de82955696a686730d9b9778d970758ccb26071c2209ffbd6125be2e96ea81b67cb9b9308239fda17f7b2b64ecda096b6b935640a5a1cb42a9155b1c9ef7a633a02c59f0d6ee59b852c43b35029e73c940ff0410e8f114eed46bbd0fae165e42be2528a401c3b28fd818ef3232dca9f4d2a0f5166ec59c42396d6c11dbc1215a56fa17169db9575343ef34f9de32a49cdc3174922f229c23e18e45df9353119ec4319cedce7a17c64088c1f6f52be29634100b3919d38f3d1ed94e6891e66a73b8fb849f5874df59459e298c7bbce2eee782a195aa66fe2d0732b25e595f57d3e061b1fc3e4063bf98f":int:0:exp:5 + +RSASSA-PSS Signature verify options #8 (non-default salt_len: max) +depends_on:2 +4:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":exp:4:exp:4:exp:4:int:94:hex:"54657374206d657373616765":hex:"0d2bdb0456a3d651d5bd48a4204493898f72cf1aaddd71387cc058bc3f4c235ea6be4010fd61b28e1fbb275462b53775c04be9022d38b6a2e0387dddba86a3f8554d2858044a59fddbd594753fc056fe33c8daddb85dc70d164690b1182209ff84824e0be10e35c379f2f378bf176a9f7cb94d95e44d90276a298c8810f741c9":int:0:int:0 + +RSASSA-PSS Signature verify options #9 (non-default salt_len: 0) +depends_on:2 +4:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":exp:4:exp:4:exp:4:int:0:hex:"54657374206d657373616765":hex:"7fc506d26ca3b22922a1ce39faaedd273161b82d9443c56f1a034f131ae4a18cae1474271cb4b66a17d9707ca58b0bdbd3c406b7e65bbcc9bbbce94dc45de807b4989b23b3e4db74ca29298137837eb90cc83d3219249bc7d480fceaf075203a86e54c4ecfa4e312e39f8f69d76534089a36ed9049ca9cfd5ab1db1fa75fe5c8":int:0:int:0 + +RSASSA-PSS Signature verify options #10 (non-default salt_len: 0, ANY) +depends_on:2 +4:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":exp:4:exp:4:exp:4:exp:7:hex:"54657374206d657373616765":hex:"7fc506d26ca3b22922a1ce39faaedd273161b82d9443c56f1a034f131ae4a18cae1474271cb4b66a17d9707ca58b0bdbd3c406b7e65bbcc9bbbce94dc45de807b4989b23b3e4db74ca29298137837eb90cc83d3219249bc7d480fceaf075203a86e54c4ecfa4e312e39f8f69d76534089a36ed9049ca9cfd5ab1db1fa75fe5c8":int:0:int:0 + +RSASSA-PSS Signature verify options #11 (MGF1 alg != MSG hash alg) +depends_on:2 +4:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":exp:3:exp:4:exp:4:exp:7:hex:"c0719e9a8d5d838d861dc6f675c899d2b309a3a65bb9fe6b11e5afcbf9a2c0b1":hex:"7fc506d26ca3b22922a1ce39faaedd273161b82d9443c56f1a034f131ae4a18cae1474271cb4b66a17d9707ca58b0bdbd3c406b7e65bbcc9bbbce94dc45de807b4989b23b3e4db74ca29298137837eb90cc83d3219249bc7d480fceaf075203a86e54c4ecfa4e312e39f8f69d76534089a36ed9049ca9cfd5ab1db1fa75fe5c8":int:0:int:0 + +RSASSA-PSS Signature verify options #12 (MGF1 alg != MSG hash alg, ctx wrong) +depends_on:2 +4:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":exp:3:exp:0:exp:4:exp:7:hex:"c0719e9a8d5d838d861dc6f675c899d2b309a3a65bb9fe6b11e5afcbf9a2c0b1":hex:"7fc506d26ca3b22922a1ce39faaedd273161b82d9443c56f1a034f131ae4a18cae1474271cb4b66a17d9707ca58b0bdbd3c406b7e65bbcc9bbbce94dc45de807b4989b23b3e4db74ca29298137837eb90cc83d3219249bc7d480fceaf075203a86e54c4ecfa4e312e39f8f69d76534089a36ed9049ca9cfd5ab1db1fa75fe5c8":exp:5:int:0 + +RSASSA-PSS Signature verify options #13 (MGF1 alg != MSG hash alg, arg wrong) +depends_on:2 +4:int:1024:int:16:char*:"00dd118a9f99bab068ca2aea3b6a6d5997ed4ec954e40deecea07da01eaae80ec2bb1340db8a128e891324a5c5f5fad8f590d7c8cacbc5fe931dafda1223735279461abaa0572b761631b3a8afe7389b088b63993a0a25ee45d21858bab9931aedd4589a631b37fcf714089f856549f359326dd1e0e86dde52ed66b4a90bda4095":int:16:char*:"010001":exp:3:exp:4:exp:0:exp:7:hex:"c0719e9a8d5d838d861dc6f675c899d2b309a3a65bb9fe6b11e5afcbf9a2c0b1":hex:"7fc506d26ca3b22922a1ce39faaedd273161b82d9443c56f1a034f131ae4a18cae1474271cb4b66a17d9707ca58b0bdbd3c406b7e65bbcc9bbbce94dc45de807b4989b23b3e4db74ca29298137837eb90cc83d3219249bc7d480fceaf075203a86e54c4ecfa4e312e39f8f69d76534089a36ed9049ca9cfd5ab1db1fa75fe5c8":int:0:exp:5 + +RSASSA-PSS verify ext, 512-bit key, empty salt, good signature +depends_on:2 +4:int:512:int:16:char*:"00b076d23250816f9aab02307e452b97f0cae7598369b41624e8afc7971a59a13892f64b07eaa6ec928c160b2d6ec8f9d0dd5b63c8b3ac0767b4f65c892f56c10f":int:16:char*:"010001":exp:4:exp:4:exp:4:int:0:hex:"":hex:"ace8b03347da1b9a7a5e94a0d76359bb39c819bb170bef38ea84995ed653446c0ae87ede434cdf9d0cb2d7bf164cf427892363e6855a1d24d0ce5dd72acaf246":int:0:int:0 + +RSASSA-PSS verify ext, 512-bit key, empty salt, bad signature +depends_on:2 +4:int:512:int:16:char*:"00b076d23250816f9aab02307e452b97f0cae7598369b41624e8afc7971a59a13892f64b07eaa6ec928c160b2d6ec8f9d0dd5b63c8b3ac0767b4f65c892f56c10f":int:16:char*:"010001":exp:4:exp:4:exp:4:int:0:hex:"":hex:"ace8b03347da1b9a7a5e94a0d76359bb39c819bb170bef38ea84995ed653446c0ae87ede434cdf9d0cb2d7bf164cf427892363e6855a1d24d0ce5dd72acaf247":exp:5:exp:5 + +RSASSA-PSS verify ext, 522-bit key, SHA-512, empty salt, good signature +depends_on:1 +4:int:522:int:16:char*:"02d302753e3dda28f42f4d9f92c8647420ea6fbc97c10f8498b966a953f357698d6581060dfe32c8ab98db4bc5ce2acdf0c1e6e404a75a13282550c1aa37d3cdc8bf":int:16:char*:"010001":exp:2:exp:2:exp:2:int:0:hex:"":hex:"016752ae0b5dfbade6bbd3dd37868d48c8d741f92dca41c360aeda553204c2212a117b1a3d77e0d3f48723503c46e16c8a64de00f1dee3e37e478417452630859486":int:0:int:0 + +RSASSA-PSS verify ext, 522-bit key, SHA-512, saltlen=64, good signature with saltlen=0 +depends_on:1 +4:int:522:int:16:char*:"02d302753e3dda28f42f4d9f92c8647420ea6fbc97c10f8498b966a953f357698d6581060dfe32c8ab98db4bc5ce2acdf0c1e6e404a75a13282550c1aa37d3cdc8bf":int:16:char*:"010001":exp:2:exp:2:exp:2:int:64:hex:"":hex:"016752ae0b5dfbade6bbd3dd37868d48c8d741f92dca41c360aeda553204c2212a117b1a3d77e0d3f48723503c46e16c8a64de00f1dee3e37e478417452630859486":int:0:exp:5 + +RSASSA-PSS verify ext, 528-bit key, SHA-512, empty salt, good signature +depends_on:1 +4:int:528:int:16:char*:"00e31c246d46485984261fd174cab3d4357344602ecd793c47dbe54252d37bb350bc634359b19515542080e4724a4b672291be57c7648f51629eaef234e847d99cc65f":int:16:char*:"010001":exp:2:exp:2:exp:2:int:0:hex:"":hex:"a9ad7994ba3a1071124153486924448cc67a5af3a5d34e9261d53770782cc85f58e2edde5f7004652a645e3e9606530eb57de41df7298ae2be9dec69cc0d613ab629":int:0:int:0 + +RSASSA-PSS verify ext, 528-bit key, SHA-512, saltlen=64, good signature with saltlen=0 +depends_on:1 +4:int:528:int:16:char*:"00e31c246d46485984261fd174cab3d4357344602ecd793c47dbe54252d37bb350bc634359b19515542080e4724a4b672291be57c7648f51629eaef234e847d99cc65f":int:16:char*:"010001":exp:2:exp:2:exp:2:int:64:hex:"":hex:"a9ad7994ba3a1071124153486924448cc67a5af3a5d34e9261d53770782cc85f58e2edde5f7004652a645e3e9606530eb57de41df7298ae2be9dec69cc0d613ab629":int:0:exp:5 + +RSASSA-PSS verify ext, 512-bit key, SHA-512 (hash too large) +depends_on:1 +4:int:512:int:16:char*:"00b076d23250816f9aab02307e452b97f0cae7598369b41624e8afc7971a59a13892f64b07eaa6ec928c160b2d6ec8f9d0dd5b63c8b3ac0767b4f65c892f56c10f":int:16:char*:"010001":exp:2:exp:2:exp:2:int:0:hex:"":hex:"ace8b03347da1b9a7a5e94a0d76359bb39c819bb170bef38ea84995ed653446c0ae87ede434cdf9d0cb2d7bf164cf427892363e6855a1d24d0ce5dd72acaf246":exp:1:exp:1 + +RSASSA-PSS verify ext, 521-bit key, SHA-512, empty salt, bad signature +depends_on:1 +4:int:521:int:16:char*:"0131b69860f3cb9bf85ea358fdf2bd2990f1b77a80d6a4fdf817a43dd896bdf7dd26af8ac0237f526e0d33b105c971fdbd4ffa9ece99fc469f31ecf429e8f562c1c3":int:16:char*:"010001":exp:2:exp:2:exp:2:int:0:hex:"":hex:"00471794655837da498cbf27242807b40593a353c707eb22fd2cc5a3259e728ac4f1df676043eeec8e16c1175b3d9ac8cae72ec1d5772dd69de71c5677f19031568e":exp:1:exp:1 + +RSASSA-PSS verify ext, 521-bit key, SHA-256, empty salt, good signature +depends_on:2 +4:int:521:int:16:char*:"0131b69860f3cb9bf85ea358fdf2bd2990f1b77a80d6a4fdf817a43dd896bdf7dd26af8ac0237f526e0d33b105c971fdbd4ffa9ece99fc469f31ecf429e8f562c1c3":int:16:char*:"010001":exp:4:exp:4:exp:4:int:0:hex:"41":hex:"009c4941157fa36288e467310b198ab0c615c40963d611ffeef03000549ded809235955ecc57adba44782e9497c004f480ba2b3d58db8335fe0b391075c02c843a6d":int:0:int:0 + +RSASSA-PSS verify ext, 521-bit key, SHA-256, empty salt, flipped-highest-bit signature +depends_on:2 +4:int:521:int:16:char*:"0131b69860f3cb9bf85ea358fdf2bd2990f1b77a80d6a4fdf817a43dd896bdf7dd26af8ac0237f526e0d33b105c971fdbd4ffa9ece99fc469f31ecf429e8f562c1c3":int:16:char*:"010001":exp:4:exp:4:exp:4:int:0:hex:"41":hex:"00e11a2403df681c44a1f73f014b6c9ad17847d0b673f7c2a801cee208d10ab5792c10cd0cd495a4b331aaa521409fca7cb1b0d978b3a84cd67e28078b98753e9466":exp:1:exp:1 + +RSASSA-PSS verify ext, all-zero padding, automatic salt length +depends_on:2 +4:int:512:int:16:char*:"00b076d23250816f9aab02307e452b97f0cae7598369b41624e8afc7971a59a13892f64b07eaa6ec928c160b2d6ec8f9d0dd5b63c8b3ac0767b4f65c892f56c10f":int:16:char*:"010001":exp:3:exp:4:exp:4:exp:7:hex:"":hex:"63a35294577c7e593170378175b7df27c293dae583ec2a971426eb2d66f2af483e897bfae5dc20300a9d61a3644e08c3aee61a463690a3498901563c46041056":exp:5:exp:5 + +RSASSA-PSS Signature RSA-1024, SHA-512 +depends_on:1 +2:int:1024:int:16:char*:"00e8f95a716c127d5147dcc241a7c1fe8d5487b3e8b6e95e48a83334d21d00c79ad0a90e29941c0c53065b20059de95e9e406061416f7ac12edca1983b9ee28cc3":int:16:char*:"00d72348b297e7e5dc4329f6ab874b17982584e0ab43174070a9be983c0f040320d6f893c40d2717cb3044380cb3230b7133621eb1c55a3ea56d0e7cee694b5df3":int:16:char*:"00c3c9873548543591c1f947e412c33da56b9d1b94a58c2f410a8a620e9b4f1d9197643ebf527f5f62b202b9d67a32654d05f326a9b61e0106efdf4829673c4f3d23655996e2424059916ab47aa67e406c129679e5979ca46708866608ffa21f619843b959b4442e422598a2faab54a8cef1f131992677d2cf5bcaf2b5564f7419":int:16:char*:"010001":exp:2:exp:2:hex:"e35c6ed98f64a6d5a648fcab8adb16331db32e5d15c74a40edf94c3dc4a4de792d190889f20f1e24ed12054a6b28798fcb42d1c548769b734c96373142092aed277603f4738df4dc1446586d0ec64da4fb60536db2ae17fc7e3c04bbfbbbd907bf117c08636fa16f95f51a6216934d3e34f85030f17bbbc5ba69144058aff081e0b19cf03c17195c5e888ba58f6fe0a02e5c3bda9719a7":hex:"653df9730e14e03f2ffb3374d6b75295aa4a52c38540b2d501adc1eb659a4d7a050769a3d11d0d5d6f3efb734200ade241fdc271c0f5eeed85b4bf00b2327bc8":hex:"655d1cf86a7af5113d1791ab7b6627845ea2aa7efbae82705a3563e5ba0337a1d033cb9283b38c042056e0a1d0529891173e3df6621dd8b184930caec8b3cbe4d1068524dab0ec6854f6638d86b77434cd792ddec0d02327a9eebffcd6911ffd32ad9bcb569d3237398c8169d9c62e7eea81c1b456fd36019aad1e4b268c604d":int:0 + +RSASSA-PSS Verification RSA-1024, SHA-512 +depends_on:1 +3:int:1022:int:16:char*:"00c3c9873548543591c1f947e412c33da56b9d1b94a58c2f410a8a620e9b4f1d9197643ebf527f5f62b202b9d67a32654d05f326a9b61e0106efdf4829673c4f3d23655996e2424059916ab47aa67e406c129679e5979ca46708866608ffa21f619843b959b4442e422598a2faab54a8cef1f131992677d2cf5bcaf2b5564f7419":int:16:char*:"010001":exp:2:exp:2:hex:"e35c6ed98f64a6d5a648fcab8adb16331db32e5d15c74a40edf94c3dc4a4de792d190889f20f1e24ed12054a6b28798fcb42d1c548769b734c96373142092aed277603f4738df4dc1446586d0ec64da4fb60536db2ae17fc7e3c04bbfbbbd907bf117c08636fa16f95f51a6216934d3e34f85030f17bbbc5ba69144058aff081e0b19cf03c17195c5e888ba58f6fe0a02e5c3bda9719a7":char*:"653df9730e14e03f2ffb3374d6b75295aa4a52c38540b2d501adc1eb659a4d7a050769a3d11d0d5d6f3efb734200ade241fdc271c0f5eeed85b4bf00b2327bc8":hex:"655d1cf86a7af5113d1791ab7b6627845ea2aa7efbae82705a3563e5ba0337a1d033cb9283b38c042056e0a1d0529891173e3df6621dd8b184930caec8b3cbe4d1068524dab0ec6854f6638d86b77434cd792ddec0d02327a9eebffcd6911ffd32ad9bcb569d3237398c8169d9c62e7eea81c1b456fd36019aad1e4b268c604d":int:0 + +RSASSA-PSS Signature RSA-1032, SHA-512 +depends_on:1 +2:int:1032:int:16:char*:"0dfaedb709ada2105223e5e7764a5f31d07ae7a37bdc7b4a56c2499e1173147bcdcb165b8fb01a2528190cb6874656a936491898fca330db8af5a9ed5417268ed7":int:16:char*:"0c339c56797a90c641292560d0ef675f71ac2c99fcaba6260c38e4f167dfd179eb7a9e255f9bdbc549e4181f9a2a19b1f30a80b292d5ef1ad75b9e658eaa6fb0bb":int:16:char*:"00aa94ab91b4c26be257e469528228c4b0b6b4c99e73a84a272b3101892c07406911372b83ec4a7b8191f0ba4b4cb4cb3b732074e96c668297e1323b8ad0822a7e151182def03871a66a47b704b92845c6194142d4eeda19903e04043581f7a835dc288117863d21944c3aeded518458f1a30a41c7638aa4e098a88fdf2c2097270d":int:16:char*:"010001":exp:2:exp:2:hex:"e35c6ed98f64a6d5a648fcab8adb16331db32e5d15c74a40edf94c3dc4a4de792d190889f20f1e24ed12054a6b28798fcb42d1c548769b734c96373142092aed277603f4738df4dc1446586d0ec64da4fb60536db2ae17fc7e3c04bbfbbbd907bf117c08636fa16f95f51a6216934d3e34f85030f17bbbc5ba69144058aff081e0b19cf03c17195c5e888ba58f6fe0a02e5c3bda9719a7":hex:"653df9730e14e03f2ffb3374d6b75295aa4a52c38540b2d501adc1eb659a4d7a050769a3d11d0d5d6f3efb734200ade241fdc271c0f5eeed85b4bf00b2327bc8":hex:"13ad40169494129b907f061d885fbe50ab654fc7b4be657ff8629d7ca291838159e9a7b7adc93560dda2bb9127966eb8d57377fb19d5b043dca67a07ba3c23069b391ddd921b507a8cca2d5eb7ccc84b90089092ca88530e074e629c3cb6902b2d0475000269a28c4cd89cec0dca66571fa7fbe4976373abe905cbe4c66c8d5fbb":int:0 + +RSASSA-PSS Verification RSA-1032, SHA-512 +depends_on:1 +3:int:1032:int:16:char*:"00aa94ab91b4c26be257e469528228c4b0b6b4c99e73a84a272b3101892c07406911372b83ec4a7b8191f0ba4b4cb4cb3b732074e96c668297e1323b8ad0822a7e151182def03871a66a47b704b92845c6194142d4eeda19903e04043581f7a835dc288117863d21944c3aeded518458f1a30a41c7638aa4e098a88fdf2c2097270d":int:16:char*:"010001":exp:2:exp:2:hex:"e35c6ed98f64a6d5a648fcab8adb16331db32e5d15c74a40edf94c3dc4a4de792d190889f20f1e24ed12054a6b28798fcb42d1c548769b734c96373142092aed277603f4738df4dc1446586d0ec64da4fb60536db2ae17fc7e3c04bbfbbbd907bf117c08636fa16f95f51a6216934d3e34f85030f17bbbc5ba69144058aff081e0b19cf03c17195c5e888ba58f6fe0a02e5c3bda9719a7":char*:"653df9730e14e03f2ffb3374d6b75295aa4a52c38540b2d501adc1eb659a4d7a050769a3d11d0d5d6f3efb734200ade241fdc271c0f5eeed85b4bf00b2327bc8":hex:"13ad40169494129b907f061d885fbe50ab654fc7b4be657ff8629d7ca291838159e9a7b7adc93560dda2bb9127966eb8d57377fb19d5b043dca67a07ba3c23069b391ddd921b507a8cca2d5eb7ccc84b90089092ca88530e074e629c3cb6902b2d0475000269a28c4cd89cec0dca66571fa7fbe4976373abe905cbe4c66c8d5fbb":int:0 + +RSASSA-PSS Verification of OpenSSL-generated signature RSA-1032, SHA-512 +depends_on:1 +3:int:1032:int:16:char*:"00aa94ab91b4c26be257e469528228c4b0b6b4c99e73a84a272b3101892c07406911372b83ec4a7b8191f0ba4b4cb4cb3b732074e96c668297e1323b8ad0822a7e151182def03871a66a47b704b92845c6194142d4eeda19903e04043581f7a835dc288117863d21944c3aeded518458f1a30a41c7638aa4e098a88fdf2c2097270d":int:16:char*:"010001":exp:2:exp:2:hex:"e35c6ed98f64a6d5a648fcab8adb16331db32e5d15c74a40edf94c3dc4a4de792d190889f20f1e24ed12054a6b28798fcb42d1c548769b734c96373142092aed277603f4738df4dc1446586d0ec64da4fb60536db2ae17fc7e3c04bbfbbbd907bf117c08636fa16f95f51a6216934d3e34f85030f17bbbc5ba69144058aff081e0b19cf03c17195c5e888ba58f6fe0a02e5c3bda9719a7":char*:"653df9730e14e03f2ffb3374d6b75295aa4a52c38540b2d501adc1eb659a4d7a050769a3d11d0d5d6f3efb734200ade241fdc271c0f5eeed85b4bf00b2327bc8":hex:"1de40b1c452691dfd8ceb42ecf5f0cbda944d871141b4407c1e30a6657c58c2e496b2a3ad10e025d45ca9606d25602ac1de04af8e0d24aa06e57ec3fea5c961ecf1e0a4e442fda0cdaba42469288cde5d7d0c223facceaf4c7caabe93505acd5664c9b4fae64272af4d5b74326a01724a25fabdb10b177821d2273650a84426dbd":int:0 + +RSASSA-PSS Signature RSA-1040, SHA-512 +depends_on:1 +2:int:1040:int:16:char*:"00fc7f4b490b4d3ef729db23fb5afbb5f2fc620a472342d8b8ff310cfdc124be76dc22ab6f4be35a38ddd31f24d7f64d310f67ab3a375e83f4e0559e4cb5dc43e875":int:16:char*:"00d51e8680ab71dc01e1a8a68a298636bb1658cfab8d73ce528a62697722d485ab90cdafc5e27768b761839ff93420458ae55f15a69465dbc0c7b524dc9a385ff925":int:16:char*:"00d2340538231dcd5a61edf83ab94b2e4b3a784394c4ed35a424c050c294157b7625f9aca8258c21e2d0a7aa9b7c9db576404e63090dba50d998f9a3ec72b1a5cf28d83251ab93341c7d2c1a90403d70f67bc1a9e413bc62facccb52441e24c3f2bc9fdeca1a783012e70b9528176260580c4e1026c58209e8dcc4de3bf3f5be5565e9":int:16:char*:"010001":exp:2:exp:2:hex:"e35c6ed98f64a6d5a648fcab8adb16331db32e5d15c74a40edf94c3dc4a4de792d190889f20f1e24ed12054a6b28798fcb42d1c548769b734c96373142092aed277603f4738df4dc1446586d0ec64da4fb60536db2ae17fc7e3c04bbfbbbd907bf117c08636fa16f95f51a6216934d3e34f85030f17bbbc5ba69144058aff081e0b19cf03c17195c5e888ba58f6fe0a02e5c3bda9719a7":hex:"653df9730e14e03f2ffb3374d6b75295aa4a52c38540b2d501adc1eb659a4d7a050769a3d11d0d5d6f3efb734200ade241fdc271c0f5eeed85b4bf00b2327bc8":hex:"13e695948d59ded5a975cd9fb14bffc48e4ff9725576a96a6693da1a3c4c90d17d6811a97a633180d76dba5b957d2244e3b97e7bf3463a77d0b6c39b28a88e0b6739113726cd74937ad5f693ae5a8fd77febc270a115df05c344ddffebc2438ae67a5eea6572f434881bdf350aed4ec8f3a530d279d3fff07bb78e510807114e6ee7":int:0 + +RSASSA-PSS Verification RSA-1040, SHA-512 +depends_on:1 +3:int:1040:int:16:char*:"00d2340538231dcd5a61edf83ab94b2e4b3a784394c4ed35a424c050c294157b7625f9aca8258c21e2d0a7aa9b7c9db576404e63090dba50d998f9a3ec72b1a5cf28d83251ab93341c7d2c1a90403d70f67bc1a9e413bc62facccb52441e24c3f2bc9fdeca1a783012e70b9528176260580c4e1026c58209e8dcc4de3bf3f5be5565e9":int:16:char*:"010001":exp:2:exp:2:hex:"e35c6ed98f64a6d5a648fcab8adb16331db32e5d15c74a40edf94c3dc4a4de792d190889f20f1e24ed12054a6b28798fcb42d1c548769b734c96373142092aed277603f4738df4dc1446586d0ec64da4fb60536db2ae17fc7e3c04bbfbbbd907bf117c08636fa16f95f51a6216934d3e34f85030f17bbbc5ba69144058aff081e0b19cf03c17195c5e888ba58f6fe0a02e5c3bda9719a7":char*:"653df9730e14e03f2ffb3374d6b75295aa4a52c38540b2d501adc1eb659a4d7a050769a3d11d0d5d6f3efb734200ade241fdc271c0f5eeed85b4bf00b2327bc8":hex:"13e695948d59ded5a975cd9fb14bffc48e4ff9725576a96a6693da1a3c4c90d17d6811a97a633180d76dba5b957d2244e3b97e7bf3463a77d0b6c39b28a88e0b6739113726cd74937ad5f693ae5a8fd77febc270a115df05c344ddffebc2438ae67a5eea6572f434881bdf350aed4ec8f3a530d279d3fff07bb78e510807114e6ee7":int:0 + +RSASSA-PSS Signature RSA-1048, SHA-512 +depends_on:1 +2:int:1048:int:16:char*:"0f39b79809516becc2e3481b6b47584aa2299bd2027ab8a303b9de5b0adcb4a5d38e38edb8c1fac3ea1dbd7e1d50b84323e362cff4df3f5a5182dafa9bb9217a73d7":int:16:char*:"0d18164f8bd0d58d019998c8cb17c4c0354e62b8a9462acca30816894f982c2ae114e73993e30698930437b4eec44adec24d32ccbcbae7cc4c9f8911b1eb2100685b":int:16:char*:"00c75d0f9fa17d1d24b939537a434017f390c6604444c35a13360d6b1fc986baf40159b84275d37b883278df5064dd9eb0f29b0d325acc790c4b59672737dbbf3acb88f5e2f2d54c919cafd072272c494591d52e158993315e71e2ca60b1c74feff8f3d77842b415d4e71734a498206a5cd9315c87b23e583e25eb4ca97056b45c96856d":int:16:char*:"010001":exp:2:exp:2:hex:"e35c6ed98f64a6d5a648fcab8adb16331db32e5d15c74a40edf94c3dc4a4de792d190889f20f1e24ed12054a6b28798fcb42d1c548769b734c96373142092aed277603f4738df4dc1446586d0ec64da4fb60536db2ae17fc7e3c04bbfbbbd907bf117c08636fa16f95f51a6216934d3e34f85030f17bbbc5ba69144058aff081e0b19cf03c17195c5e888ba58f6fe0a02e5c3bda9719a7":hex:"653df9730e14e03f2ffb3374d6b75295aa4a52c38540b2d501adc1eb659a4d7a050769a3d11d0d5d6f3efb734200ade241fdc271c0f5eeed85b4bf00b2327bc8":hex:"9442a8ec48f87ebc81cc1273b03e528e7643c9e2fcc60ed85827d9341c5a36e5c76059baa8e9891df437e44c4047a266b46bcaaad3de1f1d4d3576defff080b791b013491636187fc45a930b70a533ed92abfd168f050df91b4c35d68d160a243ce589807a7d32661fc18b9547cdc0fd86d33acd349c98b34fb016ddd1bff23c58170e":int:0 + +RSASSA-PSS Verification RSA-1048, SHA-512 +depends_on:1 +3:int:1048:int:16:char*:"00c75d0f9fa17d1d24b939537a434017f390c6604444c35a13360d6b1fc986baf40159b84275d37b883278df5064dd9eb0f29b0d325acc790c4b59672737dbbf3acb88f5e2f2d54c919cafd072272c494591d52e158993315e71e2ca60b1c74feff8f3d77842b415d4e71734a498206a5cd9315c87b23e583e25eb4ca97056b45c96856d":int:16:char*:"010001":exp:2:exp:2:hex:"e35c6ed98f64a6d5a648fcab8adb16331db32e5d15c74a40edf94c3dc4a4de792d190889f20f1e24ed12054a6b28798fcb42d1c548769b734c96373142092aed277603f4738df4dc1446586d0ec64da4fb60536db2ae17fc7e3c04bbfbbbd907bf117c08636fa16f95f51a6216934d3e34f85030f17bbbc5ba69144058aff081e0b19cf03c17195c5e888ba58f6fe0a02e5c3bda9719a7":char*:"653df9730e14e03f2ffb3374d6b75295aa4a52c38540b2d501adc1eb659a4d7a050769a3d11d0d5d6f3efb734200ade241fdc271c0f5eeed85b4bf00b2327bc8":hex:"9442a8ec48f87ebc81cc1273b03e528e7643c9e2fcc60ed85827d9341c5a36e5c76059baa8e9891df437e44c4047a266b46bcaaad3de1f1d4d3576defff080b791b013491636187fc45a930b70a533ed92abfd168f050df91b4c35d68d160a243ce589807a7d32661fc18b9547cdc0fd86d33acd349c98b34fb016ddd1bff23c58170e":int:0 + diff --git a/third_party/mbedtls/test/test_suite_pkcs5.c b/third_party/mbedtls/test/test_suite_pkcs5.c new file mode 100644 index 000000000..3f52803fd --- /dev/null +++ b/third_party/mbedtls/test/test_suite_pkcs5.c @@ -0,0 +1,476 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_pkcs5.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_pkcs5.function + * Test suite data : suites/test_suite_pkcs5.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_PKCS5_C) +#include "third_party/mbedtls/pkcs5.h" +void test_pbkdf2_hmac( int hash, data_t * pw_str, data_t * salt_str, + int it_cnt, int key_len, data_t * result_key_string ) +{ + mbedtls_md_context_t ctx; + const mbedtls_md_info_t *info; + + unsigned char key[100]; + + mbedtls_md_init( &ctx ); + + info = mbedtls_md_info_from_type( hash ); + TEST_ASSERT( info != NULL ); + TEST_ASSERT( mbedtls_md_setup( &ctx, info, 1 ) == 0 ); + TEST_ASSERT( mbedtls_pkcs5_pbkdf2_hmac( &ctx, pw_str->x, pw_str->len, salt_str->x, salt_str->len, + it_cnt, key_len, key ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( key, result_key_string->x, + key_len, result_key_string->len ) == 0 ); + +exit: + mbedtls_md_free( &ctx ); +} + +void test_pbkdf2_hmac_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + + test_pbkdf2_hmac( *( (int *) params[0] ), &data1, &data3, *( (int *) params[5] ), *( (int *) params[6] ), &data7 ); +} +#if defined(MBEDTLS_ASN1_PARSE_C) +void test_mbedtls_pkcs5_pbes2( int params_tag, data_t *params_hex, data_t *pw, + data_t *data, int ref_ret, data_t *ref_out ) +{ + int my_ret; + mbedtls_asn1_buf params; + unsigned char *my_out = NULL; + + params.tag = params_tag; + params.p = params_hex->x; + params.len = params_hex->len; + + my_out = mbedtls_test_zero_alloc( ref_out->len ); + + my_ret = mbedtls_pkcs5_pbes2( ¶ms, MBEDTLS_PKCS5_DECRYPT, + pw->x, pw->len, data->x, data->len, my_out ); + TEST_ASSERT( my_ret == ref_ret ); + + if( ref_ret == 0 ) + TEST_ASSERT( memcmp( my_out, ref_out->x, ref_out->len ) == 0 ); + +exit: + mbedtls_free( my_out ); +} + +void test_mbedtls_pkcs5_pbes2_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_mbedtls_pkcs5_pbes2( *( (int *) params[0] ), &data1, &data3, &data5, *( (int *) params[7] ), &data8 ); +} +#endif /* MBEDTLS_ASN1_PARSE_C */ +#if defined(MBEDTLS_SELF_TEST) +void test_pkcs5_selftest( ) +{ + TEST_ASSERT( mbedtls_pkcs5_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_pkcs5_selftest_wrapper( void ** params ) +{ + (void)params; + + test_pkcs5_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_PKCS5_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_PKCS5_C) + + case 0: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 1: + { + *out_value = MBEDTLS_MD_SHA224; + } + break; + case 2: + { + *out_value = MBEDTLS_MD_SHA256; + } + break; + case 3: + { + *out_value = MBEDTLS_MD_SHA384; + } + break; + case 4: + { + *out_value = MBEDTLS_MD_SHA512; + } + break; + case 5: + { + *out_value = MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE; + } + break; + case 6: + { + *out_value = MBEDTLS_ASN1_SEQUENCE; + } + break; + case 7: + { + *out_value = MBEDTLS_ERR_PKCS5_INVALID_FORMAT + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG; + } + break; + case 8: + { + *out_value = MBEDTLS_ERR_PKCS5_INVALID_FORMAT + MBEDTLS_ERR_ASN1_OUT_OF_DATA; + } + break; + case 9: + { + *out_value = MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE; + } + break; + case 10: + { + *out_value = MBEDTLS_ERR_PKCS5_INVALID_FORMAT + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; + } + break; + case 11: + { + *out_value = MBEDTLS_ERR_PKCS5_INVALID_FORMAT; + } + break; + case 12: + { + *out_value = MBEDTLS_ERR_PKCS5_PASSWORD_MISMATCH; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_PKCS5_C) + + case 0: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if !defined(MBEDTLS_SHA512_NO_SHA384) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_DES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 5: + { +#if defined(MBEDTLS_CIPHER_MODE_CBC) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_PKCS5_C) + test_pbkdf2_hmac_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_PKCS5_C) && defined(MBEDTLS_ASN1_PARSE_C) + test_mbedtls_pkcs5_pbes2_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_PKCS5_C) && defined(MBEDTLS_SELF_TEST) + test_pkcs5_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_pkcs5.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_pkcs5.datax b/third_party/mbedtls/test/test_suite_pkcs5.datax new file mode 100644 index 000000000..dab96f199 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_pkcs5.datax @@ -0,0 +1,215 @@ +PBKDF2 RFC 6070 Test Vector #1 (SHA1) +depends_on:0 +0:exp:0:hex:"70617373776f7264":hex:"73616c74":int:1:int:20:hex:"0c60c80f961f0e71f3a9b524af6012062fe037a6" + +PBKDF2 RFC 6070 Test Vector #2 (SHA1) +depends_on:0 +0:exp:0:hex:"70617373776f7264":hex:"73616c74":int:2:int:20:hex:"ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957" + +PBKDF2 RFC 6070 Test Vector #3 (SHA1) +depends_on:0 +0:exp:0:hex:"70617373776f7264":hex:"73616c74":int:4096:int:20:hex:"4b007901b765489abead49d926f721d065a429c1" + +PBKDF2 RFC 6070 Test Vector #5 (SHA1) +depends_on:0 +0:exp:0:hex:"70617373776f726450415353574f524470617373776f7264":hex:"73616c7453414c5473616c7453414c5473616c7453414c5473616c7453414c5473616c74":int:4096:int:25:hex:"3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038" + +PBKDF2 RFC 6070 Test Vector #6 (SHA1) +depends_on:0 +0:exp:0:hex:"7061737300776f7264":hex:"7361006c74":int:4096:int:16:hex:"56fa6aa75548099dcc37d7f03425e0c3" + +PBKDF2 Python hashlib Test Vector #1 (SHA224) +depends_on:1 +0:exp:1:hex:"70617373776f7264":hex:"73616c74":int:1:int:20:hex:"3c198cbdb9464b7857966bd05b7bc92bc1cc4e6e" + +PBKDF2 Python hashlib Test Vector #2 (SHA224) +depends_on:1 +0:exp:1:hex:"70617373776f7264":hex:"73616c74":int:2:int:20:hex:"93200ffa96c5776d38fa10abdf8f5bfc0054b971" + +PBKDF2 Python hashlib Test Vector #3 (SHA224) +depends_on:1 +0:exp:1:hex:"70617373776f7264":hex:"73616c74":int:4096:int:20:hex:"218c453bf90635bd0a21a75d172703ff6108ef60" + +PBKDF2 Python hashlib Test Vector #5 (SHA224) +depends_on:1 +0:exp:1:hex:"70617373776f726450415353574f524470617373776f7264":hex:"73616c7453414c5473616c7453414c5473616c7453414c5473616c7453414c5473616c74":int:4096:int:25:hex:"056c4ba438ded91fc14e0594e6f52b87e1f3690c0dc0fbc057" + +PBKDF2 Python hashlib Test Vector #6 (SHA224) +depends_on:1 +0:exp:1:hex:"7061737300776f7264":hex:"7361006c74":int:4096:int:16:hex:"9b4011b641f40a2a500a31d4a392d15c" + +PBKDF2 RFC 7914 Sec 11 Test Vector #1 (SHA256) +depends_on:1 +0:exp:2:hex:"706173737764":hex:"73616c74":int:1:int:64:hex:"55ac046e56e3089fec1691c22544b605f94185216dde0465e68b9d57c20dacbc49ca9cccf179b645991664b39d77ef317c71b845b1e30bd509112041d3a19783" + +PBKDF2 RFC 7914 Sec 11 Test Vector #2 (SHA256) +depends_on:1 +0:exp:2:hex:"50617373776f7264":hex:"4e61436c":int:80000:int:64:hex:"4ddcd8f60b98be21830cee5ef22701f9641a4418d04c0414aeff08876b34ab56a1d425a1225833549adb841b51c9b3176a272bdebba1d078478f62b397f33c8d" + +PBKDF2 Python hashlib Test Vector #1 (SHA256) +depends_on:1 +0:exp:2:hex:"70617373776f7264":hex:"73616c74":int:1:int:20:hex:"120fb6cffcf8b32c43e7225256c4f837a86548c9" + +PBKDF2 Python hashlib Test Vector #2 (SHA256) +depends_on:1 +0:exp:2:hex:"70617373776f7264":hex:"73616c74":int:2:int:20:hex:"ae4d0c95af6b46d32d0adff928f06dd02a303f8e" + +PBKDF2 Python hashlib Test Vector #3 (SHA256) +depends_on:1 +0:exp:2:hex:"70617373776f7264":hex:"73616c74":int:4096:int:20:hex:"c5e478d59288c841aa530db6845c4c8d962893a0" + +PBKDF2 Python hashlib Test Vector #5 (SHA256) +depends_on:1 +0:exp:2:hex:"70617373776f726450415353574f524470617373776f7264":hex:"73616c7453414c5473616c7453414c5473616c7453414c5473616c7453414c5473616c74":int:4096:int:25:hex:"348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c" + +PBKDF2 Python hashlib Test Vector #6 (SHA256) +depends_on:1 +0:exp:2:hex:"7061737300776f7264":hex:"7361006c74":int:4096:int:16:hex:"89b69d0516f829893c696226650a8687" + +PBKDF2 Python hashlib Test Vector #1 (SHA384) +depends_on:2:3 +0:exp:3:hex:"70617373776f7264":hex:"73616c74":int:1:int:20:hex:"c0e14f06e49e32d73f9f52ddf1d0c5c719160923" + +PBKDF2 Python hashlib Test Vector #2 (SHA384) +depends_on:2:3 +0:exp:3:hex:"70617373776f7264":hex:"73616c74":int:2:int:20:hex:"54f775c6d790f21930459162fc535dbf04a93918" + +PBKDF2 Python hashlib Test Vector #3 (SHA384) +depends_on:2:3 +0:exp:3:hex:"70617373776f7264":hex:"73616c74":int:4096:int:20:hex:"559726be38db125bc85ed7895f6e3cf574c7a01c" + +PBKDF2 Python hashlib Test Vector #5 (SHA384) +depends_on:2:3 +0:exp:3:hex:"70617373776f726450415353574f524470617373776f7264":hex:"73616c7453414c5473616c7453414c5473616c7453414c5473616c7453414c5473616c74":int:4096:int:25:hex:"819143ad66df9a552559b9e131c52ae6c5c1b0eed18f4d283b" + +PBKDF2 Python hashlib Test Vector #6 (SHA384) +depends_on:2:3 +0:exp:3:hex:"7061737300776f7264":hex:"7361006c74":int:4096:int:16:hex:"a3f00ac8657e095f8e0823d232fc60b3" + +PBKDF2 Python hashlib Test Vector #1 (SHA512) +depends_on:2 +0:exp:4:hex:"70617373776f7264":hex:"73616c74":int:1:int:20:hex:"867f70cf1ade02cff3752599a3a53dc4af34c7a6" + +PBKDF2 Python hashlib Test Vector #2 (SHA512) +depends_on:2 +0:exp:4:hex:"70617373776f7264":hex:"73616c74":int:2:int:20:hex:"e1d9c16aa681708a45f5c7c4e215ceb66e011a2e" + +PBKDF2 Python hashlib Test Vector #3 (SHA512) +depends_on:2 +0:exp:4:hex:"70617373776f7264":hex:"73616c74":int:4096:int:20:hex:"d197b1b33db0143e018b12f3d1d1479e6cdebdcc" + +PBKDF2 Python hashlib Test Vector #5 (SHA512) +depends_on:2 +0:exp:4:hex:"70617373776f726450415353574f524470617373776f7264":hex:"73616c7453414c5473616c7453414c5473616c7453414c5473616c7453414c5473616c74":int:4096:int:25:hex:"8c0511f4c6e597c6ac6315d8f0362e225f3c501495ba23b868" + +PBKDF2 Python hashlib Test Vector #6 (SHA512) +depends_on:2 +0:exp:4:hex:"7061737300776f7264":hex:"7361006c74":int:4096:int:16:hex:"9d9e9c4cd21fe4be24d5b8244c759665" + +PBES2 Decrypt (OK) +depends_on:0:4:5 +1:exp:5:hex:"301B06092A864886F70D01050C300E04082ED7F24A1D516DD702020800301406082A864886F70D030704088A4FCC9DCC394910":hex:"70617373776f7264":hex:"1B60098D4834CA752D37B430E70B7A085CFF86E21F4849F969DD1DF623342662443F8BD1252BF83CEF6917551B08EF55A69C8F2BFFC93BCB2DFE2E354DA28F896D1BD1BFB972A1251219A6EC7183B0A4CF2C4998449ED786CAE2138437289EB2203974000C38619DA57A4E685D29649284602BD1806131772DA11A682674DC22B2CF109128DDB7FD980E1C5741FC0DB7":int:0:hex:"308187020100301306072A8648CE3D020106082A8648CE3D030107046D306B0201010420F12A1320760270A83CBFFD53F6031EF76A5D86C8A204F2C30CA9EBF51F0F0EA7A1440342000437CC56D976091E5A723EC7592DFF206EEE7CF9069174D0AD14B5F768225962924EE500D82311FFEA2FD2345D5D16BD8A88C26B770D55CD8A2A0EFA01C8B4EDFF060606060606" + +PBES2 Decrypt (bad params tag) +depends_on:0:4 +1:exp:6:hex:"":hex:"":hex:"":exp:7:hex:"" + +PBES2 Decrypt (bad KDF AlgId: not a sequence) +depends_on:0:4 +1:exp:5:hex:"31":hex:"":hex:"":exp:7:hex:"" + +PBES2 Decrypt (bad KDF AlgId: overlong) +depends_on:0:4 +1:exp:5:hex:"3001":hex:"":hex:"":exp:8:hex:"" + +PBES2 Decrypt (KDF != PBKDF2) +depends_on:0:4 +1:exp:5:hex:"300B06092A864886F70D01050D":hex:"":hex:"":exp:9:hex:"" + +PBES2 Decrypt (bad PBKDF2 params: not a sequence) +depends_on:0:4 +1:exp:5:hex:"300D06092A864886F70D01050C3100":hex:"":hex:"":exp:7:hex:"" + +PBES2 Decrypt (bad PBKDF2 params: overlong) +depends_on:0:4 +1:exp:5:hex:"300D06092A864886F70D01050C3001":hex:"":hex:"":exp:8:hex:"" + +PBES2 Decrypt (bad PBKDF2 params salt: not an octet string) +depends_on:0:4:5 +1:exp:5:hex:"300E06092A864886F70D01050C30010500":hex:"":hex:"":exp:7:hex:"" + +PBES2 Decrypt (bad PBKDF2 params salt: overlong) +depends_on:0:4 +1:exp:5:hex:"300E06092A864886F70D01050C30010401":hex:"":hex:"":exp:8:hex:"" + +PBES2 Decrypt (bad PBKDF2 params iter: not an int) +depends_on:0:4 +1:exp:5:hex:"301906092A864886F70D01050C300C04082ED7F24A1D516DD70300":hex:"":hex:"":exp:7:hex:"" + +PBES2 Decrypt (bad PBKDF2 params iter: overlong) +depends_on:0:4 +1:exp:5:hex:"301906092A864886F70D01050C300C04082ED7F24A1D516DD70201":hex:"":hex:"":exp:8:hex:"" + +PBES2 Decrypt (OK, PBKDF2 params explicit keylen) +depends_on:0:4:5 +1:exp:5:hex:"301E06092A864886F70D01050C301104082ED7F24A1D516DD702020800020118301406082A864886F70D030704088A4FCC9DCC394910":hex:"70617373776f7264":hex:"1B60098D4834CA752D37B430E70B7A085CFF86E21F4849F969DD1DF623342662443F8BD1252BF83CEF6917551B08EF55A69C8F2BFFC93BCB2DFE2E354DA28F896D1BD1BFB972A1251219A6EC7183B0A4CF2C4998449ED786CAE2138437289EB2203974000C38619DA57A4E685D29649284602BD1806131772DA11A682674DC22B2CF109128DDB7FD980E1C5741FC0DB7":int:0:hex:"308187020100301306072A8648CE3D020106082A8648CE3D030107046D306B0201010420F12A1320760270A83CBFFD53F6031EF76A5D86C8A204F2C30CA9EBF51F0F0EA7A1440342000437CC56D976091E5A723EC7592DFF206EEE7CF9069174D0AD14B5F768225962924EE500D82311FFEA2FD2345D5D16BD8A88C26B770D55CD8A2A0EFA01C8B4EDFF060606060606" + +PBES2 Decrypt (bad PBKDF2 params explicit keylen: overlong) +depends_on:0:4 +1:exp:5:hex:"301D06092A864886F70D01050C301004082ED7F24A1D516DD7020208000201":hex:"":hex:"":exp:8:hex:"" + +PBES2 Decrypt (OK, PBKDF2 params explicit prf_alg) +depends_on:0:4:5 +1:exp:5:hex:"302706092A864886F70D01050C301A04082ED7F24A1D516DD702020800300A06082A864886F70D0207301406082A864886F70D030704088A4FCC9DCC394910":hex:"70617373776f7264":hex:"1B60098D4834CA752D37B430E70B7A085CFF86E21F4849F969DD1DF623342662443F8BD1252BF83CEF6917551B08EF55A69C8F2BFFC93BCB2DFE2E354DA28F896D1BD1BFB972A1251219A6EC7183B0A4CF2C4998449ED786CAE2138437289EB2203974000C38619DA57A4E685D29649284602BD1806131772DA11A682674DC22B2CF109128DDB7FD980E1C5741FC0DB7":int:0:hex:"308187020100301306072A8648CE3D020106082A8648CE3D030107046D306B0201010420F12A1320760270A83CBFFD53F6031EF76A5D86C8A204F2C30CA9EBF51F0F0EA7A1440342000437CC56D976091E5A723EC7592DFF206EEE7CF9069174D0AD14B5F768225962924EE500D82311FFEA2FD2345D5D16BD8A88C26B770D55CD8A2A0EFA01C8B4EDFF060606060606" + +PBES2 Decrypt (bad, PBKDF2 params explicit prf_alg not a sequence) +depends_on:0:4 +1:exp:5:hex:"301D06092A864886F70D01050C301004082ED7F24A1D516DD7020208003100":hex:"":hex:"":exp:7:hex:"" + +PBES2 Decrypt (bad, PBKDF2 params explicit prf_alg overlong) +depends_on:0:4 +1:exp:5:hex:"301D06092A864886F70D01050C301004082ED7F24A1D516DD7020208003001":hex:"":hex:"":exp:8:hex:"" + +PBES2 Decrypt (bad, PBKDF2 params explicit prf_alg != HMAC-SHA*) +depends_on:0:4 +1:exp:5:hex:"302706092A864886F70D01050C301A04082ED7F24A1D516DD702020800300A06082A864886F70D0206":hex:"":hex:"":exp:9:hex:"" + +PBES2 Decrypt (bad, PBKDF2 params extra data) +depends_on:0:4 +1:exp:5:hex:"302806092A864886F70D01050C301B04082ED7F24A1D516DD702020800300A06082A864886F70D020700":hex:"":hex:"":exp:10:hex:"" + +PBES2 Decrypt (bad enc_scheme_alg: not a sequence) +depends_on:0:4 +1:exp:5:hex:"301B06092A864886F70D01050C300E04082ED7F24A1D516DD7020208003100":hex:"":hex:"":exp:7:hex:"" + +PBES2 Decrypt (bad enc_scheme_alg: overlong) +depends_on:0:4 +1:exp:5:hex:"301B06092A864886F70D01050C300E04082ED7F24A1D516DD7020208003001":hex:"":hex:"":exp:8:hex:"" + +PBES2 Decrypt (bad enc_scheme_alg: unknown oid) +depends_on:0:4 +1:exp:5:hex:"301B06092A864886F70D01050C300E04082ED7F24A1D516DD702020800300A06082A864886F70D03FF":hex:"":hex:"":exp:9:hex:"" + +PBES2 Decrypt (bad enc_scheme_alg params: not an octet string) +depends_on:0:4:5 +1:exp:5:hex:"301B06092A864886F70D01050C300E04082ED7F24A1D516DD702020800300C06082A864886F70D03070500":hex:"":hex:"":exp:11:hex:"" + +PBES2 Decrypt (bad enc_scheme_alg params: overlong) +depends_on:0:4 +1:exp:5:hex:"301B06092A864886F70D01050C300E04082ED7F24A1D516DD702020800300C06082A864886F70D03070401":hex:"":hex:"":exp:8:hex:"" + +PBES2 Decrypt (bad enc_scheme_alg params: len != iv_len) +depends_on:0:4:5 +1:exp:5:hex:"301B06092A864886F70D01050C300E04082ED7F24A1D516DD702020800301306082A864886F70D030704078A4FCC9DCC3949":hex:"":hex:"":exp:11:hex:"" + +PBES2 Decrypt (bad password) +depends_on:0:4:5 +1:exp:5:hex:"301B06092A864886F70D01050C300E04082ED7F24A1D516DD702020800301406082A864886F70D030704088A4FCC9DCC394910":hex:"F0617373776f7264":hex:"1B60098D4834CA752D37B430E70B7A085CFF86E21F4849F969DD1DF623342662443F8BD1252BF83CEF6917551B08EF55A69C8F2BFFC93BCB2DFE2E354DA28F896D1BD1BFB972A1251219A6EC7183B0A4CF2C4998449ED786CAE2138437289EB2203974000C38619DA57A4E685D29649284602BD1806131772DA11A682674DC22B2CF109128DDB7FD980E1C5741FC0DB7":exp:12:hex:"308187020100301306072A8648CE3D020106082A8648CE3D030107046D306B0201010420F12A1320760270A83CBFFD53F6031EF76A5D86C8A204F2C30CA9EBF51F0F0EA7A1440342000437CC56D976091E5A723EC7592DFF206EEE7CF9069174D0AD14B5F768225962924EE500D82311FFEA2FD2345D5D16BD8A88C26B770D55CD8A2A0EFA01C8B4EDFF060606060606" + +PBES2 Decrypt (bad iter value) +depends_on:0:4:5 +1:exp:5:hex:"301B06092A864886F70D01050C300E04082ED7F24A1D516DD702020801301406082A864886F70D030704088A4FCC9DCC394910":hex:"70617373776f7264":hex:"1B60098D4834CA752D37B430E70B7A085CFF86E21F4849F969DD1DF623342662443F8BD1252BF83CEF6917551B08EF55A69C8F2BFFC93BCB2DFE2E354DA28F896D1BD1BFB972A1251219A6EC7183B0A4CF2C4998449ED786CAE2138437289EB2203974000C38619DA57A4E685D29649284602BD1806131772DA11A682674DC22B2CF109128DDB7FD980E1C5741FC0DB7":exp:12:hex:"308187020100301306072A8648CE3D020106082A8648CE3D030107046D306B0201010420F12A1320760270A83CBFFD53F6031EF76A5D86C8A204F2C30CA9EBF51F0F0EA7A1440342000437CC56D976091E5A723EC7592DFF206EEE7CF9069174D0AD14B5F768225962924EE500D82311FFEA2FD2345D5D16BD8A88C26B770D55CD8A2A0EFA01C8B4EDFF060606060606" + +PKCS#5 Selftest +2 + diff --git a/third_party/mbedtls/test/test_suite_pkparse.c b/third_party/mbedtls/test/test_suite_pkparse.c new file mode 100644 index 000000000..a889e6a1e --- /dev/null +++ b/third_party/mbedtls/test/test_suite_pkparse.c @@ -0,0 +1,684 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_pkparse.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_pkparse.function + * Test suite data : suites/test_suite_pkparse.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_PK_PARSE_C) +#if defined(MBEDTLS_BIGNUM_C) +#include "third_party/mbedtls/pk.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/oid.h" +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_FS_IO) +void test_pk_parse_keyfile_rsa( char * key_file, char * password, int result ) +{ + mbedtls_pk_context ctx; + int res; + char *pwd = password; + + mbedtls_pk_init( &ctx ); + + if( strcmp( pwd, "NULL" ) == 0 ) + pwd = NULL; + + res = mbedtls_pk_parse_keyfile( &ctx, key_file, pwd ); + + TEST_ASSERT( res == result ); + + if( res == 0 ) + { + mbedtls_rsa_context *rsa; + TEST_ASSERT( mbedtls_pk_can_do( &ctx, MBEDTLS_PK_RSA ) ); + rsa = mbedtls_pk_rsa( ctx ); + TEST_ASSERT( mbedtls_rsa_check_privkey( rsa ) == 0 ); + } + +exit: + mbedtls_pk_free( &ctx ); +} + +void test_pk_parse_keyfile_rsa_wrapper( void ** params ) +{ + + test_pk_parse_keyfile_rsa( (char *) params[0], (char *) params[1], *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_FS_IO */ +#endif /* MBEDTLS_RSA_C */ +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_FS_IO) +void test_pk_parse_public_keyfile_rsa( char * key_file, int result ) +{ + mbedtls_pk_context ctx; + int res; + + mbedtls_pk_init( &ctx ); + + res = mbedtls_pk_parse_public_keyfile( &ctx, key_file ); + + TEST_ASSERT( res == result ); + + if( res == 0 ) + { + mbedtls_rsa_context *rsa; + TEST_ASSERT( mbedtls_pk_can_do( &ctx, MBEDTLS_PK_RSA ) ); + rsa = mbedtls_pk_rsa( ctx ); + TEST_ASSERT( mbedtls_rsa_check_pubkey( rsa ) == 0 ); + } + +exit: + mbedtls_pk_free( &ctx ); +} + +void test_pk_parse_public_keyfile_rsa_wrapper( void ** params ) +{ + + test_pk_parse_public_keyfile_rsa( (char *) params[0], *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_FS_IO */ +#endif /* MBEDTLS_RSA_C */ +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_ECP_C) +void test_pk_parse_public_keyfile_ec( char * key_file, int result ) +{ + mbedtls_pk_context ctx; + int res; + + mbedtls_pk_init( &ctx ); + + res = mbedtls_pk_parse_public_keyfile( &ctx, key_file ); + + TEST_ASSERT( res == result ); + + if( res == 0 ) + { + mbedtls_ecp_keypair *eckey; + TEST_ASSERT( mbedtls_pk_can_do( &ctx, MBEDTLS_PK_ECKEY ) ); + eckey = mbedtls_pk_ec( ctx ); + TEST_ASSERT( mbedtls_ecp_check_pubkey( &eckey->grp, &eckey->Q ) == 0 ); + } + +exit: + mbedtls_pk_free( &ctx ); +} + +void test_pk_parse_public_keyfile_ec_wrapper( void ** params ) +{ + + test_pk_parse_public_keyfile_ec( (char *) params[0], *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_ECP_C */ +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_ECP_C) +void test_pk_parse_keyfile_ec( char * key_file, char * password, int result ) +{ + mbedtls_pk_context ctx; + int res; + + mbedtls_pk_init( &ctx ); + + res = mbedtls_pk_parse_keyfile( &ctx, key_file, password ); + + TEST_ASSERT( res == result ); + + if( res == 0 ) + { + mbedtls_ecp_keypair *eckey; + TEST_ASSERT( mbedtls_pk_can_do( &ctx, MBEDTLS_PK_ECKEY ) ); + eckey = mbedtls_pk_ec( ctx ); + TEST_ASSERT( mbedtls_ecp_check_privkey( &eckey->grp, &eckey->d ) == 0 ); + } + +exit: + mbedtls_pk_free( &ctx ); +} + +void test_pk_parse_keyfile_ec_wrapper( void ** params ) +{ + + test_pk_parse_keyfile_ec( (char *) params[0], (char *) params[1], *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_ECP_C */ +#endif /* MBEDTLS_FS_IO */ +void test_pk_parse_key( data_t * buf, int result ) +{ + mbedtls_pk_context pk; + + mbedtls_pk_init( &pk ); + + TEST_ASSERT( mbedtls_pk_parse_key( &pk, buf->x, buf->len, NULL, 0 ) == result ); + +exit: + mbedtls_pk_free( &pk ); +} + +void test_pk_parse_key_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_pk_parse_key( &data0, *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_BIGNUM_C */ +#endif /* MBEDTLS_PK_PARSE_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_BIGNUM_C) + + case 0: + { + *out_value = MBEDTLS_ERR_PK_PASSWORD_REQUIRED; + } + break; + case 1: + { + *out_value = MBEDTLS_ERR_PK_PASSWORD_MISMATCH; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_PK_KEY_INVALID_FORMAT; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_BIGNUM_C) + + case 0: + { +#if defined(MBEDTLS_MD5_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_PEM_PARSE_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_CIPHER_MODE_CBC) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_DES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 5: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 6: + { +#if defined(MBEDTLS_PKCS12_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 7: + { +#if defined(MBEDTLS_CIPHER_PADDING_PKCS7) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 8: + { +#if defined(MBEDTLS_ARC4_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 9: + { +#if defined(MBEDTLS_PKCS5_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 10: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 11: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 12: + { +#if !defined(MBEDTLS_SHA512_NO_SHA384) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 13: + { +#if defined(MBEDTLS_ECP_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 14: + { +#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 15: + { +#if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 16: + { +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 17: + { +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 18: + { +#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 19: + { +#if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 20: + { +#if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 21: + { +#if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 22: + { +#if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 23: + { +#if defined(MBEDTLS_PK_PARSE_EC_EXTENDED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 24: + { +#if defined(MBEDTLS_RSA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_FS_IO) + test_pk_parse_keyfile_rsa_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_FS_IO) + test_pk_parse_public_keyfile_rsa_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_ECP_C) + test_pk_parse_public_keyfile_ec_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_ECP_C) + test_pk_parse_keyfile_ec_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_BIGNUM_C) + test_pk_parse_key_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_pkparse.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_pkparse.datax b/third_party/mbedtls/test/test_suite_pkparse.datax new file mode 100644 index 000000000..a4a1693b2 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_pkparse.datax @@ -0,0 +1,1156 @@ +Parse RSA Key #1 (No password when required) +depends_on:0:1:2:3 +0:char*:"zip:third_party/mbedtls/test/data/test-ca.key":char*:"NULL":exp:0 + +Parse RSA Key #2 (Correct password) +depends_on:0:1:2:3 +0:char*:"zip:third_party/mbedtls/test/data/test-ca.key":char*:"PolarSSLTest":int:0 + +Parse RSA Key #3 (Wrong password) +depends_on:0:1:2:3 +0:char*:"zip:third_party/mbedtls/test/data/test-ca.key":char*:"PolarSSLWRONG":exp:1 + +Parse RSA Key #4 (DES Encrypted) +depends_on:0:3:1:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_1024_des.pem":char*:"testkey":int:0 + +Parse RSA Key #5 (3DES Encrypted) +depends_on:0:3:1:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_1024_3des.pem":char*:"testkey":int:0 + +Parse RSA Key #6 (AES-128 Encrypted) +depends_on:0:4:1:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_1024_aes128.pem":char*:"testkey":int:0 + +Parse RSA Key #7 (AES-192 Encrypted) +depends_on:0:4:1:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_1024_aes192.pem":char*:"testkey":int:0 + +Parse RSA Key #8 (AES-256 Encrypted) +depends_on:0:4:1:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_1024_aes256.pem":char*:"testkey":int:0 + +Parse RSA Key #9 (2048-bit, DES Encrypted) +depends_on:0:3:1:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_2048_des.pem":char*:"testkey":int:0 + +Parse RSA Key #10 (2048-bit, 3DES Encrypted) +depends_on:0:3:1:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_2048_3des.pem":char*:"testkey":int:0 + +Parse RSA Key #11 (2048-bit, AES-128 Encrypted) +depends_on:0:4:1:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_2048_aes128.pem":char*:"testkey":int:0 + +Parse RSA Key #12 (2048-bit, AES-192 Encrypted) +depends_on:0:4:1:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_2048_aes192.pem":char*:"testkey":int:0 + +Parse RSA Key #13 (2048-bit, AES-256 Encrypted) +depends_on:0:4:1:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_2048_aes256.pem":char*:"testkey":int:0 + +Parse RSA Key #14 (4096-bit, DES Encrypted) +depends_on:0:3:1:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_4096_des.pem":char*:"testkey":int:0 + +Parse RSA Key #15 (4096-bit, 3DES Encrypted) +depends_on:0:3:1:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_4096_3des.pem":char*:"testkey":int:0 + +Parse RSA Key #16 (4096-bit, AES-128 Encrypted) +depends_on:0:4:1:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_4096_aes128.pem":char*:"testkey":int:0 + +Parse RSA Key #17 (4096-bit, AES-192 Encrypted) +depends_on:0:4:1:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_4096_aes192.pem":char*:"testkey":int:0 + +Parse RSA Key #18 (4096-bit, AES-256 Encrypted) +depends_on:0:4:1:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_4096_aes256.pem":char*:"testkey":int:0 + +Parse RSA Key #19 (PKCS#8 wrapped) +depends_on:0:1 +0:char*:"zip:third_party/mbedtls/test/data/format_gen.key":char*:"":int:0 + +Parse RSA Key #20 (PKCS#8 encrypted SHA1-3DES) +depends_on:3:5:1:6:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_3des.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #20.1 (PKCS#8 encrypted SHA1-3DES, wrong PW) +depends_on:3:5:1:6:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_3des.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #20.2 (PKCS#8 encrypted SHA1-3DES, no PW) +depends_on:3:5:1:6 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_3des.pem":char*:"":exp:0 + +Parse RSA Key #21 (PKCS#8 encrypted SHA1-3DES, 2048-bit) +depends_on:3:5:1:6:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_3des.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #21.1 (PKCS#8 encrypted SHA1-3DES, 2048-bit, wrong PW) +depends_on:3:5:1:6:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_3des.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #21.2 (PKCS#8 encrypted SHA1-3DES, 2048-bit, no PW) +depends_on:3:5:1:6 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_3des.pem":char*:"":exp:0 + +Parse RSA Key #22 (PKCS#8 encrypted SHA1-3DES, 4096-bit) +depends_on:3:5:1:6:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_3des.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #22.1 (PKCS#8 encrypted SHA1-3DES, 4096-bit, wrong PW) +depends_on:3:5:1:6:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_3des.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #22.2 (PKCS#8 encrypted SHA1-3DES, 4096-bit, no PW) +depends_on:3:5:1:6 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_3des.pem":char*:"":exp:0 + +Parse RSA Key #23 (PKCS#8 encrypted SHA1-3DES DER) +depends_on:3:5:6:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_3des.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #24 (PKCS#8 encrypted SHA1-3DES DER, 2048-bit) +depends_on:3:5:6:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_3des.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #25 (PKCS#8 encrypted SHA1-3DES DER, 4096-bit) +depends_on:3:5:6:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_3des.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #26 (PKCS#8 encrypted SHA1-2DES) +depends_on:3:5:1:6:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_2des.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #26.1 (PKCS#8 encrypted SHA1-2DES, wrong PW) +depends_on:3:5:1:6:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_2des.pem":char*:"PolarSLTest":exp:1 + +Parse RSA Key #26.2 (PKCS#8 encrypted SHA1-2DES, no PW) +depends_on:3:5:1:6 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_2des.pem":char*:"":exp:0 + +Parse RSA Key #27 (PKCS#8 encrypted SHA1-2DES, 2048-bit) +depends_on:3:5:1:6:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_2des.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #27.1 (PKCS#8 encrypted SHA1-2DES, 2048-bit, wrong PW) +depends_on:3:5:1:6:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_2des.pem":char*:"PolarSLTest":exp:1 + +Parse RSA Key #27.2 (PKCS#8 encrypted SHA1-2DES, 2048-bit no PW) +depends_on:3:5:1:6 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_2des.pem":char*:"":exp:0 + +Parse RSA Key #28 (PKCS#8 encrypted SHA1-2DES, 4096-bit) +depends_on:3:5:1:6:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_2des.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #28.1 (PKCS#8 encrypted SHA1-2DES, 4096-bit, wrong PW) +depends_on:3:5:1:6:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_2des.pem":char*:"PolarSLTest":exp:1 + +Parse RSA Key #28.2 (PKCS#8 encrypted SHA1-2DES, 4096-bit, no PW) +depends_on:3:5:1:6 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_2des.pem":char*:"":exp:0 + +Parse RSA Key #29 (PKCS#8 encrypted SHA1-2DES DER) +depends_on:3:5:6:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_2des.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #30 (PKCS#8 encrypted SHA1-2DES DER, 2048-bit) +depends_on:3:5:6:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_2des.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #31 (PKCS#8 encrypted SHA1-2DES DER, 4096-bit) +depends_on:3:5:6:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_2des.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #32 (PKCS#8 encrypted SHA1-RC4-128) +depends_on:8:5:1:6 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_rc4_128.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #32.1 (PKCS#8 encrypted SHA1-RC4-128, wrong PW) +depends_on:8:5:1:6 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_rc4_128.pem":char*:"PolarSSLTe":exp:1 + +Parse RSA Key #32.2 (PKCS#8 encrypted SHA1-RC4-128, no PW) +depends_on:8:5:1:6 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_rc4_128.pem":char*:"":exp:0 + +Parse RSA Key #33 (PKCS#8 encrypted SHA1-RC4-128, 2048-bit) +depends_on:8:5:1:6 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_rc4_128.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #33.1 (PKCS#8 encrypted SHA1-RC4-128, 2048-bit, wrong PW) +depends_on:8:5:1:6 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_rc4_128.pem":char*:"PolarSSLTe":exp:1 + +Parse RSA Key #33.2 (PKCS#8 encrypted SHA1-RC4-128, 2048-bit, no PW) +depends_on:8:5:1:6 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_rc4_128.pem":char*:"":exp:0 + +Parse RSA Key #34 (PKCS#8 encrypted SHA1-RC4-128, 4096-bit) +depends_on:8:5:1:6 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_rc4_128.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #34.1 (PKCS#8 encrypted SHA1-RC4-128, 4096-bit, wrong PW) +depends_on:8:5:1:6 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_rc4_128.pem":char*:"PolarSSLTe":exp:1 + +Parse RSA Key #34.2 (PKCS#8 encrypted SHA1-RC4-128, 4096-bit, no PW) +depends_on:8:5:1:6 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_rc4_128.pem":char*:"":exp:0 + +Parse RSA Key #35 (PKCS#8 encrypted SHA1-RC4-128 DER) +depends_on:8:5:6:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_1024_rc4_128.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #36 (PKCS#8 encrypted SHA1-RC4-128 DER, 2048-bit) +depends_on:8:5:6:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_2048_rc4_128.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #37 (PKCS#8 encrypted SHA1-RC4-128 DER, 4096-bit) +depends_on:8:5:6:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbe_sha1_4096_rc4_128.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #38 (PKCS#8 encrypted v2 PBKDF2 3DES) +depends_on:3:5:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #38.1 (PKCS#8 encrypted v2 PBKDF2 3DES, wrong PW) +depends_on:3:5:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #38.2 (PKCS#8 encrypted v2 PBKDF2 3DES, no PW) +depends_on:3:5:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.pem":char*:"":exp:0 + +Parse RSA Key #39 (PKCS#8 encrypted v2 PBKDF2 3DES, 2048-bit) +depends_on:3:5:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #39.1 (PKCS#8 encrypted v2 PBKDF2 3DES, 2048-bit, wrong PW) +depends_on:3:5:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #39.2 (PKCS#8 encrypted v2 PBKDF2 3DES, 2048-bit, no PW) +depends_on:3:5:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des.pem":char*:"":exp:0 + +Parse RSA Key #40 (PKCS#8 encrypted v2 PBKDF2 3DES, 4096-bit) +depends_on:3:5:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #40.1 (PKCS#8 encrypted v2 PBKDF2 3DES, 4096-bit, wrong PW) +depends_on:3:5:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #40.2 (PKCS#8 encrypted v2 PBKDF2 3DES, 4096-bit, no PW) +depends_on:3:5:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.pem":char*:"":exp:0 + +Parse RSA Key #41 (PKCS#8 encrypted v2 PBKDF2 3DES DER) +depends_on:3:5:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #41.1 (PKCS#8 encrypted v2 PBKDF2 3DES DER, wrong PW) +depends_on:3:5:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #41.2 (PKCS#8 encrypted v2 PBKDF2 3DES DER, no PW) +depends_on:3:5:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des.der":char*:"":exp:2 + +Parse RSA Key #42 (PKCS#8 encrypted v2 PBKDF2 3DES DER, 2048-bit) +depends_on:3:5:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #42.1 (PKCS#8 encrypted v2 PBKDF2 3DES DER, 2048-bit, wrong PW) +depends_on:3:5:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #42.2 (PKCS#8 encrypted v2 PBKDF2 3DES DER, 2048-bit, no PW) +depends_on:3:5:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des.der":char*:"":exp:2 + +Parse RSA Key #43 (PKCS#8 encrypted v2 PBKDF2 3DES DER, 4096-bit) +depends_on:3:5:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #43.1 (PKCS#8 encrypted v2 PBKDF2 3DES DER, 4096-bit, wrong PW) +depends_on:3:5:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #43.2 (PKCS#8 encrypted v2 PBKDF2 3DES DER, 4096-bit, no PW) +depends_on:3:5:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des.der":char*:"":exp:2 + +Parse RSA Key #44 (PKCS#8 encrypted v2 PBKDF2 DES) +depends_on:3:5:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #44.1 (PKCS#8 encrypted v2 PBKDF2 DES, wrong PW) +depends_on:3:5:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #44.2 (PKCS#8 encrypted v2 PBKDF2 DES, no PW) +depends_on:3:5:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des.pem":char*:"":exp:0 + +Parse RSA Key #45 (PKCS#8 encrypted v2 PBKDF2 DES, 2048-bit) +depends_on:3:5:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #45.1 (PKCS#8 encrypted v2 PBKDF2 DES, 2048-bit, wrong PW) +depends_on:3:5:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #45.2 (PKCS#8 encrypted v2 PBKDF2 DES, 2048-bit, no PW) +depends_on:3:5:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des.pem":char*:"":exp:0 + +Parse RSA Key #46 (PKCS#8 encrypted v2 PBKDF2 DES, 4096-bit) +depends_on:3:5:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #46.1 (PKCS#8 encrypted v2 PBKDF2 DES, 4096-bit, wrong PW) +depends_on:3:5:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #46.2 (PKCS#8 encrypted v2 PBKDF2 DES, 4096-bit, no PW) +depends_on:3:5:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des.pem":char*:"":exp:0 + +Parse RSA Key #47 (PKCS#8 encrypted v2 PBKDF2 DES DER) +depends_on:3:5:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #47.1 (PKCS#8 encrypted v2 PBKDF2 DES DER, wrong PW) +depends_on:3:5:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #47.2 (PKCS#8 encrypted v2 PBKDF2 DES DER, no PW) +depends_on:3:5:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des.der":char*:"":exp:2 + +Parse RSA Key #48 (PKCS#8 encrypted v2 PBKDF2 DES DER, 2048-bit) +depends_on:3:5:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #48.1 (PKCS#8 encrypted v2 PBKDF2 DES DER, 2048-bit, wrong PW) +depends_on:3:5:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #48.2 (PKCS#8 encrypted v2 PBKDF2 DES DER, 2048-bit, no PW) +depends_on:3:5:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des.der":char*:"":exp:2 + +Parse RSA Key #49 (PKCS#8 encrypted v2 PBKDF2 DES DER, 4096-bit) +depends_on:3:5:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #49.1 (PKCS#8 encrypted v2 PBKDF2 DES DER, 4096-bit, wrong PW) +depends_on:3:5:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #49.2 (PKCS#8 encrypted v2 PBKDF2 DES DER, 4096-bit, no PW) +depends_on:3:5:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des.der":char*:"":exp:2 + +Parse RSA Key #50 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224) +depends_on:3:10:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #50.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, wrong PW) +depends_on:3:10:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #50.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, no PW) +depends_on:3:10:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.pem":char*:"":exp:0 + +Parse RSA Key #51 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, 2048-bit) +depends_on:3:10:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #51.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, 2048-bit, wrong PW) +depends_on:3:10:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #51.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, 2048-bit, no PW) +depends_on:3:10:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.pem":char*:"":exp:0 + +Parse RSA Key #52 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, 4096-bit) +depends_on:3:10:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #52.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, 4096-bit, wrong PW) +depends_on:3:10:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #52.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224, 4096-bit, no PW) +depends_on:3:10:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.pem":char*:"":exp:0 + +Parse RSA Key #53 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER) +depends_on:3:10:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #53.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, wrong PW) +depends_on:3:10:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #53.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, no PW) +depends_on:3:10:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha224.der":char*:"":exp:2 + +Parse RSA Key #54 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, 2048-bit) +depends_on:3:10:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #54.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, 2048-bit, wrong PW) +depends_on:3:10:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #54.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, 2048-bit, no PW) +depends_on:3:10:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha224.der":char*:"":exp:2 + +Parse RSA Key #55 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, 4096-bit) +depends_on:3:10:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #55.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, 4096-bit, wrong PW) +depends_on:3:10:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #55.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA224 DER, 4096-bit, no PW) +depends_on:3:10:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha224.der":char*:"":exp:2 + +Parse RSA Key #56 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224) +depends_on:3:10:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #56.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, wrong PW) +depends_on:3:10:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #56.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, no PW) +depends_on:3:10:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.pem":char*:"":exp:0 + +Parse RSA Key #57 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, 2048-bit) +depends_on:3:10:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #57.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, 2048-bit, wrong PW) +depends_on:3:10:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #57.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, 2048-bit, no PW) +depends_on:3:10:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.pem":char*:"":exp:0 + +Parse RSA Key #58 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, 4096-bit) +depends_on:3:10:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #58.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, 4096-bit, wrong PW) +depends_on:3:10:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #58.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224, 4096-bit, no PW) +depends_on:3:10:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.pem":char*:"":exp:0 + +Parse RSA Key #59 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER) +depends_on:3:10:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #59.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, wrong PW) +depends_on:3:10:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #59.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, no PW) +depends_on:3:10:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha224.der":char*:"":exp:2 + +Parse RSA Key #60 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, 2048-bit) +depends_on:3:10:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #60.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, 2048-bit, wrong PW) +depends_on:3:10:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #60.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, 2048-bit, no PW) +depends_on:3:10:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha224.der":char*:"":exp:2 + +Parse RSA Key #61 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, 4096-bit) +depends_on:3:10:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #61.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, 4096-bit, wrong PW) +depends_on:3:10:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #61.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA224 DER, 4096-bit, no PW) +depends_on:3:10:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha224.der":char*:"":exp:2 + +Parse RSA Key #62 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256) +depends_on:3:10:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #62.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, wrong PW) +depends_on:3:10:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #62.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, no PW) +depends_on:3:10:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.pem":char*:"":exp:0 + +Parse RSA Key #63 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, 2048-bit) +depends_on:3:10:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #63.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, 2048-bit, wrong PW) +depends_on:3:10:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #63.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, 2048-bit, no PW) +depends_on:3:10:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.pem":char*:"":exp:0 + +Parse RSA Key #64 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, 4096-bit) +depends_on:3:10:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #64.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, 4096-bit, wrong PW) +depends_on:3:10:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #64.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256, 4096-bit, no PW) +depends_on:3:10:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.pem":char*:"":exp:0 + +Parse RSA Key #65 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER) +depends_on:3:10:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #65.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, wrong PW) +depends_on:3:10:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #65.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, no PW) +depends_on:3:10:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha256.der":char*:"":exp:2 + +Parse RSA Key #66 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, 2048-bit) +depends_on:3:10:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #66.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, 2048-bit, wrong PW) +depends_on:3:10:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #66.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, 2048-bit, no PW) +depends_on:3:10:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha256.der":char*:"":exp:2 + +Parse RSA Key #67 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, 4096-bit) +depends_on:3:10:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #68.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, 4096-bit, wrong PW) +depends_on:3:10:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #68.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA256 DER, 4096-bit, no PW) +depends_on:3:10:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha256.der":char*:"":exp:2 + +Parse RSA Key #69 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256) +depends_on:3:10:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #69.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, wrong PW) +depends_on:3:10:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #69.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, no PW) +depends_on:3:10:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.pem":char*:"":exp:0 + +Parse RSA Key #70 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, 2048-bit) +depends_on:3:10:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #70.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, 2048-bit, wrong PW) +depends_on:3:10:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #70.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, 2048-bit, no PW) +depends_on:3:10:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.pem":char*:"":exp:0 + +Parse RSA Key #71 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, 4096-bit) +depends_on:3:10:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #71.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, 4096-bit, wrong PW) +depends_on:3:10:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #71.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256, 4096-bit, no PW) +depends_on:3:10:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.pem":char*:"":exp:0 + +Parse RSA Key #72 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER) +depends_on:3:10:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #72.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, wrong PW) +depends_on:3:10:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #72.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, no PW) +depends_on:3:10:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha256.der":char*:"":exp:2 + +Parse RSA Key #73 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, 2048-bit) +depends_on:3:10:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #73.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, 2048-bit, wrong PW) +depends_on:3:10:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #73.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, 2048-bit, no PW) +depends_on:3:10:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha256.der":char*:"":exp:2 + +Parse RSA Key #74 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, 4096-bit) +depends_on:3:10:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #74.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, 4096-bit, wrong PW) +depends_on:3:10:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #74.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA256 DER, 4096-bit, no PW) +depends_on:3:10:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha256.der":char*:"":exp:2 + +Parse RSA Key #75 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384) +depends_on:3:11:12:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #75.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, wrong PW) +depends_on:3:11:12:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #75.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, no PW) +depends_on:3:11:12:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.pem":char*:"":exp:0 + +Parse RSA Key #76 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, 2048-bit) +depends_on:3:11:12:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #76.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, 2048-bit, wrong PW) +depends_on:3:11:12:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #76.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, 2048-bit, no PW) +depends_on:3:11:12:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.pem":char*:"":exp:0 + +Parse RSA Key #77 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, 4096-bit) +depends_on:3:11:12:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #77.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, 4096-bit, wrong PW) +depends_on:3:11:12:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #77.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384, 4096-bit, no PW) +depends_on:3:11:12:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.pem":char*:"":exp:0 + +Parse RSA Key #78 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER) +depends_on:3:11:12:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #78.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, wrong PW) +depends_on:3:11:12:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #78.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, no PW) +depends_on:3:11:12:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha384.der":char*:"":exp:2 + +Parse RSA Key #79 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, 2048-bit) +depends_on:3:11:12:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #79.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, 2048-bit, wrong PW) +depends_on:3:11:12:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #79.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, 2048-bit, no PW) +depends_on:3:11:12:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha384.der":char*:"":exp:2 + +Parse RSA Key #80 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, 4096-bit) +depends_on:3:11:12:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #80.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, 4096-bit, wrong PW) +depends_on:3:11:12:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #80.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA384 DER, 4096-bit, no PW) +depends_on:3:11:12:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha384.der":char*:"":exp:2 + +Parse RSA Key #81 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384) +depends_on:3:11:12:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #81.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, wrong PW) +depends_on:3:11:12:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #81.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, no PW) +depends_on:3:11:12:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.pem":char*:"":exp:0 + +Parse RSA Key #82 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, 2048-bit) +depends_on:3:11:12:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #82.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, 2048-bit, wrong PW) +depends_on:3:11:12:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #82.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, 2048-bit, no PW) +depends_on:3:11:12:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.pem":char*:"":exp:0 + +Parse RSA Key #83 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, 4096-bit) +depends_on:3:11:12:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #83.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, 4096-bit, wrong PW) +depends_on:3:11:12:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #83.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384, 4096-bit, no PW) +depends_on:3:11:12:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.pem":char*:"":exp:0 + +Parse RSA Key #84 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER) +depends_on:3:11:12:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #84.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, wrong PW) +depends_on:3:11:12:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #85.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, no PW) +depends_on:3:11:12:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha384.der":char*:"":exp:2 + +Parse RSA Key #86 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, 2048-bit) +depends_on:3:11:12:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #86.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, 2048-bit, wrong PW) +depends_on:3:11:12:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #86.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, 2048-bit, no PW) +depends_on:3:11:12:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha384.der":char*:"":exp:2 + +Parse RSA Key #87 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, 4096-bit) +depends_on:3:11:12:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #87.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, 4096-bit, wrong PW) +depends_on:3:11:12:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #87.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA384 DER, 4096-bit, no PW) +depends_on:3:11:12:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha384.der":char*:"":exp:2 + +Parse RSA Key #88 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512) +depends_on:3:11:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #88.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, wrong PW) +depends_on:3:11:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #88.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, no PW) +depends_on:3:11:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.pem":char*:"":exp:0 + +Parse RSA Key #89 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, 2048-bit) +depends_on:3:11:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #89.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, 2048-bit, wrong PW) +depends_on:3:11:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #89.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, 2048-bit, no PW) +depends_on:3:11:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.pem":char*:"":exp:0 + +Parse RSA Key #90 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, 4096-bit) +depends_on:3:11:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #90.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, 4096-bit, wrong PW) +depends_on:3:11:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #90.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512, 4096-bit, no PW) +depends_on:3:11:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.pem":char*:"":exp:0 + +Parse RSA Key #91 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER) +depends_on:3:11:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #91.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, wrong PW) +depends_on:3:11:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #91.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, no PW) +depends_on:3:11:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_3des_sha512.der":char*:"":exp:2 + +Parse RSA Key #92 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, 2048-bit) +depends_on:3:11:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #92.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, 2048-bit, wrong PW) +depends_on:3:11:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #92.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, 2048-bit, no PW) +depends_on:3:11:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_3des_sha512.der":char*:"":exp:2 + +Parse RSA Key #93 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, 4096-bit) +depends_on:3:11:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #93.1 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, 4096-bit, wrong PW) +depends_on:3:11:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #93.2 (PKCS#8 encrypted v2 PBKDF2 3DES hmacWithSHA512 DER, 4096-bit, no PW) +depends_on:3:11:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_3des_sha512.der":char*:"":exp:2 + +Parse RSA Key #94 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512) +depends_on:3:11:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #94.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, wrong PW) +depends_on:3:11:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #94.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, no PW) +depends_on:3:11:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.pem":char*:"":exp:0 + +Parse RSA Key #95 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, 2048-bit) +depends_on:3:11:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #95.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, 2048-bit, wrong PW) +depends_on:3:11:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #95.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, 2048-bit, no PW) +depends_on:3:11:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.pem":char*:"":exp:0 + +Parse RSA Key #96 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, 4096-bit) +depends_on:3:11:1:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem":char*:"PolarSSLTest":int:0 + +Parse RSA Key #96.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, 4096-bit, wrong PW) +depends_on:3:11:1:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #96.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512, 4096-bit, no PW) +depends_on:3:11:1:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.pem":char*:"":exp:0 + +Parse RSA Key #97 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER) +depends_on:3:11:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #97.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, wrong PW) +depends_on:3:11:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #97.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, no PW) +depends_on:3:11:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_1024_des_sha512.der":char*:"":exp:2 + +Parse RSA Key #98 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, 2048-bit) +depends_on:3:11:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #98.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, 2048-bit, wrong PW) +depends_on:3:11:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #98.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, 2048-bit, no PW) +depends_on:3:11:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_2048_des_sha512.der":char*:"":exp:2 + +Parse RSA Key #99 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, 4096-bit) +depends_on:3:11:9:2 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der":char*:"PolarSSLTest":int:0 + +Parse RSA Key #99.1 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, 4096-bit, wrong PW) +depends_on:3:11:9:2:7 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der":char*:"PolarSSLTes":exp:1 + +Parse RSA Key #99.2 (PKCS#8 encrypted v2 PBKDF2 DES hmacWithSHA512 DER, 4096-bit, no PW) +depends_on:3:11:9 +0:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_pbes2_pbkdf2_4096_des_sha512.der":char*:"":exp:2 + +Parse Public RSA Key #1 (PKCS#8 wrapped) +depends_on:1 +1:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_2048_public.pem":int:0 + +Parse Public RSA Key #1 (PKCS#8 wrapped, DER) +1:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs8_2048_public.der":int:0 + +Parse Public RSA Key #3 (PKCS#1 wrapped) +depends_on:1 +1:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_2048_public.pem":int:0 + +Parse Public RSA Key #4 (PKCS#1 wrapped, DER) +1:char*:"zip:third_party/mbedtls/test/data/rsa_pkcs1_2048_public.der":int:0 + +Parse Public EC Key #1 (RFC 5480, DER) +depends_on:13:14 +2:char*:"zip:third_party/mbedtls/test/data/ec_pub.der":int:0 + +Parse Public EC Key #2 (RFC 5480, PEM) +depends_on:1:13:14 +2:char*:"zip:third_party/mbedtls/test/data/ec_pub.pem":int:0 + +Parse Public EC Key #3 (RFC 5480, secp224r1) +depends_on:1:13:15 +2:char*:"zip:third_party/mbedtls/test/data/ec_224_pub.pem":int:0 + +Parse Public EC Key #4 (RFC 5480, secp256r1) +depends_on:1:13:16 +2:char*:"zip:third_party/mbedtls/test/data/ec_256_pub.pem":int:0 + +Parse Public EC Key #5 (RFC 5480, secp384r1) +depends_on:1:13:17 +2:char*:"zip:third_party/mbedtls/test/data/ec_384_pub.pem":int:0 + +Parse Public EC Key #6 (RFC 5480, secp521r1) +depends_on:1:13:18 +2:char*:"zip:third_party/mbedtls/test/data/ec_521_pub.pem":int:0 + +Parse Public EC Key #7 (RFC 5480, brainpoolP256r1) +depends_on:1:13:19 +2:char*:"zip:third_party/mbedtls/test/data/ec_bp256_pub.pem":int:0 + +Parse Public EC Key #8 (RFC 5480, brainpoolP384r1) +depends_on:1:13:20 +2:char*:"zip:third_party/mbedtls/test/data/ec_bp384_pub.pem":int:0 + +Parse Public EC Key #9 (RFC 5480, brainpoolP512r1) +depends_on:1:13:21 +2:char*:"zip:third_party/mbedtls/test/data/ec_bp512_pub.pem":int:0 + +Parse EC Key #1 (SEC1 DER) +depends_on:1:13:14 +3:char*:"zip:third_party/mbedtls/test/data/ec_prv.sec1.der":char*:"NULL":int:0 + +Parse EC Key #2 (SEC1 PEM) +depends_on:1:13:14 +3:char*:"zip:third_party/mbedtls/test/data/ec_prv.sec1.pem":char*:"NULL":int:0 + +Parse EC Key #3 (SEC1 PEM encrypted) +depends_on:3:1:13:14:2:0 +3:char*:"zip:third_party/mbedtls/test/data/ec_prv.sec1.pw.pem":char*:"polar":int:0 + +Parse EC Key #4 (PKCS8 DER) +depends_on:13:14 +3:char*:"zip:third_party/mbedtls/test/data/ec_prv.pk8.der":char*:"NULL":int:0 + +Parse EC Key #4a (PKCS8 DER, no public key) +depends_on:1:13:16 +3:char*:"zip:third_party/mbedtls/test/data/ec_prv.pk8nopub.der":char*:"NULL":int:0 + +Parse EC Key #4b (PKCS8 DER, no public key, with parameters) +depends_on:1:13:16 +3:char*:"zip:third_party/mbedtls/test/data/ec_prv.pk8nopubparam.der":char*:"NULL":int:0 + +Parse EC Key #4c (PKCS8 DER, with parameters) +depends_on:1:13:16 +3:char*:"zip:third_party/mbedtls/test/data/ec_prv.pk8param.der":char*:"NULL":int:0 + +Parse EC Key #5 (PKCS8 PEM) +depends_on:1:13:14 +3:char*:"zip:third_party/mbedtls/test/data/ec_prv.pk8.pem":char*:"NULL":int:0 + +Parse EC Key #5a (PKCS8 PEM, no public key) +depends_on:1:13:16 +3:char*:"zip:third_party/mbedtls/test/data/ec_prv.pk8nopub.pem":char*:"NULL":int:0 + +Parse EC Key #5b (PKCS8 PEM, no public key, with parameters) +depends_on:1:13:16 +3:char*:"zip:third_party/mbedtls/test/data/ec_prv.pk8nopubparam.pem":char*:"NULL":int:0 + +Parse EC Key #5c (PKCS8 PEM, with parameters) +depends_on:1:13:16 +3:char*:"zip:third_party/mbedtls/test/data/ec_prv.pk8param.pem":char*:"NULL":int:0 + +Parse EC Key #6 (PKCS8 encrypted DER) +depends_on:8:5:13:14 +3:char*:"zip:third_party/mbedtls/test/data/ec_prv.pk8.pw.der":char*:"polar":int:0 + +Parse EC Key #7 (PKCS8 encrypted PEM) +depends_on:8:5:1:13:14 +3:char*:"zip:third_party/mbedtls/test/data/ec_prv.pk8.pw.pem":char*:"polar":int:0 + +Parse EC Key #8 (SEC1 PEM, secp224r1) +depends_on:1:13:15 +3:char*:"zip:third_party/mbedtls/test/data/ec_224_prv.pem":char*:"NULL":int:0 + +Parse EC Key #9 (SEC1 PEM, secp256r1) +depends_on:1:13:16 +3:char*:"zip:third_party/mbedtls/test/data/ec_256_prv.pem":char*:"NULL":int:0 + +Parse EC Key #10 (SEC1 PEM, secp384r1) +depends_on:1:13:17 +3:char*:"zip:third_party/mbedtls/test/data/ec_384_prv.pem":char*:"NULL":int:0 + +Parse EC Key #11 (SEC1 PEM, secp521r1) +depends_on:1:13:18 +3:char*:"zip:third_party/mbedtls/test/data/ec_521_prv.pem":char*:"NULL":int:0 + +Parse EC Key #12 (SEC1 PEM, bp256r1) +depends_on:1:13:19 +3:char*:"zip:third_party/mbedtls/test/data/ec_bp256_prv.pem":char*:"NULL":int:0 + +Parse EC Key #13 (SEC1 PEM, bp384r1) +depends_on:1:13:20 +3:char*:"zip:third_party/mbedtls/test/data/ec_bp384_prv.pem":char*:"NULL":int:0 + +Parse EC Key #14 (SEC1 PEM, bp512r1) +depends_on:1:13:21 +3:char*:"zip:third_party/mbedtls/test/data/ec_bp512_prv.pem":char*:"NULL":int:0 + +Parse EC Key #15 (SEC1 DER, secp256k1, SpecifiedECDomain) +depends_on:1:13:22:23 +3:char*:"zip:third_party/mbedtls/test/data/ec_prv.specdom.der":char*:"NULL":int:0 + +Key ASN1 (No data) +4:hex:"":exp:2 + +Key ASN1 (First tag not Sequence) +4:hex:"020100":exp:2 + +Key ASN1 (RSAPrivateKey, incorrect version tag) +depends_on:24 +4:hex:"300100":exp:2 + +Key ASN1 (RSAPrivateKey, version tag missing) +depends_on:24 +4:hex:"3000":exp:2 + +Key ASN1 (RSAPrivateKey, invalid version) +depends_on:24 +4:hex:"3003020101":exp:2 + +Key ASN1 (RSAPrivateKey, correct version, incorrect tag) +depends_on:24 +4:hex:"300402010000":exp:2 + +Key ASN1 (RSAPrivateKey, correct format+values, minimal modulus size (128 bit)) +depends_on:24 +4:hex:"3063020100021100cc8ab070369ede72920e5a51523c857102030100010211009a6318982a7231de1894c54aa4909201020900f3058fd8dc484d61020900d7770dbd8b78a2110209009471f14c26428401020813425f060c4b72210208052b93d01747a87c":int:0 + +Key ASN1 (RSAPrivateKey, correct format, modulus too small (127 bit)) +depends_on:24 +4:hex:"30630201000211007c8ab070369ede72920e5a51523c857102030100010211009a6318982a7231de1894c54aa4909201020900f3058fd8dc484d61020900d7770dbd8b78a2110209009471f14c26428401020813425f060c4b72210208052b93d01747a87c":exp:2 + +Key ASN1 (RSAPrivateKey, correct format, modulus even) +depends_on:24 +4:hex:"3063020100021100cc8ab070369ede72920e5a51523c857002030100010211009a6318982a7231de1894c54aa4909201020900f3058fd8dc484d61020900d7770dbd8b78a2110209009471f14c26428401020813425f060c4b72210208052b93d01747a87c":exp:2 + +Key ASN1 (RSAPrivateKey, correct format, d == 0) +depends_on:24 +4:hex:"30630201000211007c8ab070369ede72920e5a51523c8571020301000102110000000000000000000000000000000000020900f3058fd8dc484d61020900d7770dbd8b78a2110209009471f14c26428401020813425f060c4b72210208052b93d01747a87c":exp:2 + +Key ASN1 (RSAPrivateKey, correct format, d == p == q == 0) +depends_on:24 +4:hex:"3063020100021100cc8ab070369ede72920e5a51523c8571020301000102110000000000000000000000000000000000020900000000000000000002090000000000000000000209009471f14c26428401020813425f060c4b72210208052b93d01747a87c":exp:2 + +Key ASN1 (RSAPrivateKey, correct values, trailing garbage) +depends_on:24 +4:hex:"3064020100021100cc8ab070369ede72920e5a51523c857102030100010211009a6318982a7231de1894c54aa4909201020900f3058fd8dc484d61020900d7770dbd8b78a2110209009471f14c26428401020813425f060c4b72210208052b93d01747a87c00":exp:2 + +Key ASN1 (RSAPrivateKey, correct values, n wrong tag) +depends_on:24 +4:hex:"3063020100FF1100cc8ab070369ede72920e5a51523c857102030100010211009a6318982a7231de1894c54aa4909201020900f3058fd8dc484d61020900d7770dbd8b78a2110209009471f14c26428401020813425f060c4b72210208052b93d01747a87c":exp:2 + +Key ASN1 (RSAPrivateKey, correct values, e wrong tag) +depends_on:24 +4:hex:"3063020100021100cc8ab070369ede72920e5a51523c8571FF030100010211009a6318982a7231de1894c54aa4909201020900f3058fd8dc484d61020900d7770dbd8b78a2110209009471f14c26428401020813425f060c4b72210208052b93d01747a87c":exp:2 + +Key ASN1 (RSAPrivateKey, correct values, d wrong tag) +depends_on:24 +4:hex:"3063020100021100cc8ab070369ede72920e5a51523c85710203010001FF11009a6318982a7231de1894c54aa4909201020900f3058fd8dc484d61020900d7770dbd8b78a2110209009471f14c26428401020813425f060c4b72210208052b93d01747a87c":exp:2 + +Key ASN1 (RSAPrivateKey, correct values, p wrong tag) +depends_on:24 +4:hex:"3063020100021100cc8ab070369ede72920e5a51523c857102030100010211009a6318982a7231de1894c54aa4909201FF0900f3058fd8dc484d61020900d7770dbd8b78a2110209009471f14c26428401020813425f060c4b72210208052b93d01747a87c":exp:2 + +Key ASN1 (RSAPrivateKey, correct values, q wrong tag) +depends_on:24 +4:hex:"3063020100021100cc8ab070369ede72920e5a51523c857102030100010211009a6318982a7231de1894c54aa4909201020900f3058fd8dc484d61FF0900d7770dbd8b78a2110209009471f14c26428401020813425f060c4b72210208052b93d01747a87c":exp:2 + +Key ASN1 (RSAPrivateKey, correct values, dp wrong tag) +depends_on:24 +4:hex:"3063020100021100cc8ab070369ede72920e5a51523c857102030100010211009a6318982a7231de1894c54aa4909201020900f3058fd8dc484d61020900d7770dbd8b78a211FF09009471f14c26428401020813425f060c4b72210208052b93d01747a87c":exp:2 + +Key ASN1 (RSAPrivateKey, correct values, dq wrong tag) +depends_on:24 +4:hex:"3063020100021100cc8ab070369ede72920e5a51523c857102030100010211009a6318982a7231de1894c54aa4909201020900f3058fd8dc484d61020900d7770dbd8b78a2110209009471f14c26428401FF0813425f060c4b72210208052b93d01747a87c":exp:2 + +Key ASN1 (RSAPrivateKey, correct values, qp wrong tag) +depends_on:24 +4:hex:"3063020100021100cc8ab070369ede72920e5a51523c857102030100010211009a6318982a7231de1894c54aa4909201020900f3058fd8dc484d61020900d7770dbd8b78a2110209009471f14c26428401020813425f060c4b7221FF08052b93d01747a87c":exp:2 + +Key ASN1 (ECPrivateKey, empty parameters) +depends_on:13 +4:hex:"30070201010400a000":exp:2 + diff --git a/third_party/mbedtls/test/test_suite_pkwrite.c b/third_party/mbedtls/test/test_suite_pkwrite.c new file mode 100644 index 000000000..463d7ea30 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_pkwrite.c @@ -0,0 +1,430 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_pkwrite.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_pkwrite.function + * Test suite data : suites/test_suite_pkwrite.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_PK_PARSE_C) +#if defined(MBEDTLS_PK_WRITE_C) +#if defined(MBEDTLS_BIGNUM_C) +#if defined(MBEDTLS_FS_IO) +#include "third_party/mbedtls/pk.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/oid.h" +#if defined(MBEDTLS_PEM_WRITE_C) +void test_pk_write_pubkey_check( char * key_file ) +{ + mbedtls_pk_context key; + unsigned char buf[5000]; + unsigned char check_buf[5000]; + int ret; + FILE *f; + size_t ilen, pem_len, buf_index; + + memset( buf, 0, sizeof( buf ) ); + memset( check_buf, 0, sizeof( check_buf ) ); + + mbedtls_pk_init( &key ); + TEST_ASSERT( mbedtls_pk_parse_public_keyfile( &key, key_file ) == 0 ); + + ret = mbedtls_pk_write_pubkey_pem( &key, buf, sizeof( buf )); + TEST_ASSERT( ret == 0 ); + + pem_len = strlen( (char *) buf ); + + // check that the rest of the buffer remains clear + for( buf_index = pem_len; buf_index < sizeof( buf ); ++buf_index ) + { + TEST_ASSERT( buf[buf_index] == 0 ); + } + + f = fopen( key_file, "r" ); + TEST_ASSERT( f != NULL ); + ilen = fread( check_buf, 1, sizeof( check_buf ), f ); + fclose( f ); + + TEST_ASSERT( ilen == pem_len ); + TEST_ASSERT( memcmp( (char *) buf, (char *) check_buf, ilen ) == 0 ); + +exit: + mbedtls_pk_free( &key ); +} + +void test_pk_write_pubkey_check_wrapper( void ** params ) +{ + + test_pk_write_pubkey_check( (char *) params[0] ); +} +#endif /* MBEDTLS_PEM_WRITE_C */ +#if defined(MBEDTLS_PEM_WRITE_C) +void test_pk_write_key_check( char * key_file ) +{ + mbedtls_pk_context key; + unsigned char buf[5000]; + unsigned char check_buf[5000]; + int ret; + FILE *f; + size_t ilen, pem_len, buf_index; + + memset( buf, 0, sizeof( buf ) ); + memset( check_buf, 0, sizeof( check_buf ) ); + + mbedtls_pk_init( &key ); + TEST_ASSERT( mbedtls_pk_parse_keyfile( &key, key_file, NULL ) == 0 ); + + ret = mbedtls_pk_write_key_pem( &key, buf, sizeof( buf )); + TEST_ASSERT( ret == 0 ); + + pem_len = strlen( (char *) buf ); + + // check that the rest of the buffer remains clear + for( buf_index = pem_len; buf_index < sizeof( buf ); ++buf_index ) + { + TEST_ASSERT( buf[buf_index] == 0 ); + } + + f = fopen( key_file, "r" ); + TEST_ASSERT( f != NULL ); + ilen = fread( check_buf, 1, sizeof( check_buf ), f ); + fclose( f ); + + TEST_ASSERT( ilen == strlen( (char *) buf ) ); + TEST_ASSERT( memcmp( (char *) buf, (char *) check_buf, ilen ) == 0 ); + +exit: + mbedtls_pk_free( &key ); +} + +void test_pk_write_key_check_wrapper( void ** params ) +{ + + test_pk_write_key_check( (char *) params[0] ); +} +#endif /* MBEDTLS_PEM_WRITE_C */ +#endif /* MBEDTLS_FS_IO */ +#endif /* MBEDTLS_BIGNUM_C */ +#endif /* MBEDTLS_PK_WRITE_C */ +#endif /* MBEDTLS_PK_PARSE_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_PK_WRITE_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) + +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_PK_WRITE_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) + + case 0: + { +#if defined(MBEDTLS_RSA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_BASE64_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_ECP_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 5: + { +#if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 6: + { +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_PK_WRITE_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_PEM_WRITE_C) + test_pk_write_pubkey_check_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_PK_WRITE_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_PEM_WRITE_C) + test_pk_write_key_check_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_pkwrite.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_pkwrite.datax b/third_party/mbedtls/test/test_suite_pkwrite.datax new file mode 100644 index 000000000..1fc5c8136 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_pkwrite.datax @@ -0,0 +1,48 @@ +Public key write check RSA +depends_on:0:1 +0:char*:"zip:third_party/mbedtls/test/data/server1.pubkey" + +Public key write check RSA 4096 +depends_on:0:1 +0:char*:"zip:third_party/mbedtls/test/data/rsa4096_pub.pem" + +Public key write check EC 192 bits +depends_on:2:1:3 +0:char*:"zip:third_party/mbedtls/test/data/ec_pub.pem" + +Public key write check EC 521 bits +depends_on:2:1:4 +0:char*:"zip:third_party/mbedtls/test/data/ec_521_pub.pem" + +Public key write check EC Brainpool 512 bits +depends_on:2:1:5 +0:char*:"zip:third_party/mbedtls/test/data/ec_bp512_pub.pem" + +Private key write check RSA +depends_on:0:1 +1:char*:"zip:third_party/mbedtls/test/data/server1.key" + +Private key write check RSA 4096 +depends_on:0:1 +1:char*:"zip:third_party/mbedtls/test/data/rsa4096_prv.pem" + +Private key write check EC 192 bits +depends_on:2:1:3 +1:char*:"zip:third_party/mbedtls/test/data/ec_prv.sec1.pem" + +Private key write check EC 256 bits (top bit set) +depends_on:2:1:6 +1:char*:"zip:third_party/mbedtls/test/data/ec_256_long_prv.pem" + +Private key write check EC 521 bits +depends_on:2:1:4 +1:char*:"zip:third_party/mbedtls/test/data/ec_521_prv.pem" + +Private key write check EC 521 bits (top byte is 0) +depends_on:2:1:4 +1:char*:"zip:third_party/mbedtls/test/data/ec_521_short_prv.pem" + +Private key write check EC Brainpool 512 bits +depends_on:2:1:5 +1:char*:"zip:third_party/mbedtls/test/data/ec_bp512_prv.pem" + diff --git a/third_party/mbedtls/test/test_suite_poly1305.c b/third_party/mbedtls/test/test_suite_poly1305.c new file mode 100644 index 000000000..5824a287f --- /dev/null +++ b/third_party/mbedtls/test/test_suite_poly1305.c @@ -0,0 +1,426 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_poly1305.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_poly1305.function + * Test suite data : suites/test_suite_poly1305.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_POLY1305_C) +#include "third_party/mbedtls/poly1305.h" +void test_mbedtls_poly1305( data_t *key, data_t *expected_mac, data_t *src_str ) +{ + unsigned char mac[16]; /* size set by the standard */ + mbedtls_poly1305_context ctx; + + memset( mac, 0x00, sizeof( mac ) ); + + /* + * Test the integrated API + */ + TEST_ASSERT( mbedtls_poly1305_mac( key->x, src_str->x, + src_str->len, mac ) == 0 ); + + ASSERT_COMPARE( mac, expected_mac->len, + expected_mac->x, expected_mac->len ); + + /* + * Test the streaming API + */ + mbedtls_poly1305_init( &ctx ); + + TEST_ASSERT( mbedtls_poly1305_starts( &ctx, key->x ) == 0 ); + + TEST_ASSERT( mbedtls_poly1305_update( &ctx, src_str->x, src_str->len ) == 0 ); + + TEST_ASSERT( mbedtls_poly1305_finish( &ctx, mac ) == 0 ); + + ASSERT_COMPARE( mac, expected_mac->len, + expected_mac->x, expected_mac->len ); + + /* + * Test the streaming API again, piecewise + */ + + /* Don't free/init the context, in order to test that starts() does the + * right thing. */ + if( src_str->len >= 1 ) + { + TEST_ASSERT( mbedtls_poly1305_starts( &ctx, key->x ) == 0 ); + + TEST_ASSERT( mbedtls_poly1305_update( &ctx, src_str->x, 1 ) == 0 ); + TEST_ASSERT( mbedtls_poly1305_update( &ctx, src_str->x + 1, src_str->len - 1 ) == 0 ); + + TEST_ASSERT( mbedtls_poly1305_finish( &ctx, mac ) == 0 ); + + ASSERT_COMPARE( mac, expected_mac->len, + expected_mac->x, expected_mac->len ); + } + + /* + * Again with more pieces + */ + if( src_str->len >= 2 ) + { + TEST_ASSERT( mbedtls_poly1305_starts( &ctx, key->x ) == 0 ); + + TEST_ASSERT( mbedtls_poly1305_update( &ctx, src_str->x, 1 ) == 0 ); + TEST_ASSERT( mbedtls_poly1305_update( &ctx, src_str->x + 1, 1 ) == 0 ); + TEST_ASSERT( mbedtls_poly1305_update( &ctx, src_str->x + 2, src_str->len - 2 ) == 0 ); + + TEST_ASSERT( mbedtls_poly1305_finish( &ctx, mac ) == 0 ); + + ASSERT_COMPARE( mac, expected_mac->len, + expected_mac->x, expected_mac->len ); + } + + mbedtls_poly1305_free( &ctx ); +exit: + ; +} + +void test_mbedtls_poly1305_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + + test_mbedtls_poly1305( &data0, &data2, &data4 ); +} +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_poly1305_bad_params() +{ + unsigned char src[1]; + unsigned char key[32]; + unsigned char mac[16]; + size_t src_len = sizeof( src ); + mbedtls_poly1305_context ctx; + + TEST_INVALID_PARAM( mbedtls_poly1305_init( NULL ) ); + TEST_VALID_PARAM( mbedtls_poly1305_free( NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_poly1305_starts( NULL, key ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_poly1305_starts( &ctx, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_poly1305_update( NULL, src, 0 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_poly1305_update( &ctx, NULL, src_len ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_poly1305_finish( NULL, mac ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_poly1305_finish( &ctx, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_poly1305_mac( NULL, src, 0, mac ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_poly1305_mac( key, NULL, src_len, mac ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA, + mbedtls_poly1305_mac( key, src, 0, NULL ) ); + +exit: + return; +} + +void test_poly1305_bad_params_wrapper( void ** params ) +{ + (void)params; + + test_poly1305_bad_params( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#if defined(MBEDTLS_SELF_TEST) +void test_poly1305_selftest() +{ + TEST_ASSERT( mbedtls_poly1305_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_poly1305_selftest_wrapper( void ** params ) +{ + (void)params; + + test_poly1305_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_POLY1305_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_POLY1305_C) + +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_POLY1305_C) + + case 0: + { +#if defined(MBEDTLS_SELF_TEST) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_POLY1305_C) + test_mbedtls_poly1305_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_POLY1305_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_poly1305_bad_params_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_POLY1305_C) && defined(MBEDTLS_SELF_TEST) + test_poly1305_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_poly1305.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_poly1305.datax b/third_party/mbedtls/test/test_suite_poly1305.datax new file mode 100644 index 000000000..6286e1db8 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_poly1305.datax @@ -0,0 +1,43 @@ +Poly1305 RFC 7539 Example And Test Vector +0:hex:"85d6be7857556d337f4452fe42d506a80103808afb0db2fd4abff6af4149f51b":hex:"a8061dc1305136c6c22b8baf0c0127a9":hex:"43727970746f6772617068696320466f72756d2052657365617263682047726f7570" + +Poly1305 RFC 7539 Test Vector #1 +0:hex:"0000000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + +Poly1305 RFC 7539 Test Vector #2 +0:hex:"0000000000000000000000000000000036e5f6b5c5e06070f0efca96227a863e":hex:"36e5f6b5c5e06070f0efca96227a863e":hex:"416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f" + +Poly1305 RFC 7539 Test Vector #3 +0:hex:"36e5f6b5c5e06070f0efca96227a863e00000000000000000000000000000000":hex:"f3477e7cd95417af89a6b8794c310cf0":hex:"416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f" + +Poly1305 RFC 7539 Test Vector #4 +0:hex:"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0":hex:"4541669a7eaaee61e708dc7cbcc5eb62":hex:"2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e" + +Poly1305 RFC 7539 Test Vector #5 +0:hex:"0200000000000000000000000000000000000000000000000000000000000000":hex:"03000000000000000000000000000000":hex:"ffffffffffffffffffffffffffffffff" + +Poly1305 RFC 7539 Test Vector #6 +0:hex:"02000000000000000000000000000000ffffffffffffffffffffffffffffffff":hex:"03000000000000000000000000000000":hex:"02000000000000000000000000000000" + +Poly1305 RFC 7539 Test Vector #7 +0:hex:"0100000000000000000000000000000000000000000000000000000000000000":hex:"05000000000000000000000000000000":hex:"fffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffff11000000000000000000000000000000" + +Poly1305 RFC 7539 Test Vector #8 +0:hex:"0100000000000000000000000000000000000000000000000000000000000000":hex:"00000000000000000000000000000000":hex:"fffffffffffffffffffffffffffffffffbfefefefefefefefefefefefefefefe01010101010101010101010101010101" + +Poly1305 RFC 7539 Test Vector #9 +0:hex:"0200000000000000000000000000000000000000000000000000000000000000":hex:"faffffffffffffffffffffffffffffff":hex:"fdffffffffffffffffffffffffffffff" + +Poly1305 RFC 7539 Test Vector #10 +0:hex:"0100000000000000040000000000000000000000000000000000000000000000":hex:"14000000000000005500000000000000":hex:"e33594d7505e43b900000000000000003394d7505e4379cd01000000000000000000000000000000000000000000000001000000000000000000000000000000" + +Poly1305 RFC 7539 Test Vector #11 +0:hex:"0100000000000000040000000000000000000000000000000000000000000000":hex:"13000000000000000000000000000000":hex:"e33594d7505e43b900000000000000003394d7505e4379cd010000000000000000000000000000000000000000000000" + +Poly1305 Parameter validation +1 + +Poly1305 Selftest +depends_on:0 +2 + diff --git a/third_party/mbedtls/test/test_suite_random.c b/third_party/mbedtls/test/test_suite_random.c new file mode 100644 index 000000000..08c6f071e --- /dev/null +++ b/third_party/mbedtls/test/test_suite_random.c @@ -0,0 +1,661 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_random.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_random.function + * Test suite data : suites/test_suite_random.data + * + */ + + +#define TEST_SUITE_ACTIVE + + +/* Test random generation as a whole. */ + +#include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/ctr_drbg.h" +#include "third_party/mbedtls/ecdsa.h" +#include "third_party/mbedtls/entropy.h" +#include "third_party/mbedtls/hmac_drbg.h" + +/* How many bytes to generate in each test case for repeated generation. + * This must be high enough that the probability of generating the same + * output twice is infinitesimal, but low enough that random generators + * are willing to deliver that much. */ +#define OUTPUT_SIZE 32 + +#if defined(MBEDTLS_ENTROPY_C) +#if !defined(MBEDTLS_TEST_NULL_ENTROPY) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_random_twice_with_ctr_drbg( ) +{ + mbedtls_entropy_context entropy; + mbedtls_ctr_drbg_context drbg; + unsigned char output1[OUTPUT_SIZE]; + unsigned char output2[OUTPUT_SIZE]; + + /* First round */ + mbedtls_entropy_init( &entropy ); + mbedtls_ctr_drbg_init( &drbg ); + TEST_EQUAL( 0, mbedtls_ctr_drbg_seed( &drbg, + mbedtls_entropy_func, &entropy, + NULL, 0 ) ); + TEST_EQUAL( 0, mbedtls_ctr_drbg_random( &drbg, + output1, sizeof( output1 ) ) ); + mbedtls_ctr_drbg_free( &drbg ); + mbedtls_entropy_free( &entropy ); + + /* Second round */ + mbedtls_entropy_init( &entropy ); + mbedtls_ctr_drbg_init( &drbg ); + TEST_EQUAL( 0, mbedtls_ctr_drbg_seed( &drbg, + mbedtls_entropy_func, &entropy, + NULL, 0 ) ); + TEST_EQUAL( 0, mbedtls_ctr_drbg_random( &drbg, + output2, sizeof( output2 ) ) ); + mbedtls_ctr_drbg_free( &drbg ); + mbedtls_entropy_free( &entropy ); + + /* The two rounds must generate different random data. */ + TEST_ASSERT( memcmp( output1, output2, OUTPUT_SIZE ) != 0 ); + +exit: + mbedtls_ctr_drbg_free( &drbg ); + mbedtls_entropy_free( &entropy ); +} + +void test_random_twice_with_ctr_drbg_wrapper( void ** params ) +{ + (void)params; + + test_random_twice_with_ctr_drbg( ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* !MBEDTLS_TEST_NULL_ENTROPY */ +#endif /* MBEDTLS_ENTROPY_C */ +#if defined(MBEDTLS_ENTROPY_C) +#if !defined(MBEDTLS_TEST_NULL_ENTROPY) +#if defined(MBEDTLS_HMAC_DRBG_C) +void test_random_twice_with_hmac_drbg( int md_type ) +{ + mbedtls_entropy_context entropy; + mbedtls_hmac_drbg_context drbg; + unsigned char output1[OUTPUT_SIZE]; + unsigned char output2[OUTPUT_SIZE]; + const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type( md_type ); + + /* First round */ + mbedtls_entropy_init( &entropy ); + mbedtls_hmac_drbg_init( &drbg ); + TEST_EQUAL( 0, mbedtls_hmac_drbg_seed( &drbg, md_info, + mbedtls_entropy_func, &entropy, + NULL, 0 ) ); + TEST_EQUAL( 0, mbedtls_hmac_drbg_random( &drbg, + output1, sizeof( output1 ) ) ); + mbedtls_hmac_drbg_free( &drbg ); + mbedtls_entropy_free( &entropy ); + + /* Second round */ + mbedtls_entropy_init( &entropy ); + mbedtls_hmac_drbg_init( &drbg ); + TEST_EQUAL( 0, mbedtls_hmac_drbg_seed( &drbg, md_info, + mbedtls_entropy_func, &entropy, + NULL, 0 ) ); + TEST_EQUAL( 0, mbedtls_hmac_drbg_random( &drbg, + output2, sizeof( output2 ) ) ); + mbedtls_hmac_drbg_free( &drbg ); + mbedtls_entropy_free( &entropy ); + + /* The two rounds must generate different random data. */ + TEST_ASSERT( memcmp( output1, output2, OUTPUT_SIZE ) != 0 ); + +exit: + mbedtls_hmac_drbg_free( &drbg ); + mbedtls_entropy_free( &entropy ); +} + +void test_random_twice_with_hmac_drbg_wrapper( void ** params ) +{ + + test_random_twice_with_hmac_drbg( *( (int *) params[0] ) ); +} +#endif /* MBEDTLS_HMAC_DRBG_C */ +#endif /* !MBEDTLS_TEST_NULL_ENTROPY */ +#endif /* MBEDTLS_ENTROPY_C */ +#if defined(MBEDTLS_PSA_CRYPTO_C) +#if !defined(MBEDTLS_TEST_NULL_ENTROPY) +#if !defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) +void test_random_twice_with_psa_from_classic( ) +{ + unsigned char output1[OUTPUT_SIZE]; + unsigned char output2[OUTPUT_SIZE]; + + /* First round */ + PSA_ASSERT( psa_crypto_init( ) ); + TEST_EQUAL( 0, mbedtls_psa_get_random( MBEDTLS_PSA_RANDOM_STATE, + output1, sizeof( output1 ) ) ); + PSA_DONE( ); + + /* Second round */ + PSA_ASSERT( psa_crypto_init( ) ); + TEST_EQUAL( 0, mbedtls_psa_get_random( MBEDTLS_PSA_RANDOM_STATE, + output2, sizeof( output2 ) ) ); + PSA_DONE( ); + + /* The two rounds must generate different random data. */ + TEST_ASSERT( memcmp( output1, output2, OUTPUT_SIZE ) != 0 ); + +exit: + PSA_DONE( ); +} + +void test_random_twice_with_psa_from_classic_wrapper( void ** params ) +{ + (void)params; + + test_random_twice_with_psa_from_classic( ); +} +#endif /* !MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ +#endif /* !MBEDTLS_TEST_NULL_ENTROPY */ +#endif /* MBEDTLS_PSA_CRYPTO_C */ +#if defined(MBEDTLS_PSA_CRYPTO_C) +#if !defined(MBEDTLS_TEST_NULL_ENTROPY) +#if !defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) +void test_random_twice_with_psa_from_psa( ) +{ + unsigned char output1[OUTPUT_SIZE]; + unsigned char output2[OUTPUT_SIZE]; + + /* First round */ + PSA_ASSERT( psa_crypto_init( ) ); + PSA_ASSERT( psa_generate_random( output1, sizeof( output1 ) ) ); + PSA_DONE( ); + + /* Second round */ + PSA_ASSERT( psa_crypto_init( ) ); + PSA_ASSERT( psa_generate_random( output2, sizeof( output2 ) ) ); + PSA_DONE( ); + + /* The two rounds must generate different random data. */ + TEST_ASSERT( memcmp( output1, output2, OUTPUT_SIZE ) != 0 ); + +exit: + PSA_DONE( ); +} + +void test_random_twice_with_psa_from_psa_wrapper( void ** params ) +{ + (void)params; + + test_random_twice_with_psa_from_psa( ); +} +#endif /* !MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ +#endif /* !MBEDTLS_TEST_NULL_ENTROPY */ +#endif /* MBEDTLS_PSA_CRYPTO_C */ +#if defined(MBEDTLS_PSA_CRYPTO_C) +void test_mbedtls_psa_get_random_no_init( ) +{ + unsigned char output[1]; + + TEST_ASSERT( mbedtls_psa_get_random( MBEDTLS_PSA_RANDOM_STATE, + output, sizeof( output ) ) != 0 ); +exit: + ; +} + +void test_mbedtls_psa_get_random_no_init_wrapper( void ** params ) +{ + (void)params; + + test_mbedtls_psa_get_random_no_init( ); +} +#endif /* MBEDTLS_PSA_CRYPTO_C */ +#if defined(MBEDTLS_PSA_CRYPTO_C) +void test_mbedtls_psa_get_random_length( int n ) +{ + unsigned char *output = NULL; + + PSA_ASSERT( psa_crypto_init( ) ); + ASSERT_ALLOC( output, n ); + + TEST_EQUAL( 0, mbedtls_psa_get_random( MBEDTLS_PSA_RANDOM_STATE, + output, n ) ); +exit: + mbedtls_free( output ); + PSA_DONE( ); +} + +void test_mbedtls_psa_get_random_length_wrapper( void ** params ) +{ + + test_mbedtls_psa_get_random_length( *( (int *) params[0] ) ); +} +#endif /* MBEDTLS_PSA_CRYPTO_C */ +#if defined(MBEDTLS_PSA_CRYPTO_C) +#if defined(MBEDTLS_ECDSA_C) +void test_mbedtls_psa_get_random_ecdsa_sign( int curve ) +{ + mbedtls_ecp_group grp; + mbedtls_mpi d, r, s; + unsigned char buf[] = "This is not a hash."; + + mbedtls_ecp_group_init( &grp ); + mbedtls_mpi_init( &d ); + mbedtls_mpi_init( &r ); + mbedtls_mpi_init( &s ); + + TEST_EQUAL( 0, mbedtls_mpi_lset( &d, 123456789 ) ); + TEST_EQUAL( 0, mbedtls_ecp_group_load( &grp, curve ) ); + PSA_ASSERT( psa_crypto_init( ) ); + TEST_EQUAL( 0, mbedtls_ecdsa_sign( &grp, &r, &s, &d, + buf, sizeof( buf ), + mbedtls_psa_get_random, + MBEDTLS_PSA_RANDOM_STATE ) ); +exit: + mbedtls_mpi_free( &d ); + mbedtls_mpi_free( &r ); + mbedtls_mpi_free( &s ); + mbedtls_ecp_group_free( &grp ); + PSA_DONE( ); +} + +void test_mbedtls_psa_get_random_ecdsa_sign_wrapper( void ** params ) +{ + + test_mbedtls_psa_get_random_ecdsa_sign( *( (int *) params[0] ) ); +} +#endif /* MBEDTLS_ECDSA_C */ +#endif /* MBEDTLS_PSA_CRYPTO_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + + case 0: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 1: + { + *out_value = MBEDTLS_MD_SHA256; + } + break; + case 2: + { + *out_value = MBEDTLS_MD_SHA512; + } + break; + case 3: + { + *out_value = MBEDTLS_CTR_DRBG_MAX_REQUEST; + } + break; + case 4: + { + *out_value = MBEDTLS_HMAC_DRBG_MAX_REQUEST; + } + break; + case 5: + { + *out_value = MBEDTLS_ECP_DP_SECP256R1; + } + break; + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + + case 0: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if !defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 5: + { +#if defined(MBEDTLS_CTR_DRBG_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 6: + { +#if !defined(MBEDTLS_CTR_DRBG_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 7: + { +#if defined(MBEDTLS_HMAC_DRBG_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 8: + { +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_ENTROPY_C) && !defined(MBEDTLS_TEST_NULL_ENTROPY) && defined(MBEDTLS_CTR_DRBG_C) + test_random_twice_with_ctr_drbg_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_ENTROPY_C) && !defined(MBEDTLS_TEST_NULL_ENTROPY) && defined(MBEDTLS_HMAC_DRBG_C) + test_random_twice_with_hmac_drbg_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_PSA_CRYPTO_C) && !defined(MBEDTLS_TEST_NULL_ENTROPY) && !defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + test_random_twice_with_psa_from_classic_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_PSA_CRYPTO_C) && !defined(MBEDTLS_TEST_NULL_ENTROPY) && !defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + test_random_twice_with_psa_from_psa_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_PSA_CRYPTO_C) + test_mbedtls_psa_get_random_no_init_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_PSA_CRYPTO_C) + test_mbedtls_psa_get_random_length_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_PSA_CRYPTO_C) && defined(MBEDTLS_ECDSA_C) + test_mbedtls_psa_get_random_ecdsa_sign_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_random.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_random.datax b/third_party/mbedtls/test/test_suite_random.datax new file mode 100644 index 000000000..62483af5b --- /dev/null +++ b/third_party/mbedtls/test/test_suite_random.datax @@ -0,0 +1,46 @@ +Generate random twice with CTR_DRBG +0 + +Generate random twice with HMAC_DRBG(SHA-1) +depends_on:0 +1:exp:0 + +Generate random twice with HMAC_DRBG(SHA-256) +depends_on:1 +1:exp:1 + +Generate random twice with HMAC_DRBG(SHA-512) +depends_on:2 +1:exp:2 + +Generate random twice with PSA classic wrapper +2 + +Generate random twice with PSA API +3 + +PSA classic wrapper: 0 bytes +5:int:0 + +PSA classic wrapper: 1 byte +5:int:1 + +PSA classic wrapper: 256 bytes +5:int:256 + +PSA classic wrapper: external RNG large +depends_on:3 +5:int:1024 + +PSA classic wrapper: CTR_DRBG max +depends_on:4:5 +5:exp:3 + +PSA classic wrapper: HMAC_DRBG max +depends_on:4:6:7 +5:exp:4 + +PSA classic wrapper: ECDSA signature (SECP256R1) +depends_on:8 +6:exp:5 + diff --git a/third_party/mbedtls/test/test_suite_rsa.c b/third_party/mbedtls/test/test_suite_rsa.c new file mode 100644 index 000000000..a2ef20990 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_rsa.c @@ -0,0 +1,2607 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_rsa.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_rsa.function + * Test suite data : suites/test_suite_rsa.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_BIGNUM_C) +#if defined(MBEDTLS_GENPRIME) +#include "third_party/mbedtls/rsa.h" +#include "third_party/mbedtls/rsa_internal.h" +#include "third_party/mbedtls/md5.h" +#include "third_party/mbedtls/sha1.h" +#include "third_party/mbedtls/sha256.h" +#include "third_party/mbedtls/sha512.h" +#include "third_party/mbedtls/entropy.h" +#include "third_party/mbedtls/ctr_drbg.h" + +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_rsa_invalid_param( ) +{ + mbedtls_rsa_context ctx; + const int valid_padding = MBEDTLS_RSA_PKCS_V21; + const int invalid_padding = 42; + const int valid_mode = MBEDTLS_RSA_PRIVATE; + const int invalid_mode = 42; + unsigned char buf[42] = { 0 }; + size_t olen; + + TEST_INVALID_PARAM( mbedtls_rsa_init( NULL, valid_padding, 0 ) ); + TEST_INVALID_PARAM( mbedtls_rsa_init( &ctx, invalid_padding, 0 ) ); + TEST_VALID_PARAM( mbedtls_rsa_free( NULL ) ); + + /* No more variants because only the first argument must be non-NULL. */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_import( NULL, NULL, NULL, + NULL, NULL, NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_import_raw( NULL, + NULL, 0, + NULL, 0, + NULL, 0, + NULL, 0, + NULL, 0 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_complete( NULL ) ); + + /* No more variants because only the first argument must be non-NULL. */ + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_export( NULL, NULL, NULL, + NULL, NULL, NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_export_raw( NULL, + NULL, 0, + NULL, 0, + NULL, 0, + NULL, 0, + NULL, 0 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_export_crt( NULL, NULL, NULL, NULL ) ); + + TEST_INVALID_PARAM( mbedtls_rsa_set_padding( NULL, + valid_padding, 0 ) ); + TEST_INVALID_PARAM( mbedtls_rsa_set_padding( &ctx, + invalid_padding, 0 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_gen_key( NULL, + mbedtls_test_rnd_std_rand, + NULL, 0, 0 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_gen_key( &ctx, NULL, + NULL, 0, 0 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_check_pubkey( NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_check_privkey( NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_check_pub_priv( NULL, &ctx ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_check_pub_priv( &ctx, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_public( NULL, buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_public( &ctx, NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_public( &ctx, buf, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_private( NULL, NULL, NULL, + buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_private( &ctx, NULL, NULL, + NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_private( &ctx, NULL, NULL, + buf, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_encrypt( NULL, NULL, NULL, + valid_mode, + sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_encrypt( &ctx, NULL, NULL, + invalid_mode, + sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_encrypt( &ctx, NULL, NULL, + valid_mode, + sizeof( buf ), NULL, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_encrypt( &ctx, NULL, NULL, + valid_mode, + sizeof( buf ), buf, + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_pkcs1_v15_encrypt( NULL, NULL, + NULL, + valid_mode, + sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_pkcs1_v15_encrypt( &ctx, NULL, + NULL, + invalid_mode, + sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_pkcs1_v15_encrypt( &ctx, NULL, + NULL, + valid_mode, + sizeof( buf ), NULL, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_pkcs1_v15_encrypt( &ctx, NULL, + NULL, + valid_mode, + sizeof( buf ), buf, + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_oaep_encrypt( NULL, NULL, NULL, + valid_mode, + buf, sizeof( buf ), + sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_oaep_encrypt( &ctx, NULL, NULL, + invalid_mode, + buf, sizeof( buf ), + sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_oaep_encrypt( &ctx, NULL, NULL, + valid_mode, + NULL, sizeof( buf ), + sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_oaep_encrypt( &ctx, NULL, NULL, + valid_mode, + buf, sizeof( buf ), + sizeof( buf ), NULL, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_oaep_encrypt( &ctx, NULL, NULL, + valid_mode, + buf, sizeof( buf ), + sizeof( buf ), buf, + NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_decrypt( NULL, NULL, NULL, + valid_mode, &olen, + buf, buf, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_decrypt( &ctx, NULL, NULL, + invalid_mode, &olen, + buf, buf, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_decrypt( &ctx, NULL, NULL, + valid_mode, NULL, + buf, buf, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_decrypt( &ctx, NULL, NULL, + valid_mode, &olen, + NULL, buf, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_decrypt( &ctx, NULL, NULL, + valid_mode, &olen, + buf, NULL, 42 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_pkcs1_v15_decrypt( NULL, NULL, + NULL, + valid_mode, &olen, + buf, buf, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_pkcs1_v15_decrypt( &ctx, NULL, + NULL, + invalid_mode, &olen, + buf, buf, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_pkcs1_v15_decrypt( &ctx, NULL, + NULL, + valid_mode, NULL, + buf, buf, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_pkcs1_v15_decrypt( &ctx, NULL, + NULL, + valid_mode, &olen, + NULL, buf, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_pkcs1_v15_decrypt( &ctx, NULL, + NULL, + valid_mode, &olen, + buf, NULL, 42 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_oaep_decrypt( NULL, NULL, NULL, + valid_mode, + buf, sizeof( buf ), + &olen, + buf, buf, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_oaep_decrypt( &ctx, NULL, NULL, + invalid_mode, + buf, sizeof( buf ), + &olen, + buf, buf, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_oaep_decrypt( &ctx, NULL, NULL, + valid_mode, + NULL, sizeof( buf ), + NULL, + buf, buf, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_oaep_decrypt( &ctx, NULL, NULL, + valid_mode, + buf, sizeof( buf ), + &olen, + NULL, buf, 42 ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsaes_oaep_decrypt( &ctx, NULL, NULL, + valid_mode, + buf, sizeof( buf ), + &olen, + buf, NULL, 42 ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_sign( NULL, NULL, NULL, + valid_mode, + 0, sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_sign( &ctx, NULL, NULL, + invalid_mode, + 0, sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_sign( &ctx, NULL, NULL, + valid_mode, + 0, sizeof( buf ), NULL, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_sign( &ctx, NULL, NULL, + valid_mode, + 0, sizeof( buf ), buf, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_sign( &ctx, NULL, NULL, + valid_mode, + MBEDTLS_MD_SHA1, + 0, NULL, + buf ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pkcs1_v15_sign( NULL, NULL, NULL, + valid_mode, + 0, sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pkcs1_v15_sign( &ctx, NULL, NULL, + invalid_mode, + 0, sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pkcs1_v15_sign( &ctx, NULL, NULL, + valid_mode, + 0, sizeof( buf ), NULL, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pkcs1_v15_sign( &ctx, NULL, NULL, + valid_mode, + 0, sizeof( buf ), buf, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pkcs1_v15_sign( &ctx, NULL, NULL, + valid_mode, + MBEDTLS_MD_SHA1, + 0, NULL, + buf ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pss_sign( NULL, NULL, NULL, + valid_mode, + 0, sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pss_sign( &ctx, NULL, NULL, + invalid_mode, + 0, sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pss_sign( &ctx, NULL, NULL, + valid_mode, + 0, sizeof( buf ), NULL, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pss_sign( &ctx, NULL, NULL, + valid_mode, + 0, sizeof( buf ), buf, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pss_sign( &ctx, NULL, NULL, + valid_mode, + MBEDTLS_MD_SHA1, + 0, NULL, + buf ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_verify( NULL, NULL, NULL, + valid_mode, + 0, sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_verify( &ctx, NULL, NULL, + invalid_mode, + 0, sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_verify( &ctx, NULL, NULL, + valid_mode, + 0, sizeof( buf ), NULL, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_verify( &ctx, NULL, NULL, + valid_mode, + 0, sizeof( buf ), buf, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_pkcs1_verify( &ctx, NULL, NULL, + valid_mode, + MBEDTLS_MD_SHA1, 0, NULL, + buf ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pkcs1_v15_verify( NULL, NULL, + NULL, + valid_mode, + 0, sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pkcs1_v15_verify( &ctx, NULL, + NULL, + invalid_mode, + 0, sizeof( buf ), buf, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pkcs1_v15_verify( &ctx, NULL, + NULL, + valid_mode, + 0, sizeof( buf ), + NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pkcs1_v15_verify( &ctx, NULL, + NULL, + valid_mode, + 0, sizeof( buf ), buf, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pkcs1_v15_verify( &ctx, NULL, + NULL, + valid_mode, + MBEDTLS_MD_SHA1, + 0, NULL, + buf ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pss_verify( NULL, NULL, NULL, + valid_mode, + 0, sizeof( buf ), + buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pss_verify( &ctx, NULL, NULL, + invalid_mode, + 0, sizeof( buf ), + buf, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pss_verify( &ctx, NULL, NULL, + valid_mode, + 0, sizeof( buf ), + NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pss_verify( &ctx, NULL, NULL, + valid_mode, + 0, sizeof( buf ), + buf, NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pss_verify( &ctx, NULL, NULL, + valid_mode, + MBEDTLS_MD_SHA1, + 0, NULL, + buf ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pss_verify_ext( NULL, NULL, NULL, + valid_mode, + 0, sizeof( buf ), + buf, + 0, 0, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pss_verify_ext( &ctx, NULL, NULL, + invalid_mode, + 0, sizeof( buf ), + buf, + 0, 0, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pss_verify_ext( &ctx, NULL, NULL, + valid_mode, + 0, sizeof( buf ), + NULL, 0, 0, + buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pss_verify_ext( &ctx, NULL, NULL, + valid_mode, + 0, sizeof( buf ), + buf, 0, 0, + NULL ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_rsassa_pss_verify_ext( &ctx, NULL, NULL, + valid_mode, + MBEDTLS_MD_SHA1, + 0, NULL, + 0, 0, + buf ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_copy( NULL, &ctx ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_RSA_BAD_INPUT_DATA, + mbedtls_rsa_copy( &ctx, NULL ) ); + +exit: + return; +} + +void test_rsa_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_rsa_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +void test_rsa_init_free( int reinit ) +{ + mbedtls_rsa_context ctx; + + /* Double free is not explicitly documented to work, but we rely on it + * even inside the library so that you can call mbedtls_rsa_free() + * unconditionally on an error path without checking whether it has + * already been called in the success path. */ + + mbedtls_rsa_init( &ctx, 0, 0 ); + mbedtls_rsa_free( &ctx ); + + if( reinit ) + mbedtls_rsa_init( &ctx, 0, 0 ); + mbedtls_rsa_free( &ctx ); + + /* This test case always succeeds, functionally speaking. A plausible + * bug might trigger an invalid pointer dereference or a memory leak. */ + goto exit; +exit: + ; +} + +void test_rsa_init_free_wrapper( void ** params ) +{ + + test_rsa_init_free( *( (int *) params[0] ) ); +} +void test_mbedtls_rsa_pkcs1_sign( data_t * message_str, int padding_mode, + int digest, int mod, int radix_P, char * input_P, + int radix_Q, char * input_Q, int radix_N, + char * input_N, int radix_E, char * input_E, + data_t * result_str, int result ) +{ + unsigned char hash_result[MBEDTLS_MD_MAX_SIZE]; + unsigned char output[256]; + mbedtls_rsa_context ctx; + mbedtls_mpi N, P, Q, E; + mbedtls_test_rnd_pseudo_info rnd_info; + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); + mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E ); + mbedtls_rsa_init( &ctx, padding_mode, 0 ); + + memset( hash_result, 0x00, sizeof( hash_result ) ); + memset( output, 0x00, sizeof( output ) ); + memset( &rnd_info, 0, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( mod / 8 ) ); + TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 ); + TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 ); + + + if( mbedtls_md_info_from_type( digest ) != NULL ) + TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ), message_str->x, message_str->len, hash_result ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_pkcs1_sign( &ctx, &mbedtls_test_rnd_pseudo_rand, + &rnd_info, MBEDTLS_RSA_PRIVATE, digest, + 0, hash_result, output ) == result ); + if( result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + ctx.len, result_str->len ) == 0 ); + } + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P ); + mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_mbedtls_rsa_pkcs1_sign_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data13 = {(uint8_t *) params[13], *( (uint32_t *) params[14] )}; + + test_mbedtls_rsa_pkcs1_sign( &data0, *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), (char *) params[6], *( (int *) params[7] ), (char *) params[8], *( (int *) params[9] ), (char *) params[10], *( (int *) params[11] ), (char *) params[12], &data13, *( (int *) params[15] ) ); +} +void test_mbedtls_rsa_pkcs1_verify( data_t * message_str, int padding_mode, + int digest, int mod, int radix_N, + char * input_N, int radix_E, char * input_E, + data_t * result_str, int result ) +{ + unsigned char hash_result[MBEDTLS_MD_MAX_SIZE]; + mbedtls_rsa_context ctx; + + mbedtls_mpi N, E; + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E ); + mbedtls_rsa_init( &ctx, padding_mode, 0 ); + memset( hash_result, 0x00, sizeof( hash_result ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( mod / 8 ) ); + TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 ); + + + if( mbedtls_md_info_from_type( digest ) != NULL ) + TEST_ASSERT( mbedtls_md( mbedtls_md_info_from_type( digest ), message_str->x, message_str->len, hash_result ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_pkcs1_verify( &ctx, NULL, NULL, MBEDTLS_RSA_PUBLIC, digest, 0, hash_result, result_str->x ) == result ); + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_mbedtls_rsa_pkcs1_verify_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + + test_mbedtls_rsa_pkcs1_verify( &data0, *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), (char *) params[6], *( (int *) params[7] ), (char *) params[8], &data9, *( (int *) params[11] ) ); +} +void test_rsa_pkcs1_sign_raw( data_t * hash_result, + int padding_mode, int mod, int radix_P, + char * input_P, int radix_Q, char * input_Q, + int radix_N, char * input_N, int radix_E, + char * input_E, data_t * result_str ) +{ + unsigned char output[256]; + mbedtls_rsa_context ctx; + mbedtls_mpi N, P, Q, E; + mbedtls_test_rnd_pseudo_info rnd_info; + + mbedtls_rsa_init( &ctx, padding_mode, 0 ); + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); + mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E ); + + memset( output, 0x00, sizeof( output ) ); + memset( &rnd_info, 0, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( mod / 8 ) ); + TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 ); + TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 ); + + + TEST_ASSERT( mbedtls_rsa_pkcs1_sign( &ctx, &mbedtls_test_rnd_pseudo_rand, + &rnd_info, MBEDTLS_RSA_PRIVATE, + MBEDTLS_MD_NONE, hash_result->len, + hash_result->x, output ) == 0 ); + + + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + ctx.len, result_str->len ) == 0 ); + +#if defined(MBEDTLS_PKCS1_V15) + /* For PKCS#1 v1.5, there is an alternative way to generate signatures */ + if( padding_mode == MBEDTLS_RSA_PKCS_V15 ) + { + int res; + memset( output, 0x00, sizeof( output) ); + + res = mbedtls_rsa_rsaes_pkcs1_v15_encrypt( &ctx, + &mbedtls_test_rnd_pseudo_rand, &rnd_info, + MBEDTLS_RSA_PRIVATE, hash_result->len, + hash_result->x, output ); + +#if !defined(MBEDTLS_RSA_ALT) + TEST_ASSERT( res == 0 ); +#else + TEST_ASSERT( ( res == 0 ) || + ( res == MBEDTLS_ERR_RSA_UNSUPPORTED_OPERATION ) ); +#endif + + if( res == 0 ) + { + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + ctx.len, + result_str->len ) == 0 ); + } + } +#endif /* MBEDTLS_PKCS1_V15 */ + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P ); + mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E ); + + mbedtls_rsa_free( &ctx ); +} + +void test_rsa_pkcs1_sign_raw_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data12 = {(uint8_t *) params[12], *( (uint32_t *) params[13] )}; + + test_rsa_pkcs1_sign_raw( &data0, *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ), (char *) params[7], *( (int *) params[8] ), (char *) params[9], *( (int *) params[10] ), (char *) params[11], &data12 ); +} +void test_rsa_pkcs1_verify_raw( data_t * hash_result, + int padding_mode, int mod, int radix_N, + char * input_N, int radix_E, char * input_E, + data_t * result_str, int correct ) +{ + unsigned char output[256]; + mbedtls_rsa_context ctx; + + mbedtls_mpi N, E; + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E ); + + mbedtls_rsa_init( &ctx, padding_mode, 0 ); + memset( output, 0x00, sizeof( output ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( mod / 8 ) ); + TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 ); + + + TEST_ASSERT( mbedtls_rsa_pkcs1_verify( &ctx, NULL, NULL, MBEDTLS_RSA_PUBLIC, MBEDTLS_MD_NONE, hash_result->len, hash_result->x, result_str->x ) == correct ); + +#if defined(MBEDTLS_PKCS1_V15) + /* For PKCS#1 v1.5, there is an alternative way to verify signatures */ + if( padding_mode == MBEDTLS_RSA_PKCS_V15 ) + { + int res; + int ok; + size_t olen; + + res = mbedtls_rsa_rsaes_pkcs1_v15_decrypt( &ctx, + NULL, NULL, MBEDTLS_RSA_PUBLIC, + &olen, result_str->x, output, sizeof( output ) ); + +#if !defined(MBEDTLS_RSA_ALT) + TEST_ASSERT( res == 0 ); +#else + TEST_ASSERT( ( res == 0 ) || + ( res == MBEDTLS_ERR_RSA_UNSUPPORTED_OPERATION ) ); +#endif + + if( res == 0 ) + { + ok = olen == hash_result->len && memcmp( output, hash_result->x, olen ) == 0; + if( correct == 0 ) + TEST_ASSERT( ok == 1 ); + else + TEST_ASSERT( ok == 0 ); + } + } +#endif /* MBEDTLS_PKCS1_V15 */ + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_rsa_pkcs1_verify_raw_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_rsa_pkcs1_verify_raw( &data0, *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ), (char *) params[7], &data8, *( (int *) params[10] ) ); +} +void test_mbedtls_rsa_pkcs1_encrypt( data_t * message_str, int padding_mode, + int mod, int radix_N, char * input_N, + int radix_E, char * input_E, + data_t * result_str, int result ) +{ + unsigned char output[256]; + mbedtls_rsa_context ctx; + mbedtls_test_rnd_pseudo_info rnd_info; + + mbedtls_mpi N, E; + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E ); + + memset( &rnd_info, 0, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + mbedtls_rsa_init( &ctx, padding_mode, 0 ); + memset( output, 0x00, sizeof( output ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( mod / 8 ) ); + TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 ); + + + TEST_ASSERT( mbedtls_rsa_pkcs1_encrypt( &ctx, + &mbedtls_test_rnd_pseudo_rand, + &rnd_info, MBEDTLS_RSA_PUBLIC, + message_str->len, message_str->x, + output ) == result ); + if( result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + ctx.len, result_str->len ) == 0 ); + } + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_mbedtls_rsa_pkcs1_encrypt_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_mbedtls_rsa_pkcs1_encrypt( &data0, *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ), (char *) params[7], &data8, *( (int *) params[10] ) ); +} +void test_rsa_pkcs1_encrypt_bad_rng( data_t * message_str, int padding_mode, + int mod, int radix_N, char * input_N, + int radix_E, char * input_E, + data_t * result_str, int result ) +{ + unsigned char output[256]; + mbedtls_rsa_context ctx; + + mbedtls_mpi N, E; + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E ); + mbedtls_rsa_init( &ctx, padding_mode, 0 ); + memset( output, 0x00, sizeof( output ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( mod / 8 ) ); + TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 ); + + + TEST_ASSERT( mbedtls_rsa_pkcs1_encrypt( &ctx, &mbedtls_test_rnd_zero_rand, + NULL, MBEDTLS_RSA_PUBLIC, + message_str->len, message_str->x, + output ) == result ); + if( result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + ctx.len, result_str->len ) == 0 ); + } + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_rsa_pkcs1_encrypt_bad_rng_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_rsa_pkcs1_encrypt_bad_rng( &data0, *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ), (char *) params[7], &data8, *( (int *) params[10] ) ); +} +void test_mbedtls_rsa_pkcs1_decrypt( data_t * message_str, int padding_mode, + int mod, int radix_P, char * input_P, + int radix_Q, char * input_Q, int radix_N, + char * input_N, int radix_E, char * input_E, + int max_output, data_t * result_str, + int result ) +{ + unsigned char output[32]; + mbedtls_rsa_context ctx; + size_t output_len; + mbedtls_test_rnd_pseudo_info rnd_info; + mbedtls_mpi N, P, Q, E; + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); + mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E ); + + mbedtls_rsa_init( &ctx, padding_mode, 0 ); + + memset( output, 0x00, sizeof( output ) ); + memset( &rnd_info, 0, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + + TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( mod / 8 ) ); + TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 ); + TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 ); + + output_len = 0; + + TEST_ASSERT( mbedtls_rsa_pkcs1_decrypt( &ctx, mbedtls_test_rnd_pseudo_rand, + &rnd_info, MBEDTLS_RSA_PRIVATE, + &output_len, message_str->x, output, + max_output ) == result ); + if( result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + output_len, + result_str->len ) == 0 ); + } + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P ); + mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_mbedtls_rsa_pkcs1_decrypt_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data13 = {(uint8_t *) params[13], *( (uint32_t *) params[14] )}; + + test_mbedtls_rsa_pkcs1_decrypt( &data0, *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ), (char *) params[7], *( (int *) params[8] ), (char *) params[9], *( (int *) params[10] ), (char *) params[11], *( (int *) params[12] ), &data13, *( (int *) params[15] ) ); +} +void test_mbedtls_rsa_public( data_t * message_str, int mod, int radix_N, + char * input_N, int radix_E, char * input_E, + data_t * result_str, int result ) +{ + unsigned char output[256]; + mbedtls_rsa_context ctx, ctx2; /* Also test mbedtls_rsa_copy() while at it */ + + mbedtls_mpi N, E; + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E ); + mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, 0 ); + mbedtls_rsa_init( &ctx2, MBEDTLS_RSA_PKCS_V15, 0 ); + memset( output, 0x00, sizeof( output ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( mod / 8 ) ); + TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == 0 ); + + + TEST_ASSERT( mbedtls_rsa_public( &ctx, message_str->x, output ) == result ); + if( result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + ctx.len, result_str->len ) == 0 ); + } + + /* And now with the copy */ + TEST_ASSERT( mbedtls_rsa_copy( &ctx2, &ctx ) == 0 ); + /* clear the original to be sure */ + mbedtls_rsa_free( &ctx ); + + TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx2 ) == 0 ); + + memset( output, 0x00, sizeof( output ) ); + TEST_ASSERT( mbedtls_rsa_public( &ctx2, message_str->x, output ) == result ); + if( result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + ctx.len, result_str->len ) == 0 ); + } + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); + mbedtls_rsa_free( &ctx2 ); +} + +void test_mbedtls_rsa_public_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + + test_mbedtls_rsa_public( &data0, *( (int *) params[2] ), *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), (char *) params[6], &data7, *( (int *) params[9] ) ); +} +void test_mbedtls_rsa_private( data_t * message_str, int mod, int radix_P, + char * input_P, int radix_Q, char * input_Q, + int radix_N, char * input_N, int radix_E, + char * input_E, data_t * result_str, + int result ) +{ + unsigned char output[256]; + mbedtls_rsa_context ctx, ctx2; /* Also test mbedtls_rsa_copy() while at it */ + mbedtls_mpi N, P, Q, E; + mbedtls_test_rnd_pseudo_info rnd_info; + int i; + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); + mbedtls_mpi_init( &Q ); mbedtls_mpi_init( &E ); + mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, 0 ); + mbedtls_rsa_init( &ctx2, MBEDTLS_RSA_PKCS_V15, 0 ); + + memset( &rnd_info, 0, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, &P, &Q, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_get_len( &ctx ) == (size_t) ( mod / 8 ) ); + TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 ); + TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 ); + + + /* repeat three times to test updating of blinding values */ + for( i = 0; i < 3; i++ ) + { + memset( output, 0x00, sizeof( output ) ); + TEST_ASSERT( mbedtls_rsa_private( &ctx, mbedtls_test_rnd_pseudo_rand, + &rnd_info, message_str->x, + output ) == result ); + if( result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + ctx.len, + result_str->len ) == 0 ); + } + } + + /* And now one more time with the copy */ + TEST_ASSERT( mbedtls_rsa_copy( &ctx2, &ctx ) == 0 ); + /* clear the original to be sure */ + mbedtls_rsa_free( &ctx ); + + TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx2 ) == 0 ); + + memset( output, 0x00, sizeof( output ) ); + TEST_ASSERT( mbedtls_rsa_private( &ctx2, mbedtls_test_rnd_pseudo_rand, + &rnd_info, message_str->x, + output ) == result ); + if( result == 0 ) + { + + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + ctx2.len, + result_str->len ) == 0 ); + } + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &P ); + mbedtls_mpi_free( &Q ); mbedtls_mpi_free( &E ); + + mbedtls_rsa_free( &ctx ); mbedtls_rsa_free( &ctx2 ); +} + +void test_mbedtls_rsa_private_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data11 = {(uint8_t *) params[11], *( (uint32_t *) params[12] )}; + + test_mbedtls_rsa_private( &data0, *( (int *) params[2] ), *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), (char *) params[6], *( (int *) params[7] ), (char *) params[8], *( (int *) params[9] ), (char *) params[10], &data11, *( (int *) params[13] ) ); +} +void test_rsa_check_privkey_null( ) +{ + mbedtls_rsa_context ctx; + memset( &ctx, 0x00, sizeof( mbedtls_rsa_context ) ); + + TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); +exit: + ; +} + +void test_rsa_check_privkey_null_wrapper( void ** params ) +{ + (void)params; + + test_rsa_check_privkey_null( ); +} +void test_mbedtls_rsa_check_pubkey( int radix_N, char * input_N, int radix_E, + char * input_E, int result ) +{ + mbedtls_rsa_context ctx; + mbedtls_mpi N, E; + + mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E ); + mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, 0 ); + + if( strlen( input_N ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + } + if( strlen( input_E ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + } + + TEST_ASSERT( mbedtls_rsa_import( &ctx, &N, NULL, NULL, NULL, &E ) == 0 ); + TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == result ); + +exit: + mbedtls_mpi_free( &N ); mbedtls_mpi_free( &E ); + mbedtls_rsa_free( &ctx ); +} + +void test_mbedtls_rsa_check_pubkey_wrapper( void ** params ) +{ + + test_mbedtls_rsa_check_pubkey( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ) ); +} +void test_mbedtls_rsa_check_privkey( int mod, int radix_P, char * input_P, + int radix_Q, char * input_Q, int radix_N, + char * input_N, int radix_E, char * input_E, + int radix_D, char * input_D, int radix_DP, + char * input_DP, int radix_DQ, + char * input_DQ, int radix_QP, + char * input_QP, int result ) +{ + mbedtls_rsa_context ctx; + + mbedtls_rsa_init( &ctx, MBEDTLS_RSA_PKCS_V15, 0 ); + + ctx.len = mod / 8; + if( strlen( input_P ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &ctx.P, radix_P, input_P ) == 0 ); + } + if( strlen( input_Q ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &ctx.Q, radix_Q, input_Q ) == 0 ); + } + if( strlen( input_N ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &ctx.N, radix_N, input_N ) == 0 ); + } + if( strlen( input_E ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &ctx.E, radix_E, input_E ) == 0 ); + } + if( strlen( input_D ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &ctx.D, radix_D, input_D ) == 0 ); + } +#if !defined(MBEDTLS_RSA_NO_CRT) + if( strlen( input_DP ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &ctx.DP, radix_DP, input_DP ) == 0 ); + } + if( strlen( input_DQ ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &ctx.DQ, radix_DQ, input_DQ ) == 0 ); + } + if( strlen( input_QP ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &ctx.QP, radix_QP, input_QP ) == 0 ); + } +#else + ((void) radix_DP); ((void) input_DP); + ((void) radix_DQ); ((void) input_DQ); + ((void) radix_QP); ((void) input_QP); +#endif + + TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == result ); + +exit: + mbedtls_rsa_free( &ctx ); +} + +void test_mbedtls_rsa_check_privkey_wrapper( void ** params ) +{ + + test_mbedtls_rsa_check_privkey( *( (int *) params[0] ), *( (int *) params[1] ), (char *) params[2], *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), (char *) params[6], *( (int *) params[7] ), (char *) params[8], *( (int *) params[9] ), (char *) params[10], *( (int *) params[11] ), (char *) params[12], *( (int *) params[13] ), (char *) params[14], *( (int *) params[15] ), (char *) params[16], *( (int *) params[17] ) ); +} +void test_rsa_check_pubpriv( int mod, int radix_Npub, char * input_Npub, + int radix_Epub, char * input_Epub, int radix_P, + char * input_P, int radix_Q, char * input_Q, + int radix_N, char * input_N, int radix_E, + char * input_E, int radix_D, char * input_D, + int radix_DP, char * input_DP, int radix_DQ, + char * input_DQ, int radix_QP, char * input_QP, + int result ) +{ + mbedtls_rsa_context pub, prv; + + mbedtls_rsa_init( &pub, MBEDTLS_RSA_PKCS_V15, 0 ); + mbedtls_rsa_init( &prv, MBEDTLS_RSA_PKCS_V15, 0 ); + + pub.len = mod / 8; + prv.len = mod / 8; + + if( strlen( input_Npub ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &pub.N, radix_Npub, input_Npub ) == 0 ); + } + if( strlen( input_Epub ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &pub.E, radix_Epub, input_Epub ) == 0 ); + } + + if( strlen( input_P ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &prv.P, radix_P, input_P ) == 0 ); + } + if( strlen( input_Q ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &prv.Q, radix_Q, input_Q ) == 0 ); + } + if( strlen( input_N ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &prv.N, radix_N, input_N ) == 0 ); + } + if( strlen( input_E ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &prv.E, radix_E, input_E ) == 0 ); + } + if( strlen( input_D ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &prv.D, radix_D, input_D ) == 0 ); + } +#if !defined(MBEDTLS_RSA_NO_CRT) + if( strlen( input_DP ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &prv.DP, radix_DP, input_DP ) == 0 ); + } + if( strlen( input_DQ ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &prv.DQ, radix_DQ, input_DQ ) == 0 ); + } + if( strlen( input_QP ) ) + { + TEST_ASSERT( mbedtls_mpi_read_string( &prv.QP, radix_QP, input_QP ) == 0 ); + } +#else + ((void) radix_DP); ((void) input_DP); + ((void) radix_DQ); ((void) input_DQ); + ((void) radix_QP); ((void) input_QP); +#endif + + TEST_ASSERT( mbedtls_rsa_check_pub_priv( &pub, &prv ) == result ); + +exit: + mbedtls_rsa_free( &pub ); + mbedtls_rsa_free( &prv ); +} + +void test_rsa_check_pubpriv_wrapper( void ** params ) +{ + + test_rsa_check_pubpriv( *( (int *) params[0] ), *( (int *) params[1] ), (char *) params[2], *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ), (char *) params[6], *( (int *) params[7] ), (char *) params[8], *( (int *) params[9] ), (char *) params[10], *( (int *) params[11] ), (char *) params[12], *( (int *) params[13] ), (char *) params[14], *( (int *) params[15] ), (char *) params[16], *( (int *) params[17] ), (char *) params[18], *( (int *) params[19] ), (char *) params[20], *( (int *) params[21] ) ); +} +#if defined(MBEDTLS_CTR_DRBG_C) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(ENTROPY_HAVE_STRONG) +void test_mbedtls_rsa_gen_key( int nrbits, int exponent, int result) +{ + mbedtls_rsa_context ctx; + mbedtls_entropy_context entropy; + mbedtls_ctr_drbg_context ctr_drbg; + const char *pers = "test_suite_rsa"; + + mbedtls_ctr_drbg_init( &ctr_drbg ); + mbedtls_entropy_init( &entropy ); + mbedtls_rsa_init ( &ctx, 0, 0 ); + + TEST_ASSERT( mbedtls_ctr_drbg_seed( &ctr_drbg, mbedtls_entropy_func, + &entropy, (const unsigned char *) pers, + strlen( pers ) ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_gen_key( &ctx, mbedtls_ctr_drbg_random, &ctr_drbg, nrbits, exponent ) == result ); + if( result == 0 ) + { + TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &ctx.P, &ctx.Q ) > 0 ); + } + +exit: + mbedtls_rsa_free( &ctx ); + mbedtls_ctr_drbg_free( &ctr_drbg ); + mbedtls_entropy_free( &entropy ); +} + +void test_mbedtls_rsa_gen_key_wrapper( void ** params ) +{ + + test_mbedtls_rsa_gen_key( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* ENTROPY_HAVE_STRONG */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_CTR_DRBG_C */ +#if defined(MBEDTLS_CTR_DRBG_C) +#if defined(MBEDTLS_ENTROPY_C) +void test_mbedtls_rsa_deduce_primes( int radix_N, char *input_N, + int radix_D, char *input_D, + int radix_E, char *input_E, + int radix_P, char *output_P, + int radix_Q, char *output_Q, + int corrupt, int result ) +{ + mbedtls_mpi N, P, Pp, Q, Qp, D, E; + + mbedtls_mpi_init( &N ); + mbedtls_mpi_init( &P ); mbedtls_mpi_init( &Q ); + mbedtls_mpi_init( &Pp ); mbedtls_mpi_init( &Qp ); + mbedtls_mpi_init( &D ); mbedtls_mpi_init( &E ); + + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &D, radix_D, input_D ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Qp, radix_P, output_P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Pp, radix_Q, output_Q ) == 0 ); + + if( corrupt ) + TEST_ASSERT( mbedtls_mpi_add_int( &D, &D, 2 ) == 0 ); + + /* Try to deduce P, Q from N, D, E only. */ + TEST_ASSERT( mbedtls_rsa_deduce_primes( &N, &D, &E, &P, &Q ) == result ); + + if( !corrupt ) + { + /* Check if (P,Q) = (Pp, Qp) or (P,Q) = (Qp, Pp) */ + TEST_ASSERT( ( mbedtls_mpi_cmp_mpi( &P, &Pp ) == 0 && mbedtls_mpi_cmp_mpi( &Q, &Qp ) == 0 ) || + ( mbedtls_mpi_cmp_mpi( &P, &Qp ) == 0 && mbedtls_mpi_cmp_mpi( &Q, &Pp ) == 0 ) ); + } + +exit: + mbedtls_mpi_free( &N ); + mbedtls_mpi_free( &P ); mbedtls_mpi_free( &Q ); + mbedtls_mpi_free( &Pp ); mbedtls_mpi_free( &Qp ); + mbedtls_mpi_free( &D ); mbedtls_mpi_free( &E ); +} + +void test_mbedtls_rsa_deduce_primes_wrapper( void ** params ) +{ + + test_mbedtls_rsa_deduce_primes( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ), (char *) params[7], *( (int *) params[8] ), (char *) params[9], *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_CTR_DRBG_C */ +void test_mbedtls_rsa_deduce_private_exponent( int radix_P, char *input_P, + int radix_Q, char *input_Q, + int radix_E, char *input_E, + int radix_D, char *output_D, + int corrupt, int result ) +{ + mbedtls_mpi P, Q, D, Dp, E, R, Rp; + + mbedtls_mpi_init( &P ); mbedtls_mpi_init( &Q ); + mbedtls_mpi_init( &D ); mbedtls_mpi_init( &Dp ); + mbedtls_mpi_init( &E ); + mbedtls_mpi_init( &R ); mbedtls_mpi_init( &Rp ); + + TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + TEST_ASSERT( mbedtls_mpi_read_string( &Dp, radix_D, output_D ) == 0 ); + + if( corrupt ) + { + /* Make E even */ + TEST_ASSERT( mbedtls_mpi_set_bit( &E, 0, 0 ) == 0 ); + } + + /* Try to deduce D from N, P, Q, E. */ + TEST_ASSERT( mbedtls_rsa_deduce_private_exponent( &P, &Q, + &E, &D ) == result ); + + if( !corrupt ) + { + /* + * Check that D and Dp agree modulo LCM(P-1, Q-1). + */ + + /* Replace P,Q by P-1, Q-1 */ + TEST_ASSERT( mbedtls_mpi_sub_int( &P, &P, 1 ) == 0 ); + TEST_ASSERT( mbedtls_mpi_sub_int( &Q, &Q, 1 ) == 0 ); + + /* Check D == Dp modulo P-1 */ + TEST_ASSERT( mbedtls_mpi_mod_mpi( &R, &D, &P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_mod_mpi( &Rp, &Dp, &P ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R, &Rp ) == 0 ); + + /* Check D == Dp modulo Q-1 */ + TEST_ASSERT( mbedtls_mpi_mod_mpi( &R, &D, &Q ) == 0 ); + TEST_ASSERT( mbedtls_mpi_mod_mpi( &Rp, &Dp, &Q ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &R, &Rp ) == 0 ); + } + +exit: + + mbedtls_mpi_free( &P ); mbedtls_mpi_free( &Q ); + mbedtls_mpi_free( &D ); mbedtls_mpi_free( &Dp ); + mbedtls_mpi_free( &E ); + mbedtls_mpi_free( &R ); mbedtls_mpi_free( &Rp ); +} + +void test_mbedtls_rsa_deduce_private_exponent_wrapper( void ** params ) +{ + + test_mbedtls_rsa_deduce_private_exponent( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ), (char *) params[7], *( (int *) params[8] ), *( (int *) params[9] ) ); +} +#if defined(MBEDTLS_CTR_DRBG_C) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(ENTROPY_HAVE_STRONG) +void test_mbedtls_rsa_import( int radix_N, char *input_N, + int radix_P, char *input_P, + int radix_Q, char *input_Q, + int radix_D, char *input_D, + int radix_E, char *input_E, + int successive, + int is_priv, + int res_check, + int res_complete ) +{ + mbedtls_mpi N, P, Q, D, E; + mbedtls_rsa_context ctx; + + /* Buffers used for encryption-decryption test */ + unsigned char *buf_orig = NULL; + unsigned char *buf_enc = NULL; + unsigned char *buf_dec = NULL; + + mbedtls_entropy_context entropy; + mbedtls_ctr_drbg_context ctr_drbg; + const char *pers = "test_suite_rsa"; + + const int have_N = ( strlen( input_N ) > 0 ); + const int have_P = ( strlen( input_P ) > 0 ); + const int have_Q = ( strlen( input_Q ) > 0 ); + const int have_D = ( strlen( input_D ) > 0 ); + const int have_E = ( strlen( input_E ) > 0 ); + + mbedtls_ctr_drbg_init( &ctr_drbg ); + mbedtls_entropy_init( &entropy ); + mbedtls_rsa_init( &ctx, 0, 0 ); + + mbedtls_mpi_init( &N ); + mbedtls_mpi_init( &P ); mbedtls_mpi_init( &Q ); + mbedtls_mpi_init( &D ); mbedtls_mpi_init( &E ); + + TEST_ASSERT( mbedtls_ctr_drbg_seed( &ctr_drbg, mbedtls_entropy_func, &entropy, + (const unsigned char *) pers, strlen( pers ) ) == 0 ); + + if( have_N ) + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + + if( have_P ) + TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 ); + + if( have_Q ) + TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 ); + + if( have_D ) + TEST_ASSERT( mbedtls_mpi_read_string( &D, radix_D, input_D ) == 0 ); + + if( have_E ) + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + if( !successive ) + { + TEST_ASSERT( mbedtls_rsa_import( &ctx, + have_N ? &N : NULL, + have_P ? &P : NULL, + have_Q ? &Q : NULL, + have_D ? &D : NULL, + have_E ? &E : NULL ) == 0 ); + } + else + { + /* Import N, P, Q, D, E separately. + * This should make no functional difference. */ + + TEST_ASSERT( mbedtls_rsa_import( &ctx, + have_N ? &N : NULL, + NULL, NULL, NULL, NULL ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, + NULL, + have_P ? &P : NULL, + NULL, NULL, NULL ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, + NULL, NULL, + have_Q ? &Q : NULL, + NULL, NULL ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, + NULL, NULL, NULL, + have_D ? &D : NULL, + NULL ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, + NULL, NULL, NULL, NULL, + have_E ? &E : NULL ) == 0 ); + } + + TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == res_complete ); + + /* On expected success, perform some public and private + * key operations to check if the key is working properly. */ + if( res_complete == 0 ) + { + if( is_priv ) + TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == res_check ); + else + TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == res_check ); + + if( res_check != 0 ) + goto exit; + + buf_orig = mbedtls_calloc( 1, mbedtls_rsa_get_len( &ctx ) ); + buf_enc = mbedtls_calloc( 1, mbedtls_rsa_get_len( &ctx ) ); + buf_dec = mbedtls_calloc( 1, mbedtls_rsa_get_len( &ctx ) ); + if( buf_orig == NULL || buf_enc == NULL || buf_dec == NULL ) + goto exit; + + TEST_ASSERT( mbedtls_ctr_drbg_random( &ctr_drbg, + buf_orig, mbedtls_rsa_get_len( &ctx ) ) == 0 ); + + /* Make sure the number we're generating is smaller than the modulus */ + buf_orig[0] = 0x00; + + TEST_ASSERT( mbedtls_rsa_public( &ctx, buf_orig, buf_enc ) == 0 ); + + if( is_priv ) + { + TEST_ASSERT( mbedtls_rsa_private( &ctx, mbedtls_ctr_drbg_random, + &ctr_drbg, buf_enc, + buf_dec ) == 0 ); + + TEST_ASSERT( memcmp( buf_orig, buf_dec, + mbedtls_rsa_get_len( &ctx ) ) == 0 ); + } + } + +exit: + + mbedtls_free( buf_orig ); + mbedtls_free( buf_enc ); + mbedtls_free( buf_dec ); + + mbedtls_rsa_free( &ctx ); + + mbedtls_ctr_drbg_free( &ctr_drbg ); + mbedtls_entropy_free( &entropy ); + + mbedtls_mpi_free( &N ); + mbedtls_mpi_free( &P ); mbedtls_mpi_free( &Q ); + mbedtls_mpi_free( &D ); mbedtls_mpi_free( &E ); +} + +void test_mbedtls_rsa_import_wrapper( void ** params ) +{ + + test_mbedtls_rsa_import( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ), (char *) params[7], *( (int *) params[8] ), (char *) params[9], *( (int *) params[10] ), *( (int *) params[11] ), *( (int *) params[12] ), *( (int *) params[13] ) ); +} +#endif /* ENTROPY_HAVE_STRONG */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_CTR_DRBG_C */ +void test_mbedtls_rsa_export( int radix_N, char *input_N, + int radix_P, char *input_P, + int radix_Q, char *input_Q, + int radix_D, char *input_D, + int radix_E, char *input_E, + int is_priv, + int successive ) +{ + /* Original MPI's with which we set up the RSA context */ + mbedtls_mpi N, P, Q, D, E; + + /* Exported MPI's */ + mbedtls_mpi Ne, Pe, Qe, De, Ee; + + const int have_N = ( strlen( input_N ) > 0 ); + const int have_P = ( strlen( input_P ) > 0 ); + const int have_Q = ( strlen( input_Q ) > 0 ); + const int have_D = ( strlen( input_D ) > 0 ); + const int have_E = ( strlen( input_E ) > 0 ); + + mbedtls_rsa_context ctx; + + mbedtls_rsa_init( &ctx, 0, 0 ); + + mbedtls_mpi_init( &N ); + mbedtls_mpi_init( &P ); mbedtls_mpi_init( &Q ); + mbedtls_mpi_init( &D ); mbedtls_mpi_init( &E ); + + mbedtls_mpi_init( &Ne ); + mbedtls_mpi_init( &Pe ); mbedtls_mpi_init( &Qe ); + mbedtls_mpi_init( &De ); mbedtls_mpi_init( &Ee ); + + /* Setup RSA context */ + + if( have_N ) + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + + if( have_P ) + TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 ); + + if( have_Q ) + TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 ); + + if( have_D ) + TEST_ASSERT( mbedtls_mpi_read_string( &D, radix_D, input_D ) == 0 ); + + if( have_E ) + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import( &ctx, + strlen( input_N ) ? &N : NULL, + strlen( input_P ) ? &P : NULL, + strlen( input_Q ) ? &Q : NULL, + strlen( input_D ) ? &D : NULL, + strlen( input_E ) ? &E : NULL ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 ); + + /* + * Export parameters and compare to original ones. + */ + + /* N and E must always be present. */ + if( !successive ) + { + TEST_ASSERT( mbedtls_rsa_export( &ctx, &Ne, NULL, NULL, NULL, &Ee ) == 0 ); + } + else + { + TEST_ASSERT( mbedtls_rsa_export( &ctx, &Ne, NULL, NULL, NULL, NULL ) == 0 ); + TEST_ASSERT( mbedtls_rsa_export( &ctx, NULL, NULL, NULL, NULL, &Ee ) == 0 ); + } + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &N, &Ne ) == 0 ); + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &E, &Ee ) == 0 ); + + /* If we were providing enough information to setup a complete private context, + * we expect to be able to export all core parameters. */ + + if( is_priv ) + { + if( !successive ) + { + TEST_ASSERT( mbedtls_rsa_export( &ctx, NULL, &Pe, &Qe, + &De, NULL ) == 0 ); + } + else + { + TEST_ASSERT( mbedtls_rsa_export( &ctx, NULL, &Pe, NULL, + NULL, NULL ) == 0 ); + TEST_ASSERT( mbedtls_rsa_export( &ctx, NULL, NULL, &Qe, + NULL, NULL ) == 0 ); + TEST_ASSERT( mbedtls_rsa_export( &ctx, NULL, NULL, NULL, + &De, NULL ) == 0 ); + } + + if( have_P ) + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &P, &Pe ) == 0 ); + + if( have_Q ) + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &Q, &Qe ) == 0 ); + + if( have_D ) + TEST_ASSERT( mbedtls_mpi_cmp_mpi( &D, &De ) == 0 ); + + /* While at it, perform a sanity check */ + TEST_ASSERT( mbedtls_rsa_validate_params( &Ne, &Pe, &Qe, &De, &Ee, + NULL, NULL ) == 0 ); + } + +exit: + + mbedtls_rsa_free( &ctx ); + + mbedtls_mpi_free( &N ); + mbedtls_mpi_free( &P ); mbedtls_mpi_free( &Q ); + mbedtls_mpi_free( &D ); mbedtls_mpi_free( &E ); + + mbedtls_mpi_free( &Ne ); + mbedtls_mpi_free( &Pe ); mbedtls_mpi_free( &Qe ); + mbedtls_mpi_free( &De ); mbedtls_mpi_free( &Ee ); +} + +void test_mbedtls_rsa_export_wrapper( void ** params ) +{ + + test_mbedtls_rsa_export( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ), (char *) params[7], *( (int *) params[8] ), (char *) params[9], *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#if defined(MBEDTLS_ENTROPY_C) +#if defined(ENTROPY_HAVE_STRONG) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_mbedtls_rsa_validate_params( int radix_N, char *input_N, + int radix_P, char *input_P, + int radix_Q, char *input_Q, + int radix_D, char *input_D, + int radix_E, char *input_E, + int prng, int result ) +{ + /* Original MPI's with which we set up the RSA context */ + mbedtls_mpi N, P, Q, D, E; + + const int have_N = ( strlen( input_N ) > 0 ); + const int have_P = ( strlen( input_P ) > 0 ); + const int have_Q = ( strlen( input_Q ) > 0 ); + const int have_D = ( strlen( input_D ) > 0 ); + const int have_E = ( strlen( input_E ) > 0 ); + + mbedtls_entropy_context entropy; + mbedtls_ctr_drbg_context ctr_drbg; + const char *pers = "test_suite_rsa"; + + mbedtls_mpi_init( &N ); + mbedtls_mpi_init( &P ); mbedtls_mpi_init( &Q ); + mbedtls_mpi_init( &D ); mbedtls_mpi_init( &E ); + + mbedtls_ctr_drbg_init( &ctr_drbg ); + mbedtls_entropy_init( &entropy ); + TEST_ASSERT( mbedtls_ctr_drbg_seed( &ctr_drbg, mbedtls_entropy_func, + &entropy, (const unsigned char *) pers, + strlen( pers ) ) == 0 ); + + if( have_N ) + TEST_ASSERT( mbedtls_mpi_read_string( &N, radix_N, input_N ) == 0 ); + + if( have_P ) + TEST_ASSERT( mbedtls_mpi_read_string( &P, radix_P, input_P ) == 0 ); + + if( have_Q ) + TEST_ASSERT( mbedtls_mpi_read_string( &Q, radix_Q, input_Q ) == 0 ); + + if( have_D ) + TEST_ASSERT( mbedtls_mpi_read_string( &D, radix_D, input_D ) == 0 ); + + if( have_E ) + TEST_ASSERT( mbedtls_mpi_read_string( &E, radix_E, input_E ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_validate_params( have_N ? &N : NULL, + have_P ? &P : NULL, + have_Q ? &Q : NULL, + have_D ? &D : NULL, + have_E ? &E : NULL, + prng ? mbedtls_ctr_drbg_random : NULL, + prng ? &ctr_drbg : NULL ) == result ); +exit: + + mbedtls_ctr_drbg_free( &ctr_drbg ); + mbedtls_entropy_free( &entropy ); + + mbedtls_mpi_free( &N ); + mbedtls_mpi_free( &P ); mbedtls_mpi_free( &Q ); + mbedtls_mpi_free( &D ); mbedtls_mpi_free( &E ); +} + +void test_mbedtls_rsa_validate_params_wrapper( void ** params ) +{ + + test_mbedtls_rsa_validate_params( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), (char *) params[3], *( (int *) params[4] ), (char *) params[5], *( (int *) params[6] ), (char *) params[7], *( (int *) params[8] ), (char *) params[9], *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* ENTROPY_HAVE_STRONG */ +#endif /* MBEDTLS_ENTROPY_C */ +#if defined(MBEDTLS_CTR_DRBG_C) +#if defined(MBEDTLS_ENTROPY_C) +void test_mbedtls_rsa_export_raw( data_t *input_N, data_t *input_P, + data_t *input_Q, data_t *input_D, + data_t *input_E, int is_priv, + int successive ) +{ + /* Exported buffers */ + unsigned char bufNe[256]; + unsigned char bufPe[128]; + unsigned char bufQe[128]; + unsigned char bufDe[256]; + unsigned char bufEe[1]; + + mbedtls_rsa_context ctx; + + mbedtls_rsa_init( &ctx, 0, 0 ); + + /* Setup RSA context */ + TEST_ASSERT( mbedtls_rsa_import_raw( &ctx, + input_N->len ? input_N->x : NULL, input_N->len, + input_P->len ? input_P->x : NULL, input_P->len, + input_Q->len ? input_Q->x : NULL, input_Q->len, + input_D->len ? input_D->x : NULL, input_D->len, + input_E->len ? input_E->x : NULL, input_E->len ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == 0 ); + + /* + * Export parameters and compare to original ones. + */ + + /* N and E must always be present. */ + if( !successive ) + { + TEST_ASSERT( mbedtls_rsa_export_raw( &ctx, bufNe, input_N->len, + NULL, 0, NULL, 0, NULL, 0, + bufEe, input_E->len ) == 0 ); + } + else + { + TEST_ASSERT( mbedtls_rsa_export_raw( &ctx, bufNe, input_N->len, + NULL, 0, NULL, 0, NULL, 0, + NULL, 0 ) == 0 ); + TEST_ASSERT( mbedtls_rsa_export_raw( &ctx, NULL, 0, + NULL, 0, NULL, 0, NULL, 0, + bufEe, input_E->len ) == 0 ); + } + TEST_ASSERT( memcmp( input_N->x, bufNe, input_N->len ) == 0 ); + TEST_ASSERT( memcmp( input_E->x, bufEe, input_E->len ) == 0 ); + + /* If we were providing enough information to setup a complete private context, + * we expect to be able to export all core parameters. */ + + if( is_priv ) + { + if( !successive ) + { + TEST_ASSERT( mbedtls_rsa_export_raw( &ctx, NULL, 0, + bufPe, input_P->len ? input_P->len : sizeof( bufPe ), + bufQe, input_Q->len ? input_Q->len : sizeof( bufQe ), + bufDe, input_D->len ? input_D->len : sizeof( bufDe ), + NULL, 0 ) == 0 ); + } + else + { + TEST_ASSERT( mbedtls_rsa_export_raw( &ctx, NULL, 0, + bufPe, input_P->len ? input_P->len : sizeof( bufPe ), + NULL, 0, NULL, 0, + NULL, 0 ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_export_raw( &ctx, NULL, 0, NULL, 0, + bufQe, input_Q->len ? input_Q->len : sizeof( bufQe ), + NULL, 0, NULL, 0 ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_export_raw( &ctx, NULL, 0, NULL, 0, NULL, 0, + bufDe, input_D->len ? input_D->len : sizeof( bufDe ), + NULL, 0 ) == 0 ); + } + + if( input_P->len ) + TEST_ASSERT( memcmp( input_P->x, bufPe, input_P->len ) == 0 ); + + if( input_Q->len ) + TEST_ASSERT( memcmp( input_Q->x, bufQe, input_Q->len ) == 0 ); + + if( input_D->len ) + TEST_ASSERT( memcmp( input_D->x, bufDe, input_D->len ) == 0 ); + + } + +exit: + mbedtls_rsa_free( &ctx ); +} + +void test_mbedtls_rsa_export_raw_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_mbedtls_rsa_export_raw( &data0, &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ) ); +} +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_CTR_DRBG_C */ +#if defined(MBEDTLS_CTR_DRBG_C) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(ENTROPY_HAVE_STRONG) +void test_mbedtls_rsa_import_raw( data_t *input_N, + data_t *input_P, data_t *input_Q, + data_t *input_D, data_t *input_E, + int successive, + int is_priv, + int res_check, + int res_complete ) +{ + /* Buffers used for encryption-decryption test */ + unsigned char *buf_orig = NULL; + unsigned char *buf_enc = NULL; + unsigned char *buf_dec = NULL; + + mbedtls_rsa_context ctx; + mbedtls_entropy_context entropy; + mbedtls_ctr_drbg_context ctr_drbg; + + const char *pers = "test_suite_rsa"; + + mbedtls_ctr_drbg_init( &ctr_drbg ); + mbedtls_entropy_init( &entropy ); + mbedtls_rsa_init( &ctx, 0, 0 ); + + TEST_ASSERT( mbedtls_ctr_drbg_seed( &ctr_drbg, mbedtls_entropy_func, + &entropy, (const unsigned char *) pers, + strlen( pers ) ) == 0 ); + + if( !successive ) + { + TEST_ASSERT( mbedtls_rsa_import_raw( &ctx, + ( input_N->len > 0 ) ? input_N->x : NULL, input_N->len, + ( input_P->len > 0 ) ? input_P->x : NULL, input_P->len, + ( input_Q->len > 0 ) ? input_Q->x : NULL, input_Q->len, + ( input_D->len > 0 ) ? input_D->x : NULL, input_D->len, + ( input_E->len > 0 ) ? input_E->x : NULL, input_E->len ) == 0 ); + } + else + { + /* Import N, P, Q, D, E separately. + * This should make no functional difference. */ + + TEST_ASSERT( mbedtls_rsa_import_raw( &ctx, + ( input_N->len > 0 ) ? input_N->x : NULL, input_N->len, + NULL, 0, NULL, 0, NULL, 0, NULL, 0 ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import_raw( &ctx, + NULL, 0, + ( input_P->len > 0 ) ? input_P->x : NULL, input_P->len, + NULL, 0, NULL, 0, NULL, 0 ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import_raw( &ctx, + NULL, 0, NULL, 0, + ( input_Q->len > 0 ) ? input_Q->x : NULL, input_Q->len, + NULL, 0, NULL, 0 ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import_raw( &ctx, + NULL, 0, NULL, 0, NULL, 0, + ( input_D->len > 0 ) ? input_D->x : NULL, input_D->len, + NULL, 0 ) == 0 ); + + TEST_ASSERT( mbedtls_rsa_import_raw( &ctx, + NULL, 0, NULL, 0, NULL, 0, NULL, 0, + ( input_E->len > 0 ) ? input_E->x : NULL, input_E->len ) == 0 ); + } + + TEST_ASSERT( mbedtls_rsa_complete( &ctx ) == res_complete ); + + /* On expected success, perform some public and private + * key operations to check if the key is working properly. */ + if( res_complete == 0 ) + { + if( is_priv ) + TEST_ASSERT( mbedtls_rsa_check_privkey( &ctx ) == res_check ); + else + TEST_ASSERT( mbedtls_rsa_check_pubkey( &ctx ) == res_check ); + + if( res_check != 0 ) + goto exit; + + buf_orig = mbedtls_calloc( 1, mbedtls_rsa_get_len( &ctx ) ); + buf_enc = mbedtls_calloc( 1, mbedtls_rsa_get_len( &ctx ) ); + buf_dec = mbedtls_calloc( 1, mbedtls_rsa_get_len( &ctx ) ); + if( buf_orig == NULL || buf_enc == NULL || buf_dec == NULL ) + goto exit; + + TEST_ASSERT( mbedtls_ctr_drbg_random( &ctr_drbg, + buf_orig, mbedtls_rsa_get_len( &ctx ) ) == 0 ); + + /* Make sure the number we're generating is smaller than the modulus */ + buf_orig[0] = 0x00; + + TEST_ASSERT( mbedtls_rsa_public( &ctx, buf_orig, buf_enc ) == 0 ); + + if( is_priv ) + { + TEST_ASSERT( mbedtls_rsa_private( &ctx, mbedtls_ctr_drbg_random, + &ctr_drbg, buf_enc, + buf_dec ) == 0 ); + + TEST_ASSERT( memcmp( buf_orig, buf_dec, + mbedtls_rsa_get_len( &ctx ) ) == 0 ); + } + } + +exit: + + mbedtls_free( buf_orig ); + mbedtls_free( buf_enc ); + mbedtls_free( buf_dec ); + + mbedtls_rsa_free( &ctx ); + + mbedtls_ctr_drbg_free( &ctr_drbg ); + mbedtls_entropy_free( &entropy ); + +} + +void test_mbedtls_rsa_import_raw_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_mbedtls_rsa_import_raw( &data0, &data2, &data4, &data6, &data8, *( (int *) params[10] ), *( (int *) params[11] ), *( (int *) params[12] ), *( (int *) params[13] ) ); +} +#endif /* ENTROPY_HAVE_STRONG */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_CTR_DRBG_C */ +#if defined(MBEDTLS_SELF_TEST) +void test_rsa_selftest( ) +{ + TEST_ASSERT( mbedtls_rsa_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_rsa_selftest_wrapper( void ** params ) +{ + (void)params; + + test_rsa_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_GENPRIME */ +#endif /* MBEDTLS_BIGNUM_C */ +#endif /* MBEDTLS_RSA_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + + case 0: + { + *out_value = MBEDTLS_RSA_PKCS_V15; + } + break; + case 1: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 2: + { + *out_value = MBEDTLS_ERR_RSA_VERIFY_FAILED; + } + break; + case 3: + { + *out_value = MBEDTLS_MD_SHA224; + } + break; + case 4: + { + *out_value = MBEDTLS_MD_SHA256; + } + break; + case 5: + { + *out_value = MBEDTLS_MD_SHA384; + } + break; + case 6: + { + *out_value = MBEDTLS_MD_SHA512; + } + break; + case 7: + { + *out_value = MBEDTLS_MD_MD2; + } + break; + case 8: + { + *out_value = MBEDTLS_MD_MD4; + } + break; + case 9: + { + *out_value = MBEDTLS_MD_MD5; + } + break; + case 10: + { + *out_value = MBEDTLS_ERR_RSA_BAD_INPUT_DATA; + } + break; + case 11: + { + *out_value = MBEDTLS_MD_RIPEMD160; + } + break; + case 12: + { + *out_value = MBEDTLS_ERR_RSA_PRIVATE_FAILED + MBEDTLS_ERR_MPI_BAD_INPUT_DATA; + } + break; + case 13: + { + *out_value = MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE; + } + break; + case 14: + { + *out_value = MBEDTLS_ERR_RSA_KEY_CHECK_FAILED; + } + break; + case 15: + { + *out_value = MBEDTLS_ERR_RSA_PUBLIC_FAILED + MBEDTLS_ERR_MPI_BAD_INPUT_DATA; + } + break; + case 16: + { + *out_value = MBEDTLS_ERR_MPI_NOT_ACCEPTABLE; + } + break; + case 17: + { + *out_value = MBEDTLS_ERR_MPI_BAD_INPUT_DATA; + } + break; + case 18: + { + *out_value = MBEDTLS_ERR_RSA_RNG_FAILED; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + + case 0: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_PKCS1_V15) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if !defined(MBEDTLS_SHA512_NO_SHA384) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 5: + { +#if defined(MBEDTLS_MD2_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 6: + { +#if defined(MBEDTLS_MD4_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 7: + { +#if defined(MBEDTLS_MD5_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 8: + { +#if defined(MBEDTLS_RIPEMD160_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 9: + { +#if !defined(MBEDTLS_RSA_NO_CRT) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 10: + { +#if (MBEDTLS_MPI_MAX_SIZE>=1024) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 11: + { +#if defined(MBEDTLS_SELF_TEST) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_rsa_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_rsa_init_free_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_mbedtls_rsa_pkcs1_sign_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_mbedtls_rsa_pkcs1_verify_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_rsa_pkcs1_sign_raw_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_rsa_pkcs1_verify_raw_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_mbedtls_rsa_pkcs1_encrypt_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_rsa_pkcs1_encrypt_bad_rng_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_mbedtls_rsa_pkcs1_decrypt_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_mbedtls_rsa_public_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_mbedtls_rsa_private_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_rsa_check_privkey_null_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_mbedtls_rsa_check_pubkey_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_mbedtls_rsa_check_privkey_wrapper, +#else + NULL, +#endif +/* Function Id: 14 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_rsa_check_pubpriv_wrapper, +#else + NULL, +#endif +/* Function Id: 15 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) && defined(MBEDTLS_CTR_DRBG_C) && defined(MBEDTLS_ENTROPY_C) && defined(ENTROPY_HAVE_STRONG) + test_mbedtls_rsa_gen_key_wrapper, +#else + NULL, +#endif +/* Function Id: 16 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) && defined(MBEDTLS_CTR_DRBG_C) && defined(MBEDTLS_ENTROPY_C) + test_mbedtls_rsa_deduce_primes_wrapper, +#else + NULL, +#endif +/* Function Id: 17 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_mbedtls_rsa_deduce_private_exponent_wrapper, +#else + NULL, +#endif +/* Function Id: 18 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) && defined(MBEDTLS_CTR_DRBG_C) && defined(MBEDTLS_ENTROPY_C) && defined(ENTROPY_HAVE_STRONG) + test_mbedtls_rsa_import_wrapper, +#else + NULL, +#endif +/* Function Id: 19 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) + test_mbedtls_rsa_export_wrapper, +#else + NULL, +#endif +/* Function Id: 20 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) && defined(MBEDTLS_ENTROPY_C) && defined(ENTROPY_HAVE_STRONG) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_CTR_DRBG_C) + test_mbedtls_rsa_validate_params_wrapper, +#else + NULL, +#endif +/* Function Id: 21 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) && defined(MBEDTLS_CTR_DRBG_C) && defined(MBEDTLS_ENTROPY_C) + test_mbedtls_rsa_export_raw_wrapper, +#else + NULL, +#endif +/* Function Id: 22 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) && defined(MBEDTLS_CTR_DRBG_C) && defined(MBEDTLS_ENTROPY_C) && defined(ENTROPY_HAVE_STRONG) + test_mbedtls_rsa_import_raw_wrapper, +#else + NULL, +#endif +/* Function Id: 23 */ + +#if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_GENPRIME) && defined(MBEDTLS_SELF_TEST) + test_rsa_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_rsa.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_rsa.datax b/third_party/mbedtls/test/test_suite_rsa.datax new file mode 100644 index 000000000..f8910f7c1 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_rsa.datax @@ -0,0 +1,608 @@ +RSA parameter validation +0 + +RSA init-free-free +1:int:0 + +RSA init-free-init-free +1:int:1 + +RSA PKCS1 Verify v1.5 CAVS #1 +depends_on:0:1 +3:hex:"d6248c3e96b1a7e5fea978870fcc4c9786b4e5156e16b7faef4557d667f730b8bc4c784ef00c624df5309513c3a5de8ca94c2152e0459618666d3148092562ebc256ffca45b27fd2d63c68bd5e0a0aefbe496e9e63838a361b1db6fc272464f191490bf9c029643c49d2d9cd08833b8a70b4b3431f56fb1eb55ccd39e77a9c92":exp:0:exp:1:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"3":hex:"3203b7647fb7e345aa457681e5131777f1adc371f2fba8534928c4e52ef6206a856425d6269352ecbf64db2f6ad82397768cafdd8cd272e512d617ad67992226da6bc291c31404c17fd4b7e2beb20eff284a44f4d7af47fd6629e2c95809fa7f2241a04f70ac70d3271bb13258af1ed5c5988c95df7fa26603515791075feccd":exp:2 + +RSA PKCS1 Verify v1.5 CAVS #2 +depends_on:0:1 +3:hex:"206ef4bf396c6087f8229ef196fd35f37ccb8de5efcdb238f20d556668f114257a11fbe038464a67830378e62ae9791453953dac1dbd7921837ba98e84e856eb80ed9487e656d0b20c28c8ba5e35db1abbed83ed1c7720a97701f709e3547a4bfcabca9c89c57ad15c3996577a0ae36d7c7b699035242f37954646c1cd5c08ac":exp:0:exp:1:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"3":hex:"5abc01f5de25b70867ff0c24e222c61f53c88daf42586fddcd56f3c4588f074be3c328056c063388688b6385a8167957c6e5355a510e005b8a851d69c96b36ec6036644078210e5d7d326f96365ee0648882921492bc7b753eb9c26cdbab37555f210df2ca6fec1b25b463d38b81c0dcea202022b04af5da58aa03d77be949b7":int:0 + +RSA PKCS1 Verify v1.5 CAVS #3 +depends_on:0:1 +3:hex:"206ef4bf396c6087f8229ef196fd35f37ccb8de5efcdb238f20d556668f114257a11fbe038464a67830378e62ae9791453953dac1dbd7921837ba98e84e856eb80ed9487e656d0b20c28c8ba5e35db1abbed83ed1c7720a97701f709e3547a4bfcabca9c89c57ad15c3996577a0ae36d7c7b699035242f37954646c1cd5c08ac":exp:0:exp:1:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"3":hex:"5abc01f5de25b70867ff0c24e222c61f53c88daf42586fddcd56f3c4588f074be3c328056c063388688b6385a8167957c6e5355a510e005b8a851d69c96b36ec6036644078210e5d7d326f96365ee0648882921492bc7b753eb9c26cdbab37555f210df2ca6fec1b25b463d38b81c0dcea202022b04af5da58aa03d77be949b7":int:0 + +RSA PKCS1 Verify v1.5 CAVS #4 +depends_on:2:1 +3:hex:"867ac26e11a13b7ac34a42a1e177648692861226effb55bb597fbde10f299bf7fffd6fc8ddb2a46a73b97b67387a461b23e1d65dc119366286979add615b926b9272832fc0c058b946fc752dcffceca12233f4c63f7897cbaa08aa7e07cf02b5e7e3e5ece252bf2fe61d163bce84c0e0368454a98e9fdebf6edbd70b290d549b":exp:0:exp:3:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"3":hex:"3bb7b1c5f3391de4549e2e96fd33afa4d647dd90e321d9d576f3808e32213e948b697ef4fd2dd12923de6ec3ffd625078a57f86af38dc07052bb50547c616ed51fa1352b3ab66788408168d21263ef2d3388d567d2ce8cf674f45491ab2b0319d47be1266bda39e343b2a38ea2d6aaaee6c4465aee1d7bb33e93a1c40a8e3ae4":int:0 + +RSA PKCS1 Verify v1.5 CAVS #5 +depends_on:2:1 +3:hex:"cd810e97dc21095ea7a0238027a7bafd343e01444785ea9184a44a79f80438c41fc0b57aa95693407da38fe5ff0ec1398e03361e51a3dbe134b99cca2df0cef1c444ca54d2b7db2789455b6bb41918c24001fd82fc20ee089de3f34f053699c1c5f7954ce0aaabb9d26fce39d032894152229d98cf64ecafc7089530073c61d9":exp:0:exp:4:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"3":hex:"7b5fba70ec5b521638f182bcab39cec30b76e7bc017bdbd1059658a9a1db0969ab482dce32f3e9865952f0a0de0978272c951e3c015328ea3758f47029a379ab4200550fba58f11d51264878406fc717d5f7b72b3582946f16a7e5314a220881fc820f7d29949710273421533d8ac0a449dc6d0fd1a21c22444edd1c0d5b44d3":int:0 + +RSA PKCS1 Verify v1.5 CAVS #6 +depends_on:3:4:1 +3:hex:"44637d3b8de525fd589237bc81229c8966d3af24540850c24036330db8007e6d19a19486018b2b02074da590aaba9d2c8848c0a2d1b6de4dfaf24025b6393df9228008f83f13cc76a67cfbed77a6e3429342824a0b6a9b8dd884094acc6a54bbc8c8829930c52fe39ce5e0dcd02d9553ef899d26eb6cae0940b63584e2daeb3b":exp:0:exp:5:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"3":hex:"38fc4f6f0430bb3ea9f470a4c0f5cebdabac4dbeb3b9c99d4168e7b00f5eb294ec0ece1908eded1f3e14f1e69d10f9feb425bda0c998af945ef864298a60a675f0bb5c540a7be3f534d5faddff974eea8bffe182a44e2ee1f4f653e71967a11869ee1a850edb03cb44a340378cb7a1bc9616d3649b78002b390a05a7e54edec6":int:0 + +RSA PKCS1 Verify v1.5 CAVS #7 +depends_on:3:4:1 +3:hex:"d03f12276f6ba7545b8fce719471bd253791878809694e8754f3b389f26c9253a758ed28b4c62535a8d5702d7a778731d5759ff2b3b39b192db680e791632918b6093c0e8ca25c2bf756a07fde4144a37f769fe4054455a45cb8cefe4462e7a9a45ce71f2189b4fef01b47aee8585d44dc9d6fa627a3e5f08801871731f234cd":exp:0:exp:5:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"3":hex:"d93a878c1ce86571590b0e43794b3edb23552797c4b8c9e3da4fe1cc4ac0566acd3b10541fe9a7a79f5ea4892d3069ca6903efb5c40c47eb8a9c781eb4249281d40c3d96aae16da1bb4daaece6a26eca5f41c062b4124a64fc9d340cba5ab0d1f5affff6515a87f0933774fd4322d2fa497cd6f708a429ca56dcb1fd3db623d0":exp:2 + +RSA PKCS1 Verify v1.5 CAVS #8 +depends_on:3:1 +3:hex:"b2f2e6e09fd19b0a8c06447554d6a236c69e2b334017488881d8c02ab81d74cae0c64efd50a374998eeec162651975e637cb2ba594250c750a4943253f1db0613e4ce1d50f8e3e968a2a83bd6cb97455ab2ccc77071076b3e211ffb251bd4c1a738b88b2021c61c727c074ce933c054acbcbf4f0c362ec09af38de191686aebe":exp:0:exp:6:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"3":hex:"a853e67f928281d11506c9d39e5ea9b2d742782c663c37d0a7c9e9fe15379cde1e75d94adbfb1ca08691f320af4ff2b0a29a4d2ea10a20cb95d85f3dabac3d56cca9039c851d0181408c00b385fc82cafa4cfa7380d0c2c024fb83fec59d5ee591d63806dcb18b21ea440c3d3f12c1e7795eb15b7ce4c4b288d646cf1d34bdf1":int:0 + +RSA PKCS1 Verify v1.5 CAVS #9 +depends_on:0:1 +3:hex:"647586ba587b09aa555d1b8da4cdf5c6e777e08859379ca45789019f2041e708d97c4408d4d6943b11dd7ebe05c6b48a9b5f1b0079452cc484579acfa66a34c0cf3f0e7339b2dbd5f1339ef7937a8261547705a846885c43d8ef139a9c83f5604ea52b231176a821fb48c45ed45226f31ba7e8a94a69f6c65c39b7278bf3f08f":exp:0:exp:1:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"10001":hex:"e27a90b644c3a11f234132d6727ada397774cd7fdf5eb0160a665ffccedabb8ae9e357966939a71c973e75e5ff771fb01a6483fcaf82f16dee65e6826121e2ae9c69d2c92387b33a641f397676776cde501e7314a9a4e76c0f4538edeea163e8de7bd21c93c298df748c6f5c26b7d03bfa3671f2a7488fe311309e8218a71171":int:0 + +RSA PKCS1 Verify v1.5 CAVS #10 +depends_on:0:1 +3:hex:"55013a489e09b6553262aab59fb041b49437b86d52876f8e5d5e405b77ca0ff6ce8ea2dd75c7b3b411cf4445d56233c5b0ff0e58c49128d81b4fedd295e172d225c451e13defb34b87b7aea6d6f0d20f5c55feb71d2a789fa31f3d9ff47896adc16bec5ce0c9dda3fde190e08ca2451c01ff3091449887695f96dac97ad6a30e":exp:0:exp:1:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"10001":hex:"dd82b7be791c454fbbf6f1de47cbe585a687e4e8bbae0b6e2a77f8ca4efd06d71498f9a74b931bd59c377e71daf708a624c51303f377006c676487bad57f7067b09b7bb94a6189119ab8cf7321c321b2dc7df565bfbec833a28b86625fb5fd6a035d4ed79ff0f9aee9fa78935eec65069439ee449d7f5249cdae6fdd6d8c2a63":exp:2 + +RSA PKCS1 Verify v1.5 CAVS #11 +depends_on:2:1 +3:hex:"f4a990b8d434a5914340c0ca3ca4e4a70856c55e13e938c1f854e91cdef54c6107d6d682a62e6c1ff12b1c6178ee0b26b5d8ae5ee4043db4151465727f313e9e174d7c6961abe9cb86a21367a89e41b47267ac5ef3a6eceaaca5b19ae756b3904b97ec35aeb404dc2a2d0da373ba709a678d2728e7d72daae68d335cbf6c957d":exp:0:exp:3:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"10001":hex:"d8ef7bdc0f111b1249d5ad6515b6fe37f2ff327f493832f1385c10e975c07b0266497716fcb84f5039cd60f5a050614fde27f354a6c45e8a7d74f9821e2f301500ac1953feafeb9d98cf88d2c928413f337813135c66abfc3dc7a4d80655d925bf96f21872ca2b3a2684b976ca768fe37feae20a69eeec3cc8f1de0db34b3462":int:0 + +RSA PKCS1 Verify v1.5 CAVS #12 +depends_on:2:1 +3:hex:"c81f04c79982971fa176d64e8f7f8812f86a94c49e84672ff10996a2d6dfc444a884c7a87c4606a1aab22558894ee59b798b457827f5ee0b0cadcd94371902cc4ddaf97acefed641997717bcb3cc74cd440f0a31e20fb95812cecb740c36d6d1bf07e3641514cfa678aff2a39562ff4d60e02b17583a92bf0c56d66bde9e09f8":exp:0:exp:4:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"10001":hex:"52111f4798da3c11b3c74394358348ab0fc797bde99080f238d33a69b04b08ac2bd767b33872473943e23af27ca32fd568a43a8c7d6cc55b4fbb380212fdfcb60487e20694d4287e233efdf7b04737c0037a592d03077801828b051998c42b9f9e2420063331d5b2349918a64d8b65b21a2011ee7318fcef48aced95b8ddf501":int:0 + +RSA PKCS1 Verify v1.5 CAVS #13 +depends_on:3:4:1 +3:hex:"a97824871770b79da979a111f6decfb1dd11bd946cfa800b008f0ad5aea5aa92e205d27a46c31d4fe6cb909091bd21f082fb75074000ee46c2f3e530d77b34c7c5d6f8453025950d3e0afae1f9752655f5bbea8432e9f1014357ff11b08076179a101e4f9d3f25bffb5e656bf6afe6c97d7aa4740b5d9224cde4dede035a7768":exp:0:exp:5:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"10001":hex:"d5dcd27c74e040ea86f106b63d3275fa7b7e98d2dd701f38ec15fc7301b72df127f6d3bd5571253a0b9e0e719d7d522893896941a1aeccc697912282b5308d829b91905b5dd7b7e1b8fe27e2bd4003b09dfe7fe295f8a43c076c0cb52f2aac067e87de7ffe3a275d21a870c3dfc9b1d06d7f018667de9eb187bdf53d282e5d8b":int:0 + +RSA PKCS1 Verify v1.5 CAVS #14 +depends_on:3:1 +3:hex:"4ce61930c79dc017c2dea0c5085d73a3b0e4a6f341e9a5061a6658af11e5edf95bdad915ac3619969e39bee15788a8de667f92f4efc84f35082d52d562aa74e12cc7f22d3425b58f5056d74afcf162cd44e65b9ee510ff91af094c3d2d42c3b088536d62a98f1c689edcf3ea3fc228d711c109d76ae83d82d6a34dcfbad563cf":exp:0:exp:6:int:1024:int:16:char*:"e28a13548525e5f36dccb24ecb7cc332cc689dfd64012604c9c7816d72a16c3f5fcdc0e86e7c03280b1c69b586ce0cd8aec722cc73a5d3b730310bf7dfebdc77ce5d94bbc369dc18a2f7b07bd505ab0f82224aef09fdc1e5063234255e0b3c40a52e9e8ae60898eb88a766bdd788fe9493d8fd86bcdd2884d5c06216c65469e5":int:16:char*:"10001":hex:"27280b92eab5cbf0d787ff6fa6b0151d6610adfd25116113f2f186f3f8d39736d91ae510ec2bd96f2de135aefda79178138696dcc6d302e4a79ddabbe16e39ab96075776afce863e84a2e6013cb457e4047e22d43f67bf64ae5e1d844a7c12ac696efbb3cda7c0e0aca71f8a7ada9a0547bfaefe1ba2e04058c672c803720dd9":int:0 + +RSA PKCS1 Verify v1.5 CAVS #15 +depends_on:0:1 +3:hex:"224ecd3b630581da948216366c741015a9723c5ea43de67e28454d0a846f54a6df167a25cc500cf21f729aaefed6a71a3bdba438e12e20ad0c48396afe38568b70a3187f26098d6ac649a7c7ea68ed52748e7125225102216236a28f67753b077cfd8d9198b86b0b331027cb59b24b85fd92896e8f2ff5a1d11872c2e6af6ae2":exp:0:exp:1:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"3":hex:"1f7938b20a9cd8bb8ca26bad9e79ea92373174203f3ab212a06de34a9a3e14e102d19a8878c28a2fc8083a97c06b19c1ae62678289d5d071a904aed1d364655d9e2d16480a6fd18f4c8edf204844a34d573b1b988b82d495caefd9298c1635083e196a11f4a7df6a7e3cc4db7b9642e7682d22ec7038c3bad791e1365fe8836976092460e6df749dc032baf1e026684f55936beb9369845c53c3d217941c1f8d8f54a32333a4c049c3f2d527125778032f5d390040d1d4cce83dc353ce250152":int:0 + +RSA PKCS1 Verify v1.5 CAVS #16 +depends_on:2:1 +3:hex:"6ecc722d233dad1aca45e6bc3e1a0b99fb1f89c0ec63bc657e6aaacbf931f267106cff42b712819f341b1ede798964a0b1a5032c198b391111e88d0d7303c02e23fa0137e74e604579a285b2dbc0a23aebdda65c371eb403125bd366e822e72dceffe0d55dfa3155c16283020dc9abb0d150da1aef251484aa49e49e00974dac":exp:0:exp:3:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"3":hex:"339dce3a1937669d9fb14c4f652378861fd5adc4da88eaf833b16020b55a24ddc83b7ae3395a9a49b426bb9a4170cb765b02652faa9594b457aeefdae4f802e93d8e65c687ddc723701465a5ef19249ed5d2617b5121c58557b34eb99a663bbcf4453a6e1db5d88723de449fcf58ca8ef514daf08cfdc71be155bb3d0724df0c0a6fd5aa7737433cc376640b9b8b4c7ddd09776bae0245729cddb56e36f28edad6aecaed0821ec8d843a96348e722bf0a84cf060a793a2179f054138f907d0c3":int:0 + +RSA PKCS1 Verify v1.5 CAVS #17 +depends_on:2:1 +3:hex:"72f0b1ae27e1f5e5bfa15ded204c2c54b47b2420750a3eb5471f9ff98b67c8b5f1a30d3f8d6448562e12ce4deb33a26cfeeae993d6be9e20679d8713c5216870f11276e5f22b0ead2821a7b4dee106fc1e19b13fc9fba5d6e73e4bd93b65a9881a43d5e97ebfb0b357d5d06b21ddbecdbb10626d7748bb9e6e07d49316bbf3c4":exp:0:exp:4:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"3":hex:"8117a6897e14c183737661cf5741350a84ae00495cd9ee8fb033582e559f79701ab424706660515ee5821a69a6850647ec641676a625d1a3899932aaa52161fbc0c0a825db82fde0585b3c9b9c16de43e26da6a30fe5a601dae68bded1e29ec34557b5f6962efb10b9450d6f096655f68e8499cfa16a0adeb9075e7b91851fef84243132d08273d35d01ad89c17e1e6e4deaf1cb233050b275fa9d2cae57e9e1a0e23139267040aa39b6abd8f10fa1cec38ce2183573ddc11626fc262e1a0ced":int:0 + +RSA PKCS1 Verify v1.5 CAVS #18 +depends_on:3:4:1 +3:hex:"f80c94a2b53736978adf041886ad97ab2aeb9e91c08bd4eeef6b2f2b8dd75a99b4506657188bbd7597bd5759121630627c8bf9cc30d90dd488c7a81cabab5350a62fa30abf5523f305b98f2c2c1743ec980cf26ab8219bfd9505b981ab1abbfef733b384519d5259fc5c14577cb6b88fa7f6f332ff6a65b23faecc24342c78e9":exp:0:exp:5:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"3":hex:"6b49553ed964ae196a41ea281f4d2a250ce7d1e7434e45cf6a82f7bed17554f39c3f0241e0364702fcb87475eb0c0839ffd2180890fa05b4bbf31bbfa4bf5119dea0c9f88e1e9617fcdadabc6fa1945136cc66e039b905d78ed365c5806d38aec88b3edfb86c05ff446dbfd51d7cd75cbf8d3b85154c783765386f51637532221f52429db5612dcc034968bb8feab7dc6f5ed1f2feb557f6dd49c980296117be2c4195ec7b6101ea767df9d16a56fc9709b49308a54dab63dbc4d609f959ce17":int:0 + +RSA PKCS1 Verify v1.5 CAVS #19 +depends_on:3:1 +3:hex:"4eb97094bb42aaa58b040bd06a8f324396b9eca9e39359b7039c4a010434ee131a53aebd9f7a55ae58ea7444fa1505a3ec524e054fd408513cddc1ee4c2f7fd95ec4a6f594be1ba39fa1aa933dc0a5dafff5ce44509577ebb3a3e8084c44010aa27321e5a3f646ade99175633b795c0f570b360eeebeefaef15788f80b5cbecd":exp:0:exp:6:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"3":hex:"2b8b794a8621d492eec18a4efd239e0e077c89340a34b0fdbf467f2bf3112c7f33d00ee736f2988af8569c1a74891efbefa839e295fffdf4d908c1ede61a861a4d24b154a09d1b3f923fd2bb7906994cf82a97da285bf48e61f90cc3596f9350ab9b66a216ffca323195bb213f5a77fe8c697475595a1857dbee58128cbf1be7cb220229ce52766fefd88cc129ad5cbbdcd31fb4eede6c4fdd3193a9aaaa54362bcea4082981d9b7c40483814828f3297d95ad933c76f31c47e37a93ffaf0d4a":int:0 + +RSA PKCS1 Verify v1.5 CAVS #20 +depends_on:0:1 +3:hex:"a3edb0f52c6166d7b76e71634761f402337c3e9667549d00cd7877e6055396b35c54c4dffc4c987060178fc10b7e5e827a5c870057002ba6efd31fc4e63a429029be0d6b256b6b653775cb026322743f48e319d053c4aeac34077acb8e0c6c2ef375b2210f8788bd23d24eb0b614de41875b1c8ec56acf18825eaf826691be96":exp:0:exp:1:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"10001":hex:"180630d2f4dc91ddb1159978e278cda7ac4b178e82477f9770c4d2e1c5017d2f222348658044c1be4cda24ce3c9ba3d423536a39bf60324c1b30eabdad700b0982e58072f7e18216e7e4c07e17674ec3eabcfbafce317d2f539f129902d80031ca201a8b325629a96ca4a70b51294c2fddd1d0aca1537d7d8b780e1e62d34be2f98104d876a4990396c8628e6498d9651f468bdf1139664eabe9166efbe909bf87d7305d5f60f1acc3599ed339fcf4e009fbad4059af1a50264cb0a4ec1d23f3":int:0 + +RSA PKCS1 Verify v1.5 CAVS #21 +depends_on:0:1 +3:hex:"ac58fd024208d7f045d81a56cd55aad40ab86b0d216ab55136c7027aca23ea13480a52c0dacce0d98139b25965aa4ff76a41dd92037195d24bc0750d52cb3467b48b7b3e71d852c5f82bd9ee85a8388ead5cd8bc38c3d4792e8daa9734a137d31963e245ad3217fad235f7dfd5584de0fe91c4526568588e08b60bdf1badd99f":exp:0:exp:1:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"10001":hex:"a142b0d9456f8f4772675265a08613a66c416bd1ae712975c69d9ca5fb8c1be9c24359a04fd15460bf6136a8a11f13e3ce2de2171524f10cb715f0d71e3db15281ab99eadbe86cf8c5c518162c638ef27a4f7bfb4a1a3873f3c384a5b1c3b4966c837b9d8d192ac34e03943b7ae191355aa1ff3b9cd041bb2668f1f81cf0d015b3d3608cd9ac79398212c0f132f1bd45d47768b999fcf3c05fe2069593ceecedc851a7fc465abcfef0fabba9b9460153f6ba8723a5c6e766c83a446aef3ee327":exp:2 + +RSA PKCS1 Verify v1.5 CAVS #22 +depends_on:2:1 +3:hex:"027f767928a5821e2723d6f36c43e6b498b6f0b381852571794a096bd49f1c36a4d7bacec7ec402c24b970163169173bb930ec7fdc39bc9457dfc4ca051f5f28a64de1bbe007c22e8368ff9b117dbda17efd2fb73434bbbf5a4158df56813b8c904bb2e779de504dcd974a291568210d6f85810291606a1c0cd88d51ceadf98a":exp:0:exp:3:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"10001":hex:"0676e64daaa18f4af46e9dfbe234db389b8a527b0fe1db97eb7f404e3155226cba70d318800f83160fa1aa19916e5c09f079331079f18cb8ab1a4b884cb28501824974f683ed2b9babae9f8c15bea30802805c6b2152119764811bbf5f3994d2e97fa2fe8c5ab15a23c14d7ae56be00eaa8bc26678481ff5ba59b0acfb0e43341bff9fc638e5625480a73dbc5d8d13bd2b9e64037c6b79df0c60869980c6a22ec46f80fb859cb4ee5d2032ac1fe538cfd85c70a7f33b4af50a93395917c2cfb6":exp:2 + +RSA PKCS1 Verify v1.5 CAVS #23 +depends_on:2:1 +3:hex:"06dcd9d4c056b6a45b9ed2ae5f6c1cfa43aae06fe01ee098264aa7a80e901abbcf9a505e55f9a352ef0c078d48249b8298e57ea21bf0e423c3bf69002acfa541ca05007c704bc79cee7a80e1107c7b28d2b2aa6dd093b28efe9642519952a4a95ee49235f9924a0ac0aee5b2a1bce47459d70cd6e75074614199dca44561407c":exp:0:exp:3:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"10001":hex:"5e08f399258e6de075b67a0a6a822ceb21b1eb7a0342eca6a4295739f644547dee3456243cf32bd6ea6f357c88632508457130f3dae04f7806efaed43d1d501e16c961dfbd6c71a42b480e95c7027f8275063d05a9aac3eef0520867b9896ebe8ec358f7d121beb4e61ddfdc3dcd835dfe265f2ba68d300ef566ed1284f9f3d7b1af363ed47bfa2e5f0492925444df7e5fcb1e79e690c746117650b543a5e82c39553552f0f44e617b5cf773c533050f4129e893ac22af69b1eb9afb4b5ba5f5":int:0 + +RSA PKCS1 Verify v1.5 CAVS #24 +depends_on:2:1 +3:hex:"1240028c6d7ab3992ada0e5ca55ee4f3d62f8de575302d5861d73685423c2e6a6d6fb3be090fbc2a701821b6d8fd5e8233f794b6549cd0bb52b390ac31478307bffa91a9bd9c1bf93ffc846356fef008ebee4bb3ee148e0fb1893d188e4934d0d088a433d14a596c5f2e3e49648a22edc6bdbcc58dc1edbd440046b3a169ca2b":exp:0:exp:4:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"10001":hex:"a003ae9cf0704d58763b214f20446ecc4099c566f25384e28d0dd6540c58705fc8d0bfe1ceaa06096ed1e230146edb82056e39e6727abec09f25e44079b6ce1ca2c6a540dec7aa34444d7d435f41e5fca9b0bba62759ae2780638e5160e031bb60409c2e85674ac7a776b444b37b9d7f4dbaa557e88b8562a584f2dbe90729b241aede95dfcc7e05b10deef06255cb89f0e7ccff23354818756a1f8bb9f00fd18f6cd22ca1b4bfc38027562bb37562c77c7883b5d735170d75521195fd3f2bd3":int:0 + +RSA PKCS1 Verify v1.5 CAVS #25 +depends_on:3:4:1 +3:hex:"67922a8b9cbc95cf7c555ff2d73cfc62ee04c3f0df9bfc8f64293a58bd3bebd2eb212d711f94e35c729d0873d6b244914d21bd0e59b23089b38740e43f480e8f407d090ac93b08a57403968b55e78cfe31eee6e4ecbacf834168fe89b6b8454fce6e675e80f82b33e850ae3f3d24fd320335e37981fd000576941b4f08d4ba99":exp:0:exp:5:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"10001":hex:"2c6b301852cc55a993a933e2c080eb9dabfe19e9dc3571066caeabed1492d3501cd838de1c01784932df7a5ad5bbfb48c78f53a45f76e9812d046f23bd968495ef7e981e5add4acfc538fe33a5205de74bb37d3d9b6b87b2d174e85a73f216fd67d5738fc469dff7ea6b852e8dd08bc8df036597372d4d51185e6f47a45fbe1b9bdb06a4018783425ec95294de41f27235ad3b3263a890b8b62b17410a9bb08673393ff205a866ee2057e99c6517c6bbc84f8d87717b83d6f64de7ee215e1e8d":int:0 + +RSA PKCS1 Verify v1.5 CAVS #26 +depends_on:3:1 +3:hex:"1428b4a449698a994ef84c46a517c3aa6359c48e4264ef65f1f69d77ae26133e17edfc103de416fffb4f2bfe865b434544a418f6e2faca00a165d443f0663ff64080154614f7194057d8b5f1f33934cc9fc2314cf86d4fdad4892bf0d3058f7f37ebe98ef52bfb240b9ad369153afe081bbcf9d7ae43e8ba336b8ac57e8a6da0":exp:0:exp:6:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"10001":hex:"8e10a1ae470e6e57a8d234185f78fdb600cc636c41565a9f3694a84ae102f6251984f54d11a7785fdcfdfaf80a821e05d57ef6b8edc03d9076755779322fd53eb98c805da77dc9316744e393c2fecd291a7e6043b1ca89fd8248f661e1d53110211b91edb41b31e848cde1115d8afd9963ebcc36aff5a27085949f0781bc69167c140ecfe71c44aacaf4123e557eaf2b528c6d0ea875b4ceefa942fe338af8df10562c438af04cd7521da912b3e3899cef0d75722161be6abed5e4e9009dbf40":int:0 + +RSA PKCS1 Verify v1.5 CAVS #27 +depends_on:0:1 +3:hex:"4871adc05f6b3ecf296680b0dd8d86715b0d5264c064008037dc410512520b5f193c8f4d21eb6c42e10d220c0275c9b3751f03a4096e2f0e3db9df8d52068c06a51589d23ca1361e9fe27691e95663301ec1407fbf73aee99cc92362eaf6994b95038396d815052a0aef6489bbb7bcb0fffdf13f0af9e7d9fd14f6ce00ab98f7":exp:0:exp:1:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"11":hex:"180caf03781b391aacebe5b3f5e1d3b01c68a00df4ecfb6c4bf14217aed7cfca0adac099ec1d6e1f0b43b09b86788533fee6691d773807af0df6cc3bbdde3cf34bf5b848fa59c8bc10227cc3eba3452a85e0520fccdb2d8d32dd99672d302756a2d7f7f2693db3a48be17bd34d9d891f4ba44449c5bad1de91b788f524500a7703cccbaa77b9fe8791f5c8aa7b8f055336f28fcfc01733712e33cfb3d33fe71ddb9ced2a31931ec38007f5ad4a0d19acc428124b0e5ee6e0746fb33c1a4d90c8":int:0 + +RSA PKCS1 Verify v1.5 CAVS #28 +depends_on:2:1 +3:hex:"3bba64de38438a71b95ab9c94539d5870c1fb08d7a9937600c00e9d063438edc97e625d0cd4b1eb00c31c9d94c7a0fe6d03160d1b6cbec5acdad16ada6ef253fee603df9faca8f98a477cc5456f3dfbf6414dbf19f3832e227ce291780188881e82e96a2e84744f12a34a9808a2daedc6fd00b345c6772bec26a095719451e6a":exp:0:exp:3:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"11":hex:"8c846e75e32ce5f9964bdd8f6dcf1d2996a646b233bcf1bd6394e13e856691b89bedd18290a0f9f7c90dca307271b3108e795340490513b25e6789e93722c65ec064b4c43457295a31d1f07dd605e133fd6eaafc58cda132df2939f5f693e0205af34550afaa137f3e482885e50dfb48333a15c0821e7a19642acdddc6fea3c7487c691246a2b083dac439889d5ae741b7e08c47937530b4b069f1a260cd07fe4a0ddd530ab11534fb805e9b562118ee0e97932966008aadfc83f3b8a10de8ee":int:0 + +RSA PKCS1 Verify v1.5 CAVS #29 +depends_on:2:1 +3:hex:"f7857ce04bf4292ea1755f9e587822372f4dcdf10bddfc0ff498a8af60ae94a0b482e873085c1cd52a5d181ce6b99a1f8520d74b947d65f3e7e358e8ddc4ac4ae465e39d408eee1f09865159733f83f553cd93cfde1c114fb3e32cf51cd418359016b3867df467b645d752808671a4609f3c49a67023c9ca617e6cffa544a10a":exp:0:exp:4:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"11":hex:"9677300bbee003be3c445634f8ed5beb152b63f46f84cf5a8e721e0fafe8f3f7e99a6d50741f23f449d3026da3e8a7ac36be99ab44831803486ae552f7aa01f075287829b231d2d0840908e09081ae177ed888fe46a9d937a0871eb5d52ec541c8411c4cbf7efea6ca213b12cea513b0739eedca7c9473e10a7796936f4eaa0c5d3a9013ca5536781ac68eb2ca5779144de23da2e9875114aca885b3219dfc292d73940c5992ea3c4882889e7543430652860e441a01a45d9f4005a012421493":int:0 + +RSA PKCS1 Verify v1.5 CAVS #30 +depends_on:2:1 +3:hex:"ca312774f2756ac2019f213a01a63c9a0b4a49ccafecf25e97a4c632668e3c77e664f4d7635241f25205e50c37061b02c546db8346fa597c3da8cfd44a827c5a4ff4ecfcd1797b39a1b215d9bbb93fdb6eb35bafbda427a5068888a6e19f86224b0897490491207e35ce39085668b10b4fb851b7dd9465c03869790ef38a61b5":exp:0:exp:4:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"3":hex:"a202c33eb831b9d8e818b6c3bcdb42818e1d9c22a06ddd73a17a21e49d18cda44df349a066477cae068e1a5d2b518b0885e889ef796ca9e6f42a69ac755b8a6405fbaef93fe0130d98de35d689addfee3eecd26658903f774bda481c3f40ee0e9569a3c3e2da7ad576c7de82159d933e36fa29cfef99367005e34ab5082d80f48276d37dabc88dbb023bd01585329d2ccf417f78ec508aaa29751007d31f1669296b981d44c8fa99130c5df7a071725b496859314aaf9baf0ebc780355914249":exp:2 + +RSA PKCS1 Verify v1.5 CAVS #31 +depends_on:3:4:1 +3:hex:"2abe079077290ceb6c80ac5c61062ce8da814b1fb99a1a9fb2860ed900e6541856ec64bf19c0d9d1cc2280b7cc50af3e3d2ad8e044945d44761ca60891dd72bd6aa26a33274ffcf7ae7d661b5e651135fcff21aaf06b4a2db18fe5827e0243884f2841760b9f1c65fbda870f7f0cfbd6ff484f0825e688614928f2d12d1e7080":exp:0:exp:5:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"10001":hex:"402631f3cddfb02cc4d9cb58ef1ab6726bd787a50e12e98567c9702bfdf47af85904aec5a2f6c5df9a10f08f90f93728eb090ae2ac21ded9f38faecd8195f3eb3d4107521b1cee956e7a214245b038adae912fa35ec97cb3bdc41352e8aaff80173561284cb740f999a3cd6653a6c3d5a3f911a416f41e2155083982c99eb5998a0a74d77f1ae999d901ee24a7f2c424179a3f92b07dc0b3498c1884e60677bee0175e810b426c4ad008d2743cd19b00b33177bf8be3fed7f7406e1bce0c2ea3":exp:2 + +RSA PKCS1 Verify v1.5 CAVS #32 +depends_on:3:4:1 +3:hex:"da9505809dc92cfd8e01a1857dde52df6677c40d98f4577c1659ca7d3e9f01f9a809065f51b54fe2f9723fe2c9d1eea7397f2d5531d1c51c6ea100b028596bf9f24dd90be14eab58f07b4f24a35b073aeb29ecde4a6f320237d7adbdc43d94f87e08866b95bbcac83dc7db3553a42400441f088e2bf6259539a2da8b5a74065f":exp:0:exp:5:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"11":hex:"57edd0560df9840a25c28ff6d254e432395a5cd2d92248b3b44d7eab0fc65b3c4e545a916a8e90ce89745119db9ec9799aa8890f5250fb589cfc12dac1b6e406a39bc3b3663892da5354ba453cbd5e4c89bdce82d0ffe97052a03a5c3308819c1139ebc780c13cf6dc1477faf734abcb1db3fafaed6f22885c9c0222ff5deacb8cc6d027f2e959c3075011b382e88c4b27b83b4f2e6fda022e331c3602d19f5ac7bccfe95ea1e93d736dbd918ae5b1f468cd0b5b536a2f918d5e27a0757e75b7":int:0 + +RSA PKCS1 Verify v1.5 CAVS #33 +depends_on:3:1 +3:hex:"d0cd038c65b3acca45822eaf91ea5176e82043268876dec0b62e2abd619023b7023abc67c6b823cfef5447b8772f985ff7910d6cc87e6c23688ac6de1fee40bbe2da1a92770de92adaa427ace02fee571a0a0176fceb0c8f3eb72dde839ab201395625f5c0db8641ce19d7711212dec61733262c6ce4476c025e67a3d5bc01f3":exp:0:exp:6:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"11":hex:"2f30629c1117d013bb36e6099dee931dcaf0a1032b07ec23e2b262898a8945e569c9573d81e22bb0a5f8a28b0d7b8ff01367dd7f089c68ed1daa11cf53a96ee91b38e6b839b6e90bea34d14b78f5d2c7629b68c5b4f2ecfff66b483b2233cb14f95df533c867a2b610aebcdbb7ea3109aaf2f5762ab3edc2571deccc7da0c9a5b443ca2b924c0f18de7bbb736a08fed3916795018a436a3ae62c85d554a53a6d48623908e06e7d275f4251d3b3bd530bd11e155dcf2b5c2adf030cdf931ae749":exp:2 + +RSA PKCS1 Verify v1.5 CAVS #34 +depends_on:3:1 +3:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:6:int:1536:int:16:char*:"a59d9b7269b102b7be684ec5e28db79992e6d3231e77c90b78960c2638b35ef6dbdac1ac59e7249d96d426e7f99397eabc6b8903fe1942da580322b98bafacd81bb911c29666f83886a2a2864f3552044300e60cedd5a8c321c43e280413dc41673c39a11b98a885486f8187a70f270185c4c12bc48a1968305269776c070ef69d4913589a887c4d0f5e7dd58bd806d0d49a14a1762c38665cef4646ff13a0cd29c3a60460703c3d051d5b28c660bffb5f8bd43d495ffa64175f72b8abe5fddd":int:16:char*:"11":hex:"0b4d96f411c727a262d6d0ade34195b78603551061917d060f89add47b09dfe8715f4f9147d327dc25e91fe457e5d1a2f22cd8fe6fe8e29d2060658307c87a40640650fef3d4b289a6c3febc5a100b29a8b56623afb29fd3c13ea372bf3c638c1db25f8bd8c74c821beec7b5affcace1d05d056a6c2d3035926c7a268df4751a54bc20a6b8cfd729a7cba309ae817daccbef9950a482cf23950a8ca1d3a13ddb7d8d0f87ad5587d4d9ebe19fe93457597a7bdd056c2fd4cea7d31e4a0e595a7b":int:0 + +RSA PKCS1 Verify v1.5 padding too short +depends_on:0:1 +3:hex:"AABBCC03020100FFFFFFFFFF1122330A0B0CCCDDDDDDDDDD":exp:0:exp:1:int:1024:int:16:char*:"9292758453063D803DD603D5E777D7888ED1D5BF35786190FA2F23EBC0848AEADDA92CA6C3D80B32C4D109BE0F36D6AE7130B9CED7ACDF54CFC7555AC14EEBAB93A89813FBF3C4F8066D2D800F7C38A81AE31942917403FF4946B0A83D3D3E05EE57C6F5F5606FB5D4BC6CD34EE0801A5E94BB77B07507233A0BC7BAC8F90F79":int:16:char*:"10001":hex:"6edd56f397d9bc6d176bbe3d80946fc352ad6127b85b1d67d849c0a38cbde7222c5fafbb18dcef791178a8e15f5c8cd91869f8ca4b758c46ce3e229bf666d2e3e296544351bcb5db7e0004f6c0800f76a432071297e405759d4324d1cf1c412758be93a39f834e03dee59e28ac571ce2b0b3c8fe639979f516223b54027340a5":exp:2 + +RSA PKCS1 Verify v1.5 reduced length encoding +depends_on:2:1 +3:hex:"7369676e617475726520746573740a":exp:0:exp:4:int:1024:int:16:char*:"A1D46FBA2318F8DCEF16C280948B1CF27966B9B47225ED2989F8D74B45BD36049C0AAB5AD0FF003553BA843C8E12782FC5873BB89A3DC84B883D25666CD22BF3ACD5B675969F8BEBFBCAC93FDD927C7442B178B10D1DFF9398E52316AAE0AF74E594650BDC3C670241D418684593CDA1A7B9DC4F20D2FDC6F66344074003E211":int:16:char*:"10001":hex:"5B56096ECADA4DAC299FD3D6091C1BE4D7C4210086E61ADA6FFC267A690034DAFB3734035880B9E71CEB0331C32C8DE1A254D777DFE3C848AC7764907602452EC16FD8EB3664E2E682DB3AA8979059BFADFE6192D9029844C8CAF310552717DD5B5B36A9910CFABE5C54AC16F3A3461DEE730060981BD9B47EE8D6644963B7CA":int:0 + +RSA PKCS1 Verify v1.5 non-reduced length encoding #1 +depends_on:2:1 +3:hex:"7369676e617475726520746573740a":exp:0:exp:4:int:1024:int:16:char*:"A1D46FBA2318F8DCEF16C280948B1CF27966B9B47225ED2989F8D74B45BD36049C0AAB5AD0FF003553BA843C8E12782FC5873BB89A3DC84B883D25666CD22BF3ACD5B675969F8BEBFBCAC93FDD927C7442B178B10D1DFF9398E52316AAE0AF74E594650BDC3C670241D418684593CDA1A7B9DC4F20D2FDC6F66344074003E211":int:16:char*:"10001":hex:"2FCF7FC1B60B3C083872B1BD9C666745921951A8A9E099FD629675F620B670713519C4A97B870591B97FE5C5DB2FC2A0A3FCB0016536D1205AA32BA8BFCF54ABD542C02F7FCEA3C3531D7A87C82ED5B151A9599F1BDB070A905F5B721DE3C22F8AC35034C607920CE0699D7F79E5913915F3A01856B5D30F9E68F0CD7856D40F":exp:2 + +RSA PKCS1 Verify v1.5 non-reduced length encoding #2 +depends_on:2:1 +3:hex:"7369676e617475726520746573740a":exp:0:exp:4:int:1024:int:16:char*:"A1D46FBA2318F8DCEF16C280948B1CF27966B9B47225ED2989F8D74B45BD36049C0AAB5AD0FF003553BA843C8E12782FC5873BB89A3DC84B883D25666CD22BF3ACD5B675969F8BEBFBCAC93FDD927C7442B178B10D1DFF9398E52316AAE0AF74E594650BDC3C670241D418684593CDA1A7B9DC4F20D2FDC6F66344074003E211":int:16:char*:"10001":hex:"3C27512A8FDC973D856C0F288BE27D00D54FC0B359C520DA73A05156D98CDD6A83E6657BFA81D7B9716EEDFD98C08CD82F399298782782AE341D9AABCBB6B5F9C6552DE1D8B93047E1135032653F4F65A8937352E903864E008429E049680E3AA80F5DE1C7408C403011CEF4A3ECA549C027C8954BFBCA21F2A41C3EB0278029":exp:2 + +RSA PKCS1 Verify v1.5 non-reduced length encoding #3 +depends_on:2:1 +3:hex:"7369676e617475726520746573740a":exp:0:exp:4:int:1024:int:16:char*:"A1D46FBA2318F8DCEF16C280948B1CF27966B9B47225ED2989F8D74B45BD36049C0AAB5AD0FF003553BA843C8E12782FC5873BB89A3DC84B883D25666CD22BF3ACD5B675969F8BEBFBCAC93FDD927C7442B178B10D1DFF9398E52316AAE0AF74E594650BDC3C670241D418684593CDA1A7B9DC4F20D2FDC6F66344074003E211":int:16:char*:"10001":hex:"24BEB8502F24E0D11D9C10CEE4435EA972CEC93C23936E815ED2DF41BECEDDE889AF85BBEAF1B8C6928913AC523EA1D6653832E9D4E74F55B76771EA84F5A607342C341A14AB258019F38DBAEE4B967C8C8D26D6AF2583D32988471BA38751B6A67BA3D1147619C266A9AAC34244740BB59CD9DB3AFF19438B04C619AB719123":exp:2 + +RSA PKCS1 Verify v1.5 non-reduced length encoding #4 +depends_on:2:1 +3:hex:"7369676e617475726520746573740a":exp:0:exp:4:int:1024:int:16:char*:"A1D46FBA2318F8DCEF16C280948B1CF27966B9B47225ED2989F8D74B45BD36049C0AAB5AD0FF003553BA843C8E12782FC5873BB89A3DC84B883D25666CD22BF3ACD5B675969F8BEBFBCAC93FDD927C7442B178B10D1DFF9398E52316AAE0AF74E594650BDC3C670241D418684593CDA1A7B9DC4F20D2FDC6F66344074003E211":int:16:char*:"10001":hex:"13172EF7362CF421103FE1893429FAE85F83636BA8AF545252599A39892E62CEC317DC47C1D6B19328B63CDFD02FA0B49CE7980504635251FF08C0A1308C64D6466DFBF1EF2BA49EFDD6C2C888A30870EC2DC0FA4D67FDE6631C85ED2CEF8EEBF5578C974CBA4A04034D9B579B420D6CA93E4BFC09E014542A0EFB902AF90C5E":exp:2 + +RSA PKCS1 Verify v1.5 non-reduced length encoding #5 +depends_on:2:1 +3:hex:"7369676e617475726520746573740a":exp:0:exp:4:int:1024:int:16:char*:"A1D46FBA2318F8DCEF16C280948B1CF27966B9B47225ED2989F8D74B45BD36049C0AAB5AD0FF003553BA843C8E12782FC5873BB89A3DC84B883D25666CD22BF3ACD5B675969F8BEBFBCAC93FDD927C7442B178B10D1DFF9398E52316AAE0AF74E594650BDC3C670241D418684593CDA1A7B9DC4F20D2FDC6F66344074003E211":int:16:char*:"10001":hex:"65DD518F63A2E289C035E9F2A9927BF5A6A74FF6FEFFF61AFCC52ED4A8A5B93534A3AD1709136306EE1379B47A4863BC6ED879E92CD6F99AA5B5F106102BDAE8DAFB15CF6EF00CB5FA63967706528DEE8876F3D04E8D75533009C73DA4C5744D20FFDB18EA78EE4D5D9D6F7BD3AFC2AD9A0EDDD56AA40AAEF789E6FB12AB6DE7":exp:2 + +RSA PKCS1 Sign #1 (SHA512, 1536 bits RSA) +depends_on:3:1 +2:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:6:int:1536:int:16:char*:"c8c67df894c882045ede26a9008ab09ea0672077d7bc71d412511cd93981ddde8f91b967da404056c39f105f7f239abdaff92923859920f6299e82b95bd5b8c959948f4a035cbd693ad83014294d349813d1ad57911a6355d0731fe3a034e9db":int:16:char*:"f15147d0e7c04a1e3f37adde802cdc610999bf7ab0088434aaeda0c0ab3910b14d2ce56cb66bffd97552195fae8b061077e03920814d8b9cfb5a3958b3a82c2a7fc97e55db5978b47a922156eb8a3e55c06a54a45d1670abdfb995489c4d0051":int:16:char*:"bd429bb7c3b00bbea19ba664c0f8172d1a73c3cfa05e2ed656d570c1590918bb7e372ed25e2cd71395ba0a9b1a30f3ee012ffb0546cab8e3581fe3e23f44ab57a8aee9717e71a936a580fa8572d450fb00339a6f6704b717df0c149a465bab768c61500cd93b61113ff3e4389167f7b2c8e3c0da2d4765286bee555b0bcb4998f59b14fad03180a17c8b4f69bcd1234f4ae85950137665ac2ba80b55cc9b1aafb454b83771aa755acd2a00e93ddb65e696dbed8bdca69fb5e0c5c2097b9cfe4b":int:16:char*:"3":hex:"93b6fa99485c116ca6efdd4202ea1cf49f4c6345fae692584413743ce5b65510e8e4690aee9a19ea1ff10d57f22aa3548d839f28a8525a34354e9e58e0f3947e056ce2554e21bf287e220b98db3b551258cd42b495e5d1a3bbc83c9d1a02f2a300ef6d866ea75108e44ebb3e16b47df2f6de28feb2be3874dbbf21599451082d86e9f2f462575a8185c69aa1f1fcb6a363c5d71aeba2103449eaf3845285291148d5f78d1646b8dc95cbcc4082f987d948b0e7d4e80b60595f8a7517584e1643":int:0 + +RSA PKCS1 Sign #1 Verify +depends_on:3:1 +3:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:6:int:1536:int:16:char*:"bd429bb7c3b00bbea19ba664c0f8172d1a73c3cfa05e2ed656d570c1590918bb7e372ed25e2cd71395ba0a9b1a30f3ee012ffb0546cab8e3581fe3e23f44ab57a8aee9717e71a936a580fa8572d450fb00339a6f6704b717df0c149a465bab768c61500cd93b61113ff3e4389167f7b2c8e3c0da2d4765286bee555b0bcb4998f59b14fad03180a17c8b4f69bcd1234f4ae85950137665ac2ba80b55cc9b1aafb454b83771aa755acd2a00e93ddb65e696dbed8bdca69fb5e0c5c2097b9cfe4b":int:16:char*:"3":hex:"93b6fa99485c116ca6efdd4202ea1cf49f4c6345fae692584413743ce5b65510e8e4690aee9a19ea1ff10d57f22aa3548d839f28a8525a34354e9e58e0f3947e056ce2554e21bf287e220b98db3b551258cd42b495e5d1a3bbc83c9d1a02f2a300ef6d866ea75108e44ebb3e16b47df2f6de28feb2be3874dbbf21599451082d86e9f2f462575a8185c69aa1f1fcb6a363c5d71aeba2103449eaf3845285291148d5f78d1646b8dc95cbcc4082f987d948b0e7d4e80b60595f8a7517584e1643":int:0 + +RSA PKCS1 Sign #2 (SHA256, 2048 bits RSA) +depends_on:2:1 +2:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:4:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"5aee2b9dbc02a6a2d87ff64a64165dc0b9ce70c79bab2d287939e2601c3223e0493988d5468731ae4edc7d5f5d449335c204fdb0e192c1915c9d694d3a61c3be14df79c4b34d6ac73707829024d263c94f9107fa93f3783de3965522336e18d1e01a142b5103451bb97839eaf2f44703a63050a36b78aef4072ea1a8daaaf1a2918fc03ee957a9c09efdc7287bcb4d6aec4723290294b249b3e3dc63157b560ad9c867323a73ebeb360cc9e482111643b0d86c4e33dcf170155590f0eba7d170789e84de336b7fe2f6cf485ddca94607a4ff379fc49d375c730249dd1a210e7dccd762d1c23c7532e769c6aa88e38e8654ff90f7b34df4c07ba90e89099ec1ed":int:0 + +RSA PKCS1 Sign #2 Verify +depends_on:2:1 +3:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:4:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"5aee2b9dbc02a6a2d87ff64a64165dc0b9ce70c79bab2d287939e2601c3223e0493988d5468731ae4edc7d5f5d449335c204fdb0e192c1915c9d694d3a61c3be14df79c4b34d6ac73707829024d263c94f9107fa93f3783de3965522336e18d1e01a142b5103451bb97839eaf2f44703a63050a36b78aef4072ea1a8daaaf1a2918fc03ee957a9c09efdc7287bcb4d6aec4723290294b249b3e3dc63157b560ad9c867323a73ebeb360cc9e482111643b0d86c4e33dcf170155590f0eba7d170789e84de336b7fe2f6cf485ddca94607a4ff379fc49d375c730249dd1a210e7dccd762d1c23c7532e769c6aa88e38e8654ff90f7b34df4c07ba90e89099ec1ed":int:0 + +RSA PKCS1 Sign #2 Verify (Fail) +depends_on:2:1 +3:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:4:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"5aee2b9dbc02a6a2d87ff64a64165dc0b9ce70c79bab2d287939e2601c3223e0493988d5468731ae4edc7d5f5d449335c204fdb0e192c1915c9d694d3a61c3be14df79c4b34d6ac73707829024d263c94f9107fa93f3783de3965522336e18d1e01a142b5103451bb97839eaf2f44703a63050a36b78aef4072ea1a8daaaf1a2918fc03ee957a9c09efdc6287bcb4d6aec4723290294b249b3e3dc63157b560ad9c867323a73ebeb360cc9e482111643b0d86c4e33dcf170155590f0eba7d170789e84de336b7fe2f6cf485ddca94607a4ff379fc49d375c730249dd1a210e7dccd763d1c23c7532e769c6aa88e38e8654ff90f7b34df4c07ba90e89099ec1ed":exp:2 + +RSA PKCS1 Sign #3 (SHA224, 2048 bits RSA) +depends_on:2:1 +2:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:3:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"9d768b8b31421f9d9ced890aafaf8b3468656419049ed268f6e1992066f45dc3e4cd349e8c5ed5a06e4ef5badaba064ba94907dfedf3d708becaf44ae9b27c3866d329311ba93e8ddc7fc284fba05d1bb84fb1e060a5b76b7fa515cfcd2c8144474623672703cac1e15ff4fdf8ef19d365c51ba86e60f4cbbcd07f956060625751bfbecc47945646459cadaddd900603a8149a93b31a6d432e1da1a67eb765f5b2f0bd1adb9af12d731c7b02931b42dbbfd8c7cecde76b817e96f664147a2c5091c6ce4dc562c5f57159d6f9dc9ba2daa212db56677839621bd4805dde62955fb2d0cc2c448109d10ecc6206ea81f0a02e1646471358f3ec146cd3c75f2d390b":int:0 + +RSA PKCS1 Sign #3 Verify +depends_on:2:1 +3:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:3:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"9d768b8b31421f9d9ced890aafaf8b3468656419049ed268f6e1992066f45dc3e4cd349e8c5ed5a06e4ef5badaba064ba94907dfedf3d708becaf44ae9b27c3866d329311ba93e8ddc7fc284fba05d1bb84fb1e060a5b76b7fa515cfcd2c8144474623672703cac1e15ff4fdf8ef19d365c51ba86e60f4cbbcd07f956060625751bfbecc47945646459cadaddd900603a8149a93b31a6d432e1da1a67eb765f5b2f0bd1adb9af12d731c7b02931b42dbbfd8c7cecde76b817e96f664147a2c5091c6ce4dc562c5f57159d6f9dc9ba2daa212db56677839621bd4805dde62955fb2d0cc2c448109d10ecc6206ea81f0a02e1646471358f3ec146cd3c75f2d390b":int:0 + +RSA PKCS1 Sign #4 (SHA384, 2048 bits RSA) +depends_on:3:4:1 +2:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:5:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"40dcc96822e5612eb33f1dca247a35109ba3845c7a3d556a60e656624bf1c103d94686ca7379e9e329ccd1b19b52bfd48b608df9f59a96a82d3feb0101096dbcb80e46da543b4c982ac6bb1717f24f9fe3f76b7154492b47525be1ddcaf4631d33481531be8f3e685837b40bdf4a02827d79f6a32374147174680f51c8e0d8eed9d5c445a563a7bce9ef4236e7cfdc12b2223ef457c3e8ccc6dd65cc23e977a1f03f5ef584feb9af00efc71a701f9d413b0290af17692cb821a1e863d5778e174b1130659f30583f434f09cb1212471a41dd65c102de64a194b6ae3e43cd75928049db78042c58e980aff3ea2774e42845bcf217410a118cf5deeaa64224dbc8":int:0 + +RSA PKCS1 Sign #4 Verify +depends_on:3:4:1 +3:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:5:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"40dcc96822e5612eb33f1dca247a35109ba3845c7a3d556a60e656624bf1c103d94686ca7379e9e329ccd1b19b52bfd48b608df9f59a96a82d3feb0101096dbcb80e46da543b4c982ac6bb1717f24f9fe3f76b7154492b47525be1ddcaf4631d33481531be8f3e685837b40bdf4a02827d79f6a32374147174680f51c8e0d8eed9d5c445a563a7bce9ef4236e7cfdc12b2223ef457c3e8ccc6dd65cc23e977a1f03f5ef584feb9af00efc71a701f9d413b0290af17692cb821a1e863d5778e174b1130659f30583f434f09cb1212471a41dd65c102de64a194b6ae3e43cd75928049db78042c58e980aff3ea2774e42845bcf217410a118cf5deeaa64224dbc8":int:0 + +RSA PKCS1 Sign #5 (MD2, 2048 bits RSA) +depends_on:5:1 +2:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:7:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"6cbb0e4019d64dd5cd2d48fa43446e5cba1a7edbb79d91b199be75c7d3e7ae0820c44d3a120cd2910f73cbb315e15963a60ea7da3452015d9d6beb5ac998fddbd1fa3e5908abc9151f3ffb70365aaee6fb0cd440d3f5591868fc136fae38ac7bcdb3bde3c6a0362dd8b814f7edadd4a51b2edf2227a40d1e34c29f608add7746731425858eb93661c633b7a90942fca3cd594ab4ec170052d44105643518020782e76235def34d014135bad8daed590200482325c3416c3d66417e80d9f9c6322a54683638247b577445ecd0be2765ce96c4ee45213204026dfba24d5ee89e1ea75538ba39f7149a5ac0fc12d7c53cbc12481d4a8e2d410ec633d800ad4b4304":int:0 + +RSA PKCS1 Sign #5 Verify +depends_on:5:1 +3:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:7:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"6cbb0e4019d64dd5cd2d48fa43446e5cba1a7edbb79d91b199be75c7d3e7ae0820c44d3a120cd2910f73cbb315e15963a60ea7da3452015d9d6beb5ac998fddbd1fa3e5908abc9151f3ffb70365aaee6fb0cd440d3f5591868fc136fae38ac7bcdb3bde3c6a0362dd8b814f7edadd4a51b2edf2227a40d1e34c29f608add7746731425858eb93661c633b7a90942fca3cd594ab4ec170052d44105643518020782e76235def34d014135bad8daed590200482325c3416c3d66417e80d9f9c6322a54683638247b577445ecd0be2765ce96c4ee45213204026dfba24d5ee89e1ea75538ba39f7149a5ac0fc12d7c53cbc12481d4a8e2d410ec633d800ad4b4304":int:0 + +RSA PKCS1 Sign #6 (MD4, 2048 bits RSA) +depends_on:6:1 +2:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:8:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"b0e60dc4dfaf0f636a3a4414eae2d7bce7c3ce505a46e38f3f654d8769b31b7891ba18f89672fce204bbac6e3764355e65447c087994731cd44f086710e79e8c3ebc6e2cb61edc5d3e05848ab733d95efe2d0252a691e810c17fa57fd2dd296374c9ba17fea704685677f45d668a386c8ca433fbbb56d3bbfb43a489ed9518b1c9ab13ce497a1cec91467453bfe533145a31a095c2de541255141768ccc6fdff3fc790b5050f1122c93c3044a9346947e1b23e8125bf7edbf38c64a4286dfc1b829e983db3117959a2559a8ef97687ab673e231be213d88edc632637b58cdb2d69c51fbf6bf894cff319216718b1e696f75cd4366f53dc2e28b2a00017984207":int:0 + +RSA PKCS1 Sign #6 Verify +depends_on:6:1 +3:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:8:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"b0e60dc4dfaf0f636a3a4414eae2d7bce7c3ce505a46e38f3f654d8769b31b7891ba18f89672fce204bbac6e3764355e65447c087994731cd44f086710e79e8c3ebc6e2cb61edc5d3e05848ab733d95efe2d0252a691e810c17fa57fd2dd296374c9ba17fea704685677f45d668a386c8ca433fbbb56d3bbfb43a489ed9518b1c9ab13ce497a1cec91467453bfe533145a31a095c2de541255141768ccc6fdff3fc790b5050f1122c93c3044a9346947e1b23e8125bf7edbf38c64a4286dfc1b829e983db3117959a2559a8ef97687ab673e231be213d88edc632637b58cdb2d69c51fbf6bf894cff319216718b1e696f75cd4366f53dc2e28b2a00017984207":int:0 + +RSA PKCS1 Sign #7 (MD5, 2048 bits RSA) +depends_on:7:1 +2:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:9:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"3bcf673c3b27f6e2ece4bb97c7a37161e6c6ee7419ef366efc3cfee0f15f415ff6d9d4390937386c6fec1771acba73f24ec6b0469ea8b88083f0b4e1b6069d7bf286e67cf94182a548663137e82a6e09c35de2c27779da0503f1f5bedfebadf2a875f17763a0564df4a6d945a5a3e46bc90fb692af3a55106aafc6b577587456ff8d49cfd5c299d7a2b776dbe4c1ae777b0f64aa3bab27689af32d6cc76157c7dc6900a3469e18a7d9b6bfe4951d1105a08864575e4f4ec05b3e053f9b7a2d5653ae085e50a63380d6bdd6f58ab378d7e0a2be708c559849891317089ab04c82d8bc589ea088b90b11dea5cf85856ff7e609cc1adb1d403beead4c126ff29021":int:0 + +RSA PKCS1 Sign #7 Verify +depends_on:7:1 +3:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:exp:9:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"3bcf673c3b27f6e2ece4bb97c7a37161e6c6ee7419ef366efc3cfee0f15f415ff6d9d4390937386c6fec1771acba73f24ec6b0469ea8b88083f0b4e1b6069d7bf286e67cf94182a548663137e82a6e09c35de2c27779da0503f1f5bedfebadf2a875f17763a0564df4a6d945a5a3e46bc90fb692af3a55106aafc6b577587456ff8d49cfd5c299d7a2b776dbe4c1ae777b0f64aa3bab27689af32d6cc76157c7dc6900a3469e18a7d9b6bfe4951d1105a08864575e4f4ec05b3e053f9b7a2d5653ae085e50a63380d6bdd6f58ab378d7e0a2be708c559849891317089ab04c82d8bc589ea088b90b11dea5cf85856ff7e609cc1adb1d403beead4c126ff29021":int:0 + +RSA PKCS1 Sign #8 (RAW, 2048 bits RSA) +depends_on:1 +4:hex:"1234567890deadbeef":exp:0:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"605baf947c0de49e4f6a0dfb94a43ae318d5df8ed20ba4ba5a37a73fb009c5c9e5cce8b70a25b1c7580f389f0d7092485cdfa02208b70d33482edf07a7eafebdc54862ca0e0396a5a7d09991b9753eb1ffb6091971bb5789c6b121abbcd0a3cbaa39969fa7c28146fce96c6d03272e3793e5be8f5abfa9afcbebb986d7b3050604a2af4d3a40fa6c003781a539a60259d1e84f13322da9e538a49c369b83e7286bf7d30b64bbb773506705da5d5d5483a563a1ffacc902fb75c9a751b1e83cdc7a6db0470056883f48b5a5446b43b1d180ea12ba11a6a8d93b3b32a30156b6084b7fb142998a2a0d28014b84098ece7d9d5e4d55cc342ca26f5a0167a679dec8" + +RSA PKCS1 Sign #8 Verify +depends_on:1 +5:hex:"1234567890deadbeef":exp:0:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"605baf947c0de49e4f6a0dfb94a43ae318d5df8ed20ba4ba5a37a73fb009c5c9e5cce8b70a25b1c7580f389f0d7092485cdfa02208b70d33482edf07a7eafebdc54862ca0e0396a5a7d09991b9753eb1ffb6091971bb5789c6b121abbcd0a3cbaa39969fa7c28146fce96c6d03272e3793e5be8f5abfa9afcbebb986d7b3050604a2af4d3a40fa6c003781a539a60259d1e84f13322da9e538a49c369b83e7286bf7d30b64bbb773506705da5d5d5483a563a1ffacc902fb75c9a751b1e83cdc7a6db0470056883f48b5a5446b43b1d180ea12ba11a6a8d93b3b32a30156b6084b7fb142998a2a0d28014b84098ece7d9d5e4d55cc342ca26f5a0167a679dec8":int:0 + +RSA PKCS1 Sign #8 Verify (Wrong raw hash) +depends_on:1 +5:hex:"1234567890deadcafe":exp:0:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"605baf947c0de49e4f6a0dfb94a43ae318d5df8ed20ba4ba5a37a73fb009c5c9e5cce8b70a25b1c7580f389f0d7092485cdfa02208b70d33482edf07a7eafebdc54862ca0e0396a5a7d09991b9753eb1ffb6091971bb5789c6b121abbcd0a3cbaa39969fa7c28146fce96c6d03272e3793e5be8f5abfa9afcbebb986d7b3050604a2af4d3a40fa6c003781a539a60259d1e84f13322da9e538a49c369b83e7286bf7d30b64bbb773506705da5d5d5483a563a1ffacc902fb75c9a751b1e83cdc7a6db0470056883f48b5a5446b43b1d180ea12ba11a6a8d93b3b32a30156b6084b7fb142998a2a0d28014b84098ece7d9d5e4d55cc342ca26f5a0167a679dec8":exp:2 + +RSA PKCS1 Sign #9 (Invalid Digest type) +depends_on:1 +2:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:int:255:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"3bcf673c3b27f6e2ece4bb97c7a37161e6c6ee7419ef366efc3cfee0f15f415ff6d9d4390937386c6fec1771acba73f24ec6b0469ea8b88083f0b4e1b6069d7bf286e67cf94182a548663137e82a6e09c35de2c27779da0503f1f5bedfebadf2a875f17763a0564df4a6d945a5a3e46bc90fb692af3a55106aafc6b577587456ff8d49cfd5c299d7a2b776dbe4c1ae777b0f64aa3bab27689af32d6cc76157c7dc6900a3469e18a7d9b6bfe4951d1105a08864575e4f4ec05b3e053f9b7a2d5653ae085e50a63380d6bdd6f58ab378d7e0a2be708c559849891317089ab04c82d8bc589ea088b90b11dea5cf85856ff7e609cc1adb1d403beead4c126ff29021":exp:10 + +RSA PKCS1 Sign #9 Verify (Invalid Digest type) +depends_on:1 +3:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f870":exp:0:int:255:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"3bcf673c3b27f6e2ece4bb97c7a37161e6c6ee7419ef366efc3cfee0f15f415ff6d9d4390937386c6fec1771acba73f24ec6b0469ea8b88083f0b4e1b6069d7bf286e67cf94182a548663137e82a6e09c35de2c27779da0503f1f5bedfebadf2a875f17763a0564df4a6d945a5a3e46bc90fb692af3a55106aafc6b577587456ff8d49cfd5c299d7a2b776dbe4c1ae777b0f64aa3bab27689af32d6cc76157c7dc6900a3469e18a7d9b6bfe4951d1105a08864575e4f4ec05b3e053f9b7a2d5653ae085e50a63380d6bdd6f58ab378d7e0a2be708c559849891317089ab04c82d8bc589ea088b90b11dea5cf85856ff7e609cc1adb1d403beead4c126ff29021":exp:10 + +RSA PKCS1 Sign #10 (RIPEMD160, 2048 bits RSA) +depends_on:8:1 +2:hex:"616263":exp:0:exp:11:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"aa2d9f88334d61bed74317ba549b1463600a9219801240cca5c11b9cdda29373172a28151313fb2cf73bb68af167e4ec645b6f065028802afbcfbc10e6c2c824e3c4d50c7181193b93734832170f0c5d3dd9ba5808f0e2a5c16b3d0df90defefef8e8fde5906962d42a2f0d62d7f81977f367f436f10c8b1183ccf6676953f7219445938f725d0cb62efbabf092de531642863b381e2694f2bf544ff6a4fefa7b37cdbf6292dbedcacf6e57d6f206ce5df0fd2771f9f64818f59a0ab7a5f003b368dc3eb51ab9409a0ec4e43f45281ee9a560664de88965ab207e256303d9dcb8233ed6ad0a5ad7f81e2f8c7a196dc81e2c8b6dde8a77fb6cfd1e5477ece9df8":int:0 + +RSA PKCS1 Verify #10 (RIPEMD160, 2048 bits RSA) +depends_on:8:1 +3:hex:"616263":exp:0:exp:11:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"aa2d9f88334d61bed74317ba549b1463600a9219801240cca5c11b9cdda29373172a28151313fb2cf73bb68af167e4ec645b6f065028802afbcfbc10e6c2c824e3c4d50c7181193b93734832170f0c5d3dd9ba5808f0e2a5c16b3d0df90defefef8e8fde5906962d42a2f0d62d7f81977f367f436f10c8b1183ccf6676953f7219445938f725d0cb62efbabf092de531642863b381e2694f2bf544ff6a4fefa7b37cdbf6292dbedcacf6e57d6f206ce5df0fd2771f9f64818f59a0ab7a5f003b368dc3eb51ab9409a0ec4e43f45281ee9a560664de88965ab207e256303d9dcb8233ed6ad0a5ad7f81e2f8c7a196dc81e2c8b6dde8a77fb6cfd1e5477ece9df8":int:0 + +RSA PKCS1 Encrypt #1 +depends_on:1 +6:hex:"4E636AF98E40F3ADCFCCB698F4E80B9F":exp:0:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"b0c0b193ba4a5b4502bfacd1a9c2697da5510f3e3ab7274cf404418afd2c62c89b98d83bbc21c8c1bf1afe6d8bf40425e053e9c03e03a3be0edbe1eda073fade1cc286cc0305a493d98fe795634c3cad7feb513edb742d66d910c87d07f6b0055c3488bb262b5fd1ce8747af64801fb39d2d3a3e57086ffe55ab8d0a2ca86975629a0f85767a4990c532a7c2dab1647997ebb234d0b28a0008bfebfc905e7ba5b30b60566a5e0190417465efdbf549934b8f0c5c9f36b7c5b6373a47ae553ced0608a161b1b70dfa509375cf7a3598223a6d7b7a1d1a06ac74d345a9bb7c0e44c8388858a4f1d8115f2bd769ffa69020385fa286302c80e950f9e2751308666c":int:0 + +RSA PKCS1 Decrypt #1 (Verify) +depends_on:1 +8:hex:"a42eda41e56235e666e7faaa77100197f657288a1bf183e4820f0c37ce2c456b960278d6003e0bbcd4be4a969f8e8fd9231e1f492414f00ed09844994c86ec32db7cde3bec7f0c3dbf6ae55baeb2712fa609f5fc3207a824eb3dace31849cd6a6084318523912bccb84cf42e3c6d6d1685131d69bb545acec827d2b0dfdd5568b7dcc4f5a11d6916583fefa689d367f8c9e1d95dcd2240895a9470b0c1730f97cd6e8546860bd254801769f54be96e16362ddcbf34d56035028890199e0f48db38642cb66a4181e028a6443a404fea284ce02b4614b683367d40874e505611d23142d49f06feea831d52d347b13610b413c4efc43a6de9f0b08d2a951dc503b6":exp:0:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:32:hex:"4E636AF98E40F3ADCFCCB698F4E80B9F":int:0 + +RSA PKCS1 Encrypt #2 (Data too large) +depends_on:1 +6:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":exp:0:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"a42eda41e56235e666e7faaa77100197f657288a1bf183e4820f0c37ce2c456b960278d6003e0bbcd4be4a969f8e8fd9231e1f492414f00ed09844994c86ec32db7cde3bec7f0c3dbf6ae55baeb2712fa609f5fc3207a824eb3dace31849cd6a6084318523912bccb84cf42e3c6d6d1685131d69bb545acec827d2b0dfdd5568b7dcc4f5a11d6916583fefa689d367f8c9e1d95dcd2240895a9470b0c1730f97cd6e8546860bd254801769f54be96e16362ddcbf34d56035028890199e0f48db38642cb66a4181e028a6443a404fea284ce02b4614b683367d40874e505611d23142d49f06feea831d52d347b13610b413c4efc43a6de9f0b08d2a951dc503b6":exp:10 + +RSA PKCS1 Decrypt #2 (Data too small) +depends_on:1 +8:hex:"deadbeafcafedeadbeeffedcba9876":exp:0:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:32:hex:"4E636AF98E40F3ADCFCCB698F4E80B9F":exp:12 + +RSA PKCS1 Decrypt #4 (Output buffer too small) +depends_on:1 +8:hex:"a42eda41e56235e666e7faaa77100197f657288a1bf183e4820f0c37ce2c456b960278d6003e0bbcd4be4a969f8e8fd9231e1f492414f00ed09844994c86ec32db7cde3bec7f0c3dbf6ae55baeb2712fa609f5fc3207a824eb3dace31849cd6a6084318523912bccb84cf42e3c6d6d1685131d69bb545acec827d2b0dfdd5568b7dcc4f5a11d6916583fefa689d367f8c9e1d95dcd2240895a9470b0c1730f97cd6e8546860bd254801769f54be96e16362ddcbf34d56035028890199e0f48db38642cb66a4181e028a6443a404fea284ce02b4614b683367d40874e505611d23142d49f06feea831d52d347b13610b413c4efc43a6de9f0b08d2a951dc503b6":exp:0:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:15:hex:"4E636AF98E40F3ADCFCCB698F4E80B9F":exp:13 + +RSA Check empty private key +11 + +RSA Check Private key #1 (Correct) +13:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"9A66CF76572A71A17475794FA1C8C70D987E581E990D772BB27C77C53FF1ECBB31260E9EDAFAEBC79991807E48918EAB8C3A5F03A600F30C69511546AE788EDF53168E2D035D300EDCD5E4BF3AA2A6D603EA0A7BD11E1C1089657306DF8A64E7F1BC6B266B825C1A6C5F0FC85775F4CF7ACD63367E42EAFE46511D58AD6DFE0F":int:16:char*:"844DBDD20925D9164F9A1E2F707076C261CCA8337D0241392B38AE3C12342F3AC14F8FD6DF4A1C36839662BD0D227344CD55A32AE5DBD2309A9A2B8A2C82BE6DDDDCE81D1B694775D9047AA765CA0C6E1BB8E61C8B7BE27ED711E8EE2FEAD87F3491F76A6D2262C14189EACDFD4CEFE0BF9D0A5B49857E0ED22CBEB98DC8D45B":int:16:char*:"4951A7B174DF972C37BADCC38457B5EDD1F078BC613E75CE25E08814E12461C7A1C189A70EB8138294298D141244C7A9DE31AB4F6D38B40B04D6353CD30F77ADBF66BBDE41C7BE463C5E30AAA3F7BAD6CEE99506DEAAFA2F335C1B1C5C88B8ABB0D0387EE0D1B4E7027F7F085A025CEDB5CCE18B88C0462F1C3C910D47C0D4AB":int:0 + +RSA Check Private key #2 (No P) +13:int:2048:int:16:char*:"":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"9A66CF76572A71A17475794FA1C8C70D987E581E990D772BB27C77C53FF1ECBB31260E9EDAFAEBC79991807E48918EAB8C3A5F03A600F30C69511546AE788EDF53168E2D035D300EDCD5E4BF3AA2A6D603EA0A7BD11E1C1089657306DF8A64E7F1BC6B266B825C1A6C5F0FC85775F4CF7ACD63367E42EAFE46511D58AD6DFE0F":int:16:char*:"844DBDD20925D9164F9A1E2F707076C261CCA8337D0241392B38AE3C12342F3AC14F8FD6DF4A1C36839662BD0D227344CD55A32AE5DBD2309A9A2B8A2C82BE6DDDDCE81D1B694775D9047AA765CA0C6E1BB8E61C8B7BE27ED711E8EE2FEAD87F3491F76A6D2262C14189EACDFD4CEFE0BF9D0A5B49857E0ED22CBEB98DC8D45B":int:16:char*:"4951A7B174DF972C37BADCC38457B5EDD1F078BC613E75CE25E08814E12461C7A1C189A70EB8138294298D141244C7A9DE31AB4F6D38B40B04D6353CD30F77ADBF66BBDE41C7BE463C5E30AAA3F7BAD6CEE99506DEAAFA2F335C1B1C5C88B8ABB0D0387EE0D1B4E7027F7F085A025CEDB5CCE18B88C0462F1C3C910D47C0D4AB":exp:14 + +RSA Check Private key #3 (No Q) +13:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"9A66CF76572A71A17475794FA1C8C70D987E581E990D772BB27C77C53FF1ECBB31260E9EDAFAEBC79991807E48918EAB8C3A5F03A600F30C69511546AE788EDF53168E2D035D300EDCD5E4BF3AA2A6D603EA0A7BD11E1C1089657306DF8A64E7F1BC6B266B825C1A6C5F0FC85775F4CF7ACD63367E42EAFE46511D58AD6DFE0F":int:16:char*:"844DBDD20925D9164F9A1E2F707076C261CCA8337D0241392B38AE3C12342F3AC14F8FD6DF4A1C36839662BD0D227344CD55A32AE5DBD2309A9A2B8A2C82BE6DDDDCE81D1B694775D9047AA765CA0C6E1BB8E61C8B7BE27ED711E8EE2FEAD87F3491F76A6D2262C14189EACDFD4CEFE0BF9D0A5B49857E0ED22CBEB98DC8D45B":int:16:char*:"4951A7B174DF972C37BADCC38457B5EDD1F078BC613E75CE25E08814E12461C7A1C189A70EB8138294298D141244C7A9DE31AB4F6D38B40B04D6353CD30F77ADBF66BBDE41C7BE463C5E30AAA3F7BAD6CEE99506DEAAFA2F335C1B1C5C88B8ABB0D0387EE0D1B4E7027F7F085A025CEDB5CCE18B88C0462F1C3C910D47C0D4AB":exp:14 + +RSA Check Private key #4 (No N) +13:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"":int:16:char*:"3":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"9A66CF76572A71A17475794FA1C8C70D987E581E990D772BB27C77C53FF1ECBB31260E9EDAFAEBC79991807E48918EAB8C3A5F03A600F30C69511546AE788EDF53168E2D035D300EDCD5E4BF3AA2A6D603EA0A7BD11E1C1089657306DF8A64E7F1BC6B266B825C1A6C5F0FC85775F4CF7ACD63367E42EAFE46511D58AD6DFE0F":int:16:char*:"844DBDD20925D9164F9A1E2F707076C261CCA8337D0241392B38AE3C12342F3AC14F8FD6DF4A1C36839662BD0D227344CD55A32AE5DBD2309A9A2B8A2C82BE6DDDDCE81D1B694775D9047AA765CA0C6E1BB8E61C8B7BE27ED711E8EE2FEAD87F3491F76A6D2262C14189EACDFD4CEFE0BF9D0A5B49857E0ED22CBEB98DC8D45B":int:16:char*:"4951A7B174DF972C37BADCC38457B5EDD1F078BC613E75CE25E08814E12461C7A1C189A70EB8138294298D141244C7A9DE31AB4F6D38B40B04D6353CD30F77ADBF66BBDE41C7BE463C5E30AAA3F7BAD6CEE99506DEAAFA2F335C1B1C5C88B8ABB0D0387EE0D1B4E7027F7F085A025CEDB5CCE18B88C0462F1C3C910D47C0D4AB":exp:14 + +RSA Check Private key #5 (No E) +13:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"9A66CF76572A71A17475794FA1C8C70D987E581E990D772BB27C77C53FF1ECBB31260E9EDAFAEBC79991807E48918EAB8C3A5F03A600F30C69511546AE788EDF53168E2D035D300EDCD5E4BF3AA2A6D603EA0A7BD11E1C1089657306DF8A64E7F1BC6B266B825C1A6C5F0FC85775F4CF7ACD63367E42EAFE46511D58AD6DFE0F":int:16:char*:"844DBDD20925D9164F9A1E2F707076C261CCA8337D0241392B38AE3C12342F3AC14F8FD6DF4A1C36839662BD0D227344CD55A32AE5DBD2309A9A2B8A2C82BE6DDDDCE81D1B694775D9047AA765CA0C6E1BB8E61C8B7BE27ED711E8EE2FEAD87F3491F76A6D2262C14189EACDFD4CEFE0BF9D0A5B49857E0ED22CBEB98DC8D45B":int:16:char*:"4951A7B174DF972C37BADCC38457B5EDD1F078BC613E75CE25E08814E12461C7A1C189A70EB8138294298D141244C7A9DE31AB4F6D38B40B04D6353CD30F77ADBF66BBDE41C7BE463C5E30AAA3F7BAD6CEE99506DEAAFA2F335C1B1C5C88B8ABB0D0387EE0D1B4E7027F7F085A025CEDB5CCE18B88C0462F1C3C910D47C0D4AB":exp:14 + +RSA Check Private key #6 (No D) +13:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:16:char*:"":int:16:char*:"9A66CF76572A71A17475794FA1C8C70D987E581E990D772BB27C77C53FF1ECBB31260E9EDAFAEBC79991807E48918EAB8C3A5F03A600F30C69511546AE788EDF53168E2D035D300EDCD5E4BF3AA2A6D603EA0A7BD11E1C1089657306DF8A64E7F1BC6B266B825C1A6C5F0FC85775F4CF7ACD63367E42EAFE46511D58AD6DFE0F":int:16:char*:"844DBDD20925D9164F9A1E2F707076C261CCA8337D0241392B38AE3C12342F3AC14F8FD6DF4A1C36839662BD0D227344CD55A32AE5DBD2309A9A2B8A2C82BE6DDDDCE81D1B694775D9047AA765CA0C6E1BB8E61C8B7BE27ED711E8EE2FEAD87F3491F76A6D2262C14189EACDFD4CEFE0BF9D0A5B49857E0ED22CBEB98DC8D45B":int:16:char*:"4951A7B174DF972C37BADCC38457B5EDD1F078BC613E75CE25E08814E12461C7A1C189A70EB8138294298D141244C7A9DE31AB4F6D38B40B04D6353CD30F77ADBF66BBDE41C7BE463C5E30AAA3F7BAD6CEE99506DEAAFA2F335C1B1C5C88B8ABB0D0387EE0D1B4E7027F7F085A025CEDB5CCE18B88C0462F1C3C910D47C0D4AB":exp:14 + +RSA Check Private key #7 (No DP) +depends_on:9 +13:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"":int:16:char*:"844DBDD20925D9164F9A1E2F707076C261CCA8337D0241392B38AE3C12342F3AC14F8FD6DF4A1C36839662BD0D227344CD55A32AE5DBD2309A9A2B8A2C82BE6DDDDCE81D1B694775D9047AA765CA0C6E1BB8E61C8B7BE27ED711E8EE2FEAD87F3491F76A6D2262C14189EACDFD4CEFE0BF9D0A5B49857E0ED22CBEB98DC8D45B":int:16:char*:"4951A7B174DF972C37BADCC38457B5EDD1F078BC613E75CE25E08814E12461C7A1C189A70EB8138294298D141244C7A9DE31AB4F6D38B40B04D6353CD30F77ADBF66BBDE41C7BE463C5E30AAA3F7BAD6CEE99506DEAAFA2F335C1B1C5C88B8ABB0D0387EE0D1B4E7027F7F085A025CEDB5CCE18B88C0462F1C3C910D47C0D4AB":exp:14 + +RSA Check Private key #8 (No DQ) +depends_on:9 +13:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"9A66CF76572A71A17475794FA1C8C70D987E581E990D772BB27C77C53FF1ECBB31260E9EDAFAEBC79991807E48918EAB8C3A5F03A600F30C69511546AE788EDF53168E2D035D300EDCD5E4BF3AA2A6D603EA0A7BD11E1C1089657306DF8A64E7F1BC6B266B825C1A6C5F0FC85775F4CF7ACD63367E42EAFE46511D58AD6DFE0F":int:16:char*:"":int:16:char*:"4951A7B174DF972C37BADCC38457B5EDD1F078BC613E75CE25E08814E12461C7A1C189A70EB8138294298D141244C7A9DE31AB4F6D38B40B04D6353CD30F77ADBF66BBDE41C7BE463C5E30AAA3F7BAD6CEE99506DEAAFA2F335C1B1C5C88B8ABB0D0387EE0D1B4E7027F7F085A025CEDB5CCE18B88C0462F1C3C910D47C0D4AB":exp:14 + +RSA Check Private key #9 (No QP) +depends_on:9 +13:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"9A66CF76572A71A17475794FA1C8C70D987E581E990D772BB27C77C53FF1ECBB31260E9EDAFAEBC79991807E48918EAB8C3A5F03A600F30C69511546AE788EDF53168E2D035D300EDCD5E4BF3AA2A6D603EA0A7BD11E1C1089657306DF8A64E7F1BC6B266B825C1A6C5F0FC85775F4CF7ACD63367E42EAFE46511D58AD6DFE0F":int:16:char*:"844DBDD20925D9164F9A1E2F707076C261CCA8337D0241392B38AE3C12342F3AC14F8FD6DF4A1C36839662BD0D227344CD55A32AE5DBD2309A9A2B8A2C82BE6DDDDCE81D1B694775D9047AA765CA0C6E1BB8E61C8B7BE27ED711E8EE2FEAD87F3491F76A6D2262C14189EACDFD4CEFE0BF9D0A5B49857E0ED22CBEB98DC8D45B":int:16:char*:"":exp:14 + +RSA Check Private key #10 (Incorrect) +13:int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCC":int:16:char*:"9A66CF76572A71A17475794FA1C8C70D987E581E990D772BB27C77C53FF1ECBB31260E9EDAFAEBC79991807E48918EAB8C3A5F03A600F30C69511546AE788EDF53168E2D035D300EDCD5E4BF3AA2A6D603EA0A7BD11E1C1089657306DF8A64E7F1BC6B266B825C1A6C5F0FC85775F4CF7ACD63367E42EAFE46511D58AD6DFE0F":int:16:char*:"844DBDD20925D9164F9A1E2F707076C261CCA8337D0241392B38AE3C12342F3AC14F8FD6DF4A1C36839662BD0D227344CD55A32AE5DBD2309A9A2B8A2C82BE6DDDDCE81D1B694775D9047AA765CA0C6E1BB8E61C8B7BE27ED711E8EE2FEAD87F3491F76A6D2262C14189EACDFD4CEFE0BF9D0A5B49857E0ED22CBEB98DC8D45B":int:16:char*:"4951A7B174DF972C37BADCC38457B5EDD1F078BC613E75CE25E08814E12461C7A1C189A70EB8138294298D141244C7A9DE31AB4F6D38B40B04D6353CD30F77ADBF66BBDE41C7BE463C5E30AAA3F7BAD6CEE99506DEAAFA2F335C1B1C5C88B8ABB0D0387EE0D1B4E7027F7F085A025CEDB5CCE18B88C0462F1C3C910D47C0D4AB":exp:14 + +RSA Check Public key #1 (Correct) +12:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:0 + +RSA Check Public key #2 (Even N) +12:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a20340":int:16:char*:"3":exp:14 + +RSA Check Public key #3 (Even E) +12:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a20340":int:16:char*:"65536":exp:14 + +RSA Check Public key #4 (N exactly 128 bits) +12:int:16:char*:"fedcba9876543210deadbeefcafe4321":int:16:char*:"3":int:0 + +RSA Check Public key #5 (N smaller than 128 bits) +12:int:16:char*:"7edcba9876543210deadbeefcafe4321":int:16:char*:"3":exp:14 + +RSA Check Public key #6 (N exactly 8192 bits) +depends_on:10 +12:int:16:char*:"88F48075BF29E95C1C6AE8716678B74E957B69CC2E49708C160C6343AAD2F076D25397ACE74220311ED18AEEB681F463611B3340C3945CAAEAD3ACC616E08A25A55683A32979BD55EA5DAB7630AF393886896F11DDC5F07E15EDF949324CF0F0B2A5C0E85DFA23167193182D1A43079DC8645F6C2C029629F475575802F7D326DE5BD891A9C5F84A433D45154181EC05685A4B368A5B6434775A00ABC6B0A04647D4598CEEE566B552230F691C98CA30B402A76C686A94B373CCD2F60EFA3878A867BB5F585D088E27C507937262D098A477B9218BE7C03B2E4C102D244CA701645F1827CD947E5E796446378B848862E689F0D1773F752056841A1F0EECE7CAB74921A42DBF2EF264ADCF4ABE05A1242E5F629A657A2D67958A2DAC9A2245074A37099B45064723ABE21241058252632C2BA6FE85AB1C75FF310891B84C9C40AB646FE1D90BC716FB3A4B56DA3EA25CA397C04B994F7C6AD1DD0CB9E994CA6B835F7830F4F4E0F976BBEA5AE8556BC7C90B3E50E21C19AD1F6BC4A8FF15F2909D9CC5F3DA533BADFF50F487869D631C3E34D69636B4C25A55127EF5B715F2FC0565734B38DF996D1970E56F7F64EBECB9D00A587AAEC608F2D3AAA51E66BF53E92C3096BF78D1DCBCE1A645FA4F0542E6F68E5A94AAA6E839F75620FABED5D2BCF40AB8EAF95F838BFA962429F281578882DF0F2721C27C8905C9E776B1D3251FC066A8BC64C0CE7FBA2B8E21F65EF6739AB6F19EC2AB07817DFF03DAB7C846AB5CC86C103642D7664A85DC2D846A8004CD6A144C72CCCAC86DB5901A047324927B80E281F5F7315FA2F9083BDE0DB7AA46DC055E36BB73FB6DBD3A14759D06CBBE8D57CBC213C4D55DE4478679E0A5902C8655BE1391C0E88D2B1FBD57E9232A2CEBC67569ECD94E4BF0FCC6C003F9AA51A2A5E6EE084A46DAE65E52400A727F9713D29E92CD6CA37FD599598B3F677624A2A484A8B36B98EFEAD662C0A23BC1D9280EF2A31F887065EB20A93B41F7A264ECFA65B3555F3E400927018186EAA2D4F00C6B7AB1BCED5F893D64478177592C7F2B945307AB474D7EC7FF2E7E55834CC763BEF81DA9BD70FB3D423AE5ADB86B336734C8A3BEC90CEB05438B5BA030D0D30DEC1442D2EB08450480FBAE090FFA1A5ADD748A415BDCDE45094E792420F0AF94BCA0A80A2096D1A478D3428A214A7E68C0F07F58C6FB232ECC3D8B821AE29AE76E13EB751193F6ECA670016D54F3D796937DDBB8900062EF116CCA3F5B3AECA618272875336C9C050FBC0FC7EDD5B88D85DA0061D21E176E1419CF573629BE7B0496E761EAD45FE32B59EB00D47CDD178AC8F8EC8D6F26DED34F7576CD938422E18E936F16A704B483A48EE3BEA59D95F688136119894930EC8E9282E5974740CF031DF8DBB07EB08F2DA0ACCADECE15A6A57502890F4A03740E60BD":int:16:char*:"010001":int:0 + +RSA Check Public key #7 (N larger than 8192 bits) +12:int:16:char*:"01631CD83F3F2D67FA52E13B44416EA65043A322ECD65467558EACD4C6B6D92DA7471D2DBD58E6921F9465C4900E92DFC6EB35C90637285A7E1F3D27C1C32FD6A5CB324D8253C6B2E480B63F66E3B09F4300C3E683011C7803BDEAD682F0F55473FC8A187734573A11ECDCE802022F539BC2074E94703C23E48FF8AE35702352E70AF921B42E6A143A3EFEE20DF77A97AA703AA271CE96EB78062452D87A4ADCACF83FFB9683818BF2ED234D0ECFB1B935827708050C4D007215D7A028152798045AF6A0B741A7B22F3FCCEBC26D285B9AA22CEF858858702BAE7D945FA0C45E2D8AADFF2FD0A64DF02C241F871C799AD73738E626D9A6D4BFFBCE000C4087F0CE74EF21526402FDCD07649175122697FD01041B84AD0A3FEDABD5C25E953686B2272F8C8B748A486F54CB767A1C79CA499B2C9A300AC8A214A0BFA06280A9235D5B7AFB8A76FFDD78FC72038C5B809569A6125D6A588684A16D222EF93F2469EA78948037957DE9B449AB722044FDFF3B6AC89367D72F0CF3ED1F85EDFD0DE3EEEDD39F6EFD68A0368F83B389B7A7B9C7713F4148F53E82CDF6D9CC002A3A16F1E6A1D78C48CE7849584164661664153A499ACAE5927728B2F1A2E911648676DF316DFCBF5E44F393B7B296A4A21ED59744E3855FCD4A21F2B42CFE5C52860B244D467103107E3DC40A82077269897528CCBF80B2F216A535C52A6A2643E64B53276A1B63348038706328FE369AE2409568160481C07A3ED5B0198EC6CC07F8F250B1DE0D97110F834AA3D1C0862FB719393EA08D530225CE0647FD5488F483FA065196D1160FAFA54CD3FF63B6ADDBE84D09F3CFF98F22CC71DE2FC19735126C3BBA9A2C293D1DB118F0512C144C1C616492BE0D19BFD245955840F640EBE6FCFF2830C683852046F36C3CDA4F4460ABA4B2FEEB700C9DD80418C42673858CDD11E70682D5A41ED7D8010EC7DD5B57B4E206F84DB8A430B246002FEA49AFF45940B1F18AE28863F5AA41D3B42ABCD3D1BAB7644B86E060865997E1BA23A768F233D8A859332F8B9D5D1633F9C462328C17E2B07D6DFD813C94D675873592E5CBB001C112A790B10B9F9E07BE105C4FD328C7E3887C3EF13E8ECE6106B73A3341AF200D8663BDF96FFDB6F794FBB04D976B87423A868882F15CAE8DC9F6CAF4917EFC844E74BAD48F21E34530CB4E20006444706FC95658735553CA99E18F0E820D78DEF8FB84034B10CE44B1AE36B50147558415E5E78A77E2FC7C8C580B54CCC40EE3904C04950846A6D51BF5C80E0B6E2ADC4989DA1D3DD01F99AA369C2E6B53394BA0CB5E6E811BFA004A5B3B3C34C60433AB5EB0EC8050246B9AF10B49EAA51487CCE0C4C8F4CDAF926D582D7E4924C33765E00AC952A38669150EA322CDF886B46DE4D0970A060B670D50C9BF3D2020B529838E192EF92BFE2F06FDF1D5":int:16:char*:"010001":exp:14 + +RSA Check Public key #8 (E exactly 2 bits) +12:int:16:char*:"fedcba9876543210deadbeefcafe4321":int:16:char*:"3":int:0 + +RSA Check Public key #8 (E exactly 1 bits) +12:int:16:char*:"fedcba9876543210deadbeefcafe4321":int:16:char*:"1":exp:14 + +RSA Check Public key #8 (E exactly 64 bits) +12:int:16:char*:"fedcba9876543210deadbeefcafe4321":int:16:char*:"00fedcba9876543213":int:0 + +RSA Check Public key #8 (E larger than 64 bits) +12:int:16:char*:"fedcba9876543210deadbeefcafe4321":int:16:char*:"01fedcba9876543213":int:0 + +RSA Check Public key #9 (E has size N-2) +12:int:16:char*:"00b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034fb38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"00b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034fb38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034d":int:0 + +RSA Check Public key #10 (E has size N) +12:int:16:char*:"00b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034fb38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"00b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034fb38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":exp:14 + +RSA Check Public-Private key #1 (Correct) +14:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"9A66CF76572A71A17475794FA1C8C70D987E581E990D772BB27C77C53FF1ECBB31260E9EDAFAEBC79991807E48918EAB8C3A5F03A600F30C69511546AE788EDF53168E2D035D300EDCD5E4BF3AA2A6D603EA0A7BD11E1C1089657306DF8A64E7F1BC6B266B825C1A6C5F0FC85775F4CF7ACD63367E42EAFE46511D58AD6DFE0F":int:16:char*:"844DBDD20925D9164F9A1E2F707076C261CCA8337D0241392B38AE3C12342F3AC14F8FD6DF4A1C36839662BD0D227344CD55A32AE5DBD2309A9A2B8A2C82BE6DDDDCE81D1B694775D9047AA765CA0C6E1BB8E61C8B7BE27ED711E8EE2FEAD87F3491F76A6D2262C14189EACDFD4CEFE0BF9D0A5B49857E0ED22CBEB98DC8D45B":int:16:char*:"4951A7B174DF972C37BADCC38457B5EDD1F078BC613E75CE25E08814E12461C7A1C189A70EB8138294298D141244C7A9DE31AB4F6D38B40B04D6353CD30F77ADBF66BBDE41C7BE463C5E30AAA3F7BAD6CEE99506DEAAFA2F335C1B1C5C88B8ABB0D0387EE0D1B4E7027F7F085A025CEDB5CCE18B88C0462F1C3C910D47C0D4AB":int:0 + +RSA Check Public-Private key #2 (Public no N) +14:int:2048:int:16:char*:"":int:16:char*:"3":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"9A66CF76572A71A17475794FA1C8C70D987E581E990D772BB27C77C53FF1ECBB31260E9EDAFAEBC79991807E48918EAB8C3A5F03A600F30C69511546AE788EDF53168E2D035D300EDCD5E4BF3AA2A6D603EA0A7BD11E1C1089657306DF8A64E7F1BC6B266B825C1A6C5F0FC85775F4CF7ACD63367E42EAFE46511D58AD6DFE0F":int:16:char*:"844DBDD20925D9164F9A1E2F707076C261CCA8337D0241392B38AE3C12342F3AC14F8FD6DF4A1C36839662BD0D227344CD55A32AE5DBD2309A9A2B8A2C82BE6DDDDCE81D1B694775D9047AA765CA0C6E1BB8E61C8B7BE27ED711E8EE2FEAD87F3491F76A6D2262C14189EACDFD4CEFE0BF9D0A5B49857E0ED22CBEB98DC8D45B":int:16:char*:"4951A7B174DF972C37BADCC38457B5EDD1F078BC613E75CE25E08814E12461C7A1C189A70EB8138294298D141244C7A9DE31AB4F6D38B40B04D6353CD30F77ADBF66BBDE41C7BE463C5E30AAA3F7BAD6CEE99506DEAAFA2F335C1B1C5C88B8ABB0D0387EE0D1B4E7027F7F085A025CEDB5CCE18B88C0462F1C3C910D47C0D4AB":exp:14 + +RSA Check Public-Private key #3 (Private no N) +14:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"":int:16:char*:"3":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"9A66CF76572A71A17475794FA1C8C70D987E581E990D772BB27C77C53FF1ECBB31260E9EDAFAEBC79991807E48918EAB8C3A5F03A600F30C69511546AE788EDF53168E2D035D300EDCD5E4BF3AA2A6D603EA0A7BD11E1C1089657306DF8A64E7F1BC6B266B825C1A6C5F0FC85775F4CF7ACD63367E42EAFE46511D58AD6DFE0F":int:16:char*:"844DBDD20925D9164F9A1E2F707076C261CCA8337D0241392B38AE3C12342F3AC14F8FD6DF4A1C36839662BD0D227344CD55A32AE5DBD2309A9A2B8A2C82BE6DDDDCE81D1B694775D9047AA765CA0C6E1BB8E61C8B7BE27ED711E8EE2FEAD87F3491F76A6D2262C14189EACDFD4CEFE0BF9D0A5B49857E0ED22CBEB98DC8D45B":int:16:char*:"4951A7B174DF972C37BADCC38457B5EDD1F078BC613E75CE25E08814E12461C7A1C189A70EB8138294298D141244C7A9DE31AB4F6D38B40B04D6353CD30F77ADBF66BBDE41C7BE463C5E30AAA3F7BAD6CEE99506DEAAFA2F335C1B1C5C88B8ABB0D0387EE0D1B4E7027F7F085A025CEDB5CCE18B88C0462F1C3C910D47C0D4AB":exp:14 + +RSA Check Public-Private key #4 (N mismatch) +14:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034e":int:16:char*:"3":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"9A66CF76572A71A17475794FA1C8C70D987E581E990D772BB27C77C53FF1ECBB31260E9EDAFAEBC79991807E48918EAB8C3A5F03A600F30C69511546AE788EDF53168E2D035D300EDCD5E4BF3AA2A6D603EA0A7BD11E1C1089657306DF8A64E7F1BC6B266B825C1A6C5F0FC85775F4CF7ACD63367E42EAFE46511D58AD6DFE0F":int:16:char*:"844DBDD20925D9164F9A1E2F707076C261CCA8337D0241392B38AE3C12342F3AC14F8FD6DF4A1C36839662BD0D227344CD55A32AE5DBD2309A9A2B8A2C82BE6DDDDCE81D1B694775D9047AA765CA0C6E1BB8E61C8B7BE27ED711E8EE2FEAD87F3491F76A6D2262C14189EACDFD4CEFE0BF9D0A5B49857E0ED22CBEB98DC8D45B":int:16:char*:"4951A7B174DF972C37BADCC38457B5EDD1F078BC613E75CE25E08814E12461C7A1C189A70EB8138294298D141244C7A9DE31AB4F6D38B40B04D6353CD30F77ADBF66BBDE41C7BE463C5E30AAA3F7BAD6CEE99506DEAAFA2F335C1B1C5C88B8ABB0D0387EE0D1B4E7027F7F085A025CEDB5CCE18B88C0462F1C3C910D47C0D4AB":exp:14 + +RSA Check Public-Private key #5 (E mismatch) +14:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"17":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"9A66CF76572A71A17475794FA1C8C70D987E581E990D772BB27C77C53FF1ECBB31260E9EDAFAEBC79991807E48918EAB8C3A5F03A600F30C69511546AE788EDF53168E2D035D300EDCD5E4BF3AA2A6D603EA0A7BD11E1C1089657306DF8A64E7F1BC6B266B825C1A6C5F0FC85775F4CF7ACD63367E42EAFE46511D58AD6DFE0F":int:16:char*:"844DBDD20925D9164F9A1E2F707076C261CCA8337D0241392B38AE3C12342F3AC14F8FD6DF4A1C36839662BD0D227344CD55A32AE5DBD2309A9A2B8A2C82BE6DDDDCE81D1B694775D9047AA765CA0C6E1BB8E61C8B7BE27ED711E8EE2FEAD87F3491F76A6D2262C14189EACDFD4CEFE0BF9D0A5B49857E0ED22CBEB98DC8D45B":int:16:char*:"4951A7B174DF972C37BADCC38457B5EDD1F078BC613E75CE25E08814E12461C7A1C189A70EB8138294298D141244C7A9DE31AB4F6D38B40B04D6353CD30F77ADBF66BBDE41C7BE463C5E30AAA3F7BAD6CEE99506DEAAFA2F335C1B1C5C88B8ABB0D0387EE0D1B4E7027F7F085A025CEDB5CCE18B88C0462F1C3C910D47C0D4AB":exp:14 + +RSA Private (Correct) +10:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f8700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"48ce62658d82be10737bd5d3579aed15bc82617e6758ba862eeb12d049d7bacaf2f62fce8bf6e980763d1951f7f0eae3a493df9890d249314b39d00d6ef791de0daebf2c50f46e54aeb63a89113defe85de6dbe77642aae9f2eceb420f3a47a56355396e728917f17876bb829fabcaeef8bf7ef6de2ff9e84e6108ea2e52bbb62b7b288efa0a3835175b8b08fac56f7396eceb1c692d419ecb79d80aef5bc08a75d89de9f2b2d411d881c0e3ffad24c311a19029d210d3d3534f1b626f982ea322b4d1cfba476860ef20d4f672f38c371084b5301b429b747ea051a619e4430e0dac33c12f9ee41ca4d81a4f6da3e495aa8524574bdc60d290dd1f7a62e90a67":int:0 + +RSA Private (Data larger than N) +10:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:2048:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"605baf947c0de49e4f6a0dfb94a43ae318d5df8ed20ba4ba5a37a73fb009c5c9e5cce8b70a25b1c7580f389f0d7092485cdfa02208b70d33482edf07a7eafebdc54862ca0e0396a5a7d09991b9753eb1ffb6091971bb5789c6b121abbcd0a3cbaa39969fa7c28146fce96c6d03272e3793e5be8f5abfa9afcbebb986d7b3050604a2af4d3a40fa6c003781a539a60259d1e84f13322da9e538a49c369b83e7286bf7d30b64bbb773506705da5d5d5483a563a1ffacc902fb75c9a751b1e83cdc7a6db0470056883f48b5a5446b43b1d180ea12ba11a6a8d93b3b32a30156b6084b7fb142998a2a0d28014b84098ece7d9d5e4d55cc342ca26f5a0167a679dec8":exp:12 + +RSA Public (Correct) +9:hex:"59779fd2a39e56640c4fc1e67b60aeffcecd78aed7ad2bdfa464e93d04198d48466b8da7445f25bfa19db2844edd5c8f539cf772cc132b483169d390db28a43bc4ee0f038f6568ffc87447746cb72fefac2d6d90ee3143a915ac4688028805905a68eb8f8a96674b093c495eddd8704461eaa2b345efbb2ad6930acd8023f8700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000":int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"1f5e927c13ff231090b0f18c8c3526428ed0f4a7561457ee5afe4d22d5d9220c34ef5b9a34d0c07f7248a1f3d57f95d10f7936b3063e40660b3a7ca3e73608b013f85a6e778ac7c60d576e9d9c0c5a79ad84ceea74e4722eb3553bdb0c2d7783dac050520cb27ca73478b509873cb0dcbd1d51dd8fccb96c29ad314f36d67cc57835d92d94defa0399feb095fd41b9f0b2be10f6041079ed4290040449f8a79aba50b0a1f8cf83c9fb8772b0686ec1b29cb1814bb06f9c024857db54d395a8da9a2c6f9f53b94bec612a0cb306a3eaa9fc80992e85d9d232e37a50cabe48c9343f039601ff7d95d60025e582aec475d031888310e8ec3833b394a5cf0599101e":int:0 + +RSA Public (Data larger than N) +9:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"605baf947c0de49e4f6a0dfb94a43ae318d5df8ed20ba4ba5a37a73fb009c5c9e5cce8b70a25b1c7580f389f0d7092485cdfa02208b70d33482edf07a7eafebdc54862ca0e0396a5a7d09991b9753eb1ffb6091971bb5789c6b121abbcd0a3cbaa39969fa7c28146fce96c6d03272e3793e5be8f5abfa9afcbebb986d7b3050604a2af4d3a40fa6c003781a539a60259d1e84f13322da9e538a49c369b83e7286bf7d30b64bbb773506705da5d5d5483a563a1ffacc902fb75c9a751b1e83cdc7a6db0470056883f48b5a5446b43b1d180ea12ba11a6a8d93b3b32a30156b6084b7fb142998a2a0d28014b84098ece7d9d5e4d55cc342ca26f5a0167a679dec8":exp:15 + +RSA Generate Key - 128bit key +15:int:128:int:3:int:0 + +RSA Generate Key (Number of bits too small) +15:int:127:int:3:exp:10 + +RSA Generate Key (Exponent too small) +15:int:128:int:2:exp:10 + +RSA Generate Key - 1024 bit key +15:int:1024:int:3:int:0 + +RSA Generate Key - 2048 bit key +15:int:2048:int:3:int:0 + +RSA Generate Key - 1025 bit key +15:int:1025:int:3:exp:10 + +RSA Validate Params, toy example +20:int:10:char*:"15":int:10:char*:"3":int:10:char*:"5":int:10:char*:"3":int:10:char*:"3":int:0:int:0 + +RSA Validate Params, toy example, N missing +20:int:10:char*:"":int:10:char*:"3":int:10:char*:"5":int:10:char*:"3":int:10:char*:"3":int:0:int:0 + +RSA Validate Params, toy example, E missing +20:int:10:char*:"15":int:10:char*:"3":int:10:char*:"5":int:10:char*:"3":int:10:char*:"":int:0:int:0 + +RSA Validate Params, toy example, corrupted +20:int:10:char*:"16":int:10:char*:"3":int:10:char*:"5":int:10:char*:"3":int:10:char*:"3":int:0:exp:14 + +RSA Validate Params, toy example, non-primes, no PRNG +20:int:10:char*:"45":int:10:char*:"9":int:10:char*:"5":int:10:char*:"7":int:10:char*:"23":int:0:int:0 + +RSA Validate Params, toy example, non-primes, PRNG +20:int:10:char*:"45":int:10:char*:"9":int:10:char*:"5":int:10:char*:"7":int:10:char*:"23":int:1:exp:14 + +RSA Validate Params +20:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:0:int:0 + +RSA Validate Params, N missing +20:int:16:char*:"":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:0:int:0 + +RSA Validate Params, bad N +20:int:16:char*:"b38bc65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:0:exp:14 + +RSA Validate Params, non-prime, no PRNG +20:int:16:char*:"":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd18":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"":int:16:char*:"":int:0:int:0 + +RSA Validate Params, non-prime, PRNG +20:int:16:char*:"":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd18":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"":int:16:char*:"":int:1:exp:14 + +RSA Deduce Private, toy example +17:int:10:char*:"7":int:10:char*:"11":int:10:char*:"7":int:10:char*:"13":int:0:int:0 + +RSA Deduce Private, toy example, corrupted +17:int:10:char*:"3":int:10:char*:"5":int:10:char*:"3":int:10:char*:"3":int:1:exp:16 + +RSA Deduce Private +17:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"3":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:0:int:0 + +RSA Deduce Private, corrupted +17:int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"3":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:1:exp:16 + +RSA Deduce Primes, toy example +16:int:10:char*:"35":int:10:char*:"5":int:10:char*:"5":int:10:char*:"5":int:10:char*:"7":int:0:int:0 + +RSA Deduce Primes, toy example, corrupted +16:int:10:char*:"35":int:10:char*:"5":int:10:char*:"5":int:10:char*:"5":int:10:char*:"7":int:1:exp:17 + +RSA Deduce Moduli +16:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:0:int:0 + +RSA Deduce Moduli, corrupted +16:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:1:exp:17 + +RSA Import (N,P,Q,D,E) +18:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:0:int:1:int:0:int:0 + +RSA Import (N,P,Q,D,E), inconsistent +18:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC3672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:0:int:1:exp:14:int:0 + +RSA Import (N,P,Q,D,E), successive +18:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:1:int:1:int:0:int:0 + +RSA Import (N,P,Q,D,E), successive, inconsistent +18:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC3672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:1:int:1:exp:14:int:0 + +RSA Import (-,P,Q,D,E) +18:int:16:char*:"":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:0:int:1:int:0:int:0 + +RSA Import (-,P,Q,D,E), successive +18:int:16:char*:"":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:1:int:1:int:0:int:0 + +RSA Import (N,-,-,D,E) +18:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"":int:16:char*:"":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:0:int:1:int:0:int:0 + +RSA Import (N,-,-,D,E), successive +18:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"":int:16:char*:"":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:1:int:1:int:0:int:0 + +RSA Import (N,P,Q,-,E) +18:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"":int:16:char*:"3":int:0:int:1:int:0:int:0 + +RSA Import (N,P,Q,-,E), successive +18:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"":int:16:char*:"3":int:1:int:1:int:0:int:0 + +RSA Import (-,P,Q,-,E) +18:int:16:char*:"":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"":int:16:char*:"3":int:0:int:1:int:0:int:0 + +RSA Import (-,P,Q,-,E), successive +18:int:16:char*:"":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"":int:16:char*:"3":int:1:int:1:int:0:int:0 + +RSA Import (N,-,Q,-,E) +18:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"":int:16:char*:"3":int:0:int:1:int:0:exp:10 + +RSA Import (N,-,Q,-,E), successive +18:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"":int:16:char*:"3":int:1:int:1:int:0:exp:10 + +RSA Import (N,-,-,-,E), complete public key +18:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"":int:16:char*:"":int:16:char*:"":int:16:char*:"3":int:0:int:0:int:0:int:0 + +RSA Import (N,-,-,-,E), complete public key, successive +18:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"":int:16:char*:"":int:16:char*:"":int:16:char*:"3":int:1:int:0:int:0:int:0 + +RSA Import (N,-,-,-,E), complete public key, corrupted +18:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"":int:16:char*:"":int:16:char*:"":int:16:char*:"4":int:0:int:0:exp:14:int:0 + +RSA Import (N,-,-,-,E), complete public key, successive, corrupted +18:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"":int:16:char*:"":int:16:char*:"":int:16:char*:"4":int:1:int:0:exp:14:int:0 + +RSA Import Raw (N,P,Q,D,E), complete private key +22:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":hex:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":hex:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":hex:"03":int:0:int:1:int:0:int:0 + +RSA Import Raw (N,P,Q,D,E), successive +22:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":hex:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":hex:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":hex:"03":int:1:int:1:int:0:int:0 + +RSA Import Raw (-,P,Q,D,E) +22:hex:"":hex:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":hex:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":hex:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":hex:"03":int:0:int:1:int:0:int:0 + +RSA Import Raw (-,P,Q,D,E), successive +22:hex:"":hex:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":hex:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":hex:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":hex:"03":int:1:int:1:int:0:int:0 + +RSA Import Raw (N,-,-,D,E) +22:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"":hex:"":hex:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":hex:"03":int:0:int:1:int:0:int:0 + +RSA Import Raw (N,-,-,D,E), successive +22:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"":hex:"":hex:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":hex:"03":int:1:int:1:int:0:int:0 + +RSA Import Raw (N,P,Q,-,E) +22:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":hex:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":hex:"":hex:"03":int:0:int:1:int:0:int:0 + +RSA Import Raw (N,P,Q,-,E), successive +22:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":hex:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":hex:"":hex:"03":int:1:int:1:int:0:int:0 + +RSA Import Raw (-,P,Q,-,E) +22:hex:"":hex:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":hex:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":hex:"":hex:"03":int:0:int:1:int:0:int:0 + +RSA Import Raw (-,P,Q,-,E), successive +22:hex:"":hex:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":hex:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":hex:"":hex:"03":int:1:int:1:int:0:int:0 + +RSA Import Raw (N,-,Q,-,E) +22:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"":hex:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":hex:"":hex:"03":int:0:int:1:int:0:exp:10 + +RSA Import Raw (N,-,Q,-,E), successive +22:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"":hex:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":hex:"":hex:"03":int:1:int:1:int:0:exp:10 + +RSA Import Raw (N,-,-,-,E) +22:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"":hex:"":hex:"":hex:"03":int:0:int:0:int:0:int:0 + +RSA Import Raw (N,-,-,-,E), successive +22:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"":hex:"":hex:"":hex:"03":int:1:int:0:int:0:int:0 + +RSA Import Raw (-,-,-,-,-) +22:hex:"":hex:"":hex:"":hex:"":hex:"":int:0:int:0:int:0:exp:10 + +RSA Export (N,P,Q,D,E) +19:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:1:int:0 + +RSA Export (N,P,Q,D,E), successive +19:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:1:int:1 + +RSA Export (N,-,-,D,E) +19:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"":int:16:char*:"":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:1:int:0 + +RSA Export (N,-,-,D,E), successive +19:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"":int:16:char*:"":int:16:char*:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":int:16:char*:"3":int:1:int:1 + +RSA Export (N,P,Q,-,E) +19:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"":int:16:char*:"3":int:1:int:0 + +RSA Export (N,P,Q,-,E), successive +19:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":int:16:char*:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":int:16:char*:"":int:16:char*:"3":int:1:int:1 + +RSA Export (N,-,-,-,E) +19:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"":int:16:char*:"":int:16:char*:"":int:16:char*:"3":int:0:int:0 + +RSA Export Raw (N,P,Q,D,E) +21:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":hex:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":hex:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":hex:"03":int:1:int:0 + +RSA Export Raw (N,P,Q,D,E), successive +21:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":hex:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":hex:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":hex:"03":int:1:int:1 + +RSA Export Raw (N,-,-,D,E) +21:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"":hex:"":hex:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":hex:"03":int:1:int:0 + +RSA Export Raw (N,-,-,D,E), successive +21:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"":hex:"":hex:"77B1D99300D6A54E864962DA09AE10CF19A7FB888456BC2672B72AEA52B204914493D16C184AD201EC3F762E1FBD8702BA796EF953D9EA2F26300D285264F11B0C8301D0207FEB1E2C984445C899B0ACEBAA74EF014DD1D4BDDB43202C08D2FF9692D8D788478DEC829EB52AFB5AE068FBDBAC499A27FACECC391E75C936D55F07BB45EE184DAB45808E15722502F279F89B38C1CB292557E5063597F52C75D61001EDC33F4739353E33E56AD273B067C1A2760208529EA421774A5FFFCB3423B1E0051E7702A55D80CBF2141569F18F87BFF538A1DA8EDBB2693A539F68E0D62D77743F89EACF3B1723BDB25CE2F333FA63CACF0E67DF1A431893BB9B352FCB":hex:"03":int:1:int:1 + +RSA Export Raw (N,P,Q,-,E) +21:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":hex:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":hex:"":hex:"03":int:1:int:0 + +RSA Export Raw (N,P,Q,-,E), successive +21:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"e79a373182bfaa722eb035f772ad2a9464bd842de59432c18bbab3a7dfeae318c9b915ee487861ab665a40bd6cda560152578e8579016c929df99fea05b4d64efca1d543850bc8164b40d71ed7f3fa4105df0fb9b9ad2a18ce182c8a4f4f975bea9aa0b9a1438a27a28e97ac8330ef37383414d1bd64607d6979ac050424fd17":hex:"c6749cbb0db8c5a177672d4728a8b22392b2fc4d3b8361d5c0d5055a1b4e46d821f757c24eef2a51c561941b93b3ace7340074c058c9bb48e7e7414f42c41da4cccb5c2ba91deb30c586b7fb18af12a52995592ad139d3be429add6547e044becedaf31fa3b39421e24ee034fbf367d11f6b8f88ee483d163b431e1654ad3e89":hex:"":hex:"03":int:1:int:1 + +RSA Export Raw (N,-,-,-,E) +21:hex:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":hex:"":hex:"":hex:"":hex:"03":int:0:int:0 + +RSA PKCS1 Encrypt Bad RNG +depends_on:1 +7:hex:"4E636AF98E40F3ADCFCCB698F4E80B9F":exp:0:int:2048:int:16:char*:"b38ac65c8141f7f5c96e14470e851936a67bf94cc6821a39ac12c05f7c0b06d9e6ddba2224703b02e25f31452f9c4a8417b62675fdc6df46b94813bc7b9769a892c482b830bfe0ad42e46668ace68903617faf6681f4babf1cc8e4b0420d3c7f61dc45434c6b54e2c3ee0fc07908509d79c9826e673bf8363255adb0add2401039a7bcd1b4ecf0fbe6ec8369d2da486eec59559dd1d54c9b24190965eafbdab203b35255765261cd0909acf93c3b8b8428cbb448de4715d1b813d0c94829c229543d391ce0adab5351f97a3810c1f73d7b1458b97daed4209c50e16d064d2d5bfda8c23893d755222793146d0a78c3d64f35549141486c3b0961a7b4c1a2034f":int:16:char*:"3":hex:"a42eda41e56235e666e7faaa77100197f657288a1bf183e4820f0c37ce2c456b960278d6003e0bbcd4be4a969f8e8fd9231e1f492414f00ed09844994c86ec32db7cde3bec7f0c3dbf6ae55baeb2712fa609f5fc3207a824eb3dace31849cd6a6084318523912bccb84cf42e3c6d6d1685131d69bb545acec827d2b0dfdd5568b7dcc4f5a11d6916583fefa689d367f8c9e1d95dcd2240895a9470b0c1730f97cd6e8546860bd254801769f54be96e16362ddcbf34d56035028890199e0f48db38642cb66a4181e028a6443a404fea284ce02b4614b683367d40874e505611d23142d49f06feea831d52d347b13610b413c4efc43a6de9f0b08d2a951dc503b6":exp:18 + +RSA Selftest +depends_on:11 +23 + diff --git a/third_party/mbedtls/test/test_suite_shax.c b/third_party/mbedtls/test/test_suite_shax.c new file mode 100644 index 000000000..f4ed2d444 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_shax.c @@ -0,0 +1,769 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_shax.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_shax.function + * Test suite data : suites/test_suite_shax.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#include "third_party/mbedtls/sha1.h" +#include "third_party/mbedtls/sha256.h" +#include "third_party/mbedtls/sha512.h" +#if defined(MBEDTLS_SHA1_C) +void test_sha1_valid_param( ) +{ + TEST_VALID_PARAM( mbedtls_sha1_free( NULL ) ); +exit: + ; +} + +void test_sha1_valid_param_wrapper( void ** params ) +{ + (void)params; + + test_sha1_valid_param( ); +} +#endif /* MBEDTLS_SHA1_C */ +#if defined(MBEDTLS_SHA1_C) +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_sha1_invalid_param( ) +{ + mbedtls_sha1_context ctx; + unsigned char buf[64] = { 0 }; + size_t const buflen = sizeof( buf ); + + TEST_INVALID_PARAM( mbedtls_sha1_init( NULL ) ); + + TEST_INVALID_PARAM( mbedtls_sha1_clone( NULL, &ctx ) ); + TEST_INVALID_PARAM( mbedtls_sha1_clone( &ctx, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA1_BAD_INPUT_DATA, + mbedtls_sha1_starts_ret( NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA1_BAD_INPUT_DATA, + mbedtls_sha1_update_ret( NULL, buf, buflen ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA1_BAD_INPUT_DATA, + mbedtls_sha1_update_ret( &ctx, NULL, buflen ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA1_BAD_INPUT_DATA, + mbedtls_sha1_finish_ret( NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA1_BAD_INPUT_DATA, + mbedtls_sha1_finish_ret( &ctx, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA1_BAD_INPUT_DATA, + mbedtls_internal_sha1_process( NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA1_BAD_INPUT_DATA, + mbedtls_internal_sha1_process( &ctx, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA1_BAD_INPUT_DATA, + mbedtls_sha1_ret( NULL, buflen, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA1_BAD_INPUT_DATA, + mbedtls_sha1_ret( buf, buflen, NULL ) ); + +exit: + return; +} + +void test_sha1_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_sha1_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#endif /* MBEDTLS_SHA1_C */ +#if defined(MBEDTLS_SHA1_C) +void test_mbedtls_sha1( data_t * src_str, data_t * hash ) +{ + unsigned char output[41]; + + memset(output, 0x00, 41); + + + TEST_ASSERT( mbedtls_sha1_ret( src_str->x, src_str->len, output ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, 20, hash->len ) == 0 ); +exit: + ; +} + +void test_mbedtls_sha1_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_mbedtls_sha1( &data0, &data2 ); +} +#endif /* MBEDTLS_SHA1_C */ +#if defined(MBEDTLS_SHA256_C) +void test_sha256_valid_param( ) +{ + TEST_VALID_PARAM( mbedtls_sha256_free( NULL ) ); +exit: + ; +} + +void test_sha256_valid_param_wrapper( void ** params ) +{ + (void)params; + + test_sha256_valid_param( ); +} +#endif /* MBEDTLS_SHA256_C */ +#if defined(MBEDTLS_SHA256_C) +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_sha256_invalid_param( ) +{ + mbedtls_sha256_context ctx; + unsigned char buf[64] = { 0 }; + size_t const buflen = sizeof( buf ); + int valid_type = 0; + int invalid_type = 42; + + TEST_INVALID_PARAM( mbedtls_sha256_init( NULL ) ); + + TEST_INVALID_PARAM( mbedtls_sha256_clone( NULL, &ctx ) ); + TEST_INVALID_PARAM( mbedtls_sha256_clone( &ctx, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA256_BAD_INPUT_DATA, + mbedtls_sha256_starts_ret( NULL, valid_type ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA256_BAD_INPUT_DATA, + mbedtls_sha256_starts_ret( &ctx, invalid_type ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA256_BAD_INPUT_DATA, + mbedtls_sha256_update_ret( NULL, buf, buflen ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA256_BAD_INPUT_DATA, + mbedtls_sha256_update_ret( &ctx, NULL, buflen ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA256_BAD_INPUT_DATA, + mbedtls_sha256_finish_ret( NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA256_BAD_INPUT_DATA, + mbedtls_sha256_finish_ret( &ctx, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA256_BAD_INPUT_DATA, + mbedtls_internal_sha256_process( NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA256_BAD_INPUT_DATA, + mbedtls_internal_sha256_process( &ctx, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA256_BAD_INPUT_DATA, + mbedtls_sha256_ret( NULL, buflen, + buf, valid_type ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA256_BAD_INPUT_DATA, + mbedtls_sha256_ret( buf, buflen, + NULL, valid_type ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA256_BAD_INPUT_DATA, + mbedtls_sha256_ret( buf, buflen, + buf, invalid_type ) ); + +exit: + return; +} + +void test_sha256_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_sha256_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#endif /* MBEDTLS_SHA256_C */ +#if defined(MBEDTLS_SHA256_C) +void test_sha224( data_t * src_str, data_t * hash ) +{ + unsigned char output[57]; + + memset(output, 0x00, 57); + + + TEST_ASSERT( mbedtls_sha256_ret( src_str->x, src_str->len, output, 1 ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, 28, hash->len ) == 0 ); +exit: + ; +} + +void test_sha224_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_sha224( &data0, &data2 ); +} +#endif /* MBEDTLS_SHA256_C */ +#if defined(MBEDTLS_SHA256_C) +void test_mbedtls_sha256( data_t * src_str, data_t * hash ) +{ + unsigned char output[65]; + + memset(output, 0x00, 65); + + + TEST_ASSERT( mbedtls_sha256_ret( src_str->x, src_str->len, output, 0 ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, 32, hash->len ) == 0 ); +exit: + ; +} + +void test_mbedtls_sha256_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_mbedtls_sha256( &data0, &data2 ); +} +#endif /* MBEDTLS_SHA256_C */ +#if defined(MBEDTLS_SHA512_C) +void test_sha512_valid_param( ) +{ + TEST_VALID_PARAM( mbedtls_sha512_free( NULL ) ); +exit: + ; +} + +void test_sha512_valid_param_wrapper( void ** params ) +{ + (void)params; + + test_sha512_valid_param( ); +} +#endif /* MBEDTLS_SHA512_C */ +#if defined(MBEDTLS_SHA512_C) +#if defined(MBEDTLS_CHECK_PARAMS) +#if !defined(MBEDTLS_PARAM_FAILED_ALT) +void test_sha512_invalid_param( ) +{ + mbedtls_sha512_context ctx; + unsigned char buf[64] = { 0 }; + size_t const buflen = sizeof( buf ); + int valid_type = 0; + int invalid_type = 42; + + TEST_INVALID_PARAM( mbedtls_sha512_init( NULL ) ); + + TEST_INVALID_PARAM( mbedtls_sha512_clone( NULL, &ctx ) ); + TEST_INVALID_PARAM( mbedtls_sha512_clone( &ctx, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA512_BAD_INPUT_DATA, + mbedtls_sha512_starts_ret( NULL, valid_type ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA512_BAD_INPUT_DATA, + mbedtls_sha512_starts_ret( &ctx, invalid_type ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA512_BAD_INPUT_DATA, + mbedtls_sha512_update_ret( NULL, buf, buflen ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA512_BAD_INPUT_DATA, + mbedtls_sha512_update_ret( &ctx, NULL, buflen ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA512_BAD_INPUT_DATA, + mbedtls_sha512_finish_ret( NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA512_BAD_INPUT_DATA, + mbedtls_sha512_finish_ret( &ctx, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA512_BAD_INPUT_DATA, + mbedtls_internal_sha512_process( NULL, buf ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA512_BAD_INPUT_DATA, + mbedtls_internal_sha512_process( &ctx, NULL ) ); + + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA512_BAD_INPUT_DATA, + mbedtls_sha512_ret( NULL, buflen, + buf, valid_type ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA512_BAD_INPUT_DATA, + mbedtls_sha512_ret( buf, buflen, + NULL, valid_type ) ); + TEST_INVALID_PARAM_RET( MBEDTLS_ERR_SHA512_BAD_INPUT_DATA, + mbedtls_sha512_ret( buf, buflen, + buf, invalid_type ) ); + +exit: + return; +} + +void test_sha512_invalid_param_wrapper( void ** params ) +{ + (void)params; + + test_sha512_invalid_param( ); +} +#endif /* !MBEDTLS_PARAM_FAILED_ALT */ +#endif /* MBEDTLS_CHECK_PARAMS */ +#endif /* MBEDTLS_SHA512_C */ +#if defined(MBEDTLS_SHA512_C) +void test_sha384( data_t * src_str, data_t * hash ) +{ + unsigned char output[97]; + + memset(output, 0x00, 97); + + + TEST_ASSERT( mbedtls_sha512_ret( src_str->x, src_str->len, output, 1 ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, 48, hash->len ) == 0 ); +exit: + ; +} + +void test_sha384_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_sha384( &data0, &data2 ); +} +#endif /* MBEDTLS_SHA512_C */ +#if defined(MBEDTLS_SHA512_C) +void test_mbedtls_sha512( data_t * src_str, data_t * hash ) +{ + unsigned char output[129]; + + memset(output, 0x00, 129); + + + TEST_ASSERT( mbedtls_sha512_ret( src_str->x, src_str->len, output, 0 ) == 0 ); + + TEST_ASSERT( mbedtls_test_hexcmp( output, hash->x, 64, hash->len ) == 0 ); +exit: + ; +} + +void test_mbedtls_sha512_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_mbedtls_sha512( &data0, &data2 ); +} +#endif /* MBEDTLS_SHA512_C */ +#if defined(MBEDTLS_SHA1_C) +#if defined(MBEDTLS_SELF_TEST) +void test_sha1_selftest( ) +{ + TEST_ASSERT( mbedtls_sha1_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_sha1_selftest_wrapper( void ** params ) +{ + (void)params; + + test_sha1_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_SHA1_C */ +#if defined(MBEDTLS_SHA256_C) +#if defined(MBEDTLS_SELF_TEST) +void test_sha256_selftest( ) +{ + TEST_ASSERT( mbedtls_sha256_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_sha256_selftest_wrapper( void ** params ) +{ + (void)params; + + test_sha256_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_SHA256_C */ +#if defined(MBEDTLS_SHA512_C) +#if defined(MBEDTLS_SELF_TEST) +void test_sha512_selftest( ) +{ + TEST_ASSERT( mbedtls_sha512_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_sha512_selftest_wrapper( void ** params ) +{ + (void)params; + + test_sha512_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_SHA512_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + + case 0: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if !defined(MBEDTLS_SHA512_NO_SHA384) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_SELF_TEST) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_SHA1_C) + test_sha1_valid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_SHA1_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_sha1_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_SHA1_C) + test_mbedtls_sha1_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_SHA256_C) + test_sha256_valid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_SHA256_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_sha256_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_SHA256_C) + test_sha224_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_SHA256_C) + test_mbedtls_sha256_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_SHA512_C) + test_sha512_valid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_SHA512_C) && defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT) + test_sha512_invalid_param_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_SHA512_C) + test_sha384_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_SHA512_C) + test_mbedtls_sha512_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_SHA1_C) && defined(MBEDTLS_SELF_TEST) + test_sha1_selftest_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_SHA256_C) && defined(MBEDTLS_SELF_TEST) + test_sha256_selftest_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_SHA512_C) && defined(MBEDTLS_SELF_TEST) + test_sha512_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_shax.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_shax.datax b/third_party/mbedtls/test/test_suite_shax.datax new file mode 100644 index 000000000..40f61986e --- /dev/null +++ b/third_party/mbedtls/test/test_suite_shax.datax @@ -0,0 +1,190 @@ +SHA-1 - Valid parameters +0 + +SHA-1 - Invalid parameters +1 + +SHA-1 Test Vector NIST CAVS #1 +depends_on:0 +2:hex:"":hex:"da39a3ee5e6b4b0d3255bfef95601890afd80709" + +SHA-1 Test Vector NIST CAVS #2 +depends_on:0 +2:hex:"a8":hex:"99f2aa95e36f95c2acb0eaf23998f030638f3f15" + +SHA-1 Test Vector NIST CAVS #3 +depends_on:0 +2:hex:"3000":hex:"f944dcd635f9801f7ac90a407fbc479964dec024" + +SHA-1 Test Vector NIST CAVS #4 +depends_on:0 +2:hex:"42749e":hex:"a444319e9b6cc1e8464c511ec0969c37d6bb2619" + +SHA-1 Test Vector NIST CAVS #5 +depends_on:0 +2:hex:"9fc3fe08":hex:"16a0ff84fcc156fd5d3ca3a744f20a232d172253" + +SHA-1 Test Vector NIST CAVS #6 +depends_on:0 +2:hex:"b5c1c6f1af":hex:"fec9deebfcdedaf66dda525e1be43597a73a1f93" + +SHA-1 Test Vector NIST CAVS #7 +depends_on:0 +2:hex:"ec29561244ede706b6eb30a1c371d74450a105c3f9735f7fa9fe38cf67f304a5736a106e92e17139a6813b1c81a4f3d3fb9546ab4296fa9f722826c066869edacd73b2548035185813e22634a9da44000d95a281ff9f264ecce0a931222162d021cca28db5f3c2aa24945ab1e31cb413ae29810fd794cad5dfaf29ec43cb38d198fe4ae1da2359780221405bd6712a5305da4b1b737fce7cd21c0eb7728d08235a9011":hex:"970111c4e77bcc88cc20459c02b69b4aa8f58217" + +SHA-1 Test Vector NIST CAVS #8 +depends_on:0 +2:hex:"5fc2c3f6a7e79dc94be526e5166a238899d54927ce470018fbfd668fd9dd97cbf64e2c91584d01da63be3cc9fdff8adfefc3ac728e1e335b9cdc87f069172e323d094b47fa1e652afe4d6aa147a9f46fda33cacb65f3aa12234746b9007a8c85fe982afed7815221e43dba553d8fe8a022cdac1b99eeeea359e5a9d2e72e382dffa6d19f359f4f27dc3434cd27daeeda8e38594873398678065fbb23665aba9309d946135da0e4a4afdadff14db18e85e71dd93c3bf9faf7f25c8194c4269b1ee3d9934097ab990025d9c3aaf63d5109f52335dd3959d38ae485050e4bbb6235574fc0102be8f7a306d6e8de6ba6becf80f37415b57f9898a5824e77414197422be3d36a6080":hex:"0423dc76a8791107d14e13f5265b343f24cc0f19" + +SHA-1 Test Vector NIST CAVS #9 +depends_on:0 +2:hex:"0f865f46a8f3aed2da18482aa09a8f390dc9da07d51d1bd10fe0bf5f3928d5927d08733d32075535a6d1c8ac1b2dc6ba0f2f633dc1af68e3f0fa3d85e6c60cb7b56c239dc1519a007ea536a07b518ecca02a6c31b46b76f021620ef3fc6976804018380e5ab9c558ebfc5cb1c9ed2d974722bf8ab6398f1f2b82fa5083f85c16a5767a3a07271d67743f00850ce8ec428c7f22f1cf01f99895c0c844845b06a06cecb0c6cf83eb55a1d4ebc44c2c13f6f7aa5e0e08abfd84e7864279057abc471ee4a45dbbb5774afa24e51791a0eada11093b88681fe30baa3b2e94113dc63342c51ca5d1a6096d0897b626e42cb91761058008f746f35465465540ad8c6b8b60f7e1461b3ce9e6529625984cb8c7d46f07f735be067588a0117f23e34ff57800e2bbe9a1605fde6087fb15d22c5d3ac47566b8c448b0cee40373e5ba6eaa21abee71366afbb27dbbd300477d70c371e7b8963812f5ed4fb784fb2f3bd1d3afe883cdd47ef32beaea":hex:"6692a71d73e00f27df976bc56df4970650d90e45" + +SHA-1 Test Vector NIST CAVS #10 +depends_on:0 +2:hex:"8236153781bd2f1b81ffe0def1beb46f5a70191142926651503f1b3bb1016acdb9e7f7acced8dd168226f118ff664a01a8800116fd023587bfba52a2558393476f5fc69ce9c65001f23e70476d2cc81c97ea19caeb194e224339bcb23f77a83feac5096f9b3090c51a6ee6d204b735aa71d7e996d380b80822e4dfd43683af9c7442498cacbea64842dfda238cb099927c6efae07fdf7b23a4e4456e0152b24853fe0d5de4179974b2b9d4a1cdbefcbc01d8d311b5dda059136176ea698ab82acf20dd490be47130b1235cb48f8a6710473cfc923e222d94b582f9ae36d4ca2a32d141b8e8cc36638845fbc499bce17698c3fecae2572dbbd470552430d7ef30c238c2124478f1f780483839b4fb73d63a9460206824a5b6b65315b21e3c2f24c97ee7c0e78faad3df549c7ca8ef241876d9aafe9a309f6da352bec2caaa92ee8dca392899ba67dfed90aef33d41fc2494b765cb3e2422c8e595dabbfaca217757453fb322a13203f425f6073a9903e2dc5818ee1da737afc345f0057744e3a56e1681c949eb12273a3bfc20699e423b96e44bd1ff62e50a848a890809bfe1611c6787d3d741103308f849a790f9c015098286dbacfc34c1718b2c2b77e32194a75dda37954a320fa68764027852855a7e5b5274eb1e2cbcd27161d98b59ad245822015f48af82a45c0ed59be94f9af03d9736048570d6e3ef63b1770bc98dfb77de84b1bb1708d872b625d9ab9b06c18e5dbbf34399391f0f8aa26ec0dac7ff4cb8ec97b52bcb942fa6db2385dcd1b3b9d567aaeb425d567b0ebe267235651a1ed9bf78fd93d3c1dd077fe340bb04b00529c58f45124b717c168d07e9826e33376988bc5cf62845c2009980a4dfa69fbc7e5a0b1bb20a5958ca967aec68eb31dd8fccca9afcd30a26bab26279f1bf6724ff":hex:"11863b483809ef88413ca9b0084ac4a5390640af" + +SHA-256 Valid parameters +3 + +SHA-256 Invalid parameters +4 + +SHA-224 Test Vector NIST CAVS #1 +depends_on:1 +5:hex:"":hex:"d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f" + +SHA-224 Test Vector NIST CAVS #2 +depends_on:1 +5:hex:"ff":hex:"e33f9d75e6ae1369dbabf81b96b4591ae46bba30b591a6b6c62542b5" + +SHA-224 Test Vector NIST CAVS #3 +depends_on:1 +5:hex:"984c":hex:"2fa9df9157d9e027cfbc4c6a9df32e1adc0cbe2328ec2a63c5ae934e" + +SHA-224 Test Vector NIST CAVS #4 +depends_on:1 +5:hex:"50efd0":hex:"b5a9820413c2bf8211fbbf5df1337043b32fa4eafaf61a0c8e9ccede" + +SHA-224 Test Vector NIST CAVS #5 +depends_on:1 +5:hex:"e5e09924":hex:"fd19e74690d291467ce59f077df311638f1c3a46e510d0e49a67062d" + +SHA-224 Test Vector NIST CAVS #6 +depends_on:1 +5:hex:"21ebecb914":hex:"78f4a71c21c694499ce1c7866611b14ace70d905012c356323c7c713" + +SHA-224 Test Vector NIST CAVS #7 +depends_on:1 +5:hex:"fc488947c1a7a589726b15436b4f3d9556262f98fc6422fc5cdf20f0fad7fe427a3491c86d101ffe6b7514f06268f65b2d269b0f69ad9a97847eff1c16a2438775eb7be6847ccf11cb8b2e8dcd6640b095b49c0693fe3cf4a66e2d9b7ad68bff14f3ad69abf49d0aba36cbe0535202deb6599a47225ef05beb351335cd7bc0f480d691198c7e71305ffd53b39d33242bb79cfd98bfd69e137b5d18b2b89ac9ace01c8dbdcf2533cce3682ecc52118de0c1062ec2126c2e657d6ea3d9e2398e705d4b0b1f1ceecb266dffc4f31bf42744fb1e938dc22a889919ee1e73f463f7871fed720519e32186264b7ef2a0e5d9a18e6c95c0781894f77967f048951dec3b4d892a38710b1e3436d3c29088eb8b3da1789c25db3d3bc6c26081206e7155d210a89b80ca6ea877c41ff9947c0f25625dcb118294a163501f6239c326661a958fd12da4cd15a899f8b88cc723589056eaec5aa04a4cf5dbb6f480f9660423ccf38c486e210707e0fb25e1f126ceb2616f63e147a647dab0af9ebe89d65458bf636154a46e4cab95f5ee62da2c7974cd14b90d3e4f99f81733e85b3c1d5da2b508d9b90f5eed7eff0d9c7649de62bee00375454fee4a39576a5bbfdae428e7f8097bdf7797f167686cb68407e49079e4611ff3402b6384ba7b7e522bd2bb11ce8fd02ea4c1604d163ac4f6dde50b8b1f593f7edaadeac0868ed97df690200680c25f0f5d85431a529e4f339089dcdeda105e4ee51dead704cdf5a605c55fb055c9b0e86b8ba1b564c0dea3eb790a595cb103cb292268b07c5e59371e1a7ef597cd4b22977a820694c9f9aeb55d9de3ef62b75d6e656e3336698d960a3787bf8cf5b926a7faeef52ae128bcb5dc9e66d94b016c7b8e034879171a2d91c381f57e6a815b63b5ee6a6d2ff435b49f14c963966960194430d78f8f87627a67757fb3532b289550894da6dce4817a4e07f4d56877a1102ffcc8befa5c9f8fca6a4574d93ff70376c8861e0f8108cf907fce77ecb49728f86f034f80224b9695682e0824462f76cdb1fd1af151337b0d85419047a7aa284791718a4860cd586f7824b95bc837b6fd4f9be5aade68456e20356aa4d943dac36bf8b67b9e8f9d01a00fcda74b798bafa746c661b010f75b59904b29d0c8041504811c4065f82cf2ead58d2f595cbd8bc3e7043f4d94577b373b7cfe16a36fe564f505c03b70cfeb5e5f411c79481338aa67e86b3f5a2e77c21e454c333ae3da943ab723ab5f4c940395319534a5575f64acba0d0ecc43f60221ed3badf7289c9b3a7b903a2d6c94e15fa4c310dc4fa7faa0c24f405160a1002dbef20e4105d481db982f7243f79400a6e4cd9753c4b9732a47575f504b20c328fe9add7f432a4f075829da07b53b695037dc51737d3cd731934df333cd1a53fcf65aa31baa450ca501a6fae26e322347e618c5a444d92e9fec5a8261ae38b98fee5be77c02cec09ddccd5b3de92036":hex:"1302149d1e197c41813b054c942329d420e366530f5517b470e964fe" + +SHA-256 Test Vector NIST CAVS #1 +depends_on:1 +6:hex:"":hex:"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + +SHA-256 Test Vector NIST CAVS #2 +depends_on:1 +6:hex:"bd":hex:"68325720aabd7c82f30f554b313d0570c95accbb7dc4b5aae11204c08ffe732b" + +SHA-256 Test Vector NIST CAVS #3 +depends_on:1 +6:hex:"5fd4":hex:"7c4fbf484498d21b487b9d61de8914b2eadaf2698712936d47c3ada2558f6788" + +SHA-256 Test Vector NIST CAVS #4 +depends_on:1 +6:hex:"b0bd69":hex:"4096804221093ddccfbf46831490ea63e9e99414858f8d75ff7f642c7ca61803" + +SHA-256 Test Vector NIST CAVS #5 +depends_on:1 +6:hex:"c98c8e55":hex:"7abc22c0ae5af26ce93dbb94433a0e0b2e119d014f8e7f65bd56c61ccccd9504" + +SHA-256 Test Vector NIST CAVS #6 +depends_on:1 +6:hex:"81a723d966":hex:"7516fb8bb11350df2bf386bc3c33bd0f52cb4c67c6e4745e0488e62c2aea2605" + +SHA-256 Test Vector NIST CAVS #7 +depends_on:1 +6:hex:"8390cf0be07661cc7669aac54ce09a37733a629d45f5d983ef201f9b2d13800e555d9b1097fec3b783d7a50dcb5e2b644b96a1e9463f177cf34906bf388f366db5c2deee04a30e283f764a97c3b377a034fefc22c259214faa99babaff160ab0aaa7e2ccb0ce09c6b32fe08cbc474694375aba703fadbfa31cf685b30a11c57f3cf4edd321e57d3ae6ebb1133c8260e75b9224fa47a2bb205249add2e2e62f817491482ae152322be0900355cdcc8d42a98f82e961a0dc6f537b7b410eff105f59673bfb787bf042aa071f7af68d944d27371c64160fe9382772372516c230c1f45c0d6b6cca7f274b394da9402d3eafdf733994ec58ab22d71829a98399574d4b5908a447a5a681cb0dd50a31145311d92c22a16de1ead66a5499f2dceb4cae694772ce90762ef8336afec653aa9b1a1c4820b221136dfce80dce2ba920d88a530c9410d0a4e0358a3a11052e58dd73b0b179ef8f56fe3b5a2d117a73a0c38a1392b6938e9782e0d86456ee4884e3c39d4d75813f13633bc79baa07c0d2d555afbf207f52b7dca126d015aa2b9873b3eb065e90b9b065a5373fe1fb1b20d594327d19fba56cb81e7b6696605ffa56eba3c27a438697cc21b201fd7e09f18deea1b3ea2f0d1edc02df0e20396a145412cd6b13c32d2e605641c948b714aec30c0649dc44143511f35ab0fd5dd64c34d06fe86f3836dfe9edeb7f08cfc3bd40956826356242191f99f53473f32b0cc0cf9321d6c92a112e8db90b86ee9e87cc32d0343db01e32ce9eb782cb24efbbbeb440fe929e8f2bf8dfb1550a3a2e742e8b455a3e5730e9e6a7a9824d17acc0f72a7f67eae0f0970f8bde46dcdefaed3047cf807e7f00a42e5fd11d40f5e98533d7574425b7d2bc3b3845c443008b58980e768e464e17cc6f6b3939eee52f713963d07d8c4abf02448ef0b889c9671e2f8a436ddeeffcca7176e9bf9d1005ecd377f2fa67c23ed1f137e60bf46018a8bd613d038e883704fc26e798969df35ec7bbc6a4fe46d8910bd82fa3cded265d0a3b6d399e4251e4d8233daa21b5812fded6536198ff13aa5a1cd46a5b9a17a4ddc1d9f85544d1d1cc16f3df858038c8e071a11a7e157a85a6a8dc47e88d75e7009a8b26fdb73f33a2a70f1e0c259f8f9533b9b8f9af9288b7274f21baeec78d396f8bacdcc22471207d9b4efccd3fedc5c5a2214ff5e51c553f35e21ae696fe51e8df733a8e06f50f419e599e9f9e4b37ce643fc810faaa47989771509d69a110ac916261427026369a21263ac4460fb4f708f8ae28599856db7cb6a43ac8e03d64a9609807e76c5f312b9d1863bfa304e8953647648b4f4ab0ed995e":hex:"4109cdbec3240ad74cc6c37f39300f70fede16e21efc77f7865998714aad0b5e" + +SHA-512 Invalid parameters +8 + +SHA-512 Valid parameters +7 + +SHA-384 Test Vector NIST CAVS #1 +depends_on:2:3 +9:hex:"":hex:"38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b" + +SHA-384 Test Vector NIST CAVS #2 +depends_on:2:3 +9:hex:"ab":hex:"fb94d5be118865f6fcbc978b825da82cff188faec2f66cb84b2537d74b4938469854b0ca89e66fa2e182834736629f3d" + +SHA-384 Test Vector NIST CAVS #3 +depends_on:2:3 +9:hex:"7c27":hex:"3d80be467df86d63abb9ea1d3f9cb39cd19890e7f2c53a6200bedc5006842b35e820dc4e0ca90ca9b97ab23ef07080fc" + +SHA-384 Test Vector NIST CAVS #4 +depends_on:2:3 +9:hex:"31f5ca":hex:"78d54b943421fdf7ba90a7fb9637c2073aa480454bd841d39ff72f4511fc21fb67797b652c0c823229342873d3bef955" + +SHA-384 Test Vector NIST CAVS #5 +depends_on:2:3 +9:hex:"7bdee3f8":hex:"8bdafba0777ee446c3431c2d7b1fbb631089f71d2ca417abc1d230e1aba64ec2f1c187474a6f4077d372c14ad407f99a" + +SHA-384 Test Vector NIST CAVS #6 +depends_on:2:3 +9:hex:"8f05604915":hex:"504e414bf1db1060f14c8c799e25b1e0c4dcf1504ebbd129998f0ae283e6de86e0d3c7e879c73ec3b1836c3ee89c2649" + +SHA-384 Test Vector NIST CAVS #7 +depends_on:2:3 +9:hex:"665da6eda214":hex:"4c022f112010908848312f8b8f1072625fd5c105399d562ea1d56130619a7eac8dfc3748fd05ee37e4b690be9daa9980" + +SHA-384 Test Vector NIST CAVS #8 +depends_on:2:3 +9:hex:"7f46ce506d593c4ed53c82edeb602037e0485befbee03f7f930fe532d18ff2a3f5fd6076672c8145a1bf40dd94f7abab47c9ae71c234213d2ad1069c2dac0b0ba15257ae672b8245960ae55bd50315c0097daa3a318745788d70d14706910809ca6e396237fe4934fa46f9ce782d66606d8bd6b2d283b1160513ce9c24e9f084b97891f99d4cdefc169a029e431ca772ba1bba426fce6f01d8e286014e5acc66b799e4db62bd4783322f8a32ff78e0de3957df50ce10871f4e0680df4e8ca3960af9bc6f4efa8eb3962d18f474eb178c3265cc46b8f2ff5ab1a7449fea297dfcfabfa01f28abbb7289bb354b691b5664ec6d098af51be19947ec5ba7ebd66380d1141953ba78d4aa5401679fa7b0a44db1981f864d3535c45afe4c61183d5b0ad51fae71ca07e34240283959f7530a32c70d95a088e501c230059f333b0670825009e7e22103ef22935830df1fac8ef877f5f3426dd54f7d1128dd871ad9a7d088f94c0e8712013295b8d69ae7623b880978c2d3c6ad26dc478f8dc47f5c0adcc618665dc3dc205a9071b2f2191e16cac5bd89bb59148fc719633752303aa08e518dbc389f0a5482caaa4c507b8729a6f3edd061efb39026cecc6399f51971cf7381d605e144a5928c8c2d1ad7467b05da2f202f4f3234e1aff19a0198a28685721c3d2d52311c721e3fdcbaf30214cdc3acff8c433880e104fb63f2df7ce69a97857819ba7ac00ac8eae1969764fde8f68cf8e0916d7e0c151147d4944f99f42ae50f30e1c79a42d2b6c5188d133d3cbbf69094027b354b295ccd0f7dc5a87d73638bd98ebfb00383ca0fa69cb8dcb35a12510e5e07ad8789047d0b63841a1bb928737e8b0a0c33254f47aa8bfbe3341a09c2b76dbcefa67e30df300d34f7b8465c4f869e51b6bcfe6cf68b238359a645036bf7f63f02924e087ce7457e483b6025a859903cb484574aa3b12cf946f32127d537c33bee3141b5db96d10a148c50ae045f287210757710d6846e04b202f79e87dd9a56bc6da15f84a77a7f63935e1dee00309cd276a8e7176cb04da6bb0e9009534438732cb42d008008853d38d19beba46e61006e30f7efd1bc7c2906b024e4ff898a1b58c448d68b43c6ab63f34f85b3ac6aa4475867e51b583844cb23829f4b30f4bdd817d88e2ef3e7b4fc0a624395b05ec5e8686082b24d29fef2b0d3c29e031d5f94f504b1d3df9361eb5ffbadb242e66c39a8094cfe62f85f639f3fd65fc8ae0c74a8f4c6e1d070b9183a434c722caaa0225f8bcd68614d6f0738ed62f8484ec96077d155c08e26c46be262a73e3551698bd70d8d5610cf37c4c306eed04ba6a040a9c3e6d7e15e8acda17f477c2484cf5c56b813313927be8387b1024f995e98fc87f1029091c01424bdc2b296c2eadb7d25b3e762a2fd0c2dcd1727ddf91db97c5984305265f3695a7f5472f2d72c94d68c27914f14f82aa8dd5fe4e2348b0ca967a3f98626a091552f5d0ffa2bf10350d23c996256c01fdeffb2c2c612519869f877e4929c6e95ff15040f1485e22ed14119880232fef3b57b3848f15b1766a5552879df8f06":hex:"cba9e3eb12a6f83db11e8a6ff40d1049854ee094416bc527fea931d8585428a8ed6242ce81f6769b36e2123a5c23483e" + +SHA-512 Test Vector NIST CAVS #1 +depends_on:2 +10:hex:"":hex:"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" + +SHA-512 Test Vector NIST CAVS #2 +depends_on:2 +10:hex:"8f":hex:"e4cd2d19931b5aad9c920f45f56f6ce34e3d38c6d319a6e11d0588ab8b838576d6ce6d68eea7c830de66e2bd96458bfa7aafbcbec981d4ed040498c3dd95f22a" + +SHA-512 Test Vector NIST CAVS #3 +depends_on:2 +10:hex:"e724":hex:"7dbb520221a70287b23dbcf62bfc1b73136d858e86266732a7fffa875ecaa2c1b8f673b5c065d360c563a7b9539349f5f59bef8c0c593f9587e3cd50bb26a231" + +SHA-512 Test Vector NIST CAVS #4 +depends_on:2 +10:hex:"de4c90":hex:"33ce98281045a5c4c9df0363d8196f1d7dfcd5ee46ac89776fd8a4344c12f123a66788af5bd41ceff1941aa5637654b4064c88c14e00465ab79a2fc6c97e1014" + +SHA-512 Test Vector NIST CAVS #5 +depends_on:2 +10:hex:"a801e94b":hex:"dadb1b5a27f9fece8d86adb2a51879beb1787ff28f4e8ce162cad7fee0f942efcabbf738bc6f797fc7cc79a3a75048cd4c82ca0757a324695bfb19a557e56e2f" + +SHA-512 Test Vector NIST CAVS #6 +depends_on:2 +10:hex:"94390d3502":hex:"b6175c4c4cccf69e0ce5f0312010886ea6b34d43673f942ae42483f9cbb7da817de4e11b5d58e25a3d9bd721a22cdffe1c40411cc45df1911fa5506129b69297" + +SHA-512 Test Vector NIST CAVS #7 +depends_on:2 +10:hex:"49297dd63e5f":hex:"1fcc1e6f6870859d11649f5e5336a9cd16329c029baf04d5a6edf257889a2e9522b497dd656bb402da461307c4ee382e2e89380c8e6e6e7697f1e439f650fa94" + +SHA-512 Test Vector NIST CAVS #8 +depends_on:2 +10:hex:"990d1ae71a62d7bda9bfdaa1762a68d296eee72a4cd946f287a898fbabc002ea941fd8d4d991030b4d27a637cce501a834bb95eab1b7889a3e784c7968e67cbf552006b206b68f76d9191327524fcc251aeb56af483d10b4e0c6c5e599ee8c0fe4faeca8293844a8547c6a9a90d093f2526873a19ad4a5e776794c68c742fb834793d2dfcb7fea46c63af4b70fd11cb6e41834e72ee40edb067b292a794990c288d5007e73f349fb383af6a756b8301ad6e5e0aa8cd614399bb3a452376b1575afa6bdaeaafc286cb064bb91edef97c632b6c1113d107fa93a0905098a105043c2f05397f702514439a08a9e5ddc196100721d45c8fc17d2ed659376f8a00bd5cb9a0860e26d8a29d8d6aaf52de97e9346033d6db501a35dbbaf97c20b830cd2d18c2532f3a59cc497ee64c0e57d8d060e5069b28d86edf1adcf59144b221ce3ddaef134b3124fbc7dd000240eff0f5f5f41e83cd7f5bb37c9ae21953fe302b0f6e8b68fa91c6ab99265c64b2fd9cd4942be04321bb5d6d71932376c6f2f88e02422ba6a5e2cb765df93fd5dd0728c6abdaf03bce22e0678a544e2c3636f741b6f4447ee58a8fc656b43ef817932176adbfc2e04b2c812c273cd6cbfa4098f0be036a34221fa02643f5ee2e0b38135f2a18ecd2f16ebc45f8eb31b8ab967a1567ee016904188910861ca1fa205c7adaa194b286893ffe2f4fbe0384c2aef72a4522aeafd3ebc71f9db71eeeef86c48394a1c86d5b36c352cc33a0a2c800bc99e62fd65b3a2fd69e0b53996ec13d8ce483ce9319efd9a85acefabdb5342226febb83fd1daf4b24265f50c61c6de74077ef89b6fecf9f29a1f871af1e9f89b2d345cda7499bd45c42fa5d195a1e1a6ba84851889e730da3b2b916e96152ae0c92154b49719841db7e7cc707ba8a5d7b101eb4ac7b629bb327817910fff61580b59aab78182d1a2e33473d05b00b170b29e331870826cfe45af206aa7d0246bbd8566ca7cfb2d3c10bfa1db7dd48dd786036469ce7282093d78b5e1a5b0fc81a54c8ed4ceac1e5305305e78284ac276f5d7862727aff246e17addde50c670028d572cbfc0be2e4f8b2eb28fa68ad7b4c6c2a239c460441bfb5ea049f23b08563b4e47729a59e5986a61a6093dbd54f8c36ebe87edae01f251cb060ad1364ce677d7e8d5a4a4ca966a7241cc360bc2acb280e5f9e9c1b032ad6a180a35e0c5180b9d16d026c865b252098cc1d99ba7375ca31c7702c0d943d5e3dd2f6861fa55bd46d94b67ed3e52eccd8dd06d968e01897d6de97ed3058d91dd":hex:"8e4bc6f8b8c60fe4d68c61d9b159c8693c3151c46749af58da228442d927f23359bd6ccd6c2ec8fa3f00a86cecbfa728e1ad60b821ed22fcd309ba91a4138bc9" + +SHA-1 Selftest +depends_on:4:0 +11 + +SHA-256 Selftest +depends_on:4:1 +12 + +SHA-512 Selftest +depends_on:4:2 +13 + diff --git a/third_party/mbedtls/test/test_suite_ssl.c b/third_party/mbedtls/test/test_suite_ssl.c new file mode 100644 index 000000000..3d3618115 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_ssl.c @@ -0,0 +1,6424 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +#include "third_party/mbedtls/ssl_invasive.h" +#include "libc/testlib/testlib.h" +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_ssl.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_ssl.function + * Test suite data : suites/test_suite_ssl.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_SSL_TLS_C) +#include "third_party/mbedtls/ssl.h" +#include "third_party/mbedtls/ssl_internal.h" +#include "third_party/mbedtls/ctr_drbg.h" +#include "third_party/mbedtls/entropy.h" +#include "third_party/mbedtls/certs.h" +#include "third_party/mbedtls/debug.h" +#include "third_party/mbedtls/ssl_tls13_keys.h" +enum +{ +#define MBEDTLS_SSL_TLS1_3_LABEL( name, string ) \ + tls1_3_label_ ## name, +MBEDTLS_SSL_TLS1_3_LABEL_LIST +#undef MBEDTLS_SSL_TLS1_3_LABEL +}; + +typedef struct log_pattern +{ + const char *pattern; + size_t counter; +} log_pattern; + +/* + * This function can be passed to mbedtls to receive output logs from it. In + * this case, it will count the instances of a log_pattern in the received + * logged messages. + */ +void log_analyzer( void *ctx, int level, + const char *file, int line, + const char *str ) +{ + log_pattern *p = (log_pattern *) ctx; + + (void) level; + (void) line; + (void) file; + + if( NULL != p && + NULL != p->pattern && + NULL != strstr( str, p->pattern ) ) + { + p->counter++; + } +} + +/* Invalid minor version used when not specifying a min/max version or expecting a test to fail */ +#define TEST_SSL_MINOR_VERSION_NONE -1 + +typedef struct handshake_test_options +{ + const char *cipher; + int client_min_version; + int client_max_version; + int server_min_version; + int server_max_version; + int expected_negotiated_version; + int pk_alg; + data_t *psk_str; + int dtls; + int srv_auth_mode; + int serialize; + int mfl; + int cli_msg_len; + int srv_msg_len; + int expected_cli_fragments; + int expected_srv_fragments; + int renegotiate; + int legacy_renegotiation; + void *srv_log_obj; + void *cli_log_obj; + void (*srv_log_fun)(void *, int, const char *, int, const char *); + void (*cli_log_fun)(void *, int, const char *, int, const char *); + int resize_buffers; +} handshake_test_options; + +void init_handshake_options( handshake_test_options *opts ) +{ + opts->cipher = ""; + opts->client_min_version = TEST_SSL_MINOR_VERSION_NONE; + opts->client_max_version = TEST_SSL_MINOR_VERSION_NONE; + opts->server_min_version = TEST_SSL_MINOR_VERSION_NONE; + opts->server_max_version = TEST_SSL_MINOR_VERSION_NONE; + opts->expected_negotiated_version = MBEDTLS_SSL_MINOR_VERSION_3; + opts->pk_alg = MBEDTLS_PK_RSA; + opts->psk_str = NULL; + opts->dtls = 0; + opts->srv_auth_mode = MBEDTLS_SSL_VERIFY_NONE; + opts->serialize = 0; + opts->mfl = MBEDTLS_SSL_MAX_FRAG_LEN_NONE; + opts->cli_msg_len = 100; + opts->srv_msg_len = 100; + opts->expected_cli_fragments = 1; + opts->expected_srv_fragments = 1; + opts->renegotiate = 0; + opts->legacy_renegotiation = MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION; + opts->srv_log_obj = NULL; + opts->srv_log_obj = NULL; + opts->srv_log_fun = NULL; + opts->cli_log_fun = NULL; + opts->resize_buffers = 1; +} +/* + * Buffer structure for custom I/O callbacks. + */ + +typedef struct mbedtls_test_buffer +{ + size_t start; + size_t content_length; + size_t capacity; + unsigned char *buffer; +} mbedtls_test_buffer; + +/* + * Initialises \p buf. After calling this function it is safe to call + * `mbedtls_test_buffer_free()` on \p buf. + */ +void mbedtls_test_buffer_init( mbedtls_test_buffer *buf ) +{ + memset( buf, 0, sizeof( *buf ) ); +} + +/* + * Sets up \p buf. After calling this function it is safe to call + * `mbedtls_test_buffer_put()` and `mbedtls_test_buffer_get()` on \p buf. + */ +int mbedtls_test_buffer_setup( mbedtls_test_buffer *buf, size_t capacity ) +{ + buf->buffer = (unsigned char*) mbedtls_calloc( capacity, + sizeof(unsigned char) ); + if( NULL == buf->buffer ) + return MBEDTLS_ERR_SSL_ALLOC_FAILED; + buf->capacity = capacity; + + return 0; +} + +void mbedtls_test_buffer_free( mbedtls_test_buffer *buf ) +{ + if( buf->buffer != NULL ) + mbedtls_free( buf->buffer ); + + memset( buf, 0, sizeof( *buf ) ); +} + +/* + * Puts \p input_len bytes from the \p input buffer into the ring buffer \p buf. + * + * \p buf must have been initialized and set up by calling + * `mbedtls_test_buffer_init()` and `mbedtls_test_buffer_setup()`. + * + * \retval \p input_len, if the data fits. + * \retval 0 <= value < \p input_len, if the data does not fit. + * \retval -1, if \p buf is NULL, it hasn't been set up or \p input_len is not + * zero and \p input is NULL. + */ +int mbedtls_test_buffer_put( mbedtls_test_buffer *buf, + const unsigned char *input, size_t input_len ) +{ + size_t overflow = 0; + + if( ( buf == NULL ) || ( buf->buffer == NULL ) ) + return -1; + + /* Reduce input_len to a number that fits in the buffer. */ + if ( ( buf->content_length + input_len ) > buf->capacity ) + { + input_len = buf->capacity - buf->content_length; + } + + if( input == NULL ) + { + return ( input_len == 0 ) ? 0 : -1; + } + + /* Check if the buffer has not come full circle and free space is not in + * the middle */ + if( buf->start + buf->content_length < buf->capacity ) + { + + /* Calculate the number of bytes that need to be placed at lower memory + * address */ + if( buf->start + buf->content_length + input_len + > buf->capacity ) + { + overflow = ( buf->start + buf->content_length + input_len ) + % buf->capacity; + } + + memcpy( buf->buffer + buf->start + buf->content_length, input, + input_len - overflow ); + memcpy( buf->buffer, input + input_len - overflow, overflow ); + + } + else + { + /* The buffer has come full circle and free space is in the middle */ + memcpy( buf->buffer + buf->start + buf->content_length - buf->capacity, + input, input_len ); + } + + buf->content_length += input_len; + return input_len; +} + +/* + * Gets \p output_len bytes from the ring buffer \p buf into the + * \p output buffer. The output buffer can be NULL, in this case a part of the + * ring buffer will be dropped, if the requested length is available. + * + * \p buf must have been initialized and set up by calling + * `mbedtls_test_buffer_init()` and `mbedtls_test_buffer_setup()`. + * + * \retval \p output_len, if the data is available. + * \retval 0 <= value < \p output_len, if the data is not available. + * \retval -1, if \buf is NULL or it hasn't been set up. + */ +int mbedtls_test_buffer_get( mbedtls_test_buffer *buf, + unsigned char* output, size_t output_len ) +{ + size_t overflow = 0; + + if( ( buf == NULL ) || ( buf->buffer == NULL ) ) + return -1; + + if( output == NULL && output_len == 0 ) + return 0; + + if( buf->content_length < output_len ) + output_len = buf->content_length; + + /* Calculate the number of bytes that need to be drawn from lower memory + * address */ + if( buf->start + output_len > buf->capacity ) + { + overflow = ( buf->start + output_len ) % buf->capacity; + } + + if( output != NULL ) + { + memcpy( output, buf->buffer + buf->start, output_len - overflow ); + memcpy( output + output_len - overflow, buf->buffer, overflow ); + } + + buf->content_length -= output_len; + buf->start = ( buf->start + output_len ) % buf->capacity; + + return output_len; +} + +/* + * Errors used in the message transport mock tests + */ + #define MBEDTLS_TEST_ERROR_ARG_NULL -11 + #define MBEDTLS_TEST_ERROR_MESSAGE_TRUNCATED -44 + +/* + * Context for a message metadata queue (fifo) that is on top of the ring buffer. + */ +typedef struct mbedtls_test_message_queue +{ + size_t *messages; + int pos; + int num; + int capacity; +} mbedtls_test_message_queue; + +/* + * Setup and free functions for the message metadata queue. + * + * \p capacity describes the number of message metadata chunks that can be held + * within the queue. + * + * \retval 0, if a metadata queue of a given length can be allocated. + * \retval MBEDTLS_ERR_SSL_ALLOC_FAILED, if allocation failed. + */ +int mbedtls_test_message_queue_setup( mbedtls_test_message_queue *queue, + size_t capacity ) +{ + queue->messages = (size_t*) mbedtls_calloc( capacity, sizeof(size_t) ); + if( NULL == queue->messages ) + return MBEDTLS_ERR_SSL_ALLOC_FAILED; + + queue->capacity = capacity; + queue->pos = 0; + queue->num = 0; + + return 0; +} + +void mbedtls_test_message_queue_free( mbedtls_test_message_queue *queue ) +{ + if( queue == NULL ) + return; + + if( queue->messages != NULL ) + mbedtls_free( queue->messages ); + + memset( queue, 0, sizeof( *queue ) ); +} + +/* + * Push message length information onto the message metadata queue. + * This will become the last element to leave it (fifo). + * + * \retval MBEDTLS_TEST_ERROR_ARG_NULL, if the queue is null. + * \retval MBEDTLS_ERR_SSL_WANT_WRITE, if the queue is full. + * \retval \p len, if the push was successful. + */ +int mbedtls_test_message_queue_push_info( mbedtls_test_message_queue *queue, + size_t len ) +{ + int place; + if( queue == NULL ) + return MBEDTLS_TEST_ERROR_ARG_NULL; + + if( queue->num >= queue->capacity ) + return MBEDTLS_ERR_SSL_WANT_WRITE; + + place = ( queue->pos + queue->num ) % queue->capacity; + queue->messages[place] = len; + queue->num++; + return len; +} + +/* + * Pop information about the next message length from the queue. This will be + * the oldest inserted message length(fifo). \p msg_len can be null, in which + * case the data will be popped from the queue but not copied anywhere. + * + * \retval MBEDTLS_TEST_ERROR_ARG_NULL, if the queue is null. + * \retval MBEDTLS_ERR_SSL_WANT_READ, if the queue is empty. + * \retval message length, if the pop was successful, up to the given + \p buf_len. + */ +int mbedtls_test_message_queue_pop_info( mbedtls_test_message_queue *queue, + size_t buf_len ) +{ + size_t message_length; + if( queue == NULL ) + return MBEDTLS_TEST_ERROR_ARG_NULL; + if( queue->num == 0 ) + return MBEDTLS_ERR_SSL_WANT_READ; + + message_length = queue->messages[queue->pos]; + queue->messages[queue->pos] = 0; + queue->num--; + queue->pos++; + queue->pos %= queue->capacity; + if( queue->pos < 0 ) + queue->pos += queue->capacity; + + return ( message_length > buf_len ) ? buf_len : message_length; +} + +/* + * Take a peek on the info about the next message length from the queue. + * This will be the oldest inserted message length(fifo). + * + * \retval MBEDTLS_TEST_ERROR_ARG_NULL, if the queue is null. + * \retval MBEDTLS_ERR_SSL_WANT_READ, if the queue is empty. + * \retval 0, if the peek was successful. + * \retval MBEDTLS_TEST_ERROR_MESSAGE_TRUNCATED, if the given buffer length is + * too small to fit the message. In this case the \p msg_len will be + * set to the full message length so that the + * caller knows what portion of the message can be dropped. + */ +int mbedtls_test_message_queue_peek_info( mbedtls_test_message_queue *queue, + size_t buf_len, size_t* msg_len ) +{ + if( queue == NULL || msg_len == NULL ) + return MBEDTLS_TEST_ERROR_ARG_NULL; + if( queue->num == 0 ) + return MBEDTLS_ERR_SSL_WANT_READ; + + *msg_len = queue->messages[queue->pos]; + return ( *msg_len > buf_len ) ? MBEDTLS_TEST_ERROR_MESSAGE_TRUNCATED : 0; +} +/* + * Context for the I/O callbacks simulating network connection. + */ + +#define MBEDTLS_MOCK_SOCKET_CONNECTED 1 + +typedef struct mbedtls_mock_socket +{ + int status; + mbedtls_test_buffer *input; + mbedtls_test_buffer *output; + struct mbedtls_mock_socket *peer; +} mbedtls_mock_socket; + +/* + * Setup and teardown functions for mock sockets. + */ +void mbedtls_mock_socket_init( mbedtls_mock_socket *socket ) +{ + memset( socket, 0, sizeof( *socket ) ); +} + +/* + * Closes the socket \p socket. + * + * \p socket must have been previously initialized by calling + * mbedtls_mock_socket_init(). + * + * This function frees all allocated resources and both sockets are aware of the + * new connection state. + * + * That is, this function does not simulate half-open TCP connections and the + * phenomenon that when closing a UDP connection the peer is not aware of the + * connection having been closed. + */ +void mbedtls_mock_socket_close( mbedtls_mock_socket* socket ) +{ + if( socket == NULL ) + return; + + if( socket->input != NULL ) + { + mbedtls_test_buffer_free( socket->input ); + mbedtls_free( socket->input ); + } + + if( socket->output != NULL ) + { + mbedtls_test_buffer_free( socket->output ); + mbedtls_free( socket->output ); + } + + if( socket->peer != NULL ) + memset( socket->peer, 0, sizeof( *socket->peer ) ); + + memset( socket, 0, sizeof( *socket ) ); +} + +/* + * Establishes a connection between \p peer1 and \p peer2. + * + * \p peer1 and \p peer2 must have been previously initialized by calling + * mbedtls_mock_socket_init(). + * + * The capacites of the internal buffers are set to \p bufsize. Setting this to + * the correct value allows for simulation of MTU, sanity testing the mock + * implementation and mocking TCP connections with lower memory cost. + */ +int mbedtls_mock_socket_connect( mbedtls_mock_socket* peer1, + mbedtls_mock_socket* peer2, + size_t bufsize ) +{ + int ret = -1; + + peer1->output = + (mbedtls_test_buffer*) mbedtls_calloc( 1, sizeof(mbedtls_test_buffer) ); + if( peer1->output == NULL ) + { + ret = MBEDTLS_ERR_SSL_ALLOC_FAILED; + goto exit; + } + mbedtls_test_buffer_init( peer1->output ); + if( 0 != ( ret = mbedtls_test_buffer_setup( peer1->output, bufsize ) ) ) + { + goto exit; + } + + peer2->output = + (mbedtls_test_buffer*) mbedtls_calloc( 1, sizeof(mbedtls_test_buffer) ); + if( peer2->output == NULL ) + { + ret = MBEDTLS_ERR_SSL_ALLOC_FAILED; + goto exit; + } + mbedtls_test_buffer_init( peer2->output ); + if( 0 != ( ret = mbedtls_test_buffer_setup( peer2->output, bufsize ) ) ) + { + goto exit; + } + + peer1->peer = peer2; + peer2->peer = peer1; + peer1->input = peer2->output; + peer2->input = peer1->output; + + peer1->status = peer2->status = MBEDTLS_MOCK_SOCKET_CONNECTED; + ret = 0; + +exit: + + if( ret != 0 ) + { + mbedtls_mock_socket_close( peer1 ); + mbedtls_mock_socket_close( peer2 ); + } + + return ret; +} + +/* + * Callbacks for simulating blocking I/O over connection-oriented transport. + */ + +int mbedtls_mock_tcp_send_b( void *ctx, const unsigned char *buf, size_t len ) +{ + mbedtls_mock_socket *socket = (mbedtls_mock_socket*) ctx; + + if( socket == NULL || socket->status != MBEDTLS_MOCK_SOCKET_CONNECTED ) + return -1; + + return mbedtls_test_buffer_put( socket->output, buf, len ); +} + +int mbedtls_mock_tcp_recv_b( void *ctx, unsigned char *buf, size_t len ) +{ + mbedtls_mock_socket *socket = (mbedtls_mock_socket*) ctx; + + if( socket == NULL || socket->status != MBEDTLS_MOCK_SOCKET_CONNECTED ) + return -1; + + return mbedtls_test_buffer_get( socket->input, buf, len ); +} + +/* + * Callbacks for simulating non-blocking I/O over connection-oriented transport. + */ + +int mbedtls_mock_tcp_send_nb( void *ctx, const unsigned char *buf, size_t len ) +{ + mbedtls_mock_socket *socket = (mbedtls_mock_socket*) ctx; + + if( socket == NULL || socket->status != MBEDTLS_MOCK_SOCKET_CONNECTED ) + return -1; + + if( socket->output->capacity == socket->output->content_length ) + { + return MBEDTLS_ERR_SSL_WANT_WRITE; + } + + return mbedtls_test_buffer_put( socket->output, buf, len ); +} + +int mbedtls_mock_tcp_recv_nb( void *ctx, unsigned char *buf, size_t len ) +{ + mbedtls_mock_socket *socket = (mbedtls_mock_socket*) ctx; + + if( socket == NULL || socket->status != MBEDTLS_MOCK_SOCKET_CONNECTED ) + return -1; + + if( socket->input->content_length == 0 ) + { + return MBEDTLS_ERR_SSL_WANT_READ; + } + + return mbedtls_test_buffer_get( socket->input, buf, len ); +} + +/* Errors used in the message socket mocks */ + +#define MBEDTLS_TEST_ERROR_CONTEXT_ERROR -55 +#define MBEDTLS_TEST_ERROR_SEND_FAILED -66 +#define MBEDTLS_TEST_ERROR_RECV_FAILED -77 + +/* + * Structure used as an addon, or a wrapper, around the mocked sockets. + * Contains an input queue, to which the other socket pushes metadata, + * and an output queue, to which this one pushes metadata. This context is + * considered as an owner of the input queue only, which is initialized and + * freed in the respective setup and free calls. + */ +typedef struct mbedtls_test_message_socket_context +{ + mbedtls_test_message_queue* queue_input; + mbedtls_test_message_queue* queue_output; + mbedtls_mock_socket* socket; +} mbedtls_test_message_socket_context; + +void mbedtls_message_socket_init( mbedtls_test_message_socket_context *ctx ) +{ + ctx->queue_input = NULL; + ctx->queue_output = NULL; + ctx->socket = NULL; +} + +/* + * Setup a given mesasge socket context including initialization of + * input/output queues to a chosen capacity of messages. Also set the + * corresponding mock socket. + * + * \retval 0, if everything succeeds. + * \retval MBEDTLS_ERR_SSL_ALLOC_FAILED, if allocation of a message + * queue failed. + */ +int mbedtls_message_socket_setup( mbedtls_test_message_queue* queue_input, + mbedtls_test_message_queue* queue_output, + size_t queue_capacity, + mbedtls_mock_socket* socket, + mbedtls_test_message_socket_context* ctx ) +{ + int ret = mbedtls_test_message_queue_setup( queue_input, queue_capacity ); + if( ret != 0 ) + return ret; + ctx->queue_input = queue_input; + ctx->queue_output = queue_output; + ctx->socket = socket; + mbedtls_mock_socket_init( socket ); + + return 0; +} + +/* + * Close a given message socket context, along with the socket itself. Free the + * memory allocated by the input queue. + */ +void mbedtls_message_socket_close( mbedtls_test_message_socket_context* ctx ) +{ + if( ctx == NULL ) + return; + + mbedtls_test_message_queue_free( ctx->queue_input ); + mbedtls_mock_socket_close( ctx->socket ); + memset( ctx, 0, sizeof( *ctx ) ); +} + +/* + * Send one message through a given message socket context. + * + * \retval \p len, if everything succeeds. + * \retval MBEDTLS_TEST_ERROR_CONTEXT_ERROR, if any of the needed context + * elements or the context itself is null. + * \retval MBEDTLS_TEST_ERROR_SEND_FAILED if mbedtls_mock_tcp_send_b failed. + * \retval MBEDTLS_ERR_SSL_WANT_WRITE, if the output queue is full. + * + * This function will also return any error from + * mbedtls_test_message_queue_push_info. + */ +int mbedtls_mock_tcp_send_msg( void *ctx, const unsigned char *buf, size_t len ) +{ + mbedtls_test_message_queue* queue; + mbedtls_mock_socket* socket; + mbedtls_test_message_socket_context *context = (mbedtls_test_message_socket_context*) ctx; + + if( context == NULL || context->socket == NULL + || context->queue_output == NULL ) + { + return MBEDTLS_TEST_ERROR_CONTEXT_ERROR; + } + + queue = context->queue_output; + socket = context->socket; + + if( queue->num >= queue->capacity ) + return MBEDTLS_ERR_SSL_WANT_WRITE; + + if( mbedtls_mock_tcp_send_b( socket, buf, len ) != (int) len ) + return MBEDTLS_TEST_ERROR_SEND_FAILED; + + return mbedtls_test_message_queue_push_info( queue, len ); +} + +/* + * Receive one message from a given message socket context and return message + * length or an error. + * + * \retval message length, if everything succeeds. + * \retval MBEDTLS_TEST_ERROR_CONTEXT_ERROR, if any of the needed context + * elements or the context itself is null. + * \retval MBEDTLS_TEST_ERROR_RECV_FAILED if mbedtls_mock_tcp_recv_b failed. + * + * This function will also return any error other than + * MBEDTLS_TEST_ERROR_MESSAGE_TRUNCATED from mbedtls_test_message_queue_peek_info. + */ +int mbedtls_mock_tcp_recv_msg( void *ctx, unsigned char *buf, size_t buf_len ) +{ + mbedtls_test_message_queue* queue; + mbedtls_mock_socket* socket; + mbedtls_test_message_socket_context *context = (mbedtls_test_message_socket_context*) ctx; + size_t drop_len = 0; + size_t msg_len; + int ret; + + if( context == NULL || context->socket == NULL + || context->queue_input == NULL ) + { + return MBEDTLS_TEST_ERROR_CONTEXT_ERROR; + } + + queue = context->queue_input; + socket = context->socket; + + /* Peek first, so that in case of a socket error the data remains in + * the queue. */ + ret = mbedtls_test_message_queue_peek_info( queue, buf_len, &msg_len ); + if( ret == MBEDTLS_TEST_ERROR_MESSAGE_TRUNCATED ) + { + /* Calculate how much to drop */ + drop_len = msg_len - buf_len; + + /* Set the requested message len to be buffer length */ + msg_len = buf_len; + } else if( ret != 0 ) + { + return ret; + } + + if( mbedtls_mock_tcp_recv_b( socket, buf, msg_len ) != (int) msg_len ) + return MBEDTLS_TEST_ERROR_RECV_FAILED; + + if( ret == MBEDTLS_TEST_ERROR_MESSAGE_TRUNCATED ) + { + /* Drop the remaining part of the message */ + if( mbedtls_mock_tcp_recv_b( socket, NULL, drop_len ) != (int) drop_len ) + { + /* Inconsistent state - part of the message was read, + * and a part couldn't. Not much we can do here, but it should not + * happen in test environment, unless forced manually. */ + } + } + mbedtls_test_message_queue_pop_info( queue, buf_len ); + + return msg_len; +} + +#if defined(MBEDTLS_X509_CRT_PARSE_C) && \ + defined(MBEDTLS_ENTROPY_C) && \ + defined(MBEDTLS_CTR_DRBG_C) + +/* + * Structure with endpoint's certificates for SSL communication tests. + */ +typedef struct mbedtls_endpoint_certificate +{ + mbedtls_x509_crt ca_cert; + mbedtls_x509_crt cert; + mbedtls_pk_context pkey; +} mbedtls_endpoint_certificate; + +/* + * Endpoint structure for SSL communication tests. + */ +typedef struct mbedtls_endpoint +{ + const char *name; + mbedtls_ssl_context ssl; + mbedtls_ssl_config conf; + mbedtls_ctr_drbg_context ctr_drbg; + mbedtls_entropy_context entropy; + mbedtls_mock_socket socket; + mbedtls_endpoint_certificate cert; +} mbedtls_endpoint; + +/* + * Initializes \p ep_cert structure and assigns it to endpoint + * represented by \p ep. + * + * \retval 0 on success, otherwise error code. + */ +int mbedtls_endpoint_certificate_init( mbedtls_endpoint *ep, int pk_alg ) +{ + int i = 0; + int ret = -1; + mbedtls_endpoint_certificate *cert; + + if( ep == NULL ) + { + return MBEDTLS_ERR_SSL_BAD_INPUT_DATA; + } + + cert = &( ep->cert ); + mbedtls_x509_crt_init( &( cert->ca_cert ) ); + mbedtls_x509_crt_init( &( cert->cert ) ); + mbedtls_pk_init( &( cert->pkey ) ); + + /* Load the trusted CA */ + + for( i = 0; mbedtls_test_cas_der[i] != NULL; i++ ) + { + ret = mbedtls_x509_crt_parse_der( &( cert->ca_cert ), + (const unsigned char *) mbedtls_test_cas_der[i], + mbedtls_test_cas_der_len[i] ); + TEST_ASSERT( ret == 0 ); + } + + /* Load own certificate and private key */ + + if( ep->conf.endpoint == MBEDTLS_SSL_IS_SERVER ) + { + if( pk_alg == MBEDTLS_PK_RSA ) + { + ret = mbedtls_x509_crt_parse( &( cert->cert ), + (const unsigned char*) mbedtls_test_srv_crt_rsa_sha256_der, + mbedtls_test_srv_crt_rsa_sha256_der_len ); + TEST_ASSERT( ret == 0 ); + + ret = mbedtls_pk_parse_key( &( cert->pkey ), + (const unsigned char*) mbedtls_test_srv_key_rsa_der, + mbedtls_test_srv_key_rsa_der_len, NULL, 0 ); + TEST_ASSERT( ret == 0 ); + } + else + { + ret = mbedtls_x509_crt_parse( &( cert->cert ), + (const unsigned char*) mbedtls_test_srv_crt_ec_der, + mbedtls_test_srv_crt_ec_der_len ); + TEST_ASSERT( ret == 0 ); + + ret = mbedtls_pk_parse_key( &( cert->pkey ), + (const unsigned char*) mbedtls_test_srv_key_ec_der, + mbedtls_test_srv_key_ec_der_len, NULL, 0 ); + TEST_ASSERT( ret == 0 ); + } + } + else + { + if( pk_alg == MBEDTLS_PK_RSA ) + { + ret = mbedtls_x509_crt_parse( &( cert->cert ), + (const unsigned char *) mbedtls_test_cli_crt_rsa_der, + mbedtls_test_cli_crt_rsa_der_len ); + TEST_ASSERT( ret == 0 ); + + ret = mbedtls_pk_parse_key( &( cert->pkey ), + (const unsigned char *) mbedtls_test_cli_key_rsa_der, + mbedtls_test_cli_key_rsa_der_len, NULL, 0 ); + TEST_ASSERT( ret == 0 ); + } + else + { + ret = mbedtls_x509_crt_parse( &( cert->cert ), + (const unsigned char *) mbedtls_test_cli_crt_ec_der, + mbedtls_test_cli_crt_ec_len ); + TEST_ASSERT( ret == 0 ); + + ret = mbedtls_pk_parse_key( &( cert->pkey ), + (const unsigned char *) mbedtls_test_cli_key_ec_der, + mbedtls_test_cli_key_ec_der_len, NULL, 0 ); + TEST_ASSERT( ret == 0 ); + } + } + + mbedtls_ssl_conf_ca_chain( &( ep->conf ), &( cert->ca_cert ), NULL ); + + ret = mbedtls_ssl_conf_own_cert( &( ep->conf ), &( cert->cert ), + &( cert->pkey ) ); + TEST_ASSERT( ret == 0 ); + +exit: + if( ret != 0 ) + { + mbedtls_x509_crt_free( &( cert->ca_cert ) ); + mbedtls_x509_crt_free( &( cert->cert ) ); + mbedtls_pk_free( &( cert->pkey ) ); + } + + return ret; +} + +/* + * Initializes \p ep structure. It is important to call `mbedtls_endpoint_free()` + * after calling this function even if it fails. + * + * \p endpoint_type must be set as MBEDTLS_SSL_IS_SERVER or + * MBEDTLS_SSL_IS_CLIENT. + * \p pk_alg the algorithm to use, currently only MBEDTLS_PK_RSA and + * MBEDTLS_PK_ECDSA are supported. + * \p dtls_context - in case of DTLS - this is the context handling metadata. + * \p input_queue - used only in case of DTLS. + * \p output_queue - used only in case of DTLS. + * + * \retval 0 on success, otherwise error code. + */ +int mbedtls_endpoint_init( mbedtls_endpoint *ep, int endpoint_type, int pk_alg, + mbedtls_test_message_socket_context *dtls_context, + mbedtls_test_message_queue *input_queue, + mbedtls_test_message_queue *output_queue ) +{ + int ret = -1; + + if( dtls_context != NULL && ( input_queue == NULL || output_queue == NULL ) ) + return MBEDTLS_ERR_SSL_BAD_INPUT_DATA; + + if( ep == NULL ) + return MBEDTLS_ERR_SSL_BAD_INPUT_DATA; + + memset( ep, 0, sizeof( *ep ) ); + + ep->name = ( endpoint_type == MBEDTLS_SSL_IS_SERVER ) ? "Server" : "Client"; + + mbedtls_ssl_init( &( ep->ssl ) ); + mbedtls_ssl_config_init( &( ep->conf ) ); + mbedtls_ctr_drbg_init( &( ep->ctr_drbg ) ); + mbedtls_ssl_conf_rng( &( ep->conf ), + mbedtls_ctr_drbg_random, + &( ep->ctr_drbg ) ); + mbedtls_entropy_init( &( ep->entropy ) ); + if( dtls_context != NULL ) + { + TEST_ASSERT( mbedtls_message_socket_setup( input_queue, output_queue, + 100, &( ep->socket ), + dtls_context ) == 0 ); + } + else + { + mbedtls_mock_socket_init( &( ep->socket ) ); + } + + ret = mbedtls_ctr_drbg_seed( &( ep->ctr_drbg ), mbedtls_entropy_func, + &( ep->entropy ), (const unsigned char *) ( ep->name ), + strlen( ep->name ) ); + TEST_ASSERT( ret == 0 ); + + /* Non-blocking callbacks without timeout */ + if( dtls_context != NULL ) + { + mbedtls_ssl_set_bio( &( ep->ssl ), dtls_context, + mbedtls_mock_tcp_send_msg, + mbedtls_mock_tcp_recv_msg, + NULL ); + } + else + { + mbedtls_ssl_set_bio( &( ep->ssl ), &( ep->socket ), + mbedtls_mock_tcp_send_nb, + mbedtls_mock_tcp_recv_nb, + NULL ); + } + + ret = mbedtls_ssl_config_defaults( &( ep->conf ), endpoint_type, + ( dtls_context != NULL ) ? + MBEDTLS_SSL_TRANSPORT_DATAGRAM : + MBEDTLS_SSL_TRANSPORT_STREAM, + MBEDTLS_SSL_PRESET_DEFAULT ); + TEST_ASSERT( ret == 0 ); + + ret = mbedtls_ssl_setup( &( ep->ssl ), &( ep->conf ) ); + TEST_ASSERT( ret == 0 ); + +#if defined(MBEDTLS_SSL_PROTO_DTLS) && defined(MBEDTLS_SSL_SRV_C) + if( endpoint_type == MBEDTLS_SSL_IS_SERVER && dtls_context != NULL ) + mbedtls_ssl_conf_dtls_cookies( &( ep->conf ), NULL, NULL, NULL ); +#endif + + ret = mbedtls_endpoint_certificate_init( ep, pk_alg ); + TEST_ASSERT( ret == 0 ); + +exit: + return ret; +} + +/* + * Deinitializes certificates from endpoint represented by \p ep. + */ +void mbedtls_endpoint_certificate_free( mbedtls_endpoint *ep ) +{ + mbedtls_endpoint_certificate *cert = &( ep->cert ); + mbedtls_x509_crt_free( &( cert->ca_cert ) ); + mbedtls_x509_crt_free( &( cert->cert ) ); + mbedtls_pk_free( &( cert->pkey ) ); +} + +/* + * Deinitializes endpoint represented by \p ep. + */ +void mbedtls_endpoint_free( mbedtls_endpoint *ep, + mbedtls_test_message_socket_context *context ) +{ + mbedtls_endpoint_certificate_free( ep ); + + mbedtls_ssl_free( &( ep->ssl ) ); + mbedtls_ssl_config_free( &( ep->conf ) ); + mbedtls_ctr_drbg_free( &( ep->ctr_drbg ) ); + mbedtls_entropy_free( &( ep->entropy ) ); + + if( context != NULL ) + { + mbedtls_message_socket_close( context ); + } + else + { + mbedtls_mock_socket_close( &( ep->socket ) ); + } +} + +/* + * This function moves ssl handshake from \p ssl to prescribed \p state. + * /p second_ssl is used as second endpoint and their sockets have to be + * connected before calling this function. + * + * \retval 0 on success, otherwise error code. + */ +int mbedtls_move_handshake_to_state( mbedtls_ssl_context *ssl, + mbedtls_ssl_context *second_ssl, + int state ) +{ + enum { BUFFSIZE = 1024 }; + int max_steps = 1000; + int ret = 0; + + if( ssl == NULL || second_ssl == NULL ) + { + return MBEDTLS_ERR_SSL_BAD_INPUT_DATA; + } + + /* Perform communication via connected sockets */ + while( ( ssl->state != state ) && ( --max_steps >= 0 ) ) + { + /* If /p second_ssl ends the handshake procedure before /p ssl then + * there is no need to call the next step */ + if( second_ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) + { + ret = mbedtls_ssl_handshake_step( second_ssl ); + if( ret != 0 && ret != MBEDTLS_ERR_SSL_WANT_READ && + ret != MBEDTLS_ERR_SSL_WANT_WRITE ) + { + return ret; + } + } + + /* We only care about the \p ssl state and returns, so we call it last, + * to leave the iteration as soon as the state is as expected. */ + ret = mbedtls_ssl_handshake_step( ssl ); + if( ret != 0 && ret != MBEDTLS_ERR_SSL_WANT_READ && + ret != MBEDTLS_ERR_SSL_WANT_WRITE ) + { + return ret; + } + } + + return ( max_steps >= 0 ) ? ret : -1; +} + +#endif /* MBEDTLS_X509_CRT_PARSE_C && MBEDTLS_ENTROPY_C && MBEDTLS_CTR_DRBG_C */ + +/* + * Write application data. Increase write counter if necessary. + */ +int mbedtls_ssl_write_fragment( mbedtls_ssl_context *ssl, unsigned char *buf, + int buf_len, int *written, + const int expected_fragments ) +{ + int ret = mbedtls_ssl_write( ssl, buf + *written, buf_len - *written ); + if( ret > 0 ) + { + *written += ret; + } + + if( expected_fragments == 0 ) + { + /* Used for DTLS and the message size larger than MFL. In that case + * the message can not be fragmented and the library should return + * MBEDTLS_ERR_SSL_BAD_INPUT_DATA error. This error must be returned + * to prevent a dead loop inside mbedtls_exchange_data(). */ + return ret; + } + else if( expected_fragments == 1 ) + { + /* Used for TLS/DTLS and the message size lower than MFL */ + TEST_ASSERT( ret == buf_len || + ret == MBEDTLS_ERR_SSL_WANT_READ || + ret == MBEDTLS_ERR_SSL_WANT_WRITE ); + } + else + { + /* Used for TLS and the message size larger than MFL */ + TEST_ASSERT( expected_fragments > 1 ); + TEST_ASSERT( ( ret >= 0 && ret <= buf_len ) || + ret == MBEDTLS_ERR_SSL_WANT_READ || + ret == MBEDTLS_ERR_SSL_WANT_WRITE ); + } + + return 0; + +exit: + /* Some of the tests failed */ + return -1; +} + +/* + * Read application data and increase read counter and fragments counter if necessary. + */ +int mbedtls_ssl_read_fragment( mbedtls_ssl_context *ssl, unsigned char *buf, + int buf_len, int *read, + int *fragments, const int expected_fragments ) +{ + int ret = mbedtls_ssl_read( ssl, buf + *read, buf_len - *read ); + if( ret > 0 ) + { + ( *fragments )++; + *read += ret; + } + + if( expected_fragments == 0 ) + { + TEST_ASSERT( ret == 0 ); + } + else if( expected_fragments == 1 ) + { + TEST_ASSERT( ret == buf_len || + ret == MBEDTLS_ERR_SSL_WANT_READ || + ret == MBEDTLS_ERR_SSL_WANT_WRITE ); + } + else + { + TEST_ASSERT( expected_fragments > 1 ); + TEST_ASSERT( ( ret >= 0 && ret <= buf_len ) || + ret == MBEDTLS_ERR_SSL_WANT_READ || + ret == MBEDTLS_ERR_SSL_WANT_WRITE ); + } + + return 0; + +exit: + /* Some of the tests failed */ + return -1; +} + +/* + * Helper function setting up inverse record transformations + * using given cipher, hash, EtM mode, authentication tag length, + * and version. + */ + +#define CHK( x ) \ + do \ + { \ + if( !( x ) ) \ + { \ + ret = -1; \ + goto cleanup; \ + } \ + } while( 0 ) + +void set_ciphersuite( mbedtls_ssl_config *conf, const char *cipher, + uint16_t* forced_ciphersuite ) +{ + const mbedtls_ssl_ciphersuite_t *ciphersuite_info; + forced_ciphersuite[0] = mbedtls_ssl_get_ciphersuite_id( cipher ); + forced_ciphersuite[1] = 0; + + ciphersuite_info = + mbedtls_ssl_ciphersuite_from_id( forced_ciphersuite[0] ); + + TEST_ASSERT( ciphersuite_info != NULL ); + TEST_ASSERT( ciphersuite_info->min_minor_ver <= conf->max_minor_ver ); + TEST_ASSERT( ciphersuite_info->max_minor_ver >= conf->min_minor_ver ); + + if( conf->max_minor_ver > ciphersuite_info->max_minor_ver ) + { + conf->max_minor_ver = ciphersuite_info->max_minor_ver; + } + if( conf->min_minor_ver < ciphersuite_info->min_minor_ver ) + { + conf->min_minor_ver = ciphersuite_info->min_minor_ver; + } + + mbedtls_ssl_conf_ciphersuites( conf, forced_ciphersuite ); + +exit: + return; +} + +int psk_dummy_callback( void *p_info, mbedtls_ssl_context *ssl, + const unsigned char *name, size_t name_len ) +{ + (void) p_info; + (void) ssl; + (void) name; + (void) name_len; + + return ( 0 ); +} + +#if MBEDTLS_SSL_CID_OUT_LEN_MAX > MBEDTLS_SSL_CID_IN_LEN_MAX +#define SSL_CID_LEN_MIN MBEDTLS_SSL_CID_IN_LEN_MAX +#else +#define SSL_CID_LEN_MIN MBEDTLS_SSL_CID_OUT_LEN_MAX +#endif + +static int build_transforms( mbedtls_ssl_transform *t_in, + mbedtls_ssl_transform *t_out, + int cipher_type, int hash_id, + int etm, int tag_mode, int ver, + size_t cid0_len, + size_t cid1_len ) +{ + mbedtls_cipher_info_t const *cipher_info; + int ret = 0; + + size_t keylen, maclen, ivlen; + unsigned char *key0 = NULL, *key1 = NULL; + unsigned char *md0 = NULL, *md1 = NULL; + unsigned char iv_enc[16], iv_dec[16]; + +#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) + unsigned char cid0[ SSL_CID_LEN_MIN ]; + unsigned char cid1[ SSL_CID_LEN_MIN ]; + + mbedtls_test_rnd_std_rand( NULL, cid0, sizeof( cid0 ) ); + mbedtls_test_rnd_std_rand( NULL, cid1, sizeof( cid1 ) ); +#else + ((void) cid0_len); + ((void) cid1_len); +#endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ + + maclen = 0; + + /* Pick cipher */ + cipher_info = mbedtls_cipher_info_from_type( cipher_type ); + CHK( cipher_info != NULL ); + CHK( cipher_info->iv_size <= 16 ); + CHK( cipher_info->key_bitlen % 8 == 0 ); + + /* Pick keys */ + keylen = cipher_info->key_bitlen / 8; + /* Allocate `keylen + 1` bytes to ensure that we get + * a non-NULL pointers from `mbedtls_calloc` even if + * `keylen == 0` in the case of the NULL cipher. */ + CHK( ( key0 = mbedtls_calloc( 1, keylen + 1 ) ) != NULL ); + CHK( ( key1 = mbedtls_calloc( 1, keylen + 1 ) ) != NULL ); + memset( key0, 0x1, keylen ); + memset( key1, 0x2, keylen ); + + /* Setup cipher contexts */ + CHK( mbedtls_cipher_setup( &t_in->cipher_ctx_enc, cipher_info ) == 0 ); + CHK( mbedtls_cipher_setup( &t_in->cipher_ctx_dec, cipher_info ) == 0 ); + CHK( mbedtls_cipher_setup( &t_out->cipher_ctx_enc, cipher_info ) == 0 ); + CHK( mbedtls_cipher_setup( &t_out->cipher_ctx_dec, cipher_info ) == 0 ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) + if( cipher_info->mode == MBEDTLS_MODE_CBC ) + { + CHK( mbedtls_cipher_set_padding_mode( &t_in->cipher_ctx_enc, + MBEDTLS_PADDING_NONE ) == 0 ); + CHK( mbedtls_cipher_set_padding_mode( &t_in->cipher_ctx_dec, + MBEDTLS_PADDING_NONE ) == 0 ); + CHK( mbedtls_cipher_set_padding_mode( &t_out->cipher_ctx_enc, + MBEDTLS_PADDING_NONE ) == 0 ); + CHK( mbedtls_cipher_set_padding_mode( &t_out->cipher_ctx_dec, + MBEDTLS_PADDING_NONE ) == 0 ); + } +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + + CHK( mbedtls_cipher_setkey( &t_in->cipher_ctx_enc, key0, + keylen << 3, MBEDTLS_ENCRYPT ) == 0 ); + CHK( mbedtls_cipher_setkey( &t_in->cipher_ctx_dec, key1, + keylen << 3, MBEDTLS_DECRYPT ) == 0 ); + CHK( mbedtls_cipher_setkey( &t_out->cipher_ctx_enc, key1, + keylen << 3, MBEDTLS_ENCRYPT ) == 0 ); + CHK( mbedtls_cipher_setkey( &t_out->cipher_ctx_dec, key0, + keylen << 3, MBEDTLS_DECRYPT ) == 0 ); + + /* Setup MAC contexts */ +#if defined(MBEDTLS_SSL_SOME_MODES_USE_MAC) + if( cipher_info->mode == MBEDTLS_MODE_CBC || + cipher_info->mode == MBEDTLS_MODE_STREAM ) + { + mbedtls_md_info_t const *md_info; + + /* Pick hash */ + md_info = mbedtls_md_info_from_type( hash_id ); + CHK( md_info != NULL ); + + /* Pick hash keys */ + maclen = mbedtls_md_get_size( md_info ); + CHK( ( md0 = mbedtls_calloc( 1, maclen ) ) != NULL ); + CHK( ( md1 = mbedtls_calloc( 1, maclen ) ) != NULL ); + memset( md0, 0x5, maclen ); + memset( md1, 0x6, maclen ); + + CHK( mbedtls_md_setup( &t_out->md_ctx_enc, md_info, 1 ) == 0 ); + CHK( mbedtls_md_setup( &t_out->md_ctx_dec, md_info, 1 ) == 0 ); + CHK( mbedtls_md_setup( &t_in->md_ctx_enc, md_info, 1 ) == 0 ); + CHK( mbedtls_md_setup( &t_in->md_ctx_dec, md_info, 1 ) == 0 ); + + if( ver > MBEDTLS_SSL_MINOR_VERSION_0 ) + { + CHK( mbedtls_md_hmac_starts( &t_in->md_ctx_enc, + md0, maclen ) == 0 ); + CHK( mbedtls_md_hmac_starts( &t_in->md_ctx_dec, + md1, maclen ) == 0 ); + CHK( mbedtls_md_hmac_starts( &t_out->md_ctx_enc, + md1, maclen ) == 0 ); + CHK( mbedtls_md_hmac_starts( &t_out->md_ctx_dec, + md0, maclen ) == 0 ); + } +#if defined(MBEDTLS_SSL_PROTO_SSL3) + else + { + memcpy( &t_in->mac_enc, md0, maclen ); + memcpy( &t_in->mac_dec, md1, maclen ); + memcpy( &t_out->mac_enc, md1, maclen ); + memcpy( &t_out->mac_dec, md0, maclen ); + } +#endif + } +#else + ((void) hash_id); +#endif /* MBEDTLS_SSL_SOME_MODES_USE_MAC */ + + + /* Pick IV's (regardless of whether they + * are being used by the transform). */ + ivlen = cipher_info->iv_size; + memset( iv_enc, 0x3, sizeof( iv_enc ) ); + memset( iv_dec, 0x4, sizeof( iv_dec ) ); + + /* + * Setup transforms + */ + +#if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) && \ + defined(MBEDTLS_SSL_SOME_MODES_USE_MAC) + t_out->encrypt_then_mac = etm; + t_in->encrypt_then_mac = etm; +#else + ((void) etm); +#endif + + t_out->minor_ver = ver; + t_in->minor_ver = ver; + t_out->ivlen = ivlen; + t_in->ivlen = ivlen; + + switch( cipher_info->mode ) + { + case MBEDTLS_MODE_GCM: + case MBEDTLS_MODE_CCM: +#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) + if( ver == MBEDTLS_SSL_MINOR_VERSION_4 ) + { + t_out->fixed_ivlen = 12; + t_in->fixed_ivlen = 12; + } + else +#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */ + { + t_out->fixed_ivlen = 4; + t_in->fixed_ivlen = 4; + } + t_out->maclen = 0; + t_in->maclen = 0; + switch( tag_mode ) + { + case 0: /* Full tag */ + t_out->taglen = 16; + t_in->taglen = 16; + break; + case 1: /* Partial tag */ + t_out->taglen = 8; + t_in->taglen = 8; + break; + default: + ret = 1; + goto cleanup; + } + break; + + case MBEDTLS_MODE_CHACHAPOLY: + t_out->fixed_ivlen = 12; + t_in->fixed_ivlen = 12; + t_out->maclen = 0; + t_in->maclen = 0; + switch( tag_mode ) + { + case 0: /* Full tag */ + t_out->taglen = 16; + t_in->taglen = 16; + break; + case 1: /* Partial tag */ + t_out->taglen = 8; + t_in->taglen = 8; + break; + default: + ret = 1; + goto cleanup; + } + break; + + case MBEDTLS_MODE_STREAM: + case MBEDTLS_MODE_CBC: + t_out->fixed_ivlen = 0; /* redundant, must be 0 */ + t_in->fixed_ivlen = 0; /* redundant, must be 0 */ + t_out->taglen = 0; + t_in->taglen = 0; + switch( tag_mode ) + { + case 0: /* Full tag */ + t_out->maclen = maclen; + t_in->maclen = maclen; + break; + case 1: /* Partial tag */ + t_out->maclen = 10; + t_in->maclen = 10; + break; + default: + ret = 1; + goto cleanup; + } + break; + default: + ret = 1; + goto cleanup; + break; + } + + /* Setup IV's */ + + memcpy( &t_in->iv_dec, iv_dec, sizeof( iv_dec ) ); + memcpy( &t_in->iv_enc, iv_enc, sizeof( iv_enc ) ); + memcpy( &t_out->iv_dec, iv_enc, sizeof( iv_enc ) ); + memcpy( &t_out->iv_enc, iv_dec, sizeof( iv_dec ) ); + +#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) + /* Add CID */ + memcpy( &t_in->in_cid, cid0, cid0_len ); + memcpy( &t_in->out_cid, cid1, cid1_len ); + t_in->in_cid_len = cid0_len; + t_in->out_cid_len = cid1_len; + memcpy( &t_out->in_cid, cid1, cid1_len ); + memcpy( &t_out->out_cid, cid0, cid0_len ); + t_out->in_cid_len = cid1_len; + t_out->out_cid_len = cid0_len; +#endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ + +cleanup: + + mbedtls_free( key0 ); + mbedtls_free( key1 ); + + mbedtls_free( md0 ); + mbedtls_free( md1 ); + + return( ret ); +} + +/* + * Populate a session structure for serialization tests. + * Choose dummy values, mostly non-0 to distinguish from the init default. + */ +static int ssl_populate_session( mbedtls_ssl_session *session, + int ticket_len, + const char *crt_file ) +{ +#if defined(MBEDTLS_HAVE_TIME) + session->start = mbedtls_time( NULL ) - 42; +#endif + session->ciphersuite = 0xabcd; + session->compression = 1; + session->id_len = sizeof( session->id ); + memset( session->id, 66, session->id_len ); + memset( session->master, 17, sizeof( session->master ) ); + +#if defined(MBEDTLS_X509_CRT_PARSE_C) && defined(MBEDTLS_FS_IO) + if( strlen( crt_file ) != 0 ) + { + mbedtls_x509_crt tmp_crt; + int ret; + + mbedtls_x509_crt_init( &tmp_crt ); + ret = mbedtls_x509_crt_parse_file( &tmp_crt, crt_file ); + if( ret != 0 ) + return( ret ); + +#if defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) + /* Move temporary CRT. */ + session->peer_cert = mbedtls_calloc( 1, sizeof( *session->peer_cert ) ); + if( session->peer_cert == NULL ) + return( -1 ); + *session->peer_cert = tmp_crt; + memset( &tmp_crt, 0, sizeof( tmp_crt ) ); +#else /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ + /* Calculate digest of temporary CRT. */ + session->peer_cert_digest = + mbedtls_calloc( 1, MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_LEN ); + if( session->peer_cert_digest == NULL ) + return( -1 ); + ret = mbedtls_md( mbedtls_md_info_from_type( + MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE ), + tmp_crt.raw.p, tmp_crt.raw.len, + session->peer_cert_digest ); + if( ret != 0 ) + return( ret ); + session->peer_cert_digest_type = + MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_TYPE; + session->peer_cert_digest_len = + MBEDTLS_SSL_PEER_CERT_DIGEST_DFL_LEN; +#endif /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ + + mbedtls_x509_crt_free( &tmp_crt ); + } +#else /* MBEDTLS_X509_CRT_PARSE_C && MBEDTLS_FS_IO */ + (void) crt_file; +#endif /* MBEDTLS_X509_CRT_PARSE_C && MBEDTLS_FS_IO */ + session->verify_result = 0xdeadbeef; + +#if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C) + if( ticket_len != 0 ) + { + session->ticket = mbedtls_calloc( 1, ticket_len ); + if( session->ticket == NULL ) + return( -1 ); + memset( session->ticket, 33, ticket_len ); + } + session->ticket_len = ticket_len; + session->ticket_lifetime = 86401; +#else + (void) ticket_len; +#endif + +#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) + session->mfl_code = 1; +#endif +#if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) + session->encrypt_then_mac = 1; +#endif + + return( 0 ); +} + +/* + * Perform data exchanging between \p ssl_1 and \p ssl_2 and check if the + * message was sent in the correct number of fragments. + * + * /p ssl_1 and /p ssl_2 Endpoints represented by mbedtls_ssl_context. Both + * of them must be initialized and connected beforehand. + * /p msg_len_1 and /p msg_len_2 specify the size of the message to send. + * /p expected_fragments_1 and /p expected_fragments_2 determine in how many + * fragments the message should be sent. + * expected_fragments is 0: can be used for DTLS testing while the message + * size is larger than MFL. In that case the message + * cannot be fragmented and sent to the second endpoint. + * This value can be used for negative tests. + * expected_fragments is 1: can be used for TLS/DTLS testing while the + * message size is below MFL + * expected_fragments > 1: can be used for TLS testing while the message + * size is larger than MFL + * + * \retval 0 on success, otherwise error code. + */ +int mbedtls_exchange_data( mbedtls_ssl_context *ssl_1, + int msg_len_1, const int expected_fragments_1, + mbedtls_ssl_context *ssl_2, + int msg_len_2, const int expected_fragments_2 ) +{ + unsigned char *msg_buf_1 = malloc( msg_len_1 ); + unsigned char *msg_buf_2 = malloc( msg_len_2 ); + unsigned char *in_buf_1 = malloc( msg_len_2 ); + unsigned char *in_buf_2 = malloc( msg_len_1 ); + int msg_type, ret = -1; + + /* Perform this test with two message types. At first use a message + * consisting of only 0x00 for the client and only 0xFF for the server. + * At the second time use message with generated data */ + for( msg_type = 0; msg_type < 2; msg_type++ ) + { + int written_1 = 0; + int written_2 = 0; + int read_1 = 0; + int read_2 = 0; + int fragments_1 = 0; + int fragments_2 = 0; + + if( msg_type == 0 ) + { + memset( msg_buf_1, 0x00, msg_len_1 ); + memset( msg_buf_2, 0xff, msg_len_2 ); + } + else + { + int i, j = 0; + for( i = 0; i < msg_len_1; i++ ) + { + msg_buf_1[i] = j++ & 0xFF; + } + for( i = 0; i < msg_len_2; i++ ) + { + msg_buf_2[i] = ( j -= 5 ) & 0xFF; + } + } + + while( read_1 < msg_len_2 || read_2 < msg_len_1 ) + { + /* ssl_1 sending */ + if( msg_len_1 > written_1 ) + { + ret = mbedtls_ssl_write_fragment( ssl_1, msg_buf_1, + msg_len_1, &written_1, + expected_fragments_1 ); + if( expected_fragments_1 == 0 ) + { + /* This error is expected when the message is too large and + * cannot be fragmented */ + TEST_ASSERT( ret == MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + msg_len_1 = 0; + } + else + { + TEST_ASSERT( ret == 0 ); + } + } + + /* ssl_2 sending */ + if( msg_len_2 > written_2 ) + { + ret = mbedtls_ssl_write_fragment( ssl_2, msg_buf_2, + msg_len_2, &written_2, + expected_fragments_2 ); + if( expected_fragments_2 == 0 ) + { + /* This error is expected when the message is too large and + * cannot be fragmented */ + TEST_ASSERT( ret == MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + msg_len_2 = 0; + } + else + { + TEST_ASSERT( ret == 0 ); + } + } + + /* ssl_1 reading */ + if( read_1 < msg_len_2 ) + { + ret = mbedtls_ssl_read_fragment( ssl_1, in_buf_1, + msg_len_2, &read_1, + &fragments_2, + expected_fragments_2 ); + TEST_ASSERT( ret == 0 ); + } + + /* ssl_2 reading */ + if( read_2 < msg_len_1 ) + { + ret = mbedtls_ssl_read_fragment( ssl_2, in_buf_2, + msg_len_1, &read_2, + &fragments_1, + expected_fragments_1 ); + TEST_ASSERT( ret == 0 ); + } + } + + ret = -1; + TEST_ASSERT( 0 == memcmp( msg_buf_1, in_buf_2, msg_len_1 ) ); + TEST_ASSERT( 0 == memcmp( msg_buf_2, in_buf_1, msg_len_2 ) ); + TEST_ASSERT( fragments_1 == expected_fragments_1 ); + TEST_ASSERT( fragments_2 == expected_fragments_2 ); + } + + ret = 0; + +exit: + free( msg_buf_1 ); + free( in_buf_1 ); + free( msg_buf_2 ); + free( in_buf_2 ); + + return ret; +} + +/* + * Perform data exchanging between \p ssl_1 and \p ssl_2. Both of endpoints + * must be initialized and connected beforehand. + * + * \retval 0 on success, otherwise error code. + */ +int exchange_data( mbedtls_ssl_context *ssl_1, + mbedtls_ssl_context *ssl_2 ) +{ + return mbedtls_exchange_data( ssl_1, 256, 1, + ssl_2, 256, 1 ); +} + +#if defined(MBEDTLS_X509_CRT_PARSE_C) && \ + defined(MBEDTLS_ENTROPY_C) && \ + defined(MBEDTLS_CTR_DRBG_C) +void perform_handshake( handshake_test_options* options ) +{ + /* forced_ciphersuite needs to last until the end of the handshake */ + uint16_t forced_ciphersuite[2]; + enum { BUFFSIZE = 17000 }; + mbedtls_endpoint client, server; +#if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED) + const char *psk_identity = "foo"; +#endif +#if defined(MBEDTLS_TIMING_C) + mbedtls_timing_delay_context timer_client, timer_server; +#endif +#if defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION) + unsigned char *context_buf = NULL; + size_t context_buf_len; +#endif +#if defined(MBEDTLS_SSL_RENEGOTIATION) + int ret = -1; +#endif + int expected_handshake_result = 0; + + mbedtls_test_message_queue server_queue, client_queue; + mbedtls_test_message_socket_context server_context, client_context; + mbedtls_message_socket_init( &server_context ); + mbedtls_message_socket_init( &client_context ); + + /* Client side */ + if( options->dtls != 0 ) + { + TEST_ASSERT( mbedtls_endpoint_init( &client, MBEDTLS_SSL_IS_CLIENT, + options->pk_alg, &client_context, + &client_queue, + &server_queue ) == 0 ); +#if defined(MBEDTLS_TIMING_C) + mbedtls_ssl_set_timer_cb( &client.ssl, &timer_client, + mbedtls_timing_set_delay, + mbedtls_timing_get_delay ); +#endif + } + else + { + TEST_ASSERT( mbedtls_endpoint_init( &client, MBEDTLS_SSL_IS_CLIENT, + options->pk_alg, NULL, NULL, + NULL ) == 0 ); + } + + if( options->client_min_version != TEST_SSL_MINOR_VERSION_NONE ) + { + mbedtls_ssl_conf_min_version( &client.conf, MBEDTLS_SSL_MAJOR_VERSION_3, + options->client_min_version ); + } + + if( options->client_max_version != TEST_SSL_MINOR_VERSION_NONE ) + { + mbedtls_ssl_conf_max_version( &client.conf, MBEDTLS_SSL_MAJOR_VERSION_3, + options->client_max_version ); + } + + if( strlen( options->cipher ) > 0 ) + { + set_ciphersuite( &client.conf, options->cipher, forced_ciphersuite ); + } + +#if defined (MBEDTLS_DEBUG_C) + if( options->cli_log_fun ) + { + mbedtls_debug_set_threshold( 4 ); + mbedtls_ssl_conf_dbg( &client.conf, options->cli_log_fun, + options->cli_log_obj ); + } +#endif + + /* Server side */ + if( options->dtls != 0 ) + { + TEST_ASSERT( mbedtls_endpoint_init( &server, MBEDTLS_SSL_IS_SERVER, + options->pk_alg, &server_context, + &server_queue, + &client_queue) == 0 ); +#if defined(MBEDTLS_TIMING_C) + mbedtls_ssl_set_timer_cb( &server.ssl, &timer_server, + mbedtls_timing_set_delay, + mbedtls_timing_get_delay ); +#endif + } + else + { + TEST_ASSERT( mbedtls_endpoint_init( &server, MBEDTLS_SSL_IS_SERVER, + options->pk_alg, NULL, NULL, NULL ) == 0 ); + } + + mbedtls_ssl_conf_authmode( &server.conf, options->srv_auth_mode ); + + if( options->server_min_version != TEST_SSL_MINOR_VERSION_NONE ) + { + mbedtls_ssl_conf_min_version( &server.conf, MBEDTLS_SSL_MAJOR_VERSION_3, + options->server_min_version ); + } + + if( options->server_max_version != TEST_SSL_MINOR_VERSION_NONE ) + { + mbedtls_ssl_conf_max_version( &server.conf, MBEDTLS_SSL_MAJOR_VERSION_3, + options->server_max_version ); + } + +#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) + TEST_ASSERT( mbedtls_ssl_conf_max_frag_len( &(server.conf), + (unsigned char) options->mfl ) == 0 ); + TEST_ASSERT( mbedtls_ssl_conf_max_frag_len( &(client.conf), + (unsigned char) options->mfl ) == 0 ); +#else + TEST_ASSERT( MBEDTLS_SSL_MAX_FRAG_LEN_NONE == options->mfl ); +#endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ + +#if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED) + if( options->psk_str != NULL && options->psk_str->len > 0 ) + { + TEST_ASSERT( mbedtls_ssl_conf_psk( &client.conf, options->psk_str->x, + options->psk_str->len, + (const unsigned char *) psk_identity, + strlen( psk_identity ) ) == 0 ); + + TEST_ASSERT( mbedtls_ssl_conf_psk( &server.conf, options->psk_str->x, + options->psk_str->len, + (const unsigned char *) psk_identity, + strlen( psk_identity ) ) == 0 ); + + mbedtls_ssl_conf_psk_cb( &server.conf, psk_dummy_callback, NULL ); + } +#endif +#if defined(MBEDTLS_SSL_RENEGOTIATION) + if( options->renegotiate ) + { + mbedtls_ssl_conf_renegotiation( &(server.conf), + MBEDTLS_SSL_RENEGOTIATION_ENABLED ); + mbedtls_ssl_conf_renegotiation( &(client.conf), + MBEDTLS_SSL_RENEGOTIATION_ENABLED ); + + mbedtls_ssl_conf_legacy_renegotiation( &(server.conf), + options->legacy_renegotiation ); + mbedtls_ssl_conf_legacy_renegotiation( &(client.conf), + options->legacy_renegotiation ); + } +#endif /* MBEDTLS_SSL_RENEGOTIATION */ + +#if defined (MBEDTLS_DEBUG_C) + if( options->srv_log_fun ) + { + mbedtls_debug_set_threshold( 4 ); + mbedtls_ssl_conf_dbg( &server.conf, options->srv_log_fun, + options->srv_log_obj ); + } +#endif + + TEST_ASSERT( mbedtls_mock_socket_connect( &(client.socket), + &(server.socket), + BUFFSIZE ) == 0 ); + +#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) + if( options->resize_buffers != 0 ) + { + /* Ensure that the buffer sizes are appropriate before resizes */ + TEST_ASSERT( client.ssl.out_buf_len == MBEDTLS_SSL_OUT_BUFFER_LEN ); + TEST_ASSERT( client.ssl.in_buf_len == MBEDTLS_SSL_IN_BUFFER_LEN ); + TEST_ASSERT( server.ssl.out_buf_len == MBEDTLS_SSL_OUT_BUFFER_LEN ); + TEST_ASSERT( server.ssl.in_buf_len == MBEDTLS_SSL_IN_BUFFER_LEN ); + } +#endif + + if( options->expected_negotiated_version == TEST_SSL_MINOR_VERSION_NONE ) + { + expected_handshake_result = MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION; + } + + TEST_ASSERT( mbedtls_move_handshake_to_state( &(client.ssl), + &(server.ssl), + MBEDTLS_SSL_HANDSHAKE_OVER ) + == expected_handshake_result ); + + if( expected_handshake_result != 0 ) + { + /* Connection will have failed by this point, skip to cleanup */ + goto exit; + } + + TEST_ASSERT( client.ssl.state == MBEDTLS_SSL_HANDSHAKE_OVER ); + TEST_ASSERT( server.ssl.state == MBEDTLS_SSL_HANDSHAKE_OVER ); + + /* Check that we agree on the version... */ + TEST_ASSERT( client.ssl.minor_ver == server.ssl.minor_ver ); + + /* And check that the version negotiated is the expected one. */ + TEST_EQUAL( client.ssl.minor_ver, options->expected_negotiated_version ); + +#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) + if( options->resize_buffers != 0 ) + { + if( options->expected_negotiated_version != MBEDTLS_SSL_MINOR_VERSION_0 && + options->expected_negotiated_version != MBEDTLS_SSL_MINOR_VERSION_1 ) + { + /* A server, when using DTLS, might delay a buffer resize to happen + * after it receives a message, so we force it. */ + TEST_ASSERT( exchange_data( &(client.ssl), &(server.ssl) ) == 0 ); + + TEST_ASSERT( client.ssl.out_buf_len == + mbedtls_ssl_get_output_buflen( &client.ssl ) ); + TEST_ASSERT( client.ssl.in_buf_len == + mbedtls_ssl_get_input_buflen( &client.ssl ) ); + TEST_ASSERT( server.ssl.out_buf_len == + mbedtls_ssl_get_output_buflen( &server.ssl ) ); + TEST_ASSERT( server.ssl.in_buf_len == + mbedtls_ssl_get_input_buflen( &server.ssl ) ); + } + } +#endif + + if( options->cli_msg_len != 0 || options->srv_msg_len != 0 ) + { + /* Start data exchanging test */ + TEST_ASSERT( mbedtls_exchange_data( &(client.ssl), options->cli_msg_len, + options->expected_cli_fragments, + &(server.ssl), options->srv_msg_len, + options->expected_srv_fragments ) + == 0 ); + } +#if defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION) + if( options->serialize == 1 ) + { + TEST_ASSERT( options->dtls == 1 ); + + TEST_ASSERT( mbedtls_ssl_context_save( &(server.ssl), NULL, + 0, &context_buf_len ) + == MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + + context_buf = mbedtls_calloc( 1, context_buf_len ); + TEST_ASSERT( context_buf != NULL ); + + TEST_ASSERT( mbedtls_ssl_context_save( &(server.ssl), context_buf, + context_buf_len, + &context_buf_len ) == 0 ); + + mbedtls_ssl_free( &(server.ssl) ); + mbedtls_ssl_init( &(server.ssl) ); + + TEST_ASSERT( mbedtls_ssl_setup( &(server.ssl), &(server.conf) ) == 0 ); + + mbedtls_ssl_set_bio( &( server.ssl ), &server_context, + mbedtls_mock_tcp_send_msg, + mbedtls_mock_tcp_recv_msg, + NULL ); + +#if defined(MBEDTLS_TIMING_C) + mbedtls_ssl_set_timer_cb( &server.ssl, &timer_server, + mbedtls_timing_set_delay, + mbedtls_timing_get_delay ); +#endif +#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) + if( options->resize_buffers != 0 ) + { + /* Ensure that the buffer sizes are appropriate before resizes */ + TEST_ASSERT( server.ssl.out_buf_len == MBEDTLS_SSL_OUT_BUFFER_LEN ); + TEST_ASSERT( server.ssl.in_buf_len == MBEDTLS_SSL_IN_BUFFER_LEN ); + } +#endif + TEST_ASSERT( mbedtls_ssl_context_load( &( server.ssl ), context_buf, + context_buf_len ) == 0 ); + +#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) + /* Validate buffer sizes after context deserialization */ + if( options->resize_buffers != 0 ) + { + TEST_ASSERT( server.ssl.out_buf_len == + mbedtls_ssl_get_output_buflen( &server.ssl ) ); + TEST_ASSERT( server.ssl.in_buf_len == + mbedtls_ssl_get_input_buflen( &server.ssl ) ); + } +#endif + /* Retest writing/reading */ + if( options->cli_msg_len != 0 || options->srv_msg_len != 0 ) + { + TEST_ASSERT( mbedtls_exchange_data( &(client.ssl), + options->cli_msg_len, + options->expected_cli_fragments, + &(server.ssl), + options->srv_msg_len, + options->expected_srv_fragments ) + == 0 ); + } + } +#endif /* MBEDTLS_SSL_CONTEXT_SERIALIZATION */ + +#if defined(MBEDTLS_SSL_RENEGOTIATION) + if( options->renegotiate ) + { + /* Start test with renegotiation */ + TEST_ASSERT( server.ssl.renego_status == + MBEDTLS_SSL_INITIAL_HANDSHAKE ); + TEST_ASSERT( client.ssl.renego_status == + MBEDTLS_SSL_INITIAL_HANDSHAKE ); + + /* After calling this function for the server, it only sends a handshake + * request. All renegotiation should happen during data exchanging */ + TEST_ASSERT( mbedtls_ssl_renegotiate( &(server.ssl) ) == 0 ); + TEST_ASSERT( server.ssl.renego_status == + MBEDTLS_SSL_RENEGOTIATION_PENDING ); + TEST_ASSERT( client.ssl.renego_status == + MBEDTLS_SSL_INITIAL_HANDSHAKE ); + + TEST_ASSERT( exchange_data( &(client.ssl), &(server.ssl) ) == 0 ); + TEST_ASSERT( server.ssl.renego_status == + MBEDTLS_SSL_RENEGOTIATION_DONE ); + TEST_ASSERT( client.ssl.renego_status == + MBEDTLS_SSL_RENEGOTIATION_DONE ); + + /* After calling mbedtls_ssl_renegotiate for the client all renegotiation + * should happen inside this function. However in this test, we cannot + * perform simultaneous communication betwen client and server so this + * function will return waiting error on the socket. All rest of + * renegotiation should happen during data exchanging */ + ret = mbedtls_ssl_renegotiate( &(client.ssl) ); +#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) + if( options->resize_buffers != 0 ) + { + /* Ensure that the buffer sizes are appropriate before resizes */ + TEST_ASSERT( client.ssl.out_buf_len == MBEDTLS_SSL_OUT_BUFFER_LEN ); + TEST_ASSERT( client.ssl.in_buf_len == MBEDTLS_SSL_IN_BUFFER_LEN ); + } +#endif + TEST_ASSERT( ret == 0 || + ret == MBEDTLS_ERR_SSL_WANT_READ || + ret == MBEDTLS_ERR_SSL_WANT_WRITE ); + TEST_ASSERT( server.ssl.renego_status == + MBEDTLS_SSL_RENEGOTIATION_DONE ); + TEST_ASSERT( client.ssl.renego_status == + MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ); + + TEST_ASSERT( exchange_data( &(client.ssl), &(server.ssl) ) == 0 ); + TEST_ASSERT( server.ssl.renego_status == + MBEDTLS_SSL_RENEGOTIATION_DONE ); + TEST_ASSERT( client.ssl.renego_status == + MBEDTLS_SSL_RENEGOTIATION_DONE ); +#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) + /* Validate buffer sizes after renegotiation */ + if( options->resize_buffers != 0 ) + { + TEST_ASSERT( client.ssl.out_buf_len == + mbedtls_ssl_get_output_buflen( &client.ssl ) ); + TEST_ASSERT( client.ssl.in_buf_len == + mbedtls_ssl_get_input_buflen( &client.ssl ) ); + TEST_ASSERT( server.ssl.out_buf_len == + mbedtls_ssl_get_output_buflen( &server.ssl ) ); + TEST_ASSERT( server.ssl.in_buf_len == + mbedtls_ssl_get_input_buflen( &server.ssl ) ); + } +#endif /* MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH */ + } +#endif /* MBEDTLS_SSL_RENEGOTIATION */ + +exit: + mbedtls_endpoint_free( &client, options->dtls != 0 ? &client_context : NULL ); + mbedtls_endpoint_free( &server, options->dtls != 0 ? &server_context : NULL ); +#if defined (MBEDTLS_DEBUG_C) + if( options->cli_log_fun || options->srv_log_fun ) + { + mbedtls_debug_set_threshold( 0 ); + } +#endif +#if defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION) + if( context_buf != NULL ) + mbedtls_free( context_buf ); +#endif +} +#endif /* MBEDTLS_X509_CRT_PARSE_C && MBEDTLS_ENTROPY_C && MBEDTLS_CTR_DRBG_C */ + +void test_test_callback_buffer_sanity() +{ + enum { MSGLEN = 10 }; + mbedtls_test_buffer buf; + unsigned char input[MSGLEN]; + unsigned char output[MSGLEN]; + + memset( input, 0, sizeof(input) ); + + /* Make sure calling put and get on NULL buffer results in error. */ + TEST_ASSERT( mbedtls_test_buffer_put( NULL, input, sizeof( input ) ) + == -1 ); + TEST_ASSERT( mbedtls_test_buffer_get( NULL, output, sizeof( output ) ) + == -1 ); + TEST_ASSERT( mbedtls_test_buffer_put( NULL, NULL, sizeof( input ) ) == -1 ); + + TEST_ASSERT( mbedtls_test_buffer_put( NULL, NULL, 0 ) == -1 ); + TEST_ASSERT( mbedtls_test_buffer_get( NULL, NULL, 0 ) == -1 ); + + /* Make sure calling put and get on a buffer that hasn't been set up results + * in eror. */ + mbedtls_test_buffer_init( &buf ); + + TEST_ASSERT( mbedtls_test_buffer_put( &buf, input, sizeof( input ) ) == -1 ); + TEST_ASSERT( mbedtls_test_buffer_get( &buf, output, sizeof( output ) ) + == -1 ); + TEST_ASSERT( mbedtls_test_buffer_put( &buf, NULL, sizeof( input ) ) == -1 ); + + TEST_ASSERT( mbedtls_test_buffer_put( &buf, NULL, 0 ) == -1 ); + TEST_ASSERT( mbedtls_test_buffer_get( &buf, NULL, 0 ) == -1 ); + + /* Make sure calling put and get on NULL input only results in + * error if the length is not zero, and that a NULL output is valid for data + * dropping. + */ + + TEST_ASSERT( mbedtls_test_buffer_setup( &buf, sizeof( input ) ) == 0 ); + + TEST_ASSERT( mbedtls_test_buffer_put( &buf, NULL, sizeof( input ) ) == -1 ); + TEST_ASSERT( mbedtls_test_buffer_get( &buf, NULL, sizeof( output ) ) + == 0 ); + TEST_ASSERT( mbedtls_test_buffer_put( &buf, NULL, 0 ) == 0 ); + TEST_ASSERT( mbedtls_test_buffer_get( &buf, NULL, 0 ) == 0 ); + + /* Make sure calling put several times in the row is safe */ + + TEST_ASSERT( mbedtls_test_buffer_put( &buf, input, sizeof( input ) ) + == sizeof( input ) ); + TEST_ASSERT( mbedtls_test_buffer_get( &buf, output, 2 ) == 2 ); + TEST_ASSERT( mbedtls_test_buffer_put( &buf, input, 1 ) == 1 ); + TEST_ASSERT( mbedtls_test_buffer_put( &buf, input, 2 ) == 1 ); + TEST_ASSERT( mbedtls_test_buffer_put( &buf, input, 2 ) == 0 ); + + +exit: + + mbedtls_test_buffer_free( &buf ); +} + +void test_test_callback_buffer_sanity_wrapper( void ** params ) +{ + (void)params; + + test_test_callback_buffer_sanity( ); +} +void test_test_callback_buffer( int size, int put1, int put1_ret, + int get1, int get1_ret, int put2, int put2_ret, + int get2, int get2_ret ) +{ + enum { ROUNDS = 2 }; + size_t put[ROUNDS]; + int put_ret[ROUNDS]; + size_t get[ROUNDS]; + int get_ret[ROUNDS]; + mbedtls_test_buffer buf; + unsigned char* input = NULL; + size_t input_len; + unsigned char* output = NULL; + size_t output_len; + size_t i, j, written, read; + + mbedtls_test_buffer_init( &buf ); + TEST_ASSERT( mbedtls_test_buffer_setup( &buf, size ) == 0 ); + + /* Check the sanity of input parameters and initialise local variables. That + * is, ensure that the amount of data is not negative and that we are not + * expecting more to put or get than we actually asked for. */ + TEST_ASSERT( put1 >= 0 ); + put[0] = put1; + put_ret[0] = put1_ret; + TEST_ASSERT( put1_ret <= put1 ); + TEST_ASSERT( put2 >= 0 ); + put[1] = put2; + put_ret[1] = put2_ret; + TEST_ASSERT( put2_ret <= put2 ); + + TEST_ASSERT( get1 >= 0 ); + get[0] = get1; + get_ret[0] = get1_ret; + TEST_ASSERT( get1_ret <= get1 ); + TEST_ASSERT( get2 >= 0 ); + get[1] = get2; + get_ret[1] = get2_ret; + TEST_ASSERT( get2_ret <= get2 ); + + input_len = 0; + /* Calculate actual input and output lengths */ + for( j = 0; j < ROUNDS; j++ ) + { + if( put_ret[j] > 0 ) + { + input_len += put_ret[j]; + } + } + /* In order to always have a valid pointer we always allocate at least 1 + * byte. */ + if( input_len == 0 ) + input_len = 1; + ASSERT_ALLOC( input, input_len ); + + output_len = 0; + for( j = 0; j < ROUNDS; j++ ) + { + if( get_ret[j] > 0 ) + { + output_len += get_ret[j]; + } + } + TEST_ASSERT( output_len <= input_len ); + /* In order to always have a valid pointer we always allocate at least 1 + * byte. */ + if( output_len == 0 ) + output_len = 1; + ASSERT_ALLOC( output, output_len ); + + /* Fill up the buffer with structured data so that unwanted changes + * can be detected */ + for( i = 0; i < input_len; i++ ) + { + input[i] = i & 0xFF; + } + + written = read = 0; + for( j = 0; j < ROUNDS; j++ ) + { + TEST_ASSERT( put_ret[j] == mbedtls_test_buffer_put( &buf, + input + written, put[j] ) ); + written += put_ret[j]; + TEST_ASSERT( get_ret[j] == mbedtls_test_buffer_get( &buf, + output + read, get[j] ) ); + read += get_ret[j]; + TEST_ASSERT( read <= written ); + if( get_ret[j] > 0 ) + { + TEST_ASSERT( memcmp( output + read - get_ret[j], + input + read - get_ret[j], get_ret[j] ) + == 0 ); + } + } + +exit: + + mbedtls_free( input ); + mbedtls_free( output ); + mbedtls_test_buffer_free( &buf ); +} + +void test_test_callback_buffer_wrapper( void ** params ) +{ + + test_test_callback_buffer( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ) ); +} +void test_ssl_mock_sanity( ) +{ + enum { MSGLEN = 105 }; + unsigned char message[MSGLEN]; + unsigned char received[MSGLEN]; + mbedtls_mock_socket socket; + + mbedtls_mock_socket_init( &socket ); + TEST_ASSERT( mbedtls_mock_tcp_send_b( &socket, message, MSGLEN ) < 0 ); + mbedtls_mock_socket_close( &socket ); + mbedtls_mock_socket_init( &socket ); + TEST_ASSERT( mbedtls_mock_tcp_recv_b( &socket, received, MSGLEN ) < 0 ); + mbedtls_mock_socket_close( &socket ); + + mbedtls_mock_socket_init( &socket ); + TEST_ASSERT( mbedtls_mock_tcp_send_nb( &socket, message, MSGLEN ) < 0 ); + mbedtls_mock_socket_close( &socket ); + mbedtls_mock_socket_init( &socket ); + TEST_ASSERT( mbedtls_mock_tcp_recv_nb( &socket, received, MSGLEN ) < 0 ); + mbedtls_mock_socket_close( &socket ); + +exit: + + mbedtls_mock_socket_close( &socket ); +} + +void test_ssl_mock_sanity_wrapper( void ** params ) +{ + (void)params; + + test_ssl_mock_sanity( ); +} +void test_ssl_mock_tcp( int blocking ) +{ + enum { MSGLEN = 105 }; + enum { BUFLEN = MSGLEN / 5 }; + unsigned char message[MSGLEN]; + unsigned char received[MSGLEN]; + mbedtls_mock_socket client; + mbedtls_mock_socket server; + size_t written, read; + int send_ret, recv_ret; + mbedtls_ssl_send_t *send; + mbedtls_ssl_recv_t *recv; + unsigned i; + + if( blocking == 0 ) + { + send = mbedtls_mock_tcp_send_nb; + recv = mbedtls_mock_tcp_recv_nb; + } + else + { + send = mbedtls_mock_tcp_send_b; + recv = mbedtls_mock_tcp_recv_b; + } + + mbedtls_mock_socket_init( &client ); + mbedtls_mock_socket_init( &server ); + + /* Fill up the buffer with structured data so that unwanted changes + * can be detected */ + for( i = 0; i < MSGLEN; i++ ) + { + message[i] = i & 0xFF; + } + + /* Make sure that sending a message takes a few iterations. */ + TEST_ASSERT( 0 == mbedtls_mock_socket_connect( &client, &server, BUFLEN ) ); + + /* Send the message to the server */ + send_ret = recv_ret = 1; + written = read = 0; + while( send_ret != 0 || recv_ret != 0 ) + { + send_ret = send( &client, message + written, MSGLEN - written ); + + TEST_ASSERT( send_ret >= 0 ); + TEST_ASSERT( send_ret <= BUFLEN ); + written += send_ret; + + /* If the buffer is full we can test blocking and non-blocking send */ + if ( send_ret == BUFLEN ) + { + int blocking_ret = send( &client, message , 1 ); + if ( blocking ) + { + TEST_ASSERT( blocking_ret == 0 ); + } + else + { + TEST_ASSERT( blocking_ret == MBEDTLS_ERR_SSL_WANT_WRITE ); + } + } + + recv_ret = recv( &server, received + read, MSGLEN - read ); + + /* The result depends on whether any data was sent */ + if ( send_ret > 0 ) + { + TEST_ASSERT( recv_ret > 0 ); + TEST_ASSERT( recv_ret <= BUFLEN ); + read += recv_ret; + } + else if( blocking ) + { + TEST_ASSERT( recv_ret == 0 ); + } + else + { + TEST_ASSERT( recv_ret == MBEDTLS_ERR_SSL_WANT_READ ); + recv_ret = 0; + } + + /* If the buffer is empty we can test blocking and non-blocking read */ + if ( recv_ret == BUFLEN ) + { + int blocking_ret = recv( &server, received, 1 ); + if ( blocking ) + { + TEST_ASSERT( blocking_ret == 0 ); + } + else + { + TEST_ASSERT( blocking_ret == MBEDTLS_ERR_SSL_WANT_READ ); + } + } + } + TEST_ASSERT( memcmp( message, received, MSGLEN ) == 0 ); + +exit: + + mbedtls_mock_socket_close( &client ); + mbedtls_mock_socket_close( &server ); +} + +void test_ssl_mock_tcp_wrapper( void ** params ) +{ + + test_ssl_mock_tcp( *( (int *) params[0] ) ); +} +void test_ssl_mock_tcp_interleaving( int blocking ) +{ + enum { ROUNDS = 2 }; + enum { MSGLEN = 105 }; + enum { BUFLEN = MSGLEN / 5 }; + unsigned char message[ROUNDS][MSGLEN]; + unsigned char received[ROUNDS][MSGLEN]; + mbedtls_mock_socket client; + mbedtls_mock_socket server; + size_t written[ROUNDS]; + size_t read[ROUNDS]; + int send_ret[ROUNDS]; + int recv_ret[ROUNDS]; + unsigned i, j, progress; + mbedtls_ssl_send_t *send; + mbedtls_ssl_recv_t *recv; + + if( blocking == 0 ) + { + send = mbedtls_mock_tcp_send_nb; + recv = mbedtls_mock_tcp_recv_nb; + } + else + { + send = mbedtls_mock_tcp_send_b; + recv = mbedtls_mock_tcp_recv_b; + } + + mbedtls_mock_socket_init( &client ); + mbedtls_mock_socket_init( &server ); + + /* Fill up the buffers with structured data so that unwanted changes + * can be detected */ + for( i = 0; i < ROUNDS; i++ ) + { + for( j = 0; j < MSGLEN; j++ ) + { + message[i][j] = ( i * MSGLEN + j ) & 0xFF; + } + } + + /* Make sure that sending a message takes a few iterations. */ + TEST_ASSERT( 0 == mbedtls_mock_socket_connect( &client, &server, BUFLEN ) ); + + /* Send the message from both sides, interleaving. */ + progress = 1; + for( i = 0; i < ROUNDS; i++ ) + { + written[i] = 0; + read[i] = 0; + } + /* This loop does not stop as long as there was a successful write or read + * of at least one byte on either side. */ + while( progress != 0 ) + { + mbedtls_mock_socket *socket; + + for( i = 0; i < ROUNDS; i++ ) + { + /* First sending is from the client */ + socket = ( i % 2 == 0 ) ? ( &client ) : ( &server ); + + send_ret[i] = send( socket, message[i] + written[i], + MSGLEN - written[i] ); + TEST_ASSERT( send_ret[i] >= 0 ); + TEST_ASSERT( send_ret[i] <= BUFLEN ); + written[i] += send_ret[i]; + + /* If the buffer is full we can test blocking and non-blocking + * send */ + if ( send_ret[i] == BUFLEN ) + { + int blocking_ret = send( socket, message[i] , 1 ); + if ( blocking ) + { + TEST_ASSERT( blocking_ret == 0 ); + } + else + { + TEST_ASSERT( blocking_ret == MBEDTLS_ERR_SSL_WANT_WRITE ); + } + } + } + + for( i = 0; i < ROUNDS; i++ ) + { + /* First receiving is from the server */ + socket = ( i % 2 == 0 ) ? ( &server ) : ( &client ); + + recv_ret[i] = recv( socket, received[i] + read[i], + MSGLEN - read[i] ); + + /* The result depends on whether any data was sent */ + if ( send_ret[i] > 0 ) + { + TEST_ASSERT( recv_ret[i] > 0 ); + TEST_ASSERT( recv_ret[i] <= BUFLEN ); + read[i] += recv_ret[i]; + } + else if( blocking ) + { + TEST_ASSERT( recv_ret[i] == 0 ); + } + else + { + TEST_ASSERT( recv_ret[i] == MBEDTLS_ERR_SSL_WANT_READ ); + recv_ret[i] = 0; + } + + /* If the buffer is empty we can test blocking and non-blocking + * read */ + if ( recv_ret[i] == BUFLEN ) + { + int blocking_ret = recv( socket, received[i], 1 ); + if ( blocking ) + { + TEST_ASSERT( blocking_ret == 0 ); + } + else + { + TEST_ASSERT( blocking_ret == MBEDTLS_ERR_SSL_WANT_READ ); + } + } + } + + progress = 0; + for( i = 0; i < ROUNDS; i++ ) + { + progress += send_ret[i] + recv_ret[i]; + } + } + + for( i = 0; i < ROUNDS; i++ ) + TEST_ASSERT( memcmp( message[i], received[i], MSGLEN ) == 0 ); + +exit: + + mbedtls_mock_socket_close( &client ); + mbedtls_mock_socket_close( &server ); +} + +void test_ssl_mock_tcp_interleaving_wrapper( void ** params ) +{ + + test_ssl_mock_tcp_interleaving( *( (int *) params[0] ) ); +} +void test_ssl_message_queue_sanity( ) +{ + mbedtls_test_message_queue queue; + + /* Trying to push/pull to an empty queue */ + TEST_ASSERT( mbedtls_test_message_queue_push_info( NULL, 1 ) + == MBEDTLS_TEST_ERROR_ARG_NULL ); + TEST_ASSERT( mbedtls_test_message_queue_pop_info( NULL, 1 ) + == MBEDTLS_TEST_ERROR_ARG_NULL ); + + TEST_ASSERT( mbedtls_test_message_queue_setup( &queue, 3 ) == 0 ); + TEST_ASSERT( queue.capacity == 3 ); + TEST_ASSERT( queue.num == 0 ); + +exit: + mbedtls_test_message_queue_free( &queue ); +} + +void test_ssl_message_queue_sanity_wrapper( void ** params ) +{ + (void)params; + + test_ssl_message_queue_sanity( ); +} +void test_ssl_message_queue_basic( ) +{ + mbedtls_test_message_queue queue; + + TEST_ASSERT( mbedtls_test_message_queue_setup( &queue, 3 ) == 0 ); + + /* Sanity test - 3 pushes and 3 pops with sufficient space */ + TEST_ASSERT( mbedtls_test_message_queue_push_info( &queue, 1 ) == 1 ); + TEST_ASSERT( queue.capacity == 3 ); + TEST_ASSERT( queue.num == 1 ); + TEST_ASSERT( mbedtls_test_message_queue_push_info( &queue, 1 ) == 1 ); + TEST_ASSERT( queue.capacity == 3 ); + TEST_ASSERT( queue.num == 2 ); + TEST_ASSERT( mbedtls_test_message_queue_push_info( &queue, 2 ) == 2 ); + TEST_ASSERT( queue.capacity == 3 ); + TEST_ASSERT( queue.num == 3 ); + + TEST_ASSERT( mbedtls_test_message_queue_pop_info( &queue, 1 ) == 1 ); + TEST_ASSERT( mbedtls_test_message_queue_pop_info( &queue, 1 ) == 1 ); + TEST_ASSERT( mbedtls_test_message_queue_pop_info( &queue, 2 ) == 2 ); + +exit: + mbedtls_test_message_queue_free( &queue ); +} + +void test_ssl_message_queue_basic_wrapper( void ** params ) +{ + (void)params; + + test_ssl_message_queue_basic( ); +} +void test_ssl_message_queue_overflow_underflow( ) +{ + mbedtls_test_message_queue queue; + + TEST_ASSERT( mbedtls_test_message_queue_setup( &queue, 3 ) == 0 ); + + /* 4 pushes (last one with an error), 4 pops (last one with an error) */ + TEST_ASSERT( mbedtls_test_message_queue_push_info( &queue, 1 ) == 1 ); + TEST_ASSERT( mbedtls_test_message_queue_push_info( &queue, 1 ) == 1 ); + TEST_ASSERT( mbedtls_test_message_queue_push_info( &queue, 2 ) == 2 ); + TEST_ASSERT( mbedtls_test_message_queue_push_info( &queue, 3 ) + == MBEDTLS_ERR_SSL_WANT_WRITE ); + + TEST_ASSERT( mbedtls_test_message_queue_pop_info( &queue, 1 ) == 1 ); + TEST_ASSERT( mbedtls_test_message_queue_pop_info( &queue, 1 ) == 1 ); + TEST_ASSERT( mbedtls_test_message_queue_pop_info( &queue, 2 ) == 2 ); + + TEST_ASSERT( mbedtls_test_message_queue_pop_info( &queue, 1 ) + == MBEDTLS_ERR_SSL_WANT_READ ); + +exit: + mbedtls_test_message_queue_free( &queue ); +} + +void test_ssl_message_queue_overflow_underflow_wrapper( void ** params ) +{ + (void)params; + + test_ssl_message_queue_overflow_underflow( ); +} +void test_ssl_message_queue_interleaved( ) +{ + mbedtls_test_message_queue queue; + + TEST_ASSERT( mbedtls_test_message_queue_setup( &queue, 3 ) == 0 ); + + /* Interleaved test - [2 pushes, 1 pop] twice, and then two pops + * (to wrap around the buffer) */ + TEST_ASSERT( mbedtls_test_message_queue_push_info( &queue, 1 ) == 1 ); + TEST_ASSERT( mbedtls_test_message_queue_push_info( &queue, 1 ) == 1 ); + + TEST_ASSERT( mbedtls_test_message_queue_pop_info( &queue, 1 ) == 1 ); + + TEST_ASSERT( mbedtls_test_message_queue_push_info( &queue, 2 ) == 2 ); + TEST_ASSERT( mbedtls_test_message_queue_push_info( &queue, 3 ) == 3 ); + + TEST_ASSERT( mbedtls_test_message_queue_pop_info( &queue, 1 ) == 1 ); + TEST_ASSERT( mbedtls_test_message_queue_pop_info( &queue, 2 ) == 2 ); + + TEST_ASSERT( mbedtls_test_message_queue_push_info( &queue, 5 ) == 5 ); + TEST_ASSERT( mbedtls_test_message_queue_push_info( &queue, 8 ) == 8 ); + + TEST_ASSERT( mbedtls_test_message_queue_pop_info( &queue, 3 ) == 3 ); + + TEST_ASSERT( mbedtls_test_message_queue_pop_info( &queue, 5 ) == 5 ); + + TEST_ASSERT( mbedtls_test_message_queue_pop_info( &queue, 8 ) == 8 ); + +exit: + mbedtls_test_message_queue_free( &queue ); +} + +void test_ssl_message_queue_interleaved_wrapper( void ** params ) +{ + (void)params; + + test_ssl_message_queue_interleaved( ); +} +void test_ssl_message_queue_insufficient_buffer( ) +{ + mbedtls_test_message_queue queue; + size_t message_len = 10; + size_t buffer_len = 5; + + TEST_ASSERT( mbedtls_test_message_queue_setup( &queue, 1 ) == 0 ); + + /* Popping without a sufficient buffer */ + TEST_ASSERT( mbedtls_test_message_queue_push_info( &queue, message_len ) + == (int) message_len ); + TEST_ASSERT( mbedtls_test_message_queue_pop_info( &queue, buffer_len ) + == (int) buffer_len ); +exit: + mbedtls_test_message_queue_free( &queue ); +} + +void test_ssl_message_queue_insufficient_buffer_wrapper( void ** params ) +{ + (void)params; + + test_ssl_message_queue_insufficient_buffer( ); +} +void test_ssl_message_mock_uninitialized( ) +{ + enum { MSGLEN = 10 }; + unsigned char message[MSGLEN], received[MSGLEN]; + mbedtls_mock_socket client, server; + mbedtls_test_message_queue server_queue, client_queue; + mbedtls_test_message_socket_context server_context, client_context; + mbedtls_message_socket_init( &server_context ); + mbedtls_message_socket_init( &client_context ); + + /* Send with a NULL context */ + TEST_ASSERT( mbedtls_mock_tcp_send_msg( NULL, message, MSGLEN ) + == MBEDTLS_TEST_ERROR_CONTEXT_ERROR ); + + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( NULL, message, MSGLEN ) + == MBEDTLS_TEST_ERROR_CONTEXT_ERROR ); + + TEST_ASSERT( mbedtls_message_socket_setup( &server_queue, &client_queue, 1, + &server, + &server_context ) == 0 ); + + TEST_ASSERT( mbedtls_message_socket_setup( &client_queue, &server_queue, 1, + &client, + &client_context ) == 0 ); + + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &client_context, message, MSGLEN ) + == MBEDTLS_TEST_ERROR_SEND_FAILED ); + + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, MSGLEN ) + == MBEDTLS_ERR_SSL_WANT_READ ); + + /* Push directly to a queue to later simulate a disconnected behavior */ + TEST_ASSERT( mbedtls_test_message_queue_push_info( &server_queue, MSGLEN ) + == MSGLEN ); + + /* Test if there's an error when trying to read from a disconnected + * socket */ + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, MSGLEN ) + == MBEDTLS_TEST_ERROR_RECV_FAILED ); + exit: + mbedtls_message_socket_close( &server_context ); + mbedtls_message_socket_close( &client_context ); +} + +void test_ssl_message_mock_uninitialized_wrapper( void ** params ) +{ + (void)params; + + test_ssl_message_mock_uninitialized( ); +} +void test_ssl_message_mock_basic( ) +{ + enum { MSGLEN = 10 }; + unsigned char message[MSGLEN], received[MSGLEN]; + mbedtls_mock_socket client, server; + unsigned i; + mbedtls_test_message_queue server_queue, client_queue; + mbedtls_test_message_socket_context server_context, client_context; + mbedtls_message_socket_init( &server_context ); + mbedtls_message_socket_init( &client_context ); + + TEST_ASSERT( mbedtls_message_socket_setup( &server_queue, &client_queue, 1, + &server, + &server_context ) == 0 ); + + TEST_ASSERT( mbedtls_message_socket_setup( &client_queue, &server_queue, 1, + &client, + &client_context ) == 0 ); + + /* Fill up the buffer with structured data so that unwanted changes + * can be detected */ + for( i = 0; i < MSGLEN; i++ ) + { + message[i] = i & 0xFF; + } + TEST_ASSERT( 0 == mbedtls_mock_socket_connect( &client, &server, + MSGLEN ) ); + + /* Send the message to the server */ + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &client_context, message, + MSGLEN ) == MSGLEN ); + + /* Read from the server */ + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, MSGLEN ) + == MSGLEN ); + + TEST_ASSERT( memcmp( message, received, MSGLEN ) == 0 ); + memset( received, 0, MSGLEN ); + + /* Send the message to the client */ + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &server_context, message, + MSGLEN ) == MSGLEN ); + + /* Read from the client */ + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &client_context, received, MSGLEN ) + == MSGLEN ); + TEST_ASSERT( memcmp( message, received, MSGLEN ) == 0 ); + + exit: + mbedtls_message_socket_close( &server_context ); + mbedtls_message_socket_close( &client_context ); +} + +void test_ssl_message_mock_basic_wrapper( void ** params ) +{ + (void)params; + + test_ssl_message_mock_basic( ); +} +void test_ssl_message_mock_queue_overflow_underflow( ) +{ + enum { MSGLEN = 10 }; + unsigned char message[MSGLEN], received[MSGLEN]; + mbedtls_mock_socket client, server; + unsigned i; + mbedtls_test_message_queue server_queue, client_queue; + mbedtls_test_message_socket_context server_context, client_context; + mbedtls_message_socket_init( &server_context ); + mbedtls_message_socket_init( &client_context ); + + TEST_ASSERT( mbedtls_message_socket_setup( &server_queue, &client_queue, 2, + &server, + &server_context ) == 0 ); + + TEST_ASSERT( mbedtls_message_socket_setup( &client_queue, &server_queue, 2, + &client, + &client_context ) == 0 ); + + /* Fill up the buffer with structured data so that unwanted changes + * can be detected */ + for( i = 0; i < MSGLEN; i++ ) + { + message[i] = i & 0xFF; + } + TEST_ASSERT( 0 == mbedtls_mock_socket_connect( &client, &server, + MSGLEN*2 ) ); + + /* Send three message to the server, last one with an error */ + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &client_context, message, + MSGLEN - 1 ) == MSGLEN - 1 ); + + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &client_context, message, + MSGLEN ) == MSGLEN ); + + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &client_context, message, + MSGLEN ) + == MBEDTLS_ERR_SSL_WANT_WRITE ); + + /* Read three messages from the server, last one with an error */ + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, + MSGLEN - 1 ) == MSGLEN - 1 ); + + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, MSGLEN ) + == MSGLEN ); + + TEST_ASSERT( memcmp( message, received, MSGLEN ) == 0 ); + + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, MSGLEN ) + == MBEDTLS_ERR_SSL_WANT_READ ); + + exit: + mbedtls_message_socket_close( &server_context ); + mbedtls_message_socket_close( &client_context ); +} + +void test_ssl_message_mock_queue_overflow_underflow_wrapper( void ** params ) +{ + (void)params; + + test_ssl_message_mock_queue_overflow_underflow( ); +} +void test_ssl_message_mock_socket_overflow( ) +{ + enum { MSGLEN = 10 }; + unsigned char message[MSGLEN], received[MSGLEN]; + mbedtls_mock_socket client, server; + unsigned i; + mbedtls_test_message_queue server_queue, client_queue; + mbedtls_test_message_socket_context server_context, client_context; + mbedtls_message_socket_init( &server_context ); + mbedtls_message_socket_init( &client_context ); + + TEST_ASSERT( mbedtls_message_socket_setup( &server_queue, &client_queue, 2, + &server, + &server_context ) == 0 ); + + TEST_ASSERT( mbedtls_message_socket_setup( &client_queue, &server_queue, 2, + &client, + &client_context ) == 0 ); + + /* Fill up the buffer with structured data so that unwanted changes + * can be detected */ + for( i = 0; i < MSGLEN; i++ ) + { + message[i] = i & 0xFF; + } + TEST_ASSERT( 0 == mbedtls_mock_socket_connect( &client, &server, + MSGLEN ) ); + + /* Send two message to the server, second one with an error */ + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &client_context, message, + MSGLEN ) == MSGLEN ); + + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &client_context, message, + MSGLEN ) + == MBEDTLS_TEST_ERROR_SEND_FAILED ); + + /* Read the only message from the server */ + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, MSGLEN ) + == MSGLEN ); + + TEST_ASSERT( memcmp( message, received, MSGLEN ) == 0 ); + + exit: + mbedtls_message_socket_close( &server_context ); + mbedtls_message_socket_close( &client_context ); +} + +void test_ssl_message_mock_socket_overflow_wrapper( void ** params ) +{ + (void)params; + + test_ssl_message_mock_socket_overflow( ); +} +void test_ssl_message_mock_truncated( ) +{ + enum { MSGLEN = 10 }; + unsigned char message[MSGLEN], received[MSGLEN]; + mbedtls_mock_socket client, server; + unsigned i; + mbedtls_test_message_queue server_queue, client_queue; + mbedtls_test_message_socket_context server_context, client_context; + mbedtls_message_socket_init( &server_context ); + mbedtls_message_socket_init( &client_context ); + + TEST_ASSERT( mbedtls_message_socket_setup( &server_queue, &client_queue, 2, + &server, + &server_context ) == 0 ); + + TEST_ASSERT( mbedtls_message_socket_setup( &client_queue, &server_queue, 2, + &client, + &client_context ) == 0 ); + + memset( received, 0, MSGLEN ); + /* Fill up the buffer with structured data so that unwanted changes + * can be detected */ + for( i = 0; i < MSGLEN; i++ ) + { + message[i] = i & 0xFF; + } + TEST_ASSERT( 0 == mbedtls_mock_socket_connect( &client, &server, + 2 * MSGLEN ) ); + + /* Send two messages to the server, the second one small enough to fit in the + * receiver's buffer. */ + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &client_context, message, + MSGLEN ) == MSGLEN ); + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &client_context, message, + MSGLEN / 2 ) == MSGLEN / 2 ); + /* Read a truncated message from the server */ + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, MSGLEN/2 ) + == MSGLEN/2 ); + + /* Test that the first half of the message is valid, and second one isn't */ + TEST_ASSERT( memcmp( message, received, MSGLEN/2 ) == 0 ); + TEST_ASSERT( memcmp( message + MSGLEN/2, received + MSGLEN/2, MSGLEN/2 ) + != 0 ); + memset( received, 0, MSGLEN ); + + /* Read a full message from the server */ + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, MSGLEN/2 ) + == MSGLEN / 2 ); + + /* Test that the first half of the message is valid */ + TEST_ASSERT( memcmp( message, received, MSGLEN/2 ) == 0 ); + + exit: + mbedtls_message_socket_close( &server_context ); + mbedtls_message_socket_close( &client_context ); +} + +void test_ssl_message_mock_truncated_wrapper( void ** params ) +{ + (void)params; + + test_ssl_message_mock_truncated( ); +} +void test_ssl_message_mock_socket_read_error( ) +{ + enum { MSGLEN = 10 }; + unsigned char message[MSGLEN], received[MSGLEN]; + mbedtls_mock_socket client, server; + unsigned i; + mbedtls_test_message_queue server_queue, client_queue; + mbedtls_test_message_socket_context server_context, client_context; + mbedtls_message_socket_init( &server_context ); + mbedtls_message_socket_init( &client_context ); + + TEST_ASSERT( mbedtls_message_socket_setup( &server_queue, &client_queue, 1, + &server, + &server_context ) == 0 ); + + TEST_ASSERT( mbedtls_message_socket_setup( &client_queue, &server_queue, 1, + &client, + &client_context ) == 0 ); + + /* Fill up the buffer with structured data so that unwanted changes + * can be detected */ + for( i = 0; i < MSGLEN; i++ ) + { + message[i] = i & 0xFF; + } + TEST_ASSERT( 0 == mbedtls_mock_socket_connect( &client, &server, + MSGLEN ) ); + + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &client_context, message, + MSGLEN ) == MSGLEN ); + + /* Force a read error by disconnecting the socket by hand */ + server.status = 0; + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, MSGLEN ) + == MBEDTLS_TEST_ERROR_RECV_FAILED ); + /* Return to a valid state */ + server.status = MBEDTLS_MOCK_SOCKET_CONNECTED; + + memset( received, 0, sizeof( received ) ); + + /* Test that even though the server tried to read once disconnected, the + * continuity is preserved */ + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, MSGLEN ) + == MSGLEN ); + + TEST_ASSERT( memcmp( message, received, MSGLEN ) == 0 ); + + exit: + mbedtls_message_socket_close( &server_context ); + mbedtls_message_socket_close( &client_context ); +} + +void test_ssl_message_mock_socket_read_error_wrapper( void ** params ) +{ + (void)params; + + test_ssl_message_mock_socket_read_error( ); +} +void test_ssl_message_mock_interleaved_one_way( ) +{ + enum { MSGLEN = 10 }; + unsigned char message[MSGLEN], received[MSGLEN]; + mbedtls_mock_socket client, server; + unsigned i; + mbedtls_test_message_queue server_queue, client_queue; + mbedtls_test_message_socket_context server_context, client_context; + mbedtls_message_socket_init( &server_context ); + mbedtls_message_socket_init( &client_context ); + + TEST_ASSERT( mbedtls_message_socket_setup( &server_queue, &client_queue, 3, + &server, + &server_context ) == 0 ); + + TEST_ASSERT( mbedtls_message_socket_setup( &client_queue, &server_queue, 3, + &client, + &client_context ) == 0 ); + + /* Fill up the buffer with structured data so that unwanted changes + * can be detected */ + for( i = 0; i < MSGLEN; i++ ) + { + message[i] = i & 0xFF; + } + TEST_ASSERT( 0 == mbedtls_mock_socket_connect( &client, &server, + MSGLEN*3 ) ); + + /* Interleaved test - [2 sends, 1 read] twice, and then two reads + * (to wrap around the buffer) */ + for( i = 0; i < 2; i++ ) + { + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &client_context, message, + MSGLEN ) == MSGLEN ); + + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &client_context, message, + MSGLEN ) == MSGLEN ); + + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, + MSGLEN ) == MSGLEN ); + TEST_ASSERT( memcmp( message, received, MSGLEN ) == 0 ); + memset( received, 0, sizeof( received ) ); + } + + for( i = 0; i < 2; i++ ) + { + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, + MSGLEN ) == MSGLEN ); + + TEST_ASSERT( memcmp( message, received, MSGLEN ) == 0 ); + } + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, MSGLEN ) + == MBEDTLS_ERR_SSL_WANT_READ ); + exit: + mbedtls_message_socket_close( &server_context ); + mbedtls_message_socket_close( &client_context ); +} + +void test_ssl_message_mock_interleaved_one_way_wrapper( void ** params ) +{ + (void)params; + + test_ssl_message_mock_interleaved_one_way( ); +} +void test_ssl_message_mock_interleaved_two_ways( ) +{ + enum { MSGLEN = 10 }; + unsigned char message[MSGLEN], received[MSGLEN]; + mbedtls_mock_socket client, server; + unsigned i; + mbedtls_test_message_queue server_queue, client_queue; + mbedtls_test_message_socket_context server_context, client_context; + mbedtls_message_socket_init( &server_context ); + mbedtls_message_socket_init( &client_context ); + + TEST_ASSERT( mbedtls_message_socket_setup( &server_queue, &client_queue, 3, + &server, + &server_context ) == 0 ); + + TEST_ASSERT( mbedtls_message_socket_setup( &client_queue, &server_queue, 3, + &client, + &client_context ) == 0 ); + + /* Fill up the buffer with structured data so that unwanted changes + * can be detected */ + for( i = 0; i < MSGLEN; i++ ) + { + message[i] = i & 0xFF; + } + TEST_ASSERT( 0 == mbedtls_mock_socket_connect( &client, &server, + MSGLEN*3 ) ); + + /* Interleaved test - [2 sends, 1 read] twice, both ways, and then two reads + * (to wrap around the buffer) both ways. */ + for( i = 0; i < 2; i++ ) + { + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &client_context, message, + MSGLEN ) == MSGLEN ); + + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &client_context, message, + MSGLEN ) == MSGLEN ); + + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &server_context, message, + MSGLEN ) == MSGLEN ); + + TEST_ASSERT( mbedtls_mock_tcp_send_msg( &server_context, message, + MSGLEN ) == MSGLEN ); + + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, + MSGLEN ) == MSGLEN ); + + TEST_ASSERT( memcmp( message, received, MSGLEN ) == 0 ); + + memset( received, 0, sizeof( received ) ); + + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &client_context, received, + MSGLEN ) == MSGLEN ); + + TEST_ASSERT( memcmp( message, received, MSGLEN ) == 0 ); + + memset( received, 0, sizeof( received ) ); + } + + for( i = 0; i < 2; i++ ) + { + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, + MSGLEN ) == MSGLEN ); + + TEST_ASSERT( memcmp( message, received, MSGLEN ) == 0 ); + memset( received, 0, sizeof( received ) ); + + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &client_context, received, + MSGLEN ) == MSGLEN ); + + TEST_ASSERT( memcmp( message, received, MSGLEN ) == 0 ); + memset( received, 0, sizeof( received ) ); + } + + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &server_context, received, MSGLEN ) + == MBEDTLS_ERR_SSL_WANT_READ ); + + TEST_ASSERT( mbedtls_mock_tcp_recv_msg( &client_context, received, MSGLEN ) + == MBEDTLS_ERR_SSL_WANT_READ ); + exit: + mbedtls_message_socket_close( &server_context ); + mbedtls_message_socket_close( &client_context ); +} + +void test_ssl_message_mock_interleaved_two_ways_wrapper( void ** params ) +{ + (void)params; + + test_ssl_message_mock_interleaved_two_ways( ); +} +#if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) +void test_ssl_dtls_replay( data_t * prevs, data_t * new, int ret ) +{ + uint32_t len = 0; + mbedtls_ssl_context ssl; + mbedtls_ssl_config conf; + + mbedtls_ssl_init( &ssl ); + mbedtls_ssl_config_init( &conf ); + + TEST_ASSERT( mbedtls_ssl_config_defaults( &conf, + MBEDTLS_SSL_IS_CLIENT, + MBEDTLS_SSL_TRANSPORT_DATAGRAM, + MBEDTLS_SSL_PRESET_DEFAULT ) == 0 ); + TEST_ASSERT( mbedtls_ssl_setup( &ssl, &conf ) == 0 ); + + /* Read previous record numbers */ + for( len = 0; len < prevs->len; len += 6 ) + { + memcpy( ssl.in_ctr + 2, prevs->x + len, 6 ); + mbedtls_ssl_dtls_replay_update( &ssl ); + } + + /* Check new number */ + memcpy( ssl.in_ctr + 2, new->x, 6 ); + TEST_ASSERT( mbedtls_ssl_dtls_replay_check( &ssl ) == ret ); + + mbedtls_ssl_free( &ssl ); + mbedtls_ssl_config_free( &conf ); +exit: + ; +} + +void test_ssl_dtls_replay_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_ssl_dtls_replay( &data0, &data2, *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_SSL_DTLS_ANTI_REPLAY */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +void test_ssl_set_hostname_twice( char *hostname0, char *hostname1 ) +{ + mbedtls_ssl_context ssl; + mbedtls_ssl_init( &ssl ); + + TEST_ASSERT( mbedtls_ssl_set_hostname( &ssl, hostname0 ) == 0 ); + TEST_ASSERT( mbedtls_ssl_set_hostname( &ssl, hostname1 ) == 0 ); + + mbedtls_ssl_free( &ssl ); +exit: + ; +} + +void test_ssl_set_hostname_twice_wrapper( void ** params ) +{ + + test_ssl_set_hostname_twice( (char *) params[0], (char *) params[1] ); +} +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +void test_ssl_crypt_record( int cipher_type, int hash_id, + int etm, int tag_mode, int ver, + int cid0_len, int cid1_len ) +{ + /* + * Test several record encryptions and decryptions + * with plenty of space before and after the data + * within the record buffer. + */ + + int ret; + int num_records = 16; + mbedtls_ssl_context ssl; /* ONLY for debugging */ + + mbedtls_ssl_transform t0, t1; + unsigned char *buf = NULL; + size_t const buflen = 512; + mbedtls_record rec, rec_backup; + + mbedtls_ssl_init( &ssl ); + mbedtls_ssl_transform_init( &t0 ); + mbedtls_ssl_transform_init( &t1 ); + TEST_ASSERT( build_transforms( &t0, &t1, cipher_type, hash_id, + etm, tag_mode, ver, + (size_t) cid0_len, + (size_t) cid1_len ) == 0 ); + + TEST_ASSERT( ( buf = mbedtls_calloc( 1, buflen ) ) != NULL ); + + while( num_records-- > 0 ) + { + mbedtls_ssl_transform *t_dec, *t_enc; + /* Take turns in who's sending and who's receiving. */ + if( num_records % 3 == 0 ) + { + t_dec = &t0; + t_enc = &t1; + } + else + { + t_dec = &t1; + t_enc = &t0; + } + + /* + * The record header affects the transformation in two ways: + * 1) It determines the AEAD additional data + * 2) The record counter sometimes determines the IV. + * + * Apart from that, the fields don't have influence. + * In particular, it is currently not the responsibility + * of ssl_encrypt/decrypt_buf to check if the transform + * version matches the record version, or that the + * type is sensible. + */ + + memset( rec.ctr, num_records, sizeof( rec.ctr ) ); + rec.type = 42; + rec.ver[0] = num_records; + rec.ver[1] = num_records; +#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) + rec.cid_len = 0; +#endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ + + rec.buf = buf; + rec.buf_len = buflen; + rec.data_offset = 16; + /* Make sure to vary the length to exercise different + * paddings. */ + rec.data_len = 1 + num_records; + + memset( rec.buf + rec.data_offset, 42, rec.data_len ); + + /* Make a copy for later comparison */ + rec_backup = rec; + + /* Encrypt record */ + ret = mbedtls_ssl_encrypt_buf( &ssl, t_enc, &rec, + mbedtls_test_rnd_std_rand, NULL ); + TEST_ASSERT( ret == 0 || ret == MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + if( ret != 0 ) + { + continue; + } + +#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) + if( rec.cid_len != 0 ) + { + /* DTLS 1.2 + CID hides the real content type and + * uses a special CID content type in the protected + * record. Double-check this. */ + TEST_ASSERT( rec.type == MBEDTLS_SSL_MSG_CID ); + } +#endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ + +#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) + if( t_enc->minor_ver == MBEDTLS_SSL_MINOR_VERSION_4 ) + { + /* TLS 1.3 hides the real content type and + * always uses Application Data as the content type + * for protected records. Double-check this. */ + TEST_ASSERT( rec.type == MBEDTLS_SSL_MSG_APPLICATION_DATA ); + } +#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */ + + /* Decrypt record with t_dec */ + ret = mbedtls_ssl_decrypt_buf( &ssl, t_dec, &rec ); + TEST_ASSERT( ret == 0 ); + + /* Compare results */ + TEST_ASSERT( rec.type == rec_backup.type ); + TEST_ASSERT( memcmp( rec.ctr, rec_backup.ctr, 8 ) == 0 ); + TEST_ASSERT( rec.ver[0] == rec_backup.ver[0] ); + TEST_ASSERT( rec.ver[1] == rec_backup.ver[1] ); + TEST_ASSERT( rec.data_len == rec_backup.data_len ); + TEST_ASSERT( rec.data_offset == rec_backup.data_offset ); + TEST_ASSERT( memcmp( rec.buf + rec.data_offset, + rec_backup.buf + rec_backup.data_offset, + rec.data_len ) == 0 ); + } + +exit: + + /* Cleanup */ + mbedtls_ssl_free( &ssl ); + mbedtls_ssl_transform_free( &t0 ); + mbedtls_ssl_transform_free( &t1 ); + + mbedtls_free( buf ); +} + +void test_ssl_crypt_record_wrapper( void ** params ) +{ + + test_ssl_crypt_record( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ) ); +} +void test_ssl_crypt_record_small( int cipher_type, int hash_id, + int etm, int tag_mode, int ver, + int cid0_len, int cid1_len ) +{ + /* + * Test pairs of encryption and decryption with an increasing + * amount of space in the record buffer - in more detail: + * 1) Try to encrypt with 0, 1, 2, ... bytes available + * in front of the plaintext, and expect the encryption + * to succeed starting from some offset. Always keep + * enough space in the end of the buffer. + * 2) Try to encrypt with 0, 1, 2, ... bytes available + * at the end of the plaintext, and expect the encryption + * to succeed starting from some offset. Always keep + * enough space at the beginning of the buffer. + * 3) Try to encrypt with 0, 1, 2, ... bytes available + * both at the front and end of the plaintext, + * and expect the encryption to succeed starting from + * some offset. + * + * If encryption succeeds, check that decryption succeeds + * and yields the original record. + */ + + mbedtls_ssl_context ssl; /* ONLY for debugging */ + + mbedtls_ssl_transform t0, t1; + unsigned char *buf = NULL; + size_t const buflen = 256; + mbedtls_record rec, rec_backup; + + int ret; + int mode; /* Mode 1, 2 or 3 as explained above */ + size_t offset; /* Available space at beginning/end/both */ + size_t threshold = 96; /* Maximum offset to test against */ + + size_t default_pre_padding = 64; /* Pre-padding to use in mode 2 */ + size_t default_post_padding = 128; /* Post-padding to use in mode 1 */ + + int seen_success; /* Indicates if in the current mode we've + * already seen a successful test. */ + + mbedtls_ssl_init( &ssl ); + mbedtls_ssl_transform_init( &t0 ); + mbedtls_ssl_transform_init( &t1 ); + TEST_ASSERT( build_transforms( &t0, &t1, cipher_type, hash_id, + etm, tag_mode, ver, + (size_t) cid0_len, + (size_t) cid1_len ) == 0 ); + + TEST_ASSERT( ( buf = mbedtls_calloc( 1, buflen ) ) != NULL ); + + for( mode=1; mode <= 3; mode++ ) + { + seen_success = 0; + for( offset=0; offset <= threshold; offset++ ) + { + mbedtls_ssl_transform *t_dec, *t_enc; + t_dec = &t0; + t_enc = &t1; + + memset( rec.ctr, offset, sizeof( rec.ctr ) ); + rec.type = 42; + rec.ver[0] = offset; + rec.ver[1] = offset; + rec.buf = buf; + rec.buf_len = buflen; +#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) + rec.cid_len = 0; +#endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ + + switch( mode ) + { + case 1: /* Space in the beginning */ + rec.data_offset = offset; + rec.data_len = buflen - offset - default_post_padding; + break; + + case 2: /* Space in the end */ + rec.data_offset = default_pre_padding; + rec.data_len = buflen - default_pre_padding - offset; + break; + + case 3: /* Space in the beginning and end */ + rec.data_offset = offset; + rec.data_len = buflen - 2 * offset; + break; + + default: + TEST_ASSERT( 0 ); + break; + } + + memset( rec.buf + rec.data_offset, 42, rec.data_len ); + + /* Make a copy for later comparison */ + rec_backup = rec; + + /* Encrypt record */ + ret = mbedtls_ssl_encrypt_buf( &ssl, t_enc, &rec, + mbedtls_test_rnd_std_rand, NULL ); + + if( ( mode == 1 || mode == 2 ) && seen_success ) + { + TEST_ASSERT( ret == 0 ); + } + else + { + TEST_ASSERT( ret == 0 || ret == MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + if( ret == 0 ) + seen_success = 1; + } + + if( ret != 0 ) + continue; + +#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) + if( rec.cid_len != 0 ) + { + /* DTLS 1.2 + CID hides the real content type and + * uses a special CID content type in the protected + * record. Double-check this. */ + TEST_ASSERT( rec.type == MBEDTLS_SSL_MSG_CID ); + } +#endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ + +#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) + if( t_enc->minor_ver == MBEDTLS_SSL_MINOR_VERSION_4 ) + { + /* TLS 1.3 hides the real content type and + * always uses Application Data as the content type + * for protected records. Double-check this. */ + TEST_ASSERT( rec.type == MBEDTLS_SSL_MSG_APPLICATION_DATA ); + } +#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */ + + /* Decrypt record with t_dec */ + TEST_ASSERT( mbedtls_ssl_decrypt_buf( &ssl, t_dec, &rec ) == 0 ); + + /* Compare results */ + TEST_ASSERT( rec.type == rec_backup.type ); + TEST_ASSERT( memcmp( rec.ctr, rec_backup.ctr, 8 ) == 0 ); + TEST_ASSERT( rec.ver[0] == rec_backup.ver[0] ); + TEST_ASSERT( rec.ver[1] == rec_backup.ver[1] ); + TEST_ASSERT( rec.data_len == rec_backup.data_len ); + TEST_ASSERT( rec.data_offset == rec_backup.data_offset ); + TEST_ASSERT( memcmp( rec.buf + rec.data_offset, + rec_backup.buf + rec_backup.data_offset, + rec.data_len ) == 0 ); + } + + TEST_ASSERT( seen_success == 1 ); + } + +exit: + + /* Cleanup */ + mbedtls_ssl_free( &ssl ); + mbedtls_ssl_transform_free( &t0 ); + mbedtls_ssl_transform_free( &t1 ); + + mbedtls_free( buf ); +} + +void test_ssl_crypt_record_small_wrapper( void ** params ) +{ + + test_ssl_crypt_record_small( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ) ); +} +#if defined(MBEDTLS_CIPHER_MODE_CBC) +#if defined(MBEDTLS_AES_C) +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) +void test_ssl_decrypt_non_etm_cbc( int cipher_type, int hash_id, int trunc_hmac, + int length_selector ) +{ + /* + * Test record decryption for CBC without EtM, focused on the verification + * of padding and MAC. + * + * Actually depends on TLS >= 1.0 (SSL 3.0 computes the MAC differently), + * and either AES, ARIA, Camellia or DES, but since the test framework + * doesn't support alternation in dependency statements, just depend on + * TLS 1.2 and AES. + * + * The length_selector argument is interpreted as follows: + * - if it's -1, the plaintext length is 0 and minimal padding is applied + * - if it's -2, the plaintext length is 0 and maximal padding is applied + * - otherwise it must be in [0, 255] and is padding_length from RFC 5246: + * it's the length of the rest of the padding, that is, excluding the + * byte that encodes the length. The minimal non-zero plaintext length + * that gives this padding_length is automatically selected. + */ + mbedtls_ssl_context ssl; /* ONLY for debugging */ + mbedtls_ssl_transform t0, t1; + mbedtls_record rec, rec_save; + unsigned char *buf = NULL, *buf_save = NULL; + size_t buflen, olen = 0; + size_t plaintext_len, block_size, i; + unsigned char padlen; /* excluding the padding_length byte */ + unsigned char add_data[13]; + unsigned char mac[MBEDTLS_MD_MAX_SIZE]; + int exp_ret; + const unsigned char pad_max_len = 255; /* Per the standard */ + + mbedtls_ssl_init( &ssl ); + mbedtls_ssl_transform_init( &t0 ); + mbedtls_ssl_transform_init( &t1 ); + + /* Set up transforms with dummy keys */ + TEST_ASSERT( build_transforms( &t0, &t1, cipher_type, hash_id, + 0, trunc_hmac, + MBEDTLS_SSL_MINOR_VERSION_3, + 0 , 0 ) == 0 ); + + /* Determine padding/plaintext length */ + TEST_ASSERT( length_selector >= -2 && length_selector <= 255 ); + block_size = t0.ivlen; + if( length_selector < 0 ) + { + plaintext_len = 0; + + /* Minimal padding + * The +1 is for the padding_length byte, not counted in padlen. */ + padlen = block_size - ( t0.maclen + 1 ) % block_size; + + /* Maximal padding? */ + if( length_selector == -2 ) + padlen += block_size * ( ( pad_max_len - padlen ) / block_size ); + } + else + { + padlen = length_selector; + + /* Minimal non-zero plaintext_length giving desired padding. + * The +1 is for the padding_length byte, not counted in padlen. */ + plaintext_len = block_size - ( padlen + t0.maclen + 1 ) % block_size; + } + + /* Prepare a buffer for record data */ + buflen = block_size + + plaintext_len + + t0.maclen + + padlen + 1; + ASSERT_ALLOC( buf, buflen ); + ASSERT_ALLOC( buf_save, buflen ); + + /* Prepare a dummy record header */ + memset( rec.ctr, 0, sizeof( rec.ctr ) ); + rec.type = MBEDTLS_SSL_MSG_APPLICATION_DATA; + rec.ver[0] = MBEDTLS_SSL_MAJOR_VERSION_3; + rec.ver[1] = MBEDTLS_SSL_MINOR_VERSION_3; +#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) + rec.cid_len = 0; +#endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ + + /* Prepare dummy record content */ + rec.buf = buf; + rec.buf_len = buflen; + rec.data_offset = block_size; + rec.data_len = plaintext_len; + memset( rec.buf + rec.data_offset, 42, rec.data_len ); + + /* Serialized version of record header for MAC purposes */ + memcpy( add_data, rec.ctr, 8 ); + add_data[8] = rec.type; + add_data[9] = rec.ver[0]; + add_data[10] = rec.ver[1]; + add_data[11] = ( rec.data_len >> 8 ) & 0xff; + add_data[12] = ( rec.data_len >> 0 ) & 0xff; + + /* Set dummy IV */ + memset( t0.iv_enc, 0x55, t0.ivlen ); + memcpy( rec.buf, t0.iv_enc, t0.ivlen ); + + /* + * Prepare a pre-encryption record (with MAC and padding), and save it. + */ + + /* MAC with additional data */ + TEST_EQUAL( 0, mbedtls_md_hmac_update( &t0.md_ctx_enc, add_data, 13 ) ); + TEST_EQUAL( 0, mbedtls_md_hmac_update( &t0.md_ctx_enc, + rec.buf + rec.data_offset, + rec.data_len ) ); + TEST_EQUAL( 0, mbedtls_md_hmac_finish( &t0.md_ctx_enc, mac ) ); + + memcpy( rec.buf + rec.data_offset + rec.data_len, mac, t0.maclen ); + rec.data_len += t0.maclen; + + /* Pad */ + memset( rec.buf + rec.data_offset + rec.data_len, padlen, padlen + 1 ); + rec.data_len += padlen + 1; + + /* Save correct pre-encryption record */ + rec_save = rec; + rec_save.buf = buf_save; + memcpy( buf_save, buf, buflen ); + + /* + * Encrypt and decrypt the correct record, expecting success + */ + TEST_EQUAL( 0, mbedtls_cipher_crypt( &t0.cipher_ctx_enc, + t0.iv_enc, t0.ivlen, + rec.buf + rec.data_offset, rec.data_len, + rec.buf + rec.data_offset, &olen ) ); + rec.data_offset -= t0.ivlen; + rec.data_len += t0.ivlen; + + TEST_EQUAL( 0, mbedtls_ssl_decrypt_buf( &ssl, &t1, &rec ) ); + + /* + * Modify each byte of the pre-encryption record before encrypting and + * decrypting it, expecting failure every time. + */ + for( i = block_size; i < buflen; i++ ) + { + mbedtls_test_set_step( i ); + + /* Restore correct pre-encryption record */ + rec = rec_save; + rec.buf = buf; + memcpy( buf, buf_save, buflen ); + + /* Corrupt one byte of the data (could be plaintext, MAC or padding) */ + rec.buf[i] ^= 0x01; + + /* Encrypt */ + TEST_EQUAL( 0, mbedtls_cipher_crypt( &t0.cipher_ctx_enc, + t0.iv_enc, t0.ivlen, + rec.buf + rec.data_offset, rec.data_len, + rec.buf + rec.data_offset, &olen ) ); + rec.data_offset -= t0.ivlen; + rec.data_len += t0.ivlen; + + /* Decrypt and expect failure */ + TEST_EQUAL( MBEDTLS_ERR_SSL_INVALID_MAC, + mbedtls_ssl_decrypt_buf( &ssl, &t1, &rec ) ); + } + + /* + * Use larger values of the padding bytes - with small buffers, this tests + * the case where the announced padlen would be larger than the buffer + * (and before that, than the buffer minus the size of the MAC), to make + * sure our padding checking code does not perform any out-of-bounds reads + * in this case. (With larger buffers, ie when the plaintext is long or + * maximal length padding is used, this is less relevant but still doesn't + * hurt to test.) + * + * (Start the loop with correct padding, just to double-check that record + * saving did work, and that we're overwriting the correct bytes.) + */ + for( i = padlen; i <= pad_max_len; i++ ) + { + mbedtls_test_set_step( i ); + + /* Restore correct pre-encryption record */ + rec = rec_save; + rec.buf = buf; + memcpy( buf, buf_save, buflen ); + + /* Set padding bytes to new value */ + memset( buf + buflen - padlen - 1, i, padlen + 1 ); + + /* Encrypt */ + TEST_EQUAL( 0, mbedtls_cipher_crypt( &t0.cipher_ctx_enc, + t0.iv_enc, t0.ivlen, + rec.buf + rec.data_offset, rec.data_len, + rec.buf + rec.data_offset, &olen ) ); + rec.data_offset -= t0.ivlen; + rec.data_len += t0.ivlen; + + /* Decrypt and expect failure except the first time */ + exp_ret = ( i == padlen ) ? 0 : MBEDTLS_ERR_SSL_INVALID_MAC; + TEST_EQUAL( exp_ret, mbedtls_ssl_decrypt_buf( &ssl, &t1, &rec ) ); + } + +exit: + mbedtls_ssl_free( &ssl ); + mbedtls_ssl_transform_free( &t0 ); + mbedtls_ssl_transform_free( &t1 ); + mbedtls_free( buf ); + mbedtls_free( buf_save ); +} + +void test_ssl_decrypt_non_etm_cbc_wrapper( void ** params ) +{ + + test_ssl_decrypt_non_etm_cbc( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ) ); +} +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ +#endif /* MBEDTLS_AES_C */ +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) +void test_ssl_tls1_3_hkdf_expand_label( int hash_alg, + data_t *secret, + int label_idx, + data_t *ctx, + int desired_length, + data_t *expected ) +{ + unsigned char dst[ 100 ]; + + unsigned char const *lbl = NULL; + size_t lbl_len; +#define MBEDTLS_SSL_TLS1_3_LABEL( name, string ) \ + if( label_idx == (int) tls1_3_label_ ## name ) \ + { \ + lbl = mbedtls_ssl_tls1_3_labels.name; \ + lbl_len = sizeof( mbedtls_ssl_tls1_3_labels.name ); \ + } +MBEDTLS_SSL_TLS1_3_LABEL_LIST +#undef MBEDTLS_SSL_TLS1_3_LABEL + TEST_ASSERT( lbl != NULL ); + + /* Check sanity of test parameters. */ + TEST_ASSERT( (size_t) desired_length <= sizeof(dst) ); + TEST_ASSERT( (size_t) desired_length == expected->len ); + + TEST_ASSERT( mbedtls_ssl_tls1_3_hkdf_expand_label( + (mbedtls_md_type_t) hash_alg, + secret->x, secret->len, + lbl, lbl_len, + ctx->x, ctx->len, + dst, desired_length ) == 0 ); + + ASSERT_COMPARE( dst, (size_t) desired_length, + expected->x, (size_t) expected->len ); +exit: + ; +} + +void test_ssl_tls1_3_hkdf_expand_label_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + + test_ssl_tls1_3_hkdf_expand_label( *( (int *) params[0] ), &data1, *( (int *) params[3] ), &data4, *( (int *) params[6] ), &data7 ); +} +#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */ +#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) +void test_ssl_tls1_3_traffic_key_generation( int hash_alg, + data_t *server_secret, + data_t *client_secret, + int desired_iv_len, + int desired_key_len, + data_t *expected_server_write_key, + data_t *expected_server_write_iv, + data_t *expected_client_write_key, + data_t *expected_client_write_iv ) +{ + mbedtls_ssl_key_set keys; + + /* Check sanity of test parameters. */ + TEST_ASSERT( client_secret->len == server_secret->len ); + TEST_ASSERT( expected_client_write_iv->len == expected_server_write_iv->len && + expected_client_write_iv->len == (size_t) desired_iv_len ); + TEST_ASSERT( expected_client_write_key->len == expected_server_write_key->len && + expected_client_write_key->len == (size_t) desired_key_len ); + + TEST_ASSERT( mbedtls_ssl_tls1_3_make_traffic_keys( + (mbedtls_md_type_t) hash_alg, + client_secret->x, + server_secret->x, + client_secret->len /* == server_secret->len */, + desired_key_len, desired_iv_len, + &keys ) == 0 ); + + ASSERT_COMPARE( keys.client_write_key, + keys.key_len, + expected_client_write_key->x, + (size_t) desired_key_len ); + ASSERT_COMPARE( keys.server_write_key, + keys.key_len, + expected_server_write_key->x, + (size_t) desired_key_len ); + ASSERT_COMPARE( keys.client_write_iv, + keys.iv_len, + expected_client_write_iv->x, + (size_t) desired_iv_len ); + ASSERT_COMPARE( keys.server_write_iv, + keys.iv_len, + expected_server_write_iv->x, + (size_t) desired_iv_len ); +exit: + ; +} + +void test_ssl_tls1_3_traffic_key_generation_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data7 = {(uint8_t *) params[7], *( (uint32_t *) params[8] )}; + data_t data9 = {(uint8_t *) params[9], *( (uint32_t *) params[10] )}; + data_t data11 = {(uint8_t *) params[11], *( (uint32_t *) params[12] )}; + data_t data13 = {(uint8_t *) params[13], *( (uint32_t *) params[14] )}; + + test_ssl_tls1_3_traffic_key_generation( *( (int *) params[0] ), &data1, &data3, *( (int *) params[5] ), *( (int *) params[6] ), &data7, &data9, &data11, &data13 ); +} +#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */ +#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) +void test_ssl_tls1_3_derive_secret( int hash_alg, + data_t *secret, + int label_idx, + data_t *ctx, + int desired_length, + int already_hashed, + data_t *expected ) +{ + unsigned char dst[ 100 ]; + + unsigned char const *lbl = NULL; + size_t lbl_len; +#define MBEDTLS_SSL_TLS1_3_LABEL( name, string ) \ + if( label_idx == (int) tls1_3_label_ ## name ) \ + { \ + lbl = mbedtls_ssl_tls1_3_labels.name; \ + lbl_len = sizeof( mbedtls_ssl_tls1_3_labels.name ); \ + } +MBEDTLS_SSL_TLS1_3_LABEL_LIST +#undef MBEDTLS_SSL_TLS1_3_LABEL + TEST_ASSERT( lbl != NULL ); + + /* Check sanity of test parameters. */ + TEST_ASSERT( (size_t) desired_length <= sizeof(dst) ); + TEST_ASSERT( (size_t) desired_length == expected->len ); + + TEST_ASSERT( mbedtls_ssl_tls1_3_derive_secret( + (mbedtls_md_type_t) hash_alg, + secret->x, secret->len, + lbl, lbl_len, + ctx->x, ctx->len, + already_hashed, + dst, desired_length ) == 0 ); + + ASSERT_COMPARE( dst, desired_length, + expected->x, desired_length ); +exit: + ; +} + +void test_ssl_tls1_3_derive_secret_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data4 = {(uint8_t *) params[4], *( (uint32_t *) params[5] )}; + data_t data8 = {(uint8_t *) params[8], *( (uint32_t *) params[9] )}; + + test_ssl_tls1_3_derive_secret( *( (int *) params[0] ), &data1, *( (int *) params[3] ), &data4, *( (int *) params[6] ), *( (int *) params[7] ), &data8 ); +} +#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */ +#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) +void test_ssl_tls1_3_key_evolution( int hash_alg, + data_t *secret, + data_t *input, + data_t *expected ) +{ + unsigned char secret_new[ MBEDTLS_MD_MAX_SIZE ]; + + TEST_ASSERT( mbedtls_ssl_tls1_3_evolve_secret( + (mbedtls_md_type_t) hash_alg, + secret->len ? secret->x : NULL, + input->len ? input->x : NULL, input->len, + secret_new ) == 0 ); + + ASSERT_COMPARE( secret_new, (size_t) expected->len, + expected->x, (size_t) expected->len ); +exit: + ; +} + +void test_ssl_tls1_3_key_evolution_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data5 = {(uint8_t *) params[5], *( (uint32_t *) params[6] )}; + + test_ssl_tls1_3_key_evolution( *( (int *) params[0] ), &data1, &data3, &data5 ); +} +#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */ +void test_ssl_tls_prf( int type, data_t * secret, data_t * random, + char *label, data_t *result_str, int exp_ret ) +{ + unsigned char *output; + + output = mbedtls_calloc( 1, result_str->len ); + if( output == NULL ) + goto exit; + + USE_PSA_INIT( ); + + TEST_ASSERT( mbedtls_ssl_tls_prf( type, secret->x, secret->len, + label, random->x, random->len, + output, result_str->len ) == exp_ret ); + + if( exp_ret == 0 ) + { + TEST_ASSERT( mbedtls_test_hexcmp( output, result_str->x, + result_str->len, result_str->len ) == 0 ); + } +exit: + + mbedtls_free( output ); + USE_PSA_DONE( ); +} + +void test_ssl_tls_prf_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + data_t data3 = {(uint8_t *) params[3], *( (uint32_t *) params[4] )}; + data_t data6 = {(uint8_t *) params[6], *( (uint32_t *) params[7] )}; + + test_ssl_tls_prf( *( (int *) params[0] ), &data1, &data3, (char *) params[5], &data6, *( (int *) params[8] ) ); +} +void test_ssl_serialize_session_save_load( int ticket_len, char *crt_file ) +{ + mbedtls_ssl_session original, restored; + unsigned char *buf = NULL; + size_t len; + + /* + * Test that a save-load pair is the identity + */ + + mbedtls_ssl_session_init( &original ); + mbedtls_ssl_session_init( &restored ); + + /* Prepare a dummy session to work on */ + TEST_ASSERT( ssl_populate_session( &original, ticket_len, crt_file ) == 0 ); + + /* Serialize it */ + TEST_ASSERT( mbedtls_ssl_session_save( &original, NULL, 0, &len ) + == MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + TEST_ASSERT( ( buf = mbedtls_calloc( 1, len ) ) != NULL ); + TEST_ASSERT( mbedtls_ssl_session_save( &original, buf, len, &len ) + == 0 ); + + /* Restore session from serialized data */ + TEST_ASSERT( mbedtls_ssl_session_load( &restored, buf, len) == 0 ); + + /* + * Make sure both session structures are identical + */ +#if defined(MBEDTLS_HAVE_TIME) + TEST_ASSERT( original.start == restored.start ); +#endif + TEST_ASSERT( original.ciphersuite == restored.ciphersuite ); + TEST_ASSERT( original.compression == restored.compression ); + TEST_ASSERT( original.id_len == restored.id_len ); + TEST_ASSERT( memcmp( original.id, + restored.id, sizeof( original.id ) ) == 0 ); + TEST_ASSERT( memcmp( original.master, + restored.master, sizeof( original.master ) ) == 0 ); + +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) + TEST_ASSERT( ( original.peer_cert == NULL ) == + ( restored.peer_cert == NULL ) ); + if( original.peer_cert != NULL ) + { + TEST_ASSERT( original.peer_cert->raw.len == + restored.peer_cert->raw.len ); + TEST_ASSERT( memcmp( original.peer_cert->raw.p, + restored.peer_cert->raw.p, + original.peer_cert->raw.len ) == 0 ); + } +#else /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ + TEST_ASSERT( original.peer_cert_digest_type == + restored.peer_cert_digest_type ); + TEST_ASSERT( original.peer_cert_digest_len == + restored.peer_cert_digest_len ); + TEST_ASSERT( ( original.peer_cert_digest == NULL ) == + ( restored.peer_cert_digest == NULL ) ); + if( original.peer_cert_digest != NULL ) + { + TEST_ASSERT( memcmp( original.peer_cert_digest, + restored.peer_cert_digest, + original.peer_cert_digest_len ) == 0 ); + } +#endif /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ + TEST_ASSERT( original.verify_result == restored.verify_result ); + +#if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C) + TEST_ASSERT( original.ticket_len == restored.ticket_len ); + if( original.ticket_len != 0 ) + { + TEST_ASSERT( original.ticket != NULL ); + TEST_ASSERT( restored.ticket != NULL ); + TEST_ASSERT( memcmp( original.ticket, + restored.ticket, original.ticket_len ) == 0 ); + } + TEST_ASSERT( original.ticket_lifetime == restored.ticket_lifetime ); +#endif + +#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) + TEST_ASSERT( original.mfl_code == restored.mfl_code ); +#endif + +#if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) + TEST_ASSERT( original.encrypt_then_mac == restored.encrypt_then_mac ); +#endif + +exit: + mbedtls_ssl_session_free( &original ); + mbedtls_ssl_session_free( &restored ); + mbedtls_free( buf ); +} + +void test_ssl_serialize_session_save_load_wrapper( void ** params ) +{ + + test_ssl_serialize_session_save_load( *( (int *) params[0] ), (char *) params[1] ); +} +void test_ssl_serialize_session_load_save( int ticket_len, char *crt_file ) +{ + mbedtls_ssl_session session; + unsigned char *buf1 = NULL, *buf2 = NULL; + size_t len0, len1, len2; + + /* + * Test that a load-save pair is the identity + */ + + mbedtls_ssl_session_init( &session ); + + /* Prepare a dummy session to work on */ + TEST_ASSERT( ssl_populate_session( &session, ticket_len, crt_file ) == 0 ); + + /* Get desired buffer size for serializing */ + TEST_ASSERT( mbedtls_ssl_session_save( &session, NULL, 0, &len0 ) + == MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + + /* Allocate first buffer */ + buf1 = mbedtls_calloc( 1, len0 ); + TEST_ASSERT( buf1 != NULL ); + + /* Serialize to buffer and free live session */ + TEST_ASSERT( mbedtls_ssl_session_save( &session, buf1, len0, &len1 ) + == 0 ); + TEST_ASSERT( len0 == len1 ); + mbedtls_ssl_session_free( &session ); + + /* Restore session from serialized data */ + TEST_ASSERT( mbedtls_ssl_session_load( &session, buf1, len1 ) == 0 ); + + /* Allocate second buffer and serialize to it */ + buf2 = mbedtls_calloc( 1, len0 ); + TEST_ASSERT( buf2 != NULL ); + TEST_ASSERT( mbedtls_ssl_session_save( &session, buf2, len0, &len2 ) + == 0 ); + + /* Make sure both serialized versions are identical */ + TEST_ASSERT( len1 == len2 ); + TEST_ASSERT( memcmp( buf1, buf2, len1 ) == 0 ); + +exit: + mbedtls_ssl_session_free( &session ); + mbedtls_free( buf1 ); + mbedtls_free( buf2 ); +} + +void test_ssl_serialize_session_load_save_wrapper( void ** params ) +{ + + test_ssl_serialize_session_load_save( *( (int *) params[0] ), (char *) params[1] ); +} +void test_ssl_serialize_session_save_buf_size( int ticket_len, char *crt_file ) +{ + mbedtls_ssl_session session; + unsigned char *buf = NULL; + size_t good_len, bad_len, test_len; + + /* + * Test that session_save() fails cleanly on small buffers + */ + + mbedtls_ssl_session_init( &session ); + + /* Prepare dummy session and get serialized size */ + TEST_ASSERT( ssl_populate_session( &session, ticket_len, crt_file ) == 0 ); + TEST_ASSERT( mbedtls_ssl_session_save( &session, NULL, 0, &good_len ) + == MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + + /* Try all possible bad lengths */ + for( bad_len = 1; bad_len < good_len; bad_len++ ) + { + /* Allocate exact size so that asan/valgrind can detect any overwrite */ + mbedtls_free( buf ); + TEST_ASSERT( ( buf = mbedtls_calloc( 1, bad_len ) ) != NULL ); + TEST_ASSERT( mbedtls_ssl_session_save( &session, buf, bad_len, + &test_len ) + == MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + TEST_ASSERT( test_len == good_len ); + } + +exit: + mbedtls_ssl_session_free( &session ); + mbedtls_free( buf ); +} + +void test_ssl_serialize_session_save_buf_size_wrapper( void ** params ) +{ + + test_ssl_serialize_session_save_buf_size( *( (int *) params[0] ), (char *) params[1] ); +} +void test_ssl_serialize_session_load_buf_size( int ticket_len, char *crt_file ) +{ + mbedtls_ssl_session session; + unsigned char *good_buf = NULL, *bad_buf = NULL; + size_t good_len, bad_len; + + /* + * Test that session_load() fails cleanly on small buffers + */ + + mbedtls_ssl_session_init( &session ); + + /* Prepare serialized session data */ + TEST_ASSERT( ssl_populate_session( &session, ticket_len, crt_file ) == 0 ); + TEST_ASSERT( mbedtls_ssl_session_save( &session, NULL, 0, &good_len ) + == MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + TEST_ASSERT( ( good_buf = mbedtls_calloc( 1, good_len ) ) != NULL ); + TEST_ASSERT( mbedtls_ssl_session_save( &session, good_buf, good_len, + &good_len ) == 0 ); + mbedtls_ssl_session_free( &session ); + + /* Try all possible bad lengths */ + for( bad_len = 0; bad_len < good_len; bad_len++ ) + { + /* Allocate exact size so that asan/valgrind can detect any overread */ + mbedtls_free( bad_buf ); + bad_buf = mbedtls_calloc( 1, bad_len ? bad_len : 1 ); + TEST_ASSERT( bad_buf != NULL ); + memcpy( bad_buf, good_buf, bad_len ); + + TEST_ASSERT( mbedtls_ssl_session_load( &session, bad_buf, bad_len ) + == MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + } + +exit: + mbedtls_ssl_session_free( &session ); + mbedtls_free( good_buf ); + mbedtls_free( bad_buf ); +} + +void test_ssl_serialize_session_load_buf_size_wrapper( void ** params ) +{ + + test_ssl_serialize_session_load_buf_size( *( (int *) params[0] ), (char *) params[1] ); +} +void test_ssl_session_serialize_version_check( int corrupt_major, + int corrupt_minor, + int corrupt_patch, + int corrupt_config ) +{ + unsigned char serialized_session[ 2048 ]; + size_t serialized_session_len; + unsigned cur_byte; + mbedtls_ssl_session session; + uint8_t should_corrupt_byte[] = { corrupt_major == 1, + corrupt_minor == 1, + corrupt_patch == 1, + corrupt_config == 1, + corrupt_config == 1 }; + + mbedtls_ssl_session_init( &session ); + + /* Infer length of serialized session. */ + TEST_ASSERT( mbedtls_ssl_session_save( &session, + serialized_session, + sizeof( serialized_session ), + &serialized_session_len ) == 0 ); + + mbedtls_ssl_session_free( &session ); + + /* Without any modification, we should be able to successfully + * de-serialize the session - double-check that. */ + TEST_ASSERT( mbedtls_ssl_session_load( &session, + serialized_session, + serialized_session_len ) == 0 ); + mbedtls_ssl_session_free( &session ); + + /* Go through the bytes in the serialized session header and + * corrupt them bit-by-bit. */ + for( cur_byte = 0; cur_byte < sizeof( should_corrupt_byte ); cur_byte++ ) + { + int cur_bit; + unsigned char * const byte = &serialized_session[ cur_byte ]; + + if( should_corrupt_byte[ cur_byte ] == 0 ) + continue; + + for( cur_bit = 0; cur_bit < CHAR_BIT; cur_bit++ ) + { + unsigned char const corrupted_bit = 0x1u << cur_bit; + /* Modify a single bit in the serialized session. */ + *byte ^= corrupted_bit; + + /* Attempt to deserialize */ + TEST_ASSERT( mbedtls_ssl_session_load( &session, + serialized_session, + serialized_session_len ) == + MBEDTLS_ERR_SSL_VERSION_MISMATCH ); + + /* Undo the change */ + *byte ^= corrupted_bit; + } + } + +exit: + ; +} + +void test_ssl_session_serialize_version_check_wrapper( void ** params ) +{ + + test_ssl_session_serialize_version_check( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ) ); +} +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) +#if !defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_mbedtls_endpoint_sanity( int endpoint_type ) +{ + enum { BUFFSIZE = 1024 }; + mbedtls_endpoint ep; + int ret = -1; + + ret = mbedtls_endpoint_init( NULL, endpoint_type, MBEDTLS_PK_RSA, + NULL, NULL, NULL ); + TEST_ASSERT( MBEDTLS_ERR_SSL_BAD_INPUT_DATA == ret ); + + ret = mbedtls_endpoint_certificate_init( NULL, MBEDTLS_PK_RSA ); + TEST_ASSERT( MBEDTLS_ERR_SSL_BAD_INPUT_DATA == ret ); + + ret = mbedtls_endpoint_init( &ep, endpoint_type, MBEDTLS_PK_RSA, + NULL, NULL, NULL ); + TEST_ASSERT( ret == 0 ); + +exit: + mbedtls_endpoint_free( &ep, NULL ); +} + +void test_mbedtls_endpoint_sanity_wrapper( void ** params ) +{ + + test_mbedtls_endpoint_sanity( *( (int *) params[0] ) ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_PKCS1_V15 */ +#endif /* !MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ +#endif /* MBEDTLS_RSA_C */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) +#if !defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_move_handshake_to_state(int endpoint_type, int state, int need_pass) +{ + enum { BUFFSIZE = 1024 }; + mbedtls_endpoint base_ep, second_ep; + int ret = -1; + + ret = mbedtls_endpoint_init( &base_ep, endpoint_type, MBEDTLS_PK_RSA, + NULL, NULL, NULL ); + TEST_ASSERT( ret == 0 ); + + ret = mbedtls_endpoint_init( &second_ep, + ( endpoint_type == MBEDTLS_SSL_IS_SERVER ) ? + MBEDTLS_SSL_IS_CLIENT : MBEDTLS_SSL_IS_SERVER, + MBEDTLS_PK_RSA, NULL, NULL, NULL ); + TEST_ASSERT( ret == 0 ); + + ret = mbedtls_mock_socket_connect( &(base_ep.socket), + &(second_ep.socket), + BUFFSIZE ); + TEST_ASSERT( ret == 0 ); + + ret = mbedtls_move_handshake_to_state( &(base_ep.ssl), + &(second_ep.ssl), + state ); + if( need_pass ) + { + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( base_ep.ssl.state == state ); + } + else + { + TEST_ASSERT( ret != 0 ); + TEST_ASSERT( base_ep.ssl.state != state ); + } + +exit: + mbedtls_endpoint_free( &base_ep, NULL ); + mbedtls_endpoint_free( &second_ep, NULL ); +} + +void test_move_handshake_to_state_wrapper( void ** params ) +{ + + test_move_handshake_to_state( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_PKCS1_V15 */ +#endif /* !MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ +#endif /* MBEDTLS_RSA_C */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if !defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_handshake_version( int dtls, int client_min_version, int client_max_version, + int server_min_version, int server_max_version, + int expected_negotiated_version ) +{ + handshake_test_options options; + init_handshake_options( &options ); + + options.client_min_version = client_min_version; + options.client_max_version = client_max_version; + options.server_min_version = server_min_version; + options.server_max_version = server_max_version; + + options.expected_negotiated_version = expected_negotiated_version; + + options.dtls = dtls; + /* By default, SSLv3.0 and TLSv1.0 use 1/n-1 splitting when sending data, so + * the number of fragments will be twice as big. */ + if( expected_negotiated_version == MBEDTLS_SSL_MINOR_VERSION_0 || + expected_negotiated_version == MBEDTLS_SSL_MINOR_VERSION_1 ) + { + options.expected_cli_fragments = 2; + options.expected_srv_fragments = 2; + } + perform_handshake( &options ); + + /* The goto below is used to avoid an "unused label" warning.*/ + goto exit; +exit: + ; +} + +void test_handshake_version_wrapper( void ** params ) +{ + + test_handshake_version( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ) ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ +#endif /* MBEDTLS_RSA_C */ +#endif /* MBEDTLS_PKCS1_V15 */ +#endif /* !MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if !defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_handshake_psk_cipher( char* cipher, int pk_alg, data_t *psk_str, int dtls ) +{ + handshake_test_options options; + init_handshake_options( &options ); + + options.cipher = cipher; + options.dtls = dtls; + options.psk_str = psk_str; + options.pk_alg = pk_alg; + + perform_handshake( &options ); + + /* The goto below is used to avoid an "unused label" warning.*/ + goto exit; +exit: + ; +} + +void test_handshake_psk_cipher_wrapper( void ** params ) +{ + data_t data2 = {(uint8_t *) params[2], *( (uint32_t *) params[3] )}; + + test_handshake_psk_cipher( (char *) params[0], *( (int *) params[1] ), &data2, *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ +#endif /* MBEDTLS_PKCS1_V15 */ +#endif /* !MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if !defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_handshake_cipher( char* cipher, int pk_alg, int dtls ) +{ + test_handshake_psk_cipher( cipher, pk_alg, NULL, dtls ); + + /* The goto below is used to avoid an "unused label" warning.*/ + goto exit; +exit: + ; +} + +void test_handshake_cipher_wrapper( void ** params ) +{ + + test_handshake_cipher( (char *) params[0], *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ +#endif /* MBEDTLS_PKCS1_V15 */ +#endif /* !MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if !defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_app_data( int mfl, int cli_msg_len, int srv_msg_len, + int expected_cli_fragments, + int expected_srv_fragments, int dtls ) +{ + handshake_test_options options; + init_handshake_options( &options ); + + options.mfl = mfl; + options.cli_msg_len = cli_msg_len; + options.srv_msg_len = srv_msg_len; + options.expected_cli_fragments = expected_cli_fragments; + options.expected_srv_fragments = expected_srv_fragments; + options.dtls = dtls; + + perform_handshake( &options ); + /* The goto below is used to avoid an "unused label" warning.*/ + goto exit; +exit: + ; +} + +void test_app_data_wrapper( void ** params ) +{ + + test_app_data( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ) ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ +#endif /* MBEDTLS_RSA_C */ +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ +#endif /* MBEDTLS_PKCS1_V15 */ +#endif /* !MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if !defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_app_data_tls( int mfl, int cli_msg_len, int srv_msg_len, + int expected_cli_fragments, + int expected_srv_fragments ) +{ + test_app_data( mfl, cli_msg_len, srv_msg_len, expected_cli_fragments, + expected_srv_fragments, 0 ); + /* The goto below is used to avoid an "unused label" warning.*/ + goto exit; +exit: + ; +} + +void test_app_data_tls_wrapper( void ** params ) +{ + + test_app_data_tls( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ +#endif /* MBEDTLS_RSA_C */ +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ +#endif /* MBEDTLS_PKCS1_V15 */ +#endif /* !MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if !defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) +#if defined(MBEDTLS_SSL_PROTO_DTLS) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_app_data_dtls( int mfl, int cli_msg_len, int srv_msg_len, + int expected_cli_fragments, + int expected_srv_fragments ) +{ + test_app_data( mfl, cli_msg_len, srv_msg_len, expected_cli_fragments, + expected_srv_fragments, 1 ); + /* The goto below is used to avoid an "unused label" warning.*/ + goto exit; +exit: + ; +} + +void test_app_data_dtls_wrapper( void ** params ) +{ + + test_app_data_dtls( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_SSL_PROTO_DTLS */ +#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ +#endif /* MBEDTLS_RSA_C */ +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ +#endif /* MBEDTLS_PKCS1_V15 */ +#endif /* !MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if !defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) +#if defined(MBEDTLS_SSL_PROTO_DTLS) +#if defined(MBEDTLS_SSL_RENEGOTIATION) +#if defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_handshake_serialization( ) +{ + handshake_test_options options; + init_handshake_options( &options ); + + options.serialize = 1; + options.dtls = 1; + perform_handshake( &options ); + /* The goto below is used to avoid an "unused label" warning.*/ + goto exit; +exit: + ; +} + +void test_handshake_serialization_wrapper( void ** params ) +{ + (void)params; + + test_handshake_serialization( ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_SSL_CONTEXT_SERIALIZATION */ +#endif /* MBEDTLS_SSL_RENEGOTIATION */ +#endif /* MBEDTLS_SSL_PROTO_DTLS */ +#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ +#endif /* MBEDTLS_RSA_C */ +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ +#endif /* MBEDTLS_PKCS1_V15 */ +#endif /* !MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if !defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) +#if defined(MBEDTLS_DEBUG_C) +#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) +#if defined(MBEDTLS_CIPHER_MODE_CBC) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_handshake_fragmentation( int mfl, int expected_srv_hs_fragmentation, int expected_cli_hs_fragmentation) +{ + handshake_test_options options; + log_pattern srv_pattern, cli_pattern; + + srv_pattern.pattern = cli_pattern.pattern = "found fragmented DTLS handshake"; + srv_pattern.counter = 0; + cli_pattern.counter = 0; + + init_handshake_options( &options ); + options.dtls = 1; + options.mfl = mfl; + /* Set cipher to one using CBC so that record splitting can be tested */ + options.cipher = "TLS-DHE-RSA-WITH-AES-256-CBC-SHA256"; + options.srv_auth_mode = MBEDTLS_SSL_VERIFY_REQUIRED; + options.srv_log_obj = &srv_pattern; + options.cli_log_obj = &cli_pattern; + options.srv_log_fun = log_analyzer; + options.cli_log_fun = log_analyzer; + + perform_handshake( &options ); + + /* Test if the server received a fragmented handshake */ + if( expected_srv_hs_fragmentation ) + { + TEST_ASSERT( srv_pattern.counter >= 1 ); + } + /* Test if the client received a fragmented handshake */ + if( expected_cli_hs_fragmentation ) + { + TEST_ASSERT( cli_pattern.counter >= 1 ); + } +exit: + ; +} + +void test_handshake_fragmentation_wrapper( void ** params ) +{ + + test_handshake_fragmentation( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_CIPHER_MODE_CBC */ +#endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ +#endif /* MBEDTLS_DEBUG_C */ +#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ +#endif /* MBEDTLS_RSA_C */ +#endif /* MBEDTLS_PKCS1_V15 */ +#endif /* !MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if !defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) +#if defined(MBEDTLS_SSL_PROTO_DTLS) +#if defined(MBEDTLS_SSL_RENEGOTIATION) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_renegotiation( int legacy_renegotiation ) +{ + handshake_test_options options; + init_handshake_options( &options ); + + options.renegotiate = 1; + options.legacy_renegotiation = legacy_renegotiation; + options.dtls = 1; + + perform_handshake( &options ); + /* The goto below is used to avoid an "unused label" warning.*/ + goto exit; +exit: + ; +} + +void test_renegotiation_wrapper( void ** params ) +{ + + test_renegotiation( *( (int *) params[0] ) ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_SSL_RENEGOTIATION */ +#endif /* MBEDTLS_SSL_PROTO_DTLS */ +#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ +#endif /* MBEDTLS_RSA_C */ +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ +#endif /* MBEDTLS_PKCS1_V15 */ +#endif /* !MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if !defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_resize_buffers( int mfl, int renegotiation, int legacy_renegotiation, + int serialize, int dtls, char *cipher ) +{ + handshake_test_options options; + init_handshake_options( &options ); + + options.mfl = mfl; + options.cipher = cipher; + options.renegotiate = renegotiation; + options.legacy_renegotiation = legacy_renegotiation; + options.serialize = serialize; + options.dtls = dtls; + options.resize_buffers = 1; + + perform_handshake( &options ); + /* The goto below is used to avoid an "unused label" warning.*/ + goto exit; +exit: + ; +} + +void test_resize_buffers_wrapper( void ** params ) +{ + + test_resize_buffers( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), (char *) params[5] ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ +#endif /* MBEDTLS_RSA_C */ +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ +#endif /* MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH */ +#endif /* MBEDTLS_PKCS1_V15 */ +#endif /* !MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if !defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) +#if defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION) +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) +#if defined(MBEDTLS_SSL_PROTO_DTLS) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_resize_buffers_serialize_mfl( int mfl ) +{ + test_resize_buffers( mfl, 0, MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION, 1, 1, + (char *) "" ); + + /* The goto below is used to avoid an "unused label" warning.*/ + goto exit; +exit: + ; +} + +void test_resize_buffers_serialize_mfl_wrapper( void ** params ) +{ + + test_resize_buffers_serialize_mfl( *( (int *) params[0] ) ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_SSL_PROTO_DTLS */ +#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ +#endif /* MBEDTLS_RSA_C */ +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ +#endif /* MBEDTLS_SSL_CONTEXT_SERIALIZATION */ +#endif /* MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH */ +#endif /* MBEDTLS_PKCS1_V15 */ +#endif /* !MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if !defined(MBEDTLS_USE_PSA_CRYPTO) +#if defined(MBEDTLS_PKCS1_V15) +#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) +#if defined(MBEDTLS_SSL_RENEGOTIATION) +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) +#if defined(MBEDTLS_RSA_C) +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) +#if defined(MBEDTLS_ENTROPY_C) +#if defined(MBEDTLS_CTR_DRBG_C) +void test_resize_buffers_renegotiate_mfl( int mfl, int legacy_renegotiation, + char *cipher ) +{ + test_resize_buffers( mfl, 1, legacy_renegotiation, 0, 1, cipher ); + + /* The goto below is used to avoid an "unused label" warning.*/ + goto exit; +exit: + ; +} + +void test_resize_buffers_renegotiate_mfl_wrapper( void ** params ) +{ + + test_resize_buffers_renegotiate_mfl( *( (int *) params[0] ), *( (int *) params[1] ), (char *) params[2] ); +} +#endif /* MBEDTLS_CTR_DRBG_C */ +#endif /* MBEDTLS_ENTROPY_C */ +#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ +#endif /* MBEDTLS_RSA_C */ +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ +#endif /* MBEDTLS_SSL_RENEGOTIATION */ +#endif /* MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH */ +#endif /* MBEDTLS_PKCS1_V15 */ +#endif /* !MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_SSL_SOME_SUITES_USE_TLS_CBC) +#if defined(MBEDTLS_TEST_HOOKS) +void test_ssl_cf_hmac( int hash ) +{ + /* + * Test the function mbedtls_ssl_cf_hmac() against a reference + * implementation. + */ + mbedtls_md_context_t ctx, ref_ctx; + const mbedtls_md_info_t *md_info; + size_t out_len, block_size; + size_t min_in_len, in_len, max_in_len, i; + /* TLS additional data is 13 bytes (hence the "lucky 13" name) */ + unsigned char add_data[13]; + unsigned char ref_out[MBEDTLS_MD_MAX_SIZE]; + unsigned char *data = NULL; + unsigned char *out = NULL; + unsigned char rec_num = 0; + + mbedtls_md_init( &ctx ); + mbedtls_md_init( &ref_ctx ); + + md_info = mbedtls_md_info_from_type( hash ); + TEST_ASSERT( md_info != NULL ); + out_len = mbedtls_md_get_size( md_info ); + TEST_ASSERT( out_len != 0 ); + block_size = hash == MBEDTLS_MD_SHA384 ? 128 : 64; + + /* Use allocated out buffer to catch overwrites */ + ASSERT_ALLOC( out, out_len ); + + /* Set up contexts with the given hash and a dummy key */ + TEST_EQUAL( 0, mbedtls_md_setup( &ctx, md_info, 1 ) ); + TEST_EQUAL( 0, mbedtls_md_setup( &ref_ctx, md_info, 1 ) ); + memset( ref_out, 42, sizeof( ref_out ) ); + TEST_EQUAL( 0, mbedtls_md_hmac_starts( &ctx, ref_out, out_len ) ); + TEST_EQUAL( 0, mbedtls_md_hmac_starts( &ref_ctx, ref_out, out_len ) ); + memset( ref_out, 0, sizeof( ref_out ) ); + + /* + * Test all possible lengths up to a point. The difference between + * max_in_len and min_in_len is at most 255, and make sure they both vary + * by at least one block size. + */ + for( max_in_len = 0; max_in_len <= 255 + block_size; max_in_len++ ) + { + mbedtls_test_set_step( max_in_len * 10000 ); + + /* Use allocated in buffer to catch overreads */ + ASSERT_ALLOC( data, max_in_len ); + + min_in_len = max_in_len > 255 ? max_in_len - 255 : 0; + for( in_len = min_in_len; in_len <= max_in_len; in_len++ ) + { + mbedtls_test_set_step( max_in_len * 10000 + in_len ); + + /* Set up dummy data and add_data */ + rec_num++; + memset( add_data, rec_num, sizeof( add_data ) ); + for( i = 0; i < in_len; i++ ) + data[i] = ( i & 0xff ) ^ rec_num; + + /* Get the function's result */ + TEST_CF_SECRET( &in_len, sizeof( in_len ) ); + TEST_EQUAL( 0, mbedtls_ssl_cf_hmac( &ctx, add_data, sizeof( add_data ), + data, in_len, + min_in_len, max_in_len, + out ) ); + TEST_CF_PUBLIC( &in_len, sizeof( in_len ) ); + TEST_CF_PUBLIC( out, out_len ); + + /* Compute the reference result */ + TEST_EQUAL( 0, mbedtls_md_hmac_update( &ref_ctx, add_data, + sizeof( add_data ) ) ); + TEST_EQUAL( 0, mbedtls_md_hmac_update( &ref_ctx, data, in_len ) ); + TEST_EQUAL( 0, mbedtls_md_hmac_finish( &ref_ctx, ref_out ) ); + TEST_EQUAL( 0, mbedtls_md_hmac_reset( &ref_ctx ) ); + + /* Compare */ + ASSERT_COMPARE( out, out_len, ref_out, out_len ); + } + + mbedtls_free( data ); + data = NULL; + } + +exit: + mbedtls_md_free( &ref_ctx ); + mbedtls_md_free( &ctx ); + + mbedtls_free( data ); + mbedtls_free( out ); +} + +void test_ssl_cf_hmac_wrapper( void ** params ) +{ + + test_ssl_cf_hmac( *( (int *) params[0] ) ); +} +#endif /* MBEDTLS_TEST_HOOKS */ +#endif /* MBEDTLS_SSL_SOME_SUITES_USE_TLS_CBC */ +#if defined(MBEDTLS_SSL_SOME_SUITES_USE_TLS_CBC) +#if defined(MBEDTLS_TEST_HOOKS) +void test_ssl_cf_memcpy_offset( int offset_min, int offset_max, int len ) +{ + unsigned char *dst = NULL; + unsigned char *src = NULL; + size_t src_len = offset_max + len; + size_t secret; + + ASSERT_ALLOC( dst, len ); + ASSERT_ALLOC( src, src_len ); + + /* Fill src in a way that we can detect if we copied the right bytes */ + mbedtls_test_rnd_std_rand( NULL, src, src_len ); + + for( secret = offset_min; secret <= (size_t) offset_max; secret++ ) + { + mbedtls_test_set_step( (int) secret ); + + TEST_CF_SECRET( &secret, sizeof( secret ) ); + mbedtls_ssl_cf_memcpy_offset( dst, src, secret, + offset_min, offset_max, len ); + TEST_CF_PUBLIC( &secret, sizeof( secret ) ); + TEST_CF_PUBLIC( dst, len ); + + ASSERT_COMPARE( dst, len, src + secret, len ); + } + +exit: + mbedtls_free( dst ); + mbedtls_free( src ); +} + +void test_ssl_cf_memcpy_offset_wrapper( void ** params ) +{ + + test_ssl_cf_memcpy_offset( *( (int *) params[0] ), *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_TEST_HOOKS */ +#endif /* MBEDTLS_SSL_SOME_SUITES_USE_TLS_CBC */ +#endif /* MBEDTLS_SSL_TLS_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_SSL_TLS_C) + + case 0: + { + *out_value = MBEDTLS_SSL_IS_CLIENT; + } + break; + case 1: + { + *out_value = MBEDTLS_SSL_IS_SERVER; + } + break; + case 2: + { + *out_value = MBEDTLS_SSL_HELLO_REQUEST; + } + break; + case 3: + { + *out_value = MBEDTLS_SSL_CLIENT_HELLO; + } + break; + case 4: + { + *out_value = MBEDTLS_SSL_SERVER_HELLO; + } + break; + case 5: + { + *out_value = MBEDTLS_SSL_SERVER_CERTIFICATE; + } + break; + case 6: + { + *out_value = MBEDTLS_SSL_SERVER_KEY_EXCHANGE; + } + break; + case 7: + { + *out_value = MBEDTLS_SSL_CERTIFICATE_REQUEST; + } + break; + case 8: + { + *out_value = MBEDTLS_SSL_SERVER_HELLO_DONE; + } + break; + case 9: + { + *out_value = MBEDTLS_SSL_CLIENT_CERTIFICATE; + } + break; + case 10: + { + *out_value = MBEDTLS_SSL_CLIENT_KEY_EXCHANGE; + } + break; + case 11: + { + *out_value = MBEDTLS_SSL_CERTIFICATE_VERIFY; + } + break; + case 12: + { + *out_value = MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC; + } + break; + case 13: + { + *out_value = MBEDTLS_SSL_CLIENT_FINISHED; + } + break; + case 14: + { + *out_value = MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC; + } + break; + case 15: + { + *out_value = MBEDTLS_SSL_SERVER_FINISHED; + } + break; + case 16: + { + *out_value = MBEDTLS_SSL_FLUSH_BUFFERS; + } + break; + case 17: + { + *out_value = MBEDTLS_SSL_HANDSHAKE_WRAPUP; + } + break; + case 18: + { + *out_value = MBEDTLS_SSL_HANDSHAKE_OVER; + } + break; + case 19: + { + *out_value = MBEDTLS_SSL_SERVER_HELLO_VERIFY_REQUEST_SENT; + } + break; + case 20: + { + *out_value = MBEDTLS_SSL_SERVER_NEW_SESSION_TICKET; + } + break; + case 21: + { + *out_value = MBEDTLS_SSL_MINOR_VERSION_0; + } + break; + case 22: + { + *out_value = MBEDTLS_SSL_MINOR_VERSION_1; + } + break; + case 23: + { + *out_value = MBEDTLS_SSL_MINOR_VERSION_2; + } + break; + case 24: + { + *out_value = MBEDTLS_SSL_MINOR_VERSION_3; + } + break; + case 25: + { + *out_value = MBEDTLS_PK_RSA; + } + break; + case 26: + { + *out_value = MBEDTLS_PK_ECDSA; + } + break; + case 27: + { + *out_value = MBEDTLS_SSL_MAX_FRAG_LEN_512; + } + break; + case 28: + { + *out_value = MBEDTLS_SSL_MAX_FRAG_LEN_1024; + } + break; + case 29: + { + *out_value = TEST_SSL_MINOR_VERSION_NONE; + } + break; + case 30: + { + *out_value = MBEDTLS_SSL_MAX_FRAG_LEN_2048; + } + break; + case 31: + { + *out_value = MBEDTLS_SSL_MAX_FRAG_LEN_4096; + } + break; + case 32: + { + *out_value = MBEDTLS_SSL_MAX_FRAG_LEN_NONE; + } + break; + case 33: + { + *out_value = MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION; + } + break; + case 34: + { + *out_value = MBEDTLS_SSL_LEGACY_ALLOW_RENEGOTIATION; + } + break; + case 35: + { + *out_value = MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE; + } + break; + case 36: + { + *out_value = -1; + } + break; + case 37: + { + *out_value = MBEDTLS_CIPHER_AES_128_CBC; + } + break; + case 38: + { + *out_value = MBEDTLS_MD_SHA384; + } + break; + case 39: + { + *out_value = MBEDTLS_MD_SHA256; + } + break; + case 40: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 41: + { + *out_value = MBEDTLS_MD_MD5; + } + break; + case 42: + { + *out_value = MBEDTLS_CIPHER_AES_192_CBC; + } + break; + case 43: + { + *out_value = MBEDTLS_CIPHER_AES_256_CBC; + } + break; + case 44: + { + *out_value = MBEDTLS_CIPHER_ARIA_128_CBC; + } + break; + case 45: + { + *out_value = MBEDTLS_CIPHER_ARIA_192_CBC; + } + break; + case 46: + { + *out_value = MBEDTLS_CIPHER_ARIA_256_CBC; + } + break; + case 47: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_128_CBC; + } + break; + case 48: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_192_CBC; + } + break; + case 49: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_256_CBC; + } + break; + case 50: + { + *out_value = MBEDTLS_CIPHER_BLOWFISH_CBC; + } + break; + case 51: + { + *out_value = MBEDTLS_CIPHER_AES_128_GCM; + } + break; + case 52: + { + *out_value = MBEDTLS_SSL_MINOR_VERSION_4; + } + break; + case 53: + { + *out_value = MBEDTLS_CIPHER_AES_192_GCM; + } + break; + case 54: + { + *out_value = MBEDTLS_CIPHER_AES_256_GCM; + } + break; + case 55: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_128_GCM; + } + break; + case 56: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_192_GCM; + } + break; + case 57: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_256_GCM; + } + break; + case 58: + { + *out_value = MBEDTLS_CIPHER_AES_128_CCM; + } + break; + case 59: + { + *out_value = MBEDTLS_CIPHER_AES_192_CCM; + } + break; + case 60: + { + *out_value = MBEDTLS_CIPHER_AES_256_CCM; + } + break; + case 61: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_128_CCM; + } + break; + case 62: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_192_CCM; + } + break; + case 63: + { + *out_value = MBEDTLS_CIPHER_CAMELLIA_256_CCM; + } + break; + case 64: + { + *out_value = MBEDTLS_CIPHER_ARC4_128; + } + break; + case 65: + { + *out_value = MBEDTLS_CIPHER_NULL; + } + break; + case 66: + { + *out_value = MBEDTLS_CIPHER_CHACHA20_POLY1305; + } + break; + case 67: + { + *out_value = -2; + } + break; + case 68: + { + *out_value = MBEDTLS_CIPHER_DES_EDE3_CBC; + } + break; + case 69: + { + *out_value = tls1_3_label_key; + } + break; + case 70: + { + *out_value = tls1_3_label_iv; + } + break; + case 71: + { + *out_value = tls1_3_label_finished; + } + break; + case 72: + { + *out_value = tls1_3_label_resumption; + } + break; + case 73: + { + *out_value = tls1_3_label_derived; + } + break; + case 74: + { + *out_value = MBEDTLS_SSL_TLS1_3_CONTEXT_UNHASHED; + } + break; + case 75: + { + *out_value = tls1_3_label_s_ap_traffic; + } + break; + case 76: + { + *out_value = MBEDTLS_SSL_TLS1_3_CONTEXT_HASHED; + } + break; + case 77: + { + *out_value = tls1_3_label_c_e_traffic; + } + break; + case 78: + { + *out_value = tls1_3_label_e_exp_master; + } + break; + case 79: + { + *out_value = tls1_3_label_c_hs_traffic; + } + break; + case 80: + { + *out_value = tls1_3_label_s_hs_traffic; + } + break; + case 81: + { + *out_value = tls1_3_label_c_ap_traffic; + } + break; + case 82: + { + *out_value = tls1_3_label_exp_master; + } + break; + case 83: + { + *out_value = tls1_3_label_res_master; + } + break; + case 84: + { + *out_value = MBEDTLS_SSL_TLS_PRF_NONE; + } + break; + case 85: + { + *out_value = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE; + } + break; + case 86: + { + *out_value = MBEDTLS_SSL_TLS_PRF_SSL3; + } + break; + case 87: + { + *out_value = MBEDTLS_SSL_TLS_PRF_TLS1; + } + break; + case 88: + { + *out_value = MBEDTLS_SSL_TLS_PRF_SHA384; + } + break; + case 89: + { + *out_value = MBEDTLS_SSL_TLS_PRF_SHA256; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_SSL_TLS_C) + + case 0: + { +#if defined(MBEDTLS_SSL_PROTO_SSL3) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_RSA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_SSL_PROTO_TLS1) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_CIPHER_MODE_CBC) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 5: + { +#if defined(MBEDTLS_SSL_PROTO_TLS1_1) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 6: + { +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 7: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 8: + { +#if !defined(MBEDTLS_SHA512_NO_SHA384) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 9: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 10: + { +#if defined(MBEDTLS_GCM_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 11: + { +#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 12: + { +#if defined(MBEDTLS_CCM_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 13: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 14: + { +#if defined(MBEDTLS_ECDSA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 15: + { +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 16: + { +#if defined(MBEDTLS_CAMELLIA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 17: + { +#if defined(MBEDTLS_SSL_PROTO_DTLS) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 18: + { +#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 19: + { +#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 20: + { +#if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 21: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 22: + { +#if defined(MBEDTLS_MD5_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 23: + { +#if defined(MBEDTLS_ARIA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 24: + { +#if defined(MBEDTLS_BLOWFISH_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 25: + { +#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 26: + { +#if defined(MBEDTLS_ARC4_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 27: + { +#if defined(MBEDTLS_CIPHER_NULL_CIPHER) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 28: + { +#if defined(MBEDTLS_CHACHAPOLY_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 29: + { +#if defined(MBEDTLS_DES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 30: + { +#if !defined(MBEDTLS_SSL_PROTO_SSL3) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 31: + { +#if !defined(MBEDTLS_SSL_PROTO_TLS1) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 32: + { +#if !defined(MBEDTLS_SSL_PROTO_TLS1_1) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 33: + { +#if !defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 34: + { +#if !defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 35: + { +#if defined(MBEDTLS_SSL_SESSION_TICKETS) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 36: + { +#if defined(MBEDTLS_SSL_CLI_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 37: + { +#if defined(MBEDTLS_X509_USE_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 38: + { +#if defined(MBEDTLS_PEM_PARSE_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + + case 39: + { +#if defined(MBEDTLS_FS_IO) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + + case 40: + { +#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + + case 41: + { +#if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + +#endif + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_test_callback_buffer_sanity_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_test_callback_buffer_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_mock_sanity_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_mock_tcp_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_mock_tcp_interleaving_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_message_queue_sanity_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_message_queue_basic_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_message_queue_overflow_underflow_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_message_queue_interleaved_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_message_queue_insufficient_buffer_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_message_mock_uninitialized_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_message_mock_basic_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_message_mock_queue_overflow_underflow_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_message_mock_socket_overflow_wrapper, +#else + NULL, +#endif +/* Function Id: 14 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_message_mock_truncated_wrapper, +#else + NULL, +#endif +/* Function Id: 15 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_message_mock_socket_read_error_wrapper, +#else + NULL, +#endif +/* Function Id: 16 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_message_mock_interleaved_one_way_wrapper, +#else + NULL, +#endif +/* Function Id: 17 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_message_mock_interleaved_two_ways_wrapper, +#else + NULL, +#endif +/* Function Id: 18 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) + test_ssl_dtls_replay_wrapper, +#else + NULL, +#endif +/* Function Id: 19 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_X509_CRT_PARSE_C) + test_ssl_set_hostname_twice_wrapper, +#else + NULL, +#endif +/* Function Id: 20 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_crypt_record_wrapper, +#else + NULL, +#endif +/* Function Id: 21 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_crypt_record_small_wrapper, +#else + NULL, +#endif +/* Function Id: 22 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_CIPHER_MODE_CBC) && defined(MBEDTLS_AES_C) && defined(MBEDTLS_SSL_PROTO_TLS1_2) + test_ssl_decrypt_non_etm_cbc_wrapper, +#else + NULL, +#endif +/* Function Id: 23 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) + test_ssl_tls1_3_hkdf_expand_label_wrapper, +#else + NULL, +#endif +/* Function Id: 24 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) + test_ssl_tls1_3_traffic_key_generation_wrapper, +#else + NULL, +#endif +/* Function Id: 25 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) + test_ssl_tls1_3_derive_secret_wrapper, +#else + NULL, +#endif +/* Function Id: 26 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) + test_ssl_tls1_3_key_evolution_wrapper, +#else + NULL, +#endif +/* Function Id: 27 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_tls_prf_wrapper, +#else + NULL, +#endif +/* Function Id: 28 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_serialize_session_save_load_wrapper, +#else + NULL, +#endif +/* Function Id: 29 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_serialize_session_load_save_wrapper, +#else + NULL, +#endif +/* Function Id: 30 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_serialize_session_save_buf_size_wrapper, +#else + NULL, +#endif +/* Function Id: 31 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_serialize_session_load_buf_size_wrapper, +#else + NULL, +#endif +/* Function Id: 32 */ + +#if defined(MBEDTLS_SSL_TLS_C) + test_ssl_session_serialize_version_check_wrapper, +#else + NULL, +#endif +/* Function Id: 33 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) && !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_CTR_DRBG_C) + test_mbedtls_endpoint_sanity_wrapper, +#else + NULL, +#endif +/* Function Id: 34 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) && !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_CTR_DRBG_C) + test_move_handshake_to_state_wrapper, +#else + NULL, +#endif +/* Function Id: 35 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_CTR_DRBG_C) + test_handshake_version_wrapper, +#else + NULL, +#endif +/* Function Id: 36 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_SSL_PROTO_TLS1_2) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_CTR_DRBG_C) + test_handshake_psk_cipher_wrapper, +#else + NULL, +#endif +/* Function Id: 37 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_SSL_PROTO_TLS1_2) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_CTR_DRBG_C) + test_handshake_cipher_wrapper, +#else + NULL, +#endif +/* Function Id: 38 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_SSL_PROTO_TLS1_2) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_CTR_DRBG_C) + test_app_data_wrapper, +#else + NULL, +#endif +/* Function Id: 39 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_SSL_PROTO_TLS1_2) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_CTR_DRBG_C) + test_app_data_tls_wrapper, +#else + NULL, +#endif +/* Function Id: 40 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_SSL_PROTO_TLS1_2) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) && defined(MBEDTLS_SSL_PROTO_DTLS) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_CTR_DRBG_C) + test_app_data_dtls_wrapper, +#else + NULL, +#endif +/* Function Id: 41 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_SSL_PROTO_TLS1_2) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) && defined(MBEDTLS_SSL_PROTO_DTLS) && defined(MBEDTLS_SSL_RENEGOTIATION) && defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_CTR_DRBG_C) + test_handshake_serialization_wrapper, +#else + NULL, +#endif +/* Function Id: 42 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) && defined(MBEDTLS_DEBUG_C) && defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) && defined(MBEDTLS_CIPHER_MODE_CBC) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_CTR_DRBG_C) + test_handshake_fragmentation_wrapper, +#else + NULL, +#endif +/* Function Id: 43 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_SSL_PROTO_TLS1_2) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) && defined(MBEDTLS_SSL_PROTO_DTLS) && defined(MBEDTLS_SSL_RENEGOTIATION) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_CTR_DRBG_C) + test_renegotiation_wrapper, +#else + NULL, +#endif +/* Function Id: 44 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) && defined(MBEDTLS_SSL_PROTO_TLS1_2) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_CTR_DRBG_C) + test_resize_buffers_wrapper, +#else + NULL, +#endif +/* Function Id: 45 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) && defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION) && defined(MBEDTLS_SSL_PROTO_TLS1_2) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) && defined(MBEDTLS_SSL_PROTO_DTLS) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_CTR_DRBG_C) + test_resize_buffers_serialize_mfl_wrapper, +#else + NULL, +#endif +/* Function Id: 46 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && !defined(MBEDTLS_USE_PSA_CRYPTO) && defined(MBEDTLS_PKCS1_V15) && defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) && defined(MBEDTLS_SSL_RENEGOTIATION) && defined(MBEDTLS_SSL_PROTO_TLS1_2) && defined(MBEDTLS_RSA_C) && defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) && defined(MBEDTLS_ENTROPY_C) && defined(MBEDTLS_CTR_DRBG_C) + test_resize_buffers_renegotiate_mfl_wrapper, +#else + NULL, +#endif +/* Function Id: 47 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_SSL_SOME_SUITES_USE_TLS_CBC) && defined(MBEDTLS_TEST_HOOKS) + test_ssl_cf_hmac_wrapper, +#else + NULL, +#endif +/* Function Id: 48 */ + +#if defined(MBEDTLS_SSL_TLS_C) && defined(MBEDTLS_SSL_SOME_SUITES_USE_TLS_CBC) && defined(MBEDTLS_TEST_HOOKS) + test_ssl_cf_memcpy_offset_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_ssl.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_ssl.datax b/third_party/mbedtls/test/test_suite_ssl.datax new file mode 100644 index 000000000..027fc4185 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_ssl.datax @@ -0,0 +1,10634 @@ +Test calback buffer sanity +0 + +Callback buffer test: Exercise simple write/read +1:int:50:int:25:int:25:int:25:int:25:int:0:int:0:int:0:int:0 + +Callback buffer test: Filling up the buffer +1:int:50:int:50:int:50:int:50:int:50:int:0:int:0:int:0:int:0 + +Callback buffer test: Filling up the buffer in two steps +1:int:50:int:20:int:20:int:0:int:0:int:30:int:30:int:50:int:50 + +Callback buffer test: Reading out the buffer in two steps +1:int:50:int:50:int:50:int:30:int:30:int:0:int:0:int:20:int:20 + +Callback buffer test: Data wraps in buffer +1:int:50:int:45:int:45:int:10:int:10:int:10:int:10:int:45:int:45 + +Callback buffer test: Data starts at the end +1:int:50:int:50:int:50:int:49:int:49:int:10:int:10:int:11:int:11 + +Callback buffer test: Can write less than requested +1:int:50:int:75:int:50:int:30:int:30:int:25:int:25:int:45:int:45 + +Callback buffer test: Can read less than requested +1:int:50:int:25:int:25:int:30:int:25:int:5:int:5:int:5:int:5 + +Callback buffer test: Writing to full buffer +1:int:50:int:50:int:50:int:0:int:0:int:10:int:0:int:60:int:50 + +Callback buffer test: Reading from empty buffer +1:int:50:int:0:int:0:int:10:int:0:int:0:int:0:int:0:int:0 + +Test mock socket sanity +2 + +Test mock blocking TCP connection +3:int:1 + +Test mock non-blocking TCP connection +3:int:0 + +Test mock blocking TCP connection (interleaving) +4:int:1 + +Test mock non-blocking TCP connection (interleaving) +4:int:0 + +Message queue - sanity +5 + +Message queue - basic test +6 + +Message queue - overflow/underflow +7 + +Message queue - interleaved +8 + +Message queue - insufficient buffer +9 + +Message transport mock - uninitialized structures +10 + +Message transport mock - basic test +11 + +Message transport mock - queue overflow/underflow +12 + +Message transport mock - socket overflow +13 + +Message transport mock - truncated message +14 + +Message transport mock - socket read error +15 + +Message transport mock - one-way interleaved sends/reads +16 + +Message transport mock - two-way interleaved sends/reads +17 + +Test mbedtls_endpoint sanity for the client +33:exp:0 + +Test mbedtls_endpoint sanity for the server +33:exp:1 + +Test moving clients handshake to state: HELLO_REQUEST +34:exp:0:exp:2:int:1 + +Test moving clients handshake to state: CLIENT_HELLO +34:exp:0:exp:3:int:1 + +Test moving clients handshake to state: SERVER_HELLO +34:exp:0:exp:4:int:1 + +Test moving clients handshake to state: SERVER_CERTIFICATE +34:exp:0:exp:5:int:1 + +Test moving clients handshake to state: SERVER_KEY_EXCHANGE +34:exp:0:exp:6:int:1 + +Test moving clients handshake to state: CERTIFICATE_REQUEST +34:exp:0:exp:7:int:1 + +Test moving clients handshake to state: SERVER_HELLO_DONE +34:exp:0:exp:8:int:1 + +Test moving clients handshake to state: CLIENT_CERTIFICATE +34:exp:0:exp:9:int:1 + +Test moving clients handshake to state: CLIENT_KEY_EXCHANGE +34:exp:0:exp:10:int:1 + +Test moving clients handshake to state: CERTIFICATE_VERIFY +34:exp:0:exp:11:int:1 + +Test moving clients handshake to state: CLIENT_CHANGE_CIPHER_SPEC +34:exp:0:exp:12:int:1 + +Test moving clients handshake to state: CLIENT_FINISHED +34:exp:0:exp:13:int:1 + +Test moving clients handshake to state: SERVER_CHANGE_CIPHER_SPEC +34:exp:0:exp:14:int:1 + +Test moving clients handshake to state: SERVER_FINISHED +34:exp:0:exp:15:int:1 + +Test moving clients handshake to state: FLUSH_BUFFERS +34:exp:0:exp:16:int:1 + +Test moving clients handshake to state: HANDSHAKE_WRAPUP +34:exp:0:exp:17:int:1 + +Test moving clients handshake to state: HANDSHAKE_OVER +34:exp:0:exp:18:int:1 + +Test moving servers handshake to state: HELLO_REQUEST +34:exp:1:exp:2:int:1 + +Test moving servers handshake to state: CLIENT_HELLO +34:exp:1:exp:3:int:1 + +Test moving servers handshake to state: SERVER_HELLO +34:exp:1:exp:4:int:1 + +Test moving servers handshake to state: SERVER_CERTIFICATE +34:exp:1:exp:5:int:1 + +Test moving servers handshake to state: SERVER_KEY_EXCHANGE +34:exp:1:exp:6:int:1 + +Test moving servers handshake to state: CERTIFICATE_REQUEST +34:exp:1:exp:7:int:1 + +Test moving servers handshake to state: SERVER_HELLO_DONE +34:exp:1:exp:8:int:1 + +Test moving servers handshake to state: CLIENT_CERTIFICATE +34:exp:1:exp:9:int:1 + +Test moving servers handshake to state: CLIENT_KEY_EXCHANGE +34:exp:1:exp:10:int:1 + +Test moving servers handshake to state: CERTIFICATE_VERIFY +34:exp:1:exp:11:int:1 + +Test moving servers handshake to state: CLIENT_CHANGE_CIPHER_SPEC +34:exp:1:exp:12:int:1 + +Test moving servers handshake to state: CLIENT_FINISHED +34:exp:1:exp:13:int:1 + +Test moving servers handshake to state: SERVER_CHANGE_CIPHER_SPEC +34:exp:1:exp:14:int:1 + +Test moving servers handshake to state: SERVER_FINISHED +34:exp:1:exp:15:int:1 + +Test moving servers handshake to state: FLUSH_BUFFERS +34:exp:1:exp:16:int:1 + +Test moving servers handshake to state: HANDSHAKE_WRAPUP +34:exp:1:exp:17:int:1 + +Test moving servers handshake to state: HANDSHAKE_OVER +34:exp:1:exp:18:int:1 + +Negative test moving clients ssl to state: VERIFY_REQUEST_SENT +34:exp:0:exp:19:int:0 + +Negative test moving servers ssl to state: NEW_SESSION_TICKET +34:exp:1:exp:20:int:0 + +Handshake, SSL3 +depends_on:0:1:2 +35:int:0:exp:21:exp:21:exp:21:exp:21:exp:21 + +Handshake, tls1 +depends_on:3:4 +35:int:0:exp:22:exp:22:exp:22:exp:22:exp:22 + +Handshake, tls1_1 +depends_on:5:4 +35:int:0:exp:23:exp:23:exp:23:exp:23:exp:23 + +Handshake, tls1_2 +depends_on:6 +35:int:0:exp:24:exp:24:exp:24:exp:24:exp:24 + +Handshake, ECDHE-RSA-WITH-AES-256-GCM-SHA384 +depends_on:7:8:9:10:1:2:11 +37:char*:"TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384":exp:25:int:0 + +Handshake, RSA-WITH-AES-128-CCM +depends_on:12:9:1:2 +37:char*:"TLS-RSA-WITH-AES-128-CCM":exp:25:int:0 + +Handshake, DHE-RSA-WITH-AES-256-CBC-SHA256 +depends_on:4:9:13:1:2:40 +37:char*:"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256":exp:25:int:0 + +Handshake, ECDHE-ECDSA-WITH-AES-256-CCM +depends_on:9:12:14:15:2 +37:char*:"TLS-ECDHE-ECDSA-WITH-AES-256-CCM":exp:26:int:0 + +Handshake, ECDH-ECDSA-WITH-CAMELLIA-256-CBC-SHA384 +depends_on:7:8:4:14:15:2:16 +37:char*:"TLS-ECDH-ECDSA-WITH-CAMELLIA-256-CBC-SHA384":exp:26:int:0 + +Handshake, PSK-WITH-AES-128-CBC-SHA +depends_on:9:4:1:2:41 +36:char*:"TLS-PSK-WITH-AES-128-CBC-SHA":exp:25:hex:"abc123":int:0 + +DTLS Handshake, tls1_1 +depends_on:5:4:17 +35:int:1:exp:23:exp:23:exp:23:exp:23:exp:23 + +DTLS Handshake, tls1_2 +depends_on:6:17 +35:int:1:exp:24:exp:24:exp:24:exp:24:exp:24 + +DTLS Handshake, ECDHE-RSA-WITH-AES-256-GCM-SHA384 +depends_on:7:8:9:10:1:2:11:17 +37:char*:"TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384":exp:25:int:1 + +DTLS Handshake, RSA-WITH-AES-128-CCM +depends_on:12:9:1:2:17 +37:char*:"TLS-RSA-WITH-AES-128-CCM":exp:25:int:1 + +DTLS Handshake, DHE-RSA-WITH-AES-256-CBC-SHA256 +depends_on:4:9:13:1:2:17:40 +37:char*:"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256":exp:25:int:1 + +DTLS Handshake, ECDHE-ECDSA-WITH-AES-256-CCM +depends_on:9:12:14:15:2:17 +37:char*:"TLS-ECDHE-ECDSA-WITH-AES-256-CCM":exp:26:int:1 + +DTLS Handshake, ECDH-ECDSA-WITH-CAMELLIA-256-CBC-SHA384 +depends_on:7:8:4:14:15:2:16:17 +37:char*:"TLS-ECDH-ECDSA-WITH-CAMELLIA-256-CBC-SHA384":exp:26:int:1 + +DTLS Handshake, PSK-WITH-AES-128-CBC-SHA +depends_on:9:4:1:2:17:41 +36:char*:"TLS-PSK-WITH-AES-128-CBC-SHA":exp:25:hex:"abc123":int:1 + +DTLS Handshake with serialization, tls1_2 +depends_on:1:2:17 +41 + +DTLS Handshake fragmentation, MFL=512 +depends_on:1:2:17 +42:exp:27:int:1:int:1 + +DTLS Handshake fragmentation, MFL=1024 +depends_on:1:2:17 +42:exp:28:int:0:int:1 + +Handshake min/max version check, all -> 1.2 +depends_on:6 +35:int:0:exp:29:exp:29:exp:29:exp:29:exp:24 + +Handshake min/max version check, cli max 1.1 -> 1.1 +depends_on:5:4 +35:int:0:exp:29:exp:22:exp:29:exp:29:exp:22 + +Handshake min/max version check, srv max 1.1 -> 1.1 +depends_on:5:4 +35:int:0:exp:29:exp:29:exp:29:exp:22:exp:22 + +Handshake min/max version check, cli+srv max 1.1 -> 1.1 +depends_on:5:4 +35:int:0:exp:29:exp:22:exp:29:exp:22:exp:22 + +Handshake min/max version check, cli max 1.1, srv min 1.1 -> 1.1 +depends_on:5:4 +35:int:0:exp:29:exp:22:exp:22:exp:29:exp:22 + +Handshake min/max version check, cli min 1.1, srv max 1.1 -> 1.1 +depends_on:5:4 +35:int:0:exp:22:exp:29:exp:29:exp:22:exp:22 + +Handshake min/max version check, cli min 1.2, srv max 1.1 -> fail +depends_on:5:4:6 +35:int:0:exp:23:exp:29:exp:29:exp:22:exp:29 + +Handshake min/max version check, srv min 1.2, cli max 1.1 -> fail +depends_on:5:4:6 +35:int:0:exp:29:exp:22:exp:23:exp:29:exp:29 + +Sending app data via TLS, MFL=512 without fragmentation +depends_on:18 +39:exp:27:int:400:int:512:int:1:int:1 + +Sending app data via TLS, MFL=512 with fragmentation +depends_on:18 +39:exp:27:int:513:int:1536:int:2:int:3 + +Sending app data via TLS, MFL=1024 without fragmentation +depends_on:18 +39:exp:28:int:1000:int:1024:int:1:int:1 + +Sending app data via TLS, MFL=1024 with fragmentation +depends_on:18 +39:exp:28:int:1025:int:5120:int:2:int:5 + +Sending app data via TLS, MFL=2048 without fragmentation +depends_on:18 +39:exp:30:int:2000:int:2048:int:1:int:1 + +Sending app data via TLS, MFL=2048 with fragmentation +depends_on:18 +39:exp:30:int:2049:int:8192:int:2:int:4 + +Sending app data via TLS, MFL=4096 without fragmentation +depends_on:18 +39:exp:31:int:4000:int:4096:int:1:int:1 + +Sending app data via TLS, MFL=4096 with fragmentation +depends_on:18 +39:exp:31:int:4097:int:12288:int:2:int:3 + +Sending app data via TLS without MFL and without fragmentation +39:exp:32:int:16001:int:16384:int:1:int:1 + +Sending app data via TLS without MFL and with fragmentation +39:exp:32:int:16385:int:100000:int:2:int:7 + +Sending app data via DTLS, MFL=512 without fragmentation +depends_on:18 +40:exp:27:int:400:int:512:int:1:int:1 + +Sending app data via DTLS, MFL=512 with fragmentation +depends_on:18 +40:exp:27:int:513:int:1536:int:0:int:0 + +Sending app data via DTLS, MFL=1024 without fragmentation +depends_on:18 +40:exp:28:int:1000:int:1024:int:1:int:1 + +Sending app data via DTLS, MFL=1024 with fragmentation +depends_on:18 +40:exp:28:int:1025:int:5120:int:0:int:0 + +Sending app data via DTLS, MFL=2048 without fragmentation +depends_on:18 +40:exp:30:int:2000:int:2048:int:1:int:1 + +Sending app data via DTLS, MFL=2048 with fragmentation +depends_on:18 +40:exp:30:int:2049:int:8192:int:0:int:0 + +Sending app data via DTLS, MFL=4096 without fragmentation +depends_on:18 +40:exp:31:int:4000:int:4096:int:1:int:1 + +Sending app data via DTLS, MFL=4096 with fragmentation +depends_on:18 +40:exp:31:int:4097:int:12288:int:0:int:0 + +Sending app data via DTLS, without MFL and without fragmentation +40:exp:32:int:16001:int:16384:int:1:int:1 + +Sending app data via DTLS, without MFL and with fragmentation +40:exp:32:int:16385:int:100000:int:0:int:0 + +DTLS renegotiation: no legacy renegotiation +43:exp:33 + +DTLS renegotiation: legacy renegotiation +43:exp:34 + +DTLS renegotiation: legacy break handshake +43:exp:35 + +DTLS serialization with MFL=512 +45:exp:27 + +DTLS serialization with MFL=1024 +45:exp:28 + +DTLS serialization with MFL=2048 +45:exp:30 + +DTLS serialization with MFL=4096 +45:exp:31 + +DTLS no legacy renegotiation with MFL=512 +46:exp:27:exp:33:char*:"" + +DTLS no legacy renegotiation with MFL=1024 +46:exp:28:exp:33:char*:"" + +DTLS no legacy renegotiation with MFL=2048 +46:exp:30:exp:33:char*:"" + +DTLS no legacy renegotiation with MFL=4096 +46:exp:31:exp:33:char*:"" + +DTLS legacy allow renegotiation with MFL=512 +46:exp:27:exp:34:char*:"" + +DTLS legacy allow renegotiation with MFL=1024 +46:exp:28:exp:34:char*:"" + +DTLS legacy allow renegotiation with MFL=2048 +46:exp:30:exp:34:char*:"" + +DTLS legacy allow renegotiation with MFL=4096 +46:exp:31:exp:34:char*:"" + +DTLS legacy break handshake renegotiation with MFL=512 +46:exp:27:exp:35:char*:"" + +DTLS legacy break handshake renegotiation with MFL=1024 +46:exp:28:exp:35:char*:"" + +DTLS legacy break handshake renegotiation with MFL=2048 +46:exp:30:exp:35:char*:"" + +DTLS legacy break handshake renegotiation with MFL=4096 +46:exp:31:exp:35:char*:"" + +DTLS no legacy renegotiation with MFL=512, ECDHE-RSA-WITH-AES-256-GCM-SHA384 +depends_on:7:8:9:10:11 +46:exp:27:exp:33:char*:"TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384" + +DTLS no legacy renegotiation with MFL=1024, ECDHE-RSA-WITH-AES-256-GCM-SHA384 +depends_on:7:8:9:10:11 +46:exp:28:exp:33:char*:"TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384" + +DTLS no legacy renegotiation with MFL=2048, ECDHE-RSA-WITH-AES-256-GCM-SHA384 +depends_on:7:8:9:10:11 +46:exp:30:exp:33:char*:"TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384" + +DTLS no legacy renegotiation with MFL=4096, ECDHE-RSA-WITH-AES-256-GCM-SHA384 +depends_on:7:8:9:10:11 +46:exp:31:exp:33:char*:"TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384" + +DTLS legacy allow renegotiation with MFL=512, ECDHE-RSA-WITH-AES-256-GCM-SHA384 +depends_on:7:8:9:10:11 +46:exp:27:exp:34:char*:"TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384" + +DTLS legacy allow renegotiation with MFL=1024, ECDHE-RSA-WITH-AES-256-GCM-SHA384 +depends_on:7:8:9:10:11 +46:exp:28:exp:34:char*:"TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384" + +DTLS legacy allow renegotiation with MFL=2048, ECDHE-RSA-WITH-AES-256-GCM-SHA384 +depends_on:7:8:9:10:11 +46:exp:30:exp:34:char*:"TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384" + +DTLS legacy allow renegotiation with MFL=4096, ECDHE-RSA-WITH-AES-256-GCM-SHA384 +depends_on:7:8:9:10:11 +46:exp:31:exp:34:char*:"TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384" + +DTLS legacy break handshake renegotiation with MFL=512, ECDHE-RSA-WITH-AES-256-GCM-SHA384 +depends_on:7:8:9:10:11 +46:exp:27:exp:35:char*:"TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384" + +DTLS legacy break handshake renegotiation with MFL=1024, ECDHE-RSA-WITH-AES-256-GCM-SHA384 +depends_on:7:8:9:10:11 +46:exp:28:exp:35:char*:"TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384" + +DTLS legacy break handshake renegotiation with MFL=2048, ECDHE-RSA-WITH-AES-256-GCM-SHA384 +depends_on:7:8:9:10:11 +46:exp:30:exp:35:char*:"TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384" + +DTLS legacy break handshake renegotiation with MFL=4096, ECDHE-RSA-WITH-AES-256-GCM-SHA384 +depends_on:7:8:9:10:11 +46:exp:31:exp:35:char*:"TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384" + +DTLS no legacy renegotiation with MFL=512, RSA-WITH-AES-128-CCM +depends_on:12:9 +46:exp:27:exp:33:char*:"TLS-RSA-WITH-AES-128-CCM" + +DTLS no legacy renegotiation with MFL=1024, RSA-WITH-AES-128-CCM +depends_on:12:9 +46:exp:28:exp:33:char*:"TLS-RSA-WITH-AES-128-CCM" + +DTLS no legacy renegotiation with MFL=2048, RSA-WITH-AES-128-CCM +depends_on:12:9 +46:exp:30:exp:33:char*:"TLS-RSA-WITH-AES-128-CCM" + +DTLS no legacy renegotiation with MFL=4096, RSA-WITH-AES-128-CCM +depends_on:12:9 +46:exp:31:exp:33:char*:"TLS-RSA-WITH-AES-128-CCM" + +DTLS legacy allow renegotiation with MFL=512, RSA-WITH-AES-128-CCM +depends_on:12:9 +46:exp:27:exp:34:char*:"TLS-RSA-WITH-AES-128-CCM" + +DTLS legacy allow renegotiation with MFL=1024, RSA-WITH-AES-128-CCM +depends_on:12:9 +46:exp:28:exp:34:char*:"TLS-RSA-WITH-AES-128-CCM" + +DTLS legacy allow renegotiation with MFL=2048, RSA-WITH-AES-128-CCM +depends_on:12:9 +46:exp:30:exp:34:char*:"TLS-RSA-WITH-AES-128-CCM" + +DTLS legacy allow renegotiation with MFL=4096, RSA-WITH-AES-128-CCM +depends_on:12:9 +46:exp:31:exp:34:char*:"TLS-RSA-WITH-AES-128-CCM" + +DTLS legacy break handshake renegotiation with MFL=512, RSA-WITH-AES-128-CCM +depends_on:12:9 +46:exp:27:exp:35:char*:"TLS-RSA-WITH-AES-128-CCM" + +DTLS legacy break handshake renegotiation with MFL=1024, RSA-WITH-AES-128-CCM +depends_on:12:9 +46:exp:28:exp:35:char*:"TLS-RSA-WITH-AES-128-CCM" + +DTLS legacy break handshake renegotiation with MFL=2048, RSA-WITH-AES-128-CCM +depends_on:12:9 +46:exp:30:exp:35:char*:"TLS-RSA-WITH-AES-128-CCM" + +DTLS legacy break handshake renegotiation with MFL=4096, RSA-WITH-AES-128-CCM +depends_on:12:9 +46:exp:31:exp:35:char*:"TLS-RSA-WITH-AES-128-CCM" + +DTLS no legacy renegotiation with MFL=512, DHE-RSA-WITH-AES-256-CBC-SHA256 +depends_on:4:9:13 +46:exp:27:exp:33:char*:"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" + +DTLS no legacy renegotiation with MFL=1024, DHE-RSA-WITH-AES-256-CBC-SHA256 +depends_on:4:9:13 +46:exp:28:exp:33:char*:"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" + +DTLS no legacy renegotiation with MFL=2048, DHE-RSA-WITH-AES-256-CBC-SHA256 +depends_on:4:9:13 +46:exp:30:exp:33:char*:"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" + +DTLS no legacy renegotiation with MFL=4096, DHE-RSA-WITH-AES-256-CBC-SHA256 +depends_on:4:9:13 +46:exp:31:exp:33:char*:"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" + +DTLS legacy allow renegotiation with MFL=512, DHE-RSA-WITH-AES-256-CBC-SHA256 +depends_on:4:9:13 +46:exp:27:exp:34:char*:"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" + +DTLS legacy allow renegotiation with MFL=1024, DHE-RSA-WITH-AES-256-CBC-SHA256 +depends_on:4:9:13 +46:exp:28:exp:34:char*:"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" + +DTLS legacy allow renegotiation with MFL=2048, DHE-RSA-WITH-AES-256-CBC-SHA256 +depends_on:4:9:13 +46:exp:30:exp:34:char*:"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" + +DTLS legacy allow renegotiation with MFL=4096, DHE-RSA-WITH-AES-256-CBC-SHA256 +depends_on:4:9:13 +46:exp:31:exp:34:char*:"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" + +DTLS legacy break handshake renegotiation with MFL=512, DHE-RSA-WITH-AES-256-CBC-SHA256 +depends_on:4:9:13 +46:exp:27:exp:35:char*:"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" + +DTLS legacy break handshake renegotiation with MFL=1024, DHE-RSA-WITH-AES-256-CBC-SHA256 +depends_on:4:9:13 +46:exp:28:exp:35:char*:"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" + +DTLS legacy break handshake renegotiation with MFL=2048, DHE-RSA-WITH-AES-256-CBC-SHA256 +depends_on:4:9:13 +46:exp:30:exp:35:char*:"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" + +DTLS legacy break handshake renegotiation with MFL=4096, DHE-RSA-WITH-AES-256-CBC-SHA256 +depends_on:4:9:13 +46:exp:31:exp:35:char*:"TLS-DHE-RSA-WITH-AES-256-CBC-SHA256" + +SSL DTLS replay: initial state, seqnum 0 +18:hex:"":hex:"000000000000":int:0 + +SSL DTLS replay: 0 seen, 1 arriving +18:hex:"000000000000":hex:"000000000001":int:0 + +SSL DTLS replay: 0 seen, 0 replayed +18:hex:"000000000000":hex:"000000000000":exp:36 + +SSL DTLS replay: 0-1 seen, 2 arriving +18:hex:"000000000000000000000001":hex:"000000000002":int:0 + +SSL DTLS replay: 0-1 seen, 1 replayed +18:hex:"000000000000000000000001":hex:"000000000001":exp:36 + +SSL DTLS replay: 0-1 seen, 0 replayed +18:hex:"000000000000000000000001":hex:"000000000000":exp:36 + +SSL DTLS replay: new +18:hex:"abcd12340000abcd12340001abcd12340003":hex:"abcd12340004":int:0 + +SSL DTLS replay: way new +18:hex:"abcd12340000abcd12340001abcd12340003":hex:"abcd12350000":int:0 + +SSL DTLS replay: delayed +18:hex:"abcd12340000abcd12340001abcd12340003":hex:"abcd12340002":int:0 + +SSL DTLS replay: lastest replayed +18:hex:"abcd12340000abcd12340001abcd12340003":hex:"abcd12340003":exp:36 + +SSL DTLS replay: older replayed +18:hex:"abcd12340000abcd12340001abcd12340003":hex:"abcd12340001":exp:36 + +SSL DTLS replay: most recent in window, replayed +18:hex:"abcd12340000abcd12340002abcd12340003":hex:"abcd12340002":exp:36 + +SSL DTLS replay: oldest in window, replayed +18:hex:"abcd12340000abcd12340001abcd1234003f":hex:"abcd12340000":exp:36 + +SSL DTLS replay: oldest in window, not replayed +18:hex:"abcd12340001abcd12340002abcd1234003f":hex:"abcd12340000":int:0 + +SSL DTLS replay: just out of the window +18:hex:"abcd12340001abcd12340002abcd1234003f":hex:"abcd1233ffff":exp:36 + +SSL DTLS replay: way out of the window +18:hex:"abcd12340001abcd12340002abcd1234003f":hex:"abcd12330000":exp:36 + +SSL DTLS replay: big jump then replay +18:hex:"abcd12340000abcd12340100":hex:"abcd12340100":exp:36 + +SSL DTLS replay: big jump then new +18:hex:"abcd12340000abcd12340100":hex:"abcd12340101":int:0 + +SSL DTLS replay: big jump then just delayed +18:hex:"abcd12340000abcd12340100":hex:"abcd123400ff":int:0 + +SSL SET_HOSTNAME memory leak: call ssl_set_hostname twice +19:char*:"server0":char*:"server1" + +SSL session serialization: Wrong major version +32:int:1:int:0:int:0:int:0 + +SSL session serialization: Wrong minor version +32:int:0:int:1:int:0:int:0 + +SSL session serialization: Wrong patch version +32:int:0:int:0:int:1:int:0 + +SSL session serialization: Wrong config +32:int:0:int:0:int:0:int:1 + +Record crypt, AES-128-CBC, 1.2, SHA-384 +depends_on:4:9:6:7:8 +20:exp:37:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:9:6:7:8 +20:exp:37:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:9:6:7:8 +20:exp:37:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-384, EtM +depends_on:4:9:6:7:8:20 +20:exp:37:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:9:6:7:8:20 +20:exp:37:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:9:6:7:8:20 +20:exp:37:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-384, short tag +depends_on:4:9:6:7:8 +20:exp:37:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:9:6:7:8 +20:exp:37:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:9:6:7:8 +20:exp:37:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:9:6:7:8:20 +20:exp:37:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:7:8:20 +20:exp:37:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:7:8:20 +20:exp:37:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-256 +depends_on:4:9:6:13 +20:exp:37:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:9:6:13 +20:exp:37:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:9:6:13 +20:exp:37:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-256, EtM +depends_on:4:9:6:13:20 +20:exp:37:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:9:6:13:20 +20:exp:37:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:9:6:13:20 +20:exp:37:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-256, short tag +depends_on:4:9:6:13 +20:exp:37:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:9:6:13 +20:exp:37:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:9:6:13 +20:exp:37:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:9:6:13:20 +20:exp:37:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:13:20 +20:exp:37:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:13:20 +20:exp:37:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-1 +depends_on:4:9:6:21 +20:exp:37:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:9:6:21 +20:exp:37:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:9:6:21 +20:exp:37:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-1, EtM +depends_on:4:9:6:21:20 +20:exp:37:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:9:6:21:20 +20:exp:37:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:9:6:21:20 +20:exp:37:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-1, short tag +depends_on:4:9:6:21 +20:exp:37:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:9:6:21 +20:exp:37:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:9:6:21 +20:exp:37:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:9:6:21:20 +20:exp:37:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:21:20 +20:exp:37:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:21:20 +20:exp:37:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.2, MD5 +depends_on:4:9:6:22 +20:exp:37:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:9:6:22 +20:exp:37:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:9:6:22 +20:exp:37:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.2, MD5, EtM +depends_on:4:9:6:22:20 +20:exp:37:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:9:6:22:20 +20:exp:37:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:9:6:22:20 +20:exp:37:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.2, MD5, short tag +depends_on:4:9:6:22 +20:exp:37:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:9:6:22 +20:exp:37:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:9:6:22 +20:exp:37:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.2, MD5, short tag, EtM +depends_on:4:9:6:22:20 +20:exp:37:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, AES-128-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:22:20 +20:exp:37:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, AES-128-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:22:20 +20:exp:37:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, AES-128-CBC, 1.1, SHA-384 +depends_on:4:9:5:7:8 +20:exp:37:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.1, SHA-384, EtM +depends_on:4:9:5:7:8:20 +20:exp:37:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.1, SHA-384, short tag +depends_on:4:9:5:7:8 +20:exp:37:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:9:5:7:8:20 +20:exp:37:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.1, SHA-256 +depends_on:4:9:5:13 +20:exp:37:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.1, SHA-256, EtM +depends_on:4:9:5:13:20 +20:exp:37:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.1, SHA-256, short tag +depends_on:4:9:5:13 +20:exp:37:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:9:5:13:20 +20:exp:37:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.1, SHA-1 +depends_on:4:9:5:21 +20:exp:37:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.1, SHA-1, EtM +depends_on:4:9:5:21:20 +20:exp:37:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.1, SHA-1, short tag +depends_on:4:9:5:21 +20:exp:37:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:9:5:21:20 +20:exp:37:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.1, MD5 +depends_on:4:9:5:22 +20:exp:37:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.1, MD5, EtM +depends_on:4:9:5:22:20 +20:exp:37:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.1, MD5, short tag +depends_on:4:9:5:22 +20:exp:37:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.1, MD5, short tag, EtM +depends_on:4:9:5:22:20 +20:exp:37:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, SHA-384 +depends_on:4:9:3:7:8 +20:exp:37:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, SHA-384, EtM +depends_on:4:9:3:7:8:20 +20:exp:37:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, SHA-384, short tag +depends_on:4:9:3:7:8 +20:exp:37:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:9:3:7:8:20 +20:exp:37:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, SHA-256 +depends_on:4:9:3:13 +20:exp:37:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, SHA-256, EtM +depends_on:4:9:3:13:20 +20:exp:37:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, SHA-256, short tag +depends_on:4:9:3:13 +20:exp:37:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:9:3:13:20 +20:exp:37:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, SHA-1 +depends_on:4:9:3:21 +20:exp:37:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, SHA-1, EtM +depends_on:4:9:3:21:20 +20:exp:37:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, SHA-1, short tag +depends_on:4:9:3:21 +20:exp:37:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:9:3:21:20 +20:exp:37:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, MD5 +depends_on:4:9:3:22 +20:exp:37:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, MD5, EtM +depends_on:4:9:3:22:20 +20:exp:37:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, MD5, short tag +depends_on:4:9:3:22 +20:exp:37:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, 1.0, MD5, short tag, EtM +depends_on:4:9:3:22:20 +20:exp:37:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, AES-128-CBC, SSL3, SHA-1 +depends_on:4:9:0:21 +20:exp:37:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, AES-128-CBC, SSL3, SHA-1, EtM +depends_on:4:9:0:21:20 +20:exp:37:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, AES-128-CBC, SSL3, SHA-1, short tag +depends_on:4:9:0:21 +20:exp:37:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, AES-128-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:9:0:21:20 +20:exp:37:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, AES-128-CBC, SSL3, MD5 +depends_on:4:9:0:22 +20:exp:37:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, AES-128-CBC, SSL3, MD5, EtM +depends_on:4:9:0:22:20 +20:exp:37:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, AES-128-CBC, SSL3, MD5, short tag +depends_on:4:9:0:22 +20:exp:37:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, AES-128-CBC, SSL3, MD5, short tag, EtM +depends_on:4:9:0:22:20 +20:exp:37:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-384 +depends_on:4:9:6:7:8 +20:exp:42:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:9:6:7:8 +20:exp:42:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:9:6:7:8 +20:exp:42:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-384, EtM +depends_on:4:9:6:7:8:20 +20:exp:42:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:9:6:7:8:20 +20:exp:42:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:9:6:7:8:20 +20:exp:42:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-384, short tag +depends_on:4:9:6:7:8 +20:exp:42:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:9:6:7:8 +20:exp:42:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:9:6:7:8 +20:exp:42:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:9:6:7:8:20 +20:exp:42:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:7:8:20 +20:exp:42:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:7:8:20 +20:exp:42:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-256 +depends_on:4:9:6:13 +20:exp:42:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:9:6:13 +20:exp:42:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:9:6:13 +20:exp:42:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-256, EtM +depends_on:4:9:6:13:20 +20:exp:42:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:9:6:13:20 +20:exp:42:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:9:6:13:20 +20:exp:42:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-256, short tag +depends_on:4:9:6:13 +20:exp:42:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:9:6:13 +20:exp:42:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:9:6:13 +20:exp:42:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:9:6:13:20 +20:exp:42:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:13:20 +20:exp:42:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:13:20 +20:exp:42:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-1 +depends_on:4:9:6:21 +20:exp:42:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:9:6:21 +20:exp:42:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:9:6:21 +20:exp:42:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-1, EtM +depends_on:4:9:6:21:20 +20:exp:42:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:9:6:21:20 +20:exp:42:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:9:6:21:20 +20:exp:42:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-1, short tag +depends_on:4:9:6:21 +20:exp:42:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:9:6:21 +20:exp:42:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:9:6:21 +20:exp:42:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:9:6:21:20 +20:exp:42:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:21:20 +20:exp:42:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:21:20 +20:exp:42:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.2, MD5 +depends_on:4:9:6:22 +20:exp:42:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:9:6:22 +20:exp:42:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:9:6:22 +20:exp:42:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.2, MD5, EtM +depends_on:4:9:6:22:20 +20:exp:42:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:9:6:22:20 +20:exp:42:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:9:6:22:20 +20:exp:42:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.2, MD5, short tag +depends_on:4:9:6:22 +20:exp:42:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:9:6:22 +20:exp:42:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:9:6:22 +20:exp:42:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.2, MD5, short tag, EtM +depends_on:4:9:6:22:20 +20:exp:42:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, AES-192-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:22:20 +20:exp:42:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, AES-192-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:22:20 +20:exp:42:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, AES-192-CBC, 1.1, SHA-384 +depends_on:4:9:5:7:8 +20:exp:42:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.1, SHA-384, EtM +depends_on:4:9:5:7:8:20 +20:exp:42:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.1, SHA-384, short tag +depends_on:4:9:5:7:8 +20:exp:42:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:9:5:7:8:20 +20:exp:42:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.1, SHA-256 +depends_on:4:9:5:13 +20:exp:42:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.1, SHA-256, EtM +depends_on:4:9:5:13:20 +20:exp:42:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.1, SHA-256, short tag +depends_on:4:9:5:13 +20:exp:42:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:9:5:13:20 +20:exp:42:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.1, SHA-1 +depends_on:4:9:5:21 +20:exp:42:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.1, SHA-1, EtM +depends_on:4:9:5:21:20 +20:exp:42:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.1, SHA-1, short tag +depends_on:4:9:5:21 +20:exp:42:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:9:5:21:20 +20:exp:42:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.1, MD5 +depends_on:4:9:5:22 +20:exp:42:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.1, MD5, EtM +depends_on:4:9:5:22:20 +20:exp:42:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.1, MD5, short tag +depends_on:4:9:5:22 +20:exp:42:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.1, MD5, short tag, EtM +depends_on:4:9:5:22:20 +20:exp:42:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, SHA-384 +depends_on:4:9:3:7:8 +20:exp:42:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, SHA-384, EtM +depends_on:4:9:3:7:8:20 +20:exp:42:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, SHA-384, short tag +depends_on:4:9:3:7:8 +20:exp:42:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:9:3:7:8:20 +20:exp:42:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, SHA-256 +depends_on:4:9:3:13 +20:exp:42:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, SHA-256, EtM +depends_on:4:9:3:13:20 +20:exp:42:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, SHA-256, short tag +depends_on:4:9:3:13 +20:exp:42:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:9:3:13:20 +20:exp:42:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, SHA-1 +depends_on:4:9:3:21 +20:exp:42:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, SHA-1, EtM +depends_on:4:9:3:21:20 +20:exp:42:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, SHA-1, short tag +depends_on:4:9:3:21 +20:exp:42:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:9:3:21:20 +20:exp:42:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, MD5 +depends_on:4:9:3:22 +20:exp:42:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, MD5, EtM +depends_on:4:9:3:22:20 +20:exp:42:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, MD5, short tag +depends_on:4:9:3:22 +20:exp:42:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, 1.0, MD5, short tag, EtM +depends_on:4:9:3:22:20 +20:exp:42:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, AES-192-CBC, SSL3, SHA-1 +depends_on:4:9:0:21 +20:exp:42:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, AES-192-CBC, SSL3, SHA-1, EtM +depends_on:4:9:0:21:20 +20:exp:42:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, AES-192-CBC, SSL3, SHA-1, short tag +depends_on:4:9:0:21 +20:exp:42:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, AES-192-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:9:0:21:20 +20:exp:42:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, AES-192-CBC, SSL3, MD5 +depends_on:4:9:0:22 +20:exp:42:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, AES-192-CBC, SSL3, MD5, EtM +depends_on:4:9:0:22:20 +20:exp:42:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, AES-192-CBC, SSL3, MD5, short tag +depends_on:4:9:0:22 +20:exp:42:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, AES-192-CBC, SSL3, MD5, short tag, EtM +depends_on:4:9:0:22:20 +20:exp:42:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-384 +depends_on:4:9:6:7:8 +20:exp:43:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:9:6:7:8 +20:exp:43:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:9:6:7:8 +20:exp:43:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-384, EtM +depends_on:4:9:6:7:8:20 +20:exp:43:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:9:6:7:8:20 +20:exp:43:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:9:6:7:8:20 +20:exp:43:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-384, short tag +depends_on:4:9:6:7:8 +20:exp:43:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:9:6:7:8 +20:exp:43:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:9:6:7:8 +20:exp:43:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:9:6:7:8:20 +20:exp:43:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:7:8:20 +20:exp:43:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:7:8:20 +20:exp:43:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-256 +depends_on:4:9:6:13 +20:exp:43:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:9:6:13 +20:exp:43:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:9:6:13 +20:exp:43:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-256, EtM +depends_on:4:9:6:13:20 +20:exp:43:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:9:6:13:20 +20:exp:43:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:9:6:13:20 +20:exp:43:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-256, short tag +depends_on:4:9:6:13 +20:exp:43:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:9:6:13 +20:exp:43:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:9:6:13 +20:exp:43:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:9:6:13:20 +20:exp:43:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:13:20 +20:exp:43:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:13:20 +20:exp:43:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-1 +depends_on:4:9:6:21 +20:exp:43:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:9:6:21 +20:exp:43:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:9:6:21 +20:exp:43:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-1, EtM +depends_on:4:9:6:21:20 +20:exp:43:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:9:6:21:20 +20:exp:43:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:9:6:21:20 +20:exp:43:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-1, short tag +depends_on:4:9:6:21 +20:exp:43:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:9:6:21 +20:exp:43:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:9:6:21 +20:exp:43:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:9:6:21:20 +20:exp:43:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:21:20 +20:exp:43:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:21:20 +20:exp:43:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.2, MD5 +depends_on:4:9:6:22 +20:exp:43:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:9:6:22 +20:exp:43:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:9:6:22 +20:exp:43:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.2, MD5, EtM +depends_on:4:9:6:22:20 +20:exp:43:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:9:6:22:20 +20:exp:43:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:9:6:22:20 +20:exp:43:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.2, MD5, short tag +depends_on:4:9:6:22 +20:exp:43:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:9:6:22 +20:exp:43:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:9:6:22 +20:exp:43:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.2, MD5, short tag, EtM +depends_on:4:9:6:22:20 +20:exp:43:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, AES-256-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:22:20 +20:exp:43:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, AES-256-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:22:20 +20:exp:43:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, AES-256-CBC, 1.1, SHA-384 +depends_on:4:9:5:7:8 +20:exp:43:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.1, SHA-384, EtM +depends_on:4:9:5:7:8:20 +20:exp:43:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.1, SHA-384, short tag +depends_on:4:9:5:7:8 +20:exp:43:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:9:5:7:8:20 +20:exp:43:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.1, SHA-256 +depends_on:4:9:5:13 +20:exp:43:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.1, SHA-256, EtM +depends_on:4:9:5:13:20 +20:exp:43:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.1, SHA-256, short tag +depends_on:4:9:5:13 +20:exp:43:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:9:5:13:20 +20:exp:43:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.1, SHA-1 +depends_on:4:9:5:21 +20:exp:43:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.1, SHA-1, EtM +depends_on:4:9:5:21:20 +20:exp:43:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.1, SHA-1, short tag +depends_on:4:9:5:21 +20:exp:43:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:9:5:21:20 +20:exp:43:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.1, MD5 +depends_on:4:9:5:22 +20:exp:43:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.1, MD5, EtM +depends_on:4:9:5:22:20 +20:exp:43:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.1, MD5, short tag +depends_on:4:9:5:22 +20:exp:43:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.1, MD5, short tag, EtM +depends_on:4:9:5:22:20 +20:exp:43:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, SHA-384 +depends_on:4:9:3:7:8 +20:exp:43:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, SHA-384, EtM +depends_on:4:9:3:7:8:20 +20:exp:43:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, SHA-384, short tag +depends_on:4:9:3:7:8 +20:exp:43:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:9:3:7:8:20 +20:exp:43:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, SHA-256 +depends_on:4:9:3:13 +20:exp:43:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, SHA-256, EtM +depends_on:4:9:3:13:20 +20:exp:43:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, SHA-256, short tag +depends_on:4:9:3:13 +20:exp:43:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:9:3:13:20 +20:exp:43:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, SHA-1 +depends_on:4:9:3:21 +20:exp:43:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, SHA-1, EtM +depends_on:4:9:3:21:20 +20:exp:43:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, SHA-1, short tag +depends_on:4:9:3:21 +20:exp:43:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:9:3:21:20 +20:exp:43:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, MD5 +depends_on:4:9:3:22 +20:exp:43:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, MD5, EtM +depends_on:4:9:3:22:20 +20:exp:43:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, MD5, short tag +depends_on:4:9:3:22 +20:exp:43:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, 1.0, MD5, short tag, EtM +depends_on:4:9:3:22:20 +20:exp:43:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, AES-256-CBC, SSL3, SHA-1 +depends_on:4:9:0:21 +20:exp:43:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, AES-256-CBC, SSL3, SHA-1, EtM +depends_on:4:9:0:21:20 +20:exp:43:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, AES-256-CBC, SSL3, SHA-1, short tag +depends_on:4:9:0:21 +20:exp:43:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, AES-256-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:9:0:21:20 +20:exp:43:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, AES-256-CBC, SSL3, MD5 +depends_on:4:9:0:22 +20:exp:43:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, AES-256-CBC, SSL3, MD5, EtM +depends_on:4:9:0:22:20 +20:exp:43:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, AES-256-CBC, SSL3, MD5, short tag +depends_on:4:9:0:22 +20:exp:43:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, AES-256-CBC, SSL3, MD5, short tag, EtM +depends_on:4:9:0:22:20 +20:exp:43:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-384 +depends_on:4:23:6:7:8 +20:exp:44:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:23:6:7:8 +20:exp:44:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:23:6:7:8 +20:exp:44:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-384, EtM +depends_on:4:23:6:7:8:20 +20:exp:44:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:23:6:7:8:20 +20:exp:44:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:23:6:7:8:20 +20:exp:44:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-384, short tag +depends_on:4:23:6:7:8 +20:exp:44:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:23:6:7:8 +20:exp:44:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:23:6:7:8 +20:exp:44:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:23:6:7:8:20 +20:exp:44:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:7:8:20 +20:exp:44:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:7:8:20 +20:exp:44:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-256 +depends_on:4:23:6:13 +20:exp:44:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:23:6:13 +20:exp:44:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:23:6:13 +20:exp:44:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-256, EtM +depends_on:4:23:6:13:20 +20:exp:44:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:23:6:13:20 +20:exp:44:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:23:6:13:20 +20:exp:44:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-256, short tag +depends_on:4:23:6:13 +20:exp:44:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:23:6:13 +20:exp:44:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:23:6:13 +20:exp:44:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:23:6:13:20 +20:exp:44:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:13:20 +20:exp:44:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:13:20 +20:exp:44:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-1 +depends_on:4:23:6:21 +20:exp:44:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:23:6:21 +20:exp:44:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:23:6:21 +20:exp:44:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-1, EtM +depends_on:4:23:6:21:20 +20:exp:44:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:23:6:21:20 +20:exp:44:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:23:6:21:20 +20:exp:44:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-1, short tag +depends_on:4:23:6:21 +20:exp:44:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:23:6:21 +20:exp:44:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:23:6:21 +20:exp:44:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:23:6:21:20 +20:exp:44:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:21:20 +20:exp:44:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:21:20 +20:exp:44:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.2, MD5 +depends_on:4:23:6:22 +20:exp:44:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:23:6:22 +20:exp:44:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:23:6:22 +20:exp:44:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.2, MD5, EtM +depends_on:4:23:6:22:20 +20:exp:44:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:23:6:22:20 +20:exp:44:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:23:6:22:20 +20:exp:44:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.2, MD5, short tag +depends_on:4:23:6:22 +20:exp:44:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:23:6:22 +20:exp:44:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:23:6:22 +20:exp:44:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.2, MD5, short tag, EtM +depends_on:4:23:6:22:20 +20:exp:44:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:22:20 +20:exp:44:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-128-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:22:20 +20:exp:44:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-128-CBC, 1.1, SHA-384 +depends_on:4:23:5:7:8 +20:exp:44:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.1, SHA-384, EtM +depends_on:4:23:5:7:8:20 +20:exp:44:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.1, SHA-384, short tag +depends_on:4:23:5:7:8 +20:exp:44:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:23:5:7:8:20 +20:exp:44:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.1, SHA-256 +depends_on:4:23:5:13 +20:exp:44:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.1, SHA-256, EtM +depends_on:4:23:5:13:20 +20:exp:44:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.1, SHA-256, short tag +depends_on:4:23:5:13 +20:exp:44:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:23:5:13:20 +20:exp:44:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.1, SHA-1 +depends_on:4:23:5:21 +20:exp:44:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.1, SHA-1, EtM +depends_on:4:23:5:21:20 +20:exp:44:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.1, SHA-1, short tag +depends_on:4:23:5:21 +20:exp:44:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:23:5:21:20 +20:exp:44:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.1, MD5 +depends_on:4:23:5:22 +20:exp:44:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.1, MD5, EtM +depends_on:4:23:5:22:20 +20:exp:44:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.1, MD5, short tag +depends_on:4:23:5:22 +20:exp:44:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.1, MD5, short tag, EtM +depends_on:4:23:5:22:20 +20:exp:44:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, SHA-384 +depends_on:4:23:3:7:8 +20:exp:44:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, SHA-384, EtM +depends_on:4:23:3:7:8:20 +20:exp:44:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, SHA-384, short tag +depends_on:4:23:3:7:8 +20:exp:44:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:23:3:7:8:20 +20:exp:44:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, SHA-256 +depends_on:4:23:3:13 +20:exp:44:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, SHA-256, EtM +depends_on:4:23:3:13:20 +20:exp:44:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, SHA-256, short tag +depends_on:4:23:3:13 +20:exp:44:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:23:3:13:20 +20:exp:44:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, SHA-1 +depends_on:4:23:3:21 +20:exp:44:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, SHA-1, EtM +depends_on:4:23:3:21:20 +20:exp:44:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, SHA-1, short tag +depends_on:4:23:3:21 +20:exp:44:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:23:3:21:20 +20:exp:44:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, MD5 +depends_on:4:23:3:22 +20:exp:44:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, MD5, EtM +depends_on:4:23:3:22:20 +20:exp:44:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, MD5, short tag +depends_on:4:23:3:22 +20:exp:44:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, 1.0, MD5, short tag, EtM +depends_on:4:23:3:22:20 +20:exp:44:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-128-CBC, SSL3, SHA-1 +depends_on:4:23:0:21 +20:exp:44:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, ARIA-128-CBC, SSL3, SHA-1, EtM +depends_on:4:23:0:21:20 +20:exp:44:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, ARIA-128-CBC, SSL3, SHA-1, short tag +depends_on:4:23:0:21 +20:exp:44:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, ARIA-128-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:23:0:21:20 +20:exp:44:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, ARIA-128-CBC, SSL3, MD5 +depends_on:4:23:0:22 +20:exp:44:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, ARIA-128-CBC, SSL3, MD5, EtM +depends_on:4:23:0:22:20 +20:exp:44:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, ARIA-128-CBC, SSL3, MD5, short tag +depends_on:4:23:0:22 +20:exp:44:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, ARIA-128-CBC, SSL3, MD5, short tag, EtM +depends_on:4:23:0:22:20 +20:exp:44:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-384 +depends_on:4:23:6:7:8 +20:exp:45:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:23:6:7:8 +20:exp:45:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:23:6:7:8 +20:exp:45:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-384, EtM +depends_on:4:23:6:7:8:20 +20:exp:45:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:23:6:7:8:20 +20:exp:45:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:23:6:7:8:20 +20:exp:45:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-384, short tag +depends_on:4:23:6:7:8 +20:exp:45:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:23:6:7:8 +20:exp:45:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:23:6:7:8 +20:exp:45:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:23:6:7:8:20 +20:exp:45:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:7:8:20 +20:exp:45:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:7:8:20 +20:exp:45:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-256 +depends_on:4:23:6:13 +20:exp:45:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:23:6:13 +20:exp:45:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:23:6:13 +20:exp:45:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-256, EtM +depends_on:4:23:6:13:20 +20:exp:45:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:23:6:13:20 +20:exp:45:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:23:6:13:20 +20:exp:45:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-256, short tag +depends_on:4:23:6:13 +20:exp:45:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:23:6:13 +20:exp:45:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:23:6:13 +20:exp:45:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:23:6:13:20 +20:exp:45:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:13:20 +20:exp:45:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:13:20 +20:exp:45:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-1 +depends_on:4:23:6:21 +20:exp:45:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:23:6:21 +20:exp:45:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:23:6:21 +20:exp:45:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-1, EtM +depends_on:4:23:6:21:20 +20:exp:45:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:23:6:21:20 +20:exp:45:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:23:6:21:20 +20:exp:45:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-1, short tag +depends_on:4:23:6:21 +20:exp:45:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:23:6:21 +20:exp:45:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:23:6:21 +20:exp:45:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:23:6:21:20 +20:exp:45:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:21:20 +20:exp:45:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:21:20 +20:exp:45:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.2, MD5 +depends_on:4:23:6:22 +20:exp:45:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:23:6:22 +20:exp:45:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:23:6:22 +20:exp:45:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.2, MD5, EtM +depends_on:4:23:6:22:20 +20:exp:45:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:23:6:22:20 +20:exp:45:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:23:6:22:20 +20:exp:45:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.2, MD5, short tag +depends_on:4:23:6:22 +20:exp:45:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:23:6:22 +20:exp:45:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:23:6:22 +20:exp:45:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.2, MD5, short tag, EtM +depends_on:4:23:6:22:20 +20:exp:45:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:22:20 +20:exp:45:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-192-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:22:20 +20:exp:45:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-192-CBC, 1.1, SHA-384 +depends_on:4:23:5:7:8 +20:exp:45:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.1, SHA-384, EtM +depends_on:4:23:5:7:8:20 +20:exp:45:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.1, SHA-384, short tag +depends_on:4:23:5:7:8 +20:exp:45:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:23:5:7:8:20 +20:exp:45:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.1, SHA-256 +depends_on:4:23:5:13 +20:exp:45:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.1, SHA-256, EtM +depends_on:4:23:5:13:20 +20:exp:45:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.1, SHA-256, short tag +depends_on:4:23:5:13 +20:exp:45:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:23:5:13:20 +20:exp:45:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.1, SHA-1 +depends_on:4:23:5:21 +20:exp:45:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.1, SHA-1, EtM +depends_on:4:23:5:21:20 +20:exp:45:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.1, SHA-1, short tag +depends_on:4:23:5:21 +20:exp:45:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:23:5:21:20 +20:exp:45:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.1, MD5 +depends_on:4:23:5:22 +20:exp:45:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.1, MD5, EtM +depends_on:4:23:5:22:20 +20:exp:45:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.1, MD5, short tag +depends_on:4:23:5:22 +20:exp:45:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.1, MD5, short tag, EtM +depends_on:4:23:5:22:20 +20:exp:45:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, SHA-384 +depends_on:4:23:3:7:8 +20:exp:45:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, SHA-384, EtM +depends_on:4:23:3:7:8:20 +20:exp:45:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, SHA-384, short tag +depends_on:4:23:3:7:8 +20:exp:45:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:23:3:7:8:20 +20:exp:45:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, SHA-256 +depends_on:4:23:3:13 +20:exp:45:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, SHA-256, EtM +depends_on:4:23:3:13:20 +20:exp:45:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, SHA-256, short tag +depends_on:4:23:3:13 +20:exp:45:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:23:3:13:20 +20:exp:45:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, SHA-1 +depends_on:4:23:3:21 +20:exp:45:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, SHA-1, EtM +depends_on:4:23:3:21:20 +20:exp:45:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, SHA-1, short tag +depends_on:4:23:3:21 +20:exp:45:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:23:3:21:20 +20:exp:45:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, MD5 +depends_on:4:23:3:22 +20:exp:45:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, MD5, EtM +depends_on:4:23:3:22:20 +20:exp:45:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, MD5, short tag +depends_on:4:23:3:22 +20:exp:45:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, 1.0, MD5, short tag, EtM +depends_on:4:23:3:22:20 +20:exp:45:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-192-CBC, SSL3, SHA-1 +depends_on:4:23:0:21 +20:exp:45:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, ARIA-192-CBC, SSL3, SHA-1, EtM +depends_on:4:23:0:21:20 +20:exp:45:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, ARIA-192-CBC, SSL3, SHA-1, short tag +depends_on:4:23:0:21 +20:exp:45:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, ARIA-192-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:23:0:21:20 +20:exp:45:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, ARIA-192-CBC, SSL3, MD5 +depends_on:4:23:0:22 +20:exp:45:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, ARIA-192-CBC, SSL3, MD5, EtM +depends_on:4:23:0:22:20 +20:exp:45:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, ARIA-192-CBC, SSL3, MD5, short tag +depends_on:4:23:0:22 +20:exp:45:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, ARIA-192-CBC, SSL3, MD5, short tag, EtM +depends_on:4:23:0:22:20 +20:exp:45:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-384 +depends_on:4:23:6:7:8 +20:exp:46:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:23:6:7:8 +20:exp:46:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:23:6:7:8 +20:exp:46:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-384, EtM +depends_on:4:23:6:7:8:20 +20:exp:46:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:23:6:7:8:20 +20:exp:46:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:23:6:7:8:20 +20:exp:46:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-384, short tag +depends_on:4:23:6:7:8 +20:exp:46:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:23:6:7:8 +20:exp:46:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:23:6:7:8 +20:exp:46:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:23:6:7:8:20 +20:exp:46:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:7:8:20 +20:exp:46:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:7:8:20 +20:exp:46:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-256 +depends_on:4:23:6:13 +20:exp:46:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:23:6:13 +20:exp:46:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:23:6:13 +20:exp:46:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-256, EtM +depends_on:4:23:6:13:20 +20:exp:46:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:23:6:13:20 +20:exp:46:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:23:6:13:20 +20:exp:46:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-256, short tag +depends_on:4:23:6:13 +20:exp:46:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:23:6:13 +20:exp:46:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:23:6:13 +20:exp:46:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:23:6:13:20 +20:exp:46:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:13:20 +20:exp:46:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:13:20 +20:exp:46:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-1 +depends_on:4:23:6:21 +20:exp:46:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:23:6:21 +20:exp:46:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:23:6:21 +20:exp:46:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-1, EtM +depends_on:4:23:6:21:20 +20:exp:46:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:23:6:21:20 +20:exp:46:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:23:6:21:20 +20:exp:46:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-1, short tag +depends_on:4:23:6:21 +20:exp:46:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:23:6:21 +20:exp:46:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:23:6:21 +20:exp:46:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:23:6:21:20 +20:exp:46:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:21:20 +20:exp:46:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:21:20 +20:exp:46:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.2, MD5 +depends_on:4:23:6:22 +20:exp:46:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:23:6:22 +20:exp:46:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:23:6:22 +20:exp:46:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.2, MD5, EtM +depends_on:4:23:6:22:20 +20:exp:46:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:23:6:22:20 +20:exp:46:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:23:6:22:20 +20:exp:46:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.2, MD5, short tag +depends_on:4:23:6:22 +20:exp:46:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:23:6:22 +20:exp:46:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:23:6:22 +20:exp:46:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.2, MD5, short tag, EtM +depends_on:4:23:6:22:20 +20:exp:46:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:22:20 +20:exp:46:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARIA-256-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:22:20 +20:exp:46:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARIA-256-CBC, 1.1, SHA-384 +depends_on:4:23:5:7:8 +20:exp:46:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.1, SHA-384, EtM +depends_on:4:23:5:7:8:20 +20:exp:46:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.1, SHA-384, short tag +depends_on:4:23:5:7:8 +20:exp:46:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:23:5:7:8:20 +20:exp:46:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.1, SHA-256 +depends_on:4:23:5:13 +20:exp:46:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.1, SHA-256, EtM +depends_on:4:23:5:13:20 +20:exp:46:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.1, SHA-256, short tag +depends_on:4:23:5:13 +20:exp:46:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:23:5:13:20 +20:exp:46:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.1, SHA-1 +depends_on:4:23:5:21 +20:exp:46:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.1, SHA-1, EtM +depends_on:4:23:5:21:20 +20:exp:46:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.1, SHA-1, short tag +depends_on:4:23:5:21 +20:exp:46:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:23:5:21:20 +20:exp:46:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.1, MD5 +depends_on:4:23:5:22 +20:exp:46:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.1, MD5, EtM +depends_on:4:23:5:22:20 +20:exp:46:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.1, MD5, short tag +depends_on:4:23:5:22 +20:exp:46:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.1, MD5, short tag, EtM +depends_on:4:23:5:22:20 +20:exp:46:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, SHA-384 +depends_on:4:23:3:7:8 +20:exp:46:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, SHA-384, EtM +depends_on:4:23:3:7:8:20 +20:exp:46:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, SHA-384, short tag +depends_on:4:23:3:7:8 +20:exp:46:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:23:3:7:8:20 +20:exp:46:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, SHA-256 +depends_on:4:23:3:13 +20:exp:46:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, SHA-256, EtM +depends_on:4:23:3:13:20 +20:exp:46:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, SHA-256, short tag +depends_on:4:23:3:13 +20:exp:46:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:23:3:13:20 +20:exp:46:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, SHA-1 +depends_on:4:23:3:21 +20:exp:46:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, SHA-1, EtM +depends_on:4:23:3:21:20 +20:exp:46:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, SHA-1, short tag +depends_on:4:23:3:21 +20:exp:46:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:23:3:21:20 +20:exp:46:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, MD5 +depends_on:4:23:3:22 +20:exp:46:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, MD5, EtM +depends_on:4:23:3:22:20 +20:exp:46:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, MD5, short tag +depends_on:4:23:3:22 +20:exp:46:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, 1.0, MD5, short tag, EtM +depends_on:4:23:3:22:20 +20:exp:46:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARIA-256-CBC, SSL3, SHA-1 +depends_on:4:23:0:21 +20:exp:46:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, ARIA-256-CBC, SSL3, SHA-1, EtM +depends_on:4:23:0:21:20 +20:exp:46:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, ARIA-256-CBC, SSL3, SHA-1, short tag +depends_on:4:23:0:21 +20:exp:46:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, ARIA-256-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:23:0:21:20 +20:exp:46:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, ARIA-256-CBC, SSL3, MD5 +depends_on:4:23:0:22 +20:exp:46:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, ARIA-256-CBC, SSL3, MD5, EtM +depends_on:4:23:0:22:20 +20:exp:46:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, ARIA-256-CBC, SSL3, MD5, short tag +depends_on:4:23:0:22 +20:exp:46:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, ARIA-256-CBC, SSL3, MD5, short tag, EtM +depends_on:4:23:0:22:20 +20:exp:46:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-384 +depends_on:4:16:6:7:8 +20:exp:47:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:16:6:7:8 +20:exp:47:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:16:6:7:8 +20:exp:47:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-384, EtM +depends_on:4:16:6:7:8:20 +20:exp:47:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:16:6:7:8:20 +20:exp:47:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:16:6:7:8:20 +20:exp:47:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-384, short tag +depends_on:4:16:6:7:8 +20:exp:47:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:16:6:7:8 +20:exp:47:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:16:6:7:8 +20:exp:47:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:16:6:7:8:20 +20:exp:47:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:7:8:20 +20:exp:47:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:7:8:20 +20:exp:47:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-256 +depends_on:4:16:6:13 +20:exp:47:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:16:6:13 +20:exp:47:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:16:6:13 +20:exp:47:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-256, EtM +depends_on:4:16:6:13:20 +20:exp:47:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:16:6:13:20 +20:exp:47:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:16:6:13:20 +20:exp:47:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-256, short tag +depends_on:4:16:6:13 +20:exp:47:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:16:6:13 +20:exp:47:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:16:6:13 +20:exp:47:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:16:6:13:20 +20:exp:47:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:13:20 +20:exp:47:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:13:20 +20:exp:47:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-1 +depends_on:4:16:6:21 +20:exp:47:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:16:6:21 +20:exp:47:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:16:6:21 +20:exp:47:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-1, EtM +depends_on:4:16:6:21:20 +20:exp:47:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:16:6:21:20 +20:exp:47:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:16:6:21:20 +20:exp:47:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-1, short tag +depends_on:4:16:6:21 +20:exp:47:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:16:6:21 +20:exp:47:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:16:6:21 +20:exp:47:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:16:6:21:20 +20:exp:47:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:21:20 +20:exp:47:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:21:20 +20:exp:47:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, MD5 +depends_on:4:16:6:22 +20:exp:47:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:16:6:22 +20:exp:47:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:16:6:22 +20:exp:47:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, MD5, EtM +depends_on:4:16:6:22:20 +20:exp:47:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:16:6:22:20 +20:exp:47:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:16:6:22:20 +20:exp:47:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, MD5, short tag +depends_on:4:16:6:22 +20:exp:47:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:16:6:22 +20:exp:47:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:16:6:22 +20:exp:47:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, MD5, short tag, EtM +depends_on:4:16:6:22:20 +20:exp:47:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:22:20 +20:exp:47:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:22:20 +20:exp:47:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, SHA-384 +depends_on:4:16:5:7:8 +20:exp:47:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, SHA-384, EtM +depends_on:4:16:5:7:8:20 +20:exp:47:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, SHA-384, short tag +depends_on:4:16:5:7:8 +20:exp:47:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:16:5:7:8:20 +20:exp:47:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, SHA-256 +depends_on:4:16:5:13 +20:exp:47:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, SHA-256, EtM +depends_on:4:16:5:13:20 +20:exp:47:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, SHA-256, short tag +depends_on:4:16:5:13 +20:exp:47:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:16:5:13:20 +20:exp:47:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, SHA-1 +depends_on:4:16:5:21 +20:exp:47:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, SHA-1, EtM +depends_on:4:16:5:21:20 +20:exp:47:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, SHA-1, short tag +depends_on:4:16:5:21 +20:exp:47:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:16:5:21:20 +20:exp:47:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, MD5 +depends_on:4:16:5:22 +20:exp:47:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, MD5, EtM +depends_on:4:16:5:22:20 +20:exp:47:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, MD5, short tag +depends_on:4:16:5:22 +20:exp:47:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.1, MD5, short tag, EtM +depends_on:4:16:5:22:20 +20:exp:47:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, SHA-384 +depends_on:4:16:3:7:8 +20:exp:47:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, SHA-384, EtM +depends_on:4:16:3:7:8:20 +20:exp:47:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, SHA-384, short tag +depends_on:4:16:3:7:8 +20:exp:47:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:16:3:7:8:20 +20:exp:47:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, SHA-256 +depends_on:4:16:3:13 +20:exp:47:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, SHA-256, EtM +depends_on:4:16:3:13:20 +20:exp:47:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, SHA-256, short tag +depends_on:4:16:3:13 +20:exp:47:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:16:3:13:20 +20:exp:47:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, SHA-1 +depends_on:4:16:3:21 +20:exp:47:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, SHA-1, EtM +depends_on:4:16:3:21:20 +20:exp:47:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, SHA-1, short tag +depends_on:4:16:3:21 +20:exp:47:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:16:3:21:20 +20:exp:47:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, MD5 +depends_on:4:16:3:22 +20:exp:47:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, MD5, EtM +depends_on:4:16:3:22:20 +20:exp:47:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, MD5, short tag +depends_on:4:16:3:22 +20:exp:47:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, 1.0, MD5, short tag, EtM +depends_on:4:16:3:22:20 +20:exp:47:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, SSL3, SHA-1 +depends_on:4:16:0:21 +20:exp:47:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, SSL3, SHA-1, EtM +depends_on:4:16:0:21:20 +20:exp:47:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, SSL3, SHA-1, short tag +depends_on:4:16:0:21 +20:exp:47:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:16:0:21:20 +20:exp:47:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, SSL3, MD5 +depends_on:4:16:0:22 +20:exp:47:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, SSL3, MD5, EtM +depends_on:4:16:0:22:20 +20:exp:47:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, SSL3, MD5, short tag +depends_on:4:16:0:22 +20:exp:47:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-128-CBC, SSL3, MD5, short tag, EtM +depends_on:4:16:0:22:20 +20:exp:47:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-384 +depends_on:4:16:6:7:8 +20:exp:48:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:16:6:7:8 +20:exp:48:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:16:6:7:8 +20:exp:48:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-384, EtM +depends_on:4:16:6:7:8:20 +20:exp:48:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:16:6:7:8:20 +20:exp:48:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:16:6:7:8:20 +20:exp:48:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-384, short tag +depends_on:4:16:6:7:8 +20:exp:48:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:16:6:7:8 +20:exp:48:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:16:6:7:8 +20:exp:48:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:16:6:7:8:20 +20:exp:48:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:7:8:20 +20:exp:48:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:7:8:20 +20:exp:48:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-256 +depends_on:4:16:6:13 +20:exp:48:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:16:6:13 +20:exp:48:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:16:6:13 +20:exp:48:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-256, EtM +depends_on:4:16:6:13:20 +20:exp:48:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:16:6:13:20 +20:exp:48:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:16:6:13:20 +20:exp:48:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-256, short tag +depends_on:4:16:6:13 +20:exp:48:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:16:6:13 +20:exp:48:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:16:6:13 +20:exp:48:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:16:6:13:20 +20:exp:48:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:13:20 +20:exp:48:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:13:20 +20:exp:48:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-1 +depends_on:4:16:6:21 +20:exp:48:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:16:6:21 +20:exp:48:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:16:6:21 +20:exp:48:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-1, EtM +depends_on:4:16:6:21:20 +20:exp:48:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:16:6:21:20 +20:exp:48:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:16:6:21:20 +20:exp:48:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-1, short tag +depends_on:4:16:6:21 +20:exp:48:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:16:6:21 +20:exp:48:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:16:6:21 +20:exp:48:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:16:6:21:20 +20:exp:48:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:21:20 +20:exp:48:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:21:20 +20:exp:48:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, MD5 +depends_on:4:16:6:22 +20:exp:48:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:16:6:22 +20:exp:48:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:16:6:22 +20:exp:48:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, MD5, EtM +depends_on:4:16:6:22:20 +20:exp:48:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:16:6:22:20 +20:exp:48:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:16:6:22:20 +20:exp:48:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, MD5, short tag +depends_on:4:16:6:22 +20:exp:48:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:16:6:22 +20:exp:48:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:16:6:22 +20:exp:48:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, MD5, short tag, EtM +depends_on:4:16:6:22:20 +20:exp:48:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:22:20 +20:exp:48:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:22:20 +20:exp:48:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, SHA-384 +depends_on:4:16:5:7:8 +20:exp:48:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, SHA-384, EtM +depends_on:4:16:5:7:8:20 +20:exp:48:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, SHA-384, short tag +depends_on:4:16:5:7:8 +20:exp:48:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:16:5:7:8:20 +20:exp:48:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, SHA-256 +depends_on:4:16:5:13 +20:exp:48:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, SHA-256, EtM +depends_on:4:16:5:13:20 +20:exp:48:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, SHA-256, short tag +depends_on:4:16:5:13 +20:exp:48:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:16:5:13:20 +20:exp:48:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, SHA-1 +depends_on:4:16:5:21 +20:exp:48:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, SHA-1, EtM +depends_on:4:16:5:21:20 +20:exp:48:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, SHA-1, short tag +depends_on:4:16:5:21 +20:exp:48:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:16:5:21:20 +20:exp:48:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, MD5 +depends_on:4:16:5:22 +20:exp:48:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, MD5, EtM +depends_on:4:16:5:22:20 +20:exp:48:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, MD5, short tag +depends_on:4:16:5:22 +20:exp:48:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.1, MD5, short tag, EtM +depends_on:4:16:5:22:20 +20:exp:48:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, SHA-384 +depends_on:4:16:3:7:8 +20:exp:48:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, SHA-384, EtM +depends_on:4:16:3:7:8:20 +20:exp:48:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, SHA-384, short tag +depends_on:4:16:3:7:8 +20:exp:48:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:16:3:7:8:20 +20:exp:48:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, SHA-256 +depends_on:4:16:3:13 +20:exp:48:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, SHA-256, EtM +depends_on:4:16:3:13:20 +20:exp:48:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, SHA-256, short tag +depends_on:4:16:3:13 +20:exp:48:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:16:3:13:20 +20:exp:48:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, SHA-1 +depends_on:4:16:3:21 +20:exp:48:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, SHA-1, EtM +depends_on:4:16:3:21:20 +20:exp:48:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, SHA-1, short tag +depends_on:4:16:3:21 +20:exp:48:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:16:3:21:20 +20:exp:48:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, MD5 +depends_on:4:16:3:22 +20:exp:48:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, MD5, EtM +depends_on:4:16:3:22:20 +20:exp:48:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, MD5, short tag +depends_on:4:16:3:22 +20:exp:48:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, 1.0, MD5, short tag, EtM +depends_on:4:16:3:22:20 +20:exp:48:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, SSL3, SHA-1 +depends_on:4:16:0:21 +20:exp:48:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, SSL3, SHA-1, EtM +depends_on:4:16:0:21:20 +20:exp:48:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, SSL3, SHA-1, short tag +depends_on:4:16:0:21 +20:exp:48:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:16:0:21:20 +20:exp:48:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, SSL3, MD5 +depends_on:4:16:0:22 +20:exp:48:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, SSL3, MD5, EtM +depends_on:4:16:0:22:20 +20:exp:48:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, SSL3, MD5, short tag +depends_on:4:16:0:22 +20:exp:48:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-192-CBC, SSL3, MD5, short tag, EtM +depends_on:4:16:0:22:20 +20:exp:48:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-384 +depends_on:4:16:6:7:8 +20:exp:49:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:16:6:7:8 +20:exp:49:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:16:6:7:8 +20:exp:49:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-384, EtM +depends_on:4:16:6:7:8:20 +20:exp:49:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:16:6:7:8:20 +20:exp:49:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:16:6:7:8:20 +20:exp:49:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-384, short tag +depends_on:4:16:6:7:8 +20:exp:49:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:16:6:7:8 +20:exp:49:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:16:6:7:8 +20:exp:49:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:16:6:7:8:20 +20:exp:49:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:7:8:20 +20:exp:49:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:7:8:20 +20:exp:49:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-256 +depends_on:4:16:6:13 +20:exp:49:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:16:6:13 +20:exp:49:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:16:6:13 +20:exp:49:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-256, EtM +depends_on:4:16:6:13:20 +20:exp:49:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:16:6:13:20 +20:exp:49:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:16:6:13:20 +20:exp:49:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-256, short tag +depends_on:4:16:6:13 +20:exp:49:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:16:6:13 +20:exp:49:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:16:6:13 +20:exp:49:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:16:6:13:20 +20:exp:49:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:13:20 +20:exp:49:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:13:20 +20:exp:49:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-1 +depends_on:4:16:6:21 +20:exp:49:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:16:6:21 +20:exp:49:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:16:6:21 +20:exp:49:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-1, EtM +depends_on:4:16:6:21:20 +20:exp:49:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:16:6:21:20 +20:exp:49:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:16:6:21:20 +20:exp:49:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-1, short tag +depends_on:4:16:6:21 +20:exp:49:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:16:6:21 +20:exp:49:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:16:6:21 +20:exp:49:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:16:6:21:20 +20:exp:49:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:21:20 +20:exp:49:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:21:20 +20:exp:49:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, MD5 +depends_on:4:16:6:22 +20:exp:49:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:16:6:22 +20:exp:49:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:16:6:22 +20:exp:49:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, MD5, EtM +depends_on:4:16:6:22:20 +20:exp:49:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:16:6:22:20 +20:exp:49:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:16:6:22:20 +20:exp:49:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, MD5, short tag +depends_on:4:16:6:22 +20:exp:49:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:16:6:22 +20:exp:49:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:16:6:22 +20:exp:49:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, MD5, short tag, EtM +depends_on:4:16:6:22:20 +20:exp:49:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:22:20 +20:exp:49:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:22:20 +20:exp:49:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, SHA-384 +depends_on:4:16:5:7:8 +20:exp:49:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, SHA-384, EtM +depends_on:4:16:5:7:8:20 +20:exp:49:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, SHA-384, short tag +depends_on:4:16:5:7:8 +20:exp:49:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:16:5:7:8:20 +20:exp:49:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, SHA-256 +depends_on:4:16:5:13 +20:exp:49:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, SHA-256, EtM +depends_on:4:16:5:13:20 +20:exp:49:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, SHA-256, short tag +depends_on:4:16:5:13 +20:exp:49:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:16:5:13:20 +20:exp:49:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, SHA-1 +depends_on:4:16:5:21 +20:exp:49:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, SHA-1, EtM +depends_on:4:16:5:21:20 +20:exp:49:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, SHA-1, short tag +depends_on:4:16:5:21 +20:exp:49:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:16:5:21:20 +20:exp:49:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, MD5 +depends_on:4:16:5:22 +20:exp:49:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, MD5, EtM +depends_on:4:16:5:22:20 +20:exp:49:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, MD5, short tag +depends_on:4:16:5:22 +20:exp:49:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.1, MD5, short tag, EtM +depends_on:4:16:5:22:20 +20:exp:49:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, SHA-384 +depends_on:4:16:3:7:8 +20:exp:49:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, SHA-384, EtM +depends_on:4:16:3:7:8:20 +20:exp:49:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, SHA-384, short tag +depends_on:4:16:3:7:8 +20:exp:49:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:16:3:7:8:20 +20:exp:49:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, SHA-256 +depends_on:4:16:3:13 +20:exp:49:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, SHA-256, EtM +depends_on:4:16:3:13:20 +20:exp:49:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, SHA-256, short tag +depends_on:4:16:3:13 +20:exp:49:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:16:3:13:20 +20:exp:49:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, SHA-1 +depends_on:4:16:3:21 +20:exp:49:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, SHA-1, EtM +depends_on:4:16:3:21:20 +20:exp:49:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, SHA-1, short tag +depends_on:4:16:3:21 +20:exp:49:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:16:3:21:20 +20:exp:49:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, MD5 +depends_on:4:16:3:22 +20:exp:49:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, MD5, EtM +depends_on:4:16:3:22:20 +20:exp:49:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, MD5, short tag +depends_on:4:16:3:22 +20:exp:49:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, 1.0, MD5, short tag, EtM +depends_on:4:16:3:22:20 +20:exp:49:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, SSL3, SHA-1 +depends_on:4:16:0:21 +20:exp:49:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, SSL3, SHA-1, EtM +depends_on:4:16:0:21:20 +20:exp:49:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, SSL3, SHA-1, short tag +depends_on:4:16:0:21 +20:exp:49:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:16:0:21:20 +20:exp:49:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, SSL3, MD5 +depends_on:4:16:0:22 +20:exp:49:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, SSL3, MD5, EtM +depends_on:4:16:0:22:20 +20:exp:49:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, SSL3, MD5, short tag +depends_on:4:16:0:22 +20:exp:49:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, CAMELLIA-256-CBC, SSL3, MD5, short tag, EtM +depends_on:4:16:0:22:20 +20:exp:49:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-384 +depends_on:4:24:6:7:8 +20:exp:50:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:24:6:7:8 +20:exp:50:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:24:6:7:8 +20:exp:50:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-384, EtM +depends_on:4:24:6:7:8:20 +20:exp:50:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:24:6:7:8:20 +20:exp:50:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:24:6:7:8:20 +20:exp:50:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-384, short tag +depends_on:4:24:6:7:8 +20:exp:50:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:24:6:7:8 +20:exp:50:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:24:6:7:8 +20:exp:50:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:24:6:7:8:20 +20:exp:50:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:24:6:7:8:20 +20:exp:50:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:24:6:7:8:20 +20:exp:50:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-256 +depends_on:4:24:6:13 +20:exp:50:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:24:6:13 +20:exp:50:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:24:6:13 +20:exp:50:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-256, EtM +depends_on:4:24:6:13:20 +20:exp:50:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:24:6:13:20 +20:exp:50:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:24:6:13:20 +20:exp:50:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-256, short tag +depends_on:4:24:6:13 +20:exp:50:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:24:6:13 +20:exp:50:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:24:6:13 +20:exp:50:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:24:6:13:20 +20:exp:50:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:24:6:13:20 +20:exp:50:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:24:6:13:20 +20:exp:50:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-1 +depends_on:4:24:6:21 +20:exp:50:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:24:6:21 +20:exp:50:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:24:6:21 +20:exp:50:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-1, EtM +depends_on:4:24:6:21:20 +20:exp:50:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:24:6:21:20 +20:exp:50:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:24:6:21:20 +20:exp:50:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-1, short tag +depends_on:4:24:6:21 +20:exp:50:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:24:6:21 +20:exp:50:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:24:6:21 +20:exp:50:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:24:6:21:20 +20:exp:50:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:24:6:21:20 +20:exp:50:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:24:6:21:20 +20:exp:50:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, MD5 +depends_on:4:24:6:22 +20:exp:50:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:24:6:22 +20:exp:50:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:24:6:22 +20:exp:50:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, MD5, EtM +depends_on:4:24:6:22:20 +20:exp:50:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:24:6:22:20 +20:exp:50:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:24:6:22:20 +20:exp:50:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, MD5, short tag +depends_on:4:24:6:22 +20:exp:50:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:24:6:22 +20:exp:50:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:24:6:22 +20:exp:50:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, MD5, short tag, EtM +depends_on:4:24:6:22:20 +20:exp:50:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:24:6:22:20 +20:exp:50:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, BLOWFISH-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:24:6:22:20 +20:exp:50:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, SHA-384 +depends_on:4:24:5:7:8 +20:exp:50:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, SHA-384, EtM +depends_on:4:24:5:7:8:20 +20:exp:50:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, SHA-384, short tag +depends_on:4:24:5:7:8 +20:exp:50:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:24:5:7:8:20 +20:exp:50:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, SHA-256 +depends_on:4:24:5:13 +20:exp:50:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, SHA-256, EtM +depends_on:4:24:5:13:20 +20:exp:50:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, SHA-256, short tag +depends_on:4:24:5:13 +20:exp:50:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:24:5:13:20 +20:exp:50:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, SHA-1 +depends_on:4:24:5:21 +20:exp:50:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, SHA-1, EtM +depends_on:4:24:5:21:20 +20:exp:50:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, SHA-1, short tag +depends_on:4:24:5:21 +20:exp:50:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:24:5:21:20 +20:exp:50:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, MD5 +depends_on:4:24:5:22 +20:exp:50:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, MD5, EtM +depends_on:4:24:5:22:20 +20:exp:50:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, MD5, short tag +depends_on:4:24:5:22 +20:exp:50:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.1, MD5, short tag, EtM +depends_on:4:24:5:22:20 +20:exp:50:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, SHA-384 +depends_on:4:24:3:7:8 +20:exp:50:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, SHA-384, EtM +depends_on:4:24:3:7:8:20 +20:exp:50:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, SHA-384, short tag +depends_on:4:24:3:7:8 +20:exp:50:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:24:3:7:8:20 +20:exp:50:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, SHA-256 +depends_on:4:24:3:13 +20:exp:50:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, SHA-256, EtM +depends_on:4:24:3:13:20 +20:exp:50:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, SHA-256, short tag +depends_on:4:24:3:13 +20:exp:50:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:24:3:13:20 +20:exp:50:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, SHA-1 +depends_on:4:24:3:21 +20:exp:50:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, SHA-1, EtM +depends_on:4:24:3:21:20 +20:exp:50:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, SHA-1, short tag +depends_on:4:24:3:21 +20:exp:50:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:24:3:21:20 +20:exp:50:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, MD5 +depends_on:4:24:3:22 +20:exp:50:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, MD5, EtM +depends_on:4:24:3:22:20 +20:exp:50:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, MD5, short tag +depends_on:4:24:3:22 +20:exp:50:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, 1.0, MD5, short tag, EtM +depends_on:4:24:3:22:20 +20:exp:50:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, BLOWFISH-CBC, SSL3, SHA-1 +depends_on:4:24:0:21 +20:exp:50:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, BLOWFISH-CBC, SSL3, SHA-1, EtM +depends_on:4:24:0:21:20 +20:exp:50:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, BLOWFISH-CBC, SSL3, SHA-1, short tag +depends_on:4:24:0:21 +20:exp:50:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, BLOWFISH-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:24:0:21:20 +20:exp:50:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, BLOWFISH-CBC, SSL3, MD5 +depends_on:4:24:0:22 +20:exp:50:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, BLOWFISH-CBC, SSL3, MD5, EtM +depends_on:4:24:0:22:20 +20:exp:50:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, BLOWFISH-CBC, SSL3, MD5, short tag +depends_on:4:24:0:22 +20:exp:50:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, BLOWFISH-CBC, SSL3, MD5, short tag, EtM +depends_on:4:24:0:22:20 +20:exp:50:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, AES-128-GCM, 1.2 +depends_on:9:6:10 +20:exp:51:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-128-GCM, 1.3 +depends_on:9:25:10 +20:exp:51:exp:41:int:0:int:0:exp:52:int:0:int:0 + +Record crypt, AES-128-GCM, 1.2, CID 4+4 +depends_on:19:9:6:10 +20:exp:51:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-128-GCM, 1.2, CID 4+0 +depends_on:19:9:6:10 +20:exp:51:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-128-GCM, 1.2, short tag +depends_on:9:6:10 +20:exp:51:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-128-GCM, 1.2, short tag, CID 4+4 +depends_on:19:9:6:10 +20:exp:51:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-128-GCM, 1.2, short tag, CID 4+0 +depends_on:19:9:6:10 +20:exp:51:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-192-GCM, 1.2 +depends_on:9:6:10 +20:exp:53:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-192-GCM, 1.3 +depends_on:9:25:10 +20:exp:53:exp:41:int:0:int:0:exp:52:int:0:int:0 + +Record crypt, AES-192-GCM, 1.2, CID 4+4 +depends_on:19:9:6:10 +20:exp:53:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-192-GCM, 1.2, CID 4+0 +depends_on:19:9:6:10 +20:exp:53:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-192-GCM, 1.2, short tag +depends_on:9:6:10 +20:exp:53:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-192-GCM, 1.2, short tag, CID 4+4 +depends_on:19:9:6:10 +20:exp:53:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-192-GCM, 1.2, short tag, CID 4+0 +depends_on:19:9:6:10 +20:exp:53:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-256-GCM, 1.2 +depends_on:9:6:10 +20:exp:54:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-256-GCM, 1.3 +depends_on:9:25:10 +20:exp:54:exp:41:int:0:int:0:exp:52:int:0:int:0 + +Record crypt, AES-256-GCM, 1.2, CID 4+4 +depends_on:19:9:6:10 +20:exp:54:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-256-GCM, 1.2, CID 4+0 +depends_on:19:9:6:10 +20:exp:54:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-256-GCM, 1.2, short tag +depends_on:9:6:10 +20:exp:54:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-256-GCM, 1.2, short tag, CID 4+4 +depends_on:19:9:6:10 +20:exp:54:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-256-GCM, 1.2, short tag, CID 4+0 +depends_on:19:9:6:10 +20:exp:54:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-GCM, 1.2 +depends_on:16:6:10 +20:exp:55:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-GCM, 1.2, CID 4+4 +depends_on:19:16:6:10 +20:exp:55:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-GCM, 1.2, CID 4+0 +depends_on:19:16:6:10 +20:exp:55:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-GCM, 1.2, short tag +depends_on:16:6:10 +20:exp:55:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-GCM, 1.2, short tag, CID 4+4 +depends_on:19:16:6:10 +20:exp:55:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-GCM, 1.2, short tag, CID 4+0 +depends_on:19:16:6:10 +20:exp:55:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-GCM, 1.2 +depends_on:16:6:10 +20:exp:56:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-GCM, 1.2, CID 4+4 +depends_on:19:16:6:10 +20:exp:56:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-GCM, 1.2, CID 4+0 +depends_on:19:16:6:10 +20:exp:56:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-GCM, 1.2, short tag +depends_on:16:6:10 +20:exp:56:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-GCM, 1.2, short tag, CID 4+4 +depends_on:19:16:6:10 +20:exp:56:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-GCM, 1.2, short tag, CID 4+0 +depends_on:19:16:6:10 +20:exp:56:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-GCM, 1.2 +depends_on:16:6:10 +20:exp:57:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-GCM, 1.2, CID 4+4 +depends_on:19:16:6:10 +20:exp:57:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-GCM, 1.2, CID 4+0 +depends_on:19:16:6:10 +20:exp:57:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-GCM, 1.2, short tag +depends_on:16:6:10 +20:exp:57:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-GCM, 1.2, short tag, CID 4+4 +depends_on:19:16:6:10 +20:exp:57:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-GCM, 1.2, short tag, CID 4+0 +depends_on:19:16:6:10 +20:exp:57:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-128-CCM, 1.2 +depends_on:9:6:12 +20:exp:58:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-128-CCM, 1.3 +depends_on:9:25:12 +20:exp:58:exp:41:int:0:int:0:exp:52:int:0:int:0 + +Record crypt, AES-128-CCM, 1.2, CID 4+4 +depends_on:19:9:6:12 +20:exp:58:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-128-CCM, 1.2, CID 4+0 +depends_on:19:9:6:12 +20:exp:58:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-128-CCM, 1.2, short tag +depends_on:9:6:12 +20:exp:58:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-128-CCM, 1.2, short tag, CID 4+4 +depends_on:19:9:6:12 +20:exp:58:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-128-CCM, 1.2, short tag, CID 4+0 +depends_on:19:9:6:12 +20:exp:58:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-192-CCM, 1.2 +depends_on:9:6:12 +20:exp:59:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-192-CCM, 1.3 +depends_on:9:25:12 +20:exp:59:exp:41:int:0:int:0:exp:52:int:0:int:0 + +Record crypt, AES-192-CCM, 1.2, CID 4+4 +depends_on:19:9:6:12 +20:exp:59:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-192-CCM, 1.2, CID 4+0 +depends_on:19:9:6:12 +20:exp:59:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-192-CCM, 1.2, short tag +depends_on:9:6:12 +20:exp:59:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-192-CCM, 1.2, short tag, CID 4+4 +depends_on:19:9:6:12 +20:exp:59:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-192-CCM, 1.2, short tag, CID 4+0 +depends_on:19:9:6:12 +20:exp:59:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, AES-256-CCM, 1.2 +depends_on:9:6:12 +20:exp:60:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, AES-256-CCM, 1.3 +depends_on:9:25:12 +20:exp:60:exp:41:int:0:int:0:exp:52:int:0:int:0 + +Record crypt, AES-256-CCM, 1.2, CID 4+4 +depends_on:19:9:6:12 +20:exp:60:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, AES-256-CCM, 1.2, CID 4+0 +depends_on:19:9:6:12 +20:exp:60:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, AES-256-CCM, 1.2, short tag +depends_on:9:6:12 +20:exp:60:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, AES-256-CCM, 1.2, short tag, CID 4+4 +depends_on:19:9:6:12 +20:exp:60:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, AES-256-CCM, 1.2, short tag, CID 4+0 +depends_on:19:9:6:12 +20:exp:60:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CCM, 1.2 +depends_on:16:6:12 +20:exp:61:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CCM, 1.2, CID 4+4 +depends_on:19:16:6:12 +20:exp:61:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CCM, 1.2, CID 4+0 +depends_on:19:16:6:12 +20:exp:61:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-128-CCM, 1.2, short tag +depends_on:16:6:12 +20:exp:61:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-128-CCM, 1.2, short tag, CID 4+4 +depends_on:19:16:6:12 +20:exp:61:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-128-CCM, 1.2, short tag, CID 4+0 +depends_on:19:16:6:12 +20:exp:61:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CCM, 1.2 +depends_on:16:6:12 +20:exp:62:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CCM, 1.2, CID 4+4 +depends_on:19:16:6:12 +20:exp:62:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CCM, 1.2, CID 4+0 +depends_on:19:16:6:12 +20:exp:62:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-192-CCM, 1.2, short tag +depends_on:16:6:12 +20:exp:62:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-192-CCM, 1.2, short tag, CID 4+4 +depends_on:19:16:6:12 +20:exp:62:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-192-CCM, 1.2, short tag, CID 4+0 +depends_on:19:16:6:12 +20:exp:62:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CCM, 1.2 +depends_on:16:6:12 +20:exp:63:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CCM, 1.2, CID 4+4 +depends_on:19:16:6:12 +20:exp:63:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CCM, 1.2, CID 4+0 +depends_on:19:16:6:12 +20:exp:63:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, CAMELLIA-256-CCM, 1.2, short tag +depends_on:16:6:12 +20:exp:63:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, CAMELLIA-256-CCM, 1.2, short tag, CID 4+4 +depends_on:19:16:6:12 +20:exp:63:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, CAMELLIA-256-CCM, 1.2, short tag, CID 4+0 +depends_on:19:16:6:12 +20:exp:63:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, SHA-384 +depends_on:26:6:7:8 +20:exp:64:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, SHA-384, CID 4+4 +depends_on:19:26:6:7:8 +20:exp:64:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, SHA-384, CID 4+0 +depends_on:19:26:6:7:8 +20:exp:64:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, SHA-384, EtM +depends_on:26:6:7:8:20 +20:exp:64:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:26:6:7:8:20 +20:exp:64:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:26:6:7:8:20 +20:exp:64:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, SHA-384, short tag +depends_on:26:6:7:8 +20:exp:64:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:26:6:7:8 +20:exp:64:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:26:6:7:8 +20:exp:64:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, SHA-384, short tag, EtM +depends_on:26:6:7:8:20 +20:exp:64:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:26:6:7:8:20 +20:exp:64:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:26:6:7:8:20 +20:exp:64:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, SHA-256 +depends_on:26:6:13 +20:exp:64:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, SHA-256, CID 4+4 +depends_on:19:26:6:13 +20:exp:64:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, SHA-256, CID 4+0 +depends_on:19:26:6:13 +20:exp:64:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, SHA-256, EtM +depends_on:26:6:13:20 +20:exp:64:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:26:6:13:20 +20:exp:64:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:26:6:13:20 +20:exp:64:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, SHA-256, short tag +depends_on:26:6:13 +20:exp:64:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:26:6:13 +20:exp:64:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:26:6:13 +20:exp:64:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, SHA-256, short tag, EtM +depends_on:26:6:13:20 +20:exp:64:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:26:6:13:20 +20:exp:64:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:26:6:13:20 +20:exp:64:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, SHA-1 +depends_on:26:6:21 +20:exp:64:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, SHA-1, CID 4+4 +depends_on:19:26:6:21 +20:exp:64:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, SHA-1, CID 4+0 +depends_on:19:26:6:21 +20:exp:64:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, SHA-1, EtM +depends_on:26:6:21:20 +20:exp:64:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:26:6:21:20 +20:exp:64:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:26:6:21:20 +20:exp:64:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, SHA-1, short tag +depends_on:26:6:21 +20:exp:64:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:26:6:21 +20:exp:64:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:26:6:21 +20:exp:64:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, SHA-1, short tag, EtM +depends_on:26:6:21:20 +20:exp:64:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:26:6:21:20 +20:exp:64:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:26:6:21:20 +20:exp:64:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, MD5 +depends_on:26:6:22 +20:exp:64:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, MD5, CID 4+4 +depends_on:19:26:6:22 +20:exp:64:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, MD5, CID 4+0 +depends_on:19:26:6:22 +20:exp:64:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, MD5, EtM +depends_on:26:6:22:20 +20:exp:64:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, MD5, EtM, CID 4+4 +depends_on:19:26:6:22:20 +20:exp:64:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, MD5, EtM, CID 4+0 +depends_on:19:26:6:22:20 +20:exp:64:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, MD5, short tag +depends_on:26:6:22 +20:exp:64:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, MD5, short tag, CID 4+4 +depends_on:19:26:6:22 +20:exp:64:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, MD5, short tag, CID 4+0 +depends_on:19:26:6:22 +20:exp:64:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.2, MD5, short tag, EtM +depends_on:26:6:22:20 +20:exp:64:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, ARC4-128, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:26:6:22:20 +20:exp:64:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, ARC4-128, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:26:6:22:20 +20:exp:64:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, ARC4-128, 1.1, SHA-384 +depends_on:26:5:7:8 +20:exp:64:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.1, SHA-384, EtM +depends_on:26:5:7:8:20 +20:exp:64:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.1, SHA-384, short tag +depends_on:26:5:7:8 +20:exp:64:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.1, SHA-384, short tag, EtM +depends_on:26:5:7:8:20 +20:exp:64:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.1, SHA-256 +depends_on:26:5:13 +20:exp:64:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.1, SHA-256, EtM +depends_on:26:5:13:20 +20:exp:64:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.1, SHA-256, short tag +depends_on:26:5:13 +20:exp:64:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.1, SHA-256, short tag, EtM +depends_on:26:5:13:20 +20:exp:64:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.1, SHA-1 +depends_on:26:5:21 +20:exp:64:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.1, SHA-1, EtM +depends_on:26:5:21:20 +20:exp:64:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.1, SHA-1, short tag +depends_on:26:5:21 +20:exp:64:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.1, SHA-1, short tag, EtM +depends_on:26:5:21:20 +20:exp:64:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.1, MD5 +depends_on:26:5:22 +20:exp:64:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.1, MD5, EtM +depends_on:26:5:22:20 +20:exp:64:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.1, MD5, short tag +depends_on:26:5:22 +20:exp:64:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.1, MD5, short tag, EtM +depends_on:26:5:22:20 +20:exp:64:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, ARC4-128, 1.0, SHA-384 +depends_on:26:3:7:8 +20:exp:64:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARC4-128, 1.0, SHA-384, EtM +depends_on:26:3:7:8:20 +20:exp:64:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARC4-128, 1.0, SHA-384, short tag +depends_on:26:3:7:8 +20:exp:64:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARC4-128, 1.0, SHA-384, short tag, EtM +depends_on:26:3:7:8:20 +20:exp:64:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARC4-128, 1.0, SHA-256 +depends_on:26:3:13 +20:exp:64:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARC4-128, 1.0, SHA-256, EtM +depends_on:26:3:13:20 +20:exp:64:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARC4-128, 1.0, SHA-256, short tag +depends_on:26:3:13 +20:exp:64:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARC4-128, 1.0, SHA-256, short tag, EtM +depends_on:26:3:13:20 +20:exp:64:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARC4-128, 1.0, SHA-1 +depends_on:26:3:21 +20:exp:64:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARC4-128, 1.0, SHA-1, EtM +depends_on:26:3:21:20 +20:exp:64:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARC4-128, 1.0, SHA-1, short tag +depends_on:26:3:21 +20:exp:64:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARC4-128, 1.0, SHA-1, short tag, EtM +depends_on:26:3:21:20 +20:exp:64:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARC4-128, 1.0, MD5 +depends_on:26:3:22 +20:exp:64:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, ARC4-128, 1.0, MD5, EtM +depends_on:26:3:22:20 +20:exp:64:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, ARC4-128, 1.0, MD5, short tag +depends_on:26:3:22 +20:exp:64:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, ARC4-128, 1.0, MD5, short tag, EtM +depends_on:26:3:22:20 +20:exp:64:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, ARC4-128, SSL3, SHA-1 +depends_on:26:0:21 +20:exp:64:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, ARC4-128, SSL3, SHA-1, EtM +depends_on:26:0:21:20 +20:exp:64:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, ARC4-128, SSL3, SHA-1, short tag +depends_on:26:0:21 +20:exp:64:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, ARC4-128, SSL3, SHA-1, short tag, EtM +depends_on:26:0:21:20 +20:exp:64:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, ARC4-128, SSL3, MD5 +depends_on:26:0:22 +20:exp:64:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, ARC4-128, SSL3, MD5, EtM +depends_on:26:0:22:20 +20:exp:64:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, ARC4-128, SSL3, MD5, short tag +depends_on:26:0:22 +20:exp:64:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, ARC4-128, SSL3, MD5, short tag, EtM +depends_on:26:0:22:20 +20:exp:64:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, NULL cipher, 1.2, SHA-384 +depends_on:27:6:7:8 +20:exp:65:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.2, SHA-384, EtM +depends_on:27:6:7:8:20 +20:exp:65:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.2, SHA-384, short tag +depends_on:27:6:7:8 +20:exp:65:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.2, SHA-384, short tag, EtM +depends_on:27:6:7:8:20 +20:exp:65:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.2, SHA-256 +depends_on:27:6:13 +20:exp:65:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.2, SHA-256, EtM +depends_on:27:6:13:20 +20:exp:65:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.2, SHA-256, short tag +depends_on:27:6:13 +20:exp:65:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.2, SHA-256, short tag, EtM +depends_on:27:6:13:20 +20:exp:65:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.2, SHA-1 +depends_on:27:6:21 +20:exp:65:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.2, SHA-1, EtM +depends_on:27:6:21:20 +20:exp:65:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.2, SHA-1, short tag +depends_on:27:6:21 +20:exp:65:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.2, SHA-1, short tag, EtM +depends_on:27:6:21:20 +20:exp:65:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.2, MD5 +depends_on:27:6:22 +20:exp:65:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.2, MD5, EtM +depends_on:27:6:22:20 +20:exp:65:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.2, MD5, short tag +depends_on:27:6:22 +20:exp:65:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.2, MD5, short tag, EtM +depends_on:27:6:22:20 +20:exp:65:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, NULL cipher, 1.1, SHA-384 +depends_on:27:5:7:8 +20:exp:65:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.1, SHA-384, EtM +depends_on:27:5:7:8:20 +20:exp:65:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.1, SHA-384, short tag +depends_on:27:5:7:8 +20:exp:65:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.1, SHA-384, short tag, EtM +depends_on:27:5:7:8:20 +20:exp:65:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.1, SHA-256 +depends_on:27:5:13 +20:exp:65:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.1, SHA-256, EtM +depends_on:27:5:13:20 +20:exp:65:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.1, SHA-256, short tag +depends_on:27:5:13 +20:exp:65:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.1, SHA-256, short tag, EtM +depends_on:27:5:13:20 +20:exp:65:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.1, SHA-1 +depends_on:27:5:21 +20:exp:65:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.1, SHA-1, EtM +depends_on:27:5:21:20 +20:exp:65:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.1, SHA-1, short tag +depends_on:27:5:21 +20:exp:65:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.1, SHA-1, short tag, EtM +depends_on:27:5:21:20 +20:exp:65:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.1, MD5 +depends_on:27:5:22 +20:exp:65:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.1, MD5, EtM +depends_on:27:5:22:20 +20:exp:65:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.1, MD5, short tag +depends_on:27:5:22 +20:exp:65:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.1, MD5, short tag, EtM +depends_on:27:5:22:20 +20:exp:65:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, NULL cipher, 1.0, SHA-384 +depends_on:27:3:7:8 +20:exp:65:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, NULL cipher, 1.0, SHA-384, EtM +depends_on:27:3:7:8:20 +20:exp:65:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, NULL cipher, 1.0, SHA-384, short tag +depends_on:27:3:7:8 +20:exp:65:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, NULL cipher, 1.0, SHA-384, short tag, EtM +depends_on:27:3:7:8:20 +20:exp:65:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, NULL cipher, 1.0, SHA-256 +depends_on:27:3:13 +20:exp:65:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, NULL cipher, 1.0, SHA-256, EtM +depends_on:27:3:13:20 +20:exp:65:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, NULL cipher, 1.0, SHA-256, short tag +depends_on:27:3:13 +20:exp:65:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, NULL cipher, 1.0, SHA-256, short tag, EtM +depends_on:27:3:13:20 +20:exp:65:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, NULL cipher, 1.0, SHA-1 +depends_on:27:3:21 +20:exp:65:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, NULL cipher, 1.0, SHA-1, EtM +depends_on:27:3:21:20 +20:exp:65:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, NULL cipher, 1.0, SHA-1, short tag +depends_on:27:3:21 +20:exp:65:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, NULL cipher, 1.0, SHA-1, short tag, EtM +depends_on:27:3:21:20 +20:exp:65:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, NULL cipher, 1.0, MD5 +depends_on:27:3:22 +20:exp:65:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, NULL cipher, 1.0, MD5, EtM +depends_on:27:3:22:20 +20:exp:65:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, NULL cipher, 1.0, MD5, short tag +depends_on:27:3:22 +20:exp:65:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, NULL cipher, 1.0, MD5, short tag, EtM +depends_on:27:3:22:20 +20:exp:65:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, NULL cipher, SSL3, SHA-1 +depends_on:27:0:21 +20:exp:65:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, NULL cipher, SSL3, SHA-1, EtM +depends_on:27:0:21:20 +20:exp:65:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, NULL cipher, SSL3, SHA-1, short tag +depends_on:27:0:21 +20:exp:65:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, NULL cipher, SSL3, SHA-1, short tag, EtM +depends_on:27:0:21:20 +20:exp:65:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, NULL cipher, SSL3, MD5 +depends_on:27:0:22 +20:exp:65:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, NULL cipher, SSL3, MD5, EtM +depends_on:27:0:22:20 +20:exp:65:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, NULL cipher, SSL3, MD5, short tag +depends_on:27:0:22 +20:exp:65:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, NULL cipher, SSL3, MD5, short tag, EtM +depends_on:27:0:22:20 +20:exp:65:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, ChachaPoly +depends_on:28:6 +20:exp:66:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, ChachaPoly, 1.3 +depends_on:28:25 +20:exp:66:exp:41:int:0:int:0:exp:52:int:0:int:0 + +Record crypt, little space, ChachaPoly +depends_on:28:6 +21:exp:66:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ChachaPoly, 1.3 +depends_on:28:25 +21:exp:66:exp:41:int:0:int:0:exp:52:int:0:int:0 + +Record crypt, little space, ChachaPoly, CID 4+4 +depends_on:19:28:6 +21:exp:66:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ChachaPoly, CID 4+0 +depends_on:19:28:6 +21:exp:66:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-384 +depends_on:4:9:6:7:8 +21:exp:37:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:9:6:7:8 +21:exp:37:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:9:6:7:8 +21:exp:37:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-384, EtM +depends_on:4:9:6:7:8:20 +21:exp:37:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:9:6:7:8:20 +21:exp:37:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:9:6:7:8:20 +21:exp:37:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-384, short tag +depends_on:4:9:6:7:8 +21:exp:37:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:9:6:7:8 +21:exp:37:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:9:6:7:8 +21:exp:37:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:9:6:7:8:20 +21:exp:37:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:7:8:20 +21:exp:37:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:7:8:20 +21:exp:37:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-256 +depends_on:4:9:6:13 +21:exp:37:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:9:6:13 +21:exp:37:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:9:6:13 +21:exp:37:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-256, EtM +depends_on:4:9:6:13:20 +21:exp:37:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:9:6:13:20 +21:exp:37:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:9:6:13:20 +21:exp:37:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-256, short tag +depends_on:4:9:6:13 +21:exp:37:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:9:6:13 +21:exp:37:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:9:6:13 +21:exp:37:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:9:6:13:20 +21:exp:37:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:13:20 +21:exp:37:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:13:20 +21:exp:37:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-1 +depends_on:4:9:6:21 +21:exp:37:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:9:6:21 +21:exp:37:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:9:6:21 +21:exp:37:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-1, EtM +depends_on:4:9:6:21:20 +21:exp:37:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:9:6:21:20 +21:exp:37:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:9:6:21:20 +21:exp:37:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-1, short tag +depends_on:4:9:6:21 +21:exp:37:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:9:6:21 +21:exp:37:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:9:6:21 +21:exp:37:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:9:6:21:20 +21:exp:37:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:21:20 +21:exp:37:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:21:20 +21:exp:37:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, MD5 +depends_on:4:9:6:22 +21:exp:37:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:9:6:22 +21:exp:37:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:9:6:22 +21:exp:37:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, MD5, EtM +depends_on:4:9:6:22:20 +21:exp:37:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:9:6:22:20 +21:exp:37:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:9:6:22:20 +21:exp:37:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, MD5, short tag +depends_on:4:9:6:22 +21:exp:37:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:9:6:22 +21:exp:37:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:9:6:22 +21:exp:37:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, MD5, short tag, EtM +depends_on:4:9:6:22:20 +21:exp:37:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:22:20 +21:exp:37:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:22:20 +21:exp:37:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, SHA-384 +depends_on:4:9:5:7:8 +21:exp:37:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, SHA-384, EtM +depends_on:4:9:5:7:8:20 +21:exp:37:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, SHA-384, short tag +depends_on:4:9:5:7:8 +21:exp:37:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:9:5:7:8:20 +21:exp:37:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, SHA-256 +depends_on:4:9:5:13 +21:exp:37:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, SHA-256, EtM +depends_on:4:9:5:13:20 +21:exp:37:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, SHA-256, short tag +depends_on:4:9:5:13 +21:exp:37:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:9:5:13:20 +21:exp:37:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, SHA-1 +depends_on:4:9:5:21 +21:exp:37:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, SHA-1, EtM +depends_on:4:9:5:21:20 +21:exp:37:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, SHA-1, short tag +depends_on:4:9:5:21 +21:exp:37:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:9:5:21:20 +21:exp:37:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, MD5 +depends_on:4:9:5:22 +21:exp:37:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, MD5, EtM +depends_on:4:9:5:22:20 +21:exp:37:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, MD5, short tag +depends_on:4:9:5:22 +21:exp:37:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.1, MD5, short tag, EtM +depends_on:4:9:5:22:20 +21:exp:37:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, SHA-384 +depends_on:4:9:3:7:8 +21:exp:37:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, SHA-384, EtM +depends_on:4:9:3:7:8:20 +21:exp:37:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, SHA-384, short tag +depends_on:4:9:3:7:8 +21:exp:37:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:9:3:7:8:20 +21:exp:37:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, SHA-256 +depends_on:4:9:3:13 +21:exp:37:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, SHA-256, EtM +depends_on:4:9:3:13:20 +21:exp:37:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, SHA-256, short tag +depends_on:4:9:3:13 +21:exp:37:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:9:3:13:20 +21:exp:37:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, SHA-1 +depends_on:4:9:3:21 +21:exp:37:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, SHA-1, EtM +depends_on:4:9:3:21:20 +21:exp:37:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, SHA-1, short tag +depends_on:4:9:3:21 +21:exp:37:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:9:3:21:20 +21:exp:37:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, MD5 +depends_on:4:9:3:22 +21:exp:37:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, MD5, EtM +depends_on:4:9:3:22:20 +21:exp:37:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, MD5, short tag +depends_on:4:9:3:22 +21:exp:37:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, 1.0, MD5, short tag, EtM +depends_on:4:9:3:22:20 +21:exp:37:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-128-CBC, SSL3, SHA-1 +depends_on:4:9:0:21 +21:exp:37:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, AES-128-CBC, SSL3, SHA-1, EtM +depends_on:4:9:0:21:20 +21:exp:37:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, AES-128-CBC, SSL3, SHA-1, short tag +depends_on:4:9:0:21 +21:exp:37:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, AES-128-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:9:0:21:20 +21:exp:37:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, AES-128-CBC, SSL3, MD5 +depends_on:4:9:0:22 +21:exp:37:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, AES-128-CBC, SSL3, MD5, EtM +depends_on:4:9:0:22:20 +21:exp:37:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, AES-128-CBC, SSL3, MD5, short tag +depends_on:4:9:0:22 +21:exp:37:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, AES-128-CBC, SSL3, MD5, short tag, EtM +depends_on:4:9:0:22:20 +21:exp:37:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-384 +depends_on:4:9:6:7:8 +21:exp:42:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:9:6:7:8 +21:exp:42:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:9:6:7:8 +21:exp:42:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-384, EtM +depends_on:4:9:6:7:8:20 +21:exp:42:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:9:6:7:8:20 +21:exp:42:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:9:6:7:8:20 +21:exp:42:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-384, short tag +depends_on:4:9:6:7:8 +21:exp:42:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:9:6:7:8 +21:exp:42:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:9:6:7:8 +21:exp:42:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:9:6:7:8:20 +21:exp:42:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:7:8:20 +21:exp:42:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:7:8:20 +21:exp:42:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-256 +depends_on:4:9:6:13 +21:exp:42:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:9:6:13 +21:exp:42:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:9:6:13 +21:exp:42:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-256, EtM +depends_on:4:9:6:13:20 +21:exp:42:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:9:6:13:20 +21:exp:42:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:9:6:13:20 +21:exp:42:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-256, short tag +depends_on:4:9:6:13 +21:exp:42:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:9:6:13 +21:exp:42:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:9:6:13 +21:exp:42:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:9:6:13:20 +21:exp:42:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:13:20 +21:exp:42:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:13:20 +21:exp:42:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-1 +depends_on:4:9:6:21 +21:exp:42:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:9:6:21 +21:exp:42:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:9:6:21 +21:exp:42:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-1, EtM +depends_on:4:9:6:21:20 +21:exp:42:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:9:6:21:20 +21:exp:42:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:9:6:21:20 +21:exp:42:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-1, short tag +depends_on:4:9:6:21 +21:exp:42:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:9:6:21 +21:exp:42:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:9:6:21 +21:exp:42:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:9:6:21:20 +21:exp:42:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:21:20 +21:exp:42:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:21:20 +21:exp:42:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, MD5 +depends_on:4:9:6:22 +21:exp:42:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:9:6:22 +21:exp:42:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:9:6:22 +21:exp:42:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, MD5, EtM +depends_on:4:9:6:22:20 +21:exp:42:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:9:6:22:20 +21:exp:42:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:9:6:22:20 +21:exp:42:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, MD5, short tag +depends_on:4:9:6:22 +21:exp:42:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:9:6:22 +21:exp:42:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:9:6:22 +21:exp:42:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, MD5, short tag, EtM +depends_on:4:9:6:22:20 +21:exp:42:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:22:20 +21:exp:42:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:22:20 +21:exp:42:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, SHA-384 +depends_on:4:9:5:7:8 +21:exp:42:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, SHA-384, EtM +depends_on:4:9:5:7:8:20 +21:exp:42:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, SHA-384, short tag +depends_on:4:9:5:7:8 +21:exp:42:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:9:5:7:8:20 +21:exp:42:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, SHA-256 +depends_on:4:9:5:13 +21:exp:42:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, SHA-256, EtM +depends_on:4:9:5:13:20 +21:exp:42:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, SHA-256, short tag +depends_on:4:9:5:13 +21:exp:42:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:9:5:13:20 +21:exp:42:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, SHA-1 +depends_on:4:9:5:21 +21:exp:42:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, SHA-1, EtM +depends_on:4:9:5:21:20 +21:exp:42:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, SHA-1, short tag +depends_on:4:9:5:21 +21:exp:42:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:9:5:21:20 +21:exp:42:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, MD5 +depends_on:4:9:5:22 +21:exp:42:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, MD5, EtM +depends_on:4:9:5:22:20 +21:exp:42:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, MD5, short tag +depends_on:4:9:5:22 +21:exp:42:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.1, MD5, short tag, EtM +depends_on:4:9:5:22:20 +21:exp:42:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, SHA-384 +depends_on:4:9:3:7:8 +21:exp:42:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, SHA-384, EtM +depends_on:4:9:3:7:8:20 +21:exp:42:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, SHA-384, short tag +depends_on:4:9:3:7:8 +21:exp:42:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:9:3:7:8:20 +21:exp:42:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, SHA-256 +depends_on:4:9:3:13 +21:exp:42:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, SHA-256, EtM +depends_on:4:9:3:13:20 +21:exp:42:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, SHA-256, short tag +depends_on:4:9:3:13 +21:exp:42:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:9:3:13:20 +21:exp:42:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, SHA-1 +depends_on:4:9:3:21 +21:exp:42:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, SHA-1, EtM +depends_on:4:9:3:21:20 +21:exp:42:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, SHA-1, short tag +depends_on:4:9:3:21 +21:exp:42:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:9:3:21:20 +21:exp:42:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, MD5 +depends_on:4:9:3:22 +21:exp:42:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, MD5, EtM +depends_on:4:9:3:22:20 +21:exp:42:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, MD5, short tag +depends_on:4:9:3:22 +21:exp:42:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, 1.0, MD5, short tag, EtM +depends_on:4:9:3:22:20 +21:exp:42:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-192-CBC, SSL3, SHA-1 +depends_on:4:9:0:21 +21:exp:42:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, AES-192-CBC, SSL3, SHA-1, EtM +depends_on:4:9:0:21:20 +21:exp:42:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, AES-192-CBC, SSL3, SHA-1, short tag +depends_on:4:9:0:21 +21:exp:42:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, AES-192-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:9:0:21:20 +21:exp:42:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, AES-192-CBC, SSL3, MD5 +depends_on:4:9:0:22 +21:exp:42:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, AES-192-CBC, SSL3, MD5, EtM +depends_on:4:9:0:22:20 +21:exp:42:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, AES-192-CBC, SSL3, MD5, short tag +depends_on:4:9:0:22 +21:exp:42:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, AES-192-CBC, SSL3, MD5, short tag, EtM +depends_on:4:9:0:22:20 +21:exp:42:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-384 +depends_on:4:9:6:7:8 +21:exp:43:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:9:6:7:8 +21:exp:43:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:9:6:7:8 +21:exp:43:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-384, EtM +depends_on:4:9:6:7:8:20 +21:exp:43:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:9:6:7:8:20 +21:exp:43:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:9:6:7:8:20 +21:exp:43:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-384, short tag +depends_on:4:9:6:7:8 +21:exp:43:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:9:6:7:8 +21:exp:43:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:9:6:7:8 +21:exp:43:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:9:6:7:8:20 +21:exp:43:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:7:8:20 +21:exp:43:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:7:8:20 +21:exp:43:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-256 +depends_on:4:9:6:13 +21:exp:43:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:9:6:13 +21:exp:43:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:9:6:13 +21:exp:43:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-256, EtM +depends_on:4:9:6:13:20 +21:exp:43:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:9:6:13:20 +21:exp:43:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:9:6:13:20 +21:exp:43:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-256, short tag +depends_on:4:9:6:13 +21:exp:43:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:9:6:13 +21:exp:43:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:9:6:13 +21:exp:43:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:9:6:13:20 +21:exp:43:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:13:20 +21:exp:43:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:13:20 +21:exp:43:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-1 +depends_on:4:9:6:21 +21:exp:43:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:9:6:21 +21:exp:43:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:9:6:21 +21:exp:43:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-1, EtM +depends_on:4:9:6:21:20 +21:exp:43:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:9:6:21:20 +21:exp:43:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:9:6:21:20 +21:exp:43:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-1, short tag +depends_on:4:9:6:21 +21:exp:43:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:9:6:21 +21:exp:43:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:9:6:21 +21:exp:43:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:9:6:21:20 +21:exp:43:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:21:20 +21:exp:43:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:21:20 +21:exp:43:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, MD5 +depends_on:4:9:6:22 +21:exp:43:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:9:6:22 +21:exp:43:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:9:6:22 +21:exp:43:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, MD5, EtM +depends_on:4:9:6:22:20 +21:exp:43:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:9:6:22:20 +21:exp:43:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:9:6:22:20 +21:exp:43:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, MD5, short tag +depends_on:4:9:6:22 +21:exp:43:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:9:6:22 +21:exp:43:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:9:6:22 +21:exp:43:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, MD5, short tag, EtM +depends_on:4:9:6:22:20 +21:exp:43:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:9:6:22:20 +21:exp:43:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:9:6:22:20 +21:exp:43:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, SHA-384 +depends_on:4:9:5:7:8 +21:exp:43:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, SHA-384, EtM +depends_on:4:9:5:7:8:20 +21:exp:43:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, SHA-384, short tag +depends_on:4:9:5:7:8 +21:exp:43:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:9:5:7:8:20 +21:exp:43:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, SHA-256 +depends_on:4:9:5:13 +21:exp:43:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, SHA-256, EtM +depends_on:4:9:5:13:20 +21:exp:43:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, SHA-256, short tag +depends_on:4:9:5:13 +21:exp:43:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:9:5:13:20 +21:exp:43:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, SHA-1 +depends_on:4:9:5:21 +21:exp:43:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, SHA-1, EtM +depends_on:4:9:5:21:20 +21:exp:43:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, SHA-1, short tag +depends_on:4:9:5:21 +21:exp:43:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:9:5:21:20 +21:exp:43:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, MD5 +depends_on:4:9:5:22 +21:exp:43:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, MD5, EtM +depends_on:4:9:5:22:20 +21:exp:43:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, MD5, short tag +depends_on:4:9:5:22 +21:exp:43:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.1, MD5, short tag, EtM +depends_on:4:9:5:22:20 +21:exp:43:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, SHA-384 +depends_on:4:9:3:7:8 +21:exp:43:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, SHA-384, EtM +depends_on:4:9:3:7:8:20 +21:exp:43:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, SHA-384, short tag +depends_on:4:9:3:7:8 +21:exp:43:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:9:3:7:8:20 +21:exp:43:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, SHA-256 +depends_on:4:9:3:13 +21:exp:43:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, SHA-256, EtM +depends_on:4:9:3:13:20 +21:exp:43:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, SHA-256, short tag +depends_on:4:9:3:13 +21:exp:43:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:9:3:13:20 +21:exp:43:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, SHA-1 +depends_on:4:9:3:21 +21:exp:43:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, SHA-1, EtM +depends_on:4:9:3:21:20 +21:exp:43:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, SHA-1, short tag +depends_on:4:9:3:21 +21:exp:43:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:9:3:21:20 +21:exp:43:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, MD5 +depends_on:4:9:3:22 +21:exp:43:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, MD5, EtM +depends_on:4:9:3:22:20 +21:exp:43:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, MD5, short tag +depends_on:4:9:3:22 +21:exp:43:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, 1.0, MD5, short tag, EtM +depends_on:4:9:3:22:20 +21:exp:43:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, AES-256-CBC, SSL3, SHA-1 +depends_on:4:9:0:21 +21:exp:43:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, AES-256-CBC, SSL3, SHA-1, EtM +depends_on:4:9:0:21:20 +21:exp:43:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, AES-256-CBC, SSL3, SHA-1, short tag +depends_on:4:9:0:21 +21:exp:43:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, AES-256-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:9:0:21:20 +21:exp:43:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, AES-256-CBC, SSL3, MD5 +depends_on:4:9:0:22 +21:exp:43:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, AES-256-CBC, SSL3, MD5, EtM +depends_on:4:9:0:22:20 +21:exp:43:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, AES-256-CBC, SSL3, MD5, short tag +depends_on:4:9:0:22 +21:exp:43:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, AES-256-CBC, SSL3, MD5, short tag, EtM +depends_on:4:9:0:22:20 +21:exp:43:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-384 +depends_on:4:23:6:7:8 +21:exp:44:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:23:6:7:8 +21:exp:44:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:23:6:7:8 +21:exp:44:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-384, EtM +depends_on:4:23:6:7:8:20 +21:exp:44:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:23:6:7:8:20 +21:exp:44:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:23:6:7:8:20 +21:exp:44:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-384, short tag +depends_on:4:23:6:7:8 +21:exp:44:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:23:6:7:8 +21:exp:44:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:23:6:7:8 +21:exp:44:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:23:6:7:8:20 +21:exp:44:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:7:8:20 +21:exp:44:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:7:8:20 +21:exp:44:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-256 +depends_on:4:23:6:13 +21:exp:44:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:23:6:13 +21:exp:44:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:23:6:13 +21:exp:44:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-256, EtM +depends_on:4:23:6:13:20 +21:exp:44:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:23:6:13:20 +21:exp:44:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:23:6:13:20 +21:exp:44:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-256, short tag +depends_on:4:23:6:13 +21:exp:44:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:23:6:13 +21:exp:44:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:23:6:13 +21:exp:44:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:23:6:13:20 +21:exp:44:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:13:20 +21:exp:44:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:13:20 +21:exp:44:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-1 +depends_on:4:23:6:21 +21:exp:44:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:23:6:21 +21:exp:44:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:23:6:21 +21:exp:44:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-1, EtM +depends_on:4:23:6:21:20 +21:exp:44:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:23:6:21:20 +21:exp:44:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:23:6:21:20 +21:exp:44:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-1, short tag +depends_on:4:23:6:21 +21:exp:44:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:23:6:21 +21:exp:44:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:23:6:21 +21:exp:44:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:23:6:21:20 +21:exp:44:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:21:20 +21:exp:44:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:21:20 +21:exp:44:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, MD5 +depends_on:4:23:6:22 +21:exp:44:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:23:6:22 +21:exp:44:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:23:6:22 +21:exp:44:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, MD5, EtM +depends_on:4:23:6:22:20 +21:exp:44:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:23:6:22:20 +21:exp:44:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:23:6:22:20 +21:exp:44:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, MD5, short tag +depends_on:4:23:6:22 +21:exp:44:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:23:6:22 +21:exp:44:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:23:6:22 +21:exp:44:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, MD5, short tag, EtM +depends_on:4:23:6:22:20 +21:exp:44:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:22:20 +21:exp:44:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-128-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:22:20 +21:exp:44:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, SHA-384 +depends_on:4:23:5:7:8 +21:exp:44:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, SHA-384, EtM +depends_on:4:23:5:7:8:20 +21:exp:44:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, SHA-384, short tag +depends_on:4:23:5:7:8 +21:exp:44:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:23:5:7:8:20 +21:exp:44:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, SHA-256 +depends_on:4:23:5:13 +21:exp:44:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, SHA-256, EtM +depends_on:4:23:5:13:20 +21:exp:44:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, SHA-256, short tag +depends_on:4:23:5:13 +21:exp:44:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:23:5:13:20 +21:exp:44:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, SHA-1 +depends_on:4:23:5:21 +21:exp:44:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, SHA-1, EtM +depends_on:4:23:5:21:20 +21:exp:44:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, SHA-1, short tag +depends_on:4:23:5:21 +21:exp:44:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:23:5:21:20 +21:exp:44:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, MD5 +depends_on:4:23:5:22 +21:exp:44:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, MD5, EtM +depends_on:4:23:5:22:20 +21:exp:44:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, MD5, short tag +depends_on:4:23:5:22 +21:exp:44:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.1, MD5, short tag, EtM +depends_on:4:23:5:22:20 +21:exp:44:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, SHA-384 +depends_on:4:23:3:7:8 +21:exp:44:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, SHA-384, EtM +depends_on:4:23:3:7:8:20 +21:exp:44:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, SHA-384, short tag +depends_on:4:23:3:7:8 +21:exp:44:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:23:3:7:8:20 +21:exp:44:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, SHA-256 +depends_on:4:23:3:13 +21:exp:44:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, SHA-256, EtM +depends_on:4:23:3:13:20 +21:exp:44:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, SHA-256, short tag +depends_on:4:23:3:13 +21:exp:44:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:23:3:13:20 +21:exp:44:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, SHA-1 +depends_on:4:23:3:21 +21:exp:44:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, SHA-1, EtM +depends_on:4:23:3:21:20 +21:exp:44:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, SHA-1, short tag +depends_on:4:23:3:21 +21:exp:44:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:23:3:21:20 +21:exp:44:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, MD5 +depends_on:4:23:3:22 +21:exp:44:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, MD5, EtM +depends_on:4:23:3:22:20 +21:exp:44:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, MD5, short tag +depends_on:4:23:3:22 +21:exp:44:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, 1.0, MD5, short tag, EtM +depends_on:4:23:3:22:20 +21:exp:44:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, SSL3, SHA-1 +depends_on:4:23:0:21 +21:exp:44:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, SSL3, SHA-1, EtM +depends_on:4:23:0:21:20 +21:exp:44:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, SSL3, SHA-1, short tag +depends_on:4:23:0:21 +21:exp:44:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:23:0:21:20 +21:exp:44:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, SSL3, MD5 +depends_on:4:23:0:22 +21:exp:44:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, SSL3, MD5, EtM +depends_on:4:23:0:22:20 +21:exp:44:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, SSL3, MD5, short tag +depends_on:4:23:0:22 +21:exp:44:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-128-CBC, SSL3, MD5, short tag, EtM +depends_on:4:23:0:22:20 +21:exp:44:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-384 +depends_on:4:23:6:7:8 +21:exp:45:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:23:6:7:8 +21:exp:45:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:23:6:7:8 +21:exp:45:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-384, EtM +depends_on:4:23:6:7:8:20 +21:exp:45:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:23:6:7:8:20 +21:exp:45:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:23:6:7:8:20 +21:exp:45:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-384, short tag +depends_on:4:23:6:7:8 +21:exp:45:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:23:6:7:8 +21:exp:45:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:23:6:7:8 +21:exp:45:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:23:6:7:8:20 +21:exp:45:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:7:8:20 +21:exp:45:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:7:8:20 +21:exp:45:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-256 +depends_on:4:23:6:13 +21:exp:45:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:23:6:13 +21:exp:45:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:23:6:13 +21:exp:45:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-256, EtM +depends_on:4:23:6:13:20 +21:exp:45:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:23:6:13:20 +21:exp:45:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:23:6:13:20 +21:exp:45:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-256, short tag +depends_on:4:23:6:13 +21:exp:45:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:23:6:13 +21:exp:45:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:23:6:13 +21:exp:45:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:23:6:13:20 +21:exp:45:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:13:20 +21:exp:45:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:13:20 +21:exp:45:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-1 +depends_on:4:23:6:21 +21:exp:45:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:23:6:21 +21:exp:45:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:23:6:21 +21:exp:45:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-1, EtM +depends_on:4:23:6:21:20 +21:exp:45:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:23:6:21:20 +21:exp:45:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:23:6:21:20 +21:exp:45:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-1, short tag +depends_on:4:23:6:21 +21:exp:45:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:23:6:21 +21:exp:45:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:23:6:21 +21:exp:45:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:23:6:21:20 +21:exp:45:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:21:20 +21:exp:45:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:21:20 +21:exp:45:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, MD5 +depends_on:4:23:6:22 +21:exp:45:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:23:6:22 +21:exp:45:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:23:6:22 +21:exp:45:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, MD5, EtM +depends_on:4:23:6:22:20 +21:exp:45:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:23:6:22:20 +21:exp:45:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:23:6:22:20 +21:exp:45:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, MD5, short tag +depends_on:4:23:6:22 +21:exp:45:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:23:6:22 +21:exp:45:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:23:6:22 +21:exp:45:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, MD5, short tag, EtM +depends_on:4:23:6:22:20 +21:exp:45:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:22:20 +21:exp:45:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-192-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:22:20 +21:exp:45:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, SHA-384 +depends_on:4:23:5:7:8 +21:exp:45:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, SHA-384, EtM +depends_on:4:23:5:7:8:20 +21:exp:45:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, SHA-384, short tag +depends_on:4:23:5:7:8 +21:exp:45:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:23:5:7:8:20 +21:exp:45:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, SHA-256 +depends_on:4:23:5:13 +21:exp:45:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, SHA-256, EtM +depends_on:4:23:5:13:20 +21:exp:45:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, SHA-256, short tag +depends_on:4:23:5:13 +21:exp:45:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:23:5:13:20 +21:exp:45:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, SHA-1 +depends_on:4:23:5:21 +21:exp:45:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, SHA-1, EtM +depends_on:4:23:5:21:20 +21:exp:45:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, SHA-1, short tag +depends_on:4:23:5:21 +21:exp:45:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:23:5:21:20 +21:exp:45:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, MD5 +depends_on:4:23:5:22 +21:exp:45:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, MD5, EtM +depends_on:4:23:5:22:20 +21:exp:45:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, MD5, short tag +depends_on:4:23:5:22 +21:exp:45:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.1, MD5, short tag, EtM +depends_on:4:23:5:22:20 +21:exp:45:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, SHA-384 +depends_on:4:23:3:7:8 +21:exp:45:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, SHA-384, EtM +depends_on:4:23:3:7:8:20 +21:exp:45:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, SHA-384, short tag +depends_on:4:23:3:7:8 +21:exp:45:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:23:3:7:8:20 +21:exp:45:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, SHA-256 +depends_on:4:23:3:13 +21:exp:45:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, SHA-256, EtM +depends_on:4:23:3:13:20 +21:exp:45:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, SHA-256, short tag +depends_on:4:23:3:13 +21:exp:45:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:23:3:13:20 +21:exp:45:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, SHA-1 +depends_on:4:23:3:21 +21:exp:45:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, SHA-1, EtM +depends_on:4:23:3:21:20 +21:exp:45:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, SHA-1, short tag +depends_on:4:23:3:21 +21:exp:45:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:23:3:21:20 +21:exp:45:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, MD5 +depends_on:4:23:3:22 +21:exp:45:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, MD5, EtM +depends_on:4:23:3:22:20 +21:exp:45:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, MD5, short tag +depends_on:4:23:3:22 +21:exp:45:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, 1.0, MD5, short tag, EtM +depends_on:4:23:3:22:20 +21:exp:45:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, SSL3, SHA-1 +depends_on:4:23:0:21 +21:exp:45:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, SSL3, SHA-1, EtM +depends_on:4:23:0:21:20 +21:exp:45:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, SSL3, SHA-1, short tag +depends_on:4:23:0:21 +21:exp:45:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:23:0:21:20 +21:exp:45:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, SSL3, MD5 +depends_on:4:23:0:22 +21:exp:45:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, SSL3, MD5, EtM +depends_on:4:23:0:22:20 +21:exp:45:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, SSL3, MD5, short tag +depends_on:4:23:0:22 +21:exp:45:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-192-CBC, SSL3, MD5, short tag, EtM +depends_on:4:23:0:22:20 +21:exp:45:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-384 +depends_on:4:23:6:7:8 +21:exp:46:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:23:6:7:8 +21:exp:46:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:23:6:7:8 +21:exp:46:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-384, EtM +depends_on:4:23:6:7:8:20 +21:exp:46:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:23:6:7:8:20 +21:exp:46:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:23:6:7:8:20 +21:exp:46:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-384, short tag +depends_on:4:23:6:7:8 +21:exp:46:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:23:6:7:8 +21:exp:46:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:23:6:7:8 +21:exp:46:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:23:6:7:8:20 +21:exp:46:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:7:8:20 +21:exp:46:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:7:8:20 +21:exp:46:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-256 +depends_on:4:23:6:13 +21:exp:46:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:23:6:13 +21:exp:46:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:23:6:13 +21:exp:46:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-256, EtM +depends_on:4:23:6:13:20 +21:exp:46:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:23:6:13:20 +21:exp:46:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:23:6:13:20 +21:exp:46:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-256, short tag +depends_on:4:23:6:13 +21:exp:46:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:23:6:13 +21:exp:46:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:23:6:13 +21:exp:46:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:23:6:13:20 +21:exp:46:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:13:20 +21:exp:46:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:13:20 +21:exp:46:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-1 +depends_on:4:23:6:21 +21:exp:46:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:23:6:21 +21:exp:46:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:23:6:21 +21:exp:46:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-1, EtM +depends_on:4:23:6:21:20 +21:exp:46:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:23:6:21:20 +21:exp:46:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:23:6:21:20 +21:exp:46:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-1, short tag +depends_on:4:23:6:21 +21:exp:46:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:23:6:21 +21:exp:46:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:23:6:21 +21:exp:46:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:23:6:21:20 +21:exp:46:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:21:20 +21:exp:46:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:21:20 +21:exp:46:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, MD5 +depends_on:4:23:6:22 +21:exp:46:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:23:6:22 +21:exp:46:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:23:6:22 +21:exp:46:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, MD5, EtM +depends_on:4:23:6:22:20 +21:exp:46:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:23:6:22:20 +21:exp:46:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:23:6:22:20 +21:exp:46:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, MD5, short tag +depends_on:4:23:6:22 +21:exp:46:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:23:6:22 +21:exp:46:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:23:6:22 +21:exp:46:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, MD5, short tag, EtM +depends_on:4:23:6:22:20 +21:exp:46:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:23:6:22:20 +21:exp:46:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, ARIA-256-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:23:6:22:20 +21:exp:46:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, SHA-384 +depends_on:4:23:5:7:8 +21:exp:46:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, SHA-384, EtM +depends_on:4:23:5:7:8:20 +21:exp:46:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, SHA-384, short tag +depends_on:4:23:5:7:8 +21:exp:46:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:23:5:7:8:20 +21:exp:46:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, SHA-256 +depends_on:4:23:5:13 +21:exp:46:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, SHA-256, EtM +depends_on:4:23:5:13:20 +21:exp:46:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, SHA-256, short tag +depends_on:4:23:5:13 +21:exp:46:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:23:5:13:20 +21:exp:46:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, SHA-1 +depends_on:4:23:5:21 +21:exp:46:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, SHA-1, EtM +depends_on:4:23:5:21:20 +21:exp:46:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, SHA-1, short tag +depends_on:4:23:5:21 +21:exp:46:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:23:5:21:20 +21:exp:46:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, MD5 +depends_on:4:23:5:22 +21:exp:46:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, MD5, EtM +depends_on:4:23:5:22:20 +21:exp:46:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, MD5, short tag +depends_on:4:23:5:22 +21:exp:46:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.1, MD5, short tag, EtM +depends_on:4:23:5:22:20 +21:exp:46:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, SHA-384 +depends_on:4:23:3:7:8 +21:exp:46:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, SHA-384, EtM +depends_on:4:23:3:7:8:20 +21:exp:46:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, SHA-384, short tag +depends_on:4:23:3:7:8 +21:exp:46:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:23:3:7:8:20 +21:exp:46:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, SHA-256 +depends_on:4:23:3:13 +21:exp:46:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, SHA-256, EtM +depends_on:4:23:3:13:20 +21:exp:46:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, SHA-256, short tag +depends_on:4:23:3:13 +21:exp:46:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:23:3:13:20 +21:exp:46:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, SHA-1 +depends_on:4:23:3:21 +21:exp:46:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, SHA-1, EtM +depends_on:4:23:3:21:20 +21:exp:46:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, SHA-1, short tag +depends_on:4:23:3:21 +21:exp:46:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:23:3:21:20 +21:exp:46:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, MD5 +depends_on:4:23:3:22 +21:exp:46:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, MD5, EtM +depends_on:4:23:3:22:20 +21:exp:46:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, MD5, short tag +depends_on:4:23:3:22 +21:exp:46:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, 1.0, MD5, short tag, EtM +depends_on:4:23:3:22:20 +21:exp:46:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, SSL3, SHA-1 +depends_on:4:23:0:21 +21:exp:46:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, SSL3, SHA-1, EtM +depends_on:4:23:0:21:20 +21:exp:46:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, SSL3, SHA-1, short tag +depends_on:4:23:0:21 +21:exp:46:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:23:0:21:20 +21:exp:46:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, SSL3, MD5 +depends_on:4:23:0:22 +21:exp:46:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, SSL3, MD5, EtM +depends_on:4:23:0:22:20 +21:exp:46:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, SSL3, MD5, short tag +depends_on:4:23:0:22 +21:exp:46:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, ARIA-256-CBC, SSL3, MD5, short tag, EtM +depends_on:4:23:0:22:20 +21:exp:46:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-384 +depends_on:4:16:6:7:8 +21:exp:47:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:16:6:7:8 +21:exp:47:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:16:6:7:8 +21:exp:47:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-384, EtM +depends_on:4:16:6:7:8:20 +21:exp:47:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:16:6:7:8:20 +21:exp:47:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:16:6:7:8:20 +21:exp:47:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-384, short tag +depends_on:4:16:6:7:8 +21:exp:47:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:16:6:7:8 +21:exp:47:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:16:6:7:8 +21:exp:47:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:16:6:7:8:20 +21:exp:47:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:7:8:20 +21:exp:47:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:7:8:20 +21:exp:47:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-256 +depends_on:4:16:6:13 +21:exp:47:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:16:6:13 +21:exp:47:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:16:6:13 +21:exp:47:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-256, EtM +depends_on:4:16:6:13:20 +21:exp:47:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:16:6:13:20 +21:exp:47:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:16:6:13:20 +21:exp:47:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-256, short tag +depends_on:4:16:6:13 +21:exp:47:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:16:6:13 +21:exp:47:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:16:6:13 +21:exp:47:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:16:6:13:20 +21:exp:47:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:13:20 +21:exp:47:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:13:20 +21:exp:47:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-1 +depends_on:4:16:6:21 +21:exp:47:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:16:6:21 +21:exp:47:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:16:6:21 +21:exp:47:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-1, EtM +depends_on:4:16:6:21:20 +21:exp:47:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:16:6:21:20 +21:exp:47:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:16:6:21:20 +21:exp:47:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-1, short tag +depends_on:4:16:6:21 +21:exp:47:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:16:6:21 +21:exp:47:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:16:6:21 +21:exp:47:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:16:6:21:20 +21:exp:47:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:21:20 +21:exp:47:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:21:20 +21:exp:47:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, MD5 +depends_on:4:16:6:22 +21:exp:47:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:16:6:22 +21:exp:47:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:16:6:22 +21:exp:47:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, MD5, EtM +depends_on:4:16:6:22:20 +21:exp:47:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:16:6:22:20 +21:exp:47:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:16:6:22:20 +21:exp:47:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, MD5, short tag +depends_on:4:16:6:22 +21:exp:47:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:16:6:22 +21:exp:47:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:16:6:22 +21:exp:47:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, MD5, short tag, EtM +depends_on:4:16:6:22:20 +21:exp:47:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:22:20 +21:exp:47:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:22:20 +21:exp:47:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, SHA-384 +depends_on:4:16:5:7:8 +21:exp:47:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, SHA-384, EtM +depends_on:4:16:5:7:8:20 +21:exp:47:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, SHA-384, short tag +depends_on:4:16:5:7:8 +21:exp:47:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:16:5:7:8:20 +21:exp:47:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, SHA-256 +depends_on:4:16:5:13 +21:exp:47:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, SHA-256, EtM +depends_on:4:16:5:13:20 +21:exp:47:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, SHA-256, short tag +depends_on:4:16:5:13 +21:exp:47:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:16:5:13:20 +21:exp:47:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, SHA-1 +depends_on:4:16:5:21 +21:exp:47:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, SHA-1, EtM +depends_on:4:16:5:21:20 +21:exp:47:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, SHA-1, short tag +depends_on:4:16:5:21 +21:exp:47:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:16:5:21:20 +21:exp:47:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, MD5 +depends_on:4:16:5:22 +21:exp:47:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, MD5, EtM +depends_on:4:16:5:22:20 +21:exp:47:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, MD5, short tag +depends_on:4:16:5:22 +21:exp:47:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.1, MD5, short tag, EtM +depends_on:4:16:5:22:20 +21:exp:47:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, SHA-384 +depends_on:4:16:3:7:8 +21:exp:47:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, SHA-384, EtM +depends_on:4:16:3:7:8:20 +21:exp:47:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, SHA-384, short tag +depends_on:4:16:3:7:8 +21:exp:47:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:16:3:7:8:20 +21:exp:47:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, SHA-256 +depends_on:4:16:3:13 +21:exp:47:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, SHA-256, EtM +depends_on:4:16:3:13:20 +21:exp:47:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, SHA-256, short tag +depends_on:4:16:3:13 +21:exp:47:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:16:3:13:20 +21:exp:47:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, SHA-1 +depends_on:4:16:3:21 +21:exp:47:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, SHA-1, EtM +depends_on:4:16:3:21:20 +21:exp:47:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, SHA-1, short tag +depends_on:4:16:3:21 +21:exp:47:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:16:3:21:20 +21:exp:47:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, MD5 +depends_on:4:16:3:22 +21:exp:47:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, MD5, EtM +depends_on:4:16:3:22:20 +21:exp:47:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, MD5, short tag +depends_on:4:16:3:22 +21:exp:47:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, 1.0, MD5, short tag, EtM +depends_on:4:16:3:22:20 +21:exp:47:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, SSL3, SHA-1 +depends_on:4:16:0:21 +21:exp:47:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, SSL3, SHA-1, EtM +depends_on:4:16:0:21:20 +21:exp:47:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, SSL3, SHA-1, short tag +depends_on:4:16:0:21 +21:exp:47:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:16:0:21:20 +21:exp:47:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, SSL3, MD5 +depends_on:4:16:0:22 +21:exp:47:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, SSL3, MD5, EtM +depends_on:4:16:0:22:20 +21:exp:47:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, SSL3, MD5, short tag +depends_on:4:16:0:22 +21:exp:47:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CBC, SSL3, MD5, short tag, EtM +depends_on:4:16:0:22:20 +21:exp:47:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-384 +depends_on:4:16:6:7:8 +21:exp:48:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:16:6:7:8 +21:exp:48:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:16:6:7:8 +21:exp:48:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-384, EtM +depends_on:4:16:6:7:8:20 +21:exp:48:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:16:6:7:8:20 +21:exp:48:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:16:6:7:8:20 +21:exp:48:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-384, short tag +depends_on:4:16:6:7:8 +21:exp:48:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:16:6:7:8 +21:exp:48:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:16:6:7:8 +21:exp:48:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:16:6:7:8:20 +21:exp:48:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:7:8:20 +21:exp:48:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:7:8:20 +21:exp:48:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-256 +depends_on:4:16:6:13 +21:exp:48:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:16:6:13 +21:exp:48:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:16:6:13 +21:exp:48:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-256, EtM +depends_on:4:16:6:13:20 +21:exp:48:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:16:6:13:20 +21:exp:48:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:16:6:13:20 +21:exp:48:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-256, short tag +depends_on:4:16:6:13 +21:exp:48:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:16:6:13 +21:exp:48:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:16:6:13 +21:exp:48:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:16:6:13:20 +21:exp:48:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:13:20 +21:exp:48:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:13:20 +21:exp:48:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-1 +depends_on:4:16:6:21 +21:exp:48:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:16:6:21 +21:exp:48:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:16:6:21 +21:exp:48:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-1, EtM +depends_on:4:16:6:21:20 +21:exp:48:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:16:6:21:20 +21:exp:48:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:16:6:21:20 +21:exp:48:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-1, short tag +depends_on:4:16:6:21 +21:exp:48:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:16:6:21 +21:exp:48:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:16:6:21 +21:exp:48:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:16:6:21:20 +21:exp:48:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:21:20 +21:exp:48:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:21:20 +21:exp:48:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, MD5 +depends_on:4:16:6:22 +21:exp:48:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:16:6:22 +21:exp:48:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:16:6:22 +21:exp:48:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, MD5, EtM +depends_on:4:16:6:22:20 +21:exp:48:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:16:6:22:20 +21:exp:48:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:16:6:22:20 +21:exp:48:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, MD5, short tag +depends_on:4:16:6:22 +21:exp:48:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:16:6:22 +21:exp:48:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:16:6:22 +21:exp:48:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, MD5, short tag, EtM +depends_on:4:16:6:22:20 +21:exp:48:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:22:20 +21:exp:48:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:22:20 +21:exp:48:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, SHA-384 +depends_on:4:16:5:7:8 +21:exp:48:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, SHA-384, EtM +depends_on:4:16:5:7:8:20 +21:exp:48:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, SHA-384, short tag +depends_on:4:16:5:7:8 +21:exp:48:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:16:5:7:8:20 +21:exp:48:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, SHA-256 +depends_on:4:16:5:13 +21:exp:48:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, SHA-256, EtM +depends_on:4:16:5:13:20 +21:exp:48:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, SHA-256, short tag +depends_on:4:16:5:13 +21:exp:48:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:16:5:13:20 +21:exp:48:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, SHA-1 +depends_on:4:16:5:21 +21:exp:48:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, SHA-1, EtM +depends_on:4:16:5:21:20 +21:exp:48:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, SHA-1, short tag +depends_on:4:16:5:21 +21:exp:48:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:16:5:21:20 +21:exp:48:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, MD5 +depends_on:4:16:5:22 +21:exp:48:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, MD5, EtM +depends_on:4:16:5:22:20 +21:exp:48:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, MD5, short tag +depends_on:4:16:5:22 +21:exp:48:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.1, MD5, short tag, EtM +depends_on:4:16:5:22:20 +21:exp:48:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, SHA-384 +depends_on:4:16:3:7:8 +21:exp:48:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, SHA-384, EtM +depends_on:4:16:3:7:8:20 +21:exp:48:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, SHA-384, short tag +depends_on:4:16:3:7:8 +21:exp:48:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:16:3:7:8:20 +21:exp:48:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, SHA-256 +depends_on:4:16:3:13 +21:exp:48:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, SHA-256, EtM +depends_on:4:16:3:13:20 +21:exp:48:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, SHA-256, short tag +depends_on:4:16:3:13 +21:exp:48:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:16:3:13:20 +21:exp:48:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, SHA-1 +depends_on:4:16:3:21 +21:exp:48:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, SHA-1, EtM +depends_on:4:16:3:21:20 +21:exp:48:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, SHA-1, short tag +depends_on:4:16:3:21 +21:exp:48:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:16:3:21:20 +21:exp:48:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, MD5 +depends_on:4:16:3:22 +21:exp:48:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, MD5, EtM +depends_on:4:16:3:22:20 +21:exp:48:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, MD5, short tag +depends_on:4:16:3:22 +21:exp:48:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, 1.0, MD5, short tag, EtM +depends_on:4:16:3:22:20 +21:exp:48:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, SSL3, SHA-1 +depends_on:4:16:0:21 +21:exp:48:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, SSL3, SHA-1, EtM +depends_on:4:16:0:21:20 +21:exp:48:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, SSL3, SHA-1, short tag +depends_on:4:16:0:21 +21:exp:48:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:16:0:21:20 +21:exp:48:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, SSL3, MD5 +depends_on:4:16:0:22 +21:exp:48:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, SSL3, MD5, EtM +depends_on:4:16:0:22:20 +21:exp:48:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, SSL3, MD5, short tag +depends_on:4:16:0:22 +21:exp:48:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CBC, SSL3, MD5, short tag, EtM +depends_on:4:16:0:22:20 +21:exp:48:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-384 +depends_on:4:16:6:7:8 +21:exp:49:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:16:6:7:8 +21:exp:49:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:16:6:7:8 +21:exp:49:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-384, EtM +depends_on:4:16:6:7:8:20 +21:exp:49:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:16:6:7:8:20 +21:exp:49:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:16:6:7:8:20 +21:exp:49:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-384, short tag +depends_on:4:16:6:7:8 +21:exp:49:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:16:6:7:8 +21:exp:49:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:16:6:7:8 +21:exp:49:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:16:6:7:8:20 +21:exp:49:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:7:8:20 +21:exp:49:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:7:8:20 +21:exp:49:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-256 +depends_on:4:16:6:13 +21:exp:49:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:16:6:13 +21:exp:49:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:16:6:13 +21:exp:49:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-256, EtM +depends_on:4:16:6:13:20 +21:exp:49:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:16:6:13:20 +21:exp:49:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:16:6:13:20 +21:exp:49:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-256, short tag +depends_on:4:16:6:13 +21:exp:49:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:16:6:13 +21:exp:49:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:16:6:13 +21:exp:49:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:16:6:13:20 +21:exp:49:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:13:20 +21:exp:49:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:13:20 +21:exp:49:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-1 +depends_on:4:16:6:21 +21:exp:49:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:16:6:21 +21:exp:49:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:16:6:21 +21:exp:49:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-1, EtM +depends_on:4:16:6:21:20 +21:exp:49:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:16:6:21:20 +21:exp:49:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:16:6:21:20 +21:exp:49:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-1, short tag +depends_on:4:16:6:21 +21:exp:49:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:16:6:21 +21:exp:49:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:16:6:21 +21:exp:49:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:16:6:21:20 +21:exp:49:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:21:20 +21:exp:49:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:21:20 +21:exp:49:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, MD5 +depends_on:4:16:6:22 +21:exp:49:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:16:6:22 +21:exp:49:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:16:6:22 +21:exp:49:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, MD5, EtM +depends_on:4:16:6:22:20 +21:exp:49:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:16:6:22:20 +21:exp:49:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:16:6:22:20 +21:exp:49:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, MD5, short tag +depends_on:4:16:6:22 +21:exp:49:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:16:6:22 +21:exp:49:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:16:6:22 +21:exp:49:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, MD5, short tag, EtM +depends_on:4:16:6:22:20 +21:exp:49:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:16:6:22:20 +21:exp:49:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:16:6:22:20 +21:exp:49:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, SHA-384 +depends_on:4:16:5:7:8 +21:exp:49:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, SHA-384, EtM +depends_on:4:16:5:7:8:20 +21:exp:49:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, SHA-384, short tag +depends_on:4:16:5:7:8 +21:exp:49:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:16:5:7:8:20 +21:exp:49:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, SHA-256 +depends_on:4:16:5:13 +21:exp:49:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, SHA-256, EtM +depends_on:4:16:5:13:20 +21:exp:49:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, SHA-256, short tag +depends_on:4:16:5:13 +21:exp:49:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:16:5:13:20 +21:exp:49:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, SHA-1 +depends_on:4:16:5:21 +21:exp:49:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, SHA-1, EtM +depends_on:4:16:5:21:20 +21:exp:49:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, SHA-1, short tag +depends_on:4:16:5:21 +21:exp:49:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:16:5:21:20 +21:exp:49:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, MD5 +depends_on:4:16:5:22 +21:exp:49:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, MD5, EtM +depends_on:4:16:5:22:20 +21:exp:49:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, MD5, short tag +depends_on:4:16:5:22 +21:exp:49:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.1, MD5, short tag, EtM +depends_on:4:16:5:22:20 +21:exp:49:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, SHA-384 +depends_on:4:16:3:7:8 +21:exp:49:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, SHA-384, EtM +depends_on:4:16:3:7:8:20 +21:exp:49:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, SHA-384, short tag +depends_on:4:16:3:7:8 +21:exp:49:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:16:3:7:8:20 +21:exp:49:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, SHA-256 +depends_on:4:16:3:13 +21:exp:49:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, SHA-256, EtM +depends_on:4:16:3:13:20 +21:exp:49:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, SHA-256, short tag +depends_on:4:16:3:13 +21:exp:49:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:16:3:13:20 +21:exp:49:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, SHA-1 +depends_on:4:16:3:21 +21:exp:49:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, SHA-1, EtM +depends_on:4:16:3:21:20 +21:exp:49:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, SHA-1, short tag +depends_on:4:16:3:21 +21:exp:49:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:16:3:21:20 +21:exp:49:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, MD5 +depends_on:4:16:3:22 +21:exp:49:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, MD5, EtM +depends_on:4:16:3:22:20 +21:exp:49:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, MD5, short tag +depends_on:4:16:3:22 +21:exp:49:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, 1.0, MD5, short tag, EtM +depends_on:4:16:3:22:20 +21:exp:49:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, SSL3, SHA-1 +depends_on:4:16:0:21 +21:exp:49:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, SSL3, SHA-1, EtM +depends_on:4:16:0:21:20 +21:exp:49:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, SSL3, SHA-1, short tag +depends_on:4:16:0:21 +21:exp:49:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:16:0:21:20 +21:exp:49:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, SSL3, MD5 +depends_on:4:16:0:22 +21:exp:49:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, SSL3, MD5, EtM +depends_on:4:16:0:22:20 +21:exp:49:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, SSL3, MD5, short tag +depends_on:4:16:0:22 +21:exp:49:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CBC, SSL3, MD5, short tag, EtM +depends_on:4:16:0:22:20 +21:exp:49:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-384 +depends_on:4:24:6:7:8 +21:exp:50:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-384, CID 4+4 +depends_on:19:4:24:6:7:8 +21:exp:50:exp:38:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-384, CID 4+0 +depends_on:19:4:24:6:7:8 +21:exp:50:exp:38:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-384, EtM +depends_on:4:24:6:7:8:20 +21:exp:50:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-384, EtM, CID 4+4 +depends_on:19:4:24:6:7:8:20 +21:exp:50:exp:38:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-384, EtM, CID 4+0 +depends_on:19:4:24:6:7:8:20 +21:exp:50:exp:38:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-384, short tag +depends_on:4:24:6:7:8 +21:exp:50:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-384, short tag, CID 4+4 +depends_on:19:4:24:6:7:8 +21:exp:50:exp:38:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-384, short tag, CID 4+0 +depends_on:19:4:24:6:7:8 +21:exp:50:exp:38:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-384, short tag, EtM +depends_on:4:24:6:7:8:20 +21:exp:50:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-384, short tag, EtM, CID 4+4 +depends_on:19:4:24:6:7:8:20 +21:exp:50:exp:38:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-384, short tag, EtM, CID 4+0 +depends_on:19:4:24:6:7:8:20 +21:exp:50:exp:38:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-256 +depends_on:4:24:6:13 +21:exp:50:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-256, CID 4+4 +depends_on:19:4:24:6:13 +21:exp:50:exp:39:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-256, CID 4+0 +depends_on:19:4:24:6:13 +21:exp:50:exp:39:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-256, EtM +depends_on:4:24:6:13:20 +21:exp:50:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-256, EtM, CID 4+4 +depends_on:19:4:24:6:13:20 +21:exp:50:exp:39:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-256, EtM, CID 4+0 +depends_on:19:4:24:6:13:20 +21:exp:50:exp:39:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-256, short tag +depends_on:4:24:6:13 +21:exp:50:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-256, short tag, CID 4+4 +depends_on:19:4:24:6:13 +21:exp:50:exp:39:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-256, short tag, CID 4+0 +depends_on:19:4:24:6:13 +21:exp:50:exp:39:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-256, short tag, EtM +depends_on:4:24:6:13:20 +21:exp:50:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-256, short tag, EtM, CID 4+4 +depends_on:19:4:24:6:13:20 +21:exp:50:exp:39:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-256, short tag, EtM, CID 4+0 +depends_on:19:4:24:6:13:20 +21:exp:50:exp:39:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-1 +depends_on:4:24:6:21 +21:exp:50:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-1, CID 4+4 +depends_on:19:4:24:6:21 +21:exp:50:exp:40:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-1, CID 4+0 +depends_on:19:4:24:6:21 +21:exp:50:exp:40:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-1, EtM +depends_on:4:24:6:21:20 +21:exp:50:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-1, EtM, CID 4+4 +depends_on:19:4:24:6:21:20 +21:exp:50:exp:40:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-1, EtM, CID 4+0 +depends_on:19:4:24:6:21:20 +21:exp:50:exp:40:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-1, short tag +depends_on:4:24:6:21 +21:exp:50:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-1, short tag, CID 4+4 +depends_on:19:4:24:6:21 +21:exp:50:exp:40:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-1, short tag, CID 4+0 +depends_on:19:4:24:6:21 +21:exp:50:exp:40:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-1, short tag, EtM +depends_on:4:24:6:21:20 +21:exp:50:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-1, short tag, EtM, CID 4+4 +depends_on:19:4:24:6:21:20 +21:exp:50:exp:40:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, SHA-1, short tag, EtM, CID 4+0 +depends_on:19:4:24:6:21:20 +21:exp:50:exp:40:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, MD5 +depends_on:4:24:6:22 +21:exp:50:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, MD5, CID 4+4 +depends_on:19:4:24:6:22 +21:exp:50:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, MD5, CID 4+0 +depends_on:19:4:24:6:22 +21:exp:50:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, MD5, EtM +depends_on:4:24:6:22:20 +21:exp:50:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, MD5, EtM, CID 4+4 +depends_on:19:4:24:6:22:20 +21:exp:50:exp:41:int:1:int:0:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, MD5, EtM, CID 4+0 +depends_on:19:4:24:6:22:20 +21:exp:50:exp:41:int:1:int:0:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, MD5, short tag +depends_on:4:24:6:22 +21:exp:50:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, MD5, short tag, CID 4+4 +depends_on:19:4:24:6:22 +21:exp:50:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, MD5, short tag, CID 4+0 +depends_on:19:4:24:6:22 +21:exp:50:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, MD5, short tag, EtM +depends_on:4:24:6:22:20 +21:exp:50:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.2, MD5, short tag, EtM, CID 4+4 +depends_on:19:4:24:6:22:20 +21:exp:50:exp:41:int:1:int:1:exp:24:int:4:int:4 + +Record crypt, little space, BLOWFISH-CBC, 1.2, MD5, short tag, EtM, CID 4+0 +depends_on:19:4:24:6:22:20 +21:exp:50:exp:41:int:1:int:1:exp:24:int:4:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, SHA-384 +depends_on:4:24:5:7:8 +21:exp:50:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, SHA-384, EtM +depends_on:4:24:5:7:8:20 +21:exp:50:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, SHA-384, short tag +depends_on:4:24:5:7:8 +21:exp:50:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, SHA-384, short tag, EtM +depends_on:4:24:5:7:8:20 +21:exp:50:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, SHA-256 +depends_on:4:24:5:13 +21:exp:50:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, SHA-256, EtM +depends_on:4:24:5:13:20 +21:exp:50:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, SHA-256, short tag +depends_on:4:24:5:13 +21:exp:50:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, SHA-256, short tag, EtM +depends_on:4:24:5:13:20 +21:exp:50:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, SHA-1 +depends_on:4:24:5:21 +21:exp:50:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, SHA-1, EtM +depends_on:4:24:5:21:20 +21:exp:50:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, SHA-1, short tag +depends_on:4:24:5:21 +21:exp:50:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, SHA-1, short tag, EtM +depends_on:4:24:5:21:20 +21:exp:50:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, MD5 +depends_on:4:24:5:22 +21:exp:50:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, MD5, EtM +depends_on:4:24:5:22:20 +21:exp:50:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, MD5, short tag +depends_on:4:24:5:22 +21:exp:50:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.1, MD5, short tag, EtM +depends_on:4:24:5:22:20 +21:exp:50:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, SHA-384 +depends_on:4:24:3:7:8 +21:exp:50:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, SHA-384, EtM +depends_on:4:24:3:7:8:20 +21:exp:50:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, SHA-384, short tag +depends_on:4:24:3:7:8 +21:exp:50:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, SHA-384, short tag, EtM +depends_on:4:24:3:7:8:20 +21:exp:50:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, SHA-256 +depends_on:4:24:3:13 +21:exp:50:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, SHA-256, EtM +depends_on:4:24:3:13:20 +21:exp:50:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, SHA-256, short tag +depends_on:4:24:3:13 +21:exp:50:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, SHA-256, short tag, EtM +depends_on:4:24:3:13:20 +21:exp:50:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, SHA-1 +depends_on:4:24:3:21 +21:exp:50:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, SHA-1, EtM +depends_on:4:24:3:21:20 +21:exp:50:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, SHA-1, short tag +depends_on:4:24:3:21 +21:exp:50:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, SHA-1, short tag, EtM +depends_on:4:24:3:21:20 +21:exp:50:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, MD5 +depends_on:4:24:3:22 +21:exp:50:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, MD5, EtM +depends_on:4:24:3:22:20 +21:exp:50:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, MD5, short tag +depends_on:4:24:3:22 +21:exp:50:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, 1.0, MD5, short tag, EtM +depends_on:4:24:3:22:20 +21:exp:50:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, SSL3, SHA-1 +depends_on:4:24:0:21 +21:exp:50:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, SSL3, SHA-1, EtM +depends_on:4:24:0:21:20 +21:exp:50:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, SSL3, SHA-1, short tag +depends_on:4:24:0:21 +21:exp:50:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, SSL3, SHA-1, short tag, EtM +depends_on:4:24:0:21:20 +21:exp:50:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, SSL3, MD5 +depends_on:4:24:0:22 +21:exp:50:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, SSL3, MD5, EtM +depends_on:4:24:0:22:20 +21:exp:50:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, SSL3, MD5, short tag +depends_on:4:24:0:22 +21:exp:50:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, BLOWFISH-CBC, SSL3, MD5, short tag, EtM +depends_on:4:24:0:22:20 +21:exp:50:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, AES-128-GCM, 1.2 +depends_on:9:6:10 +21:exp:51:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-GCM, 1.3 +depends_on:9:25:10 +21:exp:51:exp:41:int:0:int:0:exp:52:int:0:int:0 + +Record crypt, little space, AES-128-GCM, 1.2, CID 4+4 +depends_on:19:9:6:10 +21:exp:51:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-GCM, 1.2, CID 4+0 +depends_on:19:9:6:10 +21:exp:51:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-GCM, 1.2, short tag +depends_on:9:6:10 +21:exp:51:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-GCM, 1.2, short tag, CID 4+4 +depends_on:19:9:6:10 +21:exp:51:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-GCM, 1.2, short tag, CID 4+0 +depends_on:19:9:6:10 +21:exp:51:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-GCM, 1.2 +depends_on:9:6:10 +21:exp:53:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-GCM, 1.3 +depends_on:9:25:10 +21:exp:53:exp:41:int:0:int:0:exp:52:int:0:int:0 + +Record crypt, little space, AES-192-GCM, 1.2, CID 4+4 +depends_on:19:9:6:10 +21:exp:53:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-GCM, 1.2, CID 4+0 +depends_on:19:9:6:10 +21:exp:53:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-GCM, 1.2, short tag +depends_on:9:6:10 +21:exp:53:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-GCM, 1.2, short tag, CID 4+4 +depends_on:19:9:6:10 +21:exp:53:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-GCM, 1.2, short tag, CID 4+0 +depends_on:19:9:6:10 +21:exp:53:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-GCM, 1.2 +depends_on:9:6:10 +21:exp:54:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-GCM, 1.3 +depends_on:9:25:10 +21:exp:54:exp:41:int:0:int:0:exp:52:int:0:int:0 + +Record crypt, little space, AES-256-GCM, 1.2, CID 4+4 +depends_on:19:9:6:10 +21:exp:54:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-GCM, 1.2, CID 4+0 +depends_on:19:9:6:10 +21:exp:54:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-GCM, 1.2, short tag +depends_on:9:6:10 +21:exp:54:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-GCM, 1.2, short tag, CID 4+4 +depends_on:19:9:6:10 +21:exp:54:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-GCM, 1.2, short tag, CID 4+0 +depends_on:19:9:6:10 +21:exp:54:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-GCM, 1.2 +depends_on:16:6:10 +21:exp:55:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-GCM, 1.2, CID 4+4 +depends_on:19:16:6:10 +21:exp:55:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-GCM, 1.2, CID 4+0 +depends_on:19:16:6:10 +21:exp:55:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-GCM, 1.2, short tag +depends_on:16:6:10 +21:exp:55:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-GCM, 1.2, short tag, CID 4+4 +depends_on:19:16:6:10 +21:exp:55:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-GCM, 1.2, short tag, CID 4+0 +depends_on:19:16:6:10 +21:exp:55:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-GCM, 1.2 +depends_on:16:6:10 +21:exp:56:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-GCM, 1.2, CID 4+4 +depends_on:19:16:6:10 +21:exp:56:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-GCM, 1.2, CID 4+0 +depends_on:19:16:6:10 +21:exp:56:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-GCM, 1.2, short tag +depends_on:16:6:10 +21:exp:56:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-GCM, 1.2, short tag, CID 4+4 +depends_on:19:16:6:10 +21:exp:56:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-GCM, 1.2, short tag, CID 4+0 +depends_on:19:16:6:10 +21:exp:56:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-GCM, 1.2 +depends_on:16:6:10 +21:exp:57:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-GCM, 1.2, CID 4+4 +depends_on:19:16:6:10 +21:exp:57:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-GCM, 1.2, CID 4+0 +depends_on:19:16:6:10 +21:exp:57:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-GCM, 1.2, short tag +depends_on:16:6:10 +21:exp:57:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-GCM, 1.2, short tag, CID 4+4 +depends_on:19:16:6:10 +21:exp:57:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-GCM, 1.2, short tag, CID 4+0 +depends_on:19:16:6:10 +21:exp:57:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CCM, 1.2 +depends_on:9:6:12 +21:exp:58:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CCM, 1.3 +depends_on:9:25:12 +21:exp:58:exp:41:int:0:int:0:exp:52:int:0:int:0 + +Record crypt, little space, AES-128-CCM, 1.2, CID 4+4 +depends_on:19:9:6:12 +21:exp:58:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CCM, 1.2, CID 4+0 +depends_on:19:9:6:12 +21:exp:58:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-128-CCM, 1.2, short tag +depends_on:9:6:12 +21:exp:58:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-128-CCM, 1.2, short tag, CID 4+4 +depends_on:19:9:6:12 +21:exp:58:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-128-CCM, 1.2, short tag, CID 4+0 +depends_on:19:9:6:12 +21:exp:58:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CCM, 1.2 +depends_on:9:6:12 +21:exp:59:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CCM, 1.3 +depends_on:9:25:12 +21:exp:59:exp:41:int:0:int:0:exp:52:int:0:int:0 + +Record crypt, little space, AES-192-CCM, 1.2, CID 4+4 +depends_on:19:9:6:12 +21:exp:59:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CCM, 1.2, CID 4+0 +depends_on:19:9:6:12 +21:exp:59:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-192-CCM, 1.2, short tag +depends_on:9:6:12 +21:exp:59:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-192-CCM, 1.2, short tag, CID 4+4 +depends_on:19:9:6:12 +21:exp:59:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-192-CCM, 1.2, short tag, CID 4+0 +depends_on:19:9:6:12 +21:exp:59:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CCM, 1.2 +depends_on:9:6:12 +21:exp:60:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CCM, 1.3 +depends_on:9:25:12 +21:exp:60:exp:41:int:0:int:0:exp:52:int:0:int:0 + +Record crypt, little space, AES-256-CCM, 1.2, CID 4+4 +depends_on:19:9:6:12 +21:exp:60:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CCM, 1.2, CID 4+0 +depends_on:19:9:6:12 +21:exp:60:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, AES-256-CCM, 1.2, short tag +depends_on:9:6:12 +21:exp:60:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, AES-256-CCM, 1.2, short tag, CID 4+4 +depends_on:19:9:6:12 +21:exp:60:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, AES-256-CCM, 1.2, short tag, CID 4+0 +depends_on:19:9:6:12 +21:exp:60:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CCM, 1.2 +depends_on:16:6:12 +21:exp:61:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CCM, 1.2, CID 4+4 +depends_on:19:16:6:12 +21:exp:61:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CCM, 1.2, CID 4+0 +depends_on:19:16:6:12 +21:exp:61:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-128-CCM, 1.2, short tag +depends_on:16:6:12 +21:exp:61:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-128-CCM, 1.2, short tag, CID 4+4 +depends_on:19:16:6:12 +21:exp:61:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-128-CCM, 1.2, short tag, CID 4+0 +depends_on:19:16:6:12 +21:exp:61:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CCM, 1.2 +depends_on:16:6:12 +21:exp:62:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CCM, 1.2, CID 4+4 +depends_on:19:16:6:12 +21:exp:62:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CCM, 1.2, CID 4+0 +depends_on:19:16:6:12 +21:exp:62:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-192-CCM, 1.2, short tag +depends_on:16:6:12 +21:exp:62:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-192-CCM, 1.2, short tag, CID 4+4 +depends_on:19:16:6:12 +21:exp:62:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-192-CCM, 1.2, short tag, CID 4+0 +depends_on:19:16:6:12 +21:exp:62:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CCM, 1.2 +depends_on:16:6:12 +21:exp:63:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CCM, 1.2, CID 4+4 +depends_on:19:16:6:12 +21:exp:63:exp:41:int:0:int:0:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CCM, 1.2, CID 4+0 +depends_on:19:16:6:12 +21:exp:63:exp:41:int:0:int:0:exp:24:int:4:int:0 + +Record crypt, little space, CAMELLIA-256-CCM, 1.2, short tag +depends_on:16:6:12 +21:exp:63:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, CAMELLIA-256-CCM, 1.2, short tag, CID 4+4 +depends_on:19:16:6:12 +21:exp:63:exp:41:int:0:int:1:exp:24:int:4:int:4 + +Record crypt, little space, CAMELLIA-256-CCM, 1.2, short tag, CID 4+0 +depends_on:19:16:6:12 +21:exp:63:exp:41:int:0:int:1:exp:24:int:4:int:0 + +Record crypt, little space, ARC4-128, 1.2, SHA-384 +depends_on:26:6:7:8 +21:exp:64:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.2, SHA-384, EtM +depends_on:26:6:7:8:20 +21:exp:64:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.2, SHA-384, short tag +depends_on:26:6:7:8 +21:exp:64:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.2, SHA-384, short tag, EtM +depends_on:26:6:7:8:20 +21:exp:64:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.2, SHA-256 +depends_on:26:6:13 +21:exp:64:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.2, SHA-256, EtM +depends_on:26:6:13:20 +21:exp:64:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.2, SHA-256, short tag +depends_on:26:6:13 +21:exp:64:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.2, SHA-256, short tag, EtM +depends_on:26:6:13:20 +21:exp:64:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.2, SHA-1 +depends_on:26:6:21 +21:exp:64:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.2, SHA-1, EtM +depends_on:26:6:21:20 +21:exp:64:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.2, SHA-1, short tag +depends_on:26:6:21 +21:exp:64:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.2, SHA-1, short tag, EtM +depends_on:26:6:21:20 +21:exp:64:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.2, MD5 +depends_on:26:6:22 +21:exp:64:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.2, MD5, EtM +depends_on:26:6:22:20 +21:exp:64:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.2, MD5, short tag +depends_on:26:6:22 +21:exp:64:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.2, MD5, short tag, EtM +depends_on:26:6:22:20 +21:exp:64:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, SHA-384 +depends_on:26:5:7:8 +21:exp:64:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, SHA-384, EtM +depends_on:26:5:7:8:20 +21:exp:64:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, SHA-384, short tag +depends_on:26:5:7:8 +21:exp:64:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, SHA-384, short tag, EtM +depends_on:26:5:7:8:20 +21:exp:64:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, SHA-256 +depends_on:26:5:13 +21:exp:64:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, SHA-256, EtM +depends_on:26:5:13:20 +21:exp:64:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, SHA-256, short tag +depends_on:26:5:13 +21:exp:64:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, SHA-256, short tag, EtM +depends_on:26:5:13:20 +21:exp:64:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, SHA-1 +depends_on:26:5:21 +21:exp:64:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, SHA-1, EtM +depends_on:26:5:21:20 +21:exp:64:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, SHA-1, short tag +depends_on:26:5:21 +21:exp:64:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, SHA-1, short tag, EtM +depends_on:26:5:21:20 +21:exp:64:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, MD5 +depends_on:26:5:22 +21:exp:64:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, MD5, EtM +depends_on:26:5:22:20 +21:exp:64:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, MD5, short tag +depends_on:26:5:22 +21:exp:64:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.1, MD5, short tag, EtM +depends_on:26:5:22:20 +21:exp:64:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, SHA-384 +depends_on:26:3:7:8 +21:exp:64:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, SHA-384, EtM +depends_on:26:3:7:8:20 +21:exp:64:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, SHA-384, short tag +depends_on:26:3:7:8 +21:exp:64:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, SHA-384, short tag, EtM +depends_on:26:3:7:8:20 +21:exp:64:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, SHA-256 +depends_on:26:3:13 +21:exp:64:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, SHA-256, EtM +depends_on:26:3:13:20 +21:exp:64:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, SHA-256, short tag +depends_on:26:3:13 +21:exp:64:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, SHA-256, short tag, EtM +depends_on:26:3:13:20 +21:exp:64:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, SHA-1 +depends_on:26:3:21 +21:exp:64:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, SHA-1, EtM +depends_on:26:3:21:20 +21:exp:64:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, SHA-1, short tag +depends_on:26:3:21 +21:exp:64:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, SHA-1, short tag, EtM +depends_on:26:3:21:20 +21:exp:64:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, MD5 +depends_on:26:3:22 +21:exp:64:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, MD5, EtM +depends_on:26:3:22:20 +21:exp:64:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, MD5, short tag +depends_on:26:3:22 +21:exp:64:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, 1.0, MD5, short tag, EtM +depends_on:26:3:22:20 +21:exp:64:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, ARC4-128, SSL3, SHA-1 +depends_on:26:0:21 +21:exp:64:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARC4-128, SSL3, SHA-1, EtM +depends_on:26:0:21:20 +21:exp:64:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARC4-128, SSL3, SHA-1, short tag +depends_on:26:0:21 +21:exp:64:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, ARC4-128, SSL3, SHA-1, short tag, EtM +depends_on:26:0:21:20 +21:exp:64:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, ARC4-128, SSL3, MD5 +depends_on:26:0:22 +21:exp:64:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARC4-128, SSL3, MD5, EtM +depends_on:26:0:22:20 +21:exp:64:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, ARC4-128, SSL3, MD5, short tag +depends_on:26:0:22 +21:exp:64:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, ARC4-128, SSL3, MD5, short tag, EtM +depends_on:26:0:22:20 +21:exp:64:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, SHA-384 +depends_on:27:6:7:8 +21:exp:65:exp:38:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, SHA-384, EtM +depends_on:27:6:7:8:20 +21:exp:65:exp:38:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, SHA-384, short tag +depends_on:27:6:7:8 +21:exp:65:exp:38:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, SHA-384, short tag, EtM +depends_on:27:6:7:8:20 +21:exp:65:exp:38:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, SHA-256 +depends_on:27:6:13 +21:exp:65:exp:39:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, SHA-256, EtM +depends_on:27:6:13:20 +21:exp:65:exp:39:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, SHA-256, short tag +depends_on:27:6:13 +21:exp:65:exp:39:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, SHA-256, short tag, EtM +depends_on:27:6:13:20 +21:exp:65:exp:39:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, SHA-1 +depends_on:27:6:21 +21:exp:65:exp:40:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, SHA-1, EtM +depends_on:27:6:21:20 +21:exp:65:exp:40:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, SHA-1, short tag +depends_on:27:6:21 +21:exp:65:exp:40:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, SHA-1, short tag, EtM +depends_on:27:6:21:20 +21:exp:65:exp:40:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, MD5 +depends_on:27:6:22 +21:exp:65:exp:41:int:0:int:0:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, MD5, EtM +depends_on:27:6:22:20 +21:exp:65:exp:41:int:1:int:0:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, MD5, short tag +depends_on:27:6:22 +21:exp:65:exp:41:int:0:int:1:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.2, MD5, short tag, EtM +depends_on:27:6:22:20 +21:exp:65:exp:41:int:1:int:1:exp:24:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, SHA-384 +depends_on:27:5:7:8 +21:exp:65:exp:38:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, SHA-384, EtM +depends_on:27:5:7:8:20 +21:exp:65:exp:38:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, SHA-384, short tag +depends_on:27:5:7:8 +21:exp:65:exp:38:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, SHA-384, short tag, EtM +depends_on:27:5:7:8:20 +21:exp:65:exp:38:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, SHA-256 +depends_on:27:5:13 +21:exp:65:exp:39:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, SHA-256, EtM +depends_on:27:5:13:20 +21:exp:65:exp:39:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, SHA-256, short tag +depends_on:27:5:13 +21:exp:65:exp:39:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, SHA-256, short tag, EtM +depends_on:27:5:13:20 +21:exp:65:exp:39:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, SHA-1 +depends_on:27:5:21 +21:exp:65:exp:40:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, SHA-1, EtM +depends_on:27:5:21:20 +21:exp:65:exp:40:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, SHA-1, short tag +depends_on:27:5:21 +21:exp:65:exp:40:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, SHA-1, short tag, EtM +depends_on:27:5:21:20 +21:exp:65:exp:40:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, MD5 +depends_on:27:5:22 +21:exp:65:exp:41:int:0:int:0:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, MD5, EtM +depends_on:27:5:22:20 +21:exp:65:exp:41:int:1:int:0:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, MD5, short tag +depends_on:27:5:22 +21:exp:65:exp:41:int:0:int:1:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.1, MD5, short tag, EtM +depends_on:27:5:22:20 +21:exp:65:exp:41:int:1:int:1:exp:23:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, SHA-384 +depends_on:27:3:7:8 +21:exp:65:exp:38:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, SHA-384, EtM +depends_on:27:3:7:8:20 +21:exp:65:exp:38:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, SHA-384, short tag +depends_on:27:3:7:8 +21:exp:65:exp:38:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, SHA-384, short tag, EtM +depends_on:27:3:7:8:20 +21:exp:65:exp:38:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, SHA-256 +depends_on:27:3:13 +21:exp:65:exp:39:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, SHA-256, EtM +depends_on:27:3:13:20 +21:exp:65:exp:39:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, SHA-256, short tag +depends_on:27:3:13 +21:exp:65:exp:39:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, SHA-256, short tag, EtM +depends_on:27:3:13:20 +21:exp:65:exp:39:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, SHA-1 +depends_on:27:3:21 +21:exp:65:exp:40:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, SHA-1, EtM +depends_on:27:3:21:20 +21:exp:65:exp:40:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, SHA-1, short tag +depends_on:27:3:21 +21:exp:65:exp:40:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, SHA-1, short tag, EtM +depends_on:27:3:21:20 +21:exp:65:exp:40:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, MD5 +depends_on:27:3:22 +21:exp:65:exp:41:int:0:int:0:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, MD5, EtM +depends_on:27:3:22:20 +21:exp:65:exp:41:int:1:int:0:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, MD5, short tag +depends_on:27:3:22 +21:exp:65:exp:41:int:0:int:1:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, 1.0, MD5, short tag, EtM +depends_on:27:3:22:20 +21:exp:65:exp:41:int:1:int:1:exp:22:int:0:int:0 + +Record crypt, little space, NULL cipher, SSL3, SHA-1 +depends_on:27:0:21 +21:exp:65:exp:40:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, NULL cipher, SSL3, SHA-1, EtM +depends_on:27:0:21:20 +21:exp:65:exp:40:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, NULL cipher, SSL3, SHA-1, short tag +depends_on:27:0:21 +21:exp:65:exp:40:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, NULL cipher, SSL3, SHA-1, short tag, EtM +depends_on:27:0:21:20 +21:exp:65:exp:40:int:1:int:1:exp:21:int:0:int:0 + +Record crypt, little space, NULL cipher, SSL3, MD5 +depends_on:27:0:22 +21:exp:65:exp:41:int:0:int:0:exp:21:int:0:int:0 + +Record crypt, little space, NULL cipher, SSL3, MD5, EtM +depends_on:27:0:22:20 +21:exp:65:exp:41:int:1:int:0:exp:21:int:0:int:0 + +Record crypt, little space, NULL cipher, SSL3, MD5, short tag +depends_on:27:0:22 +21:exp:65:exp:41:int:0:int:1:exp:21:int:0:int:0 + +Record crypt, little space, NULL cipher, SSL3, MD5, short tag, EtM +depends_on:27:0:22:20 +21:exp:65:exp:41:int:1:int:1:exp:21:int:0:int:0 + +Decrypt CBC !EtM, AES MD5 !trunc, empty plaintext, minpad +depends_on:9:22 +22:exp:37:exp:41:int:0:exp:36 + +Decrypt CBC !EtM, AES MD5 !trunc, empty plaintext, maxpad +depends_on:9:22 +22:exp:37:exp:41:int:0:exp:67 + +Decrypt CBC !EtM, AES MD5 trunc, empty plaintext, minpad +depends_on:9:22 +22:exp:37:exp:41:int:1:exp:36 + +Decrypt CBC !EtM, AES MD5 trunc, empty plaintext, maxpad +depends_on:9:22 +22:exp:37:exp:41:int:1:exp:67 + +Decrypt CBC !EtM, AES MD5 !trunc, padlen=0 +depends_on:9:22 +22:exp:37:exp:41:int:0:int:0 + +Decrypt CBC !EtM, AES MD5 !trunc, padlen=240 +depends_on:9:22 +22:exp:37:exp:41:int:0:int:240 + +Decrypt CBC !EtM, AES MD5 trunc, padlen=0 +depends_on:9:22 +22:exp:37:exp:41:int:1:int:0 + +Decrypt CBC !EtM, AES MD5 trunc, padlen=240 +depends_on:9:22 +22:exp:37:exp:41:int:1:int:240 + +Decrypt CBC !EtM, AES MD5 !trunc, padlen=1 +depends_on:9:22 +22:exp:37:exp:41:int:0:int:1 + +Decrypt CBC !EtM, AES MD5 !trunc, padlen=241 +depends_on:9:22 +22:exp:37:exp:41:int:0:int:241 + +Decrypt CBC !EtM, AES MD5 trunc, padlen=1 +depends_on:9:22 +22:exp:37:exp:41:int:1:int:1 + +Decrypt CBC !EtM, AES MD5 trunc, padlen=241 +depends_on:9:22 +22:exp:37:exp:41:int:1:int:241 + +Decrypt CBC !EtM, AES MD5 !trunc, padlen=15 +depends_on:9:22 +22:exp:37:exp:41:int:0:int:15 + +Decrypt CBC !EtM, AES MD5 !trunc, padlen=255 +depends_on:9:22 +22:exp:37:exp:41:int:0:int:255 + +Decrypt CBC !EtM, AES MD5 trunc, padlen=15 +depends_on:9:22 +22:exp:37:exp:41:int:1:int:15 + +Decrypt CBC !EtM, AES MD5 trunc, padlen=255 +depends_on:9:22 +22:exp:37:exp:41:int:1:int:255 + +Decrypt CBC !EtM, AES SHA1 !trunc, empty plaintext, minpad +depends_on:9:21 +22:exp:37:exp:40:int:0:exp:36 + +Decrypt CBC !EtM, AES SHA1 !trunc, empty plaintext, maxpad +depends_on:9:21 +22:exp:37:exp:40:int:0:exp:67 + +Decrypt CBC !EtM, AES SHA1 trunc, empty plaintext, minpad +depends_on:9:21 +22:exp:37:exp:40:int:1:exp:36 + +Decrypt CBC !EtM, AES SHA1 trunc, empty plaintext, maxpad +depends_on:9:21 +22:exp:37:exp:40:int:1:exp:67 + +Decrypt CBC !EtM, AES SHA1 !trunc, padlen=0 +depends_on:9:21 +22:exp:37:exp:40:int:0:int:0 + +Decrypt CBC !EtM, AES SHA1 !trunc, padlen=240 +depends_on:9:21 +22:exp:37:exp:40:int:0:int:240 + +Decrypt CBC !EtM, AES SHA1 trunc, padlen=0 +depends_on:9:21 +22:exp:37:exp:40:int:1:int:0 + +Decrypt CBC !EtM, AES SHA1 trunc, padlen=240 +depends_on:9:21 +22:exp:37:exp:40:int:1:int:240 + +Decrypt CBC !EtM, AES SHA1 !trunc, padlen=1 +depends_on:9:21 +22:exp:37:exp:40:int:0:int:1 + +Decrypt CBC !EtM, AES SHA1 !trunc, padlen=241 +depends_on:9:21 +22:exp:37:exp:40:int:0:int:241 + +Decrypt CBC !EtM, AES SHA1 trunc, padlen=1 +depends_on:9:21 +22:exp:37:exp:40:int:1:int:1 + +Decrypt CBC !EtM, AES SHA1 trunc, padlen=241 +depends_on:9:21 +22:exp:37:exp:40:int:1:int:241 + +Decrypt CBC !EtM, AES SHA1 !trunc, padlen=15 +depends_on:9:21 +22:exp:37:exp:40:int:0:int:15 + +Decrypt CBC !EtM, AES SHA1 !trunc, padlen=255 +depends_on:9:21 +22:exp:37:exp:40:int:0:int:255 + +Decrypt CBC !EtM, AES SHA1 trunc, padlen=15 +depends_on:9:21 +22:exp:37:exp:40:int:1:int:15 + +Decrypt CBC !EtM, AES SHA1 trunc, padlen=255 +depends_on:9:21 +22:exp:37:exp:40:int:1:int:255 + +Decrypt CBC !EtM, AES SHA256 !trunc, empty plaintext, minpad +depends_on:9:13 +22:exp:37:exp:39:int:0:exp:36 + +Decrypt CBC !EtM, AES SHA256 !trunc, empty plaintext, maxpad +depends_on:9:13 +22:exp:37:exp:39:int:0:exp:67 + +Decrypt CBC !EtM, AES SHA256 trunc, empty plaintext, minpad +depends_on:9:13 +22:exp:37:exp:39:int:1:exp:36 + +Decrypt CBC !EtM, AES SHA256 trunc, empty plaintext, maxpad +depends_on:9:13 +22:exp:37:exp:39:int:1:exp:67 + +Decrypt CBC !EtM, AES SHA256 !trunc, padlen=0 +depends_on:9:13 +22:exp:37:exp:39:int:0:int:0 + +Decrypt CBC !EtM, AES SHA256 !trunc, padlen=240 +depends_on:9:13 +22:exp:37:exp:39:int:0:int:240 + +Decrypt CBC !EtM, AES SHA256 trunc, padlen=0 +depends_on:9:13 +22:exp:37:exp:39:int:1:int:0 + +Decrypt CBC !EtM, AES SHA256 trunc, padlen=240 +depends_on:9:13 +22:exp:37:exp:39:int:1:int:240 + +Decrypt CBC !EtM, AES SHA256 !trunc, padlen=1 +depends_on:9:13 +22:exp:37:exp:39:int:0:int:1 + +Decrypt CBC !EtM, AES SHA256 !trunc, padlen=241 +depends_on:9:13 +22:exp:37:exp:39:int:0:int:241 + +Decrypt CBC !EtM, AES SHA256 trunc, padlen=1 +depends_on:9:13 +22:exp:37:exp:39:int:1:int:1 + +Decrypt CBC !EtM, AES SHA256 trunc, padlen=241 +depends_on:9:13 +22:exp:37:exp:39:int:1:int:241 + +Decrypt CBC !EtM, AES SHA256 !trunc, padlen=15 +depends_on:9:13 +22:exp:37:exp:39:int:0:int:15 + +Decrypt CBC !EtM, AES SHA256 !trunc, padlen=255 +depends_on:9:13 +22:exp:37:exp:39:int:0:int:255 + +Decrypt CBC !EtM, AES SHA256 trunc, padlen=15 +depends_on:9:13 +22:exp:37:exp:39:int:1:int:15 + +Decrypt CBC !EtM, AES SHA256 trunc, padlen=255 +depends_on:9:13 +22:exp:37:exp:39:int:1:int:255 + +Decrypt CBC !EtM, AES SHA384 !trunc, empty plaintext, minpad +depends_on:9:7:8 +22:exp:37:exp:38:int:0:exp:36 + +Decrypt CBC !EtM, AES SHA384 !trunc, empty plaintext, maxpad +depends_on:9:7:8 +22:exp:37:exp:38:int:0:exp:67 + +Decrypt CBC !EtM, AES SHA384 trunc, empty plaintext, minpad +depends_on:9:7:8 +22:exp:37:exp:38:int:1:exp:36 + +Decrypt CBC !EtM, AES SHA384 trunc, empty plaintext, maxpad +depends_on:9:7:8 +22:exp:37:exp:38:int:1:exp:67 + +Decrypt CBC !EtM, AES SHA384 !trunc, padlen=0 +depends_on:9:7:8 +22:exp:37:exp:38:int:0:int:0 + +Decrypt CBC !EtM, AES SHA384 !trunc, padlen=240 +depends_on:9:7:8 +22:exp:37:exp:38:int:0:int:240 + +Decrypt CBC !EtM, AES SHA384 trunc, padlen=0 +depends_on:9:7:8 +22:exp:37:exp:38:int:1:int:0 + +Decrypt CBC !EtM, AES SHA384 trunc, padlen=240 +depends_on:9:7:8 +22:exp:37:exp:38:int:1:int:240 + +Decrypt CBC !EtM, AES SHA384 !trunc, padlen=1 +depends_on:9:7:8 +22:exp:37:exp:38:int:0:int:1 + +Decrypt CBC !EtM, AES SHA384 !trunc, padlen=241 +depends_on:9:7:8 +22:exp:37:exp:38:int:0:int:241 + +Decrypt CBC !EtM, AES SHA384 trunc, padlen=1 +depends_on:9:7:8 +22:exp:37:exp:38:int:1:int:1 + +Decrypt CBC !EtM, AES SHA384 trunc, padlen=241 +depends_on:9:7:8 +22:exp:37:exp:38:int:1:int:241 + +Decrypt CBC !EtM, AES SHA384 !trunc, padlen=15 +depends_on:9:7:8 +22:exp:37:exp:38:int:0:int:15 + +Decrypt CBC !EtM, AES SHA384 !trunc, padlen=255 +depends_on:9:7:8 +22:exp:37:exp:38:int:0:int:255 + +Decrypt CBC !EtM, AES SHA384 trunc, padlen=15 +depends_on:9:7:8 +22:exp:37:exp:38:int:1:int:15 + +Decrypt CBC !EtM, AES SHA384 trunc, padlen=255 +depends_on:9:7:8 +22:exp:37:exp:38:int:1:int:255 + +Decrypt CBC !EtM, ARIA MD5 !trunc, empty plaintext, minpad +depends_on:23:22 +22:exp:44:exp:41:int:0:exp:36 + +Decrypt CBC !EtM, ARIA MD5 !trunc, empty plaintext, maxpad +depends_on:23:22 +22:exp:44:exp:41:int:0:exp:67 + +Decrypt CBC !EtM, ARIA MD5 trunc, empty plaintext, minpad +depends_on:23:22 +22:exp:44:exp:41:int:1:exp:36 + +Decrypt CBC !EtM, ARIA MD5 trunc, empty plaintext, maxpad +depends_on:23:22 +22:exp:44:exp:41:int:1:exp:67 + +Decrypt CBC !EtM, ARIA MD5 !trunc, padlen=0 +depends_on:23:22 +22:exp:44:exp:41:int:0:int:0 + +Decrypt CBC !EtM, ARIA MD5 !trunc, padlen=240 +depends_on:23:22 +22:exp:44:exp:41:int:0:int:240 + +Decrypt CBC !EtM, ARIA MD5 trunc, padlen=0 +depends_on:23:22 +22:exp:44:exp:41:int:1:int:0 + +Decrypt CBC !EtM, ARIA MD5 trunc, padlen=240 +depends_on:23:22 +22:exp:44:exp:41:int:1:int:240 + +Decrypt CBC !EtM, ARIA MD5 !trunc, padlen=1 +depends_on:23:22 +22:exp:44:exp:41:int:0:int:1 + +Decrypt CBC !EtM, ARIA MD5 !trunc, padlen=241 +depends_on:23:22 +22:exp:44:exp:41:int:0:int:241 + +Decrypt CBC !EtM, ARIA MD5 trunc, padlen=1 +depends_on:23:22 +22:exp:44:exp:41:int:1:int:1 + +Decrypt CBC !EtM, ARIA MD5 trunc, padlen=241 +depends_on:23:22 +22:exp:44:exp:41:int:1:int:241 + +Decrypt CBC !EtM, ARIA MD5 !trunc, padlen=15 +depends_on:23:22 +22:exp:44:exp:41:int:0:int:15 + +Decrypt CBC !EtM, ARIA MD5 !trunc, padlen=255 +depends_on:23:22 +22:exp:44:exp:41:int:0:int:255 + +Decrypt CBC !EtM, ARIA MD5 trunc, padlen=15 +depends_on:23:22 +22:exp:44:exp:41:int:1:int:15 + +Decrypt CBC !EtM, ARIA MD5 trunc, padlen=255 +depends_on:23:22 +22:exp:44:exp:41:int:1:int:255 + +Decrypt CBC !EtM, ARIA SHA1 !trunc, empty plaintext, minpad +depends_on:23:21 +22:exp:44:exp:40:int:0:exp:36 + +Decrypt CBC !EtM, ARIA SHA1 !trunc, empty plaintext, maxpad +depends_on:23:21 +22:exp:44:exp:40:int:0:exp:67 + +Decrypt CBC !EtM, ARIA SHA1 trunc, empty plaintext, minpad +depends_on:23:21 +22:exp:44:exp:40:int:1:exp:36 + +Decrypt CBC !EtM, ARIA SHA1 trunc, empty plaintext, maxpad +depends_on:23:21 +22:exp:44:exp:40:int:1:exp:67 + +Decrypt CBC !EtM, ARIA SHA1 !trunc, padlen=0 +depends_on:23:21 +22:exp:44:exp:40:int:0:int:0 + +Decrypt CBC !EtM, ARIA SHA1 !trunc, padlen=240 +depends_on:23:21 +22:exp:44:exp:40:int:0:int:240 + +Decrypt CBC !EtM, ARIA SHA1 trunc, padlen=0 +depends_on:23:21 +22:exp:44:exp:40:int:1:int:0 + +Decrypt CBC !EtM, ARIA SHA1 trunc, padlen=240 +depends_on:23:21 +22:exp:44:exp:40:int:1:int:240 + +Decrypt CBC !EtM, ARIA SHA1 !trunc, padlen=1 +depends_on:23:21 +22:exp:44:exp:40:int:0:int:1 + +Decrypt CBC !EtM, ARIA SHA1 !trunc, padlen=241 +depends_on:23:21 +22:exp:44:exp:40:int:0:int:241 + +Decrypt CBC !EtM, ARIA SHA1 trunc, padlen=1 +depends_on:23:21 +22:exp:44:exp:40:int:1:int:1 + +Decrypt CBC !EtM, ARIA SHA1 trunc, padlen=241 +depends_on:23:21 +22:exp:44:exp:40:int:1:int:241 + +Decrypt CBC !EtM, ARIA SHA1 !trunc, padlen=15 +depends_on:23:21 +22:exp:44:exp:40:int:0:int:15 + +Decrypt CBC !EtM, ARIA SHA1 !trunc, padlen=255 +depends_on:23:21 +22:exp:44:exp:40:int:0:int:255 + +Decrypt CBC !EtM, ARIA SHA1 trunc, padlen=15 +depends_on:23:21 +22:exp:44:exp:40:int:1:int:15 + +Decrypt CBC !EtM, ARIA SHA1 trunc, padlen=255 +depends_on:23:21 +22:exp:44:exp:40:int:1:int:255 + +Decrypt CBC !EtM, ARIA SHA256 !trunc, empty plaintext, minpad +depends_on:23:13 +22:exp:44:exp:39:int:0:exp:36 + +Decrypt CBC !EtM, ARIA SHA256 !trunc, empty plaintext, maxpad +depends_on:23:13 +22:exp:44:exp:39:int:0:exp:67 + +Decrypt CBC !EtM, ARIA SHA256 trunc, empty plaintext, minpad +depends_on:23:13 +22:exp:44:exp:39:int:1:exp:36 + +Decrypt CBC !EtM, ARIA SHA256 trunc, empty plaintext, maxpad +depends_on:23:13 +22:exp:44:exp:39:int:1:exp:67 + +Decrypt CBC !EtM, ARIA SHA256 !trunc, padlen=0 +depends_on:23:13 +22:exp:44:exp:39:int:0:int:0 + +Decrypt CBC !EtM, ARIA SHA256 !trunc, padlen=240 +depends_on:23:13 +22:exp:44:exp:39:int:0:int:240 + +Decrypt CBC !EtM, ARIA SHA256 trunc, padlen=0 +depends_on:23:13 +22:exp:44:exp:39:int:1:int:0 + +Decrypt CBC !EtM, ARIA SHA256 trunc, padlen=240 +depends_on:23:13 +22:exp:44:exp:39:int:1:int:240 + +Decrypt CBC !EtM, ARIA SHA256 !trunc, padlen=1 +depends_on:23:13 +22:exp:44:exp:39:int:0:int:1 + +Decrypt CBC !EtM, ARIA SHA256 !trunc, padlen=241 +depends_on:23:13 +22:exp:44:exp:39:int:0:int:241 + +Decrypt CBC !EtM, ARIA SHA256 trunc, padlen=1 +depends_on:23:13 +22:exp:44:exp:39:int:1:int:1 + +Decrypt CBC !EtM, ARIA SHA256 trunc, padlen=241 +depends_on:23:13 +22:exp:44:exp:39:int:1:int:241 + +Decrypt CBC !EtM, ARIA SHA256 !trunc, padlen=15 +depends_on:23:13 +22:exp:44:exp:39:int:0:int:15 + +Decrypt CBC !EtM, ARIA SHA256 !trunc, padlen=255 +depends_on:23:13 +22:exp:44:exp:39:int:0:int:255 + +Decrypt CBC !EtM, ARIA SHA256 trunc, padlen=15 +depends_on:23:13 +22:exp:44:exp:39:int:1:int:15 + +Decrypt CBC !EtM, ARIA SHA256 trunc, padlen=255 +depends_on:23:13 +22:exp:44:exp:39:int:1:int:255 + +Decrypt CBC !EtM, ARIA SHA384 !trunc, empty plaintext, minpad +depends_on:23:7:8 +22:exp:44:exp:38:int:0:exp:36 + +Decrypt CBC !EtM, ARIA SHA384 !trunc, empty plaintext, maxpad +depends_on:23:7:8 +22:exp:44:exp:38:int:0:exp:67 + +Decrypt CBC !EtM, ARIA SHA384 trunc, empty plaintext, minpad +depends_on:23:7:8 +22:exp:44:exp:38:int:1:exp:36 + +Decrypt CBC !EtM, ARIA SHA384 trunc, empty plaintext, maxpad +depends_on:23:7:8 +22:exp:44:exp:38:int:1:exp:67 + +Decrypt CBC !EtM, ARIA SHA384 !trunc, padlen=0 +depends_on:23:7:8 +22:exp:44:exp:38:int:0:int:0 + +Decrypt CBC !EtM, ARIA SHA384 !trunc, padlen=240 +depends_on:23:7:8 +22:exp:44:exp:38:int:0:int:240 + +Decrypt CBC !EtM, ARIA SHA384 trunc, padlen=0 +depends_on:23:7:8 +22:exp:44:exp:38:int:1:int:0 + +Decrypt CBC !EtM, ARIA SHA384 trunc, padlen=240 +depends_on:23:7:8 +22:exp:44:exp:38:int:1:int:240 + +Decrypt CBC !EtM, ARIA SHA384 !trunc, padlen=1 +depends_on:23:7:8 +22:exp:44:exp:38:int:0:int:1 + +Decrypt CBC !EtM, ARIA SHA384 !trunc, padlen=241 +depends_on:23:7:8 +22:exp:44:exp:38:int:0:int:241 + +Decrypt CBC !EtM, ARIA SHA384 trunc, padlen=1 +depends_on:23:7:8 +22:exp:44:exp:38:int:1:int:1 + +Decrypt CBC !EtM, ARIA SHA384 trunc, padlen=241 +depends_on:23:7:8 +22:exp:44:exp:38:int:1:int:241 + +Decrypt CBC !EtM, ARIA SHA384 !trunc, padlen=15 +depends_on:23:7:8 +22:exp:44:exp:38:int:0:int:15 + +Decrypt CBC !EtM, ARIA SHA384 !trunc, padlen=255 +depends_on:23:7:8 +22:exp:44:exp:38:int:0:int:255 + +Decrypt CBC !EtM, ARIA SHA384 trunc, padlen=15 +depends_on:23:7:8 +22:exp:44:exp:38:int:1:int:15 + +Decrypt CBC !EtM, ARIA SHA384 trunc, padlen=255 +depends_on:23:7:8 +22:exp:44:exp:38:int:1:int:255 + +Decrypt CBC !EtM, CAMELLIA MD5 !trunc, empty plaintext, minpad +depends_on:16:22 +22:exp:47:exp:41:int:0:exp:36 + +Decrypt CBC !EtM, CAMELLIA MD5 !trunc, empty plaintext, maxpad +depends_on:16:22 +22:exp:47:exp:41:int:0:exp:67 + +Decrypt CBC !EtM, CAMELLIA MD5 trunc, empty plaintext, minpad +depends_on:16:22 +22:exp:47:exp:41:int:1:exp:36 + +Decrypt CBC !EtM, CAMELLIA MD5 trunc, empty plaintext, maxpad +depends_on:16:22 +22:exp:47:exp:41:int:1:exp:67 + +Decrypt CBC !EtM, CAMELLIA MD5 !trunc, padlen=0 +depends_on:16:22 +22:exp:47:exp:41:int:0:int:0 + +Decrypt CBC !EtM, CAMELLIA MD5 !trunc, padlen=240 +depends_on:16:22 +22:exp:47:exp:41:int:0:int:240 + +Decrypt CBC !EtM, CAMELLIA MD5 trunc, padlen=0 +depends_on:16:22 +22:exp:47:exp:41:int:1:int:0 + +Decrypt CBC !EtM, CAMELLIA MD5 trunc, padlen=240 +depends_on:16:22 +22:exp:47:exp:41:int:1:int:240 + +Decrypt CBC !EtM, CAMELLIA MD5 !trunc, padlen=1 +depends_on:16:22 +22:exp:47:exp:41:int:0:int:1 + +Decrypt CBC !EtM, CAMELLIA MD5 !trunc, padlen=241 +depends_on:16:22 +22:exp:47:exp:41:int:0:int:241 + +Decrypt CBC !EtM, CAMELLIA MD5 trunc, padlen=1 +depends_on:16:22 +22:exp:47:exp:41:int:1:int:1 + +Decrypt CBC !EtM, CAMELLIA MD5 trunc, padlen=241 +depends_on:16:22 +22:exp:47:exp:41:int:1:int:241 + +Decrypt CBC !EtM, CAMELLIA MD5 !trunc, padlen=15 +depends_on:16:22 +22:exp:47:exp:41:int:0:int:15 + +Decrypt CBC !EtM, CAMELLIA MD5 !trunc, padlen=255 +depends_on:16:22 +22:exp:47:exp:41:int:0:int:255 + +Decrypt CBC !EtM, CAMELLIA MD5 trunc, padlen=15 +depends_on:16:22 +22:exp:47:exp:41:int:1:int:15 + +Decrypt CBC !EtM, CAMELLIA MD5 trunc, padlen=255 +depends_on:16:22 +22:exp:47:exp:41:int:1:int:255 + +Decrypt CBC !EtM, CAMELLIA SHA1 !trunc, empty plaintext, minpad +depends_on:16:21 +22:exp:47:exp:40:int:0:exp:36 + +Decrypt CBC !EtM, CAMELLIA SHA1 !trunc, empty plaintext, maxpad +depends_on:16:21 +22:exp:47:exp:40:int:0:exp:67 + +Decrypt CBC !EtM, CAMELLIA SHA1 trunc, empty plaintext, minpad +depends_on:16:21 +22:exp:47:exp:40:int:1:exp:36 + +Decrypt CBC !EtM, CAMELLIA SHA1 trunc, empty plaintext, maxpad +depends_on:16:21 +22:exp:47:exp:40:int:1:exp:67 + +Decrypt CBC !EtM, CAMELLIA SHA1 !trunc, padlen=0 +depends_on:16:21 +22:exp:47:exp:40:int:0:int:0 + +Decrypt CBC !EtM, CAMELLIA SHA1 !trunc, padlen=240 +depends_on:16:21 +22:exp:47:exp:40:int:0:int:240 + +Decrypt CBC !EtM, CAMELLIA SHA1 trunc, padlen=0 +depends_on:16:21 +22:exp:47:exp:40:int:1:int:0 + +Decrypt CBC !EtM, CAMELLIA SHA1 trunc, padlen=240 +depends_on:16:21 +22:exp:47:exp:40:int:1:int:240 + +Decrypt CBC !EtM, CAMELLIA SHA1 !trunc, padlen=1 +depends_on:16:21 +22:exp:47:exp:40:int:0:int:1 + +Decrypt CBC !EtM, CAMELLIA SHA1 !trunc, padlen=241 +depends_on:16:21 +22:exp:47:exp:40:int:0:int:241 + +Decrypt CBC !EtM, CAMELLIA SHA1 trunc, padlen=1 +depends_on:16:21 +22:exp:47:exp:40:int:1:int:1 + +Decrypt CBC !EtM, CAMELLIA SHA1 trunc, padlen=241 +depends_on:16:21 +22:exp:47:exp:40:int:1:int:241 + +Decrypt CBC !EtM, CAMELLIA SHA1 !trunc, padlen=15 +depends_on:16:21 +22:exp:47:exp:40:int:0:int:15 + +Decrypt CBC !EtM, CAMELLIA SHA1 !trunc, padlen=255 +depends_on:16:21 +22:exp:47:exp:40:int:0:int:255 + +Decrypt CBC !EtM, CAMELLIA SHA1 trunc, padlen=15 +depends_on:16:21 +22:exp:47:exp:40:int:1:int:15 + +Decrypt CBC !EtM, CAMELLIA SHA1 trunc, padlen=255 +depends_on:16:21 +22:exp:47:exp:40:int:1:int:255 + +Decrypt CBC !EtM, CAMELLIA SHA256 !trunc, empty plaintext, minpad +depends_on:16:13 +22:exp:47:exp:39:int:0:exp:36 + +Decrypt CBC !EtM, CAMELLIA SHA256 !trunc, empty plaintext, maxpad +depends_on:16:13 +22:exp:47:exp:39:int:0:exp:67 + +Decrypt CBC !EtM, CAMELLIA SHA256 trunc, empty plaintext, minpad +depends_on:16:13 +22:exp:47:exp:39:int:1:exp:36 + +Decrypt CBC !EtM, CAMELLIA SHA256 trunc, empty plaintext, maxpad +depends_on:16:13 +22:exp:47:exp:39:int:1:exp:67 + +Decrypt CBC !EtM, CAMELLIA SHA256 !trunc, padlen=0 +depends_on:16:13 +22:exp:47:exp:39:int:0:int:0 + +Decrypt CBC !EtM, CAMELLIA SHA256 !trunc, padlen=240 +depends_on:16:13 +22:exp:47:exp:39:int:0:int:240 + +Decrypt CBC !EtM, CAMELLIA SHA256 trunc, padlen=0 +depends_on:16:13 +22:exp:47:exp:39:int:1:int:0 + +Decrypt CBC !EtM, CAMELLIA SHA256 trunc, padlen=240 +depends_on:16:13 +22:exp:47:exp:39:int:1:int:240 + +Decrypt CBC !EtM, CAMELLIA SHA256 !trunc, padlen=1 +depends_on:16:13 +22:exp:47:exp:39:int:0:int:1 + +Decrypt CBC !EtM, CAMELLIA SHA256 !trunc, padlen=241 +depends_on:16:13 +22:exp:47:exp:39:int:0:int:241 + +Decrypt CBC !EtM, CAMELLIA SHA256 trunc, padlen=1 +depends_on:16:13 +22:exp:47:exp:39:int:1:int:1 + +Decrypt CBC !EtM, CAMELLIA SHA256 trunc, padlen=241 +depends_on:16:13 +22:exp:47:exp:39:int:1:int:241 + +Decrypt CBC !EtM, CAMELLIA SHA256 !trunc, padlen=15 +depends_on:16:13 +22:exp:47:exp:39:int:0:int:15 + +Decrypt CBC !EtM, CAMELLIA SHA256 !trunc, padlen=255 +depends_on:16:13 +22:exp:47:exp:39:int:0:int:255 + +Decrypt CBC !EtM, CAMELLIA SHA256 trunc, padlen=15 +depends_on:16:13 +22:exp:47:exp:39:int:1:int:15 + +Decrypt CBC !EtM, CAMELLIA SHA256 trunc, padlen=255 +depends_on:16:13 +22:exp:47:exp:39:int:1:int:255 + +Decrypt CBC !EtM, CAMELLIA SHA384 !trunc, empty plaintext, minpad +depends_on:16:7:8 +22:exp:47:exp:38:int:0:exp:36 + +Decrypt CBC !EtM, CAMELLIA SHA384 !trunc, empty plaintext, maxpad +depends_on:16:7:8 +22:exp:47:exp:38:int:0:exp:67 + +Decrypt CBC !EtM, CAMELLIA SHA384 trunc, empty plaintext, minpad +depends_on:16:7:8 +22:exp:47:exp:38:int:1:exp:36 + +Decrypt CBC !EtM, CAMELLIA SHA384 trunc, empty plaintext, maxpad +depends_on:16:7:8 +22:exp:47:exp:38:int:1:exp:67 + +Decrypt CBC !EtM, CAMELLIA SHA384 !trunc, padlen=0 +depends_on:16:7:8 +22:exp:47:exp:38:int:0:int:0 + +Decrypt CBC !EtM, CAMELLIA SHA384 !trunc, padlen=240 +depends_on:16:7:8 +22:exp:47:exp:38:int:0:int:240 + +Decrypt CBC !EtM, CAMELLIA SHA384 trunc, padlen=0 +depends_on:16:7:8 +22:exp:47:exp:38:int:1:int:0 + +Decrypt CBC !EtM, CAMELLIA SHA384 trunc, padlen=240 +depends_on:16:7:8 +22:exp:47:exp:38:int:1:int:240 + +Decrypt CBC !EtM, CAMELLIA SHA384 !trunc, padlen=1 +depends_on:16:7:8 +22:exp:47:exp:38:int:0:int:1 + +Decrypt CBC !EtM, CAMELLIA SHA384 !trunc, padlen=241 +depends_on:16:7:8 +22:exp:47:exp:38:int:0:int:241 + +Decrypt CBC !EtM, CAMELLIA SHA384 trunc, padlen=1 +depends_on:16:7:8 +22:exp:47:exp:38:int:1:int:1 + +Decrypt CBC !EtM, CAMELLIA SHA384 trunc, padlen=241 +depends_on:16:7:8 +22:exp:47:exp:38:int:1:int:241 + +Decrypt CBC !EtM, CAMELLIA SHA384 !trunc, padlen=15 +depends_on:16:7:8 +22:exp:47:exp:38:int:0:int:15 + +Decrypt CBC !EtM, CAMELLIA SHA384 !trunc, padlen=255 +depends_on:16:7:8 +22:exp:47:exp:38:int:0:int:255 + +Decrypt CBC !EtM, CAMELLIA SHA384 trunc, padlen=15 +depends_on:16:7:8 +22:exp:47:exp:38:int:1:int:15 + +Decrypt CBC !EtM, CAMELLIA SHA384 trunc, padlen=255 +depends_on:16:7:8 +22:exp:47:exp:38:int:1:int:255 + +Decrypt CBC !EtM, 3DES MD5 !trunc, empty plaintext, minpad +depends_on:29:22 +22:exp:68:exp:41:int:0:exp:36 + +Decrypt CBC !EtM, 3DES MD5 !trunc, empty plaintext, maxpad +depends_on:29:22 +22:exp:68:exp:41:int:0:exp:67 + +Decrypt CBC !EtM, 3DES MD5 trunc, empty plaintext, minpad +depends_on:29:22 +22:exp:68:exp:41:int:1:exp:36 + +Decrypt CBC !EtM, 3DES MD5 trunc, empty plaintext, maxpad +depends_on:29:22 +22:exp:68:exp:41:int:1:exp:67 + +Decrypt CBC !EtM, 3DES MD5 !trunc, padlen=0 +depends_on:29:22 +22:exp:68:exp:41:int:0:int:0 + +Decrypt CBC !EtM, 3DES MD5 !trunc, padlen=248 +depends_on:29:22 +22:exp:68:exp:41:int:0:int:248 + +Decrypt CBC !EtM, 3DES MD5 trunc, padlen=0 +depends_on:29:22 +22:exp:68:exp:41:int:1:int:0 + +Decrypt CBC !EtM, 3DES MD5 trunc, padlen=248 +depends_on:29:22 +22:exp:68:exp:41:int:1:int:248 + +Decrypt CBC !EtM, 3DES MD5 !trunc, padlen=1 +depends_on:29:22 +22:exp:68:exp:41:int:0:int:1 + +Decrypt CBC !EtM, 3DES MD5 !trunc, padlen=249 +depends_on:29:22 +22:exp:68:exp:41:int:0:int:249 + +Decrypt CBC !EtM, 3DES MD5 trunc, padlen=1 +depends_on:29:22 +22:exp:68:exp:41:int:1:int:1 + +Decrypt CBC !EtM, 3DES MD5 trunc, padlen=249 +depends_on:29:22 +22:exp:68:exp:41:int:1:int:249 + +Decrypt CBC !EtM, 3DES MD5 !trunc, padlen=7 +depends_on:29:22 +22:exp:68:exp:41:int:0:int:7 + +Decrypt CBC !EtM, 3DES MD5 !trunc, padlen=255 +depends_on:29:22 +22:exp:68:exp:41:int:0:int:255 + +Decrypt CBC !EtM, 3DES MD5 trunc, padlen=7 +depends_on:29:22 +22:exp:68:exp:41:int:1:int:7 + +Decrypt CBC !EtM, 3DES MD5 trunc, padlen=255 +depends_on:29:22 +22:exp:68:exp:41:int:1:int:255 + +Decrypt CBC !EtM, 3DES SHA1 !trunc, empty plaintext, minpad +depends_on:29:21 +22:exp:68:exp:40:int:0:exp:36 + +Decrypt CBC !EtM, 3DES SHA1 !trunc, empty plaintext, maxpad +depends_on:29:21 +22:exp:68:exp:40:int:0:exp:67 + +Decrypt CBC !EtM, 3DES SHA1 trunc, empty plaintext, minpad +depends_on:29:21 +22:exp:68:exp:40:int:1:exp:36 + +Decrypt CBC !EtM, 3DES SHA1 trunc, empty plaintext, maxpad +depends_on:29:21 +22:exp:68:exp:40:int:1:exp:67 + +Decrypt CBC !EtM, 3DES SHA1 !trunc, padlen=0 +depends_on:29:21 +22:exp:68:exp:40:int:0:int:0 + +Decrypt CBC !EtM, 3DES SHA1 !trunc, padlen=248 +depends_on:29:21 +22:exp:68:exp:40:int:0:int:248 + +Decrypt CBC !EtM, 3DES SHA1 trunc, padlen=0 +depends_on:29:21 +22:exp:68:exp:40:int:1:int:0 + +Decrypt CBC !EtM, 3DES SHA1 trunc, padlen=248 +depends_on:29:21 +22:exp:68:exp:40:int:1:int:248 + +Decrypt CBC !EtM, 3DES SHA1 !trunc, padlen=1 +depends_on:29:21 +22:exp:68:exp:40:int:0:int:1 + +Decrypt CBC !EtM, 3DES SHA1 !trunc, padlen=249 +depends_on:29:21 +22:exp:68:exp:40:int:0:int:249 + +Decrypt CBC !EtM, 3DES SHA1 trunc, padlen=1 +depends_on:29:21 +22:exp:68:exp:40:int:1:int:1 + +Decrypt CBC !EtM, 3DES SHA1 trunc, padlen=249 +depends_on:29:21 +22:exp:68:exp:40:int:1:int:249 + +Decrypt CBC !EtM, 3DES SHA1 !trunc, padlen=7 +depends_on:29:21 +22:exp:68:exp:40:int:0:int:7 + +Decrypt CBC !EtM, 3DES SHA1 !trunc, padlen=255 +depends_on:29:21 +22:exp:68:exp:40:int:0:int:255 + +Decrypt CBC !EtM, 3DES SHA1 trunc, padlen=7 +depends_on:29:21 +22:exp:68:exp:40:int:1:int:7 + +Decrypt CBC !EtM, 3DES SHA1 trunc, padlen=255 +depends_on:29:21 +22:exp:68:exp:40:int:1:int:255 + +Decrypt CBC !EtM, 3DES SHA256 !trunc, empty plaintext, minpad +depends_on:29:13 +22:exp:68:exp:39:int:0:exp:36 + +Decrypt CBC !EtM, 3DES SHA256 !trunc, empty plaintext, maxpad +depends_on:29:13 +22:exp:68:exp:39:int:0:exp:67 + +Decrypt CBC !EtM, 3DES SHA256 trunc, empty plaintext, minpad +depends_on:29:13 +22:exp:68:exp:39:int:1:exp:36 + +Decrypt CBC !EtM, 3DES SHA256 trunc, empty plaintext, maxpad +depends_on:29:13 +22:exp:68:exp:39:int:1:exp:67 + +Decrypt CBC !EtM, 3DES SHA256 !trunc, padlen=0 +depends_on:29:13 +22:exp:68:exp:39:int:0:int:0 + +Decrypt CBC !EtM, 3DES SHA256 !trunc, padlen=248 +depends_on:29:13 +22:exp:68:exp:39:int:0:int:248 + +Decrypt CBC !EtM, 3DES SHA256 trunc, padlen=0 +depends_on:29:13 +22:exp:68:exp:39:int:1:int:0 + +Decrypt CBC !EtM, 3DES SHA256 trunc, padlen=248 +depends_on:29:13 +22:exp:68:exp:39:int:1:int:248 + +Decrypt CBC !EtM, 3DES SHA256 !trunc, padlen=1 +depends_on:29:13 +22:exp:68:exp:39:int:0:int:1 + +Decrypt CBC !EtM, 3DES SHA256 !trunc, padlen=249 +depends_on:29:13 +22:exp:68:exp:39:int:0:int:249 + +Decrypt CBC !EtM, 3DES SHA256 trunc, padlen=1 +depends_on:29:13 +22:exp:68:exp:39:int:1:int:1 + +Decrypt CBC !EtM, 3DES SHA256 trunc, padlen=249 +depends_on:29:13 +22:exp:68:exp:39:int:1:int:249 + +Decrypt CBC !EtM, 3DES SHA256 !trunc, padlen=7 +depends_on:29:13 +22:exp:68:exp:39:int:0:int:7 + +Decrypt CBC !EtM, 3DES SHA256 !trunc, padlen=255 +depends_on:29:13 +22:exp:68:exp:39:int:0:int:255 + +Decrypt CBC !EtM, 3DES SHA256 trunc, padlen=7 +depends_on:29:13 +22:exp:68:exp:39:int:1:int:7 + +Decrypt CBC !EtM, 3DES SHA256 trunc, padlen=255 +depends_on:29:13 +22:exp:68:exp:39:int:1:int:255 + +Decrypt CBC !EtM, 3DES SHA384 !trunc, empty plaintext, minpad +depends_on:29:7:8 +22:exp:68:exp:38:int:0:exp:36 + +Decrypt CBC !EtM, 3DES SHA384 !trunc, empty plaintext, maxpad +depends_on:29:7:8 +22:exp:68:exp:38:int:0:exp:67 + +Decrypt CBC !EtM, 3DES SHA384 trunc, empty plaintext, minpad +depends_on:29:7:8 +22:exp:68:exp:38:int:1:exp:36 + +Decrypt CBC !EtM, 3DES SHA384 trunc, empty plaintext, maxpad +depends_on:29:7:8 +22:exp:68:exp:38:int:1:exp:67 + +Decrypt CBC !EtM, 3DES SHA384 !trunc, padlen=0 +depends_on:29:7:8 +22:exp:68:exp:38:int:0:int:0 + +Decrypt CBC !EtM, 3DES SHA384 !trunc, padlen=248 +depends_on:29:7:8 +22:exp:68:exp:38:int:0:int:248 + +Decrypt CBC !EtM, 3DES SHA384 trunc, padlen=0 +depends_on:29:7:8 +22:exp:68:exp:38:int:1:int:0 + +Decrypt CBC !EtM, 3DES SHA384 trunc, padlen=248 +depends_on:29:7:8 +22:exp:68:exp:38:int:1:int:248 + +Decrypt CBC !EtM, 3DES SHA384 !trunc, padlen=1 +depends_on:29:7:8 +22:exp:68:exp:38:int:0:int:1 + +Decrypt CBC !EtM, 3DES SHA384 !trunc, padlen=249 +depends_on:29:7:8 +22:exp:68:exp:38:int:0:int:249 + +Decrypt CBC !EtM, 3DES SHA384 trunc, padlen=1 +depends_on:29:7:8 +22:exp:68:exp:38:int:1:int:1 + +Decrypt CBC !EtM, 3DES SHA384 trunc, padlen=249 +depends_on:29:7:8 +22:exp:68:exp:38:int:1:int:249 + +Decrypt CBC !EtM, 3DES SHA384 !trunc, padlen=7 +depends_on:29:7:8 +22:exp:68:exp:38:int:0:int:7 + +Decrypt CBC !EtM, 3DES SHA384 !trunc, padlen=255 +depends_on:29:7:8 +22:exp:68:exp:38:int:0:int:255 + +Decrypt CBC !EtM, 3DES SHA384 trunc, padlen=7 +depends_on:29:7:8 +22:exp:68:exp:38:int:1:int:7 + +Decrypt CBC !EtM, 3DES SHA384 trunc, padlen=255 +depends_on:29:7:8 +22:exp:68:exp:38:int:1:int:255 + +SSL TLS 1.3 Key schedule: Secret evolution #1 +depends_on:25 +26:exp:39:hex:"":hex:"":hex:"33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a" + +SSL TLS 1.3 Key schedule: Secret evolution #2 +26:exp:39:hex:"33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a":hex:"df4a291baa1eb7cfa6934b29b474baad2697e29f1f920dcc77c8a0a088447624":hex:"fb9fc80689b3a5d02c33243bf69a1b1b20705588a794304a6e7120155edf149a" + +SSL TLS 1.3 Key schedule: Secret evolution #3 +26:exp:39:hex:"fb9fc80689b3a5d02c33243bf69a1b1b20705588a794304a6e7120155edf149a":hex:"":hex:"7f2882bb9b9a46265941653e9c2f19067118151e21d12e57a7b6aca1f8150c8d" + +SSL TLS 1.3 Key schedule: HKDF Expand Label #1 +23:exp:39:hex:"a2067265e7f0652a923d5d72ab0467c46132eeb968b6a32d311c805868548814":exp:69:hex:"":int:16:hex:"844780a7acad9f980fa25c114e43402a" + +SSL TLS 1.3 Key schedule: HKDF Expand Label #2 +23:exp:39:hex:"a2067265e7f0652a923d5d72ab0467c46132eeb968b6a32d311c805868548814":exp:70:hex:"":int:12:hex:"4c042ddc120a38d1417fc815" + +SSL TLS 1.3 Key schedule: HKDF Expand Label #3 +23:exp:39:hex:"ff0e5b965291c608c1e8cd267eefc0afcc5e98a2786373f0db47b04786d72aea":exp:69:hex:"":int:16:hex:"7154f314e6be7dc008df2c832baa1d39" + +SSL TLS 1.3 Key schedule: HKDF Expand Label #4 +23:exp:39:hex:"ff0e5b965291c608c1e8cd267eefc0afcc5e98a2786373f0db47b04786d72aea":exp:70:hex:"":int:12:hex:"71abc2cae4c699d47c600268" + +SSL TLS 1.3 Key schedule: HKDF Expand Label #5 (RFC 8448) +23:exp:39:hex:"b67b7d690cc16c4e75e54213cb2d37b4e9c912bcded9105d42befd59d391ad38":exp:70:hex:"":int:12:hex:"5d313eb2671276ee13000b30" + +SSL TLS 1.3 Key schedule: HKDF Expand Label #6 (RFC 8448) +23:exp:39:hex:"b67b7d690cc16c4e75e54213cb2d37b4e9c912bcded9105d42befd59d391ad38":exp:69:hex:"":int:16:hex:"3fce516009c21727d0f2e4e86ee403bc" + +SSL TLS 1.3 Key schedule: HKDF Expand Label #7 (RFC 8448) +23:exp:39:hex:"b3eddb126e067f35a780b3abf45e2d8f3b1a950738f52e9600746a0e27a55a21":exp:70:hex:"":int:12:hex:"5bd3c71b836e0b76bb73265f" + +SSL TLS 1.3 Key schedule: HKDF Expand Label #8 (RFC 8448) +23:exp:39:hex:"b3eddb126e067f35a780b3abf45e2d8f3b1a950738f52e9600746a0e27a55a21":exp:69:hex:"":int:16:hex:"dbfaa693d1762c5b666af5d950258d01" + +SSL TLS 1.3 Key schedule: HKDF Expand Label #9 (RFC 8448) +23:exp:39:hex:"2faac08f851d35fea3604fcb4de82dc62c9b164a70974d0462e27f1ab278700f":exp:71:hex:"":int:32:hex:"5ace394c26980d581243f627d1150ae27e37fa52364e0a7f20ac686d09cd0e8e" + +SSL TLS 1.3 Key schedule: HKDF Expand Label #10 (RFC 8448) +23:exp:39:hex:"7df235f2031d2a051287d02b0241b0bfdaf86cc856231f2d5aba46c434ec196c":exp:72:hex:"0000":int:32:hex:"4ecd0eb6ec3b4d87f5d6028f922ca4c5851a277fd41311c9e62d2c9492e1c4f3" + +SSL TLS 1.3 Key schedule: Traffic key generation #1 +24:exp:39:hex:"a2067265e7f0652a923d5d72ab0467c46132eeb968b6a32d311c805868548814":hex:"ff0e5b965291c608c1e8cd267eefc0afcc5e98a2786373f0db47b04786d72aea":int:12:int:16:hex:"844780a7acad9f980fa25c114e43402a":hex:"4c042ddc120a38d1417fc815":hex:"7154f314e6be7dc008df2c832baa1d39":hex:"71abc2cae4c699d47c600268" + +SSL TLS 1.3 Key schedule: Traffic key generation #2 (RFC 8448) +24:exp:39:hex:"a2067265e7f0652a923d5d72ab0467c46132eeb968b6a32d311c805868548814":hex:"ff0e5b965291c608c1e8cd267eefc0afcc5e98a2786373f0db47b04786d72aea":int:12:int:16:hex:"844780a7acad9f980fa25c114e43402a":hex:"4c042ddc120a38d1417fc815":hex:"7154f314e6be7dc008df2c832baa1d39":hex:"71abc2cae4c699d47c600268" + +SSL TLS 1.3 Key schedule: Derive-Secret( ., "derived", "") +25:exp:39:hex:"33ad0a1c607ec03b09e6cd9893680ce210adf300aa1f2660e1b22e10f170f92a":exp:73:hex:"":int:32:exp:74:hex:"6f2615a108c702c5678f54fc9dbab69716c076189c48250cebeac3576c3611ba" + +SSL TLS 1.3 Key schedule: Derive-Secret( ., "s ap traffic", hash) #1 +25:exp:39:hex:"7f2882bb9b9a46265941653e9c2f19067118151e21d12e57a7b6aca1f8150c8d":exp:75:hex:"22844b930e5e0a59a09d5ac35fc032fc91163b193874a265236e568077378d8b":int:32:exp:76:hex:"3fc35ea70693069a277956afa23b8f4543ce68ac595f2aace05cd7a1c92023d5" + +SSL TLS 1.3 Key schedule: Derive-Secret( ., "c e traffic", hash) +25:exp:39:hex:"9b2188e9b2fc6d64d71dc329900e20bb41915000f678aa839cbb797cb7d8332c":exp:77:hex:"08ad0fa05d7c7233b1775ba2ff9f4c5b8b59276b7f227f13a976245f5d960913":int:32:exp:76:hex:"3fbbe6a60deb66c30a32795aba0eff7eaa10105586e7be5c09678d63b6caab62" + +SSL TLS 1.3 Key schedule: Derive-Secret( ., "e exp master", hash) +25:exp:39:hex:"9b2188e9b2fc6d64d71dc329900e20bb41915000f678aa839cbb797cb7d8332c":exp:78:hex:"08ad0fa05d7c7233b1775ba2ff9f4c5b8b59276b7f227f13a976245f5d960913":int:32:exp:76:hex:"b2026866610937d7423e5be90862ccf24c0e6091186d34f812089ff5be2ef7df" + +SSL TLS 1.3 Key schedule: Derive-Secret( ., "c hs traffic", hash) +25:exp:39:hex:"005cb112fd8eb4ccc623bb88a07c64b3ede1605363fc7d0df8c7ce4ff0fb4ae6":exp:79:hex:"f736cb34fe25e701551bee6fd24c1cc7102a7daf9405cb15d97aafe16f757d03":int:32:exp:76:hex:"2faac08f851d35fea3604fcb4de82dc62c9b164a70974d0462e27f1ab278700f" + +SSL TLS 1.3 Key schedule: Derive-Secret( ., "s hs traffic", hash) +25:exp:39:hex:"005cb112fd8eb4ccc623bb88a07c64b3ede1605363fc7d0df8c7ce4ff0fb4ae6":exp:80:hex:"f736cb34fe25e701551bee6fd24c1cc7102a7daf9405cb15d97aafe16f757d03":int:32:exp:76:hex:"fe927ae271312e8bf0275b581c54eef020450dc4ecffaa05a1a35d27518e7803" + +SSL TLS 1.3 Key schedule: Derive-Secret( ., "c ap traffic", hash) +25:exp:39:hex:"e2d32d4ed66dd37897a0e80c84107503ce58bf8aad4cb55a5002d77ecb890ece":exp:81:hex:"b0aeffc46a2cfe33114e6fd7d51f9f04b1ca3c497dab08934a774a9d9ad7dbf3":int:32:exp:76:hex:"2abbf2b8e381d23dbebe1dd2a7d16a8bf484cb4950d23fb7fb7fa8547062d9a1" + +SSL TLS 1.3 Key schedule: Derive-Secret( ., "s ap traffic", hash) #2 +25:exp:39:hex:"e2d32d4ed66dd37897a0e80c84107503ce58bf8aad4cb55a5002d77ecb890ece":exp:75:hex:"b0aeffc46a2cfe33114e6fd7d51f9f04b1ca3c497dab08934a774a9d9ad7dbf3":int:32:exp:76:hex:"cc21f1bf8feb7dd5fa505bd9c4b468a9984d554a993dc49e6d285598fb672691" + +SSL TLS 1.3 Key schedule: Derive-Secret( ., "exp master", hash) +25:exp:39:hex:"e2d32d4ed66dd37897a0e80c84107503ce58bf8aad4cb55a5002d77ecb890ece":exp:82:hex:"b0aeffc46a2cfe33114e6fd7d51f9f04b1ca3c497dab08934a774a9d9ad7dbf3":int:32:exp:76:hex:"3fd93d4ffddc98e64b14dd107aedf8ee4add23f4510f58a4592d0b201bee56b4" + +SSL TLS 1.3 Key schedule: Derive-Secret( ., "res master", hash) +25:exp:39:hex:"e2d32d4ed66dd37897a0e80c84107503ce58bf8aad4cb55a5002d77ecb890ece":exp:83:hex:"c3c122e0bd907a4a3ff6112d8fd53dbf89c773d9552e8b6b9d56d361b3a97bf6":int:32:exp:76:hex:"5e95bdf1f89005ea2e9aa0ba85e728e3c19c5fe0c699e3f5bee59faebd0b5406" + +SSL TLS_PRF MBEDTLS_SSL_TLS_PRF_NONE +27:exp:84:hex:"":hex:"":char*:"test tls_prf label":hex:"":exp:85 + +SSL TLS_PRF MBEDTLS_SSL_TLS_PRF_SSL3 +depends_on:0 +27:exp:86:hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":char*:"test tls_prf label":hex:"3ff3d192aa599255339def5a9723444a":int:0 + +SSL TLS_PRF MBEDTLS_SSL_TLS_PRF_TLS1 TLS 1.0 enabled +depends_on:3 +27:exp:87:hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":char*:"test tls_prf label":hex:"8defca540d41d4c79d390027295bb4e6":int:0 + +SSL TLS_PRF MBEDTLS_SSL_TLS_PRF_TLS1 TLS 1.1 enabled +depends_on:5 +27:exp:87:hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":char*:"test tls_prf label":hex:"8defca540d41d4c79d390027295bb4e6":int:0 + +SSL TLS_PRF MBEDTLS_SSL_TLS_PRF_SHA384 +depends_on:7:8:6 +27:exp:88:hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":char*:"test tls_prf label":hex:"a4206a36eef93f496611c2b7806625c3":int:0 + +SSL TLS_PRF MBEDTLS_SSL_TLS_PRF_SHA256 +depends_on:13:6 +27:exp:89:hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":char*:"test tls_prf label":hex:"7f9998393198a02c8d731ccc2ef90b2c":int:0 + +SSL TLS_PRF MBEDTLS_SSL_TLS_PRF_SSL3 not enabled +depends_on:30 +27:exp:86:hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":char*:"test tls_prf label":hex:"3ff3d192aa599255339def5a9723444a":exp:85 + +SSL TLS_PRF MBEDTLS_SSL_TLS_PRF_TLS1 TLS 1.X not enabled +depends_on:31:32 +27:exp:87:hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":char*:"test tls_prf label":hex:"8defca540d41d4c79d390027295bb4e6":exp:85 + +SSL TLS_PRF MBEDTLS_SSL_TLS_PRF_SHA384 SHA-512 not enabled +depends_on:33 +27:exp:88:hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":char*:"test tls_prf label":hex:"a4206a36eef93f496611c2b7806625c3":exp:85 + +SSL TLS_PRF MBEDTLS_SSL_TLS_PRF_SHA256 SHA-256 not enabled +depends_on:34 +27:exp:89:hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":hex:"1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":char*:"test tls_prf label":hex:"7f9998393198a02c8d731ccc2ef90b2c":exp:85 + +Session serialization, save-load: no ticket, no cert +28:int:0:char*:"" + +Session serialization, save-load: small ticket, no cert +depends_on:35:36 +28:int:42:char*:"" + +Session serialization, save-load: large ticket, no cert +depends_on:35:36 +28:int:1023:char*:"" + +Session serialization, save-load: no ticket, cert +depends_on:37:38:14:15:13:39 +28:int:0:char*:"zip:third_party/mbedtls/test/data/server5.crt" + +Session serialization, save-load: small ticket, cert +depends_on:35:36:37:38:14:15:13:39 +28:int:42:char*:"zip:third_party/mbedtls/test/data/server5.crt" + +Session serialization, save-load: large ticket, cert +depends_on:35:36:37:38:14:15:13:39 +28:int:1023:char*:"zip:third_party/mbedtls/test/data/server5.crt" + +Session serialization, load-save: no ticket, no cert +29:int:0:char*:"" + +Session serialization, load-save: small ticket, no cert +depends_on:35:36 +29:int:42:char*:"" + +Session serialization, load-save: large ticket, no cert +depends_on:35:36 +29:int:1023:char*:"" + +Session serialization, load-save: no ticket, cert +depends_on:37:38:14:15:13:39 +29:int:0:char*:"zip:third_party/mbedtls/test/data/server5.crt" + +Session serialization, load-save: small ticket, cert +depends_on:35:36:37:38:14:15:13:39 +29:int:42:char*:"zip:third_party/mbedtls/test/data/server5.crt" + +Session serialization, load-save: large ticket, cert +depends_on:35:36:37:38:14:15:13:39 +29:int:1023:char*:"zip:third_party/mbedtls/test/data/server5.crt" + +Session serialization, save buffer size: no ticket, no cert +30:int:0:char*:"" + +Session serialization, save buffer size: small ticket, no cert +depends_on:35:36 +30:int:42:char*:"" + +Session serialization, save buffer size: large ticket, no cert +depends_on:35:36 +30:int:1023:char*:"" + +Session serialization, save buffer size: no ticket, cert +depends_on:37:38:14:15:13:39 +30:int:0:char*:"zip:third_party/mbedtls/test/data/server5.crt" + +Session serialization, save buffer size: small ticket, cert +depends_on:35:36:37:38:14:15:13:39 +30:int:42:char*:"zip:third_party/mbedtls/test/data/server5.crt" + +Session serialization, save buffer size: large ticket, cert +depends_on:35:36:37:38:14:15:13:39 +30:int:1023:char*:"zip:third_party/mbedtls/test/data/server5.crt" + +Session serialization, load buffer size: no ticket, no cert +31:int:0:char*:"" + +Session serialization, load buffer size: small ticket, no cert +depends_on:35:36 +31:int:42:char*:"" + +Session serialization, load buffer size: large ticket, no cert +depends_on:35:36 +31:int:1023:char*:"" + +Session serialization, load buffer size: no ticket, cert +depends_on:37:38:14:15:13:39 +31:int:0:char*:"zip:third_party/mbedtls/test/data/server5.crt" + +Session serialization, load buffer size: small ticket, cert +depends_on:35:36:37:38:14:15:13:39 +31:int:42:char*:"zip:third_party/mbedtls/test/data/server5.crt" + +Session serialization, load buffer size: large ticket, cert +depends_on:35:36:37:38:14:15:13:39 +31:int:1023:char*:"zip:third_party/mbedtls/test/data/server5.crt" + +Constant-flow HMAC: MD5 +depends_on:22 +47:exp:41 + +Constant-flow HMAC: SHA1 +depends_on:21 +47:exp:40 + +Constant-flow HMAC: SHA256 +depends_on:13 +47:exp:39 + +Constant-flow HMAC: SHA384 +depends_on:7:8 +47:exp:38 + +Constant-flow memcpy from offset: small +48:int:0:int:5:int:10 + +Constant-flow memcpy from offset: medium +48:int:0:int:255:int:32 + +Constant-flow memcpy from offset: large +48:int:100:int:339:int:48 + diff --git a/third_party/mbedtls/test/test_suite_timing.c b/third_party/mbedtls/test/test_suite_timing.c new file mode 100644 index 000000000..8246ecf64 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_timing.c @@ -0,0 +1,366 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_timing.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_timing.function + * Test suite data : suites/test_suite_timing.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_TIMING_C) + +/* This test module exercises the timing module. Since, depending on the + * underlying operating system, the timing routines are not always reliable, + * this suite only performs very basic sanity checks of the timing API. + */ +void test_timing_hardclock( ) +{ + (void) mbedtls_timing_hardclock(); + /* This goto is added to avoid warnings from the generated code. */ + goto exit; +exit: + ; +} + +void test_timing_hardclock_wrapper( void ** params ) +{ + (void)params; + + test_timing_hardclock( ); +} +void test_timing_get_timer( ) +{ + struct mbedtls_timing_hr_time time; + (void) mbedtls_timing_get_timer( &time, 1 ); + (void) mbedtls_timing_get_timer( &time, 0 ); + /* This goto is added to avoid warnings from the generated code. */ + goto exit; +exit: + ; +} + +void test_timing_get_timer_wrapper( void ** params ) +{ + (void)params; + + test_timing_get_timer( ); +} +void test_timing_set_alarm( int seconds ) +{ + if( seconds == 0 ) + { + mbedtls_set_alarm( seconds ); + TEST_ASSERT( mbedtls_timing_alarmed == 1 ); + } + else + { + mbedtls_set_alarm( seconds ); + TEST_ASSERT( mbedtls_timing_alarmed == 0 || + mbedtls_timing_alarmed == 1 ); + } +exit: + ; +} + +void test_timing_set_alarm_wrapper( void ** params ) +{ + + test_timing_set_alarm( *( (int *) params[0] ) ); +} +void test_timing_delay( int fin_ms ) +{ + mbedtls_timing_delay_context ctx; + int result; + if( fin_ms == 0 ) + { + mbedtls_timing_set_delay( &ctx, 0, 0 ); + result = mbedtls_timing_get_delay( &ctx ); + TEST_ASSERT( result == -1 ); + } + else + { + mbedtls_timing_set_delay( &ctx, fin_ms / 2, fin_ms ); + result = mbedtls_timing_get_delay( &ctx ); + TEST_ASSERT( result >= 0 && result <= 2 ); + } +exit: + ; +} + +void test_timing_delay_wrapper( void ** params ) +{ + + test_timing_delay( *( (int *) params[0] ) ); +} +#endif /* MBEDTLS_TIMING_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_TIMING_C) + +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_TIMING_C) + +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_TIMING_C) + test_timing_hardclock_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_TIMING_C) + test_timing_get_timer_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_TIMING_C) + test_timing_set_alarm_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_TIMING_C) + test_timing_delay_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_timing.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_timing.datax b/third_party/mbedtls/test/test_suite_timing.datax new file mode 100644 index 000000000..57f09be85 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_timing.datax @@ -0,0 +1,18 @@ +Timing: hardclock +0 + +Timing: get timer +1 + +Timing: set alarm with no delay +2:int:0 + +Timing: set alarm with 1s delay +2:int:1 + +Timing: delay 0ms +3:int:0 + +Timing: delay 100ms +3:int:100 + diff --git a/third_party/mbedtls/test/test_suite_version.c b/third_party/mbedtls/test/test_suite_version.c new file mode 100644 index 000000000..3281ad2e9 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_version.c @@ -0,0 +1,372 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_version.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_version.function + * Test suite data : suites/test_suite_version.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_VERSION_C) +#include "third_party/mbedtls/version.h" +void test_check_compiletime_version( char * version_str ) +{ + char build_str[100]; + char build_str_full[100]; + unsigned int build_int; + + memset( build_str, 0, 100 ); + memset( build_str_full, 0, 100 ); + + mbedtls_snprintf( build_str, 100, "%d.%d.%d", MBEDTLS_VERSION_MAJOR, + MBEDTLS_VERSION_MINOR, MBEDTLS_VERSION_PATCH ); + + mbedtls_snprintf( build_str_full, 100, "mbed TLS %d.%d.%d", MBEDTLS_VERSION_MAJOR, + MBEDTLS_VERSION_MINOR, MBEDTLS_VERSION_PATCH ); + + build_int = MBEDTLS_VERSION_MAJOR << 24 | + MBEDTLS_VERSION_MINOR << 16 | + MBEDTLS_VERSION_PATCH << 8; + + TEST_ASSERT( build_int == MBEDTLS_VERSION_NUMBER ); + TEST_ASSERT( strcmp( build_str, MBEDTLS_VERSION_STRING ) == 0 ); + TEST_ASSERT( strcmp( build_str_full, MBEDTLS_VERSION_STRING_FULL ) == 0 ); + TEST_ASSERT( strcmp( version_str, MBEDTLS_VERSION_STRING ) == 0 ); +exit: + ; +} + +void test_check_compiletime_version_wrapper( void ** params ) +{ + + test_check_compiletime_version( (char *) params[0] ); +} +void test_check_runtime_version( char * version_str ) +{ + char build_str[100]; + char get_str[100]; + char build_str_full[100]; + char get_str_full[100]; + unsigned int get_int; + + memset( build_str, 0, 100 ); + memset( get_str, 0, 100 ); + memset( build_str_full, 0, 100 ); + memset( get_str_full, 0, 100 ); + + get_int = mbedtls_version_get_number(); + mbedtls_version_get_string( get_str ); + mbedtls_version_get_string_full( get_str_full ); + + mbedtls_snprintf( build_str, 100, "%u.%u.%u", + (get_int >> 24) & 0xFF, + (get_int >> 16) & 0xFF, + (get_int >> 8) & 0xFF ); + mbedtls_snprintf( build_str_full, 100, "mbed TLS %s", version_str ); + + TEST_ASSERT( strcmp( build_str, version_str ) == 0 ); + TEST_ASSERT( strcmp( build_str_full, get_str_full ) == 0 ); + TEST_ASSERT( strcmp( version_str, get_str ) == 0 ); +exit: + ; +} + +void test_check_runtime_version_wrapper( void ** params ) +{ + + test_check_runtime_version( (char *) params[0] ); +} +#if defined(MBEDTLS_VERSION_FEATURES) +void test_check_feature( char *feature, int result ) +{ + int check = mbedtls_version_check_feature( feature ); + TEST_ASSERT( check == result ); +exit: + ; +} + +void test_check_feature_wrapper( void ** params ) +{ + + test_check_feature( (char *) params[0], *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_VERSION_FEATURES */ +#endif /* MBEDTLS_VERSION_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_VERSION_C) + + case 0: + { + *out_value = -1; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_VERSION_C) + + case 0: + { +#if defined(MBEDTLS_AES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_VERSION_C) + test_check_compiletime_version_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_VERSION_C) + test_check_runtime_version_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_VERSION_C) && defined(MBEDTLS_VERSION_FEATURES) + test_check_feature_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_version.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_version.datax b/third_party/mbedtls/test/test_suite_version.datax new file mode 100644 index 000000000..827d0e7ba --- /dev/null +++ b/third_party/mbedtls/test/test_suite_version.datax @@ -0,0 +1,16 @@ +Check compiletime library version +0:char*:"2.26.0" + +Check runtime library version +1:char*:"2.26.0" + +Check for MBEDTLS_VERSION_C +2:char*:"MBEDTLS_VERSION_C":int:0 + +Check for MBEDTLS_AES_C when already present +depends_on:0 +2:char*:"MBEDTLS_AES_C":int:0 + +Check for unknown define +2:char*:"MBEDTLS_UNKNOWN":exp:0 + diff --git a/third_party/mbedtls/test/test_suite_x509parse.c b/third_party/mbedtls/test/test_suite_x509parse.c new file mode 100644 index 000000000..5e42af53b --- /dev/null +++ b/third_party/mbedtls/test/test_suite_x509parse.c @@ -0,0 +1,2719 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +#include "libc/testlib/testlib.h" +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_x509parse.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_x509parse.function + * Test suite data : suites/test_suite_x509parse.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_BIGNUM_C) +#include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/x509.h" +#include "third_party/mbedtls/x509_crt.h" +#include "third_party/mbedtls/x509_crl.h" +#include "third_party/mbedtls/x509_csr.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/base64.h" + +#if MBEDTLS_X509_MAX_INTERMEDIATE_CA > 19 +#error "The value of MBEDTLS_X509_MAX_INTERMEDIATE_C is larger \ +than the current threshold 19. To test larger values, please \ +adapt the script tests/data_files/dir-max/long.sh." +#endif + +/* Test-only profile allowing all digests, PK algorithms, and curves. */ +const mbedtls_x509_crt_profile profile_all = +{ + 0xFFFFFFFF, /* Any MD */ + 0xFFFFFFFF, /* Any PK alg */ + 0xFFFFFFFF, /* Any curve */ + 1024, +}; + +/* Profile for backward compatibility. Allows SHA-1, unlike the default + profile. */ +const mbedtls_x509_crt_profile compat_profile = +{ + MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA1 ) | + MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_RIPEMD160 ) | + MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA224 ) | + MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA256 ) | + MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA384 ) | + MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA512 ), + 0xFFFFFFF, /* Any PK alg */ + 0xFFFFFFF, /* Any curve */ + 1024, +}; + +const mbedtls_x509_crt_profile profile_rsa3072 = +{ + MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA256 ) | + MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA384 ) | + MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA512 ), + MBEDTLS_X509_ID_FLAG( MBEDTLS_PK_RSA ), + 0, + 3072, +}; + +const mbedtls_x509_crt_profile profile_sha512 = +{ + MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA512 ), + 0xFFFFFFF, /* Any PK alg */ + 0xFFFFFFF, /* Any curve */ + 1024, +}; + +int verify_none( void *data, mbedtls_x509_crt *crt, int certificate_depth, uint32_t *flags ) +{ + ((void) data); + ((void) crt); + ((void) certificate_depth); + *flags |= MBEDTLS_X509_BADCERT_OTHER; + + return 0; +} + +int verify_all( void *data, mbedtls_x509_crt *crt, int certificate_depth, uint32_t *flags ) +{ + ((void) data); + ((void) crt); + ((void) certificate_depth); + *flags = 0; + + return 0; +} + +#if defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK) +int ca_callback_fail( void *data, mbedtls_x509_crt const *child, mbedtls_x509_crt **candidates ) +{ + ((void) data); + ((void) child); + ((void) candidates); + + return -1; +} + +int ca_callback( void *data, mbedtls_x509_crt const *child, + mbedtls_x509_crt **candidates ) +{ + int ret = 0; + mbedtls_x509_crt *ca = (mbedtls_x509_crt *) data; + mbedtls_x509_crt *first; + + /* This is a test-only implementation of the CA callback + * which always returns the entire list of trusted certificates. + * Production implementations managing a large number of CAs + * should use an efficient presentation and lookup for the + * set of trusted certificates (such as a hashtable) and only + * return those trusted certificates which satisfy basic + * parental checks, such as the matching of child `Issuer` + * and parent `Subject` field. */ + ((void) child); + + first = mbedtls_calloc( 1, sizeof( mbedtls_x509_crt ) ); + if( first == NULL ) + { + ret = -1; + goto exit; + } + mbedtls_x509_crt_init( first ); + + if( mbedtls_x509_crt_parse_der( first, ca->raw.p, ca->raw.len ) != 0 ) + { + ret = -1; + goto exit; + } + + while( ca->next != NULL ) + { + ca = ca->next; + if( mbedtls_x509_crt_parse_der( first, ca->raw.p, ca->raw.len ) != 0 ) + { + ret = -1; + goto exit; + } + } + +exit: + + if( ret != 0 ) + { + mbedtls_x509_crt_free( first ); + mbedtls_free( first ); + first = NULL; + } + + *candidates = first; + return( ret ); +} +#endif /* MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK */ + +int verify_fatal( void *data, mbedtls_x509_crt *crt, int certificate_depth, uint32_t *flags ) +{ + int *levels = (int *) data; + + ((void) crt); + ((void) certificate_depth); + + /* Simulate a fatal error in the callback */ + if( *levels & ( 1 << certificate_depth ) ) + { + *flags |= ( 1 << certificate_depth ); + return( -1 - certificate_depth ); + } + + return( 0 ); +} + +/* strsep() not available on Windows */ +char *mystrsep(char **stringp, const char *delim) +{ + const char *p; + char *ret = *stringp; + + if( *stringp == NULL ) + return( NULL ); + + for( ; ; (*stringp)++ ) + { + if( **stringp == '\0' ) + { + *stringp = NULL; + goto done; + } + + for( p = delim; *p != '\0'; p++ ) + if( **stringp == *p ) + { + **stringp = '\0'; + (*stringp)++; + goto done; + } + } + +done: + return( ret ); +} + +#if defined(MBEDTLS_X509_CRT_PARSE_C) +typedef struct { + char buf[512]; + char *p; +} verify_print_context; + +void verify_print_init( verify_print_context *ctx ) +{ + memset( ctx, 0, sizeof( verify_print_context ) ); + ctx->p = ctx->buf; +} + +int verify_print( void *data, mbedtls_x509_crt *crt, int certificate_depth, uint32_t *flags ) +{ + int ret; + verify_print_context *ctx = (verify_print_context *) data; + char *p = ctx->p; + size_t n = ctx->buf + sizeof( ctx->buf ) - ctx->p; + ((void) flags); + + ret = mbedtls_snprintf( p, n, "depth %d - serial ", certificate_depth ); + MBEDTLS_X509_SAFE_SNPRINTF; + + ret = mbedtls_x509_serial_gets( p, n, &crt->serial ); + MBEDTLS_X509_SAFE_SNPRINTF; + + ret = mbedtls_snprintf( p, n, " - subject " ); + MBEDTLS_X509_SAFE_SNPRINTF; + + ret = mbedtls_x509_dn_gets( p, n, &crt->subject ); + MBEDTLS_X509_SAFE_SNPRINTF; + + ret = mbedtls_snprintf( p, n, " - flags 0x%08x\n", *flags ); + MBEDTLS_X509_SAFE_SNPRINTF; + + ctx->p = p; + + return( 0 ); +} + +int verify_parse_san( mbedtls_x509_subject_alternative_name *san, + char **buf, size_t *size ) +{ + int ret; + size_t i; + char *p = *buf; + size_t n = *size; + + ret = mbedtls_snprintf( p, n, "type : %d", san->type ); + MBEDTLS_X509_SAFE_SNPRINTF; + + switch( san->type ) + { + case( MBEDTLS_X509_SAN_OTHER_NAME ): + ret = mbedtls_snprintf( p, n, "\notherName :"); + MBEDTLS_X509_SAFE_SNPRINTF; + + if( MBEDTLS_OID_CMP( MBEDTLS_OID_ON_HW_MODULE_NAME, + &san->san.other_name.value.hardware_module_name.oid ) != 0 ) + { + ret = mbedtls_snprintf( p, n, " hardware module name :" ); + MBEDTLS_X509_SAFE_SNPRINTF; + ret = mbedtls_snprintf( p, n, " hardware type : " ); + MBEDTLS_X509_SAFE_SNPRINTF; + + ret = mbedtls_oid_get_numeric_string( p, n, + &san->san.other_name.value.hardware_module_name.oid ); + MBEDTLS_X509_SAFE_SNPRINTF; + + ret = mbedtls_snprintf( p, n, ", hardware serial number : " ); + MBEDTLS_X509_SAFE_SNPRINTF; + + if( san->san.other_name.value.hardware_module_name.val.len >= n ) + { + *p = '\0'; + return( MBEDTLS_ERR_X509_BUFFER_TOO_SMALL ); + } + + for( i=0; i < san->san.other_name.value.hardware_module_name.val.len; i++ ) + { + *p++ = san->san.other_name.value.hardware_module_name.val.p[i]; + } + n -= san->san.other_name.value.hardware_module_name.val.len; + } + break;/* MBEDTLS_OID_ON_HW_MODULE_NAME */ + case( MBEDTLS_X509_SAN_DNS_NAME ): + ret = mbedtls_snprintf( p, n, "\ndNSName : " ); + MBEDTLS_X509_SAFE_SNPRINTF; + if( san->san.unstructured_name.len >= n ) + { + *p = '\0'; + return( MBEDTLS_ERR_X509_BUFFER_TOO_SMALL ); + } + n -= san->san.unstructured_name.len; + for( i = 0; i < san->san.unstructured_name.len; i++ ) + *p++ = san->san.unstructured_name.p[i]; + break;/* MBEDTLS_X509_SAN_DNS_NAME */ + + default: + /* + * Should not happen. + */ + return( -1 ); + } + ret = mbedtls_snprintf( p, n, "\n" ); + MBEDTLS_X509_SAFE_SNPRINTF; + + *size = n; + *buf = p; + + return( 0 ); +} + +int parse_crt_ext_cb( void *p_ctx, mbedtls_x509_crt const *crt, mbedtls_x509_buf const *oid, + int critical, const unsigned char *cp, const unsigned char *end ) +{ + ( void ) crt; + ( void ) critical; + mbedtls_x509_buf *new_oid = (mbedtls_x509_buf *)p_ctx; + if( oid->tag == MBEDTLS_ASN1_OID && + MBEDTLS_OID_CMP( MBEDTLS_OID_CERTIFICATE_POLICIES, oid ) == 0 ) + { + /* Handle unknown certificate policy */ + int ret, parse_ret = 0; + size_t len; + unsigned char **p = (unsigned char **)&cp; + + /* Get main sequence tag */ + ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ); + if( ret != 0 ) + return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + + if( *p + len != end ) + return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + + /* + * Cannot be an empty sequence. + */ + if( len == 0 ) + return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + + while( *p < end ) + { + const unsigned char *policy_end; + + /* + * Get the policy sequence + */ + if( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + + policy_end = *p + len; + + if( ( ret = mbedtls_asn1_get_tag( p, policy_end, &len, + MBEDTLS_ASN1_OID ) ) != 0 ) + return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + + /* + * Recognize exclusively the policy with OID 1 + */ + if( len != 1 || *p[0] != 1 ) + parse_ret = MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE; + + *p += len; + + /* + * If there is an optional qualifier, then *p < policy_end + * Check the Qualifier len to verify it doesn't exceed policy_end. + */ + if( *p < policy_end ) + { + if( ( ret = mbedtls_asn1_get_tag( p, policy_end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + /* + * Skip the optional policy qualifiers. + */ + *p += len; + } + + if( *p != policy_end ) + return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + } + + if( *p != end ) + return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + + return( parse_ret ); + } + else if( new_oid != NULL && new_oid->tag == oid->tag && new_oid->len == oid->len && + memcmp( new_oid->p, oid->p, oid->len ) == 0 ) + return( 0 ); + else + return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); +} +#endif /* MBEDTLS_X509_CRT_PARSE_C */ + +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRT_PARSE_C) +void test_x509_parse_san( char * crt_file, char * result_str ) +{ + int ret; + mbedtls_x509_crt crt; + mbedtls_x509_subject_alternative_name san; + mbedtls_x509_sequence *cur = NULL; + char buf[2000]; + char *p = buf; + size_t n = sizeof( buf ); + + mbedtls_x509_crt_init( &crt ); + memset( buf, 0, 2000 ); + + TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 ); + + if( crt.ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME ) + { + cur = &crt.subject_alt_names; + while( cur != NULL ) + { + ret = mbedtls_x509_parse_subject_alt_name( &cur->buf, &san ); + TEST_ASSERT( ret == 0 || ret == MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ); + /* + * If san type not supported, ignore. + */ + if( ret == 0) + TEST_ASSERT( verify_parse_san( &san, &p, &n ) == 0 ); + cur = cur->next; + } + } + + TEST_ASSERT( strcmp( buf, result_str ) == 0 ); + +exit: + + mbedtls_x509_crt_free( &crt ); +} + +void test_x509_parse_san_wrapper( void ** params ) +{ + + test_x509_parse_san( (char *) params[0], (char *) params[1] ); +} +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ + +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRT_PARSE_C) +void test_x509_cert_info( char * crt_file, char * result_str ) +{ + mbedtls_x509_crt crt; + char buf[2000]; + int res; + + mbedtls_x509_crt_init( &crt ); + memset( buf, 0, 2000 ); + + TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 ); + res = mbedtls_x509_crt_info( buf, 2000, "", &crt ); + + TEST_ASSERT( res != -1 ); + TEST_ASSERT( res != -2 ); + + TEST_ASSERT( strcmp( buf, result_str ) == 0 ); + +exit: + mbedtls_x509_crt_free( &crt ); +} + +void test_x509_cert_info_wrapper( void ** params ) +{ + + test_x509_cert_info( (char *) params[0], (char *) params[1] ); +} +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRL_PARSE_C) +void test_mbedtls_x509_crl_info( char * crl_file, char * result_str ) +{ + mbedtls_x509_crl crl; + char buf[2000]; + int res; + + mbedtls_x509_crl_init( &crl ); + memset( buf, 0, 2000 ); + + TEST_ASSERT( mbedtls_x509_crl_parse_file( &crl, crl_file ) == 0 ); + res = mbedtls_x509_crl_info( buf, 2000, "", &crl ); + + TEST_ASSERT( res != -1 ); + TEST_ASSERT( res != -2 ); + + TEST_ASSERT( strcmp( buf, result_str ) == 0 ); + +exit: + mbedtls_x509_crl_free( &crl ); +} + +void test_mbedtls_x509_crl_info_wrapper( void ** params ) +{ + + test_mbedtls_x509_crl_info( (char *) params[0], (char *) params[1] ); +} +#endif /* MBEDTLS_X509_CRL_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRL_PARSE_C) +void test_mbedtls_x509_crl_parse( char * crl_file, int result ) +{ + mbedtls_x509_crl crl; + char buf[2000]; + + mbedtls_x509_crl_init( &crl ); + memset( buf, 0, 2000 ); + + TEST_ASSERT( mbedtls_x509_crl_parse_file( &crl, crl_file ) == result ); + +exit: + mbedtls_x509_crl_free( &crl ); +} + +void test_mbedtls_x509_crl_parse_wrapper( void ** params ) +{ + + test_mbedtls_x509_crl_parse( (char *) params[0], *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_X509_CRL_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CSR_PARSE_C) +void test_mbedtls_x509_csr_info( char * csr_file, char * result_str ) +{ + mbedtls_x509_csr csr; + char buf[2000]; + int res; + + mbedtls_x509_csr_init( &csr ); + memset( buf, 0, 2000 ); + + TEST_ASSERT( mbedtls_x509_csr_parse_file( &csr, csr_file ) == 0 ); + res = mbedtls_x509_csr_info( buf, 2000, "", &csr ); + + TEST_ASSERT( res != -1 ); + TEST_ASSERT( res != -2 ); + + TEST_ASSERT( strcmp( buf, result_str ) == 0 ); + +exit: + mbedtls_x509_csr_free( &csr ); +} + +void test_mbedtls_x509_csr_info_wrapper( void ** params ) +{ + + test_mbedtls_x509_csr_info( (char *) params[0], (char *) params[1] ); +} +#endif /* MBEDTLS_X509_CSR_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +void test_x509_verify_info( int flags, char * prefix, char * result_str ) +{ + char buf[2000]; + int res; + + memset( buf, 0, sizeof( buf ) ); + + res = mbedtls_x509_crt_verify_info( buf, sizeof( buf ), prefix, flags ); + + TEST_ASSERT( res >= 0 ); + + TEST_ASSERT( strcmp( buf, result_str ) == 0 ); +exit: + ; +} + +void test_x509_verify_info_wrapper( void ** params ) +{ + + test_x509_verify_info( *( (int *) params[0] ), (char *) params[1], (char *) params[2] ); +} +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if defined(MBEDTLS_X509_CRL_PARSE_C) +#if defined(MBEDTLS_ECP_RESTARTABLE) +#if defined(MBEDTLS_ECDSA_C) +void test_x509_verify_restart( char *crt_file, char *ca_file, + int result, int flags_result, + int max_ops, int min_restart, int max_restart ) +{ + int ret, cnt_restart; + mbedtls_x509_crt_restart_ctx rs_ctx; + mbedtls_x509_crt crt; + mbedtls_x509_crt ca; + uint32_t flags = 0; + + /* + * See comments on ecp_test_vect_restart() for op count precision. + * + * For reference, with mbed TLS 2.6 and default settings: + * - ecdsa_verify() for P-256: ~ 6700 + * - ecdsa_verify() for P-384: ~ 18800 + * - x509_verify() for server5 -> test-ca2: ~ 18800 + * - x509_verify() for server10 -> int-ca3 -> int-ca2: ~ 25500 + */ + + mbedtls_x509_crt_restart_init( &rs_ctx ); + mbedtls_x509_crt_init( &crt ); + mbedtls_x509_crt_init( &ca ); + + TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 ); + TEST_ASSERT( mbedtls_x509_crt_parse_file( &ca, ca_file ) == 0 ); + + mbedtls_ecp_set_max_ops( max_ops ); + + cnt_restart = 0; + do { + ret = mbedtls_x509_crt_verify_restartable( &crt, &ca, NULL, + &mbedtls_x509_crt_profile_default, NULL, &flags, + NULL, NULL, &rs_ctx ); + } while( ret == MBEDTLS_ERR_ECP_IN_PROGRESS && ++cnt_restart ); + + TEST_ASSERT( ret == result ); + TEST_ASSERT( flags == (uint32_t) flags_result ); + + TEST_ASSERT( cnt_restart >= min_restart ); + TEST_ASSERT( cnt_restart <= max_restart ); + + /* Do we leak memory when aborting? */ + ret = mbedtls_x509_crt_verify_restartable( &crt, &ca, NULL, + &mbedtls_x509_crt_profile_default, NULL, &flags, + NULL, NULL, &rs_ctx ); + TEST_ASSERT( ret == result || ret == MBEDTLS_ERR_ECP_IN_PROGRESS ); + +exit: + mbedtls_x509_crt_restart_free( &rs_ctx ); + mbedtls_x509_crt_free( &crt ); + mbedtls_x509_crt_free( &ca ); +} + +void test_x509_verify_restart_wrapper( void ** params ) +{ + + test_x509_verify_restart( (char *) params[0], (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ) ); +} +#endif /* MBEDTLS_ECDSA_C */ +#endif /* MBEDTLS_ECP_RESTARTABLE */ +#endif /* MBEDTLS_X509_CRL_PARSE_C */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if defined(MBEDTLS_X509_CRL_PARSE_C) +void test_x509_verify( char *crt_file, char *ca_file, char *crl_file, + char *cn_name_str, int result, int flags_result, + char *profile_str, + char *verify_callback ) +{ + mbedtls_x509_crt crt; + mbedtls_x509_crt ca; + mbedtls_x509_crl crl; + uint32_t flags = 0; + int res; + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *) = NULL; + char * cn_name = NULL; + const mbedtls_x509_crt_profile *profile; + + mbedtls_x509_crt_init( &crt ); + mbedtls_x509_crt_init( &ca ); + mbedtls_x509_crl_init( &crl ); + + USE_PSA_INIT( ); + + if( strcmp( cn_name_str, "NULL" ) != 0 ) + cn_name = cn_name_str; + + if( strcmp( profile_str, "" ) == 0 ) + profile = &mbedtls_x509_crt_profile_default; + else if( strcmp( profile_str, "next" ) == 0 ) + profile = &mbedtls_x509_crt_profile_next; + else if( strcmp( profile_str, "suite_b" ) == 0 ) + profile = &mbedtls_x509_crt_profile_suiteb; + else if( strcmp( profile_str, "compat" ) == 0 ) + profile = &compat_profile; + else if( strcmp( profile_str, "all" ) == 0 ) + profile = &profile_all; + else + TEST_ASSERT( "Unknown algorithm profile" == 0 ); + + if( strcmp( verify_callback, "NULL" ) == 0 ) + f_vrfy = NULL; + else if( strcmp( verify_callback, "verify_none" ) == 0 ) + f_vrfy = verify_none; + else if( strcmp( verify_callback, "verify_all" ) == 0 ) + f_vrfy = verify_all; + else + TEST_ASSERT( "No known verify callback selected" == 0 ); + + TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 ); + TEST_ASSERT( mbedtls_x509_crt_parse_file( &ca, ca_file ) == 0 ); + TEST_ASSERT( mbedtls_x509_crl_parse_file( &crl, crl_file ) == 0 ); + + res = mbedtls_x509_crt_verify_with_profile( &crt, &ca, &crl, profile, cn_name, &flags, f_vrfy, NULL ); + + TEST_ASSERT( res == ( result ) ); + TEST_ASSERT( flags == (uint32_t)( flags_result ) ); + +#if defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK) + /* CRLs aren't supported with CA callbacks, so skip the CA callback + * version of the test if CRLs are in use. */ + if( crl_file == NULL || strcmp( crl_file, "" ) == 0 ) + { + flags = 0; + + res = mbedtls_x509_crt_verify_with_ca_cb( &crt, ca_callback, &ca, profile, cn_name, &flags, f_vrfy, NULL ); + + TEST_ASSERT( res == ( result ) ); + TEST_ASSERT( flags == (uint32_t)( flags_result ) ); + } +#endif /* MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK */ +exit: + mbedtls_x509_crt_free( &crt ); + mbedtls_x509_crt_free( &ca ); + mbedtls_x509_crl_free( &crl ); + USE_PSA_DONE( ); +} + +void test_x509_verify_wrapper( void ** params ) +{ + + test_x509_verify( (char *) params[0], (char *) params[1], (char *) params[2], (char *) params[3], *( (int *) params[4] ), *( (int *) params[5] ), (char *) params[6], (char *) params[7] ); +} +#endif /* MBEDTLS_X509_CRL_PARSE_C */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ + +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if defined(MBEDTLS_X509_CRL_PARSE_C) +#if defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK) +void test_x509_verify_ca_cb_failure( char *crt_file, char *ca_file, char *name, + int exp_ret ) +{ + int ret; + mbedtls_x509_crt crt; + mbedtls_x509_crt ca; + uint32_t flags = 0; + + mbedtls_x509_crt_init( &crt ); + mbedtls_x509_crt_init( &ca ); + + TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 ); + TEST_ASSERT( mbedtls_x509_crt_parse_file( &ca, ca_file ) == 0 ); + + if( strcmp( name, "NULL" ) == 0 ) + name = NULL; + + ret = mbedtls_x509_crt_verify_with_ca_cb( &crt, ca_callback_fail, &ca, + &compat_profile, name, &flags, + NULL, NULL ); + + TEST_ASSERT( ret == exp_ret ); + TEST_ASSERT( flags == (uint32_t)( -1 ) ); +exit: + mbedtls_x509_crt_free( &crt ); + mbedtls_x509_crt_free( &ca ); +} + +void test_x509_verify_ca_cb_failure_wrapper( void ** params ) +{ + + test_x509_verify_ca_cb_failure( (char *) params[0], (char *) params[1], (char *) params[2], *( (int *) params[3] ) ); +} +#endif /* MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK */ +#endif /* MBEDTLS_X509_CRL_PARSE_C */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ + +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRT_PARSE_C) +void test_x509_verify_callback( char *crt_file, char *ca_file, char *name, + int exp_ret, char *exp_vrfy_out ) +{ + int ret; + mbedtls_x509_crt crt; + mbedtls_x509_crt ca; + uint32_t flags = 0; + verify_print_context vrfy_ctx; + + mbedtls_x509_crt_init( &crt ); + mbedtls_x509_crt_init( &ca ); + verify_print_init( &vrfy_ctx ); + + USE_PSA_INIT( ); + + TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 ); + TEST_ASSERT( mbedtls_x509_crt_parse_file( &ca, ca_file ) == 0 ); + + if( strcmp( name, "NULL" ) == 0 ) + name = NULL; + + ret = mbedtls_x509_crt_verify_with_profile( &crt, &ca, NULL, + &compat_profile, + name, &flags, + verify_print, &vrfy_ctx ); + + TEST_ASSERT( ret == exp_ret ); + TEST_ASSERT( strcmp( vrfy_ctx.buf, exp_vrfy_out ) == 0 ); + +exit: + mbedtls_x509_crt_free( &crt ); + mbedtls_x509_crt_free( &ca ); + USE_PSA_DONE( ); +} + +void test_x509_verify_callback_wrapper( void ** params ) +{ + + test_x509_verify_callback( (char *) params[0], (char *) params[1], (char *) params[2], *( (int *) params[3] ), (char *) params[4] ); +} +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRT_PARSE_C) +void test_mbedtls_x509_dn_gets( char * crt_file, char * entity, char * result_str ) +{ + mbedtls_x509_crt crt; + char buf[2000]; + int res = 0; + + mbedtls_x509_crt_init( &crt ); + memset( buf, 0, 2000 ); + + TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 ); + if( strcmp( entity, "subject" ) == 0 ) + res = mbedtls_x509_dn_gets( buf, 2000, &crt.subject ); + else if( strcmp( entity, "issuer" ) == 0 ) + res = mbedtls_x509_dn_gets( buf, 2000, &crt.issuer ); + else + TEST_ASSERT( "Unknown entity" == 0 ); + + TEST_ASSERT( res != -1 ); + TEST_ASSERT( res != -2 ); + + TEST_ASSERT( strcmp( buf, result_str ) == 0 ); + +exit: + mbedtls_x509_crt_free( &crt ); +} + +void test_mbedtls_x509_dn_gets_wrapper( void ** params ) +{ + + test_mbedtls_x509_dn_gets( (char *) params[0], (char *) params[1], (char *) params[2] ); +} +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRT_PARSE_C) +void test_mbedtls_x509_time_is_past( char * crt_file, char * entity, int result ) +{ + mbedtls_x509_crt crt; + + mbedtls_x509_crt_init( &crt ); + + TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 ); + + if( strcmp( entity, "valid_from" ) == 0 ) + TEST_ASSERT( mbedtls_x509_time_is_past( &crt.valid_from ) == result ); + else if( strcmp( entity, "valid_to" ) == 0 ) + TEST_ASSERT( mbedtls_x509_time_is_past( &crt.valid_to ) == result ); + else + TEST_ASSERT( "Unknown entity" == 0 ); + +exit: + mbedtls_x509_crt_free( &crt ); +} + +void test_mbedtls_x509_time_is_past_wrapper( void ** params ) +{ + + test_mbedtls_x509_time_is_past( (char *) params[0], (char *) params[1], *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRT_PARSE_C) +void test_mbedtls_x509_time_is_future( char * crt_file, char * entity, int result ) +{ + mbedtls_x509_crt crt; + + mbedtls_x509_crt_init( &crt ); + + TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 ); + + if( strcmp( entity, "valid_from" ) == 0 ) + TEST_ASSERT( mbedtls_x509_time_is_future( &crt.valid_from ) == result ); + else if( strcmp( entity, "valid_to" ) == 0 ) + TEST_ASSERT( mbedtls_x509_time_is_future( &crt.valid_to ) == result ); + else + TEST_ASSERT( "Unknown entity" == 0 ); + +exit: + mbedtls_x509_crt_free( &crt ); +} + +void test_mbedtls_x509_time_is_future_wrapper( void ** params ) +{ + + test_mbedtls_x509_time_is_future( (char *) params[0], (char *) params[1], *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if defined(MBEDTLS_FS_IO) +void test_x509parse_crt_file( char * crt_file, int result ) +{ + mbedtls_x509_crt crt; + + mbedtls_x509_crt_init( &crt ); + + TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == result ); + +exit: + mbedtls_x509_crt_free( &crt ); +} + +void test_x509parse_crt_file_wrapper( void ** params ) +{ + + test_x509parse_crt_file( (char *) params[0], *( (int *) params[1] ) ); +} +#endif /* MBEDTLS_FS_IO */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +void test_x509parse_crt( data_t * buf, char * result_str, int result ) +{ + mbedtls_x509_crt crt; + unsigned char output[2000]; + int res; + + mbedtls_x509_crt_init( &crt ); + memset( output, 0, 2000 ); + + TEST_ASSERT( mbedtls_x509_crt_parse_der( &crt, buf->x, buf->len ) == ( result ) ); + if( ( result ) == 0 ) + { + res = mbedtls_x509_crt_info( (char *) output, 2000, "", &crt ); + + TEST_ASSERT( res != -1 ); + TEST_ASSERT( res != -2 ); + + TEST_ASSERT( strcmp( (char *) output, result_str ) == 0 ); + } + + mbedtls_x509_crt_free( &crt ); + mbedtls_x509_crt_init( &crt ); + memset( output, 0, 2000 ); + + TEST_ASSERT( mbedtls_x509_crt_parse_der_nocopy( &crt, buf->x, buf->len ) == ( result ) ); + if( ( result ) == 0 ) + { + res = mbedtls_x509_crt_info( (char *) output, 2000, "", &crt ); + + TEST_ASSERT( res != -1 ); + TEST_ASSERT( res != -2 ); + + TEST_ASSERT( strcmp( (char *) output, result_str ) == 0 ); + } + + mbedtls_x509_crt_free( &crt ); + mbedtls_x509_crt_init( &crt ); + memset( output, 0, 2000 ); + + TEST_ASSERT( mbedtls_x509_crt_parse_der_with_ext_cb( &crt, buf->x, buf->len, 0, NULL, NULL ) == ( result ) ); + if( ( result ) == 0 ) + { + res = mbedtls_x509_crt_info( (char *) output, 2000, "", &crt ); + + TEST_ASSERT( res != -1 ); + TEST_ASSERT( res != -2 ); + + TEST_ASSERT( strcmp( (char *) output, result_str ) == 0 ); + } + + mbedtls_x509_crt_free( &crt ); + mbedtls_x509_crt_init( &crt ); + memset( output, 0, 2000 ); + + TEST_ASSERT( mbedtls_x509_crt_parse_der_with_ext_cb( &crt, buf->x, buf->len, 1, NULL, NULL ) == ( result ) ); + if( ( result ) == 0 ) + { + res = mbedtls_x509_crt_info( (char *) output, 2000, "", &crt ); + + TEST_ASSERT( res != -1 ); + TEST_ASSERT( res != -2 ); + + TEST_ASSERT( strcmp( (char *) output, result_str ) == 0 ); + } + +exit: + mbedtls_x509_crt_free( &crt ); +} + +void test_x509parse_crt_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_x509parse_crt( &data0, (char *) params[2], *( (int *) params[3] ) ); +} +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +void test_x509parse_crt_cb( data_t * buf, char * result_str, int result ) +{ + mbedtls_x509_crt crt; + mbedtls_x509_buf oid; + unsigned char output[2000]; + int res; + + oid.tag = MBEDTLS_ASN1_OID; + oid.len = MBEDTLS_OID_SIZE(MBEDTLS_OID_PKIX "\x01\x1F"); + oid.p = (unsigned char *)MBEDTLS_OID_PKIX "\x01\x1F"; + + mbedtls_x509_crt_init( &crt ); + memset( output, 0, 2000 ); + + TEST_ASSERT( mbedtls_x509_crt_parse_der_with_ext_cb( &crt, buf->x, buf->len, 0, parse_crt_ext_cb, &oid ) == ( result ) ); + if( ( result ) == 0 ) + { + res = mbedtls_x509_crt_info( (char *) output, 2000, "", &crt ); + + TEST_ASSERT( res != -1 ); + TEST_ASSERT( res != -2 ); + + TEST_ASSERT( strcmp( (char *) output, result_str ) == 0 ); + } + + mbedtls_x509_crt_free( &crt ); + mbedtls_x509_crt_init( &crt ); + memset( output, 0, 2000 ); + + TEST_ASSERT( mbedtls_x509_crt_parse_der_with_ext_cb( &crt, buf->x, buf->len, 1, parse_crt_ext_cb, &oid ) == ( result ) ); + if( ( result ) == 0 ) + { + res = mbedtls_x509_crt_info( (char *) output, 2000, "", &crt ); + + TEST_ASSERT( res != -1 ); + TEST_ASSERT( res != -2 ); + + TEST_ASSERT( strcmp( (char *) output, result_str ) == 0 ); + } + +exit: + mbedtls_x509_crt_free( &crt ); +} + +void test_x509parse_crt_cb_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_x509parse_crt_cb( &data0, (char *) params[2], *( (int *) params[3] ) ); +} +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRL_PARSE_C) +void test_x509parse_crl( data_t * buf, char * result_str, int result ) +{ + mbedtls_x509_crl crl; + unsigned char output[2000]; + int res; + + mbedtls_x509_crl_init( &crl ); + memset( output, 0, 2000 ); + + + TEST_ASSERT( mbedtls_x509_crl_parse( &crl, buf->x, buf->len ) == ( result ) ); + if( ( result ) == 0 ) + { + res = mbedtls_x509_crl_info( (char *) output, 2000, "", &crl ); + + TEST_ASSERT( res != -1 ); + TEST_ASSERT( res != -2 ); + + TEST_ASSERT( strcmp( (char *) output, result_str ) == 0 ); + } + +exit: + mbedtls_x509_crl_free( &crl ); +} + +void test_x509parse_crl_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_x509parse_crl( &data0, (char *) params[2], *( (int *) params[3] ) ); +} +#endif /* MBEDTLS_X509_CRL_PARSE_C */ +#if defined(MBEDTLS_X509_CSR_PARSE_C) +void test_mbedtls_x509_csr_parse( data_t * csr_der, char * ref_out, int ref_ret ) +{ + mbedtls_x509_csr csr; + char my_out[1000]; + int my_ret; + + mbedtls_x509_csr_init( &csr ); + memset( my_out, 0, sizeof( my_out ) ); + + my_ret = mbedtls_x509_csr_parse_der( &csr, csr_der->x, csr_der->len ); + TEST_ASSERT( my_ret == ref_ret ); + + if( ref_ret == 0 ) + { + size_t my_out_len = mbedtls_x509_csr_info( my_out, sizeof( my_out ), "", &csr ); + TEST_ASSERT( my_out_len == strlen( ref_out ) ); + TEST_ASSERT( strcmp( my_out, ref_out ) == 0 ); + } + +exit: + mbedtls_x509_csr_free( &csr ); +} + +void test_mbedtls_x509_csr_parse_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_mbedtls_x509_csr_parse( &data0, (char *) params[2], *( (int *) params[3] ) ); +} +#endif /* MBEDTLS_X509_CSR_PARSE_C */ +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRT_PARSE_C) +void test_mbedtls_x509_crt_parse_path( char * crt_path, int ret, int nb_crt ) +{ + mbedtls_x509_crt chain, *cur; + int i; + + mbedtls_x509_crt_init( &chain ); + + TEST_ASSERT( mbedtls_x509_crt_parse_path( &chain, crt_path ) == ret ); + + /* Check how many certs we got */ + for( i = 0, cur = &chain; cur != NULL; cur = cur->next ) + if( cur->raw.p != NULL ) + i++; + + TEST_ASSERT( i == nb_crt ); + +exit: + mbedtls_x509_crt_free( &chain ); +} + +void test_mbedtls_x509_crt_parse_path_wrapper( void ** params ) +{ + + test_mbedtls_x509_crt_parse_path( (char *) params[0], *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRT_PARSE_C) +void test_mbedtls_x509_crt_verify_max( char *ca_file, char *chain_dir, int nb_int, + int ret_chk, int flags_chk ) +{ + char file_buf[128]; + int ret; + uint32_t flags; + mbedtls_x509_crt trusted, chain; + + /* + * We expect chain_dir to contain certificates 00.crt, 01.crt, etc. + * with NN.crt signed by NN-1.crt + */ + + mbedtls_x509_crt_init( &trusted ); + mbedtls_x509_crt_init( &chain ); + + USE_PSA_INIT( ); + + /* Load trusted root */ + TEST_ASSERT( mbedtls_x509_crt_parse_file( &trusted, ca_file ) == 0 ); + + /* Load a chain with nb_int intermediates (from 01 to nb_int), + * plus one "end-entity" cert (nb_int + 1) */ + ret = mbedtls_snprintf( file_buf, sizeof file_buf, "%s/c%02d.pem", chain_dir, + nb_int + 1 ); + TEST_ASSERT( ret > 0 && (size_t) ret < sizeof file_buf ); + TEST_ASSERT( mbedtls_x509_crt_parse_file( &chain, file_buf ) == 0 ); + + /* Try to verify that chain */ + ret = mbedtls_x509_crt_verify( &chain, &trusted, NULL, NULL, &flags, + NULL, NULL ); + TEST_ASSERT( ret == ret_chk ); + TEST_ASSERT( flags == (uint32_t) flags_chk ); + +exit: + mbedtls_x509_crt_free( &chain ); + mbedtls_x509_crt_free( &trusted ); + USE_PSA_DONE( ); +} + +void test_mbedtls_x509_crt_verify_max_wrapper( void ** params ) +{ + + test_mbedtls_x509_crt_verify_max( (char *) params[0], (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRT_PARSE_C) +void test_mbedtls_x509_crt_verify_chain( char *chain_paths, char *trusted_ca, + int flags_result, int result, + char *profile_name, int vrfy_fatal_lvls ) +{ + char* act; + uint32_t flags; + int res; + mbedtls_x509_crt trusted, chain; + const mbedtls_x509_crt_profile *profile = NULL; + + mbedtls_x509_crt_init( &chain ); + mbedtls_x509_crt_init( &trusted ); + + USE_PSA_INIT( ); + + while( ( act = mystrsep( &chain_paths, " " ) ) != NULL ) + TEST_ASSERT( mbedtls_x509_crt_parse_file( &chain, act ) == 0 ); + TEST_ASSERT( mbedtls_x509_crt_parse_file( &trusted, trusted_ca ) == 0 ); + + if( strcmp( profile_name, "" ) == 0 ) + profile = &mbedtls_x509_crt_profile_default; + else if( strcmp( profile_name, "next" ) == 0 ) + profile = &mbedtls_x509_crt_profile_next; + else if( strcmp( profile_name, "suiteb" ) == 0 ) + profile = &mbedtls_x509_crt_profile_suiteb; + else if( strcmp( profile_name, "rsa3072" ) == 0 ) + profile = &profile_rsa3072; + else if( strcmp( profile_name, "sha512" ) == 0 ) + profile = &profile_sha512; + + res = mbedtls_x509_crt_verify_with_profile( &chain, &trusted, NULL, profile, + NULL, &flags, verify_fatal, &vrfy_fatal_lvls ); + + TEST_ASSERT( res == ( result ) ); + TEST_ASSERT( flags == (uint32_t)( flags_result ) ); + +exit: + mbedtls_x509_crt_free( &trusted ); + mbedtls_x509_crt_free( &chain ); + USE_PSA_DONE( ); +} + +void test_mbedtls_x509_crt_verify_chain_wrapper( void ** params ) +{ + + test_mbedtls_x509_crt_verify_chain( (char *) params[0], (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), (char *) params[4], *( (int *) params[5] ) ); +} +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_X509_USE_C) +void test_x509_oid_desc( data_t * buf, char * ref_desc ) +{ + mbedtls_x509_buf oid; + const char *desc = NULL; + int ret; + + + oid.tag = MBEDTLS_ASN1_OID; + oid.p = buf->x; + oid.len = buf->len; + + ret = mbedtls_oid_get_extended_key_usage( &oid, &desc ); + + if( strcmp( ref_desc, "notfound" ) == 0 ) + { + TEST_ASSERT( ret != 0 ); + TEST_ASSERT( desc == NULL ); + } + else + { + TEST_ASSERT( ret == 0 ); + TEST_ASSERT( desc != NULL ); + TEST_ASSERT( strcmp( desc, ref_desc ) == 0 ); + } +exit: + ; +} + +void test_x509_oid_desc_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_x509_oid_desc( &data0, (char *) params[2] ); +} +#endif /* MBEDTLS_X509_USE_C */ +#if defined(MBEDTLS_X509_USE_C) +void test_x509_oid_numstr( data_t * oid_buf, char * numstr, int blen, int ret ) +{ + mbedtls_x509_buf oid; + char num_buf[100]; + + memset( num_buf, 0x2a, sizeof num_buf ); + + oid.tag = MBEDTLS_ASN1_OID; + oid.p = oid_buf->x; + oid.len = oid_buf->len; + + TEST_ASSERT( (size_t) blen <= sizeof num_buf ); + + TEST_ASSERT( mbedtls_oid_get_numeric_string( num_buf, blen, &oid ) == ret ); + + if( ret >= 0 ) + { + TEST_ASSERT( num_buf[ret] == 0 ); + TEST_ASSERT( strcmp( num_buf, numstr ) == 0 ); + } +exit: + ; +} + +void test_x509_oid_numstr_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_x509_oid_numstr( &data0, (char *) params[2], *( (int *) params[3] ), *( (int *) params[4] ) ); +} +#endif /* MBEDTLS_X509_USE_C */ +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if defined(MBEDTLS_X509_CHECK_KEY_USAGE) +void test_x509_check_key_usage( char * crt_file, int usage, int ret ) +{ + mbedtls_x509_crt crt; + + mbedtls_x509_crt_init( &crt ); + + TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 ); + + TEST_ASSERT( mbedtls_x509_crt_check_key_usage( &crt, usage ) == ret ); + +exit: + mbedtls_x509_crt_free( &crt ); +} + +void test_x509_check_key_usage_wrapper( void ** params ) +{ + + test_x509_check_key_usage( (char *) params[0], *( (int *) params[1] ), *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_X509_CHECK_KEY_USAGE */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE) +void test_x509_check_extended_key_usage( char * crt_file, data_t * oid, int ret + ) +{ + mbedtls_x509_crt crt; + + mbedtls_x509_crt_init( &crt ); + + + TEST_ASSERT( mbedtls_x509_crt_parse_file( &crt, crt_file ) == 0 ); + + TEST_ASSERT( mbedtls_x509_crt_check_extended_key_usage( &crt, (const char *)oid->x, oid->len ) == ret ); + +exit: + mbedtls_x509_crt_free( &crt ); +} + +void test_x509_check_extended_key_usage_wrapper( void ** params ) +{ + data_t data1 = {(uint8_t *) params[1], *( (uint32_t *) params[2] )}; + + test_x509_check_extended_key_usage( (char *) params[0], &data1, *( (int *) params[3] ) ); +} +#endif /* MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ +#if defined(MBEDTLS_X509_USE_C) +void test_x509_get_time( int tag, char * time_str, int ret, int year, int mon, + int day, int hour, int min, int sec ) +{ + mbedtls_x509_time time; + unsigned char buf[21]; + unsigned char* start = buf; + unsigned char* end = buf; + + memset( &time, 0x00, sizeof( time ) ); + *end = (unsigned char)tag; end++; + *end = strlen( time_str ); + TEST_ASSERT( *end < 20 ); + end++; + memcpy( end, time_str, (size_t)*(end - 1) ); + end += *(end - 1); + + TEST_ASSERT( mbedtls_x509_get_time( &start, end, &time ) == ret ); + if( ret == 0 ) + { + TEST_ASSERT( year == time.year ); + TEST_ASSERT( mon == time.mon ); + TEST_ASSERT( day == time.day ); + TEST_ASSERT( hour == time.hour ); + TEST_ASSERT( min == time.min ); + TEST_ASSERT( sec == time.sec ); + } +exit: + ; +} + +void test_x509_get_time_wrapper( void ** params ) +{ + + test_x509_get_time( *( (int *) params[0] ), (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ), *( (int *) params[7] ), *( (int *) params[8] ) ); +} +#endif /* MBEDTLS_X509_USE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) +void test_x509_parse_rsassa_pss_params( data_t * params, int params_tag, + int ref_msg_md, int ref_mgf_md, + int ref_salt_len, int ref_ret ) +{ + int my_ret; + mbedtls_x509_buf buf; + mbedtls_md_type_t my_msg_md, my_mgf_md; + int my_salt_len; + + buf.p = params->x; + buf.len = params->len; + buf.tag = params_tag; + + my_ret = mbedtls_x509_get_rsassa_pss_params( &buf, &my_msg_md, &my_mgf_md, + &my_salt_len ); + + TEST_ASSERT( my_ret == ref_ret ); + + if( ref_ret == 0 ) + { + TEST_ASSERT( my_msg_md == (mbedtls_md_type_t) ref_msg_md ); + TEST_ASSERT( my_mgf_md == (mbedtls_md_type_t) ref_mgf_md ); + TEST_ASSERT( my_salt_len == ref_salt_len ); + } + +exit: + ;; +} + +void test_x509_parse_rsassa_pss_params_wrapper( void ** params ) +{ + data_t data0 = {(uint8_t *) params[0], *( (uint32_t *) params[1] )}; + + test_x509_parse_rsassa_pss_params( &data0, *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ) ); +} +#endif /* MBEDTLS_X509_RSASSA_PSS_SUPPORT */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if defined(MBEDTLS_SELF_TEST) +void test_x509_selftest( ) +{ + TEST_ASSERT( mbedtls_x509_self_test( 1 ) == 0 ); +exit: + ; +} + +void test_x509_selftest_wrapper( void ** params ) +{ + (void)params; + + test_x509_selftest( ); +} +#endif /* MBEDTLS_SELF_TEST */ +#endif /* MBEDTLS_X509_CRT_PARSE_C */ +#endif /* MBEDTLS_BIGNUM_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_BIGNUM_C) + + case 0: + { + *out_value = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; + } + break; + case 1: + { + *out_value = MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG; + } + break; + case 2: + { + *out_value = MBEDTLS_X509_BADCERT_MISSING; + } + break; + case 3: + { + *out_value = MBEDTLS_X509_BADCERT_EXPIRED | MBEDTLS_X509_BADCRL_EXPIRED; + } + break; + case 4: + { + *out_value = MBEDTLS_X509_BADCERT_OTHER | 0x80000000; + } + break; + case 5: + { + *out_value = MBEDTLS_ERR_X509_CERT_VERIFY_FAILED; + } + break; + case 6: + { + *out_value = MBEDTLS_X509_BADCERT_REVOKED | MBEDTLS_X509_BADCRL_EXPIRED; + } + break; + case 7: + { + *out_value = MBEDTLS_X509_BADCERT_REVOKED | MBEDTLS_X509_BADCRL_FUTURE; + } + break; + case 8: + { + *out_value = MBEDTLS_X509_BADCERT_REVOKED | MBEDTLS_X509_BADCRL_EXPIRED | MBEDTLS_X509_BADCERT_CN_MISMATCH; + } + break; + case 9: + { + *out_value = MBEDTLS_X509_BADCERT_REVOKED | MBEDTLS_X509_BADCRL_FUTURE | MBEDTLS_X509_BADCERT_CN_MISMATCH; + } + break; + case 10: + { + *out_value = MBEDTLS_X509_BADCRL_EXPIRED; + } + break; + case 11: + { + *out_value = MBEDTLS_X509_BADCRL_FUTURE; + } + break; + case 12: + { + *out_value = MBEDTLS_X509_BADCERT_REVOKED; + } + break; + case 13: + { + *out_value = MBEDTLS_X509_BADCERT_REVOKED | MBEDTLS_X509_BADCERT_CN_MISMATCH; + } + break; + case 14: + { + *out_value = MBEDTLS_X509_BADCERT_EXPIRED; + } + break; + case 15: + { + *out_value = MBEDTLS_X509_BADCERT_FUTURE; + } + break; + case 16: + { + *out_value = MBEDTLS_X509_BADCERT_NOT_TRUSTED; + } + break; + case 17: + { + *out_value = MBEDTLS_X509_BADCERT_BAD_MD; + } + break; + case 18: + { + *out_value = MBEDTLS_X509_BADCRL_BAD_MD | MBEDTLS_X509_BADCERT_BAD_MD; + } + break; + case 19: + { + *out_value = MBEDTLS_X509_BADCERT_OTHER; + } + break; + case 20: + { + *out_value = MBEDTLS_X509_BADCERT_CN_MISMATCH; + } + break; + case 21: + { + *out_value = MBEDTLS_X509_BADCERT_CN_MISMATCH + MBEDTLS_X509_BADCERT_NOT_TRUSTED; + } + break; + case 22: + { + *out_value = MBEDTLS_X509_BADCRL_NOT_TRUSTED; + } + break; + case 23: + { + *out_value = MBEDTLS_X509_BADCERT_REVOKED|MBEDTLS_X509_BADCRL_FUTURE; + } + break; + case 24: + { + *out_value = MBEDTLS_X509_BADCERT_BAD_MD|MBEDTLS_X509_BADCERT_BAD_PK|MBEDTLS_X509_BADCERT_BAD_KEY|MBEDTLS_X509_BADCRL_BAD_MD|MBEDTLS_X509_BADCRL_BAD_PK; + } + break; + case 25: + { + *out_value = MBEDTLS_X509_BADCERT_BAD_PK; + } + break; + case 26: + { + *out_value = MBEDTLS_X509_BADCERT_BAD_MD|MBEDTLS_X509_BADCRL_BAD_MD; + } + break; + case 27: + { + *out_value = MBEDTLS_ERR_X509_FATAL_ERROR; + } + break; + case 28: + { + *out_value = MBEDTLS_ERR_X509_INVALID_FORMAT; + } + break; + case 29: + { + *out_value = MBEDTLS_ERR_X509_INVALID_FORMAT + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG; + } + break; + case 30: + { + *out_value = MBEDTLS_ERR_X509_INVALID_FORMAT + MBEDTLS_ERR_ASN1_OUT_OF_DATA; + } + break; + case 31: + { + *out_value = MBEDTLS_ERR_X509_INVALID_FORMAT + MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + break; + case 32: + { + *out_value = MBEDTLS_ERR_X509_INVALID_SERIAL + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG; + } + break; + case 33: + { + *out_value = MBEDTLS_ERR_X509_INVALID_VERSION + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG; + } + break; + case 34: + { + *out_value = MBEDTLS_ERR_X509_INVALID_VERSION + MBEDTLS_ERR_ASN1_OUT_OF_DATA; + } + break; + case 35: + { + *out_value = MBEDTLS_ERR_X509_INVALID_VERSION + MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + break; + case 36: + { + *out_value = MBEDTLS_ERR_X509_INVALID_VERSION + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; + } + break; + case 37: + { + *out_value = MBEDTLS_ERR_X509_UNKNOWN_VERSION; + } + break; + case 38: + { + *out_value = MBEDTLS_ERR_X509_INVALID_SERIAL + MBEDTLS_ERR_ASN1_OUT_OF_DATA; + } + break; + case 39: + { + *out_value = MBEDTLS_ERR_X509_INVALID_SERIAL + MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + break; + case 40: + { + *out_value = MBEDTLS_ERR_X509_INVALID_ALG + MBEDTLS_ERR_ASN1_OUT_OF_DATA; + } + break; + case 41: + { + *out_value = MBEDTLS_ERR_X509_INVALID_ALG + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG; + } + break; + case 42: + { + *out_value = MBEDTLS_ERR_X509_INVALID_ALG + MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + break; + case 43: + { + *out_value = MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG + MBEDTLS_ERR_OID_NOT_FOUND; + } + break; + case 44: + { + *out_value = MBEDTLS_ERR_X509_INVALID_ALG + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; + } + break; + case 45: + { + *out_value = MBEDTLS_ERR_X509_INVALID_ALG; + } + break; + case 46: + { + *out_value = MBEDTLS_ERR_X509_INVALID_NAME + MBEDTLS_ERR_ASN1_OUT_OF_DATA; + } + break; + case 47: + { + *out_value = MBEDTLS_ERR_X509_INVALID_NAME + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG; + } + break; + case 48: + { + *out_value = MBEDTLS_ERR_X509_INVALID_NAME + MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + break; + case 49: + { + *out_value = MBEDTLS_ERR_X509_INVALID_NAME + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG;; + } + break; + case 50: + { + *out_value = MBEDTLS_ERR_X509_INVALID_NAME + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; + } + break; + case 51: + { + *out_value = MBEDTLS_ERR_X509_INVALID_DATE + MBEDTLS_ERR_ASN1_OUT_OF_DATA; + } + break; + case 52: + { + *out_value = MBEDTLS_ERR_X509_INVALID_DATE + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG; + } + break; + case 53: + { + *out_value = MBEDTLS_ERR_X509_INVALID_DATE + MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + break; + case 54: + { + *out_value = MBEDTLS_ERR_X509_INVALID_DATE; + } + break; + case 55: + { + *out_value = MBEDTLS_ERR_X509_INVALID_DATE + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; + } + break; + case 56: + { + *out_value = MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + MBEDTLS_ERR_ASN1_OUT_OF_DATA; + } + break; + case 57: + { + *out_value = MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG; + } + break; + case 58: + { + *out_value = MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + break; + case 59: + { + *out_value = MBEDTLS_ERR_PK_INVALID_ALG + MBEDTLS_ERR_ASN1_OUT_OF_DATA; + } + break; + case 60: + { + *out_value = MBEDTLS_ERR_PK_INVALID_ALG + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG; + } + break; + case 61: + { + *out_value = MBEDTLS_ERR_PK_INVALID_ALG + MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + break; + case 62: + { + *out_value = MBEDTLS_ERR_PK_UNKNOWN_PK_ALG; + } + break; + case 63: + { + *out_value = MBEDTLS_ERR_PK_INVALID_PUBKEY + MBEDTLS_ERR_ASN1_OUT_OF_DATA; + } + break; + case 64: + { + *out_value = MBEDTLS_ERR_PK_INVALID_PUBKEY + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG; + } + break; + case 65: + { + *out_value = MBEDTLS_ERR_PK_INVALID_PUBKEY + MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + break; + case 66: + { + *out_value = MBEDTLS_ERR_PK_INVALID_PUBKEY + MBEDTLS_ERR_ASN1_INVALID_DATA; + } + break; + case 67: + { + *out_value = MBEDTLS_ERR_PK_INVALID_PUBKEY + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; + } + break; + case 68: + { + *out_value = MBEDTLS_ERR_PK_INVALID_PUBKEY; + } + break; + case 69: + { + *out_value = MBEDTLS_ERR_X509_INVALID_FORMAT + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; + } + break; + case 70: + { + *out_value = MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_OUT_OF_DATA; + } + break; + case 71: + { + *out_value = MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + break; + case 72: + { + *out_value = MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; + } + break; + case 73: + { + *out_value = MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE; + } + break; + case 74: + { + *out_value = MBEDTLS_ERR_X509_INVALID_EXTENSIONS; + } + break; + case 75: + { + *out_value = MBEDTLS_ERR_X509_SIG_MISMATCH; + } + break; + case 76: + { + *out_value = MBEDTLS_ERR_X509_INVALID_SIGNATURE + MBEDTLS_ERR_ASN1_OUT_OF_DATA; + } + break; + case 77: + { + *out_value = MBEDTLS_ERR_X509_INVALID_SIGNATURE + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG; + } + break; + case 78: + { + *out_value = MBEDTLS_ERR_X509_INVALID_SIGNATURE + MBEDTLS_ERR_ASN1_INVALID_LENGTH; + } + break; + case 79: + { + *out_value = MBEDTLS_ERR_X509_INVALID_SIGNATURE + MBEDTLS_ERR_ASN1_INVALID_DATA; + } + break; + case 80: + { + *out_value = MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG; + } + break; + case 81: + { + *out_value = MBEDTLS_ERR_ASN1_OUT_OF_DATA; + } + break; + case 82: + { + *out_value = MBEDTLS_X509_MAX_INTERMEDIATE_CA; + } + break; + case 83: + { + *out_value = MBEDTLS_X509_MAX_INTERMEDIATE_CA-1; + } + break; + case 84: + { + *out_value = MBEDTLS_X509_MAX_INTERMEDIATE_CA+1; + } + break; + case 85: + { + *out_value = -1; + } + break; + case 86: + { + *out_value = MBEDTLS_ERR_X509_BAD_INPUT_DATA; + } + break; + case 87: + { + *out_value = MBEDTLS_X509_BADCERT_BAD_MD|MBEDTLS_X509_BADCERT_BAD_PK|MBEDTLS_X509_BADCERT_BAD_KEY; + } + break; + case 88: + { + *out_value = MBEDTLS_X509_BADCERT_BAD_PK|MBEDTLS_X509_BADCERT_BAD_KEY; + } + break; + case 89: + { + *out_value = MBEDTLS_X509_BADCERT_BAD_MD|MBEDTLS_X509_BADCERT_BAD_KEY; + } + break; + case 90: + { + *out_value = -2; + } + break; + case 91: + { + *out_value = -4; + } + break; + case 92: + { + *out_value = -3; + } + break; + case 93: + { + *out_value = MBEDTLS_ERR_OID_BUF_TOO_SMALL; + } + break; + case 94: + { + *out_value = MBEDTLS_X509_KU_DIGITAL_SIGNATURE|MBEDTLS_X509_KU_KEY_ENCIPHERMENT; + } + break; + case 95: + { + *out_value = MBEDTLS_X509_KU_KEY_CERT_SIGN; + } + break; + case 96: + { + *out_value = MBEDTLS_X509_KU_DIGITAL_SIGNATURE; + } + break; + case 97: + { + *out_value = MBEDTLS_X509_KU_KEY_CERT_SIGN|MBEDTLS_X509_KU_CRL_SIGN; + } + break; + case 98: + { + *out_value = MBEDTLS_X509_KU_KEY_ENCIPHERMENT|MBEDTLS_X509_KU_KEY_AGREEMENT; + } + break; + case 99: + { + *out_value = MBEDTLS_X509_KU_DIGITAL_SIGNATURE|MBEDTLS_X509_KU_KEY_ENCIPHERMENT|MBEDTLS_X509_KU_DECIPHER_ONLY; + } + break; + case 100: + { + *out_value = MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE; + } + break; + case 101: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 102: + { + *out_value = MBEDTLS_ASN1_SEQUENCE; + } + break; + case 103: + { + *out_value = MBEDTLS_MD_SHA256; + } + break; + case 104: + { + *out_value = MBEDTLS_ERR_X509_INVALID_ALG + MBEDTLS_ERR_ASN1_INVALID_DATA; + } + break; + case 105: + { + *out_value = MBEDTLS_ERR_X509_INVALID_ALG + MBEDTLS_ERR_OID_NOT_FOUND; + } + break; + case 106: + { + *out_value = MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE + MBEDTLS_ERR_OID_NOT_FOUND; + } + break; + case 107: + { + *out_value = MBEDTLS_ERR_PEM_INVALID_DATA + MBEDTLS_ERR_BASE64_INVALID_CHARACTER; + } + break; + case 108: + { + *out_value = MBEDTLS_ASN1_UTC_TIME; + } + break; + case 109: + { + *out_value = MBEDTLS_ASN1_GENERALIZED_TIME; + } + break; + case 110: + { + *out_value = MBEDTLS_ASN1_CONTEXT_SPECIFIC; + } + break; + case 111: + { + *out_value = MBEDTLS_ERR_X509_INVALID_DATE+MBEDTLS_ERR_ASN1_UNEXPECTED_TAG; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_BIGNUM_C) + + case 0: + { +#if defined(MBEDTLS_PEM_PARSE_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_RSA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_MD2_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_MD4_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 5: + { +#if defined(MBEDTLS_MD5_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 6: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 7: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 8: + { +#if !defined(MBEDTLS_SHA512_NO_SHA384) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 9: + { +#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 10: + { +#if defined(MBEDTLS_ECDSA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 11: + { +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 12: + { +#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 13: + { +#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 14: + { +#if defined(MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 15: + { +#if defined(MBEDTLS_HAVE_TIME_DATE) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 16: + { +#if defined(MBEDTLS_PKCS1_V15) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 17: + { +#if defined(MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 18: + { +#if !defined(MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 19: + { +#if defined(MBEDTLS_X509_CHECK_KEY_USAGE) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 20: + { +#if defined(MBEDTLS_ECP_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 21: + { +#if !defined(MBEDTLS_HAVE_TIME_DATE) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 22: + { +#if defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 23: + { +#if defined(MBEDTLS_CERTS_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 24: + { +#if !defined(MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 25: + { +#if !defined(MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 26: + { +#if defined(MBEDTLS_X509_USE_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRT_PARSE_C) + test_x509_parse_san_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRT_PARSE_C) + test_x509_cert_info_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRL_PARSE_C) + test_mbedtls_x509_crl_info_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRL_PARSE_C) + test_mbedtls_x509_crl_parse_wrapper, +#else + NULL, +#endif +/* Function Id: 4 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CSR_PARSE_C) + test_mbedtls_x509_csr_info_wrapper, +#else + NULL, +#endif +/* Function Id: 5 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_X509_CRT_PARSE_C) + test_x509_verify_info_wrapper, +#else + NULL, +#endif +/* Function Id: 6 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRT_PARSE_C) && defined(MBEDTLS_X509_CRL_PARSE_C) && defined(MBEDTLS_ECP_RESTARTABLE) && defined(MBEDTLS_ECDSA_C) + test_x509_verify_restart_wrapper, +#else + NULL, +#endif +/* Function Id: 7 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRT_PARSE_C) && defined(MBEDTLS_X509_CRL_PARSE_C) + test_x509_verify_wrapper, +#else + NULL, +#endif +/* Function Id: 8 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRT_PARSE_C) && defined(MBEDTLS_X509_CRL_PARSE_C) && defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK) + test_x509_verify_ca_cb_failure_wrapper, +#else + NULL, +#endif +/* Function Id: 9 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRT_PARSE_C) + test_x509_verify_callback_wrapper, +#else + NULL, +#endif +/* Function Id: 10 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRT_PARSE_C) + test_mbedtls_x509_dn_gets_wrapper, +#else + NULL, +#endif +/* Function Id: 11 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRT_PARSE_C) + test_mbedtls_x509_time_is_past_wrapper, +#else + NULL, +#endif +/* Function Id: 12 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRT_PARSE_C) + test_mbedtls_x509_time_is_future_wrapper, +#else + NULL, +#endif +/* Function Id: 13 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && defined(MBEDTLS_FS_IO) + test_x509parse_crt_file_wrapper, +#else + NULL, +#endif +/* Function Id: 14 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_X509_CRT_PARSE_C) + test_x509parse_crt_wrapper, +#else + NULL, +#endif +/* Function Id: 15 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_X509_CRT_PARSE_C) + test_x509parse_crt_cb_wrapper, +#else + NULL, +#endif +/* Function Id: 16 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_X509_CRL_PARSE_C) + test_x509parse_crl_wrapper, +#else + NULL, +#endif +/* Function Id: 17 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_X509_CSR_PARSE_C) + test_mbedtls_x509_csr_parse_wrapper, +#else + NULL, +#endif +/* Function Id: 18 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRT_PARSE_C) + test_mbedtls_x509_crt_parse_path_wrapper, +#else + NULL, +#endif +/* Function Id: 19 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRT_PARSE_C) + test_mbedtls_x509_crt_verify_max_wrapper, +#else + NULL, +#endif +/* Function Id: 20 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRT_PARSE_C) + test_mbedtls_x509_crt_verify_chain_wrapper, +#else + NULL, +#endif +/* Function Id: 21 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_X509_USE_C) + test_x509_oid_desc_wrapper, +#else + NULL, +#endif +/* Function Id: 22 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_X509_USE_C) + test_x509_oid_numstr_wrapper, +#else + NULL, +#endif +/* Function Id: 23 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRT_PARSE_C) && defined(MBEDTLS_X509_CHECK_KEY_USAGE) + test_x509_check_key_usage_wrapper, +#else + NULL, +#endif +/* Function Id: 24 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_X509_CRT_PARSE_C) && defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE) + test_x509_check_extended_key_usage_wrapper, +#else + NULL, +#endif +/* Function Id: 25 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_X509_USE_C) + test_x509_get_time_wrapper, +#else + NULL, +#endif +/* Function Id: 26 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) + test_x509_parse_rsassa_pss_params_wrapper, +#else + NULL, +#endif +/* Function Id: 27 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_X509_CRT_PARSE_C) && defined(MBEDTLS_SELF_TEST) + test_x509_selftest_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_x509parse.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_x509parse.datax b/third_party/mbedtls/test/test_suite_x509parse.datax new file mode 100644 index 000000000..7eea79002 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_x509parse.datax @@ -0,0 +1,2828 @@ +X509 CRT information #1 +depends_on:0:1:2 +1:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"cert. version \: 3\nserial number \: 01\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Server 1\nissued on \: 2019-02-10 14\:44\:06\nexpires on \: 2029-02-10 14\:44\:06\nsigned using \: RSA with SHA1\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\n" + +X509 CRT information #1 (DER) +depends_on:1:2 +1:char*:"zip:third_party/mbedtls/test/data/server1.crt.der":char*:"cert. version \: 3\nserial number \: 01\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Server 1\nissued on \: 2019-02-10 14\:44\:06\nexpires on \: 2029-02-10 14\:44\:06\nsigned using \: RSA with SHA1\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\n" + +X509 CRT information #2 +depends_on:0:1:2 +1:char*:"zip:third_party/mbedtls/test/data/server2.crt":char*:"cert. version \: 3\nserial number \: 02\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nissued on \: 2019-02-10 14\:44\:06\nexpires on \: 2029-02-10 14\:44\:06\nsigned using \: RSA with SHA1\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\n" + +X509 CRT information #2 (DER) +depends_on:1:2 +1:char*:"zip:third_party/mbedtls/test/data/server2.crt.der":char*:"cert. version \: 3\nserial number \: 02\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nissued on \: 2019-02-10 14\:44\:06\nexpires on \: 2029-02-10 14\:44\:06\nsigned using \: RSA with SHA1\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\n" + +X509 CRT information #3 +depends_on:0:1:2 +1:char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"cert. version \: 3\nserial number \: 03\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nissued on \: 2019-02-10 14\:44\:00\nexpires on \: 2029-02-10 14\:44\:00\nsigned using \: RSA with SHA1\nRSA key size \: 2048 bits\nbasic constraints \: CA=true\n" + +X509 CRT information #3 (DER) +depends_on:1:2 +1:char*:"zip:third_party/mbedtls/test/data/test-ca.crt.der":char*:"cert. version \: 3\nserial number \: 03\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nissued on \: 2019-02-10 14\:44\:00\nexpires on \: 2029-02-10 14\:44\:00\nsigned using \: RSA with SHA1\nRSA key size \: 2048 bits\nbasic constraints \: CA=true\n" + +X509 CRT information MD2 Digest +depends_on:0:1:3 +1:char*:"zip:third_party/mbedtls/test/data/cert_md2.crt":char*:"cert. version \: 3\nserial number \: 09\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Cert MD2\nissued on \: 2000-01-01 12\:12\:12\nexpires on \: 2030-01-01 12\:12\:12\nsigned using \: RSA with MD2\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\n" + +X509 CRT information MD4 Digest +depends_on:0:1:4 +1:char*:"zip:third_party/mbedtls/test/data/cert_md4.crt":char*:"cert. version \: 3\nserial number \: 05\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Cert MD4\nissued on \: 2000-01-01 12\:12\:12\nexpires on \: 2030-01-01 12\:12\:12\nsigned using \: RSA with MD4\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\n" + +X509 CRT information MD5 Digest +depends_on:0:1:5 +1:char*:"zip:third_party/mbedtls/test/data/cert_md5.crt":char*:"cert. version \: 3\nserial number \: 06\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Cert MD5\nissued on \: 2000-01-01 12\:12\:12\nexpires on \: 2030-01-01 12\:12\:12\nsigned using \: RSA with MD5\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\n" + +X509 CRT information SHA1 Digest +depends_on:0:1:2 +1:char*:"zip:third_party/mbedtls/test/data/cert_sha1.crt":char*:"cert. version \: 3\nserial number \: 07\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Cert SHA1\nissued on \: 2019-02-10 14\:44\:06\nexpires on \: 2029-02-10 14\:44\:06\nsigned using \: RSA with SHA1\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\n" + +X509 CRT information SHA224 Digest +depends_on:0:1:6 +1:char*:"zip:third_party/mbedtls/test/data/cert_sha224.crt":char*:"cert. version \: 3\nserial number \: 08\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Cert SHA224\nissued on \: 2019-02-10 14\:44\:06\nexpires on \: 2029-02-10 14\:44\:06\nsigned using \: RSA with SHA-224\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\n" + +X509 CRT information SHA256 Digest +depends_on:0:1:6 +1:char*:"zip:third_party/mbedtls/test/data/cert_sha256.crt":char*:"cert. version \: 3\nserial number \: 09\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Cert SHA256\nissued on \: 2019-02-10 14\:44\:06\nexpires on \: 2029-02-10 14\:44\:06\nsigned using \: RSA with SHA-256\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\n" + +X509 CRT information SHA384 Digest +depends_on:0:1:7:8 +1:char*:"zip:third_party/mbedtls/test/data/cert_sha384.crt":char*:"cert. version \: 3\nserial number \: 0A\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Cert SHA384\nissued on \: 2019-02-10 14\:44\:06\nexpires on \: 2029-02-10 14\:44\:06\nsigned using \: RSA with SHA-384\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\n" + +X509 CRT information SHA512 Digest +depends_on:0:1:7 +1:char*:"zip:third_party/mbedtls/test/data/cert_sha512.crt":char*:"cert. version \: 3\nserial number \: 0B\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Cert SHA512\nissued on \: 2019-02-10 14\:44\:06\nexpires on \: 2029-02-10 14\:44\:06\nsigned using \: RSA with SHA-512\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\n" + +X509 CRT information RSA-PSS, SHA1 Digest +depends_on:0:9:2 +1:char*:"zip:third_party/mbedtls/test/data/server9.crt":char*:"cert. version \: 3\nserial number \: 16\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nissued on \: 2014-01-20 13\:38\:16\nexpires on \: 2024-01-18 13\:38\:16\nsigned using \: RSASSA-PSS (SHA1, MGF1-SHA1, 0xEA)\nRSA key size \: 1024 bits\nbasic constraints \: CA=false\n" + +X509 CRT information RSA-PSS, SHA224 Digest +depends_on:0:9:6 +1:char*:"zip:third_party/mbedtls/test/data/server9-sha224.crt":char*:"cert. version \: 3\nserial number \: 17\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nissued on \: 2014-01-20 13\:57\:36\nexpires on \: 2024-01-18 13\:57\:36\nsigned using \: RSASSA-PSS (SHA224, MGF1-SHA224, 0xE2)\nRSA key size \: 1024 bits\nbasic constraints \: CA=false\n" + +X509 CRT information RSA-PSS, SHA256 Digest +depends_on:0:9:6 +1:char*:"zip:third_party/mbedtls/test/data/server9-sha256.crt":char*:"cert. version \: 3\nserial number \: 18\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nissued on \: 2014-01-20 13\:57\:45\nexpires on \: 2024-01-18 13\:57\:45\nsigned using \: RSASSA-PSS (SHA256, MGF1-SHA256, 0xDE)\nRSA key size \: 1024 bits\nbasic constraints \: CA=false\n" + +X509 CRT information RSA-PSS, SHA384 Digest +depends_on:0:9:7:8 +1:char*:"zip:third_party/mbedtls/test/data/server9-sha384.crt":char*:"cert. version \: 3\nserial number \: 19\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nissued on \: 2014-01-20 13\:57\:58\nexpires on \: 2024-01-18 13\:57\:58\nsigned using \: RSASSA-PSS (SHA384, MGF1-SHA384, 0xCE)\nRSA key size \: 1024 bits\nbasic constraints \: CA=false\n" + +X509 CRT information RSA-PSS, SHA512 Digest +depends_on:0:9:7 +1:char*:"zip:third_party/mbedtls/test/data/server9-sha512.crt":char*:"cert. version \: 3\nserial number \: 1A\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nissued on \: 2014-01-20 13\:58\:12\nexpires on \: 2024-01-18 13\:58\:12\nsigned using \: RSASSA-PSS (SHA512, MGF1-SHA512, 0xBE)\nRSA key size \: 1024 bits\nbasic constraints \: CA=false\n" + +X509 CRT information EC, SHA1 Digest +depends_on:0:10:11:2 +1:char*:"zip:third_party/mbedtls/test/data/server5-sha1.crt":char*:"cert. version \: 3\nserial number \: 12\nissuer name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nissued on \: 2013-09-24 16\:21\:27\nexpires on \: 2023-09-22 16\:21\:27\nsigned using \: ECDSA with SHA1\nEC key size \: 256 bits\nbasic constraints \: CA=false\n" + +X509 CRT information EC, SHA224 Digest +depends_on:0:10:11:6 +1:char*:"zip:third_party/mbedtls/test/data/server5-sha224.crt":char*:"cert. version \: 3\nserial number \: 13\nissuer name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nissued on \: 2013-09-24 16\:21\:27\nexpires on \: 2023-09-22 16\:21\:27\nsigned using \: ECDSA with SHA224\nEC key size \: 256 bits\nbasic constraints \: CA=false\n" + +X509 CRT information EC, SHA256 Digest +depends_on:0:10:11:6 +1:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"cert. version \: 3\nserial number \: 09\nissuer name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nissued on \: 2013-09-24 15\:52\:04\nexpires on \: 2023-09-22 15\:52\:04\nsigned using \: ECDSA with SHA256\nEC key size \: 256 bits\nbasic constraints \: CA=false\n" + +X509 CRT information EC, SHA384 Digest +depends_on:0:10:11:7:8 +1:char*:"zip:third_party/mbedtls/test/data/server5-sha384.crt":char*:"cert. version \: 3\nserial number \: 14\nissuer name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nissued on \: 2013-09-24 16\:21\:27\nexpires on \: 2023-09-22 16\:21\:27\nsigned using \: ECDSA with SHA384\nEC key size \: 256 bits\nbasic constraints \: CA=false\n" + +X509 CRT information EC, SHA512 Digest +depends_on:0:10:11:7 +1:char*:"zip:third_party/mbedtls/test/data/server5-sha512.crt":char*:"cert. version \: 3\nserial number \: 15\nissuer name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nissued on \: 2013-09-24 16\:21\:27\nexpires on \: 2023-09-22 16\:21\:27\nsigned using \: ECDSA with SHA512\nEC key size \: 256 bits\nbasic constraints \: CA=false\n" + +X509 CRT information EC, SHA256 Digest, hardware module name SAN +depends_on:0:10:11:6 +1:char*:"zip:third_party/mbedtls/test/data/server5-othername.crt":char*:"cert. version \: 3\nserial number \: 4D\nissuer name \: C=UK, O=Mbed TLS, CN=Mbed TLS othername SAN\nsubject name \: C=UK, O=Mbed TLS, CN=Mbed TLS othername SAN\nissued on \: 2019-03-24 09\:06\:02\nexpires on \: 2029-03-21 09\:06\:02\nsigned using \: ECDSA with SHA256\nEC key size \: 256 bits\nsubject alt name \:\n otherName \:\n hardware module name \:\n hardware type \: 1.3.6.1.4.1.17.3\n hardware serial number \: 123456\n" + +X509 CRT information EC, SHA256 Digest, Wisun Fan device +depends_on:0:10:11:6 +1:char*:"zip:third_party/mbedtls/test/data/server5-fan.crt":char*:"cert. version \: 3\nserial number \: 4D\nissuer name \: C=UK, O=Mbed TLS, CN=Mbed TLS FAN\nsubject name \: C=UK, O=Mbed TLS, CN=Mbed TLS FAN\nissued on \: 2019-03-25 09\:03\:46\nexpires on \: 2029-03-22 09\:03\:46\nsigned using \: ECDSA with SHA256\nEC key size \: 256 bits\next key usage \: Wi-SUN Alliance Field Area Network (FAN)\n" + +X509 CRT information, NS Cert Type +depends_on:0:1:2 +1:char*:"zip:third_party/mbedtls/test/data/server1.cert_type.crt":char*:"cert. version \: 3\nserial number \: 01\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Server 1\nissued on \: 2019-02-10 14\:44\:06\nexpires on \: 2029-02-10 14\:44\:06\nsigned using \: RSA with SHA1\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\ncert. type \: SSL Server\n" + +X509 CRT information, Key Usage +depends_on:0:1:2 +1:char*:"zip:third_party/mbedtls/test/data/server1.key_usage.crt":char*:"cert. version \: 3\nserial number \: 01\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Server 1\nissued on \: 2019-02-10 14\:44\:06\nexpires on \: 2029-02-10 14\:44\:06\nsigned using \: RSA with SHA1\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\nkey usage \: Digital Signature, Non Repudiation, Key Encipherment\n" + +X509 CRT information, Key Usage with decipherOnly +depends_on:0:1:2 +1:char*:"zip:third_party/mbedtls/test/data/keyUsage.decipherOnly.crt":char*:"cert. version \: 3\nserial number \: 9B\:13\:CE\:4C\:A5\:6F\:DE\:52\nissuer name \: C=GB, L=Cambridge, O=Default Company Ltd\nsubject name \: C=GB, L=Cambridge, O=Default Company Ltd\nissued on \: 2015-05-12 10\:36\:55\nexpires on \: 2018-05-11 10\:36\:55\nsigned using \: RSA with SHA1\nRSA key size \: 1024 bits\nbasic constraints \: CA=false\nkey usage \: Digital Signature, Non Repudiation, Key Encipherment, Decipher Only\n" + +X509 CRT information, Subject Alt Name +depends_on:0:1:6 +1:char*:"zip:third_party/mbedtls/test/data/cert_example_multi.crt":char*:"cert. version \: 3\nserial number \: 11\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=www.example.com\nissued on \: 2019-07-10 11\:27\:52\nexpires on \: 2029-07-10 11\:27\:52\nsigned using \: RSA with SHA-256\nRSA key size \: 1024 bits\nsubject alt name \:\n dNSName \: example.com\n dNSName \: example.net\n dNSName \: *.example.org\n" + +X509 CRT information, Multiple different Subject Alt Name +depends_on:0:10:11:6 +1:char*:"zip:third_party/mbedtls/test/data/multiple_san.crt":char*:"cert. version \: 3\nserial number \: 04\nissuer name \: C=UK, O=Mbed TLS, CN=Mbed TLS multiple othername SAN\nsubject name \: C=UK, O=Mbed TLS, CN=Mbed TLS multiple othername SAN\nissued on \: 2019-04-22 16\:10\:48\nexpires on \: 2029-04-19 16\:10\:48\nsigned using \: ECDSA with SHA256\nEC key size \: 256 bits\nsubject alt name \:\n dNSName \: example.com\n otherName \:\n hardware module name \:\n hardware type \: 1.3.6.1.4.1.17.3\n hardware serial number \: 123456\n dNSName \: example.net\n dNSName \: *.example.org\n" + +X509 CRT information, Subject Alt Name + Key Usage +depends_on:0:1:2 +1:char*:"zip:third_party/mbedtls/test/data/cert_example_multi_nocn.crt":char*:"cert. version \: 3\nserial number \: F7\:C6\:7F\:F8\:E9\:A9\:63\:F9\nissuer name \: C=NL\nsubject name \: C=NL\nissued on \: 2014-01-22 10\:04\:33\nexpires on \: 2024-01-22 10\:04\:33\nsigned using \: RSA with SHA1\nRSA key size \: 1024 bits\nbasic constraints \: CA=false\nsubject alt name \:\n dNSName \: www.shotokan-braunschweig.de\n dNSName \: www.massimo-abate.eu\n iPAddress \: 192.168.1.1\n iPAddress \: 192.168.69.144\nkey usage \: Digital Signature, Non Repudiation, Key Encipherment\n" + +X509 CRT information, RSA Certificate Policy any +depends_on:0:1:6 +1:char*:"zip:third_party/mbedtls/test/data/test-ca-any_policy.crt":char*:"cert. version \: 3\nserial number \: 00\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nissued on \: 2019-03-21 16\:40\:59\nexpires on \: 2029-03-21 16\:40\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 2048 bits\nbasic constraints \: CA=true\ncertificate policies \: Any Policy\n" + +X509 CRT information, ECDSA Certificate Policy any +depends_on:0:10:12:6 +1:char*:"zip:third_party/mbedtls/test/data/test-ca-any_policy_ec.crt":char*:"cert. version \: 3\nserial number \: 00\nissuer name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nsubject name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nissued on \: 2019-03-25 09\:02\:45\nexpires on \: 2029-03-25 09\:02\:45\nsigned using \: ECDSA with SHA256\nEC key size \: 384 bits\nbasic constraints \: CA=true\ncertificate policies \: Any Policy\n" + +X509 CRT information, RSA Certificate Policy any with qualifier +depends_on:0:1:6 +1:char*:"zip:third_party/mbedtls/test/data/test-ca-any_policy_with_qualifier.crt":char*:"cert. version \: 3\nserial number \: 00\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nissued on \: 2019-04-28 13\:14\:31\nexpires on \: 2029-04-28 13\:14\:31\nsigned using \: RSA with SHA-256\nRSA key size \: 2048 bits\nbasic constraints \: CA=true\ncertificate policies \: Any Policy\n" + +X509 CRT information, ECDSA Certificate Policy any with qualifier +depends_on:0:10:12:6 +1:char*:"zip:third_party/mbedtls/test/data/test-ca-any_policy_with_qualifier_ec.crt":char*:"cert. version \: 3\nserial number \: 00\nissuer name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nsubject name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nissued on \: 2019-04-28 10\:16\:05\nexpires on \: 2029-04-28 10\:16\:05\nsigned using \: ECDSA with SHA256\nEC key size \: 384 bits\nbasic constraints \: CA=true\ncertificate policies \: Any Policy\n" + +X509 CRT information, RSA Certificate multiple Policies +depends_on:0:1:6 +1:char*:"zip:third_party/mbedtls/test/data/test-ca-multi_policy.crt":char*:"cert. version \: 3\nserial number \: 00\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nissued on \: 2019-04-28 12\:59\:19\nexpires on \: 2029-04-28 12\:59\:19\nsigned using \: RSA with SHA-256\nRSA key size \: 2048 bits\nbasic constraints \: CA=true\ncertificate policies \: ???, Any Policy\n" + +X509 CRT information, ECDSA Certificate multiple Policies +depends_on:0:10:12:6 +1:char*:"zip:third_party/mbedtls/test/data/test-ca-multi_policy_ec.crt":char*:"cert. version \: 3\nserial number \: 00\nissuer name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nsubject name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nissued on \: 2019-04-28 12\:59\:51\nexpires on \: 2029-04-28 12\:59\:51\nsigned using \: ECDSA with SHA256\nEC key size \: 384 bits\nbasic constraints \: CA=true\ncertificate policies \: ???, Any Policy\n" + +X509 CRT information, RSA Certificate unsupported policy +depends_on:0:1:6 +1:char*:"zip:third_party/mbedtls/test/data/test-ca-unsupported_policy.crt":char*:"cert. version \: 3\nserial number \: 00\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nissued on \: 2019-04-28 13\:00\:13\nexpires on \: 2029-04-28 13\:00\:13\nsigned using \: RSA with SHA-256\nRSA key size \: 2048 bits\nbasic constraints \: CA=true\ncertificate policies \: ???\n" + +X509 CRT information, ECDSA Certificate unsupported policy +depends_on:0:10:12:6 +1:char*:"zip:third_party/mbedtls/test/data/test-ca-unsupported_policy_ec.crt":char*:"cert. version \: 3\nserial number \: 00\nissuer name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nsubject name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nissued on \: 2019-04-28 13\:00\:19\nexpires on \: 2029-04-28 13\:00\:19\nsigned using \: ECDSA with SHA256\nEC key size \: 384 bits\nbasic constraints \: CA=true\ncertificate policies \: ???\n" + +X509 CRT information, Key Usage + Extended Key Usage +depends_on:0:1:6 +1:char*:"zip:third_party/mbedtls/test/data/server1.ext_ku.crt":char*:"cert. version \: 3\nserial number \: 21\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Server 1\nissued on \: 2014-04-01 14\:44\:43\nexpires on \: 2024-03-29 14\:44\:43\nsigned using \: RSA with SHA-256\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\nkey usage \: Digital Signature, Non Repudiation, Key Encipherment\next key usage \: TLS Web Server Authentication\n" + +X509 CRT information RSA signed by EC +depends_on:0:1:6:10 +1:char*:"zip:third_party/mbedtls/test/data/server4.crt":char*:"cert. version \: 3\nserial number \: 08\nissuer name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nissued on \: 2013-09-24 15\:52\:04\nexpires on \: 2023-09-22 15\:52\:04\nsigned using \: ECDSA with SHA256\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\n" + +X509 CRT information EC signed by RSA +depends_on:0:10:13:2:1 +1:char*:"zip:third_party/mbedtls/test/data/server3.crt":char*:"cert. version \: 3\nserial number \: 0D\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nissued on \: 2013-08-09 09\:17\:03\nexpires on \: 2023-08-07 09\:17\:03\nsigned using \: RSA with SHA1\nEC key size \: 192 bits\nbasic constraints \: CA=false\n" + +X509 CRT information Bitstring in subject name +depends_on:0:1:2 +1:char*:"zip:third_party/mbedtls/test/data/bitstring-in-dn.pem":char*:"cert. version \: 3\nserial number \: 02\nissuer name \: CN=Test CA 01, ST=Ecnivorp, C=XX, emailAddress=tca@example.com, O=Test CA Authority\nsubject name \: C=XX, O=tca, ST=Ecnivorp, OU=TCA, CN=Client, emailAddress=client@example.com, serialNumber=7101012255, uniqueIdentifier=?7101012255\nissued on \: 2015-03-11 12\:06\:51\nexpires on \: 2025-03-08 12\:06\:51\nsigned using \: RSA with SHA1\nRSA key size \: 2048 bits\nbasic constraints \: CA=false\nsubject alt name \:\n rfc822Name \: client@example.com\next key usage \: TLS Web Client Authentication\n" + +X509 CRT information Non-ASCII string in issuer name and subject name +depends_on:0:1:6 +1:char*:"zip:third_party/mbedtls/test/data/non-ascii-string-in-issuer.crt":char*:"cert. version \: 3\nserial number \: 05\:E6\:53\:E7\:1B\:74\:F0\:B5\:D3\:84\:6D\:0C\:6D\:DC\:FA\:3F\:A4\:5A\:2B\:E0\nissuer name \: C=JP, ST=Tokyo, O=?????????????????? Ltd, CN=?????????????????? CA\nsubject name \: C=JP, ST=Tokyo, O=?????????????????? Ltd, CN=?????????????????? CA\nissued on \: 2020-05-20 16\:17\:23\nexpires on \: 2020-06-19 16\:17\:23\nsigned using \: RSA with SHA-256\nRSA key size \: 2048 bits\nbasic constraints \: CA=true\n" + +X509 certificate v1 with extension +depends_on:0:1:14:2 +1:char*:"zip:third_party/mbedtls/test/data/cert_v1_with_ext.crt":char*:"cert. version \: 1\nserial number \: BD\:ED\:44\:C7\:D2\:3E\:C2\:A4\nissuer name \: C=XX, ST=XX, L=XX, O=XX, OU=XX, emailAddress=admin@identity-check.org, CN=identity-check.org\nsubject name \: C=XX, ST=XX, L=XX, O=XX, OU=XX, emailAddress=admin@identity-check.org, CN=identity-check.org\nissued on \: 2013-07-04 16\:17\:02\nexpires on \: 2014-07-04 16\:17\:02\nsigned using \: RSA with SHA1\nRSA key size \: 2048 bits\nsubject alt name \:\n dNSName \: identity-check.org\n dNSName \: www.identity-check.org\n \n" + +X509 SAN parsing otherName +depends_on:0:10:11:6 +0:char*:"zip:third_party/mbedtls/test/data/server5-othername.crt":char*:"type \: 0\notherName \: hardware module name \: hardware type \: 1.3.6.1.4.1.17.3, hardware serial number \: 123456\n" + +X509 SAN parsing dNSName +depends_on:0:1:6 +0:char*:"zip:third_party/mbedtls/test/data/cert_example_multi.crt":char*:"type \: 2\ndNSName \: example.com\ntype \: 2\ndNSName \: example.net\ntype \: 2\ndNSName \: *.example.org\n" + +X509 SAN parsing Multiple different types +depends_on:0:10:11:6 +0:char*:"zip:third_party/mbedtls/test/data/multiple_san.crt":char*:"type \: 2\ndNSName \: example.com\ntype \: 0\notherName \: hardware module name \: hardware type \: 1.3.6.1.4.1.17.3, hardware serial number \: 123456\ntype \: 2\ndNSName \: example.net\ntype \: 2\ndNSName \: *.example.org\n" + +X509 SAN parsing, no subject alt name +depends_on:0:1:6:10 +0:char*:"zip:third_party/mbedtls/test/data/server4.crt":char*:"" + +X509 SAN parsing, unsupported otherName name +depends_on:0:10:11:6 +0:char*:"zip:third_party/mbedtls/test/data/server5-unsupported_othername.crt":char*:"" + +X509 CRL information #1 +depends_on:0:2:1 +2:char*:"zip:third_party/mbedtls/test/data/crl_expired.pem":char*:"CRL version \: 1\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nthis update \: 2011-02-20 10\:24\:19\nnext update \: 2011-02-20 11\:24\:19\nRevoked certificates\:\nserial number\: 01 revocation date\: 2011-02-12 14\:44\:07\nserial number\: 03 revocation date\: 2011-02-12 14\:44\:07\nsigned using \: RSA with SHA1\n" + +X509 CRL Information MD2 Digest +depends_on:0:3:1 +2:char*:"zip:third_party/mbedtls/test/data/crl_md2.pem":char*:"CRL version \: 1\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nthis update \: 2009-07-19 19\:56\:37\nnext update \: 2009-09-17 19\:56\:37\nRevoked certificates\:\nserial number\: 01 revocation date\: 2009-02-09 21\:12\:36\nserial number\: 03 revocation date\: 2009-02-09 21\:12\:36\nsigned using \: RSA with MD2\n" + +X509 CRL Information MD4 Digest +depends_on:0:4 +2:char*:"zip:third_party/mbedtls/test/data/crl_md4.pem":char*:"CRL version \: 1\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nthis update \: 2011-02-12 14\:44\:07\nnext update \: 2011-04-13 14\:44\:07\nRevoked certificates\:\nserial number\: 01 revocation date\: 2011-02-12 14\:44\:07\nserial number\: 03 revocation date\: 2011-02-12 14\:44\:07\nsigned using \: RSA with MD4\n" + +X509 CRL Information MD5 Digest +depends_on:0:5:1 +2:char*:"zip:third_party/mbedtls/test/data/crl_md5.pem":char*:"CRL version \: 1\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nthis update \: 2011-02-12 14\:44\:07\nnext update \: 2011-04-13 14\:44\:07\nRevoked certificates\:\nserial number\: 01 revocation date\: 2011-02-12 14\:44\:07\nserial number\: 03 revocation date\: 2011-02-12 14\:44\:07\nsigned using \: RSA with MD5\n" + +X509 CRL Information SHA1 Digest +depends_on:0:2:1 +2:char*:"zip:third_party/mbedtls/test/data/crl_sha1.pem":char*:"CRL version \: 1\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nthis update \: 2011-02-12 14\:44\:07\nnext update \: 2011-04-13 14\:44\:07\nRevoked certificates\:\nserial number\: 01 revocation date\: 2011-02-12 14\:44\:07\nserial number\: 03 revocation date\: 2011-02-12 14\:44\:07\nsigned using \: RSA with SHA1\n" + +X509 CRL Information SHA224 Digest +depends_on:0:6:1 +2:char*:"zip:third_party/mbedtls/test/data/crl_sha224.pem":char*:"CRL version \: 1\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nthis update \: 2011-02-12 14\:44\:07\nnext update \: 2011-04-13 14\:44\:07\nRevoked certificates\:\nserial number\: 01 revocation date\: 2011-02-12 14\:44\:07\nserial number\: 03 revocation date\: 2011-02-12 14\:44\:07\nsigned using \: RSA with SHA-224\n" + +X509 CRL Information SHA256 Digest +depends_on:0:6:1 +2:char*:"zip:third_party/mbedtls/test/data/crl_sha256.pem":char*:"CRL version \: 1\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nthis update \: 2011-02-12 14\:44\:07\nnext update \: 2011-04-13 14\:44\:07\nRevoked certificates\:\nserial number\: 01 revocation date\: 2011-02-12 14\:44\:07\nserial number\: 03 revocation date\: 2011-02-12 14\:44\:07\nsigned using \: RSA with SHA-256\n" + +X509 CRL Information SHA384 Digest +depends_on:0:7:8:1 +2:char*:"zip:third_party/mbedtls/test/data/crl_sha384.pem":char*:"CRL version \: 1\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nthis update \: 2011-02-12 14\:44\:07\nnext update \: 2011-04-13 14\:44\:07\nRevoked certificates\:\nserial number\: 01 revocation date\: 2011-02-12 14\:44\:07\nserial number\: 03 revocation date\: 2011-02-12 14\:44\:07\nsigned using \: RSA with SHA-384\n" + +X509 CRL Information SHA512 Digest +depends_on:0:7:1 +2:char*:"zip:third_party/mbedtls/test/data/crl_sha512.pem":char*:"CRL version \: 1\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nthis update \: 2011-02-12 14\:44\:07\nnext update \: 2011-04-13 14\:44\:07\nRevoked certificates\:\nserial number\: 01 revocation date\: 2011-02-12 14\:44\:07\nserial number\: 03 revocation date\: 2011-02-12 14\:44\:07\nsigned using \: RSA with SHA-512\n" + +X509 CRL information RSA-PSS, SHA1 Digest +depends_on:0:9:2 +2:char*:"zip:third_party/mbedtls/test/data/crl-rsa-pss-sha1.pem":char*:"CRL version \: 2\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nthis update \: 2014-01-20 13\:46\:35\nnext update \: 2024-01-18 13\:46\:35\nRevoked certificates\:\nserial number\: 0A revocation date\: 2013-09-24 16\:28\:38\nserial number\: 16 revocation date\: 2014-01-20 13\:43\:05\nsigned using \: RSASSA-PSS (SHA1, MGF1-SHA1, 0xEA)\n" + +X509 CRL information RSA-PSS, SHA224 Digest +depends_on:0:9:6 +2:char*:"zip:third_party/mbedtls/test/data/crl-rsa-pss-sha224.pem":char*:"CRL version \: 2\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nthis update \: 2014-01-20 13\:56\:06\nnext update \: 2024-01-18 13\:56\:06\nRevoked certificates\:\nserial number\: 0A revocation date\: 2013-09-24 16\:28\:38\nserial number\: 16 revocation date\: 2014-01-20 13\:43\:05\nsigned using \: RSASSA-PSS (SHA224, MGF1-SHA224, 0xE2)\n" + +X509 CRL information RSA-PSS, SHA256 Digest +depends_on:0:9:6 +2:char*:"zip:third_party/mbedtls/test/data/crl-rsa-pss-sha256.pem":char*:"CRL version \: 2\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nthis update \: 2014-01-20 13\:56\:16\nnext update \: 2024-01-18 13\:56\:16\nRevoked certificates\:\nserial number\: 0A revocation date\: 2013-09-24 16\:28\:38\nserial number\: 16 revocation date\: 2014-01-20 13\:43\:05\nsigned using \: RSASSA-PSS (SHA256, MGF1-SHA256, 0xDE)\n" + +X509 CRL information RSA-PSS, SHA384 Digest +depends_on:0:9:7:8 +2:char*:"zip:third_party/mbedtls/test/data/crl-rsa-pss-sha384.pem":char*:"CRL version \: 2\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nthis update \: 2014-01-20 13\:56\:28\nnext update \: 2024-01-18 13\:56\:28\nRevoked certificates\:\nserial number\: 0A revocation date\: 2013-09-24 16\:28\:38\nserial number\: 16 revocation date\: 2014-01-20 13\:43\:05\nsigned using \: RSASSA-PSS (SHA384, MGF1-SHA384, 0xCE)\n" + +X509 CRL information RSA-PSS, SHA512 Digest +depends_on:0:9:7 +2:char*:"zip:third_party/mbedtls/test/data/crl-rsa-pss-sha512.pem":char*:"CRL version \: 2\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nthis update \: 2014-01-20 13\:56\:38\nnext update \: 2024-01-18 13\:56\:38\nRevoked certificates\:\nserial number\: 0A revocation date\: 2013-09-24 16\:28\:38\nserial number\: 16 revocation date\: 2014-01-20 13\:43\:05\nsigned using \: RSASSA-PSS (SHA512, MGF1-SHA512, 0xBE)\n" + +X509 CRL Information EC, SHA1 Digest +depends_on:0:2:10 +2:char*:"zip:third_party/mbedtls/test/data/crl-ec-sha1.pem":char*:"CRL version \: 2\nissuer name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nthis update \: 2013-09-24 16\:31\:08\nnext update \: 2023-09-22 16\:31\:08\nRevoked certificates\:\nserial number\: 0A revocation date\: 2013-09-24 16\:28\:38\nsigned using \: ECDSA with SHA1\n" + +X509 CRL Information EC, SHA224 Digest +depends_on:0:6:10 +2:char*:"zip:third_party/mbedtls/test/data/crl-ec-sha224.pem":char*:"CRL version \: 2\nissuer name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nthis update \: 2013-09-24 16\:31\:08\nnext update \: 2023-09-22 16\:31\:08\nRevoked certificates\:\nserial number\: 0A revocation date\: 2013-09-24 16\:28\:38\nsigned using \: ECDSA with SHA224\n" + +X509 CRL Information EC, SHA256 Digest +depends_on:0:6:10 +2:char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"CRL version \: 2\nissuer name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nthis update \: 2013-09-24 16\:31\:08\nnext update \: 2023-09-22 16\:31\:08\nRevoked certificates\:\nserial number\: 0A revocation date\: 2013-09-24 16\:28\:38\nsigned using \: ECDSA with SHA256\n" + +X509 CRL Information EC, SHA384 Digest +depends_on:0:7:8:10 +2:char*:"zip:third_party/mbedtls/test/data/crl-ec-sha384.pem":char*:"CRL version \: 2\nissuer name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nthis update \: 2013-09-24 16\:31\:08\nnext update \: 2023-09-22 16\:31\:08\nRevoked certificates\:\nserial number\: 0A revocation date\: 2013-09-24 16\:28\:38\nsigned using \: ECDSA with SHA384\n" + +X509 CRL Information EC, SHA512 Digest +depends_on:0:7:10 +2:char*:"zip:third_party/mbedtls/test/data/crl-ec-sha512.pem":char*:"CRL version \: 2\nissuer name \: C=NL, O=PolarSSL, CN=Polarssl Test EC CA\nthis update \: 2013-09-24 16\:31\:08\nnext update \: 2023-09-22 16\:31\:08\nRevoked certificates\:\nserial number\: 0A revocation date\: 2013-09-24 16\:28\:38\nsigned using \: ECDSA with SHA512\n" + +X509 CRL Malformed Input (trailing spaces at end of file) +depends_on:0:2:7:10 +3:char*:"zip:third_party/mbedtls/test/data/crl-malformed-trailing-spaces.pem":exp:0 + +X509 CRL Unsupported critical extension (issuingDistributionPoint) +depends_on:0:1:6 +3:char*:"zip:third_party/mbedtls/test/data/crl-idp.pem":exp:1 + +X509 CRL Unsupported non-critical extension (issuingDistributionPoint) +depends_on:0:1:6 +3:char*:"zip:third_party/mbedtls/test/data/crl-idpnc.pem":int:0 + +X509 CSR Information RSA with MD4 +depends_on:0:4:1 +4:char*:"zip:third_party/mbedtls/test/data/server1.req.md4":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Server 1\nsigned using \: RSA with MD4\nRSA key size \: 2048 bits\n" + +X509 CSR Information RSA with MD5 +depends_on:0:5:1 +4:char*:"zip:third_party/mbedtls/test/data/server1.req.md5":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Server 1\nsigned using \: RSA with MD5\nRSA key size \: 2048 bits\n" + +X509 CSR Information RSA with SHA1 +depends_on:0:2:1 +4:char*:"zip:third_party/mbedtls/test/data/server1.req.sha1":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Server 1\nsigned using \: RSA with SHA1\nRSA key size \: 2048 bits\n" + +X509 CSR Information RSA with SHA224 +depends_on:0:6:1 +4:char*:"zip:third_party/mbedtls/test/data/server1.req.sha224":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Server 1\nsigned using \: RSA with SHA-224\nRSA key size \: 2048 bits\n" + +X509 CSR Information RSA with SHA-256 +depends_on:0:6:1 +4:char*:"zip:third_party/mbedtls/test/data/server1.req.sha256":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Server 1\nsigned using \: RSA with SHA-256\nRSA key size \: 2048 bits\n" + +X509 CSR Information RSA with SHA384 +depends_on:0:7:8:1 +4:char*:"zip:third_party/mbedtls/test/data/server1.req.sha384":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Server 1\nsigned using \: RSA with SHA-384\nRSA key size \: 2048 bits\n" + +X509 CSR Information RSA with SHA512 +depends_on:0:7:1 +4:char*:"zip:third_party/mbedtls/test/data/server1.req.sha512":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Server 1\nsigned using \: RSA with SHA-512\nRSA key size \: 2048 bits\n" + +X509 CSR Information EC with SHA1 +depends_on:10:0:11:2 +4:char*:"zip:third_party/mbedtls/test/data/server5.req.sha1":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nsigned using \: ECDSA with SHA1\nEC key size \: 256 bits\n" + +X509 CSR Information EC with SHA224 +depends_on:10:0:11:6 +4:char*:"zip:third_party/mbedtls/test/data/server5.req.sha224":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nsigned using \: ECDSA with SHA224\nEC key size \: 256 bits\n" + +X509 CSR Information EC with SHA256 +depends_on:10:0:11:6 +4:char*:"zip:third_party/mbedtls/test/data/server5.req.sha256":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nsigned using \: ECDSA with SHA256\nEC key size \: 256 bits\n" + +X509 CSR Information EC with SHA384 +depends_on:10:0:11:7:8 +4:char*:"zip:third_party/mbedtls/test/data/server5.req.sha384":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nsigned using \: ECDSA with SHA384\nEC key size \: 256 bits\n" + +X509 CSR Information EC with SHA512 +depends_on:10:0:11:7 +4:char*:"zip:third_party/mbedtls/test/data/server5.req.sha512":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nsigned using \: ECDSA with SHA512\nEC key size \: 256 bits\n" + +X509 CSR Information RSA-PSS with SHA1 +depends_on:0:9:2 +4:char*:"zip:third_party/mbedtls/test/data/server9.req.sha1":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nsigned using \: RSASSA-PSS (SHA1, MGF1-SHA1, 0x6A)\nRSA key size \: 1024 bits\n" + +X509 CSR Information RSA-PSS with SHA224 +depends_on:0:9:6 +4:char*:"zip:third_party/mbedtls/test/data/server9.req.sha224":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nsigned using \: RSASSA-PSS (SHA224, MGF1-SHA224, 0x62)\nRSA key size \: 1024 bits\n" + +X509 CSR Information RSA-PSS with SHA256 +depends_on:0:9:6 +4:char*:"zip:third_party/mbedtls/test/data/server9.req.sha256":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nsigned using \: RSASSA-PSS (SHA256, MGF1-SHA256, 0x5E)\nRSA key size \: 1024 bits\n" + +X509 CSR Information RSA-PSS with SHA384 +depends_on:0:9:7:8 +4:char*:"zip:third_party/mbedtls/test/data/server9.req.sha384":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nsigned using \: RSASSA-PSS (SHA384, MGF1-SHA384, 0x4E)\nRSA key size \: 1024 bits\n" + +X509 CSR Information RSA-PSS with SHA512 +depends_on:0:9:7 +4:char*:"zip:third_party/mbedtls/test/data/server9.req.sha512":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nsigned using \: RSASSA-PSS (SHA512, MGF1-SHA512, 0x3E)\nRSA key size \: 1024 bits\n" + +X509 CSR Information RSA with SHA-256 - Microsoft header +depends_on:0:6:1 +4:char*:"zip:third_party/mbedtls/test/data/server1-ms.req.sha256":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=PolarSSL Server 1\nsigned using \: RSA with SHA-256\nRSA key size \: 2048 bits\n" + +X509 Verify Information: empty +5:int:0:char*:"":char*:"" + +X509 Verify Information: one issue +5:exp:2:char*:"":char*:"Certificate was missing\n" + +X509 Verify Information: two issues +5:exp:3:char*:"":char*:"The certificate validity has expired\nThe CRL is expired\n" + +X509 Verify Information: two issues, one unknown +5:exp:4:char*:"":char*:"Other reason (can be used by verify callback)\nUnknown reason (this should not happen)\n" + +X509 Verify Information: empty, with prefix +5:int:0:char*:" ! ":char*:"" + +X509 Verify Information: one issue, with prefix +5:exp:2:char*:" ! ":char*:" ! Certificate was missing\n" + +X509 Verify Information: two issues, with prefix +5:exp:3:char*:" ! ":char*:" ! The certificate validity has expired\n ! The CRL is expired\n" + +X509 Get Distinguished Name #1 +depends_on:0:1:2 +10:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"subject":char*:"C=NL, O=PolarSSL, CN=PolarSSL Server 1" + +X509 Get Distinguished Name #2 +depends_on:0:1:2 +10:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"issuer":char*:"C=NL, O=PolarSSL, CN=PolarSSL Test CA" + +X509 Get Distinguished Name #3 +depends_on:0:1:2 +10:char*:"zip:third_party/mbedtls/test/data/server2.crt":char*:"subject":char*:"C=NL, O=PolarSSL, CN=localhost" + +X509 Get Distinguished Name #4 +depends_on:0:1:2 +10:char*:"zip:third_party/mbedtls/test/data/server2.crt":char*:"issuer":char*:"C=NL, O=PolarSSL, CN=PolarSSL Test CA" + +X509 Time Expired #1 +depends_on:0:1:15:2 +11:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"valid_from":int:1 + +X509 Time Expired #2 +depends_on:0:1:15:2 +11:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"valid_to":int:0 + +X509 Time Expired #3 +depends_on:0:1:15:2 +11:char*:"zip:third_party/mbedtls/test/data/server2.crt":char*:"valid_from":int:1 + +X509 Time Expired #4 +depends_on:0:1:15:2 +11:char*:"zip:third_party/mbedtls/test/data/server2.crt":char*:"valid_to":int:0 + +X509 Time Expired #5 +depends_on:0:1:15:2 +11:char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"valid_from":int:1 + +X509 Time Expired #6 +depends_on:0:1:15:2 +11:char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"valid_to":int:0 + +X509 Time Future #1 +depends_on:0:10:11:15:6 +12:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"valid_from":int:0 + +X509 Time Future #2 +depends_on:0:10:11:15:6 +12:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"valid_to":int:1 + +X509 Time Future #3 +depends_on:0:10:11:15:6 +12:char*:"zip:third_party/mbedtls/test/data/server5-future.crt":char*:"valid_from":int:1 + +X509 Time Future #4 +depends_on:0:10:11:15:6 +12:char*:"zip:third_party/mbedtls/test/data/server5-future.crt":char*:"valid_to":int:1 + +X509 Time Future #5 +depends_on:0:10:12:15:6 +12:char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"valid_from":int:0 + +X509 Time Future #6 +depends_on:0:10:12:15:6 +12:char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"valid_to":int:1 + +X509 CRT verification #1 (Revoked Cert, Expired CRL, no CN) +depends_on:0:2:1:16:15 +7:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl_expired.pem":char*:"NULL":exp:5:exp:6:char*:"compat":char*:"NULL" + +X509 CRT verification #1a (Revoked Cert, Future CRL, no CN) +depends_on:0:6:10:11:12:2:15 +7:char*:"zip:third_party/mbedtls/test/data/server6.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-future.pem":char*:"NULL":exp:5:exp:7:char*:"compat":char*:"NULL" + +X509 CRT verification #2 (Revoked Cert, Expired CRL) +depends_on:0:2:1:16:15 +7:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl_expired.pem":char*:"PolarSSL Server 1":exp:5:exp:6:char*:"compat":char*:"NULL" + +X509 CRT verification #2a (Revoked Cert, Future CRL) +depends_on:0:6:10:11:12:2:15 +7:char*:"zip:third_party/mbedtls/test/data/server6.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-future.pem":char*:"localhost":exp:5:exp:7:char*:"compat":char*:"NULL" + +X509 CRT verification #3 (Revoked Cert, Future CRL, CN Mismatch) +depends_on:0:2:1:16:15 +7:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl_expired.pem":char*:"PolarSSL Wrong CN":exp:5:exp:8:char*:"compat":char*:"NULL" + +X509 CRT verification #3a (Revoked Cert, Expired CRL, CN Mismatch) +depends_on:0:6:10:11:12:2:15 +7:char*:"zip:third_party/mbedtls/test/data/server6.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-future.pem":char*:"Wrong CN":exp:5:exp:9:char*:"compat":char*:"NULL" + +X509 CRT verification #4 (Valid Cert, Expired CRL) +depends_on:0:2:1:16:15 +7:char*:"zip:third_party/mbedtls/test/data/server2.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl_expired.pem":char*:"NULL":exp:5:exp:10:char*:"compat":char*:"NULL" + +X509 CRT verification #4a (Revoked Cert, Future CRL) +depends_on:0:6:10:11:12:2:15 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-future.pem":char*:"NULL":exp:5:exp:11:char*:"compat":char*:"NULL" + +X509 CRT verification #5 (Revoked Cert) +depends_on:0:2:1:16:15 +7:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:12:char*:"compat":char*:"NULL" + +X509 CRT verification #5' (Revoked Cert, differing DN string formats #1) +depends_on:0:2:1:16:15 +7:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_utf8.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:12:char*:"compat":char*:"NULL" + +X509 CRT verification #5'' (Revoked Cert, differing DN string formats #2) +depends_on:0:2:1:16:15 +7:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_printable.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:12:char*:"compat":char*:"NULL" + +X509 CRT verification #5''' (Revoked Cert, differing upper and lower case) +depends_on:0:2:1:16:15 +7:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_uppercase.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:12:char*:"compat":char*:"NULL" + +X509 CRT verification #6 (Revoked Cert) +depends_on:0:2:1:16:15 +7:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"PolarSSL Server 1":exp:5:exp:12:char*:"compat":char*:"NULL" + +X509 CRT verification #7 (Revoked Cert, CN Mismatch) +depends_on:0:2:1:16:15 +7:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"PolarSSL Wrong CN":exp:5:exp:13:char*:"compat":char*:"NULL" + +X509 CRT verification #8 (Valid Cert) +depends_on:0:6:10:11:12:2 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha1.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #8a (Expired Cert) +depends_on:0:6:10:11:12:2:15 +7:char*:"zip:third_party/mbedtls/test/data/server5-expired.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha1.pem":char*:"NULL":exp:5:exp:14:char*:"compat":char*:"NULL" + +X509 CRT verification #8b (Future Cert) +depends_on:0:6:10:11:12:2:15 +7:char*:"zip:third_party/mbedtls/test/data/server5-future.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha1.pem":char*:"NULL":exp:5:exp:15:char*:"compat":char*:"NULL" + +X509 CRT verification #8c (Expired Cert, longer chain) +depends_on:0:6:10:11:12:2:1:16:15 +7:char*:"zip:third_party/mbedtls/test/data/server7-expired.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha1.pem":char*:"NULL":exp:5:exp:14:char*:"compat":char*:"NULL" + +X509 CRT verification #8d (Future Cert, longer chain) +depends_on:0:6:10:11:12:2:1:16:15 +7:char*:"zip:third_party/mbedtls/test/data/server7-future.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha1.pem":char*:"NULL":exp:5:exp:15:char*:"compat":char*:"NULL" + +X509 CRT verification #9 (Not trusted Cert) +depends_on:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/server2.crt":char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #10 (Not trusted Cert, Expired CRL) +depends_on:0:1:16:2 +7:char*:"zip:third_party/mbedtls/test/data/server2.crt":char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/crl_expired.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #12 (Valid Cert MD2 Digest, MD2 forbidden) +depends_on:3:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_md2.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:17:char*:"compat":char*:"NULL" + +X509 CRT verification #12 (Valid Cert MD4 Digest, MD4 forbidden) +depends_on:4:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_md4.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:17:char*:"compat":char*:"NULL" + +X509 CRT verification #13 (Valid Cert MD5 Digest, MD5 forbidden) +depends_on:5:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_md5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:17:char*:"compat":char*:"NULL" + +X509 CRT verification #12 (Valid Cert MD2 Digest, MD2 allowed) +depends_on:3:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_md2.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"all":char*:"NULL" + +X509 CRT verification #12 (Valid Cert MD4 Digest, MD4 allowed) +depends_on:4:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_md4.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"all":char*:"NULL" + +X509 CRT verification #13 (Valid Cert MD5 Digest, MD5 allowed) +depends_on:5:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_md5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"all":char*:"NULL" + +X509 CRT verification #14 (Valid Cert SHA1 Digest explicitly allowed in profile) +depends_on:2:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_sha1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #14 (Valid Cert SHA1 Digest allowed in compile-time default profile) +depends_on:2:0:2:1:16:17 +7:char*:"zip:third_party/mbedtls/test/data/cert_sha1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"":char*:"NULL" + +X509 CRT verification #14 (Valid Cert SHA1 Digest forbidden in default profile) +depends_on:2:0:2:1:16:18 +7:char*:"zip:third_party/mbedtls/test/data/cert_sha1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:18:char*:"":char*:"NULL" + +X509 CRT verification #15 (Valid Cert SHA224 Digest) +depends_on:6:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_sha224.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #16 (Valid Cert SHA256 Digest) +depends_on:6:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_sha256.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #17 (Valid Cert SHA384 Digest) +depends_on:7:8:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_sha384.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #18 (Valid Cert SHA512 Digest) +depends_on:7:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_sha512.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #19 (Valid Cert, denying callback) +depends_on:7:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_sha512.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:19:char*:"compat":char*:"verify_none" + +X509 CRT verification #19 (Not trusted Cert, allowing callback) +depends_on:0:1:16:2 +7:char*:"zip:third_party/mbedtls/test/data/server2.crt":char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/crl_expired.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"verify_all" + +X509 CRT verification #21 (domain matching wildcard certificate, case insensitive) +depends_on:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_example_wildcard.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"mail.ExAmPlE.com":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #22 (domain not matching wildcard certificate) +depends_on:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_example_wildcard.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"mail.example.net":exp:5:exp:20:char*:"compat":char*:"NULL" + +X509 CRT verification #23 (domain not matching wildcard certificate) +depends_on:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_example_wildcard.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"example.com":exp:5:exp:20:char*:"compat":char*:"NULL" + +X509 CRT verification #24 (domain matching CN of multi certificate) +depends_on:0:2:6:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_example_multi.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"www.example.com":exp:5:exp:20:char*:"compat":char*:"NULL" + +X509 CRT verification #25 (domain matching multi certificate) +depends_on:0:2:6:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_example_multi.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"example.net":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #26 (domain not matching multi certificate) +depends_on:0:2:6:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_example_multi.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"www.example.net":exp:5:exp:20:char*:"compat":char*:"NULL" + +X509 CRT verification #27.1 (domain not matching multi certificate: suffix) +depends_on:0:2:6:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_example_multi.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"xample.net":exp:5:exp:20:char*:"compat":char*:"NULL" + +X509 CRT verification #27.2 (domain not matching multi certificate: head junk) +depends_on:0:2:6:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_example_multi.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"bexample.net":exp:5:exp:20:char*:"compat":char*:"NULL" + +X509 CRT verification #28 (domain not matching wildcard in multi certificate) +depends_on:0:2:6:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_example_multi.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"example.org":exp:5:exp:20:char*:"compat":char*:"NULL" + +X509 CRT verification #29 (domain matching wildcard in multi certificate) +depends_on:0:2:6:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_example_multi.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"mail.example.org":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #30 (domain matching multi certificate without CN) +depends_on:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_example_multi_nocn.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"www.shotokan-braunschweig.de":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #31 (domain not matching multi certificate without CN) +depends_on:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/cert_example_multi_nocn.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"www.example.net":exp:5:exp:21:char*:"compat":char*:"NULL" + +X509 CRT verification #32 (Valid, EC cert, RSA CA) +depends_on:0:1:10:13:1:16:2 +7:char*:"zip:third_party/mbedtls/test/data/server3.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #33 (Valid, RSA cert, EC CA) +depends_on:0:1:10:6:11:1:16:12 +7:char*:"zip:third_party/mbedtls/test/data/server4.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #34 (Valid, EC cert, EC CA) +depends_on:0:10:6:11:12 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #35 (Revoked, EC CA) +depends_on:0:10:6:11:12:15 +7:char*:"zip:third_party/mbedtls/test/data/server6.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":exp:5:exp:12:char*:"compat":char*:"NULL" + +X509 CRT verification #36 (Valid, EC CA, SHA1 Digest) +depends_on:0:10:6:11:12:2 +7:char*:"zip:third_party/mbedtls/test/data/server5-sha1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #37 (Valid, EC CA, SHA224 Digest) +depends_on:0:10:6:11:12 +7:char*:"zip:third_party/mbedtls/test/data/server5-sha224.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #38 (Valid, EC CA, SHA384 Digest) +depends_on:0:10:6:7:8:11:12 +7:char*:"zip:third_party/mbedtls/test/data/server5-sha384.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #39 (Valid, EC CA, SHA512 Digest) +depends_on:0:10:6:7:11:12 +7:char*:"zip:third_party/mbedtls/test/data/server5-sha512.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #40 (Valid, depth 0, RSA, CA) +depends_on:0:1:16:6:2 +7:char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #41 (Valid, depth 0, EC, CA) +depends_on:0:10:11:12:6 +7:char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #42 (Depth 0, not CA, RSA) +depends_on:0:1:16:2 +7:char*:"zip:third_party/mbedtls/test/data/server2.crt":char*:"zip:third_party/mbedtls/test/data/server2.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #43 (Depth 0, not CA, EC) +depends_on:0:10:11:6 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #44 (Corrupted signature, EC) +depends_on:0:10:11:12:6 +7:char*:"zip:third_party/mbedtls/test/data/server5-badsign.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #45 (Corrupted signature, RSA) +depends_on:0:1:16:2 +7:char*:"zip:third_party/mbedtls/test/data/server2-badsign.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #45b (Corrupted signature, intermediate CA) +depends_on:0:1:16:2:10:11:12:6 +7:char*:"zip:third_party/mbedtls/test/data/server7-badsign.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #46 (Valid, depth 2, EC-RSA-EC) +depends_on:0:10:1:11:12:1:16:6 +7:char*:"zip:third_party/mbedtls/test/data/server7_int-ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #47 (Untrusted, depth 2, EC-RSA-EC) +depends_on:0:10:1:11:1:16:2:6 +7:char*:"zip:third_party/mbedtls/test/data/server7_int-ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #48 (Missing intermediate CA, EC-RSA-EC) +depends_on:0:10:1:11:1:16:2:6 +7:char*:"zip:third_party/mbedtls/test/data/server7.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #49 (Valid, depth 2, RSA-EC-RSA) +depends_on:0:10:1:12:1:16:6:2 +7:char*:"zip:third_party/mbedtls/test/data/server8_int-ca2.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #50 (Valid, multiple CAs) +depends_on:0:1:16:10:12:2:6 +7:char*:"zip:third_party/mbedtls/test/data/server2.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_cat12.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #51 (Valid, multiple CAs, reverse order) +depends_on:0:1:16:10:12:2:6 +7:char*:"zip:third_party/mbedtls/test/data/server2.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_cat21.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #52 (CA keyUsage valid) +depends_on:0:10:6:11:12 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.ku-crt_crl.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #53 (CA keyUsage missing cRLSign) +depends_on:0:10:6:19:11:12 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.ku-crt.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":exp:5:exp:22:char*:"compat":char*:"NULL" + +X509 CRT verification #54 (CA keyUsage missing cRLSign, no CRL) +depends_on:0:10:6:11:12:2:1 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.ku-crt.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #55 (CA keyUsage missing keyCertSign) +depends_on:0:10:6:19:11:12 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.ku-crl.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #56 (CA keyUsage plain wrong) +depends_on:0:10:6:19:11:12 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.ku-ds.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #57 (Valid, RSASSA-PSS, SHA-1) +depends_on:0:9:2:16 +7:char*:"zip:third_party/mbedtls/test/data/server9.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #58 (Valid, RSASSA-PSS, SHA-224) +depends_on:0:9:6:2 +7:char*:"zip:third_party/mbedtls/test/data/server9-sha224.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl-rsa-pss-sha224.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #59 (Valid, RSASSA-PSS, SHA-256) +depends_on:0:9:6:2 +7:char*:"zip:third_party/mbedtls/test/data/server9-sha256.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl-rsa-pss-sha256.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #60 (Valid, RSASSA-PSS, SHA-384) +depends_on:0:9:7:8:2 +7:char*:"zip:third_party/mbedtls/test/data/server9-sha384.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl-rsa-pss-sha384.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #61 (Valid, RSASSA-PSS, SHA-512) +depends_on:0:9:7:2 +7:char*:"zip:third_party/mbedtls/test/data/server9-sha512.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl-rsa-pss-sha512.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #62 (Revoked, RSASSA-PSS, SHA-1) +depends_on:0:9:2:15 +7:char*:"zip:third_party/mbedtls/test/data/server9.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl-rsa-pss-sha1.pem":char*:"NULL":exp:5:exp:12:char*:"compat":char*:"NULL" + +X509 CRT verification #63 (Revoked, RSASSA-PSS, SHA-1, CRL badsign) +depends_on:0:9:2 +7:char*:"zip:third_party/mbedtls/test/data/server9.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl-rsa-pss-sha1-badsign.pem":char*:"NULL":exp:5:exp:22:char*:"compat":char*:"NULL" + +X509 CRT verification #64 (Valid, RSASSA-PSS, SHA-1, not top) +depends_on:0:9:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/server9-with-ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #65 (RSASSA-PSS, SHA1, bad cert signature) +depends_on:0:9:2 +7:char*:"zip:third_party/mbedtls/test/data/server9-badsign.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #66 (RSASSA-PSS, SHA1, no RSA CA) +depends_on:0:9:2:10:12:6 +7:char*:"zip:third_party/mbedtls/test/data/server9.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #67 (Valid, RSASSA-PSS, all defaults) +depends_on:0:9:2 +7:char*:"zip:third_party/mbedtls/test/data/server9-defaults.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl-rsa-pss-sha1.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #68 (RSASSA-PSS, wrong salt_len) +depends_on:0:9:6:2 +7:char*:"zip:third_party/mbedtls/test/data/server9-bad-saltlen.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #69 (RSASSA-PSS, wrong mgf_hash) +depends_on:0:9:6:2 +7:char*:"zip:third_party/mbedtls/test/data/server9-bad-mgfhash.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #70 (v1 trusted CA) +depends_on:0:1:16:6:2 +7:char*:"zip:third_party/mbedtls/test/data/server1-v1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca-v1.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #71 (v1 trusted CA, other) +depends_on:0:1:16:6:2 +7:char*:"zip:third_party/mbedtls/test/data/server2-v1.crt":char*:"zip:third_party/mbedtls/test/data/server1-v1.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #72 (v1 chain) +depends_on:0:1:16:6:2 +7:char*:"zip:third_party/mbedtls/test/data/server2-v1-chain.crt":char*:"zip:third_party/mbedtls/test/data/test-ca-v1.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #73 (selfsigned trusted without CA bit) +depends_on:0:10:6:11:2:1 +7:char*:"zip:third_party/mbedtls/test/data/server5-selfsigned.crt":char*:"zip:third_party/mbedtls/test/data/server5-selfsigned.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #74 (signed by selfsigned trusted without CA bit) +depends_on:0:10:6:11:2:1 +7:char*:"zip:third_party/mbedtls/test/data/server6-ss-child.crt":char*:"zip:third_party/mbedtls/test/data/server5-selfsigned.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:16:char*:"compat":char*:"NULL" + +X509 CRT verification #75 (encoding mismatch) +depends_on:0:2:1:16 +7:char*:"zip:third_party/mbedtls/test/data/enco-cert-utf8str.pem":char*:"zip:third_party/mbedtls/test/data/enco-ca-prstr.pem":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #76 (multiple CRLs, not revoked) +depends_on:0:10:12:11:6:1:2 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_cat12.crt":char*:"zip:third_party/mbedtls/test/data/crl_cat_ec-rsa.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #77 (multiple CRLs, revoked) +depends_on:0:10:12:11:6:1:2:15 +7:char*:"zip:third_party/mbedtls/test/data/server6.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_cat12.crt":char*:"zip:third_party/mbedtls/test/data/crl_cat_ec-rsa.pem":char*:"NULL":exp:5:exp:12:char*:"compat":char*:"NULL" + +X509 CRT verification #78 (multiple CRLs, revoked by second) +depends_on:0:10:12:11:6:1:2:15 +7:char*:"zip:third_party/mbedtls/test/data/server6.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_cat12.crt":char*:"zip:third_party/mbedtls/test/data/crl_cat_rsa-ec.pem":char*:"NULL":exp:5:exp:12:char*:"compat":char*:"NULL" + +X509 CRT verification #79 (multiple CRLs, revoked by future) +depends_on:0:10:12:11:6:1:2:15 +7:char*:"zip:third_party/mbedtls/test/data/server6.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_cat12.crt":char*:"zip:third_party/mbedtls/test/data/crl_cat_ecfut-rsa.pem":char*:"NULL":exp:5:exp:23:char*:"compat":char*:"NULL" + +X509 CRT verification #80 (multiple CRLs, first future, revoked by second) +depends_on:0:10:12:11:6:1:16:2:15 +7:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_cat12.crt":char*:"zip:third_party/mbedtls/test/data/crl_cat_ecfut-rsa.pem":char*:"NULL":exp:5:exp:12:char*:"compat":char*:"NULL" + +X509 CRT verification #81 (multiple CRLs, none relevant) +depends_on:0:10:12:11:6:1:16:2 +7:char*:"zip:third_party/mbedtls/test/data/enco-cert-utf8str.pem":char*:"zip:third_party/mbedtls/test/data/enco-ca-prstr.pem":char*:"zip:third_party/mbedtls/test/data/crl_cat_rsa-ec.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #82 (Not yet valid CA and valid CA) +depends_on:0:10:11:12:2:6 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2_cat-future-present.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha1.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #83 (valid CA and Not yet valid CA) +depends_on:0:10:11:12:2:6 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2_cat-present-future.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha1.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #84 (valid CA and Not yet valid CA) +depends_on:0:10:11:12:2:6 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2_cat-present-past.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha1.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #85 (Not yet valid CA and valid CA) +depends_on:0:10:11:12:2:6 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2_cat-past-present.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha1.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #86 (Not yet valid CA and invalid CA) +depends_on:0:10:11:12:2:6:15 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2_cat-future-invalid.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha1.pem":char*:"NULL":exp:5:exp:15:char*:"compat":char*:"NULL" + +X509 CRT verification #87 (Expired CA and invalid CA) +depends_on:0:10:11:12:2:6:15 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2_cat-past-invalid.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha1.pem":char*:"NULL":exp:5:exp:14:char*:"compat":char*:"NULL" + +X509 CRT verification #88 (Spurious cert in the chain) +depends_on:0:10:11:12:2:6:1:16 +7:char*:"zip:third_party/mbedtls/test/data/server7_spurious_int-ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha1.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #89 (Spurious cert later in the chain) +depends_on:0:10:11:12:2:6:1:16 +7:char*:"zip:third_party/mbedtls/test/data/server10_int3_spurious_int-ca2.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha1.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #90 (EE with same name as trusted root) +depends_on:0:10:11:6:2 +7:char*:"zip:third_party/mbedtls/test/data/server5-ss-forgeca.crt":char*:"zip:third_party/mbedtls/test/data/test-int-ca3.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha1.pem":char*:"NULL":exp:5:exp:16:char*:"":char*:"NULL" + +X509 CRT verification #91 (same CA with good then bad key) +depends_on:0:2:1:16:6:10 +7:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca-good-alt.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #91 (same CA with bad then good key) +depends_on:0:2:1:16:6:10 +7:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca-alt-good.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":int:0:int:0:char*:"compat":char*:"NULL" + +X509 CRT verification #92 (bad name, allowing callback) +depends_on:0:10:6:11:12 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"globalhost":int:0:int:0:char*:"":char*:"verify_all" + +X509 CRT verification #93 (Suite B invalid, EC cert, RSA CA) +depends_on:0:1:20:13:16:2 +7:char*:"zip:third_party/mbedtls/test/data/server3.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:24:char*:"suite_b":char*:"NULL" + +X509 CRT verification #94 (Suite B invalid, RSA cert, EC CA) +depends_on:0:1:10:6:11:16:12 +7:char*:"zip:third_party/mbedtls/test/data/server4.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":exp:5:exp:25:char*:"suite_b":char*:"NULL" + +X509 CRT verification #95 (Suite B Valid, EC cert, EC CA) +depends_on:0:10:6:11:12 +7:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":int:0:int:0:char*:"suite_b":char*:"NULL" + +X509 CRT verification #96 (next profile Invalid Cert SHA224 Digest) +depends_on:6:0:1:16:2 +7:char*:"zip:third_party/mbedtls/test/data/cert_sha224.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl.pem":char*:"NULL":exp:5:exp:26:char*:"next":char*:"NULL" + +X509 CRT verification #97 (next profile Valid Cert SHA256 Digest) +depends_on:6:0:1:16:10:2 +7:char*:"zip:third_party/mbedtls/test/data/cert_sha256.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl-ec-sha256.pem":char*:"NULL":int:0:int:0:char*:"next":char*:"NULL" + +X509 CRT verification #98 (Revoked Cert, revocation date in the future, _with_ MBEDTLS_HAVE_TIME_DATE) +depends_on:0:2:1:16:15 +7:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl-futureRevocationDate.pem":char*:"NULL":exp:5:exp:23:char*:"compat":char*:"NULL" + +X509 CRT verification #99 (Revoked Cert, revocation date in the future, _without_ MBEDTLS_HAVE_TIME_DATE) +depends_on:0:2:1:16:21 +7:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"zip:third_party/mbedtls/test/data/crl-futureRevocationDate.pem":char*:"NULL":exp:5:exp:12:char*:"compat":char*:"NULL" + +X509 CRT verification: domain identical to IPv4 in SubjectAltName +depends_on:0:10:6:11:1 +7:char*:"zip:third_party/mbedtls/test/data/server5-tricky-ip-san.crt":char*:"zip:third_party/mbedtls/test/data/server5-tricky-ip-san.crt":char*:"zip:third_party/mbedtls/test/data/crl_sha256.pem":char*:"abcd":exp:5:exp:20:char*:"":char*:"NULL" + +X509 CRT verification: domain identical to IPv6 in SubjectAltName +depends_on:0:10:6:11:1 +7:char*:"zip:third_party/mbedtls/test/data/server5-tricky-ip-san.crt":char*:"zip:third_party/mbedtls/test/data/server5-tricky-ip-san.crt":char*:"zip:third_party/mbedtls/test/data/crl_sha256.pem":char*:"abcd.example.com":exp:5:exp:20:char*:"":char*:"NULL" + +X509 CRT verification with ca callback: failure +depends_on:0:2:1:16:22 +8:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"NULL":exp:27 + +X509 CRT verification callback: bad name +depends_on:0:10:6:11:12 +9:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"globalhost":exp:5:char*:"depth 1 - serial C1\:43\:E2\:7E\:62\:43\:CC\:E8 - subject C=NL, O=PolarSSL, CN=Polarssl Test EC CA - flags 0x00000000\ndepth 0 - serial 09 - subject C=NL, O=PolarSSL, CN=localhost - flags 0x00000004\n" + +X509 CRT verification callback: trusted EE cert +depends_on:0:10:6:11 +9:char*:"zip:third_party/mbedtls/test/data/server5-selfsigned.crt":char*:"zip:third_party/mbedtls/test/data/server5-selfsigned.crt":char*:"NULL":int:0:char*:"depth 0 - serial 53\:A2\:CB\:4B\:12\:4E\:AD\:83\:7D\:A8\:94\:B2 - subject CN=selfsigned, OU=testing, O=PolarSSL, C=NL - flags 0x00000000\n" + +X509 CRT verification callback: trusted EE cert, expired +depends_on:0:10:6:11:15 +9:char*:"zip:third_party/mbedtls/test/data/server5-ss-expired.crt":char*:"zip:third_party/mbedtls/test/data/server5-ss-expired.crt":char*:"NULL":exp:5:char*:"depth 0 - serial D8\:64\:61\:05\:E3\:A3\:CD\:78 - subject C=UK, O=mbed TLS, OU=testsuite, CN=localhost - flags 0x00000001\n" + +X509 CRT verification callback: simple +depends_on:0:2:1:16 +9:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":char*:"NULL":int:0:char*:"depth 1 - serial 03 - subject C=NL, O=PolarSSL, CN=PolarSSL Test CA - flags 0x00000000\ndepth 0 - serial 01 - subject C=NL, O=PolarSSL, CN=PolarSSL Server 1 - flags 0x00000000\n" + +X509 CRT verification callback: simple, EE expired +depends_on:0:6:10:11:12:2:15 +9:char*:"zip:third_party/mbedtls/test/data/server5-expired.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"NULL":exp:5:char*:"depth 1 - serial C1\:43\:E2\:7E\:62\:43\:CC\:E8 - subject C=NL, O=PolarSSL, CN=Polarssl Test EC CA - flags 0x00000000\ndepth 0 - serial 1E - subject C=NL, O=PolarSSL, CN=localhost - flags 0x00000001\n" + +X509 CRT verification callback: simple, root expired +depends_on:0:6:10:11:12:2:15 +9:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2-expired.crt":char*:"NULL":exp:5:char*:"depth 1 - serial 01 - subject C=NL, O=PolarSSL, CN=Polarssl Test EC CA - flags 0x00000001\ndepth 0 - serial 09 - subject C=NL, O=PolarSSL, CN=localhost - flags 0x00000000\n" + +X509 CRT verification callback: two trusted roots +depends_on:0:2:1:16:10:12:6 +9:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_cat12.crt":char*:"NULL":int:0:char*:"depth 1 - serial 03 - subject C=NL, O=PolarSSL, CN=PolarSSL Test CA - flags 0x00000000\ndepth 0 - serial 01 - subject C=NL, O=PolarSSL, CN=PolarSSL Server 1 - flags 0x00000000\n" + +X509 CRT verification callback: two trusted roots, reversed order +depends_on:0:2:1:16:10:12:6 +9:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_cat21.crt":char*:"NULL":int:0:char*:"depth 1 - serial 03 - subject C=NL, O=PolarSSL, CN=PolarSSL Test CA - flags 0x00000000\ndepth 0 - serial 01 - subject C=NL, O=PolarSSL, CN=PolarSSL Server 1 - flags 0x00000000\n" + +X509 CRT verification callback: root included +depends_on:0:2:1:16:10:12:6 +9:char*:"zip:third_party/mbedtls/test/data/server1_ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_cat21.crt":char*:"NULL":int:0:char*:"depth 1 - serial 03 - subject C=NL, O=PolarSSL, CN=PolarSSL Test CA - flags 0x00000000\ndepth 0 - serial 01 - subject C=NL, O=PolarSSL, CN=PolarSSL Server 1 - flags 0x00000000\n" + +X509 CRT verification callback: intermediate ca +depends_on:0:10:1:11:12:1:16:6:2 +9:char*:"zip:third_party/mbedtls/test/data/server7_int-ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_cat12.crt":char*:"NULL":int:0:char*:"depth 2 - serial C1\:43\:E2\:7E\:62\:43\:CC\:E8 - subject C=NL, O=PolarSSL, CN=Polarssl Test EC CA - flags 0x00000000\ndepth 1 - serial 0E - subject C=NL, O=PolarSSL, CN=PolarSSL Test Intermediate CA - flags 0x00000000\ndepth 0 - serial 10 - subject C=NL, O=PolarSSL, CN=localhost - flags 0x00000000\n" + +X509 CRT verification callback: intermediate ca, root included +depends_on:0:10:1:11:12:1:16:6:2 +9:char*:"zip:third_party/mbedtls/test/data/server7_int-ca_ca2.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_cat12.crt":char*:"NULL":int:0:char*:"depth 2 - serial C1\:43\:E2\:7E\:62\:43\:CC\:E8 - subject C=NL, O=PolarSSL, CN=Polarssl Test EC CA - flags 0x00000000\ndepth 1 - serial 0E - subject C=NL, O=PolarSSL, CN=PolarSSL Test Intermediate CA - flags 0x00000000\ndepth 0 - serial 10 - subject C=NL, O=PolarSSL, CN=localhost - flags 0x00000000\n" + +X509 CRT verification callback: intermediate ca trusted +depends_on:0:10:1:11:12:1:16:6 +9:char*:"zip:third_party/mbedtls/test/data/server7_int-ca_ca2.crt":char*:"zip:third_party/mbedtls/test/data/test-int-ca.crt":char*:"NULL":int:0:char*:"depth 1 - serial 0E - subject C=NL, O=PolarSSL, CN=PolarSSL Test Intermediate CA - flags 0x00000000\ndepth 0 - serial 10 - subject C=NL, O=PolarSSL, CN=localhost - flags 0x00000000\n" + +X509 CRT verification callback: intermediate ca, EE expired +depends_on:0:10:1:11:12:1:16:6:2:15 +9:char*:"zip:third_party/mbedtls/test/data/server7-expired.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"NULL":exp:5:char*:"depth 2 - serial C1\:43\:E2\:7E\:62\:43\:CC\:E8 - subject C=NL, O=PolarSSL, CN=Polarssl Test EC CA - flags 0x00000000\ndepth 1 - serial 0E - subject C=NL, O=PolarSSL, CN=PolarSSL Test Intermediate CA - flags 0x00000000\ndepth 0 - serial 10 - subject C=NL, O=PolarSSL, CN=localhost - flags 0x00000001\n" + +X509 CRT verification callback: intermediate ca, int expired +depends_on:0:10:1:11:12:1:16:6:2:15 +9:char*:"zip:third_party/mbedtls/test/data/server7_int-ca-exp.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"NULL":exp:5:char*:"depth 2 - serial C1\:43\:E2\:7E\:62\:43\:CC\:E8 - subject C=NL, O=PolarSSL, CN=Polarssl Test EC CA - flags 0x00000000\ndepth 1 - serial 0E - subject C=NL, O=PolarSSL, CN=PolarSSL Test Intermediate CA - flags 0x00000001\ndepth 0 - serial 10 - subject C=NL, O=PolarSSL, CN=localhost - flags 0x00000000\n" + +X509 CRT verification callback: intermediate ca, root expired +depends_on:0:10:1:11:12:1:16:6:2:15 +9:char*:"zip:third_party/mbedtls/test/data/server7_int-ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2-expired.crt":char*:"NULL":exp:5:char*:"depth 2 - serial 01 - subject C=NL, O=PolarSSL, CN=Polarssl Test EC CA - flags 0x00000001\ndepth 1 - serial 0E - subject C=NL, O=PolarSSL, CN=PolarSSL Test Intermediate CA - flags 0x00000000\ndepth 0 - serial 10 - subject C=NL, O=PolarSSL, CN=localhost - flags 0x00000000\n" + +X509 CRT verification callback: two intermediates +depends_on:0:10:1:11:12:1:16:6:2 +9:char*:"zip:third_party/mbedtls/test/data/server10_int3_int-ca2.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_cat21.crt":char*:"NULL":int:0:char*:"depth 3 - serial 03 - subject C=NL, O=PolarSSL, CN=PolarSSL Test CA - flags 0x00000000\ndepth 2 - serial 0F - subject C=NL, O=PolarSSL, CN=PolarSSL Test Intermediate EC CA - flags 0x00000000\ndepth 1 - serial 4D - subject C=UK, O=mbed TLS, CN=mbed TLS Test intermediate CA 3 - flags 0x00000000\ndepth 0 - serial 4B - subject CN=localhost - flags 0x00000000\n" + +X509 CRT verification callback: two intermediates, root included +depends_on:0:10:1:11:12:1:16:6:2 +9:char*:"zip:third_party/mbedtls/test/data/server10_int3_int-ca2_ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca_cat21.crt":char*:"NULL":int:0:char*:"depth 3 - serial 03 - subject C=NL, O=PolarSSL, CN=PolarSSL Test CA - flags 0x00000000\ndepth 2 - serial 0F - subject C=NL, O=PolarSSL, CN=PolarSSL Test Intermediate EC CA - flags 0x00000000\ndepth 1 - serial 4D - subject C=UK, O=mbed TLS, CN=mbed TLS Test intermediate CA 3 - flags 0x00000000\ndepth 0 - serial 4B - subject CN=localhost - flags 0x00000000\n" + +X509 CRT verification callback: two intermediates, top int trusted +depends_on:0:10:1:11:12:1:16:6 +9:char*:"zip:third_party/mbedtls/test/data/server10_int3_int-ca2.crt":char*:"zip:third_party/mbedtls/test/data/test-int-ca2.crt":char*:"NULL":int:0:char*:"depth 2 - serial 0F - subject C=NL, O=PolarSSL, CN=PolarSSL Test Intermediate EC CA - flags 0x00000000\ndepth 1 - serial 4D - subject C=UK, O=mbed TLS, CN=mbed TLS Test intermediate CA 3 - flags 0x00000000\ndepth 0 - serial 4B - subject CN=localhost - flags 0x00000000\n" + +X509 CRT verification callback: two intermediates, low int trusted +depends_on:0:10:1:11:12:1:16:6:2 +9:char*:"zip:third_party/mbedtls/test/data/server10_int3_int-ca2_ca.crt":char*:"zip:third_party/mbedtls/test/data/test-int-ca3.crt":char*:"NULL":int:0:char*:"depth 1 - serial 4D - subject C=UK, O=mbed TLS, CN=mbed TLS Test intermediate CA 3 - flags 0x00000000\ndepth 0 - serial 4B - subject CN=localhost - flags 0x00000000\n" + +X509 CRT verification callback: no intermediate, bad signature +depends_on:0:10:6:11:12 +9:char*:"zip:third_party/mbedtls/test/data/server5-badsign.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"NULL":exp:5:char*:"depth 0 - serial 09 - subject C=NL, O=PolarSSL, CN=localhost - flags 0x00000008\n" + +X509 CRT verification callback: one intermediate, bad signature +depends_on:0:1:16:2:10:11:12:6 +9:char*:"zip:third_party/mbedtls/test/data/server7-badsign.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"NULL":exp:5:char*:"depth 2 - serial C1\:43\:E2\:7E\:62\:43\:CC\:E8 - subject C=NL, O=PolarSSL, CN=Polarssl Test EC CA - flags 0x00000000\ndepth 1 - serial 0E - subject C=NL, O=PolarSSL, CN=PolarSSL Test Intermediate CA - flags 0x00000000\ndepth 0 - serial 10 - subject C=NL, O=PolarSSL, CN=localhost - flags 0x00000008\n" + +X509 Parse Selftest +depends_on:2:0:23:1:16 +27 + +X509 CRT ASN1 (Empty Certificate) +14:hex:"":char*:"":exp:28 + +X509 CRT ASN1 (inv Certificate, bad tag) +14:hex:"0500":char*:"":exp:28 + +X509 CRT ASN1 (inv Certificate, no length) +14:hex:"30":char*:"":exp:28 + +X509 CRT ASN1 (inv Certificate, bad length encoding) +14:hex:"3085":char*:"":exp:28 + +X509 CRT ASN1 (inv Certificate, length data incomplete) +14:hex:"308200":char*:"":exp:28 + +X509 CRT ASN1 (inv Certificate, length out of bounds) +14:hex:"3001":char*:"":exp:28 + +X509 CRT ASN1 (inv TBS, invalid tag) +14:hex:"30020500":char*:"":exp:29 + +X509 CRT ASN1 (inv TBS, length missing) +14:hex:"300130":char*:"":exp:30 + +X509 CRT ASN1 (inv TBS, invalid length encoding) +14:hex:"30023085":char*:"":exp:31 + +X509 CRT ASN1 (inv TBS, length data incomplete) +14:hex:"300430839999":char*:"":exp:30 + +X509 CRT ASN1 (inv TBS, length out of bounds) +14:hex:"30023003":char*:"":exp:30 + +X509 CRT ASN1 (TBS empty) +depends_on:6:1 +14:hex:"30153000300d06092a864886f70d01010b0500030200ff":char*:"":exp:30 + +X509 CRT ASN1 (TBS, invalid version tag, serial missing) +depends_on:6:1 +14:hex:"301730020500300d06092a864886f70d01010b0500030200ff":char*:"":exp:32 + +X509 CRT ASN1 (TBS, valid outer version tag, no outer length) +depends_on:6:1 +14:hex:"30163001a0300d06092a864886f70d01010b0500030200ff":char*:"":exp:30 + +X509 CRT ASN1 (TBS, inv inner version tag) +depends_on:6:1 +14:hex:"30193004a0020500300d06092a864886f70d01010b0500030200ff":char*:"":exp:33 + +X509 CRT ASN1 (TBS, valid inner version tag, no inner length) +depends_on:6:1 +14:hex:"30183003a00102300d06092a864886f70d01010b0500030200ff":char*:"":exp:34 + +X509 CRT ASN1 (TBS, valid inner version tag, inv inner length encoding) +depends_on:6:1 +14:hex:"30193004a0020285300d06092a864886f70d01010b0500030200ff":char*:"":exp:35 + +X509 CRT ASN1 (TBS, valid inner version tag, inner length too large for int) +depends_on:6:1 +14:hex:"30293014a012021001000000000000000000000000000000300d06092a864886f70d01010b0500030200ff":char*:"":exp:35 + +X509 CRT ASN1 (TBS, valid inner version tag, inner vs. outer length mismatch) +depends_on:6:1 +14:hex:"301b3006a00402010200300d06092a864886f70d01010b0500030200ff":char*:"":exp:36 + +X509 CRT ASN1 (TBS, valid version tag, length exceeds TBS) +depends_on:6:1 +14:hex:"30293014a012021100000000000000000000000000000000300d06092a864886f70d01010b0500030200ff":char*:"":exp:34 + +X509 CRT ASN1 (TBS, valid version tag + length, unknown version number 3) +depends_on:6:1 +14:hex:"308196308180a0030201038204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:37 + +X509 CRT ASN1 (TBS, valid version tag + length, unknown version number 4) +depends_on:6:1 +14:hex:"308196308180a0030201048204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:37 + +X509 CRT ASN1 (TBS, valid version tag + length, version number overflow) +depends_on:6:1 +14:hex:"308199308183a00602047FFFFFFF8204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:37 + +X509 CRT ASN1 (TBS, serial missing) +depends_on:6:1 +14:hex:"301a3005a003020102300d06092a864886f70d01010b0500030200ff":char*:"":exp:38 + +X509 CRT ASN1 (TBS, inv serial, tag wrong) +depends_on:6:1 +14:hex:"301c3007a0030201020500300d06092a864886f70d01010b0500030200ff":char*:"":exp:32 + +X509 CRT ASN1 (TBS, inv serial, length missing) +depends_on:6:1 +14:hex:"301b3006a00302010282300d06092a864886f70d01010b0500030200ff":char*:"":exp:38 + +X509 CRT ASN1 (TBS, inv serial, inv length encoding) +depends_on:6:1 +14:hex:"301c3007a0030201028285300d06092a864886f70d01010b0500030200ff":char*:"":exp:39 + +X509 CRT ASN1 (TBS, inv serial, length out of bounds) +depends_on:6:1 +14:hex:"301c3007a0030201028201300d06092a864886f70d01010b0500030200ff":char*:"":exp:38 + +X509 CRT ASN1 (TBS, AlgID missing) +depends_on:6:1 +14:hex:"3020300ba0030201028204deadbeef300d06092a864886f70d01010b0500030200ff":char*:"":exp:40 + +X509 CRT ASN1 (TBS, inv AlgID, tag wrong) +depends_on:6:1 +14:hex:"3022300da0030201028204deadbeef0500300d06092a864886f70d01010b0500030200ff":char*:"":exp:41 + +X509 CRT ASN1 (TBS, inv AlgID, OID missing) +depends_on:6:1 +14:hex:"307b3073a0030201008204deadbeef3000300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff3000030200ff":char*:"":exp:40 + +X509 CRT ASN1 (TBS, inv AlgID, OID tag wrong) +depends_on:6:1 +14:hex:"307f3075a0030201008204deadbeef30020500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff30020500030200ff":char*:"":exp:41 + +X509 CRT ASN1 (TBS, inv AlgID, OID inv length encoding) +depends_on:6:1 +14:hex:"307f3075a0030201008204deadbeef30020685300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff30020685030200ff":char*:"":exp:42 + +X509 CRT ASN1 (TBS, inv AlgID, OID length out of bounds) +depends_on:6:1 +14:hex:"307f3075a0030201008204deadbeef30020601300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff30020601030200ff":char*:"":exp:40 + +X509 CRT ASN1 (TBS, inv AlgID, OID empty) +depends_on:6:1 +14:hex:"307f3075a0030201008204deadbeef30020600300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff30020600030200ff":char*:"":exp:43 + +X509 CRT ASN1 (TBS, inv AlgID, OID unknown) +depends_on:6:1 +14:hex:"3081873079a0030201008204deadbeef30060604deadbeef300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff30060604deadbeef030200ff":char*:"":exp:43 + +X509 CRT ASN1 (TBS, inv AlgID, param inv length encoding) +depends_on:6:1 +14:hex:"308196308180a0030201008204deadbeef300d06092a864886f70d01010b0685300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0685030200ff":char*:"":exp:42 + +X509 CRT ASN1 (TBS, inv AlgID, param length out of bounds) +depends_on:6:1 +14:hex:"308196308180a0030201008204deadbeef300d06092a864886f70d01010b0601300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0601030200ff":char*:"":exp:40 + +X509 CRT ASN1 (TBS, inv AlgID, param length mismatch) +depends_on:6:1 +14:hex:"30819a308182a0030201008204deadbeef300f06092a864886f70d01010b06010000300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300f06092a864886f70d01010b06010000030200ff":char*:"":exp:44 + +X509 CRT ASN1 (TBS, inv AlgID, params present but empty) +depends_on:6:1 +14:hex:"308196308180a0030201008204deadbeef300d06092a864886f70d01010b0600300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0600030200ff":char*:"":exp:45 + +X509 CRT ASN1 (TBS, inv AlgID, bad RSASSA-PSS params) +depends_on:6:9 +14:hex:"308196308180a0030201008204deadbeef300d06092a864886f70d01010a3100300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010a3100030200ff":char*:"":exp:41 + +X509 CRT ASN1 (TBS, Issuer missing) +depends_on:6:1 +14:hex:"302f301aa0030201008204deadbeef300d06092a864886f70d01010b0500300d06092a864886f70d01010b0500030200ff":char*:"":exp:30 + +X509 CRT ASN1 (TBS, inv Issuer, RDNSequence inv tag) +depends_on:6:1 +14:hex:"3031301ca0030201008204deadbeef300d06092a864886f70d01010b05000500300d06092a864886f70d01010b0500030200ff":char*:"":exp:29 + +X509 CRT ASN1 (TBS, inv Issuer, RDNSequence length missing) +depends_on:6:1 +14:hex:"3030301ba0030201008204deadbeef300d06092a864886f70d01010b050030300d06092a864886f70d01010b0500030200ff":char*:"":exp:30 + +X509 CRT ASN1 (TBS, inv Issuer, RDNSequence inv length encoding) +depends_on:6:1 +14:hex:"3031301ca0030201008204deadbeef300d06092a864886f70d01010b05003085300d06092a864886f70d01010b0500030200ff":char*:"":exp:31 + +X509 CRT ASN1 (TBS, inv Issuer, RDNSequence length out of bounds) +depends_on:6:1 +14:hex:"3031301ca0030201008204deadbeef300d06092a864886f70d01010b05003001300d06092a864886f70d01010b0500030200ff":char*:"":exp:30 + +X509 CRT ASN1 (TBS, inv Issuer, RDNSequence empty) +depends_on:1:6 +14:hex:"3081893074a0030201028204deadbeef300d06092a864886f70d01010b05003000301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Issuer, RDN inv tag) +depends_on:1:6 +14:hex:"30818b3076a0030201028204deadbeef300d06092a864886f70d01010b050030020500301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:47 + +X509 CRT ASN1 (TBS, inv Issuer, RDN inv length encoding) +depends_on:1:6 +14:hex:"30818b3076a0030201028204deadbeef300d06092a864886f70d01010b050030023185301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:48 + +X509 CRT ASN1 (TBS, inv Issuer, RDN length out of bounds) +depends_on:1:6 +14:hex:"30818b3076a0030201028204deadbeef300d06092a864886f70d01010b050030023101301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Issuer, RDN empty) +depends_on:1:6 +14:hex:"30818b3076a0030201028204deadbeef300d06092a864886f70d01010b050030023100301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Issuer, AttrTypeAndValue inv tag) +depends_on:1:6 +14:hex:"30818d3078a0030201028204deadbeef300d06092a864886f70d01010b0500300431020500301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:47 + +X509 CRT ASN1 (TBS, inv Issuer, AttrTypeAndValue inv length encoding) +depends_on:1:6 +14:hex:"30818d3078a0030201028204deadbeef300d06092a864886f70d01010b0500300431023085301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:48 + +X509 CRT ASN1 (TBS, inv Issuer, AttrTypeAndValue length out of bounds) +depends_on:1:6 +14:hex:"30818d3078a0030201028204deadbeef300d06092a864886f70d01010b0500300431023001301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Issuer, AttrTypeAndValue empty) +depends_on:1:6 +14:hex:"30818d3078a0030201028204deadbeef300d06092a864886f70d01010b0500300431023000301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Issuer, AttrTypeAndValue type inv tag) +depends_on:1:6 +14:hex:"30818f307aa0030201028204deadbeef300d06092a864886f70d01010b05003006310430020500301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:47 + +X509 CRT ASN1 (TBS, inv Issuer, AttrTypeAndValue type inv no length data) +depends_on:1:6 +14:hex:"30818e3079a0030201028204deadbeef300d06092a864886f70d01010b050030053103300106301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Issuer, AttrTypeAndValue type inv length encoding) +depends_on:1:6 +14:hex:"30818f307aa0030201028204deadbeef300d06092a864886f70d01010b05003006310430020685301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:48 + +X509 CRT ASN1 (TBS, inv Issuer, AttrTypeAndValue type length out of bounds) +depends_on:1:6 +14:hex:"30818f307aa0030201028204deadbeef300d06092a864886f70d01010b05003006310430020601301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Issuer, AttrTypeAndValue value missing) +depends_on:1:6 +14:hex:"30818f307aa0030201028204deadbeef300d06092a864886f70d01010b05003006310430020600301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Issuer, AttrTypeAndValue value inv tag) +depends_on:1:6 +14:hex:"308191307ca0030201028204deadbeef300d06092a864886f70d01010b050030083106300406000500301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:49 + +X509 CRT ASN1 (TBS, inv Issuer, AttrTypeAndValue value length missing) +depends_on:1:6 +14:hex:"308190307ba0030201028204deadbeef300d06092a864886f70d01010b050030073105300306000c301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Issuer, AttrTypeAndValue value inv length encoding) +depends_on:1:6 +14:hex:"308191307ca0030201028204deadbeef300d06092a864886f70d01010b050030083106300406000C85301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:48 + +X509 CRT ASN1 (TBS, inv Issuer, AttrTypeAndValue value length out of bounds) +depends_on:1:6 +14:hex:"308191307ca0030201028204deadbeef300d06092a864886f70d01010b050030083106300406000c01301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Issuer, AttrTypeAndValue value length mismatch) +depends_on:1:6 +14:hex:"308193307ea0030201028204deadbeef300d06092a864886f70d01010b0500300a3108300606000c010000301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:50 + +X509 CRT ASN1 (TBS, inv Issuer, 2nd AttributeTypeValue empty) +depends_on:1:6 +14:hex:"308198308182a0030201028204deadbeef300d06092a864886f70d01010b0500300e310c300806000c04546573743000301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, Validity missing) +depends_on:1:6 +14:hex:"303d3028a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a300806000c0454657374300d06092a864886f70d01010b0500030200ff":char*:"":exp:51 + +X509 CRT ASN1 (TBS, inv Validity, inv tag) +depends_on:1:6 +14:hex:"303f302aa0030201028204deadbeef300d06092a864886f70d01010b0500300c310a300806000c04546573740500300d06092a864886f70d01010b0500030200ff":char*:"":exp:52 + +X509 CRT ASN1 (TBS, inv Validity, length field missing) +depends_on:1:6 +14:hex:"303e3029a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a300806000c045465737430300d06092a864886f70d01010b0500030200ff":char*:"":exp:51 + +X509 CRT ASN1 (TBS, inv Validity, inv length encoding) +depends_on:1:6 +14:hex:"303f302aa0030201028204deadbeef300d06092a864886f70d01010b0500300c310a300806000c04546573743085300d06092a864886f70d01010b0500030200ff":char*:"":exp:53 + +X509 CRT ASN1 (TBS, inv Validity, length out of bounds) +depends_on:1:6 +14:hex:"303f302aa0030201028204deadbeef300d06092a864886f70d01010b0500300c310a300806000c04546573743001300d06092a864886f70d01010b0500030200ff":char*:"":exp:51 + +X509 CRT ASN1 (TBS, inv Validity, notBefore missing) +depends_on:1:6 +14:hex:"30793064a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a300806000c04546573743000300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:51 + +X509 CRT ASN1 (TBS, inv Validity, notBefore inv tag) +depends_on:1:6 +14:hex:"307b3066a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a300806000c045465737430020500300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:52 + +X509 CRT ASN1 (TBS, inv Validity, notBefore no length) +depends_on:1:6 +14:hex:"307a3065a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a300806000c0454657374300117300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:51 + +X509 CRT ASN1 (TBS, inv Validity, notBefore inv length encoding) +depends_on:1:6 +14:hex:"307b3066a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a300806000c04546573743002178f300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:53 + +X509 CRT ASN1 (TBS, inv Validity, notBefore length out of bounds) +depends_on:1:6 +14:hex:"307b3066a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a300806000c045465737430021701300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:51 + +X509 CRT ASN1 (TBS, inv Validity, notBefore empty) +depends_on:1:6 +14:hex:"3081893074a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a3008060013045465737430101700170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:54 + +X509 CRT ASN1 (TBS, inv Validity, notBefore invalid) +depends_on:1:6 +14:hex:"308196308180a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303000000000170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:54 + +X509 CRT ASN1 (TBS, inv Validity, notAfter missing) +depends_on:1:6 +14:hex:"3081873072a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374300e170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:51 + +X509 CRT ASN1 (TBS, inv Validity, notAfter inv tag) +depends_on:1:6 +14:hex:"3081893074a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a300806001304546573743010170c3039313233313233353935390500300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:52 + +X509 CRT ASN1 (TBS, inv Validity, notAfter length missing) +depends_on:1:6 +14:hex:"3081883073a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374300f170c30393132333132333539353917300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:51 + +X509 CRT ASN1 (TBS, inv Validity, notAfter inv length encoding) +depends_on:1:6 +14:hex:"3081893074a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a300806001304546573743010170c3039313233313233353935391785300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:53 + +X509 CRT ASN1 (TBS, inv Validity, notAfter length out of bounds) +depends_on:1:6 +14:hex:"3081893074a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a300806001304546573743010170c3039313233313233353935391701300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:51 + +X509 CRT ASN1 (TBS, inv Validity, notAfter empty) +depends_on:1:6 +14:hex:"3081893074a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a300806001304546573743010170c3039313233313233353935391700300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:54 + +X509 CRT ASN1 (TBS, inv Validity, notAfter invalid) +depends_on:1:6 +14:hex:"308196308180a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303931323331323335393539170c303930313031303000000000300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:54 + +X509 CRT ASN1 (TBS, inv Validity, data remaining after 'notAfter') +depends_on:1:6 +14:hex:"308198308182a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301e170c303930313031303030303030170c3039313233313233353935391700300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:55 + +X509 CRT ASN1 (TBS, Subject missing) +depends_on:1:6 +14:hex:"305b3046a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300d06092a864886f70d01010b0500030200ff":char*:"":exp:30 + +X509 CRT ASN1 (TBS, inv Subject, RDNSequence inv tag) +depends_on:1:6 +14:hex:"305c3047a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c30393132333132333539353900300d06092a864886f70d01010b0500030200ff":char*:"":exp:29 + +X509 CRT ASN1 (TBS, inv Subject, RDNSequence length missing) +depends_on:1:6 +14:hex:"305c3047a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c30393132333132333539353930300d06092a864886f70d01010b0500030200ff":char*:"":exp:30 + +X509 CRT ASN1 (TBS, inv Subject, RDNSequence inv length encoding) +depends_on:1:6 +14:hex:"305d3048a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c3039313233313233353935393085300d06092a864886f70d01010b0500030200ff":char*:"":exp:31 + +X509 CRT ASN1 (TBS, inv Subject, RDNSequence length out of bounds) +depends_on:1:6 +14:hex:"305d3048a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c3039313233313233353935393001300d06092a864886f70d01010b0500030200ff":char*:"":exp:30 + +X509 CRT ASN1 (TBS, inv Subject, RDN inv tag) +depends_on:1:6 +14:hex:"30818b3076a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c30393132333132333539353930020500302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:47 + +X509 CRT ASN1 (TBS, inv Subject, RDN inv length encoding) +depends_on:1:6 +14:hex:"30818b3076a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c30393132333132333539353930023185302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:48 + +X509 CRT ASN1 (TBS, inv Subject, RDN length out of bounds) +depends_on:1:6 +14:hex:"30818b3076a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c30393132333132333539353930023101302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Subject, RDN empty) +depends_on:1:6 +14:hex:"30818b3076a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c30393132333132333539353930023100302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Subject, AttrTypeAndValue inv tag) +depends_on:1:6 +14:hex:"30818d3078a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300431020500302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:47 + +X509 CRT ASN1 (TBS, inv Subject, AttrTypeAndValue inv length encoding) +depends_on:1:6 +14:hex:"30818d3078a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300431023085302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:48 + +X509 CRT ASN1 (TBS, inv Subject, AttrTypeAndValue length out of bounds) +depends_on:1:6 +14:hex:"30818d3078a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300431023001302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Subject, AttrTypeAndValue empty) +depends_on:1:6 +14:hex:"30818d3078a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300431023000302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Subject, AttrTypeAndValue type inv tag) +depends_on:1:6 +14:hex:"30818f307aa0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c3039313233313233353935393006310430020500302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:47 + +X509 CRT ASN1 (TBS, inv Subject, AttrTypeAndValue type inv no length data) +depends_on:1:6 +14:hex:"30818e3079a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c30393132333132333539353930053103300106302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Subject, AttrTypeAndValue type inv length encoding) +depends_on:1:6 +14:hex:"30818f307aa0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c3039313233313233353935393006310430020685302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:48 + +X509 CRT ASN1 (TBS, inv Subject, AttrTypeAndValue type length out of bounds ) +depends_on:1:6 +14:hex:"30818f307aa0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c3039313233313233353935393006310430020601302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Subject, AttrTypeAndValue value missing) +depends_on:1:6 +14:hex:"30818f307aa0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c3039313233313233353935393006310430020600302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Subject, AttrTypeAndValue value inv tag) +depends_on:1:6 +14:hex:"308191307ca0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c30393132333132333539353930083106300406000500302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:49 + +X509 CRT ASN1 (TBS, inv Subject, AttrTypeAndValue value length missing) +depends_on:1:6 +14:hex:"308190307ba0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c30393132333132333539353930073105300306000c302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Subject, AttrTypeAndValue value inv length encoding) +depends_on:1:6 +14:hex:"308191307ca0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c30393132333132333539353930083106300406000C85302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:48 + +X509 CRT ASN1 (TBS, inv Subject, AttrTypeAndValue value length out of bounds) +depends_on:1:6 +14:hex:"308191307ca0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c30393132333132333539353930083106300406000c01302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, inv Subject, AttrTypeAndValue value length mismatch) +depends_on:1:6 +14:hex:"308193307ea0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300a3108300606000c010000302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:50 + +X509 CRT ASN1 (TBS, inv Subject, 2nd AttributeTypeValue empty) +depends_on:1:6 +14:hex:"308198308182a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300e310c300806000c04546573743000302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:46 + +X509 CRT ASN1 (TBS, SubPubKeyInfo missing) +depends_on:1:6 +14:hex:"30693054a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374300d06092a864886f70d01010b0500030200ff":char*:"":exp:56 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, inv tag) +depends_on:1:6 +14:hex:"306b3056a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a300806001304546573740500300d06092a864886f70d01010b0500030200ff":char*:"":exp:57 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, length missing) +depends_on:1:6 +14:hex:"306a3055a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a3008060013045465737430300d06092a864886f70d01010b0500030200ff":char*:"":exp:56 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, inv length encoding) +depends_on:1:6 +14:hex:"306b3056a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a300806001304546573743085300d06092a864886f70d01010b0500030200ff":char*:"":exp:58 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, length out of bounds) +depends_on:1:6 +14:hex:"306b3056a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a300806001304546573743001300d06092a864886f70d01010b0500030200ff":char*:"":exp:56 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, empty) +depends_on:1:6 +14:hex:"306b3056a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a300806001304546573743000300d06092a864886f70d01010b0500030200ff":char*:"":exp:59 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, inv algorithm tag) +depends_on:1:6 +14:hex:"306d3058a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a3008060013045465737430020500300d06092a864886f70d01010b0500030200ff":char*:"":exp:60 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, algorithm length missing) +depends_on:1:6 +14:hex:"306c3057a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374300130300d06092a864886f70d01010b0500030200ff":char*:"":exp:59 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, algorithm inv length encoding) +depends_on:1:6 +14:hex:"306d3058a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a3008060013045465737430023085300d06092a864886f70d01010b0500030200ff":char*:"":exp:61 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, algorithm length out of bounds) +depends_on:1:6 +14:hex:"306d3058a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a3008060013045465737430023001300d06092a864886f70d01010b0500030200ff":char*:"":exp:59 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, algorithm empty) +depends_on:1:6 +14:hex:"3081883073a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374301d300003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:59 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, algorithm unknown) +depends_on:1:6 +14:hex:"308196308180a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010100050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:62 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, bitstring missing) +depends_on:1:6 +14:hex:"307a3065a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374300f300d06092A864886F70D0101010500300d06092a864886f70d01010b0500030200ff":char*:"":exp:63 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, bitstring inv tag) +depends_on:1:6 +14:hex:"307c3067a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a300806001304546573743011300d06092A864886F70D01010105000500300d06092a864886f70d01010b0500030200ff":char*:"":exp:64 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, bitstring length missing) +depends_on:1:6 +14:hex:"307b3066a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a300806001304546573743010300d06092A864886F70D010101050003300d06092a864886f70d01010b0500030200ff":char*:"":exp:63 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, bitstring inv length encoding) +depends_on:1:6 +14:hex:"307c3067a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a300806001304546573743011300d06092A864886F70D01010105000385300d06092a864886f70d01010b0500030200ff":char*:"":exp:65 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, bitstring length out of bounds) +depends_on:1:6 +14:hex:"307c3067a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a300806001304546573743011300d06092A864886F70D01010105000301300d06092a864886f70d01010b0500030200ff":char*:"":exp:63 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, no bitstring data) +depends_on:1:6 +14:hex:"307c3067a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a300806001304546573743011300d06092A864886F70D01010105000300300d06092a864886f70d01010b0500030200ff":char*:"":exp:66 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, inv bitstring start) +depends_on:1:6 +14:hex:"307d3068a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a300806001304546573743012300d06092A864886F70D0101010500030101300d06092a864886f70d01010b0500030200ff":char*:"":exp:66 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, inv internal bitstring length) +depends_on:1:6 +14:hex:"308180306ba0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a300806001304546573743015300d06092A864886F70D0101010500030400300000300d06092a864886f70d01010b0500030200ff":char*:"":exp:67 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, inv internal bitstring tag) +depends_on:1:6 +14:hex:"308180306ba0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a300806001304546573743015300d06092A864886F70D0101010500030400310000300d06092a864886f70d01010b0500030200ff":char*:"":exp:64 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, inv RSA modulus) +depends_on:1:6 +14:hex:"3081873072a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374301c300d06092A864886F70D0101010500030b0030080202ffff0302ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:64 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, total length mismatch) +depends_on:1:6 +14:hex:"3081893074a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374301e300d06092A864886F70D0101010500030b0030080202ffff0202ffff0500300d06092a864886f70d01010b0500030200ff":char*:"":exp:67 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, check failed) +depends_on:1:6 +14:hex:"3081873072a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374301c300d06092A864886F70D0101010500030b0030080202ffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:68 + +X509 CRT ASN1 (TBS, inv SubPubKeyInfo, check failed, expanded length notation) +depends_on:1:6 +14:hex:"308196308180a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210fffffffffffffffffffffffffffffffe0202ffff300d06092a864886f70d01010b0500030200ff":char*:"":exp:68 + +X509 CRT ASN1 (TBS, inv IssuerID, inv tag) +depends_on:1:6 +14:hex:"308198308182a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff0500300d06092a864886f70d01010b0500030200ff":char*:"":exp:1 + +X509 CRT ASN1 (TBS, inv IssuerID, length missing) +depends_on:1:6 +14:hex:"308197308181a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa1300d06092a864886f70d01010b0500030200ff":char*:"":exp:30 + +X509 CRT ASN1 (TBS, inv IssuerID, inv length encoding) +depends_on:1:6 +14:hex:"308198308182a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa185300d06092a864886f70d01010b0500030200ff":char*:"":exp:31 + +X509 CRT ASN1 (TBS, inv IssuerID, length out of bounds) +depends_on:1:6 +14:hex:"308198308182a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa101300d06092a864886f70d01010b0500030200ff":char*:"":exp:30 + +X509 CRT ASN1 (TBS, no IssuerID, inv SubjectID, length missing) +depends_on:1:6 +14:hex:"308197308181a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa2300d06092a864886f70d01010b0500030200ff":char*:"":exp:30 + +X509 CRT ASN1 (TBS, no IssuerID, inv SubjectID, inv length encoding) +depends_on:1:6 +14:hex:"308198308182a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa285300d06092a864886f70d01010b0500030200ff":char*:"":exp:31 + +X509 CRT ASN1 (TBS, no IssuerID, inv SubjectID, length out of bounds) +depends_on:1:6 +14:hex:"308198308182a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa201300d06092a864886f70d01010b0500030200ff":char*:"":exp:30 + +X509 CRT ASN1 (TBS, valid IssuerID, inv SubjectID, inv tag) +depends_on:24:1:6 +14:hex:"30819a308184a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa1000500300d06092a864886f70d01010b0500030200ff":char*:"":exp:69 + +X509 CRT ASN1 (TBSCertificate v3, ext SubjectAlternativeName malformed) +depends_on:1:2 +14:hex:"30820220308201ffa0030201020209202020202020202020300d06092a864886f70d01010505003045310b30090603202020130220203113301106032020200c0a202020202020202020203121301f06032020200c18202020202020202020202020202020202020202020202020301e170d3134303432333230353034305a170d3137303432323230353034305a3045310b30090603202020130220203113301106032020200c0a202020202020202020203121301f06032020200c1820202020202020202020202020202020202020202020202030819f300d06092a864886f70d010101050003818d003081890281812020202020202020ff20202020202020202020202020202020202020ff202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020ff020320ffffa350304e301d0603202020041620202020202020202020202020202020202020202020301f0603551d11041830169104202020208000be002020202020202020202020202020202020202020202020202020202020202020ff20202020202020202020202020202020202020ff2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020ff2020ff202020202020202020202020202020ff2020202020202020202020202020202020202020202020202020":char*:"":exp:70 + +X509 CRT ASN1 (TBS, valid IssuerID, inv SubjectID, length missing) +depends_on:1:6 +14:hex:"308199308183a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a2300d06092a864886f70d01010b0500030200ff":char*:"":exp:30 + +X509 CRT ASN1 (TBS, valid IssuerID, inv SubjectID, inv length encoding) +depends_on:1:6 +14:hex:"30819a308184a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a285300d06092a864886f70d01010b0500030200ff":char*:"":exp:31 + +X509 CRT ASN1 (TBS, valid IssuerID, inv SubjectID, length out of bounds) +depends_on:1:6 +14:hex:"30819a308184a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a201300d06092a864886f70d01010b0500030200ff":char*:"":exp:30 + +X509 CRT ASN1 (TBS, IssuerID unsupported in v1 CRT) +depends_on:24:1:6 +14:hex:"30819a308184a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a201300d06092a864886f70d01010b0500030200ff":char*:"":exp:69 + +X509 CRT ASN1 (TBS, IssuerID unsupported in v1 CRT, ALLOW_EXTENSIONS_NON_V3) +depends_on:14:1:6 +14:hex:"30819a308184a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a201300d06092a864886f70d01010b0500030200ff":char*:"":exp:1 + +X509 CRT ASN1 (TBS, SubjectID unsupported in v1 CRT) +depends_on:24:1:6 +14:hex:"30819a308184a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa200a201300d06092a864886f70d01010b0500030200ff":char*:"":exp:69 + +X509 CRT ASN1 (TBS, SubjectID unsupported in v1 CRT, ALLOW_EXTENSIONS_NON_V3) +depends_on:14:1:6 +14:hex:"30819a308184a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa200a201300d06092a864886f70d01010b0500030200ff":char*:"":exp:1 + +X509 CRT ASN1 (TBS, inv v3Ext, inv tag) +depends_on:1:6 +14:hex:"30819c308186a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a2000500300d06092a864886f70d01010b0500030200ff":char*:"":exp:1 + +X509 CRT ASN1 (TBS, inv v3Ext, outer length missing) +depends_on:1:6 +14:hex:"30819b308185a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a3300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv v3Ext, outer length inv encoding) +depends_on:1:6 +14:hex:"30819c308186a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a385300d06092a864886f70d01010b0500030200ff":char*:"":exp:71 + +X509 CRT ASN1 (TBS, inv v3Ext, outer length out of bounds) +depends_on:1:6 +14:hex:"30819c308186a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a301300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv v3Ext, outer length 0) +depends_on:1:6 +14:hex:"30819c308186a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a300300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv v3Ext, inner tag invalid) +depends_on:1:6 +14:hex:"30819e308188a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a3020500300d06092a864886f70d01010b0500030200ff":char*:"":exp:1 + +X509 CRT ASN1 (TBS, inv v3Ext, inner length missing) +depends_on:1:6 +14:hex:"30819d308187a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30130300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv v3Ext, inner length inv encoding) +depends_on:1:6 +14:hex:"30819e308188a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a3023085300d06092a864886f70d01010b0500030200ff":char*:"":exp:71 + +X509 CRT ASN1 (TBS, inv v3Ext, inner length out of bounds) +depends_on:1:6 +14:hex:"30819e308188a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a3023001300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv v3Ext, inner/outer length mismatch) +depends_on:1:6 +14:hex:"30819f308189a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a303300000300d06092a864886f70d01010b0500030200ff":char*:"":exp:72 + +X509 CRT ASN1 (TBS, inv v3Ext, first ext inv tag) +depends_on:1:6 +14:hex:"3081a030818aa0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30430020500300d06092a864886f70d01010b0500030200ff":char*:"":exp:1 + +X509 CRT ASN1 (TBS, inv v3Ext, first ext length missing) +depends_on:1:6 +14:hex:"30819f308189a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a303300130300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv v3Ext, inv first ext length encoding) +depends_on:1:6 +14:hex:"3081a030818aa0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30430023085300d06092a864886f70d01010b0500030200ff":char*:"":exp:71 + +X509 CRT ASN1 (TBS, inv v3Ext, first ext length out of bounds) +depends_on:1:6 +14:hex:"3081a030818aa0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30430023001300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv v3Ext, first ext empty) +depends_on:1:6 +14:hex:"3081a030818aa0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30430023000300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv v3Ext, first ext extnID inv tag) +depends_on:1:6 +14:hex:"3081a230818ca0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a306300430020500300d06092a864886f70d01010b0500030200ff":char*:"":exp:1 + +X509 CRT ASN1 (TBS, inv v3Ext, first ext extnID length missing) +depends_on:1:6 +14:hex:"3081a130818ba0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a3053003300106300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv v3Ext, first ext extnID inv length encoding) +depends_on:1:6 +14:hex:"3081a230818ca0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a306300430020685300d06092a864886f70d01010b0500030200ff":char*:"":exp:71 + +X509 CRT ASN1 (TBS, inv v3Ext, first ext extnID length out of bounds) +depends_on:1:6 +14:hex:"3081a230818ca0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a306300430020601300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv v3Ext, no extnValue) +depends_on:1:6 +14:hex:"3081a230818ca0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a306300430020600300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv v3Ext, inv critical tag) +depends_on:1:6 +14:hex:"3081a430818ea0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a3083006300406000500300d06092a864886f70d01010b0500030200ff":char*:"":exp:1 + +X509 CRT ASN1 (TBS, inv v3Ext, critical length missing) +depends_on:1:6 +14:hex:"3081a330818da0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30730053003060001300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv v3Ext, critical inv length encoding) +depends_on:1:6 +14:hex:"3081a430818ea0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a3083006300406000185300d06092a864886f70d01010b0500030200ff":char*:"":exp:71 + +X509 CRT ASN1 (TBS, inv v3Ext, critical length out of bounds) +depends_on:1:6 +14:hex:"3081a430818ea0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a3083006300406000101300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv v3Ext, critical length 0) +depends_on:1:6 +14:hex:"3081a430818ea0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a3083006300406000100300d06092a864886f70d01010b0500030200ff":char*:"":exp:71 + +X509 CRT ASN1 (TBS, inv v3Ext, critical length 2) +depends_on:1:6 +14:hex:"3081a6308190a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30a30083006060001020000300d06092a864886f70d01010b0500030200ff":char*:"":exp:71 + +X509 CRT ASN1 (TBS, inv v3Ext, extnValue inv tag) +depends_on:1:6 +14:hex:"3081a7308191a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30b3009300706000101000500300d06092a864886f70d01010b0500030200ff":char*:"":exp:1 + +X509 CRT ASN1 (TBS, inv v3Ext, extnValue length missing) +depends_on:1:6 +14:hex:"3081a6308190a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30a30083006060001010004300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv v3Ext, extnValue length inv encoding) +depends_on:1:6 +14:hex:"3081a7308191a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30b3009300706000101000485300d06092a864886f70d01010b0500030200ff":char*:"":exp:71 + +X509 CRT ASN1 (TBS, inv v3Ext, extnValue length out of bounds) +depends_on:1:6 +14:hex:"3081a7308191a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30b3009300706000101000401300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv v3Ext, data remaining after extnValue) +depends_on:1:6 +14:hex:"3081a9308193a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30d300b3009060001010004000500300d06092a864886f70d01010b0500030200ff":char*:"":exp:72 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, data missing) +depends_on:1:6 +14:hex:"3081a7308191a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30b300930070603551d200400300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, invalid outer tag) +depends_on:1:6 +14:hex:"3081a9308193a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30d300b30090603551d2004020500300d06092a864886f70d01010b0500030200ff":char*:"":exp:1 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, outer length missing) +depends_on:1:6 +14:hex:"3081a8308192a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30c300a30080603551d20040130300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, outer length inv encoding) +depends_on:1:6 +14:hex:"3081a9308193a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30d300b30090603551d2004023085300d06092a864886f70d01010b0500030200ff":char*:"":exp:71 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, outer length out of bounds) +depends_on:1:6 +14:hex:"3081a9308193a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30d300b30090603551d2004023001300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, no policies) +depends_on:1:6 +14:hex:"3081a9308193a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30d300b30090603551d2004023000300d06092a864886f70d01010b0500030200ff":char*:"":exp:72 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, policy invalid tag) +depends_on:1:6 +14:hex:"3081ab308195a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30f300d300b0603551d20040430020500300d06092a864886f70d01010b0500030200ff":char*:"":exp:1 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, policy length missing) +depends_on:1:6 +14:hex:"3081aa308194a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30e300c300a0603551d200403300130300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, policy length inv encoding) +depends_on:1:6 +14:hex:"3081ab308195a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30f300d300b0603551d20040430023085300d06092a864886f70d01010b0500030200ff":char*:"":exp:71 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, policy length out of bounds) +depends_on:1:6 +14:hex:"3081ab308195a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30f300d300b0603551d20040430023001300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, empty policy) +depends_on:1:6 +14:hex:"3081ab308195a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a30f300d300b0603551d20040430023000300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, policy invalid OID tag) +depends_on:1:6 +14:hex:"3081ad308197a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a311300f300d0603551d200406300430020500300d06092a864886f70d01010b0500030200ff":char*:"":exp:1 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, policy no OID length) +depends_on:1:6 +14:hex:"3081ac308196a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a310300e300c0603551d2004053003300106300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, policy OID length inv encoding) +depends_on:1:6 +14:hex:"3081ad308197a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a311300f300d0603551d200406300430020685300d06092a864886f70d01010b0500030200ff":char*:"":exp:71 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, policy OID length out of bounds) +depends_on:1:6 +14:hex:"3081ad308197a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a311300f300d0603551d200406300430020601300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, unknown critical policy) +depends_on:1:6:25 +14:hex:"3081b130819ba0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a315301330110603551d20010101040730053003060100300d06092a864886f70d01010b0500030200ff":char*:"":exp:73 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, policy qualifier invalid tag) +depends_on:1:6 +14:hex:"3081b030819aa0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a314301230100603551d200409300730050601000500300d06092a864886f70d01010b0500030200ff":char*:"":exp:1 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, policy qualifier no length) +depends_on:1:6 +14:hex:"3081af308199a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a3133011300f0603551d2004083006300406010030300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, policy qualifier inv length encoding) +depends_on:1:6 +14:hex:"3081b030819aa0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a314301230100603551d200409300730050601003085300d06092a864886f70d01010b0500030200ff":char*:"":exp:71 + +X509 CRT ASN1 (TBSCertificate v3, inv CertificatePolicies, policy qualifier length out of bounds) +depends_on:1:6 +14:hex:"3081b030819aa0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a314301230100603551d200409300730050601003001300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv extBasicConstraint, no pathlen length) +depends_on:1:6 +14:hex:"3081b030819aa0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a314301230100603551d130101010406300402010102300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (inv extBasicConstraint, pathlen is INT_MAX) +depends_on:1:6:2 +13:char*:"zip:third_party/mbedtls/test/data/server1_pathlen_int_max.crt":exp:71 + +X509 CRT ASN1 (pathlen is INT_MAX-1) +depends_on:1:6:2 +13:char*:"zip:third_party/mbedtls/test/data/server1_pathlen_int_max-1.crt":int:0 + +X509 CRT ASN1 (TBS, inv extBasicConstraint, pathlen inv length encoding) +depends_on:1:6 +14:hex:"3081b130819ba0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a315301330110603551d13010101040730050201010285300d06092a864886f70d01010b0500030200ff":char*:"":exp:71 + +X509 CRT ASN1 (TBS, inv extBasicConstraint, pathlen length out of bounds) +depends_on:1:6 +14:hex:"3081b130819ba0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a315301330110603551d13010101040730050201010201300d06092a864886f70d01010b0500030200ff":char*:"":exp:70 + +X509 CRT ASN1 (TBS, inv extBasicConstraint, pathlen empty) +depends_on:1:6 +14:hex:"3081b130819ba0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a315301330110603551d13010101040730050201010200300d06092a864886f70d01010b0500030200ff":char*:"":exp:71 + +X509 CRT ASN1 (TBS, inv extBasicConstraint, pathlen length mismatch) +depends_on:1:6 +14:hex:"3081b430819ea0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a318301630140603551d13010101040a30080201010201010500300d06092a864886f70d01010b0500030200ff":char*:"":exp:72 + +X509 CRT ASN1 (TBS, inv v3Ext, ExtKeyUsage bad second tag) +depends_on:1:6 +14:hex:"3081bd3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d250416301406082b0601050507030107082b06010505070302300d06092a864886f70d01010b0500030200ff":char*:"":exp:1 + +X509 CRT ASN1 (TBS, inv v3Ext, SubjectAltName repeated) +depends_on:1:6 +14:hex:"3081dc3081c6a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a340303e301d0603551d11041630148208666f6f2e7465737482086261722e74657374301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b0500030200ff":char*:"":exp:74 + +X509 CRT ASN1 (TBS, inv v3Ext, ExtKeyUsage repeated) +depends_on:1:6 +14:hex:"3081dc3081c6a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a340303e301d0603551d250416301406082b0601050507030106082b06010505070302301d0603551d250416301406082b0601050507030106082b06010505070302300d06092a864886f70d01010b0500030200ff":char*:"":exp:74 + +X509 CRT ASN1 (TBS, inv v3Ext, SubjectAltName repeated outside Extensions) +depends_on:1:6 +14:hex:"3081dc3081c6a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b0500030200ff":char*:"":exp:69 + +X509 CRT (TBS, valid v3Ext in v1 CRT, ALLOW_EXTENSIONS_NON_V3) +depends_on:14:1:6 +14:hex:"3081b93081a3a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 1\nserial number \: DE\:AD\:BE\:EF\nissuer name \: ??=Test\nsubject name \: ??=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\nsubject alt name \:\n dNSName \: foo.test\n dNSName \: bar.test\n":int:0 + +X509 CRT (TBS, valid v3Ext in v2 CRT, ALLOW_EXTENSIONS_NON_V3) +depends_on:14:1:6 +14:hex:"3081b93081a3a0030201018204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 2\nserial number \: DE\:AD\:BE\:EF\nissuer name \: ??=Test\nsubject name \: ??=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\nsubject alt name \:\n dNSName \: foo.test\n dNSName \: bar.test\n":int:0 + +X509 CRT (TBS, valid v3Ext in v3 CRT) +depends_on:1:6 +14:hex:"3081b93081a3a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 3\nserial number \: DE\:AD\:BE\:EF\nissuer name \: ??=Test\nsubject name \: ??=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\nsubject alt name \:\n dNSName \: foo.test\n dNSName \: bar.test\n":int:0 + +X509 CRT ASN1 (TBS, valid v3Ext in v1 CRT) +depends_on:24:1:6 +14:hex:"3081b93081a3a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b0500030200ff":char*:"":exp:69 + +X509 CRT ASN1 (TBS, valid v3Ext in v2 CRT) +depends_on:24:1:6 +14:hex:"3081b93081a3a0030201018204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b0500030200ff":char*:"":exp:69 + +X509 CRT ASN1 (TBS, valid SubjectID, valid IssuerID, inv v3Ext, SubjectAltName repeated outside Extensions, inv SubjectAltNames tag) +depends_on:1:2 +14:hex:"308203723082025aa003020102020111300d06092a864886f70d0101050500303b310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c3119301706035504031310506f6c617253534c2054657374204341301e170d3132303531303133323334315a170d3232303531313133323334315a303a310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c311830160603550403130f7777772e6578616d706c652e636f6d30820122300d06092a864886f70d01010105000382010f003082010a0282010100b93c4ac5c8a38e9017a49e52aa7175266180e7c7b56d8cffaab64126b7be11ad5c73160c64114804ffd6e13b05db89bbb39709d51c14dd688739b03d71cbe276d01ad8182d801b54f6e5449af1cbaf612edf490d9d09b7edb1fd3cfd3cfa24cf5dbf7ce453e725b5ea4422e926d3ea20949ee66167ba2e07670b032fa209edf0338f0bce10ef67a4c608dac1edc23fd74add153df95e1c8160463eb5b33d2fa6de471cbc92aeebdf276b1656b7dcecd15557a56eec7525f5b77bdfabd23a5a91987d97170b130aa76b4a8bc14730fb3af84104d5c1dfb81dbf7b01a565a2e01e36b7a65ccc305af8cd6fcdf1196225ca01e3357ffa20f5dcfd69b26a007d17f70203010001a38181307f30090603551d1304023000301d0603551d0e041604147de49c6be6f9717d46d2123dad6b1dfdc2aa784c301f0603551d23041830168014b45ae4a5b3ded252f6b9d5a6950feb3ebcc7fdff30320603551d11042b3029c20b6578616d706c652e636f6d820b6578616d706c652e6e6574820d2a2e6578616d706c652e6f7267300d06092a864886f70d010105050003820101004f09cb7ad5eef5ef620ddc7ba285d68cca95b46bda115b92007513b9ca0bceeafbc31fe23f7f217479e2e6bcda06e52f6ff655c67339cf48bc0d2f0cd27a06c34a4cd9485da0d07389e4d4851d969a0e5799c66f1d21271f8d0529e840ae823968c39707cf3c934c1adf2fa6a455487f7c8c1ac922da24cd9239c68aecb08df5698267cb04eede534196c127dc2ffe33fad30eb8d432a9842853a5f0d189d5a298e71691bb9cc0418e8c58acffe3dd2e7aabb0b97176ad0f2733f7a929d3c076c0bf06407c0ed5a47c8ae2326e16aeda641fb0557cdbddf1a4ba447cb39958d2346e00ea976c143af2101e0aa249107601f4f2c818fdcc6346128b091bf194e6":char*:"":exp:1 + +X509 CRT ASN1 (SignatureAlgorithm missing) +depends_on:1:6 +14:hex:"3081aa3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374":char*:"":exp:40 + +X509 CRT ASN1 (inv SignatureAlgorithm, bad tag) +depends_on:1:6 +14:hex:"3081ac3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e746573740500":char*:"":exp:41 + +X509 CRT ASN1 (inv SignatureAlgorithm, length missing) +depends_on:1:6 +14:hex:"3081ab3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e7465737430":char*:"":exp:40 + +X509 CRT ASN1 (inv SignatureAlgorithm, inv length encoding) +depends_on:1:6 +14:hex:"3081ac3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e746573743085":char*:"":exp:42 + +X509 CRT ASN1 (inv SignatureAlgorithm, length out of bounds) +depends_on:1:6 +14:hex:"3081ac3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e746573743001":char*:"":exp:40 + +X509 CRT ASN1 (inv SignatureAlgorithm, not the same as SignatureAlgorithm in TBS) +depends_on:1:6 +14:hex:"3081bd3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010a0500030200ff":char*:"":exp:75 + +X509 CRT ASN1 (Signature missing) +depends_on:1:6 +14:hex:"3081b93081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b0500":char*:"":exp:76 + +X509 CRT ASN1 (inv Signature, bad tag) +depends_on:1:6 +14:hex:"3081bb3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b05000500":char*:"":exp:77 + +X509 CRT ASN1 (inv Signature, length missing) +depends_on:1:6 +14:hex:"3081ba3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b050003":char*:"":exp:76 + +X509 CRT ASN1 (inv Signature, inv length encoding) +depends_on:1:6 +14:hex:"3081bb3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b05000385":char*:"":exp:78 + +X509 CRT ASN1 (inv Signature, length out of bounds) +depends_on:1:6 +14:hex:"3081bb3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b05000301":char*:"":exp:76 + +X509 CRT ASN1 (inv Signature, inv data #1) +depends_on:1:6 +14:hex:"3081bb3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b05000300":char*:"":exp:79 + +X509 CRT ASN1 (inv Signature, inv data #2) +depends_on:1:6 +14:hex:"3081bc3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b0500030108":char*:"":exp:79 + +X509 CRT ASN1 (empty Signature) +depends_on:1:6 +14:hex:"3081bc3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b0500030100":char*:"cert. version \: 3\nserial number \: DE\:AD\:BE\:EF\nissuer name \: ??=Test\nsubject name \: ??=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\nsubject alt name \:\n dNSName \: foo.test\n dNSName \: bar.test\n":int:0 + +X509 CRT ASN1 (dummy 24-bit Signature) +depends_on:1:6 +14:hex:"3081bf3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b0500030400666f6f":char*:"cert. version \: 3\nserial number \: DE\:AD\:BE\:EF\nissuer name \: ??=Test\nsubject name \: ??=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\nsubject alt name \:\n dNSName \: foo.test\n dNSName \: bar.test\n":int:0 + +X509 CRT ASN1 (inv Signature: not octet-aligned) +depends_on:1:6 +14:hex:"3081bf3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b0500030401666f6e":char*:"":exp:79 + +X509 CRT ASN1 (inv Signature, length mismatch) +depends_on:1:6 +14:hex:"3081be3081a7a0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a321301f301d0603551d11041630148208666f6f2e7465737482086261722e74657374300d06092a864886f70d01010b0500030200ff00":char*:"":exp:69 + +X509 CRT ASN1 (well-formed) +depends_on:1:6 +14:hex:"308196308180a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 1\nserial number \: DE\:AD\:BE\:EF\nissuer name \: ?\?=Test\nsubject name \: ?\?=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\n":int:0 + +X509 CRT ASN1 (GeneralizedTime in notBefore, UTCTime in notAfter) +depends_on:1:6 +14:hex:"308198308182a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301e180e3230313030313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 1\nserial number \: DE\:AD\:BE\:EF\nissuer name \: ?\?=Test\nsubject name \: ?\?=Test\nissued on \: 2010-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\n":int:0 + +X509 CRT ASN1 (UTCTime in notBefore, GeneralizedTime in notAfter) +depends_on:1:6 +14:hex:"308198308182a0030201008204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301e170c303931323331323335393539180e3230313030313031303030303030300c310a30080600130454657374302a300d06092A864886F70D010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 1\nserial number \: DE\:AD\:BE\:EF\nissuer name \: ?\?=Test\nsubject name \: ?\?=Test\nissued on \: 2009-12-31 23\:59\:59\nexpires on \: 2010-01-01 00\:00\:00\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\n":int:0 + +X509 CRT ASN1 (Name with X520 CN) +depends_on:1:6 +14:hex:"308199308183a0030201008204deadbeef300d06092a864886f70d01010b0500300f310d300b0603550403130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 1\nserial number \: DE\:AD\:BE\:EF\nissuer name \: CN=Test\nsubject name \: ?\?=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\n":int:0 + +X509 CRT ASN1 (Name with X520 C) +depends_on:1:6 +14:hex:"308199308183a0030201008204deadbeef300d06092a864886f70d01010b0500300f310d300b0603550406130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 1\nserial number \: DE\:AD\:BE\:EF\nissuer name \: C=Test\nsubject name \: ?\?=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\n":int:0 + +X509 CRT ASN1 (Name with X520 L) +depends_on:1:6 +14:hex:"308199308183a0030201008204deadbeef300d06092a864886f70d01010b0500300f310d300b0603550407130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 1\nserial number \: DE\:AD\:BE\:EF\nissuer name \: L=Test\nsubject name \: ?\?=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\n":int:0 + +X509 CRT ASN1 (Name with X520 ST) +depends_on:1:6 +14:hex:"308199308183a0030201008204deadbeef300d06092a864886f70d01010b0500300f310d300b0603550408130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 1\nserial number \: DE\:AD\:BE\:EF\nissuer name \: ST=Test\nsubject name \: ?\?=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\n":int:0 + +X509 CRT ASN1 (Name with X520 O) +depends_on:1:6 +14:hex:"308199308183a0030201008204deadbeef300d06092a864886f70d01010b0500300f310d300b060355040a130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 1\nserial number \: DE\:AD\:BE\:EF\nissuer name \: O=Test\nsubject name \: ?\?=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\n":int:0 + +X509 CRT ASN1 (Name with X520 OU) +depends_on:1:6 +14:hex:"308199308183a0030201008204deadbeef300d06092a864886f70d01010b0500300f310d300b060355040b130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 1\nserial number \: DE\:AD\:BE\:EF\nissuer name \: OU=Test\nsubject name \: ?\?=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\n":int:0 + +X509 CRT ASN1 (Name with unknown X520 part) +depends_on:1:6 +14:hex:"308199308183a0030201008204deadbeef300d06092a864886f70d01010b0500300f310d300b06035504de130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 1\nserial number \: DE\:AD\:BE\:EF\nissuer name \: ?\?=Test\nsubject name \: ?\?=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\n":int:0 + +X509 CRT ASN1 (Name with composite RDN) +depends_on:1:2 +14:hex:"3082029f30820208a00302010202044c20e3bd300d06092a864886f70d01010505003056310b3009060355040613025553310b300906035504080c0243413121301f060355040a0c18496e7465726e6574205769646769747320507479204c74643117301506035504030c0e4672616e6b656e63657274204341301e170d3133303830323135313433375a170d3135303831373035353433315a3081d1310b3009060355040613025553311330110603550408130a57617368696e67746f6e31133011060b2b0601040182373c0201031302555331193017060b2b0601040182373c020102130844656c6177617265311a3018060355040a1311417574686f72697a652e4e6574204c4c43311d301b060355040f131450726976617465204f7267616e697a6174696f6e312a300e06035504051307343336393139313018060355040313117777772e617574686f72697a652e6e6574311630140603550407130d53616e204672616e636973636f30819f300d06092a864886f70d010101050003818d0030818902818100d885c62e209b6ac005c64f0bcfdaac1f2b67a18802f75b08851ff933deed888b7b68a62fcabdb21d4a8914becfeaaa1b7e08a09ffaf9916563586dc95e2877262b0b5f5ec27eb4d754aa6facd1d39d25b38a2372891bacdd3e919f791ed25704e8920e380e5623a38e6a23935978a3aec7a8e761e211d42effa2713e44e7de0b0203010001300d06092a864886f70d010105050003818100092f7424d3f6da4b8553829d958ed1980b9270b42c0d3d5833509a28c66bb207df9f3c51d122065e00b87c08c2730d2745fe1c279d16fae4d53b4bf5bdfa3631fceeb2e772b6b08a3eca5a2e2c687aefd23b4b73bf77ac6099711342cf070b35c6f61333a7cbf613d8dd4bd73e9df34bcd4284b0b4df57c36c450613f11e5dac":char*:"cert. version \: 3\nserial number \: 4C\:20\:E3\:BD\nissuer name \: C=US, ST=CA, O=Internet Widgits Pty Ltd, CN=Frankencert CA\nsubject name \: C=US, ST=Washington, ??=US, ??=Delaware, O=Authorize.Net LLC, ??=Private Organization, serialNumber=4369191 + CN=www.authorize.net, L=San Francisco\nissued on \: 2013-08-02 15\:14\:37\nexpires on \: 2015-08-17 05\:54\:31\nsigned using \: RSA with SHA1\nRSA key size \: 1024 bits\n":int:0 + +X509 CRT ASN1 (Name with PKCS9 email) +depends_on:1:6 +14:hex:"30819f308189a0030201008204deadbeef300d06092a864886f70d01010b050030153113301106092a864886f70d010901130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 1\nserial number \: DE\:AD\:BE\:EF\nissuer name \: emailAddress=Test\nsubject name \: ?\?=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\n":int:0 + +X509 CRT ASN1 (Name with unknown PKCS9 part) +depends_on:1:6 +14:hex:"30819f308189a0030201008204deadbeef300d06092a864886f70d01010b050030153113301106092a864886f70d0109ab130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffff300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 1\nserial number \: DE\:AD\:BE\:EF\nissuer name \: ?\?=Test\nsubject name \: ?\?=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\n":int:0 + +X509 CRT ASN1 (ECDSA signature, RSA key) +depends_on:1:2:10 +14:hex:"3081e630819e020103300906072a8648ce3d0401300f310d300b0603550403130454657374301e170d3133303731303039343631385a170d3233303730383039343631385a300f310d300b0603550403130454657374304c300d06092a864886f70d0101010500033b003038023100e8f546061d3b49bc2f6b7524b7ea4d73a8d5293ee8c64d9407b70b5d16baebc32b8205591eab4e1eb57e9241883701250203010001300906072a8648ce3d0401033800303502186e18209afbed14a0d9a796efcad68891e3ccd5f75815c833021900e92b4fd460b1994693243b9ffad54729de865381bda41d25":char*:"cert. version \: 1\nserial number \: 03\nissuer name \: CN=Test\nsubject name \: CN=Test\nissued on \: 2013-07-10 09\:46\:18\nexpires on \: 2023-07-08 09\:46\:18\nsigned using \: ECDSA with SHA1\nRSA key size \: 384 bits\n":int:0 + +X509 CRT ASN1 (ECDSA signature, EC key) +depends_on:10:13:2 +14:hex:"3081eb3081a3020900f41534662ec7e912300906072a8648ce3d0401300f310d300b0603550403130454657374301e170d3133303731303039343031395a170d3233303730383039343031395a300f310d300b06035504031304546573743049301306072a8648ce3d020106082a8648ce3d030101033200042137969fabd4e370624a0e1a33e379cab950cce00ef8c3c3e2adaeb7271c8f07659d65d3d777dcf21614363ae4b6e617300906072a8648ce3d04010338003035021858cc0f957946fe6a303d92885a456aa74c743c7b708cbd37021900fe293cac21af352d16b82eb8ea54e9410b3abaadd9f05dd6":char*:"cert. version \: 1\nserial number \: F4\:15\:34\:66\:2E\:C7\:E9\:12\nissuer name \: CN=Test\nsubject name \: CN=Test\nissued on \: 2013-07-10 09\:40\:19\nexpires on \: 2023-07-08 09\:40\:19\nsigned using \: ECDSA with SHA1\nEC key size \: 192 bits\n":int:0 + +X509 CRT ASN1 (RSA signature, EC key) +depends_on:10:13:2:1 +14:hex:"3081e430819f020104300d06092a864886f70d0101050500300f310d300b0603550403130454657374301e170d3133303731303135303233375a170d3233303730383135303233375a300f310d300b06035504031304546573743049301306072a8648ce3d020106082a8648ce3d03010103320004e962551a325b21b50cf6b990e33d4318fd16677130726357a196e3efe7107bcb6bdc6d9db2a4df7c964acfe81798433d300d06092a864886f70d01010505000331001a6c18cd1e457474b2d3912743f44b571341a7859a0122774a8e19a671680878936949f904c9255bdd6fffdb33a7e6d8":char*:"cert. version \: 1\nserial number \: 04\nissuer name \: CN=Test\nsubject name \: CN=Test\nissued on \: 2013-07-10 15\:02\:37\nexpires on \: 2023-07-08 15\:02\:37\nsigned using \: RSA with SHA1\nEC key size \: 192 bits\n":int:0 + +X509 CRT ASN1 (Unsupported critical extension) +depends_on:1:6:25 +14:hex:"308203353082021da00302010202104d3ebbb8a870f9c78c55a8a7e12fd516300d06092a864886f70d01010b05003010310e300c06035504030c0564756d6d79301e170d3230303432383137343234335a170d3230303632373137343234335a3010310e300c06035504030c0564756d6d7930820122300d06092a864886f70d01010105000382010f003082010a0282010100a51b75b3f7da2d60ea1b0fc077f0dbb2bbb6fe1b474028368af8dc2664672896efff171033b0aede0b323a89d5c6db4d517404bc97b65264e41b9e9e86a6f40ace652498d4b3b859544d1bacfd7f86325503eed046f517406545c0ffb5560f83446dedce0fcafcc41ac8495488a6aa912ae45192ef7e3efa20d0f7403b0baa62c7e2e5404c620c5793623132aa20f624f08d88fbf0985af39433f5a24d0b908e5219d8ba6a404d3ee8418203b62a40c8eb18837354d50281a6a2bf5012e505c419482787b7a81e5935613ceea0c6d93e86f76282b6aa406fb3a1796c56b32e8a22afc3f7a3c9daa8f0e2846ff0d50abfc862a52f6cf0aaece6066c860376f3ed0203010001a3818a308187300c0603551d13040530030101ff30130603551d110101ff04093007820564756d6d79301206082b0601050507011f0101ff0403040100300e0603551d0f0101ff040403020184301d0603551d0e04160414e6e451ec8d19d9677b2d272a9d73b939fa2d915a301f0603551d23041830168014e6e451ec8d19d9677b2d272a9d73b939fa2d915a300d06092a864886f70d01010b0500038201010056d06047b7f48683e2347ca726997d9700b4f2cf1d8bc0ef17addac8445d38ffd7f8079055ead878b6a74c8384d0e30150c8990aa74f59cda6ebcb49465d8991ffa16a4c927a26e4639d1875a3ac396c7455c7eda40dbe66054a03d27f961c15e86bd5b06db6b26572977bcda93453b6b6a88ef96b31996a7bd17323525b33050d28deec9c33a3f9765a11fb99d0e222bd39a6db3a788474c9ca347377688f837d42f5841667bffcbe6b473e6f229f286a0829963e591a99aa7f67e9d20c36ccd2ac84cb85b7a8b3396a6cbe59a573ffff726f373197c230de5c92a52c5bc87e29c20bdf6e89609764a60c649022aabd768f3557661b083ae00e6afc8a5bf2ed":char*:"":exp:1 + +X509 CRT ASN1 (Unsupported critical extension recognized by callback) +depends_on:1:6 +15:hex:"308203353082021da00302010202104d3ebbb8a870f9c78c55a8a7e12fd516300d06092a864886f70d01010b05003010310e300c06035504030c0564756d6d79301e170d3230303432383137343234335a170d3230303632373137343234335a3010310e300c06035504030c0564756d6d7930820122300d06092a864886f70d01010105000382010f003082010a0282010100a51b75b3f7da2d60ea1b0fc077f0dbb2bbb6fe1b474028368af8dc2664672896efff171033b0aede0b323a89d5c6db4d517404bc97b65264e41b9e9e86a6f40ace652498d4b3b859544d1bacfd7f86325503eed046f517406545c0ffb5560f83446dedce0fcafcc41ac8495488a6aa912ae45192ef7e3efa20d0f7403b0baa62c7e2e5404c620c5793623132aa20f624f08d88fbf0985af39433f5a24d0b908e5219d8ba6a404d3ee8418203b62a40c8eb18837354d50281a6a2bf5012e505c419482787b7a81e5935613ceea0c6d93e86f76282b6aa406fb3a1796c56b32e8a22afc3f7a3c9daa8f0e2846ff0d50abfc862a52f6cf0aaece6066c860376f3ed0203010001a3818a308187300c0603551d13040530030101ff30130603551d110101ff04093007820564756d6d79301206082b0601050507011f0101ff0403040100300e0603551d0f0101ff040403020184301d0603551d0e04160414e6e451ec8d19d9677b2d272a9d73b939fa2d915a301f0603551d23041830168014e6e451ec8d19d9677b2d272a9d73b939fa2d915a300d06092a864886f70d01010b0500038201010056d06047b7f48683e2347ca726997d9700b4f2cf1d8bc0ef17addac8445d38ffd7f8079055ead878b6a74c8384d0e30150c8990aa74f59cda6ebcb49465d8991ffa16a4c927a26e4639d1875a3ac396c7455c7eda40dbe66054a03d27f961c15e86bd5b06db6b26572977bcda93453b6b6a88ef96b31996a7bd17323525b33050d28deec9c33a3f9765a11fb99d0e222bd39a6db3a788474c9ca347377688f837d42f5841667bffcbe6b473e6f229f286a0829963e591a99aa7f67e9d20c36ccd2ac84cb85b7a8b3396a6cbe59a573ffff726f373197c230de5c92a52c5bc87e29c20bdf6e89609764a60c649022aabd768f3557661b083ae00e6afc8a5bf2ed":char*:"cert. version \: 3\nserial number \: 4D\:3E\:BB\:B8\:A8\:70\:F9\:C7\:8C\:55\:A8\:A7\:E1\:2F\:D5\:16\nissuer name \: CN=dummy\nsubject name \: CN=dummy\nissued on \: 2020-04-28 17\:42\:43\nexpires on \: 2020-06-27 17\:42\:43\nsigned using \: RSA with SHA-256\nRSA key size \: 2048 bits\nbasic constraints \: CA=true\nsubject alt name \:\n dNSName \: dummy\nkey usage \: Digital Signature, Key Cert Sign\n":int:0 + +X509 CRT ASN1 (Unsupported critical extension not recognized by callback) +depends_on:1:6 +15:hex:"308203353082021da00302010202104d3ebbb8a870f9c78c55a8a7e12fd516300d06092a864886f70d01010b05003010310e300c06035504030c0564756d6d79301e170d3230303432383137343234335a170d3230303632373137343234335a3010310e300c06035504030c0564756d6d7930820122300d06092a864886f70d01010105000382010f003082010a0282010100a51b75b3f7da2d60ea1b0fc077f0dbb2bbb6fe1b474028368af8dc2664672896efff171033b0aede0b323a89d5c6db4d517404bc97b65264e41b9e9e86a6f40ace652498d4b3b859544d1bacfd7f86325503eed046f517406545c0ffb5560f83446dedce0fcafcc41ac8495488a6aa912ae45192ef7e3efa20d0f7403b0baa62c7e2e5404c620c5793623132aa20f624f08d88fbf0985af39433f5a24d0b908e5219d8ba6a404d3ee8418203b62a40c8eb18837354d50281a6a2bf5012e505c419482787b7a81e5935613ceea0c6d93e86f76282b6aa406fb3a1796c56b32e8a22afc3f7a3c9daa8f0e2846ff0d50abfc862a52f6cf0aaece6066c860376f3ed0203010001a3818a308187300c0603551d13040530030101ff30130603551d110101ff04093007820564756d6d79301206082b0601050507011e0101ff0403040100300e0603551d0f0101ff040403020184301d0603551d0e04160414e6e451ec8d19d9677b2d272a9d73b939fa2d915a301f0603551d23041830168014e6e451ec8d19d9677b2d272a9d73b939fa2d915a300d06092a864886f70d01010b0500038201010056d06047b7f48683e2347ca726997d9700b4f2cf1d8bc0ef17addac8445d38ffd7f8079055ead878b6a74c8384d0e30150c8990aa74f59cda6ebcb49465d8991ffa16a4c927a26e4639d1875a3ac396c7455c7eda40dbe66054a03d27f961c15e86bd5b06db6b26572977bcda93453b6b6a88ef96b31996a7bd17323525b33050d28deec9c33a3f9765a11fb99d0e222bd39a6db3a788474c9ca347377688f837d42f5841667bffcbe6b473e6f229f286a0829963e591a99aa7f67e9d20c36ccd2ac84cb85b7a8b3396a6cbe59a573ffff726f373197c230de5c92a52c5bc87e29c20bdf6e89609764a60c649022aabd768f3557661b083ae00e6afc8a5bf2ed":char*:"":exp:1 + +X509 CRT ASN1 (Unsupported non critical extension recognized by callback) +depends_on:1:6 +15:hex:"308203353082021da00302010202104d3ebbb8a870f9c78c55a8a7e12fd516300d06092a864886f70d01010b05003010310e300c06035504030c0564756d6d79301e170d3230303432383137343234335a170d3230303632373137343234335a3010310e300c06035504030c0564756d6d7930820122300d06092a864886f70d01010105000382010f003082010a0282010100a51b75b3f7da2d60ea1b0fc077f0dbb2bbb6fe1b474028368af8dc2664672896efff171033b0aede0b323a89d5c6db4d517404bc97b65264e41b9e9e86a6f40ace652498d4b3b859544d1bacfd7f86325503eed046f517406545c0ffb5560f83446dedce0fcafcc41ac8495488a6aa912ae45192ef7e3efa20d0f7403b0baa62c7e2e5404c620c5793623132aa20f624f08d88fbf0985af39433f5a24d0b908e5219d8ba6a404d3ee8418203b62a40c8eb18837354d50281a6a2bf5012e505c419482787b7a81e5935613ceea0c6d93e86f76282b6aa406fb3a1796c56b32e8a22afc3f7a3c9daa8f0e2846ff0d50abfc862a52f6cf0aaece6066c860376f3ed0203010001a3818a308187300c0603551d13040530030101ff30130603551d110101ff04093007820564756d6d79301206082b0601050507011f0101000403040100300e0603551d0f0101ff040403020184301d0603551d0e04160414e6e451ec8d19d9677b2d272a9d73b939fa2d915a301f0603551d23041830168014e6e451ec8d19d9677b2d272a9d73b939fa2d915a300d06092a864886f70d01010b0500038201010056d06047b7f48683e2347ca726997d9700b4f2cf1d8bc0ef17addac8445d38ffd7f8079055ead878b6a74c8384d0e30150c8990aa74f59cda6ebcb49465d8991ffa16a4c927a26e4639d1875a3ac396c7455c7eda40dbe66054a03d27f961c15e86bd5b06db6b26572977bcda93453b6b6a88ef96b31996a7bd17323525b33050d28deec9c33a3f9765a11fb99d0e222bd39a6db3a788474c9ca347377688f837d42f5841667bffcbe6b473e6f229f286a0829963e591a99aa7f67e9d20c36ccd2ac84cb85b7a8b3396a6cbe59a573ffff726f373197c230de5c92a52c5bc87e29c20bdf6e89609764a60c649022aabd768f3557661b083ae00e6afc8a5bf2ed":char*:"cert. version \: 3\nserial number \: 4D\:3E\:BB\:B8\:A8\:70\:F9\:C7\:8C\:55\:A8\:A7\:E1\:2F\:D5\:16\nissuer name \: CN=dummy\nsubject name \: CN=dummy\nissued on \: 2020-04-28 17\:42\:43\nexpires on \: 2020-06-27 17\:42\:43\nsigned using \: RSA with SHA-256\nRSA key size \: 2048 bits\nbasic constraints \: CA=true\nsubject alt name \:\n dNSName \: dummy\nkey usage \: Digital Signature, Key Cert Sign\n":int:0 + +X509 CRT ASN1 (Unsupported non critical extension not recognized by callback) +depends_on:1:6 +15:hex:"308203353082021da00302010202104d3ebbb8a870f9c78c55a8a7e12fd516300d06092a864886f70d01010b05003010310e300c06035504030c0564756d6d79301e170d3230303432383137343234335a170d3230303632373137343234335a3010310e300c06035504030c0564756d6d7930820122300d06092a864886f70d01010105000382010f003082010a0282010100a51b75b3f7da2d60ea1b0fc077f0dbb2bbb6fe1b474028368af8dc2664672896efff171033b0aede0b323a89d5c6db4d517404bc97b65264e41b9e9e86a6f40ace652498d4b3b859544d1bacfd7f86325503eed046f517406545c0ffb5560f83446dedce0fcafcc41ac8495488a6aa912ae45192ef7e3efa20d0f7403b0baa62c7e2e5404c620c5793623132aa20f624f08d88fbf0985af39433f5a24d0b908e5219d8ba6a404d3ee8418203b62a40c8eb18837354d50281a6a2bf5012e505c419482787b7a81e5935613ceea0c6d93e86f76282b6aa406fb3a1796c56b32e8a22afc3f7a3c9daa8f0e2846ff0d50abfc862a52f6cf0aaece6066c860376f3ed0203010001a3818a308187300c0603551d13040530030101ff30130603551d110101ff04093007820564756d6d79301206082b0601050507011e0101000403040100300e0603551d0f0101ff040403020184301d0603551d0e04160414e6e451ec8d19d9677b2d272a9d73b939fa2d915a301f0603551d23041830168014e6e451ec8d19d9677b2d272a9d73b939fa2d915a300d06092a864886f70d01010b0500038201010056d06047b7f48683e2347ca726997d9700b4f2cf1d8bc0ef17addac8445d38ffd7f8079055ead878b6a74c8384d0e30150c8990aa74f59cda6ebcb49465d8991ffa16a4c927a26e4639d1875a3ac396c7455c7eda40dbe66054a03d27f961c15e86bd5b06db6b26572977bcda93453b6b6a88ef96b31996a7bd17323525b33050d28deec9c33a3f9765a11fb99d0e222bd39a6db3a788474c9ca347377688f837d42f5841667bffcbe6b473e6f229f286a0829963e591a99aa7f67e9d20c36ccd2ac84cb85b7a8b3396a6cbe59a573ffff726f373197c230de5c92a52c5bc87e29c20bdf6e89609764a60c649022aabd768f3557661b083ae00e6afc8a5bf2ed":char*:"cert. version \: 3\nserial number \: 4D\:3E\:BB\:B8\:A8\:70\:F9\:C7\:8C\:55\:A8\:A7\:E1\:2F\:D5\:16\nissuer name \: CN=dummy\nsubject name \: CN=dummy\nissued on \: 2020-04-28 17\:42\:43\nexpires on \: 2020-06-27 17\:42\:43\nsigned using \: RSA with SHA-256\nRSA key size \: 2048 bits\nbasic constraints \: CA=true\nsubject alt name \:\n dNSName \: dummy\nkey usage \: Digital Signature, Key Cert Sign\n":int:0 + +X509 CRT ASN1 (Unsupported critical policy recognized by callback) +depends_on:1:6 +15:hex:"3081b130819ba0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a315301330110603551d20010101040730053003060101300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 3\nserial number \: DE\:AD\:BE\:EF\nissuer name \: ??=Test\nsubject name \: ??=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\ncertificate policies \: ???\n":int:0 + +X509 CRT ASN1 (Unsupported critical policy not recognized by callback) +depends_on:1:6 +15:hex:"3081b130819ba0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a315301330110603551d20010101040730053003060100300d06092a864886f70d01010b0500030200ff":char*:"":exp:73 + +X509 CRT ASN1 (Unsupported non critical policy recognized by callback) +depends_on:1:6 +15:hex:"3081b130819ba0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a315301330110603551d20010100040730053003060101300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 3\nserial number \: DE\:AD\:BE\:EF\nissuer name \: ??=Test\nsubject name \: ??=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\ncertificate policies \: ???\n":int:0 + +X509 CRT ASN1 (Unsupported non critical policy not recognized by callback) +depends_on:1:6 +15:hex:"3081b130819ba0030201028204deadbeef300d06092a864886f70d01010b0500300c310a30080600130454657374301c170c303930313031303030303030170c303931323331323335393539300c310a30080600130454657374302a300d06092a864886f70d010101050003190030160210ffffffffffffffffffffffffffffffff0202ffffa100a200a315301330110603551d20010100040730053003060100300d06092a864886f70d01010b0500030200ff":char*:"cert. version \: 3\nserial number \: DE\:AD\:BE\:EF\nissuer name \: ??=Test\nsubject name \: ??=Test\nissued on \: 2009-01-01 00\:00\:00\nexpires on \: 2009-12-31 23\:59\:59\nsigned using \: RSA with SHA-256\nRSA key size \: 128 bits\ncertificate policies \: ???\n":int:0 + +X509 CRL ASN1 (Incorrect first tag) +16:hex:"":char*:"":exp:28 + +X509 CRL ASN1 (Correct first tag, data length does not match) +16:hex:"300000":char*:"":exp:69 + +X509 CRL ASN1 (TBSCertList, tag missing) +16:hex:"3000":char*:"":exp:30 + +X509 CRL ASN1 (TBSCertList, version tag len missing) +16:hex:"3003300102":char*:"":exp:34 + +X509 CRL ASN1 (TBSCertList, version correct, alg missing) +16:hex:"30053003020100":char*:"":exp:40 + +X509 CRL ASN1 (TBSCertList, alg correct, incorrect version) +16:hex:"300b3009020102300406000500":char*:"":exp:37 + +X509 CRL ASN1 (TBSCertList, correct version, sig_oid1 unknown) +16:hex:"300b3009020100300406000500":char*:"":exp:80 + +X509 CRL ASN1 (TBSCertList, sig_oid1 id unknown) +16:hex:"30143012020100300d06092a864886f70d01010f0500":char*:"":exp:80 + +X509 CRL ASN1 (TBSCertList, sig_oid1 correct, issuer missing) +depends_on:1:6 +16:hex:"30143012020100300d06092a864886f70d01010e0500":char*:"":exp:30 + +X509 CRL ASN1 (TBSCertList, issuer set missing) +depends_on:1:6 +16:hex:"30163014020100300d06092a864886f70d01010e05003000":char*:"":exp:46 + +X509 CRL ASN1 (TBSCertList, correct issuer, thisUpdate missing) +depends_on:1:6 +16:hex:"30253023020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344":char*:"":exp:51 + +X509 CRL ASN1 (TBSCertList, correct thisUpdate, nextUpdate missing, entries length missing) +depends_on:1:6 +16:hex:"30343032020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c30393031303130303030303030":char*:"":exp:81 + +X509 CRL ASN1 (TBSCertList, entries present, invalid sig_alg) +depends_on:1:6 +16:hex:"304a3047020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c303930313031303030303030301430128202abcd170c30383132333132333539353900":char*:"":exp:41 + +X509 CRL ASN1 (TBSCertList, entries present, date in entry invalid) +depends_on:1:6 +16:hex:"304a3047020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c303930313031303030303030301430128202abcd190c30383132333132333539353900":char*:"":exp:52 + +X509 CRL ASN1 (TBSCertList, sig_alg present, sig_alg does not match) +depends_on:1:6 +16:hex:"30583047020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c303930313031303030303030301430128202abcd170c303831323331323335393539300d06092a864886f70d01010d0500":char*:"":exp:75 + +X509 CRL ASN1 (TBSCertList, sig present, len mismatch) +depends_on:1:6 +16:hex:"305d3047020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c303930313031303030303030301430128202abcd170c303831323331323335393539300d06092a864886f70d01010e05000302000100":char*:"":exp:69 + +X509 CRL ASN1 (TBSCertList, sig present) +depends_on:1:6 +16:hex:"305c3047020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c303930313031303030303030301430128202abcd170c303831323331323335393539300d06092a864886f70d01010e050003020001":char*:"CRL version \: 1\nissuer name \: CN=ABCD\nthis update \: 2009-01-01 00\:00\:00\nnext update \: 0000-00-00 00\:00\:00\nRevoked certificates\:\nserial number\: AB\:CD revocation date\: 2008-12-31 23\:59\:59\nsigned using \: RSA with SHA-224\n":int:0 + +X509 CRL ASN1 (TBSCertList, signatureValue missing) +depends_on:1:6 +16:hex:"30583047020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c303930313031303030303030301430128202abcd170c303831323331323335393539300d06092a864886f70d01010e0500":char*:"":exp:76 + +X509 CRL ASN1 (TBSCertList, signatureAlgorithm missing) +depends_on:1:6 +16:hex:"30493047020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c303930313031303030303030301430128202abcd170c303831323331323335393539":char*:"":exp:40 + +X509 CRL ASN1 (TBSCertList, single empty entry at end) +depends_on:1:6 +16:hex:"30373035020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c30393031303130303030303030023000":char*:"":exp:38 + +X509 CRL ASN1 (TBSCertList, good entry then empty entry at end) +depends_on:1:6 +16:hex:"304b3049020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c303930313031303030303030301630128202abcd170c3038313233313233353935393000":char*:"":exp:38 + +X509 CRL ASN1 (TBSCertList, missing time in entry) +depends_on:1:6 +16:hex:"304e3039020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c303930313031303030303030300630048202abcd300d06092a864886f70d01010e050003020001":char*:"":exp:51 + +X509 CRL ASN1 (TBSCertList, missing time in entry at end) +depends_on:1:6 +16:hex:"303b3039020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c303930313031303030303030300630048202abcd":char*:"":exp:51 + +X509 CRL ASN1 (TBSCertList, invalid tag for time in entry) +depends_on:1:6 +16:hex:"305c3047020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c303930313031303030303030301430128202abcd190c303831323331323335393539300d06092a864886f70d01010e050003020001":char*:"":exp:52 + +X509 CRL ASN1 (TBSCertList, invalid tag for serial) +depends_on:1:6 +16:hex:"305c3047020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c303930313031303030303030301430128402abcd170c303831323331323335393539300d06092a864886f70d01010e050003020001":char*:"":exp:32 + +X509 CRL ASN1 (TBSCertList, no entries) +depends_on:1:6 +16:hex:"30463031020100300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c303930313031303030303030300d06092a864886f70d01010e050003020001":char*:"CRL version \: 1\nissuer name \: CN=ABCD\nthis update \: 2009-01-01 00\:00\:00\nnext update \: 0000-00-00 00\:00\:00\nRevoked certificates\:\nsigned using \: RSA with SHA-224\n":int:0 + +X509 CRL ASN1 (invalid version 2) +16:hex:"30463031020102300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c303930313031303030303030300d06092a864886f70d01010e050003020001":char*:"":exp:37 + +X509 CRL ASN1 (invalid version overflow) +16:hex:"3049303102047fffffff300d06092a864886f70d01010e0500300f310d300b0603550403130441424344170c303930313031303030303030300d06092a864886f70d01010e050003020001":char*:"":exp:37 + +X509 CRL ASN1 (extension seq too long, crl-idp.pem byte 121) +depends_on:0:1:6 +16:hex:"308201b330819c020101300d06092a864886f70d01010b0500303b310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c3119301706035504031310506f6c617253534c2054657374204341170d3138303331343037333134385a170d3238303331343037333134385aa02d302b30300603551d1c0101ff041f301da01ba0198617687474703a2f2f706b692e6578616d706c652e636f6d2f300d06092a864886f70d01010b05000382010100b3fbe9d586eaf4b8ff60cf8edae06a85135db78f78198498719725b5b403c0b803c2c150f52faae7306d6a7871885dc2e9dc83a164bac7263776474ef642b660040b35a1410ac291ac8f6f18ab85e7fd6e22bd1af1c41ca95cf2448f6e2b42a018493dfc03c6b6aa1b9e3fe7b76af2182fb2121db4166bf0167d6f379c5a58adee5082423434d97be2909f5e7488053f996646db10dd49782626da53ad8eada01813c031b2bacdb0203bc017aac1735951a11d013ee4d1d5f7143ccbebf2371e66a1bec6e1febe69148f50784eef8adbb66664c96196d7e0c0bcdc807f447b54e058f37642a3337995bfbcd332208bd6016936705c82263eabd7affdba92fae3":char*:"":exp:70 + +X509 CRL ASN1 (extension oid too long, crl-idp.pem byte 123) +depends_on:0:1:6 +16:hex:"308201b330819c020101300d06092a864886f70d01010b0500303b310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c3119301706035504031310506f6c617253534c2054657374204341170d3138303331343037333134385a170d3238303331343037333134385aa02d302b30290628551d1c0101ff041f301da01ba0198617687474703a2f2f706b692e6578616d706c652e636f6d2f300d06092a864886f70d01010b05000382010100b3fbe9d586eaf4b8ff60cf8edae06a85135db78f78198498719725b5b403c0b803c2c150f52faae7306d6a7871885dc2e9dc83a164bac7263776474ef642b660040b35a1410ac291ac8f6f18ab85e7fd6e22bd1af1c41ca95cf2448f6e2b42a018493dfc03c6b6aa1b9e3fe7b76af2182fb2121db4166bf0167d6f379c5a58adee5082423434d97be2909f5e7488053f996646db10dd49782626da53ad8eada01813c031b2bacdb0203bc017aac1735951a11d013ee4d1d5f7143ccbebf2371e66a1bec6e1febe69148f50784eef8adbb66664c96196d7e0c0bcdc807f447b54e058f37642a3337995bfbcd332208bd6016936705c82263eabd7affdba92fae3":char*:"":exp:70 + +X509 CRL ASN1 (extension critical invalid length, crl-idp.pem byte 128) +depends_on:0:1:6 +16:hex:"308201b330819c020101300d06092a864886f70d01010b0500303b310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c3119301706035504031310506f6c617253534c2054657374204341170d3138303331343037333134385a170d3238303331343037333134385aa02d302b30290603551d1c0102ff041f301da01ba0198617687474703a2f2f706b692e6578616d706c652e636f6d2f300d06092a864886f70d01010b05000382010100b3fbe9d586eaf4b8ff60cf8edae06a85135db78f78198498719725b5b403c0b803c2c150f52faae7306d6a7871885dc2e9dc83a164bac7263776474ef642b660040b35a1410ac291ac8f6f18ab85e7fd6e22bd1af1c41ca95cf2448f6e2b42a018493dfc03c6b6aa1b9e3fe7b76af2182fb2121db4166bf0167d6f379c5a58adee5082423434d97be2909f5e7488053f996646db10dd49782626da53ad8eada01813c031b2bacdb0203bc017aac1735951a11d013ee4d1d5f7143ccbebf2371e66a1bec6e1febe69148f50784eef8adbb66664c96196d7e0c0bcdc807f447b54e058f37642a3337995bfbcd332208bd6016936705c82263eabd7affdba92fae3":char*:"":exp:71 + +X509 CRL ASN1 (extension data too long, crl-idp.pem byte 131) +depends_on:0:1:6 +16:hex:"308201b330819c020101300d06092a864886f70d01010b0500303b310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c3119301706035504031310506f6c617253534c2054657374204341170d3138303331343037333134385a170d3238303331343037333134385aa02d302b30290603551d1c0101ff0420301da01ba0198617687474703a2f2f706b692e6578616d706c652e636f6d2f300d06092a864886f70d01010b05000382010100b3fbe9d586eaf4b8ff60cf8edae06a85135db78f78198498719725b5b403c0b803c2c150f52faae7306d6a7871885dc2e9dc83a164bac7263776474ef642b660040b35a1410ac291ac8f6f18ab85e7fd6e22bd1af1c41ca95cf2448f6e2b42a018493dfc03c6b6aa1b9e3fe7b76af2182fb2121db4166bf0167d6f379c5a58adee5082423434d97be2909f5e7488053f996646db10dd49782626da53ad8eada01813c031b2bacdb0203bc017aac1735951a11d013ee4d1d5f7143ccbebf2371e66a1bec6e1febe69148f50784eef8adbb66664c96196d7e0c0bcdc807f447b54e058f37642a3337995bfbcd332208bd6016936705c82263eabd7affdba92fae3":char*:"":exp:70 + +X509 CRL ASN1 (extension data too short, crl-idp.pem byte 131) +depends_on:0:1:6 +16:hex:"308201b330819c020101300d06092a864886f70d01010b0500303b310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c3119301706035504031310506f6c617253534c2054657374204341170d3138303331343037333134385a170d3238303331343037333134385aa02d302b30290603551d1c0101ff041e301da01ba0198617687474703a2f2f706b692e6578616d706c652e636f6d2f300d06092a864886f70d01010b05000382010100b3fbe9d586eaf4b8ff60cf8edae06a85135db78f78198498719725b5b403c0b803c2c150f52faae7306d6a7871885dc2e9dc83a164bac7263776474ef642b660040b35a1410ac291ac8f6f18ab85e7fd6e22bd1af1c41ca95cf2448f6e2b42a018493dfc03c6b6aa1b9e3fe7b76af2182fb2121db4166bf0167d6f379c5a58adee5082423434d97be2909f5e7488053f996646db10dd49782626da53ad8eada01813c031b2bacdb0203bc017aac1735951a11d013ee4d1d5f7143ccbebf2371e66a1bec6e1febe69148f50784eef8adbb66664c96196d7e0c0bcdc807f447b54e058f37642a3337995bfbcd332208bd6016936705c82263eabd7affdba92fae3":char*:"":exp:72 + +X509 CRL ASN1 (extension not critical explicit, crl-idp.pem byte 129) +depends_on:0:1:6 +16:hex:"308201b330819c020101300d06092a864886f70d01010b0500303b310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c3119301706035504031310506f6c617253534c2054657374204341170d3138303331343037333134385a170d3238303331343037333134385aa02d302b30290603551d1c010100041f301da01ba0198617687474703a2f2f706b692e6578616d706c652e636f6d2f300d06092a864886f70d01010b05000382010100b3fbe9d586eaf4b8ff60cf8edae06a85135db78f78198498719725b5b403c0b803c2c150f52faae7306d6a7871885dc2e9dc83a164bac7263776474ef642b660040b35a1410ac291ac8f6f18ab85e7fd6e22bd1af1c41ca95cf2448f6e2b42a018493dfc03c6b6aa1b9e3fe7b76af2182fb2121db4166bf0167d6f379c5a58adee5082423434d97be2909f5e7488053f996646db10dd49782626da53ad8eada01813c031b2bacdb0203bc017aac1735951a11d013ee4d1d5f7143ccbebf2371e66a1bec6e1febe69148f50784eef8adbb66664c96196d7e0c0bcdc807f447b54e058f37642a3337995bfbcd332208bd6016936705c82263eabd7affdba92fae3":char*:"CRL version \: 2\nissuer name \: C=NL, O=PolarSSL, CN=PolarSSL Test CA\nthis update \: 2018-03-14 07\:31\:48\nnext update \: 2028-03-14 07\:31\:48\nRevoked certificates\:\nsigned using \: RSA with SHA-256\n":int:0 + +X509 CRT parse path #2 (one cert) +depends_on:2:1 +18:char*:"zip:third_party/mbedtls/test/data/dir1":int:0:int:1 + +X509 CRT parse path #3 (two certs) +depends_on:2:1:6:10:12 +18:char*:"zip:third_party/mbedtls/test/data/dir2":int:0:int:2 + +X509 CRT parse path #4 (two certs, one non-cert) +depends_on:2:1:6:10:12 +18:char*:"zip:third_party/mbedtls/test/data/dir3":int:1:int:2 + +X509 CRT verify long chain (max intermediate CA, trusted) +depends_on:6:10:11 +19:char*:"zip:third_party/mbedtls/test/data/dir-maxpath/00.crt":char*:"zip:third_party/mbedtls/test/data/dir-maxpath":exp:82:int:0:int:0 + +X509 CRT verify long chain (max intermediate CA, untrusted) +depends_on:6:10:11:12 +19:char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":char*:"zip:third_party/mbedtls/test/data/dir-maxpath":exp:83:exp:5:exp:16 + +X509 CRT verify long chain (max intermediate CA + 1) +depends_on:6:10:11 +19:char*:"zip:third_party/mbedtls/test/data/dir-maxpath/00.crt":char*:"zip:third_party/mbedtls/test/data/dir-maxpath":exp:84:exp:27:exp:85 + +X509 CRT verify chain #1 (zero pathlen intermediate) +depends_on:6:1 +20:char*:"zip:third_party/mbedtls/test/data/dir4/cert14.crt zip:third_party/mbedtls/test/data/dir4/cert13.crt zip:third_party/mbedtls/test/data/dir4/cert12.crt":char*:"zip:third_party/mbedtls/test/data/dir4/cert11.crt":exp:16:exp:5:char*:"":int:0 + +X509 CRT verify chain #2 (zero pathlen root) +depends_on:6:1 +20:char*:"zip:third_party/mbedtls/test/data/dir4/cert23.crt zip:third_party/mbedtls/test/data/dir4/cert22.crt":char*:"zip:third_party/mbedtls/test/data/dir4/cert21.crt":exp:16:exp:5:char*:"":int:0 + +X509 CRT verify chain #3 (nonzero pathlen root) +depends_on:6:1 +20:char*:"zip:third_party/mbedtls/test/data/dir4/cert34.crt zip:third_party/mbedtls/test/data/dir4/cert33.crt zip:third_party/mbedtls/test/data/dir4/cert32.crt":char*:"zip:third_party/mbedtls/test/data/dir4/cert31.crt":exp:16:exp:5:char*:"":int:0 + +X509 CRT verify chain #4 (nonzero pathlen intermediate) +depends_on:6:1 +20:char*:"zip:third_party/mbedtls/test/data/dir4/cert45.crt zip:third_party/mbedtls/test/data/dir4/cert44.crt zip:third_party/mbedtls/test/data/dir4/cert43.crt zip:third_party/mbedtls/test/data/dir4/cert42.crt":char*:"zip:third_party/mbedtls/test/data/dir4/cert41.crt":exp:16:exp:5:char*:"":int:0 + +X509 CRT verify chain #5 (nonzero maxpathlen intermediate) +depends_on:6:1:16 +20:char*:"zip:third_party/mbedtls/test/data/dir4/cert54.crt zip:third_party/mbedtls/test/data/dir4/cert53.crt zip:third_party/mbedtls/test/data/dir4/cert52.crt":char*:"zip:third_party/mbedtls/test/data/dir4/cert51.crt":int:0:int:0:char*:"":int:0 + +X509 CRT verify chain #6 (nonzero maxpathlen root) +depends_on:6:1:16 +20:char*:"zip:third_party/mbedtls/test/data/dir4/cert63.crt zip:third_party/mbedtls/test/data/dir4/cert62.crt":char*:"zip:third_party/mbedtls/test/data/dir4/cert61.crt":int:0:int:0:char*:"":int:0 + +X509 CRT verify chain #7 (maxpathlen root, self signed in path) +depends_on:6:1:16 +20:char*:"zip:third_party/mbedtls/test/data/dir4/cert74.crt zip:third_party/mbedtls/test/data/dir4/cert73.crt zip:third_party/mbedtls/test/data/dir4/cert72.crt":char*:"zip:third_party/mbedtls/test/data/dir4/cert71.crt":int:0:int:0:char*:"":int:0 + +X509 CRT verify chain #8 (self signed maxpathlen root) +depends_on:6:1:16 +20:char*:"zip:third_party/mbedtls/test/data/dir4/cert61.crt zip:third_party/mbedtls/test/data/dir4/cert63.crt zip:third_party/mbedtls/test/data/dir4/cert62.crt":char*:"zip:third_party/mbedtls/test/data/dir4/cert61.crt":int:0:int:0:char*:"":int:0 + +X509 CRT verify chain #9 (zero pathlen first intermediate, valid) +depends_on:6:10:11 +20:char*:"zip:third_party/mbedtls/test/data/dir4/cert83.crt zip:third_party/mbedtls/test/data/dir4/cert82.crt":char*:"zip:third_party/mbedtls/test/data/dir4/cert81.crt":int:0:int:0:char*:"":int:0 + +X509 CRT verify chain #10 (zero pathlen root, valid) +depends_on:6:10:11 +20:char*:"zip:third_party/mbedtls/test/data/dir4/cert92.crt":char*:"zip:third_party/mbedtls/test/data/dir4/cert91.crt":int:0:int:0:char*:"":int:0 + +X509 CRT verify chain #11 (valid chain, missing profile) +depends_on:6:10:11 +20:char*:"zip:third_party/mbedtls/test/data/dir4/cert92.crt":char*:"zip:third_party/mbedtls/test/data/dir4/cert91.crt":exp:85:exp:86:char*:"nonesuch":int:0 + +X509 CRT verify chain #12 (suiteb profile, RSA root) +depends_on:6:1:16:10:13:2 +20:char*:"zip:third_party/mbedtls/test/data/server3.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":exp:87:exp:5:char*:"suiteb":int:0 + +X509 CRT verify chain #13 (RSA only profile, EC root) +depends_on:6:1:10:12 +20:char*:"zip:third_party/mbedtls/test/data/server4.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":exp:88:exp:5:char*:"rsa3072":int:0 + +X509 CRT verify chain #13 (RSA only profile, EC trusted EE) +depends_on:6:1:10:11 +20:char*:"zip:third_party/mbedtls/test/data/server5-selfsigned.crt":char*:"zip:third_party/mbedtls/test/data/server5-selfsigned.crt":exp:88:exp:5:char*:"rsa3072":int:0 + +X509 CRT verify chain #14 (RSA-3072 profile, root key too small) +depends_on:6:1:16:2 +20:char*:"zip:third_party/mbedtls/test/data/server1.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":exp:89:exp:5:char*:"rsa3072":int:0 + +X509 CRT verify chain #15 (suiteb profile, rsa intermediate) +depends_on:6:1:16:10:12:11 +20:char*:"zip:third_party/mbedtls/test/data/server7.crt zip:third_party/mbedtls/test/data/test-int-ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":exp:25:exp:5:char*:"suiteb":int:0 + +X509 CRT verify chain #16 (RSA-only profile, EC intermediate) +depends_on:6:1:16:10:12:11:2 +20:char*:"zip:third_party/mbedtls/test/data/server8.crt zip:third_party/mbedtls/test/data/test-int-ca2.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":exp:88:exp:5:char*:"rsa3072":int:0 + +X509 CRT verify chain #17 (SHA-512 profile) +depends_on:6:1:16:10:11:12 +20:char*:"zip:third_party/mbedtls/test/data/server7.crt zip:third_party/mbedtls/test/data/test-int-ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":exp:17:exp:5:char*:"sha512":int:0 + +X509 CRT verify chain #18 (len=1, vrfy fatal on depth 1) +depends_on:6:10:11:12:7 +20:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":exp:85:exp:90:char*:"":int:2 + +X509 CRT verify chain #19 (len=0, vrfy fatal on depth 0) +depends_on:6:10:11:12:7 +20:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":exp:85:exp:85:char*:"":int:1 + +X509 CRT verify chain #20 (len=1, vrfy fatal on depth 0) +depends_on:6:10:11:12:7:2:1 +20:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":exp:85:exp:85:char*:"":int:1 + +X509 CRT verify chain #21 (len=3, vrfy fatal on depth 3) +depends_on:6:10:11:1:16:2:12 +20:char*:"zip:third_party/mbedtls/test/data/server10_int3_int-ca2_ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":exp:85:exp:91:char*:"":int:8 + +X509 CRT verify chain #22 (len=3, vrfy fatal on depth 2) +depends_on:6:10:11:1:2:12 +20:char*:"zip:third_party/mbedtls/test/data/server10_int3_int-ca2_ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":exp:85:exp:92:char*:"":int:4 + +X509 CRT verify chain #23 (len=3, vrfy fatal on depth 1) +depends_on:6:10:11:1:2:12 +20:char*:"zip:third_party/mbedtls/test/data/server10_int3_int-ca2_ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":exp:85:exp:90:char*:"":int:2 + +X509 CRT verify chain #24 (len=3, vrfy fatal on depth 0) +depends_on:6:10:11:1:2:12 +20:char*:"zip:third_party/mbedtls/test/data/server10_int3_int-ca2_ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca.crt":exp:85:exp:85:char*:"":int:1 + +X509 CRT verify chain #25 (len=3, vrfy fatal on depth 3, untrusted) +depends_on:6:10:11:1:2:12 +20:char*:"zip:third_party/mbedtls/test/data/server10_int3_int-ca2_ca.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":exp:85:exp:91:char*:"":int:8 + +X509 OID description #1 +21:hex:"2b06010505070301":char*:"TLS Web Server Authentication" + +X509 OID description #2 +21:hex:"2b0601050507030f":char*:"notfound" + +X509 OID description #3 +21:hex:"2b0601050507030100":char*:"notfound" + +X509 OID numstring #1 (wide buffer) +22:hex:"2b06010505070301":char*:"1.3.6.1.5.5.7.3.1":int:20:int:17 + +X509 OID numstring #2 (buffer just fits) +22:hex:"2b06010505070301":char*:"1.3.6.1.5.5.7.3.1":int:18:int:17 + +X509 OID numstring #3 (buffer too small) +22:hex:"2b06010505070301":char*:"1.3.6.1.5.5.7.3.1":int:17:exp:93 + +X509 OID numstring #4 (larger number) +22:hex:"2a864886f70d":char*:"1.2.840.113549":int:15:int:14 + +X509 OID numstring #5 (arithmetic overflow) +22:hex:"2a8648f9f8f7f6f5f4f3f2f1f001":char*:"":int:100:exp:93 + +X509 CRT keyUsage #1 (no extension, expected KU) +depends_on:1:2 +23:char*:"zip:third_party/mbedtls/test/data/server1.crt":exp:94:int:0 + +X509 CRT keyUsage #2 (no extension, surprising KU) +depends_on:1:2 +23:char*:"zip:third_party/mbedtls/test/data/server1.crt":exp:95:int:0 + +X509 CRT keyUsage #3 (extension present, no KU) +depends_on:1:2 +23:char*:"zip:third_party/mbedtls/test/data/server1.key_usage.crt":int:0:int:0 + +X509 CRT keyUsage #4 (extension present, single KU present) +depends_on:1:2 +23:char*:"zip:third_party/mbedtls/test/data/server1.key_usage.crt":exp:96:int:0 + +X509 CRT keyUsage #5 (extension present, single KU absent) +depends_on:1:2 +23:char*:"zip:third_party/mbedtls/test/data/server1.key_usage.crt":exp:95:exp:86 + +X509 CRT keyUsage #6 (extension present, combined KU present) +depends_on:1:2 +23:char*:"zip:third_party/mbedtls/test/data/server1.key_usage.crt":exp:94:int:0 + +X509 CRT keyUsage #7 (extension present, combined KU both absent) +depends_on:1:2 +23:char*:"zip:third_party/mbedtls/test/data/server1.key_usage.crt":exp:97:exp:86 + +X509 CRT keyUsage #8 (extension present, combined KU one absent) +depends_on:1:2 +23:char*:"zip:third_party/mbedtls/test/data/server1.key_usage.crt":exp:98:exp:86 + +X509 CRT keyUsage #9 (extension present, decOnly allowed absent) +depends_on:1:2 +23:char*:"zip:third_party/mbedtls/test/data/server1.key_usage.crt":exp:99:int:0 + +X509 CRT keyUsage #10 (extension present, decOnly non-allowed present) +depends_on:1:2 +23:char*:"zip:third_party/mbedtls/test/data/keyUsage.decipherOnly.crt":exp:94:exp:86 + +X509 CRT keyUsage #11 (extension present, decOnly allowed present) +depends_on:1:2 +23:char*:"zip:third_party/mbedtls/test/data/keyUsage.decipherOnly.crt":exp:99:int:0 + +X509 CRT extendedKeyUsage #1 (no extension, serverAuth) +depends_on:10:11:6 +24:char*:"zip:third_party/mbedtls/test/data/server5.crt":hex:"2b06010505070301":int:0 + +X509 CRT extendedKeyUsage #2 (single value, present) +depends_on:10:11:6 +24:char*:"zip:third_party/mbedtls/test/data/server5.eku-srv.crt":hex:"2b06010505070301":int:0 + +X509 CRT extendedKeyUsage #3 (single value, absent) +depends_on:10:11:6 +24:char*:"zip:third_party/mbedtls/test/data/server5.eku-cli.crt":hex:"2b06010505070301":exp:86 + +X509 CRT extendedKeyUsage #4 (two values, first) +depends_on:10:11:6 +24:char*:"zip:third_party/mbedtls/test/data/server5.eku-srv_cli.crt":hex:"2b06010505070301":int:0 + +X509 CRT extendedKeyUsage #5 (two values, second) +depends_on:10:11:6 +24:char*:"zip:third_party/mbedtls/test/data/server5.eku-srv_cli.crt":hex:"2b06010505070302":int:0 + +X509 CRT extendedKeyUsage #6 (two values, other) +depends_on:10:11:6 +24:char*:"zip:third_party/mbedtls/test/data/server5.eku-srv_cli.crt":hex:"2b06010505070303":exp:86 + +X509 CRT extendedKeyUsage #7 (any, random) +depends_on:10:11:6 +24:char*:"zip:third_party/mbedtls/test/data/server5.eku-cs_any.crt":hex:"2b060105050703ff":int:0 + +X509 RSASSA-PSS parameters ASN1 (good, all defaults) +26:hex:"":exp:100:exp:101:exp:101:int:20:int:0 + +X509 RSASSA-PSS parameters ASN1 (wrong initial tag) +26:hex:"":exp:102:exp:101:exp:101:int:20:exp:41 + +X509 RSASSA-PSS parameters ASN1 (unknown tag in top-level sequence) +26:hex:"a400":exp:100:exp:101:exp:101:int:20:exp:44 + +X509 RSASSA-PSS parameters ASN1 (good, HashAlg SHA256) +depends_on:1:6 +26:hex:"a00d300b0609608648016503040201":exp:100:exp:103:exp:101:int:20:int:0 + +X509 RSASSA-PSS parameters ASN1 (good, explicit HashAlg = default) +depends_on:1:2 +26:hex:"a009300706052b0e03021a":exp:100:exp:101:exp:101:int:20:int:0 + +X509 RSASSA-PSS parameters ASN1 (HashAlg wrong len #1) +26:hex:"a00a300706052b0e03021a":exp:100:exp:101:exp:101:int:20:exp:40 + +X509 RSASSA-PSS parameters ASN1 (HashAlg wrong len #2) +depends_on:1:2 +26:hex:"a00a300706052b0e03021a00":exp:100:exp:101:exp:101:int:20:exp:44 + +X509 RSASSA-PSS parameters ASN1 (HashAlg with parameters) +26:hex:"a00f300d06096086480165030402013000":exp:100:exp:103:exp:101:int:20:exp:104 + +X509 RSASSA-PSS parameters ASN1 (HashAlg unknown OID) +26:hex:"a00d300b06096086480165030402ff":exp:100:exp:103:exp:101:int:20:exp:105 + +X509 RSASSA-PSS parameters ASN1 (good, MGAlg = MGF1-SHA256) +depends_on:1:6 +26:hex:"a11a301806092a864886f70d010108300b0609608648016503040201":exp:100:exp:101:exp:103:int:20:int:0 + +X509 RSASSA-PSS parameters ASN1 (good, explicit MGAlg = default) +depends_on:1:2 +26:hex:"a116301406092a864886f70d010108300706052b0e03021a":exp:100:exp:101:exp:101:int:20:int:0 + +X509 RSASSA-PSS parameters ASN1 (MGAlg wrong len #1) +26:hex:"a11b301806092a864886f70d010108300b0609608648016503040201":exp:100:exp:101:exp:103:int:20:exp:40 + +X509 RSASSA-PSS parameters ASN1 (MGAlg wrong len #2) +depends_on:1:6 +26:hex:"a11b301806092a864886f70d010108300b060960864801650304020100":exp:100:exp:101:exp:103:int:20:exp:44 + +X509 RSASSA-PSS parameters ASN1 (MGAlg AlgId wrong len #1) +26:hex:"a11a301906092a864886f70d010108300b0609608648016503040201":exp:100:exp:101:exp:103:int:20:exp:40 + +X509 RSASSA-PSS parameters ASN1 (MGAlg OID != MGF1) +26:hex:"a11a301806092a864886f70d010109300b0609608648016503040201":exp:100:exp:101:exp:103:int:20:exp:106 + +X509 RSASSA-PSS parameters ASN1 (MGAlg.params wrong tag) +26:hex:"a11a301806092a864886f70d010108310b0609608648016503040201":exp:100:exp:101:exp:103:int:20:exp:41 + +X509 RSASSA-PSS parameters ASN1 (MGAlg.params wrong len #1a) +26:hex:"a10f300d06092a864886f70d0101083000":exp:100:exp:101:exp:103:int:20:exp:40 + +X509 RSASSA-PSS parameters ASN1 (MGAlg.params wrong len #1b) +26:hex:"a11b301906092a864886f70d010108300c0609608648016503040201":exp:100:exp:101:exp:103:int:20:exp:40 + +X509 RSASSA-PSS parameters ASN1 (MGAlg.params.alg not an OID) +26:hex:"a11a301806092a864886f70d010108300b0709608648016503040201":exp:100:exp:101:exp:103:int:20:exp:41 + +X509 RSASSA-PSS parameters ASN1 (MGAlg.params.alg unknown OID) +26:hex:"a11a301806092a864886f70d010108300b06096086480165030402ff":exp:100:exp:101:exp:103:int:20:exp:105 + +X509 RSASSA-PSS parameters ASN1 (MGAlg.params.params NULL) +depends_on:1:6 +26:hex:"a11c301a06092a864886f70d010108300d06096086480165030402010500":exp:100:exp:101:exp:103:int:20:int:0 + +X509 RSASSA-PSS parameters ASN1 (MGAlg.params.params wrong tag) +depends_on:1:6 +26:hex:"a11c301a06092a864886f70d010108300d06096086480165030402013000":exp:100:exp:101:exp:103:int:20:exp:41 + +X509 RSASSA-PSS parameters ASN1 (MGAlg.params wrong len #1c) +26:hex:"a11d301b06092a864886f70d010108300e06096086480165030402010500":exp:100:exp:101:exp:103:int:20:exp:40 + +X509 RSASSA-PSS parameters ASN1 (MGAlg.params wrong len #2) +depends_on:1:6 +26:hex:"a11d301b06092a864886f70d010108300e0609608648016503040201050000":exp:100:exp:101:exp:103:int:20:exp:44 + +X509 RSASSA-PSS parameters ASN1 (good, saltLen = 94) +26:hex:"a20302015e":exp:100:exp:101:exp:101:int:94:int:0 + +X509 RSASSA-PSS parameters ASN1 (good, explicit saltLen = default) +26:hex:"a203020114":exp:100:exp:101:exp:101:int:20:int:0 + +X509 RSASSA-PSS parameters ASN1 (saltLen wrong len #1) +26:hex:"a20402015e":exp:100:exp:101:exp:101:int:94:exp:40 + +X509 RSASSA-PSS parameters ASN1 (saltLen wrong len #2) +26:hex:"a20402015e00":exp:100:exp:101:exp:101:int:94:exp:44 + +X509 RSASSA-PSS parameters ASN1 (saltLen not an int) +26:hex:"a2023000":exp:100:exp:101:exp:101:int:94:exp:41 + +X509 RSASSA-PSS parameters ASN1 (good, explicit trailerField = default) +26:hex:"a303020101":exp:100:exp:101:exp:101:int:20:int:0 + +X509 RSASSA-PSS parameters ASN1 (trailerField wrong len #1) +26:hex:"a304020101":exp:100:exp:101:exp:101:int:20:exp:40 + +X509 RSASSA-PSS parameters ASN1 (trailerField wrong len #2) +26:hex:"a30402010100":exp:100:exp:101:exp:101:int:20:exp:44 + +X509 RSASSA-PSS parameters ASN1 (trailerField not an int) +26:hex:"a3023000":exp:100:exp:101:exp:101:int:20:exp:41 + +X509 RSASSA-PSS parameters ASN1 (trailerField not 1) +26:hex:"a303020102":exp:100:exp:101:exp:101:int:20:exp:45 + +X509 CSR ASN.1 (OK) +depends_on:10:11:2 +17:hex:"308201183081bf0201003034310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c31123010060355040313096c6f63616c686f73743059301306072a8648ce3d020106082a8648ce3d0301070342000437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edffa029302706092a864886f70d01090e311a301830090603551d1304023000300b0603551d0f0404030205e0300906072a8648ce3d04010349003046022100b49fd8c8f77abfa871908dfbe684a08a793d0f490a43d86fcf2086e4f24bb0c2022100f829d5ccd3742369299e6294394717c4b723a0f68b44e831b6e6c3bcabf97243":char*:"CSR version \: 1\nsubject name \: C=NL, O=PolarSSL, CN=localhost\nsigned using \: ECDSA with SHA1\nEC key size \: 256 bits\n":int:0 + +X509 CSR ASN.1 (bad first tag) +17:hex:"3100":char*:"":exp:28 + +X509 CSR ASN.1 (bad sequence: overlong) +17:hex:"3001":char*:"":exp:28 + +X509 CSR ASN.1 (total length mistmatch) +17:hex:"30010000":char*:"":exp:69 + +X509 CSR ASN.1 (bad CRI: not a sequence) +17:hex:"30023100":char*:"":exp:29 + +X509 CSR ASN.1 (bad CRI: overlong) +17:hex:"30023001":char*:"":exp:30 + +X509 CSR ASN.1 (bad CRI.Version: overlong) +17:hex:"30053002020100":char*:"":exp:34 + +X509 CSR ASN.1 (bad CRI.Version: not v1) +17:hex:"30053003020101":char*:"":exp:37 + +X509 CSR ASN.1 (bad CRI.Name: not a sequence) +17:hex:"300730050201003100":char*:"":exp:29 + +X509 CSR ASN.1 (bad CRI.Name: overlong) +17:hex:"30083005020100300100":char*:"":exp:30 + +X509 CSR ASN.1 (bad CRI.Name payload: not a set) +17:hex:"3009300702010030023000":char*:"":exp:47 + +X509 CSR ASN.1 (bad CRI.Name payload: overlong) +17:hex:"300a30080201003002310100":char*:"":exp:46 + +X509 CSR ASN.1 (bad SubjectPublicKeyInfo: missing) +17:hex:"30143012020100300d310b3009060355040613024e4c":char*:"":exp:56 + +X509 CSR ASN.1 (bad SubjectPublicKeyInfo: not a sequence) +17:hex:"30163014020100300d310b3009060355040613024e4c3100":char*:"":exp:57 + +X509 CSR ASN.1 (bad SubjectPublicKeyInfo: overlong) +17:hex:"30173014020100300d310b3009060355040613024e4c300100":char*:"":exp:56 + +X509 CSR ASN.1 (bad attributes: missing) +depends_on:10:11 +17:hex:"3081973081940201003034310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c31123010060355040313096c6f63616c686f73743059301306072a8648ce3d020106082a8648ce3d0301070342000437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff":char*:"":exp:30 + +X509 CSR ASN.1 (bad attributes: bad tag) +depends_on:10:11 +17:hex:"3081993081960201003034310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c31123010060355040313096c6f63616c686f73743059301306072a8648ce3d020106082a8648ce3d0301070342000437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edff0500":char*:"":exp:29 + +X509 CSR ASN.1 (bad attributes: overlong) +depends_on:10:11 +17:hex:"30819a3081960201003034310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c31123010060355040313096c6f63616c686f73743059301306072a8648ce3d020106082a8648ce3d0301070342000437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edffa00100":char*:"":exp:30 + +X509 CSR ASN.1 (bad sigAlg: missing) +depends_on:10:11 +17:hex:"3081c23081bf0201003034310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c31123010060355040313096c6f63616c686f73743059301306072a8648ce3d020106082a8648ce3d0301070342000437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edffa029302706092a864886f70d01090e311a301830090603551d1304023000300b0603551d0f0404030205e0":char*:"":exp:40 + +X509 CSR ASN.1 (bad sigAlg: not a sequence) +depends_on:10:11 +17:hex:"3081c43081bf0201003034310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c31123010060355040313096c6f63616c686f73743059301306072a8648ce3d020106082a8648ce3d0301070342000437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edffa029302706092a864886f70d01090e311a301830090603551d1304023000300b0603551d0f0404030205e03100":char*:"":exp:41 + +X509 CSR ASN.1 (bad sigAlg: overlong) +depends_on:10:11 +17:hex:"3081c43081bf0201003034310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c31123010060355040313096c6f63616c686f73743059301306072a8648ce3d020106082a8648ce3d0301070342000437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edffa029302706092a864886f70d01090e311a301830090603551d1304023000300b0603551d0f0404030205e03001":char*:"":exp:40 + +X509 CSR ASN.1 (bad sigAlg: unknown) +depends_on:10:11 +17:hex:"3081cd3081bf0201003034310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c31123010060355040313096c6f63616c686f73743059301306072a8648ce3d020106082a8648ce3d0301070342000437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edffa029302706092a864886f70d01090e311a301830090603551d1304023000300b0603551d0f0404030205e0300906072a8648ce3d04ff":char*:"":exp:80 + +X509 CSR ASN.1 (bad sig: missing) +depends_on:10:11:2 +17:hex:"3081cd3081bf0201003034310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c31123010060355040313096c6f63616c686f73743059301306072a8648ce3d020106082a8648ce3d0301070342000437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edffa029302706092a864886f70d01090e311a301830090603551d1304023000300b0603551d0f0404030205e0300906072a8648ce3d0401":char*:"":exp:76 + +X509 CSR ASN.1 (bad sig: not a bit string) +depends_on:10:11:2 +17:hex:"3081cf3081bf0201003034310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c31123010060355040313096c6f63616c686f73743059301306072a8648ce3d020106082a8648ce3d0301070342000437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edffa029302706092a864886f70d01090e311a301830090603551d1304023000300b0603551d0f0404030205e0300906072a8648ce3d04010400":char*:"":exp:77 + +X509 CSR ASN.1 (bad sig: overlong) +depends_on:10:11:2 +17:hex:"3081cf3081bf0201003034310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c31123010060355040313096c6f63616c686f73743059301306072a8648ce3d020106082a8648ce3d0301070342000437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edffa029302706092a864886f70d01090e311a301830090603551d1304023000300b0603551d0f0404030205e0300906072a8648ce3d04010301":char*:"":exp:76 + +X509 CSR ASN.1 (extra data after signature) +depends_on:10:11:2 +17:hex:"308201193081bf0201003034310b3009060355040613024e4c3111300f060355040a1308506f6c617253534c31123010060355040313096c6f63616c686f73743059301306072a8648ce3d020106082a8648ce3d0301070342000437cc56d976091e5a723ec7592dff206eee7cf9069174d0ad14b5f768225962924ee500d82311ffea2fd2345d5d16bd8a88c26b770d55cd8a2a0efa01c8b4edffa029302706092a864886f70d01090e311a301830090603551d1304023000300b0603551d0f0404030205e0300906072a8648ce3d04010349003046022100b49fd8c8f77abfa871908dfbe684a08a793d0f490a43d86fcf2086e4f24bb0c2022100f829d5ccd3742369299e6294394717c4b723a0f68b44e831b6e6c3bcabf9724300":char*:"":exp:69 + +X509 CSR ASN.1 (invalid version overflow) +17:hex:"3008300602047fffffff":char*:"":exp:37 + +X509 File parse (no issues) +depends_on:10:11:6:1 +13:char*:"zip:third_party/mbedtls/test/data/server7_int-ca.crt":int:0 + +X509 File parse (extra space in one certificate) +depends_on:10:6:1 +13:char*:"zip:third_party/mbedtls/test/data/server7_pem_space.crt":int:1 + +X509 File parse (all certificates fail) +depends_on:10:1 +13:char*:"zip:third_party/mbedtls/test/data/server7_all_space.crt":exp:107 + +X509 File parse (trailing spaces, OK) +depends_on:10:11:6:1 +13:char*:"zip:third_party/mbedtls/test/data/server7_trailing_space.crt":int:0 + +X509 File parse (Algorithm Params Tag mismatch) +depends_on:6:1 +13:char*:"zip:third_party/mbedtls/test/data/cli-rsa-sha256-badalg.crt.der":exp:75 + +X509 Get time (UTC no issues) +depends_on:26 +25:exp:108:char*:"500101000000Z":int:0:int:1950:int:1:int:1:int:0:int:0:int:0 + +X509 Get time (Generalized Time no issues) +depends_on:26 +25:exp:109:char*:"99991231235959Z":int:0:int:9999:int:12:int:31:int:23:int:59:int:59 + +X509 Get time (UTC year without leap day) +depends_on:26 +25:exp:108:char*:"490229121212Z":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC year with leap day) +depends_on:26 +25:exp:108:char*:"000229121212Z":int:0:int:2000:int:2:int:29:int:12:int:12:int:12 + +X509 Get time (UTC invalid day of month #1) +depends_on:26 +25:exp:108:char*:"000132121212Z":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC invalid day of month #2) +depends_on:26 +25:exp:108:char*:"001131121212Z":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC invalid hour) +depends_on:26 +25:exp:108:char*:"001130241212Z":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC invalid min) +depends_on:26 +25:exp:108:char*:"001130236012Z":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC invalid sec) +depends_on:26 +25:exp:108:char*:"001130235960Z":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC without time zone) +depends_on:26 +25:exp:108:char*:"000229121212":int:0:int:2000:int:2:int:29:int:12:int:12:int:12 + +X509 Get time (UTC with invalid time zone #1) +depends_on:26 +25:exp:108:char*:"000229121212J":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC with invalid time zone #2) +depends_on:26 +25:exp:108:char*:"000229121212+0300":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (Date with invalid tag) +depends_on:26 +25:exp:110:char*:"000229121212":exp:111:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC, truncated) +depends_on:26 +25:exp:108:char*:"000229121":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (Generalized Time, truncated) +depends_on:26 +25:exp:109:char*:"20000229121":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC without seconds) +depends_on:26 +25:exp:108:char*:"0002291212":exp:54:int:2000:int:2:int:29:int:12:int:12:int:0 + +X509 Get time (UTC without seconds and with invalid time zone #1) +depends_on:26 +25:exp:108:char*:"0002291212J":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC without second and with invalid time zone #2) +depends_on:26 +25:exp:108:char*:"0002291212+0300":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC invalid character in year) +depends_on:26 +25:exp:108:char*:"0\1130231212Z":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC invalid character in month) +depends_on:26 +25:exp:108:char*:"001%30231212Z":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC invalid character in day) +depends_on:26 +25:exp:108:char*:"0011`0231212Z":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC invalid character in hour) +depends_on:26 +25:exp:108:char*:"0011302h1212Z":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC invalid character in min) +depends_on:26 +25:exp:108:char*:"00113023u012Z":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (UTC invalid character in sec) +depends_on:26 +25:exp:108:char*:"0011302359n0Z":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (Generalized Time, year multiple of 100 but not 400 is not a leap year) +depends_on:26 +25:exp:109:char*:"19000229000000Z":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 Get time (Generalized Time, year multiple of 4 but not 100 is a leap year) +depends_on:26 +25:exp:109:char*:"19920229000000Z":int:0:int:1992:int:2:int:29:int:0:int:0:int:0 + +X509 Get time (Generalized Time, year multiple of 400 is a leap year) +depends_on:26 +25:exp:109:char*:"20000229000000Z":int:0:int:2000:int:2:int:29:int:0:int:0:int:0 + +X509 Get time (Generalized Time invalid leap year not multiple of 4, 100 or 400) +depends_on:26 +25:exp:109:char*:"19910229000000Z":exp:54:int:0:int:0:int:0:int:0:int:0:int:0 + +X509 CRT verify restart: trusted EE, max_ops=0 (disabled) +depends_on:0:10:6:11 +6:char*:"zip:third_party/mbedtls/test/data/server5-selfsigned.crt":char*:"zip:third_party/mbedtls/test/data/server5-selfsigned.crt":int:0:int:0:int:0:int:0:int:0 + +X509 CRT verify restart: trusted EE, max_ops=1 +depends_on:0:10:6:11 +6:char*:"zip:third_party/mbedtls/test/data/server5-selfsigned.crt":char*:"zip:third_party/mbedtls/test/data/server5-selfsigned.crt":int:0:int:0:int:1:int:0:int:0 + +X509 CRT verify restart: no intermediate, max_ops=0 (disabled) +depends_on:0:10:6:11:12 +6:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":int:0:int:0:int:0:int:0:int:0 + +X509 CRT verify restart: no intermediate, max_ops=1 +depends_on:0:10:6:11:12 +6:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":int:0:int:0:int:1:int:100:int:10000 + +X509 CRT verify restart: no intermediate, max_ops=40000 +depends_on:0:10:6:11:12 +6:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":int:0:int:0:int:40000:int:0:int:0 + +X509 CRT verify restart: no intermediate, max_ops=500 +depends_on:0:10:6:11:12 +6:char*:"zip:third_party/mbedtls/test/data/server5.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":int:0:int:0:int:500:int:20:int:80 + +X509 CRT verify restart: no intermediate, badsign, max_ops=0 (disabled) +depends_on:0:10:6:11:12 +6:char*:"zip:third_party/mbedtls/test/data/server5-badsign.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":exp:5:exp:16:int:0:int:0:int:0 + +X509 CRT verify restart: no intermediate, badsign, max_ops=1 +depends_on:0:10:6:11:12 +6:char*:"zip:third_party/mbedtls/test/data/server5-badsign.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":exp:5:exp:16:int:1:int:100:int:10000 + +X509 CRT verify restart: no intermediate, badsign, max_ops=40000 +depends_on:0:10:6:11:12 +6:char*:"zip:third_party/mbedtls/test/data/server5-badsign.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":exp:5:exp:16:int:40000:int:0:int:0 + +X509 CRT verify restart: no intermediate, badsign, max_ops=500 +depends_on:0:10:6:11:12 +6:char*:"zip:third_party/mbedtls/test/data/server5-badsign.crt":char*:"zip:third_party/mbedtls/test/data/test-ca2.crt":exp:5:exp:16:int:500:int:20:int:80 + +X509 CRT verify restart: one int, max_ops=0 (disabled) +depends_on:0:10:6:11:12:1 +6:char*:"zip:third_party/mbedtls/test/data/server10_int3_int-ca2.crt":char*:"zip:third_party/mbedtls/test/data/test-int-ca2.crt":int:0:int:0:int:0:int:0:int:0 + +X509 CRT verify restart: one int, max_ops=1 +depends_on:0:10:6:11:12:1 +6:char*:"zip:third_party/mbedtls/test/data/server10_int3_int-ca2.crt":char*:"zip:third_party/mbedtls/test/data/test-int-ca2.crt":int:0:int:0:int:1:int:100:int:10000 + +X509 CRT verify restart: one int, max_ops=30000 +depends_on:0:10:6:11:12:1 +6:char*:"zip:third_party/mbedtls/test/data/server10_int3_int-ca2.crt":char*:"zip:third_party/mbedtls/test/data/test-int-ca2.crt":int:0:int:0:int:30000:int:0:int:0 + +X509 CRT verify restart: one int, max_ops=500 +depends_on:0:10:6:11:12:1 +6:char*:"zip:third_party/mbedtls/test/data/server10_int3_int-ca2.crt":char*:"zip:third_party/mbedtls/test/data/test-int-ca2.crt":int:0:int:0:int:500:int:25:int:100 + +X509 CRT verify restart: one int, EE badsign, max_ops=0 (disabled) +depends_on:0:10:6:11:12:1 +6:char*:"zip:third_party/mbedtls/test/data/server10-bs_int3.pem":char*:"zip:third_party/mbedtls/test/data/test-int-ca2.crt":exp:5:exp:16:int:0:int:0:int:0 + +X509 CRT verify restart: one int, EE badsign, max_ops=1 +depends_on:0:10:6:11:12:1 +6:char*:"zip:third_party/mbedtls/test/data/server10-bs_int3.pem":char*:"zip:third_party/mbedtls/test/data/test-int-ca2.crt":exp:5:exp:16:int:1:int:100:int:10000 + +X509 CRT verify restart: one int, EE badsign, max_ops=30000 +depends_on:0:10:6:11:12:1 +6:char*:"zip:third_party/mbedtls/test/data/server10-bs_int3.pem":char*:"zip:third_party/mbedtls/test/data/test-int-ca2.crt":exp:5:exp:16:int:30000:int:0:int:0 + +X509 CRT verify restart: one int, EE badsign, max_ops=500 +depends_on:0:10:6:11:12:1 +6:char*:"zip:third_party/mbedtls/test/data/server10-bs_int3.pem":char*:"zip:third_party/mbedtls/test/data/test-int-ca2.crt":exp:5:exp:16:int:500:int:25:int:100 + +X509 CRT verify restart: one int, int badsign, max_ops=0 (disabled) +depends_on:0:10:6:11:12:1 +6:char*:"zip:third_party/mbedtls/test/data/server10_int3-bs.pem":char*:"zip:third_party/mbedtls/test/data/test-int-ca2.crt":exp:5:exp:16:int:0:int:0:int:0 + +X509 CRT verify restart: one int, int badsign, max_ops=1 +depends_on:0:10:6:11:12:1 +6:char*:"zip:third_party/mbedtls/test/data/server10_int3-bs.pem":char*:"zip:third_party/mbedtls/test/data/test-int-ca2.crt":exp:5:exp:16:int:1:int:100:int:10000 + +X509 CRT verify restart: one int, int badsign, max_ops=30000 +depends_on:0:10:6:11:12:1 +6:char*:"zip:third_party/mbedtls/test/data/server10_int3-bs.pem":char*:"zip:third_party/mbedtls/test/data/test-int-ca2.crt":exp:5:exp:16:int:30000:int:0:int:0 + +X509 CRT verify restart: one int, int badsign, max_ops=500 +depends_on:0:10:6:11:12:1 +6:char*:"zip:third_party/mbedtls/test/data/server10_int3-bs.pem":char*:"zip:third_party/mbedtls/test/data/test-int-ca2.crt":exp:5:exp:16:int:500:int:25:int:100 + diff --git a/third_party/mbedtls/test/test_suite_x509write.c b/third_party/mbedtls/test/test_suite_x509write.c new file mode 100644 index 000000000..8e4749ad5 --- /dev/null +++ b/third_party/mbedtls/test/test_suite_x509write.c @@ -0,0 +1,862 @@ +/* clang-format off */ +/* + * Copyright The Mbed TLS Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "third_party/mbedtls/test/test.inc" +/* + * *** THIS FILE WAS MACHINE GENERATED *** + * + * This file has been machine generated using the script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * Test file : ./test_suite_x509write.c + * + * The following files were used to create this file. + * + * Main code file : suites/main_test.function + * Platform code file : suites/host_test.function + * Helper file : suites/helpers.function + * Test suite file : suites/test_suite_x509write.function + * Test suite data : suites/test_suite_x509write.data + * + */ + + +#define TEST_SUITE_ACTIVE + +#if defined(MBEDTLS_BIGNUM_C) +#if defined(MBEDTLS_FS_IO) +#if defined(MBEDTLS_PK_PARSE_C) +#include "third_party/mbedtls/bignum.h" +#include "third_party/mbedtls/x509_crt.h" +#include "third_party/mbedtls/x509_csr.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/rsa.h" + +#if defined(MBEDTLS_RSA_C) +int mbedtls_rsa_decrypt_func( void *ctx, int mode, size_t *olen, + const unsigned char *input, unsigned char *output, + size_t output_max_len ) +{ + return( mbedtls_rsa_pkcs1_decrypt( (mbedtls_rsa_context *) ctx, NULL, NULL, mode, olen, + input, output, output_max_len ) ); +} +int mbedtls_rsa_sign_func( void *ctx, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, + int mode, mbedtls_md_type_t md_alg, unsigned int hashlen, + const unsigned char *hash, unsigned char *sig ) +{ + return( mbedtls_rsa_pkcs1_sign( (mbedtls_rsa_context *) ctx, f_rng, p_rng, mode, + md_alg, hashlen, hash, sig ) ); +} +size_t mbedtls_rsa_key_len_func( void *ctx ) +{ + return( ((const mbedtls_rsa_context *) ctx)->len ); +} +#endif /* MBEDTLS_RSA_C */ + +#if defined(MBEDTLS_USE_PSA_CRYPTO) && \ + defined(MBEDTLS_PEM_WRITE_C) && defined(MBEDTLS_X509_CSR_WRITE_C) +static int x509_crt_verifycsr( const unsigned char *buf, size_t buflen ) +{ + unsigned char hash[MBEDTLS_MD_MAX_SIZE]; + const mbedtls_md_info_t *md_info; + mbedtls_x509_csr csr; + int ret = 0; + + mbedtls_x509_csr_init( &csr ); + + if( mbedtls_x509_csr_parse( &csr, buf, buflen ) != 0 ) + { + ret = MBEDTLS_ERR_X509_BAD_INPUT_DATA; + goto cleanup; + } + + md_info = mbedtls_md_info_from_type( csr.sig_md ); + if( mbedtls_md( md_info, csr.cri.p, csr.cri.len, hash ) != 0 ) + { + /* Note: this can't happen except after an internal error */ + ret = MBEDTLS_ERR_X509_BAD_INPUT_DATA; + goto cleanup; + } + + if( mbedtls_pk_verify_ext( csr.sig_pk, csr.sig_opts, &csr.pk, + csr.sig_md, hash, mbedtls_md_get_size( md_info ), + csr.sig.p, csr.sig.len ) != 0 ) + { + ret = MBEDTLS_ERR_X509_CERT_VERIFY_FAILED; + goto cleanup; + } + +cleanup: + + mbedtls_x509_csr_free( &csr ); + return( ret ); +} +#endif /* MBEDTLS_USE_PSA_CRYPTO && MBEDTLS_PEM_WRITE_C && MBEDTLS_X509_CSR_WRITE_C */ + +#if defined(MBEDTLS_PEM_WRITE_C) +#if defined(MBEDTLS_X509_CSR_WRITE_C) +void test_x509_csr_check( char * key_file, char * cert_req_check_file, int md_type, + int key_usage, int set_key_usage, int cert_type, + int set_cert_type ) +{ + mbedtls_pk_context key; + mbedtls_x509write_csr req; + unsigned char buf[4096]; + unsigned char check_buf[4000]; + int ret; + size_t olen = 0, pem_len = 0, buf_index; + int der_len = -1; + FILE *f; + const char *subject_name = "C=NL,O=PolarSSL,CN=PolarSSL Server 1"; + mbedtls_test_rnd_pseudo_info rnd_info; + + memset( &rnd_info, 0x2a, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + mbedtls_pk_init( &key ); + TEST_ASSERT( mbedtls_pk_parse_keyfile( &key, key_file, NULL ) == 0 ); + + mbedtls_x509write_csr_init( &req ); + mbedtls_x509write_csr_set_md_alg( &req, md_type ); + mbedtls_x509write_csr_set_key( &req, &key ); + TEST_ASSERT( mbedtls_x509write_csr_set_subject_name( &req, subject_name ) == 0 ); + if( set_key_usage != 0 ) + TEST_ASSERT( mbedtls_x509write_csr_set_key_usage( &req, key_usage ) == 0 ); + if( set_cert_type != 0 ) + TEST_ASSERT( mbedtls_x509write_csr_set_ns_cert_type( &req, cert_type ) == 0 ); + + ret = mbedtls_x509write_csr_pem( &req, buf, sizeof( buf ), + mbedtls_test_rnd_pseudo_rand, &rnd_info ); + TEST_ASSERT( ret == 0 ); + + pem_len = strlen( (char *) buf ); + + for( buf_index = pem_len; buf_index < sizeof( buf ); ++buf_index ) + { + TEST_ASSERT( buf[buf_index] == 0 ); + } + + f = fopen( cert_req_check_file, "r" ); + TEST_ASSERT( f != NULL ); + olen = fread( check_buf, 1, sizeof( check_buf ), f ); + fclose( f ); + + TEST_ASSERT( olen >= pem_len - 1 ); + TEST_ASSERT( memcmp( buf, check_buf, pem_len - 1 ) == 0 ); + + der_len = mbedtls_x509write_csr_der( &req, buf, sizeof( buf ), + mbedtls_test_rnd_pseudo_rand, + &rnd_info ); + TEST_ASSERT( der_len >= 0 ); + + if( der_len == 0 ) + goto exit; + + ret = mbedtls_x509write_csr_der( &req, buf, (size_t)( der_len - 1 ), + mbedtls_test_rnd_pseudo_rand, &rnd_info ); + TEST_ASSERT( ret == MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + +exit: + mbedtls_x509write_csr_free( &req ); + mbedtls_pk_free( &key ); +} + +void test_x509_csr_check_wrapper( void ** params ) +{ + + test_x509_csr_check( (char *) params[0], (char *) params[1], *( (int *) params[2] ), *( (int *) params[3] ), *( (int *) params[4] ), *( (int *) params[5] ), *( (int *) params[6] ) ); +} +#endif /* MBEDTLS_X509_CSR_WRITE_C */ +#endif /* MBEDTLS_PEM_WRITE_C */ +#if defined(MBEDTLS_PEM_WRITE_C) +#if defined(MBEDTLS_X509_CSR_WRITE_C) +#if defined(MBEDTLS_USE_PSA_CRYPTO) +void test_x509_csr_check_opaque( char *key_file, int md_type, int key_usage, + int cert_type ) +{ + mbedtls_pk_context key; + mbedtls_svc_key_id_t key_id = MBEDTLS_SVC_KEY_ID_INIT; + psa_algorithm_t md_alg_psa; + mbedtls_x509write_csr req; + unsigned char buf[4096]; + int ret; + size_t pem_len = 0; + const char *subject_name = "C=NL,O=PolarSSL,CN=PolarSSL Server 1"; + mbedtls_test_rnd_pseudo_info rnd_info; + + PSA_INIT( ); + memset( &rnd_info, 0x2a, sizeof( mbedtls_test_rnd_pseudo_info ) ); + + md_alg_psa = mbedtls_psa_translate_md( (mbedtls_md_type_t) md_type ); + TEST_ASSERT( md_alg_psa != MBEDTLS_MD_NONE ); + + mbedtls_pk_init( &key ); + TEST_ASSERT( mbedtls_pk_parse_keyfile( &key, key_file, NULL ) == 0 ); + TEST_ASSERT( mbedtls_pk_wrap_as_opaque( &key, &key_id, md_alg_psa ) == 0 ); + + mbedtls_x509write_csr_init( &req ); + mbedtls_x509write_csr_set_md_alg( &req, md_type ); + mbedtls_x509write_csr_set_key( &req, &key ); + TEST_ASSERT( mbedtls_x509write_csr_set_subject_name( &req, subject_name ) == 0 ); + if( key_usage != 0 ) + TEST_ASSERT( mbedtls_x509write_csr_set_key_usage( &req, key_usage ) == 0 ); + if( cert_type != 0 ) + TEST_ASSERT( mbedtls_x509write_csr_set_ns_cert_type( &req, cert_type ) == 0 ); + + ret = mbedtls_x509write_csr_pem( &req, buf, sizeof( buf ) - 1, + mbedtls_test_rnd_pseudo_rand, &rnd_info ); + + TEST_ASSERT( ret == 0 ); + + pem_len = strlen( (char *) buf ); + buf[pem_len] = '\0'; + TEST_ASSERT( x509_crt_verifycsr( buf, pem_len + 1 ) == 0 ); + + +exit: + mbedtls_x509write_csr_free( &req ); + mbedtls_pk_free( &key ); + psa_destroy_key( key_id ); + PSA_DONE( ); +} + +void test_x509_csr_check_opaque_wrapper( void ** params ) +{ + + test_x509_csr_check_opaque( (char *) params[0], *( (int *) params[1] ), *( (int *) params[2] ), *( (int *) params[3] ) ); +} +#endif /* MBEDTLS_USE_PSA_CRYPTO */ +#endif /* MBEDTLS_X509_CSR_WRITE_C */ +#endif /* MBEDTLS_PEM_WRITE_C */ +#if defined(MBEDTLS_PEM_WRITE_C) +#if defined(MBEDTLS_X509_CRT_WRITE_C) +#if defined(MBEDTLS_SHA1_C) +void test_x509_crt_check( char *subject_key_file, char *subject_pwd, + char *subject_name, char *issuer_key_file, + char *issuer_pwd, char *issuer_name, + char *serial_str, char *not_before, char *not_after, + int md_type, int key_usage, int set_key_usage, + int cert_type, int set_cert_type, int auth_ident, + int ver, char *cert_check_file, int rsa_alt, int is_ca ) +{ + mbedtls_pk_context subject_key, issuer_key, issuer_key_alt; + mbedtls_pk_context *key = &issuer_key; + + mbedtls_x509write_cert crt; + unsigned char buf[4096]; + unsigned char check_buf[5000]; + mbedtls_mpi serial; + int ret; + size_t olen = 0, pem_len = 0, buf_index = 0; + int der_len = -1; + FILE *f; + mbedtls_test_rnd_pseudo_info rnd_info; + + memset( &rnd_info, 0x2a, sizeof( mbedtls_test_rnd_pseudo_info ) ); + mbedtls_mpi_init( &serial ); + + mbedtls_pk_init( &subject_key ); + mbedtls_pk_init( &issuer_key ); + mbedtls_pk_init( &issuer_key_alt ); + + mbedtls_x509write_crt_init( &crt ); + + TEST_ASSERT( mbedtls_pk_parse_keyfile( &subject_key, subject_key_file, + subject_pwd ) == 0 ); + + TEST_ASSERT( mbedtls_pk_parse_keyfile( &issuer_key, issuer_key_file, + issuer_pwd ) == 0 ); + +#if defined(MBEDTLS_RSA_C) + /* For RSA PK contexts, create a copy as an alternative RSA context. */ + if( rsa_alt == 1 && mbedtls_pk_get_type( &issuer_key ) == MBEDTLS_PK_RSA ) + { + TEST_ASSERT( mbedtls_pk_setup_rsa_alt( &issuer_key_alt, + mbedtls_pk_rsa( issuer_key ), + mbedtls_rsa_decrypt_func, + mbedtls_rsa_sign_func, + mbedtls_rsa_key_len_func ) == 0 ); + + key = &issuer_key_alt; + } +#else + (void) rsa_alt; +#endif + + TEST_ASSERT( mbedtls_mpi_read_string( &serial, 10, serial_str ) == 0 ); + + if( ver != -1 ) + mbedtls_x509write_crt_set_version( &crt, ver ); + + TEST_ASSERT( mbedtls_x509write_crt_set_serial( &crt, &serial ) == 0 ); + TEST_ASSERT( mbedtls_x509write_crt_set_validity( &crt, not_before, + not_after ) == 0 ); + mbedtls_x509write_crt_set_md_alg( &crt, md_type ); + TEST_ASSERT( mbedtls_x509write_crt_set_issuer_name( &crt, issuer_name ) == 0 ); + TEST_ASSERT( mbedtls_x509write_crt_set_subject_name( &crt, subject_name ) == 0 ); + mbedtls_x509write_crt_set_subject_key( &crt, &subject_key ); + + mbedtls_x509write_crt_set_issuer_key( &crt, key ); + + if( crt.version >= MBEDTLS_X509_CRT_VERSION_3 ) + { + /* For the CA case, a path length of -1 means unlimited. */ + TEST_ASSERT( mbedtls_x509write_crt_set_basic_constraints( &crt, is_ca, + (is_ca ? -1 : 0) ) == 0 ); + TEST_ASSERT( mbedtls_x509write_crt_set_subject_key_identifier( &crt ) == 0 ); + if( auth_ident ) + TEST_ASSERT( mbedtls_x509write_crt_set_authority_key_identifier( &crt ) == 0 ); + if( set_key_usage != 0 ) + TEST_ASSERT( mbedtls_x509write_crt_set_key_usage( &crt, key_usage ) == 0 ); + if( set_cert_type != 0 ) + TEST_ASSERT( mbedtls_x509write_crt_set_ns_cert_type( &crt, cert_type ) == 0 ); + } + + ret = mbedtls_x509write_crt_pem( &crt, buf, sizeof( buf ), + mbedtls_test_rnd_pseudo_rand, &rnd_info ); + TEST_ASSERT( ret == 0 ); + + pem_len = strlen( (char *) buf ); + + // check that the rest of the buffer remains clear + for( buf_index = pem_len; buf_index < sizeof( buf ); ++buf_index ) + { + TEST_ASSERT( buf[buf_index] == 0 ); + } + + f = fopen( cert_check_file, "r" ); + TEST_ASSERT( f != NULL ); + olen = fread( check_buf, 1, sizeof( check_buf ), f ); + fclose( f ); + TEST_ASSERT( olen < sizeof( check_buf ) ); + + TEST_ASSERT( olen >= pem_len - 1 ); + TEST_ASSERT( memcmp( buf, check_buf, pem_len - 1 ) == 0 ); + + der_len = mbedtls_x509write_crt_der( &crt, buf, sizeof( buf ), + mbedtls_test_rnd_pseudo_rand, + &rnd_info ); + TEST_ASSERT( der_len >= 0 ); + + if( der_len == 0 ) + goto exit; + + ret = mbedtls_x509write_crt_der( &crt, buf, (size_t)( der_len - 1 ), + mbedtls_test_rnd_pseudo_rand, &rnd_info ); + TEST_ASSERT( ret == MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + +exit: + mbedtls_x509write_crt_free( &crt ); + mbedtls_pk_free( &issuer_key_alt ); + mbedtls_pk_free( &subject_key ); + mbedtls_pk_free( &issuer_key ); + mbedtls_mpi_free( &serial ); +} + +void test_x509_crt_check_wrapper( void ** params ) +{ + + test_x509_crt_check( (char *) params[0], (char *) params[1], (char *) params[2], (char *) params[3], (char *) params[4], (char *) params[5], (char *) params[6], (char *) params[7], (char *) params[8], *( (int *) params[9] ), *( (int *) params[10] ), *( (int *) params[11] ), *( (int *) params[12] ), *( (int *) params[13] ), *( (int *) params[14] ), *( (int *) params[15] ), (char *) params[16], *( (int *) params[17] ), *( (int *) params[18] ) ); +} +#endif /* MBEDTLS_SHA1_C */ +#endif /* MBEDTLS_X509_CRT_WRITE_C */ +#endif /* MBEDTLS_PEM_WRITE_C */ +#if defined(MBEDTLS_X509_CREATE_C) +#if defined(MBEDTLS_X509_USE_C) +void test_mbedtls_x509_string_to_names( char * name, char * parsed_name, int result + ) +{ + int ret; + size_t len = 0; + mbedtls_asn1_named_data *names = NULL; + mbedtls_x509_name parsed, *parsed_cur, *parsed_prv; + unsigned char buf[1024], out[1024], *c; + + memset( &parsed, 0, sizeof( parsed ) ); + memset( out, 0, sizeof( out ) ); + memset( buf, 0, sizeof( buf ) ); + c = buf + sizeof( buf ); + + ret = mbedtls_x509_string_to_names( &names, name ); + TEST_ASSERT( ret == result ); + + if( ret != 0 ) + goto exit; + + ret = mbedtls_x509_write_names( &c, buf, names ); + TEST_ASSERT( ret > 0 ); + + TEST_ASSERT( mbedtls_asn1_get_tag( &c, buf + sizeof( buf ), &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) == 0 ); + TEST_ASSERT( mbedtls_x509_get_name( &c, buf + sizeof( buf ), &parsed ) == 0 ); + + ret = mbedtls_x509_dn_gets( (char *) out, sizeof( out ), &parsed ); + TEST_ASSERT( ret > 0 ); + + TEST_ASSERT( strcmp( (char *) out, parsed_name ) == 0 ); + +exit: + mbedtls_asn1_free_named_data_list( &names ); + + parsed_cur = parsed.next; + while( parsed_cur != 0 ) + { + parsed_prv = parsed_cur; + parsed_cur = parsed_cur->next; + mbedtls_free( parsed_prv ); + } +} + +void test_mbedtls_x509_string_to_names_wrapper( void ** params ) +{ + + test_mbedtls_x509_string_to_names( (char *) params[0], (char *) params[1], *( (int *) params[2] ) ); +} +#endif /* MBEDTLS_X509_USE_C */ +#endif /* MBEDTLS_X509_CREATE_C */ +#endif /* MBEDTLS_PK_PARSE_C */ +#endif /* MBEDTLS_FS_IO */ +#endif /* MBEDTLS_BIGNUM_C */ + +/*----------------------------------------------------------------------------*/ +/* Test dispatch code */ + + +/** + * \brief Evaluates an expression/macro into its literal integer value. + * For optimizing space for embedded targets each expression/macro + * is identified by a unique identifier instead of string literals. + * Identifiers and evaluation code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param exp_id Expression identifier. + * \param out_value Pointer to int to hold the integer. + * + * \return 0 if exp_id is found. 1 otherwise. + */ +int get_expression( int32_t exp_id, int32_t * out_value ) +{ + int ret = KEY_VALUE_MAPPING_FOUND; + + (void) exp_id; + (void) out_value; + + switch( exp_id ) + { + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_PK_PARSE_C) + + case 0: + { + *out_value = MBEDTLS_MD_SHA1; + } + break; + case 1: + { + *out_value = MBEDTLS_MD_SHA224; + } + break; + case 2: + { + *out_value = MBEDTLS_MD_SHA256; + } + break; + case 3: + { + *out_value = MBEDTLS_MD_SHA384; + } + break; + case 4: + { + *out_value = MBEDTLS_MD_SHA512; + } + break; + case 5: + { + *out_value = MBEDTLS_MD_MD4; + } + break; + case 6: + { + *out_value = MBEDTLS_MD_MD5; + } + break; + case 7: + { + *out_value = MBEDTLS_X509_KU_DIGITAL_SIGNATURE | MBEDTLS_X509_KU_NON_REPUDIATION | MBEDTLS_X509_KU_KEY_ENCIPHERMENT; + } + break; + case 8: + { + *out_value = MBEDTLS_X509_NS_CERT_TYPE_SSL_SERVER; + } + break; + case 9: + { + *out_value = MBEDTLS_X509_KU_DIGITAL_SIGNATURE | MBEDTLS_X509_KU_NON_REPUDIATION; + } + break; + case 10: + { + *out_value = -1; + } + break; + case 11: + { + *out_value = MBEDTLS_X509_CRT_VERSION_1; + } + break; + case 12: + { + *out_value = MBEDTLS_ERR_X509_UNKNOWN_OID; + } + break; + case 13: + { + *out_value = MBEDTLS_ERR_X509_INVALID_NAME; + } + break; +#endif + + default: + { + ret = KEY_VALUE_MAPPING_NOT_FOUND; + } + break; + } + return( ret ); +} + + +/** + * \brief Checks if the dependency i.e. the compile flag is set. + * For optimizing space for embedded targets each dependency + * is identified by a unique identifier instead of string literals. + * Identifiers and check code is generated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + * \param dep_id Dependency identifier. + * + * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED + */ +int dep_check( int dep_id ) +{ + int ret = DEPENDENCY_NOT_SUPPORTED; + + (void) dep_id; + + switch( dep_id ) + { + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_PK_PARSE_C) + + case 0: + { +#if defined(MBEDTLS_SHA1_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 1: + { +#if defined(MBEDTLS_RSA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 2: + { +#if defined(MBEDTLS_PKCS1_V15) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 3: + { +#if defined(MBEDTLS_SHA256_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 4: + { +#if defined(MBEDTLS_SHA512_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 5: + { +#if !defined(MBEDTLS_SHA512_NO_SHA384) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 6: + { +#if defined(MBEDTLS_MD4_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 7: + { +#if defined(MBEDTLS_MD5_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 8: + { +#if defined(MBEDTLS_ECDSA_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 9: + { +#if defined(MBEDTLS_ECDSA_DETERMINISTIC) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 10: + { +#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 11: + { +#if defined(MBEDTLS_DES_C) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; + case 12: + { +#if defined(MBEDTLS_CIPHER_MODE_CBC) + ret = DEPENDENCY_SUPPORTED; +#else + ret = DEPENDENCY_NOT_SUPPORTED; +#endif + } + break; +#endif + + default: + break; + } + return( ret ); +} + + +/** + * \brief Function pointer type for test function wrappers. + * + * A test function wrapper decodes the parameters and passes them to the + * underlying test function. Both the wrapper and the underlying function + * return void. Test wrappers assume that they are passed a suitable + * parameter array and do not perform any error detection. + * + * \param param_array The array of parameters. Each element is a `void *` + * which the wrapper casts to the correct type and + * dereferences. Each wrapper function hard-codes the + * number and types of the parameters. + */ +typedef void (*TestWrapper_t)( void **param_array ); + + +/** + * \brief Table of test function wrappers. Used by dispatch_test(). + * This table is populated by script: + * generate_test_code.py and then mbedtls_test_suite.sh and then mbedtls_test_suite.sh + * + */ +TestWrapper_t test_funcs[] = +{ +/* Function Id: 0 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_PEM_WRITE_C) && defined(MBEDTLS_X509_CSR_WRITE_C) + test_x509_csr_check_wrapper, +#else + NULL, +#endif +/* Function Id: 1 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_PEM_WRITE_C) && defined(MBEDTLS_X509_CSR_WRITE_C) && defined(MBEDTLS_USE_PSA_CRYPTO) + test_x509_csr_check_opaque_wrapper, +#else + NULL, +#endif +/* Function Id: 2 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_PEM_WRITE_C) && defined(MBEDTLS_X509_CRT_WRITE_C) && defined(MBEDTLS_SHA1_C) + test_x509_crt_check_wrapper, +#else + NULL, +#endif +/* Function Id: 3 */ + +#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_FS_IO) && defined(MBEDTLS_PK_PARSE_C) && defined(MBEDTLS_X509_CREATE_C) && defined(MBEDTLS_X509_USE_C) + test_mbedtls_x509_string_to_names_wrapper, +#else + NULL, +#endif + +}; + +/** + * \brief Execute the test function. + * + * This is a wrapper function around the test function execution + * to allow the setjmp() call used to catch any calls to the + * parameter failure callback, to be used. Calls to setjmp() + * can invalidate the state of any local auto variables. + * + * \param fp Function pointer to the test function. + * \param params Parameters to pass to the #TestWrapper_t wrapper function. + * + */ +void execute_function_ptr(TestWrapper_t fp, void **params) +{ +#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) + mbedtls_test_enable_insecure_external_rng( ); +#endif + +#if defined(MBEDTLS_CHECK_PARAMS) + mbedtls_test_param_failed_location_record_t location_record; + + if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) + { + fp( params ); + } + else + { + /* Unexpected parameter validation error */ + mbedtls_test_param_failed_get_location_record( &location_record ); + mbedtls_test_fail( location_record.failure_condition, + location_record.line, + location_record.file ); + } + + mbedtls_test_param_failed_reset_state( ); +#else + fp( params ); +#endif + +#if defined(MBEDTLS_TEST_MUTEX_USAGE) + mbedtls_test_mutex_usage_check( ); +#endif /* MBEDTLS_TEST_MUTEX_USAGE */ +} + +/** + * \brief Dispatches test functions based on function index. + * + * \param func_idx Test function index. + * \param params The array of parameters to pass to the test function. + * It will be decoded by the #TestWrapper_t wrapper function. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int dispatch_test( size_t func_idx, void ** params ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp ) + execute_function_ptr(fp, params); + else + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + + +/** + * \brief Checks if test function is supported in this build-time + * configuration. + * + * \param func_idx Test function index. + * + * \return DISPATCH_TEST_SUCCESS if found + * DISPATCH_TEST_FN_NOT_FOUND if not found + * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. + */ +int check_test( size_t func_idx ) +{ + int ret = DISPATCH_TEST_SUCCESS; + TestWrapper_t fp = NULL; + + if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) ) + { + fp = test_funcs[func_idx]; + if ( fp == NULL ) + ret = DISPATCH_UNSUPPORTED_SUITE; + } + else + { + ret = DISPATCH_TEST_FN_NOT_FOUND; + } + + return( ret ); +} + +int main( int argc, const char *argv[] ) +{ + int ret; + mbedtls_test_platform_setup(); + ret = execute_tests( argc, argv, "zip:third_party/mbedtls/test/test_suite_x509write.datax" ); + mbedtls_test_platform_teardown(); + return( ret ); +} diff --git a/third_party/mbedtls/test/test_suite_x509write.datax b/third_party/mbedtls/test/test_suite_x509write.datax new file mode 100644 index 000000000..6a7ed22aa --- /dev/null +++ b/third_party/mbedtls/test/test_suite_x509write.datax @@ -0,0 +1,113 @@ +Certificate Request check Server1 SHA1 +depends_on:0:1:2 +0:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"zip:third_party/mbedtls/test/data/server1.req.sha1":exp:0:int:0:int:0:int:0:int:0 + +Certificate Request check Server1 SHA224 +depends_on:3:1:2 +0:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"zip:third_party/mbedtls/test/data/server1.req.sha224":exp:1:int:0:int:0:int:0:int:0 + +Certificate Request check Server1 SHA256 +depends_on:3:1:2 +0:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"zip:third_party/mbedtls/test/data/server1.req.sha256":exp:2:int:0:int:0:int:0:int:0 + +Certificate Request check Server1 SHA384 +depends_on:4:5:1:2 +0:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"zip:third_party/mbedtls/test/data/server1.req.sha384":exp:3:int:0:int:0:int:0:int:0 + +Certificate Request check Server1 SHA512 +depends_on:4:1:2 +0:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"zip:third_party/mbedtls/test/data/server1.req.sha512":exp:4:int:0:int:0:int:0:int:0 + +Certificate Request check Server1 MD4 +depends_on:6:1:2 +0:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"zip:third_party/mbedtls/test/data/server1.req.md4":exp:5:int:0:int:0:int:0:int:0 + +Certificate Request check Server1 MD5 +depends_on:7:1:2 +0:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"zip:third_party/mbedtls/test/data/server1.req.md5":exp:6:int:0:int:0:int:0:int:0 + +Certificate Request check Server1 key_usage +depends_on:0:1:2 +0:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"zip:third_party/mbedtls/test/data/server1.req.key_usage":exp:0:exp:7:int:1:int:0:int:0 + +Certificate Request check Server1 key_usage empty +depends_on:0:1:2 +0:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"zip:third_party/mbedtls/test/data/server1.req.key_usage_empty":exp:0:int:0:int:1:int:0:int:0 + +Certificate Request check Server1 ns_cert_type +depends_on:0:1:2 +0:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"zip:third_party/mbedtls/test/data/server1.req.cert_type":exp:0:int:0:int:0:exp:8:int:1 + +Certificate Request check Server1 ns_cert_type empty +depends_on:0:1:2 +0:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"zip:third_party/mbedtls/test/data/server1.req.cert_type_empty":exp:0:int:0:int:0:int:0:int:1 + +Certificate Request check Server1 key_usage + ns_cert_type +depends_on:0:1:2 +0:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"zip:third_party/mbedtls/test/data/server1.req.ku-ct":exp:0:exp:7:int:1:exp:8:int:1 + +Certificate Request check Server5 ECDSA, key_usage +depends_on:0:8:9:10 +0:char*:"zip:third_party/mbedtls/test/data/server5.key":char*:"zip:third_party/mbedtls/test/data/server5.req.ku.sha1":exp:0:exp:9:int:1:int:0:int:0 + +Certificate Request check opaque Server5 ECDSA, key_usage +depends_on:3:8:10 +1:char*:"zip:third_party/mbedtls/test/data/server5.key":exp:2:exp:9:int:0 + +Certificate write check Server1 SHA1 +depends_on:0:1:2:11:12:7 +2:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"":char*:"C=NL,O=PolarSSL,CN=PolarSSL Server 1":char*:"zip:third_party/mbedtls/test/data/test-ca.key":char*:"PolarSSLTest":char*:"C=NL,O=PolarSSL,CN=PolarSSL Test CA":char*:"1":char*:"20190210144406":char*:"20290210144406":exp:0:int:0:int:0:int:0:int:0:int:1:exp:10:char*:"zip:third_party/mbedtls/test/data/server1.crt":int:0:int:0 + +Certificate write check Server1 SHA1, key_usage +depends_on:0:1:2:11:12:7 +2:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"":char*:"C=NL,O=PolarSSL,CN=PolarSSL Server 1":char*:"zip:third_party/mbedtls/test/data/test-ca.key":char*:"PolarSSLTest":char*:"C=NL,O=PolarSSL,CN=PolarSSL Test CA":char*:"1":char*:"20190210144406":char*:"20290210144406":exp:0:exp:7:int:1:int:0:int:0:int:1:exp:10:char*:"zip:third_party/mbedtls/test/data/server1.key_usage.crt":int:0:int:0 + +Certificate write check Server1 SHA1, ns_cert_type +depends_on:0:1:2:11:12:7 +2:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"":char*:"C=NL,O=PolarSSL,CN=PolarSSL Server 1":char*:"zip:third_party/mbedtls/test/data/test-ca.key":char*:"PolarSSLTest":char*:"C=NL,O=PolarSSL,CN=PolarSSL Test CA":char*:"1":char*:"20190210144406":char*:"20290210144406":exp:0:int:0:int:0:exp:8:int:1:int:1:exp:10:char*:"zip:third_party/mbedtls/test/data/server1.cert_type.crt":int:0:int:0 + +Certificate write check Server1 SHA1, version 1 +depends_on:0:1:2:11:12:7 +2:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"":char*:"C=NL,O=PolarSSL,CN=PolarSSL Server 1":char*:"zip:third_party/mbedtls/test/data/test-ca.key":char*:"PolarSSLTest":char*:"C=NL,O=PolarSSL,CN=PolarSSL Test CA":char*:"1":char*:"20190210144406":char*:"20290210144406":exp:0:int:0:int:0:int:0:int:0:int:1:exp:11:char*:"zip:third_party/mbedtls/test/data/server1.v1.crt":int:0:int:0 + +Certificate write check Server1 SHA1, CA +depends_on:0:1:2:11:12:7 +2:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"":char*:"C=NL,O=PolarSSL,CN=PolarSSL Server 1":char*:"zip:third_party/mbedtls/test/data/test-ca.key":char*:"PolarSSLTest":char*:"C=NL,O=PolarSSL,CN=PolarSSL Test CA":char*:"1":char*:"20190210144406":char*:"20290210144406":exp:0:int:0:int:0:int:0:int:0:int:1:exp:10:char*:"zip:third_party/mbedtls/test/data/server1.ca.crt":int:0:int:1 + +Certificate write check Server1 SHA1, RSA_ALT +depends_on:0:1:2:11:12:7 +2:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"":char*:"C=NL,O=PolarSSL,CN=PolarSSL Server 1":char*:"zip:third_party/mbedtls/test/data/test-ca.key":char*:"PolarSSLTest":char*:"C=NL,O=PolarSSL,CN=PolarSSL Test CA":char*:"1":char*:"20190210144406":char*:"20290210144406":exp:0:int:0:int:0:int:0:int:0:int:0:exp:10:char*:"zip:third_party/mbedtls/test/data/server1.noauthid.crt":int:1:int:0 + +Certificate write check Server1 SHA1, RSA_ALT, key_usage +depends_on:0:1:2:11:12:7 +2:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"":char*:"C=NL,O=PolarSSL,CN=PolarSSL Server 1":char*:"zip:third_party/mbedtls/test/data/test-ca.key":char*:"PolarSSLTest":char*:"C=NL,O=PolarSSL,CN=PolarSSL Test CA":char*:"1":char*:"20190210144406":char*:"20290210144406":exp:0:exp:7:int:1:int:0:int:0:int:0:exp:10:char*:"zip:third_party/mbedtls/test/data/server1.key_usage_noauthid.crt":int:1:int:0 + +Certificate write check Server1 SHA1, RSA_ALT, ns_cert_type +depends_on:0:1:2:11:12:7 +2:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"":char*:"C=NL,O=PolarSSL,CN=PolarSSL Server 1":char*:"zip:third_party/mbedtls/test/data/test-ca.key":char*:"PolarSSLTest":char*:"C=NL,O=PolarSSL,CN=PolarSSL Test CA":char*:"1":char*:"20190210144406":char*:"20290210144406":exp:0:int:0:int:0:exp:8:int:1:int:0:exp:10:char*:"zip:third_party/mbedtls/test/data/server1.cert_type_noauthid.crt":int:1:int:0 + +Certificate write check Server1 SHA1, RSA_ALT, version 1 +depends_on:0:1:2:11:12:7 +2:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"":char*:"C=NL,O=PolarSSL,CN=PolarSSL Server 1":char*:"zip:third_party/mbedtls/test/data/test-ca.key":char*:"PolarSSLTest":char*:"C=NL,O=PolarSSL,CN=PolarSSL Test CA":char*:"1":char*:"20190210144406":char*:"20290210144406":exp:0:int:0:int:0:int:0:int:0:int:0:exp:11:char*:"zip:third_party/mbedtls/test/data/server1.v1.crt":int:1:int:0 + +Certificate write check Server1 SHA1, RSA_ALT, CA +depends_on:0:1:2:11:12:7 +2:char*:"zip:third_party/mbedtls/test/data/server1.key":char*:"":char*:"C=NL,O=PolarSSL,CN=PolarSSL Server 1":char*:"zip:third_party/mbedtls/test/data/test-ca.key":char*:"PolarSSLTest":char*:"C=NL,O=PolarSSL,CN=PolarSSL Test CA":char*:"1":char*:"20190210144406":char*:"20290210144406":exp:0:int:0:int:0:int:0:int:0:int:0:exp:10:char*:"zip:third_party/mbedtls/test/data/server1.ca_noauthid.crt":int:1:int:1 + +X509 String to Names #1 +3:char*:"C=NL,O=Offspark\, Inc., OU=PolarSSL":char*:"C=NL, O=Offspark, Inc., OU=PolarSSL":int:0 + +X509 String to Names #2 +3:char*:"C=NL, O=Offspark, Inc., OU=PolarSSL":char*:"":exp:12 + +X509 String to Names #3 (Name precisely 255 bytes) +3:char*:"C=NL, O=123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345,OU=PolarSSL":char*:"C=NL, O=123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345, OU=PolarSSL":int:0 + +X509 String to Names #4 (Name larger than 255 bytes) +3:char*:"C=NL, O=1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456, OU=PolarSSL":char*:"":exp:13 + +X509 String to Names #5 (Escape non-allowed characters) +3:char*:"C=NL, O=Offspark\a Inc., OU=PolarSSL":char*:"":exp:13 + +X509 String to Names #6 (Escape at end) +3:char*:"C=NL, O=Offspark\"":char*:"":exp:13 diff --git a/third_party/mbedtls/threading.c b/third_party/mbedtls/threading.c deleted file mode 100644 index 86de8d934..000000000 --- a/third_party/mbedtls/threading.c +++ /dev/null @@ -1,188 +0,0 @@ -/* clang-format off */ - -/* - * Threading abstraction layer - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Ensure gmtime_r is available even with -std=c99; must be defined before - * config.h, which pulls in glibc's features.h. Harmless on other platforms. - */ -#if !defined(_POSIX_C_SOURCE) -#define _POSIX_C_SOURCE 200112L -#endif - -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_THREADING_C) - -#include "third_party/mbedtls/threading.h" - -#if defined(MBEDTLS_HAVE_TIME_DATE) && !defined(MBEDTLS_PLATFORM_GMTIME_R_ALT) - -#if !defined(_WIN32) && (defined(unix) || \ - defined(__unix) || defined(__unix__) || (defined(__APPLE__) && \ - defined(__MACH__))) -#endif /* !_WIN32 && (unix || __unix || __unix__ || - * (__APPLE__ && __MACH__)) */ - -#if !( ( defined(_POSIX_VERSION) && _POSIX_VERSION >= 200809L ) || \ - ( defined(_POSIX_THREAD_SAFE_FUNCTIONS ) && \ - _POSIX_THREAD_SAFE_FUNCTIONS >= 200112L ) ) -/* - * This is a convenience shorthand macro to avoid checking the long - * preprocessor conditions above. Ideally, we could expose this macro in - * platform_util.h and simply use it in platform_util.c, threading.c and - * threading.h. However, this macro is not part of the Mbed TLS public API, so - * we keep it private by only defining it in this file - */ - -#if ! ( defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) ) -#define THREADING_USE_GMTIME -#endif /* ! ( defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) ) */ - -#endif /* !( ( defined(_POSIX_VERSION) && _POSIX_VERSION >= 200809L ) || \ - ( defined(_POSIX_THREAD_SAFE_FUNCTIONS ) && \ - _POSIX_THREAD_SAFE_FUNCTIONS >= 200112L ) ) */ - -#endif /* MBEDTLS_HAVE_TIME_DATE && !MBEDTLS_PLATFORM_GMTIME_R_ALT */ - -#if defined(MBEDTLS_THREADING_PTHREAD) -static void threading_mutex_init_pthread( mbedtls_threading_mutex_t *mutex ) -{ - if( mutex == NULL ) - return; - - /* A nonzero value of is_valid indicates a successfully initialized - * mutex. This is a workaround for not being able to return an error - * code for this function. The lock/unlock functions return an error - * if is_valid is nonzero. The Mbed TLS unit test code uses this field - * to distinguish more states of the mutex; see - * tests/src/threading_helpers for details. */ - mutex->is_valid = pthread_mutex_init( &mutex->mutex, NULL ) == 0; -} - -static void threading_mutex_free_pthread( mbedtls_threading_mutex_t *mutex ) -{ - if( mutex == NULL || !mutex->is_valid ) - return; - - (void) pthread_mutex_destroy( &mutex->mutex ); - mutex->is_valid = 0; -} - -static int threading_mutex_lock_pthread( mbedtls_threading_mutex_t *mutex ) -{ - if( mutex == NULL || ! mutex->is_valid ) - return( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA ); - - if( pthread_mutex_lock( &mutex->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); - - return( 0 ); -} - -static int threading_mutex_unlock_pthread( mbedtls_threading_mutex_t *mutex ) -{ - if( mutex == NULL || ! mutex->is_valid ) - return( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA ); - - if( pthread_mutex_unlock( &mutex->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); - - return( 0 ); -} - -void (*mbedtls_mutex_init)( mbedtls_threading_mutex_t * ) = threading_mutex_init_pthread; -void (*mbedtls_mutex_free)( mbedtls_threading_mutex_t * ) = threading_mutex_free_pthread; -int (*mbedtls_mutex_lock)( mbedtls_threading_mutex_t * ) = threading_mutex_lock_pthread; -int (*mbedtls_mutex_unlock)( mbedtls_threading_mutex_t * ) = threading_mutex_unlock_pthread; - -/* - * With phtreads we can statically initialize mutexes - */ -#define MUTEX_INIT = { PTHREAD_MUTEX_INITIALIZER, 1 } - -#endif /* MBEDTLS_THREADING_PTHREAD */ - -#if defined(MBEDTLS_THREADING_ALT) -static int threading_mutex_fail( mbedtls_threading_mutex_t *mutex ) -{ - ((void) mutex ); - return( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA ); -} -static void threading_mutex_dummy( mbedtls_threading_mutex_t *mutex ) -{ - ((void) mutex ); - return; -} - -void (*mbedtls_mutex_init)( mbedtls_threading_mutex_t * ) = threading_mutex_dummy; -void (*mbedtls_mutex_free)( mbedtls_threading_mutex_t * ) = threading_mutex_dummy; -int (*mbedtls_mutex_lock)( mbedtls_threading_mutex_t * ) = threading_mutex_fail; -int (*mbedtls_mutex_unlock)( mbedtls_threading_mutex_t * ) = threading_mutex_fail; - -/* - * Set functions pointers and initialize global mutexes - */ -void mbedtls_threading_set_alt( void (*mutex_init)( mbedtls_threading_mutex_t * ), - void (*mutex_free)( mbedtls_threading_mutex_t * ), - int (*mutex_lock)( mbedtls_threading_mutex_t * ), - int (*mutex_unlock)( mbedtls_threading_mutex_t * ) ) -{ - mbedtls_mutex_init = mutex_init; - mbedtls_mutex_free = mutex_free; - mbedtls_mutex_lock = mutex_lock; - mbedtls_mutex_unlock = mutex_unlock; - -#if defined(MBEDTLS_FS_IO) - mbedtls_mutex_init( &mbedtls_threading_readdir_mutex ); -#endif -#if defined(THREADING_USE_GMTIME) - mbedtls_mutex_init( &mbedtls_threading_gmtime_mutex ); -#endif -} - -/* - * Free global mutexes - */ -void mbedtls_threading_free_alt( void ) -{ -#if defined(MBEDTLS_FS_IO) - mbedtls_mutex_free( &mbedtls_threading_readdir_mutex ); -#endif -#if defined(THREADING_USE_GMTIME) - mbedtls_mutex_free( &mbedtls_threading_gmtime_mutex ); -#endif -} -#endif /* MBEDTLS_THREADING_ALT */ - -/* - * Define global mutexes - */ -#ifndef MUTEX_INIT -#define MUTEX_INIT -#endif -#if defined(MBEDTLS_FS_IO) -mbedtls_threading_mutex_t mbedtls_threading_readdir_mutex MUTEX_INIT; -#endif -#if defined(THREADING_USE_GMTIME) -mbedtls_threading_mutex_t mbedtls_threading_gmtime_mutex MUTEX_INIT; -#endif - -#endif /* MBEDTLS_THREADING_C */ diff --git a/third_party/mbedtls/threading.h b/third_party/mbedtls/threading.h deleted file mode 100644 index 7c4a2ca3b..000000000 --- a/third_party/mbedtls/threading.h +++ /dev/null @@ -1,122 +0,0 @@ -/* clang-format off */ - -/** - * \file threading.h - * - * \brief Threading abstraction layer - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_THREADING_H -#define MBEDTLS_THREADING_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE is deprecated and should not be - * used. */ -#define MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE -0x001A /**< The selected feature is not available. */ - -#define MBEDTLS_ERR_THREADING_BAD_INPUT_DATA -0x001C /**< Bad input parameters to function. */ -#define MBEDTLS_ERR_THREADING_MUTEX_ERROR -0x001E /**< Locking / unlocking / free failed with error code. */ - -#if defined(MBEDTLS_THREADING_PTHREAD) -typedef struct mbedtls_threading_mutex_t -{ - pthread_mutex_t mutex; - /* is_valid is 0 after a failed init or a free, and nonzero after a - * successful init. This field is not considered part of the public - * API of Mbed TLS and may change without notice. */ - char is_valid; -} mbedtls_threading_mutex_t; -#endif - -#if defined(MBEDTLS_THREADING_ALT) -/* You should define the mbedtls_threading_mutex_t type in your header */ -/* #include "threading_alt.h" */ - -/** - * \brief Set your alternate threading implementation function - * pointers and initialize global mutexes. If used, this - * function must be called once in the main thread before any - * other mbed TLS function is called, and - * mbedtls_threading_free_alt() must be called once in the main - * thread after all other mbed TLS functions. - * - * \note mutex_init() and mutex_free() don't return a status code. - * If mutex_init() fails, it should leave its argument (the - * mutex) in a state such that mutex_lock() will fail when - * called with this argument. - * - * \param mutex_init the init function implementation - * \param mutex_free the free function implementation - * \param mutex_lock the lock function implementation - * \param mutex_unlock the unlock function implementation - */ -void mbedtls_threading_set_alt( void (*mutex_init)( mbedtls_threading_mutex_t * ), - void (*mutex_free)( mbedtls_threading_mutex_t * ), - int (*mutex_lock)( mbedtls_threading_mutex_t * ), - int (*mutex_unlock)( mbedtls_threading_mutex_t * ) ); - -/** - * \brief Free global mutexes. - */ -void mbedtls_threading_free_alt( void ); -#endif /* MBEDTLS_THREADING_ALT */ - -#if defined(MBEDTLS_THREADING_C) -/* - * The function pointers for mutex_init, mutex_free, mutex_ and mutex_unlock - * - * All these functions are expected to work or the result will be undefined. - */ -extern void (*mbedtls_mutex_init)( mbedtls_threading_mutex_t *mutex ); -extern void (*mbedtls_mutex_free)( mbedtls_threading_mutex_t *mutex ); -extern int (*mbedtls_mutex_lock)( mbedtls_threading_mutex_t *mutex ); -extern int (*mbedtls_mutex_unlock)( mbedtls_threading_mutex_t *mutex ); - -/* - * Global mutexes - */ -#if defined(MBEDTLS_FS_IO) -extern mbedtls_threading_mutex_t mbedtls_threading_readdir_mutex; -#endif - -#if defined(MBEDTLS_HAVE_TIME_DATE) && !defined(MBEDTLS_PLATFORM_GMTIME_R_ALT) -/* This mutex may or may not be used in the default definition of - * mbedtls_platform_gmtime_r(), but in order to determine that, - * we need to check POSIX features, hence modify _POSIX_C_SOURCE. - * With the current approach, this declaration is orphaned, lacking - * an accompanying definition, in case mbedtls_platform_gmtime_r() - * doesn't need it, but that's not a problem. */ -extern mbedtls_threading_mutex_t mbedtls_threading_gmtime_mutex; -#endif /* MBEDTLS_HAVE_TIME_DATE && !MBEDTLS_PLATFORM_GMTIME_R_ALT */ - -#endif /* MBEDTLS_THREADING_C */ - -#ifdef __cplusplus -} -#endif - -#endif /* threading.h */ diff --git a/third_party/mbedtls/timing.c b/third_party/mbedtls/timing.c deleted file mode 100644 index aee0d9f8d..000000000 --- a/third_party/mbedtls/timing.c +++ /dev/null @@ -1,525 +0,0 @@ -/* clang-format off */ - -/* - * Portable interface to the CPU cycle counter - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "libc/calls/calls.h" -#include "libc/time/time.h" -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif - -#if defined(MBEDTLS_TIMING_C) - -#include "third_party/mbedtls/timing.h" - -#if !defined(MBEDTLS_TIMING_ALT) - -#if !defined(unix) && !defined(__unix__) && !defined(__unix) && \ - !defined(__APPLE__) && !defined(_WIN32) && !defined(__QNXNTO__) && \ - !defined(__HAIKU__) && !defined(__midipix__) -#error "This module only works on Unix and Windows, see MBEDTLS_TIMING_C in config.h" -#endif - -#ifndef asm -#define asm __asm -#endif - -#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) - - -struct _hr_time -{ - LARGE_INTEGER start; -}; - -#else - -struct _hr_time -{ - struct timeval start; -}; - -#endif /* _WIN32 && !EFIX64 && !EFI32 */ - -#if !defined(HAVE_HARDCLOCK) && defined(MBEDTLS_HAVE_ASM) && \ - ( defined(_MSC_VER) && defined(_M_IX86) ) || defined(__WATCOMC__) - -#define HAVE_HARDCLOCK - -unsigned long mbedtls_timing_hardclock( void ) -{ - unsigned long tsc; - __asm rdtsc - __asm mov [tsc], eax - return( tsc ); -} -#endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && - ( _MSC_VER && _M_IX86 ) || __WATCOMC__ */ - -/* some versions of mingw-64 have 32-bit longs even on x84_64 */ -#if !defined(HAVE_HARDCLOCK) && defined(MBEDTLS_HAVE_ASM) && \ - defined(__GNUC__) && ( defined(__i386__) || ( \ - ( defined(__amd64__) || defined( __x86_64__) ) && __SIZEOF_LONG__ == 4 ) ) - -#define HAVE_HARDCLOCK - -unsigned long mbedtls_timing_hardclock( void ) -{ - unsigned long lo, hi; - asm volatile( "rdtsc" : "=a" (lo), "=d" (hi) ); - return( lo ); -} -#endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && - __GNUC__ && __i386__ */ - -#if !defined(HAVE_HARDCLOCK) && defined(MBEDTLS_HAVE_ASM) && \ - defined(__GNUC__) && ( defined(__amd64__) || defined(__x86_64__) ) - -#define HAVE_HARDCLOCK - -unsigned long mbedtls_timing_hardclock( void ) -{ - unsigned long lo, hi; - asm volatile( "rdtsc" : "=a" (lo), "=d" (hi) ); - return( lo | ( hi << 32 ) ); -} -#endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && - __GNUC__ && ( __amd64__ || __x86_64__ ) */ - -#if !defined(HAVE_HARDCLOCK) && defined(MBEDTLS_HAVE_ASM) && \ - defined(__GNUC__) && ( defined(__powerpc__) || defined(__ppc__) ) - -#define HAVE_HARDCLOCK - -unsigned long mbedtls_timing_hardclock( void ) -{ - unsigned long tbl, tbu0, tbu1; - - do - { - asm volatile( "mftbu %0" : "=r" (tbu0) ); - asm volatile( "mftb %0" : "=r" (tbl ) ); - asm volatile( "mftbu %0" : "=r" (tbu1) ); - } - while( tbu0 != tbu1 ); - - return( tbl ); -} -#endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && - __GNUC__ && ( __powerpc__ || __ppc__ ) */ - -#if !defined(HAVE_HARDCLOCK) && defined(MBEDTLS_HAVE_ASM) && \ - defined(__GNUC__) && defined(__sparc64__) - -#if defined(__OpenBSD__) -#warning OpenBSD does not allow access to tick register using software version instead -#else -#define HAVE_HARDCLOCK - -unsigned long mbedtls_timing_hardclock( void ) -{ - unsigned long tick; - asm volatile( "rdpr %%tick, %0;" : "=&r" (tick) ); - return( tick ); -} -#endif /* __OpenBSD__ */ -#endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && - __GNUC__ && __sparc64__ */ - -#if !defined(HAVE_HARDCLOCK) && defined(MBEDTLS_HAVE_ASM) && \ - defined(__GNUC__) && defined(__sparc__) && !defined(__sparc64__) - -#define HAVE_HARDCLOCK - -unsigned long mbedtls_timing_hardclock( void ) -{ - unsigned long tick; - asm volatile( ".byte 0x83, 0x41, 0x00, 0x00" ); - asm volatile( "mov %%g1, %0" : "=r" (tick) ); - return( tick ); -} -#endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && - __GNUC__ && __sparc__ && !__sparc64__ */ - -#if !defined(HAVE_HARDCLOCK) && defined(MBEDTLS_HAVE_ASM) && \ - defined(__GNUC__) && defined(__alpha__) - -#define HAVE_HARDCLOCK - -unsigned long mbedtls_timing_hardclock( void ) -{ - unsigned long cc; - asm volatile( "rpcc %0" : "=r" (cc) ); - return( cc & 0xFFFFFFFF ); -} -#endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && - __GNUC__ && __alpha__ */ - -#if !defined(HAVE_HARDCLOCK) && defined(MBEDTLS_HAVE_ASM) && \ - defined(__GNUC__) && defined(__ia64__) - -#define HAVE_HARDCLOCK - -unsigned long mbedtls_timing_hardclock( void ) -{ - unsigned long itc; - asm volatile( "mov %0 = ar.itc" : "=r" (itc) ); - return( itc ); -} -#endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && - __GNUC__ && __ia64__ */ - -#if !defined(HAVE_HARDCLOCK) && defined(_MSC_VER) && \ - !defined(EFIX64) && !defined(EFI32) - -#define HAVE_HARDCLOCK - -unsigned long mbedtls_timing_hardclock( void ) -{ - LARGE_INTEGER offset; - - QueryPerformanceCounter( &offset ); - - return( (unsigned long)( offset.QuadPart ) ); -} -#endif /* !HAVE_HARDCLOCK && _MSC_VER && !EFIX64 && !EFI32 */ - -#if !defined(HAVE_HARDCLOCK) - -#define HAVE_HARDCLOCK - -static int hardclock_init = 0; -static struct timeval tv_init; - -unsigned long mbedtls_timing_hardclock( void ) -{ - struct timeval tv_cur; - - if( hardclock_init == 0 ) - { - gettimeofday( &tv_init, NULL ); - hardclock_init = 1; - } - - gettimeofday( &tv_cur, NULL ); - return( ( tv_cur.tv_sec - tv_init.tv_sec ) * 1000000 - + ( tv_cur.tv_usec - tv_init.tv_usec ) ); -} -#endif /* !HAVE_HARDCLOCK */ - -volatile int mbedtls_timing_alarmed = 0; - -#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) - -unsigned long mbedtls_timing_get_timer( struct mbedtls_timing_hr_time *val, int reset ) -{ - struct _hr_time *t = (struct _hr_time *) val; - - if( reset ) - { - QueryPerformanceCounter( &t->start ); - return( 0 ); - } - else - { - unsigned long delta; - LARGE_INTEGER now, hfreq; - QueryPerformanceCounter( &now ); - QueryPerformanceFrequency( &hfreq ); - delta = (unsigned long)( ( now.QuadPart - t->start.QuadPart ) * 1000ul - / hfreq.QuadPart ); - return( delta ); - } -} - -/* It's OK to use a global because alarm() is supposed to be global anyway */ -static DWORD alarmMs; - -static void TimerProc( void *TimerContext ) -{ - (void) TimerContext; - Sleep( alarmMs ); - mbedtls_timing_alarmed = 1; - /* _endthread will be called implicitly on return - * That ensures execution of thread funcition's epilogue */ -} - -void mbedtls_set_alarm( int seconds ) -{ - if( seconds == 0 ) - { - /* No need to create a thread for this simple case. - * Also, this shorcut is more reliable at least on MinGW32 */ - mbedtls_timing_alarmed = 1; - return; - } - - mbedtls_timing_alarmed = 0; - alarmMs = seconds * 1000; - (void) _beginthread( TimerProc, 0, NULL ); -} - -#else /* _WIN32 && !EFIX64 && !EFI32 */ - -unsigned long mbedtls_timing_get_timer( struct mbedtls_timing_hr_time *val, int reset ) -{ - struct _hr_time *t = (struct _hr_time *) val; - - if( reset ) - { - gettimeofday( &t->start, NULL ); - return( 0 ); - } - else - { - unsigned long delta; - struct timeval now; - gettimeofday( &now, NULL ); - delta = ( now.tv_sec - t->start.tv_sec ) * 1000ul - + ( now.tv_usec - t->start.tv_usec ) / 1000; - return( delta ); - } -} - -static void sighandler( int signum ) -{ - mbedtls_timing_alarmed = 1; - signal( signum, sighandler ); -} - -void mbedtls_set_alarm( int seconds ) -{ - mbedtls_timing_alarmed = 0; - signal( SIGALRM, sighandler ); - alarm( seconds ); - if( seconds == 0 ) - { - /* alarm(0) cancelled any previous pending alarm, but the - handler won't fire, so raise the flag straight away. */ - mbedtls_timing_alarmed = 1; - } -} - -#endif /* _WIN32 && !EFIX64 && !EFI32 */ - -/* - * Set delays to watch - */ -void mbedtls_timing_set_delay( void *data, uint32_t int_ms, uint32_t fin_ms ) -{ - mbedtls_timing_delay_context *ctx = (mbedtls_timing_delay_context *) data; - - ctx->int_ms = int_ms; - ctx->fin_ms = fin_ms; - - if( fin_ms != 0 ) - (void) mbedtls_timing_get_timer( &ctx->timer, 1 ); -} - -/* - * Get number of delays expired - */ -int mbedtls_timing_get_delay( void *data ) -{ - mbedtls_timing_delay_context *ctx = (mbedtls_timing_delay_context *) data; - unsigned long elapsed_ms; - - if( ctx->fin_ms == 0 ) - return( -1 ); - - elapsed_ms = mbedtls_timing_get_timer( &ctx->timer, 0 ); - - if( elapsed_ms >= ctx->fin_ms ) - return( 2 ); - - if( elapsed_ms >= ctx->int_ms ) - return( 1 ); - - return( 0 ); -} - -#endif /* !MBEDTLS_TIMING_ALT */ - -#if defined(MBEDTLS_SELF_TEST) - -/* - * Busy-waits for the given number of milliseconds. - * Used for testing mbedtls_timing_hardclock. - */ -static void busy_msleep( unsigned long msec ) -{ - struct mbedtls_timing_hr_time hires; - unsigned long i = 0; /* for busy-waiting */ - volatile unsigned long j; /* to prevent optimisation */ - - (void) mbedtls_timing_get_timer( &hires, 1 ); - - while( mbedtls_timing_get_timer( &hires, 0 ) < msec ) - i++; - - j = i; - (void) j; -} - -#define FAIL do \ - { \ - if( verbose != 0 ) \ - { \ - mbedtls_printf( "failed at line %d\n", __LINE__ ); \ - mbedtls_printf( " cycles=%lu ratio=%lu millisecs=%lu secs=%lu hardfail=%d a=%lu b=%lu\n", \ - cycles, ratio, millisecs, secs, hardfail, \ - (unsigned long) a, (unsigned long) b ); \ - mbedtls_printf( " elapsed(hires)=%lu elapsed(ctx)=%lu status(ctx)=%d\n", \ - mbedtls_timing_get_timer( &hires, 0 ), \ - mbedtls_timing_get_timer( &ctx.timer, 0 ), \ - mbedtls_timing_get_delay( &ctx ) ); \ - } \ - return( 1 ); \ - } while( 0 ) - -/* - * Checkup routine - * - * Warning: this is work in progress, some tests may not be reliable enough - * yet! False positives may happen. - */ -int mbedtls_timing_self_test( int verbose ) -{ - unsigned long cycles = 0, ratio = 0; - unsigned long millisecs = 0, secs = 0; - int hardfail = 0; - struct mbedtls_timing_hr_time hires; - uint32_t a = 0, b = 0; - mbedtls_timing_delay_context ctx; - - if( verbose != 0 ) - mbedtls_printf( " TIMING tests note: will take some time!\n" ); - - if( verbose != 0 ) - mbedtls_printf( " TIMING test #1 (set_alarm / get_timer): " ); - - { - secs = 1; - - (void) mbedtls_timing_get_timer( &hires, 1 ); - - mbedtls_set_alarm( (int) secs ); - while( !mbedtls_timing_alarmed ) - ; - - millisecs = mbedtls_timing_get_timer( &hires, 0 ); - - /* For some reason on Windows it looks like alarm has an extra delay - * (maybe related to creating a new thread). Allow some room here. */ - if( millisecs < 800 * secs || millisecs > 1200 * secs + 300 ) - FAIL; - } - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - - if( verbose != 0 ) - mbedtls_printf( " TIMING test #2 (set/get_delay ): " ); - - { - a = 800; - b = 400; - mbedtls_timing_set_delay( &ctx, a, a + b ); /* T = 0 */ - - busy_msleep( a - a / 4 ); /* T = a - a/4 */ - if( mbedtls_timing_get_delay( &ctx ) != 0 ) - FAIL; - - busy_msleep( a / 4 + b / 4 ); /* T = a + b/4 */ - if( mbedtls_timing_get_delay( &ctx ) != 1 ) - FAIL; - - busy_msleep( b ); /* T = a + b + b/4 */ - if( mbedtls_timing_get_delay( &ctx ) != 2 ) - FAIL; - } - - mbedtls_timing_set_delay( &ctx, 0, 0 ); - busy_msleep( 200 ); - if( mbedtls_timing_get_delay( &ctx ) != -1 ) - FAIL; - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - - if( verbose != 0 ) - mbedtls_printf( " TIMING test #3 (hardclock / get_timer): " ); - - /* - * Allow one failure for possible counter wrapping. - * On a 4Ghz 32-bit machine the cycle counter wraps about once per second; - * since the whole test is about 10ms, it shouldn't happen twice in a row. - */ - -hard_test: - if( hardfail > 1 ) - { - if( verbose != 0 ) - mbedtls_printf( "failed (ignored)\n" ); - - goto hard_test_done; - } - - /* Get a reference ratio cycles/ms */ - millisecs = 1; - cycles = mbedtls_timing_hardclock(); - busy_msleep( millisecs ); - cycles = mbedtls_timing_hardclock() - cycles; - ratio = cycles / millisecs; - - /* Check that the ratio is mostly constant */ - for( millisecs = 2; millisecs <= 4; millisecs++ ) - { - cycles = mbedtls_timing_hardclock(); - busy_msleep( millisecs ); - cycles = mbedtls_timing_hardclock() - cycles; - - /* Allow variation up to 20% */ - if( cycles / millisecs < ratio - ratio / 5 || - cycles / millisecs > ratio + ratio / 5 ) - { - hardfail++; - goto hard_test; - } - } - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - -hard_test_done: - - if( verbose != 0 ) - mbedtls_printf( "\n" ); - - return( 0 ); -} - -#endif /* MBEDTLS_SELF_TEST */ - -#endif /* MBEDTLS_TIMING_C */ diff --git a/third_party/mbedtls/timing.h b/third_party/mbedtls/timing.h deleted file mode 100644 index cc13174da..000000000 --- a/third_party/mbedtls/timing.h +++ /dev/null @@ -1,152 +0,0 @@ -/* clang-format off */ - -/** - * \file timing.h - * - * \brief Portable interface to timeouts and to the CPU cycle counter - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_TIMING_H -#define MBEDTLS_TIMING_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(MBEDTLS_TIMING_ALT) -// Regular implementation -// - -/** - * \brief timer structure - */ -struct mbedtls_timing_hr_time -{ - unsigned char opaque[32]; -}; - -/** - * \brief Context for mbedtls_timing_set/get_delay() - */ -typedef struct mbedtls_timing_delay_context -{ - struct mbedtls_timing_hr_time timer; - uint32_t int_ms; - uint32_t fin_ms; -} mbedtls_timing_delay_context; - -#else /* MBEDTLS_TIMING_ALT */ -/* #include "timing_alt.h" */ -#endif /* MBEDTLS_TIMING_ALT */ - -extern volatile int mbedtls_timing_alarmed; - -/** - * \brief Return the CPU cycle counter value - * - * \warning This is only a best effort! Do not rely on this! - * In particular, it is known to be unreliable on virtual - * machines. - * - * \note This value starts at an unspecified origin and - * may wrap around. - */ -unsigned long mbedtls_timing_hardclock( void ); - -/** - * \brief Return the elapsed time in milliseconds - * - * \param val points to a timer structure - * \param reset If 0, query the elapsed time. Otherwise (re)start the timer. - * - * \return Elapsed time since the previous reset in ms. When - * restarting, this is always 0. - * - * \note To initialize a timer, call this function with reset=1. - * - * Determining the elapsed time and resetting the timer is not - * atomic on all platforms, so after the sequence - * `{ get_timer(1); ...; time1 = get_timer(1); ...; time2 = - * get_timer(0) }` the value time1+time2 is only approximately - * the delay since the first reset. - */ -unsigned long mbedtls_timing_get_timer( struct mbedtls_timing_hr_time *val, int reset ); - -/** - * \brief Setup an alarm clock - * - * \param seconds delay before the "mbedtls_timing_alarmed" flag is set - * (must be >=0) - * - * \warning Only one alarm at a time is supported. In a threaded - * context, this means one for the whole process, not one per - * thread. - */ -void mbedtls_set_alarm( int seconds ); - -/** - * \brief Set a pair of delays to watch - * (See \c mbedtls_timing_get_delay().) - * - * \param data Pointer to timing data. - * Must point to a valid \c mbedtls_timing_delay_context struct. - * \param int_ms First (intermediate) delay in milliseconds. - * The effect if int_ms > fin_ms is unspecified. - * \param fin_ms Second (final) delay in milliseconds. - * Pass 0 to cancel the current delay. - * - * \note To set a single delay, either use \c mbedtls_timing_set_timer - * directly or use this function with int_ms == fin_ms. - */ -void mbedtls_timing_set_delay( void *data, uint32_t int_ms, uint32_t fin_ms ); - -/** - * \brief Get the status of delays - * (Memory helper: number of delays passed.) - * - * \param data Pointer to timing data - * Must point to a valid \c mbedtls_timing_delay_context struct. - * - * \return -1 if cancelled (fin_ms = 0), - * 0 if none of the delays are passed, - * 1 if only the intermediate delay is passed, - * 2 if the final delay is passed. - */ -int mbedtls_timing_get_delay( void *data ); - -#if defined(MBEDTLS_SELF_TEST) -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if a test failed - */ -int mbedtls_timing_self_test( int verbose ); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* timing.h */ diff --git a/third_party/mbedtls/version.c b/third_party/mbedtls/version.c deleted file mode 100644 index 10227b47a..000000000 --- a/third_party/mbedtls/version.c +++ /dev/null @@ -1,46 +0,0 @@ -/* clang-format off */ - -/* - * Version information - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "libc/str/str.h" -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_VERSION_C) - -#include "third_party/mbedtls/version.h" - -unsigned int mbedtls_version_get_number( void ) -{ - return( MBEDTLS_VERSION_NUMBER ); -} - -void mbedtls_version_get_string( char *string ) -{ - memcpy( string, MBEDTLS_VERSION_STRING, - sizeof( MBEDTLS_VERSION_STRING ) ); -} - -void mbedtls_version_get_string_full( char *string ) -{ - memcpy( string, MBEDTLS_VERSION_STRING_FULL, - sizeof( MBEDTLS_VERSION_STRING_FULL ) ); -} - -#endif /* MBEDTLS_VERSION_C */ diff --git a/third_party/mbedtls/version.h b/third_party/mbedtls/version.h index 185ed1e9d..b9ca65677 100644 --- a/third_party/mbedtls/version.h +++ b/third_party/mbedtls/version.h @@ -1,38 +1,7 @@ -/* clang-format off */ - -/** - * \file version.h - * - * \brief Run-time version information - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * This set of compile-time defines and run-time variables can be used to - * determine the version number of the mbed TLS library used. - */ #ifndef MBEDTLS_VERSION_H #define MBEDTLS_VERSION_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif +/* clang-format off */ /** * The version number x.y.z is split into three parts. diff --git a/third_party/mbedtls/version_features.c b/third_party/mbedtls/version_features.c deleted file mode 100644 index e3ad7184e..000000000 --- a/third_party/mbedtls/version_features.c +++ /dev/null @@ -1,867 +0,0 @@ -/* clang-format off */ - -/* - * Version feature information - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "libc/str/str.h" -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_VERSION_C) - -#include "third_party/mbedtls/version.h" - -static const char * const features[] = { -#if defined(MBEDTLS_VERSION_FEATURES) -#if defined(MBEDTLS_HAVE_ASM) - "MBEDTLS_HAVE_ASM", -#endif /* MBEDTLS_HAVE_ASM */ -#if defined(MBEDTLS_NO_UDBL_DIVISION) - "MBEDTLS_NO_UDBL_DIVISION", -#endif /* MBEDTLS_NO_UDBL_DIVISION */ -#if defined(MBEDTLS_NO_64BIT_MULTIPLICATION) - "MBEDTLS_NO_64BIT_MULTIPLICATION", -#endif /* MBEDTLS_NO_64BIT_MULTIPLICATION */ -#if defined(MBEDTLS_HAVE_SSE2) - "MBEDTLS_HAVE_SSE2", -#endif /* MBEDTLS_HAVE_SSE2 */ -#if defined(MBEDTLS_HAVE_TIME) - "MBEDTLS_HAVE_TIME", -#endif /* MBEDTLS_HAVE_TIME */ -#if defined(MBEDTLS_HAVE_TIME_DATE) - "MBEDTLS_HAVE_TIME_DATE", -#endif /* MBEDTLS_HAVE_TIME_DATE */ -#if defined(MBEDTLS_PLATFORM_MEMORY) - "MBEDTLS_PLATFORM_MEMORY", -#endif /* MBEDTLS_PLATFORM_MEMORY */ -#if defined(MBEDTLS_PLATFORM_NO_STD_FUNCTIONS) - "MBEDTLS_PLATFORM_NO_STD_FUNCTIONS", -#endif /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */ -#if defined(MBEDTLS_PLATFORM_EXIT_ALT) - "MBEDTLS_PLATFORM_EXIT_ALT", -#endif /* MBEDTLS_PLATFORM_EXIT_ALT */ -#if defined(MBEDTLS_PLATFORM_TIME_ALT) - "MBEDTLS_PLATFORM_TIME_ALT", -#endif /* MBEDTLS_PLATFORM_TIME_ALT */ -#if defined(MBEDTLS_PLATFORM_FPRINTF_ALT) - "MBEDTLS_PLATFORM_FPRINTF_ALT", -#endif /* MBEDTLS_PLATFORM_FPRINTF_ALT */ -#if defined(MBEDTLS_PLATFORM_PRINTF_ALT) - "MBEDTLS_PLATFORM_PRINTF_ALT", -#endif /* MBEDTLS_PLATFORM_PRINTF_ALT */ -#if defined(MBEDTLS_PLATFORM_SNPRINTF_ALT) - "MBEDTLS_PLATFORM_SNPRINTF_ALT", -#endif /* MBEDTLS_PLATFORM_SNPRINTF_ALT */ -#if defined(MBEDTLS_PLATFORM_VSNPRINTF_ALT) - "MBEDTLS_PLATFORM_VSNPRINTF_ALT", -#endif /* MBEDTLS_PLATFORM_VSNPRINTF_ALT */ -#if defined(MBEDTLS_PLATFORM_NV_SEED_ALT) - "MBEDTLS_PLATFORM_NV_SEED_ALT", -#endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */ -#if defined(MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT) - "MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT", -#endif /* MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT */ -#if defined(MBEDTLS_DEPRECATED_WARNING) - "MBEDTLS_DEPRECATED_WARNING", -#endif /* MBEDTLS_DEPRECATED_WARNING */ -#if defined(MBEDTLS_DEPRECATED_REMOVED) - "MBEDTLS_DEPRECATED_REMOVED", -#endif /* MBEDTLS_DEPRECATED_REMOVED */ -#if defined(MBEDTLS_CHECK_PARAMS) - "MBEDTLS_CHECK_PARAMS", -#endif /* MBEDTLS_CHECK_PARAMS */ -#if defined(MBEDTLS_CHECK_PARAMS_ASSERT) - "MBEDTLS_CHECK_PARAMS_ASSERT", -#endif /* MBEDTLS_CHECK_PARAMS_ASSERT */ -#if defined(MBEDTLS_TIMING_ALT) - "MBEDTLS_TIMING_ALT", -#endif /* MBEDTLS_TIMING_ALT */ -#if defined(MBEDTLS_AES_ALT) - "MBEDTLS_AES_ALT", -#endif /* MBEDTLS_AES_ALT */ -#if defined(MBEDTLS_ARC4_ALT) - "MBEDTLS_ARC4_ALT", -#endif /* MBEDTLS_ARC4_ALT */ -#if defined(MBEDTLS_ARIA_ALT) - "MBEDTLS_ARIA_ALT", -#endif /* MBEDTLS_ARIA_ALT */ -#if defined(MBEDTLS_BLOWFISH_ALT) - "MBEDTLS_BLOWFISH_ALT", -#endif /* MBEDTLS_BLOWFISH_ALT */ -#if defined(MBEDTLS_CAMELLIA_ALT) - "MBEDTLS_CAMELLIA_ALT", -#endif /* MBEDTLS_CAMELLIA_ALT */ -#if defined(MBEDTLS_CCM_ALT) - "MBEDTLS_CCM_ALT", -#endif /* MBEDTLS_CCM_ALT */ -#if defined(MBEDTLS_CHACHA20_ALT) - "MBEDTLS_CHACHA20_ALT", -#endif /* MBEDTLS_CHACHA20_ALT */ -#if defined(MBEDTLS_CHACHAPOLY_ALT) - "MBEDTLS_CHACHAPOLY_ALT", -#endif /* MBEDTLS_CHACHAPOLY_ALT */ -#if defined(MBEDTLS_CMAC_ALT) - "MBEDTLS_CMAC_ALT", -#endif /* MBEDTLS_CMAC_ALT */ -#if defined(MBEDTLS_DES_ALT) - "MBEDTLS_DES_ALT", -#endif /* MBEDTLS_DES_ALT */ -#if defined(MBEDTLS_DHM_ALT) - "MBEDTLS_DHM_ALT", -#endif /* MBEDTLS_DHM_ALT */ -#if defined(MBEDTLS_ECJPAKE_ALT) - "MBEDTLS_ECJPAKE_ALT", -#endif /* MBEDTLS_ECJPAKE_ALT */ -#if defined(MBEDTLS_GCM_ALT) - "MBEDTLS_GCM_ALT", -#endif /* MBEDTLS_GCM_ALT */ -#if defined(MBEDTLS_NIST_KW_ALT) - "MBEDTLS_NIST_KW_ALT", -#endif /* MBEDTLS_NIST_KW_ALT */ -#if defined(MBEDTLS_MD2_ALT) - "MBEDTLS_MD2_ALT", -#endif /* MBEDTLS_MD2_ALT */ -#if defined(MBEDTLS_MD4_ALT) - "MBEDTLS_MD4_ALT", -#endif /* MBEDTLS_MD4_ALT */ -#if defined(MBEDTLS_MD5_ALT) - "MBEDTLS_MD5_ALT", -#endif /* MBEDTLS_MD5_ALT */ -#if defined(MBEDTLS_POLY1305_ALT) - "MBEDTLS_POLY1305_ALT", -#endif /* MBEDTLS_POLY1305_ALT */ -#if defined(MBEDTLS_RIPEMD160_ALT) - "MBEDTLS_RIPEMD160_ALT", -#endif /* MBEDTLS_RIPEMD160_ALT */ -#if defined(MBEDTLS_RSA_ALT) - "MBEDTLS_RSA_ALT", -#endif /* MBEDTLS_RSA_ALT */ -#if defined(MBEDTLS_SHA1_ALT) - "MBEDTLS_SHA1_ALT", -#endif /* MBEDTLS_SHA1_ALT */ -#if defined(MBEDTLS_SHA256_ALT) - "MBEDTLS_SHA256_ALT", -#endif /* MBEDTLS_SHA256_ALT */ -#if defined(MBEDTLS_SHA512_ALT) - "MBEDTLS_SHA512_ALT", -#endif /* MBEDTLS_SHA512_ALT */ -#if defined(MBEDTLS_XTEA_ALT) - "MBEDTLS_XTEA_ALT", -#endif /* MBEDTLS_XTEA_ALT */ -#if defined(MBEDTLS_ECP_ALT) - "MBEDTLS_ECP_ALT", -#endif /* MBEDTLS_ECP_ALT */ -#if defined(MBEDTLS_MD2_PROCESS_ALT) - "MBEDTLS_MD2_PROCESS_ALT", -#endif /* MBEDTLS_MD2_PROCESS_ALT */ -#if defined(MBEDTLS_MD4_PROCESS_ALT) - "MBEDTLS_MD4_PROCESS_ALT", -#endif /* MBEDTLS_MD4_PROCESS_ALT */ -#if defined(MBEDTLS_MD5_PROCESS_ALT) - "MBEDTLS_MD5_PROCESS_ALT", -#endif /* MBEDTLS_MD5_PROCESS_ALT */ -#if defined(MBEDTLS_RIPEMD160_PROCESS_ALT) - "MBEDTLS_RIPEMD160_PROCESS_ALT", -#endif /* MBEDTLS_RIPEMD160_PROCESS_ALT */ -#if defined(MBEDTLS_SHA1_PROCESS_ALT) - "MBEDTLS_SHA1_PROCESS_ALT", -#endif /* MBEDTLS_SHA1_PROCESS_ALT */ -#if defined(MBEDTLS_SHA256_PROCESS_ALT) - "MBEDTLS_SHA256_PROCESS_ALT", -#endif /* MBEDTLS_SHA256_PROCESS_ALT */ -#if defined(MBEDTLS_SHA512_PROCESS_ALT) - "MBEDTLS_SHA512_PROCESS_ALT", -#endif /* MBEDTLS_SHA512_PROCESS_ALT */ -#if defined(MBEDTLS_DES_SETKEY_ALT) - "MBEDTLS_DES_SETKEY_ALT", -#endif /* MBEDTLS_DES_SETKEY_ALT */ -#if defined(MBEDTLS_DES_CRYPT_ECB_ALT) - "MBEDTLS_DES_CRYPT_ECB_ALT", -#endif /* MBEDTLS_DES_CRYPT_ECB_ALT */ -#if defined(MBEDTLS_DES3_CRYPT_ECB_ALT) - "MBEDTLS_DES3_CRYPT_ECB_ALT", -#endif /* MBEDTLS_DES3_CRYPT_ECB_ALT */ -#if defined(MBEDTLS_AES_SETKEY_ENC_ALT) - "MBEDTLS_AES_SETKEY_ENC_ALT", -#endif /* MBEDTLS_AES_SETKEY_ENC_ALT */ -#if defined(MBEDTLS_AES_SETKEY_DEC_ALT) - "MBEDTLS_AES_SETKEY_DEC_ALT", -#endif /* MBEDTLS_AES_SETKEY_DEC_ALT */ -#if defined(MBEDTLS_AES_ENCRYPT_ALT) - "MBEDTLS_AES_ENCRYPT_ALT", -#endif /* MBEDTLS_AES_ENCRYPT_ALT */ -#if defined(MBEDTLS_AES_DECRYPT_ALT) - "MBEDTLS_AES_DECRYPT_ALT", -#endif /* MBEDTLS_AES_DECRYPT_ALT */ -#if defined(MBEDTLS_ECDH_GEN_PUBLIC_ALT) - "MBEDTLS_ECDH_GEN_PUBLIC_ALT", -#endif /* MBEDTLS_ECDH_GEN_PUBLIC_ALT */ -#if defined(MBEDTLS_ECDH_COMPUTE_SHARED_ALT) - "MBEDTLS_ECDH_COMPUTE_SHARED_ALT", -#endif /* MBEDTLS_ECDH_COMPUTE_SHARED_ALT */ -#if defined(MBEDTLS_ECDSA_VERIFY_ALT) - "MBEDTLS_ECDSA_VERIFY_ALT", -#endif /* MBEDTLS_ECDSA_VERIFY_ALT */ -#if defined(MBEDTLS_ECDSA_SIGN_ALT) - "MBEDTLS_ECDSA_SIGN_ALT", -#endif /* MBEDTLS_ECDSA_SIGN_ALT */ -#if defined(MBEDTLS_ECDSA_GENKEY_ALT) - "MBEDTLS_ECDSA_GENKEY_ALT", -#endif /* MBEDTLS_ECDSA_GENKEY_ALT */ -#if defined(MBEDTLS_ECP_INTERNAL_ALT) - "MBEDTLS_ECP_INTERNAL_ALT", -#endif /* MBEDTLS_ECP_INTERNAL_ALT */ -#if defined(MBEDTLS_ECP_NO_FALLBACK) - "MBEDTLS_ECP_NO_FALLBACK", -#endif /* MBEDTLS_ECP_NO_FALLBACK */ -#if defined(MBEDTLS_ECP_RANDOMIZE_JAC_ALT) - "MBEDTLS_ECP_RANDOMIZE_JAC_ALT", -#endif /* MBEDTLS_ECP_RANDOMIZE_JAC_ALT */ -#if defined(MBEDTLS_ECP_ADD_MIXED_ALT) - "MBEDTLS_ECP_ADD_MIXED_ALT", -#endif /* MBEDTLS_ECP_ADD_MIXED_ALT */ -#if defined(MBEDTLS_ECP_DOUBLE_JAC_ALT) - "MBEDTLS_ECP_DOUBLE_JAC_ALT", -#endif /* MBEDTLS_ECP_DOUBLE_JAC_ALT */ -#if defined(MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT) - "MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT", -#endif /* MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT */ -#if defined(MBEDTLS_ECP_NORMALIZE_JAC_ALT) - "MBEDTLS_ECP_NORMALIZE_JAC_ALT", -#endif /* MBEDTLS_ECP_NORMALIZE_JAC_ALT */ -#if defined(MBEDTLS_ECP_DOUBLE_ADD_MXZ_ALT) - "MBEDTLS_ECP_DOUBLE_ADD_MXZ_ALT", -#endif /* MBEDTLS_ECP_DOUBLE_ADD_MXZ_ALT */ -#if defined(MBEDTLS_ECP_RANDOMIZE_MXZ_ALT) - "MBEDTLS_ECP_RANDOMIZE_MXZ_ALT", -#endif /* MBEDTLS_ECP_RANDOMIZE_MXZ_ALT */ -#if defined(MBEDTLS_ECP_NORMALIZE_MXZ_ALT) - "MBEDTLS_ECP_NORMALIZE_MXZ_ALT", -#endif /* MBEDTLS_ECP_NORMALIZE_MXZ_ALT */ -#if defined(MBEDTLS_TEST_NULL_ENTROPY) - "MBEDTLS_TEST_NULL_ENTROPY", -#endif /* MBEDTLS_TEST_NULL_ENTROPY */ -#if defined(MBEDTLS_ENTROPY_HARDWARE_ALT) - "MBEDTLS_ENTROPY_HARDWARE_ALT", -#endif /* MBEDTLS_ENTROPY_HARDWARE_ALT */ -#if defined(MBEDTLS_AES_ROM_TABLES) - "MBEDTLS_AES_ROM_TABLES", -#endif /* MBEDTLS_AES_ROM_TABLES */ -#if defined(MBEDTLS_AES_FEWER_TABLES) - "MBEDTLS_AES_FEWER_TABLES", -#endif /* MBEDTLS_AES_FEWER_TABLES */ -#if defined(MBEDTLS_CAMELLIA_SMALL_MEMORY) - "MBEDTLS_CAMELLIA_SMALL_MEMORY", -#endif /* MBEDTLS_CAMELLIA_SMALL_MEMORY */ -#if defined(MBEDTLS_CIPHER_MODE_CBC) - "MBEDTLS_CIPHER_MODE_CBC", -#endif /* MBEDTLS_CIPHER_MODE_CBC */ -#if defined(MBEDTLS_CIPHER_MODE_CFB) - "MBEDTLS_CIPHER_MODE_CFB", -#endif /* MBEDTLS_CIPHER_MODE_CFB */ -#if defined(MBEDTLS_CIPHER_MODE_CTR) - "MBEDTLS_CIPHER_MODE_CTR", -#endif /* MBEDTLS_CIPHER_MODE_CTR */ -#if defined(MBEDTLS_CIPHER_MODE_OFB) - "MBEDTLS_CIPHER_MODE_OFB", -#endif /* MBEDTLS_CIPHER_MODE_OFB */ -#if defined(MBEDTLS_CIPHER_MODE_XTS) - "MBEDTLS_CIPHER_MODE_XTS", -#endif /* MBEDTLS_CIPHER_MODE_XTS */ -#if defined(MBEDTLS_CIPHER_NULL_CIPHER) - "MBEDTLS_CIPHER_NULL_CIPHER", -#endif /* MBEDTLS_CIPHER_NULL_CIPHER */ -#if defined(MBEDTLS_CIPHER_PADDING_PKCS7) - "MBEDTLS_CIPHER_PADDING_PKCS7", -#endif /* MBEDTLS_CIPHER_PADDING_PKCS7 */ -#if defined(MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS) - "MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS", -#endif /* MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS */ -#if defined(MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN) - "MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN", -#endif /* MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN */ -#if defined(MBEDTLS_CIPHER_PADDING_ZEROS) - "MBEDTLS_CIPHER_PADDING_ZEROS", -#endif /* MBEDTLS_CIPHER_PADDING_ZEROS */ -#if defined(MBEDTLS_CTR_DRBG_USE_128_BIT_KEY) - "MBEDTLS_CTR_DRBG_USE_128_BIT_KEY", -#endif /* MBEDTLS_CTR_DRBG_USE_128_BIT_KEY */ -#if defined(MBEDTLS_ENABLE_WEAK_CIPHERSUITES) - "MBEDTLS_ENABLE_WEAK_CIPHERSUITES", -#endif /* MBEDTLS_ENABLE_WEAK_CIPHERSUITES */ -#if defined(MBEDTLS_REMOVE_ARC4_CIPHERSUITES) - "MBEDTLS_REMOVE_ARC4_CIPHERSUITES", -#endif /* MBEDTLS_REMOVE_ARC4_CIPHERSUITES */ -#if defined(MBEDTLS_REMOVE_3DES_CIPHERSUITES) - "MBEDTLS_REMOVE_3DES_CIPHERSUITES", -#endif /* MBEDTLS_REMOVE_3DES_CIPHERSUITES */ -#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) - "MBEDTLS_ECP_DP_SECP192R1_ENABLED", -#endif /* MBEDTLS_ECP_DP_SECP192R1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) - "MBEDTLS_ECP_DP_SECP224R1_ENABLED", -#endif /* MBEDTLS_ECP_DP_SECP224R1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) - "MBEDTLS_ECP_DP_SECP256R1_ENABLED", -#endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) - "MBEDTLS_ECP_DP_SECP384R1_ENABLED", -#endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) - "MBEDTLS_ECP_DP_SECP521R1_ENABLED", -#endif /* MBEDTLS_ECP_DP_SECP521R1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED) - "MBEDTLS_ECP_DP_SECP192K1_ENABLED", -#endif /* MBEDTLS_ECP_DP_SECP192K1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED) - "MBEDTLS_ECP_DP_SECP224K1_ENABLED", -#endif /* MBEDTLS_ECP_DP_SECP224K1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) - "MBEDTLS_ECP_DP_SECP256K1_ENABLED", -#endif /* MBEDTLS_ECP_DP_SECP256K1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) - "MBEDTLS_ECP_DP_BP256R1_ENABLED", -#endif /* MBEDTLS_ECP_DP_BP256R1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) - "MBEDTLS_ECP_DP_BP384R1_ENABLED", -#endif /* MBEDTLS_ECP_DP_BP384R1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) - "MBEDTLS_ECP_DP_BP512R1_ENABLED", -#endif /* MBEDTLS_ECP_DP_BP512R1_ENABLED */ -#if defined(MBEDTLS_ECP_DP_CURVE25519_ENABLED) - "MBEDTLS_ECP_DP_CURVE25519_ENABLED", -#endif /* MBEDTLS_ECP_DP_CURVE25519_ENABLED */ -#if defined(MBEDTLS_ECP_DP_CURVE448_ENABLED) - "MBEDTLS_ECP_DP_CURVE448_ENABLED", -#endif /* MBEDTLS_ECP_DP_CURVE448_ENABLED */ -#if defined(MBEDTLS_ECP_NIST_OPTIM) - "MBEDTLS_ECP_NIST_OPTIM", -#endif /* MBEDTLS_ECP_NIST_OPTIM */ -#if defined(MBEDTLS_ECP_NO_INTERNAL_RNG) - "MBEDTLS_ECP_NO_INTERNAL_RNG", -#endif /* MBEDTLS_ECP_NO_INTERNAL_RNG */ -#if defined(MBEDTLS_ECP_RESTARTABLE) - "MBEDTLS_ECP_RESTARTABLE", -#endif /* MBEDTLS_ECP_RESTARTABLE */ -#if defined(MBEDTLS_ECDH_LEGACY_CONTEXT) - "MBEDTLS_ECDH_LEGACY_CONTEXT", -#endif /* MBEDTLS_ECDH_LEGACY_CONTEXT */ -#if defined(MBEDTLS_ECDSA_DETERMINISTIC) - "MBEDTLS_ECDSA_DETERMINISTIC", -#endif /* MBEDTLS_ECDSA_DETERMINISTIC */ -#if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) - "MBEDTLS_KEY_EXCHANGE_PSK_ENABLED", -#endif /* MBEDTLS_KEY_EXCHANGE_PSK_ENABLED */ -#if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) - "MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED", -#endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ -#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) - "MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED", -#endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ -#if defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) - "MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED", -#endif /* MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */ -#if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) - "MBEDTLS_KEY_EXCHANGE_RSA_ENABLED", -#endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED */ -#if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) - "MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED", -#endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED */ -#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) - "MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED", -#endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED */ -#if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) - "MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED", -#endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED */ -#if defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) - "MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED", -#endif /* MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ -#if defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) - "MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED", -#endif /* MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED */ -#if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - "MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED", -#endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ -#if defined(MBEDTLS_PK_PARSE_EC_EXTENDED) - "MBEDTLS_PK_PARSE_EC_EXTENDED", -#endif /* MBEDTLS_PK_PARSE_EC_EXTENDED */ -#if defined(MBEDTLS_ERROR_STRERROR_DUMMY) - "MBEDTLS_ERROR_STRERROR_DUMMY", -#endif /* MBEDTLS_ERROR_STRERROR_DUMMY */ -#if defined(MBEDTLS_GENPRIME) - "MBEDTLS_GENPRIME", -#endif /* MBEDTLS_GENPRIME */ -#if defined(MBEDTLS_FS_IO) - "MBEDTLS_FS_IO", -#endif /* MBEDTLS_FS_IO */ -#if defined(MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES) - "MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES", -#endif /* MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES */ -#if defined(MBEDTLS_NO_PLATFORM_ENTROPY) - "MBEDTLS_NO_PLATFORM_ENTROPY", -#endif /* MBEDTLS_NO_PLATFORM_ENTROPY */ -#if defined(MBEDTLS_ENTROPY_FORCE_SHA256) - "MBEDTLS_ENTROPY_FORCE_SHA256", -#endif /* MBEDTLS_ENTROPY_FORCE_SHA256 */ -#if defined(MBEDTLS_ENTROPY_NV_SEED) - "MBEDTLS_ENTROPY_NV_SEED", -#endif /* MBEDTLS_ENTROPY_NV_SEED */ -#if defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER) - "MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER", -#endif /* MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER */ -#if defined(MBEDTLS_MEMORY_DEBUG) - "MBEDTLS_MEMORY_DEBUG", -#endif /* MBEDTLS_MEMORY_DEBUG */ -#if defined(MBEDTLS_MEMORY_BACKTRACE) - "MBEDTLS_MEMORY_BACKTRACE", -#endif /* MBEDTLS_MEMORY_BACKTRACE */ -#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) - "MBEDTLS_PK_RSA_ALT_SUPPORT", -#endif /* MBEDTLS_PK_RSA_ALT_SUPPORT */ -#if defined(MBEDTLS_PKCS1_V15) - "MBEDTLS_PKCS1_V15", -#endif /* MBEDTLS_PKCS1_V15 */ -#if defined(MBEDTLS_PKCS1_V21) - "MBEDTLS_PKCS1_V21", -#endif /* MBEDTLS_PKCS1_V21 */ -#if defined(MBEDTLS_PSA_CRYPTO_CLIENT) - "MBEDTLS_PSA_CRYPTO_CLIENT", -#endif /* MBEDTLS_PSA_CRYPTO_CLIENT */ -#if defined(MBEDTLS_PSA_CRYPTO_DRIVERS) - "MBEDTLS_PSA_CRYPTO_DRIVERS", -#endif /* MBEDTLS_PSA_CRYPTO_DRIVERS */ -#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) - "MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG", -#endif /* MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG */ -#if defined(MBEDTLS_PSA_CRYPTO_SPM) - "MBEDTLS_PSA_CRYPTO_SPM", -#endif /* MBEDTLS_PSA_CRYPTO_SPM */ -#if defined(MBEDTLS_PSA_INJECT_ENTROPY) - "MBEDTLS_PSA_INJECT_ENTROPY", -#endif /* MBEDTLS_PSA_INJECT_ENTROPY */ -#if defined(MBEDTLS_RSA_NO_CRT) - "MBEDTLS_RSA_NO_CRT", -#endif /* MBEDTLS_RSA_NO_CRT */ -#if defined(MBEDTLS_SELF_TEST) - "MBEDTLS_SELF_TEST", -#endif /* MBEDTLS_SELF_TEST */ -#if defined(MBEDTLS_SHA256_SMALLER) - "MBEDTLS_SHA256_SMALLER", -#endif /* MBEDTLS_SHA256_SMALLER */ -#if defined(MBEDTLS_SHA512_SMALLER) - "MBEDTLS_SHA512_SMALLER", -#endif /* MBEDTLS_SHA512_SMALLER */ -#if defined(MBEDTLS_SHA512_NO_SHA384) - "MBEDTLS_SHA512_NO_SHA384", -#endif /* MBEDTLS_SHA512_NO_SHA384 */ -#if defined(MBEDTLS_SSL_ALL_ALERT_MESSAGES) - "MBEDTLS_SSL_ALL_ALERT_MESSAGES", -#endif /* MBEDTLS_SSL_ALL_ALERT_MESSAGES */ -#if defined(MBEDTLS_SSL_RECORD_CHECKING) - "MBEDTLS_SSL_RECORD_CHECKING", -#endif /* MBEDTLS_SSL_RECORD_CHECKING */ -#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID) - "MBEDTLS_SSL_DTLS_CONNECTION_ID", -#endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */ -#if defined(MBEDTLS_SSL_ASYNC_PRIVATE) - "MBEDTLS_SSL_ASYNC_PRIVATE", -#endif /* MBEDTLS_SSL_ASYNC_PRIVATE */ -#if defined(MBEDTLS_SSL_CONTEXT_SERIALIZATION) - "MBEDTLS_SSL_CONTEXT_SERIALIZATION", -#endif /* MBEDTLS_SSL_CONTEXT_SERIALIZATION */ -#if defined(MBEDTLS_SSL_DEBUG_ALL) - "MBEDTLS_SSL_DEBUG_ALL", -#endif /* MBEDTLS_SSL_DEBUG_ALL */ -#if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) - "MBEDTLS_SSL_ENCRYPT_THEN_MAC", -#endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ -#if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) - "MBEDTLS_SSL_EXTENDED_MASTER_SECRET", -#endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */ -#if defined(MBEDTLS_SSL_FALLBACK_SCSV) - "MBEDTLS_SSL_FALLBACK_SCSV", -#endif /* MBEDTLS_SSL_FALLBACK_SCSV */ -#if defined(MBEDTLS_SSL_KEEP_PEER_CERTIFICATE) - "MBEDTLS_SSL_KEEP_PEER_CERTIFICATE", -#endif /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */ -#if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - "MBEDTLS_SSL_HW_RECORD_ACCEL", -#endif /* MBEDTLS_SSL_HW_RECORD_ACCEL */ -#if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING) - "MBEDTLS_SSL_CBC_RECORD_SPLITTING", -#endif /* MBEDTLS_SSL_CBC_RECORD_SPLITTING */ -#if defined(MBEDTLS_SSL_RENEGOTIATION) - "MBEDTLS_SSL_RENEGOTIATION", -#endif /* MBEDTLS_SSL_RENEGOTIATION */ -#if defined(MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO) - "MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO", -#endif /* MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO */ -#if defined(MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE) - "MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE", -#endif /* MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE */ -#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) - "MBEDTLS_SSL_MAX_FRAGMENT_LENGTH", -#endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ -#if defined(MBEDTLS_SSL_PROTO_SSL3) - "MBEDTLS_SSL_PROTO_SSL3", -#endif /* MBEDTLS_SSL_PROTO_SSL3 */ -#if defined(MBEDTLS_SSL_PROTO_TLS1) - "MBEDTLS_SSL_PROTO_TLS1", -#endif /* MBEDTLS_SSL_PROTO_TLS1 */ -#if defined(MBEDTLS_SSL_PROTO_TLS1_1) - "MBEDTLS_SSL_PROTO_TLS1_1", -#endif /* MBEDTLS_SSL_PROTO_TLS1_1 */ -#if defined(MBEDTLS_SSL_PROTO_TLS1_2) - "MBEDTLS_SSL_PROTO_TLS1_2", -#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ -#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL) - "MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL", -#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */ -#if defined(MBEDTLS_SSL_PROTO_DTLS) - "MBEDTLS_SSL_PROTO_DTLS", -#endif /* MBEDTLS_SSL_PROTO_DTLS */ -#if defined(MBEDTLS_SSL_ALPN) - "MBEDTLS_SSL_ALPN", -#endif /* MBEDTLS_SSL_ALPN */ -#if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) - "MBEDTLS_SSL_DTLS_ANTI_REPLAY", -#endif /* MBEDTLS_SSL_DTLS_ANTI_REPLAY */ -#if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) - "MBEDTLS_SSL_DTLS_HELLO_VERIFY", -#endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY */ -#if defined(MBEDTLS_SSL_DTLS_SRTP) - "MBEDTLS_SSL_DTLS_SRTP", -#endif /* MBEDTLS_SSL_DTLS_SRTP */ -#if defined(MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE) - "MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE", -#endif /* MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE */ -#if defined(MBEDTLS_SSL_DTLS_BADMAC_LIMIT) - "MBEDTLS_SSL_DTLS_BADMAC_LIMIT", -#endif /* MBEDTLS_SSL_DTLS_BADMAC_LIMIT */ -#if defined(MBEDTLS_SSL_SESSION_TICKETS) - "MBEDTLS_SSL_SESSION_TICKETS", -#endif /* MBEDTLS_SSL_SESSION_TICKETS */ -#if defined(MBEDTLS_SSL_EXPORT_KEYS) - "MBEDTLS_SSL_EXPORT_KEYS", -#endif /* MBEDTLS_SSL_EXPORT_KEYS */ -#if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) - "MBEDTLS_SSL_SERVER_NAME_INDICATION", -#endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION */ -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - "MBEDTLS_SSL_TRUNCATED_HMAC", -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ -#if defined(MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT) - "MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT", -#endif /* MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT */ -#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH) - "MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH", -#endif /* MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH */ -#if defined(MBEDTLS_TEST_CONSTANT_FLOW_MEMSAN) - "MBEDTLS_TEST_CONSTANT_FLOW_MEMSAN", -#endif /* MBEDTLS_TEST_CONSTANT_FLOW_MEMSAN */ -#if defined(MBEDTLS_TEST_CONSTANT_FLOW_VALGRIND) - "MBEDTLS_TEST_CONSTANT_FLOW_VALGRIND", -#endif /* MBEDTLS_TEST_CONSTANT_FLOW_VALGRIND */ -#if defined(MBEDTLS_TEST_HOOKS) - "MBEDTLS_TEST_HOOKS", -#endif /* MBEDTLS_TEST_HOOKS */ -#if defined(MBEDTLS_THREADING_ALT) - "MBEDTLS_THREADING_ALT", -#endif /* MBEDTLS_THREADING_ALT */ -#if defined(MBEDTLS_THREADING_PTHREAD) - "MBEDTLS_THREADING_PTHREAD", -#endif /* MBEDTLS_THREADING_PTHREAD */ -#if defined(MBEDTLS_USE_PSA_CRYPTO) - "MBEDTLS_USE_PSA_CRYPTO", -#endif /* MBEDTLS_USE_PSA_CRYPTO */ -#if defined(MBEDTLS_PSA_CRYPTO_CONFIG) - "MBEDTLS_PSA_CRYPTO_CONFIG", -#endif /* MBEDTLS_PSA_CRYPTO_CONFIG */ -#if defined(MBEDTLS_VERSION_FEATURES) - "MBEDTLS_VERSION_FEATURES", -#endif /* MBEDTLS_VERSION_FEATURES */ -#if defined(MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3) - "MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3", -#endif /* MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3 */ -#if defined(MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION) - "MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION", -#endif /* MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION */ -#if defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK) - "MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK", -#endif /* MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK */ -#if defined(MBEDTLS_X509_CHECK_KEY_USAGE) - "MBEDTLS_X509_CHECK_KEY_USAGE", -#endif /* MBEDTLS_X509_CHECK_KEY_USAGE */ -#if defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE) - "MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE", -#endif /* MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE */ -#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) - "MBEDTLS_X509_RSASSA_PSS_SUPPORT", -#endif /* MBEDTLS_X509_RSASSA_PSS_SUPPORT */ -#if defined(MBEDTLS_ZLIB_SUPPORT) - "MBEDTLS_ZLIB_SUPPORT", -#endif /* MBEDTLS_ZLIB_SUPPORT */ -#if defined(MBEDTLS_AESNI_C) - "MBEDTLS_AESNI_C", -#endif /* MBEDTLS_AESNI_C */ -#if defined(MBEDTLS_AES_C) - "MBEDTLS_AES_C", -#endif /* MBEDTLS_AES_C */ -#if defined(MBEDTLS_ARC4_C) - "MBEDTLS_ARC4_C", -#endif /* MBEDTLS_ARC4_C */ -#if defined(MBEDTLS_ASN1_PARSE_C) - "MBEDTLS_ASN1_PARSE_C", -#endif /* MBEDTLS_ASN1_PARSE_C */ -#if defined(MBEDTLS_ASN1_WRITE_C) - "MBEDTLS_ASN1_WRITE_C", -#endif /* MBEDTLS_ASN1_WRITE_C */ -#if defined(MBEDTLS_BASE64_C) - "MBEDTLS_BASE64_C", -#endif /* MBEDTLS_BASE64_C */ -#if defined(MBEDTLS_BIGNUM_C) - "MBEDTLS_BIGNUM_C", -#endif /* MBEDTLS_BIGNUM_C */ -#if defined(MBEDTLS_BLOWFISH_C) - "MBEDTLS_BLOWFISH_C", -#endif /* MBEDTLS_BLOWFISH_C */ -#if defined(MBEDTLS_CAMELLIA_C) - "MBEDTLS_CAMELLIA_C", -#endif /* MBEDTLS_CAMELLIA_C */ -#if defined(MBEDTLS_ARIA_C) - "MBEDTLS_ARIA_C", -#endif /* MBEDTLS_ARIA_C */ -#if defined(MBEDTLS_CCM_C) - "MBEDTLS_CCM_C", -#endif /* MBEDTLS_CCM_C */ -#if defined(MBEDTLS_CERTS_C) - "MBEDTLS_CERTS_C", -#endif /* MBEDTLS_CERTS_C */ -#if defined(MBEDTLS_CHACHA20_C) - "MBEDTLS_CHACHA20_C", -#endif /* MBEDTLS_CHACHA20_C */ -#if defined(MBEDTLS_CHACHAPOLY_C) - "MBEDTLS_CHACHAPOLY_C", -#endif /* MBEDTLS_CHACHAPOLY_C */ -#if defined(MBEDTLS_CIPHER_C) - "MBEDTLS_CIPHER_C", -#endif /* MBEDTLS_CIPHER_C */ -#if defined(MBEDTLS_CMAC_C) - "MBEDTLS_CMAC_C", -#endif /* MBEDTLS_CMAC_C */ -#if defined(MBEDTLS_CTR_DRBG_C) - "MBEDTLS_CTR_DRBG_C", -#endif /* MBEDTLS_CTR_DRBG_C */ -#if defined(MBEDTLS_DEBUG_C) - "MBEDTLS_DEBUG_C", -#endif /* MBEDTLS_DEBUG_C */ -#if defined(MBEDTLS_DES_C) - "MBEDTLS_DES_C", -#endif /* MBEDTLS_DES_C */ -#if defined(MBEDTLS_DHM_C) - "MBEDTLS_DHM_C", -#endif /* MBEDTLS_DHM_C */ -#if defined(MBEDTLS_ECDH_C) - "MBEDTLS_ECDH_C", -#endif /* MBEDTLS_ECDH_C */ -#if defined(MBEDTLS_ECDSA_C) - "MBEDTLS_ECDSA_C", -#endif /* MBEDTLS_ECDSA_C */ -#if defined(MBEDTLS_ECJPAKE_C) - "MBEDTLS_ECJPAKE_C", -#endif /* MBEDTLS_ECJPAKE_C */ -#if defined(MBEDTLS_ECP_C) - "MBEDTLS_ECP_C", -#endif /* MBEDTLS_ECP_C */ -#if defined(MBEDTLS_ENTROPY_C) - "MBEDTLS_ENTROPY_C", -#endif /* MBEDTLS_ENTROPY_C */ -#if defined(MBEDTLS_ERROR_C) - "MBEDTLS_ERROR_C", -#endif /* MBEDTLS_ERROR_C */ -#if defined(MBEDTLS_GCM_C) - "MBEDTLS_GCM_C", -#endif /* MBEDTLS_GCM_C */ -#if defined(MBEDTLS_HAVEGE_C) - "MBEDTLS_HAVEGE_C", -#endif /* MBEDTLS_HAVEGE_C */ -#if defined(MBEDTLS_HKDF_C) - "MBEDTLS_HKDF_C", -#endif /* MBEDTLS_HKDF_C */ -#if defined(MBEDTLS_HMAC_DRBG_C) - "MBEDTLS_HMAC_DRBG_C", -#endif /* MBEDTLS_HMAC_DRBG_C */ -#if defined(MBEDTLS_NIST_KW_C) - "MBEDTLS_NIST_KW_C", -#endif /* MBEDTLS_NIST_KW_C */ -#if defined(MBEDTLS_MD_C) - "MBEDTLS_MD_C", -#endif /* MBEDTLS_MD_C */ -#if defined(MBEDTLS_MD2_C) - "MBEDTLS_MD2_C", -#endif /* MBEDTLS_MD2_C */ -#if defined(MBEDTLS_MD4_C) - "MBEDTLS_MD4_C", -#endif /* MBEDTLS_MD4_C */ -#if defined(MBEDTLS_MD5_C) - "MBEDTLS_MD5_C", -#endif /* MBEDTLS_MD5_C */ -#if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) - "MBEDTLS_MEMORY_BUFFER_ALLOC_C", -#endif /* MBEDTLS_MEMORY_BUFFER_ALLOC_C */ -#if defined(MBEDTLS_NET_C) - "MBEDTLS_NET_C", -#endif /* MBEDTLS_NET_C */ -#if defined(MBEDTLS_OID_C) - "MBEDTLS_OID_C", -#endif /* MBEDTLS_OID_C */ -#if defined(MBEDTLS_PADLOCK_C) - "MBEDTLS_PADLOCK_C", -#endif /* MBEDTLS_PADLOCK_C */ -#if defined(MBEDTLS_PEM_PARSE_C) - "MBEDTLS_PEM_PARSE_C", -#endif /* MBEDTLS_PEM_PARSE_C */ -#if defined(MBEDTLS_PEM_WRITE_C) - "MBEDTLS_PEM_WRITE_C", -#endif /* MBEDTLS_PEM_WRITE_C */ -#if defined(MBEDTLS_PK_C) - "MBEDTLS_PK_C", -#endif /* MBEDTLS_PK_C */ -#if defined(MBEDTLS_PK_PARSE_C) - "MBEDTLS_PK_PARSE_C", -#endif /* MBEDTLS_PK_PARSE_C */ -#if defined(MBEDTLS_PK_WRITE_C) - "MBEDTLS_PK_WRITE_C", -#endif /* MBEDTLS_PK_WRITE_C */ -#if defined(MBEDTLS_PKCS5_C) - "MBEDTLS_PKCS5_C", -#endif /* MBEDTLS_PKCS5_C */ -#if defined(MBEDTLS_PKCS11_C) - "MBEDTLS_PKCS11_C", -#endif /* MBEDTLS_PKCS11_C */ -#if defined(MBEDTLS_PKCS12_C) - "MBEDTLS_PKCS12_C", -#endif /* MBEDTLS_PKCS12_C */ -#if defined(MBEDTLS_PLATFORM_C) - "MBEDTLS_PLATFORM_C", -#endif /* MBEDTLS_PLATFORM_C */ -#if defined(MBEDTLS_POLY1305_C) - "MBEDTLS_POLY1305_C", -#endif /* MBEDTLS_POLY1305_C */ -#if defined(MBEDTLS_PSA_CRYPTO_C) - "MBEDTLS_PSA_CRYPTO_C", -#endif /* MBEDTLS_PSA_CRYPTO_C */ -#if defined(MBEDTLS_PSA_CRYPTO_SE_C) - "MBEDTLS_PSA_CRYPTO_SE_C", -#endif /* MBEDTLS_PSA_CRYPTO_SE_C */ -#if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) - "MBEDTLS_PSA_CRYPTO_STORAGE_C", -#endif /* MBEDTLS_PSA_CRYPTO_STORAGE_C */ -#if defined(MBEDTLS_PSA_ITS_FILE_C) - "MBEDTLS_PSA_ITS_FILE_C", -#endif /* MBEDTLS_PSA_ITS_FILE_C */ -#if defined(MBEDTLS_RIPEMD160_C) - "MBEDTLS_RIPEMD160_C", -#endif /* MBEDTLS_RIPEMD160_C */ -#if defined(MBEDTLS_RSA_C) - "MBEDTLS_RSA_C", -#endif /* MBEDTLS_RSA_C */ -#if defined(MBEDTLS_SHA1_C) - "MBEDTLS_SHA1_C", -#endif /* MBEDTLS_SHA1_C */ -#if defined(MBEDTLS_SHA256_C) - "MBEDTLS_SHA256_C", -#endif /* MBEDTLS_SHA256_C */ -#if defined(MBEDTLS_SHA512_C) - "MBEDTLS_SHA512_C", -#endif /* MBEDTLS_SHA512_C */ -#if defined(MBEDTLS_SSL_CACHE_C) - "MBEDTLS_SSL_CACHE_C", -#endif /* MBEDTLS_SSL_CACHE_C */ -#if defined(MBEDTLS_SSL_COOKIE_C) - "MBEDTLS_SSL_COOKIE_C", -#endif /* MBEDTLS_SSL_COOKIE_C */ -#if defined(MBEDTLS_SSL_TICKET_C) - "MBEDTLS_SSL_TICKET_C", -#endif /* MBEDTLS_SSL_TICKET_C */ -#if defined(MBEDTLS_SSL_CLI_C) - "MBEDTLS_SSL_CLI_C", -#endif /* MBEDTLS_SSL_CLI_C */ -#if defined(MBEDTLS_SSL_SRV_C) - "MBEDTLS_SSL_SRV_C", -#endif /* MBEDTLS_SSL_SRV_C */ -#if defined(MBEDTLS_SSL_TLS_C) - "MBEDTLS_SSL_TLS_C", -#endif /* MBEDTLS_SSL_TLS_C */ -#if defined(MBEDTLS_THREADING_C) - "MBEDTLS_THREADING_C", -#endif /* MBEDTLS_THREADING_C */ -#if defined(MBEDTLS_TIMING_C) - "MBEDTLS_TIMING_C", -#endif /* MBEDTLS_TIMING_C */ -#if defined(MBEDTLS_VERSION_C) - "MBEDTLS_VERSION_C", -#endif /* MBEDTLS_VERSION_C */ -#if defined(MBEDTLS_X509_USE_C) - "MBEDTLS_X509_USE_C", -#endif /* MBEDTLS_X509_USE_C */ -#if defined(MBEDTLS_X509_CRT_PARSE_C) - "MBEDTLS_X509_CRT_PARSE_C", -#endif /* MBEDTLS_X509_CRT_PARSE_C */ -#if defined(MBEDTLS_X509_CRL_PARSE_C) - "MBEDTLS_X509_CRL_PARSE_C", -#endif /* MBEDTLS_X509_CRL_PARSE_C */ -#if defined(MBEDTLS_X509_CSR_PARSE_C) - "MBEDTLS_X509_CSR_PARSE_C", -#endif /* MBEDTLS_X509_CSR_PARSE_C */ -#if defined(MBEDTLS_X509_CREATE_C) - "MBEDTLS_X509_CREATE_C", -#endif /* MBEDTLS_X509_CREATE_C */ -#if defined(MBEDTLS_X509_CRT_WRITE_C) - "MBEDTLS_X509_CRT_WRITE_C", -#endif /* MBEDTLS_X509_CRT_WRITE_C */ -#if defined(MBEDTLS_X509_CSR_WRITE_C) - "MBEDTLS_X509_CSR_WRITE_C", -#endif /* MBEDTLS_X509_CSR_WRITE_C */ -#if defined(MBEDTLS_XTEA_C) - "MBEDTLS_XTEA_C", -#endif /* MBEDTLS_XTEA_C */ -#endif /* MBEDTLS_VERSION_FEATURES */ - NULL -}; - -int mbedtls_version_check_feature( const char *feature ) -{ - const char * const *idx = features; - - if( *idx == NULL ) - return( -2 ); - - if( feature == NULL ) - return( -1 ); - - while( *idx != NULL ) - { - if( !strcmp( *idx, feature ) ) - return( 0 ); - idx++; - } - return( -1 ); -} - -#endif /* MBEDTLS_VERSION_C */ diff --git a/third_party/mbedtls/x509.c b/third_party/mbedtls/x509.c index dd2d10987..dc5c5fac2 100644 --- a/third_party/mbedtls/x509.c +++ b/third_party/mbedtls/x509.c @@ -1,10 +1,24 @@ -/* clang-format off */ +#include "libc/fmt/fmt.h" +#include "libc/mem/mem.h" +#include "libc/stdio/stdio.h" +#include "libc/time/struct/tm.h" +#include "third_party/mbedtls/asn1.h" +#include "third_party/mbedtls/certs.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/x509.h" +#include "third_party/mbedtls/x509_crt.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * X.509 common functions for parsing and verification * @@ -34,37 +48,8 @@ asm(".include \"libc/disclaimer.inc\""); * http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf */ -#include "libc/time/struct/tm.h" -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_X509_USE_C) -#include "third_party/mbedtls/x509.h" -#include "third_party/mbedtls/asn1.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/oid.h" - - -#if defined(MBEDTLS_PEM_PARSE_C) -#include "third_party/mbedtls/pem.h" -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_free free -#define mbedtls_calloc calloc -#define mbedtls_printf printf -#define mbedtls_snprintf snprintf -#endif - -#if defined(MBEDTLS_HAVE_TIME) -#include "third_party/mbedtls/platform_time.h" -#endif -#if defined(MBEDTLS_HAVE_TIME_DATE) -#include "third_party/mbedtls/platform_util.h" -#endif - #define CHECK(code) if( ( ret = ( code ) ) != 0 ){ return( ret ); } #define CHECK_RANGE(min, max, val) \ do \ @@ -134,209 +119,6 @@ int mbedtls_x509_get_alg( unsigned char **p, const unsigned char *end, return( 0 ); } -#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) -/* - * HashAlgorithm ::= AlgorithmIdentifier - * - * AlgorithmIdentifier ::= SEQUENCE { - * algorithm OBJECT IDENTIFIER, - * parameters ANY DEFINED BY algorithm OPTIONAL } - * - * For HashAlgorithm, parameters MUST be NULL or absent. - */ -static int x509_get_hash_alg( const mbedtls_x509_buf *alg, mbedtls_md_type_t *md_alg ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - unsigned char *p; - const unsigned char *end; - mbedtls_x509_buf md_oid; - size_t len; - - /* Make sure we got a SEQUENCE and setup bounds */ - if( alg->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); - - p = alg->p; - end = p + alg->len; - - if( p >= end ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - - /* Parse md_oid */ - md_oid.tag = *p; - - if( ( ret = mbedtls_asn1_get_tag( &p, end, &md_oid.len, MBEDTLS_ASN1_OID ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - - md_oid.p = p; - p += md_oid.len; - - /* Get md_alg from md_oid */ - if( ( ret = mbedtls_oid_get_md_alg( &md_oid, md_alg ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - - /* Make sure params is absent of NULL */ - if( p == end ) - return( 0 ); - - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_NULL ) ) != 0 || len != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - - if( p != end ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} - -/* - * RSASSA-PSS-params ::= SEQUENCE { - * hashAlgorithm [0] HashAlgorithm DEFAULT sha1Identifier, - * maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT mgf1SHA1Identifier, - * saltLength [2] INTEGER DEFAULT 20, - * trailerField [3] INTEGER DEFAULT 1 } - * -- Note that the tags in this Sequence are explicit. - * - * RFC 4055 (which defines use of RSASSA-PSS in PKIX) states that the value - * of trailerField MUST be 1, and PKCS#1 v2.2 doesn't even define any other - * option. Enfore this at parsing time. - */ -int mbedtls_x509_get_rsassa_pss_params( const mbedtls_x509_buf *params, - mbedtls_md_type_t *md_alg, mbedtls_md_type_t *mgf_md, - int *salt_len ) -{ - int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - unsigned char *p; - const unsigned char *end, *end2; - size_t len; - mbedtls_x509_buf alg_id, alg_params; - - /* First set everything to defaults */ - *md_alg = MBEDTLS_MD_SHA1; - *mgf_md = MBEDTLS_MD_SHA1; - *salt_len = 20; - - /* Make sure params is a SEQUENCE and setup bounds */ - if( params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); - - p = (unsigned char *) params->p; - end = p + params->len; - - if( p == end ) - return( 0 ); - - /* - * HashAlgorithm - */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ) == 0 ) - { - end2 = p + len; - - /* HashAlgorithm ::= AlgorithmIdentifier (without parameters) */ - if( ( ret = mbedtls_x509_get_alg_null( &p, end2, &alg_id ) ) != 0 ) - return( ret ); - - if( ( ret = mbedtls_oid_get_md_alg( &alg_id, md_alg ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - - if( p != end2 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - - if( p == end ) - return( 0 ); - - /* - * MaskGenAlgorithm - */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 1 ) ) == 0 ) - { - end2 = p + len; - - /* MaskGenAlgorithm ::= AlgorithmIdentifier (params = HashAlgorithm) */ - if( ( ret = mbedtls_x509_get_alg( &p, end2, &alg_id, &alg_params ) ) != 0 ) - return( ret ); - - /* Only MFG1 is recognised for now */ - if( MBEDTLS_OID_CMP( MBEDTLS_OID_MGF1, &alg_id ) != 0 ) - return( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE + - MBEDTLS_ERR_OID_NOT_FOUND ); - - /* Parse HashAlgorithm */ - if( ( ret = x509_get_hash_alg( &alg_params, mgf_md ) ) != 0 ) - return( ret ); - - if( p != end2 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - - if( p == end ) - return( 0 ); - - /* - * salt_len - */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 2 ) ) == 0 ) - { - end2 = p + len; - - if( ( ret = mbedtls_asn1_get_int( &p, end2, salt_len ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - - if( p != end2 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - - if( p == end ) - return( 0 ); - - /* - * trailer_field (if present, must be 1) - */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 3 ) ) == 0 ) - { - int trailer_field; - - end2 = p + len; - - if( ( ret = mbedtls_asn1_get_int( &p, end2, &trailer_field ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - - if( p != end2 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - - if( trailer_field != 1 ) - return( MBEDTLS_ERR_X509_INVALID_ALG ); - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - - if( p != end ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); -} -#endif /* MBEDTLS_X509_RSASSA_PSS_SUPPORT */ - /* * AttributeTypeAndValue ::= SEQUENCE { * type AttributeType, @@ -429,7 +211,7 @@ static int x509_get_attr_type_value( unsigned char **p, * this list, eg mbedtls_x509_dn_gets(). */ int mbedtls_x509_get_name( unsigned char **p, const unsigned char *end, - mbedtls_x509_name *cur ) + mbedtls_x509_name *cur ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t set_len; @@ -668,35 +450,10 @@ int mbedtls_x509_get_sig_alg( const mbedtls_x509_buf *sig_oid, const mbedtls_x50 if( ( ret = mbedtls_oid_get_sig_alg( sig_oid, md_alg, pk_alg ) ) != 0 ) return( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG + ret ); -#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) - if( *pk_alg == MBEDTLS_PK_RSASSA_PSS ) - { - mbedtls_pk_rsassa_pss_options *pss_opts; - - pss_opts = mbedtls_calloc( 1, sizeof( mbedtls_pk_rsassa_pss_options ) ); - if( pss_opts == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); - - ret = mbedtls_x509_get_rsassa_pss_params( sig_params, - md_alg, - &pss_opts->mgf1_hash_id, - &pss_opts->expected_salt_len ); - if( ret != 0 ) - { - mbedtls_free( pss_opts ); - return( ret ); - } - - *sig_opts = (void *) pss_opts; - } - else -#endif /* MBEDTLS_X509_RSASSA_PSS_SUPPORT */ - { - /* Make sure parameters are absent or NULL */ - if( ( sig_params->tag != MBEDTLS_ASN1_NULL && sig_params->tag != 0 ) || - sig_params->len != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG ); - } + /* Make sure parameters are absent or NULL */ + if( ( sig_params->tag != MBEDTLS_ASN1_NULL && sig_params->tag != 0 ) || + sig_params->len != 0 ) + return( MBEDTLS_ERR_X509_INVALID_ALG ); return( 0 ); } @@ -737,9 +494,16 @@ int mbedtls_x509_get_ext( unsigned char **p, const unsigned char *end, return( 0 ); } -/* - * Store the name in printable form into buf; no more - * than size characters will be written +/** + * \brief Store the certificate DN in printable form into buf; + * no more than size characters will be written. + * + * \param buf Buffer to write to + * \param size Maximum size of buffer + * \param dn The X509 name to represent + * + * \return The length of the string written (not including the + * terminated nul byte), or a negative error code. */ int mbedtls_x509_dn_gets( char *buf, size_t size, const mbedtls_x509_name *dn ) { @@ -799,9 +563,16 @@ int mbedtls_x509_dn_gets( char *buf, size_t size, const mbedtls_x509_name *dn ) return( (int) ( size - n ) ); } -/* - * Store the serial in printable form into buf; no more - * than size characters will be written +/** + * \brief Store the certificate serial in printable form into buf; + * no more than size characters will be written. + * + * \param buf Buffer to write to + * \param size Maximum size of buffer + * \param serial The X509 serial to represent + * + * \return The length of the string written (not including the + * terminated nul byte), or a negative error code. */ int mbedtls_x509_serial_gets( char *buf, size_t size, const mbedtls_x509_buf *serial ) { @@ -853,29 +624,6 @@ int mbedtls_x509_sig_alg_gets( char *buf, size_t size, const mbedtls_x509_buf *s ret = mbedtls_snprintf( p, n, "%s", desc ); MBEDTLS_X509_SAFE_SNPRINTF; -#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) - if( pk_alg == MBEDTLS_PK_RSASSA_PSS ) - { - const mbedtls_pk_rsassa_pss_options *pss_opts; - const mbedtls_md_info_t *md_info, *mgf_md_info; - - pss_opts = (const mbedtls_pk_rsassa_pss_options *) sig_opts; - - md_info = mbedtls_md_info_from_type( md_alg ); - mgf_md_info = mbedtls_md_info_from_type( pss_opts->mgf1_hash_id ); - - ret = mbedtls_snprintf( p, n, " (%s, MGF1-%s, 0x%02X)", - md_info ? mbedtls_md_get_name( md_info ) : "???", - mgf_md_info ? mbedtls_md_get_name( mgf_md_info ) : "???", - (unsigned int) pss_opts->expected_salt_len ); - MBEDTLS_X509_SAFE_SNPRINTF; - } -#else - ((void) pk_alg); - ((void) md_alg); - ((void) sig_opts); -#endif /* MBEDTLS_X509_RSASSA_PSS_SUPPORT */ - return( (int)( size - n ) ); } @@ -964,48 +712,58 @@ static int x509_check_time( const mbedtls_x509_time *before, const mbedtls_x509_ return( 0 ); } -int mbedtls_x509_time_is_past( const mbedtls_x509_time *to ) -{ - mbedtls_x509_time now; - - if( x509_get_current_time( &now ) != 0 ) - return( 1 ); - - return( x509_check_time( &now, to ) ); -} - -int mbedtls_x509_time_is_future( const mbedtls_x509_time *from ) -{ - mbedtls_x509_time now; - - if( x509_get_current_time( &now ) != 0 ) - return( 1 ); - - return( x509_check_time( from, &now ) ); -} - -#else /* MBEDTLS_HAVE_TIME_DATE */ - -int mbedtls_x509_time_is_past( const mbedtls_x509_time *to ) -{ - ((void) to); - return( 0 ); -} - -int mbedtls_x509_time_is_future( const mbedtls_x509_time *from ) -{ - ((void) from); - return( 0 ); -} #endif /* MBEDTLS_HAVE_TIME_DATE */ +/** + * \brief Check a given mbedtls_x509_time against the system time + * and tell if it's in the past. + * + * \note Intended usage is "if( is_past( valid_to ) ) ERROR". + * Hence the return value of 1 if on internal errors. + * + * \param to mbedtls_x509_time to check + * + * \return 1 if the given time is in the past or an error occurred, + * 0 otherwise. + */ +int mbedtls_x509_time_is_past( const mbedtls_x509_time *to ) { +#if defined(MBEDTLS_HAVE_TIME_DATE) + mbedtls_x509_time now; + if (x509_get_current_time(&now)) return 1; + return x509_check_time(&now, to); +#else /* MBEDTLS_HAVE_TIME_DATE */ + return 0; +#endif /* MBEDTLS_HAVE_TIME_DATE */ +} + +/** + * \brief Check a given mbedtls_x509_time against the system time + * and tell if it's in the future. + * + * \note Intended usage is "if( is_future( valid_from ) ) ERROR". + * Hence the return value of 1 if on internal errors. + * + * \param from mbedtls_x509_time to check + * + * \return 1 if the given time is in the future or an error occurred, + * 0 otherwise. + */ +int mbedtls_x509_time_is_future( const mbedtls_x509_time *from ) { +#if defined(MBEDTLS_HAVE_TIME_DATE) + mbedtls_x509_time now; + if (x509_get_current_time(&now)) return 1; + return x509_check_time(from, &now); +#else + return 0; +#endif +} + #if defined(MBEDTLS_SELF_TEST) -#include "third_party/mbedtls/x509_crt.h" -#include "third_party/mbedtls/certs.h" - -/* - * Checkup routine +/** + * \brief Checkup routine + * + * \return 0 if successful, or 1 if the test failed */ int mbedtls_x509_self_test( int verbose ) { diff --git a/third_party/mbedtls/x509.h b/third_party/mbedtls/x509.h index fdb6250e6..46a430799 100644 --- a/third_party/mbedtls/x509.h +++ b/third_party/mbedtls/x509.h @@ -1,63 +1,12 @@ -/* clang-format off */ - -/** - * \file x509.h - * - * \brief X.509 generic defines and structures - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_X509_H -#define MBEDTLS_X509_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - +#ifndef MBEDTLS_X509_H_ +#define MBEDTLS_X509_H_ #include "third_party/mbedtls/asn1.h" +#include "third_party/mbedtls/config.h" #include "third_party/mbedtls/pk.h" - -#if defined(MBEDTLS_RSA_C) #include "third_party/mbedtls/rsa.h" -#endif - -/** - * \addtogroup x509_module - * \{ - */ - -#if !defined(MBEDTLS_X509_MAX_INTERMEDIATE_CA) -/** - * Maximum number of intermediate CAs in a verification chain. - * That is, maximum length of the chain, excluding the end-entity certificate - * and the trusted root certificate. - * - * Set this to a low value to prevent an adversary from making you waste - * resources verifying an overlong certificate chain. - */ -#define MBEDTLS_X509_MAX_INTERMEDIATE_CA 8 -#endif - -/** - * \name X509 Error codes - * \{ - */ +COSMOPOLITAN_C_START_ +/* clang-format off */ + #define MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE -0x2080 /**< Unavailable feature, e.g. RSA hashing/encryption combination. */ #define MBEDTLS_ERR_X509_UNKNOWN_OID -0x2100 /**< Requested OID is unknown. */ #define MBEDTLS_ERR_X509_INVALID_FORMAT -0x2180 /**< The CRT/CRL/CSR format is invalid, e.g. different type expected. */ @@ -78,12 +27,7 @@ #define MBEDTLS_ERR_X509_FILE_IO_ERROR -0x2900 /**< Read/write of file failed. */ #define MBEDTLS_ERR_X509_BUFFER_TOO_SMALL -0x2980 /**< Destination buffer is too small. */ #define MBEDTLS_ERR_X509_FATAL_ERROR -0x3000 /**< A fatal error occurred, eg the chain is too long or the vrfy callback failed. */ -/* \} name */ -/** - * \name X509 Verify codes - * \{ - */ /* Reminder: update x509_crt_verify_strings[] in library/x509_crt.c */ #define MBEDTLS_X509_BADCERT_EXPIRED 0x01 /**< The certificate validity has expired. */ #define MBEDTLS_X509_BADCERT_REVOKED 0x02 /**< The certificate has been revoked (is on a CRL). */ @@ -106,9 +50,6 @@ #define MBEDTLS_X509_BADCRL_BAD_PK 0x040000 /**< The CRL is signed with an unacceptable PK alg (eg RSA vs ECDSA). */ #define MBEDTLS_X509_BADCRL_BAD_KEY 0x080000 /**< The CRL is signed with an unacceptable key (eg bad curve, RSA too short). */ -/* \} name */ -/* \} addtogroup x509_module */ - /* * X.509 v3 Subject Alternative Name types. * otherName [0] OtherName, @@ -194,19 +135,6 @@ #define MBEDTLS_X509_MAX_DN_NAME_SIZE 256 /**< Maximum value size of a DN entry */ -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \addtogroup x509_module - * \{ */ - -/** - * \name Structures for parsing X.509 certificates, CRLs and CSRs - * \{ - */ - /** * Type-length-value structure that allows for ASN1 using DER. */ @@ -236,126 +164,34 @@ typedef struct mbedtls_x509_time } mbedtls_x509_time; -/** \} name Structures for parsing X.509 certificates, CRLs and CSRs */ -/** \} addtogroup x509_module */ - -/** - * \brief Store the certificate DN in printable form into buf; - * no more than size characters will be written. - * - * \param buf Buffer to write to - * \param size Maximum size of buffer - * \param dn The X509 name to represent - * - * \return The length of the string written (not including the - * terminated nul byte), or a negative error code. - */ -int mbedtls_x509_dn_gets( char *buf, size_t size, const mbedtls_x509_name *dn ); - -/** - * \brief Store the certificate serial in printable form into buf; - * no more than size characters will be written. - * - * \param buf Buffer to write to - * \param size Maximum size of buffer - * \param serial The X509 serial to represent - * - * \return The length of the string written (not including the - * terminated nul byte), or a negative error code. - */ -int mbedtls_x509_serial_gets( char *buf, size_t size, const mbedtls_x509_buf *serial ); - -/** - * \brief Check a given mbedtls_x509_time against the system time - * and tell if it's in the past. - * - * \note Intended usage is "if( is_past( valid_to ) ) ERROR". - * Hence the return value of 1 if on internal errors. - * - * \param to mbedtls_x509_time to check - * - * \return 1 if the given time is in the past or an error occurred, - * 0 otherwise. - */ -int mbedtls_x509_time_is_past( const mbedtls_x509_time *to ); - -/** - * \brief Check a given mbedtls_x509_time against the system time - * and tell if it's in the future. - * - * \note Intended usage is "if( is_future( valid_from ) ) ERROR". - * Hence the return value of 1 if on internal errors. - * - * \param from mbedtls_x509_time to check - * - * \return 1 if the given time is in the future or an error occurred, - * 0 otherwise. - */ -int mbedtls_x509_time_is_future( const mbedtls_x509_time *from ); - -#if defined(MBEDTLS_SELF_TEST) - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int mbedtls_x509_self_test( int verbose ); - -#endif /* MBEDTLS_SELF_TEST */ - -/* - * Internal module functions. You probably do not want to use these unless you - * know you do. - */ -int mbedtls_x509_get_name( unsigned char **p, const unsigned char *end, - mbedtls_x509_name *cur ); -int mbedtls_x509_get_alg_null( unsigned char **p, const unsigned char *end, - mbedtls_x509_buf *alg ); -int mbedtls_x509_get_alg( unsigned char **p, const unsigned char *end, - mbedtls_x509_buf *alg, mbedtls_x509_buf *params ); -#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) -int mbedtls_x509_get_rsassa_pss_params( const mbedtls_x509_buf *params, - mbedtls_md_type_t *md_alg, mbedtls_md_type_t *mgf_md, - int *salt_len ); -#endif -int mbedtls_x509_get_sig( unsigned char **p, const unsigned char *end, mbedtls_x509_buf *sig ); -int mbedtls_x509_get_sig_alg( const mbedtls_x509_buf *sig_oid, const mbedtls_x509_buf *sig_params, - mbedtls_md_type_t *md_alg, mbedtls_pk_type_t *pk_alg, - void **sig_opts ); -int mbedtls_x509_get_time( unsigned char **p, const unsigned char *end, - mbedtls_x509_time *t ); -int mbedtls_x509_get_serial( unsigned char **p, const unsigned char *end, - mbedtls_x509_buf *serial ); -int mbedtls_x509_get_ext( unsigned char **p, const unsigned char *end, - mbedtls_x509_buf *ext, int tag ); -int mbedtls_x509_sig_alg_gets( char *buf, size_t size, const mbedtls_x509_buf *sig_oid, - mbedtls_pk_type_t pk_alg, mbedtls_md_type_t md_alg, - const void *sig_opts ); -int mbedtls_x509_key_size_helper( char *buf, size_t buf_size, const char *name ); -int mbedtls_x509_string_to_names( mbedtls_asn1_named_data **head, const char *name ); -int mbedtls_x509_set_extension( mbedtls_asn1_named_data **head, const char *oid, size_t oid_len, - int critical, const unsigned char *val, - size_t val_len ); -int mbedtls_x509_write_extensions( unsigned char **p, unsigned char *start, - mbedtls_asn1_named_data *first ); -int mbedtls_x509_write_names( unsigned char **p, unsigned char *start, - mbedtls_asn1_named_data *first ); -int mbedtls_x509_write_sig( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len, - unsigned char *sig, size_t size ); +int mbedtls_x509_dn_gets( char *, size_t, const mbedtls_x509_name * ); +int mbedtls_x509_get_alg( unsigned char **, const unsigned char *, mbedtls_x509_buf *, mbedtls_x509_buf * ); +int mbedtls_x509_get_alg_null( unsigned char **, const unsigned char *, mbedtls_x509_buf * ); +int mbedtls_x509_get_ext( unsigned char **, const unsigned char *, mbedtls_x509_buf *, int ); +int mbedtls_x509_get_name( unsigned char **, const unsigned char *, mbedtls_x509_name * ); +int mbedtls_x509_get_serial( unsigned char **, const unsigned char *, mbedtls_x509_buf * ); +int mbedtls_x509_get_sig( unsigned char **, const unsigned char *, mbedtls_x509_buf * ); +int mbedtls_x509_get_sig_alg( const mbedtls_x509_buf *, const mbedtls_x509_buf *, mbedtls_md_type_t *, mbedtls_pk_type_t *, void ** ); +int mbedtls_x509_get_time( unsigned char **, const unsigned char *, mbedtls_x509_time * ); +int mbedtls_x509_key_size_helper( char *, size_t, const char * ); +int mbedtls_x509_self_test( int ); +int mbedtls_x509_serial_gets( char *, size_t, const mbedtls_x509_buf * ); +int mbedtls_x509_set_extension( mbedtls_asn1_named_data **, const char *, size_t, int, const unsigned char *, size_t ); +int mbedtls_x509_sig_alg_gets( char *, size_t, const mbedtls_x509_buf *, mbedtls_pk_type_t, mbedtls_md_type_t, const void * ); +int mbedtls_x509_string_to_names( mbedtls_asn1_named_data **, const char * ); +int mbedtls_x509_time_is_future( const mbedtls_x509_time * ); +int mbedtls_x509_time_is_past( const mbedtls_x509_time * ); +int mbedtls_x509_write_extensions( unsigned char **, unsigned char *, mbedtls_asn1_named_data * ); +int mbedtls_x509_write_names( unsigned char **, unsigned char *, mbedtls_asn1_named_data * ); +int mbedtls_x509_write_sig( unsigned char **, unsigned char *, const char *, size_t, unsigned char *, size_t ); #define MBEDTLS_X509_SAFE_SNPRINTF \ do { \ if( ret < 0 || (size_t) ret >= n ) \ return( MBEDTLS_ERR_X509_BUFFER_TOO_SMALL ); \ - \ - n -= (size_t) ret; \ + n -= (size_t) ret; \ p += (size_t) ret; \ } while( 0 ) -#ifdef __cplusplus -} -#endif - -#endif /* x509.h */ +COSMOPOLITAN_C_END_ +#endif /* MBEDTLS_X509_H_ */ diff --git a/third_party/mbedtls/x509_create.c b/third_party/mbedtls/x509_create.c index 254e8352b..b6c1d747f 100644 --- a/third_party/mbedtls/x509_create.c +++ b/third_party/mbedtls/x509_create.c @@ -1,5 +1,16 @@ -/* clang-format off */ +#include "third_party/mbedtls/asn1write.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/x509.h" +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + +/* clang-format off */ /* * X.509 base functions for creating certificates / CSRs * @@ -19,16 +30,8 @@ * limitations under the License. */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_X509_CREATE_C) -#include "third_party/mbedtls/x509.h" -#include "third_party/mbedtls/asn1write.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/oid.h" - - /* Structure linking OIDs for X.509 DN AttributeTypes to their * string representations and default string encodings used by Mbed TLS. */ typedef struct { @@ -207,7 +210,7 @@ exit: * to store the critical boolean for us */ int mbedtls_x509_set_extension( mbedtls_asn1_named_data **head, const char *oid, size_t oid_len, - int critical, const unsigned char *val, size_t val_len ) + int critical, const unsigned char *val, size_t val_len ) { mbedtls_asn1_named_data *cur; @@ -357,7 +360,7 @@ static int x509_write_extension( unsigned char **p, unsigned char *start, * } */ int mbedtls_x509_write_extensions( unsigned char **p, unsigned char *start, - mbedtls_asn1_named_data *first ) + mbedtls_asn1_named_data *first ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t len = 0; diff --git a/third_party/mbedtls/x509_crl.c b/third_party/mbedtls/x509_crl.c index 53cafbd67..9e70ff0d7 100644 --- a/third_party/mbedtls/x509_crl.c +++ b/third_party/mbedtls/x509_crl.c @@ -1,10 +1,17 @@ -/* clang-format off */ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/x509_crl.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * X.509 Certidicate Revocation List (CRL) parsing * @@ -34,35 +41,8 @@ asm(".include \"libc/disclaimer.inc\""); * http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_X509_CRL_PARSE_C) -#include "third_party/mbedtls/x509_crl.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/oid.h" -#include "third_party/mbedtls/platform_util.h" - - -#if defined(MBEDTLS_PEM_PARSE_C) -#include "third_party/mbedtls/pem.h" -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_free free -#define mbedtls_calloc calloc -#define mbedtls_snprintf snprintf -#endif - -#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) -#else -#endif - -#if defined(MBEDTLS_FS_IO) || defined(EFIX64) || defined(EFI32) -#endif - /* * Version ::= INTEGER { v1(0), v2(1) } */ @@ -593,7 +573,6 @@ int mbedtls_x509_crl_parse( mbedtls_x509_crl *chain, const unsigned char *buf, s return( mbedtls_x509_crl_parse_der( chain, buf, buflen ) ); } -#if defined(MBEDTLS_FS_IO) /* * Load one or more CRLs and add them to the chained list */ @@ -613,7 +592,6 @@ int mbedtls_x509_crl_parse_file( mbedtls_x509_crl *chain, const char *path ) return( ret ); } -#endif /* MBEDTLS_FS_IO */ /* * Return an informational string about the certificate. @@ -720,10 +698,6 @@ void mbedtls_x509_crl_free( mbedtls_x509_crl *crl ) do { -#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) - mbedtls_free( crl_cur->sig_opts ); -#endif - name_cur = crl_cur->issuer.next; while( name_cur != NULL ) { diff --git a/third_party/mbedtls/x509_crl.h b/third_party/mbedtls/x509_crl.h index a31f849e4..c742a1245 100644 --- a/third_party/mbedtls/x509_crl.h +++ b/third_party/mbedtls/x509_crl.h @@ -1,36 +1,8 @@ -/* clang-format off */ - -/** - * \file x509_crl.h - * - * \brief X.509 certificate revocation list parsing - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ #ifndef MBEDTLS_X509_CRL_H #define MBEDTLS_X509_CRL_H - -#if !defined(MBEDTLS_CONFIG_FILE) #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/x509.h" +/* clang-format off */ #ifdef __cplusplus extern "C" { @@ -122,7 +94,6 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, */ int mbedtls_x509_crl_parse( mbedtls_x509_crl *chain, const unsigned char *buf, size_t buflen ); -#if defined(MBEDTLS_FS_IO) /** * \brief Load one or more CRLs and append them to the chained list * @@ -134,7 +105,6 @@ int mbedtls_x509_crl_parse( mbedtls_x509_crl *chain, const unsigned char *buf, s * \return 0 if successful, or a specific X509 or PEM error code */ int mbedtls_x509_crl_parse_file( mbedtls_x509_crl *chain, const char *path ); -#endif /* MBEDTLS_FS_IO */ /** * \brief Returns an informational string about the CRL. diff --git a/third_party/mbedtls/x509_crt.c b/third_party/mbedtls/x509_crt.c index 1398a37bb..680ad461f 100644 --- a/third_party/mbedtls/x509_crt.c +++ b/third_party/mbedtls/x509_crt.c @@ -1,5 +1,25 @@ +#include "libc/bits/bits.h" +#include "libc/calls/calls.h" +#include "libc/calls/struct/dirent.h" +#include "libc/calls/struct/stat.h" +#include "libc/fmt/fmt.h" +#include "libc/limits.h" +#include "libc/mem/mem.h" +#include "libc/stdio/stdio.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/x509_crt.h" /* clang-format off */ +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + /* * X.509 certificate parsing and verification * @@ -31,41 +51,8 @@ * [SIRO] https://cabforum.org/wp-content/uploads/Chunghwatelecom201503cabforumV4.pdf */ -#include "libc/limits.h" -#include "libc/calls/struct/stat.h" -#include "libc/calls/struct/dirent.h" -#include "libc/calls/struct/dirent.h" -#include "libc/calls/calls.h" -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_X509_CRT_PARSE_C) -#include "third_party/mbedtls/x509_crt.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/oid.h" -#include "third_party/mbedtls/platform_util.h" - -#if defined(MBEDTLS_PEM_PARSE_C) -#include "third_party/mbedtls/pem.h" -#endif - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/psa_util.h" -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_free free -#define mbedtls_calloc calloc -#define mbedtls_snprintf snprintf -#endif - -#if defined(MBEDTLS_THREADING_C) -#include "third_party/mbedtls/threading.h" -#endif - /* * Item in a verification chain: cert and flags for it */ @@ -82,8 +69,7 @@ typedef struct { /* * Default profile */ -const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_default = -{ +const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_default = { #if defined(MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES) /* Allow SHA-1 (weak, but still safe in controlled environments) */ MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA1 ) | @@ -101,8 +87,7 @@ const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_default = /* * Next-default profile */ -const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_next = -{ +const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_next = { /* Hashes from SHA-256 and above */ MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA256 ) | MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA384 ) | @@ -126,8 +111,7 @@ const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_next = /* * NSA Suite B Profile */ -const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_suiteb = -{ +const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_suiteb = { /* Only SHA-256 and 384 */ MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA256 ) | MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA384 ), @@ -152,12 +136,10 @@ static int x509_profile_check_md_alg( const mbedtls_x509_crt_profile *profile, mbedtls_md_type_t md_alg ) { if( md_alg == MBEDTLS_MD_NONE ) - return( -1 ); - - if( ( profile->allowed_mds & MBEDTLS_X509_ID_FLAG( md_alg ) ) != 0 ) - return( 0 ); - - return( -1 ); + return -1; + if( ( profile->allowed_mds & MBEDTLS_X509_ID_FLAG( md_alg ) ) ) + return 0; + return -1; } /* @@ -168,12 +150,10 @@ static int x509_profile_check_pk_alg( const mbedtls_x509_crt_profile *profile, mbedtls_pk_type_t pk_alg ) { if( pk_alg == MBEDTLS_PK_NONE ) - return( -1 ); - - if( ( profile->allowed_pks & MBEDTLS_X509_ID_FLAG( pk_alg ) ) != 0 ) - return( 0 ); - - return( -1 ); + return -1; + if( ( profile->allowed_pks & MBEDTLS_X509_ID_FLAG( pk_alg ) ) ) + return 0; + return -1; } /* @@ -184,35 +164,28 @@ static int x509_profile_check_key( const mbedtls_x509_crt_profile *profile, const mbedtls_pk_context *pk ) { const mbedtls_pk_type_t pk_alg = mbedtls_pk_get_type( pk ); - #if defined(MBEDTLS_RSA_C) if( pk_alg == MBEDTLS_PK_RSA || pk_alg == MBEDTLS_PK_RSASSA_PSS ) { if( mbedtls_pk_get_bitlen( pk ) >= profile->rsa_min_bitlen ) - return( 0 ); - - return( -1 ); + return 0; + return -1; } #endif - #if defined(MBEDTLS_ECP_C) if( pk_alg == MBEDTLS_PK_ECDSA || pk_alg == MBEDTLS_PK_ECKEY || pk_alg == MBEDTLS_PK_ECKEY_DH ) { const mbedtls_ecp_group_id gid = mbedtls_pk_ec( *pk )->grp.id; - if( gid == MBEDTLS_ECP_DP_NONE ) - return( -1 ); - - if( ( profile->allowed_curves & MBEDTLS_X509_ID_FLAG( gid ) ) != 0 ) - return( 0 ); - - return( -1 ); + return -1; + if( ( profile->allowed_curves & MBEDTLS_X509_ID_FLAG( gid ) ) ) + return 0; + return -1; } #endif - - return( -1 ); + return -1; } /* @@ -223,25 +196,20 @@ static int x509_memcasecmp( const void *s1, const void *s2, size_t len ) size_t i; unsigned char diff; const unsigned char *n1 = s1, *n2 = s2; - for( i = 0; i < len; i++ ) { diff = n1[i] ^ n2[i]; - if( diff == 0 ) continue; - if( diff == 32 && ( ( n1[i] >= 'a' && n1[i] <= 'z' ) || ( n1[i] >= 'A' && n1[i] <= 'Z' ) ) ) { continue; } - - return( -1 ); + return -1; } - - return( 0 ); + return 0; } /* @@ -251,11 +219,9 @@ static int x509_check_wildcard( const char *cn, const mbedtls_x509_buf *name ) { size_t i; size_t cn_idx = 0, cn_len = strlen( cn ); - /* We can't have a match if there is no wildcard to match */ if( name->len < 3 || name->p[0] != '*' || name->p[1] != '.' ) - return( -1 ); - + return -1; for( i = 0; i < cn_len; ++i ) { if( cn[i] == '.' ) @@ -264,17 +230,14 @@ static int x509_check_wildcard( const char *cn, const mbedtls_x509_buf *name ) break; } } - if( cn_idx == 0 ) - return( -1 ); - + return -1; if( cn_len - cn_idx == name->len - 1 && x509_memcasecmp( name->p + 1, cn + cn_idx, name->len - 1 ) == 0 ) { - return( 0 ); + return 0; } - - return( -1 ); + return -1; } /* @@ -289,18 +252,16 @@ static int x509_string_cmp( const mbedtls_x509_buf *a, const mbedtls_x509_buf *b a->len == b->len && memcmp( a->p, b->p, b->len ) == 0 ) { - return( 0 ); + return 0; } - if( ( a->tag == MBEDTLS_ASN1_UTF8_STRING || a->tag == MBEDTLS_ASN1_PRINTABLE_STRING ) && ( b->tag == MBEDTLS_ASN1_UTF8_STRING || b->tag == MBEDTLS_ASN1_PRINTABLE_STRING ) && a->len == b->len && x509_memcasecmp( a->p, b->p, b->len ) == 0 ) { - return( 0 ); + return 0; } - - return( -1 ); + return -1; } /* @@ -313,36 +274,31 @@ static int x509_string_cmp( const mbedtls_x509_buf *a, const mbedtls_x509_buf *b * * Return 0 if equal, -1 otherwise. */ -static int x509_name_cmp( const mbedtls_x509_name *a, const mbedtls_x509_name *b ) +int mbedtls_x509_name_cmp( const mbedtls_x509_name *a, const mbedtls_x509_name *b ) { /* Avoid recursion, it might not be optimised by the compiler */ while( a != NULL || b != NULL ) { if( a == NULL || b == NULL ) - return( -1 ); - + return -1; /* type */ if( a->oid.tag != b->oid.tag || a->oid.len != b->oid.len || - memcmp( a->oid.p, b->oid.p, b->oid.len ) != 0 ) + memcmp( a->oid.p, b->oid.p, b->oid.len ) ) { - return( -1 ); + return -1; } - /* value */ - if( x509_string_cmp( &a->val, &b->val ) != 0 ) - return( -1 ); - + if( x509_string_cmp( &a->val, &b->val ) ) + return -1; /* structure of the list of sets */ if( a->next_merged != b->next_merged ) - return( -1 ); - + return -1; a = a->next; b = b->next; } - /* a == NULL == b */ - return( 0 ); + return 0; } /* @@ -352,15 +308,12 @@ static void x509_crt_verify_chain_reset( mbedtls_x509_crt_verify_chain *ver_chain ) { size_t i; - for( i = 0; i < MBEDTLS_X509_MAX_VERIFY_CHAIN_SIZE; i++ ) { ver_chain->items[i].crt = NULL; ver_chain->items[i].flags = (uint32_t) -1; } - ver_chain->len = 0; - #if defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK) ver_chain->trust_ca_cb_result = NULL; #endif /* MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK */ @@ -375,29 +328,23 @@ static int x509_get_version( unsigned char **p, { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ) != 0 ) + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ) ) { if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) { *ver = 0; - return( 0 ); + return 0; } - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } - end = *p + len; - - if( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) != 0 ) + if( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) ) return( MBEDTLS_ERR_X509_INVALID_VERSION + ret ); - if( *p != end ) return( MBEDTLS_ERR_X509_INVALID_VERSION + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); + return 0; } /* @@ -412,24 +359,18 @@ static int x509_get_dates( unsigned char **p, { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) ) return( MBEDTLS_ERR_X509_INVALID_DATE + ret ); - end = *p + len; - - if( ( ret = mbedtls_x509_get_time( p, end, from ) ) != 0 ) - return( ret ); - - if( ( ret = mbedtls_x509_get_time( p, end, to ) ) != 0 ) - return( ret ); - + if( ( ret = mbedtls_x509_get_time( p, end, from ) ) ) + return ret; + if( ( ret = mbedtls_x509_get_time( p, end, to ) ) ) + return ret; if( *p != end ) return( MBEDTLS_ERR_X509_INVALID_DATE + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); + return 0; } /* @@ -440,25 +381,19 @@ static int x509_get_uid( unsigned char **p, mbedtls_x509_buf *uid, int n ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - if( *p == end ) - return( 0 ); - + return 0; uid->tag = **p; - if( ( ret = mbedtls_asn1_get_tag( p, end, &uid->len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | n ) ) != 0 ) + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | n ) ) ) { if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( 0 ); - + return 0; return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } - uid->p = *p; *p += uid->len; - - return( 0 ); + return 0; } static int x509_get_basic_constraints( unsigned char **p, @@ -468,7 +403,6 @@ static int x509_get_basic_constraints( unsigned char **p, { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t len; - /* * BasicConstraints ::= SEQUENCE { * cA BOOLEAN DEFAULT FALSE, @@ -476,64 +410,50 @@ static int x509_get_basic_constraints( unsigned char **p, */ *ca_istrue = 0; /* DEFAULT FALSE */ *max_pathlen = 0; /* endless */ - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( *p == end ) - return( 0 ); - - if( ( ret = mbedtls_asn1_get_bool( p, end, ca_istrue ) ) != 0 ) + return 0; + if( ( ret = mbedtls_asn1_get_bool( p, end, ca_istrue ) ) ) { if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) ret = mbedtls_asn1_get_int( p, end, ca_istrue ); - - if( ret != 0 ) + if( ret ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - - if( *ca_istrue != 0 ) + if( *ca_istrue ) *ca_istrue = 1; } - if( *p == end ) - return( 0 ); - - if( ( ret = mbedtls_asn1_get_int( p, end, max_pathlen ) ) != 0 ) + return 0; + if( ( ret = mbedtls_asn1_get_int( p, end, max_pathlen ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( *p != end ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - /* Do not accept max_pathlen equal to INT_MAX to avoid a signed integer * overflow, which is an undefined behavior. */ if( *max_pathlen == INT_MAX ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_INVALID_LENGTH ); - (*max_pathlen)++; - - return( 0 ); + return 0; } static int x509_get_ns_cert_type( unsigned char **p, - const unsigned char *end, - unsigned char *ns_cert_type) + const unsigned char *end, + unsigned char *ns_cert_type) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; mbedtls_x509_bitstring bs = { 0, 0, NULL }; - - if( ( ret = mbedtls_asn1_get_bitstring( p, end, &bs ) ) != 0 ) + if( ( ret = mbedtls_asn1_get_bitstring( p, end, &bs ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( bs.len != 1 ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_INVALID_LENGTH ); - /* Get actual bitstring */ *ns_cert_type = *bs.p; - return( 0 ); + return 0; } static int x509_get_key_usage( unsigned char **p, @@ -543,22 +463,18 @@ static int x509_get_key_usage( unsigned char **p, int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t i; mbedtls_x509_bitstring bs = { 0, 0, NULL }; - - if( ( ret = mbedtls_asn1_get_bitstring( p, end, &bs ) ) != 0 ) + if( ( ret = mbedtls_asn1_get_bitstring( p, end, &bs ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( bs.len < 1 ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_INVALID_LENGTH ); - /* Get actual bitstring */ *key_usage = 0; for( i = 0; i < bs.len && i < sizeof( unsigned int ); i++ ) { *key_usage |= (unsigned int) bs.p[i] << (8*i); } - - return( 0 ); + return 0; } /* @@ -567,20 +483,17 @@ static int x509_get_key_usage( unsigned char **p, * KeyPurposeId ::= OBJECT IDENTIFIER */ static int x509_get_ext_key_usage( unsigned char **p, - const unsigned char *end, - mbedtls_x509_sequence *ext_key_usage) + const unsigned char *end, + mbedtls_x509_sequence *ext_key_usage) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - - if( ( ret = mbedtls_asn1_get_sequence_of( p, end, ext_key_usage, MBEDTLS_ASN1_OID ) ) != 0 ) + if( ( ret = mbedtls_asn1_get_sequence_of( p, end, ext_key_usage, MBEDTLS_ASN1_OID ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - /* Sequence length must be >= 1 */ if( ext_key_usage->buf.p == NULL ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_INVALID_LENGTH ); - - return( 0 ); + return 0; } /* @@ -619,33 +532,27 @@ static int x509_get_subject_alt_name( unsigned char **p, mbedtls_asn1_buf *buf; unsigned char tag; mbedtls_asn1_sequence *cur = subject_alt_name; - /* Get main sequence tag */ if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( *p + len != end ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - while( *p < end ) { mbedtls_x509_subject_alternative_name dummy_san_buf; memset( &dummy_san_buf, 0, sizeof( dummy_san_buf ) ); - tag = **p; (*p)++; - if( ( ret = mbedtls_asn1_get_len( p, end, &tag_len ) ) != 0 ) + if( ( ret = mbedtls_asn1_get_len( p, end, &tag_len ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( ( tag & MBEDTLS_ASN1_TAG_CLASS_MASK ) != MBEDTLS_ASN1_CONTEXT_SPECIFIC ) { return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); } - /* * Check that the SAN is structured correctly. */ @@ -654,7 +561,7 @@ static int x509_get_subject_alt_name( unsigned char **p, * In case the extension is malformed, return an error, * and clear the allocated sequences. */ - if( ret != 0 && ret != MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ) + if( ret && ret != MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ) { mbedtls_x509_sequence *seq_cur = subject_alt_name->next; mbedtls_x509_sequence *seq_prv; @@ -667,39 +574,31 @@ static int x509_get_subject_alt_name( unsigned char **p, mbedtls_free( seq_prv ); } subject_alt_name->next = NULL; - return( ret ); + return ret; } - /* Allocate and assign next pointer */ if( cur->buf.p != NULL ) { if( cur->next != NULL ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS ); - cur->next = mbedtls_calloc( 1, sizeof( mbedtls_asn1_sequence ) ); - if( cur->next == NULL ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_ALLOC_FAILED ); - cur = cur->next; } - buf = &(cur->buf); buf->tag = tag; buf->p = *p; buf->len = tag_len; *p += buf->len; } - /* Set final sequence entry's next pointer to NULL */ cur->next = NULL; - if( *p != end ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); + return 0; } /* @@ -759,50 +658,41 @@ static int x509_get_certificate_policies( unsigned char **p, size_t len; mbedtls_asn1_buf *buf; mbedtls_asn1_sequence *cur = certificate_policies; - /* Get main sequence tag */ ret = mbedtls_asn1_get_tag( p, end, &len, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ); - if( ret != 0 ) + if( ret ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( *p + len != end ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - /* * Cannot be an empty sequence. */ if( len == 0 ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - while( *p < end ) { mbedtls_x509_buf policy_oid; const unsigned char *policy_end; - /* * Get the policy sequence */ if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - policy_end = *p + len; - if( ( ret = mbedtls_asn1_get_tag( p, policy_end, &len, - MBEDTLS_ASN1_OID ) ) != 0 ) + MBEDTLS_ASN1_OID ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - policy_oid.tag = MBEDTLS_ASN1_OID; policy_oid.len = len; policy_oid.p = *p; - /* * Only AnyPolicy is currently supported when enforcing policy. */ - if( MBEDTLS_OID_CMP( MBEDTLS_OID_ANY_POLICY, &policy_oid ) != 0 ) + if( MBEDTLS_OID_CMP( MBEDTLS_OID_ANY_POLICY, &policy_oid ) ) { /* * Set the parsing return code but continue parsing, in case this @@ -811,29 +701,22 @@ static int x509_get_certificate_policies( unsigned char **p, */ parse_ret = MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE; } - /* Allocate and assign next pointer */ if( cur->buf.p != NULL ) { if( cur->next != NULL ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS ); - cur->next = mbedtls_calloc( 1, sizeof( mbedtls_asn1_sequence ) ); - if( cur->next == NULL ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_ALLOC_FAILED ); - cur = cur->next; } - buf = &( cur->buf ); buf->tag = policy_oid.tag; buf->p = policy_oid.p; buf->len = policy_oid.len; - *p += len; - /* * If there is an optional qualifier, then *p < policy_end * Check the Qualifier len to verify it doesn't exceed policy_end. @@ -841,32 +724,27 @@ static int x509_get_certificate_policies( unsigned char **p, if( *p < policy_end ) { if( ( ret = mbedtls_asn1_get_tag( p, policy_end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); /* * Skip the optional policy qualifiers. */ *p += len; } - if( *p != policy_end ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } - /* Set final sequence entry's next pointer to NULL */ cur->next = NULL; - if( *p != end ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( parse_ret ); } /* * X.509 v3 extensions - * */ static int x509_get_crt_ext( unsigned char **p, const unsigned char *end, @@ -877,13 +755,10 @@ static int x509_get_crt_ext( unsigned char **p, int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t len; unsigned char *end_ext_data, *start_ext_octet, *end_ext_octet; - if( *p == end ) - return( 0 ); - - if( ( ret = mbedtls_x509_get_ext( p, end, &crt->v3_ext, 3 ) ) != 0 ) - return( ret ); - + return 0; + if( ( ret = mbedtls_x509_get_ext( p, end, &crt->v3_ext, 3 ) ) ) + return ret; end = crt->v3_ext.p + crt->v3_ext.len; while( *p < end ) { @@ -896,59 +771,47 @@ static int x509_get_crt_ext( unsigned char **p, mbedtls_x509_buf extn_oid = {0, 0, NULL}; int is_critical = 0; /* DEFAULT FALSE */ int ext_type = 0; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - end_ext_data = *p + len; - /* Get extension ID */ if( ( ret = mbedtls_asn1_get_tag( p, end_ext_data, &extn_oid.len, - MBEDTLS_ASN1_OID ) ) != 0 ) + MBEDTLS_ASN1_OID ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - extn_oid.tag = MBEDTLS_ASN1_OID; extn_oid.p = *p; *p += extn_oid.len; - /* Get optional critical */ - if( ( ret = mbedtls_asn1_get_bool( p, end_ext_data, &is_critical ) ) != 0 && + if( ( ret = mbedtls_asn1_get_bool( p, end_ext_data, &is_critical ) ) && ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - /* Data should be octet string type */ if( ( ret = mbedtls_asn1_get_tag( p, end_ext_data, &len, - MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + MBEDTLS_ASN1_OCTET_STRING ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - start_ext_octet = *p; end_ext_octet = *p + len; - if( end_ext_octet != end_ext_data ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - /* * Detect supported extensions */ ret = mbedtls_oid_get_x509_ext_type( &extn_oid, &ext_type ); - - if( ret != 0 ) + if( ret ) { /* Give the callback (if any) a chance to handle the extension */ if( cb != NULL ) { ret = cb( p_ctx, crt, &extn_oid, is_critical, *p, end_ext_octet ); - if( ret != 0 && is_critical ) - return( ret ); + if( ret && is_critical ) + return ret; *p = end_ext_octet; continue; } - /* No parser found, skip extension */ *p = end_ext_octet; - #if !defined(MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION) if( is_critical ) { @@ -959,54 +822,46 @@ static int x509_get_crt_ext( unsigned char **p, #endif continue; } - /* Forbid repeated extensions */ - if( ( crt->ext_types & ext_type ) != 0 ) + if( ( crt->ext_types & ext_type ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS ); - crt->ext_types |= ext_type; - switch( ext_type ) { case MBEDTLS_X509_EXT_BASIC_CONSTRAINTS: /* Parse basic constraints */ if( ( ret = x509_get_basic_constraints( p, end_ext_octet, - &crt->ca_istrue, &crt->max_pathlen ) ) != 0 ) - return( ret ); + &crt->ca_istrue, &crt->max_pathlen ) ) ) + return ret; break; - case MBEDTLS_X509_EXT_KEY_USAGE: /* Parse key usage */ if( ( ret = x509_get_key_usage( p, end_ext_octet, - &crt->key_usage ) ) != 0 ) - return( ret ); + &crt->key_usage ) ) ) + return ret; break; - case MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE: /* Parse extended key usage */ if( ( ret = x509_get_ext_key_usage( p, end_ext_octet, - &crt->ext_key_usage ) ) != 0 ) - return( ret ); + &crt->ext_key_usage ) ) ) + return ret; break; - case MBEDTLS_X509_EXT_SUBJECT_ALT_NAME: /* Parse subject alt name */ if( ( ret = x509_get_subject_alt_name( p, end_ext_octet, - &crt->subject_alt_names ) ) != 0 ) - return( ret ); + &crt->subject_alt_names ) ) ) + return ret; break; - case MBEDTLS_X509_EXT_NS_CERT_TYPE: /* Parse netscape certificate type */ if( ( ret = x509_get_ns_cert_type( p, end_ext_octet, - &crt->ns_cert_type ) ) != 0 ) - return( ret ); + &crt->ns_cert_type ) ) ) + return ret; break; - case MBEDTLS_OID_X509_EXT_CERTIFICATE_POLICIES: /* Parse certificate policies type */ if( ( ret = x509_get_certificate_policies( p, end_ext_octet, - &crt->certificate_policies ) ) != 0 ) + &crt->certificate_policies ) ) ) { /* Give the callback (if any) a chance to handle the extension * if it contains unsupported policies */ @@ -1014,10 +869,9 @@ static int x509_get_crt_ext( unsigned char **p, cb( p_ctx, crt, &extn_oid, is_critical, start_ext_octet, end_ext_octet ) == 0 ) break; - #if !defined(MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION) if( is_critical ) - return( ret ); + return ret; else #endif /* @@ -1027,10 +881,9 @@ static int x509_get_crt_ext( unsigned char **p, * unless the extension is critical. */ if( ret != MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ) - return( ret ); + return ret; } break; - default: /* * If this is a non-critical extension, which the oid layer @@ -1045,12 +898,10 @@ static int x509_get_crt_ext( unsigned char **p, *p = end_ext_octet; } } - if( *p != end ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - - return( 0 ); + return 0; } /* @@ -1067,22 +918,18 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, size_t len; unsigned char *p, *end, *crt_end; mbedtls_x509_buf sig_params1, sig_params2, sig_oid2; - memset( &sig_params1, 0, sizeof( mbedtls_x509_buf ) ); memset( &sig_params2, 0, sizeof( mbedtls_x509_buf ) ); memset( &sig_oid2, 0, sizeof( mbedtls_x509_buf ) ); - /* * Check for valid input */ if( crt == NULL || buf == NULL ) return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - /* Use the original buffer until we figure out actual length. */ p = (unsigned char*) buf; len = buflen; end = p + len; - /* * Certificate ::= SEQUENCE { * tbsCertificate TBSCertificate, @@ -1090,24 +937,21 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, * signatureValue BIT STRING } */ if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) ) { mbedtls_x509_crt_free( crt ); return( MBEDTLS_ERR_X509_INVALID_FORMAT ); } - end = crt_end = p + len; crt->raw.len = crt_end - buf; - if( make_copy != 0 ) + if( make_copy ) { /* Create and populate a new buffer for the raw field. */ crt->raw.p = p = mbedtls_calloc( 1, crt->raw.len ); if( crt->raw.p == NULL ) return( MBEDTLS_ERR_X509_ALLOC_FAILED ); - memcpy( crt->raw.p, buf, crt->raw.len ); crt->own_buffer = 1; - p += crt->raw.len - len; end = crt_end = p + len; } @@ -1116,22 +960,18 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, crt->raw.p = (unsigned char*) buf; crt->own_buffer = 0; } - /* * TBSCertificate ::= SEQUENCE { */ crt->tbs.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) ) { mbedtls_x509_crt_free( crt ); return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } - end = p + len; crt->tbs.len = end - crt->tbs.p; - /* * Version ::= INTEGER { v1(0), v2(1), v3(2) } * @@ -1139,51 +979,43 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, * * signature AlgorithmIdentifier */ - if( ( ret = x509_get_version( &p, end, &crt->version ) ) != 0 || - ( ret = mbedtls_x509_get_serial( &p, end, &crt->serial ) ) != 0 || + if( ( ret = x509_get_version( &p, end, &crt->version ) ) || + ( ret = mbedtls_x509_get_serial( &p, end, &crt->serial ) ) || ( ret = mbedtls_x509_get_alg( &p, end, &crt->sig_oid, - &sig_params1 ) ) != 0 ) + &sig_params1 ) ) ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ret; } - if( crt->version < 0 || crt->version > 2 ) { mbedtls_x509_crt_free( crt ); return( MBEDTLS_ERR_X509_UNKNOWN_VERSION ); } - crt->version++; - if( ( ret = mbedtls_x509_get_sig_alg( &crt->sig_oid, &sig_params1, &crt->sig_md, &crt->sig_pk, - &crt->sig_opts ) ) != 0 ) + &crt->sig_opts ) ) ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ret; } - /* * issuer Name */ crt->issuer_raw.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) ) { mbedtls_x509_crt_free( crt ); return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } - - if( ( ret = mbedtls_x509_get_name( &p, p + len, &crt->issuer ) ) != 0 ) + if( ( ret = mbedtls_x509_get_name( &p, p + len, &crt->issuer ) ) ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ret; } - crt->issuer_raw.len = p - crt->issuer_raw.p; - /* * Validity ::= SEQUENCE { * notBefore Time, @@ -1191,43 +1023,37 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, * */ if( ( ret = x509_get_dates( &p, end, &crt->valid_from, - &crt->valid_to ) ) != 0 ) + &crt->valid_to ) ) ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ret; } - /* * subject Name */ crt->subject_raw.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) ) { mbedtls_x509_crt_free( crt ); return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } - - if( len && ( ret = mbedtls_x509_get_name( &p, p + len, &crt->subject ) ) != 0 ) + if( len && ( ret = mbedtls_x509_get_name( &p, p + len, &crt->subject ) ) ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ret; } - crt->subject_raw.len = p - crt->subject_raw.p; - /* * SubjectPublicKeyInfo */ crt->pk_raw.p = p; - if( ( ret = mbedtls_pk_parse_subpubkey( &p, end, &crt->pk ) ) != 0 ) + if( ( ret = mbedtls_pk_parse_subpubkey( &p, end, &crt->pk ) ) ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ret; } crt->pk_raw.len = p - crt->pk_raw.p; - /* * issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, * -- If present, version shall be v2 or v3 @@ -1239,44 +1065,39 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, if( crt->version == 2 || crt->version == 3 ) { ret = x509_get_uid( &p, end, &crt->issuer_id, 1 ); - if( ret != 0 ) + if( ret ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ret; } } - if( crt->version == 2 || crt->version == 3 ) { ret = x509_get_uid( &p, end, &crt->subject_id, 2 ); - if( ret != 0 ) + if( ret ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ret; } } - #if !defined(MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3) if( crt->version == 3 ) #endif { ret = x509_get_crt_ext( &p, end, crt, cb, p_ctx ); - if( ret != 0 ) + if( ret ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ret; } } - if( p != end ) { mbedtls_x509_crt_free( crt ); return( MBEDTLS_ERR_X509_INVALID_FORMAT + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } - end = crt_end; - /* * } * -- end of TBSCertificate @@ -1284,37 +1105,33 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, * signatureAlgorithm AlgorithmIdentifier, * signatureValue BIT STRING */ - if( ( ret = mbedtls_x509_get_alg( &p, end, &sig_oid2, &sig_params2 ) ) != 0 ) + if( ( ret = mbedtls_x509_get_alg( &p, end, &sig_oid2, &sig_params2 ) ) ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ret; } - if( crt->sig_oid.len != sig_oid2.len || - memcmp( crt->sig_oid.p, sig_oid2.p, crt->sig_oid.len ) != 0 || + memcmp( crt->sig_oid.p, sig_oid2.p, crt->sig_oid.len ) || sig_params1.tag != sig_params2.tag || sig_params1.len != sig_params2.len || - ( sig_params1.len != 0 && - memcmp( sig_params1.p, sig_params2.p, sig_params1.len ) != 0 ) ) + ( sig_params1.len && + memcmp( sig_params1.p, sig_params2.p, sig_params1.len ) ) ) { mbedtls_x509_crt_free( crt ); return( MBEDTLS_ERR_X509_SIG_MISMATCH ); } - - if( ( ret = mbedtls_x509_get_sig( &p, end, &crt->sig ) ) != 0 ) + if( ( ret = mbedtls_x509_get_sig( &p, end, &crt->sig ) ) ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ret; } - if( p != end ) { mbedtls_x509_crt_free( crt ); return( MBEDTLS_ERR_X509_INVALID_FORMAT + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } - - return( 0 ); + return 0; } /* @@ -1330,49 +1147,67 @@ static int mbedtls_x509_crt_parse_der_internal( mbedtls_x509_crt *chain, { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; mbedtls_x509_crt *crt = chain, *prev = NULL; - /* * Check for valid input */ if( crt == NULL || buf == NULL ) return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - - while( crt->version != 0 && crt->next != NULL ) + while( crt->version && crt->next != NULL ) { prev = crt; crt = crt->next; } - /* * Add new certificate on the end of the chain if needed. */ - if( crt->version != 0 && crt->next == NULL ) + if( crt->version && crt->next == NULL ) { crt->next = mbedtls_calloc( 1, sizeof( mbedtls_x509_crt ) ); - if( crt->next == NULL ) return( MBEDTLS_ERR_X509_ALLOC_FAILED ); - prev = crt; mbedtls_x509_crt_init( crt->next ); crt = crt->next; } - ret = x509_crt_parse_der_core( crt, buf, buflen, make_copy, cb, p_ctx ); - if( ret != 0 ) + if( ret ) { if( prev ) prev->next = NULL; - if( crt != chain ) mbedtls_free( crt ); - - return( ret ); + return ret; } - - return( 0 ); + return 0; } +/** + * \brief Parse a single DER formatted certificate and add it + * to the end of the provided chained list. This is a + * variant of mbedtls_x509_crt_parse_der() which takes + * temporary ownership of the CRT buffer until the CRT + * is destroyed. + * + * \param chain The pointer to the start of the CRT chain to attach to. + * When parsing the first CRT in a chain, this should point + * to an instance of ::mbedtls_x509_crt initialized through + * mbedtls_x509_crt_init(). + * \param buf The address of the readable buffer holding the DER encoded + * certificate to use. On success, this buffer must be + * retained and not be changed for the liftetime of the + * CRT chain \p chain, that is, until \p chain is destroyed + * through a call to mbedtls_x509_crt_free(). + * \param buflen The size in Bytes of \p buf. + * + * \note This call is functionally equivalent to + * mbedtls_x509_crt_parse_der(), but it avoids creating a + * copy of the input buffer at the cost of stronger lifetime + * constraints. This is useful in constrained environments + * where duplication of the CRT cannot be tolerated. + * + * \return \c 0 if successful. + * \return A negative error code on failure. + */ int mbedtls_x509_crt_parse_der_nocopy( mbedtls_x509_crt *chain, const unsigned char *buf, size_t buflen ) @@ -1380,6 +1215,46 @@ int mbedtls_x509_crt_parse_der_nocopy( mbedtls_x509_crt *chain, return( mbedtls_x509_crt_parse_der_internal( chain, buf, buflen, 0, NULL, NULL ) ); } +/** + * \brief Parse a single DER formatted certificate and add it + * to the end of the provided chained list. + * + * \param chain The pointer to the start of the CRT chain to attach to. + * When parsing the first CRT in a chain, this should point + * to an instance of ::mbedtls_x509_crt initialized through + * mbedtls_x509_crt_init(). + * \param buf The buffer holding the DER encoded certificate. + * \param buflen The size in Bytes of \p buf. + * \param make_copy When not zero this function makes an internal copy of the + * CRT buffer \p buf. In particular, \p buf may be destroyed + * or reused after this call returns. + * When zero this function avoids duplicating the CRT buffer + * by taking temporary ownership thereof until the CRT + * is destroyed (like mbedtls_x509_crt_parse_der_nocopy()) + * \param cb A callback invoked for every unsupported certificate + * extension. + * \param p_ctx An opaque context passed to the callback. + * + * \note This call is functionally equivalent to + * mbedtls_x509_crt_parse_der(), and/or + * mbedtls_x509_crt_parse_der_nocopy() + * but it calls the callback with every unsupported + * certificate extension and additionally the + * "certificate policies" extension if it contains any + * unsupported certificate policies. + * The callback must return a negative error code if it + * does not know how to handle such an extension. + * When the callback fails to parse a critical extension + * mbedtls_x509_crt_parse_der_with_ext_cb() also fails. + * When the callback fails to parse a non critical extension + * mbedtls_x509_crt_parse_der_with_ext_cb() simply skips + * the extension and continues parsing. + * Future versions of the library may invoke the callback + * in other cases, if and when the need arises. + * + * \return \c 0 if successful. + * \return A negative error code on failure. + */ int mbedtls_x509_crt_parse_der_with_ext_cb( mbedtls_x509_crt *chain, const unsigned char *buf, size_t buflen, @@ -1390,6 +1265,26 @@ int mbedtls_x509_crt_parse_der_with_ext_cb( mbedtls_x509_crt *chain, return( mbedtls_x509_crt_parse_der_internal( chain, buf, buflen, make_copy, cb, p_ctx ) ); } +/** + * \brief Parse a single DER formatted certificate and add it + * to the end of the provided chained list. + * + * \param chain The pointer to the start of the CRT chain to attach to. + * When parsing the first CRT in a chain, this should point + * to an instance of ::mbedtls_x509_crt initialized through + * mbedtls_x509_crt_init(). + * \param buf The buffer holding the DER encoded certificate. + * \param buflen The size in Bytes of \p buf. + * + * \note This function makes an internal copy of the CRT buffer + * \p buf. In particular, \p buf may be destroyed or reused + * after this call returns. To avoid duplicating the CRT + * buffer (at the cost of stricter lifetime constraints), + * use mbedtls_x509_crt_parse_der_nocopy() instead. + * + * \return \c 0 if successful. + * \return A negative error code on failure. + */ int mbedtls_x509_crt_parse_der( mbedtls_x509_crt *chain, const unsigned char *buf, size_t buflen ) @@ -1397,9 +1292,35 @@ int mbedtls_x509_crt_parse_der( mbedtls_x509_crt *chain, return( mbedtls_x509_crt_parse_der_internal( chain, buf, buflen, 1, NULL, NULL ) ); } -/* - * Parse one or more PEM certificates from a buffer and add them to the chained - * list +/** + * \brief Parse one DER-encoded or one or more concatenated PEM-encoded + * certificates and add them to the chained list. + * + * For CRTs in PEM encoding, the function parses permissively: + * if at least one certificate can be parsed, the function + * returns the number of certificates for which parsing failed + * (hence \c 0 if all certificates were parsed successfully). + * If no certificate could be parsed, the function returns + * the first (negative) error encountered during parsing. + * + * PEM encoded certificates may be interleaved by other data + * such as human readable descriptions of their content, as + * long as the certificates are enclosed in the PEM specific + * '-----{BEGIN/END} CERTIFICATE-----' delimiters. + * + * \param chain The chain to which to add the parsed certificates. + * \param buf The buffer holding the certificate data in PEM or DER format. + * For certificates in PEM encoding, this may be a concatenation + * of multiple certificates; for DER encoding, the buffer must + * comprise exactly one certificate. + * \param buflen The size of \p buf, including the terminating \c NULL byte + * in case of PEM encoded data. + * + * \return \c 0 if all certificates were parsed successfully. + * \return The (positive) number of certificates that couldn't + * be parsed if parsing was partly successful (see above). + * \return A negative X509 or PEM error code otherwise. + * */ int mbedtls_x509_crt_parse( mbedtls_x509_crt *chain, const unsigned char *buf, @@ -1409,48 +1330,41 @@ int mbedtls_x509_crt_parse( mbedtls_x509_crt *chain, int success = 0, first_error = 0, total_failed = 0; int buf_format = MBEDTLS_X509_FORMAT_DER; #endif - /* * Check for valid input */ if( chain == NULL || buf == NULL ) return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - /* * Determine buffer content. Buffer contains either one DER certificate or * one or more PEM certificates. */ #if defined(MBEDTLS_PEM_PARSE_C) - if( buflen != 0 && buf[buflen - 1] == '\0' && + if( buflen && buf[buflen - 1] == '\0' && strstr( (const char *) buf, "-----BEGIN CERTIFICATE-----" ) != NULL ) { buf_format = MBEDTLS_X509_FORMAT_PEM; } - if( buf_format == MBEDTLS_X509_FORMAT_DER ) return mbedtls_x509_crt_parse_der( chain, buf, buflen ); #else return mbedtls_x509_crt_parse_der( chain, buf, buflen ); #endif - #if defined(MBEDTLS_PEM_PARSE_C) if( buf_format == MBEDTLS_X509_FORMAT_PEM ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; mbedtls_pem_context pem; - /* 1 rather than 0 since the terminating NULL byte is counted in */ while( buflen > 1 ) { size_t use_len; mbedtls_pem_init( &pem ); - /* If we get there, we know the string is null-terminated */ ret = mbedtls_pem_read_buffer( &pem, "-----BEGIN CERTIFICATE-----", "-----END CERTIFICATE-----", buf, NULL, 0, &use_len ); - if( ret == 0 ) { /* @@ -1461,50 +1375,40 @@ int mbedtls_x509_crt_parse( mbedtls_x509_crt *chain, } else if( ret == MBEDTLS_ERR_PEM_BAD_INPUT_DATA ) { - return( ret ); + return ret; } else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) { mbedtls_pem_free( &pem ); - /* * PEM header and footer were found */ buflen -= use_len; buf += use_len; - if( first_error == 0 ) first_error = ret; - total_failed++; continue; } else break; - ret = mbedtls_x509_crt_parse_der( chain, pem.buf, pem.buflen ); - mbedtls_pem_free( &pem ); - - if( ret != 0 ) + if( ret ) { /* * Quit parsing on a memory error */ if( ret == MBEDTLS_ERR_X509_ALLOC_FAILED ) - return( ret ); - + return ret; if( first_error == 0 ) first_error = ret; - total_failed++; continue; } - success = 1; } } - if( success ) return( total_failed ); else if( first_error ) @@ -1514,116 +1418,61 @@ int mbedtls_x509_crt_parse( mbedtls_x509_crt *chain, #endif /* MBEDTLS_PEM_PARSE_C */ } -#if defined(MBEDTLS_FS_IO) -/* - * Load one or more certificates and add them to the chained list +/** + * \brief Load one or more certificates and add them + * to the chained list. Parses permissively. If some + * certificates can be parsed, the result is the number + * of failed certificates it encountered. If none complete + * correctly, the first error is returned. + * + * \param chain points to the start of the chain + * \param path filename to read the certificates from + * + * \return 0 if all certificates parsed successfully, a positive number + * if partly successful or a specific X509 or PEM error code */ int mbedtls_x509_crt_parse_file( mbedtls_x509_crt *chain, const char *path ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t n; unsigned char *buf; - - if( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) - return( ret ); - + if( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) ) + return ret; ret = mbedtls_x509_crt_parse( chain, buf, n ); - mbedtls_platform_zeroize( buf, n ); mbedtls_free( buf ); - - return( ret ); + return ret; } +/** + * \brief Load one or more certificate files from a path and add them + * to the chained list. Parses permissively. If some + * certificates can be parsed, the result is the number + * of failed certificates it encountered. If none complete + * correctly, the first error is returned. + * + * \param chain points to the start of the chain + * \param path directory / folder to read the certificate files from + * + * \return 0 if all certificates parsed successfully, a positive number + * if partly successful or a specific X509 or PEM error code + */ int mbedtls_x509_crt_parse_path( mbedtls_x509_crt *chain, const char *path ) { int ret = 0; -#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32) - int w_ret; - WCHAR szDir[MAX_PATH]; - char filename[MAX_PATH]; - char *p; - size_t len = strlen( path ); - - WIN32_FIND_DATAW file_data; - HANDLE hFind; - - if( len > MAX_PATH - 3 ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - - memset( szDir, 0, sizeof(szDir) ); - memset( filename, 0, MAX_PATH ); - memcpy( filename, path, len ); - filename[len++] = '\\'; - p = filename + len; - filename[len++] = '*'; - - w_ret = MultiByteToWideChar( CP_ACP, 0, filename, (int)len, szDir, - MAX_PATH - 3 ); - if( w_ret == 0 ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - - hFind = FindFirstFileW( szDir, &file_data ); - if( hFind == INVALID_HANDLE_VALUE ) - return( MBEDTLS_ERR_X509_FILE_IO_ERROR ); - - len = MAX_PATH - len; - do - { - memset( p, 0, len ); - - if( file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) - continue; - - w_ret = WideCharToMultiByte( CP_ACP, 0, file_data.cFileName, - lstrlenW( file_data.cFileName ), - p, (int) len - 1, - NULL, NULL ); - if( w_ret == 0 ) - { - ret = MBEDTLS_ERR_X509_FILE_IO_ERROR; - goto cleanup; - } - - w_ret = mbedtls_x509_crt_parse_file( chain, filename ); - if( w_ret < 0 ) - ret++; - else - ret += w_ret; - } - while( FindNextFileW( hFind, &file_data ) != 0 ); - - if( GetLastError() != ERROR_NO_MORE_FILES ) - ret = MBEDTLS_ERR_X509_FILE_IO_ERROR; - -cleanup: - FindClose( hFind ); -#else /* _WIN32 */ int t_ret; int snp_ret; struct stat sb; struct dirent *entry; char entry_name[MBEDTLS_X509_MAX_FILE_PATH_LEN]; DIR *dir = opendir( path ); - if( dir == NULL ) return( MBEDTLS_ERR_X509_FILE_IO_ERROR ); - -#if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &mbedtls_threading_readdir_mutex ) ) != 0 ) - { - closedir( dir ); - return( ret ); - } -#endif /* MBEDTLS_THREADING_C */ - memset( &sb, 0, sizeof( sb ) ); - while( ( entry = readdir( dir ) ) != NULL ) { snp_ret = mbedtls_snprintf( entry_name, sizeof entry_name, "%s/%s", path, entry->d_name ); - if( snp_ret < 0 || (size_t)snp_ret >= sizeof entry_name ) { ret = MBEDTLS_ERR_X509_BUFFER_TOO_SMALL; @@ -1634,10 +1483,8 @@ cleanup: ret = MBEDTLS_ERR_X509_FILE_IO_ERROR; goto cleanup; } - if( !S_ISREG( sb.st_mode ) ) continue; - // Ignore parse errors // t_ret = mbedtls_x509_crt_parse_file( chain, entry_name ); @@ -1646,20 +1493,10 @@ cleanup: else ret += t_ret; } - cleanup: closedir( dir ); - -#if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &mbedtls_threading_readdir_mutex ) != 0 ) - ret = MBEDTLS_ERR_THREADING_MUTEX_ERROR; -#endif /* MBEDTLS_THREADING_C */ - -#endif /* _WIN32 */ - - return( ret ); + return ret; } -#endif /* MBEDTLS_FS_IO */ /* * OtherName ::= SEQUENCE { @@ -1681,7 +1518,6 @@ static int x509_get_other_name( const mbedtls_x509_buf *subject_alt_name, unsigned char *p = subject_alt_name->p; const unsigned char *end = p + subject_alt_name->len; mbedtls_x509_buf cur_oid; - if( ( subject_alt_name->tag & ( MBEDTLS_ASN1_TAG_CLASS_MASK | MBEDTLS_ASN1_TAG_VALUE_MASK ) ) != ( MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_X509_SAN_OTHER_NAME ) ) @@ -1691,23 +1527,19 @@ static int x509_get_other_name( const mbedtls_x509_buf *subject_alt_name, */ return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); } - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_OID ) ) != 0 ) + MBEDTLS_ASN1_OID ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - cur_oid.tag = MBEDTLS_ASN1_OID; cur_oid.p = p; cur_oid.len = len; - /* * Only HwModuleName is currently supported. */ - if( MBEDTLS_OID_CMP( MBEDTLS_OID_ON_HW_MODULE_NAME, &cur_oid ) != 0 ) + if( MBEDTLS_OID_CMP( MBEDTLS_OID_ON_HW_MODULE_NAME, &cur_oid ) ) { return( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ); } - if( p + len >= end ) { mbedtls_platform_zeroize( other_name, sizeof( *other_name ) ); @@ -1716,20 +1548,16 @@ static int x509_get_other_name( const mbedtls_x509_buf *subject_alt_name, } p += len; if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ) != 0 ) + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OID ) ) != 0 ) + if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OID ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - other_name->value.hardware_module_name.oid.tag = MBEDTLS_ASN1_OID; other_name->value.hardware_module_name.oid.p = p; other_name->value.hardware_module_name.oid.len = len; - if( p + len >= end ) { mbedtls_platform_zeroize( other_name, sizeof( *other_name ) ); @@ -1738,9 +1566,8 @@ static int x509_get_other_name( const mbedtls_x509_buf *subject_alt_name, } p += len; if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + MBEDTLS_ASN1_OCTET_STRING ) ) ) return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - other_name->value.hardware_module_name.val.tag = MBEDTLS_ASN1_OCTET_STRING; other_name->value.hardware_module_name.val.p = p; other_name->value.hardware_module_name.val.len = len; @@ -1752,7 +1579,7 @@ static int x509_get_other_name( const mbedtls_x509_buf *subject_alt_name, return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } - return( 0 ); + return 0; } static int x509_info_subject_alt_name( char **buf, size_t *size, @@ -1766,12 +1593,11 @@ static int x509_info_subject_alt_name( char **buf, size_t *size, const mbedtls_x509_sequence *cur = subject_alt_name; mbedtls_x509_subject_alternative_name san; int parse_ret; - while( cur != NULL ) { memset( &san, 0, sizeof( san ) ); parse_ret = mbedtls_x509_parse_subject_alt_name( &cur->buf, &san ); - if( parse_ret != 0 ) + if( parse_ret ) { if( parse_ret == MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ) { @@ -1786,7 +1612,6 @@ static int x509_info_subject_alt_name( char **buf, size_t *size, cur = cur->next; continue; } - switch( san.type ) { /* @@ -1795,79 +1620,132 @@ static int x509_info_subject_alt_name( char **buf, size_t *size, case MBEDTLS_X509_SAN_OTHER_NAME: { mbedtls_x509_san_other_name *other_name = &san.san.other_name; - ret = mbedtls_snprintf( p, n, "\n%s otherName :", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - if( MBEDTLS_OID_CMP( MBEDTLS_OID_ON_HW_MODULE_NAME, - &other_name->value.hardware_module_name.oid ) != 0 ) + &other_name->value.hardware_module_name.oid ) ) { ret = mbedtls_snprintf( p, n, "\n%s hardware module name :", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n%s hardware type : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - ret = mbedtls_oid_get_numeric_string( p, n, &other_name->value.hardware_module_name.oid ); MBEDTLS_X509_SAFE_SNPRINTF; - ret = mbedtls_snprintf( p, n, "\n%s hardware serial number : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - if( other_name->value.hardware_module_name.val.len >= n ) { *p = '\0'; return( MBEDTLS_ERR_X509_BUFFER_TOO_SMALL ); } - memcpy( p, other_name->value.hardware_module_name.val.p, other_name->value.hardware_module_name.val.len ); p += other_name->value.hardware_module_name.val.len; - n -= other_name->value.hardware_module_name.val.len; - }/* MBEDTLS_OID_ON_HW_MODULE_NAME */ } break; - /* * dNSName */ - case MBEDTLS_X509_SAN_DNS_NAME: - { + case MBEDTLS_X509_SAN_DNS_NAME: { ret = mbedtls_snprintf( p, n, "\n%s dNSName : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - if( san.san.unstructured_name.len >= n ) - { + if( san.san.unstructured_name.len >= n ) { *p = '\0'; return( MBEDTLS_ERR_X509_BUFFER_TOO_SMALL ); } - memcpy( p, san.san.unstructured_name.p, san.san.unstructured_name.len ); p += san.san.unstructured_name.len; n -= san.san.unstructured_name.len; } break; - + /* + * rfc822Name + */ + case MBEDTLS_X509_SAN_RFC822_NAME: { + ret = mbedtls_snprintf( p, n, "\n%s rfc822Name : ", prefix ); + MBEDTLS_X509_SAFE_SNPRINTF; + if( san.san.unstructured_name.len >= n ) { + *p = '\0'; + return( MBEDTLS_ERR_X509_BUFFER_TOO_SMALL ); + } + memcpy( p, san.san.unstructured_name.p, san.san.unstructured_name.len ); + p += san.san.unstructured_name.len; + n -= san.san.unstructured_name.len; + } + break; + /* + * uniformResourceIdentifier + */ + case MBEDTLS_X509_SAN_UNIFORM_RESOURCE_IDENTIFIER: { + ret = mbedtls_snprintf( p, n, "\n%s uniformResourceIdentifier : ", prefix ); + MBEDTLS_X509_SAFE_SNPRINTF; + if( san.san.unstructured_name.len >= n ) { + *p = '\0'; + return( MBEDTLS_ERR_X509_BUFFER_TOO_SMALL ); + } + memcpy( p, san.san.unstructured_name.p, san.san.unstructured_name.len ); + p += san.san.unstructured_name.len; + n -= san.san.unstructured_name.len; + } + break; + /* + * iPAddress + */ + case MBEDTLS_X509_SAN_IP_ADDRESS: + { + ret = mbedtls_snprintf( p, n, "\n%s iPAddress : %hhu.%hhu.%hhu.%hhu", + prefix, san.san.ip>>24, + san.san.ip>>16, + san.san.ip>>8, + san.san.ip); + MBEDTLS_X509_SAFE_SNPRINTF; + } + break; /* * Type not supported, skip item. */ default: - ret = mbedtls_snprintf( p, n, "\n%s ", prefix ); + ret = mbedtls_snprintf( p, n, "\n%s ", prefix, san.type ); MBEDTLS_X509_SAFE_SNPRINTF; break; } - cur = cur->next; } - *p = '\0'; - *size = n; *buf = p; - - return( 0 ); + return 0; } +/** + * \brief This function parses an item in the SubjectAlternativeNames + * extension. + * + * \param san_buf The buffer holding the raw data item of the subject + * alternative name. + * \param san The target structure to populate with the parsed presentation + * of the subject alternative name encoded in \p san_raw. + * + * \note Only "dnsName" and "otherName" of type hardware_module_name + * as defined in RFC 4180 is supported. + * + * \note This function should be called on a single raw data of + * subject alternative name. For example, after successful + * certificate parsing, one must iterate on every item in the + * \p crt->subject_alt_names sequence, and pass it to + * this function. + * + * \warning The target structure contains pointers to the raw data of the + * parsed certificate, and its lifetime is restricted by the + * lifetime of the certificate. + * + * \return \c 0 on success + * \return #MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE for an unsupported + * SAN type. + * \return Another negative value for any other failure. + */ int mbedtls_x509_parse_subject_alt_name( const mbedtls_x509_buf *san_buf, mbedtls_x509_subject_alternative_name *san ) { @@ -1882,19 +1760,15 @@ int mbedtls_x509_parse_subject_alt_name( const mbedtls_x509_buf *san_buf, case( MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_X509_SAN_OTHER_NAME ): { mbedtls_x509_san_other_name other_name; - ret = x509_get_other_name( san_buf, &other_name ); - if( ret != 0 ) - return( ret ); - + if( ret ) + return ret; memset( san, 0, sizeof( mbedtls_x509_subject_alternative_name ) ); san->type = MBEDTLS_X509_SAN_OTHER_NAME; memcpy( &san->san.other_name, &other_name, sizeof( other_name ) ); - } break; - /* * dNSName */ @@ -1902,20 +1776,46 @@ int mbedtls_x509_parse_subject_alt_name( const mbedtls_x509_buf *san_buf, { memset( san, 0, sizeof( mbedtls_x509_subject_alternative_name ) ); san->type = MBEDTLS_X509_SAN_DNS_NAME; - - memcpy( &san->san.unstructured_name, - san_buf, sizeof( *san_buf ) ); - + memcpy( &san->san.unstructured_name, san_buf, sizeof( *san_buf ) ); + } + break; + /* + * uniformResourceIdentifier + */ + case( MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_X509_SAN_UNIFORM_RESOURCE_IDENTIFIER ): + { + memset( san, 0, sizeof( mbedtls_x509_subject_alternative_name ) ); + san->type = MBEDTLS_X509_SAN_UNIFORM_RESOURCE_IDENTIFIER; + memcpy( &san->san.unstructured_name, san_buf, sizeof( *san_buf ) ); + } + break; + /* + * rfc822Name + */ + case( MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_X509_SAN_RFC822_NAME ): + { + memset( san, 0, sizeof( mbedtls_x509_subject_alternative_name ) ); + san->type = MBEDTLS_X509_SAN_RFC822_NAME; + memcpy( &san->san.unstructured_name, san_buf, sizeof( *san_buf ) ); + } + break; + /* + * iPAddress + */ + case( MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_X509_SAN_IP_ADDRESS ): + { + memset( san, 0, sizeof( mbedtls_x509_subject_alternative_name ) ); + san->type = MBEDTLS_X509_SAN_IP_ADDRESS; + san->san.ip = READ32BE(san_buf->p); } break; - /* * Type not supported */ default: return( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ); } - return( 0 ); + return 0; } #define PRINT_ITEM(i) \ @@ -1936,7 +1836,6 @@ static int x509_info_cert_type( char **buf, size_t *size, size_t n = *size; char *p = *buf; const char *sep = ""; - CERT_TYPE( MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT, "SSL Client" ); CERT_TYPE( MBEDTLS_X509_NS_CERT_TYPE_SSL_SERVER, "SSL Server" ); CERT_TYPE( MBEDTLS_X509_NS_CERT_TYPE_EMAIL, "Email" ); @@ -1945,11 +1844,9 @@ static int x509_info_cert_type( char **buf, size_t *size, CERT_TYPE( MBEDTLS_X509_NS_CERT_TYPE_SSL_CA, "SSL CA" ); CERT_TYPE( MBEDTLS_X509_NS_CERT_TYPE_EMAIL_CA, "Email CA" ); CERT_TYPE( MBEDTLS_X509_NS_CERT_TYPE_OBJECT_SIGNING_CA, "Object Signing CA" ); - *size = n; *buf = p; - - return( 0 ); + return 0; } #define KEY_USAGE(code,name) \ @@ -1963,7 +1860,6 @@ static int x509_info_key_usage( char **buf, size_t *size, size_t n = *size; char *p = *buf; const char *sep = ""; - KEY_USAGE( MBEDTLS_X509_KU_DIGITAL_SIGNATURE, "Digital Signature" ); KEY_USAGE( MBEDTLS_X509_KU_NON_REPUDIATION, "Non Repudiation" ); KEY_USAGE( MBEDTLS_X509_KU_KEY_ENCIPHERMENT, "Key Encipherment" ); @@ -1973,11 +1869,9 @@ static int x509_info_key_usage( char **buf, size_t *size, KEY_USAGE( MBEDTLS_X509_KU_CRL_SIGN, "CRL Sign" ); KEY_USAGE( MBEDTLS_X509_KU_ENCIPHER_ONLY, "Encipher Only" ); KEY_USAGE( MBEDTLS_X509_KU_DECIPHER_ONLY, "Decipher Only" ); - *size = n; *buf = p; - - return( 0 ); + return 0; } static int x509_info_ext_key_usage( char **buf, size_t *size, @@ -1989,24 +1883,18 @@ static int x509_info_ext_key_usage( char **buf, size_t *size, char *p = *buf; const mbedtls_x509_sequence *cur = extended_key_usage; const char *sep = ""; - - while( cur != NULL ) + while( cur ) { - if( mbedtls_oid_get_extended_key_usage( &cur->buf, &desc ) != 0 ) + if( mbedtls_oid_get_extended_key_usage( &cur->buf, &desc ) ) desc = "???"; - ret = mbedtls_snprintf( p, n, "%s%s", sep, desc ); MBEDTLS_X509_SAFE_SNPRINTF; - sep = ", "; - cur = cur->next; } - *size = n; *buf = p; - - return( 0 ); + return 0; } static int x509_info_cert_policies( char **buf, size_t *size, @@ -2018,171 +1906,145 @@ static int x509_info_cert_policies( char **buf, size_t *size, char *p = *buf; const mbedtls_x509_sequence *cur = certificate_policies; const char *sep = ""; - - while( cur != NULL ) - { - if( mbedtls_oid_get_certificate_policies( &cur->buf, &desc ) != 0 ) + while( cur ) { + if( mbedtls_oid_get_certificate_policies( &cur->buf, &desc ) ) desc = "???"; - ret = mbedtls_snprintf( p, n, "%s%s", sep, desc ); MBEDTLS_X509_SAFE_SNPRINTF; - sep = ", "; - cur = cur->next; } - *size = n; *buf = p; - - return( 0 ); + return 0; } -/* - * Return an informational string about the certificate. - */ #define BEFORE_COLON 18 #define BC "18" + +/** + * \brief Returns an informational string about the + * certificate. + * + * \param buf Buffer to write to + * \param size Maximum size of buffer + * \param prefix A line prefix + * \param crt The X509 certificate to represent + * + * \return The length of the string written (not including the + * terminated nul byte), or a negative error code. + */ int mbedtls_x509_crt_info( char *buf, size_t size, const char *prefix, - const mbedtls_x509_crt *crt ) + const mbedtls_x509_crt *crt ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t n; char *p; char key_size_str[BEFORE_COLON]; - p = buf; n = size; - - if( NULL == crt ) - { + if( !crt ) { ret = mbedtls_snprintf( p, n, "\nCertificate is uninitialised!\n" ); MBEDTLS_X509_SAFE_SNPRINTF; - return( (int) ( size - n ) ); } - ret = mbedtls_snprintf( p, n, "%scert. version : %d\n", - prefix, crt->version ); + prefix, crt->version ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "%sserial number : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - ret = mbedtls_x509_serial_gets( p, n, &crt->serial ); MBEDTLS_X509_SAFE_SNPRINTF; - ret = mbedtls_snprintf( p, n, "\n%sissuer name : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_x509_dn_gets( p, n, &crt->issuer ); MBEDTLS_X509_SAFE_SNPRINTF; - ret = mbedtls_snprintf( p, n, "\n%ssubject name : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_x509_dn_gets( p, n, &crt->subject ); MBEDTLS_X509_SAFE_SNPRINTF; - ret = mbedtls_snprintf( p, n, "\n%sissued on : " \ "%04d-%02d-%02d %02d:%02d:%02d", prefix, crt->valid_from.year, crt->valid_from.mon, crt->valid_from.day, crt->valid_from.hour, crt->valid_from.min, crt->valid_from.sec ); MBEDTLS_X509_SAFE_SNPRINTF; - ret = mbedtls_snprintf( p, n, "\n%sexpires on : " \ "%04d-%02d-%02d %02d:%02d:%02d", prefix, crt->valid_to.year, crt->valid_to.mon, crt->valid_to.day, crt->valid_to.hour, crt->valid_to.min, crt->valid_to.sec ); MBEDTLS_X509_SAFE_SNPRINTF; - ret = mbedtls_snprintf( p, n, "\n%ssigned using : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - ret = mbedtls_x509_sig_alg_gets( p, n, &crt->sig_oid, crt->sig_pk, crt->sig_md, crt->sig_opts ); MBEDTLS_X509_SAFE_SNPRINTF; - /* Key size */ if( ( ret = mbedtls_x509_key_size_helper( key_size_str, BEFORE_COLON, - mbedtls_pk_get_name( &crt->pk ) ) ) != 0 ) + mbedtls_pk_get_name( &crt->pk ) ) ) ) { - return( ret ); + return ret; } - ret = mbedtls_snprintf( p, n, "\n%s%-" BC "s: %d bits", prefix, key_size_str, (int) mbedtls_pk_get_bitlen( &crt->pk ) ); MBEDTLS_X509_SAFE_SNPRINTF; - /* * Optional extensions */ - if( crt->ext_types & MBEDTLS_X509_EXT_BASIC_CONSTRAINTS ) { ret = mbedtls_snprintf( p, n, "\n%sbasic constraints : CA=%s", prefix, crt->ca_istrue ? "true" : "false" ); MBEDTLS_X509_SAFE_SNPRINTF; - if( crt->max_pathlen > 0 ) { ret = mbedtls_snprintf( p, n, ", max_pathlen=%d", crt->max_pathlen - 1 ); MBEDTLS_X509_SAFE_SNPRINTF; } } - if( crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME ) { ret = mbedtls_snprintf( p, n, "\n%ssubject alt name :", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - if( ( ret = x509_info_subject_alt_name( &p, &n, &crt->subject_alt_names, - prefix ) ) != 0 ) - return( ret ); + prefix ) ) ) + return ret; } - if( crt->ext_types & MBEDTLS_X509_EXT_NS_CERT_TYPE ) { ret = mbedtls_snprintf( p, n, "\n%scert. type : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - - if( ( ret = x509_info_cert_type( &p, &n, crt->ns_cert_type ) ) != 0 ) - return( ret ); + if( ( ret = x509_info_cert_type( &p, &n, crt->ns_cert_type ) ) ) + return ret; } - if( crt->ext_types & MBEDTLS_X509_EXT_KEY_USAGE ) { ret = mbedtls_snprintf( p, n, "\n%skey usage : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - - if( ( ret = x509_info_key_usage( &p, &n, crt->key_usage ) ) != 0 ) - return( ret ); + if( ( ret = x509_info_key_usage( &p, &n, crt->key_usage ) ) ) + return ret; } - if( crt->ext_types & MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE ) { ret = mbedtls_snprintf( p, n, "\n%sext key usage : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - if( ( ret = x509_info_ext_key_usage( &p, &n, - &crt->ext_key_usage ) ) != 0 ) - return( ret ); + &crt->ext_key_usage ) ) ) + return ret; } - if( crt->ext_types & MBEDTLS_OID_X509_EXT_CERTIFICATE_POLICIES ) { ret = mbedtls_snprintf( p, n, "\n%scertificate policies : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - if( ( ret = x509_info_cert_policies( &p, &n, - &crt->certificate_policies ) ) != 0 ) - return( ret ); + &crt->certificate_policies ) ) ) + return ret; } - ret = mbedtls_snprintf( p, n, "\n" ); MBEDTLS_X509_SAFE_SNPRINTF; - return( (int) ( size - n ) ); } @@ -2215,6 +2077,18 @@ static const struct x509_crt_verify_string x509_crt_verify_strings[] = { { 0, NULL } }; +/** + * \brief Returns an informational string about the + * verification status of a certificate. + * + * \param buf Buffer to write to + * \param size Maximum size of buffer + * \param prefix A line prefix + * \param flags Verification flags created by mbedtls_x509_crt_verify() + * + * \return The length of the string written (not including the + * terminated nul byte), or a negative error code. + */ int mbedtls_x509_crt_verify_info( char *buf, size_t size, const char *prefix, uint32_t flags ) { @@ -2222,104 +2096,121 @@ int mbedtls_x509_crt_verify_info( char *buf, size_t size, const char *prefix, const struct x509_crt_verify_string *cur; char *p = buf; size_t n = size; - for( cur = x509_crt_verify_strings; cur->string != NULL ; cur++ ) { if( ( flags & cur->code ) == 0 ) continue; - ret = mbedtls_snprintf( p, n, "%s%s\n", prefix, cur->string ); MBEDTLS_X509_SAFE_SNPRINTF; flags ^= cur->code; } - - if( flags != 0 ) + if( flags ) { ret = mbedtls_snprintf( p, n, "%sUnknown reason " "(this should not happen)\n", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; } - return( (int) ( size - n ) ); } -#if defined(MBEDTLS_X509_CHECK_KEY_USAGE) +/** + * \brief Check usage of certificate against keyUsage extension. + * + * \param crt Leaf certificate used. + * \param usage Intended usage(s) (eg MBEDTLS_X509_KU_KEY_ENCIPHERMENT + * before using the certificate to perform an RSA key + * exchange). + * + * \note Except for decipherOnly and encipherOnly, a bit set in the + * usage argument means this bit MUST be set in the + * certificate. For decipherOnly and encipherOnly, it means + * that bit MAY be set. + * + * \return 0 is these uses of the certificate are allowed, + * MBEDTLS_ERR_X509_BAD_INPUT_DATA if the keyUsage extension + * is present but does not match the usage argument. + * + * \note You should only call this function on leaf certificates, on + * (intermediate) CAs the keyUsage extension is automatically + * checked by \c mbedtls_x509_crt_verify(). + */ int mbedtls_x509_crt_check_key_usage( const mbedtls_x509_crt *crt, unsigned int usage ) { unsigned int usage_must, usage_may; unsigned int may_mask = MBEDTLS_X509_KU_ENCIPHER_ONLY | MBEDTLS_X509_KU_DECIPHER_ONLY; - if( ( crt->ext_types & MBEDTLS_X509_EXT_KEY_USAGE ) == 0 ) - return( 0 ); - + return 0; usage_must = usage & ~may_mask; - if( ( ( crt->key_usage & ~may_mask ) & usage_must ) != usage_must ) return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - usage_may = usage & may_mask; - if( ( ( crt->key_usage & may_mask ) | usage_may ) != usage_may ) return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - - return( 0 ); + return 0; } -#endif -#if defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE) +/** + * \brief Check usage of certificate against extendedKeyUsage. + * + * \param crt Leaf certificate used. + * \param usage_oid Intended usage (eg MBEDTLS_OID_SERVER_AUTH or + * MBEDTLS_OID_CLIENT_AUTH). + * \param usage_len Length of usage_oid (eg given by MBEDTLS_OID_SIZE()). + * + * \return 0 if this use of the certificate is allowed, + * MBEDTLS_ERR_X509_BAD_INPUT_DATA if not. + * + * \note Usually only makes sense on leaf certificates. + */ int mbedtls_x509_crt_check_extended_key_usage( const mbedtls_x509_crt *crt, - const char *usage_oid, - size_t usage_len ) + const char *usage_oid, + size_t usage_len ) { const mbedtls_x509_sequence *cur; - /* Extension is not mandatory, absent means no restriction */ if( ( crt->ext_types & MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE ) == 0 ) - return( 0 ); - + return 0; /* * Look for the requested usage (or wildcard ANY) in our list */ for( cur = &crt->ext_key_usage; cur != NULL; cur = cur->next ) { const mbedtls_x509_buf *cur_oid = &cur->buf; - if( cur_oid->len == usage_len && memcmp( cur_oid->p, usage_oid, usage_len ) == 0 ) { - return( 0 ); + return 0; } - if( MBEDTLS_OID_CMP( MBEDTLS_OID_ANY_EXTENDED_KEY_USAGE, cur_oid ) == 0 ) - return( 0 ); + return 0; } - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); } -#endif /* MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE */ -#if defined(MBEDTLS_X509_CRL_PARSE_C) -/* - * Return 1 if the certificate is revoked, or 0 otherwise. +/** + * \brief Verify the certificate revocation status + * + * \param crt a certificate to be verified + * \param crl the CRL to verify against + * + * \return 1 if the certificate is revoked, 0 otherwise + * */ int mbedtls_x509_crt_is_revoked( const mbedtls_x509_crt *crt, const mbedtls_x509_crl *crl ) { const mbedtls_x509_crl_entry *cur = &crl->entry; - - while( cur != NULL && cur->serial.len != 0 ) + while( cur && cur->serial.len ) { if( crt->serial.len == cur->serial.len && memcmp( crt->serial.p, cur->serial.p, crt->serial.len ) == 0 ) { return( 1 ); } - cur = cur->next; } - - return( 0 ); + return 0; } /* @@ -2333,68 +2224,57 @@ static int x509_crt_verifycrl( mbedtls_x509_crt *crt, mbedtls_x509_crt *ca, int flags = 0; unsigned char hash[MBEDTLS_MD_MAX_SIZE]; const mbedtls_md_info_t *md_info; - if( ca == NULL ) return( flags ); - - while( crl_list != NULL ) + while( crl_list ) { if( crl_list->version == 0 || - x509_name_cmp( &crl_list->issuer, &ca->subject ) != 0 ) + mbedtls_x509_name_cmp( &crl_list->issuer, &ca->subject ) ) { crl_list = crl_list->next; continue; } - /* * Check if the CA is configured to sign CRLs */ #if defined(MBEDTLS_X509_CHECK_KEY_USAGE) if( mbedtls_x509_crt_check_key_usage( ca, - MBEDTLS_X509_KU_CRL_SIGN ) != 0 ) + MBEDTLS_X509_KU_CRL_SIGN ) ) { flags |= MBEDTLS_X509_BADCRL_NOT_TRUSTED; break; } #endif - /* * Check if CRL is correctly signed by the trusted CA */ - if( x509_profile_check_md_alg( profile, crl_list->sig_md ) != 0 ) + if( x509_profile_check_md_alg( profile, crl_list->sig_md ) ) flags |= MBEDTLS_X509_BADCRL_BAD_MD; - - if( x509_profile_check_pk_alg( profile, crl_list->sig_pk ) != 0 ) + if( x509_profile_check_pk_alg( profile, crl_list->sig_pk ) ) flags |= MBEDTLS_X509_BADCRL_BAD_PK; - md_info = mbedtls_md_info_from_type( crl_list->sig_md ); - if( mbedtls_md( md_info, crl_list->tbs.p, crl_list->tbs.len, hash ) != 0 ) + if( mbedtls_md( md_info, crl_list->tbs.p, crl_list->tbs.len, hash ) ) { /* Note: this can't happen except after an internal error */ flags |= MBEDTLS_X509_BADCRL_NOT_TRUSTED; break; } - - if( x509_profile_check_key( profile, &ca->pk ) != 0 ) + if( x509_profile_check_key( profile, &ca->pk ) ) flags |= MBEDTLS_X509_BADCERT_BAD_KEY; - if( mbedtls_pk_verify_ext( crl_list->sig_pk, crl_list->sig_opts, &ca->pk, crl_list->sig_md, hash, mbedtls_md_get_size( md_info ), - crl_list->sig.p, crl_list->sig.len ) != 0 ) + crl_list->sig.p, crl_list->sig.len ) ) { flags |= MBEDTLS_X509_BADCRL_NOT_TRUSTED; break; } - /* * Check for validity of CRL (Do not drop out) */ if( mbedtls_x509_time_is_past( &crl_list->next_update ) ) flags |= MBEDTLS_X509_BADCRL_EXPIRED; - if( mbedtls_x509_time_is_future( &crl_list->this_update ) ) flags |= MBEDTLS_X509_BADCRL_FUTURE; - /* * Check if certificate is revoked */ @@ -2403,56 +2283,31 @@ static int x509_crt_verifycrl( mbedtls_x509_crt *crt, mbedtls_x509_crt *ca, flags |= MBEDTLS_X509_BADCERT_REVOKED; break; } - crl_list = crl_list->next; } - return( flags ); } -#endif /* MBEDTLS_X509_CRL_PARSE_C */ /* * Check the signature of a certificate by its parent */ -static int x509_crt_check_signature( const mbedtls_x509_crt *child, - mbedtls_x509_crt *parent, - mbedtls_x509_crt_restart_ctx *rs_ctx ) +int mbedtls_x509_crt_check_signature( const mbedtls_x509_crt *child, + mbedtls_x509_crt *parent, + mbedtls_x509_crt_restart_ctx *rs_ctx ) { unsigned char hash[MBEDTLS_MD_MAX_SIZE]; size_t hash_len; -#if !defined(MBEDTLS_USE_PSA_CRYPTO) const mbedtls_md_info_t *md_info; md_info = mbedtls_md_info_from_type( child->sig_md ); hash_len = mbedtls_md_get_size( md_info ); - /* Note: hash errors can happen only after an internal error */ if( mbedtls_md( md_info, child->tbs.p, child->tbs.len, hash ) != 0 ) return( -1 ); -#else - psa_hash_operation_t hash_operation = PSA_HASH_OPERATION_INIT; - psa_algorithm_t hash_alg = mbedtls_psa_translate_md( child->sig_md ); - - if( psa_hash_setup( &hash_operation, hash_alg ) != PSA_SUCCESS ) - return( -1 ); - - if( psa_hash_update( &hash_operation, child->tbs.p, child->tbs.len ) - != PSA_SUCCESS ) - { - return( -1 ); - } - - if( psa_hash_finish( &hash_operation, hash, sizeof( hash ), &hash_len ) - != PSA_SUCCESS ) - { - return( -1 ); - } -#endif /* MBEDTLS_USE_PSA_CRYPTO */ /* Skip expensive computation on obvious mismatch */ if( ! mbedtls_pk_can_do( &parent->pk, child->sig_pk ) ) - return( -1 ); - + return -1; #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) - if( rs_ctx != NULL && child->sig_pk == MBEDTLS_PK_ECDSA ) + if( rs_ctx && child->sig_pk == MBEDTLS_PK_ECDSA ) { return( mbedtls_pk_verify_restartable( &parent->pk, child->sig_md, hash, hash_len, @@ -2461,47 +2316,40 @@ static int x509_crt_check_signature( const mbedtls_x509_crt *child, #else (void) rs_ctx; #endif - return( mbedtls_pk_verify_ext( child->sig_pk, child->sig_opts, &parent->pk, child->sig_md, hash, hash_len, child->sig.p, child->sig.len ) ); } /* - * Check if 'parent' is a suitable parent (signing CA) for 'child'. + * Checks if 'parent' is a suitable parent (signing CA) for 'child'. * Return 0 if yes, -1 if not. * * top means parent is a locally-trusted certificate */ -static int x509_crt_check_parent( const mbedtls_x509_crt *child, - const mbedtls_x509_crt *parent, - int top ) +int mbedtls_x509_crt_check_parent( const mbedtls_x509_crt *child, + const mbedtls_x509_crt *parent, + int top ) { int need_ca_bit; - /* Parent must be the issuer */ - if( x509_name_cmp( &child->issuer, &parent->subject ) != 0 ) - return( -1 ); - + if( mbedtls_x509_name_cmp( &child->issuer, &parent->subject ) ) + return -1; /* Parent must have the basicConstraints CA bit set as a general rule */ need_ca_bit = 1; - /* Exception: v1/v2 certificates that are locally trusted. */ if( top && parent->version < 3 ) need_ca_bit = 0; - if( need_ca_bit && ! parent->ca_istrue ) - return( -1 ); - + return -1; #if defined(MBEDTLS_X509_CHECK_KEY_USAGE) if( need_ca_bit && - mbedtls_x509_crt_check_key_usage( parent, MBEDTLS_X509_KU_KEY_CERT_SIGN ) != 0 ) + mbedtls_x509_crt_check_key_usage( parent, MBEDTLS_X509_KU_KEY_CERT_SIGN ) ) { - return( -1 ); + return -1; } #endif - - return( 0 ); + return 0; } /* @@ -2560,66 +2408,55 @@ static int x509_crt_find_parent_in( int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; mbedtls_x509_crt *parent, *fallback_parent; int signature_is_good = 0, fallback_signature_is_good; - #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) /* did we have something in progress? */ - if( rs_ctx != NULL && rs_ctx->parent != NULL ) + if( rs_ctx && rs_ctx->parent ) { /* restore saved state */ parent = rs_ctx->parent; fallback_parent = rs_ctx->fallback_parent; fallback_signature_is_good = rs_ctx->fallback_signature_is_good; - /* clear saved state */ rs_ctx->parent = NULL; rs_ctx->fallback_parent = NULL; rs_ctx->fallback_signature_is_good = 0; - /* resume where we left */ goto check_signature; } #endif - fallback_parent = NULL; fallback_signature_is_good = 0; - - for( parent = candidates; parent != NULL; parent = parent->next ) + for( parent = candidates; parent; parent = parent->next ) { /* basic parenting skills (name, CA bit, key usage) */ - if( x509_crt_check_parent( child, parent, top ) != 0 ) + if( mbedtls_x509_crt_check_parent( child, parent, top ) ) continue; - /* +1 because stored max_pathlen is 1 higher that the actual value */ if( parent->max_pathlen > 0 && (size_t) parent->max_pathlen < 1 + path_cnt - self_cnt ) { continue; } - /* Signature */ #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) check_signature: #endif - ret = x509_crt_check_signature( child, parent, rs_ctx ); - + ret = mbedtls_x509_crt_check_signature( child, parent, rs_ctx ); #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) - if( rs_ctx != NULL && ret == MBEDTLS_ERR_ECP_IN_PROGRESS ) + if( rs_ctx && ret == MBEDTLS_ERR_ECP_IN_PROGRESS ) { /* save state */ rs_ctx->parent = parent; rs_ctx->fallback_parent = fallback_parent; rs_ctx->fallback_signature_is_good = fallback_signature_is_good; - - return( ret ); + return ret; } #else (void) ret; #endif - signature_is_good = ret == 0; if( top && ! signature_is_good ) continue; - /* optional time check */ if( mbedtls_x509_time_is_past( &parent->valid_to ) || mbedtls_x509_time_is_future( &parent->valid_from ) ) @@ -2629,23 +2466,18 @@ check_signature: fallback_parent = parent; fallback_signature_is_good = signature_is_good; } - continue; } - *r_parent = parent; *r_signature_is_good = signature_is_good; - break; } - if( parent == NULL ) { *r_parent = fallback_parent; *r_signature_is_good = fallback_signature_is_good; } - - return( 0 ); + return 0; } /* @@ -2682,53 +2514,44 @@ static int x509_crt_find_parent( { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; mbedtls_x509_crt *search_list; - *parent_is_trusted = 1; - #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) /* restore then clear saved state if we have some stored */ - if( rs_ctx != NULL && rs_ctx->parent_is_trusted != -1 ) + if( rs_ctx && rs_ctx->parent_is_trusted != -1 ) { *parent_is_trusted = rs_ctx->parent_is_trusted; rs_ctx->parent_is_trusted = -1; } #endif - while( 1 ) { search_list = *parent_is_trusted ? trust_ca : child->next; - ret = x509_crt_find_parent_in( child, search_list, parent, signature_is_good, *parent_is_trusted, path_cnt, self_cnt, rs_ctx ); - #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) - if( rs_ctx != NULL && ret == MBEDTLS_ERR_ECP_IN_PROGRESS ) + if( rs_ctx && ret == MBEDTLS_ERR_ECP_IN_PROGRESS ) { /* save state */ rs_ctx->parent_is_trusted = *parent_is_trusted; - return( ret ); + return ret; } #else (void) ret; #endif - /* stop here if found or already in second iteration */ - if( *parent != NULL || *parent_is_trusted == 0 ) + if( *parent || *parent_is_trusted == 0 ) break; - /* prepare second iteration */ *parent_is_trusted = 0; } - /* extra precaution against mistakes in the caller */ if( *parent == NULL ) { *parent_is_trusted = 0; *signature_is_good = 0; } - - return( 0 ); + return 0; } /* @@ -2742,23 +2565,20 @@ static int x509_crt_check_ee_locally_trusted( mbedtls_x509_crt *trust_ca ) { mbedtls_x509_crt *cur; - /* must be self-issued */ - if( x509_name_cmp( &crt->issuer, &crt->subject ) != 0 ) - return( -1 ); - + if( mbedtls_x509_name_cmp( &crt->issuer, &crt->subject ) ) + return -1; /* look for an exact match with trusted cert */ - for( cur = trust_ca; cur != NULL; cur = cur->next ) + for( cur = trust_ca; cur; cur = cur->next ) { if( crt->raw.len == cur->raw.len && memcmp( crt->raw.p, cur->raw.p, crt->raw.len ) == 0 ) { - return( 0 ); + return 0; } } - /* too bad */ - return( -1 ); + return -1; } /* @@ -2823,29 +2643,24 @@ static int x509_crt_verify_chain( int signature_is_good; unsigned self_cnt; mbedtls_x509_crt *cur_trust_ca = NULL; - #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) /* resume if we had an operation in progress */ - if( rs_ctx != NULL && rs_ctx->in_progress == x509_crt_rs_find_parent ) + if( rs_ctx && rs_ctx->in_progress == x509_crt_rs_find_parent ) { /* restore saved state */ *ver_chain = rs_ctx->ver_chain; /* struct copy */ self_cnt = rs_ctx->self_cnt; - /* restore derived state */ cur = &ver_chain->items[ver_chain->len - 1]; child = cur->crt; flags = &cur->flags; - goto find_parent; } #endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */ - child = crt; self_cnt = 0; parent_is_trusted = 0; child_is_trusted = 0; - while( 1 ) { /* Add certificate to the verification chain */ cur = &ver_chain->items[ver_chain->len]; @@ -2853,49 +2668,39 @@ static int x509_crt_verify_chain( cur->flags = 0; ver_chain->len++; flags = &cur->flags; - /* Check time-validity (all certificates) */ if( mbedtls_x509_time_is_past( &child->valid_to ) ) *flags |= MBEDTLS_X509_BADCERT_EXPIRED; - if( mbedtls_x509_time_is_future( &child->valid_from ) ) *flags |= MBEDTLS_X509_BADCERT_FUTURE; - /* Stop here for trusted roots (but not for trusted EE certs) */ if( child_is_trusted ) - return( 0 ); - + return 0; /* Check signature algorithm: MD & PK algs */ - if( x509_profile_check_md_alg( profile, child->sig_md ) != 0 ) + if( x509_profile_check_md_alg( profile, child->sig_md ) ) *flags |= MBEDTLS_X509_BADCERT_BAD_MD; - - if( x509_profile_check_pk_alg( profile, child->sig_pk ) != 0 ) + if( x509_profile_check_pk_alg( profile, child->sig_pk ) ) *flags |= MBEDTLS_X509_BADCERT_BAD_PK; - /* Special case: EE certs that are locally trusted */ if( ver_chain->len == 1 && x509_crt_check_ee_locally_trusted( child, trust_ca ) == 0 ) { - return( 0 ); + return 0; } - #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) find_parent: #endif - /* Obtain list of potential trusted signers from CA callback, * or use statically provided list. */ #if defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK) - if( f_ca_cb != NULL ) + if( f_ca_cb ) { mbedtls_x509_crt_free( ver_chain->trust_ca_cb_result ); mbedtls_free( ver_chain->trust_ca_cb_result ); ver_chain->trust_ca_cb_result = NULL; - ret = f_ca_cb( p_ca_cb, child, &ver_chain->trust_ca_cb_result ); - if( ret != 0 ) + if( ret ) return( MBEDTLS_ERR_X509_FATAL_ERROR ); - cur_trust_ca = ver_chain->trust_ca_cb_result; } else @@ -2905,42 +2710,36 @@ find_parent: ((void) p_ca_cb); cur_trust_ca = trust_ca; } - /* Look for a parent in trusted CAs or up the chain */ ret = x509_crt_find_parent( child, cur_trust_ca, &parent, &parent_is_trusted, &signature_is_good, ver_chain->len - 1, self_cnt, rs_ctx ); - #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) - if( rs_ctx != NULL && ret == MBEDTLS_ERR_ECP_IN_PROGRESS ) + if( rs_ctx && ret == MBEDTLS_ERR_ECP_IN_PROGRESS ) { /* save state */ rs_ctx->in_progress = x509_crt_rs_find_parent; rs_ctx->self_cnt = self_cnt; rs_ctx->ver_chain = *ver_chain; /* struct copy */ - - return( ret ); + return ret; } #else (void) ret; #endif - /* No parent? We're done here */ if( parent == NULL ) { *flags |= MBEDTLS_X509_BADCERT_NOT_TRUSTED; - return( 0 ); + return 0; } - /* Count intermediate self-issued (not necessarily self-signed) certs. * These can occur with some strategies for key rollover, see [SIRO], * and should be excluded from max_pathlen checks. */ if( ver_chain->len != 1 && - x509_name_cmp( &child->issuer, &child->subject ) == 0 ) + mbedtls_x509_name_cmp( &child->issuer, &child->subject ) == 0 ) { self_cnt++; } - /* path_cnt is 0 for the first intermediate CA, * and if parent is trusted it's not an intermediate CA */ if( ! parent_is_trusted && @@ -2949,22 +2748,18 @@ find_parent: /* return immediately to avoid overflow the chain array */ return( MBEDTLS_ERR_X509_FATAL_ERROR ); } - /* signature was checked while searching parent */ if( ! signature_is_good ) *flags |= MBEDTLS_X509_BADCERT_NOT_TRUSTED; - /* check size of signing key */ - if( x509_profile_check_key( profile, &parent->pk ) != 0 ) + if( x509_profile_check_key( profile, &parent->pk ) ) *flags |= MBEDTLS_X509_BADCERT_BAD_KEY; - #if defined(MBEDTLS_X509_CRL_PARSE_C) /* Check trusted CA's CRL for the given crt */ *flags |= x509_crt_verifycrl( child, parent, ca_crl, profile ); #else (void) ca_crl; #endif - /* prepare for next iteration */ child = parent; parent = NULL; @@ -2983,16 +2778,14 @@ static int x509_crt_check_cn( const mbedtls_x509_buf *name, if( name->len == cn_len && x509_memcasecmp( cn, name->p, cn_len ) == 0 ) { - return( 0 ); + return 0; } - /* try wildcard match */ if( x509_check_wildcard( cn, name ) == 0 ) { - return( 0 ); + return 0; } - - return( -1 ); + return -1; } /* @@ -3003,15 +2796,12 @@ static int x509_crt_check_san( const mbedtls_x509_buf *name, { const unsigned char san_type = (unsigned char) name->tag & MBEDTLS_ASN1_TAG_VALUE_MASK; - /* dNSName */ if( san_type == MBEDTLS_X509_SAN_DNS_NAME ) return( x509_crt_check_cn( name, cn, cn_len ) ); - /* (We may handle other types here later.) */ - /* Unrecognized type */ - return( -1 ); + return -1; } /* @@ -3024,21 +2814,19 @@ static void x509_crt_verify_name( const mbedtls_x509_crt *crt, const mbedtls_x509_name *name; const mbedtls_x509_sequence *cur; size_t cn_len = strlen( cn ); - if( crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME ) { - for( cur = &crt->subject_alt_names; cur != NULL; cur = cur->next ) + for( cur = &crt->subject_alt_names; cur; cur = cur->next ) { if( x509_crt_check_san( &cur->buf, cn, cn_len ) == 0 ) break; } - if( cur == NULL ) *flags |= MBEDTLS_X509_BADCERT_CN_MISMATCH; } else { - for( name = &crt->subject; name != NULL; name = name->next ) + for( name = &crt->subject; name; name = name->next ) { if( MBEDTLS_OID_CMP( MBEDTLS_OID_AT_CN, &name->oid ) == 0 && x509_crt_check_cn( &name->val, cn, cn_len ) == 0 ) @@ -3046,7 +2834,6 @@ static void x509_crt_verify_name( const mbedtls_x509_crt *crt, break; } } - if( name == NULL ) *flags |= MBEDTLS_X509_BADCERT_CN_MISMATCH; } @@ -3065,20 +2852,16 @@ static int x509_crt_merge_flags_with_cb( unsigned i; uint32_t cur_flags; const mbedtls_x509_crt_verify_chain_item *cur; - - for( i = ver_chain->len; i != 0; --i ) + for( i = ver_chain->len; i; --i ) { cur = &ver_chain->items[i-1]; cur_flags = cur->flags; - if( NULL != f_vrfy ) - if( ( ret = f_vrfy( p_vrfy, cur->crt, (int) i-1, &cur_flags ) ) != 0 ) - return( ret ); - + if( ( ret = f_vrfy( p_vrfy, cur->crt, (int) i-1, &cur_flags ) ) ) + return ret; *flags |= cur_flags; } - - return( 0 ); + return 0; } /* @@ -3092,7 +2875,7 @@ static int x509_crt_merge_flags_with_cb( * - then calls the callback and merges the flags * * The parameters pairs `trust_ca`, `ca_crl` and `f_ca_cb`, `p_ca_cb` - * are mutually exclusive: If `f_ca_cb != NULL`, it will be used by the + * are mutually exclusive: If `f_ca_cb`, it will be used by the * verification routine to search for trusted signers, and CRLs will * be disabled. Otherwise, `trust_ca` will be used as the static list * of trusted signers, and `ca_crl` will be use as the static list @@ -3113,85 +2896,129 @@ static int x509_crt_verify_restartable_ca_cb( mbedtls_x509_crt *crt, mbedtls_pk_type_t pk_type; mbedtls_x509_crt_verify_chain ver_chain; uint32_t ee_flags; - *flags = 0; ee_flags = 0; x509_crt_verify_chain_reset( &ver_chain ); - if( profile == NULL ) { ret = MBEDTLS_ERR_X509_BAD_INPUT_DATA; goto exit; } - /* check name if requested */ - if( cn != NULL ) + if( cn ) x509_crt_verify_name( crt, cn, &ee_flags ); - /* Check the type and size of the key */ pk_type = mbedtls_pk_get_type( &crt->pk ); - - if( x509_profile_check_pk_alg( profile, pk_type ) != 0 ) + if( x509_profile_check_pk_alg( profile, pk_type ) ) ee_flags |= MBEDTLS_X509_BADCERT_BAD_PK; - - if( x509_profile_check_key( profile, &crt->pk ) != 0 ) + if( x509_profile_check_key( profile, &crt->pk ) ) ee_flags |= MBEDTLS_X509_BADCERT_BAD_KEY; - /* Check the chain */ ret = x509_crt_verify_chain( crt, trust_ca, ca_crl, f_ca_cb, p_ca_cb, profile, &ver_chain, rs_ctx ); - - if( ret != 0 ) + if( ret ) goto exit; - /* Merge end-entity flags */ ver_chain.items[0].flags |= ee_flags; - /* Build final flags, calling callback on the way if any */ ret = x509_crt_merge_flags_with_cb( flags, &ver_chain, f_vrfy, p_vrfy ); - exit: - #if defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK) mbedtls_x509_crt_free( ver_chain.trust_ca_cb_result ); mbedtls_free( ver_chain.trust_ca_cb_result ); ver_chain.trust_ca_cb_result = NULL; #endif /* MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK */ - #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) - if( rs_ctx != NULL && ret != MBEDTLS_ERR_ECP_IN_PROGRESS ) + if( rs_ctx && ret != MBEDTLS_ERR_ECP_IN_PROGRESS ) mbedtls_x509_crt_restart_free( rs_ctx ); #endif - /* prevent misuse of the vrfy callback - VERIFY_FAILED would be ignored by * the SSL module for authmode optional, but non-zero return from the * callback means a fatal error so it shouldn't be ignored */ if( ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED ) ret = MBEDTLS_ERR_X509_FATAL_ERROR; - - if( ret != 0 ) - { + if( ret ) { *flags = (uint32_t) -1; - return( ret ); + return ret; } - - if( *flags != 0 ) + if( *flags ) return( MBEDTLS_ERR_X509_CERT_VERIFY_FAILED ); - - return( 0 ); + return 0; } - -/* - * Verify the certificate validity (default profile, not restartable) +/** + * \brief Verify a chain of certificates. + * + * The verify callback is a user-supplied callback that + * can clear / modify / add flags for a certificate. If set, + * the verification callback is called for each + * certificate in the chain (from the trust-ca down to the + * presented crt). The parameters for the callback are: + * (void *parameter, mbedtls_x509_crt *crt, int certificate_depth, + * int *flags). With the flags representing current flags for + * that specific certificate and the certificate depth from + * the bottom (Peer cert depth = 0). + * + * All flags left after returning from the callback + * are also returned to the application. The function should + * return 0 for anything (including invalid certificates) + * other than fatal error, as a non-zero return code + * immediately aborts the verification process. For fatal + * errors, a specific error code should be used (different + * from MBEDTLS_ERR_X509_CERT_VERIFY_FAILED which should not + * be returned at this point), or MBEDTLS_ERR_X509_FATAL_ERROR + * can be used if no better code is available. + * + * \note In case verification failed, the results can be displayed + * using \c mbedtls_x509_crt_verify_info() + * + * \note Same as \c mbedtls_x509_crt_verify_with_profile() with the + * default security profile. + * + * \note It is your responsibility to provide up-to-date CRLs for + * all trusted CAs. If no CRL is provided for the CA that was + * used to sign the certificate, CRL verification is skipped + * silently, that is *without* setting any flag. + * + * \note The \c trust_ca list can contain two types of certificates: + * (1) those of trusted root CAs, so that certificates + * chaining up to those CAs will be trusted, and (2) + * self-signed end-entity certificates to be trusted (for + * specific peers you know) - in that case, the self-signed + * certificate doesn't need to have the CA bit set. + * + * \param crt The certificate chain to be verified. + * \param trust_ca The list of trusted CAs. + * \param ca_crl The list of CRLs for trusted CAs. + * \param cn The expected Common Name. This will be checked to be + * present in the certificate's subjectAltNames extension or, + * if this extension is absent, as a CN component in its + * Subject name. Currently only DNS names are supported. This + * may be \c NULL if the CN need not be verified. + * \param flags The address at which to store the result of the verification. + * If the verification couldn't be completed, the flag value is + * set to (uint32_t) -1. + * \param f_vrfy The verification callback to use. See the documentation + * of mbedtls_x509_crt_verify() for more information. + * \param p_vrfy The context to be passed to \p f_vrfy. + * + * \return \c 0 if the chain is valid with respect to the + * passed CN, CAs, CRLs and security profile. + * \return #MBEDTLS_ERR_X509_CERT_VERIFY_FAILED in case the + * certificate chain verification failed. In this case, + * \c *flags will have one or more + * \c MBEDTLS_X509_BADCERT_XXX or \c MBEDTLS_X509_BADCRL_XXX + * flags set. + * \return Another negative error code in case of a fatal error + * encountered during the verification process. */ int mbedtls_x509_crt_verify( mbedtls_x509_crt *crt, - mbedtls_x509_crt *trust_ca, - mbedtls_x509_crl *ca_crl, - const char *cn, uint32_t *flags, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ) + mbedtls_x509_crt *trust_ca, + mbedtls_x509_crl *ca_crl, + const char *cn, uint32_t *flags, + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy) { return( x509_crt_verify_restartable_ca_cb( crt, trust_ca, ca_crl, NULL, NULL, @@ -3200,16 +3027,47 @@ int mbedtls_x509_crt_verify( mbedtls_x509_crt *crt, f_vrfy, p_vrfy, NULL ) ); } -/* - * Verify the certificate validity (user-chosen profile, not restartable) +/** + * \brief Verify a chain of certificates with respect to + * a configurable security profile. + * + * \note Same as \c mbedtls_x509_crt_verify(), but with explicit + * security profile. + * + * \note The restrictions on keys (RSA minimum size, allowed curves + * for ECDSA) apply to all certificates: trusted root, + * intermediate CAs if any, and end entity certificate. + * + * \param crt The certificate chain to be verified. + * \param trust_ca The list of trusted CAs. + * \param ca_crl The list of CRLs for trusted CAs. + * \param profile The security profile to use for the verification. + * \param cn The expected Common Name. This may be \c NULL if the + * CN need not be verified. + * \param flags The address at which to store the result of the verification. + * If the verification couldn't be completed, the flag value is + * set to (uint32_t) -1. + * \param f_vrfy The verification callback to use. See the documentation + * of mbedtls_x509_crt_verify() for more information. + * \param p_vrfy The context to be passed to \p f_vrfy. + * + * \return \c 0 if the chain is valid with respect to the + * passed CN, CAs, CRLs and security profile. + * \return #MBEDTLS_ERR_X509_CERT_VERIFY_FAILED in case the + * certificate chain verification failed. In this case, + * \c *flags will have one or more + * \c MBEDTLS_X509_BADCERT_XXX or \c MBEDTLS_X509_BADCRL_XXX + * flags set. + * \return Another negative error code in case of a fatal error + * encountered during the verification process. */ int mbedtls_x509_crt_verify_with_profile( mbedtls_x509_crt *crt, - mbedtls_x509_crt *trust_ca, - mbedtls_x509_crl *ca_crl, - const mbedtls_x509_crt_profile *profile, - const char *cn, uint32_t *flags, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ) + mbedtls_x509_crt *trust_ca, + mbedtls_x509_crl *ca_crl, + const mbedtls_x509_crt_profile *profile, + const char *cn, uint32_t *flags, + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy ) { return( x509_crt_verify_restartable_ca_cb( crt, trust_ca, ca_crl, NULL, NULL, @@ -3218,9 +3076,27 @@ int mbedtls_x509_crt_verify_with_profile( mbedtls_x509_crt *crt, } #if defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK) -/* - * Verify the certificate validity (user-chosen profile, CA callback, - * not restartable). +/** + * \brief Version of \c mbedtls_x509_crt_verify_with_profile() which + * uses a callback to acquire the list of trusted CA + * certificates. + * + * \param crt The certificate chain to be verified. + * \param f_ca_cb The callback to be used to query for potential signers + * of a given child certificate. See the documentation of + * ::mbedtls_x509_crt_ca_cb_t for more information. + * \param p_ca_cb The opaque context to be passed to \p f_ca_cb. + * \param profile The security profile for the verification. + * \param cn The expected Common Name. This may be \c NULL if the + * CN need not be verified. + * \param flags The address at which to store the result of the verification. + * If the verification couldn't be completed, the flag value is + * set to (uint32_t) -1. + * \param f_vrfy The verification callback to use. See the documentation + * of mbedtls_x509_crt_verify() for more information. + * \param p_vrfy The context to be passed to \p f_vrfy. + * + * \return See \c mbedtls_crt_verify_with_profile(). */ int mbedtls_x509_crt_verify_with_ca_cb( mbedtls_x509_crt *crt, mbedtls_x509_crt_ca_cb_t f_ca_cb, @@ -3237,6 +3113,32 @@ int mbedtls_x509_crt_verify_with_ca_cb( mbedtls_x509_crt *crt, } #endif /* MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK */ +/** + * \brief Restartable version of \c mbedtls_crt_verify_with_profile() + * + * \note Performs the same job as \c mbedtls_crt_verify_with_profile() + * but can return early and restart according to the limit + * set with \c mbedtls_ecp_set_max_ops() to reduce blocking. + * + * \param crt The certificate chain to be verified. + * \param trust_ca The list of trusted CAs. + * \param ca_crl The list of CRLs for trusted CAs. + * \param profile The security profile to use for the verification. + * \param cn The expected Common Name. This may be \c NULL if the + * CN need not be verified. + * \param flags The address at which to store the result of the verification. + * If the verification couldn't be completed, the flag value is + * set to (uint32_t) -1. + * \param f_vrfy The verification callback to use. See the documentation + * of mbedtls_x509_crt_verify() for more information. + * \param p_vrfy The context to be passed to \p f_vrfy. + * \param rs_ctx The restart context to use. This may be set to \c NULL + * to disable restartable ECC. + * + * \return See \c mbedtls_crt_verify_with_profile(), or + * \return #MBEDTLS_ERR_ECP_IN_PROGRESS if maximum number of + * operations was reached: see \c mbedtls_ecp_set_max_ops(). + */ int mbedtls_x509_crt_verify_restartable( mbedtls_x509_crt *crt, mbedtls_x509_crt *trust_ca, mbedtls_x509_crl *ca_crl, @@ -3253,16 +3155,20 @@ int mbedtls_x509_crt_verify_restartable( mbedtls_x509_crt *crt, } -/* - * Initialize a certificate chain +/** + * \brief Initialize a certificate (chain) + * + * \param crt Certificate chain to initialize */ void mbedtls_x509_crt_init( mbedtls_x509_crt *crt ) { memset( crt, 0, sizeof(mbedtls_x509_crt) ); } -/* - * Unallocate all certificate data +/** + * \brief Unallocate all certificate data + * + * \param crt Certificate chain to free */ void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ) { @@ -3272,38 +3178,29 @@ void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ) mbedtls_x509_name *name_prv; mbedtls_x509_sequence *seq_cur; mbedtls_x509_sequence *seq_prv; - if( crt == NULL ) return; - do { mbedtls_pk_free( &cert_cur->pk ); - -#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) - mbedtls_free( cert_cur->sig_opts ); -#endif - name_cur = cert_cur->issuer.next; - while( name_cur != NULL ) + while( name_cur ) { name_prv = name_cur; name_cur = name_cur->next; mbedtls_platform_zeroize( name_prv, sizeof( mbedtls_x509_name ) ); mbedtls_free( name_prv ); } - name_cur = cert_cur->subject.next; - while( name_cur != NULL ) + while( name_cur ) { name_prv = name_cur; name_cur = name_cur->next; mbedtls_platform_zeroize( name_prv, sizeof( mbedtls_x509_name ) ); mbedtls_free( name_prv ); } - seq_cur = cert_cur->ext_key_usage.next; - while( seq_cur != NULL ) + while( seq_cur ) { seq_prv = seq_cur; seq_cur = seq_cur->next; @@ -3311,9 +3208,8 @@ void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ) sizeof( mbedtls_x509_sequence ) ); mbedtls_free( seq_prv ); } - seq_cur = cert_cur->subject_alt_names.next; - while( seq_cur != NULL ) + while( seq_cur ) { seq_prv = seq_cur; seq_cur = seq_cur->next; @@ -3321,9 +3217,8 @@ void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ) sizeof( mbedtls_x509_sequence ) ); mbedtls_free( seq_prv ); } - seq_cur = cert_cur->certificate_policies.next; - while( seq_cur != NULL ) + while( seq_cur ) { seq_prv = seq_cur; seq_cur = seq_cur->next; @@ -3331,57 +3226,48 @@ void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ) sizeof( mbedtls_x509_sequence ) ); mbedtls_free( seq_prv ); } - - if( cert_cur->raw.p != NULL && cert_cur->own_buffer ) + if( cert_cur->raw.p && cert_cur->own_buffer ) { mbedtls_platform_zeroize( cert_cur->raw.p, cert_cur->raw.len ); mbedtls_free( cert_cur->raw.p ); } - cert_cur = cert_cur->next; } - while( cert_cur != NULL ); - + while( cert_cur ); cert_cur = crt; do { cert_prv = cert_cur; cert_cur = cert_cur->next; - mbedtls_platform_zeroize( cert_prv, sizeof( mbedtls_x509_crt ) ); if( cert_prv != crt ) mbedtls_free( cert_prv ); } - while( cert_cur != NULL ); + while( cert_cur ); } #if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) -/* - * Initialize a restart context +/** + * \brief Initialize a restart context */ void mbedtls_x509_crt_restart_init( mbedtls_x509_crt_restart_ctx *ctx ) { mbedtls_pk_restart_init( &ctx->pk ); - ctx->parent = NULL; ctx->fallback_parent = NULL; ctx->fallback_signature_is_good = 0; - ctx->parent_is_trusted = -1; - ctx->in_progress = x509_crt_rs_none; ctx->self_cnt = 0; x509_crt_verify_chain_reset( &ctx->ver_chain ); } -/* - * Free the components of a restart context +/** + * \brief Free the components of a restart context */ -void mbedtls_x509_crt_restart_free( mbedtls_x509_crt_restart_ctx *ctx ) -{ +void mbedtls_x509_crt_restart_free( mbedtls_x509_crt_restart_ctx *ctx ) { if( ctx == NULL ) return; - mbedtls_pk_restart_free( &ctx->pk ); mbedtls_x509_crt_restart_init( ctx ); } diff --git a/third_party/mbedtls/x509_crt.h b/third_party/mbedtls/x509_crt.h index 5df403007..5fb01b508 100644 --- a/third_party/mbedtls/x509_crt.h +++ b/third_party/mbedtls/x509_crt.h @@ -1,52 +1,11 @@ -/* clang-format off */ - -/** - * \file x509_crt.h - * - * \brief X.509 certificate parsing and writing - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_X509_CRT_H -#define MBEDTLS_X509_CRT_H - -#if !defined(MBEDTLS_CONFIG_FILE) +#ifndef MBEDTLS_X509_CRT_H_ +#define MBEDTLS_X509_CRT_H_ +#include "third_party/mbedtls/bignum.h" #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/x509.h" #include "third_party/mbedtls/x509_crl.h" -#include "third_party/mbedtls/bignum.h" - -/** - * \addtogroup x509_module - * \{ - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \name Structures and functions for parsing and writing X.509 certificates - * \{ - */ +COSMOPOLITAN_C_START_ +/* clang-format off */ /** * Container for an X.509 certificate. The certificate may be chained. @@ -58,7 +17,7 @@ typedef struct mbedtls_x509_crt mbedtls_x509_buf raw; /**< The raw certificate data (DER). */ mbedtls_x509_buf tbs; /**< The raw certificate body (DER). The part that is To Be Signed. */ - int version; /**< The X.509 version. (1=v1, 2=v2, 3=v3) */ + int version; /**< The X.509 version. (1=v1, 2=v2, 3=v3) */ mbedtls_x509_buf serial; /**< Unique id for certificate issued by a specific CA. */ mbedtls_x509_buf sig_oid; /**< Signature algorithm, e.g. sha1RSA */ @@ -142,6 +101,7 @@ typedef struct mbedtls_x509_subject_alternative_name union { mbedtls_x509_san_other_name other_name; /**< The otherName supported type. */ mbedtls_x509_buf unstructured_name; /**< The buffer for the un constructed types. Only dnsName currently supported */ + uint32_t ip; } san; /**< A union of the supported SAN types */ } @@ -261,7 +221,6 @@ typedef void mbedtls_x509_crt_restart_ctx; #endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */ -#if defined(MBEDTLS_X509_CRT_PARSE_C) /** * Default security profile. Should provide a good balance between security * and compatibility with current deployments. @@ -279,30 +238,6 @@ extern const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_next; */ extern const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_suiteb; -/** - * \brief Parse a single DER formatted certificate and add it - * to the end of the provided chained list. - * - * \param chain The pointer to the start of the CRT chain to attach to. - * When parsing the first CRT in a chain, this should point - * to an instance of ::mbedtls_x509_crt initialized through - * mbedtls_x509_crt_init(). - * \param buf The buffer holding the DER encoded certificate. - * \param buflen The size in Bytes of \p buf. - * - * \note This function makes an internal copy of the CRT buffer - * \p buf. In particular, \p buf may be destroyed or reused - * after this call returns. To avoid duplicating the CRT - * buffer (at the cost of stricter lifetime constraints), - * use mbedtls_x509_crt_parse_der_nocopy() instead. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_x509_crt_parse_der( mbedtls_x509_crt *chain, - const unsigned char *buf, - size_t buflen ); - /** * \brief The type of certificate extension callbacks. * @@ -340,357 +275,6 @@ typedef int (*mbedtls_x509_crt_ext_cb_t)( void *p_ctx, const unsigned char *p, const unsigned char *end ); -/** - * \brief Parse a single DER formatted certificate and add it - * to the end of the provided chained list. - * - * \param chain The pointer to the start of the CRT chain to attach to. - * When parsing the first CRT in a chain, this should point - * to an instance of ::mbedtls_x509_crt initialized through - * mbedtls_x509_crt_init(). - * \param buf The buffer holding the DER encoded certificate. - * \param buflen The size in Bytes of \p buf. - * \param make_copy When not zero this function makes an internal copy of the - * CRT buffer \p buf. In particular, \p buf may be destroyed - * or reused after this call returns. - * When zero this function avoids duplicating the CRT buffer - * by taking temporary ownership thereof until the CRT - * is destroyed (like mbedtls_x509_crt_parse_der_nocopy()) - * \param cb A callback invoked for every unsupported certificate - * extension. - * \param p_ctx An opaque context passed to the callback. - * - * \note This call is functionally equivalent to - * mbedtls_x509_crt_parse_der(), and/or - * mbedtls_x509_crt_parse_der_nocopy() - * but it calls the callback with every unsupported - * certificate extension and additionally the - * "certificate policies" extension if it contains any - * unsupported certificate policies. - * The callback must return a negative error code if it - * does not know how to handle such an extension. - * When the callback fails to parse a critical extension - * mbedtls_x509_crt_parse_der_with_ext_cb() also fails. - * When the callback fails to parse a non critical extension - * mbedtls_x509_crt_parse_der_with_ext_cb() simply skips - * the extension and continues parsing. - * Future versions of the library may invoke the callback - * in other cases, if and when the need arises. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_x509_crt_parse_der_with_ext_cb( mbedtls_x509_crt *chain, - const unsigned char *buf, - size_t buflen, - int make_copy, - mbedtls_x509_crt_ext_cb_t cb, - void *p_ctx ); - -/** - * \brief Parse a single DER formatted certificate and add it - * to the end of the provided chained list. This is a - * variant of mbedtls_x509_crt_parse_der() which takes - * temporary ownership of the CRT buffer until the CRT - * is destroyed. - * - * \param chain The pointer to the start of the CRT chain to attach to. - * When parsing the first CRT in a chain, this should point - * to an instance of ::mbedtls_x509_crt initialized through - * mbedtls_x509_crt_init(). - * \param buf The address of the readable buffer holding the DER encoded - * certificate to use. On success, this buffer must be - * retained and not be changed for the liftetime of the - * CRT chain \p chain, that is, until \p chain is destroyed - * through a call to mbedtls_x509_crt_free(). - * \param buflen The size in Bytes of \p buf. - * - * \note This call is functionally equivalent to - * mbedtls_x509_crt_parse_der(), but it avoids creating a - * copy of the input buffer at the cost of stronger lifetime - * constraints. This is useful in constrained environments - * where duplication of the CRT cannot be tolerated. - * - * \return \c 0 if successful. - * \return A negative error code on failure. - */ -int mbedtls_x509_crt_parse_der_nocopy( mbedtls_x509_crt *chain, - const unsigned char *buf, - size_t buflen ); - -/** - * \brief Parse one DER-encoded or one or more concatenated PEM-encoded - * certificates and add them to the chained list. - * - * For CRTs in PEM encoding, the function parses permissively: - * if at least one certificate can be parsed, the function - * returns the number of certificates for which parsing failed - * (hence \c 0 if all certificates were parsed successfully). - * If no certificate could be parsed, the function returns - * the first (negative) error encountered during parsing. - * - * PEM encoded certificates may be interleaved by other data - * such as human readable descriptions of their content, as - * long as the certificates are enclosed in the PEM specific - * '-----{BEGIN/END} CERTIFICATE-----' delimiters. - * - * \param chain The chain to which to add the parsed certificates. - * \param buf The buffer holding the certificate data in PEM or DER format. - * For certificates in PEM encoding, this may be a concatenation - * of multiple certificates; for DER encoding, the buffer must - * comprise exactly one certificate. - * \param buflen The size of \p buf, including the terminating \c NULL byte - * in case of PEM encoded data. - * - * \return \c 0 if all certificates were parsed successfully. - * \return The (positive) number of certificates that couldn't - * be parsed if parsing was partly successful (see above). - * \return A negative X509 or PEM error code otherwise. - * - */ -int mbedtls_x509_crt_parse( mbedtls_x509_crt *chain, const unsigned char *buf, size_t buflen ); - -#if defined(MBEDTLS_FS_IO) -/** - * \brief Load one or more certificates and add them - * to the chained list. Parses permissively. If some - * certificates can be parsed, the result is the number - * of failed certificates it encountered. If none complete - * correctly, the first error is returned. - * - * \param chain points to the start of the chain - * \param path filename to read the certificates from - * - * \return 0 if all certificates parsed successfully, a positive number - * if partly successful or a specific X509 or PEM error code - */ -int mbedtls_x509_crt_parse_file( mbedtls_x509_crt *chain, const char *path ); - -/** - * \brief Load one or more certificate files from a path and add them - * to the chained list. Parses permissively. If some - * certificates can be parsed, the result is the number - * of failed certificates it encountered. If none complete - * correctly, the first error is returned. - * - * \param chain points to the start of the chain - * \param path directory / folder to read the certificate files from - * - * \return 0 if all certificates parsed successfully, a positive number - * if partly successful or a specific X509 or PEM error code - */ -int mbedtls_x509_crt_parse_path( mbedtls_x509_crt *chain, const char *path ); - -#endif /* MBEDTLS_FS_IO */ -/** - * \brief This function parses an item in the SubjectAlternativeNames - * extension. - * - * \param san_buf The buffer holding the raw data item of the subject - * alternative name. - * \param san The target structure to populate with the parsed presentation - * of the subject alternative name encoded in \p san_raw. - * - * \note Only "dnsName" and "otherName" of type hardware_module_name - * as defined in RFC 4180 is supported. - * - * \note This function should be called on a single raw data of - * subject alternative name. For example, after successful - * certificate parsing, one must iterate on every item in the - * \p crt->subject_alt_names sequence, and pass it to - * this function. - * - * \warning The target structure contains pointers to the raw data of the - * parsed certificate, and its lifetime is restricted by the - * lifetime of the certificate. - * - * \return \c 0 on success - * \return #MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE for an unsupported - * SAN type. - * \return Another negative value for any other failure. - */ -int mbedtls_x509_parse_subject_alt_name( const mbedtls_x509_buf *san_buf, - mbedtls_x509_subject_alternative_name *san ); -/** - * \brief Returns an informational string about the - * certificate. - * - * \param buf Buffer to write to - * \param size Maximum size of buffer - * \param prefix A line prefix - * \param crt The X509 certificate to represent - * - * \return The length of the string written (not including the - * terminated nul byte), or a negative error code. - */ -int mbedtls_x509_crt_info( char *buf, size_t size, const char *prefix, - const mbedtls_x509_crt *crt ); - -/** - * \brief Returns an informational string about the - * verification status of a certificate. - * - * \param buf Buffer to write to - * \param size Maximum size of buffer - * \param prefix A line prefix - * \param flags Verification flags created by mbedtls_x509_crt_verify() - * - * \return The length of the string written (not including the - * terminated nul byte), or a negative error code. - */ -int mbedtls_x509_crt_verify_info( char *buf, size_t size, const char *prefix, - uint32_t flags ); - -/** - * \brief Verify a chain of certificates. - * - * The verify callback is a user-supplied callback that - * can clear / modify / add flags for a certificate. If set, - * the verification callback is called for each - * certificate in the chain (from the trust-ca down to the - * presented crt). The parameters for the callback are: - * (void *parameter, mbedtls_x509_crt *crt, int certificate_depth, - * int *flags). With the flags representing current flags for - * that specific certificate and the certificate depth from - * the bottom (Peer cert depth = 0). - * - * All flags left after returning from the callback - * are also returned to the application. The function should - * return 0 for anything (including invalid certificates) - * other than fatal error, as a non-zero return code - * immediately aborts the verification process. For fatal - * errors, a specific error code should be used (different - * from MBEDTLS_ERR_X509_CERT_VERIFY_FAILED which should not - * be returned at this point), or MBEDTLS_ERR_X509_FATAL_ERROR - * can be used if no better code is available. - * - * \note In case verification failed, the results can be displayed - * using \c mbedtls_x509_crt_verify_info() - * - * \note Same as \c mbedtls_x509_crt_verify_with_profile() with the - * default security profile. - * - * \note It is your responsibility to provide up-to-date CRLs for - * all trusted CAs. If no CRL is provided for the CA that was - * used to sign the certificate, CRL verification is skipped - * silently, that is *without* setting any flag. - * - * \note The \c trust_ca list can contain two types of certificates: - * (1) those of trusted root CAs, so that certificates - * chaining up to those CAs will be trusted, and (2) - * self-signed end-entity certificates to be trusted (for - * specific peers you know) - in that case, the self-signed - * certificate doesn't need to have the CA bit set. - * - * \param crt The certificate chain to be verified. - * \param trust_ca The list of trusted CAs. - * \param ca_crl The list of CRLs for trusted CAs. - * \param cn The expected Common Name. This will be checked to be - * present in the certificate's subjectAltNames extension or, - * if this extension is absent, as a CN component in its - * Subject name. Currently only DNS names are supported. This - * may be \c NULL if the CN need not be verified. - * \param flags The address at which to store the result of the verification. - * If the verification couldn't be completed, the flag value is - * set to (uint32_t) -1. - * \param f_vrfy The verification callback to use. See the documentation - * of mbedtls_x509_crt_verify() for more information. - * \param p_vrfy The context to be passed to \p f_vrfy. - * - * \return \c 0 if the chain is valid with respect to the - * passed CN, CAs, CRLs and security profile. - * \return #MBEDTLS_ERR_X509_CERT_VERIFY_FAILED in case the - * certificate chain verification failed. In this case, - * \c *flags will have one or more - * \c MBEDTLS_X509_BADCERT_XXX or \c MBEDTLS_X509_BADCRL_XXX - * flags set. - * \return Another negative error code in case of a fatal error - * encountered during the verification process. - */ -int mbedtls_x509_crt_verify( mbedtls_x509_crt *crt, - mbedtls_x509_crt *trust_ca, - mbedtls_x509_crl *ca_crl, - const char *cn, uint32_t *flags, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ); - -/** - * \brief Verify a chain of certificates with respect to - * a configurable security profile. - * - * \note Same as \c mbedtls_x509_crt_verify(), but with explicit - * security profile. - * - * \note The restrictions on keys (RSA minimum size, allowed curves - * for ECDSA) apply to all certificates: trusted root, - * intermediate CAs if any, and end entity certificate. - * - * \param crt The certificate chain to be verified. - * \param trust_ca The list of trusted CAs. - * \param ca_crl The list of CRLs for trusted CAs. - * \param profile The security profile to use for the verification. - * \param cn The expected Common Name. This may be \c NULL if the - * CN need not be verified. - * \param flags The address at which to store the result of the verification. - * If the verification couldn't be completed, the flag value is - * set to (uint32_t) -1. - * \param f_vrfy The verification callback to use. See the documentation - * of mbedtls_x509_crt_verify() for more information. - * \param p_vrfy The context to be passed to \p f_vrfy. - * - * \return \c 0 if the chain is valid with respect to the - * passed CN, CAs, CRLs and security profile. - * \return #MBEDTLS_ERR_X509_CERT_VERIFY_FAILED in case the - * certificate chain verification failed. In this case, - * \c *flags will have one or more - * \c MBEDTLS_X509_BADCERT_XXX or \c MBEDTLS_X509_BADCRL_XXX - * flags set. - * \return Another negative error code in case of a fatal error - * encountered during the verification process. - */ -int mbedtls_x509_crt_verify_with_profile( mbedtls_x509_crt *crt, - mbedtls_x509_crt *trust_ca, - mbedtls_x509_crl *ca_crl, - const mbedtls_x509_crt_profile *profile, - const char *cn, uint32_t *flags, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ); - -/** - * \brief Restartable version of \c mbedtls_crt_verify_with_profile() - * - * \note Performs the same job as \c mbedtls_crt_verify_with_profile() - * but can return early and restart according to the limit - * set with \c mbedtls_ecp_set_max_ops() to reduce blocking. - * - * \param crt The certificate chain to be verified. - * \param trust_ca The list of trusted CAs. - * \param ca_crl The list of CRLs for trusted CAs. - * \param profile The security profile to use for the verification. - * \param cn The expected Common Name. This may be \c NULL if the - * CN need not be verified. - * \param flags The address at which to store the result of the verification. - * If the verification couldn't be completed, the flag value is - * set to (uint32_t) -1. - * \param f_vrfy The verification callback to use. See the documentation - * of mbedtls_x509_crt_verify() for more information. - * \param p_vrfy The context to be passed to \p f_vrfy. - * \param rs_ctx The restart context to use. This may be set to \c NULL - * to disable restartable ECC. - * - * \return See \c mbedtls_crt_verify_with_profile(), or - * \return #MBEDTLS_ERR_ECP_IN_PROGRESS if maximum number of - * operations was reached: see \c mbedtls_ecp_set_max_ops(). - */ -int mbedtls_x509_crt_verify_restartable( mbedtls_x509_crt *crt, - mbedtls_x509_crt *trust_ca, - mbedtls_x509_crl *ca_crl, - const mbedtls_x509_crt_profile *profile, - const char *cn, uint32_t *flags, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy, - mbedtls_x509_crt_restart_ctx *rs_ctx ); - /** * \brief The type of trusted certificate callbacks. * @@ -725,363 +309,48 @@ typedef int (*mbedtls_x509_crt_ca_cb_t)( void *p_ctx, mbedtls_x509_crt const *child, mbedtls_x509_crt **candidate_cas ); -#if defined(MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK) -/** - * \brief Version of \c mbedtls_x509_crt_verify_with_profile() which - * uses a callback to acquire the list of trusted CA - * certificates. - * - * \param crt The certificate chain to be verified. - * \param f_ca_cb The callback to be used to query for potential signers - * of a given child certificate. See the documentation of - * ::mbedtls_x509_crt_ca_cb_t for more information. - * \param p_ca_cb The opaque context to be passed to \p f_ca_cb. - * \param profile The security profile for the verification. - * \param cn The expected Common Name. This may be \c NULL if the - * CN need not be verified. - * \param flags The address at which to store the result of the verification. - * If the verification couldn't be completed, the flag value is - * set to (uint32_t) -1. - * \param f_vrfy The verification callback to use. See the documentation - * of mbedtls_x509_crt_verify() for more information. - * \param p_vrfy The context to be passed to \p f_vrfy. - * - * \return See \c mbedtls_crt_verify_with_profile(). - */ -int mbedtls_x509_crt_verify_with_ca_cb( mbedtls_x509_crt *crt, - mbedtls_x509_crt_ca_cb_t f_ca_cb, - void *p_ca_cb, - const mbedtls_x509_crt_profile *profile, - const char *cn, uint32_t *flags, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ); +int mbedtls_x509_crt_check_extended_key_usage( const mbedtls_x509_crt *, const char *, size_t ); +int mbedtls_x509_crt_check_key_usage( const mbedtls_x509_crt *, unsigned int ); +int mbedtls_x509_crt_check_parent( const mbedtls_x509_crt *, const mbedtls_x509_crt *, int ); +int mbedtls_x509_crt_check_signature( const mbedtls_x509_crt *, mbedtls_x509_crt *, mbedtls_x509_crt_restart_ctx * ); +int mbedtls_x509_crt_info( char *, size_t, const char *, const mbedtls_x509_crt * ); +int mbedtls_x509_crt_is_revoked( const mbedtls_x509_crt *, const mbedtls_x509_crl * ); +int mbedtls_x509_crt_parse( mbedtls_x509_crt *, const unsigned char *, size_t ); +int mbedtls_x509_crt_parse_der( mbedtls_x509_crt *, const unsigned char *, size_t ); +int mbedtls_x509_crt_parse_der_nocopy( mbedtls_x509_crt *, const unsigned char *, size_t ); +int mbedtls_x509_crt_parse_der_with_ext_cb( mbedtls_x509_crt *, const unsigned char *, size_t, int, mbedtls_x509_crt_ext_cb_t, void * ); +int mbedtls_x509_crt_parse_file( mbedtls_x509_crt *, const char * ); +int mbedtls_x509_crt_parse_path( mbedtls_x509_crt *, const char * ); +int mbedtls_x509_crt_verify( mbedtls_x509_crt *, mbedtls_x509_crt *, mbedtls_x509_crl *, const char *, uint32_t *, int (*)(void *, mbedtls_x509_crt *, int, uint32_t *), void * ); +int mbedtls_x509_crt_verify_info( char *, size_t, const char *, uint32_t ); +int mbedtls_x509_crt_verify_restartable( mbedtls_x509_crt *, mbedtls_x509_crt *, mbedtls_x509_crl *, const mbedtls_x509_crt_profile *, const char *, uint32_t *, int (*)(void *, mbedtls_x509_crt *, int, uint32_t *), void *, mbedtls_x509_crt_restart_ctx * ); +int mbedtls_x509_crt_verify_with_ca_cb( mbedtls_x509_crt *, mbedtls_x509_crt_ca_cb_t, void *, const mbedtls_x509_crt_profile *, const char *, uint32_t *, int (*)(void *, mbedtls_x509_crt *, int, uint32_t *), void * ); +int mbedtls_x509_crt_verify_with_profile( mbedtls_x509_crt *, mbedtls_x509_crt *, mbedtls_x509_crl *, const mbedtls_x509_crt_profile *, const char *, uint32_t *, int (*)(void *, mbedtls_x509_crt *, int, uint32_t *), void * ); +int mbedtls_x509_name_cmp( const mbedtls_x509_name *, const mbedtls_x509_name * ); +int mbedtls_x509_parse_subject_alt_name( const mbedtls_x509_buf *, mbedtls_x509_subject_alternative_name * ); +int mbedtls_x509write_crt_der( mbedtls_x509write_cert *, unsigned char *, size_t, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_x509write_crt_pem( mbedtls_x509write_cert *, unsigned char *, size_t, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_x509write_crt_set_authority_key_identifier( mbedtls_x509write_cert * ); +int mbedtls_x509write_crt_set_basic_constraints( mbedtls_x509write_cert *, int, int ); +int mbedtls_x509write_crt_set_ext_key_usage(mbedtls_x509write_cert *, int); +int mbedtls_x509write_crt_set_extension( mbedtls_x509write_cert *, const char *, size_t, int, const unsigned char *, size_t ); +int mbedtls_x509write_crt_set_issuer_name( mbedtls_x509write_cert *, const char * ); +int mbedtls_x509write_crt_set_key_usage( mbedtls_x509write_cert *, unsigned int ); +int mbedtls_x509write_crt_set_ns_cert_type( mbedtls_x509write_cert *, unsigned char ); +int mbedtls_x509write_crt_set_serial( mbedtls_x509write_cert *, const mbedtls_mpi * ); +int mbedtls_x509write_crt_set_subject_key_identifier( mbedtls_x509write_cert * ); +int mbedtls_x509write_crt_set_subject_name( mbedtls_x509write_cert *, const char * ); +int mbedtls_x509write_crt_set_validity( mbedtls_x509write_cert *, const char *, const char * ); +void mbedtls_x509_crt_free( mbedtls_x509_crt * ); +void mbedtls_x509_crt_init( mbedtls_x509_crt * ); +void mbedtls_x509_crt_restart_free( mbedtls_x509_crt_restart_ctx * ); +void mbedtls_x509_crt_restart_init( mbedtls_x509_crt_restart_ctx * ); +void mbedtls_x509write_crt_free( mbedtls_x509write_cert * ); +void mbedtls_x509write_crt_init( mbedtls_x509write_cert * ); +void mbedtls_x509write_crt_set_issuer_key( mbedtls_x509write_cert *, mbedtls_pk_context * ); +void mbedtls_x509write_crt_set_md_alg( mbedtls_x509write_cert *, mbedtls_md_type_t ); +void mbedtls_x509write_crt_set_subject_key( mbedtls_x509write_cert *, mbedtls_pk_context * ); +void mbedtls_x509write_crt_set_version( mbedtls_x509write_cert *, int ); -#endif /* MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK */ - -#if defined(MBEDTLS_X509_CHECK_KEY_USAGE) -/** - * \brief Check usage of certificate against keyUsage extension. - * - * \param crt Leaf certificate used. - * \param usage Intended usage(s) (eg MBEDTLS_X509_KU_KEY_ENCIPHERMENT - * before using the certificate to perform an RSA key - * exchange). - * - * \note Except for decipherOnly and encipherOnly, a bit set in the - * usage argument means this bit MUST be set in the - * certificate. For decipherOnly and encipherOnly, it means - * that bit MAY be set. - * - * \return 0 is these uses of the certificate are allowed, - * MBEDTLS_ERR_X509_BAD_INPUT_DATA if the keyUsage extension - * is present but does not match the usage argument. - * - * \note You should only call this function on leaf certificates, on - * (intermediate) CAs the keyUsage extension is automatically - * checked by \c mbedtls_x509_crt_verify(). - */ -int mbedtls_x509_crt_check_key_usage( const mbedtls_x509_crt *crt, - unsigned int usage ); -#endif /* MBEDTLS_X509_CHECK_KEY_USAGE) */ - -#if defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE) -/** - * \brief Check usage of certificate against extendedKeyUsage. - * - * \param crt Leaf certificate used. - * \param usage_oid Intended usage (eg MBEDTLS_OID_SERVER_AUTH or - * MBEDTLS_OID_CLIENT_AUTH). - * \param usage_len Length of usage_oid (eg given by MBEDTLS_OID_SIZE()). - * - * \return 0 if this use of the certificate is allowed, - * MBEDTLS_ERR_X509_BAD_INPUT_DATA if not. - * - * \note Usually only makes sense on leaf certificates. - */ -int mbedtls_x509_crt_check_extended_key_usage( const mbedtls_x509_crt *crt, - const char *usage_oid, - size_t usage_len ); -#endif /* MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE */ - -#if defined(MBEDTLS_X509_CRL_PARSE_C) -/** - * \brief Verify the certificate revocation status - * - * \param crt a certificate to be verified - * \param crl the CRL to verify against - * - * \return 1 if the certificate is revoked, 0 otherwise - * - */ -int mbedtls_x509_crt_is_revoked( const mbedtls_x509_crt *crt, const mbedtls_x509_crl *crl ); -#endif /* MBEDTLS_X509_CRL_PARSE_C */ - -/** - * \brief Initialize a certificate (chain) - * - * \param crt Certificate chain to initialize - */ -void mbedtls_x509_crt_init( mbedtls_x509_crt *crt ); - -/** - * \brief Unallocate all certificate data - * - * \param crt Certificate chain to free - */ -void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ); - -#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE) -/** - * \brief Initialize a restart context - */ -void mbedtls_x509_crt_restart_init( mbedtls_x509_crt_restart_ctx *ctx ); - -/** - * \brief Free the components of a restart context - */ -void mbedtls_x509_crt_restart_free( mbedtls_x509_crt_restart_ctx *ctx ); -#endif /* MBEDTLS_ECDSA_C && MBEDTLS_ECP_RESTARTABLE */ -#endif /* MBEDTLS_X509_CRT_PARSE_C */ - -/* \} name */ -/* \} addtogroup x509_module */ - -#if defined(MBEDTLS_X509_CRT_WRITE_C) -/** - * \brief Initialize a CRT writing context - * - * \param ctx CRT context to initialize - */ -void mbedtls_x509write_crt_init( mbedtls_x509write_cert *ctx ); - -/** - * \brief Set the verion for a Certificate - * Default: MBEDTLS_X509_CRT_VERSION_3 - * - * \param ctx CRT context to use - * \param version version to set (MBEDTLS_X509_CRT_VERSION_1, MBEDTLS_X509_CRT_VERSION_2 or - * MBEDTLS_X509_CRT_VERSION_3) - */ -void mbedtls_x509write_crt_set_version( mbedtls_x509write_cert *ctx, int version ); - -/** - * \brief Set the serial number for a Certificate. - * - * \param ctx CRT context to use - * \param serial serial number to set - * - * \return 0 if successful - */ -int mbedtls_x509write_crt_set_serial( mbedtls_x509write_cert *ctx, const mbedtls_mpi *serial ); - -/** - * \brief Set the validity period for a Certificate - * Timestamps should be in string format for UTC timezone - * i.e. "YYYYMMDDhhmmss" - * e.g. "20131231235959" for December 31st 2013 - * at 23:59:59 - * - * \param ctx CRT context to use - * \param not_before not_before timestamp - * \param not_after not_after timestamp - * - * \return 0 if timestamp was parsed successfully, or - * a specific error code - */ -int mbedtls_x509write_crt_set_validity( mbedtls_x509write_cert *ctx, const char *not_before, - const char *not_after ); - -/** - * \brief Set the issuer name for a Certificate - * Issuer names should contain a comma-separated list - * of OID types and values: - * e.g. "C=UK,O=ARM,CN=mbed TLS CA" - * - * \param ctx CRT context to use - * \param issuer_name issuer name to set - * - * \return 0 if issuer name was parsed successfully, or - * a specific error code - */ -int mbedtls_x509write_crt_set_issuer_name( mbedtls_x509write_cert *ctx, - const char *issuer_name ); - -/** - * \brief Set the subject name for a Certificate - * Subject names should contain a comma-separated list - * of OID types and values: - * e.g. "C=UK,O=ARM,CN=mbed TLS Server 1" - * - * \param ctx CRT context to use - * \param subject_name subject name to set - * - * \return 0 if subject name was parsed successfully, or - * a specific error code - */ -int mbedtls_x509write_crt_set_subject_name( mbedtls_x509write_cert *ctx, - const char *subject_name ); - -/** - * \brief Set the subject public key for the certificate - * - * \param ctx CRT context to use - * \param key public key to include - */ -void mbedtls_x509write_crt_set_subject_key( mbedtls_x509write_cert *ctx, mbedtls_pk_context *key ); - -/** - * \brief Set the issuer key used for signing the certificate - * - * \param ctx CRT context to use - * \param key private key to sign with - */ -void mbedtls_x509write_crt_set_issuer_key( mbedtls_x509write_cert *ctx, mbedtls_pk_context *key ); - -/** - * \brief Set the MD algorithm to use for the signature - * (e.g. MBEDTLS_MD_SHA1) - * - * \param ctx CRT context to use - * \param md_alg MD algorithm to use - */ -void mbedtls_x509write_crt_set_md_alg( mbedtls_x509write_cert *ctx, mbedtls_md_type_t md_alg ); - -/** - * \brief Generic function to add to or replace an extension in the - * CRT - * - * \param ctx CRT context to use - * \param oid OID of the extension - * \param oid_len length of the OID - * \param critical if the extension is critical (per the RFC's definition) - * \param val value of the extension OCTET STRING - * \param val_len length of the value data - * - * \return 0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED - */ -int mbedtls_x509write_crt_set_extension( mbedtls_x509write_cert *ctx, - const char *oid, size_t oid_len, - int critical, - const unsigned char *val, size_t val_len ); - -/** - * \brief Set the basicConstraints extension for a CRT - * - * \param ctx CRT context to use - * \param is_ca is this a CA certificate - * \param max_pathlen maximum length of certificate chains below this - * certificate (only for CA certificates, -1 is - * inlimited) - * - * \return 0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED - */ -int mbedtls_x509write_crt_set_basic_constraints( mbedtls_x509write_cert *ctx, - int is_ca, int max_pathlen ); - -#if defined(MBEDTLS_SHA1_C) -/** - * \brief Set the subjectKeyIdentifier extension for a CRT - * Requires that mbedtls_x509write_crt_set_subject_key() has been - * called before - * - * \param ctx CRT context to use - * - * \return 0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED - */ -int mbedtls_x509write_crt_set_subject_key_identifier( mbedtls_x509write_cert *ctx ); - -/** - * \brief Set the authorityKeyIdentifier extension for a CRT - * Requires that mbedtls_x509write_crt_set_issuer_key() has been - * called before - * - * \param ctx CRT context to use - * - * \return 0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED - */ -int mbedtls_x509write_crt_set_authority_key_identifier( mbedtls_x509write_cert *ctx ); -#endif /* MBEDTLS_SHA1_C */ - -/** - * \brief Set the Key Usage Extension flags - * (e.g. MBEDTLS_X509_KU_DIGITAL_SIGNATURE | MBEDTLS_X509_KU_KEY_CERT_SIGN) - * - * \param ctx CRT context to use - * \param key_usage key usage flags to set - * - * \return 0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED - */ -int mbedtls_x509write_crt_set_key_usage( mbedtls_x509write_cert *ctx, - unsigned int key_usage ); - -/** - * \brief Set the Netscape Cert Type flags - * (e.g. MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT | MBEDTLS_X509_NS_CERT_TYPE_EMAIL) - * - * \param ctx CRT context to use - * \param ns_cert_type Netscape Cert Type flags to set - * - * \return 0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED - */ -int mbedtls_x509write_crt_set_ns_cert_type( mbedtls_x509write_cert *ctx, - unsigned char ns_cert_type ); - -/** - * \brief Free the contents of a CRT write context - * - * \param ctx CRT context to free - */ -void mbedtls_x509write_crt_free( mbedtls_x509write_cert *ctx ); - -/** - * \brief Write a built up certificate to a X509 DER structure - * Note: data is written at the end of the buffer! Use the - * return value to determine where you should start - * using the buffer - * - * \param ctx certificate to write away - * \param buf buffer to write to - * \param size size of the buffer - * \param f_rng RNG function (for signature, see note) - * \param p_rng RNG parameter - * - * \return length of data written if successful, or a specific - * error code - * - * \note f_rng may be NULL if RSA is used for signature and the - * signature is made offline (otherwise f_rng is desirable - * for countermeasures against timing attacks). - * ECDSA signatures always require a non-NULL f_rng. - */ -int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -#if defined(MBEDTLS_PEM_WRITE_C) -/** - * \brief Write a built up certificate to a X509 PEM string - * - * \param ctx certificate to write away - * \param buf buffer to write to - * \param size size of the buffer - * \param f_rng RNG function (for signature, see note) - * \param p_rng RNG parameter - * - * \return 0 if successful, or a specific error code - * - * \note f_rng may be NULL if RSA is used for signature and the - * signature is made offline (otherwise f_rng is desirable - * for countermeasures against timing attacks). - * ECDSA signatures always require a non-NULL f_rng. - */ -int mbedtls_x509write_crt_pem( mbedtls_x509write_cert *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); -#endif /* MBEDTLS_PEM_WRITE_C */ -#endif /* MBEDTLS_X509_CRT_WRITE_C */ - -#ifdef __cplusplus -} -#endif - -#endif /* mbedtls_x509_crt.h */ +COSMOPOLITAN_C_END_ +#endif /* MBEDTLS_X509_CRT_H */ diff --git a/third_party/mbedtls/x509_csr.c b/third_party/mbedtls/x509_csr.c index 2a9b57cac..38588ac75 100644 --- a/third_party/mbedtls/x509_csr.c +++ b/third_party/mbedtls/x509_csr.c @@ -1,5 +1,17 @@ +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/x509_csr.h" /* clang-format off */ +asm(".ident\t\"\\n\\n\ +Mbed TLS (Apache 2.0)\\n\ +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); +asm(".include \"libc/disclaimer.inc\""); + /* * X.509 Certificate Signing Request (CSR) parsing * @@ -29,37 +41,14 @@ * http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_X509_CSR_PARSE_C) -#include "third_party/mbedtls/x509_csr.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/oid.h" -#include "third_party/mbedtls/platform_util.h" - - -#if defined(MBEDTLS_PEM_PARSE_C) -#include "third_party/mbedtls/pem.h" -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_free free -#define mbedtls_calloc calloc -#define mbedtls_snprintf snprintf -#endif - -#if defined(MBEDTLS_FS_IO) || defined(EFIX64) || defined(EFI32) -#endif - /* * Version ::= INTEGER { v1(0) } */ static int x509_csr_get_version( unsigned char **p, - const unsigned char *end, - int *ver ) + const unsigned char *end, + int *ver ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; @@ -77,11 +66,19 @@ static int x509_csr_get_version( unsigned char **p, return( 0 ); } -/* - * Parse a CSR in DER format +/** + * \brief Load a Certificate Signing Request (CSR) in DER format + * + * \note CSR attributes (if any) are currently silently ignored. + * + * \param csr CSR context to fill + * \param buf buffer holding the CRL data + * \param buflen size of the buffer + * + * \return 0 if successful, or a specific X509 error code */ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, - const unsigned char *buf, size_t buflen ) + const unsigned char *buf, size_t buflen ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t len; @@ -249,8 +246,17 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, return( 0 ); } -/* - * Parse a CSR, allowing for PEM or raw DER encoding +/** + * \brief Load a Certificate Signing Request (CSR), DER or PEM format + * + * \note See notes for \c mbedtls_x509_csr_parse_der() + * + * \param csr CSR context to fill + * \param buf buffer holding the CRL data + * \param buflen size of the buffer + * (including the terminating null byte for PEM data) + * + * \return 0 if successful, or a specific X509 or PEM error code */ int mbedtls_x509_csr_parse( mbedtls_x509_csr *csr, const unsigned char *buf, size_t buflen ) { @@ -299,35 +305,46 @@ int mbedtls_x509_csr_parse( mbedtls_x509_csr *csr, const unsigned char *buf, siz return( mbedtls_x509_csr_parse_der( csr, buf, buflen ) ); } -#if defined(MBEDTLS_FS_IO) -/* - * Load a CSR into the structure +/** + * \brief Load a Certificate Signing Request (CSR) + * + * \note See notes for \c mbedtls_x509_csr_parse() + * + * \param csr CSR context to fill + * \param path filename to read the CSR from + * + * \return 0 if successful, or a specific X509 or PEM error code */ int mbedtls_x509_csr_parse_file( mbedtls_x509_csr *csr, const char *path ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t n; unsigned char *buf; - if( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) return( ret ); - ret = mbedtls_x509_csr_parse( csr, buf, n ); - mbedtls_platform_zeroize( buf, n ); mbedtls_free( buf ); - return( ret ); } -#endif /* MBEDTLS_FS_IO */ #define BEFORE_COLON 14 #define BC "14" -/* - * Return an informational string about the CSR. + +/** + * \brief Returns an informational string about the + * CSR. + * + * \param buf Buffer to write to + * \param size Maximum size of buffer + * \param prefix A line prefix + * \param csr The X509 CSR to represent + * + * \return The length of the string written (not including the + * terminated nul byte), or a negative error code. */ int mbedtls_x509_csr_info( char *buf, size_t size, const char *prefix, - const mbedtls_x509_csr *csr ) + const mbedtls_x509_csr *csr ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t n; @@ -366,16 +383,20 @@ int mbedtls_x509_csr_info( char *buf, size_t size, const char *prefix, return( (int) ( size - n ) ); } -/* - * Initialize a CSR +/** + * \brief Initialize a CSR + * + * \param csr CSR to initialize */ void mbedtls_x509_csr_init( mbedtls_x509_csr *csr ) { memset( csr, 0, sizeof(mbedtls_x509_csr) ); } -/* - * Unallocate all CSR data +/** + * \brief Unallocate all CSR data + * + * \param csr CSR to free */ void mbedtls_x509_csr_free( mbedtls_x509_csr *csr ) { @@ -387,10 +408,6 @@ void mbedtls_x509_csr_free( mbedtls_x509_csr *csr ) mbedtls_pk_free( &csr->pk ); -#if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) - mbedtls_free( csr->sig_opts ); -#endif - name_cur = csr->subject.next; while( name_cur != NULL ) { diff --git a/third_party/mbedtls/x509_csr.h b/third_party/mbedtls/x509_csr.h index 94930694c..71bde9edf 100644 --- a/third_party/mbedtls/x509_csr.h +++ b/third_party/mbedtls/x509_csr.h @@ -1,307 +1,53 @@ -/* clang-format off */ - -/** - * \file x509_csr.h - * - * \brief X.509 certificate signing request parsing and writing - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_X509_CSR_H -#define MBEDTLS_X509_CSR_H - -#if !defined(MBEDTLS_CONFIG_FILE) +#ifndef MBEDTLS_X509_CSR_H_ +#define MBEDTLS_X509_CSR_H_ #include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - #include "third_party/mbedtls/x509.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \addtogroup x509_module - * \{ */ - -/** - * \name Structures and functions for X.509 Certificate Signing Requests (CSR) - * \{ - */ +COSMOPOLITAN_C_START_ +/* clang-format off */ /** * Certificate Signing Request (CSR) structure. */ -typedef struct mbedtls_x509_csr -{ +typedef struct mbedtls_x509_csr { mbedtls_x509_buf raw; /**< The raw CSR data (DER). */ mbedtls_x509_buf cri; /**< The raw CertificateRequestInfo body (DER). */ - - int version; /**< CSR version (1=v1). */ - + int version; /**< CSR version (1=v1). */ mbedtls_x509_buf subject_raw; /**< The raw subject data (DER). */ mbedtls_x509_name subject; /**< The parsed subject data (named information object). */ - mbedtls_pk_context pk; /**< Container for the public key context. */ - mbedtls_x509_buf sig_oid; mbedtls_x509_buf sig; mbedtls_md_type_t sig_md; /**< Internal representation of the MD algorithm of the signature algorithm, e.g. MBEDTLS_MD_SHA256 */ mbedtls_pk_type_t sig_pk; /**< Internal representation of the Public Key algorithm of the signature algorithm, e.g. MBEDTLS_PK_RSA */ - void *sig_opts; /**< Signature options to be passed to mbedtls_pk_verify_ext(), e.g. for RSASSA-PSS */ -} -mbedtls_x509_csr; + void *sig_opts; /**< Signature options to be passed to mbedtls_pk_verify_ext(), e.g. for RSASSA-PSS */ +} mbedtls_x509_csr; /** * Container for writing a CSR */ -typedef struct mbedtls_x509write_csr -{ +typedef struct mbedtls_x509write_csr { mbedtls_pk_context *key; mbedtls_asn1_named_data *subject; mbedtls_md_type_t md_alg; mbedtls_asn1_named_data *extensions; -} -mbedtls_x509write_csr; +} mbedtls_x509write_csr; -#if defined(MBEDTLS_X509_CSR_PARSE_C) -/** - * \brief Load a Certificate Signing Request (CSR) in DER format - * - * \note CSR attributes (if any) are currently silently ignored. - * - * \param csr CSR context to fill - * \param buf buffer holding the CRL data - * \param buflen size of the buffer - * - * \return 0 if successful, or a specific X509 error code - */ -int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, - const unsigned char *buf, size_t buflen ); +int mbedtls_x509_csr_info( char *, size_t, const char *, const mbedtls_x509_csr * ); +int mbedtls_x509_csr_parse( mbedtls_x509_csr *, const unsigned char *, size_t ); +int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *, const unsigned char *, size_t ); +int mbedtls_x509_csr_parse_file( mbedtls_x509_csr *, const char * ); +int mbedtls_x509write_csr_der( mbedtls_x509write_csr *, unsigned char *, size_t, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_x509write_csr_pem( mbedtls_x509write_csr *, unsigned char *, size_t, int (*)(void *, unsigned char *, size_t), void * ); +int mbedtls_x509write_csr_set_extension( mbedtls_x509write_csr *, const char *, size_t, const unsigned char *, size_t ); +int mbedtls_x509write_csr_set_key_usage( mbedtls_x509write_csr *, unsigned char ); +int mbedtls_x509write_csr_set_ns_cert_type( mbedtls_x509write_csr *, unsigned char ); +int mbedtls_x509write_csr_set_subject_name( mbedtls_x509write_csr *, const char * ); +void mbedtls_x509_csr_free( mbedtls_x509_csr * ); +void mbedtls_x509_csr_init( mbedtls_x509_csr * ); +void mbedtls_x509write_csr_free( mbedtls_x509write_csr * ); +void mbedtls_x509write_csr_init( mbedtls_x509write_csr * ); +void mbedtls_x509write_csr_set_key( mbedtls_x509write_csr *, mbedtls_pk_context * ); +void mbedtls_x509write_csr_set_md_alg( mbedtls_x509write_csr *, mbedtls_md_type_t ); -/** - * \brief Load a Certificate Signing Request (CSR), DER or PEM format - * - * \note See notes for \c mbedtls_x509_csr_parse_der() - * - * \param csr CSR context to fill - * \param buf buffer holding the CRL data - * \param buflen size of the buffer - * (including the terminating null byte for PEM data) - * - * \return 0 if successful, or a specific X509 or PEM error code - */ -int mbedtls_x509_csr_parse( mbedtls_x509_csr *csr, const unsigned char *buf, size_t buflen ); - -#if defined(MBEDTLS_FS_IO) -/** - * \brief Load a Certificate Signing Request (CSR) - * - * \note See notes for \c mbedtls_x509_csr_parse() - * - * \param csr CSR context to fill - * \param path filename to read the CSR from - * - * \return 0 if successful, or a specific X509 or PEM error code - */ -int mbedtls_x509_csr_parse_file( mbedtls_x509_csr *csr, const char *path ); -#endif /* MBEDTLS_FS_IO */ - -/** - * \brief Returns an informational string about the - * CSR. - * - * \param buf Buffer to write to - * \param size Maximum size of buffer - * \param prefix A line prefix - * \param csr The X509 CSR to represent - * - * \return The length of the string written (not including the - * terminated nul byte), or a negative error code. - */ -int mbedtls_x509_csr_info( char *buf, size_t size, const char *prefix, - const mbedtls_x509_csr *csr ); - -/** - * \brief Initialize a CSR - * - * \param csr CSR to initialize - */ -void mbedtls_x509_csr_init( mbedtls_x509_csr *csr ); - -/** - * \brief Unallocate all CSR data - * - * \param csr CSR to free - */ -void mbedtls_x509_csr_free( mbedtls_x509_csr *csr ); -#endif /* MBEDTLS_X509_CSR_PARSE_C */ - -/* \} name */ -/* \} addtogroup x509_module */ - -#if defined(MBEDTLS_X509_CSR_WRITE_C) -/** - * \brief Initialize a CSR context - * - * \param ctx CSR context to initialize - */ -void mbedtls_x509write_csr_init( mbedtls_x509write_csr *ctx ); - -/** - * \brief Set the subject name for a CSR - * Subject names should contain a comma-separated list - * of OID types and values: - * e.g. "C=UK,O=ARM,CN=mbed TLS Server 1" - * - * \param ctx CSR context to use - * \param subject_name subject name to set - * - * \return 0 if subject name was parsed successfully, or - * a specific error code - */ -int mbedtls_x509write_csr_set_subject_name( mbedtls_x509write_csr *ctx, - const char *subject_name ); - -/** - * \brief Set the key for a CSR (public key will be included, - * private key used to sign the CSR when writing it) - * - * \param ctx CSR context to use - * \param key Asymetric key to include - */ -void mbedtls_x509write_csr_set_key( mbedtls_x509write_csr *ctx, mbedtls_pk_context *key ); - -/** - * \brief Set the MD algorithm to use for the signature - * (e.g. MBEDTLS_MD_SHA1) - * - * \param ctx CSR context to use - * \param md_alg MD algorithm to use - */ -void mbedtls_x509write_csr_set_md_alg( mbedtls_x509write_csr *ctx, mbedtls_md_type_t md_alg ); - -/** - * \brief Set the Key Usage Extension flags - * (e.g. MBEDTLS_X509_KU_DIGITAL_SIGNATURE | MBEDTLS_X509_KU_KEY_CERT_SIGN) - * - * \param ctx CSR context to use - * \param key_usage key usage flags to set - * - * \return 0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED - * - * \note The decipherOnly flag from the Key Usage - * extension is represented by bit 8 (i.e. - * 0x8000), which cannot typically be represented - * in an unsigned char. Therefore, the flag - * decipherOnly (i.e. - * #MBEDTLS_X509_KU_DECIPHER_ONLY) cannot be set using this - * function. - */ -int mbedtls_x509write_csr_set_key_usage( mbedtls_x509write_csr *ctx, unsigned char key_usage ); - -/** - * \brief Set the Netscape Cert Type flags - * (e.g. MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT | MBEDTLS_X509_NS_CERT_TYPE_EMAIL) - * - * \param ctx CSR context to use - * \param ns_cert_type Netscape Cert Type flags to set - * - * \return 0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED - */ -int mbedtls_x509write_csr_set_ns_cert_type( mbedtls_x509write_csr *ctx, - unsigned char ns_cert_type ); - -/** - * \brief Generic function to add to or replace an extension in the - * CSR - * - * \param ctx CSR context to use - * \param oid OID of the extension - * \param oid_len length of the OID - * \param val value of the extension OCTET STRING - * \param val_len length of the value data - * - * \return 0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED - */ -int mbedtls_x509write_csr_set_extension( mbedtls_x509write_csr *ctx, - const char *oid, size_t oid_len, - const unsigned char *val, size_t val_len ); - -/** - * \brief Free the contents of a CSR context - * - * \param ctx CSR context to free - */ -void mbedtls_x509write_csr_free( mbedtls_x509write_csr *ctx ); - -/** - * \brief Write a CSR (Certificate Signing Request) to a - * DER structure - * Note: data is written at the end of the buffer! Use the - * return value to determine where you should start - * using the buffer - * - * \param ctx CSR to write away - * \param buf buffer to write to - * \param size size of the buffer - * \param f_rng RNG function (for signature, see note) - * \param p_rng RNG parameter - * - * \return length of data written if successful, or a specific - * error code - * - * \note f_rng may be NULL if RSA is used for signature and the - * signature is made offline (otherwise f_rng is desirable - * for countermeasures against timing attacks). - * ECDSA signatures always require a non-NULL f_rng. - */ -int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); - -#if defined(MBEDTLS_PEM_WRITE_C) -/** - * \brief Write a CSR (Certificate Signing Request) to a - * PEM string - * - * \param ctx CSR to write away - * \param buf buffer to write to - * \param size size of the buffer - * \param f_rng RNG function (for signature, see note) - * \param p_rng RNG parameter - * - * \return 0 if successful, or a specific error code - * - * \note f_rng may be NULL if RSA is used for signature and the - * signature is made offline (otherwise f_rng is desirable - * for countermeasures against timing attacks). - * ECDSA signatures always require a non-NULL f_rng. - */ -int mbedtls_x509write_csr_pem( mbedtls_x509write_csr *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ); -#endif /* MBEDTLS_PEM_WRITE_C */ -#endif /* MBEDTLS_X509_CSR_WRITE_C */ - -#ifdef __cplusplus -} -#endif - -#endif /* mbedtls_x509_csr.h */ +COSMOPOLITAN_C_END_ +#endif /* MBEDTLS_X509_CSR_H_ */ diff --git a/third_party/mbedtls/x509write_crt.c b/third_party/mbedtls/x509write_crt.c index a1594ab5e..73dbaac3b 100644 --- a/third_party/mbedtls/x509write_crt.c +++ b/third_party/mbedtls/x509write_crt.c @@ -1,10 +1,19 @@ -/* clang-format off */ +#include "third_party/mbedtls/asn1write.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/sha1.h" +#include "third_party/mbedtls/x509_crt.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * X.509 certificate writing * @@ -30,22 +39,13 @@ asm(".include \"libc/disclaimer.inc\""); * - attributes: PKCS#9 v2.0 aka RFC 2985 */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_X509_CRT_WRITE_C) -#include "third_party/mbedtls/x509_crt.h" -#include "third_party/mbedtls/asn1write.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/oid.h" -#include "third_party/mbedtls/platform_util.h" -#include "third_party/mbedtls/sha1.h" - - -#if defined(MBEDTLS_PEM_WRITE_C) -#include "third_party/mbedtls/pem.h" -#endif /* MBEDTLS_PEM_WRITE_C */ - +/** + * \brief Initialize a CRT writing context + * + * \param ctx CRT context to initialize + */ void mbedtls_x509write_crt_init( mbedtls_x509write_cert *ctx ) { memset( ctx, 0, sizeof( mbedtls_x509write_cert ) ); @@ -54,6 +54,11 @@ void mbedtls_x509write_crt_init( mbedtls_x509write_cert *ctx ) ctx->version = MBEDTLS_X509_CRT_VERSION_3; } +/** + * \brief Free the contents of a CRT write context + * + * \param ctx CRT context to free + */ void mbedtls_x509write_crt_free( mbedtls_x509write_cert *ctx ) { mbedtls_mpi_free( &ctx->serial ); @@ -65,42 +70,101 @@ void mbedtls_x509write_crt_free( mbedtls_x509write_cert *ctx ) mbedtls_platform_zeroize( ctx, sizeof( mbedtls_x509write_cert ) ); } +/** + * \brief Set the verion for a Certificate + * Default: MBEDTLS_X509_CRT_VERSION_3 + * + * \param ctx CRT context to use + * \param version version to set (MBEDTLS_X509_CRT_VERSION_1, MBEDTLS_X509_CRT_VERSION_2 or + * MBEDTLS_X509_CRT_VERSION_3) + */ void mbedtls_x509write_crt_set_version( mbedtls_x509write_cert *ctx, int version ) { ctx->version = version; } +/** + * \brief Set the MD algorithm to use for the signature + * (e.g. MBEDTLS_MD_SHA1) + * + * \param ctx CRT context to use + * \param md_alg MD algorithm to use + */ void mbedtls_x509write_crt_set_md_alg( mbedtls_x509write_cert *ctx, mbedtls_md_type_t md_alg ) { ctx->md_alg = md_alg; } +/** + * \brief Set the subject public key for the certificate + * + * \param ctx CRT context to use + * \param key public key to include + */ void mbedtls_x509write_crt_set_subject_key( mbedtls_x509write_cert *ctx, mbedtls_pk_context *key ) { ctx->subject_key = key; } +/** + * \brief Set the issuer key used for signing the certificate + * + * \param ctx CRT context to use + * \param key private key to sign with + */ void mbedtls_x509write_crt_set_issuer_key( mbedtls_x509write_cert *ctx, mbedtls_pk_context *key ) { ctx->issuer_key = key; } +/** + * \brief Set the subject name for a Certificate + * Subject names should contain a comma-separated list + * of OID types and values: + * e.g. "C=UK,O=ARM,CN=mbed TLS Server 1" + * + * \param ctx CRT context to use + * \param subject_name subject name to set + * + * \return 0 if subject name was parsed successfully, or + * a specific error code + */ int mbedtls_x509write_crt_set_subject_name( mbedtls_x509write_cert *ctx, const char *subject_name ) { return mbedtls_x509_string_to_names( &ctx->subject, subject_name ); } +/** + * \brief Set the issuer name for a Certificate + * Issuer names should contain a comma-separated list + * of OID types and values: + * e.g. "C=UK,O=ARM,CN=mbed TLS CA" + * + * \param ctx CRT context to use + * \param issuer_name issuer name to set + * + * \return 0 if issuer name was parsed successfully, or + * a specific error code + */ int mbedtls_x509write_crt_set_issuer_name( mbedtls_x509write_cert *ctx, const char *issuer_name ) { return mbedtls_x509_string_to_names( &ctx->issuer, issuer_name ); } +/** + * \brief Set the serial number for a Certificate. + * + * \param ctx CRT context to use + * \param serial serial number to set + * + * \return 0 if successful + */ int mbedtls_x509write_crt_set_serial( mbedtls_x509write_cert *ctx, const mbedtls_mpi *serial ) { @@ -112,6 +176,20 @@ int mbedtls_x509write_crt_set_serial( mbedtls_x509write_cert *ctx, return( 0 ); } +/** + * \brief Set the validity period for a Certificate + * Timestamps should be in string format for UTC timezone + * i.e. "YYYYMMDDhhmmss" + * e.g. "20131231235959" for December 31st 2013 + * at 23:59:59 + * + * \param ctx CRT context to use + * \param not_before not_before timestamp + * \param not_after not_after timestamp + * + * \return 0 if timestamp was parsed successfully, or + * a specific error code + */ int mbedtls_x509write_crt_set_validity( mbedtls_x509write_cert *ctx, const char *not_before, const char *not_after ) @@ -125,19 +203,42 @@ int mbedtls_x509write_crt_set_validity( mbedtls_x509write_cert *ctx, strncpy( ctx->not_after , not_after , MBEDTLS_X509_RFC5280_UTC_TIME_LEN ); ctx->not_before[MBEDTLS_X509_RFC5280_UTC_TIME_LEN - 1] = 'Z'; ctx->not_after[MBEDTLS_X509_RFC5280_UTC_TIME_LEN - 1] = 'Z'; - return( 0 ); } +/** + * \brief Generic function to add to or replace an extension in the + * CRT + * + * \param ctx CRT context to use + * \param oid OID of the extension + * \param oid_len length of the OID + * \param critical if the extension is critical (per the RFC's definition) + * \param val value of the extension OCTET STRING + * \param val_len length of the value data + * + * \return 0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED + */ int mbedtls_x509write_crt_set_extension( mbedtls_x509write_cert *ctx, - const char *oid, size_t oid_len, - int critical, - const unsigned char *val, size_t val_len ) + const char *oid, size_t oid_len, + int critical, const unsigned char *val, + size_t val_len ) { return( mbedtls_x509_set_extension( &ctx->extensions, oid, oid_len, critical, val, val_len ) ); } +/** + * \brief Set the basicConstraints extension for a CRT + * + * \param ctx CRT context to use + * \param is_ca is this a CA certificate + * \param max_pathlen maximum length of certificate chains below this + * certificate (only for CA certificates, -1 is + * inlimited) + * + * \return 0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED + */ int mbedtls_x509write_crt_set_basic_constraints( mbedtls_x509write_cert *ctx, int is_ca, int max_pathlen ) { @@ -145,12 +246,9 @@ int mbedtls_x509write_crt_set_basic_constraints( mbedtls_x509write_cert *ctx, unsigned char buf[9]; unsigned char *c = buf + sizeof(buf); size_t len = 0; - memset( buf, 0, sizeof(buf) ); - if( is_ca && max_pathlen > 127 ) return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - if( is_ca ) { if( max_pathlen >= 0 ) @@ -160,12 +258,10 @@ int mbedtls_x509write_crt_set_basic_constraints( mbedtls_x509write_cert *ctx, } MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_bool( &c, buf, 1 ) ); } - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, - MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); - + MBEDTLS_ASN1_CONSTRUCTED | + MBEDTLS_ASN1_SEQUENCE ) ); return( mbedtls_x509write_crt_set_extension( ctx, MBEDTLS_OID_BASIC_CONSTRAINTS, MBEDTLS_OID_SIZE( MBEDTLS_OID_BASIC_CONSTRAINTS ), @@ -173,62 +269,71 @@ int mbedtls_x509write_crt_set_basic_constraints( mbedtls_x509write_cert *ctx, } #if defined(MBEDTLS_SHA1_C) +/** + * \brief Set the subjectKeyIdentifier extension for a CRT + * Requires that mbedtls_x509write_crt_set_subject_key() has been + * called before + * + * \param ctx CRT context to use + * + * \return 0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED + */ int mbedtls_x509write_crt_set_subject_key_identifier( mbedtls_x509write_cert *ctx ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; unsigned char buf[MBEDTLS_MPI_MAX_SIZE * 2 + 20]; /* tag, length + 2xMPI */ unsigned char *c = buf + sizeof(buf); size_t len = 0; - memset( buf, 0, sizeof(buf) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_pk_write_pubkey( &c, buf, ctx->subject_key ) ); - ret = mbedtls_sha1_ret( buf + sizeof( buf ) - len, len, buf + sizeof( buf ) - 20 ); if( ret != 0 ) return( ret ); c = buf + sizeof( buf ) - 20; len = 20; - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_OCTET_STRING ) ); - return mbedtls_x509write_crt_set_extension( ctx, MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER, MBEDTLS_OID_SIZE( MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER ), 0, buf + sizeof(buf) - len, len ); } +/** + * \brief Set the authorityKeyIdentifier extension for a CRT + * Requires that mbedtls_x509write_crt_set_issuer_key() has been + * called before + * + * \param ctx CRT context to use + * + * \return 0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED + */ int mbedtls_x509write_crt_set_authority_key_identifier( mbedtls_x509write_cert *ctx ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; unsigned char buf[MBEDTLS_MPI_MAX_SIZE * 2 + 20]; /* tag, length + 2xMPI */ unsigned char *c = buf + sizeof( buf ); size_t len = 0; - memset( buf, 0, sizeof(buf) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_pk_write_pubkey( &c, buf, ctx->issuer_key ) ); - ret = mbedtls_sha1_ret( buf + sizeof( buf ) - len, len, buf + sizeof( buf ) - 20 ); if( ret != 0 ) return( ret ); c = buf + sizeof( buf ) - 20; len = 20; - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONTEXT_SPECIFIC | 0 ) ); - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); - return mbedtls_x509write_crt_set_extension( ctx, MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER, MBEDTLS_OID_SIZE( MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER ), @@ -236,6 +341,15 @@ int mbedtls_x509write_crt_set_authority_key_identifier( mbedtls_x509write_cert * } #endif /* MBEDTLS_SHA1_C */ +/** + * \brief Set the Key Usage Extension flags + * (e.g. MBEDTLS_X509_KU_DIGITAL_SIGNATURE | MBEDTLS_X509_KU_KEY_CERT_SIGN) + * + * \param ctx CRT context to use + * \param key_usage key usage flags to set + * + * \return 0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED + */ int mbedtls_x509write_crt_set_key_usage( mbedtls_x509write_cert *ctx, unsigned int key_usage ) { @@ -251,58 +365,104 @@ int mbedtls_x509write_crt_set_key_usage( mbedtls_x509write_cert *ctx, MBEDTLS_X509_KU_CRL_SIGN | MBEDTLS_X509_KU_ENCIPHER_ONLY | MBEDTLS_X509_KU_DECIPHER_ONLY; - /* Check that nothing other than the allowed flags is set */ if( ( key_usage & ~allowed_bits ) != 0 ) return( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ); - c = buf + 5; ku[0] = (unsigned char)( key_usage ); ku[1] = (unsigned char)( key_usage >> 8 ); ret = mbedtls_asn1_write_named_bitstring( &c, buf, ku, 9 ); - if( ret < 0 ) return( ret ); else if( ret < 3 || ret > 5 ) return( MBEDTLS_ERR_X509_INVALID_FORMAT ); - ret = mbedtls_x509write_crt_set_extension( ctx, MBEDTLS_OID_KEY_USAGE, MBEDTLS_OID_SIZE( MBEDTLS_OID_KEY_USAGE ), 1, c, (size_t)ret ); if( ret != 0 ) return( ret ); - return( 0 ); } +/** + * \brief Set the Netscape Cert Type flags + * (e.g. MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT | MBEDTLS_X509_NS_CERT_TYPE_EMAIL) + * + * \param ctx CRT context to use + * \param ns_cert_type Netscape Cert Type flags to set + * + * \return 0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED + */ int mbedtls_x509write_crt_set_ns_cert_type( mbedtls_x509write_cert *ctx, - unsigned char ns_cert_type ) + unsigned char ns_cert_type ) { unsigned char buf[4]; unsigned char *c; int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - c = buf + 4; - ret = mbedtls_asn1_write_named_bitstring( &c, buf, &ns_cert_type, 8 ); if( ret < 3 || ret > 4 ) return( ret ); - ret = mbedtls_x509write_crt_set_extension( ctx, MBEDTLS_OID_NS_CERT_TYPE, MBEDTLS_OID_SIZE( MBEDTLS_OID_NS_CERT_TYPE ), 0, c, (size_t)ret ); if( ret != 0 ) return( ret ); - return( 0 ); } +/** + * Writes Extended Key Usage section to certificate. + * + * @see mbedtls_x509write_crt_set_ns_cert_type() + * @see RFC5280 §4.2.1.12 + */ +int mbedtls_x509write_crt_set_ext_key_usage(mbedtls_x509write_cert *ctx, + int ns_cert_type) { + int ret; + size_t len; + unsigned char buf[256]; + unsigned char *c; + if (!ns_cert_type) return 0; + if (ns_cert_type & ~(MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT | + MBEDTLS_X509_NS_CERT_TYPE_SSL_SERVER | + MBEDTLS_X509_NS_CERT_TYPE_EMAIL)) { + return MBEDTLS_ERR_X509_BAD_INPUT_DATA; + } + len = 0; + c = buf + sizeof(buf); + memset(buf, 0, sizeof(buf)); + if (ns_cert_type & MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT) { + MBEDTLS_ASN1_CHK_ADD( + len, mbedtls_asn1_write_oid(&c, buf, MBEDTLS_OID_CLIENT_AUTH, + MBEDTLS_OID_SIZE(MBEDTLS_OID_CLIENT_AUTH))); + } + if (ns_cert_type & MBEDTLS_X509_NS_CERT_TYPE_SSL_SERVER) { + MBEDTLS_ASN1_CHK_ADD( + len, mbedtls_asn1_write_oid(&c, buf, MBEDTLS_OID_SERVER_AUTH, + MBEDTLS_OID_SIZE(MBEDTLS_OID_SERVER_AUTH))); + } + if (ns_cert_type & MBEDTLS_X509_NS_CERT_TYPE_EMAIL) { + MBEDTLS_ASN1_CHK_ADD( + len, + mbedtls_asn1_write_oid(&c, buf, MBEDTLS_OID_EMAIL_PROTECTION, + MBEDTLS_OID_SIZE(MBEDTLS_OID_EMAIL_PROTECTION))); + } + MBEDTLS_ASN1_CHK_ADD(len, mbedtls_asn1_write_len(&c, buf, len)); + MBEDTLS_ASN1_CHK_ADD( + len, mbedtls_asn1_write_tag( + &c, buf, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE)); + return mbedtls_x509write_crt_set_extension( + ctx, MBEDTLS_OID_EXTENDED_KEY_USAGE, + MBEDTLS_OID_SIZE(MBEDTLS_OID_EXTENDED_KEY_USAGE), false, + buf + sizeof(buf) - len, len); +} + static int x509_write_time( unsigned char **p, unsigned char *start, const char *t, size_t size ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t len = 0; - /* * write MBEDTLS_ASN1_UTC_TIME if year < 2050 (2 bytes shorter) */ @@ -324,10 +484,29 @@ static int x509_write_time( unsigned char **p, unsigned char *start, MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_GENERALIZED_TIME ) ); } - return( (int) len ); } +/** + * \brief Write a built up certificate to a X509 DER structure + * Note: data is written at the end of the buffer! Use the + * return value to determine where you should start + * using the buffer + * + * \param ctx certificate to write away + * \param buf buffer to write to + * \param size size of the buffer + * \param f_rng RNG function (for signature, see note) + * \param p_rng RNG parameter + * + * \return length of data written if successful, or a specific + * error code + * + * \note f_rng may be NULL if RSA is used for signature and the + * signature is made offline (otherwise f_rng is desirable + * for countermeasures against timing attacks). + * ECDSA signatures always require a non-NULL f_rng. + */ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, size_t size, int (*f_rng)(void *, unsigned char *, size_t), @@ -342,14 +521,11 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, size_t sub_len = 0, pub_len = 0, sig_and_oid_len = 0, sig_len; size_t len = 0; mbedtls_pk_type_t pk_alg; - /* * Prepare data to be signed at the end of the target buffer */ c = buf + size; - /* Signature algorithm needed in TBS, and later for actual signature */ - /* There's no direct way of extracting a signature algorithm * (represented as an element of mbedtls_pk_type_t) from a PK instance. */ if( mbedtls_pk_can_do( ctx->issuer_key, MBEDTLS_PK_RSA ) ) @@ -358,17 +534,14 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, pk_alg = MBEDTLS_PK_ECDSA; else return( MBEDTLS_ERR_X509_INVALID_ALG ); - if( ( ret = mbedtls_oid_get_oid_by_sig_alg( pk_alg, ctx->md_alg, &sig_oid, &sig_oid_len ) ) != 0 ) { return( ret ); } - /* * Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension */ - /* Only for v3 */ if( ctx->version == MBEDTLS_X509_CRT_VERSION_3 ) { @@ -386,7 +559,6 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 3 ) ); } - /* * SubjectPublicKeyInfo */ @@ -395,59 +567,49 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, buf, c - buf ) ); c -= pub_len; len += pub_len; - /* * Subject ::= Name */ MBEDTLS_ASN1_CHK_ADD( len, mbedtls_x509_write_names( &c, buf, ctx->subject ) ); - /* * Validity ::= SEQUENCE { * notBefore Time, * notAfter Time } */ sub_len = 0; - MBEDTLS_ASN1_CHK_ADD( sub_len, x509_write_time( &c, buf, ctx->not_after, MBEDTLS_X509_RFC5280_UTC_TIME_LEN ) ); - MBEDTLS_ASN1_CHK_ADD( sub_len, x509_write_time( &c, buf, ctx->not_before, MBEDTLS_X509_RFC5280_UTC_TIME_LEN ) ); - len += sub_len; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, sub_len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); - /* * Issuer ::= Name */ MBEDTLS_ASN1_CHK_ADD( len, mbedtls_x509_write_names( &c, buf, ctx->issuer ) ); - /* * Signature ::= AlgorithmIdentifier */ MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_algorithm_identifier( &c, buf, sig_oid, strlen( sig_oid ), 0 ) ); - /* * Serial ::= INTEGER */ MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_mpi( &c, buf, &ctx->serial ) ); - /* * Version ::= INTEGER { v1(0), v2(1), v3(2) } */ - /* Can be omitted for v1 */ if( ctx->version != MBEDTLS_X509_CRT_VERSION_1 ) { @@ -462,66 +624,71 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ); } - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); - /* * Make signature */ - /* Compute hash of CRT. */ if( ( ret = mbedtls_md( mbedtls_md_info_from_type( ctx->md_alg ), c, len, hash ) ) != 0 ) { return( ret ); } - if( ( ret = mbedtls_pk_sign( ctx->issuer_key, ctx->md_alg, hash, 0, sig, &sig_len, f_rng, p_rng ) ) != 0 ) { return( ret ); } - /* Move CRT to the front of the buffer to have space * for the signature. */ memmove( buf, c, len ); c = buf + len; - /* Add signature at the end of the buffer, * making sure that it doesn't underflow * into the CRT buffer. */ c2 = buf + size; MBEDTLS_ASN1_CHK_ADD( sig_and_oid_len, mbedtls_x509_write_sig( &c2, c, sig_oid, sig_oid_len, sig, sig_len ) ); - /* * Memory layout after this step: * * buf c=buf+len c2 buf+size * [CRT0,...,CRTn, UNUSED, ..., UNUSED, SIG0, ..., SIGm] */ - /* Move raw CRT to just before the signature. */ c = c2 - len; memmove( c, buf, len ); - len += sig_and_oid_len; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); - return( (int) len ); } #define PEM_BEGIN_CRT "-----BEGIN CERTIFICATE-----\n" #define PEM_END_CRT "-----END CERTIFICATE-----\n" -#if defined(MBEDTLS_PEM_WRITE_C) +/** + * \brief Write a built up certificate to a X509 PEM string + * + * \param ctx certificate to write away + * \param buf buffer to write to + * \param size size of the buffer + * \param f_rng RNG function (for signature, see note) + * \param p_rng RNG parameter + * + * \return 0 if successful, or a specific error code + * + * \note f_rng may be NULL if RSA is used for signature and the + * signature is made offline (otherwise f_rng is desirable + * for countermeasures against timing attacks). + * ECDSA signatures always require a non-NULL f_rng. + */ int mbedtls_x509write_crt_pem( mbedtls_x509write_cert *crt, unsigned char *buf, size_t size, int (*f_rng)(void *, unsigned char *, size_t), @@ -529,22 +696,18 @@ int mbedtls_x509write_crt_pem( mbedtls_x509write_cert *crt, { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t olen; - if( ( ret = mbedtls_x509write_crt_der( crt, buf, size, f_rng, p_rng ) ) < 0 ) { return( ret ); } - if( ( ret = mbedtls_pem_write_buffer( PEM_BEGIN_CRT, PEM_END_CRT, buf + size - ret, ret, buf, size, &olen ) ) != 0 ) { return( ret ); } - return( 0 ); } -#endif /* MBEDTLS_PEM_WRITE_C */ #endif /* MBEDTLS_X509_CRT_WRITE_C */ diff --git a/third_party/mbedtls/x509write_csr.c b/third_party/mbedtls/x509write_csr.c index 9e008e874..a8112ec52 100644 --- a/third_party/mbedtls/x509write_csr.c +++ b/third_party/mbedtls/x509write_csr.c @@ -1,10 +1,18 @@ -/* clang-format off */ +#include "third_party/mbedtls/asn1write.h" +#include "third_party/mbedtls/common.h" +#include "third_party/mbedtls/error.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/pem.h" +#include "third_party/mbedtls/platform.h" +#include "third_party/mbedtls/x509_csr.h" asm(".ident\t\"\\n\\n\ Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); +Copyright ARM Limited\\n\ +Copyright Mbed TLS Contributors\""); asm(".include \"libc/disclaimer.inc\""); +/* clang-format off */ /* * X.509 Certificate Signing Request writing * @@ -29,37 +37,23 @@ asm(".include \"libc/disclaimer.inc\""); * - attributes: PKCS#9 v2.0 aka RFC 2985 */ -#include "third_party/mbedtls/common.h" - #if defined(MBEDTLS_X509_CSR_WRITE_C) -#include "third_party/mbedtls/x509_csr.h" -#include "third_party/mbedtls/asn1write.h" -#include "third_party/mbedtls/error.h" -#include "third_party/mbedtls/oid.h" -#include "third_party/mbedtls/platform_util.h" - -#if defined(MBEDTLS_USE_PSA_CRYPTO) -#include "third_party/mbedtls/crypto.h" -#include "third_party/mbedtls/psa_util.h" -#endif - -#if defined(MBEDTLS_PEM_WRITE_C) -#include "third_party/mbedtls/pem.h" -#endif - -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_calloc calloc -#define mbedtls_free free -#endif - +/** + * \brief Initialize a CSR context + * + * \param ctx CSR context to initialize + */ void mbedtls_x509write_csr_init( mbedtls_x509write_csr *ctx ) { memset( ctx, 0, sizeof( mbedtls_x509write_csr ) ); } +/** + * \brief Free the contents of a CSR context + * + * \param ctx CSR context to free + */ void mbedtls_x509write_csr_free( mbedtls_x509write_csr *ctx ) { mbedtls_asn1_free_named_data_list( &ctx->subject ); @@ -68,71 +62,127 @@ void mbedtls_x509write_csr_free( mbedtls_x509write_csr *ctx ) mbedtls_platform_zeroize( ctx, sizeof( mbedtls_x509write_csr ) ); } +/** + * \brief Set the MD algorithm to use for the signature + * (e.g. MBEDTLS_MD_SHA1) + * + * \param ctx CSR context to use + * \param md_alg MD algorithm to use + */ void mbedtls_x509write_csr_set_md_alg( mbedtls_x509write_csr *ctx, mbedtls_md_type_t md_alg ) { ctx->md_alg = md_alg; } +/** + * \brief Set the key for a CSR (public key will be included, + * private key used to sign the CSR when writing it) + * + * \param ctx CSR context to use + * \param key Asymetric key to include + */ void mbedtls_x509write_csr_set_key( mbedtls_x509write_csr *ctx, mbedtls_pk_context *key ) { ctx->key = key; } +/** + * \brief Set the subject name for a CSR + * Subject names should contain a comma-separated list + * of OID types and values: + * e.g. "C=UK,O=ARM,CN=mbed TLS Server 1" + * + * \param ctx CSR context to use + * \param subject_name subject name to set + * + * \return 0 if subject name was parsed successfully, or + * a specific error code + */ int mbedtls_x509write_csr_set_subject_name( mbedtls_x509write_csr *ctx, - const char *subject_name ) + const char *subject_name ) { return mbedtls_x509_string_to_names( &ctx->subject, subject_name ); } +/** + * \brief Generic function to add to or replace an extension in the + * CSR + * + * \param ctx CSR context to use + * \param oid OID of the extension + * \param oid_len length of the OID + * \param val value of the extension OCTET STRING + * \param val_len length of the value data + * + * \return 0 if successful, or a MBEDTLS_ERR_X509_ALLOC_FAILED + */ int mbedtls_x509write_csr_set_extension( mbedtls_x509write_csr *ctx, - const char *oid, size_t oid_len, - const unsigned char *val, size_t val_len ) + const char *oid, size_t oid_len, + const unsigned char *val, size_t val_len ) { return mbedtls_x509_set_extension( &ctx->extensions, oid, oid_len, - 0, val, val_len ); + 0, val, val_len ); } +/** + * \brief Set the Key Usage Extension flags + * (e.g. MBEDTLS_X509_KU_DIGITAL_SIGNATURE | MBEDTLS_X509_KU_KEY_CERT_SIGN) + * + * \param ctx CSR context to use + * \param key_usage key usage flags to set + * + * \return 0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED + * + * \note The decipherOnly flag from the Key Usage + * extension is represented by bit 8 (i.e. + * 0x8000), which cannot typically be represented + * in an unsigned char. Therefore, the flag + * decipherOnly (i.e. + * #MBEDTLS_X509_KU_DECIPHER_ONLY) cannot be set using this + * function. + */ int mbedtls_x509write_csr_set_key_usage( mbedtls_x509write_csr *ctx, unsigned char key_usage ) { unsigned char buf[4]; unsigned char *c; int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - c = buf + 4; - ret = mbedtls_asn1_write_named_bitstring( &c, buf, &key_usage, 8 ); if( ret < 3 || ret > 4 ) - return( ret ); - + return ret; ret = mbedtls_x509write_csr_set_extension( ctx, MBEDTLS_OID_KEY_USAGE, - MBEDTLS_OID_SIZE( MBEDTLS_OID_KEY_USAGE ), - c, (size_t)ret ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_KEY_USAGE ), + c, (size_t)ret ); if( ret != 0 ) - return( ret ); - - return( 0 ); + return ret; + return 0; } +/** + * \brief Set the Netscape Cert Type flags + * (e.g. MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT | MBEDTLS_X509_NS_CERT_TYPE_EMAIL) + * + * \param ctx CSR context to use + * \param ns_cert_type Netscape Cert Type flags to set + * + * \return 0 if successful, or MBEDTLS_ERR_X509_ALLOC_FAILED + */ int mbedtls_x509write_csr_set_ns_cert_type( mbedtls_x509write_csr *ctx, - unsigned char ns_cert_type ) + unsigned char ns_cert_type ) { unsigned char buf[4]; unsigned char *c; int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; - c = buf + 4; - ret = mbedtls_asn1_write_named_bitstring( &c, buf, &ns_cert_type, 8 ); if( ret < 3 || ret > 4 ) - return( ret ); - + return ret; ret = mbedtls_x509write_csr_set_extension( ctx, MBEDTLS_OID_NS_CERT_TYPE, MBEDTLS_OID_SIZE( MBEDTLS_OID_NS_CERT_TYPE ), c, (size_t)ret ); if( ret != 0 ) - return( ret ); - - return( 0 ); + return ret; + return 0; } static int x509write_csr_der_internal( mbedtls_x509write_csr *ctx, @@ -150,18 +200,10 @@ static int x509write_csr_der_internal( mbedtls_x509write_csr *ctx, size_t pub_len = 0, sig_and_oid_len = 0, sig_len; size_t len = 0; mbedtls_pk_type_t pk_alg; -#if defined(MBEDTLS_USE_PSA_CRYPTO) - psa_hash_operation_t hash_operation = PSA_HASH_OPERATION_INIT; - size_t hash_len; - psa_algorithm_t hash_alg = mbedtls_psa_translate_md( ctx->md_alg ); -#endif /* MBEDTLS_USE_PSA_CRYPTO */ - /* Write the CSR backwards starting from the end of buf */ c = buf + size; - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_x509_write_extensions( &c, buf, ctx->extensions ) ); - if( len ) { MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); @@ -169,99 +211,72 @@ static int x509write_csr_der_internal( mbedtls_x509write_csr *ctx, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SET ) ); - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_oid( &c, buf, MBEDTLS_OID_PKCS9_CSR_EXT_REQ, MBEDTLS_OID_SIZE( MBEDTLS_OID_PKCS9_CSR_EXT_REQ ) ) ); - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); } - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ); - MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_pk_write_pubkey_der( ctx->key, buf, c - buf ) ); c -= pub_len; len += pub_len; - /* * Subject ::= Name */ MBEDTLS_ASN1_CHK_ADD( len, mbedtls_x509_write_names( &c, buf, ctx->subject ) ); - /* * Version ::= INTEGER { v1(0), v2(1), v3(2) } */ MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_int( &c, buf, 0 ) ); - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); - /* * Sign the written CSR data into the sig buffer * Note: hash errors can happen only after an internal error */ -#if defined(MBEDTLS_USE_PSA_CRYPTO) - if( psa_hash_setup( &hash_operation, hash_alg ) != PSA_SUCCESS ) - return( MBEDTLS_ERR_X509_FATAL_ERROR ); - - if( psa_hash_update( &hash_operation, c, len ) != PSA_SUCCESS ) - return( MBEDTLS_ERR_X509_FATAL_ERROR ); - - if( psa_hash_finish( &hash_operation, hash, sizeof( hash ), &hash_len ) - != PSA_SUCCESS ) - { - return( MBEDTLS_ERR_X509_FATAL_ERROR ); - } -#else /* MBEDTLS_USE_PSA_CRYPTO */ ret = mbedtls_md( mbedtls_md_info_from_type( ctx->md_alg ), c, len, hash ); if( ret != 0 ) - return( ret ); -#endif + return ret; if( ( ret = mbedtls_pk_sign( ctx->key, ctx->md_alg, hash, 0, sig, &sig_len, f_rng, p_rng ) ) != 0 ) { - return( ret ); + return ret; } - if( mbedtls_pk_can_do( ctx->key, MBEDTLS_PK_RSA ) ) pk_alg = MBEDTLS_PK_RSA; else if( mbedtls_pk_can_do( ctx->key, MBEDTLS_PK_ECDSA ) ) pk_alg = MBEDTLS_PK_ECDSA; else return( MBEDTLS_ERR_X509_INVALID_ALG ); - if( ( ret = mbedtls_oid_get_oid_by_sig_alg( pk_alg, ctx->md_alg, &sig_oid, &sig_oid_len ) ) != 0 ) { - return( ret ); + return ret; } - /* * Move the written CSR data to the start of buf to create space for * writing the signature into buf. */ memmove( buf, c, len ); - /* * Write sig and its OID into buf backwards from the end of buf. * Note: mbedtls_x509_write_sig will check for c2 - ( buf + len ) < sig_len @@ -271,14 +286,12 @@ static int x509write_csr_der_internal( mbedtls_x509write_csr *ctx, MBEDTLS_ASN1_CHK_ADD( sig_and_oid_len, mbedtls_x509_write_sig( &c2, buf + len, sig_oid, sig_oid_len, sig, sig_len ) ); - /* * Compact the space between the CSR data and signature by moving the * CSR data to the start of the signature. */ c2 -= len; memmove( c2, buf, len ); - /* ASN encode the total size and tag the CSR data with it. */ len += sig_and_oid_len; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c2, buf, len ) ); @@ -286,13 +299,32 @@ static int x509write_csr_der_internal( mbedtls_x509write_csr *ctx, mbedtls_asn1_write_tag( &c2, buf, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); - /* Zero the unused bytes at the start of buf */ memset( buf, 0, c2 - buf); - return( (int) len ); } +/** + * \brief Write a CSR (Certificate Signing Request) to a + * DER structure + * Note: data is written at the end of the buffer! Use the + * return value to determine where you should start + * using the buffer + * + * \param ctx CSR to write away + * \param buf buffer to write to + * \param size size of the buffer + * \param f_rng RNG function (for signature, see note) + * \param p_rng RNG parameter + * + * \return length of data written if successful, or a specific + * error code + * + * \note f_rng may be NULL if RSA is used for signature and the + * signature is made offline (otherwise f_rng is desirable + * for countermeasures against timing attacks). + * ECDSA signatures always require a non-NULL f_rng. + */ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, size_t size, int (*f_rng)(void *, unsigned char *, size_t), @@ -300,45 +332,53 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, { int ret; unsigned char *sig; - if( ( sig = mbedtls_calloc( 1, MBEDTLS_PK_SIGNATURE_MAX_SIZE ) ) == NULL ) { return( MBEDTLS_ERR_X509_ALLOC_FAILED ); } - ret = x509write_csr_der_internal( ctx, buf, size, sig, f_rng, p_rng ); - mbedtls_free( sig ); - - return( ret ); + return ret; } #define PEM_BEGIN_CSR "-----BEGIN CERTIFICATE REQUEST-----\n" #define PEM_END_CSR "-----END CERTIFICATE REQUEST-----\n" -#if defined(MBEDTLS_PEM_WRITE_C) +/** + * \brief Write a CSR (Certificate Signing Request) to a + * PEM string + * + * \param ctx CSR to write away + * \param buf buffer to write to + * \param size size of the buffer + * \param f_rng RNG function (for signature, see note) + * \param p_rng RNG parameter + * + * \return 0 if successful, or a specific error code + * + * \note f_rng may be NULL if RSA is used for signature and the + * signature is made offline (otherwise f_rng is desirable + * for countermeasures against timing attacks). + * ECDSA signatures always require a non-NULL f_rng. + */ int mbedtls_x509write_csr_pem( mbedtls_x509write_csr *ctx, unsigned char *buf, size_t size, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED; size_t olen = 0; - if( ( ret = mbedtls_x509write_csr_der( ctx, buf, size, f_rng, p_rng ) ) < 0 ) { - return( ret ); + return ret; } - if( ( ret = mbedtls_pem_write_buffer( PEM_BEGIN_CSR, PEM_END_CSR, buf + size - ret, ret, buf, size, &olen ) ) != 0 ) { - return( ret ); + return ret; } - - return( 0 ); + return 0; } -#endif /* MBEDTLS_PEM_WRITE_C */ #endif /* MBEDTLS_X509_CSR_WRITE_C */ diff --git a/third_party/mbedtls/xtea.c b/third_party/mbedtls/xtea.c deleted file mode 100644 index 591369673..000000000 --- a/third_party/mbedtls/xtea.c +++ /dev/null @@ -1,277 +0,0 @@ -/* clang-format off */ - -asm(".ident\t\"\\n\\n\ -Mbed TLS (Apache 2.0)\\n\ -Copyright The Mbed TLS Contributors\""); -asm(".include \"libc/disclaimer.inc\""); - -/* - * An 32-bit implementation of the XTEA algorithm - * - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "libc/str/str.h" -#include "third_party/mbedtls/common.h" - -#if defined(MBEDTLS_XTEA_C) - -#include "third_party/mbedtls/xtea.h" -#include "third_party/mbedtls/platform_util.h" - - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "third_party/mbedtls/platform.h" -#else -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ - -#if !defined(MBEDTLS_XTEA_ALT) - -/* - * 32-bit integer manipulation macros (big endian) - */ -#ifndef GET_UINT32_BE -#define GET_UINT32_BE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ -} -#endif - -#ifndef PUT_UINT32_BE -#define PUT_UINT32_BE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ -} -#endif - -void mbedtls_xtea_init( mbedtls_xtea_context *ctx ) -{ - memset( ctx, 0, sizeof( mbedtls_xtea_context ) ); -} - -void mbedtls_xtea_free( mbedtls_xtea_context *ctx ) -{ - if( ctx == NULL ) - return; - - mbedtls_platform_zeroize( ctx, sizeof( mbedtls_xtea_context ) ); -} - -/* - * XTEA key schedule - */ -void mbedtls_xtea_setup( mbedtls_xtea_context *ctx, const unsigned char key[16] ) -{ - int i; - - memset( ctx, 0, sizeof(mbedtls_xtea_context) ); - - for( i = 0; i < 4; i++ ) - { - GET_UINT32_BE( ctx->k[i], key, i << 2 ); - } -} - -/* - * XTEA encrypt function - */ -int mbedtls_xtea_crypt_ecb( mbedtls_xtea_context *ctx, int mode, - const unsigned char input[8], unsigned char output[8]) -{ - uint32_t *k, v0, v1, i; - - k = ctx->k; - - GET_UINT32_BE( v0, input, 0 ); - GET_UINT32_BE( v1, input, 4 ); - - if( mode == MBEDTLS_XTEA_ENCRYPT ) - { - uint32_t sum = 0, delta = 0x9E3779B9; - - for( i = 0; i < 32; i++ ) - { - v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]); - sum += delta; - v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]); - } - } - else /* MBEDTLS_XTEA_DECRYPT */ - { - uint32_t delta = 0x9E3779B9, sum = delta * 32; - - for( i = 0; i < 32; i++ ) - { - v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]); - sum -= delta; - v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]); - } - } - - PUT_UINT32_BE( v0, output, 0 ); - PUT_UINT32_BE( v1, output, 4 ); - - return( 0 ); -} - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -/* - * XTEA-CBC buffer encryption/decryption - */ -int mbedtls_xtea_crypt_cbc( mbedtls_xtea_context *ctx, int mode, size_t length, - unsigned char iv[8], const unsigned char *input, - unsigned char *output) -{ - int i; - unsigned char temp[8]; - - if( length % 8 ) - return( MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH ); - - if( mode == MBEDTLS_XTEA_DECRYPT ) - { - while( length > 0 ) - { - memcpy( temp, input, 8 ); - mbedtls_xtea_crypt_ecb( ctx, mode, input, output ); - - for( i = 0; i < 8; i++ ) - output[i] = (unsigned char)( output[i] ^ iv[i] ); - - memcpy( iv, temp, 8 ); - - input += 8; - output += 8; - length -= 8; - } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 8; i++ ) - output[i] = (unsigned char)( input[i] ^ iv[i] ); - - mbedtls_xtea_crypt_ecb( ctx, mode, output, output ); - memcpy( iv, output, 8 ); - - input += 8; - output += 8; - length -= 8; - } - } - - return( 0 ); -} -#endif /* MBEDTLS_CIPHER_MODE_CBC */ -#endif /* !MBEDTLS_XTEA_ALT */ - -#if defined(MBEDTLS_SELF_TEST) - -/* - * XTEA tests vectors (non-official) - */ - -static const unsigned char xtea_test_key[6][16] = -{ - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f }, - { 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 }, - { 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 unsigned char xtea_test_pt[6][8] = -{ - { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48 }, - { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 }, - { 0x5a, 0x5b, 0x6e, 0x27, 0x89, 0x48, 0xd7, 0x7f }, - { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48 }, - { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 }, - { 0x70, 0xe1, 0x22, 0x5d, 0x6e, 0x4e, 0x76, 0x55 } -}; - -static const unsigned char xtea_test_ct[6][8] = -{ - { 0x49, 0x7d, 0xf3, 0xd0, 0x72, 0x61, 0x2c, 0xb5 }, - { 0xe7, 0x8f, 0x2d, 0x13, 0x74, 0x43, 0x41, 0xd8 }, - { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 }, - { 0xa0, 0x39, 0x05, 0x89, 0xf8, 0xb8, 0xef, 0xa5 }, - { 0xed, 0x23, 0x37, 0x5a, 0x82, 0x1a, 0x8c, 0x2d }, - { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 } -}; - -/* - * Checkup routine - */ -int mbedtls_xtea_self_test( int verbose ) -{ - int i, ret = 0; - unsigned char buf[8]; - mbedtls_xtea_context ctx; - - mbedtls_xtea_init( &ctx ); - for( i = 0; i < 6; i++ ) - { - if( verbose != 0 ) - mbedtls_printf( " XTEA test #%d: ", i + 1 ); - - memcpy( buf, xtea_test_pt[i], 8 ); - - mbedtls_xtea_setup( &ctx, xtea_test_key[i] ); - mbedtls_xtea_crypt_ecb( &ctx, MBEDTLS_XTEA_ENCRYPT, buf, buf ); - - if( memcmp( buf, xtea_test_ct[i], 8 ) != 0 ) - { - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - - ret = 1; - goto exit; - } - - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - } - - if( verbose != 0 ) - mbedtls_printf( "\n" ); - -exit: - mbedtls_xtea_free( &ctx ); - - return( ret ); -} - -#endif /* MBEDTLS_SELF_TEST */ - -#endif /* MBEDTLS_XTEA_C */ diff --git a/third_party/mbedtls/xtea.h b/third_party/mbedtls/xtea.h deleted file mode 100644 index 893f86aa1..000000000 --- a/third_party/mbedtls/xtea.h +++ /dev/null @@ -1,137 +0,0 @@ -/* clang-format off */ - -/** - * \file xtea.h - * - * \brief XTEA block cipher (32-bit) - */ -/* - * Copyright The Mbed TLS Contributors - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef MBEDTLS_XTEA_H -#define MBEDTLS_XTEA_H - -#if !defined(MBEDTLS_CONFIG_FILE) -#include "third_party/mbedtls/config.h" -#else -#include MBEDTLS_CONFIG_FILE -#endif - - -#define MBEDTLS_XTEA_ENCRYPT 1 -#define MBEDTLS_XTEA_DECRYPT 0 - -#define MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH -0x0028 /**< The data input has an invalid length. */ - -/* MBEDTLS_ERR_XTEA_HW_ACCEL_FAILED is deprecated and should not be used. */ -#define MBEDTLS_ERR_XTEA_HW_ACCEL_FAILED -0x0029 /**< XTEA hardware accelerator failed. */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(MBEDTLS_XTEA_ALT) -// Regular implementation -// - -/** - * \brief XTEA context structure - */ -typedef struct mbedtls_xtea_context -{ - uint32_t k[4]; /*!< key */ -} -mbedtls_xtea_context; - -#else /* MBEDTLS_XTEA_ALT */ -/* #include "third_party/mbedtls/xtea_alt.h" */ -#endif /* MBEDTLS_XTEA_ALT */ - -/** - * \brief Initialize XTEA context - * - * \param ctx XTEA context to be initialized - */ -void mbedtls_xtea_init( mbedtls_xtea_context *ctx ); - -/** - * \brief Clear XTEA context - * - * \param ctx XTEA context to be cleared - */ -void mbedtls_xtea_free( mbedtls_xtea_context *ctx ); - -/** - * \brief XTEA key schedule - * - * \param ctx XTEA context to be initialized - * \param key the secret key - */ -void mbedtls_xtea_setup( mbedtls_xtea_context *ctx, const unsigned char key[16] ); - -/** - * \brief XTEA cipher function - * - * \param ctx XTEA context - * \param mode MBEDTLS_XTEA_ENCRYPT or MBEDTLS_XTEA_DECRYPT - * \param input 8-byte input block - * \param output 8-byte output block - * - * \return 0 if successful - */ -int mbedtls_xtea_crypt_ecb( mbedtls_xtea_context *ctx, - int mode, - const unsigned char input[8], - unsigned char output[8] ); - -#if defined(MBEDTLS_CIPHER_MODE_CBC) -/** - * \brief XTEA CBC cipher function - * - * \param ctx XTEA context - * \param mode MBEDTLS_XTEA_ENCRYPT or MBEDTLS_XTEA_DECRYPT - * \param length the length of input, multiple of 8 - * \param iv initialization vector for CBC mode - * \param input input block - * \param output output block - * - * \return 0 if successful, - * MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH if the length % 8 != 0 - */ -int mbedtls_xtea_crypt_cbc( mbedtls_xtea_context *ctx, - int mode, - size_t length, - unsigned char iv[8], - const unsigned char *input, - unsigned char *output); -#endif /* MBEDTLS_CIPHER_MODE_CBC */ - -#if defined(MBEDTLS_SELF_TEST) - -/** - * \brief Checkup routine - * - * \return 0 if successful, or 1 if the test failed - */ -int mbedtls_xtea_self_test( int verbose ); - -#endif /* MBEDTLS_SELF_TEST */ - -#ifdef __cplusplus -} -#endif - -#endif /* xtea.h */ diff --git a/third_party/mbedtls/zeroize.c b/third_party/mbedtls/zeroize.c new file mode 100644 index 000000000..27956d865 --- /dev/null +++ b/third_party/mbedtls/zeroize.c @@ -0,0 +1,27 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/str/str.h" +#include "third_party/mbedtls/platform.h" + +static void *(*const volatile memset_func)(void *, int, size_t) = memset; + +void mbedtls_platform_zeroize(void *buf, size_t len) { + MBEDTLS_INTERNAL_VALIDATE(!len || buf); + if (len > 0) memset_func(buf, 0, len); +} diff --git a/third_party/musl/ftw.h b/third_party/musl/ftw.h index 0d8f92029..1346a4cd6 100644 --- a/third_party/musl/ftw.h +++ b/third_party/musl/ftw.h @@ -4,13 +4,13 @@ #if !(__ASSEMBLER__ + __LINKER__ + 0) COSMOPOLITAN_C_START_ -#define FTW_F 1 -#define FTW_D 2 -#define FTW_DNR 3 -#define FTW_NS 4 -#define FTW_SL 5 -#define FTW_DP 6 -#define FTW_SLN 7 +#define FTW_F 1 /* file */ +#define FTW_D 2 /* directory */ +#define FTW_DNR 3 /* directory that cannot be read */ +#define FTW_NS 4 /* not a symbolic link and stat failed */ +#define FTW_SL 5 /* symbolic link */ +#define FTW_DP 6 /* directory and FTW_DEPTH was specified */ +#define FTW_SLN 7 /* symbolic link pointing to nonexistent file */ #define FTW_PHYS 1 #define FTW_MOUNT 2 diff --git a/third_party/musl/nftw.c b/third_party/musl/nftw.c index 21d31ff51..d498f35a3 100644 --- a/third_party/musl/nftw.c +++ b/third_party/musl/nftw.c @@ -103,7 +103,7 @@ static int do_nftw(char *path, int (*fn)(const char *, const struct stat *, int, } if (type == FTW_D || type == FTW_DP) { - dfd = open(path, O_RDONLY); + dfd = open(path, O_RDONLY | O_DIRECTORY); err = errno; if (dfd < 0 && err == EACCES) type = FTW_DNR; if (!fd_limit) close(dfd); diff --git a/third_party/sqlite3/shell.c b/third_party/sqlite3/shell.c index 108279c5d..5d396a643 100644 --- a/third_party/sqlite3/shell.c +++ b/third_party/sqlite3/shell.c @@ -89,6 +89,7 @@ #include "libc/mem/mem.h" #include "libc/stdio/stdio.h" #include "libc/str/str.h" +#include "libc/calls/calls.h" #include "third_party/sqlite3/sqlite3.h" typedef sqlite3_int64 i64; @@ -119,6 +120,7 @@ typedef unsigned char u8; # define GETPID (int)GetCurrentProcessId #endif #include "libc/calls/weirdtypes.h" +#include "libc/calls/calls.h" #if HAVE_READLINE # include @@ -1029,359 +1031,6 @@ static void shellAddSchemaName( #define SQLITE_EXTENSION_INIT1 #define SQLITE_EXTENSION_INIT2(X) (void)(X) -#if defined(_WIN32) && defined(_MSC_VER) -/************************* Begin test_windirent.h ******************/ -/* -** 2015 November 30 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** This file contains declarations for most of the opendir() family of -** POSIX functions on Win32 using the MSVCRT. -*/ - -#if defined(_WIN32) && defined(_MSC_VER) && !defined(SQLITE_WINDIRENT_H) -#define SQLITE_WINDIRENT_H - -/* -** We need several data types from the Windows SDK header. -*/ - -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif - -/* -** We need several support functions from the SQLite core. -*/ - -/* -** We need several things from the ANSI and MSVCRT headers. -*/ - -#include "libc/calls/weirdtypes.h" -#include "libc/errno.h" -#include "libc/limits.h" -#include "libc/mem/mem.h" -#include "libc/stdio/stdio.h" - -/* -** We may need several defines that should have been in "sys/stat.h". -*/ - -#ifndef S_ISREG -#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) -#endif - -#ifndef S_ISDIR -#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) -#endif - -#ifndef S_ISLNK -#define S_ISLNK(mode) (0) -#endif - -/* -** We may need to provide the "mode_t" type. -*/ - -#ifndef MODE_T_DEFINED - #define MODE_T_DEFINED - typedef unsigned short mode_t; -#endif - -/* -** We may need to provide the "ino_t" type. -*/ - -#ifndef INO_T_DEFINED - #define INO_T_DEFINED - typedef unsigned short ino_t; -#endif - -/* -** We need to define "NAME_MAX" if it was not present in "limits.h". -*/ - -#ifndef NAME_MAX -# ifdef FILENAME_MAX -# define NAME_MAX (FILENAME_MAX) -# else -# define NAME_MAX (260) -# endif -#endif - -/* -** We need to define "NULL_INTPTR_T" and "BAD_INTPTR_T". -*/ - -#ifndef NULL_INTPTR_T -# define NULL_INTPTR_T ((intptr_t)(0)) -#endif - -#ifndef BAD_INTPTR_T -# define BAD_INTPTR_T ((intptr_t)(-1)) -#endif - -/* -** We need to provide the necessary structures and related types. -*/ - -#ifndef DIRENT_DEFINED -#define DIRENT_DEFINED -typedef struct DIRENT DIRENT; -typedef DIRENT *LPDIRENT; -struct DIRENT { - ino_t d_ino; /* Sequence number, do not use. */ - unsigned d_attributes; /* Win32 file attributes. */ - char d_name[NAME_MAX + 1]; /* Name within the directory. */ -}; -#endif - -#ifndef DIR_DEFINED -#define DIR_DEFINED -typedef struct DIR DIR; -typedef DIR *LPDIR; -struct DIR { - intptr_t d_handle; /* Value returned by "_findfirst". */ - DIRENT d_first; /* DIRENT constructed based on "_findfirst". */ - DIRENT d_next; /* DIRENT constructed based on "_findnext". */ -}; -#endif - -/* -** Provide a macro, for use by the implementation, to determine if a -** particular directory entry should be skipped over when searching for -** the next directory entry that should be returned by the readdir() or -** readdir_r() functions. -*/ - -#ifndef is_filtered -# define is_filtered(a) ((((a).attrib)&_A_HIDDEN) || (((a).attrib)&_A_SYSTEM)) -#endif - -/* -** Provide the function prototype for the POSIX compatiable getenv() -** function. This function is not thread-safe. -*/ - -extern const char *windirent_getenv(const char *name); - -/* -** Finally, we can provide the function prototypes for the opendir(), -** readdir(), readdir_r(), and closedir() POSIX functions. -*/ - -extern LPDIR opendir(const char *dirname); -extern LPDIRENT readdir(LPDIR dirp); -extern INT readdir_r(LPDIR dirp, LPDIRENT entry, LPDIRENT *result); -extern INT closedir(LPDIR dirp); - -#endif /* defined(WIN32) && defined(_MSC_VER) */ - -/************************* End test_windirent.h ********************/ -/************************* Begin test_windirent.c ******************/ -/* -** 2015 November 30 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** This file contains code to implement most of the opendir() family of -** POSIX functions on Win32 using the MSVCRT. -*/ - -#if defined(_WIN32) && defined(_MSC_VER) -/* #include "third_party/sqlite3/test_windirent.inc" */ - -/* -** Implementation of the POSIX getenv() function using the Win32 API. -** This function is not thread-safe. -*/ -const char *windirent_getenv( - const char *name -){ - static char value[32768]; /* Maximum length, per MSDN */ - DWORD dwSize = sizeof(value) / sizeof(char); /* Size in chars */ - DWORD dwRet; /* Value returned by GetEnvironmentVariableA() */ - - memset(value, 0, sizeof(value)); - dwRet = GetEnvironmentVariableA(name, value, dwSize); - if( dwRet==0 || dwRet>dwSize ){ - /* - ** The function call to GetEnvironmentVariableA() failed -OR- - ** the buffer is not large enough. Either way, return NULL. - */ - return 0; - }else{ - /* - ** The function call to GetEnvironmentVariableA() succeeded - ** -AND- the buffer contains the entire value. - */ - return value; - } -} - -/* -** Implementation of the POSIX opendir() function using the MSVCRT. -*/ -LPDIR opendir( - const char *dirname -){ - struct _finddata_t data; - LPDIR dirp = (LPDIR)sqlite3_malloc(sizeof(DIR)); - SIZE_T namesize = sizeof(data.name) / sizeof(data.name[0]); - - if( dirp==NULL ) return NULL; - memset(dirp, 0, sizeof(DIR)); - - /* TODO: Remove this if Unix-style root paths are not used. */ - if( sqlite3_stricmp(dirname, "/")==0 ){ - dirname = windirent_getenv("SystemDrive"); - } - - memset(&data, 0, sizeof(struct _finddata_t)); - _snprintf(data.name, namesize, "%s\\*", dirname); - dirp->d_handle = _findfirst(data.name, &data); - - if( dirp->d_handle==BAD_INTPTR_T ){ - closedir(dirp); - return NULL; - } - - /* TODO: Remove this block to allow hidden and/or system files. */ - if( is_filtered(data) ){ -next: - - memset(&data, 0, sizeof(struct _finddata_t)); - if( _findnext(dirp->d_handle, &data)==-1 ){ - closedir(dirp); - return NULL; - } - - /* TODO: Remove this block to allow hidden and/or system files. */ - if( is_filtered(data) ) goto next; - } - - dirp->d_first.d_attributes = data.attrib; - strncpy(dirp->d_first.d_name, data.name, NAME_MAX); - dirp->d_first.d_name[NAME_MAX] = '\0'; - - return dirp; -} - -/* -** Implementation of the POSIX readdir() function using the MSVCRT. -*/ -LPDIRENT readdir( - LPDIR dirp -){ - struct _finddata_t data; - - if( dirp==NULL ) return NULL; - - if( dirp->d_first.d_ino==0 ){ - dirp->d_first.d_ino++; - dirp->d_next.d_ino++; - - return &dirp->d_first; - } - -next: - - memset(&data, 0, sizeof(struct _finddata_t)); - if( _findnext(dirp->d_handle, &data)==-1 ) return NULL; - - /* TODO: Remove this block to allow hidden and/or system files. */ - if( is_filtered(data) ) goto next; - - dirp->d_next.d_ino++; - dirp->d_next.d_attributes = data.attrib; - strncpy(dirp->d_next.d_name, data.name, NAME_MAX); - dirp->d_next.d_name[NAME_MAX] = '\0'; - - return &dirp->d_next; -} - -/* -** Implementation of the POSIX readdir_r() function using the MSVCRT. -*/ -INT readdir_r( - LPDIR dirp, - LPDIRENT entry, - LPDIRENT *result -){ - struct _finddata_t data; - - if( dirp==NULL ) return EBADF; - - if( dirp->d_first.d_ino==0 ){ - dirp->d_first.d_ino++; - dirp->d_next.d_ino++; - - entry->d_ino = dirp->d_first.d_ino; - entry->d_attributes = dirp->d_first.d_attributes; - strncpy(entry->d_name, dirp->d_first.d_name, NAME_MAX); - entry->d_name[NAME_MAX] = '\0'; - - *result = entry; - return 0; - } - -next: - - memset(&data, 0, sizeof(struct _finddata_t)); - if( _findnext(dirp->d_handle, &data)==-1 ){ - *result = NULL; - return ENOENT; - } - - /* TODO: Remove this block to allow hidden and/or system files. */ - if( is_filtered(data) ) goto next; - - entry->d_ino = (ino_t)-1; /* not available */ - entry->d_attributes = data.attrib; - strncpy(entry->d_name, data.name, NAME_MAX); - entry->d_name[NAME_MAX] = '\0'; - - *result = entry; - return 0; -} - -/* -** Implementation of the POSIX closedir() function using the MSVCRT. -*/ -INT closedir( - LPDIR dirp -){ - INT result = 0; - - if( dirp==NULL ) return EINVAL; - - if( dirp->d_handle!=NULL_INTPTR_T && dirp->d_handle!=BAD_INTPTR_T ){ - result = _findclose(dirp->d_handle); - } - - sqlite3_free(dirp); - return result; -} - -#endif /* defined(WIN32) && defined(_MSC_VER) */ - -/************************* End test_windirent.c ********************/ -#define dirent DIRENT -#endif /************************* Begin ../ext/misc/shathree.c ******************/ /* ** 2017-03-08 @@ -2187,6 +1836,7 @@ int sqlite3_shathree_init( SQLITE_EXTENSION_INIT1 #include "libc/assert.h" #include "libc/calls/calls.h" +#include "libc/calls/struct/dirent.h" #include "libc/calls/weirdtypes.h" #include "libc/stdio/stdio.h" #include "libc/str/str.h" diff --git a/third_party/sqlite3/sqlite3.mk b/third_party/sqlite3/sqlite3.mk index 21063c2e1..6c2980cb7 100644 --- a/third_party/sqlite3/sqlite3.mk +++ b/third_party/sqlite3/sqlite3.mk @@ -156,6 +156,13 @@ o/$(MODE)/third_party/sqlite3/shell.shell.o: \ OVERRIDE_CFLAGS += \ -DSTACK_FRAME_UNLIMITED +o//third_party/sqlite3/parse.o \ +o//third_party/sqlite3/select.o \ +o//third_party/sqlite3/pragma.o \ +o//third_party/sqlite3/vdbe.o: \ + OVERRIDE_CFLAGS += \ + -Os + $(THIRD_PARTY_SQLITE3_A_OBJS) \ $(THIRD_PARTY_SQLITE3_SHELL_OBJS): \ OVERRIDE_CFLAGS += \ diff --git a/tool/build/calculator.inc b/tool/build/calculator.inc index 479ac9966..3e58c03b6 100644 --- a/tool/build/calculator.inc +++ b/tool/build/calculator.inc @@ -98,5 +98,4 @@ M(1, f, "fpclassify", Fpclassify, fpclassify(x), "nan=0,inf=1,zero=2,subnorm=3,normal=4") M(0, i, "rand", Rand, rand(), "deterministic random number") -M(0, i, "rand32", Rand32, rand32(), "32-bit random number") M(0, i, "rand64", Rand64, rand64(), "64-bit random number") diff --git a/tool/build/lib/buffer.c b/tool/build/lib/buffer.c index 631af8413..ba23c3099 100644 --- a/tool/build/lib/buffer.c +++ b/tool/build/lib/buffer.c @@ -62,16 +62,27 @@ void AppendWide(struct Buffer *b, wint_t wc) { } int AppendFmt(struct Buffer *b, const char *fmt, ...) { - int bytes; - char *tmp; - va_list va; - tmp = NULL; + int n; + char *p; + va_list va, vb; va_start(va, fmt); - bytes = vasprintf(&tmp, fmt, va); + va_copy(vb, va); + n = vsnprintf(b->p + b->i, b->n - b->i, fmt, va); + if (n >= b->n - b->i) { + do { + if (b->n) { + b->n += b->n >> 1; /* the proper way to grow w/ amortization */ + } else { + b->n = 16; + } + } while (b->i + n > b->n); + b->p = realloc(b->p, b->n); + vsnprintf(b->p + b->i, b->n - b->i, fmt, vb); + } + va_end(vb); va_end(va); - if (bytes != -1) AppendData(b, tmp, bytes); - free(tmp); - return bytes; + b->i += n; + return n; } /** diff --git a/tool/build/runitd.c b/tool/build/runitd.c index 0d1a8086a..3094a0b00 100644 --- a/tool/build/runitd.c +++ b/tool/build/runitd.c @@ -96,6 +96,8 @@ * - 1 byte exit status */ +#define DEATH_CLOCK_SECONDS 5 + #define kLogFile "o/runitd.log" #define kLogMaxBytes (2 * 1000 * 1000) @@ -321,7 +323,7 @@ void HandleClient(void) { /* run program, tee'ing stderr to both log and client */ DEBUGF("spawning %s", exename); - SetDeadline(1, 0); + SetDeadline(DEATH_CLOCK_SECONDS, 0); ignore.sa_flags = 0; ignore.sa_handler = SIG_IGN; LOGIFNEG1(sigemptyset(&ignore.sa_mask)); @@ -342,24 +344,29 @@ void HandleClient(void) { } LOGIFNEG1(close(pipefds[1])); DEBUGF("communicating %s[%d]", exename, child); - for (;;) { - CHECK_NE(-1, (got = read(pipefds[0], g_buf, sizeof(g_buf)))); - if (!got) { - close(pipefds[0]); - break; - } - fwrite(g_buf, got, 1, stderr); - SendOutputFragmentMessage(g_clifd, kRunitStderr, g_buf, got); - } - while (waitpid(child, &wstatus, 0) == -1) { - if (errno == EINTR) { - if (g_alarmed) { - WARNF("killing %s which timed out"); - LOGIFNEG1(kill(child, SIGKILL)); + while (!g_alarmed) { + if ((got = read(pipefds[0], g_buf, sizeof(g_buf))) != -1) { + if (!got) { + close(pipefds[0]); + break; } - continue; + fwrite(g_buf, got, 1, stderr); + SendOutputFragmentMessage(g_clifd, kRunitStderr, g_buf, got); + } else { + CHECK_EQ(EINTR, errno); + } + } + for (;;) { + if (g_alarmed) { + WARNF("killing %s which timed out"); + LOGIFNEG1(kill(child, SIGKILL)); + g_alarmed = false; + } + if (waitpid(child, &wstatus, 0) != -1) { + break; + } else { + CHECK_EQ(EINTR, errno); } - FATALF("waitpid failed"); } if (WIFEXITED(wstatus)) { DEBUGF("%s exited with %d", exename, WEXITSTATUS(wstatus)); diff --git a/tool/emacs/c.lang b/tool/emacs/c.lang index f51c8ca60..af98cfa34 100644 --- a/tool/emacs/c.lang +++ b/tool/emacs/c.lang @@ -108,7 +108,6 @@ Keywords={ "optimizespeed", "alignof", "relegated", -"antiquity", "memcpyesque", "libcesque", "artificial", diff --git a/tool/emacs/cosmo-c-builtins.el b/tool/emacs/cosmo-c-builtins.el index 355de558c..589d56af0 100644 --- a/tool/emacs/cosmo-c-builtins.el +++ b/tool/emacs/cosmo-c-builtins.el @@ -1279,7 +1279,8 @@ "COSMOPOLITAN_C_START_" "COSMOPOLITAN_C_END_" "MACHINE_CODE_ANALYSIS_BEGIN_" - "MACHINE_CODE_ANALYSIS_END_")) + "MACHINE_CODE_ANALYSIS_END_" + "__VSCODE_INTELLISENSE__")) (cosmopolitan-builtin-functions '("DebugBreak" diff --git a/tool/emacs/cosmo-c-types.el b/tool/emacs/cosmo-c-types.el index d5d42d9e5..4ab5365ab 100644 --- a/tool/emacs/cosmo-c-types.el +++ b/tool/emacs/cosmo-c-types.el @@ -165,6 +165,8 @@ (cosmo '("int_least128_t" "int_fast128_t" + "mbedtls_mpi_sint" + "mbedtls_mpi_uint" "bool32" "int128_t" "uint128_t" diff --git a/tool/emacs/cosmo-cpp-constants.el b/tool/emacs/cosmo-cpp-constants.el index dbf396aee..23ad45e91 100644 --- a/tool/emacs/cosmo-cpp-constants.el +++ b/tool/emacs/cosmo-cpp-constants.el @@ -16,6 +16,7 @@ "__GNUC_PATCHLEVEL__" "__GNUC__" "__APPLE__" + "__MACH__" "__GNUG__" "__INCLUDE_LEVEL__" "__INTMAX_MAX__" diff --git a/tool/emacs/cosmo-stuff.el b/tool/emacs/cosmo-stuff.el index 2843afa14..10bf0aa14 100644 --- a/tool/emacs/cosmo-stuff.el +++ b/tool/emacs/cosmo-stuff.el @@ -204,6 +204,24 @@ ,(concat "make -j8 -O $f MODE=$m V=1") "./$f")) mode name)) + ((eq kind 'run-win7) + (format + (cosmo-join + " && " + `("m=%s; f=o/$m/%s.com" + ,(concat "make -j8 -O $f MODE=$m V=1") + "scp $f $f.dbg win7:" + "ssh win7 ./%s.com")) + mode name (file-name-nondirectory name))) + ((eq kind 'run-win10) + (format + (cosmo-join + " && " + `("m=%s; f=o/$m/%s.com" + ,(concat "make -j8 -O $f MODE=$m V=1") + "scp $f $f.dbg win10:" + "ssh win10 ./%s.com")) + mode name (file-name-nondirectory name))) ((and (file-regular-p this) (file-executable-p this)) (format "./%s" file)) @@ -580,12 +598,46 @@ ('t (error "cosmo-run: unknown major mode"))))))) +(defun cosmo-run-win7 (arg) + (interactive "P") + (let* ((this (or (buffer-file-name) dired-directory)) + (proj (locate-dominating-file this "Makefile")) + (root (or proj default-directory)) + (file (file-relative-name this root))) + (when root + (let ((default-directory root)) + (save-buffer) + (cond ((memq major-mode '(c-mode c++-mode asm-mode fortran-mode)) + (let* ((mode (cosmo--make-mode arg)) + (compile-command (cosmo--compile-command this root 'run-win7 mode "" ""))) + (compile compile-command))) + ('t + (error "cosmo-run: unknown major mode"))))))) + +(defun cosmo-run-win10 (arg) + (interactive "P") + (let* ((this (or (buffer-file-name) dired-directory)) + (proj (locate-dominating-file this "Makefile")) + (root (or proj default-directory)) + (file (file-relative-name this root))) + (when root + (let ((default-directory root)) + (save-buffer) + (cond ((memq major-mode '(c-mode c++-mode asm-mode fortran-mode)) + (let* ((mode (cosmo--make-mode arg)) + (compile-command (cosmo--compile-command this root 'run-win10 mode "" ""))) + (compile compile-command))) + ('t + (error "cosmo-run: unknown major mode"))))))) + (progn (define-key asm-mode-map (kbd "C-c C-r") 'cosmo-run) (define-key c-mode-base-map (kbd "C-c C-r") 'cosmo-run) (define-key fortran-mode-map (kbd "C-c C-r") 'cosmo-run) (define-key sh-mode-map (kbd "C-c C-r") 'cosmo-run) - (define-key python-mode-map (kbd "C-c C-r") 'cosmo-run)) + (define-key python-mode-map (kbd "C-c C-r") 'cosmo-run) + (define-key c-mode-map (kbd "C-c C-s") 'cosmo-run-win7) + (define-key c-mode-map (kbd "C-c C-_") 'cosmo-run-win10)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/tool/emacs/ctest-mode.el b/tool/emacs/ctest-mode.el index cfa2c2ab8..e603daab1 100644 --- a/tool/emacs/ctest-mode.el +++ b/tool/emacs/ctest-mode.el @@ -88,7 +88,6 @@ "ceil" "floor" "rand" - "rand32" "rand64")) (defun ctest--make-regex (words) diff --git a/tool/net/.help.txt b/tool/net/.help.txt index 5ec858a2d..961fb446e 100644 --- a/tool/net/.help.txt +++ b/tool/net/.help.txt @@ -6,28 +6,50 @@ DESCRIPTION redbean - single-file distributable web server +OVERVIEW + + redbean makes it possible to share web applications that run offline + as a single-file Actually Portable Executable PKZIP archive which + contains your assets. All you need to do is download the redbean.com + program below, change the filename to .zip, add your content in a zip + editing tool, and then change the extension back to .com. + + redbean can serve 1 million+ gzip encoded responses per second on a + cheap personal computer. That performance is thanks to zip and gzip + using the same compression format, which enables kernelspace copies. + Another reason redbean goes fast is that it's a tiny static binary, + which makes fork memory paging nearly free. + + redbean is also easy to modify to suit your own needs. The program + itself is written as a single .c file. It embeds the Lua programming + language and SQLite which let you write dynamic pages. + FLAGS -h help - -s increase silence [repeat] - -v increase verbosity [repeat] -d daemonize -u uniprocess -z print port -m log messages - -b log message body + -b log message bodies -a log resource usage -g log handler latency -f log worker function calls - -H K:V sets http header globally [repeat] - -D DIR serve assets from local directory [repeat] - -t MS tunes read and write timeouts [default 30000] - -M INT tunes max message payload size [default 65536] - -c SEC configures static asset cache-control headers - -r /X=/Y redirect X to Y [repeat] - -R /X=/Y rewrites X to Y [repeat] - -l ADDR listen ip [default 0.0.0.0] - -p PORT listen port [default 8080] + -B use stronger cryptography + -s increase silence [repeatable] + -v increase verbosity [repeatable] + -V increase ssl verbosity [repeatable] + -H K:V sets http header globally [repeatable] + -D DIR overlay assets in local directory [repeatable] + -r /X=/Y redirect X to Y [repeatable] + -R /X=/Y rewrites X to Y [repeatable] + -K PATH tls private key path [repeatable] + -C PATH tls certificate(s) path [repeatable] + -t MS tunes read and write timeouts [def. 60000] + -M INT tunes max message payload size [def. 65536] + -p PORT listen port [def. 8080; repeatable] + -l ADDR listen addr [def. 0.0.0.0; repeatable] + -c SEC configures static cache-control -L PATH log file location -P PATH pid file location -U INT daemon set user id @@ -36,14 +58,13 @@ FLAGS FEATURES - Lua v5.4 - - HTTP v0.9 - - HTTP v1.0 - - HTTP v1.1 - - Pipelining - - Accounting - - Content-Encoding - - Range / Content-Range - - Last-Modified / If-Modified-Since + - SQLite 3.35.5 + - TLS v1.2 / v1.1 / v1.0 + - HTTP v1.1 / v1.0 / v0.9 + - Chromium-Zlib Compression + - Statusz Monitoring Statistics + - Self-Modifying PKZIP Object Store + - Linux + Windows + Mac + FreeBSD + OpenBSD + NetBSD USAGE @@ -122,7 +143,7 @@ USAGE You can have redbean run as a daemon by doing the following: - redbean.com -vv -d -L redbean.log -P redbean.pid + sudo ./redbean.com -vvdp80 -p443 -L redbean.log -P redbean.pid kill -TERM $(cat redbean.pid) # 1x: graceful shutdown kill -TERM $(cat redbean.pid) # 2x: forceful shutdown @@ -152,6 +173,32 @@ USAGE inside the binary. redbean also respects your privacy and won't phone home because your computer is its home. +SECURITY + + redbean uses a protocol polyglot for serving HTTP and HTTPS on + the same port numbers. For example, both of these are valid: + + http://127.0.0.1:8080/ + https://127.0.0.1:8080/ + + The easiest way to use a self-signed certificate is to provide + redbean with a key-signing key: + + openssl req -x509 -newkey rsa:2048 \ + -keyout .ca.key -out .ca.crt -days 6570 -nodes \ + -subj '/C=US/ST=CA/O=Jane Doe/CN=My Root CA 1' \ + -addext 'keyUsage = critical,cRLSign,keyCertSign' + sudo ./redbean.com -C ca.crt -K .ca.key -p 80 -p 443 + + SSL verbosity is controlled as follows for troubleshooting: + + -V log ssl errors + -VV log ssl state changes too + -VVV log ssl informational messages too + -VVVV log ssl verbose details too + + That's in addition to existing flags like -vvvm. + SEE ALSO https://justine.lol/redbean/index.html diff --git a/tool/net/.init.lua b/tool/net/.init.lua index 778f344ec..09933041a 100644 --- a/tool/net/.init.lua +++ b/tool/net/.init.lua @@ -1,2 +1,3 @@ -- special script called by main redbean process at startup HidePath('/usr/share/zoneinfo/') +HidePath('/usr/share/ssl/') diff --git a/tool/net/counters.inc b/tool/net/counters.inc index 2855a3033..62e9d5a1d 100644 --- a/tool/net/counters.inc +++ b/tool/net/counters.inc @@ -27,6 +27,7 @@ C(forbiddens) C(forkerrors) C(frags) C(fumbles) +C(handshakeinterrupts) C(http09) C(http10) C(http11) @@ -65,6 +66,7 @@ C(openfails) C(partialresponses) C(payloaddisconnects) C(pipelinedrequests) +C(pollinterrupts) C(precompressedresponses) C(readerrors) C(readinterrupts) @@ -78,6 +80,15 @@ C(serveroptions) C(shutdowns) C(slowloris) C(slurps) +C(sslcantciphers) +C(sslhandshakefails) +C(sslhandshakes) +C(sslnociphers) +C(sslshakemacs) +C(ssltimeouts) +C(sslunknownca) +C(sslunknowncert) +C(sslupgrades) C(statfails) C(staticrequests) C(stats) diff --git a/tool/net/demo/.init.lua b/tool/net/demo/.init.lua index 88d3bdbf2..acb360df4 100644 --- a/tool/net/demo/.init.lua +++ b/tool/net/demo/.init.lua @@ -3,6 +3,7 @@ sqlite3 = require "lsqlite3" -- /.init.lua is loaded at startup in redbean's main process HidePath('/usr/share/zoneinfo/') +HidePath('/usr/share/ssl/') -- open a browser tab using explorer/open/xdg-open -- LaunchBrowser('/tool/net/demo/index.html') diff --git a/tool/net/net.mk b/tool/net/net.mk index 08d19b11e..ac3d370d4 100644 --- a/tool/net/net.mk +++ b/tool/net/net.mk @@ -10,13 +10,18 @@ TOOL_NET_HDRS = $(filter %.h,$(TOOL_NET_FILES)) TOOL_NET_OBJS = \ $(TOOL_NET_SRCS:%.c=o/$(MODE)/%.o) -TOOL_NET_COMS = \ - $(TOOL_NET_SRCS:%.c=o/$(MODE)/%.com) - TOOL_NET_BINS = \ $(TOOL_NET_COMS) \ $(TOOL_NET_COMS:%=%.dbg) +TOOL_NET_COMS = \ + o/$(MODE)/tool/net/redbean.com \ + o/$(MODE)/tool/net/redbean-demo.com \ + o/$(MODE)/tool/net/redbean-static.com \ + o/$(MODE)/tool/net/redbean-unsecure.com \ + o/$(MODE)/tool/net/redbean-original.com \ + o/$(MODE)/tool/net/echoserver.com + TOOL_NET_DIRECTDEPS = \ LIBC_ALG \ LIBC_BITS \ @@ -27,6 +32,8 @@ TOOL_NET_DIRECTDEPS = \ LIBC_LOG \ LIBC_MEM \ LIBC_NEXGEN32E \ + LIBC_NT_IPHLPAPI \ + LIBC_NT_KERNEL32 \ LIBC_RAND \ LIBC_RUNTIME \ LIBC_SOCK \ @@ -39,11 +46,14 @@ TOOL_NET_DIRECTDEPS = \ LIBC_TINYMATH \ LIBC_UNICODE \ LIBC_X \ + LIBC_ZIPOS \ NET_HTTP \ + THIRD_PARTY_GDTOA \ THIRD_PARTY_GETOPT \ THIRD_PARTY_LUA \ - THIRD_PARTY_SQLITE3 \ + THIRD_PARTY_MBEDTLS \ THIRD_PARTY_REGEX \ + THIRD_PARTY_SQLITE3 \ THIRD_PARTY_ZLIB \ TOOL_DECODE_LIB @@ -62,6 +72,10 @@ o/$(MODE)/tool/net/%.com.dbg: \ $(APE) @$(APELINK) +# REDBEAN.COM +# +# The little web server that could! + o/$(MODE)/tool/net/redbean.com.dbg: \ $(TOOL_NET_DEPS) \ o/$(MODE)/tool/net/redbean.o \ @@ -82,12 +96,19 @@ o/$(MODE)/tool/net/redbean.com: \ @$(COMPILE) -ADD -T$@ dd if=$@ of=o/$(MODE)/tool/net/.ape bs=64 count=11 conv=notrunc 2>/dev/null @$(COMPILE) -AZIP -T$@ zip -qj $@ o/$(MODE)/tool/net/.ape tool/net/.help.txt tool/net/.init.lua tool/net/favicon.ico tool/net/redbean.png +# REDBEAN-DEMO.COM +# +# This redbean-demo.com program is the same as redbean.com except it +# bundles a bunch of example code and there's a live of it available +# online at http://redbean.justine.lol/ + o/$(MODE)/tool/net/redbean-demo.com.dbg: \ o/$(MODE)/tool/net/redbean.com.dbg @$(COMPILE) -ACP -T$@ cp $< $@ o/$(MODE)/tool/net/redbean-demo.com: \ o/$(MODE)/tool/net/redbean-demo.com.dbg \ + o/$(MODE)/host/third_party/infozip/zip.com \ tool/net/net.mk \ tool/net/favicon.ico \ tool/net/redbean.png \ @@ -114,22 +135,27 @@ o/$(MODE)/tool/net/redbean-demo.com: \ @$(COMPILE) -AOBJCOPY -T$@ $(OBJCOPY) -S -O binary $< $@ @$(COMPILE) -AMKDIR -T$@ mkdir -p o/$(MODE)/tool/net/.redbean-demo @$(COMPILE) -ADD -T$@ dd if=$@ of=o/$(MODE)/tool/net/.redbean-demo/.ape bs=64 count=11 conv=notrunc 2>/dev/null - @$(COMPILE) -AZIP -T$@ zip -qj $@ o/$(MODE)/tool/net/.redbean-demo/.ape tool/net/.help.txt tool/net/demo/.init.lua tool/net/demo/.reload.lua + @$(COMPILE) -AZIP -T$@ o/$(MODE)/host/third_party/infozip/zip.com -qj $@ o/$(MODE)/tool/net/.redbean-demo/.ape tool/net/.help.txt tool/net/demo/.init.lua tool/net/demo/.reload.lua @$(COMPILE) -ARM -T$@ rm -rf o/$(MODE)/tool/net/.lua @$(COMPILE) -ACP -T$@ cp -R tool/net/demo/.lua o/$(MODE)/tool/net/ - @(cd o/$(MODE)/tool/net && zip -qr redbean-demo.com .lua) - @$(COMPILE) -AZIP -T$@ zip -qj $@ tool/net/demo/hello.lua tool/net/demo/sql.lua - @echo "<-- check out this lua server page" | $(COMPILE) -AZIP -T$@ zip -cqj $@ tool/net/demo/redbean.lua - @$(COMPILE) -AZIP -T$@ zip -qj $@ tool/net/demo/404.html tool/net/favicon.ico tool/net/redbean.png tool/net/demo/redbean-form.lua tool/net/demo/redbean-xhr.lua - @echo Uncompressed for HTTP Range requests | $(COMPILE) -AZIP -T$@ zip -cqj0 $@ tool/net/demo/seekable.txt - @$(COMPILE) -AZIP -T$@ zip -q $@ tool/net/ tool/net/demo/ tool/net/demo/index.html tool/net/demo/redbean.css tool/net/redbean.c net/http/parsehttprequest.c net/http/parseurl.c net/http/encodeurl.c test/net/http/parsehttprequest_test.c test/net/http/parseurl_test.c - @printf "

This is a live instance of redbean: a tiny multiplatform webserver that went viral on hacker news a few months ago.\r\nSince then, we've added Lua dynamic serving, which also goes as fast as 1,000,000 requests per second on a core i9 (rather than a cheap virtual machine like this). the text you're reading now is a PKZIP End Of Central Directory comment.\r\n

redbean aims to be production worthy across six operating systems, using a single executable file (this demo is hosted on FreeBSD 13). redbean has been enhanced to restore the APE header after startup.\r\nIt automatically generates this listing page based on your ZIP contents. If you use redbean as an application server / web development environment,\r\nthen you'll find other new and useful features like function call logging so you can get that sweet sweet microsecond scale latency." | $(COMPILE) -AZIP -T$@ zip -z $@ + @(cd o/$(MODE)/tool/net && ../../host/third_party/infozip/zip.com -qr redbean-demo.com .lua) + @$(COMPILE) -AZIP -T$@ o/$(MODE)/host/third_party/infozip/zip.com -qj $@ tool/net/demo/hello.lua tool/net/demo/sql.lua + @echo "<-- check out this lua server page" | $(COMPILE) -AZIP -T$@ o/$(MODE)/host/third_party/infozip/zip.com -cqj $@ tool/net/demo/redbean.lua + @$(COMPILE) -AZIP -T$@ o/$(MODE)/host/third_party/infozip/zip.com -qj $@ tool/net/demo/404.html tool/net/favicon.ico tool/net/redbean.png tool/net/demo/redbean-form.lua tool/net/demo/redbean-xhr.lua + @echo Uncompressed for HTTP Range requests | $(COMPILE) -AZIP -T$@ o/$(MODE)/host/third_party/infozip/zip.com -cqj0 $@ tool/net/demo/seekable.txt + @$(COMPILE) -AZIP -T$@ o/$(MODE)/host/third_party/infozip/zip.com -q $@ tool/net/ tool/net/demo/ tool/net/demo/index.html tool/net/demo/redbean.css tool/net/redbean.c net/http/parsehttprequest.c net/http/parseurl.c net/http/encodeurl.c test/net/http/parsehttprequest_test.c test/net/http/parseurl_test.c + @printf "

This is a live instance of redbean: a tiny multiplatform webserver that went viral on hacker news a few months ago.\r\nSince then, we've added Lua dynamic serving, which also goes as fast as 1,000,000 requests per second on a core i9 (rather than a cheap virtual machine like this). the text you're reading now is a PKZIP End Of Central Directory comment.\r\n

redbean aims to be production worthy across six operating systems, using a single executable file (this demo is hosted on FreeBSD 13). redbean has been enhanced to restore the APE header after startup.\r\nIt automatically generates this listing page based on your O/$(MODE)/THIRD_PARTY/INFOZIP/ZIP.COM contents. If you use redbean as an application server / web development environment,\r\nthen you'll find other new and useful features like function call logging so you can get that sweet sweet microsecond scale latency." | $(COMPILE) -AZIP -T$@ o/$(MODE)/host/third_party/infozip/zip.com -z $@ @$(COMPILE) -AMKDIR -T$@ mkdir -p o/$(MODE)/tool/net/virtualbean.justine.lol/ @$(COMPILE) -ACP -T$@ cp tool/net/redbean.png o/$(MODE)/tool/net/virtualbean.justine.lol/redbean.png @$(COMPILE) -ACP -T$@ cp tool/net/demo/virtualbean.html o/$(MODE)/tool/net/virtualbean.justine.lol/index.html - @(cd o/$(MODE)/tool/net && zip -q redbean-demo.com virtualbean.justine.lol/) - @(cd o/$(MODE)/tool/net && echo 'Go to http://virtualbean.justine.lol' | zip -cq redbean-demo.com virtualbean.justine.lol/index.html) - @(cd o/$(MODE)/tool/net && zip -q redbean-demo.com virtualbean.justine.lol/redbean.png) + @(cd o/$(MODE)/tool/net && ../../host/third_party/infozip/zip.com -q redbean-demo.com virtualbean.justine.lol/) + @(cd o/$(MODE)/tool/net && echo 'Go to http://virtualbean.justine.lol' | ../../host/third_party/infozip/zip.com -cq redbean-demo.com virtualbean.justine.lol/index.html) + @(cd o/$(MODE)/tool/net && ../../host/third_party/infozip/zip.com -q redbean-demo.com virtualbean.justine.lol/redbean.png) + +# REDBEAN-STATIC.COM +# +# Passing the -DSTATIC causes Lua and SQLite to be removed. This reduces +# the binary size from roughly 1500 kb to 500 kb. It still supports SSL. o/$(MODE)/tool/net/redbean-static.com: \ o/$(MODE)/tool/net/redbean-static.com.dbg \ @@ -149,7 +175,61 @@ o/$(MODE)/tool/net/redbean-static.com.dbg: \ @$(APELINK) o/$(MODE)/tool/net/redbean-static.o: tool/net/redbean.c - @$(COMPILE) -AOBJECTIFY.c $(OBJECTIFY.c) -DSTATIC $(OUTPUT_OPTION) $< + @$(COMPILE) -AOBJECTIFY.c $(OBJECTIFY.c) -DSTATIC -DREDBEAN=\"redbean-static\" $(OUTPUT_OPTION) $< + +# REDBEAN-UNSECURE.COM +# +# Passing the -DUNSECURE will cause the TLS security code to be removed. +# That doesn't mean redbean becomes insecure. It just reduces complexity +# in situations where you'd rather have SSL be handled in an edge proxy. + +o/$(MODE)/tool/net/redbean-unsecure.com: \ + o/$(MODE)/tool/net/redbean-unsecure.com.dbg \ + tool/net/favicon.ico \ + tool/net/redbean.png + @$(COMPILE) -AOBJCOPY -T$@ $(OBJCOPY) -S -O binary $< $@ + @$(COMPILE) -AMKDIR -T$@ mkdir -p o/$(MODE)/tool/net/.redbean-unsecure + @$(COMPILE) -ADD -T$@ dd if=$@ of=o/$(MODE)/tool/net/.redbean-unsecure/.ape bs=64 count=11 conv=notrunc 2>/dev/null + @$(COMPILE) -AZIP -T$@ zip -qj $@ o/$(MODE)/tool/net/.redbean-unsecure/.ape tool/net/favicon.ico tool/net/redbean.png + +o/$(MODE)/tool/net/redbean-unsecure.com.dbg: \ + $(TOOL_NET_DEPS) \ + o/$(MODE)/tool/net/redbean-unsecure.o \ + o/$(MODE)/tool/net/lsqlite3.o \ + o/$(MODE)/tool/net/net.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/tool/net/redbean-unsecure.o: tool/net/redbean.c + @$(COMPILE) -AOBJECTIFY.c $(OBJECTIFY.c) -DUNSECURE -DREDBEAN=\"redbean-unsecure\" $(OUTPUT_OPTION) $< + +# REDBEAN-ORIGINAL.COM +# +# Passing the -DSTATIC and -DUNSECURE flags together w/ MODE=tiny will +# produce 200kb binary that's very similar to redbean as it existed on +# Hacker News the day it went viral. + +o/$(MODE)/tool/net/redbean-original.com: \ + o/$(MODE)/tool/net/redbean-original.com.dbg \ + tool/net/favicon.ico \ + tool/net/redbean.png + @$(COMPILE) -AOBJCOPY -T$@ $(OBJCOPY) -S -O binary $< $@ + @$(COMPILE) -AMKDIR -T$@ mkdir -p o/$(MODE)/tool/net/.redbean-original + @$(COMPILE) -ADD -T$@ dd if=$@ of=o/$(MODE)/tool/net/.redbean-original/.ape bs=64 count=11 conv=notrunc 2>/dev/null + @$(COMPILE) -AZIP -T$@ zip -qj $@ o/$(MODE)/tool/net/.redbean-original/.ape tool/net/favicon.ico tool/net/redbean.png + +o/$(MODE)/tool/net/redbean-original.com.dbg: \ + $(TOOL_NET_DEPS) \ + o/$(MODE)/tool/net/redbean-original.o \ + o/$(MODE)/tool/net/lsqlite3.o \ + o/$(MODE)/tool/net/net.pkg \ + $(CRT) \ + $(APE) + @$(APELINK) + +o/$(MODE)/tool/net/redbean-original.o: tool/net/redbean.c + @$(COMPILE) -AOBJECTIFY.c $(OBJECTIFY.c) -DSTATIC -DUNSECURE -DREDBEAN=\"redbean-original\" $(OUTPUT_OPTION) $< .PHONY: o/$(MODE)/tool/net o/$(MODE)/tool/net: \ diff --git a/tool/net/redbean.c b/tool/net/redbean.c index 159f58c10..d19b7c6bc 100644 --- a/tool/net/redbean.c +++ b/tool/net/redbean.c @@ -22,24 +22,29 @@ #include "libc/bits/safemacros.internal.h" #include "libc/calls/calls.h" #include "libc/calls/sigbits.h" +#include "libc/calls/struct/dirent.h" #include "libc/calls/struct/flock.h" -#include "libc/calls/struct/itimerval.h" #include "libc/calls/struct/rusage.h" #include "libc/calls/struct/sigaction.h" #include "libc/calls/struct/stat.h" +#include "libc/dns/dns.h" +#include "libc/dns/hoststxt.h" #include "libc/dos.h" #include "libc/errno.h" #include "libc/fmt/conv.h" #include "libc/fmt/itoa.h" #include "libc/log/check.h" #include "libc/log/log.h" +#include "libc/macros.internal.h" #include "libc/math.h" #include "libc/mem/alloca.h" #include "libc/mem/fmt.h" +#include "libc/mem/mem.h" #include "libc/nexgen32e/bsf.h" #include "libc/nexgen32e/bsr.h" #include "libc/nexgen32e/crc32.h" #include "libc/nt/enum/fileflagandattributes.h" +#include "libc/rand/rand.h" #include "libc/runtime/clktck.h" #include "libc/runtime/directmap.internal.h" #include "libc/runtime/gc.internal.h" @@ -49,21 +54,23 @@ #include "libc/str/str.h" #include "libc/sysv/consts/af.h" #include "libc/sysv/consts/auxv.h" +#include "libc/sysv/consts/dt.h" #include "libc/sysv/consts/ex.h" #include "libc/sysv/consts/exit.h" #include "libc/sysv/consts/f.h" #include "libc/sysv/consts/inaddr.h" #include "libc/sysv/consts/ipproto.h" -#include "libc/sysv/consts/itimer.h" #include "libc/sysv/consts/lock.h" #include "libc/sysv/consts/madv.h" #include "libc/sysv/consts/map.h" #include "libc/sysv/consts/msync.h" #include "libc/sysv/consts/o.h" +#include "libc/sysv/consts/poll.h" #include "libc/sysv/consts/prot.h" #include "libc/sysv/consts/rusage.h" #include "libc/sysv/consts/s.h" #include "libc/sysv/consts/shut.h" +#include "libc/sysv/consts/sig.h" #include "libc/sysv/consts/so.h" #include "libc/sysv/consts/sock.h" #include "libc/sysv/consts/sol.h" @@ -81,26 +88,74 @@ #include "third_party/lua/ltests.h" #include "third_party/lua/lua.h" #include "third_party/lua/lualib.h" +#include "third_party/mbedtls/asn1.h" +#include "third_party/mbedtls/asn1write.h" +#include "third_party/mbedtls/config.h" +#include "third_party/mbedtls/ctr_drbg.h" +#include "third_party/mbedtls/debug.h" +#include "third_party/mbedtls/ecp.h" +#include "third_party/mbedtls/entropy.h" +#include "third_party/mbedtls/entropy_poll.h" +#include "third_party/mbedtls/oid.h" +#include "third_party/mbedtls/pk.h" +#include "third_party/mbedtls/rsa.h" +#include "third_party/mbedtls/san.h" +#include "third_party/mbedtls/ssl.h" +#include "third_party/mbedtls/x509.h" +#include "third_party/mbedtls/x509_crt.h" #include "third_party/regex/regex.h" #include "third_party/zlib/zlib.h" -#define HASH_LOAD_FACTOR /* 1. / */ 4 -#define DEFAULT_PORT 8080 +/** + * @fileoverview redbean - single-file distributable web server + * + * redbean makes it possible to share web applications that run offline + * as a single-file αcτµαlly pδrταblε εxεcµταblε zip archive which + * contains your assets. All you need to do is download the redbean.com + * program below, change the filename to .zip, add your content in a zip + * editing tool, and then change the extension back to .com. + * + * redbean can serve 1 million+ gzip encoded responses per second on a + * cheap personal computer. That performance is thanks to zip and gzip + * using the same compression format, which enables kernelspace copies. + * Another reason redbean goes fast is that it's a tiny static binary, + * which makes fork memory paging nearly free. + * + * redbean is also easy to modify to suit your own needs. The program + * itself is written as a single .c file. It embeds the Lua programming + * language and SQLite which let you write dynamic pages. + */ -#define read(F, P, N) readv(F, &(struct iovec){P, N}, 1) -#define LockInc(P) asm volatile("lock incq\t%0" : "=m"(*(P))) -#define AppendCrlf(P) mempcpy(P, "\r\n", 2) -#define HasHeader(H) (!!msg.headers[H].a) -#define HeaderData(H) (inbuf.p + msg.headers[H].a) -#define HeaderLength(H) (msg.headers[H].b - msg.headers[H].a) +#ifndef REDBEAN +#define REDBEAN "redbean" +#endif + +#ifndef UNSECURE +STATIC_YOINK("usr/share/ssl/root/amazon.pem"); +STATIC_YOINK("usr/share/ssl/root/certum.pem"); +STATIC_YOINK("usr/share/ssl/root/comodo.pem"); +STATIC_YOINK("usr/share/ssl/root/digicert.pem"); +STATIC_YOINK("usr/share/ssl/root/dst.pem"); +STATIC_YOINK("usr/share/ssl/root/geotrust.pem"); +STATIC_YOINK("usr/share/ssl/root/globalsign.pem"); +STATIC_YOINK("usr/share/ssl/root/godaddy.pem"); +STATIC_YOINK("usr/share/ssl/root/google.pem"); +STATIC_YOINK("usr/share/ssl/root/quovadis.pem"); +STATIC_YOINK("usr/share/ssl/root/redbean.pem"); +STATIC_YOINK("usr/share/ssl/root/starfield.pem"); +STATIC_YOINK("usr/share/ssl/root/verisign.pem"); +#endif + +#define HASH_LOAD_FACTOR /* 1. / */ 4 +#define read(F, P, N) readv(F, &(struct iovec){P, N}, 1) +#define LockInc(P) asm volatile("lock incq\t%0" : "=m"(*(P))) +#define AppendCrlf(P) mempcpy(P, "\r\n", 2) +#define HasHeader(H) (!!msg.headers[H].a) +#define HeaderData(H) (inbuf.p + msg.headers[H].a) +#define HeaderLength(H) (msg.headers[H].b - msg.headers[H].a) #define HeaderEqualCase(H, S) \ SlicesEqualCase(S, strlen(S), HeaderData(H), HeaderLength(H)) -static const struct itimerval kHeartbeat = { - {0, 500000}, - {0, 500000}, -}; - static const uint8_t kGzipHeader[] = { 0x1F, // MAGNUM 0x8B, // MAGNUM @@ -221,6 +276,24 @@ struct Strings { } * p; }; +static struct Ips { + size_t n; + uint32_t *p; +} ips; + +static struct Ports { + size_t n; + uint16_t *p; +} ports; + +static struct Servers { + size_t n; + struct Server { + int fd; + struct sockaddr_in addr; + } * p; +} servers; + static struct Freelist { size_t n, c; void **p; @@ -235,6 +308,14 @@ static struct Unmaplist { } * p; } unmaplist; +static struct Certs { + size_t n; + struct Cert { + mbedtls_x509_crt *cert; + mbedtls_pk_context *key; + } * p; +} certs; + static struct Redirects { size_t n; struct Redirect { @@ -281,6 +362,18 @@ static const char kCounterNames[] = #undef C ; +static mbedtls_entropy_context ent = { + .source_count = 1, + .source = {{.f_source = mbedtls_hardware_poll, + .threshold = MBEDTLS_ENTROPY_MIN_HARDWARE, + .strong = MBEDTLS_ENTROPY_SOURCE_STRONG}}, +}; + +typedef ssize_t (*reader_f)(int, void *, size_t); +typedef ssize_t (*writer_f)(int, struct iovec *, int); + +static bool usessl; +static bool suiteb; static bool killed; static bool istext; static bool zombied; @@ -288,9 +381,7 @@ static bool gzipped; static bool branded; static bool funtrace; static bool meltdown; -static bool heartless; static bool printport; -static bool heartbeat; static bool daemonize; static bool logrusage; static bool logbodies; @@ -302,14 +393,16 @@ static bool logmessages; static bool checkedmethod; static bool connectionclose; static bool keyboardinterrupt; +static bool listeningonport443; static bool encouragekeepalive; static bool loggednetworkorigin; static bool hasluaglobalhandler; +static bool upgradeinsecurerequests; +static bool dontupgradeinsecurerequests; static int zfd; static int frags; static int gmtoff; -static int server; static int client; static int daemonuid; static int daemongid; @@ -327,29 +420,38 @@ static uint8_t *zcdir; static size_t hdrsize; static size_t msgsize; static size_t amtread; +static reader_f reader; +static writer_f writer; static char *extrahdrs; static char *luaheaderp; static const char *zpath; static const char *brand; +static char gzip_footer[8]; static const char *pidpath; static const char *logpath; +static const char *keypath; +static const char *certpath; +static const char *launchbrowser; +static struct pollfd *polls; static struct Strings loops; static size_t contentlength; static int64_t cacheseconds; -static uint8_t gzip_footer[8]; static const char *serverheader; static struct Strings stagedirs; static struct Strings hidepaths; static struct Buffer inbuf; +static struct Buffer oldin; static struct Buffer hdrbuf; static struct Buffer outbuf; -static struct linger linger; static struct timeval timeout; static struct Buffer effectivepath; +static mbedtls_ssl_config conf; +static mbedtls_ssl_context ssl; +static mbedtls_ctr_drbg_context rng; static struct Url url; -static struct HttpRequest msg; +static struct HttpMessage msg; static char slashpath[PATH_MAX]; static struct stat zst; @@ -357,9 +459,10 @@ static long double startread; static long double lastrefresh; static long double startserver; static long double startrequest; +static long double lastheartbeat; static long double startconnection; -static struct sockaddr_in serveraddr; static struct sockaddr_in clientaddr; +static struct sockaddr_in *serveraddr; static char *Route(const char *, size_t, const char *, size_t); static char *RouteHost(const char *, size_t, const char *, size_t); @@ -372,10 +475,6 @@ static void OnChld(void) { zombied = true; } -static void OnAlrm(void) { - heartbeat = true; -} - static void OnUsr1(void) { invalidated = true; } @@ -546,6 +645,246 @@ static long FindRedirect(const char *s, size_t n) { return -1; } +static wontreturn void CrashCertificate(const char *name, const char *path) { + fprintf(stderr, "error: failed to load %s: %s\n", name, path); + exit(1); +} + +static void LogCertificate(const char *msg, mbedtls_x509_crt *cert) { + char *s; + size_t n; + if (LOGGABLE(kLogDebug)) { + if ((s = gc(malloc((n = 15000))))) { + if (mbedtls_x509_crt_info(s, n, " ", cert) > 0) { + DEBUGF("%s\n%s", msg, chomp(s)); + } + } + } +} + +static char *FormatX509Name(mbedtls_x509_name *name) { + char *s = calloc(1, 1000); + CHECK_GT(mbedtls_x509_dn_gets(s, 1000, name), 0); + return s; +} + +static bool IsSelfSigned(mbedtls_x509_crt *cert) { + return !mbedtls_x509_name_cmp(&cert->issuer, &cert->subject); +} + +static mbedtls_x509_crt *GetTrustedCertificate(mbedtls_x509_name *name) { + size_t i; + for (i = 0; i < certs.n; ++i) { + if (certs.p[i].cert && + !mbedtls_x509_name_cmp(name, &certs.p[i].cert->subject)) { + return certs.p[i].cert; + } + } + return 0; +} + +static bool VerifyCertificate(mbedtls_x509_crt *cert, int depth) { + size_t i; + mbedtls_x509_crt *next; + if (depth < MBEDTLS_X509_MAX_INTERMEDIATE_CA) { + if ((next = cert->next)) { + if (!VerifyCertificate(next, depth + 1)) return false; + } else { + if (!(next = GetTrustedCertificate(&cert->issuer))) { + if (depth) { + WARNF("chain root %`'s isn't in your zip:usr/share/ssl/root folder", + gc(FormatX509Name(&cert->issuer))); + } + return false; + } + if (!IsSelfSigned(cert) && !VerifyCertificate(next, depth + 1)) { + return false; + } + } + if (!mbedtls_x509_crt_check_parent(cert, next, 1) && + !mbedtls_x509_crt_check_signature(cert, next, 0) && + !mbedtls_x509_time_is_past(&cert->valid_to) && + !mbedtls_x509_time_is_future(&cert->valid_from)) { + return true; + } else { + VERBOSEF("verification failed %`'s -> %`'s", + gc(FormatX509Name(&cert->subject)), + gc(FormatX509Name(&next->subject))); + return false; + } + } else { + VERBOSEF("verification depth exceeded for %`'s", + gc(FormatX509Name(&cert->subject))); + return false; + } +} + +static void UseCertificate(mbedtls_x509_crt *cert, mbedtls_pk_context *key) { + LogCertificate("using certificate", cert); + if (VerifyCertificate(cert, 0)) { + if (!dontupgradeinsecurerequests) { + DEBUGF("enabling conditional https redirects"); + upgradeinsecurerequests = true; + } + } + CHECK_EQ(0, mbedtls_ssl_conf_own_cert(&conf, cert, key)); +} + +static bool ChainCertificate(mbedtls_x509_crt *cert, mbedtls_x509_crt *parent) { + if (!mbedtls_x509_crt_check_signature(cert, parent, 0)) { + DEBUGF("chaining %`'s to %`'s", gc(FormatX509Name(&cert->subject)), + gc(FormatX509Name(&parent->subject))); + cert->next = parent; + return true; + } else { + WARNF("signature check failed for %`'s -> %`'s", + gc(FormatX509Name(&cert->subject)), + gc(FormatX509Name(&parent->subject))); + return false; + } +} + +static void InternCertificate(mbedtls_x509_crt *cert, + mbedtls_x509_crt *parent) { + int r; + size_t i; + if (cert->next) InternCertificate(cert->next, cert); + if (parent) { + if (mbedtls_x509_crt_check_parent(cert, parent, 1)) { + parent->next = 0; /* unchain ca root bundles */ + } else if ((r = mbedtls_x509_crt_check_signature(cert, parent, 0))) { + WARNF("invalid signature for %`'s -> %`'s (-0x%04x)", + gc(FormatX509Name(&cert->subject)), + gc(FormatX509Name(&parent->subject)), -r); + } + } + if (mbedtls_x509_time_is_past(&cert->valid_to)) { + WARNF("certificate is expired", gc(FormatX509Name(&cert->subject))); + } else if (mbedtls_x509_time_is_future(&cert->valid_from)) { + WARNF("certificate is from the future", gc(FormatX509Name(&cert->subject))); + } + for (i = 0; i < certs.n; ++i) { + if (!certs.p[i].cert) continue; + if (!mbedtls_x509_name_cmp(&cert->subject, &certs.p[i].cert->subject)) { + WARNF("certificate subject name %`'s is already loaded", + gc(FormatX509Name(&cert->subject))); + return; + } + } + for (i = 0; i < certs.n; ++i) { + if (!certs.p[i].cert && certs.p[i].key && + !mbedtls_pk_check_pair(&cert->pk, certs.p[i].key)) { + certs.p[i].cert = cert; + return; + } + } + LogCertificate("loaded certificate", cert); + if (!cert->next && !IsSelfSigned(cert)) { + for (i = 0; i < certs.n; ++i) { + if (!certs.p[i].cert) continue; + if (!mbedtls_x509_crt_check_parent(cert, certs.p[i].cert, 1)) { + if (ChainCertificate(cert, certs.p[i].cert)) break; + } + } + } + for (i = 0; i < certs.n; ++i) { + if (!certs.p[i].cert) continue; + if (certs.p[i].cert->next) continue; + if (!mbedtls_x509_crt_check_parent(certs.p[i].cert, cert, 1)) { + ChainCertificate(certs.p[i].cert, cert); + } + } + certs.p = realloc(certs.p, ++certs.n * sizeof(*certs.p)); + certs.p[certs.n - 1].cert = cert; + certs.p[certs.n - 1].key = 0; +} + +static void ProgramCertificate(const char *p, size_t n) { + int rc; + unsigned char *waqapi; + mbedtls_x509_crt *cert; + waqapi = malloc(n + 1); + memcpy(waqapi, p, n); + waqapi[n] = 0; + cert = calloc(1, sizeof(mbedtls_x509_crt)); + rc = mbedtls_x509_crt_parse(cert, waqapi, n + 1); + mbedtls_platform_zeroize(waqapi, n); + free(waqapi); + if (rc < 0) { + WARNF("failed to load certificate (grep -0x%04x)\n", rc); + return; + } else if (rc > 0) { + VERBOSEF("certificate bundle partially loaded"); + } + InternCertificate(cert, 0); +} + +static void ProgramPrivateKey(const char *p, size_t n) { + int rc; + size_t i; + unsigned char *waqapi; + mbedtls_pk_context *key; + waqapi = malloc(n + 1); + memcpy(waqapi, p, n); + waqapi[n] = 0; + key = calloc(1, sizeof(mbedtls_pk_context)); + rc = mbedtls_pk_parse_key(key, waqapi, n + 1, 0, 0); + mbedtls_platform_zeroize(waqapi, n); + free(waqapi); + if (rc != 0) { + fprintf(stderr, "error: load key (grep -0x%04x)\n", -rc); + exit(1); + } + for (i = 0; i < certs.n; ++i) { + if (certs.p[i].cert && !certs.p[i].key && + !mbedtls_pk_check_pair(&certs.p[i].cert->pk, key)) { + certs.p[i].key = key; + return; + } + } + VERBOSEF("loaded private key"); + certs.p = realloc(certs.p, ++certs.n * sizeof(*certs.p)); + certs.p[certs.n - 1].cert = 0; + certs.p[certs.n - 1].key = key; +} + +static void ProgramFile(const char *path, void program(const char *, size_t)) { + char *p; + size_t n; + DEBUGF("ProgramFile(%`'s)", path); + if ((p = xslurp(path, &n))) { + program(p, n); + mbedtls_platform_zeroize(p, n); + free(p); + } else { + fprintf(stderr, "error: failed to read file: %s\n", path); + exit(1); + } +} + +static void ProgramPort(long port) { + if (!(0 <= port && port <= 65535)) { + fprintf(stderr, "error: bad port: %d\n", port); + exit(1); + } + if (port == 443) listeningonport443 = true; + ports.p = realloc(ports.p, ++ports.n * sizeof(*ports.p)); + ports.p[ports.n - 1] = port; +} + +static void ProgramAddr(const char *addr) { + ssize_t rc; + struct addrinfo *ai = NULL; + struct addrinfo hint = {AI_NUMERICSERV, AF_INET, SOCK_STREAM, IPPROTO_TCP}; + if ((rc = getaddrinfo(addr, "0", &hint, &ai)) != EAI_SUCCESS) { + fprintf(stderr, "error: bad addr: %s (EAI_%s)\n", addr, gai_strerror(rc)); + exit(1); + } + ips.p = realloc(ips.p, ++ips.n * sizeof(*ips.p)); + ips.p[ips.n - 1] = ntohl(ai->ai_addr4->sin_addr.s_addr); + freeaddrinfo(ai); +} + static void ProgramRedirect(int code, const char *sp, size_t sn, const char *dp, size_t dn) { long i, j; @@ -605,8 +944,8 @@ static void DescribeAddress(char buf[32], uint32_t addr, uint16_t port) { } static inline void GetServerAddr(uint32_t *ip, uint16_t *port) { - *ip = ntohl(serveraddr.sin_addr.s_addr); - if (port) *port = ntohs(serveraddr.sin_port); + *ip = ntohl(serveraddr->sin_addr.s_addr); + if (port) *port = ntohs(serveraddr->sin_port); } static inline void GetClientAddr(uint32_t *ip, uint16_t *port) { @@ -654,11 +993,6 @@ static void ProgramBrand(const char *s) { free(p); } -static void ProgramLinger(long sec) { - linger.l_onoff = sec > 0; - linger.l_linger = MAX(0, sec); -} - static void ProgramTimeout(long ms) { ldiv_t d; if (ms <= 30) { @@ -674,30 +1008,19 @@ static void ProgramCache(long x) { cacheseconds = x; } -static void ProgramPort(long x) { - serveraddr.sin_port = htons(x); -} - static void SetDefaults(void) { -#ifdef STATIC - ProgramBrand("redbean-static/1.3"); -#else - ProgramBrand("redbean/1.3"); -#endif + ProgramBrand(REDBEAN "/1.3"); __log_level = kLogInfo; maxpayloadsize = 64 * 1024; ProgramCache(-1); - ProgramTimeout(30 * 1000); - ProgramPort(DEFAULT_PORT); - serveraddr.sin_family = AF_INET; - serveraddr.sin_addr.s_addr = INADDR_ANY; + ProgramTimeout(60 * 1000); if (IsWindows()) uniprocess = true; } static void AddString(struct Strings *l, const char *s, size_t n) { if (++l->n > l->c) { l->c = l->n + (l->n >> 1); - l->p = xrealloc(l->p, l->c * sizeof(*l->p)); + l->p = realloc(l->p, l->c * sizeof(*l->p)); } l->p[l->n - 1].s = s; l->p[l->n - 1].n = n; @@ -751,11 +1074,21 @@ static void ProgramHeader(const char *s) { } } +static bool IsServerFd(int fd) { + size_t i; + for (i = 0; i < servers.n; ++i) { + if (servers.p[i].fd == fd) { + return true; + } + } + return false; +} + static void Daemonize(void) { char ibuf[21]; int i, fd, pid; - for (i = 0; i < 128; ++i) { - if (i != server) { + for (i = 0; i < 256; ++i) { + if (!IsServerFd(i)) { close(i); } } @@ -914,7 +1247,7 @@ static void WaitAll(void) { } continue; } - FATALF("%s wait error %s", DescribeServer(), strerror(errno)); + FATALF("wait error %s", strerror(errno)); } } } @@ -933,7 +1266,7 @@ static void ReapZombies(void) { } else { if (errno == ECHILD) break; if (errno == EINTR) continue; - FATALF("%s wait error %s", DescribeServer(), strerror(errno)); + FATALF("wait error %s", strerror(errno)); } } while (!terminated); } @@ -967,6 +1300,430 @@ static ssize_t WritevAll(int fd, struct iovec *iov, int iovlen) { return 0; } +static int TlsRecv(void *ctx, unsigned char *buf, size_t len, uint32_t tmo) { + int rc; + if (oldin.n) { + rc = MIN(oldin.n, len); + memcpy(buf, oldin.p, rc); + oldin.p += rc; + oldin.n -= rc; + return rc; + } + while ((rc = read(client, buf, len)) == -1) { + if (errno == EINTR) { + return MBEDTLS_ERR_SSL_WANT_READ; + } else if (errno == EAGAIN) { + return MBEDTLS_ERR_SSL_TIMEOUT; + } else if (errno == EPIPE || errno == ECONNRESET || errno == ENETRESET) { + return MBEDTLS_ERR_NET_CONN_RESET; + } else { + WARNF("%s tls read() error %s", DescribeClient(), strerror(errno)); + return MBEDTLS_ERR_NET_RECV_FAILED; + } + } + return rc; +} + +static void TlsDebug(void *ctx, int level, const char *file, int line, + const char *message) { + flogf(level, file, line, 0, "TLS %s", message); +} + +static int TlsSend(void *ctx, const unsigned char *buf, size_t len) { + int rc; + while ((rc = write(client, buf, len)) == -1) { + if (errno == EINTR) { + LockInc(&shared->c.writeinterruputs); + if (killed || (meltdown && nowl() - startread > 2)) { + return MBEDTLS_ERR_NET_CONN_RESET; + } + } else if (errno == EAGAIN) { + return MBEDTLS_ERR_SSL_TIMEOUT; + } else if (errno == EPIPE || errno == ECONNRESET || errno == ENETRESET) { + return MBEDTLS_ERR_NET_CONN_RESET; + } else { + WARNF("%s TlsSend error %s", DescribeClient(), strerror(errno)); + return MBEDTLS_ERR_NET_SEND_FAILED; + } + } + return rc; +} + +static ssize_t SslRead(int fd, void *buf, size_t size) { + int rc; + rc = mbedtls_ssl_read(&ssl, buf, size); + if (!rc) { + errno = ECONNRESET; + rc = -1; + } else if (rc < 0) { + if (rc == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) { + rc = 0; + } else if (rc == MBEDTLS_ERR_NET_CONN_RESET || + rc == MBEDTLS_ERR_SSL_TIMEOUT) { + errno = ECONNRESET; + rc = -1; + } else if (rc == MBEDTLS_ERR_SSL_WANT_READ) { + errno = EINTR; + rc = -1; + } else { + WARNF("%s SslRead error -0x%04x", DescribeClient(), -rc); + errno = EIO; + rc = -1; + } + } + return rc; +} + +static ssize_t SslWrite(int fd, struct iovec *iov, int iovlen) { + int i; + size_t n; + ssize_t rc; + const unsigned char *p; + for (i = 0; i < iovlen; ++i) { + p = iov[i].iov_base; + n = iov[i].iov_len; + while (n) { + if ((rc = mbedtls_ssl_write(&ssl, p, n)) > 0) { + p += rc; + n -= rc; + } else { + WARNF("%s SslWrite error -0x%04x", DescribeClient(), -rc); + errno = EIO; + return -1; + } + } + } + return 0; +} + +static bool TlsSetup(void) { + int r; + oldin.p = inbuf.p; + oldin.n = amtread; + inbuf.p += amtread; + inbuf.n -= amtread; + inbuf.c = amtread; + amtread = 0; + mbedtls_ssl_setup(&ssl, &conf); + mbedtls_ssl_set_bio(&ssl, &client, TlsSend, 0, TlsRecv); + for (;;) { + if (!(r = mbedtls_ssl_handshake(&ssl))) { + LockInc(&shared->c.sslhandshakes); + usessl = true; + reader = SslRead; + writer = SslWrite; + encouragekeepalive = true; + VERBOSEF("%s %s %s", DescribeClient(), mbedtls_ssl_get_version(&ssl), + mbedtls_ssl_get_ciphersuite(&ssl)); + return true; + } else if (r == MBEDTLS_ERR_SSL_WANT_READ) { + LockInc(&shared->c.handshakeinterrupts); + if (terminated || killed || (meltdown && nowl() - startread > 2)) { + return false; + } + } else { + LockInc(&shared->c.sslhandshakefails); + switch (r) { + case MBEDTLS_ERR_SSL_CONN_EOF: + DEBUGF("%s SSL handshake EOF", DescribeClient()); + return false; + case MBEDTLS_ERR_NET_CONN_RESET: + DEBUGF("%s SSL handshake reset", DescribeClient()); + return false; + case MBEDTLS_ERR_SSL_TIMEOUT: + LockInc(&shared->c.ssltimeouts); + DEBUGF("%s SSL handshake timeout", DescribeClient()); + return false; + case MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN: + LockInc(&shared->c.sslnociphers); + WARNF("%s SSL no ciphersuites", DescribeClient()); + return false; + case MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE: + LockInc(&shared->c.sslcantciphers); + WARNF("%s SSL can't ciphersuite", DescribeClient()); + return false; + case MBEDTLS_ERR_SSL_INVALID_MAC: + LockInc(&shared->c.sslshakemacs); + WARNF("%s SSL handshake failed bad mac", DescribeClient()); + return false; + case MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE: + switch (ssl.fatal_alert) { + case MBEDTLS_SSL_ALERT_MSG_CERT_UNKNOWN: + LockInc(&shared->c.sslunknowncert); + DEBUGF("%s SSL shakealert unknown cert", DescribeClient()); + return false; + case MBEDTLS_SSL_ALERT_MSG_UNKNOWN_CA: + LockInc(&shared->c.sslunknownca); + DEBUGF("%s SSL shakealert unknown ca", DescribeClient()); + return false; + default: + WARNF("%s SSL shakealert %hhu", DescribeClient(), + ssl.fatal_alert); + return false; + } + default: + WARNF("%s SSL handshake failed -0x%04x", DescribeClient(), -r); + return false; + } + } + } +} + +static void InitializeRng(mbedtls_ctr_drbg_context *r) { + volatile unsigned char b[64]; + mbedtls_ctr_drbg_init(r); + CHECK(getrandom(b, 64, 0) == 64); + CHECK(!mbedtls_ctr_drbg_seed(r, mbedtls_entropy_func, &ent, b, 64)); + mbedtls_platform_zeroize(b, 64); +} + +static void GenerateSerial(mbedtls_x509write_cert *wcert, + mbedtls_ctr_drbg_context *kr) { + mbedtls_mpi x; + mbedtls_mpi_init(&x); + mbedtls_mpi_fill_random(&x, 128 / 8, mbedtls_ctr_drbg_random, kr); + mbedtls_x509write_crt_set_serial(wcert, &x); + mbedtls_mpi_free(&x); +} + +static void ChooseCertificateLifetime(char notbefore[16], char notafter[16]) { + struct tm tm; + int64_t past, now, future, lifetime, tolerance; + tolerance = 60 * 60 * 24; + lifetime = 60 * 60 * 24 * 365; + now = nowl(); + past = now - tolerance; + future = now + tolerance + lifetime; + strftime(notbefore, 16, "%Y%m%d%H%M%S", gmtime_r(&past, &tm)); + strftime(notafter, 16, "%Y%m%d%H%M%S", gmtime_r(&future, &tm)); +} + +static void ConfigureCertificate(mbedtls_x509write_cert *cw, struct Cert *ca, + int usage, int type) { + int r; + const char *s; + bool isduplicate; + size_t i, j, k, nsan; + struct HostsTxt *htxt; + struct mbedtls_san *san; + const mbedtls_x509_name *xname; + char *name, *subject, *issuer, notbefore[16], notafter[16], hbuf[256]; + san = 0; + nsan = 0; + name = 0; + htxt = GetHostsTxt(); + strcpy(hbuf, "localhost"); + gethostname(hbuf, sizeof(hbuf)); + for (i = 0; i < htxt->entries.i; ++i) { + for (j = 0; j < ips.n; ++j) { + if (ips.p[j] == READ32BE(htxt->entries.p[i].ip)) { + isduplicate = false; + s = htxt->strings.p + htxt->entries.p[i].name; + if (!name) name = s; + for (k = 0; k < nsan; ++k) { + if (san[k].tag == MBEDTLS_X509_SAN_DNS_NAME && + !strcasecmp(s, san[k].val)) { + isduplicate = true; + break; + } + } + if (!isduplicate) { + san = realloc(san, ++nsan * sizeof(*san)); + san[nsan - 1].tag = MBEDTLS_X509_SAN_DNS_NAME; + san[nsan - 1].val = s; + } + } + } + } + for (i = 0; i < ips.n; ++i) { + san = realloc(san, ++nsan * sizeof(*san)); + san[nsan - 1].tag = MBEDTLS_X509_SAN_IP_ADDRESS; + san[nsan - 1].ip4 = ips.p[i]; + } + ChooseCertificateLifetime(notbefore, notafter); + subject = xasprintf("CN=%s", name ? name : hbuf); + if (ca) { + issuer = calloc(1, 1000); + CHECK_GT(mbedtls_x509_dn_gets(issuer, 1000, &ca->cert->subject), 0); + } else { + issuer = strdup(subject); + } + if ((r = mbedtls_x509write_crt_set_subject_alternative_name(cw, san, nsan)) || + (r = mbedtls_x509write_crt_set_validity(cw, notbefore, notafter)) || + (r = mbedtls_x509write_crt_set_basic_constraints(cw, false, -1)) || + (r = mbedtls_x509write_crt_set_subject_key_identifier(cw)) || + (r = mbedtls_x509write_crt_set_authority_key_identifier(cw)) || + (r = mbedtls_x509write_crt_set_key_usage(cw, usage)) || + (r = mbedtls_x509write_crt_set_ext_key_usage(cw, type)) || + (r = mbedtls_x509write_crt_set_subject_name(cw, subject)) || + (r = mbedtls_x509write_crt_set_issuer_name(cw, issuer))) { + fprintf(stderr, "error: configure certificate (grep -0x%04x)\n", -r); + exit(1); + } + free(subject); + free(issuer); + free(san); +} + +static struct Cert *GetKeySigningKey(void) { + size_t i; + for (i = 0; i < certs.n; ++i) { + if (!certs.p[i].key) continue; + if (!certs.p[i].cert) continue; + if (!certs.p[i].cert->ca_istrue) continue; + if (mbedtls_x509_crt_check_key_usage(certs.p[i].cert, + MBEDTLS_X509_KU_KEY_CERT_SIGN)) { + continue; + } + return certs.p + i; + } + return NULL; +} + +static struct Cert *GenerateEcpCertificate(struct Cert *ca) { + int i, n; + unsigned char *p; + mbedtls_x509_crt *cert; + mbedtls_pk_context *key; + mbedtls_ctr_drbg_context kr; + mbedtls_x509write_cert wcert; + cert = calloc(1, sizeof(mbedtls_x509_crt)); + key = calloc(1, sizeof(mbedtls_pk_context)); + mbedtls_x509write_crt_init(&wcert); + mbedtls_x509write_crt_set_issuer_key(&wcert, ca ? ca->key : key); + mbedtls_x509write_crt_set_subject_key(&wcert, key); + mbedtls_x509write_crt_set_md_alg( + &wcert, suiteb ? MBEDTLS_MD_SHA384 : MBEDTLS_MD_SHA256); + mbedtls_x509write_crt_set_version(&wcert, MBEDTLS_X509_CRT_VERSION_3); + CHECK_EQ(0, + mbedtls_pk_setup(key, mbedtls_pk_info_from_type(MBEDTLS_PK_ECKEY))); + InitializeRng(&kr); + CHECK_EQ(0, mbedtls_ecp_gen_key( + suiteb ? MBEDTLS_ECP_DP_SECP384R1 : MBEDTLS_ECP_DP_SECP256R1, + mbedtls_pk_ec(*key), mbedtls_ctr_drbg_random, &kr)); + GenerateSerial(&wcert, &kr); + ConfigureCertificate(&wcert, ca, MBEDTLS_X509_KU_DIGITAL_SIGNATURE, + MBEDTLS_X509_NS_CERT_TYPE_SSL_SERVER); + p = malloc((n = FRAMESIZE)); + i = mbedtls_x509write_crt_der(&wcert, p, n, mbedtls_ctr_drbg_random, &kr); + if (i < 0) { + fprintf(stderr, "error: write ec key (grep -0x%04x)\n", -i); + exit(1); + } + CHECK_EQ(0, mbedtls_x509_crt_parse_der(cert, p + n - i, i)); + if (ca) cert->next = ca->cert; + mbedtls_x509write_crt_free(&wcert); + mbedtls_ctr_drbg_free(&kr); + free(p); + CHECK_EQ(0, mbedtls_pk_check_pair(&cert->pk, key)); + UseCertificate(cert, key); + certs.p = realloc(certs.p, ++certs.n * sizeof(*certs.p)); + certs.p[certs.n - 1].cert = cert; + certs.p[certs.n - 1].key = key; + return certs.p + certs.n - 1; +} + +static struct Cert *GenerateRsaCertificate(struct Cert *ca) { + int i, n, rc; + unsigned char *p; + mbedtls_x509_crt *cert; + mbedtls_pk_context *key; + mbedtls_ctr_drbg_context kr; + mbedtls_x509write_cert wcert; + cert = calloc(1, sizeof(mbedtls_x509_crt)); + key = calloc(1, sizeof(mbedtls_pk_context)); + mbedtls_x509write_crt_init(&wcert); + mbedtls_x509write_crt_set_issuer_key(&wcert, ca ? ca->key : key); + mbedtls_x509write_crt_set_subject_key(&wcert, key); + mbedtls_x509write_crt_set_md_alg( + &wcert, suiteb ? MBEDTLS_MD_SHA384 : MBEDTLS_MD_SHA256); + mbedtls_x509write_crt_set_version(&wcert, MBEDTLS_X509_CRT_VERSION_3); + CHECK_EQ(0, mbedtls_pk_setup(key, mbedtls_pk_info_from_type(MBEDTLS_PK_RSA))); + InitializeRng(&kr); + CHECK_EQ(0, mbedtls_rsa_gen_key(mbedtls_pk_rsa(*key), mbedtls_ctr_drbg_random, + &kr, suiteb ? 4096 : 2048, 65537)); + GenerateSerial(&wcert, &kr); + ConfigureCertificate( + &wcert, ca, + MBEDTLS_X509_KU_DIGITAL_SIGNATURE | MBEDTLS_X509_KU_KEY_ENCIPHERMENT, + MBEDTLS_X509_NS_CERT_TYPE_SSL_SERVER | + MBEDTLS_X509_NS_CERT_TYPE_SSL_CLIENT); + p = malloc((n = FRAMESIZE)); + i = mbedtls_x509write_crt_der(&wcert, p, n, mbedtls_ctr_drbg_random, &kr); + if (i < 0) { + fprintf(stderr, "error: write rsa key (grep -0x%04x)\n", -i); + exit(1); + } + mbedtls_x509_crt_parse_der(cert, p + n - i, i); + if (ca) cert->next = ca->cert; + mbedtls_x509write_crt_free(&wcert); + mbedtls_ctr_drbg_free(&kr); + free(p); + if ((rc = mbedtls_pk_check_pair(&cert->pk, key))) { + fprintf(stderr, "error: generate key (grep -0x%04x)\n", -rc); + exit(1); + } + UseCertificate(cert, key); + certs.p = realloc(certs.p, ++certs.n * sizeof(*certs.p)); + certs.p[certs.n - 1].cert = cert; + certs.p[certs.n - 1].key = key; + return certs.p + certs.n - 1; +} + +static void LoadCertificates(void) { + size_t i; + bool havecert; + struct Cert *ksk, *cert; + havecert = false; + for (i = 0; i < certs.n; ++i) { + if (certs.p[i].key && certs.p[i].cert && !certs.p[i].cert->ca_istrue && + !mbedtls_x509_crt_check_key_usage(certs.p[i].cert, + MBEDTLS_X509_KU_DIGITAL_SIGNATURE) && + !mbedtls_x509_crt_check_extended_key_usage( + certs.p[i].cert, MBEDTLS_OID_SERVER_AUTH, + MBEDTLS_OID_SIZE(MBEDTLS_OID_SERVER_AUTH))) { + UseCertificate(certs.p[i].cert, certs.p[i].key); + havecert = true; + } + } + if (!havecert) { + if ((ksk = GetKeySigningKey())) { + DEBUGF("generating ssl certificates using %`'s", + gc(FormatX509Name(&ksk->cert->subject))); + } else { + VERBOSEF("could not find non-CA SSL certificate key pair with" + " -addext keyUsage=digitalSignature" + " -addext extendedKeyUsage=serverAuth"); + VERBOSEF("could not find CA key signing key pair with" + " -addext keyUsage=keyCertSign"); + WARNF("generating self-signed ssl certificates"); + } +#ifdef MBEDTLS_ECP_C + cert = GenerateEcpCertificate(ksk); + LogCertificate("generated nist elliptic curve certificate", cert->cert); +#endif +#ifdef MBEDTLS_RSA_C + cert = GenerateRsaCertificate(ksk); + LogCertificate("generated rivest–shamir–adleman certificate", cert->cert); +#endif + } +} + +static void LoadSslRoots(void) { + DIR *d; + const char *dir; + struct dirent *e; + char *p, path[300]; + dir = "zip:usr/share/ssl/root"; + CHECK((d = opendir(dir)), "%s", dir); + while ((e = readdir(d))) { + if (e->d_type != DT_REG) continue; + snprintf(path, sizeof(path), "%s/%s", dir, e->d_name); + ProgramFile(path, ProgramCertificate); + } + closedir(d); +} + static bool ClientAcceptsGzip(void) { return msg.version >= 10 && /* RFC1945 § 3.5 */ HeaderHas(&msg, inbuf.p, kHttpAcceptEncoding, "gzip", 4); @@ -1080,7 +1837,7 @@ static void IndexAssets(void) { uint64_t cf; struct Asset *p; uint32_t i, n, m, step, hash; - DEBUGF("indexing assets"); + DEBUGF("indexing assets (inode %#lx)", zst.st_ino); CHECK_GE(HASH_LOAD_FACTOR, 2); CHECK(READ32LE(zcdir) == kZipCdir64HdrMagic || READ32LE(zcdir) == kZipCdirHdrMagic); @@ -1384,11 +2141,18 @@ static wontreturn void PrintUsage(FILE *f, int rc) { static void GetOpts(int argc, char *argv[]) { int opt; while ((opt = getopt(argc, argv, - "azhdugvsmbfl:p:r:R:H:c:L:P:U:G:B:D:t:M:")) != -1) { + "azhdugvVsmbfyl:p:r:R:H:c:L:P:U:G:BD:t:M:C:K:F:")) != + -1) { switch (opt) { case 'v': __log_level++; break; + case 'V': + mbedtls_debug_threshold++; + break; + case 'y': + dontupgradeinsecurerequests = true; + break; case 's': __log_level--; break; @@ -1416,6 +2180,9 @@ static void GetOpts(int argc, char *argv[]) { case 'f': funtrace = true; break; + case 'B': + suiteb = true; + break; case 'k': encouragekeepalive = true; break; @@ -1442,10 +2209,7 @@ static void GetOpts(int argc, char *argv[]) { maxpayloadsize = MAX(1450, maxpayloadsize); break; case 'l': - CHECK_EQ(1, inet_pton(AF_INET, optarg, &serveraddr.sin_addr)); - break; - case 'B': - ProgramBrand(optarg); + ProgramAddr(optarg); break; case 'H': ProgramHeader(optarg); @@ -1462,6 +2226,14 @@ static void GetOpts(int argc, char *argv[]) { case 'G': daemongid = atoi(optarg); break; +#ifndef UNSECURE + case 'C': + ProgramFile(optarg, ProgramCertificate); + break; + case 'K': + ProgramFile(optarg, ProgramPrivateKey); + break; +#endif case 'h': PrintUsage(stdout, EXIT_SUCCESS); default: @@ -1471,6 +2243,10 @@ static void GetOpts(int argc, char *argv[]) { if (logpath) { CHECK_NOTNULL(freopen(logpath, "a", stderr)); } + if (!!keypath ^ !!certpath) { + fprintf(stderr, "error: the -C and -K flags need to be passed together\n"); + exit(1); + } } static void AppendLogo(void) { @@ -1487,9 +2263,9 @@ static void AppendLogo(void) { } } -static inline ssize_t Send(struct iovec *iov, int iovlen) { +static ssize_t Send(struct iovec *iov, int iovlen) { ssize_t rc; - if ((rc = WritevAll(client, iov, iovlen)) == -1) { + if ((rc = writer(client, iov, iovlen)) == -1) { if (errno == ECONNRESET) { LockInc(&shared->c.writeresets); DEBUGF("%s write reset", DescribeClient()); @@ -1712,7 +2488,7 @@ static bool IsHiddenPath(const char *s, size_t n) { static char *GetBasicAuthorization(size_t *z) { size_t n; const char *p, *q; - struct HttpRequestSlice *g; + struct HttpSlice *g; g = msg.headers + (HasHeader(kHttpProxyAuthorization) ? kHttpProxyAuthorization : kHttpAuthorization); @@ -1742,12 +2518,12 @@ static void LaunchBrowser(const char *path) { sigset_t chldmask, savemask; struct sigaction ignore, saveint, savequit; path = firstnonnull(path, "/"); - addr = serveraddr.sin_addr; + addr = serveraddr->sin_addr; if (!addr.s_addr) addr.s_addr = htonl(INADDR_LOOPBACK); if (*path != '/') path = gc(xasprintf("/%s", path)); if ((prog = commandv(GetSystemUrlLauncherCommand(), gc(malloc(PATH_MAX))))) { u = gc(xasprintf("http://%s:%d%s", inet_ntoa(addr), - ntohs(serveraddr.sin_port), gc(EscapePath(path, -1, 0)))); + ntohs(serveraddr->sin_port), gc(EscapePath(path, -1, 0)))); DEBUGF("opening browser with command %s %s\n", prog, u); ignore.sa_flags = 0; ignore.sa_handler = SIG_IGN; @@ -1991,7 +2767,6 @@ static char *ServeStatusz(void) { AppendLong1("ppid", getppid()); AppendLong1("now", nowl()); AppendLong1("nowish", shared->nowish); - AppendLong1("heartless", heartless); AppendLong1("gmtoff", gmtoff); AppendLong1("CLK_TCK", CLK_TCK); AppendLong1("startserver", startserver); @@ -2261,7 +3036,11 @@ static int LuaLoadAsset(lua_State *L) { lua_pushlstring(L, data, size); free(data); return 1; + } else { + DEBUGF("could not load asset: %`'.*s", pathlen, path); } + } else { + DEBUGF("could not find asset: %`'.*s", pathlen, path); } return 0; } @@ -2298,7 +3077,7 @@ static bool IsText(const void *data, size_t size) { return true; } -int LuaStoreAsset(lua_State *L) { +static int LuaStoreAsset(lua_State *L) { int64_t ft; int i, mode; uint32_t crc; @@ -2348,7 +3127,6 @@ int LuaStoreAsset(lua_State *L) { ////////////////////////////////////////////////////////////////////////////// CHECK_NE(-1, fcntl(zfd, F_SETLKW, &(struct flock){F_WRLCK})); OpenZip(false); - now = nowl(); a = GetAsset(path, pathlen); mode = luaL_optinteger(L, 3, a ? GetMode(a) : 0644); @@ -2357,7 +3135,6 @@ int LuaStoreAsset(lua_State *L) { dosmode = !(mode & 0200) ? kNtFileAttributeReadonly : 0; ft = (now + MODERNITYSECONDS) * HECTONANOSECONDS; GetDosLocalTime(now, &mtime, &mdate); - // local file header if (uselen >= 0xffffffff || datalen >= 0xffffffff) { era = kZipEra2001; @@ -2385,11 +3162,9 @@ int LuaStoreAsset(lua_State *L) { p = WRITE16LE(p, v[2].iov_len); v[1].iov_len = pathlen; v[1].iov_base = path; - // file data v[3].iov_len = datalen; v[3].iov_base = data; - // old central directory entries oldcdirsize = GetZipCdirSize(zcdir); oldcdiroffset = GetZipCdirOffset(zcdir); @@ -2405,7 +3180,6 @@ int LuaStoreAsset(lua_State *L) { v[5].iov_base = 0; v[5].iov_len = 0; } - // new central directory entry if (uselen >= 0xffffffff || datalen >= 0xffffffff || zsize >= 0xffffffff) { v[8].iov_base = p = alloca((v[8].iov_len = 2 + 2 + 8 + 8 + 8)); @@ -2450,7 +3224,6 @@ int LuaStoreAsset(lua_State *L) { p = WRITE32LE(p, MIN(zsize, 0xffffffff)); v[7].iov_len = pathlen; v[7].iov_base = path; - // zip64 end of central directory cdiroffset = zsize + v[0].iov_len + v[1].iov_len + v[2].iov_len + v[3].iov_len; @@ -2478,7 +3251,6 @@ int LuaStoreAsset(lua_State *L) { v[10].iov_len = 0; v[10].iov_base = 0; } - // end of central directory v[12].iov_base = GetZipCdirComment(zcdir); v[12].iov_len = GetZipCdirCommentSize(zcdir); @@ -2491,7 +3263,6 @@ int LuaStoreAsset(lua_State *L) { p = WRITE32LE(p, MIN(cdirsize, 0xffffffff)); p = WRITE32LE(p, MIN(cdiroffset, 0xffffffff)); p = WRITE16LE(p, v[12].iov_len); - CHECK_NE(-1, lseek(zfd, zbase + zsize - zmap, SEEK_SET)); CHECK_NE(-1, WritevAll(zfd, v, 13)); CHECK_NE(-1, fcntl(zfd, F_SETLK, &(struct flock){F_UNLCK})); @@ -2655,7 +3426,7 @@ static int LuaGetHost(lua_State *L) { if (url.host.n) { lua_pushlstring(L, url.host.p, url.host.n); } else { - inet_ntop(AF_INET, &serveraddr.sin_addr.s_addr, b, sizeof(b)); + inet_ntop(AF_INET, &serveraddr->sin_addr.s_addr, b, sizeof(b)); lua_pushstring(L, b); } return 1; @@ -2664,7 +3435,7 @@ static int LuaGetHost(lua_State *L) { static int LuaGetPort(lua_State *L) { int i, x = 0; for (i = 0; i < url.port.n; ++i) x = url.port.p[i] - '0' + x * 10; - if (!x) x = ntohs(serveraddr.sin_port); + if (!x) x = ntohs(serveraddr->sin_port); lua_pushinteger(L, x); return 1; } @@ -2699,7 +3470,7 @@ static void LuaPushLatin1(lua_State *L, const char *s, size_t n) { static char *FoldHeader(int h, size_t *z) { char *p; size_t i, n, m; - struct HttpRequestHeader *x; + struct HttpHeader *x; n = msg.headers[h].b - msg.headers[h].a; p = xmalloc(n); memcpy(p, inbuf.p + msg.headers[h].a, n); @@ -3208,6 +3979,11 @@ static noinline int LuaProgramInt(lua_State *L, void P(long)) { return 0; } +static int LuaProgramAddr(lua_State *L) { + ProgramAddr(luaL_checkstring(L, 1)); + return 0; +} + static int LuaProgramPort(lua_State *L) { return LuaProgramInt(L, ProgramPort); } @@ -3216,10 +3992,6 @@ static int LuaProgramCache(lua_State *L) { return LuaProgramInt(L, ProgramCache); } -static int LuaProgramLinger(lua_State *L) { - return LuaProgramInt(L, ProgramLinger); -} - static int LuaProgramTimeout(lua_State *L) { return LuaProgramInt(L, ProgramTimeout); } @@ -3229,6 +4001,26 @@ static int LuaProgramBrand(lua_State *L) { return 0; } +static int LuaProgramPrivateKey(lua_State *L) { +#ifndef UNSECURE + size_t n; + const char *p; + p = luaL_checklstring(L, 1, &n); + ProgramPrivateKey(p, n); +#endif + return 0; +} + +static int LuaProgramCertificate(lua_State *L) { +#ifndef UNSECURE + size_t n; + const char *p; + p = luaL_checklstring(L, 1, &n); + ProgramCertificate(p, n); +#endif + return 0; +} + static int LuaProgramHeader(lua_State *L) { ProgramHeader( gc(xasprintf("%s: %s", luaL_checkstring(L, 1), luaL_checkstring(L, 2)))); @@ -3391,8 +4183,8 @@ static void LuaSetIntField(lua_State *L, const char *k, lua_Integer v) { } static int LuaLaunchBrowser(lua_State *L) { - LaunchBrowser(luaL_optstring(L, 1, "/")); - return 1; + launchbrowser = strdup(luaL_optstring(L, 1, "/")); + return 0; } static regex_t *LuaReCompileImpl(lua_State *L, const char *p, int f) { @@ -3615,11 +4407,13 @@ static const luaL_Reg kLuaFuncs[] = { {"ParseIp", LuaParseIp}, // {"ParseParams", LuaParseParams}, // {"ParseUrl", LuaParseUrl}, // + {"ProgramAddr", LuaProgramAddr}, // {"ProgramBrand", LuaProgramBrand}, // {"ProgramCache", LuaProgramCache}, // + {"ProgramCertificate", LuaProgramCertificate}, // {"ProgramHeader", LuaProgramHeader}, // - {"ProgramLinger", LuaProgramLinger}, // {"ProgramPort", LuaProgramPort}, // + {"ProgramPrivateKey", LuaProgramPrivateKey}, // {"ProgramRedirect", LuaProgramRedirect}, // {"ProgramTimeout", LuaProgramTimeout}, // {"Route", LuaRoute}, // @@ -3703,6 +4497,21 @@ static void LuaReload(void) { #endif } +static void NotifyClose(void) { +#ifndef UNSECURE + if (usessl) { + DEBUGF("SSL notifying close"); + mbedtls_ssl_close_notify(&ssl); + } +#endif +} + +static void ReseedRng(mbedtls_ctr_drbg_context *r, const char *s) { +#ifndef UNSECURE + CHECK_EQ(0, mbedtls_ctr_drbg_reseed(r, (void *)s, strlen(s))); +#endif +} + static const char *DescribeClose(void) { if (killed) return "killed"; if (meltdown) return "meltdown"; @@ -3752,10 +4561,13 @@ static void LogBody(const char *d, const char *s, size_t n) { static ssize_t SendString(const char *s) { size_t n; ssize_t rc; + struct iovec iov; n = strlen(s); + iov.iov_base = s; + iov.iov_len = n; if (logmessages) LogMessage("sending", s, n); for (;;) { - if ((rc = write(client, s, n)) != -1 || errno != EINTR) { + if ((rc = writer(client, &iov, 1)) != -1 || errno != EINTR) { return rc; } } @@ -3791,12 +4603,6 @@ static void EnterMeltdownMode(void) { ++shared->c.meltdowns; } -static void EmergencyClose(int fd) { - struct linger nolinger = {0}; - setsockopt(fd, SOL_SOCKET, SO_LINGER, &nolinger, sizeof(nolinger)); - close(fd); -} - static char *HandlePayloadDisconnect(void) { LockInc(&shared->c.payloaddisconnects); LogClose("payload disconnect"); @@ -3888,12 +4694,12 @@ static char *HandlePayloadReadError(void) { } static void HandleForkFailure(void) { - FATALF("%s too many processes %s", DescribeServer(), strerror(errno)); + FATALF("too many processes %s", strerror(errno)); LockInc(&shared->c.forkerrors); LockInc(&shared->c.dropped); EnterMeltdownMode(); SendServiceUnavailable(); - EmergencyClose(client); + close(client); } static void HandleFrag(size_t got) { @@ -3916,6 +4722,8 @@ static void HandleReload(void) { } static void HandleHeartbeat(void) { + size_t i; + sigset_t mask; if (nowl() - lastrefresh > 60 * 60) RefreshTime(); UpdateCurrentDate(nowl()); Reindex(); @@ -3923,6 +4731,11 @@ static void HandleHeartbeat(void) { #ifndef STATIC LuaRun("/.heartbeat.lua"); #endif + for (i = 0; i < servers.n; ++i) { + if (polls[i].fd < 0) { + polls[i].fd = -polls[i].fd; + } + } } static char *OpenAsset(struct Asset *a) { @@ -3996,7 +4809,7 @@ char *SynchronizeStream(void) { while (amtread < hdrsize + cl) { LockInc(&shared->c.frags); if (++frags == 64) HandlePayloadSlowloris(); - if ((rc = read(client, inbuf.p + amtread, inbuf.n - amtread)) != -1) { + if ((rc = reader(client, inbuf.p + amtread, inbuf.n - amtread)) != -1) { if (!(got = rc)) return HandlePayloadDisconnect(); amtread += got; } else if (errno == EINTR) { @@ -4025,11 +4838,22 @@ static void ParseRequestParameters(void) { } else if (HasHeader(kHttpHost)) { FreeLater( ParseHost(HeaderData(kHttpHost), HeaderLength(kHttpHost), &url)); + } else { + FreeLater(ParseHost(DescribeServer(), -1, &url)); } } else if (!url.path.n) { url.path.p = "/"; url.path.n = 1; } + if (!url.scheme.n) { + if (usessl) { + url.scheme.p = "https"; + url.scheme.n = 5; + } else { + url.scheme.p = "http"; + url.scheme.n = 4; + } + } if (HasHeader(kHttpContentType) && IsMimeType(HeaderData(kHttpContentType), HeaderLength(kHttpContentType), "application/x-www-form-urlencoded")) { @@ -4040,7 +4864,7 @@ static void ParseRequestParameters(void) { static bool HasAtMostThisElement(int h, const char *s) { size_t i, n; - struct HttpRequestHeader *x; + struct HttpHeader *x; if (HasHeader(h)) { n = strlen(s); if (!SlicesEqualCase(s, n, inbuf.p + msg.headers[h].a, @@ -4058,6 +4882,30 @@ static bool HasAtMostThisElement(int h, const char *s) { return true; } +static char *SendHttpsRedirect(void) { + size_t n; + char *p, *old, *neu; + LockInc(&shared->c.sslupgrades); + if ((old = FreeLater(EncodeUrl(&url, &n))) && n < hdrbuf.n / 2) { + url.scheme.p = "https"; + url.scheme.n = 5; + if (listeningonport443) { + url.port.p = 0; + url.port.n = 0; + } else if (!url.port.n) { + url.port.p = "80"; + url.port.n = 2; + } + neu = FreeLater(EncodeUrl(&url, 0)); + LOGF("REDIRECT %s %.*s → %.*s", DescribeClient(), old, neu); + p = SetStatus(307, "Temporary Redirect"); + p = AppendHeader(p, "Location", neu); + return p; + } else { + return 0; + } +} + static char *HandleRequest(void) { char *p; if (msg.version == 11) { @@ -4088,19 +4936,25 @@ static char *HandleRequest(void) { return HandleTransferRefused(); } ParseRequestParameters(); - if (!url.path.n || url.path.p[0] != '/' || + if (!url.host.n || !url.path.n || url.path.p[0] != '/' || !IsAcceptablePath(url.path.p, url.path.n) || !IsAcceptableHost(url.host.p, url.host.n) || !IsAcceptablePort(url.port.p, url.port.n)) { LockInc(&shared->c.urisrefused); return ServeFailure(400, "Bad URI"); } + if (HasHeader(kHttpUpgradeInsecureRequests) && !usessl && + upgradeinsecurerequests && (p = SendHttpsRedirect())) { + return p; + } LOGF("RECEIVED %s HTTP%02d %.*s %s %`'.*s %`'.*s", DescribeClient(), msg.version, msg.xmethod.b - msg.xmethod.a, inbuf.p + msg.xmethod.a, FreeLater(EncodeUrl(&url, 0)), HeaderLength(kHttpReferer), HeaderData(kHttpReferer), HeaderLength(kHttpUserAgent), HeaderData(kHttpUserAgent)); +#ifndef STATIC if (hasluaglobalhandler) return LuaOnHttpRequest(); +#endif return Route(url.host.p, url.host.n, url.path.p, url.path.n); } @@ -4308,6 +5162,10 @@ static char *ServeAsset(struct Asset *a, const char *path, size_t pathlen) { } static char *SetStatus(unsigned code, const char *reason) { + if (msg.version == 10) { + if (code == 307) code = 302; + if (code == 308) code = 301; + } statuscode = code; stpcpy(hdrbuf.p, "HTTP/1.0 000 "); hdrbuf.p[7] += msg.version & 1; @@ -4461,9 +5319,10 @@ static void InitRequest(void) { } static void HandleMessages(void) { + bool once; ssize_t rc; size_t got; - for (;;) { + for (once = false;;) { InitRequest(); startread = nowl(); for (;;) { @@ -4471,11 +5330,27 @@ static void HandleMessages(void) { startrequest = nowl(); if (HandleMessage()) break; } - if ((rc = read(client, inbuf.p + amtread, inbuf.n - amtread)) != -1) { + if ((rc = reader(client, inbuf.p + amtread, inbuf.n - amtread)) != -1) { startrequest = nowl(); got = rc; amtread += got; if (amtread) { + if (!once) { + once = true; + if (inbuf.p[0] == 22) { +#ifdef UNSECURE + WARNF("%s wants SSL but redbean was compiled with -DUNSECURE", + DescribeClient()); + return; +#else + if (TlsSetup()) { + continue; + } else { + return; + } +#endif + } + } DEBUGF("%s read %,zd bytes", DescribeClient(), got); if (HandleMessage()) { break; @@ -4484,6 +5359,7 @@ static void HandleMessages(void) { } } if (!got) { + NotifyClose(); LogClose("disconnect"); return; } @@ -4492,6 +5368,7 @@ static void HandleMessages(void) { } else if (errno == EAGAIN) { LockInc(&shared->c.readtimeouts); if (amtread) SendTimeout(); + NotifyClose(); LogClose("timeout"); return; } else if (errno == ECONNRESET) { @@ -4509,6 +5386,7 @@ static void HandleMessages(void) { LockInc(&shared->c.dropped); SendServiceUnavailable(); } + NotifyClose(); LogClose(DescribeClose()); return; } @@ -4519,7 +5397,11 @@ static void HandleMessages(void) { } if (msgsize == amtread) { amtread = 0; - if (connectionclose || killed || terminated || meltdown) { + if (killed) { + LogClose(DescribeClose()); + return; + } else if (connectionclose || terminated || meltdown) { + NotifyClose(); LogClose(DescribeClose()); return; } @@ -4529,7 +5411,11 @@ static void HandleMessages(void) { DEBUGF("%,ld pipelined bytes", amtread - msgsize); memmove(inbuf.p, inbuf.p + msgsize, amtread - msgsize); amtread -= msgsize; - if (connectionclose || killed) { + if (killed) { + LogClose(DescribeClose()); + return; + } else if (connectionclose) { + NotifyClose(); LogClose(DescribeClose()); return; } @@ -4542,11 +5428,18 @@ static void HandleMessages(void) { } } -static void HandleConnection(void) { +static void CloseServerFds(void) { + size_t i; + for (i = 0; i < servers.n; ++i) { + close(servers.p[i].fd); + } +} + +static void HandleConnection(size_t i) { int pid; clientaddrsize = sizeof(clientaddr); - if ((client = accept4(server, &clientaddr, &clientaddrsize, SOCK_CLOEXEC)) != - -1) { + if ((client = accept4(servers.p[i].fd, &clientaddr, &clientaddrsize, + SOCK_CLOEXEC)) != -1) { startconnection = nowl(); messageshandled = 0; if (uniprocess) { @@ -4557,6 +5450,7 @@ static void HandleConnection(void) { case 0: meltdown = false; connectionclose = false; + ReseedRng(&rng, "child"); if (funtrace && !IsTiny()) { ftrace_install(); } @@ -4567,49 +5461,62 @@ static void HandleConnection(void) { default: ++shared->workers; close(client); + ReseedRng(&rng, "parent"); return; } } - if (!pid) close(server); + if (!pid) CloseServerFds(); DEBUGF("%s accepted", DescribeClient()); HandleMessages(); DEBUGF("%s closing after %,ldµs", DescribeClient(), (long)((nowl() - startconnection) * 1e6L)); - if (close(client) == -1) { - LockInc(&shared->c.closeerrors); - WARNF("%s close failed", DescribeClient()); - } if (!pid) { _exit(0); } else { + close(client); + oldin.p = 0; + oldin.n = 0; + if (inbuf.c) { + inbuf.p -= inbuf.c; + inbuf.n += inbuf.c; + inbuf.c = 0; + } +#ifndef UNSECURE + if (usessl) { + usessl = false; + reader = read; + writer = WritevAll; + mbedtls_ssl_session_reset(&ssl); + } +#endif CollectGarbage(); } } else if (errno == EINTR || errno == EAGAIN) { LockInc(&shared->c.acceptinterrupts); } else if (errno == ENFILE) { LockInc(&shared->c.enfiles); - WARNF("%s too many open files", DescribeServer()); - EnterMeltdownMode(); + WARNF("too many open files"); + meltdown = true; } else if (errno == EMFILE) { LockInc(&shared->c.emfiles); - WARNF("%s ran out of open file quota", DescribeServer()); - EnterMeltdownMode(); + WARNF("ran out of open file quota"); + meltdown = true; } else if (errno == ENOMEM) { LockInc(&shared->c.enomems); - WARNF("%s ran out of memory"); - EnterMeltdownMode(); + WARNF("ran out of memory"); + meltdown = true; } else if (errno == ENOBUFS) { LockInc(&shared->c.enobufs); - WARNF("%s ran out of buffer"); - EnterMeltdownMode(); + WARNF("ran out of buffer"); + meltdown = true; } else if (errno == ENONET) { LockInc(&shared->c.enonets); WARNF("%s network gone", DescribeServer()); - sleep(1); + polls[i].fd = -polls[i].fd; } else if (errno == ENETDOWN) { LockInc(&shared->c.enetdowns); WARNF("%s network down", DescribeServer()); - sleep(1); + polls[i].fd = -polls[i].fd; } else if (errno == ECONNABORTED) { LockInc(&shared->c.acceptresets); WARNF("%s connection reset before accept"); @@ -4622,24 +5529,43 @@ static void HandleConnection(void) { } } -static void Tune(int a, int b, int x, const char *as, const char *bs) { -#define Tune(A, B, X) Tune(A, B, X, #A, #B) +static void HandlePoll(void) { + size_t i; + if (poll(polls, servers.n, 500) != -1) { + for (i = 0; i < servers.n; ++i) { + if (polls[i].revents) { + serveraddr = &servers.p[i].addr; + HandleConnection(i); + } + } + } else if (errno == EINTR || errno == EAGAIN) { + LockInc(&shared->c.pollinterrupts); + } else if (errno == ENOMEM) { + LockInc(&shared->c.enomems); + WARNF("%s ran out of memory"); + meltdown = true; + } else { + FATALF("poll error %s", strerror(errno)); + } +} + +static void Tune(int fd, int a, int b, int x, const char *as, const char *bs) { +#define Tune(F, A, B, X) Tune(F, A, B, X, #A, #B) if (!b) return; - if (setsockopt(server, a, b, &x, sizeof(x)) == -1) { + if (setsockopt(fd, a, b, &x, sizeof(x)) == -1) { WARNF("setsockopt(server, %s, %s, %d) failed %s", as, bs, x, strerror(errno)); } } -static void TuneSockets(void) { - Tune(SOL_SOCKET, SO_REUSEADDR, 1); - Tune(IPPROTO_TCP, TCP_CORK, 0); - Tune(IPPROTO_TCP, TCP_NODELAY, 1); - Tune(IPPROTO_TCP, TCP_FASTOPEN, 1); - Tune(IPPROTO_TCP, TCP_QUICKACK, 1); - setsockopt(server, SOL_SOCKET, SO_LINGER, &linger, sizeof(linger)); - setsockopt(server, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); - setsockopt(server, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); +static void TuneServer(int fd) { + Tune(fd, SOL_SOCKET, SO_REUSEADDR, 1); + Tune(fd, IPPROTO_TCP, TCP_CORK, 0); + Tune(fd, IPPROTO_TCP, TCP_NODELAY, 1); + Tune(fd, IPPROTO_TCP, TCP_FASTOPEN, 1); + Tune(fd, IPPROTO_TCP, TCP_QUICKACK, 1); + setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)); + setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout)); } static void RestoreApe(void) { @@ -4661,8 +5587,82 @@ static void RestoreApe(void) { } } +static void Listen(void) { + char ipbuf[16]; + size_t i, j, n; + uint32_t ip, port, addrsize, *ifs, *ifp; + if (!ports.n) { + ProgramPort(8080); + } + if (!ips.n) { + if ((ifs = GetHostIps()) && *ifs) { + for (ifp = ifs; *ifp; ++ifp) { + sprintf(ipbuf, "%hhu.%hhu.%hhu.%hhu", *ifp >> 24, *ifp >> 16, *ifp >> 8, + *ifp); + ProgramAddr(ipbuf); + } + } else { + ProgramAddr("0.0.0.0"); + } + free(ifs); + } + servers.p = malloc(ips.n * ports.n * sizeof(*servers.p)); + for (n = i = 0; i < ips.n; ++i) { + for (j = 0; j < ports.n; ++j, ++n) { + memset(servers.p + n, 0, sizeof(*servers.p)); + servers.p[n].addr.sin_family = AF_INET; + servers.p[n].addr.sin_port = htons(ports.p[j]); + servers.p[n].addr.sin_addr.s_addr = htonl(ips.p[i]); + if ((servers.p[n].fd = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, + IPPROTO_TCP)) == -1) { + perror("socket"); + exit(1); + } + TuneServer(servers.p[n].fd); + if (bind(servers.p[n].fd, &servers.p[n].addr, + sizeof(servers.p[n].addr)) == -1) { + fprintf(stderr, "error: %s: %hhu.%hhu.%hhu.%hhu:%hu\n", strerror(errno), + ips.p[i] >> 24, ips.p[i] >> 16, ips.p[i] >> 8, ips.p[i], + ports.p[j]); + exit(1); + } + if (listen(servers.p[n].fd, 10) == -1) { + perror("listen"); + exit(1); + } + addrsize = sizeof(servers.p[n].addr); + if (getsockname(servers.p[n].fd, &servers.p[n].addr, &addrsize) == -1) { + perror("getsockname"); + exit(1); + } + port = ntohs(servers.p[n].addr.sin_port); + ip = ntohl(servers.p[n].addr.sin_addr.s_addr); + if (ip == INADDR_ANY) ip = INADDR_LOOPBACK; + LOGF("LISTEN http://%hhu.%hhu.%hhu.%hhu:%d", ip >> 24, ip >> 16, ip >> 8, + ip, port); + if (printport && !ports.p[j]) { + printf("%d\n", port); + fflush(stdout); + } + } + } + servers.n = n; + polls = malloc(n * sizeof(*polls)); + for (i = 0; i < n; ++i) { + polls[i].fd = servers.p[i].fd; + polls[i].events = POLLIN; + polls[i].revents = 0; + } +} + void RedBean(int argc, char *argv[]) { - uint32_t addrsize; + long double t; +#ifndef UNSECURE + InitializeRng(&rng); + LoadSslRoots(); +#endif + reader = read; + writer = WritevAll; gmtoff = GetGmtOffset((lastrefresh = startserver = nowl())); CHECK_GT(CLK_TCK, 0); CHECK_NE(MAP_FAILED, @@ -4684,40 +5684,25 @@ void RedBean(int argc, char *argv[]) { xsigaction(SIGCHLD, OnChld, 0, 0, 0); xsigaction(SIGUSR1, OnUsr1, 0, 0, 0); xsigaction(SIGUSR2, OnUsr2, 0, 0, 0); - xsigaction(SIGALRM, OnAlrm, 0, 0, 0); xsigaction(SIGPIPE, SIG_IGN, 0, 0, 0); /* TODO(jart): SIGXCPU and SIGXFSZ */ - server = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, IPPROTO_TCP); - CHECK_NE(-1, server); - TuneSockets(); - if (bind(server, &serveraddr, sizeof(serveraddr)) == -1) { - if (errno == EADDRINUSE) { - fprintf(stderr, "error: address in use\n" - "try passing the -p PORT flag\n"); - } else { - fprintf(stderr, "error: bind() failed: %s\n", strerror(errno)); - } - exit(1); - } - CHECK_NE(-1, listen(server, 10)); - addrsize = sizeof(serveraddr); - CHECK_NE(-1, getsockname(server, &serveraddr, &addrsize)); - struct in_addr addr = serveraddr.sin_addr; - if (addr.s_addr == INADDR_ANY) addr.s_addr = htonl(INADDR_LOOPBACK); - LOGF("LISTEN %s see http://%s:%d", DescribeServer(), inet_ntoa(addr), - ntohs(serveraddr.sin_port)); - if (printport) { - printf("%d\n", ntohs(serveraddr.sin_port)); - fflush(stdout); + Listen(); +#ifndef UNSECURE + mbedtls_ssl_config_defaults( + &conf, MBEDTLS_SSL_IS_SERVER, MBEDTLS_SSL_TRANSPORT_STREAM, + suiteb ? MBEDTLS_SSL_PRESET_SUITEB : MBEDTLS_SSL_PRESET_DEFAULT); + mbedtls_ssl_conf_dbg(&conf, TlsDebug, 0); + LoadCertificates(); + mbedtls_ssl_conf_rng(&conf, mbedtls_ctr_drbg_random, &rng); +#endif + if (launchbrowser) { + LaunchBrowser(launchbrowser); } if (daemonize) { Daemonize(); } else { setpgid(getpid(), getpid()); } - if (setitimer(ITIMER_REAL, &kHeartbeat, NULL) == -1) { - heartless = true; - } UpdateCurrentDate(nowl()); freelist.c = 8; freelist.p = xcalloc(freelist.c, sizeof(*freelist.p)); @@ -4733,18 +5718,17 @@ void RedBean(int argc, char *argv[]) { } else if (invalidated) { HandleReload(); invalidated = false; - } else if (heartbeat) { - HandleHeartbeat(); - heartbeat = false; } else if (meltdown) { EnterMeltdownMode(); meltdown = false; + } else if ((t = nowl()) - lastheartbeat > .5) { + lastheartbeat = t; + HandleHeartbeat(); } else { - if (heartless) HandleHeartbeat(); - HandleConnection(); + HandlePoll(); } } - LOGIFNEG1(close(server)); + CloseServerFds(); if (keyboardinterrupt) { LOGF("received keyboard interrupt"); } else { diff --git a/tool/viz/cpuid.c b/tool/viz/cpuid.c index 6e1fddeaa..1a8295eff 100644 --- a/tool/viz/cpuid.c +++ b/tool/viz/cpuid.c @@ -76,9 +76,9 @@ void showcachesizes(void) { printf("%-19s%s%s %u-way %,7u byte cache w/%s %,5u sets of %u byte lines " "shared across %u threads\n", gc(xasprintf("Level %u%s", CPUID4_CACHE_LEVEL, - CPUID4_CACHE_TYPE == 1 - ? " data" - : CPUID4_CACHE_TYPE == 2 ? " code" : "")), + CPUID4_CACHE_TYPE == 1 ? " data" + : CPUID4_CACHE_TYPE == 2 ? " code" + : "")), CPUID4_IS_FULLY_ASSOCIATIVE ? " fully-associative" : "", CPUID4_COMPLEX_INDEXING ? " complexly-indexed" : "", CPUID4_WAYS_OF_ASSOCIATIVITY, CPUID4_CACHE_SIZE_IN_BYTES, @@ -110,12 +110,15 @@ int main(int argc, char *argv[]) { printf("Running inside %.4s%.4s%.4s (eax=%#x)\n", &ebx, &ecx, &edx, eax); } + printf("\n"); + SHOW(kX86CpuFamily); + SHOW(kX86CpuModel); printf("\n"); SHOW(kX86CpuStepping); - SHOW(kX86CpuModelid); - SHOW(kX86CpuFamilyid); SHOW(kX86CpuType); + SHOW(kX86CpuModelid); SHOW(kX86CpuExtmodelid); + SHOW(kX86CpuFamilyid); SHOW(kX86CpuExtfamilyid); printf("\n"); diff --git a/tool/viz/fliphex.c b/tool/viz/fliphex.c new file mode 100644 index 000000000..aabea90df --- /dev/null +++ b/tool/viz/fliphex.c @@ -0,0 +1,29 @@ +/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ +│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ +╞══════════════════════════════════════════════════════════════════════════════╡ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ +│ │ +│ Permission to use, copy, modify, and/or distribute this software for │ +│ any purpose with or without fee is hereby granted, provided that the │ +│ above copyright notice and this permission notice appear in all copies. │ +│ │ +│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ +│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ +│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ +│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ +│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ +│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ +│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ +│ PERFORMANCE OF THIS SOFTWARE. │ +╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/fmt/conv.h" +#include "libc/stdio/stdio.h" + +int main(int argc, char *argv[]) { + int i, x; + for (i = 1; i < argc; ++i) { + x = strtoul(argv[i], 0, 0); + printf("%#x\n", -x); + } + return 0; +} diff --git a/libc/crypto/invmixcolumns.c b/tool/viz/ntmaster.c similarity index 56% rename from libc/crypto/invmixcolumns.c rename to tool/viz/ntmaster.c index 786550bda..55cd92fea 100644 --- a/libc/crypto/invmixcolumns.c +++ b/tool/viz/ntmaster.c @@ -1,7 +1,7 @@ /*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ │vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ ╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ +│ Copyright 2021 Justine Alexandra Roberts Tunney │ │ │ │ Permission to use, copy, modify, and/or distribute this software for │ │ any purpose with or without fee is hereby granted, provided that the │ @@ -16,35 +16,67 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/crypto/rijndael.h" -#include "libc/dce.h" +#include "libc/log/log.h" +#include "libc/macros.internal.h" +#include "libc/stdio/stdio.h" +#include "libc/str/str.h" +#include "libc/x/x.h" -static noinline aes_block_t xtime(aes_block_t x) { - return ((x ^ (x & 0x80808080)) << 1) ^ (((x & 0x80808080) >> 7) * 0x1b); -} - -static aes_block_t gf256mulx4(aes_block_t x, aes_block_t c) { - return ((((c >> 0 & 0x01010101) * 0xff) & x) ^ - (((c >> 1 & 0x01010101) * 0xff) & xtime(x)) ^ - (((c >> 2 & 0x01010101) * 0xff) & xtime(xtime(x))) ^ - (((c >> 3 & 0x01010101) * 0xff) & xtime(xtime(xtime(x)))) ^ - (((c >> 4 & 0x01010101) * 0xff) & xtime(xtime(xtime(x))))); -} +#define DLL "iphlpapi" /** - * Applies inverse of Rijndael MixColumns() transformation. - * @see FIPS-197 + * @fileoverview Tool for adding rnew libraries to libc/nt/master.sh + * + * If provided with a /tmp/syms.txt file containing one symbol name per + * line, this tool will output the correctly tab indented shell code. */ -aes_block_t InvMixColumns(aes_block_t x) { - uint32_t i; - aes_block_t y = {0, 0, 0, 0}; - aes_block_t c = {0x090D0B0E, 0x090D0B0E, 0x090D0B0E, 0x090D0B0E}; - for (i = 0; i < 4; ++i) { - y ^= gf256mulx4((x & 0xff) * 0x01010101, - (((c >> 000) & 0xff) << 000 | ((c >> 010) & 0xff) << 030 | - ((c >> 020) & 0xff) << 020 | ((c >> 030) & 0xff) << 010)); - x = x << 8 | x >> 24; - c = c << 8 | c >> 24; + +int main(int argc, char *argv[]) { + FILE *f; + int i, n, t; + char *sym, tabs[64]; + showcrashreports(); + f = fopen("/tmp/syms.txt", "r"); + memset(tabs, '\t', 64); + while ((sym = chomp(xgetline(f)))) { + if (strlen(sym)) { + printf("imp\t"); + + /* what we call the symbol */ + i = printf("'%s'", sym); + t = 0; + n = 56; + if (i % 8) ++t, i = ROUNDUP(i, 8); + t += (n - i) / 8; + printf("%.*s", t, tabs); + + /* what the kernel dll calls the symbol */ + i = printf("%s", sym); + t = 0; + n = 56; + if (i % 8) ++t, i = ROUNDUP(i, 8); + t += (n - i) / 8; + printf("%.*s", t, tabs); + + /* dll short name */ + i = printf("%s", DLL); + t = 0; + n = 16; + if (i % 8) ++t, i = ROUNDUP(i, 8); + t += (n - i) / 8; + printf("%.*s", t, tabs); + + /* hint */ + i = printf("0"); + t = 0; + n = 8; + if (i % 8) ++t, i = ROUNDUP(i, 8); + t += (n - i) / 8; + printf("%.*s", t, tabs); + + printf("\n"); + } + free(sym); } - return y; + return 0; }